maniator / maniator/verticopolis

[Docs][P3]: zero-height elevator shaft payload size is inferred from the span rule, never measured

Open
#739 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TypeScript
Stars
5
Forks
1
PR merge metrics
No merged PRs in 30d

Description

Deferred from the /gds-code-review of the TDT round-trip fidelity fixes (2026-07-31), Edge Case Hunter layer.

builtShaftPayloadSize sizes a shaft with topFloor === bottomFloor as ONE 324-byte per-floor entry, by extension of the measured spanned-floor rule. That case has never been measured against the real game, and cannot arise from our own exporter (the gather pass drops top <= bottom), so it only matters when reading a corrupt or hand-made save. If the retail game instead writes zero per-floor entries for a degenerate shaft, our reader over-skips 324 bytes and desyncs the rest of the table. The test fixture shares the helper, so no test would catch it either.

Low priority: the 1994 game has no UI for building a zero-height shaft. Resolve it opportunistically the next time the harness is up, by hand-editing a real save's shaft to span one floor and re-reading the game's own re-save.

Story id: tdt-degenerate-shaft-payload

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with builtShaftPayloadSize and the shared test fixture helper, then use the harness to hand-edit a real save's shaft to span one floor and inspect the game's re-save. Compare the retail encoding for a zero-height shaft with the reader's inferred 324-byte entry size. Done means the encoding is established and the reader and its tests no longer risk desynchronizing the table.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
game-dev, reverse-engineering
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.