Infinite Space Federation

The Infinite Space Federation is a site that was originally created for Strange Adventures In Infinite Space, the prequel to Weird Worlds, but the site also has some WW:RTIS content. The site has been pretty much dead for more than two years. However, hidden among those old threads are useful nuggets of pure modding gold.

The single most useful thread at the ISF is the thread with the full dissection of the weapons stats. I'll be mirroring, parsing, organizing, etc, that data here in the near future, starting with a page here labeled weapons.

Until I've got that page running as I'd like it, here's a list of some of the most useful posts from the Infinite Space Federation:

Source: Infinite Space Federation, posted by Mr. Sanity
CODE
TURR X
AIMD X
FLAG [allowfter allowcaps allowpdef {preffter|prefcaps|prefpdef}]

STGE X

TYPE {projectile|beam}
FLAG soundonce continuous homing shootable spiral nocollision instakill instant lightning spin repeat
RATE X Y
CLIP X
NUMB X
SPED X
RANG X
RAND A B C D E F
OFFS A B C
SIZE X
LIFE X
TURN X
CSTG X Y {proximity|findprox|expire}]
DAMG X Y
SOND X Y soundfile {fire|impact|shield|expire}

So far, I've determined:
CODE
FLAG [allowfter allowcaps allowpdef {preffter|prefcaps|prefpdef}]
allowfter: can target fighters
allowcaps: can target capital ships
allowpdef: can target incoming fire
prefftr: fighters have higher targeting priority
prefcaps: capital ships have higher targeting priority
prefpdef: incoming fire has higher targeting priority

CODE
TYPE {projectile|beam}
projectile: attack travels across the screen
beam: attack affects a line from the ship to the target range instantly

CODE
RATE X Y
X: delay between shots
Y: ??

CODE
SPED X
X: speed projectile fires at

CODE
RANG X
X: range of the attack

CODE
LIFE X
X: how long the attack lasts?

CODE
TURN X
X: turn rate of a projectile

CODE
DAMG X Y
X: damage?
Y: ??

Source: Infinite Space Federation, posted by Fingers
CODE

TURR <n> - which turret graphic to use (usually 0: projectile 1: beam 2: missile)
AIMD <n> - maximum allowed aim deviation where the gun will still fire (higher for guns that don't have to point exactly at the target to be effective)
RATE <fire> <reload> - time between shots. If the weapon uses "clips" the reload time determines how long it takes to load a new clip. (see gatling laser, fusion rocket)
CLIP <n> - how many shots per clip.
NUMB <n> - how many shots per firing (e.g. micrometeorite gun)
SIZE <n> - the size of the collision circle for a shootable projectile (point defense has to hit a circle with this diameter)
TURN <n> - maximum turn rate for a homing projectile
DAMG <min> <max> - these should both be set to the same value for now.
SPED, LIFE, RAND and OFFS work just like with the particles (see the tutorial). If LIFE is not defined for a projectile, it's calculated automatically based on range and speed.
SOND <volume> <priority> <filename> <event> - volume is in percent, higher priority sounds may cut off lower priority ones if the game runs out of channels.
CSTG <stage> <param> <trigger> - change to stage <stage> if trigger event occurs. the extra parameter is used for proximity settings (how close to the target it triggers).

FLAG values:
soundonce - play firing sound only once (for burst weapons)
burst - always empty the whole clip at once (gatling laser, fusion rocket)
continuous - do continuous damage over time (most beams)
instant - do damage just once (like the lightning gun and gatling laser)
homing - a homing missile (type must be a projectile)
shootable - can be targeted by point defense
spiral - used by the fiery furiees
nocollision - doesn't collide with ships (e.g. particle vortex cannon)
instakill - kills target instantly (fiery furies)
lightning - beam is distorted like a lightning bolt
spin - TURN rate is used to make the projectile spin while in flight
repeat - this stage is fired repeatedly (doesn't destroy the previous stage when triggered)

Source: Infinite Space Federation, posted by Fingers
The damage numbers and shield strengths are in 1/100ths of a hull hitpoint to allow better granularity for continuous-damage beams and recharging shields (Actually hull points are internally multiplied by 100, but it's the same effect). Just imagine a decimal point before the last two digits…

For continuous damage and shield recharge (par1), the values turn out to equal "hull points per second" as the game logic runs 100 times per second. The total damage for a continuous beam is then damage*life as the life is in 1/100ths of a second.

So if you have a corvette with 35 hull points it's going to take seven hits of a plasma blaster (damage 5.00). An electron shield is the equivalent of 20.00 hull points, and its recharge rate is 3 hull points per second (0.03 per frame).

Note that about half the hits that penetrate the shield will go into system damage, so in practice you need about twice the number of impacts to destroy a hull. Each ship system has 10 hitpoints, and the damage to systems can be further modified by a scalar that's in the hull's .ini file.

Source: Infinite Space Federation, posted by Fingers
The stretch flag stretches the sprite lengthwise to match the speed of the projectile (So it begins where the shot was last frame, ends where it is now). If the projectile isn't moving fast like the railgun then it'll be squashed very short and look like it's going sideways.

Source: Infinite Space Federation, posted by Fingers
while there's no splash damage as such, you could make a stage that peppers the surrounding area with invisible projectiles that cause damage. A bit like the Tchorak weapon explosions. If it bothers you that the ship you hit stops the "shrapnel", you could make it appear randomly within a circle around the impact rather than flying out of the impact point itself.

For example, the stage might have stuff like this:
NUMB 30 <- make a bunch of them
SPED 0 <- these'll just appear for a moment, don't need to move
LIFE 1 <- shortest life possible
RAND 0 100 180 0 0 0 <- appear randomly within 100 meters of impact

Test with a visible sprite, and when you've tuned it to perfection you can remove the sprite and make it an invisible blast damage effect.

Source: Infinite Space Federation, posted by Fingers
With beams, you can make it not hit anything by omitting the "continuous" and "instant" flags that determine when it does damage. I don't think you can stage out of a beam though (To fire the projectile after the beam is done).

Source: Inf. Space Fed., posted by WhiteNoiz
The easiest thing to do is try to look at an existing quest when trying to make a new quest.. One of the more complicated quests is the damocles quest, which is a nice place to look if you want to learn some things. The damocles quest defines 3 stars. For instance:

STAR 0
FLAG protect faraway
PLNC gasgiant
FLET damocles 0
END STAR

Defines a star with a gasgiant planet. It adds a fleet at that star (damocles = the race of the fleet, 0 = which fleet formation to add.. see the race data for more info). Protect [I think] means the fleet stays at this star (not really used). Faraway means this star will be far away from the player at the start of the game. Each star is randomly placed each time the game is generated but you can use flags like nearby or faraway to determine how far from the starting world they are created.

next the quest creates a star where the Horlodge item is found:

STAR 1
FLAG protect
ITEM it_horloge
UVAR horloge unused
END STAR

Next the blackhole where primordius is found (spoiler):

STAR 2
FLAG protect faraway
STRT exo_blhole
PLNT none
FLET primordius 0
HOME primordius
END STAR

STRT (sets the type as a blackhole), no planets,
FLET creates the primordius "fleet"
and HOME designates this as the homeworld for the 'primordius' race

Next we define some conditions that we may use to trigger quest related events (ie, bringing up a popup window, blowing up a star, giving an item, etc).

The first one is:

CONDITION 0
TYPE explore
STR0 0
END CONDITION

This is the most basic event. Basically this condition is 'true' whenever we explore Star 0 (the first star we defined - the one that has the damocles). We won't be able to explore this star until we defeat the damocles defenses..

next:

CONDITION 1
TYPE explore
STR0 2
END CONDITION

true if you explore the star where primordius is (star 2)

CONDITION 2
TYPE haveitem
STR0 it_horloge
END CONDITION

true if you have the horlodge

etc etc

Skipping down to the interesting part - the part where we defined the events. Here's the first one:

PAGE 0
REQ0 0
GFXP misc/events.jpg 5
TITL Damocles
TEXT As dawn's crescent illuminates the horizon of this immense alien world, a wondrous sight is revealed. Once legendary, now fact. The starship Damocles is yours to command!
MUSC music/damocles.ogg
END PAGE

PAGE - maybe fingers can clarify, but each event has a page associated with it. The number is an identifier that is used with some commands (like the YESNO popup).

REQ0 0 means that we are requiring condition 0 (exploring the damocles star)
GFXP tells which graphic to display
TITL - title of the popup

Here's another one:

PAGE 2
REQ0 2
REQ1 3
XPLR 2 1
SVAR horloge used
ACTN popup
GFXP misc/sucked.jpg 0
TITL Horloge of Primordius
TEXT The odd clockwork horloge reveals the location of Primordius, Dread Lord of the Dark Traverse, and a prophecy: The hero will go to the <uvar=exploredstar> black hole with Damocles to save the galaxy!
MUSC music/blackhole.ogg
END PAGE

This one requires conditions 2 and 3 (having the horlodge and that the horlodge is unused). Basically this displays the first time you get the horlodge. Since it sets the SVAR horlodge used, it won't show up again (condition 3 checks for this). It also marks star 2 as explored (XPLR 2 1). This lets you see where primordius is at (star 2 is primordius). The rest is pretty standard..

Anyway, I hope that's enough to get you started. If there are any questions I'd be happy to answer them.

Source: Inf. Space Fed., posted by Fingers
A few additions:

The "protect" flag at the quest star setup gives the star system a protected status. This means (at least) the following:
- no random alien fleets will appear at that star system
- no moving aliens (e.g. Kawangi) will ever go to that star system
- aethric mirror cannot move fleets placed there (space hulk, primordius etc) until the quest has been completed.

The "UVAR horloge unused" sets up the "horloge" user variable. This is later used to track whether the player has used the horloge. Each user variable should be established this way to make sure its value is defined before some quest checks what it is…

The mainquest KEYS value is slightly redundant. Generally this is used to exclude another quest that has the same key, but since the game only picks one mainquest based on the FLAG it's not necessary. A mainquest will appear (roughly) in one game out of eight. However, it'd be possible to create a "default mainquest" using "KEYS mainquest" and "FLAG always". This quest would always activate if the other mainquests were not (ie. seven games out of eight) which could be useful in a mod.

The PAGE block is indeed an "event". It usually has a page of text with an image, but if the ACTN line doesn't include "popup" then nothing will be displayed. Note that if the page is triggered by an exploration event, it will be displayed in the exploration window (the one with the planet). This can be overridden with the "DISP 1" command as seen in the victory message. This causes the page to be displayed in its own pop-up window.

FYI the number after the PAGE is not read by the game and it's there strictly for your/my convenience. Internally the pages are numbered in the order they are read from the file, ie. if something like a GOTO command refers to page 0, it's always the first page; one is the second and so on… Even if your first page said "PAGE 7" on it.

Source: Inf Space Fed, posted by Fingers
For now it's not possible to have more than one quest-specified fleet in a random star system. But you may be able to get around it by using the "existing" flag… In the first STAR entry set the planet type to something unique, then have multiple STAR entries in the quest each referring to that planet type (the same way haven.ini does).

Source: Inf Space Fed, posted by Fingers
"wander" doesn't do anything. I just forgot to remove it from the ini file when we decided not to have the Klakar traders jump around the map on their own. It was never implemented in code.

Always/random/never are exclusive in that a race can only be one of these.. If you put in more than one of these flags it'll just pick one (always trumps random, random trumps never). I'm almost certain that if you don't have any of these flags then it'll act the same as "never" ie. the race will never be placed on the map.

friendly/hostile are also exclusive. If you set both it'll probably pick friendly (whichever the code checks first). If you set neither, the race starts neutral like the Muktians and the Zorg.

Source: Inf. Space Fed., posted by Fingers
The difficulty level modifier is used for picking fleets. There are five different levels (DIF0 - DIF4 in the race inis). The one that is used depends on the map size's DIFF modifier and the "number of enemies" setting in the start menu. These are added together, e.g. medium map DIFF 1 + normal enemies (1) will use the "DIF2" set of fleets. You can not increase the DIFF beyond 2 because there aren't fleets defined for levels higher than 4. You'll need to make new fleets for each race to increase the number of enemies. (replacing the smaller fleets with those from the large map, and the larger fleets with even bigger ones)

Note that there's a maximum of 256 ships that can exist in the game. If you have 15 fleets (large map) this means the average number of ships per fleet can be up to 16 (a fairly big fleet). When you add more fleets they cannot have as many ships each. If you run out of ships it'll start to behave in strange ways, e.g. carriers will not be able to launch fighters. So you should increase the challenge by using more large ships rather than massive amounts of fighters.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License