# Status and roadmap **Read this first when picking up work.** It maps every feature in the design brief to its current state and the files that implement it, so you can find the relevant code without re-reading the whole project. Art and audio source packs, and their licence status, are recorded in [ASSETS.md](ASSETS.md) — the packs themselves are not in git. Design decisions that are already settled — and the reasoning behind them — live in [DECISIONS.md](DECISIONS.md). Check there before asking the user something that may already have an answer. Legend: **done** · **partial** (works, with a stated gap) · **todo** (not started) --- ## Where things stand **Every stage in the original brief is built.** The MVP asked for a twin-stick bullet hell, server-side hit validation, predictable enemies, an adaptable boss, a lobby hub with dungeon runs, and an emergency escape. All of that exists, plus the four stages that followed: characters and permadeath, inventory and loot, upgrades, and a second boss that moves. So there is no obvious "next ticket". What follows is the honest list of candidates, none of which the user has chosen — **ask before starting one.** | Candidate | Why it might be next | What it needs first | | --- | --- | --- | | **Replace `LocalAuthProvider`** | It is the one thing standing between this and a server anyone else can reach. Any client can claim any account id. | Nothing technical — it is one `AuthProvider` subclass. Needs a decision about Steam vs something else. | | **A reason to keep playing past level 15** | Levels cap, `--depth` never rises in play, and a cleared dungeon gives experience and a potion. The long loop is missing. | Open question 1 below. | | **An economy** | Loot only drops from kills; nothing sells anything. The quartermaster is the obvious shop and has no currency to take. | Open questions 2 and 3. | | **Impact and hit feedback** | `Art.IMPACT` is loaded and validated and nothing plays it. No hit flash, no screen shake, no death animation. | Nothing. This is the cheapest visible win. | | **Replace the two non-redistributable packs** | Bullet and FX art is local-only and non-commercial, which blocks both a public repo copy and a commercial release. | CC0 or CC BY replacements. See [ASSETS.md](ASSETS.md). | | **Transport encryption** | `ENetMultiplayerPeer` supports DTLS. Required before a public server, not before then. | Follows the auth decision. | Each stage below also carries its own **Known gaps** section — those are smaller and more specific than the table above. ### The smoke flake (diagnosed and fixed) `tools/smoke.sh` failed intermittently, always first in a pre-push hook, whose logs were thrown away. With `KEEP=1` the third occurrence was readable: bot1, whose account picks the Proving Grounds, had gone into the Choir Vault. The bot wandered for 90 of every 120 ticks in the hub and then walked to its entrance holding interact the whole way; the three entrances sit in a row, so a wander that ended near the middle one carried it across the wrong ring with the key down. Which dungeons opened depended on where a timing-dependent wander stopped. The bot now walks straight to its own entrance and presses interact only on it (`ClientRuntime._bot_input`). If smoke fails again, push with `KEEP=1 git push` so the logs survive. ## Open questions for the user Genuinely unspecified. **Do not guess at these** — each changes the design, and several have no obvious default. The seven questions that blocked Stage 4 were answered and are recorded in [DECISIONS.md](DECISIONS.md#upgrades); these are what is left. 1. **What advances dungeon depth?** `--depth` is a dev flag and nothing raises it in play. Depth already drives map size and could drive difficulty and rewards. Without an answer there is no progression past level 15. 2. **Where do items come from outside a dungeon?** Loot only drops from kills. If the hub should sell potions, that is the quartermaster's second job. 3. **Is there a currency?** Nothing drops money and nothing costs anything. A shop needs one; so does any reward for a cleared run beyond experience. 4. **Should items stack?** Four potions currently take four slots, which makes a four-slot bag small. Stacking is a count byte per slot plus a rule for splitting one — neither is hard, and both change the UI. 5. **Does a dungeon ever get harder within a run?** Enemies are placed once at generation and never reinforce. That is a deliberate decision ([DECISIONS.md](DECISIONS.md#world)), but it means a slow party is never punished for it. 6. **What happens to a party when one member dies?** Permadeath removes them to the roster screen while the run continues without them. Nobody has said whether that is right.