The patch

What changes, screen by screen, and what deliberately does not.

Work in progress: see What is missing.

The rule the whole thing is built on

Not one instruction of the game is changed. The patch touches drawings, character shapes, colour tables and the lists that place text — plus a handful of ld hl operands that repoint a block, and one jp for the tutorial. The deal, the opponent, the scoring arithmetic and the state machine are the cartridge's, untouched.

The build enforces it: parchea.py splices the new blocks into a copy of the listing, assembles it, and then compares the result with the original outside those blocks. If a single byte moved where it should not have, the build stops.

ROM modificada: 12103 bytes cambiados dentro de 46 bloques, 0 fuera
OK: fuera de los bloques sustituidos, la ROM es identica a la original

The title

Only one word on the title screen was actually Japanese: アマチュア, the transcription of «amateur». What really changes is the logo: the four kanji 麻雀道場 give way to MAHJONG DOJO on the same 144×24 pixel canvas.

Those 54 characters are ordered by columns, not by rows — 0xA0 is row 4 column 7, 0xA1 is row 5 column 7, and 0xA3 goes back up to row 4 column 8 — which is not how the generator lays out big glyphs. That is why the logo is cut up by its own tool and the pieces go into the patch already sliced.

The kanji title is not kept. Keeping it was considered and dropped: it is the game's cover, not a text you have to read to play, and there is no room for both.

The menu has a fourth line, 4-key TUTORIAL: the tutorial without waiting for the demo. The three entries above it move up one row, and the label block, now 119 bytes for a 103-byte hole, is relocated into the free area. How the key works is in The tutorial.

The table's status bar

The centre band of the table, which tells you where the hand stands: EAST 1, the DORA and URA indicators, the HONBA counter, STICK for the riichi sticks on the table, and the difficulty in red on the right.

Two things had to be measured rather than assumed:

The scoring screen

The screen that tells you why you won or lost, and the one with the most Japanese on it. It now reads DEALER, FU, HAN, PAYS, SCORE, the list of yaku with their han down the right, and the hand broken into its sets along the bottom with the fu of each. Under it, the type of wait — RYANMEN / KANCHAN / PENCHAN / TANKI / SHANPON — and TSUMO or RON.

The trick that made it cheap: the top third loads the cartridge's katakana font into slots 0x30-0x7F, so the Latin alphabet goes into the slots the katakana occupied and inherits their colour. No colour table to touch.

The message box, the menu and the warnings

These live in the centre third, where space is tightest, and they are the reason the patch uses a 3×7 font with two letters per character cell — how that works. The box goes from 7 characters a line to 14, the menu from 6 to 12.

in English
the call menuWIN / RIICHI / PON / CHI / KAN
the box, promptingCALL TSUMO / PON CHI KAN
the box, on your turnCALL KAN OR / DISCARD ONE
the box, refusingNOT ALLOWED
the three warningsFURITEN HAND · MISSED RON · NO YAKU HAND
the penaltyPENALTY HAND
no winnerDRAW / GAME
game overEND

NOT ALLOWED is worth a note: the same drawing is asked for by three different refusals — calling with an incomplete hand, asking for a riichi that is not allowed, and making a call that does not fit.

The end-of-game label

終局 is drawn with eighteen characters, and eighteen is exactly enough for three 16×24 letters — END — with one blank cell between each pair. Narrowing the glyphs instead does not give enough separation; the blank cell does.

That screen only ever appears when a whole game finishes, so it was drawn without the emulator, by reading the label out of the cartridge's own block rather than from a copy typed by hand.

And a tutorial that was not there

Twenty screens hooked onto the end of the attract loop. That has its own page.

What is deliberately left alone