BeamNG.Earth
A 1:1 scale streamed Earth for BeamNG.drive: real elevation and satellite imagery, floating origin, LOD streaming from a companion server
A single-encounter Unity 6 action game: one boss that statistically profiles your habits and counter-adapts — without ever cheating. Built entirely from generated assets, with an assembly-enforced ant
GamesC# · ShaderLabGitHub @Shadow-46OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
A single-encounter Unity 6 action game: one boss that statistically profiles your habits and counter-adapts — without ever cheating. Built entirely from generated assets, with an assembly-enforced anti-cheat firewall and 211 edit-mode tests.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
A single-encounter action game where the boss studies you. Fight one boss in one arena; it builds
a statistical profile of your habits — how you attack, dodge, space and panic — and counter-adapts to
punish them, without ever reading your input. Winning means noticing it has adapted, and adapting back.
▶ Play in your browser — no install, runs the WebGL build straight from GitHub Pages.
⬇ Download for Windows — unzip and run AdaptiveBossArena.exe.Read the full README ↗A single-encounter action game where the boss studies you. Fight one boss in one arena; it builds a statistical profile of your habits — how you attack, dodge, space and panic — and counter-adapts to punish them, without ever reading your input. Winning means noticing it has adapted, and adapting back.
▶ Play in your browser — no install, runs the WebGL build straight from GitHub Pages.
⬇ Download for Windows — unzip and run AdaptiveBossArena.exe.
It's a Sekiro-style deflect duel built in Unity 6, entirely from code-generated assets (no hand-authored scenes or prefabs), and it never lets the boss cheat:
The one rule that outranks the rest. The boss may not read your input, buffered input, stamina, cooldowns or invincibility frames. It reacts only to what a human opponent could perceive on screen, and only after a human-plausible delay. This is enforced by the assembly dependency graph — the AI and learning code literally cannot compile against the code that would let them cheat, and a test fails the build if that boundary is ever breached. See Docs/ARCHITECTURE.md.
flowchart TD
U[Utilities] --> C[Core]
C --> CB[Combat]
CB --> P[Player<br/>+ Input System]
CB --> L[Learning]
L --> AI[AI]
CB --> UI[UI]
P --> G[Game<br/>composition root]
AI --> G
L --> G
UI --> G
G --> ED[Editor<br/>asset generators]
classDef boss fill:#3a1420,stroke:#e0524f,color:#ffd9d9
classDef player fill:#0f2740,stroke:#5aa0ff,color:#d9ecff
class AI,L boss
class P player
The AI and Learning assemblies have no arrow to Player or the Input System — that missing edge is the firewall. All the player state the boss is allowed to know reaches it through a delayed, perception-limited channel, so feints genuinely work and the fight stays fair.
The boss reading you is only half of it. Every counter it adopts announces itself with a tell, and each one is an over-commitment you can turn around:
So the counter that was beating you becomes the thing that opens it up. Adaptation only ever changes numbers, never rules — the boss gains no move it did not already have — and it is dormant until it has genuinely learned something, so an opening fight plays clean.
All seven build phases complete, plus a top-tier polish pass — the game runs end to end from a title screen through a framed, animated fight.
There is a fight. You can move, dash, combo, heal, deflect, build focus, and be staggered. The boss watches you, escalates through four phases (ending in a desperation Last Stand) with dramatic transitions, strings its attacks into combos, throws unblockable "perilous" attacks and arena-scarring set-pieces, and gradually develops answers to whatever you keep doing — including how you defend, reading whether you hide behind the guard and how precisely you deflect. Out-read a counter and the boss overbalances, handing you the opening. It is wrapped in a title screen, a "ready — fight" intro, slow-motion outcome beats, a post-fight dossier on how it read you, challenge modifiers, and a working settings menu.
| Phase | Scope | Status |
|---|---|---|
| 1 | Architecture, contracts, tooling, tests | ✅ Complete |
| 2 | Player controller — movement, dash, stamina | ✅ Complete |
| 3 | Combat — hitboxes, combos, stagger, hit-stop | ✅ Complete |
| 4 | Boss AI — state machine, attacks, phases | ✅ Complete |
| 5 | Learning system — profiling and adaptation | ✅ Complete |
| 6 | UI, settings, save system | ✅ Complete |
| 7 | Polish — post-processing, audio, tuning | ✅ Complete |
Docs/ART_INTEGRATION.md.Press F1 for the debug overlay. The heads-up display shows what is happening; the overlay shows what the boss believes, which is the only way to tune the encounter.
Open the project, open Assets/_Project/Scenes/MainMenu.unity, and press Play — or build, which
boots to the title. If the generated assets are ever missing, run
Adaptive Boss Arena/Setup/Run Full Setup.
| Action | Keyboard / Mouse | Gamepad |
|---|---|---|
| Move | WASD or arrow keys | Left stick |
| Dash | Space | B / Circle |
| Light attack | Left mouse | X / Square |
| Heavy attack | Right mouse | Y / Triangle |
| Guard / deflect | Left Shift | Left shoulder |
| Special | Q | Right shoulder |
| Heal | R | D-pad up |
| Swap weapon | V | D-pad right |
| Lock on / off | Tab | — |
| Cycle camera | C | — |
| Debug overlay | F1 | — |
| Pause | Escape | Start |
Guard is the heart of the fight. A hit arriving in the first 0.15 seconds of raising your guard is deflected — negated entirely, and it costs the boss posture. Later than that it is merely blocked: you survive, but you take chip damage and it costs your posture.
Deflecting is the aggressive option, not the safe one. Blocking bleeds your posture until it breaks; deflecting bleeds theirs. Empty the boss's posture bar and a riposte opens.
Keep deflecting on a predictable rhythm and the boss will eventually learn to feint — showing a real telegraph and cancelling it. The counter is to stop being predictable.
| Weapon | Handling | Defence |
|---|---|---|
| Blade | Balanced | Tight 0.20s deflect, heavy posture damage |
| Greatsword | Slower, costlier swings | No parry — hyper-armour instead: its committed swings shrug off incoming hits and cannot be staggered mid-strike (the recovery still can) |
| Energy Blade | Faster, cheaper swings | Forgiving 0.28s guard that bleeds posture slower, so it can be held against a flurry |
Which one you favour is itself a habit the boss profiles. The three defence styles are enforced by a
small, unit-tested decision (Combat/DefenceResolver.cs), so the trade each weapon makes is a real
rule, not flavour text.
Light attacks chain into a three-hit combo if you press again during the recovery window. Dashing just as an attack lands is a perfect dodge and rewards you with a brief slow-motion window to punish from.
The boss builds a picture of you from things it could legitimately have seen: how often you swing, which way you roll, how far away you like to stand, whether you attack the instant a dodge ends, how often you break off to heal, and whether your perfect dodges land on the exact same frame every time. Every few seconds it recomputes that picture, and occasionally it develops an answer to whichever habit it has the best evidence for — eight distinct counters in all, each with its own tell. Lean on heavies and it starts parrying them; heal too freely and it lunges the moment you falter; dodge on a flawless rhythm and it begins feinting to turn that timing against you.
Some things worth knowing while playing:
Try fighting it badly on purpose — spam heavy attacks, or roll left every single time — and watch the overlay to see the confidence in that habit climb before the counter arrives.
This project targets Unity 6.3 LTS (6000.3.x), supported until December 2027.
Any Unity 6.3 patch release works. ProjectSettings/ProjectVersion.txt names one specific patch;
the Hub will offer to open the project with whichever 6.3 build you have installed.
In Unity Hub, choose Add → Add project from disk and select this folder. The first import takes a few minutes while packages resolve and the Library folder is built.
Expect zero compile errors in the Console after import. Anything else is a bug worth reporting.
Unity cannot create the project's layers, physics rules or scene from the files in source control, so those are generated by code. From the menu bar:
Adaptive Boss Arena → Setup → Run Full Setup
This runs three steps in order:
| Step | What it does |
|---|---|
| Configure Project | Creates layers and tags, builds the collision matrix, pins physics to 60 Hz |
| Configure Render Pipeline | Creates and assigns the URP asset — without this everything renders magenta |
| Generate Default Assets | Creates attack, strategy, config and event-channel assets |
| Retune Generated Assets | Rewrites tuning numbers into assets that already exist, keeping their GUIDs. Run this after changing a value in DefaultAssetGenerator, which otherwise only affects assets created from scratch |
| Generate Input Actions | Creates the keyboard, mouse and gamepad bindings |
| Generate Player Prefab | Builds the player from primitives and wires its references |
| Generate Boss Prefab | Builds the boss from primitives and wires its references |
| Build Arena Scene | Generates the arena, lighting, camera, and spawns both combatants |
The order is a dependency chain — the prefab needs the config assets and bindings, the scene needs the prefab — so prefer Run Full Setup unless you know why you are running one alone. Individual steps are safe to re-run; existing assets are kept, not overwritten.
Assets/_Project/Scenes/Arena.unity and press Play. The blue capsule is you; the larger
red one is the boss. It should approach, telegraph, and swing at you. Press F1 for the debug
overlay.ArchitectureFirewallTests, which verifies the boss cannot reach player input.Everything above also runs headless, which is what continuous integration should use. Both setup
and the test suite are batch-safe — they skip their confirmation dialogs when Application.isBatchMode
is true.
Compile the project and report any errors:
"C:\Program Files\Unity\Hub\Editor\6000.3.20f1\Editor\Unity.exe" -batchmode -quit -nographics -projectPath . -logFile compile.log
Regenerate every asset, prefab and the scene from scratch:
"C:\Program Files\Unity\Hub\Editor\6000.3.20f1\Editor\Unity.exe" -batchmode -quit -nographics -projectPath . -logFile setup.log -executeMethod AdaptiveBossArena.Editor.ProjectSetupRunner.RunFullSetup
Run the full edit-mode suite and write JUnit-style results:
"C:\Program Files\Unity\Hub\Editor\6000.3.20f1\Editor\Unity.exe" -batchmode -nographics -projectPath . -runTests -testPlatform EditMode -testResults test-results.xml -logFile tests.log
GameBootstrapper on the --- Managers --- object has a Random Seed field. Leave it at zero
for a fresh seed each run; set it to a specific value to make every random decision — including, in
later phases, the boss's counter-strategy choices — replay identically. The seed in use is printed
to the console at startup.
Assets/_Project/Scripts/
├── Utilities/ Pure algorithms — ring buffers, moving averages, histograms
├── Core/ Interfaces, data types, services. Depends on nothing but Utilities
├── Combat/ Attack definitions and hit resolution
├── Player/ Player character. The only gameplay assembly that touches input
├── Learning/ Behaviour analysis and counter-strategy selection
├── AI/ Boss state machine and decision making
├── UI/ Heads-up display and menus
├── Managers/ Composition root and scene management
└── Editor/ Setup tooling and architecture validation
Assets/Tests/EditMode/ Tests that run without entering play mode
Assets/_Project/ScriptableObjects/ Generated configuration assets
Docs/ARCHITECTURE.md How the pieces fit and why
Read CLAUDE.md before changing anything. The short version:
Time.timeScale outside TimeService.UnityEngine.Random — inject IRandomProvider.AI or Learning to Player.