Repository navigation
Home
How the tool is intended to be used. Basic workflow:
- Choose an existing game level on the map you want. This needs to be in level file format 15 onwards. To check which is what, see here: https://tcrf.net/Notes:Syndicate_Wars_(DOS)#Level_File_Versions
- Add or remove Things from the top pane. While you can make new Peeps from scratch here, it makes more sense to clone existing ones and edit them. You must always have at least one Thing, or the level won't work. You also need at least one Peep in group 0 - the player group.
- Edit Commands. There is no button to delete commands, you should just re-use the existing ones by changing their Next entry to cut off ones you don't need yet. On load unused commands are shown in grey, so these can be recycled without affecting anything in use in the level
- Add any ground items to a level. These are not commonly used and it's a bit of a chore adding them at the moment, I hope to simplify them later.
- Adjust group relations. Click on the Group Relations button at the bottom left to adjust how groups should behave in relation to each other
- Save the level. If you added or removed Things, press yet to the prompt to recalculate parent/child values for all Things.
Remember, if you're saving a new level, you must turn it into a proper full mission by making an entry in the missxxx.ini file, or you won't be able to play it.
Clicking on the Group Relations button will show the window as above. What this window represents is the behaviour of the group numbered at the top of the window. Click on that gadget to change to another of the 32 groups (31 is the last, but 0 is the player group and should always be blank - but actually it is NOT on many levels). The rows of tick boxes indicate each of the 32 (0 - 31) groups in the game and how this group will react to them. There are four categories of behaviour:
- K on Sight - Kill on Sight - If this box is ticked then the current group will always enter combat if a member sees a member of the ticked group
- K Gun Out - Kill if Gun Out - If this box is ticked then the current group will enter combat with members of the ticked group if they are seen with a weapon drawn
- K if Armed - Kill if Armed - If this box is ticked then the current group will enter combat with members of the ticked group if they have a weapon in their inventory at all.
- Truce - If this box is ticked then the current group will never enter combat with members of the ticked group, even if they are accidentally shot or otherwise hurt by them. This is used to join up different groups of the same faction, e.g. all zealots will be truced.
At the bottom of the window is a set of 8 boxes with numbers in. These show show which other groups are guardians of this group. What this means is the listed group will actively defend the current group in combat. If a member of the current group is attacked by a third group, the group listed here will react to that group as if they had been attacked themselves. Again this is used for members of the same faction (e.g. syndicate agents in different groups), but also inter-faction protection such as police protecting civilians.
A list of common behaviours in the game and how these are achieved command-wise:
Extremely simple, these characters are simply assigned the WAND_TIME command, with the time value set to 9999. This will cause them to roam the map indefinitely.
Also very simple. Here the peep is simply given a USE_VEHICLE command, and then again assigned a WAND_TIME command with time value set to 9999. Wandering in a vehicle causes the character to randomly drive around the roads. For best effect, start the peep at the exact same coordinates as their vehicle, and they will be driving it the instant the level begins.
Enemies typically wander or patrol a set area. Patrols can setup by with either a GO_TO_POINT or RUN_TO_POINT command, depending on if the character should run or walk between points. Arg1 set the radius of the point that needs to be reached, larger numbers (say 10 or 20) produce a bigger destination marker, smaller (e.g. 1 or 2) produce smaller ones. Use smaller for precise patrols, larger for less precise ones (this can be useful for busier areas in terms of other NPCs, or for flying vehicles patrolling). Once the main points of the patrol are defined, the patrol loop must be set using a LOOP_COM command that points to the first GO_TO command number as its OtherThing value. Do not try and loop a route by making the last command have the first one as its Next command, this will crash the game.
Very simple - don't assign a command at all. The default Comhead value of 0 will make an NPC simply wait until an enemy approaches them. Note that the Angle value for the NPC is important here, this is what determines the direction they are facing. This uses the values 0 - 7 for the 8 points of the compass. This is in relation to where North is on the map, with 0 as facing due South, 2 as West, 4 as North, and 6 as East.
The following are more advanced techniques to achieve things in-game that may not be obvious to beginner designers
The LOOP_COM command serves to make an NPC loop through a set of commands forever. However, in fact it is possible to break out of a loop if the right flag is used and a follow up command of the right kind is set in the Next field. Specifically, an UNTIL command will break out of a loop. This allows, for example, to cause a peep to follow a patrol, until an outcome is met (e.g. another NPC/Group is dead). Note that naturally the character will only break out once they hit the loop point, so if they have a long patrol route, they will keep following that until the end.
One of the most powerful commands available to level designers is the PING_EXIST command. This command when run in an NPC's command chain will toggle their visibility state. Invisible NPCs cannot be seen, and just as importantly, cannot be injured. Note they can attack other peeps if instructed to, so it's important not to unwittingly send an invincible super soldier after the player... There are two main uses for this command - firstly simply for setting ambushes and other similar effects up. By hiding an NPC, the player obviously can't see they are there, making it great for surprises. The converse is also true, and making an NPC invisible can be a way to make it look like they have entered a building or otherwise moved out of play.
The second use is for so called "stagehand" characters. These are used throughout the final game, and are simply NPCs tasked with perform actions to make the game look more alive and more complex than it really is. Sometime they are simply used as timers for events (an invisible NPC walking from point A to B to trigger something happening), or for destructively changing the scenery (e.g. blowing themselves up to mimic an airstrike or remove a bridge). Others they are used for "directing" cut scenes by acting as containers to run the commands that move the camera around during these events. They are also commonly used for traps, which despite how they look are in fact just hidden NPCs throwing KO Gas, or calling in Satellite Rain strikes, etc.
If a peep is set as invisible in a level file, then a PING_EXIST command will make them visible. If they are visible, then it will hide them. The command PING_P_V can be used to reveal or hide other characters or vehicles. As vehicles cannot run commands directly themselves, if a vehicle must be hidden/revealed, a peep character must use PING_P_V on it to perform the needed action. There's also a flag needed to allow vehicles with occupants to be hidden by the command.