Crystal Advance Redux is on the site, and SoulGold stops claiming 336 species it does not have
The twelfth game, read out of a FireRed decomp: 642 Pokédex rows, 484 trainers that all have a location, and its own font read glyph by glyph. Plus 336 SoulGold evolution pages retired to match what its ROM actually compiles.
Crystal Advance Redux is the twelfth game on the site, and the first one we have read out of a FireRed decomp instead of a Pokémon Crystal or Emerald tree. Most of its tables are plain data -- but not the parts that mattered. The hack redraws text bytes in its own font, sizes its species and move tables with CFRU/DPE layouts, and puts some of its move tutors behind script calls rather than a tutor table.
What is on the site
Crystal Advance Redux has its own Pokédex, moves, items, locations and trainers:
- 642 Pokédex rows, 510 moves, 295 evolutions
- 484 trainers, every one of them with a location -- 359 reached by walking the game's object events, 125 by walking its scripts, none unreachable
- 1,291 item finds across 116 locations: 361 sitting in item balls, 170 hidden, 216 gifts and 544 rows of shop stock, with 1,216 of them linked to the page for the place you pick them up
- 48 TMs, 8 HMs, 89 tutor moves, 243 egg moves and 36,185 move-learner rows
- 2,559 images, read out of the ROM's own sprite banks
Its font was the hard part
Glyph bytes are redefined in this hack, so its item and move text came out as garbage until we read the font itself. Slots that draw as one letter elsewhere are two here: 0x31 draws as "ki", 0x40 as "Fl", 0x47 as "ea", hand-joined pairs where the glyphs touch. Every string the site prints for this game was re-read through that font, which is why its items read as sentences instead of symbols.
Tutors, and the machines that are not TMs
The 89 tutor moves were found by walking the calls that start them, not by reading a tutor table -- this game places its tutors in script, and a few of them behind items. The hack also adds "Tech Disk" slots past the TMs the game ships. Those publish without a TM number, because they do not have one.
What is withheld, and why
- 117 species rows whose base stats are all zero, including the 28 Unown forms and character slots (Red, Karen, Bruno and friends) that carry no ability id in this ROM
- 106 trainer battles on a map no warp, connection or walked-warp command reaches. The rows name themselves "???" and nobody can fight them
- 20,166 item finds on maps entered the same way -- they would all point at a place you cannot stand on
- 3 Pokédex rows the hack never rewrote: nidoran, nidoran32 and simisear still carry vanilla FireRed's prose for a different species, so we leave them out rather than print the wrong text
- 4 evolutions that happen at level 127, which is never reached
- 3 TM/HM rows: Blizzard and Hyper Beam have no give the walk can find, and the Tech Disk slots have no number to file them under
- The hidden-ability byte: the ROM writes it exactly once (Boo = Tangled Feet) and nothing in the binary shows how the engine would use it, so it stays out
SoulGold: 336 evolution pages retired
SoulGold's evolution chains had been read without its own species gates, so the site built a page for every species its ROM compiles out -- 901 rows, 336 of them for species the game does not have. An /soulgold/evolutions/accelgor page answering 200 while /soulgold/pokemon/accelgor 404s is the site disagreeing with itself, so those rows are gone: 565 remain, every one for a species SoulGold publishes. Of the 336 retired URLs, 53 had earned impressions in the last 90 days and redirect to the evolutions index. Four did not (mudbray, rolycoly, skwovet, surskit -- 6 impressions and no clicks between them), and those 404 by design, which is the honest answer for a page about a species the game does not have.
Ghost Grey's league, in one file
The Elite Four and the Champion lived in files of their own while the Gym Leaders sat in a keyed league file -- three files describing one league, and the badge table able to disagree with it. They are now one keyed file of 16 entries, and each entry carries the badges its fight grants. Its rivals, its held items, its move tutors and its TM/HM locations were published in the same pass.
Smaller things that changed
- The game list is ordered by measured demand now: Polished Crystal first, then every game by its Search Console clicks, refreshed quarterly. Crystal Advance Redux has no search history yet, so it sits last with its own art rather than in a slot the data does not support.
- Static art and the per-game data files carry cache headers, so repeat visits stop re-fetching the same sprites from the edge.
- The team builder records Hidden Power's type and uses it for coverage.
- Encounter level spans are fixed -- they were showing one level where the ROM stores a range.
- The damage calculator runs on Polished Crystal only, and the links that pointed at it from games it cannot calculate are gone. Boss presets now read each game's own league file, and the six games that were missing them have them.
- CI skips the ROM-grounded suites where the ROM is not checked out, and the suites that decode a whole ROM finally get a real time budget instead of vitest's 5 seconds. A red build is worth reading again.
This batch is on its way to production. The pages above go live with the next deploy.