Skirmish mode — Lords of the Realm 2 (GoG)#
Evidence-backed reference for skirmish: a single tactical battle with no
campaign map — human vs AI (single player) or human vs human (multiplayer).
Normative gameplay rules belong in docs/spec/ eventually; this tree
is the primary evidence layer for building a compatible clean-room client.
Summary#
Skirmish is a GoG edition feature (retail LORDS2.EXE does not implement
it). Build comparison: builds.md. The launcher (SIGS) can set
GameType=Skirmish, which flags the client (DAT_0057cb38 = 1) and routes the
gateway wizard to skirmish setup (wizard steps 0xb MP / 0xc SP) instead
of a full campaign lobby. One battle is fought on a preset or custom map with
preconfigured armies; after the fight the player sees casualty score screens and
may rematch or return to the gateway menu.
Retail LORDS2.EXE does not implement skirmish. The retail export has no
Skirmish strings, no wizard steps 0xb/0xc, and post-battle flow always returns
to the campaign siege-resolve screen (0x13). A clone targeting GoG skirmish
parity should treat retail as out of scope for this mode.
Player-visible flow#
flowchart TD
launch["GoG launch / SIGS init<br/>GameType optional"]
gateway["Gateway wizard screen 0x1f step 1"]
pick["Menu: SP / MP / options"]
setup["Skirmish setup step 0xc SP or 0xb MP<br/>skirmish.pl8 background"]
config["Battle type, scenario, armies, colors"]
start["FUN_004329ec start<br/>lotr2_game_begin_new_campaign SP"]
battle["Tactical battle active_view=2<br/>DAT_0057a0f0=1"]
interim["Post-battle screen 0x2e"]
score1["Score screen '.' score1.pl8"]
score2["Score screen '/' score2.pl8 + high scores"]
rematch["Rematch FUN_0042b780 or gateway 0x1c"]
launch --> gateway --> pick --> setup --> config --> start --> battle
battle --> interim --> score1 --> score2 --> rematch
rematch --> setup
rematch --> gateway
Modes#
| Mode | Session flag | Wizard step | Opponent |
|---|---|---|---|
| SP vs NPC | DAT_00553030 == 0 |
0xc (12) | AI noble from preset table |
| MP PvP | DAT_00553030 == 1 |
0xb (11) | Remote human via ASIGS |
Documentation index#
| Page | Contents |
|---|---|
| entry-and-menu.md | SIGS GameType, gateway wizard, main menu routing |
| setup-wizard.md | Setup UI controls, battle types, ready/start |
| army-and-scenarios.md | Embedded preset tables, external TROOPS*.ENG |
| battle-flow.md | Battle init, combat differences vs campaign |
| scoring-and-rematch.md | Score screens, high scores, rematch |
| multiplayer-pvp.md | ASIGS session, sync opcodes |
| state-and-globals.md | State machine and global index |
| evidence.md | Symbols, assets, open questions |
Key globals (quick reference)#
| GoG symbol (proposed) | Address | Role |
|---|---|---|
lotr2_skirmish_active |
DAT_0057a0f0 |
1 while skirmish battle session active |
lotr2_skirmish_game_type |
DAT_0057cb38 |
1 when SIGS GameType=Skirmish |
lotr2_skirmish_battle_type |
DAT_0053e91c |
0/1 field, 2 siege, 3 custom |
lotr2_skirmish_scenario_index |
DAT_0056d590 |
Scenario row within battle type |
lotr2_skirmish_map_index |
DAT_0053f258 |
Map table row (0–7, then wrap) |
Full list: state-and-globals.md.
Tools#
Regenerate embedded tables:
python3 tools/ghidra/dump_skirmish_tables.py gog/Lords2.exe
Parse UI strings:
python3 tools/parse_l2_eng.py L2.ENG 0xb 0x25 0x26 0x53
Evidence sources#
| Layer | Path |
|---|---|
| Decompilation | src/Lords2-gog.exe.c |
| Combat module | architecture/combat/MODULE.md |
| Game module | architecture/game/MODULE.md |
| AI nobles | nobles/README.md |
| Table dump | tools/ghidra/dump_skirmish_tables.py |
Confidence#
| Area | Level |
|---|---|
| GoG-only scope vs retail | confirmed (string / branch audit) |
| Wizard steps and screen modes | likely |
| Army preset numbers | confirmed (binary dump) |
| High-score persistence | speculative |