61 KiB
Section 16 - Routes 45, 46, 26 and 27
Source: ../section-16-routes-45-46-26-and-27.txt
Maps covered: MAP_ROUTE_45, MAP_ROUTE_46, MAP_ROUTE_27, MAP_TOHJO_FALLS,
MAP_ROUTE_27_SANDSTORM_HOUSE, MAP_ROUTE_26, MAP_ROUTE_26_HEAL_HOUSE,
MAP_DAY_OF_WEEK_SIBLINGS_HOUSE, MAP_VICTORY_ROAD_GATE (gate only)
Badges / key milestones in this section: no badge. The milestones are the
MASTER BALL and EVERSTONE from Prof. Elm, TM37 SANDSTORM, TM22 SOLARBEAM, the
Tohjo Falls MOON STONE, and the eight-badge check at the Victory Road gate that
opens the Pokemon League.
Coordinate convention reminder: warp_event / bg_event / object_event rows
are in map cells (16 px walk grid). map_const NAME, W, H in
constants/map_constants.asm is in blocks (32 px), so a map is W*2 by
H*2 cells. Route 45 is 10, 45 blocks = 20 x 90 cells, which is why object
rows there run to y = 82.
1. Route order
| # | Map constant | asm file | Enter via | Leaves via | Why (walkthrough beat) |
|---|---|---|---|---|---|
| 1 | MAP_ROUTE_45 |
maps/Route45.asm |
south connection from BLACKTHORN_CITY (data/maps/attributes.asm: connection north, BlackthornCity, BLACKTHORN_CITY, 0) |
west connection to ROUTE_46 (offset 36); optional warp 1 to DARK_CAVE_BLACKTHORN_ENTRANCE |
Descend the mountain road, three forks, six trainers, four item balls |
| 2 | MAP_ROUTE_46 |
maps/Route46.asm |
east connection from ROUTE_45 (offset -36) |
south connection to ROUTE_29 (offset -10) or warps 1/2 to ROUTE_29_ROUTE_46_GATE; warp 3 to DARK_CAVE_VIOLET_ENTRANCE |
Camper Ted, Picnicker Erin, Hiker Bailey, Dire Hit, two fruit trees |
| 3 | MAP_NEW_BARK_TOWN |
maps/NewBarkTown.asm |
FLY | warp 1 to ELMS_LAB, warp 2 to PLAYERS_HOUSE_1F; east connection to ROUTE_27 |
Elm hands the MASTER BALL (needs RISINGBADGE) and the EVERSTONE (needs Togepi shown). Map tables for New Bark Town belong to section 00; only the two Elm scripts are transcribed below. |
| 4 | MAP_ROUTE_27 |
maps/Route27.asm |
west connection from NEW_BARK_TOWN (offset 0) - the crossing itself is water, so SURF |
warp 2 / warp 3 into TOHJO_FALLS; warp 1 into ROUTE_27_SANDSTORM_HOUSE; east connection to ROUTE_26 (offset -45) |
"First step into KANTO" coord event, Rare Candy, then the eastern trainer gauntlet |
| 5 | MAP_TOHJO_FALLS |
maps/TohjoFalls.asm |
Route27 warp 2 (26, 5) -> Tohjo warp 1 |
Tohjo warp 2 (25, 15) -> Route27 warp 3 |
Cross the falls; MOON STONE item ball the walkthrough does not mention |
| 6 | MAP_ROUTE_27 |
maps/Route27.asm |
Tohjo warp 2 | east connection to ROUTE_26 |
Megan ambush on exit, Sandstorm house, Blake/Brian/Gilbert, whirlpool island (Jose + TM22), Reena |
| 7 | MAP_ROUTE_27_SANDSTORM_HOUSE |
maps/Route27SandstormHouse.asm |
Route27 warp 1 (33, 7) |
warps 1/2 back to Route27 warp 1 |
Happiness check -> TM37 SANDSTORM |
| 8 | MAP_ROUTE_26 |
maps/Route26.asm |
west connection from ROUTE_27 (offset 45) |
warp 1 (7, 5) to VICTORY_ROAD_GATE warp 3 |
Scott, Richard, heal house, Joyce, Ice Berry, Gaven, Jake, Max Elixer, Beth |
| 9 | MAP_ROUTE_26_HEAL_HOUSE |
maps/Route26HealHouse.asm |
Route26 warp 2 (15, 57) |
warps 1/2 back to Route26 warp 2 |
Free full heal, repeatable |
| 10 | MAP_DAY_OF_WEEK_SIBLINGS_HOUSE |
maps/DayOfWeekSiblingsHouse.asm |
Route26 warp 3 (5, 71) |
warps 1/2 back to Route26 warp 3 |
Monica's journal (the day-of-week sibling roster) |
| 11 | MAP_VICTORY_ROAD_GATE |
maps/VictoryRoadGate.asm |
Route26 warp 1 |
warps 5/6 to VICTORY_ROAD |
Eight-badge check. Victory Road itself belongs to section 17; only the gate's badge check is transcribed here because it is this section's terminal gate. |
Spill-over note: DARK_CAVE_BLACKTHORN_ENTRANCE / DARK_CAVE_VIOLET_ENTRANCE
are the "left path" the walkthrough points at from Routes 45 and 46; they are
section 15's maps. Their return warps are DarkCaveBlackthornEntrance.asm
warp_event 23, 3, ROUTE_45, 1 and DarkCaveVioletEntrance.asm
warp_event 35, 33, ROUTE_46, 3.
2. Maps
MAP_ROUTE_45
- Script:
maps/Route45.asm - Blocks:
maps/Route45.blk - Header:
data/maps/maps.asm:185->map Route45, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_45, MUSIC_ROUTE_36, FALSE, PALETTE_AUTO, FISHGROUP_DRATINI_2 - Dimensions:
constants/map_constants.asm:170->map_const ROUTE_45, 10, 45(20 x 90 cells) - Connections (
data/maps/attributes.asm:243):connection north, BlackthornCity, BLACKTHORN_CITY, 0;connection west, Route46, ROUTE_46, 36 - Symbols:
4d:4e75 Route45_MapScripts,4d:54ad Route45_MapEvents
Warps (def_warp_events)
| idx | x | y | destination map | dest warp |
|---|---|---|---|---|
| 1 | 2 | 5 | DARK_CAVE_BLACKTHORN_ENTRANCE |
1 |
Coord events (def_coord_events)
None. Route 45 has no trip-wires; every scripted beat is an A press.
BG events (def_bg_events)
| x | y | type | script/item |
|---|---|---|---|
| 10 | 4 | BGEVENT_READ |
Route45Sign ("ROUTE 45 / MOUNTAIN RD. AHEAD") |
| 13 | 80 | BGEVENT_ITEM |
Route45HiddenPpUp -> hiddenitem PP_UP, EVENT_ROUTE_45_HIDDEN_PP_UP |
Object events (def_object_events)
| const | sprite | x | y | movement | type | script label | event flag |
|---|---|---|---|---|---|---|---|
ROUTE45_POKEFAN_M1 |
SPRITE_POKEFAN_M |
10 | 16 | STANDING_RIGHT |
TRAINER (sight 1) |
TrainerHikerErik |
-1 |
ROUTE45_POKEFAN_M2 |
SPRITE_POKEFAN_M |
15 | 64 | STANDING_RIGHT |
TRAINER (sight 2) |
TrainerHikerMichael |
-1 |
ROUTE45_POKEFAN_M3 |
SPRITE_POKEFAN_M |
5 | 28 | STANDING_LEFT |
TRAINER (sight 3) |
TrainerHikerParry |
-1 |
ROUTE45_POKEFAN_M4 |
SPRITE_POKEFAN_M |
9 | 64 | STANDING_LEFT |
TRAINER (sight 1) |
TrainerHikerTimothy |
-1 |
ROUTE45_BLACK_BELT |
SPRITE_BLACK_BELT |
11 | 50 | SPINRANDOM_FAST |
TRAINER (sight 2) |
TrainerBlackbeltKenji |
-1 |
ROUTE45_COOLTRAINER_M |
SPRITE_COOLTRAINER_M |
17 | 18 | STANDING_LEFT |
TRAINER (sight 1) |
TrainerCooltrainermRyan |
-1 |
ROUTE45_COOLTRAINER_F |
SPRITE_COOLTRAINER_F |
4 | 36 | STANDING_RIGHT |
TRAINER (sight 3) |
TrainerCooltrainerfKelly |
-1 |
ROUTE45_FRUIT_TREE |
SPRITE_FRUIT_TREE |
16 | 82 | STILL |
SCRIPT |
Route45FruitTree (fruittree FRUITTREE_ROUTE_45) |
-1 |
ROUTE45_POKE_BALL1 |
SPRITE_POKE_BALL |
6 | 51 | STILL |
ITEMBALL |
Route45XSpecial (itemball X_SPECIAL) |
EVENT_ROUTE_45_X_SPECIAL |
ROUTE45_POKE_BALL2 |
SPRITE_POKE_BALL |
6 | 66 | STILL |
ITEMBALL |
Route45Revive (itemball REVIVE) |
EVENT_ROUTE_45_REVIVE |
ROUTE45_POKE_BALL3 |
SPRITE_POKE_BALL |
4 | 21 | STILL |
ITEMBALL |
Route45Elixer (itemball ELIXER) |
EVENT_ROUTE_45_ELIXER |
ROUTE45_POKE_BALL4 |
SPRITE_POKE_BALL |
8 | 33 | STILL |
ITEMBALL |
Route45MaxPotion (itemball MAX_POTION) |
EVENT_ROUTE_45_MAX_POTION |
Scripts of interest
TrainerBlackbeltKenji(4d:4e77). Header istrainer BLACKBELT_T, KENJI3, EVENT_BEAT_BLACKBELT_KENJI, BlackbeltKenjiSeenText, BlackbeltKenjiBeatenText, 0, .Script. Post-battle.Script:endifjustbattled/opentext/checkevent EVENT_KENJI_READY_FOR_REMATCH(rematch branch) /checkcellnum PHONE_BLACKBELT_KENJI(already registered -> jump to the "number accepted" std) /checkevent EVENT_KENJI_ASKED_FOR_PHONE_NUMBER. First pass setsEVENT_KENJI_ASKED_FOR_PHONE_NUMBERand callsaskforphonenumber PHONE_BLACKBELT_KENJI; the return value is compared againstPHONE_CONTACTS_FULLandPHONE_CONTACT_REFUSED. This is the walkthrough's "talk to him again and he will give you his phone number" - the number is offered on the second A press, not the first..WantsBattlepicks the rematch party bycheckevent EVENT_RESTORED_POWER_TO_KANTO->KENJI2, elsecheckevent EVENT_BEAT_ELITE_FOUR->KENJI1, elseKENJI3; thenloadtrainer/startbattle/reloadmapafterbattle/clearevent EVENT_KENJI_READY_FOR_REMATCH.TrainerHikerParry(4d:4f2d) is the same shape withPHONE_HIKER_PARRY,EVENT_PARRY_ASKED_FOR_PHONE_NUMBER,EVENT_PARRY_READY_FOR_REMATCH, andPARRY3as the first-meeting party (PARRY1after the Elite Four,PARRY2after Kanto's power is restored). Notegettrainername STRING_BUFFER_3, HIKER, PARRY1- the displayed name is read offPARRY1even though the fight isPARRY3.TrainerHikerErik,TrainerHikerMichael,TrainerHikerTimothy,TrainerCooltrainermRyan,TrainerCooltrainerfKelly: plainendifjustbattled/opentext/writetext ...AfterBattleText/waitbutton/closetext/end. No flags beyond thetrainerheader's own beat flag.Route45FruitTree=fruittree FRUITTREE_ROUTE_45. Index 12 inconstants/script_constants.asm:218;data/items/fruit_trees.asmrow 12 isMYSTERYBERRY- the walkthrough's "Mystery Berry".Route45HiddenPpUp=hiddenitem PP_UP, EVENT_ROUTE_45_HIDDEN_PP_UP, at cell (13, 80). Not mentioned by the walkthrough at all.
Flags and events
| constant | defined in | read/written by | meaning for a bot |
|---|---|---|---|
EVENT_BEAT_HIKER_ERIK |
constants/event_flags.asm:824 |
trainer header |
set on win, hides the "!" re-challenge |
EVENT_BEAT_HIKER_MICHAEL |
:825 |
trainer header |
as above |
EVENT_BEAT_HIKER_PARRY |
:826 |
trainer header |
as above |
EVENT_BEAT_HIKER_TIMOTHY |
:827 |
trainer header |
as above |
EVENT_BEAT_BLACKBELT_KENJI |
:686 |
trainer header |
as above |
EVENT_BEAT_COOLTRAINERM_RYAN |
:864 |
trainer header |
as above |
EVENT_BEAT_COOLTRAINERF_KELLY |
:883 |
trainer header |
as above |
EVENT_KENJI_ASKED_FOR_PHONE_NUMBER |
constants/event_flags.asm |
TrainerBlackbeltKenji.Script |
gates the "ask again" wording |
EVENT_KENJI_READY_FOR_REMATCH |
constants/event_flags.asm |
phone script sets, map script clears | rematch pending |
EVENT_PARRY_ASKED_FOR_PHONE_NUMBER / EVENT_PARRY_READY_FOR_REMATCH |
same | TrainerHikerParry.Script |
same pair for Parry |
EVENT_RESTORED_POWER_TO_KANTO |
:204 |
read by both rematch scripts | selects the hardest rematch party |
EVENT_BEAT_ELITE_FOUR |
:77 |
read by both rematch scripts | selects the middle rematch party |
EVENT_ROUTE_45_X_SPECIAL |
:1113 |
item ball object | one-time pickup |
EVENT_ROUTE_45_REVIVE |
:1114 |
item ball object | one-time pickup |
EVENT_ROUTE_45_ELIXER |
:1115 |
item ball object | one-time pickup |
EVENT_ROUTE_45_MAX_POTION |
:1116 |
item ball object | one-time pickup |
EVENT_ROUTE_45_HIDDEN_PP_UP |
:185 |
hiddenitem |
one-time hidden pickup |
Items
| item | how obtained | source (label / bg_event / hidden) | one-time flag |
|---|---|---|---|
X_SPECIAL |
item ball at (6, 51) | Route45XSpecial |
EVENT_ROUTE_45_X_SPECIAL |
REVIVE |
item ball at (6, 66) | Route45Revive |
EVENT_ROUTE_45_REVIVE |
ELIXER |
item ball at (4, 21) | Route45Elixer |
EVENT_ROUTE_45_ELIXER |
MAX_POTION |
item ball at (8, 33) | Route45MaxPotion |
EVENT_ROUTE_45_MAX_POTION |
MYSTERYBERRY |
fruit tree at (16, 82) | Route45FruitTree / FRUITTREE_ROUTE_45 |
daily fruit-tree flag, not an EVENT_* |
PP_UP |
hidden, bg event (13, 80) | Route45HiddenPpUp |
EVENT_ROUTE_45_HIDDEN_PP_UP |
Trainers
| const | class | id | party (data/trainers/parties.asm) |
script label | rematch/phone |
|---|---|---|---|---|---|
HIKER, ERIK |
HIKER ($2c) |
7 | HikerGroup "ERIK": 24 MACHOP, 27 GRAVELER, 27 MACHOP |
TrainerHikerErik |
no |
HIKER, MICHAEL |
HIKER |
8 | "MICHAEL": 25 GEODUDE, 25 GRAVELER, 25 GOLEM | TrainerHikerMichael |
no |
HIKER, PARRY3 |
HIKER |
20 | "PARRY": 29 ONIX | TrainerHikerParry |
PHONE_HIKER_PARRY; PARRY1 = 34 ONIX, PARRY2 = 38 ONIX |
HIKER, TIMOTHY |
HIKER |
10 | "TIMOTHY" (TRAINERTYPE_MOVES): 27 DIGLETT (MAGNITUDE/DIG/SAND_ATTACK/SLASH), 27 DUGTRIO (same) |
TrainerHikerTimothy |
no |
BLACKBELT_T, KENJI3 |
BLACKBELT_T ($32) |
8 | BlackbeltGroup "KENJI": 28 MACHOKE |
TrainerBlackbeltKenji |
PHONE_BLACKBELT_KENJI |
COOLTRAINERM, RYAN |
COOLTRAINERM ($1b) |
8 | "RYAN" (TRAINERTYPE_MOVES): 25 PIDGEOT (SAND_ATTACK/QUICK_ATTACK/WHIRLWIND/WING_ATTACK), 27 ELECTABUZZ (THUNDERPUNCH/LIGHT_SCREEN/SWIFT/SCREECH) |
TrainerCooltrainermRyan |
no |
COOLTRAINERF, KELLY |
COOLTRAINERF ($1c) |
7 | "KELLY": 27 MARILL, 24 WARTORTLE, 24 WARTORTLE | TrainerCooltrainerfKelly |
no |
Wild encounters
data/wild/johto_grass.asm:2236 def_grass_wildmons ROUTE_45, rates
10 percent morn/day/nite (identical slot lists across all three times):
- Gold: 23 GEODUDE, 23 GRAVELER, 24 GLIGAR, 20 TEDDIURSA, 25 GRAVELER, 27 GRAVELER, 27 GRAVELER.
- Silver: 23 GEODUDE, 23 GRAVELER, 24 GRAVELER, 20 PHANPY, 25 GRAVELER, 27 SKARMORY, 27 SKARMORY.
data/wild/johto_water.asm:204 def_water_wildmons ROUTE_45, 2 percent:
20 MAGIKARP, 15 MAGIKARP, 5 MAGIKARP.
Fishing group FISHGROUP_DRATINI_2 (data/wild/fish.asm FishGroups row 9).
Headbutt: data/wild/treemon_maps.asm:26 -> TREEMON_SET_CANYON
(data/wild/treemons.asm:73: SPEAROW/AIPOM at level 10).
Roaming beast: data/wild/roammon_maps.asm:33 roam_map ROUTE_45, ROUTE_44, ROUTE_46
- Route 45 is a roam map, so Entei/Raikou can appear in its grass.
MAP_ROUTE_46
- Script:
maps/Route46.asm - Blocks:
maps/Route46.blk - Header:
data/maps/maps.asm:186->map Route46, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_46, MUSIC_ROUTE_36, FALSE, PALETTE_AUTO, FISHGROUP_SHORE - Dimensions:
constants/map_constants.asm:171->map_const ROUTE_46, 10, 18(20 x 36 cells) - Connections (
data/maps/attributes.asm:247):connection south, Route29, ROUTE_29, -10;connection east, Route45, ROUTE_45, -36 - Symbols:
4d:555e Route46_MapScripts,4d:57c7 Route46_MapEvents
Warps (def_warp_events)
| idx | x | y | destination map | dest warp |
|---|---|---|---|---|
| 1 | 7 | 33 | ROUTE_29_ROUTE_46_GATE |
1 |
| 2 | 8 | 33 | ROUTE_29_ROUTE_46_GATE |
2 |
| 3 | 14 | 5 | DARK_CAVE_VIOLET_ENTRANCE |
3 |
Coord events (def_coord_events)
None.
BG events (def_bg_events)
| x | y | type | script/item |
|---|---|---|---|
| 9 | 27 | BGEVENT_READ |
Route46Sign ("ROUTE 46 / MOUNTAIN RD. AHEAD") |
Object events (def_object_events)
| const | sprite | x | y | movement | type | script label | event flag |
|---|---|---|---|---|---|---|---|
ROUTE46_POKEFAN_M |
SPRITE_POKEFAN_M |
12 | 18 | STANDING_LEFT |
TRAINER (sight 2) |
TrainerHikerBailey |
-1 |
ROUTE46_YOUNGSTER |
SPRITE_YOUNGSTER |
3 | 13 | STANDING_RIGHT |
TRAINER (sight 4) |
TrainerCamperTed |
-1 |
ROUTE46_LASS |
SPRITE_LASS |
1 | 15 | STANDING_RIGHT |
TRAINER (sight 4) |
TrainerPicnickerErin1 |
-1 |
ROUTE46_FRUIT_TREE1 |
SPRITE_FRUIT_TREE |
7 | 5 | STILL |
SCRIPT |
Route46FruitTree1 (fruittree FRUITTREE_ROUTE_46_1) |
-1 |
ROUTE46_FRUIT_TREE2 |
SPRITE_FRUIT_TREE |
8 | 6 | STILL |
SCRIPT |
Route46FruitTree2 (fruittree FRUITTREE_ROUTE_46_2) |
-1 |
ROUTE46_POKE_BALL |
SPRITE_POKE_BALL |
0 | 12 | STILL |
ITEMBALL |
Route46DireHit (itemball DIRE_HIT) |
EVENT_ROUTE_46_DIRE_HIT |
Scripts of interest
TrainerPicnickerErin1(4d:5574), headertrainer PICNICKER, ERIN1, EVENT_BEAT_PICNICKER_ERIN, .... Same phone shape as Kenji/Parry:checkcellnum PHONE_PICNICKER_ERIN,EVENT_ERIN_ASKED_FOR_PHONE_NUMBER,askforphonenumber PHONE_PICNICKER_ERIN,EVENT_ERIN_READY_FOR_REMATCH; rematch partiesERIN2(after Elite Four) andERIN3(after Kanto power restored).TrainerCamperTed(4d:5560) andTrainerHikerBailey(4d:5602) are plain after-battle text scripts.Route46FruitTree1=FRUITTREE_ROUTE_46_1= index 4 =BERRY;Route46FruitTree2=FRUITTREE_ROUTE_46_2= index 10 =PRZCUREBERRY(data/items/fruit_trees.asm). Those are the walkthrough's "Berry and PrzCure Berry".
Flags and events
| constant | defined in | read/written by | meaning for a bot |
|---|---|---|---|
EVENT_BEAT_HIKER_BAILEY |
constants/event_flags.asm:828 |
trainer header |
set on win |
EVENT_BEAT_CAMPER_TED |
:538 |
trainer header |
set on win |
EVENT_BEAT_PICNICKER_ERIN |
:645 |
trainer header |
set on win |
EVENT_ERIN_ASKED_FOR_PHONE_NUMBER / EVENT_ERIN_READY_FOR_REMATCH |
constants/event_flags.asm |
TrainerPicnickerErin1.Script |
phone / rematch pair |
EVENT_ROUTE_46_DIRE_HIT |
:1117 |
item ball object | one-time pickup |
Items
| item | how obtained | source | one-time flag |
|---|---|---|---|
DIRE_HIT |
item ball at (0, 12) | Route46DireHit |
EVENT_ROUTE_46_DIRE_HIT |
BERRY |
fruit tree at (7, 5) | Route46FruitTree1 |
daily fruit-tree flag |
PRZCUREBERRY |
fruit tree at (8, 6) | Route46FruitTree2 |
daily fruit-tree flag |
Trainers
| const | class | id | party | script label | rematch/phone |
|---|---|---|---|---|---|
HIKER, BAILEY |
HIKER |
11 | HikerGroup "BAILEY": five 13 GEODUDE |
TrainerHikerBailey |
no |
CAMPER, TED |
CAMPER ($36) |
11 | CamperGroup "TED": 17 MANKEY |
TrainerCamperTed |
no |
PICNICKER, ERIN1 |
PICNICKER ($35) |
10 | PicnickerGroup "ERIN": 16 PONYTA, 16 PONYTA |
TrainerPicnickerErin1 |
PHONE_PICNICKER_ERIN |
Wild encounters
data/wild/johto_grass.asm:2291 def_grass_wildmons ROUTE_46, 10 percent
morn/day/nite, same for Gold and Silver:
- morn/day: 3 GEODUDE, 2 SPEAROW, 2 RATTATA, 2 GEODUDE, 3 SPEAROW, 3 JIGGLYPUFF, 5 JIGGLYPUFF.
- nite: 3 GEODUDE, 3 RATTATA, 2 RATTATA, 2 GEODUDE, 4 GEODUDE, 3 JIGGLYPUFF, 5 JIGGLYPUFF.
No water table. Fishing group FISHGROUP_SHORE. Headbutt:
data/wild/treemon_maps.asm:27 -> TREEMON_SET_CANYON.
Roaming beast: data/wild/roammon_maps.asm:34 roam_map ROUTE_46, ROUTE_45, ROUTE_29.
MAP_NEW_BARK_TOWN (Elm's Lab beats only)
The New Bark Town / Elm's Lab map tables belong to section 00. What this
section needs is the two ProfElmScript branches the walkthrough triggers.
maps/ElmsLab.asm:50ProfElmScript:faceplayer/opentext/checkevent EVENT_GOT_SS_TICKET_FROM_ELM(->ElmCheckMasterBall) /checkevent EVENT_BEAT_ELITE_FOUR(->ElmGiveTicketScript).ElmCheckMasterBall:checkevent EVENT_GOT_MASTER_BALL_FROM_ELM/checkflag ENGINE_RISINGBADGE->ElmGiveMasterBallScript. This is the actual gate on the Master Ball: the eighth Johto badge, not "eight badges" counted.constants/engine_flags.asm:45isENGINE_RISINGBADGE.ElmGiveMasterBallScript(60:4268):verbosegiveitem MASTER_BALL/iffalse .notdone/setevent EVENT_GOT_MASTER_BALL_FROM_ELM. A full bag means the flag is never set, so a bot must have a free slot.ElmCheckEverstone:checkevent EVENT_GOT_EVERSTONE_FROM_ELM/checkevent EVENT_SHOWED_TOGEPI_TO_ELM->ElmGiveEverstoneScript/checkevent EVENT_TOLD_ELM_ABOUT_TOGEPI_OVER_THE_PHONE, thensetval TOGEPI+special FindPartyMonThatSpeciesYourTrainerID, and the same forTOGETIC. That special is why the walkthrough tells you to withdraw Togepi into the party first - the check is a party scan, and it additionally requires the mon to be your own OT.ShowElmTogepiScriptsetsEVENT_SHOWED_TOGEPI_TO_ELMand falls intoElmGiveEverstoneScript(60:424f):verbosegiveitem EVERSTONE/iffalse ElmScript_NoRoomForEverstone/setevent EVENT_GOT_EVERSTONE_FROM_ELM.- Mom's savings:
maps/PlayersHouse1F.asm:85MomScript,.BankOfMomat line 115 runsspecial BankOfMom.
MAP_ROUTE_27
- Script:
maps/Route27.asm - Blocks:
maps/Route27.blk - Header:
data/maps/maps.asm:473->map Route27, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_27, MUSIC_ROUTE_26, FALSE, PALETTE_AUTO, FISHGROUP_OCEAN - Dimensions:
constants/map_constants.asm:438->map_const ROUTE_27, 40, 9(80 x 18 cells) - Connections (
data/maps/attributes.asm:170):connection west, NewBarkTown, NEW_BARK_TOWN, 0;connection east, Route26, ROUTE_26, -45 - Scene var:
data/maps/scenes.asm:27scene_var ROUTE_27, wRoute27SceneID - Symbols:
4a:46ba Route27_MapScripts,4a:4cac Route27_MapEvents
Warps (def_warp_events)
| idx | x | y | destination map | dest warp |
|---|---|---|---|---|
| 1 | 33 | 7 | ROUTE_27_SANDSTORM_HOUSE |
1 |
| 2 | 26 | 5 | TOHJO_FALLS |
1 |
| 3 | 36 | 5 | TOHJO_FALLS |
2 |
Coord events (def_coord_events)
| scene | x | y | script label | effect |
|---|---|---|---|---|
SCENE_ROUTE27_FIRST_STEP_INTO_KANTO (0) |
18 | 10 | FirstStepIntoKantoLeftScene |
fisher turns LEFT, showemote EMOTE_SHOCK, applymovement ROUTE27_FISHER, Route27FisherStepLeftTwiceMovement (two step LEFT) |
SCENE_ROUTE27_FIRST_STEP_INTO_KANTO (0) |
19 | 10 | FirstStepIntoKantoRightScene |
same but one step LEFT |
Both fall into FirstStepIntoKantoScene_Continue: turnobject PLAYER, RIGHT,
writetext Route27FisherHeyText, writetext Route27FisherText ("You've taken
your first step into KANTO"), then setscene SCENE_ROUTE27_NOOP (1) so it never
fires again. The scene constants are generated by the def_scene_scripts /
scene_script macros in macros/scripts/maps.asm; the sym table confirms
SCENE_ROUTE27_FIRST_STEP_INTO_KANTO = 00 and SCENE_ROUTE27_NOOP = 01.
BG events (def_bg_events)
| x | y | type | script/item |
|---|---|---|---|
| 25 | 7 | BGEVENT_READ |
TohjoFallsSign ("TOHJO FALLS / The Link Between KANTO and JOHTO") |
Object events (def_object_events)
| const | sprite | x | y | movement | type | script label | event flag |
|---|---|---|---|---|---|---|---|
ROUTE27_COOLTRAINER_M1 |
SPRITE_COOLTRAINER_M |
49 | 7 | STANDING_UP |
TRAINER (sight 3) |
TrainerCooltrainermBlake |
-1 |
ROUTE27_COOLTRAINER_M2 |
SPRITE_COOLTRAINER_M |
58 | 6 | STANDING_LEFT |
TRAINER (sight 5) |
TrainerCooltrainermBrian |
-1 |
ROUTE27_COOLTRAINER_F1 |
SPRITE_COOLTRAINER_F |
72 | 11 | STANDING_UP |
TRAINER (sight 5) |
TrainerCooltrainerfReena |
-1 |
ROUTE27_COOLTRAINER_F2 |
SPRITE_COOLTRAINER_F |
37 | 6 | SPINCLOCKWISE |
TRAINER (sight 2) |
TrainerCooltrainerfMegan |
-1 |
ROUTE27_YOUNGSTER1 |
SPRITE_YOUNGSTER |
64 | 7 | STANDING_LEFT |
TRAINER (sight 5) |
TrainerPsychicGilbert |
-1 |
ROUTE27_YOUNGSTER2 |
SPRITE_YOUNGSTER |
58 | 13 | STANDING_RIGHT |
TRAINER (sight 3) |
TrainerBirdKeeperJose2 |
-1 |
ROUTE27_POKE_BALL1 |
SPRITE_POKE_BALL |
60 | 12 | STILL |
ITEMBALL |
Route27TMSolarbeam (itemball TM_SOLARBEAM) |
EVENT_ROUTE_27_TM_SOLARBEAM |
ROUTE27_POKE_BALL2 |
SPRITE_POKE_BALL |
53 | 12 | STILL |
ITEMBALL |
Route27RareCandy (itemball RARE_CANDY) |
EVENT_ROUTE_27_RARE_CANDY |
ROUTE27_FISHER |
SPRITE_FISHER |
21 | 10 | SPINRANDOM_SLOW |
SCRIPT (sight 3) |
Route27FisherScript (jumptextfaceplayer Route27FisherText) |
-1 |
Scripts of interest
FirstStepIntoKantoLeftScene(4a:46c6) /FirstStepIntoKantoRightScene(4a:46d4) - the only forced cutscene on this route, described above. It is a coord event on the two cells (18, 10) and (19, 10), so a bot that lands on Route 27 by surfing will cross it.TrainerBirdKeeperJose2(4a:4706),trainer BIRD_KEEPER, JOSE2, EVENT_BEAT_BIRD_KEEPER_JOSE2, ..., phone contactPHONE_BIRDKEEPER_JOSE,EVENT_JOSE_ASKED_FOR_PHONE_NUMBER,EVENT_JOSE_READY_FOR_REMATCH; rematch partiesJOSE1(after Elite Four) andJOSE3(after Kanto power restored).TrainerCooltrainerfReena(4a:47bc),trainer COOLTRAINERF, REENA1, ..., phone contactPHONE_COOLTRAINERF_REENA; rematch partiesREENA2/REENA3.TrainerCooltrainermBlake(4a:4794),TrainerCooltrainermBrian(4a:47a8),TrainerPsychicGilbert(4a:46f2),TrainerCooltrainerfMegan(4a:484a) - plain after-battle text.
Flags and events
| constant | defined in | read/written by | meaning for a bot |
|---|---|---|---|
SCENE_ROUTE27_FIRST_STEP_INTO_KANTO = 0 |
generated in maps/Route27.asm (def_scene_scripts) |
coord events; cleared by setscene SCENE_ROUTE27_NOOP |
the Kanto welcome fires exactly once |
SCENE_ROUTE27_NOOP = 1 |
same | FirstStepIntoKantoScene_Continue |
scene after the cutscene |
EVENT_BEAT_COOLTRAINERM_BLAKE |
constants/event_flags.asm:867 |
trainer header |
set on win |
EVENT_BEAT_COOLTRAINERM_BRIAN |
:868 |
trainer header |
set on win |
EVENT_BEAT_COOLTRAINERF_REENA |
:886 |
trainer header |
set on win |
EVENT_BEAT_COOLTRAINERF_MEGAN |
:887 |
trainer header |
set on win |
EVENT_BEAT_PSYCHIC_GILBERT |
:572 |
trainer header |
set on win |
EVENT_BEAT_BIRD_KEEPER_JOSE2 |
:507 |
trainer header |
set on win |
EVENT_ROUTE_27_TM_SOLARBEAM |
:1100 |
item ball object | one-time pickup |
EVENT_ROUTE_27_RARE_CANDY |
:1101 |
item ball object | one-time pickup |
Items
| item | how obtained | source | one-time flag |
|---|---|---|---|
TM_SOLARBEAM (TM22) |
item ball at (60, 12), on the island past the whirlpool | Route27TMSolarbeam |
EVENT_ROUTE_27_TM_SOLARBEAM |
RARE_CANDY |
item ball at (53, 12), in the southern water | Route27RareCandy |
EVENT_ROUTE_27_RARE_CANDY |
Trainers
| const | class | id | party | script label | rematch/phone |
|---|---|---|---|---|---|
COOLTRAINERF, MEGAN |
COOLTRAINERF |
11 | "MEGAN" (TRAINERTYPE_MOVES): 32 BULBASAUR (GROWL/LEECH_SEED/POISONPOWDER/RAZOR_LEAF), 32 IVYSAUR (same), 32 VENUSAUR (BODY_SLAM/SLEEP_POWDER/RAZOR_LEAF/SWEET_SCENT) |
TrainerCooltrainerfMegan |
no |
COOLTRAINERM, BLAKE |
COOLTRAINERM |
11 | "BLAKE" (TRAINERTYPE_MOVES): 33 MAGNETON (THUNDERBOLT/SUPERSONIC/SWIFT/SCREECH), 31 QUAGSIRE (WATER_GUN/SLAM/AMNESIA/EARTHQUAKE), 31 EXEGGCUTE (LEECH_SEED/CONFUSION/SLEEP_POWDER/SOLARBEAM) |
TrainerCooltrainermBlake |
no |
COOLTRAINERM, BRIAN |
COOLTRAINERM |
12 | "BRIAN" (TRAINERTYPE_MOVES): 35 SANDSLASH (SAND_ATTACK/POISON_STING/SLASH/SWIFT) |
TrainerCooltrainermBrian |
no |
PSYCHIC_T, GILBERT |
PSYCHIC_T ($34) |
10 | "GILBERT": 30 STARMIE, 30 EXEGGCUTE, 34 GIRAFARIG | TrainerPsychicGilbert |
no |
BIRD_KEEPER, JOSE2 |
BIRD_KEEPER ($18) |
14 | "JOSE": 35 FARFETCH_D | TrainerBirdKeeperJose2 |
PHONE_BIRDKEEPER_JOSE |
COOLTRAINERF, REENA1 |
COOLTRAINERF |
10 | "REENA": 31 STARMIE, 33 NIDOQUEEN, 31 STARMIE | TrainerCooltrainerfReena |
PHONE_COOLTRAINERF_REENA |
Note the party order for Reena is STARMIE / NIDOQUEEN / STARMIE in the asm; the walkthrough lists it STARMIE / STARMIE / NIDOQUEEN.
Wild encounters
data/wild/kanto_grass.asm:1172 def_grass_wildmons ROUTE_27, 10 percent:
- Gold morn: 28 DODUO, 28 RATICATE, 30 DODUO, 28 QUAGSIRE, 32 PONYTA, 30 SANDSLASH, 30 SANDSLASH.
- Gold day: 28 DODUO, 28 RATICATE, 30 DODUO, 30 RATICATE, 32 PONYTA, 30 SANDSLASH, 30 SANDSLASH.
- Gold nite: 28 QUAGSIRE, 28 RATICATE, 30 QUAGSIRE, 30 RATICATE, 32 PONYTA, 30 SANDSLASH, 30 SANDSLASH.
- Silver swaps DODRIO/ARBOK in for some of those; see the
ELIF DEF(_SILVER)block at the same label.
data/wild/kanto_water.asm:96 def_water_wildmons ROUTE_27, 6 percent:
20 TENTACOOL, 15 TENTACOOL, 20 TENTACRUEL.
Fishing group FISHGROUP_OCEAN. Headbutt:
data/wild/treemon_maps.asm:8 -> TREEMON_SET_FOREST (Gold: CATERPIE /
METAPOD / EXEGGCUTE / BUTTERFREE common, PINECO in the rare table).
The walkthrough's Route 27 list omits Doduo's Gold-only DODRIO slots and does not mention that ARBOK is Silver-only.
MAP_TOHJO_FALLS
- Script:
maps/TohjoFalls.asm - Blocks:
maps/TohjoFalls.blk - Header:
data/maps/maps.asm:152->map TohjoFalls, TILESET_CAVE, CAVE, LANDMARK_TOHJO_FALLS, MUSIC_UNION_CAVE, TRUE, PALETTE_NITE, FISHGROUP_LAKE(TRUEin the phone slot = no phone calls inside) - Dimensions:
constants/map_constants.asm:139->map_const TOHJO_FALLS, 15, 9(30 x 18 cells) - Connections: none (
data/maps/attributes.asm:471is a baremap_attributesrow) - Symbols:
47:4a20 TohjoFalls_MapScripts,47:4a24 TohjoFalls_MapEvents
Warps (def_warp_events)
| idx | x | y | destination map | dest warp |
|---|---|---|---|---|
| 1 | 13 | 15 | ROUTE_27 |
2 |
| 2 | 25 | 15 | ROUTE_27 |
3 |
Coord events / BG events
Both empty.
Object events (def_object_events)
| const | sprite | x | y | movement | type | script label | event flag |
|---|---|---|---|---|---|---|---|
TOHJOFALLS_POKE_BALL |
SPRITE_POKE_BALL |
2 | 6 | STILL |
ITEMBALL |
TohjoFallsMoonStone (itemball MOON_STONE) |
EVENT_TOHJO_FALLS_MOON_STONE |
Scripts of interest
TohjoFallsMoonStone (47:4a22) is the only script on the map. There is no
def_scene_scripts body and no callbacks - the whole map is terrain.
Flags and events
| constant | defined in | read/written by | meaning for a bot |
|---|---|---|---|
EVENT_TOHJO_FALLS_MOON_STONE |
constants/event_flags.asm:1098 |
item ball object | one-time pickup |
Items
| item | how obtained | source | one-time flag |
|---|---|---|---|
MOON_STONE |
item ball at (2, 6) - across the water, west end | TohjoFallsMoonStone |
EVENT_TOHJO_FALLS_MOON_STONE |
Trainers
None.
Wild encounters
data/wild/kanto_grass.asm:199 def_grass_wildmons TOHJO_FALLS, encounter
rate 4 percent in Gold / 6 percent in Silver, identical morn/day/nite:
22 ZUBAT, 22 RATICATE, 22 GOLBAT, 21 SLOWPOKE, 20 RATTATA, 23 SLOWPOKE,
23 SLOWPOKE.
data/wild/kanto_water.asm:103 def_water_wildmons TOHJO_FALLS, 4 percent:
20 GOLDEEN, 20 SLOWPOKE, 20 SEAKING.
Fishing group FISHGROUP_LAKE. No treemon map entry (it is a cave).
The walkthrough's list (Rattata / Slowpoke / Seaking) is a subset - ZUBAT, GOLBAT, RATICATE and GOLDEEN are also here.
MAP_ROUTE_27_SANDSTORM_HOUSE
- Script:
maps/Route27SandstormHouse.asm - Blocks: none (indoor, uses the shared house layout)
- Header:
data/maps/maps.asm:483->map Route27SandstormHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_27, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - Dimensions:
constants/map_constants.asm:448->map_const ROUTE_27_SANDSTORM_HOUSE, 4, 4(8 x 8 cells) - Symbols:
60:6352 SandstormHouseWoman
Warps (def_warp_events)
| idx | x | y | destination map | dest warp |
|---|---|---|---|---|
| 1 | 2 | 7 | ROUTE_27 |
1 |
| 2 | 3 | 7 | ROUTE_27 |
1 |
Coord events
None.
BG events (def_bg_events)
| x | y | type | script/item |
|---|---|---|---|
| 0 | 1 | BGEVENT_READ |
SandstormHouseBookshelf (jumpstd MagazineBookshelfScript) |
| 1 | 1 | BGEVENT_READ |
SandstormHouseBookshelf |
Object events (def_object_events)
| const | sprite | x | y | movement | type | script label | event flag |
|---|---|---|---|---|---|---|---|
ROUTE27SANDSTORMHOUSE_GRANNY |
SPRITE_GRANNY |
2 | 4 | STANDING_DOWN |
SCRIPT |
SandstormHouseWoman |
-1 |
Scripts of interest
SandstormHouseWoman (60:6352):
faceplayer / opentext
checkevent EVENT_GOT_TM37_SANDSTORM ; iftrue .AlreadyGotItem
special GetFirstPokemonHappiness
writetext SandstormHouseWomanText1 / promptbutton
ifgreater 150 - 1, .Loyal ; i.e. happiness >= 150
sjump .Disloyal
.Loyal: writetext SandstormHouseWomanLoyalText / promptbutton
verbosegiveitem TM_SANDSTORM / iffalse .Done
setevent EVENT_GOT_TM37_SANDSTORM
The precise gate is happiness of the first non-egg party member >= 150
(ifgreater 150 - 1), not "one of your Pokemon is happy" as the walkthrough
puts it - only the first party slot is read, by
special GetFirstPokemonHappiness.
Flags and events
| constant | defined in | read/written by | meaning for a bot |
|---|---|---|---|
EVENT_GOT_TM37_SANDSTORM |
constants/event_flags.asm:126 |
SandstormHouseWoman |
one-time; also short-circuits straight to the TM description text |
Items
| item | how obtained | source | one-time flag |
|---|---|---|---|
TM_SANDSTORM (TM37) |
talk to the granny with a >= 150 happiness lead mon | SandstormHouseWoman.Loyal |
EVENT_GOT_TM37_SANDSTORM |
MAP_ROUTE_26
- Script:
maps/Route26.asm - Blocks:
maps/Route26.blk - Header:
data/maps/maps.asm:472->map Route26, TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_26, MUSIC_ROUTE_26, FALSE, PALETTE_AUTO, FISHGROUP_OCEAN - Dimensions:
constants/map_constants.asm:437->map_const ROUTE_26, 10, 54(20 x 108 cells) - Connections (
data/maps/attributes.asm:167):connection west, Route27, ROUTE_27, 45(west only - the north end is the Victory Road gate warp, not a connection) - Symbols:
4a:4000 Route26_MapScripts,4a:4638 Route26_MapEvents
Warps (def_warp_events)
| idx | x | y | destination map | dest warp |
|---|---|---|---|---|
| 1 | 7 | 5 | VICTORY_ROAD_GATE |
3 |
| 2 | 15 | 57 | ROUTE_26_HEAL_HOUSE |
1 |
| 3 | 5 | 71 | DAY_OF_WEEK_SIBLINGS_HOUSE |
1 |
Coord events
None.
BG events (def_bg_events)
| x | y | type | script/item |
|---|---|---|---|
| 8 | 6 | BGEVENT_READ |
Route26Sign ("ROUTE 26 / #MON LEAGUE RECEPTION GATE") |
Object events (def_object_events)
| const | sprite | x | y | movement | type | script label | event flag |
|---|---|---|---|---|---|---|---|
ROUTE26_COOLTRAINER_M1 |
SPRITE_COOLTRAINER_M |
11 | 16 | STANDING_RIGHT |
TRAINER (sight 2) |
TrainerCooltrainermJake |
-1 |
ROUTE26_COOLTRAINER_M2 |
SPRITE_COOLTRAINER_M |
9 | 38 | STANDING_LEFT |
TRAINER (sight 5) |
TrainerCooltrainermGaven3 |
-1 |
ROUTE26_COOLTRAINER_F1 |
SPRITE_COOLTRAINER_F |
10 | 56 | SPINRANDOM_FAST |
TRAINER (sight 3) |
TrainerCooltrainerfJoyce |
-1 |
ROUTE26_COOLTRAINER_F2 |
SPRITE_COOLTRAINER_F |
5 | 8 | STANDING_RIGHT |
TRAINER (sight 4) |
TrainerCooltrainerfBeth1 |
-1 |
ROUTE26_YOUNGSTER |
SPRITE_YOUNGSTER |
13 | 79 | STANDING_RIGHT |
TRAINER (sight 4) |
TrainerPsychicRichard |
-1 |
ROUTE26_FISHER |
SPRITE_FISHER |
10 | 92 | STANDING_DOWN |
TRAINER (sight 3) |
TrainerFisherScott |
-1 |
ROUTE26_FRUIT_TREE |
SPRITE_FRUIT_TREE |
14 | 54 | STILL |
SCRIPT |
Route26FruitTree (fruittree FRUITTREE_ROUTE_26) |
-1 |
ROUTE26_POKE_BALL |
SPRITE_POKE_BALL |
9 | 15 | STILL |
ITEMBALL |
Route26MaxElixer (itemball MAX_ELIXER) |
EVENT_ROUTE_26_MAX_ELIXER |
The y coordinates run south (high) to north (low), which matches the walkthrough's order exactly: Scott (92) -> Richard (79) -> Day-of-Week house (71) -> heal house (57) -> Joyce (56) -> Ice Berry tree (54) -> Gaven (38) -> Jake (16) -> Max Elixer (15) -> Beth (8) -> gate warp (5).
Scripts of interest
TrainerCooltrainermGaven3(4a:4016), headertrainer COOLTRAINERM, GAVEN3, EVENT_BEAT_COOLTRAINERM_GAVEN, .... Phone contactPHONE_COOLTRAINERM_GAVEN; rematch partiesGAVEN1(after Elite Four) andGAVEN2(after Kanto power restored). His after-battle text is the one that names Victory Road as the way to the League.TrainerCooltrainerfBeth1(4a:40b8), phonePHONE_COOLTRAINERF_BETH; rematch partiesBETH2/BETH3.TrainerCooltrainermJake(4a:4002),TrainerCooltrainerfJoyce(4a:40a4),TrainerPsychicRichard(4a:4146),TrainerFisherScott(4a:415a) - plain after-battle text.Route26FruitTree=FRUITTREE_ROUTE_26= index 14 =ICE_BERRY.
Flags and events
| constant | defined in | read/written by | meaning for a bot |
|---|---|---|---|
EVENT_BEAT_FISHER_SCOTT |
constants/event_flags.asm:605 |
trainer header |
set on win |
EVENT_BEAT_PSYCHIC_RICHARD |
:571 |
trainer header |
set on win |
EVENT_BEAT_COOLTRAINERF_JOYCE |
:884 |
trainer header |
set on win |
EVENT_BEAT_COOLTRAINERM_GAVEN |
:866 |
trainer header |
set on win |
EVENT_BEAT_COOLTRAINERM_JAKE |
:865 |
trainer header |
set on win |
EVENT_BEAT_COOLTRAINERF_BETH |
:885 |
trainer header |
set on win |
EVENT_GAVEN_ASKED_FOR_PHONE_NUMBER / EVENT_GAVEN_READY_FOR_REMATCH |
constants/event_flags.asm |
TrainerCooltrainermGaven3.Script |
phone / rematch pair |
EVENT_BETH_ASKED_FOR_PHONE_NUMBER / EVENT_BETH_READY_FOR_REMATCH |
constants/event_flags.asm |
TrainerCooltrainerfBeth1.Script |
phone / rematch pair |
EVENT_ROUTE_26_MAX_ELIXER |
:1099 |
item ball object | one-time pickup |
Items
| item | how obtained | source | one-time flag |
|---|---|---|---|
MAX_ELIXER |
item ball at (9, 15) | Route26MaxElixer |
EVENT_ROUTE_26_MAX_ELIXER |
ICE_BERRY |
fruit tree at (14, 54) | Route26FruitTree / FRUITTREE_ROUTE_26 |
daily fruit-tree flag |
There is exactly one Max Elixer on Route 26. The walkthrough mentions it twice ("grab the Max Elixir" then "you can also pick up an Max Elixir if you take the jumps back to heal") - both refer to the same ball at (9, 15).
Trainers
| const | class | id | party | script label | rematch/phone |
|---|---|---|---|---|---|
FISHER, SCOTT |
FISHER ($25) |
21 | FisherGroup "SCOTT": 30 QWILFISH, 30 QWILFISH, 34 SEAKING |
TrainerFisherScott |
no |
PSYCHIC_T, RICHARD |
PSYCHIC_T |
9 | "RICHARD": 36 ESPEON | TrainerPsychicRichard |
no |
COOLTRAINERF, JOYCE |
COOLTRAINERF |
8 | "JOYCE" (TRAINERTYPE_MOVES): 36 PIKACHU (QUICK_ATTACK/DOUBLE_TEAM/THUNDERBOLT/THUNDER), 32 BLASTOISE (BITE/CURSE/SURF/RAIN_DANCE) |
TrainerCooltrainerfJoyce |
no |
COOLTRAINERM, GAVEN3 |
COOLTRAINERM |
10 | "GAVEN" (TRAINERTYPE_MOVES): 32 VICTREEBEL (WRAP/TOXIC/ACID/RAZOR_LEAF), 32 KINGLER (BUBBLEBEAM/STOMP/GUILLOTINE/PROTECT), 32 FLAREON (SAND_ATTACK/QUICK_ATTACK/BITE/FIRE_SPIN) |
TrainerCooltrainermGaven3 |
PHONE_COOLTRAINERM_GAVEN |
COOLTRAINERM, JAKE |
COOLTRAINERM |
9 | "JAKE" (TRAINERTYPE_MOVES): 33 PARASECT (LEECH_LIFE/SPORE/SLASH/SWORDS_DANCE), 35 GOLDUCK (CONFUSION/SCREECH/PSYCH_UP/FURY_SWIPES) |
TrainerCooltrainermJake |
no |
COOLTRAINERF, BETH1 |
COOLTRAINERF |
9 | "BETH" (TRAINERTYPE_MOVES): 36 RAPIDASH (STOMP/FIRE_SPIN/FURY_ATTACK/AGILITY) |
TrainerCooltrainerfBeth1 |
PHONE_COOLTRAINERF_BETH |
Wild encounters
data/wild/kanto_grass.asm:1117 def_grass_wildmons ROUTE_26, 10 percent:
- Gold morn: 28 DODUO, 28 SANDSLASH, 32 PONYTA, 30 DODUO, 30 DODRIO, 30 RATICATE, 30 QUAGSIRE.
- Gold day: 28 DODUO, 28 SANDSLASH, 32 PONYTA, 30 DODUO, 30 RATICATE, 30 DODRIO, 30 DODRIO.
- Gold nite: 28 RATICATE, 28 SANDSLASH, 32 PONYTA, 30 RATICATE, 30 QUAGSIRE, 32 QUAGSIRE, 32 QUAGSIRE.
- Silver replaces SANDSLASH with RATICATE and DODRIO with ARBOK; see the
ELIF DEF(_SILVER)block at the same label.
data/wild/kanto_water.asm:89 def_water_wildmons ROUTE_26, 6 percent:
30 TENTACOOL, 25 TENTACOOL, 30 TENTACRUEL.
Fishing group FISHGROUP_OCEAN. Headbutt:
data/wild/treemon_maps.asm:7 -> TREEMON_SET_FOREST.
Note SANDSLASH is Gold-only on Route 26; the walkthrough lists ARBOK, which is the Silver slot.
MAP_ROUTE_26_HEAL_HOUSE
- Script:
maps/Route26HealHouse.asm - Header:
data/maps/maps.asm:481->map Route26HealHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_26, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - Dimensions:
constants/map_constants.asm:446->map_const ROUTE_26_HEAL_HOUSE, 4, 4 - Symbols:
60:60e6 Route26HealHouseTeacherScript
Warps (def_warp_events)
| idx | x | y | destination map | dest warp |
|---|---|---|---|---|
| 1 | 2 | 7 | ROUTE_26 |
2 |
| 2 | 3 | 7 | ROUTE_26 |
2 |
Coord events
None.
BG events (def_bg_events)
| x | y | type | script/item |
|---|---|---|---|
| 0 | 1 | BGEVENT_READ |
Route26HealHouseBookshelf (jumpstd PictureBookshelfScript) |
| 1 | 1 | BGEVENT_READ |
Route26HealHouseBookshelf |
Object events (def_object_events)
| const | sprite | x | y | movement | type | script label | event flag |
|---|---|---|---|---|---|---|---|
ROUTE26HEALHOUSE_TEACHER |
SPRITE_TEACHER |
2 | 3 | STANDING_DOWN |
SCRIPT |
Route26HealHouseTeacherScript |
-1 |
Scripts of interest
Route26HealHouseTeacherScript (60:60e6):
faceplayer / opentext / writetext Route26HealHouseRestAWhileText /
waitbutton / closetext / special FadeOutToBlack /
special ReloadSpritesNoPalettes / playmusic MUSIC_HEAL /
special HealParty / pause 60 / special FadeInFromBlack /
special RestartMapMusic / writetext Route26HealHouseKeepAtItText / end.
No flag guards this at all - it is unconditional and repeatable, which is what makes it a free Pokemon Center for a bot grinding Route 26.
MAP_DAY_OF_WEEK_SIBLINGS_HOUSE
- Script:
maps/DayOfWeekSiblingsHouse.asm - Header:
data/maps/maps.asm:482->map DayOfWeekSiblingsHouse, TILESET_HOUSE, INDOOR, LANDMARK_ROUTE_26, MUSIC_AZALEA_TOWN, FALSE, PALETTE_DAY, FISHGROUP_SHORE - Dimensions:
constants/map_constants.asm:447->map_const DAY_OF_WEEK_SIBLINGS_HOUSE, 4, 4
Warps (def_warp_events)
| idx | x | y | destination map | dest warp |
|---|---|---|---|---|
| 1 | 2 | 7 | ROUTE_26 |
3 |
| 2 | 3 | 7 | ROUTE_26 |
3 |
Coord events / BG events
Both empty.
Object events (def_object_events)
| const | sprite | x | y | movement | type | script label | event flag |
|---|---|---|---|---|---|---|---|
DAYOFWEEKSIBLINGSHOUSE_POKEDEX |
SPRITE_POKEDEX |
3 | 3 | STILL |
SCRIPT |
DayOfWeekSiblingsHousePokedexScript |
-1 |
Scripts of interest
DayOfWeekSiblingsHousePokedexScript is two nested yesorno prompts over
DayOfWeekSiblingsHousePokedexText1/2/3. Text 3 is Monica's roster, and it
matches the walkthrough exactly: Monday MONICA / ROUTE 40, Tuesday TUSCANY /
ROUTE 29, Wednesday WESLEY / LAKE OF RAGE, Thursday ARTHUR / ROUTE 36, and so
on. Pure text - no flags, no items.
MAP_VICTORY_ROAD_GATE (badge check only)
Victory Road itself is section 17. Transcribed here because the gate is this section's terminal blocker.
- Script:
maps/VictoryRoadGate.asm - Header:
data/maps/maps.asm:467->map VictoryRoadGate, TILESET_GATE, GATE, LANDMARK_ROUTE_26, MUSIC_INDIGO_PLATEAU, FALSE, PALETTE_DAY, FISHGROUP_SHORE - Dimensions:
constants/map_constants.asm:433->map_const VICTORY_ROAD_GATE, 10, 9 - Symbols:
5f:4fdc VictoryRoadGateBadgeCheckScript,5f:4ff8 _VictoryRoadGateBadgeCheckScript.AllEightBadges
Warps (def_warp_events)
| idx | x | y | destination map | dest warp |
|---|---|---|---|---|
| 1 | 17 | 7 | ROUTE_22 |
1 |
| 2 | 18 | 7 | ROUTE_22 |
1 |
| 3 | 9 | 17 | ROUTE_26 |
1 |
| 4 | 10 | 17 | ROUTE_26 |
1 |
| 5 | 9 | 0 | VICTORY_ROAD |
1 |
| 6 | 10 | 0 | VICTORY_ROAD |
1 |
| 7 | 1 | 7 | ROUTE_28 |
2 |
| 8 | 2 | 7 | ROUTE_28 |
2 |
Coord events (def_coord_events)
| scene | x | y | script label | effect |
|---|---|---|---|---|
SCENE_VICTORYROADGATE_BADGE_CHECK (0) |
10 | 11 | VictoryRoadGateBadgeCheckScript |
turnobject PLAYER, LEFT then the shared badge check |
Object events (def_object_events)
| const | sprite | x | y | movement | type | script label | event flag |
|---|---|---|---|---|---|---|---|
VICTORYROADGATE_OFFICER |
SPRITE_OFFICER |
8 | 11 | STANDING_RIGHT |
SCRIPT |
VictoryRoadGateOfficerScript |
-1 |
VICTORYROADGATE_BLACK_BELT1 |
SPRITE_BLACK_BELT |
7 | 5 | STANDING_RIGHT |
SCRIPT |
VictoryRoadGateLeftBlackBeltScript |
EVENT_OPENED_MT_SILVER |
VICTORYROADGATE_BLACK_BELT2 |
SPRITE_BLACK_BELT |
12 | 5 | STANDING_LEFT |
SCRIPT |
VictoryRoadGateRightBlackBeltScript |
EVENT_FOUGHT_SNORLAX |
Scripts of interest
_VictoryRoadGateBadgeCheckScript:
opentext / writetext VictoryRoadGateOfficerText / promptbutton
readvar VAR_BADGES
ifgreater NUM_JOHTO_BADGES - 1, .AllEightBadges ; badges > 7
writetext VictoryRoadGateNotEnoughBadgesText / waitbutton / closetext
applymovement PLAYER, VictoryRoadGateStepDownMovement ; one step DOWN
end
.AllEightBadges:
writetext VictoryRoadGateEightBadgesText / waitbutton / closetext
setscene SCENE_VICTORYROADGATE_NOOP
end
readvar VAR_BADGES is a popcount of the Johto badge byte, not a badge
index. setscene SCENE_VICTORYROADGATE_NOOP (1) permanently disarms the coord
event once you pass. The two black belts are hidden until
EVENT_OPENED_MT_SILVER / EVENT_FOUGHT_SNORLAX
(constants/event_flags.asm:1265, :1266), so on a first pass neither is
present.
3. Blockers and gates
| Gate | Enforced by (file:label) | Requirement | Unlock condition |
|---|---|---|---|
| New Bark Town -> Route 27 crossing | engine/events/overworld.asm TrySurfOW (ld de, ENGINE_FOGBADGE / ld d, SURF / CheckPartyMove) |
SURF in the party and FOGBADGE | Beat Morty (section 07) |
| Route 27 east-half water (Blake onward, Rare Candy) | same TrySurfOW |
SURF + FOGBADGE | as above |
| Tohjo Falls falls | engine/events/overworld.asm TryWaterfallOW (ld d, WATERFALL / CheckPartyMove then ld de, ENGINE_RISINGBADGE / CheckEngineFlag) plus CheckMapCanWaterfall (must face UP and the tile above must pass CheckWaterfallTile, home/map_objects.asm:185, i.e. COLL_WATERFALL $33 or COLL_CURRENT_DOWN $3b) |
WATERFALL + RISINGBADGE | Beat Clair (section 13) |
| Route 27 whirlpool (island with TM22 + Jose) | engine/events/overworld.asm TryWhirlpoolOW (ld d, WHIRLPOOL / CheckPartyMove, then ld de, ENGINE_GLACIERBADGE / CheckEngineFlag, then TryWhirlpoolMenu) |
WHIRLPOOL + GLACIERBADGE | Beat Pryce (section 11) |
| Master Ball from Elm | maps/ElmsLab.asm ElmCheckMasterBall -> checkflag ENGINE_RISINGBADGE |
RISINGBADGE set, EVENT_GOT_MASTER_BALL_FROM_ELM clear, and a free bag slot (verbosegiveitem iffalse) |
Beat Clair |
| Everstone from Elm | maps/ElmsLab.asm ElmCheckEverstone -> EVENT_SHOWED_TOGEPI_TO_ELM, otherwise setval TOGEPI / special FindPartyMonThatSpeciesYourTrainerID (and TOGETIC), gated on EVENT_TOLD_ELM_ABOUT_TOGEPI_OVER_THE_PHONE |
Togepi or Togetic in the party, hatched by you (OT check) | Withdraw it from the PC before talking |
| TM37 SANDSTORM | maps/Route27SandstormHouse.asm SandstormHouseWoman -> special GetFirstPokemonHappiness / ifgreater 150 - 1 |
first non-egg party member's happiness >= 150 | Walk/level/haircut the lead mon |
| Victory Road Gate | maps/VictoryRoadGate.asm _VictoryRoadGateBadgeCheckScript -> readvar VAR_BADGES / ifgreater NUM_JOHTO_BADGES - 1 |
all eight Johto badges | Fails soft: you get pushed one step DOWN by VictoryRoadGateStepDownMovement, the gate is not warp-locked |
| Route 45 / 46 Dark Cave side trips | plain warps, no check | - | none; the Dark Cave interior gates are section 15's |
Nothing on Routes 45, 46 or 26 is gated by an EVENT_* or a badge. Route 27 is
the only map in this section where a field move blocks forward progress.
4. Bot checklist
Preconditions for the whole section: eight Johto badges, SURF + WATERFALL + WHIRLPOOL in the party, at least a few free bag slots.
Route 45 (entered from Blackthorn's south edge):
MAP_ROUTE_45- walk south from the north connection. Optional: warp 1 at (2, 5) into Dark Cave Blackthorn Entrance.- Item ball
ROUTE45_POKE_BALL3at (4, 21) -> ELIXER. Post:EVENT_ROUTE_45_ELIXER. - Trainer
ROUTE45_POKEFAN_M3at (5, 28), sight 3 -> Hiker Parry (PARRY3, 29 ONIX). Post:EVENT_BEAT_HIKER_PARRY. Talk again twice forPHONE_HIKER_PARRY. - Trainer
ROUTE45_POKEFAN_M1at (10, 16), sight 1 -> Hiker Erik. Post:EVENT_BEAT_HIKER_ERIK. - Trainer
ROUTE45_COOLTRAINER_Mat (17, 18), sight 1 -> Cooltrainer Ryan. Post:EVENT_BEAT_COOLTRAINERM_RYAN. - Item ball
ROUTE45_POKE_BALL4at (8, 33) -> MAX_POTION. Post:EVENT_ROUTE_45_MAX_POTION. - Trainer
ROUTE45_COOLTRAINER_Fat (4, 36), sight 3 -> Cooltrainer Kelly. Post:EVENT_BEAT_COOLTRAINERF_KELLY. - Trainer
ROUTE45_BLACK_BELTat (11, 50), sight 2, spins -> Blackbelt Kenji. Post:EVENT_BEAT_BLACKBELT_KENJI. Second talk setsEVENT_KENJI_ASKED_FOR_PHONE_NUMBERand offersPHONE_BLACKBELT_KENJI. - Item ball
ROUTE45_POKE_BALL1at (6, 51) -> X_SPECIAL. Post:EVENT_ROUTE_45_X_SPECIAL. - Trainer
ROUTE45_POKEFAN_M4at (9, 64), sight 1 -> Hiker Timothy. Post:EVENT_BEAT_HIKER_TIMOTHY. - Trainer
ROUTE45_POKEFAN_M2at (15, 64), sight 2 -> Hiker Michael. Post:EVENT_BEAT_HIKER_MICHAEL. (The walkthrough never names him.) - Item ball
ROUTE45_POKE_BALL2at (6, 66) -> REVIVE. Post:EVENT_ROUTE_45_REVIVE. - Hidden item: face the bg event at (13, 80), press A -> PP_UP.
Post:
EVENT_ROUTE_45_HIDDEN_PP_UP. - Fruit tree
ROUTE45_FRUIT_TREEat (16, 82) -> MYSTERYBERRY (daily). - Cross the west connection into
MAP_ROUTE_46(block offset 36).
Route 46:
- Trainer
ROUTE46_POKEFAN_Mat (12, 18), sight 2 -> Hiker Bailey (five 13 GEODUDE). Post:EVENT_BEAT_HIKER_BAILEY. - Trainer
ROUTE46_YOUNGSTERat (3, 13), sight 4 -> Camper Ted. Post:EVENT_BEAT_CAMPER_TED. - Item ball
ROUTE46_POKE_BALLat (0, 12) -> DIRE_HIT. Post:EVENT_ROUTE_46_DIRE_HIT. - Trainer
ROUTE46_LASSat (1, 15), sight 4 -> Picnicker Erin. Post:EVENT_BEAT_PICNICKER_ERIN. Second talk offersPHONE_PICNICKER_ERIN. - Fruit trees at (7, 5) -> BERRY and (8, 6) -> PRZCUREBERRY (daily).
- Optional warp 3 at (14, 5) -> Dark Cave Violet Entrance.
- Exit south via warps 1/2 at (7, 33) / (8, 33) into
MAP_ROUTE_29_ROUTE_46_GATE, or the south connection to Route 29.
New Bark Town:
- FLY to
MAP_NEW_BARK_TOWN; warp 1 at (6, 3) ->MAP_ELMS_LAB. - Talk to
ELMSLAB_ELMat (5, 2). Pre:ENGINE_RISINGBADGEset,EVENT_GOT_MASTER_BALL_FROM_ELMclear, free bag slot. Post:EVENT_GOT_MASTER_BALL_FROM_ELM, MASTER_BALL in bag. - Withdraw Togepi/Togetic into the party at a PC, return to Elm, talk again.
Post:
EVENT_SHOWED_TOGEPI_TO_ELM,EVENT_GOT_EVERSTONE_FROM_ELM, EVERSTONE in bag. - Optional:
MAP_PLAYERS_HOUSE_1Fwarp 2 at (13, 5), talk to Mom ->MomScript.BankOfMom->special BankOfMomto withdraw savings. - Leave New Bark Town east; the connection to
MAP_ROUTE_27is water. Use SURF (FOGBADGE required).
Route 27, first pass:
- Walking onto cell (18, 10) or (19, 10) fires the coord event
FirstStepIntoKantoLeftScene/...RightScene. It is unskippable; wait it out. Post: map scene =SCENE_ROUTE27_NOOP. - Optional: item ball
ROUTE27_POKE_BALL2at (53, 12) -> RARE_CANDY, in the southern water. Post:EVENT_ROUTE_27_RARE_CANDY. (See section 6 - the walkthrough puts this before Tohjo Falls; the coordinate is well east of the west cave mouth.) - Warp 2 at (26, 5) ->
MAP_TOHJO_FALLSwarp 1.
Tohjo Falls:
- Surf west, use WATERFALL facing UP where the tile above is
COLL_WATERFALL. Requires RISINGBADGE. - Item ball
TOHJOFALLS_POKE_BALLat (2, 6) -> MOON_STONE. Post:EVENT_TOHJO_FALLS_MOON_STONE. - Exit via warp 2 at (25, 15) ->
MAP_ROUTE_27warp 3 (36, 5).
Route 27, second pass:
- Trainer
ROUTE27_COOLTRAINER_F2at (37, 6), sight 2, spins -> Cooltrainer Megan. Post:EVENT_BEAT_COOLTRAINERF_MEGAN. - Warp 1 at (33, 7) ->
MAP_ROUTE_27_SANDSTORM_HOUSE. Talk toROUTE27SANDSTORMHOUSE_GRANNYat (2, 4). Pre: lead party mon happiness= 150 and a free bag slot. Post:
EVENT_GOT_TM37_SANDSTORM, TM37 in bag. - Surf east. Trainer
ROUTE27_COOLTRAINER_M1at (49, 7), sight 3 -> Cooltrainer Blake. Post:EVENT_BEAT_COOLTRAINERM_BLAKE. - Trainer
ROUTE27_COOLTRAINER_M2at (58, 6), sight 5 -> Cooltrainer Brian. Post:EVENT_BEAT_COOLTRAINERM_BRIAN. - Trainer
ROUTE27_YOUNGSTER1at (64, 7), sight 5 -> Psychic Gilbert. Post:EVENT_BEAT_PSYCHIC_GILBERT. - Surf south, use WHIRLPOOL on the whirlpool block (GLACIERBADGE required).
- Trainer
ROUTE27_YOUNGSTER2at (58, 13), sight 3 -> Bird Keeper Jose. Post:EVENT_BEAT_BIRD_KEEPER_JOSE2. Second talk offersPHONE_BIRDKEEPER_JOSE. - Item ball
ROUTE27_POKE_BALL1at (60, 12) -> TM_SOLARBEAM. Post:EVENT_ROUTE_27_TM_SOLARBEAM. - Trainer
ROUTE27_COOLTRAINER_F1at (72, 11), sight 5 -> Cooltrainer Reena. Post:EVENT_BEAT_COOLTRAINERF_REENA. Second talk offersPHONE_COOLTRAINERF_REENA. - East connection into
MAP_ROUTE_26(block offset -45).
Route 26 (walk north, y decreasing):
- Trainer
ROUTE26_FISHERat (10, 92), sight 3 -> Fisher Scott. Post:EVENT_BEAT_FISHER_SCOTT. - Trainer
ROUTE26_YOUNGSTERat (13, 79), sight 4 -> Psychic Richard. Post:EVENT_BEAT_PSYCHIC_RICHARD. - Optional: warp 3 at (5, 71) ->
MAP_DAY_OF_WEEK_SIBLINGS_HOUSE, read theSPRITE_POKEDEXobject at (3, 3) for Monica's roster. No flags. - Warp 2 at (15, 57) ->
MAP_ROUTE_26_HEAL_HOUSE, talk toROUTE26HEALHOUSE_TEACHERat (2, 3) for a free full heal. Repeatable, no flag. - Trainer
ROUTE26_COOLTRAINER_F1at (10, 56), sight 3, spins -> Cooltrainer Joyce. Post:EVENT_BEAT_COOLTRAINERF_JOYCE. - Fruit tree
ROUTE26_FRUIT_TREEat (14, 54) -> ICE_BERRY (daily). - Trainer
ROUTE26_COOLTRAINER_M2at (9, 38), sight 5 -> Cooltrainer Gaven. Post:EVENT_BEAT_COOLTRAINERM_GAVEN. Second talk offersPHONE_COOLTRAINERM_GAVEN. - Trainer
ROUTE26_COOLTRAINER_M1at (11, 16), sight 2 -> Cooltrainer Jake. Post:EVENT_BEAT_COOLTRAINERM_JAKE. - Item ball
ROUTE26_POKE_BALLat (9, 15) -> MAX_ELIXER. Post:EVENT_ROUTE_26_MAX_ELIXER. - Trainer
ROUTE26_COOLTRAINER_F2at (5, 8), sight 4 -> Cooltrainer Beth. Post:EVENT_BEAT_COOLTRAINERF_BETH. Second talk offersPHONE_COOLTRAINERF_BETH. - Warp 1 at (7, 5) ->
MAP_VICTORY_ROAD_GATEwarp 3. - In the gate, step onto (10, 11). Pre:
VAR_BADGES>= 8. On pass the map scene becomesSCENE_VICTORYROADGATE_NOOPand warps 5/6 at (9, 0) / (10, 0) lead intoMAP_VICTORY_ROAD(section 17).
5. Port coverage
| Beat | Port file | Status |
|---|---|---|
| Map blocks, warps, coord events, bg events, object events for every map here | src/import/RomExtractorGen2.lua:787-980 (warps / coordEvents / bgEvents / objects readers), src/world/gen2/Map.lua, src/world/gen2/World.lua:5013 (coord events), :5257 (World:interact) |
implemented, data-driven - nothing per-map is hand-written, so these routes come for free once the ROM is imported |
| Map connections (Blackthorn -> R45 -> R46, New Bark -> R27 -> R26) | src/world/gen2/World.lua:407-430 |
implemented |
| Overworld trainer struct, eyesight, battle, beat flag | src/world/gen2/Trainers.lua, src/import/RomExtractorGen2.lua:2963-2968 (reads OBJECTTYPE_TRAINER headers), driver tests/drivers/gold_trainer_smoke.lua |
implemented |
Trainer parties incl. TRAINERTYPE_MOVES rows (Timothy, Ryan, Blake, Brian, Joyce, Gaven, Jake, Beth, Megan) |
src/world/gen2/Trainers.lua party build over the extracted trainer table |
implemented |
| Phone registration + rematch flags for Kenji, Parry, Erin, Jose, Reena, Gaven, Beth | src/core/gen2/Phone.lua:427-455 (Phone.REMATCH_EVENTS, contacts 11/12/13/14/34/35/36 present) |
implemented |
askforphonenumber / checkcellnum opcodes |
src/script/gen2/Opcodes.lua:156, :47 |
implemented |
| Fruit trees (Mystery Berry, Berry, PrzCure Berry, Ice Berry) | src/script/gen2/Opcodes.lua:160 (fruittree), src/core/gen2/Apricorns.lua:351-460 (item lookup, picked flag, daily reset) |
implemented |
| Hidden item PP UP at Route 45 (13, 80) | src/world/gen2/HiddenItems.lua, consumed at src/world/gen2/World.lua:5285 |
implemented |
Item ball pickup (all nine OBJECTTYPE_ITEMBALL objects in this section) |
extractor stores obj.itemball (src/import/RomExtractorGen2.lua:2968) but nothing in src/world/ reads it - World:interact only dispatches on npc.def.trainer, strength boulders, npc.def.scriptKey and HiddenItems |
missing - walking up to a Poke Ball object and pressing A does nothing. This blocks ELIXER, MAX_POTION, X_SPECIAL, REVIVE, DIRE_HIT, RARE_CANDY, TM_SOLARBEAM, MOON_STONE, MAX_ELIXER |
| SURF gate (FOGBADGE) for the New Bark -> Route 27 crossing | src/world/gen2/FieldMoves.lua:103-110 (FieldMoves.BADGE.SURF = "FOG"), driver tests/drivers/gold_water_moves.lua |
implemented |
| WHIRLPOOL gate (GLACIERBADGE) + block replacement for the Route 27 island | src/world/gen2/FieldMoves.lua:219-251, World:tryWhirlpoolOW, driver tests/drivers/gold_water_moves.lua |
implemented |
| WATERFALL climb (RISINGBADGE) in Tohjo Falls | src/world/gen2/FieldMoves.lua:258-266, src/world/gen2/World.lua:4037-4046 (runWaterfall / waterfallStep), :4217 (tryWaterfallOW), src/world/gen2/Permissions.lua:136 (COLL_WATERFALL $33 + COLL_CURRENT_DOWN $3b) |
implemented; no driver covers it (gold_water_moves.lua is SURF + WHIRLPOOL only) |
| Route 27 "first step into Kanto" coord event + scene | src/world/gen2/World.lua:5013 (coord event scan), :1161-1183 (World:scene), src/script/gen2/Opcodes.lua:25 (setscene), :122-123 (showemote, turnobject), :110 (applymovement) |
implemented |
| Pokegear region flip to Kanto after that scene | src/ui/gen2/Pokegear.lua:1070, :1658 (region follows the player's landmark, cp KANTO_LANDMARK) |
implemented |
| Sandstorm house happiness check | src/script/gen2/Specials.lua:1506 (GetFirstPokemonHappiness), src/script/gen2/Opcodes.lua:163 (verbosegiveitem), src/core/gen2/Happiness.lua |
implemented |
| Route 26 heal house | src/script/gen2/Specials.lua:450 (HealParty), :999 (FadeOutToBlack), :1025 (ReloadSpritesNoPalettes), :1059 (RestartMapMusic) |
implemented |
Elm Master Ball / Everstone (checkflag ENGINE_RISINGBADGE, FindPartyMonThatSpeciesYourTrainerID) |
src/script/gen2/Specials.lua:1134, src/script/gen2/Opcodes.lua:163 |
implemented |
Mom's savings (special BankOfMom) |
src/ui/gen2/BankOfMom.lua |
implemented |
Victory Road gate badge check (readvar VAR_BADGES) |
src/world/gen2/World.lua:117 (VAR_BADGES = 0x07), :1240 (popcount read) |
implemented |
| Roaming beasts on Routes 45/46 | src/core/gen2/Roamers.lua, driver tests/drivers/gold_roamers.lua |
implemented |
| Wild encounter tables (grass morn/day/nite, water, fish, treemons) | src/battle/gen2/Encounter.lua over the extracted encounter tables |
implemented |
6. Unresolved / verify by hand
- "Camper Quentin" does not exist in pokegold. The walkthrough puts a
Camper Quentin on Route 45 with 27 FEAROW / 30 PRIMEAPE / 30 TAUROS. There
is no
QUENTINconstant anywhere in the checkout (grep -rn QUENTIN /Users/bryanbassett/Documents/development/pokegoldis empty), no camper object onmaps/Route45.asm, and the only TAUROS line indata/trainers/parties.asmis a level 35 one inCooltrainerMGroup"SEAN". The Route 45 trainer the walkthrough is probably confusing this with is Hiker Michael (25 GEODUDE / 25 GRAVELER / 25 GOLEM), whom it never mentions. - "A Revive and a Nugget" on Route 45. There is no NUGGET on Route 45.
The four item balls are X_SPECIAL, REVIVE, ELIXER and MAX_POTION, and the
only hidden item is
hiddenitem PP_UP, EVENT_ROUTE_45_HIDDEN_PP_UPat (13, 80). Treat "Nugget" as an error and pick up the PP UP instead. - Route 27 Rare Candy placement. The walkthrough says to surf "southeast
of the cave entrance" before entering Tohjo Falls. The item ball is at
cell (53, 12), which is east of the eastern Tohjo exit (36, 5) and far
east of the western entrance (26, 5). Whether the southern water is
continuous from the landing point (~x 18-21) all the way to x 53 was not
verified - it would need reading
maps/Route27.blkagainst theTILESET_JOHTOcollision table. A bot should simply grab it on the way to Blake rather than trusting the stated ordering. - Cooltrainer Gaven's second mon. The walkthrough says Krabby; the asm
says
db 32, KINGLERinCooltrainerMGroupentry 10. - Cooltrainer Reena's party order. Walkthrough: STARMIE, STARMIE,
NIDOQUEEN. Asm (
CooltrainerFGroupentry 10): 31 STARMIE, 33 NIDOQUEEN, 31 STARMIE. - Hiker Erik's party order. Walkthrough: Machop, Machop, Graveler. Asm
(
HikerGroupentry 7): 24 MACHOP, 27 GRAVELER, 27 MACHOP. - Wild lists are incomplete in the walkthrough. Route 46 also has JIGGLYPUFF (3 and 5); Tohjo Falls also has ZUBAT, GOLBAT, RATICATE and GOLDEEN; Route 26/27's ARBOK entries are Silver-only while SANDSLASH and DODRIO are the Gold slots. The walkthrough's per-route lists appear to be a Gold/Silver merge.
- Tohjo Falls MOON STONE is never mentioned.
TohjoFallsMoonStoneat (2, 6) is the only object on the map. - "Head down the other waterfall". There is no downward WATERFALL move in
the engine. Descending is a
COLL_CURRENT_DOWN($3b) tile that carries the surfing player;CheckWaterfallTile(home/map_objects.asm:185) accepts bothCOLL_WATERFALLandCOLL_CURRENT_DOWNprecisely so the climb loop keeps running. Whether the port'sWorld:waterfallStephandles the descend direction as well as the climb was not verified. - Kenji's phone number timing. The walkthrough says "talk to him again
and he will give you his phone number", which matches - but the asm needs
two post-battle talks: the first sets
EVENT_KENJI_ASKED_FOR_PHONE_NUMBERand runsAskNumber1MScript, andaskforphonenumberonly runs after thatscallreturns. Bots should budget two A-press cycles per phone trainer, not one. - The walkthrough's Route 45 "LEFT PATH ... Elixir ... one trainer (Hiker
Parry)" reads as if the Elixir is inside Dark Cave. Both the Elixir
(4, 21) and Parry (5, 28) are on Route 45 itself. There is a separate
hidden Elixer inside Dark Cave (
maps/DarkCaveVioletEntrance.asmbg_event 26, 3, BGEVENT_ITEM, DarkCaveVioletEntranceHiddenElixer), which belongs to section 15.