Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions notes
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,10 @@ One dependency chain runs through this section: the decoration mechanism (a tile
- **Ships with two doc edits and a changelog line.** `doc/user/hud-and-ui.md:10` spells the label out in its panel list; `LABEL_STABIL` (`hudLayout.ts:178`) is one string by design ("named so a rename moves one string"), and renaming the constant alongside it is optional. Leave `CHANGELOG.md:60` and `history.md` alone — those are records of what shipped, not current claims. This one *is* player-facing, so it earns a real changelog entry.
- **Verification is visual, because nothing pins the string.** No test asserts `"STABIL"` — `hud.test.ts:892` only names it in a comment — so the check is a screenshot of the bar at **both** presets rather than the one that happens to be loaded, which is exactly how a marker shipped wrapping once before.

- [ ] **Spread a kill's drops across the tile — right now they stack and read as one item.** Every drop from a kill is pushed at exactly `enemy.x, enemy.y`: the guaranteed health pack (`engine.ts:6125`), the ammo/swap roll or its Toolchain consolation (`:6152`/`:6159`), the bonus-weapon roll (`:6164`), and both Elite pushes (`lootApply.ts:156`/`:158`/`:167`). So a regular kill can leave **three** drops on identical coordinates and an Elite **two**. The renderer applies no offset — `sprites.ts:778` projects raw `drop.x`/`drop.y` — so they draw as perfectly overlapping billboards and the player sees one pickup.
- **Cosmetic only, which is why it has gone unnoticed.** `collectLoot` walks every drop within `AMMO_PICKUP_RADIUS`, so the whole stack is picked up and nothing is lost; the bug is that you cannot tell there was anything to think about. It also makes the loot-drop screenshots misleading in the same way.
- **The trap for whoever implements it: do not spend an rng draw.** Jittering the position off the shared PRNG stream shifts every subsequent draw and re-rolls the layout of every level ever generated, invalidating stored replays — the same constraint that keeps the styleset on its own salted stream and `planAcidOverflows` at zero draws. Spread deterministically instead: the drops are pushed in a fixed order and already carry a per-enemy sequence number (`pushLootDrop`'s `dropSeq`), so an index-derived offset costs nothing and changes no existing map.

### Multiplayer & backend

The multiplayer *features* are still one-liners in the last section; this is the operational half.
Expand Down