Files
CydandClaude Fable 5 2cfb14ab98 Add /run-firestorm skill: driver to launch/drive/screenshot game + editor
driver.ps1 commands: status/windows, report <Mission> (headless editor
mission-load smoke test), editor-start, game-start, shot/shotwin, click,
stop. All flows verified live: Coliseum report (248 entities), editor UI
screenshot, game console screenshot + Map-tab click. Screenshots dir is
gitignored (can capture the operator desktop).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-01 23:10:27 -05:00

118 lines
6.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: run-firestorm
description: Run, launch, drive, screenshot, or smoke-test BattleTech FireStorm — the game (MW4.exe, fullscreen), the mission editor (MW4Ed2.exe, windowed), or a headless mission-load report. Use for "run the game", "start the editor", "screenshot the app", "verify a mission loads".
---
# Run FireStorm (game + mission editor)
All paths relative to the repo root (`c:\VWE\firestorm`). Everything is driven through
**`.claude\skills\run-firestorm\driver.ps1`** — do not poke the exes directly; the driver
handles working directories, single-instance guards, window discovery, and screenshots.
**This is the operator's real desktop, not a headless box.** The game takes the primary
display fullscreen (800×600 16-bit). A human may be using the machine — prefer the headless
`report` path or the windowed editor unless you actually need the game UI.
## Prerequisites
Already satisfied on this machine: the deployed game at `MW4\`, the editor installed in
place at `Gameleap\mw4\MW4Ed2.exe`, and the per-path `DWM8And16BitMitigation` AppCompat
shims. On a fresh machine, follow `RECOVERY.md` first, then `build-env\deploy-mw4.ps1` and
`build-env\deploy-editor.ps1` (they re-apply the shims — AppCompat is keyed on exe path).
## Agent path — the driver
```
powershell -ExecutionPolicy Bypass -File .claude\skills\run-firestorm\driver.ps1 <command> [args]
```
| Command | What it does |
|---|---|
| `status` / `windows` | List FireStorm processes and their top-level windows (how you detect modal dialogs) |
| `report <Mission>` | **Headless smoke test**: editor loads the mission hidden, writes `Gameleap\mw4\<Mission>.report` (entity counts etc.), driver prints it. ~12 min. Mission = folder name under `Gameleap\mw4\Content\Missions` |
| `editor-start` | Launch the windowed mission editor; waits (≤180 s) for its UI |
| `game-start` | Launch the fullscreen game; waits for the `BattleTech Firestorm` window |
| `shot [name]` | Screenshot the **primary screen**`.claude\skills\run-firestorm\shots\<name>.png`, prints mean brightness (≈0 = dead capture) |
| `shotwin <titleRegex> [name]` | Screenshot cropped to one app window (foregrounds it first) — use for the editor |
| `click <x> <y>` | Left-click at screen coords; restores+foregrounds the app first (fullscreen game: screen coords = game coords at 800×600) |
| `stop` | Kill MW4Ed2 / MW4 / MW4pro |
### Verified flows (each of these ran end-to-end)
Headless mission check — the fastest "does the content pipeline still work":
```
powershell -ExecutionPolicy Bypass -File .claude\skills\run-firestorm\driver.ps1 report Coliseum
```
`editor exit code: 1` (normal — see Gotchas) and a report: `Total Entities=248`, per-class counts.
Editor UI + screenshot:
```
powershell -ExecutionPolicy Bypass -File .claude\skills\run-firestorm\driver.ps1 editor-start
powershell -ExecutionPolicy Bypass -File .claude\skills\run-firestorm\driver.ps1 shotwin 'Mission Editor' editor-main
powershell -ExecutionPolicy Bypass -File .claude\skills\run-firestorm\driver.ps1 stop
```
Game UI + interaction + screenshot (grabs the display — coordinate with the operator):
```
powershell -ExecutionPolicy Bypass -File .claude\skills\run-firestorm\driver.ps1 game-start
powershell -ExecutionPolicy Bypass -File .claude\skills\run-firestorm\driver.ps1 shot game-shell
powershell -ExecutionPolicy Bypass -File .claude\skills\run-firestorm\driver.ps1 click 617 64
powershell -ExecutionPolicy Bypass -File .claude\skills\run-firestorm\driver.ps1 shot game-map-tab
powershell -ExecutionPolicy Bypass -File .claude\skills\run-firestorm\driver.ps1 stop
```
The game boots into the **BattleTech Console V5.07** lobby (player roster + Mission/Map
tabs); `click 617 64` switches to the Map tab.
## Human path
- Game: run `MW4\MW4.exe` (fullscreen; Alt-Tab minimizes it).
- Editor: `Gameleap\mw4\run-editor.bat`.
## Build / rebuild (separate concern)
Code builds via VC6 (`Gameleap\code\mw4\Code\MechWarrior4.dsw`), resources via
`build-env\build-resources.ps1`, deploy via `build-env\deploy-mw4.ps1` — see `CLAUDE.md`
STEP 3/4 and `build-env\RESOURCE-BUILD.md`. Not needed just to run what's deployed.
## Gotchas (all hit while building this skill)
- **`-report` always `exit(1)`**, success or not — the editor's code literally ends with
`exit(1)`. Judge success by the `.report` file content (`UnLoadable` = failed load). The
report lands in `Gameleap\mw4\` (the exe's CWD); delete it after reading — don't commit it.
- **The game window title is `BattleTech Firestorm`** — not "MechWarrior", not "MW4". There
is also a second 640×480 helper window `DirectDrawDeviceWnd` (ignore it).
- **Fullscreen game minimizes the instant it loses focus** (fullscreen-exclusive DDraw), and
the desktop reverts to native resolution — a `shot` taken then captures the desktop, not
the game. `click` restores + refocuses and waits ~2.5 s for the mode switch back.
- **Editor window titles randomly carry a `[DDrawCompat] ` prefix** (the compat layer
retitles); enumeration shows both variants. Match titles loosely (`'Mission Editor'`).
- **Both exes are single-instance** (editor via mutex → modal "already running" message box
that hangs automation). The driver refuses to double-launch; `stop` first.
- **Editor startup is slow (~3060 s)**: it loads/validates the whole content tree (a
"Building Resources..." window appears first) and LAB builds **STOP with a modal dialog on
the first broken content file** — if `editor-start` times out, check `windows` for a STOP
dialog before assuming a hang.
- **Running either app dirties tracked runtime logs** (`Gameleap\mw4\DebugLog.txt`,
`DDrawCompat-MW4Ed2.log` — this repo mirrors everything). `git restore` them afterwards.
- **`driver.ps1` must stay pure ASCII** — PowerShell 5.1 reads BOM-less files as ANSI; a
single em-dash produces "Missing closing '}'" parse errors.
- **Screenshots can capture the operator's desktop** (second monitor, minimized-game
moments). `shots\` is gitignored — never commit them, and `shot` deliberately captures
only the primary screen.
## Troubleshooting
- `Game window did not appear within 120 s` but the process exists → the wait pattern didn't
match a retitled window; run `status` to see the real title.
- `report`: "No report file produced" → the editor hit a content STOP before `MakeReport`;
run `editor-start` and `windows` to read the STOP dialog text.
- Driver parse errors mentioning `—` → someone re-saved it with non-ASCII characters; see
Gotchas.
- Game shows `[DDrawCompat] Fatal Error` → DDrawCompat's `ddraw.dll` leaked next to a game
exe; it belongs only in `Gameleap\mw4` for the editor (see `deploy-*.ps1` skip rules).