Shiren GB (不思議のダンジョン 風来のシレンGB 〜月影村の怪物〜) — ROM-hack feasibility findings

Session date: 2026-09-02. All findings verified hands-on against the ROM (shiren_gb1.gb, 512 KB, MBC1+RAM+BATT, SGB-enhanced, Chunsoft 1996) using PyBoy headless emulation + direct ROM analysis.

Verdict: highly feasible — everything is cracked already

Compared to the One Piece GBA attempt (2-byte codes, unfindable compressed font): this game took ~30 minutes to fully crack. Text encoding, font location/format, and script banks are all confirmed.

One byte per character. Byte value = VRAM tile index (signed-mode).

Range Meaning
0x00 space
0x01–0x0A digits 0–9
0x0B–0x38 hiragana あ〜ん in gojūon order
0x39–0x41 small ぁぃぅぇぉゃゅょっ
0x42–0x6F katakana ア〜ン in gojūon order
0x70–0x78 small ァィゥェォャュョッ
0x79 dakuten ゛ (combining, follows base char)
0x7A handakuten ゜ (combining)
0x7B ー (chōon)
0x7C–0x80 + - [ ] ?
0x88
0xB0
0xFF string terminator

Control codes observed in script: 0xEF = line break, 0xED = end of entry, 0xEE = page break, 0xF0 xx = parameterized insert, 0xA1 = name insert(?). Codes 0x81–0xEF not yet fully mapped.

Table file: shiren_gb1.tbl (this directory).

Font (CONFIRMED)

Script locations (verified samples)

Bank File offsets Content
11 0x2C000–0x2FFFF Menus/UI. Pointer table at 0x2D300 (16-bit LE, bank-local 0x4000-window). Menu strings at 0x2D33C+
13 0x34000–0x37FFF Item descriptions (scrolls etc. at 0x36000+), story/help text, main font at 0x37680
14 0x38000–0x3BFFF Rankings, death messages (“Xにたおされた”) at 0x3BE78+
31 0x7C000–0x7FFFF Intro survey questions (0x7C271+), credits(?)

Story dialogue is plain text, uncompressed, with 16-bit bank-local pointer tables. Bank 9-10 big “text” runs are level data (false positives).

Emulator-in-the-loop (works)

PyBoy drives the game headless: boot → Start×4 → A×6 reaches name entry. boy.memory[...] reads VRAM/tilemaps live. This enables automated screenshot-verification of any text edit. Screenshots + VRAM dumps in this directory (emu_*.png, ne_*.bin).

What an English translation MVP needs

  1. Map remaining control codes (0x81–0xF0 region) — observe in emulator.
  2. Locate all pointer tables (menus done; item names, dialogue TBD).
  3. Replace font glyphs 0x0B–0x78 with Latin+punctuation (110 slots, plenty), OR append new codes — kana slots are easier.
  4. Script dump → translate → re-insert with pointer rebuild (text will be longer in English; pointer tables make reflow manageable; bank space is the main constraint, may need to use free space — ROM has padding areas).
  5. PyBoy screenshot regression harness to verify every screen.

Est. difficulty: standard GB translation project. No compression, no custom encodings beyond the above, small script (tens of KB).