Authoring flow
The engine is game-agnostic. Adding a new automation — whether it’s a new daily loop for Whiteout Survival or the first scenarios for Kingshot — is the same loop:
- (Optional) Create a module if your automation doesn’t fit an existing feature domain — scaffold it from the dashboard’s
/modulespage (see Creating a module). - Capture a screenshot of the game state you want to automate.
- Label the regions on that screenshot (buttons, badges, text areas) in the Labeling editor.
- Save — the editor writes the region coordinates into
area.jsonand stores cropped templates inreferences/. - Write a DSL scenario in YAML that references the regions you just named (
match,click,cond,while_match, …). - Run it — either from the dashboard’s debug runner, or by letting the cron scheduler pick it up.
- Iterate — re-label if the UI changes, tweak DSL conditions, tighten thresholds.
There is no game-specific code anywhere — only modules/<game>/ directories with analyze.yaml (overlay rules), scenarios/*.yaml (DSL), and region crops under references/. The Python engine never knows it’s running on Whiteout Survival or Kingshot; it just executes whatever scenarios are loaded.
Two paths to write a scenario
Section titled “Two paths to write a scenario”| DSL (YAML) | UI mode | |
|---|---|---|
| Where | modules/<game>/scenarios/*.yaml in your editor | Dashboard’s debug runner (/debug-run) |
| Best for | Anything more than a 3-step sequence; version-controlled changes | One-off taps, exploring what works before committing to a scenario |
| Persistence | Committed to the repo | In-session only |
| Power | Full DSL: loops, conditions, sub-scenarios, scheduling | Linear sequence of steps against current screen state |
Most contributors author scenarios in YAML and use the UI runner to test them. The UI mode is rarely the final form — it’s an exploration tool.
- Creating a module — scaffold a new feature domain from the dashboard.
- Labeling regions — how to use the editor.
- Writing scenarios (DSL) — primer with a complete example.
When stuck, ping us in the #install channel on Discord — we review first PRs and can pair on the labeling pass.