The long-standing smoke flake -- failing now and then, always first in a pre-push hook whose logs were discarded -- finally failed with its logs kept. bot1, whose account picks the Proving Grounds, had gone into the Choir Vault, so "the proving grounds opened" never matched. The bot wandered a full-speed Lissajous for 90 of every 120 ticks in the hub, then walked toward its entrance for 30 holding interact the entire way. The three entrances sit in a row, so a wander that happened to end near the middle one sent the bot bound for the right-hand portal across the Choir Vault's ring with the key down, and in it went. Where the wander stopped depended on network timing, which is why it was intermittent and why it never reproduced on demand. The bot now walks straight to its own entrance and presses interact only while standing on that one. Six consecutive smoke runs pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4.7 KiB
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 — the packs themselves are not in git.
Design decisions that are already settled — and the reasoning behind them — live in 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. |
| 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; these are what is left.
- What advances dungeon depth?
--depthis 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. - 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.
- 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.
- 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.
- 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), but it means a slow party is never punished for it.
- 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.