diff --git a/BTFrstrm/autoconfig-file-spec.html b/BTFrstrm/autoconfig-file-spec.html new file mode 100644 index 00000000..018ee99b --- /dev/null +++ b/BTFrstrm/autoconfig-file-spec.html @@ -0,0 +1,564 @@ + + +
+ ++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 characters+The 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 |
[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 — integer+ Only 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
+