Individual adaptation works in qualified situations.
All three solo roles improved after a verified change in the best tactic. Public terrain memory also helped. Joint squad choice remains inconclusive.
Methods, intervals and limits →A game. An experiment. A small Rust library.
Give them a habit to notice. Change how you move. See which tactics they try next.
Their tactics adapt.
The combat rules stay fixed.

01 / Play it
Two waves. Three enemy roles. Watch their choices in the notebook beside the field.
Keyboard + mouse to play. On touch, choose Watch demo. No account or model download.
Try the guided playtest →NPCs learn from damage dealt and survival. Learning changes tactic odds after observed outcomes; later missions are not guaranteed to be harder. This live session is an example, not a controlled benchmark.
02 / The boundary
Keep your movement, perception, combat and abilities. Tactical Air selects among the actions you allow, then learns from the result you report.
Try a tiny, independent host →Your host supplies the situation and legal tactics.
The library samples a tactic from learned preferences.
Your game executes it and measures what happened.
Bounded feedback adjusts the next choice. Save or inspect memory.
Research update · 19 October 2026
The conservative-forgetting follow-up is complete. None of its three candidates earned fresh validation. The game uses the standard score updates without these extra reset rules.
All three solo roles improved after a verified change in the best tactic. Public terrain memory also helped. Joint squad choice remains inconclusive.
Methods, intervals and limits →Separate observation batches reduced stable interventions to 0.56–0.93 per 100 fights. Changing-history damage still fell slightly in every role. This was development on 48 examined cases, with zero new scored physical fights.
Latest experiment →Replay 126 reconstructed fights with the actual choice odds, feedback and memory changes. All-seed results sit beside the examples; the display selection is disclosed.
Open the recorded fieldbook →The playable release is 0.3.0. Later research adapters are separate experiments. No claim of human enjoyment, arbitrary-map transfer or third-party game validation is made.
Earlier experiments / Reward and layout
The results include both. These earlier experiments measure enemy damage against scripted movement. Human enjoyment remains unmeasured.
Mean damage in four-round windows after 24 training rounds. The frozen branch starts from the identical trained memory. Intervals below resample 32 paired policy-seed means; secondary comparisons are exploratory.
The original learner recovered after a circling reversal, gaining 18.70 HP over frozen memory. It still trailed the selected fixed strategy. Against feints, continuing to learn lost 4.73 HP.
Original experiment · 8,568 encounters →A 50/50 team blend weakened performance. Keeping full personal credit with a teammate bonus preserved reversal learning, but failed to fix the original feint regression. Neither candidate is in the game.
Additive test · 5,376 candidate encounters →Three new cover/spawn layouts and 16 fresh seeds gave different learning effects. The teammate bonus added just 0.03 HP [−0.13, 0.19] on feints, averaged across those worlds.
Fresh scenarios · 11,760 encounters →Late-round enemy damage. Learning benefit is continued minus frozen memory. Each world has 16 seeds; the worlds are authored cases, not a random map sample.
04 / Make it yours
Rust at the core. WebAssembly in the browser. MIT-licensed source, versioned downloads, and an independent example to start from.
Extract, serve the folder over HTTP, and run the guard example. It includes the compiled library and typed client.
python3 -m http.server 8080Or run the Rust host from the source bundle:
cargo run --locked --release \
-p tactical-air-core --example guard_hostLoading the reproducible timing report…
One guard, two actions, one context; choose + feedback + commit. Median batch means after warm-up, excluding combat and rendering. One Mac is not a capacity or mobile-performance guarantee.
Timing data and environment →Verified here: Rust and native C on macOS arm64; Wasm in Node and desktop Chromium. Other platforms need validation. Downloads are experimental; no npm or crates.io registry release is claimed.
What comes next
Test whether useful terrain memory transfers to unfamiliar layouts. Separate team sampling cost from the way joint choices are represented. Another forgetting rule must first show a benefit on known cases.
Read the research report ↗Open research questionsHuman-player studies have not been conducted.