data/claims/pokered-wild.yamlPokémon Red and Blue's wild encounters (pret/pokered)
Game: Pokémon Red and Blue. Concept: Random encounter.
Red and Blue have 57 lists of wild Pokémon, 570 rows in all: 55 for grass and cave floors, one map each, and two for water, one shared by Routes 19 and 20 and one for Route 21. Each list holds its encounter rate and ten slots, each a level and a species. Grass rates run from 8 (Viridian Forest) to 30 (the Safari Zone); both water lists are all Tentacool, at rate 5. The versions differ in 175 rows across 34 lists, always in the species, and in one row the level too: Pokémon Mansion B1F's slot 8 holds a level-42 Weezing in Red and a level-38 Magmar in Blue. A slot's chance is the same on every list. The species' names are as the game prints them. pokered-wild/wild-mons
data/wild/maps/Route1.asm#L1-L16Route1WildMons:
def_grass_wildmons 25 ; encounter rate
db 3, PIDGEY
db 3, RATTATA
db 3, RATTATA
db 2, RATTATA
db 2, PIDGEY
db 3, PIDGEY
db 3, PIDGEY
db 4, RATTATA
db 4, PIDGEY
db 5, PIDGEY
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route2.asm#L1-L25Route2WildMons:
def_grass_wildmons 25 ; encounter rate
db 3, RATTATA
db 3, PIDGEY
db 4, PIDGEY
db 4, RATTATA
db 5, PIDGEY
IF DEF(_RED)
db 3, WEEDLE
db 2, RATTATA
db 5, RATTATA
db 4, WEEDLE
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route3.asm#L1-L16Route3WildMons:
def_grass_wildmons 20 ; encounter rate
db 6, PIDGEY
db 5, SPEAROW
db 7, PIDGEY
db 6, SPEAROW
db 7, SPEAROW
db 8, PIDGEY
db 8, SPEAROW
db 3, JIGGLYPUFF
db 5, JIGGLYPUFF
db 7, JIGGLYPUFF
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route4.asm#L1-L27Route4WildMons:
def_grass_wildmons 20 ; encounter rate
db 10, RATTATA
db 10, SPEAROW
db 8, RATTATA
IF DEF(_RED)
db 6, EKANS
db 8, SPEAROW
db 10, EKANS
db 12, RATTATA
db 12, SPEAROW
db 8, EKANS
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route5.asm#L1-L30Route5WildMons:
def_grass_wildmons 15 ; encounter rate
IF DEF(_RED)
db 13, ODDISH
db 13, PIDGEY
db 15, PIDGEY
db 10, MANKEY
db 12, MANKEY
db 15, ODDISH
db 16, ODDISH
db 16, PIDGEY
db 14, MANKEY
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route6.asm#L1-L30Route6WildMons:
def_grass_wildmons 15 ; encounter rate
IF DEF(_RED)
db 13, ODDISH
db 13, PIDGEY
db 15, PIDGEY
db 10, MANKEY
db 12, MANKEY
db 15, ODDISH
db 16, ODDISH
db 16, PIDGEY
db 14, MANKEY
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route7.asm#L1-L29Route7WildMons:
def_grass_wildmons 15 ; encounter rate
db 19, PIDGEY
IF DEF(_RED)
db 19, ODDISH
db 17, MANKEY
db 22, ODDISH
db 22, PIDGEY
db 18, MANKEY
db 18, GROWLITHE
db 20, GROWLITHE
db 19, MANKEY
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route8.asm#L1-L29Route8WildMons:
def_grass_wildmons 15 ; encounter rate
db 18, PIDGEY
IF DEF(_RED)
db 18, MANKEY
db 17, EKANS
db 16, GROWLITHE
db 20, PIDGEY
db 20, MANKEY
db 19, EKANS
db 17, GROWLITHE
db 15, GROWLITHE
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route9.asm#L1-L27Route9WildMons:
def_grass_wildmons 15 ; encounter rate
db 16, RATTATA
db 16, SPEAROW
db 14, RATTATA
IF DEF(_RED)
db 11, EKANS
db 13, SPEAROW
db 15, EKANS
db 17, RATTATA
db 17, SPEAROW
db 13, EKANS
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route10.asm#L1-L27Route10WildMons:
def_grass_wildmons 15 ; encounter rate
db 16, VOLTORB
db 16, SPEAROW
db 14, VOLTORB
IF DEF(_RED)
db 11, EKANS
db 13, SPEAROW
db 15, EKANS
db 17, VOLTORB
db 17, SPEAROW
db 13, EKANS
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route11.asm#L1-L27Route11WildMons:
def_grass_wildmons 15 ; encounter rate
IF DEF(_RED)
db 14, EKANS
db 15, SPEAROW
db 12, EKANS
db 9, DROWZEE
db 13, SPEAROW
db 13, DROWZEE
db 15, EKANS
ENDC
IF DEF(_BLUE)
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route12.asm#L1-L30Route12WildMons:
def_grass_wildmons 15 ; encounter rate
IF DEF(_RED)
db 24, ODDISH
db 25, PIDGEY
db 23, PIDGEY
db 24, VENONAT
db 22, ODDISH
db 26, VENONAT
db 26, ODDISH
db 27, PIDGEY
db 28, GLOOM
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route13.asm#L1-L30Route13WildMons:
def_grass_wildmons 20 ; encounter rate
IF DEF(_RED)
db 24, ODDISH
db 25, PIDGEY
db 27, PIDGEY
db 24, VENONAT
db 22, ODDISH
db 26, VENONAT
db 26, ODDISH
db 25, DITTO
db 28, GLOOM
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route14.asm#L1-L28Route14WildMons:
def_grass_wildmons 15 ; encounter rate
IF DEF(_RED)
db 24, ODDISH
db 26, PIDGEY
db 23, DITTO
db 24, VENONAT
db 22, ODDISH
db 26, VENONAT
db 26, ODDISH
db 30, GLOOM
ENDC
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route15.asm#L1-L28Route15WildMons:
def_grass_wildmons 15 ; encounter rate
IF DEF(_RED)
db 24, ODDISH
db 26, DITTO
db 23, PIDGEY
db 26, VENONAT
db 22, ODDISH
db 28, VENONAT
db 26, ODDISH
db 30, GLOOM
ENDC
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route16.asm#L1-L16Route16WildMons:
def_grass_wildmons 25 ; encounter rate
db 20, SPEAROW
db 22, SPEAROW
db 18, RATTATA
db 20, DODUO
db 20, RATTATA
db 18, DODUO
db 22, DODUO
db 22, RATTATA
db 23, RATICATE
db 25, RATICATE
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route17.asm#L1-L16Route17WildMons:
def_grass_wildmons 25 ; encounter rate
db 20, SPEAROW
db 22, SPEAROW
db 25, RATICATE
db 24, DODUO
db 27, RATICATE
db 26, DODUO
db 28, DODUO
db 29, RATICATE
db 25, FEAROW
db 27, FEAROW
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route18.asm#L1-L16Route18WildMons:
def_grass_wildmons 25 ; encounter rate
db 20, SPEAROW
db 22, SPEAROW
db 25, RATICATE
db 24, DODUO
db 25, FEAROW
db 26, DODUO
db 28, DODUO
db 29, RATICATE
db 27, FEAROW
db 29, FEAROW
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/SeaRoutes.asm#L1-L16SeaRoutesWildMons:
def_grass_wildmons 0 ; encounter rate
end_grass_wildmons
def_water_wildmons 5 ; encounter rate
db 5, TENTACOOL
db 10, TENTACOOL
db 15, TENTACOOL
db 5, TENTACOOL
db 10, TENTACOOL
db 15, TENTACOOL
db 20, TENTACOOL
db 30, TENTACOOL
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route21.asm#L1-L26Route21WildMons:
def_grass_wildmons 25 ; encounter rate
db 21, RATTATA
db 23, PIDGEY
db 30, RATICATE
db 23, RATTATA
db 21, PIDGEY
db 30, PIDGEOTTO
db 32, PIDGEOTTO
db 28, TANGELA
db 30, TANGELA
db 32, TANGELA
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route22.asm#L1-L29Route22WildMons:
def_grass_wildmons 25 ; encounter rate
db 3, RATTATA
IF DEF(_RED)
db 3, NIDORAN_M
db 4, RATTATA
db 4, NIDORAN_M
db 2, RATTATA
db 2, NIDORAN_M
db 3, SPEAROW
db 5, SPEAROW
db 3, NIDORAN_F
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route23.asm#L1-L26Route23WildMons:
def_grass_wildmons 10 ; encounter rate
IF DEF(_RED)
db 26, EKANS
ENDC
IF DEF(_BLUE)
db 26, SANDSHREW
ENDC
db 33, DITTO
db 26, SPEAROW
db 38, FEAROW
db 38, DITTO
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route24.asm#L1-L27Route24WildMons:
def_grass_wildmons 25 ; encounter rate
IF DEF(_RED)
db 7, WEEDLE
db 8, KAKUNA
db 12, PIDGEY
db 12, ODDISH
db 13, ODDISH
db 10, ABRA
db 14, ODDISH
ENDC
IF DEF(_BLUE)
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/Route25.asm#L1-L30Route25WildMons:
def_grass_wildmons 15 ; encounter rate
IF DEF(_RED)
db 8, WEEDLE
db 9, KAKUNA
db 13, PIDGEY
db 12, ODDISH
db 13, ODDISH
db 12, ABRA
db 14, ODDISH
db 10, ABRA
db 7, METAPOD
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/ViridianForest.asm#L1-L28ViridianForestWildMons:
def_grass_wildmons 8 ; encounter rate
IF DEF(_RED)
db 4, WEEDLE
db 5, KAKUNA
db 3, WEEDLE
db 5, WEEDLE
db 4, KAKUNA
db 6, KAKUNA
db 4, METAPOD
db 3, CATERPIE
ENDC
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/MtMoon1F.asm#L1-L16MtMoon1FWildMons:
def_grass_wildmons 10 ; encounter rate
db 8, ZUBAT
db 7, ZUBAT
db 9, ZUBAT
db 8, GEODUDE
db 6, ZUBAT
db 10, ZUBAT
db 10, GEODUDE
db 8, PARAS
db 11, ZUBAT
db 8, CLEFAIRY
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/MtMoonB1F.asm#L1-L16MtMoonB1FWildMons:
def_grass_wildmons 10 ; encounter rate
db 8, ZUBAT
db 7, ZUBAT
db 7, GEODUDE
db 8, GEODUDE
db 9, ZUBAT
db 10, PARAS
db 10, ZUBAT
db 11, ZUBAT
db 9, CLEFAIRY
db 9, GEODUDE
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/MtMoonB2F.asm#L1-L16MtMoonB2FWildMons:
def_grass_wildmons 10 ; encounter rate
db 9, ZUBAT
db 9, GEODUDE
db 10, ZUBAT
db 10, GEODUDE
db 11, ZUBAT
db 10, PARAS
db 12, PARAS
db 10, CLEFAIRY
db 12, ZUBAT
db 12, CLEFAIRY
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/RockTunnel1F.asm#L1-L16RockTunnel1FWildMons:
def_grass_wildmons 15 ; encounter rate
db 16, ZUBAT
db 17, ZUBAT
db 17, GEODUDE
db 15, MACHOP
db 16, GEODUDE
db 18, ZUBAT
db 15, ZUBAT
db 17, MACHOP
db 13, ONIX
db 15, ONIX
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/PowerPlant.asm#L1-L22PowerPlantWildMons:
def_grass_wildmons 10 ; encounter rate
db 21, VOLTORB
db 21, MAGNEMITE
db 20, PIKACHU
db 24, PIKACHU
db 23, MAGNEMITE
db 23, VOLTORB
db 32, MAGNETON
db 35, MAGNETON
IF DEF(_RED)
db 33, ELECTABUZZ
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/VictoryRoad1F.asm#L1-L16VictoryRoad1FWildMons:
def_grass_wildmons 15 ; encounter rate
db 24, MACHOP
db 26, GEODUDE
db 22, ZUBAT
db 36, ONIX
db 39, ONIX
db 42, ONIX
db 41, GRAVELER
db 41, GOLBAT
db 42, MACHOKE
db 43, MAROWAK
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/PokemonTower1F.asm#L1-L6PokemonTower1FWildMons:
def_grass_wildmons 0 ; encounter rate
end_grass_wildmons
def_water_wildmons 0 ; encounter rate
end_water_wildmonspokered: disassembly of Pokémon Red and Blue · data/wild/maps/PokemonTower2F.asm#L1-L6PokemonTower2FWildMons:
def_grass_wildmons 0 ; encounter rate
end_grass_wildmons
def_water_wildmons 0 ; encounter rate
end_water_wildmonspokered: disassembly of Pokémon Red and Blue · data/wild/maps/PokemonTower3F.asm#L1-L16PokemonTower3FWildMons:
def_grass_wildmons 10 ; encounter rate
db 20, GASTLY
db 21, GASTLY
db 22, GASTLY
db 23, GASTLY
db 19, GASTLY
db 18, GASTLY
db 24, GASTLY
db 20, CUBONE
db 22, CUBONE
db 25, HAUNTER
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/PokemonTower4F.asm#L1-L16PokemonTower4FWildMons:
def_grass_wildmons 10 ; encounter rate
db 20, GASTLY
db 21, GASTLY
db 22, GASTLY
db 23, GASTLY
db 19, GASTLY
db 18, GASTLY
db 25, HAUNTER
db 20, CUBONE
db 22, CUBONE
db 24, GASTLY
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/PokemonTower5F.asm#L1-L16PokemonTower5FWildMons:
def_grass_wildmons 10 ; encounter rate
db 20, GASTLY
db 21, GASTLY
db 22, GASTLY
db 23, GASTLY
db 19, GASTLY
db 18, GASTLY
db 25, HAUNTER
db 20, CUBONE
db 22, CUBONE
db 24, GASTLY
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/PokemonTower6F.asm#L1-L16PokemonTower6FWildMons:
def_grass_wildmons 15 ; encounter rate
db 21, GASTLY
db 22, GASTLY
db 23, GASTLY
db 24, GASTLY
db 20, GASTLY
db 19, GASTLY
db 26, HAUNTER
db 22, CUBONE
db 24, CUBONE
db 28, HAUNTER
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/PokemonTower7F.asm#L1-L16PokemonTower7FWildMons:
def_grass_wildmons 15 ; encounter rate
db 21, GASTLY
db 22, GASTLY
db 23, GASTLY
db 24, GASTLY
db 20, GASTLY
db 28, HAUNTER
db 22, CUBONE
db 24, CUBONE
db 28, HAUNTER
db 30, HAUNTER
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/SeafoamIslandsB1F.asm#L1-L30SeafoamIslandsB1FWildMons:
def_grass_wildmons 10 ; encounter rate
IF DEF(_RED)
db 30, STARYU
db 30, HORSEA
db 32, SHELLDER
db 32, HORSEA
db 28, SLOWPOKE
db 30, SEEL
db 30, SLOWPOKE
db 28, SEEL
db 38, DEWGONG
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/SeafoamIslandsB2F.asm#L1-L29SeafoamIslandsB2FWildMons:
def_grass_wildmons 10 ; encounter rate
db 30, SEEL
IF DEF(_RED)
db 30, SLOWPOKE
db 32, SEEL
db 32, SLOWPOKE
db 28, HORSEA
db 30, STARYU
db 30, HORSEA
db 28, SHELLDER
db 30, GOLBAT
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/SeafoamIslandsB3F.asm#L1-L29SeafoamIslandsB3FWildMons:
def_grass_wildmons 10 ; encounter rate
IF DEF(_RED)
db 31, SLOWPOKE
db 31, SEEL
db 33, SLOWPOKE
db 33, SEEL
db 29, HORSEA
db 31, SHELLDER
db 31, HORSEA
db 29, SHELLDER
db 39, SEADRA
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/SeafoamIslandsB4F.asm#L1-L29SeafoamIslandsB4FWildMons:
def_grass_wildmons 10 ; encounter rate
IF DEF(_RED)
db 31, HORSEA
db 31, SHELLDER
db 33, HORSEA
db 33, SHELLDER
db 29, SLOWPOKE
db 31, SEEL
db 31, SLOWPOKE
db 29, SEEL
db 39, SLOWBRO
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/PokemonMansion1F.asm#L1-L30PokemonMansion1FWildMons:
def_grass_wildmons 10 ; encounter rate
IF DEF(_RED)
db 32, KOFFING
db 30, KOFFING
db 34, PONYTA
db 30, PONYTA
db 34, GROWLITHE
db 32, PONYTA
db 30, GRIMER
db 28, PONYTA
db 37, WEEZING
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/SeafoamIslands1F.asm#L1-L29SeafoamIslands1FWildMons:
def_grass_wildmons 15 ; encounter rate
db 30, SEEL
IF DEF(_RED)
db 30, SLOWPOKE
db 30, SHELLDER
db 30, HORSEA
db 28, HORSEA
db 21, ZUBAT
db 29, GOLBAT
db 28, PSYDUCK
db 28, SHELLDER
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/VictoryRoad2F.asm#L1-L16VictoryRoad2FWildMons:
def_grass_wildmons 10 ; encounter rate
db 22, MACHOP
db 24, GEODUDE
db 26, ZUBAT
db 36, ONIX
db 39, ONIX
db 42, ONIX
db 41, MACHOKE
db 40, GOLBAT
db 40, MAROWAK
db 43, GRAVELER
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/DiglettsCave.asm#L1-L16DiglettsCaveWildMons:
def_grass_wildmons 20 ; encounter rate
db 18, DIGLETT
db 19, DIGLETT
db 17, DIGLETT
db 20, DIGLETT
db 16, DIGLETT
db 15, DIGLETT
db 21, DIGLETT
db 22, DIGLETT
db 29, DUGTRIO
db 31, DUGTRIO
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/VictoryRoad3F.asm#L1-L16VictoryRoad3FWildMons:
def_grass_wildmons 15 ; encounter rate
db 24, MACHOP
db 26, GEODUDE
db 22, ZUBAT
db 42, ONIX
db 40, VENOMOTH
db 45, ONIX
db 43, GRAVELER
db 41, GOLBAT
db 42, MACHOKE
db 45, MACHOKE
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/PokemonMansion2F.asm#L1-L30PokemonMansion2FWildMons:
def_grass_wildmons 10 ; encounter rate
IF DEF(_RED)
db 32, GROWLITHE
db 34, KOFFING
db 34, KOFFING
db 30, PONYTA
db 30, KOFFING
db 32, PONYTA
db 30, GRIMER
db 28, PONYTA
db 39, WEEZING
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/PokemonMansion3F.asm#L1-L30PokemonMansion3FWildMons:
def_grass_wildmons 10 ; encounter rate
IF DEF(_RED)
db 31, KOFFING
db 33, GROWLITHE
db 35, KOFFING
db 32, PONYTA
db 34, PONYTA
db 40, WEEZING
db 34, GRIMER
db 38, WEEZING
db 36, PONYTA
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/PokemonMansionB1F.asm#L1-L30PokemonMansionB1FWildMons:
def_grass_wildmons 10 ; encounter rate
IF DEF(_RED)
db 33, KOFFING
db 31, KOFFING
db 35, GROWLITHE
db 32, PONYTA
db 31, KOFFING
db 40, WEEZING
db 34, PONYTA
db 35, GRIMER
db 42, WEEZING
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/SafariZoneEast.asm#L1-L30SafariZoneEastWildMons:
def_grass_wildmons 30 ; encounter rate
IF DEF(_RED)
db 24, NIDORAN_M
db 26, DODUO
db 22, PARAS
db 25, EXEGGCUTE
db 33, NIDORINO
db 23, EXEGGCUTE
db 24, NIDORAN_F
db 25, PARASECT
db 25, KANGASKHAN
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/SafariZoneNorth.asm#L1-L27SafariZoneNorthWildMons:
def_grass_wildmons 30 ; encounter rate
IF DEF(_RED)
db 22, NIDORAN_M
db 26, RHYHORN
db 23, PARAS
db 25, EXEGGCUTE
db 30, NIDORINO
db 27, EXEGGCUTE
db 30, NIDORINA
ENDC
IF DEF(_BLUE)
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/SafariZoneWest.asm#L1-L27SafariZoneWestWildMons:
def_grass_wildmons 30 ; encounter rate
IF DEF(_RED)
db 25, NIDORAN_M
db 26, DODUO
db 23, VENONAT
db 24, EXEGGCUTE
db 33, NIDORINO
db 26, EXEGGCUTE
db 25, NIDORAN_F
ENDC
IF DEF(_BLUE)
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/SafariZoneCenter.asm#L1-L29SafariZoneCenterWildMons:
def_grass_wildmons 30 ; encounter rate
IF DEF(_RED)
db 22, NIDORAN_M
db 25, RHYHORN
db 22, VENONAT
db 24, EXEGGCUTE
db 31, NIDORINO
db 25, EXEGGCUTE
db 31, NIDORINA
db 30, PARASECT
db 23, SCYTHER
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/CeruleanCave2F.asm#L1-L16CeruleanCave2FWildMons:
def_grass_wildmons 15 ; encounter rate
db 51, DODRIO
db 51, VENOMOTH
db 51, KADABRA
db 52, RHYDON
db 52, MAROWAK
db 52, ELECTRODE
db 56, CHANSEY
db 54, WIGGLYTUFF
db 55, DITTO
db 60, DITTO
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/CeruleanCaveB1F.asm#L1-L21CeruleanCaveB1FWildMons:
def_grass_wildmons 25 ; encounter rate
db 55, RHYDON
db 55, MAROWAK
db 55, ELECTRODE
db 64, CHANSEY
db 64, PARASECT
db 64, RAICHU
IF DEF(_RED)
db 57, ARBOK
ENDC
IF DEF(_BLUE)
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/CeruleanCave1F.asm#L1-L21CeruleanCave1FWildMons:
def_grass_wildmons 10 ; encounter rate
db 46, GOLBAT
db 46, HYPNO
db 46, MAGNETON
db 49, DODRIO
db 49, VENOMOTH
IF DEF(_RED)
db 52, ARBOK
ENDC
IF DEF(_BLUE)
db 52, SANDSLASH
…pokered: disassembly of Pokémon Red and Blue · data/wild/maps/RockTunnelB1F.asm#L1-L16RockTunnelB1FWildMons:
def_grass_wildmons 15 ; encounter rate
db 16, ZUBAT
db 17, ZUBAT
db 17, GEODUDE
db 15, MACHOP
db 16, GEODUDE
db 18, ZUBAT
db 17, MACHOP
db 17, ONIX
db 13, ONIX
db 18, GEODUDE
…pokered: disassembly of Pokémon Red and Blue · engine/overworld/wild_mons.asm#L1-L31LoadWildData::
ld hl, WildDataPointers
ld a, [wCurMap]
; get wild data for current map
ld c, a
ld b, 0
add hl, bc
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a ; hl now points to wild data for current map
ld a, [hli]
…Our readingfind the map's entry in the pointer table1–12grass rate ← the list's first byte13–14rate 0: skip to the water part15–16else copy the 20 bytes after it to the grass list17–23water rate ← the next byte25–26rate 0: done27–28else copy the 20 bytes after it to the water list29–31pokered: disassembly of Pokémon Red and Blue · data/wild/grass_water.asm#L254-L263; wild pokemon data is divided into two parts.
; first part: pokemon found in grass
; second part: pokemon found while surfing
; each part goes as follows:
; if first byte == 0, then
; no wild pokemon on this map
; if first byte != 0, then
; first byte is encounter rate
; followed by 20 bytes:
; level, species (ten times)pokered: disassembly of Pokémon Red and Blue · data/wild/grass_water.asm#L33-L34dw SeaRoutesWildMons ; ROUTE_19
dw SeaRoutesWildMons ; ROUTE_20A second random byte, which the generator updates along with the first, then picks one of the map's 10 slots, which have 51, 51, 39, 25, 25, 25, 13, 13, 11, and 3 chances in 256. CodeChecked by claude, 2026-10-28 — parsed every list the pointer table names from the map files at the pin, both versions' branches, and counted the rows; read the loader, which copies a list only when its rate isn't 0Checked by a second AI model, 2026-10-28.The table's rows run in map order, a list's ten slots together, and a slot's chance comes from the shared slot table. Pokémon Tower 1F and 2F point to lists with a rate of 0 and no slots, and every other map to an empty list. The No. columns give each species' Pokédex number.
Cited by: Wild encounters
The 57 wild lists, one row each, in the order of the full table, with the place a step reads each from and its rate (computed from the table): list n's slots are the table's rows 10n to 10n + 9. A list that every step of an indoor map reads is named for the map; one that only grass or water reads is named for that. pokered-wild/maps
In caves, Pokémon Tower, the Power Plant, and Pokémon Mansion every step off water can start a wild battle; on routes, in Viridian Forest, and in the Safari Zone only a step in grass or on water can. A turn rolls as a step does: pressing a direction other than the last one walked, from standing, first turns the player in place, and the same check runs on the tile the player stands on, before any step. The tile decides: the tileset's grass tile rolls against the map's grass rate and a water tile ($14) against its water rate. Any other tile rolls against the grass rate on an indoor map, by map number, unless the map uses the forest tileset, as Viridian Forest and the four Safari Zone areas do; outdoors it doesn't roll. Only the overworld, forest, and plateau tilesets have a grass tile. pokered-wild/step-tiles
engine/battle/wild_encounters.asm#L26-L47; determine if wild pokemon can appear in the half-block we're standing in
; is the bottom right tile (9,9) of the half-block we're standing in a grass/water tile?
hlcoord 9, 9
ld c, [hl]
ld a, [wGrassTile]
cp c
ld a, [wGrassRate]
jr z, .CanEncounter
ld a, $14 ; in all tilesets with a water tile, this is its id
cp c
ld a, [wWaterRate]
jr z, .CanEncounter
…Our readingtile ← the half-block's bottom-right tile (by the comment)26–29the tileset's grass tile: rate ← the grass rate30–33tile $14, water (by the comment): rate ← the water rate34–37an outdoor map (by the comment): no encounter41–43the forest tileset: no encounter44–46otherwise: rate ← the grass rate47pokered: disassembly of Pokémon Red and Blue · data/tilesets/tileset_headers.asm#L1-L36MACRO tileset
db BANK(\1_GFX)
dw \1_Block, \1_GFX, \1_Coll
db \2, \3, \4 ; counter tiles
db \5 ; grass tile
db \6 ; animations (TILEANIM_* value)
ENDM
Tilesets:
table_width 12
; name, 3 counter tiles, grass tile, animations
tileset Overworld, -1, -1, -1, $52, TILEANIM_WATER_FLOWER
tileset RedsHouse1, -1, -1, -1, -1, TILEANIM_NONE
…pokered: disassembly of Pokémon Red and Blue · constants/map_constants.asm#L66-L69map_const ROUTE_25, 30, 9 ; $24
DEF FIRST_INDOOR_MAP EQU const_value
map_const REDS_HOUSE_1F, 4, 4 ; $25pokered: disassembly of Pokémon Red and Blue · data/maps/headers/ViridianForest.asm#L1map_header ViridianForest, VIRIDIAN_FOREST, FORESTpokered: disassembly of Pokémon Red and Blue · data/maps/headers/MtMoon1F.asm#L1map_header MtMoon1F, MT_MOON_1F, CAVERNpokered: disassembly of Pokémon Red and Blue · data/maps/headers/MtMoonB1F.asm#L1map_header MtMoonB1F, MT_MOON_B1F, CAVERNpokered: disassembly of Pokémon Red and Blue · data/maps/headers/MtMoonB2F.asm#L1map_header MtMoonB2F, MT_MOON_B2F, CAVERNpokered: disassembly of Pokémon Red and Blue · data/maps/headers/RockTunnel1F.asm#L1map_header RockTunnel1F, ROCK_TUNNEL_1F, CAVERNpokered: disassembly of Pokémon Red and Blue · data/maps/headers/PowerPlant.asm#L1map_header PowerPlant, POWER_PLANT, FACILITYpokered: disassembly of Pokémon Red and Blue · data/maps/headers/VictoryRoad1F.asm#L1map_header VictoryRoad1F, VICTORY_ROAD_1F, CAVERNpokered: disassembly of Pokémon Red and Blue · data/maps/headers/PokemonTower3F.asm#L1map_header PokemonTower3F, POKEMON_TOWER_3F, CEMETERYpokered: disassembly of Pokémon Red and Blue · data/maps/headers/PokemonTower4F.asm#L1map_header PokemonTower4F, POKEMON_TOWER_4F, CEMETERYpokered: disassembly of Pokémon Red and Blue · data/maps/headers/PokemonTower5F.asm#L1map_header PokemonTower5F, POKEMON_TOWER_5F, CEMETERYpokered: disassembly of Pokémon Red and Blue · data/maps/headers/PokemonTower6F.asm#L1map_header PokemonTower6F, POKEMON_TOWER_6F, CEMETERYpokered: disassembly of Pokémon Red and Blue · data/maps/headers/PokemonTower7F.asm#L1map_header PokemonTower7F, POKEMON_TOWER_7F, CEMETERYpokered: disassembly of Pokémon Red and Blue · data/maps/headers/SeafoamIslandsB1F.asm#L1map_header SeafoamIslandsB1F, SEAFOAM_ISLANDS_B1F, CAVERNpokered: disassembly of Pokémon Red and Blue · data/maps/headers/SeafoamIslandsB2F.asm#L1map_header SeafoamIslandsB2F, SEAFOAM_ISLANDS_B2F, CAVERNpokered: disassembly of Pokémon Red and Blue · data/maps/headers/SeafoamIslandsB3F.asm#L1map_header SeafoamIslandsB3F, SEAFOAM_ISLANDS_B3F, CAVERNpokered: disassembly of Pokémon Red and Blue · data/maps/headers/SeafoamIslandsB4F.asm#L1map_header SeafoamIslandsB4F, SEAFOAM_ISLANDS_B4F, CAVERNpokered: disassembly of Pokémon Red and Blue · data/maps/headers/PokemonMansion1F.asm#L1map_header PokemonMansion1F, POKEMON_MANSION_1F, FACILITYpokered: disassembly of Pokémon Red and Blue · data/maps/headers/SeafoamIslands1F.asm#L1map_header SeafoamIslands1F, SEAFOAM_ISLANDS_1F, CAVERNpokered: disassembly of Pokémon Red and Blue · data/maps/headers/VictoryRoad2F.asm#L1map_header VictoryRoad2F, VICTORY_ROAD_2F, CAVERNpokered: disassembly of Pokémon Red and Blue · data/maps/headers/DiglettsCave.asm#L1map_header DiglettsCave, DIGLETTS_CAVE, CAVERNpokered: disassembly of Pokémon Red and Blue · data/maps/headers/VictoryRoad3F.asm#L1map_header VictoryRoad3F, VICTORY_ROAD_3F, CAVERNpokered: disassembly of Pokémon Red and Blue · data/maps/headers/PokemonMansion2F.asm#L1map_header PokemonMansion2F, POKEMON_MANSION_2F, FACILITYpokered: disassembly of Pokémon Red and Blue · data/maps/headers/PokemonMansion3F.asm#L1map_header PokemonMansion3F, POKEMON_MANSION_3F, FACILITYpokered: disassembly of Pokémon Red and Blue · data/maps/headers/PokemonMansionB1F.asm#L1map_header PokemonMansionB1F, POKEMON_MANSION_B1F, FACILITYpokered: disassembly of Pokémon Red and Blue · data/maps/headers/SafariZoneEast.asm#L1map_header SafariZoneEast, SAFARI_ZONE_EAST, FORESTpokered: disassembly of Pokémon Red and Blue · data/maps/headers/SafariZoneNorth.asm#L1map_header SafariZoneNorth, SAFARI_ZONE_NORTH, FORESTpokered: disassembly of Pokémon Red and Blue · data/maps/headers/SafariZoneWest.asm#L1map_header SafariZoneWest, SAFARI_ZONE_WEST, FORESTpokered: disassembly of Pokémon Red and Blue · data/maps/headers/SafariZoneCenter.asm#L1map_header SafariZoneCenter, SAFARI_ZONE_CENTER, FORESTpokered: disassembly of Pokémon Red and Blue · data/maps/headers/CeruleanCave2F.asm#L1map_header CeruleanCave2F, CERULEAN_CAVE_2F, CAVERNpokered: disassembly of Pokémon Red and Blue · data/maps/headers/CeruleanCaveB1F.asm#L1map_header CeruleanCaveB1F, CERULEAN_CAVE_B1F, CAVERNpokered: disassembly of Pokémon Red and Blue · data/maps/headers/CeruleanCave1F.asm#L1map_header CeruleanCave1F, CERULEAN_CAVE_1F, CAVERNpokered: disassembly of Pokémon Red and Blue · data/maps/headers/RockTunnelB1F.asm#L1map_header RockTunnelB1F, ROCK_TUNNEL_B1F, CAVERNpokered: disassembly of Pokémon Red and Blue · home/overworld.asm#L132-L145.noDirectionButtonsPressed
ld hl, wMiscFlags
res BIT_TURNING, [hl]
call UpdateSprites
ld a, 1
ld [wCheckFor180DegreeTurn], a
ld a, [wPlayerMovingDirection] ; the direction that was pressed last time
and a
jp z, OverworldLoop
; if a direction was pressed last time
ld [wPlayerLastStopDirection], a ; save the last direction
xor a
…Our readingno direction held: turn check ← 1136–137 a direction was held: last direction ← it138–142 held direction ← none143–144pokered: disassembly of Pokémon Red and Blue · home/overworld.asm#L179-L234.handleDirectionButtonPress
ld [wPlayerDirection], a ; new direction
ld a, [wStatusFlags5]
bit BIT_SCRIPTED_MOVEMENT_STATE, a
jr nz, .noDirectionChange ; ignore direction changes if we are
ld a, [wCheckFor180DegreeTurn]
and a
jr z, .noDirectionChange
ld a, [wPlayerDirection] ; new direction
ld b, a
ld a, [wPlayerLastStopDirection] ; old direction
cp b
…Our readinga direction pressed: new direction ← it180scripted movement: no turn, walk181–183turn check 0 (already moving): no turn, walk184–186the last direction again: no turn, walk187–191a reversal: face a side first (by the comment)192–223turn check − 1, to 0; face the new direction224–231try a battle with no step (NewBattle, its check)232a battle happened: the after-battle handling233else back to the loop234Checked by claude, 2026-10-28 — read the tile tests, the tileset table's grass column, the first indoor map's number (every map with a list but the routes comes after it), and the tileset of every indoor map with a list Also read the overworld loop's turn in place, which calls the battle check without a step (overworld.asm L232).Revised after a check by a second AI model, 2026-10-28.Cited by: Random encounter, Wild encounters
On a shore half-block whose water lies only at its bottom right, such as Cinnabar Island's east coast (by the comment), a step rolls at the water rate but meets a Pokémon from the grass list. The rate comes from the half-block's bottom-right tile and the list from its bottom-left tile: the water list only when that tile is water ($14) as well, the grass list otherwise. pokered-wild/left-shore
engine/battle/wild_encounters.asm#L63-L73.gotEncounterSlot
; determine which wild pokemon (grass or water) can appear in the half-block we're standing in
ld c, [hl]
ld hl, wGrassMons
lda_coord 8, 9
cp $14 ; is the bottom left tile (8,9) of the half-block we're standing in a water tile?
jr nz, .gotWildEncounterType ; else, it's treated as a grass tile by default
ld hl, wWaterMons
; since the bottom right tile of a "left shore" half-block is $14 but the bottom left tile is not,
; "left shore" half-blocks (such as the one in the east coast of Cinnabar) load grass encounters.
.gotWildEncounterTypeOur readingthe slot's offset into the list (from the slot table)65list ← the grass list66the bottom-left tile is $14: list ← the water list67–70In caves, Pokémon Tower, the Power Plant, and Pokémon Mansion every step off water can start a wild battle; on routes, in Viridian Forest, and in the Safari Zone only a step in grass or on water can. A turn rolls as a step does: pressing a direction other than the last one walked, from standing, first turns the player in place, and the same check runs on the tile the player stands on, before any step. The tile decides: the tileset's grass tile rolls against the map's grass rate and a water tile ($14) against its water rate. Any other tile rolls against the grass rate on an indoor map, by map number, unless the map uses the forest tileset, as Viridian Forest and the four Safari Zone areas do; outdoors it doesn't roll. Only the overworld, forest, and plateau tilesets have a grass tile. CodeChecked by claude, 2026-10-28 — read the list choice after the slot pick against the rate's tile testChecked by a second AI model, 2026-10-28.Cited by: Wild encounters
Surfing on open water meets only Tentacool, of levels 5 to 40, on Routes 19, 20, and 21: theirs are the only water lists. Every other map loads a water rate of 0, which no random byte is below, the water in Seafoam Islands and Cerulean Cave included; the water tile is $14 in every tileset that has water (by the comment). A left-shore half-block rolls at the water rate but draws from the grass list. pokered-wild/surfing
engine/overworld/wild_mons.asm#L24-L28.NoGrassData
ld a, [hli]
ld [wWaterRate], a
and a
ret z ; if no water data, we're doneOur readingwater rate ← the list's water byte25–26rate 0: no water list27–28pokered: disassembly of Pokémon Red and Blue · engine/battle/wild_encounters.asm#L34-L37ld a, $14 ; in all tilesets with a water tile, this is its id
cp c
ld a, [wWaterRate]
jr z, .CanEncounterOur readingtile $14 (water, by the comment): rate ← the water rate34–37pokered: disassembly of Pokémon Red and Blue · engine/battle/wild_encounters.asm#L48-L53.CanEncounter
; compare encounter chance with a random number to determine if there will be an encounter
ld b, a
ldh a, [hRandomAdd]
cp b
jr nc, .CantEncounter2Our readinga random byte not below the rate: no encounter50–53On a shore half-block whose water lies only at its bottom right, such as Cinnabar Island's east coast (by the comment), a step rolls at the water rate but meets a Pokémon from the grass list. The rate comes from the half-block's bottom-right tile and the list from its bottom-left tile: the water list only when that tile is water ($14) as well, the grass list otherwise. CodeChecked by claude, 2026-10-28 — counted the water lists in the full table; read the loader's water byte and the rate testChecked by a second AI model, 2026-10-28.Cited by: Wild encounters
The slot byte picks slot 0 for 0–50, 1 for 51–101, 2 for 102–140, 3 for 141–165, 4 for 166–190, 5 for 191–215, 6 for 216–228, 7 for 229–241, 8 for 242–252, and 9 for 253–255. The slot table holds each slot's running total of chances less 1, and the byte takes the first slot whose entry it doesn't pass; the step then reads that slot's level and species from the list. pokered-wild/slot-pick
Value: up to 50, 101, 140, 165, 190, 215, 228, 241, 252, 255
Codepokered: disassembly of Pokémon Red and Blue ·data/wild/probabilities.asm#L1-L9DEF wild_chance_slot = 0
DEF wild_chance_total = 0
MACRO wild_chance
DEF wild_chance_total += \1
db wild_chance_total - 1
db wild_chance_slot * 2
DEF wild_chance_slot += 1
ENDMOur readingentry ← the running total, less 15–6then the slot's offset, 2 bytes a slot7–8pokered: disassembly of Pokémon Red and Blue · data/wild/probabilities.asm#L17-L26wild_chance 51 ; 51/256 = 19.9% chance of slot 0
wild_chance 51 ; 51/256 = 19.9% chance of slot 1
wild_chance 39 ; 39/256 = 15.2% chance of slot 2
wild_chance 25 ; 25/256 = 9.8% chance of slot 3
wild_chance 25 ; 25/256 = 9.8% chance of slot 4
wild_chance 25 ; 25/256 = 9.8% chance of slot 5
wild_chance 13 ; 13/256 = 5.1% chance of slot 6
wild_chance 13 ; 13/256 = 5.1% chance of slot 7
wild_chance 11 ; 11/256 = 4.3% chance of slot 8
wild_chance 3 ; 3/256 = 1.2% chance of slot 9pokered: disassembly of Pokémon Red and Blue · engine/battle/wild_encounters.asm#L54-L62ldh a, [hRandomSub]
ld b, a
ld hl, WildMonEncounterSlotChances
.determineEncounterSlot
ld a, [hli]
cp b
jr nc, .gotEncounterSlot
inc hl
jr .determineEncounterSlotOur readingb ← the second random byte54–55for each slot's entry, in order:56–58 entry not below b: this slot59–60 else the next slot61–62pokered: disassembly of Pokémon Red and Blue · engine/battle/wild_encounters.asm#L74-L80ld b, 0
add hl, bc
ld a, [hli]
ld [wCurEnemyLevel], a
ld a, [hl]
ld [wCurPartySpecies], a
ld [wEnemyMonSpecies2], aOur readinglevel ← the list's byte at the slot's offset74–77species ← the byte after it78–80A second random byte, which the generator updates along with the first, then picks one of the map's 10 slots, which have 51, 51, 39, 25, 25, 25, 13, 13, 11, and 3 chances in 256. CodeChecked by claude, 2026-10-28 — summed the chances in the table's order; read the loop's compare, which keeps a slot while its entry is at least the byteChecked by a second AI model, 2026-10-28.Some steps can't start a wild battle wherever they are: the two after a battle, a step while a character's scripted movement runs, a ledge jump, a step out of a door, a step that ends on a door or warp tile, and a step past the map's edge. A turn in place runs the same check and the same limits hold for it, but a turn doesn't count the post-battle cooldown down, since only a finished step does: during the cooldown a turn neither rolls nor shortens it. Those steps and turns also leave a Repel's count alone. pokered-wild/skipped-steps
engine/battle/wild_encounters.asm#L1-L18; try to initiate a wild pokemon encounter
; returns success in Z
TryDoWildEncounter:
ld a, [wNPCMovementScriptPointerTableNum]
and a
ret nz
ld a, [wMovementFlags]
and a ; is player exiting a door, jumping over a ledge, or fishing?
ret nz
callfar IsPlayerStandingOnDoorTileOrWarpTile
jr nc, .notStandingOnDoorOrWarpTile
.CantEncounter
…Our readingan NPC movement script is set (by its label): none4–6a door exit, ledge jump, or fishing (by the comment): none7–9on a door or warp tile (by its label): none10–15just outside the map (by its label): none17–18pokered: disassembly of Pokémon Red and Blue · engine/battle/core.asm#L6661-L6664ld a, [wNumberOfNoRandomBattleStepsLeft]
and a
ret nz
callfar TryDoWildEncounterOur readingno-battle steps left: no encounter check6661–6663else the encounter check (wild_encounters.asm)6664After any battle, including one that ends in a blackout, the first two steps once the map reloads can't start a wild battle and the third can (computed). Every battle's end sets a cooldown flag; the map then reloads (after a blackout, at the place the warp sends the player), and a map load with the flag set sets a counter of 3. Each step not taken under scripted movement counts it down while the flag is set, clearing the flag when it reaches 0, and a wild battle can't start while it is above 0. A step's countdown runs before that step's encounter check. CodeIn caves, Pokémon Tower, the Power Plant, and Pokémon Mansion every step off water can start a wild battle; on routes, in Viridian Forest, and in the Safari Zone only a step in grass or on water can. A turn rolls as a step does: pressing a direction other than the last one walked, from standing, first turns the player in place, and the same check runs on the tile the player stands on, before any step. The tile decides: the tileset's grass tile rolls against the map's grass rate and a water tile ($14) against its water rate. Any other tile rolls against the grass rate on an indoor map, by map number, unless the map uses the forest tileset, as Viridian Forest and the four Safari Zone areas do; outdoors it doesn't roll. Only the overworld, forest, and plateau tilesets have a grass tile. CodeChecked by claude, 2026-10-28 — read the check's early returns, all before the Repel count (L19), and the caller's test of the cooldown counter The turn's call to the battle check (overworld.asm L232) skips the step counting (L291-L305), the only place the cooldown counter drops.Revised after a check by a second AI model, 2026-10-28.Cited by: Random encounter, Wild encounters
A Repel lasts 100 steps, a Super Repel 200, and a Max Repel 250, counted on every step, and every turn in place, that the encounter check runs on, in towns and on paths as well as in grass. Using one outside battle sets the count, replacing what was left. On the step or turn the count reaches 0 the game prints "REPEL's effect wore off." and meets nothing. pokered-wild/repel-steps
Value: repel 100 · super 200 · max 250 (steps)
Codepokered: disassembly of Pokémon Red and Blue ·engine/items/item_effects.asm#L1532-L1541ItemUseRepel:
ld b, 100
ItemUseRepelCommon:
ld a, [wIsInBattle]
and a
jp nz, ItemUseNotTime
ld a, b
ld [wRepelRemainingSteps], a
jp PrintItemUseTextAndRemoveItemOur readingRepel: steps ← 1001532–1533in battle: refuse (by its label)1535–1538Repel steps ← that count1539–1541pokered: disassembly of Pokémon Red and Blue · engine/items/item_effects.asm#L1622-L1628ItemUseSuperRepel:
ld b, 200
jp ItemUseRepelCommon
ItemUseMaxRepel:
ld b, 250
jp ItemUseRepelCommonOur readingSuper Repel: steps ← 200, as Repel1622–1624Max Repel: steps ← 250, as Repel1626–1628pokered: disassembly of Pokémon Red and Blue · engine/battle/wild_encounters.asm#L19-L25ld a, [wRepelRemainingSteps]
and a
jr z, .next
dec a
jr z, .lastRepelStep
ld [wRepelRemainingSteps], a
.nextOur readingRepel steps 0: go on19–21Repel steps − 1; reaching 0: last step22–23else store the count24pokered: disassembly of Pokémon Red and Blue · engine/battle/wild_encounters.asm#L90-L99.lastRepelStep
ld [wRepelRemainingSteps], a
ld a, TEXT_REPEL_WORE_OFF
ldh [hTextID], a
call EnableAutoTextBoxDrawing
call DisplayTextID
.CantEncounter2
ld a, $1
and a
retOur readinglast step: Repel steps ← 090–91show the wore-off text92–95no encounter96–99pokered: disassembly of Pokémon Red and Blue · data/text/text_4.asm#L20-L23_RepelWoreOffText::
text "REPEL's effect"
line "wore off."
doneSome steps can't start a wild battle wherever they are: the two after a battle, a step while a character's scripted movement runs, a ledge jump, a step out of a door, a step that ends on a door or warp tile, and a step past the map's edge. A turn in place runs the same check and the same limits hold for it, but a turn doesn't count the post-battle cooldown down, since only a finished step does: during the cooldown a turn neither rolls nor shortens it. Those steps and turns also leave a Repel's count alone. CodeAfter any battle, including one that ends in a blackout, the first two steps once the map reloads can't start a wild battle and the third can (computed). Every battle's end sets a cooldown flag; the map then reloads (after a blackout, at the place the warp sends the player), and a map load with the flag set sets a counter of 3. Each step not taken under scripted movement counts it down while the flag is set, clearing the flag when it reaches 0, and a wild battle can't start while it is above 0. A step's countdown runs before that step's encounter check. CodeIn caves, Pokémon Tower, the Power Plant, and Pokémon Mansion every step off water can start a wild battle; on routes, in Viridian Forest, and in the Safari Zone only a step in grass or on water can. A turn rolls as a step does: pressing a direction other than the last one walked, from standing, first turns the player in place, and the same check runs on the tile the player stands on, before any step. The tile decides: the tileset's grass tile rolls against the map's grass rate and a water tile ($14) against its water rate. Any other tile rolls against the grass rate on an indoor map, by map number, unless the map uses the forest tileset, as Viridian Forest and the four Safari Zone areas do; outdoors it doesn't roll. Only the overworld, forest, and plateau tilesets have a grass tile. CodeChecked by claude, 2026-10-28 — read the three items' counts and the shared store, the countdown at the top of the encounter check, which runs on any map, and the last step's textRevised after a check by a second AI model, 2026-10-28.Cited by: Wild encounters
While a Repel lasts, a wild Pokémon below the level of the first Pokémon in the party is turned away, and one at that level or above still appears, so battles come less often. The rate roll and the slot pick run first and are unchanged: a Repel alters neither how often they turn up a Pokémon nor which one, and a slot below the leader's level then ends the step with no battle. The first Pokémon's level counts even if it has fainted. pokered-wild/repel-level
engine/battle/wild_encounters.asm#L81-L89ld a, [wRepelRemainingSteps]
and a
jr z, .willEncounter
ld a, [wPartyMon1Level]
ld b, a
ld a, [wCurEnemyLevel]
cp b
jr c, .CantEncounter2 ; repel prevents encounters if the leading party mon's level is higher than the wild mon
jr .willEncounterOur readingno Repel steps left: battle81–83b ← the first party Pokémon's level84–85the wild level below b: no encounter86–88else battle89The slot byte picks slot 0 for 0–50, 1 for 51–101, 2 for 102–140, 3 for 141–165, 4 for 166–190, 5 for 191–215, 6 for 216–228, 7 for 229–241, 8 for 242–252, and 9 for 253–255. The slot table holds each slot's running total of chances less 1, and the byte takes the first slot whose entry it doesn't pass; the step then reads that slot's level and species from the list. CodeChecked by claude, 2026-10-28 — read the level test after the rate and slot picks; it reads the first party slot's level with no HP testRevised after a check by a second AI model, 2026-10-28.Cited by: Wild encounters
In Viridian Forest a Pikachu takes about 620 steps of grass on average, in either version, and a Repel only makes it rarer (computed). A grass step starts a battle 8 times in 256, once in 32 steps; 14 in 256 battles are a Pikachu (slot 8 at level 3, 11 in 256, and slot 9 at level 5, 3 in 256), so one comes every 18.3 battles, 585 steps, plus 2 steps of cooldown after each of the 17.3 battles before it. With a Repel and a first Pokémon of level 4 or 5, the level-3 Pikachu is turned away, and the walk grows to about 2,800 steps; above level 5 no Pikachu gets through. A turn in place in the grass rolls as a step does and counts here as one; the 2 steps of cooldown are steps walked, since a turn doesn't count them down. pokered-wild/hunt-pikachu
Value: rate 8 · steps per battle 32 · pikachu 14 · of 256 · share 5.5 · battles 18.3 · steps 585 · with cooldown 620 · with repel 2800
CodeRed and Blue have 57 lists of wild Pokémon, 570 rows in all: 55 for grass and cave floors, one map each, and two for water, one shared by Routes 19 and 20 and one for Route 21. Each list holds its encounter rate and ten slots, each a level and a species. Grass rates run from 8 (Viridian Forest) to 30 (the Safari Zone); both water lists are all Tentacool, at rate 5. The versions differ in 175 rows across 34 lists, always in the species, and in one row the level too: Pokémon Mansion B1F's slot 8 holds a level-42 Weezing in Red and a level-38 Magmar in Blue. A slot's chance is the same on every list. The species' names are as the game prints them. CodeA step, or a turn in place, that can meet a wild Pokémon finds one when a random byte is below the map's encounter rate, out of 256: Route 1's grass rate is 25, so a step in its grass finds one 25 times in 256. CodeThe slot byte picks slot 0 for 0–50, 1 for 51–101, 2 for 102–140, 3 for 141–165, 4 for 166–190, 5 for 191–215, 6 for 216–228, 7 for 229–241, 8 for 242–252, and 9 for 253–255. The slot table holds each slot's running total of chances less 1, and the byte takes the first slot whose entry it doesn't pass; the step then reads that slot's level and species from the list. CodeAfter any battle, including one that ends in a blackout, the first two steps once the map reloads can't start a wild battle and the third can (computed). Every battle's end sets a cooldown flag; the map then reloads (after a blackout, at the place the warp sends the player), and a map load with the flag set sets a counter of 3. Each step not taken under scripted movement counts it down while the flag is set, clearing the flag when it reaches 0, and a wild battle can't start while it is above 0. A step's countdown runs before that step's encounter check. CodeWhile a Repel lasts, a wild Pokémon below the level of the first Pokémon in the party is turned away, and one at that level or above still appears, so battles come less often. The rate roll and the slot pick run first and are unchanged: a Repel alters neither how often they turn up a Pokémon nor which one, and a slot below the leader's level then ends the step with no battle. The first Pokémon's level counts even if it has fainted. CodeSome steps can't start a wild battle wherever they are: the two after a battle, a step while a character's scripted movement runs, a ledge jump, a step out of a door, a step that ends on a door or warp tile, and a step past the map's edge. A turn in place runs the same check and the same limits hold for it, but a turn doesn't count the post-battle cooldown down, since only a finished step does: during the cooldown a turn neither rolls nor shortens it. Those steps and turns also leave a Repel's count alone. CodeIn caves, Pokémon Tower, the Power Plant, and Pokémon Mansion every step off water can start a wild battle; on routes, in Viridian Forest, and in the Safari Zone only a step in grass or on water can. A turn rolls as a step does: pressing a direction other than the last one walked, from standing, first turns the player in place, and the same check runs on the tile the player stands on, before any step. The tile decides: the tileset's grass tile rolls against the map's grass rate and a water tile ($14) against its water rate. Any other tile rolls against the grass rate on an indoor map, by map number, unless the map uses the forest tileset, as Viridian Forest and the four Safari Zone areas do; outdoors it doesn't roll. Only the overworld, forest, and plateau tilesets have a grass tile. CodeChecked by claude, 2026-10-28 — computed from the list: 256/8 = 32 steps a battle, 256/14 = 18.29 battles a Pikachu, 32 × 18.29 = 585.1 steps, plus 2 × 17.29 = 34.6 cooldown steps, 619.7 in all; with a Repel and a level-4 leader (193 of 256 slots get through, 3 of them Pikachu) 2,857 steps, and level 5 (104 through) 2,798. Counts every step as in grass and each random byte as equally likelyRevised after a check by a second AI model, 2026-10-28.Cited by: Wild encounters
On Mt. Moon 1F a Clefairy takes about 2,350 steps on average, and a Repel saves few of them (computed). Every step there rolls at rate 10, and Clefairy has only slot 9, 3 in 256 at level 8, so one comes every 85.3 battles. With a Repel and a level-8 first Pokémon, the slots below level 8 are turned away: one Clefairy in 60 battles instead, and about 2,300 steps, since a Repel spares battles and their 2 steps of cooldown, not the steps between them. A turn in place rolls as a step does and counts here as one; the 2 steps of cooldown are steps walked, since a turn doesn't count them down. pokered-wild/hunt-clefairy
Value: rate 10 · clefairy 3 · of 256 · battles 85.3 · steps 2350 · repel battles 60 · repel steps 2300
CodeRed and Blue have 57 lists of wild Pokémon, 570 rows in all: 55 for grass and cave floors, one map each, and two for water, one shared by Routes 19 and 20 and one for Route 21. Each list holds its encounter rate and ten slots, each a level and a species. Grass rates run from 8 (Viridian Forest) to 30 (the Safari Zone); both water lists are all Tentacool, at rate 5. The versions differ in 175 rows across 34 lists, always in the species, and in one row the level too: Pokémon Mansion B1F's slot 8 holds a level-42 Weezing in Red and a level-38 Magmar in Blue. A slot's chance is the same on every list. The species' names are as the game prints them. CodeIn caves, Pokémon Tower, the Power Plant, and Pokémon Mansion every step off water can start a wild battle; on routes, in Viridian Forest, and in the Safari Zone only a step in grass or on water can. A turn rolls as a step does: pressing a direction other than the last one walked, from standing, first turns the player in place, and the same check runs on the tile the player stands on, before any step. The tile decides: the tileset's grass tile rolls against the map's grass rate and a water tile ($14) against its water rate. Any other tile rolls against the grass rate on an indoor map, by map number, unless the map uses the forest tileset, as Viridian Forest and the four Safari Zone areas do; outdoors it doesn't roll. Only the overworld, forest, and plateau tilesets have a grass tile. CodeA step, or a turn in place, that can meet a wild Pokémon finds one when a random byte is below the map's encounter rate, out of 256: Route 1's grass rate is 25, so a step in its grass finds one 25 times in 256. CodeAfter any battle, including one that ends in a blackout, the first two steps once the map reloads can't start a wild battle and the third can (computed). Every battle's end sets a cooldown flag; the map then reloads (after a blackout, at the place the warp sends the player), and a map load with the flag set sets a counter of 3. Each step not taken under scripted movement counts it down while the flag is set, clearing the flag when it reaches 0, and a wild battle can't start while it is above 0. A step's countdown runs before that step's encounter check. CodeWhile a Repel lasts, a wild Pokémon below the level of the first Pokémon in the party is turned away, and one at that level or above still appears, so battles come less often. The rate roll and the slot pick run first and are unchanged: a Repel alters neither how often they turn up a Pokémon nor which one, and a slot below the leader's level then ends the step with no battle. The first Pokémon's level counts even if it has fainted. CodeSome steps can't start a wild battle wherever they are: the two after a battle, a step while a character's scripted movement runs, a ledge jump, a step out of a door, a step that ends on a door or warp tile, and a step past the map's edge. A turn in place runs the same check and the same limits hold for it, but a turn doesn't count the post-battle cooldown down, since only a finished step does: during the cooldown a turn neither rolls nor shortens it. Those steps and turns also leave a Repel's count alone. CodeChecked by claude, 2026-10-28 — computed from the list: 256/10 × 256/3 = 2,184.5 steps plus 2 × 84.3 = 168.7 of cooldown, 2,353.2 in all; with a level-8 leader 180 of 256 slots get through, so 60 battles a Clefairy and 2,184.5 + 2 × 59 = 2,302.5 steps. Counts each random byte as equally likelyRevised after a check by a second AI model, 2026-10-28.Cited by: Wild encounters
A battle comes once every 256 ÷ rate rolls on average, a roll being a step, or a turn in place, where the tile rolls: about 8.5 in the Safari Zone (rate 30), 10.2 on Route 1 (25), 32 in Viridian Forest (8), and 51.2 on water (5), plus the 2 steps of cooldown after each battle (computed). pokered-wild/steps-per-battle
Value: safari 8.5 · route 1 10.2 · viridian forest 32 · water 51.2 (steps)
CodeRed and Blue have 57 lists of wild Pokémon, 570 rows in all: 55 for grass and cave floors, one map each, and two for water, one shared by Routes 19 and 20 and one for Route 21. Each list holds its encounter rate and ten slots, each a level and a species. Grass rates run from 8 (Viridian Forest) to 30 (the Safari Zone); both water lists are all Tentacool, at rate 5. The versions differ in 175 rows across 34 lists, always in the species, and in one row the level too: Pokémon Mansion B1F's slot 8 holds a level-42 Weezing in Red and a level-38 Magmar in Blue. A slot's chance is the same on every list. The species' names are as the game prints them. CodeA step, or a turn in place, that can meet a wild Pokémon finds one when a random byte is below the map's encounter rate, out of 256: Route 1's grass rate is 25, so a step in its grass finds one 25 times in 256. CodeAfter any battle, including one that ends in a blackout, the first two steps once the map reloads can't start a wild battle and the third can (computed). Every battle's end sets a cooldown flag; the map then reloads (after a blackout, at the place the warp sends the player), and a map load with the flag set sets a counter of 3. Each step not taken under scripted movement counts it down while the flag is set, clearing the flag when it reaches 0, and a wild battle can't start while it is above 0. A step's countdown runs before that step's encounter check. CodeIn caves, Pokémon Tower, the Power Plant, and Pokémon Mansion every step off water can start a wild battle; on routes, in Viridian Forest, and in the Safari Zone only a step in grass or on water can. A turn rolls as a step does: pressing a direction other than the last one walked, from standing, first turns the player in place, and the same check runs on the tile the player stands on, before any step. The tile decides: the tileset's grass tile rolls against the map's grass rate and a water tile ($14) against its water rate. Any other tile rolls against the grass rate on an indoor map, by map number, unless the map uses the forest tileset, as Viridian Forest and the four Safari Zone areas do; outdoors it doesn't roll. Only the overworld, forest, and plateau tilesets have a grass tile. CodeChecked by claude, 2026-10-28 — 256/30 = 8.53, 256/25 = 10.24, 256/8 = 32, 256/5 = 51.2; counts each random byte as equally likelyRevised after a check by a second AI model, 2026-10-28.Cited by: Wild encounters
The Old Rod always gets a bite, and it is always a level-5 Magikarp. pokered-wild/old-rod
engine/items/item_effects.asm#L1826-L1831ItemUseOldRod:
call FishingInit
jp c, ItemUseNotTime
lb bc, 5, MAGIKARP
ld a, $1 ; set bite
jr RodResponseOur readingcan't fish here: refuse (by its label)1827–1828level 5, Magikarp; a bite1829–1831A rod works only outside battle, facing water or a shore (at Vermilion Dock, water only), and not while surfing. A bite starts its battle at once, without the step's checks, so neither the cooldown after a battle nor a Repel stops a hooked Pokémon. CodeChecked by claude, 2026-10-28 — read the Old Rod's effect and the shared bite handlingChecked by a second AI model, 2026-10-28.Cited by: Wild encounters
The Good Rod's list has two entries, a level-10 Goldeen and a level-10 Poliwag, on every map. pokered-wild/good-rod-mons
Value: level 10, 10 · species GOLDEEN, POLIWAG
Codepokered: disassembly of Pokémon Red and Blue ·data/wild/good_rod.asm#L1-L5; random choice of 2 good rod encounters
GoodRodMons:
; level, species
db 10, GOLDEEN
db 10, POLIWAGChecked by claude, 2026-10-28 — read the table; the Good Rod's effect reads no mapChecked by a second AI model, 2026-10-28.Cited by: Wild encounters
Wherever a rod works, a Good Rod cast gets a bite one time in three, a Goldeen or a Poliwag equally (counting each random byte as equally likely and each draw as independent). An odd byte ends the cast with no bite; an even byte bites when its next two bits make 0 or 1, picking that entry, and draws again otherwise, so 64 of the 192 values that end a cast bite. pokered-wild/good-rod
Value: bite 33.3 · each 16.7 (%)
Codepokered: disassembly of Pokémon Red and Blue ·engine/items/item_effects.asm#L1833-L1857ItemUseGoodRod:
call FishingInit
jp c, ItemUseNotTime
.RandomLoop
call Random
srl a
jr c, .SetBite
and %11
cp 2
jr nc, .RandomLoop
; choose which monster appears
ld hl, GoodRodMons
…Our readingcan't fish here: refuse (by its label)1834–1835draw a random byte; shift out its low bit1836–1838low bit 1: no bite1839n ← the next two bits; n of 2 or 3: draw again1840–1842level, species ← the list's entry n1844–1851carry clear: a bite; set: none1852–1857The Good Rod's list has two entries, a level-10 Goldeen and a level-10 Poliwag, on every map. CodeA rod works only outside battle, facing water or a shore (at Vermilion Dock, water only), and not while surfing. A bite starts its battle at once, without the step's checks, so neither the cooldown after a battle nor a Repel stops a hooked Pokémon. CodeChecked by claude, 2026-10-28 — counted the byte's 256 values: 128 odd (no bite), 64 bite, 64 draw again; the bite flag is the carry, invertedChecked by a second AI model, 2026-10-28.Cited by: Wild encounters
The Super Rod's lists give 33 maps two to four entries each, 109 rows in all, the same in both versions; on any other map it finds nothing. Ten lists are shared among those maps, and every entry is level 15 except Cerulean Cave's and Route 23's four at level 23, Celadon City's and Route 10's Poliwhirl and Fuchsia City's Seaking at 23, and a level-5 Tentacool on Routes 12, 13, 17, and 18. Its only Dratini are in the Safari Zone. pokered-wild/super-rod-mons
data/wild/super_rod.asm#L1-L101; super rod encounters
SuperRodData:
; map, fishing group
dbw PALLET_TOWN, .Group1
dbw VIRIDIAN_CITY, .Group1
dbw CERULEAN_CITY, .Group3
dbw VERMILION_CITY, .Group4
dbw CELADON_CITY, .Group5
dbw FUCHSIA_CITY, .Group10
dbw CINNABAR_ISLAND, .Group8
dbw ROUTE_4, .Group3
dbw ROUTE_6, .Group4
…Checked by claude, 2026-10-28 — expanded each map's list from the shared lists at the pin; the file has no version branchChecked by a second AI model, 2026-10-28.Cited by: Wild encounters
A Super Rod cast bites half the time on a map whose list has four entries, 3 times in 7 with three, and once in 3 with two, every entry equally likely (counting each random byte as equally likely and each draw as independent). An odd byte ends the cast with no bite; an even byte's next two bits pick an entry, and a number past the map's list draws again. pokered-wild/super-rod
Value: four 50 · three 42.9 · two 33.3 (%)
Codepokered: disassembly of Pokémon Red and Blue ·engine/items/item_effects.asm#L2855-L2898ReadSuperRodData:
; return e = 2 if no fish on this map
; return e = 1 if a bite, bc = level,species
; return e = 0 if no bite
ld a, [wCurMap]
ld de, 3 ; each fishing group is three bytes wide
ld hl, SuperRodData
call IsInArray
jr c, .ReadFishingGroup
ld e, $2 ; $2 if no fishing groups found
ret
.ReadFishingGroup
…Our readingthe map has no list: nothing here2859–2865b ← the list's size2867–2877draw a random byte; low bit 1: no bite2880–2883n ← the next two bits; n not below b: draw again2885–2887level, species ← entry n; a bite2889–2898pokered: disassembly of Pokémon Red and Blue · engine/items/item_effects.asm#L1861-L1865ItemUseSuperRod:
call FishingInit
jp c, ItemUseNotTime
call ReadSuperRodData
ld a, eOur readingcan't fish here: refuse (by its label)1862–1863read the map's list (above)1864–1865The Super Rod's lists give 33 maps two to four entries each, 109 rows in all, the same in both versions; on any other map it finds nothing. Ten lists are shared among those maps, and every entry is level 15 except Cerulean Cave's and Route 23's four at level 23, Celadon City's and Route 10's Poliwhirl and Fuchsia City's Seaking at 23, and a level-5 Tentacool on Routes 12, 13, 17, and 18. Its only Dratini are in the Safari Zone. CodeA rod works only outside battle, facing water or a shore (at Vermilion Dock, water only), and not while surfing. A bite starts its battle at once, without the step's checks, so neither the cooldown after a battle nor a Repel stops a hooked Pokémon. CodeChecked by claude, 2026-10-28 — counted per draw: 128 of 256 values end with no bite and 32 bite per entry, so four entries bite 128/256, three 96/224, two 64/192Checked by a second AI model, 2026-10-28.Cited by: Wild encounters
A rod works only outside battle, facing water or a shore (at Vermilion Dock, water only), and not while surfing. A bite starts its battle at once, without the step's checks, so neither the cooldown after a battle nor a Repel stops a hooked Pokémon. pokered-wild/fishing
engine/items/item_effects.asm#L1891-L1916; checks if fishing is possible and if so, runs initialization code common to all rods
; unsets carry if fishing is possible, sets carry if not
FishingInit:
ld a, [wIsInBattle]
and a
jr z, .notInBattle
scf ; can't fish during battle
ret
.notInBattle
call IsNextTileShoreOrWater
ret c
ld a, [wWalkBikeSurfState]
…Our readingin battle: can't fish1894–1898the tile ahead isn't shore or water (below): can't fish1900–1901surfing: can't fish1902–1904else print the use text, play a sound, wait 80 frames1905–1913pokered: disassembly of Pokémon Red and Blue · engine/items/item_effects.asm#L2826-L2851; checks if the tile in front of the player is a shore or water tile
; used for surfing and fishing
; unsets carry if it is, sets carry if not
IsNextTileShoreOrWater:
ld a, [wCurMapTileset]
ld hl, WaterTilesets
ld de, 1
call IsInArray
jr nc, .notShoreOrWater
ld a, [wCurMapTileset]
cp SHIP_PORT ; Vermilion Dock tileset
ld a, [wTileInFrontOfPlayer] ; tile in front of player
…Our readinga tileset without water: no2830–2834Vermilion Dock's tileset: water only2835–2838an eastern shore tile ($48 or $32): yes2839–2842the water tile, $14: yes2844–2845pokered: disassembly of Pokémon Red and Blue · engine/items/item_effects.asm#L1866-L1877RodResponse:
ld [wRodResponse], a
dec a ; is there a bite?
jr nz, .next
; if yes, store level and species data
ld a, 1
ld [wMoveMissed], a
ld a, b ; level
ld [wCurEnemyLevel], a
ld a, c ; species
ld [wCurOpponent], aOur readinga bite: the opponent ← the species, at its level1866–1877pokered: disassembly of Pokémon Red and Blue · home/overworld.asm#L64-L66ld a, [wCurOpponent]
and a
jp nz, .newBattleOur readingan opponent is set: start a battle64–66pokered: disassembly of Pokémon Red and Blue · engine/battle/core.asm#L6642-L6651InitBattle::
ld a, [wCurOpponent]
and a
jr z, DetermineWildOpponent
InitOpponent:
ld a, [wCurOpponent]
ld [wCurPartySpecies], a
ld [wEnemyMonSpecies2], a
jr InitBattleCommonOur readingno opponent set: the wild encounter check6643–6645else battle that opponent6647–6651Checked by claude, 2026-10-28 — read the rods' shared setup and bite handling, the overworld loop's opponent test, and the battle setup, which goes to the encounter check (cooldown, Repel) only with no opponent setChecked by a second AI model, 2026-10-28.Cited by: Wild encounters