HomeGB › Pokemon Kanto Expansion Pak
GB · Pokémon Red / Blue · v1.3.1 · by Plague von Karma and Memento Martha, with the Kanto Expansion Pak team

Pokemon Kanto Expansion Pak

88areas251Pokémon86bosses471trainers
What makes it different

A genuine Pokemon Red/Blue disassembly fork that adds over 100 "Kanto-related" Pokemon — cut prototypes, later-generation evolutions, and regional variants — alongside new areas, an open-world restructuring of Kanto's last four gyms, and Dark, Steel and Fairy added to the type chart.

More about the game

The Kanto Expansion Pak (KEP) is a from-scratch expansion of Pokemon Red and Blue built on the pret/pokered disassembly, not a FireRed/LeafGreen remake — the site's first Generation 1 guide. Its own README describes the goal plainly: add every "Kanto-related" Pokemon to the original games without changing the wider metagame, which the team defines as species cut from Red and Green's development, Pokemon that evolve from an existing Kanto species in a later generation, regional variants of Kanto species, or Kanto-related species from the SpaceWorld '97 Gold/Silver demo. Dark, Steel and Fairy are added as real types for the first time in a Generation 1 engine, using the SpaceWorld '97 demo's Dark/Steel matchups and Fairy's own beta chart from X and Y's development (from the October 2024 Teraleak) so the new types stay close to how Red/Blue actually plays. Kanto also gets new areas (Citrine City and its surroundings, Celadon University, Cinnabar Volcano, Faraway Island's Mew, Mt. Moon Crater, Bill's Garden) and a restructured back half: the last four gyms can be challenged in any order once Lt. Surge's badge is earned, so gym leaders scale their teams to the player's own badge count instead of a fixed story position.

What's different, point by point

  • 251 Pokemon, including dozens of prototype, cross-generation and regional-variant species new to a Generation 1 engine
  • Dark, Steel and Fairy added to the Generation 1 type chart, using their SpaceWorld '97/beta-X&Y matchups
  • 50 TMs and 5 HMs, the same roster as vanilla Red/Blue, with compatibility re-tuned for every new and returning species
  • Wild grass, surfing and fishing tables across an expanded Kanto
  • 471 trainer battles, including seven gym leaders whose teams scale with the player's own badge count
  • The last four badges (Erika, Koga, Sabrina, Blaine) can be earned in any order once Lt. Surge's Thunder Badge is won
Everything it changes →
Made by

Plague von Karma and Memento Martha, with the Kanto Expansion Pak team

This guide is built from Plague von Karma and Memento Martha, with the Kanto Expansion Pak team's own documentation. The game, the ideas and the work are theirs — the site just makes the numbers searchable. Play it from the official page, and send them the feedback and the thanks.

What this guide covers

Every guide here is built from the game's own documentation. Where a ROM hack changed something but never published the numbers, this says so rather than quietly filling the gap with the original game's — which would be worse than leaving it out.

SectionSource
Wild Pokémon by areaFrom the game itselfEvery wild grass table, surfing table and the hack's single Fishing Rod table (which, unlike vanilla's Old/Good/Super Rods, is placed per area in the source) for every map this source gives one to. Scripted static encounters (Moltres, Articuno, Zapdos and their Galarian counterparts, Mewtwo, Mew, the Meltan Mystery Box swap, the restored Omega and the sleeping Snorlax) are one-time events, not wild encounter tables, and aren't part of this file.
Encounter ratesFrom the game itselfThe 10-slot grass/surfing rate table (19.9/19.9/15.2/9.8/9.8/9.8/5.1/5.1/4.3/1.2%) is read from this hack's own data/wild/probabilities.asm, unchanged from vanilla Red/Blue's; the four-slot Fishing Rod rates (roughly 40/30/20/11%) are this hack's own formula in engine/items/item_effects.asm, replacing the vanilla Old/Good/Super Rod tables the README says it removed.
Wild levelsFrom the game itselfEvery level in this source's wild tables is a fixed number.
Stats, abilities and movesetsFrom the game itselfBase stats, types, catch rate, base experience, growth rate, level-up learnset and evolution method for every real species in this source's base stats table.
TM and HM compatibilityFrom the game itselfAll 50 TMs and 5 HMs are the exact same roster as vanilla Red/Blue (TM01 Mega Punch through TM50 Substitute, HM01-05 Cut/Fly/Surf/Strength/Flash) — this hack didn't change which moves the TMs/HMs teach, only which of its many new and returning species can learn each one. Per-species compatibility comes straight from each species' own base-stats entry.
Where TMs are foundNot published by the creatorField and gift item placements live in this hack's map scripts across roughly 250 map files, which this converter did not trace in the time available. Not published rather than guessed. Kanto Expansion Pak is built on Red / Blue; the Red / Blue guide has the original game's TM locations.
Trainer and boss teamsFrom the game itselfMost of this hack's trainer parties (data/trainers/parties.asm) store only levels and species — no moveset. This guide fills in the exact rule Generation 1's own engine uses for a Pokemon with no stored moveset: the last four moves it would know from its own level-up learnset at its given level, computed from this hack's own data the same way the ROM computes it at battle time. Where the source does store an explicit override (data/trainers/special_moves.asm), that override is used instead. Seven gym leaders plus the Viridian Pre-Gym's Yujirou and the Fighting Dojo's Karate Master have a badge-scaled ladder of up to nine rosters each (data/trainers/scaled_parties.asm); which tier loads is decided by in-map script logic this converter does not trace, so only the earliest reachable tier and the final postgame tier are published for each, both flagged with a note that the real team scales with badge count in between. The rival is fought fifteen (first three visits), twenty and ten times across the game's three rival-fight checkpoints, once per possible starter — publishing all of them is the only way to show a real roster rather than guessing which starter a reader picked. 453 of 471 trainer battles resolved to a place by scanning every map's own object_event data for a matching trainer class and party number; the rest are marked "Location not found in this source" rather than guessed. A handful of (class, id) pairs turned up on two different maps at once (the same numbered Scientist, Hiker, Gentleman or Jr. Trainer placed in two spots, fighting the identical team) — this source gives no way to tell the two placements apart, so only the first map found is published as that battle's location.

Credits

Reading the tables

VersionThis guide is built from a checkout of the hack's own public repository (github.com/MementoMartha/kep-hack), pinned to the v1.3.1 tag (2025-01-07) plus a handful of small post-release commits that only touch Safari Zone rest-house furniture and a couple of sprites/graphics — nothing that changes a stat, an encounter, or a trainer's team. v1.3.1 is the newest tagged release as of this guide; the hack's own history runs from v1.0 (2024-01-07) through v1.3.1.

AbilitiesGeneration 1's engine has no ability system at all — the base stats table has no ability field, and this hack hasn't added one (no constants/ability_constants.asm exists, and nothing in the battle engine reads or writes an ability). Every Pokemon's `abil` is published as three empty slots rather than invented.

CategoryGen 1 has no per-move category field — a move's category comes from its type. This hack adds Steel, Dark and Fairy to the type chart, and its own constants/type_constants.asm settles which side of the Physical/Special line each one falls on: Steel sits in the Physical block (with Normal, Fighting, Flying, Poison, Ground, Rock, Bug and Ghost), Dark and Fairy sit in the Special block (with Fire, Water, Grass, Electric, Psychic, Ice and Dragon) — the exact boundary its own battle engine checks at battle time, not a rule borrowed from a later generation.

StatsGeneration 1 has one combined Special stat, not a separate Special Attack and Special Defense — every base-stats entry in this source has five stat bytes (HP/Attack/Defense/Speed/Special), commented that way in the source itself. This guide's six-stat table shows that one Special number in both the Sp. Atk and Sp. Def slots so the page renders; it is one real stat, not two.

ItemsThere are no held items in this hack — the README says so directly, and no trainer or wild Pokemon data has an item slot to read one from. `mons[].item` is null throughout battles.json.

TrainersMost of this hack's trainer parties (data/trainers/parties.asm) store only levels and species — no moveset. This guide fills in the exact rule Generation 1's own engine uses for a Pokemon with no stored moveset: the last four moves it would know from its own level-up learnset at its given level, computed from this hack's own data the same way the ROM computes it at battle time. Where the source does store an explicit override (data/trainers/special_moves.asm), that override is used instead. Seven gym leaders plus the Viridian Pre-Gym's Yujirou and the Fighting Dojo's Karate Master have a badge-scaled ladder of up to nine rosters each (data/trainers/scaled_parties.asm); which tier loads is decided by in-map script logic this converter does not trace, so only the earliest reachable tier and the final postgame tier are published for each, both flagged with a note that the real team scales with badge count in between. The rival is fought fifteen (first three visits), twenty and ten times across the game's three rival-fight checkpoints, once per possible starter — publishing all of them is the only way to show a real roster rather than guessing which starter a reader picked. 453 of 471 trainer battles resolved to a place by scanning every map's own object_event data for a matching trainer class and party number; the rest are marked "Location not found in this source" rather than guessed. A handful of (class, id) pairs turned up on two different maps at once (the same numbered Scientist, Hiker, Gentleman or Jr. Trainer placed in two spots, fighting the identical team) — this source gives no way to tell the two placements apart, so only the first map found is published as that battle's location.

ProgressThis hack deliberately opens up: after the third badge (Lt. Surge), the remaining four gyms (Erika, Koga, Sabrina, Blaine) can be challenged in any order — the README's own words are "some barriers to travel across the region have been removed". The stage list here reflects that: one combined checkpoint for all four, not an asserted order the hack itself doesn't enforce.

Regional_VariantsThis hack's own name table prints the same name for a species and its regional-variant counterpart (e.g. Articuno and Galarian Articuno both display as "ARTICUNO"); this guide tells them apart using that entry's own source comment (or, where a row carries none, the internal constant's own variant suffix), e.g. "Articuno (Galarian)", "Raticate (Alolan)".

TmsAll 50 TMs and 5 HMs are the exact same roster as vanilla Red/Blue (TM01 Mega Punch through TM50 Substitute, HM01-05 Cut/Fly/Surf/Strength/Flash) — this hack didn't change which moves the TMs/HMs teach, only which of its many new and returning species can learn each one.