fix(dm2-saves): engine-exact standalone-missile termination for retail saves (#169) #233
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "refs/pull/233/head"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Resolves the binary-tracing gate on #169.
Binary trace (Beta Fires.exe, unpacked via scripts/unlzexe.py)
The Beta engine matches retail exactly on standalone-missile handling:
0x1e76a): sets termination flagds:0x3c85at0x1eaa4, recursive call with chain-mode argument 0 (single-record), clears the flag at0x1eac6.0x1daef): mirrors with its own flagds:0x3c7dat0x1de41/0x1de60; single-record epilogue writes no trailing has-record bit.So both engines nest the missile's timer link as a single-record sub-read with the flag cleared afterwards, exactly as retail
sksvgame.cpp:945-955says.Change
set_beta, documented as a compensating model: it contradicts the Beta binary, but the fixtures only decode to completion under it — engine-exact semantics desyncDATA/SKSAVE0.DAT, pointing at the known-incomplete trailing-map tile-walk accounting. Because the Beta walk is truncated-and-spliced, byte-exact round-trips cannot arbitrate the model; revisit with the walk work.docs/formats/save-record-stream.md: new section "Standalone-missile termination: engine vs Beta model (#169)".Closes #169