BOAM — Bot On A Mission
v2.5.0 | Documentation | Changelog
AI behaviour modification mod for Menace. Injects per-tile score modifiers during the game’s AI tile evaluation to steer enemy movement. Includes a real-time in-game minimap overlay.
Opt-in features: offline heatmap rendering, battle session recording (player actions + AI decisions + combat outcomes).
Features
| Feature | Description |
|---|---|
| AI Behaviour | Configurable behaviour nodes that influence enemy AI movement |
| Tactical Minimap | In-game IMGUI overlay showing unit positions on the captured map background |
| Heatmap Renderer | Offline heatmap generation from deferred render jobs — tile scores, decisions, movement |
| Action Logging | Records player actions, AI decisions, and combat outcomes to JSONL battle logs |
| Configuration | Versioned JSON5 configs with user/mod-default two-tier system |
Current Behaviour Nodes
Four configurable nodes run in sequence during each AI actor’s turn, modifying the game’s tile scores to influence movement:
| Node | Score target | Effect |
|---|---|---|
| Roaming | Utility | Explore outward when idle. Suppressed near engagement so other behaviours take over. |
| Reposition | UtilityByAttacks | Move toward the closest known opponent at ideal attack range. Uses full AP when firing range is unreachable, reserves AP for attacks when it is. |
| Pack | Safety | Form groups around allies. Engaged allies attract harder. Crowd penalty when too dense (suppressed near combat). |
| Investigate | Utility | Chase the last known position of player units that broke line of sight. Triggered by losing LOS on a player unit |
Nodes are self-contained: types, keys, config, and registration all live in one file per node. See Adding a Behaviour Node.
All tuning is in behaviour.json5 — no code changes needed to adjust behaviour strength or add presets.
Components
| Component | Location | Runtime | Description |
|---|---|---|---|
| BOAM-modpack | src/ | In-game (MelonLoader/Wine) | Harmony patches, minimap overlay, map capture, action forwarding |
| BOAM-engine | boam_tactical_engine/ | Native (.NET 10, port 7660) | Behaviour nodes, heatmap renderer, action logger, icon setup |
The BOAM-modpack works standalone — the minimap needs the engine to be run once for setup to generate assets. Start the BOAM-engine only when you want AI behaviours, heatmaps, or action logging.
First time? Follow the Installation Guide.
Downloads
Pre-built engine binaries (Linux and Windows) are available on the Releases page.
Each release includes:
- BOAM-modpack — C# source (compiled at deploy time by the Menace Modkit)
- BOAM-tactical-engine — pre-built binaries for Linux and Windows (bundled and slim variants)
The engine is a standalone binary — put it anywhere you like. It finds the game directory automatically via MENACE_GAME_DIR env var or standard Steam install paths. No need to place it inside the game folder.
Prefer to build yourself? See Building from Source.
Install Layout
The BOAM-modpack is deployed inside the game directory. The engine can live anywhere.
Menace/
├── Mods/BOAM/
│ ├── dlls/BOAM.dll C# bridge (compiled by ModpackLoader)
│ ├── modpack.json Mod manifest
│ ├── configs/ Mod default configs (reset on deploy)
│ │ ├── engine.json5 Engine ports, rendering
│ │ ├── behaviour.json5 AI behaviour node chains and tuning presets
│ │ ├── game_events.json5 Active game events and feature gates
│ │ ├── tactical_map.json5 Minimap keybindings, visual defaults
│ │ ├── tactical_map_presets.json5 Display presets (sizes, styles, anchors)
│ │ └── icon-config.json5 Icon generation source mappings
│ ├── start-tactical-engine.sh Launcher (opens terminal, logs to file)
│ ├── boam-launch.sh(.bat) Steam launch helper
│ └── logs/ Engine log
└── UserData/BOAM/
├── configs/ User configs (persistent, checked first)
├── icons/ Generated heatmap/minimap icons
│ ├── factions/
│ └── templates/
└── battle_reports/ Recorded battles (auto-created per session)
└── battle_YYYY_MM_DD_HH_MM/
├── mapbg.png Captured map background
├── mapbg.info Tile dimensions
├── mapdata.bin Binary tile data
├── dramatis_personae.json Actor registry (UUIDs, templates, factions)
├── round_log.jsonl Action log (player actions + AI decisions)
├── render_jobs/ Self-contained render job JSON files
└── heatmaps/ Rendered heatmap PNGs
Anywhere/
└── TacticalEngine(.exe) Engine binary — runs from any location
Usage
Start the Engine
Linux
# Passive — engine starts, you control everything
./start-tactical-engine.sh
# Auto-navigate to tactical when game connects
./start-tactical-engine.sh --on-title /navigate/tacticalWindows
REM Passive
start-tactical-engine.bat
REM Auto-navigate to tactical
start-tactical-engine.bat --on-title /navigate/tacticalThen launch the game normally through Steam. On Linux the engine opens in its own terminal window; on Windows it runs in the command prompt. Logs written to Mods/BOAM/logs/tactical_engine.log.
In-Game Minimap
| Key | Action |
|---|---|
M | Toggle minimap on/off |
L | Cycle display presets (size/anchor) |
Additional keys (FoW, labels, etc.) can be enabled in tactical_map.json5. See Tactical Minimap.
Render Heatmaps
After playing a round, render job data is flushed to disk. Render heatmaps on demand:
Linux
../UserData/BOAM/Engine/TacticalEngine --render battle_2026_03_15_15_14 # all
../UserData/BOAM/Engine/TacticalEngine --render battle_2026_03_15_15_14 --pattern "r01_*" # round 1 only
../UserData/BOAM/Engine/TacticalEngine --render battle_2026_03_15_15_14 --pattern "*_alien_stinger*" # one unitWindows
..\UserData\BOAM\Engine\TacticalEngine.exe --render battle_2026_03_15_15_14
..\UserData\BOAM\Engine\TacticalEngine.exe --render battle_2026_03_15_15_14 --pattern "r01_*"
..\UserData\BOAM\Engine\TacticalEngine.exe --render battle_2026_03_15_15_14 --pattern "*_alien_stinger*"HTTP (any platform, while engine is running):
curl -s -X POST http://127.0.0.1:7660/render/battle/battle_2026_03_15_15_14 -d '{}'See Heatmap Renderer.
Icons
Icons are generated automatically on first engine startup via an interactive setup prompt.
To regenerate, start the engine with --icons-force.
A built-in fallback icon pack is embedded in the engine binary for users without extracted game assets.
Documentation
- Installation Guide — Setup, asset extraction, icon generation, shell shortcuts
- AI Behaviour — How behaviour nodes work, configuration, adding custom nodes
- Tactical Minimap — In-game overlay controls, display presets, customization
- Heatmap Renderer — Render API, pattern matching, what each heatmap shows
- Configuration — Two-tier config system, versioning, all config options
- BOAM-modpack — In-game mod: minimap, hooks, map capture
- BOAM-engine — External engine: behaviours, heatmaps, logging, icon setup, CLI, HTTP API
- Building from Source — Clone, build, and install from source
- Changelog — Version history