Support other versions (regions) of the game #84

Open
opened 2026-10-17 10:59:53 +02:00 by kawa · 0 comments
Owner

Request
Support other versions of the game besides the English US/Europe revision 1.1, for example the French, German, Italian, Spanish and Japanese releases, and the US revision 1.0.

Today
src/rom/validate.ts accepts one checksum only and rejects every other ROM ("Other languages, revisions, and modified ROMs are not supported yet").

To work out

  • Which versions to support, and in what order.
  • Where each version differs from the one the port reads now: ROM offsets and data tables, text encoding and character set, name lengths, and the Japanese layout, which differs the most.
  • Whether saves made with one version can be loaded with another.
  • Tests and emulator comparisons for each supported version.

Commits: 3c480a2, 627f87d, d3e3faf, e5b3b4a

Progress (2026-10-17)

  • Done, increment A (3c480a2): the English US/Europe revision 1.0 and the Australian release, besides 1.1. PRET's crystal and crystal_au builds reproduce both retail cartridges byte for byte, and every address the port pins is the same in all three (check:reference now verifies this whenever the rebuilds are present). Revision 1.0's two Battle Tower bugs are reproduced (only the first 21 trainers are drawn; the texts' gender comes from the name's sixth character), checked against all three cartridges by tests/reference-revisions.spec.ts. The Australian release only rewrites Game Corner texts, which come from the ROM. The unit suite and the playthrough from the introduction to Red pass on all three.
  • Saves: each cartridge keeps its own list; a native backup from one of the others imports, and the preview names the cartridge it was made with. .sav files share one layout.
  • Found on the way, fixed separately (#89): the Battle Tower refused the battle when it drew ZABOROWSKI, whose name fills all ten characters.
  • Done, increment B (627f87d): the French, German, Italian and Spanish ROMs provided. PRET builds none of them, so scripts/map-revision.mjs derives each release's addresses from the 1.1 build (bank alignment plus the exact references RGBDS recorded while linking 1.1, every result checked against the release's bytes); 1-3 labels per release remain unfound, all in code the release changed, and refuse when read. Each release's characters were identified from its own font, with the European text engine's two extra codes. The introduction and Mom's scene play in each language, and the sweep of every open map runs as in English.
  • Done, increment C, first part (d3e3faf): Magikarp's length in millimetres and its house's record, Pokédex heights and weights in metres and kilograms, the Heavy Ball's weight, and the enemy's and trainers' name order. map-revision --symbols writes each release's symbol file, so the reference specs run against a release: 51 pass in French, 49-50 in the others.
  • Left: the screens the releases lay out their own way, which the port draws tile for tile: the credits, the Hall of Fame ceremony and PC, the Diploma (German, Italian, Spanish), and, without reference specs yet, the trainer card, Pokégear cards, mail, naming screen and the clock (Spanish's "¿" before the hour). Also German's Pokémon Talk and Buena sequencing, French-only scripts (GiveDratini, CheckCaughtCelebi), and Bill's PC strings in French and German. Then the playthrough in each language (its text checks apply to English only), after which each release is accepted. Until then the four are recognized but refused. The Japanese release is not covered (no copy).
**Request** Support other versions of the game besides the English US/Europe revision 1.1, for example the French, German, Italian, Spanish and Japanese releases, and the US revision 1.0. **Today** `src/rom/validate.ts` accepts one checksum only and rejects every other ROM ("Other languages, revisions, and modified ROMs are not supported yet"). **To work out** - Which versions to support, and in what order. - Where each version differs from the one the port reads now: ROM offsets and data tables, text encoding and character set, name lengths, and the Japanese layout, which differs the most. - Whether saves made with one version can be loaded with another. - Tests and emulator comparisons for each supported version. Commits: 3c480a2, 627f87d, d3e3faf, e5b3b4a **Progress (2026-10-17)** - Done, increment A (3c480a2): the English US/Europe revision 1.0 and the Australian release, besides 1.1. PRET's `crystal` and `crystal_au` builds reproduce both retail cartridges byte for byte, and every address the port pins is the same in all three (`check:reference` now verifies this whenever the rebuilds are present). Revision 1.0's two Battle Tower bugs are reproduced (only the first 21 trainers are drawn; the texts' gender comes from the name's sixth character), checked against all three cartridges by `tests/reference-revisions.spec.ts`. The Australian release only rewrites Game Corner texts, which come from the ROM. The unit suite and the playthrough from the introduction to Red pass on all three. - Saves: each cartridge keeps its own list; a native backup from one of the others imports, and the preview names the cartridge it was made with. `.sav` files share one layout. - Found on the way, fixed separately (#89): the Battle Tower refused the battle when it drew ZABOROWSKI, whose name fills all ten characters. - Done, increment B (627f87d): the French, German, Italian and Spanish ROMs provided. PRET builds none of them, so `scripts/map-revision.mjs` derives each release's addresses from the 1.1 build (bank alignment plus the exact references RGBDS recorded while linking 1.1, every result checked against the release's bytes); 1-3 labels per release remain unfound, all in code the release changed, and refuse when read. Each release's characters were identified from its own font, with the European text engine's two extra codes. The introduction and Mom's scene play in each language, and the sweep of every open map runs as in English. - Done, increment C, first part (d3e3faf): Magikarp's length in millimetres and its house's record, Pokédex heights and weights in metres and kilograms, the Heavy Ball's weight, and the enemy's and trainers' name order. `map-revision --symbols` writes each release's symbol file, so the reference specs run against a release: 51 pass in French, 49-50 in the others. - Left: the screens the releases lay out their own way, which the port draws tile for tile: the credits, the Hall of Fame ceremony and PC, the Diploma (German, Italian, Spanish), and, without reference specs yet, the trainer card, Pokégear cards, mail, naming screen and the clock (Spanish's "¿" before the hour). Also German's Pokémon Talk and Buena sequencing, French-only scripts (`GiveDratini`, `CheckCaughtCelebi`), and Bill's PC strings in French and German. Then the playthrough in each language (its text checks apply to English only), after which each release is accepted. Until then the four are recognized but refused. The Japanese release is not covered (no copy).
kawa added the P2 - later label 2026-10-17 10:59:53 +02:00
kawa added this to the Pokemon Crystal - Web project 2026-10-17 11:00:00 +02:00
kawa moved this to A faire in Pokemon Crystal - Web on 2026-10-17 11:00:00 +02:00
kawa self-assigned this 2026-10-17 11:35:59 +02:00
kawa moved this to En cours in Pokemon Crystal - Web on 2026-10-17 16:12:01 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kawa/Crystal#84