Notes:Syndicate Wars (DOS)
This page contains notes for the game Syndicate Wars (DOS).
To do: Rewrite loads of below now symbols show the exact data structures and start positions |
Contents
Level Files
Level File Naming Convention
Levels in the game are stored with the following key to their filenames:
c0mml0LL.dat
Where:
m = Map number and
L = unique level number for this map
e.g. c030l001.dat, which would be the first level defined for map 30 (London).
Level numbers do not correspond to the index of missions defined in the ALL000.MIS files, they're just arbitrary numbers to make each level file unique. Where it gets complicated is that many levels are defined with the same level number but a different file extension, e.g:
c030l001.d1
c030l001.d2
These are often in addition to a corresponding level with a .dat file extension. Confusingly it seems the game started with all levels featuring only a .d1, .d2, etc extension, seemingly to represent different versions of the same level. However, once the game reached the alpha stage for some some reason .dat was added as an extension too. Generally finished levels are saved as .dat, with older versions as .d1, etc, but this is not always the case.
The game does not store the level file it is looking for directly in the above format (i.e. as a string). Instead it uses a different format in e.g. the ALL000.MIS file to know what file to load, based simply on two numbers (map and level no).
e.g. 10 16
These can be converted back into the full filename with the following formula:
C<MapNo>L<LevelNo%15>.D<LevelNo/15>
so the above example would have the filename C010L001.D1.
If LevelNo/15 is zero, then the extension is just .DAT.
To convert the filename into the two number format used in the game files, the following can be used to find the levelNo:
LevelNo = Number from file extension * 15 + Level number from file name
While not without exception (there is one campaign map with this number), overwhelmingly levels ending in l005.dat are multiplayer levels.
Level File Format Versions
Game levels self-report the file format version via the first byte of the level file. The following different level file versions have been observed. If levels are examined based on their filestamp, there is clear pattern where new versions of the level format appear and superceded old versions are no longer used over time.
Version 4 appears to the earliest known version of the data structure, as this is what is used by the pre-alpha demo and is present if a level is saved from the editor. However, it's not clear if this version is actually complete/working as very little seems to actually be saved in the files. Experimentation shows that the only thing definitely saved in these files are the level's group names if defined. Everything else is saved in the map file, like the PlayStation version.
Version 9 onwards is used by files included with the final game, but this is still from an early pre-alpha version of the game and won't work with the final executable. The final game is only compatible with level files from version 15 onwards. Versions 9, 11, and 12 can be loaded but have totally different data structures so will either be horribly broken, or will outright crash the game.
Versions 9 - 12 have lot more (empty) fields for data, including an extra 48 bytes that oddly store parts of the NPC health and vehicle position data, despite other vehicle-only structures that are used as dedicated extra bytes for vehicles already existing at this point.
Version 17 differs from versions 15 and 16 in how it stores vehicle health.
Version | Start Date |
---|---|
4 | October 1995? |
9 | January 1996 |
11 | Early February 1996 |
12 | Late February 1996 |
15 | Late March 1996 |
16 | April 1996 |
17 | Late May 1996 |
Most levels present in the game files use the final version 17 file structure.
Level File Data Structures
The recent work to reverse engineer data structures from the debug code left in the early demos and PlayStation symbols reveals the structure for characters stored in the levels.
Level files have several different blocks of data one after another, as follows:
- File version header (1 byte data, 3 more bytes blank)
- Character data header (2 bytes) - lists how many characters are defined below.
- Character data - who and what is found where in the level. These use the "Thing" data structure, and its sub-structures "ThingUnion", "TngUVehicle", and "TngUPerson", etc, as defined here. Each entry is 168 bytes in length, but vehicles have another extra 36 bytes of data in their definition.
- Command data header (2 bytes) - lists how many commands are defined following.
- Command data - behaviour for all NPCs in a level, where they should walk, who they should be killing or defending, what vehicles to get in, etc. This uses the "Command" data structure, as defined here. This is the bulk of the file. Each entry is 32 bytes long.
- Groups header (7 bytes). There are at least two known variants of this, but some files don't seem to have any obvious header to show the start of group info, it's simply straight after the command data.
- Group names - ASCII text names for each group used in the level in order of the group numbers from 0. Each entry is 40 bytes long. It seems there are 32 entries, although most will be blank.
- Group relationships - these are a corresponding block of 32 entries for the above, again each 40 bytes long. In fact there is a 33rd dummy entry at the start, then the entry for the player group, which is always just blank.
- Small header (19 bytes) - this comes after groups and just consists of the value 1 and 18 zero bytes. If there are items, the item header is the immediate next value, otherwise it goes to game misc.
- Items header (2 bytes) - lists how many item entries follow. Found 2619 bytes from the very first character of the first group name above. This is optional - if there are no items in the level it simply gets ommitted.
- Items data - a list of all items found on the ground in the level. Each entry is 60 bytes long and uses the "SimpleThing" data structure.
- Game Misc (4400 bytes) - this follows immediately after items (or the small header if no items in level) and is used to define any mounted guns in a level. Even if there are none it always starts with a 4 byte header that must be present.
- Padding (116 bytes) - zero byte padding
- Level camera start angle (4 bytes) - The final 4 bytes of any level file. This is always found 4516 bytes from the last item defined, or the end of the small header. The starting camera angle of the level is derived from this. In practice only the second byte needs altering, examples are 00 = starting camera angle, 40 = camera 90 degrees right from start, 80 = 180 degrees from start, C0 = 270 degress right, FF = back to start
The character data is as follows, based around the Thing structure, with extended sets of data depending on the Thing Subtype:
Thing Structure
The game names objects in it as "Things". Most notably, all vehicles and people are Things. Starting common structure for all Things:
Variable | Offset (hex) | Length hex) | Notes |
---|---|---|---|
Parent | 0x0 | 0x2 | This seems to be used as a relationship between vehicles and their occupants - the parent listed here is the occupant of the vehicle |
Next | 0x2 | 0x2 | Links to the vehicle this character starts in |
LinkParent | 0x4 | 0x2 | All objects link to the next in a kind of daisy chain. It's not clear the effect of the order of this, or if it's arbitrary |
LinkChild | 0x6 | 0x2 | As above, the same link in reverse |
SubType | 0x8 | 0x1 | The Thing subtype - what kind of NPC, what kind of vehicle, see table below |
Type | 0x9 | 0x1 | What is this Thing - 2 = Vehicle, 3 = Person |
State | 0xA | 0x2 | Various unknown purposes. Vehicles have these set, seemingly to define ground vehicle, flying vehicle, ship, tank, and mech. However, people rarely have different states set as well. |
Flag | 0xC | 0x4 | This seems to always be 67108868 for characters and 67108864 for vehicles. Not clear what it does. There is also the rarely seen state 67108870 for people, this is used for characters that start the level dead, used for corpses. The latter aso have State set to 13. |
LinkSame | 0x10 | 0x2 | Daisy chains all same Thing Types together, so all characters and separate chain for all vehicles |
LinkSameGroup | 0x12 | 0x2 | Daisy chain links together other things in same group |
Radius | 0x14 | 0x2 | This seems to be the detection radius for the unit, for detecting enemy groups and responding as based on group allegiance |
ThingOffset | 0x16 | 0x2 | Confusingly THIS seems to be a thing's effcetive unique identity in the file. This corresponds with what commands are set for a specific NPC in the commands list, for example |
X | 0x18 | 0x4 | X position of thing on map |
Y | 0x1C | 0x4 | Y position of thing on map |
Z | 0x20 | 0x4 | Z position of thing on map |
Frame | 0x24 | 0x2 | In conjuction with StartFrame seems to determine the NPC graphics to use, all NPC types use the same value for their type. Not used for vehicles |
StartFrame | 0x26 | 0x2 | This is how the 3D model for a vehicle is determined. NPCs also use this, but it's not clear if this value is as important for them, as the pre version 12 levels use slightly different values to later levels with no ill effect |
Timer1 | 0x28 | 0x2 | Unsure, usually the same as StartTimer1. Time to follow first command for? |
StartTimer1 | 0x2A | 0x2 | As above, usually identical values to Timer1 |
VX | 0x2C | 0x4 | This is position data for flying vehicles and people in flying vehicles. passengers/drivers of vehicles who start the level in them have their coordinates set here as well as regular X/Y/Z. Should be set to zero for the actual vehicles, as if not it causes weird glitches as vehicles are simultaneously forced to the location set here but also at the location actually travelled to, so are invisible and cannot be shot |
VY | 0x30 | 0x4 | Ditto |
VZ | 0x34 | 0x4 | Ditto |
Speed | 0x38 | 0x2 | Speed of thing |
Health | 0x3A | 0x2 | Starting health of thing - can be lower than max health |
Owner | 0x3C | 0x2 | Seems to be used to set the target for protection/follow commands |
PathOffset | 0x3E | 0x1 | Unknown, doesn't seem to be used |
SubState | 0x3F | 0x1 | Unknown, doesn't seem to be used |
PTarget | 0x40 | 0x4 | Unknown, doesn't seem to be used |
Flag2 | 0x44 | 0x4 | Used for a few special operations on a character, the most obvious one being to make some NPCs invisible if set to 16777216 (decimal) |
GotoThingIndex | 0x48 | 0x2 | Unknown, doesn't seem to be used |
OldTarget | 0x4A | 0x2 | Unknown, doesn't seem to be used |
TNGPerson Structure
Extended Thing structure just for characters (i.e. not vehicles), continues from above
Variable | Offset (hex) | Length hex) | Notes |
---|---|---|---|
PathIndex | 0x4C | 0x2 | Unknown, doesn't seem to be used |
UniqueID | 0x4E | 0x2 | The thing's unique id number. Unlike Thingoffset (which is the de facto unique id), this is oddly less important but still used. |
Group | 0x50 | 0x1 | Group membership. Very important for determining relations between NPCs. Group 0 always indicates a player character. Vehicles often use group 0 as well, but groups don't seem to have any impact for vehicles |
EffectiveGroup | 0x51 | 0x1 | The currently acting group membership. Not important in level files, used in-game to map what group a character is NOW, after e.g. persuasion or using a clone shield |
ComHead | 0x52 | 0x2 | What command number the NPC starts the level doing |
ComCur | 0x54 | 0x2 | Current command. Not used by the level file, only in-game |
SpecialTimer | 0x56 | 0x1 | Unknown, doesn't seem to be used |
Angle | 0x57 | 0x1 | The angled sprite to use on this character's start. This is 1-8 for the 8 compass directions |
WeaponTurn | 0x58 | 0x2 | Unknown, doesn't seem to be used |
Brightness | 0x5A | 0x1 | |
ComRange | 0x5B | 0x1 | |
BumpMode | 0x5C | 0x1 | |
BumpCount | 0x5D | 0x1 | |
Vehicle | 0x5E | 0x2 | Seems to be unused |
LinkPassenger | 0x60 | 0x2 | |
Within | 0x62 | 0x2 | |
LastDist | 0x64 | 0x2 | |
ComTimer | 0x66 | 0x2 | |
Timer2 | 0x68 | 0x2 | |
StartTimer2 | 0x6A | 0x2 | |
AnimMode | 0x6C | 0x1 | |
OldAnimMode | 0x6D | 0x1 | |
OnFace | 0x6E | 0x2 | |
UMod | 0x70 | 0x2 | Works like WeaponsCarried does, only for body mods. |
Mood | 0x72 | 0x2 | This could be set in the pre-alpha demo editor, but seems to have been superceded for the final game by commands and group relations, and seems to be unused |
FrameId | 0x74 | 0x5 | This selects alternate frames of animation for parts of an NPC's body. Only a few character types can use this, and it is overridden for player characters to always be default. Female Unguided: 0 = default, 1 = blonde hair, 2 = blue hair. Syndicate Agent: 0 = Default, 1 = Blond, 2 = Red with ponytail, 3 = Red no ponytail. Leather Jacket man 0 = Default, 1 = Red jacket. There are also some F unguided using 16777216, but this doesn't visibly do anything. |
Shadows | 0x79 | 0x4 | |
RecoilTimer | 0x7D | 0x1 | |
MaxHealth | 0x7E | 0x2 | Maximum Health of character |
Flag3 | 0x80 | 0x1 | Unknown, doesn't seem to be used |
OldSubType | 0x81 | 0x1 | Seems to always be 17 for NPCs (subtype 3) and 0 for vehicles (subtype 2) |
ShieldEnergy | 0x82 | 0x2 | Starting shield enery for Thing |
ShieldGlowTimer | 0x84 | 0x1 | |
WeaponDir | 0x85 | 0x1 | |
SpecialOwner | 0x86 | 0x2 | |
WorkPlace | 0x88 | 0x2 | Seems to be unused. Based on pre-release articles it seems this would be used for NPC routines, but in the final game these are all set via specific commands |
LeisurePlace | 0x8A | 0x2 | Seems to be unused. Based on pre-release articles it seems this would be used for NPC routines, but in the final game these are all set via specific commands |
WeaponTimer | 0x8C | 0x2 | |
Target2 | 0x8E | 0x2 | |
MaxShieldEnergy | 0x90 | 0x2 | Maximum shield energy of Thing |
PersuadePower | 0x92 | 0x2 | Seems to be unused. Presumably this would allow special NPCs to grant greater persuasion power for the Persuadertron. |
MaxEnergy | 0x94 | 0x2 | Maximum weapon energy of Thing |
Energy | 0x96 | 0x2 | Starting weapon energy of Thing |
RecoilDir | 0x98 | 0x1 | |
CurrentWeapon | 0x99 | 0x1 | |
GotoX | 0x9A | 0x2 | |
GotoZ | 0x9C | 0x2 | |
TempWeapon | 0x9E | 0x2 | |
Stamina | 0xA0 | 0x2 | Starting stamina of Thing |
MaxStamina | 0xA2 | 0x2 | Maximum stamina of Thing |
WeaponsCarried | 0xA4 | 0x4 | Weapon inventory of character as explained above. Used for NPCs. Only used for player characters if level is loaded via /m command |
A
Groups: Most level files (but not all) have a series of ASCII text entries that name all the groups in the level. Naturally this doesn't have a fixed location as it depends on how many characters are defined, but it found is towards the end of the file and can usually be identified by the preceeding header of 01020304050607. Another observed header format for groups is 090A0B0C0D0E1F - there doesn't seem to be any real rhyme or reason as to which are used (files across all versions have or do not have headers of different types, or none at all but still contain group data). There is then a space of 36 empty bytes and the group names begin. Each definition is fixed at 40 characters long. There doesn't seem to be a end marker after these. The first group listed corresponds to group 0 set on NPCs, with the second one corresponding to group 1, and so on.
Most levels have a unique set of groups just for that level, but some use what were clearly a template used by some of the designers as they reuse an identical wide selection of both common but also rarer enemy types not necessarily present in the level (e.g. The Nine and Lucy De Saxo).
TngUVehicle Structure
Extended Thing structure just for vehicles, continues from Thing. Note these have different starting offsets to characters, so can't be correctly represented in the same export
Variable | Offset (hex) | Length hex) | Notes |
---|---|---|---|
PathIndex | 0x4C | 0x2 | |
UniqueID | 0x4E | 0x2 | The thing's uniqueid. Unlike Thingoffset, this doesn't seem very important |
Group | 0x50 | 0x1 | Group membership. Very important for determining relations between NPCs |
EffectiveGroup | 0x51 | 0x1 | Unclear - usually the same as the Group number, but sometimes different, especially for vehicles who are often set to group 99 here |
Object | 0x52 | 0x2 | |
MatrixIndex | 0x54 | 0x2 | |
NumbObjects | 0x56 | 0x1 | |
Dummy2 | 0x57 | 0x1 | |
WeaponTurn | 0x58 | 0x2 | |
ReqdSpeed | 0x5A | 0x2 | |
MaxSpeed | 0x5C | 0x2 | |
PassengerHead | 0x5E | 0x2 | |
TNode | 0x60 | 0x2 | |
AngleDY | 0x62 | 0x2 | |
AngleX | 0x64 | 0x2 | |
AngleY | 0x66 | 0x2 | |
AngleZ | 0x68 | 0x2 | |
GotoX | 0x6A | 0x2 | |
GotoY | 0x6C | 0x2 | |
GotoZ | 0x6E | 0x2 | |
VehicleAcceleration | 0x70 | 0x2 | |
LeisurePlace | 0x72 | 0x2 | |
TargetDX | 0x74 | 0x2 | |
TargetDY | 0x76 | 0x2 | |
TargetDZ | 0x78 | 0x2 | |
OnFace | 0x7A | 0x2 | |
WorkPlace | 0x7C | 0x2 | |
ComHead | 0x7E | 0x2 | |
ComCur | 0x80 | 0x2 | |
Timer2 | 0x82 | 0x2 | |
RecoilTimer | 0x84 | 0x2 | |
MaxHealth | 0x86 | 0x2 | Presumably vehicle max health, but not understood how it works. Version 17 files use the Armour attribute for vehicle health instead |
Dummy | 0x88 | 0xC | |
SubThing | 0x94 | 0x2 | |
Agok | 0x96 | 0x2 | |
WobbleZP | 0x98 | 0x4 | |
WobbleZV | 0x9C | 0x4 | |
Armour | 0xA0 | 0x1 | This determines vehicle health for version 17 files only. Values typically vary from 1-9. Set to zero in pre V17 files. |
PissedOffWithWaiting | 0xA1 | 0x1 | |
ZebraOldHealth | 0xA2 | 0x2 | |
destx | 0xA4 | 0x2 | |
destz | 0xA6 | 0x2 |
Vehicle Data
The extra 36 Bytes of vehicle data that follows the Thing data only for vehicle entries. The official names are not known so below are based on observation. These are used to initially place a vehicle in a level to set its facing, and are ignored after that point (aside from the size fields). Default for size fields seems to be 0x0040, but some vehicles have higher/lower than this set.
Variable | Offset (hex) | Length hex) | Notes |
---|---|---|---|
ObjectWidth | 0x0 | 0x4 | |
Objectskewleft | 0x4 | 0x4 | |
Objectskewright | 0x8 | 0x4 | |
ObjectRoll | 0xC | 0x4 | |
ObjectHeight | 0x10 | 0x4 | |
ObjectPitch | 0x14 | 0x4 | |
ObjectSkew2 | 0x18 | 0x4 | |
ObjectStretch | 0x1C | 0x4 | |
ObjectLength | 0x20 | 0x4 |
Thing Subtypes
The Subtype value of a Thing when it's a person (and actually even if it's a vehicle) has the following known values:
Value | Character |
---|---|
1 | Agent |
2 | Zealot |
3 | Unguided woman |
4 | Civil. suitcase man |
5 | Civil. White dress woman |
6 | Soldier |
7 | Mechanic spider |
8 | Police |
9 | Unguided man |
10 | Scientist |
11 | Shady Guy |
12 | Elite Zealot |
13 | Civ - Blonde Woman 1 |
14 | Civ - Leather Jacket Man |
15 | Civ - Blonde Woman 2 |
40 | Ground Car |
50 | Flying Vehicle |
51 | Tank |
54 | Ship |
59 | Mech |
The Type value determines the type of the Thing. The only ones that seem to be defined here are 2 - Vehicle, and 3 - Person.
The vehicles above (thing types 40 - 59) also have the corresponding Thing type set to 2. Note that the subtype value only seems to determine the type of vehicle (ground only, flying, ship, etc), not which specific model it uses (APC, motorbike, taxi, etc). This is determined by the StartFrame as per the table below.
Oddly trains don't seem to have a Thing value, they presumably must be pre-set via the map editor once a train track is setup. The same seems to be the case for gun emplacements.
It's also worth noting that Thing subtype 15 - Civilian Blonde Woman 2 does not actually seem to be used by any levels. In the debug strings she is called "fast blonde". Adding her into a mission she does not seem to behave any different from other civilians. She looks identical to subtype 13, the first blonde woman.
Vehicle Types
While the base type of a vehicle is determined by the Thing Type (e.g. flying, ground car, ship, etc), the actual appearance of the vehicle is determined by the StartFrame value. These are as follows:
Value | Vehicle Type |
---|---|
0 | Civilian car (grey) |
1 | Delorean (grey) |
2 | Bike |
3 | Brown flyer |
4 | Train engine |
5 | Train carriage |
6 | APC |
7 | Large APC |
8 | Police car |
9 | Police Truck |
10 | Small industrial vehicle |
11 | Bullfrog truck |
12 | Fire truck |
13 | Ambulance |
14 | Taxi (Yellow) |
15 | Barge |
16 | Missile Frigate |
17 | Luxury Yacht |
18 | Tank |
19 | Tank missile battery |
20 | Missile (small) |
21 | Civilian car (Red) |
22 | Delorean (Yellow) |
23 | Zealot Imperial Shuttle |
24 | Taxi (Red) |
25 | Missile (Large) |
26 | Head of moon Mech |
27 | Chest of mech? |
28 | Bike (Metallic) |
29 | Claw Mech (black) |
30 | Claw Mech (Red) |
31 | 2000AD/Manga Truck |
32 | Moon Mech leg |
33 | Moon Mech leg |
34 | Moon Mech leg |
35 | Moon Mech leg |
36 | Moon Mech Arm |
37 | Moon Mech Arm |
38 | Moon Mech Gun |
39 | Moon Mech Gun |
Note these are not needed for the Moon Mech, it's placed in the game by its specific Thing Subtype value. If it's called by the values here on StartFrame, only parts of its body will be rendered (the actual Moon mech uses a startframe of 0).
WeaponsCarried DWORD
The weapon loadouts for each character (including the preset ones for player characters, used only for debugging when the level is loaded from commandline) are stored as follows in the WeaponsCarried DWORD for that character:
Weapon | Hex |
---|---|
Uzi | 1 |
Minigun | 2 |
Pulse Laser | 4 |
Electron Mace | 8 |
Launcher | 10 |
Nuclear Grenade | 20 |
Persuadertron | 40 |
Flamer | 80 |
Disrupter | 100 |
Psychogas | 200 |
Knockout Gas | 400 |
Ion Mine | 800 |
High Explosive | 1000 |
Napalm Mine | 2000 |
LR Rifle | 4000 |
Satellite Rain | 8000 |
Plasma Lance | 10000 |
Razor Wire | 20000 |
Sonic Blast | 40000 |
Graviton Gun | 80000 |
Persuadertron 2 | 100000 |
Stasis Field | 200000 |
Nothing (Energy Shield) | 400000 |
Chromotap | 800000 |
Displacertron | 1000000 |
Cerberus IFF | 2000000 |
Medikit | 4000000 |
Automedikit | 8000000 |
Trigger Wire | 10000000 |
Clone Shield | 20000000 |
Nothing/Uzi | 40000000 |
Nothing/Minigun | 80000000 |
Essentially the game loads the value set for the character, and divides the number by the highest of those in the table above until it finds a number that it is divisible by. This then adds that weapon to the character's inventory, and repeats the process going down the list to the next highest with the remainder. This continues until zero is hit or no weapons are left to add. Therefore if this is edited by hand to FFFFFFFF, that character will have all weapons in the game, including cut ones.
Group Relationships
Relationships between groups are stored in a series of 40 byte entries in group order, with a blank dummy entry first. The first real entry for the player is usually blank as well (as the player naturally responds how they wish to other groups), and then the 31 other groups follow. These are stored as 4 byte bitfields of 32 bits to represent each of the relationship types. There is then a series of 8 single bytes that each represent a single other group the group can be tasked with protecting.
Variable | Offset (hex) | Length hex) | Notes |
---|---|---|---|
KillOnSight | 0x0 | 0x4 | Bitfield that represents which groups this group should kill on sight |
KillIfWeaponOut | 0x4 | 0x4 | Bitfield that represents which groups this group should kill if they have their weapons drawn. Commonly used for the police against the player |
KillIfArmed | 0x8 | 0x4 | Bitfield that represents which groups this group should kill if they have a weapon in their inventory at all |
Truce | 0xC | 0x4 | Bitfield that represents which groups this group should never attack. Commonly used to ally multiple groups of the same enemy type e.g. all zealots in a level |
Guardian1 | 0x10 | 0x1 | Integer representing the first of 8 possible groups that will protect this group. This needs testing to confirm exactly how it works, but it seems to be that if another groups engages the current group, the group set as a guardian here will actively become hostile to the attacking group as if they themselves had been attacked |
Guardian2 | 0x11 | 0x1 | |
Guardian3 | 0x12 | 0x1 | |
Guardian4 | 0x13 | 0x1 | |
Guardian5 | 0x14 | 0x1 | |
Guardian6 | 0x15 | 0x1 | |
Guardian7 | 0x16 | 0x1 | |
Guardian8 | 0x17 | 0x1 | |
Blank | 0x18 | 0x10 | Unused padding |
Item Data Structure
Used for all collectible items starting on the floor in a level.
Variable | Offset | Size | Notes |
---|---|---|---|
Parent | 0x0 | 0x2 | |
Next | 0x2 | 0x2 | Seems to link to ThingOffset of character Thing that is linked to do something with this item, e.g. units set to pick up a gun off the floor as a command |
LinkParent | 0x4 | 0x2 | |
LinkChild | 0x6 | 0x2 | |
SubType | 0x8 | 0x1 | 0 for weapons, 1 for Epidermises. |
Type | 0x9 | 0x1 | Seems to always be 25 for items |
State | 0xA | 0x2 | If a weapon, uses same numbers as table here |
Flag | 0xC | 0x4 | Always seems to be 67108868 |
LinkSame | 0x10 | 0x2 | |
Object | 0x12 | 0x2 | |
Radius | 0x14 | 0x2 | |
ThingOffset | 0x16 | 0x2 | Unique number of item. Always negative for items it seems |
X | 0x18 | 0x4 | X coordinate of item on map |
Y | 0x1C | 0x4 | Y coordinate of item on map |
Z | 0x20 | 0x4 | Z coordinate of item on map |
Frame | 0x24 | 0x2 | Used in conjunction with startframe for item floor icon. 3915 = high explosive, 3531 = briefcase, |
StartFrame | 0x26 | 0x2 | Used for icon graphic type. 1003 = Mostly weapons, 1056 = epidermis, |
Timer1 | 0x28 | 0x2 | |
StartTimer1 | 0x2A | 0x2 | |
WeaponType | 0x2C | 0x2 | If a weapon, uses same numbers as table here, but with base 1 (so all items bumped up one number). Weapon Type 31 is an Epidermis - type is set by Ammo field. 0 is Money briefcase, amount of cash is set by Ammo field |
LastFired | 0x2E | 0x2 | |
Ammo | 0x30 | 0x2 | Amount of money for money briefcases, type of epidermis if epidermis: 1 - Hard Skin, 2 - Flame Skin, 3 - Energy Skin, 4 - Stealth Skin |
Owner | 0x32 | 0x2 | |
OnFace | 0x34 | 0x2 | |
field_38 | 0x38 | 0x4 | Unknown |
Level File Versions
The below is a table listing each level file in the game, when it was last written to, and what level file format version it uses. Files using pre-version 15 formats will not work with the final game, but can be converted to be playable.
File | Version | Timestamp |
---|---|---|
C010L001.D1 | 9 | 01/25/1996 15:14:10 |
C003L001.D1 | 9 | 01/25/1996 16:53:30 |
C006L001.D1 | 9 | 01/26/1996 12:06:24 |
C006L001.D2 | 9 | 01/31/1996 10:42:54 |
C047L001.D1 | 9 | 02/01/1996 16:36:16 |
C000L001.D3 | 9 | 02/01/1996 17:14:36 |
C010L001.D3 | 9 | 02/02/1996 11:13:38 |
C044L001.D2 | 11 | 02/07/1996 14:59:32 |
C044L001.D1 | 11 | 02/07/1996 17:18:04 |
C044L001.D3 | 11 | 02/07/1996 17:30:20 |
C010L001.D2 | 11 | 02/07/1996 17:37:08 |
C032L002.D1 | 11 | 02/09/1996 12:37:34 |
C050L001.D1 | 11 | 02/12/1996 12:27:20 |
C050L001.D2 | 11 | 02/12/1996 16:04:14 |
C050L001.D3 | 11 | 02/12/1996 17:55:04 |
C001L001.D3 | 11 | 02/13/1996 11:28:26 |
C001L001.D1 | 11 | 02/13/1996 11:28:34 |
C050L002.D1 | 11 | 02/14/1996 11:52:30 |
C041L001.D2 | 11 | 02/14/1996 15:48:04 |
C002L001.D1 | 11 | 02/15/1996 16:43:20 |
C002L001.D2 | 11 | 02/15/1996 16:58:40 |
C002L001.D3 | 11 | 02/16/1996 14:47:16 |
C007L003.D2 | 11 | 02/16/1996 17:00:24 |
C007L003.D3 | 11 | 02/16/1996 17:01:36 |
C046L001.DAT | 11 | 02/17/1996 14:19:24 |
C046L001.D1 | 11 | 02/17/1996 14:27:34 |
C046L001.D2 | 11 | 02/17/1996 14:44:36 |
C002L003.D1 | 11 | 02/17/1996 16:12:50 |
C002L003.DAT | 11 | 02/17/1996 16:38:30 |
C041L002.D1 | 11 | 02/17/1996 17:05:58 |
C041L002.D2 | 11 | 02/17/1996 17:58:58 |
C008L003.D1 | 11 | 02/18/1996 14:15:48 |
C046L001.D3 | 11 | 02/18/1996 15:24:28 |
C044L002.D1 | 11 | 02/18/1996 19:48:50 |
C046L015.D1 | 11 | 02/18/1996 23:47:10 |
C046L015.D3 | 11 | 02/19/1996 13:54:24 |
C009L001.D1 | 12 | 02/19/1996 14:14:40 |
C009L001.D2 | 12 | 02/19/1996 14:43:54 |
C005L001.D1 | 12 | 02/20/1996 10:59:52 |
C047L001.D3 | 11 | 02/20/1996 11:02:44 |
C005L001.D2 | 12 | 02/20/1996 17:15:02 |
C046L014.DAT | 12 | 02/21/1996 10:19:40 |
C040L001.D1 | 12 | 02/22/1996 12:03:42 |
C007L001.D1 | 12 | 02/27/1996 12:16:06 |
C007L001.D2 | 12 | 02/27/1996 12:21:16 |
C001L003.D2 | 12 | 02/27/1996 15:05:46 |
C020L002.DAT | 12 | 02/28/1996 16:51:50 |
C007L003.D1 | 12 | 02/29/1996 11:48:38 |
C040L015.D1 | 12 | 02/29/1996 12:32:08 |
C002L007.D1 | 12 | 02/29/1996 15:36:44 |
C040L015.D2 | 12 | 03/01/1996 11:15:02 |
C044L015.DAT | 12 | 03/01/1996 12:03:42 |
C004L007.D1 | 12 | 03/01/1996 12:06:28 |
C004L007.DAT | 12 | 03/01/1996 12:34:54 |
C006L015.D3 | 12 | 03/01/1996 14:56:18 |
C044L015.D1 | 12 | 03/01/1996 15:52:26 |
C026L004.DAT | 12 | 03/04/1996 10:24:08 |
C035L004.DAT | 12 | 03/04/1996 17:33:08 |
C001L003.D1 | 12 | 03/05/1996 11:48:08 |
C008L003.D2 | 12 | 03/06/1996 15:48:32 |
C006L007.DAT | 12 | 03/06/1996 16:43:58 |
C036L004.DAT | 12 | 03/06/1996 17:43:26 |
C006L003.D1 | 12 | 03/08/1996 11:16:48 |
C006L003.D2 | 12 | 03/08/1996 14:31:08 |
C003L007.D2 | 12 | 03/08/1996 15:28:04 |
C003L007.DAT | 12 | 03/08/1996 15:51:26 |
C045L015.D3 | 12 | 03/12/1996 10:04:16 |
C001L007.DAT | 12 | 03/14/1996 13:52:48 |
C052L001.DAT | 12 | 03/20/1996 14:58:54 |
C047L015.D1 | 12 | 03/20/1996 17:08:08 |
C041L001.D3 | 12 | 03/20/1996 17:42:22 |
C041L001.D1 | 12 | 03/21/1996 15:48:20 |
C044L002.D2 | 15 | 03/27/1996 12:35:52 |
C040L001.D3 | 15 | 03/28/1996 14:10:04 |
C030L008.D2 | 15 | 03/28/1996 15:07:42 |
C040L015.DAT | 15 | 03/28/1996 15:11:42 |
C007L007.D1 | 15 | 03/29/1996 10:21:52 |
C003L007.D1 | 15 | 03/29/1996 14:31:44 |
C052L007.DAT | 16 | 04/04/1996 13:46:46 |
C035L007.DAT | 16 | 04/09/1996 15:16:24 |
C030L008.D1 | 16 | 04/11/1996 11:17:44 |
C027L003.DAT | 16 | 04/11/1996 12:20:46 |
C009L007.DAT | 16 | 04/11/1996 16:23:22 |
C020L007.DAT | 16 | 04/12/1996 10:28:40 |
C002L007.DAT | 16 | 04/12/1996 15:28:24 |
C028L002.DAT | 16 | 04/13/1996 23:31:56 |
C000L001.DAT | 16 | 04/16/1996 12:36:32 |
C008L003.DAT | 16 | 04/22/1996 18:20:32 |
C036L001.D3 | 16 | 04/24/1996 17:24:08 |
C046L008.DAT | 16 | 04/25/1996 21:01:44 |
C003L015.DAT | 16 | 04/26/1996 13:36:10 |
C046L009.DAT | 16 | 04/27/1996 05:46:54 |
C046L010.DAT | 16 | 04/29/1996 13:33:26 |
C004L015.DAT | 16 | 05/02/1996 01:02:38 |
C002L015.DAT | 16 | 05/02/1996 12:28:00 |
C041L002.DAT | 16 | 05/08/1996 15:39:22 |
C050L002.DAT | 16 | 05/08/1996 17:21:14 |
C044L007.D1 | 16 | 05/10/1996 01:33:52 |
C044L007.DAT | 16 | 05/14/1996 12:52:44 |
C036L003.D2 | 16 | 05/16/1996 12:18:50 |
C036L003.DAT | 16 | 05/16/1996 18:22:24 |
C012L001.DAT | 17 | 05/20/1996 16:37:42 |
C025L015.D3 | 17 | 05/21/1996 15:17:04 |
C065L001.DAT | 17 | 05/25/1996 18:44:28 |
C041L001.DAT | 17 | 05/30/1996 01:26:10 |
C047L015.DAT | 17 | 05/31/1996 16:32:50 |
C047L001.D2 | 17 | 06/01/1996 20:33:10 |
C049L009.DAT | 17 | 06/10/1996 17:10:28 |
C027L015.D3 | 17 | 06/16/1996 22:51:22 |
C050L002.D2 | 17 | 06/25/1996 16:31:50 |
C044L002.DAT | 17 | 06/28/1996 10:57:06 |
C035L001.D1 | 17 | 06/28/1996 16:06:06 |
C079L015.D3 | 17 | 07/07/1996 18:02:26 |
C044L003.DAT | 17 | 07/14/1996 15:04:22 |
C047L011.DAT | 17 | 07/19/1996 16:54:36 |
C030L001.D2 | 17 | 07/19/1996 17:35:56 |
C002L002.DAT | 17 | 07/22/1996 15:29:42 |
C046L015.DAT | 17 | 07/25/1996 11:16:44 |
C060L015.DAT | 17 | 07/25/1996 12:15:08 |
C044L001.DAT | 17 | 07/29/1996 11:13:56 |
C070L011.DAT | 17 | 07/29/1996 13:28:58 |
C070L011.D1 | 17 | 07/29/1996 13:29:44 |
C005L005.DAT | 17 | 08/02/1996 11:18:38 |
C040L005.DAT | 17 | 08/02/1996 14:24:22 |
C065L005.DAT | 17 | 08/02/1996 14:26:54 |
C041L005.DAT | 17 | 08/04/1996 21:19:16 |
C009L001.DAT | 17 | 08/05/1996 04:04:28 |
C004L013.DAT | 17 | 08/05/1996 04:05:20 |
C022L013.DAT | 17 | 08/05/1996 04:09:34 |
C040L013.DAT | 17 | 08/05/1996 04:29:40 |
C022L001.D2 | 17 | 08/05/1996 04:37:26 |
C004L001.D2 | 17 | 08/05/1996 04:45:44 |
C046L015.D2 | 17 | 08/05/1996 04:51:50 |
C046L002.D2 | 17 | 08/05/1996 05:11:58 |
C046L002.DAT | 17 | 08/05/1996 05:13:22 |
C022L003.DAT | 17 | 08/05/1996 06:27:02 |
C022L003.D2 | 17 | 08/05/1996 06:28:26 |
C021L001.D3 | 17 | 08/05/1996 06:30:00 |
C001L002.DAT | 17 | 08/05/1996 06:31:16 |
C022L002.DAT | 17 | 08/05/1996 06:34:10 |
C022L004.DAT | 17 | 08/05/1996 06:38:54 |
C009L003.DAT | 17 | 08/05/1996 06:39:34 |
C027L001.DAT | 17 | 08/05/1996 06:45:28 |
C004L003.DAT | 17 | 08/05/1996 06:48:44 |
C001L003.DAT | 17 | 08/05/1996 13:44:48 |
C003L010.DAT | 17 | 08/08/1996 18:01:52 |
C035L001.DAT | 17 | 08/09/1996 13:03:48 |
C008L001.DAT | 17 | 08/11/1996 16:28:30 |
C027L002.DAT | 17 | 08/11/1996 16:35:02 |
C005L001.DAT | 17 | 08/11/1996 16:35:46 |
C011L001.DAT | 17 | 08/11/1996 16:37:34 |
C050L002.D3 | 17 | 08/11/1996 16:50:38 |
C007L005.DAT | 17 | 08/11/1996 17:03:20 |
C025L001.D3 | 17 | 08/11/1996 17:04:06 |
C030L002.DAT | 17 | 08/11/1996 17:08:06 |
C020L001.D1 | 17 | 08/11/1996 17:09:14 |
C079L002.DAT | 17 | 08/11/1996 17:09:36 |
C006L003.DAT | 17 | 08/11/1996 17:10:00 |
C050L001.DAT | 17 | 08/12/1996 12:38:12 |
C001L010.DAT | 17 | 08/12/1996 22:37:52 |
C065L002.DAT | 17 | 08/13/1996 17:13:22 |
C065L003.DAT | 17 | 08/13/1996 17:13:52 |
C003L001.DAT | 17 | 08/13/1996 17:45:28 |
C001L005.DAT | 17 | 08/13/1996 22:30:10 |
C002L005.DAT | 17 | 08/13/1996 22:34:12 |
C003L003.DAT | 17 | 08/13/1996 22:42:04 |
C004L004.DAT | 17 | 08/13/1996 22:45:04 |
C005L015.DAT | 17 | 08/13/1996 22:51:24 |
C050L003.DAT | 17 | 08/13/1996 23:20:10 |
C047L002.DAT | 17 | 08/13/1996 23:23:18 |
C026L003.DAT | 17 | 08/14/1996 13:17:00 |
C036L002.DAT | 17 | 08/14/1996 13:21:02 |
C041L002.D3 | 17 | 08/14/1996 13:23:24 |
C026L002.DAT | 17 | 08/14/1996 13:28:38 |
C035L005.DAT | 17 | 08/14/1996 17:13:48 |
C041L003.DAT | 17 | 08/14/1996 17:26:04 |
C021L001.D2 | 17 | 08/14/1996 17:28:04 |
C028L001.D3 | 17 | 08/14/1996 17:33:20 |
C010L001.DAT | 17 | 08/14/1996 18:05:20 |
C001L001.DAT | 17 | 08/14/1996 18:06:44 |
C079L001.D2 | 17 | 08/14/1996 18:11:12 |
C032L005.DAT | 17 | 08/14/1996 18:21:06 |
C006L005.DAT | 17 | 08/15/1996 17:05:48 |
C036L005.DAT | 17 | 08/15/1996 17:11:30 |
C001L015.DAT | 17 | 08/16/1996 11:35:22 |
C010L015.DAT | 17 | 08/16/1996 12:30:12 |
C004L001.DAT | 17 | 08/16/1996 13:08:08 |
C008L005.DAT | 17 | 08/16/1996 13:17:30 |
C025L001.D1 | 17 | 08/16/1996 13:24:46 |
C007L003.DAT | 17 | 08/16/1996 13:26:02 |
C047L001.DAT | 17 | 08/16/1996 13:34:30 |
C035L015.D3 | 17 | 08/18/1996 01:41:32 |
C007L001.DAT | 17 | 08/18/1996 17:18:36 |
C036L001.DAT | 17 | 08/18/1996 18:49:12 |
C002L001.DAT | 17 | 08/19/1996 01:53:30 |
C032L015.DAT | 17 | 08/19/1996 01:56:00 |
C026L001.DAT | 17 | 08/19/1996 01:58:52 |
C045L001.DAT | 17 | 08/19/1996 02:11:46 |
C003L002.DAT | 17 | 08/19/1996 11:13:10 |
C060L005.DAT | 17 | 08/19/1996 14:49:00 |
C030L001.D1 | 17 | 08/19/1996 15:11:54 |
C030L001.D3 | 17 | 08/19/1996 16:19:42 |
C028L001.D2 | 17 | 08/20/1996 13:37:22 |
C032L001.D1 | 17 | 08/20/1996 17:12:36 |
C044L005.DAT | 17 | 08/20/1996 18:22:58 |
C046L005.DAT | 17 | 08/20/1996 18:24:46 |
C006L001.DAT | 17 | 08/22/1996 00:28:20 |
C044L003.D1 | 17 | 08/22/1996 15:57:32 |
C040L001.DAT | 17 | 08/22/1996 16:52:20 |
C040L001.D2 | 17 | 08/22/1996 16:53:16 |
C035L002.DAT | 17 | 08/22/1996 17:33:10 |
C022L001.D1 | 17 | 08/23/1996 02:10:22 |
C032L002.DAT | 17 | 08/28/1996 11:39:06 |
C045L002.DAT | 17 | 08/28/1996 18:03:34 |
C028L015.DAT | 17 | 09/04/1996 12:20:22 |
ALL000.MIS File Format
The various ALLXXX.MIS files are basically large WAD style binaries that contain all the information for the game to put a level together with a map to make an actual mission to play. Oddly, the data needed to know what the mission objective (e.g. blow up building, kill enemy) is as well as who (e.g. Syndicate Agents, or a civilian) and where that objective is, is stored here. That data is not kept in the levels themselves, which can be freely interchanged between maps and mission objectives, at the cost of the level then no longer making any sense...
The file is structured into what appears to be 3 main parts:
Mission information
The top of the file has a series of brief notes in ASCII outlining what each level in the file is, usually with the mission name (these are clearly working titles, some are simple descriptions of the kind of level it is, e.g. "Head Hunt"), what campaign the level is for (EuroCorp levels are usually called "Syn" or "Agent", Church of the New Epoch called "CH" or "Zealot", and the abandoned Unguided campaign, generally called "Pu", "punk", or "Ung"), and the map number of the mission. The campaign numbers are not consistent, some seem to use the numbering of the final game (where there are multiple levels with the same number showing branching paths), others give each level a unique number. Also many have simply changed over the course of the development, and even in the file itself there are contradicting numbers. The end of each entry here is delimited by zero bytes in hex. The fourth and fifth bytes of the file just before this text chunk is a two byte header that lists the length of the text block in bytes.
Directly after the last entry of the above is a number in hex that reports how many mission entries are in the file. In practice it seems there is one fewer actual entry than the number, because the file includes a blank entry at the start. For e.g. the main ALL000.MIS file the value is 6E or 110 in decimal. In practice there are 109 missions defined in the file. After this value is the first blank entry.
Mission Definitions
This is how the game knows what level/map files to load, and what the mission objective is. Each entry is 76 bytes long. Note that experimentation and analysis of the dissassembled source code shows there is a hard limit of 120 (from a base of 0) entries that can be defined here. The demo executable actually has a higher possible limit.
Data structure:
Name | Offset | Size | Notes |
---|---|---|---|
TextName | 0x0 | 0x4 | Unknown, unused |
TextId | 0x4 | 0x2 | Unknown, unused |
StartHead | 0x6 | 0x2 | Unknown, unused |
SpecialEffectID | 0x8 | 0x2 | Unknown, unused. This is visible in the pre-alpha level editor as a configurable field. |
SuccessHead | 0xA | 0x2 | The start number of the objectives that result in successful completion of this mission (see objectives data below). |
FailHead | 0xC | 0x2 | The start number of the objectives that result in failure of this mission. |
SourceID | 0xE | 0x2 | The campaign ID of this mission (not to be confused with the mission index, this is the unique ID used for campaign mission order) |
SuccessID | 0x10 | 0x2 | Unknown, unused - presumably an early version of successmap/level. This is visible in the pre-alpha level editor as a configurable field. |
FailID | 0x12 | 0x2 | Unknown, unused - presumably an early version of failmap/level. This is visible in the pre-alpha level editor as a configurable field. |
SpecialTrigger | 0x14 | 0x3 | Used to unlock other missions when THIS mission is unlocked. Used for multiple choice stages of the game. Example: Beating EC mission 2 only unlocks one new mission (index 22). However, that mission then unlocks another mission (index 3) as well to give the player two choices. Up to 3 mission index numbers can be set. Multiple missions linked in this way appear as one combined choice/email tab, whereas ones unlocked via SuccessTrigger appear as discrete emails. |
SuccessTrigger | 0x17 | 0x3 | Used to set which new missions are unlocked once this mission is complete (based on mission index). Up to 3 mission index numbers can be set. |
FailTrigger | 0x1A | 0x3 | Unknown, unused. This is visible in the pre-alpha level editor as a configurable field. Presumably this was for a failing branch through the game's levels. |
BankTest | 0x1D | 0x1 | Unknown, unused. |
SpecialEffectFailID | 0x1E | 0x2 | Unknown, unused. |
SpecialEffectSuccessID | 0x20 | 0x2 | Unknown, unused. |
StringIndex | 0x22 | 0x2 | This seems to be a leftover from an earlier way of storing where the text for a briefing is found. These roughly coincide with the starting line numbers of briefings in ALLTEXT.WAD, but quickly drift away. Source code shows SourceID is used in the final to look for the matching MISSXX.TXT file for that number instead. |
StartMap | 0x24 | 0x3 | Unknown, unused. |
StartLevel | 0x27 | 0x3 | Unknown, unused. |
SuccessMap | 0x2A | 0x3 | A deprecated way of recording the map number of the next mission on completion of the level. This isn't actually be used, and only 12 levels have entries here (which are usually NOT the actual next map/level number). The leftover data shows an early path through the game. |
SuccessLevel | 0x2D | 0x3 | See above. |
FailMap | 0x30 | 0x3 | Unused but presumably the map number of the next mission on failure of this level. This would mean there could be branching campaigns with losing and winning routes. |
FailLevel | 0x33 | 0x3 | Unused but presumably the level number of the next mission on failure of this level. This would mean there could be branching campaigns with losing and winning routes. |
MapNo | 0x36 | 0x1 | The map number of this mission. |
LevelNo | 0x37 | 0x1 | The level number of this mission. |
BankTestFail | 0x38 | 0x1 | Unknown, unused. |
Complete | 0x39 | 0x1 | Unknown, unused. |
MissionCond | 0x3A | 0x5 | This seems to be another way of listing which missions need to be completed to unlock this mission. Not clear if it is actually used at all. |
ReLevelNo | 0x3F | 0x1 | Retry/replay Level No. Some levels have two versions of the level present on disk. The reason for this is that it's not possible to skip cutscenes in Syndicate Wars as they use the actual game characters so must run to completion. Therefore a second version of the finished level was saved without the intro cutscene, and this value tells the game the one to load if the player retries the level with the R key |
CashReward | 0x40 | 0x2 | How much money (if any) given for completion of the mission. |
PANStart | 0x42 | 0x1 | A cut attribute, presumably for what items would be unlocked in the Public Access Network. |
PANEnd | 0x43 | 0x1 | A cut attribute, presumably for what items would be unlocked in the Public Access Network. |
WaitToFade | 0x44 | 0x2 | Used to set the number of game turns it takes to fade to black on end of the mission (if a fade is used). |
field_46 | 0x46 | 0x5 | Unknown, unused. |
field_4B | 0x4B | 0x1 | Unknown, unused. |
Each mission briefing was originally stored as a separate MISSXXX.TXT file (this is still the case in the PS1 version of the game), and the file ALLTEXT.IDX contains the index bytes for where to find these in ALLTEXT.WAD. The first Eurocorp mission is MISS001.TXT, the Church missions start at MISS019.TXT (value of 13 in hex).
Mission Objective Data
The final block of data consists of a series of 32 byte long entries, each of which is an individual objective for each mission defined above. Note they are numbered from 0 onwards, but this implicit, not explicitly defined in the data below. Immediately before this (and immediately after the mission definitions) is a two byte header that lists the number of objectives defined below. In ALL000.MIS this is BB01 or 443 in decimal - and there are 443 mission objectives that follow.
Data structure:
Name | Offset | Size | Notes |
---|---|---|---|
Next | 0x0 | 0x2 | The next objective that makes up the block of objectives for this mission. They are typically daisy-chained together, and then the Pri[ority] field is used to determine order and logic (i.e. X AND Y) of objectives |
Map | 0x2 | 0x1 | The map number of the mission this objective is for. Note this is not enforced/checked, any mission can run any objective if it is pointed here by wrong Success/failhead values |
Level | 0x3 | 0x1 | The level number of the mission this objective is for. Note this is not enforced/checked, any mission can run any objective if it is pointed here by wrong Success/failhead values |
Status | 0x4 | 0x2 | Unknown/Unused |
Type | 0x6 | 0x2 | Objective type, as per table below |
Flags | 0x8 | 0x2 | Used to create "fake" objectives in missions and conceal actual objectives so as to surprise the player. A value of 1 means this objective will not be shown to the player (but can be completed). A value of 2 means an objective will be shown to the player, but cannot actually be completed. Together they are used to misdirect and create twists in a level. Examples: Mission 8 - The player is given multiple Protect objectives with Flag 2 to keep the scientists safe. The real objective is for Professor Drennon to reach the end point and get abducted (flag 1). Mission 9 - The player is given the objective to persuade Mirabelle Lucy De Saxo. This is a fake Flag 2 objective and can never be completed. The real objective with Flag 1 is for her to get to the end of the map and escape. If a flag 1 objective is the same priority as a flag 2 objective, the flag 2 objective will be "completed" (skipped really) by completing the flag 1 objective. If a flag 2 objective is a lower priority than a flag 1 objective, the flag 2 objective will be completed/skipped by completing the flag 1 objective. |
Thing | 0xA | 0x2 | The specific Thing (i.e. character) to run the objective against. This specifically means the ThingOffset value for the character in the level file. If the objective is group based, then this contains the group number instead |
X | 0xC | 0x2 | X coordinates for area based objectives (e.g. Go to) |
Y | 0xE | 0x2 | Y coordinates for area based objectives |
Z | 0x10 | 0x2 | Z coordinates for area based objectives |
Radius | 0x12 | 0x2 | Radius size for area based objectives |
Pri | 0x14 | 0x1 | Priority of objectives. Lowest number (from 0) is first. If two or more objectives have the same number, this works as an AND for success objectives (e.g. Kill group X AND Group Y), and OR for failure objectives (e.g. mission fails if NPC Y dies OR NPC Z). |
Arg2 | 0x15 | 0x1 | This allows fine tuning of some objectives. For example, PERSUADE_MEM_G uses this to store how many members of the group need to be persuaded before the objective is completed. P_PERS_G uses it to store the Thing index number of the actual person in a group as in this case the main Thing value is used to store the target group |
StringIndex | 0x16 | 0x2 | Unknown/Unused |
UniqueID | 0x18 | 0x2 | This seems to refer to the UniqueID of the Thing in question. Unclear how important this is compared to ThingOffset, which is confirmed to be essential for objectives to work |
ObjText | 0x1A | 0x1 | The unique text string number for the mission objective text as per the line number in OBJ.TXT in ALLTEXT.WAD. If this is not set, then the game falls back to the default text for that objective (Eliminate Group, All go to location, etc) |
field_1B | 0x1B | 0x4 | Unknown/Unused |
field_1F | 0x1F | 0x1 | Unknown. This value seems to grow in size as the objectives continue down |
At the very end of the file there is some kind of dense final entry of around 32 bytes that is different and not part of the mission objectives, but it's not clear what this is for.
Mission Objective Types
The mission objective types are as follows:
Objective No. | Game Code Objective Function Name | Default In-Game Text | Notes |
---|---|---|---|
1 | GAME_OBJ_P_DEAD | ASSASSINATE | Can be used as a fail state, then mission fails if unit dies |
2 | GAME_OBJ_ALL_G_DEAD | ELIMINATE GROUP | As Above |
3 | GAME_OBJ_MEM_G_DEAD | KILL GROUP MEM | As Above |
4 | GAME_OBJ_P_NEAR | RENDEZVOUS | |
5 | GAME_OBJ_MEM_G_NEAR | RENDEZVOUS2 | |
6 | GAME_OBJ_P_ARRIVES | GOTO LOCATION | Often reliant on other conditions such as having an item first |
7 | GAME_OBJ_MEM_G_ARRIVES | GOTO LOCATION | As Above |
8 | GAME_OBJ_ALL_G_ARRIVES | ALL GOTO LOCATION | As Above. Often used to end missions |
9 | GAME_OBJ_PERSUADE_P | PERSUADE | Persuade single target |
10 | GAME_OBJ_PERSUADE_MEM_G | PERSUADE GANG MEM | Persuage Group (only used once, seems to work based on coordinates) |
11 | GAME_OBJ_PERSUADE_ALL_G | PERSUADE ALL GANG | Persuade Group (based on target type) |
12 | GAME_OBJ_TIME | TIMER | Wait until X time has passed |
13 | GAME_OBJ_GET_ITEM | COLLECT ITEM | |
14 | GAME_OBJ_USE_ITEM | USE ITEM | |
15 | GAME_OBJ_FUNDS | GET BULLION | |
16 | GAME_OBJ_DESTROY_OBJECT | DESTROY BUILDING | |
17 | GAME_OBJ_PKILL P | NEUTRALISE | Kill specific agent (only used by 3 missions) |
18 | GAME_OBJ_PKILL G | NEUTRALISE MEM | |
19 | GAME_OBJ_PKILL ALL G | NEUTRALISE G | |
20 | GAME_OBJ_USE_PANET | USE P.A.NET | Use the cut Public Access Network |
21 | Unknown | ||
22 | GAME_OBJ_PROTECT_G | PROTECT GROUP | |
23 | GAME_OBJ_P_PERS_G | PEEP PERSUADE ALL | |
24 | GAME_OBJ_ALL_G_USE_V | USE VEHICLE |
As explained in the notes column above, many of these can have very different functionality depending on how they are setup by the mission objectives in the ALLXXX.MIS file. They can be simple objectives for the player to achieve, pre-requisites for another objective (e.g. go to X but bring item Y with you), fail states (an enemy NPC achieved X), and probably more.
ALLTEXT.WAD
This file contains all the text resources for the game, including the mission briefings, mission names (as visible on the pause screen), City data, mission objectives, etc. There is a corresponding file ALLTEXT.IDX that serves as an index file for this document, showing the offset of where the original constituent text files begin and end. From experiment it's clear that two mechanisms are at work for briefing information - briefings start/end data is stored in the index file against each briefing's original MISSXXX.TXT filename, but the "netscan" data (the small clickable mission objectives at the bottom left of the briefing screen) are picked from the file based on the number code in brackets before them. This scheme corresponds with the level file code, but in decimal rather than hex. An example is [0103].
ALL000.MIS Files
Below are the actual contents of the Allxxx.mis files, using tooling to extract details and make them human readable. "Mission Index" is the unique number used to load the mission from the command line. "Text Summary" is the summary text Bullfrog put into these files to summarise what each level was going to be used for. These contain WIP names and early information on campaign orders. "Briefing Number" is the number of the text file used for this mission (missions without briefing numbers are cut from the game, but there are some cut levels with briefing numbers set).
It's worth noting that overall the actual levels contained here rarely changed from the start until end of development, mostly only new levels were added to end of the file. However, mission objective data does change between files.
As with level files, these files self-report their version number as the first byte. There only seem to be two formats, the final game version 2 (used by the final ALL000.MIS, ALL001.MIS, and the PlayStation CALL000.MIS) and the older version 1 (used by all other files).
ALL000.MIS
The actual final game Mission file
Mission Index | Text Summary | Level file | Briefing Number |
---|---|---|---|
1 | SYN1 M30 EXECUTIVE ALERT | c030l001.d1 | 1 |
2 | CH2 M25 UNGUIDED | c025l001.d1 | 25 |
3 | SYN3 M32 FUSION | c032l001.d1 | 3 |
4 | SYN4 M21 KNOWLEDGE | c021l001.d2 | 4 |
5 | SYN7 M28 SACK OF ROME | c028l001.d3 | 7 |
6 | CH7 M28 SACK OF ROME | c028l001.d2 | 31 |
7 | SYN13 M79 OUT OF THIS WORLD | c079l001.d2 | 13 |
8 | SYN14 M30 DUPLICITY | c030l001.d3 | 14 |
9 | SYN17 M22 SPECIAL AGENT | c022l001.d1 | 17 |
10 | CH5 M21 LEARNING P1 | c021l001.d3 | 29 |
11 | CH8 M22 SPIES LIKE US | c022l002.dat | 32 |
12 | CH8 M25 P4 SPIES LIKE US | c025l001.d3 | 32 |
13 | CH12 M30 AUDACITY | c030l002.dat | 36 |
14 | CH13 M20 SEVERE BLOW | c020l001.d1 | 38 |
15 | CH15 M32 SPLATTERPUNKS P2 | c032l002.dat | 40 |
16 | CH15 M27 SPLATTERPUNKS P4 | c027l001.dat | 41 |
17 | CH5 M22 DONATION | c022l003.dat | 28 |
18 | CH16 M79 FREE PASSAGE P2 | c079l002.dat | 44 |
19 | CH18 M22 VISSICK HUNT | c022l004.dat | 46 |
20 | SYN18 M27 ANARCHIC SUBCONT | c027l002.dat | 19 |
21 | SYN6 M10 PHOENIX IN FLAMES | c010l001.dat | 6 |
22 | SYN - MISSION 3 - MAP 1 | c001l001.dat | 3 |
23 | SYN - MISSION 15 - MAP 3 | c003l001.dat | 15 |
24 | SYN - MISSION 18 - MAP 5 | c005l001.dat | 19 |
25 | SYN - MISSION 11 - MAP 6 | c006l001.dat | 11 |
26 | SYN - MISSION 11 - MAP 7 | c007l001.dat | 11 |
27 | CH4 M7 TEST OF FAITH | c007l003.dat | 27 |
28 | SYN - MISSION 13 - MAP 8 | c008l001.dat | 13 |
29 | SYN - MISSION 4 - MAP 2 | c002l001.dat | 4 |
30 | CHURCH - MISS 5 - MAP 2 | c002l003.dat | 0 |
31 | CHURCH - MISS 6 - MAP 1 | c001l003.dat | 30 |
32 | CHURCH - MISS 15 - MAP 8 | c008l003.dat | 35 |
33 | CHURCH - MISS 8 MAP 7 | c007l005.dat | 32 |
34 | SYN - MISS 5 - MAP 9 | c009l001.dat | 5 |
35 | SYN10 M4 TAKEN TO TAKS | c004l001.dat | 10 |
36 | SYN15A M47 BRING HIM BACK.. | c047l001.dat | 15 |
37 | SYN4B FRIENDLY PERSUASION | c050l001.dat | 4 |
38 | SYN11C M44 SCIENCE MAJOR | c044l001.dat | 11 |
39 | CH 5B M50 THE LEARNING | c050l002.d3 | 29 |
40 | ZEALOT 12. AUDACITY-BAHRAIN | c041l001.dat | 32 |
41 | AGENT 16. RE-ALIGNMENT HAWAI | c040l001.d3 | 16 |
42 | AGENT 19. SPIDERS..COLUMBO. | c046l001.dat | 0 |
43 | CH10 M41 DEADLY HARVEST | c041l002.d3 | 34 |
44 | CH9 M45 POWERMONGER | c045l001.dat | 33 |
45 | CH17 M44 FRIENDLY FIRE | c044l002.dat | 45 |
46 | AGENT 19. ELEVATOR TEST. | c046l015.d3 | 19 |
47 | ZEALOT 19. ELEVATOR TEST. | c046l014.dat | 39 |
48 | CH1 M35 HARBINGER | c035l002.dat | 24 |
49 | SYN2 M35 THE UNGUIDED | c035l001.dat | 2 |
50 | SYN11B M26 TRAIL OF PROPHET | c026l001.dat | 11 |
51 | CH3 M26 THE KNOWLEDGE | c026l002.dat | 26 |
52 | CH8B M26 SPIES LIKE US | c026l003.dat | 32 |
53 | CH16A M36 FREE PASSAGE | c036l002.dat | 43 |
54 | CH16C M36 FREE PASSAGE | c036l003.dat | 0 |
55 | SYN8A M1 HEAD HUNT | c001l015.dat | 8 |
56 | SYN8B M10 HEAD HUNT | c010l015.dat | 8 |
57 | SYN8C M28 HEAD HUNT | c028l015.dat | 9 |
58 | SYN8D M32 HEAD HUNT | c032l015.dat | 8 |
59 | SYN12 M36 WORD OF GOD | c036l001.dat | 12 |
60 | PU3 M20 GUNS GUNS GUNS | c020l002.dat | 0 |
61 | PU4 M52 COMMUNICATIONS | c052l001.dat | 0 |
62 | PU8 M28 RESCUE | c028l002.dat | 0 |
63 | PU10 M27 | c027l003.dat | 0 |
64 | UNGUIDED-MISS 3- MAP 3 | c003l007.dat | 0 |
65 | UNG14A M40 MASSIVE ASSAULT | c040l015.dat | 0 |
66 | PUNK 6-CAPETOWN-MAP 44 | c044l015.d1 | 0 |
67 | UNG 16 M26 TALKS AMBUSH | c026l004.dat | 0 |
68 | UNG2 M35 ZEALOT ATTACK | c035l004.dat | 0 |
69 | UNG19 M36 TRASH CHURCH | c036l004.dat | 0 |
70 | UNGUIDED - MISS 5 - MAP1 | c001l007.dat | 0 |
71 | CH - MISS 19 -MAP6 | c006l003.dat | 47 |
72 | CH14 M4 DIVINE LIGHT | c004l003.dat | 37 |
73 | CH - MISS 11 - MAP 9 | c009l003.dat | 35 |
74 | SYN16 M40 RE-ALIGNMENT | c040l001.dat | 16 |
75 | PU15 M30 FEROCITY | c030l008.D1 | 0 |
76 | AGENT 17-THE SPECIAL..MAP 45 | c047l001.dat | 0 |
77 | PU3 M20 GUNS GUNS GUNS | c020l007.dat | 0 |
78 | PU4 M52 COMMUNICATIONS | c052l007.dat | 0 |
79 | PUNK 6-CAPETOWN-MAP 44 | c044l007.dat | 0 |
80 | UNG2 M7 CLEAN-UP | c035l007.dat | 0 |
81 | UNG 7 - MAP 9 - GODFATHER | c009l007.dat | 0 |
82 | UNG 9 - MAP 2 - DUMPED | c002l007.dat | 0 |
83 | SYN17B M45 SLOWDIVE | c045l002.dat | 18 |
84 | SYN19A M46 COLOMBO CONFRONT. | c046l015.dat | 21 |
85 | CH15 M3 SPLATTERPUKS | c003l002.dat | 42 |
86 | CH 13 M4 SEVERE BLOW | c004l015.dat | 0 |
87 | CH14 M44 FALL AMONG THIEVES | c044l003.dat | 39 |
88 | SHUTTLE DIPLOMACY -ORBITAL | c011l001.dat | 22 |
89 | TEST | c012l001.dat | 0 |
90 | UNG14C M20 MASSIVE ASSAULT | c020l015.dat | 0 |
91 | UNG14B M35 MASSIVE ASSAULT | c035l005.dat | 0 |
92 | SYN9 M41 ARAB AGENDA | c041l003.dat | 20 |
93 | UNG14A M40 MASSIVE ASSAULT | c040l015.dat | 0 |
94 | UNG14C M20 MASSIVE ASSAULT | c020l015.dat | 0 |
95 | UNG14B M35 MASSIVE ASSAULT | c035l005.dat | 0 |
96 | SYN15 M47 TURN JAP | c047l001.d2 | 0 |
97 | SYN15 M47 TURN JAP | c047l015.dat | 0 |
98 | ZEALOT 5. THE LEARNING GENEV | c050l002.dat | 0 |
99 | CH17 M44 FRIENDLY FIRE | c000l000.dat | 0 |
100 | CH20 M46 DELIVER THE NINTH | c046l002.dat | 48 |
101 | CHURCH OF THE POISONED MIND | c065l002.dat | 23 |
102 | THE END... | c065l003.dat | 49 |
103 | TALE OF TWO CITIES | c060l015.dat | 1 |
104 | DEMO MISSION | c070l011.dat | 1 |
105 | DEMO MISSION | c047l011.dat | 0 |
106 | MULTI16 | c036l005.dat | 0 |
107 | AD'S LEVEL | c005l005.dat | 0 |
108 | DEMO2 M3 L10 OVERRUN | c003l010.dat | 2 |
109 | c035l015.d3 | 2 |
ALL000.OLD
An older version from the 7th July 1996
Mission Index | Text Summary | Level file |
---|---|---|
1 | SYN1 EXECUTIVE ALERT | c030l001.d1 |
2 | CH2 M25 UNGUIDED | c025l001.d1 |
3 | SYN3 M32 FUSION | c032l001.d1 |
4 | SYN4 FRIENDLY PERSUASION | c021l001.d2 |
5 | SYN7 M28 SACK OF ROME | c028l001.d3 |
6 | CH7 M28 SACK OF ROME | c028l001.d2 |
7 | SYN13 M79 OUT OF THIS WORLD | c079l001.d2 |
8 | SYN14 M30 DUPLICITY | c030l001.d3 |
9 | SYN17 M22 SPECIAL AGENT | c022l001.d1 |
10 | CH5 M21 LEARNING P1 | c021l001.d3 |
11 | CH8 M22 SPIES LIKE US | c022l002.dat |
12 | CH8 M25 P4 SPIES LIKE US | c025l001.d3 |
13 | CH12 M30 AUDACITY | c030l002.dat |
14 | CH13 M20 SEVERE BLOW | c020l001.d1 |
15 | CH15 M32 SPLATTERPUNKS P2 | c032l002.dat |
16 | CH15 M27 SPLATTERPUNKS P4 | c027l001.dat |
17 | CH 4 M22 DONATION | c022l003.dat |
18 | CH16 M79 FREE PASSAGE P2 | c079l002.dat |
19 | CH18 M22 VISSICK HUNT | c022l004.dat |
20 | SYN18 M27 ANARCHIC SUBCONT | c027l002.dat |
21 | SYN - MISS 6 - MAP 10 | c010l001.dat |
22 | SYN - MISSION 3 - MAP 1 | c001l001.dat |
23 | SYN - MISSION 15 - MAP 3 | c003l001.dat |
24 | SYN - MISSION 18 - MAP 5 | c005l001.dat |
25 | SYN - MISSION 11 - MAP 6 | c006l001.dat |
26 | SYN - MISSION 11 - MAP 7 | c007l001.dat |
27 | CH3B CATASTROPHIC CONVERTER | c007l003.dat |
28 | SYN - MISSION 13 - MAP 8 | c008l001.dat |
29 | SYN - MISSION 4 - MAP 2 | c002l001.dat |
30 | CHURCH - MISS 5 - MAP 2 | c002l003.dat |
31 | CHURCH - MISS 6 - MAP 1 | c001l003.dat |
32 | CHURCH - MISS 15 - MAP 8 | c008l003.dat |
33 | CHURCH - MISS 8 MAP 7 | c007l005.dat |
34 | SYN - MISS 5 - MAP 9 | c009l001.dat |
35 | SYN10 TAKEN TO MARS | c004l001.dat |
36 | SYN15A M47 BRING HIM BACK.. | c047l001.dat |
37 | SYN4B FRIENDLY PERSUASION | c050l001.dat |
38 | SYN11C M44 SCIENCE MAJOR | c044l001.dat |
39 | CH 5B M50 THE LEARNING | c050l002.d3 |
40 | ZEALOT 12. AUDACITY-BAHRAIN | c041l001.dat |
41 | AGENT 16. RE-ALIGNMENT HAWAI | c040l001.d3 |
42 | AGENT 19. SPIDERS..COLUMBO. | c046l001.dat |
43 | CH10 M41 DEADLY HARVEST | c041l002.d3 |
44 | CH9 M45 POWERMONGER | c045l001.dat |
45 | CH17 M44 FRIENDLY FIRE | c044l002.dat |
46 | AGENT 19. ELEVATOR TEST. | c046l015.d3 |
47 | ZEALOT 19. ELEVATOR TEST. | c046l014.dat |
48 | CH1 M35 ATTACK BASE | c035l002.dat |
49 | SYN2 M35 THE UNGUIDED | c035l001.dat |
50 | SYN11B M26 TRAIL OF PROPHET | c026l001.dat |
51 | CH3 M26 THE KNOWLEDGE | c026l002.dat |
52 | CH8B M26 SPIES LIKE US | c026l003.dat |
53 | CH16A M36 FREE PASSAGE | c036l002.dat |
54 | CH16C M36 FREE PASSAGE | c036l003.dat |
55 | SYN8A M1 HEAD HUNT | c001l015.dat |
56 | SYN8B M10 HEAD HUNT | c010l015.dat |
57 | SYN8C M28 HEAD HUNT | c028l015.dat |
58 | SYN8D M32 HEAD HUNT | c032l015.dat |
59 | SYN12 M36 WORD OF GOD | c036l001.dat |
60 | PU3 M20 GUNS GUNS GUNS | c020l002.dat |
61 | PU4 M52 COMMUNICATIONS | c052l001.dat |
62 | PU8 M28 RESCUE | c028l002.dat |
63 | PU10 M27 | c027l003.dat |
64 | UNGUIDED-MISS 3- MAP 3 | c003l007.dat |
65 | UNG14A M40 MASSIVE ASSAULT | c040l015.dat |
66 | PUNK 6-CAPETOWN-MAP 44 | c044l015.d1 |
67 | UNG 16 M26 TALKS AMBUSH | c026l004.dat |
68 | UNG2 M35 ZEALOT ATTACK | c035l004.dat |
69 | UNG19 M36 TRASH CHURCH | c036l004.dat |
70 | UNGUIDED - MISS 5 - MAP1 | c001l007.dat |
71 | CH - MISS 19 -MAP6 | c006l003.dat |
72 | CH13A ATOMIC WAIT | c004l003.dat |
73 | CH - MISS 11 - MAP 9 | c009l003.dat |
74 | SYN16 M40 RE-ALIGNMENT | c040l001.dat |
75 | PU15 M30 FEROCITY | c030l008.D1 |
76 | AGENT 17-THE SPECIAL..MAP 45 | c047l001.dat |
77 | PU3 M20 GUNS GUNS GUNS | c020l007.dat |
78 | PU4 M52 COMMUNICATIONS | c052l007.dat |
79 | PUNK 6-CAPETOWN-MAP 44 | c044l007.dat |
80 | UNG2 M7 CLEAN-UP | c035l007.dat |
81 | UNG 7 - MAP 9 - GODFATHER | c009l007.dat |
82 | UNG 9 - MAP 2 - DUMPED | c002l007.dat |
83 | SYN17B M45 SLOWDIVE | c045l002.dat |
84 | SYN19A M46 COLOMBO CONFRONT. | c046l015.dat |
85 | CH15 M3 SPLATTERPUKS | c003l002.dat |
86 | CH 13 M4 SEVERE BLOW | c004l015.dat |
87 | CH14 M44 FALL AMONG THIEVES | c044l003.dat |
88 | SYN 19B - MAP 11 | c011l001.dat |
89 | TEST | c012l001.dat |
90 | UNG14C M20 MASSIVE ASSAULT | c020l015.dat |
91 | UNG14B M35 MASSIVE ASSAULT | c035l005.dat |
92 | SYN9 M41 ARAB AGENDA | c041l003.dat |
93 | UNG14A M40 MASSIVE ASSAULT | c040l015.dat |
94 | UNG14C M20 MASSIVE ASSAULT | c020l015.dat |
95 | UNG14B M35 MASSIVE ASSAULT | c035l005.dat |
96 | SYN15 M47 TURN JAP | c047l001.d2 |
97 | SYN15 M47 TURN JAP | c047l015.dat |
98 | ZEALOT 5. THE LEARNING GENEV | c050l002.dat |
99 | CH17 M44 FRIENDLY FIRE | c000l000.dat |
100 | CH20 M46 DELIVER THE NINE | c046l002.dat |
101 | CHURCH OF THE POISONED MIND | c065l002.dat |
102 | THE END... |
ALL000.BEN
The oldest known version of the file, from the 1st of May 1996
Mission Index | Text Summary | Level file | Briefing Number |
---|---|---|---|
1 | SYN1 M30 FIRST BASE | c030l001.d1 | 1 |
2 | CH2 M25 UNGUIDED | c025l001.d1 | 22 |
3 | SYN3 M32 FRAGMENTATION | c032l001.d1 | 0 |
4 | SYN4 M21 KNOWLEDGE | c021l001.d2 | 4 |
5 | SYN7 M28 SACK OF ROME | c028l001.d3 | 7 |
6 | CH7 M28 SACK OF ROME | c028l001.d2 | 27 |
7 | SYN13 M79 OUT OF THIS WORLD | c079l001.d2 | 13 |
8 | SYN14 M30 DUPLICITY | c030l001.d3 | 14 |
9 | SYN17 M22 SPECIAL AGENT | c022l001.d1 | 17 |
10 | CH5 M21 LEARNING P1 | c021l001.d3 | 25 |
11 | CH8 M22 SPIES LIKE US | c022l002.dat | 0 |
12 | CH8 M25 P4 SPIES LIKE US | c025l001.d3 | 0 |
13 | CH12 M30 AUDACITY | c030l002.dat | 0 |
14 | CH13 M20 SEVERE BLOW | c020l001.d1 | 0 |
15 | CH15 M32 SPLATTERPUNKS P2 | c032l002.dat | 0 |
16 | CH15 M27 SPLATTERPUNKS P4 | c027l001.dat | 0 |
17 | CH4 M22 MONEY | c022l003.dat | 24 |
18 | CH16 M79 FREE PASSAGE P2 | c079l002.dat | 0 |
19 | CH18 M22 VISSICK HUNT | c022l004.dat | 38 |
20 | SYN18 M27 ANARCHIC SUBCONT | c027l002.dat | 18 |
21 | SYN - MISS 6 - MAP 10 | c010l001.dat | 6 |
22 | SYN - MISSION 3 - MAP 1 | c001l001.dat | 3 |
23 | SYN - MISSION 15 - MAP 3 | c003l001.dat | 0 |
24 | SYN - MISSION 18 - MAP 5 | c005l001.dat | 0 |
25 | SYN - MISSION 11 - MAP 6 | c006l001.dat | 0 |
26 | SYN - MISSION 11 - MAP 7 | c007l001.dat | 11 |
27 | CHURCH - MISS 3 - MAP 7 | c007l003.dat | 0 |
28 | SYN - MISSION 13 - MAP 8 | c008l001.dat | 0 |
29 | SYN - MISSION 4 - MAP 2 | c002l001.dat | 0 |
30 | CHURCH - MISS 5 - MAP 2 | c002l003.dat | 0 |
31 | CHURCH - MISS 6 - MAP 1 | c001l003.dat | 26 |
32 | CHURCH - MISS 15 - MAP 8 | c008l003.dat | 35 |
33 | CHURCH - MISS 8 MAP 7 | c007l005.dat | 0 |
34 | SYN - MISS 5 - MAP 9 | c009l001.dat | 5 |
35 | SYN - MISS 10 - MAP 4 | c004l001.dat | 10 |
36 | AGENT 15. MOUTH OF..TOKYO 47 | c047l001.dat | 15 |
37 | AGENT 4B. TE KNOW..M50 GENEV | c050l001.dat | 0 |
38 | AGENT 11. TRAIL OF..CAPETOWN | c044l001.dat | 0 |
39 | ZEALOT 5. THE LEARNING GENEV | c050l002.d3 | 0 |
40 | ZEALOT 12. AUDACITY-BAHRAIN | c041l001.dat | 32 |
41 | AGENT 16. RE-ALIGNMENT HAWAI | c040l001.d3 | 16 |
42 | AGENT 19. SPIDERS..COLUMBO. | c046l001.dat | 0 |
43 | ZEALOT 10. ASSASSINATION-M41 | c041l002.d3 | 30 |
44 | ZEALOT 9.CRIUSER-MAP 45 | c045l001.dat | 29 |
45 | ZEALOT 17. FRIENDLY FIRE M44 | c044l002.dat | 37 |
46 | AGENT 19. ELEVATOR TEST. | c046l015.d3 | 19 |
47 | ZEALOT 19. ELEVATOR TEST. | c046l014.dat | 39 |
48 | CH1 M35 ATTACK BASE | c035l002.dat | 21 |
49 | SYN2 M35 THE UNGUIDED | c035l001.dat | 2 |
50 | SYN11B M26 TRAIL OF PROPHET | c026l001.dat | 0 |
51 | CH3 M26 THE KNOWLEDGE | c026l002.dat | 23 |
52 | CH8B M26 SPIES LIKE US | c026l003.dat | 0 |
53 | CH16A M36 FREE PASSAGE | c036l002.dat | 36 |
54 | CH16C M36 FREE PASSAGE | c036l003.dat | 0 |
55 | SYN8A M1 HEAD HUNT | c001l015.dat | 8 |
56 | SYN8B M10 HEAD HUNT | c010l015.dat | 0 |
57 | SYN8C M28 HEAD HUNT | c028l015.dat | 0 |
58 | SYN8D M32 HEAD HUNT | c032l015.dat | 0 |
59 | SYN12 M36 WORD OF GOD | c036l001.dat | 12 |
60 | PU3 M20 GUNS GUNS GUNS | c020l002.dat | 0 |
61 | PU4 M52 COMMUNICATIONS | c052l001.dat | 0 |
62 | PU8 M28 RESCUE | c028l002.dat | 0 |
63 | PU10 M27 | c027l003.dat | 0 |
64 | UNGUIDED-MISS 3- MAP 3 | c003l007.dat | 0 |
65 | PUNK 1 | c040l015.dat | 0 |
66 | PUNK 6-CAPETOWN-MAP 44 | c044l015.d1 | 0 |
67 | UNG 16 M26 TALKS AMBUSH | c026l004.dat | 0 |
68 | UNG2 M7 CLEAN-UP | c035l004.dat | 0 |
69 | UNG19 M36 TRASH CHURCH | c036l004.dat | 0 |
70 | UNGUIDED - MISS 5 - MAP1 | c001l007.dat | 0 |
71 | CH - MISS 15 - MAP 6 | c006l003.dat | 0 |
72 | CHURCH - MISS 13 - MAP 4 | c004l003.dat | 33 |
73 | CH - MISS 11 - MAP 9 | c009l003.dat | 0 |
74 | AGENT 16. RE-ALIGNMENT HAWAI | c040l001.dat | 0 |
75 | PU15 M30 FEROCITY | c030l008.D1 | 0 |
76 | BOLLOX | c000l000.dat | 0 |
77 | PU3 M20 GUNS GUNS GUNS | c020l007.dat | 0 |
78 | PU4 M52 COMMUNICATIONS | c052l007.dat | 0 |
79 | PUNK 6-CAPETOWN-MAP 44 | c044l007.dat | 0 |
80 | UNG2 M7 CLEAN-UP | c035l007.dat | 0 |
81 | UNG 7 - MAP 9 - GODFATHER | c009l007.dat | 0 |
82 | UNG 9 - MAP 2 - DUMPED | c002l007.dat | 0 |
83 | AGENT 17-PT.2 THESPECIALAGEN | c045l002.dat | 0 |
84 | AGENT 19. ELEVATOR TEST. | c046l015.dat | 0 |
85 | CH15 M3 SPLATTERPUKS | c003l002.dat | 0 |
ALL099.MIS
This is exactly the same as ALL000.MIS in terms of text and level files, so not reproduced here.
All001.MIS
These are the multiplayer levels used by the final game. I'ts not clear if there is any way to directly load these using the Mission Index.
Mission | Text Summary | Level |
---|---|---|
1 | SALZBURG | c002l005.dat |
2 | BANGKOK | c003l003.dat |
3 | NEW YORK | c004l004.dat |
4 | SEVASTOPOL | c005l015.dat |
5 | GENEVA | c050l003.dat |
6 | TOKYO | c047l002.dat |
7 | COLOMBO | c046l005.dat |
8 | CAPE TOWN | c044l005.dat |
9 | ANCHORAGE | c060l005.dat |
10 | DETROIT | c035l005.dat |
11 | ADELAIDE | c006l005.dat |
12 | CHRISTCHURCH | c036l005.dat |
13 | BEIJING | c032l005.dat |
14 | NUUK | c008l005.dat |
15 | HONG KONG | c001l005.dat |
ALL098.MIS
These are more multiplayer levels. They are cut from the final game.
Mission | Text Summary | Level |
---|---|---|
1 | MULTI 1 | c001l002.dat |
2 | MULTI 2 | c002l002.dat |
3 | MULTI 3 | c003l003.dat |
4 | MULTI 4 | c004l004.dat |
5 | MULTI 5 | c005l015.dat |
6 | MULTI 6 | c050l003.dat |
7 | MULTI 7 | c047l002.dat |
8 | MULTI 8 | c046l005.dat |
9 | MULTI 9 | c044l005.dat |
10 | MULTI 10 | c041l005.dat |
11 | MULTI 11 | c040l005.dat |
12 | MULTI 12 | c060l005.dat |
13 | MULTI 13 | c065l005.dat |
14 | MULTI 14 | c035l005.dat |
15 | MULTI 15 | c006l005.dat |
PlayStation version
CALL000.MIS from the PS1 version of the game. The PlayStation version has a slightly different file format; level entries are now 72 bytes instead of 76. There also seems to be less data in each level definition, but the mission briefing and associated bytes are the same format. While mission objectives are still present here, levels also now seem to store the mission objective in them as well or have some other kind of unique way of matching as renaming a file to another still preserves the renamed files' objectives, something not possible in the PC version (the initial objective listed on screen is still wrong, however).
Mission Index | Text Summary | PC level | PS1 Filename | Briefing Number |
---|---|---|---|---|
1 | SYN1 M30 EXECUTIVE ALERT | c050l001.dat | MAP50L01.MUL | 1 |
2 | CH2 M25 UNGUIDED | c025l001.d1 | MAP25L16.MUL | 25 |
3 | CH2 M10 UNREST | c010l002.dat | MAP10L02.MUL | 21 |
4 | SYN4 M21 KNOWLEDGE | c021l001.d2 | MAP21L31.MUL | 4 |
5 | SYN7 M28 SACK OF ROME | c028l001.d3 | MAP28L46.MUL | 7 |
6 | CH7 M28 SACK OF ROME | c028l001.d2 | MAP28L31.MUL | 25 |
7 | SYN13 M79 OUT OF THIS WORLD | c079l001.d2 | MAP79L31.MUL | 13 |
8 | SYN14 M30 DUPLICITY | c030l001.d3 | MAP30L46.MUL | 14 |
9 | SYN17 M22 SPECIAL AGENT | c022l001.d1 | MAP22L16.MUL | 16 |
10 | CH5 M21 LEARNING P1 | c021l001.d3 | MAP21L46.MUL | 29 |
11 | CH8 M22 SPIES LIKE US | c022l002.dat | MAP22L02.MUL | 32 |
12 | CH8 M25 P4 SPIES LIKE US | c025l001.d3 | MAP25L46.MUL | 32 |
13 | CH12 M30 AUDACITY | c030l002.dat | MAP30L02.MUL | 36 |
14 | CH13 M20 SEVERE BLOW | c020l001.d1 | MAP20L16.MUL | 38 |
15 | CH15 M32 SPLATTERPUNKS P2 | c032l002.dat | MAP32L02.MUL | 40 |
16 | CH15 M27 SPLATTERPUNKS P4 | c027l001.dat | MAP27L01.MUL | 41 |
17 | CH5 M22 DONATION | c022l003.dat | MAP22L03.MUL | 23 |
18 | CH16 M79 FREE PASSAGE P2 | c079l002.dat | MAP79L02.MUL | 44 |
19 | CH18 M22 VISSICK HUNT | c022l004.dat | MAP22L04.MUL | 34 |
20 | SYN18 M27 ANARCHIC SUBCONT | c027l002.dat | MAP27L02.MUL | 19 |
21 | SYN6 M10 PHOENIX IN FLAMES | c010l001.dat | MAP10L01.MUL | 6 |
22 | SYN - MISSION 3 - MAP 1 | c001l001.dat | MAP01L01.MUL | 3 |
23 | SYN - MISSION 15 - MAP 3 | c003l001.dat | MAP03L01.MUL | 14 |
24 | SYN - MISSION 18 - MAP 5 | c005l001.dat | MAP05L01.MUL | 19 |
25 | SYN - MISSION 11 - MAP 6 | c006l001.dat | MAP06L01.MUL | 11 |
26 | SYN - MISSION 11 - MAP 7 | c007l001.dat | MAP07L01.MUL | 11 |
27 | CH4 M7 TEST OF FAITH | c007l003.dat | MAP07L03.MUL | 22 |
28 | SYN - MISSION 13 - MAP 8 | c008l001.dat | MAP08L01.MUL | 12 |
29 | SYN - MISSION 4 - MAP 2 | c002l001.dat | MAP02L01.MUL | 4 |
30 | CHURCH - MISS 5 - MAP 2 | c002l003.dat | MAP02L03.MUL | 0 |
31 | CHURCH - MISS 6 - MAP 1 | c001l002.dat | MAP01L02.MUL | 24 |
32 | CHURCH - MISS 15 - MAP 8 | c008l003.dat | MAP08L03.MUL | 35 |
33 | CHURCH - MISS 8 MAP 7 | c007l005.dat | MAP07L05.MUL | 27 |
34 | SYN - MISS 5 - MAP 9 | c009l001.dat | MAP09L01.MUL | 5 |
35 | SYN10 M4 TAKEN TO TAKS | c004l001.dat | MAP04L01.MUL | 9 |
36 | SYN15A M47 BRING HIM BACK.. | c047l001.dat | MAP47L01.MUL | 13 |
37 | SYN4B FRIENDLY PERSUASION | c050l001.dat | MAP50L01.MUL | 4 |
38 | SYN11C M44 SCIENCE MAJOR | c044l001.dat | MAP44L01.MUL | 10 |
39 | CH 5B M50 THE LEARNING | c050l002.d3 | MAP50L47.MUL | 29 |
40 | ZEALOT 12. AUDACITY-BAHRAIN | c041l001.dat | MAP41L01.MUL | 32 |
41 | AGENT 16. RE-ALIGNMENT HAWAI | c040l001.d3 | MAP40L46.MUL | 16 |
42 | AGENT 19. SPIDERS..COLUMBO. | c046l001.dat | MAP46L01.MUL | 0 |
43 | CH10 M41 DEADLY HARVEST | c041l002.d3 | MAP41L47.MUL | 29 |
44 | CH9 M45 POWERMONGER | c045l001.dat | MAP45L01.MUL | 28 |
45 | CH17 M44 FRIENDLY FIRE | c044l002.dat | MAP44L02.MUL | 33 |
46 | AGENT 19. ELEVATOR TEST. | c046l015.d3 | MAP46L60.MUL | 19 |
47 | ZEALOT 19. ELEVATOR TEST. | c046l014.dat | MAP46L14.MUL | 39 |
48 | CH1 M35 HARBINGER | c035l002.dat | MAP35L02.MUL | 20 |
49 | SYN2 M35 THE UNGUIDED | c035l001.dat | MAP35L01.MUL | 2 |
50 | SYN11B M26 TRAIL OF PROPHET | c026l001.dat | MAP26L01.MUL | 11 |
51 | CH3 M26 THE KNOWLEDGE | c026l002.dat | MAP26L02.MUL | 26 |
52 | CH8B M26 SPIES LIKE US | c026l003.dat | MAP26L03.MUL | 26 |
53 | CH16A M36 FREE PASSAGE | c036l002.dat | MAP36L02.MUL | 43 |
54 | CH16C M36 FREE PASSAGE | c036l003.dat | MAP36L03.MUL | 0 |
55 | SYN8A M1 HEAD HUNT | c001l015.dat | MAP01L15.MUL | 8 |
56 | SYN8B M10 HEAD HUNT | c010l015.dat | MAP10L15.MUL | 8 |
57 | SYN8C M28 HEAD HUNT | c028l015.dat | MAP28L15.MUL | 9 |
58 | SYN8D M32 HEAD HUNT | c032l015.dat | MAP32L15.MUL | 8 |
59 | SYN12 M36 WORD OF GOD | c036l001.dat | MAP36L01.MUL | 12 |
60 | PU3 M20 GUNS GUNS GUNS | c020l002.dat | MAP20L02.MUL | 0 |
61 | PU4 M52 COMMUNICATIONS | c052l001.dat | MAP52L01.MUL | 0 |
62 | PU8 M28 RESCUE | c028l002.dat | MAP28L02.MUL | 0 |
63 | PU10 M27 | c027l003.dat | MAP27L03.MUL | 0 |
64 | UNGUIDED-MISS 3- MAP 3 | c003l007.dat | MAP03L07.MUL | 0 |
65 | UNG14A M40 MASSIVE ASSAULT | c040l015.dat | MAP40L15.MUL | 0 |
66 | PUNK 6-CAPETOWN-MAP 44 | c044l015.d1 | MAP44L30.MUL | 0 |
67 | UNG 16 M26 TALKS AMBUSH | c026l004.dat | MAP26L04.MUL | 0 |
68 | UNG2 M35 ZEALOT ATTACK | c035l004.dat | MAP35L04.MUL | 0 |
69 | UNG19 M36 TRASH CHURCH | c036l004.dat | MAP36L04.MUL | 0 |
70 | UNGUIDED - MISS 5 - MAP1 | c001l007.dat | MAP01L07.MUL | 0 |
71 | CH - MISS 19 -MAP6 | c006l003.dat | MAP06L03.MUL | 35 |
72 | CH14 M4 DIVINE LIGHT | c004l003.dat | MAP04L03.MUL | 30 |
73 | CH - MISS 11 - MAP 9 | c009l003.dat | MAP09L03.MUL | 35 |
74 | SYN16 M40 RE-ALIGNMENT | c040l001.dat | MAP40L01.MUL | 15 |
75 | PU15 M30 FEROCITY | c030l008.D1 | MAP30L23.MUL | 0 |
76 | AGENT 17-THE SPECIAL..MAP 45 | c047l001.dat | MAP47L01.MUL | 0 |
77 | PU3 M20 GUNS GUNS GUNS | c020l007.dat | MAP20L07.MUL | 0 |
78 | PU4 M52 COMMUNICATIONS | c052l007.dat | MAP52L07.MUL | 0 |
79 | PUNK 6-CAPETOWN-MAP 44 | c044l007.dat | MAP44L07.MUL | 0 |
80 | UNG2 M7 CLEAN-UP | c035l007.dat | MAP35L07.MUL | 0 |
81 | UNG 7 - MAP 9 - GODFATHER | c009l007.dat | MAP09L07.MUL | 0 |
82 | UNG 9 - MAP 2 - DUMPED | c002l007.dat | MAP02L07.MUL | 0 |
83 | SYN17B M45 SLOWDIVE | c045l002.dat | MAP45L02.MUL | 17 |
84 | SYN19A M46 COLOMBO CONFRONT. | c046l015.dat | MAP46L15.MUL | 19 |
85 | CH15 M3 SPLATTERPUKS | c003l002.dat | MAP03L02.MUL | 32 |
86 | CH 13 M4 SEVERE BLOW | c004l015.dat | MAP04L15.MUL | 0 |
87 | CH14 M44 FALL AMONG THIEVES | c044l003.dat | MAP44L03.MUL | 31 |
88 | SHUTTLE DIPLOMACY -ORBITAL | c011l001.dat | MAP11L01.MUL | 22 |
89 | TEST | c012l001.dat | MAP12L01.MUL | 0 |
90 | UNG14C M20 MASSIVE ASSAULT | c020l015.dat | MAP20L15.MUL | 0 |
91 | UNG14B M35 MASSIVE ASSAULT | c035l005.dat | MAP35L05.MUL | 0 |
92 | SYN9 M41 ARAB AGENDA | c041l003.dat | MAP41L03.MUL | 18 |
93 | UNG14A M40 MASSIVE ASSAULT | c040l015.dat | MAP40L15.MUL | 0 |
94 | UNG14C M20 MASSIVE ASSAULT | c020l015.dat | MAP20L15.MUL | 0 |
95 | UNG14B M35 MASSIVE ASSAULT | c035l005.dat | MAP35L05.MUL | 0 |
96 | SYN15 M47 TURN JAP | c047l001.d2 | MAP47L31.MUL | 0 |
97 | SYN15 M47 TURN JAP | c047l015.dat | MAP47L15.MUL | 0 |
98 | ZEALOT 5. THE LEARNING GENEV | c050l002.dat | MAP50L02.MUL | 0 |
99 | CH17 M44 FRIENDLY FIRE | c000l000.dat | MAP00L00.MUL | 0 |
100 | CH20 M46 DELIVER THE NINTH | c046l002.dat | MAP46L02.MUL | 36 |
101 | CHURCH OF THE POISONED MIND | c065l002.dat | MAP65L02.MUL | 23 |
102 | THE END... | c065l003.dat | MAP65L03.MUL | 49 |
103 | TALE OF TWO CITIES | c060l015.dat | MAP60L15.MUL | 1 |
104 | DEMO MISSION | c070l011.dat | MAP70L11.MUL | 1 |
105 | DEMO MISSION | c047l011.dat | MAP47L11.MUL | 0 |
106 | MULTI16 | c036l005.dat | MAP36L05.MUL | 0 |
107 | AD'S LEVEL | c005l005.dat | MAP05L05.MUL | 0 |
108 | DEMO2 M3 L10 OVERRUN | c003l010.dat | MAP03L10.MUL | 2 |
109 | c035l015.d3 | MAP35L60.MUL | 2 | |
110 | TEST1 | c040l008.d3 | MAP40L53.MUL | 0 |
111 | CH2 M10 UNREST | c010l002.dat | MAP10L02.MUL | 25 |