u/RadMageIRL

Fixed the Info > All hang, the Forget crash, and the missing gold window in the NoPrgress DQ6 SNES translation

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.

u/RadMageIRL — 15 hours ago
▲ 21 r/romhacking+1 crossposts

Fixed the broken 4 Party Member Patch for Dragon Quest V (SNES/SFC) NoPrgress / DeJap Translation

Note on Community Rules: This project is strictly open-source documentation and a delta patch file ( .ips / .bps ). It contains zero copyrighted game code, or ROM files.

TL;DR: The popular 4 party member hack for DQ5 SNES (NoPrgress/DeJap) hosted on RHDN (#7430) has been broken for years due to a 512-byte header offset error baked directly into the released patch. I’ve re-derived the conversion directly from Mr. 45's original 2007 Japanese hack, verified it, and published a working patch.

What Was Broken?

The original hack was created by Mr. 45 back in 2007 for the Japanese release. In 2022, AustNerevar released an English conversion for the DeJap translation (RHDN Hack #7430).

However, virtually everyone who tried using it hit the exact same wall: the game boots, titles, and lets you enter your name, but permanently hangs right after the initial config prompts with a door-opening sound effect. Most assumed they had a bad ROM header or patched incorrectly, but the patch file itself was flawed and off by 512 bytes (0x200).

1,140 of the 1,210 changed bytes landed at +0x200, writing modified values onto completely unrelated code while leaving the target code untouched.

Links & Code

The GitHub repo contains the full byte-level analysis, Mr. 45's original Japanese notes (with translations), and an automated build script that runs the patch chain against a Japanese base ROM with hash verification. (No ROMs included, bring your own clean files).

u/RadMageIRL — 2 days ago