Files
gen1recomp/docs/gold-walkthrough/asm-walk/section-06-bug-catching-contest-and-sudowoodo.md
T
bryanthaboi ae6cac89e1 G2 support
2026-08-11 11:53:30 -04:00

63 KiB

Section 06 - Bug Catching Contest and Sudowoodo

Source: ../section-06-bug-catching-contest-and-sudowoodo.txt Maps covered: MAP_GOLDENROD_FLOWER_SHOP, MAP_ROUTE_35_GOLDENROD_GATE, MAP_ROUTE_35, MAP_ROUTE_35_NATIONAL_PARK_GATE, MAP_NATIONAL_PARK, MAP_NATIONAL_PARK_BUG_CONTEST, MAP_ROUTE_36_NATIONAL_PARK_GATE, MAP_ROUTE_36, MAP_ROUTE_37 (listed by the walkthrough header, never entered by its route)

Badges / key milestones in this section:

  • SQUIRTBOTTLE (key item) - gated behind ENGINE_PLAINBADGE, i.e. Whitney must already be beaten before this section can be started at all.
  • Bug-Catching Contest run (Tue/Thu/Sat only) - SUN STONE / EVERSTONE / GOLD BERRY / BERRY.
  • EVENT_FOUGHT_SUDOWOODO - the single event that unblocks Route 36 west<->east, which is the only land route between Goldenrod and Violet through Route 36.
  • TM08 ROCK SMASH (EVENT_GOT_TM08_ROCK_SMASH), TM04 ROLLOUT, TM28 DIG, QUICK CLAW.
  • No badge is earned in this section.

Everything in this file was transcribed from files that were opened; nothing is reconstructed from memory. Symbol addresses are bank:addr from pokegold-symbols/pokegold.sym.


1. Route order

The walkthrough's own prose is out of order in one place: it opens by collecting the SQUIRTBOTTLE in Goldenrod, then much later describes Floria running off to fetch it. In pokegold the SQUIRTBOTTLE has no Route 36 precondition at all (see "Unresolved / verify by hand"), so the opening order is the one a bot should follow.

# Map constant asm file Enter via Leaves via Why (walkthrough beat)
1 MAP_GOLDENROD_FLOWER_SHOP maps/GoldenrodFlowerShop.asm GOLDENROD_CITY warp 6 @ (33, 5) warp 1/2 @ (2,7)/(3,7) -> GOLDENROD_CITY 6 Talk to the teacher for the SQUIRTBOTTLE
2 MAP_ROUTE_35_GOLDENROD_GATE maps/Route35GoldenrodGate.asm GOLDENROD_CITY warp 13 @ (19, 1) -> gate warp 3 warp 1/2 @ (4,0)/(5,0) -> ROUTE_35 1/2 Randy hands over Kenya the SPEAROW with FLOWER MAIL
3 MAP_ROUTE_35 maps/Route35.asm gate warp @ (9,33)/(10,33) warp 3 @ (3, 5) -> ROUTE_35_NATIONAL_PARK_GATE 3 Six trainers + Officer Dirk, walk north
4 MAP_ROUTE_35_NATIONAL_PARK_GATE maps/Route35NationalParkGate.asm warp 3/4 @ (3,7)/(4,7) warp 1/2 @ (3,0)/(4,0) -> NATIONAL_PARK 3/4 Contest officer; optional entry to the Contest
5 MAP_NATIONAL_PARK_BUG_CONTEST maps/NationalParkBugContest.asm script warp NATIONAL_PARK_BUG_CONTEST, 10, 47 from the south gate (or 33, 18 from the north gate) contest timer / balls exhausted, or either gate Optional Tue/Thu/Sat Contest
6 MAP_NATIONAL_PARK maps/NationalPark.asm warp 3/4 @ (10,47)/(11,47) warp 1/2 @ (33,18)/(33,19) -> ROUTE_36_NATIONAL_PARK_GATE 1/2 QUICK CLAW, Beverly, Jack, Krise, William, TM28 DIG
7 MAP_ROUTE_36_NATIONAL_PARK_GATE maps/Route36NationalParkGate.asm warp 1/2 @ (0,4)/(0,5) warp 3/4 @ (9,4)/(9,5) -> ROUTE_36 1/2 Contest results / prize holding
8 MAP_ROUTE_36 maps/Route36.asm warp 1/2 @ (18,8)/(18,9) south connection @ y=17 -> ROUTE_35; later east connection -> VIOLET_CITY Ice Berry, Psychic Mark, Schoolboy Alan, Sudowoodo, TM08
9 MAP_ROUTE_35 (again) maps/Route35.asm north connection from ROUTE_36 (offset 0) back north to ROUTE_36 Cut the tree, Bug Catcher Arnie, Bird Keeper Bryan, TM04 ROLLOUT
10 MAP_ROUTE_36 (again) maps/Route36.asm north connection from ROUTE_35 east connection -> VIOLET_CITY Sudowoodo cleared, then east into Violet City

Spills into the next section: step 10's east connection (connection east, VioletCity, VIOLET_CITY, 0 in data/maps/attributes.asm) drops the player into MAP_VIOLET_CITY, which belongs to a neighbouring section. Route 37 (MAP_ROUTE_37, north connection off Route 36 with offset 10) is named in this section's header but the walkthrough never routes into it; its data is recorded below for completeness because the item list ("Blk/Blu/Red Apricorn", "Ice Berry") mixes 36 and 37.


2. Maps

MAP_GOLDENROD_FLOWER_SHOP

  • Script: maps/GoldenrodFlowerShop.asm
  • Blocks: maps/GoldenrodFlowerShop.blk
  • Header (data/maps/maps.asm:275): TILESET_HOUSE, INDOOR, LANDMARK_GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE
  • Dimensions: constants/map_constants.asm:253 -> map_const GOLDENROD_FLOWER_SHOP, 4, 4
  • Connections: none (indoor)

Warps (def_warp_events)

idx x y destination map dest warp
1 2 7 GOLDENROD_CITY 6
2 3 7 GOLDENROD_CITY 6

Coord events (def_coord_events) - none.

BG events (def_bg_events) - none. (FlowerShopShelf1, FlowerShopShelf2, FlowerShopRadio exist in the file but are marked ; unreferenced.)

Object events (def_object_events)

const sprite x y movement type script label event flag
GOLDENRODFLOWERSHOP_TEACHER SPRITE_TEACHER 2 4 SPRITEMOVEDATA_STANDING_RIGHT OBJECTTYPE_SCRIPT FlowerShopTeacherScript -1
GOLDENRODFLOWERSHOP_FLORIA SPRITE_LASS 5 6 SPRITEMOVEDATA_WANDER (1,1) OBJECTTYPE_SCRIPT FlowerShopFloriaScript -1

Scripts of interest

  • FlowerShopTeacherScript (57:52d1) - checkevent EVENT_GOT_SQUIRTBOTTLE / iftrue .Lalala; then checkflag ENGINE_PLAINBADGE / iffalse .Lalala. Only with the badge and without the event does it faceplayer / opentext / writetext GoldenrodFlowerShopTeacherBetterThanWhitneyText / promptbutton / verbosegiveitem SQUIRTBOTTLE / setevent EVENT_GOT_SQUIRTBOTTLE. Note the bug in the cart: there is no iffalse after verbosegiveitem, so a full PACK still sets EVENT_GOT_SQUIRTBOTTLE and the item is lost. A bot must have a free KEY ITEM slot.
  • FlowerShopFloriaScript (57:52f4) - pure flavour, branches on ENGINE_PLAINBADGE. Gives nothing.

Flags and events

constant defined in read/written by meaning for a bot
EVENT_GOT_SQUIRTBOTTLE constants/event_flags.asm:101 read+written by FlowerShopTeacherScript one-shot; set even on a full bag
ENGINE_PLAINBADGE constants/engine_flags.asm:40 read by FlowerShopTeacherScript, FlowerShopFloriaScript Whitney's badge is the hard precondition for the whole section

Items

item how obtained source (label / bg_event / hidden) one-time flag
SQUIRTBOTTLE talk to teacher at (2,4) FlowerShopTeacherScript verbosegiveitem EVENT_GOT_SQUIRTBOTTLE

Trainers - none.

Wild encounters - none (indoor).


MAP_ROUTE_35_GOLDENROD_GATE

  • Script: maps/Route35GoldenrodGate.asm
  • Blocks: no .blk in maps/ for this map (gate maps of this group share generated attributes; data/maps/attributes.asm:542 carries map_attributes Route35GoldenrodGate, ROUTE_35_GOLDENROD_GATE, $00)
  • Header (data/maps/maps.asm:260): TILESET_GATE, GATE, LANDMARK_ROUTE_35, MUSIC_ROUTE_36, FALSE, PALETTE_DAY, FISHGROUP_SHORE
  • Dimensions: constants/map_constants.asm:239 -> map_const ROUTE_35_GOLDENROD_GATE, 5, 4
  • Connections: none. GATE environment is why the walkthrough's "ride your bike through" works.

Warps (def_warp_events)

idx x y destination map dest warp
1 4 0 ROUTE_35 1
2 5 0 ROUTE_35 2
3 4 7 GOLDENROD_CITY 13
4 5 7 GOLDENROD_CITY 13

Coord events - none. BG events - none.

Object events

const sprite x y movement type script label event flag
ROUTE35GOLDENRODGATE_RANDY SPRITE_OFFICER 0 4 SPRITEMOVEDATA_STANDING_RIGHT OBJECTTYPE_SCRIPT RandyScript -1
ROUTE35GOLDENRODGATE_POKEFAN_F SPRITE_POKEFAN_F 6 4 SPRITEMOVEDATA_WALK_UP_DOWN (0,1) OBJECTTYPE_SCRIPT Route35GoldenrodGatePokefanFScript -1

Scripts of interest

  • RandyScript (56:59ce) - four-way branch, checked in this order: EVENT_GOT_HP_UP_FROM_RANDY -> .gothpup; EVENT_GAVE_KENYA -> .questcomplete (verbosegiveitem HP_UP, setevent EVENT_GOT_HP_UP_FROM_RANDY); EVENT_GOT_KENYA -> .alreadyhavekenya; otherwise the offer. On YES it prints thanks, then readvar VAR_PARTYCOUNT / ifequal PARTY_LENGTH, .partyfull. Only with a free slot does it run givepoke SPEAROW, 10, NO_ITEM, GiftSpearowName, GiftSpearowOTName, givepokemail GiftSpearowMail, setevent EVENT_GOT_KENYA.
    • GiftSpearowMail = FLOWER_MAIL, text "DARK CAVE leads / to another road".
    • GiftSpearowName = KENYA, GiftSpearowOTName = RANDY.
    • The delivery target (EVENT_GAVE_KENYA) is on Route 31, i.e. a later section.
  • Route35GoldenrodGatePokefanFScript - flavour, branches on EVENT_FOUGHT_SUDOWOODO; its pre-Sudowoodo text is the in-game hint that the SQUIRTBOTTLE is what wakes the tree.

Flags and events

constant defined in read/written by meaning for a bot
EVENT_GOT_KENYA constants/event_flags.asm:89 RandyScript Spearow accepted
EVENT_GAVE_KENYA constants/event_flags.asm:90 read here, set on Route 31 enables the HP UP reward
EVENT_GOT_HP_UP_FROM_RANDY constants/event_flags.asm:91 RandyScript reward taken
EVENT_FOUGHT_SUDOWOODO constants/event_flags.asm:51 read here flavour only on this map

Items

item how obtained source one-time flag
SPEAROW "KENYA" (lv 10) + FLOWER_MAIL say YES to Randy with a party slot free RandyScript givepoke / givepokemail EVENT_GOT_KENYA
HP_UP return after delivering to Route 31 RandyScript .questcomplete EVENT_GOT_HP_UP_FROM_RANDY

Trainers - none. Wild encounters - none.


MAP_ROUTE_35

  • Script: maps/Route35.asm
  • Blocks: maps/Route35.blk (180 bytes = 10 x 18 blocks)
  • Header (data/maps/maps.asm:248): TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_35, MUSIC_ROUTE_36, FALSE, PALETTE_AUTO, FISHGROUP_POND
  • Dimensions: constants/map_constants.asm:227 -> map_const ROUTE_35, 10, 18 (so cell coordinates run 0..19 in x and 0..35 in y)
  • Connections (data/maps/attributes.asm:202): north ROUTE_36 offset 0, south GOLDENROD_CITY offset -5

Warps (def_warp_events)

idx x y destination map dest warp
1 9 33 ROUTE_35_GOLDENROD_GATE 1
2 10 33 ROUTE_35_GOLDENROD_GATE 2
3 3 5 ROUTE_35_NATIONAL_PARK_GATE 3

Coord events - none.

BG events (def_bg_events)

x y type script/item
1 7 BGEVENT_READ Route35Sign
11 31 BGEVENT_READ Route35Sign

Object events (def_object_events)

const sprite x y movement type script label event flag
ROUTE35_YOUNGSTER1 SPRITE_YOUNGSTER 3 19 STANDING_RIGHT OBJECTTYPE_TRAINER sight 4 TrainerCamperIvan -1
ROUTE35_YOUNGSTER2 SPRITE_YOUNGSTER 8 20 STANDING_DOWN OBJECTTYPE_TRAINER sight 3 TrainerCamperElliot -1
ROUTE35_LASS1 SPRITE_LASS 7 20 STANDING_DOWN OBJECTTYPE_TRAINER sight 3 TrainerPicnickerBrooke -1
ROUTE35_LASS2 SPRITE_LASS 11 24 STANDING_LEFT OBJECTTYPE_TRAINER sight 3 TrainerPicnickerKim -1
ROUTE35_YOUNGSTER3 SPRITE_YOUNGSTER 14 28 STANDING_DOWN OBJECTTYPE_TRAINER sight 0 TrainerBirdKeeperBryan -1
ROUTE35_FISHER SPRITE_FISHER 2 10 SPINCOUNTERCLOCKWISE OBJECTTYPE_TRAINER sight 2 TrainerFirebreatherWalt -1
ROUTE35_BUG_CATCHER SPRITE_BUG_CATCHER 16 7 STANDING_DOWN (radius 2,0) OBJECTTYPE_TRAINER sight 3 TrainerBugCatcherArnie -1
ROUTE35_SUPER_NERD SPRITE_SUPER_NERD 5 10 SPINRANDOM_FAST OBJECTTYPE_TRAINER sight 2 TrainerJugglerIrwin -1
ROUTE35_OFFICER SPRITE_OFFICER 5 6 STANDING_DOWN OBJECTTYPE_SCRIPT TrainerOfficerDirk -1
ROUTE35_FRUIT_TREE SPRITE_FRUIT_TREE 2 25 STILL OBJECTTYPE_SCRIPT Route35FruitTree (4b:5c07) -1
ROUTE35_POKE_BALL SPRITE_POKE_BALL 13 16 STILL OBJECTTYPE_ITEMBALL Route35TMRollout (4b:5c05) EVENT_ROUTE_35_TM_ROLLOUT

Scripts of interest

  • TrainerOfficerDirk - not an OBJECTTYPE_TRAINER object. It is a plain script that runs checktime NITE / iffalse .NotNight first, so Dirk only battles at night. Then checkevent EVENT_BEAT_OFFICER_DIRK, playmusic MUSIC_OFFICER_ENCOUNTER, winlosstext OfficerDirkBeatenText, 0, loadtrainer OFFICER, DIRK, startbattle, reloadmapafterbattle, setevent EVENT_BEAT_OFFICER_DIRK. A daytime bot will get OfficerDirkPrettyToughText and no battle.
  • TrainerJugglerIrwin / TrainerBugCatcherArnie - standard phone trainers. After the win, checkcellnum PHONE_JUGGLER_IRWIN / PHONE_BUG_CATCHER_ARNIE, then setevent EVENT_IRWIN_ASKED_FOR_PHONE_NUMBER / EVENT_ARNIE_ASKED_FOR_PHONE_NUMBER and askforphonenumber. The walkthrough's "head back to Arnie and talk to her for her phone number" is this second talk. Rematch tiers: Irwin uses EVENT_CLEARED_RADIO_TOWER -> IRWIN3, ENGINE_FLYPOINT_CIANWOOD -> IRWIN2, else IRWIN1. Arnie uses ENGINE_FLYPOINT_BLACKTHORN -> ARNIE3, ENGINE_FLYPOINT_LAKE_OF_RAGE -> ARNIE2, else ARNIE1.
  • Route35TMRollout -> itemball TM_ROLLOUT. Route35FruitTree -> fruittree FRUITTREE_ROUTE_35.

Flags and events

constant defined in read/written by meaning for a bot
EVENT_BEAT_PICNICKER_KIM / _CAMPER_ELLIOT / _PICNICKER_BROOKE / _CAMPER_IVAN / _JUGGLER_IRWIN / _FIREBREATHER_WALT / _BUG_CATCHER_ARNIE / _BIRD_KEEPER_BRYAN constants/event_flags.asm trainer macro rows per-trainer defeated bits
EVENT_BEAT_OFFICER_DIRK constants/event_flags.asm TrainerOfficerDirk set by hand, not by the trainer macro
EVENT_ROUTE_35_TM_ROLLOUT constants/event_flags.asm:1107 item ball object TM04 taken
EVENT_IRWIN_ASKED_FOR_PHONE_NUMBER, EVENT_IRWIN_READY_FOR_REMATCH constants/event_flags.asm Irwin script phone state machine
EVENT_ARNIE_ASKED_FOR_PHONE_NUMBER, EVENT_ARNIE_READY_FOR_REMATCH constants/event_flags.asm Arnie script phone state machine

Items

item how obtained source one-time flag
TM_ROLLOUT (TM04, constants/item_constants.asm:223) item ball at cell (13, 16) Route35TMRollout EVENT_ROUTE_35_TM_ROLLOUT
MYSTERYBERRY fruit tree object at (2, 25) FRUITTREE_ROUTE_35 -> data/items/fruit_trees.asm:14 daily reset (Apricorns/TryResetFruitTrees equivalent)

Trainers

const class id party (data/trainers/parties.asm label) script label rematch/phone
KIM PICNICKER (0x35) 4 parties.asm:2601 KIM - lv15 VULPIX TrainerPicnickerKim no
ELLIOT CAMPER (0x36) 4 parties.asm:2722 ELLIOT - lv13 SANDSHREW, lv15 MARILL TrainerCamperElliot no
BROOKE PICNICKER (0x35) 3 parties.asm:2596 BROOKE TRAINERTYPE_MOVES - lv16 PIKACHU (THUNDERSHOCK, GROWL, QUICK_ATTACK, DOUBLE_TEAM) TrainerPicnickerBrooke no
IVAN CAMPER (0x36) 3 parties.asm:2715 IVAN - lv10 DIGLETT, lv10 ZUBAT, lv14 DIGLETT TrainerCamperIvan no
IRWIN1 JUGGLER (0x31) 1 parties.asm:2384 IRWIN - lv2/6/10/14 VOLTORB TrainerJugglerIrwin yes (PHONE_JUGGLER_IRWIN); IRWIN2 parties.asm:2407, IRWIN3 parties.asm:2415
WALT FIREBREATHER (0x30) 6 parties.asm:2365 WALT - lv11 MAGMAR, lv13 MAGMAR TrainerFirebreatherWalt no
DIRK OFFICER (0x41) 2 parties.asm:3172 DIRK - lv14 GROWLITHE, lv14 GROWLITHE TrainerOfficerDirk night only
ARNIE1 BUG_CATCHER (0x24) 8 parties.asm:1455 ARNIE - lv15 VENONAT TrainerBugCatcherArnie yes (PHONE_BUG_CATCHER_ARNIE); ARNIE2 parties.asm:1487, ARNIE3 parties.asm:1492 (lv28 VENOMOTH w/ moves)
BRYAN BIRD_KEEPER (0x18) 3 parties.asm:534 BRYAN - lv12 PIDGEY, lv14 PIDGEOTTO TrainerBirdKeeperBryan no

Wild encounters - data/wild/johto_grass.asm, def_grass_wildmons ROUTE_35, rates 10/10/10 percent (morn/day/nite). Gold table:

slot morn day nite
1 12 NIDORAN_M 12 NIDORAN_M 12 NIDORAN_M
2 12 NIDORAN_F 12 NIDORAN_F 12 NIDORAN_F
3 14 DROWZEE 14 DROWZEE 14 DROWZEE
4 10 ABRA 10 ABRA 10 ABRA
5 14 PIDGEY 14 PIDGEY 14 HOOTHOOT
6 10 DITTO 10 DITTO 10 DITTO
7 12 YANMA 12 YANMA 12 YANMA

(Silver swaps slots 1/2 to NIDORAN_F/NIDORAN_M.)

Water (data/wild/johto_water.asm:156 def_water_wildmons ROUTE_35): 4 percent - 20 PSYDUCK, 15 PSYDUCK, 20 GOLDUCK. Fishing group is FISHGROUP_POND (data/wild/fish.asm:15). Headbutt: data/wild/treemon_maps.asm:16 -> TREEMON_SET_FOREST (data/wild/treemons.asm:34; Gold common CATERPIE/METAPOD/ EXEGGCUTE/BUTTERFREE, rare adds PINECO). Swarm: data/wild/swarm_grass.asm:6 is the YANMA swarm table for ROUTE_35.

Cut tree - maps/Route35.blk has exactly one cuttable block: block id $5b at block (8, 3), i.e. walk cells x 16-17, y 6-7. data/collision/field_move_blocks.asm:14 gives db $5b, $3c, 0 for TILESET_JOHTO. That is the tree the walkthrough tells the player to cut, and Bug Catcher Arnie at (16, 7) sits immediately behind it. Route 36, Route 37 and National Park have no cuttable blocks (National Park's .park entry in field_move_blocks.asm is only the two grass ids $13 and $03).


MAP_ROUTE_35_NATIONAL_PARK_GATE

  • Script: maps/Route35NationalParkGate.asm
  • Blocks: maps/Route35NationalParkGate.blk
  • Header (data/maps/maps.asm:261): TILESET_GATE, INDOOR, LANDMARK_ROUTE_35, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE
  • Dimensions: constants/map_constants.asm:240 -> map_const ROUTE_35_NATIONAL_PARK_GATE, 4, 4
  • Connections: none

Warps

idx x y destination map dest warp
1 3 0 NATIONAL_PARK 3
2 4 0 NATIONAL_PARK 4
3 3 7 ROUTE_35 3
4 4 7 ROUTE_35 3

Coord events - none. The map instead uses scene scripts:

scene id value script effect
SCENE_ROUTE35NATIONALPARKGATE_NOOP 0 Route35NationalParkGateNoop1Scene end
SCENE_ROUTE35NATIONALPARKGATE_UNUSED 1 Route35NationalParkGateNoop2Scene end
SCENE_ROUTE35NATIONALPARKGATE_LEAVE_CONTEST_EARLY 2 Route35NationalParkGateLeaveContestEarlyScene sdefer Route35NationalParkGateLeavingContestEarlyScript

(The SCENE_* names are generated by the scene_script macro, macros/scripts/maps.asm:25, in the order they appear in this file - there is no separate constants file for them.)

BG events

x y type script/item
5 0 BGEVENT_READ BugCatchingContestExplanationSign

Object events

const sprite x y movement type script label event flag
ROUTE35NATIONALPARKGATE_OFFICER1 SPRITE_OFFICER 2 1 STANDING_DOWN OBJECTTYPE_SCRIPT Route35OfficerScriptContest (56:5e0c) EVENT_ROUTE_35_NATIONAL_PARK_GATE_OFFICER_CONTEST_DAY
ROUTE35NATIONALPARKGATE_YOUNGSTER SPRITE_YOUNGSTER 6 5 WANDER (1,1) OBJECTTYPE_SCRIPT Route35NationalParkGateYoungsterScript EVENT_ROUTE_35_NATIONAL_PARK_GATE_YOUNGSTER
ROUTE35NATIONALPARKGATE_OFFICER2 SPRITE_OFFICER 0 3 STANDING_RIGHT OBJECTTYPE_SCRIPT Route35NationalParkGateOfficerScript EVENT_ROUTE_35_NATIONAL_PARK_GATE_OFFICER_NOT_CONTEST_DAY

Callbacks

  • MAPCALLBACK_NEWMAP -> Route35NationalParkGateCheckIfContestRunningCallback: checkflag ENGINE_BUG_CONTEST_TIMER -> setscene SCENE_..._LEAVE_CONTEST_EARLY, else setscene SCENE_..._NOOP.
  • MAPCALLBACK_OBJECTS -> Route35NationalParkGateCheckIfContestAvailableCallback (56:5db8): readvar VAR_WEEKDAY; TUESDAY/THURSDAY/SATURDAY -> appear OFFICER1, disappear YOUNGSTER, disappear OFFICER2. Otherwise checkflag ENGINE_BUG_CONTEST_TIMER (mid-contest keeps the contest officer), else the non-contest pair appears.

Scripts of interest

  • Route35OfficerScriptContest (56:5e0c) - the entry point. Order of checks:
    1. readvar VAR_WEEKDAY; SUNDAY/MONDAY/WEDNESDAY/FRIDAY -> Route35NationalParkGate_NoContestToday.
    2. checkflag ENGINE_DAILY_BUG_CONTEST -> Route35NationalParkGate_ContestIsOver.
    3. yesorno. NO -> Route35NationalParkGate_DeclinedToParticipate.
    4. readvar VAR_PARTYCOUNT / ifgreater 1, Route35NationalParkGate_LeaveTheRestBehind. With more than one mon it needs box space (readvar VAR_BOXSPACE, ifequal 0 -> _NoRoomInBox), rejects an EGG lead (special CheckFirstMonIsEgg) and rejects a fainted lead (special ContestDropOffMons -> iftrue _FirstMonIsFainted), then setevent EVENT_LEFT_MONS_WITH_CONTEST_OFFICER.
    5. Route35NationalParkGate_OkayToProceed: setflag ENGINE_BUG_CONTEST_TIMER, special PlayMapMusic, park ball text, special GiveParkBalls, special FadeOutToWhite, special SelectRandomBugContestContestants, warp NATIONAL_PARK_BUG_CONTEST, 10, 47.
  • Route35NationalParkGateLeavingContestEarlyScript - runs when re-entering this gate while ENGINE_BUG_CONTEST_TIMER is set. readvar VAR_CONTESTMINUTES / addval 1 / getnum STRING_BUFFER_3, yesorno. YES -> jumpstd BugContestResultsWarpScript. NO -> warp NATIONAL_PARK_BUG_CONTEST, 10, 47.

Flags and events

constant defined in read/written by meaning for a bot
ENGINE_BUG_CONTEST_TIMER constants/engine_flags.asm:26 set by the officer, cleared by BugContestResultsScript "contest in progress"
ENGINE_DAILY_BUG_CONTEST constants/engine_flags.asm:98 set by BugContestResultsScript "already ran today"
EVENT_LEFT_MONS_WITH_CONTEST_OFFICER constants/event_flags.asm:439 officer / results script party is being held
EVENT_ROUTE_35_NATIONAL_PARK_GATE_OFFICER_CONTEST_DAY / _NOT_CONTEST_DAY / _YOUNGSTER constants/event_flags.asm:1255-1256 (+ youngster) MAPCALLBACK_OBJECTS which NPC is visible
VAR_WEEKDAY constants/script_constants.asm (; 0b) callback + officer 0=Sunday .. 6=Saturday
VAR_CONTESTMINUTES constants/script_constants.asm:65 (; 11) early-exit script minutes left

Items - park balls only (see the Contest map). Trainers - none.


MAP_NATIONAL_PARK

  • Script: maps/NationalPark.asm
  • Blocks: maps/NationalPark.blk (540 bytes = 20 x 27 blocks)
  • Header (data/maps/maps.asm:93): TILESET_PARK, ROUTE, LANDMARK_NATIONAL_PARK, MUSIC_NATIONAL_PARK, FALSE, PALETTE_AUTO, FISHGROUP_SHORE
  • Dimensions: constants/map_constants.asm:80 -> map_const NATIONAL_PARK, 20, 27 (cells 0..39 x, 0..53 y)
  • Connections: none (data/maps/attributes.asm:412 has no connection rows). Both exits are warps.

Warps

idx x y destination map dest warp
1 33 18 ROUTE_36_NATIONAL_PARK_GATE 1
2 33 19 ROUTE_36_NATIONAL_PARK_GATE 2
3 10 47 ROUTE_35_NATIONAL_PARK_GATE 1
4 11 47 ROUTE_35_NATIONAL_PARK_GATE 2

Coord events - none.

BG events

x y type script/item
14 44 BGEVENT_READ NationalParkRelaxationSquareSign
27 31 BGEVENT_READ NationalParkBattleNoticeSign
6 47 BGEVENT_ITEM NationalParkHiddenFullHeal -> hiddenitem FULL_HEAL, EVENT_NATIONAL_PARK_HIDDEN_FULL_HEAL
12 4 BGEVENT_READ NationalParkTrainerTipsSign

Object events

const sprite x y movement type script label event flag
NATIONALPARK_LASS1 SPRITE_LASS 15 24 WALK_LEFT_RIGHT (1,0) OBJECTTYPE_SCRIPT NationalParkLassScript -1
NATIONALPARK_POKEFAN_F1 SPRITE_POKEFAN_F 14 4 STANDING_DOWN OBJECTTYPE_SCRIPT NationalParkPokefanFScript -1
NATIONALPARK_TEACHER1 SPRITE_TEACHER 27 40 STANDING_DOWN OBJECTTYPE_SCRIPT NationalParkTeacher1Script (43:4008) -1
NATIONALPARK_YOUNGSTER1 SPRITE_YOUNGSTER 11 41 STANDING_LEFT OBJECTTYPE_SCRIPT NationalParkYoungster1Script -1
NATIONALPARK_YOUNGSTER2 SPRITE_YOUNGSTER 10 41 STANDING_DOWN OBJECTTYPE_SCRIPT NationalParkYoungster2Script -1
NATIONALPARK_TEACHER2 SPRITE_TEACHER 17 41 WANDER (1,2) OBJECTTYPE_SCRIPT NationalParkTeacher2Script -1
NATIONALPARK_PERSIAN SPRITE_GROWLITHE 26 40 POKEMON OBJECTTYPE_SCRIPT NationalParkPersian -1
NATIONALPARK_YOUNGSTER3 SPRITE_YOUNGSTER 27 23 SPINRANDOM_FAST OBJECTTYPE_TRAINER sight 3 TrainerSchoolboyJack1 -1
NATIONALPARK_POKEFAN_F2 SPRITE_POKEFAN_F 18 29 SPINRANDOM_FAST OBJECTTYPE_TRAINER sight 2 TrainerPokefanfBeverly1 -1
NATIONALPARK_POKEFAN_M SPRITE_POKEFAN_M 16 9 SPINRANDOM_FAST OBJECTTYPE_TRAINER sight 2 TrainerPokefanmWilliam -1
NATIONALPARK_LASS2 SPRITE_LASS 8 14 SPINRANDOM_FAST OBJECTTYPE_TRAINER sight 3 TrainerLassKrise -1
NATIONALPARK_POKE_BALL1 SPRITE_POKE_BALL 35 12 STILL OBJECTTYPE_ITEMBALL NationalParkParlyzHeal (43:418f) EVENT_NATIONAL_PARK_PARLYZ_HEAL
NATIONALPARK_GAMEBOY_KID SPRITE_GAMEBOY_KID 26 6 STANDING_DOWN OBJECTTYPE_SCRIPT NationalParkGameboyKidScript -1
NATIONALPARK_POKE_BALL2 SPRITE_POKE_BALL 1 43 STILL OBJECTTYPE_ITEMBALL NationalParkTMDig (43:4191) EVENT_NATIONAL_PARK_TM_DIG

Scripts of interest

  • NationalParkTeacher1Script (43:4008) - the walkthrough's "lady on the bench". checkevent EVENT_GOT_QUICK_CLAW / iftrue .GotQuickClaw; else text, verbosegiveitem QUICK_CLAW, iffalse .NoRoom, setevent EVENT_GOT_QUICK_CLAW. Unlike the flower shop teacher this one does guard the setevent with iffalse.
  • TrainerSchoolboyJack1 - phone trainer (PHONE_SCHOOLBOY_JACK). Rematch tiers: EVENT_CLEARED_RADIO_TOWER -> JACK3, ENGINE_FLYPOINT_OLIVINE -> JACK2, else JACK1.
  • TrainerPokefanfBeverly1 - phone trainer (PHONE_POKEFAN_BEVERLY), female std scripts (AskNumber1FScript etc). Rematch tiers: EVENT_CLEARED_RADIO_TOWER -> BEVERLY3, ENGINE_FLYPOINT_MAHOGANY -> BEVERLY2, else BEVERLY1.

Flags and events

constant defined in read/written by meaning for a bot
EVENT_GOT_QUICK_CLAW constants/event_flags.asm:96 NationalParkTeacher1Script one-shot gift
EVENT_NATIONAL_PARK_PARLYZ_HEAL constants/event_flags.asm:1017 item ball ball taken
EVENT_NATIONAL_PARK_TM_DIG constants/event_flags.asm:1018 item ball ball taken
EVENT_NATIONAL_PARK_HIDDEN_FULL_HEAL constants/event_flags.asm:142 hiddenitem hidden item taken
EVENT_BEAT_SCHOOLBOY_JACK, EVENT_BEAT_POKEFANF_BEVERLY, EVENT_BEAT_POKEFANM_WILLIAM, EVENT_BEAT_LASS_KRISE constants/event_flags.asm trainer rows defeated bits

Items

item how obtained source one-time flag
QUICK_CLAW talk to teacher at (27, 40) NationalParkTeacher1Script EVENT_GOT_QUICK_CLAW
PARLYZ_HEAL item ball at (35, 12) NationalParkParlyzHeal EVENT_NATIONAL_PARK_PARLYZ_HEAL
TM_DIG (TM28) item ball at (1, 43) NationalParkTMDig EVENT_NATIONAL_PARK_TM_DIG
FULL_HEAL hidden, bg_event at (6, 47) NationalParkHiddenFullHeal EVENT_NATIONAL_PARK_HIDDEN_FULL_HEAL

Trainers

const class id party (data/trainers/parties.asm label) script label rematch/phone
BEVERLY1 POKEFANF (0x3e) 1 parties.asm:3115 BEVERLY TRAINERTYPE_ITEM - lv14 SNUBBULL @ BERRY TrainerPokefanfBeverly1 yes (PHONE_POKEFAN_BEVERLY); BEVERLY2 parties.asm:3125, BEVERLY3 parties.asm:3130
JACK1 SCHOOLBOY (0x17) 1 parties.asm:409 JACK - lv12 ODDISH, lv15 VOLTORB TrainerSchoolboyJack1 yes (PHONE_SCHOOLBOY_JACK); JACK2 parties.asm:484, JACK3 parties.asm:490
KRISE LASS (0x19) 4 parties.asm:658 KRISE - lv12 ODDISH, lv15 CUBONE TrainerLassKrise no
WILLIAM POKEFANM (0x3b) 1 parties.asm:2961 WILLIAM TRAINERTYPE_ITEM - lv14 RAICHU @ BERRY TrainerPokefanmWilliam no

Wild encounters - data/wild/johto_grass.asm, def_grass_wildmons NATIONAL_PARK, rates 10/10/10 percent. Gold table:

slot morn day nite
1 10 CATERPIE 10 CATERPIE 10 HOOTHOOT
2 10 METAPOD 10 METAPOD 10 HOOTHOOT
3 12 CATERPIE 11 SUNKERN 12 HOOTHOOT
4 12 PIDGEY 12 PIDGEY 12 HOOTHOOT
5 10 PIDGEY 13 SUNKERN 10 HOOTHOOT
6 14 PIDGEY 14 PIDGEY 14 HOOTHOOT
7 14 PIDGEY 14 PIDGEY 14 HOOTHOOT

(Silver uses WEEDLE/KAKUNA in slots 1-3 morn. The nite block is shared by both versions.) No NATIONAL_PARK entry exists in data/wild/johto_water.asm, data/wild/treemon_maps.asm or data/wild/swarm_grass.asm. The rare bugs the walkthrough lists (Scyther, Pinsir, Paras, Venonat, Butterfree, Beedrill) are Contest-only; see below.


MAP_NATIONAL_PARK_BUG_CONTEST

  • Script: maps/NationalParkBugContest.asm
  • Blocks: none of its own; data/maps/attributes.asm:413 gives map_attributes NationalParkBugContest, NATIONAL_PARK_BUG_CONTEST, $00 and the map is a same-geometry twin of National Park.
  • Header (data/maps/maps.asm:94): TILESET_PARK, ROUTE, LANDMARK_NATIONAL_PARK, MUSIC_BUG_CATCHING_CONTEST, FALSE, PALETTE_AUTO, FISHGROUP_SHORE
  • Dimensions: constants/map_constants.asm:81 -> map_const NATIONAL_PARK_BUG_CONTEST, 20, 27
  • Connections: none

Warps

idx x y destination map dest warp
1 33 18 ROUTE_36_NATIONAL_PARK_GATE 1
2 33 19 ROUTE_36_NATIONAL_PARK_GATE 1
3 10 47 ROUTE_35_NATIONAL_PARK_GATE 1
4 11 47 ROUTE_35_NATIONAL_PARK_GATE 1

(Warps 2 and 4 point at dest warp 1, not 2 - that is what the file says.)

Coord events - none.

BG events - same four rows as National Park, aimed at the ...BugContest... copies: (14,44) Relaxation Square sign, (27,31) Battle Notice sign, (6,47) BGEVENT_ITEM hiddenitem FULL_HEAL, EVENT_NATIONAL_PARK_HIDDEN_FULL_HEAL (the same flag as the normal map), (12,4) Trainer Tips sign.

Object events

const sprite x y movement type script label event flag
..._YOUNGSTER1 SPRITE_YOUNGSTER 19 29 WANDER (2,2) OBJECTTYPE_SCRIPT BugCatchingContestant1AScript EVENT_BUG_CATCHING_CONTESTANT_1A
..._YOUNGSTER2 SPRITE_YOUNGSTER 28 22 WANDER (2,2) OBJECTTYPE_SCRIPT BugCatchingContestant2AScript ..._2A
..._ROCKER SPRITE_ROCKER 9 18 STANDING_UP OBJECTTYPE_SCRIPT BugCatchingContestant3AScript ..._3A
..._POKEFAN_M SPRITE_POKEFAN_M 7 13 WALK_UP_DOWN (1,0) OBJECTTYPE_SCRIPT BugCatchingContestant4AScript ..._4A
..._YOUNGSTER3 SPRITE_YOUNGSTER 23 9 SPINRANDOM_SLOW OBJECTTYPE_SCRIPT BugCatchingContestant5AScript ..._5A
..._YOUNGSTER4 SPRITE_YOUNGSTER 27 13 WANDER (3,3) OBJECTTYPE_SCRIPT BugCatchingContestant6AScript ..._6A
..._LASS SPRITE_LASS 7 23 WALK_LEFT_RIGHT (2,0) OBJECTTYPE_SCRIPT BugCatchingContestant7AScript ..._7A
..._YOUNGSTER5 SPRITE_YOUNGSTER 11 27 WANDER (1,1) OBJECTTYPE_SCRIPT BugCatchingContestant8AScript ..._8A
..._YOUNGSTER6 SPRITE_YOUNGSTER 16 8 WANDER (1,1) OBJECTTYPE_SCRIPT BugCatchingContestant9AScript ..._9A
..._YOUNGSTER7 SPRITE_YOUNGSTER 17 34 WANDER (3,3) OBJECTTYPE_SCRIPT BugCatchingContestant10AScript ..._10A
..._POKE_BALL1 SPRITE_POKE_BALL 35 12 STILL OBJECTTYPE_ITEMBALL NationalParkBugContestParlyzHeal EVENT_NATIONAL_PARK_PARLYZ_HEAL
..._POKE_BALL2 SPRITE_POKE_BALL 1 43 STILL OBJECTTYPE_ITEMBALL NationalParkBugContestTMDig EVENT_NATIONAL_PARK_TM_DIG

Scripts of interest

  • Every BugCatchingContestantNAScript is faceplayer / opentext / writetext / waitbutton / closetext / end - flavour only, no branching. The B variants in the north gate are the ones that branch on EVENT_TEMPORARY_UNTIL_MAP_RELOAD_1 (set by BugContestResults_FirstPlace) to say "you won".
  • The battle path is BugCatchingContestBattleScript:: (engine/events/bug_contest/contest.asm:9): loadvar VAR_BATTLETYPE, BATTLETYPE_CONTEST, randomwildmon, startbattle, reloadmapafterbattle, readmem wParkBallsRemaining, iffalse BugCatchingContestOutOfBallsScript.
  • GiveParkBalls (engine/events/bug_contest/contest.asm:1) clears wContestMon, writes BUG_CONTEST_BALLS into wParkBallsRemaining and farcall StartBugContestTimer.

Contest constants (constants/script_constants.asm)

constant line value
BUG_CONTEST_BALLS 283 20
BUG_CONTEST_MINUTES 284 20
BUG_CONTEST_PLAYER 286 1
NUM_BUG_CONTESTANTS 287 10 (not counting the player)
VAR_CONTESTMINUTES 65 var id 0x11

Contest wild table - data/wild/bug_contest_mons.asm, label ContestMons (25:7bb8). This table replaces National Park's grass entirely for the duration:

% species min lv max lv
20 CATERPIE 7 18
20 WEEDLE 7 18
10 METAPOD 9 18
10 KAKUNA 9 18
5 BUTTERFREE 12 15
5 BEEDRILL 12 15
10 VENONAT 10 16
10 PARAS 10 17
5 SCYTHER 13 14
5 PINSIR 13 14
-1 (terminator row) VENOMOTH 30 40

Scoring - ContestScore (04:7cbc, engine/events/bug_contest/judging.asm) sums: MaxHP * 4 (high byte only), then Attack, Defense, Speed, SpclAtk, SpclDef, then a DV bonus assembled from bit 1 of each DV nibble, then remaining HP / 8, then +1 if the mon is holding an item. Five of the ten AI contestants are rolled by ComputeAIContestantScores, each picking one of three canned mon/score pairs from BugContestantPointers (data/events/bug_contest_winners.asm) with a 0..7 random perturbation. DetermineContestWinners keeps a 3-deep podium.

Prizes - BugContestResultsScript (40:420e, engine/events/std_scripts.asm:275):

place item no-room fallback flag
1st SUN_STONE EVENT_CONTEST_OFFICER_HAS_SUN_STONE
2nd EVERSTONE EVENT_CONTEST_OFFICER_HAS_EVERSTONE
3rd GOLD_BERRY EVENT_CONTEST_OFFICER_HAS_GOLD_BERRY
consolation BERRY EVENT_CONTEST_OFFICER_HAS_BERRY

First place also sets EVENT_TEMPORARY_UNTIL_MAP_RELOAD_1. The tail of the script clears ENGINE_BUG_CONTEST_TIMER, sets all twenty EVENT_BUG_CATCHING_CONTESTANT_* flags, sets ENGINE_DAILY_BUG_CONTEST, and resets both gate scenes to their NOOP.


MAP_ROUTE_36_NATIONAL_PARK_GATE

  • Script: maps/Route36NationalParkGate.asm
  • Blocks: maps/Route36NationalParkGate.blk
  • Header (data/maps/maps.asm:263): TILESET_GATE, INDOOR, LANDMARK_ROUTE_36, MUSIC_GOLDENROD_CITY, FALSE, PALETTE_DAY, FISHGROUP_SHORE
  • Dimensions: constants/map_constants.asm:242 -> map_const ROUTE_36_NATIONAL_PARK_GATE, 5, 4
  • Connections: none

Warps

idx x y destination map dest warp
1 0 4 NATIONAL_PARK 1
2 0 5 NATIONAL_PARK 2
3 9 4 ROUTE_36 1
4 9 5 ROUTE_36 2

Coord events - none. Scene scripts (same three-slot shape as the south gate): SCENE_ROUTE36NATIONALPARKGATE_NOOP (0), ..._UNUSED (1), ..._LEAVE_CONTEST_EARLY (2) -> sdefer Route36NationalParkGateLeavingContestEarlyScript.

BG events

x y type script/item
6 0 BGEVENT_READ BugCatchingContestExplanationSign (the label defined in maps/Route35NationalParkGate.asm)

Object events

const sprite x y movement type script label event flag
ROUTE36NATIONALPARKGATE_OFFICER1 SPRITE_OFFICER 0 3 STANDING_DOWN OBJECTTYPE_SCRIPT Route36OfficerScriptContest (56:67cc) EVENT_ROUTE_36_NATIONAL_PARK_GATE_OFFICER_CONTEST_DAY
..._YOUNGSTER1 SPRITE_YOUNGSTER 2 5 STANDING_UP OBJECTTYPE_SCRIPT BugCatchingContestant1BScript EVENT_BUG_CATCHING_CONTESTANT_1B
..._YOUNGSTER2 SPRITE_YOUNGSTER 4 5 STANDING_UP OBJECTTYPE_SCRIPT BugCatchingContestant2BScript ..._2B
..._ROCKER SPRITE_ROCKER 2 6 STANDING_UP OBJECTTYPE_SCRIPT BugCatchingContestant3BScript ..._3B
..._POKEFAN_M SPRITE_POKEFAN_M 6 5 STANDING_UP OBJECTTYPE_SCRIPT BugCatchingContestant4BScript ..._4B
..._YOUNGSTER3 SPRITE_YOUNGSTER 2 7 STANDING_UP OBJECTTYPE_SCRIPT BugCatchingContestant5BScript ..._5B
..._YOUNGSTER4 SPRITE_YOUNGSTER 5 6 STANDING_UP OBJECTTYPE_SCRIPT BugCatchingContestant6BScript ..._6B
..._LASS SPRITE_LASS 3 6 STANDING_UP OBJECTTYPE_SCRIPT BugCatchingContestant7BScript ..._7B
..._YOUNGSTER5 SPRITE_YOUNGSTER 4 7 STANDING_UP OBJECTTYPE_SCRIPT BugCatchingContestant8BScript ..._8B
..._YOUNGSTER6 SPRITE_YOUNGSTER 6 7 STANDING_UP OBJECTTYPE_SCRIPT BugCatchingContestant9BScript ..._9B
..._YOUNGSTER7 SPRITE_YOUNGSTER 6 6 STANDING_UP OBJECTTYPE_SCRIPT BugCatchingContestant10BScript ..._10B
ROUTE36NATIONALPARKGATE_OFFICER2 SPRITE_OFFICER 3 2 STANDING_DOWN OBJECTTYPE_SCRIPT Route36NationalParkGateOfficerScript EVENT_ROUTE_36_NATIONAL_PARK_GATE_OFFICER_NOT_CONTEST_DAY

Callbacks

  • MAPCALLBACK_NEWMAP -> Route36NationalParkGateCheckIfContestRunningCallback (same shape as the south gate).
  • MAPCALLBACK_OBJECTS -> Route36NationalParkGateCheckIfContestAvailableCallback (56:6710): first checkevent EVENT_WARPED_FROM_ROUTE_35_NATIONAL_PARK_GATE -> return unchanged (this is how the awards ceremony keeps the contest officer standing there when you finished from the south gate). Then weekday / ENGINE_BUG_CONTEST_TIMER, same as the south gate.

Scripts of interest

  • Route36OfficerScriptContest (56:67cc) - same structure as the south gate's officer but warps to NATIONAL_PARK_BUG_CONTEST, 33, 18 and, if ENGINE_DAILY_BUG_CONTEST is already set, falls into Route36Officer_ContestHasConcluded, which is the prize holding desk: it checks EVENT_CONTEST_OFFICER_HAS_SUN_STONE, then _EVERSTONE, then _GOLD_BERRY, then _BERRY, verbosegiveitems the first one it finds and clears that event. A bot that won with a full PACK collects here.
  • Route36NationalParkGateLeavingContestEarlyScript - the finish-now flow. special FadeOutToBlack, .CopyContestants (turns each unset ..._NA flag into an appear of the matching B object), disappear OFFICER1 / appear OFFICER2, applymovement PLAYER, Route36NationalParkGatePlayerWaitWithContestantsMovement (big_step DOWN, big_step RIGHT, turn_head UP), then jumpstd BugContestResultsScript.

MAP_ROUTE_36

  • Script: maps/Route36.asm
  • Blocks: maps/Route36.blk (270 bytes = 30 x 9 blocks)
  • Header (data/maps/maps.asm:249): TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_36, MUSIC_ROUTE_36, FALSE, PALETTE_AUTO, FISHGROUP_SHORE
  • Dimensions: constants/map_constants.asm:228 -> map_const ROUTE_36, 30, 9 (cells 0..59 x, 0..17 y)
  • Connections (data/maps/attributes.asm:206): north ROUTE_37 offset 10, south ROUTE_35 offset 0, east VIOLET_CITY offset 0

Warps

idx x y destination map dest warp
1 18 8 ROUTE_36_NATIONAL_PARK_GATE 3
2 18 9 ROUTE_36_NATIONAL_PARK_GATE 4
3 47 13 ROUTE_36_RUINS_OF_ALPH_GATE 1
4 48 13 ROUTE_36_RUINS_OF_ALPH_GATE 2

Coord events - none. (Sudowoodo is an object, not a trip-wire.)

BG events

x y type script/item
29 1 BGEVENT_READ Route36TrainerTips2
45 11 BGEVENT_READ RuinsOfAlphNorthSign
55 7 BGEVENT_READ Route36Sign
21 7 BGEVENT_READ Route36TrainerTips1

Object events

const sprite x y movement type script label event flag
ROUTE36_YOUNGSTER1 SPRITE_YOUNGSTER 20 12 STANDING_RIGHT OBJECTTYPE_TRAINER sight 2 TrainerPsychicMark -1
ROUTE36_YOUNGSTER2 SPRITE_YOUNGSTER 31 14 STANDING_LEFT OBJECTTYPE_TRAINER sight 5 TrainerSchoolboyAlan1 -1
ROUTE36_WEIRD_TREE SPRITE_WEIRD_TREE 35 9 SPRITEMOVEDATA_SUDOWOODO OBJECTTYPE_SCRIPT SudowoodoScript (4b:61aa) EVENT_ROUTE_36_SUDOWOODO
ROUTE36_LASS1 SPRITE_LASS 51 8 WALK_LEFT_RIGHT (2,0) OBJECTTYPE_SCRIPT Route36LassScript (4b:621e) -1
ROUTE36_FISHER SPRITE_FISHER 44 9 STANDING_LEFT OBJECTTYPE_SCRIPT Route36RockSmashGuyScript (4b:61f7) -1
ROUTE36_FRUIT_TREE SPRITE_FRUIT_TREE 21 4 STILL OBJECTTYPE_SCRIPT Route36FruitTree (4b:631a) -1
ROUTE36_ARTHUR SPRITE_YOUNGSTER 46 6 WANDER (1,1) OBJECTTYPE_SCRIPT ArthurScript (4b:62d4) EVENT_ROUTE_36_ARTHUR_OF_THURSDAY

Callbacks

  • MAPCALLBACK_OBJECTS -> Route36ArthurCallback (4b:619e): readvar VAR_WEEKDAY, ifequal THURSDAY, .ArthurAppears (-> appear ROUTE36_ARTHUR), otherwise disappear ROUTE36_ARTHUR.

Scripts of interest

  • SudowoodoScript (4b:61aa) - the gate of this section. checkitem SQUIRTBOTTLE / iftrue .Fight. Without it: waitsfx, playsound SFX_SANDSTORM, applymovement ROUTE36_WEIRD_TREE, SudowoodoShakeMovement (tree_shake), end - the tree just wobbles and stays solid. With it: writetext UseSquirtbottleText, yesorno, iffalse DidntUseSquirtbottleScript.
  • WateredWeirdTreeScript:: (4b:61c1) - exported so that using the SQUIRTBOTTLE from the PACK reaches the same body (engine/events/squirtbottle.asm does farsjump WateredWeirdTreeScript). Body: text, shake, SudowoodoAttackedText, loadwildmon SUDOWOODO, 20, startbattle, setevent EVENT_FOUGHT_SUDOWOODO, ifequal DRAW, DidntCatchSudowoodo, disappear ROUTE36_WEIRD_TREE, variablesprite SPRITE_WEIRD_TREE, SPRITE_TWIN, reloadmapafterbattle. Note the ordering: EVENT_FOUGHT_SUDOWOODO is set before the DRAW check, so a run or a KO still clears the road and still unlocks TM08.
  • DidntCatchSudowoodo (4b:61e9) - reloadmapafterbattle, applymovement ROUTE36_WEIRD_TREE, WeirdTreeMovement_Flee (two fast_jump_step UP), disappear, variablesprite, special LoadUsedSpritesGFX.
  • _Squirtbottle (14:4763, engine/events/squirtbottle.asm) - the PACK path. .CheckCanUseSquirtbottle requires wMapGroup == GROUP_ROUTE_36, wMapNumber == MAP_ROUTE_36, GetFacingObject to succeed, and that object's movement data to be SPRITEMOVEDATA_SUDOWOODO. Anything else prints _SquirtbottleNothingText.
  • Route36RockSmashGuyScript (4b:61f7) - checkevent EVENT_GOT_TM08_ROCK_SMASH -> .AlreadyGotRockSmash; checkevent EVENT_FOUGHT_SUDOWOODO -> .ClearedSudowoodo (verbosegiveitem TM_ROCK_SMASH, iffalse .NoRoomForTM, setevent EVENT_GOT_TM08_ROCK_SMASH). Before Sudowoodo it just prints RockSmashGuyText1.
  • ArthurScript (4b:62d4) - checkevent EVENT_GOT_HARD_STONE_FROM_ARTHUR -> .AlreadyGotStone; readvar VAR_WEEKDAY / ifnotequal THURSDAY, ArthurNotThursdayScript; else setevent EVENT_MET_ARTHUR_OF_THURSDAY, verbosegiveitem HARD_STONE, iffalse .BagFull, setevent EVENT_GOT_HARD_STONE_FROM_ARTHUR.
  • Route36LassScript (4b:621e) - flavour, branches on EVENT_FOUGHT_SUDOWOODO. This is the girl at (51, 8). She is not Floria and gives nothing.

Flags and events

constant defined in read/written by meaning for a bot
EVENT_ROUTE_36_SUDOWOODO constants/event_flags.asm:1178 object visibility flag; cleared by disappear in WateredWeirdTreeScript tree present on the map
EVENT_FOUGHT_SUDOWOODO constants/event_flags.asm:51 set by WateredWeirdTreeScript; read by the Rock Smash guy, the Route 36 lass, the Route 35 gate pokefan the progress flag of this section
EVENT_GOT_TM08_ROCK_SMASH constants/event_flags.asm:84 Route36RockSmashGuyScript TM08 taken
EVENT_ROUTE_36_ARTHUR_OF_THURSDAY constants/event_flags.asm:1276 Route36ArthurCallback Arthur visible
EVENT_MET_ARTHUR_OF_THURSDAY constants/event_flags.asm:111 ArthurScript first-meeting text
EVENT_GOT_HARD_STONE_FROM_ARTHUR constants/event_flags.asm:112 ArthurScript HARD STONE taken
EVENT_BEAT_PSYCHIC_MARK, EVENT_BEAT_SCHOOLBOY_ALAN constants/event_flags.asm trainer rows defeated bits
EVENT_ALAN_ASKED_FOR_PHONE_NUMBER, EVENT_ALAN_READY_FOR_REMATCH constants/event_flags.asm Alan script phone state machine

Items

item how obtained source one-time flag
ICE_BERRY fruit tree object at (21, 4) FRUITTREE_ROUTE_36 -> data/items/fruit_trees.asm:16 daily
TM_ROCK_SMASH (TM08) talk to the fisher at (44, 9) after Sudowoodo Route36RockSmashGuyScript EVENT_GOT_TM08_ROCK_SMASH
HARD_STONE talk to Arthur at (46, 6) on a Thursday ArthurScript EVENT_GOT_HARD_STONE_FROM_ARTHUR

Trainers

const class id party (data/trainers/parties.asm label) script label rematch/phone
MARK PSYCHIC_T (0x34) 7 parties.asm:2545 MARK TRAINERTYPE_MOVES - lv13 ABRA (TELEPORT, FLASH), lv13 ABRA (TELEPORT, FLASH), lv15 KADABRA (TELEPORT, KINESIS, CONFUSION) TrainerPsychicMark no
ALAN1 SCHOOLBOY (0x17) 3 parties.asm:423 ALAN - lv16 TANGELA TrainerSchoolboyAlan1 yes (PHONE_SCHOOLBOY_ALAN); ALAN2 parties.asm:496, ALAN3 parties.asm:502

Wild - data/wild/johto_grass.asm, def_grass_wildmons ROUTE_36, 10/10/10 percent. Gold:

slot morn day nite
1 12 NIDORAN_M 12 NIDORAN_M 12 NIDORAN_M
2 12 NIDORAN_F 12 NIDORAN_F 12 NIDORAN_F
3 13 PIDGEY 14 PIDGEY 13 HOOTHOOT
4 13 GROWLITHE 13 GROWLITHE 13 GROWLITHE
5 13 STANTLER 13 STANTLER 13 STANTLER
6 15 PIDGEY 15 GROWLITHE 15 HOOTHOOT
7 15 PIDGEY 15 GROWLITHE 15 HOOTHOOT

(Silver substitutes VULPIX for GROWLITHE and swaps the NIDORAN order.) No ROUTE_36 entry in johto_water.asm. Headbutt: data/wild/treemon_maps.asm:17 -> TREEMON_SET_FOREST. ROUTE_36 is a roam node in data/wild/roammon_maps.asm:26 with four exits (ROUTE_35, ROUTE_31, ROUTE_32, ROUTE_37).


MAP_ROUTE_37 (header-listed only; not entered by this walkthrough section)

  • Script: maps/Route37.asm, Blocks: maps/Route37.blk
  • Header (data/maps/maps.asm:250): TILESET_JOHTO, ROUTE, LANDMARK_ROUTE_37, MUSIC_ROUTE_36, FALSE, PALETTE_AUTO, FISHGROUP_SHORE
  • Dimensions: constants/map_constants.asm:229 -> map_const ROUTE_37, 10, 9
  • Connections (data/maps/attributes.asm:211): north ECRUTEAK_CITY offset -5, south ROUTE_36 offset -10
  • Warps: def_warp_events is empty. Route 37 is reached only by connection.
  • BG events: (5,3) BGEVENT_READ Route37Sign; (4,2) BGEVENT_ITEM Route37HiddenEther -> hiddenitem ETHER, EVENT_ROUTE_37_HIDDEN_ETHER.
  • Objects: Twins Ann & Anne at (6,12) and (7,12) (ANNANDANNE1 / ANNANDANNE2, both sharing EVENT_BEAT_TWINS_ANN_AND_ANNE), Psychic Greg at (9,6), three fruit trees at (13,5) FRUITTREE_ROUTE_37_1 = RED_APRICORN, (16,5) _2 = BLU_APRICORN, (15,7) _3 = BLK_APRICORN (data/items/fruit_trees.asm:20-22), and Sunny of Sunday at (16,8) behind EVENT_ROUTE_37_SUNNY_OF_SUNDAY (gift MAGNET, EVENT_GOT_MAGNET_FROM_SUNNY).
  • Callback: MAPCALLBACK_OBJECTS -> Route37SunnyCallback (weekday == SUNDAY).
  • Wild: data/wild/johto_grass.asm def_grass_wildmons ROUTE_37, 10/10/10; Gold nite slot 1/5/6/7 are SPINARAK 13/15/15/15, Silver morn is LEDYBA - this is where the walkthrough's "Ledyba (Silver only, morning only) / Spinarak (Gold only, night only)" actually lives.

3. Blockers and gates

Gate Enforced by (file:label) Requirement Unlock condition
SQUIRTBOTTLE not obtainable maps/GoldenrodFlowerShop.asm:FlowerShopTeacherScript (57:52d1) - checkflag ENGINE_PLAINBADGE / iffalse .Lalala Plain Badge (Whitney) beat Whitney; talk to the teacher at (2,4)
Sudowoodo blocks Route 36 maps/Route36.asm:SudowoodoScript (4b:61aa) - the object at cell (35,9) with SPRITEMOVEDATA_SUDOWOODO is a solid NPC; the script's checkitem SQUIRTBOTTLE / iftrue .Fight is the only way past SQUIRTBOTTLE in the PACK EVENT_FOUGHT_SUDOWOODO set by WateredWeirdTreeScript (4b:61c1); the disappear runs on any outcome except a draw-flee, and the flee path disappears it too
SQUIRTBOTTLE from the PACK does nothing elsewhere engine/events/squirtbottle.asm:_Squirtbottle (14:4763) .CheckCanUseSquirtbottle map must be ROUTE_36 and the faced object must carry SPRITEMOVEDATA_SUDOWOODO face the tree first
TM08 ROCK SMASH withheld maps/Route36.asm:Route36RockSmashGuyScript (4b:61f7) - checkevent EVENT_FOUGHT_SUDOWOODO Sudowoodo dealt with talk to the fisher at (44, 9)
East side of Route 35 (Arnie, Bryan, TM04) maps/Route35.blk block $5b at block (8,3) = cells x16-17 y6-7; data/collision/field_move_blocks.asm:14 CUT, which needs ENGINE_HIVEBADGE (engine/events/overworld.asm:133 CutFunction.CheckAble) and a party mon that knows CUT Azalea's badge + HM01; or enter from Route 36 via the south connection, which is what the walkthrough does
Bug Contest closed maps/Route35NationalParkGate.asm:Route35OfficerScriptContest (56:5e0c) and maps/Route36NationalParkGate.asm:Route36OfficerScriptContest (56:67cc) - readvar VAR_WEEKDAY, four ifequal bail-outs, plus checkflag ENGINE_DAILY_BUG_CONTEST Tuesday, Thursday or Saturday, and not already run today set the RTC weekday; ENGINE_DAILY_BUG_CONTEST clears on the daily reset
Contest entry refused same scripts - readvar VAR_PARTYCOUNT / VAR_BOXSPACE / special CheckFirstMonIsEgg / special ContestDropOffMons lead mon is not an EGG, is not fainted, and there is party-or-box room for a caught bug reorder the party, heal, free a box slot
Kenya not given maps/Route35GoldenrodGate.asm:RandyScript (56:59ce) - readvar VAR_PARTYCOUNT / ifequal PARTY_LENGTH, .partyfull fewer than 6 party mons deposit one
Arthur / Sunny absent Route36ArthurCallback (4b:619e) / Route37SunnyCallback - MAPCALLBACK_OBJECTS + VAR_WEEKDAY Thursday / Sunday RTC weekday
Officer Dirk will not battle maps/Route35.asm:TrainerOfficerDirk - checktime NITE / iffalse .NotNight night time of day wait, or set the RTC

4. Bot checklist

Coordinates are (x, y) walk cells as written in the asm. "talk" means stand adjacent facing the target and press A.

  1. MAP_GOLDENROD_CITY -> warp 6 at (33, 5). Pre: ENGINE_PLAINBADGE set. Post: on MAP_GOLDENROD_FLOWER_SHOP.
  2. MAP_GOLDENROD_FLOWER_SHOP: talk to GOLDENRODFLOWERSHOP_TEACHER at (2, 4). Pre: !EVENT_GOT_SQUIRTBOTTLE and a free KEY ITEM slot. Post: EVENT_GOT_SQUIRTBOTTLE, SQUIRTBOTTLE in the PACK.
  3. Exit via warp 1 (2, 7) -> MAP_GOLDENROD_CITY warp 6. Walk to (19, 1), warp 13 -> MAP_ROUTE_35_GOLDENROD_GATE warp 3.
  4. Optional: talk to ROUTE35GOLDENRODGATE_RANDY at (0, 4), answer YES. Pre: VAR_PARTYCOUNT < 6. Post: EVENT_GOT_KENYA, lv10 SPEAROW "KENYA" with FLOWER_MAIL in the last party slot.
  5. Warp 1 at (4, 0) -> MAP_ROUTE_35 warp 1 (lands at (9, 33)).
  6. MAP_ROUTE_35, walk north. Battle, in the walkthrough's order: Kim (11, 24), Elliot (8, 20), Brooke (7, 20), Ivan (3, 19), Irwin (5, 10), Walt (2, 10). Post: EVENT_BEAT_* for each. Sight ranges are 3/3/3/4/2/2.
  7. Optional, night only: talk to ROUTE35_OFFICER at (5, 6). Pre: checktime NITE true and !EVENT_BEAT_OFFICER_DIRK. Post: EVENT_BEAT_OFFICER_DIRK.
  8. Walk to (3, 5), warp 3 -> MAP_ROUTE_35_NATIONAL_PARK_GATE warp 3.
  9. Optional Contest: on a Tue/Thu/Sat with !ENGINE_DAILY_BUG_CONTEST, talk to ROUTE35NATIONALPARKGATE_OFFICER1 at (2, 1) and answer YES. Post: ENGINE_BUG_CONTEST_TIMER set, 20 PARK BALLs, warp to MAP_NATIONAL_PARK_BUG_CONTEST (10, 47). Finish by re-entering either gate and answering YES, or by running the timer/balls out. Post: ENGINE_DAILY_BUG_CONTEST, prize per placing, ENGINE_BUG_CONTEST_TIMER cleared.
  10. Warp 1 at (3, 0) -> MAP_NATIONAL_PARK warp 3 (lands at (10, 47)).
  11. MAP_NATIONAL_PARK: talk to NATIONALPARK_TEACHER1 at (27, 40). Pre: !EVENT_GOT_QUICK_CLAW, PACK room. Post: EVENT_GOT_QUICK_CLAW.
  12. Optional: item ball at (1, 43) -> TM_DIG, flag EVENT_NATIONAL_PARK_TM_DIG. Hidden FULL_HEAL at bg (6, 47), flag EVENT_NATIONAL_PARK_HIDDEN_FULL_HEAL. Item ball at (35, 12) -> PARLYZ_HEAL, flag EVENT_NATIONAL_PARK_PARLYZ_HEAL.
  13. Battle Beverly (18, 29), Jack (27, 23), Krise (8, 14), William (16, 9).
  14. Walk to (33, 18), warp 1 -> MAP_ROUTE_36_NATIONAL_PARK_GATE warp 1. If a prize was held: talk to ROUTE36NATIONALPARKGATE_OFFICER1 at (0, 3) with ENGINE_DAILY_BUG_CONTEST set to collect it.
  15. Warp 3 at (9, 4) -> MAP_ROUTE_36 warp 1 (lands at (18, 8)).
  16. MAP_ROUTE_36: fruit tree at (21, 4) -> ICE_BERRY. Battle Psychic Mark at (20, 12).
  17. Leave south (ROUTE_36 south connection, offset 0) into MAP_ROUTE_35's north edge.
  18. MAP_ROUTE_35 east side: CUT the tree at block (8, 3) (cells x16-17, y6-7). Pre: ENGINE_HIVEBADGE + a mon knowing CUT. Then battle Arnie at (16, 7) and Bryan at (14, 28), and take the item ball at (13, 16) -> TM_ROLLOUT (EVENT_ROUTE_35_TM_ROLLOUT). Talk to Arnie a second time for PHONE_BUG_CATCHER_ARNIE.
  19. Return north to MAP_ROUTE_36. Battle Schoolboy Alan at (31, 14); talk again for PHONE_SCHOOLBOY_ALAN.
  20. Walk to face ROUTE36_WEIRD_TREE at (35, 9) and press A. Pre: SQUIRTBOTTLE in the PACK (checkitem). Answer YES. A lv20 SUDOWOODO wild battle starts (loadwildmon SUDOWOODO, 20). Post: EVENT_FOUGHT_SUDOWOODO set regardless of outcome; EVENT_ROUTE_36_SUDOWOODO cleared, sprite swapped to SPRITE_TWIN.
  21. Talk to ROUTE36_FISHER at (44, 9). Pre: EVENT_FOUGHT_SUDOWOODO, PACK room. Post: EVENT_GOT_TM08_ROCK_SMASH, TM08 ROCK SMASH.
  22. Optional, Thursday only: talk to ROUTE36_ARTHUR at (46, 6). Post: EVENT_MET_ARTHUR_OF_THURSDAY, EVENT_GOT_HARD_STONE_FROM_ARTHUR, HARD STONE.
  23. Continue east past x=59 on the ROUTE_36 east connection into MAP_VIOLET_CITY (next section).

5. Port coverage

Beat Port file Status
Map geometry, warps, bg/object events for all nine maps src/import/RomExtractorGen2.lua (extracted into the cache), consumed by src/world/gen2/World.lua / Map.lua implemented (data-driven; nothing map-specific is hand written)
Script bytecode for every label above (FlowerShopTeacherScript, RandyScript, SudowoodoScript, Route36RockSmashGuyScript, ArthurScript, both contest officers, BugContestResultsScript) src/script/gen2/Vm.lua + extracted bytecode implemented - the opcodes these scripts use (checkevent, checkflag, checkitem, verbosegiveitem, givepoke, givepokemail, loadwildmon, variablesprite, appear/disappear, setscene, sdefer, askforphonenumber, checkcellnum, checktime, fruittree) all have branches in Vm.lua / Opcodes.lua
VAR_WEEKDAY (Arthur, Sunny, contest days) src/world/gen2/World.lua:1201 World:weekday, World.lua:101 VAR_WEEKDAY = 0x0b implemented
MAPCALLBACK_OBJECTS day-of-week NPC swaps src/world/gen2/World.lua:5991 World:runMapCallback, called from World.lua:5700 implemented; assertion driver tests/drivers/gold_map_callbacks.lua exists but does not cover Route 36 / Route 37 / either park gate
Bug Catching Contest rules, timer, park balls, scoring, AI contestants, prizes src/core/gen2/BugContest.lua (815 lines; transcribed from bug_contest/judging.asm, contest.asm, contest_2.asm, caught_mon.asm, bug_contest_mons.asm) implemented - BugContest.score, rollContestant, judge, prizeFor, pickContestants, dropOffMons, returnMons, start/stop/tickTimer, chooseWild
Contest comparison / debug UI src/ui/gen2/ContestMenu.lua implemented (a comparison screen, not the cart's HUD)
Contest super-tall-grass doubled encounter rate src/world/gen2/Permissions.lua:85 SUPER_TALL_GRASS, BugContest.encounterRate implemented
Squirtbottle field check src/script/gen2/CallAsm.lua:411 H.CheckCanUseSquirtbottle (registered as "14:4786"), tested in tests/gen2_callasm_test.lua:224-244 implemented
Using the SQUIRTBOTTLE from the PACK src/world/gen2/World.lua:3294 World:useFieldItem missing - the dispatch has arms only for ITEMFINDER, BICYCLE, SACRED_ASH, repels, trophy boxes and rods. There is no SQUIRTBOTTLE arm, so _Squirtbottle is unreachable from the PACK. The talk-to-the-tree path (SudowoodoScript's checkitem) still works, which is the route the walkthrough takes
Item ball pickup (TM04 on Route 35, TM28 DIG and PARLYZ HEAL in National Park) extractor reads them (src/import/RomExtractorGen2.lua:2969 obj.itemball = readItemBall(...)) but src/world/gen2/World.lua:5257 World:interact only dispatches on npc.def.trainer, strength boulders, npc.def.scriptKey, bg events and hidden items missing - OBJECTTYPE_ITEMBALL objects have no scriptKey by design, and nothing consumes obj.itemball. A bot cannot pick up any of this section's three item balls
Hidden item (National Park FULL HEAL, Route 37 ETHER) src/world/gen2/HiddenItems.lua, wired into World:interact implemented
Fruit trees (MYSTERYBERRY, ICE BERRY, the Route 37 apricorns) src/core/gen2/Apricorns.lua + the VM's fruittree branch implemented
Overworld trainers, sight ranges, loadtrainer / startbattle src/world/gen2/Trainers.lua, src/battle/gen2/Battle.lua implemented
Phone numbers and rematch tiers (Irwin, Arnie, Jack, Beverly, Alan) src/core/gen2/Phone.lua (Jack, Beverly, Irwin, Arnie, Alan all have callee/caller script keys and ..._READY_FOR_REMATCH event ids) implemented
Kenya the SPEAROW + FLOWER MAIL src/core/gen2/Mail.lua + Vm.lua:439 givepoke / Vm.lua:462 givepokemail implemented (extractor resolves cmd.mail)
CUT field move + ENGINE_HIVEBADGE gate + the Route 35 tree block src/world/gen2/FieldMoves.lua:104 (CUT = "HIVE"), FieldMoves.somethingToCut, World:tryCutOW implemented
Sudowoodo wild battle + DRAW-flee branch src/script/gen2/Vm.lua:44 (DRAW), Vm.lua:836 loadwildmon, World.lua:5067 (variablesprite with a raw sprite id) implemented
Driver / regression coverage for this specific stretch tests/drivers/gold_*.lua missing - there is no driver that walks Route 35 -> National Park -> Route 36, runs a contest, or fights Sudowoodo. tests/gen2_contest_test.lua covers the contest rules headlessly; tests/gen2_callasm_test.lua covers only the Squirtbottle facing check

6. Unresolved / verify by hand

  1. "Talk to Floria... while she goes away to get the Squirtbottle." No such script exists in pokegold. maps/GoldenrodFlowerShop.asm has a GOLDENRODFLOWERSHOP_FLORIA object at (5, 6) whose FlowerShopFloriaScript only prints text, and the girl on Route 36 at (51, 8) is an anonymous ROUTE36_LASS1 running Route36LassScript, which also only prints text. The SQUIRTBOTTLE comes from FlowerShopTeacherScript gated on ENGINE_PLAINBADGE alone, with no Route 36 precondition. The described sequence looks like Crystal behaviour that leaked into a Gold/Silver walkthrough.
  2. Contest Pokemon list. The walkthrough lists "Caterpie/Weedle, Nincada, Scyther, Pinsir, Volbeat, Wurmple" at "Levels 28-31". data/wild/bug_contest_mons.asm has CATERPIE, WEEDLE, METAPOD, KAKUNA, BUTTERFREE, BEEDRILL, VENONAT, PARAS, SCYTHER, PINSIR at levels 7-18 (plus VENOMOTH 30-40 on the -1 terminator row, which is never selected). NINCADA, VOLBEAT and WURMPLE do not exist in Gen 2 at all. Treat the walkthrough's list and levels as wrong for this game.
  3. "20 Sport Balls." The item is PARK_BALL (constants/item_constants.asm:185), given by special GiveParkBalls, count BUG_CONTEST_BALLS = 20. "Sport Ball" is the Gen 3+ name.
  4. "If you win the contest, you can win a Shiny Stone!" First place gives SUN_STONE (BugContestResults_FirstPlace, engine/events/std_scripts.asm:346). The walkthrough's own item list ("Sun Stone (1st Prize)") agrees; the prose line does not. There is no Shiny Stone in Gen 2.
  5. "If you catch a Scyther at full HP, it may be worth around 342 points." Not verifiable from the asm without a concrete mon: ContestScore (04:7cbc) is MaxHP*4 + Atk + Def + Spe + SpA + SpD + DVbonus + HP/8 + heldItem, all taken from the high byte of each stat word. The walkthrough's qualitative claim ("score takes HP into consideration") is confirmed; the specific number is not checked here.
  6. National Park species list. The walkthrough lists Butterfree, Weedle, Kakuna, Beedrill, Paras, Venonat, Scyther and Pinsir as "found in National Park". None of them appear in def_grass_wildmons NATIONAL_PARK; they are Contest-only (data/wild/bug_contest_mons.asm). Sunkern, Caterpie, Metapod, Pidgey and Hoothoot are the only real National Park grass encounters in Gold.
  7. "Routes 36 & 37" item and species lists are merged. Everything the walkthrough attributes to "Routes 36 & 37" except the ICE BERRY, HARD STONE and TM08 actually lives on Route 37 (RED_APRICORN, BLU_APRICORN, BLK_APRICORN; Ledyba/Spinarak/Pidgeotto), which this section never enters. Vulpix/Growlithe and Stantler appear on both routes.
  8. "Route 35 & National Park" item list omits the hidden FULL HEAL at National Park bg (6, 47) and lists no hidden items at all. Not a contradiction, just incomplete.
  9. "Head back to Arnie and talk to her." BUG_CATCHER, ARNIE1 uses the male phone std scripts (AskNumber1MScript, RegisteredNumberMScript). Cosmetic only.
  10. "Then, we're ready to head into Route 35 after Liz's offer for a rematch on Route 32." Liz's rematch is a phone event outside this section's maps; no code on any map in this section references it, so it was not resolved here.
  11. EVENT_FOUGHT_SUDOWOODO is set before the DRAW check in WateredWeirdTreeScript, and both the win branch and DidntCatchSudowoodo run disappear ROUTE36_WEIRD_TREE. So the walkthrough's "catch it or else" is a preference, not a gate - fainting or fleeing still opens the road and still unlocks TM08. Worth confirming in-game that a black-out mid-battle does not leave a half-applied state, which the asm alone cannot answer.
  12. MAP_NATIONAL_PARK_BUG_CONTEST warps 2 and 4 point at destination warp 1, not 2, in maps/NationalParkBugContest.asm:228,230. Transcribed verbatim; a bot pathing off those rows should expect the asymmetry rather than assume a typo.