Scenario.chk

The CHK file is a very dense file found inside the SCM or SCX file (as "staredit\scenario.chk"), which is just a renamed MPQ archive.

In this article, some shorthand will be used for datatypes:

* **u8** for an unsigned byte
* **u16** for an unsigned short (2-byte integer)
* **u32** for an unsigned int (4-byte integer)
* **uT[*a*]** for an array of datatype **T** (8, 16, 32) with ***a*** number of elements
* **uT[*a*][*b*]** for a two-dimensional array of datatype **T**, where each element of **T[*a*]** will be an array of size ***b***

# Sections

The CHK is split into several named chunks (hence the file extension, an abbreviation of *CHunK*).

Each section begins with an 8-byte header:

* **u32** Name - A 4-byte string uniquely identifying that chunk's purpose.
* **u32** Size - The size, in bytes, of the chunk (not including this header)

Followed by as many bytes as 'Size', in a format described below.

Some things to keep in mind about the CHK section:

* Invalid sections can exist and will be ignored. While Size is unsigned, it can safely be a negative value to read a chunk earlier in the file. This allows for "section stacking", allowing smaller sections to be placed inside of larger ones or duplicate triggers or units to take less space in the file.
* All sections will marked "Not required." are never read by StarCraft and can safely be omitted. However they may or may not be read by StarEdit, and may cause the map to be unreadable in an editor.
* Note "Hybrid", or "Enhanced", maps were introduced in 1.04. They are supported both by Original StarCraft and Brood War and usually contain sections for both types (e.g., UPGS and UPGx, TECS and TECx), but both sections aren't necessarily read.
* Duplicate sections will overwrite previously defined section data, except where noted. Note this only applies to those section that pass the specified "validation" parameters, as any section that does not successfully validate will be ignored.

## "TYPE" - Map Type

*Not required.*

This section specifies the type of scenario.

* **u32**: Specifies the type of scenario:
	+ **0x53574152** or **RAWS** - 1.04 StarCraft and above ("hybrid")
	+ **0x42574152** or **RAWB** - Brood War

## "VER " - Format Version

*Required for all versions and all game types.*
*Validation: Must be size of 2 bytes.*

This section identifies the file format version.

* **u16**: File format version:
	+ **59** - 1.00 Starcraft
	+ **63** - 1.04 Starcraft and above ("hybrid")
	+ **205** - Brood War

This is the only version code section to actually be read by StarCraft (of TYPE, VER , IVER, and IVE2). Any other value is invalid in retail StarCraft and is usually a beta version.

## "IVER" - Map Version

*Not required.*

This section "additionally identifies" the map version.

* **u16**: "Additional file format version:"
	+ **9** - beta/obsolete versions
	+ **10** - current versions

Contrary to popular belief, it doesn't get "replaced" by IVE2 in hybrid/Brood War scenarios: both seem to be written by StarEdit but not read by StarCraft.

## "IVE2" - Map Version

*Not required.*

This section "additionally identifies" the map version.

* **u16**: "Additional file format version:"
	+ **11** - 1.04 StarCraft and above ("hybrid") or Brood War.

This section does not "replace" IVER in hybrid/Brood War scenarios: both seem to be written by StarEdit but not read by StarCraft.

## "VCOD" - Verification Code

*Required for all versions and all game types.*
*Validation: Must be equal to size of the VCOD data in the EXE resource. Must result in valid checksum.*

This section has a verification code to make sure this is actually a CHK file.

* **u32[256]**: Seed values.
* **u8[16]**: Operation codes to produce the resulting hash:
	+ **00** - XOR's the current hash with the total values of OWNR, SIDE \* 256, FORC \* 65536
	+ **01** - Adds to the current hash with the total values of OWNR, SIDE \* 256, FORC \* 65536
	+ **02** - Subtracts from the current hash with the total values of OWNR, SIDE \* 256, FORC \* 65536
	+ **03** - XOR's the current hash with the VCOD table at index OWNR, SIDE, FORC, and 0
	+ **04** - same as 0x03
	+ **05** - same as 0x03
	+ **06** - Complex function consisting of ORs and shifts
	+ **07** - Inverted version of 0x06, switching direction of all shifts
	+ **08+** - Do nothing

Opcodes and seeds do not have to match those in EXE resource, as long as the same value is produced.
The only indexes in the seed table that are referenced are those that correspond individual values of OWNR, SIDE, FORC player assignments, and index 0.

## "IOWN" - StarEdit Player Types

*Not Required.*

This section specifies the owner of each player.

* **u8[12]**: One byte for each player, specifies the owner of the player:
	+ **00** - Inactive
	+ *01* - Computer (game)
	+ *02* - Occupied by Human Player
	+ **03** - Rescue Passive
	+ **04** - Unused
	+ **05** - Computer
	+ **06** - Human (Open Slot)
	+ **07** - Neutral
	+ *08* - Closed slot

This section is separate from OWNR as a staredit value. Staredit does not display "inactive" as a valid option. Italicized settings denote invalid map options, which may involve a buffer overflow.

## "OWNR" - StarCraft Player Types

*Required for all versions and all game types.*
*Validation: Must be size of 12 bytes.*

This section designates the controller of a particular player. It is exactly the same as the "IOWN" section, except there is an additional value, 0x00 for Inactive.

* **u8[12]**: One byte for each player, specifies the owner of the player:
	+ **00** - Inactive
	+ *01* - Computer (game)
	+ *02* - Occupied by Human Player
	+ **03** - Rescue Passive
	+ **04** - Unused
	+ **05** - Computer
	+ **06** - Human (Open Slot)
	+ **07** - Neutral
	+ *08* - Closed slot

Italicized settings denote invalid map options, which may involve a buffer overflow.

## "ERA " - Tileset

*Required for all versions and all game types.*
*Validation: Must be size of 2 bytes.*

This section indicates the tileset of the scenario.

* **u16**: Designates tileset:
	+ **00** - Badlands
	+ **01** - Space Platform
	+ **02** - Installation
	+ **03** - Ashworld
	+ **04** - Jungle
	+ **05** - Desert
	+ **06** - Arctic
	+ **07** - Twilight

StarCraft masks the tileset indicator's bit value, so bits after the third place (anything after the value "7") are removed. Thus, 9 (1001 in binary) is interpreted as 1 (0001), 10 (1010) as 2 (0010), etc.
Desert, Arctic, and Twilight are Brood War-only tilesets.

## "DIM " - Map Dimensions

*Required for all versions and all game types.*
*Validation: Must be size of 4 bytes.*

This section contains the dimensions of the map.

* **u16**: Width of the map
* **u16**: Height of the map

The Width/Height of the map is measured in the number of square 32x32p tiles.
Standard Dimensions are 64, 96, 128, 192, and 256.

## "SIDE" - Player Races

*Required for all versions and all game types.*
*Validation: Must be size of 12 bytes.*

This section contains the species/race of each player.

* **u8[12]**: 1 byte per player the species of that player:
	+ **00** - Zerg
	+ **01** - Terran
	+ **02** - Protoss
	+ *03* - Invalid (Independent)
	+ *04* - Invalid (Neutral)
	+ **05** - User Selectable
	+ **06** - Random (Forced; Acts as a selected race)
	+ *07* - Inactive

Italicized settings denote invalid map options. Note Players 9-11 are defaultly Inactive and Player 12 is defaultly Neutral.

## "MTXM" - StarCraft Terrain

*Required for all versions and all game types.*
*Validation: Must be less than or equal to 131072 (0x20000) bytes (256 \* 256 \* 2).*

Terrain section that contains a map of the level's appearance. StarEdit disregards this section and instead uses TILE; it is only used in Starcraft.

* **u16[map width \* height]**: one integer for each tile.

Notes about MTXM:

* The Width/Height of the map is measured in the number of square 32x32p tiles.
* Tiles in this section are listed from left to right, top to bottom.
* The values for each integer are their respective "MegaTile" values in the scenario's tileset. If the size of this section is greater than width\*height\*2, the data following is ignored. If the size of this section is less, the resulting tiles that have not been defined will be null tiles.
* This section includes doodads as terrain; TILE, which is otherwise identical, doesn't. Out of the terrain sections (TILE, ISOM, and MTXM), SC only reads MTXM for the sake of not having to generate this data on-the-fly: it contains the exact representation of the level's appearance, including doodads. TILE, on the other hand, is directly tied via a tile lookup function to ISOM, and exists for the sake of not having to generate tiles from ISOM on-the-fly in StarEdit.
* If MTXM section is smaller than (map width\*height), then the remaining tiles will be filled with null tiles or tiles specified by previous MTXM sections.

## "PUNI" - Player Unit Restrictions

*Required for all versions. Not required for Melee.*
*Validation: Must be size of 5700 bytes.*

This section contains player unit restrictions: it indicates whether the player can or cannot build a particular unit.

* **u8[228][12]**: 1 byte for each unit in order of its unit id, then each player, for player availability:
	+ **00** - That unit is not available for production if the player has 'override defaults' on
	+ **01** - That unit is available for production if the player has 'override defaults' on
* **u8[228]**: 1 byte for each unit in order of it's unit id, for global availability defaults (for all players):
	+ **00** - That unit is not available for production
	+ **01** - That unit is available for production
* **u8[228][12]**: 1 byte for each unit in order of its unit id, then each player, indicating whether a player uses the global availability defaults.
	+ **00** - Player overrides defaults for this unit
	+ **01** - Player uses defaults for this unit

## "UPGR" - Upgrade Restrictions

*Required for Vanilla and Hybrid (in Original mode). Not required for Melee.*
*Validation: Must be size of 1748 bytes.*
*In Brood War scenarios, this section is replaced by "UPGx".*

This section contains player upgrade restrictions: it indicates the starting/maximum levels at/to which a player can perform a particular upgrade.

* **u8[46][12]**: 1 byte for the maximum level a player can upgrade to, in order of its upgrade id, then each player
* **u8[46][12]**: 1 byte for the level of an upgrade a player starts off with, in order of its upgrade id, then each player
* **u8[46]**: 1 byte for the global default maximum level of each upgrade, in order of its upgrade id.
* **u8[46]**: 1 byte for the global default starting level of each upgrade, in order of its upgrade id.
* **u8[46][12]**: 1 byte for each upgrade in order of its upgrade id, then each player, indicating whether a player uses the global upgrade defaults:
	+ **00** - Player does not use global upgrade defaults for this upgrade
	+ **01** - Player uses upgrade defaults for this upgrade

See #List of Upgrade IDs.

## "PTEC" - Tech Restrictions

*Required for Vanilla and Hybrid (in Original mode). Not required for Melee.*
*Validation: Must be size of 912 bytes.*
*In Brood War scenarios, this section is replaced by "PTEx".*

This section contains player technology availability restrictions: it indicates whether a player starts off with a particular technology or can research a particular technology.

* **u8[24][12]**: 1 byte for each technology id, then each player, for player availability:
	+ **00** - Technology is not available for a player
	+ **01** - Technology is available for a player
* **u8[24][12]**: 1 byte for each technology id, then each player, for "already researched" status:
	+ **00** - Technology is not already researched
	+ **01** - Technology is already researched
* **u8[24]**: 1 byte for each technology for global availability defaults:
	+ **00** - Technology is not available by default
	+ **01** - Technology is available by default
* **u8[24]**: 1 byte for each technology for global "already researched" defaults:
	+ **00** - Technology is not already researched by default
	+ **01** - Technology is already researched by default
* **u8[24][12]**: 1 byte for each technology in order of its technology id, then each player, indicating whether a player uses the global defaults:
	+ **00** - Technology overrides defaults for player
	+ **01** - Technology uses default settings for player

See #List of Technology IDs.

## "UNIT" - Placed Units

*Required for all versions and all game types.*
*Validation: Must be a multiple of 36 bytes.*

This section contains all the pre-placed units on the map and their properties. Each unit on the map gets the following structure:

* **u32**: The unit's class instance (sort of a "serial number")
* U16**: X coordinate of unit**
* U16**: Y coordinate of unit**
* **u16**: Unit ID
* **u16**: Type of relation to another building (i.e. add-on, nydus link)
	+ **Bit 9** - Nydus Link
	+ **Bit 10** - Addon Link
* **u16**: Flags of special properties which can be applied to the unit and are valid:
	+ **Bit 0** - Cloak is valid
	+ **Bit 1** - Burrow is valid
	+ **Bit 2** - In transit is valid
	+ **Bit 3** - Hallucinated is valid
	+ **Bit 4** - Invincible is valid
	+ **Bit 5-15** - Unused
* **u16**: Out of the elements of the unit data, the properties which can be changed by the map maker:
	+ **Bit 0** - Owner player is valid (the unit is not a critter, start location, etc.; not a neutral unit)
	+ **Bit 1** - HP is valid
	+ **Bit 2** - Shields is valid
	+ **Bit 3** - Energy is valid (unit is a wraith, etc.)
	+ **Bit 4** - Resource amount is valid (unit is a mineral patch, vespene geyser, etc.)
	+ **Bit 5** - Amount in hangar is valid (unit is a reaver, carrier, etc.)
	+ **Bit 6-15** - Unused
* **u8**: Player number of owner (0-based)
* **u8**: Hit points % (1-100)
* **u8**: Shield points % (1-100)
* **u8**: Energy points % (1-100)
* **u32**: Resource amount
* **u16**: Number of units in hangar
* **u16**: Unit state flags
	+ **Bit 0** - Unit is cloaked
	+ **Bit 1** - Unit is burrowed
	+ **Bit 2** - Building is in transit
	+ **Bit 3** - Unit is hallucinated
	+ **Bit 4** - Unit is invincible
	+ **Bit 5-15** - Unused
* **u32**: Unused
* **u32**: Class instance of the unit to which this unit is related to (i.e. via an add-on, nydus link, etc.). It is "0" if the unit is not linked to any other unit.

Notes about UNIT:

* The X/Y coordinates are the center of the sprite of the unit (in pixels).
* Please edit if you could confirm the bit values to be correct/if you know more bit values.
* Default values will apply if bit values are unchecked. Defaults: 100% HP, 100% SP, 100% EP, 0 resources, 0 hangar count.
* This section can be split. Additional UNIT sections will add more units.

## "ISOM" - Isometric Terrain

*Not Required.*

This section is required to place isometric terrain on the map. It provides data about the nature of the isometrical "diamonds" (the editing mode of StarEdit).

* **u16[ (width / 2 + 1) \* (height + 1) \* 4 ]**: 4 integers for each map rectangle tile (plus one extra tile to the right and bottom of the map), as per the RECT structure. Each rectangle border (left, top, right, bottom) is assigned an "ISOM value." These form the "diamond" pattern of the map, and each rectangle thus gets two ISOM values associated with it. StarEdit somehow hashes these (the exact algorithm is unknown) and thus produces the tile index of the rectangle (which it stores in TILE for reasons of efficiency). The index of the rectangle's right tile is that of its left tile + 16.

This section is the only truly unknown section of the .chk format. If you're an ex-Blizzard employee or SI, please edit this section. If you have additional research, post on the forums about it and/or edit this section.

## "TILE" - StarEdit Terrain

*Not Required.*

This section will only be different from the MTXM section in tiles where doodads are present.

* **u16[ map width \* height ]**: 1 integer for each map tile. Moves horizontally across the map.

The values in TILE are normally directly generated from the ISOM section (see "'ISOM' section" above), and thus do not match that of MTXM on doodad tiles.

## "DD2 " - StarEdit Sprites (Doodads)

*Not Required.*

This section contains the doodad map of the level. There are several parts to doodads. The graphical portion is stored in the MTXM section. The second part of the doodad is stored in this section. This section is only used by the map editor.

Each doodad in the map gets the following structure:

* **u16**: Number of the doodad. Size of the doodad is dependent on this. Doodads are different for each tileset.
* **u16**: X coordinate of the doodad unit
* **u16**: Y coordinate of the doodad unit
* **u8**: Player number that owns the doodad
* **u8**: Enabled flag
	+ **00** - Doodad is enabled (trap can attack, door is closed, etc)
	+ **01** - Doodad is disabled

## "THG2" - StarCraft Sprites

*Required for all versions and all game types.*
*Validation: Must be a multiple of 10 bytes.*

The map editor only writes to this section. Starcraft uses this section.

Sprites, usually on doodads, get the following structure.

* **u16**: Unit/Sprite number of the sprite
* **u16**: X coordinate of the doodad unit
* **u16**: Y coordinate of the doodad unit
* **u8**: Player number that owns the doodad
* **u8**: Unused
* **u16**: Flags
	+ **Bit 0-11** - Unused
	+ **Bit 12** - Draw as sprite (Determines if it is a sprite or a unit sprite)
	+ **Bit 13** - Unused
	+ **Bit 14** - Unused
	+ **Bit 15** - Disabled (Only valid if Draw as sprite is unchecked, disables the unit)

This section can be split. Additional THG2 sections will add more sprites.

## "MASK" - Fog of War Layer

*Required for all versions. Not required for Melee.*
*Validation: This section will always validate.*

This section contains the data on fog of war for each player. This is whether at the start of the game that levels of black space that is available.

* **u8[ map width \* height ]**: One byte for each map tile. The bits indicate for each player the fog of war.
	+ **Bit 0** - Player 1's Fog of War. If on, the tile is covered with fog. if off, the tile is visible.
	+ **Bit 1** - Player 2's Fog of War. If on, the tile is covered with fog. if off, the tile is visible.
	+ **Bit 2** - Player 3's Fog of War. If on, the tile is covered with fog. if off, the tile is visible.
	+ **Bit 3** - Player 4's Fog of War. If on, the tile is covered with fog. if off, the tile is visible.
	+ **Bit 4** - Player 5's Fog of War. If on, the tile is covered with fog. if off, the tile is visible.
	+ **Bit 5** - Player 6's Fog of War. If on, the tile is covered with fog. if off, the tile is visible.
	+ **Bit 6** - Player 7's Fog of War. If on, the tile is covered with fog. if off, the tile is visible.
	+ **Bit 7** - Player 8's Fog of War. If on, the tile is covered with fog. if off, the tile is visible.

Any size greater than width\*height will be ignored. Any size less will default missing tiles to 0xFF

## "STR " - String Data

*Required for all versions and all game types.*
*Validation: Must be at least 1 byte.*

This section contains all the strings in the map.

* **u16**: Number of strings in the section (Default**: 1024)**
* **u16[Number of strings]**: 1 integer for each string specifying the offset (the spot where the string starts in the section from the start of it).
* **Strings**: After the offsets, this is where every string in the map goes, one after another. Each one is terminated by a null character.

This section can contain more or less then 1024 string offsests and will work in Starcraft.
Note that STR sections can be stacked in a smiliar fashion as MTXM. The exact mechanisms of this are uncertain.

## "UPRP" - CUWP Slots

*Required for all versions. Not required for Melee.*
*Validation: Must be size of 1280 bytes.*

This section is used whenever the create units with properties trigger is used. Since a slot has to be assigned to the action, this is where each slot is designated.

There are 64 of the following structures regardless of how many are used and it cannot exceed 64.

* **u16**: Flag of which special properties can be applied to unit, and are valid.
	+ **Bit 0** - Cloak bit is valid
	+ **Bit 1** - Burrowed bit is valid
	+ **Bit 2** - In transit bit is valid
	+ **Bit 3** - Hallucinated bit is valid
	+ **Bit 4** - Invincible bit is valid
	+ **Bit 5-15** - Unknown/unused
* **u16**: Which elements of the unit data are valid, which properties can be changed by the map maker.
	+ **Bit 0** - Owner player is valid (unit is not neutral)
	+ **Bit 1** - HP is valid
	+ **Bit 2** - Shields is valid
	+ **Bit 3** - Energy is valid
	+ **Bit 4** - Resource amount is valid (unit is a resource)
	+ **Bit 5** - Amount in hanger is valid
	+ **Bit 6** - Unknown/unused
* **u8**: Player number that owns unit. Will always be NULL in this section (0)
* **u8**: Hit point % (1-100)
* **u8**: Shield point % (1-100)
* **u8**: Energy point % (1-100)
* **u32**: Resource amount (for resources only)
* **u16**: # of units in hangar
* **u16**: Flags
	+ **Bit 0** - Unit is cloaked
	+ **Bit 1** - Unit is burrowed
	+ **Bit 2** - Building is in transit
	+ **Bit 3** - Unit is hallucinated
	+ **Bit 4** - Unit is invincible
	+ **Bit 5-15** - Unknown/unused
* **u32**: Unknown/unused. Padding?

## "UPUS" - CUWP Slots Used

*Not Required.*

This section goes along with the "UPRP" section. This section just indicates which of the 64 unit properties slot are used.

* **u8[64]**: 1 byte for each trigger unit properties slot
	+ **00** - Properties slot is unused
	+ **01** - Properties slot is used

## "MRGN" - Locations

*Required for all versions. Not required for Melee.*
*Validation: 1280 bytes for retail, 5100 bytes for Hybrid and Broodwar.*

This section contains all the locations that the map uses. In a vanilla map, this section contains 64 locations. In a Hybrid or Brood War map, this section will expand to contain 255 locations.

Each location gets one of the following location entries. The 'Anywhere' location, is ALWAYS location 64.

* **u32**: Left (X1) coordinate of location, in pixels (usually 32 pt grid aligned)
* **u32**: Top (Y1) coordinate of location, in pixels
* **u32**: Right (X2) coordinate of location, in pixels
* **u32**: Bottom (Y2) coordinate of location, in pixels
* **u16**: String number of the name of this location
* **u16**: Location elevation flags. If an elevation is disabled in the location, it's bit will be on (1)
	+ **Bit 0** - Low elevation
	+ **Bit 1** - Medium elevation
	+ **Bit 2** - High elevation
	+ **Bit 3** - Low air
	+ **Bit 4** - Medium air
	+ **Bit 5** - High air
	+ **Bit 6-15** - Unused

Note that in typical locations Right is always larger than Left and Bottom is always larger than Top. However, you can reverse one or both of these for Inverted Locations.

## "TRIG" - Triggers

*Required for all versions. Not required for Melee.*
*Validation: Must be a multiple of 2400 bytes.*

This section contains all the triggers in the map. This along with MBRF is the most complicated section in the entire scenario.chk file. There is too much data packed into too little of a space. Refer to the appendix at the bottom of this page for more information. For easy reference, since each trigger contains 2400 bytes, the amount of triggers can be gotten by taking the section length and dividing by 2400. Every single trigger in the map will have the following format:

* 16 Conditions
Every trigger has 16 of the following format, even if only one condition is used. See the appendix for information on which items are used for what conditions.
	+ **u32**: Location number for the condition (1 based -- 0 refers to No Location)
	+ **u32**: Group that the condition applies to
	+ **u32**: Qualified number (how many/resource amount)
	+ **u16**: Unit ID condition applies to
	+ **u8**: Numeric comparison, switch state
	+ **u8**: Condition byte
	+ **u8**: Resource type, score type, Switch number (0-based)
	+ **u8**: Flags
		- **Bit 0** - Unknown/unused
		- **Bit 1** - Enabled flag. If on, the trigger action/condition is disabled/ignored
		- **Bit 2** - Always display flag.
		- **Bit 3** - Unit properties is used. (**Note:** This is used in \*.trg files)
		- **Bit 4** - Unit type is used. May not be necessary?
		- **Bit 5** - If on, the unit ID is used. Unnecessary.
		- **Bit 6-7** - Unknown/unused
	+ **u16**: Used internally by starcraft (number of which condition to process next, and maybe more?)
* 64 Actions
Immediately following the 16 conditions, there are 64 actions. There will always be 64 of the following structure, even if some of them are unused.
	+ **u32**: 'Source' or only location (1 based -- 0 refers to No Location)
	+ **u32**: String number for trigger text (0 means no string)
	+ **u32**: WAV string number (0 means no string)
	+ **u32**: Seconds/milliseconds of time
	+ **u32**: First (or only) Group/Player affected.
	+ **u32**: Second group affected, destination location (1-based), CUWP #, number, AI script (4-byte string), switch (0-based #)
	+ **u16**: Unit type, score type, resource type, alliance status
	+ **u8**: Action byte
	+ **u8**: Number of units (0 means All Units), action state, unit order, number modifier
	+ **u8**: Flags
		- **Bit 0** - Ignore a wait/transmission once.
		- **Bit 1** - Enabled flag. If on, the trigger action/condition is disabled.
		- **Bit 2** - Always display flag.
		- **Bit 3** - Unit properties is used. Staredit uses this for \*.trg files.
		- **Bit 4** - Unit type is used.
		- **Bit 5** - If on, the unit ID is used. Unnecessary.
		- **Bit 6-7** - Unknown/unused
	+ **u24 (3 bytes)**: Used internally by starcraft (number of which action to process next, and maybe more?)
* Player Execution
Following the 16 conditions and 64 actions, every trigger also has this structure
	+ **u32**: execution flags
		- **Bit 0** - All conditions are met, executing actions, cleared on the next trigger loop.
		- **Bit 1** - Ignore the following actions: Defeat, Draw.
		- **Bit 2** - Preserve trigger. (Can replace Preserve Trigger action)
		- **Bit 3** - Ignore execution.
		- **Bit 4** - Ignore all of the following actions for this trigger until the next trigger loop: Wait, PauseGame, Transmission, PlayWAV, DisplayTextMessage, CenterView, MinimapPing, TalkingPortrait, and MuteUnitSpeech.
		- **Bit 5** - This trigger has paused the game, ignoring subsequent calls to Pause Game (Unpause Game clears this flag only in the same trigger), may automatically call unpause at the end of action execution?
		- **Bit 6** - Wait skipping disabled for this trigger, cleared on next trigger loop.
		- **Bit 7-31** - Unknown/unused
	+ **u8[28]**: 1 byte for each player in the #List of Players/Group IDs
		- **00** - Trigger is not executed for player
		- **01** - Trigger is executed for player

This section can be split. Additional TRIG sections will add more triggers.

## "MBRF" - Mission Briefings

*Required for all versions. Not required for Melee.*
*Validation: Must be a multiple of 2400 bytes.*

This section contains all of the mission briefings shown by the players.

See "TRIG" section for format, as it is exactly the same except for the conditions. In this section the 16 conditions are still there, they are all null except for the very first condition, which only has a condition byte of 13. See #Mission Briefing Actions List for the action bytes for the mission briefing actions.

This section can be split. Additional MBRF sections will add more briefing triggers.

## "SPRP" - Scenario Properties

*Required for all versions and all game types.*
*Validation: Must be size of 4 bytes.*

* **u16**: String number of the scenario name
* **u16**: String number of the scenarios description.

A string index of 0 for the map name will default it to its file name. A string index of 0 description will default to a predefined string.

## "FORC" - Force Settings

*Required for all versions and all game types.*
*Validation: Must be less than or equal to 20 bytes.*

This section specifies the forces and the information about them.

* **u8[8]**: 1 byte for each active player, specifying which of the 4 forces (0-based) that the player's on
* **u16[4]**: 1 integer for each force, string number of the name of the force
* **u8[4]**: 1 byte for each force specifying the properties:
	+ **Bit 0** - Random start location
	+ **Bit 1** - Allies
	+ **Bit 2** - Allied victory
	+ **Bit 3** - Shared vision
	+ **Bit 4-7** - Unused

Notes about FORC:

* If there is no string specified for a force name, it will default to a "Force #" string.
* If this section is less than 20 bytes, the remaining bytes are defaulted to 0.
* Players can be on a force greater than 4, however they will not appear in the game lobby.

## "WAV " - WAV String Indexes

*Not Required.*

There are 512 wav entires regardless of how many are actually used.

* **u32[512]**: 1 long for each WAV. Indicates a string index is used for a WAV path in the MPQ. If the entry is not used, it will be 0.

## "UNIS" - Unit Settings

*Required for Vanilla and Hybrid (in Original mode). Not required for Melee.*
*Validation: Must be size of 4048 bytes.*
*In Brood War scenarios, this section is replaced by "UNIx".*

This section contains the unit settings for the level:

* **u8[228]**: 1 byte for each unit, in order of Unit ID
	+ **00** - Unit does not use default settings
	+ **01** - Unit does use default settings
* **u32[228]**: Hit points for unit (Note the displayed value is this value / 256, with the low byte being a fractional HP value)
* **u16[228]**: Shield points, in order of Unit ID
* **u8[228]**: Armor points, in order of Unit ID
* **u16[228]**: Build time (1/60 seconds), in order of Unit ID
* **u16[228]**: Mineral cost, in order of Unit ID
* **u16[228]**: Gas cost, in order of Unit ID
* **u16[228]**: String number, in order of Unit ID
* **u16[100]**: Base weapon damage the weapon does, in weapon ID order (#List of Unit Weapon IDs)
* **u16[100]**: Upgrade bonus weapon damage, in weapon ID order

## "UPGS" - Upgrade Settings

*Required for Vanilla and Hybrid (in Original mode). Not required for Melee.*
*Validation: Must be size of 598 bytes.*
*In Brood War scenarios, this section is replaced by "UPGx".*

This section contains upgrade settings:

* **u8[46]**: 1 byte per each upgrade, in order of upgrade id.
	+ **00** - Upgrade uses custom settings
	+ **01** - Upgrade uses default settings
* **u16[46]**: 1 integer per upgrade, base mineral cost for each upgrade, in order of upgrade id.
* **u16[46]**: 1 integer per upgrade, mineral cost factor for each upgrade, in order of upgrade id.
* **u16[46]**: 1 integer per upgrade, base gas cost for each upgrade, in order of upgrade id.
* **u16[46]**: 1 integer per upgrade, gas cost factor for each upgrade, in order of upgrade id.
* **u16[46]**: 1 integer per upgrade, base time for each upgrade, in order of upgrade id.
* **u16[46]**: 1 integer per upgrade, gas time factor for each upgrade, in order of upgrade id.

See #List of Upgrade IDs for upgrade ids.

## "TECS" - Tech Settings

*Required for Vanilla and Hybrid (in Original mode). Not required for Melee.*
*Validation: Must be size of 216 bytes.*
*In Brood War scenarios, this section is replaced by "TECx".*

This section contains technology/special abilities settings:

* **u8[24]**: 1 byte per each technology, specifies if the tech overrides the default settings. In order of technology id
	+ **00** - Technology uses custom settings
	+ **01** - Technology uses default settings
* **u16[24]**: Mineral cost to develop technology. In order of technology id.
* **u16[24]**: Gas cost to develop technology. In order of technology id.
* **u16[24]**: Time required to develop technology. In order of technology id.
* **u16[24]**: Energy cost to cast technology/special ability. In order of technology id.

See #List of Technology IDs for technology ids.

## "SWNM" - Switch Names

*Not Required.*

This section contains the strings used for each switch. There are 256 switches, and can't be any more or any less.

* **u32[256]**: One long for each switch, specifies the string number for the name of each switch. Unnamed switches will have an index of 0, and have a default switch name.

## "COLR" - Player Colors

*Required for Brood War only and all game types.*
*Validation: Must be size of 8 bytes.*

This section indicates what color each player is, but only has effect on Brood War.

* **u8[8]**: 1 byte for each player, indicates the color of the player
	+ **00** - Red
	+ **01** - Blue
	+ **02** - Teal
	+ **03** - Purple
	+ **04** - Orange
	+ **05** - Brown
	+ **06** - White
	+ **07** - Yellow
	+ **08** - Green
	+ **09** - Pale yellow
	+ **10** - Tan
	+ **11** - Azure (Neutral color)

Other values can be used but may have different results depending on the tileset. Any color value above 11 is an overflow. As of patch 1.18.6 values above 11 result in default player color.

## "PUPx" - BW Upgrade Restrictions

*Required for Hybrid (in Expansion mode) and Brood War. Not required for Melee.*
*Validation: Must be size of 2318 bytes.*
*In Brood War scenarios this section replaces "UPGR".*

This section is identical to UPGR section except it uses the Brood War set of 61 upgrades instead of the original 46.

## "PTEx" - BW Tech Restrictions

*Required for Hybrid (in Expansion mode) and Brood War. Not required for Melee.*
*Validation: Must be size of 1672 bytes.*
*In Brood War scenarios this section replaces "PTEC".*

This section is identical to PTEC section except it uses the Brood War set of 44 technologies instead of the original 24.

## "UNIx" - BW Unit Settings

*Required for Hybrid (in Expansion mode) and Brood War. Not required for Melee.*
*Validation: Must be size of 4168 bytes.*
*In Brood War scenarios this section replaces "UNIS".*

This section is indentical to UNIS section except it uses the Brood War set of 130 weapons instead of the original 100.

## "UPGx" - BW Upgrade Settings

*Required for Hybrid (in Expansion mode) and Brood War. Not required for Melee.*
*Validation: Must be size of 794 bytes.*
*In Brood War scenarios this section replaces "UPGS".*

This section the same as UPGS except section except it uses the Brood War set of 61 upgrades instead of the original 46, and there is an unused byte after the first set:

* **u8[61]**: 1 byte per each upgrade, in order of upgrade id.
	+ **00** - Upgrade uses custom settings
	+ **01** - Upgrade uses default settings
* **u8**: Unused.
* **u16[61]**: 1 integer per upgrade, base mineral cost for each upgrade, in order of upgrade id.
* **u16[61]**: 1 integer per upgrade, mineral cost factor for each upgrade, in order of upgrade id.
* **u16[61]**: 1 integer per upgrade, base gas cost for each upgrade, in order of upgrade id.
* **u16[61]**: 1 integer per upgrade, gas cost factor for each upgrade, in order of upgrade id.
* **u16[61]**: 1 integer per upgrade, base time for each upgrade, in order of upgrade id.
* **u16[61]**: 1 integer per upgrade, gas time factor for each upgrade, in order of upgrade id.

## "TECx" - BW Tech Settings

*Required for Hybrid (in Expansion mode) and Brood War. Not required for Melee.*
*Validation: Must be size of 396 bytes.*
*In Brood War scenarios this section replaces "TECS".*

This section is indentical to UNIS section except it uses the Brood War set of 44 technologies instead of the original 24.

# Appendix

A set of references and IDs that should help you easier in the trigger section and the technology/player ids, etc:

## Trigger Conditions List

* 0 = No Condition
* 1 = Countdown Timer(Comparison, QNumber)
* 2 = Command(Player, Comparison, TUnit, QNumber)
* 3 = Bring(Player, Comparison, TUnit, Loc, QNumber)
* 4 = Accumulate(Player, Comparison, QNumber, ResType)
* 5 = Kill(Player, Comparison, TUnit, QNumber)
* 6 = Command the Most(TUnit)
* 7 = Commands the Most At(TUnit, Loc)
* 8 = Most Kills(TUnit)
* 9 = Highest Score(Score)
* 10 = Most Resources(ResType)
* 11 = Switch(Switch)
* 12 = Elapsed Time(Comparison, QNumber)
* 13 = Data is a Mission Briefing. Conditions are N/A (Same as Never)
* 14 = Opponents(Player, Comparison, QNumber)
* 15 = Deaths(Player, Comparison, TUnit, QNumber)
* 16 = Command the Least(TUnit)
* 17 = Command the Least At(TUnit, Loc)
* 18 = Least Kills(TUnit)
* 19 = Lowest Score(Score)
* 20 = Least Resources(ResType)
* 21 = Score(Player, Comparison, Score, QNumber)
* 22 = Always (Same as No Condition)
* 23 = Never

## Trigger Actions List

* 0 = No Action
* 1 = Victory
* 2 = Defeat
* 3 = Preserve Trigger
* 4 = Wait(Time)
* 5 = Pause Game (Single player only)
* 6 = Unpause Game (Single player only)
* 7 = Transmission(Text, Unit, Loc, Time, Modifier, Wave, WavTime)
* 8 = Play WAV(Wav, WavTime)
* 9 = Display Text Message(Text)
* 10 = Center View(Loc)
* 11 = Create Unit with Properties(Player, Unit, Number, Loc, UnitProp)
* 12 = Set Mission Objectives(Text)
* 13 = Set Switch(Switch, SwAction)
* 14 = Set Countdown Timer(Time, Modifier)
* 15 = Run AI Script(AIScript)
* 16 = Run AI Script At Location(AIScript)
* 17 = Leader Board (Control) (Text, TUnit)
* 18 = Leader Board (Control At Location) (Text, TUnit, Loc)
* 19 = Leader Board (Resources) (Text, ResType)
* 20 = Leader Board (Kills) (Text, TUnit)
* 21 = Leader Board (Points) (Text, Score)
* 22 = Kill Unit (Player, TUnit)
* 23 = Kill Unit At Location(Player, TUnit, Number, Loc)
* 24 = Remove Unit(Player, TUnit)
* 25 = Remove Unit At Location(Player, TUnit, Number, Loc)
* 26 = Set Resources(Player, Number, Modifier, ResType)
* 27 = Set Score(Player, Number, Modifier, Score)
* 28 = Minimap Ping(Loc)
* 29 = Talking Portrait(Unit, Time)
* 30 = Mute Unit Speech
* 31 = Unmute Unit Speech
* 32 = Leaderboard Computer Players(State)
* 33 = Leaderboard Goal (Control) (Text, TUnit, Number)
* 34 = Leaderboard Goal (Control At Location) (Text, TUnit, Number, Loc)
* 35 = Leaderboard Goal (Resources) (Text, TUnit, Number, ResType)
* 36 = Leaderboard Goal (Kills) (Text, TUnit, Number)
* 37 = Leaderboard Goal (Points) (Text, Number, Score)
* 38 = Move Location(Player, TUnit, SLoc, DLoc)
* 39 = Move Unit(Player, TUnit, Number, SLoc, DLoc)
* 40 = Leaderboard (Greed) (Number)
* 41 = Set Next Scenario(Text) (Single player only)
* 42 = Set Doodad State(Player, TUnit, Loc, State)
* 43 = Set Invincibility(Player, TUnit, Loc, State)
* 44 = Create Unit(Player, Unit, Number, Loc)
* 45 = Set Deaths(Player, TUnit, Number, Modifier)
* 46 = Order(Player, TUnit, SLoc, DLoc, Order)
* 47 = Comment(Text)
* 48 = Give Units to Player(SPlayer, DPlayer, TUnit, Number, Loc)
* 49 = Modify Unit Hit Points(Player, TUnit, Number, ModAmount, Loc)
* 50 = Modify Unit Energy(Player, TUnit, Number, ModAmount, Loc)
* 51 = Modify Unit Shield Points(Player, TUnit, Number, ModAmount, Loc)
* 52 = Modify Unit Resource Amount(Player, Number, ModAmount, Loc)
* 53 = Modify Unit Hanger Count(Player, TUnit, Number, ModAmount, Loc)
* 54 = Pause Timer
* 55 = Unpause Timer
* 56 = Draw
* 57 = Set Alliance Status(Player, AllyStatus)
* 58 = Disable Debug Mode (Single player only)
* 59 = Enable Debug Mode (Single player only)

## Mission Briefing Actions List

* 0 - No Action
* 1 - Wait(Time)
* 2 - Play WAV(Wave, WavTime)
* 3 - Text Message(Text, Time)
* 4 - Mission Objectives(Text)
* 5 - Show Portrait(Unit, Slot)
* 6 - Hide Portrait(Slot)
* 7 - Display Speaking Portrait(Slot, Time)
* 8 - Transmission(Text, Slot, Time, Modifier, Wave, WavTime)
* 9 - Skip Tutorial Enabled

## Switch States

* 2 = Switch is set
* 3 = Switch is cleared

## Numeric Comparisons

* 0 = At least
* 1 = At most
* 10 = Exactly

## Score Types

* 0 = Total
* 1 = Units
* 2 = Buildings
* 3 = Units and Buildings
* 4 = Kills
* 5 = Razings
* 6 = Kills and Razings
* 7 = Custom

## Resource Types

* 0 = Ore
* 1 = Gas
* 2 = Ore and Gas

## Alliance Statuses

* 0 = Enemy
* 1 = Ally
* 2 = Allied Victory

## Unit Orders

* 0 = Move
* 1 = Patrol
* 2 = Attack

## Action States

* 4 = Enabled/Set switch
* 5 = Disabled/Clear switch
* 6 = Toggle/Toggle switch
* 11 = Randomize switch

## Number Modifiers

* 7 = Set to
* 8 = Add
* 9 = Subtract

## Trigger Unit Types

* All normal units (0-227)
* 228 = None
* 229 = Any unit
* 230 = Men
* 231 = Buildings
* 232 = Factories

## List of Players/Group IDs

* 0 = Player 1
* 1 = Player 2
* 2 = Player 3
* 3 = Player 4
* 4 = Player 5
* 5 = Player 6
* 6 = Player 7
* 7 = Player 8
* 8 = Player 9
* 9 = Player 10
* 10 = Player 11
* 11 = Player 12
* 12 = None (Unused, One-entry Overflow in some cases)
* 13 = Current Player
* 14 = Foes
* 15 = Allies
* 16 = Neutral Players
* 17 = All Players
* 18 = Force 1
* 19 = Force 2
* 20 = Force 3
* 21 = Force 4
* 22 = Unused 1
* 23 = Unused 2
* 24 = Unused 3
* 25 = Unused 4
* 26 = Non Allied Victory Players

## List of Technology IDs

* 0 = Stim Packs
* 1 = Lockdown
* 2 = EMP Shockwave
* 3 = Spider Mines
* 4 = Scanner Sweep
* 5 = Siege Mode
* 6 = Defensive Matrix
* 7 = Irradiate
* 8 = Yamato Gun
* 9 = Cloaking Field
* 10 = Personnel Cloaking
* 11 = Burrowing
* 12 = Infestation
* 13 = Spawn Broodling
* 14 = Dark Swarm
* 15 = Plague
* 16 = Consume
* 17 = Ensnare
* 18 = Parasite
* 19 = Psionic Storm
* 20 = Hallucination
* 21 = Recall
* 22 = Stasis Field
* 23 = Archon Warp
* 24 = Restoration
* 25 = Disruption Web
* 26 = Unused 26
* 27 = Mind Control
* 28 = Dark Archon Meld
* 29 = Feedback
* 30 = Optical Flare
* 31 = Maelstorm
* 32 = Lurker Aspect
* 33 = Unused 33
* 34 = Healing
* 35 = Unused 35
* 36 = Unused 36
* 37 = Unused 37
* 38 = Unused 38
* 39 = Unused 39
* 40 = Unused 40
* 41 = Unused 41
* 42 = Unused 42
* 43 = Unused 43

## List of Upgrade IDs

* 0 = Terran Infantry Armor
* 1 = Terran Vehicle Plating
* 2 = Terran Ship Plating
* 3 = Zerg Carapace
* 4 = Zerg Flyer Caparace
* 5 = Protoss Armor
* 6 = Protoss Plating
* 7 = Terran Infantry Weapons
* 8 = Terran Vehicle Weapons
* 9 = Terran Ship Weapons
* 10 = Zerg Melee Attacks
* 11 = Zerg Missile Attacks
* 12 = Zerg Flyer Attacks
* 13 = Protoss Ground Weapons
* 14 = Protoss Air Weapons
* 15 = Protoss Plasma Shields
* 16 = U-238 Shells
* 17 = Ion Thrusters
* 18 = Burst Lasers (Unused)
* 19 = Titan Reactor (SV +50)
* 20 = Ocular Implants
* 21 = Moebius Reactor (Ghost +50)
* 22 = Apollo Reactor (Wraith +50)
* 23 = Colossus Reactor (BC +50)
* 24 = Ventral Sacs
* 25 = Antennae
* 26 = Pneumatized Carapace
* 27 = Metabolic Boost
* 28 = Adrenal Glands
* 29 = Muscular Augments
* 30 = Grooved Spines
* 31 = Gamete Meiosis (Queen +50)
* 32 = Metasynaptic Node (Defiler +50)
* 33 = Singularity Charge
* 34 = Leg Enhancements
* 35 = Scarab Damage
* 36 = Reaver Capacity
* 37 = Gravitic Drive
* 38 = Sensor Array
* 39 = Gravitic Boosters
* 40 = Khaydarin Amulet (HT +50)
* 41 = Apial Sensors
* 42 = Gravitic Thrusters
* 43 = Carrier Capacity
* 44 = Khaydarin Core (Arbiter +50)
* 45 = Unknown Upgrade45
* 46 = Unknown Upgrade46
* 47 = Argus Jewel (Corsair +50)
* 48 = Unknown Upgrade48
* 49 = Argus Talisman (DA +50)
* 50 = Unknown Upgrade50
* 51 = Caduceus Reactor (Medic +50)
* 52 = Chitinous Plating
* 53 = Anabolic Synthesis
* 54 = Charon Booster
* 55 = Unknown Upgrade55
* 56 = Unknown Upgrade56
* 57 = Unknown Upgrade57
* 58 = Unknown Upgrade58
* 59 = Unknown Upgrade59
* 60 = Unknown Upgrade60

## List of Unit Weapon IDs

* 0 = Gauss Rifle (Normal)
* 1 = Gauss Rifle (Jim Raynor-Marine)
* 2 = C-10 Concussion Rifle (Normal)
* 3 = C-10 Concussion Rifle (Sarah Kerrigan)
* 4 = Fragmentation Grenade (Normal)
* 5 = Fragmentation Grenade (Jim Raynor-Vulture)
* 6 = Spider Mines
* 7 = Twin Autocannons (Normal)
* 8 = Hellfire Missile Pack (Normal)
* 9 = Twin Autocannons (Alan Schezar)
* 10 = Hellfire Missile Pack (Alan Schezar)
* 11 = Arclite Cannon (Normal)
* 12 = Arclite Cannon (Edmund Duke)
* 13 = Fusion Cutter
* 14 = Fusion Cutter (Harvest)
* 15 = Gemini Missiles (Normal)
* 16 = Burst Lasers (Normal)
* 17 = Gemini Missiles (Tom Kazansky)
* 18 = Burst Lasers (Tom Kazansky)
* 19 = ATS Laser Battery (Normal)
* 20 = ATA Laser Battery (Normal)
* 21 = ATS Laser Battery (Norad II/Arcturus Mengsk/Gerard DuGalle)
* 22 = ATA Laser Battery (Norad II/Arcturus Mengsk/Gerard DuGalle)
* 23 = ATS Laser Battery (Hyperion)
* 24 = ATA Laser Battery (Hyperion)
* 25 = Flame Thrower (Normal)
* 26 = Flame Thrower (Gui Montag)
* 27 = Arclite Shock Cannon (Normal)
* 28 = Arclite Shock Cannon (Edmund Duke)
* 29 = Longbolt Missiles
* 30 = Yamato Gun
* 31 = Nuclear Missile
* 32 = Lockdown
* 33 = EMP Shockwave
* 34 = Irradiate
* 35 = Claws (Normal)
* 36 = Claws (Devouring One)
* 37 = Claws (Infested Kerrigan)
* 38 = Needle Spines (Normal)
* 39 = Needle Spines (Hunter Killer-Hydralisk)
* 40 = Kaiser Blades (Normal)
* 41 = Kaiser Blades (Torrasque)
* 42 = Toxic Spores (Broodling)
* 43 = Spines
* 44 = Spines (Harvest)
* 45 = Acid Spray (Unused)
* 46 = Acid Spore (Normal)
* 47 = Acid Spore (Kukulza-Guardian)
* 48 = Glave Wurm (Normal)
* 49 = Glave Wurm (Kukulza-Mutalisk)
* 50 = Venom (Unused-Defiler)
* 51 = Venom (Unused-Defiler Hero)
* 52 = Seeker Spores
* 53 = Subterranean Tentacle
* 54 = Suicide (Infested Terran)
* 55 = Suicide (Scourge)
* 56 = Parasite
* 57 = Spawn Broodlings
* 58 = Ensnare
* 59 = Dark Swarm
* 60 = Plague
* 61 = Consume
* 62 = Particle Beam
* 63 = Particle Beam (Harvest)
* 64 = Psi Blades (Normal)
* 65 = Psi Blades (Fenix-Zealot)
* 66 = Phase Disruptor (Normal)
* 67 = Phase Disruptor (Fenix-Dragoon)
* 68 = Psi Assault (Normal)
* 69 = Psi Assault (Tassadar/Aldaris)
* 70 = Psionic Shockwave (Normal)
* 71 = Psionic Shockwave (Tassadar/Zeratul Archon)
* 72 = Unused
* 73 = Dual Photon Blasters (Normal)
* 74 = Anti-matter Missiles (Normal)
* 75 = Dual Photon Blasters (Mojo)
* 76 = Anit-matter Missiles (Mojo)
* 77 = Phase Disruptor Cannon (Normal)
* 78 = Phase Disruptor Cannon (Danimoth)
* 79 = Pulse Cannon
* 80 = STS Photon Cannon
* 81 = STA Photon Cannon
* 82 = Scarab
* 83 = Stasis Field
* 84 = Psi Storm
* 85 = Warp Blades (Zeratul)
* 86 = Warp Blades (Dark Templar Hero)
* 87 = Missiles (Unused)
* 88 = Laser Battery1 (Unused)
* 89 = Tormentor Missiles (Unused)
* 90 = Bombs (Unused)
* 91 = Raider Gun (Unused)
* 92 = Undefined Weapon Name (Unused)
* 93 = Undefined Weapon Name (Unused)
* 94 = Undefined Weapon Name (Unused)
* 95 = Flechette Grenade (Unused)
* 96 = Twin Autocannons (Floor Trap)
* 97 = Hellfire Missile Pack (Wall Trap)
* 98 = Flame Thrower (Wall Trap)
* 99 = Hellfire Missile Pack (Floor Trap)
* 100 = Neutron Flare (Normal)
* 101 = Disruption Web
* 102 = Restoration
* 103 = Halo Rockets
* 104 = Corrosive Acid (Normal)
* 105 = Mind Control
* 106 = Feedback
* 107 = Optical Flare
* 108 = Maelstrom
* 109 = Subterranean Spines (Normal)
* 110 = Gauss Rifle0 (Unused)
* 111 = Warp Blades (Normal)
* 112 = C-10 Concussion Rifle (Samir Duran)
* 113 = C-10 Concussion Rifle (Infested Duran)
* 114 = Dual Photon Blasters (Artanis)
* 115 = Anti-matter Missiles (Artanis)
* 116 = C-10 Concussion Rifle (Alexei Stukov)
* 117 = Gauss Rifle1 (Unused)
* 118 = Gauss Rifle2 (Unused)
* 119 = Gauss Rifle3 (Unused)
* 120 = Gauss Rifle4 (Unused)
* 121 = Gauss Rifle5 (Unused)
* 122 = Gauss Rifle6 (Unused)
* 123 = Gauss Rifle7 (Unused)
* 124 = Gauss Rifle8 (Unused)
* 125 = Gauss Rifle9 (Unused)
* 126 = Gauss Rifle10 (Unused)
* 127 = Gauss Rifle11 (Unused)
* 128 = Gauss Rifle12 (Unused)
* 129 = Gauss Rifle13 (Unused)
* 130 = None

## Complete Modifier List

* 0 = Condition: >= (greater than or equal to)
* 1 = Condition: <= (less than or equal to)
* 2 = Condition: == TRUE (Is True)
* 3 = Condition: == FALSE (Is False)
* 4 = Action: = TRUE (Set to True)
* 5 = Action: = FALSE (Set to False)
* 6 = Action: NOT (toggle)
* 7 = Action: = (Set to)
* 8 = Action: += (Add)
* 9 = Action: -= (Subtract)
* 10 = Condition: == (Exactly)
* 11 = Action: Randomize