
Fixed the Info > All hang, the Forget crash, and the missing gold window in the NoPrgress DQ6 SNES translation
The NoPrgress/DeJap translation is the current most complete SNES translation, and it ships with three long standing defects. RHDN's own entry tells people to keep savestates ready for the Info > All crash. I diagnosed all three and published patches.
https://github.com/RadMageIRL/DQVI_NOPRGRESS_MENU_FIX
Info > All hang.
`STA $3AC2` at `$C3:3538` was deleted during translation and the gap backfilled with a duplicated RTL epilogue so downstream addresses stayed aligned. Without it the party slot loop compares its index against the `0xFF` "not applicable" sentinel rather than the party count, so every index passes, the loop reads an unpopulated slot, and `LDY $3EEE,X` with X=1 hits a byte that is never written. That trips a debug assertion Enix shipped in the retail ROM at `$C4:560F`, a two byte branch to itself. There are 835 of those traps in the ROM.
Measured across traces of the same screen in both ROMs: the Japanese reads `0001` at all 20 executions of the comparison, the English reads `00FF` at 4 of 5 including the fatal one.
Forget crash.
A WRAM allocation collision. NoPrgress built word wrapping for proportional English and put the buffer and its length counter at `$7E:37A0` and `$7E:37A2`, inside a 112 byte block the original game clears wholesale at `$C5:CF90`. Four routines touch that block, all original code, none aware the buffer exists.
The clear fires mid message, the bound is zeroed under a live cursor, the loop reads an unwritten slot and returns `$0000`, that underflows at `SBC #$00AB` into a negative table index, reads backwards into the inserted routine as if it were a jump table, and lands in open bus. Open bus reads as `BRK`, which pushes a garbage return address, and it cascades to a black screen.
Divergence against the Japanese ROM is a single measured event: JP 0 underflows in 109 executions, EN healthy 0 in 9, EN failing 1 in 85.
Fix relocates three variables out of the cleared block. 19 operand sites, no new code.
Missing gold window.
The gold draw at `$C3:3593` was deleted, same padding technique as the Info > All deletion four bytes earlier. Not an oversight: they widened the status window for English labels, which moved gold from columns 22-30 to 16-23 and buried it. Fix moves the window descriptor to columns 1-9 and restores the call using the same string entry they substituted at their other gold site.
Versions
v1 Info > All only, v2 adds Forget, v3 adds gold. Choices not a sequence, and v3 is the only one that changes layout. All targets are stock NoPrgress `B545C548`.
Repo
Patches, a stdlib only build script, and full analysis including the refuted hypotheses, which was most of the work. No ROMs.
Credit to NoPrgress and DeJap. Four years, the entire technical foundation, and both of these are invisible without tooling that did not exist when they were working.