The system operates with two separate files:
options.ini — machine-level one-time configuration, read once at game startup.
Contains the path to the config file. Never changed by the game.
options.ini) —
written by the external application before each match.
Read by the game when the operator clicks Load File in the console lobby.
Not consumed — the game leaves it on disk. Overwrite it to set the next match.
When Load File is clicked, the game:
automaticmode=1 and the file path is configured.GetFileAttributes). If not, does nothing.options.ini Setup (One-Time, Per Machine)Add the following section to the game’s options.ini in the game working directory.
[automaticmode] automaticmode=1 automaticfile=c:\mw4files\nextmatch.ini
| Key | Type | Description |
|---|---|---|
automaticmode | integer | 1 = enabled. 0 = disabled; Load File button does nothing. |
automaticfile | string | Full absolute Windows path to the config file. Max 259 characters. Can be any local drive letter. |
options.ini requires a game restart.
If the [automaticmode] section is absent, or automaticmode=0, or
automaticfile is empty, Load File always does nothing regardless of what config file exists.
The config file uses standard Windows INI format, parsed by NotationFile::Standard.
[sectionname] — case-sensitive, must be all lowercase exactly as shown.= to end of line. Do not wrap in quotes. Example: MissionName=ScarabStronghold - AttritionGameType=2// or ;). Parser behavior is not guaranteed. Keep the file clean.[mission] is absent, no game options are changed. If [slot0] is absent, no slots are changed.[mission]Sets all game lobby parameters. This section is optional — omit it to leave game options unchanged and only configure slots.
[mission] MissionName=ScarabStronghold - Attrition GameType=2 Visibility=0 Weather=0 TimeOfDay=0 TimeLimit=7 Radar=0 HeatOn=0 FriendlyFire=0 SplashDamage=0 UnlimitedAmmo=1 WeaponJam=0 AdvanceMode=0 ArmorMode=0
MissionName — string, max 255 charactersThe scenario name, exactly as it appears in the mission list dropdown in the console lobby. Match is exact string equality, case-sensitive. Trailing/leading spaces are stripped by the parser.
GameType,
mission selection silently fails — the dropdown stays at its previous value.
No error is logged. All other parameters (Visibility, Weather, etc.) are still applied.
The available mission names depend on what scenario files are installed on the machine;
there is no static guaranteed list.
GameType — integer (dropdown index, 0-based)For a standard full installation with all game types present, the order is fixed:
| Index | Display Name | Mode |
|---|---|---|
0 | Destruction | FFA |
1 | Team Destruction | Team |
2 | Attrition | FFA — default DEFAULT |
3 | Team Attrition | Team |
4 | Capture the Flag | FFA |
5 | King of the Hill | FFA |
6 | Team King of the Hill | Team |
7 | Steal the Bacon | FFA |
8 | Master Trial | Special |
9 | Siege Assault | Special |
10+ | Custom map variants | Varies (if custom content installed) |
Team vs. FFA is important: it determines whether the Team or Skin field is applied to each slot. See Section 5 for details.
Visibility — integer| Value | Display Name | Description |
|---|---|---|
0 | Default | Same as Clear DEFAULT |
1 | Clear | Full visibility range |
2 | Light Fog | Reduced visibility range |
3 | Heavy Fog | Heavily reduced visibility range |
4 | Pea Soup Fog | Near-zero visibility range |
Weather — integer| Value | Display |
|---|---|
0 | Off DEFAULT |
1 | On (rain or snow depending on map) |
TimeOfDay — integer| Value | Display |
|---|---|
0 | Day DEFAULT |
1 | Night |
TimeLimit — integer (actual minutes, not a list index)Specify the desired match length in real minutes. Valid values that appear in the lobby dropdown:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 20, 25, 30
Other integers are accepted and applied to the network parameter but will not match a dropdown item (the visual display may show the nearest value).
Special value -1: use the server’s current default time (7 minutes unless changed separately).
Default if key absent: server current default (equivalent to -1).
Radar — integer| Value | Display | Description |
|---|---|---|
0 | Novice | All mechs visible, no range limit DEFAULT |
1 | Normal | Standard radar with range cutoff |
2 | Team Only | Only your own team visible on radar |
3 | No Radar | Radar completely disabled for all players |
HeatOn — integer| Value | Description |
|---|---|
0 | Off — heat never builds, weapons never overheat DEFAULT |
1 | On — standard heat management enabled |
FriendlyFire — integer| Value | Description |
|---|---|
0 | Off — friendly fire disabled DEFAULT |
1 | On — 100% damage to teammates |
SplashDamage — integer| Value | Description |
|---|---|
0 | Off DEFAULT |
1 | On — area/splash damage from missiles and explosions |
UnlimitedAmmo — integer| Value | Description |
|---|---|
0 | Off — ammo is finite |
1 | On — unlimited ammo DEFAULT (console/arcade) |
WeaponJam — integer| Value | Description |
|---|---|
0 | Off DEFAULT |
1 | On — weapons can randomly jam |
AdvanceMode — integer| Value | Description |
|---|---|
0 | Off DEFAULT |
1 | On |
ArmorMode — integer| Value | Description |
|---|---|
0 | Off DEFAULT |
1 | On |
TeamAllowed — integer (required for correct team/FFA slot display on first click)Must match the GameType selected. Controls whether Team or Skin is applied to slots, and whether team dropdowns are shown.
| Value | Description |
|---|---|
0 | FFA mode ? slot Skin field is used DEFAULT |
1 | Team game ? slot Team field is used |
TeamCount — integer (optional, only when TeamAllowed=1)Number of teams. Valid range: 2–8. Default: 2.
[slot0] through [slot15]One section per roster slot, numbered starting from zero.
[slot0].
The parser stops at the first missing slot number. If [slot2] is absent,
[slot3] through [slot15] are never read, even if present in the file.
Do not skip numbers.
Maximum: 16 slots (indices 0–15). All slots are cleared before applying file data, so slots not defined in the file will be empty in the lobby after Load File is clicked.
[slot0] Type=1 PilotName=Alpha One Mech=Atlas Team=0 Skin=0 Decal=3
Type — integer, requiredDetermines what occupies this slot. All other fields are ignored when Type=0.
| Value | Description |
|---|---|
0 | Empty — slot skipped, left empty in lobby |
1 | Player slot — a human pilot can connect to this seat |
2 | Bot, difficulty level 1 (easiest) |
3 | Bot, difficulty level 2 |
4 | Bot, difficulty level 3 |
5 | Bot, difficulty level 4 |
6 | Bot, difficulty level 5 |
7 | Bot, difficulty level 6 |
8 | Bot, difficulty level 7 |
9 | Bot, difficulty level 8 (hardest) |
If Type key is absent, it defaults to 0 (empty) due to zero-initialization.
PilotName — string, max 63 charactersOnly meaningful when Type=1 (player slot). Sets the callsign shown in the lobby pilot editbox. The connecting player can override this after they connect.
For bots (Type=2–9), this field is read from the file but ignored by the script.
Set to empty value or omit key to leave the name blank: PilotName=
Strings longer than 63 characters are silently truncated.
Mech — string (chassis name, exact and case-sensitive)Must match exactly one of the chassis names from MechTable.tbl. The lookup is case-sensitive exact string comparison. If the name is not found, the mech dropdown for that slot stays at its previous value. No error is raised.
Exact Mech= value | Notes |
|---|---|
| Annihilator | |
| Archer | |
| Arctic Wolf | space between words |
| Ares | |
| Argus | |
| AssassinII | no spaces; capital I |
| Atlas | |
| Avatar | |
| Awesome | |
| Battlemaster | |
| BattlemasterIIC | no spaces |
| Behemoth | |
| BehemothII | no space; capital I |
| Black Hawk | space between words |
| Black Knight | space between words |
| Black Lanner | space between words |
| Brigand | |
| Bushwacker | |
| Catapult | |
| Cauldron-Born | hyphen between words |
| Chimera | |
| Commando | |
| Cougar | |
| Cyclops | |
| Daishi | |
| Deimos | |
| Dragon | |
| Fafnir | |
| Flea | |
| Gladiator | |
| Grizzly | |
| Hauptmann | |
| Hellhound | |
| Hellspawn | |
| Highlander | |
| HollanderII | no space; capital I |
| Hunchback | |
| Kodiak | |
| Loki | |
| Longbow | |
| Mad Cat | space between words |
| Mad Cat MKII | space + "MKII" all caps, no period |
| Masakari | |
| Mauler | |
| Nova Cat | space between words |
| Osiris | |
| Owens | |
| Puma | |
| Raven | |
| Rifleman | |
| Ryoken | |
| Shadow Cat | space between words |
| Solitaire | |
| Sunder | |
| Templar | |
| Thanatos | |
| Thor | |
| Uller | |
| Urbanmech | |
| Uziel | |
| Victor | |
| Vulture | |
| Warhammer | |
| Wolfhound | |
| Zeus |
Team — integerOnly applied in team game modes (game types marked “Team” in Section 4.2 table). IGNORED in FFA modes.
| Value | Team | Default Color |
|---|---|---|
0 | Team 1 | Blue |
1 | Team 2 | Red |
2 | Team 3 | Yellow |
3 | Team 4 | Green |
4 | Team 5 | Purple |
5 | Team 6 | Light Blue |
6 | Team 7 | Orange |
7 | Team 8 | Charcoal |
Skin — integer (FFA camo, dropdown index 0-based)Only applied in FFA game modes. IGNORED in team modes.
| Value | Camo Color/Pattern |
|---|---|
0 | Blue |
1 | Red |
2 | Yellow |
3 | Green |
4 | Purple |
5 | Light Blue |
6 | Orange |
7 | Charcoal |
8–15 | Additional camo patterns |
Decal — integer (faction emblem, 0–63)
Applied in both team and FFA modes.
Valid range: 0–63. All values in range are accepted. Common values:
| Value | Faction |
|---|---|
0 | None |
2 | Davion |
3 | Steiner |
4 | Kurita |
5 | Liao |
6 | Marik |
9 | ComStar |
10 | Star League |
11 | Wolf Clan |
12 | Jade Falcon |
16 | Ghost Bear |
20 | Hell Horses |
21 | Coyote |
22 | Blood Spirit |
24 | Ice Hellion |
27 | Goliath Scorpion |
46 | BKG |
47 | FSA |
48 | 331st |
49 | DDC |
50 | VGL |
[mission] MissionName=ScarabStronghold - Attrition GameType=2 Visibility=0 Weather=0 TimeOfDay=0 TimeLimit=7 Radar=0 HeatOn=0 FriendlyFire=0 SplashDamage=0 UnlimitedAmmo=1 WeaponJam=0 AdvanceMode=0 ArmorMode=0 [slot0] Type=1 PilotName=Blackjack Mech=Atlas Team=0 Skin=0 Decal=3 [slot1] Type=1 PilotName=Viper Mech=Mad Cat Team=0 Skin=1 Decal=4 [slot2] Type=2 PilotName= Mech=Thor Team=1 Skin=1 Decal=4 [slot3] Type=2 PilotName= Mech=Warhammer Team=1 Skin=1 Decal=4
[slot0].
The parser uses a loop that breaks on the first missing section. Defining [slot0]
and [slot2] without [slot1] means only slot 0 is processed.
Type=0) will be empty in the lobby.
GameType written in the file.
The game type change from [mission] is processed asynchronously (next frame).
If you are changing game mode, click Load File a second time to correctly apply team/skin assignments,
or pre-configure the lobby to the correct game type before writing the config file.
MissionName and Mech matches are case-sensitive.
atlas will not match Atlas.
options.ini is read only at game startup.
Changing the automaticfile path or enabling/disabling the feature requires a restart.
The config file itself is re-read fresh on every Load File button click.
PilotName ≤ 63 chars (truncated silently);
MissionName ≤ 255 chars;
automaticfile path ≤ 259 chars (MAX_PATH − 1).
MechTable.tbl.
If the game installation has custom mechs added or some mechs removed, the valid name list
changes accordingly. The table above reflects the standard Firestorm build.
Generated from source: MW4Shell.cpp — CTCL_LoadAutoFile,
CTCL_GetAutoSlotName/Mech/Int |
ConLobby.script — o_load_file handler |
Commit c3346561 | 2026-07-24