ref: e5c8c8d3f0ab2c0bb79bf39380fa2b53d562afdf
dir: /main.asm/
INCLUDE "constants.asm" ; the rst vectors are unused SECTION "rst00",ROM0[0] db $FF SECTION "rst08",ROM0[8] db $FF SECTION "rst10",ROM0[$10] db $FF SECTION "rst18",ROM0[$18] db $FF SECTION "rst20",ROM0[$20] db $FF SECTION "rst28",ROM0[$28] db $FF SECTION "rst30",ROM0[$30] db $FF SECTION "rst38",ROM0[$38] db $FF ; interrupts SECTION "vblank",ROM0[$40] jp VBlankHandler SECTION "lcdc",ROM0[$48] db $FF SECTION "timer",ROM0[$50] jp TimerHandler SECTION "serial",ROM0[$58] jp SerialInterruptHandler SECTION "joypad",ROM0[$60] reti SECTION "bank0",ROM0[$61] DisableLCD:: ; 0061 (0:0061) xor a ld [$ff0f],a ld a,[$ffff] ld b,a res 0,a ld [$ffff],a .waitVBlank ld a,[$ff44] cp a,$91 jr nz,.waitVBlank ld a,[$ff40] and a,$7f ; res 7,a ld [$ff40],a ld a,b ld [$ffff],a ret EnableLCD:: ; 007b (0:007b) ld a,[$ff40] set 7,a ld [$ff40],a ret CleanLCD_OAM:: ; 0082 (0:0082) xor a ld hl,wOAMBuffer ld b,$a0 .loop ld [hli],a dec b jr nz,.loop ret ResetLCD_OAM:: ; 008d (0:008d) ld a,$a0 ld hl,wOAMBuffer ld de,$0004 ld b,$28 .loop ld [hl],a add hl,de dec b jr nz,.loop ret FarCopyData:: ; 009d (0:009d) ; copy bc bytes of data from a:hl to de ld [$CEE9],a ; save future bank # for later ld a,[H_LOADEDROMBANK] ; get current bank # push af ld a,[$CEE9] ; get future bank #, switch ld [H_LOADEDROMBANK],a ld [$2000],a call CopyData pop af ; okay, done, time to switch back ld [H_LOADEDROMBANK],a ld [$2000],a ret CopyData:: ; 00b5 (0:00b5) ; copy bc bytes of data from hl to de ld a,[hli] ld [de],a inc de dec bc ld a,c or b jr nz,CopyData ret SECTION "romheader",ROM0[$100] nop jp Start SECTION "start",ROM0[$150] Start:: ; 0150 (0:0150) cp $11 ; value that indicates Gameboy Color jr z,.gbcDetected xor a jr .storeValue .gbcDetected ld a,$00 .storeValue ld [$cf1a],a ; same value ($00) either way jp InitGame ; this function directly reads the joypad I/O register ; it reads many times in order to give the joypad a chance to stabilize ; it saves a result in [$fff8] in the following format ; (set bit indicates pressed button) ; bit 0 - A button ; bit 1 - B button ; bit 2 - Select button ; bit 3 - Start button ; bit 4 - Right ; bit 5 - Left ; bit 6 - Up ; bit 7 - Down ReadJoypadRegister:: ; 015f (0:015f) ld a,%00100000 ; select direction keys ld c,$00 ld [rJOYP],a ld a,[rJOYP] ld a,[rJOYP] ld a,[rJOYP] ld a,[rJOYP] ld a,[rJOYP] ld a,[rJOYP] cpl ; complement the result so that a set bit indicates a pressed key and a,%00001111 swap a ; put direction keys in upper nibble ld b,a ld a,%00010000 ; select button keys ld [rJOYP],a ld a,[rJOYP] ld a,[rJOYP] ld a,[rJOYP] ld a,[rJOYP] ld a,[rJOYP] ld a,[rJOYP] ld a,[rJOYP] ld a,[rJOYP] ld a,[rJOYP] ld a,[rJOYP] cpl ; complement the result so that a set bit indicates a pressed key and a,%00001111 or b ; put button keys in lower nibble ld [H_JOYPADSTATE],a ; save joypad state ld a,%00110000 ; unselect all keys ld [rJOYP],a ret ; function to update the joypad state variables ; output: ; [H_NEWLYRELEASEDBUTTONS] = keys released since last time ; [H_NEWLYPRESSEDBUTTONS] = keys pressed since last time ; [H_CURRENTPRESSEDBUTTONS] = currently pressed keys GetJoypadState:: ; 019a (0:019a) ld a, [H_LOADEDROMBANK] push af ld a,Bank(_GetJoypadState) ld [H_LOADEDROMBANK],a ld [$2000],a call _GetJoypadState pop af ld [H_LOADEDROMBANK],a ld [$2000],a ret ; see also MapHeaderBanks MapHeaderPointers:: ; 01ae (0:01ae) dw PalletTown_h dw ViridianCity_h dw PewterCity_h dw CeruleanCity_h dw LavenderTown_h dw VermilionCity_h dw CeladonCity_h dw FuchsiaCity_h dw CinnabarIsland_h dw IndigoPlateau_h dw SaffronCity_h dw SaffronCity_h dw Route1_h dw Route2_h dw Route3_h dw Route4_h dw Route5_h dw Route6_h dw Route7_h dw Route8_h dw Route9_h dw Route10_h dw Route11_h dw Route12_h dw Route13_h dw Route14_h dw Route15_h dw Route16_h dw Route17_h dw Route18_h dw Route19_h dw Route20_h dw Route21_h dw Route22_h dw Route23_h dw Route24_h dw Route25_h dw RedsHouse1F_h dw RedsHouse2F_h dw BluesHouse_h dw OaksLab_h ;id=40 dw ViridianPokecenter_h dw ViridianMart_h dw School_h dw ViridianHouse_h dw ViridianGym_h dw DiglettsCaveRoute2_h dw ViridianForestexit_h dw Route2House_h dw Route2Gate_h dw ViridianForestEntrance_h ;id=50 dw ViridianForest_h dw MuseumF1_h dw MuseumF2_h dw PewterGym_h dw PewterHouse1_h dw PewterMart_h dw PewterHouse2_h dw PewterPokecenter_h dw MtMoon1_h dw MtMoon2_h ;id=60 dw MtMoon3_h dw CeruleanHouseTrashed_h dw CeruleanHouse_h dw CeruleanPokecenter_h dw CeruleanGym_h dw BikeShop_h dw CeruleanMart_h dw MtMoonPokecenter_h dw CeruleanHouseTrashed_h ; copy dw Route5Gate_h dw UndergroundTunnelEntranceRoute5_h dw DayCareM_h dw Route6Gate_h dw UndergroundTunnelEntranceRoute6_h dw UndergroundTunnelEntranceRoute6_h ; unused dw Route7Gate_h dw UndergroundPathEntranceRoute7_h dw UndergroundPathEntranceRoute7Copy_h dw Route8Gate_h dw UndergroundPathEntranceRoute8_h ;id=80 dw RockTunnelPokecenter_h dw RockTunnel1_h dw PowerPlant_h dw Route11Gate_h dw DiglettsCaveEntranceRoute11_h dw Route11GateUpstairs_h dw Route12Gate_h dw BillsHouse_h dw VermilionPokecenter_h dw FanClub_h ;id=90 dw VermilionMart_h dw VermilionGym_h dw VermilionHouse1_h dw VermilionDock_h dw SSAnne1_h dw SSAnne2_h dw SSAnne3_h dw SSAnne4_h dw SSAnne5_h dw SSAnne6_h ;id=100 dw SSAnne7_h dw SSAnne8_h dw SSAnne9_h dw SSAnne10_h dw Lance_h ; unused dw Lance_h ; unused dw Lance_h ; unused dw VictoryRoad1_h dw Lance_h ; unused dw Lance_h ; unused ;id=110 dw Lance_h ; unused dw Lance_h ; unused dw Lance_h dw Lance_h ; unused dw Lance_h ; unused dw Lance_h ; unused dw Lance_h ; unused dw HallofFameRoom_h dw UndergroundPathNS_h dw Gary_h ;id=120 dw UndergroundPathWE_h dw CeladonMart1_h dw CeladonMart2_h dw CeladonMart3_h dw CeladonMart4_h dw CeladonMartRoof_h dw CeladonMartElevator_h dw CeladonMansion1_h dw CeladonMansion2_h dw CeladonMansion3_h ;id=130 dw CeladonMansion4_h dw CeladonMansion5_h dw CeladonPokecenter_h dw CeladonGym_h dw CeladonGameCorner_h dw CeladonMart5_h dw CeladonPrizeRoom_h dw CeladonDiner_h dw CeladonHouse_h dw CeladonHotel_h ;id=140 dw LavenderPokecenter_h dw PokemonTower1_h dw PokemonTower2_h dw PokemonTower3_h dw PokemonTower4_h dw PokemonTower5_h dw PokemonTower6_h dw PokemonTower7_h dw LavenderHouse1_h dw LavenderMart_h ;id=150 dw LavenderHouse2_h dw FuchsiaMart_h dw FuchsiaHouse1_h dw FuchsiaPokecenter_h dw FuchsiaHouse2_h dw SafariZoneEntrance_h dw FuchsiaGym_h dw FuchsiaMeetingRoom_h dw SeafoamIslands2_h dw SeafoamIslands3_h ;id=160 dw SeafoamIslands4_h dw SeafoamIslands5_h dw VermilionHouse2_h dw FuchsiaHouse3_h dw Mansion1_h dw CinnabarGym_h dw Lab1_h dw Lab2_h dw Lab3_h dw Lab4_h ;id=170 dw CinnabarPokecenter_h dw CinnabarMart_h dw CinnabarMart_h ; unused dw IndigoPlateauLobby_h dw CopycatsHouseF1_h dw CopycatsHouseF2_h dw FightingDojo_h dw SaffronGym_h dw SaffronHouse1_h dw SaffronMart_h ;id=180 dw SilphCo1_h dw SaffronPokecenter_h dw SaffronHouse2_h dw Route15Gate_h dw Route15GateUpstairs_h dw Route16GateMap_h dw Route16GateUpstairs_h dw Route16House_h dw Route12House_h dw Route18Gate_h ;id=190 dw Route18GateUpstairs_h dw SeafoamIslands1_h dw Route22Gate_h dw VictoryRoad2_h dw Route12GateUpstairs_h dw VermilionHouse3_h dw DiglettsCave_h dw VictoryRoad3_h dw RocketHideout1_h dw RocketHideout2_h ;200 dw RocketHideout3_h dw RocketHideout4_h dw RocketHideoutElevator_h dw RocketHideoutElevator_h ; unused dw RocketHideoutElevator_h ; unused dw RocketHideoutElevator_h ; unused dw SilphCo2_h dw SilphCo3_h dw SilphCo4_h dw SilphCo5_h ;210 dw SilphCo6_h dw SilphCo7_h dw SilphCo8_h dw Mansion2_h dw Mansion3_h dw Mansion4_h dw SafariZoneEast_h dw SafariZoneNorth_h dw SafariZoneWest_h dw SafariZoneCenter_h ;220 dw SafariZoneRestHouse1_h dw SafariZoneSecretHouse_h dw SafariZoneRestHouse2_h dw SafariZoneRestHouse3_h dw SafariZoneRestHouse4_h dw UnknownDungeon2_h dw UnknownDungeon3_h dw UnknownDungeon1_h dw NameRater_h dw CeruleanHouse2_h dw Route16GateMap_h ; unused dw RockTunnel2_h dw SilphCo9_h dw SilphCo10_h dw SilphCo11_h dw SilphCoElevator_h dw SilphCo2_h ; unused dw SilphCo2_h ; unused dw BattleCenterM_h dw TradeCenterM_h dw SilphCo2_h ; unused dw SilphCo2_h ; unused dw SilphCo2_h ; unused dw SilphCo2_h ; unused dw Lorelei_h dw Bruno_h dw Agatha_h ;247 ; this function calls a function that takes necessary actions ; at the beginning of each overworld loop iteration as the player jumps ; down a ledge ; it also ends the jump when it's completed HandleMidJump:: ; 039e (0:039e) ld b, BANK(_HandleMidJump) ld hl, _HandleMidJump jp Bankswitch ; this is jumped to immediately after loading a save / starting a new game / loading a new map EnterMap:: ; 03a6 (0:03a6) ld a,$ff ld [wJoypadForbiddenButtonsMask],a call LoadMapData ; load map data ld b,BANK(Func_c335) ld hl,Func_c335 call Bankswitch ; initialize some variables ld hl,$d72c bit 0,[hl] jr z,.doNotCountSteps ld a,$03 ld [$d13c],a ; some kind of step counter (counts up to 3 steps?) .doNotCountSteps ld hl,$d72e bit 5,[hl] ; did a battle happen immediately before this? res 5,[hl] ; unset the "battle just happened" flag call z,Func_12e7 call nz,MapEntryAfterBattle ld hl,$d732 ld a,[hl] and a,$18 jr z,.didNotFlyOrTeleportIn res 3,[hl] ld b,BANK(Func_70510) ld hl,Func_70510 call Bankswitch ; display fly/teleport in graphical effect call UpdateSprites ; move sprites .didNotFlyOrTeleportIn ld b,BANK(CheckForceBikeOrSurf) ld hl,CheckForceBikeOrSurf call Bankswitch ; handle currents in SF islands and forced bike riding in cycling road ld hl,$d72d res 5,[hl] call UpdateSprites ; move sprites ld hl,$d126 set 5,[hl] set 6,[hl] xor a ld [wJoypadForbiddenButtonsMask],a OverworldLoop:: ; 03ff (0:03ff) call DelayFrame OverworldLoopLessDelay:: ; 0402 (0:0402) call DelayFrame call LoadGBPal ld a,[$d736] bit 6,a ; jumping down a ledge? call nz, HandleMidJump ld a,[wWalkCounter] and a jp nz,.moveAhead ; if the player sprite has not yet completed the walking animation call GetJoypadStateOverworld ; get joypad state (which is possibly simulated) ld b, BANK(Func_1e988) ld hl, Func_1e988 call Bankswitch ld a,[$da46] and a jp nz,WarpFound2 ld hl,$d72d bit 3,[hl] res 3,[hl] jp nz,WarpFound2 ld a,[$d732] and a,$18 jp nz,HandleFlyOrTeleportAway ld a,[W_CUROPPONENT] and a jp nz,.newBattle ld a,[$d730] bit 7,a ; are we simulating button presses? jr z,.notSimulating ld a,[H_CURRENTPRESSEDBUTTONS] jr .checkIfStartIsPressed .notSimulating ld a,[H_NEWLYPRESSEDBUTTONS] .checkIfStartIsPressed bit 3,a ; start button jr z,.startButtonNotPressed ; if START is pressed xor a ld [$ff8c],a ; the $2920 ID for the start menu is 0 jp .displayDialogue .startButtonNotPressed bit 0,a ; A button jp z,.checkIfDownButtonIsPressed ; if A is pressed ld a,[$d730] bit 2,a jp nz,.noDirectionButtonsPressed call Func_30fd jr nz,.checkForOpponent call Func_3eb5 ; check for hidden items, PC's, etc. ld a,[$ffeb] and a jp z,OverworldLoop call IsSpriteOrSignInFrontOfPlayer ; check for sign or sprite in front of the player ld a,[$ff8c] ; $2920 ID for NPC/sign text, if any and a jp z,OverworldLoop .displayDialogue ld a,$35 call Predef ; check what is in front of the player call UpdateSprites ; move sprites ld a,[wFlags_0xcd60] bit 2,a jr nz,.checkForOpponent bit 0,a jr nz,.checkForOpponent FuncCoord 8, 9 ; $c45c ld a,[Coord] ld [$cf0e],a call DisplayTextID ; display either the start menu or the NPC/sign text ld a,[$cc47] and a jr z,.checkForOpponent dec a ld a,$00 ld [$cc47],a jr z,.changeMap ld a,$52 call Predef ld a,[W_CURMAP] ld [$d71a],a call Func_62ce ld a,[W_CURMAP] call SwitchToMapRomBank ; switch to the ROM bank of the current map ld hl,$d367 set 7,[hl] .changeMap jp EnterMap .checkForOpponent ld a,[W_CUROPPONENT] and a jp nz,.newBattle jp OverworldLoop .noDirectionButtonsPressed ld hl,wFlags_0xcd60 res 2,[hl] call UpdateSprites ; move sprites ld a,$01 ld [$cc4b],a ld a,[$d528] ; the direction that was pressed last time and a jp z,OverworldLoop ; if a direction was pressed last time ld [$d529],a ; save the last direction xor a ld [$d528],a ; zero the direction jp OverworldLoop .checkIfDownButtonIsPressed ld a,[H_CURRENTPRESSEDBUTTONS] ; current joypad state bit 7,a ; down button jr z,.checkIfUpButtonIsPressed ld a,$01 ld [$c103],a ld a,$04 jr .handleDirectionButtonPress .checkIfUpButtonIsPressed bit 6,a ; up button jr z,.checkIfLeftButtonIsPressed ld a,$ff ld [$c103],a ld a,$08 jr .handleDirectionButtonPress .checkIfLeftButtonIsPressed bit 5,a ; left button jr z,.checkIfRightButtonIsPressed ld a,$ff ld [$c105],a ld a,$02 jr .handleDirectionButtonPress .checkIfRightButtonIsPressed bit 4,a ; right button jr z,.noDirectionButtonsPressed ld a,$01 ld [$c105],a .handleDirectionButtonPress ld [$d52a],a ; new direction ld a,[$d730] bit 7,a ; are we simulating button presses? jr nz,.noDirectionChange ; ignore direction changes if we are ld a,[$cc4b] and a jr z,.noDirectionChange ld a,[$d52a] ; new direction ld b,a ld a,[$d529] ; old direction cp b jr z,.noDirectionChange ; the code below is strange ; it computes whether or not the player did a 180 degree turn, but then overwrites the result ; also, it does a seemingly pointless loop afterwards swap a ; put old direction in upper half or b ; put new direction in lower half cp a,$48 ; change dir from down to up jr nz,.notDownToUp ld a,$02 ld [$d528],a jr .oddLoop .notDownToUp cp a,$84 ; change dir from up to down jr nz,.notUpToDown ld a,$01 ld [$d528],a jr .oddLoop .notUpToDown cp a,$12 ; change dir from right to left jr nz,.notRightToLeft ld a,$04 ld [$d528],a jr .oddLoop .notRightToLeft cp a,$21 ; change dir from left to right jr nz,.oddLoop ld a,$08 ld [$d528],a .oddLoop ld hl,wFlags_0xcd60 set 2,[hl] ld hl,$cc4b dec [hl] jr nz,.oddLoop ld a,[$d52a] ld [$d528],a call NewBattle jp c,.battleOccurred jp OverworldLoop .noDirectionChange ld a,[$d52a] ; current direction ld [$d528],a ; save direction call UpdateSprites ; move sprites ld a,[$d700] cp a,$02 ; surfing jr z,.surfing ; not surfing call CollisionCheckOnLand jr nc,.noCollision push hl ld hl,$d736 bit 2,[hl] pop hl jp z,OverworldLoop push hl call ExtraWarpCheck ; sets carry if there is a potential to warp pop hl jp c,CheckWarpsCollision jp OverworldLoop .surfing call CollisionCheckOnWater jp c,OverworldLoop .noCollision ld a,$08 ld [wWalkCounter],a jr .moveAhead2 .moveAhead ld a,[$d736] bit 7,a jr z,.noSpinning ld b, BANK(Func_44fd7) ld hl, Func_44fd7 call Bankswitch ; spin while moving .noSpinning call UpdateSprites ; move sprites .moveAhead2 ld hl,wFlags_0xcd60 res 2,[hl] ld a,[$d700] dec a ; riding a bike? jr nz,.normalPlayerSpriteAdvancement ld a,[$d736] bit 6,a ; jumping a ledge? jr nz,.normalPlayerSpriteAdvancement call BikeSpeedup ; if riding a bike and not jumping a ledge .normalPlayerSpriteAdvancement call AdvancePlayerSprite ld a,[wWalkCounter] and a jp nz,CheckMapConnections ; it seems like this check will never succeed (the other place where CheckMapConnections is run works) ; walking animation finished ld a,[$d730] bit 7,a jr nz,.doneStepCounting ; if button presses are being simulated, don't count steps ; step counting ld hl,$d13b ; step counter dec [hl] ld a,[$d72c] bit 0,a jr z,.doneStepCounting ld hl,$d13c dec [hl] jr nz,.doneStepCounting ld hl,$d72c res 0,[hl] .doneStepCounting ld a,[$d790] bit 7,a ; in the safari zone? jr z,.notSafariZone ld b, BANK(Func_1e997) ld hl, Func_1e997 call Bankswitch ld a,[$da46] and a jp nz,WarpFound2 .notSafariZone ld a,[W_ISINBATTLE] and a jp nz,CheckWarpsNoCollision ld a,$13 call Predef ; decrement HP of poisoned pokemon ld a,[$d12d] and a jp nz,HandleBlackOut ; if all pokemon fainted .newBattle call NewBattle ld hl,$d736 res 2,[hl] jp nc,CheckWarpsNoCollision ; check for warps if there was no battle .battleOccurred ld hl,$d72d res 6,[hl] ld hl,W_FLAGS_D733 res 3,[hl] ld hl,$d126 set 5,[hl] set 6,[hl] xor a ld [H_CURRENTPRESSEDBUTTONS],a ; clear joypad state ld a,[W_CURMAP] cp a,CINNABAR_GYM jr nz,.notCinnabarGym ld hl,$d79b set 7,[hl] .notCinnabarGym ld hl,$d72e set 5,[hl] ld a,[W_CURMAP] cp a,OAKS_LAB jp z,.noFaintCheck ld hl, AnyPokemonAliveCheck ld b, BANK(AnyPokemonAliveCheck) call Bankswitch ; check if all the player's pokemon fainted ld a,d and a jr z,.allPokemonFainted .noFaintCheck ld c,$0a call DelayFrames jp EnterMap .allPokemonFainted ld a,$ff ld [$d057],a call RunMapScript jp HandleBlackOut ; function to determine if there will be a battle and execute it (either a trainer battle or wild battle) ; sets carry if a battle occurred and unsets carry if not NewBattle:: ; 0683 (0:0683) ld a,[$d72d] bit 4,a jr nz,.noBattle call Func_30fd jr nz,.noBattle ld a,[$d72e] bit 4,a jr nz,.noBattle ld b, BANK(Func_3ef12) ld hl, Func_3ef12 jp Bankswitch ; determines if a battle will occurr and runs the battle if so .noBattle and a ret ; function to make bikes twice as fast as walking BikeSpeedup:: ; 06a0 (0:06a0) ld a,[$cc57] and a ret nz ld a,[W_CURMAP] cp a,ROUTE_17 ; Cycling Road jr nz,.goFaster ld a,[H_CURRENTPRESSEDBUTTONS] ; current joypad state and a,%01110000 ; bit mask for up, left, right buttons ret nz .goFaster jp AdvancePlayerSprite ; check if the player has stepped onto a warp after having not collided CheckWarpsNoCollision:: ; 06b4 (0:06b4) ld a,[$d3ae] ; number of warps and a jp z,CheckMapConnections ld a,[$d3ae] ; number of warps ld b,$00 ld c,a ld a,[W_YCOORD] ld d,a ld a,[W_XCOORD] ld e,a ld hl,$d3af ; start of warp entries CheckWarpsNoCollisionLoop:: ; 06cc (0:06cc) ld a,[hli] ; check if the warp's Y position matches cp d jr nz,CheckWarpsNoCollisionRetry1 ld a,[hli] ; check if the warp's X position matches cp e jr nz,CheckWarpsNoCollisionRetry2 ; if a match was found push hl push bc ld hl,$d736 set 2,[hl] ld b, BANK(Func_c49d) ld hl, Func_c49d call Bankswitch ; check if the player sprite is standing on a "door" tile pop bc pop hl jr c,WarpFound1 ; if it is, go to 0735 push hl push bc call ExtraWarpCheck ; sets carry if the warp is confirmed pop bc pop hl jr nc,CheckWarpsNoCollisionRetry2 ; if the extra check passed ld a,[W_FLAGS_D733] bit 2,a jr nz,WarpFound1 push de push bc call GetJoypadState pop bc pop de ld a,[H_CURRENTPRESSEDBUTTONS] ; current joypad state and a,%11110000 ; bit mask for directional buttons jr z,CheckWarpsNoCollisionRetry2 ; if directional buttons aren't being pressed, do not pass through the warp jr WarpFound1 ; check if the player has stepped onto a warp after having collided CheckWarpsCollision:: ; 0706 (0:0706) ld a,[$d3ae] ; number of warps ld c,a ld hl,$d3af ; start of warp entries .loop ld a,[hli] ; Y coordinate of warp ld b,a ld a,[W_YCOORD] cp b jr nz,.retry1 ld a,[hli] ; X coordinate of warp ld b,a ld a,[W_XCOORD] cp b jr nz,.retry2 ld a,[hli] ld [$d42f],a ; save target warp ID ld a,[hl] ld [$ff8b],a ; save target map jr WarpFound2 .retry1 inc hl .retry2 inc hl inc hl dec c jr nz,.loop jp OverworldLoop CheckWarpsNoCollisionRetry1:: ; 072f (0:072f) inc hl CheckWarpsNoCollisionRetry2:: ; 0730 (0:0730) inc hl inc hl jp ContinueCheckWarpsNoCollisionLoop WarpFound1:: ; 0735 (0:0735) ld a,[hli] ld [$d42f],a ; save target warp ID ld a,[hli] ld [$ff8b],a ; save target map WarpFound2:: ; 073c (0:073c) ld a,[$d3ae] ; number of warps sub c ld [$d73b],a ; save ID of used warp ld a,[W_CURMAP] ld [$d73c],a call CheckIfInOutsideMap jr nz,.indoorMaps ; this is for handling "outside" maps that can't have the 0xFF destination map ld a,[W_CURMAP] ld [$d365],a ; save current map as previous map ld a,[W_CURMAPWIDTH] ld [$d366],a ld a,[$ff8b] ; destination map number ld [W_CURMAP],a ; change current map to destination map cp a,ROCK_TUNNEL_1 jr nz,.notRockTunnel ld a,$06 ld [$d35d],a call GBFadeIn1 .notRockTunnel call PlayMapChangeSound jr .done ; for maps that can have the 0xFF destination map, which means to return to the outside map; not all these maps are necessarily indoors, though .indoorMaps ld a,[$ff8b] ; destination map cp a,$ff jr z,.goBackOutside ; if not going back to the previous map ld [W_CURMAP],a ; current map number ld b, BANK(Func_70787) ld hl, Func_70787 call Bankswitch ; check if the warp was a Silph Co. teleporter ld a,[$cd5b] dec a jr nz,.notTeleporter ; if it's a Silph Co. teleporter ld hl,$d732 set 3,[hl] call DoFlyOrTeleportAwayGraphics jr .skipMapChangeSound .notTeleporter call PlayMapChangeSound .skipMapChangeSound ld hl,$d736 res 0,[hl] res 1,[hl] jr .done .goBackOutside ld a,[$d365] ; previous map ld [W_CURMAP],a call PlayMapChangeSound xor a ld [$d35d],a .done ld hl,$d736 set 0,[hl] call Func_12da jp EnterMap ContinueCheckWarpsNoCollisionLoop:: ; 07b5 (0:07b5) inc b ; increment warp number dec c ; decrement number of warps jp nz,CheckWarpsNoCollisionLoop ; if no matching warp was found CheckMapConnections:: ; 07ba (0:07ba) .checkWestMap ld a,[W_XCOORD] cp a,$ff jr nz,.checkEastMap ld a,[$d387] ld [W_CURMAP],a ld a,[$d38f] ; new X coordinate upon entering west map ld [W_XCOORD],a ld a,[W_YCOORD] ld c,a ld a,[$d38e] ; Y adjustment upon entering west map add c ld c,a ld [W_YCOORD],a ld a,[$d390] ; pointer to upper left corner of map without adjustment for Y position ld l,a ld a,[$d391] ld h,a srl c jr z,.savePointer1 .pointerAdjustmentLoop1 ld a,[$d38d] ; width of connected map add a,$06 ld e,a ld d,$00 ld b,$00 add hl,de dec c jr nz,.pointerAdjustmentLoop1 .savePointer1 ld a,l ld [$d35f],a ; pointer to upper left corner of current tile block map section ld a,h ld [$d360],a jp .loadNewMap .checkEastMap ld b,a ld a,[$d525] ; map width cp b jr nz,.checkNorthMap ld a,[$d392] ld [W_CURMAP],a ld a,[$d39a] ; new X coordinate upon entering east map ld [W_XCOORD],a ld a,[W_YCOORD] ld c,a ld a,[$d399] ; Y adjustment upon entering east map add c ld c,a ld [W_YCOORD],a ld a,[$d39b] ; pointer to upper left corner of map without adjustment for Y position ld l,a ld a,[$d39c] ld h,a srl c jr z,.savePointer2 .pointerAdjustmentLoop2 ld a,[$d398] add a,$06 ld e,a ld d,$00 ld b,$00 add hl,de dec c jr nz,.pointerAdjustmentLoop2 .savePointer2 ld a,l ld [$d35f],a ; pointer to upper left corner of current tile block map section ld a,h ld [$d360],a jp .loadNewMap .checkNorthMap ld a,[W_YCOORD] cp a,$ff jr nz,.checkSouthMap ld a,[$d371] ld [W_CURMAP],a ld a,[$d378] ; new Y coordinate upon entering north map ld [W_YCOORD],a ld a,[W_XCOORD] ld c,a ld a,[$d379] ; X adjustment upon entering north map add c ld c,a ld [W_XCOORD],a ld a,[$d37a] ; pointer to upper left corner of map without adjustment for X position ld l,a ld a,[$d37b] ld h,a ld b,$00 srl c add hl,bc ld a,l ld [$d35f],a ; pointer to upper left corner of current tile block map section ld a,h ld [$d360],a jp .loadNewMap .checkSouthMap ld b,a ld a,[$d524] cp b jr nz,.didNotEnterConnectedMap ld a,[$d37c] ld [W_CURMAP],a ld a,[$d383] ; new Y coordinate upon entering south map ld [W_YCOORD],a ld a,[W_XCOORD] ld c,a ld a,[$d384] ; X adjustment upon entering south map add c ld c,a ld [W_XCOORD],a ld a,[$d385] ; pointer to upper left corner of map without adjustment for X position ld l,a ld a,[$d386] ld h,a ld b,$00 srl c add hl,bc ld a,l ld [$d35f],a ; pointer to upper left corner of current tile block map section ld a,h ld [$d360],a .loadNewMap ; load the connected map that was entered call LoadMapHeader call Func_2312 ; music ld b,$09 call GoPAL_SET ; Since the sprite set shouldn't change, this will just update VRAM slots at ; $C2XE without loading any tile patterns. ld b,BANK(InitMapSprites) ld hl,InitMapSprites call Bankswitch call LoadTileBlockMap jp OverworldLoopLessDelay .didNotEnterConnectedMap jp OverworldLoop ; function to play a sound when changing maps PlayMapChangeSound:: ; 08c9 (0:08c9) FuncCoord 8, 8 ; $c448 ld a,[Coord] ; upper left tile of the 4x4 square the player's sprite is standing on cp a,$0b ; door tile in tileset 0 jr nz,.didNotGoThroughDoor ld a,$ad jr .playSound .didNotGoThroughDoor ld a,$b5 .playSound call PlaySound ld a,[$d35d] and a ret nz jp GBFadeIn1 CheckIfInOutsideMap:: ; 08e1 (0:08e1) ; If the player is in an outside map (a town or route), set the z flag ld a,[W_CURMAPTILESET] and a ; most towns/routes have tileset 0 ret z cp a,$17 ; Route 23 / Indigo Plateau ret ; this function is an extra check that sometimes has to pass in order to warp, beyond just standing on a warp ; the "sometimes" qualification is necessary because of CheckWarpsNoCollision's behavior ; depending on the map, either "function 1" or "function 2" is used for the check ; "function 1" passes when the player is at the edge of the map and is facing towards the outside of the map ; "function 2" passes when the the tile in front of the player is among a certain set ; sets carry if the check passes, otherwise clears carry ExtraWarpCheck:: ; 08e9 (0:08e9) ld a,[W_CURMAP] cp a,SS_ANNE_3 jr z,.useFunction1 cp a,ROCKET_HIDEOUT_1 jr z,.useFunction2 cp a,ROCKET_HIDEOUT_2 jr z,.useFunction2 cp a,ROCKET_HIDEOUT_4 jr z,.useFunction2 cp a,ROCK_TUNNEL_1 jr z,.useFunction2 ld a,[W_CURMAPTILESET] and a ; outside tileset jr z,.useFunction2 cp a,$0d ; S.S. Anne tileset jr z,.useFunction2 cp a,$0e ; Vermilion Port tileset jr z,.useFunction2 cp a,$17 ; Indigo Plateau tileset jr z,.useFunction2 .useFunction1 ld hl,Func_c3ff jr .doBankswitch .useFunction2 ld hl, Func_c44e .doBankswitch ld b, BANK(Func_c44e) jp Bankswitch MapEntryAfterBattle:: ; 091f (0:091f) ld b, BANK(Func_c35f) ld hl, Func_c35f call Bankswitch ; function that appears to disable warp testing after collisions if the player is standing on a warp ld a,[$d35d] and a jp z,GBFadeIn2 jp LoadGBPal ; for when all the player's pokemon faint ; other code prints the "you blacked out" message before this is called HandleBlackOut:: ; 0931 (0:0931) call GBFadeIn1 ld a,$08 call StopMusic ld hl,$d72e res 5,[hl] ld a,Bank(Func_40b0) ; Bank(Func_40b0) and Bank(Func_62ce) need to be equal. ld [H_LOADEDROMBANK],a ld [$2000],a call Func_40b0 call Func_62ce call Func_2312 jp Func_5d5f StopMusic:: ; 0951 (0:0951) ld [wMusicHeaderPointer],a ld a,$ff ld [$c0ee],a call PlaySound .waitLoop ld a,[wMusicHeaderPointer] and a jr nz,.waitLoop jp StopAllSounds HandleFlyOrTeleportAway:: ; 0965 (0:0965) call UpdateSprites ; move sprites call Delay3 xor a ld [$cf0b],a ld [$d700],a ld [$d057],a ld [$d35d],a ld hl,$d732 set 2,[hl] res 5,[hl] call DoFlyOrTeleportAwayGraphics ld a,Bank(Func_62ce) ld [H_LOADEDROMBANK],a ld [$2000],a call Func_62ce jp Func_5d5f ; function that calls a function to do fly away or teleport away graphics DoFlyOrTeleportAwayGraphics:: ; 098f (0:098f) ld b, BANK(_DoFlyOrTeleportAwayGraphics) ld hl, _DoFlyOrTeleportAwayGraphics jp Bankswitch ; load sprite graphics based on whether the player is standing, biking, or surfing LoadPlayerSpriteGraphics:: ; 0997 (0:0997) ld a,[$d700] dec a jr z,.ridingBike ld a,[$ffd7] and a jr nz,.determineGraphics jr .startWalking .ridingBike call IsBikeRidingAllowed jr c,.determineGraphics ; don't start walking if bike riding is allowed .startWalking xor a ld [$d700],a ld [$d11a],a jp LoadWalkingPlayerSpriteGraphics .determineGraphics ld a,[$d700] and a jp z,LoadWalkingPlayerSpriteGraphics dec a jp z,LoadBikePlayerSpriteGraphics dec a jp z,LoadSurfingPlayerSpriteGraphics jp LoadWalkingPlayerSpriteGraphics ; function to check if bike riding is allowed on the current map ; sets carry if bike is allowed, clears carry otherwise IsBikeRidingAllowed:: ; 09c5 (0:09c5) ld a,[W_CURMAP] cp a,ROUTE_23 jr z,.allowed cp a,INDIGO_PLATEAU jr z,.allowed ld a,[W_CURMAPTILESET] ld b,a ld hl,BikeRidingTilesets .loop ld a,[hli] cp b jr z,.allowed inc a jr nz,.loop and a ret .allowed scf ret BikeRidingTilesets:: ; 09e2 (0:09e2) db $00, $03, $0B, $0E, $11, $FF ; load the tile pattern data of the current tileset into VRAM LoadTilesetTilePatternData:: ; 09e8 (0:09e8) ld a,[$d52e] ld l,a ld a,[$d52f] ld h,a ld de,$9000 ld bc,$0600 ld a,[$d52b] jp FarCopyData2 ; this loads the current maps complete tile map (which references blocks, not individual tiles) to C6E8 ; it can also load partial tile maps of connected maps into a border of length 3 around the current map LoadTileBlockMap:: ; 09fc (0:09fc) ; fill C6E8-CBFB with the background tile ld hl,$c6e8 ld a,[$d3ad] ; background tile number ld d,a ld bc,$0514 .backgroundTileLoop ld a,d ld [hli],a dec bc ld a,c or b jr nz,.backgroundTileLoop ; load tile map of current map (made of tile block IDs) ; a 3-byte border at the edges of the map is kept so that there is space for map connections ld hl,$c6e8 ld a,[W_CURMAPWIDTH] ld [$ff8c],a add a,$06 ; border (east and west) ld [$ff8b],a ; map width + border ld b,$00 ld c,a ; make space for north border (next 3 lines) add hl,bc add hl,bc add hl,bc ld c,$03 add hl,bc ; this puts us past the (west) border ld a,[$d36a] ; tile map pointer ld e,a ld a,[$d36b] ld d,a ; de = tile map pointer ld a,[W_CURMAPHEIGHT] ld b,a .rowLoop ; copy one row each iteration push hl ld a,[$ff8c] ; map width (without border) ld c,a .rowInnerLoop ld a,[de] inc de ld [hli],a dec c jr nz,.rowInnerLoop ; add the map width plus the border to the base address of the current row to get the next row's address pop hl ld a,[$ff8b] ; map width + border add l ld l,a jr nc,.noCarry inc h .noCarry dec b jr nz,.rowLoop .northConnection ld a,[$d371] cp a,$ff jr z,.southConnection call SwitchToMapRomBank ld a,[$d372] ld l,a ld a,[$d373] ld h,a ld a,[$d374] ld e,a ld a,[$d375] ld d,a ld a,[$d376] ld [$ff8b],a ld a,[$d377] ld [$ff8c],a call LoadNorthSouthConnectionsTileMap .southConnection ld a,[$d37c] cp a,$ff jr z,.westConnection call SwitchToMapRomBank ld a,[$d37d] ld l,a ld a,[$d37e] ld h,a ld a,[$d37f] ld e,a ld a,[$d380] ld d,a ld a,[$d381] ld [$ff8b],a ld a,[$d382] ld [$ff8c],a call LoadNorthSouthConnectionsTileMap .westConnection ld a,[$d387] cp a,$ff jr z,.eastConnection call SwitchToMapRomBank ld a,[$d388] ld l,a ld a,[$d389] ld h,a ld a,[$d38a] ld e,a ld a,[$d38b] ld d,a ld a,[$d38c] ld b,a ld a,[$d38d] ld [$ff8b],a call LoadEastWestConnectionsTileMap .eastConnection ld a,[$d392] cp a,$ff jr z,.done call SwitchToMapRomBank ld a,[$d393] ld l,a ld a,[$d394] ld h,a ld a,[$d395] ld e,a ld a,[$d396] ld d,a ld a,[$d397] ld b,a ld a,[$d398] ld [$ff8b],a call LoadEastWestConnectionsTileMap .done ret LoadNorthSouthConnectionsTileMap:: ; 0ade (0:0ade) ld c,$03 .loop push de push hl ld a,[$ff8b] ; width of connection ld b,a .innerLoop ld a,[hli] ld [de],a inc de dec b jr nz,.innerLoop pop hl pop de ld a,[$ff8c] ; width of connected map add l ld l,a jr nc,.noCarry1 inc h .noCarry1 ld a,[W_CURMAPWIDTH] add a,$06 add e ld e,a jr nc,.noCarry2 inc d .noCarry2 dec c jr nz,.loop ret LoadEastWestConnectionsTileMap:: ; 0b02 (0:0b02) push hl push de ld c,$03 .innerLoop ld a,[hli] ld [de],a inc de dec c jr nz,.innerLoop pop de pop hl ld a,[$ff8b] ; width of connected map add l ld l,a jr nc,.noCarry1 inc h .noCarry1 ld a,[W_CURMAPWIDTH] add a,$06 add e ld e,a jr nc,.noCarry2 inc d .noCarry2 dec b jr nz,LoadEastWestConnectionsTileMap ret ; function to check if there is a sign or sprite in front of the player ; if so, it is stored in [$FF8C] ; if not, [$FF8C] is set to 0 IsSpriteOrSignInFrontOfPlayer:: ; 0b23 (0:0b23) xor a ld [$ff8c],a ld a,[$d4b0] ; number of signs in the map and a jr z,.extendRangeOverCounter ; if there are signs ld a,$35 call Predef ; get the coordinates in front of the player in de ld hl,$d4b1 ; start of sign coordinates ld a,[$d4b0] ; number of signs in the map ld b,a ld c,$00 .signLoop inc c ld a,[hli] ; sign Y cp d jr z,.yCoordMatched inc hl jr .retry .yCoordMatched ld a,[hli] ; sign X cp e jr nz,.retry .xCoordMatched ; found sign push hl push bc ld hl,$d4d1 ; start of sign text ID's ld b,$00 dec c add hl,bc ld a,[hl] ld [$ff8c],a ; store sign text ID pop bc pop hl ret .retry dec b jr nz,.signLoop ; check if the player is front of a counter in a pokemon center, pokemart, etc. and if so, extend the range at which he can talk to the NPC .extendRangeOverCounter ld a,$35 call Predef ; get the tile in front of the player in c ld hl,$d532 ; list of tiles that extend talking range (counter tiles) ld b,$03 ld d,$20 ; talking range in pixels (long range) .counterTilesLoop ld a,[hli] cp c jr z,IsSpriteInFrontOfPlayer2 ; jumps if the tile in front of the player is a counter tile dec b jr nz,.counterTilesLoop ; part of the above function, but sometimes its called on its own, when signs are irrelevant ; the caller must zero [$FF8C] IsSpriteInFrontOfPlayer:: ; 0b6b (0:0b6b) ld d,$10 ; talking range in pixels (normal range) IsSpriteInFrontOfPlayer2:: ; 0b6d (0:0b6d) ld bc,$3c40 ; Y and X position of player sprite ld a,[$c109] ; direction the player is facing .checkIfPlayerFacingUp cp a,$04 jr nz,.checkIfPlayerFacingDown ; facing up ld a,b sub d ld b,a ld a,$08 jr .doneCheckingDirection .checkIfPlayerFacingDown cp a,$00 jr nz,.checkIfPlayerFacingRight ; facing down ld a,b add d ld b,a ld a,$04 jr .doneCheckingDirection .checkIfPlayerFacingRight cp a,$0c jr nz,.playerFacingLeft ; facing right ld a,c add d ld c,a ld a,$01 jr .doneCheckingDirection .playerFacingLeft ; facing left ld a,c sub d ld c,a ld a,$02 .doneCheckingDirection ld [$d52a],a ld a,[$d4e1] ; number of sprites and a ret z ; if there are sprites ld hl,$c110 ld d,a ld e,$01 .spriteLoop push hl ld a,[hli] ; image (0 if no sprite) and a jr z,.nextSprite inc l ld a,[hli] ; sprite visibility inc a jr z,.nextSprite inc l ld a,[hli] ; Y location cp b jr nz,.nextSprite inc l ld a,[hl] ; X location cp c jr z,.foundSpriteInFrontOfPlayer .nextSprite pop hl ld a,l add a,$10 ld l,a inc e dec d jr nz,.spriteLoop ret .foundSpriteInFrontOfPlayer pop hl ld a,l and a,$f0 inc a ld l,a set 7,[hl] ld a,e ld [$ff8c],a ; store sprite ID ret ; function to check if the player will jump down a ledge and check if the tile ahead is passable (when not surfing) ; sets the carry flag if there is a collision, and unsets it if there isn't a collision CollisionCheckOnLand:: ; 0bd1 (0:0bd1) ld a,[$d736] bit 6,a ; is the player jumping? jr nz,.noCollision ; if not jumping a ledge ld a,[$cd38] and a jr nz,.noCollision ld a,[$d52a] ; the direction that the player is trying to go in ld d,a ld a,[$c10c] ; the player sprite's collision data (bit field) (set in the sprite movement code) and d ; check if a sprite is in the direction the player is trying to go jr nz,.collision xor a ld [$ff8c],a call IsSpriteInFrontOfPlayer ; check for sprite collisions again? when does the above check fail to detect a sprite collision? ld a,[$ff8c] and a ; was there a sprite collision? jr nz,.collision ; if no sprite collision ld hl,TilePairCollisionsLand call CheckForJumpingAndTilePairCollisions jr c,.collision call CheckTilePassable jr nc,.noCollision .collision ld a,[$c02a] cp a,$b4 ; check if collision sound is already playing jr z,.setCarry ld a,$b4 call PlaySound ; play collision sound (if it's not already playing) .setCarry scf ret .noCollision and a ret ; function that checks if the tile in front of the player is passable ; clears carry if it is, sets carry if not CheckTilePassable:: ; 0c10 (0:0c10) ld a,$35 call Predef ; get tile in front of player ld a,[$cfc6] ; tile in front of player ld c,a ld hl,$d530 ; pointer to list of passable tiles ld a,[hli] ld h,[hl] ld l,a ; hl now points to passable tiles .loop ld a,[hli] cp a,$ff jr z,.tileNotPassable cp c ret z jr .loop .tileNotPassable scf ret ; check if the player is going to jump down a small ledge ; and check for collisions that only occur between certain pairs of tiles ; Input: hl - address of directional collision data ; sets carry if there is a collision and unsets carry if not CheckForJumpingAndTilePairCollisions:: ; 0c2a (0:0c2a) push hl ld a,$35 call Predef ; get the tile in front of the player push de push bc ld b, BANK(Func_1a672) ld hl, Func_1a672 call Bankswitch ; check if the player is trying to jump a ledge pop bc pop de pop hl and a ld a,[$d736] bit 6,a ; is the player jumping? ret nz ; if not jumping Func_c44:: ; 0c44 (0:0c44) FuncCoord 8, 9 ; $c45c ld a,[Coord] ; tile the player is on ld [$cf0e],a CheckForTilePairCollisions:: ; 0c4a (0:0c4a) ld a,[$cfc6] ; tile in front of the player ld c,a .tilePairCollisionLoop ld a,[W_CURMAPTILESET] ; tileset number ld b,a ld a,[hli] cp a,$ff jr z,.noMatch cp b jr z,.tilesetMatches inc hl .retry inc hl jr .tilePairCollisionLoop .tilesetMatches ld a,[$cf0e] ; tile the player is on ld b,a ld a,[hl] cp b jr z,.currentTileMatchesFirstInPair inc hl ld a,[hl] cp b jr z,.currentTileMatchesSecondInPair jr .retry .currentTileMatchesFirstInPair inc hl ld a,[hl] cp c jr z,.foundMatch jr .tilePairCollisionLoop .currentTileMatchesSecondInPair dec hl ld a,[hli] cp c inc hl jr nz,.tilePairCollisionLoop .foundMatch scf ret .noMatch and a ret ; FORMAT: tileset number, tile 1, tile 2 ; terminated by 0xFF ; these entries indicate that the player may not cross between tile 1 and tile 2 ; it's mainly used to simulate differences in elevation TilePairCollisionsLand:: ; 0c7e (0:0c7e) db $11, $20, $05; db $11, $41, $05; db $03, $30, $2E; db $11, $2A, $05; db $11, $05, $21; db $03, $52, $2E; db $03, $55, $2E; db $03, $56, $2E; db $03, $20, $2E; db $03, $5E, $2E; db $03, $5F, $2E; db $FF; TilePairCollisionsWater:: ; 0ca0 (0:0ca0) db $03, $14, $2E; db $03, $48, $2E; db $11, $14, $05; db $FF; ; this builds a tile map from the tile block map based on the current X/Y coordinates of the player's character LoadCurrentMapView:: ; 0caa (0:0caa) ld a,[H_LOADEDROMBANK] push af ld a,[$d52b] ; tile data ROM bank ld [H_LOADEDROMBANK],a ld [$2000],a ; switch to ROM bank that contains tile data ld a,[$d35f] ; address of upper left corner of current map view ld e,a ld a,[$d360] ld d,a ld hl,wTileMapBackup ld b,$05 .rowLoop ; each loop iteration fills in one row of tile blocks push hl push de ld c,$06 .rowInnerLoop ; loop to draw each tile block of the current row push bc push de push hl ld a,[de] ld c,a ; tile block number call DrawTileBlock pop hl pop de pop bc inc hl inc hl inc hl inc hl inc de dec c jr nz,.rowInnerLoop ; update tile block map pointer to next row's address pop de ld a,[W_CURMAPWIDTH] add a,$06 add e ld e,a jr nc,.noCarry inc d .noCarry ; update tile map pointer to next row's address pop hl ld a,$60 add l ld l,a jr nc,.noCarry2 inc h .noCarry2 dec b jr nz,.rowLoop ld hl,wTileMapBackup ld bc,$0000 .adjustForYCoordWithinTileBlock ld a,[W_YBLOCKCOORD] and a jr z,.adjustForXCoordWithinTileBlock ld bc,$0030 add hl,bc .adjustForXCoordWithinTileBlock ld a,[W_XBLOCKCOORD] and a jr z,.copyToVisibleAreaBuffer ld bc,$0002 add hl,bc .copyToVisibleAreaBuffer ld de,wTileMap ; base address for the tiles that are directly transfered to VRAM during V-blank ld b,$12 .rowLoop2 ld c,$14 .rowInnerLoop2 ld a,[hli] ld [de],a inc de dec c jr nz,.rowInnerLoop2 ld a,$04 add l ld l,a jr nc,.noCarry3 inc h .noCarry3 dec b jr nz,.rowLoop2 pop af ld [H_LOADEDROMBANK],a ld [$2000],a ; restore previous ROM bank ret AdvancePlayerSprite:: ; 0d27 (0:0d27) ld a,[$c103] ; delta Y ld b,a ld a,[$c105] ; delta X ld c,a ld hl,wWalkCounter ; walking animation counter dec [hl] jr nz,.afterUpdateMapCoords ; if it's the end of the animation, update the player's map coordinates ld a,[W_YCOORD] add b ld [W_YCOORD],a ld a,[W_XCOORD] add c ld [W_XCOORD],a .afterUpdateMapCoords ld a,[wWalkCounter] ; walking animation counter cp a,$07 jp nz,.scrollBackgroundAndSprites ; if this is the first iteration of the animation ld a,c cp a,$01 jr nz,.checkIfMovingWest ; moving east ld a,[$d526] ld e,a and a,$e0 ld d,a ld a,e add a,$02 and a,$1f or d ld [$d526],a jr .adjustXCoordWithinBlock .checkIfMovingWest cp a,$ff jr nz,.checkIfMovingSouth ; moving west ld a,[$d526] ld e,a and a,$e0 ld d,a ld a,e sub a,$02 and a,$1f or d ld [$d526],a jr .adjustXCoordWithinBlock .checkIfMovingSouth ld a,b cp a,$01 jr nz,.checkIfMovingNorth ; moving south ld a,[$d526] add a,$40 ld [$d526],a jr nc,.adjustXCoordWithinBlock ld a,[$d527] inc a and a,$03 or a,$98 ld [$d527],a jr .adjustXCoordWithinBlock .checkIfMovingNorth cp a,$ff jr nz,.adjustXCoordWithinBlock ; moving north ld a,[$d526] sub a,$40 ld [$d526],a jr nc,.adjustXCoordWithinBlock ld a,[$d527] dec a and a,$03 or a,$98 ld [$d527],a .adjustXCoordWithinBlock ld a,c and a jr z,.pointlessJump ; mistake? .pointlessJump ld hl,W_XBLOCKCOORD ld a,[hl] add c ld [hl],a cp a,$02 jr nz,.checkForMoveToWestBlock ; moved into the tile block to the east xor a ld [hl],a ld hl,$d4e3 inc [hl] ld de,$d35f call MoveTileBlockMapPointerEast jr .updateMapView .checkForMoveToWestBlock cp a,$ff jr nz,.adjustYCoordWithinBlock ; moved into the tile block to the west ld a,$01 ld [hl],a ld hl,$d4e3 dec [hl] ld de,$d35f call MoveTileBlockMapPointerWest jr .updateMapView .adjustYCoordWithinBlock ld hl,W_YBLOCKCOORD ld a,[hl] add b ld [hl],a cp a,$02 jr nz,.checkForMoveToNorthBlock ; moved into the tile block to the south xor a ld [hl],a ld hl,$d4e2 inc [hl] ld de,$d35f ld a,[W_CURMAPWIDTH] call MoveTileBlockMapPointerSouth jr .updateMapView .checkForMoveToNorthBlock cp a,$ff jr nz,.updateMapView ; moved into the tile block to the north ld a,$01 ld [hl],a ld hl,$d4e2 dec [hl] ld de,$d35f ld a,[W_CURMAPWIDTH] call MoveTileBlockMapPointerNorth .updateMapView call LoadCurrentMapView ld a,[$c103] ; delta Y cp a,$01 jr nz,.checkIfMovingNorth2 ; if moving south call ScheduleSouthRowRedraw jr .scrollBackgroundAndSprites .checkIfMovingNorth2 cp a,$ff jr nz,.checkIfMovingEast2 ; if moving north call ScheduleNorthRowRedraw jr .scrollBackgroundAndSprites .checkIfMovingEast2 ld a,[$c105] ; delta X cp a,$01 jr nz,.checkIfMovingWest2 ; if moving east call ScheduleEastColumnRedraw jr .scrollBackgroundAndSprites .checkIfMovingWest2 cp a,$ff jr nz,.scrollBackgroundAndSprites ; if moving west call ScheduleWestColumnRedraw .scrollBackgroundAndSprites ld a,[$c103] ; delta Y ld b,a ld a,[$c105] ; delta X ld c,a sla b sla c ld a,[$ffaf] add b ld [$ffaf],a ; update background scroll Y ld a,[$ffae] add c ld [$ffae],a ; update background scroll X ; shift all the sprites in the direction opposite of the player's motion ; so that the player appears to move relative to them ld hl,$c114 ld a,[$d4e1] ; number of sprites and a ; are there any sprites? jr z,.done ld e,a .spriteShiftLoop ld a,[hl] sub b ld [hli],a inc l ld a,[hl] sub c ld [hl],a ld a,$0e add l ld l,a dec e jr nz,.spriteShiftLoop .done ret ; the following four functions are used to move the pointer to the upper left ; corner of the tile block map in the direction of motion MoveTileBlockMapPointerEast:: ; 0e65 (0:0e65) ld a,[de] add a,$01 ld [de],a ret nc inc de ld a,[de] inc a ld [de],a ret MoveTileBlockMapPointerWest:: ; 0e6f (0:0e6f) ld a,[de] sub a,$01 ld [de],a ret nc inc de ld a,[de] dec a ld [de],a ret MoveTileBlockMapPointerSouth:: ; 0e79 (0:0e79) add a,$06 ld b,a ld a,[de] add b ld [de],a ret nc inc de ld a,[de] inc a ld [de],a ret MoveTileBlockMapPointerNorth:: ; 0e85 (0:0e85) add a,$06 ld b,a ld a,[de] sub b ld [de],a ret nc inc de ld a,[de] dec a ld [de],a ret ; the following 6 functions are used to tell the V-blank handler to redraw ; the portion of the map that was newly exposed due to the player's movement ScheduleNorthRowRedraw:: ; 0e91 (0:0e91) FuncCoord 0, 0 ld hl,Coord call ScheduleRowRedrawHelper ld a,[$d526] ld [H_SCREENEDGEREDRAWADDR],a ld a,[$d527] ld [H_SCREENEDGEREDRAWADDR + 1],a ld a,REDRAWROW ld [H_SCREENEDGEREDRAW],a ret ScheduleRowRedrawHelper:: ; 0ea6 (0:0ea6) ld de,wScreenEdgeTiles ld c,$28 .loop ld a,[hli] ld [de],a inc de dec c jr nz,.loop ret ScheduleSouthRowRedraw:: ; 0eb2 (0:0eb2) FuncCoord 0,16 ld hl,Coord call ScheduleRowRedrawHelper ld a,[$d526] ld l,a ld a,[$d527] ld h,a ld bc,$0200 add hl,bc ld a,h and a,$03 or a,$98 ld [H_SCREENEDGEREDRAWADDR + 1],a ld a,l ld [H_SCREENEDGEREDRAWADDR],a ld a,REDRAWROW ld [H_SCREENEDGEREDRAW],a ret ScheduleEastColumnRedraw:: ; 0ed3 (0:0ed3) FuncCoord 18,0 ld hl,Coord call ScheduleColumnRedrawHelper ld a,[$d526] ld c,a and a,$e0 ld b,a ld a,c add a,18 and a,$1f or b ld [H_SCREENEDGEREDRAWADDR],a ld a,[$d527] ld [H_SCREENEDGEREDRAWADDR + 1],a ld a,REDRAWCOL ld [H_SCREENEDGEREDRAW],a ret ScheduleColumnRedrawHelper:: ; 0ef2 (0:0ef2) ld de,wScreenEdgeTiles ld c,$12 .loop ld a,[hli] ld [de],a inc de ld a,[hl] ld [de],a inc de ld a,19 add l ld l,a jr nc,.noCarry inc h .noCarry dec c jr nz,.loop ret ScheduleWestColumnRedraw:: ; 0f08 (0:0f08) FuncCoord 0,0 ld hl,Coord call ScheduleColumnRedrawHelper ld a,[$d526] ld [H_SCREENEDGEREDRAWADDR],a ld a,[$d527] ld [H_SCREENEDGEREDRAWADDR + 1],a ld a,REDRAWCOL ld [H_SCREENEDGEREDRAW],a ret ; function to write the tiles that make up a tile block to memory ; Input: c = tile block ID, hl = destination address DrawTileBlock:: ; 0f1d (0:0f1d) push hl ld a,[$d52c] ; pointer to tiles ld l,a ld a,[$d52d] ld h,a ld a,c swap a ld b,a and a,$f0 ld c,a ld a,b and a,$0f ld b,a ; bc = tile block ID * 0x10 add hl,bc ld d,h ld e,l ; de = address of the tile block's tiles pop hl ld c,$04 ; 4 loop iterations .loop ; each loop iteration, write 4 tile numbers push bc ld a,[de] ld [hli],a inc de ld a,[de] ld [hli],a inc de ld a,[de] ld [hli],a inc de ld a,[de] ld [hl],a inc de ld bc,$0015 add hl,bc pop bc dec c jr nz,.loop ret ; function to update joypad state and simulate button presses GetJoypadStateOverworld:: ; 0f4d (0:0f4d) xor a ld [$c103],a ld [$c105],a call RunMapScript call GetJoypadState ld a,[W_FLAGS_D733] bit 3,a ; check if a trainer wants a challenge jr nz,.notForcedDownwards ld a,[W_CURMAP] cp a,ROUTE_17 ; Cycling Road jr nz,.notForcedDownwards ld a,[H_CURRENTPRESSEDBUTTONS] ; current joypad state and a,%11110011 ; bit mask for all directions and A/B jr nz,.notForcedDownwards ld a,%10000000 ; down pressed ld [H_CURRENTPRESSEDBUTTONS],a ; on the cycling road, if there isn't a trainer and the player isn't pressing buttons, simulate a down press .notForcedDownwards ld a,[$d730] bit 7,a ret z ; if simulating button presses ld a,[H_CURRENTPRESSEDBUTTONS] ; current joypad state ld b,a ld a,[$cd3b] ; bit mask for button presses that override simulated ones and b ret nz ; return if the simulated button presses are overridden ld hl,$cd38 ; index of current simulated button press dec [hl] ld a,[hl] cp a,$ff jr z,.doneSimulating ; if the end of the simulated button presses has been reached ld hl,$ccd3 ; base address of simulated button presses ; add offset to base address add l ld l,a jr nc,.noCarry inc h .noCarry ld a,[hl] ld [H_CURRENTPRESSEDBUTTONS],a ; store simulated button press in joypad state and a ret nz ld [H_NEWLYPRESSEDBUTTONS],a ld [H_NEWLYRELEASEDBUTTONS],a ret ; if done simulating button presses .doneSimulating xor a ld [$cd3a],a ld [$cd38],a ld [$ccd3],a ld [wJoypadForbiddenButtonsMask],a ld [H_CURRENTPRESSEDBUTTONS],a ld hl,$d736 ld a,[hl] and a,$f8 ld [hl],a ld hl,$d730 res 7,[hl] ret ; function to check the tile ahead to determine if the character should get on land or keep surfing ; sets carry if there is a collision and clears carry otherwise ; It seems that this function has a bug in it, but due to luck, it doesn't ; show up. After detecting a sprite collision, it jumps to the code that ; checks if the next tile is passable instead of just directly jumping to the ; "collision detected" code. However, it doesn't store the next tile in c, ; so the old value of c is used. 2429 is always called before this function, ; and 2429 always sets c to 0xF0. There is no 0xF0 background tile, so it ; is considered impassable and it is detected as a collision. CollisionCheckOnWater:: ; 0fb7 (0:0fb7) ld a,[$d730] bit 7,a jp nz,.noCollision ; return and clear carry if button presses are being simulated ld a,[$d52a] ; the direction that the player is trying to go in ld d,a ld a,[$c10c] ; the player sprite's collision data (bit field) (set in the sprite movement code) and d ; check if a sprite is in the direction the player is trying to go jr nz,.checkIfNextTileIsPassable ; bug? ld hl,TilePairCollisionsWater call CheckForJumpingAndTilePairCollisions jr c,.collision ld a,$35 call Predef ; get tile in front of player (puts it in c and [$CFC6]) ld a,[$cfc6] ; tile in front of player cp a,$14 ; water tile jr z,.noCollision ; keep surfing if it's a water tile cp a,$32 ; either the left tile of the S.S. Anne boarding platform or the tile on eastern coastlines (depending on the current tileset) jr z,.checkIfVermilionDockTileset cp a,$48 ; tile on right on coast lines in Safari Zone jr z,.noCollision ; keep surfing ; check if the [land] tile in front of the player is passable .checkIfNextTileIsPassable ld hl,$d530 ; pointer to list of passable tiles ld a,[hli] ld h,[hl] ld l,a .loop ld a,[hli] cp a,$ff jr z,.collision cp c jr z,.stopSurfing ; stop surfing if the tile is passable jr .loop .collision ld a,[$c02a] cp a,$b4 ; check if collision sound is already playing jr z,.setCarry ld a,$b4 call PlaySound ; play collision sound (if it's not already playing) .setCarry scf jr .done .noCollision and a .done ret .stopSurfing xor a ld [$d700],a call LoadPlayerSpriteGraphics call Func_2307 jr .noCollision .checkIfVermilionDockTileset ld a,[W_CURMAPTILESET] ; tileset cp a,$0e ; Vermilion Dock tileset jr nz,.noCollision ; keep surfing if it's not the boarding platform tile jr .stopSurfing ; if it is the boarding platform tile, stop surfing ; function to run the current map's script RunMapScript:: ; 101b (0:101b) push hl push de push bc ld b, BANK(Func_f225) ld hl, Func_f225 call Bankswitch ; check if the player is pushing a boulder ld a,[wFlags_0xcd60] bit 1,a ; is the player pushing a boulder? jr z,.afterBoulderEffect ld b, BANK(Func_f2b5) ld hl, Func_f2b5 call Bankswitch ; displays dust effect when pushing a boulder .afterBoulderEffect pop bc pop de pop hl call Func_310e ld a,[W_CURMAP] ; current map number call SwitchToMapRomBank ; change to the ROM bank the map's data is in ld hl,W_MAPSCRIPTPTR ld a,[hli] ld h,[hl] ld l,a ld de,.return push de jp [hl] ; jump to script .return ret LoadWalkingPlayerSpriteGraphics:: ; 104d (0:104d) ld de,RedSprite ; $4180 ld hl,$8000 jr LoadPlayerSpriteGraphicsCommon LoadSurfingPlayerSpriteGraphics:: ; 1055 (0:1055) ld de,SeelSprite ld hl,$8000 jr LoadPlayerSpriteGraphicsCommon LoadBikePlayerSpriteGraphics:: ; 105d (0:105d) ld de,RedCyclingSprite ld hl,$8000 LoadPlayerSpriteGraphicsCommon:: ; 1063 (0:1063) push de push hl ld bc,(BANK(RedSprite) << 8) + $0c call CopyVideoData pop hl pop de ld a,$c0 add e ld e,a jr nc,.noCarry inc d .noCarry set 3,h ld bc,$050c jp CopyVideoData ; function to load data from the map header LoadMapHeader:: ; 107c (0:107c) ld b, BANK(Func_f113) ld hl, Func_f113 call Bankswitch ld a,[W_CURMAPTILESET] ld [$d119],a ld a,[W_CURMAP] call SwitchToMapRomBank ld a,[W_CURMAPTILESET] ld b,a res 7,a ld [W_CURMAPTILESET],a ld [$ff8b],a bit 7,b ret nz ld hl,MapHeaderPointers ld a,[W_CURMAP] sla a jr nc,.noCarry1 inc h .noCarry1 add l ld l,a jr nc,.noCarry2 inc h .noCarry2 ld a,[hli] ld h,[hl] ld l,a ; hl = base of map header ; copy the first 10 bytes (the fixed area) of the map data to D367-D370 ld de,$d367 ld c,$0a .copyFixedHeaderLoop ld a,[hli] ld [de],a inc de dec c jr nz,.copyFixedHeaderLoop ; initialize all the connected maps to disabled at first, before loading the actual values ld a,$ff ld [$d371],a ld [$d37c],a ld [$d387],a ld [$d392],a ; copy connection data (if any) to WRAM ld a,[W_MAPCONNECTIONS] ld b,a .checkNorth bit 3,b jr z,.checkSouth ld de,W_MAPCONN1PTR call CopyMapConnectionHeader .checkSouth bit 2,b jr z,.checkWest ld de,W_MAPCONN2PTR call CopyMapConnectionHeader .checkWest bit 1,b jr z,.checkEast ld de,W_MAPCONN3PTR call CopyMapConnectionHeader .checkEast bit 0,b jr z,.getObjectDataPointer ld de,W_MAPCONN4PTR call CopyMapConnectionHeader .getObjectDataPointer ld a,[hli] ld [$d3a9],a ld a,[hli] ld [$d3aa],a push hl ld a,[$d3a9] ld l,a ld a,[$d3aa] ld h,a ; hl = base of object data ld de,$d3ad ; background tile ID ld a,[hli] ld [de],a ; save background tile ID .loadWarpData ld a,[hli] ; number of warps ld [$d3ae],a ; save the number of warps and a ; are there any warps? jr z,.loadSignData ; if not, skip this ld c,a ld de,$d3af ; base address of warps .warpLoop ; one warp per loop iteration ld b,$04 .warpInnerLoop ld a,[hli] ld [de],a inc de dec b jr nz,.warpInnerLoop dec c jr nz,.warpLoop .loadSignData ld a,[hli] ; number of signs ld [$d4b0],a ; save the number of signs and a ; are there any signs? jr z,.loadSpriteData ; if not, skip this ld c,a ld de,$d4d1 ; base address of sign text IDs ld a,d ld [$ff95],a ld a,e ld [$ff96],a ld de,$d4b1 ; base address of sign coordinates .signLoop ld a,[hli] ld [de],a inc de ld a,[hli] ld [de],a inc de push de ld a,[$ff95] ld d,a ld a,[$ff96] ld e,a ld a,[hli] ld [de],a inc de ld a,d ld [$ff95],a ld a,e ld [$ff96],a pop de dec c jr nz,.signLoop .loadSpriteData ld a,[$d72e] bit 5,a ; did a battle happen immediately before this? jp nz,.finishUp ; if so, skip this because battles don't destroy this data ld a,[hli] ld [$d4e1],a ; save the number of sprites push hl ; zero C110-C1FF and C210-C2FF ld hl,$c110 ld de,$c210 xor a ld b,$f0 .zeroSpriteDataLoop ld [hli],a ld [de],a inc e dec b jr nz,.zeroSpriteDataLoop ; initialize all C100-C1FF sprite entries to disabled (other than player's) ld hl,$c112 ld de,$0010 ld c,$0f .disableSpriteEntriesLoop ld [hl],$ff add hl,de dec c jr nz,.disableSpriteEntriesLoop pop hl ld de,$c110 ld a,[$d4e1] ; number of sprites and a ; are there any sprites? jp z,.finishUp ; if there are no sprites, skip the rest ld b,a ld c,$00 .loadSpriteLoop ld a,[hli] ld [de],a ; store picture ID at C1X0 inc d ld a,$04 add e ld e,a ld a,[hli] ld [de],a ; store Y position at C2X4 inc e ld a,[hli] ld [de],a ; store X position at C2X5 inc e ld a,[hli] ld [de],a ; store movement byte 1 at C2X6 ld a,[hli] ld [$ff8d],a ; save movement byte 2 ld a,[hli] ld [$ff8e],a ; save text ID and flags byte push bc push hl ld b,$00 ld hl,W_MAPSPRITEDATA add hl,bc ld a,[$ff8d] ld [hli],a ; store movement byte 2 in byte 0 of sprite entry ld a,[$ff8e] ld [hl],a ; this appears pointless, since the value is overwritten immediately after ld a,[$ff8e] ld [$ff8d],a and a,$3f ld [hl],a ; store text ID in byte 1 of sprite entry pop hl ld a,[$ff8d] bit 6,a jr nz,.trainerSprite bit 7,a jr nz,.itemBallSprite jr .regularSprite .trainerSprite ld a,[hli] ld [$ff8d],a ; save trainer class ld a,[hli] ld [$ff8e],a ; save trainer number (within class) push hl ld hl,W_MAPSPRITEEXTRADATA add hl,bc ld a,[$ff8d] ld [hli],a ; store trainer class in byte 0 of the entry ld a,[$ff8e] ld [hl],a ; store trainer number in byte 1 of the entry pop hl jr .nextSprite .itemBallSprite ld a,[hli] ld [$ff8d],a ; save item number push hl ld hl,W_MAPSPRITEEXTRADATA add hl,bc ld a,[$ff8d] ld [hli],a ; store item number in byte 0 of the entry xor a ld [hl],a ; zero byte 1, since it is not used pop hl jr .nextSprite .regularSprite push hl ld hl,W_MAPSPRITEEXTRADATA add hl,bc ; zero both bytes, since regular sprites don't use this extra space xor a ld [hli],a ld [hl],a pop hl .nextSprite pop bc dec d ld a,$0a add e ld e,a inc c inc c dec b jp nz,.loadSpriteLoop .finishUp ld a,$19 call Predef ; load tileset data ld hl, LoadWildData ld b, BANK(LoadWildData) call Bankswitch ; load wild pokemon data pop hl ; restore hl from before going to the warp/sign/sprite data (this value was saved for seemingly no purpose) ld a,[W_CURMAPHEIGHT] ; map height in 4x4 tile blocks add a ; double it ld [$d524],a ; store map height in 2x2 tile blocks ld a,[W_CURMAPWIDTH] ; map width in 4x4 tile blocks add a ; double it ld [$d525],a ; map width in 2x2 tile blocks ld a,[W_CURMAP] ld c,a ld b,$00 ld a,[H_LOADEDROMBANK] push af ld a, BANK(MapSongBanks) ld [H_LOADEDROMBANK],a ld [$2000],a ld hl, MapSongBanks add hl,bc add hl,bc ld a,[hli] ld [$d35b],a ; music 1 ld a,[hl] ld [$d35c],a ; music 2 pop af ld [H_LOADEDROMBANK],a ld [$2000],a ret ; function to copy map connection data from ROM to WRAM ; Input: hl = source, de = destination CopyMapConnectionHeader:: ; 1238 (0:1238) ld c,$0b .loop ld a,[hli] ld [de],a inc de dec c jr nz,.loop ret ; function to load map data LoadMapData:: ; 1241 (0:1241) ld a,[H_LOADEDROMBANK] push af call DisableLCD ld a,$98 ld [$d527],a xor a ld [$d526],a ld [$ffaf],a ld [$ffae],a ld [wWalkCounter],a ld [$d119],a ld [$d11a],a ld [$d3a8],a call LoadTextBoxTilePatterns call LoadMapHeader ld b,BANK(InitMapSprites) ld hl,InitMapSprites call Bankswitch ; load tile pattern data for sprites call LoadTileBlockMap call LoadTilesetTilePatternData call LoadCurrentMapView ; copy current map view to VRAM ld hl,wTileMap ld de,$9800 ld b,$12 .vramCopyLoop ld c,$14 .vramCopyInnerLoop ld a,[hli] ld [de],a inc e dec c jr nz,.vramCopyInnerLoop ld a,$0c add e ld e,a jr nc,.noCarry inc d .noCarry dec b jr nz,.vramCopyLoop ld a,$01 ld [$cfcb],a call EnableLCD ld b,$09 call GoPAL_SET call LoadPlayerSpriteGraphics ld a,[$d732] and a,$18 ; did the player fly or teleport in? jr nz,.restoreRomBank ld a,[W_FLAGS_D733] bit 1,a jr nz,.restoreRomBank call Func_235f ; music related call Func_2312 ; music related .restoreRomBank pop af ld [H_LOADEDROMBANK],a ld [$2000],a ret ; function to switch to the ROM bank that a map is stored in ; Input: a = map number SwitchToMapRomBank:: ; 12bc (0:12bc) push hl push bc ld c,a ld b,$00 ld a,Bank(MapHeaderBanks) call BankswitchHome ; switch to ROM bank 3 ld hl,MapHeaderBanks add hl,bc ld a,[hl] ld [$ffe8],a ; save map ROM bank call BankswitchBack ld a,[$ffe8] ld [H_LOADEDROMBANK],a ld [$2000],a ; switch to map ROM bank pop bc pop hl ret Func_12da:: ; 12da (0:12da) ld a, $1e ld [$d13a], a ld hl, $d730 ld a, [hl] or $26 ld [hl], a ret Func_12e7:: ; 12e7 (0:12e7) ld hl, $d728 res 0, [hl] ret ;appears to be called twice inside function $C38B ;if $d700,$d11a == $1 then biking ;if $d700,$d11a == $2 then surfing ForceBikeOrSurf:: ; 12ed (0:12ed) ld b,5 ;graphics bank 5 ld hl,LoadPlayerSpriteGraphics ;load player sprite graphics call Bankswitch ;loads bank 5 and then calls LoadPlayerSpriteGraphics jp Func_2307 ;update map/player state? ; this is used to check if the player wants to interrupt the opening sequence at several points ; XXX is this used anywhere else? ; INPUT: ; c = number of frames to wait ; sets carry if Up+Select+B, Start, or A is pressed within c frames ; unsets carry otherwise CheckForUserInterruption:: ; 12f8 (0:12f8) call DelayFrame push bc call GetJoypadStateLowSensitivity pop bc ld a,[H_CURRENTPRESSEDBUTTONS] ; currently pressed buttons cp a,%01000110 ; Up, Select button, B button jr z,.setCarry ; if all three keys are pressed ld a,[$ffb5] ; either newly pressed buttons or currently pressed buttons at low sampling rate and a,%00001001 ; Start button, A button jr nz,.setCarry ; if either key is pressed dec c jr nz,CheckForUserInterruption .unsetCarry and a ret .setCarry scf ret ; function to load position data for destination warp when switching maps ; INPUT: ; a = ID of destination warp within destination map LoadDestinationWarpPosition:: ; 1313 (0:1313) ld b,a ld a,[H_LOADEDROMBANK] push af ld a,[$cf12] ld [H_LOADEDROMBANK],a ld [$2000],a ld a,b add a add a ld c,a ld b,0 add hl,bc ld bc,4 ld de,$d35f call CopyData pop af ld [H_LOADEDROMBANK],a ld [$2000],a ret ; INPUT: ; c: if nonzero, show at least a sliver of health ; d = number of HP bar sections (normally 6) ; e = health (in eighths of bar sections) (normally out of 48) DrawHPBar:: ; 1336 (0:1336) push hl push de push bc ld a,$71 ; left of HP bar tile 1 ld [hli],a ld a,$62 ; left of HP bar tile 2 ld [hli],a push hl ld a,$63 ; empty bar section tile .drawEmptyBarLoop ld [hli],a dec d jr nz,.drawEmptyBarLoop ld a,[$cf94] dec a ; what should the right of HP bar tile be? ld a,$6d ; right of HP bar tile, in status screen and battles jr z,.writeTile dec a ; right of HP bar tile, in pokemon menu .writeTile ld [hl],a pop hl ld a,e and a ; is there enough health to show up on the HP bar? jr nz,.loop ; if so, draw the HP bar ld a,c and a ; should a sliver of health be shown no matter what? jr z,.done ld e,1 ; if so, fill one eighth of a bar section ; loop to draw every full bar section .loop ld a,e sub a,8 jr c,.drawPartialBarSection ld e,a ld a,$6b ; filled bar section tile ld [hli],a ld a,e and a jr z,.done jr .loop ; draws a partial bar section at the end (if necessary) ; there are 7 possible partial bar sections from 1/8 to 7/8 full .drawPartialBarSection ld a,$63 ; empty bar section tile add e ; add e to get the appropriate partial bar section tile ld [hl],a ; write the tile .done pop bc pop de pop hl ret ; loads pokemon data from one of multiple sources to $cf98 ; loads base stats to $d0b8 ; INPUT: ; [$cf92] = index of pokemon within party/box ; [$cc49] = source ; 00: player's party ; 01: enemy's party ; 02: current box ; 03: daycare ; OUTPUT: ; [$cf91] = pokemon ID ; $cf98 = base address of pokemon data ; $d0b8 = base address of base stats LoadMonData:: ; 1372 (0:1372) ld hl,LoadMonData_ ld b,BANK(LoadMonData_) jp Bankswitch ; writes c to $d0dc+b Func_137a:: ; 137a (0:137a) ld hl, $d0dc ld e, b ld d, $0 add hl, de ld a, c ld [hl], a ret LoadFlippedFrontSpriteByMonIndex:: ; 1384 (0:1384) ld a, $1 ld [W_SPRITEFLIPPED], a LoadFrontSpriteByMonIndex:: ; 1389 (0:1389) push hl ld a, [$d11e] push af ld a, [$cf91] ld [$d11e], a ld a, $3a call Predef ; indirect jump to IndexToPokedex (41010 (10:5010)) ld hl, $d11e ld a, [hl] pop bc ld [hl], b and a pop hl jr z, .invalidDexNumber ; dex #0 invalid cp $98 jr c, .validDexNumber ; dex >#151 invalid .invalidDexNumber ld a, RHYDON ; $1 ld [$cf91], a ret .validDexNumber push hl ld de, $9000 call LoadMonFrontSprite pop hl ld a, [H_LOADEDROMBANK] push af ld a, Bank(asm_3f0d0) ld [H_LOADEDROMBANK], a ld [$2000], a xor a ld [$FF00+$e1], a call asm_3f0d0 xor a ld [W_SPRITEFLIPPED], a pop af ld [H_LOADEDROMBANK], a ld [$2000], a ret ; plays the cry of a pokemon ; INPUT: ; a = pokemon ID PlayCry:: ; 13d0 (0:13d0) call GetCryData call PlaySound ; play cry jp WaitForSoundToFinish ; wait for sound to be done playing ; gets a pokemon's cry data ; INPUT: ; a = pokemon ID GetCryData:: ; 13d9 (0:13d9) dec a ld c,a ld b,0 ld hl,CryData add hl,bc add hl,bc add hl,bc ld a,Bank(CryData) call BankswitchHome ld a,[hli] ld b,a ld a,[hli] ld [$c0f1],a ld a,[hl] ld [$c0f2],a call BankswitchBack ld a,b ; a = cryID ld c,$14 ; base sound ID for pokemon cries rlca add b ; a = cryID * 3 add c ; a = $14 + cryID * 3 ret DisplayPartyMenu:: ; 13fc (0:13fc) ld a,[$ffd7] push af xor a ld [$ffd7],a call GBPalWhiteOutWithDelay3 call CleanLCD_OAM call PartyMenuInit call DrawPartyMenu jp HandlePartyMenuInput GoBackToPartyMenu:: ; 1411 (0:1411) ld a,[$ffd7] push af xor a ld [$ffd7],a call PartyMenuInit call RedrawPartyMenu jp HandlePartyMenuInput PartyMenuInit:: ; 1420 (0:1420) ld a,$01 call BankswitchHome call LoadHpBarAndStatusTilePatterns ld hl,$d730 set 6,[hl] ; turn off letter printing delay xor a ld [$cc49],a ld [$cc37],a ld hl,wTopMenuItemY inc a ld [hli],a ; top menu item Y xor a ld [hli],a ; top menu item X ld a,[$cc2b] push af ld [hli],a ; current menu item ID inc hl ld a,[W_NUMINPARTY] and a ; are there more than 0 pokemon in the party? jr z,.storeMaxMenuItemID dec a ; if party is not empty, the max menu item ID is ([W_NUMINPARTY] - 1) ; otherwise, it is 0 .storeMaxMenuItemID ld [hli],a ; max menu item ID ld a,[$d11f] and a ld a,%00000011 ; A button and B button jr z,.next xor a ld [$d11f],a inc a .next ld [hli],a ; menu watched keys pop af ld [hl],a ; old menu item ID ret HandlePartyMenuInput:: ; 145a (0:145a) ld a,1 ld [$cc4a],a ld a,$40 ld [$d09b],a call HandleMenuInputPokemonSelection call PlaceUnfilledArrowMenuCursor ld b,a xor a ld [$d09b],a ld a,[wCurrentMenuItem] ld [$cc2b],a ld hl,$d730 res 6,[hl] ; turn on letter printing delay ld a,[$cc35] and a jp nz,.swappingPokemon pop af ld [$ffd7],a bit 1,b jr nz,.noPokemonChosen ld a,[W_NUMINPARTY] and a jr z,.noPokemonChosen ld a,[wCurrentMenuItem] ld [wWhichPokemon],a ld hl,W_PARTYMON1 ld b,0 ld c,a add hl,bc ld a,[hl] ld [$cf91],a ld [$cfd9],a call BankswitchBack and a ret .noPokemonChosen call BankswitchBack scf ret .swappingPokemon bit 1,b ; was the B button pressed? jr z,.handleSwap ; if not, handle swapping the pokemon .cancelSwap ; if the B button was pressed ld b,BANK(ErasePartyMenuCursors) ld hl,ErasePartyMenuCursors call Bankswitch xor a ld [$cc35],a ld [$d07d],a call RedrawPartyMenu jr HandlePartyMenuInput .handleSwap ld a,[wCurrentMenuItem] ld [wWhichPokemon],a ld b, BANK(Func_13613) ld hl, Func_13613 call Bankswitch jr HandlePartyMenuInput DrawPartyMenu:: ; 14d4 (0:14d4) ld hl, DrawPartyMenu_ jr DrawPartyMenuCommon RedrawPartyMenu:: ; 14d9 (0:14d9) ld hl, RedrawPartyMenu_ DrawPartyMenuCommon:: ; 14dc (0:14dc) ld b, BANK(RedrawPartyMenu_) jp Bankswitch ; prints a pokemon's status condition ; INPUT: ; de = address of status condition ; hl = destination address PrintStatusCondition:: ; 14e1 (0:14e1) push de dec de dec de ; de = address of current HP ld a,[de] ld b,a dec de ld a,[de] or b ; is the pokemon's HP zero? pop de jr nz,PrintStatusConditionNotFainted ; if the pokemon's HP is 0, print "FNT" ld a,"F" ld [hli],a ld a,"N" ld [hli],a ld [hl],"T" and a ret PrintStatusConditionNotFainted ; 14f6 ld a,[H_LOADEDROMBANK] push af ld a,BANK(PrintStatusAilment) ld [H_LOADEDROMBANK],a ld [$2000],a call PrintStatusAilment ; print status condition pop bc ld a,b ld [H_LOADEDROMBANK],a ld [$2000],a ret ; function to print pokemon level, leaving off the ":L" if the level is at least 100 ; INPUT: ; hl = destination address ; [$cfb9] = level PrintLevel:: ; 150b (0:150b) ld a,$6e ; ":L" tile ID ld [hli],a ld c,2 ; number of digits ld a,[$cfb9] ; level cp a,100 jr c,PrintLevelCommon ; if level at least 100, write over the ":L" tile dec hl inc c ; increment number of digits to 3 jr PrintLevelCommon ; prints the level without leaving off ":L" regardless of level ; INPUT: ; hl = destination address ; [$cfb9] = level PrintLevelFull:: ; 151b (0:151b) ld a,$6e ; ":L" tile ID ld [hli],a ld c,3 ; number of digits ld a,[$cfb9] ; level PrintLevelCommon:: ; 1523 (0:1523) ld [$d11e],a ld de,$d11e ld b,$41 ; no leading zeroes, left-aligned, one byte jp PrintNumber Func_152e:: ; 152e (0:152e) ld hl,$d0dc ld c,a ld b,0 add hl,bc ld a,[hl] ret ; copies the base stat data of a pokemon to $D0B8 (W_MONHEADER) ; INPUT: ; [$D0B5] = pokemon ID GetMonHeader:: ; 1537 (0:1537) ld a,[H_LOADEDROMBANK] push af ld a,BANK(BulbasaurBaseStats) ld [H_LOADEDROMBANK],a ld [$2000],a push bc push de push hl ld a,[$d11e] push af ld a,[$d0b5] ld [$d11e],a ld de,FossilKabutopsPic ld b,$66 ; size of Kabutops fossil and Ghost sprites cp a,FOSSIL_KABUTOPS ; Kabutops fossil jr z,.specialID ld de,GhostPic cp a,MON_GHOST ; Ghost jr z,.specialID ld de,FossilAerodactylPic ld b,$77 ; size of Aerodactyl fossil sprite cp a,FOSSIL_AERODACTYL ; Aerodactyl fossil jr z,.specialID cp a,MEW jr z,.mew ld a,$3a call Predef ; convert pokemon ID in [$D11E] to pokedex number ld a,[$d11e] dec a ld bc,28 ld hl,BulbasaurBaseStats call AddNTimes ld de,W_MONHEADER ld bc,28 call CopyData jr .done .specialID ld hl,W_MONHSPRITEDIM ld [hl],b ; write sprite dimensions inc hl ld [hl],e ; write front sprite pointer inc hl ld [hl],d jr .done .mew ld hl,MewBaseStats ld de,W_MONHEADER ld bc,28 ld a,BANK(MewBaseStats) call FarCopyData .done ld a,[$d0b5] ld [$d0b8],a pop af ld [$d11e],a pop hl pop de pop bc pop af ld [H_LOADEDROMBANK],a ld [$2000],a ret ; copy party pokemon's name to $CD6D GetPartyMonName2:: ; 15b4 (0:15b4) ld a,[wWhichPokemon] ; index within party ld hl,W_PARTYMON1NAME ; this is called more often GetPartyMonName:: ; 15ba (0:15ba) push hl push bc call SkipFixedLengthTextEntries ; add 11 to hl, a times ld de,$cd6d push de ld bc,11 call CopyData pop de pop bc pop hl ret ; function to print a BCD (Binary-coded decimal) number ; de = address of BCD number ; hl = destination address ; c = flags and length ; bit 7: if set, do not print leading zeroes ; if unset, print leading zeroes ; bit 6: if set, left-align the string (do not pad empty digits with spaces) ; if unset, right-align the string ; bit 5: if set, print currency symbol at the beginning of the string ; if unset, do not print the currency symbol ; bits 0-4: length of BCD number in bytes ; Note that bits 5 and 7 are modified during execution. The above reflects ; their meaning at the beginning of the functions's execution. PrintBCDNumber:: ; 15cd (0:15cd) ld b,c ; save flags in b res 7,c res 6,c res 5,c ; c now holds the length bit 5,b jr z,.loop bit 7,b jr nz,.loop ld [hl],"¥" inc hl .loop ld a,[de] swap a call PrintBCDDigit ; print upper digit ld a,[de] call PrintBCDDigit ; print lower digit inc de dec c jr nz,.loop bit 7,b ; were any non-zero digits printed? jr z,.done ; if so, we are done .numberEqualsZero ; if every digit of the BCD number is zero bit 6,b ; left or right alignment? jr nz,.skipRightAlignmentAdjustment dec hl ; if the string is right-aligned, it needs to be moved back one space .skipRightAlignmentAdjustment bit 5,b jr z,.skipCurrencySymbol ld [hl],"¥" inc hl .skipCurrencySymbol ld [hl],"0" call PrintLetterDelay inc hl .done ret PrintBCDDigit:: ; 1604 (0:1604) and a,%00001111 and a jr z,.zeroDigit .nonzeroDigit bit 7,b ; have any non-space characters been printed? jr z,.outputDigit ; if bit 7 is set, then no numbers have been printed yet bit 5,b ; print the currency symbol? jr z,.skipCurrencySymbol ld [hl],"¥" inc hl res 5,b .skipCurrencySymbol res 7,b ; unset 7 to indicate that a nonzero digit has been reached .outputDigit add a,"0" ld [hli],a jp PrintLetterDelay .zeroDigit bit 7,b ; either printing leading zeroes or already reached a nonzero digit? jr z,.outputDigit ; if so, print a zero digit bit 6,b ; left or right alignment? ret nz inc hl ; if right-aligned, "print" a space by advancing the pointer ret ; uncompresses the front or back sprite of the specified mon ; assumes the corresponding mon header is already loaded ; hl contains offset to sprite pointer ($b for front or $d for back) UncompressMonSprite:: ; 1627 (0:1627) ld bc,W_MONHEADER add hl,bc ld a,[hli] ld [W_SPRITEINPUTPTR],a ; fetch sprite input pointer ld a,[hl] ld [W_SPRITEINPUTPTR+1],a ; define (by index number) the bank that a pokemon's image is in ; index = Mew, bank 1 ; index = Kabutops fossil, bank $B ; index < $1F, bank 9 ; $1F ≤ index < $4A, bank $A ; $4A ≤ index < $74, bank $B ; $74 ≤ index < $99, bank $C ; $99 ≤ index, bank $D ld a,[$CF91] ; XXX name for this ram location ld b,a cp MEW ld a,BANK(MewPicFront) jr z,.GotBank ld a,b cp FOSSIL_KABUTOPS ld a,BANK(FossilKabutopsPic) jr z,.GotBank ld a,b cp TANGELA + 1 ld a,BANK(TangelaPicFront) jr c,.GotBank ld a,b cp MOLTRES + 1 ld a,BANK(MoltresPicFront) jr c,.GotBank ld a,b cp BEEDRILL + 2 ld a,BANK(BeedrillPicFront) jr c,.GotBank ld a,b cp STARMIE + 1 ld a,BANK(StarmiePicFront) jr c,.GotBank ld a,BANK(VictreebelPicFront) .GotBank jp UncompressSpriteData ; de: destination location LoadMonFrontSprite:: ; 1665 (0:1665) push de ld hl, W_MONHFRONTSPRITE - W_MONHEADER call UncompressMonSprite ld hl, W_MONHSPRITEDIM ld a, [hli] ld c, a pop de ; fall through ; postprocesses uncompressed sprite chunks to a 2bpp sprite and loads it into video ram ; calculates alignment parameters to place both sprite chunks in the center of the 7*7 tile sprite buffers ; de: destination location ; a,c: sprite dimensions (in tiles of 8x8 each) LoadUncompressedSpriteData:: ; 1672 (0:1672) push de and $f ld [H_SPRITEWIDTH], a ; each byte contains 8 pixels (in 1bpp), so tiles=bytes for width ld b, a ld a, $7 sub b ; 7-w inc a ; 8-w srl a ; (8-w)/2 ; horizontal center (in tiles, rounded up) ld b, a add a add a add a sub b ; 7*((8-w)/2) ; skip for horizontal center (in tiles) ld [H_SPRITEOFFSET], a ld a, c swap a and $f ld b, a add a add a add a ; 8*tiles is height in bytes ld [H_SPRITEHEIGHT], a ; $FF00+$8c ld a, $7 sub b ; 7-h ; skip for vertical center (in tiles, relative to current column) ld b, a ld a, [H_SPRITEOFFSET] add b ; 7*((8-w)/2) + 7-h ; combined overall offset (in tiles) add a add a add a ; 8*(7*((8-w)/2) + 7-h) ; combined overall offset (in bytes) ld [H_SPRITEOFFSET], a xor a ld [$4000], a ld hl, S_SPRITEBUFFER0 call ZeroSpriteBuffer ; zero buffer 0 ld de, S_SPRITEBUFFER1 ld hl, S_SPRITEBUFFER0 call AlignSpriteDataCentered ; copy and align buffer 1 to 0 (containing the MSB of the 2bpp sprite) ld hl, S_SPRITEBUFFER1 call ZeroSpriteBuffer ; zero buffer 1 ld de, S_SPRITEBUFFER2 ld hl, S_SPRITEBUFFER1 call AlignSpriteDataCentered ; copy and align buffer 2 to 1 (containing the LSB of the 2bpp sprite) pop de jp InterlaceMergeSpriteBuffers ; copies and aligns the sprite data properly inside the sprite buffer ; sprite buffers are 7*7 tiles in size, the loaded sprite is centered within this area AlignSpriteDataCentered:: ; 16c2 (0:16c2) ld a, [H_SPRITEOFFSET] ld b, $0 ld c, a add hl, bc ld a, [H_SPRITEWIDTH] ; $FF00+$8b .columnLoop push af push hl ld a, [H_SPRITEHEIGHT] ; $FF00+$8c ld c, a .columnInnerLoop ld a, [de] inc de ld [hli], a dec c jr nz, .columnInnerLoop pop hl ld bc, 7*8 ; 7 tiles add hl, bc ; advance one full column pop af dec a jr nz, .columnLoop ret ; fills the sprite buffer (pointed to in hl) with zeros ZeroSpriteBuffer:: ; 16df (0:16df) ld bc, SPRITEBUFFERSIZE .nextByteLoop xor a ld [hli], a dec bc ld a, b or c jr nz, .nextByteLoop ret ; combines the (7*7 tiles, 1bpp) sprite chunks in buffer 0 and 1 into a 2bpp sprite located in buffer 1 through 2 ; in the resulting sprite, the rows of the two source sprites are interlaced ; de: output address InterlaceMergeSpriteBuffers:: ; 16ea (0:16ea) xor a ld [$4000], a push de ld hl, S_SPRITEBUFFER2 + (SPRITEBUFFERSIZE - 1) ; destination: end of buffer 2 ld de, S_SPRITEBUFFER1 + (SPRITEBUFFERSIZE - 1) ; source 2: end of buffer 1 ld bc, S_SPRITEBUFFER0 + (SPRITEBUFFERSIZE - 1) ; source 1: end of buffer 0 ld a, SPRITEBUFFERSIZE/2 ; $c4 ld [H_SPRITEINTERLACECOUNTER], a ; $FF00+$8b .interlaceLoop ld a, [de] dec de ld [hld], a ; write byte of source 2 ld a, [bc] dec bc ld [hld], a ; write byte of source 1 ld a, [de] dec de ld [hld], a ; write byte of source 2 ld a, [bc] dec bc ld [hld], a ; write byte of source 1 ld a, [H_SPRITEINTERLACECOUNTER] ; $FF00+$8b dec a ld [H_SPRITEINTERLACECOUNTER], a ; $FF00+$8b jr nz, .interlaceLoop ld a, [W_SPRITEFLIPPED] and a jr z, .notFlipped ld bc, 2*SPRITEBUFFERSIZE ld hl, S_SPRITEBUFFER1 .swapLoop swap [hl] ; if flipped swap nybbles in all bytes inc hl dec bc ld a, b or c jr nz, .swapLoop .notFlipped pop hl ld de, S_SPRITEBUFFER1 ld c, (2*SPRITEBUFFERSIZE)/16 ; $31, number of 16 byte chunks to be copied ld a, [H_LOADEDROMBANK] ld b, a jp CopyVideoData Tset0B_Coll:: ; 172f (0:172f) INCBIN "gfx/tilesets/0b.tilecoll" Tset00_Coll:: ; 1735 (0:1735) INCBIN "gfx/tilesets/00.tilecoll" Tset01_Coll:: ; 1749 (0:1749) INCBIN "gfx/tilesets/01.tilecoll" Tset02_Coll:: ; 1753 (0:1753) INCBIN "gfx/tilesets/02.tilecoll" Tset05_Coll:: ; 1759 (0:1759) INCBIN "gfx/tilesets/05.tilecoll" Tset03_Coll:: ; 1765 (0:1765) INCBIN "gfx/tilesets/03.tilecoll" Tset08_Coll:: ; 1775 (0:1775) INCBIN "gfx/tilesets/08.tilecoll" Tset09_Coll:: ; 177f (0:177f) INCBIN "gfx/tilesets/09.tilecoll" Tset0D_Coll:: ; 178a (0:178a) INCBIN "gfx/tilesets/0d.tilecoll" Tset0E_Coll:: ; 1795 (0:1795) INCBIN "gfx/tilesets/0e.tilecoll" Tset0F_Coll:: ; 179a (0:179a) INCBIN "gfx/tilesets/0f.tilecoll" Tset10_Coll:: ; 17a2 (0:17a2) INCBIN "gfx/tilesets/10.tilecoll" Tset11_Coll:: ; 17ac (0:17ac) INCBIN "gfx/tilesets/11.tilecoll" Tset12_Coll:: ; 17b8 (0:17b8) INCBIN "gfx/tilesets/12.tilecoll" Tset13_Coll:: ; 17c0 (0:17c0) INCBIN "gfx/tilesets/13.tilecoll" Tset14_Coll:: ; 17ca (0:17ca) INCBIN "gfx/tilesets/14.tilecoll" Tset15_Coll:: ; 17d1 (0:17d1) INCBIN "gfx/tilesets/15.tilecoll" Tset16_Coll:: ; 17dd (0:17dd) INCBIN "gfx/tilesets/16.tilecoll" Tset17_Coll:: ; 17f0 (0:17f0) INCBIN "gfx/tilesets/17.tilecoll" ;Tile Collision ends 0x17f7 ; does the same thing as FarCopyData at 009D ; only difference is that it uses [$ff8b] instead of [$cee9] for a temp value ; copy bc bytes of data from a:hl to de FarCopyData2:: ; 17f7 (0:17f7) ld [$ff8b],a ld a,[H_LOADEDROMBANK] push af ld a,[$ff8b] ld [H_LOADEDROMBANK],a ld [$2000],a call CopyData pop af ld [H_LOADEDROMBANK],a ld [$2000],a ret ; does a far copy but the source is de and the destination is hl ; copy bc bytes of data from a:de to hl FarCopyData3:: ; 180d (0:180d) ld [$ff8b],a ld a,[H_LOADEDROMBANK] push af ld a,[$ff8b] ld [H_LOADEDROMBANK],a ld [$2000],a push hl push de push de ld d,h ld e,l pop hl call CopyData pop de pop hl pop af ld [H_LOADEDROMBANK],a ld [$2000],a ret ; copies each source byte to the destination twice (next to each other) ; copy bc source bytes from a:hl to de FarCopyDataDouble:: ; 182b (0:182b) ld [$ff8b],a ld a,[H_LOADEDROMBANK] push af ld a,[$ff8b] ld [H_LOADEDROMBANK],a ld [$2000],a .loop ld a,[hli] ld [de],a inc de ld [de],a inc de dec bc ld a,c or b jr nz,.loop pop af ld [H_LOADEDROMBANK],a ld [$2000],a ret ; copy (c * 16) bytes from b:de to hl during V-blank ; transfers up to 128 bytes per V-blank CopyVideoData:: ; 1848 (0:1848) ld a,[H_AUTOBGTRANSFERENABLED] ; save auto-transfer enabled flag push af xor a ld [H_AUTOBGTRANSFERENABLED],a ; disable auto-transfer while copying ld a,[H_LOADEDROMBANK] ld [$ff8b],a ld a,b ld [H_LOADEDROMBANK],a ld [$2000],a ld a,e ld [H_VBCOPYSRC],a ld a,d ld [H_VBCOPYSRC + 1],a ld a,l ld [H_VBCOPYDEST],a ld a,h ld [H_VBCOPYDEST + 1],a .loop ld a,c cp a,8 ; are there more than 128 bytes left to copy? jr nc,.copyMaxSize ; only copy up to 128 bytes at a time .copyRemainder ld [H_VBCOPYSIZE],a call DelayFrame ; wait for V-blank handler to perform the copy ld a,[$ff8b] ld [H_LOADEDROMBANK],a ld [$2000],a pop af ld [H_AUTOBGTRANSFERENABLED],a ; restore original auto-transfer enabled flag ret .copyMaxSize ld a,8 ; 128 bytes ld [H_VBCOPYSIZE],a call DelayFrame ; wait for V-blank handler to perform the copy ld a,c sub a,8 ld c,a jr .loop ; copy (c * 8) source bytes from b:de to hl during V-blank ; copies each source byte to the destination twice (next to each other) ; transfers up to 64 source bytes per V-blank CopyVideoDataDouble:: ; 1886 (0:1886) ld a,[H_AUTOBGTRANSFERENABLED] ; save auto-transfer enabled flag push af xor a ld [H_AUTOBGTRANSFERENABLED],a ; disable auto-transfer while copying ld a,[H_LOADEDROMBANK] ld [$ff8b],a ld a,b ld [H_LOADEDROMBANK],a ld [$2000],a ld a,e ld [H_VBCOPYDOUBLESRC],a ld a,d ld [H_VBCOPYDOUBLESRC + 1],a ld a,l ld [H_VBCOPYDOUBLEDEST],a ld a,h ld [H_VBCOPYDOUBLEDEST + 1],a .loop ld a,c cp a,8 ; are there more than 64 source bytes left to copy? jr nc,.copyMaxSize ; only copy up to 64 source bytes at a time .copyRemainder ld [H_VBCOPYDOUBLESIZE],a call DelayFrame ; wait for V-blank handler to perform the copy ld a,[$ff8b] ld [H_LOADEDROMBANK],a ld [$2000],a pop af ld [H_AUTOBGTRANSFERENABLED],a ; restore original auto-transfer enabled flag ret .copyMaxSize ld a,8 ; 64 source bytes ld [H_VBCOPYDOUBLESIZE],a call DelayFrame ; wait for V-blank handler to perform the copy ld a,c sub a,8 ld c,a jr .loop ; clears an area of the screen ; INPUT: ; hl = address of upper left corner of the area ; b = height ; c = width ClearScreenArea:: ; 18c4 (0:18c4) ld a,$7F ; blank tile ld de,20 ; screen width .loop push hl push bc .innerLoop ld [hli],a dec c jr nz,.innerLoop pop bc pop hl add hl,de dec b jr nz,.loop ret ; copies the screen tile buffer from WRAM to VRAM ; copying is done in 3 chunks of 6 rows each ; b: high byte of VRAM destination address ($98 or $9c for window tile map 0 or 1 resp.) CopyScreenTileBufferToVRAM:: ; 18d6 (0:18d6) ld c, $6 ld hl, $0000 ld de, wTileMap call InitScreenTileBufferTransferParameters call DelayFrame ld hl, $600 ld de, wTileMap + 20 * 6 ; $c418 call InitScreenTileBufferTransferParameters call DelayFrame ld hl, $c00 ld de, wTileMap + 20 * 12 ; $c490 call InitScreenTileBufferTransferParameters jp DelayFrame InitScreenTileBufferTransferParameters:: ; 18fc (0:18fc) ld a, d ld [H_VBCOPYBGSRC+1], a call GetRowColAddressBgMap ld a, l ld [H_VBCOPYBGDEST], a ; $FF00+$c3 ld a, h ld [H_VBCOPYBGDEST+1], a ld a, c ld [H_VBCOPYBGNUMROWS], a ; $FF00+$c5 ld a, e ld [H_VBCOPYBGSRC], a ; $FF00+$c1 ret ClearScreen:: ; 190f (0:190f) ; clears all tiles in the tilemap, ; then wait three frames ld bc,$0168 ; tilemap size inc b ld hl,wTileMap ; TILEMAP_START ld a,$7F ; $7F is blank tile .loop ld [hli],a dec c jr nz,.loop dec b jr nz,.loop jp Delay3 TextBoxBorder:: ; 1922 (0:1922) ; draw a text box ; upper-left corner at coordinates hl ; height b ; width c ; first row push hl ld a,"┌" ld [hli],a inc a ; horizontal border ─ call NPlaceChar inc a ; upper-right border ┐ ld [hl],a ; middle rows pop hl ld de,20 add hl,de ; skip the top row .PlaceRow push hl ld a,"│" ld [hli],a ld a," " call NPlaceChar ld [hl],"│" pop hl ld de,20 add hl,de ; move to next row dec b jr nz,.PlaceRow ; bottom row ld a,"└" ld [hli],a ld a,"─" call NPlaceChar ld [hl],"┘" ret ; NPlaceChar:: ; 194f (0:194f) ; place a row of width c of identical characters ld d,c .loop ld [hli],a dec d jr nz,.loop ret PlaceString:: ; 1955 (0:1955) push hl PlaceNextChar:: ; 1956 (0:1956) ld a,[de] cp "@" jr nz,.PlaceText ld b,h ld c,l pop hl ret .PlaceText cp $4E jr nz,.next ld bc,$0028 ld a,[$FFF6] bit 2,a jr z,.next2 ld bc,$14 .next2 pop hl add hl,bc push hl jp Next19E8 .next cp $4F jr nz,.next3 pop hl FuncCoord 1, 16 ; $c4e1 ld hl,Coord push hl jp Next19E8 .next3 ; Check against a dictionary and a jp z,Char00 cp $4C jp z,Char4C cp $4B jp z,Char4B cp $51 jp z,Char51 cp $49 jp z,Char49 cp $52 jp z,Char52 cp $53 jp z,Char53 cp $54 jp z,Char54 cp $5B jp z,Char5B cp $5E jp z,Char5E cp $5C jp z,Char5C cp $5D jp z,Char5D cp $55 jp z,Char55 cp $56 jp z,Char56 cp $57 jp z,Char57 cp $58 jp z,Char58 cp $4A jp z,Char4A cp $5F jp z,Char5F cp $59 jp z,Char59 cp $5A jp z,Char5A ld [hli],a call PrintLetterDelay Next19E8:: ; 19e8 (0:19e8) inc de jp PlaceNextChar Char00:: ; 19ec (0:19ec) ld b,h ld c,l pop hl ld de,Char00Text dec de ret Char00Text:: ; 0x19f4 “%d ERROR.” TX_FAR _Char00Text db "@" Char52:: ; 0x19f9 player’s name push de ld de,W_PLAYERNAME jr FinishDTE Char53:: ; 19ff (0:19ff) ; rival’s name push de ld de,W_RIVALNAME jr FinishDTE Char5D:: ; 1a05 (0:1a05) ; TRAINER push de ld de,Char5DText jr FinishDTE Char5C:: ; 1a0b (0:1a0b) ; TM push de ld de,Char5CText jr FinishDTE Char5B:: ; 1a11 (0:1a11) ; PC push de ld de,Char5BText jr FinishDTE Char5E:: ; 1a17 (0:1a17) ; ROCKET push de ld de,Char5EText jr FinishDTE Char54:: ; 1a1d (0:1a1d) ; POKé push de ld de,Char54Text jr FinishDTE Char56:: ; 1a23 (0:1a23) ; …… push de ld de,Char56Text jr FinishDTE Char4A:: ; 1a29 (0:1a29) ; PKMN push de ld de,Char4AText jr FinishDTE Char59:: ; 1a2f (0:1a2f) ; depending on whose turn it is, print ; enemy active monster’s name, prefixed with “Enemy ” ; or ; player active monster’s name ; (like Char5A but flipped) ld a,[H_WHOSETURN] xor 1 jr MonsterNameCharsCommon Char5A:: ; 1a35 (0:1a35) ; depending on whose turn it is, print ; player active monster’s name ; or ; enemy active monster’s name, prefixed with “Enemy ” ld a,[H_WHOSETURN] MonsterNameCharsCommon:: ; 1a37 (0:1a37) push de and a jr nz,.Enemy ld de,W_PLAYERMONNAME ; player active monster name jr FinishDTE .Enemy ; 1A40 ; print “Enemy ” ld de,Char5AText call PlaceString ld h,b ld l,c ld de,W_ENEMYMONNAME ; enemy active monster name FinishDTE:: ; 1a4b (0:1a4b) call PlaceString ld h,b ld l,c pop de inc de jp PlaceNextChar Char5CText:: ; 1a55 (0:1a55) db "TM@" Char5DText:: ; 1a58 (0:1a58) db "TRAINER@" Char5BText:: ; 1a60 (0:1a60) db "PC@" Char5EText:: ; 1a63 (0:1a63) db "ROCKET@" Char54Text:: ; 1a6a (0:1a6a) db "POKé@" Char56Text:: ; 1a6f (0:1a6f) db "……@" Char5AText:: ; 1a72 (0:1a72) db "Enemy @" Char4AText:: ; 1a79 (0:1a79) db $E1,$E2,"@" ; PKMN Char55:: ; 1a7c (0:1a7c) push de ld b,h ld c,l ld hl,Char55Text call TextCommandProcessor ld h,b ld l,c pop de inc de jp PlaceNextChar Char55Text:: ; 1a8c (0:1a8c) ; equivalent to Char4B TX_FAR _Char55Text db "@" Char5F:: ; 1a91 (0:1a91) ; ends a Pokédex entry ld [hl],"." pop hl ret Char58:: ; 1a95 (0:1a95) ld a,[$D12B] cp 4 jp z,Next1AA2 ld a,$EE FuncCoord 18, 16 ; $c4f2 ld [Coord],a Next1AA2:: ; 1aa2 (0:1aa2) call ProtectedDelay3 call ManualTextScroll ld a,$7F FuncCoord 18, 16 ; $c4f2 ld [Coord],a Char57:: ; 1aad (0:1aad) pop hl ld de,Char58Text dec de ret Char58Text:: ; 1ab3 (0:1ab3) db "@" Char51:: ; 1ab4 (0:1ab4) push de ld a,$EE FuncCoord 18, 16 ; $c4f2 ld [Coord],a call ProtectedDelay3 call ManualTextScroll FuncCoord 1, 13 ; $c4a5 ld hl,Coord ld bc,$0412 call ClearScreenArea ld c,$14 call DelayFrames pop de FuncCoord 1, 14 ; $c4b9 ld hl,Coord jp Next19E8 Char49:: ; 1ad5 (0:1ad5) push de ld a,$EE FuncCoord 18, 16 ; $c4f2 ld [Coord],a call ProtectedDelay3 call ManualTextScroll FuncCoord 1, 10 ; $c469 ld hl,Coord ld bc,$0712 call ClearScreenArea ld c,$14 call DelayFrames pop de pop hl FuncCoord 1, 11 ; $c47d ld hl,Coord push hl jp Next19E8 Char4B:: ; 1af8 (0:1af8) ld a,$EE FuncCoord 18, 16 ; $c4f2 ld [Coord],a call ProtectedDelay3 push de call ManualTextScroll pop de ld a,$7F FuncCoord 18, 16 ; $c4f2 ld [Coord],a ;fall through Char4C:: ; 1b0a (0:1b0a) push de call Next1B18 call Next1B18 FuncCoord 1, 16 ; $c4e1 ld hl,Coord pop de jp Next19E8 Next1B18:: ; 1b18 (0:1b18) FuncCoord 0, 14 ; $c4b8 ld hl,Coord FuncCoord 0, 13 ; $c4a4 ld de,Coord ld b,$3C .next ld a,[hli] ld [de],a inc de dec b jr nz,.next FuncCoord 1, 16 ; $c4e1 ld hl,Coord ld a,$7F ld b,$12 .next2 ld [hli],a dec b jr nz,.next2 ; wait five frames ld b,5 .WaitFrame call DelayFrame dec b jr nz,.WaitFrame ret ProtectedDelay3:: ; 1b3a (0:1b3a) push bc call Delay3 pop bc ret TextCommandProcessor:: ; 1b40 (0:1b40) ld a,[$d358] push af set 1,a ld e,a ld a,[$fff4] xor e ld [$d358],a ld a,c ld [$cc3a],a ld a,b ld [$cc3b],a NextTextCommand:: ; 1b55 (0:1b55) ld a,[hli] cp a, "@" ; terminator jr nz,.doTextCommand pop af ld [$d358],a ret .doTextCommand push hl cp a,$17 jp z,TextCommand17 cp a,$0e jp nc,TextCommand0B ; if a != 0x17 and a >= 0xE, go to command 0xB ; if a < 0xE, use a jump table ld hl,TextCommandJumpTable push bc add a ld b,$00 ld c,a add hl,bc pop bc ld a,[hli] ld h,[hl] ld l,a jp [hl] ; draw box ; 04AAAABBCC ; AAAA = address of upper left corner ; BB = height ; CC = width TextCommand04:: ; 1b78 (0:1b78) pop hl ld a,[hli] ld e,a ld a,[hli] ld d,a ld a,[hli] ld b,a ld a,[hli] ld c,a push hl ld h,d ld l,e call TextBoxBorder pop hl jr NextTextCommand ; place string inline ; 00{string} TextCommand00:: ; 1b8a (0:1b8a) pop hl ld d,h ld e,l ld h,b ld l,c call PlaceString ld h,d ld l,e inc hl jr NextTextCommand ; place string from RAM ; 01AAAA ; AAAA = address of string TextCommand01:: ; 1b97 (0:1b97) pop hl ld a,[hli] ld e,a ld a,[hli] ld d,a push hl ld h,b ld l,c call PlaceString pop hl jr NextTextCommand ; print BCD number ; 02AAAABB ; AAAA = address of BCD number ; BB ; bits 0-4 = length in bytes ; bits 5-7 = unknown flags TextCommand02:: ; 1ba5 (0:1ba5) pop hl ld a,[hli] ld e,a ld a,[hli] ld d,a ld a,[hli] push hl ld h,b ld l,c ld c,a call PrintBCDNumber ld b,h ld c,l pop hl jr NextTextCommand ; repoint destination address ; 03AAAA ; AAAA = new destination address TextCommand03:: ; 1bb7 (0:1bb7) pop hl ld a,[hli] ld [$cc3a],a ld c,a ld a,[hli] ld [$cc3b],a ld b,a jp NextTextCommand ; repoint destination to second line of dialogue text box ; 05 ; (no arguments) TextCommand05:: ; 1bc5 (0:1bc5) pop hl FuncCoord 1, 16 ; $c4e1 ld bc,Coord ; address of second line of dialogue text box jp NextTextCommand ; blink arrow and wait for A or B to be pressed ; 06 ; (no arguments) TextCommand06:: ; 1bcc (0:1bcc) ld a,[W_ISLINKBATTLE] cp a,$04 jp z,TextCommand0D ld a,$ee ; down arrow FuncCoord 18, 16 ; $c4f2 ld [Coord],a ; place down arrow in lower right corner of dialogue text box push bc call ManualTextScroll ; blink arrow and wait for A or B to be pressed pop bc ld a," " FuncCoord 18, 16 ; $c4f2 ld [Coord],a ; overwrite down arrow with blank space pop hl jp NextTextCommand ; scroll text up one line ; 07 ; (no arguments) TextCommand07:: ; 1be7 (0:1be7) ld a," " FuncCoord 18, 16 ; $c4f2 ld [Coord],a ; place blank space in lower right corner of dialogue text box call Next1B18 ; scroll up text call Next1B18 pop hl FuncCoord 1, 16 ; $c4e1 ld bc,Coord ; address of second line of dialogue text box jp NextTextCommand ; execute asm inline ; 08{code} TextCommand08:: ; 1bf9 (0:1bf9) pop hl ld de,NextTextCommand push de ; return address jp [hl] ; print decimal number (converted from binary number) ; 09AAAABB ; AAAA = address of number ; BB ; bits 0-3 = how many digits to display ; bits 4-7 = how long the number is in bytes TextCommand09:: ; 1bff (0:1bff) pop hl ld a,[hli] ld e,a ld a,[hli] ld d,a ld a,[hli] push hl ld h,b ld l,c ld b,a and a,$0f ld c,a ld a,b and a,$f0 swap a set 6,a ld b,a call PrintNumber ld b,h ld c,l pop hl jp NextTextCommand ; wait half a second if the user doesn't hold A or B ; 0A ; (no arguments) TextCommand0A:: ; 1c1d (0:1c1d) push bc call GetJoypadState ld a,[H_CURRENTPRESSEDBUTTONS] and a,%00000011 ; A and B buttons jr nz,.skipDelay ld c,30 call DelayFrames .skipDelay pop bc pop hl jp NextTextCommand ; plays sounds ; this actually handles various command ID's, not just 0B ; (no arguments) TextCommand0B:: ; 1c31 (0:1c31) pop hl push bc dec hl ld a,[hli] ld b,a ; b = command number that got us here push hl ld hl,TextCommandSounds .loop ld a,[hli] cp b jr z,.matchFound inc hl jr .loop .matchFound cp a,$14 jr z,.pokemonCry cp a,$15 jr z,.pokemonCry cp a,$16 jr z,.pokemonCry ld a,[hl] call PlaySound call WaitForSoundToFinish pop hl pop bc jp NextTextCommand .pokemonCry push de ld a,[hl] call PlayCry pop de pop hl pop bc jp NextTextCommand ; format: text command ID, sound ID or cry ID TextCommandSounds:: ; 1c64 (0:1c64) db $0B,$86 db $12,$9A db $0E,$91 db $0F,$86 db $10,$89 db $11,$94 db $13,$98 db $14,$A8 db $15,$97 db $16,$78 ; draw ellipses ; 0CAA ; AA = number of ellipses to draw TextCommand0C:: ; 1c78 (0:1c78) pop hl ld a,[hli] ld d,a push hl ld h,b ld l,c .loop ld a,$75 ; ellipsis ld [hli],a push de call GetJoypadState pop de ld a,[H_CURRENTPRESSEDBUTTONS] ; joypad state and a,%00000011 ; is A or B button pressed? jr nz,.skipDelay ; if so, skip the delay ld c,10 call DelayFrames .skipDelay dec d jr nz,.loop ld b,h ld c,l pop hl jp NextTextCommand ; wait for A or B to be pressed ; 0D ; (no arguments) TextCommand0D:: ; 1c9a (0:1c9a) push bc call ManualTextScroll ; wait for A or B to be pressed pop bc pop hl jp NextTextCommand ; process text commands in another ROM bank ; 17AAAABB ; AAAA = address of text commands ; BB = bank TextCommand17:: ; 1ca3 (0:1ca3) pop hl ld a,[H_LOADEDROMBANK] push af ld a,[hli] ld e,a ld a,[hli] ld d,a ld a,[hli] ld [H_LOADEDROMBANK],a ld [$2000],a push hl ld l,e ld h,d call TextCommandProcessor pop hl pop af ld [H_LOADEDROMBANK],a ld [$2000],a jp NextTextCommand TextCommandJumpTable:: ; 1cc1 (0:1cc1) dw TextCommand00 dw TextCommand01 dw TextCommand02 dw TextCommand03 dw TextCommand04 dw TextCommand05 dw TextCommand06 dw TextCommand07 dw TextCommand08 dw TextCommand09 dw TextCommand0A dw TextCommand0B dw TextCommand0C dw TextCommand0D ; this function seems to be used only once ; it store the address of a row and column of the VRAM background map in hl ; INPUT: h - row, l - column, b - high byte of background tile map address in VRAM GetRowColAddressBgMap:: ; 1cdd (0:1cdd) xor a srl h rr a srl h rr a srl h rr a or l ld l,a ld a,b or h ld h,a ret ; clears a VRAM background map with blank space tiles ; INPUT: h - high byte of background tile map address in VRAM ClearBgMap:: ; 1cf0 (0:1cf0) ld a," " jr .next ld a,l .next ld de,$400 ; size of VRAM background map ld l,e .loop ld [hli],a dec e jr nz,.loop dec d jr nz,.loop ret ; When the player takes a step, a row or column of 2x2 tile blocks at the edge ; of the screen toward which they moved is exposed and has to be redrawn. ; This function does the redrawing. RedrawExposedScreenEdge:: ; 1d01 (0:1d01) ld a,[H_SCREENEDGEREDRAW] and a ret z ld b,a xor a ld [H_SCREENEDGEREDRAW],a dec b jr nz,.redrawRow .redrawColumn ld hl,wScreenEdgeTiles ld a,[H_SCREENEDGEREDRAWADDR] ld e,a ld a,[H_SCREENEDGEREDRAWADDR + 1] ld d,a ld c,18 ; screen height .loop1 ld a,[hli] ld [de],a inc de ld a,[hli] ld [de],a ld a,31 add e ld e,a jr nc,.noCarry inc d .noCarry ; the following 4 lines wrap us from bottom to top if necessary ld a,d and a,$03 or a,$98 ld d,a dec c jr nz,.loop1 xor a ld [H_SCREENEDGEREDRAW],a ret .redrawRow ld hl,wScreenEdgeTiles ld a,[H_SCREENEDGEREDRAWADDR] ld e,a ld a,[H_SCREENEDGEREDRAWADDR + 1] ld d,a push de call .drawHalf ; draw upper half pop de ld a,32 ; width of VRAM background map add e ld e,a ; draw lower half .drawHalf ld c,10 .loop2 ld a,[hli] ld [de],a inc de ld a,[hli] ld [de],a ld a,e inc a ; the following 6 lines wrap us from the right edge to the left edge if necessary and a,$1f ld b,a ld a,e and a,$e0 or b ld e,a dec c jr nz,.loop2 ret ; This function automatically transfers tile number data from the tile map at ; wTileMap to VRAM during V-blank. Note that it only transfers one third of the ; background per V-blank. It cycles through which third it draws. ; This transfer is turned off when walking around the map, but is turned ; on when talking to sprites, battling, using menus, etc. This is because ; the above function, RedrawExposedScreenEdge, is used when walking to ; improve efficiency. AutoBgMapTransfer:: ; 1d57 (0:1d57) ld a,[H_AUTOBGTRANSFERENABLED] and a ret z ld hl,[sp + 0] ld a,h ld [H_SPTEMP],a ld a,l ld [H_SPTEMP + 1],a ; save stack pinter ld a,[H_AUTOBGTRANSFERPORTION] and a jr z,.transferTopThird dec a jr z,.transferMiddleThird .transferBottomThird FuncCoord 0,12 ld hl,Coord ld sp,hl ld a,[H_AUTOBGTRANSFERDEST + 1] ld h,a ld a,[H_AUTOBGTRANSFERDEST] ld l,a ld de,(12 * 32) add hl,de xor a ; TRANSFERTOP jr .doTransfer .transferTopThird FuncCoord 0,0 ld hl,Coord ld sp,hl ld a,[H_AUTOBGTRANSFERDEST + 1] ld h,a ld a,[H_AUTOBGTRANSFERDEST] ld l,a ld a,TRANSFERMIDDLE jr .doTransfer .transferMiddleThird FuncCoord 0,6 ld hl,Coord ld sp,hl ld a,[H_AUTOBGTRANSFERDEST + 1] ld h,a ld a,[H_AUTOBGTRANSFERDEST] ld l,a ld de,(6 * 32) add hl,de ld a,TRANSFERBOTTOM .doTransfer ld [H_AUTOBGTRANSFERPORTION],a ; store next portion ld b,6 ; unrolled loop and using pop for speed TransferBgRows:: ; 1d9e (0:1d9e) pop de ld [hl],e inc l ld [hl],d inc l pop de ld [hl],e inc l ld [hl],d inc l pop de ld [hl],e inc l ld [hl],d inc l pop de ld [hl],e inc l ld [hl],d inc l pop de ld [hl],e inc l ld [hl],d inc l pop de ld [hl],e inc l ld [hl],d inc l pop de ld [hl],e inc l ld [hl],d inc l pop de ld [hl],e inc l ld [hl],d inc l pop de ld [hl],e inc l ld [hl],d inc l pop de ld [hl],e inc l ld [hl],d ld a,13 add l ld l,a jr nc,.noCarry inc h .noCarry dec b jr nz,TransferBgRows ld a,[H_SPTEMP] ld h,a ld a,[H_SPTEMP + 1] ld l,a ld sp,hl ; restore stack pointer ret ; Copies [H_VBCOPYBGNUMROWS] rows from H_VBCOPYBGSRC to H_VBCOPYBGDEST. ; If H_VBCOPYBGSRC is XX00, the transfer is disabled. VBlankCopyBgMap:: ; 1de1 (0:1de1) ld a,[H_VBCOPYBGSRC] ; doubles as enabling byte and a ret z ld hl,[sp + 0] ld a,h ld [H_SPTEMP],a ld a,l ld [H_SPTEMP + 1],a ; save stack pointer ld a,[H_VBCOPYBGSRC] ld l,a ld a,[H_VBCOPYBGSRC + 1] ld h,a ld sp,hl ld a,[H_VBCOPYBGDEST] ld l,a ld a,[H_VBCOPYBGDEST + 1] ld h,a ld a,[H_VBCOPYBGNUMROWS] ld b,a xor a ld [H_VBCOPYBGSRC],a ; disable transfer so it doesn't continue next V-blank jr TransferBgRows ; This function copies ([H_VBCOPYDOUBLESIZE] * 8) source bytes ; from H_VBCOPYDOUBLESRC to H_VBCOPYDOUBLEDEST. ; It copies each source byte to the destination twice (next to each other). ; The function updates the source and destination addresses, so the transfer ; can be continued easily by repeatingly calling this function. VBlankCopyDouble:: ; 1e02 (0:1e02) ld a,[H_VBCOPYDOUBLESIZE] and a ; are there any bytes to copy? ret z ld hl,[sp + 0] ld a,h ld [H_SPTEMP],a ld a,l ld [H_SPTEMP + 1],a ; save stack pointer ld a,[H_VBCOPYDOUBLESRC] ld l,a ld a,[H_VBCOPYDOUBLESRC + 1] ld h,a ld sp,hl ld a,[H_VBCOPYDOUBLEDEST] ld l,a ld a,[H_VBCOPYDOUBLEDEST + 1] ld h,a ld a,[H_VBCOPYDOUBLESIZE] ld b,a xor a ld [H_VBCOPYDOUBLESIZE],a ; disable transfer so it doesn't continue next V-blank .loop pop de ld [hl],e inc l ld [hl],e inc l ld [hl],d inc l ld [hl],d inc l pop de ld [hl],e inc l ld [hl],e inc l ld [hl],d inc l ld [hl],d inc l pop de ld [hl],e inc l ld [hl],e inc l ld [hl],d inc l ld [hl],d inc l pop de ld [hl],e inc l ld [hl],e inc l ld [hl],d inc l ld [hl],d inc hl dec b jr nz,.loop ld a,l ld [H_VBCOPYDOUBLEDEST],a ld a,h ld [H_VBCOPYDOUBLEDEST + 1],a ; update destination address ld hl,[sp + 0] ld a,l ld [H_VBCOPYDOUBLESRC],a ld a,h ld [H_VBCOPYDOUBLESRC + 1],a ; update source address ld a,[H_SPTEMP] ld h,a ld a,[H_SPTEMP + 1] ld l,a ld sp,hl ; restore stack pointer ret ; Copies ([H_VBCOPYSIZE] * 16) bytes from H_VBCOPYSRC to H_VBCOPYDEST. ; The function updates the source and destination addresses, so the transfer ; can be continued easily by repeatingly calling this function. VBlankCopy:: ; 1e5e (0:1e5e) ld a,[H_VBCOPYSIZE] and a ; are there any bytes to copy? ret z ld hl,[sp + 0] ld a,h ld [H_SPTEMP],a ld a,l ld [H_SPTEMP + 1],a ; save stack pointer ld a,[H_VBCOPYSRC] ld l,a ld a,[H_VBCOPYSRC + 1] ld h,a ld sp,hl ld a,[H_VBCOPYDEST] ld l,a ld a,[H_VBCOPYDEST + 1] ld h,a ld a,[H_VBCOPYSIZE] ld b,a xor a ld [H_VBCOPYSIZE],a ; disable transfer so it doesn't continue next V-blank .loop pop de ld [hl],e inc l ld [hl],d inc l pop de ld [hl],e inc l ld [hl],d inc l pop de ld [hl],e inc l ld [hl],d inc l pop de ld [hl],e inc l ld [hl],d inc l pop de ld [hl],e inc l ld [hl],d inc l pop de ld [hl],e inc l ld [hl],d inc l pop de ld [hl],e inc l ld [hl],d inc l pop de ld [hl],e inc l ld [hl],d inc hl dec b jr nz,.loop ld a,l ld [H_VBCOPYDEST],a ld a,h ld [H_VBCOPYDEST + 1],a ld hl,[sp + 0] ld a,l ld [H_VBCOPYSRC],a ld a,h ld [H_VBCOPYSRC + 1],a ld a,[H_SPTEMP] ld h,a ld a,[H_SPTEMP + 1] ld l,a ld sp,hl ; restore stack pointer ret ; This function updates the moving water and flower background tiles. UpdateMovingBgTiles:: ; 1ebe (0:1ebe) ld a,[$ffd7] and a ret z ld a,[$ffd8] inc a ld [$ffd8],a cp a,20 ret c cp a,21 jr z,.updateFlowerTile ld hl,$9140 ; water tile pattern VRAM location ld c,16 ; number of bytes in a tile pattern ld a,[$d085] inc a and a,$07 ld [$d085],a and a,$04 jr nz,.rotateWaterLeftLoop .rotateWaterRightloop ld a,[hl] rrca ld [hli],a dec c jr nz,.rotateWaterRightloop jr .done .rotateWaterLeftLoop ld a,[hl] rlca ld [hli],a dec c jr nz,.rotateWaterLeftLoop .done ld a,[$ffd7] rrca ret nc xor a ld [$ffd8],a ret .updateFlowerTile xor a ld [$ffd8],a ld a,[$d085] and a,$03 cp a,2 ld hl,FlowerTilePattern1 jr c,.writeTilePatternToVram ld hl,FlowerTilePattern2 jr z,.writeTilePatternToVram ld hl,FlowerTilePattern3 .writeTilePatternToVram ld de,$9030 ; flower tile pattern VRAM location ld c,16 ; number of bytes in a tile pattern .flowerTileLoop ld a,[hli] ld [de],a inc de dec c jr nz,.flowerTileLoop ret FlowerTilePattern1:: ; 1f19 (0:1f19) INCBIN "gfx/tilesets/flower/flower1.2bpp" FlowerTilePattern2:: ; 1f29 (0:1f29) INCBIN "gfx/tilesets/flower/flower2.2bpp" FlowerTilePattern3:: ; 1f39 (0:1f39) INCBIN "gfx/tilesets/flower/flower3.2bpp" SoftReset:: ; 1f49 (0:1f49) call StopAllSounds call GBPalWhiteOut ld c, $20 call DelayFrames ;fall through ; initialization code ; explanation for %11100011 (value stored in rLCDC) ; * LCD enabled ; * Window tile map at $9C00 ; * Window display enabled ; * BG and window tile data at $8800 ; * BG tile map at $9800 ; * 8x8 OBJ size ; * OBJ display enabled ; * BG display enabled InitGame:: ; 1f54 (0:1f54) di ; zero I/O registers xor a ld [$ff0f],a ld [$ffff],a ld [$ff43],a ld [$ff42],a ld [$ff01],a ld [$ff02],a ld [$ff4b],a ld [$ff4a],a ld [$ff06],a ld [$ff07],a ld [$ff47],a ld [$ff48],a ld [$ff49],a ld a,%10000000 ; enable LCD ld [rLCDC],a call DisableLCD ; why enable then disable? ld sp,$dfff ; initialize stack pointer ld hl,$c000 ; start of WRAM ld bc,$2000 ; size of WRAM .zeroWramLoop ld [hl],0 inc hl dec bc ld a,b or c jr nz,.zeroWramLoop call ZeroVram ld hl,$ff80 ld bc,$007f call FillMemory ; zero HRAM call CleanLCD_OAM ; this is unnecessary since it was already cleared above ld a,Bank(WriteDMACodeToHRAM) ld [H_LOADEDROMBANK],a ld [$2000],a call WriteDMACodeToHRAM ; copy DMA code to HRAM xor a ld [$ffd7],a ld [$ff41],a ld [$ffae],a ld [$ffaf],a ld [$ff0f],a ld a,%00001101 ; enable V-blank, timer, and serial interrupts ld [rIE],a ld a,$90 ; put the window off the screen ld [$ffb0],a ld [rWY],a ld a,$07 ld [rWX],a ld a,$ff ld [$ffaa],a ld h,$98 call ClearBgMap ; fill $9800-$9BFF (BG tile map) with $7F tiles ld h,$9c call ClearBgMap ; fill $9C00-$9FFF (Window tile map) with $7F tiles ld a,%11100011 ld [rLCDC],a ; enabled LCD ld a,$10 ld [H_SOFTRESETCOUNTER],a call StopAllSounds ei ld a,$40 call Predef ; SGB border ld a,$1f ld [$c0ef],a ld [$c0f0],a ld a,$9c ld [$ffbd],a xor a ld [$ffbc],a dec a ld [$cfcb],a ld a,$32 call Predef ; display the copyrights, GameFreak logo, and battle animation call DisableLCD call ZeroVram call GBPalNormal call CleanLCD_OAM ld a,%11100011 ld [rLCDC],a ; enable LCD jp Func_42b7 ; zeroes all VRAM ZeroVram:: ; 2004 (0:2004) ld hl,$8000 ld bc,$2000 xor a jp FillMemory ; immediately stops all sounds StopAllSounds:: ; 200e (0:200e) ld a, Bank(Func_9876) ld [$c0ef], a ld [$c0f0], a xor a ld [wMusicHeaderPointer], a ld [$c0ee], a ld [$cfca], a dec a jp PlaySound VBlankHandler:: ; 2024 (0:2024) push af push bc push de push hl ld a,[H_LOADEDROMBANK] ; current ROM bank ld [$d122],a ld a,[$ffae] ld [rSCX],a ld a,[$ffaf] ld [rSCY],a ld a,[$d0a0] and a jr nz,.doVramTransfers ld a,[$ffb0] ld [rWY],a .doVramTransfers call AutoBgMapTransfer call VBlankCopyBgMap call RedrawExposedScreenEdge call VBlankCopy call VBlankCopyDouble call UpdateMovingBgTiles call $ff80 ; OAM DMA ld a,Bank(PrepareOAMData) ld [H_LOADEDROMBANK],a ld [$2000],a call PrepareOAMData ; update OAM buffer with current sprite data call GenRandom ld a,[H_VBLANKOCCURRED] and a jr z,.next xor a ld [H_VBLANKOCCURRED],a .next ld a,[H_FRAMECOUNTER] and a jr z,.handleMusic dec a ld [H_FRAMECOUNTER],a .handleMusic call Func_28cb ld a,[$c0ef] ; music ROM bank ld [H_LOADEDROMBANK],a ld [$2000],a cp a,$02 jr nz,.checkIfBank08 .bank02 call Func_9103 jr .afterMusic .checkIfBank08 cp a,$08 jr nz,.bank1F .bank08 call Func_2136e call Func_21879 jr .afterMusic .bank1F call Func_7d177 .afterMusic ld b, BANK(Func_18dee) ld hl, Func_18dee call Bankswitch ; keep track of time played ld a,[$fff9] and a call z,ReadJoypadRegister ld a,[$d122] ld [H_LOADEDROMBANK],a ld [$2000],a pop hl pop de pop bc pop af reti DelayFrame:: ; 20af (0:20af) ; delay for one frame ld a,1 ld [H_VBLANKOCCURRED],a ; wait for the next Vblank, halting to conserve battery .halt db $76 ; XXX this is a hack--rgbasm adds a nop after this instr even when ints are enabled ld a,[H_VBLANKOCCURRED] and a jr nz,.halt ret ; These routines manage gradual fading ; (e.g., entering a doorway) LoadGBPal:: ; 20ba (0:20ba) ld a,[$d35d] ;tells if cur.map is dark (requires HM5_FLASH?) ld b,a ld hl,GBPalTable_00 ;16 ld a,l sub b ld l,a jr nc,.jr0 dec h .jr0 ld a,[hli] ld [rBGP],a ld a,[hli] ld [rOBP0],a ld a,[hli] ld [rOBP1],a ret GBFadeOut1:: ; 20d1 (0:20d1) ld hl,IncGradGBPalTable_01 ;0d ld b,$04 jr GBFadeOutCommon GBFadeOut2:: ; 20d8 (0:20d8) ld hl,IncGradGBPalTable_02 ;1c ld b,$03 GBFadeOutCommon:: ; 20dd (0:20dd) ld a,[hli] ld [rBGP],a ld a,[hli] ld [rOBP0],a ld a,[hli] ld [rOBP1],a ld c,8 call DelayFrames dec b jr nz,GBFadeOutCommon ret GBFadeIn1:: ; 20ef (0:20ef) ld hl,DecGradGBPalTable_01 ;18 ld b,$04 jr GBFadeInCommon GBFadeIn2:: ; 20f6 (0:20f6) ld hl,DecGradGBPalTable_02 ;21 ld b,$03 GBFadeInCommon:: ; 20fb (0:20fb) ld a,[hld] ld [rOBP1],a ld a,[hld] ld [rOBP0],a ld a,[hld] ld [rBGP],a ld c,8 call DelayFrames dec b jr nz,GBFadeInCommon ret IncGradGBPalTable_01:: ; 210d (0:210d) db %11111111 ;BG Pal db %11111111 ;OBJ Pal 1 db %11111111 ;OBJ Pal 2 ;and so on... db %11111110 db %11111110 db %11111000 db %11111001 db %11100100 db %11100100 GBPalTable_00:: ; 2116 (0:2116) db %11100100 db %11010000 DecGradGBPalTable_01:: ; 2118 (0:2118) db %11100000 ;19 db %11100100 db %11010000 db %11100000 IncGradGBPalTable_02:: ; 211c (0:211c) db %10010000 db %10000000 db %10010000 db %01000000 db %01000000 DecGradGBPalTable_02:: ; 2121 (0:2121) db %01000000 db %00000000 db %00000000 db %00000000 SerialInterruptHandler:: ; 2125 (0:2125) push af push bc push de push hl ld a, [$FF00+$aa] inc a jr z, .asm_2142 ld a, [$FF00+$1] ld [$FF00+$ad], a ld a, [$FF00+$ac] ld [$FF00+$1], a ld a, [$FF00+$aa] cp $2 jr z, .asm_2162 ld a, $80 ld [$FF00+$2], a jr .asm_2162 .asm_2142 ld a, [$FF00+$1] ld [$FF00+$ad], a ld [$FF00+$aa], a cp $2 jr z, .asm_215f xor a ld [$FF00+$1], a ld a, $3 ld [rDIV], a ; $FF00+$4 .asm_2153 ld a, [rDIV] ; $FF00+$4 bit 7, a jr nz, .asm_2153 ld a, $80 ld [$FF00+$2], a jr .asm_2162 .asm_215f xor a ld [$FF00+$1], a .asm_2162 ld a, $1 ld [$FF00+$a9], a ld a, $fe ld [$FF00+$ac], a pop hl pop de pop bc pop af reti Func_216f:: ; 216f (0:216f) ld a, $1 ld [$FF00+$ab], a .asm_2173 ld a, [hl] ld [$FF00+$ac], a call Func_219a push bc ld b, a inc hl ld a, $30 .asm_217e dec a jr nz, .asm_217e ld a, [$FF00+$ab] and a ld a, b pop bc jr z, .asm_2192 dec hl cp $fd jr nz, .asm_2173 xor a ld [$FF00+$ab], a jr .asm_2173 .asm_2192 ld [de], a inc de dec bc ld a, b or c jr nz, .asm_2173 ret Func_219a:: ; 219a (0:219a) xor a ld [$FF00+$a9], a ld a, [$FF00+$aa] cp $2 jr nz, .asm_21a7 ld a, $81 ld [$FF00+$2], a .asm_21a7 ld a, [$FF00+$a9] and a jr nz, .asm_21f1 ld a, [$FF00+$aa] cp $1 jr nz, .asm_21cc call Func_2237 jr z, .asm_21cc call Func_2231 push hl ld hl, $cc48 inc [hl] jr nz, .asm_21c3 dec hl inc [hl] .asm_21c3 pop hl call Func_2237 jr nz, .asm_21a7 jp Func_223f .asm_21cc ld a, [rIE] ; $FF00+$ff and $f cp $8 jr nz, .asm_21a7 ld a, [W_NUMHITS] ; $d074 dec a ld [W_NUMHITS], a ; $d074 jr nz, .asm_21a7 ld a, [$d075] dec a ld [$d075], a jr nz, .asm_21a7 ld a, [$FF00+$aa] cp $1 jr z, .asm_21f1 ld a, $ff .asm_21ee dec a jr nz, .asm_21ee .asm_21f1 xor a ld [$FF00+$a9], a ld a, [rIE] ; $FF00+$ff and $f sub $8 jr nz, .asm_2204 ld [W_NUMHITS], a ; $d074 ld a, $50 ld [$d075], a .asm_2204 ld a, [$FF00+$ad] cp $fe ret nz call Func_2237 jr z, .asm_221f push hl ld hl, $cc48 ld a, [hl] dec a ld [hld], a inc a jr nz, .asm_2219 dec [hl] .asm_2219 pop hl call Func_2237 jr z, Func_223f .asm_221f ld a, [rIE] ; $FF00+$ff and $f cp $8 ld a, $fe ret z ld a, [hl] ld [$FF00+$ac], a call DelayFrame jp Func_219a Func_2231:: ; 2231 (0:2231) ld a, $f .asm_2233 dec a jr nz, .asm_2233 ret Func_2237:: ; 2237 (0:2237) push hl ld hl, $cc47 ld a, [hli] or [hl] pop hl ret Func_223f:: ; 223f (0:223f) dec a ld [$cc47], a ld [$cc48], a ret Func_2247:: ; 2247 (0:2247) ld hl, $cc42 ld de, $cc3d ld c, $2 ld a, $1 ld [$FF00+$ab], a .asm_2253 call DelayFrame ld a, [hl] ld [$FF00+$ac], a call Func_219a ld b, a inc hl ld a, [$FF00+$ab] and a ld a, $0 ld [$FF00+$ab], a jr nz, .asm_2253 ld a, b ld [de], a inc de dec c jr nz, .asm_2253 ret Func_226e:: ; 226e (0:226e) call SaveScreenTilesToBuffer1 ld hl, Func_4c05 ld b, BANK(Func_4c05) call Bankswitch call Func_227f jp LoadScreenTilesFromBuffer1 Func_227f:: ; 227f (0:227f) ld a, $ff ld [$cc3e], a .asm_2284 call Func_22c3 call DelayFrame call Func_2237 jr z, .asm_22a0 push hl ld hl, $cc48 dec [hl] jr nz, .asm_229f dec hl dec [hl] jr nz, .asm_229f pop hl xor a jp Func_223f .asm_229f pop hl .asm_22a0 ld a, [$cc3e] inc a jr z, .asm_2284 ld b, $a .asm_22a8 call DelayFrame call Func_22c3 dec b jr nz, .asm_22a8 ld b, $a .asm_22b3 call DelayFrame call Func_22ed dec b jr nz, .asm_22b3 ld a, [$cc3e] ld [$cc3d], a ret Func_22c3:: ; 22c3 (0:22c3) call asm_22d7 ld a, [$cc42] add $60 ld [$FF00+$ac], a ld a, [$FF00+$aa] cp $2 jr nz, asm_22d7 ld a, $81 ld [$FF00+$2], a asm_22d7:: ; 22d7 (0:22d7) ld a, [$FF00+$ad] ld [$cc3d], a and $f0 cp $60 ret nz xor a ld [$FF00+$ad], a ld a, [$cc3d] and $f ld [$cc3e], a ret Func_22ed:: ; 22ed (0:22ed) xor a ld [$FF00+$ac], a ld a, [$FF00+$aa] cp $2 ret nz ld a, $81 ld [$FF00+$2], a ret Func_22fa:: ; 22fa (0:22fa) ld a, $2 ld [$FF00+$1], a xor a ld [$FF00+$ad], a ld a, $80 ld [$FF00+$2], a ret ; timer interrupt is apparently not invoked anyway TimerHandler:: ; 2306 (0:2306) reti Func_2307:: ; 2307 (0:2307) call WaitForSoundToFinish xor a ld c, a ld d, a ld [$cfca], a jr asm_2324 Func_2312:: ; 2312 (0:2312) ld c, $a ld d, $0 ld a, [$d72e] bit 5, a jr z, asm_2324 xor a ld [$cfca], a ld c, $8 ld d, c asm_2324:: ; 2324 (0:2324) ld a, [$d700] and a jr z, .asm_2343 cp $2 jr z, .asm_2332 ld a, MUSIC_BIKE_RIDING jr .asm_2334 .asm_2332 ld a, MUSIC_SURFING .asm_2334 ld b, a ld a, d and a ld a, Bank(Func_7d8ea) jr nz, .asm_233e ld [$c0ef], a .asm_233e ld [$c0f0], a jr .asm_234c .asm_2343 ld a, [$d35b] ld b, a call Func_2385 jr c, .asm_2351 .asm_234c ld a, [$cfca] cp b ret z .asm_2351 ld a, c ld [wMusicHeaderPointer], a ld a, b ld [$cfca], a ld [$c0ee], a jp PlaySound Func_235f:: ; 235f (0:235f) ld a, [$c0ef] ld b, a cp $2 jr nz, .checkForBank08 .bank02 ld hl, Func_9103 jr .asm_2378 .checkForBank08 cp $8 jr nz, .bank1F .bank08 ld hl, Func_21879 jr .asm_2378 .bank1F ld hl, Func_7d177 .asm_2378 ld c, $6 .asm_237a push bc push hl call Bankswitch pop hl pop bc dec c jr nz, .asm_237a ret Func_2385:: ; 2385 (0:2385) ld a, [$d35c] ld e, a ld a, [$c0ef] cp e jr nz, .asm_2394 ld [$c0f0], a and a ret .asm_2394 ld a, c and a ld a, e jr nz, .asm_239c ld [$c0ef], a .asm_239c ld [$c0f0], a scf ret PlayMusic:: ; 23a1 (0:23a1) ld b, a ld [$c0ee], a xor a ld [wMusicHeaderPointer], a ld a, c ld [$c0ef], a ld [$c0f0], a ld a, b ; plays music specified by a. If value is $ff, music is stopped PlaySound:: ; 23b1 (0:23b1) push hl push de push bc ld b, a ld a, [$c0ee] and a jr z, .asm_23c8 xor a ld [$c02a], a ld [$c02b], a ld [$c02c], a ld [$c02d], a .asm_23c8 ld a, [wMusicHeaderPointer] and a jr z, .asm_23e3 ld a, [$c0ee] and a jr z, .asm_2425 xor a ld [$c0ee], a ld a, [$cfca] cp $ff jr nz, .asm_2414 xor a ld [wMusicHeaderPointer], a .asm_23e3 xor a ld [$c0ee], a ld a, [H_LOADEDROMBANK] ld [$FF00+$b9], a ld a, [$c0ef] ld [H_LOADEDROMBANK], a ld [$2000], a cp $2 jr nz, .checkForBank08 .bank02 ld a, b call Func_9876 jr .asm_240b .checkForBank08 cp $8 jr nz, .bank1F .bank08 ld a, b call Func_22035 jr .asm_240b .bank1F ld a, b call Func_7d8ea .asm_240b ld a, [$FF00+$b9] ld [H_LOADEDROMBANK], a ld [$2000], a jr .asm_2425 .asm_2414 ld a, b ld [$cfca], a ld a, [wMusicHeaderPointer] ld [$cfc8], a ld [$cfc9], a ld a, b ld [wMusicHeaderPointer], a .asm_2425 pop bc pop de pop hl ret UpdateSprites:: ; 2429 (0:2429) ld a, [$cfcb] dec a ret nz ld a, [H_LOADEDROMBANK] push af ld a, Bank(_UpdateSprites) ld [H_LOADEDROMBANK], a ld [$2000], a call _UpdateSprites pop af ld [H_LOADEDROMBANK], a ld [$2000], a ret ; mart inventories are below ; they are texts ; first byte $FE, next byte # of items, last byte $FF ; Viridian ViridianMartText6:: ; 2442 (0:2442) db $FE,4,POKE_BALL,ANTIDOTE,PARLYZ_HEAL,BURN_HEAL,$FF ; Pewter PewterMartText1:: ; 2449 (0:2449) db $FE,7,POKE_BALL,POTION,ESCAPE_ROPE,ANTIDOTE,BURN_HEAL,AWAKENING db PARLYZ_HEAL,$FF ; Cerulean CeruleanMartText1:: ; 2453 (0:2453) db $FE,7,POKE_BALL,POTION,REPEL,ANTIDOTE,BURN_HEAL,AWAKENING db PARLYZ_HEAL,$FF ; Bike shop db $FE,1,BICYCLE,$FF ; Vermilion VermilionMartText1:: ; 2461 (0:2461) db $FE,6,POKE_BALL,SUPER_POTION,ICE_HEAL,AWAKENING,PARLYZ_HEAL db REPEL,$FF ; Lavender LavenderMartText1:: ; 246a (0:246a) db $FE,9,GREAT_BALL,SUPER_POTION,REVIVE,ESCAPE_ROPE,SUPER_REPEL db ANTIDOTE,BURN_HEAL,ICE_HEAL,PARLYZ_HEAL,$FF ; Celadon Dept. Store 2F (1) CeladonMart2Text1:: ; 2476 (0:2476) db $FE,9,GREAT_BALL,SUPER_POTION,REVIVE,SUPER_REPEL,ANTIDOTE db BURN_HEAL,ICE_HEAL,AWAKENING,PARLYZ_HEAL,$FF ; Celadon Dept. Store 2F (2) CeladonMart2Text2:: ; 2482 (0:2482) db $FE,9,TM_32,TM_33,TM_02,TM_07,TM_37,TM_01,TM_05,TM_09,TM_17,$FF ; Celadon Dept. Store 4F CeladonMart4Text1:: ; 248e (0:248e) db $FE,5,POKE_DOLL,FIRE_STONE,THUNDER_STONE,WATER_STONE,LEAF_STONE,$FF ; Celadon Dept. Store 5F (1) CeladonMart5Text3:: ; 2496 (0:2496) db $FE,7,X_ACCURACY,GUARD_SPEC_,DIRE_HIT,X_ATTACK,X_DEFEND,X_SPEED db X_SPECIAL,$FF ; Celadon Dept. Store 5F (2) CeladonMart5Text4:: ; 24a0 (0:24a0) db $FE,5,HP_UP,PROTEIN,IRON,CARBOS,CALCIUM,$FF ; Fuchsia FuchsiaMartText1:: ; 24a8 (0:24a8) db $FE,6,ULTRA_BALL,GREAT_BALL,SUPER_POTION,REVIVE,FULL_HEAL db SUPER_REPEL,$FF ; unused? 24b1 db $FE,5,GREAT_BALL,HYPER_POTION,SUPER_POTION,FULL_HEAL,REVIVE,$FF ; Cinnabar CinnabarMartText1:: ; 24b9 (0:24b9) db $FE,7,ULTRA_BALL,GREAT_BALL,HYPER_POTION,MAX_REPEL,ESCAPE_ROPE db FULL_HEAL,REVIVE,$FF ; Saffron SaffronMartText1:: ; 24c3 (0:24c3) db $FE,6,GREAT_BALL,HYPER_POTION,MAX_REPEL,ESCAPE_ROPE,FULL_HEAL db REVIVE,$FF ; Indigo IndigoPlateauLobbyText4:: ; 24cc (0:24cc) db $FE,7,ULTRA_BALL,GREAT_BALL,FULL_RESTORE,MAX_POTION,FULL_HEAL db REVIVE,MAX_REPEL,$FF TextScriptEndingChar:: ; 24d6 (0:24d6) db "@" TextScriptEnd:: ; 24d7 (0:24d7) ld hl,TextScriptEndingChar ret UnnamedText_24db:: ; 24db (0:24db) TX_FAR _UnnamedText_24db db "@" UnnamedText_24e0:: ; 24e0 (0:24e0) TX_FAR _UnnamedText_24e0 db "@" BoulderText:: ; 24e5 (0:24e5) TX_FAR _BoulderText db "@" MartSignText:: ; 24ea (0:24ea) TX_FAR _MartSignText db "@" PokeCenterSignText:: ; 24ef (0:24ef) TX_FAR _PokeCenterSignText db "@" Predef5CText:: ; 24f4 (0:24f4) ; XXX better label (what does predef $5C do?) db $08 ; asm ld a, $5c call Predef jp TextScriptEnd ; bankswitches and runs _UncompressSpriteData ; bank is given in a, sprite input stream is pointed to in W_SPRITEINPUTPTR UncompressSpriteData:: ; 24fd (0:24fd) ld b, a ld a, [H_LOADEDROMBANK] push af ld a, b ld [H_LOADEDROMBANK], a ld [$2000], a ld a, $a ld [$0], a xor a ld [$4000], a call _UncompressSpriteData pop af ld [H_LOADEDROMBANK], a ld [$2000], a ret ; initializes necessary data to load a sprite and runs UncompressSpriteDataLoop _UncompressSpriteData:: ; 251a (0:251a) ld hl, S_SPRITEBUFFER1 ld c, (2*SPRITEBUFFERSIZE) % $100 ld b, (2*SPRITEBUFFERSIZE) / $100 xor a call FillMemory ; clear sprite buffer 1 and 2 ld a, $1 ld [W_SPRITEINPUTBITCOUNTER], a ld a, $3 ld [W_SPRITEOUTPUTBITOFFSET], a xor a ld [W_SPRITECURPOSX], a ld [W_SPRITECURPOSY], a ld [W_SPRITELOADFLAGS], a ; $d0a8 call ReadNextInputByte ; first byte of input determines sprite width (high nybble) and height (low nybble) in tiles (8x8 pixels) ld b, a and $f add a add a add a ld [W_SPRITEHEIGHT], a ld a, b swap a and $f add a add a add a ld [W_SPRITEWITDH], a call ReadNextInputBit ld [W_SPRITELOADFLAGS], a ; initialite bit1 to 0 and bit0 to the first input bit ; this will load two chunks of data to S_SPRITEBUFFER1 and S_SPRITEBUFFER2 ; bit 0 decides in which one the first chunk is placed ; fall through ; uncompresses a chunk from the sprite input data stream (pointed to at $d0da) into S_SPRITEBUFFER1 or S_SPRITEBUFFER2 ; each chunk is a 1bpp sprite. A 2bpp sprite consist of two chunks which are merged afterwards ; note that this is an endless loop which is terminated during a call to MoveToNextBufferPosition by manipulating the stack UncompressSpriteDataLoop:: ; 2556 (0:2556) ld hl, S_SPRITEBUFFER1 ld a, [W_SPRITELOADFLAGS] ; $d0a8 bit 0, a jr z, .useSpriteBuffer1 ; check which buffer to use ld hl, S_SPRITEBUFFER2 .useSpriteBuffer1 call StoreSpriteOutputPointer ld a, [W_SPRITELOADFLAGS] ; $d0a8 bit 1, a jr z, .startDecompression ; check if last iteration call ReadNextInputBit ; if last chunk, read 1-2 bit unpacking mode and a jr z, .unpackingMode0 ; 0 -> mode 0 call ReadNextInputBit ; 1 0 -> mode 1 inc a ; 1 1 -> mode 2 .unpackingMode0 ld [W_SPRITEUNPACKMODE], a .startDecompression call ReadNextInputBit and a jr z, .readRLEncodedZeros ; if first bit is 0, the input starts with zeroes, otherwise with (non-zero) input .readNextInput call ReadNextInputBit ld c, a call ReadNextInputBit sla c or c ; read next two bits into c and a jr z, .readRLEncodedZeros ; 00 -> RLEncoded zeroes following call WriteSpriteBitsToBuffer ; otherwise write input to output and repeat call MoveToNextBufferPosition jr .readNextInput .readRLEncodedZeros ld c, $0 ; number of zeroes it length encoded, the number .countConsecutiveOnesLoop ; of consecutive ones determines the number of bits the number has call ReadNextInputBit and a jr z, .countConsecutiveOnesFinished inc c jr .countConsecutiveOnesLoop .countConsecutiveOnesFinished ld a, c add a ld hl, LengthEncodingOffsetList add l ld l, a jr nc, .noCarry inc h .noCarry ld a, [hli] ; read offset that is added to the number later on ld e, a ; adding an offset of 2^length - 1 makes every integer uniquely ld d, [hl] ; representable in the length encoding and saves bits push de inc c ld e, $0 ld d, e .readNumberOfZerosLoop ; reads the next c+1 bits of input call ReadNextInputBit or e ld e, a dec c jr z, .readNumberOfZerosDone sla e rl d jr .readNumberOfZerosLoop .readNumberOfZerosDone pop hl ; add the offset add hl, de ld e, l ld d, h .writeZerosLoop ld b, e xor a ; write 00 to buffer call WriteSpriteBitsToBuffer ld e, b call MoveToNextBufferPosition dec de ld a, d and a jr nz, .continueLoop ld a, e and a .continueLoop jr nz, .writeZerosLoop jr .readNextInput ; moves output pointer to next position ; also cancels the calling function if the all output is done (by removing the return pointer from stack) ; and calls postprocessing functions according to the unpack mode MoveToNextBufferPosition:: ; 25d8 (0:25d8) ld a, [W_SPRITEHEIGHT] ld b, a ld a, [W_SPRITECURPOSY] inc a cp b jr z, .curColumnDone ld [W_SPRITECURPOSY], a ld a, [W_SPRITEOUTPUTPTR] inc a ld [W_SPRITEOUTPUTPTR], a ret nz ld a, [W_SPRITEOUTPUTPTR+1] inc a ld [W_SPRITEOUTPUTPTR+1], a ret .curColumnDone xor a ld [W_SPRITECURPOSY], a ld a, [W_SPRITEOUTPUTBITOFFSET] and a jr z, .bitOffsetsDone dec a ld [W_SPRITEOUTPUTBITOFFSET], a ld hl, W_SPRITEOUTPUTPTRCACHED ld a, [hli] ld [W_SPRITEOUTPUTPTR], a ld a, [hl] ld [W_SPRITEOUTPUTPTR+1], a ret .bitOffsetsDone ld a, $3 ld [W_SPRITEOUTPUTBITOFFSET], a ld a, [W_SPRITECURPOSX] add $8 ld [W_SPRITECURPOSX], a ld b, a ld a, [W_SPRITEWITDH] cp b jr z, .allColumnsDone ld a, [W_SPRITEOUTPUTPTR] ld l, a ld a, [W_SPRITEOUTPUTPTR+1] ld h, a inc hl jp StoreSpriteOutputPointer .allColumnsDone pop hl xor a ld [W_SPRITECURPOSX], a ld a, [W_SPRITELOADFLAGS] ; $d0a8 bit 1, a jr nz, .done ; test if there is one more sprite to go xor $1 set 1, a ld [W_SPRITELOADFLAGS], a ; $d0a8 jp UncompressSpriteDataLoop .done jp UnpackSprite ; writes 2 bits (from a) to the output buffer (pointed to from W_SPRITEOUTPUTPTR) WriteSpriteBitsToBuffer:: ; 2649 (0:2649) ld e, a ld a, [W_SPRITEOUTPUTBITOFFSET] and a jr z, .offset0 cp $2 jr c, .offset1 jr z, .offset2 rrc e ; offset 3 rrc e jr .offset0 .offset1 sla e sla e jr .offset0 .offset2 swap e .offset0 ld a, [W_SPRITEOUTPUTPTR] ld l, a ld a, [W_SPRITEOUTPUTPTR+1] ld h, a ld a, [hl] or e ld [hl], a ret ; reads next bit from input stream and returns it in a ReadNextInputBit:: ; 2670 (0:2670) ld a, [W_SPRITEINPUTBITCOUNTER] dec a jr nz, .curByteHasMoreBitsToRead call ReadNextInputByte ld [W_SPRITEINPUTCURBYTE], a ld a, $8 .curByteHasMoreBitsToRead ld [W_SPRITEINPUTBITCOUNTER], a ld a, [W_SPRITEINPUTCURBYTE] rlca ld [W_SPRITEINPUTCURBYTE], a and $1 ret ; reads next byte from input stream and returns it in a ReadNextInputByte:: ; 268b (0:268b) ld a, [W_SPRITEINPUTPTR] ld l, a ld a, [W_SPRITEINPUTPTR+1] ld h, a ld a, [hli] ld b, a ld a, l ld [W_SPRITEINPUTPTR], a ld a, h ld [W_SPRITEINPUTPTR+1], a ld a, b ret ; the nth item is 2^n - 1 LengthEncodingOffsetList:: ; 269f (0:269f) dw %0000000000000001 dw %0000000000000011 dw %0000000000000111 dw %0000000000001111 dw %0000000000011111 dw %0000000000111111 dw %0000000001111111 dw %0000000011111111 dw %0000000111111111 dw %0000001111111111 dw %0000011111111111 dw %0000111111111111 dw %0001111111111111 dw %0011111111111111 dw %0111111111111111 dw %1111111111111111 ; unpacks the sprite data depending on the unpack mode UnpackSprite:: ; 26bf (0:26bf) ld a, [W_SPRITEUNPACKMODE] cp $2 jp z, UnpackSpriteMode2 and a jp nz, XorSpriteChunks ld hl, S_SPRITEBUFFER1 call SpriteDifferentialDecode ld hl, S_SPRITEBUFFER2 ; fall through ; decodes differential encoded sprite data ; input bit value 0 preserves the current bit value and input bit value 1 toggles it (starting from initial value 0). SpriteDifferentialDecode:: ; 26d4 (0:26d4) xor a ld [W_SPRITECURPOSX], a ld [W_SPRITECURPOSY], a call StoreSpriteOutputPointer ld a, [W_SPRITEFLIPPED] and a jr z, .notFlipped ld hl, DecodeNybble0TableFlipped ld de, DecodeNybble1TableFlipped jr .storeDecodeTablesPointers .notFlipped ld hl, DecodeNybble0Table ld de, DecodeNybble1Table .storeDecodeTablesPointers ld a, l ld [W_SPRITEDECODETABLE0PTR], a ld a, h ld [W_SPRITEDECODETABLE0PTR+1], a ld a, e ld [W_SPRITEDECODETABLE1PTR], a ld a, d ld [W_SPRITEDECODETABLE1PTR+1], a ld e, $0 ; last decoded nybble, initialized to 0 .decodeNextByteLoop ld a, [W_SPRITEOUTPUTPTR] ld l, a ld a, [W_SPRITEOUTPUTPTR+1] ld h, a ld a, [hl] ld b, a swap a and $f call DifferentialDecodeNybble ; decode high nybble swap a ld d, a ld a, b and $f call DifferentialDecodeNybble ; decode low nybble or d ld b, a ld a, [W_SPRITEOUTPUTPTR] ld l, a ld a, [W_SPRITEOUTPUTPTR+1] ld h, a ld a, b ld [hl], a ; write back decoded data ld a, [W_SPRITEHEIGHT] add l ; move on to next column jr nc, .noCarry inc h .noCarry ld [W_SPRITEOUTPUTPTR], a ld a, h ld [W_SPRITEOUTPUTPTR+1], a ld a, [W_SPRITECURPOSX] add $8 ld [W_SPRITECURPOSX], a ld b, a ld a, [W_SPRITEWITDH] cp b jr nz, .decodeNextByteLoop ; test if current row is done xor a ld e, a ld [W_SPRITECURPOSX], a ld a, [W_SPRITECURPOSY] ; move on to next row inc a ld [W_SPRITECURPOSY], a ld b, a ld a, [W_SPRITEHEIGHT] cp b jr z, .done ; test if all rows finished ld a, [W_SPRITEOUTPUTPTRCACHED] ld l, a ld a, [W_SPRITEOUTPUTPTRCACHED+1] ld h, a inc hl call StoreSpriteOutputPointer jr .decodeNextByteLoop .done xor a ld [W_SPRITECURPOSY], a ret ; decodes the nybble stored in a. Last decoded data is assumed to be in e (needed to determine if initial value is 0 or 1) DifferentialDecodeNybble:: ; 276d (0:276d) srl a ; c=a%2, a/=2 ld c, $0 jr nc, .evenNumber ld c, $1 .evenNumber ld l, a ld a, [W_SPRITEFLIPPED] and a jr z, .notFlipped ; determine if initial value is 0 or one bit 3, e ; if flipped, consider MSB of last data jr .selectLookupTable .notFlipped bit 0, e ; else consider LSB .selectLookupTable ld e, l jr nz, .initialValue1 ; load the appropriate table ld a, [W_SPRITEDECODETABLE0PTR] ld l, a ld a, [W_SPRITEDECODETABLE0PTR+1] jr .tableLookup .initialValue1 ld a, [W_SPRITEDECODETABLE1PTR] ld l, a ld a, [W_SPRITEDECODETABLE1PTR+1] .tableLookup ld h, a ld a, e add l ld l, a jr nc, .noCarry inc h .noCarry ld a, [hl] bit 0, c jr nz, .selectLowNybble swap a ; select high nybble .selectLowNybble and $f ld e, a ; update last decoded data ret DecodeNybble0Table:: ; 27a7 (0:27a7) dn $0, $1 dn $3, $2 dn $7, $6 dn $4, $5 dn $f, $e dn $c, $d dn $8, $9 dn $b, $a DecodeNybble1Table:: ; 27af (0:27af) dn $f, $e dn $c, $d dn $8, $9 dn $b, $a dn $0, $1 dn $3, $2 dn $7, $6 dn $4, $5 DecodeNybble0TableFlipped:: ; 27b7 (0:27b7) dn $0, $8 dn $c, $4 dn $e, $6 dn $2, $a dn $f, $7 dn $3, $b dn $1, $9 dn $d, $5 DecodeNybble1TableFlipped:: ; 27bf (0:27bf) dn $f, $7 dn $3, $b dn $1, $9 dn $d, $5 dn $0, $8 dn $c, $4 dn $e, $6 dn $2, $a ; combines the two loaded chunks with xor (the chunk loaded second is the destination). The source chunk is differeintial decoded beforehand. XorSpriteChunks:: ; 27c7 (0:27c7) xor a ld [W_SPRITECURPOSX], a ld [W_SPRITECURPOSY], a call ResetSpriteBufferPointers ld a, [W_SPRITEOUTPUTPTR] ; points to buffer 1 or 2, depending on flags ld l, a ld a, [W_SPRITEOUTPUTPTR+1] ld h, a call SpriteDifferentialDecode ; decode buffer 1 or 2, depending on flags call ResetSpriteBufferPointers ld a, [W_SPRITEOUTPUTPTR] ; source buffer, points to buffer 1 or 2, depending on flags ld l, a ld a, [W_SPRITEOUTPUTPTR+1] ld h, a ld a, [W_SPRITEOUTPUTPTRCACHED] ; destination buffer, points to buffer 2 or 1, depending on flags ld e, a ld a, [W_SPRITEOUTPUTPTRCACHED+1] ld d, a .xorChunksLoop ld a, [W_SPRITEFLIPPED] and a jr z, .notFlipped push de ld a, [de] ld b, a swap a and $f call ReverseNybble ; if flipped reverse the nybbles in the destination buffer swap a ld c, a ld a, b and $f call ReverseNybble or c pop de ld [de], a .notFlipped ld a, [hli] ld b, a ld a, [de] xor b ld [de], a inc de ld a, [W_SPRITECURPOSY] inc a ld [W_SPRITECURPOSY], a ; go to next row ld b, a ld a, [W_SPRITEHEIGHT] cp b jr nz, .xorChunksLoop ; test if column finished xor a ld [W_SPRITECURPOSY], a ld a, [W_SPRITECURPOSX] add $8 ld [W_SPRITECURPOSX], a ; go to next column ld b, a ld a, [W_SPRITEWITDH] cp b jr nz, .xorChunksLoop ; test if all columns finished xor a ld [W_SPRITECURPOSX], a ret ; reverses the bits in the nybble given in register a ReverseNybble:: ; 2837 (0:2837) ld de, NybbleReverseTable add e ld e, a jr nc, .asm_283f inc d .asm_283f ld a, [de] ret ; resets sprite buffer pointers to buffer 1 and 2, depending on W_SPRITELOADFLAGS ResetSpriteBufferPointers:: ; 2841 (0:2841) ld a, [W_SPRITELOADFLAGS] ; $d0a8 bit 0, a jr nz, .buffer2Selected ld de, S_SPRITEBUFFER1 ld hl, S_SPRITEBUFFER2 jr .storeBufferPointers .buffer2Selected ld de, S_SPRITEBUFFER2 ld hl, S_SPRITEBUFFER1 .storeBufferPointers ld a, l ld [W_SPRITEOUTPUTPTR], a ld a, h ld [W_SPRITEOUTPUTPTR+1], a ld a, e ld [W_SPRITEOUTPUTPTRCACHED], a ld a, d ld [W_SPRITEOUTPUTPTRCACHED+1], a ret ; maps each nybble to its reverse NybbleReverseTable:: ; 2867 (0:2867) db $0, $8, $4, $c, $2, $a, $6 ,$e, $1, $9, $5, $d, $3, $b, $7 ,$f ; combines the two loaded chunks with xor (the chunk loaded second is the destination). Both chunks are differeintial decoded beforehand. UnpackSpriteMode2:: ; 2877 (0:2877) call ResetSpriteBufferPointers ld a, [W_SPRITEFLIPPED] push af xor a ld [W_SPRITEFLIPPED], a ; temporarily clear flipped flag for decoding the destination chunk ld a, [W_SPRITEOUTPUTPTRCACHED] ld l, a ld a, [W_SPRITEOUTPUTPTRCACHED+1] ld h, a call SpriteDifferentialDecode call ResetSpriteBufferPointers pop af ld [W_SPRITEFLIPPED], a jp XorSpriteChunks ; stores hl into the output pointers StoreSpriteOutputPointer:: ; 2897 (0:2897) ld a, l ld [W_SPRITEOUTPUTPTR], a ld [W_SPRITEOUTPUTPTRCACHED], a ld a, h ld [W_SPRITEOUTPUTPTR+1], a ld [W_SPRITEOUTPUTPTRCACHED+1], a ret ResetPlayerSpriteData:: ; 28a6 (0:28a6) ld hl, wSpriteStateData1 call ResetPlayerSpriteData_ClearSpriteData ld hl, wSpriteStateData2 call ResetPlayerSpriteData_ClearSpriteData ld a, $1 ld [wSpriteStateData1], a ld [$c20e], a ld hl, $c104 ld [hl], $3c ; set Y screen pos inc hl inc hl ld [hl], $40 ; set X screen pos ret ; overwrites sprite data with zeroes ResetPlayerSpriteData_ClearSpriteData:: ; 28c4 (0:28c4) ld bc, $10 xor a jp FillMemory Func_28cb:: ; 28cb (0:28cb) ld a, [wMusicHeaderPointer] and a jr nz, .asm_28dc ld a, [$d72c] bit 1, a ret nz ld a, $77 ld [$FF00+$24], a ret .asm_28dc ld a, [$cfc9] and a jr z, .asm_28e7 dec a ld [$cfc9], a ret .asm_28e7 ld a, [$cfc8] ld [$cfc9], a ld a, [$FF00+$24] and a jr z, .asm_2903 ld b, a and $f dec a ld c, a ld a, b and $f0 swap a dec a swap a or c ld [$FF00+$24], a ret .asm_2903 ld a, [wMusicHeaderPointer] ld b, a xor a ld [wMusicHeaderPointer], a ld a, $ff ld [$c0ee], a call PlaySound ld a, [$c0f0] ld [$c0ef], a ld a, b ld [$c0ee], a jp PlaySound ; this function is used to display sign messages, sprite dialog, etc. ; INPUT: [$ff8c] = sprite ID or text ID DisplayTextID:: ; 2920 (0:2920) ld a,[H_LOADEDROMBANK] push af ld b,BANK(DisplayTextIDInit) ld hl,DisplayTextIDInit ; initialization call Bankswitch ld hl,$cf11 bit 0,[hl] res 0,[hl] jr nz,.skipSwitchToMapBank ld a,[W_CURMAP] call SwitchToMapRomBank .skipSwitchToMapBank ld a,30 ; half a second ld [H_FRAMECOUNTER],a ; used as joypad poll timer ld hl,W_MAPTEXTPTR ld a,[hli] ld h,[hl] ld l,a ; hl = map text pointer ld d,$00 ld a,[$ff8c] ; text ID ld [$cf13],a and a jp z,DisplayStartMenu cp a,$d3 ; safari game over jp z,DisplaySafariGameOverText cp a,$d0 ; fainted jp z,DisplayPokemonFaintedText cp a,$d1 ; blacked out jp z,DisplayPlayerBlackedOutText cp a,$d2 ; repel wore off jp z,DisplayRepelWoreOffText ld a,[$d4e1] ; number of sprites ld e,a ld a,[$ff8c] ; sprite ID cp e jr z,.spriteHandling jr nc,.skipSpriteHandling .spriteHandling ; get the text ID of the sprite push hl push de push bc ld b, BANK(Func_13074) ld hl, Func_13074 call Bankswitch ; update the graphics of the sprite the player is talking to (to face the right direction) pop bc pop de ld hl,W_MAPSPRITEDATA ; NPC text entries ld a,[$ff8c] dec a add a add l ld l,a jr nc,.noCarry inc h .noCarry inc hl ld a,[hl] ; a = text ID of the sprite pop hl .skipSpriteHandling ; look up the address of the text in the map's text entries dec a ld e,a sla e add hl,de ld a,[hli] ld h,[hl] ld l,a ; hl = address of the text ld a,[hl] ; a = first byte of text ; check first byte of text for special cases cp a,$fe ; Pokemart NPC jp z,DisplayPokemartDialogue cp a,$ff ; Pokemon Center NPC jp z,DisplayPokemonCenterDialogue cp a,$fc ; Item Storage PC jp z,FuncTX_ItemStoragePC cp a,$fd ; Bill's PC jp z,FuncTX_BillsPC cp a,$f9 ; Pokemon Center PC jp z,FuncTX_PokemonCenterPC cp a,$f5 ; Vending Machine jr nz,.notVendingMachine ld b,BANK(VendingMachineMenu) ld hl,VendingMachineMenu call Bankswitch ; jump banks to vending machine routine jr AfterDisplayingTextID .notVendingMachine cp a,$f7 ; slot machine jp z,FuncTX_SlotMachine cp a,$f6 ; cable connection NPC in Pokemon Center jr nz,.notSpecialCase ld hl, CableClubNPC ld b, BANK(CableClubNPC) call Bankswitch jr AfterDisplayingTextID .notSpecialCase call Func_3c59 ; display the text ld a,[$cc3c] and a jr nz,HoldTextDisplayOpen AfterDisplayingTextID:: ; 29d6 (0:29d6) ld a,[$cc47] and a jr nz,HoldTextDisplayOpen call WaitForTextScrollButtonPress ; wait for a button press after displaying all the text ; loop to hold the dialogue box open as long as the player keeps holding down the A button HoldTextDisplayOpen:: ; 29df (0:29df) call GetJoypadState ld a,[H_CURRENTPRESSEDBUTTONS] bit 0,a ; is the A button being pressed? jr nz,HoldTextDisplayOpen CloseTextDisplay:: ; 29e8 (0:29e8) ld a,[W_CURMAP] call SwitchToMapRomBank ld a,$90 ld [$ffb0],a ; move the window off the screen call DelayFrame call LoadGBPal xor a ld [H_AUTOBGTRANSFERENABLED],a ; disable continuous WRAM to VRAM transfer each V-blank ; loop to make sprites face the directions they originally faced before the dialogue ld hl,$c219 ld c,$0f ld de,$0010 .restoreSpriteFacingDirectionLoop ld a,[hl] dec h ld [hl],a inc h add hl,de dec c jr nz,.restoreSpriteFacingDirectionLoop ld a,BANK(InitMapSprites) ld [H_LOADEDROMBANK],a ld [$2000],a call InitMapSprites ; reload sprite tile pattern data (since it was partially overwritten by text tile patterns) ld hl,$cfc4 res 0,[hl] ld a,[$d732] bit 3,a call z,LoadPlayerSpriteGraphics call LoadCurrentMapView pop af ld [H_LOADEDROMBANK],a ld [$2000],a jp UpdateSprites ; move sprites DisplayPokemartDialogue:: ; 2a2e (0:2a2e) push hl ld hl,PokemartGreetingText call PrintText pop hl inc hl call LoadItemList ld a,$02 ld [$cf94],a ; selects between subtypes of menus ld a,[H_LOADEDROMBANK] push af ld a,Bank(DisplayPokemartDialogue_) ld [H_LOADEDROMBANK],a ld [$2000],a call DisplayPokemartDialogue_ pop af ld [H_LOADEDROMBANK],a ld [$2000],a jp AfterDisplayingTextID PokemartGreetingText:: ; 2a55 (0:2a55) TX_FAR _PokemartGreetingText db "@" LoadItemList:: ; 2a5a (0:2a5a) ld a,$01 ld [$cfcb],a ld a,h ld [$d128],a ld a,l ld [$d129],a ld de,$cf7b .loop ld a,[hli] ld [de],a inc de cp a,$ff jr nz,.loop ret DisplayPokemonCenterDialogue:: ; 2a72 (0:2a72) xor a ld [$ff8b],a ld [$ff8c],a ld [$ff8d],a inc hl ld a,[H_LOADEDROMBANK] push af ld a,Bank(DisplayPokemonCenterDialogue_) ld [H_LOADEDROMBANK],a ld [$2000],a call DisplayPokemonCenterDialogue_ pop af ld [H_LOADEDROMBANK],a ld [$2000],a jp AfterDisplayingTextID DisplaySafariGameOverText:: ; 2a90 (0:2a90) ld hl, Func_1e9ed ld b, BANK(Func_1e9ed) call Bankswitch jp AfterDisplayingTextID DisplayPokemonFaintedText:: ; 2a9b (0:2a9b) ld hl,PokemonFaintedText call PrintText jp AfterDisplayingTextID PokemonFaintedText:: ; 2aa4 (0:2aa4) TX_FAR _PokemonFaintedText db "@" DisplayPlayerBlackedOutText:: ; 2aa9 (0:2aa9) ld hl,PlayerBlackedOutText call PrintText ld a,[$d732] res 5,a ld [$d732],a jp HoldTextDisplayOpen PlayerBlackedOutText:: ; 2aba (0:2aba) TX_FAR _PlayerBlackedOutText db "@" DisplayRepelWoreOffText:: ; 2abf (0:2abf) ld hl,RepelWoreOffText call PrintText jp AfterDisplayingTextID RepelWoreOffText:: ; 2ac8 (0:2ac8) TX_FAR _RepelWoreOffText db "@" DisplayStartMenu:: ; 2acd (0:2acd) ld a,$04 ; hardcoded Bank, not sure what's it refers to ld [H_LOADEDROMBANK],a ld [$2000],a ; ROM bank 4 ld a,[$d700] ; walking/biking/surfing ld [$d11a],a ld a, (SFX_02_3f - $4000) / 3 ; Start menu sound call PlaySound RedisplayStartMenu:: ; 2adf (0:2adf) ld b,BANK(DrawStartMenu) ld hl,DrawStartMenu call Bankswitch ld b, BANK(Func_c52f) ld hl, Func_c52f call Bankswitch ; print Safari Zone info, if in Safari Zone call UpdateSprites ; move sprites .loop call HandleMenuInput ld b,a .checkIfUpPressed bit 6,a ; was Up pressed? jr z,.checkIfDownPressed ld a,[wCurrentMenuItem] ; menu selection and a jr nz,.loop ld a,[wLastMenuItem] and a jr nz,.loop ; if the player pressed tried to go past the top item, wrap around to the bottom ld a,[$d74b] bit 5,a ; does the player have the pokedex? ld a,6 ; there are 7 menu items with the pokedex, so the max index is 6 jr nz,.wrapMenuItemId dec a ; there are only 6 menu items without the pokedex .wrapMenuItemId ld [wCurrentMenuItem],a call EraseMenuCursor jr .loop .checkIfDownPressed bit 7,a jr z,.buttonPressed ; if the player pressed tried to go past the bottom item, wrap around to the top ld a,[$d74b] bit 5,a ; does the player have the pokedex? ld a,[wCurrentMenuItem] ld c,7 ; there are 7 menu items with the pokedex jr nz,.checkIfPastBottom dec c ; there are only 6 menu items without the pokedex .checkIfPastBottom cp c jr nz,.loop ; the player went past the bottom, so wrap to the top xor a ld [wCurrentMenuItem],a call EraseMenuCursor jr .loop .buttonPressed ; A, B, or Start button pressed call PlaceUnfilledArrowMenuCursor ld a,[wCurrentMenuItem] ld [$cc2d],a ; save current menu item ID ld a,b and a,%00001010 ; was the Start button or B button pressed? jp nz,CloseStartMenu call SaveScreenTilesToBuffer2 ; copy background from wTileMap to wTileMapBackup2 ld a,[$d74b] bit 5,a ; does the player have the pokedex? ld a,[wCurrentMenuItem] jr nz,.displayMenuItem inc a ; adjust position to account for missing pokedex menu item .displayMenuItem cp a,0 jp z,StartMenu_Pokedex cp a,1 jp z,StartMenu_Pokemon cp a,2 jp z,StartMenu_Item cp a,3 jp z,StartMenu_TrainerInfo cp a,4 jp z,StartMenu_SaveReset cp a,5 jp z,StartMenu_Option ; EXIT falls through to here CloseStartMenu:: ; 2b70 (0:2b70) call GetJoypadState ld a,[H_NEWLYPRESSEDBUTTONS] bit 0,a ; was A button newly pressed? jr nz,CloseStartMenu call LoadTextBoxTilePatterns jp CloseTextDisplay ; function to count how many bits are set in a string of bytes ; INPUT: ; hl = address of string of bytes ; b = length of string of bytes ; OUTPUT: ; [$D11E] = number of set bits CountSetBits:: ; 2b7f (0:2b7f) ld c,0 .loop ld a,[hli] ld e,a ld d,8 .innerLoop ; count how many bits are set in the current byte srl e ld a,0 adc c ld c,a dec d jr nz,.innerLoop dec b jr nz,.loop ld a,c ld [$d11e],a ; store number of set bits ret ; subtracts the amount the player paid from their money ; sets carry flag if there is enough money and unsets carry flag if not SubtractAmountPaidFromMoney:: ; 2b96 (0:2b96) ld b,BANK(SubtractAmountPaidFromMoney_) ld hl,SubtractAmountPaidFromMoney_ jp Bankswitch ; adds the amount the player sold to their money AddAmountSoldToMoney:: ; 2b9e (0:2b9e) ld de,wPlayerMoney + 2 ld hl,$ffa1 ; total price of items ld c,3 ; length of money in bytes ld a,$0b call Predef ; add total price to money ld a,$13 ld [$d125],a call DisplayTextBoxID ; redraw money text box ld a, (SFX_02_5a - $4000) / 3 call PlaySoundWaitForCurrent ; play sound jp WaitForSoundToFinish ; wait until sound is done playing ; function to remove an item (in varying quantities) from the player's bag or PC box ; INPUT: ; HL = address of inventory (either wNumBagItems or wNumBoxItems) ; [$CF92] = index (within the inventory) of the item to remove ; [$CF96] = quantity to remove RemoveItemFromInventory:: ; 2bbb (0:2bbb) ld a,[H_LOADEDROMBANK] push af ld a,BANK(RemoveItemFromInventory_) ld [H_LOADEDROMBANK],a ld [$2000],a call RemoveItemFromInventory_ pop af ld [H_LOADEDROMBANK],a ld [$2000],a ret ; function to add an item (in varying quantities) to the player's bag or PC box ; INPUT: ; HL = address of inventory (either wNumBagItems or wNumBoxItems) ; [$CF91] = item ID ; [$CF96] = item quantity ; sets carry flag if successful, unsets carry flag if unsuccessful AddItemToInventory:: ; 2bcf (0:2bcf) push bc ld a,[H_LOADEDROMBANK] push af ld a,BANK(AddItemToInventory_) ld [H_LOADEDROMBANK],a ld [$2000],a call AddItemToInventory_ pop bc ld a,b ld [H_LOADEDROMBANK],a ld [$2000],a pop bc ret ; INPUT: ; [wListMenuID] = list menu ID ; [$cf8b] = address of the list (2 bytes) DisplayListMenuID:: ; 2be6 (0:2be6) xor a ld [H_AUTOBGTRANSFERENABLED],a ; disable auto-transfer ld a,1 ld [$ffb7],a ; joypad state update flag ld a,[W_BATTLETYPE] and a ; is it the Old Man battle? jr nz,.specialBattleType ld a,$01 ; hardcoded bank jr .bankswitch .specialBattleType ; Old Man battle ld a, Bank(OldManItemList) .bankswitch call BankswitchHome ld hl,$d730 set 6,[hl] ; turn off letter printing delay xor a ld [$cc35],a ; 0 means no item is currently being swapped ld [$d12a],a ld a,[$cf8b] ld l,a ld a,[$cf8c] ld h,a ; hl = address of the list ld a,[hl] ld [$d12a],a ; [$d12a] = number of list entries ld a,$0d ; list menu text box ID ld [$d125],a call DisplayTextBoxID ; draw the menu text box call UpdateSprites ; move sprites FuncCoord 4,2 ; coordinates of upper left corner of menu text box ld hl,Coord ld de,$090e ; height and width of menu text box ld a,[wListMenuID] and a ; is it a PC pokemon list? jr nz,.skipMovingSprites call UpdateSprites ; move sprites .skipMovingSprites ld a,1 ; max menu item ID is 1 if the list has less than 2 entries ld [$cc37],a ld a,[$d12a] cp a,2 ; does the list have less than 2 entries? jr c,.setMenuVariables ld a,2 ; max menu item ID is 2 if the list has at least 2 entries .setMenuVariables ld [wMaxMenuItem],a ld a,4 ld [wTopMenuItemY],a ld a,5 ld [wTopMenuItemX],a ld a,%00000111 ; A button, B button, Select button ld [wMenuWatchedKeys],a ld c,10 call DelayFrames DisplayListMenuIDLoop:: ; 2c53 (0:2c53) xor a ld [H_AUTOBGTRANSFERENABLED],a ; disable transfer call PrintListMenuEntries ld a,1 ld [H_AUTOBGTRANSFERENABLED],a ; enable transfer call Delay3 ld a,[W_BATTLETYPE] and a ; is it the Old Man battle? jr z,.notOldManBattle .oldManBattle ld a,"▶" FuncCoord 5,4 ld [Coord],a ; place menu cursor in front of first menu entry ld c,80 call DelayFrames xor a ld [wCurrentMenuItem],a ld hl,Coord ld a,l ld [wMenuCursorLocation],a ld a,h ld [wMenuCursorLocation + 1],a jr .buttonAPressed .notOldManBattle call LoadGBPal call HandleMenuInput push af call PlaceMenuCursor pop af bit 0,a ; was the A button pressed? jp z,.checkOtherKeys .buttonAPressed ld a,[wCurrentMenuItem] call PlaceUnfilledArrowMenuCursor ld a,$01 ld [$d12e],a ld [$d12d],a xor a ld [$cc37],a ld a,[wCurrentMenuItem] ld c,a ld a,[wListScrollOffset] add c ld c,a ld a,[$d12a] ; number of list entries and a ; is the list empty? jp z,ExitListMenu ; if so, exit the menu dec a cp c ; did the player select Cancel? jp c,ExitListMenu ; if so, exit the menu ld a,c ld [wWhichPokemon],a ld a,[wListMenuID] cp a,ITEMLISTMENU jr nz,.skipMultiplying ; if it's an item menu sla c ; item entries are 2 bytes long, so multiply by 2 .skipMultiplying ld a,[$cf8b] ld l,a ld a,[$cf8c] ld h,a inc hl ; hl = beginning of list entries ld b,0 add hl,bc ld a,[hl] ld [$cf91],a ld a,[wListMenuID] and a ; is it a PC pokemon list? jr z,.pokemonList push hl call GetItemPrice pop hl ld a,[wListMenuID] cp a,ITEMLISTMENU jr nz,.skipGettingQuantity ; if it's an item menu inc hl ld a,[hl] ; a = item quantity ld [$cf97],a .skipGettingQuantity ld a,[$cf91] ld [$d0b5],a ld a,$01 ld [$d0b7],a call GetName jr .storeChosenEntry .pokemonList ld hl,W_NUMINPARTY ld a,[$cf8b] cp l ; is it a list of party pokemon or box pokemon? ld hl,W_PARTYMON1NAME jr z,.getPokemonName ld hl, W_BOXMON1NAME ; box pokemon names .getPokemonName ld a,[wWhichPokemon] call GetPartyMonName .storeChosenEntry ; store the menu entry that the player chose and return ld de,$cd6d call CopyStringToCF4B ; copy name to $cf4b ld a,$01 ld [$d12e],a ld a,[wCurrentMenuItem] ld [$d12d],a xor a ld [$ffb7],a ; joypad state update flag ld hl,$d730 res 6,[hl] ; turn on letter printing delay jp BankswitchBack .checkOtherKeys ; check B, SELECT, Up, and Down keys bit 1,a ; was the B button pressed? jp nz,ExitListMenu ; if so, exit the menu bit 2,a ; was the select button pressed? jp nz,HandleItemListSwapping ; if so, allow the player to swap menu entries ld b,a bit 7,b ; was Down pressed? ld hl,wListScrollOffset jr z,.upPressed .downPressed ld a,[hl] add a,3 ld b,a ld a,[$d12a] ; number of list entries cp b ; will going down scroll past the Cancel button? jp c,DisplayListMenuIDLoop inc [hl] ; if not, go down jp DisplayListMenuIDLoop .upPressed ld a,[hl] and a jp z,DisplayListMenuIDLoop dec [hl] jp DisplayListMenuIDLoop DisplayChooseQuantityMenu:: ; 2d57 (0:2d57) ; text box dimensions/coordinates for just quantity FuncCoord 15,9 ld hl,Coord ld b,1 ; height ld c,3 ; width ld a,[wListMenuID] cp a,PRICEDITEMLISTMENU jr nz,.drawTextBox ; text box dimensions/coordinates for quantity and price FuncCoord 7,9 ld hl,Coord ld b,1 ; height ld c,11 ; width .drawTextBox call TextBoxBorder FuncCoord 16,10 ld hl,Coord ld a,[wListMenuID] cp a,PRICEDITEMLISTMENU jr nz,.printInitialQuantity FuncCoord 8,10 ld hl,Coord .printInitialQuantity ld de,InitialQuantityText call PlaceString xor a ld [$cf96],a ; initialize current quantity to 0 jp .incrementQuantity .waitForKeyPressLoop call GetJoypadStateLowSensitivity ld a,[H_NEWLYPRESSEDBUTTONS] ; newly pressed buttons bit 0,a ; was the A button pressed? jp nz,.buttonAPressed bit 1,a ; was the B button pressed? jp nz,.buttonBPressed bit 6,a ; was Up pressed? jr nz,.incrementQuantity bit 7,a ; was Down pressed? jr nz,.decrementQuantity jr .waitForKeyPressLoop .incrementQuantity ld a,[$cf97] ; max quantity inc a ld b,a ld hl,$cf96 ; current quantity inc [hl] ld a,[hl] cp b jr nz,.handleNewQuantity ; wrap to 1 if the player goes above the max quantity ld a,1 ld [hl],a jr .handleNewQuantity .decrementQuantity ld hl,$cf96 ; current quantity dec [hl] jr nz,.handleNewQuantity ; wrap to the max quantity if the player goes below 1 ld a,[$cf97] ; max quantity ld [hl],a .handleNewQuantity FuncCoord 17,10 ld hl,Coord ld a,[wListMenuID] cp a,PRICEDITEMLISTMENU jr nz,.printQuantity .printPrice ld c,$03 ld a,[$cf96] ld b,a ld hl,$ff9f ; total price ; initialize total price to 0 xor a ld [hli],a ld [hli],a ld [hl],a .addLoop ; loop to multiply the individual price by the quantity to get the total price ld de,$ffa1 ld hl,$ff8d push bc ld a,$0b call Predef ; add the individual price to the current sum pop bc dec b jr nz,.addLoop ld a,[$ff8e] and a ; should the price be halved (for selling items)? jr z,.skipHalvingPrice xor a ld [$ffa2],a ld [$ffa3],a ld a,$02 ld [$ffa4],a ld a,$0d call Predef ; halves the price ; store the halved price ld a,[$ffa2] ld [$ff9f],a ld a,[$ffa3] ld [$ffa0],a ld a,[$ffa4] ld [$ffa1],a .skipHalvingPrice FuncCoord 12,10 ld hl,Coord ld de,SpacesBetweenQuantityAndPriceText call PlaceString ld de,$ff9f ; total price ld c,$a3 call PrintBCDNumber FuncCoord 9,10 ld hl,Coord .printQuantity ld de,$cf96 ; current quantity ld bc,$8102 ; print leading zeroes, 1 byte, 2 digits call PrintNumber jp .waitForKeyPressLoop .buttonAPressed ; the player chose to make the transaction xor a ld [$cc35],a ; 0 means no item is currently being swapped ret .buttonBPressed ; the player chose to cancel the transaction xor a ld [$cc35],a ; 0 means no item is currently being swapped ld a,$ff ret InitialQuantityText:: ; 2e30 (0:2e30) db "×01@" SpacesBetweenQuantityAndPriceText:: ; 2e34 (0:2e34) db " @" ExitListMenu:: ; 2e3b (0:2e3b) ld a,[wCurrentMenuItem] ld [$d12d],a ld a,$02 ld [$d12e],a ld [$cc37],a xor a ld [$ffb7],a ld hl,$d730 res 6,[hl] call BankswitchBack xor a ld [$cc35],a ; 0 means no item is currently being swapped scf ret PrintListMenuEntries:: ; 2e5a (0:2e5a) FuncCoord 5, 3 ; $c3e1 ld hl,Coord ld b,$09 ld c,$0e call ClearScreenArea ld a,[$cf8b] ld e,a ld a,[$cf8c] ld d,a inc de ; de = beginning of list entries ld a,[wListScrollOffset] ld c,a ld a,[wListMenuID] cp a,ITEMLISTMENU ld a,c jr nz,.skipMultiplying ; if it's an item menu ; item entries are 2 bytes long, so multiply by 2 sla a sla c .skipMultiplying add e ld e,a jr nc,.noCarry inc d .noCarry FuncCoord 6,4 ; coordinates of first list entry name ld hl,Coord ld b,4 ; print 4 names .loop ld a,b ld [wWhichPokemon],a ld a,[de] ld [$d11e],a cp a,$ff jp z,.printCancelMenuItem push bc push de push hl push hl push de ld a,[wListMenuID] and a jr z,.pokemonPCMenu cp a,$01 jr z,.movesMenu .itemMenu call GetItemName jr .placeNameString .pokemonPCMenu push hl ld hl,W_NUMINPARTY ld a,[$cf8b] cp l ; is it a list of party pokemon or box pokemon? ld hl,W_PARTYMON1NAME jr z,.getPokemonName ld hl, W_BOXMON1NAME ; box pokemon names .getPokemonName ld a,[wWhichPokemon] ld b,a ld a,4 sub b ld b,a ld a,[wListScrollOffset] add b call GetPartyMonName pop hl jr .placeNameString .movesMenu call GetMoveName .placeNameString call PlaceString pop de pop hl ld a,[$cf93] and a ; should prices be printed? jr z,.skipPrintingItemPrice .printItemPrice push hl ld a,[de] ld de,ItemPrices ld [$cf91],a call GetItemPrice ; get price pop hl ld bc,20 + 5 ; 1 row down and 5 columns right add hl,bc ld c,$a3 ; no leading zeroes, right-aligned, print currency symbol, 3 bytes call PrintBCDNumber .skipPrintingItemPrice ld a,[wListMenuID] and a jr nz,.skipPrintingPokemonLevel .printPokemonLevel ld a,[$d11e] push af push hl ld hl,W_NUMINPARTY ld a,[$cf8b] cp l ; is it a list of party pokemon or box pokemon? ld a,$00 jr z,.next ld a,$02 .next ld [$cc49],a ld hl,wWhichPokemon ld a,[hl] ld b,a ld a,$04 sub b ld b,a ld a,[wListScrollOffset] add b ld [hl],a call LoadMonData ; load pokemon info ld a,[$cc49] and a ; is it a list of party pokemon or box pokemon? jr z,.skipCopyingLevel .copyLevel ld a,[$cf9b] ld [$cfb9],a .skipCopyingLevel pop hl ld bc,$001c add hl,bc call PrintLevel ; print level pop af ld [$d11e],a .skipPrintingPokemonLevel pop hl pop de inc de ld a,[wListMenuID] cp a,ITEMLISTMENU jr nz,.nextListEntry .printItemQuantity ld a,[$d11e] ld [$cf91],a call IsKeyItem ; check if item is unsellable ld a,[$d124] and a ; is the item unsellable? jr nz,.skipPrintingItemQuantity ; if so, don't print the quantity push hl ld bc,20 + 8 ; 1 row down and 8 columns right add hl,bc ld a,"×" ldi [hl],a ld a,[$d11e] push af ld a,[de] ld [$cf97],a push de ld de,$d11e ld [de],a ld bc,$0102 call PrintNumber pop de pop af ld [$d11e],a pop hl .skipPrintingItemQuantity inc de pop bc inc c push bc inc c ld a,[$cc35] ; ID of item chosen for swapping (counts from 1) and a ; is an item being swapped? jr z,.nextListEntry sla a cp c ; is it this item? jr nz,.nextListEntry dec hl ld a,$ec ; unfilled right arrow menu cursor to indicate an item being swapped ld [hli],a .nextListEntry ld bc,2 * 20 ; 2 rows add hl,bc pop bc inc c dec b jp nz,.loop ld bc,-8 add hl,bc ld a,$ee ; down arrow ld [hl],a ret .printCancelMenuItem ld de,ListMenuCancelText jp PlaceString ListMenuCancelText:: ; 2f97 (0:2f97) db "CANCEL@" GetMonName:: ; 2f9e (0:2f9e) push hl ld a,[H_LOADEDROMBANK] push af ld a,BANK(MonsterNames) ; 07 ld [H_LOADEDROMBANK],a ld [$2000],a ld a,[$d11e] dec a ld hl,MonsterNames ; 421E ld c,10 ld b,0 call AddNTimes ld de,$cd6d push de ld bc,10 call CopyData ld hl,$cd77 ld [hl], "@" pop de pop af ld [H_LOADEDROMBANK],a ld [$2000],a pop hl ret GetItemName:: ; 2fcf (0:2fcf) ; given an item ID at [$D11E], store the name of the item into a string ; starting at $CD6D push hl push bc ld a,[$D11E] cp HM_01 ; is this a TM/HM? jr nc,.Machine ld [$D0B5],a ld a,ITEM_NAME ld [W_LISTTYPE],a ld a,BANK(ItemNames) ld [$D0B7],a call GetName jr .Finish .Machine call GetMachineName .Finish ld de,$CD6D ; pointer to where item name is stored in RAM pop bc pop hl ret GetMachineName:: ; 2ff3 (0:2ff3) ; copies the name of the TM/HM in [$D11E] to $CD6D push hl push de push bc ld a,[$D11E] push af cp TM_01 ; is this a TM? [not HM] jr nc,.WriteTM ; if HM, then write "HM" and add 5 to the item ID, so we can reuse the ; TM printing code add 5 ld [$D11E],a ld hl,HiddenPrefix ; points to "HM" ld bc,2 jr .WriteMachinePrefix .WriteTM ld hl,TechnicalPrefix ; points to "TM" ld bc,2 .WriteMachinePrefix ld de,$CD6D call CopyData ; now get the machine number and convert it to text ld a,[$D11E] sub TM_01 - 1 ld b,$F6 ; "0" .FirstDigit sub 10 jr c,.SecondDigit inc b jr .FirstDigit .SecondDigit add 10 push af ld a,b ld [de],a inc de pop af ld b,$F6 ; "0" add b ld [de],a inc de ld a,"@" ld [de],a pop af ld [$D11E],a pop bc pop de pop hl ret TechnicalPrefix:: ; 303c (0:303c) db "TM" HiddenPrefix:: ; 303e (0:303e) db "HM" ; sets carry if item is HM, clears carry if item is not HM ; Input: a = item ID IsItemHM:: ; 3040 (0:3040) cp a,HM_01 jr c,.notHM cp a,TM_01 ret .notHM and a ret ; sets carry if move is an HM, clears carry if move is not an HM ; Input: a = move ID IsMoveHM:: ; 3049 (0:3049) ld hl,HMMoves ld de,1 jp IsInArray HMMoves:: ; 3052 (0:3052) db CUT,FLY,SURF,STRENGTH,FLASH db $ff ; terminator GetMoveName:: ; 3058 (0:3058) push hl ld a,MOVE_NAME ld [W_LISTTYPE],a ld a,[$d11e] ld [$d0b5],a ld a,BANK(MoveNames) ld [$d0b7],a call GetName ld de,$cd6d ; pointer to where move name is stored in RAM pop hl ret ; reloads text box tile patterns, current map view, and tileset tile patterns ReloadMapData:: ; 3071 (0:3071) ld a,[H_LOADEDROMBANK] push af ld a,[W_CURMAP] call SwitchToMapRomBank call DisableLCD call LoadTextBoxTilePatterns call LoadCurrentMapView call LoadTilesetTilePatternData call EnableLCD pop af ld [H_LOADEDROMBANK],a ld [$2000],a ret ; reloads tileset tile patterns ReloadTilesetTilePatterns:: ; 3090 (0:3090) ld a,[H_LOADEDROMBANK] push af ld a,[W_CURMAP] call SwitchToMapRomBank call DisableLCD call LoadTilesetTilePatternData call EnableLCD pop af ld [H_LOADEDROMBANK],a ld [$2000],a ret ; shows the town map and lets the player choose a destination to fly to ChooseFlyDestination:: ; 30a9 (0:30a9) ld hl,$d72e res 4,[hl] ld b, BANK(Func_70f90) ld hl, Func_70f90 jp Bankswitch ; causes the text box to close waithout waiting for a button press after displaying text DisableWaitingAfterTextDisplay:: ; 30b6 (0:30b6) ld a,$01 ld [$cc3c],a ret ; uses an item ; UseItem is used with dummy items to perform certain other functions as well ; INPUT: ; [$cf91] = item ID ; OUTPUT: ; [$cd6a] = success ; 00: unsucessful ; 01: successful ; 02: not able to be used right now, no extra menu displayed (only certain items use this) UseItem:: ; 30bc (0:30bc) ld b,BANK(UseItem_) ld hl,UseItem_ jp Bankswitch ; confirms the item toss and then tosses the item ; INPUT: ; hl = address of inventory (either wNumBagItems or wNumBoxItems) ; [$cf91] = item ID ; [$cf92] = index of item within inventory ; [$cf96] = quantity to toss ; OUTPUT: ; clears carry flag if the item is tossed, sets carry flag if not TossItem:: ; 30c4 (0:30c4) ld a,[H_LOADEDROMBANK] push af ld a,BANK(TossItem_) ld [H_LOADEDROMBANK],a ld [$2000],a call TossItem_ pop de ld a,d ld [H_LOADEDROMBANK],a ld [$2000],a ret ; checks if an item is a key item ; INPUT: ; [$cf91] = item ID ; OUTPUT: ; [$d124] = result ; 00: item is not key item ; 01: item is key item IsKeyItem:: ; 30d9 (0:30d9) push hl push de push bc ld b,BANK(IsKeyItem_) ld hl,IsKeyItem_ call Bankswitch pop bc pop de pop hl ret ; function to draw various text boxes ; INPUT: ; [$D125] = text box ID DisplayTextBoxID:: ; 30e8 (0:30e8) ld a,[H_LOADEDROMBANK] push af ld a,BANK(DisplayTextBoxID_) ld [H_LOADEDROMBANK],a ld [$2000],a call DisplayTextBoxID_ pop bc ld a,b ld [H_LOADEDROMBANK],a ld [$2000],a ret Func_30fd:: ; 30fd (0:30fd) ld a, [$cc57] and a ret nz ld a, [$d736] bit 1, a ret nz ld a, [$d730] and $80 ret Func_310e:: ; 310e (0:310e) ld hl, $d736 bit 0, [hl] res 0, [hl] jr nz, .asm_3146 ld a, [$cc57] and a ret z dec a add a ld d, $0 ld e, a ld hl, .pointerTable_3140 add hl, de ld a, [hli] ld h, [hl] ld l, a ld a, [H_LOADEDROMBANK] push af ld a, [$cc58] ld [H_LOADEDROMBANK], a ld [$2000], a ld a, [$cf10] call CallFunctionInTable pop af ld [H_LOADEDROMBANK], a ld [$2000], a ret .pointerTable_3140 dw PointerTable_1a442 dw PointerTable_1a510 dw PointerTable_1a57d .asm_3146 ld b, BANK(Func_1a3e0) ld hl, Func_1a3e0 jp Bankswitch Func_314e:: ; 314e (0:314e) ld b, BANK(Func_1a41d) ld hl, Func_1a41d jp Bankswitch Func_3156:: ; 3156 (0:3156) ret ; stores hl in [W_TRAINERHEADERPTR] StoreTrainerHeaderPointer:: ; 3157 (0:3157) ld a, h ld [W_TRAINERHEADERPTR], a ld a, l ld [W_TRAINERHEADERPTR+1], a ret ; executes the current map script from the function pointer array provided in hl. ; a: map script index to execute (unless overridden by [$d733] bit 4) ExecuteCurMapScriptInTable:: ; 3160 (0:3160) push af push de call StoreTrainerHeaderPointer pop hl pop af push hl ld hl, W_FLAGS_D733 bit 4, [hl] res 4, [hl] jr z, .useProvidedIndex ; test if map script index was overridden manually ld a, [W_CURMAPSCRIPT] .useProvidedIndex pop hl ld [W_CURMAPSCRIPT], a call CallFunctionInTable ld a, [W_CURMAPSCRIPT] ret LoadGymLeaderAndCityName:: ; 317f (0:317f) push de ld de, wGymCityName ld bc, $11 call CopyData ; load city name pop hl ld de, wGymLeaderName ld bc, $b jp CopyData ; load gym leader name ; reads specific information from trainer header (pointed to at W_TRAINERHEADERPTR) ; a: offset in header data ; 0 -> flag's bit (into wTrainerHeaderFlagBit) ; 2 -> flag's byte ptr (into hl) ; 4 -> before battle text (into hl) ; 6 -> after battle text (into hl) ; 8 -> end battle text (into hl) ReadTrainerHeaderInfo:: ; 3193 (0:3193) push de push af ld d, $0 ld e, a ld hl, W_TRAINERHEADERPTR ld a, [hli] ld l, [hl] ld h, a add hl, de pop af and a jr nz, .nonZeroOffset ld a, [hl] ld [wTrainerHeaderFlagBit], a ; store flag's bit jr .done .nonZeroOffset cp $2 jr z, .readPointer ; read flag's byte ptr cp $4 jr z, .readPointer ; read before battle text cp $6 jr z, .readPointer ; read after battle text cp $8 jr z, .readPointer ; read end battle text cp $a jr nz, .done ld a, [hli] ; read end battle text (2) but override the result afterwards (XXX why, bug?) ld d, [hl] ld e, a jr .done .readPointer ld a, [hli] ld h, [hl] ld l, a .done pop de ret ; calls HandleBitArray HandleBitArray_Bank0:: ; 31c7 (0:31c7) ld a, $10 jp Predef ; indirect jump to HandleBitArray (f666 (3:7666)) ; direct talking to a trainer (rather than getting seen by one) TalkToTrainer:: ; 31cc (0:31cc) call StoreTrainerHeaderPointer xor a call ReadTrainerHeaderInfo ; read flag's bit ld a, $2 call ReadTrainerHeaderInfo ; read flag's byte ptr ld a, [wTrainerHeaderFlagBit] ld c, a ld b, $2 call HandleBitArray_Bank0 ; read trainer's flag ld a, c and a jr z, .trainerNotYetFought ; test trainer's flag ld a, $6 call ReadTrainerHeaderInfo ; print after battle text jp PrintText .trainerNotYetFought ; 0x31ed ld a, $4 call ReadTrainerHeaderInfo ; print before battle text call PrintText ld a, $a call ReadTrainerHeaderInfo ; (?) does nothing apparently (maybe bug in ReadTrainerHeaderInfo) push de ld a, $8 call ReadTrainerHeaderInfo ; read end battle text pop de call PreBattleSaveRegisters ld hl, W_FLAGS_D733 set 4, [hl] ; activate map script index override (index is set below) ld hl, wFlags_0xcd60 bit 0, [hl] ; test if player is already being engaged by another trainer ret nz call EngageMapTrainer ld hl, W_CURMAPSCRIPT inc [hl] ; progress map script index (assuming it was 0 before) to start pre-battle routines jp Func_325d ; checks if any trainers are seeing the player and wanting to fight CheckFightingMapTrainers:: ; 3219 (0:3219) call CheckForEngagingTrainers ld a, [$cf13] cp $ff jr nz, .trainerEngaging xor a ld [$cf13], a ld [wTrainerHeaderFlagBit], a ret .trainerEngaging ld hl, W_FLAGS_D733 set 3, [hl] ld [$cd4f], a xor a ld [$cd50], a ld a, $4c call Predef ld a, BTN_RIGHT | BTN_LEFT | BTN_UP | BTN_DOWN ld [wJoypadForbiddenButtonsMask], a xor a ldh [$b4], a call TrainerWalkUpToPlayer_Bank0 ld hl, W_CURMAPSCRIPT inc [hl] ; progress to battle phase 1 (engaging) ret Func_324c:: ; 324c (0:324c) ld a, [$d730] and $1 ret nz ld [wJoypadForbiddenButtonsMask], a ld a, [$cf13] ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID Func_325d:: ; 325d (0:325d) xor a ld [wJoypadForbiddenButtonsMask], a call InitBattleEnemyParameters ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, $d72e set 1, [hl] ld hl, W_CURMAPSCRIPT inc [hl] ; progress to battle phase 2 (battling) ret EndTrainerBattle:: ; 3275 (0:3275) ld hl, $d126 set 5, [hl] set 6, [hl] ld hl, $d72d res 7, [hl] ld hl, wFlags_0xcd60 res 0, [hl] ; player is no longer engaged by any trainer ld a, [W_ISINBATTLE] ; $d057 cp $ff jp z, ResetButtonPressedAndMapScript ld a, $2 call ReadTrainerHeaderInfo ld a, [wTrainerHeaderFlagBit] ld c, a ld b, $1 call HandleBitArray_Bank0 ; flag trainer as fought ld a, [W_ENEMYMONORTRAINERCLASS] cp $c8 jr nc, .skipRemoveSprite ; test if trainer was fought (in that case skip removing the corresponding sprite) ld hl, W_MISSABLEOBJECTLIST ld de, $2 ld a, [$cf13] call IsInArray ; search for sprite ID inc hl ld a, [hl] ld [$cc4d], a ; load corresponding missable object index and remove it ld a, $11 call Predef ; indirect jump to RemoveMissableObject (f1d7 (3:71d7)) .skipRemoveSprite ld hl, $d730 bit 4, [hl] res 4, [hl] ret nz ResetButtonPressedAndMapScript:: ; 32c1 (0:32c1) xor a ld [wJoypadForbiddenButtonsMask], a ld [H_CURRENTPRESSEDBUTTONS], a ld [H_NEWLYPRESSEDBUTTONS], a ld [H_NEWLYRELEASEDBUTTONS], a ld [W_CURMAPSCRIPT], a ; reset battle status ret ; calls TrainerWalkUpToPlayer TrainerWalkUpToPlayer_Bank0:: ; 32cf (0:32cf) ld b, BANK(TrainerWalkUpToPlayer) ld hl, TrainerWalkUpToPlayer jp Bankswitch ; sets opponent type and mon set/lvl based on the engaging trainer data InitBattleEnemyParameters:: ; 32d7 (0:32d7) ld a, [wEngagedTrainerClass] ld [W_CUROPPONENT], a ; $d059 ld [W_ENEMYMONORTRAINERCLASS], a cp $c8 ld a, [wEngagedTrainerSet] ; $cd2e jr c, .noTrainer ld [W_TRAINERNO], a ; $d05d ret .noTrainer ld [W_CURENEMYLVL], a ; $d127 ret Func_32ef:: ; 32ef (0:32ef) ld hl, Func_567f9 jr asm_3301 Func_32f4:: ; 32f4 (0:32f4) ld hl, Func_56819 jr asm_3301 ; 0x32f7 $8 Func_32f9:: ; 32f9 (0:32f9) ld hl, Func_5683d jr asm_3301 Func_32fe:: ; 32fe (0:32fe) ld hl, Func_5685d asm_3301:: ; 3301 (0:3301) ld b, $15 jp Bankswitch ; indirect jump to one of the four functions CheckForEngagingTrainers:: ; 3306 (0:3306) xor a call ReadTrainerHeaderInfo ; read trainer flag's bit (unused) ld d, h ; store trainer header address in de ld e, l .trainerLoop call StoreTrainerHeaderPointer ; set trainer header pointer to current trainer ld a, [de] ld [$cf13], a ; store trainer flag's bit ld [wTrainerHeaderFlagBit], a cp $ff ret z ld a, $2 call ReadTrainerHeaderInfo ; read trainer flag's byte ptr ld b, $2 ld a, [wTrainerHeaderFlagBit] ld c, a call HandleBitArray_Bank0 ; read trainer flag ld a, c and a jr nz, .trainerAlreadyFought push hl push de push hl xor a call ReadTrainerHeaderInfo ; get trainer header pointer inc hl ld a, [hl] ; read trainer engage distance pop hl ld [wTrainerEngageDistance], a ld a, [$cf13] swap a ld [wTrainerSpriteOffset], a ; $cd3d ld a, $39 call Predef ; indirect jump to CheckEngagePlayer (5690f (15:690f)) pop de pop hl ld a, [wTrainerSpriteOffset] ; $cd3d and a ret nz ; break if the trainer is engaging .trainerAlreadyFought ld hl, $c add hl, de ld d, h ld e, l jr .trainerLoop ; saves loaded rom bank and hl as well as de registers PreBattleSaveRegisters:: ; 3354 (0:3354) ld a, [H_LOADEDROMBANK] ld [W_PBSTOREDROMBANK], a ld a, h ld [W_PBSTOREDREGISTERH], a ld a, l ld [W_PBSTOREDREGISTERL], a ld a, d ld [W_PBSTOREDREGISTERD], a ld a, e ld [W_PBSTOREDREGISTERE], a ret ; loads data of some trainer on the current map and plays pre-battle music ; [$cf13]: sprite ID of trainer who is engaged EngageMapTrainer:: ; 336a (0:336a) ld hl, W_MAPSPRITEEXTRADATA ld d, $0 ld a, [$cf13] dec a add a ld e, a add hl, de ; seek to engaged trainer data ld a, [hli] ; load trainer class ld [wEngagedTrainerClass], a ld a, [hl] ; load trainer mon set ld [wEnemyMonAttackMod], a ; $cd2e jp PlayTrainerMusic Func_3381:: ; 3381 (0:3381) push hl ld hl, $d72d bit 7, [hl] res 7, [hl] pop hl ret z ld a, [H_LOADEDROMBANK] push af ld a, [W_PBSTOREDROMBANK] ld [H_LOADEDROMBANK], a ld [$2000], a push hl ld b, BANK(SaveTrainerName) ld hl, SaveTrainerName call Bankswitch ld hl, UnnamedText_33cf call PrintText pop hl pop af ld [H_LOADEDROMBANK], a ld [$2000], a ld b, BANK(Func_1a5e7) ld hl, Func_1a5e7 call Bankswitch jp WaitForSoundToFinish Func_33b7:: ; 33b7 (0:33b7) ld a, [$cf0b] and a jr nz, .asm_33c6 ld a, [W_PBSTOREDREGISTERH] ld h, a ld a, [W_PBSTOREDREGISTERL] ld l, a ret .asm_33c6 ld a, [W_PBSTOREDREGISTERD] ld h, a ld a, [W_PBSTOREDREGISTERE] ld l, a ret UnnamedText_33cf:: ; 33cf (0:33cf) TX_FAR _UnnamedText_33cf db $08 Func_33d4:: ; 33d4 (0:33d4) call Func_33b7 call TextCommandProcessor jp TextScriptEnd Func_33dd:: ; 33dd (0:33dd) ld a, [wFlags_0xcd60] bit 0, a ret nz call EngageMapTrainer xor a ret PlayTrainerMusic:: ; 33e8 (0:33e8) ld a, [wEngagedTrainerClass] cp $c8 + SONY1 ret z cp $c8 + SONY2 ret z cp $c8 + SONY3 ret z ld a, [W_GYMLEADERNO] ; $d05c and a ret nz xor a ld [wMusicHeaderPointer], a ld a, $ff call PlaySound ; stop music ld a, BANK(Music_MeetEvilTrainer) ld [$c0ef], a ld [$c0f0], a ld a, [wEngagedTrainerClass] ld b, a ld hl, EvilTrainerList .evilTrainerListLoop ld a, [hli] cp $ff jr z, .noEvilTrainer cp b jr nz, .evilTrainerListLoop ld a, MUSIC_MEET_EVIL_TRAINER jr .PlaySound .noEvilTrainer ld hl, FemaleTrainerList .femaleTrainerListLoop ld a, [hli] cp $ff jr z, .maleTrainer cp b jr nz, .femaleTrainerListLoop ld a, MUSIC_MEET_FEMALE_TRAINER jr .PlaySound .maleTrainer ld a, MUSIC_MEET_MALE_TRAINER .PlaySound ld [$c0ee], a jp PlaySound FemaleTrainerList:: ; 3434 (0:3434) db $c8+LASS db $c8+JR__TRAINER_F db $c8+BEAUTY db $c8+COOLTRAINER_F db $FF EvilTrainerList:: ; 3439 (0:3439) db $c8+JUGGLER_X db $c8+GAMBLER db $c8+ROCKER db $c8+JUGGLER db $c8+CHIEF db $c8+SCIENTIST db $c8+GIOVANNI db $c8+ROCKET db $FF Func_3442:: ; 3442 (0:3442) ld a, [hli] cp $ff ret z cp b jr nz, .asm_345b ld a, [hli] cp c jr nz, .asm_345c ld a, [hli] ld d, [hl] ld e, a ld hl, $ccd3 call DecodeRLEList dec a ld [$cd38], a ret .asm_345b inc hl .asm_345c inc hl inc hl jr Func_3442 FuncTX_ItemStoragePC:: ; 3460 (0:3460) call SaveScreenTilesToBuffer2 ld b, BANK(Func_78e6) ld hl, Func_78e6 jr bankswitchAndContinue FuncTX_BillsPC:: ; 346a (0:346a) call SaveScreenTilesToBuffer2 ld b, BANK(Func_214c2) ld hl, Func_214c2 jr bankswitchAndContinue FuncTX_SlotMachine:: ; 3474 (0:3474) ; XXX find a better name for this function ; special_F7 ld b,BANK(CeladonPrizeMenu) ld hl,CeladonPrizeMenu bankswitchAndContinue:: ; 3479 (0:3479) call Bankswitch jp HoldTextDisplayOpen ; continue to main text-engine function FuncTX_PokemonCenterPC:: ; 347f (0:347f) ld b, BANK(ActivatePC) ld hl, ActivatePC jr bankswitchAndContinue Func_3486:: ; 3486 (0:3486) xor a ld [$cd3b], a ld [$c206], a ld hl, $d730 set 7, [hl] ret IsItemInBag:: ; 3493 (0:3493) ; given an item_id in b ; set zero flag if item isn't in player's bag ; else reset zero flag ; related to Pokémon Tower and ghosts ld a,$1C call Predef ld a,b and a ret DisplayPokedex:: ; 349b (0:349b) ld [$d11e], a ld b, BANK(Func_7c18) ld hl, Func_7c18 jp Bankswitch Func_34a6:: ; 34a6 (0:34a6) call Func_34ae ld c, $6 jp DelayFrames Func_34ae:: ; 34ae (0:34ae) ld a, $9 ld [H_DOWNARROWBLINKCNT1], a ; $FF00+$8b call Func_34fc ld a, [$FF00+$8d] ld [hl], a ret Func_34b9:: ; 34b9 (0:34b9) ld de, $fff9 add hl, de ld [hl], a ret ; tests if the player's coordinates are in a specified array ; INPUT: ; hl = address of array ; OUTPUT: ; [$cd3d] = if there is match, the matching array index ; sets carry if the coordinates are in the array, clears carry if not ArePlayerCoordsInArray:: ; 34bf (0:34bf) ld a,[W_YCOORD] ld b,a ld a,[W_XCOORD] ld c,a ; fallthrough CheckCoords:: ; 34c7 (0:34c7) xor a ld [$cd3d],a .loop ld a,[hli] cp a,$ff ; reached terminator? jr z,.notInArray push hl ld hl,$cd3d inc [hl] pop hl .compareYCoord cp b jr z,.compareXCoord inc hl jr .loop .compareXCoord ld a,[hli] cp c jr nz,.loop .inArray scf ret .notInArray and a ret ; tests if a boulder's coordinates are in a specified array ; INPUT: ; hl = address of array ; ff8c = which boulder to check? XXX ; OUTPUT: ; [$cd3d] = if there is match, the matching array index ; sets carry if the coordinates are in the array, clears carry if not CheckBoulderCoords:: ; 34e4 (0:34e4) push hl ld hl, $c204 ld a, [$ff00+$8c] swap a ld d, $0 ld e, a add hl, de ld a, [hli] sub $4 ; because sprite coordinates are offset by 4 ld b, a ld a, [hl] sub $4 ; because sprite coordinates are offset by 4 ld c, a pop hl jp CheckCoords Func_34fc:: ; 34fc (0:34fc) ld h, $c1 jr asm_3502 Func_3500:: ; 3500 (0:3500) ld h, $c2 asm_3502:: ; 3502 (0:3502) ld a, [H_DOWNARROWBLINKCNT1] ; $FF00+$8b ld b, a ld a, [H_DOWNARROWBLINKCNT2] ; $FF00+$8c swap a add b ld l, a ret ; decodes a $ff-terminated RLEncoded list ; each entry is a pair of bytes <byte value> <repetitions> ; the final $ff will be replicated in the output list and a contains the number of bytes written ; de: input list ; hl: output list DecodeRLEList:: ; 350c (0:350c) xor a ld [wRLEByteCount], a ; count written bytes here .listLoop ld a, [de] cp $ff jr z, .endOfList ld [H_DOWNARROWBLINKCNT1], a ; store byte value to be written inc de ld a, [de] ld b, $0 ld c, a ; number of bytes to be written ld a, [wRLEByteCount] add c ld [wRLEByteCount], a ; update total number of written bytes ld a, [H_DOWNARROWBLINKCNT1] ; $FF00+$8b call FillMemory ; write a c-times to output inc de jr .listLoop .endOfList ld a, $ff ld [hl], a ; write final $ff ld a, [wRLEByteCount] inc a ; include sentinel in counting ret ; sets movement byte 1 for sprite [$FF8C] to $FE and byte 2 to [$FF8D] SetSpriteMovementBytesToFE:: ; 3533 (0:3533) push hl call GetSpriteMovementByte1Pointer ld [hl], $fe call GetSpriteMovementByte2Pointer ld a, [$ff00+$8d] ld [hl], a pop hl ret ; sets both movement bytes for sprite [$FF8C] to $FF SetSpriteMovementBytesToFF:: ; 3541 (0:3541) push hl call GetSpriteMovementByte1Pointer ld [hl],$FF call GetSpriteMovementByte2Pointer ld [hl],$FF ; prevent person from walking? pop hl ret ; returns the sprite movement byte 1 pointer for sprite [$FF8C] in hl GetSpriteMovementByte1Pointer:: ; 354e (0:354e) ld h,$C2 ld a,[$FF8C] ; the sprite to move swap a add a,6 ld l,a ret ; returns the sprite movement byte 2 pointer for sprite [$FF8C] in hl GetSpriteMovementByte2Pointer:: ; 3558 (0:3558) push de ld hl,W_MAPSPRITEDATA ld a,[$FF8C] ; the sprite to move dec a add a ld d,0 ld e,a add hl,de pop de ret Func_3566:: ; 3566 (0:3566) call Func_359e ld a, [W_ISLINKBATTLE] ; $d12b and a jr nz, .asm_3594 ld a, Bank(TrainerPicAndMoneyPointers) call BankswitchHome ld a, [W_TRAINERCLASS] ; $d031 dec a ld hl, TrainerPicAndMoneyPointers ld bc, $5 call AddNTimes ld de, $d033 ld a, [hli] ld [de], a inc de ld a, [hli] ld [de], a ld de, $d046 ld a, [hli] ld [de], a inc de ld a, [hli] ld [de], a jp BankswitchBack .asm_3594 ld hl, $d033 ld de, RedPicFront ld [hl], e inc hl ld [hl], d ret Func_359e:: ; 359e (0:359e) ld b, BANK(Func_13a58) ld hl, Func_13a58 jp Bankswitch ; tests if player's money are at least as much as [$ff9f] ; sets carry flag if not enough money ; sets zero flag if amounts match exactly HasEnoughMoney:: ; 35a6 (0:35a6) ld de, wPlayerMoney ; $d347 ld hl, $ff9f ld c, $3 jp StringCmp ; tests if player's game corner coins are at least as many as [$ffa0] ; sets carry flag if not enough coins ; sets zero flag if amounts match exactly HasEnoughCoins:: ; 35b1 (0:35b1) ld de, wPlayerCoins ld hl, $ffa0 ld c, $2 jp StringCmp BankswitchHome:: ; 35bc (0:35bc) ; switches to bank # in a ; Only use this when in the home bank! ld [$CF09],a ld a,[H_LOADEDROMBANK] ld [$CF08],a ld a,[$CF09] ld [H_LOADEDROMBANK],a ld [$2000],a ret BankswitchBack:: ; 35cd (0:35cd) ; returns from BankswitchHome ld a,[$CF08] ld [H_LOADEDROMBANK],a ld [$2000],a ret Bankswitch:: ; 35d6 (0:35d6) ; self-contained bankswitch, use this when not in the home bank ; switches to the bank in b ld a,[H_LOADEDROMBANK] push af ld a,b ld [H_LOADEDROMBANK],a ld [$2000],a ld bc,.Return push bc jp [hl] .Return pop bc ld a,b ld [H_LOADEDROMBANK],a ld [$2000],a ret ; displays yes/no choice ; yes -> set carry YesNoChoice:: ; 35ec (0:35ec) call SaveScreenTilesToBuffer1 call InitYesNoTextBoxParameters jr DisplayYesNoChoice Func_35f4:: ; 35f4 (0:35f4) ld a, $14 ld [$d125], a call InitYesNoTextBoxParameters jp DisplayTextBoxID InitYesNoTextBoxParameters:: ; 35ff (0:35ff) xor a ld [$d12c], a FuncCoord 14, 7 ; $c43a ld hl, Coord ld bc, $80f ret YesNoChoicePokeCenter:: ; 360a (0:360a) call SaveScreenTilesToBuffer1 ld a, $6 ld [$d12c], a FuncCoord 11, 6 ; $c423 ld hl, Coord ld bc, $80c jr DisplayYesNoChoice Func_361a:: ; 361a (0:361a) call SaveScreenTilesToBuffer1 ld a, $3 ld [$d12c], a FuncCoord 12, 7 ; $c438 ld hl, Coord ld bc, $080d DisplayYesNoChoice:: ; 3628 (0:3628) ld a, $14 ld [$d125], a call DisplayTextBoxID jp LoadScreenTilesFromBuffer1 ; calculates the difference |a-b|, setting carry flag if a<b CalcDifference:: ; 3633 (0:3633) sub b ret nc cpl add $1 scf ret MoveSprite:: ; 363a (0:363a) ; move the sprite [$FF8C] with the movement pointed to by de ; actually only copies the movement data to $CC5B for later call SetSpriteMovementBytesToFF MoveSprite_:: ; 363d (0:363d) push hl push bc call GetSpriteMovementByte1Pointer xor a ld [hl],a ld hl,$CC5B ld c,0 .loop ld a,[de] ld [hli],a inc de inc c cp a,$FF ; have we reached the end of the movement data? jr nz,.loop ld a,c ld [$CF0F],a ; number of steps taken pop bc ld hl,$D730 set 0,[hl] pop hl xor a ld [$CD3B],a ld [$CCD3],a dec a ld [wJoypadForbiddenButtonsMask],a ld [$CD3A],a ret Func_366b:: ; 366b (0:366b) push hl ld hl, $ffe7 xor a ld [hld], a ld a, [hld] and a jr z, .asm_367e ld a, [hli] .asm_3676 sub [hl] jr c, .asm_367e inc hl inc [hl] dec hl jr .asm_3676 .asm_367e pop hl ret ; copies the tile patterns for letters and numbers into VRAM LoadFontTilePatterns:: ; 3680 (0:3680) ld a,[rLCDC] bit 7,a ; is the LCD enabled? jr nz,.lcdEnabled .lcdDisabled ld hl,FontGraphics ld de,$8800 ld bc,$400 ld a,BANK(FontGraphics) jp FarCopyDataDouble ; if LCD is off, transfer all at once .lcdEnabled ld de,FontGraphics ld hl,$8800 ld bc,(BANK(FontGraphics) << 8 | $80) jp CopyVideoDataDouble ; if LCD is on, transfer during V-blank ; copies the text box tile patterns into VRAM LoadTextBoxTilePatterns:: ; 36a0 (0:36a0) ld a,[rLCDC] bit 7,a ; is the LCD enabled? jr nz,.lcdEnabled .lcdDisabled ld hl,TextBoxGraphics ld de,$9600 ld bc,$0200 ld a,BANK(TextBoxGraphics) jp FarCopyData2 ; if LCD is off, transfer all at once .lcdEnabled ld de,TextBoxGraphics ld hl,$9600 ld bc,(BANK(TextBoxGraphics) << 8 | $20) jp CopyVideoData ; if LCD is on, transfer during V-blank ; copies HP bar and status display tile patterns into VRAM LoadHpBarAndStatusTilePatterns:: ; 36c0 (0:36c0) ld a,[rLCDC] bit 7,a ; is the LCD enabled? jr nz,.lcdEnabled .lcdDisabled ld hl,HpBarAndStatusGraphics ld de,$9620 ld bc,$01e0 ld a,BANK(HpBarAndStatusGraphics) jp FarCopyData2 ; if LCD is off, transfer all at once .lcdEnabled ld de,HpBarAndStatusGraphics ld hl,$9620 ld bc,(BANK(HpBarAndStatusGraphics) << 8 | $1e) jp CopyVideoData ; if LCD is on, transfer during V-blank ;Fills memory range with the specified byte. ;input registers a = fill_byte, bc = length, hl = address FillMemory:: ; 36e0 (0:36e0) push de ld d, a .loop ld a, d ldi [hl], a dec bc ld a, b or c jr nz, .loop pop de ret ; loads sprite that de points to ; bank of sprite is given in a UncompressSpriteFromDE:: ; 36eb (0:36eb) ld hl, W_SPRITEINPUTPTR ld [hl], e inc hl ld [hl], d jp UncompressSpriteData SaveScreenTilesToBuffer2:: ; 36f4 (0:36f4) ld hl, wTileMap ld de, wTileMapBackup2 ld bc, $168 call CopyData ret LoadScreenTilesFromBuffer2:: ; 3701 (0:3701) call LoadScreenTilesFromBuffer2DisableBGTransfer ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ret ; loads screen tiles stored in wTileMapBackup2 but leaves H_AUTOBGTRANSFERENABLED disabled LoadScreenTilesFromBuffer2DisableBGTransfer:: ; 3709 (0:3709) xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld hl, wTileMapBackup2 ld de, wTileMap ld bc, $168 call CopyData ret SaveScreenTilesToBuffer1:: ; 3719 (0:3719) ld hl, wTileMap ld de, wTileMapBackup ld bc, $168 jp CopyData LoadScreenTilesFromBuffer1:: ; 3725 (0:3725) xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld hl, wTileMapBackup ld de, wTileMap ld bc, $168 call CopyData ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ret DelayFrames:: ; 3739 (0:3739) ; wait n frames, where n is the value in c call DelayFrame dec c jr nz,DelayFrames ret PlaySoundWaitForCurrent:: ; 3740 (0:3740) push af call WaitForSoundToFinish pop af jp PlaySound ; Wait for sound to finish playing WaitForSoundToFinish:: ; 3748 (0:3748) ld a, [$d083] and $80 ret nz push hl .asm_374f ld hl, $c02a xor a or [hl] inc hl or [hl] inc hl inc hl or [hl] jr nz, .asm_374f pop hl ret NamePointers:: ; 375d (0:375d) dw MonsterNames dw MoveNames dw UnusedNames dw ItemNames dw W_PARTYMON1OT ; player's OT names list dw W_ENEMYMON1OT ; enemy's OT names list dw TrainerNames GetName:: ; 376b (0:376b) ; arguments: ; [$D0B5] = which name ; [$D0B6] = which list (W_LISTTYPE) ; [$D0B7] = bank of list ; ; returns pointer to name in de ld a,[$d0b5] ld [$d11e],a cp a,$C4 ;it's TM/HM jp nc,GetMachineName ld a,[H_LOADEDROMBANK] push af push hl push bc push de ld a,[W_LISTTYPE] ;List3759_entrySelector dec a jr nz,.otherEntries ;1 = MON_NAMES call GetMonName ld hl,11 add hl,de ld e,l ld d,h jr .gotPtr .otherEntries ; $378d ;2-7 = OTHER ENTRIES ld a,[$d0b7] ld [H_LOADEDROMBANK],a ld [$2000],a ld a,[W_LISTTYPE] ;VariousNames' entryID dec a add a ld d,0 ld e,a jr nc,.skip inc d .skip ; $37a0 ld hl,NamePointers add hl,de ld a,[hli] ld [$ff96],a ld a,[hl] ld [$ff95],a ld a,[$ff95] ld h,a ld a,[$ff96] ld l,a ld a,[$d0b5] ld b,a ld c,0 .nextName ld d,h ld e,l .nextChar ld a,[hli] cp a, "@" jr nz,.nextChar inc c ;entry counter ld a,b ;wanted entry cp c jr nz,.nextName ld h,d ld l,e ld de,$cd6d ld bc,$0014 call CopyData .gotPtr ; $37cd ld a,e ld [$cf8d],a ld a,d ld [$cf8e],a pop de pop bc pop hl pop af ld [H_LOADEDROMBANK],a ld [$2000],a ret GetItemPrice:: ; 37df (0:37df) ld a, [H_LOADEDROMBANK] push af ld a, [wListMenuID] ; $cf94 cp $1 ld a, $1 ; hardcoded Bank jr nz, .asm_37ed ld a, $f ; hardcoded Bank .asm_37ed ld [H_LOADEDROMBANK], a ld [$2000], a ld hl, $cf8f ld a, [hli] ld h, [hl] ld l, a ld a, [$cf91] cp HM_01 jr nc, .asm_3812 ld bc, $3 .asm_3802 add hl, bc dec a jr nz, .asm_3802 dec hl ld a, [hld] ld [$FF00+$8d], a ld a, [hld] ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c ld a, [hl] ld [H_DOWNARROWBLINKCNT1], a ; $FF00+$8b jr .asm_381c .asm_3812 ld a, Bank(GetMachinePrice) ld [H_LOADEDROMBANK], a ld [$2000], a call GetMachinePrice .asm_381c ld de, H_DOWNARROWBLINKCNT1 ; $ff8b pop af ld [H_LOADEDROMBANK], a ld [$2000], a ret ; copies a string from [de] to [$cf4b] CopyStringToCF4B:: ; 3826 (0:3826) ld hl, $cf4b ; fall through ; copies a string from [de] to [hl] CopyString:: ; 3829 (0:3829) ld a, [de] inc de ld [hli], a cp "@" jr nz, CopyString ret ; this function is used when lower button sensitivity is wanted (e.g. menus) ; OUTPUT: [$ffb5] = pressed buttons in usual format ; there are two flags that control its functionality, [$ffb6] and [$ffb7] ; there are esentially three modes of operation ; 1. Get newly pressed buttons only ; ([$ffb7] == 0, [$ffb6] == any) ; Just copies [H_NEWLYPRESSEDBUTTONS] to [$ffb5]. ; 2. Get currently pressed buttons at low sample rate with delay ; ([$ffb7] == 1, [$ffb6] != 0) ; If the user holds down buttons for more than half a second, ; report buttons as being pressed up to 12 times per second thereafter. ; If the user holds down buttons for less than half a second, ; report only one button press. ; 3. Same as 2, but report no buttons as pressed if A or B is held down. ; ([$ffb7] == 1, [$ffb6] == 0) GetJoypadStateLowSensitivity:: ; 3831 (0:3831) call GetJoypadState ld a,[$ffb7] ; flag and a ; get all currently pressed buttons or only newly pressed buttons? ld a,[H_NEWLYPRESSEDBUTTONS] ; newly pressed buttons jr z,.storeButtonState ld a,[H_CURRENTPRESSEDBUTTONS] ; all currently pressed buttons .storeButtonState ld [$ffb5],a ld a,[H_NEWLYPRESSEDBUTTONS] ; newly pressed buttons and a ; have any buttons been newly pressed since last check? jr z,.noNewlyPressedButtons .newlyPressedButtons ld a,30 ; half a second delay ld [H_FRAMECOUNTER],a ret .noNewlyPressedButtons ld a,[H_FRAMECOUNTER] and a ; is the delay over? jr z,.delayOver .delayNotOver xor a ld [$ffb5],a ; report no buttons as pressed ret .delayOver ; if [$ffb6] = 0 and A or B is pressed, report no buttons as pressed ld a,[H_CURRENTPRESSEDBUTTONS] and a,%00000011 ; A and B buttons jr z,.setShortDelay ld a,[$ffb6] ; flag and a jr nz,.setShortDelay xor a ld [$ffb5],a .setShortDelay ld a,5 ; 1/12 of a second delay ld [H_FRAMECOUNTER],a ret WaitForTextScrollButtonPress:: ; 3865 (0:3865) ld a, [H_DOWNARROWBLINKCNT1] ; $FF00+$8b push af ld a, [H_DOWNARROWBLINKCNT2] ; $FF00+$8c push af xor a ld [H_DOWNARROWBLINKCNT1], a ; $FF00+$8b ld a, $6 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c .asm_3872 push hl ld a, [$d09b] and a jr z, .asm_387c call Func_716c6 .asm_387c FuncCoord 18, 16 ; $c4f2 ld hl, Coord call HandleDownArrowBlinkTiming pop hl call GetJoypadStateLowSensitivity ld a, $2d call Predef ; indirect jump to Func_5a5f (5a5f (1:5a5f)) ld a, [$FF00+$b5] and BTN_A | BTN_B ; $3 jr z, .asm_3872 pop af ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c pop af ld [H_DOWNARROWBLINKCNT1], a ; $FF00+$8b ret ; (unlass in link battle) waits for A or B being pressed and outputs the scrolling sound effect ManualTextScroll:: ; 3898 (0:3898) ld a, [W_ISLINKBATTLE] ; $d12b cp $4 jr z, .inLinkBattle call WaitForTextScrollButtonPress ld a, $90 jp PlaySound .inLinkBattle ld c, $41 jp DelayFrames ; function to do multiplication ; all values are big endian ; INPUT ; FF96-FF98 = multiplicand ; FF99 = multiplier ; OUTPUT ; FF95-FF98 = product Multiply:: ; 38ac (0:38ac) push hl push bc ld hl, _Multiply ld b, BANK(_Multiply) call Bankswitch pop bc pop hl ret ; function to do division ; all values are big endian ; INPUT ; FF95-FF98 = dividend ; FF99 = divisor ; b = number of bytes in the dividend (starting from FF95) ; OUTPUT ; FF95-FF98 = quotient ; FF99 = remainder Divide:: ; 38b9 (0:38b9) push hl push de push bc ld a,[H_LOADEDROMBANK] push af ld a,Bank(_Divide) ld [H_LOADEDROMBANK],a ld [$2000],a call _Divide pop af ld [H_LOADEDROMBANK],a ld [$2000],a pop bc pop de pop hl ret ; This function is used to wait a short period after printing a letter to the ; screen unless the player presses the A/B button or the delay is turned off ; through the [$d730] or [$d358] flags. PrintLetterDelay:: ; 38d3 (0:38d3) ld a,[$d730] bit 6,a ret nz ld a,[$d358] bit 1,a ret z push hl push de push bc ld a,[$d358] bit 0,a jr z,.waitOneFrame ld a,[$d355] and a,$0f ld [H_FRAMECOUNTER],a jr .checkButtons .waitOneFrame ld a,1 ld [H_FRAMECOUNTER],a .checkButtons call GetJoypadState ld a,[H_CURRENTPRESSEDBUTTONS] .checkAButton bit 0,a ; is the A button pressed? jr z,.checkBButton jr .endWait .checkBButton bit 1,a ; is the B button pressed? jr z,.buttonsNotPressed .endWait call DelayFrame jr .done .buttonsNotPressed ; if neither A nor B is pressed ld a,[H_FRAMECOUNTER] and a jr nz,.checkButtons .done pop bc pop de pop hl ret ; Copies [hl, bc) to [de, bc - hl). ; In other words, the source data is from hl up to but not including bc, ; and the destination is de. CopyDataUntil:: ; 3913 (0:3913) ld a,[hli] ld [de],a inc de ld a,h cp b jr nz,CopyDataUntil ld a,l cp c jr nz,CopyDataUntil ret ; Function to remove a pokemon from the party or the current box. ; wWhichPokemon determines the pokemon. ; [$cf95] == 0 specifies the party. ; [$cf95] != 0 specifies the current box. RemovePokemon:: ; 391f (0:391f) ld hl, _RemovePokemon ld b, BANK(_RemovePokemon) jp Bankswitch AddPokemonToParty:: ; 3927 (0:3927) push hl push de push bc ld b, BANK(_AddPokemonToParty) ld hl, _AddPokemonToParty call Bankswitch pop bc pop de pop hl ret ; calculates all 5 stats of current mon and writes them to [de] CalcStats:: ; 3936 (0:3936) ld c, $0 .statsLoop inc c call CalcStat ld a, [H_MULTIPLICAND+1] ld [de], a inc de ld a, [H_MULTIPLICAND+2] ld [de], a inc de ld a, c cp $5 jr nz, .statsLoop ret ; calculates stat c of current mon ; c: stat to calc (HP=1,Atk=2,Def=3,Spd=4,Spc=5) ; b: consider stat exp? ; hl: base ptr to stat exp values ([hl + 2*c - 1] and [hl + 2*c]) CalcStat:: ; 394a (0:394a) push hl push de push bc ld a, b ld d, a push hl ld hl, W_MONHEADER ld b, $0 add hl, bc ld a, [hl] ; read base value of stat ld e, a pop hl push hl sla c ld a, d and a jr z, .statExpDone ; consider stat exp? add hl, bc ; skip to corresponding stat exp value .statExpLoop ; calculates ceil(Sqrt(stat exp)) in b xor a ld [H_MULTIPLICAND], a ld [H_MULTIPLICAND+1], a inc b ; increment current stat exp bonus ld a, b cp $ff jr z, .statExpDone ld [H_MULTIPLICAND+2], a ld [H_MULTIPLIER], a call Multiply ld a, [hld] ld d, a ld a, [$FF00+$98] sub d ld a, [hli] ld d, a ld a, [$FF00+$97] sbc d ; test if (current stat exp bonus)^2 < stat exp jr c, .statExpLoop .statExpDone srl c pop hl push bc ld bc, $b ; skip to stat IV values add hl, bc pop bc ld a, c cp $2 jr z, .getAttackIV cp $3 jr z, .getDefenseIV cp $4 jr z, .getSpeedIV cp $5 jr z, .getSpecialIV .getHpIV push bc ld a, [hl] ; Atk IV swap a and $1 sla a sla a sla a ld b, a ld a, [hli] ; Def IV and $1 sla a sla a add b ld b, a ld a, [hl] ; Spd IV swap a and $1 sla a add b ld b, a ld a, [hl] ; Spc IV and $1 add b ; HP IV: LSB of the other 4 IVs pop bc jr .calcStatFromIV .getAttackIV ld a, [hl] swap a and $f jr .calcStatFromIV .getDefenseIV ld a, [hl] and $f jr .calcStatFromIV .getSpeedIV inc hl ld a, [hl] swap a and $f jr .calcStatFromIV .getSpecialIV inc hl ld a, [hl] and $f .calcStatFromIV ld d, $0 add e ld e, a jr nc, .noCarry inc d ; de = Base + IV .noCarry sla e rl d ; de = (Base + IV) * 2 srl b srl b ; b = ceil(Sqrt(stat exp)) / 4 ld a, b add e jr nc, .noCarry2 inc d ; da = (Base + IV) * 2 + ceil(Sqrt(stat exp)) / 4 .noCarry2 ld [H_MULTIPLICAND+2], a ld a, d ld [H_MULTIPLICAND+1], a xor a ld [H_MULTIPLICAND], a ld a, [W_CURENEMYLVL] ; $d127 ld [H_MULTIPLIER], a call Multiply ; ((Base + IV) * 2 + ceil(Sqrt(stat exp)) / 4) * Level ld a, [H_MULTIPLICAND] ld [H_DIVIDEND], a ld a, [H_MULTIPLICAND+1] ld [H_DIVIDEND+1], a ld a, [H_MULTIPLICAND+2] ld [H_DIVIDEND+2], a ld a, $64 ld [H_DIVISOR], a ld a, $3 ld b, a call Divide ; (((Base + IV) * 2 + ceil(Sqrt(stat exp)) / 4) * Level) / 100 ld a, c cp $1 ld a, $5 jr nz, .notHPStat ld a, [W_CURENEMYLVL] ; $d127 ld b, a ld a, [H_MULTIPLICAND+2] add b ld [H_MULTIPLICAND+2], a jr nc, .noCarry3 ld a, [H_MULTIPLICAND+1] inc a ld [H_MULTIPLICAND+1], a ; HP: (((Base + IV) * 2 + ceil(Sqrt(stat exp)) / 4) * Level) / 100 + Level .noCarry3 ld a, $a .notHPStat ld b, a ld a, [H_MULTIPLICAND+2] add b ld [H_MULTIPLICAND+2], a jr nc, .noCarry4 ld a, [H_MULTIPLICAND+1] inc a ; non-HP: (((Base + IV) * 2 + ceil(Sqrt(stat exp)) / 4) * Level) / 100 + 5 ld [H_MULTIPLICAND+1], a ; HP: (((Base + IV) * 2 + ceil(Sqrt(stat exp)) / 4) * Level) / 100 + Level + 10 .noCarry4 ld a, [H_MULTIPLICAND+1] ; check for overflow (>999) cp $4 jr nc, .overflow cp $3 jr c, .noOverflow ld a, [H_MULTIPLICAND+2] cp $e8 jr c, .noOverflow .overflow ld a, $3 ; overflow: cap at 999 ld [H_MULTIPLICAND+1], a ld a, $e7 ld [H_MULTIPLICAND+2], a .noOverflow pop bc pop de pop hl ret AddEnemyMonToPlayerParty:: ; 3a53 (0:3a53) ld a, [H_LOADEDROMBANK] push af ld a, BANK(_AddEnemyMonToPlayerParty) ld [H_LOADEDROMBANK], a ld [$2000], a call _AddEnemyMonToPlayerParty pop bc ld a, b ld [H_LOADEDROMBANK], a ld [$2000], a ret Func_3a68:: ; 3a68 (0:3a68) ld a, [H_LOADEDROMBANK] push af ld a, BANK(Func_f51e) ld [H_LOADEDROMBANK], a ld [$2000], a call Func_f51e pop bc ld a, b ld [H_LOADEDROMBANK], a ld [$2000], a ret ; skips a text entries, each of size $b (like trainer name, OT name, rival name, ...) ; hl: base pointer, will be incremented by $b * a SkipFixedLengthTextEntries:: ; 3a7d (0:3a7d) and a ret z ld bc, $b .skipLoop add hl, bc dec a jr nz, .skipLoop ret AddNTimes:: ; 3a87 (0:3a87) ; add bc to hl a times and a ret z .loop add hl,bc dec a jr nz,.loop ret ; Compare strings, c bytes in length, at de and hl. ; Often used to compare big endian numbers in battle calculations. StringCmp:: ; 3a8e (0:3a8e) ld a,[de] cp [hl] ret nz inc de inc hl dec c jr nz,StringCmp ret ; INPUT: ; a = oam block index (each block is 4 oam entries) ; b = Y coordinate of upper left corner of sprite ; c = X coordinate of upper left corner of sprite ; de = base address of 4 tile number and attribute pairs WriteOAMBlock:: ; 3a97 (0:3a97) ld h,$c3 swap a ; multiply by 16 ld l,a call .writeOneEntry ; upper left push bc ld a,8 add c ld c,a call .writeOneEntry ; upper right pop bc ld a,8 add b ld b,a call .writeOneEntry ; lower left ld a,8 add c ld c,a ; lower right .writeOneEntry ld [hl],b ; Y coordinate inc hl ld [hl],c ; X coordinate inc hl ld a,[de] ; tile number inc de ld [hli],a ld a,[de] ; attribute inc de ld [hli],a ret HandleMenuInput:: ; 3abe (0:3abe) xor a ld [$d09b],a HandleMenuInputPokemonSelection:: ; 3ac2 (0:3ac2) ld a,[H_DOWNARROWBLINKCNT1] push af ld a,[H_DOWNARROWBLINKCNT2] push af ; save existing values on stack xor a ld [H_DOWNARROWBLINKCNT1],a ; blinking down arrow timing value 1 ld a,$06 ld [H_DOWNARROWBLINKCNT2],a ; blinking down arrow timing value 2 .loop1 xor a ld [$d08b],a ; counter for pokemon shaking animation call PlaceMenuCursor call Delay3 .loop2 push hl ld a,[$d09b] and a ; is it a pokemon selection menu? jr z,.getJoypadState ld b, BANK(Func_716ff) ld hl, Func_716ff ; shake mini sprite of selected pokemon call Bankswitch .getJoypadState pop hl call GetJoypadStateLowSensitivity ld a,[$ffb5] and a ; was a key pressed? jr nz,.keyPressed push hl FuncCoord 18,11 ; coordinates of blinking down arrow in some menus ld hl,Coord call HandleDownArrowBlinkTiming ; blink down arrow (if any) pop hl ld a,[wMenuJoypadPollCount] dec a jr z,.giveUpWaiting jr .loop2 .giveUpWaiting ; if a key wasn't pressed within the specified number of checks pop af ld [H_DOWNARROWBLINKCNT2],a pop af ld [H_DOWNARROWBLINKCNT1],a ; restore previous values xor a ld [wMenuWrappingEnabled],a ; disable menu wrapping ret .keyPressed xor a ld [$cc4b],a ld a,[$ffb5] ld b,a bit 6,a ; pressed Up key? jr z,.checkIfDownPressed .upPressed ld a,[wCurrentMenuItem] ; selected menu item and a ; already at the top of the menu? jr z,.alreadyAtTop .notAtTop dec a ld [wCurrentMenuItem],a ; move selected menu item up one space jr .checkOtherKeys .alreadyAtTop ld a,[wMenuWrappingEnabled] and a ; is wrapping around enabled? jr z,.noWrappingAround ld a,[wMaxMenuItem] ld [wCurrentMenuItem],a ; wrap to the bottom of the menu jr .checkOtherKeys .checkIfDownPressed bit 7,a jr z,.checkOtherKeys .downPressed ld a,[wCurrentMenuItem] inc a ld c,a ld a,[wMaxMenuItem] cp c jr nc,.notAtBottom .alreadyAtBottom ld a,[wMenuWrappingEnabled] and a ; is wrapping around enabled? jr z,.noWrappingAround ld c,$00 ; wrap from bottom to top .notAtBottom ld a,c ld [wCurrentMenuItem],a .checkOtherKeys ld a,[wMenuWatchedKeys] and b ; does the menu care about any of the pressed keys? jp z,.loop1 .checkIfAButtonOrBButtonPressed ld a,[$ffb5] and a,%00000011 ; pressed A button or B button? jr z,.skipPlayingSound .AButtonOrBButtonPressed push hl ld hl,wFlags_0xcd60 bit 5,[hl] pop hl jr nz,.skipPlayingSound ld a,$90 call PlaySound ; play sound .skipPlayingSound pop af ld [H_DOWNARROWBLINKCNT2],a pop af ld [H_DOWNARROWBLINKCNT1],a ; restore previous values xor a ld [wMenuWrappingEnabled],a ; disable menu wrapping ld a,[$ffb5] ret .noWrappingAround ld a,[$cc37] and a ; should we return if the user tried to go past the top or bottom? jr z,.checkOtherKeys jr .checkIfAButtonOrBButtonPressed PlaceMenuCursor:: ; 3b7c (0:3b7c) ld a,[wTopMenuItemY] and a ; is the y coordinate 0? jr z,.adjustForXCoord ld hl,wTileMap ld bc,20 ; screen width .topMenuItemLoop add hl,bc dec a jr nz,.topMenuItemLoop .adjustForXCoord ld a,[wTopMenuItemX] ld b,$00 ld c,a add hl,bc push hl ld a,[wLastMenuItem] and a ; was the previous menu id 0? jr z,.checkForArrow1 push af ld a,[$fff6] bit 1,a ; is the menu double spaced? jr z,.doubleSpaced1 ld bc,20 jr .getOldMenuItemScreenPosition .doubleSpaced1 ld bc,40 .getOldMenuItemScreenPosition pop af .oldMenuItemLoop add hl,bc dec a jr nz,.oldMenuItemLoop .checkForArrow1 ld a,[hl] cp a,"▶" ; was an arrow next to the previously selected menu item? jr nz,.skipClearingArrow .clearArrow ld a,[wTileBehindCursor] ld [hl],a .skipClearingArrow pop hl ld a,[wCurrentMenuItem] and a jr z,.checkForArrow2 push af ld a,[$fff6] bit 1,a ; is the menu double spaced? jr z,.doubleSpaced2 ld bc,20 jr .getCurrentMenuItemScreenPosition .doubleSpaced2 ld bc,40 .getCurrentMenuItemScreenPosition pop af .currentMenuItemLoop add hl,bc dec a jr nz,.currentMenuItemLoop .checkForArrow2 ld a,[hl] cp a,"▶" ; has the right arrow already been placed? jr z,.skipSavingTile ; if so, don't lose the saved tile ld [wTileBehindCursor],a ; save tile before overwriting with right arrow .skipSavingTile ld a,"▶" ; place right arrow ld [hl],a ld a,l ld [wMenuCursorLocation],a ld a,h ld [wMenuCursorLocation + 1],a ld a,[wCurrentMenuItem] ld [wLastMenuItem],a ret ; This is used to mark a menu cursor other than the one currently being ; manipulated. In the case of submenus, this is used to show the location of ; the menu cursor in the parent menu. In the case of swapping items in list, ; this is used to mark the item that was first chosen to be swapped. PlaceUnfilledArrowMenuCursor:: ; 3bec (0:3bec) ld b,a ld a,[wMenuCursorLocation] ld l,a ld a,[wMenuCursorLocation + 1] ld h,a ld [hl],$ec ; outline of right arrow ld a,b ret ; Replaces the menu cursor with a blank space. EraseMenuCursor:: ; 3bf9 (0:3bf9) ld a,[wMenuCursorLocation] ld l,a ld a,[wMenuCursorLocation + 1] ld h,a ld [hl]," " ret ; This toggles a blinking down arrow at hl on and off after a delay has passed. ; This is often called even when no blinking is occurring. ; The reason is that most functions that call this initialize H_DOWNARROWBLINKCNT1 to 0. ; The effect is that if the tile at hl is initialized with a down arrow, ; this function will toggle that down arrow on and off, but if the tile isn't ; initliazed with a down arrow, this function does nothing. ; That allows this to be called without worrying about if a down arrow should ; be blinking. HandleDownArrowBlinkTiming:: ; 3c04 (0:3c04) ld a,[hl] ld b,a ld a,$ee ; down arrow cp b jr nz,.downArrowOff .downArrowOn ld a,[H_DOWNARROWBLINKCNT1] dec a ld [H_DOWNARROWBLINKCNT1],a ret nz ld a,[H_DOWNARROWBLINKCNT2] dec a ld [H_DOWNARROWBLINKCNT2],a ret nz ld a," " ld [hl],a ld a,$ff ld [H_DOWNARROWBLINKCNT1],a ld a,$06 ld [H_DOWNARROWBLINKCNT2],a ret .downArrowOff ld a,[H_DOWNARROWBLINKCNT1] and a ret z dec a ld [H_DOWNARROWBLINKCNT1],a ret nz dec a ld [H_DOWNARROWBLINKCNT1],a ld a,[H_DOWNARROWBLINKCNT2] dec a ld [H_DOWNARROWBLINKCNT2],a ret nz ld a,$06 ld [H_DOWNARROWBLINKCNT2],a ld a,$ee ; down arrow ld [hl],a ret ; The following code either enables or disables the automatic drawing of ; text boxes by DisplayTextID. Both functions cause DisplayTextID to wait ; for a button press after displaying text (unless [$cc47] is set). EnableAutoTextBoxDrawing:: ; 3c3c (0:3c3c) xor a jr AutoTextBoxDrawingCommon DisableAutoTextBoxDrawing:: ; 3c3f (0:3c3f) ld a,$01 AutoTextBoxDrawingCommon:: ; 3c41 (0:3c41) ld [$cf0c],a ; control text box drawing xor a ld [$cc3c],a ; make DisplayTextID wait for button press ret PrintText:: ; 3c49 (0:3c49) ; given a pointer in hl, print the text there push hl ld a,1 ld [$D125],a call DisplayTextBoxID call UpdateSprites call Delay3 pop hl Func_3c59:: ; 3c59 (0:3c59) FuncCoord 1,14 ld bc,Coord ;$C4B9 jp TextCommandProcessor ; converts a big-endian binary number into decimal and prints it ; INPUT: ; b = flags and number of bytes ; bit 7: if set, print leading zeroes ; if unset, do not print leading zeroes ; bit 6: if set, left-align the string (do not pad empty digits with spaces) ; if unset, right-align the string ; bits 4-5: unused ; bits 0-3: number of bytes (only 1 - 3 bytes supported) ; c = number of decimal digits ; de = address of the number (big-endian) PrintNumber:: ; 3c5f (0:3c5f) push bc xor a ld [H_PASTLEADINGZEROES],a ld [H_NUMTOPRINT],a ld [H_NUMTOPRINT + 1],a ld a,b and a,%00001111 cp a,1 jr z,.oneByte cp a,2 jr z,.twoBytes .threeBytes ld a,[de] ld [H_NUMTOPRINT],a inc de ld a,[de] ld [H_NUMTOPRINT + 1],a inc de ld a,[de] ld [H_NUMTOPRINT + 2],a jr .checkNumDigits .twoBytes ld a,[de] ld [H_NUMTOPRINT + 1],a inc de ld a,[de] ld [H_NUMTOPRINT + 2],a jr .checkNumDigits .oneByte ld a,[de] ld [H_NUMTOPRINT + 2],a .checkNumDigits push de ld d,b ld a,c ld b,a xor a ld c,a ld a,b ; a = number of decimal digits cp a,2 jr z,.tensPlace cp a,3 jr z,.hundredsPlace cp a,4 jr z,.thousandsPlace cp a,5 jr z,.tenThousandsPlace cp a,6 jr z,.hundredThousandsPlace .millionsPlace ld a,1000000 >> 16 ld [H_POWEROFTEN],a ld a,(1000000 >> 8) & $FF ld [H_POWEROFTEN + 1],a ld a,1000000 & $FF ld [H_POWEROFTEN + 2],a call PrintNumber_PrintDigit call PrintNumber_AdvancePointer .hundredThousandsPlace ld a,100000 >> 16 ld [H_POWEROFTEN],a ld a,(100000 >> 8) & $FF ld [H_POWEROFTEN + 1],a ld a,100000 & $FF ld [H_POWEROFTEN + 2],a call PrintNumber_PrintDigit call PrintNumber_AdvancePointer .tenThousandsPlace xor a ld [H_POWEROFTEN],a ld a,10000 >> 8 ld [H_POWEROFTEN + 1],a ld a,10000 & $FF ld [H_POWEROFTEN + 2],a call PrintNumber_PrintDigit call PrintNumber_AdvancePointer .thousandsPlace xor a ld [H_POWEROFTEN],a ld a,1000 >> 8 ld [H_POWEROFTEN + 1],a ld a,1000 & $FF ld [H_POWEROFTEN + 2],a call PrintNumber_PrintDigit call PrintNumber_AdvancePointer .hundredsPlace xor a ld [H_POWEROFTEN],a xor a ld [H_POWEROFTEN + 1],a ld a,100 ld [H_POWEROFTEN + 2],a call PrintNumber_PrintDigit call PrintNumber_AdvancePointer .tensPlace ld c,00 ld a,[H_NUMTOPRINT + 2] .loop cp a,10 jr c,.underflow sub a,10 inc c jr .loop .underflow ld b,a ld a,[H_PASTLEADINGZEROES] or c ld [H_PASTLEADINGZEROES],a jr nz,.pastLeadingZeroes call PrintNumber_PrintLeadingZero jr .advancePointer .pastLeadingZeroes ld a,"0" add c ld [hl],a .advancePointer call PrintNumber_AdvancePointer .onesPlace ld a,"0" add b ld [hli],a pop de dec de pop bc ret ; prints a decimal digit ; This works by repeatedely subtracting a power of ten until the number becomes negative. ; The number of subtractions it took in order to make the number negative is the digit for the current number place. ; The last value that the number had before becoming negative is kept as the new value of the number. ; A more succinct description is that the number is divided by a power of ten ; and the quotient becomes the digit while the remainder is stored as the new value of the number. PrintNumber_PrintDigit:: ; 3d25 (0:3d25) ld c,0 ; counts number of loop iterations to determine the decimal digit .loop ld a,[H_POWEROFTEN] ld b,a ld a,[H_NUMTOPRINT] ld [H_SAVEDNUMTOPRINT],a cp b jr c,.underflow0 sub b ld [H_NUMTOPRINT],a ld a,[H_POWEROFTEN + 1] ld b,a ld a,[H_NUMTOPRINT + 1] ld [H_SAVEDNUMTOPRINT + 1],a cp b jr nc,.noBorrowForByte1 .byte1BorrowFromByte0 ld a,[H_NUMTOPRINT] or a,0 jr z,.underflow1 dec a ld [H_NUMTOPRINT],a ld a,[H_NUMTOPRINT + 1] .noBorrowForByte1 sub b ld [H_NUMTOPRINT + 1],a ld a,[H_POWEROFTEN + 2] ld b,a ld a,[H_NUMTOPRINT + 2] ld [H_SAVEDNUMTOPRINT + 2],a cp b jr nc,.noBorrowForByte2 .byte2BorrowFromByte1 ld a,[H_NUMTOPRINT + 1] and a jr nz,.finishByte2BorrowFromByte1 .byte2BorrowFromByte0 ld a,[H_NUMTOPRINT] and a jr z,.underflow2 dec a ld [H_NUMTOPRINT],a xor a .finishByte2BorrowFromByte1 dec a ld [H_NUMTOPRINT + 1],a ld a,[H_NUMTOPRINT + 2] .noBorrowForByte2 sub b ld [H_NUMTOPRINT + 2],a inc c jr .loop .underflow2 ld a,[H_SAVEDNUMTOPRINT + 1] ld [H_NUMTOPRINT + 1],a .underflow1 ld a,[H_SAVEDNUMTOPRINT] ld [H_NUMTOPRINT],a .underflow0 ld a,[H_PASTLEADINGZEROES] or c jr z,PrintNumber_PrintLeadingZero ld a,"0" add c ld [hl],a ld [H_PASTLEADINGZEROES],a ret ; prints a leading zero unless they are turned off in the flags PrintNumber_PrintLeadingZero:: ; 3d83 (0:3d83) bit 7,d ; print leading zeroes? ret z ld [hl],"0" ret ; increments the pointer unless leading zeroes are not being printed, ; the number is left-aligned, and no nonzero digits have been printed yet PrintNumber_AdvancePointer:: ; 3d89 (0:3d89) bit 7,d ; print leading zeroes? jr nz,.incrementPointer bit 6,d ; left alignment or right alignment? jr z,.incrementPointer ld a,[H_PASTLEADINGZEROES] and a ret z .incrementPointer inc hl ret ; calls a function from a table of function pointers ; INPUT: ; a = index within table ; hl = address of function pointer table CallFunctionInTable:: ; 3d97 (0:3d97) push hl push de push bc add a ld d,0 ld e,a add hl,de ld a,[hli] ld h,[hl] ld l,a ld de,.returnAddress push de jp [hl] .returnAddress pop bc pop de pop hl ret ; searches an array at hl for the value in a. ; skips (de − 1) bytes between reads, so to check every byte, de should be 1. ; if found, returns count in b and sets carry. IsInArray:: ; 3dab (0:3dab) ld b,0 ; fall through IsInArrayCummulativeCount:: ; 3dad (0:3dad) ld c,a .loop ld a,[hl] cp a,$FF jr z,.NotInArray cp c jr z,.InArray inc b add hl,de jr .loop .NotInArray and a ret .InArray scf ret Func_3dbe:: ; 3dbe (0:3dbe) call CleanLCD_OAM ld a, $1 ld [$cfcb], a call Func_3e08 call LoadScreenTilesFromBuffer2 call LoadTextBoxTilePatterns call GoPAL_SET_CF1C jr Delay3 ; calls GBPalWhiteOut and then Delay3 GBPalWhiteOutWithDelay3:: ; 3dd4 (0:3dd4) call GBPalWhiteOut Delay3:: ; 3dd7 (0:3dd7) ; call Delay with a parameter of 3 ld c,3 jp DelayFrames ; resets BGP and OBP0 to their usual colors GBPalNormal:: ; 3ddc (0:3ddc) ld a,%11100100 ld [rBGP],a ld a,%11010000 ld [rOBP0],a ret ; makes all palette colors white GBPalWhiteOut:: ; 3de5 (0:3de5) xor a ld [rBGP],a ld [rOBP0],a ld [rOBP1],a ret GoPAL_SET_CF1C:: ; 3ded (0:3ded) ld b,$ff GoPAL_SET:: ; 3def (0:3def) ld a,[$cf1b] and a ret z ld a,$45 jp Predef Func_3df9:: ; 3df9 (0:3df9) ld a, e cp $1b ld d, $0 jr nc, .asm_3e06 cp $a inc d jr nc, .asm_3e06 inc d .asm_3e06 ld [hl], d ret Func_3e08:: ; 3e08 (0:3e08) ld hl, $cfc4 ld a, [hl] push af res 0, [hl] push hl xor a ld [W_SPRITESETID], a ; $d3a8 call DisableLCD ld b, BANK(InitMapSprites) ld hl, InitMapSprites call Bankswitch call EnableLCD pop hl pop af ld [hl], a call LoadPlayerSpriteGraphics call LoadFontTilePatterns jp UpdateSprites GiveItem:: ; 3e2e (0:3e2e) ; Give player quantity c of item b, and copy item name to $cf4b. ; Set carry on success. If no room in bag, reset carry. ld a, b ld [$d11e], a ld [$cf91], a ld a, c ld [$cf96], a ld hl,wNumBagItems call AddItemToInventory ret nc call GetItemName ; $2fcf call CopyStringToCF4B scf ret GivePokemon:: ; 3e48 (0:3e48) ld a, b ld [$cf91], a ld a, c ld [$d127], a xor a ld [$cc49], a ld b, BANK(Func_4fda5) ld hl, Func_4fda5 jp Bankswitch GenRandom:: ; 3e5c (0:3e5c) ; store a random 8-bit value in a push hl push de push bc ld b,BANK(GenRandom_) ld hl,GenRandom_ call Bankswitch ld a,[H_RAND1] pop bc pop de pop hl ret Predef:: ; 3e6d (0:3e6d) ; runs a predefined ASM command, where the command ID is read from $D0B7 ; $3E6D grabs the ath pointer from PredefPointers and executes it ld [$CC4E],a ; save the predef routine's ID for later ld a,[H_LOADEDROMBANK] ld [$CF12],a ; save bank and call 13:7E49 push af ld a,BANK(GetPredefPointer) ld [H_LOADEDROMBANK],a ld [$2000],a call GetPredefPointer ; call the predef function ; ($D0B7 has the bank of the predef routine) ld a,[$D0B7] ld [H_LOADEDROMBANK],a ld [$2000],a ld de,.Return push de jp [hl] ; after the predefined function finishes it returns here .Return pop af ld [H_LOADEDROMBANK],a ld [$2000],a ret ;loads hl from cc4f, de from cc51, and bc from cc53 Load16BitRegisters:: ; 3e94 (0:3e94) ld a, [$cc4f] ld h, a ld a, [$cc50] ld l, a ld a, [$cc51] ld d, a ld a, [$cc52] ld e, a ld a, [$cc53] ld b, a ld a, [$cc54] ld c, a ret Func_3ead:: ; 3ead (0:3ead) ld b, BANK(Func_1eb0a) ld hl, Func_1eb0a jp Bankswitch Func_3eb5:: ; 3eb5 (0:3eb5) ld a, [H_LOADEDROMBANK] push af ld a, [H_CURRENTPRESSEDBUTTONS] bit 0, a jr z, .asm_3eea ld a, Bank(Func_469a0) ld [$2000], a ld [H_LOADEDROMBANK], a call Func_469a0 ld a, [$FF00+$ee] and a jr nz, .asm_3edd ld a, [$cd3e] ld [$2000], a ld [H_LOADEDROMBANK], a ld de, .asm_3eda push de jp [hl] .asm_3eda xor a jr .asm_3eec .asm_3edd ld b, BANK(Func_fb50) ld hl, Func_fb50 call Bankswitch ld a, [$FF00+$db] and a jr z, .asm_3eec .asm_3eea ld a, $ff .asm_3eec ld [$FF00+$eb], a pop af ld [$2000], a ld [H_LOADEDROMBANK], a ret Func_3ef5:: ; 3ef5 (0:3ef5) ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c ld hl, PointerTable_3f22 call Func_3f0f ld hl, $cf11 set 0, [hl] call DisplayTextID Func_3f05:: ; 3f05 (0:3f05) ld hl, W_MAPTEXTPTR ; $d36c ld a, [$FF00+$ec] ld [hli], a ld a, [$FF00+$ed] ld [hl], a ret Func_3f0f:: ; 3f0f (0:3f0f) ld a, [W_MAPTEXTPTR] ; $d36c ld [$FF00+$ec], a ld a, [$d36d] ld [$FF00+$ed], a ld a, l ld [W_MAPTEXTPTR], a ; $d36c ld a, h ld [$d36d], a ret PointerTable_3f22:: ; 3f22 (0:3f22) dw CardKeySuccessText ; id = 01 dw CardKeyFailText ; id = 02 dw Route15UpstairsLeftBinoculars ; id = 03 dw RedBedroomSNESText ; id = 04 dw UnnamedText_1e960 ; id = 05 dw UnnamedText_1e97e ; id = 06 dw UnnamedText_1e983 ; id = 07 dw OakLabEmailText ; id = 08 dw AerodactylFossilText ; id = 09 dw Route15UpstairsBinocularsText ; id = 0A dw KabutopsFossilText ; id = 0B dw GymStatueText1 ; id = 0C dw GymStatueText2 ; id = 0D dw BookcaseText ; id = 0E dw ViridianCityPokecenterBenchGuyText ; id = 0F dw PewterCityPokecenterBenchGuyText ; id = 10 dw CeruleanCityPokecenterBenchGuyText ; id = 11 dw LavenderCityPokecenterBenchGuyText ; id = 12 dw VermilionCityPokecenterBenchGuyText ; id = 13 dw CeladonCityPokecenterBenchGuyText ; id = 14 dw CeladonCityHotelText ; id = 15 dw FuchsiaCityPokecenterBenchGuyText ; id = 16 dw CinnabarIslandPokecenterBenchGuyText ; id = 17 dw SaffronCityPokecenterBenchGuyText ; id = 18 dw MtMoonPokecenterBenchGuyText ; id = 19 dw RockTunnelPokecenterBenchGuyText ; id = 1A dw UnnamedText_624c1 ; id = 1B dw UnnamedText_624c6 ; id = 1C dw UnnamedText_624cb ; id = 1D dw Unknown_62508 ; id = 1E dw Unknown_62529 ; id = 1F dw ViridianSchoolNotebook ; id = 20 dw ViridianSchoolBlackboard ; id = 21 dw UnnamedText_21865 ; id = 22 dw Unknown_21878 ; id = 23 dw FoundHiddenItemText ; id = 24 dw HiddenItemBagFullText ; id = 25 dw VermilionGymTrashText ; id = 26 dw IndigoPlateauHQText ; id = 27 dw GameCornerOutOfOrderText ; id = 28 dw GameCornerOutToLunchText ; id = 29 dw GameCornerSomeonesKeysText ; id = 2A dw FoundHiddenCoinsText ; id = 2B dw DroppedHiddenCoinsText ; id = 2C dw BillsHouseMonitorText ; id = 2D dw BillsHouseInitiatedText ; id = 2E dw BillsHousePokemonList ; id = 2F dw UnnamedText_1eb69 ; id = 30 dw CinnabarGymQuiz ; id = 31 dw GameCornerNoCoinsText ; id = 32 dw GameCornerCoinCaseText ; id = 33 dw LinkCableHelp ; id = 34 dw TMNotebook ; id = 35 dw FightingDojoText ; id = 36 dw UnnamedText_52a10 ; id = 37 dw UnnamedText_52a1d ; id = 38 dw NewBicycleText ; id = 39 dw IndigoPlateauStatues ; id = 3A dw VermilionGymTrashSuccesText1 ; id = 3B dw VermilionGymTrashSuccesText2 ; id = 3C dw VermilionGymTrashSuccesText3 ; id = 3D dw VermilionGymTrashFailText ; id = 3E dw TownMapText ; id = 3F dw BookOrSculptureText ; id = 40 dw ElevatorText ; id = 41 dw PokemonStuffText ; id = 42 SECTION "bank1",ROMX,BANK[$1] SpriteFacingAndAnimationTable: ; 4000 (1:4000) dw SpriteFacingDownAndStanding, SpriteOAMParameters ; facing down, walk animation frame 0 dw SpriteFacingDownAndWalking, SpriteOAMParameters ; facing down, walk animation frame 1 dw SpriteFacingDownAndStanding, SpriteOAMParameters ; facing down, walk animation frame 2 dw SpriteFacingDownAndWalking, SpriteOAMParametersFlipped ; facing down, walk animation frame 3 dw SpriteFacingUpAndStanding, SpriteOAMParameters ; facing up, walk animation frame 0 dw SpriteFacingUpAndWalking, SpriteOAMParameters ; facing up, walk animation frame 1 dw SpriteFacingUpAndStanding, SpriteOAMParameters ; facing up, walk animation frame 2 dw SpriteFacingUpAndWalking, SpriteOAMParametersFlipped ; facing up, walk animation frame 3 dw SpriteFacingLeftAndStanding, SpriteOAMParameters ; facing left, walk animation frame 0 dw SpriteFacingLeftAndWalking, SpriteOAMParameters ; facing left, walk animation frame 1 dw SpriteFacingLeftAndStanding, SpriteOAMParameters ; facing left, walk animation frame 2 dw SpriteFacingLeftAndWalking, SpriteOAMParameters ; facing left, walk animation frame 3 dw SpriteFacingLeftAndStanding, SpriteOAMParametersFlipped ; facing right, walk animation frame 0 dw SpriteFacingLeftAndWalking, SpriteOAMParametersFlipped ; facing right, walk animation frame 1 dw SpriteFacingLeftAndStanding, SpriteOAMParametersFlipped ; facing right, walk animation frame 2 dw SpriteFacingLeftAndWalking, SpriteOAMParametersFlipped ; facing right, walk animation frame 3 dw SpriteFacingDownAndStanding, SpriteOAMParameters ; --- dw SpriteFacingDownAndStanding, SpriteOAMParameters ; This table is used for sprites $a and $b. dw SpriteFacingDownAndStanding, SpriteOAMParameters ; All orientation and animation parameters dw SpriteFacingDownAndStanding, SpriteOAMParameters ; lead to the same result. Used for immobile dw SpriteFacingDownAndStanding, SpriteOAMParameters ; sprites like items on the ground dw SpriteFacingDownAndStanding, SpriteOAMParameters ; --- dw SpriteFacingDownAndStanding, SpriteOAMParameters dw SpriteFacingDownAndStanding, SpriteOAMParameters dw SpriteFacingDownAndStanding, SpriteOAMParameters dw SpriteFacingDownAndStanding, SpriteOAMParameters dw SpriteFacingDownAndStanding, SpriteOAMParameters dw SpriteFacingDownAndStanding, SpriteOAMParameters dw SpriteFacingDownAndStanding, SpriteOAMParameters dw SpriteFacingDownAndStanding, SpriteOAMParameters dw SpriteFacingDownAndStanding, SpriteOAMParameters dw SpriteFacingDownAndStanding, SpriteOAMParameters SpriteFacingDownAndStanding: ; 4080 (1:4080) db $00,$01,$02,$03 SpriteFacingDownAndWalking: ; 4084 (1:4084) db $80,$81,$82,$83 SpriteFacingUpAndStanding: ; 4088 (1:4088) db $04,$05,$06,$07 SpriteFacingUpAndWalking: ; 408c (1:408c) db $84,$85,$86,$87 SpriteFacingLeftAndStanding: ; 4090 (1:4090) db $08,$09,$0a,$0b SpriteFacingLeftAndWalking: ; 4094 (1:4094) db $88,$89,$8a,$8b SpriteOAMParameters: ; 4098 (1:4098) db $00,$00, $00 ; top left db $00,$08, $00 ; top right db $08,$00, OAMFLAG_CANBEMASKED ; bottom left db $08,$08, OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right SpriteOAMParametersFlipped: ; 40a4 (1:40a4) db $00,$08, OAMFLAG_VFLIPPED db $00,$00, OAMFLAG_VFLIPPED db $08,$08, OAMFLAG_VFLIPPED | OAMFLAG_CANBEMASKED db $08,$00, OAMFLAG_VFLIPPED | OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA Func_40b0: ; 40b0 (1:40b0) xor a ld [$cf0b], a ld [$d700], a ld [W_ISINBATTLE], a ; $d057 ld [$d35d], a ld [$cf10], a ld [H_CURRENTPRESSEDBUTTONS], a ld [$cc57], a ld [wFlags_0xcd60], a ld [$FF00+$9f], a ld [$FF00+$a0], a ld [$FF00+$a1], a call HasEnoughMoney jr c, .asm_40ff ld a, [wPlayerMoney] ; $d347 ld [$FF00+$9f], a ld a, [wPlayerMoney + 1] ; $d348 ld [$FF00+$a0], a ld a, [wPlayerMoney + 2] ; $d349 ld [$FF00+$a1], a xor a ld [$FF00+$a2], a ld [$FF00+$a3], a ld a, $2 ld [$FF00+$a4], a ld a, $d call Predef ; indirect jump to Func_f71e (f71e (3:771e)) ld a, [$FF00+$a2] ld [wPlayerMoney], a ; $d347 ld a, [$FF00+$a3] ld [wPlayerMoney + 1], a ; $d348 ld a, [$FF00+$a4] ld [wPlayerMoney + 2], a ; $d349 .asm_40ff ld hl, $d732 set 2, [hl] res 3, [hl] set 6, [hl] ld a, $ff ld [wJoypadForbiddenButtonsMask], a ld a, $7 jp Predef ; indirect jump to HealParty (f6a5 (3:76a5)) MewPicFront: ; 4112 (1:4112) INCBIN "pic/bmon/mew.pic" MewPicBack: ; 4205 (1:4205) INCBIN "pic/monback/mewb.pic" MewBaseStats: ; 425b (1:425b) db DEX_MEW ; pokedex id db 100 ; base hp db 100 ; base attack db 100 ; base defense db 100 ; base speed db 100 ; base special db PSYCHIC ; species type 1 db PSYCHIC ; species type 2 db 45 ; catch rate db 64 ; base exp yield db $55 ; sprite dimensions dw MewPicFront dw MewPicBack ; attacks known at lvl 0 db POUND db 0 db 0 db 0 db 3 ; growth rate ; include learnset directly db %11111111 db %11111111 db %11111111 db %11111111 db %11111111 db %11111111 db %11111111 db %11111111 ; usually spacing Func_4277: ; 4277 (1:4277) ld hl, $cce9 ld a, [hl] and a jr z, .asm_4284 dec [hl] ld hl, UnnamedText_42a7 ; $42a7 jr .asm_429f .asm_4284 dec hl ld a, [hl] and a ret z dec [hl] ld hl, UnnamedText_42ac ; $42ac jr nz, .asm_429f push hl ld a, [$cfe5] ld [$d0b5], a call GetMonHeader ld a, [W_MONHCATCHRATE] ld [$d007], a pop hl .asm_429f push hl call LoadScreenTilesFromBuffer1 pop hl jp PrintText UnnamedText_42a7: ; 42a7 (1:42a7) TX_FAR SafariZoneEatingText db "@" UnnamedText_42ac: ; 42ac (1:42ac) TX_FAR SafariZoneAngryText db "@" ; copy text of fixed length $b (like player name, rival name, mon names, ...) CopyFixedLengthText: ; 42b1 (1:42b1) ld bc, $b jp CopyData Func_42b7: ; 42b7 (1:42b7) ld hl, NintenText ld de, W_PLAYERNAME ; $d158 call CopyFixedLengthText ld hl, SonyText ld de, W_RIVALNAME ; $d34a call CopyFixedLengthText xor a ld [$FF00+$b0], a ld [$d358], a ld hl, $d732 ld [hli], a ld [hli], a ld [hl], a ld a, Bank(Func_7d8ea) ld [$c0ef], a ld [$c0f0], a Func_42dd: ; 42dd (1:42dd) call GBPalWhiteOut ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba xor a ld [$FF00+$d7], a ld [$FF00+$ae], a ld a, $40 ld [$FF00+$af], a ld a, $90 ld [$FF00+$b0], a call ClearScreen call DisableLCD call LoadFontTilePatterns ld hl, NintendoCopyrightLogoGraphics ; $60c8 ld de, $9410 ld bc, $50 ld a, BANK(NintendoCopyrightLogoGraphics) call FarCopyData2 ld hl, GamefreakLogoGraphics ; $61f8 ld de, $9460 ld bc, $90 ld a, BANK(GamefreakLogoGraphics) call FarCopyData2 ld hl, PokemonLogoGraphics ; $5380 ld de, $8800 ld bc, $600 ld a, BANK(PokemonLogoGraphics) call FarCopyData2 ; first chunk ld hl, PokemonLogoGraphics+$600 ; $5980 ld de, $9310 ld bc, $100 ld a, BANK(PokemonLogoGraphics) call FarCopyData2 ; second chunk ld hl, Version_GFX ; $402f IF _RED ld de,$9600 ; where to put redgreenversion.2bpp in the VRAM ld bc,$50 ; how big that file is ENDC IF _BLUE ld de,$9610 ; where to put blueversion.2bpp in the VRAM ld bc,$40 ; how big that file is ENDC ld a, BANK(Version_GFX) call FarCopyDataDouble call Func_4519 FuncCoord 2, 1 ; $c3b6 ld hl, Coord ld a, $80 ld de, $14 ld c, $6 .asm_434d ld b, $10 push hl .asm_4350 ld [hli], a inc a dec b jr nz, .asm_4350 pop hl add hl, de dec c jr nz, .asm_434d FuncCoord 2, 7 ; $c42e ld hl, Coord ld a, $31 ld b, $10 .asm_4361 ld [hli], a inc a dec b jr nz, .asm_4361 call Func_44dd ld hl, $c328 ld a, $74 ld [hl], a FuncCoord 2, 17 ; $c4f6 ld hl, Coord ld de, .titlescreenTilemap ; $437f ld b, $10 .asm_4377 ld a, [de] ld [hli], a inc de dec b jr nz, .asm_4377 jr .asm_438f .titlescreenTilemap ; 437f (1:437f) db $41,$42,$43,$42,$44,$42,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E ; ©'95.'96.'98 GAME FREAK inc. .asm_438f call SaveScreenTilesToBuffer2 call LoadScreenTilesFromBuffer2 call EnableLCD IF _RED ld a,CHARMANDER ; which Pokemon to show first on the title screen ENDC IF _BLUE ld a,SQUIRTLE ; which Pokemon to show first on the title screen ENDC ld [wWhichTrade], a ; $cd3d call Func_4524 ld a, $9b call Func_4533 call SaveScreenTilesToBuffer1 ld a, $40 ld [$FF00+$b0], a call LoadScreenTilesFromBuffer2 ld a, $98 call Func_4533 ld b, $6 call GoPAL_SET call GBPalNormal ld a, $e4 ld [rOBP0], a ; $FF00+$48 ld bc, $ffaf ; background scroll Y ld hl, .TitleScreenPokemonLogoYScrolls ; $43db .asm_43c6 ld a, [hli] and a jr z, .asm_43f4 ld d, a cp $fd jr nz, .asm_43d4 ld a, $bc call PlaySound .asm_43d4 ld a, [hli] ld e, a call .ScrollTitleScreenPokemonLogo jr .asm_43c6 .TitleScreenPokemonLogoYScrolls: ; 43db (1:43db) ; Controls the bouncing effect of the Pokemon logo on the title screen db -4,16 ; y scroll amount, number of times to scroll db 3,4 db -3,4 db 2,2 db -2,2 db 1,2 db -1,2 db 0 ; terminate list with 0 .ScrollTitleScreenPokemonLogo ; Scrolls the Pokemon logo on the title screen to create the bouncing effect ; Scrolls d pixels e times call DelayFrame ld a, [bc] add d ld [bc], a dec e jr nz, .ScrollTitleScreenPokemonLogo ret .asm_43f4 call LoadScreenTilesFromBuffer1 ld c, $24 call DelayFrames ld a, $bd call PlaySound call PrintGameVersionOnTitleScreen ld a, $90 ld [$FF00+$b0], a ld d, $90 .asm_440a ld h, d ld l, $40 call Func_44cf ld h, $0 ld l, $50 call Func_44cf ld a, d add $4 ld d, a and a jr nz, .asm_440a ld a, $9c call Func_4533 call LoadScreenTilesFromBuffer2 call PrintGameVersionOnTitleScreen call Delay3 call WaitForSoundToFinish ld a, MUSIC_TITLE_SCREEN ld [$c0ee], a call PlaySound xor a ld [$cc5b], a .asm_443b ld c, $c8 call CheckForUserInterruption jr c, .asm_4459 call Func_44c1 ld c, $1 call CheckForUserInterruption jr c, .asm_4459 ld b, BANK(Func_372ac) ld hl, Func_372ac call Bankswitch call Func_4496 jr .asm_443b .asm_4459 ld a, [wWhichTrade] ; $cd3d call PlayCry call WaitForSoundToFinish call GBPalWhiteOutWithDelay3 call CleanLCD_OAM xor a ld [$FF00+$b0], a inc a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba call ClearScreen ld a, $98 call Func_4533 ld a, $9c call Func_4533 call Delay3 call LoadGBPal ld a, [H_CURRENTPRESSEDBUTTONS] ld b, a and $46 cp $46 jp z, Func_448e jp MainMenu Func_448e: ; 448e (1:448e) ld b, BANK(Func_1c98a) ld hl, Func_1c98a jp Bankswitch Func_4496: ; 4496 (1:4496) ld a, $98 call Func_4533 .new ; Generate a new TitleMon. call GenRandom and $f ld c, a ld b, 0 ld hl, TitleMons add hl, bc ld a, [hl] ld hl, wWhichTrade ; $cd3d ; Can't be the same as before. cp [hl] jr z, .new ld [hl], a call Func_4524 ld a, $90 ld [$FF00+$b0], a ld d, 1 ; scroll out ld b, BANK(TitleScroll) ld hl, TitleScroll call Bankswitch ; indirect jump to TitleScroll (37258 (d:7258)) ret Func_44c1: ; 44c1 (1:44c1) ld d, 0 ; scroll in ld b, BANK(TitleScroll) ld hl, TitleScroll call Bankswitch ; indirect jump to TitleScroll (37258 (d:7258)) xor a ld [$FF00+$b0], a ret Func_44cf: ; 44cf (1:44cf) .wait ld a, [$FF00+$44] ; rLY cp l jr nz, .wait ld a, h ld [rSCX], a ; $FF00+$43 .wait2 ld a, [$FF00+$44] ; rLY cp h jr z, .wait2 ret Func_44dd: ; 44dd (1:44dd) ld hl, PlayerCharacterTitleGraphics ; $66a8 ld de, $8000 ld bc, $230 ld a, BANK(PlayerCharacterTitleGraphics) call FarCopyData2 call CleanLCD_OAM xor a ld [wWhichTrade], a ; $cd3d ld hl, wOAMBuffer ld de, $605a ld b, $7 .asm_44fa push de ld c, $5 .asm_44fd ld a, d ld [hli], a ld a, e ld [hli], a add $8 ld e, a ld a, [wWhichTrade] ; $cd3d ld [hli], a inc a ld [wWhichTrade], a ; $cd3d inc hl dec c jr nz, .asm_44fd pop de ld a, $8 add d ld d, a dec b jr nz, .asm_44fa ret Func_4519: ; 4519 (1:4519) ld hl, $9800 ld bc, $800 ld a, $7f jp FillMemory Func_4524: ; 4524 (1:4524) ld [$cf91], a ld [$d0b5], a FuncCoord 5, 10 ; $c46d ld hl, Coord call GetMonHeader jp LoadFrontSpriteByMonIndex Func_4533: ; 4533 (1:4533) ld [$FF00+$bd], a jp Delay3 Func_4538: ; 4538 (1:4538) xor a ld [$FF00+$b0], a call ClearScreen call LoadTextBoxTilePatterns Func_4541: ; 4541 (1:4541) ld de, NintendoCopyrightLogoGraphics ; $60c8 ld hl, $9600 ld bc, (BANK(NintendoCopyrightLogoGraphics) << 8) + $1c call CopyVideoData FuncCoord 2, 7 ; $c42e ld hl, Coord ld de, CopyrightTextString ; $4556 jp PlaceString CopyrightTextString: ; 4556 (1:4556) db $60,$61,$62,$61,$63,$61,$64,$7F,$65,$66,$67,$68,$69,$6A ; ©'95.'96.'98 Nintendo next $60,$61,$62,$61,$63,$61,$64,$7F,$6B,$6C,$6D,$6E,$6F,$70,$71,$72 ; ©'95.'96.'98 Creatures inc. next $60,$61,$62,$61,$63,$61,$64,$7F,$73,$74,$75,$76,$77,$78,$79,$7A,$7B ; ©'95.'96.'98 GAME FREAK inc. db "@" TitleMons: ; 4588 (1:4588) ; mons on the title screen are randomly chosen from here IF _RED db CHARMANDER db SQUIRTLE db BULBASAUR db WEEDLE db NIDORAN_M db SCYTHER db PIKACHU db CLEFAIRY db RHYDON db ABRA db GASTLY db DITTO db PIDGEOTTO db ONIX db PONYTA db MAGIKARP ENDC IF _GREEN db BULBASAUR db CHARMANDER db SQUIRTLE db CATERPIE db NIDORAN_F db PINSIR db PIKACHU db CLEFAIRY db RHYDON db ABRA db GASTLY db DITTO db PIDGEOTTO db ONIX db PONYTA db MAGIKARP ENDC IF _BLUE db SQUIRTLE db CHARMANDER db BULBASAUR db MANKEY db HITMONLEE db VULPIX db CHANSEY db AERODACTYL db JOLTEON db SNORLAX db GLOOM db POLIWAG db DODUO db PORYGON db GENGAR db RAICHU ENDC ; prints version text (red, blue) PrintGameVersionOnTitleScreen: ; 4598 (1:4598) FuncCoord 7, 8 ; $c447 ld hl, Coord ld de, VersionOnTitleScreenText ; $45a1 jp PlaceString ; these point to special tiles specifically loaded for that purpose and are not usual text VersionOnTitleScreenText: ; 45a1 (1:45a1) IF _RED db $60,$61,$7F,$65,$66,$67,$68,$69,"@" ; "Red Version" ENDC IF _BLUE db $61,$62,$63,$64,$65,$66,$67,$68,"@" ; "Blue Version" ENDC NintenText: ; 45aa (1:45aa) db "NINTEN@" SonyText: ; 45b1 (1:45b1) db "SONY@" ; loads pokemon data from one of multiple sources to $cf98 ; loads base stats to $d0b8 ; INPUT: ; [$cf92] = index of pokemon within party/box ; [$cc49] = source ; 00: player's party ; 01: enemy's party ; 02: current box ; 03: daycare ; OUTPUT: ; [$cf91] = pokemon ID ; $cf98 = base address of pokemon data ; $d0b8 = base address of base stats LoadMonData_: ; 45b6 (1:45b6) ld a,[W_DAYCAREMONDATA] ; daycare pokemon ID ld [$cf91],a ld a,[$cc49] cp a,$03 jr z,.GetMonHeader ld a,[wWhichPokemon] ld e,a ld hl, Func_39c37 ld b, BANK(Func_39c37) call Bankswitch ; get pokemon ID .GetMonHeader ld a,[$cf91] ld [$d0b5],a ; input for GetMonHeader call GetMonHeader ; load base stats to $d0b8 ld hl,W_PARTYMON1DATA ld bc,44 ld a,[$cc49] cp a,$01 jr c,.getMonEntry ld hl,wEnemyMons ; enemy pokemon 1 data jr z,.getMonEntry cp a,$02 ld hl,W_BOXMON1DATA ; box pokemon 1 data ld bc,33 jr z,.getMonEntry ld hl, W_DAYCAREMONDATA ; daycare pokemon data jr .copyMonData .getMonEntry ; add the product of the index and the size of each entry ld a,[wWhichPokemon] call AddNTimes .copyMonData ld de,$cf98 ld bc,44 jp CopyData ItemPrices: ; 4608 (1:4608) db $00,$00,$00 db $00,$12,$00 db $00,$06,$00 db $00,$02,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$10,$00 db $00,$00,$00 db $00,$00,$00 db $00,$01,$00 db $00,$02,$50 db $00,$02,$50 db $00,$02,$00 db $00,$02,$00 db $00,$30,$00 db $00,$25,$00 db $00,$15,$00 db $00,$07,$00 db $00,$03,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$05,$50 db $00,$03,$50 db $00,$00,$00 db $00,$21,$00 db $00,$21,$00 db $00,$21,$00 db $00,$98,$00 db $00,$98,$00 db $00,$98,$00 db $00,$98,$00 db $00,$98,$00 db $00,$48,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$09,$50 db $00,$21,$00 db $00,$00,$00 db $01,$00,$00 db $00,$98,$00 db $00,$10,$00 db $00,$06,$00 db $00,$15,$00 db $00,$40,$00 db $00,$07,$00 db $00,$05,$00 db $00,$07,$00 db $00,$06,$50 db $00,$00,$10 db $00,$02,$00 db $00,$03,$00 db $00,$03,$50 db $00,$00,$00 db $00,$00,$00 db $00,$05,$00 db $00,$05,$50 db $00,$03,$50 db $00,$03,$50 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 db $00,$00,$00 ItemNames: ; 472b (1:472b) db "MASTER BALL@" db "ULTRA BALL@" db "GREAT BALL@" db "POKé BALL@" db "TOWN MAP@" db "BICYCLE@" db "?????@" db "SAFARI BALL@" db "POKéDEX@" db "MOON STONE@" db "ANTIDOTE@" db "BURN HEAL@" db "ICE HEAL@" db "AWAKENING@" db "PARLYZ HEAL@" db "FULL RESTORE@" db "MAX POTION@" db "HYPER POTION@" db "SUPER POTION@" db "POTION@" db "BOULDERBADGE@" db "CASCADEBADGE@" db "THUNDERBADGE@" db "RAINBOWBADGE@" db "SOULBADGE@" db "MARSHBADGE@" db "VOLCANOBADGE@" db "EARTHBADGE@" db "ESCAPE ROPE@" db "REPEL@" db "OLD AMBER@" db "FIRE STONE@" db "THUNDERSTONE@" db "WATER STONE@" db "HP UP@" db "PROTEIN@" db "IRON@" db "CARBOS@" db "CALCIUM@" db "RARE CANDY@" db "DOME FOSSIL@" db "HELIX FOSSIL@" db "SECRET KEY@" db "?????@" db "BIKE VOUCHER@" db "X ACCURACY@" db "LEAF STONE@" db "CARD KEY@" db "NUGGET@" db "PP UP@" db "POKé DOLL@" db "FULL HEAL@" db "REVIVE@" db "MAX REVIVE@" db "GUARD SPEC.@" db "SUPER REPEL@" db "MAX REPEL@" db "DIRE HIT@" db "COIN@" db "FRESH WATER@" db "SODA POP@" db "LEMONADE@" db "S.S.TICKET@" db "GOLD TEETH@" db "X ATTACK@" db "X DEFEND@" db "X SPEED@" db "X SPECIAL@" db "COIN CASE@" db "OAK's PARCEL@" db "ITEMFINDER@" db "SILPH SCOPE@" db "POKé FLUTE@" db "LIFT KEY@" db "EXP.ALL@" db "OLD ROD@" db "GOOD ROD@" db "SUPER ROD@" db "PP UP@" db "ETHER@" db "MAX ETHER@" db "ELIXER@" db "MAX ELIXER@" db "B2F@" db "B1F@" db "1F@" db "2F@" db "3F@" db "4F@" db "5F@" db "6F@" db "7F@" db "8F@" db "9F@" db "10F@" db "11F@" db "B4F@" UnusedNames: ; 4a92 (1:4a92) db "かみなりバッヂ@" db "かいがらバッヂ@" db "おじぞうバッヂ@" db "はやぶさバッヂ@" db "ひんやりバッヂ@" db "なかよしバッヂ@" db "バラバッヂ@" db "ひのたまバッヂ@" db "ゴールドバッヂ@" db "たまご@" db "ひよこ@" db "ブロンズ@" db "シルバー@" db "ゴールド@" db "プチキャプテン@" db "キャプテン@" db "プチマスター@" db "マスター@" db "エクセレント" ; calculates the OAM data for all currently visible sprites and writes it to wOAMBuffer PrepareOAMData: ; 4b0f (1:4b0f) ld a, [$cfcb] dec a jr z, .asm_4b1e cp $ff ret nz ld [$cfcb], a jp ResetLCD_OAM .asm_4b1e xor a ld [$FF00+$90], a .asm_4b21 ld [$FF00+$8f], a ld d, $c1 ld a, [$FF00+$8f] ld e, a ld a, [de] ; c1x0 and a jp z, .asm_4bad inc e inc e ld a, [de] ; c1x2 read combined orientation and animation info ld [$d5cd], a cp $ff jr nz, .spriteVisible ; $ff -> offscreen, don't draw call Func_4bd1 jr .asm_4bad .spriteVisible cp $a0 jr c, .considerOrientation ; if >= $a0, ignore the sprite orientation and animation (by using a different conversion table) and $f add $10 jr .asm_4b48 .considerOrientation and $f ; the lower nybble contains orientation and animation info .asm_4b48 ld l, a push de inc d ld a, e add $5 ld e, a ld a, [de] ; c2x7 and $80 ld [$FF00+$94], a ; temp store bit 7 for later use in OAM flags (draws sprite behind background (used for grass)) pop de ld h, $0 ld bc, SpriteFacingAndAnimationTable add hl, hl add hl, hl add hl, bc ; skip to the table location determined by orientation and animation ld a, [hli] ld c, a ld a, [hli] ld b, a ld a, [hli] ld h, [hl] ld l, a call Func_4bd1 ld a, [$FF00+$90] ld e, a ld d, $c3 ; wOAMBuffer+x is buffer for OAM data .spriteTilesLoop ; loops 4 times for the 4 tiles a sprite consists of ld a, [$FF00+$92] ; temp for sprite Y position add $10 ; Y=16 is top of screen (Y=0 is invisible) add [hl] ; add Y offset from table ld [de], a ; write new sprite OAM Y position inc hl ld a, [$FF00+$91] ; temp for sprite X position add $8 ; X=8 is left of screen (X=0 is invisible) add [hl] ; add X offset from table inc e ld [de], a ; write new sprite OAM X position inc e ld a, [bc] ; read pattern number offset (accomodates orientation (offset 0,4 or 8) and animation (offset 0 or $80)) inc bc push bc ld b, a ld a, [$d5cd] ; temp copy of c1x2 swap a ; high nybble determines sprite used (0 is always player sprite, next are some npcs) and $f cp $b ; sprites $a and $b have no orientation or animation and therefore only 4 tiles jr nz, .calcTileOffset ; (instead of 12), so tile b's offset is a special case ld a, $7c ; = $a * 12 + 4 jr .doneCalcTileOffset .calcTileOffset sla a sla a ld c, a sla a add c ; a *= 12 (each sprite consists of 12 tiles) .doneCalcTileOffset add b ; add orientation and animation offset pop bc ld [de], a ; write OAM sprite pattern number inc hl inc e ld a, [hl] bit 1, a ; bit 1 is ignored for OAM, it's used here as an "always in foregroud" flag. jr z, .alwaysInForeground ld a, [$FF00+$94] ; load bit 7 (set to $80 if sprite is in grass and should be drawn behind it) or [hl] .alwaysInForeground inc hl ld [de], a ; write OAM sprite flags inc e bit 0, a ; test for OAMFLAG_ENDOFDATA jr z, .spriteTilesLoop ld a, e ld [$FF00+$90], a .asm_4bad ld a, [$FF00+$8f] add $10 cp $0 jp nz, .asm_4b21 ld a, [$FF00+$90] ld l, a ld h, $c3 ld de, $4 ld b, $a0 ld a, [$d736] bit 6, a ld a, $a0 jr z, .clearUnusedOAMEntriesLoop ld a, $90 .clearUnusedOAMEntriesLoop cp l ret z ld [hl], b add hl, de jr .clearUnusedOAMEntriesLoop Func_4bd1: ; 4bd1 (1:4bd1) inc e inc e ld a, [de] ; c1x4 ld [$FF00+$92], a inc e inc e ld a, [de] ; c1x6 ld [$FF00+$91], a ld a, $4 add e ld e, a ld a, [$FF00+$92] add $4 and $f0 ld [de], a ; c1xa (sprite Y pos (snapped to whole steps (?)) inc e ld a, [$FF00+$91] and $f0 ld [de], a ; c1xb (sprite X pos (snapped to whole steps (?)) ret ; copies DMA routine to HRAM. By GB specifications, all DMA needs to be done in HRAM (no other memory section is available during DMA) WriteDMACodeToHRAM: ; 4bed (1:4bed) ld c, $80 ld b, $a ld hl, DMARoutine .copyLoop ld a, [hli] ld [$ff00+c], a inc c dec b jr nz, .copyLoop ret ; this routine is copied to HRAM and executed there on every VBlank DMARoutine: ; 4bfb (1:4bfb) ld a, $c3 ld [$ff00+$46], a ; start DMA ld a, $28 .waitLoop ; wait for DMA to finish dec a jr nz, .waitLoop ret Func_4c05: ; 4c05 (1:4c05) FuncCoord 3, 10 ; $c46b ld hl, Coord ld b, $1 ld c, $b ld a, [W_ISINBATTLE] ; $d057 and a jr z, .asm_4c17 call TextBoxBorder jr .asm_4c1a .asm_4c17 call Func_5ab3 .asm_4c1a FuncCoord 4, 11 ; $c480 ld hl, Coord ld de, WaitingText ; $4c28 call PlaceString ld c, $32 jp DelayFrames WaitingText: ; 4c28 (1:4c28) db "Waiting...!@" _UpdateSprites: ; 4c34 (1:4c34) ld h, $c1 inc h ld a, $e ; $c20e .spriteLoop ld l, a sub $e ld c, a ld [H_CURRENTSPRITEOFFSET], a ld a, [hl] and a jr z, .skipSprite ; tests $c2Xe push hl push de push bc call .updateCurrentSprite pop bc pop de pop hl .skipSprite ld a, l add $10 ; move to next sprite cp $e ; test for overflow (back at $0e) jr nz, .spriteLoop ret .updateCurrentSprite ; 4c54 (1:4c54) cp $1 jp nz, UpdateNonPlayerSprite jp UpdatePlayerSprite UpdateNonPlayerSprite: ; 4c5c (1:4c5c) dec a swap a ld [$FF00+$93], a ; $10 * sprite# ld a, [$cf17] ; some sprite offset? ld b, a ld a, [H_CURRENTSPRITEOFFSET] cp b jr nz, .unequal jp Func_5236 .unequal jp Func_4ed1 Func_4c70: ; 4c70 (1:4c70) nop ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] add $0 ld l, a ld a, [hl] and a ret z ld a, l add $3 ld l, a ld a, [hli] call Func_4d72 ld a, [hli] add $4 add b and $f0 or c ld [$FF00+$90], a ld a, [hli] call Func_4d72 ld a, [hl] add b and $f0 or c ld [$FF00+$91], a ld a, l add $7 ld l, a xor a ld [hld], a ld [hld], a ld a, [$FF00+$91] ld [hld], a ld a, [$FF00+$90] ld [hl], a xor a Func_4ca5: ; 4ca5 (1:4ca5) ld [$FF00+$8f], a swap a ld e, a ld a, [H_CURRENTSPRITEOFFSET] cp e jp z, .asm_4d69 ld d, h ld a, [de] and a jp z, .asm_4d69 inc e inc e ld a, [de] inc a jp z, .asm_4d69 ld a, [H_CURRENTSPRITEOFFSET] add $a ld l, a inc e ld a, [de] call Func_4d72 inc e ld a, [de] add $4 add b and $f0 or c sub [hl] jr nc, .asm_4cd4 cpl inc a .asm_4cd4 ld [$FF00+$90], a push af rl c pop af ccf rl c ld b, $7 ld a, [hl] and $f jr z, .asm_4ce6 ld b, $9 .asm_4ce6 ld a, [$FF00+$90] sub b ld [$FF00+$92], a ld a, b ld [$FF00+$90], a jr c, .asm_4d01 ld b, $7 dec e ld a, [de] inc e and a jr z, .asm_4cfa ld b, $9 .asm_4cfa ld a, [$FF00+$92] sub b jr z, .asm_4d01 jr nc, .asm_4d69 .asm_4d01 inc e inc l ld a, [de] push bc call Func_4d72 inc e ld a, [de] add b and $f0 or c pop bc sub [hl] jr nc, .asm_4d14 cpl inc a .asm_4d14 ld [$FF00+$91], a push af rl c pop af ccf rl c ld b, $7 ld a, [hl] and $f jr z, .asm_4d26 ld b, $9 .asm_4d26 ld a, [$FF00+$91] sub b ld [$FF00+$92], a ld a, b ld [$FF00+$91], a jr c, .asm_4d41 ld b, $7 dec e ld a, [de] inc e and a jr z, .asm_4d3a ld b, $9 .asm_4d3a ld a, [$FF00+$92] sub b jr z, .asm_4d41 jr nc, .asm_4d69 .asm_4d41 ld a, [$FF00+$91] ld b, a ld a, [$FF00+$90] inc l cp b jr c, .asm_4d4e ld b, $c jr .asm_4d50 .asm_4d4e ld b, $3 .asm_4d50 ld a, c and b or [hl] ld [hl], a ld a, c inc l inc l ld a, [$FF00+$8f] ld de, DiagonalLines ; $4d85 add a add e ld e, a jr nc, .asm_4d62 inc d .asm_4d62 ld a, [de] or [hl] ld [hli], a inc de ld a, [de] or [hl] ld [hl], a .asm_4d69 ld a, [$FF00+$8f] inc a cp $10 jp nz, Func_4ca5 ret Func_4d72: ; 4d72 (1:4d72) and a ld b, $0 ld c, $0 jr z, .asm_4d84 ld c, $9 cp $ff jr z, .asm_4d83 ld c, $7 ld a, $0 .asm_4d83 ld b, a .asm_4d84 ret DiagonalLines: ; 4d85 (1:4d85) INCBIN "gfx/diagonal_lines.2bpp" Func_4da5: ; 4da5 (1:4da5) ret Func_4da6: ; 4da6 (1:4da6) call GBPalNormal ld a, $80 ld [W_OBTAINEDBADGES], a ld hl, W_FLAGS_D733 set 0, [hl] ld hl, W_NUMINPARTY xor a ld [hli], a dec a ld [hl], a ld a, $1 ld [$cf91], a ld a, $14 ld [W_CURENEMYLVL], a xor a ld [$cc49], a ld [W_CURMAP], a call AddPokemonToParty ld a, $1 ld [W_CUROPPONENT], a ld a, $2c call Predef ld a, $1 ld [$cfcb], a ld [H_AUTOBGTRANSFERENABLED], a jr Func_4da6 PickupItem: ; 4de1 (1:4de1) call EnableAutoTextBoxDrawing ld a, [H_DOWNARROWBLINKCNT2] ; $FF00+$8c ld b, a ld hl, W_MISSABLEOBJECTLIST .missableObjectsListLoop ld a, [hli] cp $ff ret z cp b jr z, .isMissable inc hl jr .missableObjectsListLoop .isMissable ld a, [hl] ld [$FF00+$db], a ld hl, W_MAPSPRITEEXTRADATA ld a, [H_DOWNARROWBLINKCNT2] ; $FF00+$8c dec a add a ld d, $0 ld e, a add hl, de ; seek to item data of found item ld a, [hl] ; read Item type ld b, a ld c, 1 ; quantity is 1 call GiveItem jr nc, .BagFull ld a, [$FF00+$db] ld [$cc4d], a ld a, $11 call Predef ; indirect jump to RemoveMissableObject (f1d7 (3:71d7)) ld a, $1 ld [$cc3c], a ld hl, FoundItemText jr .printText .BagFull ld hl, NoMoreRoomForItemText .printText call PrintText ret FoundItemText: ; 4e26 (1:4e26) TX_FAR _FoundItemText db $0B db "@" NoMoreRoomForItemText: ; 4e2c (1:4e2c) TX_FAR _NoMoreRoomForItemText db "@" UpdatePlayerSprite: ; 4e31 (1:4e31) ld a, [wSpriteStateData2] and a jr z, .asm_4e41 cp $ff jr z, .asm_4e4a dec a ld [wSpriteStateData2], a jr .asm_4e4a .asm_4e41 FuncCoord 8, 9 ; $c45c ld a, [Coord] ld [$FF00+$93], a cp $60 jr c, .asm_4e50 .asm_4e4a ld a, $ff ld [$c102], a ret .asm_4e50 call Func_4c70 ld h, $c1 ld a, [wWalkCounter] ; $cfc5 and a jr nz, .asm_4e90 ld a, [$d528] bit 2, a jr z, .asm_4e65 xor a jr .asm_4e86 .asm_4e65 bit 3, a jr z, .asm_4e6d ld a, $4 jr .asm_4e86 .asm_4e6d bit 1, a jr z, .asm_4e75 ld a, $8 jr .asm_4e86 .asm_4e75 bit 0, a jr z, .asm_4e7d ld a, $c jr .asm_4e86 .asm_4e7d xor a ld [$c107], a ld [$c108], a jr .asm_4eab .asm_4e86 ld [$c109], a ld a, [$cfc4] bit 0, a jr nz, .asm_4e7d .asm_4e90 ld a, [$d736] bit 7, a jr nz, .asm_4eb6 ld a, [H_CURRENTSPRITEOFFSET] add $7 ld l, a ld a, [hl] inc a ld [hl], a cp $4 jr nz, .asm_4eab xor a ld [hl], a inc hl ld a, [hl] inc a and $3 ld [hl], a .asm_4eab ld a, [$c108] ld b, a ld a, [$c109] add b ld [$c102], a .asm_4eb6 ld a, [$FF00+$93] ld c, a ld a, [W_GRASSTILE] cp c ld a, $0 jr nz, .asm_4ec3 ld a, $80 .asm_4ec3 ld [$c207], a ret Func_4ec7: ; 4ec7 (1:4ec7) push bc push af ld a, [$ffda] ld c, a pop af add c ld l, a pop bc ret Func_4ed1: ; 4ed1 (1:4ed1) ld a, [H_CURRENTSPRITEOFFSET] swap a dec a add a ld hl, W_MAPSPRITEDATA ; $d4e4 add l ld l, a ld a, [hl] ; read movement byte 2 ld [wCurSpriteMovement2], a ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] ld l, a inc l ld a, [hl] ; c1x1 and a jp z, InitializeSpriteStatus call CheckSpriteAvailability ret c ; if sprite is invisible, on tile >=$60, in grass or player is currently walking ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] ld l, a inc l ld a, [hl] ; c1x1 bit 7, a jp nz, InitializeSpriteFacingDirection ; c1x1 >= $80 ld b, a ld a, [$cfc4] bit 0, a jp nz, notYetMoving ld a, b cp $2 jp z, UpdateSpriteMovementDelay ; c1x1 == 2 cp $3 jp z, UpdateSpriteInWalkingAnimation ; c1x1 == 3 ld a, [wWalkCounter] ; $cfc5 and a ret nz ; don't do anything yet if player is currently moving (redundant, already tested in CheckSpriteAvailability) call InitializeSpriteScreenPosition ld h, $c2 ld a, [H_CURRENTSPRITEOFFSET] add $6 ld l, a ld a, [hl] ; c2x6: movement byte 1 inc a jr z, .asm_4f59 ; value $FF inc a jr z, .asm_4f59 ; value $FE dec a ld [hl], a ; (temporarily) increment movement byte 1 dec a push hl ld hl, $cf0f dec [hl] ; decrement $cf0f pop hl ld de, $cc5b call LoadDEPlusA ; a = [$cc5b + movement byte 1] cp $e0 jp z, ChangeFacingDirection cp $ff jr nz, .asm_4f4b ld [hl], a ; reset movement byte 1 to initial value ld hl, $d730 res 0, [hl] xor a ld [$cd38], a ld [$cd3a], a ret .asm_4f4b cp $fe jr nz, .asm_4f5f ld [hl], $1 ; set movement byte 1 to $1 ld de, $cc5b call LoadDEPlusA ; a = [$cc5b + $fe] (?) jr .asm_4f5f .asm_4f59 call getTileSpriteStandsOn call GenRandom .asm_4f5f ld b, a ld a, [wCurSpriteMovement2] cp $d0 jr z, .moveDown ; movement byte 2 = $d0 forces down cp $d1 jr z, .moveUp ; movement byte 2 = $d1 forces up cp $d2 jr z, .moveLeft ; movement byte 2 = $d2 forces left cp $d3 jr z, .moveRight ; movement byte 2 = $d3 forces right ld a, b cp $40 ; a < $40: down (or left) jr nc, .notDown ld a, [wCurSpriteMovement2] cp $2 jr z, .moveLeft ; movement byte 2 = $2 only allows left or right .moveDown ld de, 2*20 add hl, de ; move tile pointer two rows down ld de, $100 ld bc, $400 jr TryWalking .notDown cp $80 ; $40 <= a < $80: up (or right) jr nc, .notUp ld a, [wCurSpriteMovement2] cp $2 jr z, .moveRight ; movement byte 2 = $2 only allows left or right .moveUp ld de, -2*20 ; $ffd8 add hl, de ; move tile pointer two rows up ld de, $ff00 ld bc, $804 jr TryWalking .notUp cp $c0 ; $80 <= a < $c0: left (or up) jr nc, .notLeft ld a, [wCurSpriteMovement2] cp $1 jr z, .moveUp ; movement byte 2 = $1 only allows up or down .moveLeft dec hl dec hl ; move tile pointer two columns left ld de, $ff ld bc, $208 jr TryWalking .notLeft ; $c0 <= a: right (or down) ld a, [wCurSpriteMovement2] cp $1 jr z, .moveDown ; movement byte 2 = $1 only allows up or down .moveRight inc hl inc hl ; move tile pointer two columns right ld de, $1 ld bc, $10c jr TryWalking ; changes facing direction by zeroing the movement delta and calling TryWalking ChangeFacingDirection: ; 4fc8 (1:4fc8) ld de, $0 ; fall through ; b: direction (1,2,4 or 8) ; c: new facing direction (0,4,8 or $c) ; d: Y movement delta (-1, 0 or 1) ; e: X movement delta (-1, 0 or 1) ; hl: pointer to tile the sprite would wlak onto ; set carry on failure, clears carry on success TryWalking: ; 4fcb (1:4fcb) push hl ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] add $9 ld l, a ld [hl], c ; c1x9 (update facing direction) ld a, [H_CURRENTSPRITEOFFSET] add $3 ld l, a ld [hl], d ; c1x3 (update Y movement delta) inc l inc l ld [hl], e ; c1x5 (update X movement delta) pop hl push de ld c, [hl] ; read tile to walk onto call CanWalkOntoTile pop de ret c ; cannot walk there (reinitialization of delay values already done) ld h, $c2 ld a, [H_CURRENTSPRITEOFFSET] add $4 ld l, a ld a, [hl] ; c2x4: Y position add d ld [hli], a ; update Y position ld a, [hl] ; c2x5: X position add e ld [hl], a ; update X position ld a, [H_CURRENTSPRITEOFFSET] ld l, a ld [hl], $10 ; c2x0=16: walk animation counter dec h inc l ld [hl], $3 ; c1x1: set movement status to walking jp UpdateSpriteImage ; update the walking animation parameters for a sprite that is currently walking UpdateSpriteInWalkingAnimation: ; 4ffe (1:4ffe) ld a, [H_CURRENTSPRITEOFFSET] add $7 ld l, a ld a, [hl] ; c1x7 (counter until next walk animation frame) inc a ld [hl], a ; c1x7 += 1 cp $4 jr nz, .noNextAnimationFrame xor a ld [hl], a ; c1x7 = 0 inc l ld a, [hl] ; c1x8 (walk animation frame) inc a and $3 ld [hl], a ; advance to next animation frame every 4 ticks (16 ticks total for one step) .noNextAnimationFrame ld a, [H_CURRENTSPRITEOFFSET] add $3 ld l, a ld a, [hli] ; c1x3 (movement Y delta) ld b, a ld a, [hl] ; c1x4 (screen Y position) add b ld [hli], a ; update screen Y position ld a, [hli] ; c1x5 (movement X delta) ld b, a ld a, [hl] ; c1x6 (screen X position) add b ld [hl], a ; update screen X position ld a, [H_CURRENTSPRITEOFFSET] ld l, a inc h ld a, [hl] ; c2x0 (walk animantion counter) dec a ld [hl], a ; update walk animantion counter ret nz ld a, $6 ; walking finished, update state add l ld l, a ld a, [hl] ; c2x6 (movement byte 1) cp $fe jr nc, .initNextMovementCounter ; values $fe and $ff ld a, [H_CURRENTSPRITEOFFSET] inc a ld l, a dec h ld [hl], $1 ; c1x1 = 1 (movement status ready) ret .initNextMovementCounter call GenRandom ld a, [H_CURRENTSPRITEOFFSET] add $8 ld l, a ld a, [H_RAND1] ; $FF00+$d3 and $7f ld [hl], a ; c2x8: set next movement delay to a random value in [0,$7f] dec h ; note that value 0 actually makes the delay $100 (bug?) ld a, [H_CURRENTSPRITEOFFSET] inc a ld l, a ld [hl], $2 ; c1x1 = 2 (movement status) inc l inc l xor a ld b, [hl] ; c1x3 (movement Y delta) ld [hli], a ; reset movement Y delta inc l ld c, [hl] ; c1x5 (movement X delta) ld [hl], a ; reset movement X delta ret ; update delay value (c2x8) for sprites in the delayed state (c1x1) UpdateSpriteMovementDelay: ; 5057 (1:5057) ld h, $c2 ld a, [H_CURRENTSPRITEOFFSET] add $6 ld l, a ld a, [hl] ; c2x6: movement byte 1 inc l inc l cp $fe jr nc, .tickMoveCounter ; values $fe or $ff ld [hl], $0 jr .moving .tickMoveCounter dec [hl] ; c2x8: frame counter until next movement jr nz, notYetMoving .moving dec h ld a, [H_CURRENTSPRITEOFFSET] inc a ld l, a ld [hl], $1 ; c1x1 = 1 (mark as ready to move) notYetMoving: ; 5073 (1:5073) ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] add $8 ld l, a ld [hl], $0 ; c1x8 = 0 (walk animation frame) jp UpdateSpriteImage InitializeSpriteFacingDirection: ; 507f (1:507f) ld a, [$d72d] bit 5, a jr nz, notYetMoving res 7, [hl] ld a, [$d52a] bit 3, a jr z, .notFacingDown ld c, $0 ; make sprite face down jr .facingDirectionDetermined .notFacingDown bit 2, a jr z, .notFacingUp ld c, $4 ; make sprite face up jr .facingDirectionDetermined .notFacingUp bit 1, a jr z, .notFacingRight ld c, $c ; make sprite face right jr .facingDirectionDetermined .notFacingRight ld c, $8 ; make sprite face left .facingDirectionDetermined ld a, [H_CURRENTSPRITEOFFSET] add $9 ld l, a ld [hl], c ; c1x9: set facing direction jr notYetMoving InitializeSpriteStatus: ; 50ad (1:50ad) ld [hl], $1 ; $c1x1: set movement status to ready inc l ld [hl], $ff ; $c1x2: set sprite image to $ff (invisible/off screen) inc h ld a, [H_CURRENTSPRITEOFFSET] add $2 ld l, a ld a, $8 ld [hli], a ; $c2x2: set Y displacement to 8 ld [hl], a ; $c2x3: set X displacement to 8 ret ; calculates the spprite's scrren position form its map position and the player position InitializeSpriteScreenPosition: ; 50bd (1:50bd) ld h, $c2 ld a, [H_CURRENTSPRITEOFFSET] add $4 ld l, a ld a, [W_YCOORD] ; $d361 ld b, a ld a, [hl] ; c2x4 (Y position + 4) sub b ; relative to player position swap a ; * 16 sub $4 ; - 4 dec h ld [hli], a ; c1x4 (screen Y position) inc h ld a, [W_XCOORD] ; $d362 ld b, a ld a, [hli] ; c2x6 (X position + 4) sub b ; relative to player position swap a ; * 16 dec h ld [hl], a ; c1x6 (screen X position) ret ; tests if sprite is off screen or otherwise unable to do anything CheckSpriteAvailability: ; 50dc (1:50dc) ld a, $12 call Predef ; indirect jump to IsMissableObjectHidden (f1a6 (3:71a6)) ld a, [$FF00+$e5] and a jp nz, .spriteInvisible ld h, $c2 ld a, [H_CURRENTSPRITEOFFSET] add $6 ld l, a ld a, [hl] ; c2x6: movement byte 1 cp $fe jr c, .skipXVisibilityTest ; movement byte 1 < $fe ld a, [H_CURRENTSPRITEOFFSET] add $4 ld l, a ld b, [hl] ; c2x4: Y pos (+4) ld a, [W_YCOORD] ; $d361 cp b jr z, .skipYVisibilityTest jr nc, .spriteInvisible ; above screen region add $8 ; screen is 9 tiles high cp b jr c, .spriteInvisible ; below screen region .skipYVisibilityTest inc l ld b, [hl] ; c2x5: X pos (+4) ld a, [W_XCOORD] ; $d362 cp b jr z, .skipXVisibilityTest jr nc, .spriteInvisible ; left of screen region add $9 ; screen is 10 tiles wide cp b jr c, .spriteInvisible ; right of screen region .skipXVisibilityTest call getTileSpriteStandsOn ld d, $60 ld a, [hli] cp d jr nc, .spriteInvisible ; standing on tile with ID >=$60 (bottom left tile) ld a, [hld] cp d jr nc, .spriteInvisible ; standing on tile with ID >=$60 (bottom right tile) ld bc, -20 ; $ffec add hl, bc ; go back one row of tiles ld a, [hli] cp d jr nc, .spriteInvisible ; standing on tile with ID >=$60 (top left tile) ld a, [hl] cp d jr c, .spriteVisible ; standing on tile with ID >=$60 (top right tile) .spriteInvisible ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] add $2 ld l, a ld [hl], $ff ; c1x2 scf jr .done .spriteVisible ld c, a ld a, [wWalkCounter] ; $cfc5 and a jr nz, .done ; if player is currently walking, we're done call UpdateSpriteImage inc h ld a, [H_CURRENTSPRITEOFFSET] add $7 ld l, a ld a, [W_GRASSTILE] cp c ld a, $0 jr nz, .notInGrass ld a, $80 .notInGrass ld [hl], a ; c2x7 and a .done ret UpdateSpriteImage: ; 5157 (1:5157) ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] add $8 ld l, a ld a, [hli] ; c1x8: walk animation frame ld b, a ld a, [hl] ; c1x9: facing direction add b ld b, a ld a, [$FF00+$93] ; current sprite offset add b ld b, a ld a, [H_CURRENTSPRITEOFFSET] add $2 ld l, a ld [hl], b ; c1x2: sprite to display ret ; tests if sprite can walk the specified direction ; b: direction (1,2,4 or 8) ; c: ID of tile the sprite would walk onto ; d: Y movement delta (-1, 0 or 1) ; e: X movement delta (-1, 0 or 1) ; set carry on failure, clears carry on success CanWalkOntoTile: ; 516e (1:516e) ld h, $c2 ld a, [H_CURRENTSPRITEOFFSET] add $6 ld l, a ld a, [hl] ; c2x6 (movement byte 1) cp $fe jr nc, .canMove ; values $fe and $ff and a ret .canMove ld a, [W_TILESETCOLLISIONPTR] ld l, a ld a, [W_TILESETCOLLISIONPTR+1] ld h, a .tilePassableLoop ld a, [hli] cp $ff jr z, .impassable cp c jr nz, .tilePassableLoop ld h, $c2 ld a, [H_CURRENTSPRITEOFFSET] add $6 ld l, a ld a, [hl] ; $c2x6 (movement byte 1) inc a jr z, .impassable ; if $ff, no movement allowed (however, changing direction is) ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] add $4 ld l, a ld a, [hli] ; c1x4 (screen Y pos) add $4 ; align to blocks (Y pos is always 4 pixels off) add d ; add Y delta cp $80 ; if value is >$80, the destination is off screen (either $81 or $FF underflow) jr nc, .impassable ; don't walk off screen inc l ld a, [hl] ; c1x6 (screen X pos) add e ; add X delta cp $90 ; if value is >$90, the destination is off screen (either $91 or $FF underflow) jr nc, .impassable ; don't walk off screen push de push bc call Func_4c70 pop bc pop de ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] add $c ld l, a ld a, [hl] ; c1xc (forbidden directions flags(?)) and b ; check against chosen direction (1,2,4 or 8) jr nz, .impassable ; direction forbidden, don't go there ld h, $c2 ld a, [H_CURRENTSPRITEOFFSET] add $2 ld l, a ld a, [hli] ; c2x2 (sprite Y displacement, initialized at $8, keep track of where a sprite did go) bit 7, d ; check if going upwards (d=$ff) jr nz, .upwards add d cp $5 jr c, .impassable ; if c2x2+d < 5, don't go ;bug: this tests probably were supposed to prevent sprites jr .checkHorizontal ; from walking out too far, but this line makes sprites get stuck .upwards ; whenever they walked upwards 5 steps sub $1 ; on the other hand, the amount a sprite can walk out to the jr c, .impassable ; if d2x2 == 0, don't go ; right of bottom is not limited (until the counter overflows) .checkHorizontal ld d, a ld a, [hl] ; c2x3 (sprite X displacement, initialized at $8, keep track of where a sprite did go) bit 7, e ; check if going left (e=$ff) jr nz, .left add e cp $5 ; compare, but no conditional jump like in the vertical check above (bug?) jr .passable .left sub $1 jr c, .impassable ; if d2x3 == 0, don't go .passable ld [hld], a ; update c2x3 ld [hl], d ; update c2x2 and a ; clear carry (marking success) ret .impassable ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] inc a ld l, a ld [hl], $2 ; c1x1 = 2 (set movement status to delayed) inc l inc l xor a ld [hli], a ; c1x3 = 0 (clear Y movement delta) inc l ld [hl], a ; c1x5 = 0 (clear X movement delta) inc h ld a, [H_CURRENTSPRITEOFFSET] add $8 ld l, a call GenRandom ld a, [H_RAND1] ; $FF00+$d3 and $7f ld [hl], a ; c2x8: set next movement delay to a random value in [0,$7f] (again with delay $100 if value is 0) scf ; set carry (marking failure to walk) ret ; calculates the tile pointer pointing to the tile the current sprite stancs on ; this is always the lower left tile of the 2x2 tile blocks all sprites are snapped to ; hl: output pointer getTileSpriteStandsOn: ; 5207 (1:5207) ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] add $4 ld l, a ld a, [hli] ; c1x4: screen Y position add $4 ; align to 2*2 tile blocks (Y position is always off 4 pixels to the top) and $f0 ; in case object is currently moving srl a ; screen Y tile * 4 ld c, a ld b, $0 inc l ld a, [hl] ; c1x6: screen Y position srl a srl a srl a ; screen X tile add $14 ; screen X tile + 20 ld d, $0 ld e, a ld hl, wTileMap add hl, bc add hl, bc add hl, bc add hl, bc add hl, bc add hl, de ; wTileMap + 20*(screen Y tile + 1) + screen X tile ret ; loads [de+a] into a LoadDEPlusA: ; 522f (1:522f) add e ld e, a jr nc, .noCarry inc d .noCarry ld a, [de] ret Func_5236: ; 5236 (1:5236) ld a, [$d730] bit 7, a ret z ld hl, $d72e bit 7, [hl] set 7, [hl] jp z, Func_52a6 ld hl, $cc97 ld a, [$cd37] add l ld l, a jr nc, .asm_5251 inc h .asm_5251 ld a, [hl] cp $40 jr nz, .asm_525f call Func_52b2 ld c, $4 ld a, $fe jr .asm_5289 .asm_525f cp $0 jr nz, .asm_526c call Func_52b2 ld c, $0 ld a, $2 jr .asm_5289 .asm_526c cp $80 jr nz, .asm_5279 call Func_52b7 ld c, $8 ld a, $fe jr .asm_5289 .asm_5279 cp $c0 jr nz, .asm_5286 call Func_52b7 ld c, $c ld a, $2 jr .asm_5289 .asm_5286 cp $ff ret .asm_5289 ld b, a ld a, [hl] add b ld [hl], a ld a, [H_CURRENTSPRITEOFFSET] add $9 ld l, a ld a, c ld [hl], a call Func_52c3 ld hl, $cf18 dec [hl] ret nz ld a, $8 ld [$cf18], a ld hl, $cd37 inc [hl] ret Func_52a6: ; 52a6 (1:52a6) xor a ld [$cd37], a ld a, $8 ld [$cf18], a jp Func_52c3 Func_52b2: ; 52b2 (1:52b2) ld a, $4 ld b, a jr asm_52ba Func_52b7: ; 52b7 (1:52b7) ld a, $6 ld b, a asm_52ba: ; 52ba (1:52ba) ld hl, wSpriteStateData1 ld a, [H_CURRENTSPRITEOFFSET] add l add b ld l, a ret Func_52c3: ; 52c3 (1:52c3) ld hl, wSpriteStateData2 ld a, [H_CURRENTSPRITEOFFSET] add $e ld l, a ld a, [hl] dec a swap a ld b, a ld hl, wSpriteStateData1 ld a, [H_CURRENTSPRITEOFFSET] add $9 ld l, a ld a, [hl] cp $0 jr z, .asm_52ea cp $4 jr z, .asm_52ea cp $8 jr z, .asm_52ea cp $c jr z, .asm_52ea ret .asm_52ea add b ld b, a ld [$FF00+$e9], a call Func_5301 ld hl, wSpriteStateData1 ld a, [H_CURRENTSPRITEOFFSET] add $2 ld l, a ld a, [$FF00+$e9] ld b, a ld a, [$FF00+$ea] add b ld [hl], a ret Func_5301: ; 5301 (1:5301) ld a, [H_CURRENTSPRITEOFFSET] add $7 ld l, a ld a, [hl] inc a ld [hl], a cp $4 ret nz xor a ld [hl], a inc l ld a, [hl] inc a and $3 ld [hl], a ld [$FF00+$ea], a ret Func_5317: ; 5317 (1:5317) ld c, $50 call DelayFrames call ClearScreen call UpdateSprites call LoadFontTilePatterns call LoadHpBarAndStatusTilePatterns call Func_5ae6 FuncCoord 3, 8 ; $c443 ld hl, Coord ld b, $2 ld c, $c call Func_5ab3 FuncCoord 4, 10 ; $c46c ld hl, Coord ld de, PleaseWaitString ; $550f call PlaceString ld hl, W_NUMHITS ; $d074 xor a ld [hli], a ld [hl], $50 Func_5345: ; 5345 ld hl, $d152 ld a, $fd ld b, $6 .asm_534c ld [hli], a dec b jr nz, .asm_534c ld hl, $d141 ld a, $fd ld b, $7 .asm_5357 ld [hli], a dec b jr nz, .asm_5357 ld b, $a .asm_535d call GenRandom cp $fd jr nc, .asm_535d ld [hli], a dec b jr nz, .asm_535d ld hl, wTileMapBackup ld a, $fd ld [hli], a ld [hli], a ld [hli], a ld b, $c8 xor a .asm_5373 ld [hli], a dec b jr nz, .asm_5373 ld hl, W_GRASSRATE ; $d887 ld bc, $1a9 .asm_537d xor a ld [hli], a dec bc ld a, b or c jr nz, .asm_537d ld hl, W_PARTYMONEND ; $d16a ld de, $c512 ld bc, $0 .asm_538d inc c ld a, c cp $fd jr z, .asm_53a9 ld a, b dec a jr nz, .asm_539c ld a, c cp $d jr z, .asm_53b2 .asm_539c inc hl ld a, [hl] cp $fe jr nz, .asm_538d ld a, c ld [de], a inc de ld [hl], $ff jr .asm_538d .asm_53a9 ld a, $ff ld [de], a inc de ld bc, $100 jr .asm_538d .asm_53b2 ld a, $ff ld [de], a call Func_227f ld a, [$FF00+$aa] cp $2 jr nz, .asm_53d2 call Delay3 xor a ld [$FF00+$ac], a ld a, $81 ld [$FF00+$2], a call DelayFrame xor a ld [$FF00+$ac], a ld a, $81 ld [$FF00+$2], a .asm_53d2 call Delay3 ld a, $8 ld [rIE], a ; $FF00+$ff ld hl, $d141 ld de, wTileMapBackup2 ld bc, $11 call Func_216f ld a, $fe ld [de], a ld hl, $d152 ld de, $d893 ld bc, $1a8 call Func_216f ld a, $fe ld [de], a ld hl, wTileMapBackup ld de, $c5d0 ld bc, $c8 call Func_216f ld a, $d ld [rIE], a ; $FF00+$ff ld a, $ff call PlaySound ld a, [$FF00+$aa] cp $2 jr z, .asm_5431 ld hl, wTileMapBackup2 .asm_5415 ld a, [hli] and a jr z, .asm_5415 cp $fd jr z, .asm_5415 cp $fe jr z, .asm_5415 dec hl ld de, $d148 ld c, $a .asm_5427 ld a, [hli] cp $fe jr z, .asm_5427 ld [de], a inc de dec c jr nz, .asm_5427 .asm_5431 ld hl, $d896 .asm_5434 ld a, [hli] and a jr z, .asm_5434 cp $fd jr z, .asm_5434 cp $fe jr z, .asm_5434 dec hl ld de, W_GRASSRATE ; $d887 ld c, $b .asm_5446 ld a, [hli] cp $fe jr z, .asm_5446 ld [de], a inc de dec c jr nz, .asm_5446 ld de, wEnemyPartyCount ; $d89c ld bc, $194 .asm_5456 ld a, [hli] cp $fe jr z, .asm_5456 ld [de], a inc de dec bc ld a, b or c jr nz, .asm_5456 ld de, wTileMapBackup ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA) ld c, $2 .asm_546a ld a, [de] inc de and a jr z, .asm_546a cp $fd jr z, .asm_546a cp $fe jr z, .asm_546a cp $ff jr z, .asm_5489 push hl push bc ld b, $0 dec a ld c, a add hl, bc ld a, $fe ld [hl], a pop bc pop hl jr .asm_546a .asm_5489 ld hl, W_PARTYMON6DATA + W_PARTYMON1_MOVE4PP - W_PARTYMON1DATA ; $d267 dec c jr nz, .asm_546a ld de, $c5d0 ld hl, W_WATERRATE ; $d8a4 ld c, $2 .asm_5497 ld a, [de] inc de and a jr z, .asm_5497 cp $fd jr z, .asm_5497 cp $fe jr z, .asm_5497 cp $ff jr z, .asm_54b6 push hl push bc ld b, $0 dec a ld c, a add hl, bc ld a, $fe ld [hl], a pop bc pop hl jr .asm_5497 .asm_54b6 ld hl, $d9a0 dec c jr nz, .asm_5497 ld a, $ac ld [$cf8d], a ld a, $d9 ld [$cf8e], a xor a ld [$cc38], a ld a, $ff call PlaySound ld a, [$FF00+$aa] cp $2 ld c, $42 call z, DelayFrames ld a, [W_ISLINKBATTLE] ; $d12b cp $3 ld a, $32 ld [W_ISLINKBATTLE], a ; $d12b jr nz, .asm_5506 ld a, $4 ld [W_ISLINKBATTLE], a ; $d12b ld a, $e1 ld [W_CUROPPONENT], a ; $d059 call ClearScreen call Delay3 ld hl, W_OPTIONS ; $d355 res 7, [hl] ld a, $2c call Predef ; indirect jump to Func_3ef18 (3ef18 (f:6f18)) ld a, $7 call Predef ; indirect jump to HealParty (f6a5 (3:76a5)) jp Func_577d .asm_5506 ld c, BANK(Music_GameCorner) ld a, MUSIC_GAME_CORNER call PlayMusic jr Func_551c PleaseWaitString: ; 550f (1:550f) db "PLEASE WAIT!@" Func_551c: ld hl, PointerTable_5a5b ; $5a5b ld b, $0 ld a, [$cc38] cp $ff jp z, Func_42dd add a ld c, a add hl, bc ld a, [hli] ld h, [hl] ld l, a jp [hl] Func_5530 call ClearScreen call Func_5ae6 call Func_57f2 call Func_57a2 xor a ld hl, $cc3d ld [hli], a ld [hli], a ld [hli], a ld [hl], a ld [$cc37], a ld [$cc26], a ld [$cc2a], a ld [$cc34], a inc a ld [$cc42], a jp .asm_55dc .asm_5557 xor a ld [$cc37], a inc a ld [$cc49], a ld a, $a1 ld [$cc29], a ld a, [$d89c] ld [$cc28], a ld a, $9 ld [$cc24], a ld a, $1 ld [$cc25], a .asm_5574 ld hl, $fff6 set 1, [hl] call HandleMenuInput ld hl, $fff6 res 1, [hl] and a jp z, .asm_565b bit 0, a jr z, .asm_55b0 ; 0x5587 $27 ld a, [$cc28] ld c, a ld a, [$cc26] cp c jr c, .asm_559a ; 0x5591 $7 ld a, [$cc28] dec a ld [$cc26], a .asm_559a ld a, $1 ld [$d11b], a ld hl, Func_39bd5 ld b, $e call Bankswitch ld hl, wEnemyMons call Func_57d6 jp .asm_565b .asm_55b0 bit 5, a jr z, .asm_55d4 ; 0x55b2 $20 xor a ld [$cc49], a ld a, [$cc30] ld l, a ld a, [$cc31] ld h, a ld a, [$cc27] ld [hl], a ld a, [$cc26] ld b, a ld a, [$d163] dec a cp b jr nc, .asm_55dc ; 0x55cd $d ld [$cc26], a jr .asm_55dc ; 0x55d2 $8 .asm_55d4 bit 7, a jp z, .asm_565b jp .asm_572f .asm_55dc xor a ld [$cc49], a ld [$cc37], a ld a, $91 ld [$cc29], a ld a, [$d163] ld [$cc28], a ld a, $1 ld [$cc24], a ld a, $1 ld [$cc25], a ld hl, $c3b5 ld bc, $0601 call ClearScreenArea .asm_5601 ld hl, $fff6 set 1, [hl] call HandleMenuInput ld hl, $fff6 res 1, [hl] and a jr nz, .asm_5614 ; 0x560f $3 jp .asm_565b .asm_5614 bit 0, a jr z, .asm_562e ; 0x5616 $16 jp .asm_5665 ld a, $4 ld [$d11b], a ld hl, Func_39bd5 ld b, $e call Bankswitch call Func_57d6 jp .asm_565b .asm_562e bit 4, a jr z, .asm_5654 ; 0x5630 $22 ld a, $1 ld [$cc49], a ld a, [$cc30] ld l, a ld a, [$cc31] ld h, a ld a, [$cc27] ld [hl], a ld a, [$cc26] ld b, a ld a, [$d89c] dec a cp b jr nc, .asm_5651 ; 0x564c $3 ld [$cc26], a .asm_5651 jp .asm_5557 .asm_5654 bit 7, a jr z, .asm_565b ; 0x5656 $3 jp .asm_572f .asm_565b ld a, [$cc49] and a jp z, .asm_5601 jp .asm_5574 .asm_5665 call SaveScreenTilesToBuffer1 call PlaceUnfilledArrowMenuCursor ld a, [$cc28] ld c, a ld a, [$cc26] cp c jr c, .asm_5679 ; 0x5673 $4 ld a, [$cc28] dec a .asm_5679 push af ld hl, $c4b8 ld b, $2 ld c, $12 call Func_5ab3 ld hl, $c4e2 ld de, .statsTrade call PlaceString xor a ld [$cc26], a ld [$cc2a], a ld [$cc34], a ld [$cc28], a ld a, $10 ld [$cc24], a .asm_569f ld a, $7f ld [$c4eb], a ld a, $13 ld [$cc29], a ld a, $1 ld [$cc25], a call HandleMenuInput bit 4, a jr nz, .asm_56c3 ; 0x56b3 $e bit 1, a jr z, .asm_56df ; 0x56b7 $26 .asm_56b9 pop af ld [$cc26], a call LoadScreenTilesFromBuffer1 jp .asm_55dc .asm_56c3 ld a, $7f ld [$c4e1], a ld a, $23 ld [$cc29], a ld a, $b ld [$cc25], a call HandleMenuInput bit 5, a jr nz, .asm_569f ; 0x56d7 $c6 bit 1, a jr nz, .asm_56b9 ; 0x56db $dc jr .asm_56f9 ; 0x56dd $1a .asm_56df pop af ld [$cc26], a ld a, $4 ld [$d11b], a ld hl, Func_39bd5 ld b, $e call Bankswitch call Func_57d6 call LoadScreenTilesFromBuffer1 jp .asm_55dc .asm_56f9 call PlaceUnfilledArrowMenuCursor pop af ld [$cc26], a ld [$cd3d], a ld [$cc42], a call Func_226e ld a, [$cc3d] cp $f jp z, Func_551c ld [$cd3e], a call Func_57c7 ld a, $1 ld [$cc38], a jp Func_551c .statsTrade db "STATS TRADE@" .asm_572f ld a, [$cc26] ld b, a ld a, [$cc28] cp b jp nz, .asm_565b ld a, [$cc30] ld l, a ld a, [$cc31] ld h, a ld a, $7f ld [hl], a .asm_5745 ld a, $ed ld [$c4e1], a .asm_574a call GetJoypadStateLowSensitivity ld a, [$ff00+$b5] and a jr z, .asm_574a ; 0x5750 $f8 bit 0, a jr nz, .asm_5769 ; 0x5754 $13 bit 6, a jr z, .asm_574a ; 0x5758 $f0 ld a, $7f ld [$c4e1], a ld a, [$d163] dec a ld [$cc26], a jp .asm_55dc .asm_5769 ld a, $ec ld [$c4e1], a ld a, $f ld [$cc42], a call Func_226e ld a, [$cc3d] cp $f jr nz, .asm_5745 ; 0x577b $c8 Func_577d: ; 577d (1:577d) call GBPalWhiteOutWithDelay3 ld hl, $cfc4 ld a, [hl] push af push hl res 0, [hl] xor a ld [$d72d], a dec a ld [$d42f], a call LoadMapData ld b, BANK(Func_c335) ld hl, Func_c335 call Bankswitch pop hl pop af ld [hl], a call GBFadeIn2 ret Func_57a2: ld hl, $c4d7 ld a, $7e ld bc, $0031 call FillMemory ld hl, $c4cc ld b, $1 ld c, $9 call Func_5ab3 ld hl, $c4e2 ld de, CancelTextString jp PlaceString CancelTextString: db "CANCEL@" Func_57c7: ld a, [$cc3d] ld hl, $c455 ld bc, $0014 call AddNTimes ld [hl], $ec ret Func_57d6: ld a, [$cc26] ld [wWhichPokemon], a ld a, $36 call Predef ld a, $37 call Predef call GBPalNormal call Func_5ae6 call Func_57f2 jp Func_57a2 Func_57f2: ld hl, wTileMap ld b, $6 ld c, $12 call Func_5ab3 ld hl, $c440 ld b, $6 ld c, $12 call Func_5ab3 ld hl, $c3a5 ld de, W_PLAYERNAME call PlaceString ld hl, $c445 ld de, $d887 call PlaceString ld hl, $c3b6 ld de, $d164 call Func_5827 ld hl, $c456 ld de, $d89d Func_5827: ld c, $0 .asm_5829 ld a, [de] cp $ff ret z ld [$d11e], a push bc push hl push de push hl ld a, c ld [$ff00+$95], a call GetMonName pop hl call PlaceString pop de inc de pop hl ld bc, $0014 add hl, bc pop bc inc c jr .asm_5829 ; 0x5847 $e0 Func_5849: ld c, $64 call DelayFrames xor a ld [$cc43], a ld [$cc3e], a ld [$cc37], a ld [$cc34], a ld hl, $c490 ld b, $4 ld c, $12 call Func_5ab3 ld a, [$cd3d] ld hl, $d164 ld c, a ld b, $0 add hl, bc ld a, [hl] ld [$d11e], a call GetMonName ld hl, $cd6d ld de, $cd3f ld bc, $000b call CopyData ld a, [$cd3e] ld hl, $d89d ld c, a ld b, $0 add hl, bc ld a, [hl] ld [$d11e], a call GetMonName ld hl, SSAnne8AfterBattleText2 ld bc, $c4b9 call TextCommandProcessor call SaveScreenTilesToBuffer1 ld hl, $c436 ld bc, $080b ld a, $5 ld [$d12c], a ld a, $14 ld [$d125], a call DisplayTextBoxID call LoadScreenTilesFromBuffer1 ld a, [$cc26] and a jr z, .asm_58d9 ; 0x58b9 $1e ld a, $1 ld [$cc42], a ld hl, $c490 ld b, $4 ld c, $12 call Func_5ab3 ld hl, $c4b9 ld de, TradeCanceled call PlaceString call Func_226e jp Func_5a18 .asm_58d9 ld a, $2 ld [$cc42], a call Func_226e ld a, [$cc3d] dec a jr nz, .asm_58fd ; 0x58e5 $16 ld hl, $c490 ld b, $4 ld c, $12 call Func_5ab3 ld hl, $c4b9 ld de, TradeCanceled call PlaceString jp Func_5a18 .asm_58fd ld a, [$cd3d] ld hl, W_PARTYMON1OT ; OT names of player call SkipFixedLengthTextEntries ld de, $cd41 ld bc, $000b call CopyData ld hl, $d16b ld a, [$cd3d] ld bc, $002c call AddNTimes ld bc, $000c add hl, bc ld a, [hli] ld [$cd4c], a ld a, [hl] ld [$cd4d], a ld a, [$cd3e] ld hl, W_ENEMYMON1OT ; OT names of other player call SkipFixedLengthTextEntries ld de, $cd4e ld bc, $000b call CopyData ld hl, wEnemyMons ld a, [$cd3e] ld bc, $002c call AddNTimes ld bc, $000c add hl, bc ld a, [hli] ld [$cd59], a ld a, [hl] ld [$cd5a], a ld a, [$cd3d] ld [wWhichPokemon], a ld hl, $d164 ld b, $0 ld c, a add hl, bc ld a, [hl] ld [$cd3d], a xor a ld [$cf95], a call RemovePokemon ld a, [$cd3e] ld c, a ld [wWhichPokemon], a ld hl, $d89d ld d, $0 ld e, a add hl, de ld a, [hl] ld [$cf91], a ld hl, wEnemyMons ld a, c ld bc, $002c call AddNTimes ld de, $cf98 ld bc, $002c call CopyData call AddEnemyMonToPlayerParty ld a, [$d163] dec a ld [wWhichPokemon], a ld a, $1 ld [$ccd4], a ld a, [$cd3e] ld hl, $d89d ld b, $0 ld c, a add hl, bc ld a, [hl] ld [$cd3e], a ld a, $a ld [wMusicHeaderPointer], a ld a, $2 ld [$c0f0], a ld a, MUSIC_SAFARI_ZONE ld [$c0ee], a call PlaySound ld c, $64 call DelayFrames call ClearScreen call LoadHpBarAndStatusTilePatterns xor a ld [$cc5b], a ld a, [$ff00+$aa] cp $1 jr z, .asm_59d9 ; 0x59d0 $7 ld a, $38 call Predef jr .asm_59de ; 0x59d7 $5 .asm_59d9 ld a, $2f call Predef .asm_59de ld hl, Func_3ad0e ld b, Bank(Func_3ad0e) call Bankswitch ; Indirect jump to Func_3ad0e call ClearScreen call Func_5ae6 call Func_226e ld c, $28 call DelayFrames ld hl, $c490 ld b, $4 ld c, $12 call Func_5ab3 ld hl, $c4b9 ld de, TradeCompleted call PlaceString ld a, $50 call Predef ld c, $32 call DelayFrames xor a ld [$cc38], a jp Func_5345 Func_5a18: ld c, $64 call DelayFrames xor a ld [$cc38], a jp Func_551c SSAnne8AfterBattleText2: ; 5a24 (1:5a24) TX_FAR _SSAnne8AfterBattleText2 db "@" TradeCompleted: db "Trade completed!@" TradeCanceled: db "Too bad! The trade" next "was canceled!@" PointerTable_5a5b: ; 5a5b (1:5a5b) dw Func_5530 dw Func_5849 Func_5a5f: ; 5a5f (1:5a5f) ld a, [W_ISLINKBATTLE] ; $d12b cp $2 jr z, .asm_5a75 cp $3 jr z, .asm_5a75 cp $5 ret nz ld a, $4d call Predef ; indirect jump to Func_5aaf (5aaf (1:5aaf)) jp InitGame .asm_5a75 call Func_5317 ld hl, Tset15_GFX ld a, h ld [$d52f], a ld a, l ld [$d52e], a ld a, Bank(Tset15_GFX) ld [$d52b], a ld hl, $17d1 ld a, h ld [$d531], a ld a, l ld [$d530], a xor a ld [W_GRASSRATE], a ; $d887 inc a ld [W_ISLINKBATTLE], a ; $d12b ld [$FF00+$b5], a ld a, $a ld [wMusicHeaderPointer], a ld a, BANK(Music_Celadon) ld [$c0f0], a ld a, MUSIC_CELADON ld [$c0ee], a jp PlaySound Func_5aaf: ; 5aaf (1:5aaf) ret Func_5ab0: call Load16BitRegisters Func_5ab3: ; 5ab3 (1:5ab3) push hl ld a, $78 ld [hli], a inc a call Func_5ae0 inc a ld [hl], a pop hl ld de, $14 add hl, de .asm_5ac2 push hl ld a, $7b ld [hli], a ld a, $7f call Func_5ae0 ld [hl], $77 pop hl ld de, $14 add hl, de dec b jr nz, .asm_5ac2 ld a, $7c ld [hli], a ld a, $76 call Func_5ae0 ld [hl], $7d ret Func_5ae0: ; 5ae0 (1:5ae0) ld d, c .asm_5ae1 ld [hli], a dec d jr nz, .asm_5ae1 ret Func_5ae6: ; 5ae6 (1:5ae6) ld de, TrainerInfoTextBoxTileGraphics ; $7b98 ld hl, $9760 ld bc, (BANK(TrainerInfoTextBoxTileGraphics) << 8) +$09 jp CopyVideoData MainMenu: ; 5af2 (1:5af2) ; Check save file call Func_5bff xor a ld [$D08A],a inc a ld [$D088],a call Func_609e jr nc,.next0 ; Predef 52 loads the save from SRAM to RAM ld a,$52 call Predef .next0 ld c,20 call DelayFrames xor a ld [$D12B],a ld hl,$CC2B ld [hli],a ld [hli],a ld [hli],a ld [hl],a ld [$D07C],a ld hl,$D72E res 6,[hl] call ClearScreen call GoPAL_SET_CF1C call LoadTextBoxTilePatterns call LoadFontTilePatterns ld hl,$D730 set 6,[hl] ld a,[$D088] cp a,1 jr z,.next1 FuncCoord 0,0 ld hl,Coord ld b,6 ld c,13 call TextBoxBorder FuncCoord 2,2 ld hl,Coord ld de,ContinueText ; $5d7e call PlaceString jr .next2 .next1 FuncCoord 0,0 ld hl,Coord ld b,4 ld c,13 call TextBoxBorder FuncCoord 2,2 ld hl,Coord ld de,NewGameText ; $5d87 call PlaceString .next2 ld hl,$D730 res 6,[hl] call UpdateSprites ; OAM? xor a ld [$CC26],a ld [$CC2A],a ld [$CC34],a inc a ld [$CC25],a inc a ld [$CC24],a ld a,$B ld [$CC29],a ld a,[$D088] ld [$CC28],a call HandleMenuInput bit 1,a jp nz,Func_42dd ; load title screen (gfx and arrangement) ld c,20 call DelayFrames ld a,[$CC26] ld b,a ld a,[$D088] cp a,2 jp z,.next3 inc b ; adjust MenuArrow_Counter .next3 ld a,b and a jr z,.next4 ; if press_A on Continue cp a,1 jp z,Func_5d52 ; if press_A on NewGame call DisplayOptionMenu ; if press_a on Options ld a,1 ld [$D08A],a jp .next0 .next4 call Func_5db5 ld hl,$D126 set 5,[hl] .next6 xor a ld [H_NEWLYPRESSEDBUTTONS],a ld [H_NEWLYRELEASEDBUTTONS],a ld [H_CURRENTPRESSEDBUTTONS],a call GetJoypadState ld a,[H_CURRENTPRESSEDBUTTONS] bit 0,a jr nz,.next5 bit 1,a jp nz,.next0 jr .next6 .next5 call GBPalWhiteOutWithDelay3 call ClearScreen ld a,4 ld [$D52A],a ld c,10 call DelayFrames ld a,[$D5A2] and a jp z,Func_5d5f ld a,[W_CURMAP] ; map ID cp a,HALL_OF_FAME jp nz,Func_5d5f xor a ld [$D71A],a ld hl,$D732 set 2,[hl] call Func_62ce jp Func_5d5f Func_5bff: ; 5bff (1:5bff) ld a,1 ld [$D358],a ld a,3 ld [$D355],a ret Func_5c0a: ; 5c0a (1:5c0a) xor a ld [$d358], a ld hl, $d72e set 6, [hl] ld hl, TextTerminator_6b20 ; $6b20 call PrintText call SaveScreenTilesToBuffer1 ld hl, UnnamedText_5d43 ; $5d43 call PrintText FuncCoord 5, 5 ; $c409 ld hl, Coord ld b, $6 ld c, $d call TextBoxBorder call UpdateSprites FuncCoord 7, 7 ; $c433 ld hl, Coord ld de, TradeCenterText ; $5d97 call PlaceString xor a ld [$cd37], a ld [$d72d], a ld hl, wTopMenuItemY ; $cc24 ld a, $7 ld [hli], a ld a, $6 ld [hli], a xor a ld [hli], a inc hl ld a, $2 ld [hli], a inc a ld [hli], a xor a ld [hl], a .asm_5c52 call HandleMenuInput and $3 add a add a ld b, a ld a, [wCurrentMenuItem] ; $cc26 add b add $d0 ld [$cc42], a ld [$cc43], a .asm_5c66 call Func_2247 ld a, [$cc3d] ld b, a and $f0 cp $d0 jr z, .asm_5c7d ld a, [$cc3e] ld b, a and $f0 cp $d0 jr nz, .asm_5c66 .asm_5c7d ld a, b and $c jr nz, .asm_5c8b ld a, [$cc42] and $c jr z, .asm_5c52 jr .asm_5ca1 .asm_5c8b ld a, [$cc42] and $c jr z, .asm_5c98 ld a, [$FF00+$aa] cp $2 jr z, .asm_5ca1 .asm_5c98 ld a, b ld [$cc42], a and $3 ld [wCurrentMenuItem], a ; $cc26 .asm_5ca1 ld a, [$FF00+$aa] cp $2 jr nz, .asm_5cb1 call DelayFrame call DelayFrame ld a, $81 ld [$FF00+$2], a .asm_5cb1 ld b, $7f ld c, $7f ld d, $ec ld a, [$cc42] and $8 jr nz, .asm_5ccc ld a, [wCurrentMenuItem] ; $cc26 cp $2 jr z, .asm_5ccc ld c, d ld d, b dec a jr z, .asm_5ccc ld b, c ld c, d .asm_5ccc ld a, b FuncCoord 6, 7 ; $c432 ld [Coord], a ld a, c FuncCoord 6, 9 ; $c45a ld [Coord], a ld a, d FuncCoord 6, 11 ; $c482 ld [Coord], a ld c, $28 call DelayFrames call LoadScreenTilesFromBuffer1 ld a, [$cc42] and $8 jr nz, .asm_5d2d ld a, [wCurrentMenuItem] ; $cc26 cp $2 jr z, .asm_5d2d xor a ld [$d700], a ld a, [wCurrentMenuItem] ; $cc26 and a ld a, TRADE_CENTER jr nz, .asm_5cfc ld a, BATTLE_CENTER .asm_5cfc ld [$d72d], a ld hl, UnnamedText_5d48 ; $5d48 call PrintText ld c, $32 call DelayFrames ld hl, $d732 res 1, [hl] ld a, [W_ANIMATIONID] ; $d07c ld [$d71a], a call Func_62ce ld c, $14 call DelayFrames xor a ld [wMenuJoypadPollCount], a ; $cc34 ld [$cc42], a inc a ld [W_ISLINKBATTLE], a ; $d12b ld [$cc47], a jr Func_5d5f .asm_5d2d xor a ld [wMenuJoypadPollCount], a ; $cc34 call Delay3 call Func_72d7 ld hl, UnnamedText_5d4d ; $5d4d call PrintText ld hl, $d72e res 6, [hl] ret UnnamedText_5d43: ; 5d43 (1:5d43) TX_FAR _UnnamedText_5d43 db "@" UnnamedText_5d48: ; 5d48 (1:5d48) TX_FAR _UnnamedText_5d48 db "@" UnnamedText_5d4d: ; 5d4d (1:5d4d) TX_FAR _UnnamedText_5d4d db "@" Func_5d52: ; 5d52 (1:5d52) ld hl, $d732 res 1, [hl] call OakSpeech ld c, $14 call DelayFrames Func_5d5f: ; 5d5f (1:5d5f) xor a ld [H_NEWLYPRESSEDBUTTONS], a ld [H_CURRENTPRESSEDBUTTONS], a ld [$FF00+$b5], a ld [$d72d], a ld hl, $d732 set 0, [hl] call ResetPlayerSpriteData ld c, $14 call DelayFrames ld a, [$cc47] and a ret nz jp EnterMap ContinueText: ; 5d7e (1:5d7e) db "CONTINUE", $4e NewGameText: ; 5d87 (1:5d87) db "NEW GAME", $4e db "OPTION@" TradeCenterText: ; 5d97 (1:5d97) db "TRADE CENTER", $4e db "COLOSSEUM", $4e db "CANCEL@" Func_5db5: ; 5db5 (1:5db5) xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba FuncCoord 4, 7 ; $c430 ld hl, Coord ld b, $8 ld c, $e call TextBoxBorder FuncCoord 5, 9 ; $c459 ld hl, Coord ld de, SaveScreenInfoText ; $5e6a call PlaceString FuncCoord 12, 9 ; $c460 ld hl, Coord ld de, W_PLAYERNAME ; $d158 call PlaceString FuncCoord 17, 11 ; $c48d ld hl, Coord call Func_5e2f FuncCoord 16, 13 ; $c4b4 ld hl, Coord call Func_5e42 FuncCoord 13, 15 ; $c4d9 ld hl, Coord call Func_5e55 ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld c, $1e jp DelayFrames Func_5def: ; 5def (1:5def) xor a ld [H_AUTOBGTRANSFERENABLED], a ld hl, $c3a4 ld b, $8 ld c, $e call TextBoxBorder call LoadTextBoxTilePatterns call UpdateSprites ld hl, $c3cd ld de, SaveScreenInfoText call PlaceString ld hl, $c3d4 ld de, W_PLAYERNAME call PlaceString ld hl, $c401 call Func_5e2f ld hl, $c428 call Func_5e42 ld hl, $c44d call Func_5e55 ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ld c, $1e jp DelayFrames Func_5e2f: ; 5e2f (1:5e2f) push hl ld hl, W_OBTAINEDBADGES ; $d356 ld b, $1 call CountSetBits pop hl ld de, $d11e ld bc, $102 jp PrintNumber Func_5e42: ; 5e42 (1:5e42) push hl ld hl, wPokedexOwned ; $d2f7 ld b, $13 call CountSetBits pop hl ld de, $d11e ld bc, $103 jp PrintNumber Func_5e55: ; 5e55 (1:5e55) ld de, $da41 ld bc, $103 call PrintNumber ld [hl], $6d inc hl ld de, $da43 ld bc, $8102 jp PrintNumber SaveScreenInfoText: ; 5e6a (1:5e6a) db "PLAYER" next "BADGES " next "#DEX " next "TIME@" DisplayOptionMenu: ; 5e8a (1:5e8a) FuncCoord 0,0 ld hl,Coord ld b,3 ld c,18 call TextBoxBorder FuncCoord 0,5 ld hl,Coord ld b,3 ld c,18 call TextBoxBorder FuncCoord 0,10 ld hl,Coord ld b,3 ld c,18 call TextBoxBorder FuncCoord 1,1 ld hl,Coord ld de,TextSpeedOptionText call PlaceString FuncCoord 1,6 ld hl,Coord ld de,BattleAnimationOptionText call PlaceString FuncCoord 1,11 ld hl,Coord ld de,BattleStyleOptionText call PlaceString FuncCoord 2,16 ld hl,Coord ld de,OptionMenuCancelText call PlaceString xor a ld [wCurrentMenuItem],a ld [wLastMenuItem],a inc a ld [$d358],a ld [$cd40],a ld a,3 ; text speed cursor Y coordinate ld [wTopMenuItemY],a call SetCursorPositionsFromOptions ld a,[$cd3d] ; text speed cursor X coordinate ld [wTopMenuItemX],a ld a,$01 ld [H_AUTOBGTRANSFERENABLED],a ; enable auto background transfer call Delay3 .loop call PlaceMenuCursor call SetOptionsFromCursorPositions .getJoypadStateLoop call GetJoypadStateLowSensitivity ld a,[$ffb5] ld b,a and a,%11111011 ; any key besides select pressed? jr z,.getJoypadStateLoop bit 1,b ; B button pressed? jr nz,.exitMenu bit 3,b ; Start button pressed? jr nz,.exitMenu bit 0,b ; A button pressed? jr z,.checkDirectionKeys ld a,[wTopMenuItemY] cp a,16 ; is the cursor on Cancel? jr nz,.loop .exitMenu ld a,$90 call PlaySound ; play sound ret .eraseOldMenuCursor ld [wTopMenuItemX],a call EraseMenuCursor jp .loop .checkDirectionKeys ld a,[wTopMenuItemY] bit 7,b ; Down pressed? jr nz,.downPressed bit 6,b ; Up pressed? jr nz,.upPressed cp a,8 ; cursor in Battle Animation section? jr z,.cursorInBattleAnimation cp a,13 ; cursor in Battle Style section? jr z,.cursorInBattleStyle cp a,16 ; cursor on Cancel? jr z,.loop .cursorInTextSpeed bit 5,b ; Left pressed? jp nz,.pressedLeftInTextSpeed jp .pressedRightInTextSpeed .downPressed cp a,16 ld b,-13 ld hl,$cd3d jr z,.updateMenuVariables ld b,5 cp a,3 inc hl jr z,.updateMenuVariables cp a,8 inc hl jr z,.updateMenuVariables ld b,3 inc hl jr .updateMenuVariables .upPressed cp a,8 ld b,-5 ld hl,$cd3d jr z,.updateMenuVariables cp a,13 inc hl jr z,.updateMenuVariables cp a,16 ld b,-3 inc hl jr z,.updateMenuVariables ld b,13 inc hl .updateMenuVariables add b ld [wTopMenuItemY],a ld a,[hl] ld [wTopMenuItemX],a call PlaceUnfilledArrowMenuCursor jp .loop .cursorInBattleAnimation ld a,[$cd3e] ; battle animation cursor X coordinate xor a,$0b ; toggle between 1 and 10 ld [$cd3e],a jp .eraseOldMenuCursor .cursorInBattleStyle ld a,[$cd3f] ; battle style cursor X coordinate xor a,$0b ; toggle between 1 and 10 ld [$cd3f],a jp .eraseOldMenuCursor .pressedLeftInTextSpeed ld a,[$cd3d] ; text speed cursor X coordinate cp a,1 jr z,.updateTextSpeedXCoord cp a,7 jr nz,.fromSlowToMedium sub a,6 jr .updateTextSpeedXCoord .fromSlowToMedium sub a,7 jr .updateTextSpeedXCoord .pressedRightInTextSpeed ld a,[$cd3d] ; text speed cursor X coordinate cp a,14 jr z,.updateTextSpeedXCoord cp a,7 jr nz,.fromFastToMedium add a,7 jr .updateTextSpeedXCoord .fromFastToMedium add a,6 .updateTextSpeedXCoord ld [$cd3d],a ; text speed cursor X coordinate jp .eraseOldMenuCursor TextSpeedOptionText: ; 5fc0 (1:5fc0) db "TEXT SPEED" next " FAST MEDIUM SLOW@" BattleAnimationOptionText: ; 5fde (1:5fde) db "BATTLE ANIMATION" next " ON OFF@" BattleStyleOptionText: ; 5ffd (1:5ffd) db "BATTLE STYLE" next " SHIFT SET@" OptionMenuCancelText: ; 6018 (1:6018) db "CANCEL@" ; sets the options variable according to the current placement of the menu cursors in the options menu SetOptionsFromCursorPositions: ; 601f (1:601f) ld hl,TextSpeedOptionData ld a,[$cd3d] ; text speed cursor X coordinate ld c,a .loop ld a,[hli] cp c jr z,.textSpeedMatchFound inc hl jr .loop .textSpeedMatchFound ld a,[hl] ld d,a ld a,[$cd3e] ; battle animation cursor X coordinate dec a jr z,.battleAnimationOn .battleAnimationOff set 7,d jr .checkBattleStyle .battleAnimationOn res 7,d .checkBattleStyle ld a,[$cd3f] ; battle style cursor X coordinate dec a jr z,.battleStyleShift .battleStyleSet set 6,d jr .storeOptions .battleStyleShift res 6,d .storeOptions ld a,d ld [W_OPTIONS],a ret ; reads the options variable and places menu cursors in the correct positions within the options menu SetCursorPositionsFromOptions: ; 604c (1:604c) ld hl,TextSpeedOptionData + 1 ld a,[W_OPTIONS] ld c,a and a,$3f push bc ld de,2 call IsInArray pop bc dec hl ld a,[hl] ld [$cd3d],a ; text speed cursor X coordinate FuncCoord 0,3 ld hl,Coord call .placeUnfilledRightArrow sla c ld a,1 ; On jr nc,.storeBattleAnimationCursorX ld a,10 ; Off .storeBattleAnimationCursorX ld [$cd3e],a ; battle animation cursor X coordinate FuncCoord 0,8 ld hl,Coord call .placeUnfilledRightArrow sla c ld a,1 jr nc,.storeBattleStyleCursorX ld a,10 .storeBattleStyleCursorX ld [$cd3f],a ; battle style cursor X coordinate FuncCoord 0,13 ld hl,Coord call .placeUnfilledRightArrow ; cursor in front of Cancel FuncCoord 0,16 ld hl,Coord ld a,1 .placeUnfilledRightArrow ld e,a ld d,0 add hl,de ld [hl],$ec ; unfilled right arrow menu cursor ret ; table that indicates how the 3 text speed options affect frame delays ; Format: ; 00: X coordinate of menu cursor ; 01: delay after printing a letter (in frames) TextSpeedOptionData: ; 6096 (1:6096) db 14,5 ; Slow db 7,3 ; Medium db 1,1 ; Fast db 7 ; default X coordinate (Medium) db $ff ; terminator Func_609e: ; 609e (1:609e) ld a, $a ld [$0], a ld a, $1 ld [$6000], a ld [$4000], a ld b, $b ld hl, $a598 .asm_60b0 ld a, [hli] cp $50 jr z, .asm_60c1 dec b jr nz, .asm_60b0 xor a ld [$0], a ld [$6000], a and a ret .asm_60c1 xor a ld [$0], a ld [$6000], a scf ret Func_60ca: ; 60ca (1:60ca) ld a, [$d358] push af ld a, [W_OPTIONS] ; $d355 push af ld a, [$d732] push af ld hl, W_PLAYERNAME ; $d158 ld bc, $d8a xor a call FillMemory ld hl, wSpriteStateData1 ld bc, $200 xor a call FillMemory pop af ld [$d732], a pop af ld [W_OPTIONS], a ; $d355 pop af ld [$d358], a ld a, [$d08a] and a call z, Func_5bff ld hl, NintenText ; $45aa ld de, W_PLAYERNAME ; $d158 ld bc, $b call CopyData ld hl, SonyText ; $45b1 ld de, W_RIVALNAME ; $d34a ld bc, $b jp CopyData OakSpeech: ; 6115 (1:6115) ld a,$FF call PlaySound ; stop music ld a, BANK(Music_Routes2) ; bank of song ld c,a ld a, MUSIC_ROUTES2 ; song # call PlayMusic ; plays music call ClearScreen call LoadTextBoxTilePatterns call Func_60ca ld a,$18 call Predef ; indirect jump to InitializePlayerData ld hl,$D53A ld a,POTION ld [$CF91],a ld a,1 ld [$CF96],a call AddItemToInventory ; give one potion ld a,[$D07C] ld [$D71A],a call Func_62ce xor a ld [$FFD7],a ld a,[$D732] bit 1,a ; XXX when is bit 1 set? jp nz,Func_61bc ; easter egg: skip the intro ld de,ProfOakPic ld bc, (Bank(ProfOakPic) << 8) | $00 call IntroPredef3B ; displays Oak pic? call FadeInIntroPic ld hl,OakSpeechText1 call PrintText ; prints text box call GBFadeOut2 call ClearScreen ld a,NIDORINO ld [$D0B5],a ; pic displayed is stored at this location ld [$CF91],a call GetMonHeader ; this is also related to the pic FuncCoord 6, 4 ; $c3f6 ld hl,Coord ; position on tilemap the pic is displayed call LoadFlippedFrontSpriteByMonIndex ; displays pic? call MovePicLeft ld hl,OakSpeechText2 call PrintText ; Prints text box call GBFadeOut2 call ClearScreen ld de,RedPicFront ld bc,(Bank(RedPicFront) << 8) | $00 call IntroPredef3B ; displays player pic? call MovePicLeft ld hl,IntroducePlayerText call PrintText call Func_695d ; brings up NewName/Red/etc menu call GBFadeOut2 call ClearScreen ld de,Rival1Pic ld bc,(Bank(Rival1Pic) << 8) | $00 call IntroPredef3B ; displays rival pic call FadeInIntroPic ld hl,IntroduceRivalText call PrintText call Func_69a4 Func_61bc: ; 61bc (1:61bc) call GBFadeOut2 call ClearScreen ld de,RedPicFront ld bc,(Bank(RedPicFront) << 8) | $00 call IntroPredef3B call GBFadeIn2 ld a,[$D72D] and a jr nz,.next ld hl,OakSpeechText3 call PrintText .next ld a,[H_LOADEDROMBANK] push af ld a,$9C call PlaySound pop af ld [H_LOADEDROMBANK],a ld [$2000],a ld c,4 call DelayFrames ld de,RedSprite ; $4180 ld hl,$8000 ld bc,(BANK(RedSprite) << 8) | $0C call CopyVideoData ld de,ShrinkPic1 ld bc,(BANK(ShrinkPic1) << 8) | $00 call IntroPredef3B ld c,4 call DelayFrames ld de,ShrinkPic2 ld bc,(BANK(ShrinkPic2) << 8) | $00 call IntroPredef3B call ResetPlayerSpriteData ld a,[H_LOADEDROMBANK] push af ld a,2 ld [$C0EF],a ld [$C0F0],a ld a,$A ld [wMusicHeaderPointer],a ld a,$FF ld [$C0EE],a call PlaySound ; stop music pop af ld [H_LOADEDROMBANK],a ld [$2000],a ld c,$14 call DelayFrames FuncCoord 6, 5 ; $c40a ld hl,Coord ld b,7 ld c,7 call ClearScreenArea call LoadTextBoxTilePatterns ld a,1 ld [$CFCB],a ld c,$32 call DelayFrames call GBFadeOut2 jp ClearScreen OakSpeechText1: ; 6253 (1:6253) TX_FAR _OakSpeechText1 db "@" OakSpeechText2: ; 6258 (1:6258) TX_FAR _OakSpeechText2A db $14 TX_FAR _OakSpeechText2B db "@" IntroducePlayerText: ; 6262 (1:6262) TX_FAR _IntroducePlayerText db "@" IntroduceRivalText: ; 6267 (1:6267) TX_FAR _IntroduceRivalText db "@" OakSpeechText3: ; 626c (1:626c) TX_FAR _OakSpeechText3 db "@" FadeInIntroPic: ; 6271 (1:6271) ld hl,IntroFadePalettes ld b,6 .next ld a,[hli] ld [rBGP],a ld c,10 call DelayFrames dec b jr nz,.next ret IntroFadePalettes: ; 6282 (1:6282) db %01010100 db %10101000 db %11111100 db %11111000 db %11110100 db %11100100 MovePicLeft: ; 6288 (1:6288) ld a,119 ld [$FF4B],a call DelayFrame ld a,$E4 ld [rBGP],a .next call DelayFrame ld a,[$FF4B] sub 8 cp $FF ret z ld [$FF4B],a jr .next Predef3B: ; 62a1 (1:62a1) call Load16BitRegisters IntroPredef3B: ; 62a4 (1:62a4) ; bank of sprite given in b push bc ld a,b call UncompressSpriteFromDE ld hl,S_SPRITEBUFFER1 ld de,$A000 ld bc,$0310 call CopyData ld de,$9000 call InterlaceMergeSpriteBuffers pop bc ld a,c and a FuncCoord 15, 1 ; $c3c3 ld hl,Coord jr nz,.next FuncCoord 6, 4 ; $c3f6 ld hl,Coord .next xor a ld [$FFE1],a ld a,1 jp Predef Func_62ce: ; 62ce (1:62ce) call Func_62ff ld a,$19 call Predef ld hl,$D732 bit 2,[hl] res 2,[hl] jr z,.next ld a,[$D71A] jr .next2 .next bit 1,[hl] jr z,.next3 call Func_64ea .next3 ld a,0 .next2 ld b,a ld a,[$D72D] and a jr nz,.next4 ld a,b .next4 ld hl,$D732 bit 4,[hl] ret nz ld [$D365],a ret Func_62ff: ; 62ff (1:62ff) ld a, [$d72d] cp BATTLE_CENTER jr nz, .asm_6314 ld hl, BattleCenterSpec1 ; $6428 ld a, [$FF00+$aa] cp $2 jr z, .asm_6334 ld hl, BattleCenterSpec2 ; $6430 jr .asm_6334 .asm_6314 cp TRADE_CENTER jr nz, .asm_6326 ld hl, TradeCenterSpec1 ; $6438 ld a, [$FF00+$aa] cp $2 jr z, .asm_6334 ld hl, TradeCenterSpec2 ; $6440 jr .asm_6334 .asm_6326 ld a, [$d732] bit 1, a jr nz, .asm_6346 bit 2, a jr nz, .asm_6346 ld hl, FirstMapSpec ; $6420 .asm_6334 ld de, W_CURMAP ; $d35e ld c, $7 .asm_6339 ld a, [hli] ld [de], a inc de dec c jr nz, .asm_6339 ld a, [hli] ld [W_CURMAPTILESET], a ; $d367 xor a jr .asm_63b3 .asm_6346 ld a, [$d365] ld hl, $d732 bit 4, [hl] jr nz, .asm_635b bit 6, [hl] res 6, [hl] jr z, .asm_638e ld a, [$d719] jr .asm_6391 .asm_635b ld hl, $d72d res 4, [hl] ld a, [$d71d] ld b, a ld [W_CURMAP], a ; $d35e ld a, [$d71e] ld c, a ld hl, DungeonWarpList ; $63bf ld de, $0 ld a, $6 ld [$d12f], a .asm_6376 ld a, [hli] cp b jr z, .asm_637d inc hl jr .asm_6381 .asm_637d ld a, [hli] cp c jr z, .asm_6388 .asm_6381 ld a, [$d12f] add e ld e, a jr .asm_6376 .asm_6388 ld hl, DungeonWarpData ; $63d8 add hl, de jr .asm_63a4 .asm_638e ld a, [$d71a] .asm_6391 ld b, a ld [W_CURMAP], a ; $d35e ld hl, FlyWarpDataPtr ; $6448 .asm_6398 ld a, [hli] inc hl cp b jr z, .asm_63a1 inc hl inc hl jr .asm_6398 .asm_63a1 ld a, [hli] ld h, [hl] ld l, a .asm_63a4 ld de, $d35f ld c, $6 .asm_63a9 ld a, [hli] ld [de], a inc de dec c jr nz, .asm_63a9 xor a ld [W_CURMAPTILESET], a ; $d367 .asm_63b3 ld [$d4e2], a ld [$d4e3], a ld a, $ff ld [$d42f], a ret DungeonWarpList: ; 63bf (1:63bf) db SEAFOAM_ISLANDS_2,$01 db SEAFOAM_ISLANDS_2,$02 db SEAFOAM_ISLANDS_3,$01 db SEAFOAM_ISLANDS_3,$02 db SEAFOAM_ISLANDS_4,$01 db SEAFOAM_ISLANDS_4,$02 db SEAFOAM_ISLANDS_5,$01 db SEAFOAM_ISLANDS_5,$02 db VICTORY_ROAD_2,$02 db MANSION_1,$01 db MANSION_1,$02 db MANSION_2,$03 db $FF DungeonWarpData: ; 63d8 (1:63d8) FLYWARP_DATA SEAFOAM_ISLANDS_2_WIDTH,7,18 FLYWARP_DATA SEAFOAM_ISLANDS_2_WIDTH,7,23 FLYWARP_DATA SEAFOAM_ISLANDS_3_WIDTH,7,19 FLYWARP_DATA SEAFOAM_ISLANDS_3_WIDTH,7,22 FLYWARP_DATA SEAFOAM_ISLANDS_4_WIDTH,7,18 FLYWARP_DATA SEAFOAM_ISLANDS_4_WIDTH,7,19 FLYWARP_DATA SEAFOAM_ISLANDS_5_WIDTH,14,4 FLYWARP_DATA SEAFOAM_ISLANDS_5_WIDTH,14,5 FLYWARP_DATA VICTORY_ROAD_2_WIDTH,16,22 FLYWARP_DATA MANSION_1_WIDTH,14,16 FLYWARP_DATA MANSION_1_WIDTH,14,16 FLYWARP_DATA MANSION_2_WIDTH,14,18 ;Format: ; db Map_id ; FLYWARP_DATA [Map Width][Y-pos][X-pos] ; db Tileset_id FirstMapSpec: ; 6420 (1:6420) db REDS_HOUSE_2F FLYWARP_DATA REDS_HOUSE_2F_WIDTH,6,3 db $04 BattleCenterSpec1: ; 6428 (1:6428) db BATTLE_CENTER FLYWARP_DATA BATTLE_CENTER_WIDTH,4,3 db $15 BattleCenterSpec2: ; 6430 (1:6430) db BATTLE_CENTER FLYWARP_DATA BATTLE_CENTER_WIDTH,4,6 db $15 TradeCenterSpec1: ; 6438 (1:6438) db TRADE_CENTER FLYWARP_DATA TRADE_CENTER_WIDTH,4,3 db $15 TradeCenterSpec2: ; 6440 (1:6440) db TRADE_CENTER FLYWARP_DATA TRADE_CENTER_WIDTH,4,6 db $15 FlyWarpDataPtr: ; 6448 (1:6448) db $00,0 dw Map00FlyWarp db $01,0 dw Map01FlyWarp db $02,0 dw Map02FlyWarp db $03,0 dw Map03FlyWarp db $04,0 dw Map04FlyWarp db $05,0 dw Map05FlyWarp db $06,0 dw Map06FlyWarp db $07,0 dw Map07FlyWarp db $08,0 dw Map08FlyWarp db $09,0 dw Map09FlyWarp db $0A,0 dw Map0aFlyWarp db $0F,0 dw Map0fFlyWarp db $15,0 dw Map15FlyWarp ; Original Format: ; [Event Displacement][Y-block][X-block][Y-sub_block][X-sub_block] ; Macro Format: ; FLYWARP_DATA [Map Width][Y-pos][X-pos] Map00FlyWarp: ; 647c (1:647c) FLYWARP_DATA 10,6,5 Map01FlyWarp: ; 6482 (1:6482) FLYWARP_DATA 20,26,23 Map02FlyWarp: ; 6488 (1:6488) FLYWARP_DATA 20,26,13 Map03FlyWarp: ; 648e (1:648e) FLYWARP_DATA 20,18,19 Map04FlyWarp: ; 6494 (1:6494) FLYWARP_DATA 10,6,3 Map05FlyWarp: ; 649a (1:649a) FLYWARP_DATA 20,4,11 Map06FlyWarp: ; 64a0 (1:64a0) FLYWARP_DATA 25,10,41 Map07FlyWarp: ; 64a6 (1:64a6) FLYWARP_DATA 20,28,19 Map08FlyWarp: ; 64ac (1:64ac) FLYWARP_DATA 10,12,11 Map09FlyWarp: ; 64b2 (1:64b2) FLYWARP_DATA 10,6,9 Map0aFlyWarp: ; 64b8 (1:64b8) FLYWARP_DATA 20,30,9 Map0fFlyWarp: ; 64be (1:64be) FLYWARP_DATA 45,6,11 Map15FlyWarp: ; 64c4 (1:64c4) FLYWARP_DATA 10,20,11 ; This function appears to never be used. ; It is likely a debugging feature to give the player Tsunekazu Ishihara's ; favorite Pokemon. This is indicated by the overpowered Exeggutor, which ; Ishihara (president of Creatures Inc.) said was his favorite Pokemon in an ABC ; interview on February 8, 2000. ; "Exeggutor is my favorite. That's because I was always using this character ; while I was debugging the program." ; http://www.ign.com/articles/2000/02/09/abc-news-pokamon-chat-transcript SetIshiharaTeam: ; 64ca (1:64ca) ld de, IshiharaTeam .loop ld a, [de] cp $ff ret z ld [$cf91], a inc de ld a, [de] ld [W_CURENEMYLVL], a inc de call AddPokemonToParty jr .loop IshiharaTeam: ; 64df (1:64df) db EXEGGUTOR,90 db MEW,20 db JOLTEON,56 db DUGTRIO,56 db ARTICUNO,57 db $FF Func_64ea: ; 64ea (1:64ea) ret AskForMonNickname: ; 64eb (1:64eb) call SaveScreenTilesToBuffer1 call Load16BitRegisters push hl ld a, [W_ISINBATTLE] ; $d057 dec a ld hl, wTileMap ld b, $4 ld c, $b call z, ClearScreenArea ; only if in wild batle ld a, [$cf91] ld [$d11e], a call GetMonName ld hl, DoYouWantToNicknameText ; $6557 call PrintText FuncCoord 14, 7 ; $c43a ld hl, Coord ld bc, $80f ld a, $14 ld [$d125], a call DisplayTextBoxID pop hl ld a, [wCurrentMenuItem] ; $cc26 and a jr nz, .asm_654c ld a, [$cfcb] push af xor a ld [$cfcb], a push hl ld a, $2 ld [$d07d], a call Func_6596 ld a, [W_ISINBATTLE] ; $d057 and a jr nz, .asm_653e call Func_3e08 .asm_653e call LoadScreenTilesFromBuffer1 pop hl pop af ld [$cfcb], a ld a, [$cf4b] cp $50 ret nz .asm_654c ld d, h ld e, l ld hl, $cd6d ld bc, $000b jp CopyData DoYouWantToNicknameText: ; 0x6557 TX_FAR _DoYouWantToNicknameText db "@" Func_655c: ; 655c (1:655c) ld hl, $cee9 xor a ld [$cfcb], a ld a, $2 ld [$d07d], a call Func_6596 call GBPalWhiteOutWithDelay3 call Func_3dbe call LoadGBPal ld a, [$cf4b] cp $50 jr z, .asm_6594 ld hl, W_PARTYMON1NAME ; $d2b5 ld bc, $b ld a, [wWhichPokemon] ; $cf92 call AddNTimes ld e, l ld d, h ld hl, $cee9 ld bc, $b call CopyData and a ret .asm_6594 scf ret Func_6596: ; 6596 (1:6596) push hl ld hl, $d730 set 6, [hl] call GBPalWhiteOutWithDelay3 call ClearScreen call UpdateSprites ld b, $8 call GoPAL_SET call LoadHpBarAndStatusTilePatterns call Func_675b ld b, BANK(Func_7176c) ld hl, Func_7176c call Bankswitch FuncCoord 0, 4 ; $c3f0 ld hl, Coord ld b, $9 ld c, $12 call TextBoxBorder call Func_68f8 ld a, $3 ld [wTopMenuItemY], a ; $cc24 ld a, $1 ld [wTopMenuItemX], a ; $cc25 ld [wLastMenuItem], a ; $cc2a ld [wCurrentMenuItem], a ; $cc26 ld a, $ff ld [wMenuWatchedKeys], a ; $cc29 ld a, $7 ld [wMaxMenuItem], a ; $cc28 ld a, $50 ld [$cf4b], a xor a ld hl, $ceea ld [hli], a ld [hli], a ld [W_SUBANIMTRANSFORM], a ; $d08b .asm_65ed call Func_676f call GBPalNormal .asm_65f3 ld a, [$ceea] and a jr nz, .asm_662d call Func_680e .asm_65fc call PlaceMenuCursor .asm_65ff ld a, [wCurrentMenuItem] ; $cc26 push af ld b, BANK(Func_716f7) ld hl, Func_716f7 call Bankswitch pop af ld [wCurrentMenuItem], a ; $cc26 call GetJoypadStateLowSensitivity ld a, [H_NEWLYPRESSEDBUTTONS] and a jr z, .asm_65ff ld hl, .unknownPointerTable_665e ; $665e .asm_661a sla a jr c, .asm_6624 inc hl inc hl inc hl inc hl jr .asm_661a .asm_6624 ld a, [hli] ld e, a ld a, [hli] ld d, a ld a, [hli] ld h, [hl] ld l, a push de jp [hl] .asm_662d pop de ld hl, $cf4b ld bc, $b call CopyData call GBPalWhiteOutWithDelay3 call ClearScreen call CleanLCD_OAM call GoPAL_SET_CF1C call GBPalNormal xor a ld [W_SUBANIMTRANSFORM], a ; $d08b ld hl, $d730 res 6, [hl] ld a, [W_ISINBATTLE] ; $d057 and a jp z, LoadTextBoxTilePatterns ld hl, Func_3ee5b ld b, BANK(Func_3ee5b) jp Bankswitch .unknownPointerTable_665e: ; 665e (1:665e) dw .asm_65fc dw .asm_673e dw .asm_65fc dw .asm_672c dw .asm_65fc dw .asm_6718 dw .asm_65fc dw .asm_6702 dw .asm_65f3 dw .asm_668c dw .asm_65ed dw .asm_6683 dw .asm_65f3 dw .deleteLetter dw .asm_65f3 dw .asm_6692 .asm_667e pop de ld de, .asm_65ed ; $65ed push de .asm_6683 ld a, [$ceeb] xor $1 ld [$ceeb], a ret .asm_668c ld a, $1 ld [$ceea], a ret .asm_6692 ld a, [wCurrentMenuItem] ; $cc26 cp $5 jr nz, .asm_66a0 ld a, [wTopMenuItemX] ; $cc25 cp $11 jr z, .asm_668c .asm_66a0 ld a, [wCurrentMenuItem] ; $cc26 cp $6 jr nz, .asm_66ae ld a, [wTopMenuItemX] ; $cc25 cp $1 jr z, .asm_667e .asm_66ae ld hl, wMenuCursorLocation ; $cc30 ld a, [hli] ld h, [hl] ld l, a inc hl ld a, [hl] ld [$ceed], a call Func_68eb ld a, [$ceed] cp $e5 ld de, Unknown_6885 ; $6885 jr z, .asm_66e3 cp $e4 ld de, Unknown_68d6 ; $68d6 jr z, .asm_66e3 ld a, [$d07d] cp $2 jr nc, .checkMonNameLength ld a, [$cee9] cp $7 ; max length of player/rival names jr .checkNameLength .checkMonNameLength ld a, [$cee9] cp $a ; max length of pokemon nicknames .checkNameLength jr c, .addLetter ret .asm_66e3 push hl call Func_6871 pop hl ret nc dec hl .addLetter ld a, [$ceed] ld [hli], a ld [hl], $50 ld a, $90 call PlaySound ret .deleteLetter ld a, [$cee9] and a ret z call Func_68eb dec hl ld [hl], $50 ret .asm_6702 ld a, [wCurrentMenuItem] ; $cc26 cp $6 ret z ld a, [wTopMenuItemX] ; $cc25 cp $11 jp z, .asm_6714 inc a inc a jr .asm_6755 .asm_6714 ld a, $1 jr .asm_6755 .asm_6718 ld a, [wCurrentMenuItem] ; $cc26 cp $6 ret z ld a, [wTopMenuItemX] ; $cc25 dec a jp z, .asm_6728 dec a jr .asm_6755 .asm_6728 ld a, $11 jr .asm_6755 .asm_672c ld a, [wCurrentMenuItem] ; $cc26 dec a ld [wCurrentMenuItem], a ; $cc26 and a ret nz ld a, $6 ld [wCurrentMenuItem], a ; $cc26 ld a, $1 jr .asm_6755 .asm_673e ld a, [wCurrentMenuItem] ; $cc26 inc a ld [wCurrentMenuItem], a ; $cc26 cp $7 jr nz, .asm_6750 ld a, $1 ld [wCurrentMenuItem], a ; $cc26 jr .asm_6755 .asm_6750 cp $6 ret nz ld a, $1 .asm_6755 ld [wTopMenuItemX], a ; $cc25 jp EraseMenuCursor Func_675b: ; 675b (1:675b) ld de, ED_Tile ld hl, $8f00 ld bc, $1 jp CopyVideoDataDouble ED_Tile: ; 6767 (1:6767) INCBIN "gfx/ED_tile.1bpp" Func_676f: ; 676f (1:676f) xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld a, [$ceeb] and a ld de, LowerCaseAlphabet ; $679e jr nz, .asm_677e ld de, UpperCaseAlphabet ; $67d6 .asm_677e FuncCoord 2, 5 ; $c406 ld hl, Coord ld bc, $509 .asm_6784 push bc .asm_6785 ld a, [de] ld [hli], a inc hl inc de dec c jr nz, .asm_6785 ld bc, $16 add hl, bc pop bc dec b jr nz, .asm_6784 call PlaceString ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba jp Delay3 LowerCaseAlphabet: ; 679e (1:679e) db "abcdefghijklmnopqrstuvwxyz ×():;[]",$e1,$e2,"-?!♂♀/",$f2,",¥UPPER CASE@" UpperCaseAlphabet: ; 67d6 (1:67d6) db "ABCDEFGHIJKLMNOPQRSTUVWXYZ ×():;[]",$e1,$e2,"-?!♂♀/",$f2,",¥lower case@" Func_680e: ; 680e (1:680e) call Func_68eb ld a, c ld [$cee9], a FuncCoord 10, 2 ; $c3d2 ld hl, Coord ld bc, $10a call ClearScreenArea FuncCoord 10, 2 ; $c3d2 ld hl, Coord ld de, $cf4b call PlaceString FuncCoord 10, 3 ; $c3e6 ld hl, Coord ld a, [$d07d] cp $2 jr nc, .asm_6835 ld b, $7 jr .asm_6837 .asm_6835 ld b, $a .asm_6837 ld a, $76 .asm_6839 ld [hli], a dec b jr nz, .asm_6839 ld a, [$d07d] cp $2 ld a, [$cee9] jr nc, .asm_684b cp $7 jr .asm_684d .asm_684b cp $a .asm_684d jr nz, .asm_6867 call EraseMenuCursor ld a, $11 ld [wTopMenuItemX], a ; $cc25 ld a, $5 ld [wCurrentMenuItem], a ; $cc26 ld a, [$d07d] cp $2 ld a, $9 jr nc, .asm_6867 ld a, $6 .asm_6867 ld c, a ld b, $0 FuncCoord 10, 3 ; $c3e6 ld hl, Coord add hl, bc ld [hl], $77 ret Func_6871: ; 6871 (1:6871) push de call Func_68eb dec hl ld a, [hl] pop hl ld de, $2 call IsInArray ret nc inc hl ld a, [hl] ld [$ceed], a ret Unknown_6885: ; 6885 (1:6885) db $b6, $26 db $b7, $27 db $b8, $28 db $b9, $29 db $ba, $2a db $bb, $2b db $bc, $2c db $bd, $2d db $be, $2e db $bf, $2f db $c0, $30 db $c1, $31 db $c2, $32 db $c3, $33 db $c4, $34 db $ca, $3a db $cb, $3b db $cc, $3c db $cd, $3d db $ce, $3e db $85, $05 db $86, $06 db $87, $07 db $88, $08 db $89, $09 db $8a, $0a db $8b, $0b db $8c, $0c db $8d, $0d db $8e, $0e db $8f, $0f db $90, $10 db $91, $11 db $92, $12 db $93, $13 db $99, $19 db $9a, $1a db $9b, $1b db $cd, $3d db $9c, $1c db $ff Unknown_68d6: ; 68d6 (1:68d6) db $ca, $44 db $cb, $45 db $cc, $46 db $cd, $47 db $ce, $48 db $99, $40 db $9a, $41 db $9b, $42 db $cd, $47 db $9c, $43 db $ff Func_68eb: ; 68eb (1:68eb) ld hl, $cf4b ld c, $0 .asm_68f0 ld a, [hl] cp $50 ret z inc hl inc c jr .asm_68f0 Func_68f8: ; 68f8 (1:68f8) FuncCoord 0, 1 ; $c3b4 ld hl, Coord ld a, [$d07d] ld de, YourTextString ; $693f and a jr z, .asm_6934 ld de, RivalsTextString ; $6945 dec a jr z, .asm_6934 ld a, [$cf91] ld [$cd5d], a push af ld b, BANK(Func_71882) ld hl, Func_71882 call Bankswitch pop af ld [$d11e], a call GetMonName FuncCoord 4, 1 ; $c3b8 ld hl, Coord call PlaceString ld hl, $1 add hl, bc ld [hl], $c9 FuncCoord 1, 3 ; $c3dd ld hl, Coord ld de, NicknameTextString ; $6953 jr .asm_693c .asm_6934 call PlaceString ld l, c ld h, b ld de, NameTextString ; $694d .asm_693c jp PlaceString YourTextString: ; 693f (1:693f) db "YOUR @" RivalsTextString: ; 6945 (1:6945) db "RIVAL's @" NameTextString: ; 694d (1:694d) db "NAME?@" NicknameTextString: ; 6953 (1:6953) db "NICKNAME?@" Func_695d: ; 695d (1:695d) call Func_6a12 ld de, DefaultNamesPlayer ; $6aa8 call Func_6a6c ld a, [wCurrentMenuItem] ; $cc26 and a jr z, .asm_697a ld hl, DefaultNamesPlayerList ; $6af2 call Func_6ad6 ld de, W_PLAYERNAME ; $d158 call Func_69ec jr .asm_6999 .asm_697a ld hl, W_PLAYERNAME ; $d158 xor a ld [$d07d], a call Func_6596 ld a, [$cf4b] cp $50 jr z, .asm_697a call ClearScreen call Delay3 ld de, RedPicFront ; $6ede ld b, $4 call IntroPredef3B .asm_6999 ld hl, UnnamedText_699f ; $699f jp PrintText UnnamedText_699f: ; 699f (1:699f) TX_FAR _UnnamedText_699f db "@" Func_69a4: ; 69a4 (1:69a4) call Func_6a12 ; 0x69a4 call 0x6a12 ld de, DefaultNamesRival call Func_6a6c ld a, [wCurrentMenuItem] ; $cc26 and a jr z, .asm_69c1 ld hl, DefaultNamesRivalList call Func_6ad6 ld de, W_RIVALNAME ; $d34a call Func_69ec jr .asm_69e1 .asm_69c1 ld hl, W_RIVALNAME ; $d34a ld a, $1 ld [$d07d], a call Func_6596 ld a, [$cf4b] cp $50 jr z, .asm_69c1 call ClearScreen call Delay3 ld de, Rival1Pic ; $6049 ld b, $13 call IntroPredef3B .asm_69e1 ld hl, UnnamedText_69e7 ; $69e7 jp PrintText UnnamedText_69e7: ; 69e7 (1:69e7) TX_FAR _UnnamedText_69e7 db "@" Func_69ec: ; 69ec (1:69ec) push de ld hl, wTileMap ld bc, $c0b call ClearScreenArea ld c, $a call DelayFrames pop de ld hl, $cd6d ld bc, $b call CopyData call Delay3 FuncCoord 12, 4 ; $c3fc ld hl, Coord ld de, $67d ld a, $ff jr asm_6a19 Func_6a12: ; 6a12 (1:6a12) FuncCoord 5, 4 ; $c3f5 ld hl, Coord ld de, $67d xor a asm_6a19: ; 6a19 (1:6a19) push hl push de push bc ld [$FF00+$8d], a ld a, d ld [H_DOWNARROWBLINKCNT1], a ; $FF00+$8b ld a, e ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c ld c, a ld a, [$FF00+$8d] and a jr nz, .asm_6a2d ld d, $0 add hl, de .asm_6a2d ld d, h ld e, l .asm_6a2f xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld a, [$FF00+$8d] and a jr nz, .asm_6a3c ld a, [hli] ld [hld], a dec hl jr .asm_6a3f .asm_6a3c ld a, [hld] ld [hli], a inc hl .asm_6a3f dec c jr nz, .asm_6a2f ld a, [$FF00+$8d] and a jr z, .asm_6a4a xor a dec hl ld [hl], a .asm_6a4a ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba call Delay3 ld a, [H_DOWNARROWBLINKCNT2] ; $FF00+$8c ld c, a ld h, d ld l, e ld a, [$FF00+$8d] and a jr nz, .asm_6a5e inc hl jr .asm_6a5f .asm_6a5e dec hl .asm_6a5f ld d, h ld e, l ld a, [H_DOWNARROWBLINKCNT1] ; $FF00+$8b dec a ld [H_DOWNARROWBLINKCNT1], a ; $FF00+$8b jr nz, .asm_6a2f pop bc pop de pop hl ret Func_6a6c: ; 6a6c (1:6a6c) push de ld hl, wTileMap ld b, $a ld c, $9 call TextBoxBorder FuncCoord 3, 0 ; $c3a3 ld hl, Coord ld de, .namestring ; $6aa3 call PlaceString pop de FuncCoord 2, 2 ; $c3ca ld hl, Coord call PlaceString call UpdateSprites xor a ld [wCurrentMenuItem], a ; $cc26 ld [wLastMenuItem], a ; $cc2a inc a ld [wTopMenuItemX], a ; $cc25 ld [wMenuWatchedKeys], a ; $cc29 inc a ld [wTopMenuItemY], a ; $cc24 inc a ld [wMaxMenuItem], a ; $cc28 jp HandleMenuInput .namestring ; 6aa3 (1:6aa3) db "NAME@" IF _RED DefaultNamesPlayer: ; 6aa8 (1:6aa8) db "NEW NAME" next "RED" next "ASH" next "JACK" db "@" DefaultNamesRival: ; 6abe (1:6abe) db "NEW NAME" next "BLUE" next "GARY" next "JOHN" db "@" ENDC IF _BLUE DefaultNamesPlayer: ; 6aa8 (1:6aa8) db "NEW NAME" next "BLUE" next "GARY" next "JOHN" db "@" DefaultNamesRival: ; 6abe (1:6abe) db "NEW NAME" next "RED" next "ASH" next "JACK" db "@" ENDC Func_6ad6: ; 6ad6 (1:6ad6) ld b, a ld c, $0 .asm_6ad9 ld d, h ld e, l .asm_6adb ld a, [hli] cp $50 jr nz, .asm_6adb ld a, b cp c jr z, .asm_6ae7 inc c jr .asm_6ad9 .asm_6ae7 ld h, d ld l, e ld de, $cd6d ld bc, $14 jp CopyData IF _RED DefaultNamesPlayerList: ; 6af2 (1:6af2) db "NEW NAME@RED@ASH@JACK@" DefaultNamesRivalList: ; 6b08 (1:6b08) db "NEW NAME@BLUE@GARY@JOHN@" ENDC IF _BLUE DefaultNamesPlayerList: ; 6af2 (1:6af2) db "NEW NAME@BLUE@GARY@JOHN@" DefaultNamesRivalList: ; 6b08 (1:6b08) db "NEW NAME@RED@ASH@JACK@" ENDC TextTerminator_6b20: ; 6b20 (1:6b20) db "@" ; subtracts the amount the player paid from their money ; sets carry flag if there is enough money and unsets carry flag if not SubtractAmountPaidFromMoney_: ; 6b21 (1:6b21) ld de,wPlayerMoney ld hl,$ff9f ; total price of items ld c,3 ; length of money in bytes call StringCmp ret c ld de,wPlayerMoney + 2 ld hl,$ffa1 ; total price of items ld c,3 ; length of money in bytes ld a,$0c call Predef ; subtract total price from money ld a,$13 ld [$d125],a call DisplayTextBoxID ; redraw money text box and a ret HandleItemListSwapping: ; 6b44 (1:6b44) ld a,[wListMenuID] cp a,ITEMLISTMENU jp nz,DisplayListMenuIDLoop ; only rearrange item list menus push hl ld hl,$cf8b ld a,[hli] ld h,[hl] ld l,a inc hl ; hl = beginning of list entries ld a,[wCurrentMenuItem] ld b,a ld a,[wListScrollOffset] add b add a ld c,a ld b,0 add hl,bc ; hl = address of currently selected item entry ld a,[hl] pop hl inc a jp z,DisplayListMenuIDLoop ; ignore attempts to swap the Cancel menu item ld a,[$cc35] ; ID of item chosen for swapping (counts from 1) and a ; has the first item to swap already been chosen? jr nz,.swapItems ; if not, set the currently selected item as the first item ld a,[wCurrentMenuItem] inc a ld b,a ld a,[wListScrollOffset] ; index of top (visible) menu item within the list add b ld [$cc35],a ; ID of item chosen for swapping (counts from 1) ld c,20 call DelayFrames jp DisplayListMenuIDLoop .swapItems ld a,[wCurrentMenuItem] inc a ld b,a ld a,[wListScrollOffset] add b ld b,a ld a,[$cc35] ; ID of item chosen for swapping (counts from 1) cp b ; is the currently selected item the same as the first item to swap? jp z,DisplayListMenuIDLoop ; ignore attempts to swap an item with itself dec a ld [$cc35],a ; ID of item chosen for swapping (counts from 1) ld c,20 call DelayFrames push hl push de ld hl,$cf8b ld a,[hli] ld h,[hl] ld l,a inc hl ; hl = beginning of list entries ld d,h ld e,l ; de = beginning of list entries ld a,[wCurrentMenuItem] ld b,a ld a,[wListScrollOffset] add b add a ld c,a ld b,0 add hl,bc ; hl = address of currently selected item entry ld a,[$cc35] ; ID of item chosen for swapping (counts from 1) add a add e ld e,a jr nc,.noCarry inc d .noCarry ; de = address of first item to swap ld a,[de] ld b,a ld a,[hli] cp b jr z,.swapSameItemType .swapDifferentItems ld [$ff95],a ; [$ff95] = second item ID ld a,[hld] ld [$ff96],a ; [$ff96] = second item quantity ld a,[de] ld [hli],a ; put first item ID in second item slot inc de ld a,[de] ld [hl],a ; put first item quantity in second item slot ld a,[$ff96] ld [de],a ; put second item quantity in first item slot dec de ld a,[$ff95] ld [de],a ; put second item ID in first item slot xor a ld [$cc35],a ; 0 means no item is currently being swapped pop de pop hl jp DisplayListMenuIDLoop .swapSameItemType inc de ld a,[hl] ld b,a ld a,[de] add b ; a = sum of both item quantities cp a,100 ; is the sum too big for one item slot? jr c,.combineItemSlots ; swap enough items from the first slot to max out the second slot if they can't be combined sub a,99 ld [de],a ld a,99 ld [hl],a jr .done .combineItemSlots ld [hl],a ; put the sum in the second item slot ld hl,$cf8b ld a,[hli] ld h,[hl] ld l,a dec [hl] ; decrease the number of items ld a,[hl] ld [$d12a],a ; update number of items variable cp a,1 jr nz,.skipSettingMaxMenuItemID ld [wMaxMenuItem],a ; if the number of items is only one now, update the max menu item ID .skipSettingMaxMenuItemID dec de ld h,d ld l,e inc hl inc hl ; hl = address of item after first item to swap .moveItemsUpLoop ; erase the first item slot and move up all the following item slots to fill the gap ld a,[hli] ld [de],a inc de inc a ; reached the $ff terminator? jr z,.afterMovingItemsUp ld a,[hli] ld [de],a inc de jr .moveItemsUpLoop .afterMovingItemsUp xor a ld [wListScrollOffset],a ld [wCurrentMenuItem],a .done xor a ld [$cc35],a ; 0 means no item is currently being swapped pop de pop hl jp DisplayListMenuIDLoop DisplayPokemartDialogue_: ; 6c20 (1:6c20) ld a,[wListScrollOffset] ld [$d07e],a call UpdateSprites ; move sprites xor a ld [$cf0a],a ; flag that is set if something is sold or bought .loop xor a ld [wListScrollOffset],a ld [wCurrentMenuItem],a ld [$cc2f],a inc a ld [$cf93],a ld a,$13 ld [$d125],a call DisplayTextBoxID ; draw money text box ld a,$15 ld [$d125],a call DisplayTextBoxID ; do buy/sell/quit menu ld hl,$d128 ; pointer to this pokemart's inventory ld a,[hli] ld l,[hl] ld h,a ; hl = address of inventory ld a,[$d12e] cp a,$02 jp z,.done ld a,[$d12d] ; ID of the chosen menu item and a ; buying? jp z,.buyMenu dec a ; selling? jp z,.sellMenu dec a ; quitting? jp z,.done .sellMenu xor a ld [$cf93],a ld a,$02 ld [$d11b],a ld hl, Func_39bd5 ld b, BANK(Func_39bd5) call Bankswitch ld a,[wNumBagItems] and a jp z,.bagEmpty ld hl,PokemonSellingGreetingText call PrintText call SaveScreenTilesToBuffer1 ; save screen .sellMenuLoop call LoadScreenTilesFromBuffer1 ; restore saved screen ld a,$13 ld [$d125],a call DisplayTextBoxID ; draw money text box ld hl,wNumBagItems ld a,l ld [$cf8b],a ld a,h ld [$cf8c],a xor a ld [$cf93],a ld [wCurrentMenuItem],a ld a,ITEMLISTMENU ld [wListMenuID],a call DisplayListMenuID jp c,.returnToMainPokemartMenu ; if the player closed the menu .confirmItemSale ; if the player is trying to sell a specific item call IsKeyItem ; check if item is unsellable ld a,[$d124] and a jr nz,.unsellableItem ld a,[$cf91] call IsItemHM jr c,.unsellableItem ld a,PRICEDITEMLISTMENU ld [wListMenuID],a ld [$ff8e],a ; halve prices when selling call DisplayChooseQuantityMenu inc a jr z,.sellMenuLoop ; if the player closed the choose quantity menu with the B button ld hl,PokemartTellSellPrice ld bc,$0e01 call PrintText FuncCoord 14,7 ld hl,Coord ld bc,$080f ld a,$14 ld [$d125],a call DisplayTextBoxID ; yes/no menu ld a,[$d12e] cp a,$02 jr z,.sellMenuLoop ; if the player pressed the B button ld a,[$d12d] ; ID of the chosen menu item dec a jr z,.sellMenuLoop ; if the player chose No .sellItem ld a,[$cf0a] ; flag that is set if something is sold or bought and a jr nz,.skipSettingFlag1 inc a ld [$cf0a],a .skipSettingFlag1 call AddAmountSoldToMoney ld hl,wNumBagItems call RemoveItemFromInventory jp .sellMenuLoop .unsellableItem ld hl,PokemartUnsellableItemText call PrintText jp .returnToMainPokemartMenu .bagEmpty ld hl,PokemartItemBagEmptyText call PrintText call SaveScreenTilesToBuffer1 ; save screen jp .returnToMainPokemartMenu .buyMenu ld a,$01 ld [$cf93],a ld a,$03 ld [$d11b],a ld hl, Func_39bd5 ld b, BANK(Func_39bd5) call Bankswitch ld hl,PokemartBuyingGreetingText call PrintText call SaveScreenTilesToBuffer1 ; save screen .buyMenuLoop call LoadScreenTilesFromBuffer1 ; restore saved screen ld a,$13 ld [$d125],a call DisplayTextBoxID ; draw money text box ld hl,$cf7b ld a,l ld [$cf8b],a ld a,h ld [$cf8c],a xor a ld [wCurrentMenuItem],a inc a ld [$cf93],a inc a ; a = 2 (PRICEDITEMLISTMENU) ld [wListMenuID],a call DisplayListMenuID jr c,.returnToMainPokemartMenu ; if the player closed the menu ld a,$63 ld [$cf97],a xor a ld [$ff8e],a call DisplayChooseQuantityMenu inc a jr z,.buyMenuLoop ; if the player closed the choose quantity menu with the B button ld a,[$cf91] ; item ID ld [$d11e],a ; store item ID for GetItemName call GetItemName call CopyStringToCF4B ; copy name to $cf4b ld hl,PokemartTellBuyPrice call PrintText FuncCoord 14,7 ld hl,Coord ld bc,$080f ld a,$14 ld [$d125],a call DisplayTextBoxID ; yes/no menu ld a,[$d12e] cp a,$02 jp z,.buyMenuLoop ; if the player pressed the B button ld a,[$d12d] ; ID of the chosen menu item dec a jr z,.buyMenuLoop ; if the player chose No .buyItem call .isThereEnoughMoney jr c,.notEnoughMoney ld hl,wNumBagItems call AddItemToInventory jr nc,.bagFull call SubtractAmountPaidFromMoney ld a,[$cf0a] ; flag that is set if something is sold or bought and a jr nz,.skipSettingFlag2 ld a,$01 ld [$cf0a],a .skipSettingFlag2 ld a,$b2 call PlaySoundWaitForCurrent ; play sound call WaitForSoundToFinish ; wait until sound is done playing ld hl,PokemartBoughtItemText call PrintText jp .buyMenuLoop .returnToMainPokemartMenu call LoadScreenTilesFromBuffer1 ; restore save screen ld a,$13 ld [$d125],a call DisplayTextBoxID ; draw money text box ld hl,PokemartAnythingElseText call PrintText jp .loop .isThereEnoughMoney ld de,wPlayerMoney ld hl,$ff9f ; item price ld c,3 ; length of money in bytes jp StringCmp .notEnoughMoney ld hl,PokemartNotEnoughMoneyText call PrintText jr .returnToMainPokemartMenu .bagFull ld hl,PokemartItemBagFullText call PrintText jr .returnToMainPokemartMenu .done ld hl,PokemartThankYouText call PrintText ld a,$01 ld [$cfcb],a call UpdateSprites ; move sprites ld a,[$d07e] ld [wListScrollOffset],a ret PokemartBuyingGreetingText: ; 6e0c (1:6e0c) TX_FAR _PokemartBuyingGreetingText db "@" PokemartTellBuyPrice: ; 6e11 (1:6e11) TX_FAR _PokemartTellBuyPrice db "@" PokemartBoughtItemText: ; 6e16 (1:6e16) TX_FAR _PokemartBoughtItemText db "@" PokemartNotEnoughMoneyText: ; 6e1b (1:6e1b) TX_FAR _PokemartNotEnoughMoneyText db "@" PokemartItemBagFullText: ; 6e20 (1:6e20) TX_FAR _PokemartItemBagFullText db "@" PokemonSellingGreetingText: ; 6e25 (1:6e25) TX_FAR _PokemonSellingGreetingText db "@" PokemartTellSellPrice: ; 6e2a (1:6e2a) TX_FAR _PokemartTellSellPrice db "@" PokemartItemBagEmptyText: ; 6e2f (1:6e2f) TX_FAR _PokemartItemBagEmptyText db "@" PokemartUnsellableItemText: ; 6e34 (1:6e34) TX_FAR _PokemartUnsellableItemText db "@" PokemartThankYouText: ; 6e39 (1:6e39) TX_FAR _PokemartThankYouText db "@" PokemartAnythingElseText: ; 6e3e (1:6e3e) TX_FAR _PokemartAnythingElseText db "@" Func_6e43: ; 6e43 (1:6e43) call SaveScreenTilesToBuffer1 ld a, [wWhichPokemon] ; $cf92 ld hl, W_PARTYMON1NAME ; $d2b5 call GetPartyMonName ld hl, $cd6d ld de, $d036 ld bc, $b call CopyData Func_6e5b: ; 6e5b (1:6e5b) ld hl, W_PARTYMON1_MOVE1 ; $d173 ld bc, $2c ld a, [wWhichPokemon] ; $cf92 call AddNTimes ld d, h ld e, l ld b, $4 .asm_6e6b ld a, [hl] and a jr z, .asm_6e8b inc hl dec b jr nz, .asm_6e6b push de call Func_6f07 pop de jp c, Func_6eda push hl push de ld [$d11e], a call GetMoveName ld hl, UnnamedText_6fc8 ; $6fc8 call PrintText pop de pop hl .asm_6e8b ld a, [$d0e0] ld [hl], a ld bc, $15 add hl, bc push hl push de dec a ld hl, Moves ; $4000 ld bc, $6 call AddNTimes ld de, $cee9 ld a, BANK(Moves) call FarCopyData ld a, [$ceee] pop de pop hl ld [hl], a ld a, [W_ISINBATTLE] ; $d057 and a jp z, Func_6efe ld a, [wWhichPokemon] ; $cf92 ld b, a ld a, [wPlayerMonNumber] ; $cc2f cp b jp nz, Func_6efe ld h, d ld l, e ld de, W_PLAYERMONMOVES ld bc, $4 call CopyData ld bc, $11 add hl, bc ld de, W_PLAYERMONPP ; $d02d ld bc, $4 call CopyData jp Func_6efe Func_6eda: ; 6eda (1:6eda) ld hl, UnnamedText_6fb9 ; $6fb9 call PrintText FuncCoord 14, 7 ; $c43a ld hl, Coord ld bc, $80f ld a, $14 ld [$d125], a call DisplayTextBoxID ld a, [wCurrentMenuItem] ; $cc26 and a jp nz, Func_6e5b ld hl, UnnamedText_6fbe ; $6fbe call PrintText ld b, $0 ret Func_6efe: ; 6efe (1:6efe) ld hl, UnnamedText_6fad ; $6fad call PrintText ld b, $1 ret Func_6f07: ; 6f07 (1:6f07) push hl ld hl, UnnamedText_6fc3 ; $6fc3 call PrintText FuncCoord 14, 7 ; $c43a ld hl, Coord ld bc, $80f ld a, $14 ld [$d125], a call DisplayTextBoxID pop hl ld a, [wCurrentMenuItem] ; $cc26 rra ret c ld bc, $fffc add hl, bc push hl ld de, $d0dc ld bc, $4 call CopyData ld hl, Func_39b87 ld b, BANK(Func_39b87) call Bankswitch pop hl .asm_6f39 push hl ld hl, UnnamedText_6fb4 ; $6fb4 call PrintText FuncCoord 4, 7 ; $c430 ld hl, Coord ld b, $4 ld c, $e call TextBoxBorder FuncCoord 6, 8 ; $c446 ld hl, Coord ld de, $d0e1 ld a, [$FF00+$f6] set 2, a ld [$FF00+$f6], a call PlaceString ld a, [$FF00+$f6] res 2, a ld [$FF00+$f6], a ld hl, wTopMenuItemY ; $cc24 ld a, $8 ld [hli], a ld a, $5 ld [hli], a xor a ld [hli], a inc hl ld a, [$cd6c] ld [hli], a ld a, $3 ld [hli], a ld [hl], $0 ld hl, $fff6 set 1, [hl] call HandleMenuInput ld hl, $fff6 res 1, [hl] push af call LoadScreenTilesFromBuffer1 pop af pop hl bit 1, a jr nz, .asm_6fab push hl ld a, [wCurrentMenuItem] ; $cc26 ld c, a ld b, $0 add hl, bc ld a, [hl] push af push bc call IsMoveHM pop bc pop de ld a, d jr c, .asm_6fa2 pop hl add hl, bc and a ret .asm_6fa2 ld hl, UnnamedText_6fe1 ; $6fe1 call PrintText pop hl jr .asm_6f39 .asm_6fab scf ret UnnamedText_6fad: ; 6fb4 (1:6fb4) TX_FAR UnnamedText_a273b db $b,6,"@" UnnamedText_6fb4: ; 6fb4 (1:6fb4) TX_FAR _UnnamedText_6fb4 db "@" UnnamedText_6fb9: ; 6fb9 (1:6fb9) TX_FAR _UnnamedText_6fb9 db "@" UnnamedText_6fbe: ; 6fbe (1:6fbe) TX_FAR _UnnamedText_6fbe db "@" UnnamedText_6fc3: ; 6fc3 (1:6fc3) TX_FAR _UnnamedText_6fc3 db "@" UnnamedText_6fc8: ; 6fc8 (1:6fc8) TX_FAR _UnnamedText_6fc8 ; 0xa2819 db $a db $8 ld a, $ae call PlaySoundWaitForCurrent ld hl, UnnamedText_6fd7 ; $6fd7 ret UnnamedText_6fd7: ; 6fd7 (1:6fd7) TX_FAR _UnnamedText_6fd7 ; 0xa2827 db $a ; 0x6fdb UnnamedText_6fdc: ; 6fdc (1:6fdc) TX_FAR _UnnamedText_6fdc db "@" UnnamedText_6fe1: ; 6fe1 (1:6fe1) TX_FAR _UnnamedText_6fe1 db "@" DisplayPokemonCenterDialogue_: ; 6fe6 (1:6fe6) call SaveScreenTilesToBuffer1 ; save screen ld hl, PokemonCenterWelcomeText call PrintText ld hl, $d72e bit 2, [hl] set 1, [hl] set 2, [hl] jr nz, .skipShallWeHealYourPokemon ld hl, ShallWeHealYourPokemonText call PrintText .skipShallWeHealYourPokemon call YesNoChoicePokeCenter ; yes/no menu ld a, [wCurrentMenuItem] and a jr nz, .declinedHealing ; if the player chose No call Func_7078 call LoadScreenTilesFromBuffer1 ; restore screen ld hl, NeedYourPokemonText call PrintText ld a, $18 ld [$c112], a ; make the nurse turn to face the machine call Delay3 PREDEF HealPartyPredef ld b, BANK(Func_70433) ld hl, Func_70433 call Bankswitch ; do the healing machine animation xor a ld [wMusicHeaderPointer], a ld a, [$c0f0] ld [$c0ef], a ld a, [$d35b] ld [$cfca], a ld [$c0ee], a call PlaySound ld hl, PokemonFightingFitText call PrintText ld a, $14 ld [$c112], a ; make the nurse bow ld c, a call DelayFrames jr .done .declinedHealing call LoadScreenTilesFromBuffer1 ; restore screen .done ld hl, PokemonCenterFarewellText call PrintText jp UpdateSprites ; move sprites PokemonCenterWelcomeText: ; 705d (1:705d) TX_FAR _PokemonCenterWelcomeText db "@" ShallWeHealYourPokemonText: ; 7062 (1:7062) db $a TX_FAR _ShallWeHealYourPokemonText db "@" NeedYourPokemonText: ; 7068 (1:7068) TX_FAR _NeedYourPokemonText db "@" PokemonFightingFitText: ; 706d (1:706d) TX_FAR _PokemonFightingFitText db "@" PokemonCenterFarewellText: ; 7072 (1:7072) db $a TX_FAR _PokemonCenterFarewellText db "@" Func_7078: ; 7078 (1:7078) push hl ld hl, SafariZoneRestHouses ld a, [W_CURMAP] ld b, a .asm_7080 ld a, [hli] cp $ff jr z, .asm_708a ; 0x7083 $5 cp b jr nz, .asm_7080 ; 0x7086 $f8 jr .asm_7090 ; 0x7088 $6 .asm_708a ld a, [$d365] ld [$d719], a .asm_7090 pop hl ret SafariZoneRestHouses: ; 7092 (1:7092) db SAFARI_ZONE_REST_HOUSE_2 db SAFARI_ZONE_REST_HOUSE_3 db SAFARI_ZONE_REST_HOUSE_4 db $ff ; terminator ; function that performs initialization for DisplayTextID DisplayTextIDInit: ; 7096 (1:7096) xor a ld [$cf94],a ld a,[$cf0c] bit 0,a jr nz,.skipDrawingTextBoxBorder ld a,[$ff8c] ; text ID (or sprite ID) and a jr nz,.notStartMenu ; if text ID is 0 (i.e. the start menu) ; Note that the start menu text border is also drawn in the function directly ; below this, so this seems unnecessary. ld a,[$d74b] bit 5,a ; does the player have the pokedex? ; start menu with pokedex FuncCoord 10, 0 ; $c3aa ld hl,Coord ld b,$0e ld c,$08 jr nz,.drawTextBoxBorder ; start menu without pokedex FuncCoord 10, 0 ; $c3aa ld hl,Coord ld b,$0c ld c,$08 jr .drawTextBoxBorder ; if text ID is not 0 (i.e. not the start menu) then do a standard dialogue text box .notStartMenu FuncCoord 0, 12 ; $c490 ld hl,Coord ld b,$04 ld c,$12 .drawTextBoxBorder call TextBoxBorder .skipDrawingTextBoxBorder ld hl,$cfc4 set 0,[hl] ld hl,wFlags_0xcd60 bit 4,[hl] res 4,[hl] jr nz,.skipMovingSprites call UpdateSprites ; move sprites .skipMovingSprites ; loop to copy C1X9 (direction the sprite is facing) to C2X9 for each sprite ; this is done because when you talk to an NPC, they turn to look your way ; the original direction they were facing must be restored after the dialogue is over ld hl,$c119 ld c,$0f ld de,$0010 .spriteFacingDirectionCopyLoop ld a,[hl] inc h ld [hl],a dec h add hl,de dec c jr nz,.spriteFacingDirectionCopyLoop ; loop to force all the sprites in the middle of animation to stand still ; (so that they don't like they're frozen mid-step during the dialogue) ld hl,$c102 ld de,$0010 ld c,e .spriteStandStillLoop ld a,[hl] cp a,$ff ; is the sprite visible? jr z,.nextSprite ; if it is visible and a,$fc ld [hl],a .nextSprite add hl,de dec c jr nz,.spriteStandStillLoop ld b,$9c ; window background address call CopyScreenTileBufferToVRAM ; transfer background in WRAM to VRAM xor a ld [$ffb0],a ; put the window on the screen call LoadFontTilePatterns ld a,$01 ld [H_AUTOBGTRANSFERENABLED],a ; enable continuous WRAM to VRAM transfer each V-blank ret ; function that displays the start menu DrawStartMenu: ; 710b (1:710b) ld a,[$d74b] bit 5,a ; does the player have the pokedex? ; menu with pokedex FuncCoord 10, 0 ; $c3aa ld hl,Coord ld b,$0e ld c,$08 jr nz,.drawTextBoxBorder ; shorter menu if the player doesn't have the pokedex FuncCoord 10, 0 ; $c3aa ld hl,Coord ld b,$0c ld c,$08 .drawTextBoxBorder call TextBoxBorder ld a,%11001011 ; bit mask for down, up, start, B, and A buttons ld [$cc29],a ld a,$02 ld [$cc24],a ; Y position of first menu choice ld a,$0b ld [$cc25],a ; X position of first menu choice ld a,[$cc2d] ; remembered menu selection from last time ld [$cc26],a ld [$cc2a],a xor a ld [$cc37],a ld hl,$d730 set 6,[hl] ; no pauses between printing each letter FuncCoord 12, 2 ; $c3d4 ld hl,Coord ld a,[$d74b] bit 5,a ; does the player have the pokedex? ; case for not having pokdex ld a,$06 jr z,.storeMenuItemCount ; case for having pokedex ld de,StartMenuPokedexText call PrintStartMenuItem ld a,$07 .storeMenuItemCount ld [$cc28],a ; number of menu items ld de,StartMenuPokemonText call PrintStartMenuItem ld de,StartMenuItemText call PrintStartMenuItem ld de,W_PLAYERNAME ; player's name call PrintStartMenuItem ld a,[$d72e] bit 6,a ; is the player using the link feature? ; case for not using link feature ld de,StartMenuSaveText jr z,.printSaveOrResetText ; case for using link feature ld de,StartMenuResetText .printSaveOrResetText call PrintStartMenuItem ld de,StartMenuOptionText call PrintStartMenuItem ld de,StartMenuExitText call PlaceString ld hl,$d730 res 6,[hl] ; turn pauses between printing letters back on ret StartMenuPokedexText: ; 718f (1:718f) db "POKéDEX@" StartMenuPokemonText: ; 7197 (1:7197) db "POKéMON@" StartMenuItemText: ; 719f (1:719f) db "ITEM@" StartMenuSaveText: ; 71a4 (1:71a4) db "SAVE@" StartMenuResetText: ; 71a9 (1:71a9) db "RESET@" StartMenuExitText: ; 71af (1:71af) db "EXIT@" StartMenuOptionText: ; 71b4 (1:71b4) db "OPTION@" PrintStartMenuItem: ; 71bb (1:71bb) push hl call PlaceString pop hl ld de,$28 add hl,de ret CableClubNPC: ; 71c5 (1:71c5) ld hl, CableClubNPCText1 ; $72b8 call PrintText ld a, [$d74b] bit 5, a jp nz, Func_71e1 ld c, $3c call DelayFrames ld hl, CableClubNPCText6 ; $72d2 call PrintText jp Func_7298 Func_71e1: ; 71e1 (1:71e1) ld a, $1 ld [$cc34], a ld a, $5a ld [$cc47], a .asm_71eb ld a, [$ff00+$aa] cp $2 jr z, .asm_721a ; 0x71ef $29 cp $1 jr z, .asm_721a ; 0x71f3 $25 ld a, $ff ld [$ff00+$aa], a ld a, $2 ld [$ff00+$1], a xor a ld [$ff00+$ad], a ld a, $80 ld [$ff00+$2], a ld a, [$cc47] dec a ld [$cc47], a jr z, .asm_7287 ; 0x720b $7a ld a, $1 ld [$ff00+$1], a ld a, $81 ld [$ff00+$2], a call DelayFrame jr .asm_71eb ; 0x7218 $d1 .asm_721a call Func_22ed call DelayFrame call Func_22ed ld c, $32 call DelayFrames ld hl, CableClubNPCText2 ; $72bd call PrintText xor a ld [$cc34], a call YesNoChoice ld a, $1 ld [$cc34], a ld a, [$cc26] and a jr nz, .asm_728f ; 0x723e $4f ld hl, SaveSAVtoSRAM ld b, BANK(SaveSAVtoSRAM) call Bankswitch call WaitForSoundToFinish ld a, $b6 call PlaySoundWaitForCurrent ld hl, CableClubNPCText3 ; $72c2 call PrintText ld hl, $cc47 ld a, $3 ld [hli], a xor a ld [hl], a ld [$ff00+$a9], a ld [$cc42], a call Func_227f ld hl, $cc47 ld a, [hli] inc a jr nz, Func_72a8 ; 0x726b $3b ld a, [hl] inc a jr nz, Func_72a8 ; 0x726f $37 ld b, $a .asm_7273 call DelayFrame call Func_22ed dec b jr nz, .asm_7273 ; 0x727a $f7 call Func_72d7 ld hl, CableClubNPCText4 ; $72c8 call PrintText jr Func_7298 ; 0x7285 $11 .asm_7287 ld hl, CableClubNPCText7 ; $72b3 call PrintText jr Func_7298 ; 0x728d $9 .asm_728f call Func_72d7 ld hl, CableClubNPCText5 ; $72cd call PrintText ; fall through Func_7298: ; 7298 (1:7298) xor a ld hl, $cc47 ld [hli], a ld [hl], a ld hl, $d72e res 6, [hl] xor a ld [$cc34], a ret Func_72a8: ; 72a8 (1:72a8) xor a ld [hld], a ld [hl], a ld hl, Func_5c0a ld b, BANK(Func_5c0a) jp Bankswitch CableClubNPCText7: ; 72b3 (1:72b3) TX_FAR _CableClubNPCText7 db "@" CableClubNPCText1: ; 72b8 (1:72b8) TX_FAR _CableClubNPCText1 db "@" CableClubNPCText2: ; 72bd (1:72bd) TX_FAR _CableClubNPCText2 db "@" CableClubNPCText3: ; 72c2 (1:72c2) TX_FAR _CableClubNPCText3 db $a, "@" CableClubNPCText4: ; 72c8 (1:72c8) TX_FAR _CableClubNPCText4 db "@" CableClubNPCText5: ; 72cd (1:72cd) TX_FAR _CableClubNPCText5 db "@" CableClubNPCText6: ; 72d2 (1:72d2) TX_FAR _CableClubNPCText6 db "@" Func_72d7: ; 72d7 (1:72d7) call Delay3 ld a, $ff ld [$FF00+$aa], a ld a, $2 ld [$FF00+$1], a xor a ld [$FF00+$ad], a ld a, $80 ld [$FF00+$2], a ret ; function to draw various text boxes ; INPUT: ; [$D125] = text box ID DisplayTextBoxID_: ; 72ea (1:72ea) ld a,[$d125] ; a = text box ID cp a,$14 jp z,DisplayYesNoTextBox ld c,a ld hl,TextBoxFunctionTable ld de,3 call SearchTextBoxTable jr c,.functionTableMatch ld hl,TextBoxCoordTable ld de,5 call SearchTextBoxTable jr c,.coordTableMatch ld hl,TextBoxTextAndCoordTable ld de,9 call SearchTextBoxTable jr c,.textAndCoordTableMatch .done ret .functionTableMatch ld a,[hli] ld h,[hl] ld l,a ; hl = address of function ld de,.done push de jp [hl] ; jump to the function .coordTableMatch call GetTextBoxIDCoords call GetAddressOfScreenCoords call TextBoxBorder ret .textAndCoordTableMatch call GetTextBoxIDCoords push hl call GetAddressOfScreenCoords call TextBoxBorder pop hl call GetTextBoxIDText ld a,[$d730] push af ld a,[$d730] set 6,a ; no pauses between printing each letter ld [$d730],a call PlaceString pop af ld [$d730],a call UpdateSprites ; move sprites ret ; function to search a table terminated with $ff for a byte matching c in increments of de ; sets carry flag if a match is found and clears carry flag if not SearchTextBoxTable: ; 734c (1:734c) dec de .loop ld a,[hli] cp a,$ff jr z,.notFound cp c jr z,.found add hl,de jr .loop .found scf .notFound ret ; function to load coordinates from the TextBoxCoordTable or the TextBoxTextAndCoordTable ; INPUT: ; hl = address of coordinates ; OUTPUT: ; b = height ; c = width ; d = row of upper left corner ; e = column of upper left corner GetTextBoxIDCoords: ; 735a (1:735a) ld a,[hli] ; column of upper left corner ld e,a ld a,[hli] ; row of upper left corner ld d,a ld a,[hli] ; column of lower right corner sub e dec a ld c,a ; c = width ld a,[hli] ; row of lower right corner sub d dec a ld b,a ; b = height ret ; function to load a text address and text coordinates from the TextBoxTextAndCoordTable GetTextBoxIDText: ; 7367 (1:7367) ld a,[hli] ld e,a ld a,[hli] ld d,a ; de = address of text push de ; save text address ld a,[hli] ld e,a ; column of upper left corner of text ld a,[hl] ld d,a ; row of upper left corner of text call GetAddressOfScreenCoords pop de ; restore text address ret ; function to point hl to the screen coordinates ; INPUT: ; d = row ; e = column ; OUTPUT: ; hl = address of upper left corner of text box GetAddressOfScreenCoords: ; 7375 (1:7375) push bc ld hl,wTileMap ld bc,20 .loop ; loop to add d rows to the base address ld a,d and a jr z,.addedRows add hl,bc dec d jr .loop .addedRows pop bc add hl,de ret ; Format: ; 00: text box ID ; 01-02: function address TextBoxFunctionTable: ; 7387 (1:7387) dbw $13, Func_74ba dbw $15, Func_74ea dbw $04, Func_76e1 db $ff ; terminator ; Format: ; 00: text box ID ; 01: column of upper left corner ; 02: row of upper left corner ; 03: column of lower right corner ; 04: row of lower right corner TextBoxCoordTable: ; 7391 (1:7391) db $01, 0, 12, 19, 17 db $03, 0, 0, 19, 14 db $07, 0, 0, 11, 6 db $0d, 4, 2, 19, 12 db $10, 7, 0, 19, 17 db $11, 6, 4, 14, 13 db $ff ; terminator ; Format: ; 00: text box ID ; 01: column of upper left corner ; 02: row of upper left corner ; 03: column of lower right corner ; 04: row of lower right corner ; 05-06: address of text ; 07: column of beginning of text ; 08: row of beginning of text ; table of window positions and corresponding text [key, start column, start row, end column, end row, text pointer [2 bytes], text column, text row] TextBoxTextAndCoordTable: ; 73b0 (1:73b0) db $05 ; text box ID db 0,0,14,17 ; text box coordinates dw JapaneseMochimonoText db 3,0 ; text coordinates db $06 ; text box ID db 13,10,19,14 ; text box coordinates dw UseTossText db 15,11 ; text coordinates db $08 ; text box ID db 0,0,7,5 ; text box coordinates dw JapaneseSaveMessageText db 2,2 ; text coordinates db $09 ; text box ID db 0,6,5,10 ; text box coordinates dw JapaneseSpeedOptionsText db 2,7 ; text coordinates db $0b ; text box ID db 8,12,19,17 ; text box coordinates dw BattleMenuText db 10,14 ; text coordinates db $1b ; text box ID db 0,12,19,17 ; text box coordinates dw SafariZoneBattleMenuText db 2,14 ; text coordinates db $0c ; text box ID db 11,11,19,17 ; text box coordinates dw SwitchStatsCancelText db 13,12 ; text coordinates db $0e ; text box ID db 0,0,10,6 ; text box coordinates dw BuySellQuitText db 2,1 ; text coordinates db $0f ; text box ID db 11,0,19,2 ; text box coordinates dw MoneyText db 13,0 ; text coordinates db $12 ; text box ID db 7,6,11,10 ; text box coordinates dw JapaneseAhText db 8,8 ; text coordinates db $1a ; text box ID db 11,8,19,17 ; text box coordinates dw JapanesePokedexMenu db 12,10 ; text coordinates ; note that there is no terminator BuySellQuitText: ; 7413 (1:7413) db "BUY" next "SELL" next "QUIT@@" UseTossText: ; 7422 (1:7422) db "USE" next "TOSS@" JapaneseSaveMessageText: ; 742b (1:742b) db "きろく" next "メッセージ@" JapaneseSpeedOptionsText: ; 7435 (1:7435) db "はやい" next "おそい@" MoneyText: ; 743d (1:743d) db "MONEY@" JapaneseMochimonoText: ; 7443 (1:7443) db "もちもの@" JapaneseMainMenuText: ; 7448 (1:7448) db "つづきから" next "さいしょから@" BattleMenuText: ; 7455 (1:7455) db "FIGHT ",$E1,$E2 next "ITEM RUN@" SafariZoneBattleMenuText: ; 7468 (1:7468) db "BALL× BAIT" next "THROW ROCK RUN@" SwitchStatsCancelText: ; 7489 (1:7489) db "SWITCH" next "STATS" next "CANCEL@" JapaneseAhText: ; 749d (1:749d) db "アッ!@" JapanesePokedexMenu: ; 74a1 (1:74a1) db "データをみる" next "なきごえ" next "ぶんぷをみる" next "キャンセル@" Func_74ba: ; 74ba (1:74ba) ld hl, $d730 set 6, [hl] ld a, $f ld [$d125], a call DisplayTextBoxID FuncCoord 13, 1 ; $c3c1 ld hl, Coord ld b, $1 ld c, $6 call ClearScreenArea FuncCoord 12, 1 ; $c3c0 ld hl, Coord ld de, wPlayerMoney ; $d347 ld c, $a3 call PrintBCDNumber ld hl, $d730 res 6, [hl] ret CurrencyString: ; 74e2 (1:74e2) db " ¥@" Func_74ea: ; 74ea (1:74ea) ld a, [$d730] set 6, a ld [$d730], a xor a ld [$d12d], a ld a, $e ld [$d125], a call DisplayTextBoxID ld a, $3 ld [wMenuWatchedKeys], a ; $cc29 ld a, $2 ld [wMaxMenuItem], a ; $cc28 ld a, $1 ld [wTopMenuItemY], a ; $cc24 ld a, $1 ld [wTopMenuItemX], a ; $cc25 xor a ld [wCurrentMenuItem], a ; $cc26 ld [wLastMenuItem], a ; $cc2a ld [$cc37], a ld a, [$d730] res 6, a ld [$d730], a call HandleMenuInput call PlaceUnfilledArrowMenuCursor bit 0, a jr nz, .asm_7539 bit 1, a jr z, .asm_7539 ld a, $2 ld [$d12e], a jr .asm_754c .asm_7539 ld a, $1 ld [$d12e], a ld a, [wCurrentMenuItem] ; $cc26 ld [$d12d], a ld b, a ld a, [wMaxMenuItem] ; $cc28 cp b jr z, .asm_754c ret .asm_754c ld a, $2 ld [$d12e], a ld a, [wCurrentMenuItem] ; $cc26 ld [$d12d], a scf ret DisplayYesNoTextBox: ; 7559 (1:7559) push hl ld a, [$d730] set 6, a ld [$d730], a xor a ld [$d12d], a ld [$d12e], a ld a, $3 ld [wMenuWatchedKeys], a ; $cc29 ld a, $1 ld [wMaxMenuItem], a ; $cc28 ld a, b ld [wTopMenuItemY], a ; $cc24 ld a, c ld [wTopMenuItemX], a ; $cc25 xor a ld [wLastMenuItem], a ; $cc2a ld [$cc37], a push hl ld hl, $d12c bit 7, [hl] res 7, [hl] jr z, .asm_758d inc a .asm_758d ld [wCurrentMenuItem], a ; $cc26 pop hl push hl push hl call Func_763e ld a, [$d12c] ld hl, MenuStrings ; $7671 ld e, a ld d, $0 ld a, $5 .loop add hl, de dec a jr nz, .loop ld a, [hli] ld c, a ld a, [hli] ld b, a ld e, l ld d, h pop hl push de ld a, [$d12c] cp $5 jr nz, .asm_75b9 call Func_5ab3 jr .asm_75bc .asm_75b9 call TextBoxBorder .asm_75bc call UpdateSprites pop hl ld a, [hli] and a ld bc, $16 jr z, .asm_75ca ld bc, $2a .asm_75ca ld a, [hli] ld e, a ld a, [hli] ld d, a pop hl add hl, bc call PlaceString ld hl, $d730 res 6, [hl] ld a, [$d12c] cp $7 jr nz, .asm_7603 xor a ld [$d12c], a ld a, [wFlags_0xcd60] push af push hl ld hl, wFlags_0xcd60 bit 5, [hl] set 5, [hl] pop hl .asm_75f0 call HandleMenuInput bit 1, a jr nz, .asm_75f0 pop af pop hl ld [wFlags_0xcd60], a ld a, $90 call PlaySound jr .asm_760f .asm_7603 xor a ld [$d12c], a call HandleMenuInput pop hl bit 1, a jr nz, .asm_7627 .asm_760f ld a, [wCurrentMenuItem] ; $cc26 ld [$d12d], a and a jr nz, .asm_7627 ld a, $1 ld [$d12e], a ld c, $f call DelayFrames call Func_7656 and a ret .asm_7627 ld a, $1 ld [wCurrentMenuItem], a ; $cc26 ld [$d12d], a ld a, $2 ld [$d12e], a ld c, $f call DelayFrames call Func_7656 scf ret Func_763e: ; 763e (1:763e) ld de, $cee9 ld bc, $506 .asm_7644 ld a, [hli] ld [de], a inc de dec c jr nz, .asm_7644 push bc ld bc, $e add hl, bc pop bc ld c, $6 dec b jr nz, .asm_7644 ret Func_7656: ; 7656 (1:7656) ld de, $cee9 ld bc, $506 .asm_765c ld a, [de] inc de ld [hli], a dec c jr nz, .asm_765c push bc ld bc, $e add hl, bc pop bc ld c, $6 dec b jr nz, .asm_765c call UpdateSprites ret MenuStrings: ; 7671 (1:7671) db 4,3,0 dw .YesNoMenu db 6,3,0 dw .NorthWestMenu db 6,3,0 dw .SouthEastMenu db 6,3,0 dw .YesNoMenu db 6,3,0 dw .NorthEastMenu db 7,3,0 dw .TradeCancelMenu db 7,4,1 dw .HealCancelMenu db 4,3,0 dw .NoYesMenu .NoYesMenu ; 7699 (1:3699) db "NO",$4E,"YES@" .YesNoMenu ; 76a0 (1:36a0) db "YES",$4E,"NO@" .NorthWestMenu ; 76a7 (1:36a7) db "NORTH",$4E,"WEST@" .SouthEastMenu ; 76b2 (1:36b2) db "SOUTH",$4E,"EAST@" .NorthEastMenu ; 76bd (1:36bd) db "NORTH",$4E,"EAST@" .TradeCancelMenu ; 76c8 (1:36c8) db "TRADE",$4E,"CANCEL@" .HealCancelMenu ; 76d5 (1:36d5) db "HEAL",$4E,"CANCEL@" Func_76e1: ; 76e1 (1:36e1) xor a ld hl, wWhichTrade ; $cd3d ld [hli], a ld [hli], a ld [hli], a ld [hli], a ld [hli], a ld [hl], $c call GetMonFieldMoves ld a, [$cd41] and a jr nz, .asm_770f FuncCoord 11, 11 ; $c487 ld hl, Coord ld b, $5 ld c, $7 call TextBoxBorder call UpdateSprites ld a, $c ld [$FF00+$f7], a FuncCoord 13, 12 ; $c49d ld hl, Coord ld de, PokemonMenuEntries ; $77c2 jp PlaceString .asm_770f push af FuncCoord 0, 11 ; $c47c ld hl, Coord ld a, [$cd42] dec a ld e, a ld d, $0 add hl, de ld b, $5 ld a, $12 sub e ld c, a pop af ld de, $ffd8 .asm_7725 add hl, de inc b inc b dec a jr nz, .asm_7725 ld de, $ffec add hl, de inc b call TextBoxBorder call UpdateSprites FuncCoord 0, 12 ; $c490 ld hl, Coord ld a, [$cd42] inc a ld e, a ld d, $0 add hl, de ld de, $ffd8 ld a, [$cd41] .asm_7747 add hl, de dec a jr nz, .asm_7747 xor a ld [$cd41], a ld de, wWhichTrade ; $cd3d .asm_7752 push hl ld hl, FieldMoveNames ; $778d ld a, [de] and a jr z, .asm_7776 inc de ld b, a .asm_775c dec b jr z, .asm_7766 .asm_775f ld a, [hli] cp $50 jr nz, .asm_775f jr .asm_775c .asm_7766 ld b, h ld c, l pop hl push de ld d, b ld e, c call PlaceString ld bc, $28 add hl, bc pop de jr .asm_7752 .asm_7776 pop hl ld a, [$cd42] ld [$FF00+$f7], a FuncCoord 0, 12 ; $c490 ld hl, Coord ld a, [$cd42] inc a ld e, a ld d, $0 add hl, de ld de, PokemonMenuEntries ; $77c2 jp PlaceString FieldMoveNames: ; 778d (1:778d) db "CUT@" db "FLY@" db "@" db "SURF@" db "STRENGTH@" db "FLASH@" db "DIG@" db "TELEPORT@" db "SOFTBOILED@" PokemonMenuEntries: ; 77c2 (1:77c2) db "STATS" next "SWITCH" next "CANCEL@" GetMonFieldMoves: ; 77d6 (1:77d6) ld a, [wWhichPokemon] ; $cf92 ld hl, W_PARTYMON1_MOVE1 ; $d173 ld bc, $2c call AddNTimes ld d, h ld e, l ld c, $5 ld hl, wWhichTrade ; $cd3d .asm_77e9 push hl .asm_77ea dec c jr z, .asm_7821 ld a, [de] ; de is RAM address of move and a jr z, .asm_7821 ld b, a inc de ; go to next move ld hl, FieldMoveDisplayData ; $7823 .asm_77f6 ld a, [hli] cp $ff jr z, .asm_77ea cp b jr z, .asm_7802 inc hl inc hl jr .asm_77f6 .asm_7802 ld a, b ld [$cd43], a ld a, [hli] ld b, [hl] pop hl ld [hli], a ld a, [$cd41] inc a ld [$cd41], a ld a, [$cd42] cp b jr c, .asm_781b ld a, b ld [$cd42], a .asm_781b ld a, [$cd43] ld b, a jr .asm_77e9 .asm_7821 pop hl ret ; Format: [Move id], [list priority], [leftmost tile] ; Move id = id of move ; List priority = lower number means higher priority when field moves are displayed ; these priorities must be unique ; Leftmost tile = -1 + tile column in which the first letter of the move's name should be displayed ; "SOFTBOILED" is $08 because it has 4 more letters than "SURF", for example, whose value is $0C FieldMoveDisplayData: ; 7823 (1:7823) db CUT, $01, $0C db FLY, $02, $0C db $B4, $03, $0C ; unused field move db SURF, $04, $0C db STRENGTH, $05, $0A db FLASH, $06, $0C db DIG, $07, $0C db TELEPORT, $08, $0A db SOFTBOILED, $09, $08 db $ff ; list terminator Func_783f: ; 783f (1:783f) ld hl, W_DAMAGE ; $d0d7 ld a, [hl] srl a ld [hli], a ld a, [hl] rr a ld [hld], a or [hl] jr nz, .asm_784f inc hl inc [hl] .asm_784f ld hl, W_PLAYERMONCURHP ; $d015 ld de, W_PLAYERMONMAXHP ; $d023 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jp z, Func_7861 ld hl, W_ENEMYMONCURHP ; $cfe6 ld de, W_ENEMYMONMAXHP ; $cff4 Func_7861: ; 7861 (1:7861) ld bc, wHPBarOldHP+1 ld a, [hli] ld [bc], a ld a, [hl] dec bc ld [bc], a ld a, [de] dec bc ld [bc], a inc de ld a, [de] dec bc ld [bc], a ld a, [$d0d8] ld b, [hl] add b ld [hld], a ld [wHPBarNewHP], a ld a, [W_DAMAGE] ; $d0d7 ld b, [hl] adc b ld [hli], a ld [wHPBarNewHP+1], a jr c, .asm_7890 ld a, [hld] ld b, a ld a, [de] dec de sub b ld a, [hli] ld b, a ld a, [de] inc de sbc b jr nc, .asm_789c .asm_7890 ld a, [de] ld [hld], a ld [wHPBarNewHP], a dec de ld a, [de] ld [hli], a ld [wHPBarNewHP+1], a inc de .asm_789c ld a, [H_WHOSETURN] ; $FF00+$f3 and a FuncCoord 10, 9 ; $c45e ld hl, Coord ld a, $1 jr z, .asm_78aa FuncCoord 2, 2 ; $c3ca ld hl, Coord xor a .asm_78aa ld [wListMenuID], a ; $cf94 ld a, $48 call Predef ; indirect jump to UpdateHPBar (fa1d (3:7a1d)) ld a, $0 call Predef ; indirect jump to Func_3cd60 (3cd60 (f:4d60)) ld a, $49 call Predef ; indirect jump to Func_3cdec (3cdec (f:4dec)) ld hl, ReadPlayerMonCurHPAndStatus ld b, BANK(ReadPlayerMonCurHPAndStatus) call Bankswitch ld hl, UnnamedText_78dc ; $78dc ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld a, [W_PLAYERMOVEEFFECT] ; $cfd3 jr z, .asm_78d2 ld a, [W_ENEMYMOVEEFFECT] ; $cfcd .asm_78d2 cp $8 jr nz, .asm_78d9 ld hl, UnnamedText_78e1 ; $78e1 .asm_78d9 jp PrintText UnnamedText_78dc: ; 78dc (1:78dc) TX_FAR _UnnamedText_78dc db "@" UnnamedText_78e1: ; 78e1 (1:78e1) TX_FAR _UnnamedText_78e1 db "@" Func_78e6: ; 78e6 (1:78e6) ld hl, $d730 set 6, [hl] ld a, ITEM_NAME ld [W_LISTTYPE], a call SaveScreenTilesToBuffer1 xor a ld [$cc2c], a ld [$ccd3], a ld a, [wFlags_0xcd60] bit 3, a jr nz, Func_790c ld a, $99 call PlaySound ld hl, UnnamedText_7b22 ; $7b22 call PrintText Func_790c: ; 790c (1:790c) ld a, [$ccd3] ld [wCurrentMenuItem], a ; $cc26 ld hl, wFlags_0xcd60 set 5, [hl] call LoadScreenTilesFromBuffer2 ld hl, wTileMap ld b, $8 ld c, $e call TextBoxBorder call UpdateSprites FuncCoord 2, 2 ; $c3ca ld hl, Coord ld de, PlayersPCMenuEntries ; $7af5 call PlaceString ld hl, wTopMenuItemY ; $cc24 ld a, $2 ld [hli], a dec a ld [hli], a inc hl inc hl ld a, $3 ld [hli], a ld a, $3 ld [hli], a xor a ld [hl], a ld hl, wListScrollOffset ; $cc36 ld [hli], a ld [hl], a ld [wPlayerMonNumber], a ; $cc2f ld hl, UnnamedText_7b27 ; $7b27 call PrintText call HandleMenuInput bit 1, a jp nz, Func_796d call PlaceUnfilledArrowMenuCursor ld a, [wCurrentMenuItem] ; $cc26 ld [$ccd3], a and a jp z, Func_7a12 dec a jp z, Func_7995 dec a jp z, Func_7a8f Func_796d: ; 796d (1:796d) ld a, [wFlags_0xcd60] bit 3, a jr nz, .asm_797c ld a, $9a call PlaySound call WaitForSoundToFinish .asm_797c ld hl, wFlags_0xcd60 res 5, [hl] call LoadScreenTilesFromBuffer2 xor a ld [wListScrollOffset], a ; $cc36 ld [$cc2c], a ld hl, $d730 res 6, [hl] xor a ld [$cc3c], a ret Func_7995: ; 7995 (1:7995) xor a ld [wCurrentMenuItem], a ; $cc26 ld [wListScrollOffset], a ; $cc36 ld a, [wNumBagItems] ; $d31d and a jr nz, Func_79ab ld hl, UnnamedText_7b3b ; $7b3b call PrintText jp Func_790c Func_79ab: ; 79ab (1:79ab) ld hl, UnnamedText_7b2c ; $7b2c call PrintText ld hl, wNumBagItems ; $d31d ld a, l ld [$cf8b], a ld a, h ld [$cf8c], a xor a ld [$cf93], a ld a, $3 ld [wListMenuID], a ; $cf94 call DisplayListMenuID jp c, Func_790c call IsKeyItem ld a, $1 ld [$cf96], a ld a, [$d124] and a jr nz, .asm_79e7 ld hl, UnnamedText_7b31 ; $7b31 call PrintText call DisplayChooseQuantityMenu cp $ff jp z, Func_79ab .asm_79e7 ld hl, wNumBoxItems ; $d53a call AddItemToInventory jr c, .asm_79f8 ld hl, UnnamedText_7b40 ; $7b40 call PrintText jp Func_79ab .asm_79f8 ld hl, wNumBagItems ; $d31d call RemoveItemFromInventory call WaitForSoundToFinish ld a, $ab call PlaySound call WaitForSoundToFinish ld hl, UnnamedText_7b36 ; $7b36 call PrintText jp Func_79ab Func_7a12: ; 7a12 (1:7a12) xor a ld [wCurrentMenuItem], a ; $cc26 ld [wListScrollOffset], a ; $cc36 ld a, [wNumBoxItems] ; $d53a and a jr nz, Func_7a28 ld hl, UnnamedText_7b54 ; $7b54 call PrintText jp Func_790c Func_7a28: ; 7a28 (1:7a28) ld hl, UnnamedText_7b45 ; $7b45 call PrintText ld hl, wNumBoxItems ; $d53a ld a, l ld [$cf8b], a ld a, h ld [$cf8c], a xor a ld [$cf93], a ld a, $3 ld [wListMenuID], a ; $cf94 call DisplayListMenuID jp c, Func_790c call IsKeyItem ld a, $1 ld [$cf96], a ld a, [$d124] and a jr nz, .asm_7a64 ld hl, UnnamedText_7b4a ; $7b4a call PrintText call DisplayChooseQuantityMenu cp $ff jp z, Func_7a28 .asm_7a64 ld hl, wNumBagItems ; $d31d call AddItemToInventory jr c, .asm_7a75 ld hl, UnnamedText_7b59 ; $7b59 call PrintText jp Func_7a28 .asm_7a75 ld hl, wNumBoxItems ; $d53a call RemoveItemFromInventory call WaitForSoundToFinish ld a, $ab call PlaySound call WaitForSoundToFinish ld hl, UnnamedText_7b4f ; $7b4f call PrintText jp Func_7a28 Func_7a8f: ; 7a8f (1:7a8f) xor a ld [wCurrentMenuItem], a ; $cc26 ld [wListScrollOffset], a ; $cc36 ld a, [wNumBoxItems] ; $d53a and a jr nz, Func_7aa5 ld hl, UnnamedText_7b54 ; $7b54 call PrintText jp Func_790c Func_7aa5: ; 7aa5 (1:7aa5) ld hl, UnnamedText_7b5e ; $7b5e call PrintText ld hl, wNumBoxItems ; $d53a ld a, l ld [$cf8b], a ld a, h ld [$cf8c], a xor a ld [$cf93], a ld a, $3 ld [wListMenuID], a ; $cf94 push hl call DisplayListMenuID pop hl jp c, Func_790c push hl call IsKeyItem pop hl ld a, $1 ld [$cf96], a ld a, [$d124] and a jr nz, .asm_7aef ld a, [$cf91] call IsItemHM jr c, .asm_7aef push hl ld hl, UnnamedText_7b63 ; $7b63 call PrintText call DisplayChooseQuantityMenu pop hl cp $ff jp z, Func_7aa5 .asm_7aef call TossItem jp Func_7aa5 PlayersPCMenuEntries: ; 7af5 (1:7af5) db "WITHDRAW ITEM" next "DEPOSIT ITEM" next "TOSS ITEM" next "LOG OFF@" UnnamedText_7b22: ; 7b22 (1:7b22) TX_FAR _UnnamedText_7b22 db "@" UnnamedText_7b27: ; 7b27 (1:7b27) TX_FAR _UnnamedText_7b27 db "@" UnnamedText_7b2c: ; 7b2c (1:7b2c) TX_FAR _UnnamedText_7b2c db "@" UnnamedText_7b31: ; 7b31 (1:7b31) TX_FAR _UnnamedText_7b31 db "@" UnnamedText_7b36: ; 7b36 (1:7b36) TX_FAR _UnnamedText_7b36 db "@" UnnamedText_7b3b: ; 7b3b (1:7b3b) TX_FAR _UnnamedText_7b3b db "@" UnnamedText_7b40: ; 7b40 (1:7b40) TX_FAR _UnnamedText_7b40 db "@" UnnamedText_7b45: ; 7b45 (1:7b45) TX_FAR _UnnamedText_7b45 db "@" UnnamedText_7b4a: ; 7b4a (1:7b4a) TX_FAR _UnnamedText_7b4a db "@" UnnamedText_7b4f: ; 7b4f (1:7b4f) TX_FAR _UnnamedText_7b4f db "@" UnnamedText_7b54: ; 7b54 (1:7b54) TX_FAR _UnnamedText_7b54 db "@" UnnamedText_7b59: ; 7b59 (1:7b59) TX_FAR _UnnamedText_7b59 db "@" UnnamedText_7b5e: ; 7b5e (1:7b5e) TX_FAR _UnnamedText_7b5e db "@" UnnamedText_7b63: ; 7b63 (1:7b63) TX_FAR _UnnamedText_7b63 db "@" _RemovePokemon: ; 7b68 (1:7b68) ld hl, W_NUMINPARTY ; $d163 ld a, [$cf95] and a jr z, .asm_7b74 ld hl, W_NUMINBOX ; $da80 .asm_7b74 ld a, [hl] dec a ld [hli], a ld a, [wWhichPokemon] ; $cf92 ld c, a ld b, $0 add hl, bc ld e, l ld d, h inc de .asm_7b81 ld a, [de] inc de ld [hli], a inc a jr nz, .asm_7b81 ld hl, W_PARTYMON1OT ; $d273 ld d, $5 ld a, [$cf95] and a jr z, .asm_7b97 ld hl, W_BOXMON1OT ld d, $13 .asm_7b97 ld a, [wWhichPokemon] ; $cf92 call SkipFixedLengthTextEntries ld a, [wWhichPokemon] ; $cf92 cp d jr nz, .asm_7ba6 ld [hl], $ff ret .asm_7ba6 ld d, h ld e, l ld bc, $b add hl, bc ld bc, W_PARTYMON1NAME ; $d2b5 ld a, [$cf95] and a jr z, .asm_7bb8 ld bc, W_BOXMON1NAME .asm_7bb8 call CopyDataUntil ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA) ld bc, $2c ld a, [$cf95] and a jr z, .asm_7bcd ld hl, W_BOXMON1DATA ld bc, $21 .asm_7bcd ld a, [wWhichPokemon] ; $cf92 call AddNTimes ld d, h ld e, l ld a, [$cf95] and a jr z, .asm_7be4 ld bc, $21 add hl, bc ld bc, W_BOXMON1OT jr .asm_7beb .asm_7be4 ld bc, $2c add hl, bc ld bc, W_PARTYMON1OT ; $d273 .asm_7beb call CopyDataUntil ld hl, W_PARTYMON1NAME ; $d2b5 ld a, [$cf95] and a jr z, .asm_7bfa ld hl, W_BOXMON1NAME .asm_7bfa ld bc, $b ld a, [wWhichPokemon] ; $cf92 call AddNTimes ld d, h ld e, l ld bc, $b add hl, bc ld bc, wPokedexOwned ; $d2f7 ld a, [$cf95] and a jr z, .asm_7c15 ld bc, $dee2 .asm_7c15 jp CopyDataUntil Func_7c18: ; 7c18 (1:7c18) ld hl, $d730 set 6, [hl] ld a, $3d call Predef ld hl, $d730 res 6, [hl] call ReloadMapData ld c, $a call DelayFrames ld a, $3a call Predef ld a, [$d11e] dec a ld c, a ld b, $1 ld hl, $d30a ld a, $10 call Predef ld a, $1 ld [$cc3c], a ret SECTION "bank3",ROMX,BANK[$3] _GetJoypadState: ; c000 (3:4000) ld a, [H_JOYPADSTATE] cp BTN_A | BTN_B | BTN_SELECT | BTN_START ; soft reset sequence jp z, HandleJoypadResetButtons ld b, a ld a, [H_OLDPRESSEDBUTTONS] ld e, a xor b ld d, a and e ld [H_NEWLYRELEASEDBUTTONS], a ld a, d and b ld [H_NEWLYPRESSEDBUTTONS], a ld a, b ld [H_OLDPRESSEDBUTTONS], a ld a, [$d730] bit 5, a jr nz, DiscardButtonPresses ld a, [H_OLDPRESSEDBUTTONS] ld [H_CURRENTPRESSEDBUTTONS], a ld a, [wJoypadForbiddenButtonsMask] and a ret z cpl ld b, a ld a, [H_CURRENTPRESSEDBUTTONS] and b ld [H_CURRENTPRESSEDBUTTONS], a ld a, [H_NEWLYPRESSEDBUTTONS] and b ld [H_NEWLYPRESSEDBUTTONS], a ret ; clears all button presses DiscardButtonPresses: ; c034 (3:4034) xor a ld [H_CURRENTPRESSEDBUTTONS], a ld [H_NEWLYPRESSEDBUTTONS], a ld [H_NEWLYRELEASEDBUTTONS], a ret HandleJoypadResetButtons: ; c03c (3:403c) call DelayFrame ld a, $30 ld [rJOYP], a ; reset joypad state (to enusre the user really intends to reset) ld hl, H_SOFTRESETCOUNTER dec [hl] jp z, SoftReset jp GetJoypadState MapSongBanks: ; c04d (3:404d) db MUSIC_PALLET_TOWN, BANK(Music_PalletTown) ;PALLET_TOWN db MUSIC_CITIES1, BANK(Music_Cities1) ; VIRIDIAN_CITY db MUSIC_CITIES1, BANK(Music_Cities1) ; PEWTER_CITY db MUSIC_CITIES2, BANK(Music_Cities2) ; CERULEAN_CITY db MUSIC_LAVENDER, BANK(Music_Lavender) ; LAVENDER_TOWN db MUSIC_VERMILION, BANK(Music_Vermilion) ; VERMILION_CITY db MUSIC_CELADON, BANK(Music_Celadon) ; CELADON_CITY db MUSIC_CITIES2, BANK(Music_Cities2) ; FUCHSIA_CITY db MUSIC_CINNABAR, BANK(Music_Cinnabar) ; CINNABAR_ISLAND db MUSIC_INDIGO_PLATEAU, BANK(Music_IndigoPlateau) ; INDIGO_PLATEAU db MUSIC_CITIES1, BANK(Music_Cities1) ; SAFFRON_CITY db MUSIC_CITIES1, BANK(Music_Cities1) ; unused db MUSIC_ROUTES1, BANK(Music_Routes1) ; ROUTE_1 db MUSIC_ROUTES1, BANK(Music_Routes1) ; ROUTE_2 db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_3 db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_4 db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_5 db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_6 db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_7 db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_8 db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_9 db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_10 db MUSIC_ROUTES4, BANK(Music_Routes4) ; ROUTE_11 db MUSIC_ROUTES4, BANK(Music_Routes4) ; ROUTE_12 db MUSIC_ROUTES4, BANK(Music_Routes4) ; ROUTE_13 db MUSIC_ROUTES4, BANK(Music_Routes4) ; ROUTE_14 db MUSIC_ROUTES4, BANK(Music_Routes4) ; ROUTE_15 db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_16 db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_17 db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_18 db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_19 db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_20 db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_21 db MUSIC_ROUTES3, BANK(Music_Routes3) ; ROUTE_22 db MUSIC_INDIGO_PLATEAU, BANK(Music_IndigoPlateau) ; ROUTE_23 db MUSIC_ROUTES2, BANK(Music_Routes2) ; ROUTE_24 db MUSIC_ROUTES2, BANK(Music_Routes2) ; ROUTE_25 db MUSIC_PALLET_TOWN, BANK(Music_PalletTown) ; RedsHouse1F db MUSIC_PALLET_TOWN, BANK(Music_PalletTown) ; RedsHouse2F db MUSIC_PALLET_TOWN, BANK(Music_PalletTown) ; BluesHouse db MUSIC_OAKS_LAB, BANK(Music_OaksLab) ; OaksLab db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; ViridianPokecenter db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; ViridianMart db MUSIC_CITIES1, BANK(Music_Cities1) ; School db MUSIC_CITIES1, BANK(Music_Cities1) ; ViridianHouse db MUSIC_GYM, BANK(Music_Gym) ; ViridianGym db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; DiglettsCaveRoute2 db MUSIC_CITIES1, BANK(Music_Cities1) ; ViridianForestexit db MUSIC_CITIES1, BANK(Music_Cities1) ; Route2House db MUSIC_CITIES1, BANK(Music_Cities1) ; Route2Gate db MUSIC_CITIES1, BANK(Music_Cities1) ; ViridianForestEntrance db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; ViridianForest db MUSIC_CITIES1, BANK(Music_Cities1) ; MuseumF1 db MUSIC_CITIES1, BANK(Music_Cities1) ; MuseumF2 db MUSIC_GYM, BANK(Music_Gym) ; PewterGym db MUSIC_CITIES1, BANK(Music_Cities1) ; PewterHouse1 db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; PewterMart db MUSIC_CITIES1, BANK(Music_Cities1) ; PewterHouse2 db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; PewterPokecenter db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; MtMoon1 db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; MtMoon2 db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; MtMoon3 db MUSIC_CITIES2, BANK(Music_Cities2) ; CeruleanHouseTrashed db MUSIC_CITIES2, BANK(Music_Cities2) ; CeruleanHouse db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeruleanPokecenter db MUSIC_GYM, BANK(Music_Gym) ; CeruleanGym db MUSIC_CITIES2, BANK(Music_Cities2) ; BikeShop db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeruleanMart db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; MtMoonPokecenter db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; CeruleanHouseTrashed db MUSIC_CITIES1, BANK(Music_Cities1) ; Route5Gate db MUSIC_CITIES1, BANK(Music_Cities1) ; UndergroundTunnelEntranceRoute5 db MUSIC_CITIES1, BANK(Music_Cities1) ; DayCareM db MUSIC_CITIES1, BANK(Music_Cities1) ; Route6Gate db MUSIC_CITIES1, BANK(Music_Cities1) ; UndergroundTunnelEntranceRoute6 db MUSIC_VERMILION, BANK(Music_Vermilion) ; FREEZE db MUSIC_CITIES1, BANK(Music_Cities1) ; Route7Gate db MUSIC_CITIES1, BANK(Music_Cities1) ; UndergroundPathEntranceRoute7 db MUSIC_CELADON, BANK(Music_Celadon) ;FREEZE db MUSIC_CITIES1, BANK(Music_Cities1) ; Route8Gate db MUSIC_CITIES1, BANK(Music_Cities1) ; UndergroundPathEntranceRoute8 db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; RockTunnelPokecenter db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; RockTunnel1 db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; PowerPlant db MUSIC_VERMILION, BANK(Music_Vermilion) ; Route11Gate db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; DiglettsCaveEntranceRoute11 db MUSIC_VERMILION, BANK(Music_Vermilion) ; Route11GateUpstairs db MUSIC_CITIES1, BANK(Music_Cities1) ; Route12Gate db MUSIC_CITIES2, BANK(Music_Cities2) ; BillsHouse db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; VermilionPokecenter db MUSIC_VERMILION, BANK(Music_Vermilion) ; FanClub db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; VermilionMart db MUSIC_GYM, BANK(Music_Gym) ; VermilionGym db MUSIC_VERMILION, BANK(Music_Vermilion) ; VermilionHouse1 db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; VermilionDock db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne1 db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne2 db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne3 db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne4 db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne5 db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne6 db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne7 db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne8 db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne9 db MUSIC_SS_ANNE, BANK(Music_SSAnne) ; SSAnne10 db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ;unused db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ;unused db MUSIC_SS_ANNE, BANK(Music_SSAnne) ;unused db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; VictoryRoad1 db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ;unused db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ;unused db MUSIC_SILPH_CO, BANK(Music_SilphCo) ;unused db MUSIC_SILPH_CO, BANK(Music_SilphCo) ;unused db MUSIC_INDIGO_PLATEAU, BANK(Music_IndigoPlateau) ; Lance db MUSIC_SS_ANNE, BANK(Music_SSAnne) ;unused db MUSIC_SS_ANNE, BANK(Music_SSAnne) ;unused db MUSIC_SS_ANNE, BANK(Music_SSAnne) ;unused db MUSIC_SS_ANNE, BANK(Music_SSAnne) ;unused db MUSIC_PALLET_TOWN, BANK(Music_PalletTown) ; HallofFameRoom db MUSIC_ROUTES1, BANK(Music_Routes1) ; UndergroundPathNS db MUSIC_INDIGO_PLATEAU, BANK(Music_IndigoPlateau) ; Gary db MUSIC_ROUTES1, BANK(Music_Routes1) ; UndergroundPathWE db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMart1 db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMart2 db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMart3 db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMart4 db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMartRoof db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMartElevator db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonMansion1 db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonMansion2 db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonMansion3 db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonMansion4 db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonMansion5 db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonPokecenter db MUSIC_GYM, BANK(Music_Gym) ; CeladonGym db MUSIC_GAME_CORNER, BANK(Music_GameCorner) ; CeladonGameCorner db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CeladonMart5 db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonPrizeRoom db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonDiner db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonHouse db MUSIC_CELADON, BANK(Music_Celadon) ; CeladonHotel db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; LavenderPokecenter db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower1 db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower2 db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower3 db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower4 db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower5 db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower6 db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; PokemonTower7 db MUSIC_LAVENDER, BANK(Music_Lavender) ; LavenderHouse1 db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; LavenderMart db MUSIC_LAVENDER, BANK(Music_Lavender) ; LavenderHouse2 db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; FuchsiaMart db MUSIC_CITIES2, BANK(Music_Cities2) ; FuchsiaHouse1 db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; FuchsiaPokecenter db MUSIC_CITIES2, BANK(Music_Cities2) ; FuchsiaHouse2 db MUSIC_CITIES2, BANK(Music_Cities2) ; SafariZoneEntrance db MUSIC_GYM, BANK(Music_Gym) ; FuchsiaGym db MUSIC_CITIES2, BANK(Music_Cities2) ; FuchsiaMeetingRoom db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; SeafoamIslands2 db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; SeafoamIslands3 db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; SeafoamIslands4 db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; SeafoamIslands5 db MUSIC_CITIES2, BANK(Music_Cities2) ; VermilionHouse2 db MUSIC_CITIES2, BANK(Music_Cities2) ; FuchsiaHouse3 db MUSIC_CINNABAR_MANSION, BANK(Music_CinnabarMansion) ; Mansion1 db MUSIC_GYM, BANK(Music_Gym) ; CinnabarGym db MUSIC_CINNABAR, BANK(Music_Cinnabar) ; Lab1 db MUSIC_CINNABAR, BANK(Music_Cinnabar) ; Lab2 db MUSIC_CINNABAR, BANK(Music_Cinnabar) ; Lab3 db MUSIC_CINNABAR, BANK(Music_Cinnabar) ; Lab4 db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CinnabarPokecenter db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; CinnabarMart db MUSIC_CINNABAR, BANK(Music_Cinnabar) db MUSIC_INDIGO_PLATEAU, BANK(Music_IndigoPlateau) ; IndigoPlateauLobby db MUSIC_CITIES1, BANK(Music_Cities1) ; CopycatsHouseF1 db MUSIC_CITIES1, BANK(Music_Cities1) ; CopycatsHouseF2 db MUSIC_CITIES1, BANK(Music_Cities1) ; FightingDojo db MUSIC_GYM, BANK(Music_Gym) ; SaffronGym db MUSIC_CITIES1, BANK(Music_Cities1) ; SaffronHouse1 db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; SaffronMart db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo1 db MUSIC_POKECENTER, BANK(Music_Pokecenter) ; SaffronPokecenter db MUSIC_CITIES1, BANK(Music_Cities1) ; SaffronHouse2 db MUSIC_CITIES1, BANK(Music_Cities1) ; Route15Gate db MUSIC_CITIES1, BANK(Music_Cities1) ; Route15GateUpstairs db MUSIC_CITIES1, BANK(Music_Cities1) ; Route16GateMap db MUSIC_CITIES1, BANK(Music_Cities1) ; Route16GateUpstairs db MUSIC_CELADON, BANK(Music_Celadon) ; Route16House db MUSIC_CELADON, BANK(Music_Celadon) ; Route12House db MUSIC_CITIES1, BANK(Music_Cities1) ; Route18Gate db MUSIC_CITIES1, BANK(Music_Cities1) ; Route18GateUpstairs db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; SeafoamIslands1 db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; Route22Gate db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; VictoryRoad2 db MUSIC_CITIES1, BANK(Music_Cities1) ; Route12GateUpstairs db MUSIC_VERMILION, BANK(Music_Vermilion) ; VermilionHouse3 db MUSIC_DUNGEON2, BANK(Music_Dungeon2) ; DiglettsCave db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; VictoryRoad3 db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; RocketHideout1 db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; RocketHideout2 db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; RocketHideout3 db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; RocketHideout4 db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; RocketHideoutElevator db MUSIC_DUNGEON1, BANK(Music_Dungeon1) db MUSIC_DUNGEON1, BANK(Music_Dungeon1) db MUSIC_DUNGEON1, BANK(Music_Dungeon1) db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo2 db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo3 db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo4 db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo5 db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo6 db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo7 db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo8 db MUSIC_CINNABAR_MANSION, BANK(Music_CinnabarMansion) ; Mansion2 db MUSIC_CINNABAR_MANSION, BANK(Music_CinnabarMansion) ; Mansion3 db MUSIC_CINNABAR_MANSION, BANK(Music_CinnabarMansion) ; Mansion4 db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneEast db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneNorth db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneWest db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneCenter db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneRestHouse1 db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneSecretHouse db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneRestHouse2 db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneRestHouse3 db MUSIC_SAFARI_ZONE, BANK(Music_SafariZone) ; SafariZoneRestHouse4 db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; UnknownDungeon2 db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; UnknownDungeon3 db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; UnknownDungeon1 db MUSIC_CITIES2, BANK(Music_Cities2) ; NameRater db MUSIC_CITIES1, BANK(Music_Cities1) ; CeruleanHouse2 db MUSIC_CINNABAR, BANK(Music_Cinnabar) db MUSIC_DUNGEON3, BANK(Music_Dungeon3) ; RockTunnel2 db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo9 db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo10 db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCo11 db MUSIC_SILPH_CO, BANK(Music_SilphCo) ; SilphCoElevator db MUSIC_SILPH_CO, BANK(Music_SilphCo) db MUSIC_SILPH_CO, BANK(Music_SilphCo) db MUSIC_CELADON, BANK(Music_Celadon) ; BattleCenterM db MUSIC_CELADON, BANK(Music_Celadon) ; TradeCenterM db MUSIC_SILPH_CO, BANK(Music_SilphCo) db MUSIC_SILPH_CO, BANK(Music_SilphCo) db MUSIC_SILPH_CO, BANK(Music_SilphCo) db MUSIC_SILPH_CO, BANK(Music_SilphCo) db MUSIC_GYM, BANK(Music_Gym) ; Lorelei db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; Bruno db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; Agatha ; see also MapHeaderPointers MapHeaderBanks: ; c23d (3:423d) db BANK(PalletTown_h) ;PALLET_TOWN db BANK(ViridianCity_h) ; VIRIDIAN_CITY db BANK(PewterCity_h) ; PEWTER_CITY db BANK(CeruleanCity_h) ; CERULEAN_CITY db BANK(LavenderTown_h) ; LAVENDER_TOWN db BANK(VermilionCity_h) ; VERMILION_CITY db BANK(CeladonCity_h) ; CELADON_CITY db BANK(FuchsiaCity_h) ; FUCHSIA_CITY db BANK(CinnabarIsland_h) ; CINNABAR_ISLAND db BANK(IndigoPlateau_h) ; INDIGO_PLATEAU db BANK(SaffronCity_h) ; SAFFRON_CITY db $1 ; unused db BANK(Route1_h) ; ROUTE_1 db BANK(Route2_h) ; ROUTE_2 db BANK(Route3_h) ; ROUTE_3 db BANK(Route4_h) ; ROUTE_4 db BANK(Route5_h) ; ROUTE_5 db BANK(Route6_h) ; ROUTE_6 db BANK(Route7_h) ; ROUTE_7 db BANK(Route8_h) ; ROUTE_8 db BANK(Route9_h) ; ROUTE_9 db BANK(Route10_h) ; ROUTE_10 db BANK(Route11_h) ; ROUTE_11 db BANK(Route12_h) ; ROUTE_12 db BANK(Route13_h) ; ROUTE_13 db BANK(Route14_h) ; ROUTE_14 db BANK(Route15_h) ; ROUTE_15 db BANK(Route16_h) ; ROUTE_16 db BANK(Route17_h) ; ROUTE_17 db BANK(Route18_h) ; ROUTE_18 db BANK(Route19_h) ; ROUTE_19 db BANK(Route20_h) ; ROUTE_20 db BANK(Route21_h) ; ROUTE_21 db BANK(Route22_h) ; ROUTE_22 db BANK(Route23_h) ; ROUTE_23 db BANK(Route24_h) ; ROUTE_24 db BANK(Route25_h) ; ROUTE_25 db BANK(RedsHouse1F_h) db BANK(RedsHouse2F_h) db BANK(BluesHouse_h) db BANK(OaksLab_h) db BANK(ViridianPokecenter_h) db BANK(ViridianMart_h) db BANK(School_h) db BANK(ViridianHouse_h) db BANK(ViridianGym_h) db BANK(DiglettsCaveRoute2_h) db BANK(ViridianForestexit_h) db BANK(Route2House_h) db BANK(Route2Gate_h) db BANK(ViridianForestEntrance_h) db BANK(ViridianForest_h) db BANK(MuseumF1_h) db BANK(MuseumF2_h) db BANK(PewterGym_h) db BANK(PewterHouse1_h) db BANK(PewterMart_h) db BANK(PewterHouse2_h) db BANK(PewterPokecenter_h) db BANK(MtMoon1_h) db BANK(MtMoon2_h) db BANK(MtMoon3_h) db BANK(CeruleanHouseTrashed_h) db BANK(CeruleanHouse_h) db BANK(CeruleanPokecenter_h) db BANK(CeruleanGym_h) db BANK(BikeShop_h) db BANK(CeruleanMart_h) db BANK(MtMoonPokecenter_h) db BANK(CeruleanHouseTrashed_h) db BANK(Route5Gate_h) db BANK(UndergroundTunnelEntranceRoute5_h) db BANK(DayCareM_h) db BANK(Route6Gate_h) db BANK(UndergroundTunnelEntranceRoute6_h) db BANK(UndergroundTunnelEntranceRoute6_h) ;FREEZE db BANK(Route7Gate_h) db BANK(UndergroundPathEntranceRoute7_h) db BANK(UndergroundPathEntranceRoute7Copy_h) ;FREEZE db BANK(Route8Gate_h) db BANK(UndergroundPathEntranceRoute8_h) db BANK(RockTunnelPokecenter_h) db BANK(RockTunnel1_h) db BANK(PowerPlant_h) db BANK(Route11Gate_h) db BANK(DiglettsCaveEntranceRoute11_h) db BANK(Route11GateUpstairs_h) db BANK(Route12Gate_h) db BANK(BillsHouse_h) db BANK(VermilionPokecenter_h) db BANK(FanClub_h) db BANK(VermilionMart_h) db BANK(VermilionGym_h) db BANK(VermilionHouse1_h) db BANK(VermilionDock_h) db BANK(SSAnne1_h) db BANK(SSAnne2_h) db BANK(SSAnne3_h) db BANK(SSAnne4_h) db BANK(SSAnne5_h) db BANK(SSAnne6_h) db BANK(SSAnne7_h) db BANK(SSAnne8_h) db BANK(SSAnne9_h) db BANK(SSAnne10_h) db $1D ;unused db $1D ;unused db $1D ;unused db BANK(VictoryRoad1_h) db $1D ;unused db $1D ;unused db $1D ;unused db $1D ;unused db BANK(Lance_h) db $1D ;unused db $1D ;unused db $1D ;unused db $1D ;unused db BANK(HallofFameRoom_h) db BANK(UndergroundPathNS_h) db BANK(Gary_h) db BANK(UndergroundPathWE_h) db BANK(CeladonMart1_h) db BANK(CeladonMart2_h) db BANK(CeladonMart3_h) db BANK(CeladonMart4_h) db BANK(CeladonMartRoof_h) db BANK(CeladonMartElevator_h) db BANK(CeladonMansion1_h) db BANK(CeladonMansion2_h) db BANK(CeladonMansion3_h) db BANK(CeladonMansion4_h) db BANK(CeladonMansion5_h) db BANK(CeladonPokecenter_h) db BANK(CeladonGym_h) db BANK(CeladonGameCorner_h) db BANK(CeladonMart5_h) db BANK(CeladonPrizeRoom_h) db BANK(CeladonDiner_h) db BANK(CeladonHouse_h) db BANK(CeladonHotel_h) db BANK(LavenderPokecenter_h) db BANK(PokemonTower1_h) db BANK(PokemonTower2_h) db BANK(PokemonTower3_h) db BANK(PokemonTower4_h) db BANK(PokemonTower5_h) db BANK(PokemonTower6_h) db BANK(PokemonTower7_h) db BANK(LavenderHouse1_h) db BANK(LavenderMart_h) db BANK(LavenderHouse2_h) db BANK(FuchsiaMart_h) db BANK(FuchsiaHouse1_h) db BANK(FuchsiaPokecenter_h) db BANK(FuchsiaHouse2_h) db BANK(SafariZoneEntrance_h) db BANK(FuchsiaGym_h) db BANK(FuchsiaMeetingRoom_h) db BANK(SeafoamIslands2_h) db BANK(SeafoamIslands3_h) db BANK(SeafoamIslands4_h) db BANK(SeafoamIslands5_h) db BANK(VermilionHouse2_h) db BANK(FuchsiaHouse3_h) db BANK(Mansion1_h) db BANK(CinnabarGym_h) db BANK(Lab1_h) db BANK(Lab2_h) db BANK(Lab3_h) db BANK(Lab4_h) db BANK(CinnabarPokecenter_h) db BANK(CinnabarMart_h) db BANK(CinnabarMart_h) db BANK(IndigoPlateauLobby_h) db BANK(CopycatsHouseF1_h) db BANK(CopycatsHouseF2_h) db BANK(FightingDojo_h) db BANK(SaffronGym_h) db BANK(SaffronHouse1_h) db BANK(SaffronMart_h) db BANK(SilphCo1_h) db BANK(SaffronPokecenter_h) db BANK(SaffronHouse2_h) db BANK(Route15Gate_h) db BANK(Route15GateUpstairs_h) db BANK(Route16GateMap_h) db BANK(Route16GateUpstairs_h) db BANK(Route16House_h) db BANK(Route12House_h) db BANK(Route18Gate_h) db BANK(Route18GateUpstairs_h) db BANK(SeafoamIslands1_h) db BANK(Route22Gate_h) db BANK(VictoryRoad2_h) db BANK(Route12GateUpstairs_h) db BANK(VermilionHouse3_h) db BANK(DiglettsCave_h) db BANK(VictoryRoad3_h) db BANK(RocketHideout1_h) db BANK(RocketHideout2_h) db BANK(RocketHideout3_h) db BANK(RocketHideout4_h) db BANK(RocketHideoutElevator_h) db $01 db $01 db $01 db BANK(SilphCo2_h) db BANK(SilphCo3_h) db BANK(SilphCo4_h) db BANK(SilphCo5_h) db BANK(SilphCo6_h) db BANK(SilphCo7_h) db BANK(SilphCo8_h) db BANK(Mansion2_h) db BANK(Mansion3_h) db BANK(Mansion4_h) db BANK(SafariZoneEast_h) db BANK(SafariZoneNorth_h) db BANK(SafariZoneWest_h) db BANK(SafariZoneCenter_h) db BANK(SafariZoneRestHouse1_h) db BANK(SafariZoneSecretHouse_h) db BANK(SafariZoneRestHouse2_h) db BANK(SafariZoneRestHouse3_h) db BANK(SafariZoneRestHouse4_h) db BANK(UnknownDungeon2_h) db BANK(UnknownDungeon3_h) db BANK(UnknownDungeon1_h) db BANK(NameRater_h) db BANK(CeruleanHouse2_h) db $01 db BANK(RockTunnel2_h) db BANK(SilphCo9_h) db BANK(SilphCo10_h) db BANK(SilphCo11_h) db BANK(SilphCoElevator_h) db $11 db $11 db BANK(BattleCenterM_h) db BANK(TradeCenterM_h) db $11 db $11 db $11 db $11 db BANK(Lorelei_h) db BANK(Bruno_h) db BANK(Agatha_h) Func_c335: ; c335 (3:4335) ld a, $90 ld [$FF00+$b0], a ld [rWY], a ; $FF00+$4a xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld [$d13b], a ld [W_LONEATTACKNO], a ; $d05c ld [H_NEWLYPRESSEDBUTTONS], a ld [H_NEWLYRELEASEDBUTTONS], a ld [H_CURRENTPRESSEDBUTTONS], a ld [$cd6a], a ld [$d5a3], a ld hl, $d73f ld [hli], a ld [hl], a ld hl, wWhichTrade ; $cd3d ld bc, $1e call FillMemory ret Func_c35f: ; c35f (3:435f) ld a, [$d3ae] and a ret z ld c, a ld hl, $d3af .asm_c368 ld a, [W_YCOORD] ; $d361 cp [hl] jr nz, .asm_c383 inc hl ld a, [W_XCOORD] ; $d362 cp [hl] jr nz, .asm_c384 inc hl ld a, [hli] ld [$d42f], a ld a, [hl] ld [H_DOWNARROWBLINKCNT1], a ; $FF00+$8b ld hl, $d736 set 2, [hl] ret .asm_c383 inc hl .asm_c384 inc hl inc hl inc hl dec c jr nz, .asm_c368 ret CheckForceBikeOrSurf: ; c38b (3:438b) ld hl, $D732 bit 5, [hl] ret nz ld hl, ForcedBikeOrSurfMaps ld a, [W_YCOORD] ld b, a ld a, [W_XCOORD] ld c, a ld a, [W_CURMAP] ld d, a .loop ld a, [hli] cp $ff ret z ;if we reach FF then it's not part of the list cp d ;compare to current map jr nz, .incorrectMap ld a, [hli] cp b ;compare y-coord jr nz, .incorrectY ld a, [hli] cp c ;compare x-coord jr nz, .loop ; incorrect x-coord, check next item ld a, [W_CURMAP] cp SEAFOAM_ISLANDS_4 ld a, $2 ld [W_SEAFOAMISLANDS4CURSCRIPT], a jr z, .forceSurfing ld a, [W_CURMAP] cp SEAFOAM_ISLANDS_5 ld a, $2 ld [W_SEAFOAMISLANDS5CURSCRIPT], a jr z, .forceSurfing ;force bike riding ld hl, $d732 set 5, [hl] ld a, $1 ld [$d700], a ld [$d11a], a jp ForceBikeOrSurf .incorrectMap inc hl .incorrectY inc hl jr .loop .forceSurfing ld a, $2 ld [$d700], a ld [$d11a], a jp ForceBikeOrSurf ForcedBikeOrSurfMaps: ; c3e6 (3:43e6) ; map id, y, x db ROUTE_16,$0A,$11 db ROUTE_16,$0B,$11 db ROUTE_18,$08,$21 db ROUTE_18,$09,$21 db SEAFOAM_ISLANDS_4,$07,$12 db SEAFOAM_ISLANDS_4,$07,$13 db SEAFOAM_ISLANDS_5,$0E,$04 db SEAFOAM_ISLANDS_5,$0E,$05 db $FF ;end Func_c3ff: ; c3ff (3:43ff) push hl push de push bc ld a, [$c109] srl a ld c, a ld b, $0 ld hl, PointerTable_c422 ; $4422 add hl, bc ld a, [hli] ld h, [hl] ld l, a ld a, [W_YCOORD] ; $d361 ld b, a ld a, [W_XCOORD] ; $d362 ld c, a ld de, .asm_c41e ; $441e push de jp [hl] .asm_c41e pop bc pop de pop hl ret PointerTable_c422: ; c422 (3:4422) dw .asm_c42a dw .asm_4434 dw .asm_443A dw .asm_4440 .asm_c42a ld a, [W_CURMAPHEIGHT] ; $d368 add a dec a cp b jr z, .setCarry jr .resetCarry .asm_4434 ld a, b and a jr z, .setCarry jr .resetCarry .asm_443A ld a, c and a jr z, .setCarry jr .resetCarry .asm_4440 ld a, [W_CURMAPWIDTH] ; $d369 add a dec a cp c jr z, .setCarry jr .resetCarry .resetCarry and a ret .setCarry scf ret Func_c44e: ; c44e (3:444e) push hl push de push bc call Func_c589 ld a, [W_CURMAP] ; $d35e cp SS_ANNE_5 jr z, .ssAnne5 ld a, [$c109] srl a ld c, a ld b, $0 ld hl, .pointerTable_c477 ; $4477 add hl, bc ld a, [hli] ld h, [hl] ld l, a ld a, [$cfc6] ld de, $1 call IsInArray .asm_c473 pop bc pop de pop hl ret .pointerTable_c477: ; c477 (3:4477) dw .arrayData_c47f dw .arrayData_c487 dw .arrayData_c48a dw .arrayData_c48d .arrayData_c47f db $01,$12,$17,$3D,$04,$18,$33,$FF .arrayData_c487 db $01,$5C,$FF .arrayData_c48a db $1A,$4B,$FF .arrayData_c48d db $0F,$4E,$FF .ssAnne5 ld a, [$cfc6] cp $15 jr nz, .asm_c49a scf jr .asm_c473 .asm_c49a and a jr .asm_c473 Func_c49d: ; c49d (3:449d) push hl push de push bc ld b, BANK(Func_1a609) ld hl, Func_1a609 call Bankswitch jr c, .asm_c4c8 ld a, [W_CURMAPTILESET] ; $d367 add a ld c, a ld b, $0 ld hl, WarpTileIDPointers ; $44cc add hl, bc ld a, [hli] ld h, [hl] ld l, a ld de, $1 FuncCoord 8, 9 ; $c45c ld a, [Coord] call IsInArray jr nc, .asm_c4c8 ld hl, $d736 res 2, [hl] .asm_c4c8 pop bc pop de pop hl ret WarpTileIDPointers: ; c4cc (3:44cc) dw Tileset00WarpTileIDs dw Tileset01WarpTileIDs dw Tileset02WarpTileIDs dw Tileset03WarpTileIDs dw Tileset04WarpTileIDs dw Tileset05WarpTileIDs dw Tileset06WarpTileIDs dw Tileset07WarpTileIDs dw Tileset08WarpTileIDs dw Tileset09WarpTileIDs dw Tileset0AWarpTileIDs dw Tileset0BWarpTileIDs dw Tileset0CWarpTileIDs dw Tileset0DWarpTileIDs dw Tileset0EWarpTileIDs dw Tileset0FWarpTileIDs dw Tileset10WarpTileIDs dw Tileset11WarpTileIDs dw Tileset12WarpTileIDs dw Tileset13WarpTileIDs dw Tileset14WarpTileIDs dw Tileset15WarpTileIDs dw Tileset16WarpTileIDs dw Tileset17WarpTileIDs Tileset00WarpTileIDs: ; c4fc (3:44fc) db $1B,$58,$FF Tileset09WarpTileIDs: ; c4ff (3:44ff) Tileset0AWarpTileIDs: ; c4ff (3:44ff) Tileset0CWarpTileIDs: ; c4ff (3:44ff) db $3B Tileset01WarpTileIDs: ; c500 (3:4500) Tileset04WarpTileIDs: ; c500 (3:4500) db $1A,$1C,$FF Tileset02WarpTileIDs: ; c503 (3:4503) Tileset06WarpTileIDs: ; c503 (3:4503) db $5E,$FF Tileset03WarpTileIDs: ; c505 (3:4505) db $5A,$5C,$3A,$FF Tileset05WarpTileIDs: ; c509 (3:4509) Tileset07WarpTileIDs: ; c509 (3:4509) db $4A,$FF Tileset08WarpTileIDs: ; c50b (3:450b) db $54,$5C,$32,$FF Tileset0DWarpTileIDs: ; c50f (3:450f) db $37,$39,$1E,$4A,$FF Tileset10WarpTileIDs: ; c514 (3:4514) db $15,$55,$04,$FF Tileset11WarpTileIDs: ; c518 (3:4518) db $18,$1A,$22,$FF Tileset12WarpTileIDs: ; c51c (3:451c) db $1A,$1C,$38,$FF Tileset13WarpTileIDs: ; c520 (3:4520) db $1A,$1C,$53,$FF Tileset14WarpTileIDs: ; c524 (3:4524) db $34,$FF Tileset16WarpTileIDs: ; c526 (3:4526) db $43,$58,$20 Tileset0FWarpTileIDs: ; c529 (3:4529) db $1B Tileset0BWarpTileIDs: ; c52a (3:452a) db $13,$FF Tileset17WarpTileIDs: ; c52c (3:452c) db $1B,$3B Tileset0EWarpTileIDs: ; c52e (3:452e) Tileset15WarpTileIDs: ; c52e (3:452e) db $FF Func_c52f: ; c52f (3:452f) ld a, [W_CURMAP] ; $d35e cp SAFARI_ZONE_EAST ret c cp UNKNOWN_DUNGEON_2 ret nc ld hl, wTileMap ld b, $3 ld c, $7 call TextBoxBorder FuncCoord 1, 1 ; $c3b5 ld hl, Coord ld de, wSafariSteps ; $d70d ld bc, $203 call PrintNumber FuncCoord 4, 1 ; $c3b8 ld hl, Coord ld de, SafariSteps ; $4579 call PlaceString FuncCoord 1, 3 ; $c3dd ld hl, Coord ld de, SafariBallText ; $457e call PlaceString ld a, [W_NUMSAFARIBALLS] ; $da47 cp $a jr nc, .asm_c56d FuncCoord 5, 3 ; $c3e1 ld hl, Coord ld a, $7f ld [hl], a .asm_c56d FuncCoord 6, 3 ; $c3e2 ld hl, Coord ld de, W_NUMSAFARIBALLS ; $da47 ld bc, $102 jp PrintNumber SafariSteps: ; c579 (3:4579) db "/500@" SafariBallText: ; c57e (3:457e) db "BALL×× @" Func_c586: ; c586 (3:4586) call Load16BitRegisters Func_c589: ; c589 (3:4589) ld a, [W_YCOORD] ; $d361 ld d, a ld a, [W_XCOORD] ; $d362 ld e, a ld a, [$c109] and a jr nz, .asm_c59d FuncCoord 8, 11 ; $c484 ld a, [Coord] inc d jr .asm_c5b9 .asm_c59d cp $4 jr nz, .asm_c5a7 FuncCoord 8, 7 ; $c434 ld a, [Coord] dec d jr .asm_c5b9 .asm_c5a7 cp $8 jr nz, .asm_c5b1 FuncCoord 6, 9 ; $c45a ld a, [Coord] dec e jr .asm_c5b9 .asm_c5b1 cp $c jr nz, .asm_c5b9 FuncCoord 10, 9 ; $c45e ld a, [Coord] inc e .asm_c5b9 ld c, a ld [$cfc6], a ret Func_c5be: ; c5be (3:45be) xor a ld [$FF00+$db], a ld hl, W_YCOORD ; $d361 ld a, [hli] ld d, a ld e, [hl] ld a, [$c109] and a jr nz, .asm_c5d8 ld hl, $ffdb set 0, [hl] FuncCoord 8, 13 ; $c4ac ld a, [Coord] inc d jr .asm_c603 .asm_c5d8 cp $4 jr nz, .asm_c5e7 ld hl, $ffdb set 1, [hl] FuncCoord 8, 5 ; $c40c ld a, [Coord] dec d jr .asm_c603 .asm_c5e7 cp $8 jr nz, .asm_c5f6 ld hl, $ffdb set 2, [hl] FuncCoord 4, 9 ; $c458 ld a, [Coord] dec e jr .asm_c603 .asm_c5f6 cp $c jr nz, .asm_c603 ld hl, $ffdb set 3, [hl] FuncCoord 12, 9 ; $c460 ld a, [Coord] inc e .asm_c603 ld c, a ld [$d71c], a ld [$cfc6], a ret Func_c60b: ; c60b (3:460b) call Func_c5be ld hl, $d530 ld a, [hli] ld h, [hl] ld l, a .asm_c614 ld a, [hli] cp $ff jr z, .asm_c632 cp c jr nz, .asm_c614 ld hl, $c7e call Func_c44 ld a, $ff jr c, .asm_c632 ld a, [$d71c] cp $15 ld a, $ff jr z, .asm_c632 call Func_c636 .asm_c632 ld [$d71c], a ret Func_c636: ; c636 (3:4636) ld a, [$d718] dec a swap a ld d, $0 ld e, a ld hl, $c214 add hl, de ld a, [hli] ld [$FF00+$dc], a ld a, [hl] ld [$FF00+$dd], a ld a, [W_NUMSPRITES] ; $d4e1 ld c, a ld de, $f ld hl, $c214 ld a, [$FF00+$db] and $3 jr z, .asm_c678 .asm_c659 inc hl ld a, [$FF00+$dd] cp [hl] jr nz, .asm_c672 dec hl ld a, [hli] ld b, a ld a, [$FF00+$db] rrca jr c, .asm_c66c ld a, [$FF00+$dc] dec a jr .asm_c66f .asm_c66c ld a, [$FF00+$dc] inc a .asm_c66f cp b jr z, .asm_c697 .asm_c672 dec c jr z, .asm_c69a add hl, de jr .asm_c659 .asm_c678 ld a, [hli] ld b, a ld a, [$FF00+$dc] cp b jr nz, .asm_c691 ld b, [hl] ld a, [$FF00+$db] bit 2, a jr nz, .asm_c68b ld a, [$FF00+$dd] inc a jr .asm_c68e .asm_c68b ld a, [$FF00+$dd] dec a .asm_c68e cp b jr z, .asm_c697 .asm_c691 dec c jr z, .asm_c69a add hl, de jr .asm_c678 .asm_c697 ld a, $ff ret .asm_c69a xor a ret Func_c69c: ; c69c (3:469c) ld a, [$d730] add a jp c, .asm_c74f ld a, [W_NUMINPARTY] ; $d163 and a jp z, .asm_c74f call Func_c8de ld a, [$d13b] and $3 jp nz, .asm_c74f ld [wWhichPokemon], a ; $cf92 ld hl, W_PARTYMON1_STATUS ; $d16f ld de, W_PARTYMON1 ; $d164 .asm_c6be ld a, [hl] and $8 jr z, .asm_c6fd dec hl dec hl ld a, [hld] ld b, a ld a, [hli] or b jr z, .asm_c6fb ld a, [hl] dec a ld [hld], a inc a jr nz, .asm_c6d5 dec [hl] inc hl jr .asm_c6fb .asm_c6d5 ld a, [hli] or [hl] jr nz, .asm_c6fb push hl inc hl inc hl ld [hl], a ld a, [de] ld [$d11e], a push de ld a, [wWhichPokemon] ; $cf92 ld hl, W_PARTYMON1NAME ; $d2b5 call GetPartyMonName xor a ld [wJoypadForbiddenButtonsMask], a call EnableAutoTextBoxDrawing ld a, $d0 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID pop de pop hl .asm_c6fb inc hl inc hl .asm_c6fd inc de ld a, [de] inc a jr z, .asm_c70e ld bc, $2c add hl, bc push hl ld hl, wWhichPokemon ; $cf92 inc [hl] pop hl jr .asm_c6be .asm_c70e ld hl, W_PARTYMON1_STATUS ; $d16f ld a, [W_NUMINPARTY] ; $d163 ld d, a ld e, $0 .asm_c717 ld a, [hl] and $8 or e ld e, a ld bc, $2c add hl, bc dec d jr nz, .asm_c717 ld a, e and a jr z, .asm_c733 ld b, $2 ld a, $1f call Predef ; indirect jump to Func_480eb (480eb (12:40eb)) ld a, $97 call PlaySound .asm_c733 ld a, $14 call Predef ; indirect jump to AnyPokemonAliveCheck (3ca83 (f:4a83)) ld a, d and a jr nz, .asm_c74f call EnableAutoTextBoxDrawing ld a, $d1 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld hl, $d72e set 5, [hl] ld a, $ff jr .asm_c750 .asm_c74f xor a .asm_c750 ld [$d12d], a ret Func_c754: ; c754 (3:4754) call Load16BitRegisters push hl ld d, $0 ld a, [W_CURMAPTILESET] ; $d367 add a add a ld b, a add a add b jr nc, .asm_c765 inc d .asm_c765 ld e, a ld hl, TilesetsHeadPtr add hl, de ld de, $d52b ld c, $b .asm_c76f ld a, [hli] ld [de], a inc de dec c jr nz, .asm_c76f ld a, [hl] ld [$FF00+$d7], a xor a ld [$FF00+$d8], a pop hl ld a, [W_CURMAPTILESET] ; $d367 push hl push de ld hl, DungeonTilesetIDs ; $47b2 ld de, $1 call IsInArray pop de pop hl jr c, .asm_c797 ld a, [W_CURMAPTILESET] ; $d367 ld b, a ld a, [H_DOWNARROWBLINKCNT1] ; $FF00+$8b cp b jr z, .asm_c7b1 .asm_c797 ld a, [$d42f] cp $ff jr z, .asm_c7b1 call LoadDestinationWarpPosition ld a, [W_YCOORD] ; $d361 and $1 ld [W_YBLOCKCOORD], a ; $d363 ld a, [W_XCOORD] ; $d362 and $1 ld [W_XBLOCKCOORD], a ; $d364 .asm_c7b1 ret DungeonTilesetIDs: ; c7b2 (3:47b2) db $03,$0A,$0D,$11,$12,$13,$0C,$14,$16,$0F,$07,$FF TilesetsHeadPtr: ; c7be (3:47be) TSETHEAD Tset00_Block,Tset00_GFX,Tset00_Coll,$FF,$FF,$FF,$52,2 TSETHEAD Tset01_Block,Tset01_GFX,Tset01_Coll,$FF,$FF,$FF,$FF,0 TSETHEAD Tset02_Block,Tset02_GFX,Tset02_Coll,$18,$19,$1E,$FF,0 TSETHEAD Tset03_Block,Tset03_GFX,Tset03_Coll,$FF,$FF,$FF,$20,1 TSETHEAD Tset01_Block,Tset01_GFX,Tset01_Coll,$FF,$FF,$FF,$FF,0 TSETHEAD Tset05_Block,Tset05_GFX,Tset05_Coll,$3A,$FF,$FF,$FF,2 TSETHEAD Tset02_Block,Tset02_GFX,Tset02_Coll,$18,$19,$1E,$FF,0 TSETHEAD Tset05_Block,Tset05_GFX,Tset05_Coll,$3A,$FF,$FF,$FF,2 TSETHEAD Tset08_Block,Tset08_GFX,Tset08_Coll,$FF,$FF,$FF,$FF,0 TSETHEAD Tset09_Block,Tset09_GFX,Tset09_Coll,$17,$32,$FF,$FF,0 TSETHEAD Tset09_Block,Tset09_GFX,Tset09_Coll,$17,$32,$FF,$FF,0 TSETHEAD Tset0B_Block,Tset0B_GFX,Tset0B_Coll,$FF,$FF,$FF,$FF,0 TSETHEAD Tset09_Block,Tset09_GFX,Tset09_Coll,$17,$32,$FF,$FF,0 TSETHEAD Tset0D_Block,Tset0D_GFX,Tset0D_Coll,$FF,$FF,$FF,$FF,1 TSETHEAD Tset0E_Block,Tset0E_GFX,Tset0E_Coll,$FF,$FF,$FF,$FF,1 TSETHEAD Tset0F_Block,Tset0F_GFX,Tset0F_Coll,$12,$FF,$FF,$FF,0 TSETHEAD Tset10_Block,Tset10_GFX,Tset10_Coll,$FF,$FF,$FF,$FF,0 TSETHEAD Tset11_Block,Tset11_GFX,Tset11_Coll,$FF,$FF,$FF,$FF,1 TSETHEAD Tset12_Block,Tset12_GFX,Tset12_Coll,$15,$36,$FF,$FF,0 TSETHEAD Tset13_Block,Tset13_GFX,Tset13_Coll,$FF,$FF,$FF,$FF,0 TSETHEAD Tset14_Block,Tset14_GFX,Tset14_Coll,$FF,$FF,$FF,$FF,0 TSETHEAD Tset15_Block,Tset15_GFX,Tset15_Coll,$07,$17,$FF,$FF,0 TSETHEAD Tset16_Block,Tset16_GFX,Tset16_Coll,$12,$FF,$FF,$FF,1 TSETHEAD Tset17_Block,Tset17_GFX,Tset17_Coll,$FF,$FF,$FF,$45,1 Func_c8de: ; c8de (3:48de) ld a, [W_DAYCARE_IN_USE] and a ret z ld hl, $da6f inc [hl] ret nz dec hl inc [hl] ret nz dec hl inc [hl] ld a, [hl] cp $50 ret c ld a, $50 ld [hl], a ret ; data for default hidden/shown ; objects for each map ($00-$F8) ; Table of 2-Byte pointers, one pointer per map, ; goes up to Map_F7, ends with $FFFF. ; points to table listing all missable object in the area MapHSPointers: ; c8f5 (3:48f5) dw MapHS00 dw MapHS01 dw MapHS02 dw MapHS03 dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHS0A dw MapHSXX dw MapHSXX dw MapHS0D dw MapHSXX dw MapHS0F dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHS14 dw MapHSXX dw MapHSXX dw MapHS17 dw MapHSXX dw MapHSXX dw MapHS1A dw MapHS1B dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHS21 dw MapHSXX dw MapHS23 dw MapHS24 dw MapHSXX dw MapHSXX dw MapHS27 dw MapHS28 dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHS2D dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHS33 dw MapHS34 dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHS3B dw MapHSXX dw MapHS3D dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHS53 dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHS58 dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHS60 dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHS66 dw MapHS67 dw MapHS68 dw MapHSXX dw MapHSXX dw MapHSXX dw MapHS6C dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHS78 dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHS84 dw MapHSXX dw MapHSXX dw MapHS87 dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHS8F dw MapHS90 dw MapHS91 dw MapHS92 dw MapHS93 dw MapHS94 dw MapHS95 dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHS9B dw MapHSXX dw MapHSXX dw MapHSXX dw MapHS9F dw MapHSA0 dw MapHSA1 dw MapHSA2 dw MapHSXX dw MapHSXX dw MapHSA5 dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSB1 dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSB5 dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSC0 dw MapHSXX dw MapHSC2 dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSC6 dw MapHSC7 dw MapHSC8 dw MapHSC9 dw MapHSCA dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSCF dw MapHSD0 dw MapHSD1 dw MapHSD2 dw MapHSD3 dw MapHSD4 dw MapHSD5 dw MapHSD6 dw MapHSD7 dw MapHSD8 dw MapHSD9 dw MapHSDA dw MapHSDB dw MapHSDC dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSE2 dw MapHSE3 dw MapHSE4 dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSE9 dw MapHSEA dw MapHSEB dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSXX dw MapHSF4 dw MapHSXX dw MapHSXX dw MapHSXX dw $FFFF ; Structure: ; 3 bytes per object ; [Map_ID][Object_ID][H/S] ; ; Program stops reading when either: ; a) Map_ID = $FF ; b) Map_ID ≠ currentMapID ; ; This Data is loaded into RAM at $D5CE-$D5F?. (W_MISSABLEOBJECTLIST) ; These constants come from the bytes for Predef functions: Hide equ $11 Show equ $15 MapHSXX: ; cae7 (3:4ae7) db $FF,$FF,$FF MapHS00: ; caea (3:4aea) db PALLET_TOWN,$01,Hide MapHS01: ; caed (3:4aed) db VIRIDIAN_CITY,$05,Show db VIRIDIAN_CITY,$07,Hide MapHS02: ; caf3 (3:4af3) db PEWTER_CITY,$03,Show db PEWTER_CITY,$05,Show MapHS03: ; caf9 (3:4af9) db CERULEAN_CITY,$01,Hide db CERULEAN_CITY,$02,Show db CERULEAN_CITY,$06,Hide db CERULEAN_CITY,$0A,Show db CERULEAN_CITY,$0B,Show MapHS0A: ; cb08 (3:4b08) db SAFFRON_CITY,$01,Show db SAFFRON_CITY,$02,Show db SAFFRON_CITY,$03,Show db SAFFRON_CITY,$04,Show db SAFFRON_CITY,$05,Show db SAFFRON_CITY,$06,Show db SAFFRON_CITY,$07,Show db SAFFRON_CITY,$08,Hide db SAFFRON_CITY,$09,Hide db SAFFRON_CITY,$0A,Hide db SAFFRON_CITY,$0B,Hide db SAFFRON_CITY,$0C,Hide db SAFFRON_CITY,$0D,Hide db SAFFRON_CITY,$0E,Show db SAFFRON_CITY,$0F,Hide MapHS0D: ; cb35 (3:4b35) db ROUTE_2,$01,Show db ROUTE_2,$02,Show MapHS0F: ; cb3b (3:4b3b) db ROUTE_4,$03,Show MapHS14: ; cb3e (3:4b3e) db ROUTE_9,$0A,Show MapHS17: ; cb41 (3:4b41) db ROUTE_12,$01,Show db ROUTE_12,$09,Show db ROUTE_12,$0A,Show MapHS1A: ; cb4a (3:4b4a) db ROUTE_15,$0B,Show MapHS1B: ; cb4d (3:4b4d) db ROUTE_16,$07,Show MapHS21: ; cb50 (3:4b50) db ROUTE_22,$01,Hide db ROUTE_22,$02,Hide MapHS23: ; cb56 (3:4b56) db ROUTE_24,$01,Show db ROUTE_24,$08,Show MapHS24: ; cb5c (3:4b5c) db ROUTE_25,$0A,Show MapHS27: ; cb5f (3:4b5f) db BLUES_HOUSE,$01,Show db BLUES_HOUSE,$02,Hide db BLUES_HOUSE,$03,Show MapHS28: ; cb68 (3:4b68) db OAKS_LAB,$01,Show db OAKS_LAB,$02,Show db OAKS_LAB,$03,Show db OAKS_LAB,$04,Show db OAKS_LAB,$05,Hide db OAKS_LAB,$06,Show db OAKS_LAB,$07,Show db OAKS_LAB,$08,Hide MapHS2D: ; cb80 (3:4b80) db VIRIDIAN_GYM,$01,Show db VIRIDIAN_GYM,$0B,Show MapHS34: ; cb86 (3:4b86) db MUSEUM_1F,$05,Show MapHSE4: ; cb89 (3:4b89) db UNKNOWN_DUNGEON_1,$01,Show db UNKNOWN_DUNGEON_1,$02,Show db UNKNOWN_DUNGEON_1,$03,Show MapHS8F: ; cb92 (3:4b92) db POKEMONTOWER_2,$01,Show MapHS90: ; cb95 (3:4b95) db POKEMONTOWER_3,$04,Show MapHS91: ; cb98 (3:4b98) db POKEMONTOWER_4,$04,Show db POKEMONTOWER_4,$05,Show db POKEMONTOWER_4,$06,Show MapHS92: ; cba1 (3:4ba1) db POKEMONTOWER_5,$06,Show MapHS93: ; cba4 (3:4ba4) db POKEMONTOWER_6,$04,Show db POKEMONTOWER_6,$05,Show MapHS94: ; cbaa (3:4baa) db POKEMONTOWER_7,$01,Show db POKEMONTOWER_7,$02,Show db POKEMONTOWER_7,$03,Show db POKEMONTOWER_7,$04,Show MapHS95: ; cbb6 (3:4bb6) db LAVENDER_HOUSE_1,$05,Hide MapHS84: ; cbb9 (3:4bb9) db CELADON_MANSION_5,$02,Show MapHS87: ; cbbc (3:4bbc) db GAME_CORNER,$0B,Show MapHS9B: ; cbbf (3:4bbf) db FUCHSIA_HOUSE_2,$02,Show MapHSA5: ; cbc2 (3:4bc2) db MANSION_1,$02,Show db MANSION_1,$03,Show MapHSB1: ; cbc8 (3:4bc8) db FIGHTINGDOJO,$06,Show db FIGHTINGDOJO,$07,Show MapHSB5: ; cbce (3:4bce) db SILPH_CO_1F,$01,Hide MapHS53: ; cbd1 (3:4bd1) db POWER_PLANT,$01,Show db POWER_PLANT,$02,Show db POWER_PLANT,$03,Show db POWER_PLANT,$04,Show db POWER_PLANT,$05,Show db POWER_PLANT,$06,Show db POWER_PLANT,$07,Show db POWER_PLANT,$08,Show db POWER_PLANT,$09,Show db POWER_PLANT,$0A,Show db POWER_PLANT,$0B,Show db POWER_PLANT,$0C,Show db POWER_PLANT,$0D,Show db POWER_PLANT,$0E,Show MapHSC2: ; cbfb (3:4bfb) db VICTORY_ROAD_2,$06,Show db VICTORY_ROAD_2,$07,Show db VICTORY_ROAD_2,$08,Show db VICTORY_ROAD_2,$09,Show db VICTORY_ROAD_2,$0A,Show db VICTORY_ROAD_2,$0D,Show MapHS58: ; cc0d (3:4c0d) db BILLS_HOUSE,$01,Show db BILLS_HOUSE,$02,Hide db BILLS_HOUSE,$03,Hide MapHS33: ; cc16 (3:4c16) db VIRIDIAN_FOREST,$05,Show db VIRIDIAN_FOREST,$06,Show db VIRIDIAN_FOREST,$07,Show MapHS3B: ; cc1f (3:4c1f) db MT_MOON_1,$08,Show db MT_MOON_1,$09,Show db MT_MOON_1,$0A,Show db MT_MOON_1,$0B,Show db MT_MOON_1,$0C,Show db MT_MOON_1,$0D,Show MapHS3D: ; cc31 (3:4c31) db MT_MOON_3,$06,Show db MT_MOON_3,$07,Show db MT_MOON_3,$08,Show db MT_MOON_3,$09,Show MapHS60: ; cc3d (3:4c3d) db SS_ANNE_2,$02,Hide MapHS66: ; cc40 (3:4c40) db SS_ANNE_8,$0A,Show MapHS67: ; cc43 (3:4c43) db SS_ANNE_9,$06,Show db SS_ANNE_9,$09,Show MapHS68: ; cc49 (3:4c49) db SS_ANNE_10,$09,Show db SS_ANNE_10,$0A,Show db SS_ANNE_10,$0B,Show MapHSC6: ; cc52 (3:4c52) db VICTORY_ROAD_3,$05,Show db VICTORY_ROAD_3,$06,Show db VICTORY_ROAD_3,$0A,Show MapHSC7: ; cc5b (3:4c5b) db ROCKET_HIDEOUT_1,$06,Show db ROCKET_HIDEOUT_1,$07,Show MapHSC8: ; cc61 (3:4c61) db ROCKET_HIDEOUT_2,$02,Show db ROCKET_HIDEOUT_2,$03,Show db ROCKET_HIDEOUT_2,$04,Show db ROCKET_HIDEOUT_2,$05,Show MapHSC9: ; cc6d (3:4c6d) db ROCKET_HIDEOUT_3,$03,Show db ROCKET_HIDEOUT_3,$04,Show MapHSCA: ; cc73 (3:4c73) db ROCKET_HIDEOUT_4,$01,Show db ROCKET_HIDEOUT_4,$05,Show db ROCKET_HIDEOUT_4,$06,Show db ROCKET_HIDEOUT_4,$07,Show db ROCKET_HIDEOUT_4,$08,Hide db ROCKET_HIDEOUT_4,$09,Hide MapHSCF: ; cc85 (3:4c85) db SILPH_CO_2F,$01,Show db SILPH_CO_2F,$02,Show db SILPH_CO_2F,$03,Show db SILPH_CO_2F,$04,Show db SILPH_CO_2F,$05,Show MapHSD0: ; cc94 (3:4c94) db SILPH_CO_3F,$02,Show db SILPH_CO_3F,$03,Show db SILPH_CO_3F,$04,Show MapHSD1: ; cc9d (3:4c9d) db SILPH_CO_4F,$02,Show db SILPH_CO_4F,$03,Show db SILPH_CO_4F,$04,Show db SILPH_CO_4F,$05,Show db SILPH_CO_4F,$06,Show db SILPH_CO_4F,$07,Show MapHSD2: ; ccaf (3:4caf) db SILPH_CO_5F,$02,Show db SILPH_CO_5F,$03,Show db SILPH_CO_5F,$04,Show db SILPH_CO_5F,$05,Show db SILPH_CO_5F,$06,Show db SILPH_CO_5F,$07,Show db SILPH_CO_5F,$08,Show MapHSD3: ; ccc4 (3:4cc4) db SILPH_CO_6F,$06,Show db SILPH_CO_6F,$07,Show db SILPH_CO_6F,$08,Show db SILPH_CO_6F,$09,Show db SILPH_CO_6F,$0A,Show MapHSD4: ; ccd3 (3:4cd3) db SILPH_CO_7F,$05,Show db SILPH_CO_7F,$06,Show db SILPH_CO_7F,$07,Show db SILPH_CO_7F,$08,Show db SILPH_CO_7F,$09,Show db SILPH_CO_7F,$0A,Show db SILPH_CO_7F,$0B,Show db SILPH_CO_7F,$0C,Show MapHSD5: ; cceb (3:4ceb) db SILPH_CO_8F,$02,Show db SILPH_CO_8F,$03,Show db SILPH_CO_8F,$04,Show MapHSE9: ; ccf4 (3:4cf4) db SILPH_CO_9F,$02,Show db SILPH_CO_9F,$03,Show db SILPH_CO_9F,$04,Show MapHSEA: ; ccfd (3:4cfd) db SILPH_CO_10F,$01,Show db SILPH_CO_10F,$02,Show db SILPH_CO_10F,$03,Show db SILPH_CO_10F,$04,Show db SILPH_CO_10F,$05,Show db SILPH_CO_10F,$06,Show MapHSEB: ; cd0f (3:4d0f) db SILPH_CO_11F,$03,Show db SILPH_CO_11F,$04,Show db SILPH_CO_11F,$05,Show MapHSF4: ; cd18 (3:4d18) db $F4,$02,Show MapHSD6: ; cd1b (3:4d1b) db MANSION_2,$02,Show MapHSD7: ; cd1e (3:4d1e) db MANSION_3,$03,Show db MANSION_3,$04,Show MapHSD8: ; cd24 (3:4d24) db MANSION_4,$03,Show db MANSION_4,$04,Show db MANSION_4,$05,Show db MANSION_4,$06,Show db MANSION_4,$08,Show MapHSD9: ; cd33 (3:4d33) db SAFARI_ZONE_EAST,$01,Show db SAFARI_ZONE_EAST,$02,Show db SAFARI_ZONE_EAST,$03,Show db SAFARI_ZONE_EAST,$04,Show MapHSDA: ; cd3f (3:4d3f) db SAFARI_ZONE_NORTH,$01,Show db SAFARI_ZONE_NORTH,$02,Show MapHSDB: ; cd45 (3:4d45) db SAFARI_ZONE_WEST,$01,Show db SAFARI_ZONE_WEST,$02,Show db SAFARI_ZONE_WEST,$03,Show db SAFARI_ZONE_WEST,$04,Show MapHSDC: ; cd51 (3:4d51) db SAFARI_ZONE_CENTER,$01,Show MapHSE2: ; cd54 (3:4d54) db UNKNOWN_DUNGEON_2,$01,Show db UNKNOWN_DUNGEON_2,$02,Show db UNKNOWN_DUNGEON_2,$03,Show MapHSE3: ; cd5d (3:4d5d) db UNKNOWN_DUNGEON_3,$01,Show db UNKNOWN_DUNGEON_3,$02,Show db UNKNOWN_DUNGEON_3,$03,Show MapHS6C: ; cd66 (3:4d66) db VICTORY_ROAD_1,$03,Show db VICTORY_ROAD_1,$04,Show MapHS78: ; cd6c (3:4d6c) db CHAMPIONS_ROOM,$02,Hide MapHSC0: ; cd6f (3:4d6f) db SEAFOAM_ISLANDS_1,$01,Show db SEAFOAM_ISLANDS_1,$02,Show MapHS9F: ; cd75 (3:4d75) db SEAFOAM_ISLANDS_2,$01,Hide db SEAFOAM_ISLANDS_2,$02,Hide MapHSA0: ; cd7b (3:4d7b) db SEAFOAM_ISLANDS_3,$01,Hide db SEAFOAM_ISLANDS_3,$02,Hide MapHSA1: ; cd81 (3:4d81) db SEAFOAM_ISLANDS_4,$02,Show db SEAFOAM_ISLANDS_4,$03,Show db SEAFOAM_ISLANDS_4,$05,Hide db SEAFOAM_ISLANDS_4,$06,Hide MapHSA2: ; cd8d (3:4d8d) db SEAFOAM_ISLANDS_5,$01,Hide db SEAFOAM_ISLANDS_5,$02,Hide db SEAFOAM_ISLANDS_5,$03,Show db $FF,$01,Show Func_cd99: ; cd99 (3:4d99) ld hl, $d728 set 0, [hl] ld hl, UsedStrengthText ; $4daa call PrintText ld hl, UnnamedText_cdbb ; $4dbb jp PrintText UsedStrengthText: ; cdaa (3:4daa) TX_FAR _UsedStrengthText db $08 ; asm ld a, [$cf91] call PlayCry call Delay3 jp TextScriptEnd UnnamedText_cdbb: ; cdbb (3:4dbb) TX_FAR _UnnamedText_cdbb db "@" Func_cdc0: ; cdc0 (3:4dc0) ld hl, $d728 set 1, [hl] ld a, [$d732] bit 5, a jr nz, .asm_cdec ld a, [W_CURMAP] ; $d35e cp $a2 ret nz ld a, [$d881] and $3 cp $3 ret z ld hl, CoordsData_cdf7 ; $4df7 call ArePlayerCoordsInArray ret nc ld hl, $d728 res 1, [hl] ld hl, UnnamedText_cdfa ; $4dfa jp PrintText .asm_cdec ld hl, $d728 res 1, [hl] ld hl, UnnamedText_cdff ; $4dff jp PrintText CoordsData_cdf7: ; cdf7 (3:4df7) db $0B,$07,$FF UnnamedText_cdfa: ; cdfa (3:4dfa) TX_FAR _UnnamedText_cdfa db "@" UnnamedText_cdff: ; cdff (3:4dff) TX_FAR _UnnamedText_cdff db "@" ; function to add an item (in varying quantities) to the player's bag or PC box ; INPUT: ; hl = address of inventory (either wNumBagItems or wNumBoxItems) ; [$CF91] = item ID ; [$CF96] = item quantity ; sets carry flag if successful, unsets carry flag if unsuccessful AddItemToInventory_: ; ce04 (3:4e04) ld a,[$cf96] ; a = item quantity push af push bc push de push hl push hl ld d,50 ; PC box can hold 50 items ld a,wNumBagItems & $FF cp l jr nz,.checkIfInventoryFull ld a,wNumBagItems >> 8 cp h jr nz,.checkIfInventoryFull ; if the destination is the bag ld d,20 ; bag can hold 20 items .checkIfInventoryFull ld a,[hl] sub d ld d,a ld a,[hli] and a jr z,.addNewItem .loop ld a,[hli] ld b,a ; b = ID of current item in table ld a,[$cf91] ; a = ID of item being added cp b ; does the current item in the table match the item being added? jp z,.increaseItemQuantity ; if so, increase the item's quantity inc hl ld a,[hl] cp a,$ff ; is it the end of the table? jr nz,.loop .addNewItem ; add an item not yet in the inventory pop hl ld a,d and a ; is there room for a new item slot? jr z,.done ; if there is room inc [hl] ; increment the number of items in the inventory ld a,[hl] ; the number of items will be the index of the new item add a dec a ld c,a ld b,0 add hl,bc ; hl = address to store the item ld a,[$cf91] ld [hli],a ; store item ID ld a,[$cf96] ld [hli],a ; store item quantity ld [hl],$ff ; store terminator jp .success .increaseItemQuantity ; increase the quantity of an item already in the inventory ld a,[$cf96] ld b,a ; b = quantity to add ld a,[hl] ; a = existing item quantity add b ; a = new item quantity cp a,100 jp c,.storeNewQuantity ; if the new quantity is less than 100, store it ; if the new quantity is greater than or equal to 100, ; try to max out the current slot and add the rest in a new slot sub a,99 ld [$cf96],a ; a = amount left over (to put in the new slot) ld a,d and a ; is there room for a new item slot? jr z,.increaseItemQuantityFailed ; if so, store 99 in the current slot and store the rest in a new slot ld a,99 ld [hli],a jp .loop .increaseItemQuantityFailed pop hl and a jr .done .storeNewQuantity ld [hl],a pop hl .success scf .done pop hl pop de pop bc pop bc ld a,b ld [$cf96],a ; restore the initial value from when the function was called ret ; function to remove an item (in varying quantities) from the player's bag or PC box ; INPUT: ; hl = address of inventory (either wNumBagItems or wNumBoxItems) ; [$CF92] = index (within the inventory) of the item to remove ; [$CF96] = quantity to remove RemoveItemFromInventory_: ; ce74 (3:4e74) push hl inc hl ld a,[wWhichPokemon] ; index (within the inventory) of the item being removed sla a add l ld l,a jr nc,.noCarry inc h .noCarry inc hl ld a,[$cf96] ; quantity being removed ld e,a ld a,[hl] ; a = current quantity sub e ld [hld],a ; store new quantity ld [$cf97],a and a jr nz,.skipMovingUpSlots ; if the remaining quantity is 0, ; remove the emptied item slot and move up all the following item slots .moveSlotsUp ld e,l ld d,h inc de inc de ; de = address of the slot following the emptied one .loop ; loop to move up the following slots ld a,[de] inc de ld [hli],a cp a,$ff jr nz,.loop ; update menu info xor a ld [wListScrollOffset],a ld [wCurrentMenuItem],a ld [$cc2c],a ld [$d07e],a pop hl ld a,[hl] ; a = number of items in inventory dec a ; decrement the number of items ld [hl],a ; store new number of items ld [$d12a],a cp a,2 jr c,.done ld [wMaxMenuItem],a jr .done .skipMovingUpSlots pop hl .done ret ; wild pokemon data: from 4EB8 to 55C7 LoadWildData: ; ceb8 (3:4eb8) ld hl,WildDataPointers ld a,[W_CURMAP] ; get wild data for current map ld c,a ld b,0 add hl,bc add hl,bc ld a,[hli] ld h,[hl] ld l,a ; hl now points to wild data for current map ld a,[hli] ld [W_GRASSRATE],a and a jr z,.NoGrassData ; if no grass data, skip to surfing data push hl ld de,W_GRASSMONS ; otherwise, load grass data ld bc,$0014 call CopyData pop hl ld bc,$0014 add hl,bc .NoGrassData ld a,[hli] ld [W_WATERRATE],a and a ret z ; if no water data, we're done ld de,W_WATERMONS ; otherwise, load surfing data ld bc,$0014 jp CopyData WildDataPointers: ; ceeb (3:4eeb) dw NoMons ; PALLET_TOWN dw NoMons ; VIRIDIAN_CITY dw NoMons ; PEWTER_CITY dw NoMons ; CERULEAN_CITY dw NoMons ; LAVENDER_TOWN dw NoMons ; VERMILION_CITY dw NoMons ; CELADON_CITY dw NoMons ; FUCHSIA_CITY dw NoMons ; CINNABAR_ISLAND dw NoMons ; INDIGO_PLATEAU dw NoMons ; SAFFRON_CITY dw NoMons ; unused dw Route1Mons ; ROUTE_1 dw Route2Mons ; ROUTE_2 dw Route3Mons ; ROUTE_3 dw Route4Mons ; ROUTE_4 dw Route5Mons ; ROUTE_5 dw Route6Mons ; ROUTE_6 dw Route7Mons ; ROUTE_7 dw Route8Mons ; ROUTE_8 dw Route9Mons ; ROUTE_9 dw Route10Mons ; ROUTE_10 dw Route11Mons ; ROUTE_11 dw Route12Mons ; ROUTE_12 dw Route13Mons ; ROUTE_13 dw Route14Mons ; ROUTE_14 dw Route15Mons ; ROUTE_15 dw Route16Mons ; ROUTE_16 dw Route17Mons ; ROUTE_17 dw Route18Mons ; ROUTE_18 dw WaterMons ; ROUTE_19 dw WaterMons ; ROUTE_20 dw Route21Mons ; ROUTE_21 dw Route22Mons ; ROUTE_22 dw Route23Mons ; ROUTE_23 dw Route24Mons ; ROUTE_24 dw Route25Mons ; ROUTE_25 dw NoMons ; REDS_HOUSE_1F dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw ForestMons ; ViridianForest dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw MoonMons1 dw MoonMonsB1 dw MoonMonsB2 dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw TunnelMonsB1 dw PowerPlantMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw PlateauMons1 dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw TowerMons1 dw TowerMons2 dw TowerMons3 dw TowerMons4 dw TowerMons5 dw TowerMons6 dw TowerMons7 dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw IslandMonsB1 dw IslandMonsB2 dw IslandMonsB3 dw IslandMonsB4 dw NoMons dw NoMons dw MansionMons1 dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw IslandMons1 dw NoMons dw PlateauMons2 dw NoMons dw NoMons dw CaveMons dw PlateauMons3 dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw MansionMons2 dw MansionMons3 dw MansionMonsB1 dw ZoneMons1 dw ZoneMons2 dw ZoneMons3 dw ZoneMonsCenter dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw DungeonMons2 dw DungeonMonsB1 dw DungeonMons1 dw NoMons dw NoMons dw NoMons dw TunnelMonsB2 dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw NoMons dw $FFFF ; wild pokemon data is divided into two parts. ; first part: pokemon found in grass ; second part: pokemon found while surfing ; each part goes as follows: ; if first byte == 00, then ; no wild pokemon on this map ; if first byte != 00, then ; first byte is encounter rate ; followed by 20 bytes: ; level, species (ten times) IF _RED NoMons: ; d0dd (3:50dd) db $00 db $00 Route1Mons: ; d0df (3:50df) db $19 db 3,PIDGEY db 3,RATTATA db 3,RATTATA db 2,RATTATA db 2,PIDGEY db 3,PIDGEY db 3,PIDGEY db 4,RATTATA db 4,PIDGEY db 5,PIDGEY db $00 Route2Mons: ; d0f5 (3:50f5) db $19 db 3,RATTATA db 3,PIDGEY db 4,PIDGEY db 4,RATTATA db 5,PIDGEY db 3,WEEDLE db 2,RATTATA db 5,RATTATA db 4,WEEDLE db 5,WEEDLE db $00 Route22Mons: ; d10b (3:510b) db $19 db 3,RATTATA db 3,NIDORAN_M db 4,RATTATA db 4,NIDORAN_M db 2,RATTATA db 2,NIDORAN_M db 3,SPEAROW db 5,SPEAROW db 3,NIDORAN_F db 4,NIDORAN_F db $00 ForestMons: ; d121 (3:5121) db $08 db 4,WEEDLE db 5,KAKUNA db 3,WEEDLE db 5,WEEDLE db 4,KAKUNA db 6,KAKUNA db 4,METAPOD db 3,CATERPIE db 3,PIKACHU db 5,PIKACHU db $00 Route3Mons: ; d137 (3:5137) db $14 db 6,PIDGEY db 5,SPEAROW db 7,PIDGEY db 6,SPEAROW db 7,SPEAROW db 8,PIDGEY db 8,SPEAROW db 3,JIGGLYPUFF db 5,JIGGLYPUFF db 7,JIGGLYPUFF db $00 MoonMons1: ; d14d (3:514d) db $0A db 8,ZUBAT db 7,ZUBAT db 9,ZUBAT db 8,GEODUDE db 6,ZUBAT db 10,ZUBAT db 10,GEODUDE db 8,PARAS db 11,ZUBAT db 8,CLEFAIRY db $00 MoonMonsB1: ; d163 (3:5163) db $0A db 8,ZUBAT db 7,ZUBAT db 7,GEODUDE db 8,GEODUDE db 9,ZUBAT db 10,PARAS db 10,ZUBAT db 11,ZUBAT db 9,CLEFAIRY db 9,GEODUDE db $00 MoonMonsB2: ; d179 (3:5179) db $0A db 9,ZUBAT db 9,GEODUDE db 10,ZUBAT db 10,GEODUDE db 11,ZUBAT db 10,PARAS db 12,PARAS db 10,CLEFAIRY db 12,ZUBAT db 12,CLEFAIRY db $00 Route4Mons: ; d18f (3:518f) db $14 db 10,RATTATA db 10,SPEAROW db 8,RATTATA db 6,EKANS db 8,SPEAROW db 10,EKANS db 12,RATTATA db 12,SPEAROW db 8,EKANS db 12,EKANS db $00 Route24Mons: ; d1a5 (3:51a5) db $19 db 7,WEEDLE db 8,KAKUNA db 12,PIDGEY db 12,ODDISH db 13,ODDISH db 10,ABRA db 14,ODDISH db 13,PIDGEY db 8,ABRA db 12,ABRA db $00 Route25Mons: ; d1bb (3:51bb) db $0F db 8,WEEDLE db 9,KAKUNA db 13,PIDGEY db 12,ODDISH db 13,ODDISH db 12,ABRA db 14,ODDISH db 10,ABRA db 7,METAPOD db 8,CATERPIE db $00 Route9Mons: ; d1d1 (3:51d1) db $0F db 16,RATTATA db 16,SPEAROW db 14,RATTATA db 11,EKANS db 13,SPEAROW db 15,EKANS db 17,RATTATA db 17,SPEAROW db 13,EKANS db 17,EKANS db $00 Route5Mons: ; d1e7 (3:51e7) db $0F db 13,ODDISH db 13,PIDGEY db 15,PIDGEY db 10,MANKEY db 12,MANKEY db 15,ODDISH db 16,ODDISH db 16,PIDGEY db 14,MANKEY db 16,MANKEY db $00 Route6Mons: ; d1fd (3:51fd) db $0F db 13,ODDISH db 13,PIDGEY db 15,PIDGEY db 10,MANKEY db 12,MANKEY db 15,ODDISH db 16,ODDISH db 16,PIDGEY db 14,MANKEY db 16,MANKEY db $00 Route11Mons: ; d213 (3:5213) db $0F db 14,EKANS db 15,SPEAROW db 12,EKANS db 9,DROWZEE db 13,SPEAROW db 13,DROWZEE db 15,EKANS db 17,SPEAROW db 11,DROWZEE db 15,DROWZEE db $00 TunnelMonsB1: ; d229 (3:5229) db $0F db 16,ZUBAT db 17,ZUBAT db 17,GEODUDE db 15,MACHOP db 16,GEODUDE db 18,ZUBAT db 15,ZUBAT db 17,MACHOP db 13,ONIX db 15,ONIX db $00 TunnelMonsB2: ; d23f (3:523f) db $0F db 16,ZUBAT db 17,ZUBAT db 17,GEODUDE db 15,MACHOP db 16,GEODUDE db 18,ZUBAT db 17,MACHOP db 17,ONIX db 13,ONIX db 18,GEODUDE db $00 Route10Mons: ; d255 (3:5255) db $0F db 16,VOLTORB db 16,SPEAROW db 14,VOLTORB db 11,EKANS db 13,SPEAROW db 15,EKANS db 17,VOLTORB db 17,SPEAROW db 13,EKANS db 17,EKANS db $00 Route12Mons: ; d26b (3:526b) db $0F db 24,ODDISH db 25,PIDGEY db 23,PIDGEY db 24,VENONAT db 22,ODDISH db 26,VENONAT db 26,ODDISH db 27,PIDGEY db 28,GLOOM db 30,GLOOM db $00 Route8Mons: ; d281 (3:5281) db $0F db 18,PIDGEY db 18,MANKEY db 17,EKANS db 16,GROWLITHE db 20,PIDGEY db 20,MANKEY db 19,EKANS db 17,GROWLITHE db 15,GROWLITHE db 18,GROWLITHE db $00 Route7Mons: ; d297 (3:5297) db $0F db 19,PIDGEY db 19,ODDISH db 17,MANKEY db 22,ODDISH db 22,PIDGEY db 18,MANKEY db 18,GROWLITHE db 20,GROWLITHE db 19,MANKEY db 20,MANKEY db $00 TowerMons1: ; d2ad (3:52ad) db $00 db $00 TowerMons2: ; d2af (3:52af) db $00 db $00 TowerMons3: ; d2b1 (3:52b1) db $0A db 20,GASTLY db 21,GASTLY db 22,GASTLY db 23,GASTLY db 19,GASTLY db 18,GASTLY db 24,GASTLY db 20,CUBONE db 22,CUBONE db 25,HAUNTER db $00 TowerMons4: ; d2c7 (3:52c7) db $0A db 20,GASTLY db 21,GASTLY db 22,GASTLY db 23,GASTLY db 19,GASTLY db 18,GASTLY db 25,HAUNTER db 20,CUBONE db 22,CUBONE db 24,GASTLY db $00 TowerMons5: ; d2dd (3:52dd) db $0A db 20,GASTLY db 21,GASTLY db 22,GASTLY db 23,GASTLY db 19,GASTLY db 18,GASTLY db 25,HAUNTER db 20,CUBONE db 22,CUBONE db 24,GASTLY db $00 TowerMons6: ; d2f3 (3:52f3) db $0F db 21,GASTLY db 22,GASTLY db 23,GASTLY db 24,GASTLY db 20,GASTLY db 19,GASTLY db 26,HAUNTER db 22,CUBONE db 24,CUBONE db 28,HAUNTER db $00 TowerMons7: ; d309 (3:5309) db $0F db 21,GASTLY db 22,GASTLY db 23,GASTLY db 24,GASTLY db 20,GASTLY db 28,HAUNTER db 22,CUBONE db 24,CUBONE db 28,HAUNTER db 30,HAUNTER db $00 Route13Mons: ; d31f (3:531f) db $14 db 24,ODDISH db 25,PIDGEY db 27,PIDGEY db 24,VENONAT db 22,ODDISH db 26,VENONAT db 26,ODDISH db 25,DITTO db 28,GLOOM db 30,GLOOM db $00 Route14Mons: ; d335 (3:5335) db $0F db 24,ODDISH db 26,PIDGEY db 23,DITTO db 24,VENONAT db 22,ODDISH db 26,VENONAT db 26,ODDISH db 30,GLOOM db 28,PIDGEOTTO db 30,PIDGEOTTO db $00 Route15Mons: ; d34b (3:534b) db $0F db 24,ODDISH db 26,DITTO db 23,PIDGEY db 26,VENONAT db 22,ODDISH db 28,VENONAT db 26,ODDISH db 30,GLOOM db 28,PIDGEOTTO db 30,PIDGEOTTO db $00 Route16Mons: ; d361 (3:5361) db $19 db 20,SPEAROW db 22,SPEAROW db 18,RATTATA db 20,DODUO db 20,RATTATA db 18,DODUO db 22,DODUO db 22,RATTATA db 23,RATICATE db 25,RATICATE db $00 Route17Mons: ; d377 (3:5377) db $19 db 20,SPEAROW db 22,SPEAROW db 25,RATICATE db 24,DODUO db 27,RATICATE db 26,DODUO db 28,DODUO db 29,RATICATE db 25,FEAROW db 27,FEAROW db $00 Route18Mons: ; d38d (3:538d) db $19 db 20,SPEAROW db 22,SPEAROW db 25,RATICATE db 24,DODUO db 25,FEAROW db 26,DODUO db 28,DODUO db 29,RATICATE db 27,FEAROW db 29,FEAROW db $00 ZoneMonsCenter: ; d3a3 (3:53a3) db $1E db 22,NIDORAN_M db 25,RHYHORN db 22,VENONAT db 24,EXEGGCUTE db 31,NIDORINO db 25,EXEGGCUTE db 31,NIDORINA db 30,PARASECT db 23,SCYTHER db 23,CHANSEY db $00 ZoneMons1: ; d3b9 (3:53b9) db $1E db 24,NIDORAN_M db 26,DODUO db 22,PARAS db 25,EXEGGCUTE db 33,NIDORINO db 23,EXEGGCUTE db 24,NIDORAN_F db 25,PARASECT db 25,KANGASKHAN db 28,SCYTHER db $00 ZoneMons2: ; d3cf (3:53cf) db $1E db 22,NIDORAN_M db 26,RHYHORN db 23,PARAS db 25,EXEGGCUTE db 30,NIDORINO db 27,EXEGGCUTE db 30,NIDORINA db 32,VENOMOTH db 26,CHANSEY db 28,TAUROS db $00 ZoneMons3: ; d3e5 (3:53e5) db $1E db 25,NIDORAN_M db 26,DODUO db 23,VENONAT db 24,EXEGGCUTE db 33,NIDORINO db 26,EXEGGCUTE db 25,NIDORAN_F db 31,VENOMOTH db 26,TAUROS db 28,KANGASKHAN db $00 WaterMons: ; d3fb (3:53fb) db $00 db $05 db 5,TENTACOOL db 10,TENTACOOL db 15,TENTACOOL db 5,TENTACOOL db 10,TENTACOOL db 15,TENTACOOL db 20,TENTACOOL db 30,TENTACOOL db 35,TENTACOOL db 40,TENTACOOL IslandMons1: ; d411 (3:5411) db $0F db 30,SEEL db 30,SLOWPOKE db 30,SHELLDER db 30,HORSEA db 28,HORSEA db 21,ZUBAT db 29,GOLBAT db 28,PSYDUCK db 28,SHELLDER db 38,GOLDUCK db $00 IslandMonsB1: ; d427 (3:5427) db $0A db 30,STARYU db 30,HORSEA db 32,SHELLDER db 32,HORSEA db 28,SLOWPOKE db 30,SEEL db 30,SLOWPOKE db 28,SEEL db 38,DEWGONG db 37,SEADRA db $00 IslandMonsB2: ; d43d (3:543d) db $0A db 30,SEEL db 30,SLOWPOKE db 32,SEEL db 32,SLOWPOKE db 28,HORSEA db 30,STARYU db 30,HORSEA db 28,SHELLDER db 30,GOLBAT db 37,SLOWBRO db $00 IslandMonsB3: ; d453 (3:5453) db $0A db 31,SLOWPOKE db 31,SEEL db 33,SLOWPOKE db 33,SEEL db 29,HORSEA db 31,SHELLDER db 31,HORSEA db 29,SHELLDER db 39,SEADRA db 37,DEWGONG db $00 IslandMonsB4: ; d469 (3:5469) db $0A db 31,HORSEA db 31,SHELLDER db 33,HORSEA db 33,SHELLDER db 29,SLOWPOKE db 31,SEEL db 31,SLOWPOKE db 29,SEEL db 39,SLOWBRO db 32,GOLBAT db $00 MansionMons1: ; d47f (3:547f) db $0A db 32,KOFFING db 30,KOFFING db 34,PONYTA db 30,PONYTA db 34,GROWLITHE db 32,PONYTA db 30,GRIMER db 28,PONYTA db 37,WEEZING db 39,MUK db $00 MansionMons2: ; d495 (3:5495) db $0A db 32,GROWLITHE db 34,KOFFING db 34,KOFFING db 30,PONYTA db 30,KOFFING db 32,PONYTA db 30,GRIMER db 28,PONYTA db 39,WEEZING db 37,MUK db $00 MansionMons3: ; d4ab (3:54ab) db $0A db 31,KOFFING db 33,GROWLITHE db 35,KOFFING db 32,PONYTA db 34,PONYTA db 40,WEEZING db 34,GRIMER db 38,WEEZING db 36,PONYTA db 42,MUK db $00 MansionMonsB1: ; d4c1 (3:54c1) db $0A db 33,KOFFING db 31,KOFFING db 35,GROWLITHE db 32,PONYTA db 31,KOFFING db 40,WEEZING db 34,PONYTA db 35,GRIMER db 42,WEEZING db 42,MUK db $00 Route21Mons: ; d4d7 (3:54d7) db $19 db 21,RATTATA db 23,PIDGEY db 30,RATICATE db 23,RATTATA db 21,PIDGEY db 30,PIDGEOTTO db 32,PIDGEOTTO db 28,TANGELA db 30,TANGELA db 32,TANGELA db $05 db 5,TENTACOOL db 10,TENTACOOL db 15,TENTACOOL db 5,TENTACOOL db 10,TENTACOOL db 15,TENTACOOL db 20,TENTACOOL db 30,TENTACOOL db 35,TENTACOOL db 40,TENTACOOL DungeonMons1: ; d501 (3:5501) db $0A db 46,GOLBAT db 46,HYPNO db 46,MAGNETON db 49,DODRIO db 49,VENOMOTH db 52,ARBOK db 49,KADABRA db 52,PARASECT db 53,RAICHU db 53,DITTO db $00 DungeonMons2: ; d517 (3:5517) db $0F db 51,DODRIO db 51,VENOMOTH db 51,KADABRA db 52,RHYDON db 52,MAROWAK db 52,ELECTRODE db 56,CHANSEY db 54,WIGGLYTUFF db 55,DITTO db 60,DITTO db $00 DungeonMonsB1: ; d52d (3:552d) db $19 db 55,RHYDON db 55,MAROWAK db 55,ELECTRODE db 64,CHANSEY db 64,PARASECT db 64,RAICHU db 57,ARBOK db 65,DITTO db 63,DITTO db 67,DITTO db $00 PowerPlantMons: ; d543 (3:5543) db $0A db 21,VOLTORB db 21,MAGNEMITE db 20,PIKACHU db 24,PIKACHU db 23,MAGNEMITE db 23,VOLTORB db 32,MAGNETON db 35,MAGNETON db 33,ELECTABUZZ db 36,ELECTABUZZ db $00 Route23Mons: ; d559 (3:5559) db $0A db 26,EKANS db 33,DITTO db 26,SPEAROW db 38,FEAROW db 38,DITTO db 38,FEAROW db 41,ARBOK db 43,DITTO db 41,FEAROW db 43,FEAROW db $00 PlateauMons2: ; d56f (3:556f) db $0A db 22,MACHOP db 24,GEODUDE db 26,ZUBAT db 36,ONIX db 39,ONIX db 42,ONIX db 41,MACHOKE db 40,GOLBAT db 40,MAROWAK db 43,GRAVELER db $00 PlateauMons3: ; d585 (3:5585) db $0F db 24,MACHOP db 26,GEODUDE db 22,ZUBAT db 42,ONIX db 40,VENOMOTH db 45,ONIX db 43,GRAVELER db 41,GOLBAT db 42,MACHOKE db 45,MACHOKE db $00 PlateauMons1: ; d59b (3:559b) db $0F db 24,MACHOP db 26,GEODUDE db 22,ZUBAT db 36,ONIX db 39,ONIX db 42,ONIX db 41,GRAVELER db 41,GOLBAT db 42,MACHOKE db 43,MAROWAK db $00 CaveMons: ; d5b1 (3:55b1) db $14 db 18,DIGLETT db 19,DIGLETT db 17,DIGLETT db 20,DIGLETT db 16,DIGLETT db 15,DIGLETT db 21,DIGLETT db 22,DIGLETT db 29,DUGTRIO db 31,DUGTRIO db $00 ENDC IF _GREEN || !_JAPAN && _BLUE NoMons: ; d0dd (3:50dd) db $00 db $00 Route1Mons: ; d0df (3:50df) db $19 db 3,PIDGEY db 3,RATTATA db 3,RATTATA db 2,RATTATA db 2,PIDGEY db 3,PIDGEY db 3,PIDGEY db 4,RATTATA db 4,PIDGEY db 5,PIDGEY db $00 Route2Mons: ; d0f5 (3:50f5) db $19 db 3,RATTATA db 3,PIDGEY db 4,PIDGEY db 4,RATTATA db 5,PIDGEY db 3,CATERPIE db 2,RATTATA db 5,RATTATA db 4,CATERPIE db 5,CATERPIE db $00 Route22Mons: ; d10b (3:510b) db $19 db 3,RATTATA db 3,NIDORAN_F db 4,RATTATA db 4,NIDORAN_F db 2,RATTATA db 2,NIDORAN_F db 3,SPEAROW db 5,SPEAROW db 3,NIDORAN_M db 4,NIDORAN_M db $00 ForestMons: ; d121 (3:5121) db $08 db 4,CATERPIE db 5,METAPOD db 3,CATERPIE db 5,CATERPIE db 4,METAPOD db 6,METAPOD db 4,KAKUNA db 3,WEEDLE db 3,PIKACHU db 5,PIKACHU db $00 Route3Mons: ; d137 (3:5137) db $14 db 6,PIDGEY db 5,SPEAROW db 7,PIDGEY db 6,SPEAROW db 7,SPEAROW db 8,PIDGEY db 8,SPEAROW db 3,JIGGLYPUFF db 5,JIGGLYPUFF db 7,JIGGLYPUFF db $00 MoonMons1: ; d14d (3:514d) db $0A db 8,ZUBAT db 7,ZUBAT db 9,ZUBAT db 8,GEODUDE db 6,ZUBAT db 10,ZUBAT db 10,GEODUDE db 8,PARAS db 11,ZUBAT db 8,CLEFAIRY db $00 MoonMonsB1: ; d163 (3:5163) db $0A db 8,ZUBAT db 7,ZUBAT db 7,GEODUDE db 8,GEODUDE db 9,ZUBAT db 10,PARAS db 10,ZUBAT db 11,ZUBAT db 9,CLEFAIRY db 9,GEODUDE db $00 MoonMonsB2: ; d179 (3:5179) db $0A db 9,ZUBAT db 9,GEODUDE db 10,ZUBAT db 10,GEODUDE db 11,ZUBAT db 10,PARAS db 12,PARAS db 10,CLEFAIRY db 12,ZUBAT db 12,CLEFAIRY db $00 Route4Mons: ; d18f (3:518f) db $14 db 10,RATTATA db 10,SPEAROW db 8,RATTATA db 6,SANDSHREW db 8,SPEAROW db 10,SANDSHREW db 12,RATTATA db 12,SPEAROW db 8,SANDSHREW db 12,SANDSHREW db $00 Route24Mons: ; d1a5 (3:51a5) db $19 db 7,CATERPIE db 8,METAPOD db 12,PIDGEY db 12,BELLSPROUT db 13,BELLSPROUT db 10,ABRA db 14,BELLSPROUT db 13,PIDGEY db 8,ABRA db 12,ABRA db $00 Route25Mons: ; d1bb (3:51bb) db $0F db 8,CATERPIE db 9,METAPOD db 13,PIDGEY db 12,BELLSPROUT db 13,BELLSPROUT db 12,ABRA db 14,BELLSPROUT db 10,ABRA db 7,KAKUNA db 8,WEEDLE db $00 Route9Mons: ; d1d1 (3:51d1) db $0F db 16,RATTATA db 16,SPEAROW db 14,RATTATA db 11,SANDSHREW db 13,SPEAROW db 15,SANDSHREW db 17,RATTATA db 17,SPEAROW db 13,SANDSHREW db 17,SANDSHREW db $00 Route5Mons: ; d1e7 (3:51e7) db $0F db 13,BELLSPROUT db 13,PIDGEY db 15,PIDGEY db 10,MEOWTH db 12,MEOWTH db 15,BELLSPROUT db 16,BELLSPROUT db 16,PIDGEY db 14,MEOWTH db 16,MEOWTH db $00 Route6Mons: ; d1fd (3:51fd) db $0F db 13,BELLSPROUT db 13,PIDGEY db 15,PIDGEY db 10,MEOWTH db 12,MEOWTH db 15,BELLSPROUT db 16,BELLSPROUT db 16,PIDGEY db 14,MEOWTH db 16,MEOWTH db $00 Route11Mons: ; d213 (3:5213) db $0F db 14,SANDSHREW db 15,SPEAROW db 12,SANDSHREW db 9,DROWZEE db 13,SPEAROW db 13,DROWZEE db 15,SANDSHREW db 17,SPEAROW db 11,DROWZEE db 15,DROWZEE db $00 TunnelMonsB1: ; d229 (3:5229) db $0F db 16,ZUBAT db 17,ZUBAT db 17,GEODUDE db 15,MACHOP db 16,GEODUDE db 18,ZUBAT db 15,ZUBAT db 17,MACHOP db 13,ONIX db 15,ONIX db $00 TunnelMonsB2: ; d23f (3:523f) db $0F db 16,ZUBAT db 17,ZUBAT db 17,GEODUDE db 15,MACHOP db 16,GEODUDE db 18,ZUBAT db 17,MACHOP db 17,ONIX db 13,ONIX db 18,GEODUDE db $00 Route10Mons: ; d255 (3:5255) db $0F db 16,VOLTORB db 16,SPEAROW db 14,VOLTORB db 11,SANDSHREW db 13,SPEAROW db 15,SANDSHREW db 17,VOLTORB db 17,SPEAROW db 13,SANDSHREW db 17,SANDSHREW db $00 Route12Mons: ; d26b (3:526b) db $0F db 24,BELLSPROUT db 25,PIDGEY db 23,PIDGEY db 24,VENONAT db 22,BELLSPROUT db 26,VENONAT db 26,BELLSPROUT db 27,PIDGEY db 28,WEEPINBELL db 30,WEEPINBELL db $00 Route8Mons: ; d281 (3:5281) db $0F db 18,PIDGEY db 18,MEOWTH db 17,SANDSHREW db 16,VULPIX db 20,PIDGEY db 20,MEOWTH db 19,SANDSHREW db 17,VULPIX db 15,VULPIX db 18,VULPIX db $00 Route7Mons: ; d297 (3:5297) db $0F db 19,PIDGEY db 19,BELLSPROUT db 17,MEOWTH db 22,BELLSPROUT db 22,PIDGEY db 18,MEOWTH db 18,VULPIX db 20,VULPIX db 19,MEOWTH db 20,MEOWTH db $00 TowerMons1: ; d2ad (3:52ad) db $00 db $00 TowerMons2: ; d2af (3:52af) db $00 db $00 TowerMons3: ; d2b1 (3:52b1) db $0A db 20,GASTLY db 21,GASTLY db 22,GASTLY db 23,GASTLY db 19,GASTLY db 18,GASTLY db 24,GASTLY db 20,CUBONE db 22,CUBONE db 25,HAUNTER db $00 TowerMons4: ; d2c7 (3:52c7) db $0A db 20,GASTLY db 21,GASTLY db 22,GASTLY db 23,GASTLY db 19,GASTLY db 18,GASTLY db 25,HAUNTER db 20,CUBONE db 22,CUBONE db 24,GASTLY db $00 TowerMons5: ; d2dd (3:52dd) db $0A db 20,GASTLY db 21,GASTLY db 22,GASTLY db 23,GASTLY db 19,GASTLY db 18,GASTLY db 25,HAUNTER db 20,CUBONE db 22,CUBONE db 24,GASTLY db $00 TowerMons6: ; d2f3 (3:52f3) db $0F db 21,GASTLY db 22,GASTLY db 23,GASTLY db 24,GASTLY db 20,GASTLY db 19,GASTLY db 26,HAUNTER db 22,CUBONE db 24,CUBONE db 28,HAUNTER db $00 TowerMons7: ; d309 (3:5309) db $0F db 21,GASTLY db 22,GASTLY db 23,GASTLY db 24,GASTLY db 20,GASTLY db 28,HAUNTER db 22,CUBONE db 24,CUBONE db 28,HAUNTER db 30,HAUNTER db $00 Route13Mons: ; d31f (3:531f) db $14 db 24,BELLSPROUT db 25,PIDGEY db 27,PIDGEY db 24,VENONAT db 22,BELLSPROUT db 26,VENONAT db 26,BELLSPROUT db 25,DITTO db 28,WEEPINBELL db 30,WEEPINBELL db $00 Route14Mons: ; d335 (3:5335) db $0F db 24,BELLSPROUT db 26,PIDGEY db 23,DITTO db 24,VENONAT db 22,BELLSPROUT db 26,VENONAT db 26,BELLSPROUT db 30,WEEPINBELL db 28,PIDGEOTTO db 30,PIDGEOTTO db $00 Route15Mons: ; d34b (3:534b) db $0F db 24,BELLSPROUT db 26,DITTO db 23,PIDGEY db 26,VENONAT db 22,BELLSPROUT db 28,VENONAT db 26,BELLSPROUT db 30,WEEPINBELL db 28,PIDGEOTTO db 30,PIDGEOTTO db $00 Route16Mons: ; d361 (3:5361) db $19 db 20,SPEAROW db 22,SPEAROW db 18,RATTATA db 20,DODUO db 20,RATTATA db 18,DODUO db 22,DODUO db 22,RATTATA db 23,RATICATE db 25,RATICATE db $00 Route17Mons: ; d377 (3:5377) db $19 db 20,SPEAROW db 22,SPEAROW db 25,RATICATE db 24,DODUO db 27,RATICATE db 26,DODUO db 28,DODUO db 29,RATICATE db 25,FEAROW db 27,FEAROW db $00 Route18Mons: ; d38d (3:538d) db $19 db 20,SPEAROW db 22,SPEAROW db 25,RATICATE db 24,DODUO db 25,FEAROW db 26,DODUO db 28,DODUO db 29,RATICATE db 27,FEAROW db 29,FEAROW db $00 ZoneMonsCenter: ; d3a3 (3:53a3) db $1E db 22,NIDORAN_F db 25,RHYHORN db 22,VENONAT db 24,EXEGGCUTE db 31,NIDORINA db 25,EXEGGCUTE db 31,NIDORINO db 30,PARASECT db 23,PINSIR db 23,CHANSEY db $00 ZoneMons1: ; d3b9 (3:53b9) db $1E db 24,NIDORAN_F db 26,DODUO db 22,PARAS db 25,EXEGGCUTE db 33,NIDORINA db 23,EXEGGCUTE db 24,NIDORAN_M db 25,PARASECT db 25,KANGASKHAN db 28,PINSIR db $00 ZoneMons2: ; d3cf (3:53cf) db $1E db 22,NIDORAN_F db 26,RHYHORN db 23,PARAS db 25,EXEGGCUTE db 30,NIDORINA db 27,EXEGGCUTE db 30,NIDORINO db 32,VENOMOTH db 26,CHANSEY db 28,TAUROS db $00 ZoneMons3: ; d3e5 (3:53e5) db $1E db 25,NIDORAN_F db 26,DODUO db 23,VENONAT db 24,EXEGGCUTE db 33,NIDORINA db 26,EXEGGCUTE db 25,NIDORAN_M db 31,VENOMOTH db 26,TAUROS db 28,KANGASKHAN db $00 WaterMons: ; d3fb (3:53fb) db $00 db $05 db 5,TENTACOOL db 10,TENTACOOL db 15,TENTACOOL db 5,TENTACOOL db 10,TENTACOOL db 15,TENTACOOL db 20,TENTACOOL db 30,TENTACOOL db 35,TENTACOOL db 40,TENTACOOL IslandMons1: ; d411 (3:5411) db $0F db 30,SEEL db 30,PSYDUCK db 30,STARYU db 30,KRABBY db 28,KRABBY db 21,ZUBAT db 29,GOLBAT db 28,SLOWPOKE db 28,STARYU db 38,SLOWBRO db $00 IslandMonsB1: ; d427 (3:5427) db $0A db 30,SHELLDER db 30,KRABBY db 32,STARYU db 32,KRABBY db 28,PSYDUCK db 30,SEEL db 30,PSYDUCK db 28,SEEL db 38,DEWGONG db 37,KINGLER db $00 IslandMonsB2: ; d43d (3:543d) db $0A db 30,SEEL db 30,PSYDUCK db 32,SEEL db 32,PSYDUCK db 28,KRABBY db 30,SHELLDER db 30,KRABBY db 28,STARYU db 30,GOLBAT db 37,GOLDUCK db $00 IslandMonsB3: ; d453 (3:5453) db $0A db 31,PSYDUCK db 31,SEEL db 33,PSYDUCK db 33,SEEL db 29,KRABBY db 31,STARYU db 31,KRABBY db 29,STARYU db 39,KINGLER db 37,DEWGONG db $00 IslandMonsB4: ; d469 (3:5469) db $0A db 31,KRABBY db 31,STARYU db 33,KRABBY db 33,STARYU db 29,PSYDUCK db 31,SEEL db 31,PSYDUCK db 29,SEEL db 39,GOLDUCK db 32,GOLBAT db $00 MansionMons1: ; d47f (3:547f) db $0A db 32,GRIMER db 30,GRIMER db 34,PONYTA db 30,PONYTA db 34,VULPIX db 32,PONYTA db 30,KOFFING db 28,PONYTA db 37,MUK db 39,WEEZING db $00 MansionMons2: ; d495 (3:5495) db $0A db 32,VULPIX db 34,GRIMER db 34,GRIMER db 30,PONYTA db 30,GRIMER db 32,PONYTA db 30,KOFFING db 28,PONYTA db 39,MUK db 37,WEEZING db $00 MansionMons3: ; d4ab (3:54ab) db $0A db 31,GRIMER db 33,VULPIX db 35,GRIMER db 32,PONYTA db 34,MAGMAR db 40,MUK db 34,KOFFING db 38,MUK db 36,PONYTA db 42,WEEZING db $00 MansionMonsB1: ; d4c1 (3:54c1) db $0A db 33,GRIMER db 31,GRIMER db 35,VULPIX db 32,PONYTA db 31,GRIMER db 40,MUK db 34,PONYTA db 35,KOFFING db 38,MAGMAR db 42,WEEZING db $00 Route21Mons: ; d4d7 (3:54d7) db $19 db 21,RATTATA db 23,PIDGEY db 30,RATICATE db 23,RATTATA db 21,PIDGEY db 30,PIDGEOTTO db 32,PIDGEOTTO db 28,TANGELA db 30,TANGELA db 32,TANGELA db $05 db 5,TENTACOOL db 10,TENTACOOL db 15,TENTACOOL db 5,TENTACOOL db 10,TENTACOOL db 15,TENTACOOL db 20,TENTACOOL db 30,TENTACOOL db 35,TENTACOOL db 40,TENTACOOL DungeonMons1: ; d501 (3:5501) db $0A db 46,GOLBAT db 46,HYPNO db 46,MAGNETON db 49,DODRIO db 49,VENOMOTH db 52,SANDSLASH db 49,KADABRA db 52,PARASECT db 53,RAICHU db 53,DITTO db $00 DungeonMons2: ; d517 (3:5517) db $0F db 51,DODRIO db 51,VENOMOTH db 51,KADABRA db 52,RHYDON db 52,MAROWAK db 52,ELECTRODE db 56,CHANSEY db 54,WIGGLYTUFF db 55,DITTO db 60,DITTO db $00 DungeonMonsB1: ; d52d (3:552d) db $19 db 55,RHYDON db 55,MAROWAK db 55,ELECTRODE db 64,CHANSEY db 64,PARASECT db 64,RAICHU db 57,SANDSLASH db 65,DITTO db 63,DITTO db 67,DITTO db $00 PowerPlantMons: ; d543 (3:5543) db $0A db 21,VOLTORB db 21,MAGNEMITE db 20,PIKACHU db 24,PIKACHU db 23,MAGNEMITE db 23,VOLTORB db 32,MAGNETON db 35,MAGNETON db 33,RAICHU db 36,RAICHU db $00 Route23Mons: ; d559 (3:5559) db $0A db 26,SANDSHREW db 33,DITTO db 26,SPEAROW db 38,FEAROW db 38,DITTO db 38,FEAROW db 41,SANDSLASH db 43,DITTO db 41,FEAROW db 43,FEAROW db $00 PlateauMons2: ; d56f (3:556f) db $0A db 22,MACHOP db 24,GEODUDE db 26,ZUBAT db 36,ONIX db 39,ONIX db 42,ONIX db 41,MACHOKE db 40,GOLBAT db 40,MAROWAK db 43,GRAVELER db $00 PlateauMons3: ; d585 (3:5585) db $0F db 24,MACHOP db 26,GEODUDE db 22,ZUBAT db 42,ONIX db 40,VENOMOTH db 45,ONIX db 43,GRAVELER db 41,GOLBAT db 42,MACHOKE db 45,MACHOKE db $00 PlateauMons1: ; d59b (3:559b) db $0F db 24,MACHOP db 26,GEODUDE db 22,ZUBAT db 36,ONIX db 39,ONIX db 42,ONIX db 41,GRAVELER db 41,GOLBAT db 42,MACHOKE db 43,MAROWAK db $00 CaveMons: ; d5b1 (3:55b1) db $14 db 18,DIGLETT db 19,DIGLETT db 17,DIGLETT db 20,DIGLETT db 16,DIGLETT db 15,DIGLETT db 21,DIGLETT db 22,DIGLETT db 29,DUGTRIO db 31,DUGTRIO db $00 ENDC IF _JAPAN && _BLUE NoMons: ; d0dd (3:50dd) db $00 db $00 Route1Mons: ; d0df (3:50df) db $19 db 3,PIDGEY db 3,RATTATA db 3,RATTATA db 2,RATTATA db 2,PIDGEY db 3,PIDGEY db 3,PIDGEY db 4,RATTATA db 4,PIDGEY db 5,PIDGEY db $00 Route2Mons: ; d0f5 (3:50f5) db $19 db 3,RATTATA db 3,PIDGEY db 4,PIDGEY db 4,RATTATA db 5,PIDGEY db 3,CATERPIE db 2,RATTATA db 5,RATTATA db 4,CATERPIE db 5,CATERPIE db $00 Route22Mons: ; d10b (3:510b) db $19 db 3,RATTATA db 3,NIDORAN_M db 4,RATTATA db 4,NIDORAN_M db 2,RATTATA db 2,NIDORAN_M db 3,SPEAROW db 5,SPEAROW db 3,NIDORAN_F db 4,NIDORAN_F db $00 ForestMons: ; d121 (3:5121) db $08 db 4,CATERPIE db 5,METAPOD db 3,CATERPIE db 5,CATERPIE db 4,METAPOD db 6,METAPOD db 4,KAKUNA db 3,WEEDLE db 3,PIKACHU db 5,PIKACHU db $00 Route3Mons: ; d137 (3:5137) db $14 db 6,PIDGEY db 5,SPEAROW db 7,PIDGEY db 6,SPEAROW db 7,SPEAROW db 8,PIDGEY db 8,SPEAROW db 3,JIGGLYPUFF db 5,JIGGLYPUFF db 7,JIGGLYPUFF db $00 MoonMons1: ; d14d (3:514d) db $0A db 8,ZUBAT db 7,ZUBAT db 9,ZUBAT db 8,GEODUDE db 6,ZUBAT db 10,ZUBAT db 10,GEODUDE db 8,PARAS db 11,ZUBAT db 8,CLEFAIRY db $00 MoonMonsB1: ; d163 (3:5163) db $0A db 8,ZUBAT db 7,ZUBAT db 7,GEODUDE db 8,GEODUDE db 9,ZUBAT db 10,PARAS db 10,ZUBAT db 11,ZUBAT db 9,CLEFAIRY db 9,GEODUDE db $00 MoonMonsB2: ; d179 (3:5179) db $0A db 9,ZUBAT db 9,GEODUDE db 10,ZUBAT db 10,GEODUDE db 11,ZUBAT db 10,PARAS db 12,PARAS db 10,CLEFAIRY db 12,ZUBAT db 12,CLEFAIRY db $00 Route4Mons: ; d18f (3:518f) db $14 db 10,RATTATA db 10,SPEAROW db 8,RATTATA db 6,SANDSHREW db 8,SPEAROW db 10,SANDSHREW db 12,RATTATA db 12,SPEAROW db 8,SANDSHREW db 12,SANDSHREW db $00 Route24Mons: ; d1a5 (3:51a5) db $19 db 7,CATERPIE db 8,METAPOD db 12,PIDGEY db 12,ODDISH db 13,ODDISH db 10,ABRA db 14,ODDISH db 13,PIDGEY db 8,ABRA db 12,ABRA db $00 Route25Mons: ; d1bb (3:51bb) db $0F db 8,CATERPIE db 9,METAPOD db 13,PIDGEY db 12,ODDISH db 13,ODDISH db 12,ABRA db 14,ODDISH db 10,ABRA db 7,KAKUNA db 8,WEEDLE db $00 Route9Mons: ; d1d1 (3:51d1) db $0F db 16,RATTATA db 16,SPEAROW db 14,RATTATA db 11,SANDSHREW db 13,SPEAROW db 15,SANDSHREW db 17,RATTATA db 17,SPEAROW db 13,SANDSHREW db 17,SANDSHREW db $00 Route5Mons: ; d1e7 (3:51e7) db $0F db 13,ODDISH db 13,PIDGEY db 15,PIDGEY db 10,MEOWTH db 12,MEOWTH db 15,ODDISH db 16,ODDISH db 16,PIDGEY db 14,MEOWTH db 16,MEOWTH db $00 Route6Mons: ; d1fd (3:51fd) db $0F db 13,ODDISH db 13,PIDGEY db 15,PIDGEY db 10,MEOWTH db 12,MEOWTH db 15,ODDISH db 16,ODDISH db 16,PIDGEY db 14,MEOWTH db 16,MEOWTH db $00 Route11Mons: ; d213 (3:5213) db $0F db 14,SANDSHREW db 15,SPEAROW db 12,SANDSHREW db 9,DROWZEE db 13,SPEAROW db 13,DROWZEE db 15,SANDSHREW db 17,SPEAROW db 11,DROWZEE db 15,DROWZEE db $00 TunnelMonsB1: ; d229 (3:5229) db $0F db 16,ZUBAT db 17,ZUBAT db 17,GEODUDE db 15,MACHOP db 16,GEODUDE db 18,DITTO db 15,ZUBAT db 17,MACHOP db 13,ONIX db 15,ONIX db $00 TunnelMonsB2: ; d23f (3:523f) db $0F db 16,ZUBAT db 17,ZUBAT db 17,GEODUDE db 15,MACHOP db 16,GEODUDE db 18,DITTO db 17,MACHOP db 17,ONIX db 13,ONIX db 18,GEODUDE db $00 Route10Mons: ; d255 (3:5255) db $0F db 16,VOLTORB db 16,SPEAROW db 14,VOLTORB db 11,SANDSHREW db 13,SPEAROW db 15,SANDSHREW db 17,VOLTORB db 17,SPEAROW db 13,SANDSHREW db 17,SANDSHREW db $00 Route12Mons: ; d26b (3:526b) db $0F db 24,ODDISH db 25,PIDGEY db 23,PIDGEY db 24,VENONAT db 22,ODDISH db 26,VENONAT db 26,ODDISH db 27,PIDGEY db 28,GLOOM db 30,GLOOM db $00 Route8Mons: ; d281 (3:5281) db $0F db 18,PIDGEY db 18,MEOWTH db 17,SANDSHREW db 16,GROWLITHE db 20,PIDGEY db 20,MEOWTH db 19,SANDSHREW db 17,GROWLITHE db 15,GROWLITHE db 18,GROWLITHE db $00 Route7Mons: ; d297 (3:5297) db $0F db 19,PIDGEY db 19,ODDISH db 17,MEOWTH db 22,ODDISH db 22,PIDGEY db 18,MEOWTH db 18,GROWLITHE db 20,GROWLITHE db 19,MEOWTH db 20,MEOWTH db $00 TowerMons1: ; d2ad (3:52ad) db $00 db $00 TowerMons2: ; d2af (3:52af) db $00 db $00 TowerMons3: ; d2b1 (3:52b1) db $0A db 20,GASTLY db 21,GASTLY db 22,GASTLY db 23,GASTLY db 19,GASTLY db 18,GASTLY db 24,GASTLY db 20,CUBONE db 22,CUBONE db 25,HAUNTER db $00 TowerMons4: ; d2c7 (3:52c7) db $0A db 20,GASTLY db 21,GASTLY db 22,GASTLY db 23,GASTLY db 19,GASTLY db 18,GASTLY db 25,HAUNTER db 20,CUBONE db 22,CUBONE db 24,GASTLY db $00 TowerMons5: ; d2dd (3:52dd) db $0A db 20,GASTLY db 21,GASTLY db 22,GASTLY db 23,GASTLY db 19,GASTLY db 18,GASTLY db 25,HAUNTER db 20,CUBONE db 22,CUBONE db 24,GASTLY db $00 TowerMons6: ; d2f3 (3:52f3) db $0F db 21,GASTLY db 22,GASTLY db 23,GASTLY db 24,GASTLY db 20,GASTLY db 19,GASTLY db 26,HAUNTER db 22,CUBONE db 24,CUBONE db 28,HAUNTER db $00 TowerMons7: ; d309 (3:5309) db $0F db 21,GASTLY db 22,GASTLY db 23,GASTLY db 24,GASTLY db 20,GASTLY db 28,HAUNTER db 22,CUBONE db 24,CUBONE db 28,HAUNTER db 30,HAUNTER db $00 Route13Mons: ; d31f (3:531f) db $14 db 24,ODDISH db 25,PIDGEY db 27,PIDGEY db 24,VENONAT db 22,ODDISH db 26,VENONAT db 26,ODDISH db 25,DITTO db 28,GLOOM db 30,GLOOM db $00 Route14Mons: ; d335 (3:5335) db $0F db 24,ODDISH db 26,PIDGEY db 23,DITTO db 24,VENONAT db 22,ODDISH db 26,VENONAT db 26,ODDISH db 30,GLOOM db 28,PIDGEOTTO db 30,PIDGEOTTO db $00 Route15Mons: ; d34b (3:534b) db $0F db 24,ODDISH db 26,DITTO db 23,PIDGEY db 26,VENONAT db 22,ODDISH db 28,VENONAT db 26,ODDISH db 30,GLOOM db 28,PIDGEOTTO db 30,PIDGEOTTO db $00 Route16Mons: ; d361 (3:5361) db $19 db 20,SPEAROW db 22,SPEAROW db 18,RATTATA db 20,DODUO db 20,RATTATA db 18,DODUO db 22,DODUO db 22,RATTATA db 23,RATICATE db 25,RATICATE db $00 Route17Mons: ; d377 (3:5377) db $19 db 20,SPEAROW db 22,SPEAROW db 25,RATICATE db 24,DODUO db 27,RATICATE db 26,DODUO db 28,DODUO db 29,RATICATE db 25,FEAROW db 27,FEAROW db $00 Route18Mons: ; d38d (3:538d) db $19 db 20,SPEAROW db 22,SPEAROW db 25,RATICATE db 24,DODUO db 25,FEAROW db 26,DODUO db 28,DODUO db 29,RATICATE db 27,FEAROW db 29,FEAROW db $00 ZoneMonsCenter: ; d3a3 (3:53a3) db $1E db 22,NIDORAN_M db 25,RHYHORN db 22,VENONAT db 24,EXEGGCUTE db 31,NIDORINO db 25,EXEGGCUTE db 31,NIDORINA db 30,PARASECT db 23,SCYTHER db 23,CHANSEY db $00 ZoneMons1: ; d3b9 (3:53b9) db $1E db 24,NIDORAN_M db 26,DODUO db 22,PARAS db 25,EXEGGCUTE db 33,NIDORINO db 23,EXEGGCUTE db 24,NIDORAN_F db 25,PARASECT db 25,LICKITUNG db 28,SCYTHER db $00 ZoneMons2: ; d3cf (3:53cf) db $1E db 22,NIDORAN_M db 26,RHYHORN db 23,PARAS db 25,EXEGGCUTE db 30,NIDORINO db 27,EXEGGCUTE db 30,NIDORINA db 32,VENOMOTH db 26,CHANSEY db 28,PINSIR db $00 ZoneMons3: ; d3e5 (3:53e5) db $1E db 25,NIDORAN_M db 26,DODUO db 23,VENONAT db 24,EXEGGCUTE db 33,NIDORINO db 26,EXEGGCUTE db 25,NIDORAN_F db 31,VENOMOTH db 26,PINSIR db 28,LICKITUNG db $00 WaterMons: ; d3fb (3:53fb) db $00 db $05 db 5,TENTACOOL db 10,TENTACOOL db 15,TENTACOOL db 5,TENTACOOL db 10,TENTACOOL db 15,TENTACOOL db 20,TENTACOOL db 30,TENTACOOL db 35,TENTACOOL db 40,TENTACOOL WaterMons: ; d3fb (3:53fb) db $00 db $05 db 5,TENTACOOL db 10,TENTACOOL db 15,TENTACOOL db 5,TENTACOOL db 10,TENTACOOL db 15,TENTACOOL db 20,TENTACOOL db 30,TENTACOOL db 35,TENTACOOL db 40,TENTACOOL IslandMons1: ; d411 (3:5411) db $0F db 30,SEEL db 30,HORSEA db 30,STARYU db 30,KRABBY db 28,KRABBY db 21,ZUBAT db 29,GOLBAT db 28,SLOWPOKE db 28,STARYU db 38,SLOWBRO db $00 IslandMonsB1: ; d427 (3:5427) db $0A db 30,SHELLDER db 30,KRABBY db 32,STARYU db 32,KRABBY db 28,HORSEA db 30,SEEL db 30,HORSEA db 28,SEEL db 38,DEWGONG db 37,KINGLER db $00 IslandMonsB2: ; d43d (3:543d) db $0A db 30,SEEL db 30,HORSEA db 32,SEEL db 32,HORSEA db 28,KRABBY db 30,SHELLDER db 30,KRABBY db 28,STARYU db 30,GOLBAT db 37,JYNX db $00 IslandMonsB3: ; d453 (3:5453) db $0A db 31,HORSEA db 31,SEEL db 33,HORSEA db 33,SEEL db 29,KRABBY db 31,STARYU db 31,KRABBY db 29,STARYU db 39,KINGLER db 37,DEWGONG db $00 IslandMonsB4: ; d469 (3:5469) db $0A db 31,KRABBY db 31,STARYU db 33,KRABBY db 33,STARYU db 29,HORSEA db 31,SEEL db 31,HORSEA db 29,SEEL db 39,JYNX db 32,GOLBAT db $00 MansionMons1: ; d47f (3:547f) db $0A db 32,GRIMER db 30,GRIMER db 34,PONYTA db 30,PONYTA db 34,GROWLITHE db 32,PONYTA db 30,KOFFING db 28,PONYTA db 37,MUK db 39,WEEZING db $00 MansionMons2: ; d495 (3:5495) db $0A db 32,GROWLITHE db 34,GRIMER db 34,GRIMER db 30,PONYTA db 30,GRIMER db 32,PONYTA db 30,KOFFING db 28,PONYTA db 39,MUK db 37,WEEZING db $00 MansionMons3: ; d4ab (3:54ab) db $0A db 31,GRIMER db 33,GROWLITHE db 35,GRIMER db 32,PONYTA db 34,PONYTA db 40,MUK db 34,KOFFING db 38,MUK db 36,PONYTA db 42,WEEZING db $00 MansionMonsB1: ; d4c1 (3:54c1) db $0A db 33,GRIMER db 31,GRIMER db 35,GROWLITHE db 32,PONYTA db 31,GRIMER db 40,MUK db 34,PONYTA db 35,KOFFING db 38,MUK db 42,WEEZING db $00 Route21Mons: ; d4d7 (3:54d7) db $19 db 21,RATTATA db 23,PIDGEY db 30,RATICATE db 23,RATTATA db 21,PIDGEY db 30,PIDGEOTTO db 32,PIDGEOTTO db 28,TANGELA db 30,TANGELA db 32,TANGELA db $05 db 5,TENTACOOL db 10,TENTACOOL db 15,TENTACOOL db 5,TENTACOOL db 10,TENTACOOL db 15,TENTACOOL db 20,TENTACOOL db 30,TENTACOOL db 35,TENTACOOL db 40,TENTACOOL DungeonMons1: ; d501 (3:5501) db $0A db 46,GOLBAT db 46,HYPNO db 46,MAGNETON db 49,RAPIDASH db 49,VENOMOTH db 52,SANDSLASH db 49,KADABRA db 52,PARASECT db 53,RAICHU db 53,DITTO db $00 DungeonMons2: ; d517 (3:5517) db $0F db 51,DODRIO db 51,VENOMOTH db 51,KADABRA db 52,RHYDON db 52,RATICATE db 52,ELECTRODE db 56,CHANSEY db 54,WIGGLYTUFF db 55,DITTO db 60,DITTO db $00 DungeonMonsB1: ; d52d (3:552d) db $19 db 55,RHYDON db 55,MAROWAK db 55,ELECTRODE db 64,CLEFAIRY db 64,PARASECT db 64,RAICHU db 57,SANDSLASH db 65,DITTO db 63,DITTO db 67,DITTO db $00 PowerPlantMons: ; d543 (3:5543) db $0A db 21,VOLTORB db 21,MAGNEMITE db 20,PIKACHU db 24,PIKACHU db 23,MAGNEMITE db 23,VOLTORB db 32,MAGNETON db 35,MAGNETON db 33,RAICHU db 36,RAICHU db $00 Route23Mons: ; d559 (3:5559) db $0A db 26,SANDSHREW db 33,DITTO db 26,SPEAROW db 38,FEAROW db 38,DITTO db 38,FEAROW db 41,SANDSLASH db 43,DITTO db 41,FEAROW db 43,FEAROW db $00 PlateauMons2: ; d56f (3:556f) db $0A db 22,MACHOP db 24,GEODUDE db 26,ZUBAT db 36,ONIX db 39,ONIX db 42,ONIX db 41,MACHOKE db 40,GOLBAT db 40,MAROWAK db 43,GRAVELER db $00 PlateauMons3: ; d585 (3:5585) db $0F db 24,MACHOP db 26,GEODUDE db 22,ZUBAT db 42,ONIX db 40,VENOMOTH db 45,ONIX db 43,GRAVELER db 41,GOLBAT db 42,MACHOKE db 45,MACHOKE db $00 PlateauMons1: ; d59b (3:559b) db $0F db 24,MACHOP db 26,GEODUDE db 22,ZUBAT db 36,ONIX db 39,ONIX db 42,ONIX db 41,GRAVELER db 41,GOLBAT db 42,MACHOKE db 43,MAROWAK db $00 CaveMons: ; d5b1 (3:55b1) db $14 db 18,DIGLETT db 19,DIGLETT db 17,DIGLETT db 20,DIGLETT db 16,DIGLETT db 15,DIGLETT db 21,DIGLETT db 22,DIGLETT db 29,DUGTRIO db 31,DUGTRIO db $00 ENDC IF _YELLOW NoMons: ; d0dd (3:50dd) db $00 db $00 Route1Mons: ; d0df (3:50df) db $19 db 3,PIDGEY db 4,PIDGEY db 2,RATTATA db 3,RATTATA db 2,PIDGEY db 3,PIDGEY db 5,PIDGEY db 4,RATTATA db 6,PIDGEY db 7,PIDGEY db $00 Route2Mons: ; d0f5 (3:50f5) db $19 db 3,RATTATA db 3,PIDGEY db 4,RATTATA db 4,NIDORAN_M db 4,NIDORAN_F db 5,PIDGEY db 6,NIDORAN_M db 6,NIDORAN_F db 7,PIDGEY db 7,PIDGEY db $00 Route22Mons: ; d10b (3:510b) db $19 db 2,NIDORAN_M db 2,NIDORAN_F db 3,MANKEY db 3,RATTATA db 4,NIDORAN_M db 4,NIDORAN_F db 5,MANKEY db 2,SPEAROW db 4,SPEAROW db 6,SPEAROW db $00 ForestMons: ; d121 (3:5121) db $19 db 3,CATERPIE db 4,METAPOD db 4,CATERPIE db 5,CATERPIE db 4,PIDGEY db 6,PIDGEY db 6,CATERPIE db 6,METAPOD db 8,PIDGEY db 9,PIDGEOTTO db $00 Route3Mons: ; d137 (3:5137) db $14 db 8,SPEAROW db 9,SPEAROW db 9,MANKEY db 10,SPEAROW db 8,SANDSHREW db 10,RATTATA db 10,SANDSHREW db 12,RATTATA db 11,SPEAROW db 12,SPEAROW db $00 MoonMons1: ; d14d (3:514d) db $0A db 8,ZUBAT db 9,ZUBAT db 10,GEODUDE db 6,ZUBAT db 7,ZUBAT db 10,ZUBAT db 10,GEODUDE db 11,ZUBAT db 12,SANDSHREW db 11,CLEFAIRY db $00 MoonMonsB1: ; d163 (3:5163) db $0A db 8,ZUBAT db 9,ZUBAT db 10,ZUBAT db 10,GEODUDE db 11,GEODUDE db 11,ZUBAT db 9,PARAS db 11,PARAS db 10,CLEFAIRY db 12,CLEFAIRY db $00 MoonMonsB2: ; d179 (3:5179) db $0A db 10,ZUBAT db 11,GEODUDE db 13,PARAS db 11,ZUBAT db 11,ZUBAT db 12,ZUBAT db 13,ZUBAT db 9,CLEFAIRY db 11,CLEFAIRY db 13,CLEFAIRY db $00 Route4Mons: ; d18f (3:518f) db $14 db 8,SPEAROW db 9,SPEAROW db 9,MANKEY db 10,SPEAROW db 8,SANDSHREW db 10,RATTATA db 10,SANDSHREW db 12,RATTATA db 11,SPEAROW db 12,SPEAROW db $00 Route24Mons: ; d1a5 (3:51a5) db $19 db 12,ODDISH db 12,BELLSPROUT db 13,PIDGEY db 14,ODDISH db 14,BELLSPROUT db 15,PIDGEY db 13,VENONAT db 16,VENONAT db 17,PIDGEY db 17,PIDGEOTTO db $00 Route25Mons: ; d1bb (3:51bb) db $0F db 12,ODDISH db 12,BELLSPROUT db 13,PIDGEY db 14,ODDISH db 14,BELLSPROUT db 15,PIDGEY db 13,VENONAT db 16,VENONAT db 17,PIDGEY db 17,PIDGEOTTO db $00 Route9Mons: ; d1d1 (3:51d1) db $0F db 16,NIDORAN_M db 16,NIDORAN_F db 18,RATTATA db 18,NIDORAN_M db 18,NIDORAN_F db 17,SPEAROW db 18,NIDORINO db 18,NIDORINA db 20,RATICATE db 19,FEAROW db $00 Route5Mons: ; d1e7 (3:51e7) db $0F db 15,PIDGEY db 14,RATTATA db 7,ABRA db 16,PIDGEY db 16,RATTATA db 17,PIDGEY db 17,PIDGEOTTO db 3,JIGGLYPUFF db 5,JIGGLYPUFF db 7,JIGGLYPUFF db $00 Route6Mons: ; d1fd (3:51fd) db $0F db 15,PIDGEY db 14,RATTATA db 7,ABRA db 16,PIDGEY db 16,RATTATA db 17,PIDGEY db 17,PIDGEOTTO db 3,JIGGLYPUFF db 5,JIGGLYPUFF db 7,JIGGLYPUFF db $03 db 15,PSYDUCK db 15,PSYDUCK db 15,PSYDUCK db 15,PSYDUCK db 15,PSYDUCK db 15,PSYDUCK db 15,PSYDUCK db 15,PSYDUCK db 15,GOLDUCK db 20,GOLDUCK Route11Mons: ; d213 (3:5213) db $0F db 16,PIDGEY db 15,RATTATA db 18,PIDGEY db 15,DROWZEE db 17,RATTATA db 17,DROWZEE db 18,PIDGEOTTO db 20,PIDGEOTTO db 19,DROWZEE db 17,RATICATE db $00 TunnelMonsB1: ; d229 (3:5229) db $0F db 15,ZUBAT db 16,GEODUDE db 17,ZUBAT db 19,ZUBAT db 18,GEODUDE db 20,GEODUDE db 21,ZUBAT db 17,MACHOP db 19,MACHOP db 21,MACHOP db $00 TunnelMonsB2: ; d23f (3:523f) db $0F db 20,ZUBAT db 17,GEODUDE db 18,MACHOP db 21,ZUBAT db 22,ZUBAT db 21,GEODUDE db 20,MACHOP db 14,ONIX db 18,ONIX db 22,ONIX db $00 Route10Mons: ; d255 (3:5255) db $0F db 16,MAGNEMITE db 18,RATTATA db 18,MAGNEMITE db 20,MAGNEMITE db 17,NIDORAN_M db 17,NIDORAN_F db 22,MAGNEMITE db 20,RATICATE db 16,MACHOP db 18,MACHOP db $00 Route12Mons: ; d26b (3:526b) db $0F db 25,ODDISH db 25,BELLSPROUT db 28,PIDGEY db 28,PIDGEOTTO db 27,ODDISH db 27,BELLSPROUT db 29,GLOOM db 29,WEEPINBELL db 26,FARFETCH_D db 31,FARFETCH_D db $03 db 15,SLOWPOKE db 15,SLOWPOKE db 15,SLOWPOKE db 15,SLOWPOKE db 15,SLOWPOKE db 15,SLOWPOKE db 15,SLOWPOKE db 15,SLOWPOKE db 15,SLOWBRO db 20,SLOWBRO Route8Mons: ; d281 (3:5281) db $0F db 20,PIDGEY db 22,PIDGEY db 20,RATTATA db 15,ABRA db 19,ABRA db 24,PIDGEOTTO db 19,JIGGLYPUFF db 24,JIGGLYPUFF db 20,KADABRA db 27,KADABRA db $00 Route7Mons: ; d297 (3:5297) db $0F db 20,PIDGEY db 22,PIDGEY db 20,RATTATA db 15,ABRA db 19,ABRA db 24,PIDGEOTTO db 26,ABRA db 19,JIGGLYPUFF db 24,JIGGLYPUFF db 24,JIGGLYPUFF db $00 TowerMons1: ; d2ad (3:52ad) db $00 db $00 TowerMons2: ; d2af (3:52af) db $00 db $00 TowerMons3: ; d2b1 (3:52b1) db $0A db 20,GASTLY db 21,GASTLY db 22,GASTLY db 23,GASTLY db 24,GASTLY db 19,GASTLY db 18,GASTLY db 25,GASTLY db 20,HAUNTER db 25,HAUNTER db $00 TowerMons4: ; d2c7 (3:52c7) db $0A db 20,GASTLY db 21,GASTLY db 22,GASTLY db 23,GASTLY db 24,GASTLY db 19,GASTLY db 18,GASTLY db 25,GASTLY db 20,HAUNTER db 25,HAUNTER db $00 TowerMons5: ; d2dd (3:52dd) db $0F db 22,GASTLY db 23,GASTLY db 24,GASTLY db 25,GASTLY db 26,GASTLY db 21,GASTLY db 20,CUBONE db 27,GASTLY db 22,HAUNTER db 27,HAUNTER db $00 TowerMons6: ; d2f3 (3:52f3) db $0F db 22,GASTLY db 23,GASTLY db 24,GASTLY db 25,GASTLY db 26,GASTLY db 21,GASTLY db 22,CUBONE db 27,GASTLY db 22,HAUNTER db 27,HAUNTER db $00 TowerMons7: ; d309 (3:5309) db $14 db 24,GASTLY db 25,GASTLY db 26,GASTLY db 27,GASTLY db 28,GASTLY db 23,GASTLY db 24,CUBONE db 29,GASTLY db 24,HAUNTER db 29,HAUNTER db $00 Route13Mons: ; d31f (3:531f) db $0F db 25,ODDISH db 25,BELLSPROUT db 28,PIDGEOTTO db 28,PIDGEY db 27,ODDISH db 27,BELLSPROUT db 29,GLOOM db 29,WEEPINBELL db 26,FARFETCH_D db 31,FARFETCH_D db $03 db 15,SLOWPOKE db 15,SLOWPOKE db 15,SLOWPOKE db 15,SLOWPOKE db 15,SLOWPOKE db 15,SLOWPOKE db 15,SLOWPOKE db 15,SLOWPOKE db 15,SLOWBRO db 20,SLOWBRO Route14Mons: ; d335 (3:5335) db $0F db 26,ODDISH db 26,BELLSPROUT db 24,VENONAT db 30,PIDGEOTTO db 28,ODDISH db 28,BELLSPROUT db 30,GLOOM db 30,WEEPINBELL db 27,VENONAT db 30,VENOMOTH db $00 Route15Mons: ; d34b (3:534b) db $0F db 26,ODDISH db 26,BELLSPROUT db 24,VENONAT db 32,PIDGEOTTO db 28,ODDISH db 28,BELLSPROUT db 30,GLOOM db 30,WEEPINBELL db 27,VENONAT db 30,VENOMOTH db $00 Route16Mons: ; d361 (3:5361) db $19 db 22,SPEAROW db 22,DODUO db 23,RATTATA db 24,DODUO db 24,RATTATA db 26,DODUO db 23,SPEAROW db 24,FEAROW db 25,RATICATE db 26,RATICATE db $00 Route17Mons: ; d377 (3:5377) db $19 db 26,DODUO db 27,FEAROW db 27,DODUO db 28,DODUO db 28,PONYTA db 30,PONYTA db 29,FEAROW db 28,DODUO db 32,PONYTA db 29,DODRIO db $00 Route18Mons: ; d38d (3:538d) db $19 db 22,SPEAROW db 22,DODUO db 23,RATTATA db 24,DODUO db 24,RATTATA db 26,DODUO db 23,SPEAROW db 24,FEAROW db 25,RATICATE db 26,RATICATE db $00 ZoneMonsCenter: ; d3a3 (3:53a3) db $1E db 14,NIDORAN_M db 36,NIDORAN_F db 24,EXEGGCUTE db 20,RHYHORN db 23,NIDORINO db 27,PARASECT db 27,PARAS db 32,PARASECT db 22,TANGELA db 7,CHANSEY db $00 ZoneMons1: ; d3b9 (3:53b9) db $1E db 21,NIDORAN_M db 29,NIDORAN_F db 22,EXEGGCUTE db 21,TAUROS db 32,NIDORINA db 19,CUBONE db 26,EXEGGCUTE db 24,MAROWAK db 21,CHANSEY db 15,SCYTHER db $00 ZoneMons2: ; d3cf (3:53cf) db $1E db 36,NIDORAN_M db 14,NIDORAN_F db 20,EXEGGCUTE db 25,RHYHORN db 23,NIDORINA db 28,KANGASKHAN db 16,CUBONE db 33,KANGASKHAN db 25,SCYTHER db 15,PINSIR db $00 ZoneMons3: ; d3e5 (3:53e5) db $1E db 29,NIDORAN_M db 21,NIDORAN_F db 22,EXEGGCUTE db 21,TAUROS db 32,NIDORINO db 19,CUBONE db 26,EXEGGCUTE db 24,MAROWAK db 25,PINSIR db 27,TANGELA db $00 WaterMons: ; d3fb (3:53fb) db $00 db $05 db 5,TENTACOOL db 10,TENTACOOL db 15,TENTACOOL db 5,TENTACOOL db 10,TENTACOOL db 15,TENTACOOL db 20,TENTACOOL db 30,TENTACOOL db 35,TENTACOOL db 40,TENTACOOL WaterMons: ; d3fb (3:53fb) db $00 db $05 db 5,TENTACOOL db 10,TENTACOOL db 15,TENTACOOL db 5,TENTACOOL db 10,TENTACOOL db 15,TENTACOOL db 20,TENTACOOL db 30,TENTACOOL db 35,TENTACOOL db 40,TENTACOOL IslandMons1: ; d411 (3:5411) db $0F db 18,ZUBAT db 25,KRABBY db 27,KRABBY db 27,ZUBAT db 36,ZUBAT db 28,SLOWPOKE db 30,SLOWPOKE db 9,ZUBAT db 27,GOLBAT db 36,GOLBAT db $00 IslandMonsB1: ; d427 (3:5427) db $0A db 27,ZUBAT db 26,KRABBY db 36,ZUBAT db 28,KRABBY db 27,GOLBAT db 29,SLOWPOKE db 18,ZUBAT db 28,KINGLER db 22,SEEL db 26,SEEL db $00 IslandMonsB2: ; d43d (3:543d) db $0A db 27,ZUBAT db 27,KRABBY db 36,ZUBAT db 27,GOLBAT db 28,KINGLER db 24,SEEL db 29,KRABBY db 36,GOLBAT db 31,SLOWPOKE db 31,SLOWBRO db $00 IslandMonsB3: ; d453 (3:5453) db $0A db 27,GOLBAT db 36,ZUBAT db 29,KRABBY db 27,ZUBAT db 30,KINGLER db 26,SEEL db 31,KRABBY db 30,SEEL db 28,DEWGONG db 32,DEWGONG db $05 db 25,TENTACOOL db 30,TENTACOOL db 20,TENTACOOL db 30,STARYU db 35,TENTACOOL db 30,STARYU db 40,TENTACOOL db 30,STARYU db 30,STARYU db 30,STARYU IslandMonsB4: ; d469 (3:5469) db $0A db 36,GOLBAT db 36,ZUBAT db 30,KRABBY db 32,KINGLER db 28,SEEL db 32,SEEL db 27,GOLBAT db 45,ZUBAT db 30,DEWGONG db 34,DEWGONG db $05 db 25,TENTACOOL db 30,TENTACOOL db 20,TENTACOOL db 30,STARYU db 35,TENTACOOL db 30,STARYU db 40,TENTACOOL db 30,STARYU db 30,STARYU db 30,STARYU MansionMons1: ; d47f (3:547f) db $0A db 34,RATTATA db 34,RATICATE db 23,GRIMER db 26,GROWLITHE db 37,RATTATA db 37,RATICATE db 30,GROWLITHE db 26,GRIMER db 34,GROWLITHE db 38,GROWLITHE db $00 MansionMons2: ; d495 (3:5495) db $0A db 37,RATTATA db 37,RATICATE db 26,GRIMER db 29,GRIMER db 40,RATTATA db 40,RATICATE db 32,GRIMER db 35,GRIMER db 35,MUK db 38,MUK db $00 MansionMons3: ; d4ab (3:54ab) db $0A db 40,RATTATA db 40,RATICATE db 32,GRIMER db 35,GRIMER db 43,RATTATA db 43,RATICATE db 38,GRIMER db 38,GRIMER db 38,MUK db 41,MUK db $00 MansionMonsB1: ; d4c1 (3:54c1) db $0A db 35,GRIMER db 38,GRIMER db 37,RATICATE db 40,RATICATE db 41,MUK db 43,RATICATE db 24,DITTO db 46,RATICATE db 18,DITTO db 12,DITTO db $00 Route21Mons: ; d4d7 (3:54d7) db $19 db 15,PIDGEY db 13,RATTATA db 13,PIDGEY db 11,PIDGEY db 17,PIDGEY db 15,RATTATA db 15,RATICATE db 17,PIDGEOTTO db 19,PIDGEOTTO db 15,PIDGEOTTO db $05 db 5,TENTACOOL db 10,TENTACOOL db 15,TENTACOOL db 5,TENTACOOL db 10,TENTACOOL db 15,TENTACOOL db 20,TENTACOOL db 30,TENTACOOL db 35,TENTACOOL db 40,TENTACOOL DungeonMons1: ; d501 (3:5501) db $0A db 50,GOLBAT db 55,GOLBAT db 45,GRAVELER db 55,GLOOM db 55,WEEPINBELL db 52,SANDSLASH db 54,VENOMOTH db 54,PARASECT db 55,DITTO db 60,DITTO db $00 DungeonMons2: ; d517 (3:5517) db $0F db 52,GOLBAT db 57,GOLBAT db 50,GRAVELER db 56,SANDSLASH db 50,RHYHORN db 60,DITTO db 58,GLOOM db 58,WEEPINBELL db 60,RHYDON db 58,RHYDON db $00 DungeonMonsB1: ; d52d (3:552d) db $19 db 54,GOLBAT db 59,GOLBAT db 55,GRAVELER db 52,RHYHORN db 62,RHYDON db 60,DITTO db 56,CHANSEY db 65,DITTO db 55,LICKITUNG db 50,LICKITUNG db $00 PowerPlantMons: ; d543 (3:5543) db $0A db 30,MAGNEMITE db 35,MAGNEMITE db 33,MAGNETON db 33,VOLTORB db 37,VOLTORB db 33,GRIMER db 37,GRIMER db 38,MAGNETON db 33,MUK db 37,MUK db $00 Route23Mons: ; d559 (3:5559) db $0A db 41,NIDORINO db 41,NIDORINA db 36,MANKEY db 44,NIDORINO db 44,NIDORINA db 40,FEAROW db 41,MANKEY db 45,FEAROW db 41,PRIMEAPE db 46,PRIMEAPE db $00 PlateauMons2: ; d56f (3:556f) db $0A db 31,GEODUDE db 36,GEODUDE db 41,GEODUDE db 44,ZUBAT db 39,GOLBAT db 44,GRAVELER db 45,ONIX db 47,ONIX db 39,MACHOKE db 42,MACHOKE db $00 PlateauMons3: ; d585 (3:5585) db $0F db 36,GEODUDE db 44,GOLBAT db 41,GEODUDE db 49,ONIX db 46,GEODUDE db 41,GRAVELER db 42,MACHOKE db 45,MACHOKE db 47,GRAVELER db 47,GRAVELER db $00 PlateauMons1: ; d59b (3:559b) db $0F db 26,GEODUDE db 31,GEODUDE db 36,GEODUDE db 39,ZUBAT db 44,ZUBAT db 41,GEODUDE db 43,ONIX db 45,ONIX db 41,GRAVELER db 47,GRAVELER db $00 CaveMons: ; d5b1 (3:55b1) db $14 db 18,DIGLETT db 19,DIGLETT db 17,DIGLETT db 20,DIGLETT db 16,DIGLETT db 15,DIGLETT db 21,DIGLETT db 22,DIGLETT db 29,DUGTRIO db 31,DUGTRIO db $00 ENDC UseItem_: ; d5c7 (3:55c7) ld a,1 ld [$cd6a],a ld a,[$cf91] ;contains item_ID cp a,HM_01 jp nc,ItemUseTMHM ld hl,ItemUsePtrTable dec a add a ld c,a ld b,0 add hl,bc ld a,[hli] ld h,[hl] ld l,a jp [hl] ItemUsePtrTable: ; d5e1 (3:55e1) dw ItemUseBall ; MASTER_BALL dw ItemUseBall ; ULTRA_BALL dw ItemUseBall ; GREAT_BALL dw ItemUseBall ; POKE_BALL dw ItemUseTownMap ; TOWN_MAP dw ItemUseBicycle ; BICYCLE dw ItemUseSurfboard ; out-of-battle Surf effect dw ItemUseBall ; SAFARI_BALL dw ItemUsePokedex ; POKEDEX dw ItemUseEvoStone ; MOON_STONE dw ItemUseMedicine ; ANTIDOTE dw ItemUseMedicine ; BURN_HEAL dw ItemUseMedicine ; ICE_HEAL dw ItemUseMedicine ; AWAKENING dw ItemUseMedicine ; PARLYZ_HEAL dw ItemUseMedicine ; FULL_RESTORE dw ItemUseMedicine ; MAX_POTION dw ItemUseMedicine ; HYPER_POTION dw ItemUseMedicine ; SUPER_POTION dw ItemUseMedicine ; POTION dw ItemUseBait ; BOULDERBADGE dw ItemUseRock ; CASCADEBADGE dw UnusableItem ; THUNDERBADGE dw UnusableItem ; RAINBOWBADGE dw UnusableItem ; SOULBADGE dw UnusableItem ; MARSHBADGE dw UnusableItem ; VOLCANOBADGE dw UnusableItem ; EARTHBADGE dw ItemUseEscapeRope ; ESCAPE_ROPE dw ItemUseRepel ; REPEL dw UnusableItem ; OLD_AMBER dw ItemUseEvoStone ; FIRE_STONE dw ItemUseEvoStone ; THUNDER_STONE dw ItemUseEvoStone ; WATER_STONE dw ItemUseVitamin ; HP_UP dw ItemUseVitamin ; PROTEIN dw ItemUseVitamin ; IRON dw ItemUseVitamin ; CARBOS dw ItemUseVitamin ; CALCIUM dw ItemUseVitamin ; RARE_CANDY dw UnusableItem ; DOME_FOSSIL dw UnusableItem ; HELIX_FOSSIL dw UnusableItem ; SECRET_KEY dw UnusableItem dw UnusableItem ; BIKE_VOUCHER dw ItemUseXAccuracy ; X_ACCURACY dw ItemUseEvoStone ; LEAF_STONE dw ItemUseCardKey ; CARD_KEY dw UnusableItem ; NUGGET dw UnusableItem ; ??? PP_UP dw ItemUsePokedoll ; POKE_DOLL dw ItemUseMedicine ; FULL_HEAL dw ItemUseMedicine ; REVIVE dw ItemUseMedicine ; MAX_REVIVE dw ItemUseGuardSpec ; GUARD_SPEC_ dw ItemUseSuperRepel ; SUPER_REPL dw ItemUseMaxRepel ; MAX_REPEL dw ItemUseDireHit ; DIRE_HIT dw UnusableItem ; COIN dw ItemUseMedicine ; FRESH_WATER dw ItemUseMedicine ; SODA_POP dw ItemUseMedicine ; LEMONADE dw UnusableItem ; S_S__TICKET dw UnusableItem ; GOLD_TEETH dw ItemUseXStat ; X_ATTACK dw ItemUseXStat ; X_DEFEND dw ItemUseXStat ; X_SPEED dw ItemUseXStat ; X_SPECIAL dw ItemUseCoinCase ; COIN_CASE dw ItemUseOaksParcel ; OAKS_PARCEL dw ItemUseItemfinder ; ITEMFINDER dw UnusableItem ; SILPH_SCOPE dw ItemUsePokeflute ; POKE_FLUTE dw UnusableItem ; LIFT_KEY dw UnusableItem ; EXP__ALL dw OldRodCode ; OLD_ROD dw GoodRodCode ; GOOD_ROD dw SuperRodCode ; SUPER_ROD dw ItemUsePPUp ; PP_UP (real one) dw ItemUsePPRestore ; ETHER dw ItemUsePPRestore ; MAX_ETHER dw ItemUsePPRestore ; ELIXER dw ItemUsePPRestore ; MAX_ELIXER ItemUseBall: ; d687 (3:5687) ld a,[W_ISINBATTLE] and a jp z,ItemUseNotTime ; not in battle dec a jp nz,ThrowBallAtTrainerMon ld a,[W_BATTLETYPE] dec a jr z,.UseBall ld a,[W_NUMINPARTY] ;is Party full? cp a,6 jr nz,.UseBall ld a,[W_NUMINBOX] ;is Box full? cp a,20 jp z,BoxFullCannotThrowBall .UseBall ;$56a7 ;ok, you can use a ball xor a ld [$d11c],a ld a,[W_BATTLETYPE] cp a,2 ;SafariBattle jr nz,.skipSafariZoneCode .safariZone ; remove a Safari Ball from inventory ld hl,W_NUMSAFARIBALLS dec [hl] .skipSafariZoneCode ;$56b6 call GoPAL_SET_CF1C ld a,$43 ld [$d11e],a call LoadScreenTilesFromBuffer1 ;restore screenBuffer from Backup ld hl,ItemUseText00 call PrintText ld hl, Func_3d83a ld b, BANK(Func_3d83a) call Bankswitch ld b,$10 jp z,.next12 ld a,[W_BATTLETYPE] dec a jr nz,.notOldManBattle .oldManBattle ld hl,W_GRASSRATE ld de,W_PLAYERNAME ld bc,11 call CopyData ; save the player's name in the Wild Monster data (part of the Cinnabar Island Missingno glitch) jp .BallSuccess ;$578b .notOldManBattle ;$56e9 ld a,[W_CURMAP] cp a,POKEMONTOWER_6 jr nz,.loop ld a,[W_ENEMYMONID] cp a,MAROWAK ld b,$10 jp z,.next12 ; if not fighting ghost Marowak, loop until a random number in the current ; pokeball's allowed range is found .loop ;$56fa call GenRandom ld b,a ld hl,$cf91 ld a,[hl] cp a,MASTER_BALL jp z,.BallSuccess ;$578b cp a,POKE_BALL jr z,.checkForAilments ld a,200 cp b jr c,.loop ;get only numbers <= 200 for Great Ball ld a,[hl] cp a,GREAT_BALL jr z,.checkForAilments ld a,150 ;get only numbers <= 150 for Ultra Ball cp b jr c,.loop .checkForAilments ;$571a ; pokemon can be caught more easily with any (primary) status ailment ; Frozen/Asleep pokemon are relatively even easier to catch ; for Frozen/Asleep pokemon, any random number from 0-24 ensures a catch. ; for the others, a random number from 0-11 ensures a catch. ld a,[W_ENEMYMONSTATUS] ;status ailments and a jr z,.noAilments and a,(FRZ + SLP) ;is frozen and/or asleep? ld c,12 jr z,.notFrozenOrAsleep ld c,25 .notFrozenOrAsleep ;$5728 ld a,b sub c jp c,.BallSuccess ;$578b ld b,a .noAilments ;$572e push bc ;save RANDOM number xor a ld [H_MULTIPLICAND],a ld hl,W_ENEMYMONMAXHP ld a,[hli] ld [H_MULTIPLICAND + 1],a ld a,[hl] ld [H_MULTIPLICAND + 2],a ld a,255 ld [H_MULTIPLIER],a call Multiply ; MaxHP * 255 ld a,[$cf91] cp a,GREAT_BALL ld a,12 ;any other BallFactor jr nz,.next7 ld a,8 .next7 ;$574d ld [H_DIVISOR],a ld b,4 ; number of bytes in dividend call Divide ld hl,W_ENEMYMONCURHP ld a,[hli] ld b,a ld a,[hl] ; explanation: we have a 16-bit value equal to [b << 8 | a]. ; This number is divided by 4. The result is 8 bit (reg. a). ; Always bigger than zero. srl b rr a srl b rr a ; a = current HP / 4 and a jr nz,.next8 inc a .next8 ;$5766 ld [H_DIVISOR],a ld b,4 call Divide ; ((MaxHP * 255) / BallFactor) / (CurHP / 4) ld a,[H_QUOTIENT + 2] and a jr z,.next9 ld a,255 ld [H_QUOTIENT + 3],a .next9 ;$5776 pop bc ld a,[$d007] ;enemy: Catch Rate cp b jr c,.next10 ld a,[H_QUOTIENT + 2] and a jr nz,.BallSuccess ; if ((MaxHP * 255) / BallFactor) / (CurHP / 4) > 0x255, automatic success call GenRandom ld b,a ld a,[H_QUOTIENT + 3] cp b jr c,.next10 .BallSuccess ;$578b jr .BallSuccess2 .next10 ;$578d ld a,[H_QUOTIENT + 3] ld [$d11e],a xor a ld [H_MULTIPLICAND],a ld [H_MULTIPLICAND + 1],a ld a,[$d007] ;enemy: Catch Rate ld [H_MULTIPLICAND + 2],a ld a,100 ld [H_MULTIPLIER],a call Multiply ; CatchRate * 100 ld a,[$cf91] ld b,255 cp a,POKE_BALL jr z,.next11 ld b,200 cp a,GREAT_BALL jr z,.next11 ld b,150 cp a,ULTRA_BALL jr z,.next11 .next11 ;$57b8 ld a,b ld [H_DIVISOR],a ld b,4 call Divide ld a,[H_QUOTIENT + 2] and a ld b,$63 jr nz,.next12 ld a,[$d11e] ld [H_MULTIPLIER],a call Multiply ld a,255 ld [H_DIVISOR],a ld b,4 call Divide ld a,[W_ENEMYMONSTATUS] ;status ailments and a jr z,.next13 and a,(FRZ + SLP) ld b,5 jr z,.next14 ld b,10 .next14 ;$57e6 ld a,[H_QUOTIENT + 3] add b ld [H_QUOTIENT + 3],a .next13 ;$57eb ld a,[H_QUOTIENT + 3] cp a,10 ld b,$20 jr c,.next12 cp a,30 ld b,$61 jr c,.next12 cp a,70 ld b,$62 jr c,.next12 ld b,$63 .next12 ;$5801 ld a,b ld [$d11e],a .BallSuccess2 ;$5805 ld c,20 call DelayFrames ld a,TOSS_ANIM ld [W_ANIMATIONID],a xor a ld [$fff3],a ld [$cc5b],a ld [$d05b],a ld a,[wWhichPokemon] push af ld a,[$cf91] push af ld a,$08 ;probably animations call Predef pop af ld [$cf91],a pop af ld [wWhichPokemon],a ld a,[$d11e] cp a,$10 ld hl,ItemUseBallText00 jp z,.printText0 cp a,$20 ld hl,ItemUseBallText01 jp z,.printText0 cp a,$61 ld hl,ItemUseBallText02 jp z,.printText0 cp a,$62 ld hl,ItemUseBallText03 jp z,.printText0 cp a,$63 ld hl,ItemUseBallText04 jp z,.printText0 ld hl,$cfe6 ;current HP ld a,[hli] push af ld a,[hli] push af ;backup currentHP... inc hl ld a,[hl] push af ;...and status ailments push hl ld hl,$d069 bit 3,[hl] jr z,.next15 ld a,$4c ld [W_ENEMYMONID],a jr .next16 .next15 ;$5871 set 3,[hl] ld hl,$cceb ld a,[$cff1] ld [hli],a ld a,[$cff2] ld [hl],a .next16 ;$587e ld a,[$cf91] push af ld a,[W_ENEMYMONID] ld [$cf91],a ld a,[$cff3] ld [$d127],a ld hl, Func_3eb01 ld b, BANK(Func_3eb01) call Bankswitch pop af ld [$cf91],a pop hl pop af ld [hld],a dec hl pop af ld [hld],a pop af ld [hl],a ld a,[$cfe5] ;enemy ld [$d11c],a ld [$cf91],a ld [$d11e],a ld a,[W_BATTLETYPE] dec a jr z,.printText1 ld hl,ItemUseBallText05 call PrintText ld a,$3a ;convert order: Internal->Dex call Predef ld a,[$d11e] dec a ld c,a ld b,2 ld hl,$d2f7 ;Dex_own_flags (pokemon) ld a,$10 call Predef ;check Dex flag (own already or not) ld a,c push af ld a,[$d11e] dec a ld c,a ld b,1 ld a,$10 ;set Dex_own_flag? call Predef pop af and a jr nz,.checkParty ld hl,ItemUseBallText06 call PrintText call CleanLCD_OAM ld a,[$cfe5] ;caught mon_ID ld [$d11e],a ld a,$3d call Predef .checkParty ;$58f4 ld a,[W_NUMINPARTY] cp a,6 ;is party full? jr z,.sendToBox xor a ld [$cc49],a call CleanLCD_OAM call AddPokemonToParty ;add mon to Party jr .End .sendToBox ;$5907 call CleanLCD_OAM call Func_e7a4 ld hl,ItemUseBallText07 ld a,[$d7f1] bit 0,a ;already met Bill? jr nz,.sendToBox2 ld hl,ItemUseBallText08 .sendToBox2 ;$591a call PrintText jr .End .printText1 ;$591f ld hl,ItemUseBallText05 .printText0 ;$5922 call PrintText call CleanLCD_OAM .End ;$5928 ld a,[W_BATTLETYPE] and a ret nz ld hl,$d31d inc a ld [$cf96],a jp RemoveItemFromInventory ;remove ITEM (XXX) ItemUseBallText00: ; d937 (3:5937) ;"It dodged the thrown ball!" ;"This pokemon can't be caught" TX_FAR _ItemUseBallText00 db "@" ItemUseBallText01: ; d93c (3:593c) ;"You missed the pokemon!" TX_FAR _ItemUseBallText01 db "@" ItemUseBallText02: ; d941 (3:5941) ;"Darn! The pokemon broke free!" TX_FAR _ItemUseBallText02 db "@" ItemUseBallText03: ; d946 (3:5946) ;"Aww! It appeared to be caught!" TX_FAR _ItemUseBallText03 db "@" ItemUseBallText04: ; d94b (3:594b) ;"Shoot! It was so close too!" TX_FAR _ItemUseBallText04 db "@" ItemUseBallText05: ; d950 (3:5950) ;"All right! {MonName} was caught!" ;play sound TX_FAR _ItemUseBallText05 db $12,$06 db "@" ItemUseBallText07: ; d957 (3:5957) ;"X was transferred to Bill's PC" TX_FAR _ItemUseBallText07 db "@" ItemUseBallText08: ; d95c (3:595c) ;"X was transferred to someone's PC" TX_FAR _ItemUseBallText08 db "@" ItemUseBallText06: ; d961 (3:5961) ;"New DEX data will be added..." ;play sound TX_FAR _ItemUseBallText06 db $13,$06 db "@" ItemUseTownMap: ; d968 (3:5968) ld a,[W_ISINBATTLE] and a jp nz,ItemUseNotTime ld b, BANK(DisplayTownMap) ld hl, DisplayTownMap jp Bankswitch ; display Town Map ItemUseBicycle: ; d977 (3:5977) ld a,[W_ISINBATTLE] and a jp nz,ItemUseNotTime ld a,[$d700] ld [$d11a],a cp a,2 ; is the player surfing? jp z,ItemUseNotTime dec a ; is player already bicycling? jr nz,.tryToGetOnBike .getOffBike call ItemUseReloadOverworldData xor a ld [$d700],a ; change player state to walking call Func_2307 ; play walking music ld hl,GotOffBicycleText jr .printText .tryToGetOnBike call IsBikeRidingAllowed jp nc,NoCyclingAllowedHere call ItemUseReloadOverworldData xor a ; no keys pressed ld [H_CURRENTPRESSEDBUTTONS],a ; current joypad state inc a ld [$d700],a ; change player state to bicycling ld hl,GotOnBicycleText call Func_2307 ; play bike riding music .printText jp PrintText ; used for Surf out-of-battle effect ItemUseSurfboard: ; d9b4 (3:59b4) ld a,[$d700] ld [$d11a],a cp a,2 ; is the player already surfing? jr z,.tryToStopSurfing .tryToSurf call IsNextTileShoreOrWater jp c,SurfingAttemptFailed ld hl,TilePairCollisionsWater call CheckForTilePairCollisions jp c,SurfingAttemptFailed .surf call .makePlayerMoveForward ld hl,$d730 set 7,[hl] ld a,2 ld [$d700],a ; change player state to surfing call Func_2307 ; play surfing music ld hl,SurfingGotOnText jp PrintText .tryToStopSurfing xor a ld [$ff8c],a ld d,16 ; talking range in pixels (normal range) call IsSpriteInFrontOfPlayer2 res 7,[hl] ld a,[$ff8c] and a ; is there a sprite in the way? jr nz,.cannotStopSurfing ld hl,TilePairCollisionsWater call CheckForTilePairCollisions jr c,.cannotStopSurfing ld hl,$d530 ; pointer to list of passable tiles ld a,[hli] ld h,[hl] ld l,a ; hl now points to passable tiles ld a,[$cfc6] ; tile in front of the player ld b,a .passableTileLoop ld a,[hli] cp b jr z,.stopSurfing cp a,$ff jr nz,.passableTileLoop .cannotStopSurfing ld hl,SurfingNoPlaceToGetOffText jp PrintText .stopSurfing call .makePlayerMoveForward ld hl,$d730 set 7,[hl] xor a ld [$d700],a ; change player state to walking dec a ld [wJoypadForbiddenButtonsMask],a call Func_2307 ; play walking music jp LoadWalkingPlayerSpriteGraphics ; uses a simulated button press to make the player move forward .makePlayerMoveForward ld a,[$d52a] ; direction the player is going bit 3,a ld b,%01000000 ; Up key jr nz,.storeSimulatedButtonPress bit 2,a ld b,%10000000 ; Down key jr nz,.storeSimulatedButtonPress bit 1,a ld b,%00100000 ; Left key jr nz,.storeSimulatedButtonPress ld b,%00010000 ; Right key .storeSimulatedButtonPress ld a,b ld [$ccd3],a ; base address of simulated button presses xor a ld [$cd39],a inc a ld [$cd38],a ; index of current simulated button press ret SurfingGotOnText: ; da4c (3:5a4c) TX_FAR _SurfingGotOnText db "@" SurfingNoPlaceToGetOffText: ; da51 (3:5a51) TX_FAR _SurfingNoPlaceToGetOffText db "@" ItemUsePokedex: ; da56 (3:5a56) ld a,$29 jp Predef ItemUseEvoStone: ; da5b (3:5a5b) ld a,[W_ISINBATTLE] and a jp nz,ItemUseNotTime ld a,[wWhichPokemon] push af ld a,[$cf91] ld [$d156],a push af ld a,$05 ; evolution stone party menu ld [$d07d],a ld a,$ff ld [$cfcb],a call DisplayPartyMenu pop bc jr c,.canceledItemUse ld a,b ld [$cf91],a ld a,$01 ld [$ccd4],a ld a,$8e call PlaySoundWaitForCurrent ; play sound call WaitForSoundToFinish ; wait for sound to end ld hl, Func_3ad0e ld b, BANK(Func_3ad0e) call Bankswitch ; try to evolve pokemon ld a,[$d121] and a jr z,.noEffect pop af ld [wWhichPokemon],a ld hl,wNumBagItems ld a,1 ; remove 1 stone ld [$cf96],a jp RemoveItemFromInventory .noEffect call ItemUseNoEffect .canceledItemUse xor a ld [$cd6a],a pop af ret ItemUseVitamin: ; dab4 (3:5ab4) ld a,[W_ISINBATTLE] and a jp nz,ItemUseNotTime ItemUseMedicine: ; dabb (3:5abb) ld a,[W_NUMINPARTY] and a jp z,.emptyParty ld a,[wWhichPokemon] push af ld a,[$cf91] push af ld a,$01 ld [$d07d],a ; item use party menu ld a,$ff ld [$cfcb],a ld a,[$d152] and a ; using Softboiled? jr z,.notUsingSoftboiled ; if using softboiled call GoBackToPartyMenu jr .getPartyMonDataAddress .emptyParty ld hl,.emptyPartyText xor a ld [$cd6a],a ; item use failed jp PrintText .emptyPartyText text "You don't have" line "any #MON!" prompt .notUsingSoftboiled call DisplayPartyMenu .getPartyMonDataAddress jp c,.canceledItemUse ld hl,W_PARTYMON1DATA ld bc,44 ld a,[wWhichPokemon] call AddNTimes ld a,[wWhichPokemon] ld [$cf06],a ld d,a ld a,[$cf91] ld e,a ld [$d0b5],a pop af ld [$cf91],a pop af ld [wWhichPokemon],a ld a,[$d152] and a ; using Softboiled? jr z,.checkItemType ; if using softboiled ld a,[wWhichPokemon] cp d ; is the pokemon trying to use softboiled on itself? jr z,ItemUseMedicine ; if so, force another choice .checkItemType ld a,[$cf91] cp a,REVIVE jr nc,.healHP ; if it's a Revive or Max Revive cp a,FULL_HEAL jr z,.cureStatusAilment ; if it's a Full Heal cp a,HP_UP jp nc,.useVitamin ; if it's a vitamin or Rare Candy cp a,FULL_RESTORE jr nc,.healHP ; if it's a Full Restore or one of the potions ; fall through if it's one of the status-specifc healing items .cureStatusAilment ld bc,4 add hl,bc ; hl now points to status ld a,[$cf91] ld bc,$f008 cp a,ANTIDOTE jr z,.checkMonStatus ld bc,$f110 cp a,BURN_HEAL jr z,.checkMonStatus ld bc,$f220 cp a,ICE_HEAL jr z,.checkMonStatus ld bc,$f307 cp a,AWAKENING jr z,.checkMonStatus ld bc,$f440 cp a,PARLYZ_HEAL jr z,.checkMonStatus ld bc,$f6ff ; Full Heal .checkMonStatus ld a,[hl] ; pokemon's status and c ; does the pokemon have a status ailment the item can cure? jp z,.healingItemNoEffect ; if the pokemon has a status the item can heal xor a ld [hl],a ; remove the status ailment in the party data ld a,b ld [$d07d],a ; the message to display for the item used ld a,[wPlayerMonNumber] cp d ; is pokemon the item was used on active in battle? jp nz,.doneHealing ; if it is active in battle xor a ld [W_PLAYERMONSTATUS],a ; remove the status ailment in the in-battle pokemon data push hl ld hl,W_PLAYERBATTSTATUS3 res 0,[hl] ; heal Toxic status pop hl ld bc,30 add hl,bc ; hl now points to party stats ld de,W_PLAYERMONMAXHP ld bc,10 call CopyData ; copy party stats to in-battle stat data ld a,$28 call Predef jp .doneHealing .healHP inc hl ; hl = address of current HP ld a,[hli] ld b,a ld [wHPBarOldHP+1],a ld a,[hl] ld c,a ld [wHPBarOldHP],a ; current HP stored at $ceeb (2 bytes, big-endian) or b jr nz,.notFainted .fainted ld a,[$cf91] cp a,REVIVE jr z,.updateInBattleFaintedData cp a,MAX_REVIVE jr z,.updateInBattleFaintedData jp .healingItemNoEffect .updateInBattleFaintedData ld a,[W_ISINBATTLE] and a jr z,.compareCurrentHPToMaxHP push hl push de push bc ld a,[$cf06] ld c,a ld hl,$ccf5 ld b,$02 ld a,$10 call Predef ld a,c and a jr z,.next ld a,[$cf06] ld c,a ld hl,W_PLAYERMONSALIVEFLAGS ld b,$01 ld a,$10 call Predef .next pop bc pop de pop hl jr .compareCurrentHPToMaxHP .notFainted ld a,[$cf91] cp a,REVIVE jp z,.healingItemNoEffect cp a,MAX_REVIVE jp z,.healingItemNoEffect .compareCurrentHPToMaxHP push hl push bc ld bc,32 add hl,bc ; hl now points to max HP pop bc ld a,[hli] cp b jr nz,.skipComparingLSB ; no need to compare the LSB's if the MSB's don't match ld a,[hl] cp c .skipComparingLSB pop hl jr nz,.notFullHP .fullHP ; if the pokemon's current HP equals its max HP ld a,[$cf91] cp a,FULL_RESTORE jp nz,.healingItemNoEffect inc hl inc hl ld a,[hld] ; status ailment and a ; does the pokemon have a status ailment? jp z,.healingItemNoEffect ld a,FULL_HEAL ld [$cf91],a dec hl dec hl dec hl jp .cureStatusAilment .notFullHP ; if the pokemon's current HP doesn't equal its max HP xor a ld [$d083],a ld [$c02a],a push hl push de ld bc,32 add hl,bc ; hl now points to max HP ld a,[hli] ld [wHPBarMaxHP+1],a ld a,[hl] ld [wHPBarMaxHP],a ; max HP stored at $cee9 (2 bytes, big-endian) ld a,[$d152] and a ; using Softboiled? jp z,.notUsingSoftboiled2 ; if using softboiled ld hl,wHPBarMaxHP ld a,[hli] push af ld a,[hli] push af ld a,[hli] push af ld a,[hl] push af ld hl,W_PARTYMON1_MAXHP ld a,[wWhichPokemon] ld bc,44 call AddNTimes ld a,[hli] ld [$ceea],a ld [H_DIVIDEND],a ld a,[hl] ld [wHPBarMaxHP],a ld [H_DIVIDEND + 1],a ld a,5 ld [H_DIVISOR],a ld b,2 ; number of bytes call Divide ; get 1/5 of max HP of pokemon that used Softboiled ld bc,-33 add hl,bc ; hl now points to LSB of current HP of pokemon that used Softboiled ; subtract 1/5 of max HP from current HP of pokemon that used Softboiled ld a,[H_QUOTIENT + 3] push af ld b,a ld a,[hl] ld [wHPBarOldHP],a sub b ld [hld],a ld [wHPBarNewHP],a ld a,[H_QUOTIENT + 2] ld b,a ld a,[hl] ld [wHPBarOldHP+1],a sbc b ld [hl],a ld [wHPBarNewHP+1],a FuncCoord 4, 1 ; $c3b8 ld hl,Coord ld a,[wWhichPokemon] ld bc,2 * 20 call AddNTimes ; calculate coordinates of HP bar of pokemon that used Softboiled ld a,$8d call PlaySoundWaitForCurrent ; play sound ld a,[$fff6] set 0,a ld [$fff6],a ld a,$02 ld [$cf94],a ld a,$48 call Predef ; animate HP bar decrease of pokemon that used Softboiled ld a,[$fff6] res 0,a ld [$fff6],a pop af ld b,a ; store heal amount (1/5 of max HP) ld hl,$ceec pop af ld [hld],a pop af ld [hld],a pop af ld [hld],a pop af ld [hl],a jr .addHealAmount .notUsingSoftboiled2 ld a,[$cf91] cp a,SODA_POP ld b,60 ; Soda Pop heal amount jr z,.addHealAmount ld b,80 ; Lemonade heal amount jr nc,.addHealAmount cp a,FRESH_WATER ld b,50 ; Fresh Water heal amount jr z,.addHealAmount cp a,SUPER_POTION ld b,200 ; Hyper Potion heal amount jr c,.addHealAmount ld b,50 ; Super Potion heal amount jr z,.addHealAmount ld b,20 ; Potion heal amount .addHealAmount pop de pop hl ld a,[hl] add b ld [hld],a ld [wHPBarNewHP],a ld a,[hl] ld [wHPBarNewHP+1],a jr nc,.noCarry inc [hl] ld a,[hl] ld [$ceee],a .noCarry push de inc hl ld d,h ld e,l ; de now points to current HP ld hl,33 add hl,de ; hl now points to max HP ld a,[$cf91] cp a,REVIVE jr z,.setCurrentHPToHalfMaxHP ld a,[hld] ld b,a ld a,[de] sub b dec de ld b,[hl] ld a,[de] sbc b jr nc,.setCurrentHPToMaxHp ; if current HP exceeds max HP after healing ld a,[$cf91] cp a,HYPER_POTION jr c,.setCurrentHPToMaxHp ; if using a Full Restore or Max Potion cp a,MAX_REVIVE jr z,.setCurrentHPToMaxHp ; if using a Max Revive jr .updateInBattleData .setCurrentHPToHalfMaxHP dec hl dec de ld a,[hli] srl a ld [de],a ld [wHPBarNewHP+1],a ld a,[hl] rr a inc de ld [de],a ld [wHPBarNewHP],a dec de jr .doneHealingPartyHP .setCurrentHPToMaxHp ld a,[hli] ld [de],a ld [wHPBarNewHP+1],a inc de ld a,[hl] ld [de],a ld [wHPBarNewHP],a dec de .doneHealingPartyHP ; done updating the pokemon's current HP in the party data structure ld a,[$cf91] cp a,FULL_RESTORE jr nz,.updateInBattleData ld bc,-31 add hl,bc xor a ld [hl],a ; remove the status ailment in the party data .updateInBattleData ld h,d ld l,e pop de ld a,[wPlayerMonNumber] cp d ; is pokemon the item was used on active in battle? jr nz,.calculateHPBarCoords ; copy party HP to in-battle HP ld a,[hli] ld [W_PLAYERMONCURHP],a ld a,[hld] ld [W_PLAYERMONCURHP + 1],a ld a,[$cf91] cp a,FULL_RESTORE jr nz,.calculateHPBarCoords xor a ld [W_PLAYERMONSTATUS],a ; remove the status ailment in the in-battle pokemon data .calculateHPBarCoords ld hl,$c390 ld bc,2 * 20 inc d .calculateHPBarCoordsLoop add hl,bc dec d jr nz,.calculateHPBarCoordsLoop jr .doneHealing .healingItemNoEffect call ItemUseNoEffect jp .done .doneHealing ld a,[$d152] and a ; using Softboiled? jr nz,.skipRemovingItem ; no item to remove if using Softboiled push hl call RemoveUsedItem pop hl .skipRemovingItem ld a,[$cf91] cp a,FULL_RESTORE jr c,.playStatusAilmentCuringSound cp a,FULL_HEAL jr z,.playStatusAilmentCuringSound ld a,$8d ; HP healing sound call PlaySoundWaitForCurrent ; play sound ld a,[$fff6] set 0,a ld [$fff6],a ld a,$02 ld [$cf94],a ld a,$48 call Predef ; animate the HP bar lengthening ld a,[$fff6] res 0,a ld [$fff6],a ld a,$f7 ; revived message ld [$d07d],a ld a,[$cf91] cp a,REVIVE jr z,.showHealingItemMessage cp a,MAX_REVIVE jr z,.showHealingItemMessage ld a,$f5 ; standard HP healed message ld [$d07d],a jr .showHealingItemMessage .playStatusAilmentCuringSound ld a,$8e ; status ailment curing sound call PlaySoundWaitForCurrent ; play sound .showHealingItemMessage xor a ld [H_AUTOBGTRANSFERENABLED],a call ClearScreen dec a ld [$cfcb],a call RedrawPartyMenu ; redraws the party menu and displays the message ld a,1 ld [H_AUTOBGTRANSFERENABLED],a ld c,50 call DelayFrames call WaitForTextScrollButtonPress ; wait for a button press jr .done .canceledItemUse xor a ld [$cd6a],a ; item use failed pop af pop af .done ld a,[$d152] and a ; using Softboiled? ret nz ; if so, return call GBPalWhiteOut call z,GoPAL_SET_CF1C ld a,[W_ISINBATTLE] and a ret nz jp ReloadMapData ; restore saved screen .useVitamin push hl ld a,[hl] ld [$d0b5],a ld [$d11e],a ld bc,33 add hl,bc ; hl now points to level ld a,[hl] ; a = level ld [$d127],a ; store level call GetMonHeader push de ld a,d ld hl,W_PARTYMON1NAME call GetPartyMonName pop de pop hl ld a,[$cf91] cp a,RARE_CANDY jp z,.useRareCandy push hl sub a,HP_UP add a ld bc,17 add hl,bc add l ld l,a jr nc,.noCarry2 inc h .noCarry2 ld a,10 ld b,a ld a,[hl] ; a = MSB of stat experience of the appropriate stat cp a,100 ; is there already at least 25600 (256 * 100) stat experience? jr nc,.vitaminNoEffect ; if so, vitamins can't add any more add b ; add 2560 (256 * 10) stat experience jr nc,.noCarry3 ; a carry should be impossible here, so this will always jump ld a,255 .noCarry3 ld [hl],a pop hl call .recalculateStats ld hl,VitaminText ld a,[$cf91] sub a,HP_UP - 1 ld c,a .statNameLoop ; loop to get the address of the name of the stat the vitamin increases dec c jr z,.gotStatName .statNameInnerLoop ld a,[hli] ld b,a ld a,$50 cp b jr nz,.statNameInnerLoop jr .statNameLoop .gotStatName ld de,$cf4b ld bc,10 call CopyData ; copy the stat's name to $cf4b ld a,$8e call PlaySound ; play sound ld hl,VitaminStatRoseText call PrintText jp RemoveUsedItem .vitaminNoEffect pop hl ld hl,VitaminNoEffectText call PrintText jp GBPalWhiteOut .recalculateStats ld bc,34 add hl,bc ld d,h ld e,l ; de now points to stats ld bc,-18 add hl,bc ; hl now points to byte 3 of experience ld b,1 jp CalcStats ; recalculate stats .useRareCandy push hl ld bc,33 add hl,bc ; hl now points to level ld a,[hl] ; a = level cp a,100 jr z,.vitaminNoEffect ; can't raise level above 100 inc a ld [hl],a ; store incremented level ld [$d127],a push hl push de ld d,a ld hl, CalcExperience ld b, BANK(CalcExperience) call Bankswitch ; calculate experience for next level and store it at $ff96 pop de pop hl ld bc,-19 add hl,bc ; hl now points to experience ; update experience to minimum for new level ld a,[$ff96] ld [hli],a ld a,[$ff97] ld [hli],a ld a,[$ff98] ld [hl],a pop hl ld a,[wWhichPokemon] push af ld a,[$cf91] push af push de push hl ld bc,34 add hl,bc ; hl now points to MSB of max HP ld a,[hli] ld b,a ld c,[hl] pop hl push bc push hl call .recalculateStats pop hl ld bc,35 ; hl now points to LSB of max HP add hl,bc pop bc ld a,[hld] sub c ld c,a ld a,[hl] sbc b ld b,a ; bc = the amount of max HP gained from leveling up ; add the amount gained to the current HP ld de,-32 add hl,de ; hl now points to MSB of current HP ld a,[hl] add c ld [hld],a ld a,[hl] adc b ld [hl],a ld a,$f8 ; level up message ld [$d07d],a call RedrawPartyMenu pop de ld a,d ld [wWhichPokemon],a ld a,e ld [$d11e],a xor a ld [$cc49],a ; load from player's party call LoadMonData ld d,$01 ld hl, PrintStatsBox ld b, BANK(PrintStatsBox) call Bankswitch ; display new stats text box call WaitForTextScrollButtonPress ; wait for button press xor a ld [$cc49],a ld a,$1a call Predef ; learn level up move, if any xor a ld [$ccd4],a ld hl, Func_3ad0e ld b, BANK(Func_3ad0e) call Bankswitch ; evolve pokemon, if appropriate ld a,$01 ld [$cfcb],a pop af ld [$cf91],a pop af ld [wWhichPokemon],a jp RemoveUsedItem VitaminStatRoseText: ; df24 (3:5f24) TX_FAR _VitaminStatRoseText db "@" VitaminNoEffectText: ; df29 (3:5f29) TX_FAR _VitaminNoEffectText db "@" VitaminText: ; df2e (3:5f2e) db "HEALTH@" db "ATTACK@" db "DEFENSE@" db "SPEED@" db "SPECIAL@" ItemUseBait: ; df52 (3:5f52) ld hl,ThrewBaitText call PrintText ld hl,$d007 ; catch rate srl [hl] ; halve catch rate ld a,BAIT_ANIM ld hl,$cce9 ; bait factor ld de,$cce8 ; escape factor jr BaitRockCommon ItemUseRock: ; df67 (3:5f67) ld hl,ThrewRockText call PrintText ld hl,$d007 ; catch rate ld a,[hl] add a ; double catch rate jr nc,.noCarry ld a,$ff .noCarry ld [hl],a ld a,ROCK_ANIM ld hl,$cce8 ; escape factor ld de,$cce9 ; bait factor BaitRockCommon: ; df7f (3:5f7f) ld [W_ANIMATIONID],a xor a ld [$cc5b],a ld [H_WHOSETURN],a ld [de],a ; zero escape factor (for bait), zero bait factor (for rock) .randomLoop ; loop until a random number less than 5 is generated call GenRandom and a,7 cp a,5 jr nc,.randomLoop inc a ; increment the random number, giving a range from 1 to 5 inclusive ld b,a ld a,[hl] add b ; increase bait factor (for bait), increase escape factor (for rock) jr nc,.noCarry ld a,$ff .noCarry ld [hl],a ld a,$08 call Predef ; do animation ld c,70 jp DelayFrames ThrewBaitText: ; dfa5 (3:5fa5) TX_FAR _ThrewBaitText db "@" ThrewRockText: ; dfaa (3:5faa) TX_FAR _ThrewRockText db "@" ; also used for Dig out-of-battle effect ItemUseEscapeRope: ; dfaf (3:5faf) ld a,[W_ISINBATTLE] and a jr nz,.notUsable ld a,[W_CURMAP] cp a,AGATHAS_ROOM jr z,.notUsable ld a,[W_CURMAPTILESET] ld b,a ld hl,EscapeRopeTilesets .loop ld a,[hli] cp a,$ff jr z,.notUsable cp b jr nz,.loop ld hl,$d732 set 3,[hl] set 6,[hl] ld hl,$d72e res 4,[hl] ld hl,$d790 res 7,[hl] ; unset Safari Zone bit xor a ld [$da47],a ld [W_SAFARIZONEENTRANCECURSCRIPT],a inc a ld [$d078],a ld [$cd6a],a ; item used ld a,[$d152] and a ; using Dig? ret nz ; if so, return call ItemUseReloadOverworldData ld c,30 call DelayFrames jp RemoveUsedItem .notUsable jp ItemUseNotTime EscapeRopeTilesets: ; dffd (3:5ffd) db $03,$0f,$11,$16,$10 db $ff ; terminator ItemUseRepel: ; e003 (3:6003) ld b,100 ItemUseRepelCommon: ; e005 (3:6005) ld a,[W_ISINBATTLE] and a jp nz,ItemUseNotTime ld a,b ld [$d0db],a jp PrintItemUseTextAndRemoveItem ; handles X Accuracy item ItemUseXAccuracy: ; e013 (3:6013) ld a,[W_ISINBATTLE] and a jp z,ItemUseNotTime ld hl,W_PLAYERBATTSTATUS2 set 0,[hl] ; X Accuracy bit jp PrintItemUseTextAndRemoveItem ; This function is bugged and never works. It always jumps to ItemUseNotTime. ; The Card Key is handled in a different way. ItemUseCardKey: ; e022 (3:6022) xor a ld [$d71f],a call Func_c586 ld a,[Func_c586] ; $4586 cp a,$18 jr nz,.next0 ld hl,CardKeyTable1 jr .next1 .next0 cp a,$24 jr nz,.next2 ld hl,CardKeyTable2 jr .next1 .next2 cp a,$5e jp nz,ItemUseNotTime ld hl,CardKeyTable3 .next1 ld a,[W_CURMAP] ld b,a .loop ld a,[hli] cp a,$ff jp z,ItemUseNotTime cp b jr nz,.nextEntry1 ld a,[hli] cp d jr nz,.nextEntry2 ld a,[hli] cp e jr nz,.nextEntry3 ld a,[hl] ld [$d71f],a jr .done .nextEntry1 inc hl .nextEntry2 inc hl .nextEntry3 inc hl jr .loop .done ld hl,ItemUseText00 call PrintText ld hl,$d728 set 7,[hl] ret ; These tables are probably supposed to be door locations in Silph Co., ; but they are unused. ; The reason there are 3 tables is unknown. ; Format: ; 00: Map ID ; 01: Y ; 02: X ; 03: ID? CardKeyTable1: ; e072 (3:6072) db SILPH_CO_2F,$04,$04,$00 db SILPH_CO_2F,$04,$05,$01 db SILPH_CO_4F,$0C,$04,$02 db SILPH_CO_4F,$0C,$05,$03 db SILPH_CO_7F,$06,$0A,$04 db SILPH_CO_7F,$06,$0B,$05 db SILPH_CO_9F,$04,$12,$06 db SILPH_CO_9F,$04,$13,$07 db SILPH_CO_10F,$08,$0A,$08 db SILPH_CO_10F,$08,$0B,$09 db $ff CardKeyTable2: ; e09b (3:609b) db SILPH_CO_3F,$08,$09,$0A db SILPH_CO_3F,$09,$09,$0B db SILPH_CO_5F,$04,$07,$0C db SILPH_CO_5F,$05,$07,$0D db SILPH_CO_6F,$0C,$05,$0E db SILPH_CO_6F,$0D,$05,$0F db SILPH_CO_8F,$08,$07,$10 db SILPH_CO_8F,$09,$07,$11 db SILPH_CO_9F,$08,$03,$12 db SILPH_CO_9F,$09,$03,$13 db $ff CardKeyTable3: ; e0c4 (3:60c4) db SILPH_CO_11F,$08,$09,$14 db SILPH_CO_11F,$09,$09,$15 db $ff ItemUsePokedoll: ; e0cd (3:60cd) ld a,[W_ISINBATTLE] dec a jp nz,ItemUseNotTime ld a,$01 ld [$d078],a jp PrintItemUseTextAndRemoveItem ItemUseGuardSpec: ; e0dc (3:60dc) ld a,[W_ISINBATTLE] and a jp z,ItemUseNotTime ld hl,W_PLAYERBATTSTATUS2 set 1,[hl] ; Mist bit jp PrintItemUseTextAndRemoveItem ItemUseSuperRepel: ; e0eb (3:60eb) ld b,200 jp ItemUseRepelCommon ItemUseMaxRepel: ; e0f0 (3:60f0) ld b,250 jp ItemUseRepelCommon ItemUseDireHit: ; e0f5 (3:60f5) ld a,[W_ISINBATTLE] and a jp z,ItemUseNotTime ld hl,W_PLAYERBATTSTATUS2 set 2,[hl] ; Focus Energy bit jp PrintItemUseTextAndRemoveItem ItemUseXStat: ; e104 (3:6104) ld a,[W_ISINBATTLE] and a jr nz,.inBattle call ItemUseNotTime ld a,2 ld [$cd6a],a ; item not used ret .inBattle ld hl,W_PLAYERMOVENUM ld a,[hli] push af ; save [W_PLAYERMOVENUM] ld a,[hl] push af ; save [W_PLAYERMOVEEFFECT] push hl ld a,[$cf91] sub a,X_ATTACK - ATTACK_UP1_EFFECT ld [hl],a ; store player move effect call PrintItemUseTextAndRemoveItem ld a,XSTATITEM_ANIM ; X stat item animation ID ld [W_PLAYERMOVENUM],a call LoadScreenTilesFromBuffer1 ; restore saved screen call Delay3 xor a ld [H_WHOSETURN],a ; set turn to player's turn ld b, BANK(Func_3f428) ld hl, Func_3f428 call Bankswitch ; do stat increase move pop hl pop af ld [hld],a ; restore [W_PLAYERMOVEEFFECT] pop af ld [hl],a ; restore [W_PLAYERMOVENUM] ret ItemUsePokeflute: ; e140 (3:6140) ld a,[W_ISINBATTLE] and a jr nz,.inBattle ; if not in battle call ItemUseReloadOverworldData ld a,[W_CURMAP] cp a,ROUTE_12 jr nz,.notRoute12 ld a,[$d7d8] bit 7,a ; has the player beaten Route 12 Snorlax yet? jr nz,.noSnorlaxToWakeUp ; if the player hasn't beaten Route 12 Snorlax ld hl,Route12SnorlaxFluteCoords call ArePlayerCoordsInArray jr nc,.noSnorlaxToWakeUp ld hl,PlayedFluteHadEffectText call PrintText ld hl,$d7d8 set 6,[hl] ; trigger Snorlax fight (handled by map script) ret .notRoute12 cp a,ROUTE_16 jr nz,.noSnorlaxToWakeUp ld a,[$d7e0] bit 1,a ; has the player beaten Route 16 Snorlax yet? jr nz,.noSnorlaxToWakeUp ; if the player hasn't beaten Route 16 Snorlax ld hl,Route16SnorlaxFluteCoords call ArePlayerCoordsInArray jr nc,.noSnorlaxToWakeUp ld hl,PlayedFluteHadEffectText call PrintText ld hl,$d7e0 set 0,[hl] ; trigger Snorlax fight (handled by map script) ret .noSnorlaxToWakeUp ld hl,PlayedFluteNoEffectText jp PrintText .inBattle xor a ld [$cd3d],a ; initialize variable that indicates if any pokemon were woken up to zero ld b,~SLP & $FF ld hl,W_PARTYMON1_STATUS call WakeUpEntireParty ld a,[W_ISINBATTLE] dec a ; is it a trainer battle? jr z,.skipWakingUpEnemyParty ; if it's a trainer battle ld hl,$d8a8 ; enemy party pokemon 1 status call WakeUpEntireParty .skipWakingUpEnemyParty ld hl,W_PLAYERMONSTATUS ld a,[hl] and b ; remove Sleep status ld [hl],a ld hl,W_ENEMYMONSTATUS ld a,[hl] and b ; remove Sleep status ld [hl],a call LoadScreenTilesFromBuffer2 ; restore saved screen ld a,[$cd3d] and a ; were any pokemon asleep before playing the flute? ld hl,PlayedFluteNoEffectText jp z,PrintText ; if no pokemon were asleep ; if some pokemon were asleep ld hl,PlayedFluteHadEffectText call PrintText ld a,[$d083] and a,$80 jr nz,.skipMusic call WaitForSoundToFinish ; wait for sound to end ld b, BANK(Music_PokeFluteInBattle) ld hl, Music_PokeFluteInBattle call Bankswitch ; play in-battle pokeflute music .musicWaitLoop ; wait for music to finish playing ld a,[$c02c] and a ; music off? jr nz,.musicWaitLoop .skipMusic ld hl,FluteWokeUpText jp PrintText ; wakes up all party pokemon ; INPUT: ; hl must point to status of first pokemon in party (player's or enemy's) ; b must equal ~SLP ; [$cd3d] should be initialized to 0 ; OUTPUT: ; [$cd3d]: set to 1 if any pokemon were asleep WakeUpEntireParty: ; e1e5 (3:61e5) ld de,44 ld c,6 .loop ld a,[hl] push af and a,SLP ; is pokemon asleep? jr z,.notAsleep ld a,1 ld [$cd3d],a ; indicate that a pokemon had to be woken up .notAsleep pop af and b ; remove Sleep status ld [hl],a add hl,de dec c jr nz,.loop ret ; Format: ; 00: Y ; 01: X Route12SnorlaxFluteCoords: ; e1fd (3:61fd) db 62,9 ; one space West of Snorlax db 61,10 ; one space North of Snorlax db 63,10 ; one space South of Snorlax db 62,11 ; one space East of Snorlax db $ff ; terminator ; Format: ; 00: Y ; 01: X Route16SnorlaxFluteCoords: ; e206 (3:6206) db 10,27 ; one space East of Snorlax db 10,25 ; one space West of Snorlax db $ff ; terminator PlayedFluteNoEffectText: ; e20b (3:620b) TX_FAR _PlayedFluteNoEffectText db "@" FluteWokeUpText: ; e210 (3:6210) TX_FAR _FluteWokeUpText db "@" PlayedFluteHadEffectText: ; e215 (3:6215) TX_FAR _PlayedFluteHadEffectText db $06 db $08 ld a,[W_ISINBATTLE] and a jr nz,.done ; play out-of-battle pokeflute music ld a,$ff call PlaySound ; turn off music ld a, (SFX_02_5e - $4000) / 3 ld c, BANK(SFX_02_5e) call PlayMusic ; play music .musicWaitLoop ; wait for music to finish playing ld a,[$c028] cp a,$b8 jr z,.musicWaitLoop call Func_2307 ; start playing normal music again .done jp TextScriptEnd ; end text ItemUseCoinCase: ; e23a (3:623a) ld a,[W_ISINBATTLE] and a jp nz,ItemUseNotTime ld hl,CoinCaseNumCoinsText jp PrintText CoinCaseNumCoinsText: ; e247 (3:6247) TX_FAR _CoinCaseNumCoinsText db "@" OldRodCode: ; e24c (3:624c) call FishingInit jp c, ItemUseNotTime ld bc, (5 << 8) | MAGIKARP ld a, $1 ; set bite jr RodResponse ; 0xe257 $34 GoodRodCode: ; e259 (3:6259) call FishingInit jp c,ItemUseNotTime .RandomLoop call GenRandom srl a jr c, .SetBite and %11 cp 2 jr nc, .RandomLoop ; choose which monster appears ld hl,GoodRodMons add a,a ld c,a ld b,0 add hl,bc ld b,[hl] inc hl ld c,[hl] and a .SetBite ld a,0 rla xor 1 jr RodResponse GoodRodMons: ; e27f (3:627f) db 10,GOLDEEN db 10,POLIWAG SuperRodCode: ; e283 (3:6283) call FishingInit jp c, ItemUseNotTime call ReadSuperRodData ; 0xe8ea ld a, e RodResponse: ; e28d (3:628d) ld [$CD3D], a dec a ; is there a bite? jr nz, .next ; if yes, store level and species data ld a, 1 ld [$D05F], a ld a, b ; level ld [W_CURENEMYLVL], a ld a, c ; species ld [W_CUROPPONENT], a .next ld hl, $D700 ld a, [hl] ; store the value in a push af push hl ld [hl], 0 ld b, BANK(Func_707b6) ld hl, Func_707b6 call Bankswitch pop hl pop af ld [hl], a ret ; checks if fishing is possible and if so, runs initialization code common to all rods ; unsets carry if fishing is possible, sets carry if not FishingInit: ; e2b4 (3:62b4) ld a,[W_ISINBATTLE] and a jr z,.notInBattle scf ; can't fish during battle ret .notInBattle call IsNextTileShoreOrWater ret c ld a,[$d700] cp a,2 ; Surfing? jr z,.surfing call ItemUseReloadOverworldData ld hl,ItemUseText00 call PrintText ld a,$8e call PlaySound ; play sound ld c,80 call DelayFrames and a ret .surfing scf ; can't fish when surfing ret ItemUseOaksParcel: ; e2de (3:62de) jp ItemUseNotYoursToUse ItemUseItemfinder: ; e2e1 (3:62e1) ld a,[W_ISINBATTLE] and a jp nz,ItemUseNotTime call ItemUseReloadOverworldData ld b,BANK(HiddenItemNear) ld hl,HiddenItemNear call Bankswitch ; check for hidden items ld hl,ItemfinderFoundNothingText jr nc,.printText ; if no hidden items ld c,4 .loop ld a,$9e call PlaySoundWaitForCurrent ; play sound ld a,$b2 call PlaySoundWaitForCurrent ; play sound dec c jr nz,.loop ld hl,ItemfinderFoundItemText .printText jp PrintText ItemfinderFoundItemText: ; e30d (3:630d) TX_FAR _ItemfinderFoundItemText db "@" ItemfinderFoundNothingText: ; e312 (3:6312) TX_FAR _ItemfinderFoundNothingText db "@" ItemUsePPUp: ; e317 (3:6317) ld a,[W_ISINBATTLE] and a jp nz,ItemUseNotTime ItemUsePPRestore: ; e31e (3:631e) ld a,[wWhichPokemon] push af ld a,[$cf91] ld [$cd3d],a .chooseMon xor a ld [$cfcb],a ld a,$01 ; item use party menu ld [$d07d],a call DisplayPartyMenu jr nc,.chooseMove jp .itemNotUsed .chooseMove ld a,[$cd3d] cp a,ELIXER jp nc,.useElixir ; if Elixir or Max Elixir ld a,$02 ld [wMoveMenuType],a ld hl,RaisePPWhichTechniqueText ld a,[$cd3d] cp a,ETHER ; is it a PP Up? jr c,.printWhichTechniqueMessage ; if so, print the raise PP message ld hl,RestorePPWhichTechniqueText ; otherwise, print the restore PP message .printWhichTechniqueMessage call PrintText xor a ld [$cc2e],a ld hl, MoveSelectionMenu ld b, BANK(MoveSelectionMenu) call Bankswitch ; move selection menu ld a,0 ld [$cc2e],a jr nz,.chooseMon ld hl,W_PARTYMON1_MOVE1 ld bc,44 call GetSelectedMoveOffset push hl ld a,[hl] ld [$d11e],a call GetMoveName call CopyStringToCF4B ; copy name to $cf4b pop hl ld a,[$cd3d] cp a,ETHER jr nc,.useEther ; if Ether or Max Ether .usePPUp ld bc,21 add hl,bc ld a,[hl] ; move PP cp a,3 << 6 ; have 3 PP Ups already been used? jr c,.PPNotMaxedOut ld hl,PPMaxedOutText call PrintText jr .chooseMove .PPNotMaxedOut ld a,[hl] add a,1 << 6 ; increase PP Up count by 1 ld [hl],a ld a,1 ; 1 PP Up used ld [$d11e],a call RestoreBonusPP ; add the bonus PP to current PP ld hl,PPIncreasedText call PrintText .done pop af ld [wWhichPokemon],a call GBPalWhiteOut call GoPAL_SET_CF1C jp RemoveUsedItem .afterRestoringPP ; after using a (Max) Ether/Elixir ld a,[wWhichPokemon] ld b,a ld a,[wPlayerMonNumber] cp b ; is the pokemon whose PP was restored active in battle? jr nz,.skipUpdatingInBattleData ld hl,W_PARTYMON1_MOVE1PP ld bc,44 call AddNTimes ld de,W_PLAYERMONPP ld bc,4 call CopyData ; copy party data to in-battle data .skipUpdatingInBattleData ld a,$8e call PlaySound ld hl,PPRestoredText call PrintText jr .done .useEther call .restorePP jr nz,.afterRestoringPP jp .noEffect ; unsets zero flag if PP was restored, sets zero flag if not ; however, this is bugged for Max Ethers and Max Elixirs (see below) .restorePP xor a ld [$cc49],a ; party pokemon call GetMaxPP ld hl,W_PARTYMON1_MOVE1 ld bc,44 call GetSelectedMoveOffset ld bc,21 add hl,bc ; hl now points to move's PP ld a,[$d11e] ld b,a ; b = max PP ld a,[$cd3d] cp a,MAX_ETHER jr z,.fullyRestorePP ld a,[hl] ; move PP and a,%00111111 ; lower 6 bit bits store current PP cp b ; does current PP equal max PP? ret z ; if so, return add a,10 ; increase current PP by 10 ; b holds the max PP amount and b will hold the new PP amount. ; So, if the new amount meets or exceeds the max amount, ; cap the amount to the max amount by leaving b unchanged. ; Otherwise, store the new amount in b. cp b ; does the new amount meet or exceed the maximum? jr nc,.storeNewAmount ld b,a .storeNewAmount ld a,[hl] ; move PP and a,%11000000 ; PP Up counter bits add b ld [hl],a ret .fullyRestorePP ld a,[hl] ; move PP ; Note that this code has a bug. It doesn't mask out the upper two bits, which ; are used to count how many PP Ups have been used on the move. So, Max Ethers ; and Max Elixirs will not be detected as having no effect on a move with full ; PP if the move has had any PP Ups used on it. cp b ; does current PP equal max PP? ret z jr .storeNewAmount .useElixir ; decrement the item ID so that ELIXER becomes ETHER and MAX_ELIXER becomes MAX_ETHER ld hl,$cd3d dec [hl] dec [hl] xor a ld hl,wCurrentMenuItem ld [hli],a ld [hl],a ; zero the counter for number of moves that had their PP restored ld b,4 ; loop through each move and restore PP .elixirLoop push bc ld hl,W_PARTYMON1_MOVE1 ld bc,44 call GetSelectedMoveOffset ld a,[hl] and a ; does the current slot have a move? jr z,.nextMove call .restorePP jr z,.nextMove ; if some PP was restored ld hl,$cc27 ; counter for number of moves that had their PP restored inc [hl] .nextMove ld hl,wCurrentMenuItem inc [hl] pop bc dec b jr nz,.elixirLoop ld a,[$cc27] and a ; did any moves have their PP restored? jp nz,.afterRestoringPP .noEffect call ItemUseNoEffect .itemNotUsed call GBPalWhiteOut call GoPAL_SET_CF1C pop af xor a ld [$cd6a],a ; item use failed ret RaisePPWhichTechniqueText: ; e45d (3:645d) TX_FAR _RaisePPWhichTechniqueText db "@" RestorePPWhichTechniqueText: ; e462 (3:6462) TX_FAR _RestorePPWhichTechniqueText db "@" PPMaxedOutText: ; e467 (3:6467) TX_FAR _PPMaxedOutText db "@" PPIncreasedText: ; e46c (3:646c) TX_FAR _PPIncreasedText db "@" PPRestoredText: ; e471 (3:6471) TX_FAR _PPRestoredText db "@" ; for items that can't be used from the Item menu UnusableItem: ; e476 (3:6476) jp ItemUseNotTime ItemUseTMHM: ; e479 (3:6479) ld a,[W_ISINBATTLE] and a jp nz,ItemUseNotTime ld a,[$cf91] sub a,TM_01 push af jr nc,.skipAdding add a,55 ; if item is an HM, add 55 .skipAdding inc a ld [$d11e],a ld a,$44 call Predef ; get move ID from TM/HM ID ld a,[$d11e] ld [$d0e0],a call GetMoveName call CopyStringToCF4B ; copy name to $cf4b pop af ld hl,BootedUpTMText jr nc,.printBootedUpMachineText ld hl,BootedUpHMText .printBootedUpMachineText call PrintText ld hl,TeachMachineMoveText call PrintText FuncCoord 14,7 ld hl,Coord ld bc,$080f ld a,$14 ld [$d125],a call DisplayTextBoxID ; yes/no menu ld a,[wCurrentMenuItem] and a jr z,.useMachine ld a,2 ld [$cd6a],a ; item not used ret .useMachine ld a,[wWhichPokemon] push af ld a,[$cf91] push af .chooseMon ld hl,$cf4b ld de,$d036 ld bc,14 call CopyData ld a,$ff ld [$cfcb],a ld a,$03 ; teach TM/HM party menu ld [$d07d],a call DisplayPartyMenu push af ld hl,$d036 ld de,$cf4b ld bc,14 call CopyData pop af jr nc,.checkIfAbleToLearnMove ; if the player canceled teaching the move pop af pop af call GBPalWhiteOutWithDelay3 call CleanLCD_OAM call GoPAL_SET_CF1C jp LoadScreenTilesFromBuffer1 ; restore saved screen .checkIfAbleToLearnMove ld a,$43 call Predef ; check if the pokemon can learn the move push bc ld a,[wWhichPokemon] ld hl,W_PARTYMON1NAME call GetPartyMonName pop bc ld a,c and a ; can the pokemon learn the move? jr nz,.checkIfAlreadyLearnedMove ; if the pokemon can't learn the move ld a,$a5 call PlaySoundWaitForCurrent ; play sound ld hl,MonCannotLearnMachineMoveText call PrintText jr .chooseMon .checkIfAlreadyLearnedMove ld hl, Func_2fe18 ld b, BANK(Func_2fe18) call Bankswitch ; check if the pokemon already knows the move jr c,.chooseMon ld a,$1b call Predef ; teach move pop af ld [$cf91],a pop af ld [wWhichPokemon],a ld a,b and a ret z ld a,[$cf91] call IsItemHM ret c jp RemoveUsedItem BootedUpTMText: ; e54f (3:654f) TX_FAR _BootedUpTMText db "@" BootedUpHMText: ; e554 (3:6554) TX_FAR _BootedUpHMText db "@" TeachMachineMoveText: ; e559 (3:6559) TX_FAR _TeachMachineMoveText db "@" MonCannotLearnMachineMoveText: ; e55e (3:655e) TX_FAR _MonCannotLearnMachineMoveText db "@" PrintItemUseTextAndRemoveItem: ; e563 (3:6563) ld hl,ItemUseText00 call PrintText ld a,$8e call PlaySound ; play sound call WaitForTextScrollButtonPress ; wait for button press RemoveUsedItem: ; e571 (3:6571) ld hl,wNumBagItems ld a,1 ; one item ld [$cf96],a ; store quantity jp RemoveItemFromInventory ItemUseNoEffect: ; e57c (3:657c) ld hl,ItemUseNoEffectText jr ItemUseFailed ItemUseNotTime: ; e581 (3:6581) ld hl,ItemUseNotTimeText jr ItemUseFailed ItemUseNotYoursToUse: ; e586 (3:6586) ld hl,ItemUseNotYoursToUseText jr ItemUseFailed ThrowBallAtTrainerMon: ; e58b (3:658b) call GoPAL_SET_CF1C call LoadScreenTilesFromBuffer1 ; restore saved screen call Delay3 ld a,TOSS_ANIM ld [W_ANIMATIONID],a ld a,$08 call Predef ; do animation ld hl,ThrowBallAtTrainerMonText1 call PrintText ld hl,ThrowBallAtTrainerMonText2 call PrintText jr RemoveUsedItem NoCyclingAllowedHere: ; e5ac (3:65ac) ld hl,NoCyclingAllowedHereText jr ItemUseFailed BoxFullCannotThrowBall: ; e5b1 (3:65b1) ld hl,BoxFullCannotThrowBallText jr ItemUseFailed SurfingAttemptFailed: ; e5b6 (3:65b6) ld hl,NoSurfingHereText ItemUseFailed: ; e5b9 (3:65b9) xor a ld [$cd6a],a ; item use failed jp PrintText ItemUseNotTimeText: ; e5c0 (3:65c0) TX_FAR _ItemUseNotTimeText db "@" ItemUseNotYoursToUseText: ; e5c5 (3:65c5) TX_FAR _ItemUseNotYoursToUseText db "@" ItemUseNoEffectText: ; e5ca (3:65ca) TX_FAR _ItemUseNoEffectText db "@" ThrowBallAtTrainerMonText1: ; e5cf (3:65cf) TX_FAR _ThrowBallAtTrainerMonText1 db "@" ThrowBallAtTrainerMonText2: ; e5d4 (3:65d4) TX_FAR _ThrowBallAtTrainerMonText2 db "@" NoCyclingAllowedHereText: ; e5d9 (3:65d9) TX_FAR _NoCyclingAllowedHereText db "@" NoSurfingHereText: ; e5de (3:65de) TX_FAR _NoSurfingHereText db "@" BoxFullCannotThrowBallText: ; e5e3 (3:65e3) TX_FAR _BoxFullCannotThrowBallText db "@" ItemUseText00: ; e5e8 (3:65e8) TX_FAR _ItemUseText001 db $05 TX_FAR _ItemUseText002 db "@" GotOnBicycleText: ; e5f2 (3:65f2) TX_FAR _GotOnBicycleText1 db $05 TX_FAR _GotOnBicycleText2 db "@" GotOffBicycleText: ; e5fc (3:65fc) TX_FAR _GotOffBicycleText1 db $05 TX_FAR _GotOffBicycleText2 db "@" ; restores bonus PP (from PP Ups) when healing at a pokemon center ; also, when a PP Up is used, it increases the current PP by one PP Up bonus ; INPUT: ; [wWhichPokemon] = index of pokemon in party ; [$d11e] = mode ; 0: Pokemon Center healing ; 1: using a PP Up ; [wCurrentMenuItem] = index of move (when using a PP Up) RestoreBonusPP: ; e606 (3:6606) ld hl,W_PARTYMON1_MOVE1 ld bc,44 ld a,[wWhichPokemon] call AddNTimes push hl ld de,$cd78 - 1 ld a,$5e call Predef ; loads the normal max PP of each of the pokemon's moves to $cd78 pop hl ld c,21 ld b,0 add hl,bc ; hl now points to move 1 PP ld de,$cd78 ld b,0 ; initialize move counter to zero ; loop through the pokemon's moves .loop inc b ld a,b cp a,5 ; reached the end of the pokemon's moves? ret z ; if so, return ld a,[$d11e] dec a ; using a PP Up? jr nz,.skipMenuItemIDCheck ; if using a PP Up, check if this is the move it's being used on ld a,[wCurrentMenuItem] inc a cp b jr nz,.nextMove .skipMenuItemIDCheck ld a,[hl] and a,%11000000 ; have any PP Ups been used? call nz,AddBonusPP ; if so, add bonus PP .nextMove inc hl inc de jr .loop ; adds bonus PP from PP Ups to current PP ; 1/5 of normal max PP (capped at 7) is added for each PP Up ; INPUT: ; [de] = normal max PP ; [hl] = move PP ; [$d11e] = max number of times to add bonus ; set to 1 when using a PP Up, set to 255 otherwise AddBonusPP: ; e642 (3:6642) push bc ld a,[de] ; normal max PP of move ld [H_DIVIDEND + 3],a xor a ld [H_DIVIDEND],a ld [H_DIVIDEND + 1],a ld [H_DIVIDEND + 2],a ld a,5 ld [H_DIVISOR],a ld b,4 call Divide ld a,[hl] ; move PP ld b,a swap a and a,%00001111 srl a srl a ld c,a ; c = number of PP Ups used .loop ld a,[H_QUOTIENT + 3] cp a,8 ; is the amount greater than or equal to 8? jr c,.addAmount ld a,7 ; cap the amount at 7 .addAmount add b ld b,a ld a,[$d11e] dec a jr z,.done dec c jr nz,.loop .done ld [hl],b pop bc ret ; gets max PP of a pokemon's move (including PP from PP Ups) ; INPUT: ; [wWhichPokemon] = index of pokemon within party/box ; [$cc49] = pokemon source ; 00: player's party ; 01: enemy's party ; 02: current box ; 03: daycare ; 04: player's in-battle pokemon ; [wCurrentMenuItem] = move index ; OUTPUT: ; [$d11e] = max PP GetMaxPP: ; e677 (3:6677) ld a,[$cc49] and a ld hl,W_PARTYMON1_MOVE1 ld bc,44 jr z,.sourceWithMultipleMon ld hl,$d8ac ; enemy party dec a jr z,.sourceWithMultipleMon ld hl,$da9e ; current box ld bc,33 dec a jr z,.sourceWithMultipleMon ld hl,$da67 ; daycare dec a jr z,.sourceWithOneMon ld hl,W_PLAYERMONMOVES ; player's in-battle pokemon .sourceWithOneMon call GetSelectedMoveOffset2 jr .next .sourceWithMultipleMon call GetSelectedMoveOffset .next ld a,[hl] dec a push hl ld hl,Moves ld bc,6 call AddNTimes ld de,$cd6d ld a,BANK(Moves) call FarCopyData ld de,$cd72 ld a,[de] ld b,a ; b = normal max PP pop hl push bc ld bc,21 ; PP offset if not player's in-battle pokemon data ld a,[$cc49] cp a,4 ; player's in-battle pokemon? jr nz,.addPPOffset ld bc,17 ; PP offset if player's in-battle pokemon data .addPPOffset add hl,bc ld a,[hl] ; a = current PP and a,%11000000 ; get PP Up count pop bc or b ; place normal max PP in 6 lower bits of a ld h,d ld l,e inc hl ; hl = $cd73 ld [hl],a xor a ld [$d11e],a ; no limit on PP Up amount call AddBonusPP ; add bonus PP from PP Ups ld a,[hl] and a,%00111111 ; mask out the PP Up count ld [$d11e],a ; store max PP ret GetSelectedMoveOffset: ; e6e3 (3:66e3) ld a,[wWhichPokemon] call AddNTimes GetSelectedMoveOffset2: ; e6e9 (3:66e9) ld a,[wCurrentMenuItem] ld c,a ld b,0 add hl,bc ret ; confirms the item toss and then tosses the item ; INPUT: ; hl = address of inventory (either wNumBagItems or wNumBoxItems) ; [$cf91] = item ID ; [wWhichPokemon] = index of item within inventory ; [$cf96] = quantity to toss ; OUTPUT: ; clears carry flag if the item is tossed, sets carry flag if not TossItem_: ; e6f1 (3:66f1) push hl ld a,[$cf91] call IsItemHM pop hl jr c,.tooImportantToToss push hl call IsKeyItem_ ld a,[$d124] pop hl and a jr nz,.tooImportantToToss push hl ld a,[$cf91] ld [$d11e],a call GetItemName call CopyStringToCF4B ; copy name to $cf4b ld hl,IsItOKToTossItemText call PrintText FuncCoord 14,7 ld hl,Coord ld bc,$080f ld a,$14 ld [$d125],a call DisplayTextBoxID ; yes/no menu ld a,[$d12e] cp a,2 pop hl scf ret z ; if the player chose Yes push hl ld a,[wWhichPokemon] call RemoveItemFromInventory ld a,[$cf91] ld [$d11e],a call GetItemName call CopyStringToCF4B ; copy name to $cf4b ld hl,ThrewAwayItemText call PrintText pop hl and a ret .tooImportantToToss push hl ld hl,TooImportantToTossText call PrintText pop hl scf ret ThrewAwayItemText: ; e755 (3:6755) TX_FAR _ThrewAwayItemText db "@" IsItOKToTossItemText: ; e75a (3:675a) TX_FAR _IsItOKToTossItemText db "@" TooImportantToTossText: ; e75f (3:675f) TX_FAR _TooImportantToTossText db "@" ; checks if an item is a key item ; INPUT: ; [$cf91] = item ID ; OUTPUT: ; [$d124] = result ; 00: item is not key item ; 01: item is key item IsKeyItem_: ; e764 (3:6764) ld a,$01 ld [$d124],a ld a,[$cf91] cp a,HM_01 ; is the item an HM or TM? jr nc,.checkIfItemIsHM ; if the item is not an HM or TM push af ld hl,KeyItemBitfield ld de,$cee9 ld bc,15 ; only 11 bytes are actually used call CopyData pop af dec a ld c,a ld hl,$cee9 ld b,$02 ; test bit ld a,$10 call Predef ; bitfield operation function ld a,c and a ret nz .checkIfItemIsHM ld a,[$cf91] call IsItemHM ret c xor a ld [$d124],a ret KeyItemBitfield: ; e799 (3:6799) db %11110000 db %00000001 db %11110000 db %01001111 db %00000000 db %10011111 db %00000000 db %11000000 db %11110000 db %00111011 db %00000000 Func_e7a4: ; e7a4 (3:67a4) ld de, W_NUMINBOX ; $da80 ld a, [de] inc a ld [de], a ld a, [$cf91] ld [$d0b5], a ld c, a .asm_e7b1 inc de ld a, [de] ld b, a ld a, c ld c, b ld [de], a cp $ff jr nz, .asm_e7b1 call GetMonHeader ld hl, W_BOXMON1OT ld bc, $b ld a, [W_NUMINBOX] ; $da80 dec a jr z, .asm_e7ee dec a call AddNTimes push hl ld bc, $b add hl, bc ld d, h ld e, l pop hl ld a, [W_NUMINBOX] ; $da80 dec a ld b, a .asm_e7db push bc push hl ld bc, $b call CopyData pop hl ld d, h ld e, l ld bc, $fff5 add hl, bc pop bc dec b jr nz, .asm_e7db .asm_e7ee ld hl, W_PLAYERNAME ; $d158 ld de, W_BOXMON1OT ld bc, $b call CopyData ld a, [W_NUMINBOX] ; $da80 dec a jr z, .asm_e82a ld hl, W_BOXMON1NAME ld bc, $b dec a call AddNTimes push hl ld bc, $b add hl, bc ld d, h ld e, l pop hl ld a, [W_NUMINBOX] ; $da80 dec a ld b, a .asm_e817 push bc push hl ld bc, $b call CopyData pop hl ld d, h ld e, l ld bc, $fff5 add hl, bc pop bc dec b jr nz, .asm_e817 .asm_e82a ld hl, W_BOXMON1NAME ld a, $2 ld [$d07d], a ld a, $4e call Predef ; indirect jump to Func_64eb (64eb (1:64eb)) ld a, [W_NUMINBOX] ; $da80 dec a jr z, .asm_e867 ld hl, W_BOXMON1DATA ld bc, $21 dec a call AddNTimes push hl ld bc, $21 add hl, bc ld d, h ld e, l pop hl ld a, [W_NUMINBOX] ; $da80 dec a ld b, a .asm_e854 push bc push hl ld bc, $21 call CopyData pop hl ld d, h ld e, l ld bc, $ffdf add hl, bc pop bc dec b jr nz, .asm_e854 .asm_e867 ld a, [W_ENEMYMONLEVEL] ; $cff3 ld [W_ENEMYMONNUMBER], a ; $cfe8 ld hl, $cfe5 ld de, W_BOXMON1DATA ld bc, $c call CopyData ld hl, wPlayerID ; $d359 ld a, [hli] ld [de], a inc de ld a, [hl] ld [de], a inc de push de ld a, [W_CURENEMYLVL] ; $d127 ld d, a ld hl, CalcExperience ld b, BANK(CalcExperience) call Bankswitch pop de ld a, [H_NUMTOPRINT] ; $FF00+$96 (aliases: H_MULTIPLICAND) ld [de], a inc de ld a, [$FF00+$97] ld [de], a inc de ld a, [$FF00+$98] ld [de], a inc de xor a ld b, $a .asm_e89f ld [de], a inc de dec b jr nz, .asm_e89f ld hl, $cff1 ld a, [hli] ld [de], a inc de ld a, [hli] ld [de], a ld hl, W_ENEMYMONPP ; $cffe ld b, $4 .asm_e8b1 ld a, [hli] inc de ld [de], a dec b jr nz, .asm_e8b1 ret ; checks if the tile in front of the player is a shore or water tile ; used for surfing and fishing ; unsets carry if it is, sets carry if not IsNextTileShoreOrWater: ; e8b8 (3:68b8) ld a,[W_CURMAPTILESET] ld hl,WaterTilesets ld de,1 call IsInArray jr nc,.notShoreOrWater ld a,[W_CURMAPTILESET] cp a,$0e ; Vermilion Dock tileset ld a,[$cfc6] ; tile in front of player jr z,.skipShoreTiles ; if it's the Vermilion Dock tileset cp a,$48 ; eastern shore tile in Safari Zone jr z,.shoreOrWater cp a,$32 ; usual eastern shore tile jr z,.shoreOrWater .skipShoreTiles cp a,$14 ; water tile jr z,.shoreOrWater .notShoreOrWater scf ret .shoreOrWater and a ret ; tilesets with water WaterTilesets: ; e8e0 (3:68e0) db $00,$03,$05,$07,$0d,$0e,$11,$16,$17 db $ff ; terminator ReadSuperRodData: ; e8ea (3:68ea) ; return e = 2 if no fish on this map ; return e = 1 if a bite, bc = level,species ; return e = 0 if no bite ld a, [W_CURMAP] ld de, 3 ; each fishing group is three bytes wide ld hl, SuperRodData call IsInArray jr c, .ReadFishingGroup ld e, $2 ; $2 if no fishing groups found ret .ReadFishingGroup ; 0xe8f6 ; hl points to the fishing group entry in the index inc hl ; skip map id ; read fishing group address ld a, [hli] ld h, [hl] ld l, a ld b, [hl] ; how many mons in group inc hl ; point to data ld e, $0 ; no bite yet .RandomLoop ; 0xe90c call GenRandom srl a ret c ; 50% chance of no battle and %11 ; 2-bit random number cp b jr nc, .RandomLoop ; if a is greater than the number of mons, regenerate ; get the mon add a ld c, a ld b, $0 add hl, bc ld b, [hl] ; level inc hl ld c, [hl] ; species ld e, $1 ; $1 if there's a bite ret ; super rod data ; format: map, pointer to fishing group SuperRodData: ; e919 (3:6919) dbw PALLET_TOWN, FishingGroup1 dbw VIRIDIAN_CITY, FishingGroup1 dbw CERULEAN_CITY, FishingGroup3 dbw VERMILION_CITY, FishingGroup4 dbw CELADON_CITY, FishingGroup5 dbw FUCHSIA_CITY, FishingGroup10 dbw CINNABAR_ISLAND, FishingGroup8 dbw ROUTE_4, FishingGroup3 dbw ROUTE_6, FishingGroup4 dbw ROUTE_10, FishingGroup5 dbw ROUTE_11, FishingGroup4 dbw ROUTE_12, FishingGroup7 dbw ROUTE_13, FishingGroup7 dbw ROUTE_17, FishingGroup7 dbw ROUTE_18, FishingGroup7 dbw ROUTE_19, FishingGroup8 dbw ROUTE_20, FishingGroup8 dbw ROUTE_21, FishingGroup8 dbw ROUTE_22, FishingGroup2 dbw ROUTE_23, FishingGroup9 dbw ROUTE_24, FishingGroup3 dbw ROUTE_25, FishingGroup3 dbw CERULEAN_GYM, FishingGroup3 dbw VERMILION_DOCK, FishingGroup4 ;XXX syntax errors on the rest? dbw $A1, FishingGroup8 ; SEAFOAM_ISLANDS_4 dbw $A2, FishingGroup8 ; SEAFOAM_ISLANDS_5 dbw SAFARI_ZONE_EAST, FishingGroup6 dbw $DA, FishingGroup6 ; SAFARI_ZONE_NORTH dbw SAFARI_ZONE_WEST, FishingGroup6 dbw $DC, FishingGroup6 ; SAFARI_ZONE_CENTER dbw $E2, FishingGroup9 ; UNKNOWN_DUNGEON_2 dbw $E3, FishingGroup9 ; UNKNOWN_DUNGEON_3 dbw $E4, FishingGroup9 ; UNKNOWN_DUNGEON_1 db $FF ; fishing groups ; number of monsters, followed by level/monster pairs FishingGroup1: ; e97d (3:697d) db 2 db 15,TENTACOOL db 15,POLIWAG FishingGroup2: ; e982 (3:6982) db 2 db 15,GOLDEEN db 15,POLIWAG FishingGroup3: ; e987 (3:6987) db 3 db 15,PSYDUCK db 15,GOLDEEN db 15,KRABBY FishingGroup4: ; e98e (3:698e) db 2 db 15,KRABBY db 15,SHELLDER FishingGroup5: ; e993 (3:6993) db 2 db 23,POLIWHIRL db 15,SLOWPOKE FishingGroup6: ; e998 (3:6998) db 4 db 15,DRATINI db 15,KRABBY db 15,PSYDUCK db 15,SLOWPOKE FishingGroup7: ; e9a1 (3:69a1) db 4 db 5,TENTACOOL db 15,KRABBY db 15,GOLDEEN db 15,MAGIKARP FishingGroup8: ; e9aa (3:69aa) db 4 db 15,STARYU db 15,HORSEA db 15,SHELLDER db 15,GOLDEEN FishingGroup9: ; e9b3 (3:69b3) db 4 db 23,SLOWBRO db 23,SEAKING db 23,KINGLER db 23,SEADRA FishingGroup10: ; e9bc (3:69bc) db 4 db 23,SEAKING db 15,KRABBY db 15,GOLDEEN db 15,MAGIKARP ; reloads map view and processes sprite data ; for items that cause the overworld to be displayed ItemUseReloadOverworldData: ; e9c5 (3:69c5) call LoadCurrentMapView jp UpdateSprites Func_e9cb: ; e9cb (3:69cb) ld hl, WildDataPointers ; $4eeb ld de, $cee9 ld c, $0 .asm_e9d3 inc hl ld a, [hld] inc a jr z, .asm_e9ec push hl ld a, [hli] ld h, [hl] ld l, a ld a, [hli] and a call nz, Func_e9f0 ld a, [hli] and a call nz, Func_e9f0 pop hl inc hl inc hl inc c jr .asm_e9d3 .asm_e9ec ld a, $ff ld [de], a ret Func_e9f0: ; e9f0 (3:69f0) inc hl ld b, $a .asm_e9f3 ld a, [$d11e] cp [hl] jr nz, .asm_e9fc ld a, c ld [de], a inc de .asm_e9fc inc hl inc hl dec b jr nz, .asm_e9f3 dec hl ret DrawBadges: ; ea03 (3:6a03) ; Draw 4x2 gym leader faces, with the faces replaced by ; badges if they are owned. Used in the player status screen. ; In Japanese versions, names are displayed above faces. ; Instead of removing relevant code, the name graphics were erased. ; Tile ids for face/badge graphics. ld de, $cd3f ld hl, .FaceBadgeTiles ld bc, 8 call CopyData ; Booleans for each badge. ld hl, $cd49 ld bc, 8 xor a call FillMemory ; Alter these based on owned badges. ld de, $cd49 ld hl, $cd3f ld a, [W_OBTAINEDBADGES] ld b, a ld c, 8 .CheckBadge srl b jr nc, .NextBadge ld a, [hl] add 4 ; Badge graphics are after each face ld [hl], a ld a, 1 ld [de], a .NextBadge inc hl inc de dec c jr nz, .CheckBadge ; Draw two rows of badges. ld hl, $cd3d ld a, $d8 ; [1] ld [hli], a ld [hl], $60 ; First name FuncCoord 2, 11 ld hl, Coord ld de, $cd49 call .DrawBadgeRow FuncCoord 2, 14 ld hl, Coord ld de, $cd49 + 4 ; call .DrawBadgeRow ; ret .DrawBadgeRow ; ea4c (3:6a4c) ; Draw 4 badges. ld c, 4 .DrawBadge push de push hl ; Badge no. ld a, [$cd3d] ld [hli], a inc a ld [$cd3d], a ; Names aren't printed if the badge is owned. ld a, [de] and a ld a, [$cd3e] jr nz, .SkipName call .PlaceTiles jr .PlaceBadge .SkipName inc a inc a inc hl .PlaceBadge ld [$cd3e], a ld de, 20 - 1 add hl, de ld a, [$cd3f] call .PlaceTiles add hl, de call .PlaceTiles ; Shift badge array back one byte. push bc ld hl, $cd3f + 1 ld de, $cd3f ld bc, 8 call CopyData pop bc pop hl ld de, 4 add hl, de pop de inc de dec c jr nz, .DrawBadge ret .PlaceTiles ld [hli], a inc a ld [hl], a inc a ret .FaceBadgeTiles db $20, $28, $30, $38, $40, $48, $50, $58 GymLeaderFaceAndBadgeTileGraphics: ; ea9e (3:6a9e) INCBIN "gfx/badges.2bpp" Func_ee9e: ; ee9e (3:6e9e) call Load16BitRegisters ld hl, $c6e8 ld a, [W_CURMAPWIDTH] ; $d369 add $6 ld e, a ld d, $0 add hl, de add hl, de add hl, de ld e, $3 add hl, de ld e, a ld a, b and a jr z, .asm_eebb .asm_eeb7 add hl, de dec b jr nz, .asm_eeb7 .asm_eebb add hl, bc ld a, [$d09f] ld [hl], a ld a, [$d35f] ld c, a ld a, [$d360] ld b, a call Func_ef4e ret c push hl ld l, e ld h, $0 ld e, $6 ld d, h add hl, hl add hl, hl add hl, de add hl, bc pop bc call Func_ef4e ret c Func_eedc: ; eedc (3:6edc) ld a, [W_ISINBATTLE] ; $d057 inc a ret z ld a, [H_AUTOBGTRANSFERENABLED] ; $FF00+$ba push af ld a, [$FF00+$d7] push af xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld [$FF00+$d7], a call LoadCurrentMapView call GoPAL_SET_CF1C ld hl, $d526 ld a, [hli] ld h, [hl] ld l, a ld de, $ffc0 add hl, de ld a, h and $3 or $98 ld a, l ld [$cee9], a ld a, h ld [$ceea], a ld a, $2 ld [$FF00+$be], a ld c, $9 .asm_ef0f push bc push hl push hl ld hl, $c378 ld de, $14 ld a, [$FF00+$be] .asm_ef1a add hl, de dec a jr nz, .asm_ef1a call ScheduleRowRedrawHelper pop hl ld de, $20 ld a, [$FF00+$be] ld c, a .asm_ef28 add hl, de ld a, h and $3 or $98 dec c jr nz, .asm_ef28 ld [$FF00+$d2], a ld a, l ld [H_SCREENEDGEREDRAWADDR], a ; $FF00+$d1 ld a, $2 ld [H_SCREENEDGEREDRAW], a ; $FF00+$d0 call DelayFrame ld hl, $ffbe inc [hl] inc [hl] pop hl pop bc dec c jr nz, .asm_ef0f pop af ld [$FF00+$d7], a pop af ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ret Func_ef4e: ; ef4e (3:6f4e) ld a, h sub b ret nz ld a, l sub c ret Func_ef54: ; ef54 (3:6f54) xor a ld [$cd6a], a ld a, [W_CURMAPTILESET] ; $d367 and a jr z, .asm_ef6b cp $7 jr nz, .asm_ef77 ld a, [$cfc6] cp $50 jr nz, .asm_ef77 jr asm_ef82 .asm_ef6b dec a ld a, [$cfc6] cp $3d jr z, asm_ef82 cp $52 jr z, asm_ef82 .asm_ef77 ld hl, UnnamedText_ef7d ; $6f7d jp PrintText UnnamedText_ef7d: ; ef7d (3:6f7d) TX_FAR _UnnamedText_ef7d db "@" asm_ef82: ; ef82 (3:6f82) ld [$cd4d], a ld a, $1 ld [$cd6a], a ld a, [wWhichPokemon] ; $cf92 ld hl, W_PARTYMON1NAME ; $d2b5 call GetPartyMonName ld hl, $d730 set 6, [hl] call GBPalWhiteOutWithDelay3 call CleanLCD_OAM call Func_3dbe ld a, $90 ld [$FF00+$b0], a call Delay3 call LoadGBPal call LoadCurrentMapView call SaveScreenTilesToBuffer2 call Delay3 xor a ld [$FF00+$b0], a ld hl, UsedCutText ; $6ff2 call PrintText call LoadScreenTilesFromBuffer2 ld hl, $d730 res 6, [hl] ld a, $ff ld [$cfcb], a call Func_eff7 ld de, CutTreeBlockSwaps ; $7100 call Func_f09f call Func_eedc ld b, BANK(Func_79e96) ld hl, Func_79e96 call Bankswitch ld a, $1 ld [$cfcb], a ld a, $ac call PlaySound ld a, $90 ld [$FF00+$b0], a call UpdateSprites jp Func_eedc UsedCutText: ; eff2 (3:6ff2) TX_FAR _UsedCutText db "@" Func_eff7: ; eff7 (3:6ff7) xor a ld [$cd50], a ld a, $e4 ld [rOBP1], a ; $FF00+$49 ld a, [$cd4d] cp $52 jr z, .asm_f020 ld de, Tset00_GFX + $2d0 ; $42d0 ; cuttable tree sprite top row ld hl, $8fc0 ld bc, (BANK(Tset00_GFX) << 8) + $02 call CopyVideoData ld de, Tset00_GFX + $3d0 ; $43d0 ; cuttable tree sprite bottom row ld hl, $8fe0 ld bc, (BANK(Tset00_GFX) << 8) + $02 call CopyVideoData jr asm_f055 .asm_f020 ld hl, $8fc0 call Func_f04c ld hl, $8fd0 call Func_f04c ld hl, $8fe0 call Func_f04c ld hl, $8ff0 call Func_f04c call asm_f055 ld hl, $c393 ld de, $4 ld a, $30 ld c, e .asm_f044 ld [hl], a add hl, de xor $60 dec c jr nz, .asm_f044 ret Func_f04c: ; f04c (3:704c) ld de, AnimationTileset2 + $60 ; $474e ; tile depicting a leaf ld bc, (BANK(AnimationTileset2) << 8) + $01 jp CopyVideoData asm_f055: ; f055 (3:7055) call Func_f068 ld a, $9 ld de, UnknownOAM_f060 ; $7060 jp WriteOAMBlock UnknownOAM_f060: ; f060 (3:7060) db $FC,$10,$FD,$10 db $FE,$10,$FF,$10 Func_f068: ; f068 (3:7068) ld hl, $c104 ld a, [hli] ld b, a inc hl ld a, [hli] ld c, a ; bc holds ypos/xpos of player's sprite inc hl inc hl ld a, [hl] ; a holds direction of player (00: down, 04: up, 08: left, 0C: right) srl a ld e, a ld d, $0 ; de holds direction (00: down, 02: up, 04: left, 06: right) ld a, [$cd50] and a ld hl, CutTreeAnimationOffsets ; $708f jr z, .asm_f084 ld hl, CutTreeAnimationOffsets2 ; $7097 .asm_f084 add hl, de ld e, [hl] inc hl ld d, [hl] ld a, b add d ld b, a ld a, c add e ld c, a ret CutTreeAnimationOffsets: ; f08f (3:708f) ; Each pair represents the x and y pixels offsets from the player of where the cut tree animation should be drawn db 8, 36 ; player is facing down db 8, 4 ; player is facing up db -8, 20 ; player is facing left db 24, 20 ; player is facing right CutTreeAnimationOffsets2: ; f097 (3:7097) ; Not sure if these ever get used. CutTreeAnimationOffsets only seems to be used. ; Each pair represents the x and y pixels offsets from the player of where the cut tree animation should be drawn ; These offsets represent 2 blocks away from the player db 8, 52 ; player is facing down db 8, -12 ; player is facing up db -24, 20 ; player is facing left db 40, 20 ; player is facing right Func_f09f: ; f09f (3:709f) push de ld a, [W_CURMAPWIDTH] ; $d369 add $6 ld c, a ld b, $0 ld d, $0 ld hl, $d35f ld a, [hli] ld h, [hl] ld l, a add hl, bc ld a, [$c109] and a jr z, .asm_f0c7 cp $4 jr z, .asm_f0cf cp $8 jr z, .asm_f0d7 ld a, [W_XBLOCKCOORD] ; $d364 and a jr z, .asm_f0e0 jr .asm_f0ec .asm_f0c7 ld a, [W_YBLOCKCOORD] ; $d363 and a jr z, .asm_f0e0 jr .asm_f0df .asm_f0cf ld a, [W_YBLOCKCOORD] ; $d363 and a jr z, .asm_f0e1 jr .asm_f0e0 .asm_f0d7 ld a, [W_XBLOCKCOORD] ; $d364 and a jr z, .asm_f0e6 jr .asm_f0e0 .asm_f0df add hl, bc .asm_f0e0 add hl, bc .asm_f0e1 ld e, $2 add hl, de jr .asm_f0f0 .asm_f0e6 ld e, $1 add hl, bc add hl, de jr .asm_f0f0 .asm_f0ec ld e, $3 add hl, bc add hl, de .asm_f0f0 pop de ld a, [hl] ld c, a .asm_f0f3 ld a, [de] inc de inc de cp $ff ret z cp c jr nz, .asm_f0f3 dec de ld a, [de] ld [hl], a ret CutTreeBlockSwaps: ; f100 (3:7100) ; first byte = tileset block containing the cut tree ; second byte = corresponding tileset block after the cut animation happens db $32, $6D db $33, $6C db $34, $6F db $35, $4C db $60, $6E db $0B, $0A db $3C, $35 db $3F, $35 db $3D, $36 db $FF ; list terminator Func_f113: ; f113 (3:7113) ld a, [W_CURMAP] ; $d35e cp ROUTE_1 jr nc, .notInTown ld c, a ld b, $1 ld hl, W_TOWNVISITEDFLAG ; mark town as visited (for flying) ld a, $10 call Predef ; indirect jump to HandleBitArray (f666 (3:7666)) .notInTown ld hl, MapHSPointers ld a, [W_CURMAP] ; $d35e ld b, $0 ld c, a add hl, bc add hl, bc ld a, [hli] ; load missable objects pointer in hl ld h, [hl] Func_f132: ; f132 (3:7132) ld l, a push hl ld de, MapHS00 ; calculate difference between out pointer and the base pointer ld a, l sub e jr nc, .asm_f13c dec h .asm_f13c ld l, a ld a, h sub d ld h, a ld a, h ld [H_DIVIDEND], a ld a, l ld [H_DIVIDEND+1], a xor a ld [H_DIVIDEND+2], a ld [H_DIVIDEND+3], a ld a, $3 ld [H_DIVISOR], a ld b, $2 call Divide ; divide difference by 3, resulting in the global offset (number of missable items before ours) ld a, [W_CURMAP] ; $d35e ld b, a ld a, [H_DIVIDEND+3] ld c, a ; store global offset in c ld de, W_MISSABLEOBJECTLIST pop hl .writeMissableObjectsListLoop ld a, [hli] cp $ff jr z, .done ; end of list cp b jr nz, .done ; not for current map anymore ld a, [hli] inc hl ld [de], a ; write (map-local) sprite ID inc de ld a, c inc c ld [de], a ; write (global) missable object index inc de jr .writeMissableObjectsListLoop .done ld a, $ff ld [de], a ; write sentinel ret InitializeMissableObjectsFlags: ; f175 (3:7175) ld hl, W_MISSABLEOBJECTFLAGS ld bc, $20 xor a call FillMemory ; clear missable objects flags ld hl, MapHS00 xor a ld [$d048], a .missableObjectsLoop ld a, [hli] cp $ff ; end of list ret z push hl inc hl ld a, [hl] cp Hide jr nz, .asm_f19d ld hl, W_MISSABLEOBJECTFLAGS ld a, [$d048] ld c, a ld b, $1 call HandleBitArray2 ; set flag iff Item is hidden .asm_f19d ld hl, $d048 inc [hl] pop hl inc hl inc hl jr .missableObjectsLoop ; tests if current sprite is a missable object that is hidden/has been removed IsMissableObjectHidden: ; f1a6 (3:71a6) ld a, [H_CURRENTSPRITEOFFSET] swap a ld b, a ld hl, W_MISSABLEOBJECTLIST .loop ld a, [hli] cp $ff jr z, .notHidden ; not missable -> not hidden cp b ld a, [hli] jr nz, .loop ld c, a ld b, $2 ld hl, W_MISSABLEOBJECTFLAGS call HandleBitArray2 ld a, c and a jr nz, .hidden .notHidden xor a .hidden ld [$FF00+$e5], a ret ; adds missable object (items, leg. pokemon, etc.) to the map ; [$cc4d]: index of the missable object to be added (global index) AddMissableObject: ; f1c8 (3:71c8) ld hl, W_MISSABLEOBJECTFLAGS ld a, [$cc4d] ld c, a ld b, $0 call HandleBitArray2 ; reset "removed" flag jp UpdateSprites ; removes missable object (items, leg. pokemon, etc.) from the map ; [$cc4d]: index of the missable object to be removed (global index) RemoveMissableObject: ; f1d7 (3:71d7) ld hl, W_MISSABLEOBJECTFLAGS ld a, [$cc4d] ld c, a ld b, $1 call HandleBitArray2 ; set "removed" flag jp UpdateSprites ; functionally identical to _HandleBitArray, but with less optimized instructions ; executes operations on a field of bits ; b = 0 -> reset bit ; b = 1 -> set bit ; b = 2 -> read bit (into c and z-flag) ; hl: base address ; c: bit index HandleBitArray2: ; f1e6 (3:71e6) push hl push de push bc ld a, c ld d, a and $7 ld e, a ; store bit offset in e ld a, d srl a srl a srl a ; calc byte offset add l ld l, a jr nc, .noCarry inc h .noCarry inc e ld d, $1 .shiftLeftLoop ; d = 1 << e, bitmask for the used bit dec e jr z, .operationSelect sla d jr .shiftLeftLoop .operationSelect ld a, b and a jr z, .resetBit cp $2 jr z, .readBit ld a, [hl] ; set bit ld b, a ld a, d or b ld [hl], a jr .done .resetBit ld a, [hl] ld b, a ld a, d xor $ff and b ld [hl], a jr .done .readBit ld a, [hl] ld b, a ld a, d and b .done pop bc pop de pop hl ld c, a ret Func_f225: ; f225 (3:7225) ld a, [$d728] bit 0, a ret z ld a, [wFlags_0xcd60] bit 1, a ret nz xor a ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call IsSpriteInFrontOfPlayer ld a, [H_DOWNARROWBLINKCNT2] ; $FF00+$8c ld [$d718], a and a jp z, Func_f2dd ld hl, $c101 ld d, $0 ld a, [H_DOWNARROWBLINKCNT2] ; $FF00+$8c swap a ld e, a add hl, de res 7, [hl] call GetSpriteMovementByte2Pointer ld a, [hl] cp $10 jp nz, Func_f2dd ld hl, wFlags_0xcd60 bit 6, [hl] set 6, [hl] ret z ld a, [H_CURRENTPRESSEDBUTTONS] and $f0 ret z ld a, $5a call Predef ; indirect jump to Func_c60b (c60b (3:460b)) ld a, [$d71c] and a jp nz, Func_f2dd ld a, [H_CURRENTPRESSEDBUTTONS] ld b, a ld a, [$c109] cp $4 jr z, .asm_f289 cp $8 jr z, .asm_f291 cp $c jr z, .asm_f299 bit 7, b ret z ld de, MovementData_f2af jr .asm_f29f .asm_f289 bit 6, b ret z ld de, MovementData_f2ad jr .asm_f29f .asm_f291 bit 5, b ret z ld de, MovementData_f2b1 jr .asm_f29f .asm_f299 bit 4, b ret z ld de, MovementData_f2b3 .asm_f29f call MoveSprite ld a, $a8 call PlaySound ld hl, wFlags_0xcd60 set 1, [hl] ret MovementData_f2ad: ; f2ad (3:72ad) db $40,$FF MovementData_f2af: ; f2af (3:72af) db $00,$FF MovementData_f2b1: ; f2b1 (3:72b1) db $80,$FF MovementData_f2b3: ; f2b3 (3:72b3) db $C0,$FF Func_f2b5: ; f2b5 (3:72b5) ld a, [$d730] bit 0, a ret nz ld hl, Func_79f54 ld b, BANK(Func_79f54) call Bankswitch call DiscardButtonPresses ld [wJoypadForbiddenButtonsMask], a call Func_f2dd set 7, [hl] ld a, [$d718] ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call GetSpriteMovementByte2Pointer ld [hl], $10 ld a, $ac jp PlaySound Func_f2dd: ; f2dd (3:72dd) ld hl, wFlags_0xcd60 res 1, [hl] res 6, [hl] ret _AddPokemonToParty: ; f2e5 (3:72e5) ld de, W_NUMINPARTY ; $d163 ld a, [$cc49] and $f jr z, .asm_f2f2 ld de, wEnemyPartyCount ; $d89c .asm_f2f2 ld a, [de] inc a cp $7 ret nc ld [de], a ld a, [de] ld [$FF00+$e4], a add e ld e, a jr nc, .asm_f300 inc d .asm_f300 ld a, [$cf91] ld [de], a inc de ld a, $ff ld [de], a ld hl, W_PARTYMON1OT ; $d273 ld a, [$cc49] and $f jr z, .asm_f315 ld hl, W_ENEMYMON1OT .asm_f315 ld a, [$FF00+$e4] dec a call SkipFixedLengthTextEntries ld d, h ld e, l ld hl, W_PLAYERNAME ; $d158 ld bc, $b call CopyData ld a, [$cc49] and a jr nz, .asm_f33f ld hl, W_PARTYMON1NAME ; $d2b5 ld a, [$FF00+$e4] dec a call SkipFixedLengthTextEntries ld a, $2 ld [$d07d], a ld a, $4e call Predef ; indirect jump to Func_64eb (64eb (1:64eb)) .asm_f33f ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA) ld a, [$cc49] and $f jr z, .asm_f34c ld hl, wEnemyMons ; $d8a4 .asm_f34c ld a, [$FF00+$e4] dec a ld bc, $2c call AddNTimes ld e, l ld d, h push hl ld a, [$cf91] ld [$d0b5], a call GetMonHeader ld hl, W_MONHEADER ld a, [hli] ld [de], a inc de pop hl push hl ld a, [$cc49] and $f ld a, $98 ; set enemy trainer mon IVs to fixed average values ld b, $88 jr nz, .writeFreshMonData ld a, [$cf91] ld [$d11e], a push de ld a, $3a call Predef ; indirect jump to IndexToPokedex (41010 (10:5010)) pop de ld a, [$d11e] dec a ld c, a ld b, $2 ld hl, wPokedexOwned ; $d2f7 call _HandleBitArray ld a, c ld [$d153], a ld a, [$d11e] dec a ld c, a ld b, $1 push bc call _HandleBitArray pop bc ld hl, wPokedexSeen ; $d30a call _HandleBitArray pop hl push hl ld a, [W_ISINBATTLE] ; $d057 and a jr nz, .copyEnemyMonData call GenRandom ; generate random IVs ld b, a call GenRandom .writeFreshMonData ; f3b3 push bc ld bc, $1b add hl, bc pop bc ld [hli], a ld [hl], b ; write IVs ld bc, $fff4 add hl, bc ld a, $1 ld c, a xor a ld b, a call CalcStat ; calc HP stat (set cur Hp to max HP) ld a, [H_MULTIPLICAND+1] ld [de], a inc de ld a, [H_MULTIPLICAND+2] ld [de], a inc de xor a ld [de], a ; level (?) inc de ld [de], a ; status ailments inc de jr .copyMonTypesAndMoves .copyEnemyMonData ld bc, $1b add hl, bc ld a, [W_ENEMYMONATKDEFIV] ; copy IVs from cur enemy mon ld [hli], a ld a, [W_ENEMYMONSPDSPCIV] ld [hl], a ld a, [W_ENEMYMONCURHP] ; copy HP from cur enemy mon ld [de], a inc de ld a, [W_ENEMYMONCURHP+1] ld [de], a inc de xor a ld [de], a ; level (?) inc de ld a, [W_ENEMYMONSTATUS] ; copy status ailments from cur enemy mon ld [de], a inc de .copyMonTypesAndMoves ld hl, W_MONHTYPES ld a, [hli] ; type 1 ld [de], a inc de ld a, [hli] ; type 2 ld [de], a inc de ld a, [hli] ; unused (?) ld [de], a ld hl, W_MONHMOVES ld a, [hli] inc de push de ld [de], a ld a, [hli] inc de ld [de], a ld a, [hli] inc de ld [de], a ld a, [hli] inc de ld [de], a push de dec de dec de dec de xor a ld [$cee9], a ld a, $3e call Predef ; indirect jump to WriteMonMoves (3afb8 (e:6fb8)) pop de ld a, [wPlayerID] ; set trainer ID to player ID inc de ld [de], a ld a, [wPlayerID + 1] inc de ld [de], a push de ld a, [W_CURENEMYLVL] ld d, a ld hl, CalcExperience ld b, BANK(CalcExperience) call Bankswitch pop de inc de ld a, [H_MULTIPLICAND] ; write experience ld [de], a inc de ld a, [H_MULTIPLICAND+1] ld [de], a inc de ld a, [H_MULTIPLICAND+2] ld [de], a xor a ld b, $a .writeEVsLoop ; set all EVs to 0 inc de ld [de], a dec b jr nz, .writeEVsLoop inc de inc de pop hl call AddPokemonToParty_WriteMovePP inc de ld a, [W_CURENEMYLVL] ; $d127 ld [de], a inc de ld a, [W_ISINBATTLE] ; $d057 dec a jr nz, .calcFreshStats ld hl, W_ENEMYMONMAXHP ; $cff4 ld bc, $a call CopyData ; copy stats of cur enemy mon pop hl jr .done .calcFreshStats pop hl ld bc, $10 add hl, bc ld b, $0 call CalcStats ; calculate fresh set of stats .done scf ret LoadMovePPs: ; f473 (3:7473) call Load16BitRegisters ; fallthrough AddPokemonToParty_WriteMovePP: ; f476 (3:7476) ld b, $4 .pploop ld a, [hli] ; read move ID and a jr z, .empty dec a push hl push de push bc ld hl, Moves ld bc, $6 call AddNTimes ld de, $cd6d ld a, BANK(Moves) call FarCopyData pop bc pop de pop hl ld a, [$cd72] ; sixth move byte = pp .empty inc de ld [de], a dec b jr nz, .pploop ; there are still moves to read ret ; adds enemy mon [$cf91] (at position [$cf92] in enemy list) to own party ; no known uses in the game _AddEnemyMonToPlayerParty: ; f49d (3:749d) ld hl, W_NUMINPARTY ld a, [hl] cp $6 scf ret z ; party full, return failure inc a ld [hl], a ; add 1 to party members ld c, a ld b, $0 add hl, bc ld a, [$cf91] ld [hli], a ; add mon as last list entry ld [hl], $ff ; write new sentinel ld hl, W_PARTYMON1DATA ld a, [W_NUMINPARTY] dec a ld bc, W_PARTYMON2DATA - W_PARTYMON1DATA call AddNTimes ld e, l ld d, h ld hl, $cf98 call CopyData ; write new mon's data (from $cf98) ld hl, W_PARTYMON1OT ld a, [W_NUMINPARTY] dec a call SkipFixedLengthTextEntries ld d, h ld e, l ld hl, W_ENEMYMON1OT ld a, [wWhichPokemon] call SkipFixedLengthTextEntries ld bc, $000b call CopyData ; write new mon's OT name (from an enemy mon) ld hl, W_PARTYMON1NAME ld a, [W_NUMINPARTY] dec a call SkipFixedLengthTextEntries ld d, h ld e, l ld hl, W_ENEMYMON1NAME ld a, [wWhichPokemon] call SkipFixedLengthTextEntries ld bc, $000b call CopyData ; write new mon's nickname (from an enemy mon) ld a, [$cf91] ld [$d11e], a ld a, $3a call Predef ld a, [$d11e] dec a ld c, a ld b, $1 ld hl, wPokedexOwned push bc call _HandleBitArray ; add to owned pokemon pop bc ld hl, wPokedexSeen call _HandleBitArray ; add to seen pokemon and a ret ; return success Func_f51e: ; f51e (3:751e) ld a, [$cf95] and a jr z, .checkPartyMonSlots cp $2 jr z, .checkPartyMonSlots cp $3 ld hl, W_DAYCAREMONDATA jr z, .asm_f575 ld hl, W_NUMINBOX ; $da80 ld a, [hl] cp $14 jr nz, .partyOrBoxNotFull jr .boxFull .checkPartyMonSlots ld hl, W_NUMINPARTY ; $d163 ld a, [hl] cp $6 jr nz, .partyOrBoxNotFull .boxFull scf ret .partyOrBoxNotFull inc a ld [hl], a ; increment number of mons in party/box ld c, a ld b, $0 add hl, bc ld a, [$cf95] cp $2 ld a, [W_DAYCAREMONDATA] jr z, .asm_f556 ld a, [$cf91] .asm_f556 ld [hli], a ; write new mon ID ld [hl], $ff ; write new sentinel ld a, [$cf95] dec a ld hl, W_PARTYMON1DATA ; $d16b ld bc, W_PARTYMON2DATA - W_PARTYMON1DATA ; $2c ld a, [W_NUMINPARTY] ; $d163 jr nz, .skipToNewMonEntry ld hl, W_BOXMON1DATA ld bc, W_BOXMON2DATA - W_BOXMON1DATA ; $21 ld a, [W_NUMINBOX] ; $da80 .skipToNewMonEntry dec a call AddNTimes .asm_f575 push hl ld e, l ld d, h ld a, [$cf95] and a ld hl, W_BOXMON1DATA ld bc, W_BOXMON2DATA - W_BOXMON1DATA ; $21 jr z, .asm_f591 cp $2 ld hl, W_DAYCAREMONDATA jr z, .asm_f597 ld hl, W_PARTYMON1DATA ; $d16b ld bc, W_PARTYMON2DATA - W_PARTYMON1DATA ; $2c .asm_f591 ld a, [wWhichPokemon] ; $cf92 call AddNTimes .asm_f597 push hl push de ld bc, $21 call CopyData pop de pop hl ld a, [$cf95] and a jr z, .asm_f5b4 cp $2 jr z, .asm_f5b4 ld bc, $21 add hl, bc ld a, [hl] inc de inc de inc de ld [de], a .asm_f5b4 ld a, [$cf95] cp $3 ld de, W_DAYCAREMONOT jr z, .asm_f5d3 dec a ld hl, W_PARTYMON1OT ; $d273 ld a, [W_NUMINPARTY] ; $d163 jr nz, .asm_f5cd ld hl, W_BOXMON1OT ld a, [W_NUMINBOX] ; $da80 .asm_f5cd dec a call SkipFixedLengthTextEntries ld d, h ld e, l .asm_f5d3 ld hl, W_BOXMON1OT ld a, [$cf95] and a jr z, .asm_f5e6 ld hl, W_DAYCAREMONOT cp $2 jr z, .asm_f5ec ld hl, W_PARTYMON1OT ; $d273 .asm_f5e6 ld a, [wWhichPokemon] ; $cf92 call SkipFixedLengthTextEntries .asm_f5ec ld bc, $b call CopyData ld a, [$cf95] cp $3 ld de, W_DAYCAREMONNAME jr z, .asm_f611 dec a ld hl, W_PARTYMON1NAME ; $d2b5 ld a, [W_NUMINPARTY] ; $d163 jr nz, .asm_f60b ld hl, W_BOXMON1NAME ld a, [W_NUMINBOX] ; $da80 .asm_f60b dec a call SkipFixedLengthTextEntries ld d, h ld e, l .asm_f611 ld hl, W_BOXMON1NAME ld a, [$cf95] and a jr z, .asm_f624 ld hl, W_DAYCAREMONNAME cp $2 jr z, .asm_f62a ld hl, W_PARTYMON1NAME ; $d2b5 .asm_f624 ld a, [wWhichPokemon] ; $cf92 call SkipFixedLengthTextEntries .asm_f62a ld bc, $b call CopyData pop hl ld a, [$cf95] cp $1 jr z, .asm_f664 cp $3 jr z, .asm_f664 push hl srl a add $2 ld [$cc49], a call LoadMonData ld b, BANK(Func_58f43) ld hl, Func_58f43 call Bankswitch ld a, d ld [W_CURENEMYLVL], a ; $d127 pop hl ld bc, $21 add hl, bc ld [hli], a ld d, h ld e, l ld bc, $ffee add hl, bc ld b, $1 call CalcStats .asm_f664 and a ret ; predef $10 ; executes operations on a field of bits ; b = 0 -> reset bit ; b = 1 -> set bit ; b = 2 -> read bit (into c and z-flag) ; hl: base address ; c: bit index HandleBitArray: ; f666 (3:7666) call Load16BitRegisters _HandleBitArray: ; f669 (3:7669) push hl push de push bc ld a, c ld d, a and $7 ld e, a ; store bit offset in e ld a, d srl a srl a srl a ; calc byte offset add l ld l, a jr nc, .noCarry inc h .noCarry inc e ld d, $1 .shiftLeftLoop ; d = 1 << e, bitmask for the used bit dec e jr z, .operationSelect sla d jr .shiftLeftLoop .operationSelect ld a, b and a jr z, .resetBit cp $2 jr z, .readBit ld b, [hl] ; set bit ld a, d or b ld [hl], a jr .done .resetBit ld b, [hl] ld a, d xor $ff and b ld [hl], a jr .done .readBit ld b, [hl] ld a, d and b .done pop bc pop de pop hl ld c, a ret HealParty: ; f6a5 (3:76a5) ld hl, W_PARTYMON1 ld de, W_PARTYMON1_HP .HealPokemon: ; f6ab (3:76ab) ld a, [hli] cp $ff jr z, .DoneHealing ; End if there's no Pokémon push hl push de ld hl, $0003 ; Status offset add hl, de xor a ld [hl], a ; Clean status conditions push de ld b, $4 ; A Pokémon has 4 moves .RestorePP: ; f6bb (3:76bb) ld hl, $0007 ; Move offset add hl, de ld a, [hl] and a jr z, .HealNext ; Skip if there's no move here dec a ld hl, $001c ; PP offset add hl, de push hl push de push bc ld hl, Moves ld bc, $0006 call AddNTimes ld de, $cd6d ld a, BANK(Moves) call FarCopyData ; copy move header to memory ld a, [$cd72] ; get default PP pop bc pop de pop hl inc de push bc ld b, a ld a, [hl] and $c0 add b ld [hl], a pop bc .HealNext: ; f6eb (3:76eb) dec b jr nz, .RestorePP ; Continue if there's still moves pop de ld hl, $0021 ; Max HP offset add hl, de ld a, [hli] ld [de], a inc de ld a, [hl] ld [de], a ; Restore full HP pop de pop hl push hl ld bc, $002c ld h, d ld l, e add hl, bc ld d, h ld e, l pop hl jr .HealPokemon ; Next Pokémon .DoneHealing xor a ld [wWhichPokemon], a ld [$d11e], a ld a, [W_NUMINPARTY] ld b, a .restoreBonusPPLoop ; loop to restore bonus PP from PP Ups push bc call RestoreBonusPP pop bc ld hl, wWhichPokemon inc [hl] dec b jr nz,.restoreBonusPPLoop ret ; predef $9 ; predef $a ; predef $d ; predef $e Func_f71e: ; f71e (3:771e) call Load16BitRegisters xor a ld [$FF00+$a5], a ld [$FF00+$a6], a ld [$FF00+$a7], a ld d, $1 .asm_f72a ld a, [$FF00+$a2] and $f0 jr nz, .asm_f75b inc d ld a, [$FF00+$a2] swap a and $f0 ld b, a ld a, [$FF00+$a3] swap a ld [$FF00+$a3], a and $f or b ld [$FF00+$a2], a ld a, [$FF00+$a3] and $f0 ld b, a ld a, [$FF00+$a4] swap a ld [$FF00+$a4], a and $f or b ld [$FF00+$a3], a ld a, [$FF00+$a4] and $f0 ld [$FF00+$a4], a jr .asm_f72a .asm_f75b push de push de call Func_f800 pop de ld a, b swap a and $f0 ld [$FF00+$a5], a dec d jr z, .asm_f7bc push de call Func_f7d7 call Func_f800 pop de ld a, [$FF00+$a5] or b ld [$FF00+$a5], a dec d jr z, .asm_f7bc push de call Func_f7d7 call Func_f800 pop de ld a, b swap a and $f0 ld [$FF00+$a6], a dec d jr z, .asm_f7bc push de call Func_f7d7 call Func_f800 pop de ld a, [$FF00+$a6] or b ld [$FF00+$a6], a dec d jr z, .asm_f7bc push de call Func_f7d7 call Func_f800 pop de ld a, b swap a and $f0 ld [$FF00+$a7], a dec d jr z, .asm_f7bc push de call Func_f7d7 call Func_f800 pop de ld a, [$FF00+$a7] or b ld [$FF00+$a7], a .asm_f7bc ld a, [$FF00+$a5] ld [$FF00+$a2], a ld a, [$FF00+$a6] ld [$FF00+$a3], a ld a, [$FF00+$a7] ld [$FF00+$a4], a pop de ld a, $6 sub d and a ret z .asm_f7ce push af call Func_f7d7 pop af dec a jr nz, .asm_f7ce ret Func_f7d7: ; f7d7 (3:77d7) ld a, [$FF00+$a4] swap a and $f ld b, a ld a, [$FF00+$a3] swap a ld [$FF00+$a3], a and $f0 or b ld [$FF00+$a4], a ld a, [$FF00+$a3] and $f ld b, a ld a, [$FF00+$a2] swap a ld [$FF00+$a2], a and $f0 or b ld [$FF00+$a3], a ld a, [$FF00+$a2] and $f ld [$FF00+$a2], a ret Func_f800: ; f800 (3:7800) ld bc, $3 .asm_f803 ld de, $ff9f ld hl, $ffa2 push bc call StringCmp pop bc ret c inc b ld de, $ffa1 ld hl, $ffa4 push bc call Func_f839 pop bc jr .asm_f803 Func_f81d: ; f81d (3:781d) call Load16BitRegisters and a ld b, c .asm_f822 ld a, [de] adc [hl] daa ld [de], a dec de dec hl dec c jr nz, .asm_f822 jr nc, .asm_f835 ld a, $99 inc de .asm_f830 ld [de], a inc de dec b jr nz, .asm_f830 .asm_f835 ret Func_f836: ; f836 (3:7836) call Load16BitRegisters Func_f839: ; f839 (3:7839) and a ld b, c .asm_f83b ld a, [de] sbc [hl] daa ld [de], a dec de dec hl dec c jr nz, .asm_f83b jr nc, .asm_f84f ld a, $0 inc de .asm_f849 ld [de], a inc de dec b jr nz, .asm_f849 scf .asm_f84f ret InitializePlayerData: ; f850 (3:7850) call GenRandom ld a, [H_RAND2] ld [wPlayerID], a ; set player trainer id call GenRandom ld a, [H_RAND1] ld [wPlayerID + 1], a ld a, $ff ld [$d71b], a ; XXX what's this? ld hl, W_NUMINPARTY ; $d163 call InitializeEmptyList ; no party mons ld hl, W_NUMINBOX ; $da80 call InitializeEmptyList ; no boxed mons ld hl, wNumBagItems ; $d31d call InitializeEmptyList ; no items ld hl, wNumBoxItems ; $d53a call InitializeEmptyList ; no boxed items ld hl, wPlayerMoney + 1 ; $d348 ld a, $30 ld [hld], a ; set money to 00 30 00 (3000) xor a ld [hli], a inc hl ld [hl], a ld [$cc49], a ; XXX what's this? ld hl, W_OBTAINEDBADGES ; $d356 ld [hli], a ; no badges obtained ld [hl], a ; XXX what's this? ld hl, wPlayerCoins ; $d5a4 ld [hli], a ; no coins ld [hl], a ld hl, W_GAMEPROGRESSFLAGS ; $d5f0 ld bc, $c8 call FillMemory ; clear all game progress flags jp InitializeMissableObjectsFlags ; writes two bytes $00 $ff to hl InitializeEmptyList: ; f8a0 (3:78a0) xor a ld [hli], a dec a ld [hl], a ret Func_f8a5: ; f8a5 (3:78a5) call Load16BitRegisters ld hl, wNumBagItems ; $d31d .asm_f8ab inc hl ld a, [hli] cp $ff jr z, .asm_f8b7 cp b jr nz, .asm_f8ab ld a, [hl] ld b, a ret .asm_f8b7 ld b, $0 ret Func_f8ba: ; f8ba (3:78ba) xor a ld hl, $ff97 ld [hli], a ld [hli], a ld [hli], a ld [hl], a ld hl, $cc97 ld de, $0 Func_f8c8: ; f8c8 (3:78c8) ld a, [H_REMAINDER] ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) ld b, a ld a, [H_DIVIDEND] ; $FF00+$95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) call CalcDifference ld d, a and a jr nz, .asm_f8da ld a, [$FF00+$98] set 0, a ld [$FF00+$98], a .asm_f8da ld a, [$FF00+$9a] ld b, a ld a, [H_NUMTOPRINT] ; $FF00+$96 (aliases: H_MULTIPLICAND) call CalcDifference ld e, a and a jr nz, .asm_f8ec ld a, [$FF00+$98] set 1, a ld [$FF00+$98], a .asm_f8ec ld a, [$FF00+$98] cp $3 jr z, .asm_f926 ld a, e cp d jr c, .asm_f90a ld a, [$FF00+$9d] bit 1, a jr nz, .asm_f900 ld d, $c0 jr .asm_f902 .asm_f900 ld d, $80 .asm_f902 ld a, [$FF00+$9a] add $1 ld [$FF00+$9a], a jr .asm_f91c .asm_f90a ld a, [$FF00+$9d] bit 0, a jr nz, .asm_f914 ld d, $0 jr .asm_f916 .asm_f914 ld d, $40 .asm_f916 ld a, [H_REMAINDER] ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) add $1 ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) .asm_f91c ld a, d ld [hli], a ld a, [$FF00+$97] inc a ld [$FF00+$97], a jp Func_f8c8 .asm_f926 ld [hl], $ff ret Func_f929: ; f929 (3:7929) xor a ld [$FF00+$9d], a ld a, [$c104] ld d, a ld a, [$c106] ld e, a ld hl, wSpriteStateData1 ld a, [H_DIVIDEND] ; $FF00+$95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) add l add $4 ld l, a jr nc, .asm_f940 inc h .asm_f940 ld a, d ld b, a ld a, [hli] call CalcDifference jr nc, .asm_f953 push hl ld hl, $ff9d bit 0, [hl] set 0, [hl] pop hl jr .asm_f95c .asm_f953 push hl ld hl, $ff9d bit 0, [hl] res 0, [hl] pop hl .asm_f95c push hl ld hl, $ffe5 ld [hli], a ld a, $10 ld [hli], a call Func_366b ld a, [hl] ld [H_DIVIDEND], a ; $FF00+$95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) pop hl inc hl ld b, e ld a, [hl] call CalcDifference jr nc, .asm_f97e push hl ld hl, $ff9d bit 1, [hl] set 1, [hl] pop hl jr .asm_f987 .asm_f97e push hl ld hl, $ff9d bit 1, [hl] res 1, [hl] pop hl .asm_f987 ld [$FF00+$e5], a ld a, $10 ld [$FF00+$e6], a call Func_366b ld a, [$FF00+$e7] ld [H_NUMTOPRINT], a ; $FF00+$96 (aliases: H_MULTIPLICAND) ld a, [$FF00+$9b] and a ret z ld a, [$FF00+$9d] cpl and $3 ld [$FF00+$9d], a ret Func_f9a0: ; f9a0 (3:79a0) ld a, [$ff95] ld [$cd37], a dec a ld de, $ccd3 ld hl, $cc97 add l ld l, a jr nc, .asm_f9b1 inc h .asm_f9b1 ld a, [hld] call Func_f9bf ld [de], a inc de ld a, [$ff95] dec a ld [$ff95], a jr nz, .asm_f9b1 ret Func_f9bf: ; f9bf (3:79bf) push hl ld b, a ld hl, DataTable_f9d2 .asm_f9c4 ld a, [hli] cp $ff jr z, .asm_f9d0 cp b jr z, .asm_f9cf inc hl jr .asm_f9c4 .asm_f9cf ld a, [hl] .asm_f9d0 pop hl ret DataTable_f9d2: ; f9d2 (3:79d2) db $40, $40, $00, $80, $80, $20, $c0, $10, $ff Func_f9db: ; f9db (3:79db) ret Func_f9dc: ; f9dc (3:79dc) call Load16BitRegisters ; calculates bc * 48 / de, the number of pixels the HP bar has ; the result is always at least 1 UpdateHPBar_CalcNumberOfHPBarPixels: ; f9df (3:79df) push hl xor a ld hl, H_MULTIPLICAND ld [hli], a ld a, b ld [hli], a ld a, c ld [hli], a ld [hl], $30 call Multiply ; 48 * bc (hp bar is 48 pixels long) ld a, d and a jr z, .maxHPSmaller256 srl d ; make HP in de fit into 1 byte by dividing by 4 rr e srl d rr e ld a, [H_MULTIPLICAND+1] ld b, a ld a, [H_MULTIPLICAND+2] srl b ; divide multiplication result as well rr a srl b rr a ld [H_MULTIPLICAND+2], a ld a, b ld [H_MULTIPLICAND+1], a .maxHPSmaller256 ld a, e ld [H_DIVISOR], a ld b, $4 call Divide ld a, [H_MULTIPLICAND+2] ld e, a ; e = bc * 48 / de (num of pixels of HP bar) pop hl and a ret nz ld e, $1 ; make result at least 1 ret ; predef $48 UpdateHPBar: ; fa1d (3:7a1d) push hl ld hl, wHPBarOldHP ld a, [hli] ld c, a ; old HP into bc ld a, [hli] ld b, a ld a, [hli] ld e, a ; new HP into de ld d, [hl] pop hl push de push bc call UpdateHPBar_CalcHPDifference ld a, e ld [wHPBarHPDifference+1], a ld a, d ld [wHPBarHPDifference], a pop bc pop de call UpdateHPBar_CompareNewHPToOldHP ret z ld a, $ff jr c, .HPdecrease ld a, $1 .HPdecrease ld [wHPBarDelta], a call Load16BitRegisters ld a, [wHPBarNewHP] ld e, a ld a, [wHPBarNewHP+1] ld d, a .animateHPBarLoop push de ld a, [wHPBarOldHP] ld c, a ld a, [wHPBarOldHP+1] ld b, a call UpdateHPBar_CompareNewHPToOldHP jr z, .animateHPBarDone jr nc, .HPIncrease dec bc ; subtract 1 HP ld a, c ld [wHPBarNewHP], a ld a, b ld [wHPBarNewHP+1], a call UpdateHPBar_CalcOldNewHPBarPixels ld a, e sub d ; calc pixel difference jr .asm_fa7e .HPIncrease inc bc ; add 1 HP ld a, c ld [wHPBarNewHP], a ld a, b ld [wHPBarNewHP+1], a call UpdateHPBar_CalcOldNewHPBarPixels ld a, d sub e ; calc pixel difference .asm_fa7e call UpdateHPBar_PrintHPNumber and a jr z, .noPixelDifference call UpdateHPBar_AnimateHPBar .noPixelDifference ld a, [wHPBarNewHP] ld [wHPBarOldHP], a ld a, [wHPBarNewHP+1] ld [wHPBarOldHP+1], a pop de jr .animateHPBarLoop .animateHPBarDone pop de ld a, e ld [wHPBarOldHP], a ld a, d ld [wHPBarOldHP+1], a or e jr z, .monFainted call UpdateHPBar_CalcOldNewHPBarPixels ld d, e .monFainted call UpdateHPBar_PrintHPNumber ld a, $1 call UpdateHPBar_AnimateHPBar jp Delay3 ; animates the HP bar going up or down for (a) ticks (two waiting frames each) ; stops prematurely if bar is filled up ; e: current health (in pixels) to start with UpdateHPBar_AnimateHPBar: ; fab1 (3:7ab1) push hl .barAnimationLoop push af push de ld d, $6 call DrawHPBar ld c, $2 call DelayFrames pop de ld a, [wHPBarDelta] ; +1 or -1 add e cp $31 jr nc, .barFilledUp ld e, a pop af dec a jr nz, .barAnimationLoop pop hl ret .barFilledUp pop af pop hl ret ; compares old HP and new HP and sets c and z flags accordingly UpdateHPBar_CompareNewHPToOldHP: ; fad1 (3:7ad1) ld a, d sub b ret nz ld a, e sub c ret ; calcs HP difference between bc and de (into de) UpdateHPBar_CalcHPDifference: ; fad7 (3:7ad7) ld a, d sub b jr c, .oldHPGreater jr z, .testLowerByte .newHPGreater ld a, e sub c ld e, a ld a, d sbc b ld d, a ret .oldHPGreater ld a, c sub e ld e, a ld a, b sbc d ld d, a ret .testLowerByte ld a, e sub c jr c, .oldHPGreater jr nz, .newHPGreater ld de, $0 ret UpdateHPBar_PrintHPNumber: ; faf5 (3:7af5) push af push de ld a, [wListMenuID] ; $cf94 and a jr z, .asm_fb2d ld a, [wHPBarOldHP] ld [$cef1], a ld a, [wHPBarOldHP+1] ld [$cef0], a push hl ld a, [$FF00+$f6] bit 0, a jr z, .asm_fb15 ld de, $9 jr .asm_fb18 .asm_fb15 ld de, $15 .asm_fb18 add hl, de push hl ld a, $7f ld [hli], a ld [hli], a ld [hli], a pop hl ld de, $cef0 ld bc, $203 call PrintNumber call DelayFrame pop hl .asm_fb2d pop de pop af ret ; calcs number of HP bar pixels for old and new HP value ; d: new pixels ; e: old pixels UpdateHPBar_CalcOldNewHPBarPixels: ; fb30 (3:7b30) push hl ld hl, wHPBarMaxHP ld a, [hli] ; max HP into de ld e, a ld a, [hli] ld d, a ld a, [hli] ; old HP into bc ld c, a ld a, [hli] ld b, a ld a, [hli] ; new HP into hl ld h, [hl] ld l, a push hl push de call UpdateHPBar_CalcNumberOfHPBarPixels ; calc num pixels for old HP ld a, e pop de pop bc push af call UpdateHPBar_CalcNumberOfHPBarPixels ; calc num pixels for new HP pop af ld d, e ld e, a pop hl ret ; prints text for bookshelves in buildings without sign events Func_fb50: ; fb50 (3:7b50) ld a, [$c109] cp $4 jr nz, .asm_fb7f ld a, [W_CURMAPTILESET] ; $d367 ld b, a FuncCoord 8, 7 ; $c434 ld a, [Coord] ld c, a ld hl, BookshelfTileIDs ; $7b8b .asm_fb62 ld a, [hli] cp $ff jr z, .asm_fb7f cp b jr nz, .asm_fb7b ld a, [hli] cp c jr nz, .asm_fb7c ld a, [hl] push af call EnableAutoTextBoxDrawing pop af call Func_3ef5 xor a ld [$FF00+$db], a ret .asm_fb7b inc hl .asm_fb7c inc hl jr .asm_fb62 .asm_fb7f ld a, $ff ld [$FF00+$db], a ld b, BANK(Func_52673) ld hl, Func_52673 jp Bankswitch ; format: db tileset id, bookshelf tile id, text id BookshelfTileIDs: ; fb8b (3:7b8b) db $17,$30,$3A db $08,$3D,$3F db $08,$1E,$40 db $13,$32,$40 db $01,$32,$40 db $14,$28,$40 db $12,$16,$41 db $07,$1D,$40 db $05,$1D,$40 db $0C,$22,$40 db $02,$54,$42 db $02,$55,$42 db $06,$54,$42 db $06,$55,$42 db $12,$50,$42 db $12,$52,$42 db $0D,$36,$40 db $FF IndigoPlateauStatues: ; fbbf (3:7bbf) db $08 ; asm ld hl, IndigoPlateauStatuesText1 call PrintText ld a, [W_XCOORD] bit 0, a ld hl, IndigoPlateauStatuesText2 jr nz, .asm_fbd3 ld hl, IndigoPlateauStatuesText3 .asm_fbd3 call PrintText jp TextScriptEnd IndigoPlateauStatuesText1: ; fbd9 (3:7bd9) TX_FAR _IndigoPlateauStatuesText1 db "@" IndigoPlateauStatuesText2: ; fbde (3:7bde) TX_FAR _IndigoPlateauStatuesText2 db "@" IndigoPlateauStatuesText3: ; fbe3 (3:7be3) TX_FAR _IndigoPlateauStatuesText3 db "@" BookOrSculptureText: ; fbe8 (3:7be8) db $08 ; asm ld hl, PokemonBooksText ld a, [W_CURMAPTILESET] cp $13 ; Celadon Mansion tileset jr nz, .asm_fbfd ld a, [$c420] cp $38 jr nz, .asm_fbfd ld hl, DiglettSculptureText .asm_fbfd call PrintText jp TextScriptEnd PokemonBooksText: ; fc03 (3:7c03) TX_FAR _PokemonBooksText db "@" DiglettSculptureText: ; fc08 (3:7c08) TX_FAR _DiglettSculptureText db "@" ElevatorText: ; fc0d (3:7c0d) TX_FAR _ElevatorText db "@" TownMapText: ; fc12 (3:7c12) TX_FAR _TownMapText db $06 db $08 ; asm ld a, $1 ld [$cc3c], a ld hl, $d730 set 6, [hl] call GBPalWhiteOutWithDelay3 xor a ld [$ffb0], a inc a ld [H_AUTOBGTRANSFERENABLED], a call LoadFontTilePatterns ld b, BANK(DisplayTownMap) ld hl, DisplayTownMap call Bankswitch ld hl, $d730 res 6, [hl] ld de, TextScriptEnd push de ld a, [H_LOADEDROMBANK] push af jp CloseTextDisplay PokemonStuffText: ; fc45 (3:7c45) TX_FAR _PokemonStuffText db "@" SECTION "bank4",ROMX,BANK[$4] OakAideSprite: ; 10000 (4:4000) INCBIN "gfx/sprites/oak_aide.2bpp" ; was $10000 RockerSprite: ; 10180 (4:4180) INCBIN "gfx/sprites/rocker.2bpp" ; was $10180 SwimmerSprite: ; 10300 (4:4300) INCBIN "gfx/sprites/swimmer.2bpp" ; was $10300 WhitePlayerSprite: ; 10480 (4:4480) INCBIN "gfx/sprites/white_player.2bpp" ; was $10480 GymHelperSprite: ; 10540 (4:4540) INCBIN "gfx/sprites/gym_helper.2bpp" ; was $10540 OldPersonSprite: ; 10600 (4:4600) INCBIN "gfx/sprites/old_person.2bpp" ; was $10600 MartGuySprite: ; 106c0 (4:46c0) INCBIN "gfx/sprites/mart_guy.2bpp" ; was $106c0 FisherSprite: ; 10780 (4:4780) INCBIN "gfx/sprites/fisher.2bpp" ; was $10780 OldMediumWomanSprite: ; 10840 (4:4840) INCBIN "gfx/sprites/old_medium_woman.2bpp" ; was $10840 NurseSprite: ; 10900 (4:4900) INCBIN "gfx/sprites/nurse.2bpp" ; was $10900 CableClubWomanSprite: ; 109c0 (4:49c0) INCBIN "gfx/sprites/cable_club_woman.2bpp" ; was $109c0 MrMasterballSprite: ; 10a80 (4:4a80) INCBIN "gfx/sprites/mr_masterball.2bpp" ; was $10a80 LaprasGiverSprite: ; 10b40 (4:4b40) INCBIN "gfx/sprites/lapras_giver.2bpp" ; was $10b40 WardenSprite: ; 10c00 (4:4c00) INCBIN "gfx/sprites/warden.2bpp" ; was $10c00 SsCaptainSprite: ; 10cc0 (4:4cc0) INCBIN "gfx/sprites/ss_captain.2bpp" ; was $10cc0 Fisher2Sprite: ; 10d80 (4:4d80) INCBIN "gfx/sprites/fisher2.2bpp" ; was $10d80 BlackbeltSprite: ; 10f00 (4:4f00) INCBIN "gfx/sprites/blackbelt.2bpp" ; was $10f00 GuardSprite: ; 11080 (4:5080) INCBIN "gfx/sprites/guard.2bpp" ; was $11080 BallSprite: ; 11140 (4:5140) INCBIN "gfx/sprites/ball.2bpp" ; was $11140 OmanyteSprite: ; 11180 (4:5180) INCBIN "gfx/sprites/omanyte.2bpp" ; was $11180 BoulderSprite: ; 111c0 (4:51c0) INCBIN "gfx/sprites/boulder.2bpp" ; was $111c0 PaperSheetSprite: ; 11200 (4:5200) INCBIN "gfx/sprites/paper_sheet.2bpp" ; was $11200 BookMapDexSprite: ; 11240 (4:5240) INCBIN "gfx/sprites/book_map_dex.2bpp" ; was $11240 ClipboardSprite: ; 11280 (4:5280) INCBIN "gfx/sprites/clipboard.2bpp" ; was $11280 SnorlaxSprite: ; 112c0 (4:52c0) INCBIN "gfx/sprites/snorlax.2bpp" ; was $112c0 OldAmberSprite: ; 11300 (4:5300) INCBIN "gfx/sprites/old_amber.2bpp" ; was $11300 LyingOldManSprite: ; 11340 (4:5340) INCBIN "gfx/sprites/lying_old_man.2bpp" ; was $11340 PokemonLogoGraphics: ; 11380 (4:5380) INCBIN "gfx/pokemon_logo.2bpp" FontGraphics: ; 11a80 (4:5a80) INCBIN "gfx/font.1bpp" ABTiles: ; 11e80 (4:5e80) INCBIN "gfx/AB.2bpp" HpBarAndStatusGraphics: ; 11ea0 (4:5ea0) INCBIN "gfx/hp_bar_and_status.2bpp" BattleHudTiles1: ; 12080 (4:6080) INCBIN "gfx/battle_hud1.1bpp" BattleHudTiles2: ; 12098 (4:6098) INCBIN "gfx/battle_hud2.1bpp" BattleHudTiles3: ; 120b0 (4:60b0) INCBIN "gfx/battle_hud3.1bpp" NintendoCopyrightLogoGraphics: ; 120c8 (4:60c8) INCBIN "gfx/copyright.2bpp" GamefreakLogoGraphics: ; 121f8 (4:61f8) INCBIN "gfx/gamefreak.2bpp" TextBoxGraphics: ; 12288 (4:6288) INCBIN "gfx/text_box.2bpp" PokedexTileGraphics: ; 12488 (4:6488) INCBIN "gfx/pokedex.2bpp" WorldMapTileGraphics: ; 125a8 (4:65a8) INCBIN "gfx/town_map.2bpp" PlayerCharacterTitleGraphics: ; 126a8 (4:66a8) INCBIN "gfx/player_title.2bpp" Func_128d8: ; 128d8 (4:68d8) ld a, [W_YCOORD] ; $d361 ld b, a ld a, [W_CURMAPHEIGHT] ; $d368 call Func_128ea ret z ld a, [W_XCOORD] ; $d362 ld b, a ld a, [W_CURMAPWIDTH] ; $d369 Func_128ea: ; 128ea (4:68ea) add a cp b ret z inc b ret Func_128ef: ; 128ef (4:68ef) call Load16BitRegisters ld a, $1 jr asm_128fb Func_128f6: ; 128f6 (4:68f6) call Load16BitRegisters ld a, $2 asm_128fb: ; 128fb (4:68fb) ld [wListMenuID], a ; $cf94 push hl ld a, [$cf99] ld b, a ld a, [$cf9a] ld c, a or b jr nz, .asm_12913 xor a ld c, a ld e, a ld a, $6 ld d, a jp Func_12924 .asm_12913 ld a, [$cfba] ld d, a ld a, [$cfbb] ld e, a ld a, $26 call Predef ; indirect jump to Func_f9dc (f9dc (3:79dc)) ld a, $6 ld d, a ld c, a Func_12924: ; 12924 (4:6924) pop hl push de push hl push hl call DrawHPBar pop hl ld a, [$FF00+$f6] bit 0, a jr z, .asm_12937 ld bc, $9 jr .asm_1293a .asm_12937 ld bc, $15 .asm_1293a add hl, bc ld de, $cf99 ld bc, $203 call PrintNumber ld a, "/" ld [hli], a ld de, $cfba ld bc, $203 call PrintNumber pop hl pop de ret ; Predef 0x37 StatusScreen: ; 12953 (4:6953) call LoadMonData ld a, [$cc49] cp $2 ; 2 means we're in a PC box jr c, .DontRecalculate ; 0x1295b $14 ld a, [$cf9b] ld [$cfb9], a ld [$d127], a ld hl, $cfa8 ld de, $cfba ld b, $1 call CalcStats ; Recalculate stats .DontRecalculate ld hl, $d72c set 1, [hl] ld a, $33 ld [$ff00+$24], a ; Reduce the volume call GBPalWhiteOutWithDelay3 call ClearScreen call UpdateSprites ; move sprites (?) call LoadHpBarAndStatusTilePatterns ld de, BattleHudTiles1 ; $6080 ; source ld hl, $96d0 ; dest ld bc, (BANK(BattleHudTiles1) << 8) + $03 ; bank bytes/8 call CopyVideoDataDouble ; ·│ :L and halfarrow line end ld de, BattleHudTiles2 ; $6098 ld hl, $9780 ld bc, (BANK(BattleHudTiles2) << 8) + $01 call CopyVideoDataDouble ; │ ld de, BattleHudTiles3 ; $60b0 ld hl, $9760 ld bc, (BANK(BattleHudTiles3) << 8) + $02 call CopyVideoDataDouble ; ─┘ ld de, PTile ld hl, $9720 ld bc,(BANK(PTile) << 8 | $01) call CopyVideoDataDouble ; P (for PP), inline ld a, [$ff00+$d7] push af xor a ld [$ff00+$d7], a FuncCoord 19,1 ld hl, Coord ld bc, $060a call DrawLineBox ; Draws the box around name, HP and status ld de, $fffa add hl, de ld [hl], $f2 ; . after No ("." is a different one) dec hl ld [hl], "№" FuncCoord 19,9 ld hl, Coord ld bc, $0806 call DrawLineBox ; Draws the box around types, ID No. and OT FuncCoord 10,9 ld hl, Coord ld de, Type1Text call PlaceString ; "TYPE1/" FuncCoord 11,3 ld hl, Coord PREDEF DrawHPBarPredef ; predef $5f ld hl, $cf25 call Func_3df9 ld b, $3 call GoPAL_SET ; SGB palette FuncCoord 16,6 ld hl, Coord ld de, $cf9c call PrintStatusCondition jr nz, .StatusWritten ; 0x129fc $9 FuncCoord 16,6 ld hl, Coord ld de, OKText call PlaceString ; "OK" .StatusWritten FuncCoord 9,6 ld hl, Coord ld de, StatusText call PlaceString ; "STATUS/" FuncCoord 14,2 ld hl, Coord call PrintLevel ; Pokémon level ld a, [$d0b8] ld [$d11e], a ld [$d0b5], a ld a, $3a call Predef FuncCoord 3,7 ld hl, Coord ld de, $d11e ld bc, $8103 ; Zero-padded, 3 call PrintNumber ; Pokémon no. FuncCoord 11,10 ld hl, Coord ld a, $4b call Predef ; Prints the type (?) ld hl, NamePointers2 ; $6a9d call .unk_12a7e ld d, h ld e, l FuncCoord 9,1 ld hl, Coord call PlaceString ; Pokémon name ld hl, OTPointers ; $6a95 call .unk_12a7e ld d, h ld e, l FuncCoord 12,16 ld hl, Coord call PlaceString ; OT FuncCoord 12,14 ld hl, Coord ld de, $cfa4 ld bc, $8205 ; 5 call PrintNumber ; ID Number ld d, $0 call PrintStatsBox call Delay3 call GBPalNormal FuncCoord 1, 0 ; $c3a1 ld hl, Coord call LoadFlippedFrontSpriteByMonIndex ; draw Pokémon picture ld a, [$cf91] call PlayCry ; play Pokémon cry call WaitForTextScrollButtonPress ; wait for button pop af ld [$ff00+$d7], a ret .unk_12a7e ; 0x12a7e ; I don't know what this does, iterates over pointers? ld a, [$cc49] add a ld c, a ld b, $0 add hl, bc ld a, [hli] ld h, [hl] ld l, a ld a, [$cc49] cp $3 ret z ld a, [wWhichPokemon] jp SkipFixedLengthTextEntries OTPointers: ; 12a95 (4:6a95) dw W_PARTYMON1OT dw W_ENEMYMON1OT dw W_BOXMON1OT dw W_DAYCAREMONOT NamePointers2: ; 12a9d (4:6a9d) dw W_PARTYMON1NAME dw W_ENEMYMON1NAME dw W_BOXMON1NAME dw W_DAYCAREMONNAME Type1Text: ; 12aa5 (4:6aa5) db "TYPE1/", $4e Type2Text: ; 12aac (4:6aac) db "TYPE2/", $4e IDNoText: ; 12ab3 (4:6ab3) db $73, "№", "/", $4e OTText: ; 12ab7 (4:6ab7) db "OT/", $4e, "@" StatusText: ; 12abc (4:6abc) db "STATUS/@" OKText: ; 12ac4 (4:6ac4) db "OK@" ; Draws a line starting from hl high b and wide c DrawLineBox ; 0x12ac7 ld de, $0014 ; New line .PrintVerticalLine ld [hl], $78 ; │ add hl, de dec b jr nz, .PrintVerticalLine ; 0x12ace $fa ld [hl], $77 ; ┘ dec hl .PrintHorizLine ld [hl], $76 ; ─ dec hl dec c jr nz, .PrintHorizLine ; 0x12ad7 $fa ld [hl], $6f ; ← (halfarrow ending) ret PTile: ; 12adc (4:6adc) ; This is a single 1bpp "P" tile INCBIN "gfx/p_tile.1bpp" PrintStatsBox: ; 12ae4 (4:6ae4) ld a, d and a ; a is 0 from the status screen jr nz, .DifferentBox ; 0x12ae6 $12 FuncCoord 0,8 ld hl, Coord ld b, $8 ld c, $8 call TextBoxBorder ; Draws the box FuncCoord 1,9 ; Start printing stats from here ld hl, Coord ld bc, $0019 ; Number offset jr .PrintStats ; 0x12af8 $10 .DifferentBox FuncCoord 9,2 ld hl, Coord ld b, $8 ld c, $9 call TextBoxBorder FuncCoord 11, 3 ; $c3e7 ld hl, Coord ld bc, $0018 .PrintStats push bc push hl ld de, StatsText call PlaceString pop hl pop bc add hl, bc ld de, $cfbc ld bc, $0203 ; three digits call PrintStat ld de, $cfbe call PrintStat ld de, $cfc0 call PrintStat ld de, $cfc2 jp PrintNumber PrintStat push hl call PrintNumber pop hl ld de, $0028 add hl, de ret StatsText: ; 12b3a (4:6b3a) db "ATTACK" next "DEFENSE" next "SPEED" next "SPECIAL@" StatusScreen2: ; 12b57 (4:6b57) ld a, [$ff00+$d7] push af xor a ld [$ff00+$d7], a ld [$ff00+$ba], a ld bc, $0005 ld hl, $d0dc call FillMemory ld hl, $cfa0 ld de, $d0dc ld bc, $0004 call CopyData ld hl, Func_39b87 ld b, BANK(Func_39b87) call Bankswitch FuncCoord 9,2 ld hl, Coord ld bc, $050a call ClearScreenArea ; Clear under name FuncCoord 19, 3 ; $c3ef ld hl, Coord ld [hl], $78 FuncCoord 0,8 ld hl, Coord ld b, $8 ld c, $12 call TextBoxBorder ; Draw move container FuncCoord 2,9 ld hl, Coord ld de, $d0e1 call PlaceString ; Print moves ld a, [$cd6c] inc a ld c, a ld a, $4 sub c ld b, a ; Number of moves ? FuncCoord 11,10 ld hl, Coord ld de, $0028 ld a, $72 call Func_12ccb ; Print "PP" ld a, b and a jr z, .InitPP ; 0x12bb3 $6 ld c, a ld a, "-" call Func_12ccb ; Fill the rest with -- .InitPP ; 12bbb ld hl, $cfa0 FuncCoord 14,10 ld de, Coord ld b, $0 .PrintPP ; 12bc3 ld a, [hli] and a jr z, .PPDone ; 0x12bc5 $4a push bc push hl push de ld hl, wCurrentMenuItem ld a, [hl] push af ld a, b ld [hl], a push hl ld hl, GetMaxPP ld b, BANK(GetMaxPP) call Bankswitch pop hl pop af ld [hl], a pop de pop hl push hl ld bc, $0014 add hl, bc ld a, [hl] and $3f ld [$cd71], a ld h, d ld l, e push hl ld de, $cd71 ld bc, $0102 call PrintNumber ld a, "/" ld [hli], a ld de, $d11e ld bc, $0102 call PrintNumber pop hl ld de, $0028 add hl, de ld d, h ld e, l pop hl pop bc inc b ld a, b cp $4 jr nz, .PrintPP ; 0x12c0f $b2 .PPDone FuncCoord 9,3 ld hl, Coord ld de, EXPPointsText call PlaceString ld a, [$cfb9] ; level push af cp $64 jr z, .Level100 ; 0x12c20 $4 inc a ld [$cfb9], a ; Increase temporarily if not 100 .Level100 FuncCoord 14,6 ld hl, Coord ld [hl], $70 ; 1-tile "to" inc hl inc hl call PrintLevel pop af ld [$cfb9], a ld de, $cfa6 FuncCoord 12,4 ld hl, Coord ld bc, $0307 call PrintNumber ; exp call .asm_12c86 ld de, $cfa6 FuncCoord 7,6 ld hl, Coord ld bc, $0307 call PrintNumber FuncCoord 9,0 ld hl, Coord call Func_12cc3 FuncCoord 9,1 ld hl, Coord call Func_12cc3 ld a, [$d0b8] ld [$d11e], a call GetMonName FuncCoord 9,1 ld hl, Coord call PlaceString ld a, $1 ld [$ff00+$ba], a call Delay3 call WaitForTextScrollButtonPress ; wait for button pop af ld [$ff00+$d7], a ld hl, $d72c res 1, [hl] ld a, $77 ld [$ff00+$24], a call GBPalWhiteOut jp ClearScreen .asm_12c86 ; This does some magic with lvl/exp? ld a, [$cfb9] ; Load level cp $64 jr z, .asm_12ca7 ; 0x12c8b $1a ; If 100 inc a ld d, a ld hl, CalcExperience ld b, BANK(CalcExperience) call Bankswitch ld hl, $cfa8 ld a, [$ff00+$98] sub [hl] ld [hld], a ld a, [$ff00+$97] sbc [hl] ld [hld], a ld a, [$ff00+$96] sbc [hl] ld [hld], a ret .asm_12ca7 ld hl, $cfa6 xor a ld [hli], a ld [hli], a ld [hl], a ret EXPPointsText: ; 12caf (4:6caf) db "EXP POINTS", $4e LevelUpText: ; 12cba (4:6cba) db "LEVEL UP@" Func_12cc3: ; 12cc3 (4:6cc3) ld bc, $a ld a, $7f jp FillMemory Func_12ccb: ; 12ccb (4:6ccb) ld [hli], a ld [hld], a add hl, de dec c jr nz, Func_12ccb ret ; [$D07D] = menu type / message ID ; if less than $F0, it is a menu type ; menu types: ; 00: normal pokemon menu (e.g. Start menu) ; 01: use healing item on pokemon menu ; 02: in-battle switch pokemon menu ; 03: learn TM/HM menu ; 04: swap pokemon positions menu ; 05: use evolution stone on pokemon menu ; otherwise, it is a message ID ; f0: poison healed ; f1: burn healed ; f2: freeze healed ; f3: sleep healed ; f4: paralysis healed ; f5: HP healed ; f6: health returned ; f7: revitalized ; f8: leveled up DrawPartyMenu_: ; 12cd2 (4:6cd2) xor a ld [H_AUTOBGTRANSFERENABLED],a call ClearScreen call UpdateSprites ; move sprites ld b, BANK(Func_71791) ld hl, Func_71791 call Bankswitch ; load pokemon icon graphics RedrawPartyMenu_: ; 12ce3 (4:6ce3) ld a,[$D07D] cp a,$04 jp z,.printMessage call ErasePartyMenuCursors ld b, BANK(Func_71fb6) ld hl, Func_71fb6 call Bankswitch ; loads some data to $cf2e FuncCoord 3,0 ld hl,Coord ld de,W_PARTYMON1 xor a ld c,a ld [$FF8C],a ; loop counter ld [$CF2D],a .loop ld a,[de] cp a,$FF ; reached the terminator? jp z,.afterDrawingMonEntries push bc push de push hl ld a,c push hl ld hl,W_PARTYMON1NAME call GetPartyMonName pop hl call PlaceString ; print the pokemon's name ld b, BANK(Func_71868) ld hl, Func_71868 call Bankswitch ; place the appropriate pokemon icon ld a,[$FF8C] ; loop counter ld [wWhichPokemon],a inc a ld [$FF8C],a call LoadMonData pop hl push hl ld a,[$CC35] and a ; is the player swapping pokemon positions? jr z,.skipUnfilledRightArrow ; if the player is swapping pokemon positions dec a ld b,a ld a,[wWhichPokemon] cp b ; is the player swapping the current pokemon in the list? jr nz,.skipUnfilledRightArrow ; the player is swapping the current pokemon in the list dec hl dec hl dec hl ld a,$EC ; unfilled right arrow menu cursor ld [hli],a ; place the cursor inc hl inc hl .skipUnfilledRightArrow ld a,[$D07D] ; menu type cp a,$03 jr z,.teachMoveMenu cp a,$05 jr z,.evolutionStoneMenu push hl ld bc,14 ; 14 columns to the right add hl,bc ld de,$CF9C call PrintStatusCondition pop hl push hl ld bc,20 + 1 ; down 1 row and right 1 column ld a,[$FFF6] set 0,a ld [$FFF6],a add hl,bc ld a,$60 call Predef ; draw HP bar and prints current / max HP ld a,[$FFF6] res 0,a ld [$FFF6],a call Func_12ec7 ; color the HP bar (on SGB) pop hl jr .printLevel .teachMoveMenu push hl ld a,$43 call Predef ; check if the pokemon can learn the move pop hl ld de,.ableToLearnMoveText ld a,c and a jr nz,.placeMoveLearnabilityString ld de,.notAbleToLearnMoveText .placeMoveLearnabilityString ld bc,20 + 9 ; down 1 row and right 9 columns push hl add hl,bc call PlaceString pop hl .printLevel ld bc,10 ; move 10 columns to the right add hl,bc call PrintLevel pop hl pop de inc de ld bc,2 * 20 add hl,bc pop bc inc c jp .loop .ableToLearnMoveText db "ABLE@" .notAbleToLearnMoveText db "NOT ABLE@" .evolutionStoneMenu push hl ld hl,EvosMovesPointerTable ld b,0 ld a,[$CF98] ; pokemon ID dec a add a rl b ld c,a add hl,bc ld de,$CD6D ld a,BANK(EvosMovesPointerTable) ld bc,2 call FarCopyData ld hl,$CD6D ld a,[hli] ld h,[hl] ld l,a ld de,$CD6D ld a,BANK(EvosMovesPointerTable) ld bc,13 call FarCopyData ld hl,$CD6D ld de,.notAbleToEvolveText ; loop through the pokemon's evolution entries .checkEvolutionsLoop ld a,[hli] and a ; reached terminator? jr z,.placeEvolutionStoneString ; if so, place the "NOT ABLE" string inc hl inc hl cp a,EV_ITEM jr nz,.checkEvolutionsLoop ; if it's a stone evolution entry dec hl dec hl ld b,[hl] ld a,[$D156] ; evolution stone item ID inc hl inc hl inc hl cp b ; does the player's stone match this evolution entry's stone? jr nz,.checkEvolutionsLoop ; if it does match ld de,.ableToEvolveText .placeEvolutionStoneString ld bc,20 + 9 ; down 1 row and right 9 columns pop hl push hl add hl,bc call PlaceString pop hl jr .printLevel .ableToEvolveText db "ABLE@" .notAbleToEvolveText db "NOT ABLE@" .afterDrawingMonEntries ld b,$0A call GoPAL_SET .printMessage ld hl,$D730 ld a,[hl] push af push hl set 6,[hl] ; turn off letter printing delay ld a,[$D07D] ; message ID cp a,$F0 jr nc,.printItemUseMessage add a ld hl,PartyMenuMessagePointers ld b,0 ld c,a add hl,bc ld a,[hli] ld h,[hl] ld l,a call PrintText .done pop hl pop af ld [hl],a ld a,1 ld [H_AUTOBGTRANSFERENABLED],a call Delay3 jp GBPalNormal .printItemUseMessage and a,$0F ld hl,PartyMenuItemUseMessagePointers add a ld c,a ld b,0 add hl,bc ld a,[hli] ld h,[hl] ld l,a push hl ld a,[$CF06] ld hl,W_PARTYMON1NAME call GetPartyMonName pop hl call PrintText jr .done PartyMenuItemUseMessagePointers: ; 12e61 (4:6e61) dw AntidoteText dw BurnHealText dw IceHealText dw AwakeningText dw ParlyzHealText dw PotionText dw FullHealText dw ReviveText dw RareCandyText PartyMenuMessagePointers: ; 12e73 (4:6e73) dw PartyMenuNormalText dw PartyMenuItemUseText dw PartyMenuBattleText dw PartyMenuUseTMText dw PartyMenuSwapMonText dw PartyMenuItemUseText PartyMenuNormalText: ; 12e7f (4:6e7f) TX_FAR _PartyMenuNormalText db "@" PartyMenuItemUseText: ; 12e84 (4:6e84) TX_FAR _PartyMenuItemUseText db "@" PartyMenuBattleText: ; 12e89 (4:6e89) TX_FAR _PartyMenuBattleText db "@" PartyMenuUseTMText: ; 12e8e (4:6e8e) TX_FAR _PartyMenuUseTMText db "@" PartyMenuSwapMonText: ; 12e93 (4:6e93) TX_FAR _PartyMenuSwapMonText db "@" PotionText: ; 12e98 (4:6e98) TX_FAR _PotionText db "@" AntidoteText: ; 12e9d (4:6e9d) TX_FAR _AntidoteText db "@" ParlyzHealText: ; 12ea2 (4:6ea2) TX_FAR _ParlyzHealText db "@" BurnHealText: ; 12ea7 (4:6ea7) TX_FAR _BurnHealText db "@" IceHealText: ; 12eac (4:6eac) TX_FAR _IceHealText db "@" AwakeningText: ; 12eb1 (4:6eb1) TX_FAR _AwakeningText db "@" FullHealText: ; 12eb6 (4:6eb6) TX_FAR _FullHealText db "@" ReviveText: ; 12ebb (4:6ebb) TX_FAR _ReviveText db "@" RareCandyText: ; 12ec0 (4:6ec0) TX_FAR _RareCandyText db $0B db $06 db "@" Func_12ec7: ; 12ec7 (4:6ec7) ld hl, $cf1f ld a, [$cf2d] ld c, a ld b, $0 add hl, bc call Func_3df9 ld b, $fc call GoPAL_SET ld hl, $cf2d inc [hl] ret RedPicFront: ; 12ede (4:6ede) INCBIN "pic/trainer/red.pic" ShrinkPic1: ; 12fe8 (4:6fe8) INCBIN "pic/trainer/shrink1.pic" ShrinkPic2: ; 13042 (4:7042) INCBIN "pic/trainer/shrink2.pic" Func_13074: ; 13074 (4:7074) ld h, $c2 ld a, [H_CURRENTSPRITEOFFSET] add $8 ld l, a ld a, $7f ld [hl], a dec h ld a, [H_CURRENTSPRITEOFFSET] add $9 ld l, a ld a, [hld] ld b, a xor a ld [hld], a ld [hl], a ld a, [H_CURRENTSPRITEOFFSET] add $2 ld l, a ld a, [hl] or b ld [hld], a ld a, $2 ld [hl], a ret StartMenu_Pokedex: ; 13095 (4:7095) ld a,$29 call Predef call LoadScreenTilesFromBuffer2 ; restore saved screen call Delay3 call LoadGBPal call UpdateSprites jp RedisplayStartMenu StartMenu_Pokemon: ; 130a9 (4:70a9) ld a,[W_NUMINPARTY] and a jp z,RedisplayStartMenu xor a ld [$cc35],a ld [$d07d],a ld [$cfcb],a call DisplayPartyMenu jr .checkIfPokemonChosen .loop xor a ld [$cc35],a ld [$d07d],a call GoBackToPartyMenu .checkIfPokemonChosen jr nc,.chosePokemon .exitMenu call GBPalWhiteOutWithDelay3 call Func_3dbe call LoadGBPal jp RedisplayStartMenu .chosePokemon call SaveScreenTilesToBuffer1 ; save screen ld a,$04 ld [$d125],a call DisplayTextBoxID ; display pokemon menu options ld hl,$cd3d ld bc,$020c ; max menu item ID, top menu item Y ld e,5 .adjustMenuVariablesLoop dec e jr z,.storeMenuVariables ld a,[hli] and a jr z,.storeMenuVariables inc b dec c dec c jr .adjustMenuVariablesLoop .storeMenuVariables ld hl,wTopMenuItemY ld a,c ld [hli],a ; top menu item Y ld a,[$fff7] ld [hli],a ; top menu item X xor a ld [hli],a ; current menu item ID inc hl ld a,b ld [hli],a ; max menu item ID ld a,%00000011 ; A button, B button ld [hli],a ; menu watched keys xor a ld [hl],a call HandleMenuInput push af call LoadScreenTilesFromBuffer1 ; restore saved screen pop af bit 1,a ; was the B button pressed? jp nz,.loop ; if the B button wasn't pressed ld a,[wMaxMenuItem] ld b,a ld a,[wCurrentMenuItem] ; menu selection cp b jp z,.exitMenu ; if the player chose Cancel dec b cp b jr z,.choseSwitch dec b cp b jp z,.choseStats ld c,a ld b,0 ld hl,$cd3d add hl,bc jp .choseOutOfBattleMove .choseSwitch ld a,[W_NUMINPARTY] cp a,2 ; is there more than one pokemon in the party? jp c,StartMenu_Pokemon ; if not, no switching call Func_13653 ld a,$04 ; swap pokemon positions menu ld [$d07d],a call GoBackToPartyMenu jp .checkIfPokemonChosen .choseStats call CleanLCD_OAM xor a ld [$cc49],a ld a,$36 call Predef ld a,$37 call Predef call ReloadMapData jp StartMenu_Pokemon .choseOutOfBattleMove push hl ld a,[wWhichPokemon] ld hl,W_PARTYMON1NAME call GetPartyMonName pop hl ld a,[hl] dec a add a ld b,0 ld c,a ld hl,.outOfBattleMovePointers add hl,bc ld a,[hli] ld h,[hl] ld l,a ld a,[W_OBTAINEDBADGES] ; badges obtained jp [hl] .outOfBattleMovePointers dw .cut dw .fly dw .surf dw .surf dw .strength dw .flash dw .dig dw .teleport dw .softboiled .fly bit 2,a ; does the player have the Thunder Badge? jp z,.newBadgeRequired call CheckIfInOutsideMap jr z,.canFly ld a,[wWhichPokemon] ld hl,W_PARTYMON1NAME call GetPartyMonName ld hl,.cannotFlyHereText call PrintText jp .loop .canFly call ChooseFlyDestination ld a,[$d732] bit 3,a ; did the player decide to fly? jp nz,.goBackToMap call LoadFontTilePatterns ld hl,$d72e set 1,[hl] jp StartMenu_Pokemon .cut bit 1,a ; does the player have the Cascade Badge? jp z,.newBadgeRequired ld a,$3c call Predef ld a,[$cd6a] and a jp z,.loop jp CloseTextDisplay .surf bit 4,a ; does the player have the Soul Badge? jp z,.newBadgeRequired ld b, BANK(Func_cdc0) ld hl, Func_cdc0 call Bankswitch ld hl,$d728 bit 1,[hl] res 1,[hl] jp z,.loop ld a,SURFBOARD ld [$cf91],a ld [$d152],a call UseItem ld a,[$cd6a] and a jp z,.loop call GBPalWhiteOutWithDelay3 jp .goBackToMap .strength bit 3,a ; does the player have the Rainbow Badge? jp z,.newBadgeRequired ld a,$5b call Predef call GBPalWhiteOutWithDelay3 jp .goBackToMap .flash bit 0,a ; does the player have the Boulder Badge? jp z,.newBadgeRequired xor a ld [$d35d],a ld hl,.flashLightsAreaText call PrintText call GBPalWhiteOutWithDelay3 jp .goBackToMap .flashLightsAreaText TX_FAR _FlashLightsAreaText db "@" .dig ld a,ESCAPE_ROPE ld [$cf91],a ld [$d152],a call UseItem ld a,[$cd6a] and a jp z,.loop call GBPalWhiteOutWithDelay3 jp .goBackToMap .teleport call CheckIfInOutsideMap jr z,.canTeleport ld a,[wWhichPokemon] ld hl,W_PARTYMON1NAME call GetPartyMonName ld hl,.cannotUseTeleportNowText call PrintText jp .loop .canTeleport ld hl,.warpToLastPokemonCenterText call PrintText ld hl,$d732 set 3,[hl] set 6,[hl] ld hl,$d72e set 1,[hl] res 4,[hl] ld c,60 call DelayFrames call GBPalWhiteOutWithDelay3 ; zero all three palettes and wait 3 V-blanks jp .goBackToMap .warpToLastPokemonCenterText TX_FAR _WarpToLastPokemonCenterText db "@" .cannotUseTeleportNowText TX_FAR _CannotUseTeleportNowText db "@" .cannotFlyHereText TX_FAR _CannotFlyHereText db "@" .softboiled ld hl,W_PARTYMON1_MAXHP ld a,[wWhichPokemon] ld bc,44 call AddNTimes ld a,[hli] ld [H_DIVIDEND],a ld a,[hl] ld [H_DIVIDEND + 1],a ld a,5 ld [H_DIVISOR],a ld b,2 ; number of bytes call Divide ld bc,-33 add hl,bc ld a,[hld] ld b,a ld a,[H_QUOTIENT + 3] sub b ld b,[hl] ld a,[H_QUOTIENT + 2] sbc b jp nc,.notHealthyEnough ld a,[$cc2b] push af ld a,POTION ld [$cf91],a ld [$d152],a call UseItem pop af ld [$cc2b],a jp .loop .notHealthyEnough ; if current HP is less than 1/5 of max HP ld hl,.notHealthyEnoughText call PrintText jp .loop .notHealthyEnoughText TX_FAR _NotHealthyEnoughText db "@" .goBackToMap call Func_3dbe jp CloseTextDisplay .newBadgeRequired ld hl,.newBadgeRequiredText call PrintText jp .loop .newBadgeRequiredText TX_FAR _NewBadgeRequiredText db "@" ; writes a blank tile to all possible menu cursor positions on the party menu ErasePartyMenuCursors: ; 132ed (4:72ed) FuncCoord 0,1 ld hl,Coord ld bc,2 * 20 ; menu cursor positions are 2 rows apart ld a,6 ; 6 menu cursor positions .loop ld [hl]," " add hl,bc dec a jr nz,.loop ret ItemMenuLoop: ; 132fc (4:72fc) call LoadScreenTilesFromBuffer2DisableBGTransfer ; restore saved screen call GoPAL_SET_CF1C StartMenu_Item: ; 13302 (4:7302) ld a,[W_ISLINKBATTLE] dec a jr nz,.notInLinkBattle ld hl,CannotUseItemsHereText call PrintText jr .exitMenu .notInLinkBattle ld bc,wNumBagItems ld hl,$cf8b ld a,c ld [hli],a ld [hl],b ; store item bag pointer at $cf8b (for DisplayListMenuID) xor a ld [$cf93],a ld a,ITEMLISTMENU ld [wListMenuID],a ld a,[$cc2c] ld [wCurrentMenuItem],a call DisplayListMenuID ld a,[wCurrentMenuItem] ld [$cc2c],a jr nc,.choseItem .exitMenu call LoadScreenTilesFromBuffer2 ; restore saved screen call LoadTextBoxTilePatterns call UpdateSprites ; move sprites jp RedisplayStartMenu .choseItem ; erase menu cursor (blank each tile in front of an item name) ld a," " FuncCoord 5,4 ld [Coord],a FuncCoord 5,6 ld [Coord],a FuncCoord 5,8 ld [Coord],a FuncCoord 5,10 ld [Coord],a call PlaceUnfilledArrowMenuCursor xor a ld [$cc35],a ld a,[$cf91] cp a,BICYCLE jp z,.useOrTossItem .notBicycle1 ld a,$06 ; use/toss menu ld [$d125],a call DisplayTextBoxID ld hl,wTopMenuItemY ld a,11 ld [hli],a ; top menu item Y ld a,14 ld [hli],a ; top menu item X xor a ld [hli],a ; current menu item ID inc hl inc a ; a = 1 ld [hli],a ; max menu item ID ld a,%00000011 ; A button, B button ld [hli],a ; menu watched keys xor a ld [hl],a ; old menu item id call HandleMenuInput call PlaceUnfilledArrowMenuCursor bit 1,a ; was the B button pressed? jr z,.useOrTossItem jp ItemMenuLoop .useOrTossItem ; if the player made the choice to use or toss the item ld a,[$cf91] ld [$d11e],a call GetItemName call CopyStringToCF4B ; copy name to $cf4b ld a,[$cf91] cp a,BICYCLE jr nz,.notBicycle2 ld a,[$d732] bit 5,a jr z,.useItem_closeMenu ld hl,CannotGetOffHereText call PrintText jp ItemMenuLoop .notBicycle2 ld a,[wCurrentMenuItem] and a jr nz,.tossItem .useItem ld [$d152],a ld a,[$cf91] cp a,HM_01 jr nc,.useItem_partyMenu ld hl,UsableItems_CloseMenu ld de,1 call IsInArray jr c,.useItem_closeMenu ld a,[$cf91] ld hl,UsableItems_PartyMenu ld de,1 call IsInArray jr c,.useItem_partyMenu call UseItem jp ItemMenuLoop .useItem_closeMenu xor a ld [$d152],a call UseItem ld a,[$cd6a] and a jp z,ItemMenuLoop jp CloseStartMenu .useItem_partyMenu ld a,[$cfcb] push af call UseItem ld a,[$cd6a] cp a,$02 jp z,.partyMenuNotDisplayed call GBPalWhiteOutWithDelay3 call Func_3dbe pop af ld [$cfcb],a jp StartMenu_Item .partyMenuNotDisplayed pop af ld [$cfcb],a jp ItemMenuLoop .tossItem call IsKeyItem ld a,[$d124] and a jr nz,.skipAskingQuantity ld a,[$cf91] call IsItemHM jr c,.skipAskingQuantity call DisplayChooseQuantityMenu inc a jr z,.tossZeroItems .skipAskingQuantity ld hl,wNumBagItems call TossItem .tossZeroItems jp ItemMenuLoop CannotUseItemsHereText: ; 1342a (4:742a) TX_FAR _CannotUseItemsHereText db "@" CannotGetOffHereText: ; 1342f (4:742f) TX_FAR _CannotGetOffHereText db "@" ; items which bring up the party menu when used UsableItems_PartyMenu: ; 13434 (4:7434) db MOON_STONE db ANTIDOTE db BURN_HEAL db ICE_HEAL db AWAKENING db PARLYZ_HEAL db FULL_RESTORE db MAX_POTION db HYPER_POTION db SUPER_POTION db POTION db FIRE_STONE db THUNDER_STONE db WATER_STONE db HP_UP db PROTEIN db IRON db CARBOS db CALCIUM db RARE_CANDY db LEAF_STONE db FULL_HEAL db REVIVE db MAX_REVIVE db FRESH_WATER db SODA_POP db LEMONADE db X_ATTACK db X_DEFEND db X_SPEED db X_SPECIAL db PP_UP db ETHER db MAX_ETHER db ELIXER db MAX_ELIXER db $ff ; items which close the item menu when used UsableItems_CloseMenu: ; 13459 (4:7459) db ESCAPE_ROPE db ITEMFINDER db POKE_FLUTE db OLD_ROD db GOOD_ROD db SUPER_ROD db $ff StartMenu_TrainerInfo: ; 13460 (4:7460) call GBPalWhiteOut call ClearScreen call UpdateSprites ; move sprites ld a,[$ffd7] push af xor a ld [$ffd7],a call DrawTrainerInfo ld a,$2e call Predef ; draw badges ld b,$0d call GoPAL_SET call GBPalNormal call WaitForTextScrollButtonPress ; wait for button press call GBPalWhiteOut call LoadFontTilePatterns call LoadScreenTilesFromBuffer2 ; restore saved screen call GoPAL_SET_CF1C call ReloadMapData call LoadGBPal pop af ld [$ffd7],a jp RedisplayStartMenu ; loads tile patterns and draws everything except for gym leader faces / badges DrawTrainerInfo: ; 1349a (4:749a) ld de,RedPicFront ld bc,$0401 ld a,$3b call Predef call DisableLCD FuncCoord 0,2 ld hl,Coord ld a," " call TrainerInfo_DrawVerticalLine FuncCoord 1,2 ld hl,Coord call TrainerInfo_DrawVerticalLine ld hl,$9070 ld de,$9000 ld bc,$01c0 call CopyData ld hl,TrainerInfoTextBoxTileGraphics ; $7b98 ; trainer info text box tile patterns ld de,$9770 ld bc,$0080 push bc call TrainerInfo_FarCopyData ld hl,BlankLeaderNames ; $7c28 ld de,$9600 ld bc,$0170 call TrainerInfo_FarCopyData pop bc ld hl,BadgeNumbersTileGraphics ; $7d98 ; badge number tile patterns ld de,$8d80 call TrainerInfo_FarCopyData ld hl,GymLeaderFaceAndBadgeTileGraphics ; $6a9e ; gym leader face and badge tile patterns ld de,$9200 ld bc,$0400 ld a,$03 call FarCopyData2 ld hl,TextBoxGraphics ; $6288 ld de,$00d0 add hl,de ; hl = colon tile pattern ld de,$8d60 ld bc,$0010 ld a,$04 push bc call FarCopyData2 pop bc ld hl,TrainerInfoTextBoxTileGraphics + $80 ; $7c18 ; background tile pattern ld de,$8d70 call TrainerInfo_FarCopyData call EnableLCD ld hl,$cd3d ld a,18 + 1 ld [hli],a dec a ld [hli],a ld [hl],1 FuncCoord 0,0 ld hl,Coord call TrainerInfo_DrawTextBox ld hl,$cd3d ld a,16 + 1 ld [hli],a dec a ld [hli],a ld [hl],3 FuncCoord 1,10 ld hl,Coord call TrainerInfo_DrawTextBox FuncCoord 0,10 ld hl,Coord ld a,$d7 call TrainerInfo_DrawVerticalLine FuncCoord 19,10 ld hl,Coord call TrainerInfo_DrawVerticalLine FuncCoord 6,9 ld hl,Coord ld de,TrainerInfo_BadgesText call PlaceString FuncCoord 2,2 ld hl,Coord ld de,TrainerInfo_NameMoneyTimeText call PlaceString FuncCoord 7,2 ld hl,Coord ld de,W_PLAYERNAME call PlaceString FuncCoord 8,4 ld hl,Coord ld de,wPlayerMoney ld c,$e3 call PrintBCDNumber FuncCoord 9,6 ld hl,Coord ld de,$da41 ; hours ld bc,$4103 call PrintNumber ld [hl],$d6 ; colon tile ID inc hl ld de,$da43 ; minutes ld bc,$8102 jp PrintNumber TrainerInfo_FarCopyData: ; 1357f (4:757f) ld a,$0b jp FarCopyData2 TrainerInfo_NameMoneyTimeText: ; 13584 (4:7584) db "NAME/" next "MONEY/" next "TIME/@" ; $76 is a circle tile TrainerInfo_BadgesText: ; 13597 (4:7597) db $76,"BADGES",$76,"@" ; draws a text box on the trainer info screen ; height is always 6 ; INPUT: ; hl = destination address ; [$cd3d] = width + 1 ; [$cd3e] = width ; [$cd3f] = distance from the end of a text box row to the start of the next TrainerInfo_DrawTextBox: ; 135a0 (4:75a0) ld a,$79 ; upper left corner tile ID ld de,$7a7b ; top edge and upper right corner tile ID's call TrainerInfo_DrawHorizontalEdge ; draw top edge call TrainerInfo_NextTextBoxRow ld a,[$cd3d] ; width of the text box plus one ld e,a ld d,0 ld c,6 ; height of the text box .loop ld [hl],$7c ; left edge tile ID add hl,de ld [hl],$78 ; right edge tile ID call TrainerInfo_NextTextBoxRow dec c jr nz,.loop ld a,$7d ; lower left corner tile ID ld de,$777e ; bottom edge and lower right corner tile ID's TrainerInfo_DrawHorizontalEdge: ; 135c3 (4:75c3) ld [hli],a ; place left corner tile ld a,[$cd3e] ; width of the text box ld c,a ld a,d .loop ld [hli],a ; place edge tile dec c jr nz,.loop ld a,e ld [hl],a ; place right corner tile ret TrainerInfo_NextTextBoxRow: ; 135d0 (4:75d0) ld a,[$cd3f] ; distance to the start of the next row .loop inc hl dec a jr nz,.loop ret ; draws a vertical line ; INPUT: ; hl = address of top tile in the line ; a = tile ID TrainerInfo_DrawVerticalLine: ; 135d8 (4:75d8) ld de,20 ld c,8 .loop ld [hl],a add hl,de dec c jr nz,.loop ret StartMenu_SaveReset: ; 135e3 (4:75e3) ld a,[$d72e] bit 6,a ; is the player using the link feature? jp nz,InitGame ld a,$3f call Predef ; save the game call LoadScreenTilesFromBuffer2 ; restore saved screen jp HoldTextDisplayOpen StartMenu_Option: ; 135f6 (4:75f6) xor a ld [H_AUTOBGTRANSFERENABLED],a call ClearScreen call UpdateSprites ld hl,DisplayOptionMenu ld b,BANK(DisplayOptionMenu) call Bankswitch call LoadScreenTilesFromBuffer2 ; restore saved screen call LoadTextBoxTilePatterns call UpdateSprites jp RedisplayStartMenu Func_13613: ; 13613 (4:7613) call Func_13653 ld a, [wWhichTrade] ; $cd3d call Func_13625 ld a, [wCurrentMenuItem] ; $cc26 call Func_13625 jp RedrawPartyMenu_ Func_13625: ; 13625 (4:7625) push af ld hl, wTileMap ld bc, $28 call AddNTimes ld c, $28 ld a, $7f .asm_13633 ld [hli], a dec c jr nz, .asm_13633 pop af ld hl, wOAMBuffer ld bc, $10 call AddNTimes ld de, $4 ld c, e .asm_13645 ld [hl], $a0 add hl, de dec c jr nz, .asm_13645 call WaitForSoundToFinish ld a, $ae jp PlaySound Func_13653: ; 13653 (4:7653) ld a, [$cc35] and a jr nz, .asm_13661 ld a, [wWhichPokemon] ; $cf92 inc a ld [$cc35], a ret .asm_13661 xor a ld [$d07d], a ld a, [$cc35] dec a ld b, a ld a, [wCurrentMenuItem] ; $cc26 ld [wWhichTrade], a ; $cd3d cp b jr nz, .asm_1367b xor a ld [$cc35], a ld [$d07d], a ret .asm_1367b ld a, b ld [$cc35], a push hl push de ld hl, W_PARTYMON1 ; $d164 ld d, h ld e, l ld a, [wCurrentMenuItem] ; $cc26 add l ld l, a jr nc, .asm_1368e inc h .asm_1368e ld a, [$cc35] add e ld e, a jr nc, .asm_13696 inc d .asm_13696 ld a, [hl] ld [H_DIVIDEND], a ; $FF00+$95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) ld a, [de] ld [hl], a ld a, [H_DIVIDEND] ; $FF00+$95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) ld [de], a ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA) ld bc, $2c ld a, [wCurrentMenuItem] ; $cc26 call AddNTimes push hl ld de, $cc97 ld bc, $2c call CopyData ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA) ld bc, $2c ld a, [$cc35] call AddNTimes pop de push hl ld bc, $2c call CopyData pop de ld hl, $cc97 ld bc, $2c call CopyData ld hl, W_PARTYMON1OT ; $d273 ld a, [wCurrentMenuItem] ; $cc26 call SkipFixedLengthTextEntries push hl ld de, $cc97 ld bc, $b call CopyData ld hl, W_PARTYMON1OT ; $d273 ld a, [$cc35] call SkipFixedLengthTextEntries pop de push hl ld bc, $b call CopyData pop de ld hl, $cc97 ld bc, $b call CopyData ld hl, W_PARTYMON1NAME ; $d2b5 ld a, [wCurrentMenuItem] ; $cc26 call SkipFixedLengthTextEntries push hl ld de, $cc97 ld bc, $b call CopyData ld hl, W_PARTYMON1NAME ; $d2b5 ld a, [$cc35] call SkipFixedLengthTextEntries pop de push hl ld bc, $b call CopyData pop de ld hl, $cc97 ld bc, $b call CopyData ld a, [$cc35] ld [wWhichTrade], a ; $cd3d xor a ld [$cc35], a ld [$d07d], a pop de pop hl ret ; tests if mon [$cf91] can learn move [$d0e0] TestMonMoveCompatibility: ; 1373e (4:773e) ld a, [$cf91] ld [$d0b5], a call GetMonHeader ld hl, W_MONHLEARNSET push hl ld a, [$d0e0] ld b, a ld c, $0 ld hl, TechnicalMachines .findTMloop ld a, [hli] cp b jr z, .TMfoundLoop inc c jr .findTMloop .TMfoundLoop pop hl ld b, $2 ; read corresponding bit from TM compatibility array ld a, $10 jp Predef ; indirect jump to HandleBitArray (f666 (3:7666)) ; converts TM/HM number in $d11e into move number ; HMs start at 51 TMToMove: ; 13763 (4:7763) ld a, [$d11e] dec a ld hl, TechnicalMachines ld b, $0 ld c, a add hl, bc ld a, [hl] ld [$d11e], a ret TechnicalMachines: ; 13773 (4:7773) db MEGA_PUNCH db RAZOR_WIND db SWORDS_DANCE db WHIRLWIND db MEGA_KICK db TOXIC db HORN_DRILL db BODY_SLAM db TAKE_DOWN db DOUBLE_EDGE db BUBBLEBEAM db WATER_GUN db ICE_BEAM db BLIZZARD db HYPER_BEAM db PAY_DAY db SUBMISSION db COUNTER db SEISMIC_TOSS db RAGE db MEGA_DRAIN db SOLARBEAM db DRAGON_RAGE db THUNDERBOLT db THUNDER db EARTHQUAKE db FISSURE db DIG db PSYCHIC_M db TELEPORT db MIMIC db DOUBLE_TEAM db REFLECT db BIDE db METRONOME db SELFDESTRUCT db EGG_BOMB db FIRE_BLAST db SWIFT db SKULL_BASH db SOFTBOILED db DREAM_EATER db SKY_ATTACK db REST db THUNDER_WAVE db PSYWAVE db EXPLOSION db ROCK_SLIDE db TRI_ATTACK db SUBSTITUTE db CUT db FLY db SURF db STRENGTH db FLASH Func_137aa: ; 137aa (4:77aa) ld a, [W_ISLINKBATTLE] ; $d12b cp $4 jr nz, .asm_137eb ld a, [W_ENEMYMONNUMBER] ; $cfe8 ld hl, $d8a8 ld bc, $2c call AddNTimes ld a, [W_ENEMYMONSTATUS] ; $cfe9 ld [hl], a call ClearScreen ld hl, Func_372d6 ld b, BANK(Func_372d6) call Bankswitch ld a, [$cf0b] cp $1 ld de, YouWinText ; $7853 jr c, .asm_137de ld de, YouLoseText ; $785b jr z, .asm_137de ld de, DrawText ; $7864 .asm_137de FuncCoord 6, 8 ; $c446 ld hl, Coord call PlaceString ld c, $c8 call DelayFrames jr .asm_1380a .asm_137eb ld a, [$cf0b] and a jr nz, .asm_13813 ld hl, $cce5 ld a, [hli] or [hl] inc hl or [hl] jr z, .asm_1380a ld de, wPlayerMoney + 2 ; $d349 ld c, $3 ld a, $b call Predef ; indirect jump to Func_f81d (f81d (3:781d)) ld hl, UnnamedText_1386b ; $786b call PrintText .asm_1380a xor a ld [$ccd4], a ld a, $2a call Predef ; indirect jump to Func_3ad1c (3ad1c (e:6d1c)) .asm_13813 xor a ld [$d083], a ld [$c02a], a ld [W_ISINBATTLE], a ; $d057 ld [W_BATTLETYPE], a ; $d05a ld [W_MOVEMISSED], a ; $d05f ld [W_CUROPPONENT], a ; $d059 ld [$d11f], a ld [$d120], a ld [$d078], a ld hl, $cc2b ld [hli], a ld [hli], a ld [hli], a ld [hl], a ld [wListScrollOffset], a ; $cc36 ld hl, $d060 ld b, $18 .asm_1383e ld [hli], a dec b jr nz, .asm_1383e ld hl, $d72c set 0, [hl] call WaitForSoundToFinish call GBPalWhiteOut ld a, $ff ld [$d42f], a ret YouWinText: ; 13853 (4:7853) db "YOU WIN@" YouLoseText: ; 1385b (4:785b) db "YOU LOSE@" DrawText: ; 13864 (4:7864) db " DRAW@" UnnamedText_1386b: ; 1386b (4:786b) TX_FAR _UnnamedText_1386b db "@" Func_13870: ; 13870 (4:7870) ld a, [$cc57] and a ret nz ld a, [$d736] and a ret nz ld hl, Func_c49d ld b, BANK(Func_c49d) call Bankswitch jr nc, .asm_13888 .asm_13884 ld a, $1 and a ret .asm_13888 ld hl, Func_128d8 ld b, BANK(Func_128d8) call Bankswitch jr z, .asm_13884 ld a, [$d0db] and a jr z, .asm_1389e dec a jr z, .asm_13905 ld [$d0db], a .asm_1389e FuncCoord 9, 9 ; $c45d ld hl, Coord ld c, [hl] ld a, [W_GRASSTILE] cp c ld a, [W_GRASSRATE] ; $d887 jr z, .asm_138c4 ld a, $14 cp c ld a, [W_WATERRATE] ; $d8a4 jr z, .asm_138c4 ld a, [W_CURMAP] ; $d35e cp REDS_HOUSE_1F jr c, .asm_13912 ld a, [W_CURMAPTILESET] ; $d367 cp $3 ; Viridian Forest/Safari Zone jr z, .asm_13912 ld a, [W_GRASSRATE] ; $d887 .asm_138c4 ld b, a ld a, [H_RAND1] ; $FF00+$d3 cp b jr nc, .asm_13912 ld a, [H_RAND2] ; $FF00+$d4 ld b, a ld hl, WildMonEncounterSlotChances ; $7918 .asm_138d0 ld a, [hli] cp b jr nc, .asm_138d7 inc hl jr .asm_138d0 .asm_138d7 ld c, [hl] ld hl, W_GRASSMONS ; $d888 FuncCoord 8, 9 ; $c45c ld a, [Coord] cp $14 jr nz, .asm_138e5 ld hl, W_WATERMONS ; $d8a5 (aliases: W_ENEMYMON1HP) .asm_138e5 ld b, $0 add hl, bc ld a, [hli] ld [W_CURENEMYLVL], a ; $d127 ld a, [hl] ld [$cf91], a ld [W_ENEMYMONID], a ld a, [$d0db] and a jr z, .asm_13916 ld a, [W_PARTYMON1_LEVEL] ; $d18c ld b, a ld a, [W_CURENEMYLVL] ; $d127 cp b jr c, .asm_13912 jr .asm_13916 .asm_13905 ld [$d0db], a ld a, $d2 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call EnableAutoTextBoxDrawing call DisplayTextID .asm_13912 ld a, $1 and a ret .asm_13916 xor a ret WildMonEncounterSlotChances: ; 13918 (4:7918) ; There are 10 slots for wild pokemon, and this is the table that defines how common each of ; those 10 slots is. A random number is generated and then the first byte of each pair in this ; table is compared against that random number. If the random number is less than or equal ; to the first byte, then that slot is chosen. The second byte is double the slot number. db $32, $00 ; 51/256 = 19.9% chance of slot 0 db $65, $02 ; 51/256 = 19.9% chance of slot 1 db $8C, $04 ; 39/256 = 15.2% chance of slot 2 db $A5, $06 ; 25/256 = 9.8% chance of slot 3 db $BE, $08 ; 25/256 = 9.8% chance of slot 4 db $D7, $0A ; 25/256 = 9.8% chance of slot 5 db $E4, $0C ; 13/256 = 5.1% chance of slot 6 db $F1, $0E ; 13/256 = 5.1% chance of slot 7 db $FC, $10 ; 11/256 = 4.3% chance of slot 8 db $FF, $12 ; 3/256 = 1.2% chance of slot 9 Func_1392c: ; 1392c (4:792c) ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld a, [W_PLAYERMOVENUM] ; $cfd2 ld hl, W_PLAYERMONMAXHP ; $d023 jr z, .asm_1393d ld a, [W_ENEMYMOVENUM] ; $cfcc ld hl, W_ENEMYMONMAXHP ; $cff4 .asm_1393d ld d, a ld a, [W_DAMAGE] ; $d0d7 ld b, a ld a, [$d0d8] ld c, a srl b rr c ld a, d cp $a5 jr z, .asm_13953 srl b rr c .asm_13953 ld a, b or c jr nz, .asm_13958 inc c .asm_13958 ld a, [hli] ld [wHPBarMaxHP+1], a ld a, [hl] ld [wHPBarMaxHP], a push bc ld bc, $fff2 add hl, bc pop bc ld a, [hl] ld [wHPBarOldHP], a sub c ld [hld], a ld [wHPBarNewHP], a ld a, [hl] ld [wHPBarOldHP+1], a sbc b ld [hl], a ld [wHPBarNewHP+1], a jr nc, .asm_13982 xor a ld [hli], a ld [hl], a ld hl, wHPBarNewHP ld [hli], a ld [hl], a .asm_13982 FuncCoord 10, 9 ; $c45e ld hl, Coord ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld a, $1 jr z, .asm_13990 FuncCoord 2, 2 ; $c3ca ld hl, Coord xor a .asm_13990 ld [wListMenuID], a ; $cf94 ld a, $48 call Predef ; indirect jump to UpdateHPBar (fa1d (3:7a1d)) ld hl, UnnamedText_1399e ; $799e jp PrintText UnnamedText_1399e: ; 1399e (4:799e) TX_FAR _UnnamedText_1399e db "@" Func_139a3: ; 139a3 (4:79a3) ld hl, W_ENEMYMONTYPE1 ld de, W_PLAYERMONTYPE1 ld a, [H_WHOSETURN] and a ld a, [W_ENEMYBATTSTATUS1] jr z, .asm_139b8 push hl ld h, d ld l, e pop de ld a, [W_PLAYERBATTSTATUS1] .asm_139b8 bit 6, a jr nz, Func_139d2 ld a, [hli] ld [de], a inc de ld a, [hl] ld [de], a ld hl, Func_3fba8 call Func_139d5 ld hl, UnnamedText_139cd jp PrintText UnnamedText_139cd: ; 139cd (4:79cd) TX_FAR _UnnamedText_139cd db "@" Func_139d2: ; 139d2 (4:79d2) ld hl, Func_3fb53 Func_139d5: ; 139d5 (4:79d5) ld b, BANK(Func_3fb53) jp Bankswitch Func_139da: ; 139da (4:79da) ld a, $7 ld hl, wPlayerMonAttackMod call Func_13a43 ld hl, wEnemyMonAttackMod call Func_13a43 ld hl, $cd12 ld de, W_PLAYERMONATK call Func_13a4a ld hl, $cd26 ld de, W_ENEMYMONATTACK call Func_13a4a ld hl, W_ENEMYMONSTATUS ld de, wEnemySelectedMove ld a, [H_WHOSETURN] and a jr z, .asm_13a09 ld hl, W_PLAYERMONSTATUS dec de .asm_13a09 ld a, [hl] ld [hl], $0 and $27 jr z, .asm_13a13 ld a, $ff ld [de], a .asm_13a13 xor a ld [W_PLAYERDISABLEDMOVE], a ld [W_ENEMYDISABLEDMOVE], a ld hl, $ccee ld [hli], a ld [hl], a ld hl, W_PLAYERBATTSTATUS1 call Func_13a37 ld hl, W_ENEMYBATTSTATUS1 call Func_13a37 ld hl, Func_3fba8 call Func_139d5 ld hl, UnnamedText_13a53 jp PrintText Func_13a37: ; 13a37 (4:7a37) res 7, [hl] inc hl ld a, [hl] and $78 ld [hli], a ld a, [hl] and $f8 ld [hl], a ret Func_13a43: ; 13a43 (4:7a43) ld b, $8 .loop ld [hli], a dec b jr nz, .loop ret Func_13a4a: ; 13a4a (4:7a4a) ld b, $8 .loop ld a, [hli] ld [de], a inc de dec b jr nz, .loop ret UnnamedText_13a53: ; 13a53 (4:7a53) TX_FAR _UnnamedText_13a53 db "@" Func_13a58: ; 13a58 (4:7a58) ld hl, W_GRASSRATE ; $d887 ld a, [W_ISLINKBATTLE] ; $d12b and a jr nz, .asm_13a86 ld hl, W_RIVALNAME ; $d34a ld a, [W_TRAINERCLASS] ; $d031 cp $19 jr z, .asm_13a86 cp $2a jr z, .asm_13a86 cp $2b jr z, .asm_13a86 ld [$d0b5], a ld a, TRAINER_NAME ld [W_LISTTYPE], a ld a, $e ld [$d0b7], a call GetName ld hl, $cd6d .asm_13a86 ld de, W_TRAINERNAME ld bc, $d jp CopyData GenRandom_: ; 13a8f (4:7a8f) ; generate a random 16-bit integer and store it at $FFD3,$FFD4 ld a,[rDIV] ld b,a ld a,[H_RAND1] adc b ld [H_RAND1],a ld a,[rDIV] ld b,a ld a,[H_RAND2] sbc b ld [H_RAND2],a ret SECTION "bank5",ROMX,BANK[$5] RedCyclingSprite: ; 14000 (5:4000) INCBIN "gfx/sprites/cycling.2bpp" ; was $14000 RedSprite: ; 14180 (5:4180) INCBIN "gfx/sprites/red.2bpp" ; was $14180 BlueSprite: ; 14300 (5:4300) INCBIN "gfx/sprites/blue.2bpp" ; was $14300 OakSprite: ; 14480 (5:4480) INCBIN "gfx/sprites/oak.2bpp" ; was $14480 BugCatcherSprite: ; 14600 (5:4600) INCBIN "gfx/sprites/bug_catcher.2bpp" ; was $14600 SlowbroSprite: ; 14780 (5:4780) INCBIN "gfx/sprites/slowbro.2bpp" ; was $14780 LassSprite: ; 14900 (5:4900) INCBIN "gfx/sprites/lass.2bpp" ; was $14900 BlackHairBoy1Sprite: ; 14a80 (5:4a80) INCBIN "gfx/sprites/black_hair_boy_1.2bpp" ; was $14a80 LittleGirlSprite: ; 14c00 (5:4c00) INCBIN "gfx/sprites/little_girl.2bpp" ; was $14c00 BirdSprite: ; 14d80 (5:4d80) INCBIN "gfx/sprites/bird.2bpp" ; was $14d80 FatBaldGuySprite: ; 14f00 (5:4f00) INCBIN "gfx/sprites/fat_bald_guy.2bpp" ; was $14f00 GamblerSprite: ; 15080 (5:5080) INCBIN "gfx/sprites/gambler.2bpp" ; was $15080 BlackHairBoy2Sprite: ; 15200 (5:5200) INCBIN "gfx/sprites/black_hair_boy_2.2bpp" ; was $15200 GirlSprite: ; 15380 (5:5380) INCBIN "gfx/sprites/girl.2bpp" ; was $15380 HikerSprite: ; 15500 (5:5500) INCBIN "gfx/sprites/hiker.2bpp" ; was $15500 FoulardWomanSprite: ; 15680 (5:5680) INCBIN "gfx/sprites/foulard_woman.2bpp" ; was $15680 GentlemanSprite: ; 15800 (5:5800) INCBIN "gfx/sprites/gentleman.2bpp" ; was $15800 DaisySprite: ; 15980 (5:5980) INCBIN "gfx/sprites/daisy.2bpp" ; was $15980 BikerSprite: ; 15b00 (5:5b00) INCBIN "gfx/sprites/biker.2bpp" ; was $15b00 SailorSprite: ; 15c80 (5:5c80) INCBIN "gfx/sprites/sailor.2bpp" ; was $15c80 CookSprite: ; 15e00 (5:5e00) INCBIN "gfx/sprites/cook.2bpp" ; was $15e00 BikeShopGuySprite: ; 15f80 (5:5f80) INCBIN "gfx/sprites/bike_shop_guy.2bpp" ; was $15f80 MrFujiSprite: ; 16040 (5:6040) INCBIN "gfx/sprites/mr_fuji.2bpp" ; was $16040 GiovanniSprite: ; 161c0 (5:61c0) INCBIN "gfx/sprites/giovanni.2bpp" ; was $161c0 RocketSprite: ; 16340 (5:6340) INCBIN "gfx/sprites/rocket.2bpp" ; was $16340 MediumSprite: ; 164c0 (5:64c0) INCBIN "gfx/sprites/medium.2bpp" ; was $164c0 WaiterSprite: ; 16640 (5:6640) INCBIN "gfx/sprites/waiter.2bpp" ; was $16640 ErikaSprite: ; 167c0 (5:67c0) INCBIN "gfx/sprites/erika.2bpp" ; was $167c0 MomGeishaSprite: ; 16940 (5:6940) INCBIN "gfx/sprites/mom_geisha.2bpp" ; was $16940 BrunetteGirlSprite: ; 16ac0 (5:6ac0) INCBIN "gfx/sprites/brunette_girl.2bpp" ; was $16ac0 LanceSprite: ; 16c40 (5:6c40) INCBIN "gfx/sprites/lance.2bpp" ; was $16c40 MomSprite: ; 16dc0 (5:6dc0) INCBIN "gfx/sprites/mom.2bpp" ; was $16dc0 BaldingGuySprite: ; 16e80 (5:6e80) INCBIN "gfx/sprites/balding_guy.2bpp" ; was $16e80 YoungBoySprite: ; 16f40 (5:6f40) INCBIN "gfx/sprites/young_boy.2bpp" ; was $16f40 GameboyKidSprite: ; 17000 (5:7000) INCBIN "gfx/sprites/gameboy_kid.2bpp" ; was $17000 ClefairySprite: ; 170c0 (5:70c0) INCBIN "gfx/sprites/clefairy.2bpp" ; was $170c0 AgathaSprite: ; 17240 (5:7240) INCBIN "gfx/sprites/agatha.2bpp" ; was $17240 BrunoSprite: ; 173c0 (5:73c0) INCBIN "gfx/sprites/bruno.2bpp" ; was $173c0 LoreleiSprite: ; 17540 (5:7540) INCBIN "gfx/sprites/lorelei.2bpp" ; was $17540 SeelSprite: ; 176c0 (5:76c0) INCBIN "gfx/sprites/seel.2bpp" ; was $176c0 ; Loads tile patterns for tiles used in the pokedex. LoadPokedexTilePatterns: ; 17840 (5:7840) call LoadHpBarAndStatusTilePatterns ld de,PokedexTileGraphics ; $6488 ld hl,$9600 ld bc,(BANK(PokedexTileGraphics) << 8) + $12 call CopyVideoData ld de,PokeballTileGraphics ; $697e ld hl,$9720 ld bc,(BANK(PokeballTileGraphics) << 8) + $01 jp CopyVideoData ; load pokeball tile for marking caught mons ; Loads tile patterns for map's sprites. ; For outside maps, it loads one of several fixed sets of sprites. ; For inside maps, it loads each sprite picture ID used in the map header. ; This is also called after displaying text because loading ; text tile patterns overwrites half of the sprite tile pattern data. ; Note on notation: ; $C1X* and $C2X* are used to denote $C100-$C1FF and $C200-$C2FF sprite slot ; fields, respectively, within loops. The X is the loop index. ; If there is an inner loop, Y is the inner loop index, i.e. $C1Y* and $C2Y* ; denote fields of the sprite slots interated over in the inner loop. InitMapSprites: ; 1785b (5:785b) call InitOutsideMapSprites ret c ; return if the map is an outside map (already handled by above call) ; if the map is an inside map (i.e. mapID >= $25) ld hl,wSpriteStateData1 ld de,$c20d ; Loop to copy picture ID's from $C1X0 to $C2XD for LoadMapSpriteTilePatterns. .copyPictureIDLoop ld a,[hl] ; $C1X0 (picture ID) ld [de],a ; $C2XD ld a,$10 add e ld e,a ld a,$10 add l ld l,a jr nz,.copyPictureIDLoop ; This is used for both inside and outside maps, since it is called by ; InitOutsideMapSprites. ; Loads tile pattern data for sprites into VRAM. LoadMapSpriteTilePatterns: ; 17871 (5:7871) ld a,[W_NUMSPRITES] and a ; are there any sprites? jr nz,.spritesExist ret .spritesExist ld c,a ; c = [W_NUMSPRITES] ld b,$10 ; number of sprite slots ld hl,$c20d xor a ld [$ff8e],a ; 4-tile sprite counter .copyPictureIDLoop ; loop to copy picture ID from $C2XD to $C2XE ld a,[hli] ; $C2XD (sprite picture ID) ld [hld],a ; $C2XE ld a,l add a,$10 ld l,a dec b jr nz,.copyPictureIDLoop ld hl,$c21e .loadTilePatternLoop ld de,$c21d ; Check if the current picture ID has already had its tile patterns loaded. ; This done by looping through the previous sprite slots and seeing if any of ; their picture ID's match that of the current sprite slot. .checkIfAlreadyLoadedLoop ld a,e and a,$f0 ld b,a ; b = offset of the wSpriteStateData2 sprite slot being checked against ld a,l and a,$f0 ; a = offset of current wSpriteStateData2 sprite slot cp b ; done checking all previous sprite slots? jr z,.notAlreadyLoaded ld a,[de] ; picture ID of the wSpriteStateData2 sprite slot being checked against cp [hl] ; do the picture ID's match? jp z,.alreadyLoaded ld a,e add a,$10 ld e,a jr .checkIfAlreadyLoadedLoop .notAlreadyLoaded ld de,$c20e ld b,$01 ; loop to find the highest tile pattern VRAM slot (among the first 10 slots) used by a previous sprite slot ; this is done in order to find the first free VRAM slot available .findNextVRAMSlotLoop ld a,e add a,$10 ld e,a ld a,l cp e ; reached current slot? jr z,.foundNextVRAMSlot ld a,[de] ; $C2YE (VRAM slot) cp a,11 ; is it one of the first 10 slots? jr nc,.findNextVRAMSlotLoop cp b ; compare the slot being checked to the current max jr c,.findNextVRAMSlotLoop ; if the slot being checked is less than the current max ; if the slot being checked is greater than or equal to the current max ld b,a ; store new max VRAM slot jr .findNextVRAMSlotLoop .foundNextVRAMSlot inc b ; increment previous max value to get next VRAM tile pattern slot ld a,b ; a = next VRAM tile pattern slot push af ld a,[hl] ; $C2XE (sprite picture ID) ld b,a ; b = current sprite picture ID cp a,SPRITE_BALL ; is it a 4-tile sprite? jr c,.notFourTileSprite pop af ld a,[$ff8e] ; 4-tile sprite counter add a,11 jr .storeVRAMSlot .notFourTileSprite pop af .storeVRAMSlot ld [hl],a ; store VRAM slot at $C2XE ld [$ff8d],a ; used to determine if it's 4-tile sprite later ld a,b ; a = current sprite picture ID dec a add a add a push bc push hl ld hl,SpriteSheetPointerTable jr nc,.noCarry inc h .noCarry add l ld l,a jr nc,.noCarry2 inc h .noCarry2 push hl call ReadSpriteSheetData push af push de push bc ld hl,$8000 ; VRAM base address ld bc,$c0 ; number of bytes per VRAM slot ld a,[$ff8d] cp a,11 ; is it a 4-tile sprite? jr nc,.fourTileSpriteVRAMAddr ld d,a dec d ; Equivalent to multiplying $C0 (number of bytes in 12 tiles) times the VRAM ; slot and adding the result to $8000 (the VRAM base address). .calculateVRAMAddrLoop add hl,bc dec d jr nz,.calculateVRAMAddrLoop jr .loadStillTilePattern .fourTileSpriteVRAMAddr ld hl,$87c0 ; address for second 4-tile sprite ld a,[$ff8e] ; 4-tile sprite counter and a ; is it the first 4-tile sprite? jr nz,.loadStillTilePattern ; if it's the first 4-tile sprite ld hl,$8780 ; address for first 4-tile sprite inc a ld [$ff8e],a ; 4-tile sprite counter .loadStillTilePattern pop bc pop de pop af push hl push hl ld h,d ld l,e pop de ld b,a ld a,[$cfc4] bit 0,a ; reloading upper half of tile patterns after displaying text? jr nz,.skipFirstLoad ; if so, skip loading data into the lower half ld a,b ld b,0 call FarCopyData2 ; load tile pattern data for sprite when standing still .skipFirstLoad pop de pop hl ld a,[$ff8d] cp a,11 ; is it a 4-tile sprite? jr nc,.skipSecondLoad ; if so, there is no second block push de call ReadSpriteSheetData push af ld a,$c0 add e ld e,a jr nc,.noCarry3 inc d .noCarry3 ld a,[$cfc4] bit 0,a ; reloading upper half of tile patterns after displaying text? jr nz,.loadWhileLCDOn pop af pop hl set 3,h ; add $800 to hl push hl ld h,d ld l,e pop de call FarCopyData2 ; load tile pattern data for sprite when walking jr .skipSecondLoad ; When reloading the upper half of tile patterns after diplaying text, the LCD ; will be on, so CopyVideoData (which writes to VRAM only during V-blank) must ; be used instead of FarCopyData2. .loadWhileLCDOn pop af pop hl set 3,h ; add $800 to hl ld b,a swap c call CopyVideoData ; load tile pattern data for sprite when walking .skipSecondLoad pop hl pop bc jr .nextSpriteSlot .alreadyLoaded ; if the current picture ID has already had its tile patterns loaded inc de ld a,[de] ; a = VRAM slot for the current picture ID (from $C2YE) ld [hl],a ; store VRAM slot in current wSpriteStateData2 sprite slot (at $C2XE) .nextSpriteSlot ld a,l add a,$10 ld l,a dec c jp nz,.loadTilePatternLoop ld hl,$c20d ld b,$10 ; the pictures ID's stored at $C2XD are no longer needed, so zero them .zeroStoredPictureIDLoop xor a ld [hl],a ; $C2XD ld a,$10 add l ld l,a dec b jr nz,.zeroStoredPictureIDLoop ret ; reads data from SpriteSheetPointerTable ; INPUT: ; hl = address of sprite sheet entry ; OUTPUT: ; de = pointer to sprite sheet ; bc = length in bytes ; a = ROM bank ReadSpriteSheetData: ; 17971 (5:7971) ld a,[hli] ld e,a ld a,[hli] ld d,a ld a,[hli] ld c,a xor a ld b,a ld a,[hli] ret ; Loads sprite set for outside maps (cities and routes) and sets VRAM slots. ; sets carry if the map is a city or route, unsets carry if not InitOutsideMapSprites: ; 1797b (5:797b) ld a,[W_CURMAP] cp a,REDS_HOUSE_1F ; is the map a city or a route (map ID less than $25)? ret nc ; if not, return ld hl,MapSpriteSets add l ld l,a jr nc,.noCarry inc h .noCarry ld a,[hl] ; a = spriteSetID cp a,$f0 ; does the map have 2 sprite sets? call nc,GetSplitMapSpriteSetID ; if so, choose the appropriate one ld b,a ; b = spriteSetID ld a,[$cfc4] bit 0,a ; reloading upper half of tile patterns after displaying text? jr nz,.loadSpriteSet ; if so, forcibly reload the sprite set ld a,[W_SPRITESETID] cp b ; has the sprite set ID changed? jr z,.skipLoadingSpriteSet ; if not, don't load it again .loadSpriteSet ld a,b ld [W_SPRITESETID],a dec a ld b,a sla a ld c,a sla a sla a add c add b ; a = (spriteSetID - 1) * 11 ld de,SpriteSets ; add a to de to get offset of sprite set add e ld e,a jr nc,.noCarry2 inc d .noCarry2 ld hl,$c20d ld a,SPRITE_RED ld [hl],a ld bc,W_SPRITESET ; Load the sprite set into RAM. ; This loop also fills $C2XD (sprite picture ID) where X is from $0 to $A ; with picture ID's. This is done so that LoadMapSpriteTilePatterns will ; load tile patterns for all sprite pictures in the sprite set. .loadSpriteSetLoop ld a,$10 add l ld l,a ld a,[de] ; sprite picture ID from sprite set ld [hl],a ; $C2XD (sprite picture ID) ld [bc],a inc de inc bc ld a,l cp a,$bd ; reached 11th sprite slot? jr nz,.loadSpriteSetLoop ld b,4 ; 4 remaining sprite slots .zeroRemainingSlotsLoop ; loop to zero the picture ID's of the remaining sprite slots ld a,$10 add l ld l,a xor a ld [hl],a ; $C2XD (sprite picture ID) dec b jr nz,.zeroRemainingSlotsLoop ld a,[W_NUMSPRITES] push af ; save number of sprites ld a,11 ; 11 sprites in sprite set ld [W_NUMSPRITES],a call LoadMapSpriteTilePatterns pop af ld [W_NUMSPRITES],a ; restore number of sprites ld hl,$c21e ld b,$0f ; The VRAM tile pattern slots that LoadMapSpriteTilePatterns set are in the ; order of the map's sprite set, not the order of the actual sprites loaded ; for the current map. So, they are not needed and are zeroed by this loop. .zeroVRAMSlotsLoop xor a ld [hl],a ; $C2XE (VRAM slot) ld a,$10 add l ld l,a dec b jr nz,.zeroVRAMSlotsLoop .skipLoadingSpriteSet ld hl,$c110 ; This loop stores the correct VRAM tile pattern slots according the sprite ; data from the map's header. Since the VRAM tile pattern slots are filled in ; the order of the sprite set, in order to find the VRAM tile pattern slot ; for a sprite slot, the picture ID for the sprite is looked up within the ; sprite set. The index of the picture ID within the sprite set plus one ; (since the Red sprite always has the first VRAM tile pattern slot) is the ; VRAM tile pattern slot. .storeVRAMSlotsLoop ld c,0 ld a,[hl] ; $C1X0 (picture ID) (zero if sprite slot is not used) and a ; is the sprite slot used? jr z,.skipGettingPictureIndex ; if the sprite slot is not used ld b,a ; b = picture ID ld de,W_SPRITESET ; Loop to find the index of the sprite's picture ID within the sprite set. .getPictureIndexLoop inc c ld a,[de] inc de cp b ; does the picture ID match? jr nz,.getPictureIndexLoop inc c .skipGettingPictureIndex push hl inc h ld a,$0e add l ld l,a ld a,c ; a = VRAM slot (zero if sprite slot is not used) ld [hl],a ; $C2XE (VRAM slot) pop hl ld a,$10 add l ld l,a and a jr nz,.storeVRAMSlotsLoop scf ret ; Chooses the correct sprite set ID depending on the player's position within ; the map for maps with two sprite sets. GetSplitMapSpriteSetID: ; 17a1a (5:7a1a) cp a,$f8 jr z,.route20 ld hl,SplitMapSpriteSets and a,$0f dec a sla a sla a add l ld l,a jr nc,.noCarry inc h .noCarry ld a,[hli] ; determines whether the map is split East/West or North/South cp a,$01 ld a,[hli] ; position of dividing line ld b,a jr z,.eastWestDivide .northSouthDivide ld a,[W_YCOORD] jr .compareCoord .eastWestDivide ld a,[W_XCOORD] .compareCoord cp b jr c,.loadSpriteSetID ; if in the East side or South side inc hl .loadSpriteSetID ld a,[hl] ret ; Uses sprite set $01 for West side and $0A for East side. ; Route 20 is a special case because the two map sections have a more complex ; shape instead of the map simply being split horizontally or vertically. .route20 ld hl,W_XCOORD ld a,[hl] cp a,$2b ld a,$01 ret c ld a,[hl] cp a,$3e ld a,$0a ret nc ld a,[hl] cp a,$37 ld b,$08 jr nc,.next ld b,$0d .next ld a,[W_YCOORD] cp b ld a,$0a ret c ld a,$01 ret MapSpriteSets: ; 17a64 (5:7a64) db $01 ; PALLET_TOWN db $01 ; VIRIDIAN_CITY db $02 ; PEWTER_CITY db $02 ; CERULEAN_CITY db $03 ; LAVENDER_TOWN db $04 ; VERMILION_CITY db $05 ; CELADON_CITY db $0a ; FUCHSIA_CITY db $01 ; CINNABAR_ISLAND db $06 ; INDIGO_PLATEAU db $07 ; SAFFRON_CITY db $01 ; unused map ID db $01 ; ROUTE_1 db $f1 ; ROUTE_2 db $02 ; ROUTE_3 db $02 ; ROUTE_4 db $f9 ; ROUTE_5 db $fa ; ROUTE_6 db $fb ; ROUTE_7 db $fc ; ROUTE_8 db $02 ; ROUTE_9 db $f2 ; ROUTE_10 db $f3 ; ROUTE_11 db $f4 ; ROUTE_12 db $08 ; ROUTE_13 db $08 ; ROUTE_14 db $f5 ; ROUTE_15 db $f6 ; ROUTE_16 db $09 ; ROUTE_17 db $f7 ; ROUTE_18 db $0a ; ROUTE_19 db $f8 ; ROUTE_20 db $01 ; ROUTE_21 db $01 ; ROUTE_22 db $06 ; ROUTE_23 db $02 ; ROUTE_24 db $02 ; ROUTE_25 ; Format: ; 00: determines whether the map is split East/West or North/South ; $01 = East/West divide ; $02 = North/South divide ; 01: coordinate of dividing line ; 02: sprite set ID if in the West or North side ; 03: sprite set ID if in the East or South side SplitMapSpriteSets: ; 17a89 (5:7a89) db $02,$25,$02,$01 ; $f1 db $02,$32,$02,$03 ; $f2 db $01,$39,$04,$08 ; $f3 db $02,$15,$03,$08 ; $f4 db $01,$08,$0A,$08 ; $f5 db $01,$18,$09,$05 ; $f6 db $01,$22,$09,$0A ; $f7 db $01,$35,$01,$0A ; $f8 db $02,$21,$02,$07 ; $f9 db $02,$02,$07,$04 ; $fa db $01,$11,$05,$07 ; $fb db $01,$03,$07,$03 ; $fc SpriteSets: ; 17ab9 (5:7ab9) ; sprite set $01 db SPRITE_BLUE db SPRITE_BUG_CATCHER db SPRITE_GIRL db SPRITE_FISHER2 db SPRITE_BLACK_HAIR_BOY_1 db SPRITE_GAMBLER db SPRITE_SEEL db SPRITE_OAK db SPRITE_SWIMMER db SPRITE_BALL db SPRITE_LYING_OLD_MAN ; sprite set $02 db SPRITE_BUG_CATCHER db SPRITE_ROCKET db SPRITE_BLACK_HAIR_BOY_2 db SPRITE_HIKER db SPRITE_SLOWBRO db SPRITE_BLUE db SPRITE_GUARD db SPRITE_LASS db SPRITE_BLACK_HAIR_BOY_1 db SPRITE_BALL db SPRITE_LYING_OLD_MAN_UNUSED_2 ; sprite set $03 db SPRITE_LITTLE_GIRL db SPRITE_GIRL db SPRITE_BLACK_HAIR_BOY_2 db SPRITE_HIKER db SPRITE_GAMBLER db SPRITE_SLOWBRO db SPRITE_LASS db SPRITE_BLACK_HAIR_BOY_1 db SPRITE_GUARD db SPRITE_BALL db SPRITE_LYING_OLD_MAN_UNUSED_2 ; sprite set $04 db SPRITE_FOULARD_WOMAN db SPRITE_BLACK_HAIR_BOY_2 db SPRITE_BUG_CATCHER db SPRITE_GAMBLER db SPRITE_SLOWBRO db SPRITE_GUARD db SPRITE_SAILOR db SPRITE_LASS db SPRITE_BLACK_HAIR_BOY_1 db SPRITE_BALL db SPRITE_LYING_OLD_MAN_UNUSED_2 ; sprite set $05 db SPRITE_LITTLE_GIRL db SPRITE_YOUNG_BOY db SPRITE_GIRL db SPRITE_FISHER2 db SPRITE_FAT_BALD_GUY db SPRITE_OLD_PERSON db SPRITE_SLOWBRO db SPRITE_GUARD db SPRITE_ROCKET db SPRITE_BALL db SPRITE_SNORLAX ; sprite set $06 db SPRITE_BUG_CATCHER db SPRITE_GYM_HELPER db SPRITE_SLOWBRO db SPRITE_BLUE db SPRITE_LASS db SPRITE_BLACK_HAIR_BOY_1 db SPRITE_SWIMMER db SPRITE_GUARD db SPRITE_GAMBLER db SPRITE_BALL db SPRITE_LYING_OLD_MAN_UNUSED_2 ; sprite set $07 db SPRITE_ROCKET db SPRITE_OAK_AIDE db SPRITE_LAPRAS_GIVER db SPRITE_ERIKA db SPRITE_GENTLEMAN db SPRITE_BIRD db SPRITE_ROCKER db SPRITE_BLACK_HAIR_BOY_1 db SPRITE_SLOWBRO db SPRITE_BALL db SPRITE_LYING_OLD_MAN_UNUSED_2 ; sprite set $08 db SPRITE_BIKER db SPRITE_BLACK_HAIR_BOY_2 db SPRITE_FAT_BALD_GUY db SPRITE_LASS db SPRITE_BLACK_HAIR_BOY_1 db SPRITE_FOULARD_WOMAN db SPRITE_FISHER2 db SPRITE_ROCKER db SPRITE_SLOWBRO db SPRITE_BALL db SPRITE_SNORLAX ; sprite set $09 db SPRITE_BIKER db SPRITE_BLACK_HAIR_BOY_1 db SPRITE_LAPRAS_GIVER db SPRITE_FISHER2 db SPRITE_ROCKER db SPRITE_HIKER db SPRITE_GAMBLER db SPRITE_FAT_BALD_GUY db SPRITE_BLACK_HAIR_BOY_2 db SPRITE_BALL db SPRITE_SNORLAX ; sprite set $0a db SPRITE_BIRD db SPRITE_BLACK_HAIR_BOY_1 db SPRITE_CLEFAIRY db SPRITE_FISHER2 db SPRITE_GAMBLER db SPRITE_SLOWBRO db SPRITE_SEEL db SPRITE_SWIMMER db SPRITE_BUG_CATCHER db SPRITE_BALL db SPRITE_OMANYTE SpriteSheetPointerTable: ; 17b27 (5:7b27) ; SPRITE_RED dw RedSprite db $c0 ; byte count db BANK(RedSprite) ; SPRITE_BLUE dw BlueSprite db $c0 ; byte count db BANK(BlueSprite) ; SPRITE_OAK dw OakSprite db $c0 ; byte count db BANK(OakSprite) ; SPRITE_BUG_CATCHER dw BugCatcherSprite db $c0 ; byte count db BANK(BugCatcherSprite) ; SPRITE_SLOWBRO dw SlowbroSprite db $c0 ; byte count db BANK(SlowbroSprite) ; SPRITE_LASS dw LassSprite db $c0 ; byte count db BANK(LassSprite) ; SPRITE_BLACK_HAIR_BOY_1 dw BlackHairBoy1Sprite db $c0 ; byte count db BANK(BlackHairBoy1Sprite) ; SPRITE_LITTLE_GIRL dw LittleGirlSprite db $c0 ; byte count db BANK(LittleGirlSprite) ; SPRITE_BIRD dw BirdSprite db $c0 ; byte count db BANK(BirdSprite) ; SPRITE_FAT_BALD_GUY dw FatBaldGuySprite db $c0 ; byte count db BANK(FatBaldGuySprite) ; SPRITE_GAMBLER dw GamblerSprite db $c0 ; byte count db BANK(GamblerSprite) ; SPRITE_BLACK_HAIR_BOY_2 dw BlackHairBoy2Sprite db $c0 ; byte count db BANK(BlackHairBoy2Sprite) ; SPRITE_GIRL dw GirlSprite db $c0 ; byte count db BANK(GirlSprite) ; SPRITE_HIKER dw HikerSprite db $c0 ; byte count db BANK(HikerSprite) ; SPRITE_FOULARD_WOMAN dw FoulardWomanSprite db $c0 ; byte count db BANK(FoulardWomanSprite) ; SPRITE_GENTLEMAN dw GentlemanSprite db $c0 ; byte count db BANK(GentlemanSprite) ; SPRITE_DAISY dw DaisySprite db $c0 ; byte count db BANK(DaisySprite) ; SPRITE_BIKER dw BikerSprite db $c0 ; byte count db BANK(BikerSprite) ; SPRITE_SAILOR dw SailorSprite db $c0 ; byte count db BANK(SailorSprite) ; SPRITE_COOK dw CookSprite db $c0 ; byte count db BANK(CookSprite) ; SPRITE_BIKE_SHOP_GUY dw BikeShopGuySprite db $c0 ; byte count db BANK(BikeShopGuySprite) ; SPRITE_MR_FUJI dw MrFujiSprite db $c0 ; byte count db BANK(MrFujiSprite) ; SPRITE_GIOVANNI dw GiovanniSprite db $c0 ; byte count db BANK(GiovanniSprite) ; SPRITE_ROCKET dw RocketSprite db $c0 ; byte count db BANK(RocketSprite) ; SPRITE_MEDIUM dw MediumSprite db $c0 ; byte count db BANK(MediumSprite) ; SPRITE_WAITER dw WaiterSprite db $c0 ; byte count db BANK(WaiterSprite) ; SPRITE_ERIKA dw ErikaSprite db $c0 ; byte count db BANK(ErikaSprite) ; SPRITE_MOM_GEISHA dw MomGeishaSprite db $c0 ; byte count db BANK(MomGeishaSprite) ; SPRITE_BRUNETTE_GIRL dw BrunetteGirlSprite db $c0 ; byte count db BANK(BrunetteGirlSprite) ; SPRITE_LANCE dw LanceSprite db $c0 ; byte count db BANK(LanceSprite) ; SPRITE_OAK_SCIENTIST_AIDE dw OakAideSprite db $c0 ; byte count db BANK(OakAideSprite) ; SPRITE_OAK_AIDE dw OakAideSprite db $c0 ; byte count db BANK(OakAideSprite) ; SPRITE_ROCKER dw RockerSprite db $c0 ; byte count db BANK(RockerSprite) ; SPRITE_SWIMMER dw SwimmerSprite db $c0 ; byte count db BANK(SwimmerSprite) ; SPRITE_WHITE_PLAYER dw WhitePlayerSprite db $c0 ; byte count db BANK(WhitePlayerSprite) ; SPRITE_GYM_HELPER dw GymHelperSprite db $c0 ; byte count db BANK(GymHelperSprite) ; SPRITE_OLD_PERSON dw OldPersonSprite db $c0 ; byte count db BANK(OldPersonSprite) ; SPRITE_MART_GUY dw MartGuySprite db $c0 ; byte count db BANK(MartGuySprite) ; SPRITE_FISHER dw FisherSprite db $c0 ; byte count db BANK(FisherSprite) ; SPRITE_OLD_MEDIUM_WOMAN dw OldMediumWomanSprite db $c0 ; byte count db BANK(OldMediumWomanSprite) ; SPRITE_NURSE dw NurseSprite db $c0 ; byte count db BANK(NurseSprite) ; SPRITE_CABLE_CLUB_WOMAN dw CableClubWomanSprite db $c0 ; byte count db BANK(CableClubWomanSprite) ; SPRITE_MR_MASTERBALL dw MrMasterballSprite db $c0 ; byte count db BANK(MrMasterballSprite) ; SPRITE_LAPRAS_GIVER dw LaprasGiverSprite db $c0 ; byte count db BANK(LaprasGiverSprite) ; SPRITE_WARDEN dw WardenSprite db $c0 ; byte count db BANK(WardenSprite) ; SPRITE_SS_CAPTAIN dw SsCaptainSprite db $c0 ; byte count db BANK(SsCaptainSprite) ; SPRITE_FISHER2 dw Fisher2Sprite db $c0 ; byte count db BANK(Fisher2Sprite) ; SPRITE_BLACKBELT dw BlackbeltSprite db $c0 ; byte count db BANK(BlackbeltSprite) ; SPRITE_GUARD dw GuardSprite db $c0 ; byte count db BANK(GuardSprite) ; $32 dw GuardSprite db $c0 ; byte count db BANK(GuardSprite) ; SPRITE_MOM dw MomSprite db $c0 ; byte count db BANK(MomSprite) ; SPRITE_BALDING_GUY dw BaldingGuySprite db $c0 ; byte count db BANK(BaldingGuySprite) ; SPRITE_YOUNG_BOY dw YoungBoySprite db $c0 ; byte count db BANK(YoungBoySprite) ; SPRITE_GAMEBOY_KID dw GameboyKidSprite db $c0 ; byte count db BANK(GameboyKidSprite) ; SPRITE_GAMEBOY_KID_COPY dw GameboyKidSprite db $c0 ; byte count db BANK(GameboyKidSprite) ; SPRITE_CLEFAIRY dw ClefairySprite db $c0 ; byte count db BANK(ClefairySprite) ; SPRITE_AGATHA dw AgathaSprite db $c0 ; byte count db BANK(AgathaSprite) ; SPRITE_BRUNO dw BrunoSprite db $c0 ; byte count db BANK(BrunoSprite) ; SPRITE_LORELEI dw LoreleiSprite db $c0 ; byte count db BANK(LoreleiSprite) ; SPRITE_SEEL dw SeelSprite db $c0 ; byte count db BANK(SeelSprite) ; SPRITE_BALL dw BallSprite db $40 ; byte count db BANK(BallSprite) ; SPRITE_OMANYTE dw OmanyteSprite db $40 ; byte count db BANK(OmanyteSprite) ; SPRITE_BOULDER dw BoulderSprite db $40 ; byte count db BANK(BoulderSprite) ; SPRITE_PAPER_SHEET dw PaperSheetSprite db $40 ; byte count db BANK(PaperSheetSprite) ; SPRITE_BOOK_MAP_DEX dw BookMapDexSprite db $40 ; byte count db BANK(BookMapDexSprite) ; SPRITE_CLIPBOARD dw ClipboardSprite db $40 ; byte count db BANK(ClipboardSprite) ; SPRITE_SNORLAX dw SnorlaxSprite db $40 ; byte count db BANK(SnorlaxSprite) ; SPRITE_OLD_AMBER_COPY dw OldAmberSprite db $40 ; byte count db BANK(OldAmberSprite) ; SPRITE_OLD_AMBER dw OldAmberSprite db $40 ; byte count db BANK(OldAmberSprite) ; SPRITE_LYING_OLD_MAN_UNUSED_1 dw LyingOldManSprite db $40 ; byte count db BANK(LyingOldManSprite) ; SPRITE_LYING_OLD_MAN_UNUSED_2 dw LyingOldManSprite db $40 ; byte count db BANK(LyingOldManSprite) ; SPRITE_LYING_OLD_MAN dw LyingOldManSprite db $40 ; byte count db BANK(LyingOldManSprite) Func_17c47: ; 17c47 (5:7c47) ld a, [$cd50] ld c, a ld b, $0 ld hl, EmotionBubblesPointerTable ; $7caf add hl, bc add hl, bc ld e, [hl] inc hl ld d, [hl] ld hl, $8f80 ld bc, (BANK(EmotionBubblesPointerTable) << 8) + $04 call CopyVideoData ld a, [$cfcb] push af ld a, $ff ld [$cfcb], a ld a, [$d736] bit 6, a ld hl, $c38f ld de, $c39f jr z, .asm_17c7a ld hl, $c37f ld de, $c38f .asm_17c7a ld bc, $90 .asm_17c7d ld a, [hl] ld [de], a dec hl dec de dec bc ld a, c or b jr nz, .asm_17c7d ld hl, $c104 ld a, [$cd4f] swap a ld c, a ld b, $0 add hl, bc ld a, [hli] ld b, a inc hl ld a, [hl] add $8 ld c, a ld de, EmotionBubblesOAM ; $7cb5 xor a call WriteOAMBlock ld c, $3c call DelayFrames pop af ld [$cfcb], a call DelayFrame jp UpdateSprites EmotionBubblesPointerTable: ; 17caf (5:7caf) dw EmotionBubbles dw EmotionBubbles + $40 dw EmotionBubbles + $80 EmotionBubblesOAM: ; 17cb5 (5:7cb5) db $F8,$00,$F9,$00 db $FA,$00,$FB,$00 EmotionBubbles: ; 17cbd (5:7cbd) INCBIN "gfx/emotion_bubbles.2bpp" Func_17d7d: ; 17d7d (5:7d7d) ld a, [wPlayerMonAccuracyMod] ; $cd1e cp $86 jr z, .asm_17d8d cp $92 ret nz ld a, [wPlayerMonEvasionMod] ; $cd1f cp $8f ret nz .asm_17d8d ld a, [W_NUMINPARTY] ; $d163 dec a ld [wWhichPokemon], a ; $cf92 ld a, $1 ld [$ccd4], a ld a, $32 ld [W_ISLINKBATTLE], a ; $d12b ld hl, Func_3ad0e ld b, BANK(Func_3ad0e) call Bankswitch xor a ld [W_ISLINKBATTLE], a ; $d12b jp Func_2307 SubstituteEffectHandler: ; 17dad (5:7dad) ld c, 50 call DelayFrames ld hl, W_PLAYERMONMAXHP ld de, wPlayerSubstituteHP ld bc, W_PLAYERBATTSTATUS2 ld a, [$ff00+$f3] ;whose turn? and a jr z, .notEnemy ld hl, W_ENEMYMONMAXHP ld de, wEnemySubstituteHP ld bc, W_ENEMYBATTSTATUS2 .notEnemy ld a, [bc] ;load flags bit 4, a ;user already has substitute? jr nz, .alreadyHasSubstitute ;skip this code if so ;user doesn't have a substitute [yet] push bc ld a, [hli] ;load max hp ld b, [hl] srl a ;max hp / 4, [quarter health to remove from user] rr b srl a rr b push de ld de, $fff2 ;subtract 8 to point to [current hp] instead of [max hp] add hl, de ;HL -= 8 pop de ld a, b ld [de], a ;save copy of HP to subtract in ccd7/ccd8 [how much HP substitute has] ld a, [hld] ;load current hp sub b ;subtract [max hp / 4] ld d, a ;save low byte result in D ld a, [hl] sbc a, 0 ;borrow from high byte if needed pop bc jr c, .notEnoughHP ;underflow means user would be left with negative health ;bug: note since it only brances on carry, it will possibly leave user with 0HP .userHasZeroOrMoreHP ldi [hl], a ;store high byte HP ld [hl], d ;store low byte HP ld h, b ld l, c set 4, [hl] ;set bit 4 of flags, user now has substitute ld a, [$d355] ;load options bit 7, a ;battle animation is enabled? ld hl, Func_3fba8 ; $7ba8 ;animation enabled: 0F:7BA8 ld b, BANK(Func_3fba8) jr z, .animationEnabled ld hl, AnimationSubstitute ;animation disabled: 1E:56E0 ld b, BANK(AnimationSubstitute) .animationEnabled call Bankswitch ;jump to routine depending on animation setting ld hl, UnnamedText_17e1d ;"it created a substitute" call PrintText ld hl, Func_3cd5a ld b, BANK(Func_3cd5a) jp Bankswitch .alreadyHasSubstitute ld hl, UnnamedText_17e22 ;"x has a substitute" jr .printText .notEnoughHP ld hl, UnnamedText_17e27 ;"too weak to make substitute" .printText jp PrintText UnnamedText_17e1d: ; 17e1d (5:7e1d) TX_FAR _UnnamedText_17e1d db "@" UnnamedText_17e22: ; 17e22 (5:7e22) TX_FAR _UnnamedText_17e22 db "@" UnnamedText_17e27: ; 17e27 (5:7e27) TX_FAR _UnnamedText_17e27 db "@" ActivatePC: ; 17e2c (5:7e2c) call SaveScreenTilesToBuffer2 ;XXX: copy background from wTileMap to wTileMapBackup2 ld a, $99 call PlaySound ;XXX: play sound or stop music ld hl, UnnamedText_17f23 ;player turned on PC call PrintText call WaitForSoundToFinish ;XXX: wait for sound to be done ld hl, wFlags_0xcd60 set 3, [hl] call LoadScreenTilesFromBuffer2 ;XXX: restore saved screen call Delay3 PCMainMenu: ; 17e48 (5:7e48) ld b, BANK(Func_213c8) ld hl, Func_213c8 call Bankswitch ld hl, wFlags_0xcd60 set 5, [hl] call HandleMenuInput bit 1, a ;if player pressed B jp nz, LogOff ld a, [wMaxMenuItem] cp a, 2 jr nz, .next ;if not 2 menu items (not counting log off) (2 occurs before you get the pokedex) ld a, [wCurrentMenuItem] and a jp z, BillsPC ;if current menu item id is 0, it's bills pc cp a, 1 jr z, .playersPC ;if current menu item id is 1, it's players pc jp LogOff ;otherwise, it's 2, and you're logging off .next cp a, 3 jr nz, .next2 ;if not 3 menu items (not counting log off) (3 occurs after you get the pokedex, before you beat the pokemon league) ld a, [wCurrentMenuItem] and a jp z, BillsPC ;if current menu item id is 0, it's bills pc cp a, 1 jr z, .playersPC ;if current menu item id is 1, it's players pc cp a, 2 jp z, OaksPC ;if current menu item id is 2, it's oaks pc jp LogOff ;otherwise, it's 3, and you're logging off .next2 ld a, [wCurrentMenuItem] and a jp z, BillsPC ;if current menu item id is 0, it's bills pc cp a, 1 jr z, .playersPC ;if current menu item id is 1, it's players pc cp a, 2 jp z, OaksPC ;if current menu item id is 2, it's oaks pc cp a, 3 jp z, PKMNLeague ;if current menu item id is 3, it's pkmnleague jp LogOff ;otherwise, it's 4, and you're logging off .playersPC ld hl, wFlags_0xcd60 res 5, [hl] set 3, [hl] ld a, $9B call PlaySound ;XXX: play sound or stop music call WaitForSoundToFinish ;XXX: wait for sound to be done ld hl, UnnamedText_17f32 ;accessed players pc call PrintText ld b, BANK(Func_78e6) ld hl, Func_78e6 call Bankswitch jr ReloadMainMenu OaksPC: ; 17ec0 (5:7ec0) ld a, $9B call PlaySound ;XXX: play sound or stop music call WaitForSoundToFinish ;XXX: wait for sound to be done ld b, BANK(Func_1e915) ld hl, Func_1e915 call Bankswitch jr ReloadMainMenu PKMNLeague: ; 17ed2 (5:7ed2) ld a, $9B call PlaySound ;XXX: play sound or stop music call WaitForSoundToFinish ;XXX: wait for sound to be done ld b, BANK(Func_7657e) ld hl, Func_7657e call Bankswitch jr ReloadMainMenu BillsPC: ; 17ee4 (5:7ee4) ld a, $9B call PlaySound ;XXX: play sound or stop music call WaitForSoundToFinish ;XXX: wait for sound to be done ld a, [$D7F1] ;has to do with having met Bill bit 0, a jr nz, .billsPC ;if you've met bill, use that bill's instead of someone's ld hl, UnnamedText_17f2d ;accessed someone's pc jr .printText .billsPC ld hl, UnnamedText_17f28 ;accessed bill's pc .printText call PrintText ld b, BANK(BillsPC_) ld hl, BillsPC_ call Bankswitch ReloadMainMenu: ; 17f06 (5:7f06) xor a ld [$CC3C], a call ReloadMapData call UpdateSprites ;XXX: moves sprites jp PCMainMenu LogOff: ; 17f13 (5:7f13) ld a, $9A call PlaySound ;XXX: play sound or stop music call WaitForSoundToFinish ;XXX: wait for sound to be done ld hl, wFlags_0xcd60 res 3, [hl] res 5, [hl] ret UnnamedText_17f23: ; 17f23 (5:7f23) TX_FAR _UnnamedText_17f23 db "@" UnnamedText_17f28: ; 17f28 (5:7f28) TX_FAR _UnnamedText_17f28 db "@" UnnamedText_17f2d: ; 17f2d (5:7f2d) TX_FAR _UnnamedText_17f2d db "@" UnnamedText_17f32: ; 17f32 (5:7f32) TX_FAR _UnnamedText_17f32 db "@" ; removes one of the specified item ID [$FFdb] from bag (if existent) RemoveItemByID: ; 17f37 (5:7f37) ld hl, wBagItems ; $d31e ld a, [$FF00+$db] ld b, a xor a ld [$FF00+$dc], a .asm_17f40 ld a, [hli] cp $ff ret z cp b jr z, .asm_17f4f inc hl ld a, [$FF00+$dc] inc a ld [$FF00+$dc], a jr .asm_17f40 .asm_17f4f ld a, $1 ld [$cf96], a ld a, [$FF00+$dc] ld [wWhichPokemon], a ; $cf92 ld hl, wNumBagItems ; $d31d jp RemoveItemFromInventory SECTION "bank6",ROMX,BANK[$6] CeladonCity_h: ; 18000 (6:4000) db $00 ; tileset db CELADON_CITY_HEIGHT, CELADON_CITY_WIDTH ; dimensions (y, x) dw CeladonCityBlocks, CeladonCityTextPointers, CeladonCityScript ; blocks, texts, scripts db WEST | EAST ; connections WEST_MAP_CONNECTION ROUTE_16, ROUTE_16_WIDTH, 4, 0, ROUTE_16_HEIGHT, Route16Blocks, CELADON_CITY_WIDTH EAST_MAP_CONNECTION ROUTE_7, ROUTE_7_WIDTH, 4, 0, ROUTE_7_HEIGHT, Route7Blocks, CELADON_CITY_WIDTH dw CeladonCityObject ; objects CeladonCityObject: ; 0x18022 (size=189) db $f ; border tile db $d ; warps db $d, $8, $0, CELADON_MART_1 db $d, $a, $2, CELADON_MART_1 db $9, $18, $0, CELADON_MANSION_1 db $3, $18, $2, CELADON_MANSION_1 db $3, $19, $2, CELADON_MANSION_1 db $9, $29, $0, CELADON_POKECENTER db $1b, $c, $0, CELADON_GYM db $13, $1c, $0, GAME_CORNER db $13, $27, $0, CELADON_MART_5 ; beta warp! no longer used db $13, $21, $0, CELADONPRIZE_ROOM db $1b, $1f, $0, CELADON_DINER db $1b, $23, $0, CELADON_HOUSE db $1b, $2b, $0, CELADON_HOTEL db $9 ; signs db $f, $1b, $a ; CeladonCityText10 db $f, $13, $b ; CeladonCityText11 db $9, $2a, $c ; PokeCenterSignText db $1d, $d, $d ; CeladonCityText13 db $9, $15, $e ; CeladonCityText14 db $d, $c, $f ; CeladonCityText15 db $15, $27, $10 ; CeladonCityText16 db $15, $21, $11 ; CeladonCityText17 db $15, $1b, $12 ; CeladonCityText18 db $9 ; people db SPRITE_LITTLE_GIRL, $11 + 4, $8 + 4, $fe, $0, $1 ; person db SPRITE_OLD_PERSON, $1c + 4, $b + 4, $ff, $d1, $2 ; person db SPRITE_GIRL, $13 + 4, $e + 4, $fe, $1, $3 ; person db SPRITE_OLD_PERSON, $16 + 4, $19 + 4, $ff, $d0, $4 ; person db SPRITE_OLD_PERSON, $10 + 4, $16 + 4, $ff, $d0, $5 ; person db SPRITE_FISHER2, $c + 4, $20 + 4, $ff, $d2, $6 ; person db SPRITE_SLOWBRO, $c + 4, $1e + 4, $ff, $d3, $7 ; person db SPRITE_ROCKET, $1d + 4, $20 + 4, $fe, $2, $8 ; person db SPRITE_ROCKET, $e + 4, $2a + 4, $fe, $2, $9 ; person ; warp-to EVENT_DISP $19, $d, $8 ; CELADON_MART_1 EVENT_DISP $19, $d, $a ; CELADON_MART_1 EVENT_DISP $19, $9, $18 ; CELADON_MANSION_1 EVENT_DISP $19, $3, $18 ; CELADON_MANSION_1 EVENT_DISP $19, $3, $19 ; CELADON_MANSION_1 EVENT_DISP $19, $9, $29 ; CELADON_POKECENTER EVENT_DISP $19, $1b, $c ; CELADON_GYM EVENT_DISP $19, $13, $1c ; GAME_CORNER EVENT_DISP $19, $13, $27 ; CELADON_MART_5 EVENT_DISP $19, $13, $21 ; CELADONPRIZE_ROOM EVENT_DISP $19, $1b, $1f ; CELADON_DINER EVENT_DISP $19, $1b, $23 ; CELADON_HOUSE EVENT_DISP $19, $1b, $2b ; CELADON_HOTEL CeladonCityBlocks: ; 180df (6:40df) INCBIN "maps/celadoncity.blk" PalletTown_h: ; 182a1 (6:42a1) db $00 ; tileset db PALLET_TOWN_HEIGHT, PALLET_TOWN_WIDTH ; dimensions dw PalletTownBlocks, PalletTownTextPointers, PalletTownScript db NORTH | SOUTH ; connections NORTH_MAP_CONNECTION ROUTE_1, ROUTE_1_WIDTH, ROUTE_1_HEIGHT, 0, 0, ROUTE_1_WIDTH, Route1Blocks SOUTH_MAP_CONNECTION ROUTE_21, ROUTE_21_WIDTH, 0, 0, ROUTE_21_WIDTH, Route21Blocks, PALLET_TOWN_WIDTH, PALLET_TOWN_HEIGHT dw PalletTownObject PalletTownObject: ; 0x182c3 (size=58) db $b ; border tile db $3 ; warps db $5, $5, $0, REDS_HOUSE_1F db $5, $d, $0, BLUES_HOUSE db $b, $c, $1, OAKS_LAB db $4 ; signs db $d, $d, $4 ; PalletTownText4 db $9, $7, $5 ; PalletTownText5 db $5, $3, $6 ; PalletTownText6 db $5, $b, $7 ; PalletTownText7 db $3 ; people db SPRITE_OAK, $5 + 4, $8 + 4, $ff, $ff, $1 ; person db SPRITE_GIRL, $8 + 4, $3 + 4, $fe, $0, $2 ; person db SPRITE_FISHER2, $e + 4, $b + 4, $fe, $0, $3 ; person ; warp-to EVENT_DISP $a, $5, $5 ; REDS_HOUSE_1F EVENT_DISP $a, $5, $d ; BLUES_HOUSE EVENT_DISP $a, $b, $c ; OAKS_LAB PalletTownBlocks: ; 182fd (6:42fd) INCBIN "maps/pallettown.blk" ViridianCity_h: ; 0x18357 to 0x18384 (45 bytes) (bank=6) (id=1) db $00 ; tileset db VIRIDIAN_CITY_HEIGHT, VIRIDIAN_CITY_WIDTH ; dimensions (y, x) dw ViridianCityBlocks, ViridianCityTextPointers, ViridianCityScript ; blocks, texts, scripts db NORTH | SOUTH | WEST ; connections NORTH_MAP_CONNECTION ROUTE_2, ROUTE_2_WIDTH, ROUTE_2_HEIGHT, 5, 0, ROUTE_2_WIDTH, Route2Blocks SOUTH_MAP_CONNECTION ROUTE_1, ROUTE_1_WIDTH, 5, 0, ROUTE_1_WIDTH, Route1Blocks, VIRIDIAN_CITY_WIDTH, VIRIDIAN_CITY_HEIGHT WEST_MAP_CONNECTION ROUTE_22, ROUTE_22_WIDTH, 4, 0, ROUTE_22_HEIGHT, Route22Blocks, VIRIDIAN_CITY_WIDTH dw ViridianCityObject ; objects ViridianCityObject: ; 0x18384 (size=104) db $f ; border tile db $5 ; warps db $19, $17, $0, VIRIDIAN_POKECENTER db $13, $1d, $0, VIRIDIAN_MART db $f, $15, $0, VIRIDIAN_SCHOOL db $9, $15, $0, VIRIDIAN_HOUSE db $7, $20, $0, VIRIDIAN_GYM db $6 ; signs db $11, $11, $8 ; ViridianCityText8 db $1, $13, $9 ; ViridianCityText9 db $1d, $15, $a ; ViridianCityText10 db $13, $1e, $b ; MartSignText db $19, $18, $c ; PokeCenterSignText db $7, $1b, $d ; ViridianCityText13 db $7 ; people db SPRITE_BUG_CATCHER, $14 + 4, $d + 4, $fe, $0, $1 ; person db SPRITE_GAMBLER, $8 + 4, $1e + 4, $ff, $ff, $2 ; person db SPRITE_BUG_CATCHER, $19 + 4, $1e + 4, $fe, $0, $3 ; person db SPRITE_GIRL, $9 + 4, $11 + 4, $ff, $d3, $4 ; person db SPRITE_LYING_OLD_MAN, $9 + 4, $12 + 4, $ff, $ff, $5 ; person db SPRITE_FISHER2, $17 + 4, $6 + 4, $ff, $d0, $6 ; person db SPRITE_GAMBLER, $5 + 4, $11 + 4, $fe, $2, $7 ; person ; warp-to EVENT_DISP $14, $19, $17 ; VIRIDIAN_POKECENTER EVENT_DISP $14, $13, $1d ; VIRIDIAN_MART EVENT_DISP $14, $f, $15 ; VIRIDIAN_SCHOOL EVENT_DISP $14, $9, $15 ; VIRIDIAN_HOUSE EVENT_DISP $14, $7, $20 ; VIRIDIAN_GYM ViridianCityBlocks: ; 183ec (6:43ec) INCBIN "maps/viridiancity.blk" PewterCity_h: ; 0x18554 to 0x18576 (34 bytes) (bank=6) (id=2) db $00 ; tileset db PEWTER_CITY_HEIGHT, PEWTER_CITY_WIDTH ; dimensions (y, x) dw PewterCityBlocks, PewterCityTextPointers, PewterCityScript ; blocks, texts, scripts db SOUTH | EAST ; connections SOUTH_MAP_CONNECTION ROUTE_2, ROUTE_2_WIDTH, 5, 0, ROUTE_2_WIDTH, Route2Blocks, PEWTER_CITY_WIDTH, PEWTER_CITY_HEIGHT EAST_MAP_CONNECTION ROUTE_3, ROUTE_3_WIDTH, 4, 0, ROUTE_3_HEIGHT, Route3Blocks, PEWTER_CITY_WIDTH dw PewterCityObject ; objects db $0 PewterCityObject: ; 0x18577 (size=111) db $a ; border tile db $7 ; warps db $7, $e, $0, MUSEUM_1F db $5, $13, $2, MUSEUM_1F db $11, $10, $0, PEWTER_GYM db $d, $1d, $0, PEWTER_HOUSE_1 db $11, $17, $0, PEWTER_MART db $1d, $7, $0, PEWTER_HOUSE_2 db $19, $d, $0, PEWTER_POKECENTER db $7 ; signs db $1d, $13, $6 ; PewterCityText6 db $13, $21, $7 ; PewterCityText7 db $11, $18, $8 ; MartSignText db $19, $e, $9 ; PokeCenterSignText db $9, $f, $a ; PewterCityText10 db $11, $b, $b ; PewterCityText11 db $17, $19, $c ; PewterCityText12 db $5 ; people db SPRITE_LASS, $f + 4, $8 + 4, $ff, $ff, $1 ; person db SPRITE_BLACK_HAIR_BOY_1, $19 + 4, $11 + 4, $ff, $ff, $2 ; person db SPRITE_BLACK_HAIR_BOY_2, $11 + 4, $1b + 4, $ff, $ff, $3 ; person db SPRITE_BLACK_HAIR_BOY_2, $19 + 4, $1a + 4, $fe, $2, $4 ; person db SPRITE_BUG_CATCHER, $10 + 4, $23 + 4, $ff, $d0, $5 ; person ; warp-to EVENT_DISP $14, $7, $e ; MUSEUM_1F EVENT_DISP $14, $5, $13 ; MUSEUM_1F EVENT_DISP $14, $11, $10 ; PEWTER_GYM EVENT_DISP $14, $d, $1d ; PEWTER_HOUSE_1 EVENT_DISP $14, $11, $17 ; PEWTER_MART EVENT_DISP $14, $1d, $7 ; PEWTER_HOUSE_2 EVENT_DISP $14, $19, $d ; PEWTER_POKECENTER PewterCityBlocks: ; 185e6 (6:45e6) INCBIN "maps/pewtercity.blk" CeruleanCity_h: ; 0x1874e to 0x18786 (56 bytes) (bank=6) (id=3) db $00 ; tileset db CERULEAN_CITY_HEIGHT, CERULEAN_CITY_WIDTH ; dimensions (y, x) dw CeruleanCityBlocks, CeruleanCityTextPointers, CeruleanCityScript ; blocks, texts, scripts db NORTH | SOUTH | WEST | EAST ; connections NORTH_MAP_CONNECTION ROUTE_24, ROUTE_24_WIDTH, ROUTE_24_HEIGHT, 5, 0, ROUTE_24_WIDTH, Route24Blocks SOUTH_MAP_CONNECTION ROUTE_5, ROUTE_5_WIDTH, 5, 0, ROUTE_5_WIDTH, Route5Blocks, CERULEAN_CITY_WIDTH, CERULEAN_CITY_HEIGHT WEST_MAP_CONNECTION ROUTE_4, ROUTE_4_WIDTH, 4, 0, ROUTE_4_HEIGHT, Route4Blocks, CERULEAN_CITY_WIDTH EAST_MAP_CONNECTION ROUTE_9, ROUTE_9_WIDTH, 4, 0, ROUTE_9_HEIGHT, Route9Blocks, CERULEAN_CITY_WIDTH dw CeruleanCityObject ; objects CeruleanCityObject: ; 0x18786 (size=170) db $f ; border tile db $a ; warps db $b, $1b, $0, TRASHED_HOUSE db $f, $d, $0, CERULEAN_HOUSE db $11, $13, $0, CERULEAN_POKECENTER db $13, $1e, $0, CERULEAN_GYM db $19, $d, $0, BIKE_SHOP db $19, $19, $0, CERULEAN_MART db $b, $4, $0, UNKNOWN_DUNGEON_1 db $9, $1b, $2, TRASHED_HOUSE db $b, $9, $1, CERULEAN_HOUSE_3 db $9, $9, $0, CERULEAN_HOUSE_3 db $6 ; signs db $13, $17, $c ; CeruleanCityText12 db $1d, $11, $d ; CeruleanCityText13 db $19, $1a, $e ; MartSignText db $11, $14, $f ; PokeCenterSignText db $19, $b, $10 ; CeruleanCityText16 db $15, $1b, $11 ; CeruleanCityText17 db $b ; people db SPRITE_BLUE, $2 + 4, $14 + 4, $ff, $d0, $1 ; person db SPRITE_ROCKET, $8 + 4, $1e + 4, $ff, $ff, $42, ROCKET + $C8, $5 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $14 + 4, $1f + 4, $ff, $d0, $3 ; person db SPRITE_BLACK_HAIR_BOY_2, $12 + 4, $f + 4, $fe, $1, $4 ; person db SPRITE_BLACK_HAIR_BOY_2, $15 + 4, $9 + 4, $fe, $2, $5 ; person db SPRITE_GUARD, $c + 4, $1c + 4, $ff, $d0, $6 ; person db SPRITE_LASS, $1a + 4, $1d + 4, $ff, $d2, $7 ; person db SPRITE_SLOWBRO, $1a + 4, $1c + 4, $ff, $d0, $8 ; person db SPRITE_LASS, $1b + 4, $9 + 4, $fe, $2, $9 ; person db SPRITE_BLACK_HAIR_BOY_2, $c + 4, $4 + 4, $ff, $d0, $a ; person db SPRITE_GUARD, $c + 4, $1b + 4, $ff, $d0, $b ; person ; warp-to EVENT_DISP $14, $b, $1b ; TRASHED_HOUSE EVENT_DISP $14, $f, $d ; CERULEAN_HOUSE EVENT_DISP $14, $11, $13 ; CERULEAN_POKECENTER EVENT_DISP $14, $13, $1e ; CERULEAN_GYM EVENT_DISP $14, $19, $d ; BIKE_SHOP EVENT_DISP $14, $19, $19 ; CERULEAN_MART EVENT_DISP $14, $b, $4 ; UNKNOWN_DUNGEON_1 EVENT_DISP $14, $9, $1b ; TRASHED_HOUSE EVENT_DISP $14, $b, $9 ; CERULEAN_HOUSE_3 EVENT_DISP $14, $9, $9 ; CERULEAN_HOUSE_3 CeruleanCityBlocks: ; 18830 (6:4830) INCBIN "maps/ceruleancity.blk" VermilionCity_h: ; 0x18998 to 0x189ba (34 bytes) (bank=6) (id=5) db $00 ; tileset db VERMILION_CITY_HEIGHT, VERMILION_CITY_WIDTH ; dimensions (y, x) dw VermilionCityBlocks, VermilionCityTextPointers, VermilionCityScript ; blocks, texts, scripts db NORTH | EAST ; connections NORTH_MAP_CONNECTION ROUTE_6, ROUTE_6_WIDTH, ROUTE_6_HEIGHT, 5, 0, ROUTE_6_WIDTH, Route6Blocks EAST_MAP_CONNECTION ROUTE_11, ROUTE_11_WIDTH, 4, 0, ROUTE_11_HEIGHT, Route11Blocks, VERMILION_CITY_WIDTH dw VermilionCityObject ; objects VermilionCityObject: ; 0x189ba (size=133) db $43 ; border tile db $9 ; warps db $3, $b, $0, VERMILION_POKECENTER db $d, $9, $0, POKEMON_FAN_CLUB db $d, $17, $0, VERMILION_MART db $13, $c, $0, VERMILION_GYM db $13, $17, $0, VERMILION_HOUSE_1 db $1f, $12, $0, VERMILION_DOCK db $1f, $13, $0, VERMILION_DOCK db $d, $f, $0, VERMILION_HOUSE_3 db $3, $7, $0, VERMILION_HOUSE_2 db $7 ; signs db $3, $1b, $7 ; VermilionCityText7 db $d, $25, $8 ; VermilionCityText8 db $d, $18, $9 ; MartSignText db $3, $c, $a ; PokeCenterSignText db $d, $7, $b ; VermilionCityText11 db $13, $7, $c ; VermilionCityText12 db $f, $1d, $d ; VermilionCityText13 db $6 ; people db SPRITE_FOULARD_WOMAN, $7 + 4, $13 + 4, $fe, $2, $1 ; person db SPRITE_GAMBLER, $6 + 4, $e + 4, $ff, $ff, $2 ; person db SPRITE_SAILOR, $1e + 4, $13 + 4, $ff, $d1, $3 ; person db SPRITE_GAMBLER, $7 + 4, $1e + 4, $ff, $ff, $4 ; person db SPRITE_SLOWBRO, $9 + 4, $1d + 4, $fe, $1, $5 ; person db SPRITE_SAILOR, $1b + 4, $19 + 4, $fe, $2, $6 ; person ; warp-to EVENT_DISP $14, $3, $b ; VERMILION_POKECENTER EVENT_DISP $14, $d, $9 ; POKEMON_FAN_CLUB EVENT_DISP $14, $d, $17 ; VERMILION_MART EVENT_DISP $14, $13, $c ; VERMILION_GYM EVENT_DISP $14, $13, $17 ; VERMILION_HOUSE_1 EVENT_DISP $14, $1f, $12 ; VERMILION_DOCK EVENT_DISP $14, $1f, $13 ; VERMILION_DOCK EVENT_DISP $14, $d, $f ; VERMILION_HOUSE_3 EVENT_DISP $14, $3, $7 ; VERMILION_HOUSE_2 VermilionCityBlocks: ; 18a3f (6:4a3f) INCBIN "maps/vermilioncity.blk" FuchsiaCity_h: ; 0x18ba7 to 0x18bd4 (45 bytes) (bank=6) (id=7) db $00 ; tileset db FUCHSIA_CITY_HEIGHT, FUCHSIA_CITY_WIDTH ; dimensions (y, x) dw FuchsiaCityBlocks, FuchsiaCityTextPointers, FuchsiaCityScript ; blocks, texts, scripts db SOUTH | WEST | EAST ; connections SOUTH_MAP_CONNECTION ROUTE_19, ROUTE_19_WIDTH, 5, 0, ROUTE_19_WIDTH, Route19Blocks, FUCHSIA_CITY_WIDTH, FUCHSIA_CITY_HEIGHT WEST_MAP_CONNECTION ROUTE_18, ROUTE_18_WIDTH, 4, 0, ROUTE_18_HEIGHT, Route18Blocks, FUCHSIA_CITY_WIDTH EAST_MAP_CONNECTION ROUTE_15, ROUTE_15_WIDTH, 4, 0, ROUTE_15_HEIGHT, Route15Blocks, FUCHSIA_CITY_WIDTH dw FuchsiaCityObject ; objects FuchsiaCityObject: ; 0x18bd4 (size=178) db $f ; border tile db $9 ; warps db $d, $5, $0, FUCHSIA_MART db $1b, $b, $0, FUCHSIA_HOUSE_1 db $1b, $13, $0, FUCHSIA_POKECENTER db $1b, $1b, $0, FUCHSIA_HOUSE_2 db $3, $12, $0, SAFARIZONEENTRANCE db $1b, $5, $0, FUCHSIA_GYM db $d, $16, $0, FUCHSIAMEETINGROOM db $1b, $1f, $1, FUCHSIA_HOUSE_3 db $18, $1f, $0, FUCHSIA_HOUSE_3 db $e ; signs db $17, $f, $b ; FuchsiaCityText11 db $f, $19, $c ; FuchsiaCityText12 db $5, $11, $d ; FuchsiaCityText13 db $d, $6, $e ; MartSignText db $1b, $14, $f ; PokeCenterSignText db $1d, $1b, $10 ; FuchsiaCityText16 db $f, $15, $11 ; FuchsiaCityText17 db $1d, $5, $12 ; FuchsiaCityText18 db $7, $21, $13 ; FuchsiaCityText19 db $7, $1b, $14 ; FuchsiaCityText20 db $7, $d, $15 ; FuchsiaCityText21 db $d, $1f, $16 ; FuchsiaCityText22 db $f, $d, $17 ; FuchsiaCityText23 db $7, $7, $18 ; FuchsiaCityText24 db $a ; people db SPRITE_BUG_CATCHER, $c + 4, $a + 4, $fe, $2, $1 ; person db SPRITE_GAMBLER, $11 + 4, $1c + 4, $fe, $2, $2 ; person db SPRITE_FISHER2, $e + 4, $1e + 4, $ff, $d0, $3 ; person db SPRITE_BUG_CATCHER, $8 + 4, $18 + 4, $ff, $d1, $4 ; person db SPRITE_CLEFAIRY, $5 + 4, $1f + 4, $fe, $0, $5 ; person db SPRITE_BALL, $6 + 4, $19 + 4, $ff, $ff, $6 ; person db SPRITE_SLOWBRO, $6 + 4, $c + 4, $fe, $2, $7 ; person db SPRITE_SLOWBRO, $c + 4, $1e + 4, $fe, $2, $8 ; person db SPRITE_SEEL, $11 + 4, $8 + 4, $fe, $0, $9 ; person db SPRITE_OMANYTE, $5 + 4, $6 + 4, $ff, $ff, $a ; person ; warp-to EVENT_DISP $14, $d, $5 ; FUCHSIA_MART EVENT_DISP $14, $1b, $b ; FUCHSIA_HOUSE_1 EVENT_DISP $14, $1b, $13 ; FUCHSIA_POKECENTER EVENT_DISP $14, $1b, $1b ; FUCHSIA_HOUSE_2 EVENT_DISP $14, $3, $12 ; SAFARIZONEENTRANCE EVENT_DISP $14, $1b, $5 ; FUCHSIA_GYM EVENT_DISP $14, $d, $16 ; FUCHSIAMEETINGROOM EVENT_DISP $14, $1b, $1f ; FUCHSIA_HOUSE_3 EVENT_DISP $14, $18, $1f ; FUCHSIA_HOUSE_3 FuchsiaCityBlocks: ; 18c86 (6:4c86) INCBIN "maps/fuchsiacity.blk" Func_18dee: ; 18dee (6:4dee) call Func_18e36 ld a, [$d732] bit 0, a ret z ld a, [W_PLAYTIMEMINUTES] ; $da42 and a ret nz ld a, [W_PLAYTIMEFRAMES] ; $da45 inc a ld [W_PLAYTIMEFRAMES], a ; $da45 cp $3c ret nz xor a ld [W_PLAYTIMEFRAMES], a ; $da45 ld a, [W_PLAYTIMESECONDS] ; $da44 inc a ld [W_PLAYTIMESECONDS], a ; $da44 cp $3c ret nz xor a ld [W_PLAYTIMESECONDS], a ; $da44 ld a, [$da43] inc a ld [$da43], a cp $3c ret nz xor a ld [$da43], a ld a, [$da41] inc a ld [$da41], a cp $ff ret nz ld a, $ff ld [W_PLAYTIMEMINUTES], a ; $da42 ret Func_18e36: ; 18e36 (6:4e36) ld a, [$d13a] and a jr nz, .asm_18e40 ld a, $ff jr .asm_18e41 .asm_18e40 dec a .asm_18e41 ld [$d13a], a and a ret nz ld a, [$d730] res 1, a res 2, a bit 5, a res 5, a ld [$d730], a ret z xor a ld [H_NEWLYPRESSEDBUTTONS], a ld [H_CURRENTPRESSEDBUTTONS], a ret PalletTownScript: ; 18e5b (6:4e5b) ld a,[$D74B] bit 4,a jr z,.next ld hl,$D747 set 6,[hl] .next call EnableAutoTextBoxDrawing ld hl,PalletTownScriptPointers ld a,[W_PALLETTOWNCURSCRIPT] jp CallFunctionInTable PalletTownScriptPointers: ; 18e73 (6:4e73) dw PalletTownScript0 dw PalletTownScript1 dw PalletTownScript2 dw PalletTownScript3 dw PalletTownScript4 dw PalletTownScript5 dw PalletTownScript6 PalletTownScript0: ; 18e81 (6:4e81) ld a,[$D747] bit 0,a ret nz ld a,[W_YCOORD] cp 1 ; is player near north exit? ret nz xor a ld [H_CURRENTPRESSEDBUTTONS],a ld a,4 ld [$D528],a ld a,$FF call PlaySound ; stop music ld a, BANK(Music_MeetProfOak) ld c,a ; song bank ld a, MUSIC_MEET_PROF_OAK ; “oak appears” music call PlayMusic ; plays music ld a,$FC ld [wJoypadForbiddenButtonsMask],a ld hl,$D74B set 7,[hl] ; trigger the next script ld a,1 ld [W_PALLETTOWNCURSCRIPT],a ret PalletTownScript1: ; 18eb2 (6:4eb2) xor a ld [$CF0D],a ld a,1 ld [$FF8C],a call DisplayTextID ld a,$FF ld [wJoypadForbiddenButtonsMask],a ld a,0 ld [$CC4D],a ld a,$15 call Predef ; trigger the next script ld a,2 ld [W_PALLETTOWNCURSCRIPT],a ret PalletTownScript2: ; 18ed2 (6:4ed2) ld a,1 ld [$FF8C],a ld a,4 ld [$FF8D],a call Func_34a6 call Delay3 ld a,1 ld [W_YCOORD],a ld a,1 ld [$FF9B],a ld a,1 swap a ld [$FF95],a ld a,$22 call Predef ld hl,$FF95 dec [hl] ld a,$20 call Predef ; load Oak’s movement into $CC97 ld de,$CC97 ld a,1 ; oak ld [$FF8C],a call MoveSprite ld a,$FF ld [wJoypadForbiddenButtonsMask],a ; trigger the next script ld a,3 ld [W_PALLETTOWNCURSCRIPT],a ret PalletTownScript3: ; 18f12 (6:4f12) ld a,[$D730] bit 0,a ret nz xor a ld [$C109],a ld a,1 ld [$CF0D],a ld a,$FC ld [wJoypadForbiddenButtonsMask],a ld a,1 ld [$FF8C],a call DisplayTextID ld a,$FF ld [wJoypadForbiddenButtonsMask],a ld a,1 ld [$CF13],a xor a ld [$CF10],a ld a,1 ld [$CC57],a ld a,[H_LOADEDROMBANK] ld [$CC58],a ; trigger the next script ld a,4 ld [W_PALLETTOWNCURSCRIPT],a ret PalletTownScript4: ; 18f4b (6:4f4b) ld a,[$CC57] and a ret nz ; trigger the next script ld a,5 ld [W_PALLETTOWNCURSCRIPT],a ret PalletTownScript5: ; 18f56 (6:4f56) ld a,[$D74A] bit 2,a jr nz,.next and 3 cp 3 jr nz,.next ld hl,$D74A set 2,[hl] ld a,$27 ld [$CC4D],a ld a,$11 call Predef ld a,$28 ld [$CC4D],a ld a,$15 jp Predef .next ld a,[$D74B] bit 4,a ret z ld hl,$D74B set 6,[hl] PalletTownScript6: ; 18f87 (6:4f87) ret PalletTownTextPointers: ; 18f88 (6:4f88) dw PalletTownText1 dw PalletTownText2 dw PalletTownText3 dw PalletTownText4 dw PalletTownText5 dw PalletTownText6 dw PalletTownText7 PalletTownText1: ; 18f96 (6:4f96) db 8 ld a,[$CF0D] and a jr nz,.next ld a,1 ld [$CC3C],a ld hl,OakAppearsText jr .done .next ld hl,OakWalksUpText .done call PrintText jp TextScriptEnd OakAppearsText: ; 18fb0 (6:4fb0) TX_FAR _OakAppearsText db 8 ld c,10 call DelayFrames xor a ld [$CD4F],a ld [$CD50],a ld a,$4C call Predef ; display ! over head ld a,4 ld [$D528],a jp TextScriptEnd OakWalksUpText: ; 18fce (6:4fce) TX_FAR _OakWalksUpText db "@" PalletTownText2: ; 0x18fd3 girl TX_FAR _PalletTownText2 ; dc 42 29 pointing to 0xa42dc db "@" PalletTownText3: ; 0x18fd8 fat man TX_FAR _PalletTownText3 db "@" PalletTownText4: ; 0x18fdd sign by lab TX_FAR _PalletTownText4 db "@" PalletTownText5: ; 0x18fe2 sign by fence TX_FAR _PalletTownText5 db "@" PalletTownText6: ; 0x18fe7 sign by Red’s house TX_FAR _PalletTownText6 db "@" PalletTownText7: ; 0x18fec sign by Blue’s house TX_FAR _PalletTownText7 db "@" ViridianCityScript: ; 18ff1 (6:4ff1) call EnableAutoTextBoxDrawing ld hl, ViridianCityScriptPointers ld a, [W_VIRIDIANCITYCURSCRIPT] jp CallFunctionInTable ViridianCityScriptPointers: ; 18ffd (6:4ffd) dw ViridianCityScript0 dw ViridianCityScript1 dw ViridianCityScript2 dw ViridianCityScript3 ViridianCityScript0: ; 19005 (6:5005) call ViridianCityScript_1900b jp ViridianCityScript_1903d ViridianCityScript_1900b: ; 1900b (6:500b) ld a, [$d74c] bit 0, a ret nz ld a, [W_OBTAINEDBADGES] cp %01111111 jr nz, .asm_1901e ; 0x19016 $6 ld hl, $d74c set 0, [hl] ret .asm_1901e ld a, [W_YCOORD] cp $8 ret nz ld a, [W_XCOORD] cp $20 ret nz ld a, $e ld [$ff00+$8c], a call DisplayTextID xor a ld [H_CURRENTPRESSEDBUTTONS], a call ViridianCityScript_190cf ld a, $3 ld [W_VIRIDIANCITYCURSCRIPT], a ret ViridianCityScript_1903d: ; 1903d (6:503d) ld a, [$d74b] bit 5, a ret nz ld a, [W_YCOORD] cp $9 ret nz ld a, [W_XCOORD] cp $13 ret nz ld a, $5 ld [$ff00+$8c], a call DisplayTextID xor a ld [H_CURRENTPRESSEDBUTTONS], a call ViridianCityScript_190cf ld a, $3 ld [W_VIRIDIANCITYCURSCRIPT], a ret ViridianCityScript1: ; 19062 (6:5062) ld a, [$c134] ld [$ff00+$eb], a ld a, [$c136] ld [$ff00+$ec], a ld a, [$c234] ld [$ff00+$ed], a ld a, [$c235] ld [$ff00+$ee], a xor a ld [wListScrollOffset], a ; set up battle for Old Man ld a, $1 ld [W_BATTLETYPE], a ld a, 5 ld [W_CURENEMYLVL], a ld a, WEEDLE ld [W_CUROPPONENT], a ld a, $2 ld [W_VIRIDIANCITYCURSCRIPT], a ret ViridianCityScript2: ; 1908f (6:508f) ld a, [$ff00+$eb] ld [$c134], a ld a, [$ff00+$ec] ld [$c136], a ld a, [$ff00+$ed] ld [$c234], a ld a, [$ff00+$ee] ld [$c235], a call UpdateSprites call Delay3 xor a ld [wJoypadForbiddenButtonsMask], a ld a, $f ld [$ff00+$8c], a call DisplayTextID xor a ld [W_BATTLETYPE], a ld [wJoypadForbiddenButtonsMask], a ld a, $0 ld [W_VIRIDIANCITYCURSCRIPT], a ret ViridianCityScript3: ; 190c1 (6:50c1) ld a, [$cd38] and a ret nz call Delay3 ld a, 0 ld [W_VIRIDIANCITYCURSCRIPT], a ret ViridianCityScript_190cf: ; 190cf (6:50cf) call Func_3486 ld a, $1 ld [$cd38], a ld a, $80 ld [$ccd3], a xor a ld [$c109], a ld [wJoypadForbiddenButtonsMask], a ret ViridianCityTextPointers: ; 190e4 (6:50e4) dw ViridianCityText1 dw ViridianCityText2 dw ViridianCityText3 dw ViridianCityText4 dw ViridianCityText5 dw ViridianCityText6 dw ViridianCityText7 dw ViridianCityText8 dw ViridianCityText9 dw ViridianCityText10 dw MartSignText dw PokeCenterSignText dw ViridianCityText13 dw ViridianCityText14 dw ViridianCityText15 ViridianCityText1: ; 19102 (6:5102) TX_FAR _ViridianCityText1 db "@" ViridianCityText2: ; 19107 (6:5107) db $08 ; asm ld a, [$d356] cp $7f ld hl, UnnamedText_19127 jr z, .asm_ae9fe ; 0x19110 ld a, [$d751] bit 1, a jr nz, .asm_ae9fe ; 0x19117 ld hl, UnnamedText_19122 .asm_ae9fe ; 0x1911c call PrintText jp TextScriptEnd UnnamedText_19122: ; 19122 (6:5122) TX_FAR _UnnamedText_19122 db "@" UnnamedText_19127: ; 19127 (6:5127) TX_FAR _UnnamedText_19127 db "@" ViridianCityText3: ; 1912c (6:512c) db $08 ; asm ld hl, UnnamedText_1914d call PrintText call YesNoChoice ld a, [$cc26] and a jr nz, .asm_6dfea ; 0x1913a ld hl, UnnamedText_19157 call PrintText jr .asm_d611f ; 0x19142 .asm_6dfea ; 0x19144 ld hl, UnnamedText_19152 call PrintText .asm_d611f ; 0x1914a jp TextScriptEnd UnnamedText_1914d: ; 1914d (6:514d) TX_FAR _UnnamedText_1914d db "@" UnnamedText_19152: ; 19152 (6:5152) TX_FAR _UnnamedText_19152 db "@" UnnamedText_19157: ; 19157 (6:5157) TX_FAR _UnnamedText_19157 db "@" ViridianCityText4: ; 1915c (6:515c) db $08 ; asm ld a, [$d74b] bit 5, a jr nz, .asm_83894 ; 0x19162 ld hl, UnnamedText_19175 call PrintText jr .asm_700a6 ; 0x1916a .asm_83894 ; 0x1916c ld hl, UnnamedText_1917a call PrintText .asm_700a6 ; 0x19172 jp TextScriptEnd UnnamedText_19175: ; 19175 (6:5175) TX_FAR _UnnamedText_19175 db "@" UnnamedText_1917a: ; 1917a (6:517a) TX_FAR _UnnamedText_1917a db "@" ViridianCityText5: ; 1917f (6:517f) db $08 ; asm ld hl, UnnamedText_19191 call PrintText call ViridianCityScript_190cf ld a, $3 ld [W_VIRIDIANCITYCURSCRIPT], a jp TextScriptEnd UnnamedText_19191: ; 19191 (6:5191) TX_FAR _UnnamedText_19191 db "@" ViridianCityText6: ; 19196 (6:5196) db $08 ; asm ld a, [$d74c] bit 1, a jr nz, .asm_4e5a0 ; 0x1919c ld hl, UnnamedText_191ca call PrintText ld bc, (TM_42 << 8) | 1 call GiveItem jr nc, .BagFull ld hl, ReceivedTM42Text call PrintText ld hl, $d74c set 1, [hl] jr .asm_3c73c ; 0x191b7 .BagFull ld hl, TM42NoRoomText call PrintText jr .asm_3c73c ; 0x191bf .asm_4e5a0 ; 0x191c1 ld hl, TM42Explanation call PrintText .asm_3c73c ; 0x191c7 jp TextScriptEnd UnnamedText_191ca: ; 191ca (6:51ca) TX_FAR _UnnamedText_191ca db "@" ReceivedTM42Text: ; 191cf (6:51cf) TX_FAR _ReceivedTM42Text ; 0xa469a db $10, "@" TM42Explanation: ; 191d5 (6:51d5) TX_FAR _TM42Explanation db "@" TM42NoRoomText: ; 191da (6:51da) TX_FAR _TM42NoRoomText db "@" ViridianCityText7: ; 191df (6:51df) db $08 ; asm ld hl, UnnamedText_1920a call PrintText ld c, $2 call DelayFrames call YesNoChoice ld a, [$cc26] and a jr z, .asm_42f68 ; 0x191f2 ld hl, UnnamedText_1920f call PrintText ld a, $1 ld [W_VIRIDIANCITYCURSCRIPT], a jr .asm_2413a ; 0x191ff .asm_42f68 ; 0x19201 ld hl, UnnamedText_19214 call PrintText .asm_2413a ; 0x19207 jp TextScriptEnd UnnamedText_1920a: ; 1920a (6:520a) TX_FAR _UnnamedText_1920a db "@" UnnamedText_1920f: ; 1920f (6:520f) TX_FAR _UnnamedText_1920f db "@" UnnamedText_19214: ; 19214 (6:5214) TX_FAR _UnnamedText_19214 db "@" ViridianCityText15: ; 19219 (6:5219) TX_FAR _UnnamedText_19219 db "@" ViridianCityText8: ; 1921e (6:521e) TX_FAR _ViridianCityText8 db "@" ViridianCityText9: ; 19223 (6:5223) TX_FAR _ViridianCityText9 db "@" ViridianCityText10: ; 19228 (6:5228) TX_FAR _ViridianCityText10 db "@" ViridianCityText13: ; 1922d (6:522d) TX_FAR _ViridianCityText13 db "@" ViridianCityText14: ; 19232 (6:5232) TX_FAR _ViridianCityText14 db "@" PewterCityScript: ; 19237 (6:5237) call EnableAutoTextBoxDrawing ld hl, PewterCityScriptPointers ld a, [W_PEWTERCITYCURSCRIPT] jp CallFunctionInTable PewterCityScriptPointers: ; 19243 (6:5243) dw PewterCityScript0 dw PewterCityScript1 dw PewterCityScript2 dw PewterCityScript3 dw PewterCityScript4 dw PewterCityScript5 dw PewterCityScript6 PewterCityScript0: ; 19251 (6:5251) xor a ld [W_MUSEUMF1CURSCRIPT], a ld hl, $d754 res 0, [hl] call PewterCityScript_1925e ret PewterCityScript_1925e: ; 1925e (6:525e) ld a, [$d755] bit 7, a ret nz ld hl, CoordsData_19277 call ArePlayerCoordsInArray ret nc ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld a, $5 ld [$ff00+$8c], a jp DisplayTextID CoordsData_19277: ; 19277 (6:5277) db $11,$23 db $11,$24 db $12,$25 db $13,$25 db $ff PewterCityScript1: ; 19280 (6:5280) ld a, [$cc57] and a ret nz ld a, $3 ld [$ff00+$8c], a ld a, $4 ld [$ff00+$8d], a call Func_34a6 ld a, $34 ld [$ff00+$8d], a call Func_34b9 call Func_2307 ld hl, wFlags_0xcd60 set 4, [hl] ld a, $d ld [$ff00+$8c], a call DisplayTextID ld a, $3c ld [$ff00+$eb], a ld a, $30 ld [$ff00+$ec], a ld a, $c ld [$ff00+$ed], a ld a, $11 ld [$ff00+$ee], a ld a, $3 ld [$cf13], a call Func_32f9 ld a, $3 ld [$ff00+$8c], a ld de, MovementData_PewterMuseumGuyExit ; $52ce call MoveSprite ld a, $2 ld [W_PEWTERCITYCURSCRIPT], a ret MovementData_PewterMuseumGuyExit: ; 192ce (6:52ce) db $00,$00,$00,$00,$FF PewterCityScript2: ; 192d3 (6:52d3) ld a, [$d730] bit 0, a ret nz ld a, $3 ld [$cc4d], a ld a, $11 call Predef ld a, $3 ld [W_PEWTERCITYCURSCRIPT], a ret PewterCityScript3: ; 192e9 (6:52e9) ld a, $3 ld [$cf13], a call Func_32fe ld a, $3 ld [$cc4d], a ld a, $15 call Predef xor a ld [wJoypadForbiddenButtonsMask], a ld a, $0 ld [W_PEWTERCITYCURSCRIPT], a ret PewterCityScript4: ; 19305 (6:5305) ld a, [$cc57] and a ret nz ld a, $5 ld [$ff00+$8c], a ld a, $8 ld [$ff00+$8d], a call Func_34a6 ld a, $18 ld [$ff00+$8d], a call Func_34b9 call Func_2307 ld hl, wFlags_0xcd60 set 4, [hl] ld a, $e ld [$ff00+$8c], a call DisplayTextID ld a, $3c ld [$ff00+$eb], a ld a, $40 ld [$ff00+$ec], a ld a, $16 ld [$ff00+$ed], a ld a, $10 ld [$ff00+$ee], a ld a, $5 ld [$cf13], a call Func_32f9 ld a, $5 ld [$ff00+$8c], a ld de, MovementData_PewterGymGuyExit call MoveSprite ld a, $5 ld [W_PEWTERCITYCURSCRIPT], a ret MovementData_PewterGymGuyExit: ; 19353 (6:5353) db $C0,$C0,$C0,$C0,$C0,$FF PewterCityScript5: ; 19359 (6:5359) ld a, [$d730] bit 0, a ret nz ld a, $4 ld [$cc4d], a ld a, $11 call Predef ld a, $6 ld [W_PEWTERCITYCURSCRIPT], a ret PewterCityScript6: ; 1936f (6:536f) ld a, $5 ld [$cf13], a call Func_32fe ld a, $4 ld [$cc4d], a ld a, $15 call Predef xor a ld [wJoypadForbiddenButtonsMask], a ld a, $0 ld [W_PEWTERCITYCURSCRIPT], a ret PewterCityTextPointers: ; 1938b (6:538b) dw PewterCityText1 dw PewterCityText2 dw PewterCityText3 dw PewterCityText4 dw PewterCityText5 dw PewterCityText6 dw PewterCityText7 dw MartSignText dw PokeCenterSignText dw PewterCityText10 dw PewterCityText11 dw PewterCityText12 dw PewterCityText13 dw PewterCityText14 PewterCityText1: ; 193a7 (6:53a7) TX_FAR _PewterCityText1 db "@" PewterCityText2: ; 193ac (6:53ac) TX_FAR _PewterCityText2 db "@" PewterCityText3: ; 193b1 (6:53b1) db $08 ; asm ld hl, UnnamedText_193f1 call PrintText call YesNoChoice ld a, [$cc26] and a jr nz, .asm_f46a9 ; 0x193bf ld hl, UnnamedText_193f6 call PrintText jr .asm_ac429 ; 0x193c7 .asm_f46a9 ; 0x193c9 ld hl, UnnamedText_193fb call PrintText xor a ldh [$b3], a ldh [$b4], a ld [$cf10], a ld a, $2 ld [$cc57], a ldh a, [$b8] ld [$cc58], a ld a, $3 ld [$cf13], a call Func_32f4 ld a, $1 ld [W_PEWTERCITYCURSCRIPT], a .asm_ac429 ; 0x193ee jp TextScriptEnd UnnamedText_193f1: ; 193f1 (6:53f1) TX_FAR _UnnamedText_193f1 db "@" UnnamedText_193f6: ; 193f6 (6:53f6) TX_FAR _UnnamedText_193f6 db "@" UnnamedText_193fb: ; 193fb (6:53fb) TX_FAR _UnnamedText_193fb db "@" PewterCityText13: ; 19400 (6:5400) TX_FAR _PewterCityText13 db "@" PewterCityText4: ; 19405 (6:5405) db $8 ld hl, UnnamedText_19427 call PrintText call YesNoChoice ld a, [$cc26] cp $0 jr nz, .asm_e4603 ld hl, UnnamedText_1942c call PrintText jr .asm_e4604 ; 0x1941c $6 .asm_e4603 ld hl, UnnamedText_19431 call PrintText .asm_e4604 ; 0x19424 jp TextScriptEnd UnnamedText_19427: ; 19427 (6:5427) TX_FAR _UnnamedText_19427 db "@" UnnamedText_1942c: ; 1942c (6:542c) TX_FAR _UnnamedText_1942c db "@" UnnamedText_19431: ; 19431 (6:5431) TX_FAR _UnnamedText_19431 db "@" PewterCityText5: ; 19436 (6:5436) db $08 ; asm ld hl, UnnamedText_1945d call PrintText xor a ldh [$b4], a ld [$cf10], a ld a, $3 ld [$cc57], a ldh a, [$b8] ld [$cc58], a ld a, $5 ld [$cf13], a call Func_32f4 ld a, $4 ld [W_PEWTERCITYCURSCRIPT], a jp TextScriptEnd UnnamedText_1945d: ; 1945d (6:545d) TX_FAR _UnnamedText_1945d db "@" PewterCityText14: ; 19462 (6:5462) UnnamedText_19462: ; 19462 (6:5462) TX_FAR _UnnamedText_19462 db "@" PewterCityText6: ; 19467 (6:5467) TX_FAR _PewterCityText6 db "@" PewterCityText7: ; 1946c (6:546c) TX_FAR _PewterCityText7 db "@" PewterCityText10: ; 19471 (6:5471) TX_FAR _PewterCityText10 db "@" PewterCityText11: ; 19476 (6:5476) TX_FAR _PewterCityText11 db "@" PewterCityText12: ; 1947b (6:547b) TX_FAR _PewterCityText12 db "@" CeruleanCityScript: ; 19480 (6:5480) call EnableAutoTextBoxDrawing ld hl, CeruleanCityScriptPointers ld a, [W_CERULEANCITYCURSCRIPT] jp CallFunctionInTable CeruleanCityScript_1948c: ; 1948c (6:548c) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_CERULEANCITYCURSCRIPT], a ld a, $5 ld [$cc4d], a ld a, $11 jp Predef CeruleanCityScriptPointers: ; 1949d (6:549d) dw CeruleanCityScript0 dw CeruleanCityScript1 dw CeruleanCityScript2 dw CeruleanCityScript3 dw CeruleanCityScript4 CeruleanCityScript4: ; 194a7 (6:54a7) ld a, [W_ISINBATTLE] cp $ff jp z, CeruleanCityScript_1948c ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld hl, $d75b set 7, [hl] ld a, $2 ld [$ff00+$8c], a call DisplayTextID xor a ld [wJoypadForbiddenButtonsMask], a ld [W_CERULEANCITYCURSCRIPT], a ret CeruleanCityScript0: ; 194c8 (6:54c8) ld a, [$d75b] bit 7, a jr nz, .asm_194f7 ; 0x194cd $28 ld hl, CeruleanCityCoords1 call ArePlayerCoordsInArray jr nc, .asm_194f7 ; 0x194d5 $20 ld a, [$cd3d] cp $1 ld a, $8 ld b, $0 jr nz, .asm_194e6 ; 0x194e0 $4 ld a, $4 ld b, $4 .asm_194e6 ld [$d528], a ld a, b ld [$c129], a call Delay3 ld a, $2 ld [$ff00+$8c], a jp DisplayTextID .asm_194f7 ld a, [$d75a] bit 0, a ret nz ld hl, CeruleanCityCoords2 call ArePlayerCoordsInArray ret nc ld a, [$d700] and a jr z, .asm_19512 ; 0x19508 $8 ld a, $ff ld [$c0ee], a call PlaySound .asm_19512 ld c, BANK(Music_MeetRival) ld a, MUSIC_MEET_RIVAL call PlayMusic xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld a, [$d362] cp $14 jr z, .asm_19535 ; 0x19526 $d ld a, $1 ld [$ff00+$8c], a ld a, $5 ld [$ff00+$8b], a call Func_3500 ld [hl], $19 .asm_19535 ld a, $5 ld [$cc4d], a ld a, $15 call Predef ld de, CeruleanCityMovement1 ld a, $1 ld [$ff00+$8c], a call MoveSprite ld a, $1 ld [W_CERULEANCITYCURSCRIPT], a ret CeruleanCityCoords1: ; 1954f (6:554f) db $07,$1e db $09,$1e db $ff CeruleanCityCoords2: ; 19554 (6:5554) db $06,$14 db $06,$15 db $ff CeruleanCityMovement1: ; 19559 (6:5559) db $00,$00,$00,$FF CeruleanCityScript_1955d: ; 1955d (6:555d) ld a,1 ld [$ff8c],a xor a ld [$ff8d],a jp Func_34a6 ; face object CeruleanCityScript1: ; 19567 (6:5567) ld a, [$d730] bit 0, a ret nz xor a ld [wJoypadForbiddenButtonsMask], a ld a, $1 ld [$ff00+$8c], a call DisplayTextID ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, UnnamedText_1966d ld de, UnnamedText_19672 call PreBattleSaveRegisters ld a, $e1 ld [$d059], a ; select which team to use during the encounter ld a, [W_RIVALSTARTER] cp SQUIRTLE jr nz, .NotSquirtle ; 0x19592 $4 ld a, $7 jr .done .NotSquirtle cp BULBASAUR jr nz, .Charmander ; 0x1959a $4 ld a, $8 jr .done .Charmander ld a, $9 .done ld [W_TRAINERNO], a xor a ld [H_CURRENTPRESSEDBUTTONS], a call CeruleanCityScript_1955d ld a, $2 ld [W_CERULEANCITYCURSCRIPT], a ret CeruleanCityScript2: ; 195b1 (6:55b1) ld a, [$d057] cp $ff jp z, CeruleanCityScript_1948c call CeruleanCityScript_1955d ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld hl, $d75a set 0, [hl] ld a, $1 ld [$ff00+$8c], a call DisplayTextID ld a, $ff ld [$c0ee], a call PlaySound ld b, BANK(Music_RivalAlternateStart) ld hl, Music_RivalAlternateStart call Bankswitch ld a, $1 ld [$ff00+$8c], a call SetSpriteMovementBytesToFF ld a, [$d362] cp $14 jr nz, .asm_195f0 ; 0x195e9 $5 ld de, CeruleanCityMovement4 jr .asm_195f3 ; 0x195ee $3 .asm_195f0 ld de, CeruleanCityMovement3 .asm_195f3 ld a, $1 ld [$ff00+$8c], a call MoveSprite ld a, $3 ld [W_CERULEANCITYCURSCRIPT], a ret CeruleanCityMovement3: ; 19600 (6:5600) db $80,$00,$00,$00,$00,$00,$00,$FF CeruleanCityMovement4: ; 19608 (6:5608) db $c0,$00,$00,$00,$00,$00,$00,$FF CeruleanCityScript3: ; 19610 (6:5610) ld a, [$d730] bit 0, a ret nz ld a, $5 ld [$cc4d], a ld a, $11 call Predef xor a ld [wJoypadForbiddenButtonsMask], a call Func_2307 ld a, $0 ld [W_CERULEANCITYCURSCRIPT], a ret CeruleanCityTextPointers: ; 1962d (6:562d) dw CeruleanCityText1 dw CeruleanCityText2 dw CeruleanCityText3 dw CeruleanCityText4 dw CeruleanCityText5 dw CeruleanCityText6 dw CeruleanCityText7 dw CeruleanCityText8 dw CeruleanCityText9 dw CeruleanCityText10 dw CeruleanCityText11 dw CeruleanCityText12 dw CeruleanCityText13 dw MartSignText dw PokeCenterSignText dw CeruleanCityText16 dw CeruleanCityText17 CeruleanCityText1: ; 1964f (6:564f) db $08 ; asm ld a, [$d75a] ; rival battle flag bit 0, a ; do pre-battle text jr z, .PreBattleText ; or talk about bill ld hl, UnnamedText_19677 call PrintText jr .end ; 0x1965d .PreBattleText ; 0x1965f ld hl, UnnamedText_19668 call PrintText .end ; 0x19665 jp TextScriptEnd UnnamedText_19668: ; 19668 (6:5668) TX_FAR _UnnamedText_19668 db "@" UnnamedText_1966d: ; 1966d (6:566d) TX_FAR _UnnamedText_1966d db "@" UnnamedText_19672: ; 19672 (6:5672) TX_FAR _UnnamedText_19672 db "@" UnnamedText_19677: ; 19677 (6:5677) TX_FAR _UnnamedText_19677 db "@" CeruleanCityText2: ; 1967c (6:567c) db $8 ld a, [$d75b] bit 7, a jr nz, .asm_4ca20 ; 0x19682 $29 ld hl, UnnamedText_196d9 call PrintText ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, UnnamedText_196ee ld de, UnnamedText_196ee call PreBattleSaveRegisters ld a, [$ff00+$8c] ld [$cf13], a call EngageMapTrainer call InitBattleEnemyParameters ld a, $4 ld [W_CERULEANCITYCURSCRIPT], a jp TextScriptEnd .asm_4ca20 ; 0x196ad ld hl, UnnamedText_196f3 call PrintText ld bc, $e401 call GiveItem jr c, .Success ld hl, TM28NoRoomText call PrintText jr .Done .Success ld a, $1 ld [$cc3c], a ld hl, ReceivedTM28Text call PrintText ld b, BANK(Func_74872) ld hl, Func_74872 call Bankswitch .Done jp TextScriptEnd UnnamedText_196d9: ; 196d9 (6:56d9) TX_FAR _UnnamedText_196d9 db "@" ReceivedTM28Text: ; 196de (6:56de) TX_FAR _ReceivedTM28Text ; 0xa4f82 db $0B TX_FAR _ReceivedTM28Text2 ; 0xa4f96 db $0D, "@" TM28NoRoomText: ; 196e9 (6:56e9) TX_FAR _TM28NoRoomText db "@" UnnamedText_196ee: ; 196ee (6:56ee) TX_FAR _UnnamedText_196ee db "@" UnnamedText_196f3: ; 196f3 (6:56f3) TX_FAR _UnnamedText_196f3 db "@" CeruleanCityText3: ; 196f8 (6:56f8) TX_FAR _CeruleanCityText3 db "@" CeruleanCityText4: ; 196fd (6:56fd) TX_FAR _CeruleanCityText4 db "@" CeruleanCityText5: ; 19702 (6:5702) TX_FAR _CeruleanCityText5 db "@" CeruleanCityText11: ; 19707 (6:5707) CeruleanCityText6: ; 19707 (6:5707) TX_FAR _CeruleanCityText6 db "@" CeruleanCityText7: ; 1970c (6:570c) db $08 ; asm ldh a, [$d3] cp $b4 jr c, .asm_e9fc9 ; 0x19711 ld hl, UnnamedText_19730 call PrintText jr .asm_d486e ; 0x19719 .asm_e9fc9 ; 0x1971b cp $64 jr c, .asm_df99b ; 0x1971d ld hl, UnnamedText_19735 call PrintText jr .asm_d486e ; 0x19725 .asm_df99b ; 0x19727 ld hl, UnnamedText_1973a call PrintText .asm_d486e ; 0x1972d jp TextScriptEnd UnnamedText_19730: ; 19730 (6:5730) TX_FAR _UnnamedText_19730 db "@" UnnamedText_19735: ; 19735 (6:5735) TX_FAR _UnnamedText_19735 db "@" UnnamedText_1973a: ; 1973a (6:573a) TX_FAR _UnnamedText_1973a db "@" CeruleanCityText8: ; 1973f (6:573f) db $08 ; asm ldh a, [$d3] cp $b4 jr c, .asm_e28da ; 0x19744 ld hl, UnnamedText_1976f call PrintText jr .asm_f2f38 ; 0x1974c .asm_e28da ; 0x1974e cp $78 jr c, .asm_15d08 ; 0x19750 ld hl, UnnamedText_19774 call PrintText jr .asm_f2f38 ; 0x19758 .asm_15d08 ; 0x1975a cp $3c jr c, .asm_d7fea ; 0x1975c ld hl, UnnamedText_19779 call PrintText jr .asm_f2f38 ; 0x19764 .asm_d7fea ; 0x19766 ld hl, UnnamedText_1977e call PrintText .asm_f2f38 ; 0x1976c jp TextScriptEnd UnnamedText_1976f: ; 1976f (6:576f) TX_FAR _UnnamedText_1976f db "@" UnnamedText_19774: ; 19774 (6:5774) TX_FAR _UnnamedText_19774 db "@" UnnamedText_19779: ; 19779 (6:5779) TX_FAR _UnnamedText_19779 db "@" UnnamedText_1977e: ; 1977e (6:577e) TX_FAR _UnnamedText_1977e db "@" CeruleanCityText9: ; 19783 (6:5783) TX_FAR _CeruleanCityText9 db "@" CeruleanCityText10: ; 19788 (6:5788) TX_FAR _CeruleanCityText10 db "@" CeruleanCityText12: ; 1978d (6:578d) TX_FAR _CeruleanCityText12 db "@" CeruleanCityText13: ; 19792 (6:5792) TX_FAR _CeruleanCityText13 db "@" CeruleanCityText16: ; 19797 (6:5797) TX_FAR _CeruleanCityText16 db "@" CeruleanCityText17: ; 1979c (6:579c) TX_FAR _CeruleanCityText17 db "@" VermilionCityScript: ; 197a1 (6:57a1) call EnableAutoTextBoxDrawing ld hl, $d126 bit 6, [hl] res 6, [hl] push hl call nz, VermilionCityScript_197cb pop hl bit 5, [hl] res 5, [hl] call nz, VermilionCityScript_197c0 ld hl, VermilionCityScriptPointers ld a, [W_VERMILIONCITYCURSCRIPT] jp CallFunctionInTable VermilionCityScript_197c0: ; 197c0 (6:57c0) call GenRandom ld a, [$ff00+$d4] and $e ld [$d743], a ret VermilionCityScript_197cb: ; 197cb (6:57cb) ld hl, $d803 bit 2, [hl] ret z bit 3, [hl] set 3, [hl] ret nz ld a, $2 ld [W_VERMILIONCITYCURSCRIPT], a ret VermilionCityScriptPointers: ; 197dc (6:57dc) dw VermilionCityScript0 dw VermilionCityScript1 dw VermilionCityScript2 dw VermilionCityScript3 dw VermilionCityScript4 VermilionCityScript0: ; 197e6 (6:57e6) ld a, [$c109] and a ret nz ld hl, CoordsData_19823 call ArePlayerCoordsInArray ret nc xor a ld [H_CURRENTPRESSEDBUTTONS], a ld [$cf0d], a ld a, $3 ld [$ff00+$8c], a call DisplayTextID ld a, [$d803] bit 2, a jr nz, .asm_19810 ; 0x19804 $a ld b, $3f ld a, $1c call Predef ld a, b and a ret nz .asm_19810 ld a, $40 ld [$ccd3], a ld a, $1 ld [$cd38], a call Func_3486 ld a, $1 ld [W_VERMILIONCITYCURSCRIPT], a ret CoordsData_19823: ; 19823 (6:5823) db $1e,$12 db $ff VermilionCityScript4: ; 19826 (6:5826) ld hl, CoordsData_19823 call ArePlayerCoordsInArray ret c ld a, $0 ld [W_VERMILIONCITYCURSCRIPT], a ret VermilionCityScript2: ; 19833 (6:5833) ld a, $ff ld [wJoypadForbiddenButtonsMask], a ld a, $40 ld [$ccd3], a ld [$ccd4], a ld a, $2 ld [$cd38], a call Func_3486 ld a, $3 ld [W_VERMILIONCITYCURSCRIPT], a ret VermilionCityScript3: ; 1984e (6:584e) ld a, [$cd38] and a ret nz xor a ld [wJoypadForbiddenButtonsMask], a ld [H_CURRENTPRESSEDBUTTONS], a ld a, $0 ld [W_VERMILIONCITYCURSCRIPT], a ret VermilionCityScript1: ; 1985f (6:585f) ld a, [$cd38] and a ret nz ld c, $a call DelayFrames ld a, $0 ld [W_VERMILIONCITYCURSCRIPT], a ret VermilionCityTextPointers: ; 1986f (6:586f) dw VermilionCityText1 dw VermilionCityText2 dw VermilionCityText3 dw VermilionCityText4 dw VermilionCityText5 dw VermilionCityText6 dw VermilionCityText7 dw VermilionCityText8 dw MartSignText dw PokeCenterSignText dw VermilionCityText11 dw VermilionCityText12 dw VermilionCityText13 VermilionCityText1: ; 19889 (6:5889) TX_FAR _VermilionCityText1 db "@" VermilionCityText2: ; 1988e (6:588e) db $08 ; asm ld a, [$d803] bit 2, a jr nz, .asm_359bd ; 0x19894 ld hl, UnnamedText_198a7 call PrintText jr .asm_735d9 ; 0x1989c .asm_359bd ; 0x1989e ld hl, UnnamedText_198ac call PrintText .asm_735d9 ; 0x198a4 jp TextScriptEnd UnnamedText_198a7: ; 198a7 (6:58a7) TX_FAR _UnnamedText_198a7 db "@" UnnamedText_198ac: ; 198ac (6:58ac) TX_FAR _UnnamedText_198ac db "@" VermilionCityText3: ; 198b1 (6:58b1) db $08 ; asm ld a, [$d803] bit 2, a jr nz, .asm_3e0e9 ; 0x198b7 ld a, [$c109] cp $c jr z, .asm_07af3 ; 0x198be ld hl, VermilionCityCoords1 call ArePlayerCoordsInArray jr nc, .asm_57b73 ; 0x198c6 .asm_07af3 ; 0x198c8 ld hl, SSAnneWelcomeText4 call PrintText jr .asm_79bd1 ; 0x198ce .asm_57b73 ; 0x198d0 ld hl, SSAnneWelcomeText9 call PrintText ld b, $3f ld a, $1c call Predef ld a, b and a jr nz, .asm_0419b ; 0x198df ld hl, SSAnneNoTicketText call PrintText jr .asm_79bd1 ; 0x198e7 .asm_0419b ; 0x198e9 ld hl, SSAnneFlashedTicketText call PrintText ld a, $4 ld [W_VERMILIONCITYCURSCRIPT], a jr .asm_79bd1 ; 0x198f4 .asm_3e0e9 ; 0x198f6 ld hl, SSAnneNotHereText call PrintText .asm_79bd1 ; 0x198fc jp TextScriptEnd VermilionCityCoords1: ; 198ff (6:58ff) db $1d,$13 db $1f,$13 db $ff SSAnneWelcomeText4: ; 19904 (6:5904) TX_FAR _SSAnneWelcomeText4 db "@" SSAnneWelcomeText9: ; 19909 (6:5909) TX_FAR _SSAnneWelcomeText9 db "@" SSAnneFlashedTicketText: ; 1990e (6:590e) TX_FAR _SSAnneFlashedTicketText db "@" SSAnneNoTicketText: ; 19913 (6:5913) TX_FAR _SSAnneNoTicketText db "@" SSAnneNotHereText: ; 19918 (6:5918) TX_FAR _SSAnneNotHereText db "@" VermilionCityText4: ; 1991d (6:591d) TX_FAR _VermilionCityText4 db "@" VermilionCityText5: ; 19922 (6:5922) TX_FAR _VermilionCityText5 db $08 ; asm ld a, MACHOP call PlayCry call WaitForSoundToFinish ld hl, VermilionCityText14 ; $5933 ret VermilionCityText14: ; 19933 (6:5933) TX_FAR _VermilionCityText14 db "@" VermilionCityText6: ; 19938 (6:5938) TX_FAR _VermilionCityText6 db "@" VermilionCityText7: ; 1993d (6:593d) TX_FAR _VermilionCityText7 db "@" VermilionCityText8: ; 19942 (6:5942) TX_FAR _VermilionCityText8 db "@" VermilionCityText11: ; 19947 (6:5947) TX_FAR _VermilionCityText11 db "@" VermilionCityText12: ; 1994c (6:594c) TX_FAR _VermilionCityText12 db "@" VermilionCityText13: ; 19951 (6:5951) TX_FAR _VermilionCityText13 db "@" CeladonCityScript: ; 19956 (6:5956) call EnableAutoTextBoxDrawing ld hl, $d77e res 0, [hl] res 7, [hl] ld hl, $d816 res 7, [hl] ret CeladonCityTextPointers: ; 19966 (6:5966) dw CeladonCityText1 dw CeladonCityText2 dw CeladonCityText3 dw CeladonCityText4 dw CeladonCityText5 dw CeladonCityText6 dw CeladonCityText7 dw CeladonCityText8 dw CeladonCityText9 dw CeladonCityText10 dw CeladonCityText11 dw PokeCenterSignText dw CeladonCityText13 dw CeladonCityText14 dw CeladonCityText15 dw CeladonCityText16 dw CeladonCityText17 dw CeladonCityText18 CeladonCityText1: ; 1998a (6:598a) TX_FAR _CeladonCityText1 db "@" CeladonCityText2: ; 1998f (6:598f) TX_FAR _CeladonCityText2 db "@" CeladonCityText3: ; 19994 (6:5994) TX_FAR _CeladonCityText3 db "@" CeladonCityText4: ; 19999 (6:5999) TX_FAR _CeladonCityText4 db "@" CeladonCityText5: ; 1999e (6:599e) db $08 ; asm ld a, [$d777] bit 0, a jr nz, .asm_7053f ; 0x199a4 ld hl, TM41PreText call PrintText ld bc, (TM_41 << 8) | 1 call GiveItem jr c, .Success ld hl, TM41NoRoomText call PrintText jr .Done .Success ld hl, ReceivedTM41Text call PrintText ld hl, $d777 set 0, [hl] jr .Done .asm_7053f ; 0x199c9 ld hl, TM41ExplanationText call PrintText .Done jp TextScriptEnd TM41PreText: ; 199d2 (6:59d2) TX_FAR _TM41PreText db "@" ReceivedTM41Text: ; 199d7 (6:59d7) TX_FAR _ReceivedTM41Text ; 0xa5b5a db $0B, "@" TM41ExplanationText: ; 199dd (6:59dd) TX_FAR _TM41ExplanationText db "@" TM41NoRoomText: ; 199e2 (6:59e2) TX_FAR _TM41NoRoomText db "@" CeladonCityText6: ; 199e7 (6:59e7) TX_FAR _CeladonCityText6 db "@" CeladonCityText7: ; 199ec (6:59ec) TX_FAR _CeladonCityText7 db $08 ; asm ld a, POLIWRATH call PlayCry jp TextScriptEnd CeladonCityText8: ; 199f9 (6:59f9) TX_FAR _CeladonCityText8 db "@" CeladonCityText9: ; 199fe (6:59fe) TX_FAR _CeladonCityText9 db "@" CeladonCityText10: ; 19a03 (6:5a03) TX_FAR _CeladonCityText10 db "@" CeladonCityText11: ; 19a08 (6:5a08) TX_FAR _CeladonCityText11 db "@" CeladonCityText13: ; 19a0d (6:5a0d) TX_FAR _CeladonCityText13 db "@" CeladonCityText14: ; 19a12 (6:5a12) TX_FAR _CeladonCityText14 db "@" CeladonCityText15: ; 19a17 (6:5a17) TX_FAR _CeladonCityText15 db "@" CeladonCityText16: ; 19a1c (6:5a1c) TX_FAR _CeladonCityText16 db "@" CeladonCityText17: ; 19a21 (6:5a21) TX_FAR _CeladonCityText17 db "@" CeladonCityText18: ; 19a26 (6:5a26) TX_FAR _CeladonCityText18 db "@" FuchsiaCityScript: ; 19a2b (6:5a2b) jp EnableAutoTextBoxDrawing FuchsiaCityTextPointers: ; 19a2e (6:5a2e) dw FuchsiaCityText1 dw FuchsiaCityText2 dw FuchsiaCityText3 dw FuchsiaCityText4 dw FuchsiaCityText5 dw FuchsiaCityText6 dw FuchsiaCityText7 dw FuchsiaCityText8 dw FuchsiaCityText9 dw FuchsiaCityText10 dw FuchsiaCityText11 dw FuchsiaCityText12 dw FuchsiaCityText13 dw MartSignText dw PokeCenterSignText dw FuchsiaCityText16 dw FuchsiaCityText17 dw FuchsiaCityText18 dw FuchsiaCityText19 dw FuchsiaCityText20 dw FuchsiaCityText21 dw FuchsiaCityText22 dw FuchsiaCityText23 dw FuchsiaCityText24 FuchsiaCityText1: ; 19a5e (6:5a5e) TX_FAR _FuchsiaCityText1 db "@" FuchsiaCityText2: ; 19a63 (6:5a63) TX_FAR _FuchsiaCityText2 db "@" FuchsiaCityText3: ; 19a68 (6:5a68) TX_FAR _FuchsiaCityText3 db "@" FuchsiaCityText4: ; 19a6d (6:5a6d) TX_FAR _FuchsiaCityText4 db "@" FuchsiaCityText5: ; 19a72 (6:5a72) FuchsiaCityText6: ; 19a72 (6:5a72) FuchsiaCityText7: ; 19a72 (6:5a72) FuchsiaCityText8: ; 19a72 (6:5a72) FuchsiaCityText9: ; 19a72 (6:5a72) FuchsiaCityText10: ; 19a72 (6:5a72) TX_FAR _FuchsiaCityText5 db "@" FuchsiaCityText12: ; 19a77 (6:5a77) FuchsiaCityText11: ; 19a77 (6:5a77) TX_FAR _FuchsiaCityText11 db "@" FuchsiaCityText13: ; 19a7c (6:5a7c) TX_FAR _FuchsiaCityText13 db "@" FuchsiaCityText16: ; 19a81 (6:5a81) TX_FAR _FuchsiaCityText16 db "@" FuchsiaCityText17: ; 19a86 (6:5a86) TX_FAR _FuchsiaCityText17 db "@" FuchsiaCityText18: ; 19a8b (6:5a8b) TX_FAR _FuchsiaCityText18 db "@" FuchsiaCityText19: ; 19a90 (6:5a90) db $08 ; asm ld hl, FuchsiaCityChanseyText call PrintText ld a, CHANSEY call DisplayPokedex jp TextScriptEnd FuchsiaCityChanseyText: ; 19a9f (6:5a9f) TX_FAR _FuchsiaCityChanseyText db "@" FuchsiaCityText20: ; 19aa4 (6:5aa4) db $08 ; asm ld hl, FuchsiaCityVoltorbText call PrintText ld a, VOLTORB call DisplayPokedex jp TextScriptEnd FuchsiaCityVoltorbText: ; 19ab3 (6:5ab3) TX_FAR _FuchsiaCityVoltorbText db "@" FuchsiaCityText21: ; 19ab8 (6:5ab8) db $08 ; asm ld hl, FuchsiaCityKangaskhanText call PrintText ld a, KANGASKHAN call DisplayPokedex jp TextScriptEnd FuchsiaCityKangaskhanText: ; 19ac7 (6:5ac7) TX_FAR _FuchsiaCityKangaskhanText db "@" FuchsiaCityText22: ; 19acc (6:5acc) db $08 ; asm ld hl, FuchsiaCitySlowpokeText call PrintText ld a, SLOWPOKE call DisplayPokedex jp TextScriptEnd FuchsiaCitySlowpokeText: ; 19adb (6:5adb) TX_FAR _FuchsiaCitySlowpokeText db "@" FuchsiaCityText23: ; 19ae0 (6:5ae0) db $08 ; asm ld hl, FuchsiaCityLaprasText call PrintText ld a, LAPRAS call DisplayPokedex jp TextScriptEnd FuchsiaCityLaprasText: ; 19aef (6:5aef) TX_FAR _FuchsiaCityLaprasText db "@" FuchsiaCityText24: ; 19af4 (6:5af4) db $08 ; asm ld a, [$d7f6] bit 6, a jr nz, .asm_3b4e8 ; 0x19afa bit 7, a jr nz, .asm_667d5 ; 0x19afe ld hl, UnnamedText_19b2a call PrintText jr .asm_4343f ; 0x19b06 .asm_3b4e8 ; 0x19b08 ld hl, FuchsiaCityOmanyteText call PrintText ld a, $62 jr .asm_81556 ; 0x19b10 .asm_667d5 ; 0x19b12 ld hl, FuchsiaCityKabutoText call PrintText ld a, KABUTO .asm_81556 ; 0x19b1a call DisplayPokedex .asm_4343f ; 0x19b1d jp TextScriptEnd FuchsiaCityOmanyteText: ; 19b20 (6:5b20) TX_FAR _FuchsiaCityOmanyteText db "@" FuchsiaCityKabutoText: ; 19b25 (6:5b25) TX_FAR _FuchsiaCityKabutoText db "@" UnnamedText_19b2a: ; 19b2a (6:5b2a) TX_FAR _UnnamedText_19b2a db "@" BluesHouse_h: ; 0x19b2f id=39 db $08 ; tileset db BLUES_HOUSE_HEIGHT, BLUES_HOUSE_WIDTH ; dimensions dw BluesHouseBlocks, BluesHouseTextPointers, BluesHouseScript db 0 dw BluesHouseObject BluesHouseScript: ; 19b3b (6:5b3b) call EnableAutoTextBoxDrawing ld hl,BluesHouseScriptPointers ld a,[W_BLUESHOUSECURSCRIPT] jp CallFunctionInTable BluesHouseScriptPointers: ; 19b47 (6:5b47) dw BluesHouseScript0 dw BluesHouseScript1 BluesHouseScript0: ; 19b4b (6:5b4b) ld hl,$D74A set 1,[hl] ; trigger the next script ld a,1 ld [W_BLUESHOUSECURSCRIPT],a ret BluesHouseScript1: ; 19b56 (6:5b56) ret BluesHouseTextPointers: ; 19b57 (6:5b57) dw BluesHouseText1 dw BluesHouseText2 dw BluesHouseText3 BluesHouseText1: ; 19b5d (6:5b5d) db 8 ld a,[$D74A] bit 0,a jr nz,.GotMap ld a,[$D74B] bit 5,a jr nz,.GiveMap ld hl,DaisyInitialText call PrintText jr .done .GiveMap ld hl,DaisyOfferMapText call PrintText ld bc,(TOWN_MAP << 8) | 1 call GiveItem jr nc, .BagFull ld a,$29 ld [$CC4D],a ld a,$11 call Predef ; hide table map object ld hl,GotMapText call PrintText ld hl,$D74A set 0,[hl] jr .done .GotMap ld hl,DaisyUseMapText call PrintText jr .done .BagFull ld hl,DaisyBagFullText call PrintText .done jp TextScriptEnd DaisyInitialText: ; 19baa (6:5baa) TX_FAR _DaisyInitialText db "@" DaisyOfferMapText: ; 19baf (6:5baf) TX_FAR _DaisyOfferMapText db "@" GotMapText: ; 19bb4 (6:5bb4) TX_FAR _GotMapText db $11,"@" DaisyBagFullText: ; 19bba (6:5bba) TX_FAR _DaisyBagFullText db "@" DaisyUseMapText: ; 19bbf (6:5bbf) TX_FAR _DaisyUseMapText db "@" BluesHouseText2: ; 0x19bc4 Daisy, walking around TX_FAR _BluesHouseText2 db "@" BluesHouseText3: ; 0x19bc9 map on table TX_FAR _BluesHouseText3 db "@" BluesHouseObject: ; 19bce (6:5bce) db $0A ; border tile db 2 ; warps db 7,2,1,$FF db 7,3,1,$FF db 0 ; signs db 3 ; people db $11,4+3,4+2,$FF,$D3,1 ; Daisy, sitting by map db $11,4+4,4+6,$FE,1,ITEM|2,0 ; map on table db $41,4+3,4+3,$FF,$FF,ITEM|3,0 ; Daisy, walking around ; warp-to EVENT_DISP BLUES_HOUSE_WIDTH, 7, 2 EVENT_DISP BLUES_HOUSE_WIDTH, 7, 3 BluesHouseBlocks: ; 19bf6 (6:5bf6) INCBIN "maps/blueshouse.blk" VermilionHouse3_h: ; 0x19c06 to 0x19c12 (12 bytes) (bank=6) (id=196) db $08 ; tileset db VERMILION_HOUSE_3_HEIGHT, VERMILION_HOUSE_3_WIDTH ; dimensions (y, x) dw VermilionHouse3Blocks, VermilionHouse3TextPointers, VermilionHouse3Script ; blocks, texts, scripts db $00 ; connections dw VermilionHouse3Object ; objects VermilionHouse3Script: ; 19c12 (6:5c12) jp EnableAutoTextBoxDrawing VermilionHouse3TextPointers: ; 19c15 (6:5c15) dw VermilionHouse3Text1 VermilionHouse3Text1: ; 19c17 (6:5c17) db $08 ; asm ld a, $4 ld [wWhichTrade], a ld a, $54 call Predef jp TextScriptEnd VermilionHouse3Object: ; 0x19c25 (size=26) db $a ; border tile db $2 ; warps db $7, $2, $7, $ff db $7, $3, $7, $ff db $0 ; signs db $1 ; people db SPRITE_LITTLE_GIRL, $5 + 4, $3 + 4, $ff, $d1, $1 ; person ; warp-to EVENT_DISP VERMILION_HOUSE_3_WIDTH, $7, $2 EVENT_DISP VERMILION_HOUSE_3_WIDTH, $7, $3 VermilionHouse3Blocks: ; 19c3f (6:5c3f) INCBIN "maps/vermilionhouse3.blk" IndigoPlateauLobby_h: ; 0x19c4f to 0x19c5b (12 bytes) (bank=6) (id=174) db $02 ; tileset db INDIGO_PLATEAU_LOBBY_HEIGHT, INDIGO_PLATEAU_LOBBY_WIDTH ; dimensions (y, x) dw IndigoPlateauLobbyBlocks, IndigoPlateauLobbyTextPointers, IndigoPlateauLobbyScript ; blocks, texts, scripts db $00 ; connections dw IndigoPlateauLobbyObject ; objects IndigoPlateauLobbyScript: ; 19c5b (6:5c5b) call Func_22fa call EnableAutoTextBoxDrawing ld hl, $d126 bit 6, [hl] res 6, [hl] ret z ld hl, $d869 res 7, [hl] ld hl, $d734 bit 1, [hl] res 1, [hl] ret z ld hl, $d863 xor a ld [hli], a ld [hli], a ld [hli], a ld [hl], a ret IndigoPlateauLobbyTextPointers: ; 19c7f (6:5c7f) dw IndigoPlateauLobbyText1 dw IndigoPlateauLobbyText2 dw IndigoPlateauLobbyText3 dw IndigoPlateauLobbyText4 dw IndigoPlateauLobbyText5 IndigoPlateauLobbyText1: ; 19c89 (6:5c89) db $ff IndigoPlateauLobbyText2: ; 19c8a (6:5c8a) TX_FAR _IndigoPlateauLobbyText1 db "@" IndigoPlateauLobbyText3: ; 19c8f (6:5c8f) TX_FAR _IndigoPlateauLobbyText3 db "@" IndigoPlateauLobbyText5: ; 19c94 (6:5c94) db $f6 IndigoPlateauLobbyObject: ; 0x19c95 (size=58) db $0 ; border tile db $3 ; warps db $b, $7, $0, $ff db $b, $8, $1, $ff db $0, $8, $0, LORELEIS_ROOM db $0 ; signs db $5 ; people db SPRITE_NURSE, $5 + 4, $7 + 4, $ff, $d0, $1 ; person db SPRITE_GYM_HELPER, $9 + 4, $4 + 4, $ff, $d3, $2 ; person db SPRITE_LASS, $1 + 4, $5 + 4, $ff, $d0, $3 ; person db SPRITE_MART_GUY, $5 + 4, $0 + 4, $ff, $d3, $4 ; person db SPRITE_CABLE_CLUB_WOMAN, $6 + 4, $d + 4, $ff, $d0, $5 ; person ; warp-to EVENT_DISP $8, $b, $7 EVENT_DISP $8, $b, $8 EVENT_DISP $8, $0, $8 ; LORELEIS_ROOM IndigoPlateauLobbyBlocks: ; 19ccf (6:5ccf) INCBIN "maps/indigoplateaulobby.blk" SilphCo4_h: ; 0x19cff to 0x19d0b (12 bytes) (bank=6) (id=209) db $16 ; tileset db SILPH_CO_4F_HEIGHT, SILPH_CO_4F_WIDTH ; dimensions (y, x) dw SilphCo4Blocks, SilphCo4TextPointers, SilphCo4Script ; blocks, texts, scripts db $00 ; connections dw SilphCo4Object ; objects SilphCo4Script: ; 19d0b (6:5d0b) call SilphCo4Script_19d21 call EnableAutoTextBoxDrawing ld hl, SilphCo4TrainerHeaders ld de, SilphCo4ScriptPointers ld a, [W_SILPHCO4CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_SILPHCO4CURSCRIPT], a ret SilphCo4Script_19d21: ; 19d21 (6:5d21) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld hl, SilphCo4Data19d58 call SilphCo4Script_19d5d call SilphCo4Script_19d89 ld a, [$d82a] bit 0, a jr nz, .asm_19d48 push af ld a, $54 ld [$d09f], a ld bc, $0602 ld a, $17 call Predef pop af .asm_19d48 bit 1, a ret nz ld a, $54 ld [$d09f], a ld bc, $0406 ld a, $17 jp Predef SilphCo4Data19d58: ; 19d58 (6:5d58) db $06, $02, $04, $06, $ff SilphCo4Script_19d5d: ; 19d5d (6:5d5d) push hl ld hl, $d73f ld a, [hli] ld b, a ld a, [hl] ld c, a xor a ld [$ff00+$e0], a pop hl .asm_19d69 ld a, [hli] cp $ff jr z, .asm_19d85 ; 0x19d6c $17 push hl ld hl, $ffe0 inc [hl] pop hl cp b jr z, .asm_19d7a ; 0x19d75 $3 inc hl jr .asm_19d69 ; 0x19d78 $ef .asm_19d7a ld a, [hli] cp c jr nz, .asm_19d69 ; 0x19d7c $eb ld hl, $d73f xor a ld [hli], a ld [hl], a ret .asm_19d85 xor a ld [$ff00+$e0], a ret SilphCo4Script_19d89: ; 19d89 (6:5d89) ld hl, $d82a ld a, [$ff00+$e0] and a ret z cp $1 jr nz, .asm_19d97 ; 0x19d92 $3 set 0, [hl] ret .asm_19d97 set 1, [hl] ret SilphCo4ScriptPointers: ; 19d9a (6:5d9a) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle SilphCo4TextPointers: ; 19da0 (6:5da0) dw SilphCo4Text1 dw SilphCo4Text2 dw SilphCo4Text3 dw SilphCo4Text4 dw Predef5CText dw Predef5CText dw Predef5CText SilphCo4TrainerHeaders: ; 19dae (6:5dae) SilphCo4TrainerHeader0: ; 19dae (6:5dae) db $2 ; flag's bit db ($4 << 4) ; trainer's view range dw $d829 ; flag's byte dw SilphCo4BattleText2 ; 0x5df4 TextBeforeBattle dw SilphCo4AfterBattleText2 ; 0x5dfe TextAfterBattle dw SilphCo4EndBattleText2 ; 0x5df9 TextEndBattle dw SilphCo4EndBattleText2 ; 0x5df9 TextEndBattle SilphCo4TrainerHeader2: ; 19dba (6:5dba) db $3 ; flag's bit db ($3 << 4) ; trainer's view range dw $d829 ; flag's byte dw SilphCo4BattleText3 ; 0x5e0d TextBeforeBattle dw SilphCo4AfterBattleText3 ; 0x5e17 TextAfterBattle dw SilphCo4EndBattleText3 ; 0x5e12 TextEndBattle dw SilphCo4EndBattleText3 ; 0x5e12 TextEndBattle SilphCo4TrainerHeader3: ; 19dc6 (6:5dc6) db $4 ; flag's bit db ($4 << 4) ; trainer's view range dw $d829 ; flag's byte dw SilphCo4BattleText4 ; 0x5e26 TextBeforeBattle dw SilphCo4AfterBattleText4 ; 0x5e30 TextAfterBattle dw SilphCo4EndBattleText4 ; 0x5e2b TextEndBattle dw SilphCo4EndBattleText4 ; 0x5e2b TextEndBattle db $ff SilphCo4Text1: ; 19dd3 (6:5dd3) db $08 ; asm ld hl, UnnamedText_19de0 ; $5de0 ld de, UnnamedText_19de5 ; $5de5 call SilphCo6Script_1a22f jp TextScriptEnd UnnamedText_19de0: ; 19de0 (6:5de0) TX_FAR _UnnamedText_19de0 db "@" UnnamedText_19de5: ; 19de5 (6:5de5) TX_FAR _UnnamedText_19de5 db "@" SilphCo4Text2: ; 19dea (6:5dea) db $08 ; asm ld hl, SilphCo4TrainerHeader0 call TalkToTrainer jp TextScriptEnd SilphCo4BattleText2: ; 19df4 (6:5df4) TX_FAR _SilphCo4BattleText2 db "@" SilphCo4EndBattleText2: ; 19df9 (6:5df9) TX_FAR _SilphCo4EndBattleText2 db "@" SilphCo4AfterBattleText2: ; 19dfe (6:5dfe) TX_FAR _SilphCo4AfterBattleText2 db "@" SilphCo4Text3: ; 19e03 (6:5e03) db $08 ; asm ld hl, SilphCo4TrainerHeader2 call TalkToTrainer jp TextScriptEnd SilphCo4BattleText3: ; 19e0d (6:5e0d) TX_FAR _SilphCo4BattleText3 db "@" SilphCo4EndBattleText3: ; 19e12 (6:5e12) TX_FAR _SilphCo4EndBattleText3 db "@" SilphCo4AfterBattleText3: ; 19e17 (6:5e17) TX_FAR _SilphCo4AfterBattleText3 db "@" SilphCo4Text4: ; 19e1c (6:5e1c) db $08 ; asm ld hl, SilphCo4TrainerHeader3 call TalkToTrainer jp TextScriptEnd SilphCo4BattleText4: ; 19e26 (6:5e26) TX_FAR _SilphCo4BattleText4 db "@" SilphCo4EndBattleText4: ; 19e2b (6:5e2b) TX_FAR _SilphCo4EndBattleText4 db "@" SilphCo4AfterBattleText4: ; 19e30 (6:5e30) TX_FAR _SilphCo4AfterBattleText4 db "@" SilphCo4Object: ; 0x19e35 (size=111) db $2e ; border tile db $7 ; warps db $0, $18, $1, SILPH_CO_3F db $0, $1a, $1, SILPH_CO_5F db $0, $14, $0, SILPH_CO_ELEVATOR db $7, $b, $3, SILPH_CO_10F db $3, $11, $3, SILPH_CO_6F db $f, $3, $4, SILPH_CO_10F db $b, $11, $5, SILPH_CO_10F db $0 ; signs db $7 ; people db SPRITE_LAPRAS_GIVER, $2 + 4, $6 + 4, $ff, $ff, $1 ; person db SPRITE_ROCKET, $e + 4, $9 + 4, $ff, $d3, $42, ROCKET + $C8, $1a ; trainer db SPRITE_OAK_AIDE, $6 + 4, $e + 4, $ff, $d2, $43, SCIENTIST + $C8, $5 ; trainer db SPRITE_ROCKET, $a + 4, $1a + 4, $ff, $d1, $44, ROCKET + $C8, $1b ; trainer db SPRITE_BALL, $9 + 4, $3 + 4, $ff, $ff, $85, FULL_HEAL ; item db SPRITE_BALL, $7 + 4, $4 + 4, $ff, $ff, $86, MAX_REVIVE ; item db SPRITE_BALL, $8 + 4, $5 + 4, $ff, $ff, $87, ESCAPE_ROPE ; item ; warp-to EVENT_DISP $f, $0, $18 ; SILPH_CO_3F EVENT_DISP $f, $0, $1a ; SILPH_CO_5F EVENT_DISP $f, $0, $14 ; SILPH_CO_ELEVATOR EVENT_DISP $f, $7, $b ; SILPH_CO_10F EVENT_DISP $f, $3, $11 ; SILPH_CO_6F EVENT_DISP $f, $f, $3 ; SILPH_CO_10F EVENT_DISP $f, $b, $11 ; SILPH_CO_10F SilphCo4Blocks: ; 19ea4 (6:5ea4) INCBIN "maps/silphco4.blk" SilphCo5_h: ; 0x19f2b to 0x19f37 (12 bytes) (bank=6) (id=210) db $16 ; tileset db SILPH_CO_5F_HEIGHT, SILPH_CO_5F_WIDTH ; dimensions (y, x) dw SilphCo5Blocks, SilphCo5TextPointers, SilphCo5Script ; blocks, texts, scripts db $00 ; connections dw SilphCo5Object ; objects SilphCo5Script: ; 19f37 (6:5f37) call SilphCo5Script_19f4d call EnableAutoTextBoxDrawing ld hl, SilphCo5TrainerHeaders ld de, SilphCo5ScriptPointers ld a, [W_SILPHCO5CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_SILPHCO5CURSCRIPT], a ret SilphCo5Script_19f4d: ; 19f4d (6:5f4d) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld hl, SilphCo5Coords call SilphCo4Script_19d5d call SilphCo5Script_19f9e ld a, [$d82c] bit 0, a jr nz, .asm_19f74 ; 0x19f63 $f push af ld a, $5f ld [$d09f], a ld bc, $0203 ld a, $17 call Predef pop af .asm_19f74 bit 1, a jr nz, .asm_19f87 ; 0x19f76 $f push af ld a, $5f ld [$d09f], a ld bc, $0603 ld a, $17 call Predef pop af .asm_19f87 bit 2, a ret nz ld a, $5f ld [$d09f], a ld bc, $0507 ld a, $17 jp Predef SilphCo5Coords: ; 19f97 (6:5f97) ; coords? db $02, $03, $06, $03, $05, $07, $ff SilphCo5Script_19f9e: ; 19f9e (6:5f9e) ld hl, $d82c ld a, [$ff00+$e0] and a ret z cp $1 jr nz, .asm_19fac ; 0x19fa7 $3 set 0, [hl] ret .asm_19fac cp $2 jr nz, .asm_19fb3 ; 0x19fae $3 set 1, [hl] ret .asm_19fb3 set 2, [hl] ret SilphCo5ScriptPointers: ; 19fb6 (6:5fb6) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle SilphCo5TextPointers: ; 19fbc (6:5fbc) dw SilphCo5Text1 dw SilphCo5Text2 dw SilphCo5Text3 dw SilphCo5Text4 dw SilphCo5Text5 dw Predef5CText dw Predef5CText dw Predef5CText dw SilphCo5Text9 dw SilphCo5Text10 dw SilphCo5Text11 SilphCo5TrainerHeaders: ; 19fd2 (6:5fd2) Silphco5TrainerHeader0: ; 19fd2 (6:5fd2) db $2 ; flag's bit db ($1 << 4) ; trainer's view range dw $d82b ; flag's byte dw SilphCo5BattleText2 ; 0x6024 TextBeforeBattle dw SilphCo5AfterBattleText2 ; 0x602e TextAfterBattle dw SilphCo5EndBattleText2 ; 0x6029 TextEndBattle dw SilphCo5EndBattleText2 ; 0x6029 TextEndBattle Silphco5TrainerHeader2: ; 19fde (6:5fde) db $3 ; flag's bit db ($2 << 4) ; trainer's view range dw $d82b ; flag's byte dw SilphCo5BattleText3 ; 0x603d TextBeforeBattle dw SilphCo5AfterBattleText3 ; 0x6047 TextAfterBattle dw SilphCo5EndBattleText3 ; 0x6042 TextEndBattle dw SilphCo5EndBattleText3 ; 0x6042 TextEndBattle Silphco5TrainerHeader3: ; 19fea (6:5fea) db $4 ; flag's bit db ($4 << 4) ; trainer's view range dw $d82b ; flag's byte dw SilphCo5BattleText4 ; 0x6056 TextBeforeBattle dw SilphCo5AfterBattleText4 ; 0x6060 TextAfterBattle dw SilphCo5EndBattleText4 ; 0x605b TextEndBattle dw SilphCo5EndBattleText4 ; 0x605b TextEndBattle Silphco5TrainerHeader4: ; 19ff6 (6:5ff6) db $5 ; flag's bit db ($3 << 4) ; trainer's view range dw $d82b ; flag's byte dw SilphCo5BattleText5 ; 0x606f TextBeforeBattle dw SilphCo5AfterBattleText5 ; 0x6079 TextAfterBattle dw SilphCo5EndBattleText5 ; 0x6074 TextEndBattle dw SilphCo5EndBattleText5 ; 0x6074 TextEndBattle db $ff SilphCo5Text1: ; 1a003 (6:6003) db $08 ; asm ld hl, UnnamedText_1a010 ; $6010 ld de, UnnamedText_1a015 ; $6015 call SilphCo6Script_1a22f jp TextScriptEnd UnnamedText_1a010: ; 1a010 (6:6010) TX_FAR _UnnamedText_1a010 db "@" UnnamedText_1a015: ; 1a015 (6:6015) TX_FAR _UnnamedText_1a015 db "@" SilphCo5Text2: ; 1a01a (6:601a) db $08 ; asm ld hl, Silphco5TrainerHeader0 call TalkToTrainer jp TextScriptEnd SilphCo5BattleText2: ; 1a024 (6:6024) TX_FAR _SilphCo5BattleText2 db "@" SilphCo5EndBattleText2: ; 1a029 (6:6029) TX_FAR _SilphCo5EndBattleText2 db "@" SilphCo5AfterBattleText2: ; 1a02e (6:602e) TX_FAR _SilphCo5AfterBattleText2 db "@" SilphCo5Text3: ; 1a033 (6:6033) db $08 ; asm ld hl, Silphco5TrainerHeader2 call TalkToTrainer jp TextScriptEnd SilphCo5BattleText3: ; 1a03d (6:603d) TX_FAR _SilphCo5BattleText3 db "@" SilphCo5EndBattleText3: ; 1a042 (6:6042) TX_FAR _SilphCo5EndBattleText3 db "@" SilphCo5AfterBattleText3: ; 1a047 (6:6047) TX_FAR _SilphCo5AfterBattleText3 db "@" SilphCo5Text4: ; 1a04c (6:604c) db $08 ; asm ld hl, Silphco5TrainerHeader3 call TalkToTrainer jp TextScriptEnd SilphCo5BattleText4: ; 1a056 (6:6056) TX_FAR _SilphCo5BattleText4 db "@" SilphCo5EndBattleText4: ; 1a05b (6:605b) TX_FAR _SilphCo5EndBattleText4 db "@" SilphCo5AfterBattleText4: ; 1a060 (6:6060) TX_FAR _SilphCo5AfterBattleText4 db "@" SilphCo5Text5: ; 1a065 (6:6065) db $08 ; asm ld hl, Silphco5TrainerHeader4 call TalkToTrainer jp TextScriptEnd SilphCo5BattleText5: ; 1a06f (6:606f) TX_FAR _SilphCo5BattleText5 db "@" SilphCo5EndBattleText5: ; 1a074 (6:6074) TX_FAR _SilphCo5EndBattleText5 db "@" SilphCo5AfterBattleText5: ; 1a079 (6:6079) TX_FAR _SilphCo5AfterBattleText5 db "@" SilphCo5Text9: ; 1a07e (6:607e) TX_FAR _SilphCo5Text9 db "@" SilphCo5Text10: ; 1a083 (6:6083) TX_FAR _SilphCo5Text10 db "@" SilphCo5Text11: ; 1a088 (6:6088) TX_FAR _SilphCo5Text11 db "@" SilphCo5Object: ; 0x1a08d (size=137) db $2e ; border tile db $7 ; warps db $0, $18, $1, SILPH_CO_6F db $0, $1a, $1, SILPH_CO_4F db $0, $14, $0, SILPH_CO_ELEVATOR db $3, $1b, $5, SILPH_CO_7F db $f, $9, $4, SILPH_CO_9F db $5, $b, $4, SILPH_CO_3F db $f, $3, $5, SILPH_CO_3F db $0 ; signs db $b ; people db SPRITE_LAPRAS_GIVER, $9 + 4, $d + 4, $ff, $ff, $1 ; person db SPRITE_ROCKET, $10 + 4, $8 + 4, $ff, $d3, $42, ROCKET + $C8, $1c ; trainer db SPRITE_OAK_AIDE, $3 + 4, $8 + 4, $ff, $d3, $43, SCIENTIST + $C8, $6 ; trainer db SPRITE_ROCKER, $a + 4, $12 + 4, $ff, $d1, $44, JUGGLER + $C8, $1 ; trainer db SPRITE_ROCKET, $4 + 4, $1c + 4, $ff, $d1, $45, ROCKET + $C8, $1d ; trainer db SPRITE_BALL, $d + 4, $2 + 4, $ff, $ff, $86, TM_09 ; item db SPRITE_BALL, $6 + 4, $4 + 4, $ff, $ff, $87, PROTEIN ; item db SPRITE_BALL, $10 + 4, $15 + 4, $ff, $ff, $88, CARD_KEY ; item db SPRITE_CLIPBOARD, $c + 4, $16 + 4, $ff, $ff, $9 ; person db SPRITE_CLIPBOARD, $a + 4, $19 + 4, $ff, $ff, $a ; person db SPRITE_CLIPBOARD, $6 + 4, $18 + 4, $ff, $ff, $b ; person ; warp-to EVENT_DISP $f, $0, $18 ; SILPH_CO_6F EVENT_DISP $f, $0, $1a ; SILPH_CO_4F EVENT_DISP $f, $0, $14 ; SILPH_CO_ELEVATOR EVENT_DISP $f, $3, $1b ; SILPH_CO_7F EVENT_DISP $f, $f, $9 ; SILPH_CO_9F EVENT_DISP $f, $5, $b ; SILPH_CO_3F EVENT_DISP $f, $f, $3 ; SILPH_CO_3F SilphCo5Blocks: ; 1a116 (6:6116) INCBIN "maps/silphco5.blk" SilphCo6_h: ; 0x1a19d to 0x1a1a9 (12 bytes) (bank=6) (id=211) db $16 ; tileset db SILPH_CO_6F_HEIGHT, SILPH_CO_6F_WIDTH ; dimensions (y, x) dw SilphCo6Blocks, SilphCo6TextPointers, SilphCo6Script ; blocks, texts, scripts db $00 ; connections dw SilphCo6Object ; objects SilphCo6Script: ; 1a1a9 (6:61a9) call SilphCo6Script_1a1bf call EnableAutoTextBoxDrawing ld hl, SilphCo6TrainerHeaders ld de, SilphCo6ScriptPointers ld a, [W_SILPHCO6CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_SILPHCO6CURSCRIPT], a ret SilphCo6Script_1a1bf: ; 1a1bf (6:61bf) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld hl, SilphCo6Coords1 call SilphCo4Script_19d5d call SilphCo6Script_1a1e6 ld a, [$d82e] bit 7, a ret nz ld a, $5f ld [$d09f], a ld bc, $0602 ld a, $17 jp Predef SilphCo6Coords1: ; 1a1e3 (6:61e3) db $06, $02 db $ff SilphCo6Script_1a1e6: ; 1a1e6 (6:61e6) ld a, [$ff00+$e0] and a ret z ld hl, $d82e set 7, [hl] ret SilphCo6ScriptPointers: ; 1a1f0 (6:61f0) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle SilphCo6TextPointers: ; 1a1f6 (6:61f6) dw SilphCo6Text1 dw SilphCo6Text2 dw SilphCo6Text3 dw SilphCo6Text4 dw SilphCo6Text5 dw SilphCo6Text6 dw SilphCo6Text7 dw SilphCo6Text8 dw Predef5CText dw Predef5CText SilphCo6TrainerHeaders: ; 1a20a (6:620a) SilphCo6TrainerHeader0: ; 1a20a (6:620a) db $6 ; flag's bit db ($2 << 4) ; trainer's view range dw $d82d ; flag's byte dw SilphCo6BattleText2 ; 0x62ba TextBeforeBattle dw SilphCo6AfterBattleText2 ; 0x62c4 TextAfterBattle dw SilphCo6EndBattleText2 ; 0x62bf TextEndBattle dw SilphCo6EndBattleText2 ; 0x62bf TextEndBattle SilphCo6TrainerHeader2: ; 1a216 (6:6216) db $7 ; flag's bit db ($3 << 4) ; trainer's view range dw $d82d ; flag's byte dw SilphCo6BattleText3 ; 0x62d3 TextBeforeBattle dw SilphCo6AfterBattleText3 ; 0x62dd TextAfterBattle dw SilphCo6EndBattleText3 ; 0x62d8 TextEndBattle dw SilphCo6EndBattleText3 ; 0x62d8 TextEndBattle SilphCo6TrainerHeader3: ; 1a222 (6:6222) db $8 ; flag's bit db ($2 << 4) ; trainer's view range dw $d82d ; flag's byte dw SilphCo6BattleText4 ; 0x62ec TextBeforeBattle dw SilphCo6AfterBattleText4 ; 0x62f6 TextAfterBattle dw SilphCo6EndBattleText4 ; 0x62f1 TextEndBattle dw SilphCo6EndBattleText4 ; 0x62f1 TextEndBattle db $ff SilphCo6Script_1a22f: ; 1a22f (6:622f) ld a, [$d838] bit 7, a jr nz, .asm_1a238 ; 0x1a234 $2 jr .asm_1a23a ; 0x1a236 $2 .asm_1a238 ld h, d ld l, e .asm_1a23a jp PrintText SilphCo6Text1: ; 1a23d (6:623d) db $08 ; asm ld hl, UnnamedText_1a24a ld de, UnnamedText_1a24f call SilphCo6Script_1a22f jp TextScriptEnd UnnamedText_1a24a: ; 1a24a (6:624a) TX_FAR _UnnamedText_1a24a db "@" UnnamedText_1a24f: ; 1a24f (6:624f) TX_FAR _UnnamedText_1a24f db "@" SilphCo6Text2: ; 1a254 (6:6254) db $08 ; asm ld hl, UnnamedText_1a261 ld de, UnnamedText_1a266 call SilphCo6Script_1a22f jp TextScriptEnd UnnamedText_1a261: ; 1a261 (6:6261) TX_FAR _UnnamedText_1a261 db "@" UnnamedText_1a266: ; 1a266 (6:6266) TX_FAR _UnnamedText_1a266 db "@" SilphCo6Text3: ; 1a26b (6:626b) db $08 ; asm ld hl, UnnamedText_1a278 ld de, UnnamedText_1a27d call SilphCo6Script_1a22f jp TextScriptEnd UnnamedText_1a278: ; 1a278 (6:6278) TX_FAR _UnnamedText_1a278 db "@" UnnamedText_1a27d: ; 1a27d (6:627d) TX_FAR _UnnamedText_1a27d db "@" SilphCo6Text4: ; 1a282 (6:6282) db $08 ; asm ld hl, UnnamedText_1a28f ld de, UnnamedText_1a294 call SilphCo6Script_1a22f jp TextScriptEnd UnnamedText_1a28f: ; 1a28f (6:628f) TX_FAR _UnnamedText_1a28f db "@" UnnamedText_1a294: ; 1a294 (6:6294) TX_FAR _UnnamedText_1a294 db "@" SilphCo6Text5: ; 1a299 (6:6299) db $08 ; asm ld hl, UnnamedText_1a2a6 ld de, UnnamedText_1a2ab call SilphCo6Script_1a22f jp TextScriptEnd UnnamedText_1a2a6: ; 1a2a6 (6:62a6) TX_FAR _UnnamedText_1a2a6 db "@" UnnamedText_1a2ab: ; 1a2ab (6:62ab) TX_FAR _UnnamedText_1a2ab db "@" SilphCo6Text6: ; 1a2b0 (6:62b0) db $08 ; asm ld hl, SilphCo6TrainerHeader0 call TalkToTrainer jp TextScriptEnd SilphCo6BattleText2: ; 1a2ba (6:62ba) TX_FAR _SilphCo6BattleText2 db "@" SilphCo6EndBattleText2: ; 1a2bf (6:62bf) TX_FAR _SilphCo6EndBattleText2 db "@" SilphCo6AfterBattleText2: ; 1a2c4 (6:62c4) TX_FAR _SilphCo6AfterBattleText2 db "@" SilphCo6Text7: ; 1a2c9 (6:62c9) db $08 ; asm ld hl, SilphCo6TrainerHeader2 call TalkToTrainer jp TextScriptEnd SilphCo6BattleText3: ; 1a2d3 (6:62d3) TX_FAR _SilphCo6BattleText3 db "@" SilphCo6EndBattleText3: ; 1a2d8 (6:62d8) TX_FAR _SilphCo6EndBattleText3 db "@" SilphCo6AfterBattleText3: ; 1a2dd (6:62dd) TX_FAR _SilphCo6AfterBattleText3 db "@" SilphCo6Text8: ; 1a2e2 (6:62e2) db $08 ; asm ld hl, SilphCo6TrainerHeader3 call TalkToTrainer jp TextScriptEnd SilphCo6BattleText4: ; 1a2ec (6:62ec) TX_FAR _SilphCo6BattleText4 db "@" SilphCo6EndBattleText4: ; 1a2f1 (6:62f1) TX_FAR _SilphCo6EndBattleText4 db "@" SilphCo6AfterBattleText4: ; 1a2f6 (6:62f6) TX_FAR _SilphCo6AfterBattleText4 db "@" SilphCo6Object: ; 0x1a2fb (size=112) db $2e ; border tile db $5 ; warps db $0, $10, $1, SILPH_CO_7F db $0, $e, $0, SILPH_CO_5F db $0, $12, $0, SILPH_CO_ELEVATOR db $3, $3, $4, SILPH_CO_4F db $3, $17, $6, SILPH_CO_2F db $0 ; signs db $a ; people db SPRITE_LAPRAS_GIVER, $6 + 4, $a + 4, $ff, $ff, $1 ; person db SPRITE_LAPRAS_GIVER, $6 + 4, $14 + 4, $ff, $ff, $2 ; person db SPRITE_ERIKA, $6 + 4, $15 + 4, $ff, $d0, $3 ; person db SPRITE_ERIKA, $a + 4, $b + 4, $ff, $d3, $4 ; person db SPRITE_LAPRAS_GIVER, $d + 4, $12 + 4, $ff, $d1, $5 ; person db SPRITE_ROCKET, $3 + 4, $11 + 4, $ff, $d3, $46, ROCKET + $C8, $1e ; trainer db SPRITE_OAK_AIDE, $8 + 4, $7 + 4, $ff, $d0, $47, SCIENTIST + $C8, $7 ; trainer db SPRITE_ROCKET, $f + 4, $e + 4, $ff, $d2, $48, ROCKET + $C8, $1f ; trainer db SPRITE_BALL, $c + 4, $3 + 4, $ff, $ff, $89, HP_UP ; item db SPRITE_BALL, $f + 4, $2 + 4, $ff, $ff, $8a, X_ACCURACY ; item ; warp-to EVENT_DISP $d, $0, $10 ; SILPH_CO_7F EVENT_DISP $d, $0, $e ; SILPH_CO_5F EVENT_DISP $d, $0, $12 ; SILPH_CO_ELEVATOR EVENT_DISP $d, $3, $3 ; SILPH_CO_4F EVENT_DISP $d, $3, $17 ; SILPH_CO_2F SilphCo6Blocks: ; 1a36b (6:636b) INCBIN "maps/silphco6.blk" Func_1a3e0: ; 1a3e0 (6:63e0) ld hl, $d730 res 1, [hl] call Func_1a609 jr nc, .asm_1a406 ld a, $fc ld [wJoypadForbiddenButtonsMask], a ld hl, $d736 set 1, [hl] ld a, $1 ld [$cd38], a ld a, $80 ld [$ccd3], a xor a ld [$c102], a call Func_3486 ret .asm_1a406 xor a ld [$cd3a], a ld [$cd38], a ld [$ccd3], a ld hl, $d736 res 0, [hl] res 1, [hl] ld hl, $d730 res 7, [hl] ret Func_1a41d: ; 1a41d (6:641d) ld hl, $d730 res 7, [hl] ld hl, $d72e res 7, [hl] ld hl, $d736 res 0, [hl] res 1, [hl] xor a ld [$cf17], a ld [$cc57], a ld [$cf10], a ld [$cd3a], a ld [$cd38], a ld [$ccd3], a ret PointerTable_1a442: ; 1a442 (6:6442) dw Func_1a44c dw Func_1a485 dw Func_1a4a1 dw Func_1a4a6 dw Func_1a4f4 Func_1a44c: ; 1a44c (6:644c) ld a, [W_XCOORD] ; $d362 sub $a ld [$cca1], a jr z, .asm_1a475 ld b, $0 ld c, a ld hl, $cc97 ld a, $80 call FillMemory ld [hl], $ff ld a, [$cf13] ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c ld de, $cc97 call MoveSprite ld a, $1 ld [$cf10], a jr .asm_1a47a .asm_1a475 ld a, $3 ld [$cf10], a .asm_1a47a ld hl, W_FLAGS_D733 set 1, [hl] ld a, $fc ld [wJoypadForbiddenButtonsMask], a ret Func_1a485: ; 1a485 (6:6485) ld a, [$d730] bit 0, a ret nz ld a, [$cca1] ld [$cd38], a ld [$ff00+$95], a ld a, $23 call Predef call Func_3486 ld a, $2 ld [$cf10], a ret Func_1a4a1: ; 1a4a1 (6:64a1) ld a, [$cd38] and a ret nz Func_1a4a6: ; 1a4a6 (6:64a6) xor a ld [$cd3b], a ld a, [$cf13] swap a ld [$cf17], a xor a ld [$c206], a ld hl, $ccd3 ld de, RLEList_1a4e9 call DecodeRLEList dec a ld [$cd38], a ld hl, $cc97 ld de, RLEList_1a4dc call DecodeRLEList ld hl, $d72e res 7, [hl] ld hl, $d730 set 7, [hl] ld a, $4 ld [$cf10], a ret RLEList_1a4dc: ; 1a4dc (6:64dc) db $00, $05 db $80, $01 db $00, $05 db $C0, $03 db $40, $01 db $E0, $01 db $FF RLEList_1a4e9: ; 1a4e9 (6:64e9) db $40, $02 db $10, $03 db $80, $05 db $20, $01 db $80, $06 db $FF Func_1a4f4: ; 1a4f4 (6:64f4) ld a, [$cd38] and a ret nz ld a, $0 ld [$cc4d], a ld a, $11 call Predef ; indirect jump to RemoveMissableObject (f1d7 (3:71d7)) ld hl, $d730 res 7, [hl] ld hl, $d72e res 7, [hl] jp Func_314e PointerTable_1a510: ; 1a510 (6:6510) dw Func_1a514 dw Func_1a56b Func_1a514: ; 1a514 (6:6514) ld a, Bank(Func_9876) ld [$c0ef], a ld [$c0f0], a ld a, MUSIC_MUSEUM_GUY ld [$c0ee], a call PlaySound ld a, [$cf13] swap a ld [$cf17], a call Func_3486 ld hl, $ccd3 ld de, RLEList_PewterMuseumPlayer call DecodeRLEList dec a ld [$cd38], a xor a ld [$d12f], a ld a, $4f call Predef ld hl, $cc97 ld de, RLEList_PewterMuseumGuy call DecodeRLEList ld hl, $d72e res 7, [hl] ld a, $1 ld [$cf10], a ret RLEList_PewterMuseumPlayer: ; 1a559 (6:6559) db $00, $01 db $40, $03 db $20, $0D db $40, $06 db $FF RLEList_PewterMuseumGuy: ; 1a562 (6:6562) db $40, $06 db $80, $0D db $40, $03 db $80, $01 db $FF Func_1a56b: ; 1a56b (6:656b) ld a, [$cd38] and a ret nz ld hl, $d730 res 7, [hl] ld hl, $d72e res 7, [hl] jp Func_314e PointerTable_1a57d: ; 1a57d (6:657d) dw Func_1a581 dw Func_1a56b Func_1a581: ; 1a581 (6:6581) ld a, Bank(Func_9876) ld [$c0ef], a ld [$c0f0], a ld a, MUSIC_MUSEUM_GUY ld [$c0ee], a call PlaySound ld a, [$cf13] swap a ld [$cf17], a xor a ld [$c206], a ld hl, $ccd3 ld de, RLEList_PewterGymPlayer call DecodeRLEList dec a ld [$cd38], a ld a, $1 ld [$d12f], a ld a, $4f call Predef ld hl, $cc97 ld de, RLEList_PewterGymGuy call DecodeRLEList ld hl, $d72e res 7, [hl] ld hl, $d730 set 7, [hl] ld a, $1 ld [$cf10], a ret RLEList_PewterGymPlayer: ; 1a5cd (6:65cd) db $00, $01 db $10, $02 db $80, $05 db $20, $0B db $40, $05 db $20, $0F db $FF RLEList_PewterGymGuy: ; 1a5da (6:65da) db $00, $02 db $80, $0F db $40, $05 db $80, $0B db $00, $05 db $C0, $03 db $FF ; XXX why would this function want to return on POKEMONTOWER_7? Func_1a5e7: ; 1a5e7 (6:65e7) ld a, [W_CURMAP] ; $d35e cp POKEMONTOWER_7 ret z ld hl, RivalIDs ; $6605 ld a, [wEngagedTrainerClass] ld b, a .loop ld a, [hli] cp $ff jr z, .notRival cp b ret z jr .loop .notRival ld a, [$cf13] ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c jp SetSpriteMovementBytesToFF RivalIDs: ; 1a605 (6:6605) db SONY1 + $c8 db SONY2 + $c8 db SONY3 + $c8 db $ff Func_1a609: ; 1a609 (6:6609) push de ld hl, DoorTileIDPointers ; $662c ld a, [W_CURMAPTILESET] ; $d367 ld de, $3 call IsInArray pop de jr nc, .asm_1a62a inc hl ld a, [hli] ld h, [hl] ld l, a FuncCoord 8, 9 ; $c45c ld a, [Coord] ld b, a .asm_1a621 ld a, [hli] and a jr z, .asm_1a62a cp b jr nz, .asm_1a621 scf ret .asm_1a62a and a ret DoorTileIDPointers: ; 1a62c (6:662c) db $00 dw Tileset00DoorTileIDs db $03 dw Tileset03DoorTileIDs db $02 dw Tileset02DoorTileIDs db $08 dw Tileset08DoorTileIDs db $09 dw TilesetMuseumDoorTileIDs db $0a dw TilesetMuseumDoorTileIDs db $0c dw TilesetMuseumDoorTileIDs db $0d dw Tileset0DDoorTileIDs db $12 dw Tileset12DoorTileIDs db $13 dw Tileset13DoorTileIDs db $14 dw Tileset14DoorTileIDs db $16 dw Tileset16DoorTileIDs db $17 dw Tileset17DoorTileIDs db $ff Tileset00DoorTileIDs: ; 1a654 (6:6654) db $1B,$58,$00 Tileset03DoorTileIDs: ; 1a657 (6:6657) db $3a,$00 Tileset02DoorTileIDs: ; 1a659 (6:6659) db $5e,$00 Tileset08DoorTileIDs: ; 1a65b (6:665b) db $54,$00 TilesetMuseumDoorTileIDs: ; 1a65d (6:665d) db $3b,$00 Tileset0DDoorTileIDs: ; 1a65f (6:665f) db $1e,$00 Tileset12DoorTileIDs: ; 1a661 (6:6661) db $1c,$38,$1a,$00 Tileset13DoorTileIDs: ; 1a665 (6:6665) db $1a,$1c,$53,$00 Tileset14DoorTileIDs: ; 1a669 (6:6669) db $34,$00 Tileset16DoorTileIDs: ; 1a66b (6:666b) db $43,$58,$1b,$00 Tileset17DoorTileIDs: ; 1a66f (6:666f) db $3b,$1b,$00 Func_1a672: ; 1a672 (6:6672) ld a, [$d736] bit 6, a ret nz ld a, [W_CURMAPTILESET] ; $d367 and a ret nz ld a, $35 call Predef ; indirect jump to Func_c586 (c586 (3:4586)) ld a, [$c109] ld b, a FuncCoord 8, 9 ; $c45c ld a, [Coord] ld c, a ld a, [$cfc6] ld d, a ld hl, LedgeTiles ; $66cf .asm_1a691 ld a, [hli] cp $ff ret z cp b jr nz, .asm_1a6a4 ld a, [hli] cp c jr nz, .asm_1a6a5 ld a, [hli] cp d jr nz, .asm_1a6a6 ld a, [hl] ld e, a jr .asm_1a6a9 .asm_1a6a4 inc hl .asm_1a6a5 inc hl .asm_1a6a6 inc hl jr .asm_1a691 .asm_1a6a9 ld a, [H_CURRENTPRESSEDBUTTONS] and e ret z ld a, $ff ld [wJoypadForbiddenButtonsMask], a ld hl, $d736 set 6, [hl] call Func_3486 ld a, e ld [$ccd3], a ld [$ccd4], a ld a, $2 ld [$cd38], a call Func_1a6f0 ld a, $a2 call PlaySound ret ; (player direction) (tile player standing on) (ledge tile) (input required) LedgeTiles: ; 1a6cf (6:66cf) db $00,$2C,$37,$80 db $00,$39,$36,$80 db $00,$39,$37,$80 db $08,$2C,$27,$20 db $08,$39,$27,$20 db $0C,$2C,$0D,$10 db $0C,$2C,$1D,$10 db $0C,$39,$0D,$10 db $FF Func_1a6f0: ; 1a6f0 (6:66f0) ld hl, $8ff0 ld de, LedgeHoppingShadow ; $6708 ld bc, (BANK(LedgeHoppingShadow) << 8) + $01 call CopyVideoDataDouble ld a, $9 ld bc, $5448 ; b, c = y, x coordinates of shadow ld de, LedgeHoppingShadowOAM ; $6710 call WriteOAMBlock ret LedgeHoppingShadow: ; 1a708 (6:6708) INCBIN "gfx/ledge_hopping_shadow.1bpp" LedgeHoppingShadowOAM: ; 1a710 (6:6710) db $FF,$10,$FF,$20 db $FF,$40,$FF,$60 SECTION "bank7",ROMX,BANK[$7] CinnabarIsland_h: ; 0x1c000 to 0x1c022 (34 bytes) (bank=7) (id=8) db $00 ; tileset db CINNABAR_ISLAND_HEIGHT, CINNABAR_ISLAND_WIDTH ; dimensions (y, x) dw CinnabarIslandBlocks, CinnabarIslandTextPointers, CinnabarIslandScript ; blocks, texts, scripts db NORTH | EAST ; connections NORTH_MAP_CONNECTION ROUTE_21, ROUTE_21_WIDTH, ROUTE_21_HEIGHT, 0, 0, ROUTE_21_WIDTH, Route21Blocks EAST_MAP_CONNECTION ROUTE_20, ROUTE_20_WIDTH, 0, 0, ROUTE_20_HEIGHT, Route20Blocks, CINNABAR_ISLAND_WIDTH dw CinnabarIslandObject ; objects CinnabarIslandObject: ; 0x1c022 (size=71) db $43 ; border tile db $5 ; warps db $3, $6, $1, MANSION_1 db $3, $12, $0, CINNABAR_GYM db $9, $6, $0, CINNABAR_LAB_1 db $b, $b, $0, CINNABAR_POKECENTER db $b, $f, $0, CINNABAR_MART db $5 ; signs db $5, $9, $3 ; CinnabarIslandText3 db $b, $10, $4 ; MartSignText db $b, $c, $5 ; PokeCenterSignText db $b, $9, $6 ; CinnabarIslandText6 db $3, $d, $7 ; CinnabarIslandText7 db $2 ; people db SPRITE_GIRL, $5 + 4, $c + 4, $fe, $2, $1 ; person db SPRITE_GAMBLER, $6 + 4, $e + 4, $ff, $ff, $2 ; person ; warp-to EVENT_DISP $a, $3, $6 ; MANSION_1 EVENT_DISP $a, $3, $12 ; CINNABAR_GYM EVENT_DISP $a, $9, $6 ; CINNABAR_LAB_1 EVENT_DISP $a, $b, $b ; CINNABAR_POKECENTER EVENT_DISP $a, $b, $f ; CINNABAR_MART CinnabarIslandBlocks: ; 1c069 (7:4069) INCBIN "maps/cinnabarisland.blk" Route1_h: ; 0x1c0c3 to 0x1c0e5 (34 bytes) (bank=7) (id=12) db $00 ; tileset db ROUTE_1_HEIGHT, ROUTE_1_WIDTH ; dimensions (y, x) dw Route1Blocks, Route1TextPointers, Route1Script ; blocks, texts, scripts db NORTH | SOUTH ; connections NORTH_MAP_CONNECTION VIRIDIAN_CITY, VIRIDIAN_CITY_WIDTH, VIRIDIAN_CITY_HEIGHT, -3, 2, VIRIDIAN_CITY_WIDTH - 4, ViridianCityBlocks SOUTH_MAP_CONNECTION PALLET_TOWN, PALLET_TOWN_WIDTH, 0, 0, PALLET_TOWN_WIDTH, PalletTownBlocks, ROUTE_1_WIDTH, ROUTE_1_HEIGHT dw Route1Object ; objects Route1Object: ; 0x1c0e5 (size=19) db $b ; border tile db $0 ; warps db $1 ; signs db $1b, $9, $3 ; Route1Text3 db $2 ; people db SPRITE_BUG_CATCHER, $18 + 4, $5 + 4, $fe, $1, $1 ; person db SPRITE_BUG_CATCHER, $d + 4, $f + 4, $fe, $2, $2 ; person ; warp-to (unused) EVENT_DISP $4, $7, $2 Route1Blocks: ; 1c0fc (7:40fc) INCBIN "maps/route1.blk" UndergroundPathEntranceRoute8Blocks: ; 1c1b0 (7:41b0) INCBIN "maps/undergroundpathentranceroute8.blk" OaksLabBlocks: ; 1c1c0 (7:41c0) INCBIN "maps/oakslab.blk" Route16HouseBlocks: ; 1c1de (7:41de) Route2HouseBlocks: ; 1c1de (7:41de) SaffronHouse1Blocks: ; 1c1de (7:41de) SaffronHouse2Blocks: ; 1c1de (7:41de) VermilionHouse1Blocks: ; 1c1de (7:41de) NameRaterBlocks: ; 1c1de (7:41de) LavenderHouse1Blocks: ; 1c1de (7:41de) LavenderHouse2Blocks: ; 1c1de (7:41de) CeruleanHouseBlocks: ; 1c1de (7:41de) PewterHouse1Blocks: ; 1c1de (7:41de) PewterHouse2Blocks: ; 1c1de (7:41de) ViridianHouseBlocks: ; 0x1c1de 41DE size=16 INCBIN "maps/viridianhouse.blk" CeladonMansion5Blocks: ; 1c1ee (7:41ee) SchoolBlocks: ; 0x1c1ee 41EE size=16 INCBIN "maps/school.blk" CeruleanHouseTrashedBlocks: ; 0x1c1fe size=16 INCBIN "maps/ceruleanhousetrashed.blk" DiglettsCaveEntranceRoute11Blocks: ; 1c20e (7:420e) DiglettsCaveRoute2Blocks: ; 0x1c20e size=16 INCBIN "maps/diglettscaveroute2.blk" MonsterNames: ; 1c21e (7:421e) db "RHYDON@@@@" db "KANGASKHAN" db "NIDORAN♂@@" db "CLEFAIRY@@" db "SPEAROW@@@" db "VOLTORB@@@" db "NIDOKING@@" db "SLOWBRO@@@" db "IVYSAUR@@@" db "EXEGGUTOR@" db "LICKITUNG@" db "EXEGGCUTE@" db "GRIMER@@@@" db "GENGAR@@@@" db "NIDORAN♀@@" db "NIDOQUEEN@" db "CUBONE@@@@" db "RHYHORN@@@" db "LAPRAS@@@@" db "ARCANINE@@" db "MEW@@@@@@@" db "GYARADOS@@" db "SHELLDER@@" db "TENTACOOL@" db "GASTLY@@@@" db "SCYTHER@@@" db "STARYU@@@@" db "BLASTOISE@" db "PINSIR@@@@" db "TANGELA@@@" db "MISSINGNO." db "MISSINGNO." db "GROWLITHE@" db "ONIX@@@@@@" db "FEAROW@@@@" db "PIDGEY@@@@" db "SLOWPOKE@@" db "KADABRA@@@" db "GRAVELER@@" db "CHANSEY@@@" db "MACHOKE@@@" db "MR.MIME@@@" db "HITMONLEE@" db "HITMONCHAN" db "ARBOK@@@@@" db "PARASECT@@" db "PSYDUCK@@@" db "DROWZEE@@@" db "GOLEM@@@@@" db "MISSINGNO." db "MAGMAR@@@@" db "MISSINGNO." db "ELECTABUZZ" db "MAGNETON@@" db "KOFFING@@@" db "MISSINGNO." db "MANKEY@@@@" db "SEEL@@@@@@" db "DIGLETT@@@" db "TAUROS@@@@" db "MISSINGNO." db "MISSINGNO." db "MISSINGNO." db "FARFETCH'D" db "VENONAT@@@" db "DRAGONITE@" db "MISSINGNO." db "MISSINGNO." db "MISSINGNO." db "DODUO@@@@@" db "POLIWAG@@@" db "JYNX@@@@@@" db "MOLTRES@@@" db "ARTICUNO@@" db "ZAPDOS@@@@" db "DITTO@@@@@" db "MEOWTH@@@@" db "KRABBY@@@@" db "MISSINGNO." db "MISSINGNO." db "MISSINGNO." db "VULPIX@@@@" db "NINETALES@" db "PIKACHU@@@" db "RAICHU@@@@" db "MISSINGNO." db "MISSINGNO." db "DRATINI@@@" db "DRAGONAIR@" db "KABUTO@@@@" db "KABUTOPS@@" db "HORSEA@@@@" db "SEADRA@@@@" db "MISSINGNO." db "MISSINGNO." db "SANDSHREW@" db "SANDSLASH@" db "OMANYTE@@@" db "OMASTAR@@@" db "JIGGLYPUFF" db "WIGGLYTUFF" db "EEVEE@@@@@" db "FLAREON@@@" db "JOLTEON@@@" db "VAPOREON@@" db "MACHOP@@@@" db "ZUBAT@@@@@" db "EKANS@@@@@" db "PARAS@@@@@" db "POLIWHIRL@" db "POLIWRATH@" db "WEEDLE@@@@" db "KAKUNA@@@@" db "BEEDRILL@@" db "MISSINGNO." db "DODRIO@@@@" db "PRIMEAPE@@" db "DUGTRIO@@@" db "VENOMOTH@@" db "DEWGONG@@@" db "MISSINGNO." db "MISSINGNO." db "CATERPIE@@" db "METAPOD@@@" db "BUTTERFREE" db "MACHAMP@@@" db "MISSINGNO." db "GOLDUCK@@@" db "HYPNO@@@@@" db "GOLBAT@@@@" db "MEWTWO@@@@" db "SNORLAX@@@" db "MAGIKARP@@" db "MISSINGNO." db "MISSINGNO." db "MUK@@@@@@@" db "MISSINGNO." db "KINGLER@@@" db "CLOYSTER@@" db "MISSINGNO." db "ELECTRODE@" db "CLEFABLE@@" db "WEEZING@@@" db "PERSIAN@@@" db "MAROWAK@@@" db "MISSINGNO." db "HAUNTER@@@" db "ABRA@@@@@@" db "ALAKAZAM@@" db "PIDGEOTTO@" db "PIDGEOT@@@" db "STARMIE@@@" db "BULBASAUR@" db "VENUSAUR@@" db "TENTACRUEL" db "MISSINGNO." db "GOLDEEN@@@" db "SEAKING@@@" db "MISSINGNO." db "MISSINGNO." db "MISSINGNO." db "MISSINGNO." db "PONYTA@@@@" db "RAPIDASH@@" db "RATTATA@@@" db "RATICATE@@" db "NIDORINO@@" db "NIDORINA@@" db "GEODUDE@@@" db "PORYGON@@@" db "AERODACTYL" db "MISSINGNO." db "MAGNEMITE@" db "MISSINGNO." db "MISSINGNO." db "CHARMANDER" db "SQUIRTLE@@" db "CHARMELEON" db "WARTORTLE@" db "CHARIZARD@" db "MISSINGNO." db "MISSINGNO." db "MISSINGNO." db "MISSINGNO." db "ODDISH@@@@" db "GLOOM@@@@@" db "VILEPLUME@" db "BELLSPROUT" db "WEEPINBELL" db "VICTREEBEL" Func_1c98a: ; 1c98a (7:498a) call ClearScreen call GoPAL_SET_CF1C call LoadFontTilePatterns call LoadTextBoxTilePatterns ld hl, UnnamedText_1c9c1 ; $49c1 call PrintText FuncCoord 14, 7 ; $c43a ld hl, Coord ld bc, $80f ld a, $7 ld [$d12c], a ld a, $14 ld [$d125], a call DisplayTextBoxID ld a, [wCurrentMenuItem] ; $cc26 and a jp z, InitGame ld b, BANK(Func_73b6a) ld hl, Func_73b6a call Bankswitch jp InitGame UnnamedText_1c9c1: ; 1c9c1 (7:49c1) TX_FAR _UnnamedText_1c9c1 db "@" Func_1c9c6: ; 1c9c6 (7:49c6) ld hl, UnnamedText_1ca14 ; $4a14 call PrintText ld hl, $cf7b ld a, l ld [$cf8b], a ld a, h ld [$cf8c], a ld a, [wListScrollOffset] ; $cc36 push af xor a ld [wCurrentMenuItem], a ; $cc26 ld [wListScrollOffset], a ; $cc36 ld [$cf93], a ld a, $4 ld [wListMenuID], a ; $cf94 call DisplayListMenuID pop bc ld a, b ld [wListScrollOffset], a ; $cc36 ret c ld hl, $d126 set 7, [hl] ld hl, $cc5b ld a, [wWhichPokemon] ; $cf92 add a ld d, $0 ld e, a add hl, de ld a, [hli] ld b, a ld a, [hl] ld c, a ld hl, $d3af call Func_1ca0d Func_1ca0d: ; 1ca0d (7:4a0d) inc hl inc hl ld a, b ld [hli], a ld a, c ld [hli], a ret UnnamedText_1ca14: ; 1ca14 (7:4a14) TX_FAR _UnnamedText_1ca14 db "@" CinnabarIslandScript: ; 1ca19 (7:4a19) call EnableAutoTextBoxDrawing ld hl, $d126 set 5, [hl] ld hl, $d796 res 0, [hl] ld hl, $d7a3 res 1, [hl] ld hl, CinnabarIslandScriptPointers ld a, [W_CINNABARISLANDCURSCRIPT] jp CallFunctionInTable CinnabarIslandScriptPointers: ; 1ca34 (7:4a34) dw CinnabarIslandScript0 dw CinnabarIslandScript1 CinnabarIslandScript0: ; 1ca38 (7:4a38) ld b, $2b call IsItemInBag ret nz ld a, [$d361] cp $4 ret nz ld a, [$d362] cp $12 ret nz ld a, $8 ld [$d528], a ld a, $8 ld [$ff00+$8c], a call DisplayTextID xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, $1 ld [$cd38], a ld a, $80 ld [$ccd3], a call Func_3486 xor a ld [$c109], a ld [wJoypadForbiddenButtonsMask], a ld a, $1 ld [W_CINNABARISLANDCURSCRIPT], a ret CinnabarIslandScript1: ; 1ca73 (7:4a73) ld a, [$cd38] and a ret nz call Delay3 ld a, $0 ld [W_CINNABARISLANDCURSCRIPT], a ret CinnabarIslandTextPointers: ; 1ca81 (7:4a81) dw CinnabarIslandText1 dw CinnabarIslandText2 dw CinnabarIslandText3 dw MartSignText dw PokeCenterSignText dw CinnabarIslandText6 dw CinnabarIslandText7 dw CinnabarIslandText8 CinnabarIslandText8: ; 1ca91 (7:4a91) TX_FAR _CinnabarIslandText8 db "@" CinnabarIslandText1: ; 1ca96 (7:4a96) TX_FAR _CinnabarIslandText1 db "@" CinnabarIslandText2: ; 1ca9b (7:4a9b) TX_FAR _CinnabarIslandText2 db "@" CinnabarIslandText3: ; 1caa0 (7:4aa0) TX_FAR _CinnabarIslandText3 db "@" CinnabarIslandText6: ; 1caa5 (7:4aa5) TX_FAR _CinnabarIslandText6 db "@" CinnabarIslandText7: ; 1caaa (7:4aaa) TX_FAR _CinnabarIslandText7 db "@" Route1Script: ; 1caaf (7:4aaf) jp EnableAutoTextBoxDrawing Route1TextPointers: ; 1cab2 (7:4ab2) dw Route1Text1 dw Route1Text2 dw Route1Text3 Route1Text1: ; 1cab8 (7:4ab8) db $08 ; asm ld hl, $d7bf bit 0, [hl] set 0, [hl] jr nz, .asm_02840 ; 0x1cac0 ld hl, Route1ViridianMartSampleText call PrintText ld bc, (POTION << 8) | 1 call GiveItem jr nc, .BagFull ld hl, UnnamedText_1cae8 ; $4ae8 jr .asm_46d43 ; 0x1cad3 .BagFull ld hl, UnnamedText_1caf3 ; $4af3 jr .asm_46d43 ; 0x1cad8 .asm_02840 ; 0x1cada ld hl, UnnamedText_1caee ; $4aee .asm_46d43 ; 0x1cadd call PrintText jp TextScriptEnd Route1ViridianMartSampleText: ; 1cae3 (7:4ae3) TX_FAR _Route1ViridianMartSampleText db "@" UnnamedText_1cae8: ; 1cae8 (7:4ae8) TX_FAR _UnnamedText_1cae8 db $0b,"@" UnnamedText_1caee: ; 1caee (7:4aee) TX_FAR _UnnamedText_1caee db "@" UnnamedText_1caf3: ; 1caf3 (7:4af3) TX_FAR _UnnamedText_1caf3 db "@" Route1Text2: ; 1caf8 (7:4af8) TX_FAR _Route1Text2 db "@" Route1Text3: ; 1cafd (7:4afd) TX_FAR _Route1Text3 db "@" OaksLab_h: ; 0x1cb02 to 0x1cb0e (12 bytes) (bank=7) (id=40) db $05 ; tileset db OAKS_LAB_HEIGHT, OAKS_LAB_WIDTH ; dimensions (y, x) dw OaksLabBlocks, OaksLabTextPointers, OaksLabScript ; blocks, texts, scripts db $00 ; connections dw OaksLabObject ; objects OaksLabScript: ; 1cb0e (7:4b0e) ld a, [$d74b] bit 6, a call nz, OaksLabScript_1d076 ld a, $1 ld [$cf0c], a xor a ld [$cc3c], a ld hl, OaksLabScriptPointers ld a, [W_OAKSLABCURSCRIPT] jp CallFunctionInTable OaksLabScriptPointers: ; 1cb28 (7:4b28) dw OaksLabScript0 dw OaksLabScript1 dw OaksLabScript2 dw OaksLabScript3 dw OaksLabScript4 dw OaksLabScript5 dw OaksLabScript6 dw OaksLabScript7 dw OaksLabScript8 dw OaksLabScript9 dw OaksLabScript10 dw OaksLabScript11 dw OaksLabScript12 dw OaksLabScript13 dw OaksLabScript14 dw OaksLabScript15 dw OaksLabScript16 dw OaksLabScript17 dw OaksLabScript18 OaksLabScript0: ; 1cb4e (7:4b4e) ld a, [$d74b] bit 7, a ret z ld a, [$cf10] and a ret nz ld a, $31 ld [$cc4d], a ld a, $15 call Predef ld hl, $d72e res 4, [hl] ld a, $1 ld [W_OAKSLABCURSCRIPT], a ret OaksLabScript1: ; 1cb6e (7:4b6e) ld a, $8 ld [$ff00+$8c], a ld de, OakEntryMovement call MoveSprite ld a, $2 ld [W_OAKSLABCURSCRIPT], a ret OakEntryMovement: ; 1cb7e (7:4b7e) db $40,$40,$40,$FF OaksLabScript2: ; 1cb82 (7:4b82) ld a, [$d730] bit 0, a ret nz ld a, $31 ld [$cc4d], a ld a, $11 call Predef ld a, $2e ld [$cc4d], a ld a, $15 call Predef ld a, $3 ld [W_OAKSLABCURSCRIPT], a ret OaksLabScript3: ; 1cba2 (7:4ba2) call Delay3 ld hl, $ccd3 ld de, PlayerEntryMovementRLE call DecodeRLEList dec a ld [$cd38], a call Func_3486 ld a, $1 ld [$ff00+$8c], a xor a ld [$ff00+$8d], a call Func_34a6 ; face object ld a, $5 ld [$ff00+$8c], a xor a ld [$ff00+$8d], a call Func_34a6 ; face object ld a, $4 ld [W_OAKSLABCURSCRIPT], a ret PlayerEntryMovementRLE: ; 1cbcf (7:4bcf) db $40, $8, $ff OaksLabScript4: ; 1cbd2 (7:4bd2) ld a, [$cd38] and a ret nz ld hl, $d747 set 0, [hl] ld hl, $d74b set 0, [hl] ld a, $1 ld [$ff00+$8c], a ld a, $4 ld [$ff00+$8d], a call Func_34a6 ; face object call UpdateSprites ld hl, W_FLAGS_D733 res 1, [hl] call Func_2307 ld a, $5 ld [W_OAKSLABCURSCRIPT], a ret OaksLabScript5: ; 1cbfd (7:4bfd) ld a, $fc ld [wJoypadForbiddenButtonsMask], a ld a, $11 ld [$ff00+$8c], a call DisplayTextID call Delay3 ld a, $12 ld [$ff00+$8c], a call DisplayTextID call Delay3 ld a, $13 ld [$ff00+$8c], a call DisplayTextID call Delay3 ld a, $14 ld [$ff00+$8c], a call DisplayTextID ld hl, $d74b set 1, [hl] xor a ld [wJoypadForbiddenButtonsMask], a ld a, $6 ld [W_OAKSLABCURSCRIPT], a ret OaksLabScript6: ; 1cc36 (7:4c36) ld a, [W_YCOORD] cp $6 ret nz ld a, $5 ld [$ff00+$8c], a xor a ld [$ff00+$8d], a call Func_34a6 ; face object ld a, $1 ld [$ff00+$8c], a xor a ld [$ff00+$8d], a call Func_34a6 ; face object call UpdateSprites ld a, $c ld [$ff00+$8c], a call DisplayTextID ld a, $1 ld [$cd38], a ld a, $40 ld [$ccd3], a call Func_3486 ld a, $8 ld [$d528], a ld a, $7 ld [W_OAKSLABCURSCRIPT], a ret OaksLabScript7: ; 1cc72 (7:4c72) ld a, [$cd38] and a ret nz call Delay3 ld a, $6 ld [W_OAKSLABCURSCRIPT], a ret OaksLabScript8: ; 1cc80 (7:4c80) ld a, [W_PLAYERSTARTER] cp CHARMANDER jr z, .Charmander ; 0x1cc85 $6 cp SQUIRTLE jr z, .Squirtle ; 0x1cc89 $1d jr .Bulbasaur ; 0x1cc8b $38 .Charmander ld de, .MiddleBallMovement1 ld a, [W_YCOORD] cp $4 ; is the player standing below the table? jr z, .asm_1ccf3 ; 0x1cc95 $5c ld de, .MiddleBallMovement2 jr .asm_1ccf3 ; 0x1cc9a $57 .MiddleBallMovement1 db 0,0,$C0,$C0,$C0,$40,$FF .MiddleBallMovement2 db 0,$C0,$C0,$C0,$FF .Squirtle ld de, .RightBallMovement1 ld a, [W_YCOORD] cp $4 ; is the player standing below the table? jr z, .asm_1ccf3 ; 0x1ccb0 $41 ld de, .RightBallMovement2 jr .asm_1ccf3 ; 0x1ccb5 $3c .RightBallMovement1 db 0,0,$C0,$C0,$C0,$C0,$40,$FF .RightBallMovement2 db 0,$C0,$C0,$C0,$C0,$FF .Bulbasaur ld de, .LeftBallMovement1 ld a, [W_XCOORD] cp $9 ; is the player standing to the right of the table? jr nz, .asm_1ccf3 ; 0x1cccd $24 push hl ld a, $1 ld [$ff00+$8c], a ld a, $4 ld [$ff00+$8b], a call Func_34fc push hl ld [hl], $4c inc hl inc hl ld [hl], $0 pop hl inc h ld [hl], $8 inc hl ld [hl], $9 ld de, .LeftBallMovement2 ; the rival is not currently onscreen, so account for that pop hl jr .asm_1ccf3 ; 0x1cced $4 .LeftBallMovement1 db $00,$C0 ; not yet terminated! .LeftBallMovement2 db $C0,$FF .asm_1ccf3 ld a, $1 ld [$ff00+$8c], a call MoveSprite ld a, $9 ld [W_OAKSLABCURSCRIPT], a ret OaksLabScript9: ; 1cd00 (7:4d00) ld a, [$d730] bit 0, a ret nz ld a, $fc ld [wJoypadForbiddenButtonsMask], a ld a, $1 ld [$ff00+$8c], a ld a, $4 ld [$ff00+$8d], a call Func_34a6 ; face object ld a, $d ld [$ff00+$8c], a call DisplayTextID ld a, [$cd3e] cp $2 jr nz, .asm_1cd28 ; 0x1cd22 $4 ld a, $2b jr .asm_1cd32 ; 0x1cd26 $a .asm_1cd28 cp $3 jr nz, .asm_1cd30 ; 0x1cd2a $4 ld a, $2c jr .asm_1cd32 ; 0x1cd2e $2 .asm_1cd30 ld a, $2d .asm_1cd32 ld [$cc4d], a ld a, $11 call Predef call Delay3 ld a, [$cd3d] ld [W_RIVALSTARTER], a ld [$cf91], a ld [$d11e], a call GetMonName ld a, $1 ld [$ff00+$8c], a ld a, $4 ld [$ff00+$8d], a call Func_34a6 ; face object ld a, $e ld [$ff00+$8c], a call DisplayTextID ld hl, $d74b set 2, [hl] xor a ld [wJoypadForbiddenButtonsMask], a ld a, $a ld [W_OAKSLABCURSCRIPT], a ret OaksLabScript10: ; 1cd6d (7:4d6d) ld a, [W_YCOORD] cp $6 ret nz ld a, $1 ld [$ff00+$8c], a xor a ld [$ff00+$8d], a call Func_34a6 ; face object ld a, $8 ld [$d528], a ld c, BANK(Music_MeetRival) ld a, MUSIC_MEET_RIVAL call PlayMusic ; play music ld a, $f ld [$ff00+$8c], a call DisplayTextID ld a, $1 ld [$ff00+$9b], a ld a, $1 swap a ld [$ff00+$95], a ld a, $22 call Predef ld a, [$ff00+$95] dec a ld [$ff00+$95], a ld a, $20 call Predef ld de, $cc97 ld a, $1 ld [$ff00+$8c], a call MoveSprite ld a, $b ld [W_OAKSLABCURSCRIPT], a ret OaksLabScript11: ; 1cdb9 (7:4db9) ld a, [$d730] bit 0, a ret nz ; define which team rival uses, and fight it ld a, SONY1 + $C8 ld [W_CUROPPONENT], a ld a, [W_RIVALSTARTER] cp SQUIRTLE jr nz, .NotSquirtle ; 0x1cdc9 $4 ld a, $1 jr .done ; 0x1cdcd $a .NotSquirtle cp BULBASAUR jr nz, .Charmander ; 0x1cdd1 $4 ld a, $2 jr .done ; 0x1cdd5 $2 .Charmander ld a, $3 .done ld [W_TRAINERNO], a ld a, $1 ld [$cf13], a call Func_32ef ld hl, UnnamedText_1d3be ld de, UnnamedText_1d3c3 call PreBattleSaveRegisters ld hl, $d72d set 6, [hl] set 7, [hl] xor a ld [wJoypadForbiddenButtonsMask], a ld a, $8 ld [$d528], a ld a, $c ld [W_OAKSLABCURSCRIPT], a ret OaksLabScript12: ; 1ce03 (7:4e03) ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld a, $8 ld [$d528], a call UpdateSprites ld a, $1 ld [$cf13], a call Func_32f9 ld a, $1 ld [$ff00+$8c], a xor a ld [$ff00+$8d], a call Func_34a6 ; face object ld a, $7 call Predef ld hl, $d74b set 3, [hl] ld a, $d ld [W_OAKSLABCURSCRIPT], a ret OaksLabScript13: ; 1ce32 (7:4e32) ld c, $14 call DelayFrames ld a, $10 ld [$ff00+$8c], a call DisplayTextID ld b, BANK(Music_RivalAlternateStart) ld hl, Music_RivalAlternateStart call Bankswitch ld a, $1 ld [$ff00+$8c], a ld de, .RivalExitMovement call MoveSprite ld a, [W_XCOORD] cp $4 ; move left or right depending on where the player is standing jr nz, .asm_1ce5b ; 0x1ce55 $4 ld a, $c0 jr .asm_1ce5d ; 0x1ce59 $2 .asm_1ce5b ld a, $80 .asm_1ce5d ld [$cc5b], a ld a, $e ld [W_OAKSLABCURSCRIPT], a ret .RivalExitMovement db $E0,$00,$00,$00,$00,$00,$FF OaksLabScript14: ; 1ce6d (7:4e6d) ld a, [$d730] bit 0, a jr nz, .asm_1ce8c ; 0x1ce72 $18 ld a, $2a ld [$cc4d], a ld a, $11 call Predef xor a ld [wJoypadForbiddenButtonsMask], a call Func_2307 ; reset to map music ld a, $12 ld [W_OAKSLABCURSCRIPT], a jr .done ; 0x1ce8a $23 .asm_1ce8c ld a, [$cf0f] cp $5 jr nz, .asm_1cea8 ; 0x1ce91 $15 ld a, [$d362] cp $4 jr nz, .asm_1cea1 ; 0x1ce98 $7 ld a, $c ld [$c109], a jr .done ; 0x1ce9f $e .asm_1cea1 ld a, $8 ld [$c109], a jr .done ; 0x1cea6 $7 .asm_1cea8 cp $4 ret nz xor a ld [$c109], a .done ret OaksLabScript15: ; 1ceb0 (7:4eb0) xor a ld [H_CURRENTPRESSEDBUTTONS], a call EnableAutoTextBoxDrawing ld a, $ff ld [$c0ee], a call PlaySound ld b, BANK(Music_RivalAlternateStart) ld hl, Music_RivalAlternateStart call Bankswitch ld a, $15 ld [$ff00+$8c], a call DisplayTextID call OaksLabScript_1d02b ld a, $2a ld [$cc4d], a ld a, $15 call Predef ld a, [$cd37] ld [$d157], a ld b, $0 ld c, a ld hl, $cc97 ld a, $40 call FillMemory ld [hl], $ff ld a, $1 ld [$ff00+$8c], a ld de, $cc97 call MoveSprite ld a, $10 ld [W_OAKSLABCURSCRIPT], a ret OaksLabScript_1cefd ; 1cefd (7:4efd) ld a, $1 ld [$ff00+$8c], a ld a, $4 ld [$ff00+$8d], a call Func_34a6 ; face object ld a, $8 ld [$ff00+$8c], a xor a ld [$ff00+$8d], a jp Func_34a6 ; face object OaksLabScript16: ; 1cf12 (7:4f12) ld a, [$d730] bit 0, a ret nz call EnableAutoTextBoxDrawing call Func_2307 ld a, $fc ld [wJoypadForbiddenButtonsMask], a call OaksLabScript_1cefd ld a, $16 ld [$ff00+$8c], a call DisplayTextID call DelayFrame call OaksLabScript_1cefd ld a, $17 ld [$ff00+$8c], a call DisplayTextID call DelayFrame call OaksLabScript_1cefd ld a, $18 ld [$ff00+$8c], a call DisplayTextID call DelayFrame ld a, $19 ld [$ff00+$8c], a call DisplayTextID call Delay3 ld a, $2f ld [$cc4d], a ld a, $11 call Predef ld a, $30 ld [$cc4d], a ld a, $11 call Predef call OaksLabScript_1cefd ld a, $1a ld [$ff00+$8c], a call DisplayTextID ld a, $1 ld [$ff00+$8c], a ld a, $c ld [$ff00+$8d], a call Func_34a6 ; face object call Delay3 ld a, $1b ld [$ff00+$8c], a call DisplayTextID ld hl, $d74b set 5, [hl] ld hl, $d74e set 0, [hl] ld a, $1 ld [$cc4d], a ld a, $11 call Predef ld a, $2 ld [$cc4d], a ld a, $15 call Predef ld a, [$d157] ld b, $0 ld c, a ld hl, $cc97 xor a call FillMemory ld [hl], $ff ld a, $ff ld [$c0ee], a call PlaySound ld b, BANK(Music_RivalAlternateStart) ld hl, Music_RivalAlternateStart call Bankswitch ld a, $1 ld [$ff00+$8c], a ld de, $cc97 call MoveSprite ld a, $11 ld [W_OAKSLABCURSCRIPT], a ret OaksLabScript17: ; 1cfd4 (7:4fd4) ld a, [$d730] bit 0, a ret nz call Func_2307 ld a, $2a ld [$cc4d], a ld a, $11 call Predef ld hl, $d7eb set 0, [hl] res 1, [hl] set 7, [hl] ld a, $22 ld [$cc4d], a ld a, $15 call Predef ld a, $5 ld [W_PALLETTOWNCURSCRIPT], a xor a ld [wJoypadForbiddenButtonsMask], a ld a, $12 ld [W_OAKSLABCURSCRIPT], a ret OaksLabScript18: ; 1d009 (7:5009) ret OaksLabScript_1d00a: ; 1d00a (7:500a) ld hl, wBagItems ld bc, $0000 .asm_1d010 ld a, [hli] cp $ff ret z cp OAKS_PARCEL jr z, .GotParcel ; 0x1d016 $4 inc hl inc c jr .asm_1d010 ; 0x1d01a $f4 .GotParcel ld hl, $d31d ld a, c ld [wWhichPokemon], a ld a, $1 ld [$cf96], a jp RemoveItemFromInventory OaksLabScript_1d02b: ; 1d02b (7:502b) ld a, $7c ld [$ff00+$eb], a ld a, $8 ld [$ff00+$ee], a ld a, [$d361] cp $3 jr nz, .asm_1d045 ; 0x1d038 $b ld a, $4 ld [$cd37], a ld a, $30 ld b, $b jr .asm_1d068 ; 0x1d043 $23 .asm_1d045 cp $1 jr nz, .asm_1d054 ; 0x1d047 $b ld a, $2 ld [$cd37], a ld a, $30 ld b, $9 jr .asm_1d068 ; 0x1d052 $14 .asm_1d054 ld a, $3 ld [$cd37], a ld b, $a ld a, [$d362] cp $4 jr nz, .asm_1d066 ; 0x1d060 $4 ld a, $40 jr .asm_1d068 ; 0x1d064 $2 .asm_1d066 ld a, $20 .asm_1d068 ld [$ff00+$ec], a ld a, b ld [$ff00+$ed], a ld a, $1 ld [$cf13], a call Func_32f9 ret OaksLabScript_1d076: ; 1d076 (7:5076) ld hl, OaksLabTextPointers + $36 ; $50b8 ; starts at OaksLabText28 ld a, l ld [W_MAPTEXTPTR], a ld a, h ld [W_MAPTEXTPTR+1], a ret OaksLabTextPointers: ; 1d082 (7:5082) dw OaksLabText1 dw OaksLabText2 dw OaksLabText3 dw OaksLabText4 dw OaksLabText5 dw OaksLabText6 dw OaksLabText7 dw OaksLabText8 dw OaksLabText9 dw OaksLabText10 dw OaksLabText11 dw OaksLabText12 dw OaksLabText13 dw OaksLabText14 dw OaksLabText15 dw OaksLabText16 dw OaksLabText17 dw OaksLabText18 dw OaksLabText19 dw OaksLabText20 dw OaksLabText21 dw OaksLabText22 dw OaksLabText23 dw OaksLabText24 dw OaksLabText25 dw OaksLabText26 dw OaksLabText27 dw OaksLabText28 dw OaksLabText29 dw OaksLabText30 dw OaksLabText31 dw OaksLabText32 dw OaksLabText33 dw OaksLabText34 dw OaksLabText35 dw OaksLabText36 dw OaksLabText37 dw OaksLabText38 OaksLabText28: ; 1d0ce (7:50ce) OaksLabText1: ; 1d0ce (7:50ce) db $08 ; asm ld a, [$d74b] bit 0, a jr nz, .asm_1d0de ; 0x1d0d4 ld hl, OaksLabGaryText1 call PrintText jr .asm_1d0f0 ; 0x1d0dc .asm_1d0de ; 0x1d0de bit 2, a jr nz, .asm_1d0ea ; 0x1d0e0 ld hl, OaksLabText40 call PrintText jr .asm_1d0f0 ; 0x1d0e8 .asm_1d0ea ; 0x1d0ea ld hl, OaksLabText41 call PrintText .asm_1d0f0 ; 0x1d0f0 jp TextScriptEnd OaksLabGaryText1: ; 1d0f3 (7:50f3) TX_FAR _OaksLabGaryText1 db "@" OaksLabText40: ; 1d0f8 (7:50f8) TX_FAR _OaksLabText40 db "@" OaksLabText41: ; 1d0fd (7:50fd) TX_FAR _OaksLabText41 db "@" OaksLabText29: ; 1d102 (7:5102) OaksLabText2: ; 1d102 (7:5102) db $8 ld a, $b1 ld [$cd3d], a ld a, $3 ld [$cd3e], a ld a, $b0 ld b, $2 jr OaksLabScript_1d133 ; 0x1d111 $20 OaksLabText30: ; 1d113 (7:5113) OaksLabText3: ; 1d113 (7:5113) db $8 ld a, $99 ld [$cd3d], a ld a, $4 ld [$cd3e], a ld a, $b1 ld b, $3 jr OaksLabScript_1d133 ; 0x1d122 $f OaksLabText31: ; 1d124 (7:5124) OaksLabText4: ; 1d124 (7:5124) db $8 ld a, $b0 ld [$cd3d], a ld a, $2 ld [$cd3e], a ld a, $99 ld b, $4 OaksLabScript_1d133: ; 1d133 (7:5133) ld [$cf91], a ld [$d11e], a ld a, b ld [$cf13], a ld a, [$d74b] bit 2, a jp nz, OaksLabScript_1d22d bit 1, a jr nz, OaksLabScript_1d157 ; 0x1d147 $e ld hl, OaksLabText39 call PrintText jp TextScriptEnd OaksLabText39: ; 1d152 (7:5152) TX_FAR _OaksLabText39 db "@" OaksLabScript_1d157: ; 1d157 (7:5157) ld a, $5 ld [$ff00+$8c], a ld a, $9 ld [$ff00+$8b], a call Func_34fc ld [hl], $0 ; manually fixed some disassembler issues around here ld a, $1 ld [$FF8c], a ld a, $9 ld [$ff00+$8b], a call Func_34fc ld [hl], $c ld hl, $d730 set 6, [hl] ld a, $46 call Predef ld hl, $d730 res 6, [hl] call ReloadMapData ld c, $a call DelayFrames ld a, [$cf13] cp $2 jr z, OaksLabLookAtCharmander cp $3 jr z, OaksLabLookAtSquirtle jr OaksLabLookAtBulbasaur OaksLabLookAtCharmander ; 0x1d195 ld hl, OaksLabCharmanderText jr OaksLabMonChoiceMenu OaksLabCharmanderText: ; 1d19a (7:519a) TX_FAR _OaksLabCharmanderText ; 0x94e06 db "@" OaksLabLookAtSquirtle: ; 1d19f (7:519f) ld hl, OaksLabSquirtleText jr OaksLabMonChoiceMenu OaksLabSquirtleText: ; 1d1a4 (7:51a4) TX_FAR _OaksLabSquirtleText ; 0x94e2f db "@" OaksLabLookAtBulbasaur: ; 1d1a9 (7:51a9) ld hl, OaksLabBulbasaurText jr OaksLabMonChoiceMenu OaksLabBulbasaurText: ; 1d1ae (7:51ae) TX_FAR _OaksLabBulbasaurText ; 0x94e57 db "@" OaksLabMonChoiceMenu: ; 1d1b3 (7:51b3) call PrintText ld a, $1 ld [$cc3c], a call YesNoChoice ; yes/no menu ld a, [$cc26] and a jr nz, OaksLabMonChoiceEnd ld a, [$cf91] ld [$d717], a ld [$d11e], a call GetMonName ld a, [$cf13] cp $2 jr nz, asm_1d1db ; 0x1d1d5 $4 ld a, $2b jr asm_1d1e5 ; 0x1d1d9 $a asm_1d1db: ; 1d1db (7:51db) cp $3 jr nz, asm_1d1e3 ; 0x1d1dd $4 ld a, $2c jr asm_1d1e5 ; 0x1d1e1 $2 asm_1d1e3: ; 1d1e3 (7:51e3) ld a, $2d asm_1d1e5: ; 1d1e5 (7:51e5) ld [$cc4d], a ld a, $11 call Predef ld a, $1 ld [$cc3c], a ld hl, OaksLabMonEnergeticText call PrintText ld hl, OaksLabReceivedMonText call PrintText xor a ld [$cc49], a ld a, $5 ld [$d127], a ld a, [$cf91] ld [$d11e], a call AddPokemonToParty ld hl, $d72e set 3, [hl] ld a, $fc ld [wJoypadForbiddenButtonsMask], a ld a, $8 ld [W_OAKSLABCURSCRIPT], a OaksLabMonChoiceEnd: ; 1d21f (7:521f) jp TextScriptEnd OaksLabMonEnergeticText: ; 1d222 (7:5222) TX_FAR _OaksLabMonEnergeticText db "@" OaksLabReceivedMonText: ; 1d227 (7:5227) TX_FAR _OaksLabReceivedMonText ; 0x94ea0 db $11, "@" OaksLabScript_1d22d: ; 1d22d (7:522d) ld a, $5 ld [$ff00+$8c], a ld a, $9 ld [$ff00+$8b], a call Func_34fc ld [hl], $0 ld hl, OaksLabLastMonText ; $5243 call PrintText jp TextScriptEnd OaksLabLastMonText: ; 1d243 (7:5243) TX_FAR _OaksLabLastMonText db "@" OaksLabText32: ; 1d248 (7:5248) OaksLabText5: ; 1d248 (7:5248) db $08 ; asm ld a, [$d747] bit 6, a jr nz, .asm_50e81 ; 0x1d24e ld hl, $d2f7 ld b, $13 call CountSetBits ld a, [$d11e] cp $2 jr c, .asm_b28b0 ; 0x1d25d ld a, [$d74b] bit 5, a jr z, .asm_b28b0 ; 0x1d264 .asm_50e81 ; 0x1d266 ld hl, UnnamedText_1d31d call PrintText ld a, $1 ld [$cc3c], a ld a, $56 call Predef jp .asm_0f042 .asm_b28b0 ; 0x1d279 ld b,POKE_BALL call IsItemInBag jr nz, .asm_17c30 ; 0x1d27e ld a, [$d7eb] bit 5, a jr nz, .asm_f1adc ; 0x1d285 ld a, [$d74b] bit 5, a jr nz, .asm_333a2 ; 0x1d28c bit 3, a jr nz, .asm_76269 ; 0x1d290 ld a, [$d72e] bit 3, a jr nz, .asm_4a5e0 ; 0x1d297 ld hl, UnnamedText_1d2f0 call PrintText jr .asm_0f042 ; 0x1d29f .asm_4a5e0 ; 0x1d2a1 ld hl, UnnamedText_1d2f5 call PrintText jr .asm_0f042 ; 0x1d2a7 .asm_76269 ; 0x1d2a9 ld b, OAKS_PARCEL call IsItemInBag jr nz, .asm_a8fcf ; 0x1d2ae ld hl, UnnamedText_1d2fa call PrintText jr .asm_0f042 ; 0x1d2b6 .asm_a8fcf ; 0x1d2b8 ld hl, OaksLabDeliverParcelText call PrintText call OaksLabScript_1d00a ld a, $f ld [W_OAKSLABCURSCRIPT], a jr .asm_0f042 ; 0x1d2c6 .asm_333a2 ; 0x1d2c8 ld hl, OaksLabAroundWorldText call PrintText jr .asm_0f042 ; 0x1d2ce .asm_f1adc ; 0x1d2d0 ld hl, $d74b bit 4, [hl] set 4, [hl] jr nz, .asm_17c30 ; 0x1d2d7 ld bc, (POKE_BALL << 8) | 5 call GiveItem ld hl, OaksLabGivePokeballsText call PrintText jr .asm_0f042 ; 0x1d2e5 .asm_17c30 ; 0x1d2e7 ld hl, OaksLabPleaseVisitText call PrintText .asm_0f042 ; 0x1d2ed jp TextScriptEnd UnnamedText_1d2f0: ; 1d2f0 (7:52f0) TX_FAR _UnnamedText_1d2f0 db "@" UnnamedText_1d2f5: ; 1d2f5 (7:52f5) TX_FAR _UnnamedText_1d2f5 db "@" UnnamedText_1d2fa: ; 1d2fa (7:52fa) TX_FAR _UnnamedText_1d2fa db "@" OaksLabDeliverParcelText: ; 1d2ff (7:52ff) TX_FAR _OaksLabDeliverParcelText1 ; 0x94f69 db $11 TX_FAR _OaksLabDeliverParcelText2 db "@" OaksLabAroundWorldText: ; 1d309 (7:5309) TX_FAR _OaksLabAroundWorldText db "@" OaksLabGivePokeballsText: ; 1d30e (7:530e) TX_FAR _OaksLabGivePokeballsText1 ; 0x9506d db $11 TX_FAR _OaksLabGivePokeballsText2 db "@" OaksLabPleaseVisitText: ; 1d318 (7:5318) TX_FAR _OaksLabPleaseVisitText db "@" UnnamedText_1d31d: ; 1d31d (7:531d) TX_FAR _UnnamedText_1d31d db "@" OaksLabText34: ; 1d322 (7:5322) OaksLabText33: ; 1d322 (7:5322) OaksLabText7: ; 1d322 (7:5322) OaksLabText6: ; 1d322 (7:5322) db $08 ; asm ld hl, UnnamedText_1d32c call PrintText jp TextScriptEnd UnnamedText_1d32c: ; 1d32c (7:532c) TX_FAR _UnnamedText_1d32c db "@" OaksLabText35: ; 1d331 (7:5331) OaksLabText8: ; 1d331 (7:5331) TX_FAR _OaksLabText8 db "@" OaksLabText36: ; 1d336 (7:5336) OaksLabText9: ; 1d336 (7:5336) db $08 ; asm ld hl, UnnamedText_1d340 call PrintText jp TextScriptEnd UnnamedText_1d340: ; 1d340 (7:5340) TX_FAR _UnnamedText_1d340 db "@" OaksLabText17: ; 1d345 (7:5345) db $8 ld hl, OaksLabRivalWaitingText call PrintText jp TextScriptEnd OaksLabRivalWaitingText: ; 1d34f (7:534f) TX_FAR _OaksLabRivalWaitingText db "@" OaksLabText18: ; 1d354 (7:5354) db $8 ld hl, OaksLabChooseMonText call PrintText jp TextScriptEnd OaksLabChooseMonText: ; 1d35e (7:535e) TX_FAR _OaksLabChooseMonText db "@" OaksLabText19: ; 1d363 (7:5363) db $8 ld hl, OaksLabRivalInterjectionText call PrintText jp TextScriptEnd OaksLabRivalInterjectionText: ; 1d36d (7:536d) TX_FAR _OaksLabRivalInterjectionText db "@" OaksLabText20: ; 1d372 (7:5372) db $8 ld hl, OaksLabBePatientText call PrintText jp TextScriptEnd OaksLabBePatientText: ; 1d37c (7:537c) TX_FAR _OaksLabBePatientText db "@" OaksLabText12: ; 1d381 (7:5381) db $8 ld hl, OaksLabLeavingText call PrintText jp TextScriptEnd OaksLabLeavingText: ; 1d38b (7:538b) TX_FAR _OaksLabLeavingText db "@" OaksLabText13: ; 1d390 (7:5390) db $8 ld hl, OaksLabRivalPickingMonText call PrintText jp TextScriptEnd OaksLabRivalPickingMonText: ; 1d39a (7:539a) TX_FAR _OaksLabRivalPickingMonText db "@" OaksLabText14: ; 1d39f (7:539f) db $8 ld hl, OaksLabRivalReceivedMonText call PrintText jp TextScriptEnd OaksLabRivalReceivedMonText: ; 1d3a9 (7:53a9) TX_FAR _OaksLabRivalReceivedMonText ; 0x95461 db $11, "@" OaksLabText15: ; 1d3af (7:53af) db $8 ld hl, OaksLabRivalChallengeText call PrintText jp TextScriptEnd OaksLabRivalChallengeText: ; 1d3b9 (7:53b9) TX_FAR _OaksLabRivalChallengeText db "@" UnnamedText_1d3be: ; 1d3be (7:53be) TX_FAR _UnnamedText_1d3be db "@" UnnamedText_1d3c3: ; 1d3c3 (7:53c3) TX_FAR _UnnamedText_1d3c3 db "@" OaksLabText16: ; 1d3c8 (7:53c8) db $8 ld hl, OaksLabRivalToughenUpText call PrintText jp TextScriptEnd OaksLabRivalToughenUpText: ; 1d3d2 (7:53d2) TX_FAR _OaksLabRivalToughenUpText db "@" OaksLabText21: ; 1d3d7 (7:53d7) TX_FAR _OaksLabText21 db "@" OaksLabText22: ; 1d3dc (7:53dc) TX_FAR _OaksLabText22 db "@" OaksLabText23: ; 1d3e1 (7:53e1) TX_FAR _OaksLabText23 db "@" OaksLabText24: ; 1d3e6 (7:53e6) TX_FAR _OaksLabText24 db "@" OaksLabText25: ; 1d3eb (7:53eb) TX_FAR _OaksLabText25 db $11, "@" OaksLabText26: ; 1d3f1 (7:53f1) TX_FAR _OaksLabText26 db "@" OaksLabText27: ; 1d3f6 (7:53f6) TX_FAR _OaksLabText27 db "@" OaksLabText38: ; 1d3fb (7:53fb) OaksLabText37: ; 1d3fb (7:53fb) OaksLabText11: ; 1d3fb (7:53fb) OaksLabText10: ; 1d3fb (7:53fb) db $08 ; asm ld hl, UnnamedText_1d405 call PrintText jp TextScriptEnd UnnamedText_1d405: ; 1d405 (7:5405) TX_FAR _UnnamedText_1d405 db "@" OaksLabObject: ; 0x1d40a (size=88) db $3 ; border tile db $2 ; warps db $b, $4, $2, $ff db $b, $5, $2, $ff db $0 ; signs db $b ; people db SPRITE_BLUE, $3 + 4, $4 + 4, $ff, $ff, $41, SONY1 + $C8, $1 ; trainer db SPRITE_BALL, $3 + 4, $6 + 4, $ff, $ff, $2 ; person db SPRITE_BALL, $3 + 4, $7 + 4, $ff, $ff, $3 ; person db SPRITE_BALL, $3 + 4, $8 + 4, $ff, $ff, $4 ; person db SPRITE_OAK, $2 + 4, $5 + 4, $ff, $d0, $5 ; person db SPRITE_BOOK_MAP_DEX, $1 + 4, $2 + 4, $ff, $ff, $6 ; person db SPRITE_BOOK_MAP_DEX, $1 + 4, $3 + 4, $ff, $ff, $7 ; person db SPRITE_OAK, $a + 4, $5 + 4, $ff, $d1, $8 ; person db SPRITE_GIRL, $9 + 4, $1 + 4, $fe, $1, $9 ; person db SPRITE_OAK_AIDE, $a + 4, $2 + 4, $ff, $ff, $a ; person db SPRITE_OAK_AIDE, $a + 4, $8 + 4, $ff, $ff, $b ; person ; warp-to EVENT_DISP $5, $b, $4 EVENT_DISP $5, $b, $5 ViridianMart_h: ; 0x1d462 to 0x1d46e (12 bytes) (bank=7) (id=42) db $02 ; tileset db VIRIDIAN_MART_HEIGHT, VIRIDIAN_MART_WIDTH ; dimensions (y, x) dw ViridianMartBlocks, ViridianMartTextPointers, ViridianMartScript ; blocks, texts, scripts db $00 ; connections dw ViridianMartObject ; objects ViridianMartScript: ; 1d46e (7:546e) call ViridianMartScript_1d47d call EnableAutoTextBoxDrawing ld hl, ViridianMartScriptPointers ld a, [W_VIRIDIANMARKETCURSCRIPT] jp CallFunctionInTable ViridianMartScript_1d47d: ; 1d47d (7:547d) ld a, [$d74e] bit 0, a jr nz, .asm_1d489 ; 0x1d482 $5 ld hl, ViridianMartTextPointers ; $54e0 jr .asm_1d48c ; 0x1d487 $3 .asm_1d489 ld hl, ViridianMartTextPointers + $a ; $54ea ; starts at ViridianMartText6 .asm_1d48c ld a, l ld [W_MAPTEXTPTR], a ld a, h ld [W_MAPTEXTPTR+1], a ret ViridianMartScriptPointers: ; 1d495 (7:5495) dw ViridianMartScript0 dw ViridianMartScript1 dw ViridianMartScript2 ViridianMartScript0: ; 1d49b (7:549b) call UpdateSprites ld a, $4 ld [$ff00+$8c], a call DisplayTextID ld hl, $ccd3 ld de, RLEMovement1d4bb call DecodeRLEList dec a ld [$cd38], a call Func_3486 ld a, $1 ld [W_VIRIDIANMARKETCURSCRIPT], a ret RLEMovement1d4bb: ; 1d4bb (7:54bb) db $20, $01 db $40, $02 db $ff ViridianMartScript1: ; 1d4c0 (7:54c0) ld a, [$cd38] and a ret nz call Delay3 ld a, $5 ld [$ff00+$8c], a call DisplayTextID ld bc, (OAKS_PARCEL << 8) + 1 call GiveItem ld hl, $d74e set 1, [hl] ld a, $2 ld [W_VIRIDIANMARKETCURSCRIPT], a ; fallthrough ViridianMartScript2: ; 1d4df (7:54df) ret ViridianMartTextPointers: ; 1d4e0 (7:54e0) dw ViridianMartText1 dw ViridianMartText2 dw ViridianMartText3 dw ViridianMartText4 dw ViridianMartText5 dw ViridianMartText6 dw ViridianMartText2 dw ViridianMartText3 ViridianMartText1: ; 1d4f0 (7:54f0) TX_FAR _ViridianMartText1 db "@" ViridianMartText4: ; 1d4f5 (7:54f5) TX_FAR _ViridianMartText4 db "@" ViridianMartText5: ; 1d4fa (7:54fa) TX_FAR ViridianMartParcelQuestText db $11 db "@" ViridianMartText2: ; 1d500 (7:5500) TX_FAR _ViridianMartText2 db "@" ViridianMartText3: ; 1d505 (7:5505) TX_FAR _ViridianMartText3 db "@" ViridianMartObject: ; 0x1d50a (size=38) db $0 ; border tile db $2 ; warps db $7, $3, $1, $ff db $7, $4, $1, $ff db $0 ; signs db $3 ; people db SPRITE_MART_GUY, $5 + 4, $0 + 4, $ff, $d3, $1 ; person db SPRITE_BUG_CATCHER, $5 + 4, $5 + 4, $fe, $1, $2 ; person db SPRITE_BLACK_HAIR_BOY_1, $3 + 4, $3 + 4, $ff, $ff, $3 ; person ; warp-to EVENT_DISP $4, $7, $3 EVENT_DISP $4, $7, $4 ViridianMartBlocks: ; 1d530 (7:5530) INCBIN "maps/viridianmart.blk" School_h: ; 0x1d540 to 0x1d54c (12 bytes) (bank=7) (id=43) db $08 ; tileset db VIRIDIAN_SCHOOL_HEIGHT, VIRIDIAN_SCHOOL_WIDTH ; dimensions (y, x) dw SchoolBlocks, SchoolTextPointers, SchoolScript ; blocks, texts, scripts db $00 ; connections dw SchoolObject ; objects SchoolScript: ; 1d54c (7:554c) jp EnableAutoTextBoxDrawing SchoolTextPointers: ; 1d54f (7:554f) dw SchoolText1 dw SchoolText2 SchoolText1: ; 1d553 (7:5553) TX_FAR _SchoolText1 db "@" SchoolText2: ; 1d558 (7:5558) TX_FAR _SchoolText2 db "@" SchoolObject: ; 0x1d55d (size=32) db $a ; border tile db $2 ; warps db $7, $2, $2, $ff db $7, $3, $2, $ff db $0 ; signs db $2 ; people db SPRITE_BRUNETTE_GIRL, $5 + 4, $3 + 4, $ff, $d1, $1 ; person db SPRITE_LASS, $1 + 4, $4 + 4, $ff, $d0, $2 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 ViridianHouse_h: ; 0x1d57d to 0x1d589 (12 bytes) (bank=7) (id=44) db $08 ; tileset db VIRIDIAN_HOUSE_HEIGHT, VIRIDIAN_HOUSE_WIDTH ; dimensions (y, x) dw ViridianHouseBlocks, ViridianHouseTextPointers, ViridianHouseScript ; blocks, texts, scripts db $00 ; connections dw ViridianHouseObject ; objects db $0 ViridianHouseScript: ; 1d58a (7:558a) jp EnableAutoTextBoxDrawing ViridianHouseTextPointers: ; 1d58d (7:558d) dw ViridianHouseText1 dw ViridianHouseText2 dw ViridianHouseText3 dw ViridianHouseText4 ViridianHouseText1: ; 1d595 (7:5595) TX_FAR _ViridianHouseText1 db "@" ViridianHouseText2: ; 1d59a (7:559a) TX_FAR _ViridianHouseText2 db "@" ViridianHouseText3: ; 1d59f (7:559f) db $08 ; asm ld hl, UnnamedText_1d5b1 call PrintText ld a, SPEAROW call PlayCry call WaitForSoundToFinish jp TextScriptEnd UnnamedText_1d5b1: ; 1d5b1 (7:55b1) TX_FAR _UnnamedText_1d5b1 db "@" ViridianHouseText4: ; 1d5b6 (7:55b6) TX_FAR _ViridianHouseText4 db "@" ViridianHouseObject: ; 0x1d5bb (size=44) db $a ; border tile db $2 ; warps db $7, $2, $3, $ff db $7, $3, $3, $ff db $0 ; signs db $4 ; people db SPRITE_BALDING_GUY, $3 + 4, $5 + 4, $ff, $ff, $1 ; person db SPRITE_LITTLE_GIRL, $4 + 4, $1 + 4, $fe, $1, $2 ; person db SPRITE_BIRD, $5 + 4, $5 + 4, $fe, $2, $3 ; person db SPRITE_CLIPBOARD, $0 + 4, $4 + 4, $ff, $ff, $4 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 PewterHouse1_h: ; 0x1d5e7 to 0x1d5f3 (12 bytes) (bank=7) (id=55) db $08 ; tileset db PEWTER_HOUSE_1_HEIGHT, PEWTER_HOUSE_1_WIDTH ; dimensions (y, x) dw PewterHouse1Blocks, PewterHouse1TextPointers, PewterHouse1Script ; blocks, texts, scripts db $00 ; connections dw PewterHouse1Object ; objects PewterHouse1Script: ; 1d5f3 (7:55f3) jp EnableAutoTextBoxDrawing PewterHouse1TextPointers: ; 1d5f6 (7:55f6) dw PewterHouse1Text1 dw PewterHouse1Text2 dw PewterHouse1Text3 PewterHouse1Text1: ; 1d5fc (7:55fc) TX_FAR _PewterHouse1Text1 db $08 ; asm ld a, NIDORAN_M call PlayCry call WaitForSoundToFinish jp TextScriptEnd PewterHouse1Text2: ; 1d60c (7:560c) TX_FAR _PewterHouse1Text2 db "@" PewterHouse1Text3: ; 1d611 (7:5611) TX_FAR _PewterHouse1Text3 db "@" PewterHouse1Object: ; 0x1d616 (size=38) db $a ; border tile db $2 ; warps db $7, $2, $3, $ff db $7, $3, $3, $ff db $0 ; signs db $3 ; people db SPRITE_SLOWBRO, $5 + 4, $4 + 4, $ff, $d2, $1 ; person db SPRITE_YOUNG_BOY, $5 + 4, $3 + 4, $ff, $d3, $2 ; person db SPRITE_FAT_BALD_GUY, $2 + 4, $1 + 4, $ff, $ff, $3 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 PewterHouse2_h: ; 0x1d63c to 0x1d648 (12 bytes) (bank=7) (id=57) db $08 ; tileset db PEWTER_HOUSE_2_HEIGHT, PEWTER_HOUSE_2_WIDTH ; dimensions (y, x) dw PewterHouse2Blocks, PewterHouse2TextPointers, PewterHouse2Script ; blocks, texts, scripts db $00 ; connections dw PewterHouse2Object ; objects PewterHouse2Script: ; 1d648 (7:5648) jp EnableAutoTextBoxDrawing PewterHouse2TextPointers: ; 1d64b (7:564b) dw PewterHouse2Text1 dw PewterHouse2Text2 PewterHouse2Text1: ; 1d64f (7:564f) TX_FAR _PewterHouse2Text1 db "@" PewterHouse2Text2: ; 1d654 (7:5654) TX_FAR _PewterHouse2Text2 db "@" PewterHouse2Object: ; 0x1d659 (size=32) db $a ; border tile db $2 ; warps db $7, $2, $5, $ff db $7, $3, $5, $ff db $0 ; signs db $2 ; people db SPRITE_GAMBLER, $3 + 4, $2 + 4, $ff, $d3, $1 ; person db SPRITE_BUG_CATCHER, $5 + 4, $4 + 4, $ff, $ff, $2 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 CeruleanHouseTrashed_h: ; 0x1d679 to 0x1d685 (12 bytes) (bank=7) (id=62) db $08 ; tileset db TRASHED_HOUSE_HEIGHT, TRASHED_HOUSE_WIDTH ; dimensions (y, x) dw CeruleanHouseTrashedBlocks, CeruleanHouseTrashedTextPointers, CeruleanHouseTrashedScript ; blocks, texts, scripts db $00 ; connections dw CeruleanHouseTrashedObject ; objects CeruleanHouseTrashedScript: ; 1d685 (7:5685) call EnableAutoTextBoxDrawing ret CeruleanHouseTrashedTextPointers: ; 1d689 (7:5689) dw CeruleanHouseTrashedText1 dw CeruleanHouseTrashedText2 dw CeruleanHouseTrashedText3 CeruleanHouseTrashedText1: ; 1d68f (7:568f) db $08 ; asm ld b, $e4 ld a, $1c call Predef and b jr z, .asm_f8734 ; 0x1d698 ld hl, UnnamedText_1d6b0 call PrintText jr .asm_8dfe9 ; 0x1d6a0 .asm_f8734 ; 0x1d6a2 ld hl, UnnamedText_1d6ab call PrintText .asm_8dfe9 ; 0x1d6a8 jp TextScriptEnd UnnamedText_1d6ab: ; 1d6ab (7:56ab) TX_FAR _UnnamedText_1d6ab db "@" UnnamedText_1d6b0: ; 1d6b0 (7:56b0) TX_FAR _UnnamedText_1d6b0 db "@" CeruleanHouseTrashedText2: ; 1d6b5 (7:56b5) TX_FAR _CeruleanHouseTrashedText2 db "@" CeruleanHouseTrashedText3: ; 1d6ba (7:56ba) TX_FAR _CeruleanHouseTrashedText3 db "@" CeruleanHouseTrashedObject: ; 0x1d6bf (size=43) db $a ; border tile db $3 ; warps db $7, $2, $0, $ff db $7, $3, $0, $ff db $0, $3, $7, $ff db $1 ; signs db $0, $3, $3 ; CeruleanHouseTrashedText3 db $2 ; people db SPRITE_FISHER, $1 + 4, $2 + 4, $ff, $d0, $1 ; person db SPRITE_GIRL, $6 + 4, $5 + 4, $fe, $2, $2 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 EVENT_DISP $4, $0, $3 CeruleanHouse_h: ; 0x1d6ea to 0x1d6f6 (12 bytes) (bank=7) (id=63) db $08 ; tileset db CERULEAN_HOUSE_HEIGHT, CERULEAN_HOUSE_WIDTH ; dimensions (y, x) dw CeruleanHouseBlocks, CeruleanHouseTextPointers, CeruleanHouseScript ; blocks, texts, scripts db $00 ; connections dw CeruleanHouseObject ; objects CeruleanHouseScript: ; 1d6f6 (7:56f6) jp EnableAutoTextBoxDrawing CeruleanHouseTextPointers: ; 1d6f9 (7:56f9) dw CeruleanHouseText1 dw CeruleanHouseText2 CeruleanHouseText1: ; 1d6fd (7:56fd) TX_FAR _CeruleanHouseText1 db "@" CeruleanHouseText2: ; 1d702 (7:5702) db $08 ; asm ld a, $6 ld [wWhichTrade], a ld a, $54 call Predef jp TextScriptEnd CeruleanHouseObject: ; 0x1d710 (size=32) db $a ; border tile db $2 ; warps db $7, $2, $1, $ff db $7, $3, $1, $ff db $0 ; signs db $2 ; people db SPRITE_OLD_MEDIUM_WOMAN, $4 + 4, $5 + 4, $ff, $d2, $1 ; person db SPRITE_GAMBLER, $2 + 4, $1 + 4, $ff, $ff, $2 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 BikeShop_h: ; 0x1d730 to 0x1d73c (12 bytes) (bank=7) (id=66) db $15 ; tileset db BIKE_SHOP_HEIGHT, BIKE_SHOP_WIDTH ; dimensions (y, x) dw BikeShopBlocks, BikeShopTextPointers, BikeShopScript ; blocks, texts, scripts db $00 ; connections dw BikeShopObject ; objects BikeShopScript: ; 1d73c (7:573c) jp EnableAutoTextBoxDrawing BikeShopTextPointers: ; 1d73f (7:573f) dw BikeShopText1 dw BikeShopText2 dw BikeShopText3 BikeShopText1: ; 1d745 (7:5745) db $08 ; asm ld a, [$d75f] bit 0, a jr z, .asm_260d4 ; 0x1d74b ld hl, UnnamedText_1d82f call PrintText jp .Done .asm_260d4 ; 0x1d756 ld b, BIKE_VOUCHER call IsItemInBag jr z, .asm_41190 ; 0x1d75b ld hl, UnnamedText_1d81f call PrintText ld bc, (BICYCLE << 8) | 1 call GiveItem jr nc, .BagFull ld a, BIKE_VOUCHER ldh [$db], a ld b, BANK(RemoveItemByID) ld hl, RemoveItemByID call Bankswitch ld hl, $d75f set 0, [hl] ld hl, UnnamedText_1d824 call PrintText jr .Done .BagFull ld hl, UnnamedText_1d834 call PrintText jr .Done .asm_41190 ; 0x1d78c ld hl, UnnamedText_1d810 call PrintText xor a ld [$cc26], a ld [$cc2a], a ld a, $3 ld [$cc29], a ld a, $1 ld [$cc28], a ld a, $2 ld [$cc24], a ld a, $1 ld [$cc25], a ld hl, $d730 set 6, [hl] ld hl, wTileMap ld b, $4 ld c, $f call TextBoxBorder call UpdateSprites FuncCoord 2, 2 ; $c3ca ld hl, Coord ld de, BikeShopMenuText call PlaceString FuncCoord 8, 3 ; $c3e4 ld hl, Coord ld de, BikeShopMenuPrice call PlaceString ld hl, UnnamedText_1d815 call PrintText call HandleMenuInput bit 1, a jr nz, .asm_b7579 ; 0x1d7dc ld hl, $d730 res 6, [hl] ld a, [$cc26] and a jr nz, .asm_b7579 ; 0x1d7e7 ld hl, UnnamedText_1d81a call PrintText .asm_b7579 ; 0x1d7ef ld hl, UnnamedText_1d82a call PrintText .Done jp TextScriptEnd BikeShopMenuText: ; 1d7f8 (7:57f8) db "BICYCLE" next "CANCEL@" BikeShopMenuPrice: ; 1d807 (7:5807) db "¥1000000@" UnnamedText_1d810: ; 1d810 (7:5810) TX_FAR _UnnamedText_1d810 db "@" UnnamedText_1d815: ; 1d815 (7:5815) TX_FAR _UnnamedText_1d815 db "@" UnnamedText_1d81a: ; 1d81a (7:581a) TX_FAR _UnnamedText_1d81a db "@" UnnamedText_1d81f: ; 1d81f (7:581f) TX_FAR _UnnamedText_1d81f db "@" UnnamedText_1d824: ; 1d824 (7:5824) TX_FAR _UnnamedText_1d824 ; 0x98eb2 db $11, "@" UnnamedText_1d82a: ; 1d82a (7:582a) TX_FAR _UnnamedText_1d82a db "@" UnnamedText_1d82f: ; 1d82f (7:582f) TX_FAR _UnnamedText_1d82f db "@" UnnamedText_1d834: ; 1d834 (7:5834) TX_FAR _UnnamedText_1d834 db "@" BikeShopText2: ; 1d839 (7:5839) db $08 ; asm ld hl, UnnamedText_1d843 call PrintText jp TextScriptEnd UnnamedText_1d843: ; 1d843 (7:5843) TX_FAR _UnnamedText_1d843 db "@" BikeShopText3: ; 1d848 (7:5848) db $08 ; asm ld a, [$d75f] bit 0, a ld hl, UnnamedText_1d861 jr nz, .asm_34d2d ; 0x1d851 ld hl, UnnamedText_1d85c .asm_34d2d ; 0x1d856 call PrintText jp TextScriptEnd UnnamedText_1d85c: ; 1d85c (7:585c) TX_FAR _UnnamedText_1d85c db "@" UnnamedText_1d861: ; 1d861 (7:5861) TX_FAR _UnnamedText_1d861 db "@" BikeShopObject: ; 0x1d866 (size=38) db $e ; border tile db $2 ; warps db $7, $2, $4, $ff db $7, $3, $4, $ff db $0 ; signs db $3 ; people db SPRITE_BIKE_SHOP_GUY, $2 + 4, $6 + 4, $ff, $ff, $1 ; person db SPRITE_MOM_GEISHA, $6 + 4, $5 + 4, $fe, $1, $2 ; person db SPRITE_BUG_CATCHER, $3 + 4, $1 + 4, $ff, $d1, $3 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 BikeShopBlocks: ; 1d88c (7:588c) INCBIN "maps/bikeshop.blk" LavenderHouse1_h: ; 0x1d89c to 0x1d8a8 (12 bytes) (bank=7) (id=149) db $08 ; tileset db LAVENDER_HOUSE_1_HEIGHT, LAVENDER_HOUSE_1_WIDTH ; dimensions (y, x) dw LavenderHouse1Blocks, LavenderHouse1TextPointers, LavenderHouse1Script ; blocks, texts, scripts db $00 ; connections dw LavenderHouse1Object ; objects LavenderHouse1Script: ; 1d8a8 (7:58a8) call EnableAutoTextBoxDrawing ret LavenderHouse1TextPointers: ; 1d8ac (7:58ac) dw LavenderHouse1Text1 dw LavenderHouse1Text2 dw LavenderHouse1Text3 dw LavenderHouse1Text4 dw LavenderHouse1Text5 dw LavenderHouse1Text6 LavenderHouse1Text1: ; 1d8b8 (7:58b8) db $08 ; asm ld a, [$d7e0] bit 7, a jr nz, .asm_72e5d ; 0x1d8be ld hl, UnnamedText_1d8d1 call PrintText jr .asm_6957f ; 0x1d8c6 .asm_72e5d ; 0x1d8c8 ld hl, UnnamedText_1d8d6 call PrintText .asm_6957f ; 0x1d8ce jp TextScriptEnd UnnamedText_1d8d1: ; 1d8d1 (7:58d1) TX_FAR _UnnamedText_1d8d1 db "@" UnnamedText_1d8d6: ; 1d8d6 (7:58d6) TX_FAR _UnnamedText_1d8d6 db "@" LavenderHouse1Text2: ; 1d8db (7:58db) db $08 ; asm ld a, [$d7e0] bit 7, a jr nz, .asm_06470 ; 0x1d8e1 ld hl, UnnamedText_1d8f4 call PrintText jr .asm_3d208 ; 0x1d8e9 .asm_06470 ; 0x1d8eb ld hl, UnnamedText_1d8f9 call PrintText .asm_3d208 ; 0x1d8f1 jp TextScriptEnd UnnamedText_1d8f4: ; 1d8f4 (7:58f4) TX_FAR _UnnamedText_1d8f4 db "@" UnnamedText_1d8f9: ; 1d8f9 (7:58f9) TX_FAR _UnnamedText_1d8f9 db "@" LavenderHouse1Text3: ; 1d8fe (7:58fe) TX_FAR _LavenderHouse1Text3 db $8 ld a, PSYDUCK call PlayCry jp TextScriptEnd LavenderHouse1Text4: ; 1d90b (7:590b) TX_FAR _LavenderHouse1Text4 db $8 ld a, NIDORINO call PlayCry jp TextScriptEnd LavenderHouse1Text5: ; 1d918 (7:5918) db $08 ; asm ld a, [$d76c] bit 0, a jr nz, .asm_15ac2 ; 0x1d91e ld hl, UnnamedText_1d94c call PrintText ld bc, (POKE_FLUTE << 8) | 1 call GiveItem jr nc, .BagFull ld hl, ReceivedFluteText call PrintText ld hl, $d76c set 0, [hl] jr .asm_da749 ; 0x1d939 .BagFull ld hl, FluteNoRoomText call PrintText jr .asm_da749 ; 0x1d941 .asm_15ac2 ; 0x1d943 ld hl, MrFujiAfterFluteText call PrintText .asm_da749 ; 0x1d949 jp TextScriptEnd UnnamedText_1d94c: ; 1d94c (7:594c) TX_FAR _UnnamedText_1d94c db "@" ReceivedFluteText: ; 1d951 (7:5951) TX_FAR _ReceivedFluteText ; 0x99ffb db $11 TX_FAR _FluteExplanationText ; 0x9a011 db "@" FluteNoRoomText: ; 1d95b (7:595b) TX_FAR _FluteNoRoomText db "@" MrFujiAfterFluteText: ; 1d960 (7:5960) TX_FAR _MrFujiAfterFluteText db "@" LavenderHouse1Text6: ; 1d965 (7:5965) TX_FAR _LavenderHouse1Text6 db "@" LavenderHouse1Object: ; 0x1d96a (size=56) db $a ; border tile db $2 ; warps db $7, $2, $2, $ff db $7, $3, $2, $ff db $0 ; signs db $6 ; people db SPRITE_BLACK_HAIR_BOY_2, $5 + 4, $3 + 4, $ff, $ff, $1 ; person db SPRITE_LITTLE_GIRL, $3 + 4, $6 + 4, $ff, $d0, $2 ; person db SPRITE_SLOWBRO, $4 + 4, $6 + 4, $ff, $d1, $3 ; person db SPRITE_SLOWBRO, $3 + 4, $1 + 4, $ff, $ff, $4 ; person db SPRITE_MR_FUJI, $1 + 4, $3 + 4, $ff, $ff, $5 ; person db SPRITE_BOOK_MAP_DEX, $3 + 4, $3 + 4, $ff, $ff, $6 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 LavenderHouse2_h: ; 0x1d9a2 to 0x1d9ae (12 bytes) (bank=7) (id=151) db $08 ; tileset db LAVENDER_HOUSE_2_HEIGHT, LAVENDER_HOUSE_2_WIDTH ; dimensions (y, x) dw LavenderHouse2Blocks, LavenderHouse2TextPointers, LavenderHouse2Script ; blocks, texts, scripts db $00 ; connections dw LavenderHouse2Object ; objects LavenderHouse2Script: ; 1d9ae (7:59ae) call EnableAutoTextBoxDrawing ret LavenderHouse2TextPointers: ; 1d9b2 (7:59b2) dw LavenderHouse2Text1 dw LavenderHouse2Text2 LavenderHouse2Text1: ; 1d9b6 (7:59b6) TX_FAR _LavenderHouse2Text1 db $8 ld a, CUBONE call PlayCry jp TextScriptEnd LavenderHouse2Text2: ; 1d9c3 (7:59c3) db $08 ; asm ld a, [$d7e0] bit 7, a jr nz, .asm_65711 ; 0x1d9c9 ld hl, UnnamedText_1d9dc call PrintText jr .asm_64be1 ; 0x1d9d1 .asm_65711 ; 0x1d9d3 ld hl, UnnamedText_1d9e1 call PrintText .asm_64be1 ; 0x1d9d9 jp TextScriptEnd UnnamedText_1d9dc: ; 1d9dc (7:59dc) TX_FAR _UnnamedText_1d9dc db "@" UnnamedText_1d9e1: ; 1d9e1 (7:59e1) TX_FAR _UnnamedText_1d9e1 db "@" LavenderHouse2Object: ; 0x1d9e6 (size=32) db $a ; border tile db $2 ; warps db $7, $2, $4, $ff db $7, $3, $4, $ff db $0 ; signs db $2 ; people db SPRITE_SLOWBRO, $5 + 4, $3 + 4, $ff, $d1, $1 ; person db SPRITE_BRUNETTE_GIRL, $4 + 4, $2 + 4, $ff, $d3, $2 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 NameRater_h: ; 0x1da06 to 0x1da12 (12 bytes) (bank=7) (id=229) db $08 ; tileset db NAME_RATERS_HOUSE_HEIGHT, NAME_RATERS_HOUSE_WIDTH ; dimensions (y, x) dw NameRaterBlocks, NameRaterTextPointers, NameRaterScript ; blocks, texts, scripts db $00 ; connections dw NameRaterObject ; objects NameRaterScript: ; 1da12 (7:5a12) jp EnableAutoTextBoxDrawing Func_1da15: ; 1da15 (7:5a15) call PrintText call YesNoChoice ld a, [$cc26] and a ret Func_1da20: ; 1da20 (7:5a20) ld hl, W_PARTYMON1OT ld bc, $000b ld a, [wWhichPokemon] call AddNTimes ld de, W_PLAYERNAME ld c, $b call .asm_1da47 jr c, .asm_1da52 ; 0x1da34 $1c ld hl, $d177 ld bc, $002c ld a, [wWhichPokemon] call AddNTimes ld de, $d359 ld c, $2 .asm_1da47 ld a, [de] cp [hl] jr nz, .asm_1da52 ; 0x1da49 $7 inc hl inc de dec c jr nz, .asm_1da47 ; 0x1da4e $f7 and a ret .asm_1da52 scf ret NameRaterTextPointers: ; 1da54 (7:5a54) dw NameRaterText1 NameRaterText1: ; 1da56 (7:5a56) db $8 call SaveScreenTilesToBuffer2 ld hl, UnnamedText_1dab3 call Func_1da15 jr nz, .asm_1daae ; 0x1da60 $4c ld hl, UnnamedText_1dab8 call PrintText xor a ld [$d07d], a ld [$cfcb], a ld [$cc35], a call DisplayPartyMenu push af call GBPalWhiteOutWithDelay3 call Func_3dbe call LoadGBPal pop af jr c, .asm_1daae ; 0x1da80 $2c call GetPartyMonName2 call Func_1da20 ld hl, UnnamedText_1dad1 jr c, .asm_1daa8 ; 0x1da8b $1b ld hl, UnnamedText_1dabd call Func_1da15 jr nz, .asm_1daae ; 0x1da93 $19 ld hl, UnnamedText_1dac2 call PrintText ld b, BANK(Func_655c) ld hl, Func_655c call Bankswitch jr c, .asm_1daae ; 0x1daa3 $9 ld hl, UnnamedText_1dac7 .asm_1daa8 call PrintText jp TextScriptEnd .asm_1daae ld hl, UnnamedText_1dacc jr .asm_1daa8 ; 0x1dab1 $f5 UnnamedText_1dab3: ; 1dab3 (7:5ab3) TX_FAR _UnnamedText_1dab3 db "@" UnnamedText_1dab8: ; 1dab8 (7:5ab8) TX_FAR _UnnamedText_1dab8 db "@" UnnamedText_1dabd: ; 1dabd (7:5abd) TX_FAR _UnnamedText_1dabd db "@" UnnamedText_1dac2: ; 1dac2 (7:5ac2) TX_FAR _UnnamedText_1dac2 db "@" UnnamedText_1dac7: ; 1dac7 (7:5ac7) TX_FAR _UnnamedText_1dac7 db "@" UnnamedText_1dacc: ; 1dacc (7:5acc) TX_FAR _UnnamedText_1dacc db "@" UnnamedText_1dad1: ; 1dad1 (7:5ad1) TX_FAR _UnnamedText_1dad1 db "@" NameRaterObject: ; 0x1dad6 (size=26) db $a ; border tile db $2 ; warps db $7, $2, $5, $ff db $7, $3, $5, $ff db $0 ; signs db $1 ; people db SPRITE_MR_MASTERBALL, $3 + 4, $5 + 4, $ff, $d2, $1 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 VermilionHouse1_h: ; 0x1daf0 to 0x1dafc (12 bytes) (bank=7) (id=93) db $08 ; tileset db VERMILION_HOUSE_1_HEIGHT, VERMILION_HOUSE_1_WIDTH ; dimensions (y, x) dw VermilionHouse1Blocks, VermilionHouse1TextPointers, VermilionHouse1Script ; blocks, texts, scripts db $00 ; connections dw VermilionHouse1Object ; objects VermilionHouse1Script: ; 1dafc (7:5afc) call EnableAutoTextBoxDrawing ret VermilionHouse1TextPointers: ; 1db00 (7:5b00) dw VermilionHouse1Text1 dw VermilionHouse1Text2 dw VermilionHouse1Text3 VermilionHouse1Text1: ; 1db06 (7:5b06) TX_FAR _VermilionHouse1Text1 db "@" VermilionHouse1Text2: ; 1db0b (7:5b0b) TX_FAR _VermilionHouse1Text2 db $08 ; asm ld a, PIDGEY call PlayCry call WaitForSoundToFinish jp TextScriptEnd VermilionHouse1Text3: ; 1db1b (7:5b1b) TX_FAR _VermilionHouse1Text3 db "@" VermilionHouse1Object: ; 0x1db20 (size=38) db $a ; border tile db $2 ; warps db $7, $2, $4, $ff db $7, $3, $4, $ff db $0 ; signs db $3 ; people db SPRITE_BUG_CATCHER, $3 + 4, $5 + 4, $ff, $d2, $1 ; person db SPRITE_BIRD, $5 + 4, $3 + 4, $fe, $2, $2 ; person db SPRITE_PAPER_SHEET, $3 + 4, $4 + 4, $ff, $ff, $3 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 VermilionDock_h: ; 0x1db46 to 0x1db52 (12 bytes) (bank=7) (id=94) db $0e ; tileset db VERMILION_DOCK_HEIGHT, VERMILION_DOCK_WIDTH ; dimensions (y, x) dw VermilionDockBlocks, VermilionDockTextPointers, VermilionDockScript ; blocks, texts, scripts db $00 ; connections dw VermilionDockObject ; objects VermilionDockScript: ; 1db52 (7:5b52) call EnableAutoTextBoxDrawing ld hl, $d803 bit 4, [hl] jr nz, .asm_1db8d ; 0x1db5a $31 bit 0, [hl] ret z ld a, [$d42f] cp $1 ret nz bit 2, [hl] jp z, VermilionDock_1db9b set 4, [hl] call Delay3 ld hl, $d730 set 7, [hl] ld hl, $ccd3 ld a, $40 ld [hli], a ld [hli], a ld [hl], a ld a, $3 ld [$cd38], a xor a ld [$c206], a ld [$cd3b], a dec a ld [wJoypadForbiddenButtonsMask], a ret .asm_1db8d bit 5, [hl] ret nz ld a, [$cd38] and a ret nz ld [wJoypadForbiddenButtonsMask], a set 5, [hl] ret VermilionDock_1db9b: ; 1db9b (7:5b9b) set 2, [hl] ld a, $ff ld [wJoypadForbiddenButtonsMask], a ld [$c0ee], a call PlaySound ld c, BANK(Music_Surfing) ld a, MUSIC_SURFING call PlayMusic ld b, BANK(Func_79fc0) ld hl, Func_79fc0 call Bankswitch xor a ld [$c102], a ld c, $78 call DelayFrames ld b, $9c call CopyScreenTileBufferToVRAM FuncCoord 0, 10 ; $c468 ld hl, Coord ld bc, $0078 ld a, $14 call FillMemory ld a, $1 ld [$ff00+$ba], a call Delay3 xor a ld [$ff00+$ba], a ld [$cd3d], a ld [$ff00+$49], a ld a, $58 ld [$cd3e], a ld hl, $d526 ld c, [hl] inc hl ld b, [hl] push bc push hl ld a, $a9 call PlaySoundWaitForCurrent ld a, $ff ld [$cfcb], a ld d, $0 ld e, $8 .asm_1dbfa ld hl, $0002 add hl, bc ld a, l ld [$d526], a ld a, h ld [$d527], a push hl push de call ScheduleEastColumnRedraw call VermilionDock_1dc59 pop de ld b, $10 .asm_1dc11 call VermilionDock_1dc42 ld c, $8 .asm_1dc16 call VermilionDock_1dc7c dec c jr nz, .asm_1dc16 ; 0x1dc1a $fa inc d dec b jr nz, .asm_1dc11 ; 0x1dc1e $f1 pop bc dec e jr nz, .asm_1dbfa ; 0x1dc22 $d6 xor a ld [$ff00+$4a], a ld [$ff00+$b0], a call VermilionDock_1dc94 ld a, $90 ld [$ff00+$b0], a ld a, $1 ld [$cfcb], a pop hl pop bc ld [hl], b dec hl ld [hl], c call LoadPlayerSpriteGraphics ld hl, $d3ae dec [hl] ret VermilionDock_1dc42: ; 1dc42 (7:5c42) push bc push de ld hl, $c311 ld a, [$cd3d] swap a ld c, a ld de, $0004 .asm_1dc50 inc [hl] inc [hl] add hl, de dec c jr nz, .asm_1dc50 ; 0x1dc54 $fa pop de pop bc ret VermilionDock_1dc59: ; 1dc59 (7:5c59) ld a, [$cd3e] sub $10 ld [$cd3e], a ld c, a ld b, $64 ld a, [$cd3d] inc a ld [$cd3d], a ld a, $1 ld de, VermilionDockOAMBlock call WriteOAMBlock ret VermilionDockOAMBlock: ; 1dc74 (7:5c74) db $fc, $10 db $fd, $10 db $fe, $10 db $ff, $10 VermilionDock_1dc7c: ; 1dc7c (7:5c7c) ld h, d ld l, $50 call .asm_1dc86 ld h, $0 ld l, $80 .asm_1dc86 ld a, [$ff00+$44] cp l jr nz, .asm_1dc86 ; 0x1dc89 $fb ld a, h ld [$ff00+$43], a .asm_1dc8e ld a, [$ff00+$44] cp h jr z, .asm_1dc8e ; 0x1dc91 $fb ret VermilionDock_1dc94: ; 1dc94 (7:5c94) ld hl, $cc5b ld bc, $00b4 ld a, $14 call FillMemory ld hl, $9940 ld de, $cc5b ld bc, $000c call CopyVideoData ld hl, $c754 ld a, $d ld [hli], a ld [hli], a ld [hli], a ld [hl], a ld a, $a9 call PlaySound ld c, $78 call DelayFrames ret VermilionDockTextPointers: ; 1dcbf (7:5cbf) dw VermilionDockText1 VermilionDockText1: ; 1dcc1 (7:5cc1) TX_FAR _VermilionDockText1 db "@" VermilionDockObject: ; 0x1dcc6 (size=20) db $f ; border tile db $2 ; warps db $0, $e, $5, $ff db $2, $e, $1, SS_ANNE_1 db $0 ; signs db $0 ; people ; warp-to EVENT_DISP $e, $0, $e EVENT_DISP $e, $2, $e ; SS_ANNE_1 VermilionDockBlocks: ; 1dcda (7:5cda) INCBIN "maps/vermiliondock.blk" CeladonMansion5_h: ; 0x1dd2e to 0x1dd3a (12 bytes) (bank=7) (id=132) db $08 ; tileset db CELADON_MANSION_5_HEIGHT, CELADON_MANSION_5_WIDTH ; dimensions (y, x) dw CeladonMansion5Blocks, CeladonMansion5TextPointers, CeladonMansion5Script ; blocks, texts, scripts db $00 ; connections dw CeladonMansion5Object ; objects CeladonMansion5Script: ; 1dd3a (7:5d3a) jp EnableAutoTextBoxDrawing CeladonMansion5TextPointers: ; 1dd3d (7:5d3d) dw CeladonMansion5Text1 dw CeladonMansion5Text2 CeladonMansion5Text1: ; 1dd41 (7:5d41) TX_FAR _CeladonMansion5Text1 db "@" CeladonMansion5Text2: ; 1dd46 (7:5d46) db $08 ; asm ld bc,(EEVEE << 8) | 25 call GivePokemon jr nc, .asm_24365 ; 0x1dd4d ld a, $45 ld [$cc4d], a ld a, $11 call Predef .asm_24365 ; 0x1dd59 jp TextScriptEnd CeladonMansion5Object: ; 0x1dd5c (size=32) db $a ; border tile db $2 ; warps db $7, $2, $2, CELADON_MANSION_4 db $7, $3, $2, CELADON_MANSION_4 db $0 ; signs db $2 ; people db SPRITE_HIKER, $2 + 4, $2 + 4, $ff, $d0, $1 ; person db SPRITE_BALL, $3 + 4, $4 + 4, $ff, $ff, $2 ; person ; warp-to EVENT_DISP $4, $7, $2 ; CELADON_MANSION_4 EVENT_DISP $4, $7, $3 ; CELADON_MANSION_4 FuchsiaMart_h: ; 0x1dd7c to 0x1dd88 (12 bytes) (bank=7) (id=152) db $02 ; tileset db FUCHSIA_MART_HEIGHT, FUCHSIA_MART_WIDTH ; dimensions (y, x) dw FuchsiaMartBlocks, FuchsiaMartTextPointers, FuchsiaMartScript ; blocks, texts, scripts db $00 ; connections dw FuchsiaMartObject ; objects FuchsiaMartScript: ; 1dd88 (7:5d88) jp EnableAutoTextBoxDrawing FuchsiaMartTextPointers: ; 1dd8b (7:5d8b) dw FuchsiaMartText1 dw FuchsiaMartText2 dw FuchsiaMartText3 FuchsiaMartText2: ; 1dd91 (7:5d91) TX_FAR _FuchsiaMartText2 db "@" FuchsiaMartText3: ; 1dd96 (7:5d96) TX_FAR _FuchsiaMartText3 db "@" FuchsiaMartObject: ; 0x1dd9b (size=38) db $0 ; border tile db $2 ; warps db $7, $3, $0, $ff db $7, $4, $0, $ff db $0 ; signs db $3 ; people db SPRITE_MART_GUY, $5 + 4, $0 + 4, $ff, $d3, $1 ; person db SPRITE_FAT_BALD_GUY, $2 + 4, $4 + 4, $ff, $ff, $2 ; person db SPRITE_LASS, $5 + 4, $6 + 4, $fe, $1, $3 ; person ; warp-to EVENT_DISP $4, $7, $3 EVENT_DISP $4, $7, $4 FuchsiaMartBlocks: ; 1ddc1 (7:5dc1) INCBIN "maps/fuchsiamart.blk" SaffronHouse1_h: ; 0x1ddd1 to 0x1dddd (12 bytes) (bank=7) (id=179) db $08 ; tileset db SAFFRON_HOUSE_1_HEIGHT, SAFFRON_HOUSE_1_WIDTH ; dimensions (y, x) dw SaffronHouse1Blocks, SaffronHouse1TextPointers, SaffronHouse1Script ; blocks, texts, scripts db $00 ; connections dw SaffronHouse1Object ; objects SaffronHouse1Script: ; 1dddd (7:5ddd) jp EnableAutoTextBoxDrawing SaffronHouse1TextPointers: ; 1dde0 (7:5de0) dw SaffronHouse1Text1 dw SaffronHouse1Text2 dw SaffronHouse1Text3 dw SaffronHouse1Text4 SaffronHouse1Text1: ; 1dde8 (7:5de8) TX_FAR _SaffronHouse1Text1 db "@" SaffronHouse1Text2: ; 1dded (7:5ded) TX_FAR _SaffronHouse1Text2 db $8 ld a, PIDGEY call PlayCry jp TextScriptEnd SaffronHouse1Text3: ; 1ddfa (7:5dfa) TX_FAR _SaffronHouse1Text3 db "@" SaffronHouse1Text4: ; 1ddff (7:5dff) TX_FAR _SaffronHouse1Text4 db "@" SaffronHouse1Object: ; 0x1de04 (size=44) db $a ; border tile db $2 ; warps db $7, $2, $3, $ff db $7, $3, $3, $ff db $0 ; signs db $4 ; people db SPRITE_BRUNETTE_GIRL, $3 + 4, $2 + 4, $ff, $d3, $1 ; person db SPRITE_BIRD, $4 + 4, $0 + 4, $fe, $1, $2 ; person db SPRITE_BUG_CATCHER, $1 + 4, $4 + 4, $ff, $d0, $3 ; person db SPRITE_PAPER_SHEET, $3 + 4, $3 + 4, $ff, $ff, $4 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 SaffronHouse2_h: ; 0x1de30 to 0x1de3c (12 bytes) (bank=7) (id=183) db $08 ; tileset db SAFFRON_HOUSE_2_HEIGHT, SAFFRON_HOUSE_2_WIDTH ; dimensions (y, x) dw SaffronHouse2Blocks, SaffronHouse2TextPointers, SaffronHouse2Script ; blocks, texts, scripts db $00 ; connections dw SaffronHouse2Object ; objects SaffronHouse2Script: ; 1de3c (7:5e3c) jp EnableAutoTextBoxDrawing SaffronHouse2TextPointers: ; 1de3f (7:5e3f) dw SaffronHouse2Text1 SaffronHouse2Text1: ; 1de41 (7:5e41) db $08 ; asm ld a, [$d7bd] bit 0, a jr nz, .asm_9e72b ; 0x1de47 ld hl, TM29PreReceiveText call PrintText ld bc,(TM_29 << 8) | 1 call GiveItem jr nc, .BagFull ld hl, ReceivedTM29Text call PrintText ld hl, $d7bd set 0, [hl] jr .asm_fe4e1 ; 0x1de62 .BagFull ld hl, TM29NoRoomText call PrintText jr .asm_fe4e1 ; 0x1de6a .asm_9e72b ; 0x1de6c ld hl, TM29ExplanationText call PrintText .asm_fe4e1 ; 0x1de72 jp TextScriptEnd TM29PreReceiveText: ; 1de75 (7:5e75) TX_FAR _TM29PreReceiveText db "@" ReceivedTM29Text: ; 1de7a (7:5e7a) TX_FAR _ReceivedTM29Text ; 0xa252a db $0B, "@" TM29ExplanationText: ; 1de80 (7:5e80) TX_FAR _TM29ExplanationText db "@" TM29NoRoomText: ; 1de85 (7:5e85) TX_FAR _TM29NoRoomText db "@" SaffronHouse2Object: ; 0x1de8a (size=26) db $a ; border tile db $2 ; warps db $7, $2, $7, $ff db $7, $3, $7, $ff db $0 ; signs db $1 ; people db SPRITE_FISHER, $3 + 4, $5 + 4, $ff, $d2, $1 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 DiglettsCaveRoute2_h: ; 0x1dea4 to 0x1deb0 (12 bytes) (bank=7) (id=46) db $11 ; tileset db DIGLETTS_CAVE_EXIT_HEIGHT, DIGLETTS_CAVE_EXIT_WIDTH ; dimensions (y, x) dw DiglettsCaveRoute2Blocks, DiglettsCaveRoute2TextPointers, DiglettsCaveRoute2Script ; blocks, texts, scripts db $00 ; connections dw DiglettsCaveRoute2Object ; objects DiglettsCaveRoute2Script: ; 1deb0 (7:5eb0) ld a, $d ld [$d365], a jp EnableAutoTextBoxDrawing DiglettsCaveRoute2TextPointers: ; 1deb8 (7:5eb8) dw DiglettsCaveRoute2Text1 DiglettsCaveRoute2Text1: ; 1deba (7:5eba) TX_FAR _DiglettsCaveRoute2Text1 db "@" DiglettsCaveRoute2Object: ; 0x1debf (size=34) db $7d ; border tile db $3 ; warps db $7, $2, $0, $ff db $7, $3, $0, $ff db $4, $4, $0, DIGLETTS_CAVE db $0 ; signs db $1 ; people db SPRITE_FISHER, $3 + 4, $3 + 4, $ff, $ff, $1 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 EVENT_DISP $4, $4, $4 ; DIGLETTS_CAVE Route2House_h: ; 0x1dee1 to 0x1deed (12 bytes) (bank=7) (id=48) db $08 ; tileset db ROUTE_2_HOUSE_HEIGHT, ROUTE_2_HOUSE_WIDTH ; dimensions (y, x) dw Route2HouseBlocks, Route2HouseTextPointers, Route2HouseScript ; blocks, texts, scripts db $00 ; connections dw Route2HouseObject ; objects Route2HouseScript: ; 1deed (7:5eed) jp EnableAutoTextBoxDrawing Route2HouseTextPointers: ; 1def0 (7:5ef0) dw Route2HouseText1 dw Route2HouseText2 Route2HouseText1: ; 1def4 (7:5ef4) TX_FAR _Route2HouseText1 db "@" Route2HouseText2: ; 1def9 (7:5ef9) db $08 ; asm ld a, $1 ld [wWhichTrade], a ld a, $54 call Predef jp TextScriptEnd Route2HouseObject: ; 0x1df07 (size=32) db $a ; border tile db $2 ; warps db $7, $2, $2, $ff db $7, $3, $2, $ff db $0 ; signs db $2 ; people db SPRITE_OAK_AIDE, $4 + 4, $2 + 4, $ff, $d3, $1 ; person db SPRITE_GAMEBOY_KID_COPY, $1 + 4, $4 + 4, $ff, $d0, $2 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 Route5Gate_h: ; 0x1df27 to 0x1df33 (12 bytes) (bank=7) (id=70) db $0c ; tileset db ROUTE_5_GATE_HEIGHT, ROUTE_5_GATE_WIDTH ; dimensions (y, x) dw Route5GateBlocks, Route5GateTextPointers, Route5GateScript ; blocks, texts, scripts db $00 ; connections dw Route5GateObject ; objects Route5GateScript: ; 1df33 (7:5f33) call EnableAutoTextBoxDrawing ld a, [W_ROUTE5GATECURSCRIPT] ld hl, Route5GateScriptPointers jp CallFunctionInTable Route5GateScriptPointers: ; 1df3f (7:5f3f) dw Route5GateScript0 dw Route5GateScript1 Route5GateScript_1df43: ; 1df43 (7:5f43) ld a, $40 ld [$ccd3], a ld a, $1 ld [$cd38], a jp Func_3486 Route5GateScript0: ; 1df50 (7:5f50) ld a, [$d728] bit 6, a ret nz ld hl, CoordsData_1df8f call ArePlayerCoordsInArray ret nc ld a, $2 ld [$d528], a xor a ld [H_CURRENTPRESSEDBUTTONS], a ld b, BANK(RemoveGuardDrink) ld hl, RemoveGuardDrink call Bankswitch ld a, [$ff00+$db] and a jr nz, .asm_1df82 ; 0x1df70 $10 ld a, $2 ld [$ff00+$8c], a call DisplayTextID call Route5GateScript_1df43 ld a, $1 ld [W_ROUTE5GATECURSCRIPT], a ret .asm_1df82 ld a, $3 ld [$ff00+$8c], a call DisplayTextID ld hl, $d728 set 6, [hl] ret CoordsData_1df8f: ; 1df8f (7:5f8f) db 3,3 db 3,4 db $ff Route5GateScript1: ; 1df94 (7:5f94) ld a, [$cd38] and a ret nz call Delay3 xor a ld [wJoypadForbiddenButtonsMask], a ld [W_ROUTE5GATECURSCRIPT], a ret Route5GateTextPointers: ; 1dfa4 (7:5fa4) dw Route5GateText1 dw Route5GateText2 dw Route5GateText3 Route8GateText1: ; 1dfaa (7:5faa) Route7GateText1: ; 1dfaa (7:5faa) Route6GateText1: ; 1dfaa (7:5faa) Route5GateText1: ; 1dfaa (7:5faa) db $8 ld a, [$d728] bit 6, a jr nz, .asm_88856 ; 0x1dfb0 $2c ld b, BANK(RemoveGuardDrink) ld hl, RemoveGuardDrink call Bankswitch ld a, [$ff00+$db] and a jr nz, .asm_768a2 ; 0x1dfbd $11 ld hl, UnnamedText_1dfe7 call PrintText call Route5GateScript_1df43 ld a, $1 ld [W_ROUTE5GATECURSCRIPT], a jp TextScriptEnd .asm_768a2 ; 0x1dfd0 ld hl, UnnamedText_1dfec call PrintText ld hl, $d728 set 6, [hl] jp TextScriptEnd .asm_88856 ; 0x1dfde ld hl, UnnamedText_1dff6 call PrintText jp TextScriptEnd Route8GateText2: ; 1dfe7 (7:5fe7) Route7GateText2: ; 1dfe7 (7:5fe7) Route6GateText2: ; 1dfe7 (7:5fe7) Route5GateText2: ; 1dfe7 (7:5fe7) UnnamedText_1dfe7: ; 1dfe7 (7:5fe7) TX_FAR _UnnamedText_1dfe7 db "@" Route8GateText3: ; 1dfec (7:5fec) Route7GateText3: ; 1dfec (7:5fec) Route6GateText3: ; 1dfec (7:5fec) Route5GateText3: ; 1dfec (7:5fec) UnnamedText_1dfec: ; 1dfec (7:5fec) TX_FAR _UnnamedText_8aaa9 ; 0x8aaa9 db $11 TX_FAR _UnnamedText_1dff1 ; 0x8aaef db "@" UnnamedText_1dff6: ; 1dff6 (7:5ff6) TX_FAR _UnnamedText_1dff6 db "@" Route5GateObject: ; 0x1dffb (size=42) db $a ; border tile db $4 ; warps db $5, $3, $2, $ff db $5, $4, $2, $ff db $0, $3, $1, $ff db $0, $4, $0, $ff db $0 ; signs db $1 ; people db SPRITE_GUARD, $3 + 4, $1 + 4, $ff, $d3, $1 ; person ; warp-to EVENT_DISP $4, $5, $3 EVENT_DISP $4, $5, $4 EVENT_DISP $4, $0, $3 EVENT_DISP $4, $0, $4 Route5GateBlocks: ; 1e025 (7:6025) INCBIN "maps/route5gate.blk" Route6Gate_h: ; 0x1e031 to 0x1e03d (12 bytes) (bank=7) (id=73) db $0c ; tileset db ROUTE_6_GATE_HEIGHT, ROUTE_6_GATE_WIDTH ; dimensions (y, x) dw Route6GateBlocks, Route6GateTextPointers, Route6GateScript ; blocks, texts, scripts db $00 ; connections dw Route6GateObject ; objects Route6GateScript: ; 1e03d (7:603d) call EnableAutoTextBoxDrawing ld hl, Route6GateScriptPointers ld a, [W_ROUTE6GATECURSCRIPT] call CallFunctionInTable ret Route6GateScriptPointers: ; 1e04a (7:604a) dw Route6GateScript0 dw Route6GateScript1 Route6GateScript0: ; 1e04e (7:604e) ld a, [$d728] bit 6, a ret nz ld hl, CoordsData_1e08c call ArePlayerCoordsInArray ret nc ld a, $1 ld [$d528], a xor a ld [H_CURRENTPRESSEDBUTTONS], a ld b, BANK(RemoveGuardDrink) ld hl, RemoveGuardDrink call Bankswitch ld a, [$ff00+$db] and a jr nz, .asm_1e080 ; 0x1e06e $10 ld a, $2 ld [$ff00+$8c], a call DisplayTextID call Func_1e0a1 ld a, $1 ld [W_ROUTE6GATECURSCRIPT], a ret .asm_1e080 ld hl, $d728 set 6, [hl] ld a, $3 ld [$ff00+$8c], a jp DisplayTextID CoordsData_1e08c: ; 1e08c (7:608c) db $02,$03 db $02,$04,$FF Route6GateScript1: ; 1e091 (7:6091) ld a, [$cd38] and a ret nz call Delay3 xor a ld [wJoypadForbiddenButtonsMask], a ld [W_ROUTE6GATECURSCRIPT], a ret Func_1e0a1: ; 1e0a1 (7:60a1) ld hl, $d730 set 7, [hl] ld a, $80 ld [$ccd3], a ld a, $1 ld [$cd38], a xor a ld [$c206], a ld [$cd3b], a ret Route6GateTextPointers: ; 1e0b8 (7:60b8) dw Route6GateText1 dw Route6GateText2 dw Route6GateText3 Route6GateObject: ; 0x1e0be (size=42) db $a ; border tile db $4 ; warps db $5, $3, $2, $ff db $5, $4, $2, $ff db $0, $3, $1, $ff db $0, $4, $1, $ff db $0 ; signs db $1 ; people db SPRITE_GUARD, $2 + 4, $6 + 4, $ff, $d2, $1 ; person ; warp-to EVENT_DISP $4, $5, $3 EVENT_DISP $4, $5, $4 EVENT_DISP $4, $0, $3 EVENT_DISP $4, $0, $4 Route6GateBlocks: ; 1e0e8 (7:60e8) INCBIN "maps/route6gate.blk" Route7Gate_h: ; 0x1e0f4 to 0x1e100 (12 bytes) (bank=7) (id=76) db $0c ; tileset db ROUTE_7_GATE_HEIGHT, ROUTE_7_GATE_WIDTH ; dimensions (y, x) dw Route7GateBlocks, Route7GateTextPointers, Route7GateScript ; blocks, texts, scripts db $00 ; connections dw Route7GateObject ; objects Route7GateScript: ; 1e100 (7:6100) call EnableAutoTextBoxDrawing ld a, [W_ROUTE7GATECURSCRIPT] ld hl, Route7GateScriptPointers call CallFunctionInTable ret Route7GateScriptPointers: ; 1e10d (7:610d) dw Route7GateScript0 dw Route7GateScript1 Route7GateScript_1e111: ; 1e111 (7:6111) ld hl, $d730 set 7, [hl] ld a, $20 ld [$ccd3], a ld a, $1 ld [$cd38], a xor a ld [$c206], a ld [$cd3b], a ret Route7GateScript0: ; 1e128 (7:6128) ld a, [$d728] bit 6, a ret nz ld hl, CoordsData_1e167 call ArePlayerCoordsInArray ret nc ld a, $8 ld [$d528], a xor a ld [H_CURRENTPRESSEDBUTTONS], a ld b, BANK(RemoveGuardDrink) ld hl, RemoveGuardDrink call Bankswitch ld a, [$ff00+$db] and a jr nz, .asm_1e15a ; 0x1e148 $10 ld a, $2 ld [$ff00+$8c], a call DisplayTextID call Route7GateScript_1e111 ld a, $1 ld [W_ROUTE7GATECURSCRIPT], a ret .asm_1e15a ld a, $3 ld [$ff00+$8c], a call DisplayTextID ld hl, $d728 set 6, [hl] ret CoordsData_1e167: ; 1e167 (7:6167) db 3,3 db 4,3 db $ff Route7GateScript1: ; 1e16c (7:616c) ld a, [$cd38] and a ret nz call Delay3 xor a ld [wJoypadForbiddenButtonsMask], a ld [W_ROUTE7GATECURSCRIPT], a ld [W_CURMAPSCRIPT], a ret Route7GateTextPointers: ; 1e17f (7:617f) dw Route7GateText1 dw Route7GateText2 dw Route7GateText3 Route7GateObject: ; 0x1e185 (size=42) db $a ; border tile db $4 ; warps db $3, $0, $3, $ff db $4, $0, $3, $ff db $3, $5, $0, $ff db $4, $5, $1, $ff db $0 ; signs db $1 ; people db SPRITE_GUARD, $1 + 4, $3 + 4, $ff, $d0, $1 ; person ; warp-to EVENT_DISP $3, $3, $0 EVENT_DISP $3, $4, $0 EVENT_DISP $3, $3, $5 EVENT_DISP $3, $4, $5 Route7GateBlocks: ; 1e1af (7:61af) INCBIN "maps/route7gate.blk" Route8Gate_h: ; 0x1e1bb to 0x1e1c7 (12 bytes) (bank=7) (id=79) db $0c ; tileset db ROUTE_8_GATE_HEIGHT, ROUTE_8_GATE_WIDTH ; dimensions (y, x) dw Route8GateBlocks, Route8GateTextPointers, Route8GateScript ; blocks, texts, scripts db $00 ; connections dw Route8GateObject ; objects Route8GateScript: ; 1e1c7 (7:61c7) call EnableAutoTextBoxDrawing ld hl, Route8GateScriptPointers ld a, [W_ROUTE8GATECURSCRIPT] jp CallFunctionInTable Route8GateScriptPointers: ; 1e1d3 (7:61d3) dw Route8GateScript0 dw Route8GateScript1 Route8GateScript_1e1d7: ; 1e1d7 (7:61d7) ld hl, $d730 set 7, [hl] ld a, $10 ld [$ccd3], a ld a, $1 ld [$cd38], a xor a ld [$c206], a ld [$cd3b], a ret Route8GateScript0: ; 1e1ee (7:61ee) ld a, [$d728] bit 6, a ret nz ld hl, CoordsData_1e22c call ArePlayerCoordsInArray ret nc ld a, $2 ld [$d528], a xor a ld [H_CURRENTPRESSEDBUTTONS], a ld b, BANK(RemoveGuardDrink) ld hl, RemoveGuardDrink call Bankswitch ld a, [$ff00+$db] and a jr nz, .asm_1e220 ; 0x1e20e $10 ld a, $2 ld [$ff00+$8c], a call DisplayTextID call Route8GateScript_1e1d7 ld a, $1 ld [W_ROUTE8GATECURSCRIPT], a ret .asm_1e220 ld hl, $d728 set 6, [hl] ld a, $3 ld [$ff00+$8c], a jp DisplayTextID CoordsData_1e22c: ; 1e22c (7:622c) db 3,2 db 4,2 db $ff Route8GateScript1: ; 1e231 (7:6231) ld a, [$cd38] and a ret nz call Delay3 xor a ld [wJoypadForbiddenButtonsMask], a ld [W_ROUTE8GATECURSCRIPT], a ret Route8GateTextPointers: ; 1e241 (7:6241) dw Route8GateText1 dw Route8GateText2 dw Route8GateText3 Route8GateObject: ; 0x1e247 (size=42) db $a ; border tile db $4 ; warps db $3, $0, $0, $ff db $4, $0, $1, $ff db $3, $5, $2, $ff db $4, $5, $3, $ff db $0 ; signs db $1 ; people db SPRITE_GUARD, $1 + 4, $2 + 4, $ff, $d0, $1 ; person ; warp-to EVENT_DISP $3, $3, $0 EVENT_DISP $3, $4, $0 EVENT_DISP $3, $3, $5 EVENT_DISP $3, $4, $5 Route8GateBlocks: ; 1e271 (7:6271) INCBIN "maps/route8gate.blk" UndergroundPathEntranceRoute8_h: ; 0x1e27d to 0x1e289 (12 bytes) (bank=7) (id=80) db $0c ; tileset db PATH_ENTRANCE_ROUTE_8_HEIGHT, PATH_ENTRANCE_ROUTE_8_WIDTH ; dimensions (y, x) dw UndergroundPathEntranceRoute8Blocks, UndergroundPathEntranceRoute8TextPointers, UndergroundPathEntranceRoute8Script ; blocks, texts, scripts db $00 ; connections dw UndergroundPathEntranceRoute8Object ; objects UndergroundPathEntranceRoute8Script: ; 1e289 (7:6289) ld a, $13 ld [$d365], a jp EnableAutoTextBoxDrawing UndergroundPathEntranceRoute8TextPointers: ; 1e291 (7:6291) dw UndergroundPathEntranceRoute8Text1 UndergroundPathEntranceRoute8Text1: ; 1e293 (7:6293) TX_FAR _UndergroundPathEntRoute8Text1 db "@" UndergroundPathEntranceRoute8Object: ; 0x1e298 (size=34) db $a ; border tile db $3 ; warps db $7, $3, $4, $ff db $7, $4, $4, $ff db $4, $4, $1, UNDERGROUND_PATH_WE db $0 ; signs db $1 ; people db SPRITE_GIRL, $4 + 4, $3 + 4, $ff, $ff, $1 ; person ; warp-to EVENT_DISP $4, $7, $3 EVENT_DISP $4, $7, $4 EVENT_DISP $4, $4, $4 ; UNDERGROUND_PATH_WE PowerPlant_h: ; 0x1e2ba to 0x1e2c6 (12 bytes) (bank=7) (id=83) db $16 ; tileset db POWER_PLANT_HEIGHT, POWER_PLANT_WIDTH ; dimensions (y, x) dw PowerPlantBlocks, PowerPlantTextPointers, PowerPlantScript ; blocks, texts, scripts db $00 ; connections dw PowerPlantObject ; objects PowerPlantScript: ; 1e2c6 (7:62c6) call EnableAutoTextBoxDrawing ld hl, PowerPlantTrainerHeaders ld de, PowerPlantScriptPointers ld a, [W_POWERPLANTCURSCRIPT] call ExecuteCurMapScriptInTable ld [W_POWERPLANTCURSCRIPT], a ret PowerPlantScriptPointers: ; 1e2d9 (7:62d9) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle PowerPlantTextPointers: ; 1e2df (7:62df) dw PowerPlantText1 dw PowerPlantText2 dw PowerPlantText3 dw PowerPlantText4 dw PowerPlantText5 dw PowerPlantText6 dw PowerPlantText7 dw PowerPlantText8 dw PowerPlantText9 dw Predef5CText dw Predef5CText dw Predef5CText dw Predef5CText dw Predef5CText PowerPlantTrainerHeaders: ; 1e2fb (7:62fb) PowerPlantTrainerHeader0: ; 1e2fb (7:62fb) db 1 ; flag's bit db 0 ; view range dw $d7d3 ; flag's byte dw VoltorbBattleText ; TextBeforeBattle dw VoltorbBattleText ; TextAfterBattle dw VoltorbBattleText ; TextEndBattle dw VoltorbBattleText ; TextEndBattle PowerPlantTrainerHeader1: ; 1e307 (7:6307) db 2 ; flag's bit db 0 ; view range dw $d7d3 ; flag's byte dw VoltorbBattleText ; TextBeforeBattle dw VoltorbBattleText ; TextAfterBattle dw VoltorbBattleText ; TextEndBattle dw VoltorbBattleText ; TextEndBattle PowerPlantTrainerHeader2: ; 1e313 (7:6313) db 3 ; flag's bit db 0 ; view range dw $d7d3 ; flag's byte dw VoltorbBattleText ; TextBeforeBattle dw VoltorbBattleText ; TextAfterBattle dw VoltorbBattleText ; TextEndBattle dw VoltorbBattleText ; TextEndBattle PowerPlantTrainerHeader3: ; 1e31f (7:631f) db 4 ; flag's bit db 0 ; view range dw $d7d3 ; flag's byte dw VoltorbBattleText ; TextBeforeBattle dw VoltorbBattleText ; TextAfterBattle dw VoltorbBattleText ; TextEndBattle dw VoltorbBattleText ; TextEndBattle PowerPlantTrainerHeader4: ; 1e32b (7:632b) db 5 ; flag's bit db 0 ; view range dw $d7d3 ; flag's byte dw VoltorbBattleText ; TextBeforeBattle dw VoltorbBattleText ; TextAfterBattle dw VoltorbBattleText ; TextEndBattle dw VoltorbBattleText ; TextEndBattle PowerPlantTrainerHeader5: ; 1e337 (7:6337) db 6 ; flag's bit db 0 ; view range dw $d7d3 ; flag's byte dw VoltorbBattleText ; TextBeforeBattle dw VoltorbBattleText ; TextAfterBattle dw VoltorbBattleText ; TextEndBattle dw VoltorbBattleText ; TextEndBattle PowerPlantTrainerHeader6: ; 1e343 (7:6343) db 7 ; flag's bit db 0 ; view range dw $d7d3 ; flag's byte dw VoltorbBattleText ; TextBeforeBattle dw VoltorbBattleText ; TextAfterBattle dw VoltorbBattleText ; TextEndBattle dw VoltorbBattleText ; TextEndBattle PowerPlantTrainerHeader7: ; 1e34f (7:634f) db 8 ; flag's bit db 0 ; view range dw $d7d3 ; flag's byte dw VoltorbBattleText ; TextBeforeBattle dw VoltorbBattleText ; TextAfterBattle dw VoltorbBattleText ; TextEndBattle dw VoltorbBattleText ; TextEndBattle PowerPlantTrainerHeader8: ; 1e35b (7:635b) db 9 ; flag's bit db 0 ; view range dw $d7d3 ; flag's byte dw ZapdosBattleText ; TextBeforeBattle dw ZapdosBattleText ; TextAfterBattle dw ZapdosBattleText ; TextEndBattle dw ZapdosBattleText ; TextEndBattle db $ff asm_234cc: ; 1e368 (7:6368) call TalkToTrainer ld a, [W_CURMAPSCRIPT] ld [W_POWERPLANTCURSCRIPT], a jp TextScriptEnd PowerPlantText1: ; 1e374 (7:6374) db $8 ; asm ld hl, PowerPlantTrainerHeader0 ; $62fb jr asm_234cc ; 0x1e378 $ee PowerPlantText2: ; 1e37a (7:637a) db $8 ; asm ld hl, PowerPlantTrainerHeader1 ; $6307 jr asm_234cc ; 0x1e37e $e8 PowerPlantText3: ; 1e380 (7:6380) db $8 ; asm ld hl, PowerPlantTrainerHeader2 ; $6313 jr asm_234cc ; 0x1e384 $e2 PowerPlantText4: ; 1e386 (7:6386) db $8 ; asm ld hl, PowerPlantTrainerHeader3 ; $631f jr asm_234cc ; 0x1e38a $dc PowerPlantText5: ; 1e38c (7:638c) db $8 ; asm ld hl, PowerPlantTrainerHeader4 ; $632b jr asm_234cc ; 0x1e390 $d6 PowerPlantText6: ; 1e392 (7:6392) db $8 ; asm ld hl, PowerPlantTrainerHeader5 ; $6337 jr asm_234cc ; 0x1e396 $d0 PowerPlantText7: ; 1e398 (7:6398) db $8 ; asm ld hl, PowerPlantTrainerHeader6 ; $6343 jr asm_234cc ; 0x1e39c $ca PowerPlantText8: ; 1e39e (7:639e) db $8 ; asm ld hl, PowerPlantTrainerHeader7 ; $634f jr asm_234cc ; 0x1e3a2 $c4 PowerPlantText9: ; 1e3a4 (7:63a4) db $8 ; asm ld hl, PowerPlantTrainerHeader8 ; $635b jr asm_234cc ; 0x1e3a8 $be VoltorbBattleText: ; 1e3aa (7:63aa) TX_FAR _VoltorbBattleText ; 0x8c5e2 db "@" ZapdosBattleText: ; 1e3af (7:63af) TX_FAR _ZapdosBattleText ; 0x8c5ea db $8 ld a, ZAPDOS call PlayCry call WaitForSoundToFinish jp TextScriptEnd PowerPlantObject: ; 0x1e3bf (size=135) db $2e ; border tile db $3 ; warps db $23, $4, $3, $ff db $23, $5, $3, $ff db $b, $0, $3, $ff db $0 ; signs db $e ; people db SPRITE_BALL, $14 + 4, $9 + 4, $ff, $ff, $41, VOLTORB, 40 ; trainer db SPRITE_BALL, $12 + 4, $20 + 4, $ff, $ff, $42, VOLTORB, 40 ; trainer db SPRITE_BALL, $19 + 4, $15 + 4, $ff, $ff, $43, VOLTORB, 40 ; trainer db SPRITE_BALL, $12 + 4, $19 + 4, $ff, $ff, $44, ELECTRODE, 43 ; trainer db SPRITE_BALL, $22 + 4, $17 + 4, $ff, $ff, $45, VOLTORB, 40 ; trainer db SPRITE_BALL, $1c + 4, $1a + 4, $ff, $ff, $46, VOLTORB, 40 ; trainer db SPRITE_BALL, $e + 4, $15 + 4, $ff, $ff, $47, ELECTRODE, 43 ; trainer db SPRITE_BALL, $20 + 4, $25 + 4, $ff, $ff, $48, VOLTORB, 40 ; trainer db SPRITE_BIRD, $9 + 4, $4 + 4, $ff, $d1, $49, ZAPDOS, 50 ; trainer db SPRITE_BALL, $19 + 4, $7 + 4, $ff, $ff, $8a, CARBOS ; item db SPRITE_BALL, $3 + 4, $1c + 4, $ff, $ff, $8b, HP_UP ; item db SPRITE_BALL, $3 + 4, $22 + 4, $ff, $ff, $8c, RARE_CANDY ; item db SPRITE_BALL, $20 + 4, $1a + 4, $ff, $ff, $8d, TM_25 ; item db SPRITE_BALL, $20 + 4, $14 + 4, $ff, $ff, $8e, TM_33 ; item ; warp-to EVENT_DISP $14, $23, $4 EVENT_DISP $14, $23, $5 EVENT_DISP $14, $b, $0 PowerPlantBlocks: ; 1e446 (7:6446) INCBIN "maps/powerplant.blk" DiglettsCaveEntranceRoute11_h: ; 0x1e5ae to 0x1e5ba (12 bytes) (bank=7) (id=85) db $11 ; tileset db DIGLETTS_CAVE_ENTRANCE_HEIGHT, DIGLETTS_CAVE_ENTRANCE_WIDTH ; dimensions (y, x) dw DiglettsCaveEntranceRoute11Blocks, DiglettsCaveEntranceRoute11TextPointers, DiglettsCaveEntranceRoute11Script ; blocks, texts, scripts db $00 ; connections dw DiglettsCaveEntranceRoute11Object ; objects DiglettsCaveEntranceRoute11Script: ; 1e5ba (7:65ba) call EnableAutoTextBoxDrawing ld a, $16 ld [$d365], a ret DiglettsCaveEntranceRoute11TextPointers: ; 1e5c3 (7:65c3) dw DiglettsCaveEntranceRoute11Text1 DiglettsCaveEntranceRoute11Text1: ; 1e5c5 (7:65c5) TX_FAR _DiglettsCaveEntRoute11Text1 db "@" DiglettsCaveEntranceRoute11Object: ; 0x1e5ca (size=34) db $7d ; border tile db $3 ; warps db $7, $2, $4, $ff db $7, $3, $4, $ff db $4, $4, $1, DIGLETTS_CAVE db $0 ; signs db $1 ; people db SPRITE_GAMBLER, $3 + 4, $2 + 4, $ff, $ff, $1 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 EVENT_DISP $4, $4, $4 ; DIGLETTS_CAVE Route16House_h: ; 0x1e5ec to 0x1e5f8 (12 bytes) (bank=7) (id=188) db $08 ; tileset db ROUTE_16_HOUSE_HEIGHT, ROUTE_16_HOUSE_WIDTH ; dimensions (y, x) dw Route16HouseBlocks, Route16HouseTextPointers, Route16HouseScript ; blocks, texts, scripts db $00 ; connections dw Route16HouseObject ; objects Route16HouseScript: ; 1e5f8 (7:65f8) jp EnableAutoTextBoxDrawing Route16HouseTextPointers: ; 1e5fb (7:65fb) dw Route16HouseText1 dw Route16HouseText2 Route16HouseText1: ; 1e5ff (7:65ff) db $08 ; asm ld a, [$d7e0] bit 6, a ld hl, HM02ExplanationText jr nz, .asm_13616 ; 0x1e608 ld hl, Route16HouseText3 call PrintText ld bc, (HM_02 << 8) | 1 call GiveItem jr nc, .BagFull ld hl, $d7e0 set 6, [hl] ld hl, ReceivedHM02Text jr .asm_13616 ; 0x1e620 .BagFull ld hl, HM02NoRoomText .asm_13616 ; 0x1e625 call PrintText jp TextScriptEnd Route16HouseText3: ; 1e62b (7:662b) TX_FAR _Route16HouseText3 db "@" ReceivedHM02Text: ; 1e630 (7:6630) TX_FAR _ReceivedHM02Text ; 0x8ce66 db $11, "@" HM02ExplanationText: ; 1e636 (7:6636) TX_FAR _HM02ExplanationText db "@" HM02NoRoomText: ; 1e63b (7:663b) TX_FAR _HM02NoRoomText db "@" Route16HouseText2: ; 1e640 (7:6640) db $08 ; asm ld hl, UnnamedText_1e652 call PrintText ld a, FEAROW call PlayCry call WaitForSoundToFinish jp TextScriptEnd UnnamedText_1e652: ; 1e652 (7:6652) TX_FAR _UnnamedText_1e652 db "@" Route16HouseObject: ; 0x1e657 (size=32) db $a ; border tile db $2 ; warps db $7, $2, $8, $ff db $7, $3, $8, $ff db $0 ; signs db $2 ; people db SPRITE_BRUNETTE_GIRL, $3 + 4, $2 + 4, $ff, $d3, $1 ; person db SPRITE_BIRD, $4 + 4, $6 + 4, $fe, $0, $2 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 Route22Gate_h: ; 0x1e677 to 0x1e683 (12 bytes) (bank=7) (id=193) db $0c ; tileset db ROUTE_22_GATE_HEIGHT, ROUTE_22_GATE_WIDTH ; dimensions (y, x) dw Route22GateBlocks, Route22GateTextPointers, Route22GateScript ; blocks, texts, scripts db $00 ; connections dw Route22GateObject ; objects Route22GateScript: ; 1e683 (7:6683) call EnableAutoTextBoxDrawing ld hl, Route22GateScriptPointers ld a, [W_ROUTE22GATECURSCRIPT] call CallFunctionInTable ld a, [$d361] cp $4 ld a, $22 jr c, .asm_1e69a ; 0x1e696 $2 ld a, $21 .asm_1e69a ld [$d365], a ret Route22GateScriptPointers: ; 1e69e (7:669e) dw Route22GateScript0 dw Route22GateScript1 dw Route22GateScript2 Route22GateScript0: ; 1e6a4 (7:66a4) ld hl, Route22GateScriptCoords call ArePlayerCoordsInArray ret nc xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, $1 ld [$ff00+$8c], a jp DisplayTextID Route22GateScriptCoords: ; 1e6b5 (7:66b5) db 2,4 db 2,5 db $ff Func_1e6ba: ; 1e6ba (7:66ba) ld a, $1 ld [$cd38], a ld a, $80 ld [$ccd3], a ld [$c109], a ld [wJoypadForbiddenButtonsMask], a jp Func_3486 Route22GateScript1: ; 1e6cd (7:66cd) ld a, [$cd38] and a ret nz xor a ld [wJoypadForbiddenButtonsMask], a call Delay3 ld a, $0 ld [W_ROUTE22GATECURSCRIPT], a Route22GateScript2: ; 1e6de (7:66de) ret Route22GateTextPointers: ; 1e6df (7:66df) dw Route22GateText1 Route22GateText1: ; 1e6e1 (7:66e1) db $8 ld a, [$d356] bit 0, a jr nz, .asm_8a809 ; 0x1e6e7 $d ld hl, UnnamedText_1e704 call PrintText call Func_1e6ba ld a, $1 jr .asm_20f7e ; 0x1e6f4 $8 .asm_8a809 ; 0x1e6f6 ld hl, UnnamedText_1e71a call PrintText ld a, $2 .asm_20f7e ; 0x1e6fe ld [W_ROUTE22GATECURSCRIPT], a jp TextScriptEnd UnnamedText_1e704: ; 1e704 (7:6704) TX_FAR _UnnamedText_1e704 ; 0x8cfbb db $8 ld a, $a5 call PlaySoundWaitForCurrent call WaitForSoundToFinish ld hl, UnnamedText_1e715 ; $6715 ret UnnamedText_1e715: ; 1e715 (7:6715) TX_FAR _UnnamedText_1e715 db "@" UnnamedText_1e71a: ; 1e71a (7:671a) TX_FAR _UnnamedText_1e71a ; 0x8d03e db $0B, "@" Route22GateObject: ; 0x1e720 (size=42) db $a ; border tile db $4 ; warps db $7, $4, $0, $ff db $7, $5, $0, $ff db $0, $4, $0, $ff db $0, $5, $1, $ff db $0 ; signs db $1 ; people db SPRITE_GUARD, $2 + 4, $6 + 4, $ff, $d2, $1 ; person ; warp-to EVENT_DISP $5, $7, $4 EVENT_DISP $5, $7, $5 EVENT_DISP $5, $0, $4 EVENT_DISP $5, $0, $5 Route22GateBlocks: ; 1e74a (7:674a) INCBIN "maps/route22gate.blk" BillsHouse_h: ; 0x1e75e to 0x1e76a (12 bytes) (bank=7) (id=88) db $10 ; tileset db BILLS_HOUSE_HEIGHT, BILLS_HOUSE_WIDTH ; dimensions (y, x) dw BillsHouseBlocks, BillsHouseTextPointers, BillsHouseScript ; blocks, texts, scripts db $00 ; connections dw BillsHouseObject ; objects BillsHouseScript: ; 1e76a (7:676a) call EnableAutoTextBoxDrawing ld a, [W_BILLSHOUSECURSCRIPT] ld hl, BillsHouseScriptPointers jp CallFunctionInTable BillsHouseScriptPointers: ; 1e776 (7:6776) dw BillsHouseScript0 dw BillsHouseScript1 dw BillsHouseScript2 dw BillsHouseScript3 dw BillsHouseScript4 dw BillsHouseScript5 BillsHouseScript0: ; 1e782 (7:6782) ret BillsHouseScript1: ; 1e783 (7:6783) ld a, [$c109] and a ld de, MovementData_1e79c jr nz, .asm_1e78f ; 0x1e78a $3 ld de, MovementData_1e7a0 .asm_1e78f ld a, $1 ld [$ff00+$8c], a call MoveSprite ld a, $2 ld [W_BILLSHOUSECURSCRIPT], a ret MovementData_1e79c: ; 1e79c (7:679c) db $40,$40,$40,$FF MovementData_1e7a0: ; 1e7a0 (7:67a0) db $C0,$40,$40,$80,$40,$FF BillsHouseScript2: ; 1e7a6 (7:67a6) ld a, [$d730] bit 0, a ret nz ld a, $61 ld [$cc4d], a ld a, $11 call Predef ld hl, $d7f2 set 6, [hl] xor a ld [wJoypadForbiddenButtonsMask], a ld a, $3 ld [W_BILLSHOUSECURSCRIPT], a ret BillsHouseScript3: ; 1e7c5 (7:67c5) ld a, [$d7f2] bit 3, a ret z ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld a, $2 ld [$cf13], a ld a, $c ld [$ff00+$eb], a ld a, $40 ld [$ff00+$ec], a ld a, $6 ld [$ff00+$ed], a ld a, $5 ld [$ff00+$ee], a call Func_32f9 ld a, $62 ld [$cc4d], a ld a, $15 call Predef ld c, $8 call DelayFrames ld a, $2 ld [$ff00+$8c], a ld de, MovementData_1e807 call MoveSprite ld a, $4 ld [W_BILLSHOUSECURSCRIPT], a ret MovementData_1e807: ; 1e807 (7:6807) db $00,$C0,$C0,$C0,$00,$FF BillsHouseScript4: ; 1e80d (7:680d) ld a, [$d730] bit 0, a ret nz xor a ld [wJoypadForbiddenButtonsMask], a ld hl, $d7f2 set 5, [hl] ld hl, $d7f1 set 0, [hl] ld a, $0 ld [W_BILLSHOUSECURSCRIPT], a ret BillsHouseScript5: ; 1e827 (7:6827) ld a, $4 ld [$ff00+$8c], a call DisplayTextID ld a, $0 ld [W_BILLSHOUSECURSCRIPT], a ret BillsHouseTextPointers: ; 1e834 (7:6834) dw BillsHouseText1 dw BillsHouseText2 dw BillsHouseText3 dw BillsHouseText4 BillsHouseText4: ; 1e83c (7:683c) db $fd BillsHouseText1: ; 1e83d (7:683d) db $8 ld hl, UnnamedText_1e865 call PrintText call YesNoChoice ld a, [$cc26] and a jr nz, asm_6b196 ; 0x1e84b $d asm_4d03c: ; 1e84d (7:684d) ld hl, UnnamedText_1e86a call PrintText ld a, $1 ld [W_BILLSHOUSECURSCRIPT], a jr asm_fd4e2 ; 0x1e858 $8 asm_6b196: ; 1e85a (7:685a) ld hl, UnnamedText_1e86f call PrintText jr asm_4d03c ; 0x1e860 $eb asm_fd4e2 ; 0x1e862 jp TextScriptEnd UnnamedText_1e865: ; 1e865 (7:6865) TX_FAR _UnnamedText_1e865 ; 0x8d267 db "@" UnnamedText_1e86a: ; 1e86a (7:686a) TX_FAR _UnnamedText_1e86a ; 0x8d345 db "@" UnnamedText_1e86f: ; 1e86f (7:686f) TX_FAR _UnnamedText_1e86f ; 0x8d391 db "@" BillsHouseText2: ; 1e874 (7:6874) db $08 ; asm ld a, [$d7f2] bit 4, a jr nz, .asm_5491f ; 0x1e87a ld hl, BillThankYouText call PrintText ld bc, (S_S__TICKET << 8) | 1 call GiveItem jr nc, .BagFull ld hl, SSTicketReceivedText call PrintText ld hl, $d7f2 set 4, [hl] ld a, $7 ld [$cc4d], a ld a, $15 call Predef ld a, $9 ld [$cc4d], a ld a, $11 call Predef .asm_5491f ; 0x1e8a9 ld hl, UnnamedText_1e8cb call PrintText jr .asm_bd408 ; 0x1e8af .BagFull ld hl, SSTicketNoRoomText call PrintText .asm_bd408 ; 0x1e8b7 jp TextScriptEnd BillThankYouText: ; 1e8ba (7:68ba) TX_FAR _BillThankYouText db "@" SSTicketReceivedText: ; 1e8bf (7:68bf) TX_FAR _SSTicketReceivedText ; 0x8d499 db $11, $6, "@" SSTicketNoRoomText: ; 1e8c6 (7:68c6) TX_FAR _SSTicketNoRoomText db "@" UnnamedText_1e8cb: ; 1e8cb (7:68cb) TX_FAR _UnnamedText_1e8cb db "@" BillsHouseText3: ; 1e8d0 (7:68d0) db $08 ; asm ld hl, UnnamedText_1e8da call PrintText jp TextScriptEnd UnnamedText_1e8da: ; 1e8da (7:68da) TX_FAR _UnnamedText_1e8da db "@" BillsHouseObject: ; 0x1e8df (size=38) db $d ; border tile db $2 ; warps db $7, $2, $0, $ff db $7, $3, $0, $ff db $0 ; signs db $3 ; people db SPRITE_SLOWBRO, $5 + 4, $6 + 4, $ff, $ff, $1 ; person db SPRITE_BLACK_HAIR_BOY_2, $4 + 4, $4 + 4, $ff, $ff, $2 ; person db SPRITE_BLACK_HAIR_BOY_2, $5 + 4, $6 + 4, $ff, $ff, $3 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 BillsHouseBlocks: ; 1e905 (7:6905) INCBIN "maps/billshouse.blk" Func_1e915: ; 1e915 (7:6915) call SaveScreenTilesToBuffer2 ld hl, UnnamedText_1e946 ; $6946 call PrintText ld hl, UnnamedText_1e93b ; $693b call PrintText call YesNoChoice ld a, [wCurrentMenuItem] ; $cc26 and a jr nz, .asm_1e932 ld a, $56 call Predef ; indirect jump to DisplayDexRating (44169 (11:4169)) .asm_1e932 ld hl, UnnamedText_1e940 ; $6940 call PrintText jp LoadScreenTilesFromBuffer2 UnnamedText_1e93b: ; 1e93b (7:693b) TX_FAR _UnnamedText_1e93b db "@" UnnamedText_1e940: ; 1e940 (7:6940) TX_FAR _UnnamedText_1e940 db $0d,"@" UnnamedText_1e946: ; 1e946 (7:6946) TX_FAR _UnnamedText_1e946 db "@" Func_1e94b: ; 1e94b (7:694b) call EnableAutoTextBoxDrawing ld a, $39 jp Func_3ef5 NewBicycleText: ; 1e953 (7:6953) TX_FAR _NewBicycleText db "@" Func_1e958: ; 1e958 (7:6958) call EnableAutoTextBoxDrawing ld a, $05 jp Func_3ef5 UnnamedText_1e960: ; 1e960 (7:6960) TX_FAR _UnnamedText_1e960 db "@" Func_1e965: ; 1e965 (7:6965) call EnableAutoTextBoxDrawing ld hl, $d2f7 ld b, $13 call CountSetBits ld a, [$d11e] cp $2 ld a, $6 jr c, .asm_1e97b ld a, $7 .asm_1e97b jp Func_3ef5 UnnamedText_1e97e: ; 1e97e (7:697e) TX_FAR _UnnamedText_1e97e db "@" UnnamedText_1e983: ; 1e983 (7:6983) TX_FAR _UnnamedText_1e983 db "@" Func_1e988: ; 1e988 (7:6988) ld hl, $d790 bit 7, [hl] jr z, asm_1e9ab ld a, [W_NUMSAFARIBALLS] ; $da47 and a jr z, asm_1e9b0 jr asm_1e9ab Func_1e997: ; 1e997 (7:6997) ld a, [wSafariSteps] ; $d70d ld b, a ld a, [wSafariSteps + 1] ; $d70e ld c, a or b jr z, asm_1e9b0 dec bc ld a, b ld [wSafariSteps], a ; $d70d ld a, c ld [wSafariSteps + 1], a ; $d70e asm_1e9ab: ; 1e9ab (7:69ab) xor a ld [$da46], a ret asm_1e9b0: ; 1e9b0 (7:69b0) call EnableAutoTextBoxDrawing xor a ld [wMusicHeaderPointer], a dec a call PlaySound ld c, BANK(SFX_02_5f) ld a, (SFX_02_5f - $4000) / 3 call PlayMusic .asm_1e9c2 ld a, [$c02a] cp $b9 jr nz, .asm_1e9c2 ld a, $d3 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID xor a ld [$d528], a ld a, $9c ld [H_DOWNARROWBLINKCNT1], a ; $FF00+$8b ld a, $3 ld [$d42f], a ld a, $5 ld [W_SAFARIZONEENTRANCECURSCRIPT], a ld hl, $d790 set 6, [hl] ld a, $1 ld [$da46], a ret Func_1e9ed: ; 1e9ed (7:69ed) xor a ld [wJoypadForbiddenButtonsMask], a ld hl, UnnamedText_1e9f7 ; $69f7 jp PrintText UnnamedText_1e9f7: ; 1e9f7 (7:69f7) db $08 ; asm ld a, [W_NUMSAFARIBALLS] ; $da47 and a jr z, .asm_1ea04 ld hl, UnnamedText_1ea0d ; $6a0d call PrintText .asm_1ea04 ld hl, UnnamedText_1ea12 ; $6a12 call PrintText jp TextScriptEnd UnnamedText_1ea0d: ; 1ea0d (7:6a0d) TX_FAR _UnnamedText_1ea0d db "@" UnnamedText_1ea12: ; 1ea12 (7:6a12) TX_FAR _UnnamedText_1ea12 db "@" Func_1eaa17: ; 1ea17 (7:6a17) ld a, [$c109] cp $4 ret nz call EnableAutoTextBoxDrawing ld a, $31 jp Func_3ef5 CinnabarGymQuiz: ; 1ea25 (7:6a25) db $08 ; asm xor a ld [$da38], a ld a, [wWhichTrade] ; $cd3d push af and $f ld [$FF00+$db], a pop af and $f0 swap a ld [$FF00+$dc], a ld hl, CinnabarGymQuizIntroText ; $6a5b call PrintText ld a, [$FF00+$db] dec a add a ld d, $0 ld e, a ld hl, CinnabarQuizQuestions ; $6a60 add hl, de ld a, [hli] ld h, [hl] ld l, a call PrintText ld a, $1 ld [$cc3c], a call Func_1ea92 jp TextScriptEnd CinnabarGymQuizIntroText: ; 1ea5b (7:6a5b) TX_FAR _CinnabarGymQuizIntroText db "@" CinnabarQuizQuestions: ; 1ea60 (7:6a60) dw CinnabarQuizQuestionsText1 dw CinnabarQuizQuestionsText2 dw CinnabarQuizQuestionsText3 dw CinnabarQuizQuestionsText4 dw CinnabarQuizQuestionsText5 dw CinnabarQuizQuestionsText6 CinnabarQuizQuestionsText1: ; 1ea6c (7:6a6c) TX_FAR _CinnabarQuizQuestionsText1 db "@" CinnabarQuizQuestionsText2: ; 1ea71 (7:6a71) TX_FAR _CinnabarQuizQuestionsText2 db "@" CinnabarQuizQuestionsText3: ; 1ea76 (7:6a76) TX_FAR _CinnabarQuizQuestionsText3 db "@" CinnabarQuizQuestionsText4: ; 1ea7b (7:6a7b) TX_FAR _CinnabarQuizQuestionsText4 db "@" CinnabarQuizQuestionsText5: ; 1ea80 (7:6a80) TX_FAR _CinnabarQuizQuestionsText5 db "@" CinnabarQuizQuestionsText6: ; 1ea85 (7:6a85) TX_FAR _CinnabarQuizQuestionsText6 db "@" Func_1ea8a: ; 1ea8a (7:6a8a) ld hl, $d79c ld a, $10 jp Predef ; indirect jump to HandleBitArray (f666 (3:7666)) Func_1ea92: ; 1ea92 (7:6a92) call YesNoChoice ld a, [$FF00+$dc] ld c, a ld a, [wCurrentMenuItem] ; $cc26 cp c jr nz, .asm_1eab8 ld hl, $d126 set 5, [hl] ld a, [$FF00+$db] ld [$FF00+$e0], a ld hl, CinnabarGymQuizCorrectText ; $6ae3 call PrintText ld a, [$FF00+$e0] ld c, a ld b, $1 call Func_1ea8a jp Func_1eb0a .asm_1eab8 call WaitForSoundToFinish ld a, $a5 call PlaySound call WaitForSoundToFinish ld hl, CinnabarGymQuizIncorrectText ; $6b05 call PrintText ld a, [$FF00+$db] add $2 ld c, a ld b, $2 ld hl, $d79a ld a, $10 call Predef ; indirect jump to HandleBitArray (f666 (3:7666)) ld a, c and a ret nz ld a, [$FF00+$db] add $2 ld [$da38], a ret CinnabarGymQuizCorrectText: ; 1eae3 (7:6ae3) db $0b TX_FAR _CinnabarGymQuizCorrectText db $06,$08 ld a, [$FF00+$e0] ld c, a ld b, $2 call Func_1ea8a ld a, c and a jp nz, TextScriptEnd call WaitForSoundToFinish ld a, $ad call PlaySound call WaitForSoundToFinish jp TextScriptEnd CinnabarGymQuizIncorrectText: ; 1eb05 (7:6b05) TX_FAR _CinnabarGymQuizIncorrectText db "@" Func_1eb0a: ; 1eb0a (7:6b0a) ld a, $6 ld [$FF00+$db], a .asm_1eb0e ld a, [$FF00+$db] dec a add a add a ld d, $0 ld e, a ld hl, CinnabarGymGateCoords ; $6b48 add hl, de ld a, [hli] ld b, [hl] ld c, a inc hl ld a, [hl] ld [$d12f], a push bc ld a, [$FF00+$db] ld [$FF00+$e0], a ld c, a ld b, $2 call Func_1ea8a ld a, c and a jr nz, .asm_1eb36 ld a, [$d12f] jr .asm_1eb38 .asm_1eb36 ld a, $e .asm_1eb38 pop bc ld [$d09f], a ld a, $17 call Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) ld hl, $ffdb dec [hl] jr nz, .asm_1eb0e ret CinnabarGymGateCoords: ; 1eb48 (7:6b48) ; format: x-coord, y-coord, direction, padding ; direction: $54 = horizontal gate, $5f = vertical gate db $09,$03,$54,$00 db $06,$03,$54,$00 db $06,$06,$54,$00 db $03,$08,$5f,$00 db $02,$06,$54,$00 db $02,$03,$54,$00 Func_1eb60: ; 1eb60 (7:6b60) call EnableAutoTextBoxDrawing ld a, $30 call Func_3ef5 ret UnnamedText_1eb69: ; 1eb69 (7:6b69) TX_FAR _UnnamedText_1eb69 db "@" Func_1eb6e: ; 1eb6e (7:6b6e) call EnableAutoTextBoxDrawing ld a, [$c109] cp $4 ret nz ld a, [$d7f2] bit 7, a jr nz, .asm_1ebd2 bit 3, a jr nz, .asm_1eb86 bit 6, a jr nz, .asm_1eb8b .asm_1eb86 ld a, $2d jp Func_3ef5 .asm_1eb8b ld a, $1 ld [$cc3c], a ld a, $2e call Func_3ef5 ld c, $20 call DelayFrames ld a, $8c call PlaySound call WaitForSoundToFinish ld c, $50 call DelayFrames ld a, $9c call PlaySound call WaitForSoundToFinish ld c, $30 call DelayFrames ld a, $8c call PlaySound call WaitForSoundToFinish ld c, $20 call DelayFrames ld a, $86 call PlaySound call WaitForSoundToFinish call Func_2307 ld hl, $d7f2 set 3, [hl] ret .asm_1ebd2 ld a, $1 ld [$cc3c], a ld a, $2f call Func_3ef5 ret BillsHouseMonitorText: ; 1ebdd (7:6bdd) TX_FAR _BillsHouseMonitorText db "@" BillsHouseInitiatedText: ; 1ebe2 (7:6be2) TX_FAR _BillsHouseInitiatedText db $06 db $08 ; asm ld a, $ff ld [$c0ee], a call PlaySound ld c, $10 call DelayFrames ld a, $9d call PlaySound call WaitForSoundToFinish ld c, $3c call DelayFrames jp TextScriptEnd BillsHousePokemonList: ; 1ec05 (7:6c05) db $08 ; asm call SaveScreenTilesToBuffer1 ld hl, BillsHousePokemonListText1 call PrintText xor a ld [$d07c], a ld [$cc26], a ld [$cc2a], a ld a, $3 ld [$cc29], a ld a, $4 ld [$cc28], a ld a, $2 ld [$cc24], a ld a, $1 ld [$cc25], a .asm_1ec2d ld hl, $d730 set 6, [hl] ld hl, wTileMap ld b, $a ld c, $9 call TextBoxBorder ld hl, $c3ca ld de, BillsMonListText call PlaceString ld hl, BillsHousePokemonListText2 call PrintText call SaveScreenTilesToBuffer2 call HandleMenuInput bit 1, a jr nz, .asm_1ec74 ld a, [$cc26] add $66 cp EEVEE jr z, .asm_1ec6c cp FLAREON jr z, .asm_1ec6c cp JOLTEON jr z, .asm_1ec6c cp VAPOREON jr z, .asm_1ec6c jr .asm_1ec74 .asm_1ec6c call DisplayPokedex call LoadScreenTilesFromBuffer2 jr .asm_1ec2d .asm_1ec74 ld hl, $d730 res 6, [hl] call LoadScreenTilesFromBuffer2 jp TextScriptEnd BillsHousePokemonListText1: ; 1ec7f (7:6c7f) TX_FAR _BillsHousePokemonListText1 db "@" BillsMonListText: ; 1ec84 (7:6c84) db "EEVEE" next "FLAREON" next "JOLTEON" next "VAPOREON" next "CANCEL@" BillsHousePokemonListText2: ; 1ecaa (7:6caa) TX_FAR _BillsHousePokemonListText2 db "@" Func_1ecaf: ; 1ecaf (7:6caf) ld a, [$c109] cp $4 ret nz call EnableAutoTextBoxDrawing ld a, $8 jp Func_3ef5 OakLabEmailText: ; 1ecbd (7:6cbd) TX_FAR _OakLabEmailText db "@" SECTION "bank9",ROMX,BANK[$9] RhydonPicFront: ; 24000 (9:4000) INCBIN "pic/bmon/rhydon.pic" RhydonPicBack: ; 24202 (9:4202) INCBIN "pic/monback/rhydonb.pic" KangaskhanPicFront: ; 2429a (9:429a) INCBIN "pic/bmon/kangaskhan.pic" KangaskhanPicBack: ; 244a6 (9:44a6) INCBIN "pic/monback/kangaskhanb.pic" NidoranMPicFront: ; 2453c (9:453c) INCBIN "pic/bmon/nidoranm.pic" NidoranMPicBack: ; 24623 (9:4623) INCBIN "pic/monback/nidoranmb.pic" ClefairyPicFront: ; 24682 (9:4682) INCBIN "pic/bmon/clefairy.pic" ClefairyPicBack: ; 24785 (9:4785) INCBIN "pic/monback/clefairyb.pic" SpearowPicFront: ; 247df (9:47df) INCBIN "pic/bmon/spearow.pic" SpearowPicBack: ; 248c2 (9:48c2) INCBIN "pic/monback/spearowb.pic" VoltorbPicFront: ; 24911 (9:4911) INCBIN "pic/bmon/voltorb.pic" VoltorbPicBack: ; 2499a (9:499a) INCBIN "pic/monback/voltorbb.pic" NidokingPicFront: ; 249f8 (9:49f8) INCBIN "pic/bmon/nidoking.pic" NidokingPicBack: ; 24c60 (9:4c60) INCBIN "pic/monback/nidokingb.pic" SlowbroPicFront: ; 24d0a (9:4d0a) INCBIN "pic/bmon/slowbro.pic" SlowbroPicBack: ; 24f87 (9:4f87) INCBIN "pic/monback/slowbrob.pic" IvysaurPicFront: ; 2502b (9:502b) INCBIN "pic/bmon/ivysaur.pic" IvysaurPicBack: ; 25157 (9:5157) INCBIN "pic/monback/ivysaurb.pic" ExeggutorPicFront: ; 251d6 (9:51d6) INCBIN "pic/bmon/exeggutor.pic" ExeggutorPicBack: ; 253f8 (9:53f8) INCBIN "pic/monback/exeggutorb.pic" LickitungPicFront: ; 254a7 (9:54a7) INCBIN "pic/bmon/lickitung.pic" LickitungPicBack: ; 2563e (9:563e) INCBIN "pic/monback/lickitungb.pic" ExeggcutePicFront: ; 256d7 (9:56d7) INCBIN "pic/bmon/exeggcute.pic" ExeggcutePicBack: ; 258f0 (9:58f0) INCBIN "pic/monback/exeggcuteb.pic" GrimerPicFront: ; 25973 (9:5973) INCBIN "pic/bmon/grimer.pic" GrimerPicBack: ; 25ab0 (9:5ab0) INCBIN "pic/monback/grimerb.pic" GengarPicFront: ; 25b76 (9:5b76) INCBIN "pic/bmon/gengar.pic" GengarPicBack: ; 25cc6 (9:5cc6) INCBIN "pic/monback/gengarb.pic" NidoranFPicFront: ; 25d28 (9:5d28) INCBIN "pic/bmon/nidoranf.pic" NidoranFPicBack: ; 25dc2 (9:5dc2) INCBIN "pic/monback/nidoranfb.pic" NidoqueenPicFront: ; 25e09 (9:5e09) INCBIN "pic/bmon/nidoqueen.pic" NidoqueenPicBack: ; 25fef (9:5fef) INCBIN "pic/monback/nidoqueenb.pic" CubonePicFront: ; 260a8 (9:60a8) INCBIN "pic/bmon/cubone.pic" CubonePicBack: ; 26196 (9:6196) INCBIN "pic/monback/cuboneb.pic" RhyhornPicFront: ; 26208 (9:6208) INCBIN "pic/bmon/rhyhorn.pic" RhyhornPicBack: ; 2640f (9:640f) INCBIN "pic/monback/rhyhornb.pic" LaprasPicFront: ; 264c1 (9:64c1) INCBIN "pic/bmon/lapras.pic" LaprasPicBack: ; 2667c (9:667c) INCBIN "pic/monback/laprasb.pic" ArcaninePicFront: ; 266ff (9:66ff) INCBIN "pic/bmon/arcanine.pic" ArcaninePicBack: ; 2693d (9:693d) INCBIN "pic/monback/arcanineb.pic" GyaradosPicFront: ; 269d4 (9:69d4) INCBIN "pic/bmon/gyarados.pic" GyaradosPicBack: ; 26c25 (9:6c25) INCBIN "pic/monback/gyaradosb.pic" ShellderPicFront: ; 26cb6 (9:6cb6) INCBIN "pic/bmon/shellder.pic" ShellderPicBack: ; 26dc3 (9:6dc3) INCBIN "pic/monback/shellderb.pic" TentacoolPicFront: ; 26e2a (9:6e2a) INCBIN "pic/bmon/tentacool.pic" TentacoolPicBack: ; 26f1c (9:6f1c) INCBIN "pic/monback/tentacoolb.pic" GastlyPicFront: ; 26f77 (9:6f77) INCBIN "pic/bmon/gastly.pic" GastlyPicBack: ; 27190 (9:7190) INCBIN "pic/monback/gastlyb.pic" ScytherPicFront: ; 2721c (9:721c) INCBIN "pic/bmon/scyther.pic" ScytherPicBack: ; 2743c (9:743c) INCBIN "pic/monback/scytherb.pic" StaryuPicFront: ; 274e0 (9:74e0) INCBIN "pic/bmon/staryu.pic" StaryuPicBack: ; 275ec (9:75ec) INCBIN "pic/monback/staryub.pic" BlastoisePicFront: ; 27637 (9:7637) INCBIN "pic/bmon/blastoise.pic" BlastoisePicBack: ; 27851 (9:7851) INCBIN "pic/monback/blastoiseb.pic" PinsirPicFront: ; 278da (9:78da) INCBIN "pic/bmon/pinsir.pic" PinsirPicBack: ; 27aaa (9:7aaa) INCBIN "pic/monback/pinsirb.pic" TangelaPicFront: ; 27b39 (9:7b39) INCBIN "pic/bmon/tangela.pic" TangelaPicBack: ; 27ce7 (9:7ce7) INCBIN "pic/monback/tangelab.pic" Func_27d6b: ; 27d6b (9:7d6b) call Load16BitRegisters push hl call GetMonHeader pop hl push hl ld a, [W_MONHTYPE1] call Func_27d89 ld a, [W_MONHTYPE1] ld b, a ld a, [W_MONHTYPE2] cp b pop hl jr z, asm_27d8c ld bc, $28 add hl, bc Func_27d89: ; 27d89 (9:7d89) push hl jr asm_27d9f asm_27d8c: ; 27d8c (9:7d8c) ld a, $7f ld bc, $13 add hl, bc ld bc, $6 jp FillMemory Func_27d98: ; 27d98 (9:7d98) call Load16BitRegisters push hl ld a, [W_PLAYERMOVETYPE] ; $cfd5 asm_27d9f: ; 27d9f (9:7d9f) add a ld hl, TypeNamePointers ; $7dae ld e, a ld d, $0 add hl, de ld a, [hli] ld e, a ld d, [hl] pop hl jp PlaceString TypeNamePointers: ; 27dae (9:7dae) dw Type00Name dw Type01Name dw Type02Name dw Type03Name dw Type04Name dw Type05Name dw Type06Name dw Type07Name dw Type08Name dw Type00Name dw Type00Name dw Type00Name dw Type00Name dw Type00Name dw Type00Name dw Type00Name dw Type00Name dw Type00Name dw Type00Name dw Type00Name dw Type14Name dw Type15Name dw Type16Name dw Type17Name dw Type18Name dw Type19Name dw Type1AName Type00Name: ; 27de4 (9:7de4) db "NORMAL@" Type01Name: ; 27deb (9:7deb) db "FIGHTING@" Type02Name: ; 27df4 (9:7df4) db "FLYING@" Type03Name: ; 27dfb (9:7dfb) db "POISON@" Type14Name: ; 27e02 (9:7e02) db "FIRE@" Type15Name: ; 27e07 (9:7e07) db "WATER@" Type16Name: ; 27e0d (9:7e0d) db "GRASS@" Type17Name: ; 27e13 (9:7e13) db "ELECTRIC@" Type18Name: ; 27e1c (9:7e1c) db "PSYCHIC@" Type19Name: ; 27e24 (9:7e24) db "ICE@" Type04Name: ; 27e28 (9:7e28) db "GROUND@" Type05Name: ; 27e2f (9:7e2f) db "ROCK@" Type06Name: ; 27e34 (9:7e34) db "BIRD@" Type07Name: ; 27e39 (9:7e39) db "BUG@" Type08Name: ; 27e3d (9:7e3d) db "GHOST@" Type1AName: ; 27e43 (9:7e43) db "DRAGON@" SaveTrainerName: ; 27e4a (9:7e4a) ld hl,TrainerNamePointers ld a,[W_TRAINERCLASS] dec a ld c,a ld b,0 add hl,bc add hl,bc ld a,[hli] ld h,[hl] ld l,a ld de,$CD6D .CopyCharacter ld a,[hli] ld [de],a inc de cp "@" jr nz,.CopyCharacter ret TrainerNamePointers: ; 27e64 (9:7e64) ; what is the point of these? dw YoungsterName dw BugCatcherName dw LassName dw W_TRAINERNAME dw JrTrainerMName dw JrTrainerFName dw PokemaniacName dw SuperNerdName dw W_TRAINERNAME dw W_TRAINERNAME dw BurglarName dw EngineerName dw JugglerXName dw W_TRAINERNAME dw SwimmerName dw W_TRAINERNAME dw W_TRAINERNAME dw BeautyName dw W_TRAINERNAME dw RockerName dw JugglerName dw W_TRAINERNAME dw W_TRAINERNAME dw BlackbeltName dw W_TRAINERNAME dw ProfOakName dw ChiefName dw ScientistName dw W_TRAINERNAME dw RocketName dw CooltrainerMName dw CooltrainerFName dw W_TRAINERNAME dw W_TRAINERNAME dw W_TRAINERNAME dw W_TRAINERNAME dw W_TRAINERNAME dw W_TRAINERNAME dw W_TRAINERNAME dw W_TRAINERNAME dw W_TRAINERNAME dw W_TRAINERNAME dw W_TRAINERNAME dw W_TRAINERNAME dw W_TRAINERNAME dw W_TRAINERNAME dw W_TRAINERNAME YoungsterName: ; 27ec2 (9:7ec2) db "YOUNGSTER@" BugCatcherName: ; 27ecc (9:7ecc) db "BUG CATCHER@" LassName: ; 27ed8 (9:7ed8) db "LASS@" JrTrainerMName: ; 27edd (9:7edd) db "JR.TRAINER♂@" JrTrainerFName: ; 27ee9 (9:7ee9) db "JR.TRAINER♀@" PokemaniacName: ; 27ef5 (9:7ef5) db "POKéMANIAC@" SuperNerdName: ; 27f00 (9:7f00) db "SUPER NERD@" BurglarName: ; 27f0b (9:7f0b) db "BURGLAR@" EngineerName: ; 27f13 (9:7f13) db "ENGINEER@" JugglerXName: ; 27f1c (9:7f1c) db "JUGGLER@" SwimmerName: ; 27f24 (9:7f24) db "SWIMMER@" BeautyName: ; 27f2c (9:7f2c) db "BEAUTY@" RockerName: ; 27f33 (9:7f33) db "ROCKER@" JugglerName: ; 27f3a (9:7f3a) db "JUGGLER@" BlackbeltName: ; 27f42 (9:7f42) db "BLACKBELT@" ProfOakName: ; 27f4c (9:7f4c) db "PROF.OAK@" ChiefName: ; 27f55 (9:7f55) db "CHIEF@" ScientistName: ; 27f5b (9:7f5b) db "SCIENTIST@" RocketName: ; 27f65 (9:7f65) db "ROCKET@" CooltrainerMName: ; 27f6c (9:7f6c) db "COOLTRAINER♂@" CooltrainerFName: ; 27f79 (9:7f79) db "COOLTRAINER♀@" Func_27f86: ; 27f86 (9:7f86) ld hl, W_PLAYERBATTSTATUS2 ; $d063 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_27f91 ld hl, W_ENEMYBATTSTATUS2 ; $d068 .asm_27f91 bit 2, [hl] jr nz, .asm_27fa5 set 2, [hl] ld hl, Func_3fba8 ld b, BANK(Func_3fba8) call Bankswitch ld hl, UnnamedText_27fb3 ; $7fb2 jp PrintText .asm_27fa5 ld c, $32 call DelayFrames ld hl, Func_3fb53 ld b, BANK(Func_3fb53) jp Bankswitch UnnamedText_27fb3: ; 27fb3 (9:7fb3) db $0a TX_FAR _UnnamedText_27fb3 db "@" SECTION "bankA",ROMX,BANK[$A] GrowlithePicFront: ; 28000 (a:4000) INCBIN "pic/bmon/growlithe.pic" GrowlithePicBack: ; 28101 (a:4101) INCBIN "pic/monback/growlitheb.pic" OnixPicFront: ; 28164 (a:4164) INCBIN "pic/bmon/onix.pic" OnixPicBack: ; 28300 (a:4300) INCBIN "pic/monback/onixb.pic" FearowPicFront: ; 28383 (a:4383) INCBIN "pic/bmon/fearow.pic" FearowPicBack: ; 28529 (a:4529) INCBIN "pic/monback/fearowb.pic" PidgeyPicFront: ; 285a7 (a:45a7) INCBIN "pic/bmon/pidgey.pic" PidgeyPicBack: ; 2865b (a:465b) INCBIN "pic/monback/pidgeyb.pic" SlowpokePicFront: ; 286a0 (a:46a0) INCBIN "pic/bmon/slowpoke.pic" SlowpokePicBack: ; 287c2 (a:47c2) INCBIN "pic/monback/slowpokeb.pic" KadabraPicFront: ; 28830 (a:4830) INCBIN "pic/bmon/kadabra.pic" KadabraPicBack: ; 289b9 (a:49b9) INCBIN "pic/monback/kadabrab.pic" GravelerPicFront: ; 28a4c (a:4a4c) INCBIN "pic/bmon/graveler.pic" GravelerPicBack: ; 28c00 (a:4c00) INCBIN "pic/monback/gravelerb.pic" ChanseyPicFront: ; 28cae (a:4cae) INCBIN "pic/bmon/chansey.pic" ChanseyPicBack: ; 28e21 (a:4e21) INCBIN "pic/monback/chanseyb.pic" MachokePicFront: ; 28e85 (a:4e85) INCBIN "pic/bmon/machoke.pic" MachokePicBack: ; 29063 (a:5063) INCBIN "pic/monback/machokeb.pic" MrMimePicFront: ; 290f3 (a:50f3) INCBIN "pic/bmon/mr.mime.pic" MrMimePicBack: ; 29247 (a:5247) INCBIN "pic/monback/mr.mimeb.pic" HitmonleePicFront: ; 292bf (a:52bf) INCBIN "pic/bmon/hitmonlee.pic" HitmonleePicBack: ; 2945e (a:545e) INCBIN "pic/monback/hitmonleeb.pic" HitmonchanPicFront: ; 294bc (a:54bc) INCBIN "pic/bmon/hitmonchan.pic" HitmonchanPicBack: ; 29643 (a:5643) INCBIN "pic/monback/hitmonchanb.pic" ArbokPicFront: ; 296b4 (a:56b4) INCBIN "pic/bmon/arbok.pic" ArbokPicBack: ; 29911 (a:5911) INCBIN "pic/monback/arbokb.pic" ParasectPicFront: ; 299a8 (a:59a8) INCBIN "pic/bmon/parasect.pic" ParasectPicBack: ; 29b8c (a:5b8c) INCBIN "pic/monback/parasectb.pic" PsyduckPicFront: ; 29c0a (a:5c0a) INCBIN "pic/bmon/psyduck.pic" PsyduckPicBack: ; 29d3e (a:5d3e) INCBIN "pic/monback/psyduckb.pic" DrowzeePicFront: ; 29da9 (a:5da9) INCBIN "pic/bmon/drowzee.pic" DrowzeePicBack: ; 29f05 (a:5f05) INCBIN "pic/monback/drowzeeb.pic" GolemPicFront: ; 29f74 (a:5f74) INCBIN "pic/bmon/golem.pic" GolemPicBack: ; 2a0f2 (a:60f2) INCBIN "pic/monback/golemb.pic" MagmarPicFront: ; 2a161 (a:6161) INCBIN "pic/bmon/magmar.pic" MagmarPicBack: ; 2a2bf (a:62bf) INCBIN "pic/monback/magmarb.pic" ElectabuzzPicFront: ; 2a367 (a:6367) INCBIN "pic/bmon/electabuzz.pic" ElectabuzzPicBack: ; 2a4ef (a:64ef) INCBIN "pic/monback/electabuzzb.pic" MagnetonPicFront: ; 2a588 (a:6588) INCBIN "pic/bmon/magneton.pic" MagnetonPicBack: ; 2a723 (a:6723) INCBIN "pic/monback/magnetonb.pic" KoffingPicFront: ; 2a7a6 (a:67a6) INCBIN "pic/bmon/koffing.pic" KoffingPicBack: ; 2a974 (a:6974) INCBIN "pic/monback/koffingb.pic" MankeyPicFront: ; 2aa11 (a:6a11) INCBIN "pic/bmon/mankey.pic" MankeyPicBack: ; 2ab16 (a:6b16) INCBIN "pic/monback/mankeyb.pic" SeelPicFront: ; 2ab84 (a:6b84) INCBIN "pic/bmon/seel.pic" SeelPicBack: ; 2ace8 (a:6ce8) INCBIN "pic/monback/seelb.pic" DiglettPicFront: ; 2ad33 (a:6d33) INCBIN "pic/bmon/diglett.pic" DiglettPicBack: ; 2ae10 (a:6e10) INCBIN "pic/monback/diglettb.pic" TaurosPicFront: ; 2ae7e (a:6e7e) INCBIN "pic/bmon/tauros.pic" TaurosPicBack: ; 2b054 (a:7054) INCBIN "pic/monback/taurosb.pic" FarfetchdPicFront: ; 2b0e9 (a:70e9) INCBIN "pic/bmon/farfetchd.pic" FarfetchdPicBack: ; 2b2c6 (a:72c6) INCBIN "pic/monback/farfetchdb.pic" VenonatPicFront: ; 2b357 (a:7357) INCBIN "pic/bmon/venonat.pic" VenonatPicBack: ; 2b45c (a:745c) INCBIN "pic/monback/venonatb.pic" DragonitePicFront: ; 2b4aa (a:74aa) INCBIN "pic/bmon/dragonite.pic" DragonitePicBack: ; 2b67f (a:767f) INCBIN "pic/monback/dragoniteb.pic" DoduoPicFront: ; 2b72c (a:772c) INCBIN "pic/bmon/doduo.pic" DoduoPicBack: ; 2b80d (a:780d) INCBIN "pic/monback/doduob.pic" PoliwagPicFront: ; 2b875 (a:7875) INCBIN "pic/bmon/poliwag.pic" PoliwagPicBack: ; 2b947 (a:7947) INCBIN "pic/monback/poliwagb.pic" JynxPicFront: ; 2b98e (a:798e) INCBIN "pic/bmon/jynx.pic" JynxPicBack: ; 2bb42 (a:7b42) INCBIN "pic/monback/jynxb.pic" MoltresPicFront: ; 2bbac (a:7bac) INCBIN "pic/bmon/moltres.pic" MoltresPicBack: ; 2be02 (a:7e02) INCBIN "pic/monback/moltresb.pic" Func_2bea9: ; 2bea9 (a:7ea9) ld hl, MoveHitTest ld b, BANK(MoveHitTest) call Bankswitch ld a, [W_MOVEMISSED] ; $d05f and a jr nz, .asm_2bee7 ld hl, W_ENEMYBATTSTATUS2 ; $d068 ld de, W_ENEMYMONTYPE1 ; $cfea (aliases: W_ENEMYMONTYPES) ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_2bec8 ld hl, W_PLAYERBATTSTATUS2 ; $d063 ld de, W_PLAYERMONTYPE1 ; $d019 (aliases: W_PLAYERMONTYPES) .asm_2bec8 ld a, [de] cp $16 jr z, .asm_2bee7 inc de ld a, [de] cp $16 jr z, .asm_2bee7 bit 7, [hl] jr nz, .asm_2bee7 set 7, [hl] ld hl, Func_3fba8 ld b, BANK(Func_3fba8) call Bankswitch ld hl, UnnamedText_2bef2 ; $7ef2 jp PrintText .asm_2bee7 ld c, $32 call DelayFrames ld hl, UnnamedText_2bef7 ; $7ef7 jp PrintText UnnamedText_2bef2: ; 2bef2 (a:7ef2) TX_FAR _UnnamedText_2bef2 db "@" UnnamedText_2bef7: ; 2bef7 (a:7ef7) TX_FAR _UnnamedText_2bef7 db "@" SECTION "bankB",ROMX,BANK[$B] ArticunoPicFront: ; 2c000 (b:4000) INCBIN "pic/bmon/articuno.pic" ArticunoPicBack: ; 2c238 (b:4238) INCBIN "pic/monback/articunob.pic" ZapdosPicFront: ; 2c29d (b:429d) INCBIN "pic/bmon/zapdos.pic" ZapdosPicBack: ; 2c484 (b:4484) INCBIN "pic/monback/zapdosb.pic" DittoPicFront: ; 2c514 (b:4514) INCBIN "pic/bmon/ditto.pic" DittoPicBack: ; 2c5bd (b:45bd) INCBIN "pic/monback/dittob.pic" MeowthPicFront: ; 2c609 (b:4609) INCBIN "pic/bmon/meowth.pic" MeowthPicBack: ; 2c71f (b:471f) INCBIN "pic/monback/meowthb.pic" KrabbyPicFront: ; 2c777 (b:4777) INCBIN "pic/bmon/krabby.pic" KrabbyPicBack: ; 2c8b0 (b:48b0) INCBIN "pic/monback/krabbyb.pic" VulpixPicFront: ; 2c924 (b:4924) INCBIN "pic/bmon/vulpix.pic" VulpixPicBack: ; 2ca9a (b:4a9a) INCBIN "pic/monback/vulpixb.pic" NinetalesPicFront: ; 2caff (b:4aff) INCBIN "pic/bmon/ninetales.pic" NinetalesPicBack: ; 2ccfb (b:4cfb) INCBIN "pic/monback/ninetalesb.pic" PikachuPicFront: ; 2cd7d (b:4d7d) INCBIN "pic/bmon/pikachu.pic" PikachuPicBack: ; 2ce8b (b:4e8b) INCBIN "pic/monback/pikachub.pic" RaichuPicFront: ; 2cf03 (b:4f03) INCBIN "pic/bmon/raichu.pic" RaichuPicBack: ; 2d0c3 (b:50c3) INCBIN "pic/monback/raichub.pic" DratiniPicFront: ; 2d151 (b:5151) INCBIN "pic/bmon/dratini.pic" DratiniPicBack: ; 2d234 (b:5234) INCBIN "pic/monback/dratinib.pic" DragonairPicFront: ; 2d297 (b:5297) INCBIN "pic/bmon/dragonair.pic" DragonairPicBack: ; 2d3d9 (b:53d9) INCBIN "pic/monback/dragonairb.pic" KabutoPicFront: ; 2d464 (b:5464) INCBIN "pic/bmon/kabuto.pic" KabutoPicBack: ; 2d529 (b:5529) INCBIN "pic/monback/kabutob.pic" KabutopsPicFront: ; 2d583 (b:5583) INCBIN "pic/bmon/kabutops.pic" KabutopsPicBack: ; 2d73c (b:573c) INCBIN "pic/monback/kabutopsb.pic" HorseaPicFront: ; 2d7c1 (b:57c1) INCBIN "pic/bmon/horsea.pic" HorseaPicBack: ; 2d873 (b:5873) INCBIN "pic/monback/horseab.pic" SeadraPicFront: ; 2d8c4 (b:58c4) INCBIN "pic/bmon/seadra.pic" SeadraPicBack: ; 2da2b (b:5a2b) INCBIN "pic/monback/seadrab.pic" SandshrewPicFront: ; 2dac9 (b:5ac9) INCBIN "pic/bmon/sandshrew.pic" SandshrewPicBack: ; 2dbe7 (b:5be7) INCBIN "pic/monback/sandshrewb.pic" SandslashPicFront: ; 2dc6b (b:5c6b) INCBIN "pic/bmon/sandslash.pic" SandslashPicBack: ; 2de04 (b:5e04) INCBIN "pic/monback/sandslashb.pic" OmanytePicFront: ; 2de9d (b:5e9d) INCBIN "pic/bmon/omanyte.pic" OmanytePicBack: ; 2df76 (b:5f76) INCBIN "pic/monback/omanyteb.pic" OmastarPicFront: ; 2dfd3 (b:5fd3) INCBIN "pic/bmon/omastar.pic" OmastarPicBack: ; 2e18b (b:618b) INCBIN "pic/monback/omastarb.pic" JigglypuffPicFront: ; 2e22f (b:622f) INCBIN "pic/bmon/jigglypuff.pic" JigglypuffPicBack: ; 2e30f (b:630f) INCBIN "pic/monback/jigglypuffb.pic" WigglytuffPicFront: ; 2e348 (b:6348) INCBIN "pic/bmon/wigglytuff.pic" WigglytuffPicBack: ; 2e4bf (b:64bf) INCBIN "pic/monback/wigglytuffb.pic" EeveePicFront: ; 2e531 (b:6531) INCBIN "pic/bmon/eevee.pic" EeveePicBack: ; 2e625 (b:6625) INCBIN "pic/monback/eeveeb.pic" FlareonPicFront: ; 2e68d (b:668d) INCBIN "pic/bmon/flareon.pic" FlareonPicBack: ; 2e806 (b:6806) INCBIN "pic/monback/flareonb.pic" JolteonPicFront: ; 2e88f (b:688f) INCBIN "pic/bmon/jolteon.pic" JolteonPicBack: ; 2ea0a (b:6a0a) INCBIN "pic/monback/jolteonb.pic" VaporeonPicFront: ; 2eaae (b:6aae) INCBIN "pic/bmon/vaporeon.pic" VaporeonPicBack: ; 2ec02 (b:6c02) INCBIN "pic/monback/vaporeonb.pic" MachopPicFront: ; 2ec9f (b:6c9f) INCBIN "pic/bmon/machop.pic" MachopPicBack: ; 2eda2 (b:6da2) INCBIN "pic/monback/machopb.pic" ZubatPicFront: ; 2ee0c (b:6e0c) INCBIN "pic/bmon/zubat.pic" ZubatPicBack: ; 2ef17 (b:6f17) INCBIN "pic/monback/zubatb.pic" EkansPicFront: ; 2ef6b (b:6f6b) INCBIN "pic/bmon/ekans.pic" EkansPicBack: ; 2f06d (b:706d) INCBIN "pic/monback/ekansb.pic" ParasPicFront: ; 2f0b4 (b:70b4) INCBIN "pic/bmon/paras.pic" ParasPicBack: ; 2f177 (b:7177) INCBIN "pic/monback/parasb.pic" PoliwhirlPicFront: ; 2f1ed (b:71ed) INCBIN "pic/bmon/poliwhirl.pic" PoliwhirlPicBack: ; 2f35e (b:735e) INCBIN "pic/monback/poliwhirlb.pic" PoliwrathPicFront: ; 2f3c1 (b:73c1) INCBIN "pic/bmon/poliwrath.pic" PoliwrathPicBack: ; 2f52c (b:752c) INCBIN "pic/monback/poliwrathb.pic" WeedlePicFront: ; 2f57d (b:757d) INCBIN "pic/bmon/weedle.pic" WeedlePicBack: ; 2f624 (b:7624) INCBIN "pic/monback/weedleb.pic" KakunaPicFront: ; 2f677 (b:7677) INCBIN "pic/bmon/kakuna.pic" KakunaPicBack: ; 2f736 (b:7736) INCBIN "pic/monback/kakunab.pic" BeedrillPicFront: ; 2f788 (b:7788) INCBIN "pic/bmon/beedrill.pic" BeedrillPicBack: ; 2f980 (b:7980) INCBIN "pic/monback/beedrillb.pic" FossilKabutopsPic: ; 2f9e8 (b:79e8) INCBIN "pic/bmon/fossilkabutops.pic" DisplayEffectiveness: ; 2fb7b (b:7b7b) ld a, [$D05B] and a, $7F cp a, $0A ret z ld hl, UnnamedText_2fb8e ; It's super effective! jr nc, .done ld hl, UnnamedText_2fb93 ; It's not very effective... .done jp PrintText UnnamedText_2fb8e: ; 2fb8e (b:7b8e) TX_FAR _UnnamedText_2fb8e db "@" UnnamedText_2fb93: ; 2fb93 (b:7b93) TX_FAR _UnnamedText_2fb93 db "@" TrainerInfoTextBoxTileGraphics: ; 2fb98 (b:7b98) INCBIN "gfx/trainer_info.2bpp" BlankLeaderNames: ; 2fc28 (b:7c28) INCBIN "gfx/blank_leader_names.2bpp" CircleTile: ; 2fd88 (b:7d88) INCBIN "gfx/circle_tile.2bpp" BadgeNumbersTileGraphics: ; 2fd98 (b:7d98) INCBIN "gfx/badge_numbers.2bpp" Func_2fe18: ; 2fe18 (b:7e18) ld a, [wWhichPokemon] ; $cf92 ld hl, W_PARTYMON1_MOVE1 ; $d173 ld bc, $2c call AddNTimes ld a, [$d0e0] ld b, a ld c, $4 .asm_2fe2a ld a, [hli] cp b jr z, .asm_2fe33 dec c jr nz, .asm_2fe2a and a ret .asm_2fe33 ld hl, UnnamedText_2fe3b ; $7e3b call PrintText scf ret UnnamedText_2fe3b: ; 2fe3b (b:7e3b) TX_FAR _UnnamedText_2fe3b db "@" ; scales both uncompressed sprite chunks by two in every dimension (creating 2x2 output pixels per input pixel) ; assumes that input sprite chunks are 4x4 tiles, and the rightmost and bottommost 4 pixels will be ignored ; resulting in a 7*7 tile output sprite chunk ScaleSpriteByTwo: ; 2fe40 (b:7e40) ld de, S_SPRITEBUFFER1 + (4*4*8) - 5 ; last byte of input data, last 4 rows already skipped ld hl, S_SPRITEBUFFER0 + SPRITEBUFFERSIZE - 1 ; end of destination buffer call ScaleLastSpriteColumnByTwo ; last tile column is special case call ScaleFirstThreeSpriteColumnsByTwo ; scale first 3 tile columns ld de, S_SPRITEBUFFER2 + (4*4*8) - 5 ; last byte of input data, last 4 rows already skipped ld hl, S_SPRITEBUFFER1 + SPRITEBUFFERSIZE - 1 ; end of destination buffer call ScaleLastSpriteColumnByTwo ; last tile column is special case ScaleFirstThreeSpriteColumnsByTwo: ; 2fe55 (b:7e55) ld b, $3 ; 3 tile columns .columnLoop ld c, 4*8 - 4 ; $1c, 4 tiles minus 4 unused rows .columnInnerLoop push bc ld a, [de] ld bc, -(7*8)+1 ; $ffc9, scale lower nybble and seek to previous output column call ScalePixelsByTwo ld a, [de] dec de swap a ld bc, 7*8+1-2 ; $37, scale upper nybble and seek back to current output column and to the next 2 rows call ScalePixelsByTwo pop bc dec c jr nz, .columnInnerLoop dec de dec de dec de dec de ld a, b ld bc, -7*8 ; $ffc8, skip one output column (which has already been written along with the current one) add hl, bc ld b, a dec b jr nz, .columnLoop ret ScaleLastSpriteColumnByTwo: ; 2fe7d (b:7e7d) ld a, 4*8 - 4 ; $1c, 4 tiles minus 4 unused rows ld [H_SPRITEINTERLACECOUNTER], a ; $FF00+$8b ld bc, -1 ; $ffff .columnInnerLoop ld a, [de] dec de swap a ; only high nybble contains information call ScalePixelsByTwo ld a, [H_SPRITEINTERLACECOUNTER] ; $FF00+$8b dec a ld [H_SPRITEINTERLACECOUNTER], a ; $FF00+$8b jr nz, .columnInnerLoop dec de ; skip last 4 rows of new column dec de dec de dec de ret ; scales the given 4 bits in a (4x1 pixels) to 2 output bytes (8x2 pixels) ; hl: destination pointer ; bc: destination pointer offset (added after the two bytes have been written) ScalePixelsByTwo: ; 2fe97 (b:7e97) push hl and $f ld hl, DuplicateBitsTable add l ld l, a jr nc, .noCarry inc h .noCarry ld a, [hl] pop hl ld [hld], a ; write output byte twice to make it 2 pixels high ld [hl], a add hl, bc ; add offset ret ; repeats each input bit twice DuplicateBitsTable: ; 2fea8 (b:7ea8) db $00, $03, $0c, $0f db $30, $33, $3c, $3f db $c0, $c3, $cc, $cf db $f0, $f3, $fc, $ff Func_2feb8 ; 2feb8 (b:7eb8) xor a ld hl, $cd6d ld [hli], a ld a, [$ff00+$f3] and a ld a, [$d022] jr z, .asm_2fec8 ; 0x2fec3 $3 ld a, [$cff3] .asm_2fec8 add a ld [$ff00+$98], a xor a ld [$ff00+$95], a ld [$ff00+$96], a ld [$ff00+$97], a ld a, $64 ld [$ff00+$99], a ld b, $4 call Divide ld a, [$ff00+$98] ld [hli], a ld a, [$ff00+$99] ld [$ff00+$98], a ld a, $a ld [$ff00+$99], a ld b, $4 call Divide ld a, [$ff00+$98] swap a ld b, a ld a, [$ff00+$99] add b ld [hl], a ld de, $cce7 ld c, $3 ld a, $b call Predef ld hl, UnnamedText_2ff04 ; $7f04 jp PrintText UnnamedText_2ff04: ; 2ff04 (b:7f04) TX_FAR _UnnamedText_2ff04 db "@" Func_2ff09 ; 2ff09 (b:7f09) ld a, [$c102] and $8 jr z, .asm_2ff2e ld b, $45 ld a, $1c call Predef ld a, b and a ld b, $33 jr z, .asm_2ff26 ld hl, $d5a4 ld a, [hli] or [hl] jr nz, .asm_2ff2e ld b, $32 .asm_2ff26 call EnableAutoTextBoxDrawing ld a, b call Func_3ef5 xor a .asm_2ff2e ld [$cd3d], a ret GameCornerCoinCaseText: ; 2ff32 (b:7f32) TX_FAR _GameCornerCoinCaseText db "@" GameCornerNoCoinsText: ; 2ff37 (b:7f37) TX_FAR _GameCornerNoCoinsText db "@" SECTION "bankC",ROMX,BANK[$C] DodrioPicFront: ; 30000 (c:4000) INCBIN "pic/bmon/dodrio.pic" DodrioPicBack: ; 301a2 (c:41a2) INCBIN "pic/monback/dodriob.pic" PrimeapePicFront: ; 30247 (c:4247) INCBIN "pic/bmon/primeape.pic" PrimeapePicBack: ; 30408 (c:4408) INCBIN "pic/monback/primeapeb.pic" DugtrioPicFront: ; 30480 (c:4480) INCBIN "pic/bmon/dugtrio.pic" DugtrioPicBack: ; 3062a (c:462a) INCBIN "pic/monback/dugtriob.pic" VenomothPicFront: ; 306a9 (c:46a9) INCBIN "pic/bmon/venomoth.pic" VenomothPicBack: ; 30841 (c:4841) INCBIN "pic/monback/venomothb.pic" DewgongPicFront: ; 30899 (c:4899) INCBIN "pic/bmon/dewgong.pic" DewgongPicBack: ; 309e2 (c:49e2) INCBIN "pic/monback/dewgongb.pic" CaterpiePicFront: ; 30a49 (c:4a49) INCBIN "pic/bmon/caterpie.pic" CaterpiePicBack: ; 30ae1 (c:4ae1) INCBIN "pic/monback/caterpieb.pic" MetapodPicFront: ; 30b3a (c:4b3a) INCBIN "pic/bmon/metapod.pic" MetapodPicBack: ; 30bc8 (c:4bc8) INCBIN "pic/monback/metapodb.pic" ButterfreePicFront: ; 30c37 (c:4c37) INCBIN "pic/bmon/butterfree.pic" ButterfreePicBack: ; 30e0e (c:4e0e) INCBIN "pic/monback/butterfreeb.pic" MachampPicFront: ; 30e93 (c:4e93) INCBIN "pic/bmon/machamp.pic" MachampPicBack: ; 3108c (c:508c) INCBIN "pic/monback/machampb.pic" GolduckPicFront: ; 31108 (c:5108) INCBIN "pic/bmon/golduck.pic" GolduckPicBack: ; 312c2 (c:52c2) INCBIN "pic/monback/golduckb.pic" HypnoPicFront: ; 3135d (c:535d) INCBIN "pic/bmon/hypno.pic" HypnoPicBack: ; 31552 (c:5552) INCBIN "pic/monback/hypnob.pic" GolbatPicFront: ; 315e0 (c:55e0) INCBIN "pic/bmon/golbat.pic" GolbatPicBack: ; 3180a (c:580a) INCBIN "pic/monback/golbatb.pic" MewtwoPicFront: ; 3187f (c:587f) INCBIN "pic/bmon/mewtwo.pic" MewtwoPicBack: ; 31a85 (c:5a85) INCBIN "pic/monback/mewtwob.pic" SnorlaxPicFront: ; 31b19 (c:5b19) INCBIN "pic/bmon/snorlax.pic" SnorlaxPicBack: ; 31ce5 (c:5ce5) INCBIN "pic/monback/snorlaxb.pic" MagikarpPicFront: ; 31d31 (c:5d31) INCBIN "pic/bmon/magikarp.pic" MagikarpPicBack: ; 31ec3 (c:5ec3) INCBIN "pic/monback/magikarpb.pic" MukPicFront: ; 31f56 (c:5f56) INCBIN "pic/bmon/muk.pic" MukPicBack: ; 3215f (c:615f) INCBIN "pic/monback/mukb.pic" KinglerPicFront: ; 321ec (c:61ec) INCBIN "pic/bmon/kingler.pic" KinglerPicBack: ; 323de (c:63de) INCBIN "pic/monback/kinglerb.pic" CloysterPicFront: ; 3247f (c:647f) INCBIN "pic/bmon/cloyster.pic" CloysterPicBack: ; 326ab (c:66ab) INCBIN "pic/monback/cloysterb.pic" ElectrodePicFront: ; 32760 (c:6760) INCBIN "pic/bmon/electrode.pic" ElectrodePicBack: ; 32827 (c:6827) INCBIN "pic/monback/electrodeb.pic" ClefablePicFront: ; 3288c (c:688c) INCBIN "pic/bmon/clefable.pic" ClefablePicBack: ; 329b8 (c:69b8) INCBIN "pic/monback/clefableb.pic" WeezingPicFront: ; 32a44 (c:6a44) INCBIN "pic/bmon/weezing.pic" WeezingPicBack: ; 32c76 (c:6c76) INCBIN "pic/monback/weezingb.pic" PersianPicFront: ; 32d1e (c:6d1e) INCBIN "pic/bmon/persian.pic" PersianPicBack: ; 32f04 (c:6f04) INCBIN "pic/monback/persianb.pic" MarowakPicFront: ; 32f8f (c:6f8f) INCBIN "pic/bmon/marowak.pic" MarowakPicBack: ; 33101 (c:7101) INCBIN "pic/monback/marowakb.pic" HaunterPicFront: ; 3318a (c:718a) INCBIN "pic/bmon/haunter.pic" HaunterPicBack: ; 33345 (c:7345) INCBIN "pic/monback/haunterb.pic" AbraPicFront: ; 333cc (c:73cc) INCBIN "pic/bmon/abra.pic" AbraPicBack: ; 334cf (c:74cf) INCBIN "pic/monback/abrab.pic" AlakazamPicFront: ; 3355a (c:755a) INCBIN "pic/bmon/alakazam.pic" AlakazamPicBack: ; 33779 (c:7779) INCBIN "pic/monback/alakazamb.pic" PidgeottoPicFront: ; 3380a (c:780a) INCBIN "pic/bmon/pidgeotto.pic" PidgeottoPicBack: ; 3395b (c:795b) INCBIN "pic/monback/pidgeottob.pic" PidgeotPicFront: ; 339c2 (c:79c2) INCBIN "pic/bmon/pidgeot.pic" PidgeotPicBack: ; 33b79 (c:7b79) INCBIN "pic/monback/pidgeotb.pic" StarmiePicFront: ; 33c1c (c:7c1c) INCBIN "pic/bmon/starmie.pic" StarmiePicBack: ; 33dac (c:7dac) INCBIN "pic/monback/starmieb.pic" RedPicBack: ; 33e0a (c:7e0a) INCBIN "pic/trainer/redb.pic" OldManPic: ; 33e9a (c:7e9a) INCBIN "pic/trainer/oldman.pic" Func_33f2b: ; 33f2b (c:7f2b) ld hl, $d063 ld a, [$ff00+$f3] and a jr z, .asm_33f36 ld hl, $d068 .asm_33f36 bit 1, [hl] jr nz, .asm_33f4a set 1, [hl] ld hl, Func_3fba8 ld b, BANK(Func_3fba8) call Bankswitch ld hl, UnnamedText_33f52 jp PrintText .asm_33f4a ld hl, Func_3fb53 ld b, BANK(Func_3fb53) jp Bankswitch UnnamedText_33f52: ; 33f52 (c:7f52) TX_FAR _UnnamedText_33f52 db "@" Func_33f57: ; 33f57 (c:7f57) ld hl, W_DAMAGE ; $d0d7 xor a ld [hli], a ld [hl], a dec a ld [$d05e], a ld hl, $d02a ld de, $cffb ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_33f72 ld hl, $cffb ld de, $d02a .asm_33f72 ld a, [de] dec de ld b, a ld a, [hld] sub b ld a, [de] ld b, a ld a, [hl] sbc b jr c, .asm_33f8a ld hl, W_DAMAGE ; $d0d7 ld a, $ff ld [hli], a ld [hl], a ld a, $2 ld [$d05e], a ret .asm_33f8a ld a, $1 ld [W_MOVEMISSED], a ; $d05f ret SECTION "bankD",ROMX,BANK[$D] BulbasaurPicFront: ; 34000 (d:4000) INCBIN "pic/bmon/bulbasaur.pic" BulbasaurPicBack: ; 340e5 (d:40e5) INCBIN "pic/monback/bulbasaurb.pic" VenusaurPicFront: ; 34162 (d:4162) INCBIN "pic/bmon/venusaur.pic" VenusaurPicBack: ; 34397 (d:4397) INCBIN "pic/monback/venusaurb.pic" TentacruelPicFront: ; 34455 (d:4455) INCBIN "pic/bmon/tentacruel.pic" TentacruelPicBack: ; 345c3 (d:45c3) INCBIN "pic/monback/tentacruelb.pic" GoldeenPicFront: ; 3466f (d:466f) INCBIN "pic/bmon/goldeen.pic" GoldeenPicBack: ; 34796 (d:4796) INCBIN "pic/monback/goldeenb.pic" SeakingPicFront: ; 34803 (d:4803) INCBIN "pic/bmon/seaking.pic" SeakingPicBack: ; 34a03 (d:4a03) INCBIN "pic/monback/seakingb.pic" PonytaPicFront: ; 34ab1 (d:4ab1) INCBIN "pic/bmon/ponyta.pic" RapidashPicFront: ; 34c10 (d:4c10) INCBIN "pic/bmon/rapidash.pic" PonytaPicBack: ; 34e32 (d:4e32) INCBIN "pic/monback/ponytab.pic" RapidashPicBack: ; 34eba (d:4eba) INCBIN "pic/monback/rapidashb.pic" RattataPicFront: ; 34f6a (d:4f6a) INCBIN "pic/bmon/rattata.pic" RattataPicBack: ; 35041 (d:5041) INCBIN "pic/monback/rattatab.pic" RaticatePicFront: ; 3507a (d:507a) INCBIN "pic/bmon/raticate.pic" RaticatePicBack: ; 3520d (d:520d) INCBIN "pic/monback/raticateb.pic" NidorinoPicFront: ; 35282 (d:5282) INCBIN "pic/bmon/nidorino.pic" NidorinoPicBack: ; 353f0 (d:53f0) INCBIN "pic/monback/nidorinob.pic" NidorinaPicFront: ; 3548b (d:548b) INCBIN "pic/bmon/nidorina.pic" NidorinaPicBack: ; 355c8 (d:55c8) INCBIN "pic/monback/nidorinab.pic" GeodudePicFront: ; 3564f (d:564f) INCBIN "pic/bmon/geodude.pic" GeodudePicBack: ; 35729 (d:5729) INCBIN "pic/monback/geodudeb.pic" PorygonPicFront: ; 35784 (d:5784) INCBIN "pic/bmon/porygon.pic" PorygonPicBack: ; 358d1 (d:58d1) INCBIN "pic/monback/porygonb.pic" AerodactylPicFront: ; 35931 (d:5931) INCBIN "pic/bmon/aerodactyl.pic" AerodactylPicBack: ; 35aec (d:5aec) INCBIN "pic/monback/aerodactylb.pic" MagnemitePicFront: ; 35b87 (d:5b87) INCBIN "pic/bmon/magnemite.pic" MagnemitePicBack: ; 35c0d (d:5c0d) INCBIN "pic/monback/magnemiteb.pic" CharmanderPicFront: ; 35c5c (d:5c5c) INCBIN "pic/bmon/charmander.pic" CharmanderPicBack: ; 35d5c (d:5d5c) INCBIN "pic/monback/charmanderb.pic" SquirtlePicFront: ; 35db8 (d:5db8) INCBIN "pic/bmon/squirtle.pic" SquirtlePicBack: ; 35e8f (d:5e8f) INCBIN "pic/monback/squirtleb.pic" CharmeleonPicFront: ; 35f0c (d:5f0c) INCBIN "pic/bmon/charmeleon.pic" CharmeleonPicBack: ; 36048 (d:6048) INCBIN "pic/monback/charmeleonb.pic" WartortlePicFront: ; 360b1 (d:60b1) INCBIN "pic/bmon/wartortle.pic" WartortlePicBack: ; 361f1 (d:61f1) INCBIN "pic/monback/wartortleb.pic" CharizardPicFront: ; 36286 (d:6286) INCBIN "pic/bmon/charizard.pic" CharizardPicBack: ; 36495 (d:6495) INCBIN "pic/monback/charizardb.pic" FossilAerodactylPic: ; 36536 (d:6536) INCBIN "pic/bmon/fossilaerodactyl.pic" GhostPic: ; 366b5 (d:66b5) INCBIN "pic/other/ghost.pic" OddishPicFront: ; 3680b (d:680b) INCBIN "pic/bmon/oddish.pic" OddishPicBack: ; 368a9 (d:68a9) INCBIN "pic/monback/oddishb.pic" GloomPicFront: ; 36941 (d:6941) INCBIN "pic/bmon/gloom.pic" GloomPicBack: ; 36a78 (d:6a78) INCBIN "pic/monback/gloomb.pic" VileplumePicFront: ; 36b21 (d:6b21) INCBIN "pic/bmon/vileplume.pic" VileplumePicBack: ; 36c82 (d:6c82) INCBIN "pic/monback/vileplumeb.pic" BellsproutPicFront: ; 36d00 (d:6d00) INCBIN "pic/bmon/bellsprout.pic" BellsproutPicBack: ; 36dba (d:6dba) INCBIN "pic/monback/bellsproutb.pic" WeepinbellPicFront: ; 36e30 (d:6e30) INCBIN "pic/bmon/weepinbell.pic" WeepinbellPicBack: ; 36f6f (d:6f6f) INCBIN "pic/monback/weepinbellb.pic" VictreebelPicFront: ; 36fea (d:6fea) INCBIN "pic/bmon/victreebel.pic" VictreebelPicBack: ; 371b2 (d:71b2) INCBIN "pic/monback/victreebelb.pic" TitleScroll_WaitBall: ; 37244 (d:7244) ; Wait around for the TitleBall animation to play out. ; hi: speed ; lo: duration db $05, $05, 0 TitleScroll_In: ; 37247 (d:7247) ; Scroll a TitleMon in from the right. ; hi: speed ; lo: duration db $a2, $94, $84, $63, $52, $31, $11, 0 TitleScroll_Out: ; 3724f (d:724f) ; Scroll a TitleMon out to the left. ; hi: speed ; lo: duration db $12, $22, $32, $42, $52, $62, $83, $93, 0 TitleScroll: ; 37258 (d:7258) ld a, d ld bc, TitleScroll_In ld d, $88 ld e, 0 ; don't animate titleball and a jr nz, .ok ld bc, TitleScroll_Out ld d, $00 ld e, 0 ; don't animate titleball .ok _TitleScroll: ; 3726a (d:726a) ld a, [bc] and a ret z inc bc push bc ld b, a and $f ld c, a ld a, b and $f0 swap a ld b, a .loop ld h, d ld l, $48 call .ScrollBetween ld h, $00 ld l, $88 call .ScrollBetween ld a, d add b ld d, a call GetTitleBallY dec c jr nz, .loop pop bc jr _TitleScroll .ScrollBetween ; 37292 (d:7292) .wait ld a, [$FF00+$44] ; rLY cp l jr nz, .wait ld a, h ld [rSCX], a ; $FF00+$43 .wait2 ld a, [$FF00+$44] ; rLY cp h jr z, .wait2 ret TitleBallYTable: ; 372a0 (d:72a0) ; OBJ y-positions for the Poke Ball held by Red in the title screen. ; This is really two 0-terminated lists. Initiated with an index of 1. db 0, $71, $6f, $6e, $6d, $6c, $6d, $6e, $6f, $71, $74, 0 Func_372ac: ; 372ac (d:72ac) ; Animate the TitleBall if a starter just got scrolled out. ld a, [wWhichTrade] ; $cd3d cp CHARMANDER jr z, .ok cp SQUIRTLE jr z, .ok cp BULBASAUR ret nz .ok ld e, 1 ; animate titleball ld bc, TitleScroll_WaitBall ld d, 0 jp _TitleScroll GetTitleBallY: ; 372c4 (d:72c4) ; Get position e from TitleBallYTable push de push hl xor a ld d, a ld hl, TitleBallYTable add hl, de ld a, [hl] pop hl pop de and a ret z ld [$c328], a inc e ret Func_372d6: ; 372d6 (d:72d6) call LoadTextBoxTilePatterns FuncCoord 3, 4 ; $c3f3 ld hl, Coord ld b, $7 ld c, $c call TextBoxBorder FuncCoord 4, 5 ; $c408 ld hl, Coord ld de, W_PLAYERNAME ; $d158 call PlaceString FuncCoord 4, 10 ; $c46c ld hl, Coord ld de, W_GRASSRATE ; $d887 call PlaceString FuncCoord 9, 8 ; $c449 ld hl, Coord ld a, $69 ld [hli], a ld [hl], $6a xor a ld [$cfcb], a ld hl, Func_3a948 ld b, BANK(Func_3a948) call Bankswitch ld c, $96 jp DelayFrames Func_3730e: ; 3730e (d:730e) call SaveScreenTilesToBuffer2 ld a, BANK(DisplayTextIDInit) ld [$cf0c], a ld b, a ld hl, DisplayTextIDInit call Bankswitch ld hl, PlaySlotMachineText call PrintText call YesNoChoice ld a, [wCurrentMenuItem] and a jr nz, .skip dec a ld [$cfcb], a ld hl, $cd4f xor a ld [hli], a ld [hl], $2 ld a, $4c call Predef call GBPalWhiteOutWithDelay3 call Func_378a8 call LoadFontTilePatterns ld b, $5 call GoPAL_SET call GBPalNormal ld a, $e4 ld [$ff48], a ld hl, $d730 set 6, [hl] xor a ld [W_SUBANIMSUBENTRYADDR], a ld hl, wTrainerSpriteOffset ld bc, $0014 call FillMemory call Func_37395 ld hl, $d730 res 6, [hl] xor a ld [W_SUBANIMSUBENTRYADDR], a call GBPalWhiteOutWithDelay3 ld a, $1 ld [$cfcb], a call GoPAL_SET_CF1C call Func_3e08 call ReloadTilesetTilePatterns .skip call LoadScreenTilesFromBuffer2 call Delay3 call GBPalNormal ld a, [$cc5e] push af jp CloseTextDisplay PlaySlotMachineText: ; 37390 (d:7390) TX_FAR _PlaySlotMachineText db "@" Func_37395: ; 37395 (d:7395) call Func_37754 xor a ld hl, $cd4a ld [hli], a ld [hl], a call Func_3775f ld hl, BetHowManySlotMachineText call PrintText call SaveScreenTilesToBuffer1 .loop ld a, $3 ld [wMenuWatchedKeys], a ld a, $2 ld [wMaxMenuItem], a ld a, $c ld [wTopMenuItemY], a ld a, $f ld [wTopMenuItemX], a xor a ld [wCurrentMenuItem], a ld [wLastMenuItem], a ld [$cc37], a ld hl, $c48a ld b, $5 ld c, $4 call TextBoxBorder ld hl, $c4a0 ld de, CoinMultiplierSlotMachineText call PlaceString call HandleMenuInput and $2 jp nz, LoadScreenTilesFromBuffer1 ld a, [wCurrentMenuItem] ld b, a ld a, $3 sub b ld [$cd50], a ld hl, wPlayerCoins ld c, a ld a, [hli] and a jr nz, .skip1 ld a, [hl] cp c jr nc, .skip1 ld hl, NotEnoughCoinsSlotMachineText call PrintText jr .loop .skip1 call LoadScreenTilesFromBuffer1 call Func_37741 call Func_377d5 call Func_37480 ld a, $4 ld hl, $cd4d ld [hli], a ld [hli], a ld [hl], a call WaitForSoundToFinish ld a, $c0 call PlaySound ld hl, StartSlotMachineText call PrintText call Func_374ad call Func_37588 ld hl, wPlayerCoins ld a, [hli] or [hl] jr nz, .skip2 ld hl, OutOfCoinsSlotMachineText call PrintText ld c, $3c jp DelayFrames .skip2 ld hl, OneMoreGoSlotMachineText call PrintText ld hl, $c49e ld bc, $0d0f xor a ld [$d12c], a ld a, $14 ld [$d125], a call DisplayTextBoxID ld a, [wCurrentMenuItem] and a ret nz call Func_377ce jp Func_37395 CoinMultiplierSlotMachineText: ; 3745e (d:745e) db "×3" next "×2" next "×1@" OutOfCoinsSlotMachineText: ; 37467 (d:7467) TX_FAR _OutOfCoinsSlotMachineText db "@" BetHowManySlotMachineText: ; 3746c (d:746c) TX_FAR _BetHowManySlotMachineText db "@" StartSlotMachineText: ; 37471 (d:7471) TX_FAR _StartSlotMachineText db "@" NotEnoughCoinsSlotMachineText: ; 37476 (d:7476) TX_FAR _NotEnoughCoinsSlotMachineText db "@" OneMoreGoSlotMachineText: ; 3747b (d:747b) TX_FAR _OneMoreGoSlotMachineText db "@" Func_37480: ; 37480 (d:7480) ld hl, $cd4c bit 7, [hl] ret nz ld a, [W_SUBANIMSUBENTRYADDR] and a jr nz, .skip1 call GenRandom and a jr z, .skip2 ld b, a ld a, [$cc5b] cp b jr c, .skip3 ld a, $d2 cp b jr c, .skip1 ld [hl], $0 ret .skip1 set 6, [hl] ret .skip2 ld a, $3c ld [W_SUBANIMSUBENTRYADDR], a ret .skip3 set 7, [hl] ret Func_374ad: ; 374ad (d:74ad) ld c, $14 .loop1 push bc call Func_37813 call Func_37823 call Func_37833 ld c, $2 call DelayFrames pop bc dec c jr nz, .loop1 xor a ld [wTrainerSpriteOffset], a .loop2 call Func_37882 call Func_374df call Func_374fb call Func_37517 ret c ld a, [$cf1b] xor $1 inc a ld c, a call DelayFrames jr .loop2 Func_374df: ; 374df (d:74df) ld a, [wTrainerSpriteOffset] cp $1 jr c, .skip ld de, wTrainerEngageDistance ld a, [de] rra jr nc, .skip ld hl, $cd4d ld a, [hl] and a ret z dec [hl] call Func_3752c ret nz .skip jp Func_37813 Func_374fb: ; 374fb (d:74fb) ld a, [wTrainerSpriteOffset] cp $2 jr c, .skip ld de, wTrainerFacingDirection ld a, [de] rra jr nc, .skip ld hl, $cd4e ld a, [hl] and a ret z dec [hl] call Func_37552 ret z .skip jp Func_37823 Func_37517: ; 37517 (d:7517) ld a, [wTrainerSpriteOffset] cp $3 jr c, .skip ld de, wTrainerScreenY ld a, [de] rra jr nc, .skip scf ret .skip call Func_37833 and a ret Func_3752c: ; 3752c (d:752c) call Func_376c0 ld hl, wTrainerScreenX ld a, [$cd4c] and $80 jr nz, .skip1 inc hl ld a, [hl] cp $a jr nz, .skip2 ret .skip1 ld c, $3 .loop ld a, [hli] cp $2 jr c, .skip2 dec c jr nz, .loop ret .skip2 inc a ld hl, $cd4d ld [hl], $0 ret Func_37552: ; 37552 (d:7552) call Func_376b4 ld a, [$cd4c] and $80 jr nz, .skip1 call Func_3756e ret nz jr .skip2 .skip1 call Func_3756e ld a, [de] cp $7 ret nc .skip2 xor a ld [$cd4e], a ret Func_3756e: ; 3756e (d:756e) ld hl, wTrainerScreenX ld de, $cd44 ld a, [de] cp [hl] ret z inc de ld a, [de] cp [hl] ret z inc hl cp [hl] ret z inc hl cp [hl] ret z inc de ld a, [de] cp [hl] ret z dec de dec de ret Func_37588: ; 37588 (d:7588) call Func_376a8 ld a, [$cd50] cp $2 jr z, .skip1 cp $1 jr z, .skip2 ld hl, wTrainerScreenX ld de, $cd45 ld bc, $cd49 call Func_376a2 jp z, .skip5 ld hl, $cd43 ld de, $cd45 ld bc, $cd47 call Func_376a2 jr z, .skip5 .skip1 ld hl, $cd43 ld de, $cd46 ld bc, $cd49 call Func_376a2 jr z, .skip5 ld hl, wTrainerScreenX ld de, $cd44 ld bc, $cd47 call Func_376a2 jr z, .skip5 .skip2 ld hl, $cd42 ld de, $cd45 ld bc, $cd48 call Func_376a2 jr z, .skip5 ld a, [$cd4c] and $c0 jr z, .skip3 ld hl, $cd4f dec [hl] jr nz, .skip4 .skip3 ld hl, UnnamedText_3769d call PrintText .loop xor a ld [$c002], a ret .skip4 call Func_37833 call DelayFrame call Func_37833 call DelayFrame jp Func_37588 .skip5 ld a, [$cd4c] and $c0 jr z, .skip4 and $80 jr nz, .skip6 ld a, [hl] cp $7 jr c, .skip4 .skip6 ld a, [hl] sub $2 ld [wTrainerScreenX], a ld hl, SlotRewardPointers ld c, a ld b, $0 add hl, bc ld a, [hli] ld e, a ld a, [hli] ld d, a push de ld a, [hli] ld h, [hl] ld l, a ld de, $cf4b ld bc, $0004 call CopyData pop hl ld de, .asm_37638 push de jp [hl] .asm_37638 ld a, [$ff47] xor $40 ld [$ff47], a ld c, $5 call DelayFrames dec b jr nz, .asm_37638 ld hl, $cd4a ld [hl], d inc hl ld [hl], e call Func_3775f ld hl, UnnamedText_37665 call PrintText call WaitForTextScrollButtonPress call Func_3776b call Func_3775f ld a, $e4 ld [$ff48], a jp .loop UnnamedText_37665: ; 37665 (d:7665) db $08 ; asm push bc call Func_37728 ld hl, UnnamedText_37673 pop bc inc bc inc bc inc bc inc bc ret UnnamedText_37673: ; 37673 (d:7673) TX_FAR _UnnamedText_37673 db "@" SlotRewardPointers: ; 37678 (d:7678) dw SlotReward300Func dw SlotReward300Text dw SlotReward100Func dw SlotReward100Text dw SlotReward8Func dw SlotReward8Text dw SlotReward15Func dw SlotReward15Text dw SlotReward15Func dw SlotReward15Text dw SlotReward15Func dw SlotReward15Text SlotReward300Text: ; 37690 (d:7690) db "300@" SlotReward100Text: ; 37694 (d:7694) db "100@" SlotReward8Text: ; 37698 (d:7698) db "8@" SlotReward15Text: ; 3769a (d:769a) db "15@" UnnamedText_3769d: ; 3769d (d:769d) TX_FAR _UnnamedText_3769d db "@" Func_376a2: ; 376a2 (d:76a2) ld a, [de] cp [hl] ret nz ld a, [bc] cp [hl] ret Func_376a8: ; 376a8 (d:76a8) ld de, $cd47 ld hl, SlotMachineWheel3 ld a, [wTrainerScreenY] call Func_376c9 Func_376b4: ; 376b4 (d:76b4) ld de, $cd44 ld hl, SlotMachineWheel2 ld a, [wTrainerFacingDirection] call Func_376c9 Func_376c0: ; 376c0 (d:76c0) ld de, wTrainerScreenX ld hl, SlotMachineWheel1 ld a, [wTrainerEngageDistance] Func_376c9: ; 376c9 (d:76c9) ld c, a ld b, $0 add hl, bc ld c, $3 .loop ld a, [hli] ld [de], a inc de inc hl dec c jr nz, .loop ret SlotReward8Func: ; 376d7 (d:76d7) ld hl, W_SUBANIMSUBENTRYADDR ld a, [hl] and a jr z, .skip dec [hl] .skip ld b, $2 ld de, 8 ret SlotReward15Func: ; 376e5 (d:76e5) ld hl, W_SUBANIMSUBENTRYADDR ld a, [hl] and a jr z, .skip dec [hl] .skip ld b, $4 ld de, 15 ret SlotReward100Func: ; 376f3 (d:76f3) ld a, $94 call PlaySound xor a ld [$cd4c], a ld b, $8 ld de, 100 ret SlotReward300Func: ; 37702 (d:7702) ld hl, UnnamedText_37722 call PrintText ld a, $89 call PlaySound call GenRandom cp $80 ld a, $0 jr c, .skip ld [$cd4c], a .skip ld [W_SUBANIMSUBENTRYADDR], a ld b, $14 ld de, 300 ret UnnamedText_37722: ; 37722 (d:7722) TX_FAR _UnnamedText_37722 db $0a, "@" Func_37728: ; 37728 (d:7728) ld hl, $c4ba ld a, [wTrainerScreenX] add $25 ld [hli], a inc a ld [hld], a inc a ld de, $ffec add hl, de ld [hli], a inc a ld [hl], a ld hl, $c4f2 ld [hl], $ee ret Func_37741: ; 37741 (d:7741) ld hl, $cd4b ld a, [$cd50] ld [hld], a xor a ld [hli], a ld de, $d5a5 ld c, $2 ld a, $c call Predef Func_37754: ; 37754 (d:7754) ld hl, $c3b9 ld de, wPlayerCoins ld c, $2 jp PrintBCDNumber Func_3775f: ; 3775f (d:775f) ld hl, $c3bf ld de, $cd4a ld bc, $8204 jp PrintNumber Func_3776b: ; 3776b (d:776b) ld a, $1 ld [$c002], a call WaitForSoundToFinish ld hl, $cd46 xor a ld [hli], a inc a ld [hl], a ld a, $5 ld [W_SUBANIMTRANSFORM], a .loop ld a, [$cd4b] ld l, a ld a, [$cd4a] ld h, a or l ret z ld de, $ffff add hl, de ld a, l ld [$cd4b], a ld a, h ld [$cd4a], a ld hl, $cd47 ld de, $d5a5 ld c, $2 ld a, $b call Predef call Func_37754 call Func_3775f ld a, $bf call PlaySound ld a, [W_SUBANIMTRANSFORM] dec a jr nz, .skip1 ld a, [$ff48] xor $40 ld [$ff48], a ld a, $5 .skip1 ld [W_SUBANIMTRANSFORM], a ld a, [wTrainerScreenX] cp $7 ld c, $8 jr nc, .skip2 srl c .skip2 call DelayFrames jr .loop Func_377ce: ; 377ce (d:77ce) ld a, $23 ld [$d08a], a jr Func_377e3 Func_377d5: ; 377d5 (d:77d5) ld a, $14 ld [$d08a], a ld a, [$cd50] dec a jr z, Func_377fb dec a jr z, Func_377ef Func_377e3: ; 377e3 (d:77e3) ld hl, $c3cb call Func_377fe ld hl, $c46b call Func_377fe Func_377ef: ; 377ef (d:77ef) ld hl, $c3f3 call Func_377fe ld hl, $c443 call Func_377fe Func_377fb: ; 377fb (d:77fb) ld hl, $c41b Func_377fe: ; 377fe (d:77fe) ld a, [$d08a] ld [hl], a ld bc, $000d add hl, bc ld [hl], a ld bc, $0007 add hl, bc inc a ld [hl], a ld bc, $000d add hl, bc ld [hl], a ret Func_37813: ; 37813 (d:7813) ld bc, SlotMachineWheel1 ld de, wTrainerEngageDistance ld hl, wOAMBuffer ld a, $30 ld [W_BASECOORDX], a jr Func_37841 Func_37823: ; 37823 (d:7823) ld bc, SlotMachineWheel2 ld de, wTrainerFacingDirection ld hl, $c330 ld a, $50 ld [W_BASECOORDX], a jr Func_37841 Func_37833: ; 37833 (d:7833) ld bc, SlotMachineWheel3 ld de, wTrainerScreenY ld hl, $c360 ld a, $70 ld [W_BASECOORDX], a Func_37841: ; 37841 (d:7841) ld a, $58 ld [W_BASECOORDY], a push de ld a, [de] ld d, b add c ld e, a jr nc, Func_3784e inc d Func_3784e: ; 3784e (d:784e) ld a, [W_BASECOORDY] ld [hli], a ld a, [W_BASECOORDX] ld [hli], a ld a, [de] ld [hli], a ld a, $80 ld [hli], a ld a, [W_BASECOORDY] ld [hli], a ld a, [W_BASECOORDX] add $8 ld [hli], a ld a, [de] inc a ld [hli], a ld a, $80 ld [hli], a inc de ld a, [W_BASECOORDY] sub $8 ld [W_BASECOORDY], a cp $28 jr nz, Func_3784e pop de ld a, [de] inc a cp $1e jr nz, .skip xor a .skip ld [de], a ret Func_37882: ; 37882 (d:7882) call DelayFrame call GetJoypadStateLowSensitivity ld a, [$ffb5] and $1 ret z ld hl, wTrainerSpriteOffset ld a, [hl] dec a ld de, $cd4d jr z, .skip dec a ld de, $cd4e jr z, .skip .loop inc [hl] ld a, $be jp PlaySound .skip ld a, [de] and a ret nz jr .loop Func_378a8: ; 378a8 (d:78a8) call DisableLCD ld hl, SlotMachineTiles2 ld de, $8000 ld bc, $01c0 ld a, BANK(SlotMachineTiles2) call FarCopyData2 ld hl, SlotMachineTiles1 ld de, $9000 ld bc, $0250 ld a, BANK(SlotMachineTiles1) call FarCopyData2 ld hl, SlotMachineTiles2 ld de, $9250 ld bc, $01c0 ld a, BANK(SlotMachineTiles2) call FarCopyData2 ld hl, SlotMachineMap ld de, wTileMap ld bc, $00f0 call CopyData call EnableLCD ld hl, wTrainerEngageDistance ld a, $1c ld [hli], a ld [hli], a ld [hl], a call Func_37813 call Func_37823 jp Func_37833 SlotMachineMap: ; 378f5 (d:78f5) INCBIN "gfx/tilemaps/slotmachine.map" SLOTS7 EQU $0200 SLOTSBAR EQU $0604 SLOTSCHERRY EQU $0A08 SLOTSFISH EQU $0E0C SLOTSBIRD EQU $1210 SLOTSMOUSE EQU $1614 SlotMachineWheel1: ; 379e5 (d:79e5) dw SLOTS7 dw SLOTSMOUSE dw SLOTSFISH dw SLOTSBAR dw SLOTSCHERRY dw SLOTS7 dw SLOTSFISH dw SLOTSBIRD dw SLOTSBAR dw SLOTSCHERRY dw SLOTS7 dw SLOTSMOUSE dw SLOTSBIRD dw SLOTSBAR dw SLOTSCHERRY dw SLOTS7 dw SLOTSMOUSE dw SLOTSFISH SlotMachineWheel2: ; 37a09 (d:7a09) dw SLOTS7 dw SLOTSFISH dw SLOTSCHERRY dw SLOTSBIRD dw SLOTSMOUSE dw SLOTSBAR dw SLOTSCHERRY dw SLOTSFISH dw SLOTSBIRD dw SLOTSCHERRY dw SLOTSBAR dw SLOTSFISH dw SLOTSBIRD dw SLOTSCHERRY dw SLOTSMOUSE dw SLOTS7 dw SLOTSFISH dw SLOTSCHERRY SlotMachineWheel3: ; 37a2d (d:7a2d) dw SLOTS7 dw SLOTSBIRD dw SLOTSFISH dw SLOTSCHERRY dw SLOTSMOUSE dw SLOTSBIRD dw SLOTSFISH dw SLOTSCHERRY dw SLOTSMOUSE dw SLOTSBIRD dw SLOTSFISH dw SLOTSCHERRY dw SLOTSMOUSE dw SLOTSBIRD dw SLOTSBAR dw SLOTS7 dw SLOTSBIRD dw SLOTSFISH SlotMachineTiles1: ; 37a51 (d:7a51) IF _RED INCBIN "gfx/red/slotmachine1.2bpp" ENDC IF _BLUE INCBIN "gfx/blue/slotmachine1.2bpp" ENDC Func_37ca1: ; 37ca1 (d:7ca1) ld hl, $ccd3 ld a, [$cd38] dec a ld [$cd38], a ld d, 0 ld e, a add hl, de ld d, h ld e, l ld hl, PointerTable_37ce6 ld a, [$d12f] add a ld b, 0 ld c, a add hl, bc ld a, [hli] ld h, [hl] ld l, a ld a, [W_YCOORD] ld b, a ld a, [W_XCOORD] ld c, a .asm_37cc7 ld a, [hli] cp b jr nz, .asm_37ce1 ld a, [hli] cp c jr nz, .asm_37ce2 ld a, [hli] ld h, [hl] ld l, a .asm_37cd2 ld a, [hli] cp $ff ret z ld [de], a inc de ld a, [$cd38] inc a ld [$cd38], a jr .asm_37cd2 .asm_37ce1 inc hl .asm_37ce2 inc hl inc hl jr .asm_37cc7 PointerTable_37ce6: ; 37ce6 (d:7ce6) dw PewterMuseumGuyCoords dw PewterGymGuyCoords ; these are the four coordinates of the spaces below, above, to the left and ; to the right of the museum guy, and pointers to different movements for ; the player to make to get positioned before the main movement. PewterMuseumGuyCoords: ; 37cea (d:7cea) db 18, 27 dw .down db 16, 27 dw .up db 17, 26 dw .left db 17, 28 dw .right .down db $40, $40, $ff .up db $10, $20, $ff .left db $40, $10, $ff .right db $40, $20, $ff ; these are the five coordinates which trigger the gym guy and pointers to ; different movements for the player to make to get positioned before the ; main movement PewterGymGuyCoords: ; 37d06 (d:7d06) db 16, 34 dw .one db 17, 35 dw .two db 18, 37 dw .three db 19, 37 dw .four db 17, 36 dw .five .one db $20, $80, $80, $10, $ff .two db $20, $80, $10, $20, $ff .three db $20, $20, $20, $00, $00, $00, $00, $00, $00, $00, $00, $ff .four db $20, $20, $40, $20, $ff .five db $20, $80, $20, $00, $00, $00, $00, $00, $00, $00, $00, $ff _Multiply: ; 37d41 (d:7d41) ld a, $8 ld b, a xor a ld [H_DIVIDEND], a ; $FF00+$95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) ld [$FF00+$9b], a ld [H_SAVEDNUMTOPRINT], a ; $FF00+$9c ld [$FF00+$9d], a ld [$FF00+$9e], a .asm_37d4f ld a, [H_REMAINDER] ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) srl a ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) jr nc, .asm_37d77 ld a, [$FF00+$9e] ld c, a ld a, [$FF00+$98] add c ld [$FF00+$9e], a ld a, [$FF00+$9d] ld c, a ld a, [$FF00+$97] adc c ld [$FF00+$9d], a ld a, [H_SAVEDNUMTOPRINT] ; $FF00+$9c ld c, a ld a, [H_NUMTOPRINT] ; $FF00+$96 (aliases: H_MULTIPLICAND) adc c ld [H_SAVEDNUMTOPRINT], a ; $FF00+$9c ld a, [$FF00+$9b] ld c, a ld a, [H_DIVIDEND] ; $FF00+$95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) adc c ld [$FF00+$9b], a .asm_37d77 dec b jr z, .asm_37d94 ld a, [$FF00+$98] sla a ld [$FF00+$98], a ld a, [$FF00+$97] rl a ld [$FF00+$97], a ld a, [H_NUMTOPRINT] ; $FF00+$96 (aliases: H_MULTIPLICAND) rl a ld [H_NUMTOPRINT], a ; $FF00+$96 (aliases: H_MULTIPLICAND) ld a, [H_DIVIDEND] ; $FF00+$95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) rl a ld [H_DIVIDEND], a ; $FF00+$95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) jr .asm_37d4f .asm_37d94 ld a, [$FF00+$9e] ld [$FF00+$98], a ld a, [$FF00+$9d] ld [$FF00+$97], a ld a, [H_SAVEDNUMTOPRINT] ; $FF00+$9c ld [H_NUMTOPRINT], a ; $FF00+$96 (aliases: H_MULTIPLICAND) ld a, [$FF00+$9b] ld [H_DIVIDEND], a ; $FF00+$95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) ret _Divide: ; 37da5 (d:7da5) xor a ld [$FF00+$9a], a ld [$FF00+$9b], a ld [H_SAVEDNUMTOPRINT], a ; $FF00+$9c ld [$FF00+$9d], a ld [$FF00+$9e], a ld a, $9 ld e, a .asm_37db3 ld a, [$FF00+$9a] ld c, a ld a, [H_NUMTOPRINT] ; $FF00+$96 (aliases: H_MULTIPLICAND) sub c ld d, a ld a, [H_REMAINDER] ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) ld c, a ld a, [H_DIVIDEND] ; $FF00+$95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) sbc c jr c, .asm_37dce ld [H_DIVIDEND], a ; $FF00+$95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) ld a, d ld [H_NUMTOPRINT], a ; $FF00+$96 (aliases: H_MULTIPLICAND) ld a, [$FF00+$9e] inc a ld [$FF00+$9e], a jr .asm_37db3 .asm_37dce ld a, b cp $1 jr z, .asm_37e18 ld a, [$FF00+$9e] sla a ld [$FF00+$9e], a ld a, [$FF00+$9d] rl a ld [$FF00+$9d], a ld a, [H_SAVEDNUMTOPRINT] ; $FF00+$9c rl a ld [H_SAVEDNUMTOPRINT], a ; $FF00+$9c ld a, [$FF00+$9b] rl a ld [$FF00+$9b], a dec e jr nz, .asm_37e04 ld a, $8 ld e, a ld a, [$FF00+$9a] ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) xor a ld [$FF00+$9a], a ld a, [H_NUMTOPRINT] ; $FF00+$96 (aliases: H_MULTIPLICAND) ld [H_DIVIDEND], a ; $FF00+$95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) ld a, [$FF00+$97] ld [H_NUMTOPRINT], a ; $FF00+$96 (aliases: H_MULTIPLICAND) ld a, [$FF00+$98] ld [$FF00+$97], a .asm_37e04 ld a, e cp $1 jr nz, .asm_37e0a dec b .asm_37e0a ld a, [H_REMAINDER] ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) srl a ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) ld a, [$FF00+$9a] rr a ld [$FF00+$9a], a jr .asm_37db3 .asm_37e18 ld a, [H_NUMTOPRINT] ; $FF00+$96 (aliases: H_MULTIPLICAND) ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) ld a, [$FF00+$9e] ld [$FF00+$98], a ld a, [$FF00+$9d] ld [$FF00+$97], a ld a, [H_SAVEDNUMTOPRINT] ; $FF00+$9c ld [H_NUMTOPRINT], a ; $FF00+$96 (aliases: H_MULTIPLICAND) ld a, [$FF00+$9b] ld [H_DIVIDEND], a ; $FF00+$95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) ret Func_37e2d: ; 37e2d (d:7e2d) ld a, [wTrainerSpriteOffset] cp $fd jr z, .asm_37e66 cp $fe jr z, .asm_37e6a cp $ff jr z, .asm_37e6e ld b, BANK(Func_2ff09) ld hl, Func_2ff09 call Bankswitch ld a, [wTrainerSpriteOffset] and a ret z ld a, [$cd05] ld b, a ld a, [wTrainerFacingDirection] inc a cp b jr z, .asm_37e58 ld a, $fd jr .asm_37e5a .asm_37e58 ld a, $fa .asm_37e5a ld [$cc5b], a ld a, [H_LOADEDROMBANK] ld [$cc5e], a call Func_3730e ret .asm_37e66 ld a, $28 jr .asm_37e70 .asm_37e6a ld a, $29 jr .asm_37e70 .asm_37e6e ld a, $2a .asm_37e70 push af call EnableAutoTextBoxDrawing pop af call Func_3ef5 ret GameCornerOutOfOrderText: ; 37e79 (d:7e79) TX_FAR _GameCornerOutOfOrderText db "@" GameCornerOutToLunchText: ; 37e7e (d:7e7e) TX_FAR _GameCornerOutToLunchText db "@" GameCornerSomeonesKeysText: ; 37e83 (d:7e83) TX_FAR _GameCornerSomeonesKeysText db "@" SECTION "bankE",ROMX,BANK[$E] Moves: ; 38000 (e:4000) ; characteristics of each move ; animation, effect, power, type, accuracy, PP db POUND ,NO_ADDITIONAL_EFFECT ,$28,NORMAL, $FF,35 db KARATE_CHOP ,NO_ADDITIONAL_EFFECT ,$32,NORMAL, $FF,25 db DOUBLESLAP ,TWO_TO_FIVE_ATTACKS_EFFECT,$0F,NORMAL, $D8,10 db COMET_PUNCH ,TWO_TO_FIVE_ATTACKS_EFFECT,$12,NORMAL, $D8,15 db MEGA_PUNCH ,NO_ADDITIONAL_EFFECT ,$50,NORMAL, $D8,20 db PAY_DAY ,PAY_DAY_EFFECT ,$28,NORMAL, $FF,20 db FIRE_PUNCH ,BURN_SIDE_EFFECT1 ,$4B,FIRE, $FF,15 db ICE_PUNCH ,FREEZE_SIDE_EFFECT ,$4B,ICE, $FF,15 db THUNDERPUNCH,PARALYZE_SIDE_EFFECT1 ,$4B,ELECTRIC,$FF,15 db SCRATCH ,NO_ADDITIONAL_EFFECT ,$28,NORMAL, $FF,35 db VICEGRIP ,NO_ADDITIONAL_EFFECT ,$37,NORMAL, $FF,30 db GUILLOTINE ,OHKO_EFFECT ,$01,NORMAL, $4C,5 db RAZOR_WIND ,CHARGE_EFFECT ,$50,NORMAL, $BF,10 db SWORDS_DANCE,ATTACK_UP2_EFFECT ,$00,NORMAL, $FF,30 db CUT ,NO_ADDITIONAL_EFFECT ,$32,NORMAL, $F2,30 db GUST ,NO_ADDITIONAL_EFFECT ,$28,NORMAL, $FF,35 db WING_ATTACK ,NO_ADDITIONAL_EFFECT ,$23,FLYING, $FF,35 db WHIRLWIND ,SWITCH_AND_TELEPORT_EFFECT,$00,NORMAL, $D8,20 db FLY ,FLY_EFFECT ,$46,FLYING, $F2,15 db BIND ,TRAPPING_EFFECT ,$0F,NORMAL, $BF,20 db SLAM ,NO_ADDITIONAL_EFFECT ,$50,NORMAL, $BF,20 db VINE_WHIP ,NO_ADDITIONAL_EFFECT ,$23,GRASS, $FF,10 db STOMP ,FLINCH_SIDE_EFFECT2 ,$41,NORMAL, $FF,20 db DOUBLE_KICK ,ATTACK_TWICE_EFFECT ,$1E,FIGHTING,$FF,30 db MEGA_KICK ,NO_ADDITIONAL_EFFECT ,$78,NORMAL, $BF,5 db JUMP_KICK ,JUMP_KICK_EFFECT ,$46,FIGHTING,$F2,25 db ROLLING_KICK,FLINCH_SIDE_EFFECT2 ,$3C,FIGHTING,$D8,15 db SAND_ATTACK ,ACCURACY_DOWN1_EFFECT ,$00,NORMAL, $FF,15 db HEADBUTT ,FLINCH_SIDE_EFFECT2 ,$46,NORMAL, $FF,15 db HORN_ATTACK ,NO_ADDITIONAL_EFFECT ,$41,NORMAL, $FF,25 db FURY_ATTACK ,TWO_TO_FIVE_ATTACKS_EFFECT,$0F,NORMAL, $D8,20 db HORN_DRILL ,OHKO_EFFECT ,$01,NORMAL, $4C,5 db TACKLE ,NO_ADDITIONAL_EFFECT ,$23,NORMAL, $F2,35 db BODY_SLAM ,PARALYZE_SIDE_EFFECT2 ,$55,NORMAL, $FF,15 db WRAP ,TRAPPING_EFFECT ,$0F,NORMAL, $D8,20 db TAKE_DOWN ,RECOIL_EFFECT ,$5A,NORMAL, $D8,20 db THRASH ,THRASH_PETAL_DANCE_EFFECT ,$5A,NORMAL, $FF,20 db DOUBLE_EDGE ,RECOIL_EFFECT ,$64,NORMAL, $FF,15 db TAIL_WHIP ,DEFENSE_DOWN1_EFFECT ,$00,NORMAL, $FF,30 db POISON_STING,POISON_SIDE_EFFECT1 ,$0F,POISON, $FF,35 db TWINEEDLE ,TWINEEDLE_EFFECT ,$19,BUG, $FF,20 db PIN_MISSILE ,TWO_TO_FIVE_ATTACKS_EFFECT,$0E,BUG, $D8,20 db LEER ,DEFENSE_DOWN1_EFFECT ,$00,NORMAL, $FF,30 db BITE ,FLINCH_SIDE_EFFECT1 ,$3C,NORMAL, $FF,25 db GROWL ,ATTACK_DOWN1_EFFECT ,$00,NORMAL, $FF,40 db ROAR ,SWITCH_AND_TELEPORT_EFFECT,$00,NORMAL, $FF,20 db SING ,SLEEP_EFFECT ,$00,NORMAL, $8C,15 db SUPERSONIC ,CONFUSION_EFFECT ,$00,NORMAL, $8C,20 db SONICBOOM ,SPECIAL_DAMAGE_EFFECT ,$01,NORMAL, $E5,20 db DISABLE ,DISABLE_EFFECT ,$00,NORMAL, $8C,20 db ACID ,DEFENSE_DOWN_SIDE_EFFECT ,$28,POISON, $FF,30 db EMBER ,BURN_SIDE_EFFECT1 ,$28,FIRE, $FF,25 db FLAMETHROWER,BURN_SIDE_EFFECT1 ,$5F,FIRE, $FF,15 db MIST ,MIST_EFFECT ,$00,ICE, $FF,30 db WATER_GUN ,NO_ADDITIONAL_EFFECT ,$28,WATER, $FF,25 db HYDRO_PUMP ,NO_ADDITIONAL_EFFECT ,$78,WATER, $CC,5 db SURF ,NO_ADDITIONAL_EFFECT ,$5F,WATER, $FF,15 db ICE_BEAM ,FREEZE_SIDE_EFFECT ,$5F,ICE, $FF,10 db BLIZZARD ,FREEZE_SIDE_EFFECT ,$78,ICE, $E5,5 db PSYBEAM ,CONFUSION_SIDE_EFFECT ,$41,PSYCHIC, $FF,20 db BUBBLEBEAM ,SPEED_DOWN_SIDE_EFFECT ,$41,WATER, $FF,20 db AURORA_BEAM ,ATTACK_DOWN_SIDE_EFFECT ,$41,ICE, $FF,20 db HYPER_BEAM ,HYPER_BEAM_EFFECT ,$96,NORMAL, $E5,5 db PECK ,NO_ADDITIONAL_EFFECT ,$23,FLYING, $FF,35 db DRILL_PECK ,NO_ADDITIONAL_EFFECT ,$50,FLYING, $FF,20 db SUBMISSION ,RECOIL_EFFECT ,$50,FIGHTING,$CC,25 db LOW_KICK ,FLINCH_SIDE_EFFECT2 ,$32,FIGHTING,$E5,20 db COUNTER ,NO_ADDITIONAL_EFFECT ,$01,FIGHTING,$FF,20 db SEISMIC_TOSS,SPECIAL_DAMAGE_EFFECT ,$01,FIGHTING,$FF,20 db STRENGTH ,NO_ADDITIONAL_EFFECT ,$50,NORMAL, $FF,15 db ABSORB ,DRAIN_HP_EFFECT ,$14,GRASS, $FF,20 db MEGA_DRAIN ,DRAIN_HP_EFFECT ,$28,GRASS, $FF,10 db LEECH_SEED ,LEECH_SEED_EFFECT ,$00,GRASS, $E5,10 db GROWTH ,SPECIAL_UP1_EFFECT ,$00,NORMAL, $FF,40 db RAZOR_LEAF ,NO_ADDITIONAL_EFFECT ,$37,GRASS, $F2,25 db SOLARBEAM ,CHARGE_EFFECT ,$78,GRASS, $FF,10 db POISONPOWDER,POISON_EFFECT ,$00,POISON, $BF,35 db STUN_SPORE ,PARALYZE_EFFECT ,$00,GRASS, $BF,30 db SLEEP_POWDER,SLEEP_EFFECT ,$00,GRASS, $BF,15 db PETAL_DANCE ,THRASH_PETAL_DANCE_EFFECT ,$46,GRASS, $FF,20 db STRING_SHOT ,SPEED_DOWN1_EFFECT ,$00,BUG, $F2,40 db DRAGON_RAGE ,SPECIAL_DAMAGE_EFFECT ,$01,DRAGON, $FF,10 db FIRE_SPIN ,TRAPPING_EFFECT ,$0F,FIRE, $B2,15 db THUNDERSHOCK,PARALYZE_SIDE_EFFECT1 ,$28,ELECTRIC,$FF,30 db THUNDERBOLT ,PARALYZE_SIDE_EFFECT1 ,$5F,ELECTRIC,$FF,15 db THUNDER_WAVE,PARALYZE_EFFECT ,$00,ELECTRIC,$FF,20 db THUNDER ,PARALYZE_SIDE_EFFECT1 ,$78,ELECTRIC,$B2,10 db ROCK_THROW ,NO_ADDITIONAL_EFFECT ,$32,ROCK, $A5,15 db EARTHQUAKE ,NO_ADDITIONAL_EFFECT ,$64,GROUND, $FF,10 db FISSURE ,OHKO_EFFECT ,$01,GROUND, $4C,5 db DIG ,CHARGE_EFFECT ,$64,GROUND, $FF,10 db TOXIC ,POISON_EFFECT ,$00,POISON, $D8,10 db CONFUSION ,CONFUSION_SIDE_EFFECT ,$32,PSYCHIC, $FF,25 db PSYCHIC_M ,SPECIAL_DOWN_SIDE_EFFECT ,$5A,PSYCHIC, $FF,10 db HYPNOSIS ,SLEEP_EFFECT ,$00,PSYCHIC, $99,20 db MEDITATE ,ATTACK_UP1_EFFECT ,$00,PSYCHIC, $FF,40 db AGILITY ,SPEED_UP2_EFFECT ,$00,PSYCHIC, $FF,30 db QUICK_ATTACK,NO_ADDITIONAL_EFFECT ,$28,NORMAL, $FF,30 db RAGE ,RAGE_EFFECT ,$14,NORMAL, $FF,20 db TELEPORT ,SWITCH_AND_TELEPORT_EFFECT,$00,PSYCHIC, $FF,20 db NIGHT_SHADE ,SPECIAL_DAMAGE_EFFECT ,$00,GHOST, $FF,15 db MIMIC ,MIMIC_EFFECT ,$00,NORMAL, $FF,10 db SCREECH ,DEFENSE_DOWN2_EFFECT ,$00,NORMAL, $D8,40 db DOUBLE_TEAM ,EVASION_UP1_EFFECT ,$00,NORMAL, $FF,15 db RECOVER ,HEAL_EFFECT ,$00,NORMAL, $FF,20 db HARDEN ,DEFENSE_UP1_EFFECT ,$00,NORMAL, $FF,30 db MINIMIZE ,EVASION_UP1_EFFECT ,$00,NORMAL, $FF,20 db SMOKESCREEN ,ACCURACY_DOWN1_EFFECT ,$00,NORMAL, $FF,20 db CONFUSE_RAY ,CONFUSION_EFFECT ,$00,GHOST, $FF,10 db WITHDRAW ,DEFENSE_UP1_EFFECT ,$00,WATER, $FF,40 db DEFENSE_CURL,DEFENSE_UP1_EFFECT ,$00,NORMAL, $FF,40 db BARRIER ,DEFENSE_UP2_EFFECT ,$00,PSYCHIC, $FF,30 db LIGHT_SCREEN,LIGHT_SCREEN_EFFECT ,$00,PSYCHIC, $FF,30 db HAZE ,HAZE_EFFECT ,$00,ICE, $FF,30 db REFLECT ,REFLECT_EFFECT ,$00,PSYCHIC, $FF,20 db FOCUS_ENERGY,FOCUS_ENERGY_EFFECT ,$00,NORMAL, $FF,30 db BIDE ,BIDE_EFFECT ,$00,NORMAL, $FF,10 db METRONOME ,METRONOME_EFFECT ,$00,NORMAL, $FF,10 db MIRROR_MOVE ,MIRROR_MOVE_EFFECT ,$00,FLYING, $FF,20 db SELFDESTRUCT,EXPLODE_EFFECT ,$82,NORMAL, $FF,5 db EGG_BOMB ,NO_ADDITIONAL_EFFECT ,$64,NORMAL, $BF,10 db LICK ,PARALYZE_SIDE_EFFECT2 ,$14,GHOST, $FF,30 db SMOG ,POISON_SIDE_EFFECT2 ,$14,POISON, $B2,20 db SLUDGE ,POISON_SIDE_EFFECT2 ,$41,POISON, $FF,20 db BONE_CLUB ,FLINCH_SIDE_EFFECT1 ,$41,GROUND, $D8,20 db FIRE_BLAST ,BURN_SIDE_EFFECT2 ,$78,FIRE, $D8,5 db WATERFALL ,NO_ADDITIONAL_EFFECT ,$50,WATER, $FF,15 db CLAMP ,TRAPPING_EFFECT ,$23,WATER, $BF,10 db SWIFT ,SWIFT_EFFECT ,$3C,NORMAL, $FF,20 db SKULL_BASH ,CHARGE_EFFECT ,$64,NORMAL, $FF,15 db SPIKE_CANNON,TWO_TO_FIVE_ATTACKS_EFFECT,$14,NORMAL, $FF,15 db CONSTRICT ,SPEED_DOWN_SIDE_EFFECT ,$0A,NORMAL, $FF,35 db AMNESIA ,SPECIAL_UP2_EFFECT ,$00,PSYCHIC, $FF,20 db KINESIS ,ACCURACY_DOWN1_EFFECT ,$00,PSYCHIC, $CC,15 db SOFTBOILED ,HEAL_EFFECT ,$00,NORMAL, $FF,10 db HI_JUMP_KICK,JUMP_KICK_EFFECT ,$55,FIGHTING,$E5,20 db GLARE ,PARALYZE_EFFECT ,$00,NORMAL, $BF,30 db DREAM_EATER ,DREAM_EATER_EFFECT ,$64,PSYCHIC, $FF,15 db POISON_GAS ,POISON_EFFECT ,$00,POISON, $8C,40 db BARRAGE ,TWO_TO_FIVE_ATTACKS_EFFECT,$0F,NORMAL, $D8,20 db LEECH_LIFE ,DRAIN_HP_EFFECT ,$14,BUG, $FF,15 db LOVELY_KISS ,SLEEP_EFFECT ,$00,NORMAL, $BF,10 db SKY_ATTACK ,CHARGE_EFFECT ,$8C,FLYING, $E5,5 db TRANSFORM ,TRANSFORM_EFFECT ,$00,NORMAL, $FF,10 db BUBBLE ,SPEED_DOWN_SIDE_EFFECT ,$14,WATER, $FF,30 db DIZZY_PUNCH ,NO_ADDITIONAL_EFFECT ,$46,NORMAL, $FF,10 db SPORE ,SLEEP_EFFECT ,$00,GRASS, $FF,15 db FLASH ,ACCURACY_DOWN1_EFFECT ,$00,NORMAL, $B2,20 db PSYWAVE ,SPECIAL_DAMAGE_EFFECT ,$01,PSYCHIC, $CC,15 db SPLASH ,SPLASH_EFFECT ,$00,NORMAL, $FF,40 db ACID_ARMOR ,DEFENSE_UP2_EFFECT ,$00,POISON, $FF,40 db CRABHAMMER ,NO_ADDITIONAL_EFFECT ,$5A,WATER, $D8,10 db EXPLOSION ,EXPLODE_EFFECT ,$AA,NORMAL, $FF,5 db FURY_SWIPES ,TWO_TO_FIVE_ATTACKS_EFFECT,$12,NORMAL, $CC,15 db BONEMERANG ,ATTACK_TWICE_EFFECT ,$32,GROUND, $E5,10 db REST ,HEAL_EFFECT ,$00,PSYCHIC, $FF,10 db ROCK_SLIDE ,NO_ADDITIONAL_EFFECT ,$4B,ROCK, $E5,10 db HYPER_FANG ,FLINCH_SIDE_EFFECT1 ,$50,NORMAL, $E5,15 db SHARPEN ,ATTACK_UP1_EFFECT ,$00,NORMAL, $FF,30 db CONVERSION ,CONVERSION_EFFECT ,$00,NORMAL, $FF,30 db TRI_ATTACK ,NO_ADDITIONAL_EFFECT ,$50,NORMAL, $FF,10 db SUPER_FANG ,SUPER_FANG_EFFECT ,$01,NORMAL, $E5,10 db SLASH ,NO_ADDITIONAL_EFFECT ,$46,NORMAL, $FF,20 db SUBSTITUTE ,SUBSTITUTE_EFFECT ,$00,NORMAL, $FF,10 db STRUGGLE ,RECOIL_EFFECT ,$32,NORMAL, $FF,10 BulbasaurBaseStats: ; 383de (e:43de) db DEX_BULBASAUR ; pokedex id db 45 ; base hp db 49 ; base attack db 49 ; base defense db 45 ; base speed db 65 ; base special db GRASS ; species type 1 db POISON ; species type 2 db 45 ; catch rate db 64 ; base exp yield db $55 ; sprite dimensions dw BulbasaurPicFront dw BulbasaurPicBack ; attacks known at lvl 0 db TACKLE db GROWL db 0 db 0 db 3 ; growth rate ; learnset db %10100100 db %00000011 db %00111000 db %11000000 db %00000011 db %00001000 db %00000110 db 0 ; padding IvysaurBaseStats: ; 383fa (e:43fa) db DEX_IVYSAUR ; pokedex id db 60 ; base hp db 62 ; base attack db 63 ; base defense db 60 ; base speed db 80 ; base special db GRASS ; species type 1 db POISON ; species type 2 db 45 ; catch rate db 141 ; base exp yield db $66 ; sprite dimensions dw IvysaurPicFront dw IvysaurPicBack ; attacks known at lvl 0 db TACKLE db GROWL db LEECH_SEED db 0 db 3 ; growth rate ; learnset db %10100100 db %00000011 db %00111000 db %11000000 db %00000011 db %00001000 db %00000110 db 0 ; padding VenusaurBaseStats: ; 38416 (e:4416) db DEX_VENUSAUR ; pokedex id db 80 ; base hp db 82 ; base attack db 83 ; base defense db 80 ; base speed db 100 ; base special db GRASS ; species type 1 db POISON ; species type 2 db 45 ; catch rate db 208 ; base exp yield db $77 ; sprite dimensions dw VenusaurPicFront dw VenusaurPicBack ; attacks known at lvl 0 db TACKLE db GROWL db LEECH_SEED db VINE_WHIP db 3 ; growth rate ; learnset db %10100100 db %01000011 db %00111000 db %11000000 db %00000011 db %00001000 db %00000110 db 0 ; padding CharmanderBaseStats: ; 38432 (e:4432) db DEX_CHARMANDER ; pokedex id db 39 ; base hp db 52 ; base attack db 43 ; base defense db 65 ; base speed db 50 ; base special db FIRE ; species type 1 db FIRE ; species type 2 db 45 ; catch rate db 65 ; base exp yield db $55 ; sprite dimensions dw CharmanderPicFront dw CharmanderPicBack ; attacks known at lvl 0 db SCRATCH db GROWL db 0 db 0 db 3 ; growth rate ; learnset db %10110101 db %00000011 db %01001111 db %11001000 db %11100011 db %00001000 db %00100110 db 0 ; padding CharmeleonBaseStats: ; 3844e (e:444e) db DEX_CHARMELEON ; pokedex id db 58 ; base hp db 64 ; base attack db 58 ; base defense db 80 ; base speed db 65 ; base special db FIRE ; species type 1 db FIRE ; species type 2 db 45 ; catch rate db 142 ; base exp yield db $66 ; sprite dimensions dw CharmeleonPicFront dw CharmeleonPicBack ; attacks known at lvl 0 db SCRATCH db GROWL db EMBER db 0 db 3 ; growth rate ; learnset db %10110101 db %00000011 db %01001111 db %11001000 db %11100011 db %00001000 db %00100110 db 0 ; padding CharizardBaseStats: ; 3846a (e:446a) db DEX_CHARIZARD ; pokedex id db 78 ; base hp db 84 ; base attack db 78 ; base defense db 100 ; base speed db 85 ; base special db FIRE ; species type 1 db FLYING ; species type 2 db 45 ; catch rate db 209 ; base exp yield db $77 ; sprite dimensions dw CharizardPicFront dw CharizardPicBack ; attacks known at lvl 0 db SCRATCH db GROWL db EMBER db LEER db 3 ; growth rate ; learnset db %10110101 db %01000011 db %01001111 db %11001110 db %11100011 db %00001000 db %00100110 db 0 ; padding SquirtleBaseStats: ; 38486 (e:4486) db DEX_SQUIRTLE ; pokedex id db 44 ; base hp db 48 ; base attack db 65 ; base defense db 43 ; base speed db 50 ; base special db WATER ; species type 1 db WATER ; species type 2 db 45 ; catch rate db 66 ; base exp yield db $55 ; sprite dimensions dw SquirtlePicFront dw SquirtlePicBack ; attacks known at lvl 0 db TACKLE db TAIL_WHIP db 0 db 0 db 3 ; growth rate ; learnset db %10110001 db %00111111 db %00001111 db %11001000 db %10000011 db %00001000 db %00110010 db 0 ; padding WartortleBaseStats: ; 384a2 (e:44a2) db DEX_WARTORTLE ; pokedex id db 59 ; base hp db 63 ; base attack db 80 ; base defense db 58 ; base speed db 65 ; base special db WATER ; species type 1 db WATER ; species type 2 db 45 ; catch rate db 143 ; base exp yield db $66 ; sprite dimensions dw WartortlePicFront dw WartortlePicBack ; attacks known at lvl 0 db TACKLE db TAIL_WHIP db BUBBLE db 0 db 3 ; growth rate ; learnset db %10110001 db %00111111 db %00001111 db %11001000 db %10000011 db %00001000 db %00110010 db 0 ; padding BlastoiseBaseStats: ; 384be (e:44be) db DEX_BLASTOISE ; pokedex id db 79 ; base hp db 83 ; base attack db 100 ; base defense db 78 ; base speed db 85 ; base special db WATER ; species type 1 db WATER ; species type 2 db 45 ; catch rate db 210 ; base exp yield db $77 ; sprite dimensions dw BlastoisePicFront dw BlastoisePicBack ; attacks known at lvl 0 db TACKLE db TAIL_WHIP db BUBBLE db WATER_GUN db 3 ; growth rate ; learnset db %10110001 db %01111111 db %00001111 db %11001110 db %10000011 db %00001000 db %00110010 db 0 ; padding CaterpieBaseStats: ; 384da (e:44da) db DEX_CATERPIE ; pokedex id db 45 ; base hp db 30 ; base attack db 35 ; base defense db 45 ; base speed db 20 ; base special db BUG ; species type 1 db BUG ; species type 2 db 255 ; catch rate db 53 ; base exp yield db $55 ; sprite dimensions dw CaterpiePicFront dw CaterpiePicBack ; attacks known at lvl 0 db TACKLE db STRING_SHOT db 0 db 0 db 0 ; growth rate ; learnset db %00000000 db %00000000 db %00000000 db %00000000 db %00000000 db %00000000 db %00000000 db 0 ; padding MetapodBaseStats: ; 384f6 (e:44f6) db DEX_METAPOD ; pokedex id db 50 ; base hp db 20 ; base attack db 55 ; base defense db 30 ; base speed db 25 ; base special db BUG ; species type 1 db BUG ; species type 2 db 120 ; catch rate db 72 ; base exp yield db $55 ; sprite dimensions dw MetapodPicFront dw MetapodPicBack ; attacks known at lvl 0 db HARDEN db 0 db 0 db 0 db 0 ; growth rate ; learnset db %00000000 db %00000000 db %00000000 db %00000000 db %00000000 db %00000000 db %00000000 db 0 ; padding ButterfreeBaseStats: ; 38512 (e:4512) db DEX_BUTTERFREE ; pokedex id db 60 ; base hp db 45 ; base attack db 50 ; base defense db 70 ; base speed db 80 ; base special db BUG ; species type 1 db FLYING ; species type 2 db 45 ; catch rate db 160 ; base exp yield db $77 ; sprite dimensions dw ButterfreePicFront dw ButterfreePicBack ; attacks known at lvl 0 db CONFUSION db 0 db 0 db 0 db 0 ; growth rate ; learnset db %00101010 db %01000011 db %00111000 db %11110000 db %01000011 db %00101000 db %00000010 db 0 ; padding WeedleBaseStats: ; 3852e (e:452e) db DEX_WEEDLE ; pokedex id db 40 ; base hp db 35 ; base attack db 30 ; base defense db 50 ; base speed db 20 ; base special db BUG ; species type 1 db POISON ; species type 2 db 255 ; catch rate db 52 ; base exp yield db $55 ; sprite dimensions dw WeedlePicFront dw WeedlePicBack ; attacks known at lvl 0 db POISON_STING db STRING_SHOT db 0 db 0 db 0 ; growth rate ; learnset db %00000000 db %00000000 db %00000000 db %00000000 db %00000000 db %00000000 db %00000000 db 0 ; padding KakunaBaseStats: ; 3854a (e:454a) db DEX_KAKUNA ; pokedex id db 45 ; base hp db 25 ; base attack db 50 ; base defense db 35 ; base speed db 25 ; base special db BUG ; species type 1 db POISON ; species type 2 db 120 ; catch rate db 71 ; base exp yield db $55 ; sprite dimensions dw KakunaPicFront dw KakunaPicBack ; attacks known at lvl 0 db HARDEN db 0 db 0 db 0 db 0 ; growth rate ; learnset db %00000000 db %00000000 db %00000000 db %00000000 db %00000000 db %00000000 db %00000000 db 0 ; padding BeedrillBaseStats: ; 38566 (e:4566) db DEX_BEEDRILL ; pokedex id db 65 ; base hp db 80 ; base attack db 40 ; base defense db 75 ; base speed db 45 ; base special db BUG ; species type 1 db POISON ; species type 2 db 45 ; catch rate db 159 ; base exp yield db $77 ; sprite dimensions dw BeedrillPicFront dw BeedrillPicBack ; attacks known at lvl 0 db FURY_ATTACK db 0 db 0 db 0 db 0 ; growth rate ; learnset db %00100100 db %01000011 db %00011000 db %11000000 db %11000011 db %00001000 db %00000110 db 0 ; padding PidgeyBaseStats: ; 38582 (e:4582) db DEX_PIDGEY ; pokedex id db 40 ; base hp db 45 ; base attack db 40 ; base defense db 56 ; base speed db 35 ; base special db NORMAL ; species type 1 db FLYING ; species type 2 db 255 ; catch rate db 55 ; base exp yield db $55 ; sprite dimensions dw PidgeyPicFront dw PidgeyPicBack ; attacks known at lvl 0 db GUST db 0 db 0 db 0 db 3 ; growth rate ; learnset db %00101010 db %00000011 db %00001000 db %11000000 db %01000011 db %00001100 db %00001010 db 0 ; padding PidgeottoBaseStats: ; 3859e (e:459e) db DEX_PIDGEOTTO ; pokedex id db 63 ; base hp db 60 ; base attack db 55 ; base defense db 71 ; base speed db 50 ; base special db NORMAL ; species type 1 db FLYING ; species type 2 db 120 ; catch rate db 113 ; base exp yield db $66 ; sprite dimensions dw PidgeottoPicFront dw PidgeottoPicBack ; attacks known at lvl 0 db GUST db SAND_ATTACK db 0 db 0 db 3 ; growth rate ; learnset db %00101010 db %00000011 db %00001000 db %11000000 db %01000011 db %00001100 db %00001010 db 0 ; padding PidgeotBaseStats: ; 385ba (e:45ba) db DEX_PIDGEOT ; pokedex id db 83 ; base hp db 80 ; base attack db 75 ; base defense db 91 ; base speed db 70 ; base special db NORMAL ; species type 1 db FLYING ; species type 2 db 45 ; catch rate db 172 ; base exp yield db $77 ; sprite dimensions dw PidgeotPicFront dw PidgeotPicBack ; attacks known at lvl 0 db GUST db SAND_ATTACK db QUICK_ATTACK db 0 db 3 ; growth rate ; learnset db %00101010 db %01000011 db %00001000 db %11000000 db %01000011 db %00001100 db %00001010 db 0 ; padding RattataBaseStats: ; 385d6 (e:45d6) db DEX_RATTATA ; pokedex id db 30 ; base hp db 56 ; base attack db 35 ; base defense db 72 ; base speed db 25 ; base special db NORMAL ; species type 1 db NORMAL ; species type 2 db 255 ; catch rate db 57 ; base exp yield db $55 ; sprite dimensions dw RattataPicFront dw RattataPicBack ; attacks known at lvl 0 db TACKLE db TAIL_WHIP db 0 db 0 db 0 ; growth rate ; learnset db %10100000 db %00101111 db %10001000 db %11001001 db %11000010 db %00001000 db %00000010 db 0 ; padding RaticateBaseStats: ; 385f2 (e:45f2) db DEX_RATICATE ; pokedex id db 55 ; base hp db 81 ; base attack db 60 ; base defense db 97 ; base speed db 50 ; base special db NORMAL ; species type 1 db NORMAL ; species type 2 db 90 ; catch rate db 116 ; base exp yield db $66 ; sprite dimensions dw RaticatePicFront dw RaticatePicBack ; attacks known at lvl 0 db TACKLE db TAIL_WHIP db QUICK_ATTACK db 0 db 0 ; growth rate ; learnset db %10100000 db %01111111 db %10001000 db %11001001 db %11000010 db %00001000 db %00000010 db 0 ; padding SpearowBaseStats: ; 3860e (e:460e) db DEX_SPEAROW ; pokedex id db 40 ; base hp db 60 ; base attack db 30 ; base defense db 70 ; base speed db 31 ; base special db NORMAL ; species type 1 db FLYING ; species type 2 db 255 ; catch rate db 58 ; base exp yield db $55 ; sprite dimensions dw SpearowPicFront dw SpearowPicBack ; attacks known at lvl 0 db PECK db GROWL db 0 db 0 db 0 ; growth rate ; learnset db %00101010 db %00000011 db %00001000 db %11000000 db %01000010 db %00001100 db %00001010 db 0 ; padding FearowBaseStats: ; 3862a (e:462a) db DEX_FEAROW ; pokedex id db 65 ; base hp db 90 ; base attack db 65 ; base defense db 100 ; base speed db 61 ; base special db NORMAL ; species type 1 db FLYING ; species type 2 db 90 ; catch rate db 162 ; base exp yield db $77 ; sprite dimensions dw FearowPicFront dw FearowPicBack ; attacks known at lvl 0 db PECK db GROWL db LEER db 0 db 0 ; growth rate ; learnset db %00101010 db %01000011 db %00001000 db %11000000 db %01000010 db %00001100 db %00001010 db 0 ; padding EkansBaseStats: ; 38646 (e:4646) db DEX_EKANS ; pokedex id db 35 ; base hp db 60 ; base attack db 44 ; base defense db 55 ; base speed db 40 ; base special db POISON ; species type 1 db POISON ; species type 2 db 255 ; catch rate db 62 ; base exp yield db $55 ; sprite dimensions dw EkansPicFront dw EkansPicBack ; attacks known at lvl 0 db WRAP db LEER db 0 db 0 db 0 ; growth rate ; learnset db %10100000 db %00000011 db %00011000 db %11001110 db %10000010 db %10001000 db %00100010 db 0 ; padding ArbokBaseStats: ; 38662 (e:4662) db DEX_ARBOK ; pokedex id db 60 ; base hp db 85 ; base attack db 69 ; base defense db 80 ; base speed db 65 ; base special db POISON ; species type 1 db POISON ; species type 2 db 90 ; catch rate db 147 ; base exp yield db $77 ; sprite dimensions dw ArbokPicFront dw ArbokPicBack ; attacks known at lvl 0 db WRAP db LEER db POISON_STING db 0 db 0 ; growth rate ; learnset db %10100000 db %01000011 db %00011000 db %11001110 db %10000010 db %10001000 db %00100010 db 0 ; padding PikachuBaseStats: ; 3867e (e:467e) db DEX_PIKACHU ; pokedex id db 35 ; base hp db 55 ; base attack db 30 ; base defense db 90 ; base speed db 50 ; base special db ELECTRIC ; species type 1 db ELECTRIC ; species type 2 db 190 ; catch rate db 82 ; base exp yield db $55 ; sprite dimensions dw PikachuPicFront dw PikachuPicBack ; attacks known at lvl 0 db THUNDERSHOCK db GROWL db 0 db 0 db 0 ; growth rate ; learnset db %10110001 db %10000011 db %10001101 db %11000001 db %11000011 db %00011000 db %01000010 db 0 ; padding RaichuBaseStats: ; 3869a (e:469a) db DEX_RAICHU ; pokedex id db 60 ; base hp db 90 ; base attack db 55 ; base defense db 100 ; base speed db 90 ; base special db ELECTRIC ; species type 1 db ELECTRIC ; species type 2 db 75 ; catch rate db 122 ; base exp yield db $77 ; sprite dimensions dw RaichuPicFront dw RaichuPicBack ; attacks known at lvl 0 db THUNDERSHOCK db GROWL db THUNDER_WAVE db 0 db 0 ; growth rate ; learnset db %10110001 db %11000011 db %10001101 db %11000001 db %11000011 db %00011000 db %01000010 db 0 ; padding SandshrewBaseStats: ; 386b6 (e:46b6) db DEX_SANDSHREW ; pokedex id db 50 ; base hp db 75 ; base attack db 85 ; base defense db 40 ; base speed db 30 ; base special db GROUND ; species type 1 db GROUND ; species type 2 db 255 ; catch rate db 93 ; base exp yield db $55 ; sprite dimensions dw SandshrewPicFront dw SandshrewPicBack ; attacks known at lvl 0 db SCRATCH db 0 db 0 db 0 db 0 ; growth rate ; learnset db %10100100 db %00000011 db %00001101 db %11001110 db %11000010 db %10001000 db %00100110 db 0 ; padding SandslashBaseStats: ; 386d2 (e:46d2) db DEX_SANDSLASH ; pokedex id db 75 ; base hp db 100 ; base attack db 110 ; base defense db 65 ; base speed db 55 ; base special db GROUND ; species type 1 db GROUND ; species type 2 db 90 ; catch rate db 163 ; base exp yield db $66 ; sprite dimensions dw SandslashPicFront dw SandslashPicBack ; attacks known at lvl 0 db SCRATCH db SAND_ATTACK db 0 db 0 db 0 ; growth rate ; learnset db %10100100 db %01000011 db %00001101 db %11001110 db %11000010 db %10001000 db %00100110 db 0 ; padding NidoranFBaseStats: ; 386ee (e:46ee) db DEX_NIDORAN_F ; pokedex id db 55 ; base hp db 47 ; base attack db 52 ; base defense db 41 ; base speed db 40 ; base special db POISON ; species type 1 db POISON ; species type 2 db 235 ; catch rate db 59 ; base exp yield db $55 ; sprite dimensions dw NidoranFPicFront dw NidoranFPicBack ; attacks known at lvl 0 db GROWL db TACKLE db 0 db 0 db 3 ; growth rate ; learnset db %10100000 db %00100011 db %10001000 db %11000001 db %10000011 db %00001000 db %00000010 db 0 ; padding NidorinaBaseStats: ; 3870a (e:470a) db DEX_NIDORINA ; pokedex id db 70 ; base hp db 62 ; base attack db 67 ; base defense db 56 ; base speed db 55 ; base special db POISON ; species type 1 db POISON ; species type 2 db 120 ; catch rate db 117 ; base exp yield db $66 ; sprite dimensions dw NidorinaPicFront dw NidorinaPicBack ; attacks known at lvl 0 db GROWL db TACKLE db SCRATCH db 0 db 3 ; growth rate ; learnset db %11100000 db %00111111 db %10001000 db %11000001 db %10000011 db %00001000 db %00000010 db 0 ; padding NidoqueenBaseStats: ; 38726 (e:4726) db DEX_NIDOQUEEN ; pokedex id db 90 ; base hp db 82 ; base attack db 87 ; base defense db 76 ; base speed db 75 ; base special db POISON ; species type 1 db GROUND ; species type 2 db 45 ; catch rate db 194 ; base exp yield db $77 ; sprite dimensions dw NidoqueenPicFront dw NidoqueenPicBack ; attacks known at lvl 0 db TACKLE db SCRATCH db TAIL_WHIP db BODY_SLAM db 3 ; growth rate ; learnset db %11110001 db %11111111 db %10001111 db %11000111 db %10100011 db %10001000 db %00110010 db 0 ; padding NidoranMBaseStats: ; 38742 (e:4742) db DEX_NIDORAN_M ; pokedex id db 46 ; base hp db 57 ; base attack db 40 ; base defense db 50 ; base speed db 40 ; base special db POISON ; species type 1 db POISON ; species type 2 db 235 ; catch rate db 60 ; base exp yield db $55 ; sprite dimensions dw NidoranMPicFront dw NidoranMPicBack ; attacks known at lvl 0 db LEER db TACKLE db 0 db 0 db 3 ; growth rate ; learnset db %11100000 db %00100011 db %10001000 db %11000001 db %10000011 db %00001000 db %00000010 db 0 ; padding NidorinoBaseStats: ; 3875e (e:475e) db DEX_NIDORINO ; pokedex id db 61 ; base hp db 72 ; base attack db 57 ; base defense db 65 ; base speed db 55 ; base special db POISON ; species type 1 db POISON ; species type 2 db 120 ; catch rate db 118 ; base exp yield db $66 ; sprite dimensions dw NidorinoPicFront dw NidorinoPicBack ; attacks known at lvl 0 db LEER db TACKLE db HORN_ATTACK db 0 db 3 ; growth rate ; learnset db %11100000 db %00111111 db %10001000 db %11000001 db %10000011 db %00001000 db %00000010 db 0 ; padding NidokingBaseStats: ; 3877a (e:477a) db DEX_NIDOKING ; pokedex id db 81 ; base hp db 92 ; base attack db 77 ; base defense db 85 ; base speed db 75 ; base special db POISON ; species type 1 db GROUND ; species type 2 db 45 ; catch rate db 195 ; base exp yield db $77 ; sprite dimensions dw NidokingPicFront dw NidokingPicBack ; attacks known at lvl 0 db TACKLE db HORN_ATTACK db POISON_STING db THRASH db 3 ; growth rate ; learnset db %11110001 db %11111111 db %10001111 db %11000111 db %10100011 db %10001000 db %00110010 db 0 ; padding ClefairyBaseStats: ; 38796 (e:4796) db DEX_CLEFAIRY ; pokedex id db 70 ; base hp db 45 ; base attack db 48 ; base defense db 35 ; base speed db 60 ; base special db NORMAL ; species type 1 db NORMAL ; species type 2 db 150 ; catch rate db 68 ; base exp yield db $55 ; sprite dimensions dw ClefairyPicFront dw ClefairyPicBack ; attacks known at lvl 0 db POUND db GROWL db 0 db 0 db 4 ; growth rate ; learnset db %10110001 db %00111111 db %10101111 db %11110001 db %10100111 db %00111000 db %01100011 db 0 ; padding ClefableBaseStats: ; 387b2 (e:47b2) db DEX_CLEFABLE ; pokedex id db 95 ; base hp db 70 ; base attack db 73 ; base defense db 60 ; base speed db 85 ; base special db NORMAL ; species type 1 db NORMAL ; species type 2 db 25 ; catch rate db 129 ; base exp yield db $66 ; sprite dimensions dw ClefablePicFront dw ClefablePicBack ; attacks known at lvl 0 db SING db DOUBLESLAP db MINIMIZE db METRONOME db 4 ; growth rate ; learnset db %10110001 db %01111111 db %10101111 db %11110001 db %10100111 db %00111000 db %01100011 db 0 ; padding VulpixBaseStats: ; 387ce (e:47ce) db DEX_VULPIX ; pokedex id db 38 ; base hp db 41 ; base attack db 40 ; base defense db 65 ; base speed db 65 ; base special db FIRE ; species type 1 db FIRE ; species type 2 db 190 ; catch rate db 63 ; base exp yield db $66 ; sprite dimensions dw VulpixPicFront dw VulpixPicBack ; attacks known at lvl 0 db EMBER db TAIL_WHIP db 0 db 0 db 0 ; growth rate ; learnset db %10100000 db %00000011 db %00001000 db %11001000 db %11100011 db %00001000 db %00000010 db 0 ; padding NinetalesBaseStats: ; 387ea (e:47ea) db DEX_NINETALES ; pokedex id db 73 ; base hp db 76 ; base attack db 75 ; base defense db 100 ; base speed db 100 ; base special db FIRE ; species type 1 db FIRE ; species type 2 db 75 ; catch rate db 178 ; base exp yield db $77 ; sprite dimensions dw NinetalesPicFront dw NinetalesPicBack ; attacks known at lvl 0 db EMBER db TAIL_WHIP db QUICK_ATTACK db ROAR db 0 ; growth rate ; learnset db %10100000 db %01000011 db %00001000 db %11001000 db %11100011 db %00001000 db %00000010 db 0 ; padding JigglypuffBaseStats: ; 38806 (e:4806) db DEX_JIGGLYPUFF ; pokedex id db 115 ; base hp db 45 ; base attack db 20 ; base defense db 20 ; base speed db 25 ; base special db NORMAL ; species type 1 db NORMAL ; species type 2 db 170 ; catch rate db 76 ; base exp yield db $55 ; sprite dimensions dw JigglypuffPicFront dw JigglypuffPicBack ; attacks known at lvl 0 db SING db 0 db 0 db 0 db 4 ; growth rate ; learnset db %10110001 db %00111111 db %10101111 db %11110001 db %10100011 db %00111000 db %01100011 db 0 ; padding WigglytuffBaseStats: ; 38822 (e:4822) db DEX_WIGGLYTUFF ; pokedex id db 140 ; base hp db 70 ; base attack db 45 ; base defense db 45 ; base speed db 50 ; base special db NORMAL ; species type 1 db NORMAL ; species type 2 db 50 ; catch rate db 109 ; base exp yield db $66 ; sprite dimensions dw WigglytuffPicFront dw WigglytuffPicBack ; attacks known at lvl 0 db SING db DISABLE db DEFENSE_CURL db DOUBLESLAP db 4 ; growth rate ; learnset db %10110001 db %01111111 db %10101111 db %11110001 db %10100011 db %00111000 db %01100011 db 0 ; padding ZubatBaseStats: ; 3883e (e:483e) db DEX_ZUBAT ; pokedex id db 40 ; base hp db 45 ; base attack db 35 ; base defense db 55 ; base speed db 40 ; base special db POISON ; species type 1 db FLYING ; species type 2 db 255 ; catch rate db 54 ; base exp yield db $55 ; sprite dimensions dw ZubatPicFront dw ZubatPicBack ; attacks known at lvl 0 db LEECH_LIFE db 0 db 0 db 0 db 0 ; growth rate ; learnset db %00101010 db %00000011 db %00011000 db %11000000 db %01000010 db %00001000 db %00000010 db 0 ; padding GolbatBaseStats: ; 3885a (e:485a) db DEX_GOLBAT ; pokedex id db 75 ; base hp db 80 ; base attack db 70 ; base defense db 90 ; base speed db 75 ; base special db POISON ; species type 1 db FLYING ; species type 2 db 90 ; catch rate db 171 ; base exp yield db $77 ; sprite dimensions dw GolbatPicFront dw GolbatPicBack ; attacks known at lvl 0 db LEECH_LIFE db SCREECH db BITE db 0 db 0 ; growth rate ; learnset db %00101010 db %01000011 db %00011000 db %11000000 db %01000010 db %00001000 db %00000010 db 0 ; padding OddishBaseStats: ; 38876 (e:4876) db DEX_ODDISH ; pokedex id db 45 ; base hp db 50 ; base attack db 55 ; base defense db 30 ; base speed db 75 ; base special db GRASS ; species type 1 db POISON ; species type 2 db 255 ; catch rate db 78 ; base exp yield db $55 ; sprite dimensions dw OddishPicFront dw OddishPicBack ; attacks known at lvl 0 db ABSORB db 0 db 0 db 0 db 3 ; growth rate ; learnset db %00100100 db %00000011 db %00111000 db %11000000 db %00000011 db %00001000 db %00000110 db 0 ; padding GloomBaseStats: ; 38892 (e:4892) db DEX_GLOOM ; pokedex id db 60 ; base hp db 65 ; base attack db 70 ; base defense db 40 ; base speed db 85 ; base special db GRASS ; species type 1 db POISON ; species type 2 db 120 ; catch rate db 132 ; base exp yield db $66 ; sprite dimensions dw GloomPicFront dw GloomPicBack ; attacks known at lvl 0 db ABSORB db POISONPOWDER db STUN_SPORE db 0 db 3 ; growth rate ; learnset db %00100100 db %00000011 db %00111000 db %11000000 db %00000011 db %00001000 db %00000110 db 0 ; padding VileplumeBaseStats: ; 388ae (e:48ae) db DEX_VILEPLUME ; pokedex id db 75 ; base hp db 80 ; base attack db 85 ; base defense db 50 ; base speed db 100 ; base special db GRASS ; species type 1 db POISON ; species type 2 db 45 ; catch rate db 184 ; base exp yield db $77 ; sprite dimensions dw VileplumePicFront dw VileplumePicBack ; attacks known at lvl 0 db STUN_SPORE db SLEEP_POWDER db ACID db PETAL_DANCE db 3 ; growth rate ; learnset db %10100100 db %01000011 db %00111000 db %11000000 db %00000011 db %00001000 db %00000110 db 0 ; padding ParasBaseStats: ; 388ca (e:48ca) db DEX_PARAS ; pokedex id db 35 ; base hp db 70 ; base attack db 55 ; base defense db 25 ; base speed db 55 ; base special db BUG ; species type 1 db GRASS ; species type 2 db 190 ; catch rate db 70 ; base exp yield db $55 ; sprite dimensions dw ParasPicFront dw ParasPicBack ; attacks known at lvl 0 db SCRATCH db 0 db 0 db 0 db 0 ; growth rate ; learnset db %10100100 db %00000011 db %00111000 db %11001000 db %10000011 db %00001000 db %00000110 db 0 ; padding ParasectBaseStats: ; 388e6 (e:48e6) db DEX_PARASECT ; pokedex id db 60 ; base hp db 95 ; base attack db 80 ; base defense db 30 ; base speed db 80 ; base special db BUG ; species type 1 db GRASS ; species type 2 db 75 ; catch rate db 128 ; base exp yield db $77 ; sprite dimensions dw ParasectPicFront dw ParasectPicBack ; attacks known at lvl 0 db SCRATCH db STUN_SPORE db LEECH_LIFE db 0 db 0 ; growth rate ; learnset db %10100100 db %01000011 db %00111000 db %11001000 db %10000011 db %00001000 db %00000110 db 0 ; padding VenonatBaseStats: ; 38902 (e:4902) db DEX_VENONAT ; pokedex id db 60 ; base hp db 55 ; base attack db 50 ; base defense db 45 ; base speed db 40 ; base special db BUG ; species type 1 db POISON ; species type 2 db 190 ; catch rate db 75 ; base exp yield db $55 ; sprite dimensions dw VenonatPicFront dw VenonatPicBack ; attacks known at lvl 0 db TACKLE db DISABLE db 0 db 0 db 0 ; growth rate ; learnset db %00100000 db %00000011 db %00111000 db %11010000 db %00000011 db %00101000 db %00000010 db 0 ; padding VenomothBaseStats: ; 3891e (e:491e) db DEX_VENOMOTH ; pokedex id db 70 ; base hp db 65 ; base attack db 60 ; base defense db 90 ; base speed db 90 ; base special db BUG ; species type 1 db POISON ; species type 2 db 75 ; catch rate db 138 ; base exp yield db $77 ; sprite dimensions dw VenomothPicFront dw VenomothPicBack ; attacks known at lvl 0 db TACKLE db DISABLE db POISONPOWDER db LEECH_LIFE db 0 ; growth rate ; learnset db %00101010 db %01000011 db %00111000 db %11110000 db %01000011 db %00101000 db %00000010 db 0 ; padding DiglettBaseStats: ; 3893a (e:493a) db DEX_DIGLETT ; pokedex id db 10 ; base hp db 55 ; base attack db 25 ; base defense db 95 ; base speed db 45 ; base special db GROUND ; species type 1 db GROUND ; species type 2 db 255 ; catch rate db 81 ; base exp yield db $55 ; sprite dimensions dw DiglettPicFront dw DiglettPicBack ; attacks known at lvl 0 db SCRATCH db 0 db 0 db 0 db 0 ; growth rate ; learnset db %10100000 db %00000011 db %00001000 db %11001110 db %00000010 db %10001000 db %00000010 db 0 ; padding DugtrioBaseStats: ; 38956 (e:4956) db DEX_DUGTRIO ; pokedex id db 35 ; base hp db 80 ; base attack db 50 ; base defense db 120 ; base speed db 70 ; base special db GROUND ; species type 1 db GROUND ; species type 2 db 50 ; catch rate db 153 ; base exp yield db $66 ; sprite dimensions dw DugtrioPicFront dw DugtrioPicBack ; attacks known at lvl 0 db SCRATCH db GROWL db DIG db 0 db 0 ; growth rate ; learnset db %10100000 db %01000011 db %00001000 db %11001110 db %00000010 db %10001000 db %00000010 db 0 ; padding MeowthBaseStats: ; 38972 (e:4972) db DEX_MEOWTH ; pokedex id db 40 ; base hp db 45 ; base attack db 35 ; base defense db 90 ; base speed db 40 ; base special db NORMAL ; species type 1 db NORMAL ; species type 2 db 255 ; catch rate db 69 ; base exp yield db $55 ; sprite dimensions dw MeowthPicFront dw MeowthPicBack ; attacks known at lvl 0 db SCRATCH db GROWL db 0 db 0 db 0 ; growth rate ; learnset db %10100000 db %10001111 db %10001000 db %11000001 db %11000010 db %00001000 db %00000010 db 0 ; padding PersianBaseStats: ; 3898e (e:498e) db DEX_PERSIAN ; pokedex id db 65 ; base hp db 70 ; base attack db 60 ; base defense db 115 ; base speed db 65 ; base special db NORMAL ; species type 1 db NORMAL ; species type 2 db 90 ; catch rate db 148 ; base exp yield db $77 ; sprite dimensions dw PersianPicFront dw PersianPicBack ; attacks known at lvl 0 db SCRATCH db GROWL db BITE db SCREECH db 0 ; growth rate ; learnset db %10100000 db %11001111 db %10001000 db %11000001 db %11000010 db %00001000 db %00000010 db 0 ; padding PsyduckBaseStats: ; 389aa (e:49aa) db DEX_PSYDUCK ; pokedex id db 50 ; base hp db 52 ; base attack db 48 ; base defense db 55 ; base speed db 50 ; base special db WATER ; species type 1 db WATER ; species type 2 db 190 ; catch rate db 80 ; base exp yield db $55 ; sprite dimensions dw PsyduckPicFront dw PsyduckPicBack ; attacks known at lvl 0 db SCRATCH db 0 db 0 db 0 db 0 ; growth rate ; learnset db %10110001 db %10111111 db %00001111 db %11001000 db %11000010 db %00001000 db %00110010 db 0 ; padding GolduckBaseStats: ; 389c6 (e:49c6) db DEX_GOLDUCK ; pokedex id db 80 ; base hp db 82 ; base attack db 78 ; base defense db 85 ; base speed db 80 ; base special db WATER ; species type 1 db WATER ; species type 2 db 75 ; catch rate db 174 ; base exp yield db $77 ; sprite dimensions dw GolduckPicFront dw GolduckPicBack ; attacks known at lvl 0 db SCRATCH db TAIL_WHIP db DISABLE db 0 db 0 ; growth rate ; learnset db %10110001 db %11111111 db %00001111 db %11001000 db %11000010 db %00001000 db %00110010 db 0 ; padding MankeyBaseStats: ; 389e2 (e:49e2) db DEX_MANKEY ; pokedex id db 40 ; base hp db 80 ; base attack db 35 ; base defense db 70 ; base speed db 35 ; base special db FIGHTING ; species type 1 db FIGHTING ; species type 2 db 190 ; catch rate db 74 ; base exp yield db $55 ; sprite dimensions dw MankeyPicFront dw MankeyPicBack ; attacks known at lvl 0 db SCRATCH db LEER db 0 db 0 db 0 ; growth rate ; learnset db %10110001 db %10000011 db %10001111 db %11001001 db %11000110 db %10001000 db %00100010 db 0 ; padding PrimeapeBaseStats: ; 389fe (e:49fe) db DEX_PRIMEAPE ; pokedex id db 65 ; base hp db 105 ; base attack db 60 ; base defense db 95 ; base speed db 60 ; base special db FIGHTING ; species type 1 db FIGHTING ; species type 2 db 75 ; catch rate db 149 ; base exp yield db $77 ; sprite dimensions dw PrimeapePicFront dw PrimeapePicBack ; attacks known at lvl 0 db SCRATCH db LEER db KARATE_CHOP db FURY_SWIPES db 0 ; growth rate ; learnset db %10110001 db %11000011 db %10001111 db %11001001 db %11000110 db %10001000 db %00100010 db 0 ; padding GrowlitheBaseStats: ; 38a1a (e:4a1a) db DEX_GROWLITHE ; pokedex id db 55 ; base hp db 70 ; base attack db 45 ; base defense db 60 ; base speed db 50 ; base special db FIRE ; species type 1 db FIRE ; species type 2 db 190 ; catch rate db 91 ; base exp yield db $55 ; sprite dimensions dw GrowlithePicFront dw GrowlithePicBack ; attacks known at lvl 0 db BITE db ROAR db 0 db 0 db 5 ; growth rate ; learnset db %10100000 db %00000011 db %01001000 db %11001000 db %11100011 db %00001000 db %00000010 db 0 ; padding ArcanineBaseStats: ; 38a36 (e:4a36) db DEX_ARCANINE ; pokedex id db 90 ; base hp db 110 ; base attack db 80 ; base defense db 95 ; base speed db 80 ; base special db FIRE ; species type 1 db FIRE ; species type 2 db 75 ; catch rate db 213 ; base exp yield db $77 ; sprite dimensions dw ArcaninePicFront dw ArcaninePicBack ; attacks known at lvl 0 db ROAR db EMBER db LEER db TAKE_DOWN db 5 ; growth rate ; learnset db %10100000 db %01000011 db %01001000 db %11101000 db %11100011 db %00001000 db %00000010 db 0 ; padding PoliwagBaseStats: ; 38a52 (e:4a52) db DEX_POLIWAG ; pokedex id db 40 ; base hp db 50 ; base attack db 40 ; base defense db 90 ; base speed db 40 ; base special db WATER ; species type 1 db WATER ; species type 2 db 255 ; catch rate db 77 ; base exp yield db $55 ; sprite dimensions dw PoliwagPicFront dw PoliwagPicBack ; attacks known at lvl 0 db BUBBLE db 0 db 0 db 0 db 3 ; growth rate ; learnset db %10100000 db %00111111 db %00001000 db %11010000 db %10000010 db %00101000 db %00010010 db 0 ; padding PoliwhirlBaseStats: ; 38a6e (e:4a6e) db DEX_POLIWHIRL ; pokedex id db 65 ; base hp db 65 ; base attack db 65 ; base defense db 90 ; base speed db 50 ; base special db WATER ; species type 1 db WATER ; species type 2 db 120 ; catch rate db 131 ; base exp yield db $66 ; sprite dimensions dw PoliwhirlPicFront dw PoliwhirlPicBack ; attacks known at lvl 0 db BUBBLE db HYPNOSIS db WATER_GUN db 0 db 3 ; growth rate ; learnset db %10110001 db %00111111 db %00001111 db %11010110 db %10000110 db %00101000 db %00110010 db 0 ; padding PoliwrathBaseStats: ; 38a8a (e:4a8a) db DEX_POLIWRATH ; pokedex id db 90 ; base hp db 85 ; base attack db 95 ; base defense db 70 ; base speed db 70 ; base special db WATER ; species type 1 db FIGHTING ; species type 2 db 45 ; catch rate db 185 ; base exp yield db $77 ; sprite dimensions dw PoliwrathPicFront dw PoliwrathPicBack ; attacks known at lvl 0 db HYPNOSIS db WATER_GUN db DOUBLESLAP db BODY_SLAM db 3 ; growth rate ; learnset db %10110001 db %01111111 db %00001111 db %11010110 db %10000110 db %00101000 db %00110010 db 0 ; padding AbraBaseStats: ; 38aa6 (e:4aa6) db DEX_ABRA ; pokedex id db 25 ; base hp db 20 ; base attack db 15 ; base defense db 90 ; base speed db 105 ; base special db PSYCHIC ; species type 1 db PSYCHIC ; species type 2 db 200 ; catch rate db 73 ; base exp yield db $55 ; sprite dimensions dw AbraPicFront dw AbraPicBack ; attacks known at lvl 0 db TELEPORT db 0 db 0 db 0 db 3 ; growth rate ; learnset db %10110001 db %00000011 db %00001111 db %11110000 db %10000111 db %00111000 db %01000011 db 0 ; padding KadabraBaseStats: ; 38ac2 (e:4ac2) db DEX_KADABRA ; pokedex id db 40 ; base hp db 35 ; base attack db 30 ; base defense db 105 ; base speed db 120 ; base special db PSYCHIC ; species type 1 db PSYCHIC ; species type 2 db 100 ; catch rate db 145 ; base exp yield db $66 ; sprite dimensions dw KadabraPicFront dw KadabraPicBack ; attacks known at lvl 0 db TELEPORT db CONFUSION db DISABLE db 0 db 3 ; growth rate ; learnset db %10110001 db %00000011 db %00001111 db %11111000 db %10000111 db %00111000 db %01000011 db 0 ; padding AlakazamBaseStats: ; 38ade (e:4ade) db DEX_ALAKAZAM ; pokedex id db 55 ; base hp db 50 ; base attack db 45 ; base defense db 120 ; base speed db 135 ; base special db PSYCHIC ; species type 1 db PSYCHIC ; species type 2 db 50 ; catch rate db 186 ; base exp yield db $77 ; sprite dimensions dw AlakazamPicFront dw AlakazamPicBack ; attacks known at lvl 0 db TELEPORT db CONFUSION db DISABLE db 0 db 3 ; growth rate ; learnset db %10110001 db %01000011 db %00001111 db %11111000 db %10000111 db %00111000 db %01000011 db 0 ; padding MachopBaseStats: ; 38afa (e:4afa) db DEX_MACHOP ; pokedex id db 70 ; base hp db 80 ; base attack db 50 ; base defense db 35 ; base speed db 35 ; base special db FIGHTING ; species type 1 db FIGHTING ; species type 2 db 180 ; catch rate db 88 ; base exp yield db $55 ; sprite dimensions dw MachopPicFront dw MachopPicBack ; attacks known at lvl 0 db KARATE_CHOP db 0 db 0 db 0 db 3 ; growth rate ; learnset db %10110001 db %00000011 db %00001111 db %11001110 db %10100110 db %10001000 db %00100010 db 0 ; padding MachokeBaseStats: ; 38b16 (e:4b16) db DEX_MACHOKE ; pokedex id db 80 ; base hp db 100 ; base attack db 70 ; base defense db 45 ; base speed db 50 ; base special db FIGHTING ; species type 1 db FIGHTING ; species type 2 db 90 ; catch rate db 146 ; base exp yield db $77 ; sprite dimensions dw MachokePicFront dw MachokePicBack ; attacks known at lvl 0 db KARATE_CHOP db LOW_KICK db LEER db 0 db 3 ; growth rate ; learnset db %10110001 db %00000011 db %00001111 db %11001110 db %10100110 db %10001000 db %00100010 db 0 ; padding MachampBaseStats: ; 38b32 (e:4b32) db DEX_MACHAMP ; pokedex id db 90 ; base hp db 130 ; base attack db 80 ; base defense db 55 ; base speed db 65 ; base special db FIGHTING ; species type 1 db FIGHTING ; species type 2 db 45 ; catch rate db 193 ; base exp yield db $77 ; sprite dimensions dw MachampPicFront dw MachampPicBack ; attacks known at lvl 0 db KARATE_CHOP db LOW_KICK db LEER db 0 db 3 ; growth rate ; learnset db %10110001 db %01000011 db %00001111 db %11001110 db %10100110 db %10001000 db %00100010 db 0 ; padding BellsproutBaseStats: ; 38b4e (e:4b4e) db DEX_BELLSPROUT ; pokedex id db 50 ; base hp db 75 ; base attack db 35 ; base defense db 40 ; base speed db 70 ; base special db GRASS ; species type 1 db POISON ; species type 2 db 255 ; catch rate db 84 ; base exp yield db $55 ; sprite dimensions dw BellsproutPicFront dw BellsproutPicBack ; attacks known at lvl 0 db VINE_WHIP db GROWTH db 0 db 0 db 3 ; growth rate ; learnset db %00100100 db %00000011 db %00111000 db %11000000 db %00000011 db %00001000 db %00000110 db 0 ; padding WeepinbellBaseStats: ; 38b6a (e:4b6a) db DEX_WEEPINBELL ; pokedex id db 65 ; base hp db 90 ; base attack db 50 ; base defense db 55 ; base speed db 85 ; base special db GRASS ; species type 1 db POISON ; species type 2 db 120 ; catch rate db 151 ; base exp yield db $66 ; sprite dimensions dw WeepinbellPicFront dw WeepinbellPicBack ; attacks known at lvl 0 db VINE_WHIP db GROWTH db WRAP db 0 db 3 ; growth rate ; learnset db %00100100 db %00000011 db %00111000 db %11000000 db %00000011 db %00001000 db %00000110 db 0 ; padding VictreebelBaseStats: ; 38b86 (e:4b86) db DEX_VICTREEBEL ; pokedex id db 80 ; base hp db 105 ; base attack db 65 ; base defense db 70 ; base speed db 100 ; base special db GRASS ; species type 1 db POISON ; species type 2 db 45 ; catch rate db 191 ; base exp yield db $77 ; sprite dimensions dw VictreebelPicFront dw VictreebelPicBack ; attacks known at lvl 0 db SLEEP_POWDER db STUN_SPORE db ACID db RAZOR_LEAF db 3 ; growth rate ; learnset db %10100100 db %01000011 db %00111000 db %11000000 db %00000011 db %00001000 db %00000110 db 0 ; padding TentacoolBaseStats: ; 38ba2 (e:4ba2) db DEX_TENTACOOL ; pokedex id db 40 ; base hp db 40 ; base attack db 35 ; base defense db 70 ; base speed db 100 ; base special db WATER ; species type 1 db POISON ; species type 2 db 190 ; catch rate db 105 ; base exp yield db $55 ; sprite dimensions dw TentacoolPicFront dw TentacoolPicBack ; attacks known at lvl 0 db ACID db 0 db 0 db 0 db 5 ; growth rate ; learnset db %00100100 db %00111111 db %00011000 db %11000000 db %10000011 db %00001000 db %00010110 db 0 ; padding TentacruelBaseStats: ; 38bbe (e:4bbe) db DEX_TENTACRUEL ; pokedex id db 80 ; base hp db 70 ; base attack db 65 ; base defense db 100 ; base speed db 120 ; base special db WATER ; species type 1 db POISON ; species type 2 db 60 ; catch rate db 205 ; base exp yield db $66 ; sprite dimensions dw TentacruelPicFront dw TentacruelPicBack ; attacks known at lvl 0 db ACID db SUPERSONIC db WRAP db 0 db 5 ; growth rate ; learnset db %00100100 db %01111111 db %00011000 db %11000000 db %10000011 db %00001000 db %00010110 db 0 ; padding GeodudeBaseStats: ; 38bda (e:4bda) db DEX_GEODUDE ; pokedex id db 40 ; base hp db 80 ; base attack db 100 ; base defense db 20 ; base speed db 30 ; base special db ROCK ; species type 1 db GROUND ; species type 2 db 255 ; catch rate db 86 ; base exp yield db $55 ; sprite dimensions dw GeodudePicFront dw GeodudePicBack ; attacks known at lvl 0 db TACKLE db 0 db 0 db 0 db 3 ; growth rate ; learnset db %10100001 db %00000011 db %00001111 db %11001110 db %00101110 db %11001000 db %00100010 db 0 ; padding GravelerBaseStats: ; 38bf6 (e:4bf6) db DEX_GRAVELER ; pokedex id db 55 ; base hp db 95 ; base attack db 115 ; base defense db 35 ; base speed db 45 ; base special db ROCK ; species type 1 db GROUND ; species type 2 db 120 ; catch rate db 134 ; base exp yield db $66 ; sprite dimensions dw GravelerPicFront dw GravelerPicBack ; attacks known at lvl 0 db TACKLE db DEFENSE_CURL db 0 db 0 db 3 ; growth rate ; learnset db %10100001 db %00000011 db %00001111 db %11001110 db %00101110 db %11001000 db %00100010 db 0 ; padding GolemBaseStats: ; 38c12 (e:4c12) db DEX_GOLEM ; pokedex id db 80 ; base hp db 110 ; base attack db 130 ; base defense db 45 ; base speed db 55 ; base special db ROCK ; species type 1 db GROUND ; species type 2 db 45 ; catch rate db 177 ; base exp yield db $66 ; sprite dimensions dw GolemPicFront dw GolemPicBack ; attacks known at lvl 0 db TACKLE db DEFENSE_CURL db 0 db 0 db 3 ; growth rate ; learnset db %10110001 db %01000011 db %00001111 db %11001110 db %00101110 db %11001000 db %00100010 db 0 ; padding PonytaBaseStats: ; 38c2e (e:4c2e) db DEX_PONYTA ; pokedex id db 50 ; base hp db 85 ; base attack db 55 ; base defense db 90 ; base speed db 65 ; base special db FIRE ; species type 1 db FIRE ; species type 2 db 190 ; catch rate db 152 ; base exp yield db $66 ; sprite dimensions dw PonytaPicFront dw PonytaPicBack ; attacks known at lvl 0 db EMBER db 0 db 0 db 0 db 0 ; growth rate ; learnset db %11100000 db %00000011 db %00001000 db %11000000 db %11100011 db %00001000 db %00000010 db 0 ; padding RapidashBaseStats: ; 38c4a (e:4c4a) db DEX_RAPIDASH ; pokedex id db 65 ; base hp db 100 ; base attack db 70 ; base defense db 105 ; base speed db 80 ; base special db FIRE ; species type 1 db FIRE ; species type 2 db 60 ; catch rate db 192 ; base exp yield db $77 ; sprite dimensions dw RapidashPicFront dw RapidashPicBack ; attacks known at lvl 0 db EMBER db TAIL_WHIP db STOMP db GROWL db 0 ; growth rate ; learnset db %11100000 db %01000011 db %00001000 db %11000000 db %11100011 db %00001000 db %00000010 db 0 ; padding SlowpokeBaseStats: ; 38c66 (e:4c66) db DEX_SLOWPOKE ; pokedex id db 90 ; base hp db 65 ; base attack db 65 ; base defense db 15 ; base speed db 40 ; base special db WATER ; species type 1 db PSYCHIC ; species type 2 db 190 ; catch rate db 99 ; base exp yield db $55 ; sprite dimensions dw SlowpokePicFront dw SlowpokePicBack ; attacks known at lvl 0 db CONFUSION db 0 db 0 db 0 db 0 ; growth rate ; learnset db %10100000 db %10111111 db %00001000 db %11111110 db %11100011 db %00111000 db %01110011 db 0 ; padding SlowbroBaseStats: ; 38c82 (e:4c82) db DEX_SLOWBRO ; pokedex id db 95 ; base hp db 75 ; base attack db 110 ; base defense db 30 ; base speed db 80 ; base special db WATER ; species type 1 db PSYCHIC ; species type 2 db 75 ; catch rate db 164 ; base exp yield db $77 ; sprite dimensions dw SlowbroPicFront dw SlowbroPicBack ; attacks known at lvl 0 db CONFUSION db DISABLE db HEADBUTT db 0 db 0 ; growth rate ; learnset db %10110001 db %11111111 db %00001111 db %11111110 db %11100011 db %00111000 db %01110011 db 0 ; padding MagnemiteBaseStats: ; 38c9e (e:4c9e) db DEX_MAGNEMITE ; pokedex id db 25 ; base hp db 35 ; base attack db 70 ; base defense db 45 ; base speed db 95 ; base special db ELECTRIC ; species type 1 db ELECTRIC ; species type 2 db 190 ; catch rate db 89 ; base exp yield db $55 ; sprite dimensions dw MagnemitePicFront dw MagnemitePicBack ; attacks known at lvl 0 db TACKLE db 0 db 0 db 0 db 0 ; growth rate ; learnset db %00100000 db %00000011 db %10001000 db %11100001 db %01000011 db %00011000 db %01000010 db 0 ; padding MagnetonBaseStats: ; 38cba (e:4cba) db DEX_MAGNETON ; pokedex id db 50 ; base hp db 60 ; base attack db 95 ; base defense db 70 ; base speed db 120 ; base special db ELECTRIC ; species type 1 db ELECTRIC ; species type 2 db 60 ; catch rate db 161 ; base exp yield db $66 ; sprite dimensions dw MagnetonPicFront dw MagnetonPicBack ; attacks known at lvl 0 db TACKLE db SONICBOOM db THUNDERSHOCK db 0 db 0 ; growth rate ; learnset db %00100000 db %01000011 db %10001000 db %11100001 db %01000011 db %00011000 db %01000010 db 0 ; padding FarfetchdBaseStats: ; 38cd6 (e:4cd6) db DEX_FARFETCH_D ; pokedex id db 52 ; base hp db 65 ; base attack db 55 ; base defense db 60 ; base speed db 58 ; base special db NORMAL ; species type 1 db FLYING ; species type 2 db 45 ; catch rate db 94 ; base exp yield db $66 ; sprite dimensions dw FarfetchdPicFront dw FarfetchdPicBack ; attacks known at lvl 0 db PECK db SAND_ATTACK db 0 db 0 db 0 ; growth rate ; learnset db %10101110 db %00000011 db %00001000 db %11000000 db %11000011 db %00001000 db %00001110 db 0 ; padding DoduoBaseStats: ; 38cf2 (e:4cf2) db DEX_DODUO ; pokedex id db 35 ; base hp db 85 ; base attack db 45 ; base defense db 75 ; base speed db 35 ; base special db NORMAL ; species type 1 db FLYING ; species type 2 db 190 ; catch rate db 96 ; base exp yield db $55 ; sprite dimensions dw DoduoPicFront dw DoduoPicBack ; attacks known at lvl 0 db PECK db 0 db 0 db 0 db 0 ; growth rate ; learnset db %10101000 db %00000011 db %00001000 db %11000000 db %10000011 db %00001100 db %00001011 db 0 ; padding DodrioBaseStats: ; 38d0e (e:4d0e) db DEX_DODRIO ; pokedex id db 60 ; base hp db 110 ; base attack db 70 ; base defense db 100 ; base speed db 60 ; base special db NORMAL ; species type 1 db FLYING ; species type 2 db 45 ; catch rate db 158 ; base exp yield db $77 ; sprite dimensions dw DodrioPicFront dw DodrioPicBack ; attacks known at lvl 0 db PECK db GROWL db FURY_ATTACK db 0 db 0 ; growth rate ; learnset db %10101000 db %01000011 db %00001000 db %11000000 db %10000011 db %00001100 db %00001011 db 0 ; padding SeelBaseStats: ; 38d2a (e:4d2a) db DEX_SEEL ; pokedex id db 65 ; base hp db 45 ; base attack db 55 ; base defense db 45 ; base speed db 70 ; base special db WATER ; species type 1 db WATER ; species type 2 db 190 ; catch rate db 100 ; base exp yield db $66 ; sprite dimensions dw SeelPicFront dw SeelPicBack ; attacks known at lvl 0 db HEADBUTT db 0 db 0 db 0 db 0 ; growth rate ; learnset db %11100000 db %10111111 db %00001000 db %11000000 db %10000010 db %00001000 db %00110010 db 0 ; padding DewgongBaseStats: ; 38d46 (e:4d46) db DEX_DEWGONG ; pokedex id db 90 ; base hp db 70 ; base attack db 80 ; base defense db 70 ; base speed db 95 ; base special db WATER ; species type 1 db ICE ; species type 2 db 75 ; catch rate db 176 ; base exp yield db $66 ; sprite dimensions dw DewgongPicFront dw DewgongPicBack ; attacks known at lvl 0 db HEADBUTT db GROWL db AURORA_BEAM db 0 db 0 ; growth rate ; learnset db %11100000 db %11111111 db %00001000 db %11000000 db %10000010 db %00001000 db %00110010 db 0 ; padding GrimerBaseStats: ; 38d62 (e:4d62) db DEX_GRIMER ; pokedex id db 80 ; base hp db 80 ; base attack db 50 ; base defense db 25 ; base speed db 40 ; base special db POISON ; species type 1 db POISON ; species type 2 db 190 ; catch rate db 90 ; base exp yield db $55 ; sprite dimensions dw GrimerPicFront dw GrimerPicBack ; attacks known at lvl 0 db POUND db DISABLE db 0 db 0 db 0 ; growth rate ; learnset db %10100000 db %00000000 db %10011000 db %11000001 db %00101010 db %01001000 db %00000010 db 0 ; padding MukBaseStats: ; 38d7e (e:4d7e) db DEX_MUK ; pokedex id db 105 ; base hp db 105 ; base attack db 75 ; base defense db 50 ; base speed db 65 ; base special db POISON ; species type 1 db POISON ; species type 2 db 75 ; catch rate db 157 ; base exp yield db $77 ; sprite dimensions dw MukPicFront dw MukPicBack ; attacks known at lvl 0 db POUND db DISABLE db POISON_GAS db 0 db 0 ; growth rate ; learnset db %10100000 db %01000000 db %10011000 db %11000001 db %00101010 db %01001000 db %00000010 db 0 ; padding ShellderBaseStats: ; 38d9a (e:4d9a) db DEX_SHELLDER ; pokedex id db 30 ; base hp db 65 ; base attack db 100 ; base defense db 40 ; base speed db 45 ; base special db WATER ; species type 1 db WATER ; species type 2 db 190 ; catch rate db 97 ; base exp yield db $55 ; sprite dimensions dw ShellderPicFront dw ShellderPicBack ; attacks known at lvl 0 db TACKLE db WITHDRAW db 0 db 0 db 5 ; growth rate ; learnset db %00100000 db %00111111 db %00001000 db %11100000 db %01001011 db %01001000 db %00010011 db 0 ; padding CloysterBaseStats: ; 38db6 (e:4db6) db DEX_CLOYSTER ; pokedex id db 50 ; base hp db 95 ; base attack db 180 ; base defense db 70 ; base speed db 85 ; base special db WATER ; species type 1 db ICE ; species type 2 db 60 ; catch rate db 203 ; base exp yield db $77 ; sprite dimensions dw CloysterPicFront dw CloysterPicBack ; attacks known at lvl 0 db WITHDRAW db SUPERSONIC db CLAMP db AURORA_BEAM db 5 ; growth rate ; learnset db %00100000 db %01111111 db %00001000 db %11100000 db %01001011 db %01001000 db %00010011 db 0 ; padding GastlyBaseStats: ; 38dd2 (e:4dd2) db DEX_GASTLY ; pokedex id db 30 ; base hp db 35 ; base attack db 30 ; base defense db 80 ; base speed db 100 ; base special db GHOST ; species type 1 db POISON ; species type 2 db 190 ; catch rate db 95 ; base exp yield db $77 ; sprite dimensions dw GastlyPicFront dw GastlyPicBack ; attacks known at lvl 0 db LICK db CONFUSE_RAY db NIGHT_SHADE db 0 db 3 ; growth rate ; learnset db %00100000 db %00000000 db %10011000 db %11010001 db %00001010 db %01101010 db %00000010 db 0 ; padding HaunterBaseStats: ; 38dee (e:4dee) db DEX_HAUNTER ; pokedex id db 45 ; base hp db 50 ; base attack db 45 ; base defense db 95 ; base speed db 115 ; base special db GHOST ; species type 1 db POISON ; species type 2 db 90 ; catch rate db 126 ; base exp yield db $66 ; sprite dimensions dw HaunterPicFront dw HaunterPicBack ; attacks known at lvl 0 db LICK db CONFUSE_RAY db NIGHT_SHADE db 0 db 3 ; growth rate ; learnset db %00100000 db %00000000 db %10011000 db %11010001 db %00001010 db %01101010 db %00000010 db 0 ; padding GengarBaseStats: ; 38e0a (e:4e0a) db DEX_GENGAR ; pokedex id db 60 ; base hp db 65 ; base attack db 60 ; base defense db 110 ; base speed db 130 ; base special db GHOST ; species type 1 db POISON ; species type 2 db 45 ; catch rate db 190 ; base exp yield db $66 ; sprite dimensions dw GengarPicFront dw GengarPicBack ; attacks known at lvl 0 db LICK db CONFUSE_RAY db NIGHT_SHADE db 0 db 3 ; growth rate ; learnset db %10110001 db %01000011 db %10011111 db %11010001 db %10001110 db %01101010 db %00100010 db 0 ; padding OnixBaseStats: ; 38e26 (e:4e26) db DEX_ONIX ; pokedex id db 35 ; base hp db 45 ; base attack db 160 ; base defense db 70 ; base speed db 30 ; base special db ROCK ; species type 1 db GROUND ; species type 2 db 45 ; catch rate db 108 ; base exp yield db $77 ; sprite dimensions dw OnixPicFront dw OnixPicBack ; attacks known at lvl 0 db TACKLE db SCREECH db 0 db 0 db 0 ; growth rate ; learnset db %10100000 db %00000011 db %00001000 db %11001110 db %10001010 db %11001000 db %00100010 db 0 ; padding DrowzeeBaseStats: ; 38e42 (e:4e42) db DEX_DROWZEE ; pokedex id db 60 ; base hp db 48 ; base attack db 45 ; base defense db 42 ; base speed db 90 ; base special db PSYCHIC ; species type 1 db PSYCHIC ; species type 2 db 190 ; catch rate db 102 ; base exp yield db $66 ; sprite dimensions dw DrowzeePicFront dw DrowzeePicBack ; attacks known at lvl 0 db POUND db HYPNOSIS db 0 db 0 db 0 ; growth rate ; learnset db %10110001 db %00000011 db %00001111 db %11110000 db %10000111 db %00111010 db %01000011 db 0 ; padding HypnoBaseStats: ; 38e5e (e:4e5e) db DEX_HYPNO ; pokedex id db 85 ; base hp db 73 ; base attack db 70 ; base defense db 67 ; base speed db 115 ; base special db PSYCHIC ; species type 1 db PSYCHIC ; species type 2 db 75 ; catch rate db 165 ; base exp yield db $77 ; sprite dimensions dw HypnoPicFront dw HypnoPicBack ; attacks known at lvl 0 db POUND db HYPNOSIS db DISABLE db CONFUSION db 0 ; growth rate ; learnset db %10110001 db %01000011 db %00001111 db %11110000 db %10000111 db %00111010 db %01000011 db 0 ; padding KrabbyBaseStats: ; 38e7a (e:4e7a) db DEX_KRABBY ; pokedex id db 30 ; base hp db 105 ; base attack db 90 ; base defense db 50 ; base speed db 25 ; base special db WATER ; species type 1 db WATER ; species type 2 db 225 ; catch rate db 115 ; base exp yield db $55 ; sprite dimensions dw KrabbyPicFront dw KrabbyPicBack ; attacks known at lvl 0 db BUBBLE db LEER db 0 db 0 db 0 ; growth rate ; learnset db %10100100 db %00111111 db %00001000 db %11000000 db %00000010 db %00001000 db %00110110 db 0 ; padding KinglerBaseStats: ; 38e96 (e:4e96) db DEX_KINGLER ; pokedex id db 55 ; base hp db 130 ; base attack db 115 ; base defense db 75 ; base speed db 50 ; base special db WATER ; species type 1 db WATER ; species type 2 db 60 ; catch rate db 206 ; base exp yield db $77 ; sprite dimensions dw KinglerPicFront dw KinglerPicBack ; attacks known at lvl 0 db BUBBLE db LEER db VICEGRIP db 0 db 0 ; growth rate ; learnset db %10100100 db %01111111 db %00001000 db %11000000 db %00000010 db %00001000 db %00110110 db 0 ; padding VoltorbBaseStats: ; 38eb2 (e:4eb2) db DEX_VOLTORB ; pokedex id db 40 ; base hp db 30 ; base attack db 50 ; base defense db 100 ; base speed db 55 ; base special db ELECTRIC ; species type 1 db ELECTRIC ; species type 2 db 190 ; catch rate db 103 ; base exp yield db $55 ; sprite dimensions dw VoltorbPicFront dw VoltorbPicBack ; attacks known at lvl 0 db TACKLE db SCREECH db 0 db 0 db 0 ; growth rate ; learnset db %00100000 db %00000001 db %10001000 db %11100001 db %01001011 db %01011000 db %01000010 db 0 ; padding ElectrodeBaseStats: ; 38ece (e:4ece) db DEX_ELECTRODE ; pokedex id db 60 ; base hp db 50 ; base attack db 70 ; base defense db 140 ; base speed db 80 ; base special db ELECTRIC ; species type 1 db ELECTRIC ; species type 2 db 60 ; catch rate db 150 ; base exp yield db $55 ; sprite dimensions dw ElectrodePicFront dw ElectrodePicBack ; attacks known at lvl 0 db TACKLE db SCREECH db SONICBOOM db 0 db 0 ; growth rate ; learnset db %00100000 db %01000001 db %10001000 db %11100001 db %11001011 db %01011000 db %01000010 db 0 ; padding ExeggcuteBaseStats: ; 38eea (e:4eea) db DEX_EXEGGCUTE ; pokedex id db 60 ; base hp db 40 ; base attack db 80 ; base defense db 40 ; base speed db 60 ; base special db GRASS ; species type 1 db PSYCHIC ; species type 2 db 90 ; catch rate db 98 ; base exp yield db $77 ; sprite dimensions dw ExeggcutePicFront dw ExeggcutePicBack ; attacks known at lvl 0 db BARRAGE db HYPNOSIS db 0 db 0 db 5 ; growth rate ; learnset db %00100000 db %00000011 db %00001000 db %11110000 db %00011011 db %01101000 db %00000010 db 0 ; padding ExeggutorBaseStats: ; 38f06 (e:4f06) db DEX_EXEGGUTOR ; pokedex id db 95 ; base hp db 95 ; base attack db 85 ; base defense db 55 ; base speed db 125 ; base special db GRASS ; species type 1 db PSYCHIC ; species type 2 db 45 ; catch rate db 212 ; base exp yield db $77 ; sprite dimensions dw ExeggutorPicFront dw ExeggutorPicBack ; attacks known at lvl 0 db BARRAGE db HYPNOSIS db 0 db 0 db 5 ; growth rate ; learnset db %00100000 db %01000011 db %00111000 db %11110000 db %00011011 db %01101000 db %00100010 db 0 ; padding CuboneBaseStats: ; 38f22 (e:4f22) db DEX_CUBONE ; pokedex id db 50 ; base hp db 50 ; base attack db 95 ; base defense db 35 ; base speed db 40 ; base special db GROUND ; species type 1 db GROUND ; species type 2 db 190 ; catch rate db 87 ; base exp yield db $55 ; sprite dimensions dw CubonePicFront dw CubonePicBack ; attacks known at lvl 0 db BONE_CLUB db GROWL db 0 db 0 db 0 ; growth rate ; learnset db %10110001 db %00111111 db %00001111 db %11001110 db %10100010 db %00001000 db %00100010 db 0 ; padding MarowakBaseStats: ; 38f3e (e:4f3e) db DEX_MAROWAK ; pokedex id db 60 ; base hp db 80 ; base attack db 110 ; base defense db 45 ; base speed db 50 ; base special db GROUND ; species type 1 db GROUND ; species type 2 db 75 ; catch rate db 124 ; base exp yield db $66 ; sprite dimensions dw MarowakPicFront dw MarowakPicBack ; attacks known at lvl 0 db BONE_CLUB db GROWL db LEER db FOCUS_ENERGY db 0 ; growth rate ; learnset db %10110001 db %01111111 db %00001111 db %11001110 db %10100010 db %00001000 db %00100010 db 0 ; padding HitmonleeBaseStats: ; 38f5a (e:4f5a) db DEX_HITMONLEE ; pokedex id db 50 ; base hp db 120 ; base attack db 53 ; base defense db 87 ; base speed db 35 ; base special db FIGHTING ; species type 1 db FIGHTING ; species type 2 db 45 ; catch rate db 139 ; base exp yield db $77 ; sprite dimensions dw HitmonleePicFront dw HitmonleePicBack ; attacks known at lvl 0 db DOUBLE_KICK db MEDITATE db 0 db 0 db 0 ; growth rate ; learnset db %10110001 db %00000011 db %00001111 db %11000000 db %11000110 db %00001000 db %00100010 db 0 ; padding HitmonchanBaseStats: ; 38f76 (e:4f76) db DEX_HITMONCHAN ; pokedex id db 50 ; base hp db 105 ; base attack db 79 ; base defense db 76 ; base speed db 35 ; base special db FIGHTING ; species type 1 db FIGHTING ; species type 2 db 45 ; catch rate db 140 ; base exp yield db $66 ; sprite dimensions dw HitmonchanPicFront dw HitmonchanPicBack ; attacks known at lvl 0 db COMET_PUNCH db AGILITY db 0 db 0 db 0 ; growth rate ; learnset db %10110001 db %00000011 db %00001111 db %11000000 db %11000110 db %00001000 db %00100010 db 0 ; padding LickitungBaseStats: ; 38f92 (e:4f92) db DEX_LICKITUNG ; pokedex id db 90 ; base hp db 55 ; base attack db 75 ; base defense db 30 ; base speed db 60 ; base special db NORMAL ; species type 1 db NORMAL ; species type 2 db 45 ; catch rate db 127 ; base exp yield db $77 ; sprite dimensions dw LickitungPicFront dw LickitungPicBack ; attacks known at lvl 0 db WRAP db SUPERSONIC db 0 db 0 db 0 ; growth rate ; learnset db %10110101 db %01111111 db %10001111 db %11000111 db %10100010 db %00001000 db %00110110 db 0 ; padding KoffingBaseStats: ; 38fae (e:4fae) db DEX_KOFFING ; pokedex id db 40 ; base hp db 65 ; base attack db 95 ; base defense db 35 ; base speed db 60 ; base special db POISON ; species type 1 db POISON ; species type 2 db 190 ; catch rate db 114 ; base exp yield db $66 ; sprite dimensions dw KoffingPicFront dw KoffingPicBack ; attacks known at lvl 0 db TACKLE db SMOG db 0 db 0 db 0 ; growth rate ; learnset db %00100000 db %00000000 db %10001000 db %11000001 db %00101010 db %01001000 db %00000010 db 0 ; padding WeezingBaseStats: ; 38fca (e:4fca) db DEX_WEEZING ; pokedex id db 65 ; base hp db 90 ; base attack db 120 ; base defense db 60 ; base speed db 85 ; base special db POISON ; species type 1 db POISON ; species type 2 db 60 ; catch rate db 173 ; base exp yield db $77 ; sprite dimensions dw WeezingPicFront dw WeezingPicBack ; attacks known at lvl 0 db TACKLE db SMOG db SLUDGE db 0 db 0 ; growth rate ; learnset db %00100000 db %01000000 db %10001000 db %11000001 db %00101010 db %01001000 db %00000010 db 0 ; padding RhyhornBaseStats: ; 38fe6 (e:4fe6) db DEX_RHYHORN ; pokedex id db 80 ; base hp db 85 ; base attack db 95 ; base defense db 25 ; base speed db 30 ; base special db GROUND ; species type 1 db ROCK ; species type 2 db 120 ; catch rate db 135 ; base exp yield db $77 ; sprite dimensions dw RhyhornPicFront dw RhyhornPicBack ; attacks known at lvl 0 db HORN_ATTACK db 0 db 0 db 0 db 5 ; growth rate ; learnset db %11100000 db %00000011 db %10001000 db %11001111 db %10100010 db %10001000 db %00100010 db 0 ; padding RhydonBaseStats: ; 39002 (e:5002) db DEX_RHYDON ; pokedex id db 105 ; base hp db 130 ; base attack db 120 ; base defense db 40 ; base speed db 45 ; base special db GROUND ; species type 1 db ROCK ; species type 2 db 60 ; catch rate db 204 ; base exp yield db $77 ; sprite dimensions dw RhydonPicFront dw RhydonPicBack ; attacks known at lvl 0 db HORN_ATTACK db STOMP db TAIL_WHIP db FURY_ATTACK db 5 ; growth rate ; learnset db %11110001 db %11111111 db %10001111 db %11001111 db %10100010 db %10001000 db %00110010 db 0 ; padding ChanseyBaseStats: ; 3901e (e:501e) db DEX_CHANSEY ; pokedex id db 250 ; base hp db 5 ; base attack db 5 ; base defense db 50 ; base speed db 105 ; base special db NORMAL ; species type 1 db NORMAL ; species type 2 db 30 ; catch rate db 255 ; base exp yield db $66 ; sprite dimensions dw ChanseyPicFront dw ChanseyPicBack ; attacks known at lvl 0 db POUND db DOUBLESLAP db 0 db 0 db 4 ; growth rate ; learnset db %10110001 db %01111111 db %10101111 db %11110001 db %10110111 db %00111001 db %01100011 db 0 ; padding TangelaBaseStats: ; 3903a (e:503a) db DEX_TANGELA ; pokedex id db 65 ; base hp db 55 ; base attack db 115 ; base defense db 60 ; base speed db 100 ; base special db GRASS ; species type 1 db GRASS ; species type 2 db 45 ; catch rate db 166 ; base exp yield db $66 ; sprite dimensions dw TangelaPicFront dw TangelaPicBack ; attacks known at lvl 0 db CONSTRICT db BIND db 0 db 0 db 0 ; growth rate ; learnset db %10100100 db %01000011 db %00111000 db %11000000 db %10000010 db %00001000 db %00000110 db 0 ; padding KangaskhanBaseStats: ; 39056 (e:5056) db DEX_KANGASKHAN ; pokedex id db 105 ; base hp db 95 ; base attack db 80 ; base defense db 90 ; base speed db 40 ; base special db NORMAL ; species type 1 db NORMAL ; species type 2 db 45 ; catch rate db 175 ; base exp yield db $77 ; sprite dimensions dw KangaskhanPicFront dw KangaskhanPicBack ; attacks known at lvl 0 db COMET_PUNCH db RAGE db 0 db 0 db 0 ; growth rate ; learnset db %10110001 db %01111111 db %10001111 db %11000111 db %10100010 db %10001000 db %00110010 db 0 ; padding HorseaBaseStats: ; 39072 (e:5072) db DEX_HORSEA ; pokedex id db 30 ; base hp db 40 ; base attack db 70 ; base defense db 60 ; base speed db 70 ; base special db WATER ; species type 1 db WATER ; species type 2 db 225 ; catch rate db 83 ; base exp yield db $55 ; sprite dimensions dw HorseaPicFront dw HorseaPicBack ; attacks known at lvl 0 db BUBBLE db 0 db 0 db 0 db 0 ; growth rate ; learnset db %00100000 db %00111111 db %00001000 db %11000000 db %11000010 db %00001000 db %00010010 db 0 ; padding SeadraBaseStats: ; 3908e (e:508e) db DEX_SEADRA ; pokedex id db 55 ; base hp db 65 ; base attack db 95 ; base defense db 85 ; base speed db 95 ; base special db WATER ; species type 1 db WATER ; species type 2 db 75 ; catch rate db 155 ; base exp yield db $66 ; sprite dimensions dw SeadraPicFront dw SeadraPicBack ; attacks known at lvl 0 db BUBBLE db SMOKESCREEN db 0 db 0 db 0 ; growth rate ; learnset db %00100000 db %01111111 db %00001000 db %11000000 db %11000010 db %00001000 db %00010010 db 0 ; padding GoldeenBaseStats: ; 390aa (e:50aa) db DEX_GOLDEEN ; pokedex id db 45 ; base hp db 67 ; base attack db 60 ; base defense db 63 ; base speed db 50 ; base special db WATER ; species type 1 db WATER ; species type 2 db 225 ; catch rate db 111 ; base exp yield db $66 ; sprite dimensions dw GoldeenPicFront dw GoldeenPicBack ; attacks known at lvl 0 db PECK db TAIL_WHIP db 0 db 0 db 0 ; growth rate ; learnset db %01100000 db %00111111 db %00001000 db %11000000 db %11000010 db %00001000 db %00010010 db 0 ; padding SeakingBaseStats: ; 390c6 (e:50c6) db DEX_SEAKING ; pokedex id db 80 ; base hp db 92 ; base attack db 65 ; base defense db 68 ; base speed db 80 ; base special db WATER ; species type 1 db WATER ; species type 2 db 60 ; catch rate db 170 ; base exp yield db $77 ; sprite dimensions dw SeakingPicFront dw SeakingPicBack ; attacks known at lvl 0 db PECK db TAIL_WHIP db SUPERSONIC db 0 db 0 ; growth rate ; learnset db %01100000 db %01111111 db %00001000 db %11000000 db %11000010 db %00001000 db %00010010 db 0 ; padding StaryuBaseStats: ; 390e2 (e:50e2) db DEX_STARYU ; pokedex id db 30 ; base hp db 45 ; base attack db 55 ; base defense db 85 ; base speed db 70 ; base special db WATER ; species type 1 db WATER ; species type 2 db 225 ; catch rate db 106 ; base exp yield db $66 ; sprite dimensions dw StaryuPicFront dw StaryuPicBack ; attacks known at lvl 0 db TACKLE db 0 db 0 db 0 db 5 ; growth rate ; learnset db %00100000 db %00111111 db %10001000 db %11110001 db %11000011 db %00111000 db %01010011 db 0 ; padding StarmieBaseStats: ; 390fe (e:50fe) db DEX_STARMIE ; pokedex id db 60 ; base hp db 75 ; base attack db 85 ; base defense db 115 ; base speed db 100 ; base special db WATER ; species type 1 db PSYCHIC ; species type 2 db 60 ; catch rate db 207 ; base exp yield db $66 ; sprite dimensions dw StarmiePicFront dw StarmiePicBack ; attacks known at lvl 0 db TACKLE db WATER_GUN db HARDEN db 0 db 5 ; growth rate ; learnset db %00100000 db %01111111 db %10001000 db %11110001 db %11000011 db %00111000 db %01010011 db 0 ; padding MrMimeBaseStats: ; 3911a (e:511a) db DEX_MR_MIME ; pokedex id db 40 ; base hp db 45 ; base attack db 65 ; base defense db 90 ; base speed db 100 ; base special db PSYCHIC ; species type 1 db PSYCHIC ; species type 2 db 45 ; catch rate db 136 ; base exp yield db $66 ; sprite dimensions dw MrMimePicFront dw MrMimePicBack ; attacks known at lvl 0 db CONFUSION db BARRIER db 0 db 0 db 0 ; growth rate ; learnset db %10110001 db %01000011 db %10101111 db %11110001 db %10000111 db %00111000 db %01000010 db 0 ; padding ScytherBaseStats: ; 39136 (e:5136) db DEX_SCYTHER ; pokedex id db 70 ; base hp db 110 ; base attack db 80 ; base defense db 105 ; base speed db 55 ; base special db BUG ; species type 1 db FLYING ; species type 2 db 45 ; catch rate db 187 ; base exp yield db $77 ; sprite dimensions dw ScytherPicFront dw ScytherPicBack ; attacks known at lvl 0 db QUICK_ATTACK db 0 db 0 db 0 db 0 ; growth rate ; learnset db %00100100 db %01000011 db %00001000 db %11000000 db %11000010 db %00001000 db %00000110 db 0 ; padding JynxBaseStats: ; 39152 (e:5152) db DEX_JYNX ; pokedex id db 65 ; base hp db 50 ; base attack db 35 ; base defense db 95 ; base speed db 95 ; base special db ICE ; species type 1 db PSYCHIC ; species type 2 db 45 ; catch rate db 137 ; base exp yield db $66 ; sprite dimensions dw JynxPicFront dw JynxPicBack ; attacks known at lvl 0 db POUND db LOVELY_KISS db 0 db 0 db 0 ; growth rate ; learnset db %10110001 db %01111111 db %00001111 db %11110000 db %10000111 db %00101000 db %00000010 db 0 ; padding ElectabuzzBaseStats: ; 3916e (e:516e) db DEX_ELECTABUZZ ; pokedex id db 65 ; base hp db 83 ; base attack db 57 ; base defense db 105 ; base speed db 85 ; base special db ELECTRIC ; species type 1 db ELECTRIC ; species type 2 db 45 ; catch rate db 156 ; base exp yield db $66 ; sprite dimensions dw ElectabuzzPicFront dw ElectabuzzPicBack ; attacks known at lvl 0 db QUICK_ATTACK db LEER db 0 db 0 db 0 ; growth rate ; learnset db %10110001 db %01000011 db %10001111 db %11110001 db %11000111 db %00111000 db %01100010 db 0 ; padding MagmarBaseStats: ; 3918a (e:518a) db DEX_MAGMAR ; pokedex id db 65 ; base hp db 95 ; base attack db 57 ; base defense db 93 ; base speed db 85 ; base special db FIRE ; species type 1 db FIRE ; species type 2 db 45 ; catch rate db 167 ; base exp yield db $66 ; sprite dimensions dw MagmarPicFront dw MagmarPicBack ; attacks known at lvl 0 db EMBER db 0 db 0 db 0 db 0 ; growth rate ; learnset db %10110001 db %01000011 db %00001111 db %11110000 db %10100110 db %00101000 db %00100010 db 0 ; padding PinsirBaseStats: ; 391a6 (e:51a6) db DEX_PINSIR ; pokedex id db 65 ; base hp db 125 ; base attack db 100 ; base defense db 85 ; base speed db 55 ; base special db BUG ; species type 1 db BUG ; species type 2 db 45 ; catch rate db 200 ; base exp yield db $77 ; sprite dimensions dw PinsirPicFront dw PinsirPicBack ; attacks known at lvl 0 db VICEGRIP db 0 db 0 db 0 db 5 ; growth rate ; learnset db %10100100 db %01000011 db %00001101 db %11000000 db %00000010 db %00001000 db %00100110 db 0 ; padding TaurosBaseStats: ; 391c2 (e:51c2) db DEX_TAUROS ; pokedex id db 75 ; base hp db 100 ; base attack db 95 ; base defense db 110 ; base speed db 70 ; base special db NORMAL ; species type 1 db NORMAL ; species type 2 db 45 ; catch rate db 211 ; base exp yield db $77 ; sprite dimensions dw TaurosPicFront dw TaurosPicBack ; attacks known at lvl 0 db TACKLE db 0 db 0 db 0 db 5 ; growth rate ; learnset db %11100000 db %01110011 db %10001000 db %11000111 db %10100010 db %00001000 db %00100010 db 0 ; padding MagikarpBaseStats: ; 391de (e:51de) db DEX_MAGIKARP ; pokedex id db 20 ; base hp db 10 ; base attack db 55 ; base defense db 80 ; base speed db 20 ; base special db WATER ; species type 1 db WATER ; species type 2 db 255 ; catch rate db 20 ; base exp yield db $66 ; sprite dimensions dw MagikarpPicFront dw MagikarpPicBack ; attacks known at lvl 0 db SPLASH db 0 db 0 db 0 db 5 ; growth rate ; learnset db %00000000 db %00000000 db %00000000 db %00000000 db %00000000 db %00000000 db %00000000 db 0 ; padding GyaradosBaseStats: ; 391fa (e:51fa) db DEX_GYARADOS ; pokedex id db 95 ; base hp db 125 ; base attack db 79 ; base defense db 81 ; base speed db 100 ; base special db WATER ; species type 1 db FLYING ; species type 2 db 45 ; catch rate db 214 ; base exp yield db $77 ; sprite dimensions dw GyaradosPicFront dw GyaradosPicBack ; attacks known at lvl 0 db BITE db DRAGON_RAGE db LEER db HYDRO_PUMP db 5 ; growth rate ; learnset db %10100000 db %01111111 db %11001000 db %11000001 db %10100011 db %00001000 db %00110010 db 0 ; padding LaprasBaseStats: ; 39216 (e:5216) db DEX_LAPRAS ; pokedex id db 130 ; base hp db 85 ; base attack db 80 ; base defense db 60 ; base speed db 95 ; base special db WATER ; species type 1 db ICE ; species type 2 db 45 ; catch rate db 219 ; base exp yield db $77 ; sprite dimensions dw LaprasPicFront dw LaprasPicBack ; attacks known at lvl 0 db WATER_GUN db GROWL db 0 db 0 db 5 ; growth rate ; learnset db %11100000 db %01111111 db %11101000 db %11010001 db %10000011 db %00101000 db %00110010 db 0 ; padding DittoBaseStats: ; 39232 (e:5232) db DEX_DITTO ; pokedex id db 48 ; base hp db 48 ; base attack db 48 ; base defense db 48 ; base speed db 48 ; base special db NORMAL ; species type 1 db NORMAL ; species type 2 db 35 ; catch rate db 61 ; base exp yield db $55 ; sprite dimensions dw DittoPicFront dw DittoPicBack ; attacks known at lvl 0 db TRANSFORM db 0 db 0 db 0 db 0 ; growth rate ; learnset db %00000000 db %00000000 db %00000000 db %00000000 db %00000000 db %00000000 db %00000000 db 0 ; padding EeveeBaseStats: ; 3924e (e:524e) db DEX_EEVEE ; pokedex id db 55 ; base hp db 55 ; base attack db 50 ; base defense db 55 ; base speed db 65 ; base special db NORMAL ; species type 1 db NORMAL ; species type 2 db 45 ; catch rate db 92 ; base exp yield db $55 ; sprite dimensions dw EeveePicFront dw EeveePicBack ; attacks known at lvl 0 db TACKLE db SAND_ATTACK db 0 db 0 db 0 ; growth rate ; learnset db %10100000 db %00000011 db %00001000 db %11000000 db %11000011 db %00001000 db %00000010 db 0 ; padding VaporeonBaseStats: ; 3926a (e:526a) db DEX_VAPOREON ; pokedex id db 130 ; base hp db 65 ; base attack db 60 ; base defense db 65 ; base speed db 110 ; base special db WATER ; species type 1 db WATER ; species type 2 db 45 ; catch rate db 196 ; base exp yield db $66 ; sprite dimensions dw VaporeonPicFront dw VaporeonPicBack ; attacks known at lvl 0 db TACKLE db SAND_ATTACK db QUICK_ATTACK db WATER_GUN db 0 ; growth rate ; learnset db %10100000 db %01111111 db %00001000 db %11000000 db %11000011 db %00001000 db %00010010 db 0 ; padding JolteonBaseStats: ; 39286 (e:5286) db DEX_JOLTEON ; pokedex id db 65 ; base hp db 65 ; base attack db 60 ; base defense db 130 ; base speed db 110 ; base special db ELECTRIC ; species type 1 db ELECTRIC ; species type 2 db 45 ; catch rate db 197 ; base exp yield db $66 ; sprite dimensions dw JolteonPicFront dw JolteonPicBack ; attacks known at lvl 0 db TACKLE db SAND_ATTACK db QUICK_ATTACK db THUNDERSHOCK db 0 ; growth rate ; learnset db %10100000 db %01000011 db %10001000 db %11000001 db %11000011 db %00011000 db %01000010 db 0 ; padding FlareonBaseStats: ; 392a2 (e:52a2) db DEX_FLAREON ; pokedex id db 65 ; base hp db 130 ; base attack db 60 ; base defense db 65 ; base speed db 110 ; base special db FIRE ; species type 1 db FIRE ; species type 2 db 45 ; catch rate db 198 ; base exp yield db $66 ; sprite dimensions dw FlareonPicFront dw FlareonPicBack ; attacks known at lvl 0 db TACKLE db SAND_ATTACK db QUICK_ATTACK db EMBER db 0 ; growth rate ; learnset db %10100000 db %01000011 db %00001000 db %11000000 db %11100011 db %00001000 db %00000010 db 0 ; padding PorygonBaseStats: ; 392be (e:52be) db DEX_PORYGON ; pokedex id db 65 ; base hp db 60 ; base attack db 70 ; base defense db 40 ; base speed db 75 ; base special db NORMAL ; species type 1 db NORMAL ; species type 2 db 45 ; catch rate db 130 ; base exp yield db $66 ; sprite dimensions dw PorygonPicFront dw PorygonPicBack ; attacks known at lvl 0 db TACKLE db SHARPEN db CONVERSION db 0 db 0 ; growth rate ; learnset db %00100000 db %01110011 db %10001000 db %11110001 db %11000011 db %00111000 db %01000011 db 0 ; padding OmanyteBaseStats: ; 392da (e:52da) db DEX_OMANYTE ; pokedex id db 35 ; base hp db 40 ; base attack db 100 ; base defense db 35 ; base speed db 90 ; base special db ROCK ; species type 1 db WATER ; species type 2 db 45 ; catch rate db 120 ; base exp yield db $55 ; sprite dimensions dw OmanytePicFront dw OmanytePicBack ; attacks known at lvl 0 db WATER_GUN db WITHDRAW db 0 db 0 db 0 ; growth rate ; learnset db %10100000 db %00111111 db %00001000 db %11000000 db %00000011 db %00001000 db %00010010 db 0 ; padding OmastarBaseStats: ; 392f6 (e:52f6) db DEX_OMASTAR ; pokedex id db 70 ; base hp db 60 ; base attack db 125 ; base defense db 55 ; base speed db 115 ; base special db ROCK ; species type 1 db WATER ; species type 2 db 45 ; catch rate db 199 ; base exp yield db $66 ; sprite dimensions dw OmastarPicFront dw OmastarPicBack ; attacks known at lvl 0 db WATER_GUN db WITHDRAW db HORN_ATTACK db 0 db 0 ; growth rate ; learnset db %11100000 db %01111111 db %00001101 db %11000000 db %10000011 db %00001000 db %00010010 db 0 ; padding KabutoBaseStats: ; 39312 (e:5312) db DEX_KABUTO ; pokedex id db 30 ; base hp db 80 ; base attack db 90 ; base defense db 55 ; base speed db 45 ; base special db ROCK ; species type 1 db WATER ; species type 2 db 45 ; catch rate db 119 ; base exp yield db $55 ; sprite dimensions dw KabutoPicFront dw KabutoPicBack ; attacks known at lvl 0 db SCRATCH db HARDEN db 0 db 0 db 0 ; growth rate ; learnset db %10100000 db %00111111 db %00001000 db %11000000 db %00000011 db %00001000 db %00010010 db 0 ; padding KabutopsBaseStats: ; 3932e (e:532e) db DEX_KABUTOPS ; pokedex id db 60 ; base hp db 115 ; base attack db 105 ; base defense db 80 ; base speed db 70 ; base special db ROCK ; species type 1 db WATER ; species type 2 db 45 ; catch rate db 201 ; base exp yield db $66 ; sprite dimensions dw KabutopsPicFront dw KabutopsPicBack ; attacks known at lvl 0 db SCRATCH db HARDEN db ABSORB db 0 db 0 ; growth rate ; learnset db %10110110 db %01111111 db %00001101 db %11000000 db %10000011 db %00001000 db %00010010 db 0 ; padding AerodactylBaseStats: ; 3934a (e:534a) db DEX_AERODACTYL ; pokedex id db 80 ; base hp db 105 ; base attack db 65 ; base defense db 130 ; base speed db 60 ; base special db ROCK ; species type 1 db FLYING ; species type 2 db 45 ; catch rate db 202 ; base exp yield db $77 ; sprite dimensions dw AerodactylPicFront dw AerodactylPicBack ; attacks known at lvl 0 db WING_ATTACK db AGILITY db 0 db 0 db 5 ; growth rate ; learnset db %00101010 db %01000011 db %01001000 db %11000000 db %01100011 db %00001100 db %00001010 db 0 ; padding SnorlaxBaseStats: ; 39366 (e:5366) db DEX_SNORLAX ; pokedex id db 160 ; base hp db 110 ; base attack db 65 ; base defense db 30 ; base speed db 65 ; base special db NORMAL ; species type 1 db NORMAL ; species type 2 db 25 ; catch rate db 154 ; base exp yield db $77 ; sprite dimensions dw SnorlaxPicFront dw SnorlaxPicBack ; attacks known at lvl 0 db HEADBUTT db AMNESIA db REST db 0 db 5 ; growth rate ; learnset db %10110001 db %11111111 db %10101111 db %11010111 db %10101111 db %10101000 db %00110010 db 0 ; padding ArticunoBaseStats: ; 39382 (e:5382) db DEX_ARTICUNO ; pokedex id db 90 ; base hp db 85 ; base attack db 100 ; base defense db 85 ; base speed db 125 ; base special db ICE ; species type 1 db FLYING ; species type 2 db 3 ; catch rate db 215 ; base exp yield db $77 ; sprite dimensions dw ArticunoPicFront dw ArticunoPicBack ; attacks known at lvl 0 db PECK db ICE_BEAM db 0 db 0 db 5 ; growth rate ; learnset db %00101010 db %01111111 db %00001000 db %11000000 db %01000011 db %00001100 db %00001010 db 0 ; padding ZapdosBaseStats: ; 3939e (e:539e) db DEX_ZAPDOS ; pokedex id db 90 ; base hp db 90 ; base attack db 85 ; base defense db 100 ; base speed db 125 ; base special db ELECTRIC ; species type 1 db FLYING ; species type 2 db 3 ; catch rate db 216 ; base exp yield db $77 ; sprite dimensions dw ZapdosPicFront dw ZapdosPicBack ; attacks known at lvl 0 db THUNDERSHOCK db DRILL_PECK db 0 db 0 db 5 ; growth rate ; learnset db %00101010 db %01000011 db %10001000 db %11000001 db %01000011 db %00011100 db %01001010 db 0 ; padding MoltresBaseStats: ; 393ba (e:53ba) db DEX_MOLTRES ; pokedex id db 90 ; base hp db 100 ; base attack db 90 ; base defense db 90 ; base speed db 125 ; base special db FIRE ; species type 1 db FLYING ; species type 2 db 3 ; catch rate db 217 ; base exp yield db $77 ; sprite dimensions dw MoltresPicFront dw MoltresPicBack ; attacks known at lvl 0 db PECK db FIRE_SPIN db 0 db 0 db 5 ; growth rate ; learnset db %00101010 db %01000011 db %00001000 db %11000000 db %01100011 db %00001100 db %00001010 db 0 ; padding DratiniBaseStats: ; 393d6 (e:53d6) db DEX_DRATINI ; pokedex id db 41 ; base hp db 64 ; base attack db 45 ; base defense db 50 ; base speed db 50 ; base special db DRAGON ; species type 1 db DRAGON ; species type 2 db 45 ; catch rate db 67 ; base exp yield db $55 ; sprite dimensions dw DratiniPicFront dw DratiniPicBack ; attacks known at lvl 0 db WRAP db LEER db 0 db 0 db 5 ; growth rate ; learnset db %10100000 db %00111111 db %11001000 db %11000001 db %11100011 db %00011000 db %00010010 db 0 ; padding DragonairBaseStats: ; 393f2 (e:53f2) db DEX_DRAGONAIR ; pokedex id db 61 ; base hp db 84 ; base attack db 65 ; base defense db 70 ; base speed db 70 ; base special db DRAGON ; species type 1 db DRAGON ; species type 2 db 45 ; catch rate db 144 ; base exp yield db $66 ; sprite dimensions dw DragonairPicFront dw DragonairPicBack ; attacks known at lvl 0 db WRAP db LEER db THUNDER_WAVE db 0 db 5 ; growth rate ; learnset db %11100000 db %00111111 db %11001000 db %11000001 db %11100011 db %00011000 db %00010010 db 0 ; padding DragoniteBaseStats: ; 3940e (e:540e) db DEX_DRAGONITE ; pokedex id db 91 ; base hp db 134 ; base attack db 95 ; base defense db 80 ; base speed db 100 ; base special db DRAGON ; species type 1 db FLYING ; species type 2 db 45 ; catch rate db 218 ; base exp yield db $77 ; sprite dimensions dw DragonitePicFront dw DragonitePicBack ; attacks known at lvl 0 db WRAP db LEER db THUNDER_WAVE db AGILITY db 5 ; growth rate ; learnset db %11100010 db %01111111 db %11001000 db %11000001 db %11100011 db %00011000 db %00110010 db 0 ; padding MewtwoBaseStats: ; 3942a (e:542a) db DEX_MEWTWO ; pokedex id db 106 ; base hp db 110 ; base attack db 90 ; base defense db 130 ; base speed db 154 ; base special db PSYCHIC ; species type 1 db PSYCHIC ; species type 2 db 3 ; catch rate db 220 ; base exp yield db $77 ; sprite dimensions dw MewtwoPicFront dw MewtwoPicBack ; attacks known at lvl 0 db CONFUSION db DISABLE db SWIFT db PSYCHIC_M db 5 ; growth rate ; learnset db %10110001 db %11111111 db %10101111 db %11110001 db %10101111 db %00111000 db %01100011 db 0 ; padding CryData: ; 39446 (e:5446) ;$BaseCry, $Pitch, $Length db $11, $00, $80; Rhydon db $03, $00, $80; Kangaskhan db $00, $00, $80; Nidoran♂ db $19, $CC, $01; Clefairy db $10, $00, $80; Spearow db $06, $ED, $80; Voltorb db $09, $00, $80; Nidoking db $1F, $00, $80; Slowbro db $0F, $20, $80; Ivysaur db $0D, $00, $80; Exeggutor db $0C, $00, $80; Lickitung db $0B, $00, $80; Exeggcute db $05, $00, $80; Grimer db $07, $00, $FF; Gengar db $01, $00, $80; Nidoran♀ db $0A, $00, $80; Nidoqueen db $19, $00, $80; Cubone db $04, $00, $80; Rhyhorn db $1B, $00, $80; Lapras db $15, $00, $80; Arcanine db $1E, $EE, $FF; Mew db $17, $00, $80; Gyarados db $18, $00, $80; Shellder db $1A, $00, $80; Tentacool db $1C, $00, $80; Gastly db $16, $00, $80; Scyther db $1E, $02, $20; Staryu db $13, $00, $80; Blastoise db $14, $00, $80; Pinsir db $12, $00, $80; Tangela db $00, $00, $00; MissingNo. db $00, $00, $00; MissingNo. db $1F, $20, $40; Growlithe db $17, $FF, $C0; Onix db $18, $40, $A0; Fearow db $0E, $DF, $04; Pidgey db $02, $00, $80; Slowpoke db $1C, $A8, $C0; Kadabra db $24, $00, $80; Graveler db $14, $0A, $C0; Chansey db $1F, $48, $60; Machoke db $20, $08, $40; Mr.Mime db $12, $80, $C0; Hitmonlee db $0C, $EE, $C0; Hitmonchan db $17, $E0, $10; Arbok db $1E, $42, $FF; Parasect db $21, $20, $60; Psyduck db $0D, $88, $20; Drowzee db $12, $E0, $40; Golem db $00, $00, $00; MissingNo. db $04, $FF, $30; Magmar db $00, $00, $00; MissingNo. db $06, $8F, $FF; Electabuzz db $1C, $20, $C0; Magneton db $12, $E6, $DD; Koffing db $00, $00, $00; MissingNo. db $0A, $DD, $60; Mankey db $0C, $88, $C0; Seel db $0B, $AA, $01; Diglett db $1D, $11, $40; Tauros db $00, $00, $00; MissingNo. db $00, $00, $00; MissingNo. db $00, $00, $00; MissingNo. db $10, $DD, $01; Farfetch'd db $1A, $44, $40; Venonat db $0F, $3C, $C0; Dragonite db $00, $80, $10; MissingNo. db $00, $00, $00; MissingNo. db $1D, $E0, $80; MissingNo. db $0B, $BB, $01; Doduo db $0E, $FF, $FF; Poliwag db $0D, $FF, $FF; Jynx db $09, $F8, $40; Moltres db $09, $80, $40; Articuno db $18, $FF, $80; Zapdos db $0E, $FF, $FF; Ditto db $19, $77, $10; Meowth db $20, $20, $E0; Krabby db $22, $FF, $40; MissingNo. db $00, $00, $00; MissingNo. db $0E, $E0, $60; MissingNo. db $24, $4F, $10; Vulpix db $24, $88, $60; Ninetales db $0F, $EE, $01; Pikachu db $09, $EE, $08; Raichu db $00, $00, $00; MissingNo. db $00, $00, $00; MissingNo. db $0F, $60, $40; Dratini db $0F, $40, $80; Dragonair db $16, $BB, $40; Kabuto db $18, $EE, $01; Kabutops db $19, $99, $10; Horsea db $19, $3C, $01; Seadra db $0F, $40, $C0; MissingNo. db $0F, $20, $C0; MissingNo. db $00, $20, $40; Sandshrew db $00, $FF, $FF; Sandslash db $1F, $F0, $01; Omanyte db $1F, $FF, $40; Omastar db $0E, $FF, $35; Jigglypuff db $0E, $68, $60; Wigglytuff db $1A, $88, $60; Eevee db $1A, $10, $20; Flareon db $1A, $3D, $80; Jolteon db $1A, $AA, $FF; Vaporeon db $1F, $EE, $01; Machop db $1D, $E0, $80; Zubat db $17, $12, $40; Ekans db $1E, $20, $E0; Paras db $0E, $77, $60; Poliwhirl db $0E, $00, $FF; Poliwrath db $15, $EE, $01; Weedle db $13, $FF, $01; Kakuna db $13, $60, $80; Beedrill db $00, $00, $00; MissingNo. db $0B, $99, $20; Dodrio db $0A, $AF, $40; Primeape db $0B, $2A, $10; Dugtrio db $1A, $29, $80; Venomoth db $0C, $23, $FF; Dewgong db $00, $00, $00; MissingNo. db $00, $00, $00; MissingNo. db $16, $80, $20; Caterpie db $1C, $CC, $01; Metapod db $16, $77, $40; Butterfree db $1F, $08, $C0; Machamp db $11, $20, $10; MissingNo. db $21, $FF, $40; Golduck db $0D, $EE, $40; Hypno db $1D, $FA, $80; Golbat db $1E, $99, $FF; Mewtwo db $05, $55, $01; Snorlax db $17, $80, $00; Magikarp db $00, $00, $00; MissingNo. db $00, $00, $00; MissingNo. db $07, $EF, $FF; Muk db $0F, $40, $80; MissingNo. db $20, $EE, $E0; Kingler db $18, $6F, $E0; Cloyster db $00, $00, $00; MissingNo. db $06, $A8, $90; Electrode db $19, $AA, $20; Clefable db $12, $FF, $FF; Weezing db $19, $99, $FF; Persian db $08, $4F, $60; Marowak db $00, $00, $00; MissingNo. db $1C, $30, $40; Haunter db $1C, $C0, $01; Abra db $1C, $98, $FF; Alakazam db $14, $28, $C0; Pidgeotto db $14, $11, $FF; Pidgeot db $1E, $00, $80; Starmie db $0F, $80, $01; Bulbasaur db $0F, $00, $C0; Venusaur db $1A, $EE, $FF; Tentacruel db $00, $00, $00; MissingNo. db $16, $80, $40; Goldeen db $16, $10, $FF; Seaking db $00, $00, $00; MissingNo. db $00, $00, $00; MissingNo. db $00, $00, $00; MissingNo. db $00, $00, $00; MissingNo. db $25, $00, $80; Ponyta db $25, $20, $C0; Rapidash db $22, $00, $80; Rattata db $22, $20, $FF; Raticate db $00, $2C, $C0; Nidorino db $01, $2C, $E0; Nidorina db $24, $F0, $10; Geodude db $25, $AA, $FF; Porygon db $23, $20, $F0; Aerodactyl db $00, $00, $00; MissingNo. db $1C, $80, $60; Magnemite db $00, $00, $00; MissingNo. db $00, $00, $00; MissingNo. db $04, $60, $40; Charmander db $1D, $60, $40; Squirtle db $04, $20, $40; Charmeleon db $1D, $20, $40; Wartortle db $04, $00, $80; Charizard db $1D, $00, $80; MissingNo. db $00, $00, $00; MissingNo. db $00, $00, $00; MissingNo. db $00, $00, $00; MissingNo. db $08, $DD, $01; Oddish db $08, $AA, $40; Gloom db $23, $22, $FF; Vileplume db $21, $55, $01; Bellsprout db $25, $44, $20; Weepinbell db $25, $66, $CC; Victreebel Func_39680: ; 39680 (e:5680) ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld a, [$d060] ld hl, $d026 jr z, .asm_39691 ld a, [$d065] ld hl, $cff7 .asm_39691 ld c, $4 ld b, a .asm_39694 srl b call c, Func_3969f inc hl inc hl dec c ret z jr .asm_39694 Func_3969f: ; 3969f (e:569f) ld a, [hl] add a ld [hld], a ld a, [hl] rl a ld [hli], a ret Func_396a7: ; 396a7 (e:56a7) ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld a, [$d061] ld hl, W_PLAYERMONATK jr z, .asm_396b8 ld a, [$d066] ld hl, W_ENEMYMONATTACK .asm_396b8 ld c, $4 ld b, a .asm_396bb srl b call c, Func_396c6 inc hl inc hl dec c ret z jr .asm_396bb Func_396c6: ; 396c6 (e:56c6) ld a, [hl] srl a ld [hli], a rr [hl] or [hl] jr nz, .asm_396d1 ld [hl], $1 .asm_396d1 dec hl ret _ScrollTrainerPicAfterBattle: ; 396d3 (e:56d3) ; Load the enemy trainer's pic and scrolls it into ; the screen from the right. xor a ld [W_ENEMYMONID], a ld b, $1 call GoPAL_SET ld hl, _LoadTrainerPic ld b, BANK(_LoadTrainerPic) call Bankswitch FuncCoord 19, 0 ; $c3b3 ld hl, Coord ld c, $0 .asm_396e9 inc c ld a, c cp $7 ret z ld d, $0 push bc push hl .asm_396f2 call Func_39707 inc hl ld a, $7 add d ld d, a dec c jr nz, .asm_396f2 ld c, $4 call DelayFrames pop hl pop bc dec hl jr .asm_396e9 Func_39707: ; 39707 (e:5707) push hl push de push bc ld e, $7 .asm_3970c ld [hl], d ld bc, $14 add hl, bc inc d dec e jr nz, .asm_3970c pop bc pop de pop hl ret ; creates a set of moves that may be used and returns its address in hl ; unused slots are filled with 0, all used slots may be chosen with equal probability AIEnemyTrainerChooseMoves: ; 39719 (e:5719) ld a, $a ld hl, $cee9 ; init temporary move selection array. Only the moves with the lowest numbers are chosen in the end ld [hli], a ; move 1 ld [hli], a ; move 2 ld [hli], a ; move 3 ld [hl], a ; move 4 ld a, [W_ENEMYDISABLEDMOVE] ; forbid disabled move (if any) swap a and $f jr z, .noMoveDisabled ld hl, $cee9 dec a ld c, a ld b, $0 add hl, bc ; advance pointer to forbidden move ld [hl], $50 ; forbid (highly discourage) disabled move .noMoveDisabled ld hl, TrainerClassMoveChoiceModifications ; 589B ld a, [W_TRAINERCLASS] ld b, a .loopTrainerClasses dec b jr z, .readTrainerClassData .loopTrainerClassData ld a, [hli] and a jr nz, .loopTrainerClassData jr .loopTrainerClasses .readTrainerClassData ld a, [hl] and a jp z, .useOriginalMoveSet push hl .nextMoveChoiceModification pop hl ld a, [hli] and a jr z, .loopFindMinimumEntries push hl ld hl, AIMoveChoiceModificationFunctionPointers ; $57a3 dec a add a ld c, a ld b, $0 add hl, bc ; skip to pointer ld a, [hli] ; read pointer into hl ld h, [hl] ld l, a ld de, .nextMoveChoiceModification ; set return address push de jp [hl] ; execute modification function .loopFindMinimumEntries ; all entries will be decremented sequentially until one of them is zero ld hl, $cee9 ; temp move selection array ld de, W_ENEMYMONMOVES ; enemy moves ld c, $4 .loopDecrementEntries ld a, [de] inc de and a jr z, .loopFindMinimumEntries dec [hl] jr z, .minimumEntriesFound inc hl dec c jr z, .loopFindMinimumEntries jr .loopDecrementEntries .minimumEntriesFound ld a, c .loopUndoPartialIteration ; undo last (partial) loop iteration inc [hl] dec hl inc a cp $5 jr nz, .loopUndoPartialIteration ld hl, $cee9 ; temp move selection array ld de, W_ENEMYMONMOVES ; enemy moves ld c, $4 .filterMinimalEntries ; all minimal entries now have value 1. All other slots will be disabled (move set to 0) ld a, [de] and a jr nz, .moveExisting ; 0x3978a $1 ld [hl], a .moveExisting ld a, [hl] dec a jr z, .slotWithMinimalValue xor a ld [hli], a ; disable move slot jr .next .slotWithMinimalValue ld a, [de] ld [hli], a ; enable move slot .next inc de dec c jr nz, .filterMinimalEntries ld hl, $cee9 ; use created temporary array as move set ret .useOriginalMoveSet ld hl, W_ENEMYMONMOVES ; use original move set ret AIMoveChoiceModificationFunctionPointers: ; 397a3 (e:57a3) dw AIMoveChoiceModification1 dw AIMoveChoiceModification2 dw AIMoveChoiceModification3 dw AIMoveChoiceModification4 ; unused, does nothing ; discourages moves that cause no damage but only a status ailment if player's mon already has one AIMoveChoiceModification1: ; 397ab (e:57ab) ld a, [W_PLAYERMONSTATUS] and a ret z ; return if no status ailment on player's mon ld hl, $cee8 ; temp move selection array (-1 byte offest) ld de, W_ENEMYMONMOVES ; enemy moves ld b, $5 .nextMove dec b ret z ; processed all 4 moves inc hl ld a, [de] and a ret z ; no more moves in move set inc de call ReadMove ld a, [W_ENEMYMOVEPOWER] and a jr nz, .nextMove ld a, [W_ENEMYMOVEEFFECT] push hl push de push bc ld hl, StatusAilmentMoveEffects ld de, $0001 call IsInArray pop bc pop de pop hl jr nc, .nextMove ld a, [hl] add $5 ; discourage move ld [hl], a jr .nextMove StatusAilmentMoveEffects ; 57e2 db $01 ; some sleep effect? db SLEEP_EFFECT db POISON_EFFECT db PARALYZE_EFFECT db $FF ; slightly encourage moves with specific effects AIMoveChoiceModification2: ; 397e7 (e:57e7) ld a, [$ccd5] cp $1 ret nz ld hl, $cee8 ; temp move selection array (-1 byte offest) ld de, W_ENEMYMONMOVES ; enemy moves ld b, $5 .nextMove dec b ret z ; processed all 4 moves inc hl ld a, [de] and a ret z ; no more moves in move set inc de call ReadMove ld a, [W_ENEMYMOVEEFFECT] cp ATTACK_UP1_EFFECT jr c, .nextMove cp BIDE_EFFECT jr c, .preferMove cp ATTACK_UP2_EFFECT jr c, .nextMove cp POISON_EFFECT jr c, .preferMove jr .nextMove .preferMove dec [hl] ; slighly encourage this move jr .nextMove ; encourages moves that are effective against the player's mon AIMoveChoiceModification3: ; 39817 (e:5817) ld hl, $cee8 ; temp move selection array (-1 byte offest) ld de, W_ENEMYMONMOVES ; enemy moves ld b, $5 .nextMove dec b ret z ; processed all 4 moves inc hl ld a, [de] and a ret z ; no more moves in move set inc de call ReadMove push hl push bc push de ld hl, AIGetTypeEffectiveness ld b, BANK(AIGetTypeEffectiveness) call Bankswitch pop de pop bc pop hl ld a, [$d11e] cp $10 jr z, .nextMove jr c, .notEffectiveMove dec [hl] ; slighly encourage this move jr .nextMove .notEffectiveMove ; discourages non-effective moves if better moves are available push hl push de push bc ld a, [W_ENEMYMOVETYPE] ld d, a ld hl, W_ENEMYMONMOVES ; enemy moves ld b, $5 ld c, $0 .loopMoves dec b jr z, .done ld a, [hli] and a jr z, .done call ReadMove ld a, [W_ENEMYMOVEEFFECT] cp SUPER_FANG_EFFECT jr z, .betterMoveFound ; Super Fang is considered to be a better move cp SPECIAL_DAMAGE_EFFECT jr z, .betterMoveFound ; any special damage moves are considered to be better moves cp FLY_EFFECT jr z, .betterMoveFound ; Fly is considered to be a better move ld a, [W_ENEMYMOVETYPE] cp d jr z, .loopMoves ld a, [W_ENEMYMOVEPOWER] and a jr nz, .betterMoveFound ; damaging moves of a different type are considered to be better moves jr .loopMoves .betterMoveFound ld c, a .done ld a, c pop bc pop de pop hl and a jr z, .nextMove inc [hl] ; slighly discourage this move jr .nextMove AIMoveChoiceModification4: ; 39883 (e:5883) ret ReadMove: ; 39884 (e:5884) push hl push de push bc dec a ld hl,Moves ld bc,6 call AddNTimes ld de,$CFCC call CopyData pop bc pop de pop hl ret ; move choice modification methods that are applied for each trainer class ; 0 is sentinel value TrainerClassMoveChoiceModifications: ; 3989b (e:589b) db 0 ; YOUNGSTER db 1,0 ; BUG CATCHER db 1,0 ; LASS db 1,3,0 ; SAILOR db 1,0 ; JR__TRAINER_M db 1,0 ; JR__TRAINER_F db 1,2,3,0; POKEMANIAC db 1,2,0 ; SUPER_NERD db 1,0 ; HIKER db 1,0 ; BIKER db 1,3,0 ; BURGLAR db 1,0 ; ENGINEER db 1,2,0 ; JUGGLER_X db 1,3,0 ; FISHER db 1,3,0 ; SWIMMER db 0 ; CUE_BALL db 1,0 ; GAMBLER db 1,3,0 ; BEAUTY db 1,2,0 ; PSYCHIC_TR db 1,3,0 ; ROCKER db 1,0 ; JUGGLER db 1,0 ; TAMER db 1,0 ; BIRD_KEEPER db 1,0 ; BLACKBELT db 1,0 ; SONY1 db 1,3,0 ; PROF_OAK db 1,2,0 ; CHIEF db 1,2,0 ; SCIENTIST db 1,3,0 ; GIOVANNI db 1,0 ; ROCKET db 1,3,0 ; COOLTRAINER_M db 1,3,0 ; COOLTRAINER_F db 1,0 ; BRUNO db 1,0 ; BROCK db 1,3,0 ; MISTY db 1,3,0 ; LT__SURGE db 1,3,0 ; ERIKA db 1,3,0 ; KOGA db 1,3,0 ; BLAINE db 1,3,0 ; SABRINA db 1,2,0 ; GENTLEMAN db 1,3,0 ; SONY2 db 1,3,0 ; SONY3 db 1,2,3,0; LORELEI db 1,0 ; CHANNELER db 1,0 ; AGATHA db 1,3,0 ; LANCE TrainerPicAndMoneyPointers: ; 39914 (e:5914) ; trainer pic pointers and base money. ; money received after battle = base money × level of highest-level enemy mon dw YoungsterPic db 0,$15,0 dw BugCatcherPic db 0,$10,0 dw LassPic db 0,$15,0 dw SailorPic db 0,$30,0 dw JrTrainerMPic db 0,$20,0 dw JrTrainerFPic db 0,$20,0 dw PokemaniacPic db 0,$50,0 dw SuperNerdPic db 0,$25,0 dw HikerPic db 0,$35,0 dw BikerPic db 0,$20,0 dw BurglarPic db 0,$90,0 dw EngineerPic db 0,$50,0 dw JugglerPic db 0,$35,0 dw FisherPic db 0,$35,0 dw SwimmerPic db 0,$05,0 dw CueBallPic db 0,$25,0 dw GamblerPic db 0,$70,0 dw BeautyPic db 0,$70,0 dw PsychicPic db 0,$10,0 dw RockerPic db 0,$25,0 dw JugglerPic db 0,$35,0 dw TamerPic db 0,$40,0 dw BirdKeeperPic db 0,$25,0 dw BlackbeltPic db 0,$25,0 dw Rival1Pic db 0,$35,0 dw ProfOakPic db 0,$99,0 dw ChiefPic db 0,$30,0 dw ScientistPic db 0,$50,0 dw GiovanniPic db 0,$99,0 dw RocketPic db 0,$30,0 dw CooltrainerMPic db 0,$35,0 dw CooltrainerFPic db 0,$35,0 dw BrunoPic db 0,$99,0 dw BrockPic db 0,$99,0 dw MistyPic db 0,$99,0 dw LtSurgePic db 0,$99,0 dw ErikaPic db 0,$99,0 dw KogaPic db 0,$99,0 dw BlainePic db 0,$99,0 dw SabrinaPic db 0,$99,0 dw GentlemanPic db 0,$70,0 dw Rival2Pic db 0,$65,0 dw Rival3Pic db 0,$99,0 dw LoreleiPic db 0,$99,0 dw ChannelerPic db 0,$30,0 dw AgathaPic db 0,$99,0 dw LancePic db 0,$99,0 TrainerNames: ; 399ff (e:59ff) db "YOUNGSTER@" db "BUG CATCHER@" db "LASS@" db "SAILOR@" db "JR.TRAINER♂@" db "JR.TRAINER♀@" db "POKéMANIAC@" db "SUPER NERD@" db "HIKER@" db "BIKER@" db "BURGLAR@" db "ENGINEER@" db "JUGGLER@" db "FISHERMAN@" db "SWIMMER@" db "CUE BALL@" db "GAMBLER@" db "BEAUTY@" db "PSYCHIC@" db "ROCKER@" db "JUGGLER@" db "TAMER@" db "BIRD KEEPER@" db "BLACKBELT@" db "RIVAL1@" db "PROF.OAK@" db "CHIEF@" db "SCIENTIST@" db "GIOVANNI@" db "ROCKET@" db "COOLTRAINER♂@" db "COOLTRAINER♀@" db "BRUNO@" db "BROCK@" db "MISTY@" db "LT.SURGE@" db "ERIKA@" db "KOGA@" db "BLAINE@" db "SABRINA@" db "GENTLEMAN@" db "RIVAL2@" db "RIVAL3@" db "LORELEI@" db "CHANNELER@" db "AGATHA@" db "LANCE@" Func_39b87: ; 39b87 (e:5b87) ld hl, $d0dc ld de, $d0e1 ld b, $0 .asm_39b8f ld a, [hli] and a jr z, .asm_39bc1 push hl ld [$d0b5], a ld a, $2c ld [$d0b7], a ld a, MOVE_NAME ld [W_LISTTYPE], a call GetName ld hl, $cd6d .asm_39ba7 ld a, [hli] cp $50 jr z, .asm_39bb0 ld [de], a inc de jr .asm_39ba7 .asm_39bb0 ld a, b ld [$cd6c], a inc b ld a, $4e ld [de], a inc de pop hl ld a, b cp $4 jr z, .asm_39bd1 jr .asm_39b8f .asm_39bc1 ld a, "-" ld [de], a inc de inc b ld a, b cp $4 jr z, .asm_39bd1 ld a, $4e ld [de], a inc de jr .asm_39bc1 .asm_39bd1 ld a, "@" ld [de], a ret Func_39bd5: ; 39bd5 (e:5bd5) ld a, [$d11b] cp $1 jr nz, .asm_39be6 ld hl, wEnemyPartyCount ; $d89c ld de, W_ENEMYMON1OT ; $d9ac OT names of other player ld a, $6 jr .asm_39c18 .asm_39be6 cp $4 jr nz, .calcAttackStat4 ld hl, W_NUMINPARTY ; $d163 ld de, W_PARTYMON1OT ; $d273 ld a, $5 jr .asm_39c18 .calcAttackStat4 cp $5 jr nz, .asm_39c02 ld hl, $cf7b ld de, MonsterNames ; $421e ld a, $1 jr .asm_39c18 .asm_39c02 cp $2 jr nz, .asm_39c10 ld hl, wNumBagItems ; $d31d ld de, ItemNames ; $472b ld a, $4 jr .asm_39c18 .asm_39c10 ld hl, $cf7b ld de, ItemNames ; $472b ld a, ITEM_NAME .asm_39c18 ld [W_LISTTYPE], a ld a, l ld [$cf8b], a ld a, h ld [$cf8c], a ld a, e ld [$cf8d], a ld a, d ld [$cf8e], a ld bc, ItemPrices ; $4608 ld a, c ld [$cf8f], a ld a, b ld [$cf90], a ret Func_39c37: ; 39c37 (e:5c37) ld hl, W_PARTYMON1 ; $d164 ld a, [$cc49] and a jr z, .asm_39c4b dec a jr z, .asm_39c48 ld hl, $da81 jr .asm_39c4b .asm_39c48 ld hl, $d89d .asm_39c4b ld d, $0 add hl, de ld a, [hl] ld [$cf91], a ret ReadTrainer: ; 39c53 (e:5c53) ; don't change any moves in a link battle ld a,[W_ISLINKBATTLE] and a ret nz ; set [wEnemyPartyCount] to 0, [$D89D] to FF ; XXX first is total enemy pokemon? ; XXX second is species of first pokemon? ld hl,wEnemyPartyCount xor a ld [hli],a dec a ld [hl],a ; get the pointer to trainer data for this class ld a,[W_CUROPPONENT] sub $C9 ; convert value from pokemon to trainer add a,a ld hl,TrainerDataPointers ld c,a ld b,0 add hl,bc ; hl points to trainer class ld a,[hli] ld h,[hl] ld l,a ld a,[W_TRAINERNO] ld b,a ; At this point b contains the trainer number, ; and hl points to the trainer class. ; Our next task is to iterate through the trainers, ; decrementing b each time, until we get to the right one. .outer dec b jr z,.IterateTrainer .inner ld a,[hli] and a jr nz,.inner jr .outer ; if the first byte of trainer data is FF, ; - each pokemon has a specific level ; (as opposed to the whole team being of the same level) ; - if [W_LONEATTACKNO] != 0, one pokemon on the team has a special move ; else the first byte is the level of every pokemon on the team .IterateTrainer ld a,[hli] cp $FF ; is the trainer special? jr z,.SpecialTrainer ; if so, check for special moves ld [W_CURENEMYLVL],a .LoopTrainerData ld a,[hli] and a ; have we reached the end of the trainer data? jr z,.FinishUp ld [$CF91],a ; write species somewhere (XXX why?) ld a,1 ld [$CC49],a push hl call AddPokemonToParty pop hl jr .LoopTrainerData .SpecialTrainer ; if this code is being run: ; - each pokemon has a specific level ; (as opposed to the whole team being of the same level) ; - if [W_LONEATTACKNO] != 0, one pokemon on the team has a special move ld a,[hli] and a ; have we reached the end of the trainer data? jr z,.AddLoneMove ld [W_CURENEMYLVL],a ld a,[hli] ld [$CF91],a ld a,1 ld [$CC49],a push hl call AddPokemonToParty pop hl jr .SpecialTrainer .AddLoneMove ; does the trainer have a single monster with a different move ld a,[W_LONEATTACKNO] ; Brock is 01, Misty is 02, Erika is 04, etc and a jr z,.AddTeamMove dec a add a,a ld c,a ld b,0 ld hl,LoneMoves add hl,bc ld a,[hli] ld d,[hl] ld hl,W_ENEMYMON1MOVE3 ld bc,W_ENEMYMON2MOVE3 - W_ENEMYMON1MOVE3 call AddNTimes ld [hl],d jr .FinishUp .AddTeamMove ; check if our trainer's team has special moves ; get trainer class number ld a,[$D059] sub $C8 ld b,a ld hl,TeamMoves ; iterate through entries in TeamMoves, checking each for our trainer class .IterateTeamMoves ld a,[hli] cp b jr z,.GiveTeamMoves ; is there a match? inc hl ; if not, go to the next entry inc a jr nz,.IterateTeamMoves ; no matches found. is this trainer champion rival? ld a,b cp SONY3 jr z,.ChampionRival jr .FinishUp ; nope .GiveTeamMoves ld a,[hl] ld [$D95E],a jr .FinishUp .ChampionRival ; give moves to his team ; pidgeot ld a,SKY_ATTACK ld [W_ENEMYMON1MOVE3],a ; starter ld a,[W_RIVALSTARTER] cp BULBASAUR ld b,MEGA_DRAIN jr z,.GiveStarterMove cp CHARMANDER ld b,FIRE_BLAST jr z,.GiveStarterMove ld b,BLIZZARD ; must be squirtle .GiveStarterMove ld a,b ld [W_ENEMYMON6MOVE3],a .FinishUp ; XXX this needs documenting xor a ; clear D079-D07B ld de,$D079 ld [de],a inc de ld [de],a inc de ld [de],a ld a,[W_CURENEMYLVL] ld b,a .LastLoop ld hl,$D047 ld c,2 push bc ld a,$B call Predef pop bc inc de inc de dec b jr nz,.LastLoop ret LoneMoves: ; 39d22 (e:5d22) ; these are used for gym leaders. ; this is not automatic! you have to write the number you want to W_LONEATTACKNO ; first. e.g., erika's script writes 4 to W_LONEATTACKNO to get mega drain, ; the fourth entry in the list. ; first byte: pokemon in the trainer's party that gets the move ; second byte: move ; unterminated db 1,BIDE db 1,BUBBLEBEAM db 2,THUNDERBOLT db 2,MEGA_DRAIN db 3,TOXIC db 3,PSYWAVE db 3,FIRE_BLAST db 4,FISSURE TeamMoves: ; 39d32 (e:5d32) ; these are used for elite four. ; this is automatic, based on trainer class. ; don't be confused by LoneMoves above, the two data structures are ; _completely_ unrelated. ; first byte: trainer (all trainers in this class have this move) ; second byte: move ; ff-terminated db LORELEI,BLIZZARD db BRUNO,FISSURE db AGATHA,TOXIC db LANCE,BARRIER db $FF if _YELLOW ; different format from above. ; entry ≔ trainerclass, trainerid, moveset+, 0 ; moveset ≔ partymon, partymon'smove, moveid db BUG_CATCHER,$f db 2,2,TACKLE db 2,3,STRING_SHOT db 0 db YOUNGSTER,$e db 1,4,FISSURE db 0 db BROCK,$1 db 2,3,BIND db 2,4,BIDE db 0 db MISTY,$1 db 2,4,BUBBLEBEAM db 0 db LT__SURGE,$1 db 1,1,THUNDERBOLT db 1,2,MEGA_PUNCH db 1,3,MEGA_KICK db 1,4,GROWL db 0 db ERIKA,$1 db 1,3,MEGA_DRAIN db 2,1,RAZOR_LEAF db 3,1,PETAL_DANCE db 0 db KOGA,$1 db 1,1,TOXIC db 1,2,TACKLE db 2,1,TOXIC db 2,3,SUPERSONIC db 3,1,TOXIC db 3,2,DOUBLE_EDGE db 4,1,LEECH_LIFE db 4,2,DOUBLE_TEAM db 4,3,PSYCHIC_M db 4,4,TOXIC db 0 db BLAINE,$1 db 1,1,FLAMETHROWER db 1,4,CONFUSE_RAY db 3,1,FLAMETHROWER db 3,2,FIRE_BLAST db 3,3,REFLECT db 0 db SABRINA,$1 db 1,1,FLASH db 2,1,KINESIS db 2,4,PSYWAVE db 3,1,PSYWAVE db 0 db GIOVANNI,$3 db 1,3,FISSURE db 2,2,DOUBLE_TEAM db 3,1,EARTHQUAKE db 3,3,THUNDER db 4,1,EARTHQUAKE db 4,2,LEER db 4,3,THUNDER db 5,1,ROCK_SLIDE db 5,4,EARTHQUAKE db 0 db LORELEI,$1 db 1,1,BUBBLEBEAM db 2,3,ICE_BEAM db 3,1,PSYCHIC_M db 3,2,SURF db 4,3,LOVELY_KISS db 5,3,BLIZZARD db 0 db BRUNO,$1 db 1,1,ROCK_SLIDE db 1,2,SCREECH db 1,4,DIG db 2,3,FIRE_PUNCH db 2,4,DOUBLE_TEAM db 3,1,DOUBLE_KICK db 3,2,MEGA_KICK db 3,4,DOUBLE_TEAM db 4,1,ROCK_SLIDE db 4,2,SCREECH db 4,4,EARTHQUAKE db 5,2,KARATE_CHOP db 5,3,STRENGTH db 0 db AGATHA,$1 db 1,2,SUBSTITUTE db 1,3,LICK db 1,4,MEGA_DRAIN db 2,2,TOXIC db 2,4,LEECH_LIFE db 3,2,LICK db 4,1,WRAP db 5,2,PSYCHIC_M db 0 db LANCE,$1 db 1,1,DRAGON_RAGE db 2,1,THUNDER_WAVE db 2,3,THUNDERBOLT db 3,1,BUBBLEBEAM db 3,2,WRAP db 3,3,ICE_BEAM db 4,1,WING_ATTACK db 4,2,SWIFT db 4,3,FLY db 5,1,BLIZZARD db 5,2,FIRE_BLAST db 5,3,THUNDER db 0 db SONY3,$1 db 1,3,EARTHQUAKE db 2,4,KINESIS db 3,4,LEECH_SEED db 4,1,ICE_BEAM db 5,1,CONFUSE_RAY db 5,4,FIRE_SPIN db 6,3,QUICK_ATTACK db 0 db SONY3,$2 db 1,3,EARTHQUAKE db 2,4,KINESIS db 3,4,LEECH_SEED db 4,1,THUNDERBOLT db 5,1,ICE_BEAM db 6,2,REFLECT db 6,3,QUICK_ATTACK db 0 db SONY3,$3 db 1,3,EARTHQUAKE db 2,4,KINESIS db 3,4,LEECH_SEED db 4,1,CONFUSE_RAY db 4,4,FIRE_SPIN db 5,1,THUNDERBOLT db 6,1,AURORA_BEAM db 6,3,QUICK_ATTACK db 0 db $ff endc TrainerDataPointers: ; 39d3b (e:5d3b) dw YoungsterData,BugCatcherData,LassData,SailorData,JrTrainerMData dw JrTrainerFData,PokemaniacData,SuperNerdData,HikerData,BikerData dw BurglarData,EngineerData,Juggler1Data,FisherData,SwimmerData dw CueBallData,GamblerData,BeautyData,PsychicData,RockerData dw JugglerData,TamerData,BirdKeeperData,BlackbeltData,Green1Data dw ProfOakData,ChiefData,ScientistData,GiovanniData,RocketData dw CooltrainerMData,CooltrainerFData,BrunoData,BrockData,MistyData dw LtSurgeData,ErikaData,KogaData,BlaineData,SabrinaData dw GentlemanData,Green2Data,Green3Data,LoreleiData,ChannelerData dw AgathaData,LanceData ; if first byte != FF, then ; first byte is level (of all pokemon on this team) ; all the next bytes are pokemon species ; null-terminated ; if first byte == FF, then ; first byte is FF (obviously) ; every next two bytes are a level and species ; null-terminated YoungsterData: ; 39d99 (e:5d99) db 11,RATTATA,EKANS,0 db 14,SPEAROW,0 db 10,RATTATA,RATTATA,ZUBAT,0 db 14,RATTATA,EKANS,ZUBAT,0 db 15,RATTATA,SPEAROW,0 db 17,SLOWPOKE,0 db 14,EKANS,SANDSHREW,0 db 21,NIDORAN_M,0 db 21,EKANS,0 db 19,SANDSHREW,ZUBAT,0 db 17,RATTATA,RATTATA,RATICATE,0 db 18,NIDORAN_M,NIDORINO,0 db 17,SPEAROW,RATTATA,RATTATA,SPEAROW,0 if _YELLOW db 24,SANDSHREW,0 endc BugCatcherData: ; 39dce (e:5dce) if _YELLOW db 7,CATERPIE,CATERPIE,0 db 6,METAPOD,CATERPIE,METAPOD,0 db 10,CATERPIE,0 else db 6,WEEDLE,CATERPIE,0 db 7,WEEDLE,KAKUNA,WEEDLE,0 db 9,WEEDLE,0 endc db 10,CATERPIE,WEEDLE,CATERPIE,0 db 9,WEEDLE,KAKUNA,CATERPIE,METAPOD,0 db 11,CATERPIE,METAPOD,0 db 11,WEEDLE,KAKUNA,0 db 10,CATERPIE,METAPOD,CATERPIE,0 db 14,CATERPIE,WEEDLE,0 db 16,WEEDLE,CATERPIE,WEEDLE,0 db 20,BUTTERFREE,0 db 18,METAPOD,CATERPIE,VENONAT,0 db 19,BEEDRILL,BEEDRILL,0 db 20,CATERPIE,WEEDLE,VENONAT,0 if _YELLOW db 8,CATERPIE,METAPOD,0 endc LassData: ; 39e0c (e:5e0c) db 9,PIDGEY,PIDGEY,0 db 10,RATTATA,NIDORAN_M,0 db 14,JIGGLYPUFF,0 db 31,PARAS,PARAS,PARASECT,0 db 11,ODDISH,BELLSPROUT,0 db 14,CLEFAIRY,0 db 16,PIDGEY,NIDORAN_F,0 db 14,PIDGEY,NIDORAN_F,0 db 15,NIDORAN_M,NIDORAN_F,0 db 13,ODDISH,PIDGEY,ODDISH,0 db 18,PIDGEY,NIDORAN_F,0 if _YELLOW db 20,JIGGLYPUFF,0 else db 18,RATTATA,PIKACHU,0 endc db 23,NIDORAN_F,NIDORINA,0 db 24,MEOWTH,MEOWTH,MEOWTH,0 if _YELLOW db 19,PIDGEY,RATTATA,NIDORAN_F,MEOWTH,NIDORAN_M,0 else db 19,PIDGEY,RATTATA,NIDORAN_M,MEOWTH,PIKACHU,0 endc db 22,CLEFAIRY,CLEFAIRY,0 db 23,BELLSPROUT,WEEPINBELL,0 db 23,ODDISH,GLOOM,0 if _YELLOW db 6,NIDORAN_F,NIDORAN_M,0 endc SailorData: ; 39e58 (e:5e58) db 18,MACHOP,SHELLDER,0 db 17,MACHOP,TENTACOOL,0 db 21,SHELLDER,0 db 17,HORSEA,SHELLDER,TENTACOOL,0 db 18,TENTACOOL,STARYU,0 db 17,HORSEA,HORSEA,HORSEA,0 db 20,MACHOP,0 if _YELLOW db 24,MAGNEMITE,0 else db 21,PIKACHU,PIKACHU,0 endc JrTrainerMData: ; 39e78 (e:5e78) if _YELLOW db 9,DIGLETT,SANDSHREW,0 else db 11,DIGLETT,SANDSHREW,0 endc db 14,RATTATA,EKANS,0 db 18,MANKEY,0 db 20,SQUIRTLE,0 db 16,SPEAROW,RATICATE,0 db 18,DIGLETT,DIGLETT,SANDSHREW,0 db 21,GROWLITHE,CHARMANDER,0 db 19,RATTATA,DIGLETT,EKANS,SANDSHREW,0 db 29,NIDORAN_M,NIDORINO,0 if _YELLOW db 16,WEEPINBELL,0 endc JrTrainerFData: ; 39e9d (e:5e9d) db 19,GOLDEEN,0 if _YELLOW db 16,ODDISH,BELLSPROUT,0 else db 16,RATTATA,PIKACHU,0 endc db 16,PIDGEY,PIDGEY,PIDGEY,0 db 22,BULBASAUR,0 db 18,ODDISH,BELLSPROUT,ODDISH,BELLSPROUT,0 db 23,MEOWTH,0 if _YELLOW db 20,JIGGLYPUFF,CLEFAIRY,0 else db 20,PIKACHU,CLEFAIRY,0 endc db 21,PIDGEY,PIDGEOTTO,0 db 21,JIGGLYPUFF,PIDGEY,MEOWTH,0 db 22,ODDISH,BULBASAUR,0 db 24,BULBASAUR,IVYSAUR,0 if _YELLOW db 24,PIDGEY,MEOWTH,RATTATA,PIDGEY,MEOWTH,0 else db 24,PIDGEY,MEOWTH,RATTATA,PIKACHU,MEOWTH,0 endc db 30,POLIWAG,POLIWAG,0 db 27,PIDGEY,MEOWTH,PIDGEY,PIDGEOTTO,0 db 28,GOLDEEN,POLIWAG,HORSEA,0 db 31,GOLDEEN,SEAKING,0 db 22,BELLSPROUT,CLEFAIRY,0 db 20,MEOWTH,ODDISH,PIDGEY,0 db 19,PIDGEY,RATTATA,RATTATA,BELLSPROUT,0 db 28,GLOOM,ODDISH,ODDISH,0 if _YELLOW db 29,PIDGEY,PIDGEOTTO,0 else db 29,PIKACHU,RAICHU,0 endc db 33,CLEFAIRY,0 db 29,BELLSPROUT,ODDISH,TANGELA,0 db 30,TENTACOOL,HORSEA,SEEL,0 if _YELLOW db 20,CUBONE,0 endc PokemaniacData: ; 39f09 (e:5f09) db 30,RHYHORN,LICKITUNG,0 db 20,CUBONE,SLOWPOKE,0 db 20,SLOWPOKE,SLOWPOKE,SLOWPOKE,0 db 22,CHARMANDER,CUBONE,0 db 25,SLOWPOKE,0 db 40,CHARMELEON,LAPRAS,LICKITUNG,0 db 23,CUBONE,SLOWPOKE,0 SuperNerdData: ; 39f26 (e:5f26) db 11,MAGNEMITE,VOLTORB,0 db 12,GRIMER,VOLTORB,KOFFING,0 db 20,VOLTORB,KOFFING,VOLTORB,MAGNEMITE,0 db 22,GRIMER,MUK,GRIMER,0 db 26,KOFFING,0 db 22,KOFFING,MAGNEMITE,WEEZING,0 db 20,MAGNEMITE,MAGNEMITE,KOFFING,MAGNEMITE,0 db 24,MAGNEMITE,VOLTORB,0 db 36,VULPIX,VULPIX,NINETALES,0 db 34,PONYTA,CHARMANDER,VULPIX,GROWLITHE,0 db 41,RAPIDASH,0 db 37,GROWLITHE,VULPIX,0 HikerData: ; 39f5e (e:5f5e) db 10,GEODUDE,GEODUDE,ONIX,0 db 15,MACHOP,GEODUDE,0 db 13,GEODUDE,GEODUDE,MACHOP,GEODUDE,0 db 17,ONIX,0 db 21,GEODUDE,ONIX,0 db 20,GEODUDE,MACHOP,GEODUDE,0 db 21,GEODUDE,ONIX,0 db 19,ONIX,GRAVELER,0 db 21,GEODUDE,GEODUDE,GRAVELER,0 db 25,GEODUDE,0 db 20,MACHOP,ONIX,0 db 19,GEODUDE,MACHOP,GEODUDE,GEODUDE,0 db 20,ONIX,ONIX,GEODUDE,0 db 21,GEODUDE,GRAVELER,0 BikerData: ; 39f9c (e:5f9c) db 28,KOFFING,KOFFING,KOFFING,0 db 29,KOFFING,GRIMER,0 db 25,KOFFING,KOFFING,WEEZING,KOFFING,GRIMER,0 db 28,KOFFING,GRIMER,WEEZING,0 db 29,GRIMER,KOFFING,0 db 33,WEEZING,0 db 26,GRIMER,GRIMER,GRIMER,GRIMER,0 db 28,WEEZING,KOFFING,WEEZING,0 db 33,MUK,0 db 29,VOLTORB,VOLTORB,0 db 29,WEEZING,MUK,0 db 25,KOFFING,WEEZING,KOFFING,KOFFING,WEEZING,0 db 26,KOFFING,KOFFING,GRIMER,KOFFING,0 db 28,GRIMER,GRIMER,KOFFING,0 db 29,KOFFING,MUK,0 BurglarData: ; 39fe4 (e:5fe4) db 29,GROWLITHE,VULPIX,0 db 33,GROWLITHE,0 db 28,VULPIX,CHARMANDER,PONYTA,0 db 36,GROWLITHE,VULPIX,NINETALES,0 db 41,PONYTA,0 db 37,VULPIX,GROWLITHE,0 db 34,CHARMANDER,CHARMELEON,0 db 38,NINETALES,0 db 34,GROWLITHE,PONYTA,0 EngineerData: ; 3a007 (e:6007) db 21,VOLTORB,MAGNEMITE,0 db 21,MAGNEMITE,0 db 18,MAGNEMITE,MAGNEMITE,MAGNETON,0 Juggler1Data: ; 3a013 (e:6013) ; none FisherData: ; 3a013 (e:6013) db 17,GOLDEEN,TENTACOOL,GOLDEEN,0 db 17,TENTACOOL,STARYU,SHELLDER,0 db 22,GOLDEEN,POLIWAG,GOLDEEN,0 db 24,TENTACOOL,GOLDEEN,0 db 27,GOLDEEN,0 db 21,POLIWAG,SHELLDER,GOLDEEN,HORSEA,0 db 28,SEAKING,GOLDEEN,SEAKING,SEAKING,0 db 31,SHELLDER,CLOYSTER,0 db 27,MAGIKARP,MAGIKARP,MAGIKARP,MAGIKARP,MAGIKARP,MAGIKARP,0 db 33,SEAKING,GOLDEEN,0 db 24,MAGIKARP,MAGIKARP,0 SwimmerData: ; 3a049 (e:6049) db 16,HORSEA,SHELLDER,0 db 30,TENTACOOL,SHELLDER,0 db 29,GOLDEEN,HORSEA,STARYU,0 db 30,POLIWAG,POLIWHIRL,0 db 27,HORSEA,TENTACOOL,TENTACOOL,GOLDEEN,0 db 29,GOLDEEN,SHELLDER,SEAKING,0 db 30,HORSEA,HORSEA,0 db 27,TENTACOOL,TENTACOOL,STARYU,HORSEA,TENTACRUEL,0 db 31,SHELLDER,CLOYSTER,0 db 35,STARYU,0 db 28,HORSEA,HORSEA,SEADRA,HORSEA,0 db 33,SEADRA,TENTACRUEL,0 db 37,STARMIE,0 db 33,STARYU,WARTORTLE,0 db 32,POLIWHIRL,TENTACOOL,SEADRA,0 CueBallData: ; 3a08d (e:608d) db 28,MACHOP,MANKEY,MACHOP,0 db 29,MANKEY,MACHOP,0 db 33,MACHOP,0 db 29,MANKEY,PRIMEAPE,0 db 29,MACHOP,MACHOKE,0 db 33,MACHOKE,0 db 26,MANKEY,MANKEY,MACHOKE,MACHOP,0 db 29,PRIMEAPE,MACHOKE,0 db 31,TENTACOOL,TENTACOOL,TENTACRUEL,0 GamblerData: ; 3a0b3 (e:60b3) db 18,POLIWAG,HORSEA,0 db 18,BELLSPROUT,ODDISH,0 db 18,VOLTORB,MAGNEMITE,0 db 18,GROWLITHE,VULPIX,0 db 22,POLIWAG,POLIWAG,POLIWHIRL,0 db 22,ONIX,GEODUDE,GRAVELER,0 db 24,GROWLITHE,VULPIX,0 BeautyData: ; 3a0d1 (e:60d1) db 21,ODDISH,BELLSPROUT,ODDISH,BELLSPROUT,0 db 24,BELLSPROUT,BELLSPROUT,0 db 26,EXEGGCUTE,0 if _YELLOW db 27,RATTATA,VULPIX,RATTATA,0 else db 27,RATTATA,PIKACHU,RATTATA,0 endc db 29,CLEFAIRY,MEOWTH,0 db 35,SEAKING,0 db 30,SHELLDER,SHELLDER,CLOYSTER,0 db 31,POLIWAG,SEAKING,0 db 29,PIDGEOTTO,WIGGLYTUFF,0 db 29,BULBASAUR,IVYSAUR,0 db 33,WEEPINBELL,BELLSPROUT,WEEPINBELL,0 db 27,POLIWAG,GOLDEEN,SEAKING,GOLDEEN,POLIWAG,0 db 30,GOLDEEN,SEAKING,0 db 29,STARYU,STARYU,STARYU,0 db 30,SEADRA,HORSEA,SEADRA,0 PsychicData: ; 3a115 (e:6115) db 31,KADABRA,SLOWPOKE,MR_MIME,KADABRA,0 db 34,MR_MIME,KADABRA,0 db 33,SLOWPOKE,SLOWPOKE,SLOWBRO,0 db 38,SLOWBRO,0 RockerData: ; 3a127 (e:6127) if _YELLOW db 20,VOLTORB,VOLTORB,VOLTORB,0 else db 20,VOLTORB,MAGNEMITE,VOLTORB,0 endc db 29,VOLTORB,ELECTRODE,0 JugglerData: ; 3a130 (e:6130) db 29,KADABRA,MR_MIME,0 db 41,DROWZEE,HYPNO,KADABRA,KADABRA,0 db 31,DROWZEE,DROWZEE,KADABRA,DROWZEE,0 db 34,DROWZEE,HYPNO,0 db 48,MR_MIME,0 db 33,HYPNO,0 db 38,HYPNO,0 db 34,DROWZEE,KADABRA,0 TamerData: ; 3a151 (e:6151) db 34,SANDSLASH,ARBOK,0 db 33,ARBOK,SANDSLASH,ARBOK,0 db 43,RHYHORN,0 db 39,ARBOK,TAUROS,0 db 44,PERSIAN,GOLDUCK,0 db 42,RHYHORN,PRIMEAPE,ARBOK,TAUROS,0 BirdKeeperData: ; 3a16b (e:616b) db 29,PIDGEY,PIDGEOTTO,0 db 25,SPEAROW,PIDGEY,PIDGEY,SPEAROW,SPEAROW,0 db 26,PIDGEY,PIDGEOTTO,SPEAROW,FEAROW,0 db 33,FARFETCH_D,0 db 29,SPEAROW,FEAROW,0 db 26,PIDGEOTTO,FARFETCH_D,DODUO,PIDGEY,0 db 28,DODRIO,DODUO,DODUO,0 db 29,SPEAROW,FEAROW,0 db 34,DODRIO,0 db 26,SPEAROW,SPEAROW,FEAROW,SPEAROW,0 db 30,FEAROW,FEAROW,PIDGEOTTO,0 db 39,PIDGEOTTO,PIDGEOTTO,PIDGEY,PIDGEOTTO,0 db 42,FARFETCH_D,FEAROW,0 db 28,PIDGEY,DODUO,PIDGEOTTO,0 db 26,PIDGEY,SPEAROW,PIDGEY,FEAROW,0 db 29,PIDGEOTTO,FEAROW,0 db 28,SPEAROW,DODUO,FEAROW,0 BlackbeltData: ; 3a1be (e:61be) db 37,HITMONLEE,HITMONCHAN,0 db 31,MANKEY,MANKEY,PRIMEAPE,0 db 32,MACHOP,MACHOKE,0 db 36,PRIMEAPE,0 db 31,MACHOP,MANKEY,PRIMEAPE,0 db 40,MACHOP,MACHOKE,0 db 43,MACHOKE,0 db 38,MACHOKE,MACHOP,MACHOKE,0 db 43,MACHOKE,MACHOP,MACHOKE,0 Green1Data: ; 3a1e4 (e:61e4) if _YELLOW db 5,EEVEE,0 db $FF,9,SPEAROW,8,EEVEE,0 db $FF,18,SPEAROW,15,SANDSHREW,15,RATTATA,17,EEVEE,0 else db 5,SQUIRTLE,0 db 5,BULBASAUR,0 db 5,CHARMANDER,0 db $FF,9,PIDGEY,8,SQUIRTLE,0 db $FF,9,PIDGEY,8,BULBASAUR,0 db $FF,9,PIDGEY,8,CHARMANDER,0 db $FF,18,PIDGEOTTO,15,ABRA,15,RATTATA,17,SQUIRTLE,0 db $FF,18,PIDGEOTTO,15,ABRA,15,RATTATA,17,BULBASAUR,0 db $FF,18,PIDGEOTTO,15,ABRA,15,RATTATA,17,CHARMANDER,0 endc ProfOakData: ; 3a21d (e:621d) db $FF,66,TAUROS,67,EXEGGUTOR,68,ARCANINE,69,BLASTOISE,70,GYARADOS,0 db $FF,66,TAUROS,67,EXEGGUTOR,68,ARCANINE,69,VENUSAUR,70,GYARADOS,0 db $FF,66,TAUROS,67,EXEGGUTOR,68,ARCANINE,69,CHARIZARD,70,GYARADOS,0 ChiefData: ; 3a241 (e:6241) ; none ScientistData: ; 3a241 (e:6241) db 34,KOFFING,VOLTORB,0 db 26,GRIMER,WEEZING,KOFFING,WEEZING,0 db 28,MAGNEMITE,VOLTORB,MAGNETON,0 db 29,ELECTRODE,WEEZING,0 db 33,ELECTRODE,0 db 26,MAGNETON,KOFFING,WEEZING,MAGNEMITE,0 db 25,VOLTORB,KOFFING,MAGNETON,MAGNEMITE,KOFFING,0 db 29,ELECTRODE,MUK,0 db 29,GRIMER,ELECTRODE,0 db 28,VOLTORB,KOFFING,MAGNETON,0 db 29,MAGNEMITE,KOFFING,0 db 33,MAGNEMITE,MAGNETON,VOLTORB,0 db 34,MAGNEMITE,ELECTRODE,0 GiovanniData: ; 3a27e (e:627e) if _YELLOW db $FF,25,ONIX,24,RHYHORN,29,PERSIAN,0 db $FF,37,NIDORINO,35,PERSIAN,37,RHYHORN,41,NIDOQUEEN,0 db $FF,50,DUGTRIO,53,PERSIAN,53,NIDOQUEEN,55,NIDOKING,55,RHYDON,0 else db $FF,25,ONIX,24,RHYHORN,29,KANGASKHAN,0 db $FF,37,NIDORINO,35,KANGASKHAN,37,RHYHORN,41,NIDOQUEEN,0 db $FF,45,RHYHORN,42,DUGTRIO,44,NIDOQUEEN,45,NIDOKING,50,RHYDON,0 endc RocketData: ; 3a29c (e:629c) db 13,RATTATA,ZUBAT,0 db 11,SANDSHREW,RATTATA,ZUBAT,0 db 12,ZUBAT,EKANS,0 db 16,RATICATE,0 db 17,MACHOP,DROWZEE,0 db 15,EKANS,ZUBAT,0 db 20,RATICATE,ZUBAT,0 db 21,DROWZEE,MACHOP,0 db 21,RATICATE,RATICATE,0 db 20,GRIMER,KOFFING,KOFFING,0 db 19,RATTATA,RATICATE,RATICATE,RATTATA,0 db 22,GRIMER,KOFFING,0 db 17,ZUBAT,KOFFING,GRIMER,ZUBAT,RATICATE,0 db 20,RATTATA,RATICATE,DROWZEE,0 db 21,MACHOP,MACHOP,0 db 23,SANDSHREW,EKANS,SANDSLASH,0 db 23,EKANS,SANDSHREW,ARBOK,0 db 21,KOFFING,ZUBAT,0 db 25,ZUBAT,ZUBAT,GOLBAT,0 db 26,KOFFING,DROWZEE,0 db 23,ZUBAT,RATTATA,RATICATE,ZUBAT,0 db 26,DROWZEE,KOFFING,0 db 29,CUBONE,ZUBAT,0 db 25,GOLBAT,ZUBAT,ZUBAT,RATICATE,ZUBAT,0 db 28,RATICATE,HYPNO,RATICATE,0 db 29,MACHOP,DROWZEE,0 db 28,EKANS,ZUBAT,CUBONE,0 db 33,ARBOK,0 db 33,HYPNO,0 db 29,MACHOP,MACHOKE,0 db 28,ZUBAT,ZUBAT,GOLBAT,0 db 26,RATICATE,ARBOK,KOFFING,GOLBAT,0 db 29,CUBONE,CUBONE,0 db 29,SANDSHREW,SANDSLASH,0 db 26,RATICATE,ZUBAT,GOLBAT,RATTATA,0 db 28,WEEZING,GOLBAT,KOFFING,0 db 28,DROWZEE,GRIMER,MACHOP,0 db 28,GOLBAT,DROWZEE,HYPNO,0 db 33,MACHOKE,0 db 25,RATTATA,RATTATA,ZUBAT,RATTATA,EKANS,0 db 32,CUBONE,DROWZEE,MAROWAK,0 if _YELLOW JessieJamesData: db 14,EKANS,MEOWTH,KOFFING,0 db 25,KOFFING,MEOWTH,EKANS,0 db 27,MEOWTH,ARBOK,WEEZING,0 db 31,WEEZING,ARBOK,MEOWTH,0 db 16,KOFFING,0 db 27,KOFFING,0 db 29,WEEZING,0 db 33,WEEZING,0 endc CooltrainerMData: ; 3a35a (e:635a) db 39,NIDORINO,NIDOKING,0 db 43,EXEGGUTOR,CLOYSTER,ARCANINE,0 db 43,KINGLER,TENTACRUEL,BLASTOISE,0 db 45,KINGLER,STARMIE,0 db 42,IVYSAUR,WARTORTLE,CHARMELEON,CHARIZARD,0 db 44,IVYSAUR,WARTORTLE,CHARMELEON,0 db 49,NIDOKING,0 db 44,KINGLER,CLOYSTER,0 db 39,SANDSLASH,DUGTRIO,0 db 43,RHYHORN,0 CooltrainerFData: ; 3a385 (e:6385) db 24,WEEPINBELL,GLOOM,IVYSAUR,0 db 43,BELLSPROUT,WEEPINBELL,VICTREEBEL,0 db 43,PARASECT,DEWGONG,CHANSEY,0 db 46,VILEPLUME,BUTTERFREE,0 db 44,PERSIAN,NINETALES,0 db 45,IVYSAUR,VENUSAUR,0 db 45,NIDORINA,NIDOQUEEN,0 db 43,PERSIAN,NINETALES,RAICHU,0 BrunoData: ; 3a3a9 (e:63a9) db $FF,53,ONIX,55,HITMONCHAN,55,HITMONLEE,56,ONIX,58,MACHAMP,0 BrockData: ; 3a3b5 (e:63b5) if _YELLOW db $FF,10,GEODUDE,12,ONIX,0 else db $FF,12,GEODUDE,14,ONIX,0 endc MistyData: ; 3a3bb (e:63bb) db $FF,18,STARYU,21,STARMIE,0 LtSurgeData: ; 3a3c1 (e:63c1) if _YELLOW db $FF,28,RAICHU,0 else db $FF,21,VOLTORB,18,PIKACHU,24,RAICHU,0 endc ErikaData: ; 3a3c9 (e:63c9) if _YELLOW db $FF,30,TANGELA,32,WEEPINBELL,32,GLOOM,0 else db $FF,29,VICTREEBEL,24,TANGELA,29,VILEPLUME,0 endc KogaData: ; 3a3d1 (e:63d1) if _YELLOW db $FF,44,VENONAT,46,VENONAT,48,VENONAT,50,VENOMOTH,0 else db $FF,37,KOFFING,39,MUK,37,KOFFING,43,WEEZING,0 endc BlaineData: ; 3a3db (e:63db) if _YELLOW db $FF,48,NINETALES,50,RAPIDASH,54,ARCANINE,0 else db $FF,42,GROWLITHE,40,PONYTA,42,RAPIDASH,47,ARCANINE,0 endc SabrinaData: ; 3a3e5 (e:63e5) if _YELLOW db $FF,50,ABRA,50,KADABRA,50,ALAKAZAM,0 else db $FF,38,KADABRA,37,MR_MIME,38,VENOMOTH,43,ALAKAZAM,0 endc GentlemanData: ; 3a3ef (e:63ef) db 18,GROWLITHE,GROWLITHE,0 db 19,NIDORAN_M,NIDORAN_F,0 if _YELLOW db 22,VOLTORB,MAGNEMITE,0 else db 23,PIKACHU,0 endc db 48,PRIMEAPE,0 db 17,GROWLITHE,PONYTA,0 Green2Data: ; 3a401 (e:6401) if _YELLOW db $FF,19,SPEAROW,16,RATTATA,18,SANDSHREW,20,EEVEE,0 db $FF,25,FEAROW,23,SHELLDER,22,VULPIX,20,SANDSHREW,25,EEVEE,0 db $FF,25,FEAROW,23,MAGNEMITE,22,SHELLDER,20,SANDSHREW,25,EEVEE,0 db $FF,25,FEAROW,23,VULPIX,22,MAGNEMITE,20,SANDSHREW,25,EEVEE,0 db $FF,38,SANDSLASH,35,NINETALES,37,CLOYSTER,35,KADABRA,40,JOLTEON,0 db $FF,38,SANDSLASH,35,CLOYSTER,37,MAGNETON,35,KADABRA,40,FLAREON,0 db $FF,38,SANDSLASH,35,MAGNETON,37,NINETALES,35,KADABRA,40,VAPOREON,0 db $FF,47,SANDSLASH,45,EXEGGCUTE,45,NINETALES,47,CLOYSTER,50,KADABRA,53,JOLTEON,0 db $FF,47,SANDSLASH,45,EXEGGCUTE,45,CLOYSTER,47,MAGNETON,50,KADABRA,53,FLAREON,0 db $FF,47,SANDSLASH,45,EXEGGCUTE,45,MAGNETON,47,NINETALES,50,KADABRA,53,VAPOREON,0 else db $FF,19,PIDGEOTTO,16,RATICATE,18,KADABRA,20,WARTORTLE,0 db $FF,19,PIDGEOTTO,16,RATICATE,18,KADABRA,20,IVYSAUR,0 db $FF,19,PIDGEOTTO,16,RATICATE,18,KADABRA,20,CHARMELEON,0 db $FF,25,PIDGEOTTO,23,GROWLITHE,22,EXEGGCUTE,20,KADABRA,25,WARTORTLE,0 db $FF,25,PIDGEOTTO,23,GYARADOS,22,GROWLITHE,20,KADABRA,25,IVYSAUR,0 db $FF,25,PIDGEOTTO,23,EXEGGCUTE,22,GYARADOS,20,KADABRA,25,CHARMELEON,0 db $FF,37,PIDGEOT,38,GROWLITHE,35,EXEGGCUTE,35,ALAKAZAM,40,BLASTOISE,0 db $FF,37,PIDGEOT,38,GYARADOS,35,GROWLITHE,35,ALAKAZAM,40,VENUSAUR,0 db $FF,37,PIDGEOT,38,EXEGGCUTE,35,GYARADOS,35,ALAKAZAM,40,CHARIZARD,0 db $FF,47,PIDGEOT,45,RHYHORN,45,GROWLITHE,47,EXEGGCUTE,50,ALAKAZAM,53,BLASTOISE,0 db $FF,47,PIDGEOT,45,RHYHORN,45,GYARADOS,47,GROWLITHE,50,ALAKAZAM,53,VENUSAUR,0 db $FF,47,PIDGEOT,45,RHYHORN,45,EXEGGCUTE,47,GYARADOS,50,ALAKAZAM,53,CHARIZARD,0 endc Green3Data: ; 3a491 (e:6491) if _YELLOW db $FF,61,SANDSLASH,59,ALAKAZAM,61,EXEGGUTOR,61,CLOYSTER,63,NINETALES,65,JOLTEON,0 db $FF,61,SANDSLASH,59,ALAKAZAM,61,EXEGGUTOR,61,MAGNETON,63,CLOYSTER,65,FLAREON,0 db $FF,61,SANDSLASH,59,ALAKAZAM,61,EXEGGUTOR,61,NINETALES,63,MAGNETON,65,VAPOREON,0 else db $FF,61,PIDGEOT,59,ALAKAZAM,61,RHYDON,61,ARCANINE,63,EXEGGUTOR,65,BLASTOISE,0 db $FF,61,PIDGEOT,59,ALAKAZAM,61,RHYDON,61,GYARADOS,63,ARCANINE,65,VENUSAUR,0 db $FF,61,PIDGEOT,59,ALAKAZAM,61,RHYDON,61,EXEGGUTOR,63,GYARADOS,65,CHARIZARD,0 endc LoreleiData: ; 3a4bb (e:64bb) db $FF,54,DEWGONG,53,CLOYSTER,54,SLOWBRO,56,JYNX,56,LAPRAS,0 ChannelerData: ; 3a4c7 (e:64c7) db 22,GASTLY,0 db 24,GASTLY,0 db 23,GASTLY,GASTLY,0 db 24,GASTLY,0 db 23,GASTLY,0 db 24,GASTLY,0 db 24,HAUNTER,0 db 22,GASTLY,0 db 24,GASTLY,0 db 23,GASTLY,GASTLY,0 db 24,GASTLY,0 db 22,GASTLY,0 db 24,GASTLY,0 db 23,HAUNTER,0 db 24,GASTLY,0 db 22,GASTLY,0 db 24,GASTLY,0 db 22,HAUNTER,0 db 22,GASTLY,GASTLY,GASTLY,0 db 24,GASTLY,0 db 24,GASTLY,0 db 34,GASTLY,HAUNTER,0 db 38,HAUNTER,0 db 33,GASTLY,GASTLY,HAUNTER,0 AgathaData: ; 3a516 (e:6516) db $FF,56,GENGAR,56,GOLBAT,55,HAUNTER,58,ARBOK,60,GENGAR,0 LanceData: ; 3a522 (e:6522) db $FF,58,GYARADOS,56,DRAGONAIR,56,DRAGONAIR,60,AERODACTYL,62,DRAGONITE,0 TrainerAI: ; 3a52e (e:652e) ;XXX called at 34964, 3c342, 3c398 and a ld a,[W_ISINBATTLE] dec a ret z ; if not a trainer, we're done here ld a,[W_ISLINKBATTLE] cp 4 ret z ld a,[W_TRAINERCLASS] ; what trainer class is this? dec a ld c,a ld b,0 ld hl,TrainerAIPointers add hl,bc add hl,bc add hl,bc ld a,[wAICount] and a ret z ; if no AI uses left, we're done here inc hl inc a jr nz,.getpointer dec hl ld a,[hli] ld [wAICount],a .getpointer ld a,[hli] ld h,[hl] ld l,a call GenRandom jp [hl] TrainerAIPointers: ; 3a55c (e:655c) ; one entry per trainer class ; first byte, number of times (per Pokémon) it can occur ; next two bytes, pointer to AI subroutine for trainer class dbw 3,GenericAI dbw 3,GenericAI dbw 3,GenericAI dbw 3,GenericAI dbw 3,GenericAI dbw 3,GenericAI dbw 3,GenericAI dbw 3,GenericAI dbw 3,GenericAI dbw 3,GenericAI dbw 3,GenericAI dbw 3,GenericAI dbw 3,JugglerAI ; juggler_x dbw 3,GenericAI dbw 3,GenericAI dbw 3,GenericAI dbw 3,GenericAI dbw 3,GenericAI dbw 3,GenericAI dbw 3,GenericAI dbw 3,JugglerAI ; juggler dbw 3,GenericAI dbw 3,GenericAI dbw 2,BlackbeltAI ; blackbelt dbw 3,GenericAI dbw 3,GenericAI dbw 1,GenericAI ; chief dbw 3,GenericAI dbw 1,GiovanniAI ; giovanni dbw 3,GenericAI dbw 2,CooltrainerMAI ; cooltrainerm dbw 1,CooltrainerFAI ; cooltrainerf dbw 2,BrunoAI ; bruno dbw 5,BrockAI ; brock dbw 1,MistyAI ; misty dbw 1,LtSurgeAI ; surge dbw 1,ErikaAI ; erika dbw 2,KogaAI ; koga dbw 2,BlaineAI ; blaine dbw 1,SabrinaAI ; sabrina dbw 3,GenericAI dbw 1,Sony2AI ; sony2 dbw 1,Sony3AI ; sony3 dbw 2,LoreleiAI ; lorelei dbw 3,GenericAI dbw 2,AgathaAI ; agatha dbw 1,LanceAI ; lance JugglerAI: ; 3a5e9 (e:65e9) cp $40 ret nc jp Func_3a72a BlackbeltAI: ; 3a5ef (e:65ef) cp $20 ret nc jp AIUseXAttack GiovanniAI: ; 3a5f5 (e:65f5) cp $40 ret nc jp AIUseGuardSpec CooltrainerMAI: ; 3a5fb (e:65fb) cp $40 ret nc jp AIUseXAttack CooltrainerFAI: ; 3a601 (e:6601) cp $40 ld a,$A call Func_3a7cf jp c,AIUseHyperPotion ld a,5 call Func_3a7cf ret nc jp Func_3a72a BrockAI: ; 3a614 (e:6614) ; if his active monster has a status condition, use a full heal ld a,[W_ENEMYMONSTATUS] and a ret z jp AIUseFullHeal MistyAI: ; 3a61c (e:661c) cp $40 ret nc jp AIUseXDefend LtSurgeAI: ; 3a622 (e:6622) cp $40 ret nc jp AIUseXSpeed ErikaAI: ; 3a628 (e:6628) cp $80 ret nc ld a,$A call Func_3a7cf ret nc jp AIUseSuperPotion KogaAI: ; 3a634 (e:6634) cp $40 ret nc jp AIUseXAttack BlaineAI: ; 3a63a (e:663a) cp $40 ret nc jp AIUseSuperPotion SabrinaAI: ; 3a640 (e:6640) cp $40 ret nc ld a,$A call Func_3a7cf ret nc jp AIUseHyperPotion Sony2AI: ; 3a64c (e:664c) cp $20 ret nc ld a,5 call Func_3a7cf ret nc jp AIUsePotion Sony3AI: ; 3a658 (e:6658) cp $20 ret nc ld a,5 call Func_3a7cf ret nc jp AIUseFullRestore LoreleiAI: ; 3a664 (e:6664) cp $80 ret nc ld a,5 call Func_3a7cf ret nc jp AIUseSuperPotion BrunoAI: ; 3a670 (e:6670) cp $40 ret nc jp AIUseXDefend AgathaAI: ; 3a676 (e:6676) cp $14 jp c,Func_3a72a cp $80 ret nc ld a,4 call Func_3a7cf ret nc jp AIUseSuperPotion LanceAI: ; 3a687 (e:6687) cp $80 ret nc ld a,5 call Func_3a7cf ret nc jp AIUseHyperPotion GenericAI: ; 3a693 (e:6693) and a ; clear carry ret ; end of individual trainer AI routines DecrementAICount: ; 3a695 (e:6695) ld hl,wAICount dec [hl] scf ret Func_3a69b: ; 3a69b (e:669b) ld a,$8E jp PlaySoundWaitForCurrent AIUseFullRestore: ; 3a6a0 (e:66a0) call AICureStatus ld a,FULL_RESTORE ld [$CF05],a ld de,wHPBarOldHP ld hl,$CFE7 ld a,[hld] ld [de],a inc de ld a,[hl] ld [de],a inc de ld hl,$CFF5 ld a,[hld] ld [de],a inc de ld [wHPBarMaxHP],a ld [$CFE7],a ld a,[hl] ld [de],a ld [wHPBarMaxHP+1],a ld [W_ENEMYMONCURHP],a jr Func_3a718 AIUsePotion: ; 3a6ca (e:66ca) ; enemy trainer heals his monster with a potion ld a,POTION ld b,20 jr AIRecoverHP AIUseSuperPotion: ; 3a6d0 (e:66d0) ; enemy trainer heals his monster with a super potion ld a,SUPER_POTION ld b,50 jr AIRecoverHP AIUseHyperPotion: ; 3a6d6 (e:66d6) ; enemy trainer heals his monster with a hyper potion ld a,HYPER_POTION ld b,200 ; fallthrough AIRecoverHP: ; 3a6da (e:66da) ; heal b HP and print "trainer used $(a) on pokemon!" ld [$CF05],a ld hl,$CFE7 ld a,[hl] ld [wHPBarOldHP],a add b ld [hld],a ld [wHPBarNewHP],a ld a,[hl] ld [wHPBarOldHP+1],a ld [wHPBarNewHP+1],a jr nc,.next inc a ld [hl],a ld [wHPBarNewHP+1],a .next inc hl ld a,[hld] ld b,a ld de,$CFF5 ld a,[de] dec de ld [wHPBarMaxHP],a sub b ld a,[hli] ld b,a ld a,[de] ld [wHPBarMaxHP+1],a sbc b jr nc,Func_3a718 inc de ld a,[de] dec de ld [hld],a ld [wHPBarNewHP],a ld a,[de] ld [hl],a ld [wHPBarNewHP+1],a ; fallthrough Func_3a718: ; 3a718 (e:6718) call AIPrintItemUse_ FuncCoord 2, 2 ; $c3ca ld hl,Coord xor a ld [$CF94],a ld a,$48 call Predef jp DecrementAICount Func_3a72a: ; 3a72a (e:672a) ld a,[wEnemyPartyCount] ld c,a ld hl,W_ENEMYMON1HP ld d,0 ; keep count of unfainted monsters ; count how many monsters haven't fainted yet .loop ld a,[hli] ld b,a ld a,[hld] or b jr z,.Fainted ; has monster fainted? inc d .Fainted push bc ld bc,$2C add hl,bc pop bc dec c jr nz,.loop ld a,d ; how many available monsters are there? cp 2 ; don't bother if only 1 or 2 jp nc,Func_3a74b and a ret Func_3a74b: ; 3a74b (e:674b) ; prepare to withdraw the active monster: copy hp, number, and status to roster ld a,[W_ENEMYMONNUMBER] ld hl,W_ENEMYMON1HP ld bc,$2C call AddNTimes ld d,h ld e,l ld hl,W_ENEMYMONCURHP ld bc,4 call CopyData ld hl, AIBattleWithdrawText call PrintText ld a,1 ld [$D11D],a ld hl,EnemySendOut ld b,BANK(EnemySendOut) call Bankswitch xor a ld [$D11D],a ld a,[W_ISLINKBATTLE] cp 4 ret z scf ret AIBattleWithdrawText: ; 3a781 (e:6781) TX_FAR _AIBattleWithdrawText db "@" AIUseFullHeal: ; 3a786 (e:6786) call Func_3a69b call AICureStatus ld a,FULL_HEAL jp AIPrintItemUse AICureStatus: ; 3a791 (e:6791) ; cures the status of enemy's active pokemon ld a,[W_ENEMYMONNUMBER] ld hl,$D8A8 ld bc,$2C call AddNTimes xor a ld [hl],a ; clear status in enemy team roster ld [W_ENEMYMONSTATUS],a ; clear status of active enemy ld hl,$D069 res 0,[hl] ret AIUseXAccuracy: ; 0x3a7a8 unused call Func_3a69b ld hl,$D068 set 0,[hl] ld a,X_ACCURACY jp AIPrintItemUse AIUseGuardSpec: ; 3a7b5 (e:67b5) call Func_3a69b ld hl,$D068 set 1,[hl] ld a,GUARD_SPEC_ jp AIPrintItemUse AIUseDireHit: ; 0x3a7c2 unused call Func_3a69b ld hl,$D068 set 2,[hl] ld a,DIRE_HIT jp AIPrintItemUse Func_3a7cf: ; 3a7cf (e:67cf) ld [H_DIVISOR],a ld hl,$CFF4 ld a,[hli] ld [H_DIVIDEND],a ld a,[hl] ld [H_DIVIDEND + 1],a ld b,2 call Divide ld a,[H_QUOTIENT + 3] ld c,a ld a,[H_QUOTIENT + 2] ld b,a ld hl,$CFE7 ld a,[hld] ld e,a ld a,[hl] ld d,a ld a,d sub b ret nz ld a,e sub c ret AIUseXAttack: ; 3a7f2 (e:67f2) ld b,$A ld a,X_ATTACK jr AIIncreaseStat AIUseXDefend: ; 3a7f8 (e:67f8) ld b,$B ld a,X_DEFEND jr AIIncreaseStat AIUseXSpeed: ; 3a7fe (e:67fe) ld b,$C ld a,X_SPEED jr AIIncreaseStat AIUseXSpecial: ; 3a804 (e:6804) ld b,$D ld a,X_SPECIAL ; fallthrough AIIncreaseStat: ; 3a808 (e:6808) ld [$CF05],a push bc call AIPrintItemUse_ pop bc ld hl,$CFCD ld a,[hld] push af ld a,[hl] push af push hl ld a,$AF ld [hli],a ld [hl],b ld hl, Func_3f428 ld b, BANK(Func_3f428) call Bankswitch pop hl pop af ld [hli],a pop af ld [hl],a jp DecrementAICount AIPrintItemUse: ; 3a82c (e:682c) ld [$CF05],a call AIPrintItemUse_ jp DecrementAICount AIPrintItemUse_: ; 3a835 (e:6835) ; print "x used [$CF05] on z!" ld a,[$CF05] ld [$D11E],a call GetItemName ld hl, AIBattleUseItemText jp PrintText AIBattleUseItemText: ; 3a844 (e:6844) TX_FAR _AIBattleUseItemText db "@" Func_3a849: ; 3a849 (e:6849) DrawAllPokeballs: ; 0x3a849 call LoadPartyPokeballGfx call SetupOwnPartyPokeballs ld a, [W_ISINBATTLE] ; $d057 dec a ret z ; return if wild pokémon jp SetupEnemyPartyPokeballs DrawEnemyPokeballs: ; 0x3a857 call LoadPartyPokeballGfx jp SetupEnemyPartyPokeballs LoadPartyPokeballGfx: ; 3a85d (e:685d) ld de, PokeballTileGraphics ; $697e ld hl, $8310 ld bc, (BANK(PokeballTileGraphics) << 8) + $04 jp CopyVideoData SetupOwnPartyPokeballs: ; 3a869 (e:6869) call Func_3a902 ld hl, W_PARTYMON1DATA ld de, W_NUMINPARTY ; $d163 call SetupPokeballs ld a, $60 ld hl, W_BASECOORDX ; $d081 ld [hli], a ld [hl], a ld a, $8 ld [$cd3e], a ld hl, wOAMBuffer jp Func_3a8e1 SetupEnemyPartyPokeballs: ; 3a887 (e:6887) call Func_3a919 ld hl, wEnemyMons ld de, wEnemyPartyCount ; $d89c call SetupPokeballs ld hl, W_BASECOORDX ; $d081 ld a, $48 ld [hli], a ld [hl], $20 ld a, $f8 ld [$cd3e], a ld hl, $c318 jp Func_3a8e1 SetupPokeballs: ; 0x3a8a6 ld a, [de] push af ld de, wBuffer ld c, $6 ; max num of partymons ld a, $34 ; empty pokeball .emptyloop ld [de], a inc de dec c jr nz, .emptyloop ; 0x3a8b2 $fb pop af ld de, wBuffer .monloop push af call PickPokeball inc de pop af dec a jr nz, .monloop ret PickPokeball: ; 3a8c2 (e:68c2) inc hl ld a, [hli] and a jr nz, .alive ld a, [hl] and a ld b, $33 ; crossed ball (fainted) jr z, .done_fainted .alive inc hl inc hl ld a, [hl] ; status and a ld b, $32 ; black ball (status) jr nz, .done dec b ; regular ball jr .done .done_fainted inc hl inc hl .done ld a, b ld [de], a ld bc, $0028 ; rest of mon struct add hl, bc ret Func_3a8e1: ; 3a8e1 (e:68e1) ld de, $cee9 ld c, $6 .asm_3a8e6 ld a, [W_BASECOORDY] ; $d082 ld [hli], a ld a, [W_BASECOORDX] ; $d081 ld [hli], a ld a, [de] ld [hli], a xor a ld [hli], a ld a, [W_BASECOORDX] ; $d081 ld b, a ld a, [$cd3e] add b ld [W_BASECOORDX], a ; $d081 inc de dec c jr nz, .asm_3a8e6 ret Func_3a902: ; 3a902 (e:6902) ld hl, PlayerBattleHUDGraphicsTiles ; $6916 ld de, $cd3f ld bc, $3 call CopyData FuncCoord 18, 10 ; $c47a ld hl, Coord ld de, rIE ; $ffff jr Func_3a930 PlayerBattleHUDGraphicsTiles: ; 3a916 (e:6916) ; The tile numbers for specific parts of the battle display for the player's pokemon db $73 ; unused ($73 is hardcoded into the routine that uses these bytes) db $77 ; lower-right corner tile of the HUD db $6F ; lower-left triangle tile of the HUD Func_3a919: ; 3a919 (e:6919) ld hl, EnemyBattleHUDGraphicsTiles ; $692d ld de, $cd3f ld bc, $3 call CopyData FuncCoord 1, 2 ; $c3c9 ld hl, Coord ld de, $1 jr Func_3a930 EnemyBattleHUDGraphicsTiles: ; 3a92d (e:692d) ; The tile numbers for specific parts of the battle display for the enemy db $73 ; unused ($73 is hardcoded in the routine that uses these bytes) db $74 ; lower-left corner tile of the HUD db $78 ; lower-right triangle tile of the HUD Func_3a930: ; 3a930 (e:6930) ld [hl], $73 ld bc, $14 add hl, bc ld a, [$cd40] ld [hl], a ld a, $8 .asm_3a93c add hl, de ld [hl], $76 dec a jr nz, .asm_3a93c add hl, de ld a, [$cd41] ld [hl], a ret Func_3a948: ; 3a948 (e:6948) call LoadPartyPokeballGfx ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA) ld de, W_NUMINPARTY ; $d163 call SetupPokeballs ld hl, W_BASECOORDX ; $d081 ld a, $50 ld [hli], a ld [hl], $40 ld a, $8 ld [$cd3e], a ld hl, wOAMBuffer call Func_3a8e1 ld hl, wEnemyMons ; $d8a4 ld de, wEnemyPartyCount ; $d89c call SetupPokeballs ld hl, W_BASECOORDX ; $d081 ld a, $50 ld [hli], a ld [hl], $68 ld hl, $c318 jp Func_3a8e1 ; four tiles: pokeball, black pokeball (status ailment), crossed out pokeball (faited) and pokeball slot (no mon) PokeballTileGraphics:: ; 3a97e (e:697e) INCBIN "gfx/pokeball.2bpp" ; tiles for gameboy and link cable graphics used for trading sequence animation TradingAnimationGraphics: ; 3a9be (e:69be) INCBIN "gfx/trade.2bpp" ; 4 tiles for actual wire transfer animation (pokeball wandering inside wire) TradingAnimationGraphics2: ; 3acce (e:6cce) INCBIN "gfx/trade2.2bpp" Func_3ad0e: ; 3ad0e (e:6d0e) ld hl, $ccd3 xor a ld [hl], a ld a, [wWhichPokemon] ; $cf92 ld c, a ld b, $1 call Func_3b057 Func_3ad1c: ; 3ad1c (e:6d1c) ld a, [$FF00+$d7] push af xor a ld [$d121], a dec a ld [wWhichPokemon], a ; $cf92 push hl push bc push de ld hl, W_NUMINPARTY ; $d163 push hl asm_3ad2e: ; 3ad2e (e:6d2e) ld hl, wWhichPokemon ; $cf92 inc [hl] pop hl inc hl ld a, [hl] cp $ff jp z, Func_3aede ld [$cee9], a push hl ld a, [wWhichPokemon] ; $cf92 ld c, a ld hl, $ccd3 ld b, $2 call Func_3b057 ld a, c and a jp z, asm_3ad2e ld a, [$cee9] dec a ld b, $0 ld hl, EvosMovesPointerTable add a rl b ld c, a add hl, bc ld a, [hli] ld h, [hl] ld l, a push hl ld a, [$cf91] push af xor a ld [$cc49], a call LoadMonData pop af ld [$cf91], a pop hl Func_3ad71: ; 3ad71 (e:6d71) ld a, [hli] and a jr z, asm_3ad2e ld b, a cp $3 jr z, .asm_3ad91 ld a, [W_ISLINKBATTLE] ; $d12b cp $32 jr z, asm_3ad2e ld a, b cp $2 jr z, .asm_3ada4 ld a, [$ccd4] and a jr nz, asm_3ad2e ld a, b cp $1 jr z, .asm_3adad .asm_3ad91 ld a, [W_ISLINKBATTLE] ; $d12b cp $32 jp nz, Func_3aed9 ld a, [hli] ld b, a ld a, [$cfb9] cp b jp c, asm_3ad2e jr .asm_3adb6 .asm_3ada4 ld a, [hli] ld b, a ld a, [$cf91] cp b jp nz, Func_3aed9 .asm_3adad ld a, [hli] ld b, a ld a, [$cfb9] cp b jp c, Func_3aeda .asm_3adb6 ld [W_CURENEMYLVL], a ; $d127 ld a, $1 ld [$d121], a push hl ld a, [hl] ld [$ceea], a ld a, [wWhichPokemon] ; $cf92 ld hl, W_PARTYMON1NAME ; $d2b5 call GetPartyMonName call CopyStringToCF4B ld hl, UnnamedText_3af4d ; $6f4d call PrintText ld c, $32 call DelayFrames xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld hl, wTileMap ld bc, $c14 call ClearScreenArea ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld a, $ff ld [$cfcb], a call CleanLCD_OAM ld hl, Func_7bde9 ld b, BANK(Func_7bde9) call Bankswitch jp c, Func_3af2e ld hl, UnnamedText_3af3e ; $6f3e call PrintText pop hl ld a, [hl] ld [$d0b5], a ld [$cf98], a ld [$ceea], a ld a, MONSTER_NAME ld [W_LISTTYPE], a ld a, $e ld [$d0b7], a call GetName push hl ld hl, UnnamedText_3af43 ; $6f43 call Func_3c59 ld a, $89 call PlaySoundWaitForCurrent call WaitForSoundToFinish ld c, $28 call DelayFrames call ClearScreen call Func_3aef7 ld a, [$d11e] push af ld a, [$d0b5] ld [$d11e], a ld a, $3a call Predef ; indirect jump to IndexToPokedex (41010 (10:5010)) ld a, [$d11e] dec a ld hl, BulbasaurBaseStats ; $43de ld bc, $1c call AddNTimes ld de, W_MONHEADER call CopyData ld a, [$d0b5] ld [$d0b8], a pop af ld [$d11e], a ld hl, $cfa8 ld de, $cfba ld b, $1 call CalcStats ld a, [wWhichPokemon] ; $cf92 ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA) ld bc, $2c call AddNTimes ld e, l ld d, h push hl push bc ld bc, $22 add hl, bc ld a, [hli] ld b, a ld c, [hl] ld hl, $cfbb ld a, [hld] sub c ld c, a ld a, [hl] sbc b ld b, a ld hl, $cf9a ld a, [hl] add c ld [hld], a ld a, [hl] adc b ld [hl], a dec hl pop bc call CopyData ld a, [$d0b5] ld [$d11e], a xor a ld [$cc49], a call Func_3af5b pop hl ld a, $42 call Predef ; indirect jump to SetPartyMonTypes (5db5e (17:5b5e)) ld a, [W_ISINBATTLE] ; $d057 and a call z, Func_3af52 ld a, $3a call Predef ; indirect jump to IndexToPokedex (41010 (10:5010)) ld a, [$d11e] dec a ld c, a ld b, $1 ld hl, wPokedexOwned ; $d2f7 push bc call Func_3b057 pop bc ld hl, wPokedexSeen ; $d30a call Func_3b057 pop de pop hl ld a, [$cf98] ld [hl], a push hl ld l, e ld h, d jr Func_3aeda Func_3aed9: ; 3aed9 (e:6ed9) inc hl Func_3aeda: ; 3aeda (e:6eda) inc hl jp Func_3ad71 Func_3aede: ; 3aede (e:6ede) pop de pop bc pop hl pop af ld [$FF00+$d7], a ld a, [W_ISLINKBATTLE] ; $d12b cp $32 ret z ld a, [W_ISINBATTLE] ; $d057 and a ret nz ld a, [$d121] and a call nz, Func_2307 ret Func_3aef7: ; 3aef7 (e:6ef7) ld a, [$d0b5] push af ld a, [$d0b8] ld [$d0b5], a call GetName pop af ld [$d0b5], a ld hl, $cd6d ld de, $cf4b .asm_3af0e ld a, [de] inc de cp [hl] inc hl ret nz cp $50 jr nz, .asm_3af0e ld a, [wWhichPokemon] ; $cf92 ld bc, $b ld hl, W_PARTYMON1NAME ; $d2b5 call AddNTimes push hl call GetName ld hl, $cd6d pop de jp CopyData Func_3af2e: ; 3af2e (e:6f2e) ld hl, UnnamedText_3af48 ; $6f48 call PrintText call ClearScreen pop hl call Func_3af52 jp asm_3ad2e UnnamedText_3af3e: ; 3af3e (e:6f3e) TX_FAR _UnnamedText_3af3e db "@" UnnamedText_3af43: ; 3af43 (e:6f43) TX_FAR _UnnamedText_3af43 db "@" UnnamedText_3af48: ; 3af48 (e:6f48) TX_FAR _UnnamedText_3af48 db "@" UnnamedText_3af4d: ; 3af4d (e:6f4d) TX_FAR _UnnamedText_3af4d db "@" Func_3af52: ; 3af52 (e:6f52) ld a, [W_ISLINKBATTLE] ; $d12b cp $32 ret z jp ReloadTilesetTilePatterns Func_3af5b: ; 3af5b (e:6f5b) ld hl, EvosMovesPointerTable ld a, [$d11e] ld [$cf91], a dec a ld bc, $0 ld hl, EvosMovesPointerTable add a rl b ld c, a add hl, bc ld a, [hli] ld h, [hl] ld l, a .asm_3af73 ld a, [hli] and a jr nz, .asm_3af73 .asm_3af77 ld a, [hli] and a jr z, .asm_3afb1 ld b, a ld a, [W_CURENEMYLVL] ; $d127 cp b ld a, [hli] jr nz, .asm_3af77 ld d, a ld a, [$cc49] and a jr nz, .asm_3af96 ld hl, W_PARTYMON1_MOVE1 ; $d173 ld a, [wWhichPokemon] ; $cf92 ld bc, $2c call AddNTimes .asm_3af96 ld b, $4 .asm_3af98 ld a, [hli] cp d jr z, .asm_3afb1 dec b jr nz, .asm_3af98 ld a, d ld [$d0e0], a ld [$d11e], a call GetMoveName call CopyStringToCF4B ld a, $1b call Predef ; indirect jump to Func_6e43 (6e43 (1:6e43)) .asm_3afb1 ld a, [$cf91] ld [$d11e], a ret ; writes the moves a mon has at level [W_CURENEMYLVL] to [de] ; move slots are being filled up sequentially and shifted if all slots are full ; [$cee9]: (?) WriteMonMoves: ; 3afb8 (e:6fb8) call Load16BitRegisters push hl push de push bc ld hl, EvosMovesPointerTable ld b, $0 ld a, [$cf91] ; cur mon ID dec a add a rl b ld c, a add hl, bc ld a, [hli] ld h, [hl] ld l, a .skipEvoEntriesLoop ld a, [hli] and a jr nz, .skipEvoEntriesLoop jr .firstMove .nextMove pop de .nextMove2 inc hl .firstMove ld a, [hli] ; read level of next move in learnset and a jp z, .done ; end of list ld b, a ld a, [W_CURENEMYLVL] ; $d127 cp b jp c, .done ; mon level < move level (assumption: learnset is sorted by level) ld a, [$cee9] and a jr z, .skipMinLevelCheck ld a, [wWhichTrade] ; $cd3d (min move level) cp b jr nc, .nextMove2 ; min level >= move level .skipMinLevelCheck push de ld c, $4 .moveAlreadyLearnedCheckLoop ld a, [de] inc de cp [hl] jr z, .nextMove dec c jr nz, .moveAlreadyLearnedCheckLoop pop de push de ld c, $4 .findEmptySlotLoop ld a, [de] and a jr z, .writeMoveToSlot2 inc de dec c jr nz, .findEmptySlotLoop pop de ; no empty move slots found push de push hl ld h, d ld l, e call WriteMonMoves_ShiftMoveData ; shift all moves one up (deleting move 1) ld a, [$cee9] and a jr z, .writeMoveToSlot push de ld bc, $12 add hl, bc ld d, h ld e, l call WriteMonMoves_ShiftMoveData ; shift all move PP data one up pop de .writeMoveToSlot pop hl .writeMoveToSlot2 ld a, [hl] ld [de], a ld a, [$cee9] and a jr z, .nextMove push hl ; write move PP value ld a, [hl] ld hl, $15 add hl, de push hl dec a ld hl, Moves ld bc, $6 call AddNTimes ld de, $cee9 ld a, BANK(Moves) call FarCopyData ld a, [$ceee] pop hl ld [hl], a pop hl jr .nextMove .done pop bc pop de pop hl ret ; shifts all move data one up (freeing 4th move slot) WriteMonMoves_ShiftMoveData: ; 3b04e (e:704e) ld c, $3 .asm_3b050 inc de ld a, [de] ld [hli], a dec c jr nz, .asm_3b050 ret Func_3b057: ; 3b057 (e:7057) ld a, $10 jp Predef ; indirect jump to HandleBitArray (f666 (3:7666)) EvosMovesPointerTable: ; 3b05c (e:705c) dw Mon112_EvosMoves dw Mon115_EvosMoves dw Mon032_EvosMoves dw Mon035_EvosMoves dw Mon021_EvosMoves dw Mon100_EvosMoves dw Mon034_EvosMoves dw Mon080_EvosMoves dw Mon002_EvosMoves dw Mon103_EvosMoves dw Mon108_EvosMoves dw Mon102_EvosMoves dw Mon088_EvosMoves dw Mon094_EvosMoves dw Mon029_EvosMoves dw Mon031_EvosMoves dw Mon104_EvosMoves dw Mon111_EvosMoves dw Mon131_EvosMoves dw Mon059_EvosMoves dw Mon151_EvosMoves dw Mon130_EvosMoves dw Mon090_EvosMoves dw Mon072_EvosMoves dw Mon092_EvosMoves dw Mon123_EvosMoves dw Mon120_EvosMoves dw Mon009_EvosMoves dw Mon127_EvosMoves dw Mon114_EvosMoves dw Mon152_EvosMoves ;MissingNo dw Mon153_EvosMoves ;MissingNo dw Mon058_EvosMoves dw Mon095_EvosMoves dw Mon022_EvosMoves dw Mon016_EvosMoves dw Mon079_EvosMoves dw Mon064_EvosMoves dw Mon075_EvosMoves dw Mon113_EvosMoves dw Mon067_EvosMoves dw Mon122_EvosMoves dw Mon106_EvosMoves dw Mon107_EvosMoves dw Mon024_EvosMoves dw Mon047_EvosMoves dw Mon054_EvosMoves dw Mon096_EvosMoves dw Mon076_EvosMoves dw Mon154_EvosMoves ;MissingNo dw Mon126_EvosMoves dw Mon155_EvosMoves ;MissingNo dw Mon125_EvosMoves dw Mon082_EvosMoves dw Mon109_EvosMoves dw Mon156_EvosMoves ;MissingNo dw Mon056_EvosMoves dw Mon086_EvosMoves dw Mon050_EvosMoves dw Mon128_EvosMoves dw Mon157_EvosMoves ;MissingNo dw Mon158_EvosMoves ;MissingNo dw Mon159_EvosMoves ;MissingNo dw Mon083_EvosMoves dw Mon048_EvosMoves dw Mon149_EvosMoves dw Mon160_EvosMoves ;MissingNo dw Mon161_EvosMoves ;MissingNo dw Mon162_EvosMoves ;MissingNo dw Mon084_EvosMoves dw Mon060_EvosMoves dw Mon124_EvosMoves dw Mon146_EvosMoves dw Mon144_EvosMoves dw Mon145_EvosMoves dw Mon132_EvosMoves dw Mon052_EvosMoves dw Mon098_EvosMoves dw Mon163_EvosMoves ;MissingNo dw Mon164_EvosMoves ;MissingNo dw Mon165_EvosMoves ;MissingNo dw Mon037_EvosMoves dw Mon038_EvosMoves dw Mon025_EvosMoves dw Mon026_EvosMoves dw Mon166_EvosMoves ;MissingNo dw Mon167_EvosMoves ;MissingNo dw Mon147_EvosMoves dw Mon148_EvosMoves dw Mon140_EvosMoves dw Mon141_EvosMoves dw Mon116_EvosMoves dw Mon117_EvosMoves dw Mon168_EvosMoves ;MissingNo dw Mon169_EvosMoves ;MissingNo dw Mon027_EvosMoves dw Mon028_EvosMoves dw Mon138_EvosMoves dw Mon139_EvosMoves dw Mon039_EvosMoves dw Mon040_EvosMoves dw Mon133_EvosMoves dw Mon136_EvosMoves dw Mon135_EvosMoves dw Mon134_EvosMoves dw Mon066_EvosMoves dw Mon041_EvosMoves dw Mon023_EvosMoves dw Mon046_EvosMoves dw Mon061_EvosMoves dw Mon062_EvosMoves dw Mon013_EvosMoves dw Mon014_EvosMoves dw Mon015_EvosMoves dw Mon170_EvosMoves ;MissingNo dw Mon085_EvosMoves dw Mon057_EvosMoves dw Mon051_EvosMoves dw Mon049_EvosMoves dw Mon087_EvosMoves dw Mon171_EvosMoves ;MissingNo dw Mon172_EvosMoves ;MissingNo dw Mon010_EvosMoves dw Mon011_EvosMoves dw Mon012_EvosMoves dw Mon068_EvosMoves dw Mon173_EvosMoves ;MissingNo dw Mon055_EvosMoves dw Mon097_EvosMoves dw Mon042_EvosMoves dw Mon150_EvosMoves dw Mon143_EvosMoves dw Mon129_EvosMoves dw Mon174_EvosMoves ;MissingNo dw Mon175_EvosMoves ;MissingNo dw Mon089_EvosMoves dw Mon176_EvosMoves ;MissingNo dw Mon099_EvosMoves dw Mon091_EvosMoves dw Mon177_EvosMoves ;MissingNo dw Mon101_EvosMoves dw Mon036_EvosMoves dw Mon110_EvosMoves dw Mon053_EvosMoves dw Mon105_EvosMoves dw Mon178_EvosMoves ;MissingNo dw Mon093_EvosMoves dw Mon063_EvosMoves dw Mon065_EvosMoves dw Mon017_EvosMoves dw Mon018_EvosMoves dw Mon121_EvosMoves dw Mon001_EvosMoves dw Mon003_EvosMoves dw Mon073_EvosMoves dw Mon179_EvosMoves ;MissingNo dw Mon118_EvosMoves dw Mon119_EvosMoves dw Mon180_EvosMoves ;MissingNo dw Mon181_EvosMoves ;MissingNo dw Mon182_EvosMoves ;MissingNo dw Mon183_EvosMoves ;MissingNo dw Mon077_EvosMoves dw Mon078_EvosMoves dw Mon019_EvosMoves dw Mon020_EvosMoves dw Mon033_EvosMoves dw Mon030_EvosMoves dw Mon074_EvosMoves dw Mon137_EvosMoves dw Mon142_EvosMoves dw Mon184_EvosMoves ;MissingNo dw Mon081_EvosMoves dw Mon185_EvosMoves ;MissingNo dw Mon186_EvosMoves ;MissingNo dw Mon004_EvosMoves dw Mon007_EvosMoves dw Mon005_EvosMoves dw Mon008_EvosMoves dw Mon006_EvosMoves dw Mon187_EvosMoves ;MissingNo dw Mon188_EvosMoves ;MissingNo dw Mon189_EvosMoves ;MissingNo dw Mon190_EvosMoves ;MissingNo dw Mon043_EvosMoves dw Mon044_EvosMoves dw Mon045_EvosMoves dw Mon069_EvosMoves dw Mon070_EvosMoves dw Mon071_EvosMoves Mon112_EvosMoves: ; 3b1d8 (e:71d8) ;RHYDON ;Evolutions db 0 ;Learnset db 30,STOMP db 35,TAIL_WHIP db 40,FURY_ATTACK db 48,HORN_DRILL db 55,LEER db 64,TAKE_DOWN db 0 Mon115_EvosMoves: ; 3b1e6 (e:71e6) ;KANGASKHAN ;Evolutions db 0 ;Learnset db 26,BITE db 31,TAIL_WHIP db 36,MEGA_PUNCH db 41,LEER db 46,DIZZY_PUNCH db 0 Mon032_EvosMoves: ; 3b1f2 (e:71f2) ;NIDORAN_M ;Evolutions db EV_LEVEL,16,NIDORINO db 0 ;Learnset db 8,HORN_ATTACK db 14,POISON_STING db 21,FOCUS_ENERGY db 29,FURY_ATTACK db 36,HORN_DRILL db 43,DOUBLE_KICK db 0 Mon035_EvosMoves: ; 3b203 (e:7203) ;CLEFAIRY ;Evolutions db EV_ITEM,MOON_STONE,1,CLEFABLE db 0 ;Learnset db 13,SING db 18,DOUBLESLAP db 24,MINIMIZE db 31,METRONOME db 39,DEFENSE_CURL db 48,LIGHT_SCREEN db 0 Mon021_EvosMoves: ; 3b215 (e:7215) ;SPEAROW ;Evolutions db EV_LEVEL,20,FEAROW db 0 ;Learnset db 9,LEER db 15,FURY_ATTACK db 22,MIRROR_MOVE db 29,DRILL_PECK db 36,AGILITY db 0 Mon100_EvosMoves: ; 3b224 (e:7224) ;VOLTORB ;Evolutions db EV_LEVEL,30,ELECTRODE db 0 ;Learnset db 17,SONICBOOM db 22,SELFDESTRUCT db 29,LIGHT_SCREEN db 36,SWIFT db 43,EXPLOSION db 0 Mon034_EvosMoves: ; 3b233 (e:7233) ;NIDOKING ;Evolutions db 0 ;Learnset db 8,HORN_ATTACK db 14,POISON_STING db 23,THRASH db 0 Mon080_EvosMoves: ; 3b23b (e:723b) ;SLOWBRO ;Evolutions db 0 ;Learnset db 18,DISABLE db 22,HEADBUTT db 27,GROWL db 33,WATER_GUN db 37,WITHDRAW db 44,AMNESIA db 55,PSYCHIC_M db 0 Mon002_EvosMoves: ; 3b24b (e:724b) ;IVYSAUR ;Evolutions db EV_LEVEL,32,VENUSAUR db 0 ;Learnset db 7,LEECH_SEED db 13,VINE_WHIP db 22,POISONPOWDER db 30,RAZOR_LEAF db 38,GROWTH db 46,SLEEP_POWDER db 54,SOLARBEAM db 0 Mon103_EvosMoves: ; 3b25e (e:725e) ;EXEGGUTOR ;Evolutions db 0 ;Learnset db 28,STOMP db 0 Mon108_EvosMoves: ; 3b262 (e:7262) ;LICKITUNG ;Evolutions db 0 ;Learnset db 7,STOMP db 15,DISABLE db 23,DEFENSE_CURL db 31,SLAM db 39,SCREECH db 0 Mon102_EvosMoves: ; 3b26e (e:726e) ;EXEGGCUTE ;Evolutions db EV_ITEM,LEAF_STONE ,1,EXEGGUTOR db 0 ;Learnset db 25,REFLECT db 28,LEECH_SEED db 32,STUN_SPORE db 37,POISONPOWDER db 42,SOLARBEAM db 48,SLEEP_POWDER db 0 Mon088_EvosMoves: ; 3b280 (e:7280) ;GRIMER ;Evolutions db EV_LEVEL,38,MUK db 0 ;Learnset db 30,POISON_GAS db 33,MINIMIZE db 37,SLUDGE db 42,HARDEN db 48,SCREECH db 55,ACID_ARMOR db 0 Mon094_EvosMoves: ; 3b291 (e:7291) ;GENGAR ;Evolutions db 0 ;Learnset db 29,HYPNOSIS db 38,DREAM_EATER db 0 Mon029_EvosMoves: ; 3b297 (e:7297) ;NIDORAN_F ;Evolutions db EV_LEVEL,16,NIDORINA db 0 ;Learnset db 8,SCRATCH db 14,POISON_STING db 21,TAIL_WHIP db 29,BITE db 36,FURY_SWIPES db 43,DOUBLE_KICK db 0 Mon031_EvosMoves: ; 3b2a8 (e:72a8) ;NIDOQUEEN ;Evolutions db 0 ;Learnset db 8,SCRATCH db 14,POISON_STING db 23,BODY_SLAM db 0 Mon104_EvosMoves: ; 3b2b0 (e:72b0) ;CUBONE ;Evolutions db EV_LEVEL,28,MAROWAK db 0 ;Learnset db 25,LEER db 31,FOCUS_ENERGY db 38,THRASH db 43,BONEMERANG db 46,RAGE db 0 Mon111_EvosMoves: ; 3b2bf (e:72bf) ;RHYHORN ;Evolutions db EV_LEVEL,42,RHYDON db 0 ;Learnset db 30,STOMP db 35,TAIL_WHIP db 40,FURY_ATTACK db 45,HORN_DRILL db 50,LEER db 55,TAKE_DOWN db 0 Mon131_EvosMoves: ; 3b2d0 (e:72d0) ;LAPRAS ;Evolutions db 0 ;Learnset db 16,SING db 20,MIST db 25,BODY_SLAM db 31,CONFUSE_RAY db 38,ICE_BEAM db 46,HYDRO_PUMP db 0 Mon059_EvosMoves: ; 3b2de (e:72de) ;ARCANINE ;Evolutions db 0 ;Learnset db 0 Mon151_EvosMoves: ; 3b2e0 (e:72e0) ;MEW ;Evolutions db 0 ;Learnset db 10,TRANSFORM db 20,MEGA_PUNCH db 30,METRONOME db 40,PSYCHIC_M db 0 Mon130_EvosMoves: ; 3b2ea (e:72ea) ;GYARADOS ;Evolutions db 0 ;Learnset db 20,BITE db 25,DRAGON_RAGE db 32,LEER db 41,HYDRO_PUMP db 52,HYPER_BEAM db 0 Mon090_EvosMoves: ; 3b2f6 (e:72f6) ;SHELLDER ;Evolutions db EV_ITEM,WATER_STONE ,1,CLOYSTER db 0 ;Learnset db 18,SUPERSONIC db 23,CLAMP db 30,AURORA_BEAM db 39,LEER db 50,ICE_BEAM db 0 Mon072_EvosMoves: ; 3b306 (e:7306) ;TENTACOOL ;Evolutions db EV_LEVEL,30,TENTACRUEL db 0 ;Learnset db 7,SUPERSONIC db 13,WRAP db 18,POISON_STING db 22,WATER_GUN db 27,CONSTRICT db 33,BARRIER db 40,SCREECH db 48,HYDRO_PUMP db 0 Mon092_EvosMoves: ; 3b31b (e:731b) ;GASTLY ;Evolutions db EV_LEVEL,25,HAUNTER db 0 ;Learnset db 27,HYPNOSIS db 35,DREAM_EATER db 0 Mon123_EvosMoves: ; 3b324 (e:7324) ;SCYTHER ;Evolutions db 0 ;Learnset db 17,LEER db 20,FOCUS_ENERGY db 24,DOUBLE_TEAM db 29,SLASH db 35,SWORDS_DANCE db 42,AGILITY db 0 Mon120_EvosMoves: ; 3b332 (e:7332) ;STARYU ;Evolutions db EV_ITEM,WATER_STONE ,1,STARMIE db 0 ;Learnset db 17,WATER_GUN db 22,HARDEN db 27,RECOVER db 32,SWIFT db 37,MINIMIZE db 42,LIGHT_SCREEN db 47,HYDRO_PUMP db 0 Mon009_EvosMoves: ; 3b346 (e:7346) ;BLASTOISE ;Evolutions db 0 ;Learnset db 8,BUBBLE db 15,WATER_GUN db 24,BITE db 31,WITHDRAW db 42,SKULL_BASH db 52,HYDRO_PUMP db 0 Mon127_EvosMoves: ; 3b354 (e:7354) ;PINSIR ;Evolutions db 0 ;Learnset db 25,SEISMIC_TOSS db 30,GUILLOTINE db 36,FOCUS_ENERGY db 43,HARDEN db 49,SLASH db 54,SWORDS_DANCE db 0 Mon114_EvosMoves: ; 3b362 (e:7362) ;TANGELA ;Evolutions db 0 ;Learnset db 29,ABSORB db 32,POISONPOWDER db 36,STUN_SPORE db 39,SLEEP_POWDER db 45,SLAM db 49,GROWTH db 0 Mon152_EvosMoves: ; 3b370 (e:7370) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon153_EvosMoves: ; 3b372 (e:7372) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon058_EvosMoves: ; 3b374 (e:7374) ;GROWLITHE ;Evolutions db EV_ITEM,FIRE_STONE,1,ARCANINE db 0 ;Learnset db 18,EMBER db 23,LEER db 30,TAKE_DOWN db 39,AGILITY db 50,FLAMETHROWER db 0 Mon095_EvosMoves: ; 3b384 (e:7384) ;ONIX ;Evolutions db 0 ;Learnset db 15,BIND db 19,ROCK_THROW db 25,RAGE db 33,SLAM db 43,HARDEN db 0 Mon022_EvosMoves: ; 3b390 (e:7390) ;FEAROW ;Evolutions db 0 ;Learnset db 9,LEER db 15,FURY_ATTACK db 25,MIRROR_MOVE db 34,DRILL_PECK db 43,AGILITY db 0 Mon016_EvosMoves: ; 3b39c (e:739c) ;PIDGEY ;Evolutions db EV_LEVEL,18,PIDGEOTTO db 0 ;Learnset db 5,SAND_ATTACK db 12,QUICK_ATTACK db 19,WHIRLWIND db 28,WING_ATTACK db 36,AGILITY db 44,MIRROR_MOVE db 0 Mon079_EvosMoves: ; 3b3ad (e:73ad) ;SLOWPOKE ;Evolutions db EV_LEVEL,37,SLOWBRO db 0 ;Learnset db 18,DISABLE db 22,HEADBUTT db 27,GROWL db 33,WATER_GUN db 40,AMNESIA db 48,PSYCHIC_M db 0 Mon064_EvosMoves: ; 3b3be (e:73be) ;KADABRA ;Evolutions db EV_TRADE,1,ALAKAZAM db 0 ;Learnset db 16,CONFUSION db 20,DISABLE db 27,PSYBEAM db 31,RECOVER db 38,PSYCHIC_M db 42,REFLECT db 0 Mon075_EvosMoves: ; 3b3cf (e:73cf) ;GRAVELER ;Evolutions db EV_TRADE,1,GOLEM db 0 ;Learnset db 11,DEFENSE_CURL db 16,ROCK_THROW db 21,SELFDESTRUCT db 29,HARDEN db 36,EARTHQUAKE db 43,EXPLOSION db 0 Mon113_EvosMoves: ; 3b3e0 (e:73e0) ;CHANSEY ;Evolutions db 0 ;Learnset db 24,SING db 30,GROWL db 38,MINIMIZE db 44,DEFENSE_CURL db 48,LIGHT_SCREEN db 54,DOUBLE_EDGE db 0 Mon067_EvosMoves: ; 3b3ee (e:73ee) ;MACHOKE ;Evolutions db EV_TRADE,1,MACHAMP db 0 ;Learnset db 20,LOW_KICK db 25,LEER db 36,FOCUS_ENERGY db 44,SEISMIC_TOSS db 52,SUBMISSION db 0 Mon122_EvosMoves: ; 3b3fd (e:73fd) ;MR_MIME ;Evolutions db 0 ;Learnset db 15,CONFUSION db 23,LIGHT_SCREEN db 31,DOUBLESLAP db 39,MEDITATE db 47,SUBSTITUTE db 0 Mon106_EvosMoves: ; 3b409 (e:7409) ;HITMONLEE ;Evolutions db 0 ;Learnset db 33,ROLLING_KICK db 38,JUMP_KICK db 43,FOCUS_ENERGY db 48,HI_JUMP_KICK db 53,MEGA_KICK db 0 Mon107_EvosMoves: ; 3b415 (e:7415) ;HITMONCHAN ;Evolutions db 0 ;Learnset db 33,FIRE_PUNCH db 38,ICE_PUNCH db 43,THUNDERPUNCH db 48,MEGA_PUNCH db 53,COUNTER db 0 Mon024_EvosMoves: ; 3b421 (e:7421) ;ARBOK ;Evolutions db 0 ;Learnset db 10,POISON_STING db 17,BITE db 27,GLARE db 36,SCREECH db 47,ACID db 0 Mon047_EvosMoves: ; 3b42d (e:742d) ;PARASECT ;Evolutions db 0 ;Learnset db 13,STUN_SPORE db 20,LEECH_LIFE db 30,SPORE db 39,SLASH db 48,GROWTH db 0 Mon054_EvosMoves: ; 3b439 (e:7439) ;PSYDUCK ;Evolutions db EV_LEVEL,33,GOLDUCK db 0 ;Learnset db 28,TAIL_WHIP db 31,DISABLE db 36,CONFUSION db 43,FURY_SWIPES db 52,HYDRO_PUMP db 0 Mon096_EvosMoves: ; 3b448 (e:7448) ;DROWZEE ;Evolutions db EV_LEVEL,26,HYPNO db 0 ;Learnset db 12,DISABLE db 17,CONFUSION db 24,HEADBUTT db 29,POISON_GAS db 32,PSYCHIC_M db 37,MEDITATE db 0 Mon076_EvosMoves: ; 3b459 (e:7459) ;GOLEM ;Evolutions db 0 ;Learnset db 11,DEFENSE_CURL db 16,ROCK_THROW db 21,SELFDESTRUCT db 29,HARDEN db 36,EARTHQUAKE db 43,EXPLOSION db 0 Mon154_EvosMoves: ; 3b467 (e:7467) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon126_EvosMoves: ; 3b469 (e:7469) ;MAGMAR ;Evolutions db 0 ;Learnset db 36,LEER db 39,CONFUSE_RAY db 43,FIRE_PUNCH db 48,SMOKESCREEN db 52,SMOG db 55,FLAMETHROWER db 0 Mon155_EvosMoves: ; 3b477 (e:7477) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon125_EvosMoves: ; 3b479 (e:7479) ;ELECTABUZZ ;Evolutions db 0 ;Learnset db 34,THUNDERSHOCK db 37,SCREECH db 42,THUNDERPUNCH db 49,LIGHT_SCREEN db 54,THUNDER db 0 Mon082_EvosMoves: ; 3b485 (e:7485) ;MAGNETON ;Evolutions db 0 ;Learnset db 21,SONICBOOM db 25,THUNDERSHOCK db 29,SUPERSONIC db 38,THUNDER_WAVE db 46,SWIFT db 54,SCREECH db 0 Mon109_EvosMoves: ; 3b493 (e:7493) ;KOFFING ;Evolutions db EV_LEVEL,35,WEEZING db 0 ;Learnset db 32,SLUDGE db 37,SMOKESCREEN db 40,SELFDESTRUCT db 45,HAZE db 48,EXPLOSION db 0 Mon156_EvosMoves: ; 3b4a2 (e:74a2) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon056_EvosMoves: ; 3b4a4 (e:74a4) ;MANKEY ;Evolutions db EV_LEVEL,28,PRIMEAPE db 0 ;Learnset db 15,KARATE_CHOP db 21,FURY_SWIPES db 27,FOCUS_ENERGY db 33,SEISMIC_TOSS db 39,THRASH db 0 Mon086_EvosMoves: ; 3b4b3 (e:74b3) ;SEEL ;Evolutions db EV_LEVEL,34,DEWGONG db 0 ;Learnset db 30,GROWL db 35,AURORA_BEAM db 40,REST db 45,TAKE_DOWN db 50,ICE_BEAM db 0 Mon050_EvosMoves: ; 3b4c2 (e:74c2) ;DIGLETT ;Evolutions db EV_LEVEL,26,DUGTRIO db 0 ;Learnset db 15,GROWL db 19,DIG db 24,SAND_ATTACK db 31,SLASH db 40,EARTHQUAKE db 0 Mon128_EvosMoves: ; 3b4d1 (e:74d1) ;TAUROS ;Evolutions db 0 ;Learnset db 21,STOMP db 28,TAIL_WHIP db 35,LEER db 44,RAGE db 51,TAKE_DOWN db 0 Mon157_EvosMoves: ; 3b4dd (e:74dd) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon158_EvosMoves: ; 3b4df (e:74df) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon159_EvosMoves: ; 3b4e1 (e:74e1) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon083_EvosMoves: ; 3b4e3 (e:74e3) ;FARFETCH_D ;Evolutions db 0 ;Learnset db 7,LEER db 15,FURY_ATTACK db 23,SWORDS_DANCE db 31,AGILITY db 39,SLASH db 0 Mon048_EvosMoves: ; 3b4ef (e:74ef) ;VENONAT ;Evolutions db EV_LEVEL,31,VENOMOTH db 0 ;Learnset db 24,POISONPOWDER db 27,LEECH_LIFE db 30,STUN_SPORE db 35,PSYBEAM db 38,SLEEP_POWDER db 43,PSYCHIC_M db 0 Mon149_EvosMoves: ; 3b500 (e:7500) ;DRAGONITE ;Evolutions db 0 ;Learnset db 10,THUNDER_WAVE db 20,AGILITY db 35,SLAM db 45,DRAGON_RAGE db 60,HYPER_BEAM db 0 Mon160_EvosMoves: ; 3b50c (e:750c) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon161_EvosMoves: ; 3b50e (e:750e) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon162_EvosMoves: ; 3b510 (e:7510) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon084_EvosMoves: ; 3b512 (e:7512) ;DODUO ;Evolutions db EV_LEVEL,31,DODRIO db 0 ;Learnset db 20,GROWL db 24,FURY_ATTACK db 30,DRILL_PECK db 36,RAGE db 40,TRI_ATTACK db 44,AGILITY db 0 Mon060_EvosMoves: ; 3b523 (e:7523) ;POLIWAG ;Evolutions db EV_LEVEL,25,POLIWHIRL db 0 ;Learnset db 16,HYPNOSIS db 19,WATER_GUN db 25,DOUBLESLAP db 31,BODY_SLAM db 38,AMNESIA db 45,HYDRO_PUMP db 0 Mon124_EvosMoves: ; 3b534 (e:7534) ;JYNX ;Evolutions db 0 ;Learnset db 18,LICK db 23,DOUBLESLAP db 31,ICE_PUNCH db 39,BODY_SLAM db 47,THRASH db 58,BLIZZARD db 0 Mon146_EvosMoves: ; 3b542 (e:7542) ;MOLTRES ;Evolutions db 0 ;Learnset db 51,LEER db 55,AGILITY db 60,SKY_ATTACK db 0 Mon144_EvosMoves: ; 3b54a (e:754a) ;ARTICUNO ;Evolutions db 0 ;Learnset db 51,BLIZZARD db 55,AGILITY db 60,MIST db 0 Mon145_EvosMoves: ; 3b552 (e:7552) ;ZAPDOS ;Evolutions db 0 ;Learnset db 51,THUNDER db 55,AGILITY db 60,LIGHT_SCREEN db 0 Mon132_EvosMoves: ; 3b55a (e:755a) ;DITTO ;Evolutions db 0 ;Learnset db 0 Mon052_EvosMoves: ; 3b55c (e:755c) ;MEOWTH ;Evolutions db EV_LEVEL,28,PERSIAN db 0 ;Learnset db 12,BITE db 17,PAY_DAY db 24,SCREECH db 33,FURY_SWIPES db 44,SLASH db 0 Mon098_EvosMoves: ; 3b56b (e:756b) ;KRABBY ;Evolutions db EV_LEVEL,28,KINGLER db 0 ;Learnset db 20,VICEGRIP db 25,GUILLOTINE db 30,STOMP db 35,CRABHAMMER db 40,HARDEN db 0 Mon163_EvosMoves: ; 3b57a (e:757a) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon164_EvosMoves: ; 3b57c (e:757c) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon165_EvosMoves: ; 3b57e (e:757e) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon037_EvosMoves: ; 3b580 (e:7580) ;VULPIX ;Evolutions db EV_ITEM,FIRE_STONE,1,NINETALES db 0 ;Learnset db 16,QUICK_ATTACK db 21,ROAR db 28,CONFUSE_RAY db 35,FLAMETHROWER db 42,FIRE_SPIN db 0 Mon038_EvosMoves: ; 3b590 (e:7590) ;NINETALES ;Evolutions db 0 ;Learnset db 0 Mon025_EvosMoves: ; 3b592 (e:7592) ;PIKACHU ;Evolutions db EV_ITEM,THUNDER_STONE ,1,RAICHU db 0 ;Learnset db 9,THUNDER_WAVE db 16,QUICK_ATTACK db 26,SWIFT db 33,AGILITY db 43,THUNDER db 0 Mon026_EvosMoves: ; 3b5a2 (e:75a2) ;RAICHU ;Evolutions db 0 ;Learnset db 0 Mon166_EvosMoves: ; 3b5a4 (e:75a4) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon167_EvosMoves: ; 3b5a6 (e:75a6) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon147_EvosMoves: ; 3b5a8 (e:75a8) ;DRATINI ;Evolutions db EV_LEVEL,30,DRAGONAIR db 0 ;Learnset db 10,THUNDER_WAVE db 20,AGILITY db 30,SLAM db 40,DRAGON_RAGE db 50,HYPER_BEAM db 0 Mon148_EvosMoves: ; 3b5b7 (e:75b7) ;DRAGONAIR ;Evolutions db EV_LEVEL,55,DRAGONITE db 0 ;Learnset db 10,THUNDER_WAVE db 20,AGILITY db 35,SLAM db 45,DRAGON_RAGE db 55,HYPER_BEAM db 0 Mon140_EvosMoves: ; 3b5c6 (e:75c6) ;KABUTO ;Evolutions db EV_LEVEL,40,KABUTOPS db 0 ;Learnset db 34,ABSORB db 39,SLASH db 44,LEER db 49,HYDRO_PUMP db 0 Mon141_EvosMoves: ; 3b5d3 (e:75d3) ;KABUTOPS ;Evolutions db 0 ;Learnset db 34,ABSORB db 39,SLASH db 46,LEER db 53,HYDRO_PUMP db 0 Mon116_EvosMoves: ; 3b5dd (e:75dd) ;HORSEA ;Evolutions db EV_LEVEL,32,SEADRA db 0 ;Learnset db 19,SMOKESCREEN db 24,LEER db 30,WATER_GUN db 37,AGILITY db 45,HYDRO_PUMP db 0 Mon117_EvosMoves: ; 3b5ec (e:75ec) ;SEADRA ;Evolutions db 0 ;Learnset db 19,SMOKESCREEN db 24,LEER db 30,WATER_GUN db 41,AGILITY db 52,HYDRO_PUMP db 0 Mon168_EvosMoves: ; 3b5f8 (e:75f8) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon169_EvosMoves: ; 3b5fa (e:75fa) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon027_EvosMoves: ; 3b5fc (e:75fc) ;SANDSHREW ;Evolutions db EV_LEVEL,22,SANDSLASH db 0 ;Learnset db 10,SAND_ATTACK db 17,SLASH db 24,POISON_STING db 31,SWIFT db 38,FURY_SWIPES db 0 Mon028_EvosMoves: ; 3b60b (e:760b) ;SANDSLASH ;Evolutions db 0 ;Learnset db 10,SAND_ATTACK db 17,SLASH db 27,POISON_STING db 36,SWIFT db 47,FURY_SWIPES db 0 Mon138_EvosMoves: ; 3b617 (e:7617) ;OMANYTE ;Evolutions db EV_LEVEL,40,OMASTAR db 0 ;Learnset db 34,HORN_ATTACK db 39,LEER db 46,SPIKE_CANNON db 53,HYDRO_PUMP db 0 Mon139_EvosMoves: ; 3b624 (e:7624) ;OMASTAR ;Evolutions db 0 ;Learnset db 34,HORN_ATTACK db 39,LEER db 44,SPIKE_CANNON db 49,HYDRO_PUMP db 0 Mon039_EvosMoves: ; 3b62e (e:762e) ;JIGGLYPUFF ;Evolutions db EV_ITEM,MOON_STONE,1,WIGGLYTUFF db 0 ;Learnset db 9,POUND db 14,DISABLE db 19,DEFENSE_CURL db 24,DOUBLESLAP db 29,REST db 34,BODY_SLAM db 39,DOUBLE_EDGE db 0 Mon040_EvosMoves: ; 3b642 (e:7642) ;WIGGLYTUFF ;Evolutions db 0 ;Learnset db 0 Mon133_EvosMoves: ; 3b644 (e:7644) ;EEVEE ;Evolutions db EV_ITEM,FIRE_STONE,1,FLAREON db EV_ITEM,THUNDER_STONE ,1,JOLTEON db EV_ITEM,WATER_STONE ,1,VAPOREON db 0 ;Learnset db 27,QUICK_ATTACK db 31,TAIL_WHIP db 37,BITE db 45,TAKE_DOWN db 0 Mon136_EvosMoves: ; 3b65a (e:765a) ;FLAREON ;Evolutions db 0 ;Learnset db 27,QUICK_ATTACK db 31,EMBER db 37,TAIL_WHIP db 40,BITE db 42,LEER db 44,FIRE_SPIN db 48,RAGE db 54,FLAMETHROWER db 0 Mon135_EvosMoves: ; 3b66c (e:766c) ;JOLTEON ;Evolutions db 0 ;Learnset db 27,QUICK_ATTACK db 31,THUNDERSHOCK db 37,TAIL_WHIP db 40,THUNDER_WAVE db 42,DOUBLE_KICK db 44,AGILITY db 48,PIN_MISSILE db 54,THUNDER db 0 Mon134_EvosMoves: ; 3b67e (e:767e) ;VAPOREON ;Evolutions db 0 ;Learnset db 27,QUICK_ATTACK db 31,WATER_GUN db 37,TAIL_WHIP db 40,BITE db 42,ACID_ARMOR db 44,HAZE db 48,MIST db 54,HYDRO_PUMP db 0 Mon066_EvosMoves: ; 3b690 (e:7690) ;MACHOP ;Evolutions db EV_LEVEL,28,MACHOKE db 0 ;Learnset db 20,LOW_KICK db 25,LEER db 32,FOCUS_ENERGY db 39,SEISMIC_TOSS db 46,SUBMISSION db 0 Mon041_EvosMoves: ; 3b69f (e:769f) ;ZUBAT ;Evolutions db EV_LEVEL,22,GOLBAT db 0 ;Learnset db 10,SUPERSONIC db 15,BITE db 21,CONFUSE_RAY db 28,WING_ATTACK db 36,HAZE db 0 Mon023_EvosMoves: ; 3b6ae (e:76ae) ;EKANS ;Evolutions db EV_LEVEL,22,ARBOK db 0 ;Learnset db 10,POISON_STING db 17,BITE db 24,GLARE db 31,SCREECH db 38,ACID db 0 Mon046_EvosMoves: ; 3b6bd (e:76bd) ;PARAS ;Evolutions db EV_LEVEL,24,PARASECT db 0 ;Learnset db 13,STUN_SPORE db 20,LEECH_LIFE db 27,SPORE db 34,SLASH db 41,GROWTH db 0 Mon061_EvosMoves: ; 3b6cc (e:76cc) ;POLIWHIRL ;Evolutions db EV_ITEM,WATER_STONE ,1,POLIWRATH db 0 ;Learnset db 16,HYPNOSIS db 19,WATER_GUN db 26,DOUBLESLAP db 33,BODY_SLAM db 41,AMNESIA db 49,HYDRO_PUMP db 0 Mon062_EvosMoves: ; 3b6de (e:76de) ;POLIWRATH ;Evolutions db 0 ;Learnset db 16,HYPNOSIS db 19,WATER_GUN db 0 Mon013_EvosMoves: ; 3b6e4 (e:76e4) ;WEEDLE ;Evolutions db EV_LEVEL,7,KAKUNA db 0 ;Learnset db 0 Mon014_EvosMoves: ; 3b6e9 (e:76e9) ;KAKUNA ;Evolutions db EV_LEVEL,10,BEEDRILL db 0 ;Learnset db 0 Mon015_EvosMoves: ; 3b6ee (e:76ee) ;BEEDRILL ;Evolutions db 0 ;Learnset db 12,FURY_ATTACK db 16,FOCUS_ENERGY db 20,TWINEEDLE db 25,RAGE db 30,PIN_MISSILE db 35,AGILITY db 0 Mon170_EvosMoves: ; 3b6fc (e:76fc) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon085_EvosMoves: ; 3b6fe (e:76fe) ;DODRIO ;Evolutions db 0 ;Learnset db 20,GROWL db 24,FURY_ATTACK db 30,DRILL_PECK db 39,RAGE db 45,TRI_ATTACK db 51,AGILITY db 0 Mon057_EvosMoves: ; 3b70c (e:770c) ;PRIMEAPE ;Evolutions db 0 ;Learnset db 15,KARATE_CHOP db 21,FURY_SWIPES db 27,FOCUS_ENERGY db 37,SEISMIC_TOSS db 46,THRASH db 0 Mon051_EvosMoves: ; 3b718 (e:7718) ;DUGTRIO ;Evolutions db 0 ;Learnset db 15,GROWL db 19,DIG db 24,SAND_ATTACK db 35,SLASH db 47,EARTHQUAKE db 0 Mon049_EvosMoves: ; 3b724 (e:7724) ;VENOMOTH ;Evolutions db 0 ;Learnset db 24,POISONPOWDER db 27,LEECH_LIFE db 30,STUN_SPORE db 38,PSYBEAM db 43,SLEEP_POWDER db 50,PSYCHIC_M db 0 Mon087_EvosMoves: ; 3b732 (e:7732) ;DEWGONG ;Evolutions db 0 ;Learnset db 30,GROWL db 35,AURORA_BEAM db 44,REST db 50,TAKE_DOWN db 56,ICE_BEAM db 0 Mon171_EvosMoves: ; 3b73e (e:773e) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon172_EvosMoves: ; 3b740 (e:7740) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon010_EvosMoves: ; 3b742 (e:7742) ;CATERPIE ;Evolutions db EV_LEVEL,7,METAPOD db 0 ;Learnset db 0 Mon011_EvosMoves: ; 3b747 (e:7747) ;METAPOD ;Evolutions db EV_LEVEL,10,BUTTERFREE db 0 ;Learnset db 0 Mon012_EvosMoves: ; 3b74c (e:774c) ;BUTTERFREE ;Evolutions db 0 ;Learnset db 12,CONFUSION db 15,POISONPOWDER db 16,STUN_SPORE db 17,SLEEP_POWDER db 21,SUPERSONIC db 26,WHIRLWIND db 32,PSYBEAM db 0 Mon068_EvosMoves: ; 3b75c (e:775c) ;MACHAMP ;Evolutions db 0 ;Learnset db 20,LOW_KICK db 25,LEER db 36,FOCUS_ENERGY db 44,SEISMIC_TOSS db 52,SUBMISSION db 0 Mon173_EvosMoves: ; 3b768 (e:7768) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon055_EvosMoves: ; 3b76a (e:776a) ;GOLDUCK ;Evolutions db 0 ;Learnset db 28,TAIL_WHIP db 31,DISABLE db 39,CONFUSION db 48,FURY_SWIPES db 59,HYDRO_PUMP db 0 Mon097_EvosMoves: ; 3b776 (e:7776) ;HYPNO ;Evolutions db 0 ;Learnset db 12,DISABLE db 17,CONFUSION db 24,HEADBUTT db 33,POISON_GAS db 37,PSYCHIC_M db 43,MEDITATE db 0 Mon042_EvosMoves: ; 3b784 (e:7784) ;GOLBAT ;Evolutions db 0 ;Learnset db 10,SUPERSONIC db 15,BITE db 21,CONFUSE_RAY db 32,WING_ATTACK db 43,HAZE db 0 Mon150_EvosMoves: ; 3b790 (e:7790) ;MEWTWO ;Evolutions db 0 ;Learnset db 63,BARRIER db 66,PSYCHIC_M db 70,RECOVER db 75,MIST db 81,AMNESIA db 0 Mon143_EvosMoves: ; 3b79c (e:779c) ;SNORLAX ;Evolutions db 0 ;Learnset db 35,BODY_SLAM db 41,HARDEN db 48,DOUBLE_EDGE db 56,HYPER_BEAM db 0 Mon129_EvosMoves: ; 3b7a6 (e:77a6) ;MAGIKARP ;Evolutions db EV_LEVEL,20,GYARADOS db 0 ;Learnset db 15,TACKLE db 0 Mon174_EvosMoves: ; 3b7ad (e:77ad) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon175_EvosMoves: ; 3b7af (e:77af) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon089_EvosMoves: ; 3b7b1 (e:77b1) ;MUK ;Evolutions db 0 ;Learnset db 30,POISON_GAS db 33,MINIMIZE db 37,SLUDGE db 45,HARDEN db 53,SCREECH db 60,ACID_ARMOR db 0 Mon176_EvosMoves: ; 3b7bf (e:77bf) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon099_EvosMoves: ; 3b7c1 (e:77c1) ;KINGLER ;Evolutions db 0 ;Learnset db 20,VICEGRIP db 25,GUILLOTINE db 34,STOMP db 42,CRABHAMMER db 49,HARDEN db 0 Mon091_EvosMoves: ; 3b7cd (e:77cd) ;CLOYSTER ;Evolutions db 0 ;Learnset db 50,SPIKE_CANNON db 0 Mon177_EvosMoves: ; 3b7d1 (e:77d1) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon101_EvosMoves: ; 3b7d3 (e:77d3) ;ELECTRODE ;Evolutions db 0 ;Learnset db 17,SONICBOOM db 22,SELFDESTRUCT db 29,LIGHT_SCREEN db 40,SWIFT db 50,EXPLOSION db 0 Mon036_EvosMoves: ; 3b7df (e:77df) ;CLEFABLE ;Evolutions db 0 ;Learnset db 0 Mon110_EvosMoves: ; 3b7e1 (e:77e1) ;WEEZING ;Evolutions db 0 ;Learnset db 32,SLUDGE db 39,SMOKESCREEN db 43,SELFDESTRUCT db 49,HAZE db 53,EXPLOSION db 0 Mon053_EvosMoves: ; 3b7ed (e:77ed) ;PERSIAN ;Evolutions db 0 ;Learnset db 12,BITE db 17,PAY_DAY db 24,SCREECH db 37,FURY_SWIPES db 51,SLASH db 0 Mon105_EvosMoves: ; 3b7f9 (e:77f9) ;MAROWAK ;Evolutions db 0 ;Learnset db 25,LEER db 33,FOCUS_ENERGY db 41,THRASH db 48,BONEMERANG db 55,RAGE db 0 Mon178_EvosMoves: ; 3b805 (e:7805) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon093_EvosMoves: ; 3b807 (e:7807) ;HAUNTER ;Evolutions db EV_TRADE,1,GENGAR db 0 ;Learnset db 29,HYPNOSIS db 38,DREAM_EATER db 0 Mon063_EvosMoves: ; 3b810 (e:7810) ;ABRA ;Evolutions db EV_LEVEL,16,KADABRA db 0 ;Learnset db 0 Mon065_EvosMoves: ; 3b815 (e:7815) ;ALAKAZAM ;Evolutions db 0 ;Learnset db 16,CONFUSION db 20,DISABLE db 27,PSYBEAM db 31,RECOVER db 38,PSYCHIC_M db 42,REFLECT db 0 Mon017_EvosMoves: ; 3b823 (e:7823) ;PIDGEOTTO ;Evolutions db EV_LEVEL,36,PIDGEOT db 0 ;Learnset db 5,SAND_ATTACK db 12,QUICK_ATTACK db 21,WHIRLWIND db 31,WING_ATTACK db 40,AGILITY db 49,MIRROR_MOVE db 0 Mon018_EvosMoves: ; 3b834 (e:7834) ;PIDGEOT ;Evolutions db 0 ;Learnset db 5,SAND_ATTACK db 12,QUICK_ATTACK db 21,WHIRLWIND db 31,WING_ATTACK db 44,AGILITY db 54,MIRROR_MOVE db 0 Mon121_EvosMoves: ; 3b842 (e:7842) ;STARMIE ;Evolutions db 0 ;Learnset db 0 Mon001_EvosMoves: ; 3b844 (e:7844) ;BULBASAUR ;Evolutions db EV_LEVEL,16,IVYSAUR db 0 ;Learnset db 7,LEECH_SEED db 13,VINE_WHIP db 20,POISONPOWDER db 27,RAZOR_LEAF db 34,GROWTH db 41,SLEEP_POWDER db 48,SOLARBEAM db 0 Mon003_EvosMoves: ; 3b857 (e:7857) ;VENUSAUR ;Evolutions db 0 ;Learnset db 7,LEECH_SEED db 13,VINE_WHIP db 22,POISONPOWDER db 30,RAZOR_LEAF db 43,GROWTH db 55,SLEEP_POWDER db 65,SOLARBEAM db 0 Mon073_EvosMoves: ; 3b867 (e:7867) ;TENTACRUEL ;Evolutions db 0 ;Learnset db 7,SUPERSONIC db 13,WRAP db 18,POISON_STING db 22,WATER_GUN db 27,CONSTRICT db 35,BARRIER db 43,SCREECH db 50,HYDRO_PUMP db 0 Mon179_EvosMoves: ; 3b879 (e:7879) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon118_EvosMoves: ; 3b87b (e:787b) ;GOLDEEN ;Evolutions db EV_LEVEL,33,SEAKING db 0 ;Learnset db 19,SUPERSONIC db 24,HORN_ATTACK db 30,FURY_ATTACK db 37,WATERFALL db 45,HORN_DRILL db 54,AGILITY db 0 Mon119_EvosMoves: ; 3b88c (e:788c) ;SEAKING ;Evolutions db 0 ;Learnset db 19,SUPERSONIC db 24,HORN_ATTACK db 30,FURY_ATTACK db 39,WATERFALL db 48,HORN_DRILL db 54,AGILITY db 0 Mon180_EvosMoves: ; 3b89a (e:789a) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon181_EvosMoves: ; 3b89c (e:789c) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon182_EvosMoves: ; 3b89e (e:789e) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon183_EvosMoves: ; 3b8a0 (e:78a0) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon077_EvosMoves: ; 3b8a2 (e:78a2) ;PONYTA ;Evolutions db EV_LEVEL,40,RAPIDASH db 0 ;Learnset db 30,TAIL_WHIP db 32,STOMP db 35,GROWL db 39,FIRE_SPIN db 43,TAKE_DOWN db 48,AGILITY db 0 Mon078_EvosMoves: ; 3b8b3 (e:78b3) ;RAPIDASH ;Evolutions db 0 ;Learnset db 30,TAIL_WHIP db 32,STOMP db 35,GROWL db 39,FIRE_SPIN db 47,TAKE_DOWN db 55,AGILITY db 0 Mon019_EvosMoves: ; 3b8c1 (e:78c1) ;RATTATA ;Evolutions db EV_LEVEL,20,RATICATE db 0 ;Learnset db 7,QUICK_ATTACK db 14,HYPER_FANG db 23,FOCUS_ENERGY db 34,SUPER_FANG db 0 Mon020_EvosMoves: ; 3b8ce (e:78ce) ;RATICATE ;Evolutions db 0 ;Learnset db 7,QUICK_ATTACK db 14,HYPER_FANG db 27,FOCUS_ENERGY db 41,SUPER_FANG db 0 Mon033_EvosMoves: ; 3b8d8 (e:78d8) ;NIDORINO ;Evolutions db EV_ITEM,MOON_STONE,1,NIDOKING db 0 ;Learnset db 8,HORN_ATTACK db 14,POISON_STING db 23,FOCUS_ENERGY db 32,FURY_ATTACK db 41,HORN_DRILL db 50,DOUBLE_KICK db 0 Mon030_EvosMoves: ; 3b8ea (e:78ea) ;NIDORINA ;Evolutions db EV_ITEM,MOON_STONE,1,NIDOQUEEN db 0 ;Learnset db 8,SCRATCH db 14,POISON_STING db 23,TAIL_WHIP db 32,BITE db 41,FURY_SWIPES db 50,DOUBLE_KICK db 0 Mon074_EvosMoves: ; 3b8fc (e:78fc) ;GEODUDE ;Evolutions db EV_LEVEL,25,GRAVELER db 0 ;Learnset db 11,DEFENSE_CURL db 16,ROCK_THROW db 21,SELFDESTRUCT db 26,HARDEN db 31,EARTHQUAKE db 36,EXPLOSION db 0 Mon137_EvosMoves: ; 3b90d (e:790d) ;PORYGON ;Evolutions db 0 ;Learnset db 23,PSYBEAM db 28,RECOVER db 35,AGILITY db 42,TRI_ATTACK db 0 Mon142_EvosMoves: ; 3b917 (e:7917) ;AERODACTYL ;Evolutions db 0 ;Learnset db 33,SUPERSONIC db 38,BITE db 45,TAKE_DOWN db 54,HYPER_BEAM db 0 Mon184_EvosMoves: ; 3b921 (e:7921) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon081_EvosMoves: ; 3b923 (e:7923) ;MAGNEMITE ;Evolutions db EV_LEVEL,30,MAGNETON db 0 ;Learnset db 21,SONICBOOM db 25,THUNDERSHOCK db 29,SUPERSONIC db 35,THUNDER_WAVE db 41,SWIFT db 47,SCREECH db 0 Mon185_EvosMoves: ; 3b934 (e:7934) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon186_EvosMoves: ; 3b936 (e:7936) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon004_EvosMoves: ; 3b938 (e:7938) ;CHARMANDER ;Evolutions db EV_LEVEL,16,CHARMELEON db 0 ;Learnset db 9,EMBER db 15,LEER db 22,RAGE db 30,SLASH db 38,FLAMETHROWER db 46,FIRE_SPIN db 0 Mon007_EvosMoves: ; 3b949 (e:7949) ;SQUIRTLE ;Evolutions db EV_LEVEL,16,WARTORTLE db 0 ;Learnset db 8,BUBBLE db 15,WATER_GUN db 22,BITE db 28,WITHDRAW db 35,SKULL_BASH db 42,HYDRO_PUMP db 0 Mon005_EvosMoves: ; 3b95a (e:795a) ;CHARMELEON ;Evolutions db EV_LEVEL,36,CHARIZARD db 0 ;Learnset db 9,EMBER db 15,LEER db 24,RAGE db 33,SLASH db 42,FLAMETHROWER db 56,FIRE_SPIN db 0 Mon008_EvosMoves: ; 3b96b (e:796b) ;WARTORTLE ;Evolutions db EV_LEVEL,36,BLASTOISE db 0 ;Learnset db 8,BUBBLE db 15,WATER_GUN db 24,BITE db 31,WITHDRAW db 39,SKULL_BASH db 47,HYDRO_PUMP db 0 Mon006_EvosMoves: ; 3b97c (e:797c) ;CHARIZARD ;Evolutions db 0 ;Learnset db 9,EMBER db 15,LEER db 24,RAGE db 36,SLASH db 46,FLAMETHROWER db 55,FIRE_SPIN db 0 Mon187_EvosMoves: ; 3b98a (e:798a) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon188_EvosMoves: ; 3b98c (e:798c) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon189_EvosMoves: ; 3b98e (e:798e) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon190_EvosMoves: ; 3b990 (e:7990) ;MISSINGNO ;Evolutions db 0 ;Learnset db 0 Mon043_EvosMoves: ; 3b992 (e:7992) ;ODDISH ;Evolutions db EV_LEVEL,21,GLOOM db 0 ;Learnset db 15,POISONPOWDER db 17,STUN_SPORE db 19,SLEEP_POWDER db 24,ACID db 33,PETAL_DANCE db 46,SOLARBEAM db 0 Mon044_EvosMoves: ; 3b9a3 (e:79a3) ;GLOOM ;Evolutions db EV_ITEM,LEAF_STONE ,1,VILEPLUME db 0 ;Learnset db 15,POISONPOWDER db 17,STUN_SPORE db 19,SLEEP_POWDER db 28,ACID db 38,PETAL_DANCE db 52,SOLARBEAM db 0 Mon045_EvosMoves: ; 3b9b5 (e:79b5) ;VILEPLUME ;Evolutions db 0 ;Learnset db 15,POISONPOWDER db 17,STUN_SPORE db 19,SLEEP_POWDER db 0 Mon069_EvosMoves: ; 3b9bd (e:79bd) ;BELLSPROUT ;Evolutions db EV_LEVEL,21,WEEPINBELL db 0 ;Learnset db 13,WRAP db 15,POISONPOWDER db 18,SLEEP_POWDER db 21,STUN_SPORE db 26,ACID db 33,RAZOR_LEAF db 42,SLAM db 0 Mon070_EvosMoves: ; 3b9d0 (e:79d0) ;WEEPINBELL ;Evolutions db EV_ITEM,LEAF_STONE ,1,VICTREEBEL db 0 ;Learnset db 13,WRAP db 15,POISONPOWDER db 18,SLEEP_POWDER db 23,STUN_SPORE db 29,ACID db 38,RAZOR_LEAF db 49,SLAM db 0 Mon071_EvosMoves: ; 3b9e4 (e:79e4) ;VICTREEBEL ;Evolutions db 0 ;Learnset db 13,WRAP db 15,POISONPOWDER db 18,SLEEP_POWDER db 0 Func_3b9ec: ; 3b9ec (e:79ec) ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld de, W_PLAYERMONCURHP ; $d015 ld hl, W_PLAYERMONMAXHP ; $d023 ld a, [W_PLAYERMOVENUM] ; $cfd2 jr z, .asm_3ba03 ld de, W_ENEMYMONCURHP ; $cfe6 ld hl, W_ENEMYMONMAXHP ; $cff4 ld a, [W_ENEMYMOVENUM] ; $cfcc .asm_3ba03 ld b, a ld a, [de] cp [hl] inc de inc hl ld a, [de] sbc [hl] jp z, Func_3ba97 ld a, b cp $9c jr nz, .asm_3ba37 push hl push de push af ld c, $32 call DelayFrames ld hl, W_PLAYERMONSTATUS ; $d018 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3ba25 ld hl, W_ENEMYMONSTATUS ; $cfe9 .asm_3ba25 ld a, [hl] and a ld [hl], $2 ld hl, UnnamedText_3baa2 ; $7aa2 jr z, .asm_3ba31 ld hl, UnnamedText_3baa7 ; $7aa7 .asm_3ba31 call PrintText pop af pop de pop hl .asm_3ba37 ld a, [hld] ld [wHPBarMaxHP], a ld c, a ld a, [hl] ld [wHPBarMaxHP+1], a ld b, a jr z, .asm_3ba47 srl b rr c .asm_3ba47 ld a, [de] ld [wHPBarOldHP], a add c ld [de], a ld [wHPBarNewHP], a dec de ld a, [de] ld [wHPBarOldHP+1], a adc b ld [de], a ld [wHPBarNewHP+1], a inc hl inc de ld a, [de] dec de sub [hl] dec hl ld a, [de] sbc [hl] jr c, .asm_3ba6f ld a, [hli] ld [de], a ld [wHPBarNewHP+1], a inc de ld a, [hl] ld [de], a ld [wHPBarNewHP], a .asm_3ba6f ld hl, Func_3fba8 ; $7ba8 call BankswitchEtoF ld a, [H_WHOSETURN] ; $FF00+$f3 and a FuncCoord 10, 9 ; $c45e ld hl, Coord ld a, $1 jr z, .asm_3ba83 FuncCoord 2, 2 ; $c3ca ld hl, Coord xor a .asm_3ba83 ld [wListMenuID], a ; $cf94 ld a, $48 call Predef ; indirect jump to UpdateHPBar (fa1d (3:7a1d)) ld hl, Func_3cd5a ; $4d5a call BankswitchEtoF ld hl, UnnamedText_3baac ; $7aac jp PrintText Func_3ba97: ; 3ba97 (e:7a97) ld c, $32 call DelayFrames ld hl, Func_3fb53 jp BankswitchEtoF UnnamedText_3baa2: ; 3baa2 (e:7aa2) TX_FAR _UnnamedText_3baa2 db "@" UnnamedText_3baa7: ; 3baa7 (e:7aa7) TX_FAR _UnnamedText_3baa7 db "@" UnnamedText_3baac: ; 3baac (e:7aac) TX_FAR _UnnamedText_3baac db "@" Func_3bab1: ; 3bab1 (e:7ab1) ld hl, W_PLAYERMONID ld de, $cfe5 ld bc, W_ENEMYBATTSTATUS3 ; $d069 ld a, [W_ENEMYBATTSTATUS1] ; $d067 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr nz, .asm_3bad1 ld hl, $cfe5 ld de, W_PLAYERMONID ld bc, W_PLAYERBATTSTATUS3 ; $d064 ld [wPlayerMoveListIndex], a ; $cc2e ld a, [W_PLAYERBATTSTATUS1] ; $d062 .asm_3bad1 bit 6, a jp nz, Func_3bb8c push hl push de push bc ld hl, W_PLAYERBATTSTATUS2 ; $d063 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3bae4 ld hl, W_ENEMYBATTSTATUS2 ; $d068 .asm_3bae4 bit 4, [hl] push af ld hl, Func_79747 ld b, BANK(Func_79747) call nz, Bankswitch ld a, [W_OPTIONS] ; $d355 add a ld hl, Func_3fba8 ; $7ba8 ld b, BANK(Func_3fba8) jr nc, .asm_3baff ld hl, AnimationTransformMon ld b, BANK(AnimationTransformMon) .asm_3baff call Bankswitch ld hl, Func_79771 ld b, BANK(Func_79771) pop af call nz, Bankswitch pop bc ld a, [bc] set 3, a ld [bc], a pop de pop hl push hl ld a, [hl] ld [de], a ld bc, $5 add hl, bc inc de inc de inc de inc de inc de inc bc inc bc call CopyData ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3bb32 ld a, [de] ld [$cceb], a inc de ld a, [de] ld [$ccec], a dec de .asm_3bb32 ld a, [hli] ld [de], a inc de ld a, [hli] ld [de], a inc de inc hl inc hl inc hl inc de inc de inc de ld bc, $8 call CopyData ld bc, $ffef add hl, bc ld b, $4 .asm_3bb4a ld a, [hli] and a jr z, .asm_3bb57 ld a, $5 ld [de], a inc de dec b jr nz, .asm_3bb4a jr .asm_3bb5d .asm_3bb57 xor a ld [de], a inc de dec b jr nz, .asm_3bb57 .asm_3bb5d pop hl ld a, [hl] ld [$d11e], a call GetMonName ld hl, $cd26 ld de, $cd12 call Func_3bb7d ld hl, wEnemyMonStatMods ; $cd2e ld de, wPlayerMonStatMods ; $cd1a call Func_3bb7d ld hl, UnnamedText_3bb92 ; $7b92 jp PrintText Func_3bb7d: ; 3bb7d (e:7b7d) ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3bb86 push hl ld h, d ld l, e pop de .asm_3bb86 ld bc, $8 jp CopyData Func_3bb8c: ; 3bb8c (e:7b8c) ld hl, Func_3fb53 ; $7b53 jp BankswitchEtoF UnnamedText_3bb92: ; 3bb92 (e:7b92) TX_FAR _UnnamedText_3bb92 db "@" Func_3bb97: ; 3bb97 (e:7b97) ld hl, W_PLAYERBATTSTATUS3 ; $d064 ld de, W_PLAYERMOVEEFFECT ; $cfd3 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3bba8 ld hl, W_ENEMYBATTSTATUS3 ; $d069 ld de, W_ENEMYMOVEEFFECT ; $cfcd .asm_3bba8 ld a, [de] cp $40 jr nz, .asm_3bbb8 bit 1, [hl] jr nz, .asm_3bbcc set 1, [hl] ld hl, UnnamedText_3bbd7 ; $7bd7 jr .asm_3bbc1 .asm_3bbb8 bit 2, [hl] jr nz, .asm_3bbcc set 2, [hl] ld hl, UnnamedText_3bbdc ; $7bdc .asm_3bbc1 push hl ld hl, Func_3fba8 ; $7ba8 call BankswitchEtoF pop hl jp PrintText .asm_3bbcc ld c, $32 call DelayFrames ld hl, Func_3fb53 ; $7b53 jp BankswitchEtoF UnnamedText_3bbd7: ; 3bbd7 (e:7bd7) TX_FAR _UnnamedText_3bbd7 db "@" UnnamedText_3bbdc: ; 3bbdc (e:7bdc) TX_FAR _UnnamedText_3bbdc db "@" BankswitchEtoF: ; 3bbe1 (e:7be1) ld b, $f jp Bankswitch SECTION "bankF",ROMX,BANK[$F] ; These are move effects (second value from the Moves table in bank $E). EffectsArray1: ; 3c000 (f:4000) db $18,$19,$1C,$2E,$2F,$31,$38,$39,$40,$41,$42,$43,$4F,$52,$54,$55,$FF EffectsArray2: ; 3c011 (f:4011) ; moves that do damage but not through normal calculations ; e.g., Super Fang, Psywave db $28,$29,$FF EffectsArray3: ; 3c014 (f:4014) ; non-damaging, stat‐affecting or status‐causing moves? ; e.g., Meditate, Bide, Hypnosis db $01,$0A,$0B,$0C,$0D,$0E,$0F,$12,$13,$14,$15,$16,$17,$1A,$20,$32,$33,$34,$35,$36,$37,$3A,$3B,$3C,$3D,$3E,$3F,$FF EffectsArray4: ; 3c030 (f:4030) db $03,$07,$08,$10,$1D,$1E,$2C,$30,$4D,$51,$FF EffectsArray5: ; 3c03b (f:403b) db $03,$07,$08,$10,$11,$1D,$1E,$27,$28,$29,$2B,$2C,$2D,$30 ; fallthru EffectsArray5B: ; 3c049 (f:4049) ; moves that prevent the player from switching moves? db $1B,$2A,$FF Func_3c04c: ; 3c04c (f:404c) call Func_3ec92 ld a, $1 ld [$d125], a call DisplayTextBoxID FuncCoord 1, 5 ; $c405 ld hl, Coord ld bc, $307 call ClearScreenArea call DisableLCD call LoadFontTilePatterns call Func_3ee58 ld hl, $9800 ld bc, $400 .asm_3c06f ld a, $7f ld [hli], a dec bc ld a, b or c jr nz, .asm_3c06f ld hl, wTileMap ld de, $9800 ld b, $12 .asm_3c07f ld c, $14 .asm_3c081 ld a, [hli] ld [de], a inc e dec c jr nz, .asm_3c081 ld a, $c add e ld e, a jr nc, .asm_3c08e inc d .asm_3c08e dec b jr nz, .asm_3c07f call EnableLCD ld a, $90 ld [$FF00+$b0], a ld [rWY], a ; $FF00+$4a xor a ld [$FF00+$d7], a ld [$FF00+$af], a dec a ld [$cfcb], a call Delay3 xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld b, $70 ld c, $90 ld a, c ld [$FF00+$ae], a call DelayFrame ld a, $e4 ld [rBGP], a ; $FF00+$47 ld [rOBP0], a ; $FF00+$48 ld [rOBP1], a ; $FF00+$49 .asm_3c0bb ld h, b ld l, $40 call Func_3c110 inc b inc b ld h, $0 ld l, $60 call Func_3c110 call Func_3c0ff ld a, c ld [$FF00+$ae], a dec c dec c jr nz, .asm_3c0bb ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld a, $31 ld [$FF00+$e1], a FuncCoord 1, 5 ; $c405 ld hl, Coord ld a, $1 call Predef ; indirect jump to Func_3f0c6 (3f0c6 (f:70c6)) xor a ld [$FF00+$b0], a ld [rWY], a ; $FF00+$4a inc a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba call Delay3 ld b, $1 call GoPAL_SET call ResetLCD_OAM ld hl, Func_58d99 ld b, BANK(Func_58d99) jp Bankswitch Func_3c0ff: ; 3c0ff (f:40ff) push bc ld hl, $c301 ld c, $15 ld de, $4 .asm_3c108 dec [hl] dec [hl] add hl, de dec c jr nz, .asm_3c108 pop bc ret Func_3c110: ; 3c110 (f:4110) ld a, [$FF00+$44] cp l jr nz, Func_3c110 ld a, h ld [rSCX], a ; $FF00+$43 .asm_3c118 ld a, [$FF00+$44] cp h jr z, .asm_3c118 ret Func_3c11e: ; 3c11e (f:411e) xor a ld [W_PLAYERMONSALIVEFLAGS], a ld [$ccf5], a ld [$cd6a], a inc a ld [$d11d], a ld hl, W_ENEMYMON1HP ; $d8a5 ld bc, $2b ld d, $3 .asm_3c134 inc d ld a, [hli] or [hl] jr nz, .asm_3c13c add hl, bc jr .asm_3c134 .asm_3c13c ld a, d ld [$cc3e], a ld a, [W_ISINBATTLE] ; $d057 dec a call nz, Func_3c92a ld c, $28 call DelayFrames call SaveScreenTilesToBuffer1 .asm_3c14f call AnyPokemonAliveCheck ld a, d and a jp z, HandlePlayerBlackOut call LoadScreenTilesFromBuffer1 ld a, [W_BATTLETYPE] ; $d05a and a jp z, Func_3c1ad .asm_3c161 call InitBattleMenu ret c ld a, [$cd6a] and a jr z, .asm_3c161 ld a, [W_NUMSAFARIBALLS] ; $da47 and a jr nz, .asm_3c17a call LoadScreenTilesFromBuffer1 ld hl, UnnamedText_3c1a8 ; $41a8 jp PrintText .asm_3c17a ld hl, Func_4277 ld b, BANK(Func_4277) call Bankswitch ld a, [$cffb] add a ld b, a jp c, asm_3c202 ld a, [$cce9] and a jr z, .asm_3c194 srl b srl b .asm_3c194 ld a, [$cce8] and a jr z, .asm_3c1a0 sla b jr nc, .asm_3c1a0 ld b, $ff .asm_3c1a0 call GenRandom cp b jr nc, .asm_3c14f jr asm_3c202 UnnamedText_3c1a8: ; 3c1a8 (f:41a8) TX_FAR _UnnamedText_3c1a8 db "@" Func_3c1ad: ; 3c1ad (f:41ad) xor a ld [wWhichPokemon], a ; $cf92 .asm_3c1b1 call Func_3ca97 jr nz, .asm_3c1bc ld hl, wWhichPokemon ; $cf92 inc [hl] jr .asm_3c1b1 .asm_3c1bc ld a, [wWhichPokemon] ; $cf92 ld [wPlayerMonNumber], a ; $cc2f inc a ld hl, W_NUMINPARTY ; $d163 ld c, a ld b, $0 add hl, bc ld a, [hl] ld [$cf91], a ld [$cfd9], a call LoadScreenTilesFromBuffer1 FuncCoord 1, 5 ; $c405 ld hl, Coord ld a, $9 call Func_3c8df call SaveScreenTilesToBuffer1 ld a, [wWhichPokemon] ; $cf92 ld c, a ld b, $1 push bc ld hl, W_PLAYERMONSALIVEFLAGS ld a, $10 call Predef ; indirect jump to HandleBitArray (f666 (3:7666)) ld hl, $ccf5 pop bc ld a, $10 call Predef ; indirect jump to HandleBitArray (f666 (3:7666)) call Func_3cba6 call LoadScreenTilesFromBuffer1 call Func_3cc91 jr MainInBattleLoop asm_3c202: ; 3c202 (f:4202) call LoadScreenTilesFromBuffer1 ld a, [W_ISLINKBATTLE] ; $d12b cp $4 ld hl, UnnamedText_3c229 ; $4229 jr nz, .asm_3c216 xor a ld [$cf0b], a ld hl, UnnamedText_3c22e ; $422e .asm_3c216 call PrintText ld a, $97 call PlaySoundWaitForCurrent xor a ld [H_WHOSETURN], a ; $FF00+$f3 ld hl, AnimationSlideEnemyMonOut ld b, BANK(AnimationSlideEnemyMonOut) jp Bankswitch UnnamedText_3c229: ; 3c229 (f:4229) TX_FAR _UnnamedText_3c229 db "@" UnnamedText_3c22e: ; 3c22e (f:422e) TX_FAR _UnnamedText_3c22e db "@" MainInBattleLoop: ; 3c233 (f:4233) call ReadPlayerMonCurHPAndStatus ld hl, W_PLAYERMONCURHP ld a, [hli] or [hl] jp z, HandlePlayerMonFainted ; test if current player mon is fainted ld hl, $cfe6 ld a, [hli] or [hl] jp z, Func_3c525 call SaveScreenTilesToBuffer1 xor a ld [$d11d], a ld a, [$d063] and $60 jr nz, .asm_3c2a6 ; 0x3c252 $52 ld hl, $d067 res 3, [hl] ld hl, $d062 res 3, [hl] ld a, [hl] and $12 jr nz, .asm_3c2a6 ; 0x3c261 $43 call InitBattleMenu ; show battle menu ret c ld a, [$d078] and a ret nz ld a, [$d018] and $27 jr nz, .asm_3c2a6 ; 0x3c271 $33 ld a, [$d062] and $21 jr nz, .asm_3c2a6 ; 0x3c278 $2c ld a, [$d067] bit 5, a jr z, .asm_3c288 ; 0x3c27f $7 ld a, $ff ld [$ccdc], a jr .asm_3c2a6 ; 0x3c286 $1e .asm_3c288 ld a, [$cd6a] and a jr nz, .asm_3c2a6 ; 0x3c28c $18 ld [$ccdb], a inc a ld [$d07c], a xor a ld [$cc35], a call MoveSelectionMenu push af call LoadScreenTilesFromBuffer1 call Func_3cd5a pop af jr nz, MainInBattleLoop .asm_3c2a6 call SelectEnemyMove ld a, [W_ISLINKBATTLE] cp $4 jr nz, .noLinkBattle ld a, [$cc3e] cp $f jp z, asm_3c202 cp $e jr z, .noLinkBattle cp $d jr z, .noLinkBattle sub $4 jr c, .noLinkBattle ld a, [$d062] bit 5, a jr z, .asm_3c2dd ; 0x3c2c9 $12 ld a, [$cc2e] ld hl, W_PLAYERMONMOVES ld c, a ld b, $0 add hl, bc ld a, [hl] cp $76 jr nz, .asm_3c2dd ; 0x3c2d8 $3 ld [wPlayerSelectedMove], a .asm_3c2dd ld hl, Func_3a74b ld b, BANK(Func_3a74b) call Bankswitch .noLinkBattle ld a, [wPlayerSelectedMove] cp QUICK_ATTACK jr nz, .playerDidNotUseQuickAttack ld a, [wEnemySelectedMove] cp QUICK_ATTACK jr z, .compareSpeed ; both used Quick Attack jp .playerMovesFirst ; player used Quick Attack .playerDidNotUseQuickAttack ld a, [wEnemySelectedMove] cp QUICK_ATTACK jr z, .enemyMovesFirst ld a, [wPlayerSelectedMove] cp COUNTER jr nz, .playerDidNotUseCounter ld a, [wEnemySelectedMove] cp COUNTER jr z, .compareSpeed ; both used Counter jr .enemyMovesFirst ; player used Counter .playerDidNotUseCounter ld a, [wEnemySelectedMove] cp COUNTER jr z, .playerMovesFirst .compareSpeed ld de, W_PLAYERMONSPEED ; player speed value ld hl, W_ENEMYMONSPEED ; enemy speed value ld c, $2 call StringCmp ; compare speed values jr z, .speedEqual jr nc, .playerMovesFirst jr .enemyMovesFirst .speedEqual ld a, [$ff00+$aa] cp $2 jr z, .invertOutcome call GenRandomInBattle cp $80 jr c, .playerMovesFirst jr .enemyMovesFirst .invertOutcome call GenRandomInBattle cp $80 jr c, .enemyMovesFirst jr .playerMovesFirst .enemyMovesFirst ld a, $1 ld [H_WHOSETURN], a ld hl, TrainerAI ld b, BANK(TrainerAI) call Bankswitch jr c, .AIActionUsedEnemyFirst call Func_3e6bc ; execute enemy move ld a, [$d078] and a ret nz ld a, b and a jp z, HandlePlayerMonFainted .AIActionUsedEnemyFirst call HandlePoisonBurnLeechSeed jp z, Func_3c525 call Func_3cd5a call Func_3d65e ; execute player move ld a, [$d078] and a ret nz ld a, b and a jp z, Func_3c525 call HandlePoisonBurnLeechSeed jp z, HandlePlayerMonFainted call Func_3cd5a call Func_3c50f jp MainInBattleLoop .playerMovesFirst call Func_3d65e ; execute player move ld a, [$d078] and a ret nz ld a, b and a jp z, Func_3c525 call HandlePoisonBurnLeechSeed jp z, HandlePlayerMonFainted call Func_3cd5a ld a, $1 ld [H_WHOSETURN], a ld hl, TrainerAI ld b, BANK(TrainerAI) call Bankswitch jr c, .AIActionUsedPlayerFirst call Func_3e6bc ; execute enemy move ld a, [$d078] and a ret nz ld a, b and a jp z, HandlePlayerMonFainted .AIActionUsedPlayerFirst call HandlePoisonBurnLeechSeed jp z, Func_3c525 call Func_3cd5a call Func_3c50f jp MainInBattleLoop HandlePoisonBurnLeechSeed: ; 3c3bd (f:43bd) ld hl, W_PLAYERMONCURHP ; $d015 ld de, W_PLAYERMONSTATUS ; $d018 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .playersTurn ld hl, W_ENEMYMONCURHP ; $cfe6 ld de, W_ENEMYMONSTATUS ; $cfe9 .playersTurn ld a, [de] and BRN | PSN jr z, .notBurnedOrPoisoned push hl ld hl, HurtByPoisonText ld a, [de] and BRN jr z, .poisoned ld hl, HurtByBurnText .poisoned call PrintText xor a ld [$cc5b], a ld a,BURN_PSN_ANIM call PlayMoveAnimation ; play burn/poison animation pop hl call HandlePoisonBurnLeechSeed_DecreaseOwnHP .notBurnedOrPoisoned ld de, W_PLAYERBATTSTATUS2 ; $d063 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .playersTurn2 ld de, W_ENEMYBATTSTATUS2 ; $d068 .playersTurn2 ld a, [de] add a jr nc, .notLeechSeeded push hl ld a, [H_WHOSETURN] ; $FF00+$f3 push af xor $1 ld [H_WHOSETURN], a ; $FF00+$f3 xor a ld [$cc5b], a ld a,ABSORB call PlayMoveAnimation ; play leech seed animation (from opposing mon) pop af ld [H_WHOSETURN], a ; $FF00+$f3 pop hl call HandlePoisonBurnLeechSeed_DecreaseOwnHP call HandlePoisonBurnLeechSeed_IncreaseEnemyHP push hl ld hl, HurtByLeechSeedText call PrintText pop hl .notLeechSeeded ld a, [hli] or [hl] ret nz ; test if fainted call Func_3cd5a ld c, $14 call DelayFrames xor a ret HurtByPoisonText: ; 3c42e (f:442e) TX_FAR _HurtByPoisonText db "@" HurtByBurnText: ; 3c433 (f:4433) TX_FAR _HurtByBurnText db "@" HurtByLeechSeedText: ; 3c438 (f:4438) TX_FAR _HurtByLeechSeedText db "@" ; decreases the mon's current HP by 1/16 of the Max HP (multiplied by number of toxic ticks if active) ; note that the toxic ticks are considered even if the damage is not poison (hence the Leech Seed glitch) ; hl: HP pointer ; bc (out): total damage HandlePoisonBurnLeechSeed_DecreaseOwnHP: ; 3c43d (f:443d) push hl push hl ld bc, $e ; skip to max HP add hl, bc ld a, [hli] ; load max HP ld [wHPBarMaxHP+1], a ld b, a ld a, [hl] ld [wHPBarMaxHP], a ld c, a srl b rr c srl b rr c srl c srl c ; c = max HP/16 (assumption: HP < 1024) ld a, c and a jr nz, .nonZeroDamage inc c ; damage is at least 1 .nonZeroDamage ld hl, W_PLAYERBATTSTATUS3 ; $d064 ld de, W_PLAYERTOXICCOUNTER ; $d06c ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .playersTurn ld hl, W_ENEMYBATTSTATUS3 ; $d069 ld de, W_ENEMYTOXICCOUNTER ; $d071 .playersTurn bit 0, [hl] jr z, .noToxic ld a, [de] ; increment toxic counter inc a ld [de], a ld hl, $0000 .toxicTicksLoop add hl, bc dec a jr nz, .toxicTicksLoop ld b, h ; bc = damage * toxic counter ld c, l .noToxic pop hl inc hl ld a, [hl] ; subtract total damage from current HP ld [wHPBarOldHP], a sub c ld [hld], a ld [wHPBarNewHP], a ld a, [hl] ld [wHPBarOldHP+1], a sbc b ld [hl], a ld [wHPBarNewHP+1], a jr nc, .noOverkill xor a ; overkill: zero HP ld [hli], a ld [hl], a ld [wHPBarNewHP], a ld [wHPBarNewHP+1], a .noOverkill call UpdateCurMonHPBar pop hl ret ; adds bc to enemy HP HandlePoisonBurnLeechSeed_IncreaseEnemyHP: ; 3c4a3 (f:44a3) push hl ld hl, W_ENEMYMONMAXHP ; $cff4 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .playersTurn ld hl, W_PLAYERMONMAXHP ; $d023 .playersTurn ld a, [hli] ld [wHPBarMaxHP+1], a ld a, [hl] ld [wHPBarMaxHP], a ld de, $fff2 add hl, de ; skip back fomr max hp to current hp ld a, [hl] ld [wHPBarOldHP], a ; add bc to current HP add c ld [hld], a ld [wHPBarNewHP], a ld a, [hl] ld [wHPBarOldHP+1], a adc b ld [hli], a ld [wHPBarNewHP+1], a ld a, [wHPBarMaxHP] ld c, a ld a, [hld] sub c ld a, [wHPBarMaxHP+1] ld b, a ld a, [hl] sbc b jr c, .noOverfullHeal ld a, b ; overfull heal, set HP to max HP ld [hli], a ld [wHPBarNewHP+1], a ld a, c ld [hl], a ld [wHPBarNewHP], a .noOverfullHeal ld a, [H_WHOSETURN] ; $FF00+$f3 xor $1 ld [H_WHOSETURN], a ; $FF00+$f3 call UpdateCurMonHPBar ld a, [H_WHOSETURN] ; $FF00+$f3 xor $1 ld [H_WHOSETURN], a ; $FF00+$f3 pop hl ret UpdateCurMonHPBar: ; 3c4f6 (f:44f6) FuncCoord 10, 9 ; $c45e ld hl, Coord ; tile pointer to player HP bar ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld a, $1 jr z, .playersTurn FuncCoord 2, 2 ; $c3ca ld hl, Coord ; tile pointer to enemy HP bar xor a .playersTurn push bc ld [wListMenuID], a ; $cf94 ld a, $48 call Predef ; indirect jump to UpdateHPBar (fa1d (3:7a1d)) pop bc ret Func_3c50f: ; 3c50f (f:450f) ld a, [$d06a] and a jr nz, .asm_3c51a ld hl, W_PLAYERBATTSTATUS1 ; $d062 res 5, [hl] .asm_3c51a ld a, [$d06f] and a ret nz ld hl, W_ENEMYBATTSTATUS1 ; $d067 res 5, [hl] ret Func_3c525: ; 3c525 (f:4525) xor a ld [$ccf0], a call FaintEnemyPokemon call AnyPokemonAliveCheck ld a, d and a jp z, HandlePlayerBlackOut ld hl, W_PLAYERMONCURHP ; $d015 ld a, [hli] or [hl] call nz, Func_3cd60 ld a, [W_ISINBATTLE] ; $d057 dec a ret z call Func_3c64f jp z, TrainerBattleVictory ld hl, W_PLAYERMONCURHP ; $d015 ld a, [hli] or [hl] jr nz, .asm_3c555 call Func_3c79b ret c call Func_3c7d8 .asm_3c555 ld a, $1 ld [$cd6a], a call Func_3c664 jp z, asm_3c202 xor a ld [$cd6a], a jp MainInBattleLoop FaintEnemyPokemon ; 0x3c567 call ReadPlayerMonCurHPAndStatus ld a, [W_ISINBATTLE] ; $d057 dec a jr z, .wild ld a, [W_ENEMYMONNUMBER] ; $cfe8 ld hl, W_ENEMYMON1HP ld bc, $2c ; mon struct len call AddNTimes xor a ld [hli], a ld [hl], a .wild ld hl, W_PLAYERBATTSTATUS1 ; $d062 res 2, [hl] xor a ld [W_NUMHITS], a ; $d074 ld hl, $d065 ; enemy statuses ld [hli], a ld [hli], a ld [hli], a ld [hli], a ld [hl], a ld [W_ENEMYDISABLEDMOVE], a ; $d072 ld [$ccef], a ld [$ccf3], a ld hl, $ccf1 ld [hli], a ld [hl], a FuncCoord 12, 5 ; $c410 ld hl, Coord FuncCoord 12, 6 ; $c424 ld de, Coord call Func_3c893 ld hl, wTileMap ld bc, $40b call ClearScreenArea ld a, [W_ISINBATTLE] ; $d057 dec a jr z, .wild_win xor a ld [$c0f1], a ld [$c0f2], a ld a, $9e ; SFX_FALL? call PlaySoundWaitForCurrent .sfxwait ld a, [$c02a] cp $9e jr z, .sfxwait ld a, $95 ; SFX_DROP call PlaySound call WaitForSoundToFinish jr .sfxplayed .wild_win call Func_3c643 ld a, MUSIC_DEFEATED_WILD_MON call Func_3c6ee .sfxplayed ld hl, W_PLAYERMONCURHP ; $d015 ld a, [hli] or [hl] jr nz, .playermonnotfaint ld a, [$ccf0] and a jr nz, .playermonnotfaint call Func_3c741 .playermonnotfaint call AnyPokemonAliveCheck ld a, d and a ret z ld hl, EnemyMonFainted ; $463e call PrintText call Func_3ee94 call SaveScreenTilesToBuffer1 xor a ld [$cf0b], a ld b, EXP__ALL call IsItemInBag push af jr z, .no_exp_all ld hl, $d002 ld b, $7 .exp_all_loop srl [hl] inc hl dec b jr nz, .exp_all_loop .no_exp_all xor a ld [$cc5b], a ld hl, Func_5524f ld b, BANK(Func_5524f) call Bankswitch pop af ret z ld a, $1 ld [$cc5b], a ld a, [W_NUMINPARTY] ; $d163 ld b, $0 .asm_3c62c scf rl b dec a jr nz, .asm_3c62c ld a, b ld [W_PLAYERMONSALIVEFLAGS], a ld hl, Func_5524f ld b, BANK(Func_5524f) jp Bankswitch EnemyMonFainted: ; 0x3c63e TX_FAR _EnemyMonFainted db "@" Func_3c643: ; 3c643 (f:4643) xor a ld [$d083], a ld [$c02a], a inc a ld [$ccf6], a ret Func_3c64f: ; 3c64f (f:464f) ld a, [wEnemyPartyCount] ; $d89c ld b, a xor a ld hl, W_ENEMYMON1HP ; $d8a5 ld de, $2c .asm_3c65a or [hl] inc hl or [hl] dec hl add hl, de dec b jr nz, .asm_3c65a and a ret Func_3c664: ; 3c664 (f:4664) ld hl, $cf1e ld e, $30 call Func_3ce90 ld hl, DrawEnemyPokeballs ld b, BANK(DrawEnemyPokeballs) call Bankswitch ld a, [W_ISLINKBATTLE] ; $d12b cp $4 jr nz, .asm_3c687 call Func_3d605 ld a, [$cc3e] cp $f ret z call LoadScreenTilesFromBuffer1 .asm_3c687 call EnemySendOut xor a ld [W_ENEMYMOVENUM], a ; $cfcc ld [$cd6a], a ld [$ccd5], a inc a ret TrainerBattleVictory: ; 3c696 (f:4696) call Func_3c643 ld b, MUSIC_DEFEATED_GYM_LEADER ld a, [W_GYMLEADERNO] ; $d05c and a jr nz, .gymleader ld b, MUSIC_DEFEATED_TRAINER .gymleader ld a, [W_TRAINERCLASS] ; $d031 cp SONY3 ; final battle against rival jr nz, .notrival ld b, MUSIC_DEFEATED_GYM_LEADER ld hl, W_FLAGS_D733 set 1, [hl] .notrival ld a, [W_ISLINKBATTLE] ; $d12b cp $4 ld a, b call nz, Func_3c6ee ld hl, TrainerDefeatedText ; $46e9 call PrintText ld a, [W_ISLINKBATTLE] ; $d12b cp $4 ret z call ScrollTrainerPicAfterBattle ld c, $28 call DelayFrames call Func_3381 ld hl, MoneyForWinningText ; $46e4 call PrintText ld de, wPlayerMoney + 2 ; $d349 ld hl, $d07b ld c, $3 ld a, $b jp Predef ; indirect jump to Func_f81d (f81d (3:781d)) MoneyForWinningText: ; 3c6e4 (f:46e4) TX_FAR _MoneyForWinningText db "@" TrainerDefeatedText: ; 3c6e9 (f:46e9) TX_FAR _TrainerDefeatedText db "@" Func_3c6ee: ; 3c6ee (f:46ee) push af ld a, $ff ld [$c0ee], a call PlaySoundWaitForCurrent ld c, BANK(Music_DefeatedTrainer) pop af call PlayMusic jp Delay3 HandlePlayerMonFainted: ; 3c700 (f:4700) ld a, $1 ld [$ccf0], a call Func_3c741 call AnyPokemonAliveCheck ; test if any more mons are alive ld a, d and a jp z, HandlePlayerBlackOut ld hl, W_ENEMYMONCURHP ; $cfe6 ld a, [hli] or [hl] jr nz, .enemyMonNotFainted call FaintEnemyPokemon ld a, [W_ISINBATTLE] ; $d057 dec a ret z ; if wild encounter, battle is over call Func_3c64f jp z, TrainerBattleVictory .enemyMonNotFainted call Func_3c79b ret c call Func_3c7d8 jp nz, MainInBattleLoop ld a, $1 ld [$cd6a], a call Func_3c664 jp z, asm_3c202 xor a ld [$cd6a], a jp MainInBattleLoop Func_3c741: ; 3c741 (f:4741) ld a, [wPlayerMonNumber] ; $cc2f ld c, a ld hl, W_PLAYERMONSALIVEFLAGS ; clear fainted mon's alive flag ld b, $0 ld a, $10 call Predef ; indirect jump to HandleBitArray (f666 (3:7666)) ld hl, W_ENEMYBATTSTATUS1 ; $d067 res 2, [hl] ; reset "attacking multiple times" flag ld a, [$d083] bit 7, a ; skip sound flag (red bar (?)) jr z, .skipWaitForSound ld a, $ff ld [$d083], a call WaitForSoundToFinish .skipWaitForSound ld hl, $cd05 ld [hli], a ld [hl], a ld [W_PLAYERMONSTATUS], a ; $d018 call ReadPlayerMonCurHPAndStatus FuncCoord 9, 7 ; $c435 ld hl, Coord ld bc, $50b call ClearScreenArea FuncCoord 1, 10 ; $c469 ld hl, Coord FuncCoord 1, 11 ; $c47d ld de, Coord call Func_3c893 ld a, $1 ld [$cf0b], a ld a, [$ccf0] and a ret z ld a, [W_PLAYERMONID] call PlayCry ld hl, PlayerMonFaintedText jp PrintText PlayerMonFaintedText: ; 3c796 (f:4796) TX_FAR _PlayerMonFaintedText db "@" Func_3c79b: ; 3c79b (f:479b) call Func_3ee94 call SaveScreenTilesToBuffer1 ld a, [W_ISINBATTLE] ; $d057 and a dec a ret nz ld hl, UnnamedText_3c7d3 ; $47d3 call PrintText .asm_3c7ad FuncCoord 13, 9 ; $c461 ld hl, Coord ld bc, $a0e ld a, $14 ld [$d125], a call DisplayTextBoxID ld a, [$d12e] cp $2 jr z, .asm_3c7c4 and a ret .asm_3c7c4 ld a, [wCurrentMenuItem] ; $cc26 and a jr z, .asm_3c7ad ld hl, W_PARTYMON1_SPEED ; $d193 ld de, W_ENEMYMONSPEED jp Func_3cab9 UnnamedText_3c7d3: ; 3c7d3 (f:47d3) TX_FAR _UnnamedText_3c7d3 db "@" Func_3c7d8: ; 3c7d8 (f:47d8) ld a, $2 ld [$d07d], a call DisplayPartyMenu .asm_3c7e0 jr nc, .asm_3c7e7 .asm_3c7e2 call GoBackToPartyMenu jr .asm_3c7e0 .asm_3c7e7 call Func_3ca97 jr z, .asm_3c7e2 ld a, [W_ISLINKBATTLE] ; $d12b cp $4 jr nz, .asm_3c7fa inc a ld [$cd6a], a call Func_3d605 .asm_3c7fa xor a ld [$cd6a], a call CleanLCD_OAM ld a, [wWhichPokemon] ; $cf92 ld [wPlayerMonNumber], a ; $cc2f ld c, a ld hl, W_PLAYERMONSALIVEFLAGS ld b, $1 push bc ld a, $10 call Predef ; indirect jump to HandleBitArray (f666 (3:7666)) pop bc ld hl, $ccf5 ld a, $10 call Predef ; indirect jump to HandleBitArray (f666 (3:7666)) call Func_3cba6 call GBPalWhiteOut call Func_3ee5b call LoadScreenTilesFromBuffer1 call GoPAL_SET_CF1C call GBPalNormal call Func_3cc91 ld hl, W_ENEMYMONCURHP ; $cfe6 ld a, [hli] or [hl] ret ; called when player is out of usable mons. ; prints approriate lose message, sets carry flag if player blacked out (special case for initial rival fight) HandlePlayerBlackOut: ; 3c837 (f:4837) ld a, [W_ISLINKBATTLE] ; $d12b cp $4 jr z, .notSony1Battle ld a, [W_CUROPPONENT] ; $d059 cp $c8 + SONY1 jr nz, .notSony1Battle ld hl, wTileMap ; sony 1 battle ld bc, $815 call ClearScreenArea call ScrollTrainerPicAfterBattle ld c, $28 call DelayFrames ld hl, Sony1WinText call PrintText ld a, [W_CURMAP] cp OAKS_LAB ret z ; starter battle in oak's lab: don't black out .notSony1Battle ld b, $0 call GoPAL_SET ld hl, PlayerBlackedOutText2 ld a, [W_ISLINKBATTLE] ; $d12b cp $4 jr nz, .noLinkBattle ld hl, LinkBattleLostText .noLinkBattle call PrintText ld a, [$d732] res 5, a ld [$d732], a call ClearScreen scf ret Sony1WinText: ; 3c884 (f:4884) TX_FAR _Sony1WinText db "@" PlayerBlackedOutText2: ; 3c889 (f:4889) TX_FAR _PlayerBlackedOutText2 db "@" LinkBattleLostText: ; 3c88e (f:488e) TX_FAR _LinkBattleLostText db "@" Func_3c893: ; 3c893 (f:4893) ld a, [$d730] push af set 6, a ld [$d730], a ld b, $7 .asm_3c89e push bc push de push hl ld b, $6 .asm_3c8a3 push bc push hl push de ld bc, $7 call CopyData pop de pop hl ld bc, $ffec add hl, bc push hl ld h, d ld l, e add hl, bc ld d, h ld e, l pop hl pop bc dec b jr nz, .asm_3c8a3 ld bc, $14 add hl, bc ld de, SevenSpacesText ; $48d7 call PlaceString ld c, $2 call DelayFrames pop hl pop de pop bc dec b jr nz, .asm_3c89e pop af ld [$d730], a ret SevenSpacesText: ; 3c8d7 (f:48d7) db " @" Func_3c8df: ; 3c8df (f:48df) ld [H_DOWNARROWBLINKCNT1], a ; $FF00+$8b ld c, a .asm_3c8e2 push bc push hl ld b, $7 .asm_3c8e6 push hl ld a, [H_DOWNARROWBLINKCNT1] ; $FF00+$8b ld c, a .asm_3c8ea ld a, [H_DOWNARROWBLINKCNT1] ; $FF00+$8b cp $8 jr z, .asm_3c8f5 ld a, [hld] ld [hli], a inc hl jr .asm_3c8f8 .asm_3c8f5 ld a, [hli] ld [hld], a dec hl .asm_3c8f8 dec c jr nz, .asm_3c8ea pop hl ld de, $14 add hl, de dec b jr nz, .asm_3c8e6 ld c, $2 call DelayFrames pop hl pop bc dec c jr nz, .asm_3c8e2 ret ; XXX this needs cleaning up. it's what runs when a juggler switches pokemon EnemySendOut: ; 3c90e (f:490e) ld hl,W_PLAYERMONSALIVEFLAGS xor a ld [hl],a ld a,[$CC2F] ld c,a ld b,1 push bc ld a,$10 call Predef ld hl,$CCF5 xor a ld [hl],a pop bc ld a,$10 call Predef Func_3c92a: ; 3c92a (f:492a) xor a ld hl,$D065 ld [hli],a ld [hli],a ld [hli],a ld [hli],a ld [hl],a ld [$D072],a ld [$CCEF],a ld [$CCF3],a ld hl,$CCF1 ld [hli],a ld [hl],a dec a ld [wAICount],a ld hl,W_PLAYERBATTSTATUS1 res 5,[hl] FuncCoord 18, 0 ; $c3b2 ld hl,Coord ld a,8 call Func_3c8df call Func_3ee94 call SaveScreenTilesToBuffer1 ld a,[$D12B] cp 4 jr nz,.next ld a,[$CC3E] sub 4 ld [wWhichPokemon],a jr .next3 .next ld b,$FF .next2 inc b ld a,[$CFE8] cp b jr z,.next2 ld hl,$D8A4 ld a,b ld [wWhichPokemon],a push bc ld bc,$2C call AddNTimes pop bc inc hl ld a,[hli] ld c,a ld a,[hl] or c jr z,.next2 .next3 ld a,[wWhichPokemon] ld hl,$D8C5 ld bc,$2C call AddNTimes ld a,[hl] ld [$D127],a ld a,[wWhichPokemon] inc a ld hl,$D89C ld c,a ld b,0 add hl,bc ld a,[hl] ld [W_ENEMYMONID],a ld [$CF91],a call Func_3eb01 ld hl,$CFE6 ld a,[hli] ld [$CCE3],a ld a,[hl] ld [$CCE4],a ld a,1 ld [$CC26],a ld a,[$D11D] dec a jr z,.next4 ld a,[W_NUMINPARTY] dec a jr z,.next4 ld a,[$D12B] cp 4 jr z,.next4 ld a,[$D355] bit 6,a jr nz,.next4 ld hl, TrainerAboutToUseText call PrintText FuncCoord 0, 7 ; $c42c ld hl,Coord ld bc,$0801 ld a,$14 ld [$D125],a call DisplayTextBoxID ld a,[$CC26] and a jr nz,.next4 ld a,2 ld [$D07D],a call DisplayPartyMenu .next9 ld a,1 ld [$CC26],a jr c,.next7 ld hl,$CC2F ld a,[wWhichPokemon] cp [hl] jr nz,.next6 ld hl,UnnamedText_3d1f5 ; $51f5 call PrintText .next8 call GoBackToPartyMenu jr .next9 .next6 call Func_3ca97 jr z,.next8 xor a ld [$CC26],a .next7 call GBPalWhiteOut call Func_3ee5b call LoadScreenTilesFromBuffer1 .next4 call CleanLCD_OAM ld hl,wTileMap ld bc,$040B call ClearScreenArea ld b,1 call GoPAL_SET call GBPalNormal ld hl,TrainerSentOutText call PrintText ld a,[W_ENEMYMONID] ld [$CF91],a ld [$D0B5],a call GetMonHeader ld de,$9000 call LoadMonFrontSprite ld a,$CF ld [$FFE1],a FuncCoord 15, 6 ; $c427 ld hl,Coord ld a,2 call Predef ld a,[W_ENEMYMONID] call PlayCry call Func_3cdec ld a,[$CC26] and a ret nz xor a ld [W_PLAYERMONSALIVEFLAGS],a ld [$CCF5],a call SaveScreenTilesToBuffer1 jp Func_3d1ba TrainerAboutToUseText: ; 3ca79 (f:4a79) TX_FAR _TrainerAboutToUseText db "@" TrainerSentOutText: ; 3ca7e (f:4a7e) TX_FAR _TrainerSentOutText db "@" ; tests if the player has any pokemon that are not fainted ; sets d = 0 if all fainted, d != 0 if some mons are still alive AnyPokemonAliveCheck: ; 3ca83 (f:4a83) ld a, [W_NUMINPARTY] ; $d163 ld e, a xor a ld hl, W_PARTYMON1_HP ; $d16c ld bc, W_PARTYMON2DATA - W_PARTYMON1DATA - 1 .partyMonsLoop or [hl] inc hl or [hl] add hl, bc dec e jr nz, .partyMonsLoop ld d, a ret Func_3ca97: ; 3ca97 (f:4a97) ld a, [wWhichPokemon] ; $cf92 ld hl, W_PARTYMON1_HP ; $d16c ld bc, $2c call AddNTimes ld a, [hli] or [hl] ret nz ld a, [$d11d] and a jr nz, .asm_3cab2 ld hl, UnnamedText_3cab4 ; $4ab4 call PrintText .asm_3cab2 xor a ret UnnamedText_3cab4: ; 3cab4 (f:4ab4) TX_FAR _UnnamedText_3cab4 db "@" Func_3cab9: ; 3cab9 (f:4ab9) call Func_3d83a jp z, .asm_3cb5c ld a, [W_BATTLETYPE] ; $d05a cp $2 jp z, .asm_3cb5c ld a, [W_ISLINKBATTLE] ; $d12b cp $4 jp z, .asm_3cb5c ld a, [W_ISINBATTLE] ; $d057 dec a jr nz, .asm_3cb4c ld a, [$d120] inc a ld [$d120], a ld a, [hli] ld [$FF00+$97], a ld a, [hl] ld [$FF00+$98], a ld a, [de] ld [$FF00+$8d], a inc de ld a, [de] ld [$FF00+$8e], a call LoadScreenTilesFromBuffer1 ld de, $ff97 ld hl, $ff8d ld c, $2 call StringCmp jr nc, .asm_3cb5c xor a ld [H_NUMTOPRINT], a ; $FF00+$96 (aliases: H_MULTIPLICAND) ld a, $20 ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) call Multiply ld a, [$FF00+$97] ld [H_DIVIDEND], a ; $FF00+$95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) ld a, [$FF00+$98] ld [H_NUMTOPRINT], a ; $FF00+$96 (aliases: H_MULTIPLICAND) ld a, [$FF00+$8d] ld b, a ld a, [$FF00+$8e] srl b rr a srl b rr a and a jr z, .asm_3cb5c ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) ld b, $2 call Divide ld a, [$FF00+$97] and a jr nz, .asm_3cb5c ld a, [$d120] ld c, a .asm_3cb2b dec c jr z, .asm_3cb39 ld b, $1e ld a, [$FF00+$98] add b ld [$FF00+$98], a jr c, .asm_3cb5c jr .asm_3cb2b .asm_3cb39 call GenRandomInBattle ld b, a ld a, [$FF00+$98] cp b jr nc, .asm_3cb5c ld a, $1 ld [$cd6a], a ld hl, UnnamedText_3cb97 ; $4b97 jr .asm_3cb4f .asm_3cb4c ld hl, UnnamedText_3cb9c ; $4b9c .asm_3cb4f call PrintText ld a, $1 ld [$d11f], a call SaveScreenTilesToBuffer1 and a ret .asm_3cb5c ld a, [W_ISLINKBATTLE] ; $d12b cp $4 ld a, $2 jr nz, .asm_3cb81 call SaveScreenTilesToBuffer1 xor a ld [$cd6a], a ld a, $f ld [wPlayerMoveListIndex], a ; $cc2e call Func_3d605 call LoadScreenTilesFromBuffer1 ld a, [$cc3e] cp $f ld a, $2 jr z, .asm_3cb81 dec a .asm_3cb81 ld [$cf0b], a ld a, $97 call PlaySoundWaitForCurrent ld hl, UnnamedText_3cba1 ; $4ba1 call PrintText call WaitForSoundToFinish call SaveScreenTilesToBuffer1 scf ret UnnamedText_3cb97: ; 3cb97 (f:4b97) TX_FAR _UnnamedText_3cb97 db "@" UnnamedText_3cb9c: ; 3cb9c (f:4b9c) TX_FAR _UnnamedText_3cb9c db "@" UnnamedText_3cba1: ; 3cba1 (f:4ba1) TX_FAR _UnnamedText_3cba1 db "@" Func_3cba6: ; 3cba6 (f:4ba6) ld a, [wWhichPokemon] ; $cf92 ld bc, $2c ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA) call AddNTimes ld de, W_PLAYERMONID ld bc, $c call CopyData ld bc, $f add hl, bc ld de, W_PLAYERMONIVS ld bc, $2 call CopyData ld de, W_PLAYERMONPP ; $d02d ld bc, $4 call CopyData ld de, W_PLAYERMONLEVEL ; $d022 ld bc, $b call CopyData ld a, [$cfd9] ld [$d0b5], a call GetMonHeader ld hl, W_PARTYMON1NAME ; $d2b5 ld a, [wPlayerMonNumber] ; $cc2f call SkipFixedLengthTextEntries ld de, W_PLAYERMONNAME ld bc, $b call CopyData ld hl, W_PLAYERMONLEVEL ; $d022 ld de, $cd0f ld bc, $b call CopyData call Func_3ed1a call Func_3ee19 ld a, $7 ld b, $8 ld hl, wPlayerMonAttackMod ; $cd1a .asm_3cc0e ld [hli], a dec b jr nz, .asm_3cc0e ret Func_3cc13: ; 3cc13 (f:4c13) ld a, [wWhichPokemon] ; $cf92 ld bc, $2c ld hl, wEnemyMons ; $d8a4 call AddNTimes ld de, $cfe5 ld bc, $c call CopyData ld bc, $f add hl, bc ld de, $cff1 ld bc, $2 call CopyData ld de, W_ENEMYMONPP ; $cffe ld bc, $4 call CopyData ld de, W_ENEMYMONLEVEL ; $cff3 ld bc, $b call CopyData ld a, [$cfe5] ld [$d0b5], a call GetMonHeader ld hl, $d9ee ld a, [wWhichPokemon] ; $cf92 call SkipFixedLengthTextEntries ld de, W_ENEMYMONNAME ld bc, $b call CopyData ld hl, W_ENEMYMONLEVEL ; $cff3 ld de, $cd23 ld bc, $b call CopyData call Func_3ed1e ld hl, W_MONHBASESTATS ld de, $d002 ld b, $5 .asm_3cc79 ld a, [hli] ld [de], a inc de dec b jr nz, .asm_3cc79 ld a, $7 ld b, $8 ld hl, wEnemyMonStatMods ; $cd2e .asm_3cc86 ld [hli], a dec b jr nz, .asm_3cc86 ld a, [wWhichPokemon] ; $cf92 ld [W_ENEMYMONNUMBER], a ; $cfe8 ret Func_3cc91: ; 3cc91 (f:4c91) ld hl, Func_58e59 ld b, BANK(Func_58e59) call Bankswitch ld hl, W_ENEMYMONCURHP ; $cfe6 ld a, [hli] or [hl] jp z, Func_3cca4 call Func_3cdec Func_3cca4: ; 3cca4 (f:4ca4) call Func_3cd60 ld a, $4 call Predef ; indirect jump to LoadMonBackSprite (3f103 (f:7103)) xor a ld [$FF00+$e1], a ld hl, $cc2d ld [hli], a ld [hl], a ld [$cc5b], a ld [$d05b], a ld [W_PLAYERMOVENUM], a ; $cfd2 ld hl, $ccf1 ld [hli], a ld [hl], a ld hl, $d060 ld [hli], a ld [hli], a ld [hli], a ld [hli], a ld [hl], a ld [W_PLAYERDISABLEDMOVE], a ; $d06d ld [$ccee], a ld [$ccf7], a ld b, $1 call GoPAL_SET ld hl, W_ENEMYBATTSTATUS1 ; $d067 res 5, [hl] ld a, $1 ld [H_WHOSETURN], a ; $FF00+$f3 ld a, POOF_ANIM call PlayMoveAnimation FuncCoord 4, 11 ; $c480 ld hl, Coord ld a, $2 call Predef ; indirect jump to Func_3f073 (3f073 (f:7073)) ld a, [$cf91] call PlayCry call Func_3ee94 jp SaveScreenTilesToBuffer1 Func_3ccfa: ; 3ccfa (f:4cfa) FuncCoord 1, 5 ; $c405 ld hl, Coord ld bc, $707 call ClearScreenArea FuncCoord 3, 7 ; $c42f ld hl, Coord ld bc, $505 xor a ld [$cd6c], a ld [H_DOWNARROWBLINKCNT1], a ; $FF00+$8b ld a, $5 call Predef ; indirect jump to Func_79aba (79aba (1e:5aba)) ld c, $4 call DelayFrames call Func_3cd3a FuncCoord 4, 9 ; $c458 ld hl, Coord ld bc, $303 ld a, $1 ld [$cd6c], a xor a ld [H_DOWNARROWBLINKCNT1], a ; $FF00+$8b ld a, $5 call Predef ; indirect jump to Func_79aba (79aba (1e:5aba)) call Delay3 call Func_3cd3a ld a, $4c FuncCoord 5, 11 ; $c481 ld [Coord], a Func_3cd3a: ; 3cd3a (f:4d3a) FuncCoord 1, 5 ; $c405 ld hl, Coord ld bc, $707 jp ClearScreenArea ; reads player's current mon's HP into W_PLAYERMONCURHP ReadPlayerMonCurHPAndStatus: ; 3cd43 (f:4d43) ld a, [wPlayerMonNumber] ; $cc2f ld hl, W_PARTYMON1_HP ; $d16c ld bc, W_PARTYMON2DATA - W_PARTYMON1DATA call AddNTimes ld d, h ld e, l ld hl, W_PLAYERMONCURHP ; $d015 ld bc, $4 ; 2 bytes HP, 1 byte unknown (unused?), 1 byte status jp CopyData Func_3cd5a: ; 3cd5a (f:4d5a) call Func_3cd60 jp Func_3cdec Func_3cd60: ; 3cd60 (f:4d60) xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba FuncCoord 9, 7 ; $c435 ld hl, Coord ld bc, $50b call ClearScreenArea ld hl, Func_3a902 ld b, BANK(Func_3a902) call Bankswitch FuncCoord 18, 9 ; $c466 ld hl, Coord ld [hl], $73 ld de, W_PLAYERMONNAME FuncCoord 10, 7 ; $c436 ld hl, Coord call Func_3ce9c call PlaceString ld hl, W_PLAYERMONID ld de, $cf98 ld bc, $c call CopyData ld hl, W_PLAYERMONLEVEL ; $d022 ld de, $cfb9 ld bc, $b call CopyData FuncCoord 14, 8 ; $c44e ld hl, Coord push hl inc hl ld de, $cf9c call PrintStatusConditionNotFainted pop hl jr nz, .asm_3cdae call PrintLevel .asm_3cdae ld a, [$cf98] ld [$cf91], a FuncCoord 10, 9 ; $c45e ld hl, Coord ld a, $5f call Predef ; indirect jump to Func_128ef (128ef (4:68ef)) ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld hl, $cf1d call Func_3ce90 ld hl, W_PLAYERMONCURHP ; $d015 ld a, [hli] or [hl] jr z, .asm_3cdd9 ld a, [$ccf6] and a ret nz ld a, [$cf1d] cp $2 jr z, .asm_3cde6 .asm_3cdd9 ld hl, $d083 bit 7, [hl] ld [hl], $0 ret z xor a ld [$c02a], a ret .asm_3cde6 ld hl, $d083 set 7, [hl] ret Func_3cdec: ; 3cdec (f:4dec) xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld hl, wTileMap ld bc, $40c call ClearScreenArea ld hl, Func_3a919 ld b, BANK(Func_3a919) call Bankswitch ld de, W_ENEMYMONNAME FuncCoord 1, 0 ; $c3a1 ld hl, Coord call Func_3ce9c call PlaceString FuncCoord 4, 1 ; $c3b8 ld hl, Coord push hl inc hl ld de, W_ENEMYMONSTATUS ; $cfe9 call PrintStatusConditionNotFainted pop hl jr nz, .asm_3ce23 ld a, [W_ENEMYMONLEVEL] ; $cff3 ld [$cfb9], a call PrintLevel .asm_3ce23 ld hl, W_ENEMYMONCURHP ; $cfe6 ld a, [hli] ld [$FF00+$97], a ld a, [hld] ld [$FF00+$98], a or [hl] jr nz, .asm_3ce36 ld c, a ld e, a ld d, $6 jp Func_3ce7f .asm_3ce36 xor a ld [H_NUMTOPRINT], a ; $FF00+$96 (aliases: H_MULTIPLICAND) ld a, $30 ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) call Multiply ld hl, W_ENEMYMONMAXHP ; $cff4 ld a, [hli] ld b, a ld a, [hl] ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) ld a, b and a jr z, .asm_3ce6a ld a, [H_REMAINDER] ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) srl b rr a srl b rr a ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) ld a, [$FF00+$97] ld b, a srl b ld a, [$FF00+$98] rr a srl b rr a ld [$FF00+$98], a ld a, b ld [$FF00+$97], a .asm_3ce6a ld a, [$FF00+$97] ld [H_DIVIDEND], a ; $FF00+$95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) ld a, [$FF00+$98] ld [H_NUMTOPRINT], a ; $FF00+$96 (aliases: H_MULTIPLICAND) ld a, $2 ld b, a call Divide ld a, [$FF00+$98] ld e, a ld a, $6 ld d, a ld c, a Func_3ce7f: ; 3ce7f (f:4e7f) xor a ld [wListMenuID], a ; $cf94 FuncCoord 2, 2 ; $c3ca ld hl, Coord call DrawHPBar ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld hl, $cf1e Func_3ce90: ; 3ce90 (f:4e90) ld b, [hl] call Func_3df9 ld a, [hl] cp b ret z ld b, $1 jp GoPAL_SET Func_3ce9c: ; 3ce9c (f:4e9c) push de inc hl inc hl ld b, $2 .asm_3cea1 inc de ld a, [de] cp $50 jr z, .asm_3ceb1 inc de ld a, [de] cp $50 jr z, .asm_3ceb1 dec hl dec b jr nz, .asm_3cea1 .asm_3ceb1 pop de ret InitBattleMenu: ; 3ceb3 (f:4eb3) call LoadScreenTilesFromBuffer1 ; restore saved screen ld a, [W_BATTLETYPE] ; $d05a and a jr nz, .nonstandardbattle call Func_3cd5a ; redraw names and HP bars? call Func_3ee94 call SaveScreenTilesToBuffer1 .nonstandardbattle ld a, [W_BATTLETYPE] ; $d05a cp $2 ; safari ld a, $b ; safari menu id jr nz, .menuselected ld a, $1b ; regular menu id .menuselected ld [$d125], a call DisplayTextBoxID ld a, [W_BATTLETYPE] ; $d05a dec a jp nz, RegularBattleMenu ; regular battle ; the following happens for the old man tutorial ld hl, W_PLAYERNAME ; $d158 ld de, W_GRASSRATE ; $d887 ld bc, $b call CopyData ; temporarily save the player name in unused space, ; which is supposed to get overwritten when entering a ; map with wild pokémon. due to an oversight, the data ; may not get overwritten (cinnabar) and the infamous ; missingno. glitch can show up. ld hl, OldManName ; $4f12 ld de, W_PLAYERNAME ; $d158 ld bc, $b call CopyData ; the following simulates the keystrokes by drawing menus on screen FuncCoord 9, 14 ; $c4c1 ld hl, Coord ld [hl], "▶" ld c, $50 call DelayFrames ld [hl], $7f FuncCoord 9, 16 ; $c4e9 ld hl, Coord ld [hl], "▶" ld c, $32 call DelayFrames ld [hl], $ec ld a, $2 jp Func_3cfe8 OldManName: ; 3cf12 (f:4f12) db "OLD MAN@" RegularBattleMenu: ; 3cf1a (f:4f1a) ld a, [$cc2d] ld [wCurrentMenuItem], a ; $cc26 ld [wLastMenuItem], a ; $cc2a sub $2 jr c, .leftcolumn ld [wCurrentMenuItem], a ; $cc26 ld [wLastMenuItem], a ; $cc2a jr .rightcolumn .leftcolumn ld a, [W_BATTLETYPE] ; $d05a cp $2 ld a, " " jr z, .safaribattle FuncCoord 15, 14 ; $c4c7 ld [Coord], a FuncCoord 15, 16 ; $c4ef ld [Coord], a ld b, $9 jr .notsafari .safaribattle FuncCoord 13, 14 ; $c4c5 ld [Coord], a FuncCoord 13, 16 ; $c4ed ld [Coord], a FuncCoord 7, 14 ; $c4bf ld hl, Coord ld de, W_NUMSAFARIBALLS ; $da47 ld bc, $102 call PrintNumber ld b, $1 .notsafari ld hl, wTopMenuItemY ; $cc24 ld a, $e ld [hli], a ld a, b ld [hli], a inc hl inc hl ld a, $1 ld [hli], a ld [hl], $11 call HandleMenuInput bit 4, a jr nz, .rightcolumn jr .selection .rightcolumn ld a, [W_BATTLETYPE] ; $d05a cp $2 ld a, " " jr z, .safarirightcolumn FuncCoord 9, 14 ; $c4c1 ld [Coord], a FuncCoord 9, 16 ; $c4e9 ld [Coord], a ld b, $f jr .notsafarirightcolumn .safarirightcolumn FuncCoord 1, 14 ; $c4b9 ld [Coord], a FuncCoord 1, 16 ; $c4e1 ld [Coord], a FuncCoord 7, 14 ; $c4bf ld hl, Coord ld de, W_NUMSAFARIBALLS ; $da47 ld bc, $102 call PrintNumber ld b, $d .notsafarirightcolumn ld hl, wTopMenuItemY ; $cc24 ld a, $e ld [hli], a ld a, b ld [hli], a inc hl inc hl ld a, $1 ld [hli], a ld a, $21 ld [hli], a call HandleMenuInput bit 5, a jr nz, .leftcolumn ld a, [wCurrentMenuItem] ; $cc26 add $2 ; if we're in the right column, the actual id is +2 ld [wCurrentMenuItem], a ; $cc26 .selection call PlaceUnfilledArrowMenuCursor ld a, [W_BATTLETYPE] ; $d05a cp $2 ld a, [wCurrentMenuItem] ; $cc26 ld [$cc2d], a jr z, .asm_3cfd0 cp $1 jr nz, .asm_3cfcb inc a jr .asm_3cfd0 .asm_3cfcb cp $2 ; what jr nz, .asm_3cfd0 dec a .asm_3cfd0 and a jr nz, Func_3cfe8 ; first option was selected... ld a, [W_BATTLETYPE] ; $d05a cp $2 jr z, .safari1 xor a ld [$d120], a jp LoadScreenTilesFromBuffer1 ; restore saved screen and return?? .safari1 ; safari first option?? ld a, $8 ld [$cf91], a jr asm_3d05f Func_3cfe8: ; 3cfe8 (f:4fe8) cp $2 jp nz, Func_3d0ca ld a, [W_ISLINKBATTLE] ; $d12b cp $4 jr nz, .asm_3cffd ld hl, ItemsCantBeUsedHere call PrintText jp InitBattleMenu .asm_3cffd ; bag? call SaveScreenTilesToBuffer2 ; copy bg? ld a, [W_BATTLETYPE] ; $d05a cp $2 jr nz, asm_3d00e ld a, $15 ld [$cf91], a jr asm_3d05f asm_3d00e: ; 3d00e (f:500e) call LoadScreenTilesFromBuffer1 ld a, [W_BATTLETYPE] ; $d05a and a jr nz, .asm_3d01a call Func_3cd5a .asm_3d01a ld a, [W_BATTLETYPE] ; $d05a dec a jr nz, Func_3d031 ld hl, OldManItemList ld a, l ld [$cf8b], a ld a, h ld [$cf8c], a jr Func_3d03c OldManItemList: ; 3d02d (f:502d) db $01, POKE_BALL, 50, $ff Func_3d031 ld hl, wNumBagItems ; $d31d ld a, l ld [$cf8b], a ld a, h ld [$cf8c], a Func_3d03c xor a ld [$cf93], a ld a, $3 ld [wListMenuID], a ; $cf94 ld a, [$cc2c] ld [wCurrentMenuItem], a ; $cc26 call DisplayListMenuID ld a, [wCurrentMenuItem] ; $cc26 ld [$cc2c], a ld a, $0 ld [$cc37], a ld [$cc35], a jp c, InitBattleMenu asm_3d05f: ; 3d05f (f:505f) ld a, [$cf91] ld [$d11e], a call GetItemName call CopyStringToCF4B ; copy name xor a ld [$d152], a call UseItem call Func_3ee5b call CleanLCD_OAM xor a ld [wCurrentMenuItem], a ; $cc26 ld a, [W_BATTLETYPE] ; $d05a cp $2 jr z, .asm_3d09c ld a, [$cd6a] and a jp z, asm_3d00e ld a, [W_PLAYERBATTSTATUS1] ; $d062 bit 5, a jr z, .asm_3d09c ld hl, $d06a dec [hl] jr nz, .asm_3d09c ld hl, W_PLAYERBATTSTATUS1 ; $d062 res 5, [hl] .asm_3d09c ld a, [$d11c] and a jr nz, .asm_3d0b7 ld a, [W_BATTLETYPE] ; $d05a cp $2 jr z, .asm_3d0b2 call LoadScreenTilesFromBuffer1 call Func_3cd5a ; redraw name and hp bar? call Delay3 .asm_3d0b2 call GBPalNormal and a ret .asm_3d0b7 call GBPalNormal xor a ld [$d11c], a ld a, $2 ld [$cf0b], a scf ret ItemsCantBeUsedHere: ; 3d0c5 (f:50c5) TX_FAR ItemsCantBeUsedHere_ db "@" Func_3d0ca: ; 3d0ca (f:50ca) dec a jp nz, Func_3d1fa call SaveScreenTilesToBuffer2 ld a, [W_BATTLETYPE] ; $d05a cp $2 jr nz, Func_3d0e0 ld a, $16 ld [$cf91], a jp asm_3d05f Func_3d0e0: ; 3d0e0 (f:50e0) call LoadScreenTilesFromBuffer1 xor a ld [$d07d], a ld [$cc35], a call DisplayPartyMenu asm_3d0ed: ; 3d0ed (f:50ed) jp nc, Func_3d119 asm_3d0f0: ; 3d0f0 (f:50f0) call CleanLCD_OAM call GBPalWhiteOut call Func_3ee5b call LoadScreenTilesFromBuffer2 call GoPAL_SET_CF1C call GBPalNormal jp InitBattleMenu Func_3d105: ; 3d105 (f:5105) FuncCoord 11, 11 ; $c487 ld hl, Coord ld bc, $81 ld a, $7f call FillMemory xor a ld [$d07d], a call GoBackToPartyMenu jr asm_3d0ed Func_3d119: ; 3d119 (f:5119) ld a, $c ld [$d125], a call DisplayTextBoxID ld hl, wTopMenuItemY ; $cc24 ld a, $c ld [hli], a ld [hli], a xor a ld [hli], a inc hl ld a, $2 ld [hli], a ld a, $3 ld [hli], a xor a ld [hl], a call HandleMenuInput bit 1, a jr nz, Func_3d105 call PlaceUnfilledArrowMenuCursor ld a, [wCurrentMenuItem] ; $cc26 cp $2 jr z, asm_3d0f0 and a jr z, .asm_3d18a xor a ld [$cc49], a ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA) call CleanLCD_OAM ld a, $36 call Predef ; indirect jump to StatusScreen (12953 (4:6953)) ld a, $37 call Predef ; indirect jump to StatusScreen2 (12b57 (4:6b57)) ld a, [W_ENEMYBATTSTATUS2] ; $d068 bit 4, a ld hl, AnimationSubstitute jr nz, .asm_3d182 ld a, [$ccf3] and a ld hl, AnimationMinimizeMon jr nz, .asm_3d182 ld a, [$cfe5] ld [$cf91], a ld [$d0b5], a call GetMonHeader ld de, $9000 call LoadMonFrontSprite jr .asm_3d187 .asm_3d182 ld b, $1e call Bankswitch .asm_3d187 jp Func_3d0e0 .asm_3d18a ld a, [wPlayerMonNumber] ; $cc2f ld d, a ld a, [wWhichPokemon] ; $cf92 cp d jr nz, .asm_3d19d ld hl, UnnamedText_3d1f5 ; $51f5 call PrintText jp Func_3d105 .asm_3d19d call Func_3ca97 jp z, Func_3d105 ld a, $1 ld [$cd6a], a call GBPalWhiteOut call CleanLCD_OAM call Func_3ee5b call LoadScreenTilesFromBuffer1 call GoPAL_SET_CF1C call GBPalNormal Func_3d1ba: ; 3d1ba (f:51ba) ld hl, Func_58ed1 ld b, BANK(Func_58ed1) call Bankswitch ld c, $32 call DelayFrames call Func_3ccfa ld a, [wWhichPokemon] ; $cf92 ld [wPlayerMonNumber], a ; $cc2f ld c, a ld b, $1 push bc ld hl, W_PLAYERMONSALIVEFLAGS ld a, $10 call Predef ; indirect jump to HandleBitArray (f666 (3:7666)) pop bc ld hl, $ccf5 ld a, $10 call Predef ; indirect jump to HandleBitArray (f666 (3:7666)) call Func_3cba6 call Func_3cc91 call SaveScreenTilesToBuffer1 ld a, $2 ld [wCurrentMenuItem], a ; $cc26 and a ret UnnamedText_3d1f5: ; 3d1f5 (f:51f5) TX_FAR _UnnamedText_3d1f5 db "@" Func_3d1fa: ; 3d1fa (f:51fa) call LoadScreenTilesFromBuffer1 ld a, $3 ld [wCurrentMenuItem], a ; $cc26 ld hl, W_PLAYERMONSPEED ld de, W_ENEMYMONSPEED call Func_3cab9 ld a, $0 ld [$d11f], a ret c ld a, [$cd6a] and a ret nz jp InitBattleMenu MoveSelectionMenu: ; 3d219 (f:5219) ld a, [wMoveMenuType] dec a jr z, .mimicmenu dec a jr z, .relearnmenu jr .regularmenu .loadmoves ld de, $d0dc ld bc, $4 call CopyData ld hl, Func_39b87 ld b, BANK(Func_39b87) call Bankswitch ret .writemoves ld de, $d0e1 ld a, [$FF00+$f6] set 2, a ld [$FF00+$f6], a call PlaceString ld a, [$FF00+$f6] res 2, a ld [$FF00+$f6], a ret .regularmenu call Func_3d3f5 ret z ld hl, W_PLAYERMONMOVES call .loadmoves FuncCoord 4, 12 ; $c494 ld hl, Coord ld b, $4 ld c, $e di call TextBoxBorder FuncCoord 4, 12 ; $c494 ld hl, Coord ld [hl], $7a FuncCoord 10, 12 ; $c49a ld hl, Coord ld [hl], $7e ei FuncCoord 6, 13 ; $c4aa ld hl, Coord call .writemoves ld b, $5 ld a, $c jr .menuset .mimicmenu ld hl, W_ENEMYMONMOVES call .loadmoves FuncCoord 0, 7 ; $c42c ld hl, Coord ld b, $4 ld c, $e call TextBoxBorder FuncCoord 2, 8 ; $c442 ld hl, Coord call .writemoves ld b, $1 ld a, $7 jr .menuset .relearnmenu ld a, [wWhichPokemon] ; $cf92 ld hl, W_PARTYMON1_MOVE1 ; $d173 ld bc, $2c call AddNTimes call .loadmoves FuncCoord 4, 7 ; $c430 ld hl, Coord ld b, $4 ld c, $e call TextBoxBorder FuncCoord 6, 8 ; $c446 ld hl, Coord call .writemoves ld b, $5 ld a, $7 .menuset ld hl, wTopMenuItemY ; $cc24 ld [hli], a ld a, b ld [hli], a ; wTopMenuItemX ld a, [wMoveMenuType] cp $1 jr z, .selectedmoveknown ld a, $1 jr nc, .selectedmoveknown ld a, [wPlayerMoveListIndex] ; $cc2e inc a .selectedmoveknown ld [hli], a ; wCurrentMenuItem inc hl ; wTileBehindCursor untouched ld a, [$cd6c] inc a inc a ld [hli], a ; wMaxMenuItem ld a, [wMoveMenuType] dec a ld b, $c1 ; can't use B jr z, .matchedkeyspicked dec a ld b, $c3 jr z, .matchedkeyspicked ld a, [W_ISLINKBATTLE] ; $d12b cp $4 jr z, .matchedkeyspicked ld a, [W_FLAGS_D733] bit 0, a ld b, $c7 jr z, .matchedkeyspicked ld b, $ff .matchedkeyspicked ld a, b ld [hli], a ; wMenuWatchedKeys ld a, [wMoveMenuType] cp $1 jr z, .movelistindex1 ld a, [wPlayerMoveListIndex] ; $cc2e inc a .movelistindex1 ld [hl], a ; wLastMenuItem Func_3d2fe: ; 3d2fe (f:52fe) ld a, [wMoveMenuType] and a jr z, .battleselect dec a jr nz, .select FuncCoord 1, 14 ; $c4b9 ld hl, Coord ld de, WhichTechniqueString ; $53b8 call PlaceString jr .select .battleselect ld a, [W_FLAGS_D733] bit 0, a jr nz, .select call Func_3d4b6 ld a, [$cc35] and a jr z, .select FuncCoord 5, 13 ; $c4a9 ld hl, Coord dec a ld bc, $14 call AddNTimes ld [hl], $ec .select ld hl, $fff6 set 1, [hl] call HandleMenuInput ld hl, $fff6 res 1, [hl] bit 6, a jp nz, Func_3d3c9 ; up bit 7, a jp nz, Func_3d3dd ; down bit 2, a jp nz, Func_3d435 ; select bit 1, a ; B, but was it reset above? push af xor a ld [$cc35], a ld a, [wCurrentMenuItem] ; $cc26 dec a ld [wCurrentMenuItem], a ; $cc26 ld b, a ld a, [wMoveMenuType] dec a ; if not mimic jr nz, .nob pop af ret .nob dec a ld a, b ld [wPlayerMoveListIndex], a ; $cc2e jr nz, .moveselected pop af ret .moveselected pop af ret nz ld hl, W_PLAYERMONPP ; $d02d ld a, [wCurrentMenuItem] ; $cc26 ld c, a ld b, $0 add hl, bc ld a, [hl] and $3f jr z, .nopp ld a, [W_PLAYERDISABLEDMOVE] ; $d06d swap a and $f dec a cp c jr z, .disabled ld a, [W_PLAYERBATTSTATUS3] ; $d064 bit 3, a ; transformed jr nz, .dummy ; game freak derp .dummy ld a, [wCurrentMenuItem] ; $cc26 ld hl, W_PLAYERMONMOVES ld c, a ld b, $0 add hl, bc ld a, [hl] ld [wPlayerSelectedMove], a ; $ccdc xor a ret .disabled ld hl, MoveDisabledText jr .print .nopp ld hl, MoveNoPPText .print call PrintText call LoadScreenTilesFromBuffer1 jp MoveSelectionMenu MoveNoPPText: ; 3d3ae (f:53ae) TX_FAR _MoveNoPPText db "@" MoveDisabledText: ; 3d3b3 (f:53b3) TX_FAR _MoveDisabledText db "@" WhichTechniqueString: ; 3d3b8 (f:53b8) db "WHICH TECHNIQUE?@" Func_3d3c9: ; 3d3c9 (f:53c9) ld a, [wCurrentMenuItem] ; $cc26 and a jp nz, Func_3d2fe call EraseMenuCursor ld a, [$cd6c] inc a ld [wCurrentMenuItem], a ; $cc26 jp Func_3d2fe Func_3d3dd: ; 3d3dd (f:53dd) ld a, [wCurrentMenuItem] ; $cc26 ld b, a ld a, [$cd6c] inc a inc a cp b jp nz, Func_3d2fe call EraseMenuCursor ld a, $1 ld [wCurrentMenuItem], a ; $cc26 jp Func_3d2fe Func_3d3f5: ; 3d3f5 (f:53f5) ld a, $a5 ld [wPlayerSelectedMove], a ; $ccdc ld a, [W_PLAYERDISABLEDMOVE] ; $d06d and a ld hl, W_PLAYERMONPP ; $d02d jr nz, .asm_3d40e ld a, [hli] or [hl] inc hl or [hl] inc hl or [hl] and $3f ret nz jr .asm_3d423 .asm_3d40e swap a and $f ld b, a ld d, $5 xor a .asm_3d416 dec d jr z, .asm_3d421 ld c, [hl] inc hl dec b jr z, .asm_3d416 or c jr .asm_3d416 .asm_3d421 and a ret nz .asm_3d423 ld hl, UnnamedText_3d430 ; $5430 call PrintText ld c, $3c call DelayFrames xor a ret UnnamedText_3d430: ; 3d430 (f:5430) TX_FAR _UnnamedText_3d430 db "@" Func_3d435: ; 3d435 (f:5435) ld a, [$cc35] and a jr z, asm_3d4ad ld hl, W_PLAYERMONMOVES call Func_3d493 ld hl, W_PLAYERMONPP ; $d02d call Func_3d493 ld hl, W_PLAYERDISABLEDMOVE ; $d06d ld a, [hl] swap a and $f ld b, a ld a, [wCurrentMenuItem] ; $cc26 cp b jr nz, .asm_3d463 ld a, [hl] and $f ld b, a ld a, [$cc35] swap a add b ld [hl], a jr .asm_3d474 .asm_3d463 ld a, [$cc35] cp b jr nz, .asm_3d474 ld a, [hl] and $f ld b, a ld a, [wCurrentMenuItem] ; $cc26 swap a add b ld [hl], a .asm_3d474 ld hl, W_PARTYMON1_MOVE1 ; $d173 ld a, [wPlayerMonNumber] ; $cc2f ld bc, $2c call AddNTimes push hl call Func_3d493 pop hl ld bc, $15 add hl, bc call Func_3d493 xor a ld [$cc35], a jp MoveSelectionMenu Func_3d493: ; 3d493 (f:5493) push hl ld a, [$cc35] dec a ld c, a ld b, $0 add hl, bc ld d, h ld e, l pop hl ld a, [wCurrentMenuItem] ; $cc26 dec a ld c, a ld b, $0 add hl, bc ld a, [de] ld b, [hl] ld [hl], a ld a, b ld [de], a ret asm_3d4ad: ; 3d4ad (f:54ad) ld a, [wCurrentMenuItem] ; $cc26 ld [$cc35], a jp MoveSelectionMenu Func_3d4b6: ; 3d4b6 (f:54b6) xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba FuncCoord 0, 8 ; $c440 ld hl, Coord ld b, $3 ld c, $9 call TextBoxBorder ld a, [W_PLAYERDISABLEDMOVE] ; $d06d and a jr z, .asm_3d4df swap a and $f ld b, a ld a, [wCurrentMenuItem] ; $cc26 cp b jr nz, .asm_3d4df FuncCoord 1, 10 ; $c469 ld hl, Coord ld de, DisabledText ; $5555 call PlaceString jr .asm_3d54e .asm_3d4df ld hl, wCurrentMenuItem ; $cc26 dec [hl] xor a ld [H_WHOSETURN], a ; $FF00+$f3 ld hl, W_PLAYERMONMOVES ld a, [wCurrentMenuItem] ; $cc26 ld c, a ld b, $0 add hl, bc ld a, [hl] ld [wPlayerSelectedMove], a ; $ccdc ld a, [wPlayerMonNumber] ; $cc2f ld [wWhichPokemon], a ; $cf92 ld a, $4 ld [$cc49], a ld hl, GetMaxPP ld b, BANK(GetMaxPP) call Bankswitch ld hl, wCurrentMenuItem ; $cc26 ld c, [hl] inc [hl] ld b, $0 ld hl, W_PLAYERMONPP ; $d02d add hl, bc ld a, [hl] and $3f ld [$cd6d], a FuncCoord 1, 9 ; $c455 ld hl, Coord ld de, TypeText ; $555f call PlaceString FuncCoord 7, 11 ; $c483 ld hl, Coord ld [hl], "/" FuncCoord 5, 9 ; $c459 ld hl, Coord ld [hl], "/" FuncCoord 5, 11 ; $c481 ld hl, Coord ld de, $cd6d ld bc, $102 call PrintNumber FuncCoord 8, 11 ; $c484 ld hl, Coord ld de, $d11e ld bc, $102 call PrintNumber call GetCurrentMove FuncCoord 2, 10 ; $c46a ld hl, Coord ld a, $5d call Predef ; indirect jump to Func_27d98 (27d98 (9:7d98)) .asm_3d54e ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba jp Delay3 DisabledText: ; 3d555 (f:5555) db "disabled!@" TypeText: ; 3d55f (f:555f) db "TYPE@" SelectEnemyMove: ; 3d564 (f:5564) ld a, [W_ISLINKBATTLE] sub $4 jr nz, .noLinkBattle call SaveScreenTilesToBuffer1 call Func_3d605 call LoadScreenTilesFromBuffer1 ld a, [$cc3e] cp $e jp z, .asm_3d601 cp $d jr z, .unableToMove cp $4 ret nc ld [$cce2], a ld c, a ld hl, W_ENEMYMONMOVES ld b, $0 add hl, bc ld a, [hl] jr .done .noLinkBattle ld a, [W_ENEMYBATTSTATUS2] and $60 ; need to recharge or using rage ret nz ld hl, W_ENEMYBATTSTATUS1 ld a, [hl] and $12 ; using multi-turn move or bide ret nz ld a, [W_ENEMYMONSTATUS] and SLP | FRZ ; sleeping or frozen ret nz ld a, [W_ENEMYBATTSTATUS1] and $21 ; using fly/dig or thrash/petal dance ret nz ld a, [W_PLAYERBATTSTATUS1] bit 5, a ; caught in player's multi-turn move (e.g. wrap) jr z, .notCaughtInWrap .unableToMove ld a, $ff jr .done .notCaughtInWrap ld hl, W_ENEMYMONMOVES+1 ; 2nd enemy move ld a, [hld] and a jr nz, .atLeastTwoMovesAvailable ld a, [W_ENEMYDISABLEDMOVE] and a ld a, STRUGGLE ; struggle if the only move is disabled jr nz, .done .atLeastTwoMovesAvailable ld a, [W_ISINBATTLE] dec a jr z, .chooseRandomMove ; wild encounter ld hl, AIEnemyTrainerChooseMoves ld b, BANK(AIEnemyTrainerChooseMoves) call Bankswitch .chooseRandomMove push hl call GenRandomInBattle ; get random ld b, $1 cp $3f ; select move 1 in [0,3e] (63/256 chance) jr c, .moveChosen inc hl inc b cp $7f ; select move 1 in [3f,7e] (64/256 chance) jr c, .moveChosen inc hl inc b cp $be ; select move 1 in [7f,bd] (63/256 chance) jr c, .moveChosen inc hl inc b ; select move 4 in [be,ff] (66/256 chance) .moveChosen ld a, b dec a ld [wEnemyMoveListIndex], a ld a, [W_ENEMYDISABLEDMOVE] swap a and $f cp b ld a, [hl] pop hl jr z, .chooseRandomMove ; move disabled, try again and a jr z, .chooseRandomMove ; move non-existant, try again .done ld [wEnemySelectedMove], a ret .asm_3d601 ld a, $a5 jr .done Func_3d605: ; 3d605 (f:5605) ld a, $ff ld [$cc3e], a ld a, [wPlayerMoveListIndex] ; $cc2e cp $f jr z, .asm_3d630 ld a, [$cd6a] and a jr nz, .asm_3d629 ld a, [wPlayerSelectedMove] ; $ccdc cp $a5 ld b, $e jr z, .asm_3d62f dec b inc a jr z, .asm_3d62f ld a, [wPlayerMoveListIndex] ; $cc2e jr .asm_3d630 .asm_3d629 ld a, [wWhichPokemon] ; $cf92 add $4 ld b, a .asm_3d62f ld a, b .asm_3d630 ld [$cc42], a ld hl, Func_4c05 ld b, BANK(Func_4c05) call Bankswitch .asm_3d63b call Func_22c3 call DelayFrame ld a, [$cc3e] inc a jr z, .asm_3d63b ld b, $a .asm_3d649 call DelayFrame call Func_22c3 dec b jr nz, .asm_3d649 ld b, $a .asm_3d654 call DelayFrame call Func_22ed dec b jr nz, .asm_3d654 ret Func_3d65e: ; 3d65e (f:565e) xor a ld [H_WHOSETURN], a ; $FF00+$f3 ld a, [wPlayerSelectedMove] ; $ccdc inc a jp z, Func_3d80a xor a ld [W_MOVEMISSED], a ; $d05f ld [$cced], a ld [$ccf4], a ld a, $a ld [$d05b], a ld a, [$cd6a] and a jp nz, Func_3d80a call Func_3d811 jp z, Func_3d80a call Func_3d854 jr nz, .asm_3d68a jp [hl] .asm_3d68a call GetCurrentMove ld hl, W_PLAYERBATTSTATUS1 ; $d062 bit 4, [hl] jr nz, asm_3d6a9 call Func_3dc88 jp z, Func_3d80a Func_3d69a: ; 3d69a (f:569a) ld a, [W_PLAYERMOVEEFFECT] ; $cfd3 cp $27 jp z, Func_3f132 cp $2b jp z, Func_3f132 jr asm_3d6b0 ; in-battle stuff asm_3d6a9: ; 3d6a9 (f:56a9) ld hl,W_PLAYERBATTSTATUS1 res 4,[hl] res 6,[hl] asm_3d6b0: ; 3d6b0 (f:56b0) call Func_3daf5 ld hl,DecrementPP ld de,$CCDC ; pointer to the move just used ld b,BANK(DecrementPP) call Bankswitch ld a,[W_PLAYERMOVEEFFECT] ; effect of the move just used ld hl,EffectsArray1 ld de,1 call IsInArray jp c,Func_3f132 ld a,[W_PLAYERMOVEEFFECT] ld hl,EffectsArray5B ld de,1 call IsInArray call c,Func_3f132 asm_3d6dc: ; 3d6dc (f:56dc) ld a,[W_PLAYERMOVEEFFECT] ld hl,EffectsArray2 ld de,1 call IsInArray jp c,.asm_3d702 call CriticalHitTest call HandleCounterMove jr z,asm_3d705 call CalculateDamage call MoreCalculateDamage jp z,asm_3d74b call AdjustDamageForMoveType call Func_3e687 .asm_3d702 call MoveHitTest asm_3d705 ld a,[W_MOVEMISSED] and a jr z,asm_3d714 ld a,[W_PLAYERMOVEEFFECT] sub a,7 jr z,asm_3d71e jr asm_3d74b ; 574B asm_3d714 ld a,[W_PLAYERMOVEEFFECT] and a ld a,4 jr z,asm_3d71e ld a,5 asm_3d71e push af ld a,[W_PLAYERBATTSTATUS2] bit 4,a ld hl,Func_79747 ld b,BANK(Func_79747) call nz,Bankswitch pop af ld [$CC5B],a ld a,[W_PLAYERMOVENUM] call PlayMoveAnimation call Func_3eed3 call Func_3cd60 ld a,[W_PLAYERBATTSTATUS2] bit 4,a ld hl,Func_79771 ld b,BANK(Func_79771) call nz,Bankswitch jr asm_3d766 asm_3d74b ld c,$1E call DelayFrames ld a,[W_PLAYERMOVEEFFECT] cp a,$2B jr z,.next5 cp a,$27 ; XXX SLP | FRZ ? jr z,.next5 jr asm_3d766 .next5 xor a ld [$CC5B],a ld a,STATUS_AFFECTED_ANIM call PlayMoveAnimation asm_3d766 ld a,[W_PLAYERMOVEEFFECT] cp a,9 jr nz,.next6 ; 577A call MirrorMoveCopyMove jp z,Func_3d80a xor a ld [$CCED],a jp Func_3d69a .next6 cp a,$53 jr nz,.next7 ; 5784 call MetronomePickMove jp Func_3d69a .next7 ld a,[W_PLAYERMOVEEFFECT] ld hl,EffectsArray3 ld de,1 call IsInArray jp c,Func_3f132 ld a,[W_MOVEMISSED] and a jr z,.next8 ; 57A6 call Func_3dbe2 ld a,[W_PLAYERMOVEEFFECT] cp a,7 jr z,.next9 ; 57B9 jp Func_3d80a .next8 call ApplyAttackToEnemyPokemon call Func_3dc5c ld hl, DisplayEffectiveness ; MyFunction ld b, BANK(DisplayEffectiveness) ; BANK(MyFunction) call Bankswitch ld a,1 ld [$CCF4],a .next9 ld a,[W_PLAYERMOVEEFFECT] ld hl,EffectsArray4 ld de,1 call IsInArray call c,Func_3f132 ld hl,$CFE6 ld a,[hli] ld b,[hl] or b ret z call HandleBuildingRage ld hl,W_PLAYERBATTSTATUS1 bit 2,[hl] jr z,.next10 ; 57EF ld a,[$D06A] dec a ld [$D06A],a jp nz,asm_3d714 res 2,[hl] ld hl,MultiHitText call PrintText xor a ld [W_NUMHITS],a ; reset .next10 ld a,[W_PLAYERMOVEEFFECT] and a jp z,Func_3d80a ld hl,EffectsArray5 ld de,1 call IsInArray call nc,Func_3f132 jp Func_3d80a MultiHitText: ; 3d805 (f:5805) TX_FAR _MultiHitText db "@" Func_3d80a: ; 3d80a (f:580a) xor a ld [$CD6A],a ld b,1 ret Func_3d811: ; 3d811 (f:5811) ; print the ghost battle messages call Func_3d83a ret nz ld a,[H_WHOSETURN] and a jr nz,.Ghost ld a,[W_PLAYERMONSTATUS] ; player’s turn and a,SLP | FRZ ret nz ld hl,ScaredText call PrintText xor a ret .Ghost ; ghost’s turn ld hl,GetOutText call PrintText xor a ret ScaredText: ; 3d830 (f:5830) TX_FAR _ScaredText db "@" GetOutText: ; 3d835 (f:5835) TX_FAR _GetOutText db "@" Func_3d83a: ; 3d83a (f:583a) ld a,[W_ISINBATTLE] dec a ret nz ld a,[W_CURMAP] cp a,POKEMONTOWER_1 jr c,.next cp a,LAVENDER_HOUSE_1 jr nc,.next ld b,SILPH_SCOPE call IsItemInBag ; $3493 ret z .next ld a,1 and a ret Func_3d854: ; 3d854 (f:5854) ld hl,W_PLAYERMONSTATUS ld a,[hl] and a,SLP jr z,.FrozenCheck ; to 5884 dec a ld [W_PLAYERMONSTATUS],a ; decrement sleep count and a jr z,.WakeUp ; to 5874 xor a ld [$CC5B],a ld a,SLP_ANIM - 1 call PlayMoveAnimation ld hl,FastAsleepText call PrintText jr .sleepDone .WakeUp ld hl,WokeUpText call PrintText .sleepDone xor a ld [$CCF1],a ld hl,Func_3d80a jp Func_3da37 .FrozenCheck bit 5,[hl] ; frozen? jr z,.HeldInPlaceCheck ; to 5898 ld hl,FrozenText call PrintText xor a ld [$CCF1],a ld hl,Func_3d80a jp Func_3da37 .HeldInPlaceCheck ld a,[W_ENEMYBATTSTATUS1] bit 5,a jp z,FlinchedCheck ld hl,CantMoveText call PrintText ld hl,Func_3d80a jp Func_3da37 FlinchedCheck: ; 3d8ac (f:58ac) ld hl,W_PLAYERBATTSTATUS1 bit 3,[hl] jp z,HyperBeamCheck res 3,[hl] ld hl,FlinchedText call PrintText ld hl,Func_3d80a jp Func_3da37 HyperBeamCheck: ; 3d8c2 (f:58c2) ld hl,W_PLAYERBATTSTATUS2 bit 5,[hl] jr z,.next ; 58D7 res 5,[hl] ld hl,MustRechargeText call PrintText ld hl,Func_3d80a ; $580a jp Func_3da37 .next ld hl,$D06D ld a,[hl] and a jr z,.next2 ; 58EE dec a ld [hl],a and a,$F jr nz,.next2 ld [hl],a ld [$CCEE],a ld hl,DisabledNoMoreText call PrintText .next2 ld a,[W_PLAYERBATTSTATUS1] add a jr nc,.next3 ; 5929 ld hl,$D06B dec [hl] jr nz,.next4 ; 5907 ld hl,W_PLAYERBATTSTATUS1 res 7,[hl] ld hl,ConfusedNoMoreText call PrintText jr .next3 .next4 ld hl,IsConfusedText call PrintText xor a ld [$CC5B],a ld a,CONF_ANIM - 1 call PlayMoveAnimation call GenRandomInBattle cp a,$80 jr c,.next3 ld hl,W_PLAYERBATTSTATUS1 ld a,[hl] and a,$80 ld [hl],a call Func_3daad jr .next5 ; 5952 .next3 ld a,[$CCEE] and a jr z,.ParalysisCheck ; 593E ld hl,$CCDC cp [hl] jr nz,.ParalysisCheck call Func_3da88 ld hl,Func_3d80a ; $580a jp Func_3da37 .ParalysisCheck ld hl,W_PLAYERMONSTATUS bit 6,[hl] jr z,.next7 ; 5975 call GenRandomInBattle ; random number cp a,$3F jr nc,.next7 ld hl,FullyParalyzedText call PrintText .next5 ld hl,W_PLAYERBATTSTATUS1 ld a,[hl] and a,$CC ld [hl],a ld a,[W_PLAYERMOVEEFFECT] cp a,$2B jr z,.next8 ; 5966 cp a,$27 jr z,.next8 jr .next9 ; 596F .next8 xor a ld [$CC5B],a ld a,STATUS_AFFECTED_ANIM call PlayMoveAnimation .next9 ld hl,Func_3d80a ; $580a jp Func_3da37 .next7 ld hl,W_PLAYERBATTSTATUS1 bit 0,[hl] jr z,.next10 ; 59D0 xor a ld [W_PLAYERMOVENUM],a ld hl,$D0D7 ld a,[hli] ld b,a ld c,[hl] ld hl,$D075 ld a,[hl] add c ld [hld],a ld a,[hl] adc b ld [hl],a ld hl,$D06A dec [hl] jr z,.next11 ; 599B ld hl,Func_3d80a ; $580a jp Func_3da37 .next11 ld hl,W_PLAYERBATTSTATUS1 res 0,[hl] ld hl,UnleashedEnergyText call PrintText ld a,1 ld [$CFD4],a ld hl,$D075 ld a,[hld] add a ld b,a ld [$D0D8],a ld a,[hl] rl a ld [$D0D7],a or b jr nz,.next12 ; 59C2 ld a,1 ld [W_MOVEMISSED],a .next12 xor a ld [hli],a ld [hl],a ld a,$75 ld [W_PLAYERMOVENUM],a ld hl,asm_3d705 ; $5705 jp Func_3da37 .next10 bit 1,[hl] jr z,.next13 ; 59FF ld a,$25 ld [W_PLAYERMOVENUM],a ld hl,ThrashingAboutText call PrintText ld hl,$D06A dec [hl] ld hl,asm_3d6dc ; $56dc jp nz,Func_3da37 push hl ld hl,W_PLAYERBATTSTATUS1 res 1,[hl] set 7,[hl] call GenRandomInBattle ; random number and a,3 inc a inc a ld [$D06B],a pop hl jp Func_3da37 .next13 bit 5,[hl] jp z,Func_3da1a ld hl,AttackContinuesText call PrintText ld a,[$D06A] dec a ld [$D06A],a ld hl,asm_3d714 ; $5714 jp nz,Func_3da37 jp Func_3da37 Func_3da1a: ; 3da1a (f:5a1a) ld a, [W_PLAYERBATTSTATUS2] ; $d063 bit 6, a jp z, Func_3da39 ld a, $63 ld [$d11e], a call GetMoveName call CopyStringToCF4B xor a ld [W_PLAYERMOVEEFFECT], a ; $cfd3 ld hl, asm_3d6b0 ; $56b0 jp Func_3da37 Func_3da37: ; 3da37 (f:5a37) xor a ret Func_3da39: ; 3da39 (f:5a39) ld a, $1 and a ret FastAsleepText: ; 3da3d (f:5a3d) TX_FAR _FastAsleepText db "@" WokeUpText: ; 3da42 (f:5a42) TX_FAR _WokeUpText db "@" FrozenText: ; 3da47 (f:5a47) TX_FAR _FrozenText db "@" FullyParalyzedText: ; 3da4c (f:5a4c) TX_FAR _FullyParalyzedText db "@" FlinchedText: ; 3da51 (f:5a51) TX_FAR _FlinchedText db "@" MustRechargeText: ; 3da56 (f:5a56) TX_FAR _MustRechargeText db "@" DisabledNoMoreText: ; 3da5b (f:5a5b) TX_FAR _DisabledNoMoreText db "@" IsConfusedText: ; 3da60 (f:5a60) TX_FAR _IsConfusedText db "@" HurtItselfText: ; 3da65 (f:5a65) TX_FAR _HurtItselfText db "@" ConfusedNoMoreText: ; 3da6a (f:5a6a) TX_FAR _ConfusedNoMoreText db "@" SavingEnergyText: ; 3da6f (f:5a6f) TX_FAR _SavingEnergyText db "@" UnleashedEnergyText: ; 3da74 (f:5a74) TX_FAR _UnleashedEnergyText db "@" ThrashingAboutText: ; 3da79 (f:5a79) TX_FAR _ThrashingAboutText db "@" AttackContinuesText: ; 3da7e (f:5a7e) TX_FAR _AttackContinuesText db "@" CantMoveText: ; 3da83 (f:5a83) TX_FAR _CantMoveText db "@" Func_3da88: ; 3da88 (f:5a88) ld hl, wPlayerSelectedMove ; $ccdc ld de, W_PLAYERBATTSTATUS1 ; $d062 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3da97 inc hl ld de, W_ENEMYBATTSTATUS1 ; $d067 .asm_3da97 ld a, [de] res 4, a ld [de], a ld a, [hl] ld [$d11e], a call GetMoveName ld hl, UnnamedText_3daa8 ; $5aa8 jp PrintText UnnamedText_3daa8: ; 3daa8 (f:5aa8) TX_FAR _UnnamedText_3daa8 db "@" Func_3daad: ; 3daad (f:5aad) ld hl, HurtItselfText ; $5a65 call PrintText ld hl, W_ENEMYMONDEFENSE ; $cff8 ld a, [hli] push af ld a, [hld] push af ld a, [W_PLAYERMONDEF] ld [hli], a ld a, [$d028] ld [hl], a ld hl, W_PLAYERMOVEEFFECT ; $cfd3 push hl ld a, [hl] push af xor a ld [hli], a ld [$d05e], a ld a, $28 ld [hli], a xor a ld [hl], a call CalculateDamage call MoreCalculateDamage pop af pop hl ld [hl], a ld hl, $cff9 pop af ld [hld], a pop af ld [hl], a xor a ld [$cc5b], a inc a ld [H_WHOSETURN], a ; $FF00+$f3 call PlayMoveAnimation call Func_3cd60 xor a ld [H_WHOSETURN], a ; $FF00+$f3 jp ApplyDamageToPlayerPokemon Func_3daf5: ; 3daf5 (f:5af5) ld hl, UnnamedText_3dafb ; $5afb jp PrintText UnnamedText_3dafb: ; 3dafb (f:5afb) TX_FAR _UnnamedText_3dafb db $08 ; asm ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld a, [W_PLAYERMOVENUM] ; $cfd2 ld hl, $ccf1 jr z, .asm_3db11 ld a, [W_ENEMYMOVENUM] ; $cfcc ld hl, $ccf2 .asm_3db11 ld [hl], a ld [$d11e], a call Func_3db85 ld a, [$cced] and a ld hl, UnnamedText_3db34 ; $5b34 ret nz ld a, [$d11e] cp $3 ld hl, UnnamedText_3db34 ; $5b34 ret c ld hl, UnnamedText_3db2d ; $5b2d ret UnnamedText_3db2d: ; 3db2d (f:5b2d) TX_FAR _UnnamedText_3db2d db $08 ; asm jr Func_3db39 UnnamedText_3db34: ; 3db34 (f:5b34) TX_FAR _UnnamedText_3db34 db $08 ; asm Func_3db39: ; 3db39 (f:5b39) ld a, [$cced] and a jr z, Func_3db48 ld hl, UnnamedText_3db43 ; $5b43 ret UnnamedText_3db43: ; 3db43 (f:5b43) TX_FAR _UnnamedText_3db43 db $08 ; asm Func_3db48: ; 3db48 (f:5b48) ld hl, UnnamedText_3db4c ; $5b4c ret UnnamedText_3db4c: ; 3db4c (f:5b4c) TX_FAR _UnnamedText_3db4c db $08 ; asm ld hl, TextPointerTable_3db62 ld a, [$d11e] add a push bc ld b, $0 ld c, a add hl, bc pop bc ld a, [hli] ld h, [hl] ld l, a ret TextPointerTable_3db62: ; 3db62 (f:5b62) dw UnnamedText_3db6c dw UnnamedText_3db71 dw UnnamedText_3db76 dw UnnamedText_3db7b dw UnnamedText_3db80 UnnamedText_3db6c: ; 3db6c (f:5b6c) TX_FAR _UnnamedText_3db6c db "@" UnnamedText_3db71: ; 3db71 (f:5b71) TX_FAR _UnnamedText_3db71 db "@" UnnamedText_3db76: ; 3db76 (f:5b76) TX_FAR _UnnamedText_3db76 db "@" UnnamedText_3db7b: ; 3db7b (f:5b7b) TX_FAR _UnnamedText_3db7b db "@" UnnamedText_3db80: ; 3db80 (f:5b80) TX_FAR _UnnamedText_3db80 db "@" Func_3db85: ; 3db85 (f:5b85) push bc ld a, [$d11e] ; move number ld c, a ld b, $0 ld hl, UnknownMovesList_3dba3 ; $5ba3 .asm_3db8f ld a, [hli] cp $ff jr z, .asm_3db9d cp c jr z, .asm_3db9d and a jr nz, .asm_3db8f inc b jr .asm_3db8f .asm_3db9d ld a, b ld [$d11e], a pop bc ret UnknownMovesList_3dba3: ; 3dba3 (f:5ba3) db SWORDS_DANCE, GROWTH db $00 db RECOVER, BIDE, SELFDESTRUCT, AMNESIA db $00 db MEDITATE, AGILITY, TELEPORT, MIMIC, DOUBLE_TEAM, BARRAGE db $00 db POUND, SCRATCH, VICEGRIP, WING_ATTACK, FLY, BIND, SLAM, HORN_ATTACK, BODY_SLAM db WRAP, THRASH, TAIL_WHIP, LEER, BITE, GROWL, ROAR, SING, PECK, COUNTER db STRENGTH, ABSORB, STRING_SHOT, EARTHQUAKE, FISSURE, DIG, TOXIC, SCREECH, HARDEN db MINIMIZE, WITHDRAW, DEFENSE_CURL, METRONOME, LICK, CLAMP, CONSTRICT, POISON_GAS db LEECH_LIFE, BUBBLE, FLASH, SPLASH, ACID_ARMOR, FURY_SWIPES, REST, SHARPEN, SLASH, SUBSTITUTE db $00 db $FF ; terminator Func_3dbe2: ; 3dbe2 (f:5be2) ld de, W_PLAYERMOVEEFFECT ; $cfd3 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3dbed ld de, W_ENEMYMOVEEFFECT ; $cfcd .asm_3dbed ld hl, UnnamedText_3dc57 ; $5c57 ld a, [$d05b] and $7f jr z, .asm_3dc04 ld hl, UnnamedText_3dc42 ; $5c42 ld a, [$d05e] cp $ff jr nz, .asm_3dc04 ld hl, UnnamedText_3dc4c ; $5c4c .asm_3dc04 push de call PrintText xor a ld [$d05e], a pop de ld a, [de] cp $2d ret nz ld hl, W_DAMAGE ; $d0d7 ld a, [hli] ld b, [hl] srl a rr b srl a rr b srl a rr b ld [hl], b dec hl ld [hli], a or b jr nz, .asm_3dc2a inc a ld [hl], a .asm_3dc2a ld hl, UnnamedText_3dc47 ; $5c47 call PrintText ld b, $4 ld a, $24 call Predef ; indirect jump to Func_48125 (48125 (12:4125)) ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr nz, .asm_3dc3f jp ApplyDamageToPlayerPokemon .asm_3dc3f jp ApplyDamageToEnemyPokemon UnnamedText_3dc42: ; 3dc42 (f:5c42) TX_FAR _UnnamedText_3dc42 db "@" UnnamedText_3dc47: ; 3dc47 (f:5c47) TX_FAR _UnnamedText_3dc47 db "@" UnnamedText_3dc4c: ; 3dc4c (f:5c4c) TX_FAR _UnnamedText_3dc4c db "@" Func_3dc51: ; 3dc51 (f:5c51) ld hl, UnnamedText_3dc57 ; $5c57 jp PrintText UnnamedText_3dc57: ; 3dc57 (f:5c57) TX_FAR _UnnamedText_3dc57 db "@" Func_3dc5c: ; 3dc5c (f:5c5c) ld a, [$d05e] and a jr z, .asm_3dc75 dec a add a ld hl, TextPointerTable_3dc7a ; $5c7a ld b, $0 ld c, a add hl, bc ld a, [hli] ld h, [hl] ld l, a call PrintText xor a ld [$d05e], a .asm_3dc75 ld c, $14 jp DelayFrames TextPointerTable_3dc7a: ; 3dc7a (f:5c7a) dw UnnamedText_3dc7e dw UnnamedText_3dc83 UnnamedText_3dc7e: ; 3dc7e (f:5c7e) TX_FAR _UnnamedText_3dc7e db "@" UnnamedText_3dc83: ; 3dc83 (f:5c83) TX_FAR _UnnamedText_3dc83 db "@" Func_3dc88: ; 3dc88 (f:5c88) xor a ld [$cced], a ld a, [W_ISLINKBATTLE] ; $d12b cp $4 jr nz, .asm_3dc97 ld a, $1 and a ret .asm_3dc97 ld hl, W_PARTYMON1_OTID ; $d177 ld bc, $2c ld a, [wPlayerMonNumber] ; $cc2f call AddNTimes ld a, [wPlayerID] ; $d359 cp [hl] jr nz, .asm_3dcb1 inc hl ld a, [wPlayerID + 1] ; $d35a cp [hl] jp z, Func_3ddb0 .asm_3dcb1 ld hl, W_OBTAINEDBADGES ; $d356 bit 7, [hl] ld a, $65 jr nz, .asm_3dcce bit 5, [hl] ld a, $46 jr nz, .asm_3dcce bit 3, [hl] ld a, $32 jr nz, .asm_3dcce bit 1, [hl] ld a, $1e jr nz, .asm_3dcce ld a, $a .asm_3dcce ld b, a ld c, a ld a, [W_PLAYERMONLEVEL] ; $d022 ld d, a add b ld b, a jr nc, .asm_3dcda ld b, $ff .asm_3dcda ld a, c cp d jp nc, Func_3ddb0 .asm_3dcdf call GenRandomInBattle swap a cp b jr nc, .asm_3dcdf cp c jp c, Func_3ddb0 .asm_3dceb call GenRandomInBattle cp b jr nc, .asm_3dceb cp c jr c, .asm_3dd3f ld a, d sub c ld b, a call GenRandomInBattle swap a sub b jr c, .asm_3dd0e cp b jr nc, .asm_3dd20 ld hl, UnnamedText_3ddc0 ; $5dc0 call PrintText call Func_3daad jp Func_3ddb4 .asm_3dd0e call GenRandomInBattle add a swap a and $7 jr z, .asm_3dd0e ld [W_PLAYERMONSTATUS], a ; $d018 ld hl, UnnamedText_3ddbb ; $5dbb jr .asm_3dd3a .asm_3dd20 call GenRandomInBattle and $3 ld hl, UnnamedText_3ddb6 ; $5db6 and a jr z, .asm_3dd3a ld hl, UnnamedText_3ddc0 ; $5dc0 dec a jr z, .asm_3dd3a ld hl, UnnamedText_3ddc5 ; $5dc5 dec a jr z, .asm_3dd3a ld hl, UnnamedText_3ddca ; $5dca .asm_3dd3a call PrintText jr Func_3ddb4 .asm_3dd3f ld a, [$d01d] and a jr z, .asm_3dd20 ld a, [$ccee] and a jr nz, .asm_3dd20 ld a, [wPlayerSelectedMove] ; $ccdc cp $a5 jr z, .asm_3dd20 ld hl, W_PLAYERMONPP ; $d02d push hl ld a, [hli] and $3f ld b, a ld a, [hli] and $3f add b ld b, a ld a, [hli] and $3f add b ld b, a ld a, [hl] and $3f add b pop hl push af ld a, [wCurrentMenuItem] ; $cc26 ld c, a ld b, $0 add hl, bc ld a, [hl] and $3f ld b, a pop af cp b jr z, .asm_3dd20 ld a, $1 ld [$cced], a ld a, [wMaxMenuItem] ; $cc28 ld b, a ld a, [wCurrentMenuItem] ; $cc26 ld c, a .asm_3dd86 call GenRandomInBattle and $3 cp b jr nc, .asm_3dd86 cp c jr z, .asm_3dd86 ld [wCurrentMenuItem], a ; $cc26 ld hl, W_PLAYERMONPP ; $d02d ld e, a ld d, $0 add hl, de ld a, [hl] and a jr z, .asm_3dd86 ld a, [wCurrentMenuItem] ; $cc26 ld c, a ld b, $0 ld hl, W_PLAYERMONMOVES add hl, bc ld a, [hl] ld [wPlayerSelectedMove], a ; $ccdc call GetCurrentMove Func_3ddb0: ; 3ddb0 (f:5db0) ld a, $1 and a ret Func_3ddb4: ; 3ddb4 (f:5db4) xor a ret UnnamedText_3ddb6: ; 3ddb6 (f:5db6) TX_FAR _UnnamedText_3ddb6 db "@" UnnamedText_3ddbb: ; 3ddbb (f:5dbb) TX_FAR _UnnamedText_3ddbb db "@" UnnamedText_3ddc0: ; 3ddc0 (f:5dc0) TX_FAR _UnnamedText_3ddc0 db "@" UnnamedText_3ddc5: ; 3ddc5 (f:5dc5) TX_FAR _UnnamedText_3ddc5 db "@" UnnamedText_3ddca: ; 3ddca (f:5dca) TX_FAR _UnnamedText_3ddca db "@" CalculateDamage: ; 3ddcf (f:5dcf) xor a ld hl, W_DAMAGE ;damage to eventually inflict, intitialise to zero ldi [hl], a ld [hl], a ld hl, W_PLAYERMOVEPOWER ld a, [hli] ;*read attack base power and a ld d, a ;*D = attack base, used later ret z ;return if attack is zero ld a, [hl] ;*test attacking type cp a, $14 ;types >= $14 are all special jr nc, .specialAttack .physicalAttack ld hl, W_ENEMYMONDEFENSE ;opponent defense ld a, [hli] ;*BC = opponent defense used later ld b, a ld c, [hl] ld a, [W_ENEMYBATTSTATUS3] ;test for reflect bit 2, a jr z, .next .doubleDefense sla c ;x2 defense if bit2 of D069 is set rl b .next ld hl, W_PLAYERMONATK ;attack pointer ld a, [$d05e] and a jr z, .next3 ld c, 3 call Func_3df1c ld a, [$ff00+$97] ld b, a ld a, [$ff00+$98] ld c, a push bc ld hl, $d18f ld a, [wPlayerMonNumber] ld bc, $002c call AddNTimes pop bc jr .next3 .specialAttack ld hl, W_ENEMYMONSPECIAL ;opponent special ld a, [hli] ;*BC = opponent special defense used later ld b, a ld c, [hl] ld a, [W_ENEMYBATTSTATUS3] ;test for lightscreen bit 1, a jr z, .next2 .doubleSpecialDefense sla c ;x2 special defense if bit1 of D069 set rl b .next2 ld hl, W_PLAYERMONSPECIAL ld a, [$d05e] ;XXX and a jr z, .next3 ;skip portion of code that pulls up inactive pokemon .loadOtherPoke ld c, 5 call Func_3df1c ld a, [$ff00+$97] ld b, a ld a, [$ff00+$98] ld c, a push bc ld hl, $d195 ld a, [wPlayerMonNumber] ld bc, $002c call AddNTimes pop bc .next3 ld a, [hli] ;HL: when this was taken ld l, [hl] ld h, a ;*HL = attacker attack or b ;is either attack or defense high byte nonzero? jr z, .next4 srl b ;[defense] BC /= 4 [this is just so it fits into a single byte, 10bits max] rr c srl b rr c srl h ;[attack] HL /= 4 [to apply equal scaling] rr l srl h rr l ld a, l or h jr nz, .next4 ;is HL result zero? inc l ;minimum HL = 1 .next4 ld b, l ;*B = attack [possibly scaled] [C contains defense] ld a, [$d022] ;*E = level ld e, a ld a, [$d05e] ;critical hit? and a jr z, .next5 sla e ;double level if it was a critical hit .next5 ld a, 1 ;return Z = 0 and a ret Func_3de75: ; 3de75 (f:5e75) ld hl, W_DAMAGE ; $d0d7 xor a ld [hli], a ld [hl], a ld hl, W_ENEMYMOVEPOWER ; $cfce ld a, [hli] ld d, a and a ret z ld a, [hl] cp $14 jr nc, .asm_3debc ld hl, W_PLAYERMONDEF ld a, [hli] ld b, a ld c, [hl] ld a, [W_PLAYERBATTSTATUS3] ; $d064 bit 2, a jr z, .asm_3de98 sla c rl b .asm_3de98 ld hl, W_ENEMYMONATTACK ld a, [$d05e] and a jr z, .asm_3deef ld hl, W_PARTYMON1_DEFENSE ; $d191 ld a, [wPlayerMonNumber] ; $cc2f ld bc, $2c call AddNTimes ld a, [hli] ld b, a ld c, [hl] push bc ld c, $2 call Func_3df1c ld hl, $ff97 pop bc jr .asm_3deef .asm_3debc ld hl, W_PLAYERMONSPECIAL ld a, [hli] ld b, a ld c, [hl] ld a, [W_PLAYERBATTSTATUS3] ; $d064 bit 1, a jr z, .asm_3decd sla c rl b .asm_3decd ld hl, W_ENEMYMONSPECIAL ; $cffc ld a, [$d05e] and a jr z, .asm_3deef ld hl, W_PARTYMON1_SPECIAL ; $d195 ld a, [wPlayerMonNumber] ; $cc2f ld bc, $2c call AddNTimes ld a, [hli] ld b, a ld c, [hl] push bc ld c, $5 call Func_3df1c ld hl, $ff97 pop bc .asm_3deef ld a, [hli] ld l, [hl] ld h, a or b jr z, .asm_3df0a srl b rr c srl b rr c srl h rr l srl h rr l ld a, l or h jr nz, .asm_3df0a inc l .asm_3df0a ld b, l ld a, [W_ENEMYMONLEVEL] ; $cff3 ld e, a ld a, [$d05e] and a jr z, .asm_3df17 sla e .asm_3df17 ld a, $1 and a and a ret Func_3df1c: ; 3df1c (f:5f1c) push de push bc ld a, [W_ISLINKBATTLE] ; $d12b cp $4 jr nz, .asm_3df40 ld hl, $d8c6 dec c sla c ld b, $0 add hl, bc ld a, [W_ENEMYMONNUMBER] ; $cfe8 ld bc, $2c call AddNTimes ld a, [hli] ld [$FF00+$97], a ld a, [hl] ld [$FF00+$98], a pop bc pop de ret .asm_3df40 ld a, [W_ENEMYMONLEVEL] ; $cff3 ld [W_CURENEMYLVL], a ; $d127 ld a, [$cfe5] ld [$d0b5], a call GetMonHeader ld hl, $cff1 ld de, $cfaf ld a, [hli] ld [de], a inc de ld a, [hl] ld [de], a pop bc ld b, $0 ld hl, $cfa4 call CalcStat pop de ret MoreCalculateDamage: ; 3df65 (f:5f65) ; input: ; b: attack ; c: opponent defense ; d: base power ; e: level ld a, [$ff00+$f3] ; whose turn? and a ld a, [W_PLAYERMOVEEFFECT] jr z, .effect ld a, [$cfcd] .effect ; EXPLODE_EFFECT halves defense. cp a, EXPLODE_EFFECT jr nz, .ok srl c jr nz, .ok inc c ; ...with a minimum value of 1 (used as a divisor later on) .ok ; Multi-hit attacks may or may not have 0 bp. cp a, TWO_TO_FIVE_ATTACKS_EFFECT jr z, .skipbp cp a, $1e jr z, .skipbp ; Calculate OHKO damage based on remaining HP. cp a, OHKO_EFFECT jp z, Func_3e016 ; Don't calculate damage for moves that don't do any. ld a, d ; base power and a ret z .skipbp xor a ld hl, H_DIVIDEND ldi [hl], a ldi [hl], a ld [hl], a ; Multiply level by 2 ld a, e ; level add a jr nc, .nc push af ld a, 1 ld [hl], a pop af .nc inc hl ldi [hl], a ; Divide by 5 ld a, 5 ldd [hl], a push bc ld b, 4 call Divide pop bc ; Add 2 inc [hl] inc [hl] inc hl ; multiplier ; Multiply by attack base power ld [hl], d call Multiply ; Multiply by attack stat ld [hl], b call Multiply ; Divide by defender's defense stat ld [hl], c ld b, 4 call Divide ; Divide by 50 ld [hl], 50 ld b, 4 call Divide ld hl, W_DAMAGE ld b, [hl] ld a, [H_QUOTIENT + 3] add b ld [H_QUOTIENT + 3], a jr nc, .asm_3dfd0 ld a, [H_QUOTIENT + 2] inc a ld [H_QUOTIENT + 2], a and a jr z, .asm_3e004 .asm_3dfd0 ld a, [H_QUOTIENT] ld b, a ld a, [H_QUOTIENT + 1] or a jr nz, .asm_3e004 ld a, [H_QUOTIENT + 2] cp 998 / $100 jr c, .asm_3dfe8 cp 998 / $100 + 1 jr nc, .asm_3e004 ld a, [H_QUOTIENT + 3] cp 998 % $100 jr nc, .asm_3e004 .asm_3dfe8 inc hl ld a, [H_QUOTIENT + 3] ld b, [hl] add b ld [hld], a ld a, [H_QUOTIENT + 2] ld b, [hl] adc b ld [hl], a jr c, .asm_3e004 ld a, [hl] cp 998 / $100 jr c, .asm_3e00a cp 998 / $100 + 1 jr nc, .asm_3e004 inc hl ld a, [hld] cp 998 % $100 jr c, .asm_3e00a .asm_3e004 ld a, 997 / $100 ld [hli], a ld a, 997 % $100 ld [hld], a .asm_3e00a inc hl ld a, [hl] add 2 ld [hld], a jr nc, .done inc [hl] .done ld a, 1 and a ret Func_3e016: ; 3e016 (f:6016) call Func_3f132 ld a, [W_MOVEMISSED] ; $d05f dec a ret UnusedHighCriticalMoves: ; 3e01e (f:601e) db KARATE_CHOP db RAZOR_LEAF db CRABHAMMER db SLASH db $FF ; 3e023 ; determines if attack is a critical hit ; azure heights claims "the fastest pokémon (who are,not coincidentally, ; among the most popular) tend to CH about 20 to 25% of the time." CriticalHitTest: ; 3e023 (f:6023) xor a ld [$d05e], a ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld a, [$cfe5] jr nz, .asm_3e032 ld a, [W_PLAYERMONID] .asm_3e032 ld [$d0b5], a call GetMonHeader ld a, [W_MONHBASESPEED] ld b, a srl b ; (effective (base speed/2)) ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld hl, W_PLAYERMOVEPOWER ; $cfd4 ld de, W_PLAYERBATTSTATUS2 ; $d063 jr z, .calcCriticalHitProbability ld hl, W_ENEMYMOVEPOWER ; $cfce ld de, W_ENEMYBATTSTATUS2 ; $d068 .calcCriticalHitProbability ; 0x3e04f ld a, [hld] ; read base power from RAM and a ret z ; do nothing if zero dec hl ld c, [hl] ; read move id ld a, [de] bit 2, a ; test for focus energy jr nz, .focusEnergyUsed ; bug: using focus energy causes a shift to the right instead of left, ; resulting in 1/4 the usual crit chance sla b ; (effective (base speed/2)*2) jr nc, .noFocusEnergyUsed ld b, $ff ; cap at 255/256 jr .noFocusEnergyUsed .focusEnergyUsed srl b .noFocusEnergyUsed ld hl, HighCriticalMoves ; table of high critical hit moves .Loop ld a, [hli] ; read move from move table cp c ; does it match the move about to be used? jr z, .HighCritical ; if so, the move about to be used is a high critical hit ratio move inc a ; move on to the next move, FF terminates loop jr nz, .Loop ; check the next move in HighCriticalMoves srl b ; /2 for regular move (effective (base speed / 2)) jr .SkipHighCritical ; continue as a normal move .HighCritical sla b ; *2 for high critical hit moves jr nc, .noCarry ld b, $ff ; cap at 255/256 .noCarry sla b ; *4 for high critical move (effective (base speed/2)*8)) jr nc, .SkipHighCritical ld b, $ff .SkipHighCritical call GenRandomInBattle ; generates a random value, in "a" rlc a rlc a rlc a cp b ; check a against calculated crit rate ret nc ; no critical hit if no borrow ld a, $1 ld [$d05e], a ; set critical hit flag ret ; high critical hit moves HighCriticalMoves: ; 3e08e (f:608e) db KARATE_CHOP db RAZOR_LEAF db CRABHAMMER db SLASH db $FF ; function to determine if Counter hits and if so, how much damage it does HandleCounterMove: ; 3e093 (f:6093) ld a,[H_WHOSETURN] ; whose turn and a ; player's turn ld hl,wEnemySelectedMove ld de,W_ENEMYMOVEPOWER ld a,[wPlayerSelectedMove] jr z,.next ; enemy's turn ld hl,wPlayerSelectedMove ld de,W_PLAYERMOVEPOWER ld a,[wEnemySelectedMove] .next cp a,COUNTER ret nz ; return if not using Counter ld a,$01 ld [W_MOVEMISSED],a ; initialize the move missed variable to true (it is set to false below if the move hits) ld a,[hl] cp a,COUNTER ret z ; if the target also used Counter, miss ld a,[de] and a ret z ; if the move the target used has 0 power, miss ; check if the move the target used was Normal or Fighting type inc de ld a,[de] and a ; normal type jr z,.counterableType cp a,FIGHTING jr z,.counterableType ; if the move wasn't Normal or Fighting type, miss xor a ret .counterableType ld hl,W_DAMAGE ld a,[hli] or [hl] ret z ; Counter misses if the target did no damage to the Counter user ; double the damage that the target did to the Counter user ld a,[hl] add a ldd [hl],a ld a,[hl] adc a ld [hl],a jr nc,.noCarry ; damage is capped at 0xFFFF ld a,$ff ld [hli],a ld [hl],a .noCarry xor a ld [W_MOVEMISSED],a call MoveHitTest ; do the normal move hit test in addition to Counter's special rules xor a ret ApplyAttackToEnemyPokemon: ; 3e0df (f:60df) ld a,[W_PLAYERMOVEEFFECT] cp a,OHKO_EFFECT jr z,ApplyDamageToEnemyPokemon cp a,SUPER_FANG_EFFECT jr z,.superFangEffect cp a,SPECIAL_DAMAGE_EFFECT jr z,.specialDamage ld a,[W_PLAYERMOVEPOWER] and a jp z,ApplyAttackToEnemyPokemonDone jr ApplyDamageToEnemyPokemon .superFangEffect ; set the damage to half the target's HP ld hl,W_ENEMYMONCURHP ld de,W_DAMAGE ld a,[hli] srl a ld [de],a inc de ld b,a ld a,[hl] rr a ld [de],a or b jr nz,ApplyDamageToEnemyPokemon ; make sure Super Fang's damage is always at least 1 ld a,$01 ld [de],a jr ApplyDamageToEnemyPokemon .specialDamage ld hl,W_PLAYERMONLEVEL ld a,[hl] ld b,a ld a,[W_PLAYERMOVENUM] cp a,SEISMIC_TOSS jr z,.storeDamage cp a,NIGHT_SHADE jr z,.storeDamage ld b,SONICBOOM_DAMAGE cp a,SONICBOOM jr z,.storeDamage ld b,DRAGON_RAGE_DAMAGE cp a,DRAGON_RAGE jr z,.storeDamage ; Psywave ld a,[hl] ld b,a srl a add b ld b,a ; b = level * 1.5 ; loop until a random number in the range [1, b) is found .loop call GenRandomInBattle ; random number and a jr z,.loop cp b jr nc,.loop ld b,a .storeDamage ld hl,W_DAMAGE xor a ld [hli],a ld a,b ld [hl],a ApplyDamageToEnemyPokemon: ; 3e142 (f:6142) ld hl,W_DAMAGE ld a,[hli] ld b,a ld a,[hl] or b jr z,ApplyAttackToEnemyPokemonDone ; we're done if damage is 0 ld a,[W_ENEMYBATTSTATUS2] bit 4,a ; does the enemy have a substitute? jp nz,AttackSubstitute ; subtract the damage from the pokemon's current HP ; also, save the current HP at wHPBarOldHP ld a,[hld] ld b,a ld a,[W_ENEMYMONCURHP + 1] ld [wHPBarOldHP],a sub b ld [W_ENEMYMONCURHP + 1],a ld a,[hl] ld b,a ld a,[W_ENEMYMONCURHP] ld [wHPBarOldHP+1],a sbc b ld [W_ENEMYMONCURHP],a jr nc,.animateHpBar ; if more damage was done than the current HP, zero the HP and set the damage ; equal to how much HP the pokemon had before the attack ld a,[wHPBarOldHP+1] ld [hli],a ld a,[wHPBarOldHP] ld [hl],a xor a ld hl,W_ENEMYMONCURHP ld [hli],a ld [hl],a .animateHpBar ld hl,W_ENEMYMONMAXHP ld a,[hli] ld [wHPBarMaxHP+1],a ld a,[hl] ld [wHPBarMaxHP],a ld hl,W_ENEMYMONCURHP ld a,[hli] ld [wHPBarNewHP+1],a ld a,[hl] ld [wHPBarNewHP],a FuncCoord 2, 2 ; $c3ca ld hl,Coord xor a ld [$cf94],a ld a,$48 call Predef ; animate the HP bar shortening ApplyAttackToEnemyPokemonDone: ; 3e19d (f:619d) jp Func_3cd5a ; redraw pokemon names and HP bars ApplyAttackToPlayerPokemon: ; 3e1a0 (f:61a0) ld a,[W_ENEMYMOVEEFFECT] cp a,OHKO_EFFECT jr z,ApplyDamageToPlayerPokemon cp a,SUPER_FANG_EFFECT jr z,.superFangEffect cp a,SPECIAL_DAMAGE_EFFECT jr z,.specialDamage ld a,[W_ENEMYMOVEPOWER] and a jp z,ApplyAttackToPlayerPokemonDone jr ApplyDamageToPlayerPokemon .superFangEffect ; set the damage to half the target's HP ld hl,W_PLAYERMONCURHP ld de,W_DAMAGE ld a,[hli] srl a ld [de],a inc de ld b,a ld a,[hl] rr a ld [de],a or b jr nz,ApplyDamageToPlayerPokemon ; make sure Super Fang's damage is always at least 1 ld a,$01 ld [de],a jr ApplyDamageToPlayerPokemon .specialDamage ld hl,W_ENEMYMONLEVEL ld a,[hl] ld b,a ld a,[W_ENEMYMOVENUM] cp a,SEISMIC_TOSS jr z,.storeDamage cp a,NIGHT_SHADE jr z,.storeDamage ld b,SONICBOOM_DAMAGE cp a,SONICBOOM jr z,.storeDamage ld b,DRAGON_RAGE_DAMAGE cp a,DRAGON_RAGE jr z,.storeDamage ; Psywave ld a,[hl] ld b,a srl a add b ld b,a ; b = attacker's level * 1.5 ; loop until a random number in the range [0, b) is found ; this differs from the range when the player attacks, which is [1, b) ; it's possible for the enemy to do 0 damage with Psywave, but the player always does at least 1 damage .loop call GenRandomInBattle ; random number cp b jr nc,.loop ld b,a .storeDamage ld hl,W_DAMAGE xor a ld [hli],a ld a,b ld [hl],a ApplyDamageToPlayerPokemon: ; 3e200 (f:6200) ld hl,W_DAMAGE ld a,[hli] ld b,a ld a,[hl] or b jr z,ApplyAttackToPlayerPokemonDone ; we're done if damage is 0 ld a,[W_PLAYERBATTSTATUS2] bit 4,a ; does the player have a substitute? jp nz,AttackSubstitute ; subtract the damage from the pokemon's current HP ; also, save the current HP at wHPBarOldHP and the new HP at wHPBarNewHP ld a,[hld] ld b,a ld a,[W_PLAYERMONCURHP + 1] ld [wHPBarOldHP],a sub b ld [W_PLAYERMONCURHP + 1],a ld [wHPBarNewHP],a ld b,[hl] ld a,[W_PLAYERMONCURHP] ld [wHPBarOldHP+1],a sbc b ld [W_PLAYERMONCURHP],a ld [wHPBarNewHP+1],a jr nc,.animateHpBar ; if more damage was done than the current HP, zero the HP and set the damage ; equal to how much HP the pokemon had before the attack ld a,[wHPBarOldHP+1] ld [hli],a ld a,[wHPBarOldHP] ld [hl],a xor a ld hl,W_PLAYERMONCURHP ld [hli],a ld [hl],a ld hl,wHPBarNewHP ld [hli],a ld [hl],a .animateHpBar ld hl,W_PLAYERMONMAXHP ld a,[hli] ld [wHPBarMaxHP+1],a ld a,[hl] ld [wHPBarMaxHP],a FuncCoord 10, 9 ; $c45e ld hl,Coord ld a,$01 ld [$cf94],a ld a,$48 call Predef ; animate the HP bar shortening ApplyAttackToPlayerPokemonDone jp Func_3cd5a ; redraw pokemon names and HP bars AttackSubstitute: ; 3e25e (f:625e) ld hl,SubstituteTookDamageText call PrintText ; values for player turn ld de,wEnemySubstituteHP ld bc,W_ENEMYBATTSTATUS2 ld a,[H_WHOSETURN] and a jr z,.applyDamageToSubstitute ; values for enemy turn ld de,wPlayerSubstituteHP ld bc,W_PLAYERBATTSTATUS2 .applyDamageToSubstitute ld hl,W_DAMAGE ld a,[hli] and a jr nz,.substituteBroke ; damage > 0xFF always breaks substitutes ; subtract damage from HP of substitute ld a,[de] sub [hl] ld [de],a ret nc .substituteBroke ld h,b ld l,c res 4,[hl] ; unset the substitute bit ld hl,SubstituteBrokeText call PrintText ; flip whose turn it is for the next function call ld a,[H_WHOSETURN] xor a,$01 ld [H_WHOSETURN],a ld hl, Func_79747 ld b, BANK(Func_79747) ; animate the substitute breaking call Bankswitch ; substitute ; flip the turn back to the way it was ld a,[H_WHOSETURN] xor a,$01 ld [H_WHOSETURN],a ld hl,W_PLAYERMOVEEFFECT ; value for player's turn and a jr z,.nullifyEffect ld hl,W_ENEMYMOVEEFFECT ; value for enemy's turn .nullifyEffect xor a ld [hl],a ; zero the effect of the attacker's move jp Func_3cd5a ; redraw pokemon names and HP bars SubstituteTookDamageText: ; 3e2ac (f:62ac) TX_FAR _SubstituteTookDamageText db "@" SubstituteBrokeText: ; 3e2b1 (f:62b1) TX_FAR _SubstituteBrokeText db "@" ; this function raises the attack modifier of a pokemon using Rage when that pokemon is attacked HandleBuildingRage: ; 3e2b6 (f:62b6) ; values for the player turn ld hl,W_ENEMYBATTSTATUS2 ld de,wEnemyMonStatMods ld bc,W_ENEMYMOVENUM ld a,[H_WHOSETURN] and a jr z,.next ; values for the enemy turn ld hl,W_PLAYERBATTSTATUS2 ld de,wPlayerMonStatMods ld bc,W_PLAYERMOVENUM .next bit 6,[hl] ; is the pokemon being attacked under the effect of Rage? ret z ; return if not ld a,[de] cp a,$0d ; maximum stat modifier value ret z ; return if attack modifier is already maxed ld a,[H_WHOSETURN] xor a,$01 ; flip turn for the stat modifier raising function ld [H_WHOSETURN],a ; change the target pokemon's move to $00 and the effect to the one ; that causes the attack modifier to go up one stage ld h,b ld l,c ld [hl],$00 ; null move number inc hl ld [hl],ATTACK_UP1_EFFECT push hl ld hl,BuildingRageText call PrintText call Func_3f428 ; stat modifier raising function pop hl xor a ldd [hl],a ; null move effect ld a,RAGE ld [hl],a ; restore the target pokemon's move number to Rage ld a,[H_WHOSETURN] xor a,$01 ; flip turn back to the way it was ld [H_WHOSETURN],a ret BuildingRageText: ; 3e2f8 (f:62f8) TX_FAR _BuildingRageText db "@" ; copy last move for Mirror Move ; sets zero flag on failure and unsets zero flag on success MirrorMoveCopyMove: ; 3e2fd (f:62fd) ld a,[H_WHOSETURN] and a ; values for player turn ld a,[$ccf2] ld hl,wPlayerSelectedMove ld de,W_PLAYERMOVENUM jr z,.next ; values for enemy turn ld a,[$ccf1] ld de,W_ENEMYMOVENUM ld hl,wEnemySelectedMove .next ld [hl],a cp a,MIRROR_MOVE ; did the target pokemon also use Mirror Move? jr z,.mirrorMoveFailed and a ; null move? jr nz,ReloadMoveData .mirrorMoveFailed ; Mirror Move fails on itself and null moves ld hl,MirrorMoveFailedText call PrintText xor a ret MirrorMoveFailedText: ; 3e324 (f:6324) TX_FAR _MirrorMoveFailedText db "@" ; function used to reload move data for moves like Mirror Move and Metronome ReloadMoveData: ; 3e329 (f:6329) ld [$d11e],a dec a ld hl,Moves ld bc,$0006 call AddNTimes ld a,BANK(Moves) call FarCopyData ; copy the move's stats call IncrementMovePP ; the follow two function calls are used to reload the move name call GetMoveName call CopyStringToCF4B ld a,$01 and a ret ; function that picks a random move for metronome MetronomePickMove: ; 3e348 (f:6348) xor a ld [$cc5b],a ld a,METRONOME call PlayMoveAnimation ; play Metronome's animation ; values for player turn ld de,W_PLAYERMOVENUM ld hl,wPlayerSelectedMove ld a,[H_WHOSETURN] and a jr z,.pickMoveLoop ; values for enemy turn ld de,W_ENEMYMOVENUM ld hl,wEnemySelectedMove ; loop to pick a random number in the range [1, $a5) to be the move used by Metronome .pickMoveLoop call GenRandomInBattle ; random number and a jr z,.pickMoveLoop cp a,$a5 ; max normal move number + 1 (this is Struggle's move number) jr nc,.pickMoveLoop cp a,METRONOME jr z,.pickMoveLoop ld [hl],a jr ReloadMoveData ; this function increments the current move's PP ; it's used to prevent moves that run another move within the same turn ; (like Mirror Move and Metronome) from losing 2 PP IncrementMovePP: ; 3e373 (f:6373) ld a,[H_WHOSETURN] and a ; values for player turn ld hl,W_PLAYERMONPP ld de,W_PARTYMON1_MOVE1PP ld a,[wPlayerMoveListIndex] jr z,.next ; values for enemy turn ld hl,W_ENEMYMONPP ld de,$d8c1 ; enemy party pokemon 1 PP ld a,[wEnemyMoveListIndex] .next ld b,$00 ld c,a add hl,bc inc [hl] ; increment PP in the currently battling pokemon memory location ld h,d ld l,e add hl,bc ld a,[H_WHOSETURN] and a ld a,[wPlayerMonNumber] ; value for player turn jr z,.next2 ld a,[W_ENEMYMONNUMBER] ; value for enemy turn .next2 ld bc,$002c call AddNTimes inc [hl] ; increment PP in the party memory location ret ; function to adjust the base damage of an attack to account for type effectiveness AdjustDamageForMoveType: ; 3e3a5 (f:63a5) ; values for player turn ld hl,W_PLAYERMONTYPES ld a,[hli] ld b,a ; b = type 1 of attacker ld c,[hl] ; c = type 2 of attacker ld hl,W_ENEMYMONTYPES ld a,[hli] ld d,a ; d = type 1 of defender ld e,[hl] ; e = type 2 of defender ld a,[W_PLAYERMOVETYPE] ld [$d11e],a ld a,[H_WHOSETURN] and a jr z,.next ; values for enemy turn ld hl,W_ENEMYMONTYPES ld a,[hli] ld b,a ; b = type 1 of attacker ld c,[hl] ; c = type 2 of attacker ld hl,W_PLAYERMONTYPES ld a,[hli] ld d,a ; d = type 1 of defender ld e,[hl] ; e = type 2 of defender ld a,[W_ENEMYMOVETYPE] ld [$d11e],a .next ld a,[$d11e] ; move type cp b ; does the move type match type 1 of the attacker? jr z,.sameTypeAttackBonus cp c ; does the move type match type 2 of the attacker? jr z,.sameTypeAttackBonus jr .skipSameTypeAttackBonus .sameTypeAttackBonus ; if the move type matches one of the attacker's types ld hl,W_DAMAGE + 1 ld a,[hld] ld h,[hl] ld l,a ; hl = damage ld b,h ld c,l ; bc = damage srl b rr c ; bc = floor(0.5 * damage) add hl,bc ; hl = floor(1.5 * damage) ; store damage ld a,h ld [W_DAMAGE],a ld a,l ld [W_DAMAGE + 1],a ld hl,$d05b set 7,[hl] .skipSameTypeAttackBonus ld a,[$d11e] ld b,a ; b = move type ld hl,TypeEffects .loop ld a,[hli] ; a = "attacking type" of the current type pair cp a,$ff jr z,.done cp b ; does move type match "attacking type"? jr nz,.nextTypePair ld a,[hl] ; a = "defending type" of the current type pair cp d ; does type 1 of defender match "defending type"? jr z,.matchingPairFound cp e ; does type 2 of defender match "defending type"? jr z,.matchingPairFound jr .nextTypePair .matchingPairFound ; if the move type matches the "attacking type" and one of the defender's types matches the "defending type" push hl push bc inc hl ld a,[$d05b] and a,$80 ld b,a ld a,[hl] ; a = damage multiplier ld [H_MULTIPLIER],a add b ld [$d05b],a xor a ld [H_MULTIPLICAND],a ld hl,W_DAMAGE ld a,[hli] ld [H_MULTIPLICAND + 1],a ld a,[hld] ld [H_MULTIPLICAND + 2],a call Multiply ld a,10 ld [H_DIVISOR],a ld b,$04 call Divide ld a,[H_QUOTIENT + 2] ld [hli],a ld b,a ld a,[H_QUOTIENT + 3] ld [hl],a or b ; is damage 0? jr nz,.skipTypeImmunity .typeImmunity ; if damage is 0, make the move miss inc a ld [W_MOVEMISSED],a .skipTypeImmunity pop bc pop hl .nextTypePair inc hl inc hl jp .loop .done ret ; function to tell how effective the type of an enemy attack is on the player's current pokemon ; this doesn't take into account the effects that dual types can have ; (e.g. 4x weakness / resistance, weaknesses and resistances canceling) ; the result is stored in [$D11E] ; ($05 is not very effective, $10 is neutral, $14 is super effective) ; as far is can tell, this is only used once in some AI code to help decide which move to use AIGetTypeEffectiveness: ; 3e449 (f:6449) ld a,[W_ENEMYMOVETYPE] ld d,a ; d = type of enemy move ld hl,W_PLAYERMONTYPES ld b,[hl] ; b = type 1 of player's pokemon inc hl ld c,[hl] ; c = type 2 of player's pokemon ld a,$10 ld [$d11e],a ; initialize [$D11E] to neutral effectiveness ld hl,TypeEffects .loop ld a,[hli] cp a,$ff ret z cp d ; match the type of the move jr nz,.nextTypePair1 ld a,[hli] cp b ; match with type 1 of pokemon jr z,.done cp c ; or match with type 2 of pokemon jr z,.done jr .nextTypePair2 .nextTypePair1 inc hl .nextTypePair2 inc hl jr .loop .done ld a,[hl] ld [$d11e],a ; store damage multiplier ret TypeEffects: ; 3e474 (f:6474) ; format: attacking type, defending type, damage multiplier ; the multiplier is a (decimal) fixed-point number: ; 20 is ×2.0 ; 05 is ×0.5 ; 00 is ×0 db WATER,FIRE,20 db FIRE,GRASS,20 db FIRE,ICE,20 db GRASS,WATER,20 db ELECTRIC,WATER,20 db WATER,ROCK,20 db GROUND,FLYING,00 db WATER,WATER,05 db FIRE,FIRE,05 db ELECTRIC,ELECTRIC,05 db ICE,ICE,05 db GRASS,GRASS,05 db PSYCHIC,PSYCHIC,05 db FIRE,WATER,05 db GRASS,FIRE,05 db WATER,GRASS,05 db ELECTRIC,GRASS,05 db NORMAL,ROCK,05 db NORMAL,GHOST,00 db GHOST,GHOST,20 db FIRE,BUG,20 db FIRE,ROCK,05 db WATER,GROUND,20 db ELECTRIC,GROUND,00 db ELECTRIC,FLYING,20 db GRASS,GROUND,20 db GRASS,BUG,05 db GRASS,POISON,05 db GRASS,ROCK,20 db GRASS,FLYING,05 db ICE,WATER,05 db ICE,GRASS,20 db ICE,GROUND,20 db ICE,FLYING,20 db FIGHTING,NORMAL,20 db FIGHTING,POISON,05 db FIGHTING,FLYING,05 db FIGHTING,PSYCHIC,05 db FIGHTING,BUG,05 db FIGHTING,ROCK,20 db FIGHTING,ICE,20 db FIGHTING,GHOST,00 db POISON,GRASS,20 db POISON,POISON,05 db POISON,GROUND,05 db POISON,BUG,20 db POISON,ROCK,05 db POISON,GHOST,05 db GROUND,FIRE,20 db GROUND,ELECTRIC,20 db GROUND,GRASS,05 db GROUND,BUG,05 db GROUND,ROCK,20 db GROUND,POISON,20 db FLYING,ELECTRIC,05 db FLYING,FIGHTING,20 db FLYING,BUG,20 db FLYING,GRASS,20 db FLYING,ROCK,05 db PSYCHIC,FIGHTING,20 db PSYCHIC,POISON,20 db BUG,FIRE,05 db BUG,GRASS,20 db BUG,FIGHTING,05 db BUG,FLYING,05 db BUG,PSYCHIC,20 db BUG,GHOST,05 db BUG,POISON,20 db ROCK,FIRE,20 db ROCK,FIGHTING,05 db ROCK,GROUND,05 db ROCK,FLYING,20 db ROCK,BUG,20 db ROCK,ICE,20 db GHOST,NORMAL,00 db GHOST,PSYCHIC,00 db FIRE,DRAGON,05 db WATER,DRAGON,05 db ELECTRIC,DRAGON,05 db GRASS,DRAGON,05 db ICE,DRAGON,20 db DRAGON,DRAGON,20 db $FF ; some tests that need to pass for a move to hit MoveHitTest: ; 3e56b (f:656b) ; player's turn ld hl,W_ENEMYBATTSTATUS1 ld de,W_PLAYERMOVEEFFECT ld bc,W_ENEMYMONSTATUS ld a,[H_WHOSETURN] and a jr z,.dreamEaterCheck ; enemy's turn ld hl,W_PLAYERBATTSTATUS1 ld de,W_ENEMYMOVEEFFECT ld bc,W_PLAYERMONSTATUS .dreamEaterCheck ld a,[de] cp a,DREAM_EATER_EFFECT jr nz,.swiftCheck ld a,[bc] and a,$07 ; is the target pokemon sleeping? jp z,.moveMissed .swiftCheck ld a,[de] cp a,SWIFT_EFFECT ret z ; Swift never misses (interestingly, Azure Heights lists this is a myth, but it appears to be true) call CheckTargetSubstitute ; substitute check (note that this overwrites a) jr z,.checkForDigOrFlyStatus ; this code is buggy. it's supposed to prevent HP draining moves from working on substitutes. ; since $7b79 overwrites a with either $00 or $01, it never works. cp a,DRAIN_HP_EFFECT ; $03 jp z,.moveMissed cp a,DREAM_EATER_EFFECT ; $08 jp z,.moveMissed .checkForDigOrFlyStatus bit 6,[hl] jp nz,.moveMissed ld a,[H_WHOSETURN] and a jr nz,.enemyTurn .playerTurn ; this checks if the move effect is disallowed by mist ld a,[W_PLAYERMOVEEFFECT] cp a,$12 jr c,.skipEnemyMistCheck cp a,$1a jr c,.enemyMistCheck cp a,$3a jr c,.skipEnemyMistCheck cp a,$42 jr c,.enemyMistCheck jr .skipEnemyMistCheck .enemyMistCheck ; if move effect is from $12 to $19 inclusive or $3a to $41 inclusive ; i.e. the following moves ; GROWL, TAIL WHIP, LEER, STRING SHOT, SAND-ATTACK, SMOKESCREEN, KINESIS, ; FLASH, CONVERSION, HAZE*, SCREECH, LIGHT SCREEN*, REFLECT* ; the moves that are marked with an asterisk are not affected since this ; function is not called when those moves are used ; XXX are there are any others like those three? ld a,[W_ENEMYBATTSTATUS2] bit 1,a jp nz,.moveMissed .skipEnemyMistCheck ld a,[W_PLAYERBATTSTATUS2] bit 0,a ; is the player using X Accuracy? ret nz ; if so, always hit regardless of accuracy/evasion jr .calcHitChance .enemyTurn ld a,[W_ENEMYMOVEEFFECT] cp a,$12 jr c,.skipPlayerMistCheck cp a,$1a jr c,.playerMistCheck cp a,$3a jr c,.skipPlayerMistCheck cp a,$42 jr c,.playerMistCheck jr .skipPlayerMistCheck .playerMistCheck ; similar to enemy mist check ld a,[W_PLAYERBATTSTATUS2] bit 1,a jp nz,.moveMissed .skipPlayerMistCheck ld a,[W_ENEMYBATTSTATUS2] bit 0,a ; is the enemy using X Accuracy? ret nz ; if so, always hit regardless of accuracy/evasion .calcHitChance call CalcHitChance ; scale the move accuracy according to attacker's accuracy and target's evasion ld a,[W_PLAYERMOVEACCURACY] ld b,a ld a,[H_WHOSETURN] and a jr z,.doAccuracyCheck ld a,[W_ENEMYMOVEACCURACY] ld b,a .doAccuracyCheck ; if the random number generated is greater than or equal to the scaled accuracy, the move misses ; note that this means that even the highest accuracy is still just a 255/256 chance, not 100% call GenRandomInBattle ; random number cp b jr nc,.moveMissed ret .moveMissed xor a ld hl,W_DAMAGE ; zero the damage ld [hli],a ld [hl],a inc a ld [W_MOVEMISSED],a ld a,[H_WHOSETURN] and a jr z,.playerTurn2 .enemyTurn2 ld hl,W_ENEMYBATTSTATUS1 res 5,[hl] ; end multi-turn attack e.g. wrap ret .playerTurn2 ld hl,W_PLAYERBATTSTATUS1 res 5,[hl] ; end multi-turn attack e.g. wrap ret ; values for player turn CalcHitChance: ; 3e624 (f:6624) ld hl,W_PLAYERMOVEACCURACY ld a,[H_WHOSETURN] and a ld a,[wPlayerMonAccuracyMod] ld b,a ld a,[wEnemyMonEvasionMod] ld c,a jr z,.next ; values for enemy turn ld hl,W_ENEMYMOVEACCURACY ld a,[wEnemyMonAccuracyMod] ld b,a ld a,[wPlayerMonEvasionMod] ld c,a .next ld a,$0e sub c ld c,a ; c = 14 - EVASIONMOD (this "reflects" the value over 7, so that an increase in the target's evasion decreases the hit chance instead of increasing the hit chance) ; zero the high bytes of the multiplicand xor a ld [H_MULTIPLICAND],a ld [H_MULTIPLICAND + 1],a ld a,[hl] ld [H_MULTIPLICAND + 2],a ; set multiplicand to move accuracy push hl ld d,$02 ; loop has two iterations ; loop to do the calculations, the first iteration multiplies by the accuracy ratio and the second iteration multiplies by the evasion ratio .loop push bc ld hl, StatModifierRatios ; $76cb ; stat modifier ratios dec b sla b ld c,b ld b,$00 add hl,bc ; hl = address of stat modifier ratio pop bc ld a,[hli] ld [H_MULTIPLIER],a ; set multiplier to the numerator of the ratio call Multiply ld a,[hl] ld [H_DIVISOR],a ; set divisor to the the denominator of the ratio (the dividend is the product of the previous multiplication) ld b,$04 ; number of bytes in the dividend call Divide ld a,[H_QUOTIENT + 3] ld b,a ld a,[H_QUOTIENT + 2] or b jp nz,.nextCalculation ; make sure the result is always at least one ld [H_QUOTIENT + 2],a ld a,$01 ld [H_QUOTIENT + 3],a .nextCalculation ld b,c dec d jr nz,.loop ld a,[H_QUOTIENT + 2] and a ; is the calculated hit chance over 0xFF? ld a,[H_QUOTIENT + 3] jr z,.storeAccuracy ; if calculated hit chance over 0xFF ld a,$ff ; set the hit chance to 0xFF .storeAccuracy pop hl ld [hl],a ; store the hit chance in the move accuracy variable ret Func_3e687: ; 3e687 (f:6687) ld hl, W_DAMAGE ; $d0d7 ld a, [hli] and a jr nz, .asm_3e692 ld a, [hl] cp $2 ret c .asm_3e692 xor a ld [H_NUMTOPRINT], a ; $FF00+$96 (aliases: H_MULTIPLICAND) dec hl ld a, [hli] ld [$FF00+$97], a ld a, [hl] ld [$FF00+$98], a .asm_3e69c call GenRandomInBattle rrca cp $d9 jr c, .asm_3e69c ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) call Multiply ld a, $ff ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) ld b, $4 call Divide ld a, [$FF00+$97] ld hl, W_DAMAGE ; $d0d7 ld [hli], a ld a, [$FF00+$98] ld [hl], a ret Func_3e6bc: ; 3e6bc (f:66bc) ld a, [wEnemySelectedMove] ; $ccdd inc a jp z, Func_3e88c call Func_3d811 jp z, Func_3e88c ld a, [W_ISLINKBATTLE] ; $d12b cp $4 jr nz, .asm_3e6dc ld b, $1 ld a, [$cc3e] cp $e jr z, .asm_3e6dc cp $4 ret nc .asm_3e6dc ld hl, $ccd5 inc [hl] xor a ld [W_MOVEMISSED], a ; $d05f ld [$ccf4], a ld a, $a ld [$d05b], a call Func_3e88f jr nz, .asm_3e6f2 jp [hl] .asm_3e6f2 ld hl, W_ENEMYBATTSTATUS1 ; $d067 bit 4, [hl] jr nz, asm_3e70b call GetCurrentMove Func_3e6fc: ; 3e6fc (f:66fc) ld a, [W_ENEMYMOVEEFFECT] ; $cfcd cp $27 jp z, Func_3f132 cp $2b jp z, Func_3f132 jr asm_3e72b asm_3e70b: ; 3e70b (f:670b) ld hl, W_ENEMYBATTSTATUS1 ; $d067 res 4, [hl] res 6, [hl] ld a, [W_ENEMYMOVENUM] ; $cfcc ld [$d0b5], a ld a, $2c ld [$d0b7], a ld a, MOVE_NAME ld [W_LISTTYPE], a call GetName ld de, $cd6d call CopyStringToCF4B asm_3e72b: ; 3e72b (f:672b) xor a ld [$cced], a call Func_3daf5 ld a, [W_ENEMYMOVEEFFECT] ; $cfcd ld hl, EffectsArray1 ; $4000 ld de, $1 call IsInArray jp c, Func_3f132 ld a, [W_ENEMYMOVEEFFECT] ; $cfcd ld hl, EffectsArray5B ; $4049 ld de, $1 call IsInArray call c, Func_3f132 asm_3e750: ; 3e750 (f:6750) call Func_3ec81 ld a, [W_ENEMYMOVEEFFECT] ; $cfcd ld hl, EffectsArray2 ; $4011 ld de, $1 call IsInArray jp c, Func_3e77f call CriticalHitTest call HandleCounterMove jr z, asm_3e782 call Func_3ec81 call Func_3de75 call Func_3ec81 call MoreCalculateDamage jp z, Func_3e7d1 call AdjustDamageForMoveType call Func_3e687 Func_3e77f: ; 3e77f (f:677f) call MoveHitTest asm_3e782: ; 3e782 (f:6782) ld a, [W_MOVEMISSED] ; $d05f and a jr z, .asm_3e791 ld a, [W_ENEMYMOVEEFFECT] ; $cfcd cp $7 jr z, asm_3e7a0 jr Func_3e7d1 .asm_3e791 call Func_3ec81 Func_3e794: ; 3e794 (f:6794) ld a, [W_ENEMYMOVEEFFECT] ; $cfcd and a ld a, $1 jr z, asm_3e7a4 ld a, $2 jr asm_3e7a4 asm_3e7a0: ; 3e7a0 (f:67a0) call Func_3ec81 xor a asm_3e7a4: ; 3e7a4 (f:67a4) push af ld a, [W_ENEMYBATTSTATUS2] ; $d068 bit 4, a ld hl, Func_79747 ld b, BANK(Func_79747) call nz, Bankswitch pop af ld [$cc5b], a ld a, [W_ENEMYMOVENUM] ; $cfcc call PlayMoveAnimation call Func_3eed3 call Func_3cdec ld a, [W_ENEMYBATTSTATUS2] ; $d068 bit 4, a ld hl, Func_79771 ld b, BANK(Func_79771) call nz, Bankswitch jr asm_3e7ef Func_3e7d1: ; 3e7d1 (f:67d1) call Func_3ec81 ld c, $1e call DelayFrames ld a, [W_ENEMYMOVEEFFECT] ; $cfcd cp $2b jr z, .asm_3e7e6 cp $27 jr z, .asm_3e7e6 jr asm_3e7ef .asm_3e7e6 xor a ld [$cc5b], a ld a,STATUS_AFFECTED_ANIM call PlayMoveAnimation asm_3e7ef: ; 3e7ef (f:67ef) ld a, [W_ENEMYMOVEEFFECT] ; $cfcd cp $9 jr nz, .asm_3e7ff call MirrorMoveCopyMove jp z, Func_3e88c jp Func_3e6fc .asm_3e7ff cp $53 jr nz, .asm_3e809 call MetronomePickMove jp Func_3e6fc .asm_3e809 ld a, [W_ENEMYMOVEEFFECT] ; $cfcd ld hl, EffectsArray3 ; $4014 ld de, $1 call IsInArray jp c, Func_3f132 ld a, [W_MOVEMISSED] ; $d05f and a jr z, .asm_3e82b call Func_3dbe2 ld a, [W_ENEMYMOVEEFFECT] ; $cfcd cp $7 jr z, .asm_3e83e jp Func_3e88c .asm_3e82b call ApplyAttackToPlayerPokemon call Func_3dc5c ld hl, DisplayEffectiveness ld b, BANK(DisplayEffectiveness) call Bankswitch ld a, $1 ld [$ccf4], a .asm_3e83e ld a, [W_ENEMYMOVEEFFECT] ; $cfcd ld hl, EffectsArray4 ; $4030 ld de, $1 call IsInArray call c, Func_3f132 ld hl, W_PLAYERMONCURHP ; $d015 ld a, [hli] ld b, [hl] or b ret z call HandleBuildingRage ld hl, W_ENEMYBATTSTATUS1 ; $d067 bit 2, [hl] jr z, .asm_3e873 push hl ld hl, $d06f dec [hl] pop hl jp nz, Func_3e794 res 2, [hl] ld hl, UnnamedText_3e887 ; $6887 call PrintText xor a ld [$cd05], a .asm_3e873 ld a, [W_ENEMYMOVEEFFECT] ; $cfcd and a jr z, Func_3e88c ld hl, EffectsArray5 ; $403b ld de, $1 call IsInArray call nc, Func_3f132 jr Func_3e88c UnnamedText_3e887: ; 3e887 (f:6887) TX_FAR _UnnamedText_3e887 db "@" Func_3e88c: ; 3e88c (f:688c) ld b, $1 ret Func_3e88f: ; 3e88f (f:688f) ld hl, W_ENEMYMONSTATUS ; $cfe9 ld a, [hl] and $7 jr z, .asm_3e8bf dec a ld [W_ENEMYMONSTATUS], a ; $cfe9 and a jr z, .asm_3e8af ld hl, FastAsleepText ; $5a3d call PrintText xor a ld [$cc5b], a ld a,SLP_ANIM call PlayMoveAnimation jr .asm_3e8b5 .asm_3e8af ld hl, WokeUpText ; $5a42 call PrintText .asm_3e8b5 xor a ld [$ccf2], a ld hl, Func_3e88c ; $688c jp Func_3eab8 .asm_3e8bf bit 5, [hl] jr z, .asm_3e8d3 ld hl, FrozenText ; $5a47 call PrintText xor a ld [$ccf2], a ld hl, Func_3e88c ; $688c jp Func_3eab8 .asm_3e8d3 ld a, [W_PLAYERBATTSTATUS1] ; $d062 bit 5, a jp z, Func_3e8e7 ld hl, CantMoveText ; $5a83 call PrintText ld hl, Func_3e88c ; $688c jp Func_3eab8 Func_3e8e7: ; 3e8e7 (f:68e7) ld hl, W_ENEMYBATTSTATUS1 ; $d067 bit 3, [hl] jp z, Func_3e8fd res 3, [hl] ld hl, FlinchedText ; $5a51 call PrintText ld hl, Func_3e88c ; $688c jp Func_3eab8 Func_3e8fd: ; 3e8fd (f:68fd) ld hl, W_ENEMYBATTSTATUS2 ; $d068 bit 5, [hl] jr z, .asm_3e912 res 5, [hl] ld hl, MustRechargeText ; $5a56 call PrintText ld hl, Func_3e88c ; $688c jp Func_3eab8 .asm_3e912 ld hl, W_ENEMYDISABLEDMOVE ; $d072 ld a, [hl] and a jr z, .asm_3e929 dec a ld [hl], a and $f jr nz, .asm_3e929 ld [hl], a ld [$ccef], a ld hl, DisabledNoMoreText ; $5a5b call PrintText .asm_3e929 ld a, [W_ENEMYBATTSTATUS1] ; $d067 add a jp nc, Func_3e9aa ld hl, $d070 dec [hl] jr nz, .asm_3e944 ld hl, W_ENEMYBATTSTATUS1 ; $d067 res 7, [hl] ld hl, ConfusedNoMoreText ; $5a6a call PrintText jp Func_3e9aa .asm_3e944 ld hl, IsConfusedText ; $5a60 call PrintText xor a ld [$cc5b], a ld a,CONF_ANIM call PlayMoveAnimation call GenRandomInBattle cp $80 jr c, Func_3e9aa ld hl, W_ENEMYBATTSTATUS1 ; $d067 ld a, [hl] and $80 ld [hl], a ld hl, HurtItselfText ; $5a65 call PrintText ld hl, W_PLAYERMONDEF ld a, [hli] push af ld a, [hld] push af ld a, [W_ENEMYMONDEFENSE] ; $cff8 ld [hli], a ld a, [$cff9] ld [hl], a ld hl, W_ENEMYMOVEEFFECT ; $cfcd push hl ld a, [hl] push af xor a ld [hli], a ld [$d05e], a ld a, $28 ld [hli], a xor a ld [hl], a call Func_3de75 call MoreCalculateDamage pop af pop hl ld [hl], a ld hl, $d028 pop af ld [hld], a pop af ld [hl], a xor a ld [$cc5b], a ld [H_WHOSETURN], a ; $FF00+$f3 ld a, POUND call PlayMoveAnimation ld a, $1 ld [H_WHOSETURN], a ; $FF00+$f3 call ApplyDamageToEnemyPokemon jr asm_3e9d3 Func_3e9aa: ; 3e9aa (f:69aa) ld a, [$ccef] and a jr z, .asm_3e9bf ld hl, wEnemySelectedMove ; $ccdd cp [hl] jr nz, .asm_3e9bf call Func_3da88 ld hl, Func_3e88c ; $688c jp Func_3eab8 .asm_3e9bf ld hl, W_ENEMYMONSTATUS ; $cfe9 bit 6, [hl] jr z, asm_3e9f6 call GenRandomInBattle cp $3f jr nc, asm_3e9f6 ld hl, FullyParalyzedText ; $5a4c call PrintText asm_3e9d3: ; 3e9d3 (f:69d3) ld hl, W_ENEMYBATTSTATUS1 ; $d067 ld a, [hl] and $cc ld [hl], a ld a, [W_ENEMYMOVEEFFECT] ; $cfcd cp $2b jr z, .asm_3e9e7 cp $27 jr z, .asm_3e9e7 jr .asm_3e9f0 .asm_3e9e7 xor a ld [$cc5b], a ld a, STATUS_AFFECTED_ANIM call PlayMoveAnimation .asm_3e9f0 ld hl, Func_3e88c ; $688c jp Func_3eab8 asm_3e9f6: ; 3e9f6 (f:69f6) ld hl, W_ENEMYBATTSTATUS1 ; $d067 bit 0, [hl] jr z, .asm_3ea54 xor a ld [W_ENEMYMOVENUM], a ; $cfcc ld hl, W_DAMAGE ; $d0d7 ld a, [hli] ld b, a ld c, [hl] ld hl, $cd06 ld a, [hl] add c ld [hld], a ld a, [hl] adc b ld [hl], a ld hl, $d06f dec [hl] jr z, .asm_3ea1c ld hl, Func_3e88c ; $688c jp Func_3eab8 .asm_3ea1c ld hl, W_ENEMYBATTSTATUS1 ; $d067 res 0, [hl] ld hl, UnleashedEnergyText ; $5a74 call PrintText ld a, $1 ld [W_ENEMYMOVEPOWER], a ; $cfce ld hl, $cd06 ld a, [hld] add a ld b, a ld [$d0d8], a ld a, [hl] rl a ld [W_DAMAGE], a ; $d0d7 or b jr nz, .asm_3ea43 ld a, $1 ld [W_MOVEMISSED], a ; $d05f .asm_3ea43 xor a ld [hli], a ld [hl], a ld a, $75 ld [W_ENEMYMOVENUM], a ; $cfcc call Func_3ec81 ld hl, asm_3e782 ; $6782 jp Func_3eab8 .asm_3ea54 bit 1, [hl] jr z, .asm_3ea83 ld a, $25 ld [W_ENEMYMOVENUM], a ; $cfcc ld hl, ThrashingAboutText ; $5a79 call PrintText ld hl, $d06f dec [hl] ld hl, asm_3e750 ; $6750 jp nz, Func_3eab8 push hl ld hl, W_ENEMYBATTSTATUS1 ; $d067 res 1, [hl] set 7, [hl] call GenRandomInBattle and $3 inc a inc a ld [$d070], a pop hl jp Func_3eab8 .asm_3ea83 bit 5, [hl] jp z, Func_3ea9b ld hl, AttackContinuesText ; $5a7e call PrintText ld hl, $d06f dec [hl] ld hl, Func_3e794 ; $6794 jp nz, Func_3eab8 jp Func_3eab8 Func_3ea9b: ; 3ea9b (f:6a9b) ld a, [W_ENEMYBATTSTATUS2] ; $d068 bit 6, a jp z, Func_3eaba ld a, $63 ld [$d11e], a call GetMoveName call CopyStringToCF4B xor a ld [W_ENEMYMOVEEFFECT], a ; $cfcd ld hl, asm_3e72b ; $672b jp Func_3eab8 Func_3eab8: ; 3eab8 (f:6ab8) xor a ret Func_3eaba: ; 3eaba (f:6aba) ld a, $1 and a ret GetCurrentMove: ; 3eabe (f:6abe) ld a, [H_WHOSETURN] ; $FF00+$f3 and a jp z, .player ld de, W_ENEMYMOVENUM ; $cfcc ld a, [wEnemySelectedMove] ; $ccdd jr .selected .player ld de, W_PLAYERMOVENUM ; $cfd2 ld a, [W_FLAGS_D733] bit 0, a ld a, [$ccd9] jr nz, .selected ld a, [wPlayerSelectedMove] ; $ccdc .selected ld [$d0b5], a dec a ld hl, Moves ; $4000 ld bc, $6 call AddNTimes ld a, BANK(Moves) call FarCopyData ld a, $2c ld [$d0b7], a ld a, $2 ld [W_LISTTYPE], a ; list type 2 = move name call GetName ld de, $cd6d jp CopyStringToCF4B Func_3eb01: ; 3eb01 (f:6b01) ld a, [W_ISLINKBATTLE] ; $d12b cp $4 jp z, Func_3cc13 ld a, [W_ENEMYMONID] ld [$cfe5], a ld [$d0b5], a call GetMonHeader ld a, [W_ENEMYBATTSTATUS3] ; $d069 bit 3, a ld hl, $cceb ld a, [hli] ld b, [hl] jr nz, .asm_3eb33 ld a, [W_ISINBATTLE] ; $d057 cp $2 ld a, $98 ld b, $88 jr z, .asm_3eb33 call GenRandomInBattle ld b, a call GenRandomInBattle .asm_3eb33 ld hl, $cff1 ld [hli], a ld [hl], b ld de, W_ENEMYMONLEVEL ; $cff3 ld a, [W_CURENEMYLVL] ; $d127 ld [de], a inc de ld b, $0 ld hl, W_ENEMYMONCURHP ; $cfe6 push hl call CalcStats pop hl ld a, [W_ISINBATTLE] ; $d057 cp $2 jr z, .asm_3eb65 ld a, [W_ENEMYBATTSTATUS3] ; $d069 bit 3, a jr nz, .asm_3eb86 ld a, [W_ENEMYMONMAXHP] ; $cff4 ld [hli], a ld a, [W_ENEMYMONMAXHP+1] ld [hli], a xor a inc hl ld [hl], a jr .asm_3eb86 .asm_3eb65 ld hl, W_ENEMYMON1HP ; $d8a5 (aliases: W_WATERMONS) ld a, [wWhichPokemon] ; $cf92 ld bc, $2c call AddNTimes ld a, [hli] ld [W_ENEMYMONCURHP], a ; $cfe6 ld a, [hli] ld [$cfe7], a ld a, [wWhichPokemon] ; $cf92 ld [W_ENEMYMONNUMBER], a ; $cfe8 inc hl ld a, [hl] ld [W_ENEMYMONSTATUS], a ; $cfe9 jr .asm_3eb86 .asm_3eb86 ld hl, W_MONHTYPES ld de, W_ENEMYMONTYPES ; $cfea ld a, [hli] ; copy type 1 ld [de], a inc de ld a, [hli] ; copy type 2 ld [de], a inc de ld a, [hli] ; copy catch rate ld [de], a inc de ld a, [W_ISINBATTLE] ; $d057 cp $2 jr nz, .asm_3ebb0 ld hl, $d8ac ld a, [wWhichPokemon] ; $cf92 ld bc, $2c call AddNTimes ld bc, $4 call CopyData jr .asm_3ebca .asm_3ebb0 ld hl, W_MONHMOVES ld a, [hli] ld [de], a inc de ld a, [hli] ld [de], a inc de ld a, [hli] ld [de], a inc de ld a, [hl] ld [de], a dec de dec de dec de xor a ld [$cee9], a ld a, $3e call Predef ; indirect jump to WriteMonMoves (3afb8 (e:6fb8)) .asm_3ebca ld hl, W_ENEMYMONMOVES ld de, $cffd ld a, $5e call Predef ; indirect jump to LoadMovePPs (f473 (3:7473)) ld hl, W_MONHBASESTATS ld de, $d002 ld b, $5 .asm_3ebdd ld a, [hli] ld [de], a inc de dec b jr nz, .asm_3ebdd ld hl, W_MONHCATCHRATE ld a, [hli] ld [de], a inc de ld a, [hl] ; base exp ld [de], a ld a, [W_ENEMYMONID] ld [$d11e], a call GetMonName ld hl, $cd6d ld de, W_ENEMYMONNAME ld bc, $b call CopyData ld a, [W_ENEMYMONID] ld [$d11e], a ld a, $3a call Predef ; indirect jump to IndexToPokedex (41010 (10:5010)) ld a, [$d11e] dec a ld c, a ld b, $1 ld hl, wPokedexSeen ; $d30a ld a, $10 call Predef ; indirect jump to HandleBitArray (f666 (3:7666)) ld hl, W_ENEMYMONLEVEL ; $cff3 ld de, $cd23 ld bc, $b call CopyData ld a, $7 ld b, $8 ld hl, wEnemyMonStatMods ; $cd2e .asm_3ec2d ld [hli], a dec b jr nz, .asm_3ec2d ret Func_3ec32: ; 3ec32 (f:6c32) ld a, [W_ISLINKBATTLE] ; $d12b cp $4 jr nz, .asm_3ec4d xor a ld [wMenuJoypadPollCount], a ; $cc34 ld hl, Func_372d6 ld b, BANK(Func_372d6) call Bankswitch ld a, $1 ld [$cfcb], a call ClearScreen .asm_3ec4d call DelayFrame ld a, $30 call Predef ; indirect jump to Func_7096d (7096d (1c:496d)) ld hl, Func_3ee58 ld b, BANK(Func_3ee58) call Bankswitch ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld a, $ff ld [$cfcb], a call CleanLCD_OAM call ClearScreen xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld [$FF00+$b0], a ld [rWY], a ; $FF00+$4a ld [$FF00+$d7], a ld hl, $d060 ld [hli], a ld [hli], a ld [hli], a ld [hli], a ld [hl], a ld [W_PLAYERDISABLEDMOVE], a ; $d06d ret Func_3ec81: ; 3ec81 (f:6c81) push bc ld a, [W_PLAYERMONLEVEL] ; $d022 ld b, a ld a, [W_ENEMYMONLEVEL] ; $cff3 ld [W_PLAYERMONLEVEL], a ; $d022 ld a, b ld [W_ENEMYMONLEVEL], a ; $cff3 pop bc ret Func_3ec92: ; 3ec92 (f:6c92) ld a, [W_BATTLETYPE] ; $d05a dec a ld de, RedPicBack ; $7e0a jr nz, .asm_3ec9e ld de, OldManPic ; $7e9a .asm_3ec9e ld a, BANK(RedPicBack) call UncompressSpriteFromDE ld a, $3 call Predef ; indirect jump to ScaleSpriteByTwo (2fe40 (b:7e40)) ld hl, wOAMBuffer xor a ld [H_DOWNARROWBLINKCNT1], a ; $FF00+$8b ld b, $7 ld e, $a0 .asm_3ecb2 ld c, $3 ld d, $38 .asm_3ecb6 ld [hl], d inc hl ld [hl], e ld a, $8 add d ld d, a inc hl ld a, [H_DOWNARROWBLINKCNT1] ; $FF00+$8b ld [hli], a inc a ld [H_DOWNARROWBLINKCNT1], a ; $FF00+$8b inc hl dec c jr nz, .asm_3ecb6 ld a, [H_DOWNARROWBLINKCNT1] ; $FF00+$8b add $4 ld [H_DOWNARROWBLINKCNT1], a ; $FF00+$8b ld a, $8 add e ld e, a dec b jr nz, .asm_3ecb2 ld de, $9310 call InterlaceMergeSpriteBuffers ld a, $a ld [$0], a xor a ld [$4000], a ld hl, $8000 ld de, S_SPRITEBUFFER1 ld a, [H_LOADEDROMBANK] ld b, a ld c, $31 call CopyVideoData xor a ld [$0], a ld a, $31 ld [$FF00+$e1], a FuncCoord 1, 5 ; $c405 ld hl, Coord ld a, $1 jp Predef ; indirect jump to Func_3f0c6 (3f0c6 (f:70c6)) Func_3ed02: ; 3ed02 (f:6d02) ld hl, Func_39680 ld b, BANK(Func_39680) call Bankswitch ld hl, Func_396a7 ld b, BANK(Func_396a7) jp Bankswitch ScrollTrainerPicAfterBattle: ; 3ed12 (f:6d12) ld hl, _ScrollTrainerPicAfterBattle ld b, BANK(_ScrollTrainerPicAfterBattle) jp Bankswitch Func_3ed1a: ; 3ed1a (f:6d1a) ld a, $1 jr asm_3ed1f Func_3ed1e: ; 3ed1e (f:6d1e) xor a asm_3ed1f: ; 3ed1f (f:6d1f) ld [H_WHOSETURN], a ; $FF00+$f3 call Func_3ed27 jp Func_3ed64 Func_3ed27: ; 3ed27 (f:6d27) ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3ed48 ld a, [W_PLAYERMONSTATUS] ; $d018 and $40 ret z ld hl, $d02a ld a, [hld] ld b, a ld a, [hl] srl a rr b srl a rr b ld [hli], a or b jr nz, .asm_3ed46 ld b, $1 .asm_3ed46 ld [hl], b ret .asm_3ed48 ld a, [W_ENEMYMONSTATUS] ; $cfe9 and $40 ret z ld hl, $cffb ld a, [hld] ld b, a ld a, [hl] srl a rr b srl a rr b ld [hli], a or b jr nz, .asm_3ed62 ld b, $1 .asm_3ed62 ld [hl], b ret Func_3ed64: ; 3ed64 (f:6d64) ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3ed81 ld a, [W_PLAYERMONSTATUS] ; $d018 and $10 ret z ld hl, $d026 ld a, [hld] ld b, a ld a, [hl] srl a rr b ld [hli], a or b jr nz, .asm_3ed7f ld b, $1 .asm_3ed7f ld [hl], b ret .asm_3ed81 ld a, [W_ENEMYMONSTATUS] ; $cfe9 and $10 ret z ld hl, $cff7 ld a, [hld] ld b, a ld a, [hl] srl a rr b ld [hli], a or b jr nz, .asm_3ed97 ld b, $1 .asm_3ed97 ld [hl], b ret Func_3ed99: ; 3ed99 (f:6d99) ld c, $0 .asm_3ed9b call Func_3eda5 inc c ld a, c cp $4 jr nz, .asm_3ed9b ret Func_3eda5: ; 3eda5 (f:6da5) push bc push bc ld a, [$d11e] and a ld a, c ld hl, W_PLAYERMONATK ld de, $cd12 ld bc, wPlayerMonAttackMod ; $cd1a jr z, .asm_3edc0 ld hl, W_ENEMYMONATTACK ld de, $cd26 ld bc, wEnemyMonStatMods ; $cd2e .asm_3edc0 add c ld c, a jr nc, .asm_3edc5 inc b .asm_3edc5 ld a, [bc] pop bc ld b, a push bc sla c ld b, $0 add hl, bc ld a, c add e ld e, a jr nc, .asm_3edd4 inc d .asm_3edd4 pop bc push hl ld hl, StatModifierRatios ; $76cb dec b sla b ld c, b ld b, $0 add hl, bc xor a ld [H_NUMTOPRINT], a ; $FF00+$96 (aliases: H_MULTIPLICAND) ld a, [de] ld [$FF00+$97], a inc de ld a, [de] ld [$FF00+$98], a ld a, [hli] ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) call Multiply ld a, [hl] ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) ld b, $4 call Divide pop hl ld a, [$FF00+$98] sub $e7 ld a, [$FF00+$97] sbc $3 jp c, Func_3ee0c ld a, $3 ld [$FF00+$97], a ld a, $e7 ld [$FF00+$98], a Func_3ee0c: ; 3ee0c (f:6e0c) ld a, [$FF00+$97] ld [hli], a ld b, a ld a, [$FF00+$98] ld [hl], a or b jr nz, .asm_3ee17 inc [hl] .asm_3ee17 pop bc ret Func_3ee19: ; 3ee19 (f:6e19) ld a, [W_ISLINKBATTLE] ; $d12b cp $4 ret z ld a, [W_OBTAINEDBADGES] ; $d356 ld b, a ld hl, W_PLAYERMONATK ld c, $4 .asm_3ee28 srl b call c, Func_3ee35 inc hl inc hl srl b dec c jr nz, .asm_3ee28 ret Func_3ee35: ; 3ee35 (f:6e35) ld a, [hli] ld d, a ld e, [hl] srl d rr e srl d rr e srl d rr e ld a, [hl] add e ld [hld], a ld a, [hl] adc d ld [hli], a ld a, [hld] sub $e7 ld a, [hl] sbc $3 ret c ld a, $3 ld [hli], a ld a, $e7 ld [hld], a ret Func_3ee58: ; 3ee58 (f:6e58) call LoadHpBarAndStatusTilePatterns Func_3ee5b: ; 3ee5b (f:6e5b) ld a, [rLCDC] ; $FF00+$40 add a jr c, .asm_3ee7c ld hl, BattleHudTiles1 ; $6080 ld de, $96d0 ld bc, $18 ld a, BANK(BattleHudTiles1) call FarCopyDataDouble ld hl, BattleHudTiles2 ; $6098 ld de, $9730 ld bc, $30 ld a, BANK(BattleHudTiles2) jp FarCopyDataDouble .asm_3ee7c ld de, BattleHudTiles1 ; $6080 ld hl, $96d0 ld bc, (BANK(BattleHudTiles1) << 8) + $03 call CopyVideoDataDouble ld de, BattleHudTiles2 ; $6098 ld hl, $9730 ld bc, (BANK(BattleHudTiles2) << 8) + $06 jp CopyVideoDataDouble Func_3ee94: ; 3ee94 (f:6e94) ld hl, TerminatorText_3ee9a ; $6e9a jp PrintText TerminatorText_3ee9a: ; 3ee9a (f:6e9a) db "@" ; generates a random number unless in link battle ; stores random number in A GenRandomInBattle: ; 3ee9b (f:6e9b) ld a, [W_ISLINKBATTLE] cp $4 jp nz, GenRandom push hl push bc ld a, [$ccde] ld c, a ld b, $0 ld hl, $d148 add hl, bc inc a ld [$ccde], a cp $9 ld a, [hl] pop bc pop hl ret c push hl push bc push af xor a ld [$ccde], a ld hl, $d148 ld b, $9 .asm_3eec5 ld a, [hl] ld c, a add a add a add c inc a ld [hli], a dec b jr nz, .asm_3eec5 ; 0x3eecd $f6 pop af pop bc pop hl ret Func_3eed3: ; 3eed3 (f:6ed3) ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld hl, W_ENEMYMONTYPE1 ; $cfea (aliases: W_ENEMYMONTYPES) ld de, W_ENEMYBATTSTATUS1 ; $d067 ld a, [W_PLAYERMOVENUM] ; $cfd2 jr z, .asm_3eeea ld hl, W_PLAYERMONTYPE1 ; $d019 (aliases: W_PLAYERMONTYPES) ld de, W_ENEMYBATTSTATUS1 ; $d067 ld a, [W_ENEMYMOVENUM] ; $cfcc .asm_3eeea cp $78 jr z, .asm_3eef1 cp $99 ret nz .asm_3eef1 ld a, [de] bit 6, a ret nz ld a, [hli] cp $8 ret z ld a, [hl] cp $8 ret z ld a, [W_MOVEMISSED] ; $d05f and a ret nz ld a, $5 ld [$cc5b], a PlayMoveAnimation: ; 3ef07 (f:6f07) ld [$D07C],a call Delay3 PREDEF_JUMP MoveAnimationPredef ; predef 8 Func_3ef12: ; 3ef12 (f:6f12) ld a, [W_CUROPPONENT] ; $d059 and a jr z, asm_3ef23 Func_3ef18: ; 3ef18 (f:6f18) ld a, [W_CUROPPONENT] ; $d059 ld [$cf91], a ld [W_ENEMYMONID], a jr asm_3ef3d asm_3ef23: ; 3ef23 (f:6f23) ld a, [$d732] bit 1, a jr z, .asm_3ef2f ld a, [H_CURRENTPRESSEDBUTTONS] bit 1, a ret nz .asm_3ef2f ld a, [$d13c] and a ret nz ld hl, Func_13870 ld b, BANK(Func_13870) call Bankswitch ret nz asm_3ef3d: ; 3ef3d (f:6f3d) ld a, [$d35d] push af ld hl, $d358 ld a, [hl] push af res 1, [hl] ld hl, Func_525af ld b, BANK(Func_525af) call Bankswitch ld a, [W_ENEMYMONID] sub $c8 jp c, Func_3ef8b ld [W_TRAINERCLASS], a ; $d031 call Func_3566 ld hl, ReadTrainer ld b, BANK(ReadTrainer) call Bankswitch call Func_3ec32 call _LoadTrainerPic xor a ld [W_ENEMYMONID], a ld [$FF00+$e1], a dec a ld [wAICount], a ; $ccdf FuncCoord 12, 0 ; $c3ac ld hl, Coord ld a, $1 call Predef ; indirect jump to Func_3f0c6 (3f0c6 (f:70c6)) ld a, $ff ld [W_ENEMYMONNUMBER], a ; $cfe8 ld a, $2 ld [W_ISINBATTLE], a ; $d057 jp Func_3efeb Func_3ef8b: ; 3ef8b (f:6f8b) ld a, $1 ld [W_ISINBATTLE], a ; $d057 call Func_3eb01 call Func_3ec32 ld a, [W_CUROPPONENT] ; $d059 cp MAROWAK jr z, .isGhost call Func_3d83a jr nz, .isNoGhost .isGhost ld hl, W_MONHSPRITEDIM ld a, $66 ld [hli], a ; write sprite dimensions ld bc, GhostPic ; $66b5 ld a, c ld [hli], a ; write front sprite pointer ld [hl], b ld hl, W_ENEMYMONNAME ; set name to "GHOST" ld a, "G" ld [hli], a ld a, "H" ld [hli], a ld a, "O" ld [hli], a ld a, "S" ld [hli], a ld a, "T" ld [hli], a ld [hl], "@" ld a, [$cf91] push af ld a, MON_GHOST ld [$cf91], a ld de, $9000 call LoadMonFrontSprite ; load ghost sprite pop af ld [$cf91], a jr .spriteLoaded .isNoGhost ld de, $9000 call LoadMonFrontSprite ; load mon sprite .spriteLoaded xor a ld [W_TRAINERCLASS], a ; $d031 ld [$FF00+$e1], a FuncCoord 12, 0 ; $c3ac ld hl, Coord ld a, $1 call Predef ; indirect jump to Func_3f0c6 (3f0c6 (f:70c6)) Func_3efeb: ; 3efeb (f:6feb) ld b, $0 call GoPAL_SET call Func_3c04c xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld hl, TerminatorText_3f04a call PrintText call SaveScreenTilesToBuffer1 call ClearScreen ld a, $98 ld [$FF00+$bd], a ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba call Delay3 ld a, $9c ld [$FF00+$bd], a call LoadScreenTilesFromBuffer1 FuncCoord 9, 7 ; $c435 ld hl, Coord ld bc, $50a call ClearScreenArea FuncCoord 1, 0 ; $c3a1 ld hl, Coord ld bc, $40a call ClearScreenArea call CleanLCD_OAM ld a, [W_ISINBATTLE] ; $d057 dec a call z, Func_3cdec call Func_3c11e ld hl, Func_137aa ld b, BANK(Func_137aa) call Bankswitch pop af ld [$d358], a pop af ld [$d35d], a ld a, [$d0d4] ld [$FF00+$d7], a scf ret TerminatorText_3f04a: ; 3f04a (f:704a) db "@" _LoadTrainerPic: ; 3f04b (f:704b) ; $d033-$d034 contain pointer to pic ld a, [$d033] ld e, a ld a, [$d034] ld d, a ; de contains pointer to trainer pic ld a, [W_ISLINKBATTLE] ; $d12b and a ld a, Bank(YoungsterPic) ; this is where all the trainer pics are (not counting Red's) jr z, .loadSprite ld a, Bank(RedPicFront) .loadSprite call UncompressSpriteFromDE ld de, $9000 ld a, $77 ld c, a jp LoadUncompressedSpriteData Func_3f069: ; 3f069 (f:7069) xor a ld [$c0f1], a ld [$c0f2], a jp PlaySound Func_3f073: ; 3f073 (f:7073) ld a, [$cc4f] ld h, a ld a, [$cc50] ld l, a ld a, [$FF00+$e1] ld [H_DOWNARROWBLINKCNT1], a ; $FF00+$8b ld b, $4c ld a, [W_ISINBATTLE] ; $d057 and a jr z, .asm_3f0bc add b ld [hl], a call Delay3 ld bc, $ffd7 add hl, bc ld a, $1 ld [$cd6c], a ld bc, $303 ld a, $5 call Predef ; indirect jump to Func_79aba (79aba (1e:5aba)) ld c, $4 call DelayFrames ld bc, $ffd7 add hl, bc xor a ld [$cd6c], a ld bc, $505 ld a, $5 call Predef ; indirect jump to Func_79aba (79aba (1e:5aba)) ld c, $5 call DelayFrames ld bc, $ffd7 jr .asm_3f0bf .asm_3f0bc ld bc, $ff85 .asm_3f0bf add hl, bc ld a, [H_DOWNARROWBLINKCNT1] ; $FF00+$8b add $31 jr asm_3f0d0 Func_3f0c6: ; 3f0c6 (f:70c6) ld a, [$cc4f] ld h, a ld a, [$cc50] ld l, a ld a, [$FF00+$e1] asm_3f0d0: ; 3f0d0 (f:70d0) ld bc, $707 ld de, $14 push af ld a, [W_SPRITEFLIPPED] and a jr nz, .asm_3f0ed pop af .asm_3f0de push bc push hl .asm_3f0e0 ld [hl], a add hl, de inc a dec c jr nz, .asm_3f0e0 pop hl inc hl pop bc dec b jr nz, .asm_3f0de ret .asm_3f0ed push bc ld b, $0 dec c add hl, bc pop bc pop af .asm_3f0f4 push bc push hl .asm_3f0f6 ld [hl], a add hl, de inc a dec c jr nz, .asm_3f0f6 pop hl dec hl pop bc dec b jr nz, .asm_3f0f4 ret ; loads back sprite of mon to $8000 ; assumes the corresponding mon header is already loaded LoadMonBackSprite: ; 3f103 (f:7103) ld a, [$cfd9] ld [$cf91], a FuncCoord 1, 5 ; $c405 ld hl, Coord ld b, $7 ld c, $8 call ClearScreenArea ld hl, W_MONHBACKSPRITE - W_MONHEADER call UncompressMonSprite ld a, $3 call Predef ; indirect jump to ScaleSpriteByTwo (2fe40 (b:7e40)) ld de, $9310 call InterlaceMergeSpriteBuffers ; combine the two buffers to a single 2bpp sprite ld hl, $8000 ld de, $9310 ld c, (2*SPRITEBUFFERSIZE)/16 ; count of 16-byte chunks to be copied ld a, [H_LOADEDROMBANK] ld b, a jp CopyVideoData Func_3f132: ; 3f132 (f:7132) call JumpMoveEffect ld b, $1 ret JumpMoveEffect: ; 3f138 (f:7138) ld a, [$ff00+$f3] ;whose turn? and a ld a, [W_PLAYERMOVEEFFECT] jr z, .next1 ld a, [W_ENEMYMOVEEFFECT] .next1 dec a ;subtract 1, there is no special effect for 00 add a ;x2, 16bit pointers ld hl, MoveEffectPointerTable ld b, 0 ld c, a add hl, bc ld a, [hli] ld h, [hl] ld l, a jp [hl] ;jump to special effect handler MoveEffectPointerTable: ; 3f150 (f:7150) dw Func_3f1fc dw Func_3f24f dw Func_3f2e9 dw FreezeBurnParalyzeEffect dw FreezeBurnParalyzeEffect dw FreezeBurnParalyzeEffect dw Func_3f2f1 dw Func_3f2e9 dw $0000 dw Func_3f428 dw Func_3f428 dw Func_3f428 dw Func_3f428 dw Func_3f428 dw Func_3f428 dw Func_3fb0e dw $0000 dw Func_3f54c dw Func_3f54c dw Func_3f54c dw Func_3f54c dw Func_3f54c dw Func_3f54c dw Func_3fb16 dw Func_3fb1e dw Func_3f6e5 dw Func_3f717 dw Func_3f739 dw Func_3f811 dw Func_3f811 dw Func_3f85b dw Func_3f1fc dw Func_3f24f dw FreezeBurnParalyzeEffect dw FreezeBurnParalyzeEffect dw FreezeBurnParalyzeEffect dw Func_3f85b dw Func_3f884 dw Func_3f88c dw $0000 dw $0000 dw Func_3f917 dw Func_3f88c dw Func_3f811 dw $0000 dw Func_3f941 dw Func_3f949 dw Func_3f951 dw Func_3f961 dw Func_3f428 dw Func_3f428 dw Func_3f428 dw Func_3f428 dw Func_3f428 dw Func_3f428 dw Func_3fb26 dw Func_3fb2e dw Func_3f54c dw Func_3f54c dw Func_3f54c dw Func_3f54c dw Func_3f54c dw Func_3f54c dw Func_3fb36 dw Func_3fb36 dw Func_3f24f dw Func_3f9b1 dw Func_3f54c dw Func_3f54c dw Func_3f54c dw Func_3f54c dw Func_3f54c dw Func_3f54c dw Func_3f54c dw Func_3f54c dw Func_3f959 dw Func_3f811 dw $0000 dw Func_3f9b9 dw Func_3f9c1 dw Func_3f9df dw Func_3f9ed dw $0000 dw Func_3fa7c dw Func_3fa84 dw Func_3fa8a Func_3f1fc: ; 3f1fc (f:71fc) ld de, W_ENEMYMONSTATUS ; $cfe9 ld bc, W_ENEMYBATTSTATUS2 ; $d068 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jp z, Func_3f20e ld de, W_PLAYERMONSTATUS ; $d018 ld bc, W_PLAYERBATTSTATUS2 ; $d063 Func_3f20e: ; 3f20e (f:720e) ld a, [bc] bit 5, a res 5, a ld [bc], a jr nz, .asm_3f231 ld a, [de] ld b, a and $7 jr z, .asm_3f222 ld hl, UnnamedText_3f24a ; $724a jp PrintText .asm_3f222 ld a, b and a jr nz, .asm_3f242 push de call MoveHitTest pop de ld a, [W_MOVEMISSED] ; $d05f and a jr nz, .asm_3f242 .asm_3f231 call GenRandomInBattle and $7 jr z, .asm_3f231 ld [de], a call Func_3fb89 ld hl, UnnamedText_3f245 ; $7245 jp PrintText .asm_3f242 jp Func_3fb5e UnnamedText_3f245: ; 3f245 (f:7245) TX_FAR _UnnamedText_3f245 db "@" UnnamedText_3f24a: ; 3f24a (f:724a) TX_FAR _UnnamedText_3f24a db "@" Func_3f24f: ; 3f24f (f:724f) ld hl, W_ENEMYMONSTATUS ; $cfe9 ld de, W_PLAYERMOVEEFFECT ; $cfd3 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3f260 ld hl, W_PLAYERMONSTATUS ; $d018 ld de, W_ENEMYMOVEEFFECT ; $cfcd .asm_3f260 call CheckTargetSubstitute jr nz, .asm_3f2d3 ld a, [hli] ld b, a and a jr nz, .asm_3f2d3 ld a, [hli] cp $3 jr z, .asm_3f2d3 ld a, [hld] cp $3 jr z, .asm_3f2d3 ld a, [de] cp $2 ld b, $34 jr z, .asm_3f290 cp $21 ld b, $67 jr z, .asm_3f290 push hl push de call MoveHitTest pop de pop hl ld a, [W_MOVEMISSED] ; $d05f and a jr nz, .asm_3f2d7 jr .asm_3f295 .asm_3f290 call GenRandomInBattle cp b ret nc .asm_3f295 dec hl set 3, [hl] push de dec de ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld b, $c7 ld hl, W_PLAYERBATTSTATUS3 ; $d064 ld a, [de] ld de, W_PLAYERTOXICCOUNTER ; $d06c jr nz, .asm_3f2b0 ld b, $a9 ld hl, W_ENEMYBATTSTATUS3 ; $d069 ld de, W_ENEMYTOXICCOUNTER ; $d071 .asm_3f2b0 cp $5c jr nz, .asm_3f2bd set 0, [hl] xor a ld [de], a ld hl, UnnamedText_3f2e4 ; $72e4 jr .asm_3f2c0 .asm_3f2bd ld hl, UnnamedText_3f2df ; $72df .asm_3f2c0 pop de ld a, [de] cp $42 jr z, .asm_3f2cd ld a, b call Func_3fb96 jp PrintText .asm_3f2cd call Func_3fb89 jp PrintText .asm_3f2d3 ld a, [de] cp $42 ret nz .asm_3f2d7 ld c, $32 call DelayFrames jp Func_3fb5e UnnamedText_3f2df: ; 3f2df (f:72df) TX_FAR _UnnamedText_3f2df db "@" UnnamedText_3f2e4: ; 3f2e4 (f:72e4) TX_FAR _UnnamedText_3f2e4 db "@" Func_3f2e9: ; 3f2e9 (f:72e9) ld hl, Func_783f ld b, BANK(Func_783f) jp Bankswitch Func_3f2f1: ; 3f2f1 (f:72f1) ld hl, W_PLAYERMONCURHP ; $d015 ld de, W_PLAYERBATTSTATUS2 ; $d063 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3f302 ld hl, W_ENEMYMONCURHP ; $cfe6 ld de, W_ENEMYBATTSTATUS2 ; $d068 .asm_3f302 xor a ld [hli], a ld [hli], a inc hl ld [hl], a ld a, [de] res 7, a ld [de], a ret FreezeBurnParalyzeEffect: ; 3f30c (f:730c) xor a ld [$cc5b], a call CheckTargetSubstitute ;test bit 4 of d063/d068 flags [target has substitute flag] ret nz ;return if they have a substitute, can't effect them ld a, [$ff00+$f3] ;whose turn? and a jp nz, opponentAttacker ld a, [W_ENEMYMONSTATUS] and a jp nz, CheckDefrost ;opponent has no existing status ld a, [W_PLAYERMOVETYPE] ld b, a ld a, [W_ENEMYMONTYPE1] cp b ret z ;return if they match [can't freeze an ice type etc.] ld a, [W_ENEMYMONTYPE2] cp b ret z ;return.. ld a, [W_PLAYERMOVEEFFECT] cp a, 7 ;10% status effects are 04, 05, 06 so 07 will set carry for those ld b, $1a ;[1A-1]/100 or [26-1]/256 = 9.8%~ chance jr c, .next1 ;branch ahead if this is a 10% chance effect.. ld b, $4d ;..or use [4D-1]/100 or [76-1]/256 = 29.7%~ chance sub a, $1e ;subtract $1E to map to equivalent 10% chance effects .next1 push af ;push effect... call GenRandomInBattle ;get random 8bit value for probability test cp b ;success? pop bc ;...pop effect into C ret nc ;do nothing if random value is >= 1A or 4D [no status applied] ;the test passed ld a, b ;what type of effect is this? cp a, BURN_SIDE_EFFECT1 jr z, .burn cp a, FREEZE_SIDE_EFFECT jr z, .freeze ld a, PAR ld [W_ENEMYMONSTATUS], a call Func_3ed27 ;quarter speed of affected monster ld a, $a9 call Func_3fbb9 ;animation jp Func_3fb6e ;print paralysis text .burn ld a, BRN ld [W_ENEMYMONSTATUS], a call Func_3ed64 ld a, $a9 call Func_3fbb9 ;animation ld hl, UnnamedText_3f3d8 jp PrintText .freeze call Func_3f9cf ;resets bit 5 of the D063/D068 flags ld a, FRZ ld [W_ENEMYMONSTATUS], a ld a, $a9 call Func_3fbb9 ;animation ld hl, UnnamedText_3f3dd jp PrintText opponentAttacker: ; 3f382 (f:7382) ld a, [W_PLAYERMONSTATUS] ;this appears to the same as above with addresses swapped for opponent and a jp nz, CheckDefrost ld a, [W_ENEMYMOVETYPE] ld b, a ld a, [W_PLAYERMONTYPE1] cp b ret z ld a, [W_PLAYERMONTYPE2] cp b ret z ld a, [W_ENEMYMOVEEFFECT] cp a, 7 ld b, $1a jr c, .next1 ld b, $4d sub a, $1e .next1 push af call GenRandomInBattle cp b pop bc ret nc ld a, b cp a, BURN_SIDE_EFFECT1 jr z, .burn cp a, FREEZE_SIDE_EFFECT jr z, .freeze ld a, PAR ld [W_PLAYERMONSTATUS], a call Func_3ed27 jp Func_3fb6e .burn ld a, BRN ld [W_PLAYERMONSTATUS], a call Func_3ed64 ld hl, UnnamedText_3f3d8 jp PrintText .freeze ld a, FRZ ld [W_PLAYERMONSTATUS], a ld hl, UnnamedText_3f3dd jp PrintText UnnamedText_3f3d8: ; 3f3d8 (f:73d8) TX_FAR _UnnamedText_3f3d8 db "@" UnnamedText_3f3dd: ; 3f3dd (f:73dd) TX_FAR _UnnamedText_3f3dd db "@" CheckDefrost: ; 3f3e2 (f:73e2) and a, FRZ ;are they frozen? ret z ;return if so ;not frozen ld a, [$ff00+$f3] ;whose turn? and a jr nz, .opponent ;player [attacker] ld a, [W_PLAYERMOVETYPE] sub a, FIRE ret nz ;return if it isn't fire ;type is fire ld [W_ENEMYMONSTATUS], a ;set opponent status to 00 ["defrost" a frozen monster] ld hl, $d8a8 ;status of first opponent monster in their roster ld a, [W_ENEMYMONNUMBER] ld bc, $002c ;$2C bytes per roster entry call AddNTimes xor a ld [hl], a ;clear status in roster ld hl, UnnamedText_3f423 jr .common .opponent ld a, [W_ENEMYMOVETYPE] ;same as above with addresses swapped sub a, $14 ret nz ld [W_PLAYERMONSTATUS], a ld hl, $d16f ld a, [wPlayerMonNumber] ld bc, $002c call AddNTimes xor a ld [hl], a ld hl, UnnamedText_3f423 .common jp PrintText UnnamedText_3f423: ; 3f423 (f:7423) TX_FAR _UnnamedText_3f423 db "@" Func_3f428: ; 3f428 (f:7428) ld hl, wPlayerMonStatMods ; $cd1a ld de, W_PLAYERMOVEEFFECT ; $cfd3 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3f439 ld hl, wEnemyMonStatMods ; $cd2e ld de, W_ENEMYMOVEEFFECT ; $cfcd .asm_3f439 ld a, [de] sub $a cp $8 jr c, .asm_3f442 sub $28 .asm_3f442 ld c, a ld b, $0 add hl, bc ld b, [hl] inc b ld a, $d cp b jp c, Func_3f522 ld a, [de] cp $12 jr c, .asm_3f45a inc b ld a, $d cp b jr nc, .asm_3f45a ld b, a .asm_3f45a ld [hl], b ld a, c cp $4 jr nc, asm_3f4ca push hl ld hl, $d026 ld de, $cd12 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3f472 ld hl, $cff7 ld de, $cd26 .asm_3f472 push bc sla c ld b, $0 add hl, bc ld a, c add e ld e, a jr nc, .asm_3f47e inc d .asm_3f47e pop bc ld a, [hld] sub $e7 jr nz, .asm_3f48a ld a, [hl] sbc $3 jp z, Func_3f520 .asm_3f48a push hl push bc ld hl, StatModifierRatios ; $76cb dec b sla b ld c, b ld b, $0 add hl, bc pop bc xor a ld [H_NUMTOPRINT], a ; $FF00+$96 (aliases: H_MULTIPLICAND) ld a, [de] ld [$FF00+$97], a inc de ld a, [de] ld [$FF00+$98], a ld a, [hli] ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) call Multiply ld a, [hl] ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) ld b, $4 call Divide pop hl ld a, [$FF00+$98] sub $e7 ld a, [$FF00+$97] sbc $3 jp c, Func_3f4c3 ld a, $3 ld [$FF00+$97], a ld a, $e7 ld [$FF00+$98], a Func_3f4c3: ; 3f4c3 (f:74c3) ld a, [$FF00+$97] ld [hli], a ld a, [$FF00+$98] ld [hl], a pop hl asm_3f4ca: ; 3f4ca (f:74ca) ld b, c inc b call Func_3f688 ld hl, W_PLAYERBATTSTATUS2 ; $d063 ld de, W_PLAYERMOVENUM ; $cfd2 ld bc, $ccf7 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3f4e6 ld hl, W_ENEMYBATTSTATUS2 ; $d068 ld de, W_ENEMYMOVENUM ; $cfcc ld bc, $ccf3 .asm_3f4e6 ld a, [de] cp $6b jr nz, .asm_3f4f9 bit 4, [hl] push af push bc ld hl, Func_79747 ld b, BANK(Func_79747) push de call nz, Bankswitch pop de .asm_3f4f9 call Func_3fba8 ld a, [de] cp $6b jr nz, .asm_3f50e pop bc ld a, $1 ld [bc], a ld hl, Func_79771 ld b, BANK(Func_79771) pop af call nz, Bankswitch .asm_3f50e ld a, [H_WHOSETURN] ; $FF00+$f3 and a call z, Func_3ee19 ld hl, UnnamedText_3f528 ; $7528 call PrintText call Func_3ed27 jp Func_3ed64 Func_3f520: ; 3f520 (f:7520) pop hl dec [hl] Func_3f522: ; 3f522 (f:7522) ld hl, UnnamedText_3fb3e ; $7b3e jp PrintText UnnamedText_3f528: ; 3f528 (f:7528) TX_FAR _UnnamedText_3f528 db $08 ; asm ld hl, UnnamedText_3f542 ; $7542 ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld a, [W_PLAYERMOVEEFFECT] ; $cfd3 jr z, .asm_3f53b ld a, [W_ENEMYMOVEEFFECT] ; $cfcd .asm_3f53b cp $12 ret nc ld hl, UnnamedText_3f547 ; $7547 ret UnnamedText_3f542: ; 3f542 (f:7542) db $0a TX_FAR _UnnamedText_3f542 UnnamedText_3f547: ; 3f547 (f:7547) TX_FAR _UnnamedText_3f547 db "@" Func_3f54c: ; 3f54c (f:754c) ld hl, wEnemyMonStatMods ; $cd2e ld de, W_PLAYERMOVEEFFECT ; $cfd3 ld bc, W_ENEMYBATTSTATUS1 ; $d067 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3f572 ld hl, wPlayerMonStatMods ; $cd1a ld de, W_ENEMYMOVEEFFECT ; $cfcd ld bc, W_PLAYERBATTSTATUS1 ; $d062 ld a, [W_ISLINKBATTLE] ; $d12b cp $4 jr z, .asm_3f572 call GenRandomInBattle cp $40 jp c, Func_3f65a .asm_3f572 call CheckTargetSubstitute jp nz, Func_3f65a ld a, [de] cp $44 jr c, .asm_3f58a call GenRandomInBattle cp $55 jp nc, Func_3f650 ld a, [de] sub $44 jr .asm_3f5a9 .asm_3f58a push hl push de push bc call MoveHitTest pop bc pop de pop hl ld a, [W_MOVEMISSED] ; $d05f and a jp nz, Func_3f65a ld a, [bc] bit 6, a jp nz, Func_3f65a ld a, [de] sub $12 cp $8 jr c, .asm_3f5a9 sub $28 .asm_3f5a9 ld c, a ld b, $0 add hl, bc ld b, [hl] dec b jp z, Func_3f650 ld a, [de] cp $24 jr c, .asm_3f5bf cp $44 jr nc, .asm_3f5bf dec b jr nz, .asm_3f5bf inc b .asm_3f5bf ld [hl], b ld a, c cp $4 jr nc, asm_3f62c push hl push de ld hl, $cff7 ld de, $cd26 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3f5d8 ld hl, $d026 ld de, $cd12 .asm_3f5d8 push bc sla c ld b, $0 add hl, bc ld a, c add e ld e, a jr nc, .asm_3f5e4 inc d .asm_3f5e4 pop bc ld a, [hld] sub $1 jr nz, .asm_3f5ef ld a, [hl] and a jp z, Func_3f64d .asm_3f5ef push hl push bc ld hl, StatModifierRatios ; $76cb dec b sla b ld c, b ld b, $0 add hl, bc pop bc xor a ld [H_NUMTOPRINT], a ; $FF00+$96 (aliases: H_MULTIPLICAND) ld a, [de] ld [$FF00+$97], a inc de ld a, [de] ld [$FF00+$98], a ld a, [hli] ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) call Multiply ld a, [hl] ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) ld b, $4 call Divide pop hl ld a, [$FF00+$98] ld b, a ld a, [$FF00+$97] or b jp nz, Func_3f624 ld [$FF00+$97], a ld a, $1 ld [$FF00+$98], a Func_3f624: ; 3f624 (f:7624) ld a, [$FF00+$97] ld [hli], a ld a, [$FF00+$98] ld [hl], a pop de pop hl asm_3f62c: ; 3f62c (f:762c) ld b, c inc b push de call Func_3f688 pop de ld a, [de] cp $44 jr nc, .asm_3f63b call Func_3fb89 .asm_3f63b ld a, [H_WHOSETURN] ; $FF00+$f3 and a call nz, Func_3ee19 ld hl, UnnamedText_3f661 ; $7661 call PrintText call Func_3ed27 jp Func_3ed64 Func_3f64d: ; 3f64d (f:764d) pop de pop hl inc [hl] Func_3f650: ; 3f650 (f:7650) ld a, [de] cp $44 ret nc ld hl, UnnamedText_3fb3e ; $7b3e jp PrintText Func_3f65a: ; 3f65a (f:765a) ld a, [de] cp $44 ret nc jp Func_3fb4e UnnamedText_3f661: ; 3f661 (f:7661) TX_FAR _UnnamedText_3f661 db $08 ; asm ld hl, UnnamedText_3f683 ; $7683 ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld a, [W_PLAYERMOVEEFFECT] ; $cfd3 jr z, .asm_3f674 ld a, [W_ENEMYMOVEEFFECT] ; $cfcd .asm_3f674 cp $1a ret c cp $44 ret nc ld hl, UnnamedText_3f67e ; $767e ret UnnamedText_3f67e: ; 3f67e (f:767e) db $0a TX_FAR _UnnamedText_3f67e UnnamedText_3f683: ; 3f683 (f:7683) TX_FAR _UnnamedText_3f683 db "@" Func_3f688: ; 3f688 (f:7688) ld hl, StatsTextStrings ; $769f ld c, $50 .asm_3f68d dec b jr z, .asm_3f696 .asm_3f690 ld a, [hli] cp c jr z, .asm_3f68d jr .asm_3f690 .asm_3f696 ld de, $cf4b ld bc, $a jp CopyData StatsTextStrings: ; 3f69f (f:769f) db "ATTACK@" db "DEFENSE@" db "SPEED@" db "SPECIAL@" db "ACCURACY@" db "EVADE@" StatModifierRatios: ; 3f6cb (f:76cb) ; first byte is numerator, second byte is denominator db 25, 100 ; 0.25 db 28, 100 ; 0.28 db 33, 100 ; 0.33 db 40, 100 ; 0.40 db 50, 100 ; 0.50 db 66, 100 ; 0.66 db 1, 1 ; 1.00 db 15, 10 ; 1.50 db 2, 1 ; 2.00 db 25, 10 ; 2.50 db 3, 1 ; 3.00 db 35, 10 ; 3.50 db 4, 1 ; 4.00 Func_3f6e5: ; 3f6e5 (f:76e5) ld hl, W_PLAYERBATTSTATUS1 ld de, W_NUMHITS ld bc, $d06a ld a, [H_WHOSETURN] and a jr z, .asm_3f6fc ld hl, W_ENEMYBATTSTATUS1 ld de, $cd05 ld bc, $d06f .asm_3f6fc set 0, [hl] xor a ld [de], a inc de ld [de], a ld [W_PLAYERMOVEEFFECT], a ld [W_ENEMYMOVEEFFECT], a call GenRandomInBattle and $1 inc a inc a ld [bc], a ld a, [H_WHOSETURN] add $ae jp Func_3fb96 Func_3f717: ; 3f717 (f:7717) ld hl, W_PLAYERBATTSTATUS1 ; $d062 ld de, $d06a ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3f728 ld hl, W_ENEMYBATTSTATUS1 ; $d067 ld de, $d06f .asm_3f728 set 1, [hl] call GenRandomInBattle and $1 inc a inc a ld [de], a ld a, [H_WHOSETURN] ; $FF00+$f3 add $b0 jp Func_3fb96 Func_3f739: ; 3f739 (f:7739) ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr nz, .asm_3f791 ld a, [W_ISINBATTLE] ; $d057 dec a jr nz, .asm_3f77e ld a, [W_CURENEMYLVL] ; $d127 ld b, a ld a, [W_PLAYERMONLEVEL] ; $d022 cp b jr nc, .asm_3f76e add b ld c, a inc c .asm_3f751 call GenRandomInBattle cp c jr nc, .asm_3f751 srl b srl b cp b jr nc, .asm_3f76e ld c, $32 call DelayFrames ld a, [W_PLAYERMOVENUM] ; $cfd2 cp $64 jp nz, Func_3fb5e jp Func_3fb53 .asm_3f76e call ReadPlayerMonCurHPAndStatus xor a ld [$cc5b], a inc a ld [$d078], a ld a, [W_PLAYERMOVENUM] ; $cfd2 jr .asm_3f7e4 .asm_3f77e ld c, $32 call DelayFrames ld hl, UnnamedText_3fb69 ; $7b69 ld a, [W_PLAYERMOVENUM] ; $cfd2 cp $64 jp nz, PrintText jp Func_3fb53 .asm_3f791 ld a, [W_ISINBATTLE] ; $d057 dec a jr nz, .asm_3f7d1 ld a, [W_PLAYERMONLEVEL] ; $d022 ld b, a ld a, [W_CURENEMYLVL] ; $d127 cp b jr nc, .asm_3f7c1 add b ld c, a inc c .asm_3f7a4 call GenRandomInBattle cp c jr nc, .asm_3f7a4 srl b srl b cp b jr nc, .asm_3f7c1 ld c, $32 call DelayFrames ld a, [W_ENEMYMOVENUM] ; $cfcc cp $64 jp nz, Func_3fb5e jp Func_3fb53 .asm_3f7c1 call ReadPlayerMonCurHPAndStatus xor a ld [$cc5b], a inc a ld [$d078], a ld a, [W_ENEMYMOVENUM] ; $cfcc jr .asm_3f7e4 .asm_3f7d1 ld c, $32 call DelayFrames ld hl, UnnamedText_3fb69 ; $7b69 ld a, [W_ENEMYMOVENUM] ; $cfcc cp $64 jp nz, PrintText jp Func_3fb4e .asm_3f7e4 push af call Func_3fbb9 ld c, $14 call DelayFrames pop af ld hl, UnnamedText_3f802 ; $7802 cp $64 jr z, .asm_3f7ff ld hl, UnnamedText_3f807 ; $7807 cp $2e jr z, .asm_3f7ff ld hl, UnnamedText_3f80c ; $780c .asm_3f7ff jp PrintText UnnamedText_3f802: ; 3f802 (f:7802) TX_FAR _UnnamedText_3f802 db "@" UnnamedText_3f807: ; 3f807 (f:7807) TX_FAR _UnnamedText_3f807 db "@" UnnamedText_3f80c: ; 3f80c (f:780c) TX_FAR _UnnamedText_3f80c db "@" Func_3f811: ; 3f811 (f:7811) ld hl, W_PLAYERBATTSTATUS1 ; $d062 ld de, $d06a ld bc, W_NUMHITS ; $d074 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3f828 ld hl, W_ENEMYBATTSTATUS1 ; $d067 ld de, $d06f ld bc, $cd05 .asm_3f828 bit 2, [hl] ret nz set 2, [hl] ld hl, W_PLAYERMOVEEFFECT ; $cfd3 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3f838 ld hl, W_ENEMYMOVEEFFECT ; $cfcd .asm_3f838 ld a, [hl] cp $4d jr z, .asm_3f856 cp $2c ld a, $2 jr z, .asm_3f853 call GenRandomInBattle and $3 cp $2 jr c, .asm_3f851 call GenRandomInBattle and $3 .asm_3f851 inc a inc a .asm_3f853 ld [de], a ld [bc], a ret .asm_3f856 ld a, $2 ld [hl], a jr .asm_3f853 Func_3f85b: ; 3f85b (f:785b) call CheckTargetSubstitute ret nz ld hl, W_ENEMYBATTSTATUS1 ; $d067 ld de, W_PLAYERMOVEEFFECT ; $cfd3 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3f870 ld hl, W_PLAYERBATTSTATUS1 ; $d062 ld de, W_ENEMYMOVEEFFECT ; $cfcd .asm_3f870 ld a, [de] cp $1f ld b, $1a jr z, .asm_3f879 ld b, $4d .asm_3f879 call GenRandomInBattle cp b ret nc set 3, [hl] call Func_3f9cf ret Func_3f884: ; 3f884 (f:7884) ld hl, Func_33f57 ld b, BANK(Func_33f57) jp Bankswitch Func_3f88c: ; 3f88c (f:788c) ld hl, W_PLAYERBATTSTATUS1 ; $d062 ld de, W_PLAYERMOVEEFFECT ; $cfd3 ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld b, $ae jr z, .asm_3f8a1 ld hl, W_ENEMYBATTSTATUS1 ; $d067 ld de, W_ENEMYMOVEEFFECT ; $cfcd ld b, $af .asm_3f8a1 set 4, [hl] ld a, [de] dec de cp $2b jr nz, .asm_3f8ad set 6, [hl] ld b, $64 .asm_3f8ad ld a, [de] cp $5b jr nz, .asm_3f8b6 set 6, [hl] ld b, $c0 .asm_3f8b6 xor a ld [$cc5b], a ld a, b call Func_3fbb9 ld a, [de] ld [wWhichTrade], a ; $cd3d ld hl, UnnamedText_3f8c8 ; $78c8 jp PrintText UnnamedText_3f8c8: ; 3f8c8 (f:78c8) TX_FAR _UnnamedText_3f8c8 db $08 ; asm ld a, [wWhichTrade] ; $cd3d cp $d ld hl, UnnamedText_3f8f9 ; $78f9 jr z, .asm_3f8f8 cp $4c ld hl, UnnamedText_3f8fe ; $78fe jr z, .asm_3f8f8 cp $82 ld hl, UnnamedText_3f903 ; $7903 jr z, .asm_3f8f8 cp $8f ld hl, UnnamedText_3f908 ; $7908 jr z, .asm_3f8f8 cp $13 ld hl, UnnamedText_3f90d ; $790d jr z, .asm_3f8f8 cp $5b ld hl, UnnamedText_3f912 ; $7912 .asm_3f8f8 ret UnnamedText_3f8f9: ; 3f8f9 (f:78f9) TX_FAR _UnnamedText_3f8f9 db "@" UnnamedText_3f8fe: ; 3f8fe (f:78fe) TX_FAR _UnnamedText_3f8fe db "@" UnnamedText_3f903: ; 3f903 (f:7903) TX_FAR _UnnamedText_3f903 db "@" UnnamedText_3f908: ; 3f908 (f:7908) TX_FAR _UnnamedText_3f908 db "@" UnnamedText_3f90d: ; 3f90d (f:790d) TX_FAR _UnnamedText_3f90d db "@" UnnamedText_3f912: ; 3f912 (f:7912) TX_FAR _UnnamedText_3f912 db "@" Func_3f917: ; 3f917 (f:7917) ld hl, W_PLAYERBATTSTATUS1 ; $d062 ld de, $d06a ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3f928 ld hl, W_ENEMYBATTSTATUS1 ; $d067 ld de, $d06f .asm_3f928 bit 5, [hl] ret nz call Func_3f9cf set 5, [hl] call GenRandomInBattle and $3 cp $2 jr c, .asm_3f93e call GenRandomInBattle and $3 .asm_3f93e inc a ld [de], a ret Func_3f941: ; 3f941 (f:7941) ld hl, Func_33f2b ld b, BANK(Func_33f2b) jp Bankswitch Func_3f949: ; 3f949 (f:7949) ld hl, Func_27f86 ld b, BANK(Func_27f86) jp Bankswitch Func_3f951: ; 3f951 (f:7951) ld hl, Func_1392c ld b, BANK(Func_1392c) jp Bankswitch Func_3f959: ; 3f959 (f:7959) call GenRandomInBattle cp $19 ret nc jr Func_3f96f Func_3f961: ; 3f961 (f:7961) call CheckTargetSubstitute jr nz, Func_3f9a6 call MoveHitTest ld a, [W_MOVEMISSED] ; $d05f and a jr nz, Func_3f9a6 Func_3f96f: ; 3f96f (f:796f) ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld hl, W_ENEMYBATTSTATUS1 ; $d067 ld bc, $d070 ld a, [W_PLAYERMOVEEFFECT] ; $cfd3 jr z, .asm_3f986 ld hl, W_PLAYERBATTSTATUS1 ; $d062 ld bc, $d06b ld a, [W_ENEMYMOVEEFFECT] ; $cfcd .asm_3f986 bit 7, [hl] jr nz, Func_3f9a6 set 7, [hl] push af call GenRandomInBattle and $3 inc a inc a ld [bc], a pop af cp $4c call nz, Func_3fb89 ld hl, UnnamedText_3f9a1 ; $79a1 jp PrintText UnnamedText_3f9a1: ; 3f9a1 (f:79a1) TX_FAR _UnnamedText_3f9a1 db "@" Func_3f9a6: ; 3f9a6 (f:79a6) cp $4c ret z ld c, $32 call DelayFrames jp Func_3fb4e Func_3f9b1: ; 3f9b1 (f:79b1) ld hl, Func_52601 ld b, BANK(Func_52601) jp Bankswitch Func_3f9b9: ; 3f9b9 (f:79b9) ld hl, SubstituteEffectHandler ld b, BANK(SubstituteEffectHandler) jp Bankswitch Func_3f9c1: ; 3f9c1 (f:79c1) ld hl, W_PLAYERBATTSTATUS2 ; $d063 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3f9cc ld hl, W_ENEMYBATTSTATUS2 ; $d068 .asm_3f9cc set 5, [hl] ret Func_3f9cf: ; 3f9cf (f:79cf) push hl ld hl, W_ENEMYBATTSTATUS2 ; $d068 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3f9db ld hl, W_PLAYERBATTSTATUS2 ; $d063 .asm_3f9db res 5, [hl] pop hl ret Func_3f9df: ; 3f9df (f:79df) ld hl, W_PLAYERBATTSTATUS2 ld a, [H_WHOSETURN] and a jr z, .player ld hl, W_ENEMYBATTSTATUS2 .player set 6, [hl] ret Func_3f9ed: ; 3f9ed (f:79ed) ld c, $32 call DelayFrames call MoveHitTest ld a, [W_MOVEMISSED] and a jr nz, .asm_3fa74 ld a, [H_WHOSETURN] and a ld hl, W_PLAYERMONMOVES ld a, [W_PLAYERBATTSTATUS1] jr nz, .asm_3fa13 ld a, [W_ISLINKBATTLE] cp $4 jr nz, .asm_3fa3a ld hl, W_ENEMYMONMOVES ld a, [W_ENEMYBATTSTATUS1] .asm_3fa13 bit 6, a jr nz, .asm_3fa74 .asm_3fa17 push hl call GenRandomInBattle and $3 ld c, a ld b, $0 add hl, bc ld a, [hl] pop hl and a jr z, .asm_3fa17 ld d, a ld a, [H_WHOSETURN] and a ld hl, W_PLAYERMONMOVES ld a, [wPlayerMoveListIndex] jr z, .asm_3fa5f ld hl, W_ENEMYMONMOVES ld a, [wEnemyMoveListIndex] jr .asm_3fa5f .asm_3fa3a ld a, [W_ENEMYBATTSTATUS1] bit 6, a jr nz, .asm_3fa74 ld a, [wCurrentMenuItem] push af ld a, $1 ld [wMoveMenuType], a call MoveSelectionMenu call LoadScreenTilesFromBuffer1 ld hl, W_ENEMYMONMOVES ld a, [wCurrentMenuItem] ld c, a ld b, $0 add hl, bc ld d, [hl] pop af ld hl, W_PLAYERMONMOVES .asm_3fa5f ld c, a ld b, $0 add hl, bc ld a, d ld [hl], a ld [$d11e], a call GetMoveName call Func_3fba8 ld hl, UnnamedText_3fa77 jp PrintText .asm_3fa74 jp Func_3fb53 UnnamedText_3fa77: ; 3fa77 (f:7a77) TX_FAR _UnnamedText_3fa77 db "@" Func_3fa7c: ; 3fa7c (f:7a7c) ld hl, Func_2bea9 ld b, BANK(Func_2bea9) jp Bankswitch Func_3fa84: ; 3fa84 (f:7a84) call Func_3fba8 jp Func_3fb43 Func_3fa8a: ; 3fa8a (f:7a8a) call MoveHitTest ld a, [W_MOVEMISSED] ; $d05f and a jr nz, .asm_3fb06 ld de, W_ENEMYDISABLEDMOVE ; $d072 ld hl, W_ENEMYMONMOVES ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_3faa4 ld de, W_PLAYERDISABLEDMOVE ; $d06d ld hl, W_PLAYERMONMOVES .asm_3faa4 ld a, [de] and a jr nz, .asm_3fb06 .asm_3faa8 push hl call GenRandomInBattle and $3 ld c, a ld b, $0 add hl, bc ld a, [hl] pop hl and a jr z, .asm_3faa8 ld [$d11e], a push hl ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld hl, W_PLAYERMONPP ; $d02d jr nz, .asm_3facf ld a, [W_ISLINKBATTLE] ; $d12b cp $4 pop hl jr nz, .asm_3fae1 push hl ld hl, W_ENEMYMONPP ; $cffe .asm_3facf push hl ld a, [hli] or [hl] inc hl or [hl] inc hl or [hl] and $3f pop hl jr z, .asm_3fb05 add hl, bc ld a, [hl] pop hl and a jr z, .asm_3faa8 .asm_3fae1 call GenRandomInBattle and $7 inc a inc c swap c add c ld [de], a call Func_3fb89 ld hl, $ccee ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr nz, .asm_3faf8 inc hl .asm_3faf8 ld a, [$d11e] ld [hl], a call GetMoveName ld hl, UnnamedText_3fb09 ; $7b09 jp PrintText .asm_3fb05 pop hl .asm_3fb06 jp Func_3fb53 UnnamedText_3fb09: ; 3fb09 (f:7b09) TX_FAR _UnnamedText_3fb09 db "@" Func_3fb0e: ; 3fb0e (f:7b0e) ld hl, Func_2feb8 ld b, BANK(Func_2feb8) jp Bankswitch Func_3fb16: ; 3fb16 (f:7b16) ld hl, Func_139a3 ld b, BANK(Func_139a3) jp Bankswitch Func_3fb1e: ; 3fb1e (f:7b1e) ld hl, Func_139da ld b, BANK(Func_139da) jp Bankswitch Func_3fb26: ; 3fb26 (f:7b26) ld hl, Func_3b9ec ld b, BANK(Func_3b9ec) jp Bankswitch Func_3fb2e: ; 3fb2e (f:7b2e) ld hl, Func_3bab1 ld b, BANK(Func_3bab1) jp Bankswitch Func_3fb36: ; 3fb36 (f:7b36) ld hl, Func_3bb97 ld b, BANK(Func_3bb97) jp Bankswitch UnnamedText_3fb3e: ; 3fb3e (f:7b3e) TX_FAR _UnnamedText_3fb3e db "@" Func_3fb43: ; 3fb43 (f:7b43) ld hl, UnnamedText_3fb49 jp PrintText UnnamedText_3fb49: ; 3fb49 (f:7b49) TX_FAR _UnnamedText_3fb49 db "@" Func_3fb4e: ; 3fb4e (f:7b4e) ld a, [$ccf4] and a ret nz Func_3fb53: ; 3fb53 (f:7b53) ld hl, UnnamedText_3fb59 ; $7b59 jp PrintText UnnamedText_3fb59: ; 3fb59 (f:7b59) TX_FAR _UnnamedText_3fb59 db "@" Func_3fb5e: ; 3fb5e (f:7b5e) ld hl, UnnamedText_3fb64 ; $7b64 jp PrintText UnnamedText_3fb64: ; 3fb64 (f:7b64) TX_FAR _UnnamedText_3fb64 db "@" UnnamedText_3fb69: ; 3fb69 (f:7b69) TX_FAR _UnnamedText_3fb69 db "@" Func_3fb6e: ; 3fb6e (f:7b6e) ld hl, UnnamedText_3fb74 ; $7b74 jp PrintText UnnamedText_3fb74: ; 3fb74 (f:7b74) TX_FAR _UnnamedText_3fb74 db "@" CheckTargetSubstitute: ; 3fb79 (f:7b79) push hl ld hl, $d068 ld a, [$ff00+$f3] ;whose turn? and a jr z, .next1 ld hl, $d063 .next1 bit 4, [hl] ;test bit 4 in d063/d068 flags pop hl ret Func_3fb89: ; 3fb89 (f:7b89) ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld a, [W_PLAYERMOVENUM] ; $cfd2 jr z, .asm_3fb94 ld a, [W_ENEMYMOVENUM] ; $cfcc .asm_3fb94 and a ret z Func_3fb96: ; 3fb96 (f:7b96) ld [W_ANIMATIONID], a ; $d07c ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld a, $6 jr z, .asm_3fba2 ld a, $3 .asm_3fba2 ld [$cc5b], a jp Func_3fbbc Func_3fba8: ; 3fba8 (f:7ba8) xor a ld [$cc5b], a ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld a, [W_PLAYERMOVENUM] ; $cfd2 jr z, .asm_3fbb7 ld a, [W_ENEMYMOVENUM] ; $cfcc .asm_3fbb7 and a ret z Func_3fbb9: ; 3fbb9 (f:7bb9) ld [W_ANIMATIONID], a ; $d07c Func_3fbbc: ; 3fbbc (f:7bbc) push hl push de push bc ld a, $8 call Predef ; indirect jump to MoveAnimation (78d5e (1e:4d5e)) pop bc pop de pop hl ret SECTION "bank10",ROMX,BANK[$10] DisplayPokedexMenu_: ; 40000 (10:4000) call GBPalWhiteOut call ClearScreen call UpdateSprites ; move sprites ld a,[wListScrollOffset] push af xor a ld [wCurrentMenuItem],a ld [wListScrollOffset],a ld [wLastMenuItem],a inc a ld [$d11e],a ld [$ffb7],a .setUpGraphics ld b,$08 call GoPAL_SET ld hl,LoadPokedexTilePatterns ld b,BANK(LoadPokedexTilePatterns) call Bankswitch .doPokemonListMenu ld hl,wTopMenuItemY ld a,3 ld [hli],a ; top menu item Y xor a ld [hli],a ; top menu item X inc a ld [$cc37],a inc hl inc hl ld a,6 ld [hli],a ; max menu item ID ld [hl],%00110011 ; menu watched keys (Left, Right, B button, A button) call HandlePokedexListMenu jr c,.goToSideMenu ; if the player chose a pokemon from the list .exitPokedex xor a ld [$cc37],a ld [wCurrentMenuItem],a ld [wLastMenuItem],a ld [$ffb7],a ld [$cd3a],a ld [$cd3b],a pop af ld [wListScrollOffset],a call GBPalWhiteOutWithDelay3 call GoPAL_SET_CF1C jp ReloadMapData .goToSideMenu call HandlePokedexSideMenu dec b jr z,.exitPokedex ; if the player chose Quit dec b jr z,.doPokemonListMenu ; if pokemon not seen or player pressed B button jp .setUpGraphics ; if pokemon data or area was shown ; handles the menu on the lower right in the pokedex screen ; OUTPUT: ; b = reason for exiting menu ; 00: showed pokemon data or area ; 01: the player chose Quit ; 02: the pokemon has not been seen yet or the player pressed the B button HandlePokedexSideMenu: ; 4006d (10:406d) call PlaceUnfilledArrowMenuCursor ld a,[wCurrentMenuItem] push af ld b,a ld a,[wLastMenuItem] push af ld a,[wListScrollOffset] push af add b inc a ld [$d11e],a ld a,[$d11e] push af ld a,[$cd3d] push af ld hl,wPokedexSeen call IsPokemonBitSet ld b,2 jr z,.exitSideMenu call PokedexToIndex ld hl,wTopMenuItemY ld a,10 ld [hli],a ; top menu item Y ld a,15 ld [hli],a ; top menu item X xor a ld [hli],a ; current menu item ID inc hl ld a,3 ld [hli],a ; max menu item ID ld [hli],a ; menu watched keys (A button and B button) xor a ld [hli],a ; old menu item ID ld [$cc37],a .handleMenuInput call HandleMenuInput bit 1,a ; was the B button pressed? ld b,2 jr nz,.buttonBPressed ld a,[wCurrentMenuItem] and a jr z,.choseData dec a jr z,.choseCry dec a jr z,.choseArea .choseQuit ld b,1 .exitSideMenu pop af ld [$cd3d],a pop af ld [$d11e],a pop af ld [wListScrollOffset],a pop af ld [wLastMenuItem],a pop af ld [wCurrentMenuItem],a push bc FuncCoord 0,3 ld hl,Coord ld de,20 ld bc,$7f0d ; 13 blank tiles call DrawTileLine ; cover up the menu cursor in the pokemon list pop bc ret .buttonBPressed push bc FuncCoord 15,10 ld hl,Coord ld de,20 ld bc,$7f07 ; 7 blank tiles call DrawTileLine ; cover up the menu cursor in the side menu pop bc jr .exitSideMenu .choseData call ShowPokedexDataInternal ld b,0 jr .exitSideMenu ; play pokemon cry .choseCry ld a,[$d11e] call GetCryData ; get cry data call PlaySound ; play sound jr .handleMenuInput .choseArea ld a,$4a call Predef ; display pokemon areas ld b,0 jr .exitSideMenu ; handles the list of pokemon on the left of the pokedex screen ; sets carry flag if player presses A, unsets carry flag if player presses B HandlePokedexListMenu: ; 40111 (10:4111) xor a ld [H_AUTOBGTRANSFERENABLED],a ; draw the horizontal line separating the seen and owned amounts from the menu FuncCoord 15,8 ld hl,Coord ld a,$7a ; horizontal line tile ld [hli],a ld [hli],a ld [hli],a ld [hli],a ld [hli],a FuncCoord 14,0 ld hl,Coord ld [hl],$71 ; vertical line tile FuncCoord 14,1 ld hl,Coord call DrawPokedexVerticalLine FuncCoord 14,9 ld hl,Coord call DrawPokedexVerticalLine ld hl,wPokedexSeen ld b,19 call CountSetBits ld de,$d11e FuncCoord 16,3 ld hl,Coord ld bc,$0103 call PrintNumber ; print number of seen pokemon ld hl,wPokedexOwned ld b,19 call CountSetBits ld de,$d11e FuncCoord 16,6 ld hl,Coord ld bc,$0103 call PrintNumber ; print number of owned pokemon FuncCoord 16,2 ld hl,Coord ld de,PokedexSeenText call PlaceString FuncCoord 16,5 ld hl,Coord ld de,PokedexOwnText call PlaceString FuncCoord 1,1 ld hl,Coord ld de,PokedexContentsText call PlaceString FuncCoord 16,10 ld hl,Coord ld de,PokedexMenuItemsText call PlaceString ; find the highest pokedex number among the pokemon the player has seen ld hl,wPokedexSeen + 18 ld b,153 .maxSeenPokemonLoop ld a,[hld] ld c,8 .maxSeenPokemonInnerLoop dec b sla a jr c,.storeMaxSeenPokemon dec c jr nz,.maxSeenPokemonInnerLoop jr .maxSeenPokemonLoop .storeMaxSeenPokemon ld a,b ld [$cd3d],a ; max seen pokemon .loop xor a ld [H_AUTOBGTRANSFERENABLED],a FuncCoord 4,2 ld hl,Coord ld bc,$0e0a call ClearScreenArea FuncCoord 1,3 ld hl,Coord ld a,[wListScrollOffset] ld [$d11e],a ld d,7 ld a,[$cd3d] cp a,7 jr nc,.printPokemonLoop ld d,a dec a ld [wMaxMenuItem],a ; loop to print pokemon pokedex numbers and names ; if the player has owned the pokemon, it puts a pokeball beside the name .printPokemonLoop ld a,[$d11e] inc a ld [$d11e],a push af push de push hl ld de,-20 add hl,de ld de,$d11e ld bc,$8103 call PrintNumber ; print the pokedex number ld de,20 add hl,de dec hl push hl ld hl,wPokedexOwned call IsPokemonBitSet pop hl ld a," " jr z,.writeTile ld a,$72 ; pokeball tile .writeTile ld [hl],a ; put a pokeball next to pokemon that the player has owned push hl ld hl,wPokedexSeen call IsPokemonBitSet jr nz,.getPokemonName ; if the player has seen the pokemon ld de,.dashedLine ; print a dashed line in place of the name if the player hasn't seen the pokemon jr .skipGettingName .dashedLine ; for unseen pokemon in the list db "----------@" .getPokemonName call PokedexToIndex call GetMonName .skipGettingName pop hl inc hl call PlaceString pop hl ld bc,2 * 20 add hl,bc pop de pop af ld [$d11e],a dec d jr nz,.printPokemonLoop ld a,01 ld [H_AUTOBGTRANSFERENABLED],a call Delay3 call GBPalNormal call HandleMenuInput bit 1,a ; was the B button pressed? jp nz,.buttonBPressed .checkIfUpPressed bit 6,a ; was Up pressed? jr z,.checkIfDownPressed .upPressed ; scroll up one row ld a,[wListScrollOffset] and a jp z,.loop dec a ld [wListScrollOffset],a jp .loop .checkIfDownPressed bit 7,a ; was Down pressed? jr z,.checkIfRightPressed .downPressed ; scroll down one row ld a,[$cd3d] cp a,7 jp c,.loop sub a,7 ld b,a ld a,[wListScrollOffset] cp b jp z,.loop inc a ld [wListScrollOffset],a jp .loop .checkIfRightPressed bit 4,a ; was Right pressed? jr z,.checkIfLeftPressed .rightPressed ; scroll down 7 rows ld a,[$cd3d] cp a,7 jp c,.loop sub a,6 ld b,a ld a,[wListScrollOffset] add a,7 ld [wListScrollOffset],a cp b jp c,.loop dec b ld a,b ld [wListScrollOffset],a jp .loop .checkIfLeftPressed ; scroll up 7 rows bit 5,a ; was Left pressed? jr z,.buttonAPressed .leftPressed ld a,[wListScrollOffset] sub a,7 ld [wListScrollOffset],a jp nc,.loop xor a ld [wListScrollOffset],a jp .loop .buttonAPressed scf ret .buttonBPressed and a ret DrawPokedexVerticalLine: ; 4028e (10:428e) ld c,9 ; height of line ld de,20 ; width of screen ld a,$71 ; vertical line tile .loop ld [hl],a add hl,de xor a,1 ; toggle between vertical line tile and box tile dec c jr nz,.loop ret PokedexSeenText: ; 4029d (10:429d) db "SEEN@" PokedexOwnText: ; 402a2 (10:42a2) db "OWN@" PokedexContentsText: ; 402a6 (10:42a6) db "CONTENTS@" PokedexMenuItemsText: ; 402af (10:42af) db "DATA" next "CRY" next "AREA" next "QUIT@" ; tests if a pokemon's bit is set in the seen or owned pokemon bit fields ; INPUT: ; [$d11e] = pokedex number ; hl = address of bit field IsPokemonBitSet: ; 402c2 (10:42c2) ld a,[$d11e] dec a ld c,a ld b,2 ld a,$10 call Predef ld a,c and a ret ; function to display pokedex data from outside the pokedex ShowPokedexData: ; 402d1 (10:42d1) call GBPalWhiteOutWithDelay3 call ClearScreen call UpdateSprites ld hl, LoadPokedexTilePatterns ld b, BANK(LoadPokedexTilePatterns) call Bankswitch ; load pokedex tiles ; function to display pokedex data from inside the pokedex ShowPokedexDataInternal: ; 402e2 (10:42e2) ld hl,$d72c set 1,[hl] ld a,$33 ; 3/7 volume ld [$ff24],a call GBPalWhiteOut ; zero all palettes call ClearScreen ld a,[$d11e] ; pokemon ID ld [$cf91],a push af ld b,04 call GoPAL_SET pop af ld [$d11e],a ld a,[$ffd7] push af xor a ld [$ffd7],a FuncCoord 0,0 ld hl,Coord ld de,1 ld bc,$6414 call DrawTileLine ; draw top border FuncCoord 0,17 ld hl,Coord ld b,$6f call DrawTileLine ; draw bottom border FuncCoord 0,1 ld hl,Coord ld de,20 ld bc,$6610 call DrawTileLine ; draw left border FuncCoord 19,1 ld hl,Coord ld b,$67 call DrawTileLine ; draw right border FuncCoord 0,0 ld a,$63 ; upper left corner tile ld [Coord],a FuncCoord 19,0 ld a,$65 ; upper right corner tile ld [Coord],a FuncCoord 0,17 ld a,$6c ; lower left corner tile ld [Coord],a FuncCoord 19,17 ld a,$6e ; lower right corner tile ld [Coord],a FuncCoord 0,9 ld hl,Coord ld de,PokedexDataDividerLine call PlaceString ; draw horizontal divider line FuncCoord 9,6 ld hl,Coord ld de,HeightWeightText call PlaceString call GetMonName FuncCoord 9,2 ld hl,Coord call PlaceString ld hl,PokedexEntryPointers ld a,[$d11e] dec a ld e,a ld d,0 add hl,de add hl,de ld a,[hli] ld e,a ld d,[hl] ; de = address of pokedex entry FuncCoord 9,4 ld hl,Coord call PlaceString ; print species name ld h,b ld l,c push de ld a,[$d11e] push af call IndexToPokedex FuncCoord 2,8 ld hl,Coord ld a, "№" ld [hli],a ld a,$f2 ld [hli],a ld de,$d11e ld bc,$8103 call PrintNumber ; print pokedex number ld hl,wPokedexOwned call IsPokemonBitSet pop af ld [$d11e],a ld a,[$cf91] ld [$d0b5],a pop de push af push bc push de push hl call Delay3 call GBPalNormal call GetMonHeader ; load pokemon picture location FuncCoord 1,1 ld hl,Coord call LoadFlippedFrontSpriteByMonIndex ; draw pokemon picture ld a,[$cf91] call PlayCry ; play pokemon cry pop hl pop de pop bc pop af ld a,c and a jp z,.waitForButtonPress ; if the pokemon has not been owned, don't print the height, weight, or description inc de ; de = address of feet (height) ld a,[de] ; reads feet, but a is overwritten without being used FuncCoord 12,6 ld hl,Coord ld bc,$0102 call PrintNumber ; print feet (height) ld a,$60 ; feet symbol tile (one tick) ld [hl],a inc de inc de ; de = address of inches (height) FuncCoord 15,6 ld hl,Coord ld bc,$8102 call PrintNumber ; print inches (height) ld a,$61 ; inches symbol tile (two ticks) ld [hl],a ; now print the weight (note that weight is stored in tenths of pounds internally) inc de inc de inc de ; de = address of upper byte of weight push de ; put weight in big-endian order at $ff8b ld hl,$ff8b ld a,[hl] ; save existing value of [$ff8b] push af ld a,[de] ; a = upper byte of weight ld [hli],a ; store upper byte of weight in [$ff8b] ld a,[hl] ; save existing value of [$ff8c] push af dec de ld a,[de] ; a = lower byte of weight ld [hl],a ; store lower byte of weight in [$ff8c] FuncCoord 11,8 ld de,$ff8b ld hl,Coord ld bc,$0205 ; no leading zeroes, right-aligned, 2 bytes, 5 digits call PrintNumber ; print weight FuncCoord 14,8 ld hl,Coord ld a,[$ff8c] sub a,10 ld a,[$ff8b] sbc a,0 jr nc,.next ld [hl],"0" ; if the weight is less than 10, put a 0 before the decimal point .next inc hl ld a,[hli] ld [hld],a ; make space for the decimal point by moving the last digit forward one tile ld [hl],$f2 ; decimal point tile pop af ld [$ff8c],a ; restore original value of [$ff8c] pop af ld [$ff8b],a ; restore original value of [$ff8b] pop hl inc hl ; hl = address of pokedex description text FuncCoord 1,11 ld bc,Coord ld a,2 ld [$fff4],a call TextCommandProcessor ; print pokedex description text xor a ld [$fff4],a .waitForButtonPress call GetJoypadStateLowSensitivity ld a,[$ffb5] and a,%00000011 ; A button and B button jr z,.waitForButtonPress pop af ld [$ffd7],a call GBPalWhiteOut call ClearScreen call GoPAL_SET_CF1C call LoadTextBoxTilePatterns call GBPalNormal ld hl,$d72c res 1,[hl] ld a,$77 ; max volume ld [$ff24],a ret HeightWeightText: ; 40448 (10:4448) db "HT ?",$60,"??",$61,$4E,"WT ???lb@" ; XXX does anything point to this? Unknown_4045D: ; 4045d (10:445d) db $54,$50 ; horizontal line that divides the pokedex text description from the rest of the data PokedexDataDividerLine: ; 4045f (10:445f) db $68,$69,$6B,$69,$6B db $69,$6B,$69,$6B,$6B db $6B,$6B,$69,$6B,$69 db $6B,$69,$6B,$69,$6A db $50 ; draws a line of tiles ; INPUT: ; b = tile ID ; c = number of tile ID's to write ; de = amount to destination address after each tile (1 for horizontal, 20 for vertical) ; hl = destination address DrawTileLine: ; 40474 (10:4474) push bc push de .loop ld [hl],b add hl,de dec c jr nz,.loop pop de pop bc ret PokedexEntryPointers: ; 4047e (10:447e) dw RhydonDexEntry dw KangaskhanDexEntry dw NidoranMDexEntry dw ClefairyDexEntry dw SpearowDexEntry dw VoltorbDexEntry dw NidokingDexEntry dw SlowbroDexEntry dw IvysaurDexEntry dw ExeggutorDexEntry dw LickitungDexEntry dw ExeggcuteDexEntry dw GrimerDexEntry dw GengarDexEntry dw NidoranFDexEntry dw NidoqueenDexEntry dw CuboneDexEntry dw RhyhornDexEntry dw LaprasDexEntry dw ArcanineDexEntry dw MewDexEntry dw GyaradosDexEntry dw ShellderDexEntry dw TentacoolDexEntry dw GastlyDexEntry dw ScytherDexEntry dw StaryuDexEntry dw BlastoiseDexEntry dw PinsirDexEntry dw TangelaDexEntry dw MissingNoDexEntry dw MissingNoDexEntry dw GrowlitheDexEntry dw OnixDexEntry dw FearowDexEntry dw PidgeyDexEntry dw SlowpokeDexEntry dw KadabraDexEntry dw GravelerDexEntry dw ChanseyDexEntry dw MachokeDexEntry dw MrMimeDexEntry dw HitmonleeDexEntry dw HitmonchanDexEntry dw ArbokDexEntry dw ParasectDexEntry dw PsyduckDexEntry dw DrowzeeDexEntry dw GolemDexEntry dw MissingNoDexEntry dw MagmarDexEntry dw MissingNoDexEntry dw ElectabuzzDexEntry dw MagnetonDexEntry dw KoffingDexEntry dw MissingNoDexEntry dw MankeyDexEntry dw SeelDexEntry dw DiglettDexEntry dw TaurosDexEntry dw MissingNoDexEntry dw MissingNoDexEntry dw MissingNoDexEntry dw FarfetchdDexEntry dw VenonatDexEntry dw DragoniteDexEntry dw MissingNoDexEntry dw MissingNoDexEntry dw MissingNoDexEntry dw DoduoDexEntry dw PoliwagDexEntry dw JynxDexEntry dw MoltresDexEntry dw ArticunoDexEntry dw ZapdosDexEntry dw DittoDexEntry dw MeowthDexEntry dw KrabbyDexEntry dw MissingNoDexEntry dw MissingNoDexEntry dw MissingNoDexEntry dw VulpixDexEntry dw NinetalesDexEntry dw PikachuDexEntry dw RaichuDexEntry dw MissingNoDexEntry dw MissingNoDexEntry dw DratiniDexEntry dw DragonairDexEntry dw KabutoDexEntry dw KabutopsDexEntry dw HorseaDexEntry dw SeadraDexEntry dw MissingNoDexEntry dw MissingNoDexEntry dw SandshrewDexEntry dw SandslashDexEntry dw OmanyteDexEntry dw OmastarDexEntry dw JigglypuffDexEntry dw WigglytuffDexEntry dw EeveeDexEntry dw FlareonDexEntry dw JolteonDexEntry dw VaporeonDexEntry dw MachopDexEntry dw ZubatDexEntry dw EkansDexEntry dw ParasDexEntry dw PoliwhirlDexEntry dw PoliwrathDexEntry dw WeedleDexEntry dw KakunaDexEntry dw BeedrillDexEntry dw MissingNoDexEntry dw DodrioDexEntry dw PrimeapeDexEntry dw DugtrioDexEntry dw VenomothDexEntry dw DewgongDexEntry dw MissingNoDexEntry dw MissingNoDexEntry dw CaterpieDexEntry dw MetapodDexEntry dw ButterfreeDexEntry dw MachampDexEntry dw MissingNoDexEntry dw GolduckDexEntry dw HypnoDexEntry dw GolbatDexEntry dw MewtwoDexEntry dw SnorlaxDexEntry dw MagikarpDexEntry dw MissingNoDexEntry dw MissingNoDexEntry dw MukDexEntry dw MissingNoDexEntry dw KinglerDexEntry dw CloysterDexEntry dw MissingNoDexEntry dw ElectrodeDexEntry dw ClefableDexEntry dw WeezingDexEntry dw PersianDexEntry dw MarowakDexEntry dw MissingNoDexEntry dw HaunterDexEntry dw AbraDexEntry dw AlakazamDexEntry dw PidgeottoDexEntry dw PidgeotDexEntry dw StarmieDexEntry dw BulbasaurDexEntry dw VenusaurDexEntry dw TentacruelDexEntry dw MissingNoDexEntry dw GoldeenDexEntry dw SeakingDexEntry dw MissingNoDexEntry dw MissingNoDexEntry dw MissingNoDexEntry dw MissingNoDexEntry dw PonytaDexEntry dw RapidashDexEntry dw RattataDexEntry dw RaticateDexEntry dw NidorinoDexEntry dw NidorinaDexEntry dw GeodudeDexEntry dw PorygonDexEntry dw AerodactylDexEntry dw MissingNoDexEntry dw MagnemiteDexEntry dw MissingNoDexEntry dw MissingNoDexEntry dw CharmanderDexEntry dw SquirtleDexEntry dw CharmeleonDexEntry dw WartortleDexEntry dw CharizardDexEntry dw MissingNoDexEntry dw MissingNoDexEntry dw MissingNoDexEntry dw MissingNoDexEntry dw OddishDexEntry dw GloomDexEntry dw VileplumeDexEntry dw BellsproutDexEntry dw WeepinbellDexEntry dw VictreebelDexEntry ; string: species name ; height in feet, inches ; weight in pounds ; text entry RhydonDexEntry: ; 405fa (10:45fa) db "DRILL@" db 6,3 dw 2650 TX_FAR _RhydonDexEntry db "@" KangaskhanDexEntry: ; 40609 (10:4609) db "PARENT@" db 7,3 dw 1760 TX_FAR _KangaskhanDexEntry db "@" NidoranMDexEntry: ; 40619 (10:4619) db "POISON PIN@" db 1,8 dw 200 TX_FAR _NidoranMDexEntry db "@" ClefairyDexEntry: ; 4062d (10:462d) db "FAIRY@" db 2,0 dw 170 TX_FAR _ClefairyDexEntry db "@" SpearowDexEntry: ; 4063c (10:463c) db "TINY BIRD@" db 1,0 dw 40 TX_FAR _SpearowDexEntry db "@" VoltorbDexEntry: ; 4064f (10:464f) db "BALL@" db 1,8 dw 230 TX_FAR _VoltorbDexEntry db "@" NidokingDexEntry: ; 4065d (10:465d) db "DRILL@" db 4,7 dw 1370 TX_FAR _NidokingDexEntry db "@" SlowbroDexEntry: ; 4066c (10:466c) db "HERMITCRAB@" db 5,3 dw 1730 TX_FAR _SlowbroDexEntry db "@" IvysaurDexEntry: ; 40680 (10:4680) db "SEED@" db 3,3 dw 290 TX_FAR _IvysaurDexEntry db "@" ExeggutorDexEntry: ; 4068e (10:468e) db "COCONUT@" db 6,7 dw 2650 TX_FAR _ExeggutorDexEntry db "@" LickitungDexEntry: ; 4069f (10:469f) db "LICKING@" db 3,11 dw 1440 TX_FAR _LickitungDexEntry db "@" ExeggcuteDexEntry: ; 406b0 (10:46b0) db "EGG@" db 1,4 dw 60 TX_FAR _ExeggcuteDexEntry db "@" GrimerDexEntry: ; 406bd (10:46bd) db "SLUDGE@" db 2,11 dw 660 TX_FAR _GrimerDexEntry db "@" GengarDexEntry: ; 406cd (10:46cd) db "SHADOW@" db 4,11 dw 890 TX_FAR _GengarDexEntry db "@" NidoranFDexEntry: ; 406dd (10:46dd) db "POISON PIN@" db 1,4 dw 150 TX_FAR _NidoranFDexEntry db "@" NidoqueenDexEntry: ; 406f1 (10:46f1) db "DRILL@" db 4,3 dw 1320 TX_FAR _NidoqueenDexEntry db "@" CuboneDexEntry: ; 40700 (10:4700) db "LONELY@" db 1,4 dw 140 TX_FAR _CuboneDexEntry db "@" RhyhornDexEntry: ; 40710 (10:4710) db "SPIKES@" db 3,3 dw 2540 TX_FAR _RhyhornDexEntry db "@" LaprasDexEntry: ; 40720 (10:4720) db "TRANSPORT@" db 8,2 dw 4850 TX_FAR _LaprasDexEntry db "@" ArcanineDexEntry: ; 40733 (10:4733) db "LEGENDARY@" db 6,3 dw 3420 TX_FAR _ArcanineDexEntry db "@" MewDexEntry: ; 40746 (10:4746) db "NEW SPECIE@" db 1,4 dw 90 TX_FAR _MewDexEntry db "@" GyaradosDexEntry: ; 4075a (10:475a) db "ATROCIOUS@" db 21,4 dw 5180 TX_FAR _GyaradosDexEntry db "@" ShellderDexEntry: ; 4076d (10:476d) db "BIVALVE@" db 1,0 dw 90 TX_FAR _ShellderDexEntry db "@" TentacoolDexEntry: ; 4077e (10:477e) db "JELLYFISH@" db 2,11 dw 1000 TX_FAR _TentacoolDexEntry db "@" GastlyDexEntry: ; 40791 (10:4791) db "GAS@" db 4,3 dw 2 TX_FAR _GastlyDexEntry db "@" ScytherDexEntry: ; 4079e (10:479e) db "MANTIS@" db 4,11 dw 1230 TX_FAR _ScytherDexEntry db "@" StaryuDexEntry: ; 407ae (10:47ae) db "STARSHAPE@" db 2,7 dw 760 TX_FAR _StaryuDexEntry db "@" BlastoiseDexEntry: ; 407c1 (10:47c1) db "SHELLFISH@" db 5,3 dw 1890 TX_FAR _BlastoiseDexEntry db "@" PinsirDexEntry: ; 407d4 (10:47d4) db "STAGBEETLE@" db 4,11 dw 1210 TX_FAR _PinsirDexEntry db "@" TangelaDexEntry: ; 407e8 (10:47e8) db "VINE@" db 3,3 dw 770 TX_FAR _TangelaDexEntry db "@" GrowlitheDexEntry: ; 407f6 (10:47f6) db "PUPPY@" db 2,4 dw 420 TX_FAR _GrowlitheDexEntry db "@" OnixDexEntry: ; 40805 (10:4805) db "ROCK SNAKE@" db 28,10 dw 4630 TX_FAR _OnixDexEntry db "@" FearowDexEntry: ; 40819 (10:4819) db "BEAK@" db 3,11 dw 840 TX_FAR _FearowDexEntry db "@" PidgeyDexEntry: ; 40827 (10:4827) db "TINY BIRD@" db 1,0 dw 40 TX_FAR _PidgeyDexEntry db "@" SlowpokeDexEntry: ; 4083a (10:483a) db "DOPEY@" db 3,11 dw 790 TX_FAR _SlowpokeDexEntry db "@" KadabraDexEntry: ; 40849 (10:4849) db "PSI@" db 4,3 dw 1250 TX_FAR _KadabraDexEntry db "@" GravelerDexEntry: ; 40856 (10:4856) db "ROCK@" db 3,3 dw 2320 TX_FAR _GravelerDexEntry db "@" ChanseyDexEntry: ; 40864 (10:4864) db "EGG@" db 3,7 dw 760 TX_FAR _ChanseyDexEntry db "@" MachokeDexEntry: ; 40871 (10:4871) db "SUPERPOWER@" db 4,11 dw 1550 TX_FAR _MachokeDexEntry db "@" MrMimeDexEntry: ; 40885 (10:4885) db "BARRIER@" db 4,3 dw 1200 TX_FAR _MrMimeDexEntry db "@" HitmonleeDexEntry: ; 40896 (10:4896) db "KICKING@" db 4,11 dw 1100 TX_FAR _HitmonleeDexEntry db "@" HitmonchanDexEntry: ; 408a7 (10:48a7) db "PUNCHING@" db 4,7 dw 1110 TX_FAR _HitmonchanDexEntry db "@" ArbokDexEntry: ; 408b9 (10:48b9) db "COBRA@" db 11,6 dw 1430 TX_FAR _ArbokDexEntry db "@" ParasectDexEntry: ; 408c8 (10:48c8) db "MUSHROOM@" db 3,3 dw 650 TX_FAR _ParasectDexEntry db "@" PsyduckDexEntry: ; 408da (10:48da) db "DUCK@" db 2,7 dw 430 TX_FAR _PsyduckDexEntry db "@" DrowzeeDexEntry: ; 408e8 (10:48e8) db "HYPNOSIS@" db 3,3 dw 710 TX_FAR _DrowzeeDexEntry db "@" GolemDexEntry: ; 408fa (10:48fa) db "MEGATON@" db 4,7 dw 6620 TX_FAR _GolemDexEntry db "@" MagmarDexEntry: ; 4090b (10:490b) db "SPITFIRE@" db 4,3 dw 980 TX_FAR _MagmarDexEntry db "@" ElectabuzzDexEntry: ; 4091d (10:491d) db "ELECTRIC@" db 3,7 dw 660 TX_FAR _ElectabuzzDexEntry db "@" MagnetonDexEntry: ; 4092f (10:492f) db "MAGNET@" db 3,3 dw 1320 TX_FAR _MagnetonDexEntry db "@" KoffingDexEntry: ; 4093f (10:493f) db "POISON GAS@" db 2,0 dw 20 TX_FAR _KoffingDexEntry db "@" MankeyDexEntry: ; 40953 (10:4953) db "PIG MONKEY@" db 1,8 dw 620 TX_FAR _MankeyDexEntry db "@" SeelDexEntry: ; 40967 (10:4967) db "SEA LION@" db 3,7 dw 1980 TX_FAR _SeelDexEntry db "@" DiglettDexEntry: ; 40979 (10:4979) db "MOLE@" db 0,8 dw 20 TX_FAR _DiglettDexEntry db "@" TaurosDexEntry: ; 40987 (10:4987) db "WILD BULL@" db 4,7 dw 1950 TX_FAR _TaurosDexEntry db "@" FarfetchdDexEntry: ; 4099a (10:499a) db "WILD DUCK@" db 2,7 dw 330 TX_FAR _FarfetchdDexEntry db "@" VenonatDexEntry: ; 409ad (10:49ad) db "INSECT@" db 3,3 dw 660 TX_FAR _VenonatDexEntry db "@" DragoniteDexEntry: ; 409bd (10:49bd) db "DRAGON@" db 7,3 dw 4630 TX_FAR _DragoniteDexEntry db "@" DoduoDexEntry: ; 409cd (10:49cd) db "TWIN BIRD@" db 4,7 dw 860 TX_FAR _DoduoDexEntry db "@" PoliwagDexEntry: ; 409e0 (10:49e0) db "TADPOLE@" db 2,0 dw 270 TX_FAR _PoliwagDexEntry db "@" JynxDexEntry: ; 409f1 (10:49f1) db "HUMANSHAPE@" db 4,7 dw 900 TX_FAR _JynxDexEntry db "@" MoltresDexEntry: ; 40a05 (10:4a05) db "FLAME@" db 6,7 dw 1320 TX_FAR _MoltresDexEntry db "@" ArticunoDexEntry: ; 40a14 (10:4a14) db "FREEZE@" db 5,7 dw 1220 TX_FAR _ArticunoDexEntry db "@" ZapdosDexEntry: ; 40a24 (10:4a24) db "ELECTRIC@" db 5,3 dw 1160 TX_FAR _ZapdosDexEntry db "@" DittoDexEntry: ; 40a36 (10:4a36) db "TRANSFORM@" db 1,0 dw 90 TX_FAR _DittoDexEntry db "@" MeowthDexEntry: ; 40a49 (10:4a49) db "SCRATCHCAT@" db 1,4 dw 90 TX_FAR _MeowthDexEntry db "@" KrabbyDexEntry: ; 40a5d (10:4a5d) db "RIVER CRAB@" db 1,4 dw 140 TX_FAR _KrabbyDexEntry db "@" VulpixDexEntry: ; 40a71 (10:4a71) db "FOX@" db 2,0 dw 220 TX_FAR _VulpixDexEntry db "@" NinetalesDexEntry: ; 40a7e (10:4a7e) db "FOX@" db 3,7 dw 440 TX_FAR _NinetalesDexEntry db "@" PikachuDexEntry: ; 40a8b (10:4a8b) db "MOUSE@" db 1,4 dw 130 TX_FAR _PikachuDexEntry db "@" RaichuDexEntry: ; 40a9a (10:4a9a) db "MOUSE@" db 2,7 dw 660 TX_FAR _RaichuDexEntry db "@" DratiniDexEntry: ; 40aa9 (10:4aa9) db "DRAGON@" db 5,11 dw 70 TX_FAR _DratiniDexEntry db "@" DragonairDexEntry: ; 40ab9 (10:4ab9) db "DRAGON@" db 13,1 dw 360 TX_FAR _DragonairDexEntry db "@" KabutoDexEntry: ; 40ac9 (10:4ac9) db "SHELLFISH@" db 1,8 dw 250 TX_FAR _KabutoDexEntry db "@" KabutopsDexEntry: ; 40adc (10:4adc) db "SHELLFISH@" db 4,3 dw 890 TX_FAR _KabutopsDexEntry db "@" HorseaDexEntry: ; 40aef (10:4aef) db "DRAGON@" db 1,4 dw 180 TX_FAR _HorseaDexEntry db "@" SeadraDexEntry: ; 40aff (10:4aff) db "DRAGON@" db 3,11 dw 550 TX_FAR _SeadraDexEntry db "@" SandshrewDexEntry: ; 40b0f (10:4b0f) db "MOUSE@" db 2,0 dw 260 TX_FAR _SandshrewDexEntry db "@" SandslashDexEntry: ; 40b1e (10:4b1e) db "MOUSE@" db 3,3 dw 650 TX_FAR _SandslashDexEntry db "@" OmanyteDexEntry: ; 40b2d (10:4b2d) db "SPIRAL@" db 1,4 dw 170 TX_FAR _OmanyteDexEntry db "@" OmastarDexEntry: ; 40b3d (10:4b3d) db "SPIRAL@" db 3,3 dw 770 TX_FAR _OmastarDexEntry db "@" JigglypuffDexEntry: ; 40b4d (10:4b4d) db "BALLOON@" db 1,8 dw 120 TX_FAR _JigglypuffDexEntry db "@" WigglytuffDexEntry: ; 40b5e (10:4b5e) db "BALLOON@" db 3,3 dw 260 TX_FAR _WigglytuffDexEntry db "@" EeveeDexEntry: ; 40b6f (10:4b6f) db "EVOLUTION@" db 1,0 dw 140 TX_FAR _EeveeDexEntry db "@" FlareonDexEntry: ; 40b82 (10:4b82) db "FLAME@" db 2,11 dw 550 TX_FAR _FlareonDexEntry db "@" JolteonDexEntry: ; 40b91 (10:4b91) db "LIGHTNING@" db 2,7 dw 540 TX_FAR _JolteonDexEntry db "@" VaporeonDexEntry: ; 40ba4 (10:4ba4) db "BUBBLE JET@" db 3,3 dw 640 TX_FAR _VaporeonDexEntry db "@" MachopDexEntry: ; 40bb8 (10:4bb8) db "SUPERPOWER@" db 2,7 dw 430 TX_FAR _MachopDexEntry db "@" ZubatDexEntry: ; 40bcc (10:4bcc) db "BAT@" db 2,7 dw 170 TX_FAR _ZubatDexEntry db "@" EkansDexEntry: ; 40bd9 (10:4bd9) db "SNAKE@" db 6,7 dw 150 TX_FAR _EkansDexEntry db "@" ParasDexEntry: ; 40be8 (10:4be8) db "MUSHROOM@" db 1,0 dw 120 TX_FAR _ParasDexEntry db "@" PoliwhirlDexEntry: ; 40bfa (10:4bfa) db "TADPOLE@" db 3,3 dw 440 TX_FAR _PoliwhirlDexEntry db "@" PoliwrathDexEntry: ; 40c0b (10:4c0b) db "TADPOLE@" db 4,3 dw 1190 TX_FAR _PoliwrathDexEntry db "@" WeedleDexEntry: ; 40c1c (10:4c1c) db "HAIRY BUG@" db 1,0 dw 70 TX_FAR _WeedleDexEntry db "@" KakunaDexEntry: ; 40c2f (10:4c2f) db "COCOON@" db 2,0 dw 220 TX_FAR _KakunaDexEntry db "@" BeedrillDexEntry: ; 40c3f (10:4c3f) db "POISON BEE@" db 3,3 dw 650 TX_FAR _BeedrillDexEntry db "@" DodrioDexEntry: ; 40c53 (10:4c53) db "TRIPLEBIRD@" db 5,11 dw 1880 TX_FAR _DodrioDexEntry db "@" PrimeapeDexEntry: ; 40c67 (10:4c67) db "PIG MONKEY@" db 3,3 dw 710 TX_FAR _PrimeapeDexEntry db "@" DugtrioDexEntry: ; 40c7b (10:4c7b) db "MOLE@" db 2,4 dw 730 TX_FAR _DugtrioDexEntry db "@" VenomothDexEntry: ; 40c89 (10:4c89) db "POISONMOTH@" db 4,11 dw 280 TX_FAR _VenomothDexEntry db "@" DewgongDexEntry: ; 40c9d (10:4c9d) db "SEA LION@" db 5,7 dw 2650 TX_FAR _DewgongDexEntry db "@" CaterpieDexEntry: ; 40caf (10:4caf) db "WORM@" db 1,0 dw 60 TX_FAR _CaterpieDexEntry db "@" MetapodDexEntry: ; 40cbd (10:4cbd) db "COCOON@" db 2,4 dw 220 TX_FAR _MetapodDexEntry db "@" ButterfreeDexEntry: ; 40ccd (10:4ccd) db "BUTTERFLY@" db 3,7 dw 710 TX_FAR _ButterfreeDexEntry db "@" MachampDexEntry: ; 40ce0 (10:4ce0) db "SUPERPOWER@" db 5,3 dw 2870 TX_FAR _MachampDexEntry db "@" GolduckDexEntry: ; 40cf4 (10:4cf4) db "DUCK@" db 5,7 dw 1690 TX_FAR _GolduckDexEntry db "@" HypnoDexEntry: ; 40d02 (10:4d02) db "HYPNOSIS@" db 5,3 dw 1670 TX_FAR _HypnoDexEntry db "@" GolbatDexEntry: ; 40d14 (10:4d14) db "BAT@" db 5,3 dw 1210 TX_FAR _GolbatDexEntry db "@" MewtwoDexEntry: ; 40d21 (10:4d21) db "GENETIC@" db 6,7 dw 2690 TX_FAR _MewtwoDexEntry db "@" SnorlaxDexEntry: ; 40d32 (10:4d32) db "SLEEPING@" db 6,11 dw 10140 TX_FAR _SnorlaxDexEntry db "@" MagikarpDexEntry: ; 40d44 (10:4d44) db "FISH@" db 2,11 dw 220 TX_FAR _MagikarpDexEntry db "@" MukDexEntry: ; 40d52 (10:4d52) db "SLUDGE@" db 3,11 dw 660 TX_FAR _MukDexEntry db "@" KinglerDexEntry: ; 40d62 (10:4d62) db "PINCER@" db 4,3 dw 1320 TX_FAR _KinglerDexEntry db "@" CloysterDexEntry: ; 40d72 (10:4d72) db "BIVALVE@" db 4,11 dw 2920 TX_FAR _CloysterDexEntry db "@" ElectrodeDexEntry: ; 40d83 (10:4d83) db "BALL@" db 3,11 dw 1470 TX_FAR _ElectrodeDexEntry db "@" ClefableDexEntry: ; 40d91 (10:4d91) db "FAIRY@" db 4,3 dw 880 TX_FAR _ClefableDexEntry db "@" WeezingDexEntry: ; 40da0 (10:4da0) db "POISON GAS@" db 3,11 dw 210 TX_FAR _WeezingDexEntry db "@" PersianDexEntry: ; 40db4 (10:4db4) db "CLASSY CAT@" db 3,3 dw 710 TX_FAR _PersianDexEntry db "@" MarowakDexEntry: ; 40dc8 (10:4dc8) db "BONEKEEPER@" db 3,3 dw 990 TX_FAR _MarowakDexEntry db "@" HaunterDexEntry: ; 40ddc (10:4ddc) db "GAS@" db 5,3 dw 2 TX_FAR _HaunterDexEntry db "@" AbraDexEntry: ; 40de9 (10:4de9) db "PSI@" db 2,11 dw 430 TX_FAR _AbraDexEntry db "@" AlakazamDexEntry: ; 40df6 (10:4df6) db "PSI@" db 4,11 dw 1060 TX_FAR _AlakazamDexEntry db "@" PidgeottoDexEntry: ; 40e03 (10:4e03) db "BIRD@" db 3,7 dw 660 TX_FAR _PidgeottoDexEntry db "@" PidgeotDexEntry: ; 40e11 (10:4e11) db "BIRD@" db 4,11 dw 870 TX_FAR _PidgeotDexEntry db "@" StarmieDexEntry: ; 40e1f (10:4e1f) db "MYSTERIOUS@" db 3,7 dw 1760 TX_FAR _StarmieDexEntry db "@" BulbasaurDexEntry: ; 40e33 (10:4e33) db "SEED@" db 2,4 dw 150 TX_FAR _BulbasaurDexEntry db "@" VenusaurDexEntry: ; 40e41 (10:4e41) db "SEED@" db 6,7 dw 2210 TX_FAR _VenusaurDexEntry db "@" TentacruelDexEntry: ; 40e4f (10:4e4f) db "JELLYFISH@" db 5,3 dw 1210 TX_FAR _TentacruelDexEntry db "@" GoldeenDexEntry: ; 40e62 (10:4e62) db "GOLDFISH@" db 2,0 dw 330 TX_FAR _GoldeenDexEntry db "@" SeakingDexEntry: ; 40e74 (10:4e74) db "GOLDFISH@" db 4,3 dw 860 TX_FAR _SeakingDexEntry db "@" PonytaDexEntry: ; 40e86 (10:4e86) db "FIRE HORSE@" db 3,3 dw 660 TX_FAR _PonytaDexEntry db "@" RapidashDexEntry: ; 40e9a (10:4e9a) db "FIRE HORSE@" db 5,7 dw 2090 TX_FAR _RapidashDexEntry db "@" RattataDexEntry: ; 40eae (10:4eae) db "RAT@" db 1,0 dw 80 TX_FAR _RattataDexEntry db "@" RaticateDexEntry: ; 40ebb (10:4ebb) db "RAT@" db 2,4 dw 410 TX_FAR _RaticateDexEntry db "@" NidorinoDexEntry: ; 40ec8 (10:4ec8) db "POISON PIN@" db 2,11 dw 430 TX_FAR _NidorinoDexEntry db "@" NidorinaDexEntry: ; 40edc (10:4edc) db "POISON PIN@" db 2,7 dw 440 TX_FAR _NidorinaDexEntry db "@" GeodudeDexEntry: ; 40ef0 (10:4ef0) db "ROCK@" db 1,4 dw 440 TX_FAR _GeodudeDexEntry db "@" PorygonDexEntry: ; 40efe (10:4efe) db "VIRTUAL@" db 2,7 dw 800 TX_FAR _PorygonDexEntry db "@" AerodactylDexEntry: ; 40f0f (10:4f0f) db "FOSSIL@" db 5,11 dw 1300 TX_FAR _AerodactylDexEntry db "@" MagnemiteDexEntry: ; 40f1f (10:4f1f) db "MAGNET@" db 1,0 dw 130 TX_FAR _MagnemiteDexEntry db "@" CharmanderDexEntry: ; 40f2f (10:4f2f) db "LIZARD@" db 2,0 dw 190 TX_FAR _CharmanderDexEntry db "@" SquirtleDexEntry: ; 40f3f (10:4f3f) db "TINYTURTLE@" db 1,8 dw 200 TX_FAR _SquirtleDexEntry db "@" CharmeleonDexEntry: ; 40f53 (10:4f53) db "FLAME@" db 3,7 dw 420 TX_FAR _CharmeleonDexEntry db "@" WartortleDexEntry: ; 40f62 (10:4f62) db "TURTLE@" db 3,3 dw 500 TX_FAR _WartortleDexEntry db "@" CharizardDexEntry: ; 40f72 (10:4f72) db "FLAME@" db 5,7 dw 2000 TX_FAR _CharizardDexEntry db "@" OddishDexEntry: ; 40f81 (10:4f81) db "WEED@" db 1,8 dw 120 TX_FAR _OddishDexEntry db "@" GloomDexEntry: ; 40f8f (10:4f8f) db "WEED@" db 2,7 dw 190 TX_FAR _GloomDexEntry db "@" VileplumeDexEntry: ; 40f9d (10:4f9d) db "FLOWER@" db 3,11 dw 410 TX_FAR _VileplumeDexEntry db "@" BellsproutDexEntry: ; 40fad (10:4fad) db "FLOWER@" db 2,4 dw 90 TX_FAR _BellsproutDexEntry db "@" WeepinbellDexEntry: ; 40fbd (10:4fbd) db "FLYCATCHER@" db 3,3 dw 140 TX_FAR _WeepinbellDexEntry db "@" VictreebelDexEntry: ; 40fd1 (10:4fd1) db "FLYCATCHER@" db 5,7 dw 340 TX_FAR _VictreebelDexEntry db "@" MissingNoDexEntry: ; 40fe5 (10:4fe5) db "???@" db 10 ; 1.0 m db 100 ; 10.0 kg db 0,"コメント さくせいちゅう@" ; コメント作成中 (Comment to be written) PokedexToIndex: ; 40ff9 (10:4ff9) ; converts the Pokédex number at $D11E to an index push bc push hl ld a,[$D11E] ld b,a ld c,0 ld hl,PokedexOrder .loop ; go through the list until we find an entry with a matching dex number inc c ld a,[hli] cp b jr nz,.loop ld a,c ld [$D11E],a pop hl pop bc ret IndexToPokedex: ; 41010 (10:5010) ; converts the indexédex number at $D11E to a Pokédex number push bc push hl ld a,[$D11E] dec a ld hl,PokedexOrder ld b,0 ld c,a add hl,bc ld a,[hl] ld [$D11E],a pop hl pop bc ret PokedexOrder: ; 41024 (10:5024) db DEX_RHYDON db DEX_KANGASKHAN db DEX_NIDORAN_M db DEX_CLEFAIRY db DEX_SPEAROW db DEX_VOLTORB db DEX_NIDOKING db DEX_SLOWBRO db DEX_IVYSAUR db DEX_EXEGGUTOR db DEX_LICKITUNG db DEX_EXEGGCUTE db DEX_GRIMER db DEX_GENGAR db DEX_NIDORAN_F db DEX_NIDOQUEEN db DEX_CUBONE db DEX_RHYHORN db DEX_LAPRAS db DEX_ARCANINE db DEX_MEW db DEX_GYARADOS db DEX_SHELLDER db DEX_TENTACOOL db DEX_GASTLY db DEX_SCYTHER db DEX_STARYU db DEX_BLASTOISE db DEX_PINSIR db DEX_TANGELA db 0 ; MISSINGNO. db 0 ; MISSINGNO. db DEX_GROWLITHE db DEX_ONIX db DEX_FEAROW db DEX_PIDGEY db DEX_SLOWPOKE db DEX_KADABRA db DEX_GRAVELER db DEX_CHANSEY db DEX_MACHOKE db DEX_MR_MIME db DEX_HITMONLEE db DEX_HITMONCHAN db DEX_ARBOK db DEX_PARASECT db DEX_PSYDUCK db DEX_DROWZEE db DEX_GOLEM db 0 ; MISSINGNO. db DEX_MAGMAR db 0 ; MISSINGNO. db DEX_ELECTABUZZ db DEX_MAGNETON db DEX_KOFFING db 0 ; MISSINGNO. db DEX_MANKEY db DEX_SEEL db DEX_DIGLETT db DEX_TAUROS db 0 ; MISSINGNO. db 0 ; MISSINGNO. db 0 ; MISSINGNO. db DEX_FARFETCH_D db DEX_VENONAT db DEX_DRAGONITE db 0 ; MISSINGNO. db 0 ; MISSINGNO. db 0 ; MISSINGNO. db DEX_DODUO db DEX_POLIWAG db DEX_JYNX db DEX_MOLTRES db DEX_ARTICUNO db DEX_ZAPDOS db DEX_DITTO db DEX_MEOWTH db DEX_KRABBY db 0 ; MISSINGNO. db 0 ; MISSINGNO. db 0 ; MISSINGNO. db DEX_VULPIX db DEX_NINETALES db DEX_PIKACHU db DEX_RAICHU db 0 ; MISSINGNO. db 0 ; MISSINGNO. db DEX_DRATINI db DEX_DRAGONAIR db DEX_KABUTO db DEX_KABUTOPS db DEX_HORSEA db DEX_SEADRA db 0 ; MISSINGNO. db 0 ; MISSINGNO. db DEX_SANDSHREW db DEX_SANDSLASH db DEX_OMANYTE db DEX_OMASTAR db DEX_JIGGLYPUFF db DEX_WIGGLYTUFF db DEX_EEVEE db DEX_FLAREON db DEX_JOLTEON db DEX_VAPOREON db DEX_MACHOP db DEX_ZUBAT db DEX_EKANS db DEX_PARAS db DEX_POLIWHIRL db DEX_POLIWRATH db DEX_WEEDLE db DEX_KAKUNA db DEX_BEEDRILL db 0 ; MISSINGNO. db DEX_DODRIO db DEX_PRIMEAPE db DEX_DUGTRIO db DEX_VENOMOTH db DEX_DEWGONG db 0 ; MISSINGNO. db 0 ; MISSINGNO. db DEX_CATERPIE db DEX_METAPOD db DEX_BUTTERFREE db DEX_MACHAMP db 0 ; MISSINGNO. db DEX_GOLDUCK db DEX_HYPNO db DEX_GOLBAT db DEX_MEWTWO db DEX_SNORLAX db DEX_MAGIKARP db 0 ; MISSINGNO. db 0 ; MISSINGNO. db DEX_MUK db 0 ; MISSINGNO. db DEX_KINGLER db DEX_CLOYSTER db 0 ; MISSINGNO. db DEX_ELECTRODE db DEX_CLEFABLE db DEX_WEEZING db DEX_PERSIAN db DEX_MAROWAK db 0 ; MISSINGNO. db DEX_HAUNTER db DEX_ABRA db DEX_ALAKAZAM db DEX_PIDGEOTTO db DEX_PIDGEOT db DEX_STARMIE db DEX_BULBASAUR db DEX_VENUSAUR db DEX_TENTACRUEL db 0 ; MISSINGNO. db DEX_GOLDEEN db DEX_SEAKING db 0 ; MISSINGNO. db 0 ; MISSINGNO. db 0 ; MISSINGNO. db 0 ; MISSINGNO. db DEX_PONYTA db DEX_RAPIDASH db DEX_RATTATA db DEX_RATICATE db DEX_NIDORINO db DEX_NIDORINA db DEX_GEODUDE db DEX_PORYGON db DEX_AERODACTYL db 0 ; MISSINGNO. db DEX_MAGNEMITE db 0 ; MISSINGNO. db 0 ; MISSINGNO. db DEX_CHARMANDER db DEX_SQUIRTLE db DEX_CHARMELEON db DEX_WARTORTLE db DEX_CHARIZARD db 0 ; MISSINGNO. db 0 ; MISSINGNO. db 0 ; MISSINGNO. db 0 ; MISSINGNO. db DEX_ODDISH db DEX_GLOOM db DEX_VILEPLUME db DEX_BELLSPROUT db DEX_WEEPINBELL db DEX_VICTREEBEL Func_410e2: ; 410e2 (10:50e2) ld a, [wWhichTrade] ; $cd3d ld [$cd5e], a ld a, [wTrainerEngageDistance] ld [$cd5f], a ld de, PointerIDs_41138 ; $5138 jr Func_41102 Func_410f3: ; 410f3 (10:50f3) ld a, [wTrainerEngageDistance] ld [$cd5e], a ld a, [wTrainerSpriteOffset] ld [$cd5f], a ld de, PointerIDs_41149 Func_41102: ; 41102 (10:5102) ld a, [W_OPTIONS] ; $d355 push af ld a, [$FF00+$af] push af ld a, [$FF00+$ae] push af xor a ld [W_OPTIONS], a ; $d355 ld [$FF00+$af], a ld [$FF00+$ae], a push de .asm_41115 pop de ld a, [de] cp $ff jr z, .asm_4112d inc de push de ld hl, PointerTable_4115f ; $515f add a ld c, a ld b, $0 add hl, bc ld a, [hli] ld h, [hl] ld l, a ld de, .asm_41115 ; $5115 push de jp [hl] .asm_4112d pop af ld [$FF00+$ae], a pop af ld [$FF00+$af], a pop af ld [W_OPTIONS], a ; $d355 ret ; these bytes refer to the $00th through $10th pointer of PointerTable_4115f PointerIDs_41138: ; 41138 (10:5138) db $00,$01,$02,$03,$05,$07,$08,$09,$0A,$0B,$06,$08,$02,$04,$07,$0E,$FF PointerIDs_41149: ; 41149 (10:5149) db $00,$08,$0D,$0B,$10,$05,$10,$08,$02,$04,$0F,$01,$02,$03,$10,$06,$10,$07,$08,$09,$0E,$FF PointerTable_4115f: ; 4115f (10:515f) dw Func_411a1 dw Func_41245 dw Func_41298 dw Func_412d2 dw Func_41336 dw Func_41376 dw Func_413c6 dw Func_41181 dw Func_415c8 dw Func_415fe dw Func_41611 dw Func_4162d dw Func_4164c dw Func_4165a dw Func_4123b dw Func_415df dw Func_41217 Func_41181: ; 41181 (10:5181) ld c, $64 jp DelayFrames Func_41186: ; 41186 (10:5186) ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba call Delay3 xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ret Delay50: ; 41191 (10:5191) ld c, $50 jp DelayFrames Func_41196: ; 41196 (10:5196) ld hl, wTileMap ld bc, $168 ld a, $7f jp FillMemory Func_411a1: ; 411a1 (10:51a1) call Func_41196 call DisableLCD ld hl, TradingAnimationGraphics ; $69be ld de, $9310 ld bc, $310 ld a, BANK(TradingAnimationGraphics) call FarCopyData2 ld hl, TradingAnimationGraphics2 ; $6cce ld de, $87c0 ld bc, $40 ld a, BANK(TradingAnimationGraphics2) call FarCopyData2 ld hl, $9800 ld bc, $800 ld a, $7f call FillMemory call CleanLCD_OAM ld a, $ff ld [$cfcb], a ld hl, $d730 set 6, [hl] ld a, [$cf1b] and a ld a, $e4 jr z, .asm_411e5 ld a, $f0 .asm_411e5 ld [rOBP0], a ; $FF00+$48 call EnableLCD xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld a, [wWhichTrade] ; $cd3d ld [$d11e], a call GetMonName ld hl, $cd6d ld de, $cf4b ld bc, $b call CopyData ld a, [$cd3e] ld [$d11e], a jp GetMonName Func_4120b: ; 4120b (10:520b) ld a, $d0 ld [rOBP1], a ; $FF00+$49 ld b, BANK(Func_7176c) ld hl, Func_7176c jp Bankswitch Func_41217: ; 41217 (10:5217) ld hl, W_PLAYERNAME ld de, wHPBarMaxHP ld bc, $000b call CopyData ld hl, W_GRASSRATE ld de, W_PLAYERNAME ld bc, $000b call CopyData ld hl, wHPBarMaxHP ld de, W_GRASSRATE ld bc, $000b jp CopyData Func_4123b: ; 4123b (10:523b) xor a call LoadGBPal ld hl, $d730 res 6, [hl] ret Func_41245: ; 41245 (10:5245) ld a, $ab ld [rLCDC], a ; $FF00+$40 ld a, $50 ld [$FF00+$b0], a ld a, $86 ld [rWX], a ; $FF00+$4b ld [$FF00+$ae], a xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba FuncCoord 4, 0 ; $c3a4 ld hl, Coord ld b, $6 ld c, $a call TextBoxBorder call Func_42769 ld b, $98 call CopyScreenTileBufferToVRAM call ClearScreen ld a, [wWhichTrade] ; $cd3d call Func_415a4 ld a, $7e .asm_41273 push af call DelayFrame pop af ld [rWX], a ; $FF00+$4b ld [$FF00+$ae], a dec a dec a and a jr nz, .asm_41273 call Delay50 ld a, $ad call Func_41676 ld a, $aa call Func_41676 ld a, [wWhichTrade] ; $cd3d call PlayCry xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ret Func_41298: ; 41298 (10:5298) call Func_41196 ld b, $98 call CopyScreenTileBufferToVRAM ld b, $8 call GoPAL_SET ld hl, $9c8c call Func_414ae ld a, $a0 ld [$FF00+$ae], a call DelayFrame ld a, $8b ld [rLCDC], a ; $FF00+$40 FuncCoord 6, 2 ; $c3ce ld hl, Coord ld b, $7 call Func_41842 call Func_41186 ld a, $8d call PlaySound ld c, $14 .asm_412c8 ld a, [$FF00+$ae] add $4 ld [$FF00+$ae], a dec c jr nz, .asm_412c8 ret Func_412d2: ; 412d2 (10:52d2) ld a, $ab call Func_41676 ld c, $a call DelayFrames ld a, $e4 ld [rOBP0], a ; $FF00+$48 xor a ld [$d09f], a ld bc, $2060 .asm_412e7 push bc xor a ld de, UnknownOAM_4132e ; $532e call WriteOAMBlock ld a, [$d09f] xor $1 ld [$d09f], a add $7e ld hl, $c302 ld de, $4 ld c, e .asm_41300 ld [hl], a add hl, de dec c jr nz, .asm_41300 call Delay3 pop bc ld a, c add $4 ld c, a cp $a0 jr nc, .asm_41318 ld a, $8c call PlaySound jr .asm_412e7 .asm_41318 call CleanLCD_OAM ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba call ClearScreen ld b, $98 call CopyScreenTileBufferToVRAM call Delay3 xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ret UnknownOAM_4132e: ; 4132e (10:532e) db $7E,$00,$7E,$20 db $7E,$40,$7E,$60 Func_41336: ; 41336 (10:5336) ld a, $ac call Func_41676 call Func_415c8 FuncCoord 4, 10 ; $c46c ld hl, Coord ld b, $6 ld c, $a call TextBoxBorder call Func_427a7 call Func_41186 ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld a, [$cd3e] call Func_415a4 ld a, $ad call Func_41676 ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld a, [$cd3e] call PlayCry call Func_41181 FuncCoord 4, 10 ; $c46c ld hl, Coord ld bc, $80c call ClearScreenArea jp Func_4164c Func_41376: ; 41376 (10:5376) call Func_41411 ld a, $1 ld [$d08a], a ld a, $e4 ld [rOBP0], a ; $FF00+$48 ld a, $54 ld [W_BASECOORDX], a ; $d081 ld a, $1c ld [W_BASECOORDY], a ; $d082 ld a, [$cd5e] ld [$cd5d], a call Func_41505 call Func_4142d call Func_41186 call Func_4149f ld hl, $9c8c call Func_414ae ld b, $6 call Func_414c5 ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba call Func_4149f ld b, $4 call Func_414c5 call Func_4145c ld b, $6 call Func_414c5 xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba call Func_41525 jp CleanLCD_OAM Func_413c6: ; 413c6 (10:53c6) call Func_41411 xor a ld [$d08a], a ld a, $64 ld [W_BASECOORDX], a ; $d081 ld a, $44 ld [W_BASECOORDY], a ; $d082 ld a, [$cd5f] ld [$cd5d], a call Func_41505 call Func_4145c call Func_41186 call Func_4149f ld hl, $9c94 call Func_414ae call Func_41525 ld b, $6 call Func_414c5 ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba call Func_4149f ld b, $4 call Func_414c5 call Func_4142d ld b, $6 call Func_414c5 xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba jp CleanLCD_OAM Func_41411: ; 41411 (10:5411) ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba call ClearScreen xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba call Func_4120b call DelayFrame ld a, $ab ld [rLCDC], a ; $FF00+$40 xor a ld [$FF00+$ae], a ld a, $90 ld [$FF00+$b0], a ret Func_4142d: ; 4142d (10:542d) call Func_41196 FuncCoord 11, 4 ; $c3fb ld hl, Coord ld a, $5d ld [hli], a ld a, $5e ld c, $8 .asm_4143a ld [hli], a dec c jr nz, .asm_4143a FuncCoord 5, 3 ; $c3e1 ld hl, Coord ld b, $6 call Func_41842 FuncCoord 4, 12 ; $c494 ld hl, Coord ld b, $2 ld c, $7 call TextBoxBorder FuncCoord 5, 14 ; $c4bd ld hl, Coord ld de, W_PLAYERNAME ; $d158 call PlaceString jp DelayFrame Func_4145c: ; 4145c (10:545c) call Func_41196 FuncCoord 0, 4 ; $c3f0 ld hl, Coord ld a, $5e ld c, $e .asm_41466 ld [hli], a dec c jr nz, .asm_41466 ld a, $5f ld [hl], a ld de, $14 add hl, de ld a, $61 ld [hl], a add hl, de ld [hl], a add hl, de ld [hl], a add hl, de ld [hl], a add hl, de ld a, $60 ld [hld], a ld a, $5d ld [hl], a FuncCoord 7, 8 ; $c447 ld hl, Coord ld b, $6 call Func_41842 FuncCoord 6, 0 ; $c3a6 ld hl, Coord ld b, $2 ld c, $7 call TextBoxBorder FuncCoord 7, 2 ; $c3cf ld hl, Coord ld de, W_GRASSRATE ; $d887 call PlaceString jp DelayFrame Func_4149f: ; 4149f (10:549f) call Func_41196 FuncCoord 0, 4 ; $c3f0 ld hl, Coord ld a, $5e ld c, $14 .asm_414a9 ld [hli], a dec c jr nz, .asm_414a9 ret Func_414ae: ; 414ae (10:54ae) push hl FuncCoord 0, 4 ; $c3f0 ld hl, Coord call ScheduleRowRedrawHelper pop hl ld a, h ld [$FF00+$d2], a ld a, l ld [H_SCREENEDGEREDRAWADDR], a ; $FF00+$d1 ld a, $2 ld [H_SCREENEDGEREDRAW], a ; $FF00+$d0 ld c, $a jp DelayFrames Func_414c5: ; 414c5 (10:54c5) ld a, [$d08a] ld e, a ld d, $8 .asm_414cb ld a, e dec a jr z, .asm_414d5 ld a, [$FF00+$ae] sub $2 jr .asm_414d9 .asm_414d5 ld a, [$FF00+$ae] add $2 .asm_414d9 ld [$FF00+$ae], a call DelayFrame dec d jr nz, .asm_414cb call Func_414e8 dec b jr nz, Func_414c5 ret Func_414e8: ; 414e8 (10:54e8) push de push bc push hl ld a, [rBGP] ; $FF00+$47 xor $3c ld [rBGP], a ; $FF00+$47 ld hl, $c302 ld de, $4 ld c, $14 .asm_414f9 ld a, [hl] xor $40 ld [hl], a add hl, de dec c jr nz, .asm_414f9 pop hl pop bc pop de ret Func_41505: ; 41505 (10:5505) ld b, BANK(Func_71882) ld hl, Func_71882 call Bankswitch call Func_41558 Func_41510: ; 41510 (10:5510) ld hl, wOAMBuffer ld c, $14 .asm_41515 ld a, [W_BASECOORDY] ; $d082 add [hl] ld [hli], a ld a, [W_BASECOORDX] ; $d081 add [hl] ld [hli], a inc hl inc hl dec c jr nz, .asm_41515 ret Func_41525: ; 41525 (10:5525) ld a, [$d08a] and a jr z, .asm_41536 ld bc, $400 call .asm_4153f ld bc, $a jr .asm_4153f .asm_41536 ld bc, $f6 call .asm_4153f ld bc, $fc00 .asm_4153f ld a, b ld [W_BASECOORDX], a ; $d081 ld a, c ld [W_BASECOORDY], a ; $d082 ld d, $4 .asm_41549 call Func_41510 call Func_414e8 ld c, $8 call DelayFrames dec d jr nz, .asm_41549 ret Func_41558: ; 41558 (10:5558) ld hl, OAMPointers_41574 ; $5574 ld c, $4 xor a .asm_4155e push bc ld e, [hl] inc hl ld d, [hl] inc hl ld c, [hl] inc hl ld b, [hl] inc hl push hl inc a push af call WriteOAMBlock pop af pop hl pop bc dec c jr nz, .asm_4155e ret OAMPointers_41574: ; 41574 (10:5574) dw UnknownOAM_41584 db $08,$08 dw UnknownOAM_4158c db $18,$08 dw UnknownOAM_41594 db $08,$18 dw UnknownOAM_4159c db $18,$18 UnknownOAM_41584: ; 41584 (10:5584) db $38,$10,$39,$10 db $3A,$10,$3B,$10 UnknownOAM_4158c: ; 4158c (10:558c) db $39,$30,$38,$30 db $3B,$30,$3A,$30 UnknownOAM_41594: ; 41594 (10:5594) db $3A,$50,$3B,$50 db $38,$50,$39,$50 UnknownOAM_4159c: ; 4159c (10:559c) db $3B,$70,$3A,$70 db $39,$70,$38,$70 Func_415a4: ; 415a4 (10:55a4) ld [$cf91], a ld [$d0b5], a ld [$cf1d], a ld b, $b ld c, $0 call GoPAL_SET ld a, [H_AUTOBGTRANSFERENABLED] ; $FF00+$ba xor $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba call GetMonHeader FuncCoord 7, 2 ; $c3cf ld hl, Coord call LoadFlippedFrontSpriteByMonIndex ld c, $a jp DelayFrames Func_415c8: ; 415c8 (10:55c8) ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba call ClearScreen ld a, $e3 ld [rLCDC], a ; $FF00+$40 ld a, $7 ld [rWX], a ; $FF00+$4b xor a ld [$FF00+$b0], a ld a, $90 ld [$FF00+$ae], a ret Func_415df: ; 415df (10:55df) ld c, $32 call DelayFrames .asm_415e4 call DelayFrame ld a, [rWX] ; $FF00+$4b inc a inc a ld [rWX], a ; $FF00+$4b cp $a1 jr nz, .asm_415e4 call Func_41196 ld c, $a call DelayFrames ld a, $7 ld [rWX], a ; $FF00+$4b ret Func_415fe: ; 415fe (10:55fe) ld hl, UnnamedText_4160c ; $560c call PrintText ld c, $c8 call DelayFrames jp Func_415df UnnamedText_4160c: ; 4160c (10:560c) TX_FAR _UnnamedText_4160c db "@" Func_41611: ; 41611 (10:5611) ld hl, UnnamedText_41623 ; $5623 call PrintText call Delay50 ld hl, UnnamedText_41628 ; $5628 call PrintText jp Delay50 UnnamedText_41623: ; 41623 (10:5623) TX_FAR _UnnamedText_41623 db "@" UnnamedText_41628: ; 41628 (10:5628) TX_FAR _UnnamedText_41628 db "@" Func_4162d: ; 4162d (10:562d) ld hl, UnnamedText_41642 ; $5642 call PrintText call Delay50 ld hl, UnnamedText_41647 ; $5647 call PrintText call Delay50 jp Func_415df UnnamedText_41642: ; 41642 (10:5642) TX_FAR _UnnamedText_41642 db "@" UnnamedText_41647: ; 41647 (10:5647) TX_FAR _UnnamedText_41647 db "@" Func_4164c: ; 4164c (10:564c) ld hl, UnnamedText_41655 ; $5655 call PrintText jp Delay50 UnnamedText_41655: ; 41655 (10:5655) TX_FAR _UnnamedText_41655 db "@" Func_4165a: ; 4165a (10:565a) ld hl, UnnamedText_4166c call PrintText call Delay50 ld hl, UnnamedText_41671 call PrintText jp Delay50 UnnamedText_4166c: ; 4166c (10:566c) TX_FAR _UnnamedText_4166c db "@" UnnamedText_41671: ; 41671 (10:5671) TX_FAR _UnnamedText_41671 db "@" Func_41676: ; 41676 (10:5676) ld [W_ANIMATIONID], a ; $d07c xor a ld [$cc5b], a ld a, $8 jp Predef ; indirect jump to MoveAnimation (78d5e (1e:4d5e)) PlayIntro: ; 41682 (10:5682) xor a ld [H_CURRENTPRESSEDBUTTONS], a inc a ld [H_AUTOBGTRANSFERENABLED], a call Func_4188a call PlayIntroScene call GBFadeOut2 xor a ld [$FF00+$ae], a ld [H_AUTOBGTRANSFERENABLED], a call CleanLCD_OAM call DelayFrame ret PlayIntroScene: ; 4169d (10:569d) ld b, $7 call GoPAL_SET ld a, %11100100 ld [rBGP], a ld [rOBP0], a ld [rOBP1], a xor a ld [$FF00+$ae], a ld b, $3 call Func_4183f ld a, 0 ld [W_BASECOORDX], a ld a, 80 ld [W_BASECOORDY], a ld bc, $606 call Func_417c7 ld de, $28ff call Func_4180e ret c ; hip ld a, $b9 call PlaySound xor a ld [$d09f], a ld de, IntroNidorinoAnimation1 call AnimateIntroNidorino ; hop ld a, $ba call PlaySound ld de, IntroNidorinoAnimation2 call AnimateIntroNidorino ld c, $a call CheckForUserInterruption ret c ; hip ld a, $b9 call PlaySound ld de, IntroNidorinoAnimation1 call AnimateIntroNidorino ; hop ld a, $ba call PlaySound ld de, IntroNidorinoAnimation2 call AnimateIntroNidorino ld c, $1e call CheckForUserInterruption ret c ; raise ld b, $4 call Func_4183f ld a, $bb call PlaySound ld de, $401 call Func_4180e ld c, $1e call CheckForUserInterruption ret c ; slash ld b, $5 call Func_4183f ld a, $bc call PlaySound ld de, $800 call Func_4180e ; hip ld a, $b9 call PlaySound ld a, $24 ld [$d09f], a ld de, IntroNidorinoAnimation3 call AnimateIntroNidorino ld c, $1e call CheckForUserInterruption ret c ld de, $401 call Func_4180e ld b, $3 call Func_4183f ld c, $3c call CheckForUserInterruption ret c ; hip ld a, $b9 call PlaySound xor a ld [$d09f], a ld de, IntroNidorinoAnimation4 ; $5931 call AnimateIntroNidorino ; hop ld a, $ba call PlaySound ld de, IntroNidorinoAnimation5 ; $593c call AnimateIntroNidorino ld c, $14 call CheckForUserInterruption ret c ld a, $24 ld [$d09f], a ld de, IntroNidorinoAnimation6 ; $5947 call AnimateIntroNidorino ld c, $1e call CheckForUserInterruption ret c ; lunge ld a, $b8 call PlaySound ld a, $48 ld [$d09f], a ld de, IntroNidorinoAnimation7 ; $5950 jp AnimateIntroNidorino AnimateIntroNidorino: ; 41793 (10:5793) ld a, [de] cp $50 ret z ld [W_BASECOORDY], a ; $d082 inc de ld a, [de] ld [W_BASECOORDX], a ; $d081 push de ld c, $24 call Func_417ae ld c, 5 call DelayFrames pop de inc de jr AnimateIntroNidorino Func_417ae: ; 417ae (10:57ae) ld hl, wOAMBuffer ld a, [$d09f] ld d, a .asm_417b5 ld a, [W_BASECOORDY] ; $d082 add [hl] ld [hli], a ld a, [W_BASECOORDX] ; $d081 add [hl] ld [hli], a ld a, d ld [hli], a inc hl inc d dec c jr nz, .asm_417b5 ret Func_417c7: ; 417c7 (10:57c7) ld hl, wOAMBuffer ld d, $0 .asm_417cc push bc ld a, [W_BASECOORDY] ; $d082 ld e, a .asm_417d1 ld a, e add $8 ld e, a ld [hli], a ld a, [W_BASECOORDX] ; $d081 ld [hli], a ld a, d ld [hli], a ld a, $80 ld [hli], a inc d dec c jr nz, .asm_417d1 ld a, [W_BASECOORDX] ; $d081 add $8 ld [W_BASECOORDX], a ; $d081 pop bc dec b jr nz, .asm_417cc ret Func_417f0: ; 417f0 (10:57f0) ld hl, $9c00 ld bc, $240 jr asm_417fe Func_417f8: ; 417f8 (10:57f8) FuncCoord 0, 4 ; $c3f0 ld hl, Coord ld bc, $c8 asm_417fe: ; 417fe (10:57fe) ld [hl], $0 inc hl dec bc ld a, b or c jr nz, asm_417fe ret Func_41807: ; 41807 (10:5807) ld a, $1 .asm_41809 ld [hli], a dec c jr nz, .asm_41809 ret Func_4180e: ; 4180e (10:580e) ld a, e cp $ff jr z, .asm_4181d cp $1 jr z, .asm_4182d ld a, [$FF00+$ae] dec a dec a jr .asm_41831 .asm_4181d push de ld a, $2 ld [W_BASECOORDX], a ; $d081 xor a ld [W_BASECOORDY], a ; $d082 ld c, $24 call Func_417ae pop de .asm_4182d ld a, [$FF00+$ae] inc a inc a .asm_41831 ld [$FF00+$ae], a push de ld c, $2 call CheckForUserInterruption pop de ret c dec d jr nz, Func_4180e ret Func_4183f: ; 4183f (10:583f) FuncCoord 13, 7 ; $c439 ld hl, Coord Func_41842: ; 41842 (10:5842) ld c, $0 ld a, $31 jp Predef ; indirect jump to Func_79dda Func_41849: ; 41849 (10:5849) ld a, $33 call Predef ; indirect jump to Func_79869 ld a, b jp PlaySound Func_41852: ; 41852 (10:5852) ld hl, FightIntroBackMon ; $5a99 ld de, $9000 ld bc, $600 ld a, BANK(FightIntroBackMon) call FarCopyData2 ld hl, GameFreakIntro ; $5959 ld de, $9600 ld bc, $140 ld a, BANK(GameFreakIntro) call FarCopyData2 ld hl, GameFreakIntro ; $5959 ld de, $8800 ld bc, $140 ld a, BANK(GameFreakIntro) call FarCopyData2 ld hl, FightIntroFrontMon ; $6099 ld de, $8000 ld bc, $6c0 ld a, BANK(FightIntroFrontMon) jp FarCopyData2 Func_4188a: ; 4188a (10:588a) ld b, $c call GoPAL_SET ld b, BANK(Func_4538) ld hl, Func_4538 call Bankswitch ld a, $e4 ld [rBGP], a ; $FF00+$47 ld c, $b4 call DelayFrames call ClearScreen call DisableLCD xor a ld [W_CUROPPONENT], a ; $d059 call Func_418e9 call Func_41852 call EnableLCD ld hl, rLCDC ; $ff40 res 5, [hl] set 3, [hl] ld c, $40 call DelayFrames ld b, BANK(Func_70044) ld hl, Func_70044 call Bankswitch push af pop af jr c, .asm_418d0 ld c, $28 call DelayFrames .asm_418d0 ld a, Bank(Func_7d8ea) ld [$c0ef], a ld [$c0f0], a ld a, MUSIC_INTRO_BATTLE ld [$c0ee], a call PlaySound call Func_417f8 call CleanLCD_OAM jp Delay3 Func_418e9: ; 418e9 (10:58e9) call Func_417f0 ld hl, wTileMap ld c, $50 call Func_41807 FuncCoord 0, 14 ; $c4b8 ld hl, Coord ld c, $50 call Func_41807 ld hl, $9c00 ld c, $80 call Func_41807 ld hl, $9dc0 ld c, $80 jp Func_41807 Func_4190c: ; 4190c (10:590c) ret IntroNidorinoAnimation0: ; 4190d (10:590d) db 0, 0 db $50 IntroNidorinoAnimation1: ; 41910 (10:5910) ; This is a sequence of pixel movements for part of the Nidorino animation. This ; list describes how Nidorino should hop. ; First byte is y movement, second byte is x movement db 0, 0 db -2, 2 db -1, 2 db 1, 2 db 2, 2 db $50 ; list terminator IntroNidorinoAnimation2: ; 4191b (10:591b) ; This is a sequence of pixel movements for part of the Nidorino animation. ; First byte is y movement, second byte is x movement db 0, 0 db -2, -2 db -1, -2 db 1, -2 db 2, -2 db $50 ; list terminator IntroNidorinoAnimation3: ; 41926 (10:5926) ; This is a sequence of pixel movements for part of the Nidorino animation. ; First byte is y movement, second byte is x movement db 0, 0 db -12, 6 db -8, 6 db 8, 6 db 12, 6 db $50 ; list terminator IntroNidorinoAnimation4: ; 41931 (10:5931) ; This is a sequence of pixel movements for part of the Nidorino animation. ; First byte is y movement, second byte is x movement db 0, 0 db -8, -4 db -4, -4 db 4, -4 db 8, -4 db $50 ; list terminator IntroNidorinoAnimation5: ; 4193c (10:593c) ; This is a sequence of pixel movements for part of the Nidorino animation. ; First byte is y movement, second byte is x movement db 0, 0 db -8, 4 db -4, 4 db 4, 4 db 8, 4 db $50 ; list terminator IntroNidorinoAnimation6: ; 41947 (10:5947) ; This is a sequence of pixel movements for part of the Nidorino animation. ; First byte is y movement, second byte is x movement db 0, 0 db 2, 0 db 2, 0 db 0, 0 db $50 ; list terminator IntroNidorinoAnimation7: ; 41950 (10:5950) ; This is a sequence of pixel movements for part of the Nidorino animation. ; First byte is y movement, second byte is x movement db -8, -16 db -7, -14 db -6, -12 db -4, -10 db $50 ; list terminator GameFreakIntro: ; 41959 (10:5959) INCBIN "gfx/gamefreak_intro.2bpp" FightIntroBackMon: ; 41a99 (10:5a99) INCBIN "gfx/intro_fight.2bpp" FightIntroFrontMon: ; 42099 (10:6099) IF _RED INCBIN "gfx/red/introfight.2bpp" ENDC IF _BLUE INCBIN "gfx/blue/introfight.2bpp" ENDC ; XXX what do these do Func_42769: ; 42769 (10:6769) FuncCoord 5,0 ld hl,Coord ld de,OTString67E5 call PlaceString ld a,[$CD3D] ld [$D11E],a ld a,$3A call Predef FuncCoord 9, 0 ; $c3a9 ld hl,Coord ld de,$D11E ld bc,$8103 call PrintNumber FuncCoord 5,2 ld hl,Coord ld de,$CF4B call PlaceString FuncCoord 8,4 ld hl,Coord ld de,$CD41 call PlaceString FuncCoord 8, 6 ; $c420 ld hl,Coord ld de,$CD4C ld bc,$8205 jp PrintNumber Func_427a7: ; 427a7 (10:67a7) FuncCoord 5,10 ld hl,Coord ld de,OTString67E5 call PlaceString ld a,[$CD3E] ld [$D11E],a ld a,$3A call Predef FuncCoord 9, 10 ; $c471 ld hl,Coord ld de,$D11E ld bc,$8103 call PrintNumber FuncCoord 5,12 ld hl,Coord ld de,$CD6D call PlaceString FuncCoord 8,14 ld hl,Coord ld de,$CD4E call PlaceString FuncCoord 8, 16 ; $c4e8 ld hl,Coord ld de,$CD59 ld bc,$8205 jp PrintNumber OTString67E5: ; 427e5 (10:67e5) db "──",$74,$F2,$4E db $4E db "OT/",$4E db $73,"№",$F2,"@" SECTION "bank11",ROMX,BANK[$11] LavenderTown_h: ; 0x44000 to 0x4402d (45 bytes) (bank=11) (id=4) db $00 ; tileset db LAVENDER_TOWN_HEIGHT, LAVENDER_TOWN_WIDTH ; dimensions (y, x) dw LavenderTownBlocks, LavenderTownTextPointers, LavenderTownScript ; blocks, texts, scripts db NORTH | SOUTH | WEST ; connections NORTH_MAP_CONNECTION ROUTE_10, ROUTE_10_WIDTH, ROUTE_10_HEIGHT, 0, 0, ROUTE_10_WIDTH, Route10Blocks SOUTH_MAP_CONNECTION ROUTE_12, ROUTE_12_WIDTH, 0, 0, ROUTE_12_WIDTH, Route12Blocks, LAVENDER_TOWN_WIDTH, LAVENDER_TOWN_HEIGHT WEST_MAP_CONNECTION ROUTE_8, ROUTE_8_WIDTH, 0, 0, ROUTE_8_HEIGHT, Route8Blocks, LAVENDER_TOWN_WIDTH dw LavenderTownObject ; objects LavenderTownObject: ; 0x4402d (size=88) db $2c ; border tile db $6 ; warps db $5, $3, $0, LAVENDER_POKECENTER db $5, $e, $0, POKEMONTOWER_1 db $9, $7, $0, LAVENDER_HOUSE_1 db $d, $f, $0, LAVENDER_MART db $d, $3, $0, LAVENDER_HOUSE_2 db $d, $7, $0, NAME_RATERS_HOUSE db $6 ; signs db $9, $b, $4 ; LavenderTownText4 db $3, $9, $5 ; LavenderTownText5 db $d, $10, $6 ; MartSignText db $5, $4, $7 ; PokeCenterSignText db $9, $5, $8 ; LavenderTownText8 db $7, $11, $9 ; LavenderTownText9 db $3 ; people db SPRITE_LITTLE_GIRL, $9 + 4, $f + 4, $fe, $0, $1 ; person db SPRITE_BLACK_HAIR_BOY_1, $a + 4, $9 + 4, $ff, $ff, $2 ; person db SPRITE_BLACK_HAIR_BOY_2, $7 + 4, $8 + 4, $fe, $2, $3 ; person ; warp-to EVENT_DISP $a, $5, $3 ; LAVENDER_POKECENTER EVENT_DISP $a, $5, $e ; POKEMONTOWER_1 EVENT_DISP $a, $9, $7 ; LAVENDER_HOUSE_1 EVENT_DISP $a, $d, $f ; LAVENDER_MART EVENT_DISP $a, $d, $3 ; LAVENDER_HOUSE_2 EVENT_DISP $a, $d, $7 ; NAME_RATERS_HOUSE LavenderTownBlocks: ; 44085 (11:4085) INCBIN "maps/lavendertown.blk" ViridianPokecenterBlocks: ; 440df (11:40df) INCBIN "maps/viridianpokecenter.blk" SafariZoneRestHouse1Blocks: ; 440fb (11:40fb) SafariZoneRestHouse2Blocks: ; 440fb (11:40fb) SafariZoneRestHouse3Blocks: ; 440fb (11:40fb) SafariZoneRestHouse4Blocks: ; 440fb (11:40fb) INCBIN "maps/safarizoneresthouse1.blk" LavenderTownScript: ; 4410b (11:410b) jp EnableAutoTextBoxDrawing LavenderTownTextPointers: ; 4410e (11:410e) dw LavenderTownText1 dw LavenderTownText2 dw LavenderTownText3 dw LavenderTownText4 dw LavenderTownText5 dw MartSignText dw PokeCenterSignText dw LavenderTownText8 dw LavenderTownText9 LavenderTownText1: ; 44120 (11:4120) db $08 ; asm ld hl, UnnamedText_4413c call PrintText call YesNoChoice ld a, [$cc26] and a ld hl, UnnamedText_44146 jr nz, .asm_40831 ; 0x44131 ld hl, UnnamedText_44141 .asm_40831 ; 0x44136 call PrintText jp TextScriptEnd UnnamedText_4413c: ; 4413c (11:413c) TX_FAR _UnnamedText_4413c db "@" UnnamedText_44141: ; 44141 (11:4141) TX_FAR _UnnamedText_44141 db "@" UnnamedText_44146: ; 44146 (11:4146) TX_FAR _UnnamedText_44146 db "@" LavenderTownText2: ; 4414b (11:414b) TX_FAR _LavenderTownText2 db "@" LavenderTownText3: ; 44150 (11:4150) TX_FAR _LavenderTownText3 db "@" LavenderTownText4: ; 44155 (11:4155) TX_FAR _LavenderTownText4 db "@" LavenderTownText5: ; 4415a (11:415a) TX_FAR _LavenderTownText5 db "@" LavenderTownText8: ; 4415f (11:415f) TX_FAR _LavenderTownText8 db "@" LavenderTownText9: ; 44164 (11:4164) TX_FAR _LavenderTownText9 db "@" DisplayDexRating: ; 44169 (11:4169) ld hl, wPokedexSeen ld b, $13 call CountSetBits ld a, [$D11E] ; result of CountSetBits (seen count) ld [$FFDB], a ld hl, wPokedexOwned ld b, $13 call CountSetBits ld a, [$D11E] ; result of CountSetBits (own count) ld [$FFDC], a ld hl, DexRatingsTable .findRating ld a, [hli] ld b, a ld a, [$FFDC] ; number of pokemon owned cp b jr c, .foundRating inc hl inc hl jr .findRating .foundRating ld a, [hli] ld h, [hl] ld l, a ; load text pointer into hl ld a, [$D747] bit 3, a res 3, a ld [$D747], a jr nz, .label3 push hl ld hl, UnnamedText_441cc call PrintText pop hl call PrintText ld b, BANK(Func_7d13b) ld hl, Func_7d13b call Bankswitch jp WaitForTextScrollButtonPress ; wait for button press .label3 ld de, $CC5B ld a, [$FFDB] ld [de], a inc de ld a, [$FFDC] ld [de], a inc de .label4 ld a, [hli] cp a, $50 jr z, .label5 ld [de], a inc de jr .label4 .label5 ld [de], a ret UnnamedText_441cc: ; 441cc (11:41cc) TX_FAR _UnnamedText_441cc db "@" DexRatingsTable: ; 441d1 (11:41d1) db 10 dw UnnamedText_44201 db 20 dw UnnamedText_44206 db 30 dw UnnamedText_4420b db 40 dw UnnamedText_44210 db 50 dw UnnamedText_44215 db 60 dw UnnamedText_4421a db 70 dw UnnamedText_4421f db 80 dw UnnamedText_44224 db 90 dw UnnamedText_44229 db 100 dw UnnamedText_4422e db 110 dw UnnamedText_44233 db 120 dw UnnamedText_44238 db 130 dw UnnamedText_4423d db 140 dw UnnamedText_44242 db 150 dw UnnamedText_44247 db 152 dw UnnamedText_4424c UnnamedText_44201: ; 44201 (11:4201) TX_FAR _UnnamedText_44201 db "@" UnnamedText_44206: ; 44206 (11:4206) TX_FAR _UnnamedText_44206 db "@" UnnamedText_4420b: ; 4420b (11:420b) TX_FAR _UnnamedText_4420b db "@" UnnamedText_44210: ; 44210 (11:4210) TX_FAR _UnnamedText_44210 db "@" UnnamedText_44215: ; 44215 (11:4215) TX_FAR _UnnamedText_44215 db "@" UnnamedText_4421a: ; 4421a (11:421a) TX_FAR _UnnamedText_4421a db "@" UnnamedText_4421f: ; 4421f (11:421f) TX_FAR _UnnamedText_4421f db "@" UnnamedText_44224: ; 44224 (11:4224) TX_FAR _UnnamedText_44224 db "@" UnnamedText_44229: ; 44229 (11:4229) TX_FAR _UnnamedText_44229 db "@" UnnamedText_4422e: ; 4422e (11:422e) TX_FAR _UnnamedText_4422e db "@" UnnamedText_44233: ; 44233 (11:4233) TX_FAR _UnnamedText_44233 db "@" UnnamedText_44238: ; 44238 (11:4238) TX_FAR _UnnamedText_44238 db "@" UnnamedText_4423d: ; 4423d (11:423d) TX_FAR _UnnamedText_4423d db "@" UnnamedText_44242: ; 44242 (11:4242) TX_FAR _UnnamedText_44242 db "@" UnnamedText_44247: ; 44247 (11:4247) TX_FAR _UnnamedText_44247 db "@" UnnamedText_4424c: ; 4424c (11:424c) TX_FAR _UnnamedText_4424c db "@" ViridianPokecenter_h: ; 0x44251 to 0x4425d (12 bytes) (bank=11) (id=41) db $06 ; tileset db VIRIDIAN_POKECENTER_HEIGHT, VIRIDIAN_POKECENTER_WIDTH ; dimensions (y, x) dw ViridianPokecenterBlocks, ViridianPokecenterTextPointers, ViridianPokeCenterScript ; blocks, texts, scripts db $00 ; connections dw ViridianPokecenterObject ; objects ViridianPokeCenterScript: ; 4425d (11:425d) call Func_22fa jp EnableAutoTextBoxDrawing ViridianPokecenterTextPointers: ; 44263 (11:4263) dw ViridianPokeCenterText1 dw ViridianPokeCenterText2 dw ViridianPokeCenterText3 dw ViridianPokeCenterText4 ViridianPokeCenterText1: ; 4426b (11:426b) db $ff ViridianPokeCenterText2: ; 4426c (11:426c) TX_FAR _ViridianPokeCenterText1 db "@" ViridianPokeCenterText3: ; 44271 (11:4271) TX_FAR _ViridianPokeCenterText3 db "@" ViridianPokeCenterText4: ; 44276 (11:4276) db $f6 ViridianPokecenterObject: ; 0x44277 (size=44) db $0 ; border tile db $2 ; warps db $7, $3, $0, $ff db $7, $4, $0, $ff db $0 ; signs db $4 ; people db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person db SPRITE_GENTLEMAN, $5 + 4, $a + 4, $fe, $1, $2 ; person db SPRITE_BLACK_HAIR_BOY_1, $3 + 4, $4 + 4, $ff, $ff, $3 ; person db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $4 ; person ; warp-to EVENT_DISP $7, $7, $3 EVENT_DISP $7, $7, $4 Mansion1_h: ; 0x442a3 to 0x442af (12 bytes) (bank=11) (id=165) db $16 ; tileset db MANSION_1_HEIGHT, MANSION_1_WIDTH ; dimensions (y, x) dw Mansion1Blocks, Mansion1TextPointers, Mansion1Script ; blocks, texts, scripts db $00 ; connections dw Mansion1Object ; objects Mansion1Script: ; 442af (11:42af) call Mansion1Subscript1 call EnableAutoTextBoxDrawing ld hl, Mansion1TrainerHeaders ld de, Mansion1ScriptPointers ld a, [W_MANSION1CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_MANSION1CURSCRIPT], a ret Mansion1Subscript1: ; 442c5 (11:42c5) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld a, [$d796] bit 0, a jr nz, .asm_442ec ; 0x442d2 $18 ld bc, $060c call Func_4430b ld bc, $0308 call Func_44304 ld bc, $080a call Func_44304 ld bc, $0d0d jp Func_44304 .asm_442ec ld bc, $060c call Func_44304 ld bc, $0308 call Func_4430b ld bc, $080a call Func_4430b ld bc, $0d0d jp Func_4430b Func_44304: ; 44304 (11:4304) ld a, $2d ld [$d09f], a jr asm_44310 Func_4430b: ; 4430b (11:430b) ld a, $e ld [$d09f], a asm_44310: ; 44310 (11:4310) ld a, $17 call Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) ret Func_44316: ; 44316 (11:4316) ld a, [$c109] cp $4 ret nz xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, $4 ld [H_SPRITEHEIGHT], a jp DisplayTextID Mansion1ScriptPointers: ; 44326 (11:4326) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle Mansion1TextPointers: ; 4432c (11:432c) dw Mansion1Text1 dw Predef5CText dw Predef5CText dw Mansion1Text4 Mansion1TrainerHeaders: ; 44334 (11:4334) Mansion1TrainerHeader0: ; 44334 (11:4334) db $1 ; flag's bit db ($3 << 4) ; trainer's view range dw $d798 ; flag's byte dw Mansion1BattleText2 ; 0x434b TextBeforeBattle dw Mansion1AfterBattleText2 ; 0x4355 TextAfterBattle dw Mansion1EndBattleText2 ; 0x4350 TextEndBattle dw Mansion1EndBattleText2 ; 0x4350 TextEndBattle db $ff Mansion1Text1: ; 44341 (11:4341) db $08 ; asm ld hl, Mansion1TrainerHeader0 call TalkToTrainer jp TextScriptEnd Mansion1BattleText2: ; 4434b (11:434b) TX_FAR _Mansion1BattleText2 db "@" Mansion1EndBattleText2: ; 44350 (11:4350) TX_FAR _Mansion1EndBattleText2 db "@" Mansion1AfterBattleText2: ; 44355 (11:4355) TX_FAR _Mansion1AfterBattleText2 db "@" Mansion1Text4: ; 4435a (11:435a) db $8 ld hl, MansionSwitchText call PrintText call YesNoChoice ld a, [$cc26] and a jr nz, .asm_4438c ; 0x44368 $22 ld a, $1 ld [$cc3c], a ld hl, $d126 set 5, [hl] ld hl, MansionSwitchPressedText call PrintText ld a, $ad call PlaySound ld hl, $d796 bit 0, [hl] set 0, [hl] jr z, .asm_44392 ; 0x44386 $a res 0, [hl] jr .asm_44392 ; 0x4438a $6 .asm_4438c ld hl, MansionSwitchNotPressedText call PrintText .asm_44392 jp TextScriptEnd MansionSwitchText: ; 44395 (11:4395) TX_FAR _MansionSwitchText db "@" MansionSwitchPressedText: ; 4439a (11:439a) TX_FAR _MansionSwitchPressedText db "@" MansionSwitchNotPressedText: ; 4439f (11:439f) TX_FAR _MansionSwitchNotPressedText db "@" Mansion1Object: ; 0x443a4 (size=90) db $2e ; border tile db $8 ; warps db $1b, $4, $0, $ff db $1b, $5, $0, $ff db $1b, $6, $0, $ff db $1b, $7, $0, $ff db $a, $5, $0, MANSION_2 db $17, $15, $0, MANSION_4 db $1b, $1a, $0, $ff db $1b, $1b, $0, $ff db $0 ; signs db $3 ; people db SPRITE_OAK_AIDE, $11 + 4, $11 + 4, $ff, $d2, $41, SCIENTIST + $C8, $4 ; trainer db SPRITE_BALL, $3 + 4, $e + 4, $ff, $ff, $82, ESCAPE_ROPE ; item db SPRITE_BALL, $15 + 4, $12 + 4, $ff, $ff, $83, CARBOS ; item ; warp-to EVENT_DISP $f, $1b, $4 EVENT_DISP $f, $1b, $5 EVENT_DISP $f, $1b, $6 EVENT_DISP $f, $1b, $7 EVENT_DISP $f, $a, $5 ; MANSION_2 EVENT_DISP $f, $17, $15 ; MANSION_4 EVENT_DISP $f, $1b, $1a EVENT_DISP $f, $1b, $1b Mansion1Blocks: ; 443fe (11:43fe) INCBIN "maps/mansion1.blk" RockTunnel1_h: ; 0x444d0 to 0x444dc (12 bytes) (bank=11) (id=82) db $11 ; tileset db ROCK_TUNNEL_1_HEIGHT, ROCK_TUNNEL_1_WIDTH ; dimensions (y, x) dw RockTunnel1Blocks, RockTunnel1TextPointers, RockTunnel1Script ; blocks, texts, scripts db $00 ; connections dw RockTunnel1Object ; objects RockTunnel1Script: ; 444dc (11:44dc) call EnableAutoTextBoxDrawing ld hl, RockTunnel1TrainerHeaders ld de, RockTunnel1ScriptPointers ld a, [W_ROCKTUNNEL1CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROCKTUNNEL1CURSCRIPT], a ret RockTunnel1ScriptPointers: ; 444ef (11:44ef) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle RockTunnel1TextPointers: ; 444f5 (11:44f5) dw RockTunnel1Text1 dw RockTunnel1Text2 dw RockTunnel1Text3 dw RockTunnel1Text4 dw RockTunnel1Text5 dw RockTunnel1Text6 dw RockTunnel1Text7 dw RockTunnel1Text8 RockTunnel1TrainerHeaders: ; 44505 (11:4505) RockTunnel1TrainerHeader1: ; 44505 (11:4505) db $1 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7d2 ; flag's byte dw RockTunnel1BattleText1 ; 0x4588 TextBeforeBattle dw RockTunnel1AfterBattleText1 ; 0x4592 TextAfterBattle dw RockTunnel1EndBattleText1 ; 0x458d TextEndBattle dw RockTunnel1EndBattleText1 ; 0x458d TextEndBattle RockTunnel1TrainerHeader2: ; 44511 (11:4511) db $2 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7d2 ; flag's byte dw RockTunnel1BattleText2 ; 0x4597 TextBeforeBattle dw RockTunnel1AfterBattleText2 ; 0x45a1 TextAfterBattle dw RockTunnel1EndBattleText2 ; 0x459c TextEndBattle dw RockTunnel1EndBattleText2 ; 0x459c TextEndBattle RockTunnel1TrainerHeader3: ; 4451d (11:451d) db $3 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7d2 ; flag's byte dw RockTunnel1BattleText3 ; 0x45a6 TextBeforeBattle dw RockTunnel1AfterBattleText3 ; 0x45b0 TextAfterBattle dw RockTunnel1EndBattleText3 ; 0x45ab TextEndBattle dw RockTunnel1EndBattleText3 ; 0x45ab TextEndBattle RockTunnel1TrainerHeader4: ; 44529 (11:4529) db $4 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7d2 ; flag's byte dw RockTunnel1BattleText4 ; 0x45b5 TextBeforeBattle dw RockTunnel1AfterBattleText4 ; 0x45bf TextAfterBattle dw RockTunnel1EndBattleText4 ; 0x45ba TextEndBattle dw RockTunnel1EndBattleText4; 0x45ba TextEndBattle RockTunnel1TrainerHeader5: ; 44535 (11:4535) db $5 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7d2 ; flag's byte dw RockTunnel1BattleText5 ; 0x45c4 TextBeforeBattle dw RockTunnel1AfterBattleText5 ; 0x45ce TextAfterBattle dw RockTunnel1EndBattleText5 ; 0x45c9 TextEndBattle dw RockTunnel1EndBattleText5 ; 0x45c9 TextEndBattle RockTunnel1TrainerHeader6: ; 44541 (11:4541) db $6 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7d2 ; flag's byte dw RockTunnel1BattleText6 ; 0x45d3 TextBeforeBattle dw RockTunnel1AfterBattleText6 ; 0x45dd TextAfterBattle dw RockTunnel1EndBattleText6 ; 0x45d8 TextEndBattle dw RockTunnel1EndBattleText6 ; 0x45d8 TextEndBattle RockTunnel1TrainerHeader7: ; 4454d (11:454d) db $7 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7d2 ; flag's byte dw RockTunnel1BattleText7; 0x45e2 TextBeforeBattle dw RockTunnel1AfterBattleText7 ; 0x45ec TextAfterBattle dw RockTunnel1EndBattleText7 ; 0x45e7 TextEndBattle dw RockTunnel1EndBattleText7 ; 0x45e7 TextEndBattle db $ff RockTunnel1Text1: ; 4455a (11:455a) db $8 ld hl, RockTunnel1TrainerHeader1 ; $4505 jr asm_0c916 ; 0x4455e $22 RockTunnel1Text2: ; 44560 (11:4560) db $8 ld hl, RockTunnel1TrainerHeader2 ; $4511 jr asm_0c916 ; 0x44564 $1c RockTunnel1Text3: ; 44566 (11:4566) db $8 ld hl, RockTunnel1TrainerHeader3 ; $451d jr asm_0c916 ; 0x4456a $16 RockTunnel1Text4: ; 4456c (11:456c) db $8 ld hl, RockTunnel1TrainerHeader4 ; $4529 jr asm_0c916 ; 0x44570 $10 RockTunnel1Text5: ; 44572 (11:4572) db $8 ld hl, RockTunnel1TrainerHeader5 ; $4535 jr asm_0c916 ; 0x44576 $a RockTunnel1Text6: ; 44578 (11:4578) db $8 ld hl, RockTunnel1TrainerHeader6 ; $4541 jr asm_0c916 ; 0x4457c $4 RockTunnel1Text7: ; 4457e (11:457e) db $8 ld hl, RockTunnel1TrainerHeader7 ; $454d asm_0c916: ; 44582 (11:4582) call TalkToTrainer jp TextScriptEnd RockTunnel1BattleText1: ; 44588 (11:4588) TX_FAR _RockTunnel1BattleText1 db "@" RockTunnel1EndBattleText1: ; 4458d (11:458d) TX_FAR _RockTunnel1EndBattleText1 db "@" RockTunnel1AfterBattleText1: ; 44592 (11:4592) TX_FAR _RockTunnel1AfterBattleText1 db "@" RockTunnel1BattleText2: ; 44597 (11:4597) TX_FAR _RockTunnel1BattleText2 db "@" RockTunnel1EndBattleText2: ; 4459c (11:459c) TX_FAR _RockTunnel1EndBattleText2 db "@" RockTunnel1AfterBattleText2: ; 445a1 (11:45a1) TX_FAR _RockTunnel1AfterBattleText2 db "@" RockTunnel1BattleText3: ; 445a6 (11:45a6) TX_FAR _RockTunnel1BattleText3 db "@" RockTunnel1EndBattleText3: ; 445ab (11:45ab) TX_FAR _RockTunnel1EndBattleText3 db "@" RockTunnel1AfterBattleText3: ; 445b0 (11:45b0) TX_FAR _RockTunnel1AfterBattleText3 db "@" RockTunnel1BattleText4: ; 445b5 (11:45b5) TX_FAR _RockTunnel1BattleText4 db "@" RockTunnel1EndBattleText4: ; 445ba (11:45ba) TX_FAR _RockTunnel1EndBattleText4 db "@" RockTunnel1AfterBattleText4: ; 445bf (11:45bf) TX_FAR _RockTunnel1AfterBattleText4 db "@" RockTunnel1BattleText5: ; 445c4 (11:45c4) TX_FAR _RockTunnel1BattleText5 db "@" RockTunnel1EndBattleText5: ; 445c9 (11:45c9) TX_FAR _RockTunnel1EndBattleText5 db "@" RockTunnel1AfterBattleText5: ; 445ce (11:45ce) TX_FAR _RockTunnel1AfterBattleText5 db "@" RockTunnel1BattleText6: ; 445d3 (11:45d3) TX_FAR _RockTunnel1BattleText6 db "@" RockTunnel1EndBattleText6: ; 445d8 (11:45d8) TX_FAR _RockTunnel1EndBattleText6 db "@" RockTunnel1AfterBattleText6: ; 445dd (11:45dd) TX_FAR _RockTunnel1AfterBattleText6 db "@" RockTunnel1BattleText7: ; 445e2 (11:45e2) TX_FAR _RockTunnel1BattleText7 db "@" RockTunnel1EndBattleText7: ; 445e7 (11:45e7) TX_FAR _RockTunnel1EndBattleText7 db "@" RockTunnel1AfterBattleText7: ; 445ec (11:45ec) TX_FAR _RockTunnel1AfterBattleText7 db "@" RockTunnel1Text8: ; 445f1 (11:45f1) TX_FAR _RockTunnel1Text8 db "@" RockTunnel1Object: ; 0x445f6 (size=127) db $3 ; border tile db $8 ; warps db $3, $f, $1, $ff db $0, $f, $1, $ff db $21, $f, $2, $ff db $23, $f, $2, $ff db $3, $25, $0, ROCK_TUNNEL_2 db $3, $5, $1, ROCK_TUNNEL_2 db $b, $11, $2, ROCK_TUNNEL_2 db $11, $25, $3, ROCK_TUNNEL_2 db $1 ; signs db $1d, $b, $8 ; RockTunnel1Text8 db $7 ; people db SPRITE_HIKER, $5 + 4, $7 + 4, $ff, $d0, $41, HIKER + $C8, $c ; trainer db SPRITE_HIKER, $10 + 4, $5 + 4, $ff, $d0, $42, HIKER + $C8, $d ; trainer db SPRITE_HIKER, $f + 4, $11 + 4, $ff, $d2, $43, HIKER + $C8, $e ; trainer db SPRITE_BLACK_HAIR_BOY_2, $8 + 4, $17 + 4, $ff, $d2, $44, POKEMANIAC + $C8, $7 ; trainer db SPRITE_LASS, $15 + 4, $25 + 4, $ff, $d2, $45, JR__TRAINER_F + $C8, $11 ; trainer db SPRITE_LASS, $18 + 4, $16 + 4, $ff, $d0, $46, JR__TRAINER_F + $C8, $12 ; trainer db SPRITE_LASS, $18 + 4, $20 + 4, $ff, $d3, $47, JR__TRAINER_F + $C8, $13 ; trainer ; warp-to EVENT_DISP $14, $3, $f EVENT_DISP $14, $0, $f EVENT_DISP $14, $21, $f EVENT_DISP $14, $23, $f EVENT_DISP $14, $3, $25 ; ROCK_TUNNEL_2 EVENT_DISP $14, $3, $5 ; ROCK_TUNNEL_2 EVENT_DISP $14, $b, $11 ; ROCK_TUNNEL_2 EVENT_DISP $14, $11, $25 ; ROCK_TUNNEL_2 RockTunnel1Blocks: ; 44675 (11:4675) INCBIN "maps/rocktunnel1.blk" SeafoamIslands1_h: ; 0x447dd to 0x447e9 (12 bytes) (bank=11) (id=192) db $11 ; tileset db SEAFOAM_ISLANDS_1_HEIGHT, SEAFOAM_ISLANDS_1_WIDTH ; dimensions (y, x) dw SeafoamIslands1Blocks, SeafoamIslands1TextPointers, SeafoamIslands1Script ; blocks, texts, scripts db $00 ; connections dw SeafoamIslands1Object ; objects SeafoamIslands1Script: ; 447e9 (11:47e9) call EnableAutoTextBoxDrawing ld hl, $d7e7 set 0, [hl] ld hl, wFlags_0xcd60 bit 7, [hl] res 7, [hl] jr z, .asm_4483b ; 0x447f8 $41 ld hl, Seafoam1HolesCoords call CheckBoulderCoords ret nc ld hl, $d7e8 ld a, [$cd3d] cp $1 jr nz, .asm_44819 ; 0x44809 $e set 6, [hl] ld a, $d7 ld [$d079], a ld a, $d9 ld [$d07a], a jr .asm_44825 ; 0x44817 $c .asm_44819 set 7, [hl] ld a, $d8 ld [$d079], a ld a, $da ld [$d07a], a .asm_44825 ld a, [$d079] ld [$cc4d], a ld a, $11 call Predef ld a, [$d07a] ld [$cc4d], a ld a, $15 jp Predef .asm_4483b ld a, $9f ld [$d71d], a ld hl, Seafoam1HolesCoords jp Func_46981 Seafoam1HolesCoords: ; 44846 (11:4846) db $06,$11 db $06,$18 db $ff SeafoamIslands1TextPointers: ; 4484b (11:484b) dw BoulderText dw BoulderText SeafoamIslands1Object: ; 0x4484f (size=72) db $7d ; border tile db $7 ; warps db $11, $4, $0, $ff db $11, $5, $0, $ff db $11, $1a, $1, $ff db $11, $1b, $1, $ff db $5, $7, $1, SEAFOAM_ISLANDS_2 db $3, $19, $6, SEAFOAM_ISLANDS_2 db $f, $17, $4, SEAFOAM_ISLANDS_2 db $0 ; signs db $2 ; people db SPRITE_BOULDER, $a + 4, $12 + 4, $ff, $10, $1 ; person db SPRITE_BOULDER, $7 + 4, $1a + 4, $ff, $10, $2 ; person ; warp-to EVENT_DISP $f, $11, $4 EVENT_DISP $f, $11, $5 EVENT_DISP $f, $11, $1a EVENT_DISP $f, $11, $1b EVENT_DISP $f, $5, $7 ; SEAFOAM_ISLANDS_2 EVENT_DISP $f, $3, $19 ; SEAFOAM_ISLANDS_2 EVENT_DISP $f, $f, $17 ; SEAFOAM_ISLANDS_2 ; holes EVENT_DISP $f, $6, $11 EVENT_DISP $f, $6, $18 SeafoamIslands1Blocks: ; 4489f (11:489f) INCBIN "maps/seafoamislands1.blk" SSAnne3_h: ; 0x44926 to 0x44932 (12 bytes) (bank=11) (id=97) db $0d ; tileset db SS_ANNE_3_HEIGHT, SS_ANNE_3_WIDTH ; dimensions (y, x) dw SSAnne3Blocks, SSAnne3TextPointers, SSAnne3Script ; blocks, texts, scripts db $00 ; connections dw SSAnne3Object ; objects SSAnne3Script: ; 44932 (11:4932) jp EnableAutoTextBoxDrawing SSAnne3TextPointers: ; 44935 (11:4935) dw SSAnne3Text1 SSAnne3Text1: ; 44937 (11:4937) TX_FAR _SSAnne3Text1 db "@" SSAnne3Object: ; 0x4493c (size=26) db $c ; border tile db $2 ; warps db $3, $0, $0, SS_ANNE_5 db $3, $13, $7, SS_ANNE_2 db $0 ; signs db $1 ; people db SPRITE_SAILOR, $3 + 4, $9 + 4, $fe, $2, $1 ; person ; warp-to EVENT_DISP $a, $3, $0 ; SS_ANNE_5 EVENT_DISP $a, $3, $13 ; SS_ANNE_2 SSAnne3Blocks: ; 44956 (11:4956) INCBIN "maps/ssanne3.blk" VictoryRoad3_h: ; 0x44974 to 0x44980 (12 bytes) (bank=11) (id=198) db $11 ; tileset db VICTORY_ROAD_3_HEIGHT, VICTORY_ROAD_3_WIDTH ; dimensions (y, x) dw VictoryRoad3Blocks, VictoryRoad3TextPointers, VictoryRoad3Script ; blocks, texts, scripts db $00 ; connections dw VictoryRoad3Object ; objects VictoryRoad3Script: ; 44980 (11:4980) call VictoryRoad3Script_44996 call EnableAutoTextBoxDrawing ld hl, VictoryRoad3TrainerHeaders ld de, VictoryRoad3ScriptPointers ld a, [W_VICTORYROAD3CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_VICTORYROAD3CURSCRIPT], a ret VictoryRoad3Script_44996: ; 44996 (11:4996) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld hl, $d813 bit 0, [hl] ret z ld a, $1d ld [$d09f], a ld bc, $503 ld a, $17 jp Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) VictoryRoad3ScriptPointers: ; 449b1 (11:49b1) dw VictoryRoad3Script0 dw Func_324c dw EndTrainerBattle VictoryRoad3Script0: ; 449b7 (11:49b7) ld hl, wFlags_0xcd60 bit 7, [hl] res 7, [hl] jp z, .asm_449fe ld hl, .coordsData_449f9 ; $49f9 call CheckBoulderCoords jp nc, .asm_449fe ld a, [wWhichTrade] ; $cd3d cp $1 jr nz, .asm_449dc ld hl, $d126 set 5, [hl] ld hl, $d813 set 0, [hl] ret .asm_449dc ld hl, $d813 bit 6, [hl] set 6, [hl] jr nz, .asm_449fe ld a, $7a ld [$cc4d], a ld a, $11 call Predef ; indirect jump to RemoveMissableObject (f1d7 (3:71d7)) ld a, $60 ld [$cc4d], a ld a, $15 jp Predef ; indirect jump to AddMissableObject (f1c8 (3:71c8)) .coordsData_449f9: ; 449f9 (11:49f9) db $05,$03 db $0F,$17 db $FF .asm_449fe ld a, $c2 ld [$d71d], a ld hl, .coordsData_449f9 ; $49f9 call Func_46981 ld a, [wWhichTrade] ; $cd3d cp $1 jr nz, .asm_44a1b ld hl, $d72d res 4, [hl] ld hl, $d732 res 4, [hl] ret .asm_44a1b ld a, [$d72d] bit 4, a jp z, CheckFightingMapTrainers ret VictoryRoad3TextPointers: ; 44a24 (11:4a24) dw VictoryRoad3Text1 dw VictoryRoad3Text2 dw VictoryRoad3Text3 dw VictoryRoad3Text4 dw Predef5CText dw Predef5CText dw BoulderText dw BoulderText dw BoulderText dw BoulderText VictoryRoad3TrainerHeaders: ; 44a38 (11:4a38) VictoryRoad3TrainerHeader0: ; 44a38 (11:4a38) db $1 ; flag's bit db ($1 << 4) ; trainer's view range dw $d813 ; flag's byte dw VictoryRoad3BattleText2 ; 0x4a91 TextBeforeBattle dw VictoryRoad3AfterBattleText2 ; 0x4a9b TextAfterBattle dw VictoryRoad3EndBattleText2 ; 0x4a96 TextEndBattle dw VictoryRoad3EndBattleText2 ; 0x4a96 TextEndBattle VictoryRoad3TrainerHeader2: ; 44a44 (11:4a44) db $2 ; flag's bit db ($4 << 4) ; trainer's view range dw $d813 ; flag's byte dw VictoryRoad3BattleText3 ; 0x4aa0 TextBeforeBattle dw VictoryRoad3AfterBattleText3 ; 0x4aaa TextAfterBattle dw VictoryRoad3EndBattleText3 ; 0x4aa5 TextEndBattle dw VictoryRoad3EndBattleText3 ; 0x4aa5 TextEndBattle VictoryRoad3TrainerHeader3: ; 44a50 (11:4a50) db $3 ; flag's bit db ($4 << 4) ; trainer's view range dw $d813 ; flag's byte dw VictoryRoad3BattleText4 ; 0x4aaf TextBeforeBattle dw VictoryRoad3AfterBattleText4 ; 0x4ab9 TextAfterBattle dw VictoryRoad3EndBattleText4 ; 0x4ab4 TextEndBattle dw VictoryRoad3EndBattleText4 ; 0x4ab4 TextEndBattle VictoryRoad3TrainerHeader4: ; 44a5c (11:4a5c) db $4 ; flag's bit db ($4 << 4) ; trainer's view range dw $d813 ; flag's byte dw VictoryRoad3BattleText5 ; 0x4abe TextBeforeBattle dw VictoryRoad3AfterBattleText5 ; 0x4ac8 TextAfterBattle dw VictoryRoad3EndBattleText5 ; 0x4ac3 TextEndBattle dw VictoryRoad3EndBattleText5 ; 0x4ac3 TextEndBattle db $ff VictoryRoad3Text1: ; 44a69 (11:4a69) db $08 ; asm ld hl, VictoryRoad3TrainerHeader0 call TalkToTrainer jp TextScriptEnd VictoryRoad3Text2: ; 44a73 (11:4a73) db $08 ; asm ld hl, VictoryRoad3TrainerHeader2 call TalkToTrainer jp TextScriptEnd VictoryRoad3Text3: ; 44a7d (11:4a7d) db $08 ; asm ld hl, VictoryRoad3TrainerHeader3 call TalkToTrainer jp TextScriptEnd VictoryRoad3Text4: ; 44a87 (11:4a87) db $08 ; asm ld hl, VictoryRoad3TrainerHeader4 call TalkToTrainer jp TextScriptEnd VictoryRoad3BattleText2: ; 44a91 (11:4a91) TX_FAR _VictoryRoad3BattleText2 db "@" VictoryRoad3EndBattleText2: ; 44a96 (11:4a96) TX_FAR _VictoryRoad3EndBattleText2 db "@" VictoryRoad3AfterBattleText2: ; 44a9b (11:4a9b) TX_FAR _VictoryRoad3AfterBattleText2 db "@" VictoryRoad3BattleText3: ; 44aa0 (11:4aa0) TX_FAR _VictoryRoad3BattleText3 db "@" VictoryRoad3EndBattleText3: ; 44aa5 (11:4aa5) TX_FAR _VictoryRoad3EndBattleText3 db "@" VictoryRoad3AfterBattleText3: ; 44aaa (11:4aaa) TX_FAR _VictoryRoad3AfterBattleText3 db "@" VictoryRoad3BattleText4: ; 44aaf (11:4aaf) TX_FAR _VictoryRoad3BattleText4 db "@" VictoryRoad3EndBattleText4: ; 44ab4 (11:4ab4) TX_FAR _VictoryRoad3EndBattleText4 db "@" VictoryRoad3AfterBattleText4: ; 44ab9 (11:4ab9) TX_FAR _VictoryRoad3AfterBattleText4 db "@" VictoryRoad3BattleText5: ; 44abe (11:4abe) TX_FAR _VictoryRoad3BattleText5 db "@" VictoryRoad3EndBattleText5: ; 44ac3 (11:4ac3) TX_FAR _VictoryRoad3EndBattleText5 db "@" VictoryRoad3AfterBattleText5: ; 44ac8 (11:4ac8) TX_FAR _VictoryRoad3AfterBattleText5 db "@" VictoryRoad3Object: ; 0x44acd (size=106) db $7d ; border tile db $4 ; warps db $7, $17, $3, VICTORY_ROAD_2 db $8, $1a, $5, VICTORY_ROAD_2 db $f, $1b, $4, VICTORY_ROAD_2 db $0, $2, $6, VICTORY_ROAD_2 db $0 ; signs db $a ; people db SPRITE_BLACK_HAIR_BOY_1, $5 + 4, $1c + 4, $ff, $d2, $41, COOLTRAINER_M + $C8, $2 ; trainer db SPRITE_LASS, $d + 4, $7 + 4, $ff, $d3, $42, COOLTRAINER_F + $C8, $2 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $e + 4, $6 + 4, $ff, $d2, $43, COOLTRAINER_M + $C8, $3 ; trainer db SPRITE_LASS, $3 + 4, $d + 4, $ff, $d3, $44, COOLTRAINER_F + $C8, $3 ; trainer db SPRITE_BALL, $5 + 4, $1a + 4, $ff, $ff, $85, MAX_REVIVE ; item db SPRITE_BALL, $7 + 4, $7 + 4, $ff, $ff, $86, TM_47 ; item db SPRITE_BOULDER, $3 + 4, $16 + 4, $ff, $10, $7 ; person db SPRITE_BOULDER, $c + 4, $d + 4, $ff, $10, $8 ; person db SPRITE_BOULDER, $a + 4, $18 + 4, $ff, $10, $9 ; person db SPRITE_BOULDER, $f + 4, $16 + 4, $ff, $10, $a ; person ; warp-to EVENT_DISP $f, $7, $17 ; VICTORY_ROAD_2 EVENT_DISP $f, $8, $1a ; VICTORY_ROAD_2 EVENT_DISP $f, $f, $1b ; VICTORY_ROAD_2 EVENT_DISP $f, $0, $2 ; VICTORY_ROAD_2 VictoryRoad3Blocks: ; 44b37 (11:4b37) INCBIN "maps/victoryroad3.blk" RocketHideout1_h: ; 0x44bbe to 0x44bca (12 bytes) (bank=11) (id=199) db $16 ; tileset db ROCKET_HIDEOUT_1_HEIGHT, ROCKET_HIDEOUT_1_WIDTH ; dimensions (y, x) dw RocketHideout1Blocks, RocketHideout1TextPointers, RocketHideout1Script ; blocks, texts, scripts db $00 ; connections dw RocketHideout1Object ; objects RocketHideout1Script: ; 44bca (11:4bca) call Func_44be0 call EnableAutoTextBoxDrawing ld hl, RocketHideout1TrainerHeaders ld de, RocketHideout1ScriptPointers ld a, [W_ROCKETHIDEOUT1CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROCKETHIDEOUT1CURSCRIPT], a ret Func_44be0: ; 44be0 (11:4be0) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld a, [$d815] bit 7, a jr nz, .asm_44c01 bit 5, a jr nz, .asm_44bf7 ld a, $54 jr .asm_44c03 .asm_44bf7 ld a, $ad call PlaySound ld hl, $d815 bit 7, [hl] .asm_44c01 ld a, $e .asm_44c03 ld [$d09f], a ld bc, $080c ld a, $17 jp Predef RocketHideout1ScriptPointers: ; 44c0e (11:4c0e) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle RocketHideout1TextPointers: ; 44c14 (11:4c14) dw RocketHideout1Text1 dw RocketHideout1Text2 dw RocketHideout1Text3 dw RocketHideout1Text4 dw RocketHideout1Text5 dw Predef5CText dw Predef5CText RocketHideout1TrainerHeaders: ; 44c22 (11:4c22) RocketHideout1TrainerHeader0: ; 44c22 (11:4c22) db $1 ; flag's bit db ($3 << 4) ; trainer's view range dw $d815 ; flag's byte dw RocketHideout1BattleText2 ; 0x4ca1 TextBeforeBattle dw RocketHideout1AfterBattleTxt2 ; 0x4cab TextAfterBattle dw RocketHideout1EndBattleText2 ; 0x4ca6 TextEndBattle dw RocketHideout1EndBattleText2 ; 0x4ca6 TextEndBattle RocketHideout1TrainerHeader2: ; 44c2e (11:4c2e) db $2 ; flag's bit db ($2 << 4) ; trainer's view range dw $d815 ; flag's byte dw RocketHideout1BattleText3 ; 0x4cb0 TextBeforeBattle dw RocketHideout1AfterBattleTxt3 ; 0x4cba TextAfterBattle dw RocketHideout1EndBattleText3 ; 0x4cb5 TextEndBattle dw RocketHideout1EndBattleText3 ; 0x4cb5 TextEndBattle RocketHideout1TrainerHeader3: ; 44c3a (11:4c3a) db $3 ; flag's bit db ($2 << 4) ; trainer's view range dw $d815 ; flag's byte dw RocketHideout1BattleText4 ; 0x4cbf TextBeforeBattle dw RocketHideout1AfterBattleTxt4 ; 0x4cc9 TextAfterBattle dw RocketHideout1EndBattleText4 ; 0x4cc4 TextEndBattle dw RocketHideout1EndBattleText4 ; 0x4cc4 TextEndBattle RocketHideout1TrainerHeader4: ; 44c46 (11:4c46) db $4 ; flag's bit db ($3 << 4) ; trainer's view range dw $d815 ; flag's byte dw RocketHideout1BattleText5 ; 0x4cce TextBeforeBattle dw RocketHideout1AfterBattleTxt5 ; 0x4cd8 TextAfterBattle dw RocketHideout1EndBattleText5 ; 0x4cd3 TextEndBattle dw RocketHideout1EndBattleText5 ; 0x4cd3 TextEndBattle RocketHideout1TrainerHeader5: ; 44c52 (11:4c52) db $5 ; flag's bit db ($3 << 4) ; trainer's view range dw $d815 ; flag's byte dw RocketHideout1BattleText6 ; 0x4cdd TextBeforeBattle dw RocketHideout1AfterBattleTxt6 ; 0x4ce2 TextAfterBattle dw RocketHideout1EndBattleText6 ; 0x4c91 TextEndBattle dw RocketHideout1EndBattleText6 ; 0x4c91 TextEndBattle db $ff RocketHideout1Text1: ; 44c5f (11:4c5f) db $08 ; asm ld hl, RocketHideout1TrainerHeader0 call TalkToTrainer jp TextScriptEnd RocketHideout1Text2: ; 44c69 (11:4c69) db $08 ; asm ld hl, RocketHideout1TrainerHeader2 call TalkToTrainer jp TextScriptEnd RocketHideout1Text3: ; 44c73 (11:4c73) db $08 ; asm ld hl, RocketHideout1TrainerHeader3 call TalkToTrainer jp TextScriptEnd RocketHideout1Text4: ; 44c7d (11:4c7d) db $08 ; asm ld hl, RocketHideout1TrainerHeader4 call TalkToTrainer jp TextScriptEnd RocketHideout1Text5: ; 44c87 (11:4c87) db $08 ; asm ld hl, RocketHideout1TrainerHeader5 call TalkToTrainer jp TextScriptEnd RocketHideout1EndBattleText6: ; 44c91 (11:4c91) TX_FAR _RocketHideout1EndBattleText6 ; 0x81f2a db $8 ld hl, $d815 set 5, [hl] ld hl, UnnamedText_44c9f ret UnnamedText_44c9f: ; 44c9f (11:4c9f) db $6, $50 RocketHideout1BattleText2: ; 44ca1 (11:4ca1) TX_FAR _RocketHideout1BattleText2 db "@" RocketHideout1EndBattleText2: ; 44ca6 (11:4ca6) TX_FAR _RocketHideout1EndBattleText2 db "@" RocketHideout1AfterBattleTxt2: ; 44cab (11:4cab) TX_FAR _RocketHideout1AfterBattleTxt2 db "@" RocketHideout1BattleText3: ; 44cb0 (11:4cb0) TX_FAR _RocketHideout1BattleText3 db "@" RocketHideout1EndBattleText3: ; 44cb5 (11:4cb5) TX_FAR _RocketHideout1EndBattleText3 db "@" RocketHideout1AfterBattleTxt3: ; 44cba (11:4cba) TX_FAR _RocketHideout1AfterBattleTxt3 db "@" RocketHideout1BattleText4: ; 44cbf (11:4cbf) TX_FAR _RocketHideout1BattleText4 db "@" RocketHideout1EndBattleText4: ; 44cc4 (11:4cc4) TX_FAR _RocketHideout1EndBattleText4 db "@" RocketHideout1AfterBattleTxt4: ; 44cc9 (11:4cc9) TX_FAR _RocketHideout1AfterBattleTxt4 db "@" RocketHideout1BattleText5: ; 44cce (11:4cce) TX_FAR _RocketHideout1BattleText5 db "@" RocketHideout1EndBattleText5: ; 44cd3 (11:4cd3) TX_FAR _RocketHideout1EndBattleText5 db "@" RocketHideout1AfterBattleTxt5: ; 44cd8 (11:4cd8) TX_FAR _RocketHideout1AfterBattleTxt5 db "@" RocketHideout1BattleText6: ; 44cdd (11:4cdd) TX_FAR _RocketHideout1BattleText6 db "@" RocketHideout1AfterBattleTxt6: ; 44ce2 (11:4ce2) TX_FAR _RocketHideout1AfterBattleTxt6 db "@" RocketHideout1Object: ; 0x44ce7 (size=98) db $2e ; border tile db $5 ; warps db $2, $17, $0, ROCKET_HIDEOUT_2 db $2, $15, $2, GAME_CORNER db $13, $18, $0, ROCKET_HIDEOUT_ELEVATOR db $18, $15, $3, ROCKET_HIDEOUT_2 db $13, $19, $1, ROCKET_HIDEOUT_ELEVATOR db $0 ; signs db $7 ; people db SPRITE_ROCKET, $8 + 4, $1a + 4, $ff, $d2, $41, ROCKET + $C8, $8 ; trainer db SPRITE_ROCKET, $6 + 4, $c + 4, $ff, $d3, $42, ROCKET + $C8, $9 ; trainer db SPRITE_ROCKET, $11 + 4, $12 + 4, $ff, $d0, $43, ROCKET + $C8, $a ; trainer db SPRITE_ROCKET, $19 + 4, $f + 4, $ff, $d3, $44, ROCKET + $C8, $b ; trainer db SPRITE_ROCKET, $12 + 4, $1c + 4, $ff, $d2, $45, ROCKET + $C8, $c ; trainer db SPRITE_BALL, $e + 4, $b + 4, $ff, $ff, $86, ESCAPE_ROPE ; item db SPRITE_BALL, $11 + 4, $9 + 4, $ff, $ff, $87, HYPER_POTION ; item ; warp-to EVENT_DISP $f, $2, $17 ; ROCKET_HIDEOUT_2 EVENT_DISP $f, $2, $15 ; GAME_CORNER EVENT_DISP $f, $13, $18 ; ROCKET_HIDEOUT_ELEVATOR EVENT_DISP $f, $18, $15 ; ROCKET_HIDEOUT_2 EVENT_DISP $f, $13, $19 ; ROCKET_HIDEOUT_ELEVATOR RocketHideout1Blocks: ; 44d49 (11:4d49) INCBIN "maps/rockethideout1.blk" RocketHideout2_h: ; 0x44e1b to 0x44e27 (12 bytes) (bank=11) (id=200) db $16 ; tileset db ROCKET_HIDEOUT_2_HEIGHT, ROCKET_HIDEOUT_2_WIDTH ; dimensions (y, x) dw RocketHideout2Blocks, RocketHideout2TextPointers, RocketHideout2Script ; blocks, texts, scripts db $00 ; connections dw RocketHideout2Object ; objects RocketHideout2Script: ; 44e27 (11:4e27) call EnableAutoTextBoxDrawing ld hl, RocketHideout2TrainerHeaders ld de, RocketHideout2ScriptPointers ld a, [W_ROCKETHIDEOUT2CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROCKETHIDEOUT2CURSCRIPT], a ret RocketHideout2ScriptPointers: ; 44e3a (11:4e3a) dw RocketHideout2Script0 dw Func_324c dw EndTrainerBattle dw RocketHideout2Script3 RocketHideout2Script0: ; 44e42 (11:4e42) ld a, [W_YCOORD] ld b, a ld a, [W_XCOORD] ld c, a ld hl, RocketHideout2ArrowTilePlayerMovement call Func_3442 cp $ff jp z, CheckFightingMapTrainers ld hl, $d736 set 7, [hl] call Func_3486 ld a, $a7 call PlaySound ld a, $ff ld [wJoypadForbiddenButtonsMask], a ld a, $3 ld [W_CURMAPSCRIPT], a ret ;format: ;db y,x ;dw pointer to movement RocketHideout2ArrowTilePlayerMovement: ; 44e6d (11:4e6d) db $9,$4 dw RocketHideout2ArrowMovement1 db $b,$4 dw RocketHideout2ArrowMovement2 db $f,$4 dw RocketHideout2ArrowMovement3 db $10,$4 dw RocketHideout2ArrowMovement4 db $13,$4 dw RocketHideout2ArrowMovement1 db $16,$4 dw RocketHideout2ArrowMovement5 db $e,$5 dw RocketHideout2ArrowMovement6 db $16,$6 dw RocketHideout2ArrowMovement7 db $18,$6 dw RocketHideout2ArrowMovement8 db $9,$8 dw RocketHideout2ArrowMovement9 db $c,$8 dw RocketHideout2ArrowMovement10 db $f,$8 dw RocketHideout2ArrowMovement8 db $13,$8 dw RocketHideout2ArrowMovement9 db $17,$8 dw RocketHideout2ArrowMovement11 db $e,$9 dw RocketHideout2ArrowMovement12 db $16,$9 dw RocketHideout2ArrowMovement12 db $9,$a dw RocketHideout2ArrowMovement13 db $a,$a dw RocketHideout2ArrowMovement14 db $f,$a dw RocketHideout2ArrowMovement15 db $11,$a dw RocketHideout2ArrowMovement16 db $13,$a dw RocketHideout2ArrowMovement17 db $19,$a dw RocketHideout2ArrowMovement2 db $e,$b dw RocketHideout2ArrowMovement18 db $10,$b dw RocketHideout2ArrowMovement19 db $12,$b dw RocketHideout2ArrowMovement12 db $9,$c dw RocketHideout2ArrowMovement20 db $b,$c dw RocketHideout2ArrowMovement21 db $d,$c dw RocketHideout2ArrowMovement22 db $11,$c dw RocketHideout2ArrowMovement23 db $a,$d dw RocketHideout2ArrowMovement24 db $c,$d dw RocketHideout2ArrowMovement25 db $10,$d dw RocketHideout2ArrowMovement26 db $12,$d dw RocketHideout2ArrowMovement27 db $13,$d dw RocketHideout2ArrowMovement28 db $16,$d dw RocketHideout2ArrowMovement29 db $17,$d dw RocketHideout2ArrowMovement30 db $11,$e dw RocketHideout2ArrowMovement31 db $10,$f dw RocketHideout2ArrowMovement12 db $e,$10 dw RocketHideout2ArrowMovement32 db $10,$10 dw RocketHideout2ArrowMovement33 db $12,$10 dw RocketHideout2ArrowMovement34 db $a,$11 dw RocketHideout2ArrowMovement35 db $b,$11 dw RocketHideout2ArrowMovement36 db $FF ;format: direction, count ;right: $10 ;left: $20 ;up: $40 ;down: $80 ;each list is read starting from the $FF and working backwards RocketHideout2ArrowMovement1: ; 44f1a (11:4f1a) db $20,$02 db $FF RocketHideout2ArrowMovement2: ; 44f1d (11:4f1d) db $10,$04 db $FF RocketHideout2ArrowMovement3: ; 44f20 (11:4f20) db $40,$04 db $10,$04 db $FF RocketHideout2ArrowMovement4: ; 44f25 (11:4f25) db $40,$04 db $10,$04 db $40,$01 db $FF RocketHideout2ArrowMovement5: ; 44f2c (11:4f2c) db $20,$02 db $40,$03 db $FF RocketHideout2ArrowMovement6: ; 44f31 (11:4f31) db $80,$02 db $10,$04 db $FF RocketHideout2ArrowMovement7: ; 44f36 (11:4f36) db $40,$02 db $FF RocketHideout2ArrowMovement8: ; 44f39 (11:4f39) db $40,$04 db $FF RocketHideout2ArrowMovement9: ; 44f3c (11:4f3c) db $20,$06 db $FF RocketHideout2ArrowMovement10: ; 44f3f (11:4f3f) db $40,$01 db $FF RocketHideout2ArrowMovement11: ; 44f42 (11:4f42) db $20,$06 db $40,$04 db $FF RocketHideout2ArrowMovement12: ; 44f47 (11:4f47) db $80,$02 db $FF RocketHideout2ArrowMovement13: ; 44f4a (11:4f4a) db $20,$08 db $FF RocketHideout2ArrowMovement14: ; 44f4d (11:4f4d) db $20,$08 db $40,$01 db $FF RocketHideout2ArrowMovement15: ; 44f52 (11:4f52) db $20,$08 db $40,$06 db $FF RocketHideout2ArrowMovement16: ; 44f57 (11:4f57) db $40,$02 db $10,$04 db $FF RocketHideout2ArrowMovement17: ; 44f5c (11:4f5c) db $40,$02 db $10,$04 db $40,$02 db $FF RocketHideout2ArrowMovement18: ; 44f63 (11:4f63) db $80,$02 db $10,$04 db $80,$02 db $FF RocketHideout2ArrowMovement19: ; 44f6a (11:4f6a) db $80,$02 db $10,$04 db $FF RocketHideout2ArrowMovement20: ; 44f6f (11:4f6f) db $20,$0A db $FF RocketHideout2ArrowMovement21: ; 44f72 (11:4f72) db $20,$0A db $40,$02 db $FF RocketHideout2ArrowMovement22: ; 44f77 (11:4f77) db $20,$0A db $40,$04 db $FF RocketHideout2ArrowMovement23: ; 44f7c (11:4f7c) db $40,$02 db $10,$02 db $FF RocketHideout2ArrowMovement24: ; 44f81 (11:4f81) db $10,$01 db $80,$02 db $FF RocketHideout2ArrowMovement25: ; 44f86 (11:4f86) db $10,$01 db $FF RocketHideout2ArrowMovement26: ; 44f89 (11:4f89) db $80,$02 db $10,$02 db $FF RocketHideout2ArrowMovement27: ; 44f8e (11:4f8e) db $80,$02 db $20,$02 db $FF RocketHideout2ArrowMovement28: ; 44f93 (11:4f93) db $40,$02 db $10,$04 db $40,$02 db $20,$03 db $FF RocketHideout2ArrowMovement29: ; 44f9c (11:4f9c) db $80,$02 db $20,$04 db $FF RocketHideout2ArrowMovement30: ; 44fa1 (11:4fa1) db $20,$06 db $40,$04 db $20,$05 db $FF RocketHideout2ArrowMovement31: ; 44fa8 (11:4fa8) db $40,$02 db $FF RocketHideout2ArrowMovement32: ; 44fab (11:4fab) db $40,$01 db $FF RocketHideout2ArrowMovement33: ; 44fae (11:4fae) db $40,$03 db $FF RocketHideout2ArrowMovement34: ; 44fb1 (11:4fb1) db $40,$05 db $FF RocketHideout2ArrowMovement35: ; 44fb4 (11:4fb4) db $10,$01 db $80,$02 db $20,$04 db $FF RocketHideout2ArrowMovement36: ; 44fbb (11:4fbb) db $20,$0A db $40,$02 db $20,$05 db $FF RocketHideout2Script3: ; 44fc2 (11:4fc2) ld a, [$cd38] and a jr nz, Func_44fd7 xor a ld [wJoypadForbiddenButtonsMask], a ld hl, $d736 res 7, [hl] ld a, $0 ld [W_CURMAPSCRIPT], a ret Func_44fd7: ; 44fd7 (11:4fd7) ld a, [$c102] srl a srl a ld hl, SpinnerPlayerFacingDirections ; $5083 ld c, a ld b, $0 add hl, bc ld a, [hl] ld [$c102], a ld a, [W_CURMAPTILESET] ; $d367 cp $16 ld hl, SpinnerArrowTilePointers1 ; $5023 jr z, .asm_44ff6 ld hl, SpinnerArrowTilePointers2 ; $5053 .asm_44ff6 ld a, [$cd38] bit 0, a jr nz, .asm_45001 ld de, $18 add hl, de .asm_45001 ld a, $4 ld bc, $0 .asm_45006 push af push hl push bc add hl, bc ld a, [hli] ld e, a ld a, [hli] ld d, a ld a, [hli] ld c, a ld a, [hli] ld b, a ld a, [hli] ld h, [hl] ld l, a call CopyVideoData pop bc ld a, $6 add c ld c, a pop hl pop af dec a jr nz, .asm_45006 ret SpinnerArrowTilePointers1: ; 45023 (11:5023) dw SpinnerArrowAnimTiles ;address from within tileset graphics db 1 ;number of tiles to copy? db BANK(SpinnerArrowAnimTiles) ;bank of tileset graphics dw $9200 ;where to load in VRAM dw SpinnerArrowAnimTiles + $10 db 1 db BANK(SpinnerArrowAnimTiles) dw $9210 dw SpinnerArrowAnimTiles + $20 db 1 db BANK(SpinnerArrowAnimTiles) dw $9300 dw SpinnerArrowAnimTiles + $30 db 1 db BANK(SpinnerArrowAnimTiles) dw $9310 dw Tset16_GFX + $200 db 1 db BANK(Tset16_GFX) dw $9200 dw Tset16_GFX + $210 db 1 db BANK(Tset16_GFX) dw $9210 dw Tset16_GFX + $300 db 1 db BANK(Tset16_GFX) dw $9300 dw Tset16_GFX + $310 db 1 db BANK(Tset16_GFX) dw $9310 SpinnerArrowTilePointers2: ; 45053 (11:5053) dw SpinnerArrowAnimTiles + $10 db 1 db BANK(SpinnerArrowAnimTiles) dw $93C0 dw SpinnerArrowAnimTiles + $30 db 1 db BANK(SpinnerArrowAnimTiles) dw $93D0 dw SpinnerArrowAnimTiles db 1 db BANK(SpinnerArrowAnimTiles) dw $94C0 dw SpinnerArrowAnimTiles + $20 db 1 db BANK(SpinnerArrowAnimTiles) dw $94D0 dw Tset05_GFX + $3C0 db 1 db BANK(Tset16_GFX) dw $93C0 dw Tset05_GFX + $3D0 db 1 db BANK(Tset16_GFX) dw $93D0 dw Tset05_GFX + $4C0 db 1 db BANK(Tset16_GFX) dw $94C0 dw Tset05_GFX + $4D0 db 1 db BANK(Tset16_GFX) dw $94D0 SpinnerPlayerFacingDirections: ; 45083 (11:5083) ; This isn't the order of the facing directions. Rather, it's a list of ; the facing directions that come next. For example, when the player is ; facing down (00), the next facing direction is left (08). db $08 ; down -> left db $0C ; up -> right db $04 ; left -> up db $00 ; right -> down ; these tiles are the animation for the tiles that push the player in dungeons like Rocket HQ SpinnerArrowAnimTiles: ; 45087 (11:5087) INCBIN "gfx/spinner_arrow.2bpp" RocketHideout2TextPointers: ; 450c7 (11:50c7) dw RocketHideout2Text1 dw Predef5CText dw Predef5CText dw Predef5CText dw Predef5CText RocketHideout2TrainerHeaders: ; 450d1 (11:50d1) RocketHideout2TrainerHeader0: ; 450d1 (11:50d1) db $1 ; flag's bit db ($4 << 4) ; trainer's view range dw $d817 ; flag's byte dw RocketHideout2BattleText2 ; 0x50e8 TextBeforeBattle dw RocketHideout2AfterBattleTxt2 ; 0x50f2 TextAfterBattle dw RocketHideout2EndBattleText2 ; 0x50ed TextEndBattle dw RocketHideout2EndBattleText2 ; 0x50ed TextEndBattle db $ff RocketHideout2Text1: ; 450de (11:50de) db $08 ; asm ld hl, RocketHideout2TrainerHeader0 call TalkToTrainer jp TextScriptEnd RocketHideout2BattleText2: ; 450e8 (11:50e8) TX_FAR _RocketHideout2BattleText2 db "@" RocketHideout2EndBattleText2: ; 450ed (11:50ed) TX_FAR _RocketHideout2EndBattleText2 db "@" RocketHideout2AfterBattleTxt2: ; 450f2 (11:50f2) TX_FAR _RocketHideout2AfterBattleTxt2 db "@" RocketHideout2Object: ; 0x450f7 (size=80) db $2e ; border tile db $5 ; warps db $8, $1b, $0, ROCKET_HIDEOUT_1 db $8, $15, $0, ROCKET_HIDEOUT_3 db $13, $18, $0, ROCKET_HIDEOUT_ELEVATOR db $16, $15, $3, ROCKET_HIDEOUT_1 db $13, $19, $1, ROCKET_HIDEOUT_ELEVATOR db $0 ; signs db $5 ; people db SPRITE_ROCKET, $c + 4, $14 + 4, $ff, $d0, $41, ROCKET + $C8, $d ; trainer db SPRITE_BALL, $b + 4, $1 + 4, $ff, $ff, $82, MOON_STONE ; item db SPRITE_BALL, $8 + 4, $10 + 4, $ff, $ff, $83, NUGGET ; item db SPRITE_BALL, $c + 4, $6 + 4, $ff, $ff, $84, TM_07 ; item db SPRITE_BALL, $15 + 4, $3 + 4, $ff, $ff, $85, SUPER_POTION ; item ; warp-to EVENT_DISP $f, $8, $1b ; ROCKET_HIDEOUT_1 EVENT_DISP $f, $8, $15 ; ROCKET_HIDEOUT_3 EVENT_DISP $f, $13, $18 ; ROCKET_HIDEOUT_ELEVATOR EVENT_DISP $f, $16, $15 ; ROCKET_HIDEOUT_1 EVENT_DISP $f, $13, $19 ; ROCKET_HIDEOUT_ELEVATOR RocketHideout2Blocks: ; 45147 (11:5147) INCBIN "maps/rockethideout2.blk" RocketHideout3_h: ; 0x45219 to 0x45225 (12 bytes) (bank=11) (id=201) db $16 ; tileset db ROCKET_HIDEOUT_3_HEIGHT, ROCKET_HIDEOUT_3_WIDTH ; dimensions (y, x) dw RocketHideout3Blocks, RocketHideout3TextPointers, RocketHideout3Script ; blocks, texts, scripts db $00 ; connections dw RocketHideout3Object ; objects RocketHideout3Script: ; 45225 (11:5225) call EnableAutoTextBoxDrawing ld hl, RocketHideout3TrainerHeaders ld de, RocketHideout3ScriptPointers ld a, [W_ROCKETHIDEOUT3CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROCKETHIDEOUT3CURSCRIPT], a ret RocketHideout3ScriptPointers: ; 45238 (11:5238) dw RocketHideout3Script0 dw Func_324c dw EndTrainerBattle dw RocketHideout3Script3 RocketHideout3Script0: ; 45240 (11:5240) ld a, [W_YCOORD] ld b, a ld a, [W_XCOORD] ld c, a ld hl, RocketHideout3ArrowTilePlayerMovement call Func_3442 cp $ff jp z, CheckFightingMapTrainers ld hl, $d736 set 7, [hl] call Func_3486 ld a, $a7 call PlaySound ld a, $ff ld [wJoypadForbiddenButtonsMask], a ld a, $3 ld [W_CURMAPSCRIPT], a ret ;format: ;db y,x ;dw pointer to movement RocketHideout3ArrowTilePlayerMovement: ; 4526b (11:526b) db $d,$a dw RocketHideout3ArrowMovement6 db $13,$a dw RocketHideout3ArrowMovement1 db $12,$b dw RocketHideout3ArrowMovement2 db $b,$c dw RocketHideout3ArrowMovement3 db $11,$c dw RocketHideout3ArrowMovement4 db $14,$c dw RocketHideout3ArrowMovement5 db $10,$d dw RocketHideout3ArrowMovement6 db $b,$e dw RocketHideout3ArrowMovement7 db $f,$e dw RocketHideout3ArrowMovement6 db $11,$e dw RocketHideout3ArrowMovement8 db $13,$e dw RocketHideout3ArrowMovement9 db $10,$f dw RocketHideout3ArrowMovement7 db $12,$f dw RocketHideout3ArrowMovement10 db $d,$10 dw RocketHideout3ArrowMovement11 db $c,$11 dw RocketHideout3ArrowMovement10 db $10,$12 dw RocketHideout3ArrowMovement12 db $FF ;format: direction, count ;right: $10 ;left: $20 ;up: $40 ;down: $80 ;each list is read starting from the $FF and working backwards RocketHideout3ArrowMovement1: ; 452ac (11:52ac) db $10,$04 db $40,$04 db $10,$04 db $FF RocketHideout3ArrowMovement2: ; 452b3 (11:52b3) db $80,$04 db $10,$04 db $FF RocketHideout3ArrowMovement3: ; 452b8 (11:52b8) db $20,$02 db $FF RocketHideout3ArrowMovement4: ; 452bb (11:52bb) db $10,$04 db $40,$02 db $10,$02 db $FF RocketHideout3ArrowMovement5: ; 452c2 (11:52c2) db $10,$04 db $40,$02 db $10,$02 db $40,$03 db $FF RocketHideout3ArrowMovement6: ; 452cb (11:52cb) db $10,$04 db $FF RocketHideout3ArrowMovement7: ; 452ce (11:52ce) db $10,$02 db $FF RocketHideout3ArrowMovement8: ; 452d1 (11:52d1) db $10,$04 db $40,$02 db $FF RocketHideout3ArrowMovement9: ; 452d6 (11:52d6) db $10,$04 db $40,$04 db $FF RocketHideout3ArrowMovement10: ; 452db (11:52db) db $80,$04 db $FF RocketHideout3ArrowMovement11: ; 452de (11:52de) db $40,$02 db $FF RocketHideout3ArrowMovement12: ; 452e1 (11:52e1) db $40,$01 db $FF RocketHideout3Script3 ; 452e4 (11:452e4) ld a, [$cd38] and a jp nz, Func_44fd7 xor a ld [wJoypadForbiddenButtonsMask], a ld hl, $d736 res 7, [hl] ld a, $0 ld [W_CURMAPSCRIPT], a ret RocketHideout3TextPointers: ; 452fa (11:52fa) dw RocketHideout3Text1 dw RocketHideout3Text2 dw Predef5CText dw Predef5CText RocketHideout3TrainerHeaders: ; 45302 (11:5302) RocketHideout3TrainerHeader0: ; 45302 (11:5302) db $1 ; flag's bit db ($2 << 4) ; trainer's view range dw $d819 ; flag's byte dw RocketHideout3BattleText2 ; 0x5325 TextBeforeBattle dw RocketHideout3AfterBattleTxt2 ; 0x532f TextAfterBattle dw RocketHideout3EndBattleText2 ; 0x532a TextEndBattle dw RocketHideout3EndBattleText2 ; 0x532a TextEndBattle RocketHideout3TrainerHeader2: ; 4530e (11:530e) db $2 ; flag's bit db ($4 << 4) ; trainer's view range dw $d819 ; flag's byte dw RocketHideout3BattleTxt ; 0x533e TextBeforeBattle dw RocketHideout3AfterBattleText3 ; 0x5348 TextAfterBattle dw RocketHideout3EndBattleText3 ; 0x5343 TextEndBattle dw RocketHideout3EndBattleText3 ; 0x5343 TextEndBattle db $ff RocketHideout3Text1: ; 4531b (11:531b) db $08 ; asm ld hl, RocketHideout3TrainerHeader0 call TalkToTrainer jp TextScriptEnd RocketHideout3BattleText2: ; 45325 (11:5325) TX_FAR _RocketHideout3BattleText2 db "@" RocketHideout3EndBattleText2: ; 4532a (11:532a) TX_FAR _RocketHideout3EndBattleText2 db "@" RocketHideout3AfterBattleTxt2: ; 4532f (11:532f) TX_FAR _RocketHideout3AfterBattleTxt2 db "@" RocketHideout3Text2: ; 45334 (11:5334) db $08 ; asm ld hl, RocketHideout3TrainerHeader2 call TalkToTrainer jp TextScriptEnd RocketHideout3BattleTxt: ; 4533e (11:533e) TX_FAR _RocketHideout3BattleTxt db "@" RocketHideout3EndBattleText3: ; 45343 (11:5343) TX_FAR _RocketHideout3EndBattleText3 db "@" RocketHideout3AfterBattleText3: ; 45348 (11:5348) TX_FAR _RocketHide3AfterBattleText3 db "@" RocketHideout3Object: ; 0x4534d (size=50) db $2e ; border tile db $2 ; warps db $6, $19, $1, ROCKET_HIDEOUT_2 db $12, $13, $0, ROCKET_HIDEOUT_4 db $0 ; signs db $4 ; people db SPRITE_ROCKET, $16 + 4, $a + 4, $ff, $d3, $41, ROCKET + $C8, $e ; trainer db SPRITE_ROCKET, $c + 4, $1a + 4, $ff, $d1, $42, ROCKET + $C8, $f ; trainer db SPRITE_BALL, $11 + 4, $1a + 4, $ff, $ff, $83, TM_10 ; item db SPRITE_BALL, $e + 4, $14 + 4, $ff, $ff, $84, RARE_CANDY ; item ; warp-to EVENT_DISP $f, $6, $19 ; ROCKET_HIDEOUT_2 EVENT_DISP $f, $12, $13 ; ROCKET_HIDEOUT_4 RocketHideout3Blocks: ; 4537f (11:537f) INCBIN "maps/rockethideout3.blk" RocketHideout4_h: ; 0x45451 to 0x4545d (12 bytes) (bank=11) (id=202) db $16 ; tileset db ROCKET_HIDEOUT_4_HEIGHT, ROCKET_HIDEOUT_4_WIDTH ; dimensions (y, x) dw RocketHideout4Blocks, RocketHideout4TextPointers, RocketHideout4Script ; blocks, texts, scripts db $00 ; connections dw RocketHideout4Object ; objects RocketHideout4Script: ; 4545d (11:545d) call Func_45473 call EnableAutoTextBoxDrawing ld hl, RocketHideout4TrainerHeader0 ld de, RocketHideout4ScriptPointers ld a, [W_ROCKETHIDEOUT4CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROCKETHIDEOUT4CURSCRIPT], a ret Func_45473: ; 45473 (11:5473) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld a, [$d81b] bit 5, a jr nz, .asm_45496 and $c cp $c jr z, .asm_4548c ld a, $2d jr .asm_45498 .asm_4548c ld a, $ad call PlaySound ld hl, $d81b set 5, [hl] .asm_45496 ld a, $e .asm_45498 ld [$d09f], a ld bc, $050c ld a, $17 jp Predef Func_454a3: ; 454a3 (11:54a3) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_ROCKETHIDEOUT4CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret RocketHideout4ScriptPointers: ; 454ae (11:54ae)c dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle dw RocketHideout4Script3 RocketHideout4Script3: ; 454b6 (11:54b6) ld a, [W_ISINBATTLE] cp $ff jp z, Func_454a3 call UpdateSprites ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld hl, $d81b set 7, [hl] ld a, $a ld [H_SPRITEHEIGHT], a call DisplayTextID call GBFadeIn1 ld a, $83 ld [$cc4d], a ld a, $11 call Predef ld a, $87 ld [$cc4d], a ld a, $15 call Predef call UpdateSprites call GBFadeOut1 xor a ld [wJoypadForbiddenButtonsMask], a ld hl, $d126 set 5, [hl] ld a, $0 ld [W_ROCKETHIDEOUT4CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret RocketHideout4TextPointers: ; 45501 (11:5501) dw RocketHideout4Text1 dw RocketHideout4Text2 dw RocketHideout4Text3 dw RocketHideout4Text4 dw Predef5CText dw Predef5CText dw Predef5CText dw Predef5CText dw Predef5CText dw RocketHideout4Text10 RocketHideout4TrainerHeaders: ; 45515 (11:5515) RocketHideout4TrainerHeader0: ; 45515 (11:5515) db $2 ; flag's bit db ($0 << 4) ; trainer's view range dw $d81b ; flag's byte dw RocketHideout4BattleText2 ; 0x5593 TextBeforeBattle dw RocketHideout4AfterBattleText2 ; 0x559d TextAfterBattle dw RocketHideout4EndBattleText2 ; 0x5598 TextEndBattle dw RocketHideout4EndBattleText2 ; 0x5598 TextEndBattle RocketHideout4TrainerHeader2: ; 45521 (11:5521) db $3 ; flag's bit db ($0 << 4) ; trainer's view range dw $d81b ; flag's byte dw RocketHideout4BattleText3 ; 0x55ac TextBeforeBattle dw RocketHideout4AfterBattleText3 ; 0x55b6 TextAfterBattle dw RocketHideout4EndBattleText3 ; 0x55b1 TextEndBattle dw RocketHideout4EndBattleText3 ; 0x55b1 TextEndBattle RocketHideout4TrainerHeader3: ; 4552d (11:552d) db $4 ; flag's bit db ($1 << 4) ; trainer's view range dw $d81b ; flag's byte dw RocketHideout4BattleText4 ; 0x55c5 TextBeforeBattle dw RocketHideout4AfterBattleText4 ; 0x55cf TextAfterBattle dw RocketHideout4EndBattleText4 ; 0x55ca TextEndBattle dw RocketHideout4EndBattleText4 ; 0x55ca TextEndBattle db $ff RocketHideout4Text1: ; 4553a (11:553a) db $08 ; asm ld a, [$d81b] bit 7, a jp nz, .asm_545571 ld hl, UnnamedText_4557a call PrintText ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, UnnamedText_4557f ld de, UnnamedText_4557f call PreBattleSaveRegisters ldh a, [$8c] ld [$cf13], a call EngageMapTrainer call InitBattleEnemyParameters xor a ldh [$b4], a ld a, $3 ld [W_ROCKETHIDEOUT4CURSCRIPT], a ld [W_CURMAPSCRIPT], a jr .asm_209f0 ; 0x4556f .asm_545571 ld hl, RocketHideout4Text10 call PrintText .asm_209f0 ; 0x45577 jp TextScriptEnd UnnamedText_4557a: ; 4557a (11:557a) TX_FAR _UnnamedText_4557a db "@" UnnamedText_4557f: ; 4557f (11:557f) TX_FAR _UnnamedText_4557f db "@" RocketHideout4Text10: ; 45584 (11:5584) TX_FAR _UnnamedText_45584 db "@" RocketHideout4Text2: ; 45589 (11:5589) db $08 ; asm ld hl, RocketHideout4TrainerHeader0 call TalkToTrainer jp TextScriptEnd RocketHideout4BattleText2: ; 45593 (11:5593) TX_FAR _RocketHideout4BattleText2 db "@" RocketHideout4EndBattleText2: ; 45598 (11:5598) TX_FAR _RocketHideout4EndBattleText2 db "@" RocketHideout4AfterBattleText2: ; 4559d (11:559d) TX_FAR _RocketHide4AfterBattleText2 db "@" RocketHideout4Text3: ; 455a2 (11:55a2) db $08 ; asm ld hl, RocketHideout4TrainerHeader2 call TalkToTrainer jp TextScriptEnd RocketHideout4BattleText3: ; 455ac (11:55ac) TX_FAR _RocketHideout4BattleText3 db "@" RocketHideout4EndBattleText3: ; 455b1 (11:55b1) TX_FAR _RocketHideout4EndBattleText3 db "@" RocketHideout4AfterBattleText3: ; 455b6 (11:55b6) TX_FAR _RocketHide4AfterBattleText3 db "@" RocketHideout4Text4: ; 455bb (11:55bb) db $08 ; asm ld hl, RocketHideout4TrainerHeader3 call TalkToTrainer jp TextScriptEnd RocketHideout4BattleText4: ; 455c5 (11:55c5) TX_FAR _RocketHideout4BattleText4 db "@" RocketHideout4EndBattleText4: ; 455ca (11:55ca) TX_FAR _RocketHideout4EndBattleText4 db "@" RocketHideout4AfterBattleText4: ; 455cf (11:55cf) db $8 ld hl, UnnamedText_455ec ; $55ec call PrintText ld hl, $d81b bit 6, [hl] set 6, [hl] jr nz, .asm_455e9 ; 0x455dd $a ld a, $88 ld [$cc4d], a ld a, $15 call Predef .asm_455e9 jp TextScriptEnd UnnamedText_455ec: ; 455ec (11:55ec) TX_FAR _UnnamedText_455ec db "@" RocketHideout4Object: ; 0x455f1 (size=95) db $2e ; border tile db $3 ; warps db $a, $13, $1, ROCKET_HIDEOUT_3 db $f, $18, $0, ROCKET_HIDEOUT_ELEVATOR db $f, $19, $1, ROCKET_HIDEOUT_ELEVATOR db $0 ; signs db $9 ; people db SPRITE_GIOVANNI, $3 + 4, $19 + 4, $ff, $d0, $41, GIOVANNI + $C8, $1 ; trainer db SPRITE_ROCKET, $c + 4, $17 + 4, $ff, $d0, $42, ROCKET + $C8, $10 ; trainer db SPRITE_ROCKET, $c + 4, $1a + 4, $ff, $d0, $43, ROCKET + $C8, $11 ; trainer db SPRITE_ROCKET, $2 + 4, $b + 4, $ff, $d0, $44, ROCKET + $C8, $12 ; trainer db SPRITE_BALL, $c + 4, $a + 4, $ff, $ff, $85, HP_UP ; item db SPRITE_BALL, $4 + 4, $9 + 4, $ff, $ff, $86, TM_02 ; item db SPRITE_BALL, $14 + 4, $c + 4, $ff, $ff, $87, IRON ; item db SPRITE_BALL, $2 + 4, $19 + 4, $ff, $ff, $88, SILPH_SCOPE ; item db SPRITE_BALL, $2 + 4, $a + 4, $ff, $ff, $89, LIFT_KEY ; item ; warp-to EVENT_DISP $f, $a, $13 ; ROCKET_HIDEOUT_3 EVENT_DISP $f, $f, $18 ; ROCKET_HIDEOUT_ELEVATOR EVENT_DISP $f, $f, $19 ; ROCKET_HIDEOUT_ELEVATOR RocketHideout4Blocks: ; 45650 (11:5650) INCBIN "maps/rockethideout4.blk" RocketHideoutElevator_h: ; 0x45704 to 0x45710 (12 bytes) (bank=11) (id=203) db $12 ; tileset db ROCKET_HIDEOUT_ELEVATOR_HEIGHT, ROCKET_HIDEOUT_ELEVATOR_WIDTH ; dimensions (y, x) dw RocketHideoutElevatorBlocks, RocketHideoutElevatorTextPointers, RocketHideoutElevatorScript ; blocks, texts, scripts db $00 ; connections dw RocketHideoutElevatorObject ; objects RocketHideoutElevatorScript: ; 45710 (11:5710) ld hl, $d126 bit 5, [hl] res 5, [hl] push hl call nz, RocketHideoutElevatorScript_4572c pop hl bit 7, [hl] res 7, [hl] call nz, Func_4575f xor a ld [$cf0c], a inc a ld [$cc3c], a ret RocketHideoutElevatorScript_4572c: ; 4572c (11:572c) ld hl, $d3af ld a, [$d73b] ld b, a ld a, [$d73c] ld c, a call RocketHideoutElevatorScript_4573a RocketHideoutElevatorScript_4573a: ; 4573a (11:573a) inc hl inc hl ld a, b ld [hli], a ld a, c ld [hli], a ret RocketHideoutElevatorScript_45741: ; 45741 (11:5741) ld hl, RocketHideoutElavatorFloors ; $5754 call LoadItemList ld hl, RocketHideoutElevatorWarpMaps ; $5759 ld de, $cc5b ld bc, $0006 call CopyData ret RocketHideoutElavatorFloors: ; 45754 (11:5754) db $03 ; num elements in list db $55, $54, $61 ; "B1F", "B2F", "B4F" db $FF ; terminator RocketHideoutElevatorWarpMaps: ; 45759 (11:5759) ; first byte is warp number ; second byte is map number ; These specify where the player goes after getting out of the elevator. db $04, ROCKET_HIDEOUT_1 db $04, ROCKET_HIDEOUT_2 db $02, ROCKET_HIDEOUT_4 Func_4575f: ; 4575f (11:575f) call Delay3 ld b, BANK(Func_7bf15) ld hl, Func_7bf15 call Bankswitch ret RocketHideoutElevatorTextPointers: ; 4576b (11:576b) dw RocketHideoutElevatorText1 RocketHideoutElevatorText1: ; 4576d (11:576d) db $08 ; asm ld b, LIFT_KEY call IsItemInBag jr z, .asm_8d8f0 ; 0x45773 call RocketHideoutElevatorScript_45741 ld hl, RocketHideoutElevatorWarpMaps ; $5759 ld a, $61 call Predef jr .asm_46c43 ; 0x45780 .asm_8d8f0 ; 0x45782 ld hl, UnnamedText_4578b call PrintText .asm_46c43 ; 0x45788 jp TextScriptEnd UnnamedText_4578b: ; 4578b (11:578b) TX_FAR _UnnamedText_4578b ; 0x82438 db $d, "@" RocketHideoutElevatorObject: ; 0x45791 (size=23) db $f ; border tile db $2 ; warps db $1, $2, $2, ROCKET_HIDEOUT_1 db $1, $3, $4, ROCKET_HIDEOUT_1 db $1 ; signs db $1, $1, $1 ; RocketHideoutElevatorText1 db $0 ; people ; warp-to EVENT_DISP $3, $1, $2 ; ROCKET_HIDEOUT_1 EVENT_DISP $3, $1, $3 ; ROCKET_HIDEOUT_1 RocketHideoutElevatorBlocks: ; 457a8 (11:57a8) INCBIN "maps/rockethideoutelevator.blk" SilphCoElevator_h: ; 0x457b4 to 0x457c0 (12 bytes) (bank=11) (id=236) db $12 ; tileset db SILPH_CO_ELEVATOR_HEIGHT, SILPH_CO_ELEVATOR_WIDTH ; dimensions (y, x) dw SilphCoElevatorBlocks, SilphCoElevatorTextPointers, SilphCoElevatorScript ; blocks, texts, scripts db $00 ; connections dw SilphCoElevatorObject ; objects SilphCoElevatorScript: ; 457c0 (11:57c0) ld hl, $d126 bit 5, [hl] res 5, [hl] push hl call nz, SilphCoElevatorScript_457dc pop hl bit 7, [hl] res 7, [hl] call nz, Func_45827 xor a ld [$cf0c], a inc a ld [$cc3c], a ret SilphCoElevatorScript_457dc: ; 457dc (11:57dc) ld hl, $d3af ld a, [$d73b] ld b, a ld a, [$d73c] ld c, a call SilphCoElevatorScript_457ea SilphCoElevatorScript_457ea: ; 457ea (11:57ea) inc hl inc hl ld a, b ld [hli], a ld a, c ld [hli], a ret SilphCoElevatorScript_457f1: ; 457f1 (11:57f1) ld hl, SilphCoElavatorFloors ; $5804 call LoadItemList ld hl, SilphCoElevatorWarpMaps ; $5811 ld de, $cc5b ld bc, $16 call CopyData ret SilphCoElavatorFloors: ; 45804 (11:45804) db $0B ; num elements in list db $56, $57, $58, $59, $5A, $5B, $5C, $5D, $5E, $5F, $60 ; "1F", "2F", "3F", "4F", ... , "11F" db $FF ; terminator SilphCoElevatorWarpMaps: ; 45811 (11:45811) ; first byte is warp number ; second byte is map number ; These specify where the player goes after getting out of the elevator. db $03, SILPH_CO_1F db $02, SILPH_CO_2F db $02, SILPH_CO_3F db $02, SILPH_CO_4F db $02, SILPH_CO_5F db $02, SILPH_CO_6F db $02, SILPH_CO_7F db $02, SILPH_CO_8F db $02, SILPH_CO_9F db $02, SILPH_CO_10F db $01, SILPH_CO_11F Func_45827: ; 45827 (11:5827) call Delay3 ld b, BANK(Func_7bf15) ld hl, Func_7bf15 call Bankswitch ret SilphCoElevatorTextPointers: ; 45833 (11:5833) dw SilphCoElevatorText1 SilphCoElevatorText1: ; 45835 (11:5835) db $08 ; asm call SilphCoElevatorScript_457f1 ld hl, SilphCoElevatorWarpMaps ; $5811 ld a, $61 call Predef jp TextScriptEnd SilphCoElevatorObject: ; 0x45844 (size=23) db $f ; border tile db $2 ; warps db $3, $1, $0, $ed db $3, $2, $0, $ed db $1 ; signs db $0, $3, $1 ; SilphCoElevatorText1 db $0 ; people ; warp-to EVENT_DISP $2, $3, $1 EVENT_DISP $2, $3, $2 SilphCoElevatorBlocks: ; 4585b (11:585b) INCBIN "maps/silphcoelevator.blk" SafariZoneEast_h: ; 0x4585f to 0x4586b (12 bytes) (bank=11) (id=217) db $03 ; tileset db SAFARI_ZONE_EAST_HEIGHT, SAFARI_ZONE_EAST_WIDTH ; dimensions (y, x) dw SafariZoneEastBlocks, SafariZoneEastTextPointers, SafariZoneEastScript ; blocks, texts, scripts db $00 ; connections dw SafariZoneEastObject ; objects SafariZoneEastScript: ; 4586b (11:586b) jp EnableAutoTextBoxDrawing SafariZoneEastTextPointers: ; 4586e (11:586e) dw Predef5CText dw Predef5CText dw Predef5CText dw Predef5CText dw SafariZoneEastText5 dw SafariZoneEastText6 dw SafariZoneEastText7 SafariZoneEastText5: ; 4587c (11:587c) TX_FAR _SafariZoneEastText5 db "@" SafariZoneEastText6: ; 45881 (11:5881) TX_FAR _SafariZoneEastText6 db "@" SafariZoneEastText7: ; 45886 (11:5886) TX_FAR _SafariZoneEastText7 db "@" SafariZoneEastObject: ; 0x4588b (size=81) db $0 ; border tile db $5 ; warps db $4, $0, $6, SAFARI_ZONE_NORTH db $5, $0, $7, SAFARI_ZONE_NORTH db $16, $0, $6, SAFARI_ZONE_CENTER db $17, $0, $6, SAFARI_ZONE_CENTER db $9, $19, $0, SAFARI_ZONE_REST_HOUSE_3 db $3 ; signs db $a, $1a, $5 ; SafariZoneEastText5 db $4, $6, $6 ; SafariZoneEastText6 db $17, $5, $7 ; SafariZoneEastText7 db $4 ; people db SPRITE_BALL, $a + 4, $15 + 4, $ff, $ff, $81, FULL_RESTORE ; item db SPRITE_BALL, $7 + 4, $3 + 4, $ff, $ff, $82, MAX_POTION ; item db SPRITE_BALL, $d + 4, $14 + 4, $ff, $ff, $83, CARBOS ; item db SPRITE_BALL, $c + 4, $f + 4, $ff, $ff, $84, TM_37 ; item ; warp-to EVENT_DISP $f, $4, $0 ; SAFARI_ZONE_NORTH EVENT_DISP $f, $5, $0 ; SAFARI_ZONE_NORTH EVENT_DISP $f, $16, $0 ; SAFARI_ZONE_CENTER EVENT_DISP $f, $17, $0 ; SAFARI_ZONE_CENTER EVENT_DISP $f, $9, $19 ; SAFARI_ZONE_REST_HOUSE_3 SafariZoneEastBlocks: ; 458dc (11:58dc) INCBIN "maps/safarizoneeast.blk" SafariZoneNorth_h: ; 0x4599f to 0x459ab (12 bytes) (bank=11) (id=218) db $03 ; tileset db SAFARI_ZONE_NORTH_HEIGHT, SAFARI_ZONE_NORTH_WIDTH ; dimensions (y, x) dw SafariZoneNorthBlocks, SafariZoneNorthTextPointers, SafariZoneNorthScript ; blocks, texts, scripts db $00 ; connections dw SafariZoneNorthObject ; objects SafariZoneNorthScript: ; 459ab (11:59ab) jp EnableAutoTextBoxDrawing SafariZoneNorthTextPointers: ; 459ae (11:59ae) dw Predef5CText dw Predef5CText dw SafariZoneNorthText3 dw SafariZoneNorthText4 dw SafariZoneNorthText5 dw SafariZoneNorthText6 dw SafariZoneNorthText7 SafariZoneNorthText3: ; 459bc (11:59bc) TX_FAR _SafariZoneNorthText3 db "@" SafariZoneNorthText4: ; 459c1 (11:59c1) TX_FAR _SafariZoneNorthText4 db "@" SafariZoneNorthText5: ; 459c6 (11:59c6) TX_FAR _SafariZoneNorthText5 db "@" SafariZoneNorthText6: ; 459cb (11:59cb) TX_FAR _SafariZoneNorthText6 db "@" SafariZoneNorthText7: ; 459d0 (11:59d0) TX_FAR _SafariZoneNorthText7 db "@" SafariZoneNorthObject: ; 0x459d5 (size=105) db $0 ; border tile db $9 ; warps db $23, $2, $0, SAFARI_ZONE_WEST db $23, $3, $1, SAFARI_ZONE_WEST db $23, $8, $2, SAFARI_ZONE_WEST db $23, $9, $3, SAFARI_ZONE_WEST db $23, $14, $4, SAFARI_ZONE_CENTER db $23, $15, $5, SAFARI_ZONE_CENTER db $1e, $27, $0, SAFARI_ZONE_EAST db $1f, $27, $1, SAFARI_ZONE_EAST db $3, $23, $0, SAFARI_ZONE_REST_HOUSE_4 db $5 ; signs db $4, $24, $3 ; SafariZoneNorthText3 db $19, $4, $4 ; SafariZoneNorthText4 db $1f, $d, $5 ; SafariZoneNorthText5 db $21, $13, $6 ; SafariZoneNorthText6 db $1c, $1a, $7 ; SafariZoneNorthText7 db $2 ; people db SPRITE_BALL, $1 + 4, $19 + 4, $ff, $ff, $81, PROTEIN ; item db SPRITE_BALL, $7 + 4, $13 + 4, $ff, $ff, $82, TM_40 ; item ; warp-to EVENT_DISP $14, $23, $2 ; SAFARI_ZONE_WEST EVENT_DISP $14, $23, $3 ; SAFARI_ZONE_WEST EVENT_DISP $14, $23, $8 ; SAFARI_ZONE_WEST EVENT_DISP $14, $23, $9 ; SAFARI_ZONE_WEST EVENT_DISP $14, $23, $14 ; SAFARI_ZONE_CENTER EVENT_DISP $14, $23, $15 ; SAFARI_ZONE_CENTER EVENT_DISP $14, $1e, $27 ; SAFARI_ZONE_EAST EVENT_DISP $14, $1f, $27 ; SAFARI_ZONE_EAST EVENT_DISP $14, $3, $23 ; SAFARI_ZONE_REST_HOUSE_4 SafariZoneNorthBlocks: ; 45a3e (11:5a3e) INCBIN "maps/safarizonenorth.blk" SafariZoneCenter_h: ; 0x45ba6 to 0x45bb2 (12 bytes) (bank=11) (id=220) db $03 ; tileset db SAFARI_ZONE_CENTER_HEIGHT, SAFARI_ZONE_CENTER_WIDTH ; dimensions (y, x) dw SafariZoneCenterBlocks, SafariZoneCenterTextPointers, SafariZoneCenterScript ; blocks, texts, scripts db $00 ; connections dw SafariZoneCenterObject ; objects SafariZoneCenterScript: ; 45bb2 (11:5bb2) jp EnableAutoTextBoxDrawing SafariZoneCenterTextPointers: ; 45bb5 (11:5bb5) dw Predef5CText dw SafariZoneCenterText2 dw SafariZoneCenterText3 SafariZoneCenterText2: ; 45bbb (11:5bbb) TX_FAR _SafariZoneCenterText2 db "@" SafariZoneCenterText3: ; 45bc0 (11:5bc0) TX_FAR _SafariZoneCenterText3 db "@" SafariZoneCenterObject: ; 0x45bc5 (size=89) db $0 ; border tile db $9 ; warps db $19, $e, $2, SAFARIZONEENTRANCE db $19, $f, $3, SAFARIZONEENTRANCE db $a, $0, $4, SAFARI_ZONE_WEST db $b, $0, $5, SAFARI_ZONE_WEST db $0, $e, $4, SAFARI_ZONE_NORTH db $0, $f, $5, SAFARI_ZONE_NORTH db $a, $1d, $2, SAFARI_ZONE_EAST db $b, $1d, $3, SAFARI_ZONE_EAST db $13, $11, $0, SAFARI_ZONE_REST_HOUSE_1 db $2 ; signs db $14, $12, $2 ; SafariZoneCenterText2 db $16, $e, $3 ; SafariZoneCenterText3 db $1 ; people db SPRITE_BALL, $a + 4, $e + 4, $ff, $ff, $81, NUGGET ; item ; warp-to EVENT_DISP $f, $19, $e ; SAFARIZONEENTRANCE EVENT_DISP $f, $19, $f ; SAFARIZONEENTRANCE EVENT_DISP $f, $a, $0 ; SAFARI_ZONE_WEST EVENT_DISP $f, $b, $0 ; SAFARI_ZONE_WEST EVENT_DISP $f, $0, $e ; SAFARI_ZONE_NORTH EVENT_DISP $f, $0, $f ; SAFARI_ZONE_NORTH EVENT_DISP $f, $a, $1d ; SAFARI_ZONE_EAST EVENT_DISP $f, $b, $1d ; SAFARI_ZONE_EAST EVENT_DISP $f, $13, $11 ; SAFARI_ZONE_REST_HOUSE_1 SafariZoneCenterBlocks: ; 45c1e (11:5c1e) INCBIN "maps/safarizonecenter.blk" SafariZoneRestHouse1_h: ; 0x45ce1 to 0x45ced (12 bytes) (bank=11) (id=221) db $0c ; tileset db SAFARI_ZONE_REST_HOUSE_1_HEIGHT, SAFARI_ZONE_REST_HOUSE_1_WIDTH ; dimensions (y, x) dw SafariZoneRestHouse1Blocks, SafariZoneRestHouse1TextPointers, SafariZoneRestHouse1Script ; blocks, texts, scripts db $00 ; connections dw SafariZoneRestHouse1Object ; objects SafariZoneRestHouse1Script: ; 45ced (11:5ced) jp EnableAutoTextBoxDrawing SafariZoneRestHouse1TextPointers: ; 45cf0 (11:5cf0) dw SafariZoneRestHouse1Text1 dw SafariZoneRestHouse1Text2 SafariZoneRestHouse1Text1: ; 45cf4 (11:5cf4) TX_FAR _SafariZoneRestHouse1Text1 db "@" SafariZoneRestHouse1Text2: ; 45cf9 (11:5cf9) TX_FAR _SafariZoneRestHouse1Text2 db "@" SafariZoneRestHouse1Object: ; 0x45cfe (size=32) db $a ; border tile db $2 ; warps db $7, $2, $8, SAFARI_ZONE_CENTER db $7, $3, $8, SAFARI_ZONE_CENTER db $0 ; signs db $2 ; people db SPRITE_GIRL, $2 + 4, $3 + 4, $ff, $d0, $1 ; person db SPRITE_OAK_AIDE, $4 + 4, $1 + 4, $fe, $1, $2 ; person ; warp-to EVENT_DISP $4, $7, $2 ; SAFARI_ZONE_CENTER EVENT_DISP $4, $7, $3 ; SAFARI_ZONE_CENTER SafariZoneRestHouse2_h: ; 0x45d1e to 0x45d2a (12 bytes) (bank=11) (id=223) db $0c ; tileset db SAFARI_ZONE_REST_HOUSE_2_HEIGHT, SAFARI_ZONE_REST_HOUSE_2_WIDTH ; dimensions (y, x) dw SafariZoneRestHouse2Blocks, SafariZoneRestHouse2TextPointers, SafariZoneRestHouse2Script ; blocks, texts, scripts db $00 ; connections dw SafariZoneRestHouse2Object ; objects SafariZoneRestHouse2Script: ; 45d2a (11:5d2a) call EnableAutoTextBoxDrawing ret SafariZoneRestHouse2TextPointers: ; 45d2e (11:5d2e) dw SafariZoneRestHouse2Text1 dw SafariZoneRestHouse2Text2 dw SafariZoneRestHouse2Text3 SafariZoneRestHouse2Text1: ; 45d34 (11:5d34) TX_FAR _SafariZoneRestHouse2Text1 db "@" SafariZoneRestHouse2Text2: ; 45d39 (11:5d39) TX_FAR _SafariZoneRestHouse2Text2 db "@" SafariZoneRestHouse2Text3: ; 45d3e (11:5d3e) TX_FAR _SafariZoneRestHouse2Text3 db "@" SafariZoneRestHouse2Object: ; 0x45d43 (size=38) db $a ; border tile db $2 ; warps db $7, $2, $7, SAFARI_ZONE_WEST db $7, $3, $7, SAFARI_ZONE_WEST db $0 ; signs db $3 ; people db SPRITE_OAK_AIDE, $4 + 4, $4 + 4, $fe, $0, $1 ; person db SPRITE_BLACK_HAIR_BOY_1, $2 + 4, $0 + 4, $ff, $d3, $2 ; person db SPRITE_ERIKA, $2 + 4, $6 + 4, $ff, $d0, $3 ; person ; warp-to EVENT_DISP $4, $7, $2 ; SAFARI_ZONE_WEST EVENT_DISP $4, $7, $3 ; SAFARI_ZONE_WEST SafariZoneRestHouse3_h: ; 0x45d69 to 0x45d75 (12 bytes) (bank=11) (id=224) db $0c ; tileset db SAFARI_ZONE_REST_HOUSE_3_HEIGHT, SAFARI_ZONE_REST_HOUSE_3_WIDTH ; dimensions (y, x) dw SafariZoneRestHouse3Blocks, SafariZoneRestHouse3TextPointers, SafariZoneRestHouse3Script ; blocks, texts, scripts db $00 ; connections dw SafariZoneRestHouse3Object ; objects SafariZoneRestHouse3Script: ; 45d75 (11:5d75) call EnableAutoTextBoxDrawing ret SafariZoneRestHouse3TextPointers: ; 45d79 (11:5d79) dw SafariZoneRestHouse3Text1 dw SafariZoneRestHouse3Text2 dw SafariZoneRestHouse3Text3 SafariZoneRestHouse3Text1: ; 45d7f (11:5d7f) TX_FAR _SafariZoneRestHouse3Text1 db "@" SafariZoneRestHouse3Text2: ; 45d84 (11:5d84) TX_FAR _SafariZoneRestHouse3Text2 db "@" SafariZoneRestHouse3Text3: ; 45d89 (11:5d89) TX_FAR _SafariZoneRestHouse3Text3 db "@" SafariZoneRestHouse3Object: ; 0x45d8e (size=38) db $a ; border tile db $2 ; warps db $7, $2, $4, SAFARI_ZONE_EAST db $7, $3, $4, SAFARI_ZONE_EAST db $0 ; signs db $3 ; people db SPRITE_OAK_AIDE, $3 + 4, $1 + 4, $fe, $1, $1 ; person db SPRITE_ROCKER, $2 + 4, $4 + 4, $ff, $ff, $2 ; person db SPRITE_LAPRAS_GIVER, $2 + 4, $5 + 4, $ff, $ff, $3 ; person ; warp-to EVENT_DISP $4, $7, $2 ; SAFARI_ZONE_EAST EVENT_DISP $4, $7, $3 ; SAFARI_ZONE_EAST SafariZoneRestHouse4_h: ; 0x45db4 to 0x45dc0 (12 bytes) (bank=11) (id=225) db $0c ; tileset db SAFARI_ZONE_REST_HOUSE_4_HEIGHT, SAFARI_ZONE_REST_HOUSE_4_WIDTH ; dimensions (y, x) dw SafariZoneRestHouse4Blocks, SafariZoneRestHouse4TextPointers, SafariZoneRestHouse4Script ; blocks, texts, scripts db $00 ; connections dw SafariZoneRestHouse4Object ; objects SafariZoneRestHouse4Script: ; 45dc0 (11:5dc0) call EnableAutoTextBoxDrawing ret SafariZoneRestHouse4TextPointers: ; 45dc4 (11:5dc4) dw SafariZoneRestHouse4Text1 dw SafariZoneRestHouse4Text2 dw SafariZoneRestHouse4Text3 SafariZoneRestHouse4Text1: ; 45dca (11:5dca) TX_FAR _SafariZoneRestHouse4Text1 db "@" SafariZoneRestHouse4Text2: ; 45dcf (11:5dcf) TX_FAR _SafariZoneRestHouse4Text2 db "@" SafariZoneRestHouse4Text3: ; 45dd4 (11:5dd4) TX_FAR _SafariZoneRestHouse4Text3 db "@" SafariZoneRestHouse4Object: ; 0x45dd9 (size=38) db $a ; border tile db $2 ; warps db $7, $2, $8, SAFARI_ZONE_NORTH db $7, $3, $8, SAFARI_ZONE_NORTH db $0 ; signs db $3 ; people db SPRITE_OAK_AIDE, $3 + 4, $6 + 4, $fe, $2, $1 ; person db SPRITE_WHITE_PLAYER, $4 + 4, $3 + 4, $ff, $ff, $2 ; person db SPRITE_GENTLEMAN, $5 + 4, $1 + 4, $fe, $1, $3 ; person ; warp-to EVENT_DISP $4, $7, $2 ; SAFARI_ZONE_NORTH EVENT_DISP $4, $7, $3 ; SAFARI_ZONE_NORTH UnknownDungeon2_h: ; 0x45dff to 0x45e0b (12 bytes) (bank=11) (id=226) db $11 ; tileset db UNKNOWN_DUNGEON_2_HEIGHT, UNKNOWN_DUNGEON_2_WIDTH ; dimensions (y, x) dw UnknownDungeon2Blocks, UnknownDungeon2TextPointers, UnknownDungeon2Script ; blocks, texts, scripts db $00 ; connections dw UnknownDungeon2Object ; objects UnknownDungeon2Script: ; 45e0b (11:5e0b) jp EnableAutoTextBoxDrawing UnknownDungeon2TextPointers: ; 45e0e (11:5e0e) dw Predef5CText dw Predef5CText dw Predef5CText UnknownDungeon2Object: ; 0x45e14 (size=73) db $7d ; border tile db $6 ; warps db $1, $1d, $2, UNKNOWN_DUNGEON_1 db $6, $16, $3, UNKNOWN_DUNGEON_1 db $7, $13, $4, UNKNOWN_DUNGEON_1 db $1, $9, $5, UNKNOWN_DUNGEON_1 db $3, $1, $6, UNKNOWN_DUNGEON_1 db $b, $3, $7, UNKNOWN_DUNGEON_1 db $0 ; signs db $3 ; people db SPRITE_BALL, $9 + 4, $1d + 4, $ff, $ff, $81, PP_UP ; item db SPRITE_BALL, $f + 4, $4 + 4, $ff, $ff, $82, ULTRA_BALL ; item db SPRITE_BALL, $6 + 4, $d + 4, $ff, $ff, $83, FULL_RESTORE ; item ; warp-to EVENT_DISP $f, $1, $1d ; UNKNOWN_DUNGEON_1 EVENT_DISP $f, $6, $16 ; UNKNOWN_DUNGEON_1 EVENT_DISP $f, $7, $13 ; UNKNOWN_DUNGEON_1 EVENT_DISP $f, $1, $9 ; UNKNOWN_DUNGEON_1 EVENT_DISP $f, $3, $1 ; UNKNOWN_DUNGEON_1 EVENT_DISP $f, $b, $3 ; UNKNOWN_DUNGEON_1 UnknownDungeon2Blocks: ; 45e5d (11:5e5d) INCBIN "maps/unknowndungeon2.blk" UnknownDungeon3_h: ; 0x45ee4 to 0x45ef0 (12 bytes) (bank=11) (id=227) db $11 ; tileset db UNKNOWN_DUNGEON_3_HEIGHT, UNKNOWN_DUNGEON_3_WIDTH ; dimensions (y, x) dw UnknownDungeon3Blocks, UnknownDungeon3TextPointers, UnknownDungeon3Script ; blocks, texts, scripts db $00 ; connections dw UnknownDungeon3Object ; objects UnknownDungeon3Script: ; 45ef0 (11:5ef0) call EnableAutoTextBoxDrawing ld hl, UnknownDungeon3TrainerHeaders ld de, UnknownDungeon3ScriptPointers ld a, [W_UNKNOWNDUNGEON3CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_UNKNOWNDUNGEON3CURSCRIPT], a ret UnknownDungeon3ScriptPointers: ; 45f03 (11:5f03) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle UnknownDungeon3TextPointers: ; 45f09 (11:5f09) dw UnknownDungeon3Text1 dw Predef5CText dw Predef5CText UnknownDungeon3TrainerHeaders: ; 45f0f (11:5f0f) UnknownDungeon3TrainerHeader0: ; 45f0f (11:5f0f) db $1 ; flag's bit db ($0 << 4) ; trainer's view range dw $d85f ; flag's byte dw UnknownDungeon3MewtwoText ; 0x5f26 TextBeforeBattle dw UnknownDungeon3MewtwoText ; 0x5f26 TextAfterBattle dw UnknownDungeon3MewtwoText ; 0x5f26 TextEndBattle dw UnknownDungeon3MewtwoText ; 0x5f26 TextEndBattle db $ff UnknownDungeon3Text1: ; 45f1c (11:5f1c) db $08 ; asm ld hl, UnknownDungeon3TrainerHeader0 call TalkToTrainer jp TextScriptEnd UnknownDungeon3MewtwoText: ; 45f26 (11:5f26) TX_FAR _UnknownDungeon3MewtwoText ; 0x85c72 db $8 ld a, MEWTWO call PlayCry call WaitForSoundToFinish jp TextScriptEnd UnknownDungeon3Object: ; 0x45f36 (size=34) db $7d ; border tile db $1 ; warps db $6, $3, $8, UNKNOWN_DUNGEON_1 db $0 ; signs db $3 ; people db SPRITE_SLOWBRO, $d + 4, $1b + 4, $ff, $d0, $41, MEWTWO, 70 ; trainer db SPRITE_BALL, $9 + 4, $10 + 4, $ff, $ff, $82, ULTRA_BALL ; item db SPRITE_BALL, $1 + 4, $12 + 4, $ff, $ff, $83, MAX_REVIVE ; item ; warp-to EVENT_DISP $f, $6, $3 ; UNKNOWN_DUNGEON_1 UnknownDungeon3Blocks: ; 45f58 (11:5f58) INCBIN "maps/unknowndungeon3.blk" RockTunnel2_h: ; 0x45fdf to 0x45feb (12 bytes) (bank=11) (id=232) db $11 ; tileset db ROCK_TUNNEL_2_HEIGHT, ROCK_TUNNEL_2_WIDTH ; dimensions (y, x) dw RockTunnel2Blocks, RockTunnel2TextPointers, RockTunnel2Script ; blocks, texts, scripts db $00 ; connections dw RockTunnel2Object ; objects RockTunnel2Script: ; 45feb (11:5feb) call EnableAutoTextBoxDrawing ld hl, RockTunnel2TrainerHeaders ld de, RockTunnel2ScriptPointers ld a, [W_ROCKTUNNEL2CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROCKTUNNEL2CURSCRIPT], a ret RockTunnel2ScriptPointers: ; 45ffe (11:5ffe) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle RockTunnel2TextPointers: ; 46004 (11:6004) dw RockTunnel2Text1 dw RockTunnel2Text2 dw RockTunnel2Text3 dw RockTunnel2Text4 dw RockTunnel2Text5 dw RockTunnel2Text6 dw RockTunnel2Text7 dw RockTunnel2Text8 RockTunnel2TrainerHeaders: ; 46014 (11:6014) RockTunnel2TrainerHeader0: ; 46014 (11:6014) db $1 ; flag's bit db ($4 << 4) ; trainer's view range dw $d87d ; flag's byte dw RockTunnel2BattleText2 ; 0x60c5 TextBeforeBattle dw RockTunnel2AfterBattleText2 ; 0x60cf TextAfterBattle dw RockTunnel2EndBattleText2 ; 0x60ca TextEndBattle dw RockTunnel2EndBattleText2 ; 0x60ca TextEndBattle RockTunnel2TrainerHeader2: ; 46020 (11:6020) db $2 ; flag's bit db ($3 << 4) ; trainer's view range dw $d87d ; flag's byte dw RockTunnel2BattleText3 ; 0x60d4 TextBeforeBattle dw RockTunnel2AfterBattleText3 ; 0x60de TextAfterBattle dw RockTunnel2EndBattleText3 ; 0x60d9 TextEndBattle dw RockTunnel2EndBattleText3 ; 0x60d9 TextEndBattle RockTunnel2TrainerHeader3: ; 4602c (11:602c) db $3 ; flag's bit db ($3 << 4) ; trainer's view range dw $d87d ; flag's byte dw RockTunnel2BattleText4 ; 0x60e3 TextBeforeBattle dw RockTunnel2AfterBattleText4 ; 0x60ed TextAfterBattle dw RockTunnel2EndBattleText4 ; 0x60e8 TextEndBattle dw RockTunnel2EndBattleText4 ; 0x60e8 TextEndBattle RockTunnel2TrainerHeader4: ; 46038 (11:6038) db $4 ; flag's bit db ($4 << 4) ; trainer's view range dw $d87d ; flag's byte dw RockTunnel2BattleText5 ; 0x60f2 TextBeforeBattle dw RockTunnel2AfterBattleText5 ; 0x60fc TextAfterBattle dw RockTunnel2EndBattleText5 ; 0x60f7 TextEndBattle dw RockTunnel2EndBattleText5 ; 0x60f7 TextEndBattle RockTunnel2TrainerHeader5: ; 46044 (11:6044) db $5 ; flag's bit db ($3 << 4) ; trainer's view range dw $d87d ; flag's byte dw RockTunnel2BattleText6 ; 0x6101 TextBeforeBattle dw RockTunnel2AfterBattleText6 ; 0x610b TextAfterBattle dw RockTunnel2EndBattleText6 ; 0x6106 TextEndBattle dw RockTunnel2EndBattleText6 ; 0x6106 TextEndBattle RockTunnel2TrainerHeader6: ; 46050 (11:6050) db $6 ; flag's bit db ($4 << 4) ; trainer's view range dw $d87d ; flag's byte dw RockTunnel2BattleText7 ; 0x6110 TextBeforeBattle dw RockTunnel2AfterBattleText7 ; 0x611a TextAfterBattle dw RockTunnel2EndBattleText7 ; 0x6115 TextEndBattle dw RockTunnel2EndBattleText7 ; 0x6115 TextEndBattle RockTunnel2TrainerHeader7: ; 4605c (11:605c) db $7 ; flag's bit db ($3 << 4) ; trainer's view range dw $d87d ; flag's byte dw RockTunnel2BattleText8 ; 0x611f TextBeforeBattle dw RockTunnel2AfterBattleText8 ; 0x6129 TextAfterBattle dw RockTunnel2EndBattleText8 ; 0x6124 TextEndBattle dw RockTunnel2EndBattleText8 ; 0x6124 TextEndBattle RockTunnel2TrainerHeader8: ; 46068 (11:6068) db $8 ; flag's bit db ($3 << 4) ; trainer's view range dw $d87d ; flag's byte dw RockTunnel2BattleText9 ; 0x612e TextBeforeBattle dw RockTunnel2AfterBattleText9 ; 0x6138 TextAfterBattle dw RockTunnel2EndBattleText9 ; 0x6133 TextEndBattle dw RockTunnel2EndBattleText9 ; 0x6133 TextEndBattle db $ff RockTunnel2Text1: ; 46075 (11:6075) db $08 ; asm ld hl, RockTunnel2TrainerHeader0 call TalkToTrainer jp TextScriptEnd RockTunnel2Text2: ; 4607f (11:607f) db $08 ; asm ld hl, RockTunnel2TrainerHeader2 call TalkToTrainer jp TextScriptEnd RockTunnel2Text3: ; 46089 (11:6089) db $08 ; asm ld hl, RockTunnel2TrainerHeader3 call TalkToTrainer jp TextScriptEnd RockTunnel2Text4: ; 46093 (11:6093) db $08 ; asm ld hl, RockTunnel2TrainerHeader4 call TalkToTrainer jp TextScriptEnd RockTunnel2Text5: ; 4609d (11:609d) db $08 ; asm ld hl, RockTunnel2TrainerHeader5 call TalkToTrainer jp TextScriptEnd RockTunnel2Text6: ; 460a7 (11:60a7) db $08 ; asm ld hl, RockTunnel2TrainerHeader6 call TalkToTrainer jp TextScriptEnd RockTunnel2Text7: ; 460b1 (11:60b1) db $08 ; asm ld hl, RockTunnel2TrainerHeader7 call TalkToTrainer jp TextScriptEnd RockTunnel2Text8: ; 460bb (11:60bb) db $08 ; asm ld hl, RockTunnel2TrainerHeader8 call TalkToTrainer jp TextScriptEnd RockTunnel2BattleText2: ; 460c5 (11:60c5) TX_FAR _RockTunnel2BattleText2 db "@" RockTunnel2EndBattleText2: ; 460ca (11:60ca) TX_FAR _RockTunnel2EndBattleText2 db "@" RockTunnel2AfterBattleText2: ; 460cf (11:60cf) TX_FAR _RockTunnel2AfterBattleText2 db "@" RockTunnel2BattleText3: ; 460d4 (11:60d4) TX_FAR _RockTunnel2BattleText3 db "@" RockTunnel2EndBattleText3: ; 460d9 (11:60d9) TX_FAR _RockTunnel2EndBattleText3 db "@" RockTunnel2AfterBattleText3: ; 460de (11:60de) TX_FAR _RockTunnel2AfterBattleText3 db "@" RockTunnel2BattleText4: ; 460e3 (11:60e3) TX_FAR _RockTunnel2BattleText4 db "@" RockTunnel2EndBattleText4: ; 460e8 (11:60e8) TX_FAR _RockTunnel2EndBattleText4 db "@" RockTunnel2AfterBattleText4: ; 460ed (11:60ed) TX_FAR _RockTunnel2AfterBattleText4 db "@" RockTunnel2BattleText5: ; 460f2 (11:60f2) TX_FAR _RockTunnel2BattleText5 db "@" RockTunnel2EndBattleText5: ; 460f7 (11:60f7) TX_FAR _RockTunnel2EndBattleText5 db "@" RockTunnel2AfterBattleText5: ; 460fc (11:60fc) TX_FAR _RockTunnel2AfterBattleText5 db "@" RockTunnel2BattleText6: ; 46101 (11:6101) TX_FAR _RockTunnel2BattleText6 db "@" RockTunnel2EndBattleText6: ; 46106 (11:6106) TX_FAR _RockTunnel2EndBattleText6 db "@" RockTunnel2AfterBattleText6: ; 4610b (11:610b) TX_FAR _RockTunnel2AfterBattleText6 db "@" RockTunnel2BattleText7: ; 46110 (11:6110) TX_FAR _RockTunnel2BattleText7 db "@" RockTunnel2EndBattleText7: ; 46115 (11:6115) TX_FAR _RockTunnel2EndBattleText7 db "@" RockTunnel2AfterBattleText7: ; 4611a (11:611a) TX_FAR _RockTunnel2AfterBattleText7 db "@" RockTunnel2BattleText8: ; 4611f (11:611f) TX_FAR _RockTunnel2BattleText8 db "@" RockTunnel2EndBattleText8: ; 46124 (11:6124) TX_FAR _RockTunnel2EndBattleText8 db "@" RockTunnel2AfterBattleText8: ; 46129 (11:6129) TX_FAR _RockTunnel2AfterBattleText8 db "@" RockTunnel2BattleText9: ; 4612e (11:612e) TX_FAR _RockTunnel2BattleText9 db "@" RockTunnel2EndBattleText9: ; 46133 (11:6133) TX_FAR _RockTunnel2EndBattleText9 db "@" RockTunnel2AfterBattleText9: ; 46138 (11:6138) TX_FAR _RockTunnel2AfterBattleText9 db "@" RockTunnel2Object: ; 0x4613d (size=100) db $3 ; border tile db $4 ; warps db $19, $21, $4, ROCK_TUNNEL_1 db $3, $1b, $5, ROCK_TUNNEL_1 db $b, $17, $6, ROCK_TUNNEL_1 db $3, $3, $7, ROCK_TUNNEL_1 db $0 ; signs db $8 ; people db SPRITE_LASS, $d + 4, $b + 4, $ff, $d0, $41, JR__TRAINER_F + $C8, $9 ; trainer db SPRITE_HIKER, $a + 4, $6 + 4, $ff, $d0, $42, HIKER + $C8, $9 ; trainer db SPRITE_BLACK_HAIR_BOY_2, $5 + 4, $3 + 4, $ff, $d0, $43, POKEMANIAC + $C8, $3 ; trainer db SPRITE_BLACK_HAIR_BOY_2, $15 + 4, $14 + 4, $ff, $d3, $44, POKEMANIAC + $C8, $4 ; trainer db SPRITE_HIKER, $a + 4, $1e + 4, $ff, $d0, $45, HIKER + $C8, $a ; trainer db SPRITE_LASS, $1c + 4, $e + 4, $ff, $d3, $46, JR__TRAINER_F + $C8, $a ; trainer db SPRITE_HIKER, $5 + 4, $21 + 4, $ff, $d3, $47, HIKER + $C8, $b ; trainer db SPRITE_BLACK_HAIR_BOY_2, $1e + 4, $1a + 4, $ff, $d0, $48, POKEMANIAC + $C8, $5 ; trainer ; warp-to EVENT_DISP $14, $19, $21 ; ROCK_TUNNEL_1 EVENT_DISP $14, $3, $1b ; ROCK_TUNNEL_1 EVENT_DISP $14, $b, $17 ; ROCK_TUNNEL_1 EVENT_DISP $14, $3, $3 ; ROCK_TUNNEL_1 RockTunnel2Blocks: ; 461a1 (11:61a1) INCBIN "maps/rocktunnel2.blk" SeafoamIslands2_h: ; 0x46309 to 0x46315 (12 bytes) (bank=11) (id=159) db $11 ; tileset db SEAFOAM_ISLANDS_2_HEIGHT, SEAFOAM_ISLANDS_2_WIDTH ; dimensions (y, x) dw SeafoamIslands2Blocks, SeafoamIslands2TextPointers, SeafoamIslands2Script ; blocks, texts, scripts db $00 ; connections dw SeafoamIslands2Object ; objects SeafoamIslands2Script: ; 46315 (11:6315) call EnableAutoTextBoxDrawing ld hl, wFlags_0xcd60 bit 7, [hl] res 7, [hl] jr z, .asm_46362 ; 0x4631f $41 ld hl, Seafoam2HolesCoords call CheckBoulderCoords ret nc ld hl, $d87f ld a, [$cd3d] cp $1 jr nz, .asm_46340 ; 0x46330 $e set 0, [hl] ld a, $d9 ld [$d079], a ld a, $db ld [$d07a], a jr .asm_4634c ; 0x4633e $c .asm_46340 set 1, [hl] ld a, $da ld [$d079], a ld a, $dc ld [$d07a], a .asm_4634c ld a, [$d079] ld [$cc4d], a ld a, $11 call Predef ld a, [$d07a] ld [$cc4d], a ld a, $15 jp Predef .asm_46362 ld a, $a0 ld [$d71d], a ld hl, Seafoam2HolesCoords jp Func_46981 Seafoam2HolesCoords: ; 4636d (11:636d) db $06,$12 db $06,$17 db $ff SeafoamIslands2TextPointers: ; 46372 (11:6372) dw BoulderText dw BoulderText SeafoamIslands2Object: ; 0x46376 (size=72) db $7d ; border tile db $7 ; warps db $2, $4, $0, SEAFOAM_ISLANDS_3 db $5, $7, $4, SEAFOAM_ISLANDS_1 db $7, $d, $2, SEAFOAM_ISLANDS_3 db $f, $13, $3, SEAFOAM_ISLANDS_3 db $f, $17, $6, SEAFOAM_ISLANDS_1 db $b, $19, $5, SEAFOAM_ISLANDS_3 db $3, $19, $5, SEAFOAM_ISLANDS_1 db $0 ; signs db $2 ; people db SPRITE_BOULDER, $6 + 4, $11 + 4, $ff, $10, $1 ; person db SPRITE_BOULDER, $6 + 4, $16 + 4, $ff, $10, $2 ; person ; warp-to EVENT_DISP $f, $2, $4 ; SEAFOAM_ISLANDS_3 EVENT_DISP $f, $5, $7 ; SEAFOAM_ISLANDS_1 EVENT_DISP $f, $7, $d ; SEAFOAM_ISLANDS_3 EVENT_DISP $f, $f, $13 ; SEAFOAM_ISLANDS_3 EVENT_DISP $f, $f, $17 ; SEAFOAM_ISLANDS_1 EVENT_DISP $f, $b, $19 ; SEAFOAM_ISLANDS_3 EVENT_DISP $f, $3, $19 ; SEAFOAM_ISLANDS_1 SeafoamIslands2Blocks: ; 463be (11:63be) INCBIN "maps/seafoamislands2.blk" SeafoamIslands3_h: ; 0x46445 to 0x46451 (12 bytes) (bank=11) (id=160) db $11 ; tileset db SEAFOAM_ISLANDS_3_HEIGHT, SEAFOAM_ISLANDS_3_WIDTH ; dimensions (y, x) dw SeafoamIslands3Blocks, SeafoamIslands3TextPointers, SeafoamIslands3Script ; blocks, texts, scripts db $00 ; connections dw SeafoamIslands3Object ; objects SeafoamIslands3Script: ; 46451 (11:6451) call EnableAutoTextBoxDrawing ld hl, wFlags_0xcd60 bit 7, [hl] res 7, [hl] jr z, .asm_4649e ; 0x4645b $41 ld hl, Seafoam3HolesCoords call CheckBoulderCoords ret nc ld hl, $d880 ld a, [$cd3d] cp $1 jr nz, .asm_4647c ; 0x4646c $e set 0, [hl] ld a, $db ld [$d079], a ld a, $df ld [$d07a], a jr .asm_46488 ; 0x4647a $c .asm_4647c set 1, [hl] ld a, $dc ld [$d079], a ld a, $e0 ld [$d07a], a .asm_46488 ld a, [$d079] ld [$cc4d], a ld a, $11 call Predef ld a, [$d07a] ld [$cc4d], a ld a, $15 jp Predef .asm_4649e ld a, $a1 ld [$d71d], a ld hl, Seafoam3HolesCoords jp Func_46981 Seafoam3HolesCoords: ; 464a9 (11:64a9) db $06,$13 db $06,$16 db $ff SeafoamIslands3TextPointers: ; 464ae (11:64ae) dw BoulderText dw BoulderText SeafoamIslands3Object: ; 0x464b2 (size=72) db $7d ; border tile db $7 ; warps db $3, $5, $0, SEAFOAM_ISLANDS_2 db $d, $5, $0, SEAFOAM_ISLANDS_4 db $7, $d, $2, SEAFOAM_ISLANDS_2 db $f, $13, $3, SEAFOAM_ISLANDS_2 db $3, $19, $3, SEAFOAM_ISLANDS_4 db $b, $19, $5, SEAFOAM_ISLANDS_2 db $e, $19, $4, SEAFOAM_ISLANDS_4 db $0 ; signs db $2 ; people db SPRITE_BOULDER, $6 + 4, $12 + 4, $ff, $10, $1 ; person db SPRITE_BOULDER, $6 + 4, $17 + 4, $ff, $10, $2 ; person ; warp-to EVENT_DISP $f, $3, $5 ; SEAFOAM_ISLANDS_2 EVENT_DISP $f, $d, $5 ; SEAFOAM_ISLANDS_4 EVENT_DISP $f, $7, $d ; SEAFOAM_ISLANDS_2 EVENT_DISP $f, $f, $13 ; SEAFOAM_ISLANDS_2 EVENT_DISP $f, $3, $19 ; SEAFOAM_ISLANDS_4 EVENT_DISP $f, $b, $19 ; SEAFOAM_ISLANDS_2 EVENT_DISP $f, $e, $19 ; SEAFOAM_ISLANDS_4 SeafoamIslands3Blocks: ; 464fa (11:64fa) INCBIN "maps/seafoamislands3.blk" SeafoamIslands4_h: ; 0x46581 to 0x4658d (12 bytes) (bank=11) (id=161) db $11 ; tileset db SEAFOAM_ISLANDS_4_HEIGHT, SEAFOAM_ISLANDS_4_WIDTH ; dimensions (y, x) dw SeafoamIslands4Blocks, SeafoamIslands4TextPointers, SeafoamIslands4Script ; blocks, texts, scripts db $00 ; connections dw SeafoamIslands4Object ; objects SeafoamIslands4Script: ; 4658d (11:658d) call EnableAutoTextBoxDrawing ld hl, wFlags_0xcd60 bit 7, [hl] res 7, [hl] jr z, .asm_465dc ; 0x46597 $43 ld hl, Seafoam4HolesCoords call CheckBoulderCoords ret nc ld hl, $d881 ld a, [$cd3d] cp $1 jr nz, .asm_465b8 ; 0x465a8 $e set 0, [hl] ld a, $dd ld [$d079], a ld a, $e1 ld [$d07a], a jr .asm_465c4 ; 0x465b6 $c .asm_465b8 set 1, [hl] ld a, $de ld [$d079], a ld a, $e2 ld [$d07a], a .asm_465c4 ld a, [$d079] ld [$cc4d], a ld a, $11 call Predef ld a, [$d07a] ld [$cc4d], a ld a, $15 call Predef jr .asm_465ed ; 0x465da $11 .asm_465dc ld a, $a2 ld [$d71d], a ld hl, Seafoam4HolesCoords call Func_46981 ld a, [$d732] bit 4, a ret nz .asm_465ed ld hl, SeafoamIslands4ScriptPointers ld a, [W_SEAFOAMISLANDS4CURSCRIPT] jp CallFunctionInTable Seafoam4HolesCoords: ; 465f6 (11:65f6) db $10,$03 db $10,$06 db $ff SeafoamIslands4ScriptPointers: ; 465fb (11:65fb) dw SeafoamIslands4Script0 dw SeafoamIslands4Script1 dw SeafoamIslands4Script2 dw SeafoamIslands4Script3 SeafoamIslands4Script0: ; 46603 (11:6603) ld a, [$d880] and $3 cp $3 ret z ld a, [$d361] cp $8 ret nz ld a, [$d362] cp $f ret nz ld hl, $ccd3 ld de, RLEMovement46632 call DecodeRLEList dec a ld [$cd38], a call Func_3486 ld hl, W_FLAGS_D733 set 2, [hl] ld a, $1 ld [W_SEAFOAMISLANDS4CURSCRIPT], a ret RLEMovement46632: ; 46632 (11:6632) db $80,6 db $10,5 db $80,3 db $ff SeafoamIslands4Script1: ; 46639 (11:6639) ld a, [$cd38] and a ret nz ld a, $0 ld [W_SEAFOAMISLANDS4CURSCRIPT], a ret SeafoamIslands4Script2: ; 46644 (11:6644) ld a, [$d880] and $3 cp $3 ret z ld a, [W_XCOORD] cp $12 jr z, .asm_4665e cp $13 ld a, $0 jr nz, .asm_4667b ld de, RLEData_4667f jr .asm_46661 .asm_4665e ld de, RLEData_46688 .asm_46661 ld hl, $ccd3 call DecodeRLEList dec a ld [$cd38], a xor a ld [$c206], a ld hl, $d730 set 7, [hl] ld hl, W_FLAGS_D733 set 2, [hl] ld a, $3 .asm_4667b ld [W_SEAFOAMISLANDS4CURSCRIPT], a ret RLEData_4667f: ; 4667f (11:667f) db $80,$06,$10,$02,$80,$04,$20,$01,$FF RLEData_46688: ; 46688 (11:6688) db $80,$06,$10,$02,$80,$04,$FF SeafoamIslands4Script3: ; 4668f (11:668f) ld a, [$cd38] and a ret nz ld a, $0 ld [W_SEAFOAMISLANDS4CURSCRIPT], a ret SeafoamIslands4TextPointers: ; 4669a (11:669a) dw BoulderText dw BoulderText dw BoulderText dw BoulderText dw BoulderText dw BoulderText SeafoamIslands4Object: ; 0x466a6 (size=96) db $7d ; border tile db $7 ; warps db $c, $5, $1, SEAFOAM_ISLANDS_3 db $6, $8, $2, SEAFOAM_ISLANDS_5 db $4, $19, $3, SEAFOAM_ISLANDS_5 db $3, $19, $4, SEAFOAM_ISLANDS_3 db $e, $19, $6, SEAFOAM_ISLANDS_3 db $11, $14, $0, SEAFOAM_ISLANDS_5 db $11, $15, $1, SEAFOAM_ISLANDS_5 db $0 ; signs db $6 ; people db SPRITE_BOULDER, $e + 4, $5 + 4, $ff, $10, $1 ; person db SPRITE_BOULDER, $f + 4, $3 + 4, $ff, $10, $2 ; person db SPRITE_BOULDER, $e + 4, $8 + 4, $ff, $10, $3 ; person db SPRITE_BOULDER, $e + 4, $9 + 4, $ff, $10, $4 ; person db SPRITE_BOULDER, $6 + 4, $12 + 4, $ff, $ff, $5 ; person db SPRITE_BOULDER, $6 + 4, $13 + 4, $ff, $ff, $6 ; person ; warp-to EVENT_DISP $f, $c, $5 ; SEAFOAM_ISLANDS_3 EVENT_DISP $f, $6, $8 ; SEAFOAM_ISLANDS_5 EVENT_DISP $f, $4, $19 ; SEAFOAM_ISLANDS_5 EVENT_DISP $f, $3, $19 ; SEAFOAM_ISLANDS_3 EVENT_DISP $f, $e, $19 ; SEAFOAM_ISLANDS_3 EVENT_DISP $f, $11, $14 ; SEAFOAM_ISLANDS_5 EVENT_DISP $f, $11, $15 ; SEAFOAM_ISLANDS_5 SeafoamIslands4Blocks: ; 46706 (11:6706) INCBIN "maps/seafoamislands4.blk" SeafoamIslands5_h: ; 0x4678d to 0x46799 (12 bytes) (bank=11) (id=162) db $11 ; tileset db SEAFOAM_ISLANDS_5_HEIGHT, SEAFOAM_ISLANDS_5_WIDTH ; dimensions (y, x) dw SeafoamIslands5Blocks, SeafoamIslands5TextPointers, SeafoamIslands5Script ; blocks, texts, scripts db $00 ; connections dw SeafoamIslands5Object ; objects SeafoamIslands5Script: ; 46799 (11:6799) call EnableAutoTextBoxDrawing ld a, [W_SEAFOAMISLANDS5CURSCRIPT] ld hl, SeafoamIslands5ScriptPointers jp CallFunctionInTable SeafoamIslands5Script_467a5: ; 467a5 (11:67a5) xor a ld [W_SEAFOAMISLANDS5CURSCRIPT], a ld [wJoypadForbiddenButtonsMask], a ret SeafoamIslands5ScriptPointers: ; 467ad (11:67ad) dw SeafoamIslands5Script0 dw SeafoamIslands5Script1 dw SeafoamIslands5Script2 dw SeafoamIslands5Script3 dw SeafoamIslands5Script4 SeafoamIslands5Script4: ; 467b7 (11:67b7) ld a, [W_ISINBATTLE] cp $ff jr z, SeafoamIslands5Script_467a5 call EndTrainerBattle ld a, $0 ld [W_SEAFOAMISLANDS5CURSCRIPT], a ret SeafoamIslands5Script0: ; 467c7 (11:67c7) ld a, [$d880] and $3 cp $3 ret z ld hl, CoordsData_467fe call ArePlayerCoordsInArray ret nc ld a, [$cd3d] cp $3 jr nc, .asm_467e6 ld a, $40 ld [$ccd4], a ld a, $2 jr .asm_467e8 .asm_467e6 ld a, $1 .asm_467e8 ld [$cd38], a ld a, $40 ld [$ccd3], a call Func_3486 ld hl, W_FLAGS_D733 res 2, [hl] ld a, $1 ld [W_SEAFOAMISLANDS5CURSCRIPT], a ret CoordsData_467fe: ; 467fe (11:67fe) db $11,$14 db $11,$15 db $10,$14 db $10,$15 db $FF SeafoamIslands5Script1: ; 46807 (11:6807) ld a, [$cd38] and a ret nz xor a ld [wJoypadForbiddenButtonsMask], a ld a, $0 ld [W_SEAFOAMISLANDS5CURSCRIPT], a ret SeafoamIslands5Script2: ; 46816 (11:6816) ld a, [$d881] and $3 cp $3 ld a, $0 jr z, .asm_46849 ld hl, CoordsData_4684d call ArePlayerCoordsInArray ld a, $0 jr nc, .asm_46849 ld a, [$cd3d] cp $1 jr nz, .asm_46837 ld de, RLEMovementData_46859 jr .asm_4683a .asm_46837 ld de, RLEMovementData_46852 .asm_4683a ld hl, $ccd3 call DecodeRLEList dec a ld [$cd38], a call Func_3486 ld a, $3 .asm_46849 ld [W_SEAFOAMISLANDS5CURSCRIPT], a ret CoordsData_4684d: ; 4684d (11:684d) db $0E,$04 db $0E,$05 db $FF RLEMovementData_46852: ; 46852 (11:6852) db $40,$03 db $10,$02 db $40,$01 db $FF RLEMovementData_46859: ; 46859 (11:6859) db $40,$03 db $10,$03 db $40,$01 db $FF SeafoamIslands5Script3: ; 46860 (11:6860) ld a, [$cd38] ld b, a cp $1 call z, SeaFoamIslands5Script_46872 ld a, b and a ret nz ld a, $0 ld [W_SEAFOAMISLANDS5CURSCRIPT], a ret SeaFoamIslands5Script_46872: ; 46872 (11:6872) xor a ld [$d700], a ld [$d11a], a jp ForceBikeOrSurf SeafoamIslands5TextPointers: ; 4687c (11:687c) dw BoulderText dw BoulderText dw SeafoamIslands5Text3 dw SeafoamIslands5Text4 dw SeafoamIslands5Text5 SeafoamIslands5TrainerHeaders: ; 46886 (11:6886) SeafoamIslands5TrainerHeader0: ; 46886 (11:6886) db $2 ; flag's bit db ($0 << 4) ; trainer's view range dw $d882 ; flag's byte dw SeafoamIslands5BattleText2 ; 0x68a2 TextBeforeBattle dw SeafoamIslands5BattleText2 ; 0x68a2 TextAfterBattle dw SeafoamIslands5BattleText2 ; 0x68a2 TextEndBattle dw SeafoamIslands5BattleText2 ; 0x68a2 TextEndBattle db $ff SeafoamIslands5Text3: ; 46893 (11:6893) db $08 ; asm ld hl, SeafoamIslands5TrainerHeader0 call TalkToTrainer ld a, $4 ld [W_SEAFOAMISLANDS5CURSCRIPT], a jp TextScriptEnd SeafoamIslands5BattleText2: ; 468a2 (11:68a2) TX_FAR _SeafoamIslands5BattleText2 ; 0x88075 db $8 ld a, ARTICUNO call PlayCry call WaitForSoundToFinish jp TextScriptEnd SeafoamIslands5Text4: ; 468b2 (11:68b2) TX_FAR _SeafoamIslands5Text4 db "@" SeafoamIslands5Text5: ; 468b7 (11:68b7) TX_FAR _SeafoamIslands5Text5 db "@" SeafoamIslands5Object: ; 0x468bc (size=62) db $7d ; border tile db $4 ; warps db $11, $14, $5, SEAFOAM_ISLANDS_4 db $11, $15, $6, SEAFOAM_ISLANDS_4 db $7, $b, $1, SEAFOAM_ISLANDS_4 db $4, $19, $2, SEAFOAM_ISLANDS_4 db $2 ; signs db $f, $9, $4 ; SeafoamIslands5Text4 db $1, $17, $5 ; SeafoamIslands5Text5 db $3 ; people db SPRITE_BOULDER, $f + 4, $4 + 4, $ff, $ff, $1 ; person db SPRITE_BOULDER, $f + 4, $5 + 4, $ff, $ff, $2 ; person db SPRITE_BIRD, $1 + 4, $6 + 4, $ff, $d0, $43, ARTICUNO, 50 ; trainer ; warp-to EVENT_DISP $f, $11, $14 ; SEAFOAM_ISLANDS_4 EVENT_DISP $f, $11, $15 ; SEAFOAM_ISLANDS_4 EVENT_DISP $f, $7, $b ; SEAFOAM_ISLANDS_4 EVENT_DISP $f, $4, $19 ; SEAFOAM_ISLANDS_4 SeafoamIslands5Blocks: ; 468fa (11:68fa) INCBIN "maps/seafoamislands5.blk" Func_46981: ; 46981 (11:6981) xor a ld [$d71e], a ld a, [$d72d] bit 4, a ret nz call ArePlayerCoordsInArray ret nc ld a, [wWhichTrade] ; $cd3d ld [$d71e], a ld hl, $d72d set 4, [hl] ld hl, $d732 set 4, [hl] ret Func_469a0: ; 469a0 (11:69a0) ld hl, $ffeb xor a ld [hli], a ld [hli], a ld [hli], a ld [hl], a ld de, $0 ld hl, HiddenObjectMaps ; $6a40 .asm_469ae ld a, [hli] ld b, a cp $ff jr z, .asm_469fc ld a, [W_CURMAP] ; $d35e cp b jr z, .asm_469be inc de inc de jr .asm_469ae .asm_469be ld hl, HiddenObjectPointers ; $6a96 add hl, de ld a, [hli] ld h, [hl] ld l, a push hl ld hl, wWhichTrade ; $cd3d xor a ld [hli], a ld [hli], a ld [hl], a pop hl .asm_469ce ld a, [hli] cp $ff jr z, .asm_469fc ld [$cd40], a ld b, a ld a, [hli] ld [$cd41], a ld c, a call Func_46a01 ld a, [$FF00+$ea] and a jr z, .asm_469f0 inc hl inc hl inc hl inc hl push hl ld hl, $cd3f inc [hl] pop hl jr .asm_469ce .asm_469f0 ld a, [hli] ld [wWhichTrade], a ; $cd3d ld a, [hli] ld [$cd3e], a ld a, [hli] ld h, [hl] ld l, a ret .asm_469fc ld a, $ff ld [$FF00+$ee], a ret Func_46a01: ; 46a01 (11:6a01) ld a, [$c109] cp $4 jr z, .asm_46a16 cp $8 jr z, .asm_46a25 cp $c jr z, .asm_46a2b ld a, [W_YCOORD] ; $d361 inc a jr .asm_46a1a .asm_46a16 ld a, [W_YCOORD] ; $d361 dec a .asm_46a1a cp b jr nz, .asm_46a3b ld a, [W_XCOORD] ; $d362 cp c jr nz, .asm_46a3b jr .asm_46a38 .asm_46a25 ld a, [W_XCOORD] ; $d362 dec a jr .asm_46a2f .asm_46a2b ld a, [W_XCOORD] ; $d362 inc a .asm_46a2f cp c jr nz, .asm_46a3b ld a, [W_YCOORD] ; $d361 cp b jr nz, .asm_46a3b .asm_46a38 xor a jr .asm_46a3d .asm_46a3b ld a, $ff .asm_46a3d ld [$FF00+$ea], a ret HiddenObjectMaps: ; 46a40 (11:6a40) db REDS_HOUSE_2F db BLUES_HOUSE db OAKS_LAB db VIRIDIAN_POKECENTER db VIRIDIAN_MART db VIRIDIAN_SCHOOL db VIRIDIAN_GYM db MUSEUM_1F db PEWTER_GYM db PEWTER_MART db PEWTER_POKECENTER db CERULEAN_POKECENTER db CERULEAN_GYM db CERULEAN_MART db LAVENDER_POKECENTER db VERMILION_POKECENTER db VERMILION_GYM db CELADON_MANSION_2 db CELADON_POKECENTER db CELADON_GYM db GAME_CORNER db CELADON_HOTEL db FUCHSIA_POKECENTER db FUCHSIA_GYM db CINNABAR_GYM db CINNABAR_POKECENTER db SAFFRON_GYM db MT_MOON_POKECENTER db ROCK_TUNNEL_POKECENTER db BATTLE_CENTER db TRADE_CENTER db VIRIDIAN_FOREST db MT_MOON_3 db INDIGO_PLATEAU db ROUTE_25 db ROUTE_9 db SS_ANNE_6 db SS_ANNE_10 db ROCKET_HIDEOUT_1 db ROCKET_HIDEOUT_3 db ROCKET_HIDEOUT_4 db SAFFRON_POKECENTER db POKEMONTOWER_5 db ROUTE_13 db SAFARIZONEENTRANCE db SAFARI_ZONE_WEST db SILPH_CO_5F db SILPH_CO_9F db COPYCATS_HOUSE_2F db UNKNOWN_DUNGEON_1 db UNKNOWN_DUNGEON_3 db POWER_PLANT db SEAFOAM_ISLANDS_3 db SEAFOAM_ISLANDS_5 db MANSION_1 db MANSION_3 db ROUTE_23 db VICTORY_ROAD_2 db $6F db BILLS_HOUSE db VIRIDIAN_CITY db SAFARI_ZONE_REST_HOUSE_2 db SAFARI_ZONE_REST_HOUSE_3 db SAFARI_ZONE_REST_HOUSE_4 db $B9 db LAVENDER_HOUSE_1 db CELADON_MANSION_5 db FIGHTINGDOJO db ROUTE_10 db INDIGO_PLATEAU_LOBBY db CINNABAR_LAB_4 db BIKE_SHOP db ROUTE_11 db ROUTE_12 db MANSION_2 db MANSION_4 db SILPH_CO_11F db ROUTE_17 db UNDERGROUND_PATH_NS db UNDERGROUND_PATH_WE db CELADON_CITY db SEAFOAM_ISLANDS_4 db VERMILION_CITY db CERULEAN_CITY db ROUTE_4 db $FF HiddenObjectPointers: ; 46a96 (11:6a96) ; each of these pointers is for the corresponding map in HiddenObjectMaps dw RedsHouse2FHiddenObjects dw BluesHouseHiddenObjects dw OaksLabHiddenObjects dw ViridianPokecenterHiddenObjects dw ViridianMartHiddenObjects dw ViridianSchoolHiddenObjects dw ViridianGymHiddenObjects dw Museum1FHiddenObjects dw PewterGymHiddenObjects dw PewterMartHiddenObjects dw PewterPokecenterHiddenObjects dw CeruleanPokecenterHiddenObjects dw CeruleanGymHiddenObjects dw CeruleanMartHiddenObjects dw LavenderPokecenterHiddenObjects dw VermilionPokecenterHiddenObjects dw VermilionGymHiddenObjects dw CeladonMansion2HiddenObjects dw CeladonPokecenterHiddenObjects dw CeladonGymHiddenObjects dw GameCornerHiddenObjects dw CeladonHotelHiddenObjects dw FuchsiaPokecenterHiddenObjects dw FuchsiaGymHiddenObjects dw CinnabarGymHiddenObjects dw CinnabarPokecenterHiddenObjects dw SaffronGymHiddenObjects dw MtMoonPokecenterHiddenObjects dw RockTunnelPokecenterHiddenObjects dw BattleCenterHiddenObjects dw TradeCenterHiddenObjects dw ViridianForestHiddenObjects dw MtMoon3HiddenObjects dw IndigoPlateauHiddenObjects dw Route25HiddenObjects dw Route9HiddenObjects dw SSAnne6HiddenObjects dw SSAnne10HiddenObjects dw RocketHideout1HiddenObjects dw RocketHideout3HiddenObjects dw RocketHideout4HiddenObjects dw SaffronPokecenterHiddenObjects dw PokemonTower5HiddenObjects dw Route13HiddenObjects dw SafariZoneEntranceHiddenObjects dw SafariZoneWestHiddenObjects dw SilphCo5FHiddenObjects dw SilphCo9FHiddenObjects dw CopycatsHouse2FHiddenObjects dw UnknownDungeon1HiddenObjects dw UnknownDungeon3HiddenObjects dw PowerPlantHiddenObjects dw SeafoamIslands3HiddenObjects dw SeafoamIslands5HiddenObjects dw Mansion1HiddenObjects dw Mansion3HiddenObjects dw Route23HiddenObjects dw VictoryRoad2HiddenObjects dw Unused6FHiddenObjects dw BillsHouseHiddenObjects dw ViridianCityHiddenObjects dw SafariZoneRestHouse2HiddenObjects dw SafariZoneRestHouse3HiddenObjects dw SafariZoneRestHouse4HiddenObjects dw UnusedB9HiddenObjects dw LavenderHouse1HiddenObjects dw CeladonMansion5HiddenObjects dw FightingDojoHiddenObjects dw Route10HiddenObjects dw IndigoPlateauLobbyHiddenObjects dw CinnabarLab4HiddenObjects dw BikeShopHiddenObjects dw Route11HiddenObjects dw Route12HiddenObjects dw Mansion2HiddenObjects dw Mansion4HiddenObjects dw SilphCo11FHiddenObjects dw Route17HiddenObjects dw UndergroundPathNsHiddenObjects dw UndergroundPathWeHiddenObjects dw CeladonCityHiddenObjects dw SeafoamIslands4HiddenObjects dw VermilionCityHiddenObjects dw CeruleanCityHiddenObjects dw Route4HiddenObjects BattleCenterHiddenObjects: ; 46b40 (11:6b40) db $04,$05,$d0 ; XXX, y, x dbw Bank(Func_21845), Func_21845 db $04,$04,$d0 ; XXX, y, x dbw Bank(Func_21825), Func_21825 db $FF TradeCenterHiddenObjects: ; 46b4d (11:6b4d) db $04,$05,$d0 ; XXX, y, x dbw Bank(Func_21845), Func_21845 db $04,$04,$d0 ; XXX, y, x dbw Bank(Func_21825), Func_21825 db $FF RedsHouse2FHiddenObjects: ; 46b5a (11:6b5a) db $01,$00,$04 ; XXX, y, x dbw Bank(Func_5db86), Func_5db86 db $05,$03,$d0 ; XXX, y, x dbw Bank(Func_5db79), Func_5db79 db $FF BluesHouseHiddenObjects: ; 46b67 (11:6b67) db $01,$00,$04 ; XXX, y, x dbw Bank(Func_62509), Func_62509 db $01,$01,$04 ; XXX, y, x dbw Bank(Func_62509), Func_62509 db $01,$07,$04 ; XXX, y, x dbw Bank(Func_62509), Func_62509 db $FF OaksLabHiddenObjects: ; 46b7a (11:6b7a) db $00,$04,$04 ; XXX, y, x dbw Bank(Func_1e958), Func_1e958 db $00,$05,$04 ; XXX, y, x dbw Bank(Func_1e965), Func_1e965 db $01,$00,$04 ; XXX, y, x dbw Bank(Func_1ecaf), Func_1ecaf db $01,$01,$04 ; XXX, y, x dbw Bank(Func_1ecaf), Func_1ecaf db $FF ViridianPokecenterHiddenObjects: ; 46b93 (11:6b93) db $04,$00,$08 ; XXX, y, x dbw Bank(Func_6245d), Func_6245d db $03,$0d,$04 ; XXX, y, x dbw Bank(Func_62516), Func_62516 db $FF ViridianMartHiddenObjects: ; 46ba0 (11:6ba0) db $FF ViridianSchoolHiddenObjects: ; 46ba1 (11:6ba1) db $04,$03,$20 ; XXX, y, x dbw Bank(Func_52996), Func_52996 db $00,$03,$21 ; XXX, y, x dbw Bank(Func_5dc1a), Func_5dc1a db $FF ViridianGymHiddenObjects: ; 46bae (11:6bae) db $0f,$0f,$04 ; XXX, y, x dbw BANK(GymStatues),GymStatues db $0f,$12,$04 ; XXX, y, x dbw BANK(GymStatues),GymStatues db $FF Museum1FHiddenObjects: ; 46bbb (11:6bbb) db $03,$02,$04 ; XXX, y, x dbw Bank(AerodactylFossil), AerodactylFossil db $06,$02,$04 ; XXX, y, x dbw Bank(KabutopsFossil), KabutopsFossil db $FF PewterGymHiddenObjects: ; 46bc8 (11:6bc8) db $0a,$03,$04 ; XXX, y, x dbw BANK(GymStatues),GymStatues db $0a,$06,$04 ; XXX, y, x dbw BANK(GymStatues),GymStatues db $FF PewterMartHiddenObjects: ; 46bd5 (11:6bd5) db $FF PewterPokecenterHiddenObjects: ; 46bd6 (11:6bd6) db $04,$00,$08 ; XXX, y, x dbw Bank(Func_6245d), Func_6245d db $03,$0d,$04 ; XXX, y, x dbw Bank(Func_62516), Func_62516 db $FF CeruleanPokecenterHiddenObjects: ; 46be3 (11:6be3) db $04,$00,$08 ; XXX, y, x dbw Bank(Func_6245d), Func_6245d db $03,$0d,$04 ; XXX, y, x dbw Bank(Func_62516), Func_62516 db $FF CeruleanGymHiddenObjects: ; 46bf0 (11:6bf0) db $0b,$03,$04 ; XXX, y, x dbw BANK(GymStatues),GymStatues db $0b,$06,$04 ; XXX, y, x dbw BANK(GymStatues),GymStatues db $FF CeruleanMartHiddenObjects: ; 46bfd (11:6bfd) db $FF LavenderPokecenterHiddenObjects: ; 46bfe (11:6bfe) db $04,$00,$08 ; XXX, y, x dbw Bank(Func_6245d), Func_6245d db $03,$0d,$04 ; XXX, y, x dbw Bank(Func_62516), Func_62516 db $FF VermilionPokecenterHiddenObjects: ; 46c0b (11:6c0b) db $03,$0d,$04 ; XXX, y, x dbw Bank(Func_62516), Func_62516 db $04,$00,$04 ; XXX, y, x dbw Bank(Func_6245d), Func_6245d db $FF VermilionGymHiddenObjects: ; 46c18 (11:6c18) db $0e,$03,$04 ; XXX, y, x dbw BANK(GymStatues), GymStatues db $0e,$06,$04 ; XXX, y, x dbw BANK(GymStatues), GymStatues db $01,$06,$00 ; XXX, y, x dbw Bank(Func_5ddef), Func_5ddef db $07,$01,$00 ; XXX, y, x dbw Bank(GymTrashScript), GymTrashScript db $09,$01,$01 ; XXX, y, x dbw Bank(GymTrashScript), GymTrashScript db $0b,$01,$02 ; XXX, y, x dbw Bank(GymTrashScript), GymTrashScript db $07,$03,$03 ; XXX, y, x dbw Bank(GymTrashScript), GymTrashScript db $09,$03,$04 ; XXX, y, x dbw Bank(GymTrashScript), GymTrashScript db $0b,$03,$05 ; XXX, y, x dbw Bank(GymTrashScript), GymTrashScript db $07,$05,$06 ; XXX, y, x dbw Bank(GymTrashScript), GymTrashScript db $09,$05,$07 ; XXX, y, x dbw Bank(GymTrashScript), GymTrashScript db $0b,$05,$08 ; XXX, y, x dbw Bank(GymTrashScript), GymTrashScript db $07,$07,$09 ; XXX, y, x dbw Bank(GymTrashScript), GymTrashScript db $09,$07,$0a ; XXX, y, x dbw Bank(GymTrashScript), GymTrashScript db $0b,$07,$0b ; XXX, y, x dbw Bank(GymTrashScript), GymTrashScript db $07,$09,$0c ; XXX, y, x dbw Bank(GymTrashScript), GymTrashScript db $09,$09,$0d ; XXX, y, x dbw Bank(GymTrashScript), GymTrashScript db $0b,$09,$0e ; XXX, y, x dbw Bank(GymTrashScript), GymTrashScript db $FF CeladonMansion2HiddenObjects: ; 46c85 (11:6c85) db $05,$00,$04 ; XXX, y, x dbw Bank(Func_62516), Func_62516 db $FF CeladonPokecenterHiddenObjects: ; 46c8c (11:6c8c) db $04,$00,$08 ; XXX, y, x dbw Bank(Func_6245d), Func_6245d db $03,$0d,$04 ; XXX, y, x dbw Bank(Func_62516), Func_62516 db $FF CeladonGymHiddenObjects: ; 46c99 (11:6c99) db $0f,$03,$04 ; XXX, y, x dbw BANK(GymStatues),GymStatues db $0f,$06,$04 ; XXX, y, x dbw BANK(GymStatues),GymStatues db $FF GameCornerHiddenObjects: ; 46ca6 (11:6ca6) db $0f,$12,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0e,$12,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0d,$12,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0c,$12,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0b,$12,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0a,$12,$ff ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0a,$0d,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0b,$0d,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0c,$0d,$fe ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0d,$0d,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0e,$0d,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0f,$0d,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0f,$0c,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0e,$0c,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0d,$0c,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0c,$0c,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0b,$0c,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0a,$0c,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0a,$07,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0b,$07,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0c,$07,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0d,$07,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0e,$07,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0f,$07,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0f,$06,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0e,$06,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0d,$06,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0c,$06,$fd ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0b,$06,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0a,$06,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0a,$01,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0b,$01,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0c,$01,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0d,$01,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0e,$01,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $0f,$01,$d0 ; XXX, y, x dbw Bank(Func_37e2d), Func_37e2d db $08,$00,COIN+10 dbw BANK(HiddenCoins),HiddenCoins db $10,$01,COIN+10 dbw BANK(HiddenCoins),HiddenCoins db $0b,$03,COIN+20 dbw BANK(HiddenCoins),HiddenCoins db $0e,$03,COIN+10 dbw BANK(HiddenCoins),HiddenCoins db $0c,$04,COIN+10 dbw BANK(HiddenCoins),HiddenCoins db $0c,$09,COIN+20 dbw BANK(HiddenCoins),HiddenCoins db $0f,$09,COIN+10 dbw BANK(HiddenCoins),HiddenCoins db $0e,$10,COIN+10 dbw BANK(HiddenCoins),HiddenCoins db $10,$0a,COIN+10 dbw BANK(HiddenCoins),HiddenCoins db $07,$0b,COIN+40 dbw BANK(HiddenCoins),HiddenCoins db $08,$0f,COIN+100 dbw BANK(HiddenCoins),HiddenCoins db $0f,$0c,COIN+10 dbw BANK(HiddenCoins),HiddenCoins db $FF CeladonHotelHiddenObjects: ; 46dc7 (11:6dc7) db $03,$0d,$04 ; XXX, y, x dbw Bank(Func_62516), Func_62516 db $04,$00,$08 ; XXX, y, x dbw Bank(Func_6245d), Func_6245d db $FF FuchsiaPokecenterHiddenObjects: ; 46dd4 (11:6dd4) db $03,$0d,$04 ; XXX, y, x dbw Bank(Func_62516), Func_62516 db $04,$00,$04 ; XXX, y, x dbw Bank(Func_6245d), Func_6245d db $FF FuchsiaGymHiddenObjects: ; 46de1 (11:6de1) db $0f,$03,$04 ; XXX, y, x dbw BANK(GymStatues),GymStatues db $0f,$06,$04 ; XXX, y, x dbw BANK(GymStatues),GymStatues db $FF CinnabarGymHiddenObjects: ; 46dee (11:6dee) db $0d,$11,$04 ; XXX, y, x dbw BANK(GymStatues),GymStatues db $07,$0f,$01 ; XXX, y, x dbw Bank(Func_1eaa17), Func_1eaa17 db $01,$0a,$12 ; XXX, y, x dbw Bank(Func_1eaa17), Func_1eaa17 db $07,$09,$13 ; XXX, y, x dbw Bank(Func_1eaa17), Func_1eaa17 db $0d,$09,$14 ; XXX, y, x dbw Bank(Func_1eaa17), Func_1eaa17 db $0d,$01,$05 ; XXX, y, x dbw Bank(Func_1eaa17), Func_1eaa17 db $07,$01,$16 ; XXX, y, x dbw Bank(Func_1eaa17), Func_1eaa17 db $FF CinnabarPokecenterHiddenObjects: ; 46e19 (11:6e19) db $04,$00,$04 ; XXX, y, x dbw Bank(Func_6245d), Func_6245d db $03,$0d,$04 ; XXX, y, x dbw Bank(Func_62516), Func_62516 db $FF SaffronGymHiddenObjects: ; 46e26 (11:6e26) db $0f,$09,$04 ; XXX, y, x dbw BANK(GymStatues),GymStatues db $FF MtMoonPokecenterHiddenObjects: ; 46e2d (11:6e2d) db $04,$00,$08 ; XXX, y, x dbw Bank(Func_6245d), Func_6245d db $03,$0d,$04 ; XXX, y, x dbw Bank(Func_62516), Func_62516 db $FF RockTunnelPokecenterHiddenObjects: ; 46e3a (11:6e3a) db $04,$00,$08 ; XXX, y, x dbw Bank(Func_6245d), Func_6245d db $03,$0d,$04 ; XXX, y, x dbw Bank(Func_62516), Func_62516 db $FF ViridianForestHiddenObjects: ; 46e47 (11:6e47) db $12,$01,POTION dbw BANK(HiddenItems),HiddenItems db $2a,$10,ANTIDOTE dbw BANK(HiddenItems),HiddenItems db $FF MtMoon3HiddenObjects: ; 46e54 (11:6e54) db $0c,$12,MOON_STONE dbw BANK(HiddenItems),HiddenItems db $09,$21,ETHER dbw BANK(HiddenItems),HiddenItems db $FF IndigoPlateauHiddenObjects: ; 46e61 (11:6e61) db $0d,$08,$ff ; XXX, y, x dbw Bank(Func_52a2f), Func_52a2f db $0d,$0b,$00 ; XXX, y, x dbw Bank(Func_52a2f), Func_52a2f db $FF Route25HiddenObjects: ; 46e6e (11:6e6e) db $03,$26,ETHER dbw BANK(HiddenItems),HiddenItems db $01,$0a,ELIXER dbw BANK(HiddenItems),HiddenItems db $FF Route9HiddenObjects: ; 46e7b (11:6e7b) db $07,$0e,ETHER dbw BANK(HiddenItems),HiddenItems db $FF SSAnne6HiddenObjects: ; 46e82 (11:6e82) db $05,$0d,$00 ; XXX, y, x dbw Bank(Func_5ddef), Func_5ddef db $07,$0d,$00 ; XXX, y, x dbw Bank(Func_5ddef), Func_5ddef db $09,$0d,GREAT_BALL dbw BANK(HiddenItems),HiddenItems db $FF SSAnne10HiddenObjects: ; 46e95 (11:6e95) db $01,$03,HYPER_POTION dbw BANK(HiddenItems),HiddenItems db $FF Route10HiddenObjects: ; 46e9c (11:6e9c) db $11,$09,SUPER_POTION dbw BANK(HiddenItems),HiddenItems db $35,$10,MAX_ETHER dbw BANK(HiddenItems),HiddenItems db $FF RocketHideout1HiddenObjects: ; 46ea9 (11:6ea9) db $0f,$15,PP_UP dbw BANK(HiddenItems),HiddenItems db $FF RocketHideout3HiddenObjects: ; 46eb0 (11:6eb0) db $11,$1b,NUGGET dbw BANK(HiddenItems),HiddenItems db $FF RocketHideout4HiddenObjects: ; 46eb7 (11:6eb7) db $01,$19,SUPER_POTION dbw BANK(HiddenItems),HiddenItems db $FF SaffronPokecenterHiddenObjects: ; 46ebe (11:6ebe) db $04,$00,$04 ; XXX, y, x dbw Bank(Func_6245d), Func_6245d db $03,$0d,$04 ; XXX, y, x dbw Bank(Func_62516), Func_62516 db $FF PokemonTower5HiddenObjects: ; 46ecb (11:6ecb) db $0c,$04,ELIXER dbw BANK(HiddenItems),HiddenItems db $FF Route13HiddenObjects: ; 46ed2 (11:6ed2) db $0e,$01,PP_UP dbw BANK(HiddenItems),HiddenItems db $0d,$10,CALCIUM dbw BANK(HiddenItems),HiddenItems db $FF SafariZoneEntranceHiddenObjects: ; 46edf (11:6edf) db $01,$0a,NUGGET dbw BANK(HiddenItems),HiddenItems db $FF SafariZoneWestHiddenObjects: ; 46ee6 (11:6ee6) db $05,$06,REVIVE dbw BANK(HiddenItems),HiddenItems db $FF SilphCo5FHiddenObjects: ; 46eed (11:6eed) db $03,$0c,ELIXER dbw BANK(HiddenItems),HiddenItems db $FF SilphCo9FHiddenObjects: ; 46ef4 (11:6ef4) db $0f,$02,MAX_POTION dbw BANK(HiddenItems),HiddenItems db $FF CopycatsHouse2FHiddenObjects: ; 46efb (11:6efb) db $01,$01,NUGGET dbw BANK(HiddenItems),HiddenItems db $FF UnknownDungeon1HiddenObjects: ; 46f02 (11:6f02) db $0b,$0e,RARE_CANDY dbw BANK(HiddenItems),HiddenItems db $FF UnknownDungeon3HiddenObjects: ; 46f09 (11:6f09) db $03,$1b,ULTRA_BALL dbw BANK(HiddenItems),HiddenItems db $FF PowerPlantHiddenObjects: ; 46f10 (11:6f10) db $10,$11,MAX_ELIXER dbw BANK(HiddenItems),HiddenItems db $01,$0c,PP_UP dbw BANK(HiddenItems),HiddenItems db $FF SeafoamIslands3HiddenObjects: ; 46f1d (11:6f1d) db $0f,$0f,NUGGET dbw BANK(HiddenItems),HiddenItems db $FF SeafoamIslands5HiddenObjects: ; 46f24 (11:6f24) db $11,$19,ULTRA_BALL dbw BANK(HiddenItems),HiddenItems db $FF Mansion1HiddenObjects: ; 46f2b (11:6f2b) db $10,$08,MOON_STONE dbw BANK(HiddenItems),HiddenItems db $05,$02,$04 ; XXX, y, x dbw BANK(Func_44316),Func_44316 db $FF Mansion2HiddenObjects: ; 46f38 (11:6f38) db $0b,$02,$04 ; XXX, y, x dbw Bank(Func_52037), Func_52037 db $FF Mansion3HiddenObjects: ; 46f3f (11:6f3f) db $09,$01,MAX_REVIVE dbw BANK(HiddenItems),HiddenItems db $05,$0a,$04 ; XXX, y, x dbw Bank(Func_5227a), Func_5227a db $FF Mansion4HiddenObjects: ; 46f4c (11:6f4c) db $09,$01,RARE_CANDY dbw BANK(HiddenItems),HiddenItems db $03,$14,$04 ; XXX, y, x dbw Bank(Func_52420), Func_52420 db $19,$12,$04 ; XXX, y, x dbw Bank(Func_52420), Func_52420 db $FF Route23HiddenObjects: ; 46f5f (11:6f5f) db $2c,$09,FULL_RESTORE dbw BANK(HiddenItems),HiddenItems db $46,$13,ULTRA_BALL dbw BANK(HiddenItems),HiddenItems db $5a,$08,MAX_ETHER dbw BANK(HiddenItems),HiddenItems db $FF VictoryRoad2HiddenObjects: ; 46f72 (11:6f72) db $02,$05,ULTRA_BALL dbw BANK(HiddenItems),HiddenItems db $07,$1a,FULL_RESTORE dbw BANK(HiddenItems),HiddenItems db $FF Unused6FHiddenObjects: ; 46f7f (11:6f7f) db $0b,$0e,MAX_ELIXER dbw BANK(HiddenItems),HiddenItems db $FF BillsHouseHiddenObjects: ; 46f86 (11:6f86) db $04,$01,$04 ; XXX, y, x dbw Bank(Func_1eb6e), Func_1eb6e db $FF ViridianCityHiddenObjects: ; 46f8d (11:6f8d) db $04,$0e,POTION dbw BANK(HiddenItems),HiddenItems db $FF SafariZoneRestHouse2HiddenObjects: ; 46f94 (11:6f94) db $04,$00,$08 ; XXX, y, x dbw Bank(Func_6245d), Func_6245d db $03,$0d,$04 ; XXX, y, x dbw Bank(Func_62516), Func_62516 db $FF SafariZoneRestHouse3HiddenObjects: ; 46fa1 (11:6fa1) db $04,$00,$08 ; XXX, y, x dbw Bank(Func_6245d), Func_6245d db $03,$0d,$04 ; XXX, y, x dbw Bank(Func_62516), Func_62516 db $FF SafariZoneRestHouse4HiddenObjects: ; 46fae (11:6fae) db $04,$00,$08 ; XXX, y, x dbw Bank(Func_6245d), Func_6245d db $03,$0d,$04 ; XXX, y, x dbw Bank(Func_62516), Func_62516 db $FF UnusedB9HiddenObjects: ; 46fbb (11:6fbb) db $02,$01,$04 ; XXX, y, x dbw Bank(Func_5db8f), Func_5db8f db $FF LavenderHouse1HiddenObjects: ; 46fc2 (11:6fc2) db $01,$00,$00 ; XXX, y, x dbw Bank(Func_1eb60), Func_1eb60 db $01,$01,$00 ; XXX, y, x dbw Bank(Func_1eb60), Func_1eb60 db $01,$07,$00 ; XXX, y, x dbw Bank(Func_1eb60), Func_1eb60 db $FF CeladonMansion5HiddenObjects: ; 46fd5 (11:6fd5) db $00,$03,$34 ; XXX, y, x dbw Bank(Func_5dc1a), Func_5dc1a db $00,$04,$34 ; XXX, y, x dbw Bank(Func_5dc1a), Func_5dc1a db $04,$03,$35 ; XXX, y, x dbw Bank(Func_52996), Func_52996 db $FF FightingDojoHiddenObjects: ; 46fe8 (11:6fe8) db $09,$03,$04 ; XXX, y, x dbw Bank(Func_52a22), Func_52a22 db $09,$06,$04 ; XXX, y, x dbw Bank(Func_52a22), Func_52a22 db $00,$04,$04 ; XXX, y, x dbw Bank(Func_52a08), Func_52a08 db $00,$05,$04 ; XXX, y, x dbw Bank(Func_52a15), Func_52a15 db $FF IndigoPlateauLobbyHiddenObjects: ; 47001 (11:7001) db $07,$0f,$04 ; XXX, y, x dbw Bank(Func_62516), Func_62516 db $FF CinnabarLab4HiddenObjects: ; 47008 (11:7008) db $04,$00,$04 ; XXX, y, x dbw Bank(Func_62516), Func_62516 db $04,$02,$04 ; XXX, y, x dbw Bank(Func_62516), Func_62516 db $FF BikeShopHiddenObjects: ; 47015 (11:7015) db $00,$01,$d0 ; XXX, y, x dbw Bank(Func_1e94b), Func_1e94b db $01,$02,$d0 ; XXX, y, x dbw Bank(Func_1e94b), Func_1e94b db $02,$01,$d0 ; XXX, y, x dbw Bank(Func_1e94b), Func_1e94b db $02,$03,$d0 ; XXX, y, x dbw Bank(Func_1e94b), Func_1e94b db $04,$00,$d0 ; XXX, y, x dbw Bank(Func_1e94b), Func_1e94b db $05,$01,$d0 ; XXX, y, x dbw Bank(Func_1e94b), Func_1e94b db $FF Route11HiddenObjects: ; 4703a (11:703a) db $05,$30,ESCAPE_ROPE dbw BANK(HiddenItems),HiddenItems db $FF Route12HiddenObjects: ; 47041 (11:7041) db $3f,$02,HYPER_POTION dbw BANK(HiddenItems),HiddenItems db $FF SilphCo11FHiddenObjects: ; 47048 (11:7048) db $0c,$0a,$04 ; XXX, y, x dbw Bank(Func_62516), Func_62516 db $FF Route17HiddenObjects: ; 4704f (11:704f) db $0e,$0f,RARE_CANDY dbw BANK(HiddenItems),HiddenItems db $2d,$08,FULL_RESTORE dbw BANK(HiddenItems),HiddenItems db $48,$11,PP_UP dbw BANK(HiddenItems),HiddenItems db $5b,$04,MAX_REVIVE dbw BANK(HiddenItems),HiddenItems db $79,$08,MAX_ELIXER dbw BANK(HiddenItems),HiddenItems db $FF UndergroundPathNsHiddenObjects: ; 4706e (11:706e) db $04,$03,FULL_RESTORE dbw BANK(HiddenItems),HiddenItems db $22,$04,X_SPECIAL dbw BANK(HiddenItems),HiddenItems db $FF UndergroundPathWeHiddenObjects: ; 4707b (11:707b) db $02,$0c,NUGGET dbw BANK(HiddenItems),HiddenItems db $05,$15,ELIXER dbw BANK(HiddenItems),HiddenItems db $FF CeladonCityHiddenObjects: ; 47088 (11:7088) db $0f,$30,PP_UP dbw BANK(HiddenItems),HiddenItems db $FF SeafoamIslands4HiddenObjects: ; 4708f (11:708f) db $10,$09,MAX_ELIXER dbw BANK(HiddenItems),HiddenItems db $FF VermilionCityHiddenObjects: ; 47096 (11:7096) db $0b,$0e,MAX_ETHER dbw BANK(HiddenItems),HiddenItems db $FF CeruleanCityHiddenObjects: ; 4709d (11:709d) db $08,$0f,RARE_CANDY dbw BANK(HiddenItems),HiddenItems db $FF Route4HiddenObjects: ; 470a4 (11:70a4) db $03,$28,GREAT_BALL dbw BANK(HiddenItems),HiddenItems db $FF SECTION "bank12",ROMX,BANK[$12] Route7_h: ; 0x48000 to 0x48022 (34 bytes) (bank=12) (id=18) db $00 ; tileset db ROUTE_7_HEIGHT, ROUTE_7_WIDTH ; dimensions (y, x) dw Route7Blocks, Route7TextPointers, Route7Script ; blocks, texts, scripts db WEST | EAST ; connections WEST_MAP_CONNECTION CELADON_CITY, CELADON_CITY_WIDTH, -3, 1, CELADON_CITY_HEIGHT - 3, CeladonCityBlocks, ROUTE_7_WIDTH EAST_MAP_CONNECTION SAFFRON_CITY, SAFFRON_CITY_WIDTH, -3, 1, SAFFRON_CITY_HEIGHT - 3, SaffronCityBlocks, ROUTE_7_WIDTH dw Route7Object ; objects Route7Object: ; 0x48022 (size=47) db $f ; border tile db $5 ; warps db $9, $12, $2, ROUTE_7_GATE db $a, $12, $3, ROUTE_7_GATE db $9, $b, $0, ROUTE_7_GATE db $a, $b, $1, ROUTE_7_GATE db $d, $5, $0, PATH_ENTRANCE_ROUTE_7 db $1 ; signs db $d, $3, $1 ; Route7Text1 db $0 ; people ; warp-to EVENT_DISP $a, $9, $12 ; ROUTE_7_GATE EVENT_DISP $a, $a, $12 ; ROUTE_7_GATE EVENT_DISP $a, $9, $b ; ROUTE_7_GATE EVENT_DISP $a, $a, $b ; ROUTE_7_GATE EVENT_DISP $a, $d, $5 ; PATH_ENTRANCE_ROUTE_7 Route7Blocks: ; 48051 (12:4051) INCBIN "maps/route7.blk" CeladonPokecenterBlocks: ; 480ab (12:40ab) RockTunnelPokecenterBlocks: ; 480ab (12:40ab) MtMoonPokecenterBlocks: ; 480ab (12:40ab) INCBIN "maps/mtmoonpokecenter.blk" Route18GateBlocks: ; 480c7 (12:40c7) Route15GateBlocks: ; 480c7 (12:40c7) Route11GateBlocks: ; 480c7 (12:40c7) INCBIN "maps/route11gate.blk" Route18GateUpstairsBlocks: ; 480db (12:40db) Route16GateUpstairsBlocks: ; 480db (12:40db) Route12GateUpstairsBlocks: ; 480db (12:40db) Route15GateUpstairsBlocks: ; 480db (12:40db) Route11GateUpstairsBlocks: ; 480db (12:40db) INCBIN "maps/route11gateupstairs.blk" Func_480eb: ; 480eb (12:40eb) call Load16BitRegisters ld a, [rBGP] ; $FF00+$47 or b ld [rBGP], a ; $FF00+$47 ld c, $4 call DelayFrames ld a, [rBGP] ; $FF00+$47 and $fc ld [rBGP], a ; $FF00+$47 ret Func_480ff: ; 480ff (12:40ff) call Load16BitRegisters ld a, $1 ld [$d0a0], a xor a .asm_48108 ld [H_NUMTOPRINT], a ; $FF00+$96 (aliases: H_MULTIPLICAND) call Func_48119 call Func_48119 dec b ld a, b jr nz, .asm_48108 xor a ld [$d0a0], a ret Func_48119: ; 48119 (12:4119) ld a, [H_NUMTOPRINT] ; $FF00+$96 (aliases: H_MULTIPLICAND) xor b ld [H_NUMTOPRINT], a ; $FF00+$96 (aliases: H_MULTIPLICAND) ld [rWY], a ; $FF00+$4a ld c, $3 jp DelayFrames Func_48125: ; 48125 (12:4125) call Load16BitRegisters xor a .asm_48129 ld [$FF00+$97], a call Func_4813f ld c, $1 call DelayFrames call Func_4813f dec b ld a, b jr nz, .asm_48129 ld a, $7 ld [rWX], a ; $FF00+$4b ret Func_4813f: ; 4813f (12:413f) ld a, [$FF00+$97] xor b ld [$FF00+$97], a bit 7, a jr z, .asm_48149 xor a .asm_48149 add $7 ld [rWX], a ; $FF00+$4b ld c, $4 jp DelayFrames Route7Script: ; 48152 (12:4152) jp EnableAutoTextBoxDrawing Route7TextPointers: ; 48155 (12:4155) dw Route7Text1 Route7Text1: ; 48157 (12:4157) TX_FAR _Route7Text1 db "@" RedsHouse1F_h: ; 4815c (12:415c) db $01 ; tileset db REDS_HOUSE_1F_HEIGHT, REDS_HOUSE_1F_WIDTH ; dimensions dw RedsHouse1FBlocks, RedsHouse1FTextPointers, RedsHouse1FScript db 0 ; no connections dw RedsHouse1FObject RedsHouse1FScript: ; 48168 (12:4168) jp EnableAutoTextBoxDrawing RedsHouse1FTextPointers: ; 4816b (12:416b) dw RedsHouse1FText1 dw RedsHouse1FText2 RedsHouse1FText1: ; 4816f (12:416f) ; 416F Mom db 8 ld a, [$D72E] bit 3, a jr nz, .heal ; if player has received a Pokémon from Oak, heal team ld hl, MomWakeUpText call PrintText jr .done .heal call MomHealPokemon .done jp TextScriptEnd MomWakeUpText: ; 48185 (12:4185) TX_FAR _MomWakeUpText db "@" MomHealPokemon: ; 4818a (12:418a) ld hl, MomHealText1 call PrintText call GBFadeOut2 call ReloadMapData PREDEF HealPartyPredef ld a, MUSIC_PKMN_HEALED ld [$C0EE], a call PlaySound ; play sound? .next ld a, [$C026] cp MUSIC_PKMN_HEALED jr z, .next ld a, [$D35B] ld [$C0EE], a call PlaySound call GBFadeIn2 ld hl, MomHealText2 jp PrintText MomHealText1: ; 481bc (12:41bc) TX_FAR _MomHealText1 db "@" MomHealText2: ; 481c1 (12:41c1) TX_FAR _MomHealText2 db "@" RedsHouse1FText2: ; 0x481c6 TV db 8 ld a,[$C109] cp 4 ld hl,TVWrongSideText jr nz,.done ; if player is not facing up ld hl,StandByMeText .done call PrintText jp TextScriptEnd StandByMeText: ; 481da (12:41da) TX_FAR _StandByMeText db "@" TVWrongSideText: ; 481df (12:41df) TX_FAR _TVWrongSideText db "@" RedsHouse1FObject: ; 481e4 (12:41e4) db $0A ; border tile db 3 ; warps db 7,2,0,$FF ; exit1 db 7,3,0,$FF ; exit2 db 1,7,0,$26 ; staircase db 1 ; signs db 1,3,2 ; TV db 1 ; people db $33,4+4,5+4,$FF,$D2,1 ; Mom ; warp-to EVENT_DISP REDS_HOUSE_1F_WIDTH, 7, 2 EVENT_DISP REDS_HOUSE_1F_WIDTH, 7, 3 EVENT_DISP REDS_HOUSE_1F_WIDTH, 1, 7 RedsHouse1FBlocks: ; 48209 (12:4209) INCBIN "maps/redshouse1f.blk" CeladonMart3_h: ; 0x48219 to 0x48225 (12 bytes) (bank=12) (id=124) db $12 ; tileset db CELADON_MART_3_HEIGHT, CELADON_MART_3_WIDTH ; dimensions (y, x) dw CeladonMart3Blocks, CeladonMart3TextPointers, CeladonMart3Script ; blocks, texts, scripts db $00 ; connections dw CeladonMart3Object ; objects CeladonMart3Script: ; 48225 (12:4225) jp EnableAutoTextBoxDrawing CeladonMart3TextPointers: ; 48228 (12:4228) dw CeladonMart3Text1 dw CeladonMart3Text2 dw CeladonMart3Text3 dw CeladonMart3Text4 dw CeladonMart3Text5 dw CeladonMart3Text6 dw CeladonMart3Text7 dw CeladonMart3Text8 dw CeladonMart3Text9 dw CeladonMart3Text10 dw CeladonMart3Text11 dw CeladonMart3Text12 dw CeladonMart3Text13 dw CeladonMart3Text14 dw CeladonMart3Text15 dw CeladonMart3Text16 dw CeladonMart3Text17 CeladonMart3Text1: ; 4824a (12:424a) db $08 ; asm ld a, [$d778] bit 7, a jr nz, .asm_a5463 ; 0x48250 ld hl, TM18PreReceiveText call PrintText ld bc, (TM_18 << 8) | 1 call GiveItem jr nc, .BagFull ld hl, $d778 set 7, [hl] ld hl, ReceivedTM18Text jr .asm_81359 ; 0x48268 .BagFull ld hl, TM18NoRoomText jr .asm_81359 ; 0x4826d .asm_a5463 ; 0x4826f ld hl, TM18ExplanationText .asm_81359 ; 0x48272 call PrintText jp TextScriptEnd TM18PreReceiveText: ; 48278 (12:4278) TX_FAR _TM18PreReceiveText db "@" ReceivedTM18Text: ; 4827d (12:427d) TX_FAR _ReceivedTM18Text ; 0x9c85a db $0B, "@" TM18ExplanationText: ; 48283 (12:4283) TX_FAR _TM18ExplanationText db "@" TM18NoRoomText: ; 48288 (12:4288) TX_FAR _TM18NoRoomText db "@" CeladonMart3Text2: ; 4828d (12:428d) TX_FAR _CeladonMart3Text2 db "@" CeladonMart3Text3: ; 48292 (12:4292) TX_FAR _CeladonMart3Text3 db "@" CeladonMart3Text4: ; 48297 (12:4297) TX_FAR _CeladonMart3Text4 db "@" CeladonMart3Text5: ; 4829c (12:429c) TX_FAR _CeladonMart3Text5 db "@" CeladonMart3Text12 CeladonMart3Text10: ; 482a1 (12:42a1) CeladonMart3Text8: ; 482a1 (12:42a1) CeladonMart3Text6: ; 482a1 (12:42a1) TX_FAR _CeladonMart3Text6 db "@" CeladonMart3Text7: ; 482a6 (12:42a6) TX_FAR _CeladonMart3Text7 db "@" CeladonMart3Text9: ; 482ab (12:42ab) TX_FAR _CeladonMart3Text9 db "@" CeladonMart3Text11: ; 482b0 (12:42b0) TX_FAR _CeladonMart3Text11 db "@" CeladonMart3Text13: ; 482b5 (12:42b5) TX_FAR _CeladonMart3Text13 db "@" CeladonMart3Text14: ; 482ba (12:42ba) TX_FAR _CeladonMart3Text14 db "@" CeladonMart3Text17: ; 482bf (12:42bf) CeladonMart3Text16: ; 482bf (12:42bf) CeladonMart3Text15: ; 482bf (12:42bf) TX_FAR _CeladonMart3Text15 db "@" CeladonMart3Object: ; 0x482c4 (size=94) db $f ; border tile db $3 ; warps db $1, $c, $0, CELADON_MART_4 db $1, $10, $1, CELADON_MART_2 db $1, $1, $0, CELADON_MART_ELEVATOR db $c ; signs db $4, $2, $6 ; CeladonMart3Text6 db $4, $3, $7 ; CeladonMart3Text7 db $4, $5, $8 ; CeladonMart3Text8 db $4, $6, $9 ; CeladonMart3Text9 db $6, $2, $a ; CeladonMart3Text10 db $6, $3, $b ; CeladonMart3Text11 db $6, $5, $c ; CeladonMart3Text12 db $6, $6, $d ; CeladonMart3Text13 db $1, $e, $e ; CeladonMart3Text14 db $1, $4, $f ; CeladonMart3Text15 db $1, $6, $10 ; CeladonMart3Text16 db $1, $a, $11 ; CeladonMart3Text17 db $5 ; people db SPRITE_MART_GUY, $5 + 4, $10 + 4, $ff, $ff, $1 ; person db SPRITE_GAMEBOY_KID_COPY, $6 + 4, $b + 4, $ff, $d3, $2 ; person db SPRITE_GAMEBOY_KID_COPY, $2 + 4, $7 + 4, $ff, $d0, $3 ; person db SPRITE_GAMEBOY_KID_COPY, $2 + 4, $8 + 4, $ff, $d0, $4 ; person db SPRITE_YOUNG_BOY, $5 + 4, $2 + 4, $ff, $d1, $5 ; person ; warp-to EVENT_DISP $a, $1, $c ; CELADON_MART_4 EVENT_DISP $a, $1, $10 ; CELADON_MART_2 EVENT_DISP $a, $1, $1 ; CELADON_MART_ELEVATOR CeladonMart3Blocks: ; 48322 (12:4322) INCBIN "maps/celadonmart3.blk" CeladonMart4_h: ; 0x4834a to 0x48356 (12 bytes) (bank=12) (id=125) db $12 ; tileset db CELADON_MART_4_HEIGHT, CELADON_MART_4_WIDTH ; dimensions (y, x) dw CeladonMart4Blocks, CeladonMart4TextPointers, CeladonMart4Script ; blocks, texts, scripts db $00 ; connections dw CeladonMart4Object ; objects CeladonMart4Script: ; 48356 (12:4356) jp EnableAutoTextBoxDrawing CeladonMart4TextPointers: ; 48359 (12:4359) dw CeladonMart4Text1 dw CeladonMart4Text2 dw CeladonMart4Text3 dw CeladonMart4Text4 CeladonMart4Text2: ; 48361 (12:4361) TX_FAR _CeladonMart4Text2 db "@" CeladonMart4Text3: ; 48366 (12:4366) TX_FAR _CeladonMart4Text3 db "@" CeladonMart4Text4: ; 4836b (12:436b) TX_FAR _CeladonMart4Text4 db "@" CeladonMart4Object: ; 0x48370 (size=49) db $f ; border tile db $3 ; warps db $1, $c, $0, CELADON_MART_3 db $1, $10, $1, CELADON_MART_5 db $1, $1, $0, CELADON_MART_ELEVATOR db $1 ; signs db $1, $e, $4 ; CeladonMart4Text4 db $3 ; people db SPRITE_MART_GUY, $7 + 4, $5 + 4, $ff, $ff, $1 ; person db SPRITE_BLACK_HAIR_BOY_2, $5 + 4, $f + 4, $fe, $2, $2 ; person db SPRITE_BUG_CATCHER, $2 + 4, $5 + 4, $fe, $2, $3 ; person ; warp-to EVENT_DISP $a, $1, $c ; CELADON_MART_3 EVENT_DISP $a, $1, $10 ; CELADON_MART_5 EVENT_DISP $a, $1, $1 ; CELADON_MART_ELEVATOR CeladonMart4Blocks: ; 483a1 (12:43a1) INCBIN "maps/celadonmart4.blk" CeladonMartRoof_h: ; 0x483c9 to 0x483d5 (12 bytes) (bank=12) (id=126) db $12 ; tileset db CELADON_MART_ROOF_HEIGHT, CELADON_MART_ROOF_WIDTH ; dimensions (y, x) dw CeladonMartRoofBlocks, CeladonMartRoofTextPointers, CeladonMartRoofScript ; blocks, texts, scripts db $00 ; connections dw CeladonMartRoofObject ; objects CeladonMartRoofScript: ; 483d5 (12:43d5) jp EnableAutoTextBoxDrawing CeladonMartRoofScript_483d8: ; 483d8 (12:43d8) xor a ld [$cd37], a ld de, $cc5b ld hl, CeladonMartRoofDrinkList ; $4408 .asm_483e2 ld a, [hli] and a jr z, .asm_48404 push hl push de ld [$d11e], a ld b, a ld a, $1c call Predef ; indirect jump to Func_f8a5 (f8a5 (3:78a5)) pop de pop hl ld a, b and a jr z, .asm_483e2 ld a, [$d11e] ld [de], a inc de push hl ld hl, $cd37 inc [hl] pop hl jr .asm_483e2 .asm_48404 ld a, $ff ld [de], a ret CeladonMartRoofDrinkList: ; 48408 (12:4408) db FRESH_WATER db SODA_POP db LEMONADE db $00 CeladonMartRoofScript_4840c: ; 4840c (12:440c) ld hl, $d730 set 6, [hl] ld hl, UnnamedText_484ee ; $44ee call PrintText xor a ld [wCurrentMenuItem], a ; $cc26 ld a, $3 ld [wMenuWatchedKeys], a ; $cc29 ld a, [$cd37] dec a ld [wMaxMenuItem], a ; $cc28 ld a, $2 ld [wTopMenuItemY], a ; $cc24 ld a, $1 ld [wTopMenuItemX], a ; $cc25 ld a, [$cd37] dec a ld bc, $2 ld hl, $3 call AddNTimes dec l ld b, l ld c, $c ld hl, wTileMap call TextBoxBorder call UpdateSprites call CeladonMartRoofScript_48532 ld hl, $d730 res 6, [hl] call HandleMenuInput bit 1, a ret nz ld hl, $cc5b ld a, [wCurrentMenuItem] ; $cc26 ld d, $0 ld e, a add hl, de ld a, [hl] ld [$FF00+$db], a cp FRESH_WATER jr z, .asm_484b6 cp SODA_POP jr z, .asm_48492 ld a, [$d778] bit 6, a jr nz, .asm_484e0 ld hl, UnnamedText_48515 ; $4515 call PrintText call RemoveItemByIDBank12 ld bc, (TM_49 << 8) | 1 call GiveItem jr nc, .BagFull ld hl, ReceivedTM49Text ; $451b call PrintText ld hl, $d778 set 6, [hl] ret .asm_48492 ld a, [$d778] bit 5, a jr nz, .asm_484e0 ld hl, UnnamedText_48504 ; $4504 call PrintText call RemoveItemByIDBank12 ld bc, (TM_48 << 8) | 1 call GiveItem jr nc, .BagFull ld hl, UnnamedText_4850a ; $450a call PrintText ld hl, $d778 set 5, [hl] ret .asm_484b6 ld a, [$d778] bit 4, a jr nz, .asm_484e0 ld hl, UnnamedText_484f3 ; $44f3 call PrintText call RemoveItemByIDBank12 ld bc, (TM_13 << 8) | 1 call GiveItem jr nc, .BagFull ld hl, UnnamedText_484f9 ; $44f9 call PrintText ld hl, $d778 set 4, [hl] ret .BagFull ld hl, UnnamedText_48526 ; $4526 jp PrintText .asm_484e0 ld hl, UnnamedText_4852c ; $452c jp PrintText RemoveItemByIDBank12: ; 484e6 (12:44e6) ld b, BANK(RemoveItemByID) ld hl, RemoveItemByID jp Bankswitch UnnamedText_484ee: ; 484ee (12:44ee) TX_FAR _UnnamedText_484ee db "@" UnnamedText_484f3: ; 484f3 (12:44f3) TX_FAR _UnnamedText_484f3 db $0d db "@" UnnamedText_484f9: ; 484f9 (12:44f9) TX_FAR _UnnamedText_484f9 db $0b TX_FAR _UnnamedText_484fe db $0d db "@" UnnamedText_48504: ; 48504 (12:4504) TX_FAR _UnnamedText_48504 db $0d db "@" UnnamedText_4850a: ; 4850a (12:450a) TX_FAR _UnnamedText_4850a db $0b TX_FAR _UnnamedText_4850f db $0d db "@" UnnamedText_48515: ; 48515 (12:4515) TX_FAR _UnnamedText_48515 db $0d db "@" ReceivedTM49Text: ; 4851b (12:451b) TX_FAR _ReceivedTM49Text db $0b TX_FAR _UnnamedText_48520 db $0d db "@" UnnamedText_48526: ; 48526 (12:4526) TX_FAR _UnnamedText_48526 db $0d db "@" UnnamedText_4852c: ; 4852c (12:452c) TX_FAR _UnnamedText_4852c db $0d db "@" CeladonMartRoofScript_48532: ; 48532 (12:4532) ld hl, $cc5b xor a ld [$FF00+$db], a .asm_48538 ld a, [hli] cp $ff ret z push hl ld [$d11e], a call GetItemName FuncCoord 2, 2 ; $c3ca ld hl, Coord ld a, [$FF00+$db] ld bc, $28 call AddNTimes ld de, $cd6d call PlaceString ld hl, $ffdb inc [hl] pop hl jr .asm_48538 CeladonMartRoofTextPointers: ; 4855b (12:455b) dw CeladonMartRoofText1 dw CeladonMartRoofText2 dw CeladonMartRoofText5 dw CeladonMartRoofText5 dw CeladonMartRoofText5 dw CeladonMartRoofText6 CeladonMartRoofText1: ; 48567 (12:4567) TX_FAR _CeladonMartRoofText1 db "@" CeladonMartRoofText2: ; 4856c (12:456c) db $08 ; asm call CeladonMartRoofScript_483d8 ld a, [$cd37] and a jr z, .asm_914b9 ; 0x48574 ld a, $1 ld [$cc3c], a ld hl, CeladonMartRoofText4 call PrintText call YesNoChoice ld a, [$cc26] and a jr nz, .asm_05aa4 ; 0x48588 call CeladonMartRoofScript_4840c jr .asm_05aa4 ; 0x4858d .asm_914b9 ; 0x4858f ld hl, CeladonMartRoofText3 call PrintText .asm_05aa4 ; 0x48595 jp TextScriptEnd CeladonMartRoofText3: ; 48598 (12:4598) TX_FAR _UnnamedText_48598 db "@" CeladonMartRoofText4: ; 4859d (12:459d) TX_FAR _CeladonMartRoofText4 db "@" CeladonMartRoofText5: ; 485a2 (12:45a2) db $f5 CeladonMartRoofText6: ; 485a3 (12:45a3) TX_FAR _CeladonMartRoofText6 db "@" CeladonMartRoofObject: ; 0x485a8 (size=36) db $42 ; border tile db $1 ; warps db $2, $f, $0, CELADON_MART_5 db $4 ; signs db $1, $a, $3 ; CeladonMartRoofText3 db $1, $b, $4 ; CeladonMartRoofText4 db $2, $c, $5 ; CeladonMartRoofText5 db $2, $d, $6 ; CeladonMartRoofText6 db $2 ; people db SPRITE_BLACK_HAIR_BOY_2, $4 + 4, $a + 4, $ff, $d2, $1 ; person db SPRITE_LITTLE_GIRL, $5 + 4, $5 + 4, $fe, $0, $2 ; person ; warp-to EVENT_DISP $a, $2, $f ; CELADON_MART_5 CeladonMartRoofBlocks: ; 485cc (12:45cc) INCBIN "maps/celadonmartroof.blk" CeladonMartElevator_h: ; 0x485f4 to 0x48600 (12 bytes) (bank=12) (id=127) db $12 ; tileset db CELADON_MART_ELEVATOR_HEIGHT, CELADON_MART_ELEVATOR_WIDTH ; dimensions (y, x) dw CeladonMartElevatorBlocks, CeladonMartElevatorTextPointers, CeladonMartElevatorScript ; blocks, texts, scripts db $00 ; connections dw CeladonMartElevatorObject ; objects CeladonMartElevatorScript: ; 48600 (12:4600) ld hl, $d126 bit 5, [hl] res 5, [hl] push hl call nz, CeladonMartElevatorScript_4861c pop hl bit 7, [hl] res 7, [hl] call nz, Func_48654 xor a ld [$cf0c], a inc a ld [$cc3c], a ret CeladonMartElevatorScript_4861c: ; 4861c (12:461c) ld hl, $d3af ld a, [$d73b] ld b, a ld a, [$d73c] ld c, a call CeladonMartElevatorScript_4862a CeladonMartElevatorScript_4862a: ; 4862a (12:462a) inc hl inc hl ld a, b ld [hli], a ld a, c ld [hli], a ret CeladonMartElevatorScript_48631: ; 48631 (12:4631) ld hl, CeladonMartElavatorFloors ; $4643 call LoadItemList ld hl, CeldaonMartElevatorWarpMaps ; $464a ld de, $cc5b ld bc, $000a jp CopyData CeladonMartElavatorFloors: ; 48643 (12:4643) db $05 ; num elements in list db $56, $57, $58, $59, $5A ; "1F", "2F", "3F", "4F, "5F" db $FF ; terminator CeldaonMartElevatorWarpMaps: ; 4864a (12:464a) ; first byte is warp number ; second byte is map number ; These specify where the player goes after getting out of the elevator. db $05, CELADON_MART_1 db $02, CELADON_MART_2 db $02, CELADON_MART_3 db $02, CELADON_MART_4 db $02, CELADON_MART_5 Func_48654: ; 48654 (12:4654) ld b, BANK(Func_7bf15) ld hl, Func_7bf15 jp Bankswitch CeladonMartElevatorTextPointers: ; 4865c (12:465c) dw CeladonMartElevatorText1 CeladonMartElevatorText1: ; 4865e (12:465e) db $08 ; asm call CeladonMartElevatorScript_48631 ld hl, CeldaonMartElevatorWarpMaps ; $464a ld a, $61 call Predef jp TextScriptEnd CeladonMartElevatorObject: ; 0x4866d (size=23) db $f ; border tile db $2 ; warps db $3, $1, $5, CELADON_MART_1 db $3, $2, $5, CELADON_MART_1 db $1 ; signs db $0, $3, $1 ; CeladonMartElevatorText1 db $0 ; people ; warp-to EVENT_DISP $2, $3, $1 ; CELADON_MART_1 EVENT_DISP $2, $3, $2 ; CELADON_MART_1 CeladonMartElevatorBlocks: ; 48684 (12:4684) INCBIN "maps/celadonmartelevator.blk" CeladonMansion1_h: ; 0x48688 to 0x48694 (12 bytes) (bank=12) (id=128) db $13 ; tileset db CELADON_MANSION_1_HEIGHT, CELADON_MANSION_1_WIDTH ; dimensions (y, x) dw CeladonMansion1Blocks, CeladonMansion1TextPointers, CeladonMansion1Script ; blocks, texts, scripts db $00 ; connections dw CeladonMansion1Object ; objects CeladonMansion1Script: ; 48694 (12:4694) jp EnableAutoTextBoxDrawing CeladonMansion1TextPointers: ; 48697 (12:4697) dw CeladonMansion1Text1 dw CeladonMansion1Text2 dw CeladonMansion1Text3 dw CeladonMansion1Text4 dw CeladonMansion1Text5 Func_486a1: ; 486a1 (12:46a1) call PlayCry jp TextScriptEnd CeladonMansion1Text1: ; 486a7 (12:46a7) TX_FAR _CeladonMansion1Text1 db $08 ; asm ld a, $4d jp Func_486a1 CeladonMansion1Text2: ; 486b1 (12:46b1) TX_FAR _CeladonMansion1Text2 db "@" CeladonMansion1Text3: ; 486b6 (12:46b6) TX_FAR _CeladonMansion1Text3 db $8 ld a, $4 jp Func_486a1 CeladonMansion1Text4: ; 486c0 (12:46c0) TX_FAR _CeladonMansion1Text4 db $8 ld a, $f jp Func_486a1 CeladonMansion1Text5: ; 486ca (12:46ca) TX_FAR _CeladonMansion1Text5 db "@" CeladonMansion1Object: ; 0x486cf (size=71) db $f ; border tile db $5 ; warps db $b, $4, $2, $ff db $b, $5, $2, $ff db $0, $4, $4, $ff db $1, $7, $1, CELADON_MANSION_2 db $1, $2, $2, CELADON_MANSION_2 db $1 ; signs db $9, $4, $5 ; CeladonMansion1Text5 db $4 ; people db SPRITE_SLOWBRO, $5 + 4, $0 + 4, $ff, $d3, $1 ; person db SPRITE_OLD_MEDIUM_WOMAN, $5 + 4, $1 + 4, $ff, $d0, $2 ; person db SPRITE_CLEFAIRY, $8 + 4, $1 + 4, $fe, $2, $3 ; person db SPRITE_SLOWBRO, $4 + 4, $4 + 4, $fe, $1, $4 ; person ; warp-to EVENT_DISP $4, $b, $4 EVENT_DISP $4, $b, $5 EVENT_DISP $4, $0, $4 EVENT_DISP $4, $1, $7 ; CELADON_MANSION_2 EVENT_DISP $4, $1, $2 ; CELADON_MANSION_2 CeladonMansion1Blocks: ; 48716 (12:4716) INCBIN "maps/celadonmansion1.blk" CeladonMansion2_h: ; 0x4872e to 0x4873a (12 bytes) (bank=12) (id=129) db $13 ; tileset db CELADON_MANSION_2_HEIGHT, CELADON_MANSION_2_WIDTH ; dimensions (y, x) dw CeladonMansion2Blocks, CeladonMansion2TextPointers, CeladonMansion2Script ; blocks, texts, scripts db $00 ; connections dw CeladonMansion2Object ; objects CeladonMansion2Script: ; 4873a (12:473a) call EnableAutoTextBoxDrawing ret CeladonMansion2TextPointers: ; 4873e (12:473e) dw CeladonMansion2Text1 CeladonMansion2Text1: ; 48740 (12:4740) TX_FAR _CeladonMansion2Text1 db "@" CeladonMansion2Object: ; 0x48745 (size=39) db $f ; border tile db $4 ; warps db $1, $6, $0, CELADON_MANSION_3 db $1, $7, $3, CELADON_MANSION_1 db $1, $2, $4, CELADON_MANSION_1 db $1, $4, $3, CELADON_MANSION_3 db $1 ; signs db $9, $4, $1 ; CeladonMansion2Text1 db $0 ; people ; warp-to EVENT_DISP $4, $1, $6 ; CELADON_MANSION_3 EVENT_DISP $4, $1, $7 ; CELADON_MANSION_1 EVENT_DISP $4, $1, $2 ; CELADON_MANSION_1 EVENT_DISP $4, $1, $4 ; CELADON_MANSION_3 CeladonMansion2Blocks: ; 4876c (12:476c) INCBIN "maps/celadonmansion2.blk" CeladonMansion3_h: ; 0x48784 to 0x48790 (12 bytes) (bank=12) (id=130) db $13 ; tileset db CELADON_MANSION_3_HEIGHT, CELADON_MANSION_3_WIDTH ; dimensions (y, x) dw CeladonMansion3Blocks, CeladonMansion3TextPointers, CeladonMansion3Script ; blocks, texts, scripts db $00 ; connections dw CeladonMansion3Object ; objects CeladonMansion3Script: ; 48790 (12:4790) jp EnableAutoTextBoxDrawing CeladonMansion3TextPointers: ; 48793 (12:4793) dw ProgrammerText dw GraphicArtistText dw WriterText dw DirectorText dw GameFreakPCText1 dw GameFreakPCText2 dw GameFreakPCText3 dw GameFreakSignText ProgrammerText: ; 487a3 (12:47a3) TX_FAR _ProgrammerText db "@" GraphicArtistText: ; 487a8 (12:47a8) TX_FAR _GraphicArtistText db "@" WriterText: ; 487ad (12:47ad) TX_FAR _WriterText db "@" DirectorText: ; 487b2 (12:47b2) db $08 ; asm ; check pokédex ld hl, wPokedexOwned ld b, wPokedexOwnedEnd - wPokedexOwned call CountSetBits ld a, [$d11e] cp 150 jr nc, .CompletedDex ld hl, .GameDesigner jr .done .CompletedDex ld hl, .CompletedDexText .done call PrintText jp TextScriptEnd .GameDesigner ; 487d0 (12:47d0) TX_FAR _GameDesignerText db "@" .CompletedDexText TX_FAR _CompletedDexText ; 0x9d0ad db $6 db $8 ; asm ld hl, DisplayDiploma ld b, BANK(DisplayDiploma) call Bankswitch ld a, $1 ld [$cc3c], a jp TextScriptEnd GameFreakPCText1: ; 487eb (12:47eb) TX_FAR _CeladonMansion3Text5 db "@" GameFreakPCText2: ; 487f0 (12:47f0) TX_FAR _CeladonMansion3Text6 db "@" GameFreakPCText3: ; 487f5 (12:47f5) TX_FAR _CeladonMansion3Text7 db "@" GameFreakSignText: ; 487fa (12:47fa) TX_FAR _CeladonMansion3Text8 db "@" CeladonMansion3Object: ; 0x487ff (size=72) db $f ; border tile db $4 ; warps db $1, $6, $0, CELADON_MANSION_2 db $1, $7, $0, CELADON_MANSION_4 db $1, $2, $1, CELADON_MANSION_4 db $1, $4, $3, CELADON_MANSION_2 db $4 ; signs db $3, $1, $5 ; CeladonMansion3Text5 db $3, $4, $6 ; CeladonMansion3Text6 db $6, $1, $7 ; CeladonMansion3Text7 db $9, $4, $8 ; CeladonMansion3Text8 db $4 ; people db SPRITE_BIKE_SHOP_GUY, $4 + 4, $0 + 4, $ff, $d1, $1 ; person db SPRITE_MART_GUY, $4 + 4, $3 + 4, $ff, $d1, $2 ; person db SPRITE_BLACK_HAIR_BOY_2, $7 + 4, $0 + 4, $ff, $d1, $3 ; person db SPRITE_LAPRAS_GIVER, $3 + 4, $2 + 4, $ff, $ff, $4 ; person ; warp-to EVENT_DISP $4, $1, $6 ; CELADON_MANSION_2 EVENT_DISP $4, $1, $7 ; CELADON_MANSION_4 EVENT_DISP $4, $1, $2 ; CELADON_MANSION_4 EVENT_DISP $4, $1, $4 ; CELADON_MANSION_2 CeladonMansion3Blocks: ; 48847 (12:4847) INCBIN "maps/celadonmansion3.blk" CeladonMansion4_h: ; 0x4885f to 0x4886b (12 bytes) (bank=12) (id=131) db $13 ; tileset db CELADON_MANSION_4_HEIGHT, CELADON_MANSION_4_WIDTH ; dimensions (y, x) dw CeladonMansion4Blocks, CeladonMansion4TextPointers, CeladonMansion4Script ; blocks, texts, scripts db $00 ; connections dw CeladonMansion4Object ; objects CeladonMansion4Script: ; 4886b (12:486b) jp EnableAutoTextBoxDrawing CeladonMansion4TextPointers: ; 4886e (12:486e) dw CeladonMansion4Text1 CeladonMansion4Text1: ; 48870 (12:4870) TX_FAR _CeladonMansion4Text1 db "@" CeladonMansion4Object: ; 0x48875 (size=31) db $9 ; border tile db $3 ; warps db $1, $6, $1, CELADON_MANSION_3 db $1, $2, $2, CELADON_MANSION_3 db $7, $2, $0, CELADON_MANSION_5 db $1 ; signs db $7, $3, $1 ; CeladonMansion4Text1 db $0 ; people ; warp-to EVENT_DISP $4, $1, $6 ; CELADON_MANSION_3 EVENT_DISP $4, $1, $2 ; CELADON_MANSION_3 EVENT_DISP $4, $7, $2 ; CELADON_MANSION_5 CeladonMansion4Blocks: ; 48894 (12:4894) INCBIN "maps/celadonmansion4.blk" CeladonPokecenter_h: ; 0x488ac to 0x488b8 (12 bytes) (bank=12) (id=133) db $06 ; tileset db CELADON_POKECENTER_HEIGHT, CELADON_POKECENTER_WIDTH ; dimensions (y, x) dw CeladonPokecenterBlocks, CeladonPokecenterTextPointers, CeladonPokecenterScript ; blocks, texts, scripts db $00 ; connections dw CeladonPokecenterObject ; objects CeladonPokecenterScript: ; 488b8 (12:48b8) call Func_22fa jp EnableAutoTextBoxDrawing CeladonPokecenterTextPointers: ; 488be (12:48be) dw CeladonPokecenterText1 dw CeladonPokecenterText2 dw CeladonPokecenterText3 dw CeladonPokecenterText4 CeladonPokecenterText4: ; 488c6 (12:48c6) db $f6 CeladonPokecenterText1: ; 488c7 (12:48c7) db $ff CeladonPokecenterText2: ; 488c8 (12:48c8) TX_FAR _CeladonPokecenterText2 db "@" CeladonPokecenterText3: ; 488cd (12:48cd) TX_FAR _CeladonPokecenterText3 db "@" CeladonPokecenterObject: ; 0x488d2 (size=44) db $0 ; border tile db $2 ; warps db $7, $3, $5, $ff db $7, $4, $5, $ff db $0 ; signs db $4 ; people db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person db SPRITE_GENTLEMAN, $3 + 4, $7 + 4, $fe, $2, $2 ; person db SPRITE_FOULARD_WOMAN, $5 + 4, $a + 4, $fe, $0, $3 ; person db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $4 ; person ; warp-to EVENT_DISP $7, $7, $3 EVENT_DISP $7, $7, $4 CeladonGym_h: ; 0x488fe to 0x4890a (12 bytes) (bank=12) (id=134) db $07 ; tileset db CELADON_GYM_HEIGHT, CELADON_GYM_WIDTH ; dimensions (y, x) dw CeladonGymBlocks, CeladonGymTextPointers, CeladonGymScript ; blocks, texts, scripts db $00 ; connections dw CeladonGymObject ; objects CeladonGymScript: ; 4890a (12:490a) ld hl, $d126 bit 6, [hl] res 6, [hl] call nz, CeladonGymScript_48927 call EnableAutoTextBoxDrawing ld hl, CeladonGymTrainerHeaders ld de, CeladonGymScriptPointers ld a, [W_CELADONGYMCURSCRIPT] call ExecuteCurMapScriptInTable ld [W_CELADONGYMCURSCRIPT], a ret CeladonGymScript_48927: ; 48927 (12:4927) ld hl, Gym4CityName ; $4930 ld de, Gym4LeaderName ; $493d jp LoadGymLeaderAndCityName Gym4CityName: ; 48930 (12:4930) db "CELADON CITY@" Gym4LeaderName: ; 4893d (12:493d) db "ERIKA@" Func_48943: ; 48943 (12:4943) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_CELADONGYMCURSCRIPT], a ld [W_CURMAPSCRIPT], a ret CeladonGymScriptPointers: ; 4894e (12:494e) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle dw CeladonGymScript3 CeladonGymScript3: ; 48956 (12:4956) ld a, [W_ISINBATTLE] ; $d057 cp $ff jp z, Func_48943 ld a, $f0 ld [wJoypadForbiddenButtonsMask], a Func_48963: ; 48963 (12:4963) ld a, $9 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld hl, $d77c set 1, [hl] ld bc, (TM_21 << 8) | 1 call GiveItem jr nc, .BagFull ld a, $a ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld hl, $d77c set 0, [hl] jr .asm_4898c .BagFull ld a, $b ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID .asm_4898c ld hl, W_OBTAINEDBADGES ; $d356 set 3, [hl] ld hl, $d72a set 3, [hl] ld a, [$d77c] or $fc ld [$d77c], a ld hl, $d77d set 0, [hl] jp Func_48943 CeladonGymTextPointers: ; 489a6 (12:49a6) dw CeladonGymText1 dw CeladonGymText2 dw CeladonGymText3 dw CeladonGymText4 dw CeladonGymText5 dw CeladonGymText6 dw CeladonGymText7 dw CeladonGymText8 dw CeladonGymText9 dw TM21Text dw TM21NoRoomText CeladonGymTrainerHeaders: ; 489bc (12:49bc) CeladonGymTrainerHeader0: ; 489bc (12:49bc) db $2 ; flag's bit db ($2 << 4) ; trainer's view range dw $d77c ; flag's byte dw CeladonGymBattleText2 ; 0x4a8b TextBeforeBattle dw CeladonGymAfterBattleText2 ; 0x4a95 TextAfterBattle dw CeladonGymEndBattleText2 ; 0x4a90 TextEndBattle dw CeladonGymEndBattleText2 ; 0x4a90 TextEndBattle CeladonGymTrainerHeader2: ; 489c8 (12:49c8) db $3 ; flag's bit db ($2 << 4) ; trainer's view range dw $d77c ; flag's byte dw CeladonGymBattleText3 ; 0x4aa4 TextBeforeBattle dw CeladonGymAfterBattleText3 ; 0x4aae TextAfterBattle dw CeladonGymEndBattleText3 ; 0x4aa9 TextEndBattle dw CeladonGymEndBattleText3 ; 0x4aa9 TextEndBattle CeladonGymTrainerHeader3: ; 489d4 (12:49d4) db $4 ; flag's bit db ($4 << 4) ; trainer's view range dw $d77c ; flag's byte dw CeladonGymBattleText4 ; 0x4abd TextBeforeBattle dw CeladonGymAfterBattleText4 ; 0x4ac7 TextAfterBattle dw CeladonGymEndBattleText4 ; 0x4ac2 TextEndBattle dw CeladonGymEndBattleText4 ; 0x4ac2 TextEndBattle CeladonGymTrainerHeader4: ; 489e0 (12:49e0) db $5 ; flag's bit db ($4 << 4) ; trainer's view range dw $d77c ; flag's byte dw CeladonGymBattleText5 ; 0x4ad6 TextBeforeBattle dw CeladonGymAfterBattleText5 ; 0x4ae0 TextAfterBattle dw CeladonGymEndBattleText5 ; 0x4adb TextEndBattle dw CeladonGymEndBattleText5 ; 0x4adb TextEndBattle CeladonGymTrainerHeader5: ; 489ec (12:49ec) db $6 ; flag's bit db ($2 << 4) ; trainer's view range dw $d77c ; flag's byte dw CeladonGymBattleText6 ; 0x4aef TextBeforeBattle dw CeladonGymAfterBattleText6 ; 0x4af9 TextAfterBattle dw CeladonGymEndBattleText6 ; 0x4af4 TextEndBattle dw CeladonGymEndBattleText6 ; 0x4af4 TextEndBattle CeladonGymTrainerHeader6: ; 489f8 (12:49f8) db $7 ; flag's bit db ($2 << 4) ; trainer's view range dw $d77c ; flag's byte dw CeladonGymBattleText7 ; 0x4b08 TextBeforeBattle dw CeladonGymAfterBattleText7 ; 0x4b12 TextAfterBattle dw CeladonGymEndBattleText7 ; 0x4b0d TextEndBattle dw CeladonGymEndBattleText7 ; 0x4b0d TextEndBattle CeladonGymTrainerHeader7: ; 48a04 (12:4a04) db $8 ; flag's bit db ($3 << 4) ; trainer's view range dw $d77c ; flag's byte dw CeladonGymBattleText8 ; 0x4b21 TextBeforeBattle dw CeladonGymAfterBattleText8 ; 0x4b2b TextAfterBattle dw CeladonGymEndBattleText8 ; 0x4b26 TextEndBattle dw CeladonGymEndBattleText8 ; 0x4b26 TextEndBattle db $ff CeladonGymText1: ; 48a11 (12:4a11) db $08 ; asm ld a, [$d77c] bit 1, a jr z, .asm_16064 ; 0x48a17 bit 0, a jr nz, .asm_3b22c ; 0x48a1b call z, Func_48963 call DisableWaitingAfterTextDisplay jr .asm_96252 ; 0x48a23 .asm_3b22c ; 0x48a25 ld hl, UnnamedText_48a68 call PrintText jr .asm_96252 ; 0x48a2b .asm_16064 ; 0x48a2d ld hl, UnnamedText_48a5e call PrintText ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, UnnamedText_48a63 ld de, UnnamedText_48a63 call PreBattleSaveRegisters ldh a, [$8c] ld [$cf13], a call EngageMapTrainer call InitBattleEnemyParameters ld a, $4 ld [$d05c], a ld a, $3 ld [W_CELADONGYMCURSCRIPT], a ld [W_CURMAPSCRIPT], a .asm_96252 ; 0x48a5b jp TextScriptEnd UnnamedText_48a5e: ; 48a5e (12:4a5e) TX_FAR _UnnamedText_48a5e db "@" UnnamedText_48a63: ; 48a63 (12:4a63) TX_FAR _UnnamedText_48a63 db "@" UnnamedText_48a68: ; 48a68 (12:4a68) TX_FAR _UnnamedText_48a68 db "@" CeladonGymText9: ; 48a6d (12:4a6d) UnnamedText_48a6d: ; 48a6d (12:4a6d) TX_FAR _UnnamedText_48a6d db "@" TM21Text: ; 48a72 (12:4a72) TX_FAR _ReceivedTM21Text ; 0x9d50c db $0B TX_FAR _TM21ExplanationText ; 0x9d520 db "@" TM21NoRoomText: ; 48a7c (12:4a7c) TX_FAR _TM21NoRoomText db "@" CeladonGymText2: ; 48a81 (12:4a81) db $08 ; asm ld hl, CeladonGymTrainerHeader0 call TalkToTrainer jp TextScriptEnd CeladonGymBattleText2: ; 48a8b (12:4a8b) TX_FAR _CeladonGymBattleText2 db "@" CeladonGymEndBattleText2: ; 48a90 (12:4a90) TX_FAR _CeladonGymEndBattleText2 db "@" CeladonGymAfterBattleText2: ; 48a95 (12:4a95) TX_FAR _CeladonGymAfterBattleText2 db "@" CeladonGymText3: ; 48a9a (12:4a9a) db $08 ; asm ld hl, CeladonGymTrainerHeader2 call TalkToTrainer jp TextScriptEnd CeladonGymBattleText3: ; 48aa4 (12:4aa4) TX_FAR _CeladonGymBattleText3 db "@" CeladonGymEndBattleText3: ; 48aa9 (12:4aa9) TX_FAR _CeladonGymEndBattleText3 db "@" CeladonGymAfterBattleText3: ; 48aae (12:4aae) TX_FAR _CeladonGymAfterBattleText3 db "@" CeladonGymText4: ; 48ab3 (12:4ab3) db $08 ; asm ld hl, CeladonGymTrainerHeader3 call TalkToTrainer jp TextScriptEnd CeladonGymBattleText4: ; 48abd (12:4abd) TX_FAR _CeladonGymBattleText4 db "@" CeladonGymEndBattleText4: ; 48ac2 (12:4ac2) TX_FAR _CeladonGymEndBattleText4 db "@" CeladonGymAfterBattleText4: ; 48ac7 (12:4ac7) TX_FAR _CeladonGymAfterBattleText4 db "@" CeladonGymText5: ; 48acc (12:4acc) db $08 ; asm ld hl, CeladonGymTrainerHeader4 call TalkToTrainer jp TextScriptEnd CeladonGymBattleText5: ; 48ad6 (12:4ad6) TX_FAR _CeladonGymBattleText5 db "@" CeladonGymEndBattleText5: ; 48adb (12:4adb) TX_FAR _CeladonGymEndBattleText5 db "@" CeladonGymAfterBattleText5: ; 48ae0 (12:4ae0) TX_FAR _CeladonGymAfterBattleText5 db "@" CeladonGymText6: ; 48ae5 (12:4ae5) db $08 ; asm ld hl, CeladonGymTrainerHeader5 call TalkToTrainer jp TextScriptEnd CeladonGymBattleText6: ; 48aef (12:4aef) TX_FAR _CeladonGymBattleText6 db "@" CeladonGymEndBattleText6: ; 48af4 (12:4af4) TX_FAR _CeladonGymEndBattleText6 db "@" CeladonGymAfterBattleText6: ; 48af9 (12:4af9) TX_FAR _CeladonGymAfterBattleText6 db "@" CeladonGymText7: ; 48afe (12:4afe) db $08 ; asm ld hl, CeladonGymTrainerHeader6 call TalkToTrainer jp TextScriptEnd CeladonGymBattleText7: ; 48b08 (12:4b08) TX_FAR _CeladonGymBattleText7 db "@" CeladonGymEndBattleText7: ; 48b0d (12:4b0d) TX_FAR _CeladonGymEndBattleText7 db "@" CeladonGymAfterBattleText7: ; 48b12 (12:4b12) TX_FAR _CeladonGymAfterBattleText7 db "@" CeladonGymText8: ; 48b17 (12:4b17) db $08 ; asm ld hl, CeladonGymTrainerHeader7 call TalkToTrainer jp TextScriptEnd CeladonGymBattleText8: ; 48b21 (12:4b21) TX_FAR _CeladonGymBattleText8 db "@" CeladonGymEndBattleText8: ; 48b26 (12:4b26) TX_FAR _CeladonGymEndBattleText8 db "@" CeladonGymAfterBattleText8: ; 48b2b (12:4b2b) TX_FAR _CeladonGymAfterBattleText8 db "@" CeladonGymObject: ; 0x48b30 (size=84) db $3 ; border tile db $2 ; warps db $11, $4, $6, $ff db $11, $5, $6, $ff db $0 ; signs db $8 ; people db SPRITE_ERIKA, $3 + 4, $4 + 4, $ff, $d0, $41, ERIKA + $C8, $1 ; trainer db SPRITE_LASS, $b + 4, $2 + 4, $ff, $d3, $42, LASS + $C8, $11 ; trainer db SPRITE_FOULARD_WOMAN, $a + 4, $7 + 4, $ff, $d2, $43, BEAUTY + $C8, $1 ; trainer db SPRITE_LASS, $5 + 4, $9 + 4, $ff, $d0, $44, JR__TRAINER_F + $C8, $b ; trainer db SPRITE_FOULARD_WOMAN, $5 + 4, $1 + 4, $ff, $d0, $45, BEAUTY + $C8, $2 ; trainer db SPRITE_LASS, $3 + 4, $6 + 4, $ff, $d0, $46, LASS + $C8, $12 ; trainer db SPRITE_FOULARD_WOMAN, $3 + 4, $3 + 4, $ff, $d0, $47, BEAUTY + $C8, $3 ; trainer db SPRITE_LASS, $3 + 4, $5 + 4, $ff, $d0, $48, COOLTRAINER_F + $C8, $1 ; trainer ; warp-to EVENT_DISP $5, $11, $4 EVENT_DISP $5, $11, $5 CeladonGymBlocks: ; 48b84 (12:4b84) INCBIN "maps/celadongym.blk" CeladonGameCorner_h: ; 0x48bb1 to 0x48bbd (12 bytes) (bank=12) (id=135) db $12 ; tileset db GAME_CORNER_HEIGHT, GAME_CORNER_WIDTH ; dimensions (y, x) dw CeladonGameCornerBlocks, CeladonGameCornerTextPointers, CeladonGameCornerScript ; blocks, texts, scripts db $00 ; connections dw CeladonGameCornerObject ; objects CeladonGameCornerScript: ; 48bbd (12:4bbd) call CeladonGameCornerScript_48bcf call Func_48bec call EnableAutoTextBoxDrawing ld hl, CeladonGameCornerScriptPointers ld a, [W_CELADONGAMECORNERCURSCRIPT] jp CallFunctionInTable CeladonGameCornerScript_48bcf: ; 48bcf (12:4bcf) ld hl, $d126 bit 6, [hl] res 6, [hl] ret z call GenRandom ld a, [$ffd3] cp $7 jr nc, .asm_48be2 ld a, $8 .asm_48be2 srl a srl a srl a ld [$cd05], a ret Func_48bec: ; 48bec (12:4bec) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld a, [$d77e] bit 1, a ret nz ld a, $2a ld [$d09f], a ld bc, $0208 ld a, $17 jp Predef CeladonGameCornerScript_48c07: ; 48c07 (12:4c07) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_CELADONGAMECORNERCURSCRIPT], a ld [W_CURMAPSCRIPT], a ret CeladonGameCornerScriptPointers: ; 48c12 (12:4c12) dw CeladonGameCornerScript0 dw CeladonGameCornerScript1 dw CeladonGameCornerScript2 CeladonGameCornerScript0: ; 48c18 (12:4c18) ret CeladonGameCornerScript1: ; 48c19 (12:4c19) ld a, [W_ISINBATTLE] cp $ff jp z, CeladonGameCornerScript_48c07 ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld a, $d ld [H_SPRITEHEIGHT], a call DisplayTextID ld a, $b ld [H_SPRITEHEIGHT], a call SetSpriteMovementBytesToFF ld de, MovementData_48c5a ld a, [$d361] cp $6 jr nz, .asm_48c43 ld de, MovementData_48c63 jr .asm_48c4d .asm_48c43 ld a, [$d362] cp $8 jr nz, .asm_48c4d ld de, MovementData_48c63 .asm_48c4d ld a, $b ld [H_DOWNARROWBLINKCNT2], a call MoveSprite ld a, $2 ld [W_CELADONGAMECORNERCURSCRIPT], a ret MovementData_48c5a: ; 48c5a (12:4c5a) db $00,$C0,$C0,$40,$C0,$C0,$C0,$C0,$FF MovementData_48c63: ; 48c63 (12:4c63) db $C0,$C0,$C0,$C0,$C0,$FF CeladonGameCornerScript2: ; 48c69 (12:4c69) ld a, [$d730] bit 0, a ret nz xor a ld [wJoypadForbiddenButtonsMask], a ld a, $46 ld [$cc4d], a ld a, $11 call Predef ld hl, $d126 set 5, [hl] set 6, [hl] ld a, $0 ld [W_CELADONGAMECORNERCURSCRIPT], a ret CeladonGameCornerTextPointers: ; 48c8a (12:4c8a) dw CeladonGameCornerText1 dw CeladonGameCornerText2 dw CeladonGameCornerText3 dw CeladonGameCornerText4 dw CeladonGameCornerText5 dw CeladonGameCornerText6 dw CeladonGameCornerText7 dw CeladonGameCornerText8 dw CeladonGameCornerText9 dw CeladonGameCornerText10 dw CeladonGameCornerText11 dw CeladonGameCornerText12 dw CeladonGameCornerText13 CeladonGameCornerText1: ; 48ca4 (12:4ca4) TX_FAR _CeladonGameCornerText1 db "@" CeladonGameCornerText2: ; 48ca9 (12:4ca9) db $08 ; asm call Func_48f1e ld hl, UnnamedText_48d22 call PrintText call YesNoChoice ld a, [$cc26] and a jr nz, .asm_c650b ; 0x48cba ld b,COIN_CASE call IsItemInBag jr z, .asm_ed086 ; 0x48cc1 call Has9990Coins jr nc, .asm_31338 ; 0x48cc6 xor a ldh [$9f], a ldh [$a1], a ld a, $10 ldh [$a0], a call HasEnoughMoney jr nc, .asm_b6ef0 ; 0x48cd4 ld hl, UnnamedText_48d31 ; $4d31 jr .asm_e2afd ; 0x48cd9 .asm_b6ef0 ; 0x48cdb xor a ldh [$9f], a ldh [$a1], a ld a, $10 ldh [$a0], a ld hl, $ffa1 ld de, $d349 ld c, $3 ld a, $c call Predef xor a ldh [$9f], a ldh [$a0], a ld a, $50 ldh [$a1], a ld de, $d5a5 ld hl, $ffa1 ld c, $2 ld a, $b call Predef call Func_48f1e ld hl, UnnamedText_48d27 jr .asm_e2afd ; 0x48d0d .asm_c650b ; 0x48d0f ld hl, UnnamedText_48d2c jr .asm_e2afd ; 0x48d12 .asm_31338 ; 0x48d14 ld hl, UnnamedText_48d36 jr .asm_e2afd ; 0x48d17 .asm_ed086 ; 0x48d19 ld hl, UnnamedText_48d3b .asm_e2afd ; 0x48d1c call PrintText jp TextScriptEnd UnnamedText_48d22: ; 48d22 (12:4d22) TX_FAR _UnnamedText_48d22 db "@" UnnamedText_48d27: ; 48d27 (12:4d27) TX_FAR _UnnamedText_48d27 db "@" UnnamedText_48d2c: ; 48d2c (12:4d2c) TX_FAR _UnnamedText_48d2c db "@" UnnamedText_48d31: ; 48d31 (12:4d31) TX_FAR _UnnamedText_48d31 db "@" UnnamedText_48d36: ; 48d36 (12:4d36) TX_FAR _UnnamedText_48d36 db "@" UnnamedText_48d3b: ; 48d3b (12:4d3b) TX_FAR _UnnamedText_48d3b db "@" CeladonGameCornerText3: ; 48d40 (12:4d40) TX_FAR _CeladonGameCornerText3 db "@" CeladonGameCornerText4: ; 48d45 (12:4d45) TX_FAR _CeladonGameCornerText4 db "@" CeladonGameCornerText5: ; 48d4a (12:4d4a) db $08 ; asm ld a, [$d77e] bit 2, a jr nz, .asm_d0957 ; 0x48d50 ld hl, UnnamedText_48d9c call PrintText ld b, COIN_CASE call IsItemInBag jr z, .asm_5aef9 ; 0x48d5d call Has9990Coins jr nc, .asm_98546 ; 0x48d62 xor a ldh [$9f], a ldh [$a0], a ld a, $10 ldh [$a1], a ld de, $d5a5 ld hl, $ffa1 ld c, $2 ld a, $b call Predef ld hl, $d77e set 2, [hl] ld a, $1 ld [$cc3c], a ld hl, Received10CoinsText jr .asm_c7d1a ; 0x48d87 .asm_d0957 ; 0x48d89 ld hl, UnnamedText_48dac jr .asm_c7d1a ; 0x48d8c .asm_98546 ; 0x48d8e ld hl, UnnamedText_48da7 jr .asm_c7d1a ; 0x48d91 .asm_5aef9 ; 0x48d93 ld hl, UnnamedText_48f19 .asm_c7d1a ; 0x48d96 call PrintText jp TextScriptEnd UnnamedText_48d9c: ; 48d9c (12:4d9c) TX_FAR _UnnamedText_48d9c db "@" Received10CoinsText: ; 48da1 (12:4da1) TX_FAR _Received10CoinsText ; 0x9daa9 db $0B, "@" UnnamedText_48da7: ; 48da7 (12:4da7) TX_FAR _UnnamedText_48da7 db "@" UnnamedText_48dac: ; 48dac (12:4dac) TX_FAR _UnnamedText_48dac db "@" CeladonGameCornerText6: ; 48db1 (12:4db1) TX_FAR _CeladonGameCornerText6 db "@" CeladonGameCornerText7: ; 48db6 (12:4db6) db $08 ; asm ld a, [$d77c] bit 1, a ld hl, UnnamedText_48dca ; $4dca jr z, .asm_be3fd ; 0x48dbf ld hl, UnnamedText_48dcf ; $4dcf .asm_be3fd ; 0x48dc4 call PrintText jp TextScriptEnd UnnamedText_48dca: ; 48dca (12:4dca) TX_FAR _UnnamedText_48dca db "@" UnnamedText_48dcf: ; 48dcf (12:4dcf) TX_FAR _UnnamedText_48dcf db "@" CeladonGameCornerText8: ; 48dd4 (12:4dd4) TX_FAR _CeladonGameCornerText8 db "@" CeladonGameCornerText9: ; 48dd9 (12:4dd9) db $08 ; asm ld a, [$d77e] bit 4, a jr nz, .asm_ed8bc ; 0x48ddf ld hl, UnnamedText_48e26 call PrintText ld b, COIN_CASE call IsItemInBag jr z, .asm_df794 ; 0x48dec call Has9990Coins jr nc, .asm_f17c3 ; 0x48df1 xor a ldh [$9f], a ldh [$a0], a ld a, $20 ldh [$a1], a ld de, $d5a5 ld hl, $ffa1 ld c, $2 ld a, $b call Predef ld hl, $d77e set 4, [hl] ld hl, Received20CoinsText jr .asm_0ddc2 ; 0x48e11 .asm_ed8bc ; 0x48e13 ld hl, UnnamedText_48e36 jr .asm_0ddc2 ; 0x48e16 .asm_f17c3 ; 0x48e18 ld hl, UnnamedText_48e31 jr .asm_0ddc2 ; 0x48e1b .asm_df794 ; 0x48e1d ld hl, UnnamedText_48f19 .asm_0ddc2 ; 0x48e20 call PrintText jp TextScriptEnd UnnamedText_48e26: ; 48e26 (12:4e26) TX_FAR _UnnamedText_48e26 db "@" Received20CoinsText: ; 48e2b (12:4e2b) TX_FAR _Received20CoinsText ; 0x9dc4f db $0B, "@" UnnamedText_48e31: ; 48e31 (12:4e31) TX_FAR _UnnamedText_48e31 db "@" UnnamedText_48e36: ; 48e36 (12:4e36) TX_FAR _UnnamedText_48e36 db "@" CeladonGameCornerText10: ; 48e3b (12:4e3b) db $08 ; asm ld a, [$d77e] bit 3, a jr nz, .asm_ff080 ; 0x48e41 ld hl, UnnamedText_48e88 ; $4e88 call PrintText ld b,COIN_CASE call IsItemInBag jr z, .asm_4fb0c ; 0x48e4e call Has9990Coins jr z, .asm_9505a ; 0x48e53 xor a ldh [$9f], a ldh [$a0], a ld a, $20 ldh [$a1], a ld de, $d5a5 ld hl, $ffa1 ld c, $2 ld a, $b call Predef ld hl, $d77e set 3, [hl] ld hl, UnnamedText_48e8d jr .asm_78d65 ; 0x48e73 .asm_ff080 ; 0x48e75 ld hl, UnnamedText_48e98 jr .asm_78d65 ; 0x48e78 .asm_9505a ; 0x48e7a ld hl, UnnamedText_48e93 jr .asm_78d65 ; 0x48e7d .asm_4fb0c ; 0x48e7f ld hl, UnnamedText_48f19 .asm_78d65 ; 0x48e82 call PrintText jp TextScriptEnd UnnamedText_48e88: ; 48e88 (12:4e88) TX_FAR _UnnamedText_48e88 db "@" UnnamedText_48e8d: ; 48e8d (12:4e8d) TX_FAR _UnnamedText_48e8d ; 0x9dceb db $0B, "@" UnnamedText_48e93: ; 48e93 (12:4e93) TX_FAR _UnnamedText_48e93 db "@" UnnamedText_48e98: ; 48e98 (12:4e98) TX_FAR _UnnamedText_48e98 db "@" CeladonGameCornerText11: ; 48e9d (12:4e9d) db $08 ; asm ld hl, UnnamedText_48ece call PrintText ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, UnnamedText_48ed3 ld de, UnnamedText_48ed3 call PreBattleSaveRegisters ldh a, [$8c] ld [$cf13], a call EngageMapTrainer call InitBattleEnemyParameters xor a ldh [$b4], a ldh [$b3], a ldh [$b2], a ld a, $1 ld [W_CELADONGAMECORNERCURSCRIPT], a jp TextScriptEnd UnnamedText_48ece: ; 48ece (12:4ece) TX_FAR _UnnamedText_48ece db "@" UnnamedText_48ed3: ; 48ed3 (12:4ed3) TX_FAR _UnnamedText_48ed3 db "@" CeladonGameCornerText13: ; 48ed8 (12:4ed8) TX_FAR _UnnamedText_48ed8 db "@" CeladonGameCornerText12: ; 48edd (12:4edd) db $08 ; asm ld a, $1 ld [$cc3c], a ld hl, UnnamedText_48f09 call PrintText call WaitForSoundToFinish ld a, $ad call PlaySound call WaitForSoundToFinish ld hl, $d77e set 1, [hl] ld a, $43 ld [$d09f], a ld bc, $0208 ld a, $17 call Predef jp TextScriptEnd UnnamedText_48f09: ; 48f09 (12:4f09) TX_FAR _UnnamedText_48f09 ; 0x9ddb0 db $8 ld a, $9d call PlaySound call WaitForSoundToFinish jp TextScriptEnd UnnamedText_48f19: ; 48f19 (12:4f19) TX_FAR _UnnamedText_48f19 db "@" Func_48f1e: ; 48f1e (12:4f1e) ld hl, $d730 set 6, [hl] FuncCoord 11, 0 ; $c3ab ld hl, Coord ld b, $5 ld c, $7 call TextBoxBorder call UpdateSprites FuncCoord 12, 1 ; $c3c0 ld hl, Coord ld b, $4 ld c, $7 call ClearScreenArea FuncCoord 12, 2 ; $c3d4 ld hl, Coord ld de, GameCornerMoneyText ; $4f7a call PlaceString FuncCoord 12, 3 ; $c3e8 ld hl, Coord ld de, GameCornerBlankText1 ; $4f85 call PlaceString FuncCoord 12, 3 ; $c3e8 ld hl, Coord ld de, $d347 ld c, $a3 call PrintBCDNumber FuncCoord 12, 4 ; $c3fc ld hl, Coord ld de, GameCornerCoinText ; $4f80 call PlaceString FuncCoord 12, 5 ; $c410 ld hl, Coord ld de, GameCornerBlankText2 ; $4f8d call PlaceString FuncCoord 15, 5 ; $c413 ld hl, Coord ld de, $d5a4 ld c, $82 call PrintBCDNumber ld hl, $d730 res 6, [hl] ret GameCornerMoneyText: ; 48f7a (12:4f7a) db "MONEY@" GameCornerCoinText: ; 48f80 (12:4f80) db "COIN@" GameCornerBlankText1: ; 48f85 (12:4f85) db " @" GameCornerBlankText2: ; 48f8d (12:4f8d) db " @" Has9990Coins: ; 48f95 (12:4f95) ld a, $99 ld [$ff00+$a0], a ld a, $90 ld [$ff00+$a1], a jp HasEnoughCoins CeladonGameCornerObject: ; 0x48fa0 (size=99) db $f ; border tile db $3 ; warps db $11, $f, $7, $ff db $11, $10, $7, $ff db $4, $11, $1, ROCKET_HIDEOUT_1 db $1 ; signs db $4, $9, $c ; CeladonGameCornerText12 db $b ; people db SPRITE_FOULARD_WOMAN, $6 + 4, $2 + 4, $ff, $d0, $1 ; person db SPRITE_MART_GUY, $6 + 4, $5 + 4, $ff, $d0, $2 ; person db SPRITE_FAT_BALD_GUY, $a + 4, $2 + 4, $ff, $d2, $3 ; person db SPRITE_FOULARD_WOMAN, $d + 4, $2 + 4, $ff, $d2, $4 ; person db SPRITE_FISHER, $b + 4, $5 + 4, $ff, $d3, $5 ; person db SPRITE_MOM_GEISHA, $b + 4, $8 + 4, $ff, $d2, $6 ; person db SPRITE_GYM_HELPER, $e + 4, $8 + 4, $ff, $d2, $7 ; person db SPRITE_GAMBLER, $f + 4, $b + 4, $ff, $d3, $8 ; person db SPRITE_MART_GUY, $b + 4, $e + 4, $ff, $d2, $9 ; person db SPRITE_GENTLEMAN, $d + 4, $11 + 4, $ff, $d3, $a ; person db SPRITE_ROCKET, $5 + 4, $9 + 4, $ff, $d1, $4b, ROCKET + $C8, $7 ; trainer ; warp-to EVENT_DISP $a, $11, $f EVENT_DISP $a, $11, $10 EVENT_DISP $a, $4, $11 ; ROCKET_HIDEOUT_1 CeladonGameCornerBlocks: ; 49003 (12:5003) INCBIN "maps/celadongamecorner.blk" CeladonMart5_h: ; 0x4905d to 0x49069 (12 bytes) (bank=12) (id=136) db $12 ; tileset db CELADON_MART_5_HEIGHT, CELADON_MART_5_WIDTH ; dimensions (y, x) dw CeladonMart5Blocks, CeladonMart5TextPointers, CeladonMart5Script ; blocks, texts, scripts db $00 ; connections dw CeladonMart5Object ; objects CeladonMart5Script: ; 49069 (12:5069) jp EnableAutoTextBoxDrawing CeladonMart5TextPointers: ; 4906c (12:506c) dw CeladonMart5Text1 dw CeladonMart5Text2 dw CeladonMart5Text3 dw CeladonMart5Text4 dw CeladonMart5Text5 CeladonMart5Text1: ; 49076 (12:5076) TX_FAR _CeladonMart5Text1 db "@" CeladonMart5Text2: ; 4907b (12:507b) TX_FAR _CeladonMart5Text2 db "@" CeladonMart5Text5: ; 49080 (12:5080) TX_FAR _CeladonMart5Text5 db "@" CeladonMart5Object: ; 0x49085 (size=55) db $f ; border tile db $3 ; warps db $1, $c, $0, CELADON_MART_ROOF db $1, $10, $1, CELADON_MART_4 db $1, $1, $0, CELADON_MART_ELEVATOR db $1 ; signs db $1, $e, $5 ; CeladonMart5Text5 db $4 ; people db SPRITE_GENTLEMAN, $5 + 4, $e + 4, $fe, $1, $1 ; person db SPRITE_SAILOR, $6 + 4, $2 + 4, $ff, $ff, $2 ; person db SPRITE_MART_GUY, $3 + 4, $5 + 4, $ff, $d0, $3 ; person db SPRITE_MART_GUY, $3 + 4, $6 + 4, $ff, $d0, $4 ; person ; warp-to EVENT_DISP $a, $1, $c ; CELADON_MART_ROOF EVENT_DISP $a, $1, $10 ; CELADON_MART_4 EVENT_DISP $a, $1, $1 ; CELADON_MART_ELEVATOR CeladonMart5Blocks: ; 490bc (12:50bc) INCBIN "maps/celadonmart5.blk" CeladonPrizeRoom_h: ; 0x490e4 to 0x490f0 (12 bytes) (bank=12) (id=137) db $12 ; tileset db CELADONPRIZE_ROOM_HEIGHT, CELADONPRIZE_ROOM_WIDTH ; dimensions (y, x) dw CeladonPrizeRoomBlocks, CeladonPrizeRoomTextPointers, CeladonPrizeRoomScript ; blocks, texts, scripts db $00 ; connections dw CeladonPrizeRoomObject ; objects CeladonPrizeRoomScript: ; 490f0 (12:50f0) jp EnableAutoTextBoxDrawing CeladonPrizeRoomTextPointers: ; 490f3 (12:50f3) dw CeladonPrizeRoomText1 dw CeladonPrizeRoomText2 dw CeladonPrizeRoomText3 dw CeladonPrizeRoomText3 dw CeladonPrizeRoomText3 CeladonPrizeRoomText1: ; 490fd (12:50fd) TX_FAR _CeladonPrizeRoomText1 db "@" CeladonPrizeRoomText2: ; 49102 (12:5102) TX_FAR _CeladonPrizeRoomText2 db "@" CeladonPrizeRoomText3: ; 49107 (12:5107) db $f7 CeladonPrizeRoomObject: ; 0x49108 (size=41) db $f ; border tile db $2 ; warps db $7, $4, $9, $ff db $7, $5, $9, $ff db $3 ; signs db $2, $2, $3 ; CeladonPrizeRoomText3 db $2, $4, $4 ; CeladonPrizeRoomText4 db $2, $6, $5 ; CeladonPrizeRoomText5 db $2 ; people db SPRITE_BALDING_GUY, $4 + 4, $1 + 4, $ff, $ff, $1 ; person db SPRITE_GAMBLER, $3 + 4, $7 + 4, $fe, $2, $2 ; person ; warp-to EVENT_DISP $5, $7, $4 EVENT_DISP $5, $7, $5 CeladonPrizeRoomBlocks: ; 49131 (12:5131) INCBIN "maps/celadonprizeroom.blk" CeladonDiner_h: ; 0x49145 to 0x49151 (12 bytes) (bank=12) (id=138) db $12 ; tileset db CELADON_DINER_HEIGHT, CELADON_DINER_WIDTH ; dimensions (y, x) dw CeladonDinerBlocks, CeladonDinerTextPointers, CeladonDinerScript ; blocks, texts, scripts db $00 ; connections dw CeladonDinerObject ; objects CeladonDinerScript: ; 49151 (12:5151) call EnableAutoTextBoxDrawing ret CeladonDinerTextPointers: ; 49155 (12:5155) dw CeladonDinerText1 dw CeladonDinerText2 dw CeladonDinerText3 dw CeladonDinerText4 dw CeladonDinerText5 CeladonDinerText1: ; 4915f (12:515f) TX_FAR _CeladonDinerText1 db "@" CeladonDinerText2: ; 49164 (12:5164) TX_FAR _CeladonDinerText2 db "@" CeladonDinerText3: ; 49169 (12:5169) TX_FAR _CeladonDinerText3 db "@" CeladonDinerText4: ; 4916e (12:516e) TX_FAR _CeladonDinerText4 db "@" CeladonDinerText5: ; 49173 (12:5173) db $08 ; asm ld a, [$d783] bit 0, a jr nz, .asm_eb14d ; 0x49179 ld hl, UnnamedText_491a7 call PrintText ld bc, (COIN_CASE << 8) | 1 call GiveItem jr nc, .BagFull ld hl, $d783 set 0, [hl] ld hl, ReceivedCoinCaseText call PrintText jr .asm_68b61 ; 0x49194 .BagFull ld hl, CoinCaseNoRoomText call PrintText jr .asm_68b61 ; 0x4919c .asm_eb14d ; 0x4919e ld hl, UnnamedText_491b7 call PrintText .asm_68b61 ; 0x491a4 jp TextScriptEnd UnnamedText_491a7: ; 491a7 (12:51a7) TX_FAR _UnnamedText_491a7 db "@" ReceivedCoinCaseText: ; 491ac (12:51ac) TX_FAR _ReceivedCoinCaseText ; 0x9e07a db $11, "@" CoinCaseNoRoomText: ; 491b2 (12:51b2) TX_FAR _CoinCaseNoRoomText db "@" UnnamedText_491b7: ; 491b7 (12:51b7) TX_FAR _UnnamedText_491b7 db "@" CeladonDinerObject: ; 0x491bc (size=50) db $f ; border tile db $2 ; warps db $7, $3, $a, $ff db $7, $4, $a, $ff db $0 ; signs db $5 ; people db SPRITE_COOK, $5 + 4, $8 + 4, $fe, $2, $1 ; person db SPRITE_MOM_GEISHA, $2 + 4, $7 + 4, $ff, $ff, $2 ; person db SPRITE_FAT_BALD_GUY, $4 + 4, $1 + 4, $ff, $d0, $3 ; person db SPRITE_FISHER2, $3 + 4, $5 + 4, $ff, $d3, $4 ; person db SPRITE_GYM_HELPER, $1 + 4, $0 + 4, $ff, $d0, $5 ; person ; warp-to EVENT_DISP $5, $7, $3 EVENT_DISP $5, $7, $4 CeladonDinerBlocks: ; 491ee (12:51ee) INCBIN "maps/celadondiner.blk" CeladonHouse_h: ; 0x49202 to 0x4920e (12 bytes) (bank=12) (id=139) db $13 ; tileset db CELADON_HOUSE_HEIGHT, CELADON_HOUSE_WIDTH ; dimensions (y, x) dw CeladonHouseBlocks, CeladonHouseTextPointers, CeladonHouseScript ; blocks, texts, scripts db $00 ; connections dw CeladonHouseObject ; objects CeladonHouseScript: ; 4920e (12:520e) call EnableAutoTextBoxDrawing ret CeladonHouseTextPointers: ; 49212 (12:5212) dw CeladonHouseText1 dw CeladonHouseText2 dw CeladonHouseText3 CeladonHouseText1: ; 49218 (12:5218) TX_FAR _CeladonHouseText1 db "@" CeladonHouseText2: ; 4921d (12:521d) TX_FAR _CeladonHouseText2 db "@" CeladonHouseText3: ; 49222 (12:5222) TX_FAR _CeladonHouseText3 db "@" CeladonHouseObject: ; 0x49227 (size=38) db $f ; border tile db $2 ; warps db $7, $2, $b, $ff db $7, $3, $b, $ff db $0 ; signs db $3 ; people db SPRITE_OLD_PERSON, $2 + 4, $4 + 4, $ff, $d0, $1 ; person db SPRITE_ROCKET, $4 + 4, $1 + 4, $fe, $0, $2 ; person db SPRITE_SAILOR, $6 + 4, $5 + 4, $ff, $d2, $3 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 CeladonHouseBlocks: ; 4924d (12:524d) INCBIN "maps/celadonhouse.blk" CeladonHotel_h: ; 0x4925d to 0x49269 (12 bytes) (bank=12) (id=140) db $06 ; tileset db CELADONHOTEL_HEIGHT, CELADONHOTEL_WIDTH ; dimensions (y, x) dw CeladonHotelBlocks, CeladonHotelTextPointers, CeladonHotelScript ; blocks, texts, scripts db $00 ; connections dw CeladonHotelObject ; objects CeladonHotelScript: ; 49269 (12:5269) jp EnableAutoTextBoxDrawing CeladonHotelTextPointers: ; 4926c (12:526c) dw CeladonHotelText1 dw CeladonHotelText2 dw CeladonHotelText3 CeladonHotelText1: ; 49272 (12:5272) TX_FAR _CeladonHotelText1 db "@" CeladonHotelText2: ; 49277 (12:5277) TX_FAR _CeladonHotelText2 db "@" CeladonHotelText3: ; 4927c (12:527c) TX_FAR _CeladonHotelText3 db "@" CeladonHotelObject: ; 0x49281 (size=38) db $0 ; border tile db $2 ; warps db $7, $3, $c, $ff db $7, $4, $c, $ff db $0 ; signs db $3 ; people db SPRITE_OLD_MEDIUM_WOMAN, $1 + 4, $3 + 4, $ff, $d0, $1 ; person db SPRITE_FOULARD_WOMAN, $4 + 4, $2 + 4, $ff, $ff, $2 ; person db SPRITE_BLACK_HAIR_BOY_2, $4 + 4, $8 + 4, $fe, $2, $3 ; person ; warp-to EVENT_DISP $7, $7, $3 EVENT_DISP $7, $7, $4 CeladonHotelBlocks: ; 492a7 (12:52a7) INCBIN "maps/celadonhotel.blk" MtMoonPokecenter_h: ; 0x492c3 to 0x492cf (12 bytes) (bank=12) (id=68) db $06 ; tileset db MT_MOON_POKECENTER_HEIGHT, MT_MOON_POKECENTER_WIDTH ; dimensions (y, x) dw MtMoonPokecenterBlocks, MtMoonPokecenterTextPointers, MtMoonPokecenterScript ; blocks, texts, scripts db $00 ; connections dw MtMoonPokecenterObject ; objects MtMoonPokecenterScript: ; 492cf (12:52cf) call Func_22fa jp EnableAutoTextBoxDrawing MtMoonPokecenterTextPointers: ; 492d5 (12:52d5) dw MtMoonPokecenterText1 dw MtMoonPokecenterText2 dw MtMoonPokecenterText3 dw MtMoonPokecenterText4 dw MtMoonPokecenterText5 dw MtMoonPokecenterText6 MtMoonPokecenterText1: ; 492e1 (12:52e1) db $ff MtMoonPokecenterText2: ; 492e2 (12:52e2) TX_FAR _MtMoonPokecenterText1 db "@" MtMoonPokecenterText3: ; 492e7 (12:52e7) TX_FAR _MtMoonPokecenterText3 db "@" MtMoonPokecenterText4: ; 492ec (12:52ec) db $08 ; asm ld a, [$d7c6] add a jp c, .asm_49353 ld hl, UnnamedText_4935c call PrintText ld a, $13 ld [$d125], a call DisplayTextBoxID call YesNoChoice ld a, [$cc26] and a jp nz, .asm_4934e ldh [$9f], a ldh [$a1], a ld a, $5 ldh [$a0], a call HasEnoughMoney jr nc, .asm_faa09 ; 0x49317 ld hl, UnnamedText_49366 jr .asm_49356 ; 0x4931c .asm_faa09 ; 0x4931e ld bc,(MAGIKARP << 8) | 5 call GivePokemon jr nc, .asm_49359 ; 0x49324 xor a ld [wWhichTrade], a ld [$cd3f], a ld a, $5 ld [$cd3e], a ld hl, $cd3f ld de, $d349 ld c, $3 ld a, $c call Predef ld a, $13 ld [$d125], a call DisplayTextBoxID ld hl, $d7c6 set 7, [hl] jr .asm_49359 ; 0x4934c .asm_4934e ; 0x4934e ld hl, UnnamedText_49361 jr .asm_49356 ; 0x49351 .asm_49353 ; 0x49353 ld hl, UnnamedText_4936b .asm_49356 ; 0x49356 call PrintText .asm_49359 ; 0x49359 jp TextScriptEnd UnnamedText_4935c: ; 4935c (12:535c) TX_FAR _UnnamedText_4935c db "@" UnnamedText_49361: ; 49361 (12:5361) TX_FAR _UnnamedText_49361 db "@" UnnamedText_49366: ; 49366 (12:5366) TX_FAR _UnnamedText_49366 db "@" UnnamedText_4936b: ; 4936b (12:536b) TX_FAR _UnnamedText_4936b db "@" MtMoonPokecenterText5: ; 49370 (12:5370) TX_FAR _MtMoonPokecenterText5 db "@" MtMoonPokecenterText6: ; 49375 (12:5375) db $f6 MtMoonPokecenterObject: ; 0x49376 (size=56) db $0 ; border tile db $2 ; warps db $7, $3, $0, $ff db $7, $4, $0, $ff db $0 ; signs db $6 ; people db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person db SPRITE_BUG_CATCHER, $3 + 4, $4 + 4, $ff, $d1, $2 ; person db SPRITE_GENTLEMAN, $3 + 4, $7 + 4, $ff, $d1, $3 ; person db SPRITE_FAT_BALD_GUY, $6 + 4, $a + 4, $fe, $2, $4 ; person db SPRITE_CLIPBOARD, $2 + 4, $7 + 4, $ff, $ff, $5 ; person db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $6 ; person ; warp-to EVENT_DISP $7, $7, $3 EVENT_DISP $7, $7, $4 RockTunnelPokecenter_h: ; 0x493ae to 0x493ba (12 bytes) (id=81) db $06 ; tileset db ROCK_TUNNEL_POKECENTER_HEIGHT, ROCK_TUNNEL_POKECENTER_WIDTH ; dimensions (y, x) dw RockTunnelPokecenterBlocks, RockTunnelPokecenterTextPointers, RockTunnelPokecenterScript ; blocks, texts, scripts db $00 ; connections dw RockTunnelPokecenterObject ; objects RockTunnelPokecenterScript: ; 493ba (12:53ba) call Func_22fa jp EnableAutoTextBoxDrawing RockTunnelPokecenterTextPointers: ; 493c0 (12:53c0) dw RockTunnelPokecenterText1 dw RockTunnelPokecenterText2 dw RockTunnelPokecenterText3 dw RockTunnelPokecenterText4 RockTunnelPokecenterText1: ; 493c8 (12:53c8) db $ff RockTunnelPokecenterText2: ; 493c9 (12:53c9) TX_FAR _RockTunnelPokecenterText1 db "@" RockTunnelPokecenterText3: ; 493ce (12:53ce) TX_FAR _RockTunnelPokecenterText3 db "@" RockTunnelPokecenterText4: ; 493d3 (12:53d3) db $f6 RockTunnelPokecenterObject: ; 0x493d4 (size=44) db $0 ; border tile db $2 ; warps db $7, $3, $0, $ff db $7, $4, $0, $ff db $0 ; signs db $4 ; people db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person db SPRITE_GENTLEMAN, $3 + 4, $7 + 4, $fe, $2, $2 ; person db SPRITE_FISHER2, $5 + 4, $2 + 4, $ff, $ff, $3 ; person db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $4 ; person ; warp-to EVENT_DISP $7, $7, $3 EVENT_DISP $7, $7, $4 Route11Gate_h: ; 0x49400 to 0x4940c (12 bytes) (id=84) db $0c ; tileset db ROUTE_11_GATE_1F_HEIGHT, ROUTE_11_GATE_1F_WIDTH ; dimensions (y, x) dw Route11GateBlocks, Route11GateTextPointers, Route11GateScript ; blocks, texts, scripts db $00 ; connections dw Route11GateObject ; objects Route11GateScript: ; 4940c (12:540c) jp EnableAutoTextBoxDrawing Route11GateTextPointers: ; 4940f (12:540f) dw Route11GateText1 Route11GateText1: ; 49411 (12:5411) TX_FAR _Route11GateText1 db "@" Route11GateObject: ; 0x49416 (size=50) db $a ; border tile db $5 ; warps db $4, $0, $0, $ff db $5, $0, $1, $ff db $4, $7, $2, $ff db $5, $7, $3, $ff db $8, $6, $0, ROUTE_11_GATE_2F db $0 ; signs db $1 ; people db SPRITE_GUARD, $1 + 4, $4 + 4, $ff, $ff, $1 ; person ; warp-to EVENT_DISP $4, $4, $0 EVENT_DISP $4, $5, $0 EVENT_DISP $4, $4, $7 EVENT_DISP $4, $5, $7 EVENT_DISP $4, $8, $6 ; ROUTE_11_GATE_2F Route11GateUpstairs_h: ; 0x49448 to 0x49454 (12 bytes) (id=86) db $0c ; tileset db ROUTE_11_GATE_2F_HEIGHT, ROUTE_11_GATE_2F_WIDTH ; dimensions (y, x) dw Route11GateUpstairsBlocks, Route11GateUpstairsTextPointers, Route11GateUpstairsScript ; blocks, texts, scripts db $00 ; connections dw Route11GateUpstairsObject ; objects Route11GateUpstairsScript: ; 49454 (12:5454) jp DisableAutoTextBoxDrawing Route11GateUpstairsTextPointers: ; 49457 (12:5457) dw Route11GateUpstairsText1 dw Route11GateUpstairsText2 dw Route11GateUpstairsText3 dw Route11GateUpstairsText4 Route11GateUpstairsText1: ; 4945f (12:545f) db $08 ; asm xor a ld [wWhichTrade], a ld a, $54 call Predef asm_49469: ; 49469 (12:5469) jp TextScriptEnd Route11GateUpstairsText2: ; 4946c (12:546c) db $8 ld a, [$d7d6] add a jr c, .asm_4949b ; 0x49471 $28 ld a, $1e ld [$ff00+$db], a ld a, $47 ld [$ff00+$dc], a ld [$d11e], a call GetItemName ld h, d ld l, e ld de, $cc5b ld bc, $000d call CopyData ld a, $62 call Predef ld a, [$ff00+$db] dec a jr nz, .asm_494a1 ; 0x49494 $b ld hl, $d7d6 set 7, [hl] .asm_4949b ld hl, UnnamedText_494a3 call PrintText .asm_494a1 jr asm_49469 ; 0x494a1 $c6 UnnamedText_494a3: ; 494a3 (12:54a3) TX_FAR _UnnamedText_494a3 db "@" Route11GateUpstairsText3: ; 494a8 (12:54a8) db $08 ; asm ld a, [$c109] cp $4 jp nz, Func_55c9 ld a, [$d7d8] bit 7, a ld hl, UnnamedText_494c4 jr z, .asm_5ac80 ; 0x494b9 ld hl, UnnamedText_494c9 .asm_5ac80 ; 0x494be call PrintText jp TextScriptEnd UnnamedText_494c4: ; 494c4 (12:54c4) TX_FAR _UnnamedText_494c4 db "@" UnnamedText_494c9: ; 494c9 (12:54c9) TX_FAR _UnnamedText_494c9 db "@" Route11GateUpstairsText4: ; 494ce (12:54ce) db $8 ld hl, UnnamedText_494d5 ; $54d5 jp Func_55c9 UnnamedText_494d5: ; 494d5 (12:54d5) TX_FAR _UnnamedText_494d5 db "@" Route11GateUpstairsObject: ; 0x494da (size=30) db $a ; border tile db $1 ; warps db $7, $7, $4, ROUTE_11_GATE_1F db $2 ; signs db $2, $1, $3 ; Route11GateUpstairsText3 db $2, $6, $4 ; Route11GateUpstairsText4 db $2 ; people db SPRITE_BUG_CATCHER, $2 + 4, $4 + 4, $fe, $2, $1 ; person db SPRITE_OAK_AIDE, $6 + 4, $2 + 4, $ff, $ff, $2 ; person ; warp-to EVENT_DISP $4, $7, $7 ; ROUTE_11_GATE_1F Route12Gate_h: ; 0x494f8 to 0x49504 (12 bytes) (id=87) db $0c ; tileset db ROUTE_12_GATE_HEIGHT, ROUTE_12_GATE_WIDTH ; dimensions (y, x) dw Route12GateBlocks, Route12GateTextPointers, Route12GateScript ; blocks, texts, scripts db $00 ; connections dw Route12GateObject ; objects Route12GateScript: ; 49504 (12:5504) jp EnableAutoTextBoxDrawing Route12GateTextPointers: ; 49507 (12:5507) dw Route12GateText1 Route12GateText1: ; 49509 (12:5509) TX_FAR _Route12GateText1 db "@" Route12GateObject: ; 0x4950e (size=50) db $a ; border tile db $5 ; warps db $0, $4, $0, $ff db $0, $5, $1, $ff db $7, $4, $2, $ff db $7, $5, $2, $ff db $6, $8, $0, ROUTE_12_GATE_2F db $0 ; signs db $1 ; people db SPRITE_GUARD, $3 + 4, $1 + 4, $ff, $ff, $1 ; person ; warp-to EVENT_DISP $5, $0, $4 EVENT_DISP $5, $0, $5 EVENT_DISP $5, $7, $4 EVENT_DISP $5, $7, $5 EVENT_DISP $5, $6, $8 ; ROUTE_12_GATE_2F Route12GateBlocks: ; 49540 (12:5540) INCBIN "maps/route12gate.blk" Route12GateUpstairs_h: ; 0x49554 to 0x49560 (12 bytes) (id=195) db $0c ; tileset db ROUTE_12_GATE_2F_HEIGHT, ROUTE_12_GATE_2F_WIDTH ; dimensions (y, x) dw Route12GateUpstairsBlocks, Route12GateUpstairsTextPointers, Route12GateUpstairsScript ; blocks, texts, scripts db $00 ; connections dw Route12GateUpstairsObject ; objects Route12GateUpstairsScript: ; 49560 (12:5560) jp DisableAutoTextBoxDrawing Route12GateUpstairsTextPointers: ; 49563 (12:5563) dw Route12GateUpstairsText1 dw Route12GateUpstairsText2 dw Route12GateUpstairsText3 Route12GateUpstairsText1: ; 49569 (12:5569) db $08 ; asm ld a, [$d7d7] rrca jr c, .asm_0ad3c ; 0x4956e ld hl, TM39PreReceiveText call PrintText ld bc, (TM_39 << 8) | 1 call GiveItem jr nc, .BagFull ld hl, ReceivedTM39Text call PrintText ld hl, $d7d7 set 0, [hl] jr .asm_4ba56 ; 0x49589 .BagFull ld hl, TM39NoRoomText call PrintText jr .asm_4ba56 ; 0x49591 .asm_0ad3c ; 0x49593 ld hl, TM39ExplanationText call PrintText .asm_4ba56 ; 0x49599 jp TextScriptEnd TM39PreReceiveText: ; 4959c (12:559c) TX_FAR _TM39PreReceiveText db "@" ReceivedTM39Text: ; 495a1 (12:55a1) TX_FAR _ReceivedTM39Text ; 0x8c8c6 db $0B, "@" TM39ExplanationText: ; 495a7 (12:55a7) TX_FAR _TM39ExplanationText db "@" TM39NoRoomText: ; 495ac (12:55ac) TX_FAR _TM39NoRoomText db "@" Route12GateUpstairsText2: ; 495b1 (12:55b1) db $08 ; asm ld hl, UnnamedText_495b8 jp Func_55c9 UnnamedText_495b8: ; 495b8 (12:55b8) TX_FAR _UnnamedText_495b8 ; 0x8c95a db "@" Route12GateUpstairsText3: ; 495bd (12:55bd) db $8 ld hl, UnnamedText_495c4 jp Func_55c9 UnnamedText_495c4: ; 495c4 (12:55c4) TX_FAR _UnnamedText_495c4 db "@" Func_55c9: ; 495c9 (12:55c9) ld a, [$c109] cp $4 jr z, .asm_495d4 ; 0x495ce $4 ld a, $1 jr .asm_495d8 ; 0x495d2 $4 .asm_495d4 call PrintText xor a .asm_495d8 ld [$cc3c], a jp TextScriptEnd Route12GateUpstairsObject: ; 0x495de (size=24) db $a ; border tile db $1 ; warps db $7, $7, $4, ROUTE_12_GATE db $2 ; signs db $2, $1, $2 ; Route12GateUpstairsText2 db $2, $6, $3 ; Route12GateUpstairsText3 db $1 ; people db SPRITE_BRUNETTE_GIRL, $4 + 4, $3 + 4, $fe, $1, $1 ; person ; warp-to EVENT_DISP $4, $7, $7 ; ROUTE_12_GATE Route15Gate_h: ; 0x495f6 to 0x49602 (12 bytes) (id=184) db $0c ; tileset db ROUTE_15_GATE_1F_HEIGHT, ROUTE_15_GATE_1F_WIDTH ; dimensions (y, x) dw Route15GateBlocks, Route15GateTextPointers, Route15GateScript ; blocks, texts, scripts db $00 ; connections dw Route15GateObject ; objects Route15GateScript: ; 49602 (12:5602) jp EnableAutoTextBoxDrawing Route15GateTextPointers: ; 49605 (12:5605) dw Route15GateText1 Route15GateText1: ; 49607 (12:5607) TX_FAR _Route15GateText1 db "@" Route15GateObject: ; 0x4960c (size=50) db $a ; border tile db $5 ; warps db $4, $0, $0, $ff db $5, $0, $1, $ff db $4, $7, $2, $ff db $5, $7, $3, $ff db $8, $6, $0, ROUTE_15_GATE_2F db $0 ; signs db $1 ; people db SPRITE_GUARD, $1 + 4, $4 + 4, $ff, $ff, $1 ; person ; warp-to EVENT_DISP $4, $4, $0 EVENT_DISP $4, $5, $0 EVENT_DISP $4, $4, $7 EVENT_DISP $4, $5, $7 EVENT_DISP $4, $8, $6 Route15GateUpstairs_h: ; 4963e (12:563e) db $0c ; tileset db ROUTE_15_GATE_2F_HEIGHT, ROUTE_15_GATE_2F_WIDTH ; dimensions (y, x) dw Route15GateUpstairsBlocks, Route15GateUpstairsTextPointers, Route15GateUpstairsScript ; blocks, texts, scripts db $00 ; connections dw Route15GateUpstairsObject ; objects Route15GateUpstairsScript: ; 4964a (12:564a) jp DisableAutoTextBoxDrawing Route15GateUpstairsTextPointers: ; 4964d (12:564d) dw Route15GateUpstairsText1 dw Route15GateUpstairsText2 Route15GateUpstairsText1: ; 49651 (12:5651) db $8 ld a, [$d7dd] bit 0, a jr nz, .asm_49683 ; 0x49657 $2a ld a, $32 ld [$ff00+$db], a ld a, $4b ld [$ff00+$dc], a ld [$d11e], a call GetItemName ld hl, $cd6d ld de, $cc5b ld bc, $000d call CopyData ld a, $62 call Predef ld a, [$ff00+$db] cp $1 jr nz, .asm_49689 ; 0x4967c $b ld hl, $d7dd set 0, [hl] .asm_49683 ld hl, UnnamedText_4968c call PrintText .asm_49689 jp TextScriptEnd UnnamedText_4968c: ; 4968c (12:568c) TX_FAR _UnnamedText_4968c db "@" Route15GateUpstairsText2: ; 49691 (12:5691) db $8 ld hl, UnnamedText_49698 jp Func_55c9 UnnamedText_49698: ; 49698 (12:5698) TX_FAR _UnnamedText_49698 db "@" Route15GateUpstairsObject: ; 4969d (12:569d) db $a ; border tile db $1 ; warps db $7, $7, $4, ROUTE_15_GATE_1F db $1 ; signs db $2, $6, $2 ; Route15GateUpstairsText2 db $1 ; people db SPRITE_OAK_AIDE, $2 + 4, $4 + 4, $ff, $d0, $1 ; warp-to EVENT_DISP $4, $7, $7 ; ROUTE_15_GATE_1F Route16GateMap_h: ; 0x496b2 to 0x496be (12 bytes) (id=186) db $0c ; tileset db ROUTE_16_GATE_1F_HEIGHT, ROUTE_16_GATE_1F_WIDTH ; dimensions (y, x) dw Route16GateMapBlocks, Route16GateMapTextPointers, Route16GateMapScript ; blocks, texts, scripts db $00 ; connections dw Route16GateMapObject ; objects Route16GateMapScript: ; 496be (12:56be) ld hl, $d732 res 5, [hl] call EnableAutoTextBoxDrawing ld a, [W_ROUTE16GATECURSCRIPT] ld hl, Route16GateMapScriptPointers jp CallFunctionInTable Route16GateMapScriptPointers: ; 496cf (12:56cf) dw Route16GateMapScript0 dw Route16GateMapScript1 dw Route16GateMapScript2 dw Route16GateMapScript3 Route16GateMapScript0: ; 496d7 (12:56d7) call Func_49755 ret nz ld hl, CoordsData_49714 call ArePlayerCoordsInArray ret nc ld a, $3 ld [$ff00+$8c], a call DisplayTextID xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, [$cd3d] cp $1 jr z, .asm_4970e ; 0x496f1 $1b ld a, [$cd3d] dec a ld [$cd38], a ld b, $0 ld c, a ld a, $40 ld hl, $ccd3 call FillMemory call Func_3486 ld a, $1 ld [W_ROUTE16GATECURSCRIPT], a ret .asm_4970e ld a, $2 ld [W_ROUTE16GATECURSCRIPT], a ret CoordsData_49714: ; 49714 (12:5714) db $07,$04 db $08,$04 db $09,$04 db $0A,$04 db $FF Route16GateMapScript1: ; 4971d (12:571d) ld a, [$cd38] and a ret nz ld a, $f0 ld [wJoypadForbiddenButtonsMask], a Route16GateMapScript2: ; 49727 (12:5727) ld a, $1 ld [H_SPRITEHEIGHT], a call DisplayTextID ld a, $1 ld [$cd38], a ld a, $10 ld [$ccd3], a call Func_3486 ld a, $3 ld [W_ROUTE16GATECURSCRIPT], a ret Route16GateMapScript3: ; 49741 (12:5741) ld a, [$cd38] and a ret nz xor a ld [wJoypadForbiddenButtonsMask], a ld hl, $d730 res 7, [hl] ld a, $0 ld [W_ROUTE16GATECURSCRIPT], a ret Func_49755: ; 49755 (12:5755) ld b, $6 jp IsItemInBag Route16GateMapTextPointers: ; 4975a (12:575a) dw Route16GateMapText1 dw Route16GateMapText2 dw Route16GateMapText3 Route16GateMapText1: ; 49760 (12:5760) db $08 ; asm call Func_49755 jr z, .asm_0bdf3 ; 0x49764 ld hl, UnnamedText_4977c call PrintText jr .asm_56c9d ; 0x4976c .asm_0bdf3 ; 0x4976e ld hl, UnnamedText_49777 call PrintText .asm_56c9d ; 0x49774 jp TextScriptEnd UnnamedText_49777: ; 49777 (12:5777) TX_FAR _UnnamedText_49777 db "@" UnnamedText_4977c: ; 4977c (12:577c) TX_FAR _UnnamedText_4977c db "@" Route16GateMapText3: ; 49781 (12:5781) TX_FAR _UnnamedText_49781 db "@" Route16GateMapText2: ; 49786 (12:5786) TX_FAR _Route16GateMapText2 db "@" Route16GateMapObject: ; 0x4978b (size=88) db $a ; border tile db $9 ; warps db $8, $0, $0, $ff db $9, $0, $1, $ff db $8, $7, $2, $ff db $9, $7, $2, $ff db $2, $0, $4, $ff db $3, $0, $5, $ff db $2, $7, $6, $ff db $3, $7, $7, $ff db $c, $6, $0, ROUTE_16_GATE_2F db $0 ; signs db $2 ; people db SPRITE_GUARD, $5 + 4, $4 + 4, $ff, $d0, $1 ; person db SPRITE_GAMBLER, $3 + 4, $4 + 4, $ff, $ff, $2 ; person ; warp-to EVENT_DISP $4, $8, $0 EVENT_DISP $4, $9, $0 EVENT_DISP $4, $8, $7 EVENT_DISP $4, $9, $7 EVENT_DISP $4, $2, $0 EVENT_DISP $4, $3, $0 EVENT_DISP $4, $2, $7 EVENT_DISP $4, $3, $7 EVENT_DISP $4, $c, $6 ; ROUTE_16_GATE_2F Route16GateMapBlocks: ; 497e3 (12:57e3) INCBIN "maps/route16gatemap.blk" Route16GateUpstairs_h: ; 0x497ff to 0x4980b (12 bytes) (id=187) db $0c ; tileset db ROUTE_16_GATE_2F_HEIGHT, ROUTE_16_GATE_2F_WIDTH ; dimensions (y, x) dw Route16GateUpstairsBlocks, Route16GateUpstairsTextPointers, Route16GateUpstairsScript ; blocks, texts, scripts db $00 ; connections dw Route16GateUpstairsObject ; objects Route16GateUpstairsScript: ; 4980b (12:580b) jp DisableAutoTextBoxDrawing Route16GateUpstairsTextPointers: ; 4980e (12:580e) dw Route16GateUpstairsText1 dw Route16GateUpstairsText2 dw Route16GateUpstairsText3 dw Route16GateUpstairsText4 Route16GateUpstairsText1: ; 49816 (12:5816) db $08 ; asm ld hl, UnnamedText_49820 call PrintText jp TextScriptEnd UnnamedText_49820: ; 49820 (12:5820) TX_FAR _UnnamedText_49820 db "@" Route16GateUpstairsText2: ; 49825 (12:5825) db $08 ; asm ld hl, UnnamedText_4982f call PrintText jp TextScriptEnd UnnamedText_4982f: ; 4982f (12:582f) TX_FAR _UnnamedText_4982f db "@" Route16GateUpstairsText3: ; 49834 (12:5834) db $8 ld hl, UnnamedText_4983b jp Func_55c9 UnnamedText_4983b: ; 4983b (12:583b) TX_FAR _UnnamedText_4983b db "@" Route16GateUpstairsText4: ; 49840 (12:5840) db $8 ld hl, UnnamedText_49847 ; $5847 jp Func_55c9 UnnamedText_49847: ; 49847 (12:5847) TX_FAR _UnnamedText_49847 db "@" Route16GateUpstairsObject: ; 0x4984c (size=30) db $a ; border tile db $1 ; warps db $7, $7, $8, ROUTE_16_GATE_1F db $2 ; signs db $2, $1, $3 ; Route16GateUpstairsText3 db $2, $6, $4 ; Route16GateUpstairsText4 db $2 ; people db SPRITE_YOUNG_BOY, $2 + 4, $4 + 4, $ff, $ff, $1 ; person db SPRITE_LITTLE_GIRL, $5 + 4, $2 + 4, $fe, $2, $2 ; person ; warp-to EVENT_DISP $4, $7, $7 ; ROUTE_16_GATE_1F Route18Gate_h: ; 0x4986a to 0x49876 (12 bytes) (id=190) db $0c ; tileset db ROUTE_18_GATE_1F_HEIGHT, ROUTE_18_GATE_1F_WIDTH ; dimensions (y, x) dw Route18GateBlocks, Route18GateTextPointers, Route18GateScript ; blocks, texts, scripts db $00 ; connections dw Route18GateObject ; objects Route18GateScript: ; 49876 (12:5876) ld hl, $d732 res 5, [hl] call EnableAutoTextBoxDrawing ld a, [W_ROUTE18GATECURSCRIPT] ld hl, Route18GateScriptPointers jp CallFunctionInTable Route18GateScriptPointers: ; 49887 (12:5887) dw Route18GateScript0 dw Route18GateScript1 dw Route18GateScript2 dw Route18GateScript3 Route18GateScript0: ; 4988f (12:588f) call Func_49755 ret nz ld hl, CoordsData_498cc call ArePlayerCoordsInArray ret nc ld a, $2 ld [$ff00+$8c], a call DisplayTextID xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, [$cd3d] cp $1 jr z, .asm_498c6 ; 0x498a9 $1b ld a, [$cd3d] dec a ld [$cd38], a ld b, $0 ld c, a ld a, $40 ld hl, $ccd3 call FillMemory call Func_3486 ld a, $1 ld [W_ROUTE18GATECURSCRIPT], a ret .asm_498c6 ld a, $2 ld [W_ROUTE18GATECURSCRIPT], a ret CoordsData_498cc: ; 498cc (12:58cc) db $03,$04 db $04,$04 db $05,$04 db $06,$04 db $FF Route18GateScript1: ; 498d5 (12:58d5) ld a, [$cd38] and a ret nz ld a, $f0 ld [wJoypadForbiddenButtonsMask], a Route18GateScript2: ; 498df (12:58df) ld a, $1 ld [H_SPRITEHEIGHT], a call DisplayTextID ld a, $1 ld [$cd38], a ld a, $10 ld [$ccd3], a call Func_3486 ld a, $3 ld [W_ROUTE18GATECURSCRIPT], a ret Route18GateScript3: ; 498f9 (12:58f9) ld a, [$cd38] and a ret nz xor a ld [wJoypadForbiddenButtonsMask], a ld hl, $d730 res 7, [hl] ld a, $0 ld [W_ROUTE18GATECURSCRIPT], a ret Route18GateTextPointers: ; 4990d (12:590d) dw Route18GateText1 dw Route18GateText2 Route18GateText1: ; 49911 (12:5911) db $08 ; asm call Func_49755 jr z, .asm_3c84d ; 0x49915 ld hl, UnnamedText_4992d call PrintText jr .asm_a8410 ; 0x4991d .asm_3c84d ; 0x4991f ld hl, UnnamedText_49928 call PrintText .asm_a8410 ; 0x49925 jp TextScriptEnd UnnamedText_49928: ; 49928 (12:5928) TX_FAR _UnnamedText_49928 db "@" UnnamedText_4992d: ; 4992d (12:592d) TX_FAR _UnnamedText_4992d db "@" Route18GateText2: ; 49932 (12:5932) TX_FAR _UnnamedText_49932 db "@" Route18GateObject: ; 0x49937 (size=50) db $a ; border tile db $5 ; warps db $4, $0, $0, $ff db $5, $0, $1, $ff db $4, $7, $2, $ff db $5, $7, $3, $ff db $8, $6, $0, ROUTE_18_GATE_2F db $0 ; signs db $1 ; people db SPRITE_GUARD, $1 + 4, $4 + 4, $ff, $d0, $1 ; person ; warp-to EVENT_DISP $4, $4, $0 EVENT_DISP $4, $5, $0 EVENT_DISP $4, $4, $7 EVENT_DISP $4, $5, $7 EVENT_DISP $4, $8, $6 ; ROUTE_18_GATE_2F Route18GateUpstairs_h: ; 0x49969 to 0x49975 (12 bytes) (id=191) db $0c ; tileset db ROUTE_18_GATE_2F_HEIGHT, ROUTE_18_GATE_2F_WIDTH ; dimensions (y, x) dw Route18GateUpstairsBlocks, Route18GateUpstairsTextPointers, Route18GateUpstairsScript ; blocks, texts, scripts db $00 ; connections dw Route18GateUpstairsObject ; objects Route18GateUpstairsScript: ; 49975 (12:5975) jp DisableAutoTextBoxDrawing Route18GateUpstairsTextPointers: ; 49978 (12:5978) dw Route18GateUpstairsText1 dw Route18GateUpstairsText2 dw Route18GateUpstairsText3 Route18GateUpstairsText1: ; 4997e (12:597e) db $08 ; asm ld a, $5 ld [wWhichTrade], a ld a, $54 call Predef jp TextScriptEnd Route18GateUpstairsText2: ; 4998c (12:598c) db $8 ld hl, UnnamedText_49993 ; $5993 jp Func_55c9 UnnamedText_49993: ; 49993 (12:5993) TX_FAR _UnnamedText_49993 db "@" Route18GateUpstairsText3: ; 49998 (12:5998) db $8 ld hl, UnnamedText_4999f ; $599f jp Func_55c9 UnnamedText_4999f: ; 4999f (12:599f) TX_FAR _UnnamedText_4999f db "@" Route18GateUpstairsObject: ; 0x499a4 (size=24) db $a ; border tile db $1 ; warps db $7, $7, $4, ROUTE_18_GATE_1F db $2 ; signs db $2, $1, $2 ; Route18GateUpstairsText2 db $2, $6, $3 ; Route18GateUpstairsText3 db $1 ; people db SPRITE_BUG_CATCHER, $2 + 4, $4 + 4, $fe, $2, $1 ; person ; warp-to EVENT_DISP $4, $7, $7 ; ROUTE_18_GATE_1F MtMoon1_h: ; 0x499bc to 0x499c8 (12 bytes) (id=59) db $11 ; tileset db MT_MOON_1_HEIGHT, MT_MOON_1_WIDTH ; dimensions (y, x) dw MtMoon1Blocks, MtMoon1TextPointers, MtMoon1Script ; blocks, texts, scripts db $00 ; connections dw MtMoon1Object ; objects MtMoon1Script: ; 499c8 (12:59c8) call EnableAutoTextBoxDrawing ld hl, MtMoon1TrainerHeader0 ld de, MtMoon1ScriptPointers ld a, [W_MTMOON1CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_MTMOON1CURSCRIPT], a ret MtMoon1ScriptPointers: ; 499db (12:59db) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle MtMoon1TextPointers: ; 499e1 (12:59e1) dw MtMoon1Text1 dw MtMoon1Text2 dw MtMoon1Text3 dw MtMoon1Text4 dw MtMoon1Text5 dw MtMoon1Text6 dw MtMoon1Text7 dw Predef5CText dw Predef5CText dw Predef5CText dw Predef5CText dw Predef5CText dw Predef5CText dw MtMoon1Text14 MtMoon1TrainerHeaders: ; 499fd (12:59fd) MtMoon1TrainerHeader0: ; 499fd (12:59fd) db $1 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7f5 ; flag's byte dw MtMoon1BattleText2 ; 0x5a98 TextBeforeBattle dw MtMoon1AfterBattleText2 ; 0x5aa2 TextAfterBattle dw MtMoon1EndBattleText2 ; 0x5a9d TextEndBattle dw MtMoon1EndBattleText2 ; 0x5a9d TextEndBattle MtMoon1TrainerHeader2: ; 49a09 (12:5a09) db $2 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7f5 ; flag's byte dw MtMoon1BattleText3 ; 0x5aa7 TextBeforeBattle dw MtMoon1AfterBattleText3 ; 0x5ab1 TextAfterBattle dw MtMoon1EndBattleText3 ; 0x5aac TextEndBattle dw MtMoon1EndBattleText3 ; 0x5aac TextEndBattle MtMoon1TrainerHeader3: ; 49a15 (12:5a15) db $3 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7f5 ; flag's byte dw MtMoon1BattleText4 ; 0x5ab6 TextBeforeBattle dw MtMoon1AfterBattleText4 ; 0x5ac0 TextAfterBattle dw MtMoon1EndBattleText4 ; 0x5abb TextEndBattle dw MtMoon1EndBattleText4 ; 0x5abb TextEndBattle MtMoon1TrainerHeader4: ; 49a21 (12:5a21) db $4 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7f5 ; flag's byte dw MtMoon1BattleText5 ; 0x5ac5 TextBeforeBattle dw MtMoon1AfterBattleText5 ; 0x5acf TextAfterBattle dw MtMoon1EndBattleText5 ; 0x5aca TextEndBattle dw MtMoon1EndBattleText5 ; 0x5aca TextEndBattle MtMoon1TrainerHeader5: ; 49a2d (12:5a2d) db $5 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7f5 ; flag's byte dw MtMoon1BattleText6 ; 0x5ad4 TextBeforeBattle dw MtMoon1AfterBattleText6 ; 0x5ade TextAfterBattle dw MtMoon1EndBattleText6 ; 0x5ad9 TextEndBattle dw MtMoon1EndBattleText6 ; 0x5ad9 TextEndBattle MtMoon1TrainerHeader6: ; 49a39 (12:5a39) db $6 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7f5 ; flag's byte dw MtMoon1BattleText7 ; 0x5ae3 TextBeforeBattle dw MtMoon1AfterBattleText7 ; 0x5aed TextAfterBattle dw MtMoon1EndBattleText7 ; 0x5ae8 TextEndBattle dw MtMoon1EndBattleText7 ; 0x5ae8 TextEndBattle MtMoon1TrainerHeader7: ; 49a45 (12:5a45) db $7 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7f5 ; flag's byte dw MtMoon1BattleText8 ; 0x5af2 TextBeforeBattle dw MtMoon1AfterBattleText8 ; 0x5afc TextAfterBattle dw MtMoon1EndBattleText8 ; 0x5af7 TextEndBattle dw MtMoon1EndBattleText8 ; 0x5af7 TextEndBattle db $ff MtMoon1Text1: ; 49a52 (12:5a52) db $08 ; asm ld hl, MtMoon1TrainerHeader0 call TalkToTrainer jp TextScriptEnd MtMoon1Text2: ; 49a5c (12:5a5c) db $08 ; asm ld hl, MtMoon1TrainerHeader2 call TalkToTrainer jp TextScriptEnd MtMoon1Text3: ; 49a66 (12:5a66) db $08 ; asm ld hl, MtMoon1TrainerHeader3 call TalkToTrainer jp TextScriptEnd MtMoon1Text4: ; 49a70 (12:5a70) db $08 ; asm ld hl, MtMoon1TrainerHeader4 call TalkToTrainer jp TextScriptEnd MtMoon1Text5: ; 49a7a (12:5a7a) db $08 ; asm ld hl, MtMoon1TrainerHeader5 call TalkToTrainer jp TextScriptEnd MtMoon1Text6: ; 49a84 (12:5a84) db $08 ; asm ld hl, MtMoon1TrainerHeader6 call TalkToTrainer jp TextScriptEnd MtMoon1Text7: ; 49a8e (12:5a8e) db $08 ; asm ld hl, MtMoon1TrainerHeader7 call TalkToTrainer jp TextScriptEnd MtMoon1BattleText2: ; 49a98 (12:5a98) TX_FAR _MtMoon1BattleText2 db "@" MtMoon1EndBattleText2: ; 49a9d (12:5a9d) TX_FAR _MtMoon1EndBattleText2 db "@" MtMoon1AfterBattleText2: ; 49aa2 (12:5aa2) TX_FAR _MtMoon1AfterBattleText2 db "@" MtMoon1BattleText3: ; 49aa7 (12:5aa7) TX_FAR _MtMoon1BattleText3 db "@" MtMoon1EndBattleText3: ; 49aac (12:5aac) TX_FAR _MtMoon1EndBattleText3 db "@" MtMoon1AfterBattleText3: ; 49ab1 (12:5ab1) TX_FAR _MtMoon1AfterBattleText3 db "@" MtMoon1BattleText4: ; 49ab6 (12:5ab6) TX_FAR _MtMoon1BattleText4 db "@" MtMoon1EndBattleText4: ; 49abb (12:5abb) TX_FAR _MtMoon1EndBattleText4 db "@" MtMoon1AfterBattleText4: ; 49ac0 (12:5ac0) TX_FAR _MtMoon1AfterBattleText4 db "@" MtMoon1BattleText5: ; 49ac5 (12:5ac5) TX_FAR _MtMoon1BattleText5 db "@" MtMoon1EndBattleText5: ; 49aca (12:5aca) TX_FAR _MtMoon1EndBattleText5 db "@" MtMoon1AfterBattleText5: ; 49acf (12:5acf) TX_FAR _MtMoon1AfterBattleText5 db "@" MtMoon1BattleText6: ; 49ad4 (12:5ad4) TX_FAR _MtMoon1BattleText6 db "@" MtMoon1EndBattleText6: ; 49ad9 (12:5ad9) TX_FAR _MtMoon1EndBattleText6 db "@" MtMoon1AfterBattleText6: ; 49ade (12:5ade) TX_FAR _MtMoon1AfterBattleText6 db "@" MtMoon1BattleText7: ; 49ae3 (12:5ae3) TX_FAR _MtMoon1BattleText7 db "@" MtMoon1EndBattleText7: ; 49ae8 (12:5ae8) TX_FAR _MtMoon1EndBattleText7 db "@" MtMoon1AfterBattleText7: ; 49aed (12:5aed) TX_FAR _MtMoon1AfterBattleText7 db "@" MtMoon1BattleText8: ; 49af2 (12:5af2) TX_FAR _MtMoon1BattleText8 db "@" MtMoon1EndBattleText8: ; 49af7 (12:5af7) TX_FAR _MtMoon1EndBattleText8 db "@" MtMoon1AfterBattleText8: ; 49afc (12:5afc) TX_FAR _MtMoon1AfterBattleText8 db "@" MtMoon1Text14: ; 49b01 (12:5b01) TX_FAR _MtMoon1Text14 db "@" MtMoon1Object: ; 0x49b06 (size=145) db $3 ; border tile db $5 ; warps db $23, $e, $1, $ff db $23, $f, $1, $ff db $5, $5, $0, MT_MOON_2 db $b, $11, $2, MT_MOON_2 db $f, $19, $3, MT_MOON_2 db $1 ; signs db $17, $f, $e ; MtMoon1Text14 db $d ; people db SPRITE_HIKER, $6 + 4, $5 + 4, $ff, $d0, $41, HIKER + $C8, $1 ; trainer db SPRITE_BUG_CATCHER, $10 + 4, $c + 4, $ff, $d3, $42, YOUNGSTER + $C8, $3 ; trainer db SPRITE_LASS, $4 + 4, $1e + 4, $ff, $d0, $43, LASS + $C8, $5 ; trainer db SPRITE_BLACK_HAIR_BOY_2, $1f + 4, $18 + 4, $ff, $d1, $44, SUPER_NERD + $C8, $1 ; trainer db SPRITE_LASS, $17 + 4, $10 + 4, $ff, $d0, $45, LASS + $C8, $6 ; trainer db SPRITE_BUG_CATCHER, $16 + 4, $7 + 4, $ff, $d0, $46, BUG_CATCHER + $C8, $7 ; trainer db SPRITE_BUG_CATCHER, $1b + 4, $1e + 4, $ff, $d3, $47, BUG_CATCHER + $C8, $8 ; trainer db SPRITE_BALL, $14 + 4, $2 + 4, $ff, $ff, $88, POTION ; item db SPRITE_BALL, $2 + 4, $2 + 4, $ff, $ff, $89, MOON_STONE ; item db SPRITE_BALL, $1f + 4, $23 + 4, $ff, $ff, $8a, RARE_CANDY ; item db SPRITE_BALL, $17 + 4, $24 + 4, $ff, $ff, $8b, ESCAPE_ROPE ; item db SPRITE_BALL, $21 + 4, $14 + 4, $ff, $ff, $8c, POTION ; item db SPRITE_BALL, $20 + 4, $5 + 4, $ff, $ff, $8d, TM_12 ; item ; warp-to EVENT_DISP $14, $23, $e EVENT_DISP $14, $23, $f EVENT_DISP $14, $5, $5 ; MT_MOON_2 EVENT_DISP $14, $b, $11 ; MT_MOON_2 EVENT_DISP $14, $f, $19 ; MT_MOON_2 MtMoon1Blocks: ; 49b97 (12:5b97) INCBIN "maps/mtmoon1.blk" MtMoon3_h: ; 0x49cff to 0x49d0b (12 bytes) (id=61) db $11 ; tileset db MT_MOON_3_HEIGHT, MT_MOON_3_WIDTH ; dimensions (y, x) dw MtMoon3Blocks, MtMoon3TextPointers, MtMoon3Script ; blocks, texts, scripts db $00 ; connections dw MtMoon3Object ; objects MtMoon3Script: ; 49d0b (12:5d0b) call EnableAutoTextBoxDrawing ld hl, MtMoon3TrainerHeader0 ; $5e48 ld de, MtMoon3ScriptPointers ld a, [W_MTMOON3CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_MTMOON3CURSCRIPT], a ld a, [$d7f6] bit 1, a ret z ld hl, CoordsData_49d37 call ArePlayerCoordsInArray jr nc, .asm_49d31 ; 0x49d29 $6 ld hl, $d72e set 4, [hl] ret .asm_49d31 ld hl, $d72e res 4, [hl] ret CoordsData_49d37: ; 49d37 (12:5d37) db $05,$0B db $05,$0C db $05,$0D db $05,$0E db $06,$0B db $06,$0C db $06,$0D db $06,$0E db $07,$0B db $07,$0C db $07,$0D db $07,$0E db $08,$0B db $08,$0C db $08,$0D db $08,$0E db $FF Func_49d58: ; 49d58 (12:5d58) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_MTMOON3CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret MtMoon3ScriptPointers: ; 49d63 (12:5d63) dw MtMoon3Script0 dw Func_324c dw EndTrainerBattle dw MtMoon3Script3 dw MtMoon3Script4 dw MtMoon3Script5 MtMoon3Script0: ; 49d6f (12:5d6f) ld a, [$d7f6] bit 1, a jp nz, Func_49d91 ld a, [W_YCOORD] ; $d361 cp $8 jp nz, Func_49d91 ld a, [W_XCOORD] ; $d362 cp $d jp nz, Func_49d91 xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, $1 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c jp DisplayTextID Func_49d91: ; 49d91 (12:5d91) ld a, [$d7f6] and $c0 jp z, CheckFightingMapTrainers ret MtMoon3Script3: ; 49d9a (12:5d9a) ld a, [W_ISINBATTLE] ; $d057 cp $ff jp z, Func_49d58 call UpdateSprites call Delay3 ld hl, $d7f6 set 1, [hl] xor a ld [wJoypadForbiddenButtonsMask], a ld a, $0 ld [W_MTMOON3CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret MtMoon3Script4: ; 49dba (12:5dba) ld a, $1 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call SetSpriteMovementBytesToFF ld hl, CoordsData_49dea call ArePlayerCoordsInArray jr c, .asm_49dd7 ld hl, CoordsData_49df1 call ArePlayerCoordsInArray jp nc, CheckFightingMapTrainers ld de, MovementData_49df9 jr .asm_49dda .asm_49dd7 ld de, MovementData_49df8 .asm_49dda ld a, $1 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call MoveSprite ld a, $5 ld [W_MTMOON3CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret CoordsData_49dea: ; 49dea (12:5dea) db $07,$0C db $06,$0B db $05,$0C db $FF CoordsData_49df1: ; 49df1 (12:5df1) db $07,$0D db $06,$0E db $05,$0E db $FF MovementData_49df8: ; 49df8 (12:5df8) db $C0 MovementData_49df9: ; 49df9 (12:5df9) db $40,$FF MtMoon3Script5: ; 49dfb (12:5dfb) ld a, [$d730] bit 0, a ret nz ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld a, $1 ld [$cc3c], a ld a, $a ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld a, [$d7f6] bit 6, a jr z, .asm_49e1d ld a, $6e jr .asm_49e1f .asm_49e1d ld a, $6d .asm_49e1f ld [$cc4d], a ld a, $11 call Predef ; indirect jump to RemoveMissableObject (f1d7 (3:71d7)) xor a ld [wJoypadForbiddenButtonsMask], a ld a, $0 ld [W_MTMOON3CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret MtMoon3TextPointers: ; 49e34 (12:5e34) dw MtMoon3Text1 dw MtMoon3Text2 dw MtMoon3Text3 dw MtMoon3Text4 dw MtMoon3Text5 dw MtMoon3Text6 dw MtMoon3Text7 dw Predef5CText dw Predef5CText dw UnnamedText_49f99 MtMoon3TrainerHeaders: ; 49e48 (12:5e48) MtMoon3TrainerHeader0: ; 49e48 (12:5e48) db $2 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7f6 ; flag's byte dw MtMoon3BattleText2 ; 0x5f9f TextBeforeBattle dw MtMoon3AfterBattleText2 ; 0x5fa9 TextAfterBattle dw MtMoon3EndBattleText2 ; 0x5fa4 TextEndBattle dw MtMoon3EndBattleText2 ; 0x5fa4 TextEndBattle MtMoon3TrainerHeader2: ; 49e54 (12:5e54) db $3 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7f6 ; flag's byte dw MtMoon3BattleText3 ; 0x5fae TextBeforeBattle dw MtMoon3AfterBattleText3 ; 0x5fb8 TextAfterBattle dw MtMoon3EndBattleText3 ; 0x5fb3 TextEndBattle dw MtMoon3EndBattleText3 ; 0x5fb3 TextEndBattle MtMoon3TrainerHeader3: ; 49e60 (12:5e60) db $4 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7f6 ; flag's byte dw MtMoon3BattleText4 ; 0x5fbd TextBeforeBattle dw MtMoon3AfterBattleText4 ; 0x5fc7 TextAfterBattle dw MtMoon3EndBattleText4 ; 0x5fc2 TextEndBattle dw MtMoon3EndBattleText4 ; 0x5fc2 TextEndBattle MtMoon3TrainerHeader4: ; 49e6c (12:5e6c) db $5 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7f6 ; flag's byte dw MtMoon3BattleText5 ; 0x5fcc TextBeforeBattle dw MtMoon3AfterBattleText5 ; 0x5fd6 TextAfterBattle dw MtMoon3EndBattleText5 ; 0x5fd1 TextEndBattle dw MtMoon3EndBattleText5 ; 0x5fd1 TextEndBattle db $ff MtMoon3Text1: ; 49e79 (12:5e79) db $08 ; asm ld a, [$d7f6] bit 1, a jr z, .asm_be1e0 ; 0x49e7f and $c0 jr nz, .asm_f8cd4 ; 0x49e83 ld hl, UnnamedText_49f8f call PrintText jr .asm_f1fba ; 0x49e8b .asm_be1e0 ; 0x49e8d ld hl, UnnamedText_49f85 call PrintText ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, UnnamedText_49f8a ld de, UnnamedText_49f8a call PreBattleSaveRegisters ldh a, [$8c] ld [$cf13], a call EngageMapTrainer call InitBattleEnemyParameters ld a, $3 ld [W_MTMOON3CURSCRIPT], a ld [W_CURMAPSCRIPT], a jr .asm_f1fba ; 0x49eb6 .asm_f8cd4 ; 0x49eb8 ld hl, UnnamedText_49f94 call PrintText .asm_f1fba ; 0x49ebe jp TextScriptEnd MtMoon3Text2: ; 49ec1 (12:5ec1) db $08 ; asm ld hl, MtMoon3TrainerHeader0 call TalkToTrainer jp TextScriptEnd MtMoon3Text3: ; 49ecb (12:5ecb) db $08 ; asm ld hl, MtMoon3TrainerHeader2 call TalkToTrainer jp TextScriptEnd MtMoon3Text4: ; 49ed5 (12:5ed5) db $08 ; asm ld hl, MtMoon3TrainerHeader3 call TalkToTrainer jp TextScriptEnd MtMoon3Text5: ; 49edf (12:5edf) db $08 ; asm ld hl, MtMoon3TrainerHeader4 ; $5e6c call TalkToTrainer jp TextScriptEnd MtMoon3Text6: ; 49ee9 (12:5ee9) db $08 ; asm ld a, $1 ld [$cc3c], a ld hl, UnnamedText_49f24 call PrintText call YesNoChoice ld a, [$cc26] and a jr nz, .asm_1fa5e ; 0x49efc ld bc,(DOME_FOSSIL << 8) | 1 call GiveItem jp nc, Func_49f76 call Func_49f69 ld a, $6d ld [$cc4d], a ld a, $11 call Predef ld hl, $d7f6 set 6, [hl] ld a, $4 ld [W_MTMOON3CURSCRIPT], a ld [W_CURMAPSCRIPT], a .asm_1fa5e ; 0x49f21 jp TextScriptEnd UnnamedText_49f24: ; 49f24 (12:5f24) TX_FAR _UnnamedText_49f24 db "@" MtMoon3Text7: ; 49f29 (12:5f29) db $08 ; asm ld a, $1 ld [$cc3c], a ld hl, UnnamedText_49f64 call PrintText call YesNoChoice ld a, [$cc26] and a jr nz, .asm_8e988 ; 0x49f3c ld bc, (HELIX_FOSSIL << 8) | 1 call GiveItem jp nc, Func_49f76 call Func_49f69 ld a, $6e ld [$cc4d], a ld a, $11 call Predef ld hl, $d7f6 set 7, [hl] ld a, $4 ld [W_MTMOON3CURSCRIPT], a ld [W_CURMAPSCRIPT], a .asm_8e988 ; 0x49f61 jp TextScriptEnd UnnamedText_49f64: ; 49f64 (12:5f64) TX_FAR _UnnamedText_49f64 db "@" Func_49f69: ; 49f69 (12:5f69) ld hl, UnnamedText_49f6f jp PrintText UnnamedText_49f6f: ; 49f6f (12:5f6f) TX_FAR _UnnamedText_49f6f ; 0x80995 db $11, $d, "@" Func_49f76: ; 49f76 (12:5f76) ld hl, UnnamedText_49f7f call PrintText jp TextScriptEnd UnnamedText_49f7f: ; 49f7f (12:5f7f) TX_FAR _UnnamedText_49f7f ; 0x809a8 db $d, "@" UnnamedText_49f85: ; 49f85 (12:5f85) TX_FAR _UnnamedText_49f85 db "@" UnnamedText_49f8a: ; 49f8a (12:5f8a) TX_FAR _UnnamedText_49f8a db "@" UnnamedText_49f8f: ; 49f8f (12:5f8f) TX_FAR _UnnamedText_49f8f db "@" UnnamedText_49f94: ; 49f94 (12:5f94) TX_FAR _UnnamedText_49f94 db "@" UnnamedText_49f99: ; 49f99 (12:5f99) TX_FAR _UnnamedText_49f99 db $11, "@" MtMoon3BattleText2: ; 49f9f (12:5f9f) TX_FAR _MtMoon3BattleText2 db "@" MtMoon3EndBattleText2: ; 49fa4 (12:5fa4) TX_FAR _MtMoon3EndBattleText2 db "@" MtMoon3AfterBattleText2: ; 49fa9 (12:5fa9) TX_FAR _MtMoon3AfterBattleText2 db "@" MtMoon3BattleText3: ; 49fae (12:5fae) TX_FAR _MtMoon3BattleText3 db "@" MtMoon3EndBattleText3: ; 49fb3 (12:5fb3) TX_FAR _MtMoon3EndBattleText3 db "@" MtMoon3AfterBattleText3: ; 49fb8 (12:5fb8) TX_FAR _MtMoon3AfterBattleText3 db "@" MtMoon3BattleText4: ; 49fbd (12:5fbd) TX_FAR _MtMoon3BattleText4 db "@" MtMoon3EndBattleText4: ; 49fc2 (12:5fc2) TX_FAR _MtMoon3EndBattleText4 db "@" MtMoon3AfterBattleText4: ; 49fc7 (12:5fc7) TX_FAR _MtMoon3AfterBattleText4 db "@" MtMoon3BattleText5: ; 49fcc (12:5fcc) TX_FAR _MtMoon3BattleText5 db "@" MtMoon3EndBattleText5: ; 49fd1 (12:5fd1) TX_FAR _MtMoon3EndBattleText5 db "@" MtMoon3AfterBattleText5: ; 49fd6 (12:5fd6) TX_FAR _MtMoon3AfterBattleText5 db "@" MtMoon3Object: ; 0x49fdb (size=102) db $3 ; border tile db $4 ; warps db $9, $19, $1, MT_MOON_2 db $11, $15, $4, MT_MOON_2 db $1b, $f, $5, MT_MOON_2 db $7, $5, $6, MT_MOON_2 db $0 ; signs db $9 ; people db SPRITE_BLACK_HAIR_BOY_2, $8 + 4, $c + 4, $ff, $d3, $41, SUPER_NERD + $C8, $2 ; trainer db SPRITE_ROCKET, $10 + 4, $b + 4, $ff, $d0, $42, ROCKET + $C8, $1 ; trainer db SPRITE_ROCKET, $16 + 4, $f + 4, $ff, $d0, $43, ROCKET + $C8, $2 ; trainer db SPRITE_ROCKET, $b + 4, $1d + 4, $ff, $d1, $44, ROCKET + $C8, $3 ; trainer db SPRITE_ROCKET, $11 + 4, $1d + 4, $ff, $d2, $45, ROCKET + $C8, $4 ; trainer db SPRITE_OMANYTE, $6 + 4, $c + 4, $ff, $ff, $6 ; person db SPRITE_OMANYTE, $6 + 4, $d + 4, $ff, $ff, $7 ; person db SPRITE_BALL, $15 + 4, $19 + 4, $ff, $ff, $88, HP_UP ; item db SPRITE_BALL, $5 + 4, $1d + 4, $ff, $ff, $89, TM_01 ; item ; warp-to EVENT_DISP $14, $9, $19 ; MT_MOON_2 EVENT_DISP $14, $11, $15 ; MT_MOON_2 EVENT_DISP $14, $1b, $f ; MT_MOON_2 EVENT_DISP $14, $7, $5 ; MT_MOON_2 MtMoon3Blocks: ; 4a041 (12:6041) INCBIN "maps/mtmoon3.blk" SafariZoneWest_h: ; 0x4a1a9 to 0x4a1b5 (12 bytes) (id=219) db $03 ; tileset db SAFARI_ZONE_WEST_HEIGHT, SAFARI_ZONE_WEST_WIDTH ; dimensions (y, x) dw SafariZoneWestBlocks, SafariZoneWestTextPointers, SafariZoneWestScript ; blocks, texts, scripts db $00 ; connections dw SafariZoneWestObject ; objects SafariZoneWestScript: ; 4a1b5 (12:61b5) jp EnableAutoTextBoxDrawing SafariZoneWestTextPointers: ; 4a1b8 (12:61b8) dw Predef5CText dw Predef5CText dw Predef5CText dw Predef5CText dw SafariZoneWestText5 dw SafariZoneWestText6 dw SafariZoneWestText7 dw SafariZoneWestText8 SafariZoneWestText5: ; 4a1c8 (12:61c8) TX_FAR _SafariZoneWestText5 db "@" SafariZoneWestText6: ; 4a1cd (12:61cd) TX_FAR _SafariZoneWestText6 db "@" SafariZoneWestText7: ; 4a1d2 (12:61d2) TX_FAR _SafariZoneWestText7 db "@" SafariZoneWestText8: ; 4a1d7 (12:61d7) TX_FAR _SafariZoneWestText8 db "@" SafariZoneWestObject: ; 0x4a1dc (size=108) db $0 ; border tile db $8 ; warps db $0, $14, $0, SAFARI_ZONE_NORTH db $0, $15, $1, SAFARI_ZONE_NORTH db $0, $1a, $2, SAFARI_ZONE_NORTH db $0, $1b, $3, SAFARI_ZONE_NORTH db $16, $1d, $2, SAFARI_ZONE_CENTER db $17, $1d, $3, SAFARI_ZONE_CENTER db $3, $3, $0, SAFARI_ZONE_SECRET_HOUSE db $b, $b, $0, SAFARI_ZONE_REST_HOUSE_2 db $4 ; signs db $c, $c, $5 ; SafariZoneWestText5 db $3, $11, $6 ; SafariZoneWestText6 db $4, $1a, $7 ; SafariZoneWestText7 db $16, $18, $8 ; SafariZoneWestText8 db $4 ; people db SPRITE_BALL, $14 + 4, $8 + 4, $ff, $ff, $81, MAX_POTION ; item db SPRITE_BALL, $7 + 4, $9 + 4, $ff, $ff, $82, TM_32 ; item db SPRITE_BALL, $12 + 4, $12 + 4, $ff, $ff, $83, MAX_REVIVE ; item db SPRITE_BALL, $7 + 4, $13 + 4, $ff, $ff, $84, GOLD_TEETH ; item ; warp-to EVENT_DISP $f, $0, $14 ; SAFARI_ZONE_NORTH EVENT_DISP $f, $0, $15 ; SAFARI_ZONE_NORTH EVENT_DISP $f, $0, $1a ; SAFARI_ZONE_NORTH EVENT_DISP $f, $0, $1b ; SAFARI_ZONE_NORTH EVENT_DISP $f, $16, $1d ; SAFARI_ZONE_CENTER EVENT_DISP $f, $17, $1d ; SAFARI_ZONE_CENTER EVENT_DISP $f, $3, $3 ; SAFARI_ZONE_SECRET_HOUSE EVENT_DISP $f, $b, $b ; SAFARI_ZONE_REST_HOUSE_2 SafariZoneWestBlocks: ; 4a248 (12:6248) INCBIN "maps/safarizonewest.blk" SafariZoneSecretHouse_h: ; 0x4a30b to 0x4a317 (12 bytes) (id=222) db $14 ; tileset db SAFARI_ZONE_SECRET_HOUSE_HEIGHT, SAFARI_ZONE_SECRET_HOUSE_WIDTH ; dimensions (y, x) dw SafariZoneSecretHouseBlocks, SafariZoneSecretHouseTextPointers, SafariZoneSecretHouseScript ; blocks, texts, scripts db $00 ; connections dw SafariZoneSecretHouseObject ; objects SafariZoneSecretHouseScript: ; 4a317 (12:6317) jp EnableAutoTextBoxDrawing SafariZoneSecretHouseTextPointers: ; 4a31a (12:631a) dw SafariZoneSecretHouseText1 SafariZoneSecretHouseText1: ; 4a31c (12:631c) db $08 ; asm ld a, [$d857] bit 0, a jr nz, .asm_20a9b ; 0x4a322 ld hl, UnnamedText_4a350 call PrintText ld bc, (HM_03 << 8) | 1 call GiveItem jr nc, .BagFull ld hl, ReceivedHM03Text call PrintText ld hl, $d857 set 0, [hl] jr .asm_8f1fc ; 0x4a33d .BagFull ld hl, HM03NoRoomText call PrintText jr .asm_8f1fc ; 0x4a345 .asm_20a9b ; 0x4a347 ld hl, HM03ExplanationText call PrintText .asm_8f1fc ; 0x4a34d jp TextScriptEnd UnnamedText_4a350: ; 4a350 (12:6350) TX_FAR _UnnamedText_4a350 db "@" ReceivedHM03Text: ; 4a355 (12:6355) TX_FAR _ReceivedHM03Text ; 0x85943 db $0B, "@" HM03ExplanationText: ; 4a35b (12:635b) TX_FAR _HM03ExplanationText db "@" HM03NoRoomText: ; 4a360 (12:6360) TX_FAR _HM03NoRoomText db "@" SafariZoneSecretHouseObject: ; 0x4a365 (size=26) db $17 ; border tile db $2 ; warps db $7, $2, $6, SAFARI_ZONE_WEST db $7, $3, $6, SAFARI_ZONE_WEST db $0 ; signs db $1 ; people db SPRITE_FISHER, $3 + 4, $3 + 4, $ff, $d0, $1 ; person ; warp-to EVENT_DISP $4, $7, $2 ; SAFARI_ZONE_WEST EVENT_DISP $4, $7, $3 ; SAFARI_ZONE_WEST SafariZoneSecretHouseBlocks: ; 4a37f (12:637f) INCBIN "maps/safarizonesecrethouse.blk" SECTION "bank13",ROMX,BANK[$13] YoungsterPic: ; 4c000 (13:4000) INCBIN "pic/trainer/youngster.pic" BugCatcherPic: ; 4c0c6 (13:40c6) INCBIN "pic/trainer/bugcatcher.pic" LassPic: ; 4c200 (13:4200) INCBIN "pic/trainer/lass.pic" SailorPic: ; 4c2db (13:42db) INCBIN "pic/trainer/sailor.pic" JrTrainerMPic: ; 4c450 (13:4450) INCBIN "pic/trainer/jr.trainerm.pic" JrTrainerFPic: ; 4c588 (13:4588) INCBIN "pic/trainer/jr.trainerf.pic" PokemaniacPic: ; 4c6c9 (13:46c9) INCBIN "pic/trainer/pokemaniac.pic" SuperNerdPic: ; 4c7f1 (13:47f1) INCBIN "pic/trainer/supernerd.pic" HikerPic: ; 4c8e7 (13:48e7) INCBIN "pic/trainer/hiker.pic" BikerPic: ; 4cabe (13:4abe) INCBIN "pic/trainer/biker.pic" BurglarPic: ; 4cc91 (13:4c91) INCBIN "pic/trainer/burglar.pic" EngineerPic: ; 4ce0a (13:4e0a) INCBIN "pic/trainer/engineer.pic" FisherPic: ; 4cf87 (13:4f87) INCBIN "pic/trainer/fisher.pic" SwimmerPic: ; 4d133 (13:5133) INCBIN "pic/trainer/swimmer.pic" CueBallPic: ; 4d24f (13:524f) INCBIN "pic/trainer/cueball.pic" GamblerPic: ; 4d421 (13:5421) INCBIN "pic/trainer/gambler.pic" BeautyPic: ; 4d5df (13:55df) INCBIN "pic/trainer/beauty.pic" PsychicPic: ; 4d728 (13:5728) INCBIN "pic/trainer/psychic.pic" RockerPic: ; 4d843 (13:5843) INCBIN "pic/trainer/rocker.pic" JugglerPic: ; 4d97d (13:597d) INCBIN "pic/trainer/juggler.pic" TamerPic: ; 4db4e (13:5b4e) INCBIN "pic/trainer/tamer.pic" BirdKeeperPic: ; 4dcdb (13:5cdb) INCBIN "pic/trainer/birdkeeper.pic" BlackbeltPic: ; 4de76 (13:5e76) INCBIN "pic/trainer/blackbelt.pic" Rival1Pic: ; 4e049 (13:6049) INCBIN "pic/trainer/rival1.pic" ProfOakPic: ; 4e15f (13:615f) INCBIN "pic/trainer/prof.oak.pic" ChiefPic: ; 4e27d (13:627d) ScientistPic: ; 4e27d (13:627d) INCBIN "pic/trainer/scientist.pic" GiovanniPic: ; 4e3be (13:63be) INCBIN "pic/trainer/giovanni.pic" RocketPic: ; 4e49f (13:649f) INCBIN "pic/trainer/rocket.pic" CooltrainerMPic: ; 4e635 (13:6635) INCBIN "pic/trainer/cooltrainerm.pic" CooltrainerFPic: ; 4e7be (13:67be) INCBIN "pic/trainer/cooltrainerf.pic" BrunoPic: ; 4e943 (13:6943) INCBIN "pic/trainer/bruno.pic" BrockPic: ; 4eb3e (13:6b3e) INCBIN "pic/trainer/brock.pic" MistyPic: ; 4ec40 (13:6c40) INCBIN "pic/trainer/misty.pic" LtSurgePic: ; 4ed30 (13:6d30) INCBIN "pic/trainer/lt.surge.pic" ErikaPic: ; 4eeb5 (13:6eb5) INCBIN "pic/trainer/erika.pic" KogaPic: ; 4efd6 (13:6fd6) INCBIN "pic/trainer/koga.pic" BlainePic: ; 4f150 (13:7150) INCBIN "pic/trainer/blaine.pic" SabrinaPic: ; 4f252 (13:7252) INCBIN "pic/trainer/sabrina.pic" GentlemanPic: ; 4f3d0 (13:73d0) INCBIN "pic/trainer/gentleman.pic" Rival2Pic: ; 4f4cf (13:74cf) INCBIN "pic/trainer/rival2.pic" Rival3Pic: ; 4f623 (13:7623) INCBIN "pic/trainer/rival3.pic" LoreleiPic: ; 4f779 (13:7779) INCBIN "pic/trainer/lorelei.pic" ChannelerPic: ; 4f8a4 (13:78a4) INCBIN "pic/trainer/channeler.pic" AgathaPic: ; 4fa71 (13:7a71) INCBIN "pic/trainer/agatha.pic" LancePic: ; 4fba2 (13:7ba2) INCBIN "pic/trainer/lance.pic" BattleCenterM_h: ; 0x4fd04 to 0x4fd10 (12 bytes) (id=239) db $15 ; tileset db BATTLE_CENTER_HEIGHT, BATTLE_CENTER_WIDTH ; dimensions (y, x) dw BattleCenterMBlocks, BattleCenterMTextPointers, BattleCenterMScript ; blocks, texts, scripts db $00 ; connections dw BattleCenterMObject ; objects BattleCenterMScript: ; 4fd10 (13:7d10) call EnableAutoTextBoxDrawing ld a, [$ff00+$aa] cp $2 ld a, $8 jr z, .asm_4fd1d ; 0x4fd19 $2 ld a, $c .asm_4fd1d ld [$ff00+$8d], a ld a, $1 ld [$ff00+$8c], a call Func_34ae ld hl, $d72d bit 0, [hl] set 0, [hl] ret nz ld hl, $c214 ld a, $8 ld [hli], a ld a, $a ld [hl], a ld a, $8 ld [$c119], a ld a, [$ff00+$aa] cp $2 ret z ld a, $7 ld [$c215], a ld a, $c ld [$c119], a ret BattleCenterMTextPointers: ; 4fd4c (13:7d4c) dw BattleCenterMText1 BattleCenterMText1: ; 4fd4e (13:7d4e) TX_FAR _BattleCenterMText1 db "@" BattleCenterMObject: ; 0x4fd53 (size=10) db $e ; border tile db $0 ; warps db $0 ; signs db $1 ; people db SPRITE_RED, $2 + 4, $2 + 4, $ff, $0, $1 ; person BattleCenterMBlocks: ; 4fd5d (13:7d5d) INCBIN "maps/battlecenterm.blk" TradeCenterM_h: ; 0x4fd71 to 0x4fd7d (12 bytes) (id=240) db $15 ; tileset db TRADE_CENTER_HEIGHT, TRADE_CENTER_WIDTH ; dimensions (y, x) dw TradeCenterMBlocks, TradeCenterMTextPointers, TradeCenterMScript ; blocks, texts, scripts db $00 ; connections dw TradeCenterMObject ; objects TradeCenterMScript: ; 4fd7d (13:7d7d) jp BattleCenterMScript TradeCenterMTextPointers: ; 4fd80 (13:7d80) dw TradeCenterMText1 TradeCenterMText1: ; 4fd82 (13:7d82) TX_FAR _TradeCenterMText1 db "@" TradeCenterMObject: ; 0x4fd87 (size=10) db $e ; border tile db $0 ; warps db $0 ; signs db $1 ; people db SPRITE_RED, $2 + 4, $2 + 4, $ff, $0, $1 ; person TradeCenterMBlocks: ; 4fd91 (13:7d91) INCBIN "maps/tradecenterm.blk" Func_4fda5: ; 4fda5 (13:7da5) call EnableAutoTextBoxDrawing xor a ld [$ccd3], a ld a, [W_NUMINPARTY] ; $d163 cp $6 jr c, .asm_4fe01 ld a, [W_NUMINBOX] ; $da80 cp $14 jr nc, .asm_4fdf9 xor a ld [W_ENEMYBATTSTATUS3], a ; $d069 ld a, [$cf91] ld [W_ENEMYMONID], a ld hl, Func_3eb01 ld b, BANK(Func_3eb01) call Bankswitch call Func_4fe11 ld hl, Func_e7a4 ld b, BANK(Func_e7a4) call Bankswitch ld hl, $cf4b ld a, [$d5a0] and $7f cp $9 jr c, .asm_4fdec sub $9 ld [hl], $f7 inc hl add $f6 jr .asm_4fdee .asm_4fdec add $f7 .asm_4fdee ld [hli], a ld [hl], $50 ld hl, UnnamedText_4fe3f ; $7e3f call PrintText scf ret .asm_4fdf9 ld hl, UnnamedText_4fe44 ; $7e44 call PrintText and a ret .asm_4fe01 call Func_4fe11 call AddPokemonToParty ld a, $1 ld [$cc3c], a ld [$ccd3], a scf ret Func_4fe11: ; 4fe11 (13:7e11) ld a, [$cf91] push af ld [$d11e], a ld a, $3a call Predef ; indirect jump to IndexToPokedex (41010 (10:5010)) ld a, [$d11e] dec a ld c, a ld hl, wPokedexOwned ; $d2f7 ld b, $1 ld a, $10 call Predef ; indirect jump to HandleBitArray (f666 (3:7666)) pop af ld [$d11e], a call GetMonName ld hl, UnnamedText_4fe39 ; $7e39 jp PrintText UnnamedText_4fe39: ; 4fe39 (13:7e39) TX_FAR _UnnamedText_4fe39 db $0b db "@" UnnamedText_4fe3f: ; 4fe3f (13:7e3f) TX_FAR _UnnamedText_4fe3f db "@" UnnamedText_4fe44: ; 4fe44 (13:7e44) TX_FAR _UnnamedText_4fe44 db "@" GetPredefPointer: ; 4fe49 (13:7e49) ; stores hl in $CC4F,$CC50 ; stores de in $CC51,$CC52 ; stores bc in $CC53,$CC54 ; grabs a byte "n" from $CC4E, ; and gets the nth (3-byte) pointer in PredefPointers ; stores the bank of said pointer in [$D0B7] ; stores the pointer in hl and returns ; ld $CC4F,hl ld a,h ld [$CC4F],a ld a,l ld [$CC50],a ; ld $CC51,de ld hl,$CC51 ld a,d ld [hli],a ld a,e ld [hli],a ; ld $CC53,bc ld a,b ld [hli],a ld [hl],c ld hl,PredefPointers ld de,0 ; de = 3 * [$CC4E] ld a,[$CC4E] ld e,a add a,a add a,e ld e,a jr nc,.next inc d .next add hl,de ld d,h ld e,l ; get bank of predef routine ld a,[de] ld [$D0B7],a ; get pointer inc de ld a,[de] ld l,a inc de ld a,[de] ld h,a ret PredefPointers: ; 4fe79 (13:7e79) ; these are pointers to ASM routines. ; they appear to be used in overworld map scripts. dbw BANK(Func_3cd60),Func_3cd60 dbw BANK(Func_3f0c6),Func_3f0c6 dbw BANK(Func_3f073),Func_3f073 dbw BANK(ScaleSpriteByTwo), ScaleSpriteByTwo db BANK(LoadMonBackSprite) ; dbw macro gives an error for some reason dw LoadMonBackSprite dbw BANK(Func_79aba),Func_79aba dbw BANK(Func_f132),Func_f132 HealPartyPredef: ; 4fe8e (13:7e8e) dbw BANK(HealParty),HealParty MoveAnimationPredef: ; 4fe91 (13:7e91) dbw BANK(MoveAnimation),MoveAnimation; 08 play move animation dbw BANK(Func_f71e),Func_f71e dbw BANK(Func_f71e),Func_f71e dbw BANK(Func_f81d),Func_f81d dbw BANK(Func_f836),Func_f836 dbw BANK(Func_f71e),Func_f71e dbw BANK(Func_f71e),Func_f71e db BANK(InitializePlayerData) dw InitializePlayerData dbw BANK(HandleBitArray),HandleBitArray db BANK(RemoveMissableObject) dw RemoveMissableObject db BANK(IsMissableObjectHidden) dw IsMissableObjectHidden dbw BANK(Func_c69c),Func_c69c db BANK(AnyPokemonAliveCheck) dw AnyPokemonAliveCheck db BANK(AddMissableObject) dw AddMissableObject db BANK(AddMissableObject) dw AddMissableObject dbw BANK(Func_ee9e),Func_ee9e db BANK(InitializePlayerData) dw InitializePlayerData dbw BANK(Func_c754),Func_c754 dbw BANK(Func_3af5b),Func_3af5b dbw BANK(Func_6e43),Func_6e43 dbw BANK(Func_f8a5),Func_f8a5; 1C, used in Pokémon Tower dbw $03,Func_3eb5 ; for these two, the bank number is actually 0 dbw $03,GiveItem dbw BANK(Func_480eb),Func_480eb dbw BANK(Func_f8ba),Func_f8ba dbw BANK(Func_480ff),Func_480ff dbw BANK(Func_f929),Func_f929 dbw BANK(Func_f9a0),Func_f9a0 dbw BANK(Func_48125),Func_48125 dbw BANK(UpdateHPBar),UpdateHPBar dbw BANK(Func_f9dc),Func_f9dc dbw BANK(Func_5ab0),Func_5ab0 dbw BANK(Func_3ed02),Func_3ed02 db BANK(DisplayPokedexMenu_) dw DisplayPokedexMenu_ dbw BANK(Func_3ad1c),Func_3ad1c dbw BANK(SaveSAVtoSRAM0),SaveSAVtoSRAM0 dbw BANK(Func_3ef18),Func_3ef18 dbw BANK(Func_5a5f),Func_5a5f dbw BANK(DrawBadges), DrawBadges dbw BANK(Func_410f3),Func_410f3 dbw BANK(Func_7096d),Func_7096d dbw BANK(Func_79dda),Func_79dda dbw BANK(PlayIntro),PlayIntro dbw BANK(Func_79869),Func_79869 dbw BANK(Func_70b5d),Func_70b5d dbw BANK(Func_c586),Func_c586 dbw BANK(StatusScreen),StatusScreen ; 37 0x12953 dbw BANK(StatusScreen2),StatusScreen2 ; 38 dbw BANK(Func_410e2),Func_410e2 db BANK(CheckEngagePlayer) dw CheckEngagePlayer dbw BANK(IndexToPokedex),IndexToPokedex dbw BANK(Predef3B),Predef3B; 3B display pic? dbw BANK(Func_ef54),Func_ef54 dbw BANK(ShowPokedexData),ShowPokedexData dbw BANK(WriteMonMoves),WriteMonMoves dbw BANK(SaveSAV),SaveSAV dbw BANK(Func_7202b),Func_7202b dbw BANK(Func_f113),Func_f113 dbw BANK(SetPartyMonTypes),SetPartyMonTypes db BANK(TestMonMoveCompatibility) dw TestMonMoveCompatibility dbw BANK(TMToMove),TMToMove dbw BANK(Func_71ddf),Func_71ddf dbw BANK(Func_5c0dc),Func_5c0dc; 46 load dex screen db BANK(_AddPokemonToParty) dw _AddPokemonToParty dbw BANK(UpdateHPBar),UpdateHPBar dbw BANK(Func_3cdec),Func_3cdec dbw BANK(Func_70f60),Func_70f60 dbw BANK(Func_27d6b),Func_27d6b dbw BANK(Func_17c47),Func_17c47; 4C player exclamation dbw BANK(Func_5aaf),Func_5aaf; return immediately db BANK(AskForMonNickname) dw AskForMonNickname dbw BANK(Func_37ca1),Func_37ca1 dbw BANK(SaveSAVtoSRAM2),SaveSAVtoSRAM2 dbw BANK(LoadSAVCheckSum2),LoadSAVCheckSum2 dbw BANK(LoadSAV),LoadSAV dbw BANK(SaveSAVtoSRAM1),SaveSAVtoSRAM1 dbw BANK(Predef54),Predef54 ; 54 initiate trade dbw BANK(Func_7405c),Func_7405c dbw BANK(DisplayDexRating),DisplayDexRating db $1E ; uses wrong bank number dw _DoFlyOrTeleportAwayGraphics db $1E ; uses wrong bank number dw Func_70510 dbw BANK(Func_c5be),Func_c5be dbw BANK(Func_c60b),Func_c60b dbw BANK(Func_cd99),Func_cd99 dbw BANK(PickupItem),PickupItem dbw BANK(Func_27d98),Func_27d98 dbw BANK(LoadMovePPs),LoadMovePPs DrawHPBarPredef: ; 4ff96 (13:7f96) dbw BANK(Func_128ef),Func_128ef ; 5F draw HP bar dbw BANK(Func_128f6),Func_128f6 dbw BANK(Func_1c9c6),Func_1c9c6 dbw BANK(Func_59035),Func_59035 SECTION "bank14",ROMX,BANK[$14] Route22_h: ; 0x50000 to 0x50022 (34 bytes) (id=33) db $00 ; tileset db ROUTE_22_HEIGHT, ROUTE_22_WIDTH ; dimensions (y, x) dw Route22Blocks, Route22TextPointers, Route22Script ; blocks, texts, scripts db NORTH | EAST ; connections NORTH_MAP_CONNECTION ROUTE_23, ROUTE_23_WIDTH, ROUTE_23_HEIGHT, 0, 0, ROUTE_23_WIDTH, Route23Blocks EAST_MAP_CONNECTION VIRIDIAN_CITY, VIRIDIAN_CITY_WIDTH, -3, 1, VIRIDIAN_CITY_HEIGHT - 3, ViridianCityBlocks, ROUTE_22_WIDTH dw Route22Object ; objects Route22Object: ; 0x50022 (size=27) db $2c ; border tile db $1 ; warps db $5, $8, $0, ROUTE_22_GATE db $1 ; signs db $b, $7, $3 ; Route22Text3 db $2 ; people db SPRITE_BLUE, $5 + 4, $19 + 4, $ff, $ff, $1 ; person db SPRITE_BLUE, $5 + 4, $19 + 4, $ff, $ff, $2 ; person ; warp-to EVENT_DISP $14, $5, $8 ; ROUTE_22_GATE Route22Blocks: ; 5003d (14:403d) INCBIN "maps/route22.blk" Route20_h: ; 0x500f1 to 0x50113 (34 bytes) (id=31) db $00 ; tileset db ROUTE_20_HEIGHT, ROUTE_20_WIDTH ; dimensions (y, x) dw Route20Blocks, Route20TextPointers, Route20Script ; blocks, texts, scripts db WEST | EAST ; connections WEST_MAP_CONNECTION CINNABAR_ISLAND, CINNABAR_ISLAND_WIDTH, 0, 0, CINNABAR_ISLAND_HEIGHT, CinnabarIslandBlocks, ROUTE_20_WIDTH EAST_MAP_CONNECTION ROUTE_19, ROUTE_19_WIDTH, -3, 15, ROUTE_19_HEIGHT - 15, Route19Blocks, ROUTE_20_WIDTH dw Route20Object ; objects Route20Object: ; 0x50113 (size=106) db $43 ; border tile db $2 ; warps db $5, $30, $0, SEAFOAM_ISLANDS_1 db $9, $3a, $2, SEAFOAM_ISLANDS_1 db $2 ; signs db $7, $33, $b ; Route20Text11 db $b, $39, $c ; Route20Text12 db $a ; people db SPRITE_SWIMMER, $8 + 4, $57 + 4, $ff, $d1, $41, SWIMMER + $C8, $9 ; trainer db SPRITE_SWIMMER, $b + 4, $44 + 4, $ff, $d1, $42, BEAUTY + $C8, $f ; trainer db SPRITE_SWIMMER, $a + 4, $2d + 4, $ff, $d0, $43, BEAUTY + $C8, $6 ; trainer db SPRITE_SWIMMER, $e + 4, $37 + 4, $ff, $d3, $44, JR__TRAINER_F + $C8, $18 ; trainer db SPRITE_SWIMMER, $d + 4, $26 + 4, $ff, $d0, $45, SWIMMER + $C8, $a ; trainer db SPRITE_SWIMMER, $d + 4, $57 + 4, $ff, $d1, $46, SWIMMER + $C8, $b ; trainer db SPRITE_BLACK_HAIR_BOY_1, $9 + 4, $22 + 4, $ff, $d1, $47, BIRD_KEEPER + $C8, $b ; trainer db SPRITE_SWIMMER, $7 + 4, $19 + 4, $ff, $d1, $48, BEAUTY + $C8, $7 ; trainer db SPRITE_SWIMMER, $c + 4, $18 + 4, $ff, $d0, $49, JR__TRAINER_F + $C8, $10 ; trainer db SPRITE_SWIMMER, $8 + 4, $f + 4, $ff, $d1, $4a, BEAUTY + $C8, $8 ; trainer ; warp-to EVENT_DISP $32, $5, $30 ; SEAFOAM_ISLANDS_1 EVENT_DISP $32, $9, $3a ; SEAFOAM_ISLANDS_1 Route20Blocks: ; 5017d (14:417d) INCBIN "maps/route20.blk" Route23_h: ; 0x5033f to 0x50361 (34 bytes) (id=34) db $17 ; tileset db ROUTE_23_HEIGHT, ROUTE_23_WIDTH ; dimensions (y, x) dw Route23Blocks, Route23TextPointers, Route23Script ; blocks, texts, scripts db NORTH | SOUTH ; connections NORTH_MAP_CONNECTION INDIGO_PLATEAU, INDIGO_PLATEAU_WIDTH, INDIGO_PLATEAU_HEIGHT, 0, 0, INDIGO_PLATEAU_WIDTH, IndigoPlateauBlocks SOUTH_MAP_CONNECTION ROUTE_22, ROUTE_22_WIDTH, 0, 0, ROUTE_22_WIDTH - 7, Route22Blocks, ROUTE_23_WIDTH, ROUTE_23_HEIGHT dw Route23Object ; objects Route23Object: ; 0x50361 (size=81) db $f ; border tile db $4 ; warps db $8b, $7, $2, ROUTE_22_GATE db $8b, $8, $3, ROUTE_22_GATE db $1f, $4, $0, VICTORY_ROAD_1 db $1f, $e, $1, VICTORY_ROAD_2 db $1 ; signs db $21, $3, $8 ; Route23Text8 db $7 ; people db SPRITE_GUARD, $23 + 4, $4 + 4, $ff, $d0, $1 ; person db SPRITE_GUARD, $38 + 4, $a + 4, $ff, $d0, $2 ; person db SPRITE_SWIMMER, $55 + 4, $8 + 4, $ff, $d0, $3 ; person db SPRITE_SWIMMER, $60 + 4, $b + 4, $ff, $d0, $4 ; person db SPRITE_GUARD, $69 + 4, $c + 4, $ff, $d0, $5 ; person db SPRITE_GUARD, $77 + 4, $8 + 4, $ff, $d0, $6 ; person db SPRITE_GUARD, $88 + 4, $8 + 4, $ff, $d0, $7 ; person ; warp-to EVENT_DISP $a, $8b, $7 ; ROUTE_22_GATE EVENT_DISP $a, $8b, $8 ; ROUTE_22_GATE EVENT_DISP $a, $1f, $4 ; VICTORY_ROAD_1 EVENT_DISP $a, $1f, $e ; VICTORY_ROAD_2 Route23Blocks: ; 503b2 (14:43b2) INCBIN "maps/route23.blk" Route24_h: ; 0x50682 to 0x506a4 (34 bytes) (id=35) db $00 ; tileset db ROUTE_24_HEIGHT, ROUTE_24_WIDTH ; dimensions (y, x) dw Route24Blocks, Route24TextPointers, Route24Script ; blocks, texts, scripts db SOUTH | EAST ; connections SOUTH_MAP_CONNECTION CERULEAN_CITY, CERULEAN_CITY_WIDTH, -3, 2, CERULEAN_CITY_WIDTH - 4, CeruleanCityBlocks, ROUTE_24_WIDTH, ROUTE_24_HEIGHT EAST_MAP_CONNECTION ROUTE_25, ROUTE_25_WIDTH, 0, 0, ROUTE_25_HEIGHT, Route25Blocks, ROUTE_24_WIDTH dw Route24Object ; objects Route24Object: ; 0x506a4 (size=67) db $2c ; border tile db $0 ; warps db $0 ; signs db $8 ; people db SPRITE_BLACK_HAIR_BOY_1, $f + 4, $b + 4, $ff, $d2, $41, ROCKET + $C8, $6 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $14 + 4, $5 + 4, $ff, $d1, $42, JR__TRAINER_M + $C8, $2 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $13 + 4, $b + 4, $ff, $d2, $43, JR__TRAINER_M + $C8, $3 ; trainer db SPRITE_LASS, $16 + 4, $a + 4, $ff, $d3, $44, LASS + $C8, $7 ; trainer db SPRITE_BUG_CATCHER, $19 + 4, $b + 4, $ff, $d2, $45, YOUNGSTER + $C8, $4 ; trainer db SPRITE_LASS, $1c + 4, $a + 4, $ff, $d3, $46, LASS + $C8, $8 ; trainer db SPRITE_BUG_CATCHER, $1f + 4, $b + 4, $ff, $d2, $47, BUG_CATCHER + $C8, $9 ; trainer db SPRITE_BALL, $5 + 4, $a + 4, $ff, $ff, $88, TM_45 ; item Route24Blocks: ; 506e7 (14:46e7) INCBIN "maps/route24.blk" Route25_h: ; 0x5079b to 0x507b2 (23 bytes) (id=36) db $00 ; tileset db ROUTE_25_HEIGHT, ROUTE_25_WIDTH ; dimensions (y, x) dw Route25Blocks, Route25TextPointers, Route25Script ; blocks, texts, scripts db WEST ; connections WEST_MAP_CONNECTION ROUTE_24, ROUTE_24_WIDTH, 0, 0, ROUTE_24_HEIGHT - 6, Route24Blocks, ROUTE_25_WIDTH dw Route25Object ; objects Route25Object: ; 0x507b2 (size=94) db $2c ; border tile db $1 ; warps db $3, $2d, $0, BILLS_HOUSE db $1 ; signs db $3, $2b, $b ; Route25Text11 db $a ; people db SPRITE_BUG_CATCHER, $2 + 4, $e + 4, $ff, $d0, $41, YOUNGSTER + $C8, $5 ; trainer db SPRITE_BUG_CATCHER, $5 + 4, $12 + 4, $ff, $d1, $42, YOUNGSTER + $C8, $6 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $4 + 4, $18 + 4, $ff, $d0, $43, JR__TRAINER_M + $C8, $2 ; trainer db SPRITE_LASS, $8 + 4, $12 + 4, $ff, $d3, $44, LASS + $C8, $9 ; trainer db SPRITE_BUG_CATCHER, $3 + 4, $20 + 4, $ff, $d2, $45, YOUNGSTER + $C8, $7 ; trainer db SPRITE_LASS, $4 + 4, $25 + 4, $ff, $d0, $46, LASS + $C8, $a ; trainer db SPRITE_HIKER, $4 + 4, $8 + 4, $ff, $d3, $47, HIKER + $C8, $2 ; trainer db SPRITE_HIKER, $9 + 4, $17 + 4, $ff, $d1, $48, HIKER + $C8, $3 ; trainer db SPRITE_HIKER, $7 + 4, $d + 4, $ff, $d3, $49, HIKER + $C8, $4 ; trainer db SPRITE_BALL, $2 + 4, $16 + 4, $ff, $ff, $8a, TM_19 ; item ; warp-to EVENT_DISP $1e, $3, $2d ; BILLS_HOUSE Route25Blocks: ; 50810 (14:4810) INCBIN "maps/route25.blk" IndigoPlateau_h: ; 0x5091e to 0x50935 (23 bytes) (id=9) db $17 ; tileset db INDIGO_PLATEAU_HEIGHT, INDIGO_PLATEAU_WIDTH ; dimensions (y, x) dw IndigoPlateauBlocks, IndigoPlateauTextPointers, IndigoPlateauScript ; blocks, texts, scripts db SOUTH ; connections SOUTH_MAP_CONNECTION ROUTE_23, ROUTE_23_WIDTH, 0, 0, ROUTE_23_WIDTH, Route23Blocks, INDIGO_PLATEAU_WIDTH, INDIGO_PLATEAU_HEIGHT dw IndigoPlateauObject ; objects IndigoPlateauScript: ; 50935 (14:4935) ret IndigoPlateauTextPointers: ; 50936 (14:4936) IndigoPlateauObject: ; 0x50936 (size=20) db $e ; border tile db $2 ; warps db $5, $9, $0, INDIGO_PLATEAU_LOBBY db $5, $a, $0, INDIGO_PLATEAU_LOBBY db $0 ; signs db $0 ; people ; warp-to EVENT_DISP $a, $5, $9 ; INDIGO_PLATEAU_LOBBY EVENT_DISP $a, $5, $a ; INDIGO_PLATEAU_LOBBY IndigoPlateauBlocks: ; 5094a (14:494a) INCBIN "maps/indigoplateau.blk" SaffronCity_h: ; 0x509a4 to 0x509dc (56 bytes) (id=10) db $00 ; tileset db SAFFRON_CITY_HEIGHT, SAFFRON_CITY_WIDTH ; dimensions (y, x) dw SaffronCityBlocks, SaffronCityTextPointers, SaffronCityScript ; blocks, texts, scripts db NORTH | SOUTH | WEST | EAST ; connections NORTH_MAP_CONNECTION ROUTE_5, ROUTE_5_WIDTH, ROUTE_5_HEIGHT, 5, 0, ROUTE_5_WIDTH, Route5Blocks SOUTH_MAP_CONNECTION ROUTE_6, ROUTE_6_WIDTH, 5, 0, ROUTE_6_WIDTH, Route6Blocks, SAFFRON_CITY_WIDTH, SAFFRON_CITY_HEIGHT WEST_MAP_CONNECTION ROUTE_7, ROUTE_7_WIDTH, 4, 0, ROUTE_7_HEIGHT, Route7Blocks, SAFFRON_CITY_WIDTH EAST_MAP_CONNECTION ROUTE_8, ROUTE_8_WIDTH, 4, 0, ROUTE_8_HEIGHT, Route8Blocks, SAFFRON_CITY_WIDTH dw SaffronCityObject ; objects SaffronCityObject: ; 0x509dc (size=188) db $f ; border tile db $8 ; warps db $5, $7, $0, COPYCATS_HOUSE_1F db $3, $1a, $0, FIGHTINGDOJO db $3, $22, $0, SAFFRON_GYM db $b, $d, $0, SAFFRON_HOUSE_1 db $b, $19, $0, SAFFRON_MART db $15, $12, $0, SILPH_CO_1F db $1d, $9, $0, SAFFRON_POKECENTER db $1d, $1d, $0, SAFFRON_HOUSE_2 db $a ; signs db $5, $11, $10 ; SaffronCityText16 db $5, $1b, $11 ; SaffronCityText17 db $5, $23, $12 ; SaffronCityText18 db $b, $1a, $13 ; MartSignText db $13, $27, $14 ; SaffronCityText20 db $15, $5, $15 ; SaffronCityText21 db $15, $f, $16 ; SaffronCityText22 db $1d, $a, $17 ; PokeCenterSignText db $1d, $1b, $18 ; SaffronCityText24 db $13, $1, $19 ; SaffronCityText25 db $f ; people db SPRITE_ROCKET, $6 + 4, $7 + 4, $ff, $ff, $1 ; person db SPRITE_ROCKET, $8 + 4, $14 + 4, $fe, $2, $2 ; person db SPRITE_ROCKET, $4 + 4, $22 + 4, $ff, $ff, $3 ; person db SPRITE_ROCKET, $c + 4, $d + 4, $ff, $ff, $4 ; person db SPRITE_ROCKET, $19 + 4, $b + 4, $fe, $2, $5 ; person db SPRITE_ROCKET, $d + 4, $20 + 4, $fe, $2, $6 ; person db SPRITE_ROCKET, $1e + 4, $12 + 4, $fe, $2, $7 ; person db SPRITE_OAK_AIDE, $e + 4, $8 + 4, $fe, $0, $8 ; person db SPRITE_LAPRAS_GIVER, $17 + 4, $17 + 4, $ff, $ff, $9 ; person db SPRITE_ERIKA, $1e + 4, $11 + 4, $fe, $2, $a ; person db SPRITE_GENTLEMAN, $c + 4, $1e + 4, $ff, $d0, $b ; person db SPRITE_BIRD, $c + 4, $1f + 4, $ff, $d0, $c ; person db SPRITE_ROCKER, $8 + 4, $12 + 4, $ff, $d1, $d ; person db SPRITE_ROCKET, $16 + 4, $12 + 4, $ff, $d0, $e ; person db SPRITE_ROCKET, $16 + 4, $13 + 4, $ff, $d0, $f ; person ; warp-to EVENT_DISP $14, $5, $7 ; COPYCATS_HOUSE_1F EVENT_DISP $14, $3, $1a ; FIGHTINGDOJO EVENT_DISP $14, $3, $22 ; SAFFRON_GYM EVENT_DISP $14, $b, $d ; SAFFRON_HOUSE_1 EVENT_DISP $14, $b, $19 ; SAFFRON_MART EVENT_DISP $14, $15, $12 ; SILPH_CO_1F EVENT_DISP $14, $1d, $9 ; SAFFRON_POKECENTER EVENT_DISP $14, $1d, $1d ; SAFFRON_HOUSE_2 SaffronCityBlocks: ; 50a98 (14:4a98) INCBIN "maps/saffroncity.blk" SaffronCityScript: ; 50c00 (14:4c00) jp EnableAutoTextBoxDrawing SaffronCityTextPointers: ; 50c03 (14:4c03) dw SaffronCityText1 dw SaffronCityText2 dw SaffronCityText3 dw SaffronCityText4 dw SaffronCityText5 dw SaffronCityText6 dw SaffronCityText7 dw SaffronCityText8 dw SaffronCityText9 dw SaffronCityText10 dw SaffronCityText11 dw SaffronCityText12 dw SaffronCityText13 dw SaffronCityText14 dw SaffronCityText15 dw SaffronCityText16 dw SaffronCityText17 dw SaffronCityText18 dw MartSignText dw SaffronCityText20 dw SaffronCityText21 dw SaffronCityText22 dw PokeCenterSignText dw SaffronCityText24 dw SaffronCityText25 SaffronCityText1: ; 50c35 (14:4c35) TX_FAR _SaffronCityText1 db "@" SaffronCityText2: ; 50c3a (14:4c3a) TX_FAR _SaffronCityText2 db "@" SaffronCityText3: ; 50c3f (14:4c3f) TX_FAR _SaffronCityText3 db "@" SaffronCityText4: ; 50c44 (14:4c44) TX_FAR _SaffronCityText4 db "@" SaffronCityText5: ; 50c49 (14:4c49) TX_FAR _SaffronCityText5 db "@" SaffronCityText6: ; 50c4e (14:4c4e) TX_FAR _SaffronCityText6 db "@" SaffronCityText7: ; 50c53 (14:4c53) TX_FAR _SaffronCityText7 db "@" SaffronCityText8: ; 50c58 (14:4c58) TX_FAR _SaffronCityText8 db "@" SaffronCityText9: ; 50c5d (14:4c5d) TX_FAR _SaffronCityText9 db "@" SaffronCityText10: ; 50c62 (14:4c62) TX_FAR _SaffronCityText10 db "@" SaffronCityText11: ; 50c67 (14:4c67) TX_FAR _SaffronCityText11 db "@" SaffronCityText12: ; 50c6c (14:4c6c) TX_FAR _SaffronCityText12 db $15, "@" SaffronCityText13: ; 50c72 (14:4c72) TX_FAR _SaffronCityText13 db "@" SaffronCityText14: ; 50c77 (14:4c77) TX_FAR _SaffronCityText14 db "@" SaffronCityText15: ; 50c7c (14:4c7c) TX_FAR _SaffronCityText15 db "@" SaffronCityText16: ; 50c81 (14:4c81) TX_FAR _SaffronCityText16 db "@" SaffronCityText17: ; 50c86 (14:4c86) TX_FAR _SaffronCityText17 db "@" SaffronCityText18: ; 50c8b (14:4c8b) TX_FAR _SaffronCityText18 db "@" SaffronCityText20: ; 50c90 (14:4c90) TX_FAR _SaffronCityText20 db "@" SaffronCityText21: ; 50c95 (14:4c95) TX_FAR _SaffronCityText21 db "@" SaffronCityText22: ; 50c9a (14:4c9a) TX_FAR _SaffronCityText22 db "@" SaffronCityText24: ; 50c9f (14:4c9f) TX_FAR _SaffronCityText24 db "@" SaffronCityText25: ; 50ca4 (14:4ca4) TX_FAR _SaffronCityText25 db "@" Route20Script: ; 50ca9 (14:4ca9) ld hl, $d7e7 bit 0, [hl] res 0, [hl] call nz, Func_50cc6 call EnableAutoTextBoxDrawing ld hl, Route20TrainerHeader0 ; $4d3a ld de, Route20ScriptPointers ld a, [W_ROUTE20CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROUTE20CURSCRIPT], a ret Func_50cc6: ; 50cc6 (14:4cc6) ld a, [$d880] and $3 cp $3 jr z, .asm_50cef ld a, $d7 call Func_50d0c ld a, $d8 call Func_50d0c ld hl, .MissableObjectIDs ; $4ce8 .asm_50cdc ld a, [hli] cp $ff jr z, .asm_50cef push hl call Func_50d14 pop hl jr .asm_50cdc .MissableObjectIDs: ; 50ce8 (14:4ce8) db $D9,$DA,$DB,$DC,$DF,$E0,$FF .asm_50cef ld a, [$d881] and $3 cp $3 ret z ld a, $dd call Func_50d0c ld a, $de call Func_50d0c ld a, $e1 call Func_50d14 ld a, $e2 call Func_50d14 ret Func_50d0c: ; 50d0c (14:4d0c) ld [$cc4d], a ld a, $15 jp Predef ; indirect jump to AddMissableObject (f1c8 (3:71c8)) Func_50d14: ; 50d14 (14:4d14) ld [$cc4d], a ld a, $11 jp Predef ; indirect jump to RemoveMissableObject (f1d7 (3:71d7)) Route20ScriptPointers: ; 50d1c (14:4d1c) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle Route20TextPointers: ; 50d22 (14:4d22) dw Route20Text1 dw Route20Text2 dw Route20Text3 dw Route20Text4 dw Route20Text5 dw Route20Text6 dw Route20Text7 dw Route20Text8 dw Route20Text9 dw Route20Text10 dw Route20Text11 dw Route20Text12 Route20TrainerHeaders: ; 50d3a (14:4d3a) Route20TrainerHeader0: ; 50d3a (14:4d3a) db $1 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e7 ; flag's byte dw Route20BattleText1 ; 0x4e17 TextBeforeBattle dw Route20AfterBattleText1 ; 0x4e21 TextAfterBattle dw Route20EndBattleText1 ; 0x4e1c TextEndBattle dw Route20EndBattleText1 ; 0x4e1c TextEndBattle Route20TrainerHeader2: ; 50d46 (14:4d46) db $2 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e7 ; flag's byte dw Route20BattleText2 ; 0x4e26 TextBeforeBattle dw Route20AfterBattleText2 ; 0x4e30 TextAfterBattle dw Route20EndBattleText2 ; 0x4e2b TextEndBattle dw Route20EndBattleText2 ; 0x4e2b TextEndBattle Route20TrainerHeader3: ; 50d52 (14:4d52) db $3 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7e7 ; flag's byte dw Route20BattleText3 ; 0x4e35 TextBeforeBattle dw Route20AfterBattleText3 ; 0x4e3f TextAfterBattle dw Route20EndBattleText3 ; 0x4e3a TextEndBattle dw Route20EndBattleText3 ; 0x4e3a TextEndBattle Route20TrainerHeader4: ; 50d5e (14:4d5e) db $4 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e7 ; flag's byte dw Route20BattleText4 ; 0x4e44 TextBeforeBattle dw Route20AfterBattleText4 ; 0x4e4e TextAfterBattle dw Route20EndBattleText4 ; 0x4e49 TextEndBattle dw Route20EndBattleText4 ; 0x4e49 TextEndBattle Route20TrainerHeader5: ; 50d6a (14:4d6a) db $5 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7e7 ; flag's byte dw Route20BattleText5 ; 0x4e53 TextBeforeBattle dw Route20AfterBattleText5 ; 0x4e5d TextAfterBattle dw Route20EndBattleText5 ; 0x4e58 TextEndBattle dw Route20EndBattleText5 ; 0x4e58 TextEndBattle Route20TrainerHeader6: ; 50d76 (14:4d76) db $6 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e7 ; flag's byte dw Route20BattleText6 ; 0x4e62 TextBeforeBattle dw Route20AfterBattleText6 ; 0x4e6c TextAfterBattle dw Route20EndBattleText6 ; 0x4e67 TextEndBattle dw Route20EndBattleText6 ; 0x4e67 TextEndBattle Route20TrainerHeader7: ; 50d82 (14:4d82) db $7 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7e7 ; flag's byte dw Route20BattleText7 ; 0x4e71 TextBeforeBattle dw Route20AfterBattleText7 ; 0x4e7b TextAfterBattle dw Route20EndBattleText7 ; 0x4e76 TextEndBattle dw Route20EndBattleText7 ; 0x4e76 TextEndBattle Route20TrainerHeader8: ; 50d8e (14:4d8e) db $8 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e7 ; flag's byte dw Route20BattleText8 ; 0x4e80 TextBeforeBattle dw Route20AfterBattleText8 ; 0x4e8a TextAfterBattle dw Route20EndBattleText8 ; 0x4e85 TextEndBattle dw Route20EndBattleText8 ; 0x4e85 TextEndBattle Route20TrainerHeader9: ; 50d9a (14:4d9a) db $9 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7e7 ; flag's byte dw Route20BattleText9 ; 0x4e8f TextBeforeBattle dw Route20AfterBattleText9 ; 0x4e99 TextAfterBattle dw Route20EndBattleText9 ; 0x4e94 TextEndBattle dw Route20EndBattleText9 ; 0x4e94 TextEndBattle Route20TrainerHeader10: ; 50da6 (14:4da6) db $a ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e7 ; flag's byte dw Route20BattleText10 ; 0x4e9e TextBeforeBattle dw Route20AfterBattleText10 ; 0x4ea8 TextAfterBattle dw Route20EndBattleText10 ; 0x4ea3 TextEndBattle dw Route20EndBattleText10 ; 0x4ea3 TextEndBattle db $ff Route20Text1: ; 50db3 (14:4db3) db $08 ; asm ld hl, Route20TrainerHeader0 call TalkToTrainer jp TextScriptEnd Route20Text2: ; 50dbd (14:4dbd) db $08 ; asm ld hl, Route20TrainerHeader2 call TalkToTrainer jp TextScriptEnd Route20Text3: ; 50dc7 (14:4dc7) db $08 ; asm ld hl, Route20TrainerHeader3 call TalkToTrainer jp TextScriptEnd Route20Text4: ; 50dd1 (14:4dd1) db $08 ; asm ld hl, Route20TrainerHeader4 call TalkToTrainer jp TextScriptEnd Route20Text5: ; 50ddb (14:4ddb) db $08 ; asm ld hl, Route20TrainerHeader5 call TalkToTrainer jp TextScriptEnd Route20Text6: ; 50de5 (14:4de5) db $08 ; asm ld hl, Route20TrainerHeader6 call TalkToTrainer jp TextScriptEnd Route20Text7: ; 50def (14:4def) db $08 ; asm ld hl, Route20TrainerHeader7 call TalkToTrainer jp TextScriptEnd Route20Text8: ; 50df9 (14:4df9) db $08 ; asm ld hl, Route20TrainerHeader8 call TalkToTrainer jp TextScriptEnd Route20Text9: ; 50e03 (14:4e03) db $08 ; asm ld hl, Route20TrainerHeader9 call TalkToTrainer jp TextScriptEnd Route20Text10: ; 50e0d (14:4e0d) db $08 ; asm ld hl, Route20TrainerHeader10 call TalkToTrainer jp TextScriptEnd Route20BattleText1: ; 50e17 (14:4e17) TX_FAR _Route20BattleText1 db "@" Route20EndBattleText1: ; 50e1c (14:4e1c) TX_FAR _Route20EndBattleText1 db "@" Route20AfterBattleText1: ; 50e21 (14:4e21) TX_FAR _Route20AfterBattleText1 db "@" Route20BattleText2: ; 50e26 (14:4e26) TX_FAR _Route20BattleText2 db "@" Route20EndBattleText2: ; 50e2b (14:4e2b) TX_FAR _Route20EndBattleText2 db "@" Route20AfterBattleText2: ; 50e30 (14:4e30) TX_FAR _Route20AfterBattleText2 db "@" Route20BattleText3: ; 50e35 (14:4e35) TX_FAR _Route20BattleText3 db "@" Route20EndBattleText3: ; 50e3a (14:4e3a) TX_FAR _Route20EndBattleText3 db "@" Route20AfterBattleText3: ; 50e3f (14:4e3f) TX_FAR _Route20AfterBattleText3 db "@" Route20BattleText4: ; 50e44 (14:4e44) TX_FAR _Route20BattleText4 db "@" Route20EndBattleText4: ; 50e49 (14:4e49) TX_FAR _Route20EndBattleText4 db "@" Route20AfterBattleText4: ; 50e4e (14:4e4e) TX_FAR _Route20AfterBattleText4 db "@" Route20BattleText5: ; 50e53 (14:4e53) TX_FAR _Route20BattleText5 db "@" Route20EndBattleText5: ; 50e58 (14:4e58) TX_FAR _Route20EndBattleText5 db "@" Route20AfterBattleText5: ; 50e5d (14:4e5d) TX_FAR _Route20AfterBattleText5 db "@" Route20BattleText6: ; 50e62 (14:4e62) TX_FAR _Route20BattleText6 db "@" Route20EndBattleText6: ; 50e67 (14:4e67) TX_FAR _Route20EndBattleText6 db "@" Route20AfterBattleText6: ; 50e6c (14:4e6c) TX_FAR _Route20AfterBattleText6 db "@" Route20BattleText7: ; 50e71 (14:4e71) TX_FAR _Route20BattleText7 db "@" Route20EndBattleText7: ; 50e76 (14:4e76) TX_FAR _Route20EndBattleText7 db "@" Route20AfterBattleText7: ; 50e7b (14:4e7b) TX_FAR _Route20AfterBattleText7 db "@" Route20BattleText8: ; 50e80 (14:4e80) TX_FAR _Route20BattleText8 db "@" Route20EndBattleText8: ; 50e85 (14:4e85) TX_FAR _Route20EndBattleText8 db "@" Route20AfterBattleText8: ; 50e8a (14:4e8a) TX_FAR _Route20AfterBattleText8 db "@" Route20BattleText9: ; 50e8f (14:4e8f) TX_FAR _Route20BattleText9 db "@" Route20EndBattleText9: ; 50e94 (14:4e94) TX_FAR _Route20EndBattleText9 db "@" Route20AfterBattleText9: ; 50e99 (14:4e99) TX_FAR _Route20AfterBattleText9 db "@" Route20BattleText10: ; 50e9e (14:4e9e) TX_FAR _Route20BattleText10 db "@" Route20EndBattleText10: ; 50ea3 (14:4ea3) TX_FAR _Route20EndBattleText10 db "@" Route20AfterBattleText10: ; 50ea8 (14:4ea8) TX_FAR _Route20AfterBattleText10 db "@" Route20Text12: ; 50ead (14:4ead) Route20Text11: ; 50ead (14:4ead) TX_FAR _Route20Text11 db "@" Route22Script: ; 50eb2 (14:4eb2) call EnableAutoTextBoxDrawing ld hl, Route22ScriptPointers ld a, [W_ROUTE22CURSCRIPT] jp CallFunctionInTable Route22ScriptPointers: ; 50ebe (14:4ebe) dw Route22Script0 dw Route22Script1 dw Route22Script2 dw Route22Script3 dw Route22Script4 dw Route22Script5 dw Route22Script6 dw Route22Script7 Func_50ece: ; 50ece (14:4ece) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_ROUTE22CURSCRIPT], a Route22Script7: ; 50ed5 (14:4ed5) ret Func_50ed6: ; 50ed6 (14:4ed6) ld a, [W_RIVALSTARTER] ; $d715 ld b, a .asm_50eda ld a, [hli] cp b jr z, .asm_50ee1 inc hl jr .asm_50eda .asm_50ee1 ld a, [hl] ld [W_TRAINERNO], a ; $d05d ret Func_50ee6: ; 50ee6 (14:4ee6) ld de, MovementData_50efb ; $4efb ld a, [$cf0d] cp $1 jr z, .asm_50ef1 inc de .asm_50ef1 call MoveSprite ld a, $c ld [$FF00+$8d], a jp Func_34a6 MovementData_50efb: ; 50efb (14:4efb) db $C0,$C0,$C0,$C0,$FF Route22Script0: ; 50f00 (14:4f00) ld a, [$d7eb] bit 7, a ret z ld hl, .CoordsData_50f2d ; $4f2d call ArePlayerCoordsInArray ret nc ld a, [$cd3d] ld [$cf0d], a xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld a, $2 ld [$d528], a ld a, [$d7eb] bit 0, a jr nz, .asm_50f32 ; 0x50f25 $b bit 1, a jp nz, Func_5104e ret .CoordsData_50f2d db $04, $1D db $05, $1D db $FF .asm_50f32 ld a, $1 ld [$cd4f], a xor a ld [$cd50], a ld a, $4c call Predef ld a, [$d700] and a jr z, .asm_50f4e ; 0x50f44 $8 ld a, $ff ld [$c0ee], a call PlaySound .asm_50f4e ld c, BANK(Music_MeetRival) ld a, MUSIC_MEET_RIVAL call PlayMusic ld a, $1 ld [$ff00+$8c], a call Func_50ee6 ld a, $1 ld [W_ROUTE22CURSCRIPT], a ret Route22Script1: ; 50f62 (14:4f62) ld a, [$d730] bit 0, a ret nz ld a, [$cf0d] cp $1 jr nz, .asm_50f78 ; 0x50f6d $9 ld a, $4 ld [$d528], a ld a, $4 jr .asm_50f7a ; 0x50f76 $2 .asm_50f78 ld a, $c .asm_50f7a ld [$ff00+$8d], a ld a, $1 ld [$ff00+$8c], a call Func_34a6 xor a ld [wJoypadForbiddenButtonsMask], a ld a, $1 ld [$ff00+$8c], a call DisplayTextID ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, UnnamedText_511b7 ld de, UnnamedText_511bc call PreBattleSaveRegisters ld a, $e1 ld [$d059], a ld hl, StarterMons_50faf ; $4faf call Func_50ed6 ld a, $2 ld [W_ROUTE22CURSCRIPT], a ret StarterMons_50faf: ; 50faf (14:4faf) db SQUIRTLE,$04 db BULBASAUR,$05 db CHARMANDER,$06 Route22Script2: ; 50fb5 (14:4fb5) ld a, [$d057] cp $ff jp z, Func_50ece ld a, [$c109] and a jr nz, .asm_50fc7 ; 0x50fc1 $4 ld a, $4 jr .asm_50fc9 ; 0x50fc5 $2 .asm_50fc7 ld a, $c .asm_50fc9 ld [$ff00+$8d], a ld a, $1 ld [$ff00+$8c], a call Func_34a6 ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld hl, $d7eb set 5, [hl] ld a, $1 ld [$ff00+$8c], a call DisplayTextID ld a, $ff ld [$c0ee], a call PlaySound ld b, BANK(Music_RivalAlternateStart) ld hl, Music_RivalAlternateStart call Bankswitch ld a, [$cf0d] cp $1 jr nz, .asm_50fff ; 0x50ff8 $5 call Func_51008 jr .asm_51002 ; 0x50ffd $3 .asm_50fff call Func_5100d .asm_51002 ld a, $3 ld [W_ROUTE22CURSCRIPT], a ret Func_51008: ; 51008 (14:5008) ld de, MovementData_51017 ; $5017 jr asm_51010 Func_5100d: ; 5100d (14:500d) ld de, MovementData_5101f ; $501f asm_51010 ld a, $1 ld [H_SPRITEHEIGHT], a jp MoveSprite MovementData_51017: ; 51017 (14:5017) db $C0,$C0,$00,$00,$00,$00,$00,$FF MovementData_5101f: ; 5101f (14:501f) db $40,$C0,$C0,$C0,$00,$00,$00,$00,$00,$00,$FF Route22Script3: ; 5102a (14:502a) ld a, [$d730] bit 0, a ret nz xor a ld [wJoypadForbiddenButtonsMask], a ld a, $22 ld [$cc4d], a ld a, $11 call Predef call Func_2307 ld hl, $d7eb res 0, [hl] res 7, [hl] ld a, $0 ld [W_ROUTE22CURSCRIPT], a ret Func_5104e: ; 5104e (14:504e) ld a, $2 ld [$cd4f], a xor a ld [$cd50], a ld a, $4c call Predef ; indirect jump to Func_17c47 (17c47 (5:7c47)) ld a, [$d700] and a jr z, .skipYVisibilityTesta ld a, $ff ld [$c0ee], a call PlaySound .skipYVisibilityTesta ld a, $ff ld [$c0ee], a call PlaySound ld b, BANK(Music_RivalAlternateTempo) ld hl, Music_RivalAlternateTempo call Bankswitch ld a, $2 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call Func_50ee6 ld a, $4 ld [W_ROUTE22CURSCRIPT], a ret Route22Script4: ; 51087 (14:5087) ld a, [$d730] bit 0, a ret nz ld a, $2 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c ld a, [$cf0d] cp $1 jr nz, .asm_510a1 ld a, $4 ld [$d528], a ld a, $4 jr .asm_510a8 .asm_510a1 ld a, $2 ld [$d528], a ld a, $c .asm_510a8 ld [$FF00+$8d], a call Func_34a6 xor a ld [wJoypadForbiddenButtonsMask], a ld a, $2 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, UnnamedText_511cb ; $51cb ld de, UnnamedText_511d0 ; $51d0 call PreBattleSaveRegisters ld a, $f2 ld [W_CUROPPONENT], a ; $d059 ld hl, StarterMons_510d9 ; $50d9 call Func_50ed6 ld a, $5 ld [W_ROUTE22CURSCRIPT], a ret StarterMons_510d9: ; 510d9 (14:50d9) db SQUIRTLE,$0a db BULBASAUR,$0b db CHARMANDER,$0c Route22Script5: ; 510df (14:50df) ld a, [W_ISINBATTLE] ; $d057 cp $ff jp z, Func_50ece ld a, $2 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c ld a, [$cf0d] cp $1 jr nz, .asm_510fb ld a, $4 ld [$d528], a ld a, $4 jr .asm_51102 .asm_510fb ld a, $2 ld [$d528], a ld a, $c .asm_51102 ld [$FF00+$8d], a call Func_34a6 ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld hl, $d7eb set 6, [hl] ld a, $2 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld a, $ff ld [$c0ee], a call PlaySound ld b, BANK(Music_RivalAlternateStartAndTempo) ld hl, Music_RivalAlternateStartAndTempo call Bankswitch ld a, [$cf0d] cp $1 jr nz, .asm_51134 call Func_5113d jr .asm_51137 .asm_51134 call Func_51142 .asm_51137 ld a, $6 ld [W_ROUTE22CURSCRIPT], a ret Func_5113d: ; 5113d (14:513d) ld de, MovementData_5114c ; $514c jr asm_51145 Func_51142: ; 51142 (14:5142) ld de, MovementData_5114d ; $514d asm_51145: ; 51145 (14:5145) ld a, $2 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c jp MoveSprite MovementData_5114c: ; 5114c (14:514c) db $80 MovementData_5114d: ; 5114d (14:514d) db $80,$80,$80,$FF Route22Script6: ; 51151 (14:5151) ld a, [$d730] bit 0, a ret nz xor a ld [wJoypadForbiddenButtonsMask], a ld a, $23 ld [$cc4d], a ld a, $11 call Predef ; indirect jump to RemoveMissableObject (f1d7 (3:71d7)) call Func_2307 ld hl, $d7eb res 1, [hl] res 7, [hl] ld a, $7 ld [W_ROUTE22CURSCRIPT], a ret Route22TextPointers: ; 51175 (14:5175) dw Route22Text1 dw Route22Text2 dw Route22Text3 Route22Text1: ; 5117b (14:517b) db $08 ; asm ld a, [$d7eb] bit 5, a jr z, .asm_a88cf ; 0x51181 ld hl, UnnamedText_511b2 call PrintText jr .asm_48088 ; 0x51189 .asm_a88cf ; 0x5118b ld hl, UnnamedText_511ad call PrintText .asm_48088 ; 0x51191 jp TextScriptEnd Route22Text2: ; 51194 (14:5194) db $08 ; asm ld a, [$d7eb] bit 6, a jr z, .asm_58c0a ; 0x5119a ld hl, UnnamedText_511c6 call PrintText jr .asm_673ee ; 0x511a2 .asm_58c0a ; 0x511a4 ld hl, UnnamedText_511c1 call PrintText .asm_673ee ; 0x511aa jp TextScriptEnd UnnamedText_511ad: ; 511ad (14:51ad) TX_FAR _UnnamedText_511ad db "@" UnnamedText_511b2: ; 511b2 (14:51b2) TX_FAR _UnnamedText_511b2 db "@" UnnamedText_511b7: ; 511b7 (14:51b7) TX_FAR _UnnamedText_511b7 db "@" UnnamedText_511bc: ; 511bc (14:51bc) TX_FAR _UnnamedText_511bc db "@" UnnamedText_511c1: ; 511c1 (14:51c1) TX_FAR _UnnamedText_511c1 db "@" UnnamedText_511c6: ; 511c6 (14:51c6) TX_FAR _UnnamedText_511c6 db "@" UnnamedText_511cb: ; 511cb (14:51cb) TX_FAR _UnnamedText_511cb db "@" UnnamedText_511d0: ; 511d0 (14:51d0) TX_FAR _UnnamedText_511d0 db "@" Route22Text3: ; 511d5 (14:51d5) TX_FAR _Route22Text3 db "@" Route23Script: ; 511da (14:51da) call Func_511e9 call EnableAutoTextBoxDrawing ld hl, Route23ScriptPointers ld a, [W_ROUTE23CURSCRIPT] jp CallFunctionInTable Func_511e9: ; 511e9 (14:51e9) ld hl, $d126 bit 6, [hl] res 6, [hl] ret z ld hl, $d7ee res 0, [hl] res 7, [hl] ld hl, $d813 res 0, [hl] res 6, [hl] ld a, $7a ld [$cc4d], a ld a, $15 call Predef ; indirect jump to AddMissableObject (f1c8 (3:71c8)) ld a, $60 ld [$cc4d], a ld a, $11 jp Predef ; indirect jump to RemoveMissableObject (f1d7 (3:71d7)) Route23ScriptPointers: ; 51213 (14:5213) dw Route23Script0 dw Route23Script1 dw Route23Script2 Route23Script0: ; 51219 (14:5219) ld hl, YCoordsData_51255 ; $5255 ld a, [W_YCOORD] ld b, a ld e, $0 ld c, $7 .asm_51224 ld a, [hli] cp $ff ret z inc e dec c cp b jr nz, .asm_51224 ; 0x5122b $f7 cp $23 jr nz, .asm_51237 ; 0x5122f $6 ld a, [W_XCOORD] cp $e ret nc .asm_51237 ld a, e ld [$ff00+$8c], a ld a, c ld [$cd3d], a ld b, $2 ld hl, $d7ed ld a, $10 call Predef ld a, c and a ret nz call Func_5125d call DisplayTextID xor a ld [H_CURRENTPRESSEDBUTTONS], a ret YCoordsData_51255: ; 51255 (14:5255) db $23,$38,$55,$60,$69,$77,$88,$FF Func_5125d: ; 5125d (14:525d) ld hl, BadgeTextPointers ; $5276 ld a, [wWhichTrade] ; $cd3d ld c, a ld b, $0 add hl, bc add hl, bc ld a, [hli] ld h, [hl] ld l, a ld de, $cd6d .asm_5126e ld a, [hli] ld [de], a inc de cp $50 jr nz, .asm_5126e ret BadgeTextPointers: ; 51276 (14:5276) dw CascadeBadgeText dw ThunderBadgeText dw RainbowBadgeText dw SoulBadgeText dw MarshBadgeText dw VolcanoBadgeText dw EarthBadgeText EarthBadgeText: ; 51284 (14:5284) db "EARTHBADGE@" VolcanoBadgeText: ; 5128f (14:528f) db "VOLCANOBADGE@" MarshBadgeText: ; 5129c (14:529c) db "MARSHBADGE@" SoulBadgeText: ; 512a7 (14:52a7) db "SOULBADGE@" RainbowBadgeText: ; 512b1 (14:52b1) db "RAINBOWBADGE@" ThunderBadgeText: ; 512be (14:52be) db "THUNDERBADGE@" CascadeBadgeText: ; 512cb (14:52cb) db "CASCADEBADGE@" Func_512d8: ; 512d8 (14:52d8) ld a, $1 ld [$cd38], a ld a, $80 ld [$ccd3], a xor a ld [$c109], a ld [wJoypadForbiddenButtonsMask], a jp Func_3486 Route23Script1: ; 512ec (14:52ec) ld a, [$cd38] and a ret nz Route23Script2: ; 512f1 (14:52f1) ld a, $0 ld [W_ROUTE23CURSCRIPT], a ret Route23TextPointers: ; 512f7 (14:52f7) dw Route23Text1 dw Route23Text2 dw Route23Text3 dw Route23Text4 dw Route23Text5 dw Route23Text6 dw Route23Text7 dw Route23Text8 Route23Text1: ; 51307 (14:5307) db $08 ; asm ld a, $6 call Func_51346 jp TextScriptEnd Route23Text2: ; 51310 (14:5310) db $08 ; asm ld a, $5 call Func_51346 jp TextScriptEnd Route23Text3: ; 51319 (14:5319) db $08 ; asm ld a, $4 call Func_51346 jp TextScriptEnd Route23Text4: ; 51322 (14:5322) db $08 ; asm ld a, $3 call Func_51346 jp TextScriptEnd Route23Text5: ; 5132b (14:532b) db $08 ; asm ld a, $2 call Func_51346 jp TextScriptEnd Route23Text6: ; 51334 (14:5334) db $08 ; asm ld a, $1 call Func_51346 jp TextScriptEnd Route23Text7: ; 5133d (14:533d) db $8 ld a, $0 call Func_51346 jp TextScriptEnd Func_51346: ; 51346 (14:5346) ld [wWhichTrade], a ; $cd3d call Func_5125d ld a, [wWhichTrade] ; $cd3d inc a ld c, a ld b, $2 ld hl, W_OBTAINEDBADGES ; $d356 ld a, $10 call Predef ; indirect jump to HandleBitArray (f666 (3:7666)) ld a, c and a jr nz, .asm_5136e ld hl, VictoryRoadGuardText1 ; $538e call PrintText call Func_512d8 ld a, $1 ld [W_ROUTE23CURSCRIPT], a ret .asm_5136e ld hl, VictoryRoadGuardText2 ; $539e call PrintText ld a, [wWhichTrade] ; $cd3d ld c, a ld b, $1 ld hl, $d7ed ld a, $10 call Predef ; indirect jump to HandleBitArray (f666 (3:7666)) ld a, $2 ld [W_ROUTE23CURSCRIPT], a ret Func_51388: ; 51388 (14:5388) ld hl, VictoryRoadGuardText2 jp PrintText VictoryRoadGuardText1: ; 5138e (14:538e) TX_FAR _VictoryRoadGuardText1 db $08 ; asm ld a, $a5 call PlaySoundWaitForCurrent call WaitForSoundToFinish jp TextScriptEnd VictoryRoadGuardText2: ; 5139e (14:539e) TX_FAR _VictoryRoadGuardText2 db $b TX_FAR _UnnamedText_513a3 db "@" Route23Text8: ; 513a8 (14:53a8) TX_FAR _Route23Text8 db "@" Route24Script: ; 513ad (14:53ad) call EnableAutoTextBoxDrawing ld hl, Route24TrainerHeaders ld de, Route24ScriptPointers ld a, [W_ROUTE24CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROUTE24CURSCRIPT], a ret Func_513c0: ; 513c0 (14:53c0) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_ROUTE24CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret Route24ScriptPointers: ; 513cb (14:53cb) dw Route24Script0 dw Func_324c dw EndTrainerBattle dw Route24Script3 dw Route24Script4 Route24Script0: ; 513d5 (14:53d5) ld a, [$d7ef] bit 0, a jp nz, CheckFightingMapTrainers ld hl, CoordsData_5140e ; $540e call ArePlayerCoordsInArray jp nc, CheckFightingMapTrainers xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, $1 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld hl, $d7f0 bit 1, [hl] res 1, [hl] ret z ld a, $80 ld [$ccd3], a ld a, $1 ld [$cd38], a call Func_3486 ld a, $4 ld [W_ROUTE24CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret CoordsData_5140e: ; 5140e (14:540e) db $0F,$0A,$FF Route24Script4: ; 51411 (14:5411) ld a, [$cd38] and a ret nz call Delay3 ld a, $0 ld [W_ROUTE24CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret Route24Script3: ; 51422 (14:5422) ld a, [W_ISINBATTLE] ; $d057 cp $ff jp z, Func_513c0 call UpdateSprites ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld hl, $d7ef set 1, [hl] ld a, $1 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID xor a ld [wJoypadForbiddenButtonsMask], a ld a, $0 ld [W_ROUTE24CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret Route24TextPointers: ; 5144b (14:544b) dw Route24Text1 dw Route24Text2 dw Route24Text3 dw Route24Text4 dw Route24Text5 dw Route24Text6 dw Route24Text7 dw Predef5CText Route24TrainerHeaders: ; 5145b (14:545b) Route24TrainerHeader0: ; 5145b (14:545b) db $2 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7ef ; flag's byte dw Route24BattleText1 ; 0x5571 TextBeforeBattle dw Route24AfterBattleText1 ; 0x557b TextAfterBattle dw Route24EndBattleText1 ; 0x5576 TextEndBattle dw Route24EndBattleText1 ; 0x5576 TextEndBattle Route24TrainerHeader2: ; 51467 (14:5467) db $3 ; flag's bit db ($1 << 4) ; trainer's view range dw $d7ef ; flag's byte dw Route24BattleText2 ; 0x5580 TextBeforeBattle dw Route24AfterBattleText2 ; 0x558a TextAfterBattle dw Route24EndBattleText2 ; 0x5585 TextEndBattle dw Route24EndBattleText2 ; 0x5585 TextEndBattle Route24TrainerHeader3: ; 51473 (14:5473) db $4 ; flag's bit db ($1 << 4) ; trainer's view range dw $d7ef ; flag's byte dw Route24BattleText3 ; 0x558f TextBeforeBattle dw Route24AfterBattleText3 ; 0x5599 TextAfterBattle dw Route24EndBattleText3 ; 0x5594 TextEndBattle dw Route24EndBattleText3 ; 0x5594 TextEndBattle Route24TrainerHeader4: ; 5147f (14:547f) db $5 ; flag's bit db ($1 << 4) ; trainer's view range dw $d7ef ; flag's byte dw Route24BattleText4 ; 0x559e TextBeforeBattle dw Route24AfterBattleText4 ; 0x55a8 TextAfterBattle dw Route24EndBattleText4 ; 0x55a3 TextEndBattle dw Route24EndBattleText4 ; 0x55a3 TextEndBattle Route24TrainerHeader5: ; 5148b (14:548b) db $6 ; flag's bit db ($1 << 4) ; trainer's view range dw $d7ef ; flag's byte dw Route24BattleText5 ; 0x55ad TextBeforeBattle dw Route24AfterBattleText5 ; 0x55b7 TextAfterBattle dw Route24EndBattleText5 ; 0x55b2 TextEndBattle dw Route24EndBattleText5 ; 0x55b2 TextEndBattle Route24TrainerHeader6: ; 51497 (14:5497) db $7 ; flag's bit db ($1 << 4) ; trainer's view range dw $d7ef ; flag's byte dw Route24BattleText6 ; 0x55bc TextBeforeBattle dw Route24AfterBattleText6 ; 0x55c6 TextAfterBattle dw Route24EndBattleText6 ; 0x55c1 TextEndBattle dw Route24EndBattleText6 ; 0x55c1 TextEndBattle db $ff Route24Text1: ; 514a4 (14:54a4) db $8 ld hl, $d7f0 res 1, [hl] ld a, [$d7ef] bit 0, a jr nz, .asm_a03f5 ; 0x514af $48 ld hl, UnnamedText_51510 call PrintText ld bc, (NUGGET << 8) | 1 call GiveItem jr nc, .BagFull ld hl, $d7ef set 0, [hl] ld hl, UnnamedText_5151a call PrintText ld hl, UnnamedText_51526 call PrintText ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, UnnamedText_5152b ld de, UnnamedText_5152b call PreBattleSaveRegisters ld a, [$ff00+$8c] ld [$cf13], a call EngageMapTrainer call InitBattleEnemyParameters xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, $3 ld [W_ROUTE24CURSCRIPT], a ld [W_CURMAPSCRIPT], a jp TextScriptEnd .asm_a03f5 ; 0x514f9 ld hl, UnnamedText_51530 call PrintText jp TextScriptEnd .BagFull ld hl, UnnamedText_51521 call PrintText ld hl, $d7f0 set 1, [hl] jp TextScriptEnd UnnamedText_51510: ; 51510 (14:5510) TX_FAR _UnnamedText_51510 ; 0x92721 db $0B TX_FAR _UnnamedText_51515 ; 0x92755 db "@" UnnamedText_5151a: ; 5151a (14:551a) TX_FAR _UnnamedText_5151a ; 0x92779 db $0B, $6, "@" UnnamedText_51521: ; 51521 (14:5521) TX_FAR _UnnamedText_51521 db "@" UnnamedText_51526: ; 51526 (14:5526) TX_FAR _UnnamedText_51526 db "@" UnnamedText_5152b: ; 5152b (14:552b) TX_FAR _UnnamedText_5152b db "@" UnnamedText_51530: ; 51530 (14:5530) TX_FAR _UnnamedText_51530 db "@" Route24Text2: ; 51535 (14:5535) db $08 ; asm ld hl, Route24TrainerHeader0 call TalkToTrainer jp TextScriptEnd Route24Text3: ; 5153f (14:553f) db $08 ; asm ld hl, Route24TrainerHeader2 call TalkToTrainer jp TextScriptEnd Route24Text4: ; 51549 (14:5549) db $08 ; asm ld hl, Route24TrainerHeader3 call TalkToTrainer jp TextScriptEnd Route24Text5: ; 51553 (14:5553) db $08 ; asm ld hl, Route24TrainerHeader4 call TalkToTrainer jp TextScriptEnd Route24Text6: ; 5155d (14:555d) db $08 ; asm ld hl, Route24TrainerHeader5 call TalkToTrainer jp TextScriptEnd Route24Text7: ; 51567 (14:5567) db $08 ; asm ld hl, Route24TrainerHeader6 call TalkToTrainer jp TextScriptEnd Route24BattleText1: ; 51571 (14:5571) TX_FAR _Route24BattleText1 db "@" Route24EndBattleText1: ; 51576 (14:5576) TX_FAR _Route24EndBattleText1 db "@" Route24AfterBattleText1: ; 5157b (14:557b) TX_FAR _Route24AfterBattleText1 db "@" Route24BattleText2: ; 51580 (14:5580) TX_FAR _Route24BattleText2 db "@" Route24EndBattleText2: ; 51585 (14:5585) TX_FAR _Route24EndBattleText2 db "@" Route24AfterBattleText2: ; 5158a (14:558a) TX_FAR _Route24AfterBattleText2 db "@" Route24BattleText3: ; 5158f (14:558f) TX_FAR _Route24BattleText3 db "@" Route24EndBattleText3: ; 51594 (14:5594) TX_FAR _Route24EndBattleText3 db "@" Route24AfterBattleText3: ; 51599 (14:5599) TX_FAR _Route24AfterBattleText3 db "@" Route24BattleText4: ; 5159e (14:559e) TX_FAR _Route24BattleText4 db "@" Route24EndBattleText4: ; 515a3 (14:55a3) TX_FAR _Route24EndBattleText4 db "@" Route24AfterBattleText4: ; 515a8 (14:55a8) TX_FAR _Route24AfterBattleText4 db "@" Route24BattleText5: ; 515ad (14:55ad) TX_FAR _Route24BattleText5 db "@" Route24EndBattleText5: ; 515b2 (14:55b2) TX_FAR _Route24EndBattleText5 db "@" Route24AfterBattleText5: ; 515b7 (14:55b7) TX_FAR _Route24AfterBattleText5 db "@" Route24BattleText6: ; 515bc (14:55bc) TX_FAR _Route24BattleText6 db "@" Route24EndBattleText6: ; 515c1 (14:55c1) TX_FAR _Route24EndBattleText6 db "@" Route24AfterBattleText6: ; 515c6 (14:55c6) TX_FAR _Route24AfterBattleText6 db "@" Route25Script: ; 515cb (14:55cb) call Route25Script_515e1 call EnableAutoTextBoxDrawing ld hl, Route25TrainerHeaders ld de, Route25ScriptPointers ld a, [W_ROUTE25CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROUTE25CURSCRIPT], a ret Route25Script_515e1: ; 515e1 (14:55e1) ld hl, $d126 bit 6, [hl] res 6, [hl] ret z ld hl, $d7f2 bit 7, [hl] ret nz bit 5, [hl] jr nz, .asm_515ff res 6, [hl] ld a, $61 ld [$cc4d], a ld a, $15 jp Predef ; indirect jump to AddMissableObject (f1c8 (3:71c8)) .asm_515ff bit 4, [hl] ret z set 7, [hl] ld a, $24 ld [$cc4d], a ld a, $11 call Predef ; indirect jump to RemoveMissableObject (f1d7 (3:71d7)) ld a, $62 ld [$cc4d], a ld a, $11 call Predef ; indirect jump to RemoveMissableObject (f1d7 (3:71d7)) ld a, $63 ld [$cc4d], a ld a, $15 jp Predef ; indirect jump to AddMissableObject (f1c8 (3:71c8)) Route25ScriptPointers: ; 51622 (14:5622) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle Route25TextPointers: ; 51628 (14:5628) dw Route25Text1 dw Route25Text2 dw Route25Text3 dw Route25Text4 dw Route25Text5 dw Route25Text6 dw Route25Text7 dw Route25Text8 dw Route25Text9 dw Predef5CText dw Route25Text11 Route25TrainerHeaders: ; 5163e (14:563e) Route25TrainerHeader0: ; 5163e (14:563e) db $1 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7f1 ; flag's byte dw Route25BattleText1 ; 0x5705 TextBeforeBattle dw Route25AfterBattleText1 ; 0x570f TextAfterBattle dw Route25EndBattleText1 ; 0x570a TextEndBattle dw Route25EndBattleText1 ; 0x570a TextEndBattle Route25TrainerHeader2: ; 5164a (14:564a) db $2 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7f1 ; flag's byte dw Route25BattleText2 ; 0x5714 TextBeforeBattle dw Route25AfterBattleText2 ; 0x571e TextAfterBattle dw Route25EndBattleText2 ; 0x5719 TextEndBattle dw Route25EndBattleText2 ; 0x5719 TextEndBattle Route25TrainerHeader3: ; 51656 (14:5656) db $3 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7f1 ; flag's byte dw Route25BattleText3 ; 0x5723 TextBeforeBattle dw Route25AfterBattleText3 ; 0x572d TextAfterBattle dw Route25EndBattleText3 ; 0x5728 TextEndBattle dw Route25EndBattleText3 ; 0x5728 TextEndBattle Route25TrainerHeader4: ; 51662 (14:5662) db $4 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7f1 ; flag's byte dw Route25BattleText4 ; 0x5732 TextBeforeBattle dw Route25AfterBattleText4 ; 0x573c TextAfterBattle dw Route25EndBattleText4 ; 0x5737 TextEndBattle dw Route25EndBattleText4 ; 0x5737 TextEndBattle Route25TrainerHeader5: ; 5166e (14:566e) db $5 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7f1 ; flag's byte dw Route25BattleText5 ; 0x5741 TextBeforeBattle dw Route25AfterBattleText5 ; 0x574b TextAfterBattle dw Route25EndBattleText5 ; 0x5746 TextEndBattle dw Route25EndBattleText5 ; 0x5746 TextEndBattle Route25TrainerHeader6: ; 5167a (14:567a) db $6 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7f1 ; flag's byte dw Route25BattleText6 ; 0x5750 TextBeforeBattle dw Route25AfterBattleText6 ; 0x575a TextAfterBattle dw Route25EndBattleText6 ; 0x5755 TextEndBattle dw Route25EndBattleText6 ; 0x5755 TextEndBattle Route25TrainerHeader7: ; 51686 (14:5686) db $7 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7f1 ; flag's byte dw Route25BattleText7 ; 0x575f TextBeforeBattle dw Route25AfterBattleText7 ; 0x5769 TextAfterBattle dw Route25EndBattleText7 ; 0x5764 TextEndBattle dw Route25EndBattleText7 ; 0x5764 TextEndBattle Route25TrainerHeader8: ; 51692 (14:5692) db $8 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7f1 ; flag's byte dw Route25BattleText8 ; 0x576e TextBeforeBattle dw Route25AfterBattleText8 ; 0x5778 TextAfterBattle dw Route25EndBattleText8 ; 0x5773 TextEndBattle dw Route25EndBattleText8 ; 0x5773 TextEndBattle Route25TrainerHeader9: ; 5169e (14:569e) db $9 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7f1 ; flag's byte dw Route25BattleText9 ; 0x577d TextBeforeBattle dw Route25AfterBattleText9 ; 0x5787 TextAfterBattle dw Route25EndBattleText9 ; 0x5782 TextEndBattle dw Route25EndBattleText9 ; 0x5782 TextEndBattle db $ff Route25Text1: ; 516ab (14:56ab) db $08 ; asm ld hl, Route25TrainerHeader0 call TalkToTrainer jp TextScriptEnd Route25Text2: ; 516b5 (14:56b5) db $08 ; asm ld hl, Route25TrainerHeader2 call TalkToTrainer jp TextScriptEnd Route25Text3: ; 516bf (14:56bf) db $08 ; asm ld hl, Route25TrainerHeader3 call TalkToTrainer jp TextScriptEnd Route25Text4: ; 516c9 (14:56c9) db $08 ; asm ld hl, Route25TrainerHeader4 call TalkToTrainer jp TextScriptEnd Route25Text5: ; 516d3 (14:56d3) db $08 ; asm ld hl, Route25TrainerHeader5 call TalkToTrainer jp TextScriptEnd Route25Text6: ; 516dd (14:56dd) db $08 ; asm ld hl, Route25TrainerHeader6 call TalkToTrainer jp TextScriptEnd Route25Text7: ; 516e7 (14:56e7) db $08 ; asm ld hl, Route25TrainerHeader7 call TalkToTrainer jp TextScriptEnd Route25Text8: ; 516f1 (14:56f1) db $08 ; asm ld hl, Route25TrainerHeader8 call TalkToTrainer jp TextScriptEnd Route25Text9: ; 516fb (14:56fb) db $08 ; asm ld hl, Route25TrainerHeader9 call TalkToTrainer jp TextScriptEnd Route25BattleText1: ; 51705 (14:5705) TX_FAR _Route25BattleText1 db "@" Route25EndBattleText1: ; 5170a (14:570a) TX_FAR _Route25EndBattleText1 db "@" Route25AfterBattleText1: ; 5170f (14:570f) TX_FAR _Route25AfterBattleText1 db "@" Route25BattleText2: ; 51714 (14:5714) TX_FAR _Route25BattleText2 db "@" Route25EndBattleText2: ; 51719 (14:5719) TX_FAR _Route25EndBattleText2 db "@" Route25AfterBattleText2: ; 5171e (14:571e) TX_FAR _Route25AfterBattleText2 db "@" Route25BattleText3: ; 51723 (14:5723) TX_FAR _Route25BattleText3 db "@" Route25EndBattleText3: ; 51728 (14:5728) TX_FAR _Route25EndBattleText3 db "@" Route25AfterBattleText3: ; 5172d (14:572d) TX_FAR _Route25AfterBattleText3 db "@" Route25BattleText4: ; 51732 (14:5732) TX_FAR _Route25BattleText4 db "@" Route25EndBattleText4: ; 51737 (14:5737) TX_FAR _Route25EndBattleText4 db "@" Route25AfterBattleText4: ; 5173c (14:573c) TX_FAR _Route25AfterBattleText4 db "@" Route25BattleText5: ; 51741 (14:5741) TX_FAR _Route25BattleText5 db "@" Route25EndBattleText5: ; 51746 (14:5746) TX_FAR _Route25EndBattleText5 db "@" Route25AfterBattleText5: ; 5174b (14:574b) TX_FAR _Route25AfterBattleText5 db "@" Route25BattleText6: ; 51750 (14:5750) TX_FAR _Route25BattleText6 db "@" Route25EndBattleText6: ; 51755 (14:5755) TX_FAR _Route25EndBattleText6 db "@" Route25AfterBattleText6: ; 5175a (14:575a) TX_FAR _Route25AfterBattleText6 db "@" Route25BattleText7: ; 5175f (14:575f) TX_FAR _Route25BattleText7 db "@" Route25EndBattleText7: ; 51764 (14:5764) TX_FAR _Route25EndBattleText7 db "@" Route25AfterBattleText7: ; 51769 (14:5769) TX_FAR _Route25AfterBattleText7 db "@" Route25BattleText8: ; 5176e (14:576e) TX_FAR _Route25BattleText8 db "@" Route25EndBattleText8: ; 51773 (14:5773) TX_FAR _Route25EndBattleText8 db "@" Route25AfterBattleText8: ; 51778 (14:5778) TX_FAR _Route25AfterBattleText8 db "@" Route25BattleText9: ; 5177d (14:577d) TX_FAR _Route25BattleText9 db "@" Route25EndBattleText9: ; 51782 (14:5782) TX_FAR _Route25EndBattleText9 db "@" Route25AfterBattleText9: ; 51787 (14:5787) TX_FAR _Route25AfterBattleText9 db "@" Route25Text11: ; 5178c (14:578c) TX_FAR _Route25Text11 db "@" VictoryRoad2_h: ; 0x51791 to 0x5179d (12 bytes) (id=194) db $11 ; tileset db VICTORY_ROAD_2_HEIGHT, VICTORY_ROAD_2_WIDTH ; dimensions (y, x) dw VictoryRoad2Blocks, VictoryRoad2TextPointers, VictoryRoad2Script ; blocks, texts, scripts db $00 ; connections dw VictoryRoad2Object ; objects VictoryRoad2Script: ; 5179d (14:579d) ld hl, $d126 bit 6, [hl] res 6, [hl] call nz, VictoryRoad2Script_517c4 ld hl, $d126 bit 5, [hl] res 5, [hl] call nz, Func_517c9 call EnableAutoTextBoxDrawing ld hl, VictoryRoad2TrainerHeaders ld de, VictoryRoad2ScriptPointers ld a, [W_VICTORYROAD2CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_VICTORYROAD2CURSCRIPT], a ret VictoryRoad2Script_517c4: ; 517c4 (14:57c4) ld hl, $d869 res 7, [hl] Func_517c9: ; 517c9 (14:57c9) ld a, [$d7ee] bit 0, a jr z, .asm_517da push af ld a, $15 ld bc, $403 call Func_517e2 pop af .asm_517da bit 7, a ret z ld a, $1d ld bc, $70b Func_517e2: ; 517e2 (14:57e2) ld [$d09f], a ld a, $17 call Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) ret VictoryRoad2ScriptPointers: ; 517eb (14:57eb) dw VictoryRoad2Script0 dw Func_324c dw EndTrainerBattle VictoryRoad2Script0: ; 517f1 (14:57f1) ld hl, CoordsData_51816 ; $5816 call CheckBoulderCoords jp nc, CheckFightingMapTrainers ld hl, $d7ee ld a, [wWhichTrade] ; $cd3d cp $2 jr z, .asm_5180b bit 0, [hl] set 0, [hl] ret nz jr .asm_51810 .asm_5180b bit 7, [hl] set 7, [hl] ret nz .asm_51810 ld hl, $d126 set 5, [hl] ret CoordsData_51816: ; 51816 (14:5816) db $10,$01 db $10,$09 db $FF VictoryRoad2TextPointers: ; 5181b (14:581b) dw VictoryRoad2Text1 dw VictoryRoad2Text2 dw VictoryRoad2Text3 dw VictoryRoad2Text4 dw VictoryRoad2Text5 dw VictoryRoad2Text6 dw Predef5CText dw Predef5CText dw Predef5CText dw Predef5CText dw BoulderText dw BoulderText dw BoulderText VictoryRoad2TrainerHeaders: ; 51835 (14:5835) VictoryRoad2TrainerHeader0: ; 51835 (14:5835) db $1 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7ee ; flag's byte dw VictoryRoad2BattleText1 ; 0x58ca TextBeforeBattle dw VictoryRoad2AfterBattleText1 ; 0x58d4 TextAfterBattle dw VictoryRoad2EndBattleText1 ; 0x58cf TextEndBattle dw VictoryRoad2EndBattleText1 ; 0x58cf TextEndBattle VictoryRoad2TrainerHeader2: ; 51841 (14:5841) db $2 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7ee ; flag's byte dw VictoryRoad2BattleText2 ; 0x58d9 TextBeforeBattle dw VictoryRoad2AfterBattleText2 ; 0x58e3 TextAfterBattle dw VictoryRoad2EndBattleText2 ; 0x58de TextEndBattle dw VictoryRoad2EndBattleText2 ; 0x58de TextEndBattle VictoryRoad2TrainerHeader3: ; 5184d (14:584d) db $3 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7ee ; flag's byte dw VictoryRoad2BattleText3 ; 0x58e8 TextBeforeBattle dw VictoryRoad2AfterBattleText3 ; 0x58f2 TextAfterBattle dw VictoryRoad2EndBattleText3 ; 0x58ed TextEndBattle dw VictoryRoad2EndBattleText3 ; 0x58ed TextEndBattle VictoryRoad2TrainerHeader4: ; 51859 (14:5859) db $4 ; flag's bit db ($1 << 4) ; trainer's view range dw $d7ee ; flag's byte dw VictoryRoad2BattleText4 ; 0x58f7 TextBeforeBattle dw VictoryRoad2AfterBattleText4 ; 0x5901 TextAfterBattle dw VictoryRoad2EndBattleText4 ; 0x58fc TextEndBattle dw VictoryRoad2EndBattleText4 ; 0x58fc TextEndBattle VictoryRoad2TrainerHeader5: ; 51865 (14:5865) db $5 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7ee ; flag's byte dw VictoryRoad2BattleText5 ; 0x5906 TextBeforeBattle dw VictoryRoad2AfterBattleText5 ; 0x5910 TextAfterBattle dw VictoryRoad2EndBattleText5 ; 0x590b TextEndBattle dw VictoryRoad2EndBattleText5 ; 0x590b TextEndBattle VictoryRoad2TrainerHeader6: ; 51871 (14:5871) db $6 ; flag's bit db ($0 << 4) ; trainer's view range dw $d7ee ; flag's byte dw VictoryRoad2BattleText6 ; 0x58ba TextBeforeBattle dw VictoryRoad2BattleText6 ; 0x58ba TextAfterBattle dw VictoryRoad2BattleText6 ; 0x58ba TextEndBattle dw VictoryRoad2BattleText6 ; 0x58ba TextEndBattle db $ff VictoryRoad2Text1: ; 5187e (14:587e) db $08 ; asm ld hl, VictoryRoad2TrainerHeader0 call TalkToTrainer jp TextScriptEnd VictoryRoad2Text2: ; 51888 (14:5888) db $08 ; asm ld hl, VictoryRoad2TrainerHeader2 call TalkToTrainer jp TextScriptEnd VictoryRoad2Text3: ; 51892 (14:5892) db $08 ; asm ld hl, VictoryRoad2TrainerHeader3 call TalkToTrainer jp TextScriptEnd VictoryRoad2Text4: ; 5189c (14:589c) db $08 ; asm ld hl, VictoryRoad2TrainerHeader4 call TalkToTrainer jp TextScriptEnd VictoryRoad2Text5: ; 518a6 (14:58a6) db $08 ; asm ld hl, VictoryRoad2TrainerHeader5 call TalkToTrainer jp TextScriptEnd VictoryRoad2Text6: ; 518b0 (14:58b0) db $08 ; asm ld hl, VictoryRoad2TrainerHeader6 call TalkToTrainer jp TextScriptEnd VictoryRoad2BattleText6: ; 518ba (14:58ba) TX_FAR _VictoryRoad2BattleText6 ; 0x8d06e db $8 ld a, MOLTRES call PlayCry call WaitForSoundToFinish jp TextScriptEnd VictoryRoad2BattleText1: ; 518ca (14:58ca) TX_FAR _VictoryRoad2BattleText1 db "@" VictoryRoad2EndBattleText1: ; 518cf (14:58cf) TX_FAR _VictoryRoad2EndBattleText1 db "@" VictoryRoad2AfterBattleText1: ; 518d4 (14:58d4) TX_FAR _VictoryRoad2AfterBattleText1 db "@" VictoryRoad2BattleText2: ; 518d9 (14:58d9) TX_FAR _VictoryRoad2BattleText2 db "@" VictoryRoad2EndBattleText2: ; 518de (14:58de) TX_FAR _VictoryRoad2EndBattleText2 db "@" VictoryRoad2AfterBattleText2: ; 518e3 (14:58e3) TX_FAR _VictoryRoad2AfterBattleText2 db "@" VictoryRoad2BattleText3: ; 518e8 (14:58e8) TX_FAR _VictoryRoad2BattleText3 db "@" VictoryRoad2EndBattleText3: ; 518ed (14:58ed) TX_FAR _VictoryRoad2EndBattleText3 db "@" VictoryRoad2AfterBattleText3: ; 518f2 (14:58f2) TX_FAR _VictoryRoad2AfterBattleText3 db "@" VictoryRoad2BattleText4: ; 518f7 (14:58f7) TX_FAR _VictoryRoad2BattleText4 db "@" VictoryRoad2EndBattleText4: ; 518fc (14:58fc) TX_FAR _VictoryRoad2EndBattleText4 db "@" VictoryRoad2AfterBattleText4: ; 51901 (14:5901) TX_FAR _VictoryRoad2AfterBattleText4 db "@" VictoryRoad2BattleText5: ; 51906 (14:5906) TX_FAR _VictoryRoad2BattleText5 db "@" VictoryRoad2EndBattleText5: ; 5190b (14:590b) TX_FAR _VictoryRoad2EndBattleText5 db "@" VictoryRoad2AfterBattleText5: ; 51910 (14:5910) TX_FAR _VictoryRoad2AfterBattleText5 db "@" VictoryRoad2Object: ; 0x51915 (size=154) db $7d ; border tile db $7 ; warps db $8, $0, $2, VICTORY_ROAD_1 db $7, $1d, $3, $ff db $8, $1d, $3, $ff db $7, $17, $0, VICTORY_ROAD_3 db $e, $19, $2, VICTORY_ROAD_3 db $7, $1b, $1, VICTORY_ROAD_3 db $1, $1, $3, VICTORY_ROAD_3 db $0 ; signs db $d ; people db SPRITE_HIKER, $9 + 4, $c + 4, $ff, $d2, $41, BLACKBELT + $C8, $9 ; trainer db SPRITE_BLACK_HAIR_BOY_2, $d + 4, $15 + 4, $ff, $d2, $42, JUGGLER + $C8, $2 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $8 + 4, $13 + 4, $ff, $d0, $43, TAMER + $C8, $5 ; trainer db SPRITE_BLACK_HAIR_BOY_2, $2 + 4, $4 + 4, $ff, $d0, $44, POKEMANIAC + $C8, $6 ; trainer db SPRITE_BLACK_HAIR_BOY_2, $3 + 4, $1a + 4, $ff, $d2, $45, JUGGLER + $C8, $5 ; trainer db SPRITE_BIRD, $5 + 4, $b + 4, $ff, $d1, $46, MOLTRES, 50 ; trainer db SPRITE_BALL, $5 + 4, $1b + 4, $ff, $ff, $87, TM_17 ; item db SPRITE_BALL, $9 + 4, $12 + 4, $ff, $ff, $88, FULL_HEAL ; item db SPRITE_BALL, $b + 4, $9 + 4, $ff, $ff, $89, TM_05 ; item db SPRITE_BALL, $0 + 4, $b + 4, $ff, $ff, $8a, GUARD_SPEC_ ; item db SPRITE_BOULDER, $e + 4, $4 + 4, $ff, $10, $b ; person db SPRITE_BOULDER, $5 + 4, $5 + 4, $ff, $10, $c ; person db SPRITE_BOULDER, $10 + 4, $17 + 4, $ff, $10, $d ; person ; warp-to EVENT_DISP $f, $8, $0 ; VICTORY_ROAD_1 EVENT_DISP $f, $7, $1d EVENT_DISP $f, $8, $1d EVENT_DISP $f, $7, $17 ; VICTORY_ROAD_3 EVENT_DISP $f, $e, $19 ; VICTORY_ROAD_3 EVENT_DISP $f, $7, $1b ; VICTORY_ROAD_3 EVENT_DISP $f, $1, $1 ; VICTORY_ROAD_3 VictoryRoad2Blocks: ; 519af (14:59af) INCBIN "maps/victoryroad2.blk" MtMoon2_h: ; 0x51a36 to 0x51a42 (12 bytes) (id=60) db $11 ; tileset db MT_MOON_2_HEIGHT, MT_MOON_2_WIDTH ; dimensions (y, x) dw MtMoon2Blocks, MtMoon2TextPointers, MtMoon2Script ; blocks, texts, scripts db $00 ; connections dw MtMoon2Object ; objects MtMoon2Script: ; 51a42 (14:5a42) call EnableAutoTextBoxDrawing ret MtMoon2TextPointers: ; 51a46 (14:5a46) dw MtMoonText1 MtMoonText1: ; 51a48 (14:5a48) TX_FAR _UnnamedText_51a48 db "@" MtMoon2Object: ; 0x51a4d (size=68) db $3 ; border tile db $8 ; warps db $5, $5, $2, MT_MOON_1 db $b, $11, $0, MT_MOON_3 db $9, $19, $3, MT_MOON_1 db $f, $19, $4, MT_MOON_1 db $11, $15, $1, MT_MOON_3 db $1b, $d, $2, MT_MOON_3 db $3, $17, $3, MT_MOON_3 db $3, $1b, $2, $ff db $0 ; signs db $0 ; people ; warp-to EVENT_DISP $e, $5, $5 ; MT_MOON_1 EVENT_DISP $e, $b, $11 ; MT_MOON_3 EVENT_DISP $e, $9, $19 ; MT_MOON_1 EVENT_DISP $e, $f, $19 ; MT_MOON_1 EVENT_DISP $e, $11, $15 ; MT_MOON_3 EVENT_DISP $e, $1b, $d ; MT_MOON_3 EVENT_DISP $e, $3, $17 ; MT_MOON_3 EVENT_DISP $e, $3, $1b MtMoon2Blocks: ; 51a91 (14:5a91) INCBIN "maps/mtmoon2.blk" SilphCo7_h: ; 0x51b55 to 0x51b61 (12 bytes) (id=212) db $16 ; tileset db SILPH_CO_7F_HEIGHT, SILPH_CO_7F_WIDTH ; dimensions (y, x) dw SilphCo7Blocks, SilphCo7TextPointers, SilphCo7Script ; blocks, texts, scripts db $00 ; connections dw SilphCo7Object ; objects SilphCo7Script: ; 51b61 (14:5b61) call SilphCo7Script_51b77 call EnableAutoTextBoxDrawing ld hl, SilphCo7TrainerHeaders ld de, SilphCo7ScriptPointers ld a, [W_SILPHCO7CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_SILPHCO7CURSCRIPT], a ret SilphCo7Script_51b77: ; 51b77 (14:5b77) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld hl, DataTable_51bc1 ; $5bc1 call Func_51bc8 call Func_51bf4 ld a, [$d830] bit 4, a jr nz, .asm_51b9e push af ld a, $54 ld [$d09f], a ld bc, $305 ld a, $17 call Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) pop af .asm_51b9e bit 5, a jr nz, .asm_51bb1 push af ld a, $54 ld [$d09f], a ld bc, $20a ld a, $17 call Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) pop af .asm_51bb1 bit 6, a ret nz ld a, $54 ld [$d09f], a ld bc, $60a ld a, $17 jp Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) DataTable_51bc1: ; 51bc1 (14:5bc1) db $03,$05,$02,$0A,$06,$0A,$FF Func_51bc8: ; 51bc8 (14:5bc8) push hl ld hl, $d73f ld a, [hli] ld b, a ld a, [hl] ld c, a xor a ld [$FF00+$e0], a pop hl .asm_51bd4 ld a, [hli] cp $ff jr z, .asm_51bf0 push hl ld hl, $ffe0 inc [hl] pop hl cp b jr z, .asm_51be5 inc hl jr .asm_51bd4 .asm_51be5 ld a, [hli] cp c jr nz, .asm_51bd4 ld hl, $d73f xor a ld [hli], a ld [hl], a ret .asm_51bf0 xor a ld [$FF00+$e0], a ret Func_51bf4: ; 51bf4 (14:5bf4) ld hl, $d830 ld a, [$FF00+$e0] and a ret z cp $1 jr nz, .asm_51c02 set 4, [hl] ret .asm_51c02 cp $2 jr nz, .asm_51c09 set 5, [hl] ret .asm_51c09 set 6, [hl] ret Func_51c0c: ; 51c0c (14:5c0c) xor a ld [wJoypadForbiddenButtonsMask], a Func_51c10: ; 51c10 (14:5c10) ld [W_SILPHCO7CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret SilphCo7ScriptPointers: ; 51c17 (14:5c17) dw SilphCo7Script0 dw Func_324c dw EndTrainerBattle dw SilphCo7Script3 dw SilphCo7Script4 dw SilphCo7Script5 SilphCo7Script0: ; 51c23 (14:5c23) ld a, [$d82f] bit 0, a jp nz, CheckFightingMapTrainers ld hl, CoordsData_51c78 call ArePlayerCoordsInArray jp nc, CheckFightingMapTrainers xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld a, $4 ld [$d528], a ld a, $ff ld [$c0ee], a call PlaySound ld c, BANK(Music_MeetRival) ld a, MUSIC_MEET_RIVAL call PlayMusic ld a, $9 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld a, $9 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call SetSpriteMovementBytesToFF ld de, MovementData_51c7d ld a, [wWhichTrade] ; $cd3d ld [$cf0d], a cp $1 jr z, .asm_51c6c inc de .asm_51c6c ld a, $9 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call MoveSprite ld a, $3 jp Func_51c10 CoordsData_51c78: ; 51c78 (14:5c78) db $02,$03 db $03,$03 db $FF MovementData_51c7d: ; 51c7d (14:5c7d) db $40,$40,$40,$40,$FF SilphCo7Script3: ; 51c82 (14:5c82) ld a, [$d730] bit 0, a ret nz xor a ld [wJoypadForbiddenButtonsMask], a ld a, $d ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID call Delay3 ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, SilphCo7Text14 ; $5ec8 ld de, UnnamedText_51ecd ; $5ecd call PreBattleSaveRegisters ld a, $f2 ld [W_CUROPPONENT], a ; $d059 ld a, [W_RIVALSTARTER] ; $d715 cp $b1 jr nz, .asm_51cb6 ld a, $7 jr .asm_51cc0 .asm_51cb6 cp $99 jr nz, .asm_51cbe ld a, $8 jr .asm_51cc0 .asm_51cbe ld a, $9 .asm_51cc0 ld [W_TRAINERNO], a ; $d05d ld a, $4 jp Func_51c10 SilphCo7Script4: ; 51cc8 (14:5cc8) ld a, [W_ISINBATTLE] ; $d057 cp $ff jp z, Func_51c0c ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld hl, $d82f set 0, [hl] ld a, $4 ld [$d528], a ld a, $9 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c ld a, $4 ld [$FF00+$8d], a call Func_34a6 ld a, $f ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld a, $ff ld [$c0ee], a call PlaySound ld b, BANK(Music_RivalAlternateStart) ld hl, Music_RivalAlternateStart call Bankswitch ld de, MovementData_51d1d ld a, [$cf0d] cp $1 jr nz, .asm_51d0e ld de, MovementData_51d1a .asm_51d0e ld a, $9 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call MoveSprite ld a, $5 jp Func_51c10 MovementData_51d1a: ; 51d1a (14:5d1a) db $C0,$C0,$FF MovementData_51d1d: ; 51d1d (14:5d1d) db $80,$40,$40,$C0,$C0,$C0,$00,$FF SilphCo7Script5: ; 51d25 (14:5d25) ld a, [$d730] bit 0, a ret nz ld a, $a7 ld [$cc4d], a ld a, $11 call Predef ; indirect jump to RemoveMissableObject (f1d7 (3:71d7)) call Func_2307 xor a ld [wJoypadForbiddenButtonsMask], a jp Func_51c10 SilphCo7TextPointers: ; 51d3f (14:5d3f) dw SilphCo7Text1 dw SilphCo7Text2 dw SilphCo7Text3 dw SilphCo7Text4 dw SilphCo7Text5 dw SilphCo7Text6 dw SilphCo7Text7 dw SilphCo7Text8 dw SilphCo7Text9 dw Predef5CText dw Predef5CText dw Predef5CText dw SilphCo7Text13 dw SilphCo7Text14 dw SilphCo7Text15 SilphCo7TrainerHeaders: ; 51d5d (14:5d5d) SilphCo7TrainerHeader0: ; 51d5d (14:5d5d) db $5 ; flag's bit db ($2 << 4) ; trainer's view range dw $d82f ; flag's byte dw SilphCo7BattleText1 ; 0x5e5a TextBeforeBattle dw SilphCo7AfterBattleText1 ; 0x5e64 TextAfterBattle dw SilphCo7EndBattleText1 ; 0x5e5f TextEndBattle dw SilphCo7EndBattleText1 ; 0x5e5f TextEndBattle SilphCo7TrainerHeader2: ; 51d69 (14:5d69) db $6 ; flag's bit db ($3 << 4) ; trainer's view range dw $d82f ; flag's byte dw SilphCo7BattleText2 ; 0x5e73 TextBeforeBattle dw SilphCo7AfterBattleText2 ; 0x5e7d TextAfterBattle dw SilphCo7EndBattleText2 ; 0x5e78 TextEndBattle dw SilphCo7EndBattleText2 ; 0x5e78 TextEndBattle SilphCo7TrainerHeader3: ; 51d75 (14:5d75) db $7 ; flag's bit db ($3 << 4) ; trainer's view range dw $d82f ; flag's byte dw SilphCo7BattleText3 ; 0x5e8c TextBeforeBattle dw SilphCo7AfterBattleText3 ; 0x5e96 TextAfterBattle dw SilphCo7EndBattleText3 ; 0x5e91 TextEndBattle dw SilphCo7EndBattleText3 ; 0x5e91 TextEndBattle SilphCo7TrainerHeader4: ; 51d81 (14:5d81) db $8 ; flag's bit db ($4 << 4) ; trainer's view range dw $d82f ; flag's byte dw SilphCo7BattleText4 ; 0x5ea5 TextBeforeBattle dw SilphCo7AfterBattleText4 ; 0x5eaf TextAfterBattle dw SilphCo7EndBattleText4 ; 0x5eaa TextEndBattle dw SilphCo7EndBattleText4 ; 0x5eaa TextEndBattle db $ff SilphCo7Text1: ; 51d8e (14:5d8e) db $08 ; asm ld a, [$d72e] bit 0, a jr z, .asm_d7e17 ; 0x51d94 ld a, [$d838] bit 7, a jr nz, .asm_688b4 ; 0x51d9b ld hl, UnnamedText_51ddd call PrintText jr .asm_b3069 ; 0x51da3 .asm_d7e17 ; 0x51da5 ld hl, UnnamedText_51dd3 call PrintText ld bc, (LAPRAS << 8) | 15 call GivePokemon jr nc, .asm_b3069 ; 0x51db1 ld a, [$ccd3] and a call z, WaitForTextScrollButtonPress call EnableAutoTextBoxDrawing ld hl, UnnamedText_51dd8 call PrintText ld hl, $d72e set 0, [hl] jr .asm_b3069 ; 0x51dc8 .asm_688b4 ; 0x51dca ld hl, UnnamedText_51de2 call PrintText .asm_b3069 ; 0x51dd0 jp TextScriptEnd UnnamedText_51dd3: ; 51dd3 (14:5dd3) TX_FAR _UnnamedText_51dd3 db "@" UnnamedText_51dd8: ; 51dd8 (14:5dd8) TX_FAR _UnnamedText_51dd8 db "@" UnnamedText_51ddd: ; 51ddd (14:5ddd) TX_FAR _UnnamedText_51ddd db "@" UnnamedText_51de2: ; 51de2 (14:5de2) TX_FAR _UnnamedText_51de2 db "@" SilphCo7Text2: ; 51de7 (14:5de7) db $8 ld a, [$d838] bit 7, a jr nz, .asm_892ce ; 0x51ded $8 ld hl, UnnamedText_51e00 call PrintText jr .asm_e4d89 ; 0x51df5 $6 .asm_892ce ; 0x51df7 ld hl, UnnamedText_51e05 call PrintText .asm_e4d89 ; 0x51dfd jp TextScriptEnd UnnamedText_51e00: ; 51e00 (14:5e00) TX_FAR _UnnamedText_51e00 db "@" UnnamedText_51e05: ; 51e05 (14:5e05) TX_FAR _UnnamedText_51e05 db "@" SilphCo7Text3: ; 51e0a (14:5e0a) db $08 ; asm ld a, [$d838] bit 7, a jr nz, .asm_254aa ; 0x51e10 ld hl, UnnamedText_51e23 call PrintText jr .asm_6472b ; 0x51e18 .asm_254aa ; 0x51e1a ld hl, UnnamedText_51e28 call PrintText .asm_6472b ; 0x51e20 jp TextScriptEnd UnnamedText_51e23: ; 51e23 (14:5e23) TX_FAR _UnnamedText_51e23 db "@" UnnamedText_51e28: ; 51e28 (14:5e28) TX_FAR _UnnamedText_51e28 db "@" SilphCo7Text4: ; 51e2d (14:5e2d) db $08 ; asm ld a, [$d838] bit 7, a jr nz, .asm_0f7ee ; 0x51e33 ld hl, UnnamedText_51e46 call PrintText jr .selectLowNybble2 ; 0x51e3b .asm_0f7ee ; 0x51e3d ld hl, UnnamedText_51e4b call PrintText .selectLowNybble2 ; 0x51e43 jp TextScriptEnd UnnamedText_51e46: ; 51e46 (14:5e46) TX_FAR _UnnamedText_51e46 db "@" UnnamedText_51e4b: ; 51e4b (14:5e4b) TX_FAR _UnnamedText_51e4b db "@" SilphCo7Text5: ; 51e50 (14:5e50) db $08 ; asm ld hl, SilphCo7TrainerHeader0 call TalkToTrainer jp TextScriptEnd SilphCo7BattleText1: ; 51e5a (14:5e5a) TX_FAR _SilphCo7BattleText1 db "@" SilphCo7EndBattleText1: ; 51e5f (14:5e5f) TX_FAR _SilphCo7EndBattleText1 db "@" SilphCo7AfterBattleText1: ; 51e64 (14:5e64) TX_FAR _SilphCo7AfterBattleText1 db "@" SilphCo7Text6: ; 51e69 (14:5e69) db $08 ; asm ld hl, SilphCo7TrainerHeader2 call TalkToTrainer jp TextScriptEnd SilphCo7BattleText2: ; 51e73 (14:5e73) TX_FAR _SilphCo7BattleText2 db "@" SilphCo7EndBattleText2: ; 51e78 (14:5e78) TX_FAR _SilphCo7EndBattleText2 db "@" SilphCo7AfterBattleText2: ; 51e7d (14:5e7d) TX_FAR _SilphCo7AfterBattleText2 db "@" SilphCo7Text7: ; 51e82 (14:5e82) db $08 ; asm ld hl, SilphCo7TrainerHeader3 call TalkToTrainer jp TextScriptEnd SilphCo7BattleText3: ; 51e8c (14:5e8c) TX_FAR _SilphCo7BattleText3 db "@" SilphCo7EndBattleText3: ; 51e91 (14:5e91) TX_FAR _SilphCo7EndBattleText3 db "@" SilphCo7AfterBattleText3: ; 51e96 (14:5e96) TX_FAR _SilphCo7AfterBattleText3 db "@" SilphCo7Text8: ; 51e9b (14:5e9b) db $08 ; asm ld hl, SilphCo7TrainerHeader4 call TalkToTrainer jp TextScriptEnd SilphCo7BattleText4: ; 51ea5 (14:5ea5) TX_FAR _SilphCo7BattleText4 db "@" SilphCo7EndBattleText4: ; 51eaa (14:5eaa) TX_FAR _SilphCo7EndBattleText4 db "@" SilphCo7AfterBattleText4: ; 51eaf (14:5eaf) TX_FAR _SilphCo7AfterBattleText4 db "@" SilphCo7Text9: ; 51eb4 (14:5eb4) db $08 ; asm ld hl, UnnamedText_51ebe call PrintText jp TextScriptEnd UnnamedText_51ebe: ; 51ebe (14:5ebe) TX_FAR _UnnamedText_51ebe db "@" SilphCo7Text13: ; 51ec3 (14:5ec3) TX_FAR _UnnamedText_51ec3 db "@" SilphCo7Text14: ; 51ec8 (14:5ec8) TX_FAR _UnnamedText_51ec8 db "@" UnnamedText_51ecd: ; 51ecd (14:5ecd) TX_FAR _UnnamedText_51ecd db "@" SilphCo7Text15: ; 51ed2 (14:5ed2) TX_FAR _UnnamedText_51ed2 db "@" SilphCo7Object: ; 0x51ed7 (size=128) db $2e ; border tile db $6 ; warps db $0, $10, $1, SILPH_CO_8F db $0, $16, $0, SILPH_CO_6F db $0, $12, $0, SILPH_CO_ELEVATOR db $7, $5, $3, SILPH_CO_11F db $3, $5, $8, SILPH_CO_3F db $f, $15, $3, SILPH_CO_5F db $0 ; signs db $b ; people db SPRITE_LAPRAS_GIVER, $5 + 4, $1 + 4, $ff, $ff, $1 ; person db SPRITE_LAPRAS_GIVER, $d + 4, $d + 4, $ff, $d1, $2 ; person db SPRITE_LAPRAS_GIVER, $a + 4, $7 + 4, $ff, $ff, $3 ; person db SPRITE_ERIKA, $8 + 4, $a + 4, $ff, $ff, $4 ; person db SPRITE_ROCKET, $1 + 4, $d + 4, $ff, $d0, $45, ROCKET + $C8, $20 ; trainer db SPRITE_OAK_AIDE, $d + 4, $2 + 4, $ff, $d0, $46, SCIENTIST + $C8, $8 ; trainer db SPRITE_ROCKET, $2 + 4, $14 + 4, $ff, $d2, $47, ROCKET + $C8, $21 ; trainer db SPRITE_ROCKET, $e + 4, $13 + 4, $ff, $d3, $48, ROCKET + $C8, $22 ; trainer db SPRITE_BLUE, $7 + 4, $3 + 4, $ff, $d1, $9 ; person db SPRITE_BALL, $9 + 4, $1 + 4, $ff, $ff, $8a, CALCIUM ; item db SPRITE_BALL, $b + 4, $18 + 4, $ff, $ff, $8b, TM_03 ; item ; warp-to EVENT_DISP $d, $0, $10 ; SILPH_CO_8F EVENT_DISP $d, $0, $16 ; SILPH_CO_6F EVENT_DISP $d, $0, $12 ; SILPH_CO_ELEVATOR EVENT_DISP $d, $7, $5 ; SILPH_CO_11F EVENT_DISP $d, $3, $5 ; SILPH_CO_3F EVENT_DISP $d, $f, $15 ; SILPH_CO_5F SilphCo7Blocks: ; 51f57 (14:5f57) INCBIN "maps/silphco7.blk" Mansion2_h: ; 0x51fcc to 0x51fd8 (12 bytes) (id=214) db $16 ; tileset db MANSION_2_HEIGHT, MANSION_2_WIDTH ; dimensions (y, x) dw Mansion2Blocks, Mansion2TextPointers, Mansion2Script ; blocks, texts, scripts db $00 ; connections dw Mansion2Object ; objects Mansion2Script: ; 51fd8 (14:5fd8) call Mansion2Script_51fee call EnableAutoTextBoxDrawing ld hl, Mansion2TrainerHeaders ld de, Mansion2ScriptPointers ld a, [W_MANSION2CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_MANSION2CURSCRIPT], a ret Mansion2Script_51fee: ; 51fee (14:5fee) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld a, [$d796] bit 0, a jr nz, .asm_52016 ld a, $e ld bc, $204 call Func_5202f ld a, $54 ld bc, $409 call Func_5202f ld a, $5f ld bc, $b03 call Func_5202f ret .asm_52016 ld a, $5f ld bc, $204 call Func_5202f ld a, $e ld bc, $409 call Func_5202f ld a, $e ld bc, $b03 call Func_5202f ret Func_5202f: ; 5202f (14:602f) ld [$d09f], a ld a, $17 jp Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) Func_52037: ; 52037 (14:6037) ld a, [$c109] cp $4 ret nz xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, $5 ld [H_SPRITEHEIGHT], a jp DisplayTextID Mansion2ScriptPointers: ; 52047 (14:6047) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle Mansion2TextPointers: ; 5204d (14:604d) dw Mansion2Text1 dw Predef5CText dw Mansion2Text3 dw Mansion2Text4 dw Mansion2Text5 Mansion2TrainerHeaders: ; 52057 (14:6057) Mansion2TrainerHeader0: ; 52057 (14:6057) db $1 ; flag's bit db ($0 << 4) ; trainer's view range dw $d847 ; flag's byte dw Mansion2BattleText1 ; 0x606e TextBeforeBattle dw Mansion2AfterBattleText1 ; 0x6078 TextAfterBattle dw Mansion2EndBattleText1 ; 0x6073 TextEndBattle dw Mansion2EndBattleText1 ; 0x6073 TextEndBattle db $ff Mansion2Text1: ; 52064 (14:6064) db $08 ; asm ld hl, Mansion2TrainerHeader0 call TalkToTrainer jp TextScriptEnd Mansion2BattleText1: ; 5206e (14:606e) TX_FAR _Mansion2BattleText1 db "@" Mansion2EndBattleText1: ; 52073 (14:6073) TX_FAR _Mansion2EndBattleText1 db "@" Mansion2AfterBattleText1: ; 52078 (14:6078) TX_FAR _Mansion2AfterBattleText1 db "@" Mansion2Text3: ; 5207d (14:607d) TX_FAR _Mansion2Text3 db "@" Mansion2Text4: ; 52082 (14:6082) TX_FAR _Mansion2Text4 db "@" Mansion3Text6: ; 52087 (14:6087) Mansion2Text5: ; 52087 (14:6087) db $8 ld hl, UnnamedText_520c2 call PrintText call YesNoChoice ld a, [$cc26] and a jr nz, .asm_520b9 ; 0x52095 $22 ld a, $1 ld [$cc3c], a ld hl, $d126 set 5, [hl] ld hl, UnnamedText_520c7 call PrintText ld a, $ad call PlaySound ld hl, $d796 bit 0, [hl] set 0, [hl] jr z, .asm_520bf ; 0x520b3 $a res 0, [hl] jr .asm_520bf ; 0x520b7 $6 .asm_520b9 ld hl, UnnamedText_520cc call PrintText .asm_520bf jp TextScriptEnd UnnamedText_520c2: ; 520c2 (14:60c2) TX_FAR _UnnamedText_520c2 db "@" UnnamedText_520c7: ; 520c7 (14:60c7) TX_FAR _UnnamedText_520c7 db "@" UnnamedText_520cc: ; 520cc (14:60cc) TX_FAR _UnnamedText_520cc db "@" Mansion2Object: ; 0x520d1 (size=63) db $1 ; border tile db $4 ; warps db $a, $5, $4, MANSION_1 db $a, $7, $0, MANSION_3 db $e, $19, $2, MANSION_3 db $1, $6, $1, MANSION_3 db $0 ; signs db $4 ; people db SPRITE_BLACK_HAIR_BOY_2, $11 + 4, $3 + 4, $fe, $2, $41, BURGLAR + $C8, $7 ; trainer db SPRITE_BALL, $7 + 4, $1c + 4, $ff, $ff, $82, CALCIUM ; item db SPRITE_BOOK_MAP_DEX, $2 + 4, $12 + 4, $ff, $ff, $3 ; person db SPRITE_BOOK_MAP_DEX, $16 + 4, $3 + 4, $ff, $ff, $4 ; person ; warp-to EVENT_DISP $f, $a, $5 ; MANSION_1 EVENT_DISP $f, $a, $7 ; MANSION_3 EVENT_DISP $f, $e, $19 ; MANSION_3 EVENT_DISP $f, $1, $6 ; MANSION_3 Mansion2Blocks: ; 52110 (14:6110) INCBIN "maps/mansion2.blk" Mansion3_h: ; 0x521e2 to 0x521ee (12 bytes) (id=215) db $16 ; tileset db MANSION_3_HEIGHT, MANSION_3_WIDTH ; dimensions (y, x) dw Mansion3Blocks, Mansion3TextPointers, Mansion3Script ; blocks, texts, scripts db $00 ; connections dw Mansion3Object ; objects Mansion3Script: ; 521ee (14:61ee) call Mansion3Script_52204 call EnableAutoTextBoxDrawing ld hl, Mansion3TrainerHeader0 ld de, Mansion3ScriptPointers ld a, [W_MANSION3CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_MANSION3CURSCRIPT], a ret Mansion3Script_52204: ; 52204 (14:6204) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld a, [$d796] bit 0, a jr nz, .asm_52224 ld a, $e ld bc, $207 call Func_5202f ld a, $5f ld bc, $507 call Func_5202f ret .asm_52224 ld a, $5f ld bc, $207 call Func_5202f ld a, $e ld bc, $507 call Func_5202f ret Mansion3ScriptPointers: ; 52235 (14:6235) dw Mansion3Script0 dw Func_324c dw EndTrainerBattle Mansion3Script0: ; 5223b (14:623b) ld hl, CoordsData_52254 call Func_5225b ld a, [$d71e] and a jp z, CheckFightingMapTrainers cp $3 ld a, $a5 jr nz, .asm_52250 ld a, $d6 .asm_52250 ld [$d71d], a ret CoordsData_52254: ; 52254 (14:6254) db $0E,$10 db $0E,$11 db $0E,$13 db $FF Func_5225b: ; 5225b (14:625b) xor a ld [$d71e], a ld a, [$d72d] bit 4, a ret nz call ArePlayerCoordsInArray ret nc ld a, [wWhichTrade] ; $cd3d ld [$d71e], a ld hl, $d72d set 4, [hl] ld hl, $d732 set 4, [hl] ret Func_5227a: ; 5227a (14:627a) ld a, [$c109] cp $4 ret nz xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, $6 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c jp DisplayTextID Mansion3TextPointers: ; 5228a (14:628a) dw Mansion3Text1 dw Mansion3Text2 dw Predef5CText dw Predef5CText dw Mansion3Text5 dw Mansion3Text6 Mansion3TrainerHeaders: ; 52296 (14:6296) Mansion3TrainerHeader0: ; 52296 (14:6296) db $1 ; flag's bit db ($0 << 4) ; trainer's view range dw $d849 ; flag's byte dw Mansion3BattleText1 ; 0x62c3 TextBeforeBattle dw Mansion3AfterBattleText1 ; 0x62cd TextAfterBattle dw Mansion3EndBattleText1 ; 0x62c8 TextEndBattle dw Mansion3EndBattleText1 ; 0x62c8 TextEndBattle Mansion3TrainerHeader2: ; 522a2 (14:62a2) db $2 ; flag's bit db ($2 << 4) ; trainer's view range dw $d849 ; flag's byte dw Mansion3BattleText2 ; 0x62d2 TextBeforeBattle dw Mansion3AfterBattleText2 ; 0x62dc TextAfterBattle dw Mansion3EndBattleText2 ; 0x62d7 TextEndBattle dw Mansion3EndBattleText2 ; 0x62d7 TextEndBattle db $ff Mansion3Text1: ; 522af (14:62af) db $08 ; asm ld hl, Mansion3TrainerHeader0 call TalkToTrainer jp TextScriptEnd Mansion3Text2: ; 522b9 (14:62b9) db $08 ; asm ld hl, Mansion3TrainerHeader2 call TalkToTrainer jp TextScriptEnd Mansion3BattleText1: ; 522c3 (14:62c3) TX_FAR _Mansion3BattleText1 db "@" Mansion3EndBattleText1: ; 522c8 (14:62c8) TX_FAR _Mansion3EndBattleText1 db "@" Mansion3AfterBattleText1: ; 522cd (14:62cd) TX_FAR _Mansion3AfterBattleText1 db "@" Mansion3BattleText2: ; 522d2 (14:62d2) TX_FAR _Mansion3BattleText2 db "@" Mansion3EndBattleText2: ; 522d7 (14:62d7) TX_FAR _Mansion3EndBattleText2 db "@" Mansion3AfterBattleText2: ; 522dc (14:62dc) TX_FAR _Mansion3AfterBattleText2 db "@" Mansion3Text5: ; 522e1 (14:62e1) TX_FAR _Mansion3Text5 db "@" Mansion3Object: ; 0x522e6 (size=64) db $1 ; border tile db $3 ; warps db $a, $7, $1, MANSION_2 db $1, $6, $3, MANSION_2 db $e, $19, $2, MANSION_2 db $0 ; signs db $5 ; people db SPRITE_BLACK_HAIR_BOY_2, $b + 4, $5 + 4, $fe, $2, $41, BURGLAR + $C8, $8 ; trainer db SPRITE_OAK_AIDE, $b + 4, $14 + 4, $ff, $d2, $42, SCIENTIST + $C8, $c ; trainer db SPRITE_BALL, $10 + 4, $1 + 4, $ff, $ff, $83, MAX_POTION ; item db SPRITE_BALL, $5 + 4, $19 + 4, $ff, $ff, $84, IRON ; item db SPRITE_BOOK_MAP_DEX, $c + 4, $6 + 4, $ff, $ff, $5 ; person ; warp-to EVENT_DISP $f, $a, $7 ; MANSION_2 EVENT_DISP $f, $1, $6 ; MANSION_2 EVENT_DISP $f, $e, $19 ; MANSION_2 Mansion3Blocks: ; 52326 (14:6326) INCBIN "maps/mansion3.blk" Mansion4_h: ; 0x523ad to 0x523b9 (12 bytes) (id=216) db $16 ; tileset db MANSION_4_HEIGHT, MANSION_4_WIDTH ; dimensions (y, x) dw Mansion4Blocks, Mansion4TextPointers, Mansion4Script ; blocks, texts, scripts db $00 ; connections dw Mansion4Object ; objects Mansion4Script: ; 523b9 (14:63b9) call Mansion4Script_523cf call EnableAutoTextBoxDrawing ld hl, Mansion4TrainerHeader0 ld de, Mansion4ScriptPointers ld a, [W_MANSION4CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_MANSION4CURSCRIPT], a ret Mansion4Script_523cf: ; 523cf (14:63cf) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld a, [$d796] bit 0, a jr nz, .asm_523ff ld a, $e ld bc, $80d call Func_5202f ld a, $e ld bc, $b06 call Func_5202f ld a, $5f ld bc, $304 call Func_5202f ld a, $54 ld bc, $808 call Func_5202f ret .asm_523ff ld a, $2d ld bc, $80d call Func_5202f ld a, $5f ld bc, $b06 call Func_5202f ld a, $e ld bc, $304 call Func_5202f ld a, $e ld bc, $808 call Func_5202f ret Func_52420: ; 52420 (14:6420) ld a, [$c109] cp $4 ret nz xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, $9 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c jp DisplayTextID Mansion4ScriptPointers: ; 52430 (14:6430) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle Mansion4TextPointers: ; 52436 (14:6436) dw Mansion4Text1 dw Mansion4Text2 dw Predef5CText dw Predef5CText dw Predef5CText dw Predef5CText dw Mansion4Text7 dw Predef5CText dw Mansion3Text6 Mansion4TrainerHeaders: ; 52448 (14:6448) Mansion4TrainerHeader0: ; 52448 (14:6448) db $1 ; flag's bit db ($0 << 4) ; trainer's view range dw $d84b ; flag's byte dw Mansion4BattleText1 ; 0x6475 TextBeforeBattle dw Mansion4AfterBattleText1 ; 0x647f TextAfterBattle dw Mansion4EndBattleText1 ; 0x647a TextEndBattle dw Mansion4EndBattleText1 ; 0x647a TextEndBattle Mansion4TrainerHeader2: ; 52454 (14:6454) db $2 ; flag's bit db ($3 << 4) ; trainer's view range dw $d84b ; flag's byte dw Mansion4BattleText2 ; 0x6484 TextBeforeBattle dw Mansion4AfterBattleText2 ; 0x648e TextAfterBattle dw Mansion4EndBattleText2 ; 0x6489 TextEndBattle dw Mansion4EndBattleText2 ; 0x6489 TextEndBattle db $ff Mansion4Text1: ; 52461 (14:6461) db $08 ; asm ld hl, Mansion4TrainerHeader0 call TalkToTrainer jp TextScriptEnd Mansion4Text2: ; 5246b (14:646b) db $08 ; asm ld hl, Mansion4TrainerHeader2 call TalkToTrainer jp TextScriptEnd Mansion4BattleText1: ; 52475 (14:6475) TX_FAR _Mansion4BattleText1 db "@" Mansion4EndBattleText1: ; 5247a (14:647a) TX_FAR _Mansion4EndBattleText1 db "@" Mansion4AfterBattleText1: ; 5247f (14:647f) TX_FAR _Mansion4AfterBattleText1 db "@" Mansion4BattleText2: ; 52484 (14:6484) TX_FAR _Mansion4BattleText2 db "@" Mansion4EndBattleText2: ; 52489 (14:6489) TX_FAR _Mansion4EndBattleText2 db "@" Mansion4AfterBattleText2: ; 5248e (14:648e) TX_FAR _Mansion4AfterBattleText2 db "@" Mansion4Text7: ; 52493 (14:6493) TX_FAR _Mansion4Text7 db "@" Mansion4Object: ; 0x52498 (size=69) db $1 ; border tile db $1 ; warps db $16, $17, $5, MANSION_1 db $0 ; signs db $8 ; people db SPRITE_BLACK_HAIR_BOY_2, $17 + 4, $10 + 4, $ff, $ff, $41, BURGLAR + $C8, $9 ; trainer db SPRITE_OAK_AIDE, $b + 4, $1b + 4, $ff, $d0, $42, SCIENTIST + $C8, $d ; trainer db SPRITE_BALL, $2 + 4, $a + 4, $ff, $ff, $83, RARE_CANDY ; item db SPRITE_BALL, $16 + 4, $1 + 4, $ff, $ff, $84, FULL_RESTORE ; item db SPRITE_BALL, $19 + 4, $13 + 4, $ff, $ff, $85, TM_14 ; item db SPRITE_BALL, $4 + 4, $5 + 4, $ff, $ff, $86, TM_22 ; item db SPRITE_BOOK_MAP_DEX, $14 + 4, $10 + 4, $ff, $ff, $7 ; person db SPRITE_BALL, $d + 4, $5 + 4, $ff, $ff, $88, SECRET_KEY ; item ; warp-to EVENT_DISP $f, $16, $17 ; MANSION_1 Mansion4Blocks: ; 524dd (14:64dd) INCBIN "maps/mansion4.blk" Func_525af: ; 525af (14:65af) ld a, [$FF00+$d7] ld [$d0d4], a xor a ld [$cd6a], a ld [$cf0b], a ld hl, $cc2b ld [hli], a ld [hli], a ld [hli], a ld [hl], a ld [wListScrollOffset], a ; $cc36 ld [$d05e], a ld [W_PLAYERMONID], a ld [W_PLAYERMONSALIVEFLAGS], a ld [wPlayerMonNumber], a ; $cc2f ld [$d078], a ld [$d35d], a ld hl, $cf1d ld [hli], a ld [hl], a ld hl, $ccd3 ld b, $3c .asm_525e1 ld [hli], a dec b jr nz, .asm_525e1 inc a ld [$ccd9], a ld a, [W_CURMAP] ; $d35e cp SAFARI_ZONE_EAST jr c, .asm_525f9 cp SAFARI_ZONE_REST_HOUSE_1 jr nc, .asm_525f9 ld a, $2 ld [W_BATTLETYPE], a ; $d05a .asm_525f9 ld hl, PlayBattleMusic ld b, BANK(PlayBattleMusic) jp Bankswitch Func_52601: ; 52601 (14:6601) ld hl, W_ENEMYMONSTATUS ; $cfe9 ld de, W_PLAYERMOVETYPE ; $cfd5 ld a, [H_WHOSETURN] ; $FF00+$f3 and a jp z, Func_52613 ld hl, W_PLAYERMONSTATUS ; $d018 ld de, W_ENEMYMOVETYPE ; $cfcf Func_52613: ; 52613 (14:6613) ld a, [hl] and a jr nz, .asm_52659 ld a, [de] cp $17 jr nz, .asm_5262a ld b, h ld c, l inc bc ld a, [bc] cp $4 jr z, .asm_52666 inc bc ld a, [bc] cp $4 jr z, .asm_52666 .asm_5262a push hl ld hl, MoveHitTest ld b, BANK(MoveHitTest) call Bankswitch pop hl ld a, [W_MOVEMISSED] ; $d05f and a jr nz, .asm_52659 set 6, [hl] ld hl, Func_3ed27 ld b, BANK(Func_3ed27) call Bankswitch ld c, $1e call DelayFrames ld hl, Func_3fba8 ld b, BANK(Func_3fba8) call Bankswitch ld hl, Func_3fb6e ld b, BANK(Func_3fb6e) jp Bankswitch .asm_52659 ld c, $32 call DelayFrames ld hl, Func_3fb5e ld b, BANK(Func_3fb5e) jp Bankswitch .asm_52666 ld c, $32 call DelayFrames ld hl, Func_3dc51 ld b, BANK(Func_3dc51) jp Bankswitch Func_52673: ; 52673 (14:6673) ld hl, SilphCoMapList ld a, [W_CURMAP] ld b, a .asm_5267a ld a, [hli] cp $ff ret z cp b jr nz, .asm_5267a ld a, $35 call Predef ; indirect jump to Func_c586 (c586 (3:4586)) ld a, [$cfc6] cp $18 jr z, .asm_5269c cp $24 jr z, .asm_5269c ld b, a ld a, [W_CURMAP] cp SILPH_CO_11F ret nz ld a, b cp $5e ret nz .asm_5269c ld b, $30 call IsItemInBag jr z, .asm_526dc call Func_526fd push de ld a, $1 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call Func_3ef5 pop de srl d ld a, d ld b, a ld [$d73f], a srl e ld a, e ld c, a ld [$d740], a ld a, [W_CURMAP] ; $d35e cp SILPH_CO_11F jr nz, .asm_526c8 ld a, $3 jr .asm_526ca .asm_526c8 ld a, $e .asm_526ca ld [$d09f], a ld a, $17 call Predef ; indirect jump to Func_ee9e ld hl, $d126 set 5, [hl] ld a, $ad jp PlaySound .asm_526dc ld a, $2 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c jp Func_3ef5 SilphCoMapList: ; 526e3 (14:66e3) db SILPH_CO_2F db SILPH_CO_3F db SILPH_CO_4F db SILPH_CO_5F db SILPH_CO_6F db SILPH_CO_7F db SILPH_CO_8F db SILPH_CO_9F db SILPH_CO_10F db SILPH_CO_11F db $FF CardKeySuccessText: ; 526ee (14:66ee) TX_FAR _CardKeySuccessText1 db $0b TX_FAR _CardKeySuccessText2 db "@" CardKeyFailText: ; 526f8 (14:66f8) TX_FAR _CardKeyFailText db "@" Func_526fd: ; 526fd (14:66fd) ld a, [W_YCOORD] ; $d361 ld d, a ld a, [W_XCOORD] ; $d362 ld e, a ld a, [$c109] and a jr nz, .asm_5270d inc d ret .asm_5270d cp $4 jr nz, .asm_52713 dec d ret .asm_52713 cp $8 jr nz, .asm_52719 dec e ret .asm_52719 inc e ret CeladonPrizeMenu: ; 5271b (14:671b) ld b,COIN_CASE call IsItemInBag jr nz,.havingCoinCase ld hl,RequireCoinCaseTextPtr jp PrintText .havingCoinCase ld hl,$D730 set 6,[hl] ld hl,ExchangeCoinsForPrizesTextPtr call PrintText ; the following are the menu settings xor a ld [$CC26],a ld [$CC2A],a ld a,$03 ld [$CC29],a ld a,$03 ld [$CC28],a ld a,$04 ld [$CC24],a ld a,$01 ld [$CC25],a call PrintPrizePrice ; 687A FuncCoord 0,2 ld hl,Coord ld b,$08 ld c,$10 call TextBoxBorder call GetPrizeMenuId ;678E call UpdateSprites ld hl,WhichPrizeTextPtr call PrintText call HandleMenuInput ; menu choice handler bit 1,a ; keypress = B (Cancel) jr nz,.NoChoice ld a,[$CC26] cp a,$03 ; "NO,THANKS" choice jr z,.NoChoice call HandlePrizeChoice ; 14:68C6 .NoChoice ld hl,$D730 res 6,[hl] ret RequireCoinCaseTextPtr: ; 5277e (14:677e) TX_FAR _RequireCoinCaseText ; 22:628E db $0D db "@" ExchangeCoinsForPrizesTextPtr: ; 52784 (14:6784) TX_FAR _ExchangeCoinsForPrizesText ; 22:62A9 db "@" WhichPrizeTextPtr: ; 52789 (14:6789) TX_FAR _WhichPrizeText ; 22:62CD db "@" GetPrizeMenuId: ; 5278e (14:678e) ; determine which one among the three ; prize-texts has been selected ; using the text ID (stored in [$FF8C]) ; load the three prizes at $D13D-$D13F ; load the three prices at $D141-$D146 ; display the three prizes' names ; (distinguishing between Pokemon names ; and Items (specifically TMs) names) ld a,[$FF8C] sub a,$03 ; prize-texts' id are 3, 4 and 5 ld [$D12F],a ; prize-texts' id (relative, i.e. 0, 1 or 2) add a add a ld d,$00 ld e,a ld hl,PrizeDifferentMenuPtrs add hl,de ld a,[hli] ld d,[hl] ld e,a inc hl push hl ld hl,W_PRIZE1 call CopyString ; XXX what does this do pop hl ld a,[hli] ld h,[hl] ld l,a ld de,$D141 ld bc,$0006 call CopyData ld a,[$D12F] cp a,$02 ;is TM_menu? jr nz,.putMonName ld a,[W_PRIZE1] ld [$D11E],a call GetItemName FuncCoord 2,4 ld hl,Coord call PlaceString ld a,[W_PRIZE2] ld [$D11E],a call GetItemName FuncCoord 2,6 ld hl,Coord call PlaceString ld a,[W_PRIZE3] ld [$D11E],a call GetItemName FuncCoord 2,8 ld hl,Coord call PlaceString jr .putNoThanksText .putMonName ; 14:67EC ld a,[W_PRIZE1] ld [$D11E],a call GetMonName FuncCoord 2,4 ld hl,Coord call PlaceString ld a,[W_PRIZE2] ld [$D11E],a call GetMonName FuncCoord 2,6 ld hl,Coord call PlaceString ld a,[W_PRIZE3] ld [$D11E],a call GetMonName FuncCoord 2,8 ld hl,Coord call PlaceString .putNoThanksText ; 14:6819 FuncCoord 2,10 ld hl,Coord ld de,NoThanksText call PlaceString ; put prices on the right side of the textbox ld de,$D141 FuncCoord 13,5 ld hl,Coord ; reg. c: ; [low nybble] number of bytes ; [bit 765 = %100] space-padding (not zero-padding) ld c,(1 << 7 | 2) ; Function $15CD displays BCD value (same routine ; used by text-command $02) call PrintBCDNumber ; Print_BCD ld de,$D143 FuncCoord 13,7 ld hl,Coord ld c,(%1 << 7 | 2) call PrintBCDNumber ld de,$D145 FuncCoord 13,9 ld hl,Coord ld c,(1 << 7 | 2) jp PrintBCDNumber PrizeDifferentMenuPtrs: ; 52843 (14:6843) dw PrizeMenuMon1Entries dw PrizeMenuMon1Cost dw PrizeMenuMon2Entries dw PrizeMenuMon2Cost dw PrizeMenuTMsEntries dw PrizeMenuTMsCost NoThanksText: ; 5284f (14:684f) db "NO THANKS@" PrizeMenuMon1Entries: ; 52859 (14:6859) db ABRA db CLEFAIRY IF _RED db NIDORINA ENDC IF _BLUE db NIDORINO ENDC db "@" PrizeMenuMon1Cost: ; 5285d (14:685d) IF _RED db $01,$80 db $05,$00 ENDC IF _BLUE db $01,$20 db $07,$50 ENDC db $12,$00 db "@" PrizeMenuMon2Entries: ; 52864 (14:6864) IF _RED db DRATINI db SCYTHER ENDC IF _BLUE db PINSIR db DRATINI ENDC db PORYGON db "@" PrizeMenuMon2Cost: ; 52868 (14:6868) IF _RED db $28,$00 db $55,$00 db $99,$99 ENDC IF _BLUE db $25,$00 db $46,$00 db $65,$00 ENDC db "@" PrizeMenuTMsEntries: ; 5286f (14:686f) db TM_23 db TM_15 db TM_50 db "@" PrizeMenuTMsCost: ; 52873 (14:6873) db $33,$00 ; 3300 Coins db $55,$00 ; 5500 Coins db $77,$00 ; 7700 Coins db "@" PrintPrizePrice: ; 5287a (14:687a) FuncCoord 11,0 ld hl,Coord ld b,$01 ld c,$07 call TextBoxBorder call UpdateSprites ; XXX save OAM? FuncCoord 12,0 ld hl,Coord ld de,.CoinText call PlaceString FuncCoord 13,1 ld hl,Coord ld de,.SixSpacesText call PlaceString FuncCoord 13,1 ld hl,Coord ld de,wPlayerCoins ld c,%10000010 call PrintBCDNumber ret .CoinText ; 14:68A5 db "COIN@" .SixSpacesText ; 14:68AA db " @" LoadCoinsToSubtract: ; 528b1 (14:68b1) ld a,[$D139] ; backup of selected menu_entry add a ld d,$00 ld e,a ld hl,$D141 ; first prize's price add hl,de ; get selected prize's price xor a ld [$FF9F],a ld a,[hli] ld [$FFA0],a ld a,[hl] ld [$FFA1],a ret HandlePrizeChoice: ; 528c6 (14:68c6) ld a,[$CC26] ; selected menu_entry ld [$D139],a ld d,$00 ld e,a ld hl,W_PRIZE1 add hl,de ld a,[hl] ld [$D11E],a ld a,[$D12F] cp a,$02 ; is prize a TM? jr nz,.GetMonName call GetItemName jr .GivePrize .GetMonName ; 14:68E3 call GetMonName .GivePrize ; 14:68E6 ld hl,SoYouWantPrizeTextPtr call PrintText call YesNoChoice ; yes/no textbox ld a,[$CC26] ; yes/no answer (Y=0, N=1) and a jr nz,.PrintOhFineThen call LoadCoinsToSubtract call HasEnoughCoins jr c,.NotEnoughCoins ld a,[$D12F] cp a,$02 jr nz,.GiveMon ld a,[$D11E] ld b,a ld a,1 ld c,a call GiveItem ; GiveItem jr nc,.BagFull jr .SubtractCoins .GiveMon ; 14:6912 ld a,[$D11E] ld [$CF91],a push af call GetPrizeMonLevel ; 14:6977 ld c,a pop af ld b,a call GivePokemon push af ld a,[$CCD3] ; XXX is there room? and a call z,WaitForTextScrollButtonPress pop af ret nc .SubtractCoins ; 14:692C call LoadCoinsToSubtract ld hl,$FFA1 ld de,wPlayerCoins + 1 ld c,$02 ; how many bytes ld a,$0C call Predef ; subtract coins (BCD daa operations) jp PrintPrizePrice .BagFull ld hl,PrizeRoomBagIsFullTextPtr jp PrintText .NotEnoughCoins ; 14:6945 ld hl,SorryNeedMoreCoinsTextPtr jp PrintText .PrintOhFineThen ; 14:694B ld hl,OhFineThenTextPtr jp PrintText UnknownData52951: ; 52951 (14:6951) ; XXX what's this? db $00,$01,$00,$01,$00,$01,$00,$00,$01 HereYouGoTextPtr: ; 5295a (14:695a) TX_FAR _HereYouGoText ; 22:62E7 db $0D db "@" SoYouWantPrizeTextPtr: ; 52960 (14:6960) TX_FAR _SoYouWantPrizeText ; 22:62F6 db "@" SorryNeedMoreCoinsTextPtr: ; 52965 (14:6965) TX_FAR _SorryNeedMoreCoins ; 22:630B db $0D db "@" PrizeRoomBagIsFullTextPtr: ; 5296b (14:696b) TX_FAR _OopsYouDontHaveEnoughRoomText ; 22:6329 db $0D db "@" OhFineThenTextPtr: ; 52971 (14:6971) TX_FAR _OhFineThenText; 22:634C db $0D ; wait keypress (A/B) without blink db "@" GetPrizeMonLevel: ; 52977 (14:6977) ld a,[$CF91] ld b,a ld hl,PrizeMonLevelDictionary .loop ; 14:697E ld a,[hli] cp b jr z,.matchFound inc hl jr .loop .matchFound ; 14:6985 ld a,[hl] ld [$D127],a ret PrizeMonLevelDictionary: ; 5298a (14:698a) IF _RED db ABRA,9 db CLEFAIRY,8 db NIDORINA,17 db DRATINI,18 db SCYTHER,25 db PORYGON,26 ENDC IF _BLUE db ABRA,6 db CLEFAIRY,12 db NIDORINO,17 db PINSIR,20 db DRATINI,24 db PORYGON,18 ENDC Func_52996: ; 52996 (14:6996) call EnableAutoTextBoxDrawing ld a, $1 ld [$cc3c], a ld a, [wTrainerSpriteOffset] jp Func_3ef5 TMNotebook: ; 529a4 (14:69a4) TX_FAR TMNotebookText db $0d db "@" ViridianSchoolNotebook: ; 529aa (14:69aa) db $08 ; asm ld hl, ViridianSchoolNotebookText1 call PrintText call TurnPageSchoolNotebook jr nz, .doneReading ld hl, ViridianSchoolNotebookText2 call PrintText call TurnPageSchoolNotebook jr nz, .doneReading ld hl, ViridianSchoolNotebookText3 call PrintText call TurnPageSchoolNotebook jr nz, .doneReading ld hl, ViridianSchoolNotebookText4 call PrintText ld hl, ViridianSchoolNotebookText5 call PrintText .doneReading jp TextScriptEnd TurnPageSchoolNotebook: ; 529db (14:69db) ld hl, TurnPageText call PrintText call YesNoChoice ld a, [wCurrentMenuItem] and a ret TurnPageText: ; 529e9 (14:69e9) TX_FAR _TurnPageText db "@" ViridianSchoolNotebookText5: ; 529ee (14:69ee) TX_FAR _ViridianSchoolNotebookText5 db $0d db "@" ViridianSchoolNotebookText1: ; 529f4 (14:69f4) TX_FAR _ViridianSchoolNotebookText1 db "@" ViridianSchoolNotebookText2: ; 529f9 (14:69f9) TX_FAR _ViridianSchoolNotebookText2 db "@" ViridianSchoolNotebookText3: ; 529fe (14:69fe) TX_FAR _ViridianSchoolNotebookText3 db "@" ViridianSchoolNotebookText4: ; 52a03 (14:6a03) TX_FAR _ViridianSchoolNotebookText4 db "@" Func_52a08: ; 52a08 (14:6a08) call EnableAutoTextBoxDrawing ld a, $37 jp Func_3ef5 UnnamedText_52a10: ; 52a10 (14:6a10) TX_FAR _UnnamedText_52a10 db "@" Func_52a15: ; 52a15 (14:6a15) call EnableAutoTextBoxDrawing ld a, $38 jp Func_3ef5 UnnamedText_52a1d: ; 52a1d (14:6a1d) TX_FAR _UnnamedText_52a1d db "@" Func_52a22: ; 52a22 (14:6a22) call EnableAutoTextBoxDrawing ld a, $36 jp Func_3ef5 FightingDojoText: ; 52a2a (14:6a2a) TX_FAR _FightingDojoText db "@" Func_52a2f: ; 52a2f (14:6a2f) ld a, [$c109] cp $4 ret nz call EnableAutoTextBoxDrawing ld a, $27 jp Func_3ef5 IndigoPlateauHQText: ; 52a3d (14:6a3d) TX_FAR _IndigoPlateauHQText db "@" SECTION "bank15",ROMX,BANK[$15] Route2_h: ; 54000 (15:4000) db 00 ; Tileset db ROUTE_2_HEIGHT,ROUTE_2_WIDTH ;Height,Width blocks (1 block = 4x4 tiles) dw Route2Blocks, Route2TextPointers, Route2Script db NORTH | SOUTH ;Connection Byte NORTH_MAP_CONNECTION PEWTER_CITY, PEWTER_CITY_WIDTH, PEWTER_CITY_HEIGHT, -3, 2, PEWTER_CITY_WIDTH - 4, PewterCityBlocks SOUTH_MAP_CONNECTION VIRIDIAN_CITY, VIRIDIAN_CITY_WIDTH, -3, 2, VIRIDIAN_CITY_WIDTH - 4, ViridianCityBlocks, ROUTE_2_WIDTH, ROUTE_2_HEIGHT dw Route2Object ;Object Data Pointer Route2Object: ; 0x54022 (size=72) db $f ; border tile db $6 ; warps db $9, $c, $0, DIGLETTS_CAVE_EXIT db $b, $3, $1, VIRIDIAN_FOREST_EXIT db $13, $f, $0, ROUTE_2_HOUSE db $23, $10, $1, ROUTE_2_GATE db $27, $f, $2, ROUTE_2_GATE db $2b, $3, $2, VIRIDIAN_FOREST_ENTRANCE db $2 ; signs db $41, $5, $3 ; Route2Text3 db $b, $b, $4 ; Route2Text4 db $2 ; people db SPRITE_BALL, $36 + 4, $d + 4, $ff, $ff, $81, MOON_STONE ; item db SPRITE_BALL, $2d + 4, $d + 4, $ff, $ff, $82, HP_UP ; item ; warp-to EVENT_DISP $a, $9, $c ; DIGLETTS_CAVE_EXIT EVENT_DISP $a, $b, $3 ; VIRIDIAN_FOREST_EXIT EVENT_DISP $a, $13, $f ; ROUTE_2_HOUSE EVENT_DISP $a, $23, $10 ; ROUTE_2_GATE EVENT_DISP $a, $27, $f ; ROUTE_2_GATE EVENT_DISP $a, $2b, $3 ; VIRIDIAN_FOREST_ENTRANCE ; unused EVENT_DISP $4, $7, $2 db $12, $c7, $9, $7 EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $2 Route2Blocks: ; 5407e (15:407e) INCBIN "maps/route2.blk" Route3_h: ; 0x541e6 to 0x54208 (34 bytes) (id=14) db $00 ; tileset db ROUTE_3_HEIGHT, ROUTE_3_WIDTH ; dimensions (y, x) dw Route3Blocks, Route3TextPointers, Route3Script ; blocks, texts, scripts db NORTH | WEST ; connections NORTH_MAP_CONNECTION ROUTE_4, ROUTE_4_WIDTH, ROUTE_4_HEIGHT, 25, 0, ROUTE_4_WIDTH - 32, Route4Blocks WEST_MAP_CONNECTION PEWTER_CITY, PEWTER_CITY_WIDTH, -3, 1, PEWTER_CITY_HEIGHT - 3, PewterCityBlocks, ROUTE_3_WIDTH dw Route3Object ; objects Route3Object: ; 0x54208 (size=77) db $2c ; border tile db $0 ; warps db $1 ; signs db $9, $3b, $a ; Route3Text10 db $9 ; people db SPRITE_BLACK_HAIR_BOY_2, $b + 4, $39 + 4, $ff, $ff, $1 ; person db SPRITE_BUG_CATCHER, $6 + 4, $a + 4, $ff, $d3, $42, BUG_CATCHER + $C8, $4 ; trainer db SPRITE_BUG_CATCHER, $4 + 4, $e + 4, $ff, $d0, $43, YOUNGSTER + $C8, $1 ; trainer db SPRITE_LASS, $9 + 4, $10 + 4, $ff, $d2, $44, LASS + $C8, $1 ; trainer db SPRITE_BUG_CATCHER, $5 + 4, $13 + 4, $ff, $d0, $45, BUG_CATCHER + $C8, $5 ; trainer db SPRITE_LASS, $4 + 4, $17 + 4, $ff, $d2, $46, LASS + $C8, $2 ; trainer db SPRITE_BUG_CATCHER, $9 + 4, $16 + 4, $ff, $d2, $47, YOUNGSTER + $C8, $2 ; trainer db SPRITE_BUG_CATCHER, $6 + 4, $18 + 4, $ff, $d3, $48, BUG_CATCHER + $C8, $6 ; trainer db SPRITE_LASS, $a + 4, $21 + 4, $ff, $d1, $49, LASS + $C8, $3 ; trainer Route3Blocks: ; 54255 (15:4255) INCBIN "maps/route3.blk" Route4_h: ; 0x54390 to 0x543b2 (34 bytes) (id=15) db $00 ; tileset db ROUTE_4_HEIGHT, ROUTE_4_WIDTH ; dimensions (y, x) dw Route4Blocks, Route4TextPointers, Route4Script; blocks, texts, scripts db SOUTH | EAST ; connections SOUTH_MAP_CONNECTION ROUTE_3, ROUTE_3_WIDTH, -3, 22, ROUTE_3_WIDTH - 22, Route3Blocks, ROUTE_4_WIDTH, ROUTE_4_HEIGHT EAST_MAP_CONNECTION CERULEAN_CITY, CERULEAN_CITY_WIDTH, -3, 1, CERULEAN_CITY_HEIGHT - 3, CeruleanCityBlocks, ROUTE_4_WIDTH dw Route4Object ; objects Route4Object: ; 0x543b2 (size=58) db $2c ; border tile db $3 ; warps db $5, $b, $0, MT_MOON_POKECENTER db $5, $12, $0, MT_MOON_1 db $5, $18, $7, MT_MOON_2 db $3 ; signs db $5, $c, $4 ; PokeCenterSignText db $7, $11, $5 ; Route4Text5 db $7, $1b, $6 ; Route4Text6 db $3 ; people db SPRITE_LASS, $8 + 4, $9 + 4, $fe, $0, $1 ; person db SPRITE_LASS, $3 + 4, $3f + 4, $ff, $d3, $42, LASS + $C8, $4 ; trainer db SPRITE_BALL, $3 + 4, $39 + 4, $ff, $ff, $83, TM_04 ; item ; warp-to EVENT_DISP $2d, $5, $b ; MT_MOON_POKECENTER EVENT_DISP $2d, $5, $12 ; MT_MOON_1 EVENT_DISP $2d, $5, $18 ; MT_MOON_2 Route4Blocks: ; 543ec (15:43ec) INCBIN "maps/route4.blk" Route5_h: ; 0x54581 to 0x545a3 (34 bytes) (id=16) db $00 ; tileset db ROUTE_5_HEIGHT, ROUTE_5_WIDTH ; dimensions (y, x) dw Route5Blocks, Route5TextPointers, Route5Script ; blocks, texts, scripts db NORTH | SOUTH ; connections NORTH_MAP_CONNECTION CERULEAN_CITY, CERULEAN_CITY_WIDTH, CERULEAN_CITY_HEIGHT, -3, 2, CERULEAN_CITY_WIDTH - 4, CeruleanCityBlocks SOUTH_MAP_CONNECTION SAFFRON_CITY, SAFFRON_CITY_WIDTH, -3, 2, SAFFRON_CITY_WIDTH - 4, SaffronCityBlocks, ROUTE_5_WIDTH, ROUTE_5_HEIGHT dw Route5Object ; objects Route5Object: ; 0x545a3 (size=47) db $a ; border tile db $5 ; warps db $1d, $a, $3, ROUTE_5_GATE db $1d, $9, $2, ROUTE_5_GATE db $21, $a, $0, ROUTE_5_GATE db $1b, $11, $0, PATH_ENTRANCE_ROUTE_5 db $15, $a, $0, DAYCAREM db $1 ; signs db $1d, $11, $1 ; Route5Text1 db $0 ; people ; warp-to EVENT_DISP $a, $1d, $a ; ROUTE_5_GATE EVENT_DISP $a, $1d, $9 ; ROUTE_5_GATE EVENT_DISP $a, $21, $a ; ROUTE_5_GATE EVENT_DISP $a, $1b, $11 ; PATH_ENTRANCE_ROUTE_5 EVENT_DISP $a, $15, $a ; DAYCAREM Route5Blocks: ; 545d2 (15:45d2) INCBIN "maps/route5.blk" Route9_h: ; 0x54686 to 0x546a8 (34 bytes) (id=20) db $00 ; tileset db ROUTE_9_HEIGHT, ROUTE_9_WIDTH ; dimensions (y, x) dw Route9Blocks, Route9TextPointers, Route9Script ; blocks, texts, scripts db WEST | EAST ; connections WEST_MAP_CONNECTION CERULEAN_CITY, CERULEAN_CITY_WIDTH, -3, 1, CERULEAN_CITY_HEIGHT - 3, CeruleanCityBlocks, ROUTE_9_WIDTH EAST_MAP_CONNECTION ROUTE_10, ROUTE_10_WIDTH, 0, 0, ROUTE_10_HEIGHT - 24, Route10Blocks, ROUTE_9_WIDTH dw Route9Object ; objects Route9Object: ; 0x546a8 (size=86) db $2c ; border tile db $0 ; warps db $1 ; signs db $7, $19, $b ; Route9Text11 db $a ; people db SPRITE_LASS, $a + 4, $d + 4, $ff, $d2, $41, JR__TRAINER_F + $C8, $5 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $7 + 4, $18 + 4, $ff, $d2, $42, JR__TRAINER_M + $C8, $7 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $7 + 4, $1f + 4, $ff, $d3, $43, JR__TRAINER_M + $C8, $8 ; trainer db SPRITE_LASS, $8 + 4, $30 + 4, $ff, $d3, $44, JR__TRAINER_F + $C8, $6 ; trainer db SPRITE_HIKER, $f + 4, $10 + 4, $ff, $d2, $45, HIKER + $C8, $b ; trainer db SPRITE_HIKER, $3 + 4, $2b + 4, $ff, $d2, $46, HIKER + $C8, $6 ; trainer db SPRITE_BUG_CATCHER, $2 + 4, $16 + 4, $ff, $d0, $47, BUG_CATCHER + $C8, $d ; trainer db SPRITE_HIKER, $f + 4, $2d + 4, $ff, $d3, $48, HIKER + $C8, $5 ; trainer db SPRITE_BUG_CATCHER, $8 + 4, $28 + 4, $ff, $d3, $49, BUG_CATCHER + $C8, $e ; trainer db SPRITE_BALL, $f + 4, $a + 4, $ff, $ff, $8a, TM_30 ; item Route9Blocks: ; 546fe (15:46fe) INCBIN "maps/route9.blk" Route13_h: ; 0x5480c to 0x5482e (34 bytes) (id=24) db $00 ; tileset db ROUTE_13_HEIGHT, ROUTE_13_WIDTH ; dimensions (y, x) dw Route13Blocks, Route13TextPointers, Route13Script ; blocks, texts, scripts db NORTH | WEST ; connections NORTH_MAP_CONNECTION ROUTE_12, ROUTE_12_WIDTH, ROUTE_12_HEIGHT, 20, 0, ROUTE_12_WIDTH, Route12Blocks WEST_MAP_CONNECTION ROUTE_14, ROUTE_14_WIDTH, 0, 0, ROUTE_14_HEIGHT - 15, Route14Blocks, ROUTE_13_WIDTH dw Route13Object ; objects Route13Object: ; 0x5482e (size=93) db $43 ; border tile db $0 ; warps db $3 ; signs db $d, $f, $b ; Route13Text11 db $5, $21, $c ; Route13Text12 db $b, $1f, $d ; Route13Text13 db $a ; people db SPRITE_BLACK_HAIR_BOY_1, $a + 4, $31 + 4, $ff, $d3, $41, BIRD_KEEPER + $C8, $1 ; trainer db SPRITE_LASS, $a + 4, $30 + 4, $ff, $d0, $42, JR__TRAINER_F + $C8, $c ; trainer db SPRITE_LASS, $9 + 4, $1b + 4, $ff, $d0, $43, JR__TRAINER_F + $C8, $d ; trainer db SPRITE_LASS, $a + 4, $17 + 4, $ff, $d2, $44, JR__TRAINER_F + $C8, $e ; trainer db SPRITE_LASS, $5 + 4, $32 + 4, $ff, $d0, $45, JR__TRAINER_F + $C8, $f ; trainer db SPRITE_BLACK_HAIR_BOY_1, $4 + 4, $c + 4, $ff, $d3, $46, BIRD_KEEPER + $C8, $2 ; trainer db SPRITE_FOULARD_WOMAN, $6 + 4, $21 + 4, $ff, $d0, $47, BEAUTY + $C8, $4 ; trainer db SPRITE_FOULARD_WOMAN, $6 + 4, $20 + 4, $ff, $d0, $48, BEAUTY + $C8, $5 ; trainer db SPRITE_BIKER, $7 + 4, $a + 4, $ff, $d1, $49, BIKER + $C8, $1 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $d + 4, $7 + 4, $ff, $d1, $4a, BIRD_KEEPER + $C8, $3 ; trainer Route13Blocks: ; 5488b (15:488b) INCBIN "maps/route13.blk" Route14_h: ; 0x54999 to 0x549bb (34 bytes) (id=25) db $00 ; tileset db ROUTE_14_HEIGHT, ROUTE_14_WIDTH ; dimensions (y, x) dw Route14Blocks, Route14TextPointers, Route14Script ; blocks, texts, scripts db WEST | EAST ; connections WEST_MAP_CONNECTION ROUTE_15, ROUTE_15_WIDTH, 18, 0, ROUTE_15_HEIGHT, Route15Blocks, ROUTE_14_WIDTH EAST_MAP_CONNECTION ROUTE_13, ROUTE_13_WIDTH, 0, 0, ROUTE_13_HEIGHT, Route13Blocks, ROUTE_14_WIDTH dw Route14Object ; objects Route14Object: ; 0x549bb (size=87) db $43 ; border tile db $0 ; warps db $1 ; signs db $d, $11, $b ; Route14Text11 db $a ; people db SPRITE_BLACK_HAIR_BOY_1, $4 + 4, $4 + 4, $ff, $d0, $41, BIRD_KEEPER + $C8, $e ; trainer db SPRITE_BLACK_HAIR_BOY_1, $6 + 4, $f + 4, $ff, $d0, $42, BIRD_KEEPER + $C8, $f ; trainer db SPRITE_BLACK_HAIR_BOY_1, $b + 4, $c + 4, $ff, $d0, $43, BIRD_KEEPER + $C8, $10 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $f + 4, $e + 4, $ff, $d1, $44, BIRD_KEEPER + $C8, $11 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $1f + 4, $f + 4, $ff, $d2, $45, BIRD_KEEPER + $C8, $4 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $31 + 4, $6 + 4, $ff, $d1, $46, BIRD_KEEPER + $C8, $5 ; trainer db SPRITE_BIKER, $27 + 4, $5 + 4, $ff, $d0, $47, BIKER + $C8, $d ; trainer db SPRITE_BIKER, $1e + 4, $4 + 4, $ff, $d3, $48, BIKER + $C8, $e ; trainer db SPRITE_BIKER, $1e + 4, $f + 4, $ff, $d2, $49, BIKER + $C8, $f ; trainer db SPRITE_BIKER, $1f + 4, $4 + 4, $ff, $d3, $4a, BIKER + $C8, $2 ; trainer Route14Blocks: ; 54a12 (15:4a12) INCBIN "maps/route14.blk" Route17_h: ; 0x54b20 to 0x54b42 (34 bytes) (id=28) db $00 ; tileset db ROUTE_17_HEIGHT, ROUTE_17_WIDTH ; dimensions (y, x) dw Route17Blocks, Route17TextPointers, Route17Script ; blocks, texts, scripts db NORTH | SOUTH ; connections NORTH_MAP_CONNECTION ROUTE_16, ROUTE_16_WIDTH, ROUTE_16_HEIGHT, 0, 0, ROUTE_16_WIDTH - 7, Route16Blocks SOUTH_MAP_CONNECTION ROUTE_18, ROUTE_18_WIDTH, 0, 0, ROUTE_18_WIDTH - 12, Route18Blocks, ROUTE_17_WIDTH, ROUTE_17_HEIGHT dw Route17Object ; objects Route17Object: ; 0x54b42 (size=102) db $43 ; border tile db $0 ; warps db $6 ; signs db $33, $9, $b ; Route17Text11 db $3f, $9, $c ; Route17Text12 db $4b, $9, $d ; Route17Text13 db $57, $9, $e ; Route17Text14 db $6f, $9, $f ; Route17Text15 db $8d, $9, $10 ; Route17Text16 db $a ; people db SPRITE_BIKER, $13 + 4, $c + 4, $ff, $d2, $41, CUE_BALL + $C8, $4 ; trainer db SPRITE_BIKER, $10 + 4, $b + 4, $ff, $d3, $42, CUE_BALL + $C8, $5 ; trainer db SPRITE_BIKER, $12 + 4, $4 + 4, $ff, $d1, $43, BIKER + $C8, $8 ; trainer db SPRITE_BIKER, $20 + 4, $7 + 4, $ff, $d2, $44, BIKER + $C8, $9 ; trainer db SPRITE_BIKER, $22 + 4, $e + 4, $ff, $d3, $45, BIKER + $C8, $a ; trainer db SPRITE_BIKER, $3a + 4, $11 + 4, $ff, $d2, $46, CUE_BALL + $C8, $6 ; trainer db SPRITE_BIKER, $44 + 4, $2 + 4, $ff, $d3, $47, CUE_BALL + $C8, $7 ; trainer db SPRITE_BIKER, $62 + 4, $e + 4, $ff, $d3, $48, CUE_BALL + $C8, $8 ; trainer db SPRITE_BIKER, $62 + 4, $5 + 4, $ff, $d2, $49, BIKER + $C8, $b ; trainer db SPRITE_BIKER, $76 + 4, $a + 4, $ff, $d0, $4a, BIKER + $C8, $c ; trainer Route17Blocks: ; 54ba8 (15:4ba8) INCBIN "maps/route17.blk" Route19_h: ; 0x54e78 to 0x54e9a (34 bytes) (id=30) db $00 ; tileset db ROUTE_19_HEIGHT, ROUTE_19_WIDTH ; dimensions (y, x) dw Route19Blocks, Route19TextPointers, Route19Script ; blocks, texts, scripts db NORTH | WEST ; connections NORTH_MAP_CONNECTION FUCHSIA_CITY, FUCHSIA_CITY_WIDTH, FUCHSIA_CITY_HEIGHT, -3, 2, FUCHSIA_CITY_WIDTH - 4, FuchsiaCityBlocks WEST_MAP_CONNECTION ROUTE_20, ROUTE_20_WIDTH, 18, 0, ROUTE_20_HEIGHT, Route20Blocks, ROUTE_19_WIDTH dw Route19Object ; objects Route19Object: ; 0x54e9a (size=87) db $43 ; border tile db $0 ; warps db $1 ; signs db $9, $b, $b ; Route19Text11 db $a ; people db SPRITE_BLACK_HAIR_BOY_1, $7 + 4, $8 + 4, $ff, $d2, $41, SWIMMER + $C8, $2 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $7 + 4, $d + 4, $ff, $d2, $42, SWIMMER + $C8, $3 ; trainer db SPRITE_SWIMMER, $19 + 4, $d + 4, $ff, $d2, $43, SWIMMER + $C8, $4 ; trainer db SPRITE_SWIMMER, $1b + 4, $4 + 4, $ff, $d3, $44, SWIMMER + $C8, $5 ; trainer db SPRITE_SWIMMER, $1f + 4, $10 + 4, $ff, $d1, $45, SWIMMER + $C8, $6 ; trainer db SPRITE_SWIMMER, $b + 4, $9 + 4, $ff, $d0, $46, SWIMMER + $C8, $7 ; trainer db SPRITE_SWIMMER, $2b + 4, $8 + 4, $ff, $d2, $47, BEAUTY + $C8, $c ; trainer db SPRITE_SWIMMER, $2b + 4, $b + 4, $ff, $d3, $48, BEAUTY + $C8, $d ; trainer db SPRITE_SWIMMER, $2a + 4, $9 + 4, $ff, $d1, $49, SWIMMER + $C8, $8 ; trainer db SPRITE_SWIMMER, $2c + 4, $a + 4, $ff, $d0, $4a, BEAUTY + $C8, $e ; trainer Route19Blocks: ; 54ef1 (15:4ef1) INCBIN "maps/route19.blk" Route21_h: ; 0x54fff to 0x55021 (34 bytes) (id=32) db $00 ; tileset db ROUTE_21_HEIGHT, ROUTE_21_WIDTH ; dimensions (y, x) dw Route21Blocks, Route21TextPointers, Route21Script ; blocks, texts, scripts db NORTH | SOUTH ; connections NORTH_MAP_CONNECTION PALLET_TOWN, PALLET_TOWN_WIDTH, PALLET_TOWN_HEIGHT, 0, 0, PALLET_TOWN_WIDTH, PalletTownBlocks SOUTH_MAP_CONNECTION CINNABAR_ISLAND, CINNABAR_ISLAND_WIDTH, 0, 0, CINNABAR_ISLAND_WIDTH, CinnabarIslandBlocks, ROUTE_21_WIDTH, ROUTE_21_HEIGHT dw Route21Object ; objects Route21Object: ; 0x55021 (size=76) db $43 ; border tile db $0 ; warps db $0 ; signs db $9 ; people db SPRITE_FISHER2, $18 + 4, $4 + 4, $ff, $d2, $41, FISHER + $C8, $7 ; trainer db SPRITE_FISHER2, $19 + 4, $6 + 4, $ff, $d0, $42, FISHER + $C8, $9 ; trainer db SPRITE_SWIMMER, $1f + 4, $a + 4, $ff, $d1, $43, SWIMMER + $C8, $c ; trainer db SPRITE_SWIMMER, $1e + 4, $c + 4, $ff, $d3, $44, CUE_BALL + $C8, $9 ; trainer db SPRITE_SWIMMER, $3f + 4, $10 + 4, $ff, $d0, $45, SWIMMER + $C8, $d ; trainer db SPRITE_SWIMMER, $47 + 4, $5 + 4, $ff, $d3, $46, SWIMMER + $C8, $e ; trainer db SPRITE_SWIMMER, $47 + 4, $f + 4, $ff, $d2, $47, SWIMMER + $C8, $f ; trainer db SPRITE_FISHER2, $38 + 4, $e + 4, $ff, $d2, $48, FISHER + $C8, $8 ; trainer db SPRITE_FISHER2, $39 + 4, $11 + 4, $ff, $d3, $49, FISHER + $C8, $a ; trainer Route21Blocks: ; 5506d (15:506d) INCBIN "maps/route21.blk" VermilionHouse2Blocks: ; 5522f (15:522f) Route12HouseBlocks: ; 5522f (15:522f) DayCareMBlocks: ; 5522f (15:522f) INCBIN "maps/daycarem.blk" FuchsiaHouse3Blocks: ; 5523f (15:523f) INCBIN "maps/fuchsiahouse3.blk" Func_5524f: ; 5524f (15:524f) ld a, [W_ISLINKBATTLE] ; $d12b cp $4 ret z call Func_5546c ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA) xor a ld [wWhichPokemon], a ; $cf92 Func_5525f: ; 5525f (15:525f) inc hl ld a, [hli] or [hl] jp z, Func_55436 push hl ld hl, W_PLAYERMONSALIVEFLAGS ld a, [wWhichPokemon] ; $cf92 ld c, a ld b, $2 ld a, $10 call Predef ; indirect jump to HandleBitArray (f666 (3:7666)) ld a, c and a pop hl jp z, Func_55436 ld de, $10 add hl, de ld d, h ld e, l ld hl, $d002 ld c, $5 .asm_55285 ld a, [hli] ld b, a ld a, [de] add b ld [de], a jr nc, .asm_5529a dec de ld a, [de] inc a jr z, .asm_55295 ld [de], a inc de jr .asm_5529a .asm_55295 ld a, $ff ld [de], a inc de ld [de], a .asm_5529a dec c jr z, .asm_552a1 inc de inc de jr .asm_55285 .asm_552a1 xor a ld [H_NUMTOPRINT], a ; $FF00+$96 (aliases: H_MULTIPLICAND) ld [$FF00+$97], a ld a, [$d008] ld [$FF00+$98], a ld a, [W_ENEMYMONLEVEL] ; $cff3 ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) call Multiply ld a, $7 ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) ld b, $4 call Divide ld hl, $fff2 add hl, de ld b, [hl] inc hl ld a, [wPlayerID] ; $d359 cp b jr nz, .asm_552d1 ld b, [hl] ld a, [wPlayerID + 1] ; $d35a cp b ld a, $0 jr z, .asm_552d6 .asm_552d1 call Func_5549f ld a, $1 .asm_552d6 ld [$cf4d], a ld a, [W_ISINBATTLE] ; $d057 dec a call nz, Func_5549f inc hl inc hl inc hl ld b, [hl] ld a, [$FF00+$98] ld [$cf4c], a add b ld [hld], a ld b, [hl] ld a, [$FF00+$97] ld [$cf4b], a adc b ld [hl], a jr nc, .asm_552f8 dec hl inc [hl] inc hl .asm_552f8 inc hl push hl ld a, [wWhichPokemon] ; $cf92 ld c, a ld b, $0 ld hl, W_PARTYMON1 ; $d164 add hl, bc ld a, [hl] ld [$d0b5], a call GetMonHeader ld d, $64 ld hl, CalcExperience ld b, BANK(CalcExperience) call Bankswitch ld a, [H_NUMTOPRINT] ; $FF00+$96 (aliases: H_MULTIPLICAND) ld b, a ld a, [$FF00+$97] ld c, a ld a, [$FF00+$98] ld d, a pop hl ld a, [hld] sub d ld a, [hld] sbc c ld a, [hl] sbc b jr c, .asm_5532e ld a, b ld [hli], a ld a, c ld [hli], a ld a, d ld [hld], a dec hl .asm_5532e push hl ld a, [wWhichPokemon] ; $cf92 ld hl, W_PARTYMON1NAME ; $d2b5 call GetPartyMonName ld hl, UnnamedText_554b2 ; $54b2 call PrintText xor a ld [$cc49], a call LoadMonData pop hl ld bc, $13 add hl, bc push hl ld b, BANK(Func_58f43) ld hl, Func_58f43 call Bankswitch pop hl ld a, [hl] cp d jp z, Func_55436 ld a, [W_CURENEMYLVL] ; $d127 push af push hl ld a, d ld [W_CURENEMYLVL], a ; $d127 ld [hl], a ld bc, $ffdf add hl, bc ld a, [hl] ld [$d0b5], a ld [$d11e], a call GetMonHeader ld bc, $23 add hl, bc push hl ld a, [hld] ld c, a ld b, [hl] push bc ld d, h ld e, l ld bc, $ffee add hl, bc ld b, $1 call CalcStats pop bc pop hl ld a, [hld] sub c ld c, a ld a, [hl] sbc b ld b, a ld de, $ffe0 add hl, de ld a, [hl] add c ld [hld], a ld a, [hl] adc b ld [hl], a ld a, [wPlayerMonNumber] ; $cc2f ld b, a ld a, [wWhichPokemon] ; $cf92 cp b jr nz, .asm_553f7 ld de, W_PLAYERMONCURHP ; $d015 ld a, [hli] ld [de], a inc de ld a, [hl] ld [de], a ld bc, $1f add hl, bc push hl ld de, W_PLAYERMONLEVEL ; $d022 ld bc, $b call CopyData pop hl ld a, [W_PLAYERBATTSTATUS3] ; $d064 bit 3, a jr nz, .asm_553c8 ld de, $cd0f ld bc, $b call CopyData .asm_553c8 xor a ld [$d11e], a ld hl, Func_3ed99 ld b, BANK(Func_3ed99) call Bankswitch ld hl, Func_3ed1a ld b, BANK(Func_3ed1a) call Bankswitch ld hl, Func_3ee19 ld b, BANK(Func_3ee19) call Bankswitch ld hl, Func_3cd60 ld b, BANK(Func_3cd60) call Bankswitch ld hl, Func_3ee94 ld b, BANK(Func_3ee94) call Bankswitch call SaveScreenTilesToBuffer1 .asm_553f7 ld hl, UnnamedText_554dd ; $54dd call PrintText xor a ld [$cc49], a call LoadMonData ld d, $1 ld hl, PrintStatsBox ld b, BANK(PrintStatsBox) call Bankswitch call WaitForTextScrollButtonPress call LoadScreenTilesFromBuffer1 xor a ld [$cc49], a ld a, [$d0b5] ld [$d11e], a ld a, $1a call Predef ; indirect jump to Func_3af5b (3af5b (e:6f5b)) ld hl, $ccd3 ld a, [wWhichPokemon] ; $cf92 ld c, a ld b, $1 ld a, $10 call Predef ; indirect jump to HandleBitArray (f666 (3:7666)) pop hl pop af ld [W_CURENEMYLVL], a ; $d127 Func_55436: ; 55436 (15:5436) ld a, [W_NUMINPARTY] ; $d163 ld b, a ld a, [wWhichPokemon] ; $cf92 inc a cp b jr z, .asm_55450 ld [wWhichPokemon], a ; $cf92 ld bc, $2c ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA) call AddNTimes jp Func_5525f .asm_55450 ld hl, W_PLAYERMONSALIVEFLAGS xor a ld [hl], a ld a, [wPlayerMonNumber] ; $cc2f ld c, a ld b, $1 push bc ld a, $10 call Predef ; indirect jump to HandleBitArray (f666 (3:7666)) ld hl, $ccf5 xor a ld [hl], a pop bc ld a, $10 jp Predef ; indirect jump to HandleBitArray (f666 (3:7666)) Func_5546c: ; 5546c (15:546c) ld a, [W_PLAYERMONSALIVEFLAGS] ld b, a xor a ld c, $8 ld d, $0 .asm_55475 xor a srl b adc d ld d, a dec c jr nz, .asm_55475 cp $2 ret c ld [$d11e], a ld hl, $d002 ld c, $7 .asm_55488 xor a ld [H_DIVIDEND], a ; $FF00+$95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) ld a, [hl] ld [H_NUMTOPRINT], a ; $FF00+$96 (aliases: H_MULTIPLICAND) ld a, [$d11e] ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) ld b, $2 call Divide ld a, [$FF00+$98] ld [hli], a dec c jr nz, .asm_55488 ret Func_5549f: ; 5549f (15:549f) ld a, [$FF00+$97] ld b, a ld a, [$FF00+$98] ld c, a srl b rr c add c ld [$FF00+$98], a ld a, [$FF00+$97] adc b ld [$FF00+$97], a ret UnnamedText_554b2: ; 554b2 (15:54b2) TX_FAR _UnnamedText_554b2 db $08 ; asm ld a, [$cc5b] ld hl, UnnamedText_554cb and a ret nz ld hl, UnnamedText_554d8 ld a, [$cf4d] and a ret z ld hl, UnnamedText_554d4 ret UnnamedText_554cb: ; 554cb (15:54cb) TX_FAR _UnnamedText_554cb db $08 ; asm ld hl, UnnamedText_554d8 ret UnnamedText_554d4: ; 554d4 (15:54d4) TX_FAR _UnnamedText_554d4 UnnamedText_554d8: ; 554d8 (15:54d8) TX_FAR _UnnamedText_554d8 db "@" UnnamedText_554dd: ; 554dd (15:54dd) TX_FAR UnnamedText_89c01 db $0b db "@" Route2Script: ; 554e3 (15:54e3) jp EnableAutoTextBoxDrawing Route2TextPointers: ; 554e6 (15:54e6) dw Predef5CText dw Predef5CText dw Route2Text3 dw Route2Text4 Route2Text3: ; 554ee (15:54ee) TX_FAR _Route2Text3 db "@" Route2Text4: ; 554f3 (15:54f3) TX_FAR _Route2Text4 db "@" Route3Script: ; 554f8 (15:54f8) call EnableAutoTextBoxDrawing ld hl, Route3TrainerHeader0 ld de, Route3ScriptPointers ld a, [W_ROUTE3CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROUTE3CURSCRIPT], a ret Route3ScriptPointers: ; 5550b (15:550b) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle Route3TextPointers: ; 55511 (15:5511) dw Route3Text1 dw Route3Text2 dw Route3Text3 dw Route3Text4 dw Route3Text5 dw Route3Text6 dw Route3Text7 dw Route3Text8 dw Route3Text9 dw Route3Text10 Route3TrainerHeaders: ; 55525 (15:5525) Route3TrainerHeader0: ; 55525 (15:5525) db $2 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7c3 ; flag's byte dw Route3BattleText1 ; 0x5595 TextBeforeBattle dw Route3AfterBattleText1 ; 0x559f TextAfterBattle dw Route3EndBattleText1 ; 0x559a TextEndBattle dw Route3EndBattleText1 ; 0x559a TextEndBattle Route3TrainerHeader2: ; 55531 (15:5531) db $3 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7c3 ; flag's byte dw Route3BattleText2 ; 0x55ae TextBeforeBattle dw Route3AfterBattleText2 ; 0x55b8 TextAfterBattle dw Route3EndBattleText2 ; 0x55b3 TextEndBattle dw Route3EndBattleText2 ; 0x55b3 TextEndBattle Route3TrainerHeader3: ; 5553d (15:553d) db $4 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7c3 ; flag's byte dw Route3BattleText3 ; 0x55c7 TextBeforeBattle dw Route3AfterBattleText3 ; 0x55d1 TextAfterBattle dw Route3EndBattleText3 ; 0x55cc TextEndBattle dw Route3EndBattleText3 ; 0x55cc TextEndBattle Route3TrainerHeader4: ; 55549 (15:5549) db $5 ; flag's bit db ($1 << 4) ; trainer's view range dw $d7c3 ; flag's byte dw Route3BattleText4 ; 0x55e0 TextBeforeBattle dw Route3AfterBattleText4 ; 0x55ea TextAfterBattle dw Route3EndBattleText4 ; 0x55e5 TextEndBattle dw Route3EndBattleText4 ; 0x55e5 TextEndBattle Route3TrainerHeader5: ; 55555 (15:5555) db $6 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7c3 ; flag's byte dw Route3BattleText5 ; 0x55f9 TextBeforeBattle dw Route3AfterBattleText5 ; 0x5603 TextAfterBattle dw Route3EndBattleText5 ; 0x55fe TextEndBattle dw Route3EndBattleText5 ; 0x55fe TextEndBattle Route3TrainerHeader6: ; 55561 (15:5561) db $7 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7c3 ; flag's byte dw Route3BattleText6 ; 0x5612 TextBeforeBattle dw Route3AfterBattleText6 ; 0x561c TextAfterBattle dw Route3EndBattleText6 ; 0x5617 TextEndBattle dw Route3EndBattleText6 ; 0x5617 TextEndBattle Route3TrainerHeader7: ; 5556d (15:556d) db $8 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7c3 ; flag's byte dw Route3BattleText7 ; 0x562b TextBeforeBattle dw Route3AfterBattleText7 ; 0x5635 TextAfterBattle dw Route3EndBattleText7 ; 0x5630 TextEndBattle dw Route3EndBattleText7 ; 0x5630 TextEndBattle Route3TrainerHeader8: ; 55579 (15:5579) db $9 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7c3 ; flag's byte dw Route3BattleText8 ; 0x5644 TextBeforeBattle dw Route3AfterBattleText8 ; 0x564e TextAfterBattle dw Route3EndBattleText8 ; 0x5649 TextEndBattle dw Route3EndBattleText8 ; 0x5649 TextEndBattle db $ff Route3Text1: ; 55586 (15:5586) TX_FAR _Route3Text1 db "@" Route3Text2: ; 5558b (15:558b) db $08 ; asm ld hl, Route3TrainerHeader0 call TalkToTrainer jp TextScriptEnd Route3BattleText1: ; 55595 (15:5595) TX_FAR _Route3BattleText1 db "@" Route3EndBattleText1: ; 5559a (15:559a) TX_FAR _Route3EndBattleText1 db "@" Route3AfterBattleText1: ; 5559f (15:559f) TX_FAR _Route3AfterBattleText1 db "@" Route3Text3: ; 555a4 (15:55a4) db $08 ; asm ld hl, Route3TrainerHeader2 call TalkToTrainer jp TextScriptEnd Route3BattleText2: ; 555ae (15:55ae) TX_FAR _Route3BattleText2 db "@" Route3EndBattleText2: ; 555b3 (15:55b3) TX_FAR _Route3EndBattleText2 db "@" Route3AfterBattleText2: ; 555b8 (15:55b8) TX_FAR _Route3AfterBattleText2 db "@" Route3Text4: ; 555bd (15:55bd) db $08 ; asm ld hl, Route3TrainerHeader3 call TalkToTrainer jp TextScriptEnd Route3BattleText3: ; 555c7 (15:55c7) TX_FAR _Route3BattleText3 db "@" Route3EndBattleText3: ; 555cc (15:55cc) TX_FAR _Route3EndBattleText3 db "@" Route3AfterBattleText3: ; 555d1 (15:55d1) TX_FAR _Route3AfterBattleText3 db "@" Route3Text5: ; 555d6 (15:55d6) db $08 ; asm ld hl, Route3TrainerHeader4 call TalkToTrainer jp TextScriptEnd Route3BattleText4: ; 555e0 (15:55e0) TX_FAR _Route3BattleText4 db "@" Route3EndBattleText4: ; 555e5 (15:55e5) TX_FAR _Route3EndBattleText4 db "@" Route3AfterBattleText4: ; 555ea (15:55ea) TX_FAR _Route3AfterBattleText4 db "@" Route3Text6: ; 555ef (15:55ef) db $08 ; asm ld hl, Route3TrainerHeader5 call TalkToTrainer jp TextScriptEnd Route3BattleText5: ; 555f9 (15:55f9) TX_FAR _Route3BattleText5 db "@" Route3EndBattleText5: ; 555fe (15:55fe) TX_FAR _Route3EndBattleText5 db "@" Route3AfterBattleText5: ; 55603 (15:5603) TX_FAR _Route3AfterBattleText5 db "@" Route3Text7: ; 55608 (15:5608) db $08 ; asm ld hl, Route3TrainerHeader6 call TalkToTrainer jp TextScriptEnd Route3BattleText6: ; 55612 (15:5612) TX_FAR _Route3BattleText6 db "@" Route3EndBattleText6: ; 55617 (15:5617) TX_FAR _Route3EndBattleText6 db "@" Route3AfterBattleText6: ; 5561c (15:561c) TX_FAR _Route3AfterBattleText6 db "@" Route3Text8: ; 55621 (15:5621) db $08 ; asm ld hl, Route3TrainerHeader7 call TalkToTrainer jp TextScriptEnd Route3BattleText7: ; 5562b (15:562b) TX_FAR _Route3BattleText7 db "@" Route3EndBattleText7: ; 55630 (15:5630) TX_FAR _Route3EndBattleText7 db "@" Route3AfterBattleText7: ; 55635 (15:5635) TX_FAR _Route3AfterBattleText7 db "@" Route3Text9: ; 5563a (15:563a) db $08 ; asm ld hl, Route3TrainerHeader8 call TalkToTrainer jp TextScriptEnd Route3BattleText8: ; 55644 (15:5644) TX_FAR _Route3BattleText8 db "@" Route3EndBattleText8: ; 55649 (15:5649) TX_FAR _Route3EndBattleText8 db "@" Route3AfterBattleText8: ; 5564e (15:564e) TX_FAR _Route3AfterBattleText8 db "@" Route3Text10: ; 55653 (15:5653) TX_FAR _Route3Text10 db "@" Route4Script: ; 55658 (15:5658) call EnableAutoTextBoxDrawing ld hl, Route4TrainerHeaders ld de, Route4ScriptPointers ld a, [W_ROUTE4CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROUTE4CURSCRIPT], a ret Route4ScriptPointers: ; 5566b (15:566b) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle Route4TextPointers: ; 55671 (15:5671) dw Route4Text1 dw Route4Text2 dw Predef5CText dw PokeCenterSignText dw Route4Text5 dw Route4Text6 Route4TrainerHeaders: ; 5567d (15:567d) Route4TrainerHeader0: ; 5567d (15:567d) db $2 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7c5 ; flag's byte dw Route4BattleText1 ; 0x5699 TextBeforeBattle dw Route4AfterBattleText1 ; 0x56a3 TextAfterBattle dw Route4EndBattleText1 ; 0x569e TextEndBattle dw Route4EndBattleText1 ; 0x569e TextEndBattle db $ff Route4Text1: ; 5568a (15:568a) TX_FAR _Route4Text1 db "@" Route4Text2: ; 5568f (15:568f) db $08 ; asm ld hl, Route4TrainerHeader0 call TalkToTrainer jp TextScriptEnd Route4BattleText1: ; 55699 (15:5699) TX_FAR _Route4BattleText1 db "@" Route4EndBattleText1: ; 5569e (15:569e) TX_FAR _Route4EndBattleText1 db "@" Route4AfterBattleText1: ; 556a3 (15:56a3) TX_FAR _Route4AfterBattleText1 db "@" Route4Text5: ; 556a8 (15:56a8) TX_FAR _Route4Text5 db "@" Route4Text6: ; 556ad (15:56ad) TX_FAR _Route4Text6 db "@" Route5Script: ; 556b2 (15:56b2) jp EnableAutoTextBoxDrawing Route5TextPointers: ; 556b5 (15:56b5) dw Route5Text1 Route5Text1: ; 556b7 (15:56b7) TX_FAR _Route5Text1 db "@" Route9Script: ; 556bc (15:56bc) call EnableAutoTextBoxDrawing ld hl, Route9TrainerHeaders ld de, Route9ScriptPointers ld a, [W_ROUTE9CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROUTE9CURSCRIPT], a ret Route9ScriptPointers: ; 556cf (15:56cf) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle Route9TextPointers: ; 556d5 (15:56d5) dw Route9Text1 dw Route9Text2 dw Route9Text3 dw Route9Text4 dw Route9Text5 dw Route9Text6 dw Route9Text7 dw Route9Text8 dw Route9Text9 dw Predef5CText dw Route9Text11 Route9TrainerHeaders: ; 556eb (15:56eb) Route9TrainerHeader0: ; 556eb (15:56eb) db $1 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7cf ; flag's byte dw Route9BattleText1 ; 0x5792 TextBeforeBattle dw Route9AfterBattleText1 ; 0x579c TextAfterBattle dw Route9EndBattleText1 ; 0x5797 TextEndBattle dw Route9EndBattleText1 ; 0x5797 TextEndBattle Route9TrainerHeader2: ; 556f7 (15:56f7) db $2 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7cf ; flag's byte dw Route9BattleText2 ; 0x57a1 TextBeforeBattle dw Route9AfterBattleText2 ; 0x57ab TextAfterBattle dw Route9EndBattleText2 ; 0x57a6 TextEndBattle dw Route9EndBattleText2 ; 0x57a6 TextEndBattle Route9TrainerHeader3: ; 55703 (15:5703) db $3 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7cf ; flag's byte dw Route9BattleText3 ; 0x57b0 TextBeforeBattle dw Route9AfterBattleText3 ; 0x57ba TextAfterBattle dw Route9EndBattleText3 ; 0x57b5 TextEndBattle dw Route9EndBattleText3 ; 0x57b5 TextEndBattle Route9TrainerHeader4: ; 5570f (15:570f) db $4 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7cf ; flag's byte dw Route9BattleText4 ; 0x57bf TextBeforeBattle dw Route9AfterBattleText4 ; 0x57c9 TextAfterBattle dw Route9EndBattleText4 ; 0x57c4 TextEndBattle dw Route9EndBattleText4 ; 0x57c4 TextEndBattle Route9TrainerHeader5: ; 5571b (15:571b) db $5 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7cf ; flag's byte dw Route9BattleText5 ; 0x57ce TextBeforeBattle dw Route9AfterBattleText5 ; 0x57d8 TextAfterBattle dw Route9EndBattleText5 ; 0x57d3 TextEndBattle dw Route9EndBattleText5 ; 0x57d3 TextEndBattle Route9TrainerHeader6: ; 55727 (15:5727) db $6 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7cf ; flag's byte dw Route9BattleText6 ; 0x57dd TextBeforeBattle dw Route9AfterBattleText6 ; 0x57e7 TextAfterBattle dw Route9EndBattleText6 ; 0x57e2 TextEndBattle dw Route9EndBattleText6 ; 0x57e2 TextEndBattle Route9TrainerHeader7: ; 55733 (15:5733) db $7 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7cf ; flag's byte dw Route9BattleText7 ; 0x57ec TextBeforeBattle dw Route9AfterBattleText7 ; 0x57f6 TextAfterBattle dw Route9EndBattleText7 ; 0x57f1 TextEndBattle dw Route9EndBattleText7 ; 0x57f1 TextEndBattle Route9TrainerHeader8: ; 5573f (15:573f) db $8 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7cf ; flag's byte dw Route9BattleText8 ; 0x57fb TextBeforeBattle dw Route9AfterBattleText8 ; 0x5805 TextAfterBattle dw Route9EndBattleText8 ; 0x5800 TextEndBattle dw Route9EndBattleText8 ; 0x5800 TextEndBattle Route9TrainerHeader9: ; 5574b (15:574b) db $9 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7cf ; flag's byte dw Route9BattleText9 ; 0x580a TextBeforeBattle dw Route9AfterBattleText9 ; 0x5814 TextAfterBattle dw Route9EndBattleText9 ; 0x580f TextEndBattle dw Route9EndBattleText9 ; 0x580f TextEndBattle db $ff Route9Text1: ; 55758 (15:5758) db $8 ; asm ld hl, Route9TrainerHeader0 jr asm_8be3d ; 0x5575c $2e Route9Text2: ; 5575e (15:575e) db $8 ; asm ld hl, Route9TrainerHeader2 jr asm_8be3d ; 0x55762 $28 Route9Text3: ; 55764 (15:5764) db $8 ; asm ld hl, Route9TrainerHeader3 jr asm_8be3d ; 0x55768 $22 Route9Text4: ; 5576a (15:576a) db $8 ; asm ld hl, Route9TrainerHeader4 jr asm_8be3d ; 0x5576e $1c Route9Text5: ; 55770 (15:5770) db $8 ; asm ld hl, Route9TrainerHeader5 jr asm_8be3d ; 0x55774 $16 Route9Text6: ; 55776 (15:5776) db $8 ; asm ld hl, Route9TrainerHeader6 jr asm_8be3d ; 0x5577a $10 Route9Text7: ; 5577c (15:577c) db $8 ; asm ld hl, Route9TrainerHeader7 jr asm_8be3d ; 0x55780 $a Route9Text8: ; 55782 (15:5782) db $8 ; asm ld hl, Route9TrainerHeader8 jr asm_8be3d ; 0x55786 $4 Route9Text9: ; 55788 (15:5788) db $8 ; asm ld hl, Route9TrainerHeader9 asm_8be3d: ; 5578c (15:578c) call TalkToTrainer jp TextScriptEnd Route9BattleText1: ; 55792 (15:5792) TX_FAR _Route9BattleText1 db "@" Route9EndBattleText1: ; 55797 (15:5797) TX_FAR _Route9EndBattleText1 db "@" Route9AfterBattleText1: ; 5579c (15:579c) TX_FAR _Route9AfterBattleText1 db "@" Route9BattleText2: ; 557a1 (15:57a1) TX_FAR _Route9BattleText2 db "@" Route9EndBattleText2: ; 557a6 (15:57a6) TX_FAR _Route9EndBattleText2 db "@" Route9AfterBattleText2: ; 557ab (15:57ab) TX_FAR _Route9AfterBattleText2 db "@" Route9BattleText3: ; 557b0 (15:57b0) TX_FAR _Route9BattleText3 db "@" Route9EndBattleText3: ; 557b5 (15:57b5) TX_FAR _Route9EndBattleText3 db "@" Route9AfterBattleText3: ; 557ba (15:57ba) TX_FAR _Route9AfterBattleText3 db "@" Route9BattleText4: ; 557bf (15:57bf) TX_FAR _Route9BattleText4 db "@" Route9EndBattleText4: ; 557c4 (15:57c4) TX_FAR _Route9EndBattleText4 db "@" Route9AfterBattleText4: ; 557c9 (15:57c9) TX_FAR _Route9AfterBattleText4 db "@" Route9BattleText5: ; 557ce (15:57ce) TX_FAR _Route9BattleText5 db "@" Route9EndBattleText5: ; 557d3 (15:57d3) TX_FAR _Route9EndBattleText5 db "@" Route9AfterBattleText5: ; 557d8 (15:57d8) TX_FAR _Route9AfterBattleText5 db "@" Route9BattleText6: ; 557dd (15:57dd) TX_FAR _Route9BattleText6 db "@" Route9EndBattleText6: ; 557e2 (15:57e2) TX_FAR _Route9EndBattleText6 db "@" Route9AfterBattleText6: ; 557e7 (15:57e7) TX_FAR _Route9AfterBattleText6 db "@" Route9BattleText7: ; 557ec (15:57ec) TX_FAR _Route9BattleText7 db "@" Route9EndBattleText7: ; 557f1 (15:57f1) TX_FAR _Route9EndBattleText7 db "@" Route9AfterBattleText7: ; 557f6 (15:57f6) TX_FAR _Route9AfterBattleText7 db "@" Route9BattleText8: ; 557fb (15:57fb) TX_FAR _Route9BattleText8 db "@" Route9EndBattleText8: ; 55800 (15:5800) TX_FAR _Route9EndBattleText8 db "@" Route9AfterBattleText8: ; 55805 (15:5805) TX_FAR _Route9AfterBattleText8 db "@" Route9BattleText9: ; 5580a (15:580a) TX_FAR _Route9BattleText9 db "@" Route9EndBattleText9: ; 5580f (15:580f) TX_FAR _Route9EndBattleText9 db "@" Route9AfterBattleText9: ; 55814 (15:5814) TX_FAR _Route9AfterBattleText9 db "@" Route9Text11: ; 55819 (15:5819) TX_FAR _Route9Text11 db "@" Route13Script: ; 5581e (15:581e) call EnableAutoTextBoxDrawing ld hl, Route13TrainerHeaders ld de, Route13ScriptPointers ld a, [W_ROUTE13CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROUTE13CURSCRIPT], a ret Route13ScriptPointers: ; 55831 (15:5831) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle Route13TextPointers: ; 55837 (15:5837) dw Route13Text1 dw Route13Text2 dw Route13Text3 dw Route13Text4 dw Route13Text5 dw Route13Text6 dw Route13Text7 dw Route13Text8 dw Route13Text9 dw Route13Text10 dw Route13Text11 dw Route13Text12 dw Route13Text13 Route13TrainerHeaders: ; 55851 (15:5851) Route13TrainerHeader0: ; 55851 (15:5851) db $1 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7d9 ; flag's byte dw Route13BattleText2 ; 0x58d4 TextBeforeBattle dw Route13AfterBattleText2 ; 0x58de TextAfterBattle dw Route13EndBattleText2 ; 0x58d9 TextEndBattle dw Route13EndBattleText2 ; 0x58d9 TextEndBattle Route13TrainerHeader2: ; 5585d (15:585d) db $2 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7d9 ; flag's byte dw Route13BattleText3 ; 0x58ed TextBeforeBattle dw Route13AfterBattleText3 ; 0x58f7 TextAfterBattle dw Route13EndBattleText3 ; 0x58f2 TextEndBattle dw Route13EndBattleText3 ; 0x58f2 TextEndBattle Route13TrainerHeader3: ; 55869 (15:5869) db $3 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7d9 ; flag's byte dw Route13BattleText4 ; 0x5906 TextBeforeBattle dw Route13AfterBattleText4 ; 0x5910 TextAfterBattle dw Route13EndBattleText4 ; 0x590b TextEndBattle dw Route13EndBattleText4 ; 0x590b TextEndBattle Route13TrainerHeader4: ; 55875 (15:5875) db $4 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7d9 ; flag's byte dw Route13BattleText5 ; 0x591f TextBeforeBattle dw Route13AfterBattleText5 ; 0x5929 TextAfterBattle dw Route13EndBattleText5 ; 0x5924 TextEndBattle dw Route13EndBattleText5 ; 0x5924 TextEndBattle Route13TrainerHeader5: ; 55881 (15:5881) db $5 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7d9 ; flag's byte dw Route13BattleText6 ; 0x5938 TextBeforeBattle dw Route13AfterBattleText6 ; 0x5942 TextAfterBattle dw Route13EndBattleText6 ; 0x593d TextEndBattle dw Route13EndBattleText6 ; 0x593d TextEndBattle Route13TrainerHeader6: ; 5588d (15:588d) db $6 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7d9 ; flag's byte dw Route13BattleText7 ; 0x5951 TextBeforeBattle dw Route13AfterBattleText7 ; 0x595b TextAfterBattle dw Route13EndBattleText7 ; 0x5956 TextEndBattle dw Route13EndBattleText7 ; 0x5956 TextEndBattle Route13TrainerHeader7: ; 55899 (15:5899) db $7 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7d9 ; flag's byte dw Route13BattleText8 ; 0x596a TextBeforeBattle dw Route13AfterBattleText8 ; 0x5974 TextAfterBattle dw Route13EndBattleText8 ; 0x596f TextEndBattle dw Route13EndBattleText8 ; 0x596f TextEndBattle Route13TrainerHeader8: ; 558a5 (15:58a5) db $8 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7d9 ; flag's byte dw Route13BattleText9 ; 0x5983 TextBeforeBattle dw Route13AfterBattleText9 ; 0x598d TextAfterBattle dw Route13EndBattleText9 ; 0x5988 TextEndBattle dw Route13EndBattleText9 ; 0x5988 TextEndBattle Route13TrainerHeader9: ; 558b1 (15:58b1) db $9 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7d9 ; flag's byte dw Route13BattleText10 ; 0x599c TextBeforeBattle dw Route13AfterBattleText10 ; 0x59a6 TextAfterBattle dw Route13EndBattleText10 ; 0x59a1 TextEndBattle dw Route13EndBattleText10 ; 0x59a1 TextEndBattle Route13TrainerHeader10: ; 558bd (15:58bd) db $a ; flag's bit db ($4 << 4) ; trainer's view range dw $d7d9 ; flag's byte dw Route13BattleText11 ; 0x59b5 TextBeforeBattle dw Route13AfterBattleText11 ; 0x59bf TextAfterBattle dw Route13EndBattleText11 ; 0x59ba TextEndBattle dw Route13EndBattleText11 ; 0x59ba TextEndBattle db $ff Route13Text1: ; 558ca (15:58ca) db $08 ; asm ld hl, Route13TrainerHeader0 call TalkToTrainer jp TextScriptEnd Route13BattleText2: ; 558d4 (15:58d4) TX_FAR _Route13BattleText2 db "@" Route13EndBattleText2: ; 558d9 (15:58d9) TX_FAR _Route13EndBattleText2 db "@" Route13AfterBattleText2: ; 558de (15:58de) TX_FAR _Route13AfterBattleText2 db "@" Route13Text2: ; 558e3 (15:58e3) db $08 ; asm ld hl, Route13TrainerHeader2 call TalkToTrainer jp TextScriptEnd Route13BattleText3: ; 558ed (15:58ed) TX_FAR _Route13BattleText3 db "@" Route13EndBattleText3: ; 558f2 (15:58f2) TX_FAR _Route13EndBattleText3 db "@" Route13AfterBattleText3: ; 558f7 (15:58f7) TX_FAR _Route13AfterBattleText3 db "@" Route13Text3: ; 558fc (15:58fc) db $08 ; asm ld hl, Route13TrainerHeader3 call TalkToTrainer jp TextScriptEnd Route13BattleText4: ; 55906 (15:5906) TX_FAR _Route13BattleText4 db "@" Route13EndBattleText4: ; 5590b (15:590b) TX_FAR _Route13EndBattleText4 db "@" Route13AfterBattleText4: ; 55910 (15:5910) TX_FAR _Route13AfterBattleText4 db "@" Route13Text4: ; 55915 (15:5915) db $08 ; asm ld hl, Route13TrainerHeader4 call TalkToTrainer jp TextScriptEnd Route13BattleText5: ; 5591f (15:591f) TX_FAR _Route13BattleText5 db "@" Route13EndBattleText5: ; 55924 (15:5924) TX_FAR _Route13EndBattleText5 db "@" Route13AfterBattleText5: ; 55929 (15:5929) TX_FAR _Route13AfterBattleText5 db "@" Route13Text5: ; 5592e (15:592e) db $08 ; asm ld hl, Route13TrainerHeader5 call TalkToTrainer jp TextScriptEnd Route13BattleText6: ; 55938 (15:5938) TX_FAR _Route13BattleText6 db "@" Route13EndBattleText6: ; 5593d (15:593d) TX_FAR _Route13EndBattleText6 db "@" Route13AfterBattleText6: ; 55942 (15:5942) TX_FAR _Route13AfterBattleText6 db "@" Route13Text6: ; 55947 (15:5947) db $08 ; asm ld hl, Route13TrainerHeader6 call TalkToTrainer jp TextScriptEnd Route13BattleText7: ; 55951 (15:5951) TX_FAR _Route13BattleText7 db "@" Route13EndBattleText7: ; 55956 (15:5956) TX_FAR _Route13EndBattleText7 db "@" Route13AfterBattleText7: ; 5595b (15:595b) TX_FAR _Route13AfterBattleText7 db "@" Route13Text7: ; 55960 (15:5960) db $08 ; asm ld hl, Route13TrainerHeader7 call TalkToTrainer jp TextScriptEnd Route13BattleText8: ; 5596a (15:596a) TX_FAR _Route13BattleText8 db "@" Route13EndBattleText8: ; 5596f (15:596f) TX_FAR _Route13EndBattleText8 db "@" Route13AfterBattleText8: ; 55974 (15:5974) TX_FAR _Route13AfterBattleText8 db "@" Route13Text8: ; 55979 (15:5979) db $08 ; asm ld hl, Route13TrainerHeader8 call TalkToTrainer jp TextScriptEnd Route13BattleText9: ; 55983 (15:5983) TX_FAR _Route13BattleText9 db "@" Route13EndBattleText9: ; 55988 (15:5988) TX_FAR _Route13EndBattleText9 db "@" Route13AfterBattleText9: ; 5598d (15:598d) TX_FAR _Route13AfterBattleText9 db "@" Route13Text9: ; 55992 (15:5992) db $08 ; asm ld hl, Route13TrainerHeader9 call TalkToTrainer jp TextScriptEnd Route13BattleText10: ; 5599c (15:599c) TX_FAR _Route13BattleText10 db "@" Route13EndBattleText10: ; 559a1 (15:59a1) TX_FAR _Route13EndBattleText10 db "@" Route13AfterBattleText10: ; 559a6 (15:59a6) TX_FAR _Route13AfterBattleText10 db "@" Route13Text10: ; 559ab (15:59ab) db $08 ; asm ld hl, Route13TrainerHeader10 call TalkToTrainer jp TextScriptEnd Route13BattleText11: ; 559b5 (15:59b5) TX_FAR _Route13BattleText11 db "@" Route13EndBattleText11: ; 559ba (15:59ba) TX_FAR _Route13EndBattleText11 db "@" Route13AfterBattleText11: ; 559bf (15:59bf) TX_FAR _Route13AfterBattleText11 db "@" Route13Text11: ; 559c4 (15:59c4) TX_FAR _Route13Text11 db "@" Route13Text12: ; 559c9 (15:59c9) TX_FAR _Route13Text12 db "@" Route13Text13: ; 559ce (15:59ce) TX_FAR _Route13Text13 db "@" Route14Script: ; 559d3 (15:59d3) call EnableAutoTextBoxDrawing ld hl, Route14TrainerHeaders ld de, Route14ScriptPointers ld a, [W_ROUTE14CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROUTE14CURSCRIPT], a ret Route14ScriptPointers: ; 559e6 (15:59e6) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle Route14TextPointers: ; 559ec (15:59ec) dw Route14Text1 dw Route14Text2 dw Route14Text3 dw Route14Text4 dw Route14Text5 dw Route14Text6 dw Route14Text7 dw Route14Text8 dw Route14Text9 dw Route14Text10 dw Route14Text11 Route14TrainerHeaders: ; 55a02 (15:5a02) Route14TrainerHeader0: ; 55a02 (15:5a02) db $1 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7db ; flag's byte dw Route14BattleText1 ; 0x5a85 TextBeforeBattle dw Route14AfterBattleText1 ; 0x5a8f TextAfterBattle dw Route14EndBattleText1 ; 0x5a8a TextEndBattle dw Route14EndBattleText1 ; 0x5a8a TextEndBattle Route14TrainerHeader1: ; 55a0e (15:5a0e) db $2 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7db ; flag's byte dw Route14BattleText2 ; 0x5a9e TextBeforeBattle dw Route14AfterBattleText2 ; 0x5aa8 TextAfterBattle dw Route14EndBattleText2 ; 0x5aa3 TextEndBattle dw Route14EndBattleText2 ; 0x5aa3 TextEndBattle Route14TrainerHeader2: ; 55a1a (15:5a1a) db $3 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7db ; flag's byte dw Route14BattleText3 ; 0x5ab7 TextBeforeBattle dw Route14AfterBattleText3 ; 0x5ac1 TextAfterBattle dw Route14EndBattleText3 ; 0x5abc TextEndBattle dw Route14EndBattleText3 ; 0x5abc TextEndBattle Route14TrainerHeader3: ; 55a26 (15:5a26) db $4 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7db ; flag's byte dw Route14BattleText4 ; 0x5ad0 TextBeforeBattle dw Route14AfterBattleText4 ; 0x5ada TextAfterBattle dw Route14EndBattleText4 ; 0x5ad5 TextEndBattle dw Route14EndBattleText4 ; 0x5ad5 TextEndBattle Route14TrainerHeader4: ; 55a32 (15:5a32) db $5 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7db ; flag's byte dw Route14BattleText5 ; 0x5ae9 TextBeforeBattle dw Route14AfterBattleText5 ; 0x5af3 TextAfterBattle dw Route14EndBattleText5 ; 0x5aee TextEndBattle dw Route14EndBattleText5 ; 0x5aee TextEndBattle Route14TrainerHeader5: ; 55a3e (15:5a3e) db $6 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7db ; flag's byte dw Route14BattleText6 ; 0x5b02 TextBeforeBattle dw Route14AfterBattleText6 ; 0x5b0c TextAfterBattle dw Route14EndBattleText6 ; 0x5b07 TextEndBattle dw Route14EndBattleText6 ; 0x5b07 TextEndBattle Route14TrainerHeader6: ; 55a4a (15:5a4a) db $7 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7db ; flag's byte dw Route14BattleText7 ; 0x5b1b TextBeforeBattle dw Route14AfterBattleText7 ; 0x5b25 TextAfterBattle dw Route14EndBattleText7 ; 0x5b20 TextEndBattle dw Route14EndBattleText7 ; 0x5b20 TextEndBattle Route14TrainerHeader7: ; 55a56 (15:5a56) db $8 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7db ; flag's byte dw Route14BattleText8 ; 0x5b34 TextBeforeBattle dw Route14AfterBattleText8 ; 0x5b3e TextAfterBattle dw Route14EndBattleText8 ; 0x5b39 TextEndBattle dw Route14EndBattleText8 ; 0x5b39 TextEndBattle Route14TrainerHeader8: ; 55a62 (15:5a62) db $9 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7db ; flag's byte dw Route14BattleText9 ; 0x5b4d TextBeforeBattle dw Route14AfterBattleText9 ; 0x5b57 TextAfterBattle dw Route14EndBattleText9 ; 0x5b52 TextEndBattle dw Route14EndBattleText9 ; 0x5b52 TextEndBattle Route14TrainerHeader9: ; 55a6e (15:5a6e) db $a ; flag's bit db ($4 << 4) ; trainer's view range dw $d7db ; flag's byte dw Route14BattleText10 ; 0x5b66 TextBeforeBattle dw Route14AfterBattleText10 ; 0x5b70 TextAfterBattle dw Route14EndBattleText10 ; 0x5b6b TextEndBattle dw Route14EndBattleText10 ; 0x5b6b TextEndBattle db $ff Route14Text1: ; 55a7b (15:5a7b) db $08 ; asm ld hl, Route14TrainerHeader0 call TalkToTrainer jp TextScriptEnd Route14BattleText1: ; 55a85 (15:5a85) TX_FAR _Route14BattleText1 db "@" Route14EndBattleText1: ; 55a8a (15:5a8a) TX_FAR _Route14EndBattleText1 db "@" Route14AfterBattleText1: ; 55a8f (15:5a8f) TX_FAR _Route14AfterBattleText1 db "@" Route14Text2: ; 55a94 (15:5a94) db $08 ; asm ld hl, Route14TrainerHeader1 call TalkToTrainer jp TextScriptEnd Route14BattleText2: ; 55a9e (15:5a9e) TX_FAR _Route14BattleText2 db "@" Route14EndBattleText2: ; 55aa3 (15:5aa3) TX_FAR _Route14EndBattleText2 db "@" Route14AfterBattleText2: ; 55aa8 (15:5aa8) TX_FAR _Route14AfterBattleText2 db "@" Route14Text3: ; 55aad (15:5aad) db $08 ; asm ld hl, Route14TrainerHeader2 call TalkToTrainer jp TextScriptEnd Route14BattleText3: ; 55ab7 (15:5ab7) TX_FAR _Route14BattleText3 db "@" Route14EndBattleText3: ; 55abc (15:5abc) TX_FAR _Route14EndBattleText3 db "@" Route14AfterBattleText3: ; 55ac1 (15:5ac1) TX_FAR _Route14AfterBattleText3 db "@" Route14Text4: ; 55ac6 (15:5ac6) db $08 ; asm ld hl, Route14TrainerHeader3 call TalkToTrainer jp TextScriptEnd Route14BattleText4: ; 55ad0 (15:5ad0) TX_FAR _Route14BattleText4 db "@" Route14EndBattleText4: ; 55ad5 (15:5ad5) TX_FAR _Route14EndBattleText4 db "@" Route14AfterBattleText4: ; 55ada (15:5ada) TX_FAR _Route14AfterBattleText4 db "@" Route14Text5: ; 55adf (15:5adf) db $08 ; asm ld hl, Route14TrainerHeader4 call TalkToTrainer jp TextScriptEnd Route14BattleText5: ; 55ae9 (15:5ae9) TX_FAR _Route14BattleText5 db "@" Route14EndBattleText5: ; 55aee (15:5aee) TX_FAR _Route14EndBattleText5 db "@" Route14AfterBattleText5: ; 55af3 (15:5af3) TX_FAR _Route14AfterBattleText5 db "@" Route14Text6: ; 55af8 (15:5af8) db $08 ; asm ld hl, Route14TrainerHeader5 call TalkToTrainer jp TextScriptEnd Route14BattleText6: ; 55b02 (15:5b02) TX_FAR _Route14BattleText6 db "@" Route14EndBattleText6: ; 55b07 (15:5b07) TX_FAR _Route14EndBattleText6 db "@" Route14AfterBattleText6: ; 55b0c (15:5b0c) TX_FAR _Route14AfterBattleText6 db "@" Route14Text7: ; 55b11 (15:5b11) db $08 ; asm ld hl, Route14TrainerHeader6 call TalkToTrainer jp TextScriptEnd Route14BattleText7: ; 55b1b (15:5b1b) TX_FAR _Route14BattleText7 db "@" Route14EndBattleText7: ; 55b20 (15:5b20) TX_FAR _Route14EndBattleText7 db "@" Route14AfterBattleText7: ; 55b25 (15:5b25) TX_FAR _Route14AfterBattleText7 db "@" Route14Text8: ; 55b2a (15:5b2a) db $08 ; asm ld hl, Route14TrainerHeader7 call TalkToTrainer jp TextScriptEnd Route14BattleText8: ; 55b34 (15:5b34) TX_FAR _Route14BattleText8 db "@" Route14EndBattleText8: ; 55b39 (15:5b39) TX_FAR _Route14EndBattleText8 db "@" Route14AfterBattleText8: ; 55b3e (15:5b3e) TX_FAR _Route14AfterBattleText8 db "@" Route14Text9: ; 55b43 (15:5b43) db $08 ; asm ld hl, Route14TrainerHeader8 call TalkToTrainer jp TextScriptEnd Route14BattleText9: ; 55b4d (15:5b4d) TX_FAR _Route14BattleText9 db "@" Route14EndBattleText9: ; 55b52 (15:5b52) TX_FAR _Route14EndBattleText9 db "@" Route14AfterBattleText9: ; 55b57 (15:5b57) TX_FAR _Route14AfterBattleText9 db "@" Route14Text10: ; 55b5c (15:5b5c) db $08 ; asm ld hl, Route14TrainerHeader9 call TalkToTrainer jp TextScriptEnd Route14BattleText10: ; 55b66 (15:5b66) TX_FAR _Route14BattleText10 db "@" Route14EndBattleText10: ; 55b6b (15:5b6b) TX_FAR _Route14EndBattleText10 db "@" Route14AfterBattleText10: ; 55b70 (15:5b70) TX_FAR _Route14AfterBattleText10 db "@" Route14Text11: ; 55b75 (15:5b75) TX_FAR _Route14Text11 db "@" Route17Script: ; 55b7a (15:5b7a) call EnableAutoTextBoxDrawing ld hl, Route17TrainerHeaders ld de, Route17ScriptPointers ld a, [W_ROUTE17CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROUTE17CURSCRIPT], a ret Route17ScriptPointers: ; 55b8d (15:5b8d) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle Route17TextPointers: ; 55b93 (15:5b93) dw Route17Text1 dw Route17Text2 dw Route17Text3 dw Route17Text4 dw Route17Text5 dw Route17Text6 dw Route17Text7 dw Route17Text8 dw Route17Text9 dw Route17Text10 dw Route17Text11 dw Route17Text12 dw Route17Text13 dw Route17Text14 dw Route17Text15 dw Route17Text16 Route17TrainerHeaders: ; 55bb3 (15:5bb3) Route17TrainerHeader0: ; 55bb3 (15:5bb3) db $1 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7e1 ; flag's byte dw Route17BattleText1 ; 0x5c36 TextBeforeBattle dw Route17AfterBattleText1 ; 0x5c40 TextAfterBattle dw Route17EndBattleText1 ; 0x5c3b TextEndBattle dw Route17EndBattleText1 ; 0x5c3b TextEndBattle Route17TrainerHeader1: ; 55bbf (15:5bbf) db $2 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e1 ; flag's byte dw Route17BattleText2 ; 0x5c4f TextBeforeBattle dw Route17AfterBattleText2 ; 0x5c59 TextAfterBattle dw Route17EndBattleText2 ; 0x5c54 TextEndBattle dw Route17EndBattleText2 ; 0x5c54 TextEndBattle Route17TrainerHeader2: ; 55bcb (15:5bcb) db $3 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e1 ; flag's byte dw Route17BattleText3 ; 0x5c68 TextBeforeBattle dw Route17AfterBattleText3 ; 0x5c72 TextAfterBattle dw Route17EndBattleText3 ; 0x5c6d TextEndBattle dw Route17EndBattleText3 ; 0x5c6d TextEndBattle Route17TrainerHeader3: ; 55bd7 (15:5bd7) db $4 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e1 ; flag's byte dw Route17BattleText4 ; 0x5c81 TextBeforeBattle dw Route17AfterBattleText4 ; 0x5c8b TextAfterBattle dw Route17EndBattleText4 ; 0x5c86 TextEndBattle dw Route17EndBattleText4 ; 0x5c86 TextEndBattle Route17TrainerHeader4: ; 55be3 (15:5be3) db $5 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7e1 ; flag's byte dw Route17BattleText5 ; 0x5c9a TextBeforeBattle dw Route17AfterBattleText5 ; 0x5ca4 TextAfterBattle dw Route17EndBattleText5 ; 0x5c9f TextEndBattle dw Route17EndBattleText5 ; 0x5c9f TextEndBattle Route17TrainerHeader5: ; 55bef (15:5bef) db $6 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7e1 ; flag's byte dw Route17BattleText6 ; 0x5cb3 TextBeforeBattle dw Route17AfterBattleText6 ; 0x5cbd TextAfterBattle dw Route17EndBattleText6 ; 0x5cb8 TextEndBattle dw Route17EndBattleText6 ; 0x5cb8 TextEndBattle Route17TrainerHeader6: ; 55bfb (15:5bfb) db $7 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e1 ; flag's byte dw Route17BattleText7 ; 0x5ccc TextBeforeBattle dw Route17AfterBattleText7 ; 0x5cd6 TextAfterBattle dw Route17EndBattleText7 ; 0x5cd1 TextEndBattle dw Route17EndBattleText7 ; 0x5cd1 TextEndBattle Route17TrainerHeader7: ; 55c07 (15:5c07) db $8 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7e1 ; flag's byte dw Route17BattleText8 ; 0x5ce5 TextBeforeBattle dw Route17AfterBattleText8 ; 0x5cef TextAfterBattle dw Route17EndBattleText8 ; 0x5cea TextEndBattle dw Route17EndBattleText8 ; 0x5cea TextEndBattle Route17TrainerHeader8: ; 55c13 (15:5c13) db $9 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7e1 ; flag's byte dw Route17BattleText9 ; 0x5cfe TextBeforeBattle dw Route17AfterBattleText9 ; 0x5d08 TextAfterBattle dw Route17EndBattleText9 ; 0x5d03 TextEndBattle dw Route17EndBattleText9 ; 0x5d03 TextEndBattle Route17TrainerHeader9: ; 55c1f (15:5c1f) db $a ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e1 ; flag's byte dw Route17BattleText10 ; 0x5d17 TextBeforeBattle dw Route17AfterBattleText10 ; 0x5d21 TextAfterBattle dw Route17EndBattleText10 ; 0x5d1c TextEndBattle dw Route17EndBattleText10 ; 0x5d1c TextEndBattle db $ff Route17Text1: ; 55c2c (15:5c2c) db $08 ; asm ld hl, Route17TrainerHeader0 call TalkToTrainer jp TextScriptEnd Route17BattleText1: ; 55c36 (15:5c36) TX_FAR _Route17BattleText1 db "@" Route17EndBattleText1: ; 55c3b (15:5c3b) TX_FAR _Route17EndBattleText1 db "@" Route17AfterBattleText1: ; 55c40 (15:5c40) TX_FAR _Route17AfterBattleText1 db "@" Route17Text2: ; 55c45 (15:5c45) db $08 ; asm ld hl, Route17TrainerHeader1 call TalkToTrainer jp TextScriptEnd Route17BattleText2: ; 55c4f (15:5c4f) TX_FAR _Route17BattleText2 db "@" Route17EndBattleText2: ; 55c54 (15:5c54) TX_FAR _Route17EndBattleText2 db "@" Route17AfterBattleText2: ; 55c59 (15:5c59) TX_FAR _Route17AfterBattleText2 db "@" Route17Text3: ; 55c5e (15:5c5e) db $08 ; asm ld hl, Route17TrainerHeader2 call TalkToTrainer jp TextScriptEnd Route17BattleText3: ; 55c68 (15:5c68) TX_FAR _Route17BattleText3 db "@" Route17EndBattleText3: ; 55c6d (15:5c6d) TX_FAR _Route17EndBattleText3 db "@" Route17AfterBattleText3: ; 55c72 (15:5c72) TX_FAR _Route17AfterBattleText3 db "@" Route17Text4: ; 55c77 (15:5c77) db $08 ; asm ld hl, Route17TrainerHeader3 call TalkToTrainer jp TextScriptEnd Route17BattleText4: ; 55c81 (15:5c81) TX_FAR _Route17BattleText4 db "@" Route17EndBattleText4: ; 55c86 (15:5c86) TX_FAR _Route17EndBattleText4 db "@" Route17AfterBattleText4: ; 55c8b (15:5c8b) TX_FAR _Route17AfterBattleText4 db "@" Route17Text5: ; 55c90 (15:5c90) db $08 ; asm ld hl, Route17TrainerHeader4 call TalkToTrainer jp TextScriptEnd Route17BattleText5: ; 55c9a (15:5c9a) TX_FAR _Route17BattleText5 db "@" Route17EndBattleText5: ; 55c9f (15:5c9f) TX_FAR _Route17EndBattleText5 db "@" Route17AfterBattleText5: ; 55ca4 (15:5ca4) TX_FAR _Route17AfterBattleText5 db "@" Route17Text6: ; 55ca9 (15:5ca9) db $08 ; asm ld hl, Route17TrainerHeader5 call TalkToTrainer jp TextScriptEnd Route17BattleText6: ; 55cb3 (15:5cb3) TX_FAR _Route17BattleText6 db "@" Route17EndBattleText6: ; 55cb8 (15:5cb8) TX_FAR _Route17EndBattleText6 db "@" Route17AfterBattleText6: ; 55cbd (15:5cbd) TX_FAR _Route17AfterBattleText6 db "@" Route17Text7: ; 55cc2 (15:5cc2) db $08 ; asm ld hl, Route17TrainerHeader6 call TalkToTrainer jp TextScriptEnd Route17BattleText7: ; 55ccc (15:5ccc) TX_FAR _Route17BattleText7 db "@" Route17EndBattleText7: ; 55cd1 (15:5cd1) TX_FAR _Route17EndBattleText7 db "@" Route17AfterBattleText7: ; 55cd6 (15:5cd6) TX_FAR _Route17AfterBattleText7 db "@" Route17Text8: ; 55cdb (15:5cdb) db $08 ; asm ld hl, Route17TrainerHeader7 call TalkToTrainer jp TextScriptEnd Route17BattleText8: ; 55ce5 (15:5ce5) TX_FAR _Route17BattleText8 db "@" Route17EndBattleText8: ; 55cea (15:5cea) TX_FAR _Route17EndBattleText8 db "@" Route17AfterBattleText8: ; 55cef (15:5cef) TX_FAR _Route17AfterBattleText8 db "@" Route17Text9: ; 55cf4 (15:5cf4) db $08 ; asm ld hl, Route17TrainerHeader8 call TalkToTrainer jp TextScriptEnd Route17BattleText9: ; 55cfe (15:5cfe) TX_FAR _Route17BattleText9 db "@" Route17EndBattleText9: ; 55d03 (15:5d03) TX_FAR _Route17EndBattleText9 db "@" Route17AfterBattleText9: ; 55d08 (15:5d08) TX_FAR _Route17AfterBattleText9 db "@" Route17Text10: ; 55d0d (15:5d0d) db $08 ; asm ld hl, Route17TrainerHeader9 call TalkToTrainer jp TextScriptEnd Route17BattleText10: ; 55d17 (15:5d17) TX_FAR _Route17BattleText10 db "@" Route17EndBattleText10: ; 55d1c (15:5d1c) TX_FAR _Route17EndBattleText10 db "@" Route17AfterBattleText10: ; 55d21 (15:5d21) TX_FAR _Route17AfterBattleText10 db "@" Route17Text11: ; 55d26 (15:5d26) TX_FAR _Route17Text11 db "@" Route17Text12: ; 55d2b (15:5d2b) TX_FAR _Route17Text12 db "@" Route17Text13: ; 55d30 (15:5d30) TX_FAR _Route17Text13 db "@" Route17Text14: ; 55d35 (15:5d35) TX_FAR _Route17Text14 db "@" Route17Text15: ; 55d3a (15:5d3a) TX_FAR _Route17Text15 db "@" Route17Text16: ; 55d3f (15:5d3f) TX_FAR _Route17Text16 db "@" Route19Script: ; 55d44 (15:5d44) call EnableAutoTextBoxDrawing ld hl, Route19TrainerHeaders ld de, Route19ScriptPointers ld a, [W_ROUTE19CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROUTE19CURSCRIPT], a ret Route19ScriptPointers: ; 55d57 (15:5d57) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle Route19TextPointers: ; 55d5d (15:5d5d) dw Route19Text1 dw Route19Text2 dw Route19Text3 dw Route19Text4 dw Route19Text5 dw Route19Text6 dw Route19Text7 dw Route19Text8 dw Route19Text9 dw Route19Text10 dw Route19Text11 Route19TrainerHeaders: ; 55d73 (15:5d73) Route19TrainerHeader0: ; 55d73 (15:5d73) db $1 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e5 ; flag's byte dw Route19BattleText1 ; 0x5e50 TextBeforeBattle dw Route19AfterBattleText1 ; 0x5e5a TextAfterBattle dw Route19EndBattleText1 ; 0x5e55 TextEndBattle dw Route19EndBattleText1 ; 0x5e55 TextEndBattle Route19TrainerHeader1: ; 55d7f (15:5d7f) db $2 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7e5 ; flag's byte dw Route19BattleText2 ; 0x5e5f TextBeforeBattle dw Route19AfterBattleText2 ; 0x5e69 TextAfterBattle dw Route19EndBattleText2 ; 0x5e64 TextEndBattle dw Route19EndBattleText2 ; 0x5e64 TextEndBattle Route19TrainerHeader2: ; 55d8b (15:5d8b) db $3 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7e5 ; flag's byte dw Route19BattleText3 ; 0x5e6e TextBeforeBattle dw Route19AfterBattleText3 ; 0x5e78 TextAfterBattle dw Route19EndBattleText3 ; 0x5e73 TextEndBattle dw Route19EndBattleText3 ; 0x5e73 TextEndBattle Route19TrainerHeader3: ; 55d97 (15:5d97) db $4 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e5 ; flag's byte dw Route19BattleText4 ; 0x5e7d TextBeforeBattle dw Route19AfterBattleText4 ; 0x5e87 TextAfterBattle dw Route19EndBattleText4 ; 0x5e82 TextEndBattle dw Route19EndBattleText4 ; 0x5e82 TextEndBattle Route19TrainerHeader4: ; 55da3 (15:5da3) db $5 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e5 ; flag's byte dw Route19BattleText5 ; 0x5e8c TextBeforeBattle dw Route19AfterBattleText5 ; 0x5e96 TextAfterBattle dw Route19EndBattleText5 ; 0x5e91 TextEndBattle dw Route19EndBattleText5 ; 0x5e91 TextEndBattle Route19TrainerHeader5: ; 55daf (15:5daf) db $6 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e5 ; flag's byte dw Route19BattleText6 ; 0x5e9b TextBeforeBattle dw Route19AfterBattleText6 ; 0x5ea5 TextAfterBattle dw Route19EndBattleText6 ; 0x5ea0 TextEndBattle dw Route19EndBattleText6 ; 0x5ea0 TextEndBattle Route19TrainerHeader6: ; 55dbb (15:5dbb) db $7 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7e5 ; flag's byte dw Route19BattleText7 ; 0x5eaa TextBeforeBattle dw Route19AfterBattleText7 ; 0x5eb4 TextAfterBattle dw Route19EndBattleText7 ; 0x5eaf TextEndBattle dw Route19EndBattleText7 ; 0x5eaf TextEndBattle Route19TrainerHeader7: ; 55dc7 (15:5dc7) db $8 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e5 ; flag's byte dw Route19BattleText8 ; 0x5eb9 TextBeforeBattle dw Route19AfterBattleText8 ; 0x5ec3 TextAfterBattle dw Route19EndBattleText8 ; 0x5ebe TextEndBattle dw Route19EndBattleText8 ; 0x5ebe TextEndBattle Route19TrainerHeader8: ; 55dd3 (15:5dd3) db $9 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e5 ; flag's byte dw Route19BattleText9 ; 0x5ec8 TextBeforeBattle dw Route19AfterBattleText9 ; 0x5ed2 TextAfterBattle dw Route19EndBattleText9 ; 0x5ecd TextEndBattle dw Route19EndBattleText9 ; 0x5ecd TextEndBattle Route19TrainerHeader9: ; 55ddf (15:5ddf) db $a ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e5 ; flag's byte dw Route19BattleText10 ; 0x5ed7 TextBeforeBattle dw Route19AfterBattleText10 ; 0x5ee1 TextAfterBattle dw Route19EndBattleText10 ; 0x5edc TextEndBattle dw Route19EndBattleText10 ; 0x5edc TextEndBattle db $ff Route19Text1: ; 55dec (15:5dec) db $08 ; asm ld hl, Route19TrainerHeader0 call TalkToTrainer jp TextScriptEnd Route19Text2: ; 55df6 (15:5df6) db $08 ; asm ld hl, Route19TrainerHeader1 call TalkToTrainer jp TextScriptEnd Route19Text3: ; 55e00 (15:5e00) db $08 ; asm ld hl, Route19TrainerHeader2 call TalkToTrainer jp TextScriptEnd Route19Text4: ; 55e0a (15:5e0a) db $08 ; asm ld hl, Route19TrainerHeader3 call TalkToTrainer jp TextScriptEnd Route19Text5: ; 55e14 (15:5e14) db $08 ; asm ld hl, Route19TrainerHeader4 call TalkToTrainer jp TextScriptEnd Route19Text6: ; 55e1e (15:5e1e) db $08 ; asm ld hl, Route19TrainerHeader5 call TalkToTrainer jp TextScriptEnd Route19Text7: ; 55e28 (15:5e28) db $08 ; asm ld hl, Route19TrainerHeader6 call TalkToTrainer jp TextScriptEnd Route19Text8: ; 55e32 (15:5e32) db $08 ; asm ld hl, Route19TrainerHeader7 call TalkToTrainer jp TextScriptEnd Route19Text9: ; 55e3c (15:5e3c) db $08 ; asm ld hl, Route19TrainerHeader8 call TalkToTrainer jp TextScriptEnd Route19Text10: ; 55e46 (15:5e46) db $08 ; asm ld hl, Route19TrainerHeader9 call TalkToTrainer jp TextScriptEnd Route19BattleText1: ; 55e50 (15:5e50) TX_FAR _Route19BattleText1 db "@" Route19EndBattleText1: ; 55e55 (15:5e55) TX_FAR _Route19EndBattleText1 db "@" Route19AfterBattleText1: ; 55e5a (15:5e5a) TX_FAR _Route19AfterBattleText1 db "@" Route19BattleText2: ; 55e5f (15:5e5f) TX_FAR _Route19BattleText2 db "@" Route19EndBattleText2: ; 55e64 (15:5e64) TX_FAR _Route19EndBattleText2 db "@" Route19AfterBattleText2: ; 55e69 (15:5e69) TX_FAR _Route19AfterBattleText2 db "@" Route19BattleText3: ; 55e6e (15:5e6e) TX_FAR _Route19BattleText3 db "@" Route19EndBattleText3: ; 55e73 (15:5e73) TX_FAR _Route19EndBattleText3 db "@" Route19AfterBattleText3: ; 55e78 (15:5e78) TX_FAR _Route19AfterBattleText3 db "@" Route19BattleText4: ; 55e7d (15:5e7d) TX_FAR _Route19BattleText4 db "@" Route19EndBattleText4: ; 55e82 (15:5e82) TX_FAR _Route19EndBattleText4 db "@" Route19AfterBattleText4: ; 55e87 (15:5e87) TX_FAR _Route19AfterBattleText4 db "@" Route19BattleText5: ; 55e8c (15:5e8c) TX_FAR _Route19BattleText5 db "@" Route19EndBattleText5: ; 55e91 (15:5e91) TX_FAR _Route19EndBattleText5 db "@" Route19AfterBattleText5: ; 55e96 (15:5e96) TX_FAR _Route19AfterBattleText5 db "@" Route19BattleText6: ; 55e9b (15:5e9b) TX_FAR _Route19BattleText6 db "@" Route19EndBattleText6: ; 55ea0 (15:5ea0) TX_FAR _Route19EndBattleText6 db "@" Route19AfterBattleText6: ; 55ea5 (15:5ea5) TX_FAR _Route19AfterBattleText6 db "@" Route19BattleText7: ; 55eaa (15:5eaa) TX_FAR _Route19BattleText7 db "@" Route19EndBattleText7: ; 55eaf (15:5eaf) TX_FAR _Route19EndBattleText7 db "@" Route19AfterBattleText7: ; 55eb4 (15:5eb4) TX_FAR _Route19AfterBattleText7 db "@" Route19BattleText8: ; 55eb9 (15:5eb9) TX_FAR _Route19BattleText8 db "@" Route19EndBattleText8: ; 55ebe (15:5ebe) TX_FAR _Route19EndBattleText8 db "@" Route19AfterBattleText8: ; 55ec3 (15:5ec3) TX_FAR _Route19AfterBattleText8 db "@" Route19BattleText9: ; 55ec8 (15:5ec8) TX_FAR _Route19BattleText9 db "@" Route19EndBattleText9: ; 55ecd (15:5ecd) TX_FAR _Route19EndBattleText9 db "@" Route19AfterBattleText9: ; 55ed2 (15:5ed2) TX_FAR _Route19AfterBattleText9 db "@" Route19BattleText10: ; 55ed7 (15:5ed7) TX_FAR _Route19BattleText10 db "@" Route19EndBattleText10: ; 55edc (15:5edc) TX_FAR _Route19EndBattleText10 db "@" Route19AfterBattleText10: ; 55ee1 (15:5ee1) TX_FAR _Route19AfterBattleText10 db "@" Route19Text11: ; 55ee6 (15:5ee6) TX_FAR _Route19Text11 db "@" Route21Script: ; 55eeb (15:5eeb) call EnableAutoTextBoxDrawing ld hl, Route21TrainerHeaders ld de, Route21ScriptPointers ld a, [W_ROUTE21CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROUTE21CURSCRIPT], a ret Route21ScriptPointers: ; 55efe (15:5efe) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle Route21TextPointers: ; 55f04 (15:5f04) dw Route21Text1 dw Route21Text2 dw Route21Text3 dw Route21Text4 dw Route21Text5 dw Route21Text6 dw Route21Text7 dw Route21Text8 dw Route21Text9 Route21TrainerHeaders: ; 55f16 (15:5f16) Route21TrainerHeader0: ; 55f16 (15:5f16) db $1 ; flag's bit db ($0 << 4) ; trainer's view range dw $d7e9 ; flag's byte dw Route21BattleText1 ; 0x5fdd TextBeforeBattle dw Route21AfterBattleText1 ; 0x5fe7 TextAfterBattle dw Route21EndBattleText1 ; 0x5fe2 TextEndBattle dw Route21EndBattleText1 ; 0x5fe2 TextEndBattle Route21TrainerHeader1: ; 55f22 (15:5f22) db $2 ; flag's bit db ($0 << 4) ; trainer's view range dw $d7e9 ; flag's byte dw Route21BattleText2 ; 0x5fec TextBeforeBattle dw Route21AfterBattleText2 ; 0x5ff6 TextAfterBattle dw Route21EndBattleText2 ; 0x5ff1 TextEndBattle dw Route21EndBattleText2 ; 0x5ff1 TextEndBattle Route21TrainerHeader2: ; 55f2e (15:5f2e) db $3 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e9 ; flag's byte dw Route21BattleText3 ; 0x5ffb TextBeforeBattle dw Route21AfterBattleText3 ; 0x6005 TextAfterBattle dw Route21EndBattleText3 ; 0x6000 TextEndBattle dw Route21EndBattleText3 ; 0x6000 TextEndBattle Route21TrainerHeader3: ; 55f3a (15:5f3a) db $4 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e9 ; flag's byte dw Route21BattleText4 ; 0x600a TextBeforeBattle dw Route21AfterBattleText4 ; 0x6014 TextAfterBattle dw Route21EndBattleText4 ; 0x600f TextEndBattle dw Route21EndBattleText4 ; 0x600f TextEndBattle Route21TrainerHeader4: ; 55f46 (15:5f46) db $5 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e9 ; flag's byte dw Route21BattleText5 ; 0x6019 TextBeforeBattle dw Route21AfterBattleText5 ; 0x6023 TextAfterBattle dw Route21EndBattleText5 ; 0x601e TextEndBattle dw Route21EndBattleText5 ; 0x601e TextEndBattle Route21TrainerHeader5: ; 55f52 (15:5f52) db $6 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e9 ; flag's byte dw Route21BattleText6 ; 0x6028 TextBeforeBattle dw Route21AfterBattleText6 ; 0x6032 TextAfterBattle dw Route21EndBattleText6 ; 0x602d TextEndBattle dw Route21EndBattleText6 ; 0x602d TextEndBattle Route21TrainerHeader6: ; 55f5e (15:5f5e) db $7 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7e9 ; flag's byte dw Route21BattleText7 ; 0x6037 TextBeforeBattle dw Route21AfterBattleText7 ; 0x6041 TextAfterBattle dw Route21EndBattleText7 ; 0x603c TextEndBattle dw Route21EndBattleText7 ; 0x603c TextEndBattle Route21TrainerHeader7: ; 55f6a (15:5f6a) db $8 ; flag's bit db ($0 << 4) ; trainer's view range dw $d7e9 ; flag's byte dw Route21BattleText8 ; 0x6046 TextBeforeBattle dw Route21AfterBattleText8 ; 0x6050 TextAfterBattle dw Route21EndBattleText8 ; 0x604b TextEndBattle dw Route21EndBattleText8 ; 0x604b TextEndBattle Route21TrainerHeader8: ; 55f76 (15:5f76) db $9 ; flag's bit db ($0 << 4) ; trainer's view range dw $d7e9 ; flag's byte dw Route21BattleText9 ; 0x6055 TextBeforeBattle dw Route21AfterBattleText9 ; 0x605f TextAfterBattle dw Route21EndBattleText9 ; 0x605a TextEndBattle dw Route21EndBattleText9 ; 0x605a TextEndBattle db $ff Route21Text1: ; 55f83 (15:5f83) db $08 ; asm ld hl, Route21TrainerHeader0 call TalkToTrainer jp TextScriptEnd Route21Text2: ; 55f8d (15:5f8d) db $08 ; asm ld hl, Route21TrainerHeader1 call TalkToTrainer jp TextScriptEnd Route21Text3: ; 55f97 (15:5f97) db $08 ; asm ld hl, Route21TrainerHeader2 call TalkToTrainer jp TextScriptEnd Route21Text4: ; 55fa1 (15:5fa1) db $08 ; asm ld hl, Route21TrainerHeader3 call TalkToTrainer jp TextScriptEnd Route21Text5: ; 55fab (15:5fab) db $08 ; asm ld hl, Route21TrainerHeader4 call TalkToTrainer jp TextScriptEnd Route21Text6: ; 55fb5 (15:5fb5) db $08 ; asm ld hl, Route21TrainerHeader5 call TalkToTrainer jp TextScriptEnd Route21Text7: ; 55fbf (15:5fbf) db $08 ; asm ld hl, Route21TrainerHeader6 call TalkToTrainer jp TextScriptEnd Route21Text8: ; 55fc9 (15:5fc9) db $08 ; asm ld hl, Route21TrainerHeader7 call TalkToTrainer jp TextScriptEnd Route21Text9: ; 55fd3 (15:5fd3) db $08 ; asm ld hl, Route21TrainerHeader8 call TalkToTrainer jp TextScriptEnd Route21BattleText1: ; 55fdd (15:5fdd) TX_FAR _Route21BattleText1 db "@" Route21EndBattleText1: ; 55fe2 (15:5fe2) TX_FAR _Route21EndBattleText1 db "@" Route21AfterBattleText1: ; 55fe7 (15:5fe7) TX_FAR _Route21AfterBattleText1 db "@" Route21BattleText2: ; 55fec (15:5fec) TX_FAR _Route21BattleText2 db "@" Route21EndBattleText2: ; 55ff1 (15:5ff1) TX_FAR _Route21EndBattleText2 db "@" Route21AfterBattleText2: ; 55ff6 (15:5ff6) TX_FAR _Route21AfterBattleText2 db "@" Route21BattleText3: ; 55ffb (15:5ffb) TX_FAR _Route21BattleText3 db "@" Route21EndBattleText3: ; 56000 (15:6000) TX_FAR _Route21EndBattleText3 db "@" Route21AfterBattleText3: ; 56005 (15:6005) TX_FAR _Route21AfterBattleText3 db "@" Route21BattleText4: ; 5600a (15:600a) TX_FAR _Route21BattleText4 db "@" Route21EndBattleText4: ; 5600f (15:600f) TX_FAR _Route21EndBattleText4 db "@" Route21AfterBattleText4: ; 56014 (15:6014) TX_FAR _Route21AfterBattleText4 db "@" Route21BattleText5: ; 56019 (15:6019) TX_FAR _Route21BattleText5 db "@" Route21EndBattleText5: ; 5601e (15:601e) TX_FAR _Route21EndBattleText5 db "@" Route21AfterBattleText5: ; 56023 (15:6023) TX_FAR _Route21AfterBattleText5 db "@" Route21BattleText6: ; 56028 (15:6028) TX_FAR _Route21BattleText6 db "@" Route21EndBattleText6: ; 5602d (15:602d) TX_FAR _Route21EndBattleText6 db "@" Route21AfterBattleText6: ; 56032 (15:6032) TX_FAR _Route21AfterBattleText6 db "@" Route21BattleText7: ; 56037 (15:6037) TX_FAR _Route21BattleText7 db "@" Route21EndBattleText7: ; 5603c (15:603c) TX_FAR _Route21EndBattleText7 db "@" Route21AfterBattleText7: ; 56041 (15:6041) TX_FAR _Route21AfterBattleText7 db "@" Route21BattleText8: ; 56046 (15:6046) TX_FAR _Route21BattleText8 db "@" Route21EndBattleText8: ; 5604b (15:604b) TX_FAR _Route21EndBattleText8 db "@" Route21AfterBattleText8: ; 56050 (15:6050) TX_FAR _Route21AfterBattleText8 db "@" Route21BattleText9: ; 56055 (15:6055) TX_FAR _Route21BattleText9 db "@" Route21EndBattleText9: ; 5605a (15:605a) TX_FAR _Route21EndBattleText9 db "@" Route21AfterBattleText9: ; 5605f (15:605f) TX_FAR _Route21AfterBattleText9 db "@" VermilionHouse2_h: ; 0x56064 to 0x56070 (12 bytes) (id=163) db $08 ; tileset db VERMILION_HOUSE_2_HEIGHT, VERMILION_HOUSE_2_WIDTH ; dimensions (y, x) dw VermilionHouse2Blocks, VermilionHouse2TextPointers, VermilionHouse2Script ; blocks, texts, scripts db $00 ; connections dw VermilionHouse2Object ; objects VermilionHouse2Script: ; 56070 (15:6070) jp EnableAutoTextBoxDrawing VermilionHouse2TextPointers: ; 56073 (15:6073) dw VermilionHouse2Text1 VermilionHouse2Text1: ; 56075 (15:6075) db $08 ; asm ld a, [$d728] bit 3, a jr nz, asm_03ef5 ; 0x5607b ld hl, UnnamedText_560b1 call PrintText call YesNoChoice ld a, [$cc26] and a jr nz, asm_eb1b7 ; 0x5608a ld bc, (OLD_ROD << 8) | 1 call GiveItem jr nc, .BagFull ld hl, $d728 set 3, [hl] ld hl, UnnamedText_560b6 jr asm_5dd95 ; 0x5609c .BagFull ld hl, UnnamedText_560ca jr asm_5dd95 ; 0x560a1 asm_eb1b7 ; 0x560a3 ld hl, UnnamedText_560c0 jr asm_5dd95 ; 0x560a6 asm_03ef5 ; 0x560a8 ld hl, UnnamedText_560c5 asm_5dd95 ; 0x560ab call PrintText jp TextScriptEnd UnnamedText_560b1: ; 560b1 (15:60b1) TX_FAR _UnnamedText_560b1 db "@" UnnamedText_560b6: ; 560b6 (15:60b6) TX_FAR _UnnamedText_560b6 ; 0x9c554 db $0B TX_FAR _UnnamedText_560bb ; 0x9c5a4 db "@" UnnamedText_560c0: ; 560c0 (15:60c0) TX_FAR _UnnamedText_560c0 db "@" UnnamedText_560c5: ; 560c5 (15:60c5) TX_FAR _UnnamedText_560c5 db "@" UnnamedText_560ca: ; 560ca (15:60ca) TX_FAR _UnnamedText_560ca db "@" VermilionHouse2Object: ; 0x560cf (size=26) db $a ; border tile db $2 ; warps db $7, $2, $8, $ff db $7, $3, $8, $ff db $0 ; signs db $1 ; people db SPRITE_FISHER, $4 + 4, $2 + 4, $ff, $d3, $1 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 CeladonMart2_h: ; 0x560e9 to 0x560f5 (12 bytes) (id=123) db $12 ; tileset db CELADON_MART_2_HEIGHT, CELADON_MART_2_WIDTH ; dimensions (y, x) dw CeladonMart2Blocks, CeladonMart2TextPointers, CeladonMart2Script ; blocks, texts, scripts db $00 ; connections dw CeladonMart2Object ; objects CeladonMart2Script: ; 560f5 (15:60f5) jp EnableAutoTextBoxDrawing CeladonMart2TextPointers: ; 560f8 (15:60f8) dw CeladonMart2Text1 dw CeladonMart2Text2 dw CeladonMart2Text3 dw CeladonMart2Text4 dw CeladonMart2Text5 CeladonMart2Text3: ; 56102 (15:6102) TX_FAR _CeladonMart2Text3 db "@" CeladonMart2Text4: ; 56107 (15:6107) TX_FAR _CeladonMart2Text4 db "@" CeladonMart2Text5: ; 5610c (15:610c) TX_FAR _CeladonMart2Text5 db "@" CeladonMart2Object: ; 0x56111 (size=55) db $f ; border tile db $3 ; warps db $1, $c, $4, CELADON_MART_1 db $1, $10, $1, CELADON_MART_3 db $1, $1, $0, CELADON_MART_ELEVATOR db $1 ; signs db $1, $e, $5 ; CeladonMart2Text5 db $4 ; people db SPRITE_MART_GUY, $3 + 4, $5 + 4, $ff, $d0, $1 ; person db SPRITE_MART_GUY, $3 + 4, $6 + 4, $ff, $d0, $2 ; person db SPRITE_FAT_BALD_GUY, $5 + 4, $13 + 4, $ff, $ff, $3 ; person db SPRITE_GIRL, $4 + 4, $e + 4, $fe, $1, $4 ; person ; warp-to EVENT_DISP $a, $1, $c ; CELADON_MART_1 EVENT_DISP $a, $1, $10 ; CELADON_MART_3 EVENT_DISP $a, $1, $1 ; CELADON_MART_ELEVATOR CeladonMart2Blocks: ; 56148 (15:6148) INCBIN "maps/celadonmart2.blk" FuchsiaHouse3_h: ; 0x56170 to 0x5617c (12 bytes) (id=164) db $0d ; tileset db FUCHSIA_HOUSE_3_HEIGHT, FUCHSIA_HOUSE_3_WIDTH ; dimensions (y, x) dw FuchsiaHouse3Blocks, FuchsiaHouse3TextPointers, FuchsiaHouse3Script ; blocks, texts, scripts db $00 ; connections dw FuchsiaHouse3Object ; objects FuchsiaHouse3Script: ; 5617c (15:617c) jp EnableAutoTextBoxDrawing FuchsiaHouse3TextPointers: ; 5617f (15:617f) dw FuchsiaHouse3Text1 FuchsiaHouse3Text1: ; 56181 (15:6181) db $08 ; asm ld a, [$d728] bit 4, a jr nz, .after ld hl, UnnamedText_561bd call PrintText call YesNoChoice ld a, [$cc26] and a jr nz, .refused ld bc, (GOOD_ROD << 8) | 1 call GiveItem jr nc, .full ld hl, $d728 set 4, [hl] ld hl, UnnamedText_561c2 jr .talk .full ld hl, UnnamedText_5621c jr .talk .refused ld hl, UnnamedText_56212 jr .talk .after ld hl, UnnamedText_56217 .talk call PrintText jp TextScriptEnd UnnamedText_561bd: ; 561bd (15:61bd) TX_FAR _UnnamedText_561bd db "@" UnnamedText_561c2: ; 561c2 (15:61c2) TX_FAR _UnnamedText_561c2 ; 0xa06e8 db $0B db "@" UnnamedText_561c8: ; 561c8 para "つり こそ" line "おとこの ロマン だ!" para "へぼいつりざおは" line "コイキングしか つれ なんだが" line "この いいつりざおなら" line "もっと いいもんが つれるんじゃ!" done UnnamedText_56212: ; 56212 (15:6212) TX_FAR _UnnamedText_56212 db "@" UnnamedText_56217: ; 56217 (15:6217) TX_FAR _UnnamedText_56217 db "@" UnnamedText_5621c: ; 5621c (15:621c) TX_FAR _UnnamedText_5621c db "@" FuchsiaHouse3Object: ; 0x56221 (size=34) db $c ; border tile db $3 ; warps db $0, $2, $8, $ff db $7, $2, $7, $ff db $7, $3, $7, $ff db $0 ; signs db $1 ; people db SPRITE_FISHER, $3 + 4, $5 + 4, $ff, $d3, $1 ; person ; warp-to EVENT_DISP $4, $0, $2 EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 DayCareM_h: ; 0x56243 to 0x5624f (12 bytes) (id=72) db $08 ; tileset db DAYCAREM_HEIGHT, DAYCAREM_WIDTH ; dimensions (y, x) dw DayCareMBlocks, DayCareMTextPointers, DayCareMScript ; blocks, texts, scripts db $00 ; connections dw DayCareMObject ; objects DayCareMScript: ; 5624f (15:624f) jp EnableAutoTextBoxDrawing DayCareMTextPointers: ; 56252 (15:6252) dw DayCareMText1 DayCareMText1: ; 56254 (15:6254) db $8 call SaveScreenTilesToBuffer2 ld a, [W_DAYCARE_IN_USE] and a jp nz, Func_562e1 ld hl, UnnamedText_5640f call PrintText call YesNoChoice ld a, [$cc26] and a ld hl, UnnamedText_5643b jp nz, Func_56409 ld a, [$d163] dec a ld hl, UnnamedText_56445 jp z, Func_56409 ld hl, UnnamedText_56414 call PrintText xor a ld [$cfcb], a ld [$d07d], a ld [$cc35], a call DisplayPartyMenu push af call GBPalWhiteOutWithDelay3 call Func_3dbe call LoadGBPal pop af ld hl, UnnamedText_56437 jp c, Func_56409 ld hl, Func_2171b ld b, BANK(Func_2171b) call Bankswitch ld hl, UnnamedText_5644a jp c, Func_56409 xor a ld [$cc2b], a ld a, [wWhichPokemon] ld hl, $d2b5 call GetPartyMonName ld hl, UnnamedText_56419 call PrintText ld a, $1 ld [W_DAYCARE_IN_USE], a ld a, $3 ld [$cf95], a call Func_3a68 xor a ld [$cf95], a call RemovePokemon ld a, [$cf91] call PlayCry ld hl, UnnamedText_5641e jp Func_56409 Func_562e1: ; 562e1 (15:62e1) xor a ld hl, W_DAYCAREMONNAME call GetPartyMonName ld a, $3 ld [$cc49], a call LoadMonData ld hl, Func_58f43 ld b, BANK(Func_58f43) call Bankswitch ld a, d cp $64 jr c, .asm_56315 ld d, $64 ld hl, CalcExperience ld b, BANK(CalcExperience) call Bankswitch ld hl, $da6d ld a, [H_NUMTOPRINT] ld [hli], a ld a, [$ff97] ld [hli], a ld a, [$ff98] ld [hl], a ld d, $64 .asm_56315 xor a ld [wTrainerEngageDistance], a ld hl, $da62 ld a, [hl] ld [wTrainerSpriteOffset], a cp d ld [hl], d ld hl, UnnamedText_56432 jr z, .asm_56333 ld a, [wTrainerSpriteOffset] ld b, a ld a, d sub b ld [wTrainerEngageDistance], a ld hl, UnnamedText_56423 .asm_56333 call PrintText ld a, [W_NUMINPARTY] cp $6 ld hl, UnnamedText_56440 jp z, .asm_56403 ld de, wTrainerFacingDirection xor a ld [de], a inc de ld [de], a ld hl, wTrainerScreenX ld a, $1 ld [hli], a ld [hl], $0 ld a, [wTrainerEngageDistance] inc a ld b, a ld c, $2 .asm_56357 push hl push de push bc ld a, $b call Predef pop bc pop de pop hl dec b jr nz, .asm_56357 ld hl, UnnamedText_56428 call PrintText ld a, $13 ld [$d125], a call DisplayTextBoxID call YesNoChoice ld hl, UnnamedText_56437 ld a, [wCurrentMenuItem] and a jp nz, .asm_56403 ld hl, wTrainerFacingDirection ld [$ff9f], a ld a, [hli] ld [$ffa0], a ld a, [hl] ld [$ffa1], a call HasEnoughMoney jr nc, .asm_56396 ld hl, UnnamedText_56454 jp .asm_56403 .asm_56396 xor a ld [W_DAYCARE_IN_USE], a ld hl, wTrainerEngageDistance ld [hli], a inc hl ld de, $d349 ld c, $3 ld a, $c call Predef ld a, $b2 call PlaySoundWaitForCurrent ld a, $13 ld [$d125], a call DisplayTextBoxID ld hl, UnnamedText_5644f call PrintText ld a, $2 ld [$cf95], a call Func_3a68 ld a, [W_DAYCAREMONDATA] ld [$cf91], a ld a, [W_NUMINPARTY] dec a push af ld bc, $002c push bc ld hl, W_PARTYMON1_MOVE1 call AddNTimes ld d, h ld e, l ld a, $1 ld [wHPBarMaxHP], a ld a, $3e call Predef pop bc pop af ld hl, W_PARTYMON1_HP call AddNTimes ld d, h ld e, l ld bc, $0021 add hl, bc ld a, [hli] ld [de], a inc de ld a, [hl] ld [de], a ld a, [$cf91] call PlayCry ld hl, UnnamedText_5642d jr Func_56409 .asm_56403 ld a, [wTrainerSpriteOffset] ld [$da62], a Func_56409: ; 56409 (15:6409) call PrintText jp TextScriptEnd UnnamedText_5640f: ; 5640f (15:640f) TX_FAR _UnnamedText_5640f db "@" UnnamedText_56414: ; 56414 (15:6414) TX_FAR _UnnamedText_56414 db "@" UnnamedText_56419: ; 56419 (15:6419) TX_FAR _UnnamedText_56419 db "@" UnnamedText_5641e: ; 5641e (15:641e) TX_FAR _UnnamedText_5641e db "@" UnnamedText_56423: ; 56423 (15:6423) TX_FAR _UnnamedText_56423 db "@" UnnamedText_56428: ; 56428 (15:6428) TX_FAR _UnnamedText_56428 db "@" UnnamedText_5642d: ; 5642d (15:642d) TX_FAR _UnnamedText_5642d db "@" UnnamedText_56432: ; 56432 (15:6432) TX_FAR _UnnamedText_56432 db "@" UnnamedText_56437: ; 56437 (15:6437) TX_FAR _UnnamedText_56437 ; 0x8c000 UnnamedText_5643b: ; 5643b (15:643b) TX_FAR _UnnamedText_5643b ; 0x8c013 db "@" UnnamedText_56440: ; 56440 (15:6440) TX_FAR _UnnamedText_56440 db "@" UnnamedText_56445: ; 56445 (15:6445) TX_FAR _UnnamedText_56445 db "@" UnnamedText_5644a: ; 5644a (15:644a) TX_FAR _UnnamedText_5644a db "@" UnnamedText_5644f: ; 5644f (15:644f) TX_FAR _UnnamedText_5644f db "@" UnnamedText_56454: ; 56454 (15:6454) TX_FAR _UnnamedText_56454 db "@" DayCareMObject: ; 0x56459 (size=26) db $a ; border tile db $2 ; warps db $7, $2, $4, $ff db $7, $3, $4, $ff db $0 ; signs db $1 ; people db SPRITE_GENTLEMAN, $3 + 4, $2 + 4, $ff, $d3, $1 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 Route12House_h: ; 0x56473 to 0x5647f (12 bytes) (id=189) db $08 ; tileset db ROUTE_12_HOUSE_HEIGHT, ROUTE_12_HOUSE_WIDTH ; dimensions (y, x) dw Route12HouseBlocks, Route12HouseTextPointers, Route12HouseScript ; blocks, texts, scripts db $00 ; connections dw Route12HouseObject ; objects Route12HouseScript: ; 5647f (15:647f) jp EnableAutoTextBoxDrawing Route12HouseTextPointers: ; 56482 (15:6482) dw Route12HouseText1 Route12HouseText1: ; 56484 (15:6484) db $08 ; asm ld a, [$d728] bit 5, a jr nz, asm_b4cad ; 0x5648a ld hl, UnnamedText_564c0 call PrintText call YesNoChoice ld a, [$cc26] and a jr nz, asm_a2d76 ; 0x56499 ld bc, (SUPER_ROD << 8) | 1 call GiveItem jr nc, .BagFull ld hl, $d728 set 5, [hl] ld hl, UnnamedText_564c5 jr asm_df984 ; 0x564ab .BagFull ld hl, UnnamedText_564d9 jr asm_df984 ; 0x564b0 asm_a2d76 ; 0x564b2 ld hl, UnnamedText_564cf jr asm_df984 ; 0x564b5 asm_b4cad ; 0x564b7 ld hl, UnnamedText_564d4 asm_df984 ; 0x564ba call PrintText jp TextScriptEnd UnnamedText_564c0: ; 564c0 (15:64c0) TX_FAR _UnnamedText_564c0 db "@" UnnamedText_564c5: ; 564c5 (15:64c5) TX_FAR _UnnamedText_564c5 ; 0x8ca00 db $0B TX_FAR _UnnamedText_564ca ; 0x8ca4f db "@" UnnamedText_564cf: ; 564cf (15:64cf) TX_FAR _UnnamedText_564cf db "@" UnnamedText_564d4: ; 564d4 (15:64d4) TX_FAR _UnnamedText_564d4 db "@" UnnamedText_564d9: ; 564d9 (15:64d9) TX_FAR _UnnamedText_564d9 db "@" Route12HouseObject: ; 0x564de (size=26) db $a ; border tile db $2 ; warps db $7, $2, $3, $ff db $7, $3, $3, $ff db $0 ; signs db $1 ; people db SPRITE_FISHER, $4 + 4, $2 + 4, $ff, $d3, $1 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 SilphCo8_h: ; 0x564f8 to 0x56504 (12 bytes) (id=213) db $16 ; tileset db SILPH_CO_8F_HEIGHT, SILPH_CO_8F_WIDTH ; dimensions (y, x) dw SilphCo8Blocks, SilphCo8TextPointers, SilphCo8Script ; blocks, texts, scripts db $00 ; connections dw SilphCo8Object ; objects SilphCo8Script: ; 56504 (15:6504) call SilphCo8Script_5651a call EnableAutoTextBoxDrawing ld hl, SilphCo8TrainerHeader0 ld de, SilphCo8ScriptPointers ld a, [W_SILPHCO8CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_SILPHCO8CURSCRIPT], a ret SilphCo8Script_5651a: ; 5651a (15:651a) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld hl, DataTable_5653e ; $653e call Func_56541 call Func_5656d ld a, [$d832] bit 0, a ret nz ld a, $5f ld [$d09f], a ld bc, $403 ld a, $17 jp Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) DataTable_5653e: ; 5653e (15:653e) db $04,$03,$FF Func_56541: ; 56541 (15:6541) push hl ld hl, $d73f ld a, [hli] ld b, a ld a, [hl] ld c, a xor a ld [$FF00+$e0], a pop hl .asm_5654d ld a, [hli] cp $ff jr z, .asm_56569 push hl ld hl, $ffe0 inc [hl] pop hl cp b jr z, .asm_5655e inc hl jr .asm_5654d .asm_5655e ld a, [hli] cp c jr nz, .asm_5654d ld hl, $d73f xor a ld [hli], a ld [hl], a ret .asm_56569 xor a ld [$FF00+$e0], a ret Func_5656d: ; 5656d (15:656d) ld a, [$FF00+$e0] and a ret z ld hl, $d832 set 0, [hl] ret SilphCo8ScriptPointers: ; 56577 (15:6577) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle SilphCo8TextPointers: ; 5657d (15:657d) dw SilphCo8Text1 dw SilphCo8Text2 dw SilphCo8Text3 dw SilphCo8Text4 SilphCo8TrainerHeaders: ; 56585 (15:6585) SilphCo8TrainerHeader0: ; 56585 (15:6585) db $2 ; flag's bit db ($4 << 4) ; trainer's view range dw $d831 ; flag's byte dw SilphCo8BattleText1 ; 0x65e6 TextBeforeBattle dw SilphCo8AfterBattleText1 ; 0x65f0 TextAfterBattle dw SilphCo8EndBattleText1 ; 0x65eb TextEndBattle dw SilphCo8EndBattleText1 ; 0x65eb TextEndBattle SilphCo8TrainerHeader1: ; 56591 (15:6591) db $3 ; flag's bit db ($4 << 4) ; trainer's view range dw $d831 ; flag's byte dw SilphCo8BattleText2 ; 0x65f5 TextBeforeBattle dw SilphCo8AfterBattleText2 ; 0x65ff TextAfterBattle dw SilphCo8EndBattleText2 ; 0x65fa TextEndBattle dw SilphCo8EndBattleText2 ; 0x65fa TextEndBattle SilphCo8TrainerHeader2: ; 5659d (15:659d) db $4 ; flag's bit db ($4 << 4) ; trainer's view range dw $d831 ; flag's byte dw SilphCo8BattleText3 ; 0x6604 TextBeforeBattle dw SilphCo8AfterBattleText3 ; 0x660e TextAfterBattle dw SilphCo8EndBattleText3 ; 0x6609 TextEndBattle dw SilphCo8EndBattleText3 ; 0x6609 TextEndBattle db $ff SilphCo8Text1: ; 565aa (15:65aa) db $08 ; asm ld a, [$d838] bit 7, a ld hl, UnnamedText_565c3 jr nz, asm_a468f ; 0x565b3 ld hl, UnnamedText_565be asm_a468f ; 0x565b8 call PrintText jp TextScriptEnd UnnamedText_565be: ; 565be (15:65be) TX_FAR _UnnamedText_565be db "@" UnnamedText_565c3: ; 565c3 (15:65c3) TX_FAR _UnnamedText_565c3 db "@" SilphCo8Text2: ; 565c8 (15:65c8) db $08 ; asm ld hl, SilphCo8TrainerHeader0 call TalkToTrainer jp TextScriptEnd SilphCo8Text3: ; 565d2 (15:65d2) db $08 ; asm ld hl, SilphCo8TrainerHeader1 call TalkToTrainer jp TextScriptEnd SilphCo8Text4: ; 565dc (15:65dc) db $08 ; asm ld hl, SilphCo8TrainerHeader2 call TalkToTrainer jp TextScriptEnd SilphCo8BattleText1: ; 565e6 (15:65e6) TX_FAR _SilphCo8BattleText1 db "@" SilphCo8EndBattleText1: ; 565eb (15:65eb) TX_FAR _SilphCo8EndBattleText1 db "@" SilphCo8AfterBattleText1: ; 565f0 (15:65f0) TX_FAR _SilphCo8AfterBattleText1 db "@" SilphCo8BattleText2: ; 565f5 (15:65f5) TX_FAR _SilphCo8BattleText2 db "@" SilphCo8EndBattleText2: ; 565fa (15:65fa) TX_FAR _SilphCo8EndBattleText2 db "@" SilphCo8AfterBattleText2: ; 565ff (15:65ff) TX_FAR _SilphCo8AfterBattleText2 db "@" SilphCo8BattleText3: ; 56604 (15:6604) TX_FAR _SilphCo8BattleText3 db "@" SilphCo8EndBattleText3: ; 56609 (15:6609) TX_FAR _SilphCo8EndBattleText3 db "@" SilphCo8AfterBattleText3: ; 5660e (15:660e) TX_FAR _SilphCo8AfterBattleText3 db "@" SilphCo8Object: ; 0x56613 (size=90) db $2e ; border tile db $7 ; warps db $0, $10, $1, SILPH_CO_9F db $0, $e, $0, SILPH_CO_7F db $0, $12, $0, SILPH_CO_ELEVATOR db $b, $3, $6, SILPH_CO_8F db $f, $3, $4, SILPH_CO_2F db $5, $b, $5, SILPH_CO_2F db $9, $b, $3, SILPH_CO_8F db $0 ; signs db $4 ; people db SPRITE_LAPRAS_GIVER, $2 + 4, $4 + 4, $ff, $ff, $1 ; person db SPRITE_ROCKET, $2 + 4, $13 + 4, $ff, $d2, $42, ROCKET + $C8, $23 ; trainer db SPRITE_OAK_AIDE, $2 + 4, $a + 4, $ff, $d0, $43, SCIENTIST + $C8, $9 ; trainer db SPRITE_ROCKET, $f + 4, $c + 4, $ff, $d3, $44, ROCKET + $C8, $24 ; trainer ; warp-to EVENT_DISP $d, $0, $10 ; SILPH_CO_9F EVENT_DISP $d, $0, $e ; SILPH_CO_7F EVENT_DISP $d, $0, $12 ; SILPH_CO_ELEVATOR EVENT_DISP $d, $b, $3 ; SILPH_CO_8F EVENT_DISP $d, $f, $3 ; SILPH_CO_2F EVENT_DISP $d, $5, $b ; SILPH_CO_2F EVENT_DISP $d, $9, $b ; SILPH_CO_8F SilphCo8Blocks: ; 5666d (15:666d) INCBIN "maps/silphco8.blk" DisplayDiploma: ; 566e2 (15:66e2) call SaveScreenTilesToBuffer2 call GBPalWhiteOutWithDelay3 call ClearScreen xor a ld [$cfcb], a ld hl, $d730 set 6, [hl] call DisableLCD ld hl, CircleTile ; $7d88 ld de, $9700 ld bc, $0010 ld a, BANK(CircleTile) call FarCopyData2 ld hl, wTileMap ld bc, $1012 ld a, $27 call Predef ld hl, DiplomaTextPointersAndCoords ; $6784 ld c, $5 .asm_56715 push bc ld a, [hli] ld e, a ld a, [hli] ld d, a ld a, [hli] push hl ld h, [hl] ld l, a call PlaceString pop hl inc hl pop bc dec c jr nz, .asm_56715 ; 0x56725 $ee FuncCoord 10, 4 ; $c3fa ld hl, Coord ld de, W_PLAYERNAME call PlaceString ld b, BANK(Func_44dd) ld hl, Func_44dd call Bankswitch ld hl, $c301 ld bc, $8028 .asm_5673e ld a, [hl] add $21 ld [hli], a inc hl ld a, b ld [hli], a inc hl dec c jr nz, .asm_5673e ; 0x56747 $f5 call EnableLCD ld b, BANK(Func_5ae6) ld hl, Func_5ae6 call Bankswitch ld b, $8 call GoPAL_SET call Delay3 call GBPalNormal ld a, $90 ld [$ff00+$48], a call WaitForTextScrollButtonPress ld hl, $d730 res 6, [hl] call GBPalWhiteOutWithDelay3 call Func_3dbe call Delay3 jp GBPalNormal Func_56777: ; 56777 (15:6777) ld hl, W_PLAYERNAME ld bc, $ff00 .asm_5677d ld a, [hli] cp $50 ret z dec c jr .asm_5677d ; 0x56782 $f9 DiplomaTextPointersAndCoords: ; 56784 (15:6784) dw DiplomaText dw $c3cd dw DiplomaPlayer dw $c3f3 dw DiplomaEmptyText dw $c3ff dw DiplomaCongrats dw $c41a dw DiplomaGameFreak dw $c4e9 DiplomaText: db $70,"Diploma",$70,"@" DiplomaPlayer: db "Player@" DiplomaEmptyText: db "@" DiplomaCongrats: db "Congrats! This" next "diploma certifies" next "that you have" next "completed your" next "#DEX.@" DiplomaGameFreak: db "GAME FREAK@" Func_567f9: ; 567f9 (15:67f9) ld hl, wSpriteStateData1 ld de, $4 ld a, [$cf13] ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call Func_56903 ld a, [hli] ld [$FF00+$eb], a inc hl ld a, [hl] ld [$FF00+$ec], a ld de, $fe add hl, de ld a, [hli] ld [$FF00+$ed], a ld a, [hl] ld [$FF00+$ee], a ret Func_56819: ; 56819 (15:6819) ld hl, wSpriteStateData1 ld de, $0004 ld a, [$cf13] ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call Func_56903 ld a, [hli] ld [$d130], a inc hl ld a, [hl] ld [$d131], a ld de, $00fe add hl, de ld a, [hli] ld [$d132], a ld a, [hl] ld [$d133], a ret Func_5683d: ; 5683d (15:683d) ld hl, wSpriteStateData1 ld de, $4 ld a, [$cf13] ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call Func_56903 ld a, [$FF00+$eb] ld [hli], a inc hl ld a, [$FF00+$ec] ld [hl], a ld de, $fe add hl, de ld a, [$FF00+$ed] ld [hli], a ld a, [$FF00+$ee] ld [hl], a ret Func_5685d: ; 5685d (15:685d) ld hl, wSpriteStateData1 ld de, $0004 ld a, [$cf13] ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call Func_56903 ld a, [$d130] ld [hli], a inc hl ld a, [$d131] ld [hl], a ld de, $00fe add hl, de ld a, [$d132] ld [hli], a ld a, [$d133] ld [hl], a ret TrainerWalkUpToPlayer: ; 56881 (15:6881) ld a, [$cf13] swap a ld [wTrainerSpriteOffset], a ; $cd3d call ReadTrainerScreenPosition ld a, [wTrainerFacingDirection] and a jr z, .facingDown cp $4 jr z, .facingUp cp $8 jr z, .facingLeft jr .facingRight .facingDown ld a, [wTrainerScreenY] ld b, a ld a, $3c ; (fixed) player screen Y pos call CalcDifference cp $10 ; trainer is right above player ret z swap a dec a ld c, a ; bc = steps yet to go to reach player xor a ld b, a ; a = direction to go to jr .writeWalkScript .facingUp ld a, [wTrainerScreenY] ld b, a ld a, $3c ; (fixed) player screen Y pos call CalcDifference cp $10 ; trainer is right below player ret z swap a dec a ld c, a ; bc = steps yet to go to reach player ld b, $0 ld a, $40 ; a = direction to go to jr .writeWalkScript .facingRight ld a, [wTrainerScreenX] ld b, a ld a, $40 ; (fixed) player screen X pos call CalcDifference cp $10 ; trainer is directly left of player ret z swap a dec a ld c, a ; bc = steps yet to go to reach player ld b, $0 ld a, $c0 ; a = direction to go to jr .writeWalkScript .facingLeft ld a, [$cd41] ld b, a ld a, $40 ; (fixed) player screen X pos call CalcDifference cp $10 ; trainer is directly right of player ret z swap a dec a ld c, a ; bc = steps yet to go to reach player ld b, $0 ld a, $80 ; a = direction to go to .writeWalkScript ld hl, $cc97 ld de, $cc97 call FillMemory ; write the necessary steps to reach player ld [hl], $ff ; write end of list sentinel ld a, [$cf13] ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c jp MoveSprite_ Func_56903: ; 56903 (15:6903) push de add hl, de ld a, [H_DOWNARROWBLINKCNT2] ; $FF00+$8c swap a ld d, $0 ld e, a add hl, de pop de ret ; tests if this trainer is in the right position to engage the player and do so if she is. CheckEngagePlayer: ; 5690f (15:690f) push hl push de ld a, [wTrainerSpriteOffset] ; $cd3d add $2 ld d, $0 ld e, a ld hl, wSpriteStateData1 add hl, de ld a, [hl] ; c1x2: sprite image index sub $ff jr nz, .spriteOnScreen ; test if sprite is on screen jp .noEngage .spriteOnScreen ld a, [wTrainerSpriteOffset] ; $cd3d add $9 ld d, $0 ld e, a ld hl, wSpriteStateData1 add hl, de ld a, [hl] ; c1x9: facing direction ld [$cd3f], a call ReadTrainerScreenPosition ld a, [$cd40] ; sprite screen Y pos ld b, a ld a, $3c cp b jr z, .linedUpY ld a, [$cd41] ; sprite screen X pos ld b, a ld a, $40 cp b jr z, .linedUpX xor a jp .noEngage .linedUpY ld a, [$cd41] ; sprite screen X pos ld b, a ld a, $40 ; (fixed) player X position call CalcDifference ; calc distance jr z, .noEngage ; exact same position as player call CheckSpriteCanSeePlayer jr c, .engage xor a jr .noEngage .linedUpX ld a, [$cd40] ; sprite screen Y pos ld b, a ld a, $3c ; (fixed) player Y position call CalcDifference ; calc distance jr z, .noEngage ; exact same position as player call CheckSpriteCanSeePlayer jr c, .engage xor a jp .noEngage .engage call CheckPlayerIsInFrontOfSprite ld a, [wTrainerSpriteOffset] ; $cd3d and a jr z, .noEngage ld hl, wFlags_0xcd60 set 0, [hl] call EngageMapTrainer ld a, $ff .noEngage: ; 56988 (15:6988) ld [wTrainerSpriteOffset], a ; $cd3d pop de pop hl ret ; reads trainer's Y position to $cd40 and X position to $cd41 ReadTrainerScreenPosition: ; 5698e (15:698e) ld a, [wTrainerSpriteOffset] ; $cd3d add $4 ld d, $0 ld e, a ld hl, wSpriteStateData1 add hl, de ld a, [hl] ld [$cd40], a ld a, [wTrainerSpriteOffset] ; $cd3d add $6 ld d, $0 ld e, a ld hl, wSpriteStateData1 add hl, de ld a, [hl] ld [$cd41], a ret ; checks if the sprite is properly lined up with the player with respect to the direction it's looking. Also checks the distance between player and sprite ; note that this does not necessarily mean the sprite is seeing the player, he could be behind it's back ; a: distance player to sprite CheckSpriteCanSeePlayer: ; 569af (15:69af) ld b, a ld a, [wTrainerEngageDistance] ; sprite line of sight (engage distance) cp b jr nc, .checkIfLinedUp jr .notInLine ; player too far away .checkIfLinedUp ld a, [$cd3f] ; sprite facing direction cp $0 ; down jr z, .checkXCoord cp $4 ; up jr z, .checkXCoord cp $8 ; left jr z, .checkYCoord cp $c ; right jr z, .checkYCoord jr .notInLine .checkXCoord ld a, [$cd41] ; sprite screen X position ld b, a cp $40 jr z, .inLine jr .notInLine .checkYCoord ld a, [$cd40] ; sprite screen Y position ld b, a cp $3c jr nz, .notInLine .inLine scf ret .notInLine and a ret ; tests if the player is in front of the sprite (rather than behind it) CheckPlayerIsInFrontOfSprite: ; 569e3 (15:69e3) ld a, [W_CURMAP] ; $d35e cp POWER_PLANT jp z, .engage ; XXX not sure why bypass this for power plant (maybe to get voltorb fake items to work?) ld a, [wTrainerSpriteOffset] ; $cd3d add $4 ld d, $0 ld e, a ld hl, wSpriteStateData1 add hl, de ld a, [hl] ; c1x4 (sprite screen Y pos) cp $fc jr nz, .notOnTopmostTile ; special case if sprite is on topmost tile (Y = $fc (-4)), make it come down a block ld a, $c .notOnTopmostTile ld [$cd40], a ld a, [wTrainerSpriteOffset] ; $cd3d add $6 ld d, $0 ld e, a ld hl, wSpriteStateData1 add hl, de ld a, [hl] ; c1x6 (sprite screen X pos) ld [$cd41], a ld a, [$cd3f] ; facing direction cp $0 jr nz, .notFacingDown ld a, [$cd40] ; sprite screen Y pos cp $3c jr c, .engage ; sprite above player jr .noEngage ; sprite below player .notFacingDown cp $4 jr nz, .notFacingUp ld a, [$cd40] ; sprite screen Y pos cp $3c jr nc, .engage ; sprite below player jr .noEngage ; sprite above player .notFacingUp cp $8 jr nz, .notFacingLeft ld a, [$cd41] ; sprite screen X pos cp $40 jr nc, .engage ; sprite right of player jr .noEngage ; sprite left of player .notFacingLeft ld a, [$cd41] ; sprite screen X pos cp $40 jr nc, .noEngage ; sprite right of player .engage ld a, $ff jr .done .noEngage xor a .done ld [wTrainerSpriteOffset], a ; $cd3d ret SECTION "bank16",ROMX,BANK[$16] Route6_h: ; 0x58000 to 0x58022 (34 bytes) (id=17) db $00 ; tileset db ROUTE_6_HEIGHT, ROUTE_6_WIDTH ; dimensions (y, x) dw Route6Blocks, Route6TextPointers, Route6Script ; blocks, texts, scripts db NORTH | SOUTH ; connections NORTH_MAP_CONNECTION SAFFRON_CITY, SAFFRON_CITY_WIDTH, SAFFRON_CITY_HEIGHT, -3, 2, SAFFRON_CITY_WIDTH - 4, SaffronCityBlocks SOUTH_MAP_CONNECTION VERMILION_CITY, VERMILION_CITY_WIDTH, -3, 2, VERMILION_CITY_WIDTH - 4, VermilionCityBlocks, ROUTE_6_WIDTH, ROUTE_6_HEIGHT dw Route6Object ; objects Route6Object: ; 0x58022 (size=87) db $f ; border tile db $4 ; warps db $1, $9, $2, ROUTE_6_GATE db $1, $a, $2, ROUTE_6_GATE db $7, $a, $0, ROUTE_6_GATE db $d, $11, $0, PATH_ENTRANCE_ROUTE_6 db $1 ; signs db $f, $13, $7 ; Route6Text7 db $6 ; people db SPRITE_BLACK_HAIR_BOY_1, $15 + 4, $a + 4, $ff, $d3, $41, JR__TRAINER_M + $C8, $4 ; trainer db SPRITE_LASS, $15 + 4, $b + 4, $ff, $d2, $42, JR__TRAINER_F + $C8, $2 ; trainer db SPRITE_BUG_CATCHER, $f + 4, $0 + 4, $ff, $d3, $43, BUG_CATCHER + $C8, $a ; trainer db SPRITE_BLACK_HAIR_BOY_1, $1f + 4, $b + 4, $ff, $d2, $44, JR__TRAINER_M + $C8, $5 ; trainer db SPRITE_LASS, $1e + 4, $b + 4, $ff, $d2, $45, JR__TRAINER_F + $C8, $3 ; trainer db SPRITE_BUG_CATCHER, $1a + 4, $13 + 4, $ff, $d2, $46, BUG_CATCHER + $C8, $b ; trainer ; warp-to EVENT_DISP $a, $1, $9 ; ROUTE_6_GATE EVENT_DISP $a, $1, $a ; ROUTE_6_GATE EVENT_DISP $a, $7, $a ; ROUTE_6_GATE EVENT_DISP $a, $d, $11 ; PATH_ENTRANCE_ROUTE_6 Route6Blocks: ; 58079 (16:4079) INCBIN "maps/route6.blk" Route8_h: ; 0x5812d to 0x5814f (34 bytes) (id=19) db $00 ; tileset db ROUTE_8_HEIGHT, ROUTE_8_WIDTH ; dimensions (y, x) dw Route8Blocks, Route8TextPointers, Route8Script ; blocks, texts, scripts db WEST | EAST ; connections WEST_MAP_CONNECTION SAFFRON_CITY, SAFFRON_CITY_WIDTH, -3, 1, SAFFRON_CITY_HEIGHT - 3, SaffronCityBlocks, ROUTE_8_WIDTH EAST_MAP_CONNECTION LAVENDER_TOWN, LAVENDER_TOWN_WIDTH, 0, 0, LAVENDER_TOWN_HEIGHT, LavenderTownBlocks, ROUTE_8_WIDTH dw Route8Object ; objects Route8Object: ; 0x5814f (size=119) db $2c ; border tile db $5 ; warps db $9, $1, $0, ROUTE_8_GATE db $a, $1, $1, ROUTE_8_GATE db $9, $8, $2, ROUTE_8_GATE db $a, $8, $3, ROUTE_8_GATE db $3, $d, $0, PATH_ENTRANCE_ROUTE_8 db $1 ; signs db $3, $11, $a ; Route8Text10 db $9 ; people db SPRITE_BLACK_HAIR_BOY_2, $5 + 4, $8 + 4, $ff, $d3, $41, SUPER_NERD + $C8, $3 ; trainer db SPRITE_GAMBLER, $9 + 4, $d + 4, $ff, $d1, $42, GAMBLER + $C8, $5 ; trainer db SPRITE_BLACK_HAIR_BOY_2, $6 + 4, $2a + 4, $ff, $d1, $43, SUPER_NERD + $C8, $4 ; trainer db SPRITE_LASS, $3 + 4, $1a + 4, $ff, $d2, $44, LASS + $C8, $d ; trainer db SPRITE_BLACK_HAIR_BOY_2, $4 + 4, $1a + 4, $ff, $d3, $45, SUPER_NERD + $C8, $5 ; trainer db SPRITE_LASS, $5 + 4, $1a + 4, $ff, $d2, $46, LASS + $C8, $e ; trainer db SPRITE_LASS, $6 + 4, $1a + 4, $ff, $d3, $47, LASS + $C8, $f ; trainer db SPRITE_GAMBLER, $d + 4, $2e + 4, $ff, $d0, $48, GAMBLER + $C8, $7 ; trainer db SPRITE_LASS, $c + 4, $33 + 4, $ff, $d2, $49, LASS + $C8, $10 ; trainer ; warp-to EVENT_DISP $1e, $9, $1 ; ROUTE_8_GATE EVENT_DISP $1e, $a, $1 ; ROUTE_8_GATE EVENT_DISP $1e, $9, $8 ; ROUTE_8_GATE EVENT_DISP $1e, $a, $8 ; ROUTE_8_GATE EVENT_DISP $1e, $3, $d ; PATH_ENTRANCE_ROUTE_8 Route8Blocks: ; 581c6 (16:41c6) INCBIN "maps/route8.blk" Route10_h: ; 0x582d4 to 0x582f6 (34 bytes) (id=21) db $00 ; tileset db ROUTE_10_HEIGHT, ROUTE_10_WIDTH ; dimensions (y, x) dw Route10Blocks, Route10TextPointers, Route10Script ; blocks, texts, scripts db SOUTH | WEST ; connections SOUTH_MAP_CONNECTION LAVENDER_TOWN, LAVENDER_TOWN_WIDTH, 0, 0, LAVENDER_TOWN_WIDTH, LavenderTownBlocks, ROUTE_10_WIDTH, ROUTE_10_HEIGHT WEST_MAP_CONNECTION ROUTE_9, ROUTE_9_WIDTH, 0, 0, ROUTE_9_HEIGHT, Route9Blocks, ROUTE_10_WIDTH dw Route10Object ; objects Route10Object: ; 0x582f6 (size=96) db $2c ; border tile db $4 ; warps db $13, $b, $0, ROCK_TUNNEL_POKECENTER db $11, $8, $0, ROCK_TUNNEL_1 db $35, $8, $2, ROCK_TUNNEL_1 db $27, $6, $0, POWER_PLANT db $4 ; signs db $13, $7, $7 ; Route10Text7 db $13, $c, $8 ; PokeCenterSignText db $37, $9, $9 ; Route10Text9 db $29, $5, $a ; Route10Text10 db $6 ; people db SPRITE_BLACK_HAIR_BOY_2, $2c + 4, $a + 4, $ff, $d2, $41, POKEMANIAC + $C8, $1 ; trainer db SPRITE_HIKER, $39 + 4, $3 + 4, $ff, $d1, $42, HIKER + $C8, $7 ; trainer db SPRITE_BLACK_HAIR_BOY_2, $40 + 4, $e + 4, $ff, $d2, $43, POKEMANIAC + $C8, $2 ; trainer db SPRITE_LASS, $19 + 4, $7 + 4, $ff, $d2, $44, JR__TRAINER_F + $C8, $7 ; trainer db SPRITE_HIKER, $3d + 4, $3 + 4, $ff, $d0, $45, HIKER + $C8, $8 ; trainer db SPRITE_LASS, $36 + 4, $7 + 4, $ff, $d0, $46, JR__TRAINER_F + $C8, $8 ; trainer ; warp-to EVENT_DISP $a, $13, $b ; ROCK_TUNNEL_POKECENTER EVENT_DISP $a, $11, $8 ; ROCK_TUNNEL_1 EVENT_DISP $a, $35, $8 ; ROCK_TUNNEL_1 EVENT_DISP $a, $27, $6 ; POWER_PLANT Route10Blocks: ; 58356 (16:4356) INCBIN "maps/route10.blk" Route11_h: ; 0x584be to 0x584e0 (34 bytes) (id=22) db $00 ; tileset db ROUTE_11_HEIGHT, ROUTE_11_WIDTH ; dimensions (y, x) dw Route11Blocks, Route11TextPointers, Route11Script ; blocks, texts, scripts db WEST | EAST ; connections WEST_MAP_CONNECTION VERMILION_CITY, VERMILION_CITY_WIDTH, -3, 1, VERMILION_CITY_HEIGHT - 3, VermilionCityBlocks, ROUTE_11_WIDTH EAST_MAP_CONNECTION ROUTE_12, ROUTE_12_WIDTH, -3, 24, ROUTE_12_HEIGHT - 39, Route12Blocks, ROUTE_11_WIDTH dw Route11Object ; objects Route11Object: ; 0x584e0 (size=127) db $f ; border tile db $5 ; warps db $8, $31, $0, ROUTE_11_GATE_1F db $9, $31, $1, ROUTE_11_GATE_1F db $8, $3a, $2, ROUTE_11_GATE_1F db $9, $3a, $3, ROUTE_11_GATE_1F db $5, $4, $0, DIGLETTS_CAVE_ENTRANCE db $1 ; signs db $5, $1, $b ; Route11Text11 db $a ; people db SPRITE_GAMBLER, $e + 4, $a + 4, $ff, $d0, $41, GAMBLER + $C8, $1 ; trainer db SPRITE_GAMBLER, $9 + 4, $1a + 4, $ff, $d0, $42, GAMBLER + $C8, $2 ; trainer db SPRITE_BUG_CATCHER, $5 + 4, $d + 4, $ff, $d2, $43, YOUNGSTER + $C8, $9 ; trainer db SPRITE_BLACK_HAIR_BOY_2, $b + 4, $24 + 4, $ff, $d0, $44, ENGINEER + $C8, $2 ; trainer db SPRITE_BUG_CATCHER, $4 + 4, $16 + 4, $ff, $d1, $45, YOUNGSTER + $C8, $a ; trainer db SPRITE_GAMBLER, $7 + 4, $2d + 4, $ff, $d0, $46, GAMBLER + $C8, $3 ; trainer db SPRITE_GAMBLER, $3 + 4, $21 + 4, $ff, $d1, $47, GAMBLER + $C8, $4 ; trainer db SPRITE_BUG_CATCHER, $5 + 4, $2b + 4, $ff, $d3, $48, YOUNGSTER + $C8, $b ; trainer db SPRITE_BLACK_HAIR_BOY_2, $10 + 4, $2d + 4, $ff, $d2, $49, ENGINEER + $C8, $3 ; trainer db SPRITE_BUG_CATCHER, $c + 4, $16 + 4, $ff, $d1, $4a, YOUNGSTER + $C8, $c ; trainer ; warp-to EVENT_DISP $1e, $8, $31 ; ROUTE_11_GATE_1F EVENT_DISP $1e, $9, $31 ; ROUTE_11_GATE_1F EVENT_DISP $1e, $8, $3a ; ROUTE_11_GATE_1F EVENT_DISP $1e, $9, $3a ; ROUTE_11_GATE_1F EVENT_DISP $1e, $5, $4 ; DIGLETTS_CAVE_ENTRANCE Route11Blocks: ; 5855f (16:455f) INCBIN "maps/route11.blk" Route12_h: ; 0x5866d to 0x5869a (45 bytes) (id=23) db $00 ; tileset db ROUTE_12_HEIGHT, ROUTE_12_WIDTH ; dimensions (y, x) dw Route12Blocks, Route12TextPointers, Route12Script ; blocks, texts, scripts db NORTH | SOUTH | WEST ; connections NORTH_MAP_CONNECTION LAVENDER_TOWN, LAVENDER_TOWN_WIDTH, LAVENDER_TOWN_HEIGHT, 0, 0, LAVENDER_TOWN_WIDTH, LavenderTownBlocks SOUTH_MAP_CONNECTION ROUTE_13, ROUTE_13_WIDTH, -3, 17, ROUTE_13_WIDTH - 17, Route13Blocks, ROUTE_12_WIDTH, ROUTE_12_HEIGHT WEST_MAP_CONNECTION ROUTE_11, ROUTE_11_WIDTH, 27, 0, ROUTE_11_HEIGHT, Route11Blocks, ROUTE_12_WIDTH dw Route12Object ; objects Route12Object: ; 0x5869a (size=118) db $43 ; border tile db $4 ; warps db $f, $a, $0, ROUTE_12_GATE db $f, $b, $1, ROUTE_12_GATE db $15, $a, $2, ROUTE_12_GATE db $4d, $b, $0, ROUTE_12_HOUSE db $2 ; signs db $d, $d, $b ; Route12Text11 db $3f, $b, $c ; Route12Text12 db $a ; people db SPRITE_SNORLAX, $3e + 4, $a + 4, $ff, $d0, $1 ; person db SPRITE_FISHER2, $1f + 4, $e + 4, $ff, $d2, $42, FISHER + $C8, $3 ; trainer db SPRITE_FISHER2, $27 + 4, $5 + 4, $ff, $d1, $43, FISHER + $C8, $4 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $5c + 4, $b + 4, $ff, $d2, $44, JR__TRAINER_M + $C8, $9 ; trainer db SPRITE_BLACK_HAIR_BOY_2, $4c + 4, $e + 4, $ff, $d1, $45, ROCKER + $C8, $2 ; trainer db SPRITE_FISHER2, $28 + 4, $c + 4, $ff, $d2, $46, FISHER + $C8, $5 ; trainer db SPRITE_FISHER2, $34 + 4, $9 + 4, $ff, $d3, $47, FISHER + $C8, $6 ; trainer db SPRITE_FISHER2, $57 + 4, $6 + 4, $ff, $d0, $48, FISHER + $C8, $b ; trainer db SPRITE_BALL, $23 + 4, $e + 4, $ff, $ff, $89, TM_16 ; item db SPRITE_BALL, $59 + 4, $5 + 4, $ff, $ff, $8a, IRON ; item ; warp-to EVENT_DISP $a, $f, $a ; ROUTE_12_GATE EVENT_DISP $a, $f, $b ; ROUTE_12_GATE EVENT_DISP $a, $15, $a ; ROUTE_12_GATE EVENT_DISP $a, $4d, $b ; ROUTE_12_HOUSE Route12Blocks: ; 58710 (16:4710) INCBIN "maps/route12.blk" Route15_h: ; 0x5892c to 0x5894e (34 bytes) (id=26) db $00 ; tileset db ROUTE_15_HEIGHT, ROUTE_15_WIDTH ; dimensions (y, x) dw Route15Blocks, Route15TextPointers, Route15Script ; blocks, texts, scripts db WEST | EAST ; connections WEST_MAP_CONNECTION FUCHSIA_CITY, FUCHSIA_CITY_WIDTH, -3, 1, FUCHSIA_CITY_HEIGHT - 3, FuchsiaCityBlocks, ROUTE_15_WIDTH EAST_MAP_CONNECTION ROUTE_14, ROUTE_14_WIDTH, -3, 15, ROUTE_14_HEIGHT - 15, Route14Blocks, ROUTE_15_WIDTH dw Route15Object ; objects Route15Object: ; 0x5894e (size=126) db $43 ; border tile db $4 ; warps db $8, $7, $0, ROUTE_15_GATE_1F db $9, $7, $1, ROUTE_15_GATE_1F db $8, $e, $2, ROUTE_15_GATE_1F db $9, $e, $3, ROUTE_15_GATE_1F db $1 ; signs db $9, $27, $c ; Route15Text12 db $b ; people db SPRITE_LASS, $b + 4, $29 + 4, $ff, $d0, $41, JR__TRAINER_F + $C8, $14 ; trainer db SPRITE_LASS, $a + 4, $35 + 4, $ff, $d2, $42, JR__TRAINER_F + $C8, $15 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $d + 4, $1f + 4, $ff, $d1, $43, BIRD_KEEPER + $C8, $6 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $d + 4, $23 + 4, $ff, $d1, $44, BIRD_KEEPER + $C8, $7 ; trainer db SPRITE_FOULARD_WOMAN, $b + 4, $35 + 4, $ff, $d0, $45, BEAUTY + $C8, $9 ; trainer db SPRITE_FOULARD_WOMAN, $a + 4, $29 + 4, $ff, $d3, $46, BEAUTY + $C8, $a ; trainer db SPRITE_BIKER, $a + 4, $30 + 4, $ff, $d0, $47, BIKER + $C8, $3 ; trainer db SPRITE_BIKER, $a + 4, $2e + 4, $ff, $d0, $48, BIKER + $C8, $4 ; trainer db SPRITE_LASS, $5 + 4, $25 + 4, $ff, $d3, $49, JR__TRAINER_F + $C8, $16 ; trainer db SPRITE_LASS, $d + 4, $12 + 4, $ff, $d1, $4a, JR__TRAINER_F + $C8, $17 ; trainer db SPRITE_BALL, $5 + 4, $12 + 4, $ff, $ff, $8b, TM_20 ; item ; warp-to EVENT_DISP $1e, $8, $7 ; ROUTE_15_GATE_1F EVENT_DISP $1e, $9, $7 ; ROUTE_15_GATE_1F EVENT_DISP $1e, $8, $e ; ROUTE_15_GATE_1F EVENT_DISP $1e, $9, $e ; ROUTE_15_GATE_1F Route15Blocks: ; 589cc (16:49cc) INCBIN "maps/route15.blk" Route16_h: ; 0x58ada to 0x58afc (34 bytes) (id=27) db $00 ; tileset db ROUTE_16_HEIGHT, ROUTE_16_WIDTH ; dimensions (y, x) dw Route16Blocks, Route16TextPointers, Route16Script ; blocks, texts, scripts db SOUTH | EAST ; connections SOUTH_MAP_CONNECTION ROUTE_17, ROUTE_17_WIDTH, 0, 0, ROUTE_17_WIDTH, Route17Blocks, ROUTE_16_WIDTH, ROUTE_16_HEIGHT EAST_MAP_CONNECTION CELADON_CITY, CELADON_CITY_WIDTH, -3, 1, CELADON_CITY_HEIGHT - 3, CeladonCityBlocks, ROUTE_16_WIDTH dw Route16Object ; objects Route16Object: ; 0x58afc (size=136) db $f ; border tile db $9 ; warps db $a, $11, $0, ROUTE_16_GATE_1F db $b, $11, $1, ROUTE_16_GATE_1F db $a, $18, $2, ROUTE_16_GATE_1F db $b, $18, $3, ROUTE_16_GATE_1F db $4, $11, $4, ROUTE_16_GATE_1F db $5, $11, $5, ROUTE_16_GATE_1F db $4, $18, $6, ROUTE_16_GATE_1F db $5, $18, $7, ROUTE_16_GATE_1F db $5, $7, $0, ROUTE_16_HOUSE db $2 ; signs db $b, $1b, $8 ; Route16Text8 db $11, $5, $9 ; Route16Text9 db $7 ; people db SPRITE_BIKER, $c + 4, $11 + 4, $ff, $d2, $41, BIKER + $C8, $5 ; trainer db SPRITE_BIKER, $d + 4, $e + 4, $ff, $d3, $42, CUE_BALL + $C8, $1 ; trainer db SPRITE_BIKER, $c + 4, $b + 4, $ff, $d1, $43, CUE_BALL + $C8, $2 ; trainer db SPRITE_BIKER, $b + 4, $9 + 4, $ff, $d2, $44, BIKER + $C8, $6 ; trainer db SPRITE_BIKER, $a + 4, $6 + 4, $ff, $d3, $45, CUE_BALL + $C8, $3 ; trainer db SPRITE_BIKER, $c + 4, $3 + 4, $ff, $d3, $46, BIKER + $C8, $7 ; trainer db SPRITE_SNORLAX, $a + 4, $1a + 4, $ff, $d0, $7 ; person ; warp-to EVENT_DISP $14, $a, $11 ; ROUTE_16_GATE_1F EVENT_DISP $14, $b, $11 ; ROUTE_16_GATE_1F EVENT_DISP $14, $a, $18 ; ROUTE_16_GATE_1F EVENT_DISP $14, $b, $18 ; ROUTE_16_GATE_1F EVENT_DISP $14, $4, $11 ; ROUTE_16_GATE_1F EVENT_DISP $14, $5, $11 ; ROUTE_16_GATE_1F EVENT_DISP $14, $4, $18 ; ROUTE_16_GATE_1F EVENT_DISP $14, $5, $18 ; ROUTE_16_GATE_1F EVENT_DISP $14, $5, $7 ; ROUTE_16_HOUSE Route16Blocks: ; 58b84 (16:4b84) INCBIN "maps/route16.blk" Route18_h: ; 0x58c38 to 0x58c5a (34 bytes) (id=29) db $00 ; tileset db ROUTE_18_HEIGHT, ROUTE_18_WIDTH ; dimensions (y, x) dw Route18Blocks, Route18TextPointers, Route18Script ; blocks, texts, scripts db NORTH | EAST ; connections NORTH_MAP_CONNECTION ROUTE_17, ROUTE_17_WIDTH, ROUTE_17_HEIGHT, 0, 0, ROUTE_17_WIDTH, Route17Blocks EAST_MAP_CONNECTION FUCHSIA_CITY, FUCHSIA_CITY_WIDTH, -3, 1, FUCHSIA_CITY_HEIGHT - 3, FuchsiaCityBlocks, ROUTE_18_WIDTH dw Route18Object ; objects Route18Object: ; 0x58c5a (size=66) db $43 ; border tile db $4 ; warps db $8, $21, $0, ROUTE_18_GATE_1F db $9, $21, $1, ROUTE_18_GATE_1F db $8, $28, $2, ROUTE_18_GATE_1F db $9, $28, $3, ROUTE_18_GATE_1F db $2 ; signs db $7, $2b, $4 ; Route18Text4 db $5, $21, $5 ; Route18Text5 db $3 ; people db SPRITE_BLACK_HAIR_BOY_1, $b + 4, $24 + 4, $ff, $d3, $41, BIRD_KEEPER + $C8, $8 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $f + 4, $28 + 4, $ff, $d2, $42, BIRD_KEEPER + $C8, $9 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $d + 4, $2a + 4, $ff, $d2, $43, BIRD_KEEPER + $C8, $a ; trainer ; warp-to EVENT_DISP $19, $8, $21 ; ROUTE_18_GATE_1F EVENT_DISP $19, $9, $21 ; ROUTE_18_GATE_1F EVENT_DISP $19, $8, $28 ; ROUTE_18_GATE_1F EVENT_DISP $19, $9, $28 ; ROUTE_18_GATE_1F Route18Blocks: ; 58c9c (16:4c9c) INCBIN "maps/route18.blk" INCBIN "maps/unusedblocks58d7d.blk" Func_58d99: ; 58d99 (16:4d99) ld a, [W_ISINBATTLE] ; $d057 dec a jr nz, .asm_58dbe ld a, [W_CURMAP] ; $d35e cp POKEMONTOWER_3 jr c, .asm_58daa cp LAVENDER_HOUSE_1 jr c, .asm_58dd8 .asm_58daa ld a, [W_ENEMYMONID] call PlayCry ld hl, UnnamedText_58e3b ; $4e3b ld a, [W_MOVEMISSED] ; $d05f and a jr z, .asm_58dbc ld hl, UnnamedText_58e40 ; $4e40 .asm_58dbc jr .asm_58dc9 .asm_58dbe call Func_58e29 ld c, $14 call DelayFrames ld hl, UnnamedText_58e4a ; $4e4a .asm_58dc9 push hl ld hl, Func_3a849 ld b, BANK(Func_3a849) call Bankswitch pop hl call PrintText jr asm_58e3a .asm_58dd8 ld b, $48 call IsItemInBag ld a, [W_ENEMYMONID] ld [$cf91], a cp $91 jr z, .asm_58e03 ld a, b and a jr z, .asm_58df5 ld hl, Func_3eb01 ld b, BANK(Func_3eb01) call Bankswitch jr .asm_58daa .asm_58df5 ld hl, UnnamedText_58e45 ; $4e45 call PrintText ld hl, UnnamedText_58e54 ; $4e54 call PrintText jr asm_58e3a .asm_58e03 ld a, b and a jr z, .asm_58df5 ld hl, UnnamedText_58e45 ; $4e45 call PrintText ld hl, UnnamedText_58e4f ; $4e4f call PrintText ld hl, Func_3eb01 ld b, BANK(Func_3eb01) call Bankswitch ld hl, Func_708ca ld b, BANK(Func_708ca) call Bankswitch ld hl, UnnamedText_58e3b ; $4e3b call PrintText Func_58e29: ; 58e29 (16:4e29) xor a ld [$c0f1], a ld a, $80 ld [$c0f2], a ld a, $e9 call PlaySound jp WaitForSoundToFinish asm_58e3a: ; 58e3a (16:4e3a) ret UnnamedText_58e3b: ; 58e3b (16:4e3b) TX_FAR _UnnamedText_58e3b db "@" UnnamedText_58e40: ; 58e40 (16:4e40) TX_FAR _UnnamedText_58e40 db "@" UnnamedText_58e45: ; 58e45 (16:4e45) TX_FAR _UnnamedText_58e45 db "@" UnnamedText_58e4a: ; 58e4a (16:4e4a) TX_FAR _UnnamedText_58e4a db "@" UnnamedText_58e4f: ; 58e4f (16:4e4f) TX_FAR _UnnamedText_58e4f db "@" UnnamedText_58e54: ; 58e54 (16:4e54) TX_FAR _UnnamedText_58e54 db "@" Func_58e59: ; 58e59 (16:4e59) ld hl, W_ENEMYMONCURHP ; $cfe6 ld a, [hli] or [hl] ld hl, UnnamedText_58eae ; $4eae jr z, .asm_58eab xor a ld [H_NUMTOPRINT], a ; $FF00+$96 (aliases: H_MULTIPLICAND) ld hl, W_ENEMYMONCURHP ; $cfe6 ld a, [hli] ld [$cce3], a ld [$FF00+$97], a ld a, [hl] ld [$cce4], a ld [$FF00+$98], a ld a, $19 ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) call Multiply ld hl, W_ENEMYMONMAXHP ; $cff4 ld a, [hli] ld b, [hl] srl a rr b srl a rr b ld a, b ld b, $4 ld [H_REMAINDER], a ; $FF00+$99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) call Divide ld a, [$FF00+$98] ld hl, UnnamedText_58eae ; $4eae cp $46 jr nc, .asm_58eab ld hl, UnnamedText_58eb5 ; $4eb5 cp $28 jr nc, .asm_58eab ld hl, UnnamedText_58ebc ; $4ebc cp $a jr nc, .asm_58eab ld hl, UnnamedText_58ec3 ; $4ec3 .asm_58eab jp PrintText UnnamedText_58eae: ; 58eae (16:4eae) TX_FAR _UnnamedText_58eae db $08 ; asm jr Func_58ec8 UnnamedText_58eb5: ; 58eb5 (16:4eb5) TX_FAR _UnnamedText_58eb5 db $08 ; asm jr Func_58ec8 UnnamedText_58ebc: ; 58ebc (16:4ebc) TX_FAR _UnnamedText_58ebc db $08 ; asm jr Func_58ec8 UnnamedText_58ec3: ; 58ec3 (16:4ec3) TX_FAR _UnnamedText_58ec3 db $08 ; asm Func_58ec8 ld hl, UnnamedText_58ecc ; $4ecc ret UnnamedText_58ecc: ; 58ecc (16:4ecc) TX_FAR _UnnamedText_58ecc db "@" Func_58ed1: ; 58ed1 (16:4ed1) ld hl, UnnamedText_58ed7 ; $4ed7 jp PrintText UnnamedText_58ed7: ; 58ed7 (16:4ed7) TX_FAR _UnnamedText_58ed7 db $08 ; asm push de push bc ld hl, $cfe7 ld de, $cce4 ld b, [hl] dec hl ld a, [de] sub b ld [$ff98], a dec de ld b, [hl] ld a, [de] sbc b ld [$ff97], a ld a, $19 ld [H_POWEROFTEN], a call Multiply ld hl, W_ENEMYMONMAXHP ld a, [hli] ld b, [hl] srl a rr b srl a rr b ld a, b ld b, $4 ld [H_POWEROFTEN], a call Divide pop bc pop de ld a, [$ff98] ld hl, UnnamedText_58f25 and a ret z ld hl, UnnamedText_58f3e cp $1e ret c ld hl, UnnamedText_58f2c cp $46 ret c ld hl, UnnamedText_58f33 ret UnnamedText_58f25: ; 58f25 (16:4f25) TX_FAR _UnnamedText_58f25 db $08 ; asm jr Func_58f3a UnnamedText_58f2c: ; 58f2c (16:4f2c) TX_FAR _UnnamedText_58f2c db $08 ; asm jr Func_58f3a UnnamedText_58f33: ; 58f33 (16:4f33) TX_FAR _UnnamedText_58f33 db $08 ; asm jr Func_58f3a Func_58f3a: ; 58f3a (16:4f3a) ld hl, UnnamedText_58f3e ret UnnamedText_58f3e: ; 58f3e (16:4f3e) TX_FAR _UnnamedText_58f3e db "@" Func_58f43: ; 58f43 (16:4f43) ld a, [$cf98] ld [$d0b5], a call GetMonHeader ld d, $1 .asm_58f4e inc d call CalcExperience push hl ld hl, $cfa8 ld a, [$FF00+$98] ld c, a ld a, [hld] sub c ld a, [$FF00+$97] ld c, a ld a, [hld] sbc c ld a, [H_NUMTOPRINT] ; $FF00+$96 (aliases: H_MULTIPLICAND) ld c, a ld a, [hl] sbc c pop hl jr nc, .asm_58f4e dec d ret ; calculates the amount of experience needed for level d CalcExperience: ; 58f6a (16:4f6a) ld a, [W_MONHGROWTHRATE] add a add a ld c, a ld b, $0 ld hl, GrowthRateTable add hl, bc call CalcDSquared ld a, d ld [H_MULTIPLIER], a ; $FF00+$99 call Multiply ld a, [hl] and $f0 swap a ld [H_MULTIPLIER], a ; $FF00+$99 call Multiply ld a, [hli] and $f ld [H_DIVISOR], a ; $FF00+$99 ld b, $4 call Divide ld a, [H_MULTIPLICAND] ; $FF00+$96 (aliases: H_NUMTOPRINT) push af ld a, [H_MULTIPLICAND+1] push af ld a, [H_MULTIPLICAND+2] push af call CalcDSquared ld a, [hl] and $7f ld [H_MULTIPLIER], a ; $FF00+$99 call Multiply ld a, [H_MULTIPLICAND] ; $FF00+$96 (aliases: H_NUMTOPRINT) push af ld a, [H_MULTIPLICAND+1] push af ld a, [H_MULTIPLICAND+2] push af ld a, [hli] push af xor a ld [H_MULTIPLICAND], a ; $FF00+$96 ld [H_MULTIPLICAND+1], a ld a, d ld [H_MULTIPLICAND+2], a ld a, [hli] ld [H_MULTIPLIER], a call Multiply ld b, [hl] ld a, [H_MULTIPLICAND+2] sub b ld [H_MULTIPLICAND+2], a ld b, $0 ld a, [H_MULTIPLICAND+1] sbc b ld [H_MULTIPLICAND+1], a ld a, [H_MULTIPLICAND] ; $FF00+$96 sbc b ld [H_MULTIPLICAND], a ; $FF00+$96 pop af and $80 jr nz, .subtractSquaredTerm ; check sign pop bc ld a, [H_MULTIPLICAND+2] add b ld [H_MULTIPLICAND+2], a pop bc ld a, [H_MULTIPLICAND+1] adc b ld [H_MULTIPLICAND+1], a pop bc ld a, [H_MULTIPLICAND] adc b ld [H_MULTIPLICAND], a jr .addCubedTerm .subtractSquaredTerm pop bc ld a, [H_MULTIPLICAND+2] sub b ld [H_MULTIPLICAND+2], a pop bc ld a, [H_MULTIPLICAND+1] sbc b ld [H_MULTIPLICAND+1], a pop bc ld a, [H_MULTIPLICAND] sbc b ld [H_MULTIPLICAND], a .addCubedTerm pop bc ld a, [H_MULTIPLICAND+2] add b ld [H_MULTIPLICAND+2], a pop bc ld a, [H_MULTIPLICAND+1] adc b ld [H_MULTIPLICAND+1], a pop bc ld a, [H_MULTIPLICAND] adc b ld [H_MULTIPLICAND], a ret ; calculates d*d CalcDSquared: ; 59010 (16:5010) xor a ld [H_MULTIPLICAND], a ; $FF00+$96 (aliases: H_NUMTOPRINT) ld [H_MULTIPLICAND+1], a ld a, d ld [H_MULTIPLICAND+2], a ld [H_MULTIPLIER], a ; $FF00+$99 (aliases: H_DIVISOR, H_REMAINDER, H_POWEROFTEN) jp Multiply ; each entry has the following scheme: ; %AAAABBBB %SCCCCCCC %DDDDDDDD %EEEEEEEE ; resulting in ; (a*n^3)/b + sign*c*n^2 + d*n - e ; where sign = -1 <=> S=1 GrowthRateTable: ; 5901d (16:501d) db $11,$00,$00,$00 ; medium fast n^3 db $34,$0A,$00,$1E ; (unused?) 3/4 n^3 + 10 n^2 - 30 db $34,$14,$00,$46 ; (unused?) 3/4 n^3 + 20 n^2 - 70 db $65,$8F,$64,$8C ; medium slow: 6/5 n^3 - 15 n^2 + 100 n - 140 db $45,$00,$00,$00 ; fast: 4/5 n^3 db $54,$00,$00,$00 ; slow: 5/4 n^3 Func_59035 ; 0x59035 ld hl, UnnamedText_59091 ; $5091 call PrintText call YesNoChoice ld a, [$cc26] and a jr nz, .asm_59086 ; 0x59042 $42 ld hl, $d2f7 ld b, $13 call CountSetBits ld a, [$d11e] ld [$ff00+$dd], a ld b, a ld a, [$ff00+$db] cp b jr z, .asm_59059 ; 0x59055 $2 jr nc, .asm_5907c ; 0x59057 $23 .asm_59059 ld hl, UnnamedText_590a0 ; $50a0 call PrintText ld a, [$ff00+$dc] ld b, a ld c, 1 call GiveItem jr nc, .BagFull ld hl, UnnamedText_590a5 ; $50a5 call PrintText ld a, $1 jr .asm_5908e ; 0x59071 $1b .BagFull ld hl, UnnamedText_590ab ; $50ab call PrintText xor a jr .asm_5908e ; 0x5907a $12 .asm_5907c ld hl, UnnamedText_59096 ; $5096 call PrintText ld a, $80 jr .asm_5908e ; 0x59084 $8 .asm_59086 ld hl, UnnamedText_5909b ; $509b call PrintText ld a, $ff .asm_5908e ld [$ff00+$db], a ret UnnamedText_59091: ; 59091 (16:5091) TX_FAR _UnnamedText_59091 db "@" UnnamedText_59096: ; 59096 (16:5096) TX_FAR _UnnamedText_59096 db "@" UnnamedText_5909b: ; 5909b (16:509b) TX_FAR _UnnamedText_5909b db "@" UnnamedText_590a0: ; 590a0 (16:50a0) TX_FAR _UnnamedText_590a0 db "@" UnnamedText_590a5: ; 590a5 (16:50a5) TX_FAR _UnnamedText_590a5 db $0b db "@" UnnamedText_590ab: ; 590ab (16:50ab) TX_FAR _UnnamedText_590ab db "@" Route6Script: ; 590b0 (16:50b0) call EnableAutoTextBoxDrawing ld hl, Route6TrainerHeaders ld de, Route6ScriptPointers ld a, [W_ROUTE6CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROUTE6CURSCRIPT], a ret Route6ScriptPointers: ; 590c3 (16:50c3) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle Route6TextPointers: ; 590c9 (16:50c9) dw Route6Text1 dw Route6Text2 dw Route6Text3 dw Route6Text4 dw Route6Text5 dw Route6Text6 dw Route6Text7 Route6TrainerHeaders: ; 590d7 (16:50d7) Route6TrainerHeader0: ; 590d7 (16:50d7) db $1 ; flag's bit db ($0 << 4) ; trainer's view range dw $d7c9 ; flag's byte dw Route6BattleText1 ; 0x512a TextBeforeBattle dw Route6AfterBattleText1 ; 0x5134 TextAfterBattle dw Route6EndBattleText1 ; 0x512f TextEndBattle dw Route6EndBattleText1 ; 0x512f TextEndBattle Route6TrainerHeader1: ; 590e3 (16:50e3) db $2 ; flag's bit db ($0 << 4) ; trainer's view range dw $d7c9 ; flag's byte dw Route6BattleText2 ; 0x5143 TextBeforeBattle dw Route6AfterBattleText1 ; 0x5134 TextAfterBattle dw Route6EndBattleText2 ; 0x5148 TextEndBattle dw Route6EndBattleText2 ; 0x5148 TextEndBattle Route6TrainerHeader2: ; 590ef (16:50ef) db $3 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7c9 ; flag's byte dw Route6BattleText3 ; 0x5157 TextBeforeBattle dw Route6AfterBattleText3 ; 0x5161 TextAfterBattle dw Route6EndBattleText3 ; 0x515c TextEndBattle dw Route6EndBattleText3 ; 0x515c TextEndBattle Route6TrainerHeader3: ; 590fb (16:50fb) db $4 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7c9 ; flag's byte dw Route6BattleText4 ; 0x5170 TextBeforeBattle dw Route6AfterBattleText4 ; 0x517a TextAfterBattle dw Route6EndBattleText4 ; 0x5175 TextEndBattle dw Route6EndBattleText4 ; 0x5175 TextEndBattle Route6TrainerHeader4: ; 59107 (16:5107) db $5 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7c9 ; flag's byte dw Route6BattleText5 ; 0x5189 TextBeforeBattle dw Route6AfterBattleText5 ; 0x5193 TextAfterBattle dw Route6EndBattleText5 ; 0x518e TextEndBattle dw Route6EndBattleText5 ; 0x518e TextEndBattle Route6TrainerHeader5: ; 59113 (16:5113) db $6 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7c9 ; flag's byte dw Route6BattleText6 ; 0x51a2 TextBeforeBattle dw Route6AfterBattleText6 ; 0x51ac TextAfterBattle dw Route6EndBattleText6 ; 0x51a7 TextEndBattle dw Route6EndBattleText6 ; 0x51a7 TextEndBattle db $ff Route6Text1: ; 59120 (16:5120) db $8 ld hl, Route6TrainerHeader0 call TalkToTrainer jp TextScriptEnd Route6BattleText1: ; 5912a (16:512a) TX_FAR _Route6BattleText1 db "@" Route6EndBattleText1: ; 5912f (16:512f) TX_FAR _Route6EndBattleText1 db "@" Route6AfterBattleText1: ; 59134 (16:5134) TX_FAR _Route6AfterBattleText1 db "@" Route6Text2: ; 59139 (16:5139) db $08 ; asm ld hl, Route6TrainerHeader1 call TalkToTrainer jp TextScriptEnd Route6BattleText2: ; 59143 (16:5143) TX_FAR _Route6BattleText2 db "@" Route6EndBattleText2: ; 59148 (16:5148) TX_FAR _Route6EndBattleText2 db "@" Route6Text3: ; 5914d (16:514d) db $08 ; asm ld hl, Route6TrainerHeader2 call TalkToTrainer jp TextScriptEnd Route6BattleText3: ; 59157 (16:5157) TX_FAR _Route6BattleText3 db "@" Route6EndBattleText3: ; 5915c (16:515c) TX_FAR _Route6EndBattleText3 db "@" Route6AfterBattleText3: ; 59161 (16:5161) TX_FAR _Route6AfterBattleText3 db "@" Route6Text4: ; 59166 (16:5166) db $08 ; asm ld hl, Route6TrainerHeader3 call TalkToTrainer jp TextScriptEnd Route6BattleText4: ; 59170 (16:5170) TX_FAR _Route6BattleText4 db "@" Route6EndBattleText4: ; 59175 (16:5175) TX_FAR _Route6EndBattleText4 db "@" Route6AfterBattleText4: ; 5917a (16:517a) TX_FAR _Route6AfterBattleText4 db "@" Route6Text5: ; 5917f (16:517f) db $08 ; asm ld hl, Route6TrainerHeader4 call TalkToTrainer jp TextScriptEnd Route6BattleText5: ; 59189 (16:5189) TX_FAR _Route6BattleText5 db "@" Route6EndBattleText5: ; 5918e (16:518e) TX_FAR _Route6EndBattleText5 db "@" Route6AfterBattleText5: ; 59193 (16:5193) TX_FAR _Route6AfterBattleText5 db "@" Route6Text6: ; 59198 (16:5198) db $08 ; asm ld hl, Route6TrainerHeader5 call TalkToTrainer jp TextScriptEnd Route6BattleText6: ; 591a2 (16:51a2) TX_FAR _Route6BattleText6 db "@" Route6EndBattleText6: ; 591a7 (16:51a7) TX_FAR _Route6EndBattleText6 db "@" Route6AfterBattleText6: ; 591ac (16:51ac) TX_FAR _Route6AfterBattleText6 db "@" Route6Text7: ; 591b1 (16:51b1) TX_FAR _Route6Text7 db "@" Route8Script: ; 591b6 (16:51b6) call EnableAutoTextBoxDrawing ld hl, Route8TrainerHeaders ld de, Route8ScriptPointers ld a, [W_ROUTE8CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROUTE8CURSCRIPT], a ret Route8ScriptPointers: ; 591c9 (16:51c9) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle Route8TextPointers: ; 591cf (16:51cf) dw Route8Text1 dw Route8Text2 dw Route8Text3 dw Route8Text4 dw Route8Text5 dw Route8Text6 dw Route8Text7 dw Route8Text8 dw Route8Text9 dw Route8Text10 Route8TrainerHeaders: ; 591e3 (16:51e3) Route8TrainerHeader0: ; 591e3 (16:51e3) db $1 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7cd ; flag's byte dw Route8BattleText1 ; 0x525a TextBeforeBattle dw Route8AfterBattleText1 ; 0x5264 TextAfterBattle dw Route8EndBattleText1 ; 0x525f TextEndBattle dw Route8EndBattleText1 ; 0x525f TextEndBattle Route8TrainerHeader1: ; 591ef (16:51ef) db $2 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7cd ; flag's byte dw Route8BattleText2 ; 0x5273 TextBeforeBattle dw Route8AfterBattleText2 ; 0x527d TextAfterBattle dw Route8EndBattleText2 ; 0x5278 TextEndBattle dw Route8EndBattleText2 ; 0x5278 TextEndBattle Route8TrainerHeader2: ; 591fb (16:51fb) db $3 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7cd ; flag's byte dw Route8BattleText3 ; 0x528c TextBeforeBattle dw Route8AfterBattleText3 ; 0x5296 TextAfterBattle dw Route8EndBattleText3 ; 0x5291 TextEndBattle dw Route8EndBattleText3 ; 0x5291 TextEndBattle Route8TrainerHeader3: ; 59207 (16:5207) db $4 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7cd ; flag's byte dw Route8BattleText4 ; 0x52a5 TextBeforeBattle dw Route8AfterBattleText4 ; 0x52af TextAfterBattle dw Route8EndBattleText4 ; 0x52aa TextEndBattle dw Route8EndBattleText4 ; 0x52aa TextEndBattle Route8TrainerHeader4: ; 59213 (16:5213) db $5 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7cd ; flag's byte dw Route8BattleText5 ; 0x52be TextBeforeBattle dw Route8AfterBattleText5 ; 0x52c8 TextAfterBattle dw Route8EndBattleText5 ; 0x52c3 TextEndBattle dw Route8EndBattleText5 ; 0x52c3 TextEndBattle Route8TrainerHeader5: ; 5921f (16:521f) db $6 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7cd ; flag's byte dw Route8BattleText6 ; 0x52d7 TextBeforeBattle dw Route8AfterBattleText6 ; 0x52e1 TextAfterBattle dw Route8EndBattleText6 ; 0x52dc TextEndBattle dw Route8EndBattleText6 ; 0x52dc TextEndBattle Route8TrainerHeader6: ; 5922b (16:522b) db $7 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7cd ; flag's byte dw Route8BattleText7 ; 0x52f0 TextBeforeBattle dw Route8AfterBattleText7 ; 0x52fa TextAfterBattle dw Route8EndBattleText7 ; 0x52f5 TextEndBattle dw Route8EndBattleText7 ; 0x52f5 TextEndBattle Route8TrainerHeader7: ; 59237 (16:5237) db $8 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7cd ; flag's byte dw Route8BattleText8 ; 0x5309 TextBeforeBattle dw Route8AfterBattleText8 ; 0x5313 TextAfterBattle dw Route8EndBattleText8 ; 0x530e TextEndBattle dw Route8EndBattleText8 ; 0x530e TextEndBattle Route8TrainerHeader8: ; 59243 (16:5243) db $9 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7cd ; flag's byte dw Route8BattleText9 ; 0x5322 TextBeforeBattle dw Route8AfterBattleText9 ; 0x532c TextAfterBattle dw Route8EndBattleText9 ; 0x5327 TextEndBattle dw Route8EndBattleText9 ; 0x5327 TextEndBattle db $ff Route8Text1: ; 59250 (16:5250) db $8 ld hl, Route8TrainerHeader0 call TalkToTrainer jp TextScriptEnd Route8BattleText1: ; 5925a (16:525a) TX_FAR _Route8BattleText1 db "@" Route8EndBattleText1: ; 5925f (16:525f) TX_FAR _Route8EndBattleText1 db "@" Route8AfterBattleText1: ; 59264 (16:5264) TX_FAR _Route8AfterBattleText1 db "@" Route8Text2: ; 59269 (16:5269) db $08 ; asm ld hl, Route8TrainerHeader1 call TalkToTrainer jp TextScriptEnd Route8BattleText2: ; 59273 (16:5273) TX_FAR _Route8BattleText2 db "@" Route8EndBattleText2: ; 59278 (16:5278) TX_FAR _Route8EndBattleText2 db "@" Route8AfterBattleText2: ; 5927d (16:527d) TX_FAR _Route8AfterBattleText2 db "@" Route8Text3: ; 59282 (16:5282) db $08 ; asm ld hl, Route8TrainerHeader2 call TalkToTrainer jp TextScriptEnd Route8BattleText3: ; 5928c (16:528c) TX_FAR _Route8BattleText3 db "@" Route8EndBattleText3: ; 59291 (16:5291) TX_FAR _Route8EndBattleText3 db "@" Route8AfterBattleText3: ; 59296 (16:5296) TX_FAR _Route8AfterBattleText3 db "@" Route8Text4: ; 5929b (16:529b) db $08 ; asm ld hl, Route8TrainerHeader3 call TalkToTrainer jp TextScriptEnd Route8BattleText4: ; 592a5 (16:52a5) TX_FAR _Route8BattleText4 db "@" Route8EndBattleText4: ; 592aa (16:52aa) TX_FAR _Route8EndBattleText4 db "@" Route8AfterBattleText4: ; 592af (16:52af) TX_FAR _Route8AfterBattleText4 db "@" Route8Text5: ; 592b4 (16:52b4) db $08 ; asm ld hl, Route8TrainerHeader4 call TalkToTrainer jp TextScriptEnd Route8BattleText5: ; 592be (16:52be) TX_FAR _Route8BattleText5 db "@" Route8EndBattleText5: ; 592c3 (16:52c3) TX_FAR _Route8EndBattleText5 db "@" Route8AfterBattleText5: ; 592c8 (16:52c8) TX_FAR _Route8AfterBattleText5 db "@" Route8Text6: ; 592cd (16:52cd) db $08 ; asm ld hl, Route8TrainerHeader5 call TalkToTrainer jp TextScriptEnd Route8BattleText6: ; 592d7 (16:52d7) TX_FAR _Route8BattleText6 db "@" Route8EndBattleText6: ; 592dc (16:52dc) TX_FAR _Route8EndBattleText6 db "@" Route8AfterBattleText6: ; 592e1 (16:52e1) TX_FAR _Route8AfterBattleText6 db "@" Route8Text7: ; 592e6 (16:52e6) db $08 ; asm ld hl, Route8TrainerHeader6 call TalkToTrainer jp TextScriptEnd Route8BattleText7: ; 592f0 (16:52f0) TX_FAR _Route8BattleText7 db "@" Route8EndBattleText7: ; 592f5 (16:52f5) TX_FAR _Route8EndBattleText7 db "@" Route8AfterBattleText7: ; 592fa (16:52fa) TX_FAR _Route8AfterBattleText7 db "@" Route8Text8: ; 592ff (16:52ff) db $08 ; asm ld hl, Route8TrainerHeader7 call TalkToTrainer jp TextScriptEnd Route8BattleText8: ; 59309 (16:5309) TX_FAR _Route8BattleText8 db "@" Route8EndBattleText8: ; 5930e (16:530e) TX_FAR _Route8EndBattleText8 db "@" Route8AfterBattleText8: ; 59313 (16:5313) TX_FAR _Route8AfterBattleText8 db "@" Route8Text9: ; 59318 (16:5318) db $08 ; asm ld hl, Route8TrainerHeader8 call TalkToTrainer jp TextScriptEnd Route8BattleText9: ; 59322 (16:5322) TX_FAR _Route8BattleText9 db "@" Route8EndBattleText9: ; 59327 (16:5327) TX_FAR _Route8EndBattleText9 db "@" Route8AfterBattleText9: ; 5932c (16:532c) TX_FAR _Route8AfterBattleText9 db "@" Route8Text10: ; 59331 (16:5331) TX_FAR _Route8Text10 db "@" Route10Script: ; 59336 (16:5336) call EnableAutoTextBoxDrawing ld hl, Route10TrainerHeaders ld de, Route10ScriptPointers ld a, [W_ROUTE10CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROUTE10CURSCRIPT], a ret Route10ScriptPointers: ; 59349 (16:5349) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle Route10TextPointers: ; 5934f (16:534f) dw Route10Text1 dw Route10Text2 dw Route10Text3 dw Route10Text4 dw Route10Text5 dw Route10Text6 dw Route10Text7 dw PokeCenterSignText dw Route10Text9 dw Route10Text10 Route10TrainerHeaders: ; 59363 (16:5363) Route10TrainerHeader0: ; 59363 (16:5363) db $1 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7d1 ; flag's byte dw Route10BattleText1 ; 0x53b6 TextBeforeBattle dw Route10AfterBattleText1 ; 0x53c0 TextAfterBattle dw Route10EndBattleText1 ; 0x53bb TextEndBattle dw Route10EndBattleText1 ; 0x53bb TextEndBattle Route10TrainerHeader1: ; 5936f (16:536f) db $2 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7d1 ; flag's byte dw Route10BattleText2 ; 0x53cf TextBeforeBattle dw Route10AfterBattleText2 ; 0x53d9 TextAfterBattle dw Route10EndBattleText2 ; 0x53d4 TextEndBattle dw Route10EndBattleText2 ; 0x53d4 TextEndBattle Route10TrainerHeader2: ; 5937b (16:537b) db $3 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7d1 ; flag's byte dw Route10BattleText3 ; 0x53e8 TextBeforeBattle dw Route10AfterBattleText3 ; 0x53f2 TextAfterBattle dw Route10EndBattleText3 ; 0x53ed TextEndBattle dw Route10EndBattleText3 ; 0x53ed TextEndBattle Route10TrainerHeader3: ; 59387 (16:5387) db $4 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7d1 ; flag's byte dw Route10BattleText4 ; 0x5401 TextBeforeBattle dw Route10AfterBattleText4 ; 0x540b TextAfterBattle dw Route10EndBattleText4 ; 0x5406 TextEndBattle dw Route10EndBattleText4 ; 0x5406 TextEndBattle Route10TrainerHeader4: ; 59393 (16:5393) db $5 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7d1 ; flag's byte dw Route10BattleText5 ; 0x541a TextBeforeBattle dw Route10AfterBattleText5 ; 0x5424 TextAfterBattle dw Route10EndBattleText5 ; 0x541f TextEndBattle dw Route10EndBattleText5 ; 0x541f TextEndBattle Route10TrainerHeader5: ; 5939f (16:539f) db $6 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7d1 ; flag's byte dw Route10BattleText6 ; 0x5433 TextBeforeBattle dw Route10AfterBattleText6 ; 0x543d TextAfterBattle dw Route10EndBattleText6 ; 0x5438 TextEndBattle dw Route10EndBattleText6 ; 0x5438 TextEndBattle db $ff Route10Text1: ; 593ac (16:53ac) db $08 ; asm ld hl, Route10TrainerHeader0 call TalkToTrainer jp TextScriptEnd Route10BattleText1: ; 593b6 (16:53b6) TX_FAR _Route10BattleText1 db "@" Route10EndBattleText1: ; 593bb (16:53bb) TX_FAR _Route10EndBattleText1 db "@" Route10AfterBattleText1: ; 593c0 (16:53c0) TX_FAR _Route10AfterBattleText1 db "@" Route10Text2: ; 593c5 (16:53c5) db $08 ; asm ld hl, Route10TrainerHeader1 call TalkToTrainer jp TextScriptEnd Route10BattleText2: ; 593cf (16:53cf) TX_FAR _Route10BattleText2 db "@" Route10EndBattleText2: ; 593d4 (16:53d4) TX_FAR _Route10EndBattleText2 db "@" Route10AfterBattleText2: ; 593d9 (16:53d9) TX_FAR _Route10AfterBattleText2 db "@" Route10Text3: ; 593de (16:53de) db $08 ; asm ld hl, Route10TrainerHeader2 call TalkToTrainer jp TextScriptEnd Route10BattleText3: ; 593e8 (16:53e8) TX_FAR _Route10BattleText3 db "@" Route10EndBattleText3: ; 593ed (16:53ed) TX_FAR _Route10EndBattleText3 db "@" Route10AfterBattleText3: ; 593f2 (16:53f2) TX_FAR _Route10AfterBattleText3 db "@" Route10Text4: ; 593f7 (16:53f7) db $08 ; asm ld hl, Route10TrainerHeader3 call TalkToTrainer jp TextScriptEnd Route10BattleText4: ; 59401 (16:5401) TX_FAR _Route10BattleText4 db "@" Route10EndBattleText4: ; 59406 (16:5406) TX_FAR _Route10EndBattleText4 db "@" Route10AfterBattleText4: ; 5940b (16:540b) TX_FAR _Route10AfterBattleText4 db "@" Route10Text5: ; 59410 (16:5410) db $08 ; asm ld hl, Route10TrainerHeader4 call TalkToTrainer jp TextScriptEnd Route10BattleText5: ; 5941a (16:541a) TX_FAR _Route10BattleText5 db "@" Route10EndBattleText5: ; 5941f (16:541f) TX_FAR _Route10EndBattleText5 db "@" Route10AfterBattleText5: ; 59424 (16:5424) TX_FAR _Route10AfterBattleText5 db "@" Route10Text6: ; 59429 (16:5429) db $08 ; asm ld hl, Route10TrainerHeader5 call TalkToTrainer jp TextScriptEnd Route10BattleText6: ; 59433 (16:5433) TX_FAR _Route10BattleText6 db "@" Route10EndBattleText6: ; 59438 (16:5438) TX_FAR _Route10EndBattleText6 db "@" Route10AfterBattleText6: ; 5943d (16:543d) TX_FAR _Route10AfterBattleText6 db "@" Route10Text9: ; 59442 (16:5442) Route10Text7: ; 59442 (16:5442) TX_FAR _Route10Text7 ; _Route10Text9 db "@" Route10Text10: ; 59447 (16:5447) TX_FAR _Route10Text10 db "@" Route11Script: ; 5944c (16:544c) call EnableAutoTextBoxDrawing ld hl, Route11TrainerHeaders ld de, Route11ScriptPointers ld a, [W_ROUTE11CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROUTE11CURSCRIPT], a ret Route11ScriptPointers: ; 5945f (16:545f) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle Route11TextPointers: ; 59465 (16:5465) dw Route11Text1 dw Route11Text2 dw Route11Text3 dw Route11Text4 dw Route11Text5 dw Route11Text6 dw Route11Text7 dw Route11Text8 dw Route11Text9 dw Route11Text10 dw Route11Text11 Route11TrainerHeaders: ; 5947b (16:547b) Route11TrainerHeader0: ; 5947b (16:547b) db $1 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7d5 ; flag's byte dw Route11BattleText1 ; 0x54fe TextBeforeBattle dw Route11AfterBattleText1 ; 0x5508 TextAfterBattle dw Route11EndBattleText1 ; 0x5503 TextEndBattle dw Route11EndBattleText1 ; 0x5503 TextEndBattle Route11TrainerHeader1: ; 59487 (16:5487) db $2 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7d5 ; flag's byte dw Route11BattleText2 ; 0x5517 TextBeforeBattle dw Route11AfterBattleText2 ; 0x5521 TextAfterBattle dw Route11EndBattleText2 ; 0x551c TextEndBattle dw Route11EndBattleText2 ; 0x551c TextEndBattle Route11TrainerHeader2: ; 59493 (16:5493) db $3 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7d5 ; flag's byte dw Route11BattleText3 ; 0x5530 TextBeforeBattle dw Route11AfterBattleText3 ; 0x553a TextAfterBattle dw Route11EndBattleText3 ; 0x5535 TextEndBattle dw Route11EndBattleText3 ; 0x5535 TextEndBattle Route11TrainerHeader3: ; 5949f (16:549f) db $4 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7d5 ; flag's byte dw Route11BattleText4 ; 0x5549 TextBeforeBattle dw Route11AfterBattleText4 ; 0x5553 TextAfterBattle dw Route11EndBattleText4 ; 0x554e TextEndBattle dw Route11EndBattleText4 ; 0x554e TextEndBattle Route11TrainerHeader4: ; 594ab (16:54ab) db $5 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7d5 ; flag's byte dw Route11BattleText5 ; 0x5562 TextBeforeBattle dw Route11AfterBattleText5 ; 0x556c TextAfterBattle dw Route11EndBattleText5 ; 0x5567 TextEndBattle dw Route11EndBattleText5 ; 0x5567 TextEndBattle Route11TrainerHeader5: ; 594b7 (16:54b7) db $6 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7d5 ; flag's byte dw Route11BattleText6 ; 0x557b TextBeforeBattle dw Route11AfterBattleText6 ; 0x5585 TextAfterBattle dw Route11EndBattleText6 ; 0x5580 TextEndBattle dw Route11EndBattleText6 ; 0x5580 TextEndBattle Route11TrainerHeader6: ; 594c3 (16:54c3) db $7 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7d5 ; flag's byte dw Route11BattleText7 ; 0x5594 TextBeforeBattle dw Route11AfterBattleText7 ; 0x559e TextAfterBattle dw Route11EndBattleText7 ; 0x5599 TextEndBattle dw Route11EndBattleText7 ; 0x5599 TextEndBattle Route11TrainerHeader7: ; 594cf (16:54cf) db $8 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7d5 ; flag's byte dw Route11BattleText8 ; 0x55ad TextBeforeBattle dw Route11AfterBattleText8 ; 0x55b7 TextAfterBattle dw Route11EndBattleText8 ; 0x55b2 TextEndBattle dw Route11EndBattleText8 ; 0x55b2 TextEndBattle Route11TrainerHeader8: ; 594db (16:54db) db $9 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7d5 ; flag's byte dw Route11BattleText9 ; 0x55c6 TextBeforeBattle dw Route11AfterBattleText9 ; 0x55d0 TextAfterBattle dw Route11EndBattleText9 ; 0x55cb TextEndBattle dw Route11EndBattleText9 ; 0x55cb TextEndBattle Route11TrainerHeader9: ; 594e7 (16:54e7) db $a ; flag's bit db ($4 << 4) ; trainer's view range dw $d7d5 ; flag's byte dw Route11BattleText10 ; 0x55df TextBeforeBattle dw Route11AfterBattleText10 ; 0x55e9 TextAfterBattle dw Route11EndBattleText10 ; 0x55e4 TextEndBattle dw Route11EndBattleText10 ; 0x55e4 TextEndBattle db $ff Route11Text1: ; 594f4 (16:54f4) db $8 ld hl, Route11TrainerHeader0 call TalkToTrainer jp TextScriptEnd Route11BattleText1: ; 594fe (16:54fe) TX_FAR _Route11BattleText1 db "@" Route11EndBattleText1: ; 59503 (16:5503) TX_FAR _Route11EndBattleText1 db "@" Route11AfterBattleText1: ; 59508 (16:5508) TX_FAR _Route11AfterBattleText1 db "@" Route11Text2: ; 5950d (16:550d) db $08 ; asm ld hl, Route11TrainerHeader1 call TalkToTrainer jp TextScriptEnd Route11BattleText2: ; 59517 (16:5517) TX_FAR _Route11BattleText2 db "@" Route11EndBattleText2: ; 5951c (16:551c) TX_FAR _Route11EndBattleText2 db "@" Route11AfterBattleText2: ; 59521 (16:5521) TX_FAR _Route11AfterBattleText2 db "@" Route11Text3: ; 59526 (16:5526) db $08 ; asm ld hl, Route11TrainerHeader2 call TalkToTrainer jp TextScriptEnd Route11BattleText3: ; 59530 (16:5530) TX_FAR _Route11BattleText3 db "@" Route11EndBattleText3: ; 59535 (16:5535) TX_FAR _Route11EndBattleText3 db "@" Route11AfterBattleText3: ; 5953a (16:553a) TX_FAR _Route11AfterBattleText3 db "@" Route11Text4: ; 5953f (16:553f) db $08 ; asm ld hl, Route11TrainerHeader3 call TalkToTrainer jp TextScriptEnd Route11BattleText4: ; 59549 (16:5549) TX_FAR _Route11BattleText4 db "@" Route11EndBattleText4: ; 5954e (16:554e) TX_FAR _Route11EndBattleText4 db "@" Route11AfterBattleText4: ; 59553 (16:5553) TX_FAR _Route11AfterBattleText4 db "@" Route11Text5: ; 59558 (16:5558) db $08 ; asm ld hl, Route11TrainerHeader4 call TalkToTrainer jp TextScriptEnd Route11BattleText5: ; 59562 (16:5562) TX_FAR _Route11BattleText5 db "@" Route11EndBattleText5: ; 59567 (16:5567) TX_FAR _Route11EndBattleText5 db "@" Route11AfterBattleText5: ; 5956c (16:556c) TX_FAR _Route11AfterBattleText5 db "@" Route11Text6: ; 59571 (16:5571) db $08 ; asm ld hl, Route11TrainerHeader5 call TalkToTrainer jp TextScriptEnd Route11BattleText6: ; 5957b (16:557b) TX_FAR _Route11BattleText6 db "@" Route11EndBattleText6: ; 59580 (16:5580) TX_FAR _Route11EndBattleText6 db "@" Route11AfterBattleText6: ; 59585 (16:5585) TX_FAR _Route11AfterBattleText6 db "@" Route11Text7: ; 5958a (16:558a) db $08 ; asm ld hl, Route11TrainerHeader6 call TalkToTrainer jp TextScriptEnd Route11BattleText7: ; 59594 (16:5594) TX_FAR _Route11BattleText7 db "@" Route11EndBattleText7: ; 59599 (16:5599) TX_FAR _Route11EndBattleText7 db "@" Route11AfterBattleText7: ; 5959e (16:559e) TX_FAR _Route11AfterBattleText7 db "@" Route11Text8: ; 595a3 (16:55a3) db $08 ; asm ld hl, Route11TrainerHeader7 call TalkToTrainer jp TextScriptEnd Route11BattleText8: ; 595ad (16:55ad) TX_FAR _Route11BattleText8 db "@" Route11EndBattleText8: ; 595b2 (16:55b2) TX_FAR _Route11EndBattleText8 db "@" Route11AfterBattleText8: ; 595b7 (16:55b7) TX_FAR _Route11AfterBattleText8 db "@" Route11Text9: ; 595bc (16:55bc) db $08 ; asm ld hl, Route11TrainerHeader8 call TalkToTrainer jp TextScriptEnd Route11BattleText9: ; 595c6 (16:55c6) TX_FAR _Route11BattleText9 db "@" Route11EndBattleText9: ; 595cb (16:55cb) TX_FAR _Route11EndBattleText9 db "@" Route11AfterBattleText9: ; 595d0 (16:55d0) TX_FAR _Route11AfterBattleText9 db "@" Route11Text10: ; 595d5 (16:55d5) db $08 ; asm ld hl, Route11TrainerHeader9 call TalkToTrainer jp TextScriptEnd Route11BattleText10: ; 595df (16:55df) TX_FAR _Route11BattleText10 db "@" Route11EndBattleText10: ; 595e4 (16:55e4) TX_FAR _Route11EndBattleText10 db "@" Route11AfterBattleText10: ; 595e9 (16:55e9) TX_FAR _Route11AfterBattleText10 db "@" Route11Text11: ; 595ee (16:55ee) TX_FAR _Route11Text11 db "@" Route12Script: ; 595f3 (16:55f3) call EnableAutoTextBoxDrawing ld hl, Route12TrainerHeaders ld de, Route12ScriptPointers ld a, [W_ROUTE12CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROUTE12CURSCRIPT], a ret Route12Script_59606: ; 59606 (16:5606) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_ROUTE12CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret Route12ScriptPointers: ; 59611 (16:5611) dw Route12Script0 dw Func_324c dw EndTrainerBattle dw Route12Script3 Route12Script0: ; 59619 (16:5619) ld hl, $d7d8 bit 7, [hl] jp nz, CheckFightingMapTrainers bit 6, [hl] res 6, [hl] jp z, CheckFightingMapTrainers ld a, $d ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld a, $84 ld [W_CUROPPONENT], a ; $d059 ld a, $1e ld [W_CURENEMYLVL], a ; $d127 ld a, $1d ld [$cc4d], a ld a, $11 call Predef ; indirect jump to RemoveMissableObject (f1d7 (3:71d7)) ld a, $3 ld [W_ROUTE12CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret Route12Script3: ; 5964c (16:564c) ld a, [W_ISINBATTLE] ; $d057 cp $ff jr z, Route12Script_59606 call UpdateSprites ld a, [$cf0b] cp $2 jr z, .asm_59664 ld a, $e ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID .asm_59664 ld hl, $d7d8 set 7, [hl] call Delay3 ld a, $0 ld [W_ROUTE12CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret Route12TextPointers: ; 59675 (16:5675) dw Route12Text1 dw Route12Text2 dw Route12Text3 dw Route12Text4 dw Route12Text5 dw Route12Text6 dw Route12Text7 dw Route12Text8 dw Predef5CText dw Predef5CText dw Route12Text11 dw Route12Text12 dw Route12Text13 dw Route12Text14 Route12TrainerHeaders: ; 59691 (16:5691) Route12TrainerHeader0: ; 59691 (16:5691) db $2 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7d7 ; flag's byte dw Route12BattleText1 ; 0x56ff TextBeforeBattle dw Route12AfterBattleText1 ; 0x5709 TextAfterBattle dw Route12EndBattleText1 ; 0x5704 TextEndBattle dw Route12EndBattleText1 ; 0x5704 TextEndBattle Route12TrainerHeader1: ; 5969d (16:569d) db $3 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7d7 ; flag's byte dw Route12BattleText2 ; 0x5718 TextBeforeBattle dw Route12AfterBattleText2 ; 0x5722 TextAfterBattle dw Route12EndBattleText2 ; 0x571d TextEndBattle dw Route12EndBattleText2 ; 0x571d TextEndBattle Route12TrainerHeader2: ; 596a9 (16:56a9) db $4 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7d7 ; flag's byte dw Route12BattleText3 ; 0x5731 TextBeforeBattle dw Route12AfterBattleText3 ; 0x573b TextAfterBattle dw Route12EndBattleText3 ; 0x5736 TextEndBattle dw Route12EndBattleText3 ; 0x5736 TextEndBattle Route12TrainerHeader3: ; 596b5 (16:56b5) db $5 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7d7 ; flag's byte dw Route12BattleText4 ; 0x574a TextBeforeBattle dw Route12AfterBattleText4 ; 0x5754 TextAfterBattle dw Route12EndBattleText4 ; 0x574f TextEndBattle dw Route12EndBattleText4 ; 0x574f TextEndBattle Route12TrainerHeader4: ; 596c1 (16:56c1) db $6 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7d7 ; flag's byte dw Route12BattleText5 ; 0x5763 TextBeforeBattle dw Route12AfterBattleText5 ; 0x576d TextAfterBattle dw Route12EndBattleText5 ; 0x5768 TextEndBattle dw Route12EndBattleText5 ; 0x5768 TextEndBattle Route12TrainerHeader5: ; 596cd (16:56cd) db $7 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7d7 ; flag's byte dw Route12BattleText6 ; 0x577c TextBeforeBattle dw Route12AfterBattleText6 ; 0x5786 TextAfterBattle dw Route12EndBattleText6 ; 0x5781 TextEndBattle dw Route12EndBattleText6 ; 0x5781 TextEndBattle Route12TrainerHeader6: ; 596d9 (16:56d9) db $8 ; flag's bit db ($1 << 4) ; trainer's view range dw $d7d7 ; flag's byte dw Route12BattleText7 ; 0x5795 TextBeforeBattle dw Route12AfterBattleText7 ; 0x579f TextAfterBattle dw Route12EndBattleText7 ; 0x579a TextEndBattle dw Route12EndBattleText7 ; 0x579a TextEndBattle db $ff Route12Text1: ; 596e6 (16:56e6) TX_FAR _Route12Text1 db "@" Route12Text13: ; 596eb (16:56eb) UnnamedText_596eb: ; 596eb (16:56eb) TX_FAR _UnnamedText_596eb db "@" Route12Text14: ; 596f0 (16:56f0) UnnamedText_596f0: ; 596f0 (16:56f0) TX_FAR _UnnamedText_596f0 db "@" Route12Text2: ; 596f5 (16:56f5) db $08 ; asm ld hl, Route12TrainerHeader0 call TalkToTrainer jp TextScriptEnd Route12BattleText1: ; 596ff (16:56ff) TX_FAR _Route12BattleText1 db "@" Route12EndBattleText1: ; 59704 (16:5704) TX_FAR _Route12EndBattleText1 db "@" Route12AfterBattleText1: ; 59709 (16:5709) TX_FAR _Route12AfterBattleText1 db "@" Route12Text3: ; 5970e (16:570e) db $08 ; asm ld hl, Route12TrainerHeader1 call TalkToTrainer jp TextScriptEnd Route12BattleText2: ; 59718 (16:5718) TX_FAR _Route12BattleText2 db "@" Route12EndBattleText2: ; 5971d (16:571d) TX_FAR _Route12EndBattleText2 db "@" Route12AfterBattleText2: ; 59722 (16:5722) TX_FAR _Route12AfterBattleText2 db "@" Route12Text4: ; 59727 (16:5727) db $08 ; asm ld hl, Route12TrainerHeader2 call TalkToTrainer jp TextScriptEnd Route12BattleText3: ; 59731 (16:5731) TX_FAR _Route12BattleText3 db "@" Route12EndBattleText3: ; 59736 (16:5736) TX_FAR _Route12EndBattleText3 db "@" Route12AfterBattleText3: ; 5973b (16:573b) TX_FAR _Route12AfterBattleText3 db "@" Route12Text5: ; 59740 (16:5740) db $08 ; asm ld hl, Route12TrainerHeader3 call TalkToTrainer jp TextScriptEnd Route12BattleText4: ; 5974a (16:574a) TX_FAR _Route12BattleText4 db "@" Route12EndBattleText4: ; 5974f (16:574f) TX_FAR _Route12EndBattleText4 db "@" Route12AfterBattleText4: ; 59754 (16:5754) TX_FAR _Route12AfterBattleText4 db "@" Route12Text6: ; 59759 (16:5759) db $08 ; asm ld hl, Route12TrainerHeader4 call TalkToTrainer jp TextScriptEnd Route12BattleText5: ; 59763 (16:5763) TX_FAR _Route12BattleText5 db "@" Route12EndBattleText5: ; 59768 (16:5768) TX_FAR _Route12EndBattleText5 db "@" Route12AfterBattleText5: ; 5976d (16:576d) TX_FAR _Route12AfterBattleText5 db "@" Route12Text7: ; 59772 (16:5772) db $08 ; asm ld hl, Route12TrainerHeader5 call TalkToTrainer jp TextScriptEnd Route12BattleText6: ; 5977c (16:577c) TX_FAR _Route12BattleText6 db "@" Route12EndBattleText6: ; 59781 (16:5781) TX_FAR _Route12EndBattleText6 db "@" Route12AfterBattleText6: ; 59786 (16:5786) TX_FAR _Route12AfterBattleText6 db "@" Route12Text8: ; 5978b (16:578b) db $08 ; asm ld hl, Route12TrainerHeader6 call TalkToTrainer jp TextScriptEnd Route12BattleText7: ; 59795 (16:5795) TX_FAR _Route12BattleText7 db "@" Route12EndBattleText7: ; 5979a (16:579a) TX_FAR _Route12EndBattleText7 db "@" Route12AfterBattleText7: ; 5979f (16:579f) TX_FAR _Route12AfterBattleText7 db "@" Route12Text11: ; 597a4 (16:57a4) TX_FAR _Route12Text11 db "@" Route12Text12: ; 597a9 (16:57a9) TX_FAR _Route12Text12 db "@" Route15Script: ; 597ae (16:57ae) call EnableAutoTextBoxDrawing ld hl, Route15TrainerHeaders ld de, Route15ScriptPointers ld a, [W_ROUTE15CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROUTE15CURSCRIPT], a ret Route15ScriptPointers: ; 597c1 (16:57c1) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle Route15TextPointers: ; 597c7 (16:57c7) dw Route15Text1 dw Route15Text2 dw Route15Text3 dw Route15Text4 dw Route15Text5 dw Route15Text6 dw Route15Text7 dw Route15Text8 dw Route15Text9 dw Route15Text10 dw Predef5CText dw Route15Text12 Route15TrainerHeaders: ; 597df (16:57df) Route15TrainerHeader0: ; 597df (16:57df) db $1 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7dd ; flag's byte dw Route15BattleText1 ; 0x5898 TextBeforeBattle dw Route15AfterBattleText1 ; 0x58a2 TextAfterBattle dw Route15EndBattleText1 ; 0x589d TextEndBattle dw Route15EndBattleText1 ; 0x589d TextEndBattle Route15TrainerHeader1: ; 597eb (16:57eb) db $2 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7dd ; flag's byte dw Route15BattleText2 ; 0x58a7 TextBeforeBattle dw Route15AfterBattleText2 ; 0x58b1 TextAfterBattle dw Route15EndBattleText2 ; 0x58ac TextEndBattle dw Route15EndBattleText2 ; 0x58ac TextEndBattle Route15TrainerHeader2: ; 597f7 (16:57f7) db $3 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7dd ; flag's byte dw Route15BattleText3 ; 0x58b6 TextBeforeBattle dw Route15AfterBattleText3 ; 0x58c0 TextAfterBattle dw Route15EndBattleText3 ; 0x58bb TextEndBattle dw Route15EndBattleText3 ; 0x58bb TextEndBattle Route15TrainerHeader3: ; 59803 (16:5803) db $4 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7dd ; flag's byte dw Route15BattleText4 ; 0x58c5 TextBeforeBattle dw Route15AfterBattleText4 ; 0x58cf TextAfterBattle dw Route15EndBattleText4 ; 0x58ca TextEndBattle dw Route15EndBattleText4 ; 0x58ca TextEndBattle Route15TrainerHeader4: ; 5980f (16:580f) db $5 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7dd ; flag's byte dw Route15BattleText5 ; 0x58d4 TextBeforeBattle dw Route15AfterBattleText5 ; 0x58de TextAfterBattle dw Route15EndBattleText5 ; 0x58d9 TextEndBattle dw Route15EndBattleText5 ; 0x58d9 TextEndBattle Route15TrainerHeader5: ; 5981b (16:581b) db $6 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7dd ; flag's byte dw Route15BattleText6 ; 0x58e3 TextBeforeBattle dw Route15AfterBattleText6 ; 0x58ed TextAfterBattle dw Route15EndBattleText6 ; 0x58e8 TextEndBattle dw Route15EndBattleText6 ; 0x58e8 TextEndBattle Route15TrainerHeader6: ; 59827 (16:5827) db $7 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7dd ; flag's byte dw Route15BattleText7 ; 0x58f2 TextBeforeBattle dw Route15AfterBattleText7 ; 0x58fc TextAfterBattle dw Route15EndBattleText7 ; 0x58f7 TextEndBattle dw Route15EndBattleText7 ; 0x58f7 TextEndBattle Route15TrainerHeader7: ; 59833 (16:5833) db $8 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7dd ; flag's byte dw Route15BattleText8 ; 0x5901 TextBeforeBattle dw Route15AfterBattleText8 ; 0x590b TextAfterBattle dw Route15EndBattleText8 ; 0x5906 TextEndBattle dw Route15EndBattleText8 ; 0x5906 TextEndBattle Route15TrainerHeader8: ; 5983f (16:583f) db $9 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7dd ; flag's byte dw Route15BattleText9 ; 0x5910 TextBeforeBattle dw Route15AfterBattleText9 ; 0x591a TextAfterBattle dw Route15EndBattleText9 ; 0x5915 TextEndBattle dw Route15EndBattleText9 ; 0x5915 TextEndBattle Route15TrainerHeader9: ; 5984b (16:584b) db $a ; flag's bit db ($3 << 4) ; trainer's view range dw $d7dd ; flag's byte dw Route15BattleText10 ; 0x591f TextBeforeBattle dw Route15AfterBattleText10 ; 0x5929 TextAfterBattle dw Route15EndBattleText10 ; 0x5924 TextEndBattle dw Route15EndBattleText10 ; 0x5924 TextEndBattle db $ff Route15Text1: ; 59858 (16:5858) db $8 ; asm ld hl, Route15TrainerHeader0 jr asm_33cb7 ; 0x5985c $34 Route15Text2: ; 5985e (16:585e) db $8 ; asm ld hl, Route15TrainerHeader1 jr asm_33cb7 ; 0x59862 $2e Route15Text3: ; 59864 (16:5864) db $8 ; asm ld hl, Route15TrainerHeader2 jr asm_33cb7 ; 0x59868 $28 Route15Text4: ; 5986a (16:586a) db $8 ; asm ld hl, Route15TrainerHeader3 jr asm_33cb7 ; 0x5986e $22 Route15Text5: ; 59870 (16:5870) db $8 ; asm ld hl, Route15TrainerHeader4 jr asm_33cb7 ; 0x59874 $1c Route15Text6: ; 59876 (16:5876) db $8 ; asm ld hl, Route15TrainerHeader5 jr asm_33cb7 ; 0x5987a $16 Route15Text7: ; 5987c (16:587c) db $8 ; asm ld hl, Route15TrainerHeader6 jr asm_33cb7 ; 0x59880 $10 Route15Text8: ; 59882 (16:5882) db $8 ; asm ld hl, Route15TrainerHeader7 jr asm_33cb7 ; 0x59886 $a Route15Text9: ; 59888 (16:5888) db $8 ; asm ld hl, Route15TrainerHeader8 jr asm_33cb7 ; 0x5988c $4 Route15Text10: ; 5988e (16:588e) db $8 ; asm ld hl, Route15TrainerHeader9 asm_33cb7: ; 59892 (16:5892) call TalkToTrainer jp TextScriptEnd Route15BattleText1: ; 59898 (16:5898) TX_FAR _Route15BattleText1 db "@" Route15EndBattleText1: ; 5989d (16:589d) TX_FAR _Route15EndBattleText1 db "@" Route15AfterBattleText1: ; 598a2 (16:58a2) TX_FAR _Route15AfterBattleText1 db "@" Route15BattleText2: ; 598a7 (16:58a7) TX_FAR _Route15BattleText2 db "@" Route15EndBattleText2: ; 598ac (16:58ac) TX_FAR _Route15EndBattleText2 db "@" Route15AfterBattleText2: ; 598b1 (16:58b1) TX_FAR _Route15AfterBattleText2 db "@" Route15BattleText3: ; 598b6 (16:58b6) TX_FAR _Route15BattleText3 db "@" Route15EndBattleText3: ; 598bb (16:58bb) TX_FAR _Route15EndBattleText3 db "@" Route15AfterBattleText3: ; 598c0 (16:58c0) TX_FAR _Route15AfterBattleText3 db "@" Route15BattleText4: ; 598c5 (16:58c5) TX_FAR _Route15BattleText4 db "@" Route15EndBattleText4: ; 598ca (16:58ca) TX_FAR _Route15EndBattleText4 db "@" Route15AfterBattleText4: ; 598cf (16:58cf) TX_FAR _Route15AfterBattleText4 db "@" Route15BattleText5: ; 598d4 (16:58d4) TX_FAR _Route15BattleText5 db "@" Route15EndBattleText5: ; 598d9 (16:58d9) TX_FAR _Route15EndBattleText5 db "@" Route15AfterBattleText5: ; 598de (16:58de) TX_FAR _Route15AfterBattleText5 db "@" Route15BattleText6: ; 598e3 (16:58e3) TX_FAR _Route15BattleText6 db "@" Route15EndBattleText6: ; 598e8 (16:58e8) TX_FAR _Route15EndBattleText6 db "@" Route15AfterBattleText6: ; 598ed (16:58ed) TX_FAR _Route15AfterBattleText6 db "@" Route15BattleText7: ; 598f2 (16:58f2) TX_FAR _Route15BattleText7 db "@" Route15EndBattleText7: ; 598f7 (16:58f7) TX_FAR _Route15EndBattleText7 db "@" Route15AfterBattleText7: ; 598fc (16:58fc) TX_FAR _Route15AfterBattleText7 db "@" Route15BattleText8: ; 59901 (16:5901) TX_FAR _Route15BattleText8 db "@" Route15EndBattleText8: ; 59906 (16:5906) TX_FAR _Route15EndBattleText8 db "@" Route15AfterBattleText8: ; 5990b (16:590b) TX_FAR _Route15AfterBattleText8 db "@" Route15BattleText9: ; 59910 (16:5910) TX_FAR _Route15BattleText9 db "@" Route15EndBattleText9: ; 59915 (16:5915) TX_FAR _Route15EndBattleText9 db "@" Route15AfterBattleText9: ; 5991a (16:591a) TX_FAR _Route15AfterBattleText9 db "@" Route15BattleText10: ; 5991f (16:591f) TX_FAR _Route15BattleText10 db "@" Route15EndBattleText10: ; 59924 (16:5924) TX_FAR _Route15EndBattleText10 db "@" Route15AfterBattleText10: ; 59929 (16:5929) TX_FAR _Route15AfterBattleText10 db "@" Route15Text12: ; 5992e (16:592e) TX_FAR _Route15Text12 db "@" Route16Script: ; 59933 (16:5933) call EnableAutoTextBoxDrawing ld hl, Route16TrainerHeaders ld de, Route16ScriptPointers ld a, [W_ROUTE16CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROUTE16CURSCRIPT], a ret Func_59946: ; 59946 (16:5946) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_ROUTE16CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret Route16ScriptPointers: ; 59951 (16:5951) dw Route16Script0 dw Func_324c dw EndTrainerBattle dw Route16Script3 Route16Script0: ; 59959 (16:5959) ld hl, $d7e0 bit 1, [hl] jp nz, CheckFightingMapTrainers bit 0, [hl] res 0, [hl] jp z, CheckFightingMapTrainers ld a, $a ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld a, $84 ld [W_CUROPPONENT], a ; $d059 ld a, $1e ld [W_CURENEMYLVL], a ; $d127 ld a, $21 ld [$cc4d], a ld a, $11 call Predef ; indirect jump to RemoveMissableObject (f1d7 (3:71d7)) call UpdateSprites ld a, $3 ld [W_ROUTE16CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret Route16Script3: ; 5998f (16:598f) ld a, [W_ISINBATTLE] ; $d057 cp $ff jp z, Func_59946 call UpdateSprites ld a, [$cf0b] cp $2 jr z, .asm_599a8 ld a, $b ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID .asm_599a8 ld hl, $d7e0 set 1, [hl] call Delay3 ld a, $0 ld [W_ROUTE16CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret Route16TextPointers: ; 599b9 (16:59b9) dw Route16Text1 dw Route16Text2 dw Route16Text3 dw Route16Text4 dw Route16Text5 dw Route16Text6 dw Route16Text7 dw Route16Text8 dw Route16Text9 dw Route16Text10 dw Route16Text11 Route16TrainerHeaders: ; 599cf (16:59cf) Route16TrainerHeader0: ; 599cf (16:59cf) db $1 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7df ; flag's byte dw Route16BattleText1 ; 0x5a22 TextBeforeBattle dw Route16AfterBattleText1 ; 0x5a2c TextAfterBattle dw Route16EndBattleText1 ; 0x5a27 TextEndBattle dw Route16EndBattleText1 ; 0x5a27 TextEndBattle Route16TrainerHeader1: ; 599db (16:59db) db $2 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7df ; flag's byte dw Route16BattleText2 ; 0x5a3b TextBeforeBattle dw Route16AfterBattleText2 ; 0x5a45 TextAfterBattle dw Route16EndBattleText2 ; 0x5a40 TextEndBattle dw Route16EndBattleText2 ; 0x5a40 TextEndBattle Route16TrainerHeader2: ; 599e7 (16:59e7) db $3 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7df ; flag's byte dw Route16BattleText3 ; 0x5a54 TextBeforeBattle dw Route16AfterBattleText3 ; 0x5a5e TextAfterBattle dw Route16EndBattleText3 ; 0x5a59 TextEndBattle dw Route16EndBattleText3 ; 0x5a59 TextEndBattle Route16TrainerHeader3: ; 599f3 (16:59f3) db $4 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7df ; flag's byte dw Route16BattleText4 ; 0x5a6d TextBeforeBattle dw Route16AfterBattleText4 ; 0x5a77 TextAfterBattle dw Route16EndBattleText4 ; 0x5a72 TextEndBattle dw Route16EndBattleText4 ; 0x5a72 TextEndBattle Route16TrainerHeader4: ; 599ff (16:59ff) db $5 ; flag's bit db ($2 << 4) ; trainer's view range dw $d7df ; flag's byte dw Route16BattleText5 ; 0x5a86 TextBeforeBattle dw Route16AfterBattleText5 ; 0x5a90 TextAfterBattle dw Route16EndBattleText5 ; 0x5a8b TextEndBattle dw Route16EndBattleText5 ; 0x5a8b TextEndBattle Route16TrainerHeader5: ; 59a0b (16:5a0b) db $6 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7df ; flag's byte dw Route16BattleText6 ; 0x5a9f TextBeforeBattle dw Route16AfterBattleText6 ; 0x5aa9 TextAfterBattle dw Route16EndBattleText6 ; 0x5aa4 TextEndBattle dw Route16EndBattleText6 ; 0x5aa4 TextEndBattle db $ff Route16Text1: ; 59a18 (16:5a18) db $08 ; asm ld hl, Route16TrainerHeader0 call TalkToTrainer jp TextScriptEnd Route16BattleText1: ; 59a22 (16:5a22) TX_FAR _Route16BattleText1 db "@" Route16EndBattleText1: ; 59a27 (16:5a27) TX_FAR _Route16EndBattleText1 db "@" Route16AfterBattleText1: ; 59a2c (16:5a2c) TX_FAR _Route16AfterBattleText1 db "@" Route16Text2: ; 59a31 (16:5a31) db $08 ; asm ld hl, Route16TrainerHeader1 call TalkToTrainer jp TextScriptEnd Route16BattleText2: ; 59a3b (16:5a3b) TX_FAR _Route16BattleText2 db "@" Route16EndBattleText2: ; 59a40 (16:5a40) TX_FAR _Route16EndBattleText2 db "@" Route16AfterBattleText2: ; 59a45 (16:5a45) TX_FAR _Route16AfterBattleText2 db "@" Route16Text3: ; 59a4a (16:5a4a) db $08 ; asm ld hl, Route16TrainerHeader2 call TalkToTrainer jp TextScriptEnd Route16BattleText3: ; 59a54 (16:5a54) TX_FAR _Route16BattleText3 db "@" Route16EndBattleText3: ; 59a59 (16:5a59) TX_FAR _Route16EndBattleText3 db "@" Route16AfterBattleText3: ; 59a5e (16:5a5e) TX_FAR _Route16AfterBattleText3 db "@" Route16Text4: ; 59a63 (16:5a63) db $08 ; asm ld hl, Route16TrainerHeader3 call TalkToTrainer jp TextScriptEnd Route16BattleText4: ; 59a6d (16:5a6d) TX_FAR _Route16BattleText4 db "@" Route16EndBattleText4: ; 59a72 (16:5a72) TX_FAR _Route16EndBattleText4 db "@" Route16AfterBattleText4: ; 59a77 (16:5a77) TX_FAR _Route16AfterBattleText4 db "@" Route16Text5: ; 59a7c (16:5a7c) db $08 ; asm ld hl, Route16TrainerHeader4 call TalkToTrainer jp TextScriptEnd Route16BattleText5: ; 59a86 (16:5a86) TX_FAR _Route16BattleText5 db "@" Route16EndBattleText5: ; 59a8b (16:5a8b) TX_FAR _Route16EndBattleText5 db "@" Route16AfterBattleText5: ; 59a90 (16:5a90) TX_FAR _Route16AfterBattleText5 db "@" Route16Text6: ; 59a95 (16:5a95) db $08 ; asm ld hl, Route16TrainerHeader5 call TalkToTrainer jp TextScriptEnd Route16BattleText6: ; 59a9f (16:5a9f) TX_FAR _Route16BattleText6 db "@" Route16EndBattleText6: ; 59aa4 (16:5aa4) TX_FAR _Route16EndBattleText6 db "@" Route16AfterBattleText6: ; 59aa9 (16:5aa9) TX_FAR _Route16AfterBattleText6 db "@" Route16Text7: ; 59aae (16:5aae) TX_FAR _Route16Text7 db "@" Route16Text10: ; 59ab3 (16:5ab3) TX_FAR _UnnamedText_59ab3 db "@" Route16Text11: ; 59ab8 (16:5ab8) TX_FAR _UnnamedText_59ab8 db "@" Route16Text8: ; 59abd (16:5abd) TX_FAR _Route16Text8 db "@" Route16Text9: ; 59ac2 (16:5ac2) TX_FAR _Route16Text9 db "@" Route18Script: ; 59ac7 (16:5ac7) call EnableAutoTextBoxDrawing ld hl, Route18TrainerHeaders ld de, Route18ScriptPointers ld a, [W_ROUTE18CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_ROUTE18CURSCRIPT], a ret Route18ScriptPointers: ; 59ada (16:5ada) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle Route18TextPointers: ; 59ae0 (16:5ae0) dw Route18Text1 dw Route18Text2 dw Route18Text3 dw Route18Text4 dw Route18Text5 Route18TrainerHeaders: ; 59aea (16:5aea) Route18TrainerHeader0: ; 59aea (16:5aea) db $1 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7e3 ; flag's byte dw Route18BattleText1 ; 0x5b19 TextBeforeBattle dw Route18AfterBattleText1 ; 0x5b23 TextAfterBattle dw Route18EndBattleText1 ; 0x5b1e TextEndBattle dw Route18EndBattleText1 ; 0x5b1e TextEndBattle Route18TrainerHeader1: ; 59af6 (16:5af6) db $2 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7e3 ; flag's byte dw Route18BattleText2 ; 0x5b32 TextBeforeBattle dw Route18AfterBattleText2 ; 0x5b3c TextAfterBattle dw Route18EndBattleText2 ; 0x5b37 TextEndBattle dw Route18EndBattleText2 ; 0x5b37 TextEndBattle Route18TrainerHeader2: ; 59b02 (16:5b02) db $3 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7e3 ; flag's byte dw Route18BattleText3 ; 0x5b4b TextBeforeBattle dw Route18AfterBattleText3 ; 0x5b55 TextAfterBattle dw Route18EndBattleText3 ; 0x5b50 TextEndBattle dw Route18EndBattleText3 ; 0x5b50 TextEndBattle db $ff Route18Text1: ; 59b0f (16:5b0f) db $08 ; asm ld hl, Route18TrainerHeader0 call TalkToTrainer jp TextScriptEnd Route18BattleText1: ; 59b19 (16:5b19) TX_FAR _Route18BattleText1 db "@" Route18EndBattleText1: ; 59b1e (16:5b1e) TX_FAR _Route18EndBattleText1 db "@" Route18AfterBattleText1: ; 59b23 (16:5b23) TX_FAR _Route18AfterBattleText1 db "@" Route18Text2: ; 59b28 (16:5b28) db $08 ; asm ld hl, Route18TrainerHeader1 call TalkToTrainer jp TextScriptEnd Route18BattleText2: ; 59b32 (16:5b32) TX_FAR _Route18BattleText2 db "@" Route18EndBattleText2: ; 59b37 (16:5b37) TX_FAR _Route18EndBattleText2 db "@" Route18AfterBattleText2: ; 59b3c (16:5b3c) TX_FAR _Route18AfterBattleText2 db "@" Route18Text3: ; 59b41 (16:5b41) db $08 ; asm ld hl, Route18TrainerHeader2 call TalkToTrainer jp TextScriptEnd Route18BattleText3: ; 59b4b (16:5b4b) TX_FAR _Route18BattleText3 db "@" Route18EndBattleText3: ; 59b50 (16:5b50) TX_FAR _Route18EndBattleText3 db "@" Route18AfterBattleText3: ; 59b55 (16:5b55) TX_FAR _Route18AfterBattleText3 db "@" Route18Text4: ; 59b5a (16:5b5a) TX_FAR _Route18Text4 db "@" Route18Text5: ; 59b5f (16:5b5f) TX_FAR _Route18Text5 db "@" FanClub_h: ; 0x59b64 to 0x59b70 (12 bytes) (id=90) db $10 ; tileset db POKEMON_FAN_CLUB_HEIGHT, POKEMON_FAN_CLUB_WIDTH ; dimensions (y, x) dw FanClubBlocks, FanClubTextPointers, FanClubScript ; blocks, texts, scripts db $00 ; connections dw FanClubObject ; objects FanClubScript: ; 59b70 (16:5b70) jp EnableAutoTextBoxDrawing Func_59b73: ; 59b73 (16:5b73) ld a, [$d771] bit 1, a ret nz ld b, $6 call IsItemInBag ret nz ld b, $2d jp IsItemInBag FanClubTextPointers: ; 59b84 (16:5b84) dw FanClubText1 dw FanClubText2 dw FanClubText3 dw FanClubText4 dw FanClubText5 dw FanClubText6 dw FanClubText7 dw FanClubText8 FanClubText1: ; 59b94 (16:5b94) db $08 ; asm ld a, [$d771] bit 7, a jr nz, asm_67b22 ; 0x59b9a ld hl, UnnamedText_59bb7 call PrintText ld hl, $d771 set 6, [hl] jr asm_64f01 ; 0x59ba7 asm_67b22 ; 0x59ba9 ld hl, UnnamedText_59bbc call PrintText ld hl, $d771 res 7, [hl] asm_64f01 ; 0x59bb4 jp TextScriptEnd UnnamedText_59bb7: ; 59bb7 (16:5bb7) TX_FAR _UnnamedText_59bb7 db "@" UnnamedText_59bbc: ; 59bbc (16:5bbc) TX_FAR _UnnamedText_59bbc db "@" FanClubText2: ; 59bc1 (16:5bc1) db $08 ; asm ld a, [$d771] bit 6, a jr nz, asm_5cd59 ; 0x59bc7 ld hl, UnnamedText_59be4 call PrintText ld hl, $d771 set 7, [hl] jr asm_59625 ; 0x59bd4 asm_5cd59 ; 0x59bd6 ld hl, UnnamedText_59be9 call PrintText ld hl, $d771 res 6, [hl] asm_59625 ; 0x59be1 jp TextScriptEnd UnnamedText_59be4: ; 59be4 (16:5be4) TX_FAR _UnnamedText_59be4 db "@" UnnamedText_59be9: ; 59be9 (16:5be9) TX_FAR _UnnamedText_59be9 db "@" FanClubText3: ; 59bee (16:5bee) db $8 ld hl, UnnamedText_59c00 call PrintText ld a, PIKACHU call PlayCry call WaitForSoundToFinish jp TextScriptEnd UnnamedText_59c00: ; 59c00 (16:5c00) TX_FAR _UnnamedText_59c00 db "@" FanClubText4: ; 59c05 (16:5c05) db $08 ; asm ld hl, UnnamedText_59c17 call PrintText ld a, SEEL call PlayCry call WaitForSoundToFinish jp TextScriptEnd UnnamedText_59c17: ; 59c17 (16:5c17) TX_FAR _UnnamedText_59c17 db "@" FanClubText5: ; 59c1c (16:5c1c) db $08 ; asm call Func_59b73 jr nz, asm_38bb3 ; 0x59c20 ld hl, UnnamedText_59c65 call PrintText call YesNoChoice ld a, [$cc26] and a jr nz, asm_2c8d7 ; 0x59c2f ld hl, UnnamedText_59c6a call PrintText ld bc, (BIKE_VOUCHER << 8) | 1 call GiveItem jr nc, .BagFull ld hl, ReceivedBikeVoucherText call PrintText ld hl, $d771 set 1, [hl] jr asm_d3c26 ; 0x59c4a .BagFull ld hl, UnnamedText_59c83 call PrintText jr asm_d3c26 ; 0x59c52 asm_2c8d7 ; 0x59c54 ld hl, UnnamedText_59c79 call PrintText jr asm_d3c26 ; 0x59c5a asm_38bb3 ; 0x59c5c ld hl, UnnamedText_59c7e call PrintText asm_d3c26 ; 0x59c62 jp TextScriptEnd UnnamedText_59c65: ; 59c65 (16:5c65) TX_FAR _UnnamedText_59c65 db "@" UnnamedText_59c6a: ; 59c6a (16:5c6a) TX_FAR _UnnamedText_59c6a db "@" ReceivedBikeVoucherText: ; 59c6f (16:5c6f) TX_FAR _ReceivedBikeVoucherText ; 0x9a82e db $11 TX_FAR _UnnamedText_59c74 ; 0x9a844 db "@" UnnamedText_59c79: ; 59c79 (16:5c79) TX_FAR _UnnamedText_59c79 db "@" UnnamedText_59c7e: ; 59c7e (16:5c7e) TX_FAR _UnnamedText_59c7e db "@" UnnamedText_59c83: ; 59c83 (16:5c83) TX_FAR _UnnamedText_59c83 db "@" FanClubText6: ; 59c88 (16:5c88) TX_FAR _FanClubText6 db "@" FanClubText7: ; 59c8d (16:5c8d) TX_FAR _FanClubText7 db "@" FanClubText8: ; 59c92 (16:5c92) TX_FAR _FanClubText8 db "@" FanClubObject: ; 0x59c97 (size=62) db $d ; border tile db $2 ; warps db $7, $2, $1, $ff db $7, $3, $1, $ff db $2 ; signs db $0, $1, $7 ; FanClubText7 db $0, $6, $8 ; FanClubText8 db $6 ; people db SPRITE_FISHER2, $3 + 4, $6 + 4, $ff, $d2, $1 ; person db SPRITE_GIRL, $3 + 4, $1 + 4, $ff, $d3, $2 ; person db SPRITE_CLEFAIRY, $4 + 4, $6 + 4, $ff, $d2, $3 ; person db SPRITE_SEEL, $4 + 4, $1 + 4, $ff, $d3, $4 ; person db SPRITE_GENTLEMAN, $1 + 4, $3 + 4, $ff, $d0, $5 ; person db SPRITE_CABLE_CLUB_WOMAN, $1 + 4, $5 + 4, $ff, $d0, $6 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 FanClubBlocks: ; 59cd5 (16:5cd5) INCBIN "maps/fanclub.blk" SilphCo2_h: ; 0x59ce5 to 0x59cf1 (12 bytes) (id=207) db $16 ; tileset db SILPH_CO_2F_HEIGHT, SILPH_CO_2F_WIDTH ; dimensions (y, x) dw SilphCo2Blocks, SilphCo2TextPointers, SilphCo2Script ; blocks, texts, scripts db $00 ; connections dw SilphCo2Object ; objects SilphCo2Script: ; 59cf1 (16:5cf1) call SilphCo2Script_59d07 call EnableAutoTextBoxDrawing ld hl, SilphCo2TrainerHeaders ld de, SilphCo2ScriptPointers ld a, [W_SILPHCO2CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_SILPHCO2CURSCRIPT], a ret SilphCo2Script_59d07: ; 59d07 (16:5d07) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld hl, DataTable_59d3e call Func_59d43 call Func_59d6f ld a, [$d826] bit 5, a jr nz, .asm_59d2e push af ld a, $54 ld [$d09f], a ld bc, $0202 ld a, $17 call Predef pop af .asm_59d2e bit 6, a ret nz ld a, $54 ld [$d09f], a ld bc, $0502 ld a, $17 jp Predef DataTable_59d3e: ; 59d3e (16:5d3e) db $02,$02,$05,$02,$FF Func_59d43: ; 59d43 (16:5d43) push hl ld hl, $d73f ld a, [hli] ld b, a ld a, [hl] ld c, a xor a ld [$FF00+$e0], a pop hl .asm_59d4f ld a, [hli] cp $ff jr z, .asm_59d6b push hl ld hl, $ffe0 inc [hl] pop hl cp b jr z, .asm_59d60 inc hl jr .asm_59d4f .asm_59d60 ld a, [hli] cp c jr nz, .asm_59d4f ld hl, $d73f xor a ld [hli], a ld [hl], a ret .asm_59d6b xor a ld [$FF00+$e0], a ret Func_59d6f: ; 59d6f (16:5d6f) ld hl, $d826 ld a, [$ffe0] and a ret z cp $1 jr nz, .asm_59d7d set 5, [hl] ret .asm_59d7d set 6, [hl] ret SilphCo2ScriptPointers: ; 59d80 (16:5d80) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle SilphCo2TextPointers: ; 59d86 (16:5d86) dw SilphCo2Text1 dw SilphCo2Text2 dw SilphCo2Text3 dw SilphCo2Text4 dw SilphCo2Text5 SilphCo2TrainerHeaders: ; 59d90 (16:5d90) SilphCo2TrainerHeader0: ; 59d90 (16:5d90) db $2 ; flag's bit db ($3 << 4) ; trainer's view range dw $d825 ; flag's byte dw SilphCo2BattleText1 ; 0x5e2a TextBeforeBattle dw SilphCo2AfterBattleText1 ; 0x5e34 TextAfterBattle dw SilphCo2EndBattleText1 ; 0x5e2f TextEndBattle dw SilphCo2EndBattleText1 ; 0x5e2f TextEndBattle SilphCo2TrainerHeader1: ; 59d9c (16:5d9c) db $3 ; flag's bit db ($4 << 4) ; trainer's view range dw $d825 ; flag's byte dw SilphCo2BattleText2 ; 0x5e39 TextBeforeBattle dw SilphCo2AfterBattleText2 ; 0x5e43 TextAfterBattle dw SilphCo2EndBattleText2 ; 0x5e3e TextEndBattle dw SilphCo2EndBattleText2 ; 0x5e3e TextEndBattle SilphCo2TrainerHeader2: ; 59da8 (16:5da8) db $4 ; flag's bit db ($3 << 4) ; trainer's view range dw $d825 ; flag's byte dw SilphCo2BattleText3 ; 0x5e48 TextBeforeBattle dw SilphCo2AfterBattleText3 ; 0x5e52 TextAfterBattle dw SilphCo2EndBattleText3 ; 0x5e4d TextEndBattle dw SilphCo2EndBattleText3 ; 0x5e4d TextEndBattle SilphCo2TrainerHeader3: ; 59db4 (16:5db4) db $5 ; flag's bit db ($3 << 4) ; trainer's view range dw $d825 ; flag's byte dw SilphCo2BattleText4 ; 0x5e57 TextBeforeBattle dw SilphCo2AfterBattleText4 ; 0x5e61 TextAfterBattle dw SilphCo2EndBattleText4 ; 0x5e5c TextEndBattle dw SilphCo2EndBattleText4 ; 0x5e5c TextEndBattle db $ff SilphCo2Text1: ; 59dc1 (16:5dc1) db $08 ; asm ld a, [$d826] bit 7, a jr nz, asm_b8a0d ; 0x59dc7 ld hl, UnnamedText_59ded call PrintText ld bc, (TM_36 << 8) | 1 call GiveItem ld hl, TM36NoRoomText jr nc, asm_2c1e0 ; 0x59dd8 ld hl, $d826 set 7, [hl] ld hl, ReceivedTM36Text jr asm_2c1e0 ; 0x59de2 asm_b8a0d ; 0x59de4 ld hl, TM36ExplanationText asm_2c1e0 ; 0x59de7 call PrintText jp TextScriptEnd UnnamedText_59ded: ; 59ded (16:5ded) TX_FAR _UnnamedText_59ded db "@" ReceivedTM36Text: ; 59df2 (16:5df2) TX_FAR _ReceivedTM36Text ; 0x824ba db $0B, "@" TM36ExplanationText: ; 59df8 (16:5df8) TX_FAR _TM36ExplanationText db "@" TM36NoRoomText: ; 59dfd (16:5dfd) TX_FAR _TM36NoRoomText db "@" SilphCo2Text2: ; 59e02 (16:5e02) db $08 ; asm ld hl, SilphCo2TrainerHeader0 call TalkToTrainer jp TextScriptEnd SilphCo2Text3: ; 59e0c (16:5e0c) db $08 ; asm ld hl, SilphCo2TrainerHeader1 call TalkToTrainer jp TextScriptEnd SilphCo2Text4: ; 59e16 (16:5e16) db $08 ; asm ld hl, SilphCo2TrainerHeader2 call TalkToTrainer jp TextScriptEnd SilphCo2Text5: ; 59e20 (16:5e20) db $08 ; asm ld hl, SilphCo2TrainerHeader3 call TalkToTrainer jp TextScriptEnd SilphCo2BattleText1: ; 59e2a (16:5e2a) TX_FAR _SilphCo2BattleText1 db "@" SilphCo2EndBattleText1: ; 59e2f (16:5e2f) TX_FAR _SilphCo2EndBattleText1 db "@" SilphCo2AfterBattleText1: ; 59e34 (16:5e34) TX_FAR _SilphCo2AfterBattleText1 db "@" SilphCo2BattleText2: ; 59e39 (16:5e39) TX_FAR _SilphCo2BattleText2 db "@" SilphCo2EndBattleText2: ; 59e3e (16:5e3e) TX_FAR _SilphCo2EndBattleText2 db "@" SilphCo2AfterBattleText2: ; 59e43 (16:5e43) TX_FAR _SilphCo2AfterBattleText2 db "@" SilphCo2BattleText3: ; 59e48 (16:5e48) TX_FAR _SilphCo2BattleText3 db "@" SilphCo2EndBattleText3: ; 59e4d (16:5e4d) TX_FAR _SilphCo2EndBattleText3 db "@" SilphCo2AfterBattleText3: ; 59e52 (16:5e52) TX_FAR _SilphCo2AfterBattleText3 db "@" SilphCo2BattleText4: ; 59e57 (16:5e57) TX_FAR _SilphCo2BattleText4 db "@" SilphCo2EndBattleText4: ; 59e5c (16:5e5c) TX_FAR _SilphCo2EndBattleText4 db "@" SilphCo2AfterBattleText4: ; 59e61 (16:5e61) TX_FAR _SilphCo2AfterBattleText4 db "@" SilphCo2Object: ; 0x59e66 (size=98) db $2e ; border tile db $7 ; warps db $0, $18, $2, SILPH_CO_1F db $0, $1a, $0, SILPH_CO_3F db $0, $14, $0, SILPH_CO_ELEVATOR db $3, $3, $6, SILPH_CO_3F db $3, $d, $4, SILPH_CO_8F db $f, $1b, $5, SILPH_CO_8F db $f, $9, $4, SILPH_CO_6F db $0 ; signs db $5 ; people db SPRITE_ERIKA, $1 + 4, $a + 4, $ff, $d1, $1 ; person db SPRITE_OAK_AIDE, $c + 4, $5 + 4, $ff, $d0, $42, SCIENTIST + $C8, $2 ; trainer db SPRITE_OAK_AIDE, $d + 4, $18 + 4, $ff, $d2, $43, SCIENTIST + $C8, $3 ; trainer db SPRITE_ROCKET, $b + 4, $10 + 4, $ff, $d1, $44, ROCKET + $C8, $17 ; trainer db SPRITE_ROCKET, $7 + 4, $18 + 4, $ff, $d1, $45, ROCKET + $C8, $18 ; trainer ; warp-to EVENT_DISP $f, $0, $18 ; SILPH_CO_1F EVENT_DISP $f, $0, $1a ; SILPH_CO_3F EVENT_DISP $f, $0, $14 ; SILPH_CO_ELEVATOR EVENT_DISP $f, $3, $3 ; SILPH_CO_3F EVENT_DISP $f, $3, $d ; SILPH_CO_8F EVENT_DISP $f, $f, $1b ; SILPH_CO_8F EVENT_DISP $f, $f, $9 ; SILPH_CO_6F SilphCo2Blocks: ; 59ec8 (16:5ec8) INCBIN "maps/silphco2.blk" SilphCo3_h: ; 0x59f4f to 0x59f5b (12 bytes) (id=208) db $16 ; tileset db SILPH_CO_3F_HEIGHT, SILPH_CO_3F_WIDTH ; dimensions (y, x) dw SilphCo3Blocks, SilphCo3TextPointers, SilphCo3Script ; blocks, texts, scripts db $00 ; connections dw SilphCo3Object ; objects SilphCo3Script: ; 59f5b (16:5f5b) call SilphCo3Script_59f71 call EnableAutoTextBoxDrawing ld hl, SilphCo3TrainerHeaders ld de, SilphCo3ScriptPointers ld a, [W_SILPHCO3CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_SILPHCO3CURSCRIPT], a ret SilphCo3Script_59f71: ; 59f71 (16:5f71) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld hl, DataTable_59fa8 ; $5fa8 call Func_59d43 call Func_59fad ld a, [$d828] bit 0, a jr nz, .asm_59f98 push af ld a, $5f ld [$d09f], a ld bc, $404 ld a, $17 call Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) pop af .asm_59f98 bit 1, a ret nz ld a, $5f ld [$d09f], a ld bc, $408 ld a, $17 jp Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) DataTable_59fa8: ; 59fa8 (16:5fa8) db $04,$04,$04,$08,$FF Func_59fad: ; 59fad (16:5fad) ld hl, $d828 ld a, [$FF00+$e0] and a ret z cp $1 jr nz, .asm_59fbb set 0, [hl] ret .asm_59fbb set 1, [hl] ret SilphCo3ScriptPointers: ; 59fbe (16:5fbe) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle SilphCo3TextPointers: ; 59fc4 (16:5fc4) dw SilphCo3Text1 dw SilphCo3Text2 dw SilphCo3Text3 dw Predef5CText SilphCo3TrainerHeaders: ; 59fcc (16:5fcc) SilphCo3TrainerHeader0: ; 59fcc (16:5fcc) db $2 ; flag's bit db ($2 << 4) ; trainer's view range dw $d827 ; flag's byte dw SilphCo3BattleText1 ; 0x600d TextBeforeBattle dw SilphCo3AfterBattleText1 ; 0x6017 TextAfterBattle dw SilphCo3EndBattleText1 ; 0x6012 TextEndBattle dw SilphCo3EndBattleText1 ; 0x6012 TextEndBattle SilphCo3TrainerHeader1: ; 59fd8 (16:5fd8) db $3 ; flag's bit db ($3 << 4) ; trainer's view range dw $d827 ; flag's byte dw SilphCo3BattleText2 ; 0x6026 TextBeforeBattle dw SilphCo3AfterBattleText2 ; 0x6030 TextAfterBattle dw SilphCo3EndBattleText2 ; 0x602b TextEndBattle dw SilphCo3EndBattleText2 ; 0x602b TextEndBattle db $ff SilphCo3Text1: ; 59fe5 (16:5fe5) db $08 ; asm ld a, [$d838] bit 7, a ld hl, UnnamedText_59ffe jr nz, asm_8c56f ; 0x59fee ld hl, UnnamedText_59ff9 asm_8c56f ; 0x59ff3 call PrintText jp TextScriptEnd UnnamedText_59ff9: ; 59ff9 (16:5ff9) TX_FAR _UnnamedText_59ff9 db "@" UnnamedText_59ffe: ; 59ffe (16:5ffe) TX_FAR _UnnamedText_59ffe db "@" SilphCo3Text2: ; 5a003 (16:6003) db $08 ; asm ld hl, SilphCo3TrainerHeader0 call TalkToTrainer jp TextScriptEnd SilphCo3BattleText1: ; 5a00d (16:600d) TX_FAR _SilphCo3BattleText1 db "@" SilphCo3EndBattleText1: ; 5a012 (16:6012) TX_FAR _SilphCo3EndBattleText1 db "@" SilphCo3AfterBattleText1: ; 5a017 (16:6017) TX_FAR _SilphCo3AfterBattleText1 db "@" SilphCo3Text3: ; 5a01c (16:601c) db $08 ; asm ld hl, SilphCo3TrainerHeader1 call TalkToTrainer jp TextScriptEnd SilphCo3BattleText2: ; 5a026 (16:6026) TX_FAR _SilphCo3BattleText2 db "@" SilphCo3EndBattleText2: ; 5a02b (16:602b) TX_FAR _SilphCo3EndBattleText2 db "@" SilphCo3AfterBattleText2: ; 5a030 (16:6030) TX_FAR _SilphCo3AfterBattleText2 db "@" SilphCo3Object: ; 0x5a035 (size=113) db $2e ; border tile db $a ; warps db $0, $1a, $1, SILPH_CO_2F db $0, $18, $0, SILPH_CO_4F db $0, $14, $0, SILPH_CO_ELEVATOR db $b, $17, $9, SILPH_CO_3F db $3, $3, $5, SILPH_CO_5F db $f, $3, $6, SILPH_CO_5F db $3, $1b, $3, SILPH_CO_2F db $b, $3, $3, SILPH_CO_9F db $b, $b, $4, SILPH_CO_7F db $f, $1b, $3, SILPH_CO_3F db $0 ; signs db $4 ; people db SPRITE_LAPRAS_GIVER, $8 + 4, $18 + 4, $ff, $ff, $1 ; person db SPRITE_ROCKET, $7 + 4, $14 + 4, $ff, $d2, $42, ROCKET + $C8, $19 ; trainer db SPRITE_OAK_AIDE, $9 + 4, $7 + 4, $ff, $d0, $43, SCIENTIST + $C8, $4 ; trainer db SPRITE_BALL, $5 + 4, $8 + 4, $ff, $ff, $84, HYPER_POTION ; item ; warp-to EVENT_DISP $f, $0, $1a ; SILPH_CO_2F EVENT_DISP $f, $0, $18 ; SILPH_CO_4F EVENT_DISP $f, $0, $14 ; SILPH_CO_ELEVATOR EVENT_DISP $f, $b, $17 ; SILPH_CO_3F EVENT_DISP $f, $3, $3 ; SILPH_CO_5F EVENT_DISP $f, $f, $3 ; SILPH_CO_5F EVENT_DISP $f, $3, $1b ; SILPH_CO_2F EVENT_DISP $f, $b, $3 ; SILPH_CO_9F EVENT_DISP $f, $b, $b ; SILPH_CO_7F EVENT_DISP $f, $f, $1b ; SILPH_CO_3F SilphCo3Blocks: ; 5a0a6 (16:60a6) INCBIN "maps/silphco3.blk" SilphCo10_h: ; 0x5a12d to 0x5a139 (12 bytes) (id=234) db $16 ; tileset db SILPH_CO_10F_HEIGHT, SILPH_CO_10F_WIDTH ; dimensions (y, x) dw SilphCo10Blocks, SilphCo10TextPointers, SilphCo10Script ; blocks, texts, scripts db $00 ; connections dw SilphCo10Object ; objects SilphCo10Script: ; 5a139 (16:6139) call SilphCo10Script_5a14f call EnableAutoTextBoxDrawing ld hl, SilphCo10TrainerHeaders ld de, SilphCo10ScriptPointers ld a, [W_SILPHCO10CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_SILPHCO10CURSCRIPT], a ret SilphCo10Script_5a14f: ; 5a14f (16:614f) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld hl, DataTable_5a173 ; $6173 call Func_59d43 call Func_5a176 ld a, [$d836] bit 0, a ret nz ld a, $54 ld [$d09f], a ld bc, $405 ld a, $17 jp Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) DataTable_5a173: ; 5a173 (16:6173) db $04,$05,$FF Func_5a176: ; 5a176 (16:6176) ld a, [$FF00+$e0] and a ret z ld hl, $d836 set 0, [hl] ret SilphCo10ScriptPointers: ; 5a180 (16:6180) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle SilphCo10TextPointers: ; 5a186 (16:6186) dw SilphCo10Text1 dw SilphCo10Text2 dw SilphCo10Text3 dw Predef5CText dw Predef5CText dw Predef5CText SilphCo10TrainerHeaders: ; 5a192 (16:6192) SilphCo10TrainerHeader0: ; 5a192 (16:6192) db $1 ; flag's bit db ($3 << 4) ; trainer's view range dw $d835 ; flag's byte dw SilphCo10BattleText1 ; 0x61dd TextBeforeBattle dw SilphCo10AfterBattleText1 ; 0x61e7 TextAfterBattle dw SilphCo10EndBattleText1 ; 0x61e2 TextEndBattle dw SilphCo10EndBattleText1 ; 0x61e2 TextEndBattle SilphCo10TrainerHeader1: ; 5a19e (16:619e) db $2 ; flag's bit db ($4 << 4) ; trainer's view range dw $d835 ; flag's byte dw SilphCo10BattleText2 ; 0x61ec TextBeforeBattle dw SilphCo10AfterBattleText2 ; 0x61f6 TextAfterBattle dw SilphCo10EndBattleText2 ; 0x61f1 TextEndBattle dw SilphCo10EndBattleText2 ; 0x61f1 TextEndBattle db $ff SilphCo10Text1: ; 5a1ab (16:61ab) db $08 ; asm ld hl, SilphCo10TrainerHeader0 call TalkToTrainer jp TextScriptEnd SilphCo10Text2: ; 5a1b5 (16:61b5) db $08 ; asm ld hl, SilphCo10TrainerHeader1 call TalkToTrainer jp TextScriptEnd SilphCo10Text3: ; 5a1bf (16:61bf) db $08 ; asm ld a, [$d838] bit 7, a ld hl, UnnamedText_5a1d8 jr nz, .asm_cf85f ld hl, UnnamedText_5a1d3 .asm_cf85f call PrintText jp TextScriptEnd UnnamedText_5a1d3: ; 5a1d3 (16:61d3) TX_FAR _UnnamedText_5a1d3 db "@" UnnamedText_5a1d8: ; 5a1d8 (16:61d8) TX_FAR _UnnamedText_5a1d8 db "@" SilphCo10BattleText1: ; 5a1dd (16:61dd) TX_FAR _SilphCo10BattleText1 db "@" SilphCo10EndBattleText1: ; 5a1e2 (16:61e2) TX_FAR _SilphCo10EndBattleText1 db "@" SilphCo10AfterBattleText1: ; 5a1e7 (16:61e7) TX_FAR _SilphCo10AfterBattleText1 db "@" SilphCo10BattleText2: ; 5a1ec (16:61ec) TX_FAR _SilphCo10BattleText2 db "@" SilphCo10EndBattleText2: ; 5a1f1 (16:61f1) TX_FAR _SilphCo10EndBattleText2 db "@" SilphCo10AfterBattleText2: ; 5a1f6 (16:61f6) TX_FAR _SilphCo10AfterBattleText2 db "@" SilphCo10Object: ; 0x5a1fb (size=95) db $2e ; border tile db $6 ; warps db $0, $8, $0, SILPH_CO_9F db $0, $a, $0, SILPH_CO_11F db $0, $c, $0, SILPH_CO_ELEVATOR db $b, $9, $3, SILPH_CO_4F db $f, $d, $5, SILPH_CO_4F db $7, $d, $6, SILPH_CO_4F db $0 ; signs db $6 ; people db SPRITE_ROCKET, $9 + 4, $1 + 4, $ff, $d3, $41, ROCKET + $C8, $27 ; trainer db SPRITE_OAK_AIDE, $2 + 4, $a + 4, $ff, $d2, $42, SCIENTIST + $C8, $b ; trainer db SPRITE_ERIKA, $f + 4, $9 + 4, $fe, $0, $3 ; person db SPRITE_BALL, $c + 4, $2 + 4, $ff, $ff, $84, TM_26 ; item db SPRITE_BALL, $e + 4, $4 + 4, $ff, $ff, $85, RARE_CANDY ; item db SPRITE_BALL, $b + 4, $5 + 4, $ff, $ff, $86, CARBOS ; item ; warp-to EVENT_DISP $8, $0, $8 ; SILPH_CO_9F EVENT_DISP $8, $0, $a ; SILPH_CO_11F EVENT_DISP $8, $0, $c ; SILPH_CO_ELEVATOR EVENT_DISP $8, $b, $9 ; SILPH_CO_4F EVENT_DISP $8, $f, $d ; SILPH_CO_4F EVENT_DISP $8, $7, $d ; SILPH_CO_4F SilphCo10Blocks: ; 5a25a (16:625a) INCBIN "maps/silphco10.blk" Lance_h: ; 0x5a2a2 to 0x5a2ae (12 bytes) (id=113) db $05 ; tileset db LANCES_ROOM_HEIGHT, LANCES_ROOM_WIDTH ; dimensions (y, x) dw LanceBlocks, LanceTextPointers, LanceScript ; blocks, texts, scripts db $00 ; connections dw LanceObject ; objects LanceScript: ; 5a2ae (16:62ae) call LanceScript_5a2c4 call EnableAutoTextBoxDrawing ld hl, LanceTrainerHeaders ld de, LanceScriptPointers ld a, [W_LANCECURSCRIPT] call ExecuteCurMapScriptInTable ld [W_LANCECURSCRIPT], a ret LanceScript_5a2c4: ; 5a2c4 (16:62c4) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld a, [$d866] bit 7, a jr nz, .asm_5a2da ld a, $31 ld b, $32 jp Func_5a2de .asm_5a2da ld a, $72 ld b, $73 Func_5a2de: ; 5a2de (16:62de) push bc ld [$d09f], a ld bc, $602 call Func_5a2f0 pop bc ld a, b ld [$d09f], a ld bc, $603 Func_5a2f0: ; 5a2f0 (16:62f0) ld a, $17 jp Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) Func_5a2f5: ; 5a2f5 (16:62f5) xor a ld [W_LANCECURSCRIPT], a ret LanceScriptPointers: ; 5a2fa (16:62fa) dw LanceScript0 dw Func_324c dw LanceScript2 dw LanceScript3 dw LanceScript4 LanceScript4: ; 5a304 (16:6304) ret LanceScript0: ; 5a305 (16:6305) ld a, [$d866] bit 6, a ret nz ld hl, CoordsData_5a33e call ArePlayerCoordsInArray jp nc, CheckFightingMapTrainers xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, [wWhichTrade] ; $cd3d cp $3 jr nc, .asm_5a325 ld a, $1 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c jp DisplayTextID .asm_5a325 cp $5 jr z, Func_5a35b ld hl, $d866 bit 7, [hl] set 7, [hl] ret nz ld hl, $d126 set 5, [hl] ld a, $ad call PlaySound jp LanceScript_5a2c4 CoordsData_5a33e: ; 5a33e (16:633e) db $01,$05 db $02,$06 db $0B,$05 db $0B,$06 db $10,$18 db $FF LanceScript2: ; 5a349 (16:6349) call EndTrainerBattle ld a, [W_ISINBATTLE] ; $d057 cp $ff jp z, Func_5a2f5 ld a, $1 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c jp DisplayTextID Func_5a35b: ; 5a35b (16:635b) ld a, $ff ld [wJoypadForbiddenButtonsMask], a ld hl, $ccd3 ld de, RLEList_5a379 call DecodeRLEList dec a ld [$cd38], a call Func_3486 ld a, $3 ld [W_LANCECURSCRIPT], a ld [W_CURMAPSCRIPT], a ret RLEList_5a379: ; 5a379 (16:6379) db $40, $0C db $20, $0C db $80, $07 db $20, $06 db $FF LanceScript3: ; 5a382 (16:6382) ld a, [$cd38] and a ret nz call Delay3 xor a ld [wJoypadForbiddenButtonsMask], a ld [W_LANCECURSCRIPT], a ld [W_CURMAPSCRIPT], a ret LanceTextPointers: ; 5a395 (16:6395) dw LanceText1 LanceTrainerHeaders: ; 5a397 (16:6397) LanceTrainerHeader0: ; 5a397 (16:6397) db $1 ; flag's bit db ($0 << 4) ; trainer's view range dw $d866 ; flag's byte dw LanceBeforeBattleText ; 0x63ae TextBeforeBattle dw LanceAfterBattleText ; 0x63b8 TextAfterBattle dw LanceEndBattleText ; 0x63b3 TextEndBattle dw LanceEndBattleText ; 0x63b3 TextEndBattle db $ff LanceText1: ; 5a3a4 (16:63a4) db $08 ; asm ld hl, LanceTrainerHeader0 call TalkToTrainer jp TextScriptEnd LanceBeforeBattleText: ; 5a3ae (16:63ae) TX_FAR _LanceBeforeBattleText db "@" LanceEndBattleText: ; 5a3b3 (16:63b3) TX_FAR _LanceEndBattleText db "@" LanceAfterBattleText: ; 5a3b8 (16:63b8) TX_FAR _LanceAfterBattleText ; 0x85e9e db $8 ld hl, $d866 set 6, [hl] jp TextScriptEnd LanceObject: ; 0x5a3c5 (size=36) db $3 ; border tile db $3 ; warps db $10, $18, $2, AGATHAS_ROOM db $0, $5, $0, CHAMPIONS_ROOM db $0, $6, $0, CHAMPIONS_ROOM db $0 ; signs db $1 ; people db SPRITE_LANCE, $1 + 4, $6 + 4, $ff, $d0, $41, LANCE + $C8, $1 ; trainer ; warp-to EVENT_DISP $d, $10, $18 ; AGATHAS_ROOM EVENT_DISP $d, $0, $5 ; CHAMPIONS_ROOM EVENT_DISP $d, $0, $6 ; CHAMPIONS_ROOM LanceBlocks: ; 5a3e9 (16:63e9) INCBIN "maps/lance.blk" HallofFameRoom_h: ; 0x5a492 to 0x5a49e (12 bytes) (id=118) db $07 ; tileset db HALL_OF_FAME_HEIGHT, HALL_OF_FAME_WIDTH ; dimensions (y, x) dw HallofFameRoomBlocks, HallofFameRoomTextPointers, HallofFameRoomScript ; blocks, texts, scripts db $00 ; connections dw HallofFameRoomObject ; objects HallofFameRoomScript: ; 5a49e (16:649e) call EnableAutoTextBoxDrawing ld hl, HallofFameRoomScriptPointers ld a, [W_HALLOFFAMEROOMCURSCRIPT] jp CallFunctionInTable Func_5a4aa: ; 5a4aa (16:64aa) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_HALLOFFAMEROOMCURSCRIPT], a ret HallofFameRoomScriptPointers: ; 5a4b2 (16:64b2) dw HallofFameRoomScript0 dw HallofFameRoomScript1 dw HallofFameRoomScript2 dw HallofFameRoomScript3 HallofFameRoomScript3: ; 5a4ba (16:64ba) ret HallofFameRoomScript2: ; 5a4bb (16:64bb) call Delay3 ld a, [$d358] push af xor a ld [wJoypadForbiddenButtonsMask], a ld a, $55 call Predef pop af ld [$d358], a ld hl, W_FLAGS_D733 res 1, [hl] inc hl set 0, [hl] xor a ld hl, W_LORELEICURSCRIPT ld [hli], a ld [hli], a ld [hl], a ld [W_LANCECURSCRIPT], a ld [W_HALLOFFAMEROOMCURSCRIPT], a ld hl, $d863 ld [hli], a ld [hli], a ld [hli], a ld [hli], a ld [hl], a xor a ld [W_HALLOFFAMEROOMCURSCRIPT], a ld a, $0 ld [$d719], a ld b, BANK(SaveSAVtoSRAM) ld hl, SaveSAVtoSRAM call Bankswitch ld b, $5 .asm_5a4ff ld c, $78 call DelayFrames dec b jr nz, .asm_5a4ff ; 0x5a505 $f8 call WaitForTextScrollButtonPress jp InitGame HallofFameRoomScript0: ; 5a50d (16:650d) ld a, $ff ld [wJoypadForbiddenButtonsMask], a ld hl, $ccd3 ld de, RLEMovement5a528 call DecodeRLEList dec a ld [$cd38], a call Func_3486 ld a, $1 ld [W_HALLOFFAMEROOMCURSCRIPT], a ret RLEMovement5a528: ; 5a528 (16:6528) db $40,$5 db $ff HallofFameRoomScript1: ; 5a52b (16:652b) ld a, [$cd38] and a ret nz ld a, $1 ld [$d528], a ld a, $1 ld [$ff00+$8c], a call SetSpriteMovementBytesToFF ld a, $8 ld [$ff00+$8d], a call Func_34a6 call Delay3 xor a ld [wJoypadForbiddenButtonsMask], a inc a ld [$d528], a ld a, $1 ld [$ff00+$8c], a call DisplayTextID ld a, $ff ld [wJoypadForbiddenButtonsMask], a ld a, $8 ld [$cc4d], a ld a, $11 call Predef ld a, $2 ld [W_HALLOFFAMEROOMCURSCRIPT], a ret HallofFameRoomTextPointers: ; 5a56a (16:656a) dw HallofFameRoomText1 HallofFameRoomText1: ; 5a56c (16:656c) TX_FAR _HallofFameRoomText1 db "@" HallofFameRoomObject: ; 0x5a571 (size=26) db $3 ; border tile db $2 ; warps db $7, $4, $2, CHAMPIONS_ROOM db $7, $5, $3, CHAMPIONS_ROOM db $0 ; signs db $1 ; people db SPRITE_OAK, $2 + 4, $5 + 4, $ff, $d0, $1 ; person ; warp-to EVENT_DISP $5, $7, $4 ; CHAMPIONS_ROOM EVENT_DISP $5, $7, $5 ; CHAMPIONS_ROOM HallofFameRoomBlocks: ; 5a58b (16:658b) INCBIN "maps/halloffameroom.blk" RemoveGuardDrink: ; 5a59f (16:659f) ld hl, GuardDrinksList .drinkLoop ld a, [hli] ld [$FF00+$db], a and a ret z push hl ld b, a call IsItemInBag pop hl jr z, .drinkLoop ld b, BANK(RemoveItemByID) ld hl, RemoveItemByID jp Bankswitch GuardDrinksList: ; 5a5b7 (16:65b7) db FRESH_WATER, SODA_POP, LEMONADE, $00 SECTION "bank17",ROMX,BANK[$17] SaffronMartBlocks: ; 5c000 (17:4000) LavenderMartBlocks: ; 5c000 (17:4000) CeruleanMartBlocks: ; 5c000 (17:4000) VermilionMartBlocks: ; 5c000 (17:4000) INCBIN "maps/vermilionmart.blk" CopycatsHouseF2Blocks: ; 5c010 (17:4010) RedsHouse2FBlocks: ; 0x5c010 16? INCBIN "maps/redshouse2f.blk" MuseumF1Blocks: ; 5c020 (17:4020) INCBIN "maps/museumf1.blk" MuseumF2Blocks: ; 5c048 (17:4048) INCBIN "maps/museumf2.blk" SaffronPokecenterBlocks: ; 5c064 (17:4064) VermilionPokecenterBlocks: ; 5c064 (17:4064) LavenderPokecenterBlocks: ; 5c064 (17:4064) PewterPokecenterBlocks: ; 5c064 (17:4064) INCBIN "maps/pewterpokecenter.blk" UndergroundTunnelEntranceRoute7Blocks: ; 5c080 (17:4080) UndergroundTunnelEntranceRoute7CopyBlocks: ; 5c080 (17:4080) UndergroundTunnelEntranceRoute6Blocks: ; 5c080 (17:4080) UndergroundTunnelEntranceRoute5Blocks: ; 5c080 (17:4080) INCBIN "maps/undergroundtunnelentranceroute5.blk" Route2GateBlocks: ; 5c090 (17:4090) ViridianForestEntranceBlocks: ; 5c090 (17:4090) ViridianForestexitBlocks: ; 5c090 (17:4090) INCBIN "maps/viridianforestexit.blk" RedsHouse2F_h: ; 5c0a4 (17:40a4) db $04 ; tileset db REDS_HOUSE_2F_HEIGHT, REDS_HOUSE_2F_WIDTH ; dimensions dw RedsHouse2FBlocks, RedsHouse2FTextPointers, RedsHouse2FScript db $00 ; no connections dw RedsHouse2FObject RedsHouse2FScript: ; 5c0b0 (17:40b0) call EnableAutoTextBoxDrawing ld hl,RedsHouse2FScriptPointers ld a,[W_REDSHOUSE2CURSCRIPT] jp CallFunctionInTable RedsHouse2FScriptPointers: ; 5c0bc (17:40bc) dw RedsHouse2FScript0 dw RedsHouse2FScript1 RedsHouse2FScript0: ; 5c0c0 (17:40c0) xor a ld [H_CURRENTPRESSEDBUTTONS],a ld a,8 ld [$D528],a ld a,1 ld [W_REDSHOUSE2CURSCRIPT],a ret RedsHouse2FScript1: ; 5c0ce (17:40ce) ret RedsHouse2FTextPointers: ; 5c0cf (17:40cf) db "@" RedsHouse2FObject: ; 0x5c0d0 ? db $0A ; border tile db 1 ; warps db 1, 7, 2, REDS_HOUSE_1F db 0 ; signs db 0 ; people ; warp-to EVENT_DISP REDS_HOUSE_2F_WIDTH, 1, 7 Func_5c0dc: ; 5c0dc (17:40dc) ld a, $4b ld [wPokedexOwned], a ; $d2f7 ld a, $3d call Predef ; indirect jump to ShowPokedexData (402d1 (10:42d1)) xor a ld [wPokedexOwned], a ; $d2f7 ret MuseumF1_h: ; 0x5c0eb to 0x5c0f7 (12 bytes) (id=52) db $0a ; tileset db MUSEUM_1F_HEIGHT, MUSEUM_1F_WIDTH ; dimensions (y, x) dw MuseumF1Blocks, MuseumF1TextPointers, MuseumF1Script ; blocks, texts, scripts db $00 ; connections dw MuseumF1Object ; objects MuseumF1Script: ; 5c0f7 (17:40f7) ld a, $1 ld [$cf0c], a xor a ld [$cc3c], a ld hl, MuseumF1ScriptPointers ld a, [W_MUSEUMF1CURSCRIPT] jp CallFunctionInTable MuseumF1ScriptPointers: ; 5c109 (17:4109) dw MuseumF1Script0 dw MuseumF1Script1 MuseumF1Script0: ; 5c10d (17:410d) ld a, [$d361] cp $4 ret nz ld a, [$d362] cp $9 jr z, .asm_5c120 ; 0x5c118 $6 ld a, [$d362] cp $a ret nz .asm_5c120 xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, $1 ld [$ff00+$8c], a jp DisplayTextID MuseumF1Script1: ; 5c12a (17:412a) ret MuseumF1TextPointers: ; 5c12b (17:412b) dw MuseumF1Text1 dw MuseumF1Text2 dw MuseumF1Text3 dw MuseumF1Text4 dw MuseumF1Text5 MuseumF1Text1: ; 5c135 (17:4135) db $8 ld a, [$d361] cp $4 jr nz, asm_8774b ; 0x5c13b $a ld a, [$d362] cp $d jp z, Func_5c1f9 jr asm_b8709 ; 0x5c145 $1c asm_8774b: ; 5c147 (17:4147) cp $3 jr nz, asm_d49e7 ; 0x5c149 $8 ld a, [$d362] cp $c jp z, Func_5c1f9 asm_d49e7: ; 5c153 (17:4153) ld a, [$d754] bit 0, a jr nz, asm_31a16 ; 0x5c158 $10 ld hl, UnnamedText_5c23d call PrintText jp asm_d1145 asm_b8709: ; 5c163 (17:4163) ld a, [$d754] bit 0, a jr z, asm_3ded4 ; 0x5c168 $9 asm_31a16: ; 5c16a (17:416a) ld hl, UnnamedText_5c242 call PrintText jp asm_d1145 asm_3ded4: ; 5c173 (17:4173) ld a, $13 ld [$d125], a call DisplayTextBoxID xor a ld [H_CURRENTPRESSEDBUTTONS], a ld hl, UnnamedText_5c21f call PrintText call YesNoChoice ld a, [$cc26] and a jr nz, asm_de133 ; 0x5c18b $4d xor a ld [$ff00+$9f], a ld [$ff00+$a0], a ld a, $50 ld [$ff00+$a1], a call HasEnoughMoney jr nc, asm_0f3e3 ; 0x5c199 $9 ld hl, UnnamedText_5c229 call PrintText jp asm_de133 asm_0f3e3: ; 5c1a4 (17:41a4) ld hl, UnnamedText_5c224 call PrintText ld hl, $d754 set 0, [hl] xor a ld [$cd3d], a ld [$cd3e], a ld a, $50 ld [$cd3f], a ld hl, $cd3f ld de, $d349 ld c, $3 ld a, $c call Predef ld a, $13 ld [$d125], a call DisplayTextBoxID ld a, $b2 call PlaySoundWaitForCurrent call WaitForSoundToFinish jr asm_0b094 ; 0x5c1d8 $18 asm_de133: ; 5c1da (17:41da) ld hl, UnnamedText_5c21a ; $421a call PrintText ld a, $1 ld [$cd38], a ld a, $80 ld [$ccd3], a call Func_3486 call UpdateSprites jr asm_d1145 ; 0x5c1f0 $25 asm_0b094: ; 5c1f2 (17:41f2) ld a, $1 ld [W_MUSEUMF1CURSCRIPT], a jr asm_d1145 ; 0x5c1f7 $1e Func_5c1f9: ; 5c1f9 (17:41f9) ld hl, UnnamedText_5c22e call PrintText call YesNoChoice ld a, [$cc26] cp $0 jr nz, asm_d1144 ld hl, UnnamedText_5c233 call PrintText jr asm_d1145 ; 0x5c20f $6 asm_d1144: ; 5c211 (17:4211) ld hl, UnnamedText_5c238 call PrintText asm_d1145: ; 5c217 (17:4217) jp TextScriptEnd UnnamedText_5c21a: ; 5c21a (17:421a) TX_FAR _UnnamedText_5c21a db "@" UnnamedText_5c21f: ; 5c21f (17:421f) TX_FAR _UnnamedText_5c21f db "@" UnnamedText_5c224: ; 5c224 (17:4224) TX_FAR _UnnamedText_5c224 db "@" UnnamedText_5c229: ; 5c229 (17:4229) TX_FAR _UnnamedText_5c229 db "@" UnnamedText_5c22e: ; 5c22e (17:422e) TX_FAR _UnnamedText_5c22e db "@" UnnamedText_5c233: ; 5c233 (17:4233) TX_FAR _UnnamedText_5c233 db "@" UnnamedText_5c238: ; 5c238 (17:4238) TX_FAR _UnnamedText_5c238 db "@" UnnamedText_5c23d: ; 5c23d (17:423d) TX_FAR _UnnamedText_5c23d db "@" UnnamedText_5c242: ; 5c242 (17:4242) TX_FAR _UnnamedText_5c242 db "@" MuseumF1Text2: ; 5c247 (17:4247) db $08 ; asm ld hl, UnnamedText_5c251 call PrintText jp TextScriptEnd UnnamedText_5c251: ; 5c251 (17:4251) TX_FAR _UnnamedText_5c251 db "@" MuseumF1Text3: ; 5c256 (17:4256) db $08 ; asm ld a, [$d754] bit 1, a jr nz, .asm_16599 ; 0x5c25c ld hl, UnnamedText_5c28e call PrintText ld bc, (OLD_AMBER << 8) | 1 call GiveItem jr nc, .BagFull ld hl, $d754 set 1, [hl] ld a, $34 ld [$cc4d], a ld a, $11 call Predef ld hl, ReceivedOldAmberText jr .asm_52e0f ; 0x5c27e .BagFull ld hl, UnnamedText_5c29e jr .asm_52e0f ; 0x5c283 .asm_16599 ; 0x5c285 ld hl, UnnamedText_5c299 .asm_52e0f ; 0x5c288 call PrintText jp TextScriptEnd UnnamedText_5c28e: ; 5c28e (17:428e) TX_FAR _UnnamedText_5c28e db "@" ReceivedOldAmberText: ; 5c293 (17:4293) TX_FAR _ReceivedOldAmberText ; 0x96790 db $0B, "@" UnnamedText_5c299: ; 5c299 (17:4299) TX_FAR _UnnamedText_5c299 db "@" UnnamedText_5c29e: ; 5c29e (17:429e) TX_FAR _UnnamedText_5c29e db "@" MuseumF1Text4: ; 5c2a3 (17:42a3) db $08 ; asm ld hl, UnnamedText_5c2ad call PrintText jp TextScriptEnd UnnamedText_5c2ad: ; 5c2ad (17:42ad) TX_FAR _UnnamedText_5c2ad db "@" MuseumF1Text5: ; 5c2b2 (17:42b2) db $08 ; asm ld hl, UnnamedText_5c2bc call PrintText jp TextScriptEnd UnnamedText_5c2bc: ; 5c2bc (17:42bc) TX_FAR _UnnamedText_5c2bc db "@" MuseumF1Object: ; 0x5c2c1 (size=74) db $a ; border tile db $5 ; warps db $7, $a, $0, $ff db $7, $b, $0, $ff db $7, $10, $1, $ff db $7, $11, $1, $ff db $7, $7, $0, MUSEUM_2F db $0 ; signs db $5 ; people db SPRITE_OAK_AIDE, $4 + 4, $c + 4, $ff, $d2, $1 ; person db SPRITE_GAMBLER, $4 + 4, $1 + 4, $ff, $ff, $2 ; person db SPRITE_OAK_AIDE, $2 + 4, $f + 4, $ff, $d0, $3 ; person db SPRITE_OAK_AIDE, $4 + 4, $11 + 4, $ff, $ff, $4 ; person db SPRITE_OLD_AMBER, $2 + 4, $10 + 4, $ff, $ff, $5 ; person ; warp-to EVENT_DISP $a, $7, $a EVENT_DISP $a, $7, $b EVENT_DISP $a, $7, $10 EVENT_DISP $a, $7, $11 EVENT_DISP $a, $7, $7 ; MUSEUM_2F MuseumF2_h: ; 0x5c30b to 0x5c317 (12 bytes) (id=53) db $0a ; tileset db MUSEUM_2F_HEIGHT, MUSEUM_2F_WIDTH ; dimensions (y, x) dw MuseumF2Blocks, MuseumF2TextPointers, MuseumF2Script ; blocks, texts, scripts db $00 ; connections dw MuseumF2Object ; objects MuseumF2Script: ; 5c317 (17:4317) jp EnableAutoTextBoxDrawing MuseumF2TextPointers: ; 5c31a (17:431a) dw MuseumF2Text1 dw MuseumF2Text2 dw MuseumF2Text3 dw MuseumF2Text4 dw MuseumF2Text5 dw MuseumF2Text6 dw MuseumF2Text7 MuseumF2Text1: ; 5c328 (17:4328) TX_FAR _MuseumF2Text1 db "@" MuseumF2Text2: ; 5c32d (17:432d) TX_FAR _MuseumF2Text2 db "@" MuseumF2Text3: ; 5c332 (17:4332) TX_FAR _MuseumF2Text3 db "@" MuseumF2Text4: ; 5c337 (17:4337) TX_FAR _MuseumF2Text4 db "@" MuseumF2Text5: ; 5c33c (17:433c) TX_FAR _MuseumF2Text5 db "@" MuseumF2Text6: ; 5c341 (17:4341) TX_FAR _MuseumF2Text6 db "@" MuseumF2Text7: ; 5c346 (17:4346) TX_FAR _MuseumF2Text7 db "@" MuseumF2Object: ; 0x5c34b (size=48) db $a ; border tile db $1 ; warps db $7, $7, $4, MUSEUM_1F db $2 ; signs db $2, $b, $6 ; MuseumF2Text6 db $5, $2, $7 ; MuseumF2Text7 db $5 ; people db SPRITE_BUG_CATCHER, $7 + 4, $1 + 4, $fe, $2, $1 ; person db SPRITE_OLD_PERSON, $5 + 4, $0 + 4, $ff, $d0, $2 ; person db SPRITE_OAK_AIDE, $5 + 4, $7 + 4, $ff, $d0, $3 ; person db SPRITE_BRUNETTE_GIRL, $5 + 4, $b + 4, $ff, $ff, $4 ; person db SPRITE_HIKER, $5 + 4, $c + 4, $ff, $d0, $5 ; person ; warp-to EVENT_DISP $7, $7, $7 ; MUSEUM_1F PewterGym_h: ; 0x5c37b to 0x5c387 (12 bytes) (id=54) db $07 ; tileset db PEWTER_GYM_HEIGHT, PEWTER_GYM_WIDTH ; dimensions (y, x) dw PewterGymBlocks, PewterGymTextPointers, PewterGymScript ; blocks, texts, scripts db $00 ; connections dw PewterGymObject ; objects PewterGymScript: ; 5c387 (17:4387) ld hl, $d126 bit 6, [hl] res 6, [hl] call nz, PewterGymScript_5c3a4 call EnableAutoTextBoxDrawing ld hl, PewterGymTrainerHeaders ld de, PewterGymScriptPointers ld a, [W_PEWTERGYMCURSCRIPT] call ExecuteCurMapScriptInTable ld [W_PEWTERGYMCURSCRIPT], a ret PewterGymScript_5c3a4: ; 5c3a4 (17:43a4) ld hl, Gym1CityName ; $43ad ld de, Gym1LeaderName ; $43b9 jp LoadGymLeaderAndCityName Gym1CityName: ; 5c3ad (17:43ad) db "PEWTER CITY@" Gym1LeaderName: ; 5c3b9 (17:43b9) db "BROCK@" Func_5c3bf: ; 5c3bf (17:43bf) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_PEWTERGYMCURSCRIPT], a ld [W_CURMAPSCRIPT], a ret PewterGymScriptPointers: ; 5c3ca (17:43ca) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle dw PewterGymScript3 PewterGymScript3: ; 5c3d2 (17:43d2) ld a, [W_ISINBATTLE] ; $d057 cp $ff jp z, Func_5c3bf ld a, $f0 ld [wJoypadForbiddenButtonsMask], a Func_5c3df: ; 5c3df (17:43df) ld a, $4 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld hl, $d755 set 7, [hl] ld bc, (TM_34 << 8) | 1 call GiveItem jr nc, .BagFull ld a, $5 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld hl, $d755 set 6, [hl] jr .asm_5c408 .BagFull ld a, $6 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID .asm_5c408 ld hl, W_OBTAINEDBADGES ; $d356 set 0, [hl] ld hl, $d72a set 0, [hl] ld a, $4 ld [$cc4d], a ld a, $11 call Predef ; indirect jump to RemoveMissableObject (f1d7 (3:71d7)) ld a, $22 ld [$cc4d], a ld a, $11 call Predef ; indirect jump to RemoveMissableObject (f1d7 (3:71d7)) ld hl, $d7eb res 0, [hl] res 7, [hl] ld hl, $d755 set 2, [hl] jp Func_5c3bf PewterGymTextPointers: ; 5c435 (17:4435) dw PewterGymText1 dw PewterGymText2 dw PewterGymText3 dw PewterGymText4 dw PewterGymText5 dw PewterGymText6 PewterGymTrainerHeaders: ; 5c441 (17:4441) PewterGymTrainerHeader0: ; 5c441 (17:4441) db $2 ; flag's bit db ($5 << 4) ; trainer's view range dw $d755 ; flag's byte dw PewterGymBattleText1 ; 0x44d0 TextBeforeBattle dw PewterGymAfterBattleText1 ; 0x44da TextAfterBattle dw PewterGymEndBattleText1 ; 0x44d5 TextEndBattle dw PewterGymEndBattleText1 ; 0x44d5 TextEndBattle db $ff PewterGymText1: ; 5c44e (17:444e) db $08 ; asm ld a, [$d755] bit 7, a jr z, .asm_4a735 ; 0x5c454 bit 6, a jr nz, .asm_ff7d0 ; 0x5c458 call z, Func_5c3df call DisableWaitingAfterTextDisplay jr .asm_e0ffb ; 0x5c460 .asm_ff7d0 ; 0x5c462 ld hl, UnnamedText_5c4a3 call PrintText jr .asm_e0ffb ; 0x5c468 .asm_4a735 ; 0x5c46a ld hl, UnnamedText_5c49e call PrintText ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, UnnamedText_5c4bc ld de, UnnamedText_5c4bc call PreBattleSaveRegisters ldh a, [$8c] ld [$cf13], a call EngageMapTrainer call InitBattleEnemyParameters ld a, $1 ld [$d05c], a xor a ldh [$b4], a ld a, $3 ld [W_PEWTERGYMCURSCRIPT], a ld [W_CURMAPSCRIPT], a .asm_e0ffb ; 0x5c49b jp TextScriptEnd UnnamedText_5c49e: ; 5c49e (17:449e) TX_FAR _UnnamedText_5c49e db "@" UnnamedText_5c4a3: ; 5c4a3 (17:44a3) TX_FAR _UnnamedText_5c4a3 db "@" PewterGymText4: ; 5c4a8 (17:44a8) TX_FAR _TM34PreReceiveText db "@" PewterGymText5: ; 5c4ad (17:44ad) TX_FAR _ReceivedTM34Text ; 0x980ad db $0B TX_FAR _TM34ExplanationText ; 0x980c0 db "@" PewterGymText6: ; 5c4b7 (17:44b7) TX_FAR _TM34NoRoomText db "@" UnnamedText_5c4bc: ; 5c4bc (17:44bc) TX_FAR _UnnamedText_5c4bc ; 0x981c9 db $0B TX_FAR _UnnamedText_5c4c1 ; 0x98232 db "@" PewterGymText2: ; 5c4c6 (17:44c6) db $08 ; asm ld hl, PewterGymTrainerHeader0 call TalkToTrainer jp TextScriptEnd PewterGymBattleText1: ; 5c4d0 (17:44d0) TX_FAR _PewterGymBattleText1 db "@" PewterGymEndBattleText1: ; 5c4d5 (17:44d5) TX_FAR _PewterGymEndBattleText1 db "@" PewterGymAfterBattleText1: ; 5c4da (17:44da) TX_FAR _PewterGymAfterBattleText1 db "@" PewterGymText3: ; 5c4df (17:44df) db $08 ; asm ld a, [$d72a] bit 0, a jr nz, .asm_71369 ; 0x5c4e5 ld hl, UnnamedText_5c515 call PrintText call YesNoChoice ld a, [$cc26] and a jr nz, .asm_6123a ; 0x5c4f4 ld hl, UnnamedText_5c51a call PrintText jr .asm_d1578 ; 0x5c4fc .asm_6123a ; 0x5c4fe ld hl, UnnamedText_5c524 call PrintText .asm_d1578 ; 0x5c504 ld hl, UnnamedText_5c51f call PrintText jr .asm_07013 ; 0x5c50a .asm_71369 ; 0x5c50c ld hl, UnnamedText_5c529 call PrintText .asm_07013 ; 0x5c512 jp TextScriptEnd UnnamedText_5c515: ; 5c515 (17:4515) TX_FAR _UnnamedText_5c515 db "@" UnnamedText_5c51a: ; 5c51a (17:451a) TX_FAR _UnnamedText_5c51a db "@" UnnamedText_5c51f: ; 5c51f (17:451f) TX_FAR _UnnamedText_5c51f db "@" UnnamedText_5c524: ; 5c524 (17:4524) TX_FAR _UnnamedText_5c524 db "@" UnnamedText_5c529: ; 5c529 (17:4529) TX_FAR _UnnamedText_5c529 db "@" PewterGymObject: ; 0x5c52e (size=42) db $3 ; border tile db $2 ; warps db $d, $4, $2, $ff db $d, $5, $2, $ff db $0 ; signs db $3 ; people db SPRITE_BLACK_HAIR_BOY_2, $1 + 4, $4 + 4, $ff, $d0, $41, BROCK + $C8, $1 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $6 + 4, $3 + 4, $ff, $d3, $42, JR__TRAINER_M + $C8, $1 ; trainer db SPRITE_GYM_HELPER, $a + 4, $7 + 4, $ff, $d0, $3 ; person ; warp-to EVENT_DISP $5, $d, $4 EVENT_DISP $5, $d, $5 PewterGymBlocks: ; 5c558 (17:4558) INCBIN "maps/pewtergym.blk" PewterPokecenter_h: ; 0x5c57b to 0x5c587 (12 bytes) (id=58) db $06 ; tileset db PEWTER_POKECENTER_HEIGHT, PEWTER_POKECENTER_WIDTH ; dimensions (y, x) dw PewterPokecenterBlocks, PewterPokecenterTextPointers, PewterPokecenterScript ; blocks, texts, scripts db $00 ; connections dw PewterPokecenterObject ; objects PewterPokecenterScript: ; 5c587 (17:4587) call Func_22fa jp EnableAutoTextBoxDrawing PewterPokecenterTextPointers: ; 5c58d (17:458d) dw PewterPokecenterText1 dw PewterPokecenterText2 dw PewterPokecenterText3 dw PewterPokecenterText4 PewterPokecenterText1: ; 5c595 (17:4595) db $ff PewterPokecenterText2: ; 5c596 (17:4596) TX_FAR _PewterPokecenterText1 db "@" PewterPokecenterText3: ; 5c59b (17:459b) db $8 ld a, $1 ld [$cc3c], a ld hl, PewterPokecenterText5 call PrintText ld a, $ff call PlaySound ld c, $20 call DelayFrames ld hl, Unknown_5c608 ; $4608 ld de, $cd3f ld bc, $0004 call CopyData ld a, [$c132] ld hl, $cd3f .asm_5c5c3 cp [hl] inc hl jr nz, .asm_5c5c3 ; 0x5c5c5 $fc dec hl push hl ld c, BANK(Music_JigglypuffSong) ld a, MUSIC_JIGGLYPUFF_SONG call PlayMusic pop hl .asm_5c5d1 ld a, [hl] ld [$c132], a push hl ld hl, $cd3f ld de, $cd3e ld bc, $0004 call CopyData ld a, [$cd3e] ld [$cd42], a pop hl ld c, $18 call DelayFrames ld a, [$c026] ld b, a ld a, [$c027] or b jr nz, .asm_5c5d1 ; 0x5c5f6 $d9 ld c, $30 call DelayFrames call Func_2307 jp TextScriptEnd PewterPokecenterText5: ; 5c603 (17:4603) TX_FAR _PewterPokecenterText5 ; 0x98744 db "@" Unknown_5c608: ; 5c608 (17:4608) db $30, $38, $34, $3c PewterPokecenterText4: ; 5c60c (17:460c) db $f6 PewterPokecenterObject: ; 0x5c60d (size=44) db $0 ; border tile db $2 ; warps db $7, $3, $6, $ff db $7, $4, $6, $ff db $0 ; signs db $4 ; people db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person db SPRITE_GENTLEMAN, $7 + 4, $b + 4, $ff, $d2, $2 ; person db SPRITE_CLEFAIRY, $3 + 4, $1 + 4, $ff, $d0, $3 ; person db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $4 ; person ; warp-to EVENT_DISP $7, $7, $3 EVENT_DISP $7, $7, $4 CeruleanPokecenter_h: ; 0x5c639 to 0x5c645 (12 bytes) (id=64) db $06 ; tileset db CERULEAN_POKECENTER_HEIGHT, CERULEAN_POKECENTER_WIDTH ; dimensions (y, x) dw CeruleanPokecenterBlocks, CeruleanPokecenterTextPointers, CeruleanPokecenterScript ; blocks, texts, scripts db $00 ; connections dw CeruleanPokecenterObject ; objects CeruleanPokecenterScript: ; 5c645 (17:4645) call Func_22fa jp EnableAutoTextBoxDrawing CeruleanPokecenterTextPointers: ; 5c64b (17:464b) dw CeruleanPokecenterText1 dw CeruleanPokecenterText2 dw CeruleanPokecenterText3 dw CeruleanPokecenterText4 CeruleanPokecenterText4: ; 5c653 (17:4653) db $f6 CeruleanPokecenterText1: ; 5c654 (17:4654) db $ff CeruleanPokecenterText2: ; 5c655 (17:4655) TX_FAR _CeruleanPokecenterText1 db "@" CeruleanPokecenterText3: ; 5c65a (17:465a) TX_FAR _CeruleanPokecenterText3 db "@" CeruleanPokecenterObject: ; 0x5c65f (size=44) db $0 ; border tile db $2 ; warps db $7, $3, $2, $ff db $7, $4, $2, $ff db $0 ; signs db $4 ; people db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person db SPRITE_BLACK_HAIR_BOY_2, $5 + 4, $a + 4, $fe, $0, $2 ; person db SPRITE_GENTLEMAN, $3 + 4, $4 + 4, $ff, $d0, $3 ; person db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $4 ; person ; warp-to EVENT_DISP $7, $7, $3 EVENT_DISP $7, $7, $4 CeruleanPokecenterBlocks: ; 5c68b (17:468b) INCBIN "maps/ceruleanpokecenter.blk" CeruleanGym_h: ; 0x5c6a7 to 0x5c6b3 (12 bytes) (id=65) db $07 ; tileset db CERULEAN_GYM_HEIGHT, CERULEAN_GYM_WIDTH ; dimensions (y, x) dw CeruleanGymBlocks, CeruleanGymTextPointers, CeruleanGymScript ; blocks, texts, scripts db $00 ; connections dw CeruleanGymObject ; objects CeruleanGymScript: ; 5c6b3 (17:46b3) ld hl, $d126 bit 6, [hl] res 6, [hl] call nz, CeruleanGymScript_5c6d0 call EnableAutoTextBoxDrawing ld hl, CeruleanGymTrainerHeaders ld de, CeruleanGymScriptPointers ld a, [W_CERULEANGYMCURSCRIPT] call ExecuteCurMapScriptInTable ld [W_CERULEANGYMCURSCRIPT], a ret CeruleanGymScript_5c6d0: ; 5c6d0 (17:46d0) ld hl, Gym2CityName ; $46d9 ld de, Gym2LeaderName ; $46e7 jp LoadGymLeaderAndCityName Gym2CityName: ; 5c6d9 (17:46d9) db "CERULEAN CITY@" Gym2LeaderName: ; 5c6e7 (17:46e7) db "MISTY@" Func_5c6ed: ; 5c6ed (17:46ed) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_CERULEANGYMCURSCRIPT], a ld [W_CURMAPSCRIPT], a ret CeruleanGymScriptPointers: ; 5c6f8 (17:46f8) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle dw CeruleanGymScript3 CeruleanGymScript3: ; 5c700 (17:4700) ld a, [W_ISINBATTLE] ; $d057 cp $ff jp z, Func_5c6ed ld a, $f0 ld [wJoypadForbiddenButtonsMask], a Func_5c70d: ; 5c70d (17:470d) ld a, $5 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld hl, $d75e set 7, [hl] ld bc, (TM_11 << 8) | 1 call GiveItem jr nc, .BagFull ld a, $6 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld hl, $d75e set 6, [hl] jr .asm_5c736 .BagFull ld a, $7 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID .asm_5c736 ld hl, W_OBTAINEDBADGES ; $d356 set 1, [hl] ld hl, $d72a set 1, [hl] ld hl, $d75e set 2, [hl] set 3, [hl] jp Func_5c6ed CeruleanGymTextPointers: ; 5c74a (17:474a) dw CeruleanGymText1 dw CeruleanGymText2 dw CeruleanGymText3 dw CeruleanGymText4 dw CeruleanGymText5 dw CeruleanGymText6 dw CeruleanGymText7 CeruleanGymTrainerHeaders: ; 5c758 (17:4758) CeruleanGymTrainerHeader0: ; 5c758 (17:4758) db $2 ; flag's bit db ($3 << 4) ; trainer's view range dw $d75e ; flag's byte dw CeruleanGymBattleText1 ; 0x47e9 TextBeforeBattle dw CeruleanGymAfterBattleText1 ; 0x47f3 TextAfterBattle dw CeruleanGymEndBattleText1 ; 0x47ee TextEndBattle dw CeruleanGymEndBattleText1 ; 0x47ee TextEndBattle CeruleanGymTrainerHeader1: ; 5c764 (17:4764) db $3 ; flag's bit db ($3 << 4) ; trainer's view range dw $d75e ; flag's byte dw CeruleanGymBattleText2 ; 0x4802 TextBeforeBattle dw CeruleanGymAfterBattleText2 ; 0x480c TextAfterBattle dw CeruleanGymEndBattleText2 ; 0x4807 TextEndBattle dw CeruleanGymEndBattleText2 ; 0x4807 TextEndBattle db $ff CeruleanGymText1: ; 5c771 (17:4771) db $08 ; asm ld a, [$d75e] bit 7, a jr z, .asm_10854 ; 0x5c777 bit 6, a jr nz, .asm_37a1b ; 0x5c77b call z, Func_5c70d call DisableWaitingAfterTextDisplay jr .asm_95b04 ; 0x5c783 .asm_37a1b ; 0x5c785 ld hl, UnnamedText_5c7c3 call PrintText jr .asm_95b04 ; 0x5c78b .asm_10854 ; 0x5c78d ld hl, UnnamedText_5c7be call PrintText ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, UnnamedText_5c7d8 ld de, UnnamedText_5c7d8 call PreBattleSaveRegisters ldh a, [$8c] ld [$cf13], a call EngageMapTrainer call InitBattleEnemyParameters ld a, $2 ld [$d05c], a xor a ldh [$b4], a ld a, $3 ld [W_CERULEANGYMCURSCRIPT], a .asm_95b04 ; 0x5c7bb jp TextScriptEnd UnnamedText_5c7be: ; 5c7be (17:47be) TX_FAR _UnnamedText_5c7be db "@" UnnamedText_5c7c3: ; 5c7c3 (17:47c3) TX_FAR _UnnamedText_5c7c3 db "@" CeruleanGymText5: ; 5c7c8 (17:47c8) TX_FAR _UnnamedText_5c7c8 db "@" CeruleanGymText6: ; 5c7cd (17:47cd) ReceivedTM11Text: ; 5c7cd (17:47cd) TX_FAR _ReceivedTM11Text ; 0x98b7d db $0B, "@" CeruleanGymText7: ; 5c7d3 (17:47d3) TX_FAR _UnnamedText_5c7d3 db "@" UnnamedText_5c7d8: ; 5c7d8 (17:47d8) TX_FAR _UnnamedText_5c7d8 ; 0x98bb0 db $11, $6, "@" CeruleanGymText2: ; 5c7df (17:47df) db $08 ; asm ld hl, CeruleanGymTrainerHeader0 call TalkToTrainer jp TextScriptEnd CeruleanGymBattleText1: ; 5c7e9 (17:47e9) TX_FAR _CeruleanGymBattleText1 db "@" CeruleanGymEndBattleText1: ; 5c7ee (17:47ee) TX_FAR _CeruleanGymEndBattleText1 db "@" CeruleanGymAfterBattleText1: ; 5c7f3 (17:47f3) TX_FAR _CeruleanGymAfterBattleText1 db "@" CeruleanGymText3: ; 5c7f8 (17:47f8) db $08 ; asm ld hl, CeruleanGymTrainerHeader1 call TalkToTrainer jp TextScriptEnd CeruleanGymBattleText2: ; 5c802 (17:4802) TX_FAR _CeruleanGymBattleText2 db "@" CeruleanGymEndBattleText2: ; 5c807 (17:4807) TX_FAR _CeruleanGymEndBattleText2 db "@" CeruleanGymAfterBattleText2: ; 5c80c (17:480c) TX_FAR _CeruleanGymAfterBattleText2 db "@" CeruleanGymText4: ; 5c811 (17:4811) db $08 ; asm ld a, [$d75e] bit 7, a jr nz, .asm_f80ce ; 0x5c817 ld hl, UnnamedText_5c82a call PrintText jr .asm_18a31 ; 0x5c81f .asm_f80ce ; 0x5c821 ld hl, UnnamedText_5c82f call PrintText .asm_18a31 ; 0x5c827 jp TextScriptEnd UnnamedText_5c82a: ; 5c82a (17:482a) TX_FAR _UnnamedText_5c82a db "@" UnnamedText_5c82f: ; 5c82f (17:482f) TX_FAR _UnnamedText_5c82f db "@" CeruleanGymObject: ; 0x5c834 (size=50) db $3 ; border tile db $2 ; warps db $d, $4, $3, $ff db $d, $5, $3, $ff db $0 ; signs db $4 ; people db SPRITE_BRUNETTE_GIRL, $2 + 4, $4 + 4, $ff, $d0, $41, MISTY + $C8, $1 ; trainer db SPRITE_LASS, $3 + 4, $2 + 4, $ff, $d3, $42, JR__TRAINER_F + $C8, $1 ; trainer db SPRITE_SWIMMER, $7 + 4, $8 + 4, $ff, $d2, $43, SWIMMER + $C8, $1 ; trainer db SPRITE_GYM_HELPER, $a + 4, $7 + 4, $ff, $d0, $4 ; person ; warp-to EVENT_DISP $5, $d, $4 EVENT_DISP $5, $d, $5 CeruleanGymBlocks: ; 5c866 (17:4866) INCBIN "maps/ceruleangym.blk" CeruleanMart_h: ; 0x5c889 to 0x5c895 (12 bytes) (id=67) db $02 ; tileset db CERULEAN_MART_HEIGHT, CERULEAN_MART_WIDTH ; dimensions (y, x) dw CeruleanMartBlocks, CeruleanMartTextPointers, CeruleanMartScript ; blocks, texts, scripts db $00 ; connections dw CeruleanMartObject ; objects CeruleanMartScript: ; 5c895 (17:4895) jp EnableAutoTextBoxDrawing CeruleanMartTextPointers: ; 5c898 (17:4898) dw CeruleanMartText1 dw CeruleanMartText2 dw CeruleanMartText3 CeruleanMartText2: ; 5c89e (17:489e) TX_FAR _CeruleanMartText2 db "@" CeruleanMartText3: ; 5c8a3 (17:48a3) TX_FAR _CeruleanMartText3 db "@" CeruleanMartObject: ; 0x5c8a8 (size=38) db $0 ; border tile db $2 ; warps db $7, $3, $5, $ff db $7, $4, $5, $ff db $0 ; signs db $3 ; people db SPRITE_MART_GUY, $5 + 4, $0 + 4, $ff, $d3, $1 ; person db SPRITE_BLACK_HAIR_BOY_1, $4 + 4, $3 + 4, $fe, $1, $2 ; person db SPRITE_LASS, $2 + 4, $6 + 4, $fe, $2, $3 ; person ; warp-to EVENT_DISP $4, $7, $3 EVENT_DISP $4, $7, $4 LavenderPokecenter_h: ; 0x5c8ce to 0x5c8da (12 bytes) (id=141) db $06 ; tileset db LAVENDER_POKECENTER_HEIGHT, LAVENDER_POKECENTER_WIDTH ; dimensions (y, x) dw LavenderPokecenterBlocks, LavenderPokecenterTextPointers, LavenderPokecenterScript ; blocks, texts, scripts db $00 ; connections dw LavenderPokecenterObject ; objects LavenderPokecenterScript: ; 5c8da (17:48da) call Func_22fa jp EnableAutoTextBoxDrawing LavenderPokecenterTextPointers: ; 5c8e0 (17:48e0) dw LavenderPokecenterText1 dw LavenderPokecenterText2 dw LavenderPokecenterText3 dw LavenderPokecenterText4 LavenderPokecenterText4: ; 5c8e8 (17:48e8) db $f6 LavenderPokecenterText1: ; 5c8e9 (17:48e9) db $ff LavenderPokecenterText2: ; 5c8ea (17:48ea) TX_FAR _LavenderPokecenterText1 db "@" LavenderPokecenterText3: ; 5c8ef (17:48ef) TX_FAR _LavenderPokecenterText3 db "@" LavenderPokecenterObject: ; 0x5c8f4 (size=44) db $0 ; border tile db $2 ; warps db $7, $3, $0, $ff db $7, $4, $0, $ff db $0 ; signs db $4 ; people db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person db SPRITE_GENTLEMAN, $3 + 4, $5 + 4, $ff, $ff, $2 ; person db SPRITE_LITTLE_GIRL, $6 + 4, $2 + 4, $fe, $1, $3 ; person db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $4 ; person ; warp-to EVENT_DISP $7, $7, $3 EVENT_DISP $7, $7, $4 LavenderMart_h: ; 0x5c920 to 0x5c92c (12 bytes) (id=150) db $02 ; tileset db LAVENDER_MART_HEIGHT, LAVENDER_MART_WIDTH ; dimensions (y, x) dw LavenderMartBlocks, LavenderMartTextPointers, LavenderMartScript ; blocks, texts, scripts db $00 ; connections dw LavenderMartObject ; objects LavenderMartScript: ; 5c92c (17:492c) jp EnableAutoTextBoxDrawing LavenderMartTextPointers: ; 5c92f (17:492f) dw LavenderMartText1 dw LavenderMartText2 dw LavenderMartText3 LavenderMartText2: ; 5c935 (17:4935) TX_FAR _LavenderMartText2 db "@" LavenderMartText3: ; 5c93a (17:493a) db $08 ; asm ld a, [$d7e0] bit 7, a jr nz, .asm_c88d4 ; 0x5c940 ld hl, UnnamedText_5c953 call PrintText jr .asm_6d225 ; 0x5c948 .asm_c88d4 ; 0x5c94a ld hl, UnnamedText_5c958 call PrintText .asm_6d225 ; 0x5c950 jp TextScriptEnd UnnamedText_5c953: ; 5c953 (17:4953) TX_FAR _UnnamedText_5c953 db "@" UnnamedText_5c958: ; 5c958 (17:4958) TX_FAR _UnnamedText_5c958 db "@" LavenderMartObject: ; 0x5c95d (size=38) db $0 ; border tile db $2 ; warps db $7, $3, $3, $ff db $7, $4, $3, $ff db $0 ; signs db $3 ; people db SPRITE_MART_GUY, $5 + 4, $0 + 4, $ff, $d3, $1 ; person db SPRITE_BALDING_GUY, $4 + 4, $3 + 4, $ff, $ff, $2 ; person db SPRITE_BLACK_HAIR_BOY_1, $2 + 4, $7 + 4, $ff, $ff, $3 ; person ; warp-to EVENT_DISP $4, $7, $3 EVENT_DISP $4, $7, $4 VermilionPokecenter_h: ; 0x5c983 to 0x5c98f (12 bytes) (id=89) db $06 ; tileset db VERMILION_POKECENTER_HEIGHT, VERMILION_POKECENTER_WIDTH ; dimensions (y, x) dw VermilionPokecenterBlocks, VermilionPokecenterTextPointers, VermilionPokecenterScript ; blocks, texts, scripts db $00 ; connections dw VermilionPokecenterObject ; objects VermilionPokecenterScript: ; 5c98f (17:498f) call Func_22fa jp EnableAutoTextBoxDrawing VermilionPokecenterTextPointers: ; 5c995 (17:4995) dw VermilionPokecenterText1 dw VermilionPokecenterText2 dw VermilionPokecenterText3 dw VermilionPokecenterText4 VermilionPokecenterText1: ; 5c99d (17:499d) db $ff VermilionPokecenterText2: ; 5c99e (17:499e) TX_FAR _VermilionPokecenterText1 db "@" VermilionPokecenterText3: ; 5c9a3 (17:49a3) TX_FAR _VermilionPokecenterText3 db "@" VermilionPokecenterText4: ; 5c9a8 (17:49a8) db $f6 VermilionPokecenterObject: ; 0x5c9a9 (size=44) db $0 ; border tile db $2 ; warps db $7, $3, $0, $ff db $7, $4, $0, $ff db $0 ; signs db $4 ; people db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person db SPRITE_FISHER, $5 + 4, $a + 4, $ff, $ff, $2 ; person db SPRITE_SAILOR, $4 + 4, $5 + 4, $ff, $ff, $3 ; person db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $4 ; person ; warp-to EVENT_DISP $7, $7, $3 EVENT_DISP $7, $7, $4 VermilionMart_h: ; 0x5c9d5 to 0x5c9e1 (12 bytes) (id=91) db $02 ; tileset db VERMILION_MART_HEIGHT, VERMILION_MART_WIDTH ; dimensions (y, x) dw VermilionMartBlocks, VermilionMartTextPointers, VermilionMartScript ; blocks, texts, scripts db $00 ; connections dw VermilionMartObject ; objects VermilionMartScript: ; 5c9e1 (17:49e1) jp EnableAutoTextBoxDrawing VermilionMartTextPointers: ; 5c9e4 (17:49e4) dw VermilionMartText1 dw VermilionMartText2 dw VermilionMartText3 VermilionMartText2: ; 5c9ea (17:49ea) TX_FAR _VermilionMartText2 db "@" VermilionMartText3: ; 5c9ef (17:49ef) TX_FAR _VermilionMartText3 db "@" VermilionMartObject: ; 0x5c9f4 (size=38) db $0 ; border tile db $2 ; warps db $7, $3, $2, $ff db $7, $4, $2, $ff db $0 ; signs db $3 ; people db SPRITE_MART_GUY, $5 + 4, $0 + 4, $ff, $d3, $1 ; person db SPRITE_BLACK_HAIR_BOY_1, $6 + 4, $5 + 4, $ff, $ff, $2 ; person db SPRITE_LASS, $3 + 4, $3 + 4, $fe, $2, $3 ; person ; warp-to EVENT_DISP $4, $7, $3 EVENT_DISP $4, $7, $4 VermilionGym_h: ; 0x5ca1a to 0x5ca26 (12 bytes) (id=92) db $07 ; tileset db VERMILION_GYM_HEIGHT, VERMILION_GYM_WIDTH ; dimensions (y, x) dw VermilionGymBlocks, VermilionGymTextPointers, VermilionGymScript ; blocks, texts, scripts db $00 ; connections dw VermilionGymObject ; objects VermilionGymScript: ; 5ca26 (17:4a26) ld hl, $d126 bit 5, [hl] res 5, [hl] push hl call nz, VermilionGymScript_5ca4c pop hl bit 6, [hl] res 6, [hl] call nz, VermilionGymScript_5ca6d call EnableAutoTextBoxDrawing ld hl, VermilionGymTrainerHeader0 ld de, VermilionGymScriptPointers ld a, [W_VERMILIONGYMCURSCRIPT] call ExecuteCurMapScriptInTable ld [W_VERMILIONGYMCURSCRIPT], a ret VermilionGymScript_5ca4c: ; 5ca4c (17:4a4c) ld hl, Gym3CityName ; $4a55 ld de, Gym3LeaderName ; $4a64 jp LoadGymLeaderAndCityName Gym3CityName: ; 5ca55 (17:4a55) db "VERMILION CITY@" Gym3LeaderName: ; 5ca64 (17:4a64) db "LT.SURGE@" VermilionGymScript_5ca6d: ; 5ca6d (17:4a6d) ld a, [$d773] bit 0, a jr nz, .asm_5ca78 ld a, $24 jr .asm_5ca7f .asm_5ca78 ld a, $ad call PlaySound ld a, $5 .asm_5ca7f ld [$d09f], a ld bc, $202 ld a, $17 jp Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) VermilionGymScript_5ca8a: ; 5ca8a (17:4a8a) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_VERMILIONGYMCURSCRIPT], a ld [W_CURMAPSCRIPT], a ret VermilionGymScriptPointers: ; 5ca95 (17:4a95) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle dw VermilionGymScript3 VermilionGymScript3: ; 5ca9d (17:4a9d) ld a, [W_ISINBATTLE] ; $d057 cp $ff jp z, VermilionGymScript_5ca8a ld a, $f0 ld [wJoypadForbiddenButtonsMask], a Func_5caaa: ; 5caaa (17:4aaa) ld a, $6 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld hl, $d773 set 7, [hl] ld bc, (TM_24 << 8) | 1 call GiveItem jr nc, .BagFull ld a, $7 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld hl, $d773 set 6, [hl] jr .asm_5cad3 .BagFull ld a, $8 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID .asm_5cad3 ld hl, W_OBTAINEDBADGES ; $d356 set 2, [hl] ld hl, $d72a set 2, [hl] ld a, [$d773] or $1c ld [$d773], a jp VermilionGymScript_5ca8a VermilionGymTextPointers: ; 5cae8 (17:4ae8) dw VermilionGymText1 dw VermilionGymText2 dw VermilionGymText3 dw VermilionGymText4 dw VermilionGymText5 dw VermilionGymText6 dw VermilionGymText7 dw VermilionGymText8 VermilionGymTrainerHeaders: ; 5caf8 (17:4af8) VermilionGymTrainerHeader0: ; 5caf8 (17:4af8) db $2 ; flag's bit db ($3 << 4) ; trainer's view range dw $d773 ; flag's byte dw VermilionGymBattleText1 ; 0x4b9a TextBeforeBattle dw VermilionGymAfterBattleText1 ; 0x4ba4 TextAfterBattle dw VermilionGymEndBattleText1 ; 0x4b9f TextEndBattle dw VermilionGymEndBattleText1 ; 0x4b9f TextEndBattle VermilionGymTrainerHeader1: ; 5cb04 (17:4b04) db $3 ; flag's bit db ($2 << 4) ; trainer's view range dw $d773 ; flag's byte dw VermilionGymBattleText2 ; 0x4bb3 TextBeforeBattle dw VermilionGymAfterBattleText2 ; 0x4bbd TextAfterBattle dw VermilionGymEndBattleText2 ; 0x4bb8 TextEndBattle dw VermilionGymEndBattleText2 ; 0x4bb8 TextEndBattle VermilionGymTrainerHeader2: ; 5cb10 (17:4b10) db $4 ; flag's bit db ($3 << 4) ; trainer's view range dw $d773 ; flag's byte dw VermilionGymBattleText3 ; 0x4bcc TextBeforeBattle dw VermilionGymAfterBattleText3 ; 0x4bd6 TextAfterBattle dw VermilionGymEndBattleText3 ; 0x4bd1 TextEndBattle dw VermilionGymEndBattleText3 ; 0x4bd1 TextEndBattle db $ff VermilionGymText1: ; 5cb1d (17:4b1d) db $08 ; asm ld a, [$d773] bit 7, a jr z, .asm_7cc29 ; 0x5cb23 bit 6, a jr nz, .asm_41203 ; 0x5cb27 call z, Func_5caaa call DisableWaitingAfterTextDisplay jr .asm_23621 ; 0x5cb2f .asm_41203 ; 0x5cb31 ld hl, UnnamedText_5cb72 call PrintText jr .asm_23621 ; 0x5cb37 .asm_7cc29 ; 0x5cb39 ld hl, UnnamedText_5cb6d call PrintText ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, ReceivedThunderbadgeText ld de, ReceivedThunderbadgeText call PreBattleSaveRegisters ldh a, [$8c] ld [$cf13], a call EngageMapTrainer call InitBattleEnemyParameters ld a, $3 ld [$d05c], a xor a ldh [$b4], a ld a, $3 ld [W_VERMILIONGYMCURSCRIPT], a ld [W_CURMAPSCRIPT], a .asm_23621 ; 0x5cb6a jp TextScriptEnd UnnamedText_5cb6d: ; 5cb6d (17:4b6d) TX_FAR _UnnamedText_5cb6d db "@" UnnamedText_5cb72: ; 5cb72 (17:4b72) TX_FAR _UnnamedText_5cb72 db "@" VermilionGymText6: ; 5cb77 (17:4b77) TX_FAR _UnnamedText_5cb77 db "@" VermilionGymText7: ; 5cb7c (17:4b7c) TX_FAR _ReceivedTM24Text ; 0x9c0e0 db $11 TX_FAR _TM24ExplanationText ; 0x9c0f5 db "@" VermilionGymText8: ; 5cb86 (17:4b86) TX_FAR _TM24NoRoomText db "@" ReceivedThunderbadgeText: ; 5cb8b (17:4b8b) TX_FAR _ReceivedThunderbadgeText db "@" VermilionGymText2: ; 5cb90 (17:4b90) db $08 ; asm ld hl, VermilionGymTrainerHeader0 call TalkToTrainer jp TextScriptEnd VermilionGymBattleText1: ; 5cb9a (17:4b9a) TX_FAR _VermilionGymBattleText1 db "@" VermilionGymEndBattleText1: ; 5cb9f (17:4b9f) TX_FAR _VermilionGymEndBattleText1 db "@" VermilionGymAfterBattleText1: ; 5cba4 (17:4ba4) TX_FAR _VermilionGymAfterBattleText1 db "@" VermilionGymText3: ; 5cba9 (17:4ba9) db $08 ; asm ld hl, VermilionGymTrainerHeader1 call TalkToTrainer jp TextScriptEnd VermilionGymBattleText2: ; 5cbb3 (17:4bb3) TX_FAR _VermilionGymBattleText2 db "@" VermilionGymEndBattleText2: ; 5cbb8 (17:4bb8) TX_FAR _VermilionGymEndBattleText2 db "@" VermilionGymAfterBattleText2: ; 5cbbd (17:4bbd) TX_FAR _VermilionGymAfterBattleText2 db "@" VermilionGymText4: ; 5cbc2 (17:4bc2) db $08 ; asm ld hl, VermilionGymTrainerHeader2 call TalkToTrainer jp TextScriptEnd VermilionGymBattleText3: ; 5cbcc (17:4bcc) TX_FAR _VermilionGymBattleText3 db "@" VermilionGymEndBattleText3: ; 5cbd1 (17:4bd1) TX_FAR _VermilionGymEndBattleText3 db "@" VermilionGymAfterBattleText3: ; 5cbd6 (17:4bd6) TX_FAR _VermilionGymAfterBattleText3 db "@" VermilionGymText5: ; 5cbdb (17:4bdb) db $08 ; asm ld a, [$d72a] bit 2, a jr nz, .asm_13b67 ; 0x5cbe1 ld hl, UnnamedText_5cbf4 call PrintText jr .asm_c2b38 ; 0x5cbe9 .asm_13b67 ; 0x5cbeb ld hl, UnnamedText_5cbf9 call PrintText .asm_c2b38 ; 0x5cbf1 jp TextScriptEnd UnnamedText_5cbf4: ; 5cbf4 (17:4bf4) TX_FAR _UnnamedText_5cbf4 db "@" UnnamedText_5cbf9: ; 5cbf9 (17:4bf9) TX_FAR _UnnamedText_5cbf9 db "@" VermilionGymObject: ; 0x5cbfe (size=58) db $3 ; border tile db $2 ; warps db $11, $4, $3, $ff db $11, $5, $3, $ff db $0 ; signs db $5 ; people db SPRITE_ROCKER, $1 + 4, $5 + 4, $ff, $d0, $41, LT__SURGE + $C8, $1 ; trainer db SPRITE_GENTLEMAN, $6 + 4, $9 + 4, $ff, $d2, $42, GENTLEMAN + $C8, $3 ; trainer db SPRITE_BLACK_HAIR_BOY_2, $8 + 4, $3 + 4, $ff, $d2, $43, ROCKER + $C8, $1 ; trainer db SPRITE_SAILOR, $a + 4, $0 + 4, $ff, $d3, $44, SAILOR + $C8, $8 ; trainer db SPRITE_GYM_HELPER, $e + 4, $4 + 4, $ff, $d0, $5 ; person ; warp-to EVENT_DISP $5, $11, $4 EVENT_DISP $5, $11, $5 VermilionGymBlocks: ; 5cc38 (17:4c38) INCBIN "maps/vermiliongym.blk" CopycatsHouseF2_h: ; 0x5cc65 to 0x5cc71 (12 bytes) (id=176) db $04 ; tileset db COPYCATS_HOUSE_2F_HEIGHT, COPYCATS_HOUSE_2F_WIDTH ; dimensions (y, x) dw CopycatsHouseF2Blocks, CopycatsHouseF2TextPointers, CopycatsHouseF2Script ; blocks, texts, scripts db $00 ; connections dw CopycatsHouseF2Object ; objects CopycatsHouseF2Script: ; 5cc71 (17:4c71) jp EnableAutoTextBoxDrawing CopycatsHouseF2TextPointers: ; 5cc74 (17:4c74) dw CopycatsHouseF2Text1 dw CopycatsHouseF2Text2 dw CopycatsHouseF2Text3 dw CopycatsHouseF2Text4 dw CopycatsHouseF2Text5 dw CopycatsHouseF2Text6 dw CopycatsHouseF2Text7 CopycatsHouseF2Text1: ; 5cc82 (17:4c82) db $08 ; asm ld a, [$d7af] bit 0, a jr nz, .asm_7ccf3 ; 0x5cc88 ld a, $1 ld [$cc3c], a ld hl, UnnamedText_5ccd4 call PrintText ld b, POKE_DOLL call IsItemInBag jr z, .asm_62ecd ; 0x5cc9a ld hl, TM31PreReceiveText call PrintText ld bc, (TM_31 << 8) | 1 call GiveItem jr nc, .BagFull ld hl, ReceivedTM31Text call PrintText ld a, $33 ldh [$db], a ld b, BANK(RemoveItemByID) ld hl, RemoveItemByID call Bankswitch ld hl, $d7af set 0, [hl] jr .asm_62ecd ; 0x5ccc1 .BagFull ld hl, TM31NoRoomText call PrintText jr .asm_62ecd ; 0x5ccc9 .asm_7ccf3 ; 0x5cccb ld hl, TM31ExplanationText2 call PrintText .asm_62ecd ; 0x5ccd1 jp TextScriptEnd UnnamedText_5ccd4: ; 5ccd4 (17:4cd4) TX_FAR _UnnamedText_5ccd4 db "@" TM31PreReceiveText: ; 5ccd9 (17:4cd9) TX_FAR _TM31PreReceiveText db "@" ReceivedTM31Text: ; 5ccde (17:4cde) TX_FAR _ReceivedTM31Text ; 0xa1675 db $0B TM31ExplanationText1: ; 5cce3 (17:4ce3) TX_FAR _TM31ExplanationText1 ; 0xa1689 db $d, "@" TM31ExplanationText2: ; 5cce9 (17:4ce9) TX_FAR _TM31ExplanationText2 ; 0xa16c5 db "@" TM31NoRoomText: ; 5ccee (17:4cee) TX_FAR _TM31NoRoomText ; 0xa1733 db $d, "@" CopycatsHouseF2Text2: ; 5ccf4 (17:4cf4) TX_FAR _CopycatsHouseF2Text2 db "@" CopycatsHouseF2Text5: ; 5ccf9 (17:4cf9) CopycatsHouseF2Text4: ; 5ccf9 (17:4cf9) CopycatsHouseF2Text3: ; 5ccf9 (17:4cf9) TX_FAR _CopycatsHouseF2Text3 db "@" CopycatsHouseF2Text6: ; 5ccfe (17:4cfe) TX_FAR _CopycatsHouseF2Text6 db "@" CopycatsHouseF2Text7: ; 5cd03 (17:4d03) db $08 ; asm ld a, [$c109] cp $4 ld hl, UnnamedText_5cd1c jr nz, .asm_399a4 ; 0x5cd0c ld hl, UnnamedText_5cd17 .asm_399a4 ; 0x5cd11 call PrintText jp TextScriptEnd UnnamedText_5cd17: ; 5cd17 (17:4d17) TX_FAR _UnnamedText_5cd17 db "@" UnnamedText_5cd1c: ; 5cd1c (17:4d1c) TX_FAR _UnnamedText_5cd1c db "@" CopycatsHouseF2Object: ; 0x5cd21 (size=48) db $a ; border tile db $1 ; warps db $1, $7, $2, COPYCATS_HOUSE_1F db $2 ; signs db $5, $3, $6 ; CopycatsHouseF2Text6 db $1, $0, $7 ; CopycatsHouseF2Text7 db $5 ; people db SPRITE_BRUNETTE_GIRL, $3 + 4, $4 + 4, $fe, $0, $1 ; person db SPRITE_BIRD, $6 + 4, $4 + 4, $fe, $2, $2 ; person db SPRITE_SLOWBRO, $1 + 4, $5 + 4, $ff, $d0, $3 ; person db SPRITE_BIRD, $0 + 4, $2 + 4, $ff, $d0, $4 ; person db SPRITE_CLEFAIRY, $6 + 4, $1 + 4, $ff, $d3, $5 ; person ; warp-to EVENT_DISP $4, $1, $7 ; COPYCATS_HOUSE_1F FightingDojo_h: ; 0x5cd51 to 0x5cd5d (12 bytes) (id=177) db $05 ; tileset db FIGHTINGDOJO_HEIGHT, FIGHTINGDOJO_WIDTH ; dimensions (y, x) dw FightingDojoBlocks, FightingDojoTextPointers, FightingDojoScript ; blocks, texts, scripts db $00 ; connections dw FightingDojoObject ; objects FightingDojoScript: ; 5cd5d (17:4d5d) call EnableAutoTextBoxDrawing ld hl, FightingDojoTrainerHeaders ld de, FightingDojoScriptPointers ld a, [W_FIGHTINGDOJOCURSCRIPT] call ExecuteCurMapScriptInTable ld [W_FIGHTINGDOJOCURSCRIPT], a ret FightingDojoScript_5cd70: ; 5cd70 (17:4d70) xor a ld [$cd6b], a ld [$d642], a ld [$da39], a ret FightingDojoScriptPointers: ; 5cd7b (17:4d7b) dw FightingDojoScript1 dw Func_324c dw EndTrainerBattle dw FightingDojoScript3 FightingDojoScript1: ; 5cd83 (17:4d83) ld a, [$d7b1] bit 0, a ret nz call CheckFightingMapTrainers ld a, [wTrainerHeaderFlagBit] and a ret nz ld a, [$d7b1] bit 1, a ret nz xor a ld [H_CURRENTPRESSEDBUTTONS], a ld [$cf0d], a ld a, [W_YCOORD] cp $3 ret nz ld a, [W_XCOORD] cp $4 ret nz ld a, $1 ld [$cf0d], a ld a, $1 ld [$d528], a ld a, $1 ld [$ff8c], a ld a, $8 ld [$ff8d], a call Func_34a6 ld a, $1 ld [$ff8c], a call DisplayTextID ret FightingDojoScript3: ; 5cdc6 (17:4dc6) ld a, [$d057] cp $ff jp z, FightingDojoScript_5cd70 ld a, [$cf0d] and a jr z, .asm_5cde4 ld a, $1 ld [$d528], a ld a, $1 ld [$ff8c], a ld a, $8 ld [$ff8d], a call Func_34a6 .asm_5cde4 ld a, $f0 ld [$cd6b], a ld a, [$d7b1] or $3e ld [$d7b1], a ld a, $8 ld [$ff8c], a call DisplayTextID xor a ld [$cd6b], a ld [$d642], a ld [$da39], a ret FightingDojoTextPointers: ; 5ce03 (17:4e03) dw FightingDojoText1 dw FightingDojoText2 dw FightingDojoText3 dw FightingDojoText4 dw FightingDojoText5 dw FightingDojoText6 dw FightingDojoText7 dw FightingDojoText8 FightingDojoTrainerHeaders: ; 5ce13 (17:4e13) FightingDojoTrainerHeader0: ; 5ce13 (17:4e13) db $2 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7b1 ; flag's byte dw FightingDojoBattleText1 ; 0x4eac TextBeforeBattle dw FightingDojoAfterBattleText1 ; 0x4eb6 TextAfterBattle dw FightingDojoEndBattleText1 ; 0x4eb1 TextEndBattle dw FightingDojoEndBattleText1 ; 0x4eb1 TextEndBattle FightingDojoTrainerHeader1: ; 5ce1f (17:4e1f) db $3 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7b1 ; flag's byte dw FightingDojoBattleText2 ; 0x4ec5 TextBeforeBattle dw FightingDojoAfterBattleText2 ; 0x4ecf TextAfterBattle dw FightingDojoEndBattleText2 ; 0x4eca TextEndBattle dw FightingDojoEndBattleText2 ; 0x4eca TextEndBattle FightingDojoTrainerHeader2: ; 5ce2b (17:4e2b) db $4 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7b1 ; flag's byte dw FightingDojoBattleText3 ; 0x4ede TextBeforeBattle dw FightingDojoAfterBattleText3 ; 0x4ee8 TextAfterBattle dw FightingDojoEndBattleText3 ; 0x4ee3 TextEndBattle dw FightingDojoEndBattleText3 ; 0x4ee3 TextEndBattle FightingDojoTrainerHeader3: ; 5ce37 (17:4e37) db $5 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7b1 ; flag's byte dw FightingDojoBattleText4 ; 0x4ef7 TextBeforeBattle dw FightingDojoAfterBattleText4 ; 0x4f01 TextAfterBattle dw FightingDojoEndBattleText4 ; 0x4efc TextEndBattle dw FightingDojoEndBattleText4 ; 0x4efc TextEndBattle db $ff FightingDojoText1: ; 5ce44 (17:4e44) db $08 ; asm ld a, [$d7b1] bit 0, a jp nz, .continue1 bit 1, a jp nz, .continue2 ld hl, UnnamedText_5ce8e call PrintText ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, UnnamedText_5ce93 ld de, UnnamedText_5ce93 call PreBattleSaveRegisters ldh a, [$8c] ld [$cf13], a call EngageMapTrainer call InitBattleEnemyParameters ld a, $3 ld [W_FIGHTINGDOJOCURSCRIPT], a ld [W_CURMAPSCRIPT], a jr .asm_9dba4 ; 0x5ce7b .continue1 ; 0x5ce7d ld hl, UnnamedText_5ce9d call PrintText jr .asm_9dba4 ; 0x5ce83 .continue2 ; 0x5ce85f ld hl, FightingDojoText8 call PrintText .asm_9dba4 ; 0x5ce8b jp TextScriptEnd UnnamedText_5ce8e: ; 5ce8e (17:4e8e) TX_FAR _UnnamedText_5ce8e db "@" UnnamedText_5ce93: ; 5ce93 (17:4e93) TX_FAR _UnnamedText_5ce93 db "@" FightingDojoText8: ; 5ce98 (17:4e98) TX_FAR _UnnamedText_5ce98 db "@" UnnamedText_5ce9d: ; 5ce9d (17:4e9d) TX_FAR _UnnamedText_5ce9d db "@" FightingDojoText2: ; 5cea2 (17:4ea2) db $08 ; asm ld hl, FightingDojoTrainerHeader0 call TalkToTrainer jp TextScriptEnd FightingDojoBattleText1: ; 5ceac (17:4eac) TX_FAR _FightingDojoBattleText1 db "@" FightingDojoEndBattleText1: ; 5ceb1 (17:4eb1) TX_FAR _FightingDojoEndBattleText1 db "@" FightingDojoAfterBattleText1: ; 5ceb6 (17:4eb6) TX_FAR _FightingDojoAfterBattleText1 db "@" FightingDojoText3: ; 5cebb (17:4ebb) db $08 ; asm ld hl, FightingDojoTrainerHeader1 call TalkToTrainer jp TextScriptEnd FightingDojoBattleText2: ; 5cec5 (17:4ec5) TX_FAR _FightingDojoBattleText2 db "@" FightingDojoEndBattleText2: ; 5ceca (17:4eca) TX_FAR _FightingDojoEndBattleText2 db "@" FightingDojoAfterBattleText2: ; 5cecf (17:4ecf) TX_FAR _FightingDojoAfterBattleText2 db "@" FightingDojoText4: ; 5ced4 (17:4ed4) db $08 ; asm ld hl, FightingDojoTrainerHeader2 call TalkToTrainer jp TextScriptEnd FightingDojoBattleText3: ; 5cede (17:4ede) TX_FAR _FightingDojoBattleText3 db "@" FightingDojoEndBattleText3: ; 5cee3 (17:4ee3) TX_FAR _FightingDojoEndBattleText3 db "@" FightingDojoAfterBattleText3: ; 5cee8 (17:4ee8) TX_FAR _FightingDojoAfterBattleText3 db "@" FightingDojoText5: ; 5ceed (17:4eed) db $08 ; asm ld hl, FightingDojoTrainerHeader3 call TalkToTrainer jp TextScriptEnd FightingDojoBattleText4: ; 5cef7 (17:4ef7) TX_FAR _FightingDojoBattleText4 db "@" FightingDojoEndBattleText4: ; 5cefc (17:4efc) TX_FAR _FightingDojoEndBattleText4 db "@" FightingDojoAfterBattleText4: ; 5cf01 (17:4f01) TX_FAR _FightingDojoAfterBattleText4 db "@" FightingDojoText6: ; 5cf06 (17:4f06) ; Hitmonlee Poké Ball db $08 ; asm ld a, [$d7b1] and %11000000 jr z, .GetMon ld hl, OtherHitmonText call PrintText jr .done .GetMon ld a, HITMONLEE call DisplayPokedex ld hl, WantHitmonleeText call PrintText call YesNoChoice ld a, [$cc26] and a jr nz, .done ld a, [$cf91] ld b, a ld c, 30 call GivePokemon jr nc, .done ; once Poké Ball is taken, hide sprite ld a, $4a ld [$cc4d], a ld a, $11 call Predef ld hl, $d7b1 set 6, [hl] set 0, [hl] .done jp TextScriptEnd WantHitmonleeText: ; 5cf49 (17:4f49) TX_FAR _WantHitmonleeText db "@" FightingDojoText7: ; 5cf4e (17:4f4e) ; Hitmonchan Poké Ball db $08 ; asm ld a, [$d7b1] and %11000000 jr z, .GetMon ld hl, OtherHitmonText call PrintText jr .done .GetMon ld a, HITMONCHAN call DisplayPokedex ld hl, WantHitmonchanText call PrintText call YesNoChoice ld a, [$cc26] and a jr nz, .done ld a, [$cf91] ld b, a ld c,30 call GivePokemon jr nc, .done ld hl, $d7b1 set 7, [hl] set 0, [hl] ; once Poké Ball is taken, hide sprite ld a, $4b ld [$cc4d], a ld a, $11 call Predef .done jp TextScriptEnd WantHitmonchanText: ; 5cf91 (17:4f91) TX_FAR _WantHitmonchanText db "@" OtherHitmonText: ; 5cf96 (17:4f96) TX_FAR _OtherHitmonText db "@" FightingDojoObject: ; 0x5cf9b (size=72) db $3 ; border tile db $2 ; warps db $b, $4, $1, $ff db $b, $5, $1, $ff db $0 ; signs db $7 ; people db SPRITE_HIKER, $3 + 4, $5 + 4, $ff, $d0, $41, BLACKBELT + $C8, $1 ; trainer db SPRITE_HIKER, $4 + 4, $3 + 4, $ff, $d3, $42, BLACKBELT + $C8, $2 ; trainer db SPRITE_HIKER, $6 + 4, $3 + 4, $ff, $d3, $43, BLACKBELT + $C8, $3 ; trainer db SPRITE_HIKER, $5 + 4, $5 + 4, $ff, $d2, $44, BLACKBELT + $C8, $4 ; trainer db SPRITE_HIKER, $7 + 4, $5 + 4, $ff, $d2, $45, BLACKBELT + $C8, $5 ; trainer db SPRITE_BALL, $1 + 4, $4 + 4, $ff, $ff, $6 ; person db SPRITE_BALL, $1 + 4, $5 + 4, $ff, $ff, $7 ; person ; warp-to EVENT_DISP $5, $b, $4 EVENT_DISP $5, $b, $5 FightingDojoBlocks: ; 5cfe3 (17:4fe3) INCBIN "maps/fightingdojo.blk" SaffronGym_h: ; 0x5d001 to 0x5d00d (12 bytes) (id=178) db $16 ; tileset db SAFFRON_GYM_HEIGHT, SAFFRON_GYM_WIDTH ; dimensions (y, x) dw SaffronGymBlocks, SaffronGymTextPointers, SaffronGymScript ; blocks, texts, scripts db $00 ; connections dw SaffronGymObject ; objects SaffronGymScript: ; 5d00d (17:500d) ld hl, $d126 bit 6, [hl] res 6, [hl] call nz, .extra call EnableAutoTextBoxDrawing ld hl, SaffronGymTrainerHeader0 ld de, SaffronGymScriptPointers ld a, [W_SAFFRONGYMCURSCRIPT] call ExecuteCurMapScriptInTable ld [W_SAFFRONGYMCURSCRIPT], a ret .extra ld hl, Gym6CityName ; $5033 ld de, Gym6LeaderName ; $5040 jp LoadGymLeaderAndCityName Gym6CityName: ; 5d033 (17:5033) db "SAFFRON CITY@" Gym6LeaderName: ; 5d040 (17:5040) db "SABRINA@" Func_5d048: ; 5d048 (17:5048) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_SAFFRONGYMCURSCRIPT], a ld [W_CURMAPSCRIPT], a ret SaffronGymScriptPointers: ; 5d053 (17:5053) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle dw SaffronGymScript3 SaffronGymScript3: ; 5d05b (17:505b) ld a, [W_ISINBATTLE] ; $d057 cp $ff jp z, Func_5d048 ld a, $f0 ld [wJoypadForbiddenButtonsMask], a Func_5d068: ; 5d068 (17:5068) ld a, $a ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld hl, $d7b3 set 1, [hl] ld bc, (TM_46 << 8) | 1 call GiveItem jr nc, .BagFull ld a, $b ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld hl, $d7b3 set 0, [hl] jr .asm_5d091 .BagFull ld a, $c ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID .asm_5d091 ld hl, W_OBTAINEDBADGES ; $d356 set 5, [hl] ld hl, $d72a set 5, [hl] ld a, [$d7b3] or $fc ld [$d7b3], a ld hl, $d7b4 set 0, [hl] jp Func_5d048 SaffronGymTextPointers: ; 5d0ab (17:50ab) dw SaffronGymText1 dw SaffronGymText2 dw SaffronGymText3 dw SaffronGymText4 dw SaffronGymText5 dw SaffronGymText6 dw SaffronGymText7 dw SaffronGymText8 dw SaffronGymText9 dw SaffronGymText10 dw SaffronGymText11 dw SaffronGymText12 SaffronGymTrainerHeaders: ; 5d0c3 (17:50c3) SaffronGymTrainerHeader0: ; 5d0c3 (17:50c3) db $2 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7b3 ; flag's byte dw SaffronGymBattleText1 ; 0x51f0 TextBeforeBattle dw SaffronGymAfterBattleText1 ; 0x51fa TextAfterBattle dw SaffronGymEndBattleText1 ; 0x51f5 TextEndBattle dw SaffronGymEndBattleText1 ; 0x51f5 TextEndBattle SaffronGymTrainerHeader1: ; 5d0cf (17:50cf) db $3 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7b3 ; flag's byte dw SaffronGymBattleText2 ; 0x51ff TextBeforeBattle dw SaffronGymAfterBattleText2 ; 0x5209 TextAfterBattle dw SaffronGymEndBattleText2 ; 0x5204 TextEndBattle dw SaffronGymEndBattleText2 ; 0x5204 TextEndBattle SaffronGymTrainerHeader2: ; 5d0db (17:50db) db $4 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7b3 ; flag's byte dw SaffronGymBattleText3 ; 0x520e TextBeforeBattle dw SaffronGymAfterBattleText3 ; 0x5218 TextAfterBattle dw SaffronGymEndBattleText3 ; 0x5213 TextEndBattle dw SaffronGymEndBattleText3 ; 0x5213 TextEndBattle SaffronGymTrainerHeader3: ; 5d0e7 (17:50e7) db $5 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7b3 ; flag's byte dw SaffronGymBattleText4 ; 0x521d TextBeforeBattle dw SaffronGymAfterBattleText4 ; 0x5227 TextAfterBattle dw SaffronGymEndBattleText4 ; 0x5222 TextEndBattle dw SaffronGymEndBattleText4 ; 0x5222 TextEndBattle SaffronGymTrainerHeader4: ; 5d0f3 (17:50f3) db $6 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7b3 ; flag's byte dw SaffronGymBattleText5 ; 0x522c TextBeforeBattle dw SaffronGymAfterBattleText5 ; 0x5236 TextAfterBattle dw SaffronGymEndBattleText5 ; 0x5231 TextEndBattle dw SaffronGymEndBattleText5 ; 0x5231 TextEndBattle SaffronGymTrainerHeader5: ; 5d0ff (17:50ff) db $7 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7b3 ; flag's byte dw SaffronGymBattleText6 ; 0x523b TextBeforeBattle dw SaffronGymAfterBattleText6 ; 0x5245 TextAfterBattle dw SaffronGymEndBattleText6 ; 0x5240 TextEndBattle dw SaffronGymEndBattleText6 ; 0x5240 TextEndBattle SaffronGymTrainerHeader6: ; 5d10b (17:510b) db $8 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7b3 ; flag's byte dw SaffronGymBattleText7 ; 0x524a TextBeforeBattle dw SaffronGymAfterBattleText7 ; 0x5254 TextAfterBattle dw SaffronGymEndBattleText7 ; 0x524f TextEndBattle dw SaffronGymEndBattleText7 ; 0x524f TextEndBattle db $ff SaffronGymText1: ; 5d118 (17:5118) db $08 ; asm ld a, [$d7b3] bit 1, a jr z, .asm_e3544 ; 0x5d11e bit 0, a jr nz, .asm_8d2f6 ; 0x5d122 call z, Func_5d068 call DisableWaitingAfterTextDisplay jr .asm_34c2c ; 0x5d12a .asm_8d2f6 ; 0x5d12c ld hl, UnnamedText_5d16e call PrintText jr .asm_34c2c ; 0x5d132 .asm_e3544 ; 0x5d134 ld hl, UnnamedText_5d162 call PrintText ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, UnnamedText_5d167 ld de, UnnamedText_5d167 call PreBattleSaveRegisters ldh a, [$8c] ld [$cf13], a call EngageMapTrainer call InitBattleEnemyParameters ld a, $6 ld [$d05c], a ld a, $3 ld [W_SAFFRONGYMCURSCRIPT], a .asm_34c2c ; 0x5d15f jp TextScriptEnd UnnamedText_5d162: ; 5d162 (17:5162) TX_FAR _UnnamedText_5d162 db "@" UnnamedText_5d167: ; 5d167 (17:5167) TX_FAR _UnnamedText_5d167 ; 0xa1c73 db $11 ; play same sound as red giving oak parcel db $6 ; wait for keypress db "@" UnnamedText_5d16e: ; 5d16e (17:516e) TX_FAR _UnnamedText_5d16e db "@" SaffronGymText10: ; 5d173 (17:5173) TX_FAR _UnnamedText_5d173 db "@" SaffronGymText11: ; 5d178 (17:5178) TX_FAR ReceivedTM46Text db $b TX_FAR _TM46ExplanationText db "@" SaffronGymText12: ; 5d182 (17:5182) TX_FAR _TM46NoRoomText ; pack full db "@" SaffronGymText2: ; 5d187 (17:5187) db $08 ; asm ld hl, SaffronGymTrainerHeader0 call TalkToTrainer jp TextScriptEnd SaffronGymText3: ; 5d191 (17:5191) db $08 ; asm ld hl, SaffronGymTrainerHeader1 call TalkToTrainer jp TextScriptEnd SaffronGymText4: ; 5d19b (17:519b) db $08 ; asm ld hl, SaffronGymTrainerHeader2 call TalkToTrainer jp TextScriptEnd SaffronGymText5: ; 5d1a5 (17:51a5) db $08 ; asm ld hl, SaffronGymTrainerHeader3 call TalkToTrainer jp TextScriptEnd SaffronGymText6: ; 5d1af (17:51af) db $08 ; asm ld hl, SaffronGymTrainerHeader4 call TalkToTrainer jp TextScriptEnd SaffronGymText7: ; 5d1b9 (17:51b9) db $08 ; asm ld hl, SaffronGymTrainerHeader5 call TalkToTrainer jp TextScriptEnd SaffronGymText8: ; 5d1c3 (17:51c3) db $08 ; asm ld hl, SaffronGymTrainerHeader6 call TalkToTrainer jp TextScriptEnd SaffronGymText9: ; 5d1cd (17:51cd) db $08 ; asm ld a, [$d7b3] bit 1, a jr nz, .asm_13f3c ; 0x5d1d3 ld hl, UnnamedText_5d1e6 call PrintText jr .asm_e9907 ; 0x5d1db .asm_13f3c ; 0x5d1dd ld hl, UnnamedText_5d1eb call PrintText .asm_e9907 ; 0x5d1e3 jp TextScriptEnd UnnamedText_5d1e6: ; 5d1e6 (17:51e6) TX_FAR _UnnamedText_5d1e6 db "@" UnnamedText_5d1eb: ; 5d1eb (17:51eb) TX_FAR _UnnamedText_5d1eb db "@" SaffronGymBattleText1: ; 5d1f0 (17:51f0) TX_FAR _SaffronGymBattleText1 db "@" SaffronGymEndBattleText1: ; 5d1f5 (17:51f5) TX_FAR _SaffronGymEndBattleText1 db "@" SaffronGymAfterBattleText1: ; 5d1fa (17:51fa) TX_FAR _SaffronGymAfterBattleText1 db "@" SaffronGymBattleText2: ; 5d1ff (17:51ff) TX_FAR _SaffronGymBattleText2 db "@" SaffronGymEndBattleText2: ; 5d204 (17:5204) TX_FAR _SaffronGymEndBattleText2 db "@" SaffronGymAfterBattleText2: ; 5d209 (17:5209) TX_FAR _SaffronGymAfterBattleText2 db "@" SaffronGymBattleText3: ; 5d20e (17:520e) TX_FAR _SaffronGymBattleText3 db "@" SaffronGymEndBattleText3: ; 5d213 (17:5213) TX_FAR _SaffronGymEndBattleText3 db "@" SaffronGymAfterBattleText3: ; 5d218 (17:5218) TX_FAR _SaffronGymAfterBattleText3 db "@" SaffronGymBattleText4: ; 5d21d (17:521d) TX_FAR _SaffronGymBattleText4 db "@" SaffronGymEndBattleText4: ; 5d222 (17:5222) TX_FAR _SaffronGymEndBattleText4 db "@" SaffronGymAfterBattleText4: ; 5d227 (17:5227) TX_FAR _SaffronGymAfterBattleText4 db "@" SaffronGymBattleText5: ; 5d22c (17:522c) TX_FAR _SaffronGymBattleText5 db "@" SaffronGymEndBattleText5: ; 5d231 (17:5231) TX_FAR _SaffronGymEndBattleText5 db "@" SaffronGymAfterBattleText5: ; 5d236 (17:5236) TX_FAR _SaffronGymAfterBattleText5 db "@" SaffronGymBattleText6: ; 5d23b (17:523b) TX_FAR _SaffronGymBattleText6 db "@" SaffronGymEndBattleText6: ; 5d240 (17:5240) TX_FAR _SaffronGymEndBattleText6 db "@" SaffronGymAfterBattleText6: ; 5d245 (17:5245) TX_FAR _SaffronGymAfterBattleText6 db "@" SaffronGymBattleText7: ; 5d24a (17:524a) TX_FAR _SaffronGymBattleText7 db "@" SaffronGymEndBattleText7: ; 5d24f (17:524f) TX_FAR _SaffronGymEndBattleText7 db "@" SaffronGymAfterBattleText7: ; 5d254 (17:5254) TX_FAR _SaffronGymAfterBattleText7 db "@" SaffronGymObject: ; 0x5d259 (size=330) db $2e ; border tile db $20 ; warps db $11, $8, $2, $ff db $11, $9, $2, $ff db $3, $1, $16, SAFFRON_GYM db $3, $5, $f, SAFFRON_GYM db $5, $1, $12, SAFFRON_GYM db $5, $5, $8, SAFFRON_GYM db $9, $1, $1b, SAFFRON_GYM db $9, $5, $10, SAFFRON_GYM db $b, $1, $5, SAFFRON_GYM db $b, $5, $d, SAFFRON_GYM db $f, $1, $17, SAFFRON_GYM db $f, $5, $1e, SAFFRON_GYM db $11, $1, $11, SAFFRON_GYM db $11, $5, $9, SAFFRON_GYM db $3, $9, $1a, SAFFRON_GYM db $3, $b, $3, SAFFRON_GYM db $5, $9, $7, SAFFRON_GYM db $5, $b, $c, SAFFRON_GYM db $b, $b, $4, SAFFRON_GYM db $f, $b, $1f, SAFFRON_GYM db $3, $f, $18, SAFFRON_GYM db $3, $13, $1c, SAFFRON_GYM db $5, $f, $2, SAFFRON_GYM db $5, $13, $a, SAFFRON_GYM db $9, $f, $14, SAFFRON_GYM db $9, $13, $1d, SAFFRON_GYM db $b, $f, $e, SAFFRON_GYM db $b, $13, $6, SAFFRON_GYM db $f, $f, $15, SAFFRON_GYM db $f, $13, $19, SAFFRON_GYM db $11, $f, $b, SAFFRON_GYM db $11, $13, $13, SAFFRON_GYM db $0 ; signs db $9 ; people db SPRITE_GIRL, $8 + 4, $9 + 4, $ff, $d0, $41, SABRINA + $C8, $1 ; trainer db SPRITE_MEDIUM, $1 + 4, $a + 4, $ff, $d0, $42, CHANNELER + $C8, $16 ; trainer db SPRITE_BUG_CATCHER, $1 + 4, $11 + 4, $ff, $d0, $43, PSYCHIC_TR + $C8, $1 ; trainer db SPRITE_MEDIUM, $7 + 4, $3 + 4, $ff, $d0, $44, CHANNELER + $C8, $17 ; trainer db SPRITE_BUG_CATCHER, $7 + 4, $11 + 4, $ff, $d0, $45, PSYCHIC_TR + $C8, $2 ; trainer db SPRITE_MEDIUM, $d + 4, $3 + 4, $ff, $d0, $46, CHANNELER + $C8, $18 ; trainer db SPRITE_BUG_CATCHER, $d + 4, $11 + 4, $ff, $d0, $47, PSYCHIC_TR + $C8, $3 ; trainer db SPRITE_BUG_CATCHER, $1 + 4, $3 + 4, $ff, $d0, $48, PSYCHIC_TR + $C8, $4 ; trainer db SPRITE_GYM_HELPER, $f + 4, $a + 4, $ff, $d0, $9 ; person ; warp-to EVENT_DISP $a, $11, $8 EVENT_DISP $a, $11, $9 EVENT_DISP $a, $3, $1 ; SAFFRON_GYM EVENT_DISP $a, $3, $5 ; SAFFRON_GYM EVENT_DISP $a, $5, $1 ; SAFFRON_GYM EVENT_DISP $a, $5, $5 ; SAFFRON_GYM EVENT_DISP $a, $9, $1 ; SAFFRON_GYM EVENT_DISP $a, $9, $5 ; SAFFRON_GYM EVENT_DISP $a, $b, $1 ; SAFFRON_GYM EVENT_DISP $a, $b, $5 ; SAFFRON_GYM EVENT_DISP $a, $f, $1 ; SAFFRON_GYM EVENT_DISP $a, $f, $5 ; SAFFRON_GYM EVENT_DISP $a, $11, $1 ; SAFFRON_GYM EVENT_DISP $a, $11, $5 ; SAFFRON_GYM EVENT_DISP $a, $3, $9 ; SAFFRON_GYM EVENT_DISP $a, $3, $b ; SAFFRON_GYM EVENT_DISP $a, $5, $9 ; SAFFRON_GYM EVENT_DISP $a, $5, $b ; SAFFRON_GYM EVENT_DISP $a, $b, $b ; SAFFRON_GYM EVENT_DISP $a, $f, $b ; SAFFRON_GYM EVENT_DISP $a, $3, $f ; SAFFRON_GYM EVENT_DISP $a, $3, $13 ; SAFFRON_GYM EVENT_DISP $a, $5, $f ; SAFFRON_GYM EVENT_DISP $a, $5, $13 ; SAFFRON_GYM EVENT_DISP $a, $9, $f ; SAFFRON_GYM EVENT_DISP $a, $9, $13 ; SAFFRON_GYM EVENT_DISP $a, $b, $f ; SAFFRON_GYM EVENT_DISP $a, $b, $13 ; SAFFRON_GYM EVENT_DISP $a, $f, $f ; SAFFRON_GYM EVENT_DISP $a, $f, $13 ; SAFFRON_GYM EVENT_DISP $a, $11, $f ; SAFFRON_GYM EVENT_DISP $a, $11, $13 ; SAFFRON_GYM SaffronGymBlocks: ; 5d3a3 (17:53a3) INCBIN "maps/saffrongym.blk" SaffronMart_h: ; 0x5d3fd to 0x5d409 (12 bytes) (id=180) db $02 ; tileset db SAFFRON_MART_HEIGHT, SAFFRON_MART_WIDTH ; dimensions (y, x) dw SaffronMartBlocks, SaffronMartTextPointers, SaffronMartScript ; blocks, texts, scripts db $00 ; connections dw SaffronMartObject ; objects SaffronMartScript: ; 5d409 (17:5409) jp EnableAutoTextBoxDrawing SaffronMartTextPointers: ; 5d40c (17:540c) dw SaffronMartText1 dw SaffronMartText2 dw SaffronMartText3 SaffronMartText2: ; 5d412 (17:5412) TX_FAR _SaffronMartText2 db "@" SaffronMartText3: ; 5d417 (17:5417) TX_FAR _SaffronMartText3 db "@" SaffronMartObject: ; 0x5d41c (size=38) db $0 ; border tile db $2 ; warps db $7, $3, $4, $ff db $7, $4, $4, $ff db $0 ; signs db $3 ; people db SPRITE_MART_GUY, $5 + 4, $0 + 4, $ff, $d3, $1 ; person db SPRITE_BLACK_HAIR_BOY_2, $2 + 4, $4 + 4, $ff, $ff, $2 ; person db SPRITE_LASS, $5 + 4, $6 + 4, $fe, $0, $3 ; person ; warp-to EVENT_DISP $4, $7, $3 EVENT_DISP $4, $7, $4 SilphCo1_h: ; 0x5d442 to 0x5d44e (12 bytes) (id=181) db $16 ; tileset db SILPH_CO_1F_HEIGHT, SILPH_CO_1F_WIDTH ; dimensions (y, x) dw SilphCo1Blocks, SilphCo1TextPointers, SilphCo1Script ; blocks, texts, scripts db $00 ; connections dw SilphCo1Object ; objects SilphCo1Script: ; 5d44e (17:544e) call EnableAutoTextBoxDrawing ld a, [$d838] bit 7, a ret z ld hl, $d7b9 bit 7, [hl] set 7, [hl] ret nz ld a, $4c ld [$cc4d], a ld a, $15 jp Predef SilphCo1TextPointers: ; 5d469 (17:5469) dw SilphCo1Text1 SilphCo1Text1: ; 5d46b (17:546b) TX_FAR _SilphCo1Text1 db "@" SilphCo1Object: ; 0x5d470 (size=50) db $2e ; border tile db $5 ; warps db $11, $a, $5, $ff db $11, $b, $5, $ff db $0, $1a, $0, SILPH_CO_2F db $0, $14, $0, SILPH_CO_ELEVATOR db $a, $10, $6, SILPH_CO_3F db $0 ; signs db $1 ; people db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $4 + 4, $ff, $d0, $1 ; person ; warp-to EVENT_DISP $f, $11, $a EVENT_DISP $f, $11, $b EVENT_DISP $f, $0, $1a ; SILPH_CO_2F EVENT_DISP $f, $0, $14 ; SILPH_CO_ELEVATOR EVENT_DISP $f, $a, $10 ; SILPH_CO_3F SilphCo1Blocks: ; 5d4a2 (17:54a2) INCBIN "maps/silphco1.blk" SaffronPokecenter_h: ; 0x5d529 to 0x5d535 (12 bytes) (id=182) db $06 ; tileset db SAFFRON_POKECENTER_HEIGHT, SAFFRON_POKECENTER_WIDTH ; dimensions (y, x) dw SaffronPokecenterBlocks, SaffronPokecenterTextPointers, SaffronPokecenterScript ; blocks, texts, scripts db $00 ; connections dw SaffronPokecenterObject ; objects SaffronPokecenterScript: ; 5d535 (17:5535) call Func_22fa jp EnableAutoTextBoxDrawing SaffronPokecenterTextPointers: ; 5d53b (17:553b) dw SaffronPokecenterText1 dw SaffronPokecenterText2 dw SaffronPokecenterText3 dw SaffronPokecenterText4 SaffronPokecenterText1: ; 5d543 (17:5543) db $ff SaffronPokecenterText2: ; 5d544 (17:5544) TX_FAR _SaffronPokecenterText1 db "@" SaffronPokecenterText3: ; 5d549 (17:5549) TX_FAR _SaffronPokecenterText3 db "@" SaffronPokecenterText4: ; 5d54e (17:554e) db $f6 SaffronPokecenterObject: ; 0x5d54f (size=44) db $0 ; border tile db $2 ; warps db $7, $3, $6, $ff db $7, $4, $6, $ff db $0 ; signs db $4 ; people db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person db SPRITE_FOULARD_WOMAN, $5 + 4, $5 + 4, $ff, $ff, $2 ; person db SPRITE_GENTLEMAN, $3 + 4, $8 + 4, $ff, $d0, $3 ; person db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $4 ; person ; warp-to EVENT_DISP $7, $7, $3 EVENT_DISP $7, $7, $4 ViridianForestexit_h: ; 0x5d57b to 0x5d587 (12 bytes) (id=47) db $09 ; tileset db VIRIDIAN_FOREST_EXIT_HEIGHT, VIRIDIAN_FOREST_EXIT_WIDTH ; dimensions (y, x) dw ViridianForestexitBlocks, ViridianForestexitTextPointers, ViridianForestexitScript ; blocks, texts, scripts db $00 ; connections dw ViridianForestexitObject ; objects ViridianForestexitScript: ; 5d587 (17:5587) jp EnableAutoTextBoxDrawing ViridianForestexitTextPointers: ; 5d58a (17:558a) dw ViridianForestexitText1 dw ViridianForestexitText2 ViridianForestexitText1: ; 5d58e (17:558e) TX_FAR _ViridianForestexitText1 db "@" ViridianForestexitText2: ; 5d593 (17:5593) TX_FAR _ViridianForestexitText2 db "@" ViridianForestexitObject: ; 0x5d598 (size=48) db $a ; border tile db $4 ; warps db $0, $4, $1, $ff db $0, $5, $1, $ff db $7, $4, $0, VIRIDIAN_FOREST db $7, $5, $0, VIRIDIAN_FOREST db $0 ; signs db $2 ; people db SPRITE_BLACK_HAIR_BOY_2, $2 + 4, $3 + 4, $ff, $ff, $1 ; person db SPRITE_OLD_PERSON, $5 + 4, $2 + 4, $ff, $ff, $2 ; person ; warp-to EVENT_DISP $5, $0, $4 EVENT_DISP $5, $0, $5 EVENT_DISP $5, $7, $4 ; VIRIDIAN_FOREST EVENT_DISP $5, $7, $5 ; VIRIDIAN_FOREST Route2Gate_h: ; 0x5d5c8 to 0x5d5d4 (12 bytes) (id=49) db $0c ; tileset db ROUTE_2_GATE_HEIGHT, ROUTE_2_GATE_WIDTH ; dimensions (y, x) dw Route2GateBlocks, Route2GateTextPointers, Route2GateScript ; blocks, texts, scripts db $00 ; connections dw Route2GateObject ; objects Route2GateScript: ; 5d5d4 (17:55d4) jp EnableAutoTextBoxDrawing Route2GateTextPointers: ; 5d5d7 (17:55d7) dw Route2GateText1 dw Route2GateText2 Route2GateText1: ; 5d5db (17:55db) db $08 ; asm ld a, [$d7c2] bit 0, a jr nz, .asm_6592c ; 0x5d5e1 ld a, $a ldh [$db], a ld a, $c8 ldh [$dc], a ld [$d11e], a call GetItemName ; $2fcf ld hl, $cd6d ld de, $cc5b ld bc, $000d call CopyData ld a, $62 call Predef ldh a, [$db] cp $1 jr nz, .asm_ad646 ; 0x5d606 ld hl, $d7c2 set 0, [hl] .asm_6592c ; 0x5d60d ld hl, UnnamedText_5d616 call PrintText .asm_ad646 ; 0x5d613 jp TextScriptEnd UnnamedText_5d616: ; 5d616 (17:5616) TX_FAR _UnnamedText_5d616 db "@" Route2GateText2: ; 5d61b (17:561b) TX_FAR _Route2GateText2 db "@" Route2GateObject: ; 0x5d620 (size=48) db $a ; border tile db $4 ; warps db $0, $4, $3, $ff db $0, $5, $3, $ff db $7, $4, $4, $ff db $7, $5, $4, $ff db $0 ; signs db $2 ; people db SPRITE_OAK_AIDE, $4 + 4, $1 + 4, $ff, $d2, $1 ; person db SPRITE_BUG_CATCHER, $4 + 4, $5 + 4, $fe, $2, $2 ; person ; warp-to EVENT_DISP $5, $0, $4 EVENT_DISP $5, $0, $5 EVENT_DISP $5, $7, $4 EVENT_DISP $5, $7, $5 ViridianForestEntrance_h: ; 0x5d650 to 0x5d65c (12 bytes) (id=50) db $09 ; tileset db VIRIDIAN_FOREST_ENTRANCE_HEIGHT, VIRIDIAN_FOREST_ENTRANCE_WIDTH ; dimensions (y, x) dw ViridianForestEntranceBlocks, ViridianForestEntranceTextPointers, ViridianForestEntranceScript ; blocks, texts, scripts db $00 ; connections dw ViridianForestEntranceObject ; objects ViridianForestEntranceScript: ; 5d65c (17:565c) jp EnableAutoTextBoxDrawing ViridianForestEntranceTextPointers: ; 5d65f (17:565f) dw ViridianForestEntranceText1 dw ViridianForestEntranceText2 ViridianForestEntranceText1: ; 5d663 (17:5663) TX_FAR _ViridianForestEntranceText1 db "@" ViridianForestEntranceText2: ; 5d668 (17:5668) TX_FAR _ViridianForestEntranceText2 db "@" ViridianForestEntranceObject: ; 0x5d66d (size=48) db $a ; border tile db $4 ; warps db $0, $4, $3, VIRIDIAN_FOREST db $0, $5, $4, VIRIDIAN_FOREST db $7, $4, $5, $ff db $7, $5, $5, $ff db $0 ; signs db $2 ; people db SPRITE_GIRL, $4 + 4, $8 + 4, $ff, $d2, $1 ; person db SPRITE_LITTLE_GIRL, $4 + 4, $2 + 4, $fe, $1, $2 ; person ; warp-to EVENT_DISP $5, $0, $4 ; VIRIDIAN_FOREST EVENT_DISP $5, $0, $5 ; VIRIDIAN_FOREST EVENT_DISP $5, $7, $4 EVENT_DISP $5, $7, $5 UndergroundTunnelEntranceRoute5_h: ; 0x5d69d to 0x5d6a9 (12 bytes) (id=71) db $0c ; tileset db PATH_ENTRANCE_ROUTE_5_HEIGHT, PATH_ENTRANCE_ROUTE_5_WIDTH ; dimensions (y, x) dw UndergroundTunnelEntranceRoute5Blocks, UndergroundTunnelEntranceRoute5TextPointers, UndergroundTunnelEntranceRoute5Script ; blocks, texts, scripts db $00 ; connections dw UndergroundTunnelEntranceRoute5Object ; objects UndergroundTunnelEntranceRoute5Script: ; 5d6a9 (17:56a9) ld a, $10 ld [$d365], a ret UndergroundTunnelEntranceRoute5_5d6af: ; 5d6af (17:56af) db $50 UndergroundTunnelEntranceRoute5TextPointers: ; 5d6b0 (17:56b0) dw UndergroundTunnelEntranceRoute5Text1 UndergroundTunnelEntranceRoute5Text1: ; 5d6b2 (17:56b2) db $08 ; asm ld a, $9 ld [wWhichTrade], a ld a, $54 call Predef ld hl, UndergroundTunnelEntranceRoute5_5d6af ret UndergroundTunnelEntranceRoute5Object: ; 0x5d6c1 (size=34) db $a ; border tile db $3 ; warps db $7, $3, $3, $ff db $7, $4, $3, $ff db $4, $4, $0, UNDERGROUND_PATH_NS db $0 ; signs db $1 ; people db SPRITE_LITTLE_GIRL, $3 + 4, $2 + 4, $ff, $ff, $1 ; person ; warp-to EVENT_DISP $4, $7, $3 EVENT_DISP $4, $7, $4 EVENT_DISP $4, $4, $4 ; UNDERGROUND_PATH_NS UndergroundTunnelEntranceRoute6_h: ; 0x5d6e3 to 0x5d6ef (12 bytes) (id=74) db $0c ; tileset db PATH_ENTRANCE_ROUTE_6_HEIGHT, PATH_ENTRANCE_ROUTE_6_WIDTH ; dimensions (y, x) dw UndergroundTunnelEntranceRoute6Blocks, UndergroundTunnelEntranceRoute6TextPointers, UndergroundTunnelEntranceRoute6Script ; blocks, texts, scripts db $00 ; connections dw UndergroundTunnelEntranceRoute6Object ; objects UndergroundTunnelEntranceRoute6Script: ; 5d6ef (17:56ef) ld a, $11 ld [$d365], a jp EnableAutoTextBoxDrawing UndergroundTunnelEntranceRoute6TextPointers: ; 5d6f7 (17:56f7) dw UndergroundTunnelEntranceRoute6Text1 UndergroundTunnelEntranceRoute6Text1: ; 5d6f9 (17:56f9) TX_FAR _UndergrdTunnelEntRoute6Text1 db "@" UndergroundTunnelEntranceRoute6Object: ; 0x5d6fe (size=34) db $a ; border tile db $3 ; warps db $7, $3, $3, $ff db $7, $4, $3, $ff db $4, $4, $1, UNDERGROUND_PATH_NS db $0 ; signs db $1 ; people db SPRITE_GIRL, $3 + 4, $2 + 4, $ff, $ff, $1 ; person ; warp-to EVENT_DISP $4, $7, $3 EVENT_DISP $4, $7, $4 EVENT_DISP $4, $4, $4 ; UNDERGROUND_PATH_NS UndergroundPathEntranceRoute7_h: ; 0x5d720 to 0x5d72c (12 bytes) (id=77) db $0c ; tileset db PATH_ENTRANCE_ROUTE_7_HEIGHT, PATH_ENTRANCE_ROUTE_7_WIDTH ; dimensions (y, x) dw UndergroundTunnelEntranceRoute7Blocks, UndergroundPathEntranceRoute7TextPointers, UndergroundPathEntranceRoute7Script ; blocks, texts, scripts db $00 ; connections dw UndergroundPathEntranceRoute7Object ; objects UndergroundPathEntranceRoute7Script: ; 5d72c (17:572c) ld a, $12 ld [$d365], a jp EnableAutoTextBoxDrawing UndergroundPathEntranceRoute7TextPointers: ; 5d734 (17:5734) dw UndergroundPathEntranceRoute7Text1 UndergroundPathEntranceRoute7Text1: ; 5d736 (17:5736) TX_FAR _UndergroundPathEntRoute7Text1 db "@" UndergroundPathEntranceRoute7Object: ; 0x5d73b (size=34) db $a ; border tile db $3 ; warps db $7, $3, $4, $ff db $7, $4, $4, $ff db $4, $4, $0, UNDERGROUND_PATH_WE db $0 ; signs db $1 ; people db SPRITE_FAT_BALD_GUY, $4 + 4, $2 + 4, $ff, $ff, $1 ; person ; warp-to EVENT_DISP $4, $7, $3 EVENT_DISP $4, $7, $4 EVENT_DISP $4, $4, $4 ; UNDERGROUND_PATH_WE UndergroundPathEntranceRoute7Copy_h: ; 5d75d (17:575d) db $0c ; tileset db PATH_ENTRANCE_ROUTE_7_HEIGHT, PATH_ENTRANCE_ROUTE_7_WIDTH ; dimensions (y, x) dw UndergroundTunnelEntranceRoute7CopyBlocks, UndergroundPathEntranceRoute7CopyTextPointers, UndergroundPathEntranceRoute7CopyScript ; blocks, texts, scripts db $00 ; connections dw UndergroundPathEntranceRoute7CopyObject ; objects UndergroundPathEntranceRoute7CopyScript: ; 5d769 (17:5769) ld a, $12 ld [$d365], a ret UndergroundPathEntranceRoute7CopyTextPointers: ; 5d76f (17:576f) dw UnnamedText_5d773 dw UnnamedText_5d77d UnnamedText_5d773: ; 5d773 (17:5773) TX_FAR _UnnamedText_5d773 db "@" UnnamedText_5d778: ; 5d778 (17:5778) TX_FAR _UnnamedText_5d778 db "@" UnnamedText_5d77d: ; 5d77d (17:577d) TX_FAR _UnnamedText_5d77d db "@" UnnamedText_5d782: ; 5d782 (17:5782) TX_FAR _UnnamedText_5d782 db "@" UndergroundPathEntranceRoute7CopyObject: ; 5d787 (17:5787) db $a ; border tile db $3 ; warps db $7, $3, $5, $ff db $7, $4, $5, $ff db $4, $4, $0, UNDERGROUND_PATH_WE db $0 ; signs db $2 ; people db SPRITE_GIRL, $2 + 4, $3 + 4, $ff, $ff, $1 ; person db SPRITE_FAT_BALD_GUY, $4 + 4, $2 + 4, $ff, $ff, $2 ; person ; warp-to EVENT_DISP $4, $7, $3 EVENT_DISP $4, $7, $4 EVENT_DISP $4, $4, $4 ; UNDERGROUND_PATH_WE SilphCo9_h: ; 0x5d7af to 0x5d7bb (12 bytes) (id=233) db $16 ; tileset db SILPH_CO_9F_HEIGHT, SILPH_CO_9F_WIDTH ; dimensions (y, x) dw SilphCo9Blocks, SilphCo9TextPointers, SilphCo9Script ; blocks, texts, scripts db $00 ; connections dw SilphCo9Object ; objects SilphCo9Script: ; 5d7bb (17:57bb) call SilphCo9Script_5d7d1 call EnableAutoTextBoxDrawing ld hl, SilphCo9TrainerHeaders ld de, SilphCo9ScriptPointers ld a, [W_SILPHCO9CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_SILPHCO9CURSCRIPT], a ret SilphCo9Script_5d7d1: ; 5d7d1 (17:57d1) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld hl, DataTable_5d82e ; $582e call Func_5d837 call Func_5d863 ld a, [$d834] bit 0, a jr nz, .asm_5d7f8 push af ld a, $5f ld [$d09f], a ld bc, $401 ld a, $17 call Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) pop af .asm_5d7f8 bit 1, a jr nz, .asm_5d80b push af ld a, $54 ld [$d09f], a ld bc, $209 ld a, $17 call Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) pop af .asm_5d80b bit 2, a jr nz, .asm_5d81e push af ld a, $54 ld [$d09f], a ld bc, $509 ld a, $17 call Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) pop af .asm_5d81e bit 3, a ret nz ld a, $5f ld [$d09f], a ld bc, $605 ld a, $17 jp Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) DataTable_5d82e: ; 5d82e (17:582e) db $04,$01,$02,$09,$05,$09,$06,$05,$FF Func_5d837: ; 5d837 (17:5837) push hl ld hl, $d73f ld a, [hli] ld b, a ld a, [hl] ld c, a xor a ld [$FF00+$e0], a pop hl .asm_5d843 ld a, [hli] cp $ff jr z, .asm_5d85f push hl ld hl, $ffe0 inc [hl] pop hl cp b jr z, .asm_5d854 inc hl jr .asm_5d843 .asm_5d854 ld a, [hli] cp c jr nz, .asm_5d843 ld hl, $d73f xor a ld [hli], a ld [hl], a ret .asm_5d85f xor a ld [$FF00+$e0], a ret Func_5d863: ; 5d863 (17:5863) ld hl, $d834 ld a, [$FF00+$e0] and a ret z cp $1 jr nz, .asm_5d871 set 0, [hl] ret .asm_5d871 cp $2 jr nz, .asm_5d878 set 1, [hl] ret .asm_5d878 cp $3 jr nz, .asm_5d87f set 2, [hl] ret .asm_5d87f cp $4 ret nz set 3, [hl] ret SilphCo9ScriptPointers: ; 5d885 (17:5885) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle SilphCo9TextPointers: ; 5d88b (17:588b) dw SilphCo9Text1 dw SilphCo9Text2 dw SilphCo9Text3 dw SilphCo9Text4 SilphCo9TrainerHeaders: ; 5d893 (17:5893) SilphCo9TrainerHeader0: ; 5d893 (17:5893) db $2 ; flag's bit db ($4 << 4) ; trainer's view range dw $d833 ; flag's byte dw SilphCo9BattleText1 ; 0x5912 TextBeforeBattle dw SilphCo9AfterBattleText1 ; 0x591c TextAfterBattle dw SilphCo9EndBattleText1 ; 0x5917 TextEndBattle dw SilphCo9EndBattleText1 ; 0x5917 TextEndBattle SilphCo9TrainerHeader1: ; 5d89f (17:589f) db $3 ; flag's bit db ($2 << 4) ; trainer's view range dw $d833 ; flag's byte dw SilphCo9BattleText2 ; 0x5921 TextBeforeBattle dw SilphCo9AfterBattleText2 ; 0x592b TextAfterBattle dw SilphCo9EndBattleText2 ; 0x5926 TextEndBattle dw SilphCo9EndBattleText2 ; 0x5926 TextEndBattle SilphCo9TrainerHeader2: ; 5d8ab (17:58ab) db $4 ; flag's bit db ($4 << 4) ; trainer's view range dw $d833 ; flag's byte dw SilphCo9BattleText3 ; 0x5930 TextBeforeBattle dw SilphCo9AfterBattleText3 ; 0x593a TextAfterBattle dw SilphCo9EndBattleText3 ; 0x5935 TextEndBattle dw SilphCo9EndBattleText3 ; 0x5935 TextEndBattle db $ff SilphCo9Text1: ; 5d8b8 (17:58b8) db $08 ; asm ld a, [$d838] bit 7, a jr nz, .asm_a14c3 ; 0x5d8be ld hl, UnnamedText_5d8e5 call PrintText ld a, $7 call Predef call GBFadeOut2 call Delay3 call GBFadeIn2 ld hl, UnnamedText_5d8ea call PrintText jr .asm_b6e28 ; 0x5d8da .asm_a14c3 ; 0x5d8dc ld hl, UnnamedText_5d8ef call PrintText .asm_b6e28 ; 0x5d8e2 jp TextScriptEnd UnnamedText_5d8e5: ; 5d8e5 (17:58e5) TX_FAR _UnnamedText_5d8e5 db "@" UnnamedText_5d8ea: ; 5d8ea (17:58ea) TX_FAR _UnnamedText_5d8ea db "@" UnnamedText_5d8ef: ; 5d8ef (17:58ef) TX_FAR _UnnamedText_5d8ef db "@" SilphCo9Text2: ; 5d8f4 (17:58f4) db $08 ; asm ld hl, SilphCo9TrainerHeader0 call TalkToTrainer jp TextScriptEnd SilphCo9Text3: ; 5d8fe (17:58fe) db $08 ; asm ld hl, SilphCo9TrainerHeader1 call TalkToTrainer jp TextScriptEnd SilphCo9Text4: ; 5d908 (17:5908) db $08 ; asm ld hl, SilphCo9TrainerHeader2 call TalkToTrainer jp TextScriptEnd SilphCo9BattleText1: ; 5d912 (17:5912) TX_FAR _SilphCo9BattleText1 db "@" SilphCo9EndBattleText1: ; 5d917 (17:5917) TX_FAR _SilphCo9EndBattleText1 db "@" SilphCo9AfterBattleText1: ; 5d91c (17:591c) TX_FAR _SilphCo9AfterBattleText1 db "@" SilphCo9BattleText2: ; 5d921 (17:5921) TX_FAR _SilphCo9BattleText2 db "@" SilphCo9EndBattleText2: ; 5d926 (17:5926) TX_FAR _SilphCo9EndBattleText2 db "@" SilphCo9AfterBattleText2: ; 5d92b (17:592b) TX_FAR _SilphCo9AfterBattleText2 db "@" SilphCo9BattleText3: ; 5d930 (17:5930) TX_FAR _SilphCo9BattleText3 db "@" SilphCo9EndBattleText3: ; 5d935 (17:5935) TX_FAR _SilphCo9EndBattleText3 db "@" SilphCo9AfterBattleText3: ; 5d93a (17:593a) TX_FAR _SilphCo9AfterBattleText3 db "@" SilphCo9Object: ; 0x5d93f (size=74) db $2e ; border tile db $5 ; warps db $0, $e, $0, SILPH_CO_10F db $0, $10, $0, SILPH_CO_8F db $0, $12, $0, SILPH_CO_ELEVATOR db $3, $9, $7, SILPH_CO_3F db $f, $11, $4, SILPH_CO_5F db $0 ; signs db $4 ; people db SPRITE_NURSE, $e + 4, $3 + 4, $ff, $d0, $1 ; person db SPRITE_ROCKET, $4 + 4, $2 + 4, $ff, $d1, $42, ROCKET + $C8, $25 ; trainer db SPRITE_OAK_AIDE, $d + 4, $15 + 4, $ff, $d0, $43, SCIENTIST + $C8, $a ; trainer db SPRITE_ROCKET, $10 + 4, $d + 4, $ff, $d1, $44, ROCKET + $C8, $26 ; trainer ; warp-to EVENT_DISP $d, $0, $e ; SILPH_CO_10F EVENT_DISP $d, $0, $10 ; SILPH_CO_8F EVENT_DISP $d, $0, $12 ; SILPH_CO_ELEVATOR EVENT_DISP $d, $3, $9 ; SILPH_CO_3F EVENT_DISP $d, $f, $11 ; SILPH_CO_5F SilphCo9Blocks: ; 5d989 (17:5989) INCBIN "maps/silphco9.blk" VictoryRoad1_h: ; 0x5d9fe to 0x5da0a (12 bytes) (id=108) db $11 ; tileset db VICTORY_ROAD_1_HEIGHT, VICTORY_ROAD_1_WIDTH ; dimensions (y, x) dw VictoryRoad1Blocks, VictoryRoad1TextPointers, VictoryRoad1Script ; blocks, texts, scripts db $00 ; connections dw VictoryRoad1Object ; objects VictoryRoad1Script: ; 5da0a (17:5a0a) ld hl, $d126 bit 5, [hl] res 5, [hl] call nz, .next call EnableAutoTextBoxDrawing ld hl, VictoryRoad1TrainerHeaders ld de, VictoryRoad1ScriptPointers ld a, [W_VICTORYROAD1CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_VICTORYROAD1CURSCRIPT], a ret .next ld a, [$d869] bit 7, a ret z ld a, $1d ld [$d09f], a ld bc, $604 ld a, $17 jp Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) VictoryRoad1ScriptPointers: ; 5da3a (17:5a3a) dw VictoryRoad1Script0 dw Func_324c dw EndTrainerBattle VictoryRoad1Script0: ; 5da40 (17:5a40) ld a, [$d869] bit 7, a jp nz, CheckFightingMapTrainers ld hl, CoordsData_5da5c ; $5a5c call CheckBoulderCoords jp nc, CheckFightingMapTrainers ld hl, $d126 set 5, [hl] ld hl, $d869 set 7, [hl] ret CoordsData_5da5c: ; 5da5c (17:5a5c) db $0D,$11,$FF VictoryRoad1TextPointers: ; 5da5f (17:5a5f) dw VictoryRoad1Text1 dw VictoryRoad1Text2 dw Predef5CText dw Predef5CText dw BoulderText dw BoulderText dw BoulderText VictoryRoad1TrainerHeaders: ; 5da6d (17:5a6d) VictoryRoad1TrainerHeader0: ; 5da6d (17:5a6d) db $1 ; flag's bit db ($2 << 4) ; trainer's view range dw $d869 ; flag's byte dw VictoryRoad1BattleText1 ; 0x5a9a TextBeforeBattle dw VictoryRoad1AfterBattleText1 ; 0x5aa4 TextAfterBattle dw VictoryRoad1EndBattleText1 ; 0x5a9f TextEndBattle dw VictoryRoad1EndBattleText1 ; 0x5a9f TextEndBattle VictoryRoad1TrainerHeader1: ; 5da79 (17:5a79) db $2 ; flag's bit db ($2 << 4) ; trainer's view range dw $d869 ; flag's byte dw VictoryRoad1BattleText2 ; 0x5aa9 TextBeforeBattle dw VictoryRoad1AfterBattleText2 ; 0x5ab3 TextAfterBattle dw VictoryRoad1EndBattleText2 ; 0x5aae TextEndBattle dw VictoryRoad1EndBattleText2 ; 0x5aae TextEndBattle db $ff VictoryRoad1Text1: ; 5da86 (17:5a86) db $08 ; asm ld hl, VictoryRoad1TrainerHeader0 call TalkToTrainer jp TextScriptEnd VictoryRoad1Text2: ; 5da90 (17:5a90) db $08 ; asm ld hl, VictoryRoad1TrainerHeader1 call TalkToTrainer jp TextScriptEnd VictoryRoad1BattleText1: ; 5da9a (17:5a9a) TX_FAR _VictoryRoad1BattleText1 db "@" VictoryRoad1EndBattleText1: ; 5da9f (17:5a9f) TX_FAR _VictoryRoad1EndBattleText1 db "@" VictoryRoad1AfterBattleText1: ; 5daa4 (17:5aa4) TX_FAR _VictoryRoad1AfterBattleText1 db "@" VictoryRoad1BattleText2: ; 5daa9 (17:5aa9) TX_FAR _VictoryRoad1BattleText2 db "@" VictoryRoad1EndBattleText2: ; 5daae (17:5aae) TX_FAR _VictoryRoad1EndBattleText2 db "@" VictoryRoad1AfterBattleText2: ; 5dab3 (17:5ab3) TX_FAR _VictoryRoad1AfterBattleText2 db "@" VictoryRoad1Object: ; 0x5dab8 (size=76) db $7d ; border tile db $3 ; warps db $11, $8, $2, $ff db $11, $9, $2, $ff db $1, $1, $0, VICTORY_ROAD_2 db $0 ; signs db $7 ; people db SPRITE_LASS, $5 + 4, $7 + 4, $ff, $d3, $41, COOLTRAINER_F + $C8, $5 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $2 + 4, $3 + 4, $ff, $d0, $42, COOLTRAINER_M + $C8, $5 ; trainer db SPRITE_BALL, $0 + 4, $b + 4, $ff, $ff, $83, TM_43 ; item db SPRITE_BALL, $2 + 4, $9 + 4, $ff, $ff, $84, RARE_CANDY ; item db SPRITE_BOULDER, $f + 4, $5 + 4, $ff, $10, $5 ; person db SPRITE_BOULDER, $2 + 4, $e + 4, $ff, $10, $6 ; person db SPRITE_BOULDER, $a + 4, $2 + 4, $ff, $10, $7 ; person ; warp-to EVENT_DISP $a, $11, $8 EVENT_DISP $a, $11, $9 EVENT_DISP $a, $1, $1 ; VICTORY_ROAD_2 VictoryRoad1Blocks: ; 5db04 (17:5b04) INCBIN "maps/victoryroad1.blk" ; updates the types of a party mon (pointed to in hl) to the ones of the mon specified in $d11e SetPartyMonTypes: ; 5db5e (17:5b5e) call Load16BitRegisters ld bc, W_PARTYMON1_TYPE1 - W_PARTYMON1DATA ; $5 add hl, bc ld a, [$d11e] ld [$d0b5], a push hl call GetMonHeader pop hl ld a, [W_MONHTYPE1] ld [hli], a ld a, [W_MONHTYPE2] ld [hl], a ret Func_5db79: ; 5db79 (17:5b79) call EnableAutoTextBoxDrawing ld a, $4 jp Func_3ef5 RedBedroomSNESText: ; 5db81 (17:5b81) TX_FAR _RedBedroomSNESText db "@" Func_5db86: ; 5db86 (17:5b86) call EnableAutoTextBoxDrawing ld a, $3 jp Func_3ef5 Route15UpstairsLeftBinoculars: ; 5db8e (17:5b8e) db $fc Func_5db8f: ; 5db8f (17:5b8f) ld a, [$c109] cp $4 ; i ret nz call EnableAutoTextBoxDrawing ld a, $a ; text id Route15UpstairsBinocularsText call Func_3ef5 ld a, ARTICUNO ld [$cf91], a call PlayCry jp DisplayMonFrontSpriteInBox Route15UpstairsBinocularsText: ; 5dba8 (17:5ba8) TX_FAR _Route15UpstairsBinocularsText db "@" AerodactylFossil: ; 5dbad (17:5bad) ld a, FOSSIL_AERODACTYL ld [$cf91], a call DisplayMonFrontSpriteInBox call EnableAutoTextBoxDrawing ld a, $9 call Func_3ef5 ret AerodactylFossilText: ; 5dbbe (17:5bbe) TX_FAR _AerodactylFossilText db "@" KabutopsFossil: ; 5bdc3 (17:5bc3) ld a, FOSSIL_KABUTOPS ld [$cf91], a call DisplayMonFrontSpriteInBox call EnableAutoTextBoxDrawing ld a, $b call Func_3ef5 ret KabutopsFossilText: ; 5dbd4 (17:5bd4) TX_FAR _KabutopsFossilText db "@" DisplayMonFrontSpriteInBox: ; 5dbd9 (17:5bd9) ; Displays a pokemon's front sprite in a pop-up window. ; [$cf91] = pokemon interal id number ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba call Delay3 xor a ld [$FF00+$b0], a call SaveScreenTilesToBuffer1 ld a, $11 ld [$d125], a call DisplayTextBoxID call UpdateSprites ld a, [$cf91] ld [$d0b5], a call GetMonHeader ld de, $8b10 call LoadMonFrontSprite ld a, $80 ld [$FF00+$e1], a FuncCoord 10, 11 ; $c486 ld hl, Coord ld a, $2 call Predef ; indirect jump to Func_3f073 (3f073 (f:7073)) call WaitForTextScrollButtonPress call LoadScreenTilesFromBuffer1 call Delay3 ld a, $90 ld [$FF00+$b0], a ret Func_5dc1a: ; 5dc1a (17:5c1a) call EnableAutoTextBoxDrawing ld a, $1 ld [$cc3c], a ld a, [$cd3d] call Func_3ef5 ret LinkCableHelp: ; 5dc29 (17:5c29) db $08 ; asm call SaveScreenTilesToBuffer1 ld hl, LinkCableHelpText1 call PrintText xor a ld [W_ANIMATIONID], a ld [wCurrentMenuItem], a ld [wLastMenuItem], a ld a, $3 ld [wMenuWatchedKeys], a ld a, $3 ld [wMaxMenuItem], a ld a, $2 ld [wTopMenuItemY], a ld a, $1 ld [wTopMenuItemX], a .asm_5c51 ld hl, $d730 set 6, [hl] ld hl, wTileMap ld b, $8 ld c, $d call TextBoxBorder ld hl, $c3ca ld de, HowToLinkText call PlaceString ld hl, LinkCableHelpText2 call PrintText call HandleMenuInput bit 1, a jr nz, .asm_5dc93 ; 0x5dc74 $1d ld a, [wCurrentMenuItem] cp $3 jr z, .asm_5dc93 ; 0x5dc7b $16 ld hl, $d730 res 6, [hl] ld hl, LinkCableInfoTexts add a ld d, $0 ld e, a add hl, de ld a, [hli] ld h, [hl] ld l, a call PrintText jp .asm_5c51 .asm_5dc93 ld hl, $d730 res 6, [hl] call LoadScreenTilesFromBuffer1 jp TextScriptEnd LinkCableHelpText1: ; 5dc9e (17:5c9e) TX_FAR _LinkCableHelpText1 db "@" LinkCableHelpText2: ; 5dca3 (17:5ca3) TX_FAR _LinkCableHelpText2 db "@" HowToLinkText: ; 5dca8 (17:5ca8) db "HOW TO LINK" next "COLOSSEUM" next "TRADE CENTER" next "STOP READING@" LinkCableInfoTexts: ; 5dcd8 (17:5cd8) dw LinkCableInfoText1 dw LinkCableInfoText2 dw LinkCableInfoText3 LinkCableInfoText1: ; 5dcde (17:5cde) TX_FAR _LinkCableInfoText1 db "@" LinkCableInfoText2: ; 5dce3 (17:5ce3) TX_FAR _LinkCableInfoText2 db "@" LinkCableInfoText3: ; 5dce8 (17:5ce8) TX_FAR _LinkCableInfoText3 db "@" ViridianSchoolBlackboard: ; 5dced (17:5ced) db $08 ; asm call SaveScreenTilesToBuffer1 ld hl, ViridianSchoolBlackboardText1 call PrintText xor a ld [W_ANIMATIONID], a ld [wCurrentMenuItem], a ld [wLastMenuItem], a ld a, $33 ld [wMenuWatchedKeys], a ld a, $2 ld [wMaxMenuItem], a ld a, $2 ld [wTopMenuItemY], a ld a, $1 ld [wTopMenuItemX], a .asm_5dd15 ld hl, $d730 set 6, [hl] ld hl, wTileMap ld bc, $060a call TextBoxBorder ld hl, $c3c9 ld de, StatusAilmentText1 call PlaceString ld hl, $c3ce ld de, StatusAilmentText2 call PlaceString ld hl, ViridianSchoolBlackboardText2 call PrintText call HandleMenuInput bit 1, a jr nz, .exitBlackboard bit 4, a jr z, .asm_5dd5c ld a, $2 ld [wMaxMenuItem], a ld a, $2 ld [wTopMenuItemY], a ld a, $6 ld [wTopMenuItemX], a ld a, $3 ld [W_ANIMATIONID], a jr .asm_5dd15 .asm_5dd5c bit 5, a jr z, .asm_5dd75 ld a, $2 ld [wMaxMenuItem], a ld a, $2 ld [wTopMenuItemY], a ld a, $1 ld [wTopMenuItemX], a xor a ld [W_ANIMATIONID], a jr .asm_5dd15 .asm_5dd75 ld a, [wCurrentMenuItem] ld b, a ld a, [W_ANIMATIONID] add b cp $5 jr z, .exitBlackboard ld hl, $d730 res 6, [hl] ld hl, ViridianBlackboardStatusPointers add a ld d, $0 ld e, a add hl, de ld a, [hli] ld h, [hl] ld l, a call PrintText jp .asm_5dd15 .exitBlackboard ld hl, $d730 res 6, [hl] call LoadScreenTilesFromBuffer1 jp TextScriptEnd ViridianSchoolBlackboardText1: ; 5dda2 (17:5da2) TX_FAR _ViridianSchoolBlackboardText1 db "@" ViridianSchoolBlackboardText2: ; 5dda7 (17:5da7) TX_FAR _ViridianSchoolBlackboardText2 db "@" StatusAilmentText1: ; 5ddac (17:5dac) db " SLP" next " PSN" next " PAR@" StatusAilmentText2: ; 5ddbb (17:5dbb) db " BRN" next " FRZ" next " QUIT@@" ViridianBlackboardStatusPointers: ; 5ddcc (17:5ddc) dw ViridianBlackboardSleepText dw ViridianBlackboardPoisonText dw ViridianBlackbaordPrlzText dw ViridianBlackboardBurnText dw ViridianBlackboardFrozenText ViridianBlackboardSleepText: ; 5ddd6 (17:5dd6) TX_FAR _ViridianBlackboardSleepText db "@" ViridianBlackboardPoisonText: ; 5dddb (17:5ddb) TX_FAR _ViridianBlackboardPoisonText db "@" ViridianBlackbaordPrlzText: ; 5dde0 (17:5de0) TX_FAR _ViridianBlackbaordPrlzText db "@" ViridianBlackboardBurnText: ; 5dde5 (17:5de5) TX_FAR _ViridianBlackboardBurnText db "@" ViridianBlackboardFrozenText: ; 5ddea (17:5dea) TX_FAR _ViridianBlackboardFrozenText db "@" Func_5ddef: ; 5ddef (17:5def) call EnableAutoTextBoxDrawing ld a, $26 jp Func_3ef5 VermilionGymTrashText: ; 5ddf7 (17:5df7) TX_FAR _VermilionGymTrashText db "@" GymTrashScript: ; 5ddfc (17:5dfc) call EnableAutoTextBoxDrawing ld a, [wWhichTrade] ; $cd3d ld [$cd5b], a ; Don't do the trash can puzzle if it's already been done. ld a, [$d773] bit 0, a jr z, .ok ld a, $26 ; DisplayTextID $26 = VermilionGymTrashText (nothing in the trash) jp Func_3ef5 .ok bit 1, a jr nz, .trySecondLock ld a, [$d743] ld b, a ld a, [$cd5b] cp b jr z, .openFirstLock ld a, $26 ; DisplayTextID $26 = VermilionGymTrashText (nothing in the trash) jr .done .openFirstLock ; Next can is trying for the second switch. ld hl, $d773 set 1, [hl] ld hl, GymTrashCans ; $5e7d ld a, [$cd5b] ; * 5 ld b, a add a add a add b ld d, 0 ld e, a add hl, de ld a, [hli] ld [$FF00+$db], a push hl call GenRandom swap a ld b, a ld a, [$FF00+$db] and b dec a pop hl ld d, 0 ld e, a add hl, de ld a, [hl] and $f ld [$d744], a ld a, $3b ; DisplayTextID $3b = VermilionGymTrashSuccesText1 (first lock opened!) jr .done .trySecondLock ld a, [$d744] ld b, a ld a, [$cd5b] cp b jr z, .openSecondLock ; Reset the cans. ld hl, $d773 res 1, [hl] call GenRandom and $e ld [$d743], a ld a, $3e ; DisplayTextID $3e = VermilionGymTrashFailText (locks reset!) jr .done .openSecondLock ; Completed the trash can puzzle. ld hl, $d773 set 0, [hl] ld hl, $d126 set 6, [hl] ld a, $3d ; DisplayTextID $3d = VermilionGymTrashSuccesText3 (2nd lock opened!) .done jp Func_3ef5 GymTrashCans: ; 5de7d (17:5e7d) db 2, 1, 3, 0, 0 ; 0 db 3, 0, 2, 4, 0 ; 1 db 2, 1, 5, 0, 0 ; 2 db 3, 0, 4, 6, 0 ; 3 db 4, 1, 3, 5, 7 ; 4 db 3, 2, 4, 8, 0 ; 5 db 3, 3, 7, 9, 0 ; 6 db 4, 4, 6, 8, 10 ; 7 db 3, 5, 7, 11, 0 ; 8 db 3, 6, 10, 12, 0 ; 9 db 4, 7, 9, 11, 13 ; 10 db 3, 8, 10, 14, 0 ; 11 db 2, 9, 13, 0, 0 ; 12 db 3, 10, 12, 14, 0 ; 13 db 2, 11, 13, 0, 0 ; 14 ; 5dec8 VermilionGymTrashSuccesText1: ; 5dec8 (17:5ec8) TX_FAR _VermilionGymTrashSuccesText1 db $08 ; asm call WaitForSoundToFinish ld a, $9d call PlaySound call WaitForSoundToFinish jp TextScriptEnd VermilionGymTrashSuccesText2: ; 5dedb (17:5edb) TX_FAR _VermilionGymTrashSuccesText2 db "@" UnnamedText_5dee0: ; 5dee0 (17:5ee0) db $08 ; asm call WaitForSoundToFinish ld a, $9d call PlaySound call WaitForSoundToFinish jp TextScriptEnd VermilionGymTrashSuccesText3: ; 5deef (17:5eef) TX_FAR _VermilionGymTrashSuccesText3 db $08 ; asm call WaitForSoundToFinish ld a, $ad call PlaySound call WaitForSoundToFinish jp TextScriptEnd VermilionGymTrashFailText: ; 5df02 (17:5f02) TX_FAR _VermilionGymTrashFailText db $08 ; asm call WaitForSoundToFinish ld a, $a5 call PlaySound call WaitForSoundToFinish jp TextScriptEnd SECTION "bank18",ROMX,BANK[$18] ViridianForestBlocks: ; 60000 (18:4000) INCBIN "maps/viridianforest.blk" UndergroundPathNSBlocks: ; 60198 (18:4198) INCBIN "maps/undergroundpathns.blk" UndergroundPathWEBlocks: ; 601f4 (18:41f4) INCBIN "maps/undergroundpathwe.blk" INCBIN "maps/unusedblocks60258.blk" SSAnne10Blocks: ; 603c0 (18:43c0) SSAnne9Blocks: ; 603c0 (18:43c0) INCBIN "maps/ssanne9.blk" PokemonTower1_h: ; 0x60420 to 0x6042c (12 bytes) (id=142) db $0f ; tileset db POKEMONTOWER_1_HEIGHT, POKEMONTOWER_1_WIDTH ; dimensions (y, x) dw PokemonTower1Blocks, PokemonTower1TextPointers, PokemonTower1Script ; blocks, texts, scripts db $00 ; connections dw PokemonTower1Object ; objects PokemonTower1Script: ; 6042c (18:442c) jp EnableAutoTextBoxDrawing PokemonTower1TextPointers: ; 6042f (18:442f) dw PokemonTower1Text1 dw PokemonTower1Text2 dw PokemonTower1Text3 dw PokemonTower1Text4 dw PokemonTower1Text5 PokemonTower1Text1: ; 60439 (18:4439) TX_FAR _PokemonTower1Text1 db "@" PokemonTower1Text2: ; 6043e (18:443e) TX_FAR _PokemonTower1Text2 db "@" PokemonTower1Text3: ; 60443 (18:4443) TX_FAR _PokemonTower1Text3 db "@" PokemonTower1Text4: ; 60448 (18:4448) TX_FAR _PokemonTower1Text4 db "@" PokemonTower1Text5: ; 6044d (18:444d) TX_FAR _PokemonTower1Text5 db "@" PokemonTower1Object: ; 0x60452 (size=58) db $1 ; border tile db $3 ; warps db $11, $a, $1, $ff db $11, $b, $1, $ff db $9, $12, $1, POKEMONTOWER_2 db $0 ; signs db $5 ; people db SPRITE_CABLE_CLUB_WOMAN, $d + 4, $f + 4, $ff, $d1, $1 ; person db SPRITE_MOM_GEISHA, $8 + 4, $6 + 4, $ff, $ff, $2 ; person db SPRITE_BALDING_GUY, $c + 4, $8 + 4, $ff, $ff, $3 ; person db SPRITE_GIRL, $7 + 4, $d + 4, $ff, $ff, $4 ; person db SPRITE_MEDIUM, $7 + 4, $11 + 4, $ff, $d2, $5 ; person ; warp-to EVENT_DISP $a, $11, $a EVENT_DISP $a, $11, $b EVENT_DISP $a, $9, $12 ; POKEMONTOWER_2 PokemonTower1Blocks: ; 6048c (18:448c) INCBIN "maps/pokemontower1.blk" PokemonTower2_h: ; 0x604e6 to 0x604f2 (12 bytes) (id=143) db $0f ; tileset db POKEMONTOWER_2_HEIGHT, POKEMONTOWER_2_WIDTH ; dimensions (y, x) dw PokemonTower2Blocks, PokemonTower2TextPointers, PokemonTower2Script ; blocks, texts, scripts db $00 ; connections dw PokemonTower2Object ; objects PokemonTower2Script: ; 604f2 (18:44f2) call EnableAutoTextBoxDrawing ld hl, PokemonTower2ScriptPointers ld a, [W_POKEMONTOWER2CURSCRIPT] jp CallFunctionInTable Func_604fe: ; 604fe (18:44fe) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_POKEMONTOWER2CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret PokemonTower2ScriptPointers: ; 60509 (18:4509) dw PokemonTower2Script0 dw PokemonTower2Script1 dw PokemonTower2Script2 PokemonTower2Script0: ; 6050f (18:450f) ld a, [$d764] bit 7, a ret nz ld hl, CoordsData_6055e ; $455e call ArePlayerCoordsInArray ret nc ld a, $ff ld [$c0ee], a call PlaySound ld c, BANK(Music_MeetRival) ld a, MUSIC_MEET_RIVAL call PlayMusic ld hl, $d764 res 6, [hl] ld a, [$cd3d] cp $1 ld a, $8 ld b, $0 jr nz, .asm_60544 ; 0x60539 $9 ld hl, $d764 set 6, [hl] ld a, $2 ld b, $c .asm_60544 ld [$d528], a ld a, $1 ld [$ff00+$8c], a ld a, b ld [$ff00+$8d], a call Func_34a6 ld a, $1 ld [$ff00+$8c], a call DisplayTextID xor a ld [H_CURRENTPRESSEDBUTTONS], a ld [H_NEWLYPRESSEDBUTTONS], a ret CoordsData_6055e: ; 6055e (18:455e) db $05,$0F db $06,$0E db $0F ; isn't this supposed to end in $ff? PokemonTower2Script1: ; 60563 (18:4563) ld a, [$d057] cp $ff jp z, Func_604fe ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld hl, $d764 set 7, [hl] ld a, $1 ld [$ff00+$8c], a call DisplayTextID ld de, MovementData_605b2 ld a, [$d764] bit 6, a jr nz, .asm_60589 ; 0x60584 $3 ld de, MovementData_605a9 .asm_60589 ld a, $1 ld [$ff00+$8c], a call MoveSprite ld a, $ff ld [$c0ee], a call PlaySound ld b, BANK(Music_RivalAlternateStart) ld hl, Music_RivalAlternateStart call Bankswitch ld a, $2 ld [W_POKEMONTOWER2CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret MovementData_605a9: ; 605a9 (18:45a9) db $C0,$00,$00,$C0,$00,$00,$C0,$C0,$FF MovementData_605b2: ; 605b2 (18:45b2) db $00,$00,$C0,$C0,$C0,$C0,$00,$00,$FF PokemonTower2Script2: ; 605bb (18:45bb) ld a, [$d730] bit 0, a ret nz ld a, $38 ld [$cc4d], a ld a, $11 call Predef xor a ld [wJoypadForbiddenButtonsMask], a call Func_2307 ld a, $0 ld [W_POKEMONTOWER2CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret PokemonTower2TextPointers: ; 605db (18:45db) dw PokemonTower2Text1 dw PokemonTower2Text2 PokemonTower2Text1: ; 605df (18:45df) db $08 ; asm ld a, [$d764] bit 7, a jr z, .asm_16f24 ; 0x605e5 ld hl, UnnamedText_6063c call PrintText jr .asm_41852 ; 0x605ed .asm_16f24 ; 0x605ef ld hl, UnnamedText_6062d call PrintText ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, UnnamedText_60632 ld de, UnnamedText_60637 ; XXX $4637 call PreBattleSaveRegisters ld a, $f2 ld [$d059], a ; select which team to use during the encounter ld a, [W_RIVALSTARTER] cp SQUIRTLE jr nz, .NotSquirtle ; 0x6060f ld a, $4 jr .done .NotSquirtle ; 0x60615 cp BULBASAUR jr nz, .Charmander ; 0x60617 ld a, $5 jr .done .Charmander ; 0x6061d ld a, $6 .done ld [W_TRAINERNO], a ld a, $1 ld [W_POKEMONTOWER2CURSCRIPT], a ld [W_CURMAPSCRIPT], a .asm_41852 ; 0x6062a jp TextScriptEnd UnnamedText_6062d: ; 6062d (18:462d) TX_FAR _UnnamedText_6062d db "@" UnnamedText_60632: ; 60632 (18:4632) TX_FAR _UnnamedText_60632 db "@" UnnamedText_60637: ; 60637 (18:4637) TX_FAR _UnnamedText_60637 db "@" UnnamedText_6063c: ; 6063c (18:463c) TX_FAR _UnnamedText_6063c db "@" PokemonTower2Text2: ; 60641 (18:4641) TX_FAR _PokemonTower2Text2 db "@" PokemonTower2Object: ; 0x60646 (size=32) db $1 ; border tile db $2 ; warps db $9, $3, $0, POKEMONTOWER_3 db $9, $12, $2, POKEMONTOWER_1 db $0 ; signs db $2 ; people db SPRITE_BLUE, $5 + 4, $e + 4, $ff, $ff, $1 ; person db SPRITE_MEDIUM, $7 + 4, $3 + 4, $ff, $d3, $2 ; person ; warp-to EVENT_DISP $a, $9, $3 ; POKEMONTOWER_3 EVENT_DISP $a, $9, $12 ; POKEMONTOWER_1 PokemonTower2Blocks: ; 60666 (18:4666) INCBIN "maps/pokemontower2.blk" PokemonTower3_h: ; 0x606c0 to 0x606cc (12 bytes) (id=144) db $0f ; tileset db POKEMONTOWER_3_HEIGHT, POKEMONTOWER_3_WIDTH ; dimensions (y, x) dw PokemonTower3Blocks, PokemonTower3TextPointers, PokemonTower3Script ; blocks, texts, scripts db $00 ; connections dw PokemonTower3Object ; objects PokemonTower3Script: ; 606cc (18:46cc) call EnableAutoTextBoxDrawing ld hl, PokemonTower3TrainerHeaders ld de, PokemonTower3ScriptPointers ld a, [W_POKEMONTOWER3CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_POKEMONTOWER3CURSCRIPT], a ret PokemonTower3ScriptPointers: ; 606df (18:46df) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle PokemonTower3TextPointers: ; 606e5 (18:46e5) dw PokemonTower3Text1 dw PokemonTower3Text2 dw PokemonTower3Text3 dw Predef5CText PokemonTower3TrainerHeaders: ; 606ed (18:46ed) PokemonTower3TrainerHeader0: ; 606ed (18:46ed) db $1 ; flag's bit db ($2 << 4) ; trainer's view range dw $d765 ; flag's byte dw PokemonTower3BattleText1 ; 0x4730 TextBeforeBattle dw PokemonTower3AfterBattleText1 ; 0x473a TextAfterBattle dw PokemonTower3EndBattleText1 ; 0x4735 TextEndBattle dw PokemonTower3EndBattleText1 ; 0x4735 TextEndBattle PokemonTower3TrainerHeader1: ; 606f9 (18:46f9) db $2 ; flag's bit db ($3 << 4) ; trainer's view range dw $d765 ; flag's byte dw PokemonTower3BattleText2 ; 0x473f TextBeforeBattle dw PokemonTower3AfterBattleText2 ; 0x4749 TextAfterBattle dw PokemonTower3EndBattleText2 ; 0x4744 TextEndBattle dw PokemonTower3EndBattleText2 ; 0x4744 TextEndBattle PokemonTower3TrainerHeader2: ; 60705 (18:4705) db $3 ; flag's bit db ($2 << 4) ; trainer's view range dw $d765 ; flag's byte dw PokemonTower3BattleText3 ; 0x474e TextBeforeBattle dw PokemonTower3AfterBattleText3 ; 0x4758 TextAfterBattle dw PokemonTower3EndBattleText3 ; 0x4753 TextEndBattle dw PokemonTower3EndBattleText3 ; 0x4753 TextEndBattle db $ff PokemonTower3Text1: ; 60712 (18:4712) db $08 ; asm ld hl, PokemonTower3TrainerHeader0 call TalkToTrainer jp TextScriptEnd PokemonTower3Text2: ; 6071c (18:471c) db $08 ; asm ld hl, PokemonTower3TrainerHeader1 call TalkToTrainer jp TextScriptEnd PokemonTower3Text3: ; 60726 (18:4726) db $08 ; asm ld hl, PokemonTower3TrainerHeader2 call TalkToTrainer jp TextScriptEnd PokemonTower3BattleText1: ; 60730 (18:4730) TX_FAR _PokemonTower3BattleText1 db "@" PokemonTower3EndBattleText1: ; 60735 (18:4735) TX_FAR _PokemonTower3EndBattleText1 db "@" PokemonTower3AfterBattleText1: ; 6073a (18:473a) TX_FAR _PokemonTower3AfterBattleText1 db "@" PokemonTower3BattleText2: ; 6073f (18:473f) TX_FAR _PokemonTower3BattleText2 db "@" PokemonTower3EndBattleText2: ; 60744 (18:4744) TX_FAR _PokemonTower3EndBattleText2 db "@" PokemonTower3AfterBattleText2: ; 60749 (18:4749) TX_FAR _PokemonTower3AfterBattleText2 db "@" PokemonTower3BattleText3: ; 6074e (18:474e) TX_FAR _PokemonTower3BattleText3 db "@" PokemonTower3EndBattleText3: ; 60753 (18:4753) TX_FAR _PokemonTower3EndBattleText3 db "@" PokemonTower3AfterBattleText3: ; 60758 (18:4758) TX_FAR _PokemonTower3AfterBattleText3 db "@" PokemonTower3Object: ; 0x6075d (size=51) db $1 ; border tile db $2 ; warps db $9, $3, $0, POKEMONTOWER_2 db $9, $12, $1, POKEMONTOWER_4 db $0 ; signs db $4 ; people db SPRITE_MEDIUM, $3 + 4, $c + 4, $ff, $d2, $41, CHANNELER + $C8, $5 ; trainer db SPRITE_MEDIUM, $8 + 4, $9 + 4, $ff, $d0, $42, CHANNELER + $C8, $6 ; trainer db SPRITE_MEDIUM, $d + 4, $a + 4, $ff, $d0, $43, CHANNELER + $C8, $8 ; trainer db SPRITE_BALL, $1 + 4, $c + 4, $ff, $ff, $84, ESCAPE_ROPE ; item ; warp-to EVENT_DISP $a, $9, $3 ; POKEMONTOWER_2 EVENT_DISP $a, $9, $12 ; POKEMONTOWER_4 PokemonTower3Blocks: ; 60790 (18:4790) INCBIN "maps/pokemontower3.blk" PokemonTower4_h: ; 0x607ea to 0x607f6 (12 bytes) (id=145) db $0f ; tileset db POKEMONTOWER_4_HEIGHT, POKEMONTOWER_4_WIDTH ; dimensions (y, x) dw PokemonTower4Blocks, PokemonTower4TextPointers, PokemonTower4Script ; blocks, texts, scripts db $00 ; connections dw PokemonTower4Object ; objects PokemonTower4Script: ; 607f6 (18:47f6) call EnableAutoTextBoxDrawing ld hl, PokemonTower4TrainerHeaders ld de, PokemonTower4ScriptPointers ld a, [W_POKEMONTOWER4CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_POKEMONTOWER4CURSCRIPT], a ret PokemonTower4ScriptPointers: ; 60809 (18:4809) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle PokemonTower4TextPointers: ; 6080f (18:480f) dw PokemonTower4Text1 dw PokemonTower4Text2 dw PokemonTower4Text3 dw Predef5CText dw Predef5CText dw Predef5CText PokemonTower4TrainerHeaders: ; 6081b (18:481b) PokemonTower4TrainerHeader0: ; 6081b (18:481b) db $1 ; flag's bit db ($2 << 4) ; trainer's view range dw $d766 ; flag's byte dw PokemonTower4BattleText1 ; 0x485e TextBeforeBattle dw PokemonTower4AfterBattleText1 ; 0x4868 TextAfterBattle dw PokemonTower4EndBattleText1 ; 0x4863 TextEndBattle dw PokemonTower4EndBattleText1 ; 0x4863 TextEndBattle PokemonTower4TrainerHeader1: ; 60827 (18:4827) db $2 ; flag's bit db ($2 << 4) ; trainer's view range dw $d766 ; flag's byte dw PokemonTower4BattleText2 ; 0x486d TextBeforeBattle dw PokemonTower4AfterBattleText2 ; 0x4877 TextAfterBattle dw PokemonTower4EndBattleText2 ; 0x4872 TextEndBattle dw PokemonTower4EndBattleText2 ; 0x4872 TextEndBattle PokemonTower4TrainerHeader2: ; 60833 (18:4833) db $3 ; flag's bit db ($2 << 4) ; trainer's view range dw $d766 ; flag's byte dw PokemonTower4BattleText3 ; 0x487c TextBeforeBattle dw PokemonTower4AfterBattleText3 ; 0x4886 TextAfterBattle dw PokemonTower4EndBattleText3 ; 0x4881 TextEndBattle dw PokemonTower4EndBattleText3 ; 0x4881 TextEndBattle db $ff PokemonTower4Text1: ; 60840 (18:4840) db $08 ; asm ld hl, PokemonTower4TrainerHeader0 call TalkToTrainer jp TextScriptEnd PokemonTower4Text2: ; 6084a (18:484a) db $08 ; asm ld hl, PokemonTower4TrainerHeader1 call TalkToTrainer jp TextScriptEnd PokemonTower4Text3: ; 60854 (18:4854) db $08 ; asm ld hl, PokemonTower4TrainerHeader2 call TalkToTrainer jp TextScriptEnd PokemonTower4BattleText1: ; 6085e (18:485e) TX_FAR _PokemonTower4BattleText1 db "@" PokemonTower4EndBattleText1: ; 60863 (18:4863) TX_FAR _PokemonTower4EndBattleText1 db "@" PokemonTower4AfterBattleText1: ; 60868 (18:4868) TX_FAR _PokemonTower4AfterBattleText1 db "@" PokemonTower4BattleText2: ; 6086d (18:486d) TX_FAR _PokemonTower4BattleText2 db "@" PokemonTower4EndBattleText2: ; 60872 (18:4872) TX_FAR _PokemonTower4EndBattleText2 db "@" PokemonTower4AfterBattleText2: ; 60877 (18:4877) TX_FAR _PokemonTower4AfterBattleText2 db "@" PokemonTower4BattleText3: ; 6087c (18:487c) TX_FAR _PokemonTower4BattleText3 db "@" PokemonTower4EndBattleText3: ; 60881 (18:4881) TX_FAR _PokemonTower4EndBattleText3 db "@" PokemonTower4AfterBattleText3: ; 60886 (18:4886) TX_FAR _PokemonTower4AfterBattleText3 db "@" PokemonTower4Object: ; 0x6088b (size=65) db $1 ; border tile db $2 ; warps db $9, $3, $0, POKEMONTOWER_5 db $9, $12, $1, POKEMONTOWER_3 db $0 ; signs db $6 ; people db SPRITE_MEDIUM, $a + 4, $5 + 4, $ff, $d3, $41, CHANNELER + $C8, $9 ; trainer db SPRITE_MEDIUM, $7 + 4, $f + 4, $ff, $d0, $42, CHANNELER + $C8, $a ; trainer db SPRITE_MEDIUM, $c + 4, $e + 4, $ff, $d2, $43, CHANNELER + $C8, $c ; trainer db SPRITE_BALL, $a + 4, $c + 4, $ff, $ff, $84, ELIXER ; item db SPRITE_BALL, $a + 4, $9 + 4, $ff, $ff, $85, AWAKENING ; item db SPRITE_BALL, $10 + 4, $c + 4, $ff, $ff, $86, HP_UP ; item ; warp-to EVENT_DISP $a, $9, $3 ; POKEMONTOWER_5 EVENT_DISP $a, $9, $12 ; POKEMONTOWER_3 PokemonTower4Blocks: ; 608cc (18:48cc) INCBIN "maps/pokemontower4.blk" PokemonTower5_h: ; 0x60926 to 0x60932 (12 bytes) (id=146) db $0f ; tileset db POKEMONTOWER_5_HEIGHT, POKEMONTOWER_5_WIDTH ; dimensions (y, x) dw PokemonTower5Blocks, PokemonTower5TextPointers, PokemonTower5Script ; blocks, texts, scripts db $00 ; connections dw PokemonTower5Object ; objects PokemonTower5Script: ; 60932 (18:4932) call EnableAutoTextBoxDrawing ld hl, PokemonTower5TrainerHeaders ld de, PokemonTower5ScriptPointers ld a, [W_POKEMONTOWER5CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_POKEMONTOWER5CURSCRIPT], a ret PokemonTower5ScriptPointers: ; 60945 (18:4945) dw PokemonTower5Script0 dw Func_324c dw EndTrainerBattle PokemonTower5Script0: ; 6094b (18:494b) ld hl, CoordsData_60992 ; $4992 call ArePlayerCoordsInArray jr c, .asm_60960 ld hl, $d72e res 4, [hl] ld hl, $d767 res 7, [hl] jp CheckFightingMapTrainers .asm_60960 ld hl, $d767 bit 7, [hl] set 7, [hl] ret nz xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld hl, $d72e set 4, [hl] ld a, $7 call Predef ; indirect jump to HealParty (f6a5 (3:76a5)) call GBFadeOut2 call Delay3 call Delay3 call GBFadeIn2 ld a, $7 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID xor a ld [wJoypadForbiddenButtonsMask], a ret CoordsData_60992: ; 60992 (18:4992) db $08,$0A db $08,$0B db $09,$0A db $09,$0B db $FF PokemonTower5TextPointers: ; 6099b (18:499b) dw PokemonTower5Text1 dw PokemonTower5Text2 dw PokemonTower5Text3 dw PokemonTower5Text4 dw PokemonTower5Text5 dw Predef5CText dw PokemonTower5Text7 PokemonTower5TrainerHeaders: ; 609a9 (18:49a9) PokemonTower5TrainerHeader0: ; 609a9 (18:49a9) db $2 ; flag's bit db ($2 << 4) ; trainer's view range dw $d767 ; flag's byte dw PokemonTower5BattleText1 ; 0x49e9 TextBeforeBattle dw PokemonTower5AfterBattleText1 ; 0x49f3 TextAfterBattle dw PokemonTower5EndBattleText1 ; 0x49ee TextEndBattle dw PokemonTower5EndBattleText1 ; 0x49ee TextEndBattle PokemonTower5TrainerHeader1: ; 609b5 (18:49b5) db $3 ; flag's bit db ($3 << 4) ; trainer's view range dw $d767 ; flag's byte dw PokemonTower5BattleText2 ; 0x4a02 TextBeforeBattle dw PokemonTower5AfterBattleText2 ; 0x4a0c TextAfterBattle dw PokemonTower5EndBattleText2 ; 0x4a07 TextEndBattle dw PokemonTower5EndBattleText2 ; 0x4a07 TextEndBattle PokemonTower5TrainerHeader2: ; 609c1 (18:49c1) db $4 ; flag's bit db ($2 << 4) ; trainer's view range dw $d767 ; flag's byte dw PokemonTower5BattleText3 ; 0x4a1b TextBeforeBattle dw PokemonTower5AfterBattleText3 ; 0x4a25 TextAfterBattle dw PokemonTower5EndBattleText3 ; 0x4a20 TextEndBattle dw PokemonTower5EndBattleText3 ; 0x4a20 TextEndBattle PokemonTower5TrainerHeader3: ; 609cd (18:49cd) db $5 ; flag's bit db ($2 << 4) ; trainer's view range dw $d767 ; flag's byte dw PokemonTower5BattleText4 ; 0x4a34 TextBeforeBattle dw PokemonTower5AfterBattleText4 ; 0x4a3e TextAfterBattle dw PokemonTower5EndBattleText4 ; 0x4a39 TextEndBattle dw PokemonTower5EndBattleText4 ; 0x4a39 TextEndBattle db $ff PokemonTower5Text1: ; 609da (18:49da) TX_FAR _PokemonTower5Text1 db "@" PokemonTower5Text2: ; 609df (18:49df) db $08 ; asm ld hl, PokemonTower5TrainerHeader0 call TalkToTrainer jp TextScriptEnd PokemonTower5BattleText1: ; 609e9 (18:49e9) TX_FAR _PokemonTower5BattleText1 db "@" PokemonTower5EndBattleText1: ; 609ee (18:49ee) TX_FAR _PokemonTower5EndBattleText1 db "@" PokemonTower5AfterBattleText1: ; 609f3 (18:49f3) TX_FAR _PokemonTower5AfterBattleText1 db "@" PokemonTower5Text3: ; 609f8 (18:49f8) db $08 ; asm ld hl, PokemonTower5TrainerHeader1 call TalkToTrainer jp TextScriptEnd PokemonTower5BattleText2: ; 60a02 (18:4a02) TX_FAR _PokemonTower5BattleText2 db "@" PokemonTower5EndBattleText2: ; 60a07 (18:4a07) TX_FAR _PokemonTower5EndBattleText2 db "@" PokemonTower5AfterBattleText2: ; 60a0c (18:4a0c) TX_FAR _PokemonTower5AfterBattleText2 db "@" PokemonTower5Text4: ; 60a11 (18:4a11) db $08 ; asm ld hl, PokemonTower5TrainerHeader2 call TalkToTrainer jp TextScriptEnd PokemonTower5BattleText3: ; 60a1b (18:4a1b) TX_FAR _PokemonTower5BattleText3 db "@" PokemonTower5EndBattleText3: ; 60a20 (18:4a20) TX_FAR _PokemonTower5EndBattleText3 db "@" PokemonTower5AfterBattleText3: ; 60a25 (18:4a25) TX_FAR _PokemonTower5AfterBattleText3 db "@" PokemonTower5Text5: ; 60a2a (18:4a2a) db $08 ; asm ld hl, PokemonTower5TrainerHeader3 ; $49cd call TalkToTrainer jp TextScriptEnd PokemonTower5BattleText4: ; 60a34 (18:4a34) TX_FAR _PokemonTower5BattleText4 db "@" PokemonTower5EndBattleText4: ; 60a39 (18:4a39) TX_FAR _PokemonTower5EndBattleText4 db "@" PokemonTower5AfterBattleText4: ; 60a3e (18:4a3e) TX_FAR _PokemonTower5AfterBattleText4 db "@" PokemonTower5Text7: ; 60a43 (18:4a43) TX_FAR _UnnamedText_60a43 db "@" PokemonTower5Object: ; 0x60a48 (size=65) db $1 ; border tile db $2 ; warps db $9, $3, $0, POKEMONTOWER_4 db $9, $12, $0, POKEMONTOWER_6 db $0 ; signs db $6 ; people db SPRITE_MEDIUM, $8 + 4, $c + 4, $ff, $ff, $1 ; person db SPRITE_MEDIUM, $7 + 4, $11 + 4, $ff, $d2, $42, CHANNELER + $C8, $e ; trainer db SPRITE_MEDIUM, $3 + 4, $e + 4, $ff, $d2, $43, CHANNELER + $C8, $10 ; trainer db SPRITE_MEDIUM, $a + 4, $6 + 4, $ff, $d3, $44, CHANNELER + $C8, $11 ; trainer db SPRITE_MEDIUM, $10 + 4, $9 + 4, $ff, $d3, $45, CHANNELER + $C8, $12 ; trainer db SPRITE_BALL, $e + 4, $6 + 4, $ff, $ff, $86, NUGGET ; item ; warp-to EVENT_DISP $a, $9, $3 ; POKEMONTOWER_4 EVENT_DISP $a, $9, $12 ; POKEMONTOWER_6 PokemonTower5Blocks: ; 60a89 (18:4a89) INCBIN "maps/pokemontower5.blk" PokemonTower6_h: ; 0x60ae3 to 0x60aef (12 bytes) (id=147) db $0f ; tileset db POKEMONTOWER_6_HEIGHT, POKEMONTOWER_6_WIDTH ; dimensions (y, x) dw PokemonTower6Blocks, PokemonTower6TextPointers, PokemonTower6Script ; blocks, texts, scripts db $00 ; connections dw PokemonTower6Object ; objects PokemonTower6Script: ; 60aef (18:4aef) call EnableAutoTextBoxDrawing ld hl, PokemonTower6TrainerHeaders ld de, PokemonTower6ScriptPointers ld a, [W_POKEMONTOWER6CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_POKEMONTOWER6CURSCRIPT], a ret Func_60b02: ; 60b02 (18:4b02) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_POKEMONTOWER6CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret PokemonTower6ScriptPointers: ; 60b0d (18:4b0d) dw PokemonTower6Script0 dw Func_324c dw EndTrainerBattle dw PokemonTower6Script3 dw PokemonTower6Script4 PokemonTower6Script0: ; 60b17 (18:4b17) ld a, [$d768] bit 7, a jp nz, CheckFightingMapTrainers ld hl, CoordsData_60b45 ; $4b45 call ArePlayerCoordsInArray jp nc, CheckFightingMapTrainers xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, $6 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld a, $91 ld [W_CUROPPONENT], a ; $d059 ld a, $1e ld [W_CURENEMYLVL], a ; $d127 ld a, $4 ld [W_POKEMONTOWER6CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret CoordsData_60b45: ; 60b45 (18:4b45) db $10,$0A,$FF PokemonTower6Script4: ; 60b48 (18:4b48) ld a, [W_ISINBATTLE] ; $d057 cp $ff jp z, Func_60b02 ld a, $ff ld [wJoypadForbiddenButtonsMask], a ld a, [$d72d] bit 6, a ret nz call UpdateSprites ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld a, [$cf0b] and a jr nz, .asm_60b82 ld hl, $d768 set 7, [hl] ld a, $7 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID xor a ld [wJoypadForbiddenButtonsMask], a ld a, $0 ld [W_POKEMONTOWER6CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret .asm_60b82 ld a, $1 ld [$cd38], a ld a, $10 ld [$ccd3], a xor a ld [$c206], a ld [$cd3b], a ld hl, $d730 set 7, [hl] ld a, $3 ld [W_POKEMONTOWER6CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret PokemonTower6Script3: ; 60ba1 (18:4ba1) ld a, [$cd38] and a ret nz call Delay3 xor a ld [W_POKEMONTOWER6CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret PokemonTower6TextPointers: ; 60bb1 (18:4bb1) dw PokemonTower6Text1 dw PokemonTower6Text2 dw PokemonTower6Text3 dw Predef5CText dw Predef5CText dw PokemonTower6Text6 dw PokemonTower6Text7 PokemonTower6TrainerHeaders: ; 60bbf (18:4bbf) PokemonTower6TrainerHeader0: ; 60bbf (18:4bbf) db $1 ; flag's bit db ($3 << 4) ; trainer's view range dw $d768 ; flag's byte dw PokemonTower6BattleText1 ; 0x4c29 TextBeforeBattle dw PokemonTower6AfterBattleText1 ; 0x4c33 TextAfterBattle dw PokemonTower6EndBattleText1 ; 0x4c2e TextEndBattle dw PokemonTower6EndBattleText1 ; 0x4c2e TextEndBattle PokemonTower6TrainerHeader1: ; 60bcb (18:4bcb) db $2 ; flag's bit db ($3 << 4) ; trainer's view range dw $d768 ; flag's byte dw PokemonTower6BattleText2 ; 0x4c38 TextBeforeBattle dw PokemonTower6AfterBattleText2 ; 0x4c42 TextAfterBattle dw PokemonTower6EndBattleText2 ; 0x4c3d TextEndBattle dw PokemonTower6EndBattleText2 ; 0x4c3d TextEndBattle PokemonTower6TrainerHeader2: ; 60bd7 (18:4bd7) db $3 ; flag's bit db ($2 << 4) ; trainer's view range dw $d768 ; flag's byte dw PokemonTower6BattleText3 ; 0x4c47 TextBeforeBattle dw PokemonTower6AfterBattleText3 ; 0x4c51 TextAfterBattle dw PokemonTower6EndBattleText3 ; 0x4c4c TextEndBattle dw PokemonTower6EndBattleText3 ; 0x4c4c TextEndBattle db $ff PokemonTower6Text1: ; 60be4 (18:4be4) db $08 ; asm ld hl, PokemonTower6TrainerHeader0 call TalkToTrainer jp TextScriptEnd PokemonTower6Text2: ; 60bee (18:4bee) db $08 ; asm ld hl, PokemonTower6TrainerHeader1 call TalkToTrainer jp TextScriptEnd PokemonTower6Text3: ; 60bf8 (18:4bf8) db $08 ; asm ld hl, PokemonTower6TrainerHeader2 call TalkToTrainer jp TextScriptEnd PokemonTower6Text7: ; 60c02 (18:4c02) db $8 ld hl, UnnamedText_60c1f call PrintText ld a, MAROWAK call PlayCry call WaitForSoundToFinish ld c, $1e call DelayFrames ld hl, UnnamedText_60c24 call PrintText jp TextScriptEnd UnnamedText_60c1f: ; 60c1f (18:4c1f) TX_FAR _UnnamedText_60c1f db "@" UnnamedText_60c24: ; 60c24 (18:4c24) TX_FAR _UnnamedText_60c24 db "@" PokemonTower6BattleText1: ; 60c29 (18:4c29) TX_FAR _PokemonTower6BattleText1 db "@" PokemonTower6EndBattleText1: ; 60c2e (18:4c2e) TX_FAR _PokemonTower6EndBattleText1 db "@" PokemonTower6AfterBattleText1: ; 60c33 (18:4c33) TX_FAR _PokemonTower6AfterBattleText1 db "@" PokemonTower6BattleText2: ; 60c38 (18:4c38) TX_FAR _PokemonTower6BattleText2 db "@" PokemonTower6EndBattleText2: ; 60c3d (18:4c3d) TX_FAR _PokemonTower6EndBattleText2 db "@" PokemonTower6AfterBattleText2: ; 60c42 (18:4c42) TX_FAR _PokemonTower6AfterBattleText2 db "@" PokemonTower6BattleText3: ; 60c47 (18:4c47) TX_FAR _PokemonTower6BattleText3 db "@" PokemonTower6EndBattleText3: ; 60c4c (18:4c4c) TX_FAR _PokemonTower6EndBattleText3 db "@" PokemonTower6AfterBattleText3: ; 60c51 (18:4c51) TX_FAR _PokemonTower6AfterBattleText3 db "@" PokemonTower6Text6: ; 60c56 (18:4c56) TX_FAR _UnnamedText_60c56 db "@" PokemonTower6Object: ; 0x60c5b (size=58) db $1 ; border tile db $2 ; warps db $9, $12, $1, POKEMONTOWER_5 db $10, $9, $0, POKEMONTOWER_7 db $0 ; signs db $5 ; people db SPRITE_MEDIUM, $a + 4, $c + 4, $ff, $d3, $41, CHANNELER + $C8, $13 ; trainer db SPRITE_MEDIUM, $5 + 4, $9 + 4, $ff, $d0, $42, CHANNELER + $C8, $14 ; trainer db SPRITE_MEDIUM, $5 + 4, $10 + 4, $ff, $d2, $43, CHANNELER + $C8, $15 ; trainer db SPRITE_BALL, $8 + 4, $6 + 4, $ff, $ff, $84, RARE_CANDY ; item db SPRITE_BALL, $e + 4, $e + 4, $ff, $ff, $85, X_ACCURACY ; item ; warp-to EVENT_DISP $a, $9, $12 ; POKEMONTOWER_5 EVENT_DISP $a, $10, $9 ; POKEMONTOWER_7 PokemonTower6Blocks: ; 60c95 (18:4c95) INCBIN "maps/pokemontower6.blk" INCBIN "maps/unusedblocks60cef.blk" PokemonTower7_h: ; 0x60cf9 to 0x60d05 (12 bytes) (id=148) db $0f ; tileset db POKEMONTOWER_7_HEIGHT, POKEMONTOWER_7_WIDTH ; dimensions (y, x) dw PokemonTower7Blocks, PokemonTower7TextPointers, PokemonTower7Script ; blocks, texts, scripts db $00 ; connections dw PokemonTower7Object ; objects PokemonTower7Script: ; 60d05 (18:4d05) call EnableAutoTextBoxDrawing ld hl, PokemonTower7TrainerHeaders ld de, PokemonTower7ScriptPointers ld a, [W_POKEMONTOWER7CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_POKEMONTOWER7CURSCRIPT], a ret Func_60d18: ; 60d18 (18:4d18) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_POKEMONTOWER7CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret PokemonTower7ScriptPointers: ; 60d23 (18:4d23) dw CheckFightingMapTrainers dw Func_324c dw PokemonTower7Script2 dw PokemonTower7Script3 dw PokemonTower7Script4 PokemonTower7Script2: ; 60d23 (18:4d23) ld hl, wFlags_0xcd60 res 0, [hl] ld a, [W_ISINBATTLE] ; $d057 cp $ff jp z, Func_60d18 call EndTrainerBattle ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld a, [$cf13] ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID call Func_60db6 ld a, $3 ld [W_POKEMONTOWER7CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret PokemonTower7Script3: ; 60d56 (18:4d56) ld a, [$d730] bit 0, a ret nz ld hl, W_MISSABLEOBJECTLIST ld a, [$cf13] ld b, a .missableObjectsListLoop ld a, [hli] cp b ; search for sprite ID in missing objects list ld a, [hli] jr nz, .missableObjectsListLoop ld [$cc4d], a ; remove missable object ld a, $11 call Predef ; indirect jump to RemoveMissableObject (f1d7 (3:71d7)) xor a ld [wJoypadForbiddenButtonsMask], a ld [$cf13], a ld [wTrainerHeaderFlagBit], a ld [$da38], a ld a, $0 ld [W_POKEMONTOWER7CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret PokemonTower7Script4: ; 60d86 (18:4d86) ld a, $ff ld [wJoypadForbiddenButtonsMask], a ld a, $43 ld [$cc4d], a ld a, $11 call Predef ; indirect jump to RemoveMissableObject (f1d7 (3:71d7)) ld a, $4 ld [$c109], a ld a, $95 ld [H_DOWNARROWBLINKCNT1], a ; $FF00+$8b ld a, $1 ld [$d42f], a ld a, $4 ld [$d365], a ld hl, $d72d set 3, [hl] ld a, $0 ld [W_POKEMONTOWER7CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret Func_60db6: ; 60db6 (18:4db6) ld hl, CoordsData_60de3 ; $4de3 ld a, [$cf13] dec a swap a ld d, $0 ld e, a add hl, de ld a, [W_YCOORD] ; $d361 ld b, a ld a, [W_XCOORD] ; $d362 ld c, a .asm_60dcb ld a, [hli] cp b jr nz, .asm_60dde ld a, [hli] cp c jr nz, .asm_60ddf ld a, [hli] ld d, [hl] ld e, a ld a, [$cf13] ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c jp MoveSprite .asm_60dde inc hl .asm_60ddf inc hl inc hl jr .asm_60dcb CoordsData_60de3: ; 60de3 (18:4de3) db $0C,$09 dw MovementData_60e13 db $0B,$0A dw MovementData_60e1b db $0B,$0B dw MovementData_60e22 db $0B,$0C dw MovementData_60e22 db $0A,$0C dw MovementData_60e28 db $09,$0B dw MovementData_60e30 db $09,$0A dw MovementData_60e22 db $09,$09 dw MovementData_60e22 db $08,$09 dw MovementData_60e37 db $07,$0A dw MovementData_60e22 db $07,$0B dw MovementData_60e22 db $07,$0C dw MovementData_60e22 MovementData_60e13: ; 60e13 db $C0,$00,$00,$00,$00,$00,$80,$FF MovementData_60e1b: ; 60e1b db $00,$C0,$00,$00,$00,$00,$FF MovementData_60e22: ; 60e22 db $00,$00,$00,$00,$00,$FF MovementData_60e28: ; 60e28 db $80,$00,$00,$00,$00,$00,$00,$FF MovementData_60e30: ; 60e30 db $00,$00,$00,$80,$00,$00,$FF MovementData_60e37: ; 60e37 db $C0,$00,$00,$00,$00,$00,$00,$FF PokemonTower7TextPointers: ; 60e3f (18:4e3f) dw PokemonTower7Text1 dw PokemonTower7Text2 dw PokemonTower7Text3 dw PokemonTower7Text4 PokemonTower7TrainerHeaders: ; 60e47 (18:4e47) PokemonTower7TrainerHeader0: ; 60e47 (18:4e47) db $1 ; flag's bit db ($3 << 4) ; trainer's view range dw $d769 ; flag's byte dw PokemonTower7BattleText1 ; 0x4ec9 TextBeforeBattle dw PokemonTower7AfterBattleText1 ; 0x4ed3 TextAfterBattle dw PokemonTower7EndBattleText1 ; 0x4ece TextEndBattle dw PokemonTower7EndBattleText1 ; 0x4ece TextEndBattle PokemonTower7TrainerHeader1: ; 60e53 (18:4e53) db $2 ; flag's bit db ($3 << 4) ; trainer's view range dw $d769 ; flag's byte dw PokemonTower7BattleText2 ; 0x4ed8 TextBeforeBattle dw PokemonTower7AfterBattleText2 ; 0x4ee2 TextAfterBattle dw PokemonTower7EndBattleText2 ; 0x4edd TextEndBattle dw PokemonTower7EndBattleText2 ; 0x4edd TextEndBattle PokemonTower7TrainerHeader2: ; 60e5f (18:4e5f) db $3 ; flag's bit db ($3 << 4) ; trainer's view range dw $d769 ; flag's byte dw PokemonTower7BattleText3 ; 0x4ee7 TextBeforeBattle dw PokemonTower7AfterBattleText3 ; 0x4ef1 TextAfterBattle dw PokemonTower7EndBattleText3 ; 0x4eec TextEndBattle dw PokemonTower7EndBattleText3 ; 0x4eec TextEndBattle db $ff PokemonTower7Text1: ; 60e6c (18:4e6c) db $08 ; asm ld hl, PokemonTower7TrainerHeader0 call TalkToTrainer jp TextScriptEnd PokemonTower7Text2: ; 60e76 (18:4e76) db $08 ; asm ld hl, PokemonTower7TrainerHeader1 call TalkToTrainer jp TextScriptEnd PokemonTower7Text3: ; 60e80 (18:4e80) db $08 ; asm ld hl, PokemonTower7TrainerHeader2 call TalkToTrainer jp TextScriptEnd PokemonTower7Text4: ; 60e8a (18:4e8a) db $08 ; asm ld hl, UnnamedText_60ec4 call PrintText ld hl, $d7e0 set 7, [hl] ld hl, $d769 set 7, [hl] ld a, $44 ld [$cc4d], a ld a, $15 call Predef ld a, $17 ld [$cc4d], a ld a, $11 call Predef ld a, $18 ld [$cc4d], a ld a, $15 call Predef ld a, $4 ld [W_POKEMONTOWER7CURSCRIPT], a ld [W_CURMAPSCRIPT], a jp TextScriptEnd UnnamedText_60ec4: ; 60ec4 (18:4ec4) TX_FAR _UnnamedText_60ec4 db "@" PokemonTower7BattleText1: ; 60ec9 (18:4ec9) TX_FAR _PokemonTower7BattleText1 db "@" PokemonTower7EndBattleText1: ; 60ece (18:4ece) TX_FAR _PokemonTower7EndBattleText1 db "@" PokemonTower7AfterBattleText1: ; 60ed3 (18:4ed3) TX_FAR _PokemonTower7AfterBattleText1 db "@" PokemonTower7BattleText2: ; 60ed8 (18:4ed8) TX_FAR _PokemonTower7BattleText2 db "@" PokemonTower7EndBattleText2: ; 60edd (18:4edd) TX_FAR _PokemonTower7EndBattleText2 db "@" PokemonTower7AfterBattleText2: ; 60ee2 (18:4ee2) TX_FAR _PokemonTower7AfterBattleText2 db "@" PokemonTower7BattleText3: ; 60ee7 (18:4ee7) TX_FAR _PokemonTower7BattleText3 db "@" PokemonTower7EndBattleText3: ; 60eec (18:4eec) TX_FAR _PokemonTower7EndBattleText3 db "@" PokemonTower7AfterBattleText3: ; 60ef1 (18:4ef1) TX_FAR _PokemonTower7AfterBattleText3 db "@" PokemonTower7Object: ; 0x60ef6 (size=42) db $1 ; border tile db $1 ; warps db $10, $9, $1, POKEMONTOWER_6 db $0 ; signs db $4 ; people db SPRITE_ROCKET, $b + 4, $9 + 4, $ff, $d3, $41, ROCKET + $C8, $13 ; trainer db SPRITE_ROCKET, $9 + 4, $c + 4, $ff, $d2, $42, ROCKET + $C8, $14 ; trainer db SPRITE_ROCKET, $7 + 4, $9 + 4, $ff, $d3, $43, ROCKET + $C8, $15 ; trainer db SPRITE_MR_FUJI, $3 + 4, $a + 4, $ff, $d0, $4 ; person ; warp-to EVENT_DISP $a, $10, $9 ; POKEMONTOWER_6 PokemonTower7Blocks: ; 60f20 (18:4f20) INCBIN "maps/pokemontower7.blk" CeladonMart1_h: ; 0x60f7a to 0x60f86 (12 bytes) (id=122) db $12 ; tileset db CELADON_MART_1_HEIGHT, CELADON_MART_1_WIDTH ; dimensions (y, x) dw CeladonMart1Blocks, CeladonMart1TextPointers, CeladonMart1Script ; blocks, texts, scripts db $00 ; connections dw CeladonMart1Object ; objects CeladonMart1Script: ; 60f86 (18:4f86) jp EnableAutoTextBoxDrawing CeladonMart1TextPointers: ; 60f89 (18:4f89) dw CeladonMart1Text1 dw CeladonMart1Text2 dw CeladonMart1Text3 CeladonMart1Text1: ; 60f8f (18:4f8f) TX_FAR _CeladonMart1Text1 db "@" CeladonMart1Text2: ; 60f94 (18:4f94) TX_FAR _CeladonMart1Text2 db "@" CeladonMart1Text3: ; 60f99 (18:4f99) TX_FAR _CeladonMart1Text3 db "@" CeladonMart1Object: ; 0x60f9e (size=64) db $f ; border tile db $6 ; warps db $7, $2, $0, $ff db $7, $3, $0, $ff db $7, $10, $1, $ff db $7, $11, $1, $ff db $1, $c, $0, CELADON_MART_2 db $1, $1, $0, CELADON_MART_ELEVATOR db $2 ; signs db $4, $b, $2 ; CeladonMart1Text2 db $1, $e, $3 ; CeladonMart1Text3 db $1 ; people db SPRITE_CABLE_CLUB_WOMAN, $3 + 4, $8 + 4, $ff, $d0, $1 ; person ; warp-to EVENT_DISP $a, $7, $2 EVENT_DISP $a, $7, $3 EVENT_DISP $a, $7, $10 EVENT_DISP $a, $7, $11 EVENT_DISP $a, $1, $c ; CELADON_MART_2 EVENT_DISP $a, $1, $1 ; CELADON_MART_ELEVATOR CeladonMart1Blocks: ; 60fde (18:4fde) INCBIN "maps/celadonmart1.blk" GiveFossilToCinnabarLab: ; 61006 (18:5006) ld hl, $d730 set 6, [hl] xor a ld [wCurrentMenuItem], a ; $cc26 ld a, $3 ld [wMenuWatchedKeys], a ; $cc29 ld a, [$cd37] dec a ld [wMaxMenuItem], a ; $cc28 ld a, $2 ld [wTopMenuItemY], a ; $cc24 ld a, $1 ld [wTopMenuItemX], a ; $cc25 ld a, [$cd37] dec a ld bc, $2 ld hl, $3 call AddNTimes dec l ld b, l ld c, $d ld hl, wTileMap call TextBoxBorder call UpdateSprites call Func_610c2 ld hl, $d730 res 6, [hl] call HandleMenuInput bit 1, a jr nz, .asm_610a7 ld hl, $cc5b ld a, [wCurrentMenuItem] ; $cc26 ld d, $0 ld e, a add hl, de ld a, [hl] ld [$FF00+$db], a cp DOME_FOSSIL jr z, .choseDomeFossil cp HELIX_FOSSIL jr z, .choseHelixFossil ld b, AERODACTYL jr .fossilSelected .choseHelixFossil ld b, OMANYTE jr .fossilSelected .choseDomeFossil ld b, KABUTO .fossilSelected ld [W_FOSSILITEM], a ld a, b ld [W_FOSSILMON], a call LoadFossilItemAndMonName ld hl, UnnamedText_610ae call PrintText call YesNoChoice ld a, [wCurrentMenuItem] ; $cc26 and a jr nz, .asm_610a7 ld hl, UnnamedText_610b3 call PrintText ld a, [W_FOSSILITEM] ld [$FF00+$db], a ld b, BANK(RemoveItemByID) ld hl, RemoveItemByID call Bankswitch ld hl, UnnamedText_610b8 call PrintText ld hl, $d7a3 set 0, [hl] set 1, [hl] ret .asm_610a7 ld hl, UnnamedText_610bd call PrintText ret UnnamedText_610ae: ; 610ae (18:50ae) TX_FAR _UnnamedText_610ae db "@" UnnamedText_610b3: ; 610b3 (18:50b3) TX_FAR _UnnamedText_610b3 db "@" UnnamedText_610b8: ; 610b8 (18:50b8) TX_FAR _UnnamedText_610b8 db "@" UnnamedText_610bd: ; 610bd (18:50bd) TX_FAR _UnnamedText_610bd db "@" Func_610c2: ; 610c2 (18:50c2) ld hl, $cc5b xor a ld [$FF00+$db], a .asm_610c8 ld a, [hli] cp $ff ret z push hl ld [$d11e], a call GetItemName FuncCoord 2, 2 ; $c3ca ld hl, Coord ld a, [$FF00+$db] ld bc, $28 call AddNTimes ld de, $cd6d call PlaceString ld hl, $ffdb inc [hl] pop hl jr .asm_610c8 ; loads the names of the fossil item and the resulting mon LoadFossilItemAndMonName: ; 610eb (18:50eb) ld a, [W_FOSSILMON] ld [$d11e], a call GetMonName call CopyStringToCF4B ld a, [W_FOSSILITEM] ld [$d11e], a call GetItemName ret ViridianForest_h: ; 0x61101 to 0x6110d (12 bytes) (id=51) db $03 ; tileset db VIRIDIAN_FOREST_HEIGHT, VIRIDIAN_FOREST_WIDTH ; dimensions (y, x) dw ViridianForestBlocks, ViridianForestTextPointers, ViridianForestScript ; blocks, texts, scripts db $00 ; connections dw ViridianForestObject ; objects ViridianForestScript: ; 6110d (18:510d) call EnableAutoTextBoxDrawing ld hl, ViridianForestTrainerHeaders ld de, ViridianForestScriptPointers ld a, [W_VIRIDIANFORESTCURSCRIPT] call ExecuteCurMapScriptInTable ld [W_VIRIDIANFORESTCURSCRIPT], a ret ViridianForestScriptPointers: ; 61120 (18:5120) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle ViridianForestTextPointers: ; 61126 (18:5126) dw ViridianForestText1 dw ViridianForestText2 dw ViridianForestText3 dw ViridianForestText4 dw Predef5CText dw Predef5CText dw Predef5CText dw ViridianForestText8 dw ViridianForestText9 dw ViridianForestText10 dw ViridianForestText11 dw ViridianForestText12 dw ViridianForestText13 dw ViridianForestText14 ViridianForestTrainerHeaders: ; 61142 (18:5142) ViridianForestTrainerHeader0: ; 61142 (18:5142) db $2 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7f3 ; flag's byte dw ViridianForestBattleText1 ; 0x518a TextBeforeBattle dw ViridianForestAfterBattleText1 ; 0x5194 TextAfterBattle dw ViridianForestEndBattleText1 ; 0x518f TextEndBattle dw ViridianForestEndBattleText1 ; 0x518f TextEndBattle ViridianForestTrainerHeader1: ; 6114e (18:514e) db $3 ; flag's bit db ($4 << 4) ; trainer's view range dw $d7f3 ; flag's byte dw ViridianForestBattleText2 ; 0x5199 TextBeforeBattle dw ViridianForestAfterBattleText2 ; 0x51a3 TextAfterBattle dw ViridianForestEndBattleText2 ; 0x519e TextEndBattle dw ViridianForestEndBattleText2 ; 0x519e TextEndBattle ViridianForestTrainerHeader2: ; 6115a (18:515a) db $4 ; flag's bit db ($1 << 4) ; trainer's view range dw $d7f3 ; flag's byte dw ViridianForestBattleText3 ; 0x51a8 TextBeforeBattle dw ViridianForestAfterBattleText3 ; 0x51b2 TextAfterBattle dw ViridianForestEndBattleText3 ; 0x51ad TextEndBattle dw ViridianForestEndBattleText3 ; 0x51ad TextEndBattle db $ff ViridianForestText1: ; 61167 (18:5167) TX_FAR _ViridianForestText1 db "@" ViridianForestText2: ; 6116c (18:516c) db $08 ; asm ld hl, ViridianForestTrainerHeader0 call TalkToTrainer jp TextScriptEnd ViridianForestText3: ; 61176 (18:5176) db $08 ; asm ld hl, ViridianForestTrainerHeader1 call TalkToTrainer jp TextScriptEnd ViridianForestText4: ; 61180 (18:5180) db $08 ; asm ld hl, ViridianForestTrainerHeader2 call TalkToTrainer jp TextScriptEnd ViridianForestBattleText1: ; 6118a (18:518a) TX_FAR _ViridianForestBattleText1 db "@" ViridianForestEndBattleText1: ; 6118f (18:518f) TX_FAR _ViridianForestEndBattleText1 db "@" ViridianForestAfterBattleText1: ; 61194 (18:5194) TX_FAR _ViridianFrstAfterBattleText1 db "@" ViridianForestBattleText2: ; 61199 (18:5199) TX_FAR _ViridianForestBattleText2 db "@" ViridianForestEndBattleText2: ; 6119e (18:519e) TX_FAR _ViridianForestEndBattleText2 db "@" ViridianForestAfterBattleText2: ; 611a3 (18:51a3) TX_FAR _ViridianFrstAfterBattleText2 db "@" ViridianForestBattleText3: ; 611a8 (18:51a8) TX_FAR _ViridianForestBattleText3 db "@" ViridianForestEndBattleText3: ; 611ad (18:51ad) TX_FAR _ViridianForestEndBattleText3 db "@" ViridianForestAfterBattleText3: ; 611b2 (18:51b2) TX_FAR _ViridianFrstAfterBattleText3 db "@" ViridianForestText8: ; 611b7 (18:51b7) TX_FAR _ViridianForestText8 db "@" ViridianForestText9: ; 611bc (18:51bc) TX_FAR _ViridianForestText9 db "@" ViridianForestText10: ; 611c1 (18:51c1) TX_FAR _ViridianForestText10 db "@" ViridianForestText11: ; 611c6 (18:51c6) TX_FAR _ViridianForestText11 db "@" ViridianForestText12: ; 611cb (18:51cb) TX_FAR _ViridianForestText12 db "@" ViridianForestText13: ; 611d0 (18:51d0) TX_FAR _ViridianForestText13 db "@" ViridianForestText14: ; 611d5 (18:51d5) TX_FAR _ViridianForestText14 db "@" ViridianForestObject: ; 0x611da (size=127) db $3 ; border tile db $6 ; warps db $0, $1, $2, VIRIDIAN_FOREST_EXIT db $0, $2, $3, VIRIDIAN_FOREST_EXIT db $2f, $f, $1, VIRIDIAN_FOREST_ENTRANCE db $2f, $10, $1, VIRIDIAN_FOREST_ENTRANCE db $2f, $11, $1, VIRIDIAN_FOREST_ENTRANCE db $2f, $12, $1, VIRIDIAN_FOREST_ENTRANCE db $6 ; signs db $28, $18, $9 ; ViridianForestText9 db $20, $10, $a ; ViridianForestText10 db $11, $1a, $b ; ViridianForestText11 db $18, $4, $c ; ViridianForestText12 db $2d, $12, $d ; ViridianForestText13 db $1, $2, $e ; ViridianForestText14 db $8 ; people db SPRITE_BUG_CATCHER, $2b + 4, $10 + 4, $ff, $ff, $1 ; person db SPRITE_BUG_CATCHER, $21 + 4, $1e + 4, $ff, $d2, $42, BUG_CATCHER + $C8, $1 ; trainer db SPRITE_BUG_CATCHER, $13 + 4, $1e + 4, $ff, $d2, $43, BUG_CATCHER + $C8, $2 ; trainer db SPRITE_BUG_CATCHER, $12 + 4, $2 + 4, $ff, $d2, $44, BUG_CATCHER + $C8, $3 ; trainer db SPRITE_BALL, $b + 4, $19 + 4, $ff, $ff, $85, ANTIDOTE ; item db SPRITE_BALL, $1d + 4, $c + 4, $ff, $ff, $86, POTION ; item db SPRITE_BALL, $1f + 4, $1 + 4, $ff, $ff, $87, POKE_BALL ; item db SPRITE_BUG_CATCHER, $28 + 4, $1b + 4, $ff, $ff, $8 ; person ; warp-to EVENT_DISP $11, $0, $1 ; VIRIDIAN_FOREST_EXIT EVENT_DISP $11, $0, $2 ; VIRIDIAN_FOREST_EXIT EVENT_DISP $11, $2f, $f ; VIRIDIAN_FOREST_ENTRANCE EVENT_DISP $11, $2f, $10 ; VIRIDIAN_FOREST_ENTRANCE EVENT_DISP $11, $2f, $11 ; VIRIDIAN_FOREST_ENTRANCE EVENT_DISP $11, $2f, $12 ; VIRIDIAN_FOREST_ENTRANCE SSAnne1_h: ; 0x61259 to 0x61265 (12 bytes) (id=95) db $0d ; tileset db SS_ANNE_1_HEIGHT, SS_ANNE_1_WIDTH ; dimensions (y, x) dw SSAnne1Blocks, SSAnne1TextPointers, SSAnne1Script ; blocks, texts, scripts db $00 ; connections dw SSAnne1Object ; objects SSAnne1Script: ; 61265 (18:5265) call EnableAutoTextBoxDrawing ret SSAnne1TextPointers: ; 61269 (18:5269) dw SSAnne1Text1 dw SSAnne1Text2 SSAnne1Text1: ; 6126d (18:526d) TX_FAR _SSAnne1Text1 db "@" SSAnne1Text2: ; 61272 (18:5272) TX_FAR _SSAnne1Text2 db "@" SSAnne1Object: ; 0x61277 (size=104) db $c ; border tile db $b ; warps db $0, $1a, $1, VERMILION_DOCK db $0, $1b, $1, VERMILION_DOCK db $8, $1f, $0, SS_ANNE_8 db $8, $17, $1, SS_ANNE_8 db $8, $13, $2, SS_ANNE_8 db $8, $f, $3, SS_ANNE_8 db $8, $b, $4, SS_ANNE_8 db $8, $7, $5, SS_ANNE_8 db $6, $2, $6, SS_ANNE_2 db $f, $25, $5, SS_ANNE_4 db $10, $3, $0, SS_ANNE_6 db $0 ; signs db $2 ; people db SPRITE_WAITER, $6 + 4, $c + 4, $fe, $2, $1 ; person db SPRITE_SAILOR, $5 + 4, $1b + 4, $ff, $ff, $2 ; person ; warp-to EVENT_DISP $14, $0, $1a ; VERMILION_DOCK EVENT_DISP $14, $0, $1b ; VERMILION_DOCK EVENT_DISP $14, $8, $1f ; SS_ANNE_8 EVENT_DISP $14, $8, $17 ; SS_ANNE_8 EVENT_DISP $14, $8, $13 ; SS_ANNE_8 EVENT_DISP $14, $8, $f ; SS_ANNE_8 EVENT_DISP $14, $8, $b ; SS_ANNE_8 EVENT_DISP $14, $8, $7 ; SS_ANNE_8 EVENT_DISP $14, $6, $2 ; SS_ANNE_2 EVENT_DISP $14, $f, $25 ; SS_ANNE_4 EVENT_DISP $14, $10, $3 ; SS_ANNE_6 SSAnne1Blocks: ; 612df (18:52df) INCBIN "maps/ssanne1.blk" SSAnne2_h: ; 0x61393 to 0x6139f (12 bytes) (id=96) db $0d ; tileset db SS_ANNE_2_HEIGHT, SS_ANNE_2_WIDTH ; dimensions (y, x) dw SSAnne2Blocks, SSAnne2TextPointers, SSAnne2Script ; blocks, texts, scripts db $00 ; connections dw SSAnne2Object ; objects SSAnne2Script: ; 6139f (18:539f) call EnableAutoTextBoxDrawing ld hl, SSAnne2ScriptPointers ld a, [W_SSANNE2CURSCRIPT] jp CallFunctionInTable SSAnne2Script_613ab: ; 613ab (18:53ab) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_SSANNE2CURSCRIPT], a ret SSAnne2ScriptPointers: ; 613b3 (18:53b3) dw SSAnne2Script0 dw SSAnne2Script1 dw SSAnne2Script2 dw SSAnne2Script3 dw SSAnne2Script4 SSAnne2Script4: ; 613bd (18:53bd) ret SSAnne2Script0: ; 613be (18:53be) ld hl, CoordsData_61411 ; $5411 call ArePlayerCoordsInArray ret nc ld a, $ff ld [$c0ee], a call PlaySound ld c, BANK(Music_MeetRival) ld a, MUSIC_MEET_RIVAL call PlayMusic ld a, [$cd3d] ld [$ff00+$db], a ld a, $71 ld [$cc4d], a ld a, $15 call Predef call Delay3 ld a, $2 ld [$ff00+$8c], a call SetSpriteMovementBytesToFF xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld a, [$ff00+$db] cp $2 jr nz, .asm_61400 ; 0x613f9 $5 ld de, MovementData_6140c jr .asm_61403 ; 0x613fe $3 .asm_61400 ld de, MovementData_6140d .asm_61403 call MoveSprite ld a, $1 ld [W_SSANNE2CURSCRIPT], a ret MovementData_6140c: ; 6140c (18:540c) db $00 MovementData_6140d: ; 6140d (18:540d) db $00,$00,$00,$FF CoordsData_61411: ; 61411 (18:5411) db $08,$24,$08,$25,$FF Func_61416: ; 61416 (18:5416) ld a, [W_XCOORD] ; $d362 cp $25 jr nz, .asm_61426 ld a, $2 ld [$d528], a ld a, $c jr .asm_61427 .asm_61426 xor a .asm_61427 ld [$FF00+$8d], a ld a, $2 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c jp Func_34a6 SSAnne2Script1: ; 61430 (18:5430) ld a, [$d730] bit 0, a ret nz call Func_61416 xor a ld [wJoypadForbiddenButtonsMask], a ld a, $2 ld [$ff00+$8c], a call DisplayTextID call Delay3 ld a, $f2 ld [$d059], a ; select which team to use during the encounter ld a, [W_RIVALSTARTER] cp SQUIRTLE jr nz, .NotSquirtle ; 0x61451 $4 ld a, $1 jr .done .NotSquirtle cp BULBASAUR jr nz, .Charmander ; 0x61459 $4 ld a, $2 jr .done .Charmander ld a, $3 .done ld [W_TRAINERNO], a call Func_61416 ld a, $2 ld [W_SSANNE2CURSCRIPT], a ret SSAnne2Script2: ; 6146d (18:546d) ld a, [$d057] cp $ff jp z, SSAnne2Script_613ab call Func_61416 ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld a, $3 ld [$ff00+$8c], a call DisplayTextID ld a, $2 ld [$ff00+$8c], a call SetSpriteMovementBytesToFF ld a, [$d362] cp $25 jr nz, .asm_61497 ; 0x61490 $5 ld de, MovementData_614b9 jr .asm_6149a ; 0x61495 $3 .asm_61497 ld de, MovementData_614b7 .asm_6149a ld a, $2 ld [$ff00+$8c], a call MoveSprite ld a, $ff ld [$c0ee], a call PlaySound ld b, BANK(Music_RivalAlternateStart) ld hl, Music_RivalAlternateStart call Bankswitch ld a, $3 ld [W_SSANNE2CURSCRIPT], a ret MovementData_614b7: ; 614b7 (18:54b7) db $C0,$00 MovementData_614b9: ; 614b9 (18:54b9) db $00,$00,$00,$00,$FF SSAnne2Script3: ; 614be (18:54be) ld a, [$d730] bit 0, a ret nz xor a ld [wJoypadForbiddenButtonsMask], a ld a, $71 ld [$cc4d], a ld a, $11 call Predef call Func_2307 ld a, $4 ld [W_SSANNE2CURSCRIPT], a ret SSAnne2TextPointers: ; 614db (18:54db) dw SSAnne2Text1 dw SSAnne2Text2 dw SSAnne2Text3 SSAnne2Text1: ; 614e1 (18:54e1) TX_FAR _SSAnne2Text1 db "@" SSAnne2Text2: ; 614e6 (18:54e6) db $8 ld hl, SSAnneRivalBeforeBattleText call PrintText ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, SSAnneRivalDefeatedText ld de, SSAnneRivalWonText call PreBattleSaveRegisters jp TextScriptEnd SSAnneRivalBeforeBattleText: ; 61500 (18:5500) TX_FAR _SSAnneRivalBeforeBattleText db "@" SSAnneRivalDefeatedText: ; 61505 (18:5505) TX_FAR _SSAnneRivalDefeatedText db "@" SSAnneRivalWonText: ; 6150a (18:550a) TX_FAR _SSAnneRivalWonText db "@" SSAnne2Text3: ; 6150f (18:550f) TX_FAR _SSAnneRivalCaptainText db "@" SSAnne2Object: ; 0x61514 (size=90) db $c ; border tile db $9 ; warps db $b, $9, $0, SS_ANNE_9 db $b, $d, $2, SS_ANNE_9 db $b, $11, $4, SS_ANNE_9 db $b, $15, $6, SS_ANNE_9 db $b, $19, $8, SS_ANNE_9 db $b, $1d, $a, SS_ANNE_9 db $4, $2, $8, SS_ANNE_1 db $c, $2, $1, SS_ANNE_3 db $4, $24, $0, SS_ANNE_7 db $0 ; signs db $2 ; people db SPRITE_WAITER, $7 + 4, $3 + 4, $fe, $1, $1 ; person db SPRITE_BLUE, $4 + 4, $24 + 4, $ff, $d0, $42, SONY1 + $C8, $1 ; trainer ; warp-to EVENT_DISP $14, $b, $9 ; SS_ANNE_9 EVENT_DISP $14, $b, $d ; SS_ANNE_9 EVENT_DISP $14, $b, $11 ; SS_ANNE_9 EVENT_DISP $14, $b, $15 ; SS_ANNE_9 EVENT_DISP $14, $b, $19 ; SS_ANNE_9 EVENT_DISP $14, $b, $1d ; SS_ANNE_9 EVENT_DISP $14, $4, $2 ; SS_ANNE_1 EVENT_DISP $14, $c, $2 ; SS_ANNE_3 EVENT_DISP $14, $4, $24 ; SS_ANNE_7 SSAnne2Blocks: ; 6156e (18:556e) INCBIN "maps/ssanne2.blk" SSAnne4_h: ; 0x61622 to 0x6162e (12 bytes) (id=98) db $0d ; tileset db SS_ANNE_4_HEIGHT, SS_ANNE_4_WIDTH ; dimensions (y, x) dw SSAnne4Blocks, SSAnne4TextPointers, SSAnne4Script ; blocks, texts, scripts db $00 ; connections dw SSAnne4Object ; objects SSAnne4Script: ; 6162e (18:562e) jp EnableAutoTextBoxDrawing SSAnne4TextPointers: ; 61631 (18:5631) db "@" SSAnne4Object: ; 0x61632 (size=52) db $c ; border tile db $6 ; warps db $3, $17, $8, SS_ANNE_10 db $3, $13, $6, SS_ANNE_10 db $3, $f, $4, SS_ANNE_10 db $3, $b, $2, SS_ANNE_10 db $3, $7, $0, SS_ANNE_10 db $5, $1b, $9, SS_ANNE_1 db $0 ; signs db $0 ; people ; warp-to EVENT_DISP $f, $3, $17 ; SS_ANNE_10 EVENT_DISP $f, $3, $13 ; SS_ANNE_10 EVENT_DISP $f, $3, $f ; SS_ANNE_10 EVENT_DISP $f, $3, $b ; SS_ANNE_10 EVENT_DISP $f, $3, $7 ; SS_ANNE_10 EVENT_DISP $f, $5, $1b ; SS_ANNE_1 SSAnne4Blocks: ; 61666 (18:5666) INCBIN "maps/ssanne4.blk" SSAnne5_h: ; 0x616a2 to 0x616ae (12 bytes) (id=99) db $0d ; tileset db SS_ANNE_5_HEIGHT, SS_ANNE_5_WIDTH ; dimensions (y, x) dw SSAnne5Blocks, SSAnne5TextPointers, SSAnne5Script ; blocks, texts, scripts db $00 ; connections dw SSAnne5Object ; objects SSAnne5Script: ; 616ae (18:56ae) call EnableAutoTextBoxDrawing ld hl, SSAnneTrainerHeader0 ; $56d1 ld de, SSAnne5ScriptPointers ld a, [W_SSANNE5CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_SSANNE5CURSCRIPT], a ret SSAnne5ScriptPointers: ; 616c1 (18:56c1) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle SSAnne5TextPointers: ; 616c7 (18:56c7) dw SSAnne5Text1 dw SSAnne5Text2 dw SSAnne5Text3 dw SSAnne5Text4 dw SSAnne5Text5 SSAnneTrainerHeaders: ; 616d1 (18:56d1) SSAnneTrainerHeader0: ; 616d1 (18:56d1) db $4 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7ff ; flag's byte dw SSAnneBattleText1 ; 0x5703 TextBeforeBattle dw SSAnneAfterBattleText1 ; 0x570d TextAfterBattle dw SSAnneEndBattleText1 ; 0x5708 TextEndBattle dw SSAnneEndBattleText1 ; 0x5708 TextEndBattle SSAnneTrainerHeader1: ; 616dd (18:56dd) db $5 ; flag's bit db ($3 << 4) ; trainer's view range dw $d7ff ; flag's byte dw SSAnneBattleText2 ; 0x571c TextBeforeBattle dw SSAnneAfterBattleText2 ; 0x5726 TextAfterBattle dw SSAnneEndBattleText2 ; 0x5721 TextEndBattle dw SSAnneEndBattleText2 ; 0x5721 TextEndBattle db $ff SSAnne5Text1: ; 616ea (18:56ea) TX_FAR _SSAnne5Text1 db "@" SSAnne5Text2: ; 616ef (18:56ef) TX_FAR _SSAnne5Text2 db "@" SSAnne5Text3: ; 616f4 (18:56f4) TX_FAR _SSAnne5Text3 db "@" SSAnne5Text4: ; 616f9 (18:56f9) db $08 ; asm ld hl, SSAnneTrainerHeader0 call TalkToTrainer jp TextScriptEnd SSAnneBattleText1: ; 61703 (18:5703) TX_FAR _SSAnneBattleText1 db "@" SSAnneEndBattleText1: ; 61708 (18:5708) TX_FAR _SSAnneEndBattleText1 db "@" SSAnneAfterBattleText1: ; 6170d (18:570d) TX_FAR _SSAnneAfterBattleText1 db "@" SSAnne5Text5: ; 61712 (18:5712) db $08 ; asm ld hl, SSAnneTrainerHeader1 call TalkToTrainer jp TextScriptEnd SSAnneBattleText2: ; 6171c (18:571c) TX_FAR _SSAnneBattleText2 db "@" SSAnneEndBattleText2: ; 61721 (18:5721) TX_FAR _SSAnneEndBattleText2 db "@" SSAnneAfterBattleText2: ; 61726 (18:5726) TX_FAR _SSAnneAfterBattleText2 db "@" SSAnne5Object: ; 0x6172b (size=54) db $23 ; border tile db $2 ; warps db $6, $d, $0, SS_ANNE_3 db $7, $d, $0, SS_ANNE_3 db $0 ; signs db $5 ; people db SPRITE_BLACK_HAIR_BOY_2, $2 + 4, $5 + 4, $ff, $d1, $1 ; person db SPRITE_SAILOR, $9 + 4, $4 + 4, $ff, $ff, $2 ; person db SPRITE_BLACK_HAIR_BOY_1, $b + 4, $7 + 4, $ff, $ff, $3 ; person db SPRITE_SAILOR, $4 + 4, $4 + 4, $ff, $d0, $44, SAILOR + $C8, $1 ; trainer db SPRITE_SAILOR, $8 + 4, $a + 4, $ff, $d1, $45, SAILOR + $C8, $2 ; trainer ; warp-to EVENT_DISP $a, $6, $d ; SS_ANNE_3 EVENT_DISP $a, $7, $d ; SS_ANNE_3 SSAnne5Blocks: ; 61761 (18:5761) INCBIN "maps/ssanne5.blk" SSAnne6_h: ; 0x617a7 to 0x617b3 (12 bytes) (id=100) db $0d ; tileset db SS_ANNE_6_HEIGHT, SS_ANNE_6_WIDTH ; dimensions (y, x) dw SSAnne6Blocks, SSAnne6TextPointers, SSAnne6Script ; blocks, texts, scripts db $00 ; connections dw SSAnne6Object ; objects SSAnne6Script: ; 617b3 (18:57b3) call EnableAutoTextBoxDrawing ret SSAnne6TextPointers: ; 617b7 (18:57b7) dw SSAnne6Text1 dw SSAnne6Text2 dw SSAnne6Text3 dw SSAnne6Text4 dw SSAnne6Text5 dw SSAnne6Text6 dw SSAnne6Text7 SSAnne6Text1: ; 617c5 (18:57c5) TX_FAR _SSAnne6Text1 db "@" SSAnne6Text2: ; 617ca (18:57ca) TX_FAR _SSAnne6Text2 db "@" SSAnne6Text3: ; 617cf (18:57cf) TX_FAR _SSAnne6Text3 db "@" SSAnne6Text4: ; 617d4 (18:57d4) TX_FAR _SSAnne6Text4 db "@" SSAnne6Text5: ; 617d9 (18:57d9) TX_FAR _SSAnne6Text5 db "@" SSAnne6Text6: ; 617de (18:57de) TX_FAR _SSAnne6Text6 db "@" SSAnne6Text7: ; 617e3 (18:57e3) db $08 ; asm ld hl, UnnamedText_61807 call PrintText ldh a, [$d3] bit 7, a jr z, .asm_93eb1 ; 0x617ee ld hl, UnnamedText_6180c jr .asm_63292 ; 0x617f3 .asm_93eb1 ; 0x617f5 bit 4, a jr z, .asm_7436c ; 0x617f7 ld hl, UnnamedText_61811 jr .asm_63292 ; 0x617fc .asm_7436c ; 0x617fe ld hl, UnnamedText_61816 .asm_63292 ; 0x61801 call PrintText jp TextScriptEnd UnnamedText_61807: ; 61807 (18:5807) TX_FAR _UnnamedText_61807 db "@" UnnamedText_6180c: ; 6180c (18:580c) TX_FAR _UnnamedText_6180c db "@" UnnamedText_61811: ; 61811 (18:5811) TX_FAR _UnnamedText_61811 db "@" UnnamedText_61816: ; 61816 (18:5816) TX_FAR _UnnamedText_61816 db "@" SSAnne6Object: ; 0x6181b (size=54) db $c ; border tile db $1 ; warps db $0, $6, $a, SS_ANNE_1 db $0 ; signs db $7 ; people db SPRITE_COOK, $8 + 4, $1 + 4, $fe, $1, $1 ; person db SPRITE_COOK, $8 + 4, $5 + 4, $fe, $1, $2 ; person db SPRITE_COOK, $7 + 4, $9 + 4, $fe, $1, $3 ; person db SPRITE_COOK, $6 + 4, $d + 4, $ff, $ff, $4 ; person db SPRITE_COOK, $8 + 4, $d + 4, $ff, $ff, $5 ; person db SPRITE_COOK, $a + 4, $d + 4, $ff, $ff, $6 ; person db SPRITE_COOK, $d + 4, $b + 4, $ff, $d1, $7 ; person ; warp-to EVENT_DISP $7, $0, $6 ; SS_ANNE_1 SSAnne6Blocks: ; 61851 (18:5851) INCBIN "maps/ssanne6.blk" SSAnne7_h: ; 0x61889 to 0x61895 (12 bytes) (id=101) db $0d ; tileset db SS_ANNE_7_HEIGHT, SS_ANNE_7_WIDTH ; dimensions (y, x) dw SSAnne7Blocks, SSAnne7TextPointers, SSAnne7Script ; blocks, texts, scripts db $00 ; connections dw SSAnne7Object ; objects SSAnne7Script: ; 61895 (18:5895) call SSAnne7Script_6189b jp EnableAutoTextBoxDrawing SSAnne7Script_6189b: ; 6189b (18:589b) ld a, [$d803] bit 1, a ret nz ld hl, $d72d set 5, [hl] ret SSAnne7TextPointers: ; 618a7 (18:58a7) dw SSAnne7Text1 dw SSAnne7Text2 dw SSAnne7Text3 SSAnne7Text1: ; 618ad (18:58ad) db $08 ; asm ld a, [$d803] bit 0, a jr nz, .asm_797c4 ; 0x618b3 ld hl, SSAnne7RubText call PrintText ld hl, ReceivingHM01Text call PrintText ld bc, (HM_01 << 8) | 1 call GiveItem jr nc, .BagFull ld hl, ReceivedHM01Text call PrintText ld hl, $d803 set 0, [hl] jr .asm_0faf5 ; 0x618d4 .BagFull ld hl, HM01NoRoomText call PrintText ld hl, $d72d set 5, [hl] jr .asm_0faf5 ; 0x618e1 .asm_797c4 ; 0x618e3 ld hl, UnnamedText_61932 call PrintText .asm_0faf5 ; 0x618e9 jp TextScriptEnd SSAnne7RubText: ; 618ec (18:58ec) TX_FAR _SSAnne7RubText ; 0x812dd db $8 ld a, [$c0ef] cp $1f ld [$c0f0], a jr nz, .asm_61908 ; 0x618f9 $d ld a, $ff ld [$c0ee], a call PlaySound ld a, Bank(Func_9876) ld [$c0ef], a .asm_61908 ld a, MUSIC_PKMN_HEALED ld [$c0ee], a call PlaySound .asm_61910 ld a, [$c026] cp MUSIC_PKMN_HEALED jr z, .asm_61910 ; 0x61915 $f9 call Func_2307 ld hl, $d803 set 1, [hl] ld hl, $d72d res 5, [hl] jp TextScriptEnd ReceivingHM01Text: ; 61927 (18:5927) TX_FAR _ReceivingHM01Text db "@" ReceivedHM01Text: ; 6192c (18:592c) TX_FAR _ReceivedHM01Text ; 0x8140d db $11, "@" UnnamedText_61932: ; 61932 (18:5932) TX_FAR _UnnamedText_61932 db "@" HM01NoRoomText: ; 61937 (18:5937) TX_FAR _HM01NoRoomText db "@" SSAnne7Text2: ; 6193c (18:593c) TX_FAR _SSAnne7Text2 db "@" SSAnne7Text3: ; 61941 (18:5941) TX_FAR _SSAnne7Text3 db "@" SSAnne7Object: ; 0x61946 (size=24) db $c ; border tile db $1 ; warps db $7, $0, $8, SS_ANNE_2 db $2 ; signs db $1, $4, $2 ; SSAnne7Text2 db $2, $1, $3 ; SSAnne7Text3 db $1 ; people db SPRITE_SS_CAPTAIN, $2 + 4, $4 + 4, $ff, $d1, $1 ; person ; warp-to EVENT_DISP $3, $7, $0 ; SS_ANNE_2 SSAnne7Blocks: ; 6195e (18:595e) INCBIN "maps/ssanne7.blk" SSAnne8_h: ; 0x6196a to 0x61976 (12 bytes) (id=102) db $0d ; tileset db SS_ANNE_8_HEIGHT, SS_ANNE_8_WIDTH ; dimensions (y, x) dw SSAnne8Blocks, SSAnne8TextPointers, SSAnne8Script ; blocks, texts, scripts db $00 ; connections dw SSAnne8Object ; objects SSAnne8Script: ; 61976 (18:5976) call EnableAutoTextBoxDrawing ld hl, SSAnne8TrainerHeaders ld de, SSAnne8ScriptPointers ld a, [W_SSANNE8CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_SSANNE8CURSCRIPT], a ret SSAnne8ScriptPointers: ; 61989 (18:5989) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle SSAnne8TextPointers: ; 6198f (18:598f) dw SSAnne8Text1 dw SSAnne8Text2 dw SSAnne8Text3 dw SSAnne8Text4 dw SSAnne8Text5 dw SSAnne8Text6 dw SSAnne8Text7 dw SSAnne8Text8 dw SSAnne8Text9 dw Predef5CText dw SSAnne8Text11 SSAnne8TrainerHeaders: ; 619a5 (18:59a5) SSAnne8TrainerHeader0: ; 619a5 (18:59a5) db $1 ; flag's bit db ($2 << 4) ; trainer's view range dw $d805 ; flag's byte dw SSAnne8BattleText1 ; 0x5a0b TextBeforeBattle dw SSAnne8AfterBattleText1 ; 0x5a15 TextAfterBattle dw SSAnne8EndBattleText1 ; 0x5a10 TextEndBattle dw SSAnne8EndBattleText1 ; 0x5a10 TextEndBattle SSAnne8TrainerHeader1: ; 619b1 (18:59b1) db $2 ; flag's bit db ($3 << 4) ; trainer's view range dw $d805 ; flag's byte dw SSAnne8BattleText2 ; 0x5a1a TextBeforeBattle dw SSAnne8AfterBattleText2 ; 0x5a24 TextAfterBattle dw SSAnne8EndBattleText2 ; 0x5a1f TextEndBattle dw SSAnne8EndBattleText2 ; 0x5a1f TextEndBattle SSAnne8TrainerHeader2: ; 619bd (18:59bd) db $3 ; flag's bit db ($2 << 4) ; trainer's view range dw $d805 ; flag's byte dw SSAnne8BattleText3 ; 0x5a29 TextBeforeBattle dw SSAnne8AfterBattleText3 ; 0x5a33 TextAfterBattle dw SSAnne8EndBattleText3 ; 0x5a2e TextEndBattle dw SSAnne8EndBattleText3 ; 0x5a2e TextEndBattle SSAnne8TrainerHeader3: ; 619c9 (18:59c9) db $4 ; flag's bit db ($2 << 4) ; trainer's view range dw $d805 ; flag's byte dw SSAnne8BattleText4 ; 0x5a38 TextBeforeBattle dw SSAnne8AfterBattleText4 ; 0x5a42 TextAfterBattle dw SSAnne8EndBattleText4 ; 0x5a3d TextEndBattle dw SSAnne8EndBattleText4 ; 0x5a3d TextEndBattle db $ff SSAnne8Text1: ; 619d6 (18:59d6) db $08 ; asm ld hl, SSAnne8TrainerHeader0 call TalkToTrainer jp TextScriptEnd SSAnne8Text2: ; 619e0 (18:59e0) db $08 ; asm ld hl, SSAnne8TrainerHeader1 call TalkToTrainer jp TextScriptEnd SSAnne8Text3: ; 619ea (18:59ea) db $08 ; asm ld hl, SSAnne8TrainerHeader2 call TalkToTrainer jp TextScriptEnd SSAnne8Text4: ; 619f4 (18:59f4) db $08 ; asm ld hl, SSAnne8TrainerHeader3 call TalkToTrainer jp TextScriptEnd SSAnne8Text8: ; 619fe (18:59fe) TX_FAR _SSAnne8Text8 db $08 ; asm ld a, WIGGLYTUFF call PlayCry jp TextScriptEnd SSAnne8BattleText1: ; 61a0b (18:5a0b) TX_FAR _SSAnne8BattleText1 db "@" SSAnne8EndBattleText1: ; 61a10 (18:5a10) TX_FAR _SSAnne8EndBattleText1 db "@" SSAnne8AfterBattleText1: ; 61a15 (18:5a15) TX_FAR _SSAnne8AfterBattleText1 db "@" SSAnne8BattleText2: ; 61a1a (18:5a1a) TX_FAR _SSAnne8BattleText2 db "@" SSAnne8EndBattleText2: ; 61a1f (18:5a1f) TX_FAR _SSAnne8EndBattleText2 db "@" UnnamedText_61a24: ; 61a24 (18:5a24) TX_FAR _UnnamedText_61a24 db "@" SSAnne8BattleText3: ; 61a29 (18:5a29) TX_FAR _SSAnne8BattleText3 db "@" SSAnne8EndBattleText3: ; 61a2e (18:5a2e) TX_FAR _SSAnne8EndBattleText3 db "@" SSAnne8AfterBattleText3: ; 61a33 (18:5a33) TX_FAR _SSAnne8AfterBattleText3 db "@" SSAnne8BattleText4: ; 61a38 (18:5a38) TX_FAR _SSAnne8BattleText4 db "@" SSAnne8EndBattleText4: ; 61a3d (18:5a3d) TX_FAR _SSAnne8EndBattleText4 db "@" SSAnne8AfterBattleText4: ; 61a42 (18:5a42) TX_FAR _SSAnne8AfterBattleText4 db "@" SSAnne8Text5: ; 61a47 (18:5a47) TX_FAR _SSAnne8Text5 db "@" SSAnne8Text6: ; 61a4c (18:5a4c) TX_FAR _SSAnne8Text6 db "@" SSAnne8Text7: ; 61a51 (18:5a51) TX_FAR _SSAnne8Text7 db "@" SSAnne8Text9: ; 61a56 (18:5a56) TX_FAR _SSAnne8Text9 db "@" SSAnne8Text11: ; 61a5b (18:5a5b) TX_FAR _SSAnne8Text11 db "@" SSAnne8Object: ; 0x61a60 (size=127) db $c ; border tile db $6 ; warps db $0, $0, $2, SS_ANNE_1 db $0, $a, $3, SS_ANNE_1 db $0, $14, $4, SS_ANNE_1 db $a, $0, $5, SS_ANNE_1 db $a, $a, $6, SS_ANNE_1 db $a, $14, $7, SS_ANNE_1 db $0 ; signs db $b ; people db SPRITE_GENTLEMAN, $3 + 4, $2 + 4, $ff, $d2, $41, GENTLEMAN + $C8, $1 ; trainer db SPRITE_GENTLEMAN, $4 + 4, $b + 4, $ff, $d1, $42, GENTLEMAN + $C8, $2 ; trainer db SPRITE_BUG_CATCHER, $e + 4, $b + 4, $ff, $d1, $43, YOUNGSTER + $C8, $8 ; trainer db SPRITE_LASS, $b + 4, $d + 4, $ff, $d2, $44, LASS + $C8, $b ; trainer db SPRITE_GIRL, $3 + 4, $16 + 4, $fe, $1, $5 ; person db SPRITE_FAT_BALD_GUY, $e + 4, $0 + 4, $ff, $ff, $6 ; person db SPRITE_LITTLE_GIRL, $b + 4, $2 + 4, $ff, $d0, $7 ; person db SPRITE_CLEFAIRY, $b + 4, $3 + 4, $ff, $d0, $8 ; person db SPRITE_GIRL, $d + 4, $a + 4, $ff, $d3, $9 ; person db SPRITE_BALL, $f + 4, $c + 4, $ff, $ff, $8a, TM_08 ; item db SPRITE_GENTLEMAN, $d + 4, $15 + 4, $fe, $2, $b ; person ; warp-to EVENT_DISP $c, $0, $0 ; SS_ANNE_1 EVENT_DISP $c, $0, $a ; SS_ANNE_1 EVENT_DISP $c, $0, $14 ; SS_ANNE_1 EVENT_DISP $c, $a, $0 ; SS_ANNE_1 EVENT_DISP $c, $a, $a ; SS_ANNE_1 EVENT_DISP $c, $a, $14 ; SS_ANNE_1 SSAnne8Blocks: ; 61adf (18:5adf) INCBIN "maps/ssanne8.blk" SSAnne9_h: ; 0x61b3f to 0x61b4b (12 bytes) (id=103) db $0d ; tileset db SS_ANNE_9_HEIGHT, SS_ANNE_9_WIDTH ; dimensions (y, x) dw SSAnne9Blocks, SSAnne9TextPointers, SSAnne9Script ; blocks, texts, scripts db $00 ; connections dw SSAnne9Object ; objects SSAnne9Script: ; 61b4b (18:5b4b) ld a, $1 ld [$cf0c], a xor a ld [$cc3c], a ld hl, SSAnne9TrainerHeaders ld de, SSAnne9ScriptPointers ld a, [W_SSANNE9CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_SSANNE9CURSCRIPT], a ret SSAnne9ScriptPointers: ; 61b64 (18:5b64) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle SSAnne9TextPointers: ; 61b6a (18:5b6a) dw SSAnne9Text1 dw SSAnne9Text2 dw SSAnne9Text3 dw SSAnne9Text4 dw SSAnne9Text5 dw Predef5CText dw SSAnne9Text7 dw SSAnne9Text8 dw Predef5CText dw SSAnne9Text10 dw SSAnne9Text11 dw SSAnne9Text12 dw SSAnne9Text13 SSAnne9TrainerHeaders: ; 61b84 (18:5b84) SSAnne9TrainerHeader0: ; 61b84 (18:5b84) db $1 ; flag's bit db ($2 << 4) ; trainer's view range dw $d807 ; flag's byte dw SSAnne9BattleText1 ; 0x5c51 TextBeforeBattle dw SSAnne9AfterBattleText1 ; 0x5c5b TextAfterBattle dw SSAnne9EndBattleText1 ; 0x5c56 TextEndBattle dw SSAnne9EndBattleText1 ; 0x5c56 TextEndBattle SSAnne9TrainerHeader1: ; 61b90 (18:5b90) db $2 ; flag's bit db ($3 << 4) ; trainer's view range dw $d807 ; flag's byte dw SSAnne9BattleText2 ; 0x5c60 TextBeforeBattle dw SSAnne9AfterBattleText2 ; 0x5c6a TextAfterBattle dw SSAnne9EndBattleText2 ; 0x5c65 TextEndBattle dw SSAnne9EndBattleText2 ; 0x5c65 TextEndBattle SSAnne9TrainerHeader2: ; 61b9c (18:5b9c) db $3 ; flag's bit db ($3 << 4) ; trainer's view range dw $d807 ; flag's byte dw SSAnne9BattleText3 ; 0x5c6f TextBeforeBattle dw SSAnne9AfterBattleText3 ; 0x5c79 TextAfterBattle dw SSAnne9EndBattleText3 ; 0x5c74 TextEndBattle dw SSAnne9EndBattleText3 ; 0x5c74 TextEndBattle SSAnne9TrainerHeader3: ; 61ba8 (18:5ba8) db $4 ; flag's bit db ($2 << 4) ; trainer's view range dw $d807 ; flag's byte dw SSAnne9BattleText4 ; 0x5c7e TextBeforeBattle dw SSAnne9AfterBattleText4 ; 0x5c88 TextAfterBattle dw SSAnne9EndBattleText4 ; 0x5c83 TextEndBattle dw SSAnne9EndBattleText4 ; 0x5c83 TextEndBattle db $ff SSAnne9Text1: ; 61bb5 (18:5bb5) db $08 ; asm ld hl, SSAnne9TrainerHeader0 call TalkToTrainer jp TextScriptEnd SSAnne9Text2: ; 61bbf (18:5bbf) db $08 ; asm ld hl, SSAnne9TrainerHeader1 call TalkToTrainer jp TextScriptEnd SSAnne9Text3: ; 61bc9 (18:5bc9) db $08 ; asm ld hl, SSAnne9TrainerHeader2 call TalkToTrainer jp TextScriptEnd SSAnne9Text4: ; 61bd3 (18:5bd3) db $08 ; asm ld hl, SSAnne9TrainerHeader3 call TalkToTrainer jp TextScriptEnd SSAnne9Text5: ; 61bdd (18:5bdd) db $08 ; asm call SaveScreenTilesToBuffer1 ld hl, UnnamedText_61bf2 call PrintText call LoadScreenTilesFromBuffer1 ld a, SNORLAX call DisplayPokedex jp TextScriptEnd UnnamedText_61bf2: ; 61bf2 (18:5bf2) TX_FAR _UnnamedText_61bf2 db "@" SSAnne9Text7: ; 61bf7 (18:5bf7) db $08 ; asm ld hl, UnnamedText_61c01 call PrintText jp TextScriptEnd UnnamedText_61c01: ; 61c01 (18:5c01) TX_FAR _UnnamedText_61c01 db "@" SSAnne9Text8: ; 61c06 (18:5c06) db $08 ; asm ld hl, UnnamedText_61c10 call PrintText jp TextScriptEnd UnnamedText_61c10: ; 61c10 (18:5c10) TX_FAR _UnnamedText_61c10 db "@" SSAnne9Text10: ; 61c15 (18:5c15) db $08 ; asm ld hl, UnnamedText_61c1f call PrintText jp TextScriptEnd UnnamedText_61c1f: ; 61c1f (18:5c1f) TX_FAR _UnnamedText_61c1f db "@" SSAnne9Text11: ; 61c24 (18:5c24) db $08 ; asm ld hl, UnnamedText_61c2e call PrintText jp TextScriptEnd UnnamedText_61c2e: ; 61c2e (18:5c2e) TX_FAR _UnnamedText_61c2e db "@" SSAnne9Text12: ; 61c33 (18:5c33) db $08 ; asm ld hl, UnnamedText_61c3d call PrintText jp TextScriptEnd UnnamedText_61c3d: ; 61c3d (18:5c3d) TX_FAR _UnnamedText_61c3d db "@" SSAnne9Text13: ; 61c42 (18:5c42) db $08 ; asm ld hl, UnnamedText_61c4c call PrintText jp TextScriptEnd UnnamedText_61c4c: ; 61c4c (18:5c4c) TX_FAR _UnnamedText_61c4c db "@" SSAnne9BattleText1: ; 61c51 (18:5c51) TX_FAR _SSAnne9BattleText1 db "@" SSAnne9EndBattleText1: ; 61c56 (18:5c56) TX_FAR _SSAnne9EndBattleText1 db "@" SSAnne9AfterBattleText1: ; 61c5b (18:5c5b) TX_FAR _SSAnne9AfterBattleText1 db "@" SSAnne9BattleText2: ; 61c60 (18:5c60) TX_FAR _SSAnne9BattleText2 db "@" SSAnne9EndBattleText2: ; 61c65 (18:5c65) TX_FAR _SSAnne9EndBattleText2 db "@" SSAnne9AfterBattleText2: ; 61c6a (18:5c6a) TX_FAR _SSAnne9AfterBattleText2 db "@" SSAnne9BattleText3: ; 61c6f (18:5c6f) TX_FAR _SSAnne9BattleText3 db "@" SSAnne9EndBattleText3: ; 61c74 (18:5c74) TX_FAR _SSAnne9EndBattleText3 db "@" SSAnne9AfterBattleText3: ; 61c79 (18:5c79) TX_FAR _SSAnne9AfterBattleText3 db "@" SSAnne9BattleText4: ; 61c7e (18:5c7e) TX_FAR _SSAnne9BattleText4 db "@" SSAnne9EndBattleText4: ; 61c83 (18:5c83) TX_FAR _SSAnne9EndBattleText4 db "@" SSAnne9AfterBattleText4: ; 61c88 (18:5c88) TX_FAR _SSAnne9AfterBattleText4 db "@" SSAnne9Object: ; 0x61c8d (size=188) db $c ; border tile db $c ; warps db $5, $2, $0, SS_ANNE_2 db $5, $3, $0, SS_ANNE_2 db $5, $c, $1, SS_ANNE_2 db $5, $d, $1, SS_ANNE_2 db $5, $16, $2, SS_ANNE_2 db $5, $17, $2, SS_ANNE_2 db $f, $2, $3, SS_ANNE_2 db $f, $3, $3, SS_ANNE_2 db $f, $c, $4, SS_ANNE_2 db $f, $d, $4, SS_ANNE_2 db $f, $16, $5, SS_ANNE_2 db $f, $17, $5, SS_ANNE_2 db $0 ; signs db $d ; people db SPRITE_GENTLEMAN, $2 + 4, $a + 4, $ff, $d3, $41, GENTLEMAN + $C8, $3 ; trainer db SPRITE_FISHER2, $4 + 4, $d + 4, $ff, $d2, $42, FISHER + $C8, $1 ; trainer db SPRITE_GENTLEMAN, $e + 4, $0 + 4, $ff, $d3, $43, GENTLEMAN + $C8, $5 ; trainer db SPRITE_LASS, $b + 4, $2 + 4, $ff, $d0, $44, LASS + $C8, $c ; trainer db SPRITE_GENTLEMAN, $2 + 4, $1 + 4, $ff, $d0, $5 ; person db SPRITE_BALL, $1 + 4, $c + 4, $ff, $ff, $86, MAX_ETHER ; item db SPRITE_GENTLEMAN, $2 + 4, $15 + 4, $ff, $d0, $7 ; person db SPRITE_OLD_PERSON, $1 + 4, $16 + 4, $ff, $d0, $8 ; person db SPRITE_BALL, $c + 4, $0 + 4, $ff, $ff, $89, RARE_CANDY ; item db SPRITE_GENTLEMAN, $c + 4, $c + 4, $ff, $d0, $a ; person db SPRITE_YOUNG_BOY, $e + 4, $b + 4, $ff, $ff, $b ; person db SPRITE_BRUNETTE_GIRL, $c + 4, $16 + 4, $ff, $d2, $c ; person db SPRITE_FOULARD_WOMAN, $c + 4, $14 + 4, $ff, $d3, $d ; person ; warp-to EVENT_DISP $c, $5, $2 ; SS_ANNE_2 EVENT_DISP $c, $5, $3 ; SS_ANNE_2 EVENT_DISP $c, $5, $c ; SS_ANNE_2 EVENT_DISP $c, $5, $d ; SS_ANNE_2 EVENT_DISP $c, $5, $16 ; SS_ANNE_2 EVENT_DISP $c, $5, $17 ; SS_ANNE_2 EVENT_DISP $c, $f, $2 ; SS_ANNE_2 EVENT_DISP $c, $f, $3 ; SS_ANNE_2 EVENT_DISP $c, $f, $c ; SS_ANNE_2 EVENT_DISP $c, $f, $d ; SS_ANNE_2 EVENT_DISP $c, $f, $16 ; SS_ANNE_2 EVENT_DISP $c, $f, $17 ; SS_ANNE_2 SSAnne10_h: ; 0x61d49 to 0x61d55 (12 bytes) (id=104) db $0d ; tileset db SS_ANNE_10_HEIGHT, SS_ANNE_10_WIDTH ; dimensions (y, x) dw SSAnne10Blocks, SSAnne10TextPointers, SSAnne10Script ; blocks, texts, scripts db $00 ; connections dw SSAnne10Object ; objects SSAnne10Script: ; 61d55 (18:5d55) call EnableAutoTextBoxDrawing ld hl, SSAnne10TrainerHeaders ld de, SSAnne10ScriptPointers ld a, [W_SSANNE10CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_SSANNE10CURSCRIPT], a ret SSAnne10ScriptPointers: ; 61d68 (18:5d68) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle SSAnne10TextPointers: ; 61d6e (18:5d6e) dw SSAnne10Text1 dw SSAnne10Text2 dw SSAnne10Text3 dw SSAnne10Text4 dw SSAnne10Text5 dw SSAnne10Text6 dw SSAnne10Text7 dw SSAnne10Text8 dw Predef5CText dw Predef5CText dw Predef5CText SSAnne10TrainerHeaders: ; 61d84 (18:5d84) SSAnne10TrainerHeader0: ; 61d84 (18:5d84) db $1 ; flag's bit db ($2 << 4) ; trainer's view range dw $d809 ; flag's byte dw SSAnne10BattleText1 ; 0x5e16 TextBeforeBattle dw SSAnne10AfterBattleText1 ; 0x5e20 TextAfterBattle dw SSAnne10EndBattleText1 ; 0x5e1b TextEndBattle dw SSAnne10EndBattleText1 ; 0x5e1b TextEndBattle SSAnne10TrainerHeader1: ; 61d90 (18:5d90) db $2 ; flag's bit db ($3 << 4) ; trainer's view range dw $d809 ; flag's byte dw SSAnne10BattleText2 ; 0x5e25 TextBeforeBattle dw SSAnne10AfterBattleText2 ; 0x5e2f TextAfterBattle dw SSAnne10EndBattleText2 ; 0x5e2a TextEndBattle dw SSAnne10EndBattleText2 ; 0x5e2a TextEndBattle SSAnne10TrainerHeader2: ; 61d9c (18:5d9c) db $3 ; flag's bit db ($2 << 4) ; trainer's view range dw $d809 ; flag's byte dw SSAnne10BattleText3 ; 0x5e34 TextBeforeBattle dw SSAnne10AfterBattleText3 ; 0x5e3e TextAfterBattle dw SSAnne10EndBattleText3 ; 0x5e39 TextEndBattle dw SSAnne10EndBattleText3 ; 0x5e39 TextEndBattle SSAnne10TrainerHeader3: ; 61da8 (18:5da8) db $4 ; flag's bit db ($2 << 4) ; trainer's view range dw $d809 ; flag's byte dw SSAnne10BattleText4 ; 0x5e43 TextBeforeBattle dw SSAnne10AfterBattleText4 ; 0x5e4d TextAfterBattle dw SSAnne10EndBattleText4 ; 0x5e48 TextEndBattle dw SSAnne10EndBattleText4 ; 0x5e48 TextEndBattle SSAnne10TrainerHeader4: ; 61db4 (18:5db4) db $5 ; flag's bit db ($2 << 4) ; trainer's view range dw $d809 ; flag's byte dw SSAnne10BattleText5 ; 0x5e52 TextBeforeBattle dw SSAnne10AfterBattleText5 ; 0x5e5c TextAfterBattle dw SSAnne10EndBattleText5 ; 0x5e57 TextEndBattle dw SSAnne10EndBattleText5 ; 0x5e57 TextEndBattle SSAnne10TrainerHeader5: ; 61dc0 (18:5dc0) db $6 ; flag's bit db ($3 << 4) ; trainer's view range dw $d809 ; flag's byte dw SSAnne10BattleText6 ; 0x5e61 TextBeforeBattle dw SSAnne10AfterBattleText6 ; 0x5e6b TextAfterBattle dw SSAnne10EndBattleText6 ; 0x5e66 TextEndBattle dw SSAnne10EndBattleText6 ; 0x5e66 TextEndBattle db $ff SSAnne10Text1: ; 61dcd (18:5dcd) db $08 ; asm ld hl, SSAnne10TrainerHeader0 call TalkToTrainer jp TextScriptEnd SSAnne10Text2: ; 61dd7 (18:5dd7) db $08 ; asm ld hl, SSAnne10TrainerHeader1 call TalkToTrainer jp TextScriptEnd SSAnne10Text3: ; 61de1 (18:5de1) db $08 ; asm ld hl, SSAnne10TrainerHeader2 call TalkToTrainer jp TextScriptEnd SSAnne10Text4: ; 61deb (18:5deb) db $08 ; asm ld hl, SSAnne10TrainerHeader3 call TalkToTrainer jp TextScriptEnd SSAnne10Text5: ; 61df5 (18:5df5) db $08 ; asm ld hl, SSAnne10TrainerHeader4 call TalkToTrainer jp TextScriptEnd SSAnne10Text6: ; 61dff (18:5dff) db $08 ; asm ld hl, SSAnne10TrainerHeader5 call TalkToTrainer jp TextScriptEnd SSAnne10Text8: ; 61e09 (18:5e09) TX_FAR _SSAnne10Text8 db $8 ; 0x61e0d ld a, MACHOKE call PlayCry jp TextScriptEnd SSAnne10BattleText1: ; 61e16 (18:5e16) TX_FAR _SSAnne10BattleText1 db "@" SSAnne10EndBattleText1: ; 61e1b (18:5e1b) TX_FAR _SSAnne10EndBattleText1 db "@" SSAnne10AfterBattleText1: ; 61e20 (18:5e20) TX_FAR _SSAnne10AfterBattleText1 db "@" SSAnne10BattleText2: ; 61e25 (18:5e25) TX_FAR _SSAnne10BattleText2 db "@" SSAnne10EndBattleText2: ; 61e2a (18:5e2a) TX_FAR _SSAnne10EndBattleText2 db "@" SSAnne10AfterBattleText2: ; 61e2f (18:5e2f) TX_FAR _SSAnne10AfterBattleText2 db "@" SSAnne10BattleText3: ; 61e34 (18:5e34) TX_FAR _SSAnne10BattleText3 db "@" SSAnne10EndBattleText3: ; 61e39 (18:5e39) TX_FAR _SSAnne10EndBattleText3 db "@" SSAnne10AfterBattleText3: ; 61e3e (18:5e3e) TX_FAR _SSAnne10AfterBattleText3 db "@" SSAnne10BattleText4: ; 61e43 (18:5e43) TX_FAR _SSAnne10BattleText4 db "@" SSAnne10EndBattleText4: ; 61e48 (18:5e48) TX_FAR _SSAnne10EndBattleText4 db "@" SSAnne10AfterBattleText4: ; 61e4d (18:5e4d) TX_FAR _SSAnne10AfterBattleText4 db "@" SSAnne10BattleText5: ; 61e52 (18:5e52) TX_FAR _SSAnne10BattleText5 db "@" SSAnne10EndBattleText5: ; 61e57 (18:5e57) TX_FAR _SSAnne10EndBattleText5 db "@" SSAnne10AfterBattleText5: ; 61e5c (18:5e5c) TX_FAR _SSAnne10AfterBattleText5 db "@" SSAnne10BattleText6: ; 61e61 (18:5e61) TX_FAR _SSAnne10BattleText6 db "@" SSAnne10EndBattleText6: ; 61e66 (18:5e66) TX_FAR _SSAnne10EndBattleText6 db "@" SSAnne10AfterBattleText6: ; 61e6b (18:5e6b) TX_FAR _SSAnne10AfterBattleText6 db "@" SSAnne10Text7: ; 61e70 (18:5e70) TX_FAR _SSAnne10Text7 db "@" SSAnne10Object: ; 0x61e75 (size=165) db $c ; border tile db $a ; warps db $5, $2, $4, SS_ANNE_4 db $5, $3, $4, SS_ANNE_4 db $5, $c, $3, SS_ANNE_4 db $5, $d, $3, SS_ANNE_4 db $5, $16, $2, SS_ANNE_4 db $5, $17, $2, SS_ANNE_4 db $f, $2, $1, SS_ANNE_4 db $f, $3, $1, SS_ANNE_4 db $f, $c, $0, SS_ANNE_4 db $f, $d, $0, SS_ANNE_4 db $0 ; signs db $b ; people db SPRITE_SAILOR, $d + 4, $0 + 4, $ff, $d0, $41, SAILOR + $C8, $3 ; trainer db SPRITE_SAILOR, $b + 4, $2 + 4, $ff, $d0, $42, SAILOR + $C8, $4 ; trainer db SPRITE_SAILOR, $3 + 4, $c + 4, $ff, $d2, $43, SAILOR + $C8, $5 ; trainer db SPRITE_SAILOR, $2 + 4, $16 + 4, $ff, $d0, $44, SAILOR + $C8, $6 ; trainer db SPRITE_SAILOR, $2 + 4, $0 + 4, $ff, $d3, $45, SAILOR + $C8, $7 ; trainer db SPRITE_FISHER2, $4 + 4, $0 + 4, $ff, $d3, $46, FISHER + $C8, $2 ; trainer db SPRITE_BLACK_HAIR_BOY_2, $d + 4, $a + 4, $ff, $d3, $7 ; person db SPRITE_SLOWBRO, $c + 4, $b + 4, $ff, $ff, $8 ; person db SPRITE_BALL, $2 + 4, $14 + 4, $ff, $ff, $89, ETHER ; item db SPRITE_BALL, $2 + 4, $a + 4, $ff, $ff, $8a, TM_44 ; item db SPRITE_BALL, $b + 4, $c + 4, $ff, $ff, $8b, MAX_POTION ; item ; warp-to EVENT_DISP $c, $5, $2 ; SS_ANNE_4 EVENT_DISP $c, $5, $3 ; SS_ANNE_4 EVENT_DISP $c, $5, $c ; SS_ANNE_4 EVENT_DISP $c, $5, $d ; SS_ANNE_4 EVENT_DISP $c, $5, $16 ; SS_ANNE_4 EVENT_DISP $c, $5, $17 ; SS_ANNE_4 EVENT_DISP $c, $f, $2 ; SS_ANNE_4 EVENT_DISP $c, $f, $3 ; SS_ANNE_4 EVENT_DISP $c, $f, $c ; SS_ANNE_4 EVENT_DISP $c, $f, $d ; SS_ANNE_4 UndergroundPathNS_h: ; 0x61f1a to 0x61f26 (12 bytes) (id=119) db $0b ; tileset db UNDERGROUND_PATH_NS_HEIGHT, UNDERGROUND_PATH_NS_WIDTH ; dimensions (y, x) dw UndergroundPathNSBlocks, UndergroundPathNSTextPointers, UndergroundPathNSScript ; blocks, texts, scripts db $00 ; connections dw UndergroundPathNSObject ; objects UndergroundPathNSScript: ; 61f26 (18:5f26) jp EnableAutoTextBoxDrawing UndergroundPathNSTextPointers: ; 61f29 (18:5f29) db "@" UndergroundPathNSObject: ; 0x61f2a (size=20) db $1 ; border tile db $2 ; warps db $4, $5, $2, PATH_ENTRANCE_ROUTE_5 db $29, $2, $2, PATH_ENTRANCE_ROUTE_6 db $0 ; signs db $0 ; people ; warp-to EVENT_DISP $4, $4, $5 ; PATH_ENTRANCE_ROUTE_5 EVENT_DISP $4, $29, $2 ; PATH_ENTRANCE_ROUTE_6 UndergroundPathWE_h: ; 0x61f3e to 0x61f4a (12 bytes) (id=121) db $0b ; tileset db UNDERGROUND_PATH_WE_HEIGHT, UNDERGROUND_PATH_WE_WIDTH ; dimensions (y, x) dw UndergroundPathWEBlocks, UndergroundPathWETextPointers, UndergroundPathWEScript ; blocks, texts, scripts db $00 ; connections dw UndergroundPathWEObject ; objects UndergroundPathWEScript: ; 61f4a (18:5f4a) jp EnableAutoTextBoxDrawing UndergroundPathWETextPointers: ; 61f4d (18:5f4d) db "@" UndergroundPathWEObject: ; 0x61f4e (size=20) db $1 ; border tile db $2 ; warps db $5, $2, $2, PATH_ENTRANCE_ROUTE_7 db $2, $2f, $2, PATH_ENTRANCE_ROUTE_8 db $0 ; signs db $0 ; people ; warp-to EVENT_DISP $19, $5, $2 ; PATH_ENTRANCE_ROUTE_7 EVENT_DISP $19, $2, $2f ; PATH_ENTRANCE_ROUTE_8 DiglettsCave_h: ; 0x61f62 to 0x61f6e (12 bytes) (id=197) db $11 ; tileset db DIGLETTS_CAVE_HEIGHT, DIGLETTS_CAVE_WIDTH ; dimensions (y, x) dw DiglettsCaveBlocks, DiglettsCaveTextPointers, DiglettsCaveScript ; blocks, texts, scripts db $00 ; connections dw DiglettsCaveObject ; objects DiglettsCaveScript: ; 61f6e (18:5f6e) jp EnableAutoTextBoxDrawing DiglettsCaveTextPointers: ; 61f71 (18:5f71) db "@" DiglettsCaveObject: ; 0x61f72 (size=20) db $19 ; border tile db $2 ; warps db $5, $5, $2, DIGLETTS_CAVE_EXIT db $1f, $25, $2, DIGLETTS_CAVE_ENTRANCE db $0 ; signs db $0 ; people ; warp-to EVENT_DISP $14, $5, $5 ; DIGLETTS_CAVE_EXIT EVENT_DISP $14, $1f, $25 ; DIGLETTS_CAVE_ENTRANCE DiglettsCaveBlocks: ; 61f86 (18:5f86) INCBIN "maps/diglettscave.blk" SilphCo11_h: ; 0x620ee to 0x620fa (12 bytes) (id=235) db $10 ; tileset db SILPH_CO_11F_HEIGHT, SILPH_CO_11F_WIDTH ; dimensions (y, x) dw SilphCo11Blocks, SilphCo11TextPointers, SilphCo11Script ; blocks, texts, scripts db $00 ; connections dw SilphCo11Object ; objects SilphCo11Script: ; 620fa (18:60fa) call SilphCo11Script_62110 call EnableAutoTextBoxDrawing ld hl, SilphCo11TrainerHeaders ld de, SilphCo11ScriptPointers ld a, [W_SILPHCO11CURSCRIPT] call ExecuteCurMapScriptInTable ld [W_SILPHCO11CURSCRIPT], a ret SilphCo11Script_62110: ; 62110 (18:6110) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld hl, DataTable_62134 ; $6134 call Func_62137 call Func_62163 ld a, [$d838] bit 0, a ret nz ld a, $20 ld [$d09f], a ld bc, $603 ld a, $17 jp Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) DataTable_62134: ; 62134 (18:6134) db $06,$03,$FF Func_62137: ; 62137 (18:6137) push hl ld hl, $d73f ld a, [hli] ld b, a ld a, [hl] ld c, a xor a ld [$FF00+$e0], a pop hl .asm_62143 ld a, [hli] cp $ff jr z, .asm_6215f push hl ld hl, $ffe0 inc [hl] pop hl cp b jr z, .asm_62154 inc hl jr .asm_62143 .asm_62154 ld a, [hli] cp c jr nz, .asm_62143 ld hl, $d73f xor a ld [hli], a ld [hl], a ret .asm_6215f xor a ld [$FF00+$e0], a ret Func_62163: ; 62163 (18:6163) ld a, [$FF00+$e0] and a ret z ld hl, $d838 set 0, [hl] ret Func_6216d: ; 6216d (18:616d) ld hl, MissableObjectIDs_6219b ; $619b .asm_62170 ld a, [hli] cp $ff jr z, .asm_62181 push hl ld [$cc4d], a ld a, $11 call Predef ; indirect jump to RemoveMissableObject (f1d7 (3:71d7)) pop hl jr .asm_62170 .asm_62181 ld hl, MissableObjectIDs_62194 ; $6194 .asm_62184 ld a, [hli] cp $ff ret z push hl ld [$cc4d], a ld a, $15 call Predef ; indirect jump to AddMissableObject (f1c8 (3:71c8)) pop hl jr .asm_62184 MissableObjectIDs_62194: ; 62194 (18:6194) db $11,$12,$13,$14,$15,$16,$FF MissableObjectIDs_6219b: ; 6219b (18:619b) db $0A,$0B,$0C,$0D,$0E,$0F,$10,$17 db $18,$8A,$8B,$8C,$8D,$8E,$8F,$91 db $92,$93,$97,$98,$99,$9A,$9E,$9F db $A0,$A3,$A4,$A5,$A6,$AB,$AC,$AD db $AE,$AF,$B0,$B1,$B2,$B7,$B8,$B9 db $FF SilphCo11Script_621c4: ; 621c4 (18:61c4) xor a ld [wJoypadForbiddenButtonsMask], a SilphCo11Script_621c8: ; 621c8 (18:61c8) ld [W_SILPHCO11CURSCRIPT], a ld [W_CURMAPSCRIPT], a ret SilphCo11ScriptPointers: ; 621cf (18:61cf) dw SilphCo11Script0 dw Func_324c dw EndTrainerBattle dw SilphCo11Script3 dw SilphCo11Script4 dw SilphCo11Script5 SilphCo11Script0: ; 621db (18:61db) ld a, [$d838] bit 7, a ret nz ld hl, CoordsData_62211 ; $6211 call ArePlayerCoordsInArray jp nc, CheckFightingMapTrainers ld a, [wWhichTrade] ; $cd3d ld [$cf0d], a xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld a, $3 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld a, $3 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call SetSpriteMovementBytesToFF ld de, MovementData_62216 call MoveSprite ld a, $3 jp SilphCo11Script_621c8 CoordsData_62211: ; 62211 (18:6211) db $0D,$06 db $0C,$07 db $FF MovementData_62216: ; 62216 (18:6216) db $00,$00,$00,$FF SilphCo11Script_6221a: ; 6221a (18:621a) ld [$d528], a ld a, $3 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c ld a, b ld [$FF00+$8d], a jp Func_34a6 SilphCo11Script5: ; 62227 (18:6227) ld a, [W_ISINBATTLE] ; $d057 cp $ff jp z, SilphCo11Script_621c4 ld a, [$cf0d] cp $1 jr z, .asm_6223c ld a, $2 ld b, $c jr .asm_62240 .asm_6223c ld a, $8 ld b, $0 .asm_62240 call SilphCo11Script_6221a ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld a, $6 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID call GBFadeIn1 call Func_6216d call UpdateSprites call Delay3 call GBFadeOut1 ld hl, $d838 set 7, [hl] xor a ld [wJoypadForbiddenButtonsMask], a jp SilphCo11Script_621c8 SilphCo11Script3: ; 6226a (18:626a) ld a, [$d730] bit 0, a ret nz ld a, $3 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call SetSpriteMovementBytesToFF ld a, [$cf0d] cp $1 jr z, .asm_62284 ld a, $2 ld b, $c jr .asm_62288 .asm_62284 ld a, $8 ld b, $0 .asm_62288 call SilphCo11Script_6221a call Delay3 ld a, $4 jp SilphCo11Script_621c8 SilphCo11Script4: ; 62293 (18:6293) ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, UnnamedText_62330 ; $6330 ld de, UnnamedText_62330 ; $6330 call PreBattleSaveRegisters ld a, [H_DOWNARROWBLINKCNT2] ; $FF00+$8c ld [$cf13], a call EngageMapTrainer call InitBattleEnemyParameters xor a ld [wJoypadForbiddenButtonsMask], a ld a, $5 jp SilphCo11Script_621c8 SilphCo11TextPointers: ; 622b7 (18:62b7) dw SilphCo11Text1 dw SilphCo11Text2 dw SilphCo11Text3 dw SilphCo11Text4 dw SilphCo11Text5 dw SilphCo11Text6 SilphCo11TrainerHeaders: ; 622c3 (18:62c3) SilphCo11TrainerHeader0: ; 622c3 (18:62c3) db $4 ; flag's bit db ($4 << 4) ; trainer's view range dw $d837 ; flag's byte dw SilphCo11BattleText1 ; 0x6344 TextBeforeBattle dw SilphCo11AfterBattleText1 ; 0x634e TextAfterBattle dw SilphCo11EndBattleText1 ; 0x6349 TextEndBattle dw SilphCo11EndBattleText1 ; 0x6349 TextEndBattle SilphCo11TrainerHeader1: ; 622cf (18:62cf) db $5 ; flag's bit db ($3 << 4) ; trainer's view range dw $d837 ; flag's byte dw SilphCo11BattleText2 ; 0x635d TextBeforeBattle dw SilphCo11AfterBattleText2 ; 0x6367 TextAfterBattle dw SilphCo11EndBattleText2 ; 0x6362 TextEndBattle dw SilphCo11EndBattleText2 ; 0x6362 TextEndBattle db $ff SilphCo11Text1: ; 622dc (18:62dc) db $08 ; asm ld a, [$d838] bit 5, a jp nz, .asm_62308 ld hl, SilphCoPresidentText call PrintText ld bc, (MASTER_BALL << 8) | 1 call GiveItem jr nc, .BagFull ld hl, ReceivedSilphCoMasterBallText call PrintText ld hl, $d838 set 5, [hl] jr .asm_fd405 ; 0x622fe .BagFull ld hl, SilphCoMasterBallNoRoomText call PrintText jr .asm_fd405 ; 0x62306 .asm_62308 ; 0x62308 ld hl, UnnamedText_6231c call PrintText .asm_fd405 ; 0x6230e jp TextScriptEnd SilphCoPresidentText: ; 62311 (18:6311) TX_FAR _SilphCoPresidentText db "@" ReceivedSilphCoMasterBallText: ; 62316 (18:6316) TX_FAR _ReceivedSilphCoMasterBallText ; 0x84f63 db $11, "@" UnnamedText_6231c: ; 6231c (18:631c) TX_FAR _UnnamedText_6231c db "@" SilphCoMasterBallNoRoomText: ; 62321 (18:6321) TX_FAR _SilphCoMasterBallNoRoomText db "@" SilphCo11Text2: ; 62326 (18:6326) TX_FAR _SilphCo11Text2 db "@" SilphCo11Text3: ; 6232b (18:632b) TX_FAR _SilphCo11Text3 db "@" UnnamedText_62330: ; 62330 (18:6330) TX_FAR _UnnamedText_62330 db "@" SilphCo11Text6: ; 62335 (18:6335) TX_FAR _UnnamedText_62335 db "@" SilphCo11Text4: ; 6233a (18:633a) db $08 ; asm ld hl, SilphCo11TrainerHeader0 call TalkToTrainer jp TextScriptEnd SilphCo11BattleText1: ; 62344 (18:6344) TX_FAR _SilphCo11BattleText1 db "@" SilphCo11EndBattleText1: ; 62349 (18:6349) TX_FAR _SilphCo11EndBattleText1 db "@" SilphCo11AfterBattleText1: ; 6234e (18:634e) TX_FAR _SilphCo11AfterBattleText1 db "@" SilphCo11Text5: ; 62353 (18:6353) db $08 ; asm ld hl, SilphCo11TrainerHeader1 call TalkToTrainer jp TextScriptEnd SilphCo11BattleText2: ; 6235d (18:635d) TX_FAR _SilphCo11BattleText2 db "@" SilphCo11EndBattleText2: ; 62362 (18:6362) TX_FAR _SilphCo11EndBattleText2 db "@" SilphCo11AfterBattleText2: ; 62367 (18:6367) TX_FAR _SilphCo11AfterBattleText2 db "@" UnnamedText_6236c: ; 6236c (18:636c) db $8 ld hl, UnnamedText_6237b call PrintText ld a, PORYGON call DisplayPokedex jp TextScriptEnd UnnamedText_6237b: ; 6237b (18:637b) TX_FAR _UnnamedText_6237b db "@" SilphCo11Object: ; 0x62380 (size=72) db $d ; border tile db $4 ; warps db $0, $9, $1, SILPH_CO_10F db $0, $d, $0, SILPH_CO_ELEVATOR db $5, $5, $9, $ff db $2, $3, $3, SILPH_CO_7F db $0 ; signs db $5 ; people db SPRITE_MR_MASTERBALL, $5 + 4, $7 + 4, $ff, $d0, $1 ; person db SPRITE_FOULARD_WOMAN, $5 + 4, $a + 4, $ff, $d0, $2 ; person db SPRITE_GIOVANNI, $9 + 4, $6 + 4, $ff, $d0, $43, GIOVANNI + $C8, $2 ; trainer db SPRITE_ROCKET, $10 + 4, $3 + 4, $ff, $d1, $44, ROCKET + $C8, $29 ; trainer db SPRITE_ROCKET, $9 + 4, $f + 4, $ff, $d1, $45, ROCKET + $C8, $28 ; trainer ; warp-to EVENT_DISP $9, $0, $9 ; SILPH_CO_10F EVENT_DISP $9, $0, $d ; SILPH_CO_ELEVATOR EVENT_DISP $9, $5, $5 EVENT_DISP $9, $2, $3 ; SILPH_CO_7F SilphCo11Blocks: ; 623c8 (18:63c8) INCBIN "maps/silphco11.blk" GymStatues: ; 62419 (18:6419) ; if in a gym and have the corresponding badge, a = $D and jp Func_3ef5 ; if in a gym and don’t have the corresponding badge, a = $C and jp Func_3ef5 ; else ret call EnableAutoTextBoxDrawing ld a, [$c109] cp $4 ret nz ld hl, .BadgeFlags ld a, [W_CURMAP] ld b, a .asm_62429 ld a, [hli] cp $ff ret z cp b jr z, .asm_62433 ; 0x6242e $3 inc hl jr .asm_62429 ; 0x62431 $f6 .asm_62433 ld b, [hl] ld a, [$d72a] and b cp b ld a, $d jr z, .asm_6243f ; 0x6243b $2 ld a, $c .asm_6243f jp Func_3ef5 .BadgeFlags: ; 62442 (18:6442) db PEWTER_GYM, %00000001 db CERULEAN_GYM, %00000010 db VERMILION_GYM,%00000100 db CELADON_GYM, %00001000 db FUCHSIA_GYM, %00010000 db SAFFRON_GYM, %00100000 db CINNABAR_GYM, %01000000 db VIRIDIAN_GYM, %10000000 db $ff GymStatueText1: ; 62453 (18:6453) TX_FAR _GymStatueText1 db "@" GymStatueText2: ; 62458 (18:6458) TX_FAR _GymStatueText2 db "@" Func_6245d: ; 6245d (18:645d) call EnableAutoTextBoxDrawing ld hl, PokeCenterMapIDList ld a, [W_CURMAP] ld b, a .asm_62467 ld a, [hli] cp $ff ret z cp b jr z, .asm_62472 inc hl inc hl jr .asm_62467 .asm_62472 ld a, [hli] ld b, a ld a, [$c109] cp b jr nz, .asm_62467 ld a, [hl] jp Func_3ef5 ; format: db map id, 08, text id of PointerTable_3f22 PokeCenterMapIDList: ; 6247e (18:647e) db VIRIDIAN_POKECENTER,$08,$0F db PEWTER_POKECENTER,$08,$10 db CERULEAN_POKECENTER,$08,$11 db LAVENDER_POKECENTER,$08,$12 db VERMILION_POKECENTER,$08,$13 db CELADON_POKECENTER,$08,$14 db CELADON_HOTEL,$08,$15 db FUCHSIA_POKECENTER,$08,$16 db CINNABAR_POKECENTER,$08,$17 db SAFFRON_POKECENTER,$08,$18 db MT_MOON_POKECENTER,$08,$19 db ROCK_TUNNEL_POKECENTER,$08,$1A db $FF ViridianCityPokecenterBenchGuyText: ; 624a3 (18:64a3) TX_FAR _ViridianCityPokecenterGuyText db "@" PewterCityPokecenterBenchGuyText: ; 624a8 (18:64a8) TX_FAR _PewterCityPokecenterGuyText db "@" CeruleanCityPokecenterBenchGuyText: ; 624ad (18:64ad) TX_FAR _CeruleanPokecenterGuyText db "@" LavenderCityPokecenterBenchGuyText: ; 624b2 (18:64b2) TX_FAR _LavenderPokecenterGuyText db "@" MtMoonPokecenterBenchGuyText: ; 624b7 (18:64b7) TX_FAR _MtMoonPokecenterBenchGuyText db "@" RockTunnelPokecenterBenchGuyText: ; 624bc (18:64bc) TX_FAR _RockTunnelPokecenterGuyText db "@" UnnamedText_624c1: ; 624c1 (18:64c1) TX_FAR _UnnamedText_624c1 db "@" UnnamedText_624c6: ; 624c6 (18:64c6) TX_FAR _UnnamedText_624c6 db "@" UnnamedText_624cb: ; 624cb (18:64cb) TX_FAR _UnnamedText_624cb db "@" VermilionCityPokecenterBenchGuyText: ; 624d0 (18:64d0) TX_FAR _VermilionPokecenterGuyText db "@" CeladonCityPokecenterBenchGuyText: ; 624d5 (18:64d5) TX_FAR _CeladonCityPokecenterGuyText db "@" FuchsiaCityPokecenterBenchGuyText: ; 624da (18:64da) TX_FAR _FuchsiaCityPokecenterGuyText db "@" CinnabarIslandPokecenterBenchGuyText: ; 624df (18:64df) TX_FAR _CinnabarPokecenterGuyText db "@" SaffronCityPokecenterBenchGuyText: ; 624e4 (18:64e4) db $8 ; asm ld a, [$d838] bit 7, a ld hl, SaffronCityPokecenterBenchGuyText2 jr nz, .asm_624f2 ; 0x624ed $3 ld hl, SaffronCityPokecenterBenchGuyText1 .asm_624f2 call PrintText jp TextScriptEnd SaffronCityPokecenterBenchGuyText1: ; 624f8 (18:64f8) TX_FAR _SaffronCityPokecenterGuyText1 db "@" SaffronCityPokecenterBenchGuyText2: ; 624fd (18:64fd) TX_FAR _SaffronCityPokecenterGuyText2 db "@" CeladonCityHotelText: ; 62502 (18:6502) TX_FAR _CeladonCityHotelText db "@" ret Unknown_62508: ; 62508 (18:6508) db "@" Func_62509: ; 6509 (18:6509) call EnableAutoTextBoxDrawing ld a, $e jp Func_3ef5 BookcaseText: ; 62511 (18:6511) TX_FAR _BookcaseText db "@" Func_62516: ; 62516 (18:6516) ld a, [$c109] cp $4 ; check to see if player is facing up ret nz call EnableAutoTextBoxDrawing ld a, $1 ld [$cf0c], a ld a, $1f jp Func_3ef5 Unknown_62529: ; 62529 (18:6529) db $F9 SECTION "bank19",ROMX,BANK[$19] Tset00_GFX: ; 64000 (19:4000) INCBIN "gfx/tilesets/00.2bpp" Tset00_Block: ; 645e0 (19:45e0) INCBIN "gfx/blocksets/00.bst" Tset01_GFX: ; 64de0 (19:4de0) INCBIN "gfx/tilesets/01.2bpp" Tset01_Block: ; 65270 (19:5270) INCBIN "gfx/blocksets/01.bst" Tset08_GFX: ; 653a0 (19:53a0) INCBIN "gfx/tilesets/08.2bpp" Tset08_Block: ; 65980 (19:5980) INCBIN "gfx/blocksets/08.bst" Tset13_GFX: ; 65bb0 (19:5bb0) INCBIN "gfx/tilesets/13.2bpp" Tset13_Block: ; 66190 (19:6190) INCBIN "gfx/blocksets/13.bst" Tset0E_GFX: ; 66610 (19:6610) INCBIN "gfx/tilesets/0e.2bpp" Tset0E_Block: ; 66bf0 (19:6bf0) INCBIN "gfx/blocksets/0e.bst" Tset10_GFX: ; 66d60 (19:6d60) INCBIN "gfx/tilesets/10.2bpp" Tset10_Block: ; 67350 (19:7350) INCBIN "gfx/blocksets/10.bst" Tset17_GFX: ; 676f0 (19:76f0) INCBIN "gfx/tilesets/17.2bpp" Tset17_Block: ; 67b50 (19:7b50) INCBIN "gfx/blocksets/17.bst" SECTION "bank1A",ROMX,BANK[$1A] DecrementPP: ; 68000 (1a:4000) ; after using a move, decrement pp in battle and (if not transformed?) in party ld a, [de] cp a, STRUGGLE ret z ; if the pokemon is using "struggle", there's nothing to do ; we don't decrement PP for "struggle" ld hl, W_PLAYERBATTSTATUS1 ld a, [hli] ; load the W_PLAYERBATTSTATUS1 pokemon status flags and increment hl to load the ; W_PLAYERBATTSTATUS2 status flags later and a, 7 ; check to see if bits 0, 1, or 2 are set ret nz ; if any of these statuses are true, don't decrement PP bit 6, [hl] ; check 6th bit status flag on W_PLAYERBATTSTATUS2 ret nz ; and return if it is set ld hl, $D02D ; PP of first move (in battle) call .DecrementPP ld a, [$D064] ; load pokemon status bits? bit 3, a ; XXX transform status? ret nz ; If it is, return. Pokemon Red stores the "current pokemon's" PP ; separately from the "Pokemon in your party's" PP. This is ; duplication -- in all cases *other* than Pokemon with Transform. ; Normally, this means we have to go on and make the same ; modification to the "party's pokemon" PP that we made to the ; "current pokemon's" PP. But, if we're dealing with a Transformed ; Pokemon, it has separate PP for the move set that it copied from ; its opponent, which is *not* the same as its real PP as part of your ; party. So we return, and don't do that part. ld hl, $D188 ; PP of first move (in party) ld a, [$CC2F] ; which mon in party is active ld bc, $2C ; XXX probably size of party pokemon's data structure call AddNTimes ; calculate address of the mon to modify .DecrementPP ld a, [$CC2E] ; which move (0, 1, 2, 3) did we use? ld c, a ld b, 0 add hl ,bc ; calculate the address in memory of the PP we need to decrement ; based on the move chosen. dec [hl] ; Decrement PP ret Version_GFX: ; 6802f (1a:402f) IF _RED INCBIN "gfx/red/redgreenversion.1bpp" ; 80 bytes ENDC IF _BLUE INCBIN "gfx/blue/blueversion.1bpp" ; 64 bytes ENDC Tset05_GFX: ; 6807f (1a:407f) INCBIN "gfx/tilesets/05.2bpp" Tset05_Block: ; 6867f (1a:467f) INCBIN "gfx/blocksets/05.bst" Tset02_GFX: ; 68dbf (1a:4dbf) INCBIN "gfx/tilesets/02.2bpp" Tset02_Block: ; 693bf (1a:53bf) INCBIN "gfx/blocksets/02.bst" Tset09_GFX: ; 6960f (1a:560f) INCBIN "gfx/tilesets/09.2bpp" Tset09_Block: ; 69bff (1a:5bff) INCBIN "gfx/blocksets/09.bst" Tset03_GFX: ; 6a3ff (1a:63ff) INCBIN "gfx/tilesets/03.2bpp" Tset03_Block: ; 6a9ff (1a:69ff) INCBIN "gfx/blocksets/03.bst" Tset16_GFX: ; 6b1ff (1a:71ff) INCBIN "gfx/tilesets/16.2bpp" Tset16_Block: ; 6b7ff (1a:77ff) INCBIN "gfx/blocksets/16.bst" SECTION "bank1B",ROMX,BANK[$1B] Tset0F_GFX: ; 6c000 (1b:4000) INCBIN "gfx/tilesets/0f.2bpp" Tset0F_Block: ; 6c5c0 (1b:45c0) INCBIN "gfx/blocksets/0f.bst" Tset11_GFX: ; 6cca0 (1b:4ca0) INCBIN "gfx/tilesets/11.2bpp" Tset11_Block: ; 6d0c0 (1b:50c0) INCBIN "gfx/blocksets/11.bst" Tset12_GFX: ; 6d8c0 (1b:58c0) INCBIN "gfx/tilesets/12.2bpp" Tset12_Block: ; 6dea0 (1b:5ea0) INCBIN "gfx/blocksets/12.bst" Tset0D_GFX: ; 6e390 (1b:6390) INCBIN "gfx/tilesets/0d.2bpp" Tset0D_Block: ; 6e930 (1b:6930) INCBIN "gfx/blocksets/0d.bst" Tset14_GFX: ; 6ed10 (1b:6d10) INCBIN "gfx/tilesets/14.2bpp" Tset14_Block: ; 6f2d0 (1b:72d0) INCBIN "gfx/blocksets/14.bst" Tset15_GFX: ; 6f670 (1b:7670) INCBIN "gfx/tilesets/15.2bpp" Tset15_Block: ; 6fb20 (1b:7b20) INCBIN "gfx/blocksets/15.bst" Tset0B_GFX: ; 6fd60 (1b:7d60) INCBIN "gfx/tilesets/0b.2bpp" Tset0B_Block: ; 6fef0 (1b:7ef0) INCBIN "gfx/blocksets/0b.bst" SECTION "bank1C",ROMX,BANK[$1C] Func_70000: ; 70000 (1c:4000) ld a, $f9 ld [rOBP0], a ; $FF00+$48 ld a, $a4 ld [rOBP1], a ; $FF00+$49 ld de, AnimationTileset2 + $30 ; $471e ; star tile (top left quadrant) ld hl, $8a00 ld bc, (BANK(AnimationTileset2) << 8) + $01 call CopyVideoData ld de, AnimationTileset2 + $130 ; $481e ; star tile (bottom left quadrant) ld hl, $8a10 ld bc, (BANK(AnimationTileset2) << 8) + $01 call CopyVideoData ld de, FallingStar ; $4190 ld hl, $8a20 ld bc, (BANK(FallingStar) << 8) + $01 call CopyVideoData ld hl, GameFreakLogoOAMData ; $4140 ld de, wOAMBuffer + $60 ld bc, $40 call CopyData ld hl, GameFreakShootingStarOAMData ; $4180 ld de, wOAMBuffer ld bc, $10 jp CopyData Func_70044: ; 70044 (1c:4044) call Func_70000 ld a, $c2 call PlaySound ld hl, wOAMBuffer ld bc, $a004 .asm_70052 push hl push bc .asm_70054 ld a, [hl] add $4 ld [hli], a ld a, [hl] add $fc ld [hli], a inc hl inc hl dec c jr nz, .asm_70054 ld c, $1 call CheckForUserInterruption pop bc pop hl ret c ld a, [hl] cp $50 jr nz, .asm_70070 jr .asm_70052 .asm_70070 cp b jr nz, .asm_70052 ld hl, wOAMBuffer ld c, $4 ld de, $4 .asm_7007b ld [hl], $a0 add hl, de dec c jr nz, .asm_7007b ld b, $3 .asm_70083 ld hl, rOBP0 ; $ff48 rrc [hl] rrc [hl] ld c, $a call CheckForUserInterruption ret c dec b jr nz, .asm_70083 ld de, wOAMBuffer ld a, $18 .asm_70098 push af ld hl, OAMData_700ee ; $40ee ld bc, $4 call CopyData pop af dec a jr nz, .asm_70098 xor a ld [wWhichTrade], a ; $cd3d ld hl, PointerTable_700f2 ; $40f2 ld c, $6 .asm_700af ld a, [hli] ld e, a ld a, [hli] ld d, a push bc push hl ld hl, wOAMBuffer + $50 ld c, $4 .asm_700ba ld a, [de] cp $ff jr z, .asm_700d5 ld [hli], a inc de ld a, [de] ld [hli], a inc de inc hl inc hl dec c jr nz, .asm_700ba ld a, [wWhichTrade] ; $cd3d cp $18 jr z, .asm_700d5 add $6 ld [wWhichTrade], a ; $cd3d .asm_700d5 call Func_7011f push af ld hl, $c310 ld de, wOAMBuffer ld bc, $50 call CopyData pop af pop hl pop bc ret c dec c jr nz, .asm_700af and a ret OAMData_700ee: ; 700ee (1c:40ee) db $00,$00,$A2,$90 PointerTable_700f2: ; 700f2 (1c:40f2) dw OAMData_700fe dw OAMData_70106 dw OAMData_7010e dw OAMData_70116 dw OAMData_7011e dw OAMData_7011e ; each entry is only half of an OAM tile OAMData_700fe: ; 700fe (1c:40fe) db $68,$30 db $68,$40 db $68,$58 db $68,$78 OAMData_70106: ; 70106 (1c:4106) db $68,$38 db $68,$48 db $68,$60 db $68,$70 OAMData_7010e: ; 7010e (1c:410e) db $68,$34 db $68,$4C db $68,$54 db $68,$64 OAMData_70116: ; 70116 (1c:4116) db $68,$3C db $68,$5C db $68,$6C db $68,$74 OAMData_7011e: ; 7011e (1c:411e) db $FF Func_7011f: ; 7011f (1c:411f) ld b, $8 .asm_70121 ld hl, $c35c ld a, [wWhichTrade] ; $cd3d ld de, $fffc ld c, a .asm_7012b inc [hl] add hl, de dec c jr nz, .asm_7012b ld a, [rOBP1] ; $FF00+$49 xor $a0 ld [rOBP1], a ; $FF00+$49 ld c, $3 call CheckForUserInterruption ret c dec b jr nz, .asm_70121 ret GameFreakLogoOAMData: ; 70140 (1c:4140) db $48,$50,$8D,$00 db $48,$58,$8E,$00 db $50,$50,$8F,$00 db $50,$58,$90,$00 db $58,$50,$91,$00 db $58,$58,$92,$00 db $60,$30,$80,$00 db $60,$38,$81,$00 db $60,$40,$82,$00 db $60,$48,$83,$00 db $60,$50,$93,$00 db $60,$58,$84,$00 db $60,$60,$85,$00 db $60,$68,$83,$00 db $60,$70,$81,$00 db $60,$78,$86,$00 GameFreakShootingStarOAMData: ; 70180 (1c:4180) db $00,$A0,$A0,$10 db $00,$A8,$A0,$30 db $08,$A0,$A1,$10 db $08,$A8,$A1,$30 FallingStar: ; 70190 (1c:4190) INCBIN "gfx/falling_star.2bpp" Func_701a0: ; 701a0 (1c:41a0) call Func_70423 call ClearScreen ld c, $64 call DelayFrames call LoadFontTilePatterns call LoadTextBoxTilePatterns call DisableLCD ld hl, $9800 ld bc, $800 ld a, $7f call FillMemory call EnableLCD ld hl, rLCDC ; $ff40 set 3, [hl] xor a ld hl, $cc5b ld bc, $60 call FillMemory xor a ld [$cfcb], a ld [$FF00+$d7], a ld [W_SPRITEFLIPPED], a ld [$d358], a ld [$cd40], a inc a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld hl, $d5a2 ld a, [hl] inc a jr z, .asm_701eb inc [hl] .asm_701eb ld a, $90 ld [$FF00+$b0], a ld c, BANK(Music_HallOfFame) ld a, MUSIC_HALL_OF_FAME call PlayMusic ld hl, W_PARTYMON1 ; $d164 ld c, $ff .asm_701fb ld a, [hli] cp $ff jr z, .asm_70241 inc c push hl push bc ld [wWhichTrade], a ; $cd3d ld a, c ld [$cd3e], a ld hl, W_PARTYMON1_LEVEL ; $d18c ld bc, $2c call AddNTimes ld a, [hl] ld [$cd3f], a call Func_70278 call Func_702e1 ld c, $50 call DelayFrames FuncCoord 2, 13 ; $c4a6 ld hl, Coord ld b, $3 ld c, $e call TextBoxBorder FuncCoord 4, 15 ; $c4d0 ld hl, Coord ld de, HallOfFameText ; $426b call PlaceString ld c, $b4 call DelayFrames call GBFadeOut2 pop bc pop hl jr .asm_701fb .asm_70241 ld a, c inc a ld hl, $cc5b ld bc, $10 call AddNTimes ld [hl], $ff call Func_73b0d xor a ld [wWhichTrade], a ; $cd3d inc a ld [$cd40], a call Func_70278 call Func_70377 call Func_70423 xor a ld [$FF00+$b0], a ld hl, rLCDC ; $ff40 res 3, [hl] ret HallOfFameText: ; 7026b (1c:426b) db "HALL OF FAME@" Func_70278: ; 70278 (1c:4278) call ClearScreen ld a, $d0 ld [$FF00+$af], a ld a, $c0 ld [$FF00+$ae], a ld a, [wWhichTrade] ; $cd3d ld [$cf91], a ld [$d0b5], a ld [$cfd9], a ld [$cf1d], a ld a, [$cd40] and a jr z, .asm_7029d call Func_7033e jr .asm_702ab .asm_7029d FuncCoord 12, 5 ; $c410 ld hl, Coord call GetMonHeader call LoadFrontSpriteByMonIndex ld a, $4 call Predef ; indirect jump to LoadMonBackSprite (3f103 (f:7103)) .asm_702ab ld b, $b ld c, $0 call GoPAL_SET ld a, $e4 ld [rBGP], a ; $FF00+$47 ld c, $31 call Func_7036d ld d, $a0 ld e, $4 ld a, [$cf1b] and a jr z, .asm_702c7 sla e .asm_702c7 call .asm_702d5 xor a ld [$FF00+$af], a ld c, a call Func_7036d ld d, $0 ld e, $fc .asm_702d5 call DelayFrame ld a, [$FF00+$ae] add e ld [$FF00+$ae], a cp d jr nz, .asm_702d5 ret Func_702e1: ; 702e1 (1c:42e1) ld a, [$cd3e] ld hl, W_PARTYMON1NAME ; $d2b5 call GetPartyMonName call Func_702f0 jp Func_70404 Func_702f0: ; 702f0 (1c:42f0) FuncCoord 0, 2 ; $c3c8 ld hl, Coord ld b, $9 ld c, $a call TextBoxBorder FuncCoord 2, 6 ; $c41a ld hl, Coord ld de, HoFMonInfoText ; $4329 call PlaceString FuncCoord 1, 4 ; $c3f1 ld hl, Coord ld de, $cd6d call PlaceString ld a, [$cd3f] FuncCoord 8, 7 ; $c434 ld hl, Coord call PrintLevelCommon ld a, [wWhichTrade] ; $cd3d ld [$d0b5], a FuncCoord 3, 9 ; $c457 ld hl, Coord ld a, $4b call Predef ; indirect jump to Func_27d6b (27d6b (9:7d6b)) ld a, [wWhichTrade] ; $cd3d jp PlayCry HoFMonInfoText: ; 70329 (1c:4329) db "LEVEL/" next "TYPE1/" next "TYPE2/@" Func_7033e: ; 7033e (1c:433e) ld de, Unknown_72ede ; $6ede ld a, $4 call UncompressSpriteFromDE ld hl, S_SPRITEBUFFER1 ld de, $a000 ld bc, $310 call CopyData ld de, $9000 call InterlaceMergeSpriteBuffers ld de, RedPicBack ; $7e0a ld a, BANK(RedPicBack) call UncompressSpriteFromDE ld a, $3 call Predef ; indirect jump to ScaleSpriteByTwo (2fe40 (b:7e40)) ld de, $9310 call InterlaceMergeSpriteBuffers ld c, $1 Func_7036d: ; 7036d (1c:436d) ld b, $0 FuncCoord 12, 5 ; $c410 ld hl, Coord ld a, $31 jp Predef ; indirect jump to Func_79dda (79dda (1e:5dda)) Func_70377: ; 70377 (1c:4377) ld hl, $d747 set 3, [hl] ld a, $56 call Predef ; indirect jump to DisplayDexRating (44169 (11:4169)) FuncCoord 0, 4 ; $c3f0 ld hl, Coord ld b, $6 ld c, $a call TextBoxBorder FuncCoord 5, 0 ; $c3a5 ld hl, Coord ld b, $2 ld c, $9 call TextBoxBorder FuncCoord 7, 2 ; $c3cf ld hl, Coord ld de, W_PLAYERNAME ; $d158 call PlaceString FuncCoord 1, 6 ; $c419 ld hl, Coord ld de, HoFPlayTimeText ; $43ea call PlaceString FuncCoord 5, 7 ; $c431 ld hl, Coord ld de, $da41 ld bc, $103 call PrintNumber ld [hl], $6d inc hl ld de, $da43 ld bc, $8102 call PrintNumber FuncCoord 1, 9 ; $c455 ld hl, Coord ld de, HoFMoneyText ; $43f4 call PlaceString FuncCoord 4, 10 ; $c46c ld hl, Coord ld de, wPlayerMoney ; $d347 ld c, $a3 call PrintBCDNumber ld hl, UnnamedText_703fa ; $43fa call Func_703e2 ld hl, UnnamedText_703ff ; $43ff call Func_703e2 ld hl, $cc5d Func_703e2: ; 703e2 (1c:43e2) call PrintText ld c, $78 jp DelayFrames HoFPlayTimeText: ; 703ea (1c:43ea) db "PLAY TIME@" HoFMoneyText: ; 703f4 (1c:43f4) db "MONEY@" UnnamedText_703fa: ; 703fa (1c:43fa) TX_FAR _UnnamedText_703fa db "@" UnnamedText_703ff: ; 703ff (1c:43ff) TX_FAR _UnnamedText_703ff db "@" Func_70404: ; 70404 (1c:4404) ld hl, $cc5b ld bc, $10 ld a, [$cd3e] call AddNTimes ld a, [wWhichTrade] ; $cd3d ld [hli], a ld a, [$cd3f] ld [hli], a ld e, l ld d, h ld hl, $cd6d ld bc, $b jp CopyData Func_70423: ; 70423 (1c:4423) ld a, $a ld [$cfc8], a ld [$cfc9], a ld a, $ff ld [wMusicHeaderPointer], a jp GBFadeOut2 Func_70433: ; 70433 (1c:4433) ld de, PokeCenterFlashingMonitorAndHealBall ; $44b7 ld hl, $87c0 ld bc, (BANK(PokeCenterFlashingMonitorAndHealBall) << 8) + $03 call CopyVideoData ld hl, $cfcb ld a, [hl] push af ld [hl], $ff push hl ld a, [rOBP1] ; $FF00+$49 push af ld a, $e0 ld [rOBP1], a ; $FF00+$49 ld hl, $c384 ld de, PokeCenterOAMData ; $44d7 call Func_70503 ld a, $4 ld [wMusicHeaderPointer], a ld a, $ff ld [$c0ee], a call PlaySound .asm_70464 ld a, [wMusicHeaderPointer] and a jr nz, .asm_70464 ld a, [W_NUMINPARTY] ; $d163 ld b, a .asm_7046e call Func_70503 ld a, $9e call PlaySound ld c, $1e call DelayFrames dec b jr nz, .asm_7046e ld a, [$c0ef] cp $1f ld [$c0f0], a jr nz, .asm_70495 ld a, $ff ld [$c0ee], a call PlaySound ld a, Bank(Func_9876) ld [$c0ef], a .asm_70495 ld a, MUSIC_PKMN_HEALED ld [$c0ee], a call PlaySound ld d, $28 call Func_704f3 .asm_704a2 ld a, [$c026] cp MUSIC_PKMN_HEALED jr z, .asm_704a2 ld c, $20 call DelayFrames pop af ld [rOBP1], a ; $FF00+$49 pop hl pop af ld [hl], a jp UpdateSprites PokeCenterFlashingMonitorAndHealBall: ; 704b7 (1c:44b7) INCBIN "gfx/pokecenter_ball.2bpp" PokeCenterOAMData: ; 704d7 (1c:44d7) db $24,$34,$7C,$10 ; heal machine monitor db $2B,$30,$7D,$10 ; pokeballs 1-6 db $2B,$38,$7D,$30 db $30,$30,$7D,$10 db $30,$38,$7D,$30 db $35,$30,$7D,$10 db $35,$38,$7D,$30 Func_704f3: ; 704f3 (1c:44f3) ld b, $8 .asm_704f5 ld a, [rOBP1] ; $FF00+$49 xor d ld [rOBP1], a ; $FF00+$49 ld c, $a call DelayFrames dec b jr nz, .asm_704f5 ret Func_70503: ; 70503 (1c:4503) ld a, [de] inc de ld [hli], a ld a, [de] inc de ld [hli], a ld a, [de] inc de ld [hli], a ld a, [de] inc de ld [hli], a ret Func_70510: ; 70510 (1c:4510) call Func_706ef ld a, $ec ld [$c104], a call Delay3 push hl call GBFadeIn2 ld hl, W_FLAGS_D733 bit 7, [hl] res 7, [hl] jr nz, .asm_70568 ld a, $a0 call PlaySound ld hl, $d732 bit 4, [hl] res 4, [hl] pop hl jr nz, .asm_7055e call Func_705aa ld a, $a3 call PlaySound call Func_70787 ld a, b and a jr nz, .asm_7055b ld hl, wWhichTrade ; $cd3d xor a ld [hli], a inc a ld [hli], a ld a, $8 ld [hli], a ld [hl], $ff ld hl, $cd48 call Func_70730 .asm_70558 call Func_2307 .asm_7055b jp Func_70772 .asm_7055e ld c, $32 call DelayFrames call Func_705aa jr .asm_7055b .asm_70568 pop hl ld de, BirdSprite ; $4d80 ld hl, $8000 ld bc, (BANK(BirdSprite) << 8) + $0c call CopyVideoData call Func_706d7 ld a, $a4 call PlaySound ld hl, wWhichTrade ; $cd3d xor a ld [hli], a ld a, $c ld [hli], a ld [hl], $8 ld de, FlyAnimationEnterScreenCoords ; $4592 call Func_706ae call LoadPlayerSpriteGraphics jr .asm_70558 FlyAnimationEnterScreenCoords: ; 70592 (1c:4592) ; y, x pairs ; This is the sequence of screen coordinates used by the overworld ; Fly animation when the player is entering a map. db $05, $98 db $0F, $90 db $18, $88 db $20, $80 db $27, $78 db $2D, $70 db $32, $68 db $36, $60 db $39, $58 db $3B, $50 db $3C, $48 db $3C, $40 Func_705aa: ; 705aa (1c:45aa) ld hl, wWhichTrade ; $cd3d ld a, $10 ld [hli], a ld a, $3c ld [hli], a call Func_7077f ld [hl], a jp Func_70755 _DoFlyOrTeleportAwayGraphics: ; 705ba (1c:45ba) call Func_706ef call Func_70787 ld a, b and a jr z, .asm_705ef dec a jp nz, Func_7067d .asm_705c8 ld a, $9f call PlaySound ld hl, wWhichTrade ; $cd3d ld a, $f0 ld [hli], a ld a, $ec ld [hli], a call Func_7077f ld [hl], a call Func_70755 call Func_70787 ld a, b dec a jr z, .asm_705e9 ld c, $a call DelayFrames .asm_705e9 call GBFadeOut2 jp Func_70772 .asm_705ef ld a, $4 call StopMusic ld a, [$d732] bit 6, a jr z, .asm_70610 ld hl, wWhichTrade ; $cd3d ld a, $10 ld [hli], a ld a, $ff ld [hli], a xor a ld [hli], a ld [hl], $a1 ld hl, $cd48 call Func_70730 jr .asm_705c8 .asm_70610 call Func_706d7 ld hl, wWhichTrade ; $cd3d ld a, $ff ld [hli], a ld a, $8 ld [hli], a ld [hl], $c call Func_706ae ld a, $a4 call PlaySound ld hl, wWhichTrade ; $cd3d xor a ld [hli], a ld a, $c ld [hli], a ld [hl], $c ld de, FlyAnimationScreenCoords1 ; $464f call Func_706ae ld c, $28 call DelayFrames ld hl, $cd3e ld a, $b ld [hli], a ld [hl], $8 ld de, FlyAnimationScreenCoords2 ; $4667 call Func_706ae call GBFadeOut2 jp Func_70772 FlyAnimationScreenCoords1: ; 7064f (1c:464f) ; y, x pairs ; This is the sequence of screen coordinates used by the first part ; of the Fly overworld animation. db $3C, $48 db $3C, $50 db $3B, $58 db $3A, $60 db $39, $68 db $37, $70 db $37, $78 db $33, $80 db $30, $88 db $2D, $90 db $2A, $98 db $27, $A0 FlyAnimationScreenCoords2: ; 70667 (1c:4667) ; y, x pairs ; This is the sequence of screen coordinates used by the second part ; of the Fly overworld animation. db $1A, $90 db $19, $80 db $17, $70 db $15, $60 db $12, $50 db $0F, $40 db $0C, $30 db $09, $20 db $05, $10 db $00, $00 db $F0, $00 Func_7067d: ; 7067d (1c:467d) ld a, $ff ld [$cfcb], a ld a, [$c302] ld [$c30a], a ld a, [$c306] ld [$c30e], a ld a, $a0 ld [wOAMBuffer], a ld [$c304], a ld c, $2 call DelayFrames ld a, $a0 ld [$c308], a ld [$c30c], a call GBFadeOut2 ld a, $1 ld [$cfcb], a jp Func_70772 Func_706ae: ; 706ae (1c:46ae) ld a, [$cd3f] xor $1 ld [$cd3f], a ld [$c102], a call Delay3 ld a, [wWhichTrade] ; $cd3d cp $ff jr z, .asm_706cd ld hl, $c104 ld a, [de] inc de ld [hli], a inc hl ld a, [de] inc de ld [hl], a .asm_706cd ld a, [$cd3e] dec a ld [$cd3e], a jr nz, Func_706ae ret Func_706d7: ; 706d7 (1c:46d7) ld de, BirdSprite ; $4d80 ld hl, $8000 ld bc, (BANK(BirdSprite) << 8) + $0c call CopyVideoData ld de, BirdSprite + $c0 ; $4e40 ; moving amination sprite ld hl, $8800 ld bc, (BANK(BirdSprite) << 8) + $0c jp CopyVideoData Func_706ef: ; 706ef (1c:46ef) ld a, [$c102] ld [$cd50], a ld a, [$c104] ld [$cd4f], a ld hl, PlayerSpinningFacingOrder ; $4713 ld de, $cd48 ld bc, $4 call CopyData ld a, [$c102] ld hl, $cd48 .asm_7070d cp [hl] inc hl jr nz, .asm_7070d dec hl ret PlayerSpinningFacingOrder: ; 70713 (1c:4713) ; The order of the direction the player's sprite is facing when teleporting ; away. Creates a spinning effect. db $00, $08, $04, $0C ; down, left, up, right Func_70717: ; 70717 (1c:4717) ld a, [hl] ld [$c102], a push hl ld hl, $cd48 ld de, $cd47 ld bc, $4 call CopyData ld a, [$cd47] ld [$cd4b], a pop hl ret Func_70730: ; 70730 (1c:4730) call Func_70717 ld a, [wWhichTrade] ; $cd3d ld c, a and $3 jr nz, .asm_70743 ld a, [$cd40] cp $ff call nz, PlaySound .asm_70743 ld a, [$cd3e] add c ld [wWhichTrade], a ; $cd3d ld c, a ld a, [$cd3f] cp c ret z call DelayFrames jr Func_70730 Func_70755: ; 70755 (1c:4755) call Func_70717 ld a, [wWhichTrade] ; $cd3d ld c, a ld a, [$c104] add c ld [$c104], a ld c, a ld a, [$cd3e] cp c ret z ld a, [$cd3f] ld c, a call DelayFrames jr Func_70755 Func_70772: ; 70772 (1c:4772) ld a, [$cd4f] ld [$c104], a ld a, [$cd50] ld [$c102], a ret Func_7077f: ; 7077f (1c:477f) ld a, [$cf1b] xor $1 inc a inc a ret Func_70787: ; 70787 (1c:4787) ld b, $0 ld hl, DataTable_707a9 ; $47a9 ld a, [W_CURMAPTILESET] ; $d367 ld c, a .asm_70790 ld a, [hli] cp $ff jr z, .asm_707a4 cp c jr nz, .asm_7079e FuncCoord 8, 9 ; $c45c ld a, [Coord] cp [hl] jr z, .asm_707a2 .asm_7079e inc hl inc hl jr .asm_70790 .asm_707a2 inc hl ld b, [hl] .asm_707a4 ld a, b ld [$cd5b], a ret ; format: db tileset id, tile id, value to be put in $cd5b DataTable_707a9: ; 707a9 (1c:47a9) db $16,$20,$01 db $16,$11,$02 db $11,$22,$02 db $10,$55,$01 db $FF Func_707b6: ; 707b6 (1c:47b6) ld c, $a call DelayFrames ld hl, $d736 set 6, [hl] ld de, RedSprite ; $4180 ld hl, $8000 ld bc, (BANK(RedSprite) << 8) + $0c call CopyVideoData ld a, $4 ld hl, RedFishingTiles ; $4866 call Func_71771 ld a, [$c102] ld c, a ld b, $0 ld hl, FishingRodGfxProperties ; $4856 add hl, bc ld de, $c39c ld bc, $4 call CopyData ld c, $64 call DelayFrames ld a, [wWhichTrade] ; $cd3d and a ld hl, UnnamedText_70847 ; $4847 jr z, .asm_70836 cp $2 ld hl, UnnamedText_7084c ; $484c jr z, .asm_70836 ld b, $a .asm_707fe ld hl, $c104 call Func_70842 ld hl, $c39c call Func_70842 call Delay3 dec b jr nz, .asm_707fe ld a, [$c102] cp $4 jr nz, .asm_7081c ld a, $a0 ld [$c39c], a .asm_7081c ld hl, $cd4f xor a ld [hli], a ld [hl], a ld a, $4c call Predef ; indirect jump to Func_17c47 (17c47 (5:7c47)) ld a, [$c102] cp $4 jr nz, .asm_70833 ld a, $44 ld [$c39c], a .asm_70833 ld hl, UnnamedText_70851 ; $4851 .asm_70836 call PrintText ld hl, $d736 res 6, [hl] call LoadFontTilePatterns ret Func_70842: ; 70842 (1c:4842) ld a, [hl] xor $1 ld [hl], a ret UnnamedText_70847: ; 70847 (1c:4847) TX_FAR _UnnamedText_70847 db "@" UnnamedText_7084c: ; 7084c (1c:484c) TX_FAR _UnnamedText_7084c db "@" UnnamedText_70851: ; 70851 (1c:4851) TX_FAR _UnnamedText_70851 db "@" FishingRodGfxProperties: ; 70856 (1c:4856) ; specicies how the fishing rod should be drawn on the screen ; first byte = screen y coordinate ; second byte = screen x coordinate ; third byte = tile number ; fourth byte = sprite properties db $5B, $4C, $FD, $00 ; player facing down db $44, $4C, $FD, $00 ; player facing up db $50, $40, $FE, $00 ; player facing left db $50, $58, $FE, $20 ; player facing right ($20 means "horizontally flip the tile") RedFishingTiles: ; 70866 (1c:4866) dw RedFishingTilesFront db $02, $1E dw $8020 dw RedFishingTilesBack db $02, $1E dw $8060 dw RedFishingTilesSide db $02, $1E dw $80A0 dw RedFishingRodTiles db $03, $1E dw $8FD0 _HandleMidJump: ; 7087e (1c:487e) ld a, [$d714] ld c, a inc a cp $10 jr nc, .asm_70895 ld [$d714], a ld b, $0 ld hl, PlayerJumpingYScreenCoords ; $48ba add hl, bc ld a, [hl] ld [$c104], a ; player's sprite y coordinate ret .asm_70895 ld a, [wWalkCounter] ; $cfc5 cp $0 ret nz call UpdateSprites call Delay3 xor a ld [H_CURRENTPRESSEDBUTTONS], a ld [H_NEWLYPRESSEDBUTTONS], a ld [H_NEWLYRELEASEDBUTTONS], a ld [$d714], a ld hl, $d736 res 6, [hl] ld hl, $d730 res 7, [hl] xor a ld [wJoypadForbiddenButtonsMask], a ret PlayerJumpingYScreenCoords: ; 708ba (1c:48ba) ; Sequence of y screen coordinates for player's sprite when jumping over a ledge. db $38, $36, $34, $32, $31, $30, $30, $30, $31, $32, $33, $34, $36, $38, $3C, $3C Func_708ca: ; 708ca (1c:48ca) ld a, $e4 ld [rOBP1], a ; $FF00+$49 call Func_7092a FuncCoord 12, 0 ; $c3ac ld hl, Coord ld bc, $707 call ClearScreenArea call Delay3 xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld a, $91 ld [$cee9], a ld a, $1 ld [H_WHOSETURN], a ; $FF00+$f3 ld hl, Func_79793 ld b, BANK(Func_79793) call Bankswitch ld d, $80 call Func_704f3 .asm_708f6 ld c, $a call DelayFrames ld a, [rOBP1] ; $FF00+$49 sla a sla a ld [rOBP1], a ; $FF00+$49 jr nz, .asm_708f6 call CleanLCD_OAM call Func_7092a ld b, $e4 .asm_7090d ld c, $a call DelayFrames ld a, [rOBP1] ; $FF00+$49 srl b rra srl b rra ld [rOBP1], a ; $FF00+$49 ld a, b and a jr nz, .asm_7090d ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba call Delay3 jp CleanLCD_OAM Func_7092a: ; 7092a (1c:492a) ld de, $9000 ld hl, $8000 ld bc, $31 call CopyVideoData ld a, $10 ld [W_BASECOORDY], a ; $d082 ld a, $70 ld [W_BASECOORDX], a ; $d081 ld hl, wOAMBuffer ld bc, $606 ld d, $8 .asm_70948 push bc ld a, [W_BASECOORDY] ; $d082 ld e, a .asm_7094d ld a, e add $8 ld e, a ld [hli], a ld a, [W_BASECOORDX] ; $d081 ld [hli], a ld a, d ld [hli], a ld a, $10 ld [hli], a inc d dec c jr nz, .asm_7094d inc d ld a, [W_BASECOORDX] ; $d081 add $8 ld [W_BASECOORDX], a ; $d081 pop bc dec b jr nz, .asm_70948 ret Func_7096d: ; 7096d (1c:496d) ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba call Delay3 xor a ld [$FF00+$b0], a dec a ld [$cfcb], a call DelayFrame ld hl, $c102 ld a, [H_DOWNARROWBLINKCNT2] ; $FF00+$8c ld c, a ld b, $0 ld de, $10 .asm_70989 ld a, [hl] cp $ff jr z, .asm_7098f inc b .asm_7098f add hl, de dec c jr nz, .asm_70989 ld hl, $c310 ld c, $9 .asm_70998 ld a, b swap a cp l jr z, .asm_709a9 push hl push bc ld bc, $10 xor a call FillMemory pop bc pop hl .asm_709a9 ld de, $10 add hl, de dec c jr nz, .asm_70998 call Delay3 call Func_70a4d ld bc, $0 ld a, [W_ISLINKBATTLE] ; $d12b cp $4 jr z, .asm_709c9 call Func_709e2 call Func_709ef call Func_70a19 .asm_709c9 ld hl, PointerTable_709d2 ; $49d2 add hl, bc add hl, bc ld a, [hli] ld h, [hl] ld l, a jp [hl] PointerTable_709d2: ; 709d2 (1c:49d2) dw Func_70d24 dw Func_70a72 dw Func_70ce4 dw Func_70a72 dw Func_70cb4 dw Func_70b7f dw Func_70c7e dw Func_70bca Func_709e2: ; 709e2 (1c:49e2) ld a, [W_CUROPPONENT] ; $d059 cp $c8 jr nc, .asm_709ec res 0, c ret .asm_709ec set 0, c ret Func_709ef: ; 709ef (1c:49ef) ld hl, W_PARTYMON1_HP ; $d16c .asm_709f2 ld a, [hli] or [hl] jr nz, .asm_709fc ld de, $2b add hl, de jr .asm_709f2 .asm_709fc ld de, $1f add hl, de ld a, [hl] add $3 ld e, a ld a, [W_CURENEMYLVL] ; $d127 sub e jr nc, .asm_70a12 res 1, c ld a, $1 ld [$cd47], a ret .asm_70a12 set 1, c xor a ld [$cd47], a ret Func_70a19: ; 70a19 (1c:4a19) ld a, [W_CURMAP] ; $d35e ld e, a ld hl, MapIDList_70a3f ; $4a3f .asm_70a20 ld a, [hli] cp $ff jr z, .asm_70a2b cp e jr nz, .asm_70a20 .asm_70a28 set 2, c ret .asm_70a2b ld hl, MapIDList_70a44 ; $4a44 .asm_70a2e ld a, [hli] cp $ff jr z, .asm_70a3c ld d, a ld a, [hli] cp e jr c, .asm_70a2e ld a, e cp d jr nc, .asm_70a28 .asm_70a3c res 2, c ret ; Func_70a19 checks if W_CURMAP is equal to one of these maps MapIDList_70a3f: ; 70a3f (1c:4a3f) db VIRIDIAN_FOREST db ROCK_TUNNEL_1 db SEAFOAM_ISLANDS_1 db ROCK_TUNNEL_2 db $FF ; Func_70a19 checks if W_CURMAP is in between or equal to each pair of maps MapIDList_70a44: ; 70a44 (1c:4a44) ; all MT_MOON maps db MT_MOON_1 db MT_MOON_3 ; all SS_ANNE maps, VICTORY_ROAD_1, LANCES_ROOM, and HALL_OF_FAME db SS_ANNE_1 db HALL_OF_FAME ; all POKEMONTOWER maps and Lavender Town buildings db LAVENDER_POKECENTER db LAVENDER_HOUSE_2 ; all SILPH_CO, MANSION, SAFARI_ZONE, and UNKNOWN_DUNGEON maps, ; except for SILPH_CO_1F db SILPH_CO_2F db UNKNOWN_DUNGEON_1 db $FF Func_70a4d: ; 70a4d (1c:4a4d) ld hl, $8ff0 ld de, BattleTransitionTile ; $4a59 ld bc, (BANK(BattleTransitionTile) << 8) + $01 jp CopyVideoData BattleTransitionTile: ; 70a59 (1c:4a59) INCBIN "gfx/battle_transition.2bpp" Func_70a69: ; 70a69 (1c:4a69) ld a, $ff ld [rBGP], a ; $FF00+$47 ld [rOBP0], a ; $FF00+$48 ld [rOBP1], a ; $FF00+$49 ret Func_70a72: ; 70a72 (1c:4a72) ld a, [$cd47] and a jr z, .asm_70a7d call Func_70aaa jr .asm_70a9f .asm_70a7d FuncCoord 10, 10 ; $c472 ld hl, Coord ld a, $3 ld [$d09f], a ld a, l ld [$d09b], a ld a, h ld [$d09a], a ld b, $78 .asm_70a8f ld c, $3 .asm_70a91 push bc call Func_70af9 pop bc dec c jr nz, .asm_70a91 call DelayFrame dec b jr nz, .asm_70a8f .asm_70a9f call Func_70a69 xor a ld [$d09b], a ld [$d09a], a ret Func_70aaa: ; 70aaa (1c:4aaa) ld a, $7 ld [wWhichTrade], a ; $cd3d ld hl, wTileMap ld c, $11 ld de, $14 call Func_70ae0 inc c jr .asm_70ac3 .asm_70abd ld de, $14 call Func_70ae0 .asm_70ac3 inc c ld de, $1 call Func_70ae0 dec c dec c ld de, $ffec call Func_70ae0 inc c ld de, rIE ; $ffff call Func_70ae0 dec c dec c ld a, c and a jr nz, .asm_70abd ret Func_70ae0: ; 70ae0 (1c:4ae0) push bc .asm_70ae1 ld [hl], $ff add hl, de push bc ld a, [wWhichTrade] ; $cd3d dec a jr nz, .asm_70af0 call Func_70d19 ld a, $7 .asm_70af0 ld [wWhichTrade], a ; $cd3d pop bc dec c jr nz, .asm_70ae1 pop bc ret Func_70af9: ; 70af9 (1c:4af9) ld bc, $ffec ld de, $14 ld a, [$d09b] ld l, a ld a, [$d09a] ld h, a ld a, [$d09f] cp $0 jr z, .asm_70b25 cp $1 jr z, .asm_70b2f cp $2 jr z, .asm_70b39 cp $3 jr z, .asm_70b43 .asm_70b1a ld [hl], $ff .asm_70b1c ld a, l ld [$d09b], a ld a, h ld [$d09a], a ret .asm_70b25 dec hl ld a, [hl] cp $ff jr nz, .asm_70b4d inc hl add hl, bc jr .asm_70b1a .asm_70b2f add hl, de ld a, [hl] cp $ff jr nz, .asm_70b4d add hl, bc dec hl jr .asm_70b1a .asm_70b39 inc hl ld a, [hl] cp $ff jr nz, .asm_70b4d dec hl add hl, de jr .asm_70b1a .asm_70b43 add hl, bc ld a, [hl] cp $ff jr nz, .asm_70b4d add hl, de inc hl jr .asm_70b1a .asm_70b4d ld [hl], $ff ld a, [$d09f] inc a cp $4 jr nz, .asm_70b58 xor a .asm_70b58 ld [$d09f], a jr .asm_70b1c Func_70b5d: ; 70b5d (1c:4b5d) ld hl, DataTable_70b72 ; $4b72 .asm_70b60 ld a, [hli] cp $1 jr z, .asm_70b6e ld [rBGP], a ; $FF00+$47 ld c, $2 call DelayFrames jr .asm_70b60 .asm_70b6e dec b jr nz, Func_70b5d ret DataTable_70b72: ; 70b72 (1c:4b72) db $F9,$FE,$FF,$FE,$F9,$E4,$90,$40,$00,$40,$90,$E4 db $01 ; terminator Func_70b7f: ; 70b7f (1c:4b7f) ld c, $9 .asm_70b81 push bc xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba FuncCoord 0, 7 ; $c42c ld hl, Coord FuncCoord 0, 8 ; $c440 ld de, Coord ld bc, $ffd8 call Func_70c12 FuncCoord 0, 10 ; $c468 ld hl, Coord FuncCoord 0, 9 ; $c454 ld de, Coord ld bc, $28 call Func_70c12 FuncCoord 8, 0 ; $c3a8 ld hl, Coord FuncCoord 9, 0 ; $c3a9 ld de, Coord ld bc, $fffe call Func_70c3f FuncCoord 11, 0 ; $c3ab ld hl, Coord FuncCoord 10, 0 ; $c3aa ld de, Coord ld bc, $2 call Func_70c3f ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld c, $6 call DelayFrames pop bc dec c jr nz, .asm_70b81 call Func_70a69 ld c, $a jp DelayFrames Func_70bca: ; 70bca (1c:4bca) ld c, $9 xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba .asm_70bcf push bc FuncCoord 0, 16 ; $c4e0 ld hl, Coord FuncCoord 0, 17 ; $c4f4 ld de, Coord ld bc, $ffd8 call Func_70c12 FuncCoord 0, 1 ; $c3b4 ld hl, Coord ld de, wTileMap ld bc, $28 call Func_70c12 FuncCoord 18, 0 ; $c3b2 ld hl, Coord FuncCoord 19, 0 ; $c3b3 ld de, Coord ld bc, $fffe call Func_70c3f FuncCoord 1, 0 ; $c3a1 ld hl, Coord ld de, wTileMap ld bc, $2 call Func_70c3f call Func_70d19 call Delay3 pop bc dec c jr nz, .asm_70bcf call Func_70a69 ld c, $a jp DelayFrames Func_70c12: ; 70c12 (1c:4c12) ld a, c ld [wWhichTrade], a ; $cd3d ld a, b ld [$cd3e], a ld c, $8 .asm_70c1c push bc push hl push de ld bc, $14 call CopyData pop hl pop de ld a, [wWhichTrade] ; $cd3d ld c, a ld a, [$cd3e] ld b, a add hl, bc pop bc dec c jr nz, .asm_70c1c ld l, e ld h, d ld a, $ff ld c, $14 .asm_70c3a ld [hli], a dec c jr nz, .asm_70c3a ret Func_70c3f: ; 70c3f (1c:4c3f) ld a, c ld [wWhichTrade], a ; $cd3d ld a, b ld [$cd3e], a ld c, $9 .asm_70c49 push bc push hl push de ld c, $12 .asm_70c4e ld a, [hl] ld [de], a ld a, e add $14 jr nc, .asm_70c56 inc d .asm_70c56 ld e, a ld a, l add $14 jr nc, .asm_70c5d inc h .asm_70c5d ld l, a dec c jr nz, .asm_70c4e pop hl pop de ld a, [wWhichTrade] ; $cd3d ld c, a ld a, [$cd3e] ld b, a add hl, bc pop bc dec c jr nz, .asm_70c49 ld l, e ld h, d ld de, $14 ld c, $12 .asm_70c77 ld [hl], $ff add hl, de dec c jr nz, .asm_70c77 ret Func_70c7e: ; 70c7e (1c:4c7e) ld c, $12 ld hl, wTileMap FuncCoord 1, 17 ; $c4f5 ld de, Coord xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba .asm_70c89 push bc push hl push de push de call Func_70caa pop hl call Func_70caa call Func_70d19 pop hl ld bc, $ffec add hl, bc ld e, l ld d, h pop hl ld bc, $14 add hl, bc pop bc dec c jr nz, .asm_70c89 jp Func_70a69 Func_70caa: ; 70caa (1c:4caa) ld c, $a .asm_70cac ld [hl], $ff inc hl inc hl dec c jr nz, .asm_70cac ret Func_70cb4: ; 70cb4 (1c:4cb4) ld c, $14 ld hl, wTileMap FuncCoord 19, 1 ; $c3c7 ld de, Coord xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba .asm_70cbf push bc push hl push de push de call Func_70cd8 pop hl call Func_70cd8 call Func_70d19 pop de pop hl pop bc inc hl dec de dec c jr nz, .asm_70cbf jp Func_70a69 Func_70cd8: ; 70cd8 (1c:4cd8) ld c, $9 ld de, $28 .asm_70cdd ld [hl], $ff add hl, de dec c jr nz, .asm_70cdd ret Func_70ce4: ; 70ce4 (1c:4ce4) call Func_70cfd ld bc, $000a ld hl, Unknown_70d61 call Func_70d06 ld c, $a ld b, $1 ld hl, Unknown_70d93 call Func_70d06 jp Func_70a69 Func_70cfd: ; 70cfd (1c:4cfd) ld b, $3 call Func_70b5d xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ret Func_70d06: ; 70d06 (1c:4d06) push bc push hl ld a, b call Func_70d50 pop hl ld bc, $0005 add hl, bc call Func_70d19 pop bc dec c jr nz, Func_70d06 ret Func_70d19: ; 70d19 (1c:4d19) ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba call Delay3 xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ret Func_70d24: ; 70d24 (1c:4d24) call Func_70cfd ld c, $a ld hl, Unknown_70d61 ; $4d61 ld de, Unknown_70d93 ; $4d93 .asm_70d2f push bc push hl push de push de xor a call Func_70d50 pop hl ld a, $1 call Func_70d50 pop hl ld bc, $5 add hl, bc ld e, l ld d, h pop hl add hl, bc call Func_70d19 pop bc dec c jr nz, .asm_70d2f jp Func_70a69 Func_70d50: ; 70d50 (1c:4d50) ld [wWhichTrade], a ; $cd3d ld a, [hli] ld [$cd3e], a ld a, [hli] ld e, a ld a, [hli] ld d, a ld a, [hli] ld h, [hl] ld l, a jp Func_70dc5 Unknown_70d61: ; 70d61 (1c:4d61) db $01 dw Unknown_70dfe FuncCoord 18, 6 dw Coord db $01 dw Unknown_70e04 FuncCoord 19, 3 dw Coord db $01 dw Unknown_70e0e FuncCoord 18, 0 dw Coord db $01 dw Unknown_70e20 FuncCoord 14, 0 dw Coord db $01 dw Unknown_70e2e FuncCoord 10, 0 dw Coord db $00 dw Unknown_70e2e FuncCoord 9, 0 dw Coord db $00 dw Unknown_70e20 FuncCoord 5, 0 dw Coord db $00 dw Unknown_70e0e FuncCoord 1, 0 dw Coord db $00 dw Unknown_70e04 FuncCoord 0, 3 dw Coord db $00 dw Unknown_70dfe FuncCoord 1, 6 dw Coord Unknown_70d93: ; 70d93 (1c:4d93) db $00 dw Unknown_70dfe FuncCoord 1, 11 dw Coord db $00 dw Unknown_70e04 FuncCoord 0, 14 dw Coord db $00 dw Unknown_70e0e FuncCoord 1, 17 dw Coord db $00 dw Unknown_70e20 FuncCoord 5, 17 dw Coord db $00 dw Unknown_70e2e FuncCoord 9, 17 dw Coord db $01 dw Unknown_70e2e FuncCoord 10, 17 dw Coord db $01 dw Unknown_70e20 FuncCoord 14, 17 dw Coord db $01 dw Unknown_70e0e FuncCoord 18, 17 dw Coord db $01 dw Unknown_70e04 FuncCoord 19, 14 dw Coord db $01 dw Unknown_70dfe FuncCoord 18, 11 dw Coord Func_70dc5: ; 70dc5 (1c:4dc5) push hl ld a, [de] ld c, a inc de .asm_70dc9 ld [hl], $ff ld a, [$cd3e] and a jr z, .asm_70dd4 inc hl jr .asm_70dd5 .asm_70dd4 dec hl .asm_70dd5 dec c jr nz, .asm_70dc9 pop hl ld a, [wWhichTrade] ; $cd3d and a ld bc, $14 jr z, .asm_70de5 ld bc, $ffec .asm_70de5 add hl, bc ld a, [de] inc de cp $ff ret z and a jr z, Func_70dc5 ld c, a .asm_70def ld a, [$cd3e] and a jr z, .asm_70df8 dec hl jr .asm_70df9 .asm_70df8 inc hl .asm_70df9 dec c jr nz, .asm_70def jr Func_70dc5 Unknown_70dfe: ; 70dfe (1c:4dfe) db $02,$03,$05,$04,$09,$FF Unknown_70e04: ; 70e04 (1c:4e04) db $01,$01,$02,$02,$04,$02,$04,$02,$03,$FF Unknown_70e0e: ; 70e0e (1c:4e0e) db $02,$01,$03,$01,$04,$01,$04,$01,$04,$01,$03,$01,$02,$01,$01,$01,$01,$FF Unknown_70e20: ; 70e20 (1c:4e20) db $04,$01,$04,$00,$03,$01,$03,$00,$02,$01,$02,$00,$01,$FF Unknown_70e2e: ; 70e2e (1c:4e2e) db $04,$00,$03,$00,$03,$00,$02,$00,$02,$00,$01,$00,$01,$00,$01,$FF DisplayTownMap: ; 70e3e (1c:4e3e) call Func_7109b ld hl, $cfcb ld a, [hl] push af ld [hl], $ff push hl ld a, $1 ld [$FF00+$b7], a ld a, [W_CURMAP] ; $d35e push af ld b, $0 call Func_711c4 FuncCoord 1, 0 ; $c3a1 ld hl, Coord ld de, $cd6d call PlaceString ld hl, wOAMBuffer ld de, wTileMapBackup ld bc, $10 call CopyData ld hl, $8040 ld de, TownMapCursor ; $4f40 ld bc, (BANK(TownMapCursor) << 8) + $04 call CopyVideoDataDouble xor a ld [wWhichTrade], a ; $cd3d pop af jr Func_70e92 Func_70e7e: ; 70e7e (1c:4e7e) ld hl, wTileMap ld bc, $114 call ClearScreenArea ld hl, TownMapOrder ; $4f11 ld a, [wWhichTrade] ; $cd3d ld c, a ld b, $0 add hl, bc ld a, [hl] Func_70e92: ; 70e92 (1c:4e92) ld de, $cee9 call Func_712f1 ld a, [de] push hl call Func_71258 ld a, $4 ld [$cd5b], a ld hl, $c310 call Func_71279 pop hl ld de, $cd6d .asm_70eac ld a, [hli] ld [de], a inc de cp $50 jr nz, .asm_70eac FuncCoord 1, 0 ; $c3a1 ld hl, Coord ld de, $cd6d call PlaceString ld hl, $c310 ld de, $c518 ld bc, $10 call CopyData .asm_70ec8 call Func_716c6 call GetJoypadStateLowSensitivity ld a, [$FF00+$b5] ld b, a and $c3 jr z, .asm_70ec8 ld a, $8c call PlaySound bit 6, b jr nz, .asm_70ef2 bit 7, b jr nz, .asm_70f01 xor a ld [$d09b], a ld [$FF00+$b7], a ld [W_SUBANIMTRANSFORM], a ; $d08b call Func_711ab pop hl pop af ld [hl], a ret .asm_70ef2 ld a, [wWhichTrade] ; $cd3d inc a cp $2f jr nz, .asm_70efb xor a .asm_70efb ld [wWhichTrade], a ; $cd3d jp Func_70e7e .asm_70f01 ld a, [wWhichTrade] ; $cd3d dec a cp $ff jr nz, .asm_70f0b ld a, $2e .asm_70f0b ld [wWhichTrade], a ; $cd3d jp Func_70e7e TownMapOrder: ; 70f11 (1c:4f11) db PALLET_TOWN db ROUTE_1 db VIRIDIAN_CITY db ROUTE_2 db VIRIDIAN_FOREST db DIGLETTS_CAVE db PEWTER_CITY db ROUTE_3 db MT_MOON_1 db ROUTE_4 db CERULEAN_CITY db ROUTE_24 db ROUTE_25 db BILLS_HOUSE db ROUTE_5 db ROUTE_6 db VERMILION_CITY db SS_ANNE_1 db ROUTE_9 db ROCK_TUNNEL_POKECENTER db ROUTE_10 db LAVENDER_TOWN db POKEMONTOWER_2 db ROUTE_8 db ROUTE_7 db CELADON_CITY db SAFFRON_CITY db ROUTE_11 db ROUTE_12 db ROUTE_13 db ROUTE_14 db ROUTE_15 db ROUTE_16 db ROUTE_17 db ROUTE_18 db FUCHSIA_CITY db SAFARI_ZONE_EAST db ROUTE_19 db SEAFOAM_ISLANDS_2 db ROUTE_20 db CINNABAR_ISLAND db ROUTE_21 db ROUTE_22 db ROUTE_23 db VICTORY_ROAD_3 db INDIGO_PLATEAU db POWER_PLANT TownMapCursor: ; 70f40 (1c:4f40) INCBIN "gfx/town_map_cursor.1bpp" Func_70f60: ; 70f60 (1c:4f60) call Func_7109b ld hl, $cfcb ld a, [hl] push af ld [hl], $ff push hl call Func_711ef call GetMonName FuncCoord 1, 0 ; $c3a1 ld hl, Coord call PlaceString ld h, b ld l, c ld de, MonsNestText ; $4f89 call PlaceString call WaitForTextScrollButtonPress call Func_711ab pop hl pop af ld [hl], a ret MonsNestText: ; 70f89 (1c:4f89) db "'s NEST@" Func_70f90: ; 70f90 (1c:4f90) call CleanLCD_OAM call Func_7109b call LoadPlayerSpriteGraphics call LoadFontTilePatterns ld de, BirdSprite ; $4d80 ld hl, $8040 ld bc, (BANK(BirdSprite) << 8) + $0c call CopyVideoData ld de, TownMapUpArrow ; $5093 ld hl, $8ed0 ld bc, (BANK(TownMapUpArrow) << 8) + $01 call CopyVideoDataDouble call Func_71070 ld hl, $cfcb ld a, [hl] push af ld [hl], $ff push hl ld hl, wTileMap ld de, ToText ; $506d call PlaceString ld a, [W_CURMAP] ; $d35e ld b, $0 call Func_711c4 ld hl, $cd3e FuncCoord 18, 0 ; $c3b2 ld de, Coord Func_70fd6: ; 70fd6 (1c:4fd6) ld a, $7f ld [de], a push hl push hl FuncCoord 3, 0 ; $c3a3 ld hl, Coord ld bc, $10f call ClearScreenArea pop hl ld a, [hl] ld b, $4 call Func_711c4 FuncCoord 3, 0 ; $c3a3 ld hl, Coord ld de, $cd6d call PlaceString ld c, $f call DelayFrames FuncCoord 18, 0 ; $c3b2 ld hl, Coord ld [hl], $ed FuncCoord 19, 0 ; $c3b3 ld hl, Coord ld [hl], $ee pop hl .asm_71004 push hl call DelayFrame call GetJoypadStateLowSensitivity ld a, [$FF00+$b5] ld b, a pop hl and $c3 jr z, .asm_71004 bit 0, b jr nz, .asm_71026 ld a, $8c call PlaySound bit 6, b jr nz, .asm_71042 bit 7, b jr nz, .asm_71058 jr .asm_71037 .asm_71026 ld a, $8e call PlaySound ld a, [hl] ld [$d71a], a ld hl, $d732 set 3, [hl] inc hl set 7, [hl] .asm_71037 xor a ld [$d09b], a call GBPalWhiteOutWithDelay3 pop hl pop af ld [hl], a ret .asm_71042 FuncCoord 18, 0 ; $c3b2 ld de, Coord inc hl ld a, [hl] cp $ff jr z, .asm_71052 cp $fe jr z, .asm_71042 jp Func_70fd6 .asm_71052 ld hl, $cd3e jp Func_70fd6 .asm_71058 FuncCoord 19, 0 ; $c3b3 ld de, Coord dec hl ld a, [hl] cp $ff jr z, .asm_71068 cp $fe jr z, .asm_71058 jp Func_70fd6 .asm_71068 ld hl, $cd49 jr .asm_71058 ToText: ; 7106d (1c:506d) db "To@" Func_71070: ; 71070 (1c:5070) ld hl, wWhichTrade ; $cd3d ld [hl], $ff inc hl ld a, [$d70b] ld e, a ld a, [$d70c] ld d, a ld bc, $b .asm_71081 srl d rr e ld a, $fe jr nc, .asm_7108a ld a, b .asm_7108a ld [hl], a inc hl inc b dec c jr nz, .asm_71081 ld [hl], $ff ret TownMapUpArrow: ; 71093 (1c:5093) INCBIN "gfx/up_arrow.1bpp" Func_7109b: ; 7109b (1c:509b) call GBPalWhiteOutWithDelay3 call ClearScreen call UpdateSprites ld hl, wTileMap ld b, $12 ld c, $12 call TextBoxBorder call DisableLCD ld hl, WorldMapTileGraphics ; $65a8 ld de, $9600 ld bc, $100 ld a, BANK(WorldMapTileGraphics) call FarCopyData2 ld hl, MonNestIcon ; $56be ld de, $8040 ld bc, $8 ld a, BANK(MonNestIcon) call FarCopyDataDouble ld hl, wTileMap ld de, CompressedMap ; $5100 .asm_710d3 ld a, [de] and a jr z, .asm_710e9 ld b, a and $f ld c, a ld a, b swap a and $f add $60 .asm_710e2 ld [hli], a dec c jr nz, .asm_710e2 inc de jr .asm_710d3 .asm_710e9 call EnableLCD ld b, $2 call GoPAL_SET call Delay3 call GBPalNormal xor a ld [W_SUBANIMTRANSFORM], a ; $d08b inc a ld [$d09b], a ret CompressedMap: ; 71100 (1c:5100) ; you can decompress this file with the redrle program in the extras/ dir INCBIN "gfx/town_map.rle" Func_711ab: ; 711ab (1c:51ab) xor a ld [$d09b], a call GBPalWhiteOut call ClearScreen call CleanLCD_OAM call LoadPlayerSpriteGraphics call LoadFontTilePatterns call UpdateSprites jp GoPAL_SET_CF1C Func_711c4: ; 711c4 (1c:51c4) push af ld a, b ld [$cd5b], a pop af ld de, $cee9 call Func_712f1 ld a, [de] push hl call Func_71258 call Func_7126d pop hl ld de, $cd6d .asm_711dc ld a, [hli] ld [de], a inc de cp $50 jr nz, .asm_711dc ld hl, wOAMBuffer ld de, wTileMapBackup ld bc, $a0 jp CopyData Func_711ef: ; 711ef (1c:51ef) ld b, BANK(Func_e9cb) ld hl, Func_e9cb call Bankswitch call Func_712d9 ld hl, wOAMBuffer ld de, $cee9 .asm_71200 ld a, [de] cp $ff jr z, .asm_7121d and a jr z, .asm_7121a push hl call Func_712f1 pop hl ld a, [de] cp $19 jr z, .asm_7121a call Func_71258 ld a, $4 ld [hli], a xor a ld [hli], a .asm_7121a inc de jr .asm_71200 .asm_7121d ld a, l and a jr nz, .asm_71236 FuncCoord 1, 7 ; $c42d ld hl, Coord ld b, $2 ld c, $f call TextBoxBorder FuncCoord 2, 9 ; $c456 ld hl, Coord ld de, AreaUnknownText ; $524a call PlaceString jr .asm_7123e .asm_71236 ld a, [W_CURMAP] ; $d35e ld b, $0 call Func_711c4 .asm_7123e ld hl, wOAMBuffer ld de, wTileMapBackup ld bc, $a0 jp CopyData AreaUnknownText: ; 7124a (1c:524a) db " AREA UNKNOWN@" Func_71258: ; 71258 (1c:5258) push af and $f0 srl a add $18 ld b, a ld [hli], a pop af and $f swap a srl a add $18 ld c, a ld [hli], a ret Func_7126d: ; 7126d (1c:526d) ld a, [$cd5b] and a ld hl, $c390 jr z, Func_71279 ld hl, $c380 Func_71279: ; 71279 (1c:5279) push hl ld hl, $fcfc add hl, bc ld b, h ld c, l pop hl Func_71281: ; 71281 (1c:5281) ld de, $202 .asm_71284 push de push bc .asm_71286 ld a, b ld [hli], a ld a, c ld [hli], a ld a, [$cd5b] ld [hli], a inc a ld [$cd5b], a xor a ld [hli], a inc d ld a, $8 add c ld c, a dec e jr nz, .asm_71286 pop bc pop de ld a, $8 add b ld b, a dec d jr nz, .asm_71284 ret Func_712a6: ; 712a6 (1c:52a6) xor a ld [$cd5c], a ld de, $202 .asm_712ad push de push bc .asm_712af ld a, b ld [hli], a ld a, c ld [hli], a ld a, [$cd5b] ld [hli], a ld a, [$cd5c] ld [hli], a xor $20 ld [$cd5c], a inc d ld a, $8 add c ld c, a dec e jr nz, .asm_712af pop bc pop de push hl ld hl, $cd5b inc [hl] inc [hl] pop hl ld a, $8 add b ld b, a dec d jr nz, .asm_712ad ret Func_712d9: ; 712d9 (1c:52d9) ld de, $cee9 .asm_712dc ld a, [de] inc de cp $ff ret z ld c, a ld l, e ld h, d .asm_712e4 ld a, [hl] cp $ff jr z, .asm_712dc cp c jr nz, .asm_712ee xor a ld [hl], a .asm_712ee inc hl jr .asm_712e4 Func_712f1: ; 712f1 (1c:52f1) cp REDS_HOUSE_1F jr c, .asm_71304 ld bc, $4 ld hl, InternalMapEntries ; $5382 .asm_712fb cp [hl] jr c, .asm_71301 add hl, bc jr .asm_712fb .asm_71301 inc hl jr .asm_7130d .asm_71304 ld hl, ExternalMapEntries ; $5313 ld c, a ld b, $0 add hl, bc add hl, bc add hl, bc .asm_7130d ld a, [hli] ld [de], a ld a, [hli] ld h, [hl] ld l, a ret ExternalMapEntries: ; 71313 (1c:5313) EMAP $2,$B,PalletTownName EMAP $2,$8,ViridianCityName EMAP $2,$3,PewterCityName EMAP $A,$2,CeruleanCityName EMAP $E,$5,LavenderTownName EMAP $A,$9,VermilionCityName EMAP $7,$5,CeladonCityName EMAP $8,$D,FuchsiaCityName EMAP $2,$F,CinnabarIslandName EMAP $0,$2,IndigoPlateauName EMAP $A,$5,SaffronCityName EMAP $0,$0,PalletTownName ; unused EMAP $2,$A,Route1Name EMAP $2,$6,Route2Name EMAP $4,$3,Route3Name EMAP $8,$2,Route4Name EMAP $A,$3,Route5Name EMAP $A,$8,Route6Name EMAP $8,$5,Route7Name EMAP $D,$5,Route8Name EMAP $D,$2,Route9Name EMAP $E,$4,Route10Name EMAP $C,$9,Route11Name EMAP $E,$9,Route12Name EMAP $D,$B,Route13Name EMAP $B,$C,Route14Name EMAP $A,$D,Route15Name EMAP $5,$5,Route16Name EMAP $4,$8,Route17Name EMAP $6,$D,Route18Name EMAP $6,$F,Route19Name EMAP $4,$F,Route20Name EMAP $2,$D,Route21Name EMAP $0,$8,Route22Name EMAP $0,$6,Route23Name EMAP $A,$1,Route24Name EMAP $B,$0,Route25Name InternalMapEntries: ; 71382 (1c:5382) IMAP $29,$2,$B,PalletTownName IMAP $2E,$2,$8,ViridianCityName IMAP $33,$2,$6,Route2Name IMAP $34,$2,$4,ViridianForestName IMAP $3B,$2,$3,PewterCityName IMAP $3E,$6,$2,MountMoonName IMAP $44,$A,$2,CeruleanCityName IMAP $45,$5,$2,Route4Name IMAP $46,$A,$2,CeruleanCityName IMAP $49,$A,$4,Route5Name IMAP $4C,$A,$6,Route6Name IMAP $4F,$9,$5,Route7Name IMAP $51,$B,$5,Route8Name IMAP $53,$E,$3,RockTunnelName IMAP $54,$F,$4,PowerPlantName IMAP $57,$D,$9,Route11Name IMAP $58,$E,$7,Route12Name IMAP $59,$C,$0,SeaCottageName IMAP $5F,$A,$9,VermilionCityName IMAP $69,$9,$A,SSAnneName IMAP $6D,$0,$4,VictoryRoadName IMAP $77,$0,$2,PokemonLeagueName IMAP $78,$A,$5,UndergroundPathName IMAP $79,$0,$2,PokemonLeagueName IMAP $7A,$A,$5,UndergroundPathName IMAP $8D,$7,$5,CeladonCityName IMAP $8E,$E,$5,LavenderTownName IMAP $95,$F,$5,PokemonTowerName IMAP $98,$E,$5,LavenderTownName IMAP $9C,$8,$D,FuchsiaCityName IMAP $9D,$8,$C,SafariZoneName IMAP $9F,$8,$D,FuchsiaCityName IMAP $A3,$5,$F,SeafoamIslandsName IMAP $A4,$A,$9,VermilionCityName IMAP $A5,$8,$D,FuchsiaCityName IMAP $A6,$2,$F,PokemonMansionName IMAP $AE,$2,$F,CinnabarIslandName IMAP $AF,$0,$2,IndigoPlateauName IMAP $B8,$A,$5,SaffronCityName IMAP $BA,$9,$D,Route15Name IMAP $BD,$4,$5,Route16Name IMAP $BE,$E,$A,Route12Name IMAP $C0,$7,$D,Route18Name IMAP $C1,$5,$F,SeafoamIslandsName IMAP $C2,$0,$7,Route22Name IMAP $C3,$0,$4,VictoryRoadName IMAP $C4,$E,$7,Route12Name IMAP $C5,$A,$9,VermilionCityName IMAP $C6,$3,$4,DiglettsCaveName IMAP $C7,$0,$4,VictoryRoadName IMAP $CF,$7,$5,RocketHQName IMAP $D6,$A,$5,SilphCoName IMAP $D9,$2,$F,PokemonMansionName IMAP $E2,$8,$C,SafariZoneName IMAP $E5,$9,$1,CeruleanCaveName IMAP $E6,$E,$5,LavenderTownName IMAP $E7,$A,$2,CeruleanCityName IMAP $E9,$E,$3,RockTunnelName IMAP $ED,$A,$5,SilphCoName IMAP $F8,$0,$2,PokemonLeagueName db $FF MapNames: ; 71473 (1c:5473) PalletTownName: ; 71473 (1c:5473) db "PALLET TOWN@" ViridianCityName: ; 7147f (1c:547f) db "VIRIDIAN CITY@" PewterCityName: ; 7148d (1c:548d) db "PEWTER CITY@" CeruleanCityName: ; 71499 (1c:5499) db "CERULEAN CITY@" LavenderTownName: ; 714a7 (1c:54a7) db "LAVENDER TOWN@" VermilionCityName: ; 714b5 (1c:54b5) db "VERMILION CITY@" CeladonCityName: ; 714c4 (1c:54c4) db "CELADON CITY@" FuchsiaCityName: ; 714d1 (1c:54d1) db "FUCHSIA CITY@" CinnabarIslandName: ; 714de (1c:54de) db "CINNABAR ISLAND@" IndigoPlateauName: ; 714ee (1c:54ee) db "INDIGO PLATEAU@" SaffronCityName: ; 714fd (1c:54fd) db "SAFFRON CITY@" Route1Name: ; 7150a (1c:550a) db "ROUTE 1@" Route2Name: ; 71512 (1c:5512) db "ROUTE 2@" Route3Name: ; 7151a (1c:551a) db "ROUTE 3@" Route4Name: ; 71522 (1c:5522) db "ROUTE 4@" Route5Name: ; 7152a (1c:552a) db "ROUTE 5@" Route6Name: ; 71532 (1c:5532) db "ROUTE 6@" Route7Name: ; 7153a (1c:553a) db "ROUTE 7@" Route8Name: ; 71542 (1c:5542) db "ROUTE 8@" Route9Name: ; 7154a (1c:554a) db "ROUTE 9@" Route10Name: ; 71552 (1c:5552) db "ROUTE 10@" Route11Name: ; 7155b (1c:555b) db "ROUTE 11@" Route12Name: ; 71564 (1c:5564) db "ROUTE 12@" Route13Name: ; 7156d (1c:556d) db "ROUTE 13@" Route14Name: ; 71576 (1c:5576) db "ROUTE 14@" Route15Name: ; 7157f (1c:557f) db "ROUTE 15@" Route16Name: ; 71588 (1c:5588) db "ROUTE 16@" Route17Name: ; 71591 (1c:5591) db "ROUTE 17@" Route18Name: ; 7159a (1c:559a) db "ROUTE 18@" Route19Name: ; 715a3 (1c:55a3) db "SEA ROUTE 19@" Route20Name: ; 715b0 (1c:55b0) db "SEA ROUTE 20@" Route21Name: ; 715bd (1c:55bd) db "SEA ROUTE 21@" Route22Name: ; 715ca (1c:55ca) db "ROUTE 22@" Route23Name: ; 715d3 (1c:55d3) db "ROUTE 23@" Route24Name: ; 715dc (1c:55dc) db "ROUTE 24@" Route25Name: ; 715e5 (1c:55e5) db "ROUTE 25@" ViridianForestName: ; 715ee (1c:55ee) db "VIRIDIAN FOREST@" MountMoonName: ; 715fe (1c:55fe) db "MT.MOON@" RockTunnelName: ; 71606 (1c:5606) db "ROCK TUNNEL@" SeaCottageName: ; 71612 (1c:5612) db "SEA COTTAGE@" SSAnneName: ; 7161e (1c:561e) db "S.S.ANNE@" PokemonLeagueName: ; 71627 (1c:5627) db "#MON LEAGUE@" UndergroundPathName: ; 71633 (1c:5633) db "UNDERGROUND PATH@" PokemonTowerName: ; 71644 (1c:5644) db "#MON TOWER@" SeafoamIslandsName: ; 7164f (1c:564f) db "SEAFOAM ISLANDS@" VictoryRoadName: ; 7165f (1c:565f) db "VICTORY ROAD@" DiglettsCaveName: ; 7166c (1c:566c) db "DIGLETT's CAVE@" RocketHQName: ; 7167a (1c:567a) db "ROCKET HQ@" SilphCoName: ; 71684 (1c:5684) db "SILPH CO.@" PokemonMansionName: ; 7168e (1c:568e) db $4a," MANSION@" SafariZoneName: ; 71698 (1c:5698) db "SAFARI ZONE@" CeruleanCaveName: ; 716a4 (1c:56a4) db "CERULEAN CAVE@" PowerPlantName: ; 716b2 (1c:56b2) db "POWER PLANT@" MonNestIcon: ; 716be (1c:56be) INCBIN "gfx/mon_nest_icon.1bpp" Func_716c6: ; 716c6 (1c:56c6) ld a, [W_SUBANIMTRANSFORM] ; $d08b inc a cp $19 jr z, .asm_716e1 cp $32 jr nz, .asm_716f1 ld hl, wTileMapBackup ld de, wOAMBuffer ld bc, $90 call CopyData xor a jr .asm_716f1 .asm_716e1 ld hl, wOAMBuffer ld b, $24 ld de, $4 .asm_716e9 ld [hl], $a0 add hl, de dec b jr nz, .asm_716e9 ld a, $19 .asm_716f1 ld [W_SUBANIMTRANSFORM], a ; $d08b jp DelayFrame Func_716f7: ; 716f7 (1c:56f7) xor a ld [wCurrentMenuItem], a ; $cc26 ld b, a inc a jr asm_7170a Func_716ff: ; 716ff (1c:56ff) ld hl, $cf1f ld a, [wCurrentMenuItem] ; $cc26 ld c, a ld b, $0 add hl, bc ld a, [hl] asm_7170a: ; 7170a (1c:570a) ld c, a ld hl, DataTable_71769 ; $5769 add hl, bc ld a, [$cf1b] xor $1 add [hl] ld c, a add a ld b, a ld a, [W_SUBANIMTRANSFORM] ; $d08b and a jr z, .asm_7172c cp c jr z, .asm_7173d .asm_71721 inc a cp b jr nz, .asm_71726 xor a .asm_71726 ld [W_SUBANIMTRANSFORM], a ; $d08b jp DelayFrame .asm_7172c push bc ld hl, $cc5b ld de, wOAMBuffer ld bc, $60 call CopyData pop bc xor a jr .asm_71721 .asm_7173d push bc ld hl, $c302 ld bc, $10 ld a, [wCurrentMenuItem] ; $cc26 call AddNTimes ld c, $40 ld a, [hl] cp $4 jr z, .asm_71755 cp $8 jr nz, .asm_71759 .asm_71755 dec hl dec hl ld c, $1 .asm_71759 ld b, $4 ld de, $4 .asm_7175e ld a, [hl] add c ld [hl], a add hl, de dec b jr nz, .asm_7175e pop bc ld a, c jr .asm_71721 DataTable_71769: ; 71769 (1c:5769) db $05,$10,$20 Func_7176c: ; 7176c (1c:576c) ld hl, MonOverworldSpritePointers ; $57c0 ld a, $1c Func_71771: ; 71771 (1c:5771) ld bc, $0 .asm_71774 push af push bc push hl add hl, bc ld a, [hli] ld e, a ld a, [hli] ld d, a ld a, [hli] ld c, a ld a, [hli] ld b, a ld a, [hli] ld h, [hl] ld l, a call CopyVideoData pop hl pop bc ld a, $6 add c ld c, a pop af dec a jr nz, .asm_71774 ret Func_71791: ; 71791 (1c:5791) call DisableLCD ld hl, MonOverworldSpritePointers ; $57c0 ld a, $1c ld bc, $0 .asm_7179c push af push bc push hl add hl, bc ld a, [hli] ld e, a ld a, [hli] ld d, a push de ld a, [hli] ld c, a swap c ld b, $0 ld a, [hli] ld e, [hl] inc hl ld d, [hl] pop hl call FarCopyData2 pop hl pop bc ld a, $6 add c ld c, a pop af dec a jr nz, .asm_7179c jp EnableLCD MonOverworldSpritePointers: ; 717c0 (1c:57c0) dw SlowbroSprite + $c0 db $40 / $10 ; 40 bytes db BANK(SlowbroSprite) dw $8000 dw BallSprite db $80 / $10 ; $80 bytes db BANK(BallSprite) dw $8040 dw ClefairySprite + $c0 db $40 / $10 ; $40 bytes db BANK(ClefairySprite) dw $80C0 dw BirdSprite + $c0 db $40 / $10 ; $40 bytes db BANK(BirdSprite) dw $8100 dw SeelSprite db $40 / $10 ; $40 bytes db BANK(SeelSprite) dw $8140 dw MonOverworldSprites + $40 db $10 / $10 ; $10 bytes db BANK(MonOverworldSprites) dw $8180 dw MonOverworldSprites + $50 db $10 / $10 ; $10 bytes db BANK(MonOverworldSprites) dw $81A0 dw MonOverworldSprites + $60 db $10 / $10 ; $10 bytes db BANK(MonOverworldSprites) dw $81C0 dw MonOverworldSprites + $70 db $10 / $10 ; $10 bytes db BANK(MonOverworldSprites) dw $81E0 dw MonOverworldSprites + $80 db $10 / $10 ; $10 bytes db BANK(MonOverworldSprites) dw $8200 dw MonOverworldSprites + $90 db $10 / $10 ; $10 bytes db BANK(MonOverworldSprites) dw $8220 dw MonOverworldSprites + $A0 db $10 / $10 ; $10 bytes db BANK(MonOverworldSprites) dw $8240 dw MonOverworldSprites + $B0 db $10 / $10 ; $10 bytes db BANK(MonOverworldSprites) dw $8260 dw MonOverworldSprites + $100 db $40 / $10 ; $40 bytes db BANK(MonOverworldSprites) dw $8380 dw SlowbroSprite db $40 / $10 ; $40 bytes db BANK(SlowbroSprite) dw $8400 dw BallSprite db $80 / $10 ; $80 bytes db BANK(BallSprite) dw $8440 dw ClefairySprite db $40 / $10 ; $40 bytes db BANK(ClefairySprite) dw $84C0 dw BirdSprite db $40 / $10 ; $40 bytes db BANK(BirdSprite) dw $8500 dw SeelSprite + $C0 db $40 / $10 ; $40 bytes db BANK(SeelSprite) dw $8540 dw MonOverworldSprites db $10 / $10 ; $10 bytes db BANK(MonOverworldSprites) dw $8580 dw MonOverworldSprites + $10 db $10 / $10 ; $10 bytes db BANK(MonOverworldSprites) dw $85A0 dw MonOverworldSprites + $20 db $10 / $10 ; $10 bytes db BANK(MonOverworldSprites) dw $85C0 dw MonOverworldSprites + $30 db $10 / $10 ; $10 bytes db BANK(MonOverworldSprites) dw $85E0 dw MonOverworldSprites + $C0 db $10 / $10 ; $10 bytes db BANK(MonOverworldSprites) dw $8600 dw MonOverworldSprites + $D0 db $10 / $10 ; $10 bytes db BANK(MonOverworldSprites) dw $8620 dw MonOverworldSprites + $E0 db $10 / $10 ; $10 bytes db BANK(MonOverworldSprites) dw $8640 dw MonOverworldSprites + $F0 db $10 / $10 ; $10 bytes db BANK(MonOverworldSprites) dw $8660 dw MonOverworldSprites + $140 db $40 / $10 ; $40 bytes db BANK(MonOverworldSprites) dw $8780 Func_71868: ; 71868 (1c:5868) push hl push de push bc ld a, [H_DOWNARROWBLINKCNT2] ; $FF00+$8c ld hl, W_PARTYMON1 ; $d164 ld e, a ld d, $0 add hl, de ld a, [hl] call Func_718e9 ld [$cd5b], a call Func_718c3 pop bc pop de pop hl ret Func_71882: ; 71882 (1c:5882) xor a ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c ld a, [$cd5d] call Func_718e9 ld [$cd5b], a jr Func_718c3 Func_71890: ; 71890 (1c:5890) ld a, [$cf91] call Func_718e9 push af ld hl, $8000 call Func_718ac pop af add $54 ld hl, $8040 call Func_718ac xor a ld [$cd5d], a jr Func_71882 Func_718ac: ; 718ac (1c:58ac) push hl add a ld c, a ld b, $0 ld hl, MonOverworldSpritePointers add hl, bc add hl, bc add hl, bc ld a, [hli] ld e, a ld a, [hli] ld d, a ld a, [hli] ld c, a ld a, [hli] ld b, a pop hl jp CopyVideoData Func_718c3: ; 718c3 (1c:58c3) push af ld c, $10 ld h, $c3 ld a, [H_DOWNARROWBLINKCNT2] ; $FF00+$8c swap a ld l, a add $10 ld b, a pop af cp $8 jr z, .asm_718da call Func_712a6 jr .asm_718dd .asm_718da call Func_71281 .asm_718dd ld hl, wOAMBuffer ld de, $cc5b ld bc, $60 jp CopyData Func_718e9: ; 718e9 (1c:58e9) ld [$d11e], a ld a, $3a call Predef ; indirect jump to IndexToPokedex (41010 (10:5010)) ld a, [$d11e] ld c, a dec a srl a ld hl, MonOverworldData ; $590d ld e, a ld d, $0 add hl, de ld a, [hl] bit 0, c jr nz, .asm_71906 swap a .asm_71906 and $f0 srl a srl a ret MonOverworldData: ; 7190d (1c:590d) dn SPRITE_GRASS, SPRITE_GRASS ;Bulbasaur/Ivysaur dn SPRITE_GRASS, SPRITE_MON ;Venusaur/Charmander dn SPRITE_MON, SPRITE_MON ;Charmeleon/Charizard dn SPRITE_WATER, SPRITE_WATER ;Squirtle/Wartortle dn SPRITE_WATER, SPRITE_BUG ;Blastoise/Caterpie dn SPRITE_BUG, SPRITE_BUG ;Metapod/Butterfree dn SPRITE_BUG, SPRITE_BUG ;Weedle/Kakuna dn SPRITE_BUG, SPRITE_BIRD_M ;Beedrill/Pidgey dn SPRITE_BIRD_M, SPRITE_BIRD_M ;Pidgeotto/Pidgeot dn SPRITE_QUADRUPED, SPRITE_QUADRUPED ;Rattata/Raticate dn SPRITE_BIRD_M, SPRITE_BIRD_M ;Spearow/Fearow dn SPRITE_SNAKE, SPRITE_SNAKE ;Ekans/Arbok dn SPRITE_FAIRY, SPRITE_FAIRY ;Pikachu/Raichu dn SPRITE_MON, SPRITE_MON ;Sandshrew/Sandslash dn SPRITE_MON, SPRITE_MON ;Nidoran?/Nidorina dn SPRITE_MON, SPRITE_MON ;Nidoqueen/Nidoran? dn SPRITE_MON, SPRITE_MON ;Nidorino/Nidoking dn SPRITE_FAIRY, SPRITE_FAIRY ;Clefairy/Clefable dn SPRITE_QUADRUPED, SPRITE_QUADRUPED ;Vulpix/Ninetales dn SPRITE_FAIRY, SPRITE_FAIRY ;Jigglypuff/Wigglytuff dn SPRITE_MON, SPRITE_MON ;Zubat/Golbat dn SPRITE_GRASS, SPRITE_GRASS ;Oddish/Gloom dn SPRITE_GRASS, SPRITE_BUG ;Vileplume/Paras dn SPRITE_BUG, SPRITE_BUG ;Parasect/Venonat dn SPRITE_BUG, SPRITE_MON ;Venomoth/Diglett dn SPRITE_MON, SPRITE_MON ;Dugtrio/Meowth dn SPRITE_MON, SPRITE_MON ;Persian/Psyduck dn SPRITE_MON, SPRITE_MON ;Golduck/Mankey dn SPRITE_MON, SPRITE_QUADRUPED ;Primeape/Growlithe dn SPRITE_QUADRUPED, SPRITE_MON ;Arcanine/Poliwag dn SPRITE_MON, SPRITE_MON ;Poliwhirl/Poliwrath dn SPRITE_MON, SPRITE_MON ;Abra/Kadabra dn SPRITE_MON, SPRITE_MON ;Alakazam/Machop dn SPRITE_MON, SPRITE_MON ;Machoke/Machamp dn SPRITE_GRASS, SPRITE_GRASS ;Bellsprout/Weepinbell dn SPRITE_GRASS, SPRITE_WATER ;Victreebel/Tentacool dn SPRITE_WATER, SPRITE_MON ;Tentacruel/Geodude dn SPRITE_MON, SPRITE_MON ;Graveler/Golem dn SPRITE_QUADRUPED, SPRITE_QUADRUPED ;Ponyta/Rapidash dn SPRITE_QUADRUPED, SPRITE_MON ;Slowpoke/Slowbro dn SPRITE_BALL_M, SPRITE_BALL_M ;Magnemite/Magneton dn SPRITE_BIRD_M, SPRITE_BIRD_M ;Farfetch'd/Doduo dn SPRITE_BIRD_M, SPRITE_WATER ;Dodrio/Seel dn SPRITE_WATER, SPRITE_MON ;Dewgong/Grimer dn SPRITE_MON, SPRITE_HELIX ;Muk/Shellder dn SPRITE_HELIX, SPRITE_MON ;Cloyster/Gastly dn SPRITE_MON, SPRITE_MON ;Haunter/Gengar dn SPRITE_SNAKE, SPRITE_MON ;Onix/Drowzee dn SPRITE_MON, SPRITE_WATER ;Hypno/Krabby dn SPRITE_WATER, SPRITE_BALL_M ;Kingler/Voltorb dn SPRITE_BALL_M, SPRITE_GRASS ;Electrode/Exeggcute dn SPRITE_GRASS, SPRITE_MON ;Exeggutor/Cubone dn SPRITE_MON, SPRITE_MON ;Marowak/Hitmonlee dn SPRITE_MON, SPRITE_MON ;Hitmonchan/Lickitung dn SPRITE_MON, SPRITE_MON ;Koffing/Weezing dn SPRITE_QUADRUPED, SPRITE_MON ;Rhyhorn/Rhydon dn SPRITE_FAIRY, SPRITE_GRASS ;Chansey/Tangela dn SPRITE_MON, SPRITE_WATER ;Kangaskhan/Horsea dn SPRITE_WATER, SPRITE_WATER ;Seadra/Goldeen dn SPRITE_WATER, SPRITE_HELIX ;Seaking/Staryu dn SPRITE_HELIX, SPRITE_MON ;Starmie/Mr.Mime dn SPRITE_BUG, SPRITE_MON ;Scyther/Jynx dn SPRITE_MON, SPRITE_MON ;Electabuzz/Magmar dn SPRITE_BUG, SPRITE_QUADRUPED ;Pinsir/Tauros dn SPRITE_WATER, SPRITE_SNAKE ;Magikarp/Gyarados dn SPRITE_WATER, SPRITE_MON ;Lapras/Ditto dn SPRITE_QUADRUPED, SPRITE_QUADRUPED ;Eevee/Vaporeon dn SPRITE_QUADRUPED, SPRITE_QUADRUPED ;Jolteon/Flareon dn SPRITE_MON, SPRITE_HELIX ;Porygon/Omanyte dn SPRITE_HELIX, SPRITE_HELIX ;Omastar/Kabuto dn SPRITE_HELIX, SPRITE_BIRD_M ;Kabutops/Aerodactyl dn SPRITE_MON, SPRITE_BIRD_M ;Snorlax/Articuno dn SPRITE_BIRD_M, SPRITE_BIRD_M ;Zapdos/Moltres dn SPRITE_SNAKE, SPRITE_SNAKE ;Dratini/Dragonair dn SPRITE_SNAKE, SPRITE_MON ;Dragonite/Mewtwo dn SPRITE_MON, 0 ;Mew/Padding MonOverworldSprites: ; 71959 (1c:5959) INCBIN "gfx/mon_ow_sprites.2bpp" Predef54: ; 71ad9 (1c:5ad9) ; trigger the trade offer/action specified by wWhichTrade call SaveScreenTilesToBuffer2 ld hl,TradeMons ld a,[wWhichTrade] ld b,a swap a sub b sub b ld c,a ld b,$0 add hl,bc ld a,[hli] ld [$cd0f],a ld a,[hli] ld [$cd34],a ld a,[hli] push af ld de,$cd29 ld bc,$000b call CopyData pop af ld l,a ld h,$0 ld de,InGameTradeTextPointers ; $5d64 add hl,hl add hl,de ld a,[hli] ld [$cd10],a ld a,[hl] ld [$cd11],a ld a,[$cd0f] ld de,$cd13 call Func_71b6a ld a,[$cd34] ld de,$cd1e call Func_71b6a ld hl,$d737 ld a,[wWhichTrade] ld c,a ld b,$2 ld a,$10 call Predef ld a,c and a ld a,$4 ld [$cd12],a jr nz,.asm_99bca ; 0x71b36 $20 xor a ld [$cd12],a call .asm_99bca ld a,$1 ld [$cd12],a call YesNoChoice ld a,[$cc26] and a jr nz,.asm_99bca ; 0x71b4b $b call Func_71c07 jr c,.asm_99bca ; 0x71b50 $6 ld hl, UnnamedText_71d8d call PrintText .asm_99bca ; 0x71b58 ld hl,$cd12 ld a,[hld] ld e,a ld d,$0 ld a,[hld] ld l,[hl] ld h,a add hl,de add hl,de ld a,[hli] ld h,[hl] ld l,a jp PrintText Func_71b6a: ; 71b6a (1c:5b6a) push de ld [$d11e],a call GetMonName ld hl,$cd6d pop de ld bc,$b jp CopyData TradeMons: ; 71b7b (1c:5b7b) ; givemonster, getmonster, textstring, nickname (11 bytes), 14 bytes total db NIDORINO, NIDORINA, 0,"TERRY@@@@@@" db ABRA, MR_MIME, 0,"MARCEL@@@@@" db BUTTERFREE,BEEDRILL, 2,"CHIKUCHIKU@" db PONYTA, SEEL, 0,"SAILOR@@@@@" db SPEAROW, FARFETCH_D,2,"DUX@@@@@@@@" db SLOWBRO, LICKITUNG, 0,"MARC@@@@@@@" db POLIWHIRL, JYNX, 1,"LOLA@@@@@@@" db RAICHU, ELECTRODE, 1,"DORIS@@@@@@" db VENONAT, TANGELA, 2,"CRINKLES@@@" db NIDORAN_M, NIDORAN_F, 2,"SPOT@@@@@@@" Func_71c07: ; 71c07 (1c:5c07) xor a ld [$d07d],a dec a ld [$cfcb],a call DisplayPartyMenu push af call Func_71ca2 pop af ld a,$1 jp c,.asm_c4bc2 ld a,[$cd0f] ld b,a ld a,[$cf91] cp b ld a,$2 jr nz,.asm_c4bc2 ; 0x71c26 $75 ld a,[wWhichPokemon] ld hl,$d18c ld bc,$002c call AddNTimes ld a,[hl] ld [$d127],a ld hl,$d737 ld a,[wWhichTrade] ld c,a ld b,$1 ld a,$10 call Predef ld hl, UnnamedText_71d88 call PrintText ld a,[wWhichPokemon] push af ld a,[$d127] push af call LoadHpBarAndStatusTilePatterns call Func_71cc1 ld a,$38 call Predef pop af ld [$d127],a pop af ld [wWhichPokemon],a ld a,[$cd34] ld [$cf91],a xor a ld [$cc49],a ld [$cf95],a call RemovePokemon ld a,$80 ld [$cc49],a call AddPokemonToParty call Func_71d19 ld hl, Func_17d7d ld b, BANK(Func_17d7d) call Bankswitch call ClearScreen call Func_71ca2 ld b, BANK(Func_eedc) ld hl, Func_eedc call Bankswitch and a ld a,$3 jr .asm_ee803 ; 0x71c9b $1 .asm_c4bc2 ; 0x71c9d scf .asm_ee803 ; 0x71c9e ld [$cd12],a ret Func_71ca2: ; 71ca2 (1c:5ca2) call GBPalWhiteOutWithDelay3 call Func_3dbe call ReloadTilesetTilePatterns call LoadScreenTilesFromBuffer2 call Delay3 call LoadGBPal ld c, $a call DelayFrames ld b, BANK(LoadWildData) ld hl, LoadWildData jp Bankswitch Func_71cc1: ; 71cc1 (1c:5cc1) ld hl, wWhichTrade ; $cd3d ld a, [$cd0f] ld [hli], a ld a, [$cd34] ld [hl], a ld hl, W_PARTYMON1OT ; $d273 ld bc, $b ld a, [wWhichPokemon] ; $cf92 call AddNTimes ld de, $cd41 ld bc, $b call Func_71d11 ld hl, String_71d59 ; $5d59 ld de, $cd4e call Func_71d11 ld de, W_GRASSRATE ; $d887 call Func_71d11 ld hl, W_PARTYMON1_OTID ; $d177 ld bc, $2c ld a, [wWhichPokemon] ; $cf92 call AddNTimes ld de, $cd4c ld bc, $2 call Func_71d11 call GenRandom ld hl, H_RAND1 ; $ffd3 ld de, $cd59 jp CopyData Func_71d11: ; 71d11 (1c:5d11) push hl push bc call CopyData pop bc pop hl ret Func_71d19: ; 71d19 (1c:5d19) ld hl, W_PARTYMON1NAME ; $d2b5 ld bc, $b call Func_71d4f ld hl, $cd29 ld bc, $b call CopyData ld hl, W_PARTYMON1OT ; $d273 ld bc, $b call Func_71d4f ld hl, String_71d59 ; $5d59 ld bc, $b call CopyData ld hl, W_PARTYMON1_OTID ; $d177 ld bc, $2c call Func_71d4f ld hl, $cd59 ld bc, $2 jp CopyData Func_71d4f: ; 71d4f (1c:5d4f) ld a, [W_NUMINPARTY] ; $d163 dec a call AddNTimes ld e, l ld d, h ret String_71d59: ; 71d59 (1c:5d59) ; "TRAINER@@@@@@@@@@" db $5d, "@@@@@@@@@@" InGameTradeTextPointers: ; 71d64 (1c:5d64) dw TradeTextPointers1 dw TradeTextPointers2 dw TradeTextPointers3 TradeTextPointers1: ; 71d6a (1c:5d6a) dw UnnamedText_71d94 dw UnnamedText_71d99 dw UnnamedText_71d9e dw UnnamedText_71da3 dw UnnamedText_71da8 TradeTextPointers2: ; 71d74 (1c:5d74) dw UnnamedText_71dad dw UnnamedText_71db2 dw UnnamedText_71db7 dw UnnamedText_71dbc dw UnnamedText_71dc1 TradeTextPointers3: ; 71d7e (1c:5d7e) dw UnnamedText_71dc6 dw UnnamedText_71dcb dw UnnamedText_71dd0 dw UnnamedText_71dd5 dw UnnamedText_71dda UnnamedText_71d88: ; 71d88 (1c:5d88) TX_FAR _UnnamedText_71d88 db "@" UnnamedText_71d8d: ; 71d8d (1c:5d8d) TX_FAR _UnnamedText_71d8d ; 0xa80bc db $11, $a, "@" UnnamedText_71d94: ; 71d94 (1c:5d94) TX_FAR _UnnamedText_71d94 db "@" UnnamedText_71d99: ; 71d99 (1c:5d99) TX_FAR _UnnamedText_71d99 db "@" UnnamedText_71d9e: ; 71d9e (1c:5d9e) TX_FAR _UnnamedText_71d9e db "@" UnnamedText_71da3: ; 71da3 (1c:5da3) TX_FAR _UnnamedText_71da3 db "@" UnnamedText_71da8: ; 71da8 (1c:5da8) TX_FAR _UnnamedText_71da8 db "@" UnnamedText_71dad: ; 71dad (1c:5dad) TX_FAR _UnnamedText_71dad db "@" UnnamedText_71db2: ; 71db2 (1c:5db2) TX_FAR _UnnamedText_71db2 db "@" UnnamedText_71db7: ; 71db7 (1c:5db7) TX_FAR _UnnamedText_71db7 db "@" UnnamedText_71dbc: ; 71dbc (1c:5dbc) TX_FAR _UnnamedText_71dbc db "@" UnnamedText_71dc1: ; 71dc1 (1c:5dc1) TX_FAR _UnnamedText_71dc1 db "@" UnnamedText_71dc6: ; 71dc6 (1c:5dc6) TX_FAR _UnnamedText_71dc6 db "@" UnnamedText_71dcb: ; 71dcb (1c:5dcb) TX_FAR _UnnamedText_71dcb db "@" UnnamedText_71dd0: ; 71dd0 (1c:5dd0) TX_FAR _UnnamedText_71dd0 db "@" UnnamedText_71dd5: ; 71dd5 (1c:5dd5) TX_FAR _UnnamedText_71dd5 db "@" UnnamedText_71dda: ; 71dda (1c:5dda) TX_FAR _UnnamedText_71dda db "@" Func_71ddf: ; 71ddf (1c:5ddf) call Load16BitRegisters ld a, b cp $ff jr nz, .asm_71dea ld a, [$cf1c] .asm_71dea cp $fc jp z, Func_71fc2 ld l, a ld h, $0 add hl, hl ld de, PointerTable_71f73 add hl, de ld a, [hli] ld h, [hl] ld l, a ld de, Func_72156 push de jp [hl] Func_71dff: ; 71dff (1c:5dff) ld hl, PalPacket_72448 ld de, BlkPacket_721b5 ret Func_71e06: ; 71e06 (1c:5e06) ld hl, PalPacket_72428 ld de, $cf2d ld bc, $10 call CopyData ld a, [W_PLAYERBATTSTATUS3] ld hl, W_PLAYERMONID call DeterminePaletteID ld b, a ld a, [W_ENEMYBATTSTATUS3] ld hl, W_ENEMYMONID call DeterminePaletteID ld c, a ld hl, $cf2e ld a, [$cf1d] add $1f ld [hli], a inc hl ld a, [$cf1e] add $1f ld [hli], a inc hl ld a, b ld [hli], a inc hl ld a, c ld [hl], a ld hl, $cf2d ld de, BlkPacket_721b5 ld a, $1 ld [$cf1c], a ret Func_71e48: ; 71e48 (1c:5e48) ld hl, PalPacket_72458 ld de, BlkPacket_7219e ret Func_71e4f: ; 71e4f (1c:5e4f) ld hl, PalPacket_72428 ld de, $cf2d ld bc, $10 call CopyData ld a, [$cf91] cp VICTREEBEL + 1 jr c, .pokemon ld a, $1 ; not pokemon .pokemon call DeterminePaletteIDOoutOfBattle push af ld hl, $cf2e ld a, [$cf25] add $1f ld [hli], a inc hl pop af ld [hl], a ld hl, $cf2d ld de, BlkPacket_721fa ret Func_71e7b: ; 71e7b (1c:5e7b) ld hl, PalPacket_72438 ld de, $cf2e ret Func_71e82: ; 71e82 (1c:5e82) ld hl, PalPacket_72468 ld de, $cf2d ld bc, $10 call CopyData ld a, [$cf91] call DeterminePaletteIDOoutOfBattle ld hl, $cf30 ld [hl], a ld hl, $cf2d ld de, BlkPacket_72222 ret Func_71e9f: ; 71e9f (1c:5e9f) ld hl, PalPacket_72478 ld de, BlkPacket_7224f ret Func_71ea6: ; 71ea6 (1c:5ea6) ld hl, PalPacket_72488 ld de, BlkPacket_7228e ret Func_71ead: ; 71ead (1c:5ead) ld hl, PalPacket_724a8 ld de, BlkPacket_7219e ret Func_71eb4: ; 71eb4 (1c:5eb4) ld hl, PalPacket_724b8 ld de, BlkPacket_722c1 ret Func_71ebb: ; 71ebb (1c:5ebb) ld hl, PalPacket_724c8 ld de, BlkPacket_723dd ld a, $8 ld [$cf1c], a ret GetMapPaletteID: ; 71ec7 (1c:5ec7) ld hl, PalPacket_72428 ld de, $cf2d ld bc, $10 call CopyData ld a, [W_CURMAPTILESET] cp $f jr z, .PokemonTowerOrAgatha cp $11 jr z, .caveOrBruno ld a, [W_CURMAP] cp REDS_HOUSE_1F jr c, .townOrRoute cp UNKNOWN_DUNGEON_2 jr c, .normalDungeonOrBuilding cp NAME_RATERS_HOUSE jr c, .caveOrBruno cp LORELEIS_ROOM jr z, .Lorelei cp BRUNOS_ROOM jr z, .caveOrBruno .normalDungeonOrBuilding ld a, [$d365] ; town or route that current dungeon or building is located .townOrRoute cp SAFFRON_CITY + 1 jr c, .town ld a, PAL_ROUTE - 1 .town inc a ; a town's pallete ID is its map ID + 1 ld hl, $cf2e ld [hld], a ld de, BlkPacket_7219e ld a, $9 ld [$cf1c], a ret .PokemonTowerOrAgatha ld a, PAL_GREYMON - 1 jr .town .caveOrBruno ld a, PAL_CAVE - 1 jr .town .Lorelei xor a jr .town Func_71f17: ; 71f17 (1c:5f17) push bc ld hl, PalPacket_72428 ld de, $cf2d ld bc, $10 call CopyData pop bc ld a, c and a ld a, $1e jr nz, .asm_71f31 ld a, [$cf1d] call DeterminePaletteIDOoutOfBattle .asm_71f31 ld [$cf2e], a ld hl, $cf2d ld de, BlkPacket_7219e ret LoadTrainerCardBadgePalettes: ; 71f3b (1c:5f3b) ld hl, BlkPacket_72360 ld de, $cc5b ld bc, $40 call CopyData ld de, LoopCounts_71f8f ld hl, $cc5d ld a, [W_OBTAINEDBADGES] ld c, $8 .asm_71f52 srl a push af jr c, .asm_71f62 push bc ld a, [de] ld c, a xor a .asm_71f5b ld [hli], a dec c jr nz, .asm_71f5b pop bc jr .asm_71f67 .asm_71f62 ld a, [de] .asm_71f63 inc hl dec a jr nz, .asm_71f63 .asm_71f67 pop af inc de dec c jr nz, .asm_71f52 ld hl, PalPacket_72498 ld de, $cc5b ret PointerTable_71f73: ; 71f73 (1c:5f73) dw Func_71dff dw Func_71e06 dw Func_71e48 dw Func_71e4f dw Func_71e82 dw Func_71e9f dw Func_71ea6 dw Func_71eb4 dw Func_71ead dw GetMapPaletteID dw Func_71e7b dw Func_71f17 dw Func_71ebb dw LoadTrainerCardBadgePalettes ; each byte is the number of loops to make in .asm_71f5b for each badge LoopCounts_71f8f: ; 71f8f (1c:5f8f) db $06,$06,$06,$12,$06,$06,$06,$06 DeterminePaletteID: ; 71f97 (1c:5f97) bit 3, a ; bit 3 of battle status 3, set if current Pokemon is transformed ld a, PAL_GREYMON ; if yes, use Ditto's palette ret nz ld a, [hl] DeterminePaletteIDOoutOfBattle: ; 71f9d (1c:5f9d) ld [$D11E], a and a jr z, .idZero push bc ld a, $3A call Predef ; turn Pokemon ID number into Pokedex number pop bc ld a, [$D11E] .idZero ld e, a ld d, $00 ld hl, MonsterPalettes ; not just for Pokemon, Trainers use it too add hl, de ld a, [hl] ret Func_71fb6: ; 71fb6 (1c:5fb6) ld hl, BlkPacket_722f4 ; $62f4 ld de, $cf2e ld bc, $30 jp CopyData Func_71fc2: ; 71fc2 (1c:5fc2) ld hl, $cf1f ld a, [$cf2d] ld e, a ld d, $0 add hl, de ld e, l ld d, h ld a, [de] and a ld e, $5 jr z, .asm_71fdb dec a ld e, $a jr z, .asm_71fdb ld e, $f .asm_71fdb push de ld hl, $cf37 ld bc, $6 ld a, [$cf2d] call AddNTimes pop de ld [hl], e ret SendSGBPacket: ; 71feb (1c:5feb) ;check number of packets ld a,[hl] and a,$07 ret z ; store number of packets in B ld b,a .loop2\@ ; save B for later use push bc ; load a non-zero value in $fff9 to disable the routine that checks actual ; joypad input (said routine, located at $15f, does nothing if $fff9 is not ; zero) ld a,$01 ld [$fff9],a ; send RESET signal (P14=LOW, P15=LOW) xor a ld [$ff00],a ; set P14=HIGH, P15=HIGH ld a,$30 ld [$ff00],a ;load length of packets (16 bytes) ld b,$10 .nextByte\@ ;set bit counter (8 bits per byte) ld e,$08 ; get next byte in the packet ld a,[hli] ld d,a .nextBit0\@ bit 0,d ; if 0th bit is not zero set P14=HIGH,P15=LOW (send bit 1) ld a,$10 jr nz,.next0\@ ; else (if 0th bit is zero) set P14=LOW,P15=HIGH (send bit 0) ld a,$20 .next0\@ ld [$ff00],a ; must set P14=HIGH,P15=HIGH between each "pulse" ld a,$30 ld [$ff00],a ; rotation will put next bit in 0th position (so we can always use command ; "bit 0,d" to fetch the bit that has to be sent) rr d ; decrease bit counter so we know when we have sent all 8 bits of current byte dec e jr nz,.nextBit0\@ dec b jr nz,.nextByte\@ ; send bit 1 as a "stop bit" (end of parameter data) ld a,$20 ld [$ff00],a ; set P14=HIGH,P15=HIGH ld a,$30 ld [$ff00],a xor a ld [$fff9],a ; wait for about 70000 cycles call Wait7000 ; restore (previously pushed) number of packets pop bc dec b ; return if there are no more packets ret z ; else send 16 more bytes jr .loop2\@ Func_7202b: ; 7202b (1c:602b) xor a ld [$cf1b], a call Func_7209b ret nc ld a, $1 ld [$cf1b], a ld a, [$cf1a] and a jr z, .asm_7203f ret .asm_7203f di call Func_72075 ei ld a, $1 ld [$cf2d], a ld de, PalPacket_72508 ld hl, SGBBorderGraphics call Func_7210b xor a ld [$cf2d], a ld de, PalPacket_72518 ld hl, BorderPalettes call Func_7210b xor a ld [$cf2d], a ld de, PalPacket_724d8 ld hl, SuperPalettes call Func_7210b call ZeroVram ld hl, PalPacket_72538 jp SendSGBPacket Func_72075: ; 72075 (1c:6075) ld hl, PointerTable_72089 ld c, $9 .asm_7207a push bc ld a, [hli] push hl ld h, [hl] ld l, a call SendSGBPacket pop hl inc hl pop bc dec c jr nz, .asm_7207a ret PointerTable_72089: ; 72089 (1c:6089) dw PalPacket_72528 dw PalPacket_72548 dw PalPacket_72558 dw PalPacket_72568 dw PalPacket_72578 dw PalPacket_72588 dw PalPacket_72598 dw PalPacket_725a8 dw PalPacket_725b8 Func_7209b: ; 7209b (1c:609b) ld hl, PalPacket_724f8 di call SendSGBPacket ld a, $1 ld [$FF00+$f9], a ei call Wait7000 ld a, [rJOYP] ; $FF00+$0 and $3 cp $3 jr nz, .asm_720fd ld a, $20 ld [rJOYP], a ; $FF00+$0 ld a, [rJOYP] ; $FF00+$0 ld a, [rJOYP] ; $FF00+$0 call Wait7000 call Wait7000 ld a, $30 ld [rJOYP], a ; $FF00+$0 call Wait7000 call Wait7000 ld a, $10 ld [rJOYP], a ; $FF00+$0 ld a, [rJOYP] ; $FF00+$0 ld a, [rJOYP] ; $FF00+$0 ld a, [rJOYP] ; $FF00+$0 ld a, [rJOYP] ; $FF00+$0 ld a, [rJOYP] ; $FF00+$0 ld a, [rJOYP] ; $FF00+$0 call Wait7000 call Wait7000 ld a, $30 ld [rJOYP], a ; $FF00+$0 ld a, [rJOYP] ; $FF00+$0 ld a, [rJOYP] ; $FF00+$0 ld a, [rJOYP] ; $FF00+$0 call Wait7000 call Wait7000 ld a, [rJOYP] ; $FF00+$0 and $3 cp $3 jr nz, .asm_720fd call Func_72102 and a ret .asm_720fd call Func_72102 scf ret Func_72102: ; 72102 (1c:6102) ld hl, PalPacket_724e8 call SendSGBPacket jp Wait7000 Func_7210b: ; 7210b (1c:610b) di push de call DisableLCD ld a, $e4 ld [rBGP], a ; $FF00+$47 ld de, $8800 ld a, [$cf2d] and a jr z, .asm_72122 call Func_72188 jr .asm_72128 .asm_72122 ld bc, $1000 call CopyData .asm_72128 ld hl, $9800 ld de, $c ld a, $80 ld c, $d .asm_72132 ld b, $14 .asm_72134 ld [hli], a inc a dec b jr nz, .asm_72134 add hl, de dec c jr nz, .asm_72132 ld a, $e3 ld [rLCDC], a ; $FF00+$40 pop hl call SendSGBPacket xor a ld [rBGP], a ; $FF00+$47 ei ret Wait7000: ; 7214a (1c:614a) ; each loop takes about 10 cycles so this routine actually loops through 70000 ; cycles. ld de,$1b58 ; = 7000 .loop\@ nop nop nop dec de ld a,d or e jr nz,.loop\@ ret Func_72156: ; 72156 (1c:6156) ld a, [$cf1a] and a jr z, .asm_72165 push de call Func_7216d pop hl call Func_72187 ret .asm_72165 push de call SendSGBPacket pop hl jp SendSGBPacket Func_7216d: ; 7216d (1c:616d) ld a, $80 ld [$FF00+$68], a inc hl ld c, $20 .asm_72174 ld a, [hli] inc hl add a add a add a ld de, SuperPalettes add e jr nc, .asm_72180 inc d .asm_72180 ld a, [de] ld [$FF00+$69], a dec c jr nz, .asm_72174 ret Func_72187: ; 72187 (1c:6187) ret Func_72188: ; 72188 (1c:6188) ld b, $80 .asm_7218a ld c, $10 .asm_7218c ld a, [hli] ld [de], a inc de dec c jr nz, .asm_7218c ld c, $10 xor a .asm_72195 ld [de], a inc de dec c jr nz, .asm_72195 dec b jr nz, .asm_7218a ret BlkPacket_7219e: ; 7219e (1c:619e) db $21,$01,$03,$00,$00,$00,$13,$11,$00,$00,$00,$00,$00,$00,$00,$00 db $03,$00,$00,$13,$11,$00,$00 BlkPacket_721b5: ; 721b5 (1c:61b5) db $22,$05,$07,$0a,$00,$0c,$13,$11,$03,$05,$01,$00,$0a,$03,$03,$00 db $0a,$07,$13,$0a,$03,$0a,$00,$04,$08,$0b,$03,$0f,$0b,$00,$13,$06 db $03,$00,$00,$13,$0b,$00,$03,$00,$0c,$13,$11,$02,$03,$01,$00,$0a db $03,$01,$03,$0a,$08,$13,$0a,$00,$03,$00,$04,$08,$0b,$02,$03,$0b db $00,$13,$07,$03,$00 BlkPacket_721fa: ; 721fa (1c:61fa) db $21,$01,$07,$05,$01,$00,$07,$06,$00,$00,$00,$00,$00,$00,$00,$00 db $02,$00,$00,$11,$00,$03,$01,$00,$07,$06,$01,$03,$01,$07,$13,$11 db $00,$03,$08,$00,$13,$06,$00,$00 BlkPacket_72222: ; 72222 (1c:6222) db $21,$01,$07,$05,$01,$01,$08,$08,$00,$00,$00,$00,$00,$00,$00,$00 db $02,$00,$00,$11,$00,$01,$00,$01,$13,$00,$03,$01,$01,$08,$08,$01 db $03,$01,$09,$08,$11,$00,$03,$09,$01,$13,$11,$00,$00 BlkPacket_7224f: ; 7224f (1c:624f) db $22,$05,$03,$05,$00,$00,$13,$0b,$03,$0a,$00,$04,$13,$09,$02,$0f db $00,$06,$13,$07,$03,$00,$04,$04,$0f,$09,$03,$00,$00,$0c,$13,$11 db $03,$00,$00,$13,$0b,$01,$03,$00,$04,$13,$09,$02,$03,$00,$06,$13 db $07,$03,$03,$04,$04,$0f,$09,$00,$03,$00,$0c,$13,$11,$00,$00 BlkPacket_7228e: ; 7228e (1c:628e) db $22,$03,$03,$00,$00,$00,$13,$07,$02,$05,$00,$08,$13,$09,$03,$0a db $00,$0a,$13,$11,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $03,$00,$00,$13,$07,$00,$03,$00,$08,$13,$09,$01,$03,$00,$0a,$13 db $11,$02,$00 BlkPacket_722c1: ; 722c1 (1c:62c1) db $22,$03,$03,$05,$00,$00,$13,$03,$03,$00,$00,$04,$13,$0d,$03,$05 db $00,$0e,$13,$11,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $03,$00,$00,$13,$03,$01,$03,$00,$04,$13,$0d,$00,$03,$00,$0e,$13 db $11,$01,$00 BlkPacket_722f4: ; 722f4 (1c:62f4) db $23,$07,$06,$10,$01,$00,$02,$0c,$02,$00,$05,$01,$0b,$01,$02,$00 db $05,$03,$0b,$03,$02,$00,$05,$05,$0b,$05,$02,$00,$05,$07,$0b,$07 db $02,$00,$05,$09,$0b,$09,$02,$00,$05,$0b,$0b,$0b,$00,$00,$00,$00 db $02,$00,$00,$11,$01,$03,$01,$00,$02,$0c,$00,$03,$01,$0d,$02,$11 db $01,$03,$03,$00,$13,$11,$01,$03,$0c,$00,$12,$01,$00,$03,$0c,$02 db $12,$03,$00,$03,$0c,$04,$12,$05,$00,$03,$0c,$06,$12,$07,$00,$03 db $0c,$08,$12,$09,$00,$03,$0c,$0a,$12,$0b,$00,$00 BlkPacket_72360: ; 72360 (1c:6360) db $24,$0a,$02,$00,$03,$0c,$04,$0d,$02,$05,$07,$0c,$08,$0d,$02,$0f db $0b,$0c,$0c,$0d,$02,$0a,$10,$0b,$11,$0c,$02,$05,$0e,$0d,$0f,$0e db $02,$0f,$10,$0d,$11,$0e,$02,$0a,$03,$0f,$04,$10,$02,$0f,$07,$0f db $08,$10,$02,$0a,$0b,$0f,$0c,$10,$02,$05,$0f,$0f,$10,$10,$00,$00 db $03,$03,$0c,$04,$0d,$00,$03,$07,$0c,$08,$0d,$01,$03,$0b,$0c,$0c db $0d,$03,$03,$10,$0b,$11,$0c,$02,$03,$0e,$0d,$0f,$0e,$01,$03,$10 db $0d,$11,$0e,$03,$03,$03,$0f,$04,$10,$02,$03,$07,$0f,$08,$10,$03 db $03,$0b,$0f,$0c,$10,$02,$03,$0f,$0f,$10,$10,$01,$00 BlkPacket_723dd: ; 723dd (1c:63dd) db $22,$03,$07,$05,$05,$0b,$07,$0d,$02,$0a,$08,$0b,$09,$0d,$03,$0f db $0c,$0b,$0e,$0d,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $03,$00,$00,$13,$0a,$00,$03,$00,$0b,$04,$0d,$00,$03,$05,$0b,$07 db $0d,$01,$03,$08,$0b,$13,$0d,$00,$03,$00,$0e,$13,$11,$00,$03,$08 db $0b,$09,$0d,$02,$03,$0c,$0b,$0e,$0d,$03,$00 PalPacket_72428: ; 72428 (1c:6428) db $51,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 PalPacket_72438: ; 72438 (1c:6438) db $51,$10,$00,$1F,$00,$20,$00,$21,$00,$00,$00,$00,$00,$00,$00,$00 PalPacket_72448: ; 72448 (1c:6448) db $51,$1E,$00,$1E,$00,$1E,$00,$1E,$00,$00,$00,$00,$00,$00,$00,$00 PalPacket_72458: ; 72458 (1c:6458) db $51,$0C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 PalPacket_72468: ; 72468 (1c:6468) db $51,$15,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 PalPacket_72478: ; 72478 (1c:6478) db $51,$1A,$00,$1B,$00,$1C,$00,$1D,$00,$00,$00,$00,$00,$00,$00,$00 PalPacket_72488: ; 72488 (1c:6488) db $51,$0E,$00,$0D,$00,$10,$00,$14,$00,$00,$00,$00,$00,$00,$00,$00 PalPacket_72498: ; 72498 (1c:6498) db $51,$10,$00,$22,$00,$12,$00,$18,$00,$00,$00,$00,$00,$00,$00,$00 PalPacket_724a8: ; 724a8 (1c:64a8) db $51,$10,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 PalPacket_724b8: ; 724b8 (1c:64b8) db $51,$14,$00,$1E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 PalPacket_724c8: ; 724c8 (1c:64c8) db $51,$24,$00,$12,$00,$02,$00,$11,$00,$00,$00,$00,$00,$00,$00,$00 PalPacket_724d8: ; 724d8 (1c:64d8) db $59,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 PalPacket_724e8: ; 724e8 (1c:64e8) db $89,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 PalPacket_724f8: ; 724f8 (1c:64f8) db $89,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 PalPacket_72508: ; 72508 (1c:6508) db $99,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 PalPacket_72518: ; 72518 (1c:6518) db $A1,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 PalPacket_72528: ; 72528 (1c:6528) db $B9,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 PalPacket_72538: ; 72538 (1c:6538) db $B9,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 PalPacket_72548: ; 72548 (1c:6548) db $79,$5D,$08,$00,$0B,$8C,$D0,$F4,$60,$00,$00,$00,$00,$00,$00,$00 PalPacket_72558: ; 72558 (1c:6558) db $79,$52,$08,$00,$0B,$A9,$E7,$9F,$01,$C0,$7E,$E8,$E8,$E8,$E8,$E0 PalPacket_72568: ; 72568 (1c:6568) db $79,$47,$08,$00,$0B,$C4,$D0,$16,$A5,$CB,$C9,$05,$D0,$10,$A2,$28 PalPacket_72578: ; 72578 (1c:6578) db $79,$3C,$08,$00,$0B,$F0,$12,$A5,$C9,$C9,$C8,$D0,$1C,$A5,$CA,$C9 PalPacket_72588: ; 72588 (1c:6588) db $79,$31,$08,$00,$0B,$0C,$A5,$CA,$C9,$7E,$D0,$06,$A5,$CB,$C9,$7E PalPacket_72598: ; 72598 (1c:6598) db $79,$26,$08,$00,$0B,$39,$CD,$48,$0C,$D0,$34,$A5,$C9,$C9,$80,$D0 PalPacket_725a8: ; 725a8 (1c:65a8) db $79,$1B,$08,$00,$0B,$EA,$EA,$EA,$EA,$EA,$A9,$01,$CD,$4F,$0C,$D0 PalPacket_725b8: ; 725b8 (1c:65b8) db $79,$10,$08,$00,$0B,$4C,$20,$08,$EA,$EA,$EA,$EA,$EA,$60,$EA,$EA MonsterPalettes: ; 725c8 (1c:65c8) db PAL_MEWMON ; MISSINGNO db PAL_GREENMON ; BULBASAUR db PAL_GREENMON ; IVYSAUR db PAL_GREENMON ; VENUSAUR db PAL_REDMON ; CHARMANDER db PAL_REDMON ; CHARMELEON db PAL_REDMON ; CHARIZARD db PAL_CYANMON ; SQUIRTLE db PAL_CYANMON ; WARTORTLE db PAL_CYANMON ; BLASTOISE db PAL_GREENMON ; CATERPIE db PAL_GREENMON ; METAPOD db PAL_CYANMON ; BUTTERFREE db PAL_YELLOWMON ; WEEDLE db PAL_YELLOWMON ; KAKUNA db PAL_YELLOWMON ; BEEDRILL db PAL_BROWNMON ; PIDGEY db PAL_BROWNMON ; PIDGEOTTO db PAL_BROWNMON ; PIDGEOT db PAL_GREYMON ; RATTATA db PAL_GREYMON ; RATICATE db PAL_BROWNMON ; SPEAROW db PAL_BROWNMON ; FEAROW db PAL_PURPLEMON ; EKANS db PAL_PURPLEMON ; ARBOK db PAL_YELLOWMON ; PIKACHU db PAL_YELLOWMON ; RAICHU db PAL_BROWNMON ; SANDSHREW db PAL_BROWNMON ; SANDSLASH db PAL_BLUEMON ; NIDORAN_F db PAL_BLUEMON ; NIDORINA db PAL_BLUEMON ; NIDOQUEEN db PAL_PURPLEMON ; NIDORAN_M db PAL_PURPLEMON ; NIDORINO db PAL_PURPLEMON ; NIDOKING db PAL_PINKMON ; CLEFAIRY db PAL_PINKMON ; CLEFABLE db PAL_REDMON ; VULPIX db PAL_YELLOWMON ; NINETALES db PAL_PINKMON ; JIGGLYPUFF db PAL_PINKMON ; WIGGLYTUFF db PAL_BLUEMON ; ZUBAT db PAL_BLUEMON ; GOLBAT db PAL_GREENMON ; ODDISH db PAL_REDMON ; GLOOM db PAL_REDMON ; VILEPLUME db PAL_REDMON ; PARAS db PAL_REDMON ; PARASECT db PAL_PURPLEMON ; VENONAT db PAL_PURPLEMON ; VENOMOTH db PAL_BROWNMON ; DIGLETT db PAL_BROWNMON ; DUGTRIO db PAL_YELLOWMON ; MEOWTH db PAL_YELLOWMON ; PERSIAN db PAL_YELLOWMON ; PSYDUCK db PAL_CYANMON ; GOLDUCK db PAL_BROWNMON ; MANKEY db PAL_BROWNMON ; PRIMEAPE db PAL_BROWNMON ; GROWLITHE db PAL_REDMON ; ARCANINE db PAL_BLUEMON ; POLIWAG db PAL_BLUEMON ; POLIWHIRL db PAL_BLUEMON ; POLIWRATH db PAL_YELLOWMON ; ABRA db PAL_YELLOWMON ; KADABRA db PAL_YELLOWMON ; ALAKAZAM db PAL_GREYMON ; MACHOP db PAL_GREYMON ; MACHOKE db PAL_GREYMON ; MACHAMP db PAL_GREENMON ; BELLSPROUT db PAL_GREENMON ; WEEPINBELL db PAL_GREENMON ; VICTREEBEL db PAL_CYANMON ; TENTACOOL db PAL_CYANMON ; TENTACRUEL db PAL_GREYMON ; GEODUDE db PAL_GREYMON ; GRAVELER db PAL_GREYMON ; GOLEM db PAL_REDMON ; PONYTA db PAL_REDMON ; RAPIDASH db PAL_PINKMON ; SLOWPOKE db PAL_PINKMON ; SLOWBRO db PAL_GREYMON ; MAGNEMITE db PAL_GREYMON ; MAGNETON db PAL_BROWNMON ; FARFETCH_D db PAL_BROWNMON ; DODUO db PAL_BROWNMON ; DODRIO db PAL_BLUEMON ; SEEL db PAL_BLUEMON ; DEWGONG db PAL_PURPLEMON ; GRIMER db PAL_PURPLEMON ; MUK db PAL_GREYMON ; SHELLDER db PAL_GREYMON ; CLOYSTER db PAL_PURPLEMON ; GASTLY db PAL_PURPLEMON ; HAUNTER db PAL_PURPLEMON ; GENGAR db PAL_GREYMON ; ONIX db PAL_YELLOWMON ; DROWZEE db PAL_YELLOWMON ; HYPNO db PAL_REDMON ; KRABBY db PAL_REDMON ; KINGLER db PAL_YELLOWMON ; VOLTORB db PAL_YELLOWMON ; ELECTRODE db PAL_PINKMON ; EXEGGCUTE db PAL_GREENMON ; EXEGGUTOR db PAL_GREYMON ; CUBONE db PAL_GREYMON ; MAROWAK db PAL_BROWNMON ; HITMONLEE db PAL_BROWNMON ; HITMONCHAN db PAL_PINKMON ; LICKITUNG db PAL_PURPLEMON ; KOFFING db PAL_PURPLEMON ; WEEZING db PAL_GREYMON ; RHYHORN db PAL_GREYMON ; RHYDON db PAL_PINKMON ; CHANSEY db PAL_BLUEMON ; TANGELA db PAL_BROWNMON ; KANGASKHAN db PAL_CYANMON ; HORSEA db PAL_CYANMON ; SEADRA db PAL_REDMON ; GOLDEEN db PAL_REDMON ; SEAKING db PAL_REDMON ; STARYU db PAL_GREYMON ; STARMIE db PAL_PINKMON ; MR_MIME db PAL_GREENMON ; SCYTHER db PAL_MEWMON ; JYNX db PAL_YELLOWMON ; ELECTABUZZ db PAL_REDMON ; MAGMAR db PAL_BROWNMON ; PINSIR db PAL_GREYMON ; TAUROS db PAL_REDMON ; MAGIKARP db PAL_BLUEMON ; GYARADOS db PAL_CYANMON ; LAPRAS db PAL_GREYMON ; DITTO db PAL_GREYMON ; EEVEE db PAL_CYANMON ; VAPOREON db PAL_YELLOWMON ; JOLTEON db PAL_REDMON ; FLAREON db PAL_GREYMON ; PORYGON db PAL_BLUEMON ; OMANYTE db PAL_BLUEMON ; OMASTAR db PAL_BROWNMON ; KABUTO db PAL_BROWNMON ; KABUTOPS db PAL_GREYMON ; AERODACTYL db PAL_PINKMON ; SNORLAX db PAL_BLUEMON ; ARTICUNO db PAL_YELLOWMON ; ZAPDOS db PAL_REDMON ; MOLTRES db PAL_GREYMON ; DRATINI db PAL_BLUEMON ; DRAGONAIR db PAL_BROWNMON ; DRAGONITE db PAL_MEWMON ; MEWTWO db PAL_MEWMON ; MEW ; palettes for overworlds, title screen, monsters SuperPalettes: ; 72660 (1c:6660) RGB 31,29,31 ; PAL_ROUTE RGB 21,28,11 RGB 20,26,31 RGB 3,2,2 RGB 31,29,31 ; PAL_PALLET RGB 25,28,27 RGB 20,26,31 RGB 3,2,2 RGB 31,29,31 ; PAL_VIRIDIAN RGB 17,26,3 RGB 20,26,31 RGB 3,2,2 RGB 31,29,31 ; PAL_PEWTER RGB 23,25,16 RGB 20,26,31 RGB 3,2,2 RGB 31,29,31 ; PAL_CERULEAN RGB 17,20,30 RGB 20,26,31 RGB 3,2,2 RGB 31,29,31 ; PAL_LAVENDER RGB 27,20,27 RGB 20,26,31 RGB 3,2,2 RGB 31,29,31 ; PAL_VERMILION RGB 30,18,0 RGB 20,26,31 RGB 3,2,2 RGB 31,29,31 ; PAL_CELADON RGB 16,30,22 RGB 20,26,31 RGB 3,2,2 RGB 31,29,31 ; PAL_FUCHSIA RGB 31,15,22 RGB 20,26,31 RGB 3,2,2 RGB 31,29,31 ; PAL_CINNABAR RGB 26,10,6 RGB 20,26,31 RGB 3,2,2 RGB 31,29,31 ; PAL_INDIGO RGB 22,14,24 RGB 20,26,31 RGB 3,2,2 RGB 31,29,31 ; PAL_SAFFRON RGB 27,27,3 RGB 20,26,31 RGB 3,2,2 RGB 31,29,31 ; PAL_TOWNMAP RGB 20,26,31 RGB 17,23,10 RGB 3,2,2 IF _RED RGB 31,29,31 ; PAL_LOGO1 RGB 30,30,17 RGB 17,23,10 RGB 21,0,4 ENDC IF _BLUE RGB 31,29,31 ; PAL_LOGO1 RGB 30,30,17 RGB 21,0,4 RGB 14,19,29 ENDC RGB 31,29,31 ; XXX RGB 30,30,17 RGB 18,18,24 RGB 7,7,16 RGB 31,29,31 ; PAL_LOGO2 RGB 24,20,30 RGB 11,20,30 RGB 3,2,2 RGB 31,29,31 ; PAL_MEWMON RGB 30,22,17 RGB 16,14,19 RGB 3,2,2 RGB 31,29,31 ; PAL_BLUEMON RGB 18,20,27 RGB 11,15,23 RGB 3,2,2 RGB 31,29,31 ; PAL_REDMON RGB 31,20,10 RGB 26,10,6 RGB 3,2,2 RGB 31,29,31 ; PAL_CYANMON RGB 21,25,29 RGB 14,19,25 RGB 3,2,2 RGB 31,29,31 ; PAL_PURPLEMON RGB 27,22,24 RGB 21,15,23 RGB 3,2,2 RGB 31,29,31 ; PAL_BROWNMON RGB 28,20,15 RGB 21,14,9 RGB 3,2,2 RGB 31,29,31 ; PAL_GREENMON RGB 20,26,16 RGB 9,20,11 RGB 3,2,2 RGB 31,29,31 ; PAL_PINKMON RGB 30,22,24 RGB 28,15,21 RGB 3,2,2 RGB 31,29,31 ; PAL_YELLOWMON RGB 31,28,14 RGB 26,20,0 RGB 3,2,2 RGB 31,29,31 ; PAL_GREYMON RGB 26,21,22 RGB 15,15,18 RGB 3,2,2 RGB 31,29,31 ; PAL_SLOTS1 RGB 26,21,22 RGB 27,20,6 RGB 3,2,2 RGB 31,29,31 ; PAL_SLOTS2 RGB 31,31,17 IF _RED RGB 25,17,21 ENDC IF _BLUE RGB 16,19,29 ENDC RGB 3,2,2 RGB 31,29,31 ; PAL_SLOTS3 RGB 22,31,16 IF _RED RGB 25,17,21 ENDC IF _BLUE RGB 16,19,29 ENDC RGB 3,2,2 RGB 31,29,31 ; PAL_SLOTS4 IF _RED RGB 16,19,29 RGB 25,17,21 ENDC IF _BLUE RGB 25,17,21 RGB 16,19,29 ENDC RGB 3,2,2 RGB 31,29,31 ; PAL_BLACK RGB 7,7,7 RGB 2,3,3 RGB 3,2,2 RGB 31,29,31 ; PAL_GREENBAR RGB 30,26,15 RGB 9,20,11 RGB 3,2,2 RGB 31,29,31 ; PAL_YELLOWBAR RGB 30,26,15 RGB 26,20,0 RGB 3,2,2 RGB 31,29,31 ; PAL_REDBAR RGB 30,26,15 RGB 26,10,6 RGB 3,2,2 RGB 31,29,31 ; PAL_BADGE RGB 30,22,17 RGB 11,15,23 RGB 3,2,2 RGB 31,29,31 ; PAL_CAVE RGB 21,14,9 RGB 18,24,22 RGB 3,2,2 RGB 31,29,31 ; XXX RGB 31,28,14 RGB 24,20,10 RGB 3,2,2 BorderPalettes: ; 72788 (1c:6788) IF _RED INCBIN "gfx/red/sgbborder.map" ENDC IF _BLUE INCBIN "gfx/blue/sgbborder.map" ENDC ds $56 Unknown_72ede: ; 72ede (1c:6ede) ds $AA IF _RED RGB 30,29,29 ; PAL_SGB1 RGB 25,22,25 RGB 25,17,21 RGB 24,14,12 ENDC IF _BLUE RGB 0,0,0 ; PAL_SGB1 (the first color is not defined, but if used, turns up as 30,29,29... o_O) RGB 10,17,26 RGB 5,9,20 RGB 16,20,27 ENDC ds $18 IF _RED RGB 30,29,29 ; PAL_SGB2 RGB 22,31,16 RGB 27,20,6 RGB 15,15,15 ENDC IF _BLUE RGB 30,29,29 ; PAL_SGB2 RGB 27,11,6 RGB 5,9,20 RGB 28,25,15 ENDC ds $18 IF _RED RGB 30,29,29 ; PAL_SGB3 RGB 31,31,17 RGB 18,21,29 RGB 15,15,15 ENDC IF _BLUE RGB 30,29,29 ; PAL_SGB3 RGB 12,15,11 RGB 5,9,20 RGB 14,22,17 ENDC ds $18 SGBBorderGraphics: ; 72fe8 (1c:6fe8) IF _RED INCBIN "gfx/red/sgbborder.2bpp" ENDC IF _BLUE INCBIN "gfx/blue/sgbborder.2bpp" ENDC LoadSAV: ; 735e8 (1c:75e8) ;(if carry -> write ;"the file data is destroyed") call ClearScreen call LoadFontTilePatterns call LoadTextBoxTilePatterns call LoadSAVCheckSum jr c, .badsum call LoadSAVCheckSum1 jr c, .badsum call LoadSAVCheckSum2 jr c, .badsum ld a, $2 ; good checksum jr .goodsum .badsum ld hl, $d730 push hl set 6, [hl] ld hl, FileDataDestroyedText ; $761e call PrintText ld c, $64 call DelayFrames pop hl res 6, [hl] ld a, $1 ; bad checksum .goodsum ld [$d088], a ; checksum flag ret FileDataDestroyedText: ; 7361e (1c:761e) TX_FAR _FileDataDestroyedText db "@" LoadSAVCheckSum: ; 73623 (1c:7623) ld a, $a ld [$0], a ld a, $1 ld [$6000], a ld [$4000], a ld hl, $a598 ; hero name located in SRAM ld bc, $f8b ; but here checks the full SAV call SAVCheckSum ld c, a ld a, [$b523] ; SAV's checksum cp c jp z, .Func_73652 ld hl, $a598 ld bc, $f8b call SAVCheckSum ld c, a ld a, [$b523] ; SAV's checksum cp c jp nz, SAVBadCheckSum .Func_73652 ; 73652 (1c:7652) ld hl, $a598 ld de, W_PLAYERNAME ; $d158 ld bc, $b call CopyData ld hl, $a5a3 ld de, wPokedexOwned ; $d2f7 ld bc, $789 call CopyData ld hl, W_CURMAPTILESET ; $d367 set 7, [hl] ld hl, $ad2c ld de, wSpriteStateData1 ld bc, $200 call CopyData ld a, [$b522] ld [$FF00+$d7], a ld hl, $b0c0 ld de, W_NUMINBOX ; $da80 ld bc, $462 call CopyData and a jp SAVGoodChecksum LoadSAVCheckSum1: ; 73690 (1c:7690) ld a, $a ld [$0], a ld a, $1 ld [$6000], a ld [$4000], a ld hl, $a598 ; hero name located in SRAM ld bc, $f8b ; but here checks the full SAV call SAVCheckSum ld c, a ld a, [$b523] ; SAV's checksum cp c jr nz, SAVBadCheckSum ld hl, $b0c0 ld de, W_NUMINBOX ; $da80 ld bc, $462 call CopyData and a jp SAVGoodChecksum LoadSAVCheckSum2: ; 736bd (1c:76bd) ld a, $a ld [$0], a ld a, $1 ld [$6000], a ld [$4000], a ld hl, $a598 ; hero name located in SRAM ld bc, $f8b ; but here checks the full SAV call SAVCheckSum ld c, a ld a, [$b523] ; SAV's checksum cp c jp nz, SAVBadCheckSum ld hl, $af2c ld de, W_NUMINPARTY ; $d163 ld bc, $194 call CopyData ld hl, $a5a3 ld de, wPokedexOwned ; $d2f7 ld bc, $26 call CopyData and a jp SAVGoodChecksum SAVBadCheckSum: ; 736f7 (1c:76f7) scf SAVGoodChecksum: ; 736f8 (1c:76f8) ld a, $0 ld [$6000], a ld [$0], a ret Func_73701: ; 0x73701 call LoadSAVCheckSum call LoadSAVCheckSum1 jp LoadSAVCheckSum2 SaveSAV: ;$770a ld b,1 ld hl,Func_5def ; LoadGameMenuInGame call Bankswitch ld hl,WouldYouLikeToSaveText call SaveSAVConfirm and a ;|0 = Yes|1 = No| ret nz ld a,[$d088] dec a jr z,.save call SAVCheckRandomID jr z,.save ld hl,OlderFileWillBeErasedText call SaveSAVConfirm and a ret nz .save ;$772d call SaveSAVtoSRAM ;$7848 FuncCoord 1,13 ld hl,Coord ld bc,$0412 call ClearScreenArea ; clear area 4x12 starting at 13,1 FuncCoord 1,14 ld hl,Coord ld de,NowSavingString call PlaceString ld c,$78 call DelayFrames ld hl,GameSavedText call PrintText ld a,$b6 ;sound for saved game call PlaySoundWaitForCurrent call WaitForSoundToFinish ld c,$1e jp DelayFrames NowSavingString: db "Now saving...@" SaveSAVConfirm: ; 73768 (1c:7768) call PrintText FuncCoord 0, 7 ld hl,Coord ld bc,$0801 ;arrow's coordinates |b = Y|c = X| ld a,$14 ;one line shifting ($28 = 2 lines) ld [$d125],a call DisplayTextBoxID ;handle Yes/No KeyPress ld a,[$cc26] ret WouldYouLikeToSaveText: ; 0x7377d TX_FAR _WouldYouLikeToSaveText db "@" GameSavedText: ; 73782 (1c:7782) TX_FAR _GameSavedText db "@" OlderFileWillBeErasedText: ; 73787 (1c:7787) TX_FAR _OlderFileWillBeErasedText db "@" SaveSAVtoSRAM0: ; 7378c (1c:778c) ld a, $a ld [$0], a ld a, $1 ld [$6000], a ld [$4000], a ld hl, W_PLAYERNAME ; $d158 ld de, $a598 ld bc, $b call CopyData ld hl, wPokedexOwned ; $d2f7 ld de, $a5a3 ld bc, $789 call CopyData ld hl, wSpriteStateData1 ; OAM? ld de, $ad2c ld bc, $200 call CopyData ld hl, W_NUMINBOX ; $da80 ld de, $b0c0 ld bc, $462 call CopyData ld a, [$FF00+$d7] ld [$b522], a ld hl, $a598 ld bc, $f8b call SAVCheckSum ld [$b523], a xor a ld [$6000], a ld [$0], a ret SaveSAVtoSRAM1: ; 737e2 (1c:77e2) ; stored pokémon ld a, $a ld [$0], a ld a, $1 ld [$6000], a ld [$4000], a ld hl, W_NUMINBOX ; $da80 ld de, $b0c0 ld bc, $462 call CopyData ld hl, $a598 ld bc, $f8b call SAVCheckSum ld [$b523], a xor a ld [$6000], a ld [$0], a ret SaveSAVtoSRAM2: ; 7380f (1c:780f) ld a, $a ld [$0], a ld a, $1 ld [$6000], a ld [$4000], a ld hl, W_NUMINPARTY ; $d163 ld de, $af2c ld bc, $194 call CopyData ld hl, wPokedexOwned ; pokédex only ld de, $a5a3 ld bc, $26 call CopyData ld hl, $a598 ld bc, $f8b call SAVCheckSum ld [$b523], a xor a ld [$6000], a ld [$0], a ret SaveSAVtoSRAM: ; 73848 (1c:7848) ld a, $2 ld [$d088], a call SaveSAVtoSRAM0 call SaveSAVtoSRAM1 jp SaveSAVtoSRAM2 SAVCheckSum: ; 73856 (1c:7856) ;Check Sum (result[1 byte] is complemented) ld d, $0 .loop ld a, [hli] add d ld d, a dec bc ld a, b or c jr nz, .loop ld a, d cpl ret Func_73863: ; 73863 (1c:7863) ld hl, $a000 ld de, $ba4d ld b, $6 .asm_7386b push bc push de ld bc, $462 call SAVCheckSum pop de ld [de], a inc de pop bc dec b jr nz, .asm_7386b ret Func_7387b: ; 7387b (1c:787b) ld hl, PointerTable_73895 ; $7895 ld a, [$d5a0] and $7f cp $6 ld b, $2 jr c, .asm_7388c inc b sub $6 .asm_7388c ld e, a ld d, $0 add hl, de add hl, de ld a, [hli] ld h, [hl] ld l, a ret PointerTable_73895: ; 73895 (1c:7895) dw $A000 dw $A462 dw $A8C4 dw $AD26 dw $B188 dw $B5EA Func_738a1:: ; 738a1 (1c:78a1) ld hl, UnnamedText_73909 ; $7909 call PrintText call YesNoChoice ld a, [wCurrentMenuItem] ; $cc26 and a ret nz ld hl, $d5a0 bit 7, [hl] call z, Func_73a29 call Func_7393f call UpdateSprites ld hl, $fff6 set 1, [hl] call HandleMenuInput ld hl, $fff6 res 1, [hl] bit 1, a ret nz call Func_7387b ld e, l ld d, h ld hl, W_NUMINBOX ; $da80 call Func_7390e ld a, [wCurrentMenuItem] ; $cc26 set 7, a ld [$d5a0], a call Func_7387b ld de, W_NUMINBOX ; $da80 call Func_7390e ld hl, W_MAPTEXTPTR ; $d36c ld de, wWhichTrade ; $cd3d ld a, [hli] ld [de], a inc de ld a, [hl] ld [de], a call Func_3f05 call SaveSAVtoSRAM ld hl, wWhichTrade ; $cd3d call Func_3f0f ld a, $b6 call PlaySoundWaitForCurrent call WaitForSoundToFinish ret UnnamedText_73909: ; 73909 (1c:7909) TX_FAR _UnnamedText_73909 db "@" Func_7390e: ; 7390e (1c:790e) push hl ld a, $a ld [$0], a ld a, $1 ld [$6000], a ld a, b ld [$4000], a ld bc, $462 call CopyData pop hl xor a ld [hli], a dec a ld [hl], a ld hl, $a000 ld bc, $1a4c call SAVCheckSum ld [$ba4c], a call Func_73863 xor a ld [$6000], a ld [$0], a ret Func_7393f: ; 7393f (1c:793f) xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld a, $3 ld [wMenuWatchedKeys], a ; $cc29 ld a, $b ld [wMaxMenuItem], a ; $cc28 ld a, $1 ld [wTopMenuItemY], a ; $cc24 ld a, $c ld [wTopMenuItemX], a ; $cc25 xor a ld [$cc37], a ld a, [$d5a0] and $7f ld [wCurrentMenuItem], a ; $cc26 ld [wLastMenuItem], a ; $cc2a ld hl, wTileMap ld b, $2 ld c, $9 call TextBoxBorder ld hl, UnnamedText_739d4 ; $79d4 call PrintText FuncCoord 11, 0 ; $c3ab ld hl, Coord ld b, $c ld c, $7 call TextBoxBorder ld hl, $fff6 set 2, [hl] ld de, BoxNames ; $79d9 FuncCoord 13, 1 ; $c3c1 ld hl, Coord call PlaceString ld hl, $fff6 res 2, [hl] ld a, [$d5a0] and $7f cp $9 jr c, .asm_739a6 sub $9 FuncCoord 8, 2 ; $c3d0 ld hl, Coord ld [hl], $f7 add $f6 jr .asm_739a8 .asm_739a6 add $f7 .asm_739a8 FuncCoord 9, 2 ; $c3d1 ld [Coord], a FuncCoord 1, 2 ; $c3c9 ld hl, Coord ld de, BoxNoText ; $7a21 call PlaceString call Func_73a84 FuncCoord 18, 1 ; $c3c6 ld hl, Coord ld de, wWhichTrade ; $cd3d ld bc, $14 ld a, $c .asm_739c2 push af ld a, [de] and a jr z, .asm_739c9 ld [hl], $78 .asm_739c9 add hl, bc inc de pop af dec a jr nz, .asm_739c2 ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ret UnnamedText_739d4: ; 739d4 (1c:79d4) TX_FAR _UnnamedText_739d4 db "@" BoxNames: ; 739d9 (1c:79d9) db "BOX 1" next "BOX 2" next "BOX 3" next "BOX 4" next "BOX 5" next "BOX 6" next "BOX 7" next "BOX 8" next "BOX 9" next "BOX10" next "BOX11" next "BOX12@" BoxNoText: ; 73a21 (1c:7a21) db "BOX No.@" Func_73a29: ; 73a29 (1c:7a29) ld a, $a ld [$0], a ld a, $1 ld [$6000], a ld a, $2 ld [$4000], a call Func_73a4b ld a, $3 ld [$4000], a call Func_73a4b xor a ld [$6000], a ld [$0], a ret Func_73a4b: ; 73a4b (1c:7a4b) ld hl, $a000 call Func_73a7f ld hl, $a462 call Func_73a7f ld hl, $a8c4 call Func_73a7f ld hl, $ad26 call Func_73a7f ld hl, $b188 call Func_73a7f ld hl, $b5ea call Func_73a7f ld hl, $a000 ld bc, $1a4c call SAVCheckSum ld [$ba4c], a call Func_73863 ret Func_73a7f: ; 73a7f (1c:7a7f) xor a ld [hli], a dec a ld [hl], a ret Func_73a84: ; 73a84 (1c:7a84) ld hl, wWhichTrade ; $cd3d push hl ld a, $a ld [$0], a ld a, $1 ld [$6000], a ld a, $2 ld [$4000], a call Func_73ab8 ld a, $3 ld [$4000], a call Func_73ab8 xor a ld [$6000], a ld [$0], a pop hl ld a, [$d5a0] and $7f ld c, a ld b, $0 add hl, bc ld a, [W_NUMINBOX] ; $da80 ld [hl], a ret Func_73ab8: ; 73ab8 (1c:7ab8) ld a, [$a000] ld [hli], a ld a, [$a462] ld [hli], a ld a, [$a8c4] ld [hli], a ld a, [$ad26] ld [hli], a ld a, [$b188] ld [hli], a ld a, [$b5ea] ld [hli], a ret SAVCheckRandomID: ;$7ad1 ;checks if Sav file is the same by checking player's name 1st letter ($a598) ; and the two random numbers generated at game beginning ;(which are stored at $d359-d35a) ld a,$0a ld [$0000],a ld a,$01 ld [$6000],a ld [$4000],a ld a,[$a598] and a jr z,.next ld hl,$a598 ld bc,$0f8b call SAVCheckSum ld c,a ld a,[$b523] cp c jr nz,.next ld hl,$a605 ld a,[hli] ld h,[hl] ld l,a ld a,[$d359] cp l jr nz,.next ld a,[$d35a] cp h .next ld a,$00 ld [$6000],a ld [$0000],a ret Func_73b0d: ; 73b0d (1c:7b0d) ld a, [$d5a2] dec a cp $32 jr nc, .asm_73b28 ld hl, $a598 ld bc, $60 call AddNTimes ld e, l ld d, h ld hl, $cc5b ld bc, $60 jr CopyToSRAM0 .asm_73b28 ld hl, $a5f8 ld de, $a598 ld bc, $1260 call CopyToSRAM0 ld hl, $cc5b ld de, $b7f8 ld bc, $60 jr CopyToSRAM0 Func_73b3f: ; 73b3f (1c:7b3f) ld hl, $a598 ld bc, $60 ld a, [wWhichTrade] ; $cd3d call AddNTimes ld de, $cc5b ld bc, $60 ; fallthrough CopyToSRAM0: ; 73b51 (1c:7b51) ld a, $a ld [$0], a ld a, $1 ld [$6000], a xor a ld [$4000], a call CopyData xor a ld [$6000], a ld [$0], a ret Func_73b6a: ; 73b6a (1c:7b6a) ld a, $a ld [$0], a ld a, $1 ld [$6000], a xor a call PadSRAM_FF ld a, $1 call PadSRAM_FF ld a, $2 call PadSRAM_FF ld a, $3 call PadSRAM_FF xor a ld [$6000], a ld [$0], a ret PadSRAM_FF: ; 73b8f (1c:7b8f) ld [$4000], a ld hl, $a000 ld bc, $2000 ld a, $ff jp FillMemory SECTION "bank1D",ROMX,BANK[$1D] CopycatsHouseF1Blocks: ; 74000 (1d:4000) INCBIN "maps/copycatshousef1.blk" CinnabarMartBlocks: ; 74010 (1d:4010) PewterMartBlocks: ; 74010 (1d:4010) INCBIN "maps/pewtermart.blk" FuchsiaHouse1Blocks: ; 74020 (1d:4020) INCBIN "maps/fuchsiahouse1.blk" CinnabarPokecenterBlocks: ; 74030 (1d:4030) FuchsiaPokecenterBlocks: ; 74030 (1d:4030) INCBIN "maps/fuchsiapokecenter.blk" CeruleanHouse2Blocks: ; 7404c (1d:404c) INCBIN "maps/ceruleanhouse2.blk" Func_7405c: ; 7405c (1d:405c) ld b, BANK(Func_701a0) ld hl, Func_701a0 call Bankswitch call ClearScreen ld c, $64 call DelayFrames call DisableLCD ld hl, $8800 ld bc, $400 call Func_74171 ld hl, $9600 ld bc, $100 call Func_74171 ld hl, $97e0 ld bc, $10 ld a, $ff call FillMemory ld hl, wTileMap call Func_7417b FuncCoord 0, 14 ; $c4b8 ld hl, Coord call Func_7417b ld a, $c0 ld [rBGP], a ; $FF00+$47 call EnableLCD ld a, $ff call PlaySoundWaitForCurrent ld c, BANK(Music_Credits) ld a, MUSIC_CREDITS call PlayMusic ld c, $80 call DelayFrames xor a ld [wWhichTrade], a ; $cd3d ld [$cd3e], a jp Func_7418e Func_740ba: ; 740ba (1d:40ba) ld hl, DataTable_74160 ; $4160 ld b, $4 .asm_740bf ld a, [hli] ld [rBGP], a ; $FF00+$47 ld c, $5 call DelayFrames dec b jr nz, .asm_740bf ret DisplayCreditsMon: ; 740cb (1d:40cb) xor a ld [H_AUTOBGTRANSFERENABLED],a call SaveScreenTilesToBuffer1 call FillMiddleOfScreenWithWhite ; display the next monster from CreditsMons ld hl,$CD3E ld c,[hl] ; how many monsters have we displayed so far? inc [hl] ld b,0 ld hl,CreditsMons add hl,bc ; go that far in the list of monsters and get the next one ld a,[hl] ld [$CF91],a ld [$D0B5],a FuncCoord 8, 6 ; $c420 ld hl,Coord call GetMonHeader call LoadFrontSpriteByMonIndex ld hl,$980C call Func_74164 xor a ld [H_AUTOBGTRANSFERENABLED],a call LoadScreenTilesFromBuffer1 ld hl,$9800 call Func_74164 ld a,$A7 ld [$FF4B],a ld hl,$9C00 call Func_74164 call FillMiddleOfScreenWithWhite ld a,$FC ld [$FF47],a ld bc,7 .next call Func_74140 dec c jr nz,.next ld c,$14 .next2 call Func_74140 ld a,[$FF4B] sub 8 ld [$FF4B],a dec c jr nz,.next2 xor a ld [$FFB0],a ld a,$C0 ld [$FF47],a ret CreditsMons: ; 74131 (1d:4131) db VENUSAUR db ARBOK db RHYHORN db FEAROW db ABRA db GRAVELER db HITMONLEE db TANGELA db STARMIE db GYARADOS db DITTO db OMASTAR db VILEPLUME db NIDOKING db PARASECT Func_74140: ; 74140 (1d:4140) ld h, b ld l, $20 call Func_74152 ld h, $0 ld l, $70 call Func_74152 ld a, b add $8 ld b, a ret Func_74152: ; 74152 (1d:4152) ld a, [$FF00+$44] cp l jr nz, Func_74152 ld a, h ld [rSCX], a ; $FF00+$43 .asm_7415a ld a, [$FF00+$44] cp h jr z, .asm_7415a ret DataTable_74160: ; 74160 (1d:4160) db $C0,$D0,$E0,$F0 Func_74164: ; 74164 (1d:4164) ld a, l ld [H_AUTOBGTRANSFERDEST], a ; $FF00+$bc ld a, h ld [$FF00+$bd], a ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba jp Delay3 Func_74171: ; 74171 (1d:4171) ld [hl], $0 inc hl inc hl dec bc ld a, b or c jr nz, Func_74171 ret Func_7417b: ; 7417b (1d:417b) ld bc, $50 ld a, $7e jp FillMemory FillMiddleOfScreenWithWhite: ; 74183 (1d:4183) FuncCoord 0, 4 ; $c3f0 ld hl, Coord ld bc, $c8 ; 10 rows of 20 tiles each ld a, $7f ; blank white tile jp FillMemory Func_7418e: ; 7418e (1d:418e) ld de, CreditsOrder ; $4243 push de .asm_74192 pop de FuncCoord 9, 6 ; $c421 ld hl, Coord push hl call FillMiddleOfScreenWithWhite pop hl .asm_7419b ld a, [de] inc de push de cp $ff jr z, .asm_741d5 cp $fe jr z, .asm_741dc cp $fd jr z, .asm_741e6 cp $fc jr z, .asm_741ed cp $fb jr z, .asm_741f4 cp $fa jr z, .showTheEnd push hl push hl ld hl, CreditsTextPointers ; $42c3 add a ld c, a ld b, $0 add hl, bc ld e, [hl] inc hl ld d, [hl] ld a, [de] inc de ld c, a ld b, $ff pop hl add hl, bc call PlaceString pop hl ld bc, $28 add hl, bc pop de jr .asm_7419b .asm_741d5 call Func_740ba ld c, $5a jr .asm_741de .asm_741dc ld c, $6e .asm_741de call DelayFrames call DisplayCreditsMon jr .asm_74192 .asm_741e6 call Func_740ba ld c, $78 jr .asm_741ef .asm_741ed ld c, $8c .asm_741ef call DelayFrames jr .asm_74192 .asm_741f4 push de ld b, BANK(Func_4541) ld hl, Func_4541 call Bankswitch pop de pop de jr .asm_7419b .showTheEnd ld c, $10 call DelayFrames call FillMiddleOfScreenWithWhite pop de ld de, TheEndGfx ld hl, $9600 ld bc, (BANK(TheEndGfx) << 8) + $0a call CopyVideoData FuncCoord 4, 8 ; $c444 ld hl, Coord ld de, UnnamedText_74229 ; $4229 call PlaceString FuncCoord 4, 9 ; $c458 ld hl, Coord inc de call PlaceString jp Func_740ba UnnamedText_74229: ; 74229 (1d:4229) db $60," ",$62," ",$64," ",$64," ",$66," ",$68,"@" db $61," ",$63," ",$65," ",$65," ",$67," ",$69,"@" CreditsOrder: ; 74243 (1d:4243) ; subsequent credits elements will be displayed on separate lines. ; $FF, $FE, $FD, $FC, $FB, and $FA are commands that are used ; to go to the next set of credits texts. db CRED_MON, CRED_VERSION, $FF db CRED_DIRECTOR, CRED_TAJIRI, $FF db CRED_PROGRAMMERS, CRED_TA_OOTA, CRED_MORIMOTO, $FD db CRED_PROGRAMMERS, CRED_WATANABE, CRED_MASUDE, CRED_TAMADA, $FE db CRED_CHAR_DESIGN, CRED_SUGIMORI, CRED_NISHIDA, $FF db CRED_MUSIC, CRED_MASUDE, $FD db CRED_SOUND_EFFECTS, CRED_MASUDE, $FE db CRED_GAME_DESIGN, CRED_TAJIRI, $FF db CRED_MONSTER_DESIGN, CRED_SUGIMORI, CRED_NISHIDA, CRED_FUZIWARA, $FD db CRED_MONSTER_DESIGN, CRED_MORIMOTO, CRED_SA_OOTA, CRED_YOSHIKAWA, $FE db CRED_GAME_SCENE, CRED_TAJIRI, $FD db CRED_GAME_SCENE, CRED_TANIGUCHI, CRED_NONOMURA, CRED_ZINNAI, $FE db CRED_PARAM, CRED_NISINO, CRED_TA_NAKAMURA, $FF db CRED_MAP, CRED_TAJIRI, CRED_NISINO, $FD db CRED_MAP, CRED_MATSUSIMA, CRED_NONOMURA, CRED_TANIGUCHI, $FE db CRED_TEST, CRED_KAKEI, CRED_TSUCHIYA, $FD db CRED_TEST, CRED_TA_NAKAMURA, CRED_YUDA, $FE db CRED_SPECIAL, CRED_HISHIDA, CRED_SAKAI, $FD db CRED_SPECIAL, CRED_YAMAGUCHI, CRED_YAMAMOTO, $FC db CRED_SPECIAL, CRED_TOMISAWA, CRED_KAWAMOTO, CRED_TO_OOTA, $FE db CRED_PRODUCERS, CRED_MIYAMOTO, $FD db CRED_PRODUCERS, CRED_KAWAGUCHI, $FC db CRED_PRODUCERS, CRED_ISHIHARA, $FE db CRED_US_STAFF, $FD db CRED_US_COORD, CRED_TILDEN, $FD db CRED_US_COORD, CRED_KAWAKAMI, CRED_HI_NAKAMURA, $FC db CRED_US_COORD, CRED_GIESE, CRED_OSBORNE, $FC db CRED_TRANS, CRED_OGASAWARA, $FD db CRED_PROGRAMMERS, CRED_MURAKAWA, CRED_FUKUI, $FD db CRED_SPECIAL, CRED_IWATA, $FD db CRED_SPECIAL, CRED_HARADA, $FC db CRED_TEST, CRED_PAAD, CRED_CLUB, $FD db CRED_PRODUCER, CRED_IZUSHI, $FD db CRED_EXECUTIVE, CRED_YAMAUCHI, $FF db $FB, $FF, $FA CreditsTextPointers: ; 742c3 (1d:42c3) dw CredVersion dw CredTajiri dw CredTaOota dw CredMorimoto dw CredWatanabe dw CredMasuda dw CredNisino dw CredSugimori dw CredNishida dw CredMiyamoto dw CredKawaguchi dw CredIshihara dw CredYamauchi dw CredZinnai dw CredHishida dw CredSakai dw CredYamaguchi dw CredYamamoto dw CredTaniguchi dw CredNonomura dw CredFuziwara dw CredMatsusima dw CredTomisawa dw CredKawamoto dw CredKakei dw CredTsuchiya dw CredTaNakamura dw CredYuda dw CredMon dw CredDirector dw CredProgrammers dw CredCharDesign dw CredMusic dw CredSoundEffects dw CredGameDesign dw CredMonsterDesign dw CredGameScene dw CredParam dw CredMap dw CredTest dw CredSpecial dw CredProducers dw CredProducer dw CredExecutive dw CredTamada dw CredSaOota dw CredYoshikawa dw CredToOota dw CredUSStaff dw CredUSCoord dw CredTilden dw CredKawakami dw CredHiNakamura dw CredGiese dw CredOsborne dw CredTrans dw CredOgasawara dw CredIwata dw CredIzushi dw CredHarada dw CredMurakawa dw CredFukui dw CredClub dw CredPAAD CredVersion: ; 74343 (1d:4343) ; this 1 byte difference makes all bank addresses offset by 1 in the blue version IF _RED db "2RED VERSION STAFF@" ENDC IF _BLUE db "2BLUE VERSION STAFF@" ENDC CredTajiri: ; 74356 (1d:4356) db "4SATOSHI TAJIRI@" CredTaOota: ; 74366 (1d:4366) db "4TAKENORI OOTA@" CredMorimoto: ; 74375 (1d:4375) db "3SHIGEKI MORIMOTO@" CredWatanabe: ; 74387 (1d:4387) db "3TETSUYA WATANABE@" CredMasuda: ; 74399 (1d:4399) db "4JUNICHI MASUDA@" CredNisino: ; 743a9 (1d:43a9) db "5KOHJI NISINO@" CredSugimori: ; 743b7 (1d:43b7) db "5KEN SUGIMORI@" CredNishida: ; 743c5 (1d:43c5) db "4ATSUKO NISHIDA@" CredMiyamoto: ; 743d5 (1d:43d5) db "3SHIGERU MIYAMOTO@" CredKawaguchi: ; 743e7 (1d:43e7) db "2TAKASHI KAWAGUCHI@" CredIshihara: ; 743fa (1d:43fa) db "2TSUNEKAZU ISHIHARA@" CredYamauchi: ; 7440e (1d:440e) db "3HIROSHI YAMAUCHI@" CredZinnai: ; 74420 (1d:4420) db "3HIROYUKI ZINNAI@" CredHishida: ; 74431 (1d:4431) db "3TATSUYA HISHIDA@" CredSakai: ; 74442 (1d:4442) db "4YASUHIRO SAKAI@" CredYamaguchi: ; 74452 (1d:4452) db "3WATARU YAMAGUCHI@" CredYamamoto: ; 74464 (1d:4464) db "2KAZUYUKI YAMAMOTO@" CredTaniguchi: ; 74477 (1d:4477) db "2RYOHSUKE TANIGUCHI@" CredNonomura: ; 7448b (1d:448b) db "2FUMIHIRO NONOMURA@" CredFuziwara: ; 7449e (1d:449e) db "3MOTOFUMI FUZIWARA@" CredMatsusima: ; 744b1 (1d:44b1) db "3KENJI MATSUSIMA@" CredTomisawa: ; 744c2 (1d:44c2) db "3AKIHITO TOMISAWA@" CredKawamoto: ; 744d4 (1d:44d4) db "3HIROSHI KAWAMOTO@" CredKakei: ; 744e6 (1d:44e6) db "4AKIYOSHI KAKEI@" CredTsuchiya: ; 744f6 (1d:44f6) db "3KAZUKI TSUCHIYA@" CredTaNakamura: ; 74507 (1d:4507) db "4TAKEO NAKAMURA@" CredYuda: ; 74517 (1d:4517) db "4MASAMITSU YUDA@" CredMon: ; 74527 (1d:4527) db "7#MON@" CredDirector: ; 7452d (1d:452d) db "7DIRECTOR@" CredProgrammers: ; 74537 (1d:4537) db "5PROGRAMMERS@" CredCharDesign: ; 74544 (1d:4544) db "3CHARACTER DESIGN@" CredMusic: ; 74556 (1d:4556) db "8MUSIC@" CredSoundEffects: ; 7455d (1d:455d) db "4SOUND EFFECTS@" CredGameDesign: ; 7456c (1d:456c) db "5GAME DESIGN@" CredMonsterDesign: ; 74579 (1d:4579) db "4MONSTER DESIGN@" CredGameScene: ; 74589 (1d:4589) db "4GAME SCENARIO@" CredParam: ; 74598 (1d:4598) db "2PARAMETRIC DESIGN@" CredMap: ; 745ab (1d:45ab) db "6MAP DESIGN@" CredTest: ; 745b7 (1d:45b7) db "3PRODUCT TESTING@" CredSpecial: ; 745c8 (1d:45c8) db "4SPECIAL THANKS@" CredProducers: ; 745d8 (1d:45d8) db "6PRODUCERS@" CredProducer: ; 745e3 (1d:45e3) db "6PRODUCER@" CredExecutive: ; 745ed (1d:45ed) db "2EXECUTIVE PRODUCER@" CredTamada: ; 74601 (1d:4601) db "4SOUSUKE TAMADA@" CredSaOota: ; 74611 (1d:4611) db "5SATOSHI OOTA@" CredYoshikawa: ; 7461f (1d:461f) db "4RENA YOSHIKAWA@" CredToOota: ; 7462f (1d:462f) db "4TOMOMICHI OOTA@" CredUSStaff: ; 7463f (1d:463f) db "3US VERSION STAFF@" CredUSCoord: ; 74651 (1d:4651) db "3US COORDINATION@" CredTilden: ; 74662 (1d:4662) db "5GAIL TILDEN@" CredKawakami: ; 7466f (1d:466f) db "4NAOKO KAWAKAMI@" CredHiNakamura: ; 7467f (1d:467f) db "4HIRO NAKAMURA@" CredGiese: ; 7468e (1d:468e) db "4WILLIAM GIESE@" CredOsborne: ; 7469d (1d:469d) db "5SARA OSBORNE@" CredTrans: ; 746ab (1d:46ab) db "3TEXT TRANSLATION@" CredOgasawara: ; 746bd (1d:46bd) db "4NOB OGASAWARA@" CredIwata: ; 746cc (1d:46cc) db "5SATORU IWATA@" CredIzushi: ; 746da (1d:46da) db "3TAKEHIRO IZUSHI@" CredHarada: ; 746eb (1d:46eb) db "3TAKAHIRO HARADA@" CredMurakawa: ; 746fc (1d:46fc) db "3TERUKI MURAKAWA@" CredFukui: ; 7470d (1d:470d) db "5KOHTA FUKUI@" CredClub: ; 7471a (1d:471a) db "1NCL SUPER MARIO CLUB@" CredPAAD: ; 74730 (1d:4730) db "5PAAD TESTING@" TheEndGfx: ; 7473e (1d:473e) ; 473E (473F on blue) INCBIN "gfx/theend.2bpp" PrintStatusAilment: ; 747de (1d:47de) ld a, [de] bit 3, a jr nz, .psn bit 4, a jr nz, .brn bit 5, a jr nz, .frz bit 6, a jr nz, .par and $7 ; slp ret z ld a, "S" ld [hli], a ld a, "L" ld [hli], a ld [hl], "P" ret .psn ld a, "P" ld [hli], a ld a, "S" ld [hli], a ld [hl], "N" ret .brn ld a, "B" ld [hli], a ld a, "R" ld [hli], a ld [hl], "N" ret .frz ld a, "F" ld [hli], a ld a, "R" ld [hli], a ld [hl], "Z" ret .par ld a, "P" ld [hli], a ld a, "A" ld [hli], a ld [hl], "R" ret HiddenItemNear: ; 7481f (1d:481f) ld hl, HiddenItemCoords ld b, $0 .asm_74824 ld de, $0003 ld a, [W_CURMAP] call IsInArrayCummulativeCount ret nc ; return if current map has no hidden items push bc push hl ld hl, $d6f0 ld c, b ld b, $2 ld a, $10 call Predef ; indirect jump to HandleBitArray (f666 (3:7666)) ld a, c pop hl pop bc inc b and a inc hl ld d, [hl] inc hl ld e, [hl] inc hl jr nz, .asm_74824 ; 0x74845 $dd ld a, [$d361] call Func_7486b cp d jr nc, .asm_74824 ; 0x7484e $d4 ld a, [$d361] add $4 cp d jr c, .asm_74824 ; 0x74856 $cc ld a, [$d362] call Func_7486b cp e jr nc, .asm_74824 ; 0x7485f $c3 ld a, [$d362] add $5 cp e jr c, .asm_74824 ; 0x74867 $bb scf ret Func_7486b: ; 7486b (1d:486b) sub $5 cp $f0 ret c xor a ret Func_74872: ; 74872 (1d:4872) ; code similar to this appears in a lot of banks; this particular ; one is called after you beat the Rocket that gives you TM28 DIG. ; the screen then fades out, he disappears, and fades back in call GBFadeIn1 ld a, $07 ld [$CC4D], a ld a, $15 call Predef ld a, $09 ld [$CC4D], a ld a, $11 call Predef ld a, $06 ld [$CC4D], a ld a, $11 call Predef call GBFadeOut1 ret ViridianGym_h: ; 0x74897 to 0x748a3 (12 bytes) (id=45) db $07 ; tileset db VIRIDIAN_GYM_HEIGHT, VIRIDIAN_GYM_WIDTH ; dimensions (y, x) dw ViridianGymBlocks, ViridianGymTextPointers, ViridianGymScript ; blocks, texts, scripts db $00 ; connections dw ViridianGymObject ; objects ViridianGymScript: ; 748a3 (1d:48a3) ld hl, Gym8CityName ld de, Gym8LeaderName call LoadGymLeaderAndCityName call EnableAutoTextBoxDrawing ld hl, ViridianGymTrainerHeaders ld de, ViridianGymScriptPointers ld a, [W_VIRIDIANGYMCURSCRIPT] call ExecuteCurMapScriptInTable ld [W_VIRIDIANGYMCURSCRIPT], a ret Gym8CityName: ; 748bf (1d:48bf) db "VIRIDIAN CITY@" Gym8LeaderName: ; 748cd (1d:48cd) db "GIOVANNI@" Func_748d6: ; 748d6 (1d:48d6) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_VIRIDIANGYMCURSCRIPT], a ld [W_CURMAPSCRIPT], a ret ViridianGymScriptPointers: ; 748e1 (1d:48e1) dw ViridianGymScript0 dw Func_324c dw EndTrainerBattle dw ViridianGymScript3 dw ViridianGymScript4 ViridianGymScript0: ; 748eb (1d:48eb) ld a, [W_YCOORD] ; $d361 ld b, a ld a, [W_XCOORD] ; $d362 ld c, a ld hl, ViridianGymArrowTilePlayerMovement call Func_3442 cp $ff jp z, CheckFightingMapTrainers call Func_3486 ld hl, $d736 set 7, [hl] ld a, $a7 call PlaySound ld a, $ff ld [wJoypadForbiddenButtonsMask], a ld a, $4 ld [W_CURMAPSCRIPT], a ret ;format: ;db y,x ;dw pointer to movement ViridianGymArrowTilePlayerMovement: ; 74916 (1d:4916) db $b,$13 dw ViridianGymArrowMovement1 db $1,$13 dw ViridianGymArrowMovement2 db $2,$12 dw ViridianGymArrowMovement3 db $2,$b dw ViridianGymArrowMovement4 db $a,$10 dw ViridianGymArrowMovement5 db $6,$4 dw ViridianGymArrowMovement6 db $d,$5 dw ViridianGymArrowMovement7 db $e,$4 dw ViridianGymArrowMovement8 db $f,$0 dw ViridianGymArrowMovement9 db $f,$1 dw ViridianGymArrowMovement10 db $10,$d dw ViridianGymArrowMovement11 db $11,$d dw ViridianGymArrowMovement12 db $FF ;format: direction, count ;right: $10 ;left: $20 ;up: $40 ;down: $80 ViridianGymArrowMovement1: ; 74947 (1d:4947) db $40,$09,$FF ViridianGymArrowMovement2: ; 7494a (1d:494a) db $20,$08,$FF ViridianGymArrowMovement3: ; 7494d (1d:494d) db $80,$09,$FF ViridianGymArrowMovement4: ; 74950 (1d:4950) db $10,$06,$FF ViridianGymArrowMovement5: ; 74953 (1d:4953) db $80,$02,$FF ViridianGymArrowMovement6: ; 74956 (1d:4956) db $80,$07,$FF ViridianGymArrowMovement7: ; 74959 (1d:4959) db $10,$08,$FF ViridianGymArrowMovement8: ; 7495c (1d:495c) db $10,$09,$FF ViridianGymArrowMovement9: ; 7495f (1d:495f) db $40,$08,$FF ViridianGymArrowMovement10: ; 74962 (1d:4962) db $40,$06,$FF ViridianGymArrowMovement11: ; 74965 (1d:4965) db $20,$06,$FF ViridianGymArrowMovement12: ; 74968 (1d:4968) db $20,$0C,$FF ViridianGymScript4: ; 7496b (1d:496b) ld a, [$cd38] and a jr nz, .asm_74980 xor a ld [wJoypadForbiddenButtonsMask], a ld hl, $d736 res 7, [hl] ld a, $0 ld [W_CURMAPSCRIPT], a ret .asm_74980 ld b, BANK(Func_44fd7) ld hl, Func_44fd7 jp Bankswitch ViridianGymScript3: ; 74988 (1d:4988) ld a, [W_ISINBATTLE] ; $d057 cp $ff jp z, Func_748d6 ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ViridianGymScript3_74995: ; 74995 (1d:4995) ld a, $c ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld hl, $d751 set 1, [hl] ld bc, (TM_27 << 8) | 1 call GiveItem jr nc, .BagFull ld a, $d ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld hl, $d751 set 0, [hl] jr .asm_749be .BagFull ld a, $e ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID .asm_749be ld hl, W_OBTAINEDBADGES ; $d356 set 7, [hl] ld hl, $d72a set 7, [hl] ld a, [$d751] or $fc ld [$d751], a ld a, [$d752] or $3 ld [$d752], a ld a, $23 ld [$cc4d], a ld a, $15 call Predef ; indirect jump to AddMissableObject (f1c8 (3:71c8)) ld hl, $d7eb set 1, [hl] set 7, [hl] jp Func_748d6 ViridianGymTextPointers: ; 749ec (1d:49ec) dw ViridianGymText1 dw ViridianGymText2 dw ViridianGymText3 dw ViridianGymText4 dw ViridianGymText5 dw ViridianGymText6 dw ViridianGymText7 dw ViridianGymText8 dw ViridianGymText9 dw ViridianGymText10 dw Predef5CText dw ViridianGymText12 dw ViridianGymText13 dw ViridianGymText14 ViridianGymTrainerHeaders: ; 74a08 (1d:4a08) ViridianGymTrainerHeader0: ; 74a08 (1d:4a08) db $2 ; flag's bit db ($4 << 4) ; trainer's view range dw $d751 ; flag's byte dw ViridianGymBattleText1 ; 0x4afd TextBeforeBattle dw ViridianGymAfterBattleText1 ; 0x4b07 TextAfterBattle dw ViridianGymEndBattleText1 ; 0x4b02 TextEndBattle dw ViridianGymEndBattleText1 ; 0x4b02 TextEndBattle ViridianGymTrainerHeader1: ; 74a14 (1d:4a14) db $3 ; flag's bit db ($4 << 4) ; trainer's view range dw $d751 ; flag's byte dw ViridianGymBattleText2 ; 0x4b16 TextBeforeBattle dw ViridianGymAfterBattleText2 ; 0x4b20 TextAfterBattle dw ViridianGymEndBattleText2 ; 0x4b1b TextEndBattle dw ViridianGymEndBattleText2 ; 0x4b1b TextEndBattle ViridianGymTrainerHeader2: ; 74a20 (1d:4a20) db $4 ; flag's bit db ($4 << 4) ; trainer's view range dw $d751 ; flag's byte dw ViridianGymBattleText3 ; 0x4b2f TextBeforeBattle dw ViridianGymAfterBattleText3 ; 0x4b39 TextAfterBattle dw ViridianGymEndBattleText3 ; 0x4b34 TextEndBattle dw ViridianGymEndBattleText3 ; 0x4b34 TextEndBattle ViridianGymTrainerHeader3: ; 74a2c (1d:4a2c) db $5 ; flag's bit db ($2 << 4) ; trainer's view range dw $d751 ; flag's byte dw ViridianGymBattleText4 ; 0x4b48 TextBeforeBattle dw ViridianGymAfterBattleText4 ; 0x4b52 TextAfterBattle dw ViridianGymEndBattleText4 ; 0x4b4d TextEndBattle dw ViridianGymEndBattleText4 ; 0x4b4d TextEndBattle ViridianGymTrainerHeader4: ; 74a38 (1d:4a38) db $6 ; flag's bit db ($3 << 4) ; trainer's view range dw $d751 ; flag's byte dw ViridianGymBattleText5 ; 0x4b61 TextBeforeBattle dw ViridianGymAfterBattleText5 ; 0x4b6b TextAfterBattle dw ViridianGymEndBattleText5 ; 0x4b66 TextEndBattle dw ViridianGymEndBattleText5 ; 0x4b66 TextEndBattle ViridianGymTrainerHeader5: ; 74a44 (1d:4a44) db $7 ; flag's bit db ($4 << 4) ; trainer's view range dw $d751 ; flag's byte dw ViridianGymBattleText6 ; 0x4b7a TextBeforeBattle dw ViridianGymAfterBattleText6 ; 0x4b84 TextAfterBattle dw ViridianGymEndBattleText6 ; 0x4b7f TextEndBattle dw ViridianGymEndBattleText6 ; 0x4b7f TextEndBattle ViridianGymTrainerHeader6: ; 74a50 (1d:4a50) db $8 ; flag's bit db ($3 << 4) ; trainer's view range dw $d751 ; flag's byte dw ViridianGymBattleText7 ; 0x4b93 TextBeforeBattle dw ViridianGymAfterBattleText7 ; 0x4b9d TextAfterBattle dw ViridianGymEndBattleText7 ; 0x4b98 TextEndBattle dw ViridianGymEndBattleText7 ; 0x4b98 TextEndBattle ViridianGymTrainerHeader7: ; 74a5c (1d:4a5c) db $9 ; flag's bit db ($4 << 4) ; trainer's view range dw $d751 ; flag's byte dw ViridianGymBattleText8 ; 0x4bac TextBeforeBattle dw ViridianGymAfterBattleText8 ; 0x4bb6 TextAfterBattle dw ViridianGymEndBattleText8 ; 0x4bb1 TextEndBattle dw ViridianGymEndBattleText8 ; 0x4bb1 TextEndBattle db $ff ViridianGymText1: ; 74a69 (1d:4a69) db $08 ; asm ld a, [$d751] bit 1, a jr z, .asm_6de66 ; 0x74a6f bit 0, a jr nz, .asm_9fc95 ; 0x74a73 call z, ViridianGymScript3_74995 call DisableWaitingAfterTextDisplay jr .asm_6dff7 ; 0x74a7b .asm_9fc95 ; 0x74a7d ld a, $1 ld [$cc3c], a ld hl, UnnamedText_74ad9 call PrintText call GBFadeIn1 ld a, $32 ld [$cc4d], a ld a, $11 call Predef call UpdateSprites call Delay3 call GBFadeOut1 jr .asm_6dff7 ; 0x74a9e .asm_6de66 ; 0x74aa0 ld hl, UnnamedText_74ace call PrintText ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, UnnamedText_74ad3 ld de, UnnamedText_74ad3 call PreBattleSaveRegisters ldh a, [$8c] ld [$cf13], a call EngageMapTrainer call InitBattleEnemyParameters ld a, $8 ld [$d05c], a ld a, $3 ld [W_VIRIDIANGYMCURSCRIPT], a .asm_6dff7 ; 0x74acb jp TextScriptEnd UnnamedText_74ace: ; 74ace (1d:4ace) TX_FAR _UnnamedText_74ace db "@" UnnamedText_74ad3: ; 74ad3 (1d:4ad3) TX_FAR _UnnamedText_74ad3 db $0b, "@" UnnamedText_74ad9: ; 74ad9 (1d:4ad9) TX_FAR _UnnamedText_74ad9 db $0d, "@" ViridianGymText12: ; 74adf (1d:4adf) TX_FAR _ViridianGymText12 db "@" ViridianGymText13: ; 74ae4 (1d:4ae4) TX_FAR _ReceivedTM27Text db $0b TM27ExplanationText: ; 74ae9 (1d:4ae9) TX_FAR _TM27ExplanationText db "@" ViridianGymText14: ; 74aee (1d:4aee) TX_FAR _TM27NoRoomText db "@" ViridianGymText2: ; 74af3 (1d:4af3) db $08 ; asm ld hl, ViridianGymTrainerHeader0 call TalkToTrainer jp TextScriptEnd ViridianGymBattleText1: ; 74afd (1d:4afd) TX_FAR _ViridianGymBattleText1 db "@" ViridianGymEndBattleText1: ; 74b02 (1d:4b02) TX_FAR _ViridianGymEndBattleText1 db "@" ViridianGymAfterBattleText1: ; 74b07 (1d:4b07) TX_FAR _ViridianGymAfterBattleText1 db "@" ViridianGymText3: ; 74b0c (1d:4b0c) db $08 ; asm ld hl, ViridianGymTrainerHeader1 call TalkToTrainer jp TextScriptEnd ViridianGymBattleText2: ; 74b16 (1d:4b16) TX_FAR _ViridianGymBattleText2 db "@" ViridianGymEndBattleText2: ; 74b1b (1d:4b1b) TX_FAR _ViridianGymEndBattleText2 db "@" ViridianGymAfterBattleText2: ; 74b20 (1d:4b20) TX_FAR _ViridianGymAfterBattleText2 db "@" ViridianGymText4: ; 74b25 (1d:4b25) db $08 ; asm ld hl, ViridianGymTrainerHeader2 call TalkToTrainer jp TextScriptEnd ViridianGymBattleText3: ; 74b2f (1d:4b2f) TX_FAR _ViridianGymBattleText3 db "@" ViridianGymEndBattleText3: ; 74b34 (1d:4b34) TX_FAR _ViridianGymEndBattleText3 db "@" ViridianGymAfterBattleText3: ; 74b39 (1d:4b39) TX_FAR _ViridianGymAfterBattleText3 db "@" ViridianGymText5: ; 74b3e (1d:4b3e) db $08 ; asm ld hl, ViridianGymTrainerHeader3 call TalkToTrainer jp TextScriptEnd ViridianGymBattleText4: ; 74b48 (1d:4b48) TX_FAR _ViridianGymBattleText4 db "@" ViridianGymEndBattleText4: ; 74b4d (1d:4b4d) TX_FAR _ViridianGymEndBattleText4 db "@" ViridianGymAfterBattleText4: ; 74b52 (1d:4b52) TX_FAR _ViridianGymAfterBattleText4 db "@" ViridianGymText6: ; 74b57 (1d:4b57) db $08 ; asm ld hl, ViridianGymTrainerHeader4 call TalkToTrainer jp TextScriptEnd ViridianGymBattleText5: ; 74b61 (1d:4b61) TX_FAR _ViridianGymBattleText5 db "@" ViridianGymEndBattleText5: ; 74b66 (1d:4b66) TX_FAR _ViridianGymEndBattleText5 db "@" ViridianGymAfterBattleText5: ; 74b6b (1d:4b6b) TX_FAR _ViridianGymAfterBattleText5 db "@" ViridianGymText7: ; 74b70 (1d:4b70) db $08 ; asm ld hl, ViridianGymTrainerHeader5 call TalkToTrainer jp TextScriptEnd ViridianGymBattleText6: ; 74b7a (1d:4b7a) TX_FAR _ViridianGymBattleText6 db "@" ViridianGymEndBattleText6: ; 74b7f (1d:4b7f) TX_FAR _ViridianGymEndBattleText6 db "@" ViridianGymAfterBattleText6: ; 74b84 (1d:4b84) TX_FAR _ViridianGymAfterBattleText6 db "@" ViridianGymText8: ; 74b89 (1d:4b89) db $08 ; asm ld hl, ViridianGymTrainerHeader6 call TalkToTrainer jp TextScriptEnd ViridianGymBattleText7: ; 74b93 (1d:4b93) TX_FAR _ViridianGymBattleText7 db "@" ViridianGymEndBattleText7: ; 74b98 (1d:4b98) TX_FAR _ViridianGymEndBattleText7 db "@" ViridianGymAfterBattleText7: ; 74b9d (1d:4b9d) TX_FAR _ViridianGymAfterBattleText7 db "@" ViridianGymText9: ; 74ba2 (1d:4ba2) db $08 ; asm ld hl, ViridianGymTrainerHeader7 call TalkToTrainer jp TextScriptEnd ViridianGymBattleText8: ; 74bac (1d:4bac) TX_FAR _ViridianGymBattleText8 db "@" ViridianGymEndBattleText8: ; 74bb1 (1d:4bb1) TX_FAR _ViridianGymEndBattleText8 db "@" ViridianGymAfterBattleText8: ; 74bb6 (1d:4bb6) TX_FAR _ViridianGymAfterBattleText8 db "@" ViridianGymText10: ; 74bbb (1d:4bbb) db $08 ; asm ld a, [$d751] bit 1, a jr nz, .asm_1abd1 ; 0x74bc1 ld hl, UnnamedText_74bd4 call PrintText jr .asm_6064d ; 0x74bc9 .asm_1abd1 ; 0x74bcb ld hl, UnnamedText_74bd9 call PrintText .asm_6064d ; 0x74bd1 jp TextScriptEnd UnnamedText_74bd4: ; 74bd4 (1d:4bd4) TX_FAR _UnnamedText_74bd4 db "@" UnnamedText_74bd9: ; 74bd9 (1d:4bd9) TX_FAR _UnnamedText_74bd9 db "@" ViridianGymObject: ; 0x74bde (size=105) db $3 ; border tile db $2 ; warps db $11, $10, $4, $ff db $11, $11, $4, $ff db $0 ; signs db $b ; people db SPRITE_GIOVANNI, $1 + 4, $2 + 4, $ff, $d0, $41, GIOVANNI + $C8, $3 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $7 + 4, $c + 4, $ff, $d0, $42, COOLTRAINER_M + $C8, $9 ; trainer db SPRITE_HIKER, $b + 4, $b + 4, $ff, $d1, $43, BLACKBELT + $C8, $6 ; trainer db SPRITE_ROCKER, $7 + 4, $a + 4, $ff, $d0, $44, TAMER + $C8, $3 ; trainer db SPRITE_HIKER, $7 + 4, $3 + 4, $ff, $d2, $45, BLACKBELT + $C8, $7 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $5 + 4, $d + 4, $ff, $d3, $46, COOLTRAINER_M + $C8, $a ; trainer db SPRITE_HIKER, $1 + 4, $a + 4, $ff, $d0, $47, BLACKBELT + $C8, $8 ; trainer db SPRITE_ROCKER, $10 + 4, $2 + 4, $ff, $d3, $48, TAMER + $C8, $4 ; trainer db SPRITE_BLACK_HAIR_BOY_1, $5 + 4, $6 + 4, $ff, $d0, $49, COOLTRAINER_M + $C8, $1 ; trainer db SPRITE_GYM_HELPER, $f + 4, $10 + 4, $ff, $d0, $a ; person db SPRITE_BALL, $9 + 4, $10 + 4, $ff, $ff, $8b, REVIVE ; item ; warp-to EVENT_DISP $a, $11, $10 EVENT_DISP $a, $11, $11 ViridianGymBlocks: ; 74c47 (1d:4c47) INCBIN "maps/viridiangym.blk" PewterMart_h: ; 0x74ca1 to 0x74cad (12 bytes) (id=56) db $02 ; tileset db PEWTER_MART_HEIGHT, PEWTER_MART_WIDTH ; dimensions (y, x) dw PewterMartBlocks, PewterMartTextPointers, PewterMartScript ; blocks, texts, scripts db $00 ; connections dw PewterMartObject ; objects PewterMartScript: ; 74cad (1d:4cad) call EnableAutoTextBoxDrawing ld a, $1 ld [$cf0c], a ret PewterMartTextPointers: ; 74cb6 (1d:4cb6) dw PewterMartText1 dw PewterMartText2 dw PewterMartText3 PewterMartText2: ; 74cbc (1d:4cbc) db $08 ; asm ld hl, UnnamedText_74cc6 call PrintText jp TextScriptEnd UnnamedText_74cc6: ; 74cc6 (1d:4cc6) TX_FAR _UnnamedText_74cc6 db "@" PewterMartText3: ; 74ccb (1d:4ccb) db $08 ; asm ld hl, UnnamedText_74cd5 call PrintText jp TextScriptEnd UnnamedText_74cd5: ; 74cd5 (1d:4cd5) TX_FAR _UnnamedText_74cd5 db "@" PewterMartObject: ; 0x74cda (size=38) db $0 ; border tile db $2 ; warps db $7, $3, $4, $ff db $7, $4, $4, $ff db $0 ; signs db $3 ; people db SPRITE_MART_GUY, $5 + 4, $0 + 4, $ff, $d3, $1 ; person db SPRITE_BUG_CATCHER, $3 + 4, $3 + 4, $fe, $1, $2 ; person db SPRITE_BLACK_HAIR_BOY_2, $5 + 4, $5 + 4, $ff, $ff, $3 ; person ; warp-to EVENT_DISP $4, $7, $3 EVENT_DISP $4, $7, $4 UnknownDungeon1_h: ; 0x74d00 to 0x74d0c (12 bytes) (id=228) db $11 ; tileset db UNKNOWN_DUNGEON_1_HEIGHT, UNKNOWN_DUNGEON_1_WIDTH ; dimensions (y, x) dw UnknownDungeon1Blocks, UnknownDungeon1TextPointers, UnknownDungeon1Script ; blocks, texts, scripts db $00 ; connections dw UnknownDungeon1Object ; objects UnknownDungeon1Script: ; 74d0c (1d:4d0c) jp EnableAutoTextBoxDrawing UnknownDungeon1TextPointers: ; 74d0f (1d:4d0f) dw Predef5CText dw Predef5CText dw Predef5CText UnknownDungeon1Object: ; 0x74d15 (size=97) db $7d ; border tile db $9 ; warps db $11, $18, $6, $ff db $11, $19, $6, $ff db $1, $1b, $0, UNKNOWN_DUNGEON_2 db $7, $17, $1, UNKNOWN_DUNGEON_2 db $9, $12, $2, UNKNOWN_DUNGEON_2 db $1, $7, $3, UNKNOWN_DUNGEON_2 db $3, $1, $4, UNKNOWN_DUNGEON_2 db $b, $3, $5, UNKNOWN_DUNGEON_2 db $6, $0, $0, UNKNOWN_DUNGEON_3 db $0 ; signs db $3 ; people db SPRITE_BALL, $d + 4, $7 + 4, $ff, $ff, $81, FULL_RESTORE ; item db SPRITE_BALL, $3 + 4, $13 + 4, $ff, $ff, $82, MAX_ELIXER ; item db SPRITE_BALL, $0 + 4, $5 + 4, $ff, $ff, $83, NUGGET ; item ; warp-to EVENT_DISP $f, $11, $18 EVENT_DISP $f, $11, $19 EVENT_DISP $f, $1, $1b ; UNKNOWN_DUNGEON_2 EVENT_DISP $f, $7, $17 ; UNKNOWN_DUNGEON_2 EVENT_DISP $f, $9, $12 ; UNKNOWN_DUNGEON_2 EVENT_DISP $f, $1, $7 ; UNKNOWN_DUNGEON_2 EVENT_DISP $f, $3, $1 ; UNKNOWN_DUNGEON_2 EVENT_DISP $f, $b, $3 ; UNKNOWN_DUNGEON_2 EVENT_DISP $f, $6, $0 ; UNKNOWN_DUNGEON_3 UnknownDungeon1Blocks: ; 74d76 (1d:4d76) INCBIN "maps/unknowndungeon1.blk" CeruleanHouse2_h: ; 0x74dfd to 0x74e09 (12 bytes) (id=230) db $0d ; tileset db CERULEAN_HOUSE_2_HEIGHT, CERULEAN_HOUSE_2_WIDTH ; dimensions (y, x) dw CeruleanHouse2Blocks, CeruleanHouse2TextPointers, CeruleanHouse2Script ; blocks, texts, scripts db $00 ; connections dw CeruleanHouse2Object ; objects CeruleanHouse2Script: ; 74e09 (1d:4e09) ld a, $1 ld [$cf0c], a dec a ld [$cc3c], a ret CeruleanHouse2TextPointers: ; 74e13 (1d:4e13) dw CeruleanHouse2Text1 CeruleanHouse2Text1: ; 74e15 (1d:4e15) db $8 ld hl, UnnamedText_74e77 call PrintText xor a ld [wCurrentMenuItem], a ld [wListScrollOffset], a .asm_74e23 ld hl, UnnamedText_74e7c call PrintText ld hl, UnnamedText_74e6d call LoadItemList ld hl, $cf7b ld a, l ld [$cf8b], a ld a, h ld [$cf8c], a xor a ld [$cf93], a ld [$cc35], a ld a, SPECIALLISTMENU ld [wListMenuID], a call DisplayListMenuID jr c, .asm_74e60 ; 0x74e49 $15 ld hl, Unknown_74e86 ld a, [$cf91] sub $15 add a ld d, $0 ld e, a add hl, de ld a, [hli] ld h, [hl] ld l, a call PrintText jr .asm_74e23 ; 0x74e5e $c3 .asm_74e60 xor a ld [wListScrollOffset], a ld hl, UnnamedText_74e81 call PrintText jp TextScriptEnd UnnamedText_74e6d: ; 74e6d (1d:4e6d) db $8,BOULDERBADGE,CASCADEBADGE,THUNDERBADGE,RAINBOWBADGE,SOULBADGE,MARSHBADGE,VOLCANOBADGE,EARTHBADGE,$FF UnnamedText_74e77: ; 74e77 (1d:4e77) TX_FAR _UnnamedText_74e77 db "@" UnnamedText_74e7c: ; 74e7c (1d:4e7c) TX_FAR _UnnamedText_74e7c db "@" UnnamedText_74e81: ; 74e81 (1d:4e81) TX_FAR _UnnamedText_74e81 db "@" Unknown_74e86: ; 74e86 (1d:4e86) dw UnnamedText_74e96 dw UnnamedText_74e9b dw UnnamedText_74ea0 dw UnnamedText_74ea5 dw UnnamedText_74eaa dw UnnamedText_74eaf dw UnnamedText_74eb4 dw UnnamedText_74eb9 UnnamedText_74e96: ; 74e96 (1d:4e96) TX_FAR _UnnamedText_74e96 db "@" UnnamedText_74e9b: ; 74e9b (1d:4e9b) TX_FAR _UnnamedText_74e9b db "@" UnnamedText_74ea0: ; 74ea0 (1d:4ea0) TX_FAR _UnnamedText_74ea0 db "@" UnnamedText_74ea5: ; 74ea5 (1d:4ea5) TX_FAR _UnnamedText_74ea5 db "@" UnnamedText_74eaa: ; 74eaa (1d:4eaa) TX_FAR _UnnamedText_74eaa db "@" UnnamedText_74eaf: ; 74eaf (1d:4eaf) TX_FAR _UnnamedText_74eaf db "@" UnnamedText_74eb4: ; 74eb4 (1d:4eb4) TX_FAR _UnnamedText_74eb4 db "@" UnnamedText_74eb9: ; 74eb9 (1d:4eb9) TX_FAR _UnnamedText_74eb9 db "@" CeruleanHouse2Object: ; 0x74ebe (size=34) db $c ; border tile db $3 ; warps db $0, $2, $9, $ff db $7, $2, $8, $ff db $7, $3, $8, $ff db $0 ; signs db $1 ; people db SPRITE_FAT_BALD_GUY, $3 + 4, $5 + 4, $ff, $d3, $1 ; person ; warp-to EVENT_DISP $4, $0, $2 EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 VendingMachineMenu: ; 74ee0 (1d:4ee0) ld hl, VendingMachineText1 call PrintText ld a, $13 ld [$d125], a call DisplayTextBoxID xor a ld [wCurrentMenuItem], a ; $cc26 ld [wLastMenuItem], a ; $cc2a ld a, $3 ld [wMenuWatchedKeys], a ; $cc29 ld a, $3 ld [wMaxMenuItem], a ; $cc28 ld a, $5 ld [wTopMenuItemY], a ; $cc24 ld a, $1 ld [wTopMenuItemX], a ; $cc25 ld hl, $d730 set 6, [hl] FuncCoord 0, 3 ; $c3dc ld hl, Coord ld b, $8 ld c, $c call TextBoxBorder call UpdateSprites FuncCoord 2, 5 ; $c406 ld hl, Coord ld de, DrinkText call PlaceString FuncCoord 9, 6 ; $c421 ld hl, Coord ld de, DrinkPriceText call PlaceString ld hl, $d730 res 6, [hl] call HandleMenuInput bit 1, a jr nz, .asm_74f93 ld a, [wCurrentMenuItem] ; $cc26 cp $3 jr z, .asm_74f93 xor a ld [$FF00+$9f], a ld [$FF00+$a1], a ld a, $2 ld [$FF00+$a0], a call HasEnoughMoney jr nc, .enoughMoney ld hl, VendingMachineText4 jp PrintText .enoughMoney call Func_74fe7 ld a, [$FF00+$db] ld b, a ld c, 1 call GiveItem jr nc, .BagFull ld b, $3c ; number of times to play the "brrrrr" sound .playDeliverySound ; 0x74f63 ld c, $2 call DelayFrames push bc ld a, $a8 call PlaySound pop bc dec b jr nz, .playDeliverySound .asm_74f72 ld hl, VendingMachineText5 call PrintText ld hl, $ffde ld de, wPlayerMoney + 2 ; $d349 ld c, $3 ld a, $c call Predef ; indirect jump to Func_f836 (f836 (3:7836)) ld a, $13 ld [$d125], a jp DisplayTextBoxID .BagFull ld hl, VendingMachineText6 jp PrintText .asm_74f93 ld hl, VendingMachineText7 jp PrintText VendingMachineText1: ; 74f99 (1d:4f99) TX_FAR _VendingMachineText1 db "@" DrinkText: ; 74f9e (1d:4f9e) db "FRESH WATER" next "SODA POP" next "LEMONADE" next "CANCEL@" DrinkPriceText: ; 74fc3 (1d:4fc3) db "¥200" next "¥300" next "¥350",$4E,"@" VendingMachineText4: ; 74fd3 (1d:4fd3) TX_FAR _VendingMachineText4 db "@" VendingMachineText5: ; 74fd8 (1d:4fd8) TX_FAR _VendingMachineText5 db "@" VendingMachineText6: ; 74fdd (1d:4fdd) TX_FAR _VendingMachineText6 db "@" VendingMachineText7: ; 74fe2 (1d:4fe2) TX_FAR _VendingMachineText7 db "@" Func_74fe7: ; 74fe7 (1d:4fe7) ld hl, VendingPrices ld a, [$cc26] add a add a ld d, $0 ld e, a add hl, de ld a, [hli] ld [$ff00+$db], a ld a, [hli] ld [$ff00+$dc], a ld a, [hli] ld [$ff00+$dd], a ld a, [hl] ld [$ff00+$de], a ret VendingPrices: ; 75000 (1d:5000) db FRESH_WATER,$00,$02,$00 db SODA_POP, $00,$03,$00 db LEMONADE, $00,$03,$50 FuchsiaHouse1_h: ; 0x7500c to 0x75018 (12 bytes) (id=153) db $08 ; tileset db FUCHSIA_HOUSE_1_HEIGHT, FUCHSIA_HOUSE_1_WIDTH ; dimensions (y, x) dw FuchsiaHouse1Blocks, FuchsiaHouse1TextPointers, FuchsiaHouse1Script ; blocks, texts, scripts db $00 ; connections dw FuchsiaHouse1Object ; objects FuchsiaHouse1Script: ; 75018 (1d:5018) call EnableAutoTextBoxDrawing ret FuchsiaHouse1TextPointers: ; 7501c (1d:501c) dw FuchsiaHouse1Text1 dw FuchsiaHouse1Text2 dw FuchsiaHouse1Text3 FuchsiaHouse1Text1: ; 75022 (1d:5022) TX_FAR _FuchsiaHouse1Text1 db "@" FuchsiaHouse1Text2: ; 75027 (1d:5027) TX_FAR _FuchsiaHouse1Text2 db "@" FuchsiaHouse1Text3: ; 7502c (1d:502c) TX_FAR _FuchsiaHouse1Text3 db "@" FuchsiaHouse1Object: ; 0x75031 (size=38) db $a ; border tile db $2 ; warps db $7, $2, $1, $ff db $7, $3, $1, $ff db $0 ; signs db $3 ; people db SPRITE_MOM_GEISHA, $3 + 4, $2 + 4, $ff, $d3, $1 ; person db SPRITE_GAMBLER, $2 + 4, $7 + 4, $ff, $d1, $2 ; person db SPRITE_BUG_CATCHER, $5 + 4, $5 + 4, $ff, $ff, $3 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 FuchsiaPokecenter_h: ; 0x75057 to 0x75063 (12 bytes) (id=154) db $06 ; tileset db FUCHSIA_POKECENTER_HEIGHT, FUCHSIA_POKECENTER_WIDTH ; dimensions (y, x) dw FuchsiaPokecenterBlocks, FuchsiaPokecenterTextPointers, FuchsiaPokecenterScript ; blocks, texts, scripts db $00 ; connections dw FuchsiaPokecenterObject ; objects FuchsiaPokecenterScript: ; 75063 (1d:5063) call Func_22fa jp EnableAutoTextBoxDrawing FuchsiaPokecenterTextPointers: ; 75069 (1d:5069) dw FuchsiaPokecenterText1 dw FuchsiaPokecenterText2 dw FuchsiaPokecenterText3 dw FuchsiaPokecenterText4 FuchsiaPokecenterText1: ; 75071 (1d:5071) db $ff FuchsiaPokecenterText2: ; 75072 (1d:5072) TX_FAR _FuchsiaPokecenterText1 db "@" FuchsiaPokecenterText3: ; 75077 (1d:5077) TX_FAR _FuchsiaPokecenterText3 db "@" FuchsiaPokecenterText4: ; 7507c (1d:507c) db $f6 FuchsiaPokecenterObject: ; 0x7507d (size=44) db $0 ; border tile db $2 ; warps db $7, $3, $2, $ff db $7, $4, $2, $ff db $0 ; signs db $4 ; people db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person db SPRITE_ROCKER, $3 + 4, $2 + 4, $ff, $ff, $2 ; person db SPRITE_LASS, $5 + 4, $6 + 4, $fe, $2, $3 ; person db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $4 ; person ; warp-to EVENT_DISP $7, $7, $3 EVENT_DISP $7, $7, $4 FuchsiaHouse2_h: ; 0x750a9 to 0x750b5 (12 bytes) (id=155) db $14 ; tileset db FUCHSIA_HOUSE_2_HEIGHT, FUCHSIA_HOUSE_2_WIDTH ; dimensions (y, x) dw FuchsiaHouse2Blocks, FuchsiaHouse2TextPointers, FuchsiaHouse2Script ; blocks, texts, scripts db $00 ; connections dw FuchsiaHouse2Object ; objects FuchsiaHouse2Script: ; 750b5 (1d:50b5) jp EnableAutoTextBoxDrawing FuchsiaHouse2TextPointers: ; 750b8 (1d:50b8) dw FuchsiaHouse2Text1 dw Predef5CText dw BoulderText dw FuchsiaHouse2Text4 dw FuchsiaHouse2Text5 FuchsiaHouse2Text1: ; 750c2 (1d:50c2) db $08 ; asm ld a, [$d78e] bit 0, a jr nz, .subtract ; 0x750c8 ld b,GOLD_TEETH call IsItemInBag jr nz, .asm_3f30f ; 0x750cf ld a, [$d78e] bit 1, a jr nz, .asm_60cba ; 0x750d6 ld hl, WardenGibberishText1 call PrintText call YesNoChoice ld a, [$cc26] and a ld hl, WardenGibberishText3 jr nz, .asm_61238 ; 0x750e8 ld hl, WardenGibberishText2 .asm_61238 ; 0x750ed call PrintText jr .asm_52039 ; 0x750f0 .asm_3f30f ; 0x750f2 ld hl, WardenTeethText1 call PrintText ld a, $40 ldh [$db], a ld b, BANK(RemoveItemByID) ld hl, RemoveItemByID call Bankswitch ld hl, $d78e set 1, [hl] .asm_60cba ; 0x75109 ld hl, WardenThankYouText call PrintText ld bc,(HM_04 << 8) | 1 call GiveItem jr nc, .BagFull ld hl, ReceivedHM04Text call PrintText ld hl, $d78e set 0, [hl] jr .asm_52039 ; 0x75122 .subtract ; 0x75124 ld hl, HM04ExplanationText call PrintText jr .asm_52039 ; 0x7512a .BagFull ld hl, HM04NoRoomText call PrintText .asm_52039 ; 0x75132 jp TextScriptEnd WardenGibberishText1: ; 75135 (1d:5135) TX_FAR _WardenGibberishText1 db "@" WardenGibberishText2: ; 7513a (1d:513a) TX_FAR _WardenGibberishText2 db "@" WardenGibberishText3: ; 7513f (1d:513f) TX_FAR _WardenGibberishText3 db "@" WardenTeethText1: ; 75144 (1d:5144) TX_FAR _WardenTeethText1 db $0b WardenTeethText2: ; 75149 (1d:5149) TX_FAR _WardenTeethText2 db "@" WardenThankYouText: ; 7514e (1d:514e) TX_FAR _WardenThankYouText db "@" ReceivedHM04Text: ; 75153 (1d:5153) TX_FAR _ReceivedHM04Text ; 0x9e5a2 db $0B, "@" HM04ExplanationText: ; 75159 (1d:5159) TX_FAR _HM04ExplanationText db "@" HM04NoRoomText: ; 7515e (1d:515e) TX_FAR _HM04NoRoomText db "@" FuchsiaHouse2Text5: ; 75163 (1d:5163) FuchsiaHouse2Text4: ; 75163 (1d:5163) db $08 ; asm ldh a, [$8c] cp $4 ld hl, UnnamedText_7517b jr nz, .asm_4c9a2 ; 0x7516b ld hl, UnnamedText_75176 .asm_4c9a2 ; 0x75170 call PrintText jp TextScriptEnd UnnamedText_75176: ; 75176 (1d:5176) TX_FAR _UnnamedText_75176 db "@" UnnamedText_7517b: ; 7517b (1d:517b) TX_FAR _UnnamedText_7517b db "@" FuchsiaHouse2Object: ; 0x75180 (size=45) db $17 ; border tile db $2 ; warps db $7, $4, $3, $ff db $7, $5, $3, $ff db $2 ; signs db $3, $4, $4 ; FuchsiaHouse2Text4 db $3, $5, $5 ; FuchsiaHouse2Text5 db $3 ; people db SPRITE_WARDEN, $3 + 4, $2 + 4, $ff, $ff, $1 ; person db SPRITE_BALL, $3 + 4, $8 + 4, $ff, $ff, $82, RARE_CANDY ; item db SPRITE_BOULDER, $4 + 4, $8 + 4, $ff, $10, $3 ; person ; warp-to EVENT_DISP $5, $7, $4 EVENT_DISP $5, $7, $5 FuchsiaHouse2Blocks: ; 751ad (1d:51ad) INCBIN "maps/fuchsiahouse2.blk" SafariZoneEntrance_h: ; 0x751c1 to 0x751cd (12 bytes) (id=156) db $0c ; tileset db SAFARIZONEENTRANCE_HEIGHT, SAFARIZONEENTRANCE_WIDTH ; dimensions (y, x) dw SafariZoneEntranceBlocks, SafariZoneEntranceTextPointers, SafariZoneEntranceScript ; blocks, texts, scripts db $00 ; connections dw SafariZoneEntranceObject ; objects SafariZoneEntranceScript: ; 751cd (1d:51cd) call EnableAutoTextBoxDrawing ld hl, SafariZoneEntranceScriptPointers ld a, [W_SAFARIZONEENTRANCECURSCRIPT] jp CallFunctionInTable SafariZoneEntranceScriptPointers: ; 751d9 (1d:51d9) dw SafariZoneEntranceScript0 dw SafariZoneEntranceScript1 dw SafariZoneEntranceScript2 dw SafariZoneEntranceScript3 dw SafariZoneEntranceScript4 dw SafariZoneEntranceScript5 dw SafariZoneEntranceScript6 SafariZoneEntranceScript0: ; 751e7 (1d:51e7) ld hl, CoordsData_75221 call ArePlayerCoordsInArray ret nc ld a, $3 ld [$ff00+$8c], a call DisplayTextID ld a, $ff ld [wJoypadForbiddenButtonsMask], a xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, $c ld [$c109], a ld a, [$cd3d] cp $1 jr z, .asm_7520f ; 0x75207 $6 ld a, $2 ld [W_SAFARIZONEENTRANCECURSCRIPT], a ret .asm_7520f ld a, $10 ld c, $1 call Func_752a3 ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld a, $1 ld [W_SAFARIZONEENTRANCECURSCRIPT], a ret CoordsData_75221: ; 75221 (1d:5221) db $02,$03 db $02,$04 db $FF SafariZoneEntranceScript1: ; 75226 (1d:5226) call Func_752b4 ret nz SafariZoneEntranceScript2: ; 7522a (1d:522a) xor a ld [H_CURRENTPRESSEDBUTTONS], a ld [wJoypadForbiddenButtonsMask], a call UpdateSprites ld a, $4 ld [$ff00+$8c], a call DisplayTextID ld a, $ff ld [wJoypadForbiddenButtonsMask], a ret SafariZoneEntranceScript3: ; 75240 (1d:5240) call Func_752b4 ret nz xor a ld [wJoypadForbiddenButtonsMask], a ld a, $5 ld [W_SAFARIZONEENTRANCECURSCRIPT], a ret SafariZoneEntranceScript5: ; 7524e (1d:524e) ld a, $4 ld [$d528], a ld hl, $d790 bit 6, [hl] res 6, [hl] jr z, .asm_7527f ; 0x7525a $23 res 7, [hl] call UpdateSprites ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld a, $6 ld [$ff00+$8c], a call DisplayTextID xor a ld [$da47], a ld a, $80 ld c, $3 call Func_752a3 ld a, $4 ld [W_SAFARIZONEENTRANCECURSCRIPT], a jr .asm_75286 ; 0x7527d $7 .asm_7527f ld a, $5 ld [$ff00+$8c], a call DisplayTextID .asm_75286 ret SafariZoneEntranceScript4: ; 75287 (1d:5287) call Func_752b4 ret nz xor a ld [wJoypadForbiddenButtonsMask], a ld a, $0 ld [W_SAFARIZONEENTRANCECURSCRIPT], a ret SafariZoneEntranceScript6: ; 75295 (1d:5295) call Func_752b4 ret nz call Delay3 ld a, [$cf0d] ld [W_SAFARIZONEENTRANCECURSCRIPT], a ret Func_752a3: ; 752a3 (1d:52a3) push af ld b, $0 ld a, c ld [$cd38], a ld hl, $ccd3 pop af call FillMemory jp Func_3486 Func_752b4: ; 752b4 (1d:52b4) ld a, [$cd38] and a ret SafariZoneEntranceTextPointers: ; 752b9 (1d:52b9) dw SafariZoneEntranceText1 dw SafariZoneEntranceText2 dw SafariZoneEntranceText3 dw SafariZoneEntranceText4 dw SafariZoneEntranceText5 dw SafariZoneEntranceText6 SafariZoneEntranceText3: ; 752c5 (1d:52c5) SafariZoneEntranceText1: ; 752c5 (1d:52c5) TX_FAR _SafariZoneEntranceText1 db "@" SafariZoneEntranceText4: ; 752ca (1d:52ca) TX_FAR UnnamedText_9e6e4 ; 0x9e6e4 db $8 ld a, $13 ld [$d125], a call DisplayTextBoxID call YesNoChoice ld a, [$cc26] and a jp nz, .asm_75346 xor a ld [$ff00+$9f], a ld a, $5 ld [$ff00+$a0], a ld a, $0 ld [$ff00+$a1], a call HasEnoughMoney jr nc, .asm_752f9 ; 0x752ef $8 ld hl, UnnamedText_7536a call PrintText jr .asm_7534c ; 0x752f7 $53 .asm_752f9 xor a ld [$cd3d], a ld a, $5 ld [$cd3e], a ld a, $0 ld [$cd3f], a ld hl, $cd3f ld de, $d349 ld c, $3 ld a, $c call Predef ld a, $13 ld [$d125], a call DisplayTextBoxID ld hl, UnnamedText_7535b call PrintText ld a, $1e ld [$da47], a ld a, 502 / $100 ld [wSafariSteps], a ld a, 502 % $100 ld [wSafariSteps + 1], a ld a, $40 ld c, $3 call Func_752a3 ld hl, $d790 set 7, [hl] res 6, [hl] ld a, $3 ld [W_SAFARIZONEENTRANCECURSCRIPT], a jr .asm_75358 ; 0x75344 $12 .asm_75346 ld hl, UnnamedText_75365 call PrintText .asm_7534c ld a, $80 ld c, $1 call Func_752a3 ld a, $4 ld [W_SAFARIZONEENTRANCECURSCRIPT], a .asm_75358 jp TextScriptEnd UnnamedText_7535b: ; 7535b (1d:535b) TX_FAR UnnamedText_9e747 ; 0x9e747 db $0B UnnamedText_75360: ; 75360 (1d:5360) TX_FAR _UnnamedText_75360 db "@" UnnamedText_75365: ; 75365 (1d:5365) TX_FAR _UnnamedText_75365 db "@" UnnamedText_7536a: ; 7536a (1d:536a) TX_FAR _UnnamedText_7536a db "@" SafariZoneEntranceText5: ; 7536f (1d:536f) TX_FAR UnnamedText_9e814 ; 0x9e814 db $8 call YesNoChoice ld a, [$cc26] and a jr nz, .asm_7539c ; 0x7537b $1f ld hl, UnnamedText_753bb call PrintText xor a ld [$c109], a ld a, $80 ld c, $3 call Func_752a3 ld hl, $d790 res 6, [hl] res 7, [hl] ld a, $0 ld [$cf0d], a jr .asm_753b3 ; 0x7539a $17 .asm_7539c ld hl, UnnamedText_753c0 call PrintText ld a, $4 ld [$c109], a ld a, $40 ld c, $1 call Func_752a3 ld a, $5 ld [$cf0d], a .asm_753b3 ld a, $6 ld [W_SAFARIZONEENTRANCECURSCRIPT], a jp TextScriptEnd UnnamedText_753bb: ; 753bb (1d:53bb) TX_FAR _UnnamedText_753bb db "@" UnnamedText_753c0: ; 753c0 (1d:53c0) TX_FAR _UnnamedText_753c0 db "@" SafariZoneEntranceText6: ; 753c5 (1d:53c5) TX_FAR _UnnamedText_753c5 db "@" SafariZoneEntranceText2: ; 753ca (1d:53ca) db $08 ; asm ld hl, UnnamedText_753e6 call PrintText call YesNoChoice ld a, [$cc26] and a ld hl, UnnamedText_753f0 jr nz, .asm_278a6 ; 0x753db ld hl, UnnamedText_753eb .asm_278a6 ; 0x753e0 call PrintText jp TextScriptEnd UnnamedText_753e6: ; 753e6 (1d:53e6) TX_FAR _UnnamedText_753e6 db "@" UnnamedText_753eb: ; 753eb (1d:53eb) TX_FAR _UnnamedText_753eb db "@" UnnamedText_753f0: ; 753f0 (1d:53f0) TX_FAR _UnnamedText_753f0 db "@" SafariZoneEntranceObject: ; 0x753f5 (size=48) db $a ; border tile db $4 ; warps db $5, $3, $4, $ff db $5, $4, $4, $ff db $0, $3, $0, SAFARI_ZONE_CENTER db $0, $4, $1, SAFARI_ZONE_CENTER db $0 ; signs db $2 ; people db SPRITE_WHITE_PLAYER, $2 + 4, $6 + 4, $ff, $d2, $1 ; person db SPRITE_WHITE_PLAYER, $4 + 4, $1 + 4, $ff, $d3, $2 ; person ; warp-to EVENT_DISP $4, $5, $3 EVENT_DISP $4, $5, $4 EVENT_DISP $4, $0, $3 ; SAFARI_ZONE_CENTER EVENT_DISP $4, $0, $4 ; SAFARI_ZONE_CENTER SafariZoneEntranceBlocks: ; 75425 (1d:5425) INCBIN "maps/safarizoneentrance.blk" FuchsiaGym_h: ; 0x75431 to 0x7543d (12 bytes) (id=157) db $07 ; tileset db FUCHSIA_GYM_HEIGHT, FUCHSIA_GYM_WIDTH ; dimensions (y, x) dw FuchsiaGymBlocks, FuchsiaGymTextPointers, FuchsiaGymScript ; blocks, texts, scripts db $00 ; connections dw FuchsiaGymObject ; objects FuchsiaGymScript: ; 7543d (1d:543d) call FuchsiaGymScript_75453 call EnableAutoTextBoxDrawing ld hl, FuchsiaGymTrainerHeaders ld de, FuchsiaGymScriptPointers ld a, [W_FUCHSIAGYMCURSCRIPT] call ExecuteCurMapScriptInTable ld [W_FUCHSIAGYMCURSCRIPT], a ret FuchsiaGymScript_75453: ; 75453 (1d:5453) ld hl, $D126 bit 6, [hl] res 6, [hl] ret z ld hl, Gym5CityName ld de, Gym5LeaderName call LoadGymLeaderAndCityName ret Gym5CityName: ; 75465 (1d:5465) db "FUCHSIA CITY@" Gym5LeaderName: ; 75472 (1d:5472) db "KOGA@" Func_75477: ; 75477 (1d:5477) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_FUCHSIAGYMCURSCRIPT], a ld [W_CURMAPSCRIPT], a ret FuchsiaGymScriptPointers: ; 75482 (1d:5482) dw CheckFightingMapTrainers dw Func_324c dw EndTrainerBattle dw FuchsiaGymScript3 FuchsiaGymScript3: ; 7548a (1d:548a) ld a, [W_ISINBATTLE] ; $d057 cp $ff jp z, Func_75477 ld a, $f0 ld [wJoypadForbiddenButtonsMask], a FuchsiaGymScript3_75497: ; 75497 (1d:5497) ld a, $9 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld hl, $d792 set 1, [hl] ld bc, (TM_06 << 8) | 1 call GiveItem jr nc, .BagFull ld a, $a ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld hl, $d792 set 0, [hl] jr .asm_754c0 .BagFull ld a, $b ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID .asm_754c0 ld hl, W_OBTAINEDBADGES ; $d356 set 4, [hl] ld hl, $d72a set 4, [hl] ld a, [$d792] or $fc ld [$d792], a jp Func_75477 FuchsiaGymTextPointers: ; 754d5 (1d:54d5) dw FuchsiaGymText1 dw FuchsiaGymText2 dw FuchsiaGymText3 dw FuchsiaGymText4 dw FuchsiaGymText5 dw FuchsiaGymText6 dw FuchsiaGymText7 dw FuchsiaGymText8 dw FuchsiaGymText9 dw FuchsiaGymText10 dw FuchsiaGymText11 FuchsiaGymTrainerHeaders: ; 754eb (1d:54eb) FuchsiaGymTrainerHeader0: ; 754eb (1d:54eb) db $2 ; flag's bit db ($2 << 4) ; trainer's view range dw $d792 ; flag's byte dw FuchsiaGymBattleText1 ; 0x55ae TextBeforeBattle dw FuchsiaGymAfterBattleText1 ; 0x55b8 TextAfterBattle dw FuchsiaGymEndBattleText1 ; 0x55b3 TextEndBattle dw FuchsiaGymEndBattleText1 ; 0x55b3 TextEndBattle FuchsiaGymTrainerHeader2: ; 754f7 (1d:54f7) db $3 ; flag's bit db ($2 << 4) ; trainer's view range dw $d792 ; flag's byte dw FuchsiaGymBattleText2 ; 0x55c7 TextBeforeBattle dw FuchsiaGymAfterBattleText2 ; 0x55d1 TextAfterBattle dw FuchsiaGymEndBattleText2 ; 0x55cc TextEndBattle dw FuchsiaGymEndBattleText2 ; 0x55cc TextEndBattle FuchsiaGymTrainerHeader3: ; 75503 (1d:5503) db $4 ; flag's bit db ($4 << 4) ; trainer's view range dw $d792 ; flag's byte dw FuchsiaGymBattleText3 ; 0x55e0 TextBeforeBattle dw FuchsiaGymAfterBattleText3 ; 0x55ea TextAfterBattle dw FuchsiaGymEndBattleText3 ; 0x55e5 TextEndBattle dw FuchsiaGymEndBattleText3 ; 0x55e5 TextEndBattle FuchsiaGymTrainerHeader4: ; 7550f (1d:550f) db $5 ; flag's bit db ($2 << 4) ; trainer's view range dw $d792 ; flag's byte dw FuchsiaGymBattleText4 ; 0x55f9 TextBeforeBattle dw FuchsiaGymAfterBattleText4 ; 0x5603 TextAfterBattle dw FuchsiaGymEndBattleText4 ; 0x55fe TextEndBattle dw FuchsiaGymEndBattleText4 ; 0x55fe TextEndBattle FuchsiaGymTrainerHeader5: ; 7551b (1d:551b) db $6 ; flag's bit db ($2 << 4) ; trainer's view range dw $d792 ; flag's byte dw FuchsiaGymBattleText5 ; 0x5612 TextBeforeBattle dw FuchsiaGymAfterBattleText5 ; 0x561c TextAfterBattle dw FuchsiaGymEndBattleText5 ; 0x5617 TextEndBattle dw FuchsiaGymEndBattleText5 ; 0x5617 TextEndBattle FuchsiaGymTrainerHeader6: ; 75527 (1d:5527) db $7 ; flag's bit db ($2 << 4) ; trainer's view range dw $d792 ; flag's byte dw FuchsiaGymBattleText6 ; 0x562b TextBeforeBattle dw FuchsiaGymAfterBattleText6 ; 0x5635 TextAfterBattle dw FuchsiaGymEndBattleText6 ; 0x5630 TextEndBattle dw FuchsiaGymEndBattleText6 ; 0x5630 TextEndBattle db $ff FuchsiaGymText1: ; 75534 (1d:5534) db $08 ; asm ld a, [$d792] bit 1, a jr z, .asm_181b6 ; 0x7553a bit 0, a jr nz, .asm_adc3b ; 0x7553e call z, FuchsiaGymScript3_75497 call DisableWaitingAfterTextDisplay jr .asm_e84c6 ; 0x75546 .asm_adc3b ; 0x75548 ld hl, UnnamedText_7558b call PrintText jr .asm_e84c6 ; 0x7554e .asm_181b6 ; 0x75550 ld hl, UnnamedText_75581 call PrintText ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, UnnamedText_75586 ld de, UnnamedText_75586 call PreBattleSaveRegisters ldh a, [$8c] ld [$cf13], a call EngageMapTrainer call InitBattleEnemyParameters ld a, $5 ld [$d05c], a xor a ldh [$b4], a ld a, $3 ld [W_FUCHSIAGYMCURSCRIPT], a .asm_e84c6 ; 0x7557e jp TextScriptEnd UnnamedText_75581: ; 75581 (1d:5581) TX_FAR _UnnamedText_75581 db "@" UnnamedText_75586: ; 75586 (1d:5586) TX_FAR _UnnamedText_75586 db "@" UnnamedText_7558b: ; 7558b (1d:558b) TX_FAR _UnnamedText_7558b db "@" FuchsiaGymText9: ; 75590 (1d:5590) TX_FAR _UnnamedText_75590 db "@" FuchsiaGymText10: ; 75595 (1d:5595) TX_FAR _ReceivedTM06Text ; 0xa00eb db $11 TM06ExplanationText: ; 7559a (1d:559a) TX_FAR _TM06ExplanationText db "@" FuchsiaGymText11: ; 7559f (1d:559f) TX_FAR _TM06NoRoomText db "@" FuchsiaGymText2: ; 755a4 (1d:55a4) db $08 ; asm ld hl, FuchsiaGymTrainerHeader0 call TalkToTrainer jp TextScriptEnd FuchsiaGymBattleText1: ; 755ae (1d:55ae) TX_FAR _FuchsiaGymBattleText1 db "@" FuchsiaGymEndBattleText1: ; 755b3 (1d:55b3) TX_FAR _FuchsiaGymEndBattleText1 db "@" FuchsiaGymAfterBattleText1: ; 755b8 (1d:55b8) TX_FAR _FuchsiaGymAfterBattleText1 db "@" FuchsiaGymText3: ; 755bd (1d:55bd) db $08 ; asm ld hl, FuchsiaGymTrainerHeader2 call TalkToTrainer jp TextScriptEnd FuchsiaGymBattleText2: ; 755c7 (1d:55c7) TX_FAR _FuchsiaGymBattleText2 db "@" FuchsiaGymEndBattleText2: ; 755cc (1d:55cc) TX_FAR _FuchsiaGymEndBattleText2 db "@" FuchsiaGymAfterBattleText2: ; 755d1 (1d:55d1) TX_FAR _FuchsiaGymAfterBattleText2 db "@" FuchsiaGymText4: ; 755d6 (1d:55d6) db $08 ; asm ld hl, FuchsiaGymTrainerHeader3 call TalkToTrainer jp TextScriptEnd FuchsiaGymBattleText3: ; 755e0 (1d:55e0) TX_FAR _FuchsiaGymBattleText3 db "@" FuchsiaGymEndBattleText3: ; 755e5 (1d:55e5) TX_FAR _FuchsiaGymEndBattleText3 db "@" FuchsiaGymAfterBattleText3: ; 755ea (1d:55ea) TX_FAR _FuchsiaGymAfterBattleText3 db "@" FuchsiaGymText5: ; 755ef (1d:55ef) db $08 ; asm ld hl, FuchsiaGymTrainerHeader4 call TalkToTrainer jp TextScriptEnd FuchsiaGymBattleText4: ; 755f9 (1d:55f9) TX_FAR _FuchsiaGymBattleText4 db "@" FuchsiaGymEndBattleText4: ; 755fe (1d:55fe) TX_FAR _FuchsiaGymEndBattleText4 db "@" FuchsiaGymAfterBattleText4: ; 75603 (1d:5603) TX_FAR _FuchsiaGymAfterBattleText4 db "@" FuchsiaGymText6: ; 75608 (1d:5608) db $08 ; asm ld hl, FuchsiaGymTrainerHeader5 call TalkToTrainer jp TextScriptEnd FuchsiaGymBattleText5: ; 75612 (1d:5612) TX_FAR _FuchsiaGymBattleText5 db "@" FuchsiaGymEndBattleText5: ; 75617 (1d:5617) TX_FAR _FuchsiaGymEndBattleText5 db "@" FuchsiaGymAfterBattleText5: ; 7561c (1d:561c) TX_FAR _FuchsiaGymAfterBattleText5 db "@" FuchsiaGymText7: ; 75621 (1d:5621) db $08 ; asm ld hl, FuchsiaGymTrainerHeader6 call TalkToTrainer jp TextScriptEnd FuchsiaGymBattleText6: ; 7562b (1d:562b) TX_FAR _FuchsiaGymBattleText6 db "@" FuchsiaGymEndBattleText6: ; 75630 (1d:5630) TX_FAR _FuchsiaGymEndBattleText6 db "@" FuchsiaGymAfterBattleText6: ; 75635 (1d:5635) TX_FAR _FuchsiaGymAfterBattleText6 db "@" FuchsiaGymText8: ; 7563a (1d:563a) db $08 ; asm ld a, [$d792] bit 1, a ld hl, UnnamedText_75653 jr nz, .asm_50671 ; 0x75643 ld hl, UnnamedText_7564e .asm_50671 ; 0x75648 call PrintText jp TextScriptEnd UnnamedText_7564e: ; 7564e (1d:564e) TX_FAR _UnnamedText_7564e db "@" UnnamedText_75653: ; 75653 (1d:5653) TX_FAR _UnnamedText_75653 db "@" FuchsiaGymObject: ; 0x75658 (size=82) db $3 ; border tile db $2 ; warps db $11, $4, $5, $ff db $11, $5, $5, $ff db $0 ; signs db $8 ; people db SPRITE_BLACKBELT, $a + 4, $4 + 4, $ff, $d0, $41, KOGA + $C8, $1 ; trainer db SPRITE_ROCKER, $d + 4, $8 + 4, $ff, $d0, $42, JUGGLER + $C8, $7 ; trainer db SPRITE_ROCKER, $8 + 4, $7 + 4, $ff, $d3, $43, JUGGLER + $C8, $3 ; trainer db SPRITE_ROCKER, $c + 4, $1 + 4, $ff, $d0, $44, JUGGLER + $C8, $8 ; trainer db SPRITE_ROCKER, $5 + 4, $3 + 4, $ff, $d1, $45, TAMER + $C8, $1 ; trainer db SPRITE_ROCKER, $2 + 4, $8 + 4, $ff, $d0, $46, TAMER + $C8, $2 ; trainer db SPRITE_ROCKER, $7 + 4, $2 + 4, $ff, $d2, $47, JUGGLER + $C8, $4 ; trainer db SPRITE_GYM_HELPER, $f + 4, $7 + 4, $ff, $d0, $8 ; person ; warp-to EVENT_DISP $5, $11, $4 EVENT_DISP $5, $11, $5 FuchsiaGymBlocks: ; 756aa (1d:56aa) INCBIN "maps/fuchsiagym.blk" FuchsiaMeetingRoom_h: ; 0x756d7 to 0x756e3 (12 bytes) (id=158) db $14 ; tileset db FUCHSIAMEETINGROOM_HEIGHT, FUCHSIAMEETINGROOM_WIDTH ; dimensions (y, x) dw FuchsiaMeetingRoomBlocks, FuchsiaMeetingRoomTextPointers, FuchsiaMeetingRoomScript ; blocks, texts, scripts db $00 ; connections dw FuchsiaMeetingRoomObject ; objects FuchsiaMeetingRoomScript: ; 756e3 (1d:56e3) call EnableAutoTextBoxDrawing ret FuchsiaMeetingRoomTextPointers: ; 756e7 (1d:56e7) dw FuchsiaMeetingRoomText1 dw FuchsiaMeetingRoomText2 dw FuchsiaMeetingRoomText3 FuchsiaMeetingRoomText1: ; 756ed (1d:56ed) TX_FAR _FuchsiaMeetingRoomText1 db "@" FuchsiaMeetingRoomText2: ; 756f2 (1d:56f2) TX_FAR _FuchsiaMeetingRoomText2 db "@" FuchsiaMeetingRoomText3: ; 756f7 (1d:56f7) TX_FAR _FuchsiaMeetingRoomText3 db "@" FuchsiaMeetingRoomObject: ; 0x756fc (size=38) db $17 ; border tile db $2 ; warps db $7, $4, $6, $ff db $7, $5, $6, $ff db $0 ; signs db $3 ; people db SPRITE_WHITE_PLAYER, $1 + 4, $4 + 4, $ff, $d0, $1 ; person db SPRITE_WHITE_PLAYER, $2 + 4, $0 + 4, $ff, $d1, $2 ; person db SPRITE_WHITE_PLAYER, $1 + 4, $a + 4, $ff, $d0, $3 ; person ; warp-to EVENT_DISP $7, $7, $4 EVENT_DISP $7, $7, $5 FuchsiaMeetingRoomBlocks: ; 75722 (1d:5722) INCBIN "maps/fuchsiameetingroom.blk" CinnabarGym_h: ; 0x7573e to 0x7574a (12 bytes) (id=166) db $16 ; tileset db CINNABAR_GYM_HEIGHT, CINNABAR_GYM_WIDTH ; dimensions (y, x) dw CinnabarGymBlocks, CinnabarGymTextPointers, CinnabarGymScript ; blocks, texts, scripts db $00 ; connections dw CinnabarGymObject ; objects CinnabarGymScript: ; 7574a (1d:574a) call CinnabarGymScript_75759 call EnableAutoTextBoxDrawing ld hl, CinnabarGymScriptPointers ld a, [W_CINNABARGYMCURSCRIPT] jp CallFunctionInTable CinnabarGymScript_75759: ; 75759 (1d:5759) ld hl, $D126 bit 6, [hl] res 6, [hl] push hl call nz, CinnabarGymScript_75772 pop hl bit 5, [hl] res 5, [hl] call nz, Func_3ead ld hl, $D79B res 7, [hl] ret CinnabarGymScript_75772: ; 75772 (1d:5772) ld hl, Gym7CityName ld de, Gym7LeaderName jp LoadGymLeaderAndCityName Gym7CityName: ; 7577b (1d:577b) db "CINNABAR ISLAND@" Gym7LeaderName: ; 7578b (1d:578b) db "BLAINE@" CinnabarGymScript_75792: ; 75792 (1d:5792) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_CINNABARGYMCURSCRIPT], a ld [W_CURMAPSCRIPT], a ld [$da38], a ret CinnabarGymScript_757a0: ; 757a0 (1d:57a0) ld a, [H_DOWNARROWBLINKCNT2] ; $FF00+$8c ld [wTrainerHeaderFlagBit], a ret CinnabarGymScriptPointers: ; 757a6 (1d:57a6) dw CinnabarGymScript0 dw CinnabarGymScript1 dw CinnabarGymScript2 dw CinnabarGymScript3 CinnabarGymScript0: ; 757ae (1d:57ae) ld a, [$da38] and a ret z ld [$ff00+$8c], a cp $4 jr nz, .asm_757c3 ; 0x757b7 $a ld a, $4 ld [$d528], a ld de, MovementData_757d7 jr .asm_757cb ; 0x757c1 $8 .asm_757c3 ld de, MovementData_757da ld a, $1 ld [$d528], a .asm_757cb call MoveSprite ld a, $1 ld [W_CINNABARGYMCURSCRIPT], a ld [W_CURMAPSCRIPT], a ret MovementData_757d7: ; 757d7 (1d:57d7) db $80,$40,$FF MovementData_757da: ; 757da (1d:57da) db $80,$FF CinnabarGymScript1: ; 757dc (1d:57dc) ld a, [$d730] bit 0, a ret nz xor a ld [wJoypadForbiddenButtonsMask], a ld a, [$da38] ld [wTrainerHeaderFlagBit], a ld [$ff00+$8c], a jp DisplayTextID Func_757f1: ; 757f1 (1d:57f1) ld a, $10 jp Predef ; indirect jump to HandleBitArray (f666 (3:7666)) CinnabarGymScript2: ; 757f6 (1d:57f6) ld a, [$d057] cp $ff jp z, CinnabarGymScript_75792 ld a, [wTrainerHeaderFlagBit] ld [$ff00+$db], a ld c, a ld b, $2 ld hl, $d79a call Func_757f1 ld a, c and a jr nz, .asm_7581b ; 0x7580e $b call WaitForSoundToFinish ld a, $ad call PlaySound call WaitForSoundToFinish .asm_7581b ld a, [wTrainerHeaderFlagBit] ld [$ff00+$db], a ld c, a ld b, $1 ld hl, $d79a call Func_757f1 ld a, [wTrainerHeaderFlagBit] sub $2 ld c, a ld b, $1 ld hl, $d79c call Func_757f1 call Func_3ead xor a ld [wJoypadForbiddenButtonsMask], a ld [$da38], a ld a, $0 ld [W_CINNABARGYMCURSCRIPT], a ld [W_CURMAPSCRIPT], a ret CinnabarGymScript3: ; 7584a (1d:584a) ld a, [$d057] cp $ff jp z, CinnabarGymScript_75792 ld a, $f0 ld [wJoypadForbiddenButtonsMask], a CinnabarGymScript3_75857: ; 75857 (1d:5857) ld a, $a ld [$ff00+$8c], a call DisplayTextID ld hl, $d79a set 1, [hl] ld bc, (TM_38 << 8) | 1 call GiveItem jr nc, .BagFull ld a, $b ld [$ff00+$8c], a call DisplayTextID ld hl, $d79a set 0, [hl] jr .asm_75880 ; 0x75877 $7 .BagFull ld a, $c ld [$ff00+$8c], a call DisplayTextID .asm_75880 ld hl, $d356 set 6, [hl] ld hl, $d72a set 6, [hl] ld a, [$d79a] or $fc ld [$d79a], a ld hl, $d79b set 0, [hl] ld hl, $d126 set 5, [hl] jp CinnabarGymScript_75792 CinnabarGymTextPointers: ; 7589f (1d:589f) dw CinnabarGymText1 dw CinnabarGymText2 dw CinnabarGymText3 dw CinnabarGymText4 dw CinnabarGymText5 dw CinnabarGymText6 dw CinnabarGymText7 dw CinnabarGymText8 dw CinnabarGymText9 dw BlaineBadgeText dw ReceivedTM38Text dw TM38NoRoomText Func_758b7: ; 758b7 (1d:58b7) ld a, [H_DOWNARROWBLINKCNT2] ; $FF00+$8c ld [$cf13], a call EngageMapTrainer call InitBattleEnemyParameters ld hl, $d72d set 6, [hl] set 7, [hl] ld a, [$cf13] cp $1 jr z, .asm_758d4 ld a, $2 jr .asm_758d6 .asm_758d4 ld a, $3 .asm_758d6 ld [W_CINNABARGYMCURSCRIPT], a ld [W_CURMAPSCRIPT], a jp TextScriptEnd CinnabarGymText1: ; 758df (1d:58df) db $8 ld a, [$d79a] bit 1, a jr z, .asm_d9332 ; 0x758e5 $16 bit 0, a jr nz, .asm_3012f ; 0x758e9 $9 call z, CinnabarGymScript3_75857 call DisableWaitingAfterTextDisplay jp TextScriptEnd .asm_3012f ; 0x758f4 ld hl, BlaineFireBlastText call PrintText jp TextScriptEnd .asm_d9332 ; 0x758fd ld hl, BlaineBattleText call PrintText ld hl, BlaineEndBattleText ld de, BlaineEndBattleText call PreBattleSaveRegisters ld a, $7 ld [$d05c], a jp Func_758b7 BlaineBattleText: ; 75914 (1d:5914) TX_FAR _BlaineBattleText db "@" BlaineEndBattleText: ; 75919 (1d:5919) TX_FAR _BlaineEndBattleText db $11 db $d db "@" BlaineFireBlastText: ; 75920 (1d:5920) TX_FAR _BlaineFireBlastText db "@" BlaineBadgeText: ; 75925 (1d:5925) TX_FAR _BlaineBadgeText db "@" ReceivedTM38Text: ; 7592a (1d:592a) TX_FAR _ReceivedTM38Text ; 0xa09a8 db $0B TX_FAR _TM38ExplanationText db "@" TM38NoRoomText: ; 75934 (1d:5934) TX_FAR _TM38NoRoomText db "@" CinnabarGymText2: ; 75939 (1d:5939) db $08 ; asm call CinnabarGymScript_757a0 ld a, [$d79a] bit 2, a jr nz, .asm_46bb4 ; 0x75942 ld hl, UnnamedText_7595f call PrintText ld hl, UnnamedText_75964 ld de, UnnamedText_75964 ; $5964 XXX call PreBattleSaveRegisters jp Func_758b7 .asm_46bb4 ; 0x75956 ld hl, UnnamedText_75969 call PrintText jp TextScriptEnd UnnamedText_7595f: ; 7595f (1d:595f) TX_FAR _UnnamedText_7595f db "@" UnnamedText_75964: ; 75964 (1d:5964) TX_FAR _UnnamedText_75964 db "@" UnnamedText_75969: ; 75969 (1d:5969) TX_FAR _UnnamedText_75969 db "@" CinnabarGymText3: ; 7596e (1d:596e) db $08 ; asm call CinnabarGymScript_757a0 ld a, [$d79a] bit 3, a jr nz, .asm_4b406 ; 0x75977 ld hl, UnnamedText_75994 call PrintText ld hl, UnnamedText_75999 ld de, UnnamedText_75999 ; $5999 XXX call PreBattleSaveRegisters jp Func_758b7 .asm_4b406 ; 0x7598b ld hl, UnnamedText_7599e call PrintText jp TextScriptEnd UnnamedText_75994: ; 75994 (1d:5994) TX_FAR _UnnamedText_75994 db "@" UnnamedText_75999: ; 75999 (1d:5999) TX_FAR _UnnamedText_75999 db "@" UnnamedText_7599e: ; 7599e (1d:599e) TX_FAR _UnnamedText_7599e db "@" CinnabarGymText4: ; 759a3 (1d:59a3) db $08 ; asm call CinnabarGymScript_757a0 ld a, [$d79a] bit 4, a jr nz, .asm_c0673 ; 0x759ac ld hl, UnnamedText_759c9 call PrintText ld hl, UnnamedText_759ce ld de, UnnamedText_759ce ; $59ce XXX call PreBattleSaveRegisters jp Func_758b7 .asm_c0673 ; 0x759c0 ld hl, UnnamedText_759d3 call PrintText jp TextScriptEnd UnnamedText_759c9: ; 759c9 (1d:59c9) TX_FAR _UnnamedText_759c9 db "@" UnnamedText_759ce: ; 759ce (1d:59ce) TX_FAR _UnnamedText_759ce db "@" UnnamedText_759d3: ; 759d3 (1d:59d3) TX_FAR _UnnamedText_759d3 db "@" CinnabarGymText5: ; 759d8 (1d:59d8) db $08 ; asm call CinnabarGymScript_757a0 ld a, [$d79a] bit 5, a jr nz, .asm_5cfd7 ; 0x759e1 ld hl, UnnamedText_759fe call PrintText ld hl, UnnamedText_75a03 ld de, UnnamedText_75a03 ; $5a03 XXX call PreBattleSaveRegisters jp Func_758b7 .asm_5cfd7 ; 0x759f5 ld hl, UnnamedText_75a08 call PrintText jp TextScriptEnd UnnamedText_759fe: ; 759fe (1d:59fe) TX_FAR _UnnamedText_759fe db "@" UnnamedText_75a03: ; 75a03 (1d:5a03) TX_FAR _UnnamedText_75a03 db "@" UnnamedText_75a08: ; 75a08 (1d:5a08) TX_FAR _UnnamedText_75a08 db "@" CinnabarGymText6: ; 75a0d (1d:5a0d) db $08 ; asm call CinnabarGymScript_757a0 ld a, [$d79a] bit 6, a jr nz, .asm_776b4 ; 0x75a16 ld hl, UnnamedText_75a33 call PrintText ld hl, UnnamedText_75a38 ld de, UnnamedText_75a38 call PreBattleSaveRegisters jp Func_758b7 .asm_776b4 ; 0x75a2a ld hl, UnnamedText_75a3d call PrintText jp TextScriptEnd UnnamedText_75a33: ; 75a33 (1d:5a33) TX_FAR _UnnamedText_75a33 db "@" UnnamedText_75a38: ; 75a38 (1d:5a38) TX_FAR _UnnamedText_75a38 db "@" UnnamedText_75a3d: ; 75a3d (1d:5a3d) TX_FAR _UnnamedText_75a3d db "@" CinnabarGymText7: ; 75a42 (1d:5a42) db $08 ; asm call CinnabarGymScript_757a0 ld a, [$d79a] bit 7, a jr nz, .asm_2f755 ; 0x75a4b ld hl, UnnamedText_75a68 call PrintText ld hl, UnnamedText_75a6d ld de, UnnamedText_75a6d call PreBattleSaveRegisters jp Func_758b7 .asm_2f755 ; 0x75a5f ld hl, UnnamedText_75a72 call PrintText jp TextScriptEnd UnnamedText_75a68: ; 75a68 (1d:5a68) TX_FAR _UnnamedText_75a68 db "@" UnnamedText_75a6d: ; 75a6d (1d:5a6d) TX_FAR _UnnamedText_75a6d db "@" UnnamedText_75a72: ; 75a72 (1d:5a72) TX_FAR _UnnamedText_75a72 db "@" CinnabarGymText8: ; 75a77 (1d:5a77) db $08 ; asm call CinnabarGymScript_757a0 ld a, [$d79b] bit 0, a jr nz, .asm_d87be ; 0x75a80 ld hl, UnnamedText_75a9d call PrintText ld hl, UnnamedText_75aa2 ld de, UnnamedText_75aa2 ; $5aa2 XXX call PreBattleSaveRegisters jp Func_758b7 .asm_d87be ; 0x75a94 ld hl, UnnamedText_75aa7 call PrintText jp TextScriptEnd UnnamedText_75a9d: ; 75a9d (1d:5a9d) TX_FAR _UnnamedText_75a9d db "@" UnnamedText_75aa2: ; 75aa2 (1d:5aa2) TX_FAR _UnnamedText_75aa2 db "@" UnnamedText_75aa7: ; 75aa7 (1d:5aa7) TX_FAR _UnnamedText_75aa7 db "@" CinnabarGymText9: ; 75aac (1d:5aac) db $08 ; asm ld a, [$d79a] bit 1, a jr nz, .asm_627d9 ; 0x75ab2 ld hl, UnnamedText_75ac2 jr .asm_0b11d ; 0x75ab7 .asm_627d9 ; 0x75ab9 ld hl, UnnamedText_75ac7 .asm_0b11d ; 0x75abc call PrintText jp TextScriptEnd UnnamedText_75ac2: ; 75ac2 (1d:5ac2) TX_FAR _UnnamedText_75ac2 db "@" UnnamedText_75ac7: ; 75ac7 (1d:5ac7) TX_FAR _UnnamedText_75ac7 db "@" CinnabarGymObject: ; 0x75acc (size=90) db $2e ; border tile db $2 ; warps db $11, $10, $1, $ff db $11, $11, $1, $ff db $0 ; signs db $9 ; people db SPRITE_FAT_BALD_GUY, $3 + 4, $3 + 4, $ff, $d0, $41, BLAINE + $C8, $1 ; trainer db SPRITE_BLACK_HAIR_BOY_2, $2 + 4, $11 + 4, $ff, $d0, $42, SUPER_NERD + $C8, $9 ; trainer db SPRITE_BLACK_HAIR_BOY_2, $8 + 4, $11 + 4, $ff, $d0, $43, BURGLAR + $C8, $4 ; trainer db SPRITE_BLACK_HAIR_BOY_2, $4 + 4, $b + 4, $ff, $d0, $44, SUPER_NERD + $C8, $a ; trainer db SPRITE_BLACK_HAIR_BOY_2, $8 + 4, $b + 4, $ff, $d0, $45, BURGLAR + $C8, $5 ; trainer db SPRITE_BLACK_HAIR_BOY_2, $e + 4, $b + 4, $ff, $d0, $46, SUPER_NERD + $C8, $b ; trainer db SPRITE_BLACK_HAIR_BOY_2, $e + 4, $3 + 4, $ff, $d0, $47, BURGLAR + $C8, $6 ; trainer db SPRITE_BLACK_HAIR_BOY_2, $8 + 4, $3 + 4, $ff, $d0, $48, SUPER_NERD + $C8, $c ; trainer db SPRITE_GYM_HELPER, $d + 4, $10 + 4, $ff, $d0, $9 ; person ; warp-to EVENT_DISP $a, $11, $10 EVENT_DISP $a, $11, $11 CinnabarGymBlocks: ; 75b26 (1d:5b26) INCBIN "maps/cinnabargym.blk" Lab1_h: ; 0x75b80 to 0x75b8c (12 bytes) (id=167) db $14 ; tileset db CINNABAR_LAB_1_HEIGHT, CINNABAR_LAB_1_WIDTH ; dimensions (y, x) dw Lab1Blocks, Lab1TextPointers, Lab1Script ; blocks, texts, scripts db $00 ; connections dw Lab1Object ; objects Lab1Script: ; 75b8c (1d:5b8c) call EnableAutoTextBoxDrawing ret Lab1TextPointers: ; 75b90 (1d:5b90) dw Lab1Text1 dw Lab1Text2 dw Lab1Text3 dw Lab1Text4 dw Lab1Text5 Lab1Text1: ; 75b9a (1d:5b9a) TX_FAR _Lab1Text1 db "@" Lab1Text2: ; 75b9f (1d:5b9f) TX_FAR _Lab1Text2 db "@" Lab1Text3: ; 75ba4 (1d:5ba4) TX_FAR _Lab1Text3 db "@" Lab1Text4: ; 75ba9 (1d:5ba9) TX_FAR _Lab1Text4 db "@" Lab1Text5: ; 75bae (1d:5bae) TX_FAR _Lab1Text5 db "@" Lab1Object: ; 0x75bb3 (size=62) db $17 ; border tile db $5 ; warps db $7, $2, $2, $ff db $7, $3, $2, $ff db $4, $8, $0, CINNABAR_LAB_2 db $4, $c, $0, CINNABAR_LAB_3 db $4, $10, $0, CINNABAR_LAB_4 db $4 ; signs db $2, $3, $2 ; Lab1Text2 db $4, $9, $3 ; Lab1Text3 db $4, $d, $4 ; Lab1Text4 db $4, $11, $5 ; Lab1Text5 db $1 ; people db SPRITE_FISHER, $3 + 4, $1 + 4, $ff, $ff, $1 ; person ; warp-to EVENT_DISP $9, $7, $2 EVENT_DISP $9, $7, $3 EVENT_DISP $9, $4, $8 ; CINNABAR_LAB_2 EVENT_DISP $9, $4, $c ; CINNABAR_LAB_3 EVENT_DISP $9, $4, $10 ; CINNABAR_LAB_4 Lab1Blocks: ; 75bf1 (1d:5bf1) INCBIN "maps/lab1.blk" Lab2_h: ; 0x75c15 to 0x75c21 (12 bytes) (id=168) db $14 ; tileset db CINNABAR_LAB_2_HEIGHT, CINNABAR_LAB_2_WIDTH ; dimensions (y, x) dw Lab2Blocks, Lab2TextPointers, Lab2Script ; blocks, texts, scripts db $00 ; connections dw Lab2Object ; objects Lab2Script: ; 75c21 (1d:5c21) jp EnableAutoTextBoxDrawing Lab2TextPointers: ; 75c24 (1d:5c24) dw Lab2Text1 dw Lab2Text2 dw Lab2Text3 Lab2Text1: ; 75c2a (1d:5c2a) TX_FAR _Lab2Text1 db "@" Lab2Text2: ; 75c2f (1d:5c2f) db $8 ld a, $7 ld [wWhichTrade], a jr asm_78552 ; 0x75c35 $6 Lab2Text3: ; 75c37 (1d:5c37) db $8 ld a, $8 ld [wWhichTrade], a asm_78552: ; 75c3d (1d:5c3d) ld a, $54 call Predef jp TextScriptEnd Lab2Object: ; 0x75c45 (size=38) db $17 ; border tile db $2 ; warps db $7, $2, $2, CINNABAR_LAB_1 db $7, $3, $2, CINNABAR_LAB_1 db $0 ; signs db $3 ; people db SPRITE_BLACK_HAIR_BOY_2, $2 + 4, $3 + 4, $ff, $d0, $1 ; person db SPRITE_OLD_PERSON, $4 + 4, $1 + 4, $ff, $ff, $2 ; person db SPRITE_FOULARD_WOMAN, $5 + 4, $5 + 4, $ff, $d1, $3 ; person ; warp-to EVENT_DISP $4, $7, $2 ; CINNABAR_LAB_1 EVENT_DISP $4, $7, $3 ; CINNABAR_LAB_1 Lab2Blocks: ; 75c6b (1d:5c6b) INCBIN "maps/lab2.blk" Lab3_h: ; 0x75c7b to 0x75c87 (12 bytes) (id=169) db $14 ; tileset db CINNABAR_LAB_3_HEIGHT, CINNABAR_LAB_3_WIDTH ; dimensions (y, x) dw Lab3Blocks, Lab3TextPointers, Lab3Script ; blocks, texts, scripts db $00 ; connections dw Lab3Object ; objects Lab3Script: ; 75c87 (1d:5c87) jp EnableAutoTextBoxDrawing Lab3TextPointers: ; 75c8a (1d:5c8a) dw Lab3Text1 dw Lab3Text2 dw Lab3Text3 dw Lab3Text4 dw Lab3Text5 Lab3Text1: ; 75c94 (1d:5c94) db $08 ; asm ld a, [$d7a1] bit 7, a jr nz, .asm_e551a ; 0x75c9a ld hl, TM35PreReceiveText call PrintText ld bc, (TM_35 << 8) | 1 call GiveItem jr nc, .BagFull ld hl, ReceivedTM35Text call PrintText ld hl, $d7a1 set 7, [hl] jr .asm_eb896 ; 0x75cb5 .BagFull ld hl, TM35NoRoomText call PrintText jr .asm_eb896 ; 0x75cbd .asm_e551a ; 0x75cbf ld hl, TM35ExplanationText call PrintText .asm_eb896 ; 0x75cc5 jp TextScriptEnd TM35PreReceiveText: ; 75cc8 (1d:5cc8) TX_FAR _TM35PreReceiveText db "@" ReceivedTM35Text: ; 75ccd (1d:5ccd) TX_FAR _ReceivedTM35Text ; 0xa0f48 db $0B, "@" TM35ExplanationText: ; 75cd3 (1d:5cd3) TX_FAR _TM35ExplanationText db "@" TM35NoRoomText: ; 75cd8 (1d:5cd8) TX_FAR _TM35NoRoomText db "@" Lab3Text2: ; 75cdd (1d:5cdd) TX_FAR _Lab3Text2 db "@" Lab3Text4: ; 75ce2 (1d:5ce2) Lab3Text3: ; 75ce2 (1d:5ce2) TX_FAR _Lab3Text3 db "@" Lab3Text5: ; 75ce7 (1d:5ce7) TX_FAR _Lab3Text5 db "@" Lab3Object: ; 0x75cec (size=41) db $17 ; border tile db $2 ; warps db $7, $2, $3, CINNABAR_LAB_1 db $7, $3, $3, CINNABAR_LAB_1 db $3 ; signs db $4, $0, $3 ; Lab3Text3 db $4, $1, $4 ; Lab3Text4 db $1, $2, $5 ; Lab3Text5 db $2 ; people db SPRITE_OAK_AIDE, $2 + 4, $7 + 4, $ff, $d0, $1 ; person db SPRITE_OAK_AIDE, $3 + 4, $2 + 4, $fe, $2, $2 ; person ; warp-to EVENT_DISP $4, $7, $2 ; CINNABAR_LAB_1 EVENT_DISP $4, $7, $3 ; CINNABAR_LAB_1 Lab3Blocks: ; 75d15 (1d:5d15) INCBIN "maps/lab3.blk" Lab4_h: ; 0x75d25 to 0x75d31 (12 bytes) (id=170) db $14 ; tileset db CINNABAR_LAB_4_HEIGHT, CINNABAR_LAB_4_WIDTH ; dimensions (y, x) dw Lab4Blocks, Lab4TextPointers, Lab4Script ; blocks, texts, scripts db $00 ; connections dw Lab4Object ; objects Lab4Script: ; 75d31 (1d:5d31) jp EnableAutoTextBoxDrawing Lab4TextPointers: ; 75d34 (1d:5d34) dw Lab4Text1 dw Lab4Text2 Func_75d38: ; 75d38 (1d:5d38) xor a ld [$cd37], a ld de, $cc5b ld hl, FossilsList .asm_75d42 ld a, [hli] and a jr z, .asm_75d64 push hl push de ld [$d11e], a ld b, a ld a, $1c call Predef ; indirect jump to Func_f8a5 (f8a5 (3:78a5)) pop de pop hl ld a, b and a jr z, .asm_75d42 ld a, [$d11e] ld [de], a inc de push hl ld hl, $cd37 inc [hl] pop hl jr .asm_75d42 .asm_75d64 ld a, $ff ld [de], a ret FossilsList: ; 75d68 (1d:5d68) db DOME_FOSSIL db HELIX_FOSSIL db OLD_AMBER db $00 Lab4Text1: ; 75d6c (1d:5d6c) db $8 ld a, [$d7a3] bit 0, a jr nz, .asm_75d96 ; 0x75d72 $22 ld hl, UnnamedText_75dc6 call PrintText call Func_75d38 ld a, [$cd37] and a jr z, .asm_75d8d ; 0x75d81 $a ld b, BANK(GiveFossilToCinnabarLab) ld hl, GiveFossilToCinnabarLab call Bankswitch jr .asm_75d93 ; 0x75d8b $6 .asm_75d8d ld hl, UnnamedText_75dcb call PrintText .asm_75d93 jp TextScriptEnd .asm_75d96 bit 1, a jr z, .asm_75da2 ; 0x75d98 $8 ld hl, UnnamedText_75dd0 call PrintText jr .asm_75d93 ; 0x75da0 $f1 .asm_75da2 call LoadFossilItemAndMonNameBank1D ld hl, UnnamedText_75dd5 call PrintText ld hl, $d7a3 set 2, [hl] ld a, [W_FOSSILMON] ld b, a ld c, $1e call GivePokemon jr nc, .asm_75d93 ; 0x75db9 $d8 ld hl, $d7a3 res 0, [hl] res 1, [hl] res 2, [hl] jr .asm_75d93 ; 0x75dc4 $cd UnnamedText_75dc6: ; 75dc6 (1d:5dc6) TX_FAR _UnnamedText_75dc6 db "@" UnnamedText_75dcb: ; 75dcb (1d:5dcb) TX_FAR _UnnamedText_75dcb db "@" UnnamedText_75dd0: ; 75dd0 (1d:5dd0) TX_FAR _UnnamedText_75dd0 db "@" UnnamedText_75dd5: ; 75dd5 (1d:5dd5) TX_FAR _UnnamedText_75dd5 db "@" Lab4Text2: ; 75dda (1d:5dda) db $08 ; asm ld a, $3 ld [wWhichTrade], a ld a, $54 call Predef jp TextScriptEnd LoadFossilItemAndMonNameBank1D: ; 75de8 (1d:5de8) ld b, BANK(LoadFossilItemAndMonName) ld hl, LoadFossilItemAndMonName jp Bankswitch Lab4Object: ; 0x75df0 (size=32) db $17 ; border tile db $2 ; warps db $7, $2, $4, CINNABAR_LAB_1 db $7, $3, $4, CINNABAR_LAB_1 db $0 ; signs db $2 ; people db SPRITE_OAK_AIDE, $2 + 4, $5 + 4, $fe, $2, $1 ; person db SPRITE_OAK_AIDE, $6 + 4, $7 + 4, $ff, $d1, $2 ; person ; warp-to EVENT_DISP $4, $7, $2 ; CINNABAR_LAB_1 EVENT_DISP $4, $7, $3 ; CINNABAR_LAB_1 Lab4Blocks: ; 75e10 (1d:5e10) INCBIN "maps/lab4.blk" CinnabarPokecenter_h: ; 0x75e20 to 0x75e2c (12 bytes) (id=171) db $06 ; tileset db CINNABAR_POKECENTER_HEIGHT, CINNABAR_POKECENTER_WIDTH ; dimensions (y, x) dw CinnabarPokecenterBlocks, CinnabarPokecenterTextPointers, CinnabarPokecenterScript ; blocks, texts, scripts db $00 ; connections dw CinnabarPokecenterObject ; objects CinnabarPokecenterScript: ; 75e2c (1d:5e2c) call Func_22fa jp EnableAutoTextBoxDrawing CinnabarPokecenterTextPointers: ; 75e32 (1d:5e32) dw CinnabarPokecenterText1 dw CinnabarPokecenterText2 dw CinnabarPokecenterText3 dw CinnabarPokecenterText4 CinnabarPokecenterText1: ; 75e3a (1d:5e3a) db $ff CinnabarPokecenterText2: ; 75e3b (1d:5e3b) TX_FAR _CinnabarPokecenterText1 db "@" CinnabarPokecenterText3: ; 75e40 (1d:5e40) TX_FAR _CinnabarPokecenterText3 db "@" CinnabarPokecenterText4: ; 75e45 (1d:5e45) db $f6 CinnabarPokecenterObject: ; 0x75e46 (size=44) db $0 ; border tile db $2 ; warps db $7, $3, $3, $ff db $7, $4, $3, $ff db $0 ; signs db $4 ; people db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person db SPRITE_LASS, $4 + 4, $9 + 4, $fe, $0, $2 ; person db SPRITE_GENTLEMAN, $6 + 4, $2 + 4, $ff, $ff, $3 ; person db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $4 ; person ; warp-to EVENT_DISP $7, $7, $3 EVENT_DISP $7, $7, $4 CinnabarMart_h: ; 0x75e72 to 0x75e7e (12 bytes) (id=172) db $02 ; tileset db CINNABAR_MART_HEIGHT, CINNABAR_MART_WIDTH ; dimensions (y, x) dw CinnabarMartBlocks, CinnabarMartTextPointers, CinnabarMartScript ; blocks, texts, scripts db $00 ; connections dw CinnabarMartObject ; objects CinnabarMartScript: ; 75e7e (1d:5e7e) jp EnableAutoTextBoxDrawing CinnabarMartTextPointers: ; 75e81 (1d:5e81) dw CinnabarMartText1 dw CinnabarMartText2 dw CinnabarMartText3 CinnabarMartText2: ; 75e87 (1d:5e87) TX_FAR _CinnabarMartText2 db "@" CinnabarMartText3: ; 75e8c (1d:5e8c) TX_FAR _CinnabarMartText3 db "@" CinnabarMartObject: ; 0x75e91 (size=38) db $0 ; border tile db $2 ; warps db $7, $3, $4, $ff db $7, $4, $4, $ff db $0 ; signs db $3 ; people db SPRITE_MART_GUY, $5 + 4, $0 + 4, $ff, $d3, $1 ; person db SPRITE_ERIKA, $2 + 4, $6 + 4, $ff, $ff, $2 ; person db SPRITE_OAK_AIDE, $4 + 4, $3 + 4, $ff, $ff, $3 ; person ; warp-to EVENT_DISP $4, $7, $3 EVENT_DISP $4, $7, $4 CopycatsHouseF1_h: ; 0x75eb7 to 0x75ec3 (12 bytes) (id=175) db $01 ; tileset db COPYCATS_HOUSE_1F_HEIGHT, COPYCATS_HOUSE_1F_WIDTH ; dimensions (y, x) dw CopycatsHouseF1Blocks, CopycatsHouseF1TextPointers, CopycatsHouseF1Script ; blocks, texts, scripts db $00 ; connections dw CopycatsHouseF1Object ; objects CopycatsHouseF1Script: ; 75ec3 (1d:5ec3) jp EnableAutoTextBoxDrawing CopycatsHouseF1TextPointers: ; 75ec6 (1d:5ec6) dw CopycatsHouseF1Text1 dw CopycatsHouseF1Text2 dw CopycatsHouseF1Text3 CopycatsHouseF1Text1: ; 75ecc (1d:5ecc) TX_FAR _CopycatsHouseF1Text1 db "@" CopycatsHouseF1Text2: ; 75ed1 (1d:5ed1) TX_FAR _CopycatsHouseF1Text2 db "@" CopycatsHouseF1Text3: ; 75ed6 (1d:5ed6) TX_FAR _CopycatsHouseF1Text3 db $8 ld a, CHANSEY call PlayCry jp TextScriptEnd CopycatsHouseF1Object: ; 0x75ee3 (size=46) db $a ; border tile db $3 ; warps db $7, $2, $0, $ff db $7, $3, $0, $ff db $1, $7, $0, COPYCATS_HOUSE_2F db $0 ; signs db $3 ; people db SPRITE_MOM_GEISHA, $2 + 4, $2 + 4, $ff, $d0, $1 ; person db SPRITE_FAT_BALD_GUY, $4 + 4, $5 + 4, $ff, $d2, $2 ; person db SPRITE_CLEFAIRY, $4 + 4, $1 + 4, $fe, $1, $3 ; person ; warp-to EVENT_DISP $4, $7, $2 EVENT_DISP $4, $7, $3 EVENT_DISP $4, $1, $7 ; COPYCATS_HOUSE_2F Gary_h: ; 75f11 (1d:5f11) db $7 ;tileset db CHAMPIONS_ROOM_HEIGHT, CHAMPIONS_ROOM_WIDTH ; Height, Width dw GaryBlocks, GaryTextPointers, GaryScript db $0 ;No Connections dw GaryObject GaryScript: ; 75f1d (1d:5f1d) call EnableAutoTextBoxDrawing ld hl, GaryScriptPointers ld a, [W_GARYCURSCRIPT] jp CallFunctionInTable GaryScript_75f29: ; 75f29 (1d:5f29) xor a ld [wJoypadForbiddenButtonsMask], a ld [W_GARYCURSCRIPT], a ret GaryScriptPointers: ; 75f31 (1d:5f31) dw GaryScript0 dw GaryScript1 dw GaryScript2 dw GaryScript3 dw GaryScript4 dw GaryScript5 dw GaryScript6 dw GaryScript7 dw GaryScript8 dw GaryScript9 dw GaryScript10 GaryScript0: ; 75f47 (1d:5f47) ret GaryScript1: ; 75f48 (1d:5f48) ld a, $ff ld [wJoypadForbiddenButtonsMask], a ld hl, $ccd3 ld de, RLEMovement75f63 call DecodeRLEList dec a ld [$cd38], a call Func_3486 ld a, $2 ld [W_GARYCURSCRIPT], a ret RLEMovement75f63: ; 75f63 (1d:5f63) db $40,1 db $10,1 db $40,3 db $ff GaryScript2: ; 75f6a (1d:5f6a) ld a, [$cd38] and a ret nz call Delay3 xor a ld [wJoypadForbiddenButtonsMask], a ld hl, $d355 res 7, [hl] ld a, $1 ld [$ff00+$8c], a call DisplayTextID call Delay3 ld hl, $d72d set 6, [hl] set 7, [hl] ld hl, UnnamedText_760f9 ld de, UnnamedText_760fe call PreBattleSaveRegisters ld a, $f3 ld [$d059], a ; select which team to use during the encounter ld a, [W_RIVALSTARTER] cp SQUIRTLE jr nz, .NotSquirtle ; 0x75f9f $4 ld a, $1 jr .done .NotSquirtle cp BULBASAUR jr nz, .Charmander ; 0x75fa7 $4 ld a, $2 jr .done .Charmander ld a, $3 .done ld [W_TRAINERNO], a xor a ld [H_CURRENTPRESSEDBUTTONS], a ld a, $3 ld [W_GARYCURSCRIPT], a ret GaryScript3: ; 75fbb (1d:5fbb) ld a, [W_ISINBATTLE] cp $ff jp z, GaryScript_75f29 call UpdateSprites ; move sprites ld hl, $d867 set 1, [hl] ld a, $f0 ld [wJoypadForbiddenButtonsMask], a ld a, $1 ld [$ff00+$8c], a call GaryScript_760c8 ld a, $1 ld [$ff00+$8c], a call SetSpriteMovementBytesToFF ld a, $4 ld [W_GARYCURSCRIPT], a ret GaryScript4: ; 75fe4 (1d:5fe4) ld b, BANK(Music_Cities1AlternateTempo) ld hl, Music_Cities1AlternateTempo call Bankswitch ld a, $2 ld [$ff00+$8c], a call GaryScript_760c8 ld a, $2 ld [$ff00+$8c], a call SetSpriteMovementBytesToFF ld de, MovementData_76014 ld a, $2 ld [$ff00+$8c], a call MoveSprite ld a, $d6 ld [$cc4d], a ld a, $15 call Predef ld a, $5 ld [W_GARYCURSCRIPT], a ret MovementData_76014: ; 76014 (1d:6014) db $40,$40,$40,$40,$40,$FF GaryScript5: ; 7601a (1d:601a) ld a, [$d730] bit 0, a ret nz ld a, $2 ld [$d528], a ld a, $1 ld [$ff00+$8c], a ld a, $8 ld [$ff00+$8d], a call Func_34a6 ld a, $2 ld [$ff00+$8c], a xor a ld [$ff00+$8d], a call Func_34a6 ; face object ld a, $3 ld [$ff00+$8c], a call GaryScript_760c8 ld a, $6 ld [W_GARYCURSCRIPT], a ret GaryScript6: ; 76047 (1d:6047) ld a, $2 ld [$ff00+$8c], a ld a, $c ld [$ff00+$8d], a call Func_34a6 ; face object ld a, $4 ld [$ff00+$8c], a call GaryScript_760c8 ld a, $7 ld [W_GARYCURSCRIPT], a ret GaryScript7: ; 7605f (1d:605f) ld a, $2 ld [$ff00+$8c], a xor a ld [$ff00+$8d], a call Func_34a6 ; face object ld a, $5 ld [$ff00+$8c], a call GaryScript_760c8 ld de, MovementData_76080 ld a, $2 ld [$ff00+$8c], a call MoveSprite ld a, $8 ld [W_GARYCURSCRIPT], a ret MovementData_76080: ; 76080 (1d:6080) db $40,$40,$FF GaryScript8: ; 76083 (1d:6083) ld a, [$d730] bit 0, a ret nz ld a, $d6 ld [$cc4d], a ld a, $11 call Predef ld a, $9 ld [W_GARYCURSCRIPT], a ret GaryScript9: ; 76099 (1d:6099) ld a, $ff ld [wJoypadForbiddenButtonsMask], a ld hl, $ccd3 ld de, RLEMovement760b4 call DecodeRLEList dec a ld [$cd38], a call Func_3486 ld a, $a ld [W_GARYCURSCRIPT], a ret RLEMovement760b4 ; 760b4 (1d:60b4) db $40,4 db $20,1 db $ff GaryScript10: ; 760b9 (1d:60b9) ld a, [$cd38] and a ret nz xor a ld [wJoypadForbiddenButtonsMask], a ld a, $0 ld [W_GARYCURSCRIPT], a ret GaryScript_760c8 ; 760c8 (1d:60c8) ld a, $f0 ld [wJoypadForbiddenButtonsMask], a call DisplayTextID ld a, $ff ld [wJoypadForbiddenButtonsMask], a ret GaryTextPointers: ; 760d6 (1d:60d6) dw GaryText1 dw GaryText2 dw GaryText3 dw GaryText4 dw GaryText5 GaryText1: ; 760e0 (1d:60e0) db $08 ; asm ld a, [$d867] bit 1, a ld hl, UnnamedText_760f4 jr z, .asm_17e9f ; 0x760e9 ld hl, UnnamedText_76103 .asm_17e9f ; 0x760ee call PrintText jp TextScriptEnd UnnamedText_760f4: ; 760f4 (1d:60f4) TX_FAR _UnnamedText_760f4 db "@" UnnamedText_760f9: ; 760f9 (1d:60f9) TX_FAR _UnnamedText_760f9 db "@" UnnamedText_760fe: ; 760fe (1d:60fe) TX_FAR _UnnamedText_760fe db "@" UnnamedText_76103: ; 76103 (1d:6103) TX_FAR _UnnamedText_76103 db "@" GaryText2: ; 76108 (1d:6108) TX_FAR _GaryText2 db "@" GaryText3: ; 7610d (1d:610d) db $8 ld a, [$d717] ld [$d11e], a call GetMonName ld hl, UnnamedText_76120 call PrintText jp TextScriptEnd UnnamedText_76120: ; 76120 (1d:6120) TX_FAR _UnnamedText_76120 db "@" GaryText4: ; 76125 (1d:6125) TX_FAR _UnnamedText_76125 db "@" GaryText5: ; 7612a (1d:612a) TX_FAR _UnnamedText_7612a db "@" GaryObject: ; 0x7612f (size=48) db $3 ; border tile db $4 ; warps db $7, $3, $1, LANCES_ROOM db $7, $4, $2, LANCES_ROOM db $0, $3, $0, HALL_OF_FAME db $0, $4, $0, HALL_OF_FAME db $0 ; signs db $2 ; people db SPRITE_BLUE, $2 + 4, $4 + 4, $ff, $d0, $1 ; person db SPRITE_OAK, $7 + 4, $3 + 4, $ff, $d1, $2 ; person ; warp-to EVENT_DISP $4, $7, $3 ; LANCES_ROOM EVENT_DISP $4, $7, $4 ; LANCES_ROOM EVENT_DISP $4, $0, $3 ; HALL_OF_FAME EVENT_DISP $4, $0, $4 ; HALL_OF_FAME GaryBlocks: ; 7615f (1d:615f) INCBIN "maps/gary.blk" Lorelei_h: ; 0x7616f to 0x7617b (12 bytes) (id=245) db $07 ; tileset db LORELEIS_ROOM_HEIGHT, LORELEIS_ROOM_WIDTH ; dimensions (y, x) dw LoreleiBlocks, LoreleiTextPointers, LoreleiScript ; blocks, texts, scripts db $00 ; connections dw LoreleiObject ; objects LoreleiScript: ; 7617b (1d:617b) call LoreleiScript_76191 call EnableAutoTextBoxDrawing ld hl, LoreleiTrainerHeaders ld de, LoreleiScriptPointers ld a, [W_LORELEICURSCRIPT] call ExecuteCurMapScriptInTable ld [W_LORELEICURSCRIPT], a ret LoreleiScript_76191: ; 76191 (1d:6191) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld hl, $d734 set 1, [hl] ld a, [$d863] bit 1, a jr z, .asm_761a9 ld a, $5 jr .asm_761ab .asm_761a9 ld a, $24 .asm_761ab ld [$d09f], a ld bc, $2 ld a, $17 jp Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) Func_761b6: ; 761b6 (1d:61b6) xor a ld [W_LORELEICURSCRIPT], a ret LoreleiScriptPointers: ; 761bb (1d:61bb) dw LoreleiScript0 dw Func_324c dw LoreleiScript2 dw LoreleiScript3 dw LoreleiScript4 LoreleiScript4: ; 761c5 (1d:61c5) ret asm_761c6: ; 761c6 (1d:61c6) ld hl, $ccd3 ld a, $40 ld [hli], a ld [hli], a ld [hli], a ld [hli], a ld [hli], a ld [hl], a ld a, $6 ld [$cd38], a call Func_3486 ld a, $3 ld [W_LORELEICURSCRIPT], a ld [W_CURMAPSCRIPT], a ret LoreleiScript0: ; 761e2 (1d:61e2) ld hl, CoordsData_76223 call ArePlayerCoordsInArray jp nc, CheckFightingMapTrainers xor a ld [H_NEWLYPRESSEDBUTTONS], a ld [H_CURRENTPRESSEDBUTTONS], a ld [$ccd3], a ld [$cd38], a ld a, [wWhichTrade] ; $cd3d cp $3 jr c, .asm_76206 ld hl, $d863 bit 6, [hl] set 6, [hl] jr z, asm_761c6 .asm_76206 ld a, $2 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld a, $40 ld [$ccd3], a ld a, $1 ld [$cd38], a call Func_3486 ld a, $3 ld [W_LORELEICURSCRIPT], a ld [W_CURMAPSCRIPT], a ret CoordsData_76223: ; 76223 (1d:6223) db $0A,$04 db $0A,$05 db $0B,$04 db $0B,$05 db $FF LoreleiScript3: ; 7622c (1d:622c) ld a, [$cd38] and a ret nz call Delay3 xor a ld [wJoypadForbiddenButtonsMask], a ld [W_LORELEICURSCRIPT], a ld [W_CURMAPSCRIPT], a ret LoreleiScript2: ; 7623f (1d:623f) call EndTrainerBattle ld a, [W_ISINBATTLE] ; $d057 cp $ff jp z, Func_761b6 ld a, $1 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c jp DisplayTextID LoreleiTextPointers: ; 76251 (1d:6251) dw LoreleiText1 dw LoreleiText2 LoreleiTrainerHeaders: ; 76255 (1d:6255) LoreleiTrainerHeader0: ; 76255 (1d:6255) db $1 ; flag's bit db ($0 << 4) ; trainer's view range dw $d863 ; flag's byte dw LoreleiBeforeBattleText ; 0x626c TextBeforeBattle dw LoreleiAfterBattleText ; 0x6276 TextAfterBattle dw LoreleiEndBattleText ; 0x6271 TextEndBattle dw LoreleiEndBattleText ; 0x6271 TextEndBattle db $ff LoreleiText1: ; 76262 (1d:6262) db $08 ; asm ld hl, LoreleiTrainerHeader0 call TalkToTrainer jp TextScriptEnd LoreleiBeforeBattleText: ; 7626c (1d:626c) TX_FAR _LoreleiBeforeBattleText db "@" LoreleiEndBattleText: ; 76271 (1d:6271) TX_FAR _LoreleiEndBattleText db "@" LoreleiAfterBattleText: ; 76276 (1d:6276) TX_FAR _LoreleiAfterBattleText db "@" LoreleiText2: ; 7627b (1d:627b) TX_FAR _UnnamedText_7627b db "@" LoreleiObject: ; 0x76280 (size=44) db $3 ; border tile db $4 ; warps db $b, $4, $2, INDIGO_PLATEAU_LOBBY db $b, $5, $2, INDIGO_PLATEAU_LOBBY db $0, $4, $0, BRUNOS_ROOM db $0, $5, $1, BRUNOS_ROOM db $0 ; signs db $1 ; people db SPRITE_LORELEI, $2 + 4, $5 + 4, $ff, $d0, $41, LORELEI + $C8, $1 ; trainer ; warp-to EVENT_DISP $5, $b, $4 ; INDIGO_PLATEAU_LOBBY EVENT_DISP $5, $b, $5 ; INDIGO_PLATEAU_LOBBY EVENT_DISP $5, $0, $4 ; BRUNOS_ROOM EVENT_DISP $5, $0, $5 ; BRUNOS_ROOM LoreleiBlocks: ; 762ac (1d:62ac) INCBIN "maps/lorelei.blk" Bruno_h: ; 0x762ca to 0x762d6 (12 bytes) (id=246) db $07 ; tileset db BRUNOS_ROOM_HEIGHT, BRUNOS_ROOM_WIDTH ; dimensions (y, x) dw BrunoBlocks, BrunoTextPointers, BrunoScript ; blocks, texts, scripts db $00 ; connections dw BrunoObject ; objects BrunoScript: ; 762d6 (1d:62d6) call BrunoScript_762ec call EnableAutoTextBoxDrawing ld hl, BrunoTrainerHeaders ld de, BrunoScriptPointers ld a, [W_BRUNOCURSCRIPT] call ExecuteCurMapScriptInTable ld [W_BRUNOCURSCRIPT], a ret BrunoScript_762ec: ; 762ec (1d:62ec) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld a, [$d864] bit 1, a jr z, .asm_76300 ld a, $5 jp Func_76302 .asm_76300 ld a, $24 Func_76302: ; 76302 (1d:6302) ld [$d09f], a ld bc, $2 ld a, $17 jp Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) Func_7630d: ; 7630d (1d:630d) xor a ld [W_BRUNOCURSCRIPT], a ret BrunoScriptPointers: ; 76312 (1d:6312) dw BrunoScript0 dw Func_324c dw BrunoScript2 dw BrunoScript3 dw BrunoScript4 BrunoScript4: ; 7631c (1d:631c) ret asm_7631d: ; 7631d (1d:631d) ld hl, $ccd3 ld a, $40 ld [hli], a ld [hli], a ld [hli], a ld [hli], a ld [hli], a ld [hl], a ld a, $6 ld [$cd38], a call Func_3486 ld a, $3 ld [W_BRUNOCURSCRIPT], a ld [W_CURMAPSCRIPT], a ret BrunoScript0: ; 76339 (1d:6339) ld hl, CoordsData_7637a call ArePlayerCoordsInArray jp nc, CheckFightingMapTrainers xor a ld [H_NEWLYPRESSEDBUTTONS], a ld [H_CURRENTPRESSEDBUTTONS], a ld [$ccd3], a ld [$cd38], a ld a, [wWhichTrade] ; $cd3d cp $3 jr c, .asm_7635d ld hl, $d864 bit 6, [hl] set 6, [hl] jr z, asm_7631d .asm_7635d ld a, $2 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld a, $40 ld [$ccd3], a ld a, $1 ld [$cd38], a call Func_3486 ld a, $3 ld [W_BRUNOCURSCRIPT], a ld [W_CURMAPSCRIPT], a ret CoordsData_7637a: ; 7637a (1d:637a) db $0A,$04 db $0A,$05 db $0B,$04 db $0B,$05 db $FF BrunoScript3: ; 76383 (1d:6383) ld a, [$cd38] and a ret nz call Delay3 xor a ld [wJoypadForbiddenButtonsMask], a ld [W_BRUNOCURSCRIPT], a ld [W_CURMAPSCRIPT], a ret BrunoScript2: ; 76396 (1d:6396) call EndTrainerBattle ld a, [W_ISINBATTLE] ; $d057 cp $ff jp z, Func_7630d ld a, $1 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c jp DisplayTextID BrunoTextPointers: ; 763a8 (1d:63a8) dw BrunoText1 dw BrunoText2 BrunoTrainerHeaders: ; 763ac (1d:63ac) BrunoTrainerHeader0: ; 763ac (1d:63ac) db $1 ; flag's bit db ($0 << 4) ; trainer's view range dw $d864 ; flag's byte dw BrunoBeforeBattleText ; 0x63c3 TextBeforeBattle dw BrunoAfterBattleText ; 0x63cd TextAfterBattle dw BrunoEndBattleText ; 0x63c8 TextEndBattle dw BrunoEndBattleText ; 0x63c8 TextEndBattle db $ff BrunoText1: ; 763b9 (1d:63b9) db $08 ; asm ld hl, BrunoTrainerHeader0 call TalkToTrainer jp TextScriptEnd BrunoBeforeBattleText: ; 763c3 (1d:63c3) TX_FAR _BrunoBeforeBattleText db "@" BrunoEndBattleText: ; 763c8 (1d:63c8) TX_FAR _BrunoEndBattleText db "@" BrunoAfterBattleText: ; 763cd (1d:63cd) TX_FAR _BrunoAfterBattleText db "@" BrunoText2: ; 763d2 (1d:63d2) TX_FAR _UnnamedText_763d2 db "@" BrunoObject: ; 0x763d7 (size=44) db $3 ; border tile db $4 ; warps db $b, $4, $2, LORELEIS_ROOM db $b, $5, $3, LORELEIS_ROOM db $0, $4, $0, AGATHAS_ROOM db $0, $5, $1, AGATHAS_ROOM db $0 ; signs db $1 ; people db SPRITE_BRUNO, $2 + 4, $5 + 4, $ff, $d0, $41, BRUNO + $C8, $1 ; trainer ; warp-to EVENT_DISP $5, $b, $4 ; LORELEIS_ROOM EVENT_DISP $5, $b, $5 ; LORELEIS_ROOM EVENT_DISP $5, $0, $4 ; AGATHAS_ROOM EVENT_DISP $5, $0, $5 ; AGATHAS_ROOM BrunoBlocks: ; 76403 (1d:6403) INCBIN "maps/bruno.blk" Agatha_h: ; 0x76421 to 0x7642d (12 bytes) (id=247) db $0f ; tileset db AGATHAS_ROOM_HEIGHT, AGATHAS_ROOM_WIDTH ; dimensions (y, x) dw AgathaBlocks, AgathaTextPointers, AgathaScript ; blocks, texts, scripts db $00 ; connections dw AgathaObject ; objects AgathaScript: ; 7642d (1d:642d) call AgathaScript_76443 call EnableAutoTextBoxDrawing ld hl, AgathaTrainerHeaders ld de, AgathaScriptPointers ld a, [W_AGATHACURSCRIPT] call ExecuteCurMapScriptInTable ld [W_AGATHACURSCRIPT], a ret AgathaScript_76443: ; 76443 (1d:6443) ld hl, $d126 bit 5, [hl] res 5, [hl] ret z ld a, [$d865] bit 1, a jr z, .asm_76457 ld a, $e jp Func_76459 .asm_76457 ld a, $3b Func_76459: ; 76459 (1d:6459) ld [$d09f], a ld bc, $2 ld a, $17 jp Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e)) Func_76464: ; 76464 (1d:6464) xor a ld [W_AGATHACURSCRIPT], a ret AgathaScriptPointers: ; 76469 (1d:6469) dw AgathaScript0 dw Func_324c dw AgathaScript2 dw AgathaScript3 dw AgathaScript4 AgathaScript4: ; 76473 (1d:6473) ret asm_76474: ; 76474 (1d:6474) ld hl, $ccd3 ld a, $40 ld [hli], a ld [hli], a ld [hli], a ld [hli], a ld [hli], a ld [hl], a ld a, $6 ld [$cd38], a call Func_3486 ld a, $3 ld [W_AGATHACURSCRIPT], a ld [W_CURMAPSCRIPT], a ret AgathaScript0: ; 76490 (1d:6490) ld hl, CoordsData_764d1 call ArePlayerCoordsInArray jp nc, CheckFightingMapTrainers xor a ld [H_NEWLYPRESSEDBUTTONS], a ld [H_CURRENTPRESSEDBUTTONS], a ld [$ccd3], a ld [$cd38], a ld a, [wWhichTrade] ; $cd3d cp $3 jr c, .asm_764b4 ld hl, $d865 bit 6, [hl] set 6, [hl] jr z, asm_76474 .asm_764b4 ld a, $2 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld a, $40 ld [$ccd3], a ld a, $1 ld [$cd38], a call Func_3486 ld a, $3 ld [W_AGATHACURSCRIPT], a ld [W_CURMAPSCRIPT], a ret CoordsData_764d1: ; 764d1 (1d:64d1) db $0A,$04 db $0A,$05 db $0B,$04 db $0B,$05 db $FF AgathaScript3: ; 764da (1d:64da) ld a, [$cd38] and a ret nz call Delay3 xor a ld [wJoypadForbiddenButtonsMask], a ld [W_AGATHACURSCRIPT], a ld [W_CURMAPSCRIPT], a ret AgathaScript2: ; 764ed (1d:64ed) call EndTrainerBattle ld a, [W_ISINBATTLE] ; $d057 cp $ff jp z, Func_76464 ld a, $1 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c call DisplayTextID ld a, $1 ld [W_GARYCURSCRIPT], a ret AgathaTextPointers: ; 76505 (1d:6505) dw AgathaText1 dw AgathaText2 AgathaTrainerHeaders: ; 76509 (1d:6509) AgathaTrainerHeader0: ; 76509 (1d:6509) db $1 ; flag's bit db ($0 << 4) ; trainer's view range dw $d865 ; flag's byte dw AgathaBeforeBattleText ; 0x6520 TextBeforeBattle dw AgathaAfterBattleText ; 0x652a TextAfterBattle dw AgathaEndBattleText ; 0x6525 TextEndBattle dw AgathaEndBattleText ; 0x6525 TextEndBattle db $ff AgathaText1: ; 76516 (1d:6516) db $08 ; asm ld hl, AgathaTrainerHeader0 call TalkToTrainer jp TextScriptEnd AgathaBeforeBattleText: ; 76520 (1d:6520) TX_FAR _AgathaBeforeBattleText db "@" AgathaEndBattleText: ; 76525 (1d:6525) TX_FAR _AgathaEndBattleText db "@" AgathaAfterBattleText: ; 7652a (1d:652a) TX_FAR _AgathaAfterBattleText db "@" AgathaText2: ; 7652f (1d:652f) TX_FAR _AgathaText2 db "@" AgathaObject: ; 0x76534 (size=44) db $0 ; border tile db $4 ; warps db $b, $4, $2, BRUNOS_ROOM db $b, $5, $3, BRUNOS_ROOM db $0, $4, $0, LANCES_ROOM db $0, $5, $0, LANCES_ROOM db $0 ; signs db $1 ; people db SPRITE_AGATHA, $2 + 4, $5 + 4, $ff, $d0, $41, AGATHA + $C8, $1 ; trainer ; warp-to EVENT_DISP $5, $b, $4 ; BRUNOS_ROOM EVENT_DISP $5, $b, $5 ; BRUNOS_ROOM EVENT_DISP $5, $0, $4 ; LANCES_ROOM EVENT_DISP $5, $0, $5 ; LANCES_ROOM AgathaBlocks: ; 76560 (1d:6560) INCBIN "maps/agatha.blk" Func_7657e: ; XXX: make better (has to do with the hall of fame on the PC) ; 0x7657e ld hl, UnnamedText_76683 call PrintText ld hl, $D730 set 6, [hl] push hl ld a, [$CFCB] push af ld a, [$FF00+$D7] push af xor a ld [$FF00+$D7], a ld [W_SPRITEFLIPPED], a ld [$CFCB], a ld [$CD41], a ld [$CD42], a ld a, [$D5A2] ld b, a cp a, $33 jr c, .first ld b, $32 sub b ld [$CD42], a .first ld hl, $CD42 inc [hl] push bc ld a, [$CD41] ld [$CD3D], a ld b, BANK(Func_73b3f) ld hl, Func_73b3f call Bankswitch call Func_765e5 pop bc jr c, .second ld hl, $CD41 inc [hl] ld a, [hl] cp b jr nz, .first .second pop af ld [$FF00+$D7], a pop af ld [$CFCB], a pop hl res 6, [hl] call GBPalWhiteOutWithDelay3 call ClearScreen call GoPAL_SET_CF1C jp GBPalNormal Func_765e5: ; 765e5 (1d:65e5) ld c, 6 .third push bc call Func_76610 call WaitForTextScrollButtonPress ld a, [H_CURRENTPRESSEDBUTTONS] bit 1, a jr nz, .fifth ld hl, $CC6B ld de, $CC5B ld bc, $0050 call CopyData pop bc ld a, [$CC5B] cp a, $FF jr z, .fourth dec c jr nz, .third .fourth and a ret .fifth pop bc scf ret Func_76610: ; 76610 (1d:6610) call GBPalWhiteOutWithDelay3 call ClearScreen ld hl, $CC5B ld a, [hli] ld [$CD3D], a ld [$CF91], a ld [$D0B5], a ld [$CFD9], a ld [$CF1D], a ld a, [hli] ld [$CD3F], a ld de, $CD6D ld bc, $000B call CopyData ld b, $0B ld c, 0 call GoPAL_SET FuncCoord 12, 5 ; $c410 ld hl, Coord call GetMonHeader call LoadFrontSpriteByMonIndex call GBPalNormal FuncCoord 0, 13 ; $c4a4 ld hl, Coord ld b, 2 ld c, $12 call TextBoxBorder FuncCoord 1, 15 ; $c4cd ld hl, Coord ld de, HallOfFameNoText call PlaceString FuncCoord 16, 15 ; $c4dc ld hl, Coord ld de, $CD42 ld bc, $0103 call PrintNumber ld b, BANK(Func_702f0) ld hl, Func_702f0 jp Bankswitch HallOfFameNoText: ; 76670 (1d:6670) db "HALL OF FAME No @" UnnamedText_76683: ; 76683 (1d:6683) TX_FAR _UnnamedText_76683 db "@" HiddenItems: ; 76688 (1d:6688) ld hl, HiddenItemCoords call Func_76857 ld [$cd41], a ld hl, $d6f0 ld a, [$cd41] ld c, a ld b, $2 ld a, $10 call Predef ld a, c and a ret nz call EnableAutoTextBoxDrawing ld a, $1 ld [$cc3c], a ld a, [$cd3d] ; item ID ld [$d11e], a call GetItemName ld a, $24 jp Func_3ef5 HiddenItemCoords: ; 766b8 (1d:66b8) ; map ID, then coords db VIRIDIAN_FOREST,$12,$01 db VIRIDIAN_FOREST,$2a,$10 db MT_MOON_3,$0c,$12 db ROUTE_25,$03,$26 db ROUTE_9,$07,$0e db SS_ANNE_6,$09,$0d db SS_ANNE_10,$01,$03 db ROUTE_10,$11,$09 db ROUTE_10,$35,$10 db ROCKET_HIDEOUT_1,$0f,$15 db ROCKET_HIDEOUT_3,$11,$1b db ROCKET_HIDEOUT_4,$01,$19 db POKEMONTOWER_5,$0c,$04 db ROUTE_13,$0e,$01 db ROUTE_13,$0d,$10 db MANSION_4,$09,$01 db SAFARIZONEENTRANCE,$01,$0a db SAFARI_ZONE_WEST,$05,$06 db SILPH_CO_5F,$03,$0c db SILPH_CO_9F,$0f,$02 db COPYCATS_HOUSE_2F,$01,$01 db UNKNOWN_DUNGEON_1,$0b,$0e db UNKNOWN_DUNGEON_3,$03,$1b db POWER_PLANT,$10,$11 db POWER_PLANT,$01,$0c db SEAFOAM_ISLANDS_3,$0f,$0f db SEAFOAM_ISLANDS_5,$11,$19 db MANSION_1,$10,$08 db MANSION_3,$09,$01 db ROUTE_23,$2c,$09 db ROUTE_23,$46,$13 db ROUTE_23,$5a,$08 db VICTORY_ROAD_2,$02,$05 db VICTORY_ROAD_2,$07,$1a db $6f,$0b,$0e db VIRIDIAN_CITY,$04,$0e db ROUTE_11,$05,$30 db ROUTE_12,$3f,$02 db ROUTE_17,$0e,$0f db ROUTE_17,$2d,$08 db ROUTE_17,$48,$11 db ROUTE_17,$5b,$04 db ROUTE_17,$79,$08 db UNDERGROUND_PATH_NS,$04,$03 db UNDERGROUND_PATH_NS,$22,$04 db UNDERGROUND_PATH_WE,$02,$0c db UNDERGROUND_PATH_WE,$05,$15 db CELADON_CITY,$0f,$30 db ROUTE_25,$01,$0a db MT_MOON_3,$09,$21 db SEAFOAM_ISLANDS_4,$10,$09 db VERMILION_CITY,$0b,$0e db CERULEAN_CITY,$08,$0f db ROUTE_4,$03,$28 db $ff FoundHiddenItemText: ; 7675b (1d:675b) ; XXX where is the pointer to this? TX_FAR UnnamedText_894d0 db $8 ld a, [$cd3d] ; item ID ld b, a ld c, 1 call GiveItem jr nc, .BagFull ld hl, $d6f0 ld a, [$cd41] ld c, a ld b, $1 ld a, $10 call Predef ld a, $89 call PlaySoundWaitForCurrent ; play sound call WaitForSoundToFinish ; wait for sound to finish playing jp TextScriptEnd .BagFull call WaitForTextScrollButtonPress ; wait for button press xor a ld [$cc3c], a ld hl, HiddenItemBagFullText call PrintText jp TextScriptEnd HiddenItemBagFullText: ; 76794 (1d:6794) TX_FAR _UnnamedText_76794 db "@" HiddenCoins: ; 76799 (1d:6799) ld b, COIN_CASE ld a, $1c call Predef ld a, b and a ret z ld hl, HiddenCoinCoords call Func_76857 ld [$cd41], a ld hl, $d6fe ld a, [$cd41] ld c, a ld b, $2 ld a, $10 call Predef ld a, c and a ret nz xor a ld [$ff00+$9f], a ld [$ff00+$a0], a ld [$ff00+$a1], a ld a, [$cd3d] sub COIN cp 10 jr z, .bcd10 cp 20 jr z, .bcd20 cp 40 jr z, .bcd20 jr .bcd100 .bcd10 ld a, $10 ld [$ff00+$a1], a jr .bcddone .bcd20 ld a, $20 ld [$ff00+$a1], a jr .bcddone .bcd40 ; due to a typo, this is never used ld a, $40 ld [$ff00+$a1], a jr .bcddone .bcd100 ld a, $1 ld [$ff00+$a0], a .bcddone ld de, $d5a5 ld hl, $ffa1 ld c, $2 ld a, $b call Predef ld hl, $d6fe ld a, [$cd41] ld c, a ld b, $1 ld a, $10 call Predef call EnableAutoTextBoxDrawing ld a, [wPlayerCoins] cp $99 jr nz, .RoomInCoinCase ld a, [wPlayerCoins + 1] cp $99 jr nz, .RoomInCoinCase ld a, $2c jr .done .RoomInCoinCase ld a, $2b .done jp Func_3ef5 HiddenCoinCoords: ; 76822 (1d:6822) db GAME_CORNER,$08,$00 db GAME_CORNER,$10,$01 db GAME_CORNER,$0b,$03 db GAME_CORNER,$0e,$03 db GAME_CORNER,$0c,$04 db GAME_CORNER,$0c,$09 db GAME_CORNER,$0f,$09 db GAME_CORNER,$0e,$10 db GAME_CORNER,$10,$0a db GAME_CORNER,$07,$0b db GAME_CORNER,$08,$0f db GAME_CORNER,$0f,$0c db $ff FoundHiddenCoinsText: ; 76847 (1d:6847) TX_FAR _FoundHiddenCoinsText db $10,"@" DroppedHiddenCoinsText: ; 7684d (1d:684d) TX_FAR _FoundHiddenCoins2Text db $10 TX_FAR _DroppedHiddenCoinsText db "@" Func_76857: ; 76857 (1d:6857) ld a, [$cd40] ld d, a ld a, [$cd41] ld e, a ld a, [W_CURMAP] ld b, a ld c, $ff .loop inc c ld a, [hli] cp $ff ; end of the list? ret z ; if so, we're done here cp b jr nz, .asm_76877 ; 0x7686b $a ld a, [hli] cp d jr nz, .asm_76878 ; 0x7686f $7 ld a, [hli] cp e jr nz, .loop ld a, c ret .asm_76877 inc hl .asm_76878 inc hl jr .loop SECTION "bank1E",ROMX,BANK[$1E] ; Draws a "frame block". Frame blocks are blocks of tiles that are put ; together to form frames in battle animations. DrawFrameBlock: ; 78000 (1e:4000) ld l,c ld h,b ld a,[hli] ld [W_NUMFBTILES],a ld a,[W_FBDESTADDR + 1] ld e,a ld a,[W_FBDESTADDR] ld d,a xor a ld [W_FBTILECOUNTER],a ; loop counter .loop ld a,[W_FBTILECOUNTER] inc a ld [W_FBTILECOUNTER],a ld a,[W_SUBANIMTRANSFORM] dec a jr z,.flipHorizontalAndVertical ; 1 dec a jp z,.flipHorizontalTranslateDown ; 2 dec a jr z,.flipBaseCoords ; 3 .noTransformation ld a,[W_BASECOORDY] add [hl] ld [de],a ; store Y inc hl inc de ld a,[W_BASECOORDX] jr .finishCopying .flipBaseCoords ld a,[W_BASECOORDY] ld b,a ld a,136 sub b ; flip Y base coordinate add [hl] ; Y offset ld [de],a ; store Y inc hl inc de ld a,[W_BASECOORDX] ld b,a ld a,168 sub b ; flip X base coordinate .finishCopying ; finish copying values to OAM (when [W_SUBANIMTRANSFORM] not 1 or 2) add [hl] ; X offset ld [de],a ; store X inc hl inc de ld a,[hli] add a,$31 ; base tile ID for battle animations ld [de],a ; store tile ID inc de ld a,[hli] ld [de],a ; store flags inc de jp .nextTile .flipHorizontalAndVertical ld a,[W_BASECOORDY] add [hl] ; Y offset ld b,a ld a,136 sub b ; flip Y coordinate ld [de],a ; store Y inc hl inc de ld a,[W_BASECOORDX] add [hl] ; X offset ld b,a ld a,168 sub b ; flip X coordinate ld [de],a ; store X inc hl inc de ld a,[hli] add a,$31 ; base tile ID for battle animations ld [de],a ; store tile ID inc de ; toggle horizontal and vertical flip ld a,[hli] ; flags and a ld b,OAM_VFLIP | OAM_HFLIP jr z,.storeFlags1 cp a,OAM_HFLIP ld b,OAM_VFLIP jr z,.storeFlags1 cp a,OAM_VFLIP ld b,OAM_HFLIP jr z,.storeFlags1 ld b,0 .storeFlags1 ld a,b ld [de],a inc de jp .nextTile .flipHorizontalTranslateDown ld a,[W_BASECOORDY] add [hl] add a,40 ; translate Y coordinate downwards ld [de],a ; store Y inc hl inc de ld a,[W_BASECOORDX] add [hl] ld b,a ld a,168 sub b ; flip X coordinate ld [de],a ; store X inc hl inc de ld a,[hli] add a,$31 ; base tile ID for battle animations ld [de],a ; store tile ID inc de ld a,[hli] bit 5,a ; is horizontal flip enabled? jr nz,.disableHorizontalFlip .enableHorizontalFlip set 5,a jr .storeFlags2 .disableHorizontalFlip res 5,a .storeFlags2 ld [de],a inc de .nextTile ld a,[W_FBTILECOUNTER] ld c,a ld a,[W_NUMFBTILES] cp c jp nz,.loop ; go back up if there are more tiles to draw .afterDrawingTiles ld a,[W_FBMODE] cp a,2 jr z,.advanceFrameBlockDestAddr; skip delay and don't clean OAM buffer ld a,[W_SUBANIMFRAMEDELAY] ld c,a call DelayFrames ld a,[W_FBMODE] cp a,3 jr z,.advanceFrameBlockDestAddr ; skip cleaning OAM buffer cp a,4 jr z,.done ; skip cleaning OAM buffer and don't advance the frame block destination address ld a,[W_ANIMATIONID] cp a,GROWL jr z,.resetFrameBlockDestAddr call AnimationCleanOAM .resetFrameBlockDestAddr ld hl,wOAMBuffer ; OAM buffer ld a,l ld [W_FBDESTADDR + 1],a ld a,h ld [W_FBDESTADDR],a ; set destination address to beginning of OAM buffer ret .advanceFrameBlockDestAddr ld a,e ld [W_FBDESTADDR + 1],a ld a,d ld [W_FBDESTADDR],a .done ret PlayAnimation: ; 780f1 (1e:40f1) xor a ld [$FF8B],a ld [W_SUBANIMTRANSFORM],a ld a,[W_ANIMATIONID] ; get animation number dec a ld l,a ld h,0 add hl,hl ld de,AttackAnimationPointers ; $607d ; animation command stream pointers add hl,de ld a,[hli] ld h,[hl] ld l,a .animationLoop ld a,[hli] cp a,$FF jr z,.AnimationOver cp a,$C0 ; is this subanimation or a special effect? jr c,.playSubanimation .doSpecialEffect ld c,a ld de,SpecialEffectPointers .searchSpecialEffectTableLoop ld a,[de] cp c jr z,.foundMatch inc de inc de inc de jr .searchSpecialEffectTableLoop .foundMatch ld a,[hli] cp a,$FF ; is there a sound to play? jr z,.skipPlayingSound ld [wAnimSoundID],a ; store sound push hl push de call Func_7986f call PlaySound pop de pop hl .skipPlayingSound push hl inc de ld a,[de] ld l,a inc de ld a,[de] ld h,a ld de,.nextAnimationCommand push de jp [hl] ; jump to special effect function .playSubanimation ld c,a and a,%00111111 ld [W_SUBANIMFRAMEDELAY],a xor a sla c rla sla c rla ld [$D09F],a ; tile select ld a,[hli] ; sound ld [wAnimSoundID],a ; store sound ld a,[hli] ; subanimation ID ld c,l ld b,h ld l,a ld h,0 add hl,hl ld de,SubanimationPointers add hl,de ld a,l ld [W_SUBANIMADDRPTR],a ld a,h ld [W_SUBANIMADDRPTR + 1],a ld l,c ld h,b push hl ld a,[rOBP0] push af ld a,[$CC79] ld [rOBP0],a call LoadAnimationTileset call LoadSubanimation call PlaySubanimation pop af ld [rOBP0],a .nextAnimationCommand pop hl jr .animationLoop .AnimationOver ; 417B ret LoadSubanimation: ; 7817c (1e:417c) ld a,[W_SUBANIMADDRPTR + 1] ld h,a ld a,[W_SUBANIMADDRPTR] ld l,a ld a,[hli] ld e,a ld a,[hl] ld d,a ; de = address of subanimation ld a,[de] ld b,a and a,31 ld [W_SUBANIMCOUNTER],a ; number of frame blocks ld a,b and a,%11100000 cp a,5 << 5 ; is subanimation type 5? jr nz,.isNotType5 .isType5 call GetSubanimationTransform2 jr .saveTransformation .isNotType5 call GetSubanimationTransform1 .saveTransformation ; place the upper 3 bits of a into bits 0-2 of a before storing srl a swap a ld [W_SUBANIMTRANSFORM],a cp a,4 ; is the animation reversed? ld hl,0 jr nz,.storeSubentryAddr ; if the animation is reversed, then place the initial subentry address at the end of the list of subentries ld a,[W_SUBANIMCOUNTER] dec a ld bc,3 .loop add hl,bc dec a jr nz,.loop .storeSubentryAddr inc de add hl,de ld a,l ld [W_SUBANIMSUBENTRYADDR],a ld a,h ld [W_SUBANIMSUBENTRYADDR + 1],a ret ; called if the subanimation type is not 5 ; sets the transform to 0 (i.e. no transform) if it's the player's turn ; sets the transform to the subanimation type if it's the enemy's turn GetSubanimationTransform1: ; 781c2 (1e:41c2) ld b,a ld a,[H_WHOSETURN] and a ld a,b ret nz xor a ret ; called if the subanimation type is 5 ; sets the transform to 2 (i.e. horizontal and vertical flip) if it's the player's turn ; sets the transform to 0 (i.e. no transform) if it's the enemy's turn GetSubanimationTransform2: ; 781ca (1e:41ca) ld a,[H_WHOSETURN] and a ld a,2 << 5 ret z xor a ret ; loads tile patterns for battle animations LoadAnimationTileset: ; 781d2 (1e:41d2) ld a,[$D09F] ; tileset select add a add a ld hl,AnimationTilesetPointers ld e,a ld d,0 add hl,de ld a,[hli] ld [$D07D],a ; number of tiles ld a,[hli] ld e,a ld a,[hl] ld d,a ; de = address of tileset ld hl,$8310 ; destination address in VRAM ld b,$1E ; ROM bank ld a,[$D07D] ld c,a ; number of tiles jp CopyVideoData ; load tileset AnimationTilesetPointers: ; 781f2 (1e:41f2) db 79 ; number of tiles dw AnimationTileset1 db $FF db 79 ; number of tiles dw AnimationTileset2 db $FF db 64 ; number of tiles dw AnimationTileset1 db $FF AnimationTileset1: ; 781fe (1e:41fe) INCBIN "gfx/attack_anim_1.2bpp" AnimationTileset2: ; 786ee (1e:46ee) INCBIN "gfx/attack_anim_2.2bpp" SlotMachineTiles2: ; 78bde (1e:4bde) IF _RED INCBIN "gfx/red/slotmachine2.2bpp" ENDC IF _BLUE INCBIN "gfx/blue/slotmachine2.2bpp" ENDC MoveAnimation: ; 78d5e (1e:4d5e) push hl push de push bc push af call WaitForSoundToFinish call Func_78e23 ld a,[W_ANIMATIONID] and a jr z,.AnimationFinished ; if throwing a Poké Ball, skip the regular animation code cp a,TOSS_ANIM jr nz,.MoveAnimation ld de,.AnimationFinished push de jp TossBallAnimation .MoveAnimation ; check if battle animations are disabled in the options ld a,[$D355] bit 7,a jr nz,.AnimationsDisabled call ShareMoveAnimations call PlayAnimation jr .next4 .AnimationsDisabled ld c,30 call DelayFrames .next4 call Func_78dbd ; reload pic and flash the pic in and out (to show damage) .AnimationFinished call WaitForSoundToFinish xor a ld [$D096],a ld [$D09B],a ld [$D08B],a dec a ld [$CF07],a pop af pop bc pop de pop hl ret ShareMoveAnimations: ; 78da6 (1e:4da6) ; some moves just reuse animations from status conditions ld a,[H_WHOSETURN] and a ret z ; opponent’s turn ld a,[W_ANIMATIONID] cp a,AMNESIA ld b,CONF_ANIM jr z,.Replace cp a,REST ld b,SLP_ANIM ret nz .Replace ld a,b ld [W_ANIMATIONID],a ret Func_78dbd: ; 78dbd (1e:4dbd) ld a,[$CC5B] and a ret z dec a add a ld c,a ld b,0 ld hl,PointerTable_78dcf add hl,bc ld a,[hli] ld h,[hl] ld l,a jp [hl] PointerTable_78dcf: ; 78dcf (1e:4dcf) dw Func_78ddb dw Func_78de3 dw Func_78deb dw Func_78df0 dw Func_78df6 dw Func_78dfe Func_78ddb: ; 78ddb (1e:4ddb) call Func_79e6a ld b, $8 jp Func_79209 Func_78de3: ; 78de3 (1e:4de3) call Func_79e6a ld b, $8 jp Func_79210 Func_78deb: ; 78deb (1e:4deb) ld bc, $602 jr Func_78e01 Func_78df0: ; 78df0 (1e:4df0) call Func_79e6a jp AnimationBlinkEnemyMon Func_78df6: ; 78df6 (1e:4df6) call Func_79e6a ld b, $2 jp Func_79210 Func_78dfe: ; 78dfe (1e:4dfe) ld bc, $302 Func_78e01: ; 78e01 (1e:4e01) push bc push bc .asm_78e03 ld a, [rWX] ; $FF00+$4b inc a ld [rWX], a ; $FF00+$4b ld c, $2 call DelayFrames dec b jr nz, .asm_78e03 pop bc .asm_78e11 ld a, [rWX] ; $FF00+$4b dec a ld [rWX], a ; $FF00+$4b ld c, $2 call DelayFrames dec b jr nz, .asm_78e11 pop bc dec c jr nz, Func_78e01 ret Func_78e23: ; 78e23 (1e:4e23) ld a, [$cf1b] and a ld a, $e4 jr z, .asm_78e47 ld a, $f0 ld [$cc79], a ld b, $e4 ld a, [W_ANIMATIONID] ; $d07c cp $aa jr c, .asm_78e3f cp $ae jr nc, .asm_78e3f ld b, $f0 .asm_78e3f ld a, b ld [rOBP0], a ; $FF00+$48 ld a, $6c ld [rOBP1], a ; $FF00+$49 ret .asm_78e47 ld a, $e4 ld [$cc79], a ld [rOBP0], a ; $FF00+$48 ld a, $6c ld [rOBP1], a ; $FF00+$49 ret PlaySubanimation: ; 78e53 (1e:4e53) ld a,[wAnimSoundID] cp a,$FF jr z,.skipPlayingSound call Func_7986f call PlaySound ; play sound effect .skipPlayingSound ld hl,wOAMBuffer ; base address of OAM buffer ld a,l ld [W_FBDESTADDR + 1],a ld a,h ld [W_FBDESTADDR],a ld a,[W_SUBANIMSUBENTRYADDR + 1] ld h,a ld a,[W_SUBANIMSUBENTRYADDR] ld l,a .loop push hl ld c,[hl] ; frame block ID ld b,0 ld hl,FrameBlockPointers add hl,bc add hl,bc ld a,[hli] ld c,a ld a,[hli] ld b,a pop hl inc hl push hl ld e,[hl] ; base coordinate ID ld d,0 ld hl,FrameBlockBaseCoords ; $7c85 ; base coordinate table add hl,de add hl,de ld a,[hli] ld [W_BASECOORDY],a ld a,[hl] ld [W_BASECOORDX],a pop hl inc hl ld a,[hl] ; frame block mode ld [W_FBMODE],a call DrawFrameBlock call DoSpecialEffectByAnimationId ; run animation-specific function (if there is one) ld a,[W_SUBANIMCOUNTER] dec a ld [W_SUBANIMCOUNTER],a ret z ld a,[W_SUBANIMSUBENTRYADDR + 1] ld h,a ld a,[W_SUBANIMSUBENTRYADDR] ld l,a ld a,[W_SUBANIMTRANSFORM] cp a,4 ; is the animation reversed? ld bc,3 jr nz,.nextSubanimationSubentry ld bc,-3 .nextSubanimationSubentry add hl,bc ld a,h ld [W_SUBANIMSUBENTRYADDR + 1],a ld a,l ld [W_SUBANIMSUBENTRYADDR],a jp .loop AnimationCleanOAM: ; 78ec8 (1e:4ec8) push hl push de push bc push af call DelayFrame call CleanLCD_OAM pop af pop bc pop de pop hl ret ; this runs after each frame block is drawn in a subanimation ; it runs a particular special effect based on the animation ID DoSpecialEffectByAnimationId: ; 78ed7 (1e:4ed7) push hl push de push bc ld a,[W_ANIMATIONID] ld hl,AnimationIdSpecialEffects ld de,3 call IsInArray jr nc,.done inc hl ld a,[hli] ld h,[hl] ld l,a ld de,.done push de jp [hl] .done pop bc pop de pop hl ret ; Format: Animation ID (1 byte), Address (2 bytes) AnimationIdSpecialEffects: ; 78ef5 (1e:4ef5) db MEGA_PUNCH dw AnimationFlashScreen db GUILLOTINE dw AnimationFlashScreen db MEGA_KICK dw AnimationFlashScreen db HEADBUTT dw AnimationFlashScreen db TAIL_WHIP dw Func_790d0 db GROWL dw DoGrowlSpecialEffects db DISABLE dw AnimationFlashScreen db BLIZZARD dw DoBlizzardSpecialEffects db BUBBLEBEAM dw AnimationFlashScreen db HYPER_BEAM dw FlashScreenEveryFourFrameBlocks db THUNDERBOLT dw FlashScreenEveryEightFrameBlocks db REFLECT dw AnimationFlashScreen db SELFDESTRUCT dw DoExplodeSpecialEffects db SPORE dw AnimationFlashScreen db EXPLOSION dw DoExplodeSpecialEffects db ROCK_SLIDE dw DoRockSlideSpecialEffects db $AA dw Func_79041 db $AB dw Func_7904c db $AC dw Func_7907c db TOSS_ANIM dw DoBallTossSpecialEffects db SHAKE_ANIM dw DoBallShakeSpecialEffects db POOF_ANIM dw DoPoofSpecialEffects db GREATTOSS_ANIM dw DoBallTossSpecialEffects db ULTRATOSS_ANIM dw DoBallTossSpecialEffects db $FF ; terminator DoBallTossSpecialEffects: ; 78f3e (1e:4f3e) ld a,[$CF91] cp a,3 ; is it a Master Ball or Ultra Ball? jr nc,.skipFlashingEffect .flashingEffect ; do a flashing effect if it's Master Ball or Ultra Ball ld a,[rOBP0] xor a,%00111100 ; complement colors 1 and 2 ld [rOBP0],a .skipFlashingEffect ld a,[W_SUBANIMCOUNTER] cp a,11 ; is it the beginning of the subanimation? jr nz,.skipPlayingSound ; if it is the beginning of the subanimation, play a sound ld a,$91 call PlaySound ; play sound .skipPlayingSound ld a,[W_ISINBATTLE] cp a,02 ; is it a trainer battle? jr z,.isTrainerBattle ld a,[$d11e] cp a,$10 ; is the enemy pokemon the Ghost Marowak? ret nz ; if the enemy pokemon is the Ghost Marowak, make it dodge during the last 3 frames ld a,[W_SUBANIMCOUNTER] cp a,3 jr z,.moveGhostMarowakLeft cp a,2 jr z,.moveGhostMarowakLeft cp a,1 ret nz .moveGhostMarowakLeft FuncCoord 17,0 ld hl,Coord ld de,20 ld bc,$0707 ; 7 rows and 7 columns .loop push hl push bc call Func_79862 ; move row of tiles left pop bc pop hl add hl,de dec b jr nz,.loop ld a,%00001000 ld [$ff10],a ; Channel 1 sweep register ret .isTrainerBattle ; if it's a trainer battle, shorten the animation by one frame ld a,[W_SUBANIMCOUNTER] cp a,3 ret nz dec a ld [W_SUBANIMCOUNTER],a ret DoBallShakeSpecialEffects: ; 78f96 (1e:4f96) ld a,[W_SUBANIMCOUNTER] cp a,4 ; is it the beginning of a shake? jr nz,.skipPlayingSound ; if it is the beginning of a shake, play a sound and wait 2/3 of a second ld a,$8c call PlaySound ; play sound ld c,40 call DelayFrames .skipPlayingSound ld a,[W_SUBANIMCOUNTER] dec a ret nz ; if it's the end of the ball shaking subanimation, check if more shakes are left and restart the subanimation ld a,[$cd3d] ; number of shakes dec a ; decrement number of shakes ld [$cd3d],a ret z ; if there are shakes left, restart the subanimation ld a,[W_SUBANIMSUBENTRYADDR] ld l,a ld a,[W_SUBANIMSUBENTRYADDR + 1] ld h,a ld de,-(4 * 3) ; 4 subentries and 3 bytes per subentry add hl,de ld a,l ld [W_SUBANIMSUBENTRYADDR],a ld a,h ld [W_SUBANIMSUBENTRYADDR + 1],a ld a,5 ; number of subentries in the ball shaking subanimation plus one ld [W_SUBANIMCOUNTER],a ret ; plays a sound after the second frame of the poof animation DoPoofSpecialEffects: ; 78fce (1e:4fce) ld a,[W_SUBANIMCOUNTER] cp a,5 ret nz ld a,$93 jp PlaySound DoRockSlideSpecialEffects: ; 78fd9 (1e:4fd9) ld a,[W_SUBANIMCOUNTER] cp a,12 ret nc cp a,8 jr nc,.shakeScreen cp a,1 jp z,AnimationFlashScreen ; if it's the end of the subanimation, flash the screen ret ; if the subaninmation counter is between 8 and 11, shake the screen horizontally and vertically .shakeScreen ld b,1 ld a,$24 call Predef ; shake horizontally ld b,1 ld a,$21 jp Predef ; shake vertically FlashScreenEveryEightFrameBlocks: ; 78ff7 (1e:4ff7) ld a,[W_SUBANIMCOUNTER] and a,7 ; is the subanimation counter exactly 8? call z,AnimationFlashScreen ; if so, flash the screen ret ; flashes the screen if the subanimation counter is divisible by 4 FlashScreenEveryFourFrameBlocks: ; 79000 (1e:5000) ld a,[W_SUBANIMCOUNTER] and a,3 call z,AnimationFlashScreen ret ; used for Explosion and Selfdestruct DoExplodeSpecialEffects: ; 79009 (1e:5009) ld a,[W_SUBANIMCOUNTER] cp a,1 ; is it the end of the subanimation? jr nz,FlashScreenEveryFourFrameBlocks ; if it's the end of the subanimation, make the attacking pokemon disappear FuncCoord 1, 5 ; $c405 ld hl,Coord jp AnimationHideMonPic ; make pokemon disappear ; flashes the screen when subanimation counter is 1 modulo 4 DoBlizzardSpecialEffects: ; 79016 (1e:5016) ld a,[W_SUBANIMCOUNTER] cp a,13 jp z,AnimationFlashScreen cp a,9 jp z,AnimationFlashScreen cp a,5 jp z,AnimationFlashScreen cp a,1 jp z,AnimationFlashScreen ret ; flashes the screen at 3 points in the subanimation ; XXX is this unused? Func_7902e: ; 7902e (1e:502e) ld a,[W_SUBANIMCOUNTER] cp a,14 jp z,AnimationFlashScreen cp a,9 jp z,AnimationFlashScreen cp a,2 jp z,AnimationFlashScreen ret ; function to make the pokemon disappear at the beginning of the animation ; XXX probably a trade-related animation Func_79041: ; 79041 (1e:5041) ld a,[W_SUBANIMCOUNTER] cp a,6 ret nz ld a,$2F jp Func_7980c ; make pokemon disappear ; function to make a shaking pokeball jump up at the end of the animation ; XXX probably a trade-related animation Func_7904c: ; 7904c (1e:504c) ld a,[W_SUBANIMCOUNTER] cp a,1 ret nz ; if it's the end of the animation, make the ball jump up ld de,BallMoveDistances1 .loop ld hl,wOAMBuffer ; OAM buffer ld bc,4 .innerLoop ld a,[de] cp a,$ff jr z,.done add [hl] ; add to Y value of OAM entry ld [hl],a add hl,bc ld a,l cp a,4 * 4 ; there are 4 entries, each 4 bytes jr nz,.innerLoop inc de push bc call Delay3 pop bc jr .loop .done call AnimationCleanOAM ld a,$98 jp PlaySound ; play sound BallMoveDistances1: ; 79078 (1e:5078) db -12,-12,-8 db $ff ; terminator ; function to make the pokeball jump up ; XXX probably a trade-related animation Func_7907c ; 507C ld de,BallMoveDistances2 .loop ld hl,wOAMBuffer ; OAM buffer ld bc,4 .innerLoop ld a,[de] cp a,$ff jp z,ClearScreen add [hl] ld [hl],a add hl,bc ld a,l cp a,4 * 4 ; there are 4 entries, each 4 bytes jr nz,.innerLoop inc de push de ld a,[de] cp a,12 jr z,.playSound cp a,$ff jr nz,.skipPlayingSound .playSound ; play sound if next move distance is 12 or this is the last one ld a,$ae call PlaySound .skipPlayingSound push bc ld c,5 call DelayFrames pop bc ld a,[$ffae] ; background scroll X sub a,8 ; scroll to the left ld [$ffae],a pop de jr .loop BallMoveDistances2: ; 790b3 (1e:50b3) db 11,12,-12,-7,7,12,-8,8 db $ff ; terminator ; this function copies the current musical note graphic ; so that there are two musical notes flying towards the defending pokemon DoGrowlSpecialEffects: ; 790bc (1e:50bc) ld hl,wOAMBuffer ; OAM buffer ld de,$c310 ld bc,$10 call CopyData ; copy the musical note graphic ld a,[W_SUBANIMCOUNTER] dec a call z,AnimationCleanOAM ; clean up at the end of the subanimation ret ; this is associated with Tail Whip, but Tail Whip doesn't use any subanimations Func_790d0: ; 790d0 (1e:50d0) ld a,1 ld [W_SUBANIMCOUNTER],a ld c,20 jp DelayFrames ; Format: Special Effect ID (1 byte), Address (2 bytes) SpecialEffectPointers: ; 790da (1e:50da) db SE_DARK_SCREEN_FLASH ; $FE dw AnimationFlashScreen db SE_DARK_SCREEN_PALETTE ; $FD dw AnimationDarkScreenPalette db SE_RESET_SCREEN_PALETTE ; $FC dw AnimationResetScreenPalette db SE_SHAKE_SCREEN ; $FB dw AnimationShakeScreen db SE_WATER_DROPLETS_EVERYWHERE ; $FA dw AnimationWaterDropletsEverywhere db SE_DARKEN_MON_PALETTE ; $F9 dw AnimationDarkenMonPalette db SE_FLASH_SCREEN_LONG ; $F8 dw AnimationFlashScreenLong db SE_SLIDE_MON_UP ; $F7 dw AnimationSlideMonUp db SE_SLIDE_MON_DOWN ; $F6 dw AnimationSlideMonDown db SE_FLASH_MON_PIC ; $F5 dw AnimationFlashMonPic db SE_SLIDE_MON_OUT ; $F4 dw AnimationSlideMonOut db SE_BLINK_MON ; $F3 dw AnimationBlinkMon db SE_MOVE_MON_HORIZONTALLY ; $F2 dw AnimationMoveMonHorizontally db SE_RESET_MON_POSITION ; $F1 dw AnimationResetMonPosition db SE_LIGHT_SCREEN_PALETTE ; $F0 dw AnimationLightScreenPalette db SE_HIDE_MON_PIC ; $EF dw AnimationHideMonPic db SE_SQUISH_MON_PIC ; $EE dw AnimationSquishMonPic db SE_SHOOT_BALLS_UPWARD ; $ED dw AnimationShootBallsUpward db SE_SHOOT_MANY_BALLS_UPWARD ; $EC dw AnimationShootManyBallsUpward db SE_BOUNCE_UP_AND_DOWN ; $EB dw AnimationBoundUpAndDown db SE_MINIMIZE_MON ; $EA dw AnimationMinimizeMon db SE_SLIDE_MON_DOWN_AND_HIDE ; $E9 dw AnimationSlideMonDownAndHide db SE_TRANSFORM_MON ; $E8 dw AnimationTransformMon db SE_LEAVES_FALLING ; $E7 dw AnimationLeavesFalling db SE_PETALS_FALLING ; $E6 dw AnimationPetalsFalling db SE_SLIDE_MON_HALF_LEFT ; $E5 dw AnimationSlideMonHalfLeft db SE_SHAKE_ENEMY_HUD ; $E4 dw AnimationShakeEnemyHUD db SE_SHAKE_ENEMY_HUD_2 ; unused--same pointer as SE_SHAKE_ENEMY_HUD ($E4) dw AnimationShakeEnemyHUD db SE_SPIRAL_BALLS_INWARD ; $E2 dw AnimationSpiralBallsInward db SE_DELAY_ANIMATION_10 ; $E1 dw AnimationDelay10 db SE_FLASH_ENEMY_MON_PIC ; unused--same as SE_FLASH_MON_PIC ($F5), but for the enemy mon dw AnimationFlashEnemyMonPic db SE_HIDE_ENEMY_MON_PIC ; $DF dw AnimationHideEnemyMonPic db SE_BLINK_ENEMY_MON ; $DE dw AnimationBlinkEnemyMon db SE_SHOW_MON_PIC ; $DD dw AnimationShowMonPic db SE_SHOW_ENEMY_MON_PIC ; $DC dw AnimationShowEnemyMonPic db SE_SLIDE_ENEMY_MON_OUT ; $DB dw AnimationSlideEnemyMonOut db SE_SHAKE_BACK_AND_FORTH ; $DA dw AnimationShakeBackAndForth db SE_SUBSTITUTE_MON ; $D9 dw AnimationSubstitute db SE_WAVY_SCREEN ; $D8 dw AnimationWavyScreen db $FF AnimationDelay10: ; 79150 (1e:5150) ld c,10 jp DelayFrames ; calls a function with the turn flipped from player to enemy or vice versa ; input - hl - address of function to call CallWithTurnFlipped: ; 79155 (1e:5155) ld a,[H_WHOSETURN] push af xor a,1 ld [H_WHOSETURN],a ld de,.returnAddress push de jp [hl] .returnAddress pop af ld [H_WHOSETURN],a ret ; flashes the screen for an extended period (48 frames) AnimationFlashScreenLong: ; 79165 (1e:5165) ld a,3 ; cycle through the palettes 3 times ld [$D08A],a ld a,[$cf1b] ; running on SGB? and a ld hl,FlashScreenLongMonochrome jr z,.loop ld hl,FlashScreenLongSGB .loop push hl .innerLoop ld a,[hli] cp a,$01 ; is it the end of the palettes? jr z,.endOfPalettes ld [rBGP],a call FlashScreenLongDelay jr .innerLoop .endOfPalettes ld a,[$D08A] dec a ld [$D08A],a pop hl jr nz,.loop ret ; BG palettes FlashScreenLongMonochrome: ; 7918e (1e:518e) db %11111001 ; 3, 3, 2, 1 db %11111110 ; 3, 3, 3, 2 db %11111111 ; 3, 3, 3, 3 db %11111110 ; 3, 3, 3, 2 db %11111001 ; 3, 3, 2, 1 db %11100100 ; 3, 2, 1, 0 db %10010000 ; 2, 1, 0, 0 db %01000000 ; 1, 0, 0, 0 db %00000000 ; 0, 0, 0, 0 db %01000000 ; 1, 0, 0, 0 db %10010000 ; 2, 1, 0, 0 db %11100100 ; 3, 2, 1, 0 db $01 ; terminator ; BG palettes FlashScreenLongSGB: ; 7919b (1e:519b) db %11111000 ; 3, 3, 2, 0 db %11111100 ; 3, 3, 3, 0 db %11111111 ; 3, 3, 3, 3 db %11111100 ; 3, 3, 3, 0 db %11111000 ; 3, 3, 2, 0 db %11100100 ; 3, 2, 1, 0 db %10010000 ; 2, 1, 0, 0 db %01000000 ; 1, 0, 0, 0 db %00000000 ; 0, 0, 0, 0 db %01000000 ; 1, 0, 0, 0 db %10010000 ; 2, 1, 0, 0 db %11100100 ; 3, 2, 1, 0 db $01 ; terminator ; causes a delay of 2 frames for the first cycle ; causes a delay of 1 frame for the second and third cycles FlashScreenLongDelay: ; 791a8 (1e:51a8) ld a,[$D08A] cp a,4 ; never true since [$D08A] starts at 3 ld c,4 jr z,.delayFrames cp a,3 ld c,2 jr z,.delayFrames cp a,2 ; nothing is done with this ld c,1 .delayFrames jp DelayFrames AnimationFlashScreen: ; 791be (1e:51be) ld a,[rBGP] push af ; save initial palette ld a,%00011011 ; 0, 1, 2, 3 (inverted colors) ld [rBGP],a ld c,2 call DelayFrames xor a ; white out background ld [rBGP],a ld c,2 call DelayFrames pop af ld [rBGP],a ; restore initial palette ret AnimationDarkScreenPalette: ; 791d6 (1e:51d6) ; Changes the screen's palette to a dark palette. ld bc, $6f6f jr Func_791fc AnimationDarkenMonPalette: ; 791db (1e:51db) ; Darkens the mon sprite's palette. ld bc, $f9f4 jr Func_791fc Func_791e0: ; 791e0 (1e:51e0) ld bc, $fef8 jr Func_791fc Func_791e5: ; 791e5 (1e:51e5) ld bc, $ffff jr Func_791fc AnimationResetScreenPalette: ; 791ea (1e:51ea) ; Restores the screen's palette to the normal palette. ld bc, $e4e4 jr Func_791fc Func_791ef: ; 791ef (1e:51ef) ld bc, $0000 jr Func_791fc AnimationLightScreenPalette: ; 791f4 (1e:51f4) ; Changes the screen to use a palette with light colors. ld bc, $9090 jr Func_791fc Func_791f9: ; 791f9 (1e:51f9) ld bc, $4040 Func_791fc: ; 791fc (1e:51fc) ld a, [$cf1b] and a ld a, b jr z, .asm_79204 ld a, c .asm_79204 ld [rBGP], a ; $FF00+$47 ret ld b, $5 Func_79209: ; 79209 (1e:5209) ld a, $21 jp Predef ; indirect jump to Func_480ff (480ff (12:40ff)) AnimationShakeScreen: ; 7920e (1e:520e) ; Shakes the screen for a while. Used in Earthquake/Fissure/etc. animations. ld b, $8 Func_79210: ; 79210 (1e:5210) ld a, $24 jp Predef ; indirect jump to Func_48125 (48125 (12:4125)) AnimationWaterDropletsEverywhere: ; 79215 (1e:5215) ; Draws water droplets all over the screen and makes them ; scroll. It's hard to describe, but it's the main animation ; in Surf/Mist/Toxic. xor a ld [$d09f], a call LoadAnimationTileset ld d, $20 ld a, $f0 ld [W_BASECOORDX], a ; $d081 ld a, $71 ld [$d09f], a .asm_79228 ld a, $10 ld [W_BASECOORDY], a ; $d082 ld a, $0 ld [$d08a], a call Func_79246 ld a, $18 ld [W_BASECOORDY], a ; $d082 ld a, $20 ld [$d08a], a call Func_79246 dec d jr nz, .asm_79228 ret Func_79246: ; 79246 (1e:5246) ld hl, wOAMBuffer .asm_79249 ld a, [W_BASECOORDY] ; $d082 ld [hli], a ld a, [W_BASECOORDX] ; $d081 add $1b ld [W_BASECOORDX], a ; $d081 ld [hli], a ld a, [$d09f] ld [hli], a xor a ld [hli], a ld a, [W_BASECOORDX] ; $d081 cp $90 jr c, .asm_79249 sub $a8 ld [W_BASECOORDX], a ; $d081 ld a, [W_BASECOORDY] ; $d082 add $10 ld [W_BASECOORDY], a ; $d082 cp $70 jr c, .asm_79249 call AnimationCleanOAM jp DelayFrame AnimationSlideMonUp: ; 7927a (1e:527a) ; Slides the mon's sprite upwards. ld c, $7 ld a, [H_WHOSETURN] and a ld hl, $c419 ld de, $c405 ld a, $30 jr z, .asm_79291 ld hl, $c3c0 ld de, $c3ac ld a, $ff .asm_79291 ld [$d09f], a jp Func_792bf AnimationSlideMonDown: ; 79297 (1e:5297) ; Slides the mon's sprite down out of the screen. xor a call Func_79842 .asm_7929b call Func_79820 push bc push de call Func_79aae call Delay3 call AnimationHideMonPic pop de pop bc dec b jr nz, .asm_7929b ret AnimationSlideMonOut: ; 792af (1e:52af) ; Slides the mon's sprite out of the screen horizontally. ld e, $8 ld a, $3 ld [W_SUBANIMTRANSFORM], a ; $d08b jp Func_795f8 AnimationSlideEnemyMonOut: ; 792b9 (1e:52b9) ; Slides the enemy mon out of the screen horizontally. ld hl, AnimationSlideMonOut ; $52af jp CallWithTurnFlipped Func_792bf: ; 792bf (1e:52bf) push de push hl push bc ld b, $6 .asm_792c4 push bc push de push hl ld bc, $0007 call CopyData pop de pop hl ld bc, $0028 add hl, bc pop bc dec b jr nz, .asm_792c4 ld a, [H_WHOSETURN] and a ld hl, $c47d jr z, .asm_792e2 ld hl, $c424 .asm_792e2 ld a, [$d09f] inc a ld [$d09f], a ld c, $7 .asm_792eb ld [hli], a add $7 dec c jr nz, .asm_792eb ld c, $2 call DelayFrames pop bc pop hl pop de dec c jr nz, Func_792bf ret Func_792fd: ; 792fd (1e:52fd) ld a, $10 ld [W_BASECOORDX], a ld a, $30 ld [W_BASECOORDY], a ld hl, wOAMBuffer ld d, $0 ld c, $7 .asm_7930e ld a, [W_BASECOORDY] ld e, a ld b, $5 .asm_79314 call Func_79329 inc d dec b jr nz, .asm_79314 dec c ret z inc d inc d ld a, [W_BASECOORDX] add $8 ld [W_BASECOORDX], a jr .asm_7930e Func_79329: ; 79329 (1e:5329) ld a, e add $8 ld e, a ld [hli], a ld a, [W_BASECOORDX] ; $d081 ld [hli], a ld a, d ld [hli], a xor a ld [hli], a ret Func_79337: ; 79337 (1e:5337) ld l, e ld h, d Func_79339: ; 79339 (1e:5339) ld de, $4 .asm_7933c ld a, [$d08a] ld b, a ld a, [hl] add b cp $a8 jr c, .asm_7934a dec hl ld a, $a0 ld [hli], a .asm_7934a ld [hl], a add hl, de dec c jr nz, .asm_7933c ret Func_79350: ; 79350 (1e:5350) ld l, e ld h, d Func_79352: ; 79352 (1e:5352) ld de, $4 .asm_79355 ld a, [$d08a] ld b, a ld a, [hl] add b cp $70 jr c, .asm_79363 dec hl ld a, $a0 ld [hli], a .asm_79363 ld [hl], a add hl, de dec c jr nz, .asm_79355 ret AnimationBlinkEnemyMon: ; 79369 (1e:5369) ; Make the enemy mon's sprite blink on and off for a second or two ld hl, AnimationBlinkMon ; $536f jp CallWithTurnFlipped AnimationBlinkMon: ; 7936f (1e:536f) ; Make the mon's sprite blink on and off for a second or two. push af ld c, $6 .asm_79372 push bc call AnimationHideMonPic ld c, $5 call DelayFrames call AnimationShowMonPic ld c, $5 call DelayFrames pop bc dec c jr nz, .asm_79372 pop af ret AnimationFlashMonPic: ; 79389 (1e:5389) ; Flashes the mon's sprite on and off ld a, [W_PLAYERMONID] ld [$ceea], a ld a, [$cfe5] ld [$cee9], a jp Func_79793 AnimationFlashEnemyMonPic: ; 79398 (1e:5398) ; Flashes the enemy mon's sprite on and off ld hl, AnimationFlashMonPic jp CallWithTurnFlipped AnimationShowMonPic: ; 7939e (1e:539e) xor a call Func_79842 call Func_79820 call Func_79aae jp Delay3 AnimationShowEnemyMonPic: ; 793ab (1e:53ab) ; Shows the emenmy mon's front sprite. Used in animations like Seismic Toss ; to make the mon's sprite reappear after disappears offscreen. ld hl, AnimationShowMonPic jp CallWithTurnFlipped AnimationShakeBackAndForth: ; 793b1 (1e:53b1) ; Shakes the mon's sprite back and forth rapidly. This is used in Double Team. ; The mon's sprite disappears after this animation. ld a, [H_WHOSETURN] and a ld hl, $c404 ld de, $c406 jr z, .asm_793c2 ld hl, $c3ab ld de, $c3ad .asm_793c2 xor a ld c, $10 .asm_793c5 push af push bc push de push hl push hl push de push af push hl push hl call Func_79842 pop hl call Func_79aae call Delay3 pop hl ld bc, $0709 call ClearScreenArea pop af call Func_79842 pop hl call Func_79aae call Delay3 pop hl ld bc, $0709 call ClearScreenArea pop hl pop de pop bc pop af dec c jr nz, .asm_793c5 ret AnimationMoveMonHorizontally: ; 793f9 (1e:53f9) ; Shifts the mon's sprite horizontally to a fixed location. Used by lots of ; animations like Tackle/Body Slam. call AnimationHideMonPic ld a, [H_WHOSETURN] ; $FF00+$f3 and a FuncCoord 2, 5 ; $c406 ld hl, Coord jr z, .asm_79407 FuncCoord 11, 0 ; $c3ab ld hl, Coord .asm_79407 xor a push hl call Func_79842 pop hl call Func_79aae ld c, $3 jp DelayFrames AnimationResetMonPosition: ; 79415 (1e:5415) ; Resets the mon's sprites to be located at the normal coordinates. ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld a, $66 jr z, .asm_7941e ld a, $b .asm_7941e call Func_7980c jp AnimationShowMonPic AnimationSpiralBallsInward: ; 79424 (1e:5424) ; Creates an effect that looks like energy balls sprialing into the ; player mon's sprite. Used in Focus Energy, for example. ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_79435 ld a, $d8 ld [$d08a], a ld a, $50 ld [W_SUBANIMTRANSFORM], a ; $d08b jr .asm_7943c .asm_79435 xor a ld [$d08a], a ld [W_SUBANIMTRANSFORM], a ; $d08b .asm_7943c ld d, $7a ld c, $3 xor a call Func_797e8 ld hl, SpiralBallAnimationCoordinates ; $5476 .asm_79447 push hl ld c, $3 ld de, wOAMBuffer .asm_7944d ld a, [hl] cp $ff jr z, .asm_7946f ld a, [$d08a] add [hl] ld [de], a inc de inc hl ld a, [W_SUBANIMTRANSFORM] ; $d08b add [hl] ld [de], a inc hl inc de inc de inc de dec c jr nz, .asm_7944d ld c, $5 call DelayFrames pop hl inc hl inc hl jr .asm_79447 .asm_7946f pop hl call AnimationCleanOAM jp AnimationFlashScreen SpiralBallAnimationCoordinates: ; 79476 (1e:5476) ; y, x pairs ; This is the sequence of screen coordinates that the spiraling ; balls are positioned at. db $38, $28 db $40, $18 db $50, $10 db $60, $18 db $68, $28 db $60, $38 db $50, $40 db $40, $38 db $40, $28 db $46, $1E db $50, $18 db $5B, $1E db $60, $28 db $5B, $32 db $50, $38 db $46, $32 db $48, $28 db $50, $20 db $58, $28 db $50, $30 db $50, $28 db $FF ; list terminator AnimationSquishMonPic: ; 794a1 (1e:54a1) ; Squishes the mon's sprite horizontally making it ; disappear. Used by Teleport/Sky Attack animations. ld c, $4 .asm_794a3 push bc ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_794b1 FuncCoord 16, 0 ; $c3b0 ld hl, Coord FuncCoord 14, 0 ; $c3ae ld de, Coord jr .asm_794b7 .asm_794b1 FuncCoord 5, 5 ; $c409 ld hl, Coord FuncCoord 3, 5 ; $c407 ld de, Coord .asm_794b7 push de xor a ld [$d09f], a call Func_794d4 pop hl ld a, $1 ld [$d09f], a call Func_794d4 pop bc dec c jr nz, .asm_794a3 call AnimationHideMonPic ld c, $2 jp DelayFrame Func_794d4: ; 794d4 (1e:54d4) ld c, $7 .asm_794d6 push bc push hl ld c, $3 ld a, [$d09f] cp $0 jr nz, .asm_794e7 call Func_7985b dec hl jr .asm_794eb .asm_794e7 call Func_79862 inc hl .asm_794eb ld [hl], $7f pop hl ld de, $14 add hl, de pop bc dec c jr nz, .asm_794d6 jp Delay3 AnimationShootBallsUpward: ; 794f9 (1e:54f9) ; Shoots one pillar of "energy" balls upwards. Used in Teleport/Sky Attack ; animations. ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_79503 ld bc, $80 jr .asm_79506 .asm_79503 ld bc, $3028 .asm_79506 ld a, b ld [W_BASECOORDY], a ; $d082 ld a, c ld [W_BASECOORDX], a ; $d081 ld bc, $501 call Func_79517 jp AnimationCleanOAM Func_79517: ; 79517 (1e:5517) push bc xor a ld [$d09f], a call LoadAnimationTileset pop bc ld d, $7a ld hl, wOAMBuffer push bc ld a, [W_BASECOORDY] ; $d082 ld e, a .asm_7952a call Func_79329 dec b jr nz, .asm_7952a call DelayFrame pop bc ld a, b ld [$d08a], a .asm_79538 push bc ld hl, wOAMBuffer .asm_7953c ld a, [W_BASECOORDY] ; $d082 add $8 ld e, a ld a, [hl] cp e jr z, .asm_7954b add $fc ld [hl], a jr .asm_79554 .asm_7954b ld [hl], $0 ld a, [$d08a] dec a ld [$d08a], a .asm_79554 ld de, $4 add hl, de dec b jr nz, .asm_7953c call DelayFrames pop bc ld a, [$d08a] and a jr nz, .asm_79538 ret AnimationShootManyBallsUpward: ; 79566 (1e:5566) ; Shoots several pillars of "energy" balls upward. ld a, [H_WHOSETURN] and a ld hl, UpwardBallsAnimXCoordinatesPlayerTurn ld a, $50 ; y coordinate for "energy" ball pillar jr z, .player ld hl, UpwardBallsAnimXCoordinatesEnemyTurn ld a, $28 ; y coordinate for "energy" ball pillar .player ld [wTrainerSpriteOffset], a .loop ld a, [wTrainerSpriteOffset] ld [W_BASECOORDY], a ld a, [hli] cp $ff jp z, AnimationCleanOAM ld [W_BASECOORDX], a ld bc, $0401 push hl call Func_79517 pop hl jr .loop UpwardBallsAnimXCoordinatesPlayerTurn: ; 79591 (1e:5591) ; List of x coordinates for each pillar of "energy" balls in the ; AnimationShootManyBallsUpward animation. It's unused in the game. db $10, $40, $28, $18, $38, $30 db $FF ; list terminator UpwardBallsAnimXCoordinatesEnemyTurn: ; 79598 (1e:5598) ; List of x coordinates for each pillar of "energy" balls in the ; AnimationShootManyBallsUpward animation. It's unused in the game. db $60, $90, $78, $68, $88, $80 db $FF ; list terminator AnimationMinimizeMon: ; 7959f (1e:559f) ; Changes the mon's sprite to a mini black sprite. Used by the ; Minimize animation. ld hl, $c6e8 push hl xor a ld bc, $310 call FillMemory pop hl ld de, $194 add hl, de ld de, MinimizedMonSprite ; $55c4 ld c, $5 .asm_795b4 ld a, [de] ld [hli], a ld [hli], a inc de dec c jr nz, .asm_795b4 call Func_79652 call Delay3 jp AnimationShowMonPic MinimizedMonSprite: ; 795c4 (1e:55c4) INCBIN "gfx/minimized_mon_sprite.1bpp" AnimationSlideMonDownAndHide: ; 795c9 (1e:55c9) ; Slides the mon's sprite down and disappears. Used in Acid Armor. ld a, $1 ld c, $2 .asm_795cd push bc push af call AnimationHideMonPic pop af push af call Func_79842 call Func_79820 call Func_79aae ld c, $8 call DelayFrames pop af inc a pop bc dec c jr nz, .asm_795cd call AnimationHideMonPic ld hl, $c6e8 ld bc, $0310 xor a call FillMemory jp Func_79652 Func_795f8: ; 795f8 (1e:55f8) ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_79602 FuncCoord 12, 0 ; $c3ac ld hl, Coord jr .asm_79605 .asm_79602 FuncCoord 0, 5 ; $c404 ld hl, Coord .asm_79605 ld d, $8 .asm_79607 push hl ld b, $7 .asm_7960a ld c, $8 .asm_7960c ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_79616 call Func_7963c jr .asm_79619 .asm_79616 call Func_79633 .asm_79619 ld [hli], a dec c jr nz, .asm_7960c push de ld de, $c add hl, de pop de dec b jr nz, .asm_7960a ld a, [W_SUBANIMTRANSFORM] ; $d08b ld c, a call DelayFrames pop hl dec d dec e jr nz, .asm_79607 ret Func_79633: ; 79633 (1e:5633) ld a, [hl] add $7 cp $61 ret c ld a, $7f ret Func_7963c: ; 7963c (1e:563c) ld a, [hl] sub $7 cp $30 ret c ld a, $7f ret AnimationSlideMonHalfLeft: ; 79645 (1e:5645) ; Slides the mon's sprite halfway out of the screen. It's used in Softboiled. ld e, $4 ld a, $4 ld [W_SUBANIMTRANSFORM], a call Func_795f8 jp Delay3 Func_79652: ; 79652 (1e:5652) ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld hl, $9310 jr z, .asm_7965d ld hl, $9000 .asm_7965d ld de, $c6e8 ld bc, $31 jp CopyVideoData AnimationWavyScreen: ; 79666 (1e:5666) ; used in Psywave/Psychic etc. ld hl, $9800 call Func_79e0d call Delay3 xor a ld [H_AUTOBGTRANSFERENABLED], a ld a, $90 ld [$ffb0], a ld d, $80 ld e, $8f ld c, $ff ld hl, WavyScreenLineOffsets .asm_7967f push hl .asm_79680 call Func_796ae ld a, [$ff44] cp e jr nz, .asm_79680 pop hl inc hl ld a, [hl] cp d jr nz, .asm_79691 ld hl, WavyScreenLineOffsets .asm_79691 dec c jr nz, .asm_7967f xor a ld [$ffb0], a call SaveScreenTilesToBuffer2 call ClearScreen ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a call Delay3 call LoadScreenTilesFromBuffer2 ld hl, $9c00 call Func_79e0d ret Func_796ae: ; 796ae (1e:56ae) ld a, [$ff41] and $3 jr nz, Func_796ae ld a, [hl] ld [$ff43], a inc hl ld a, [hl] cp d ret nz ld hl, WavyScreenLineOffsets ret WavyScreenLineOffsets: ; 796bf (1e:56bf) ; Sequence of horizontal line pixel offsets for the wavy screen animation. ; This sequence vaguely resembles a sine wave. db 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1 db 0, 0, 0, 0, 0, -1, -1, -1, -2, -2, -2, -2, -2, -1, -1, -1 db $80 ; terminator AnimationSubstitute: ; 796e0 (1e:56e0) ; Changes the pokemon's sprite to the mini sprite ld hl, $c6e8 xor a ld bc, $0310 call FillMemory ld a, [$ff00+$f3] and a jr z, .asm_79715 ; 0x796ed $26 ld hl, SlowbroSprite ; $4780 ; facing down sprite ld de, $c808 call CopySlowbroSpriteData ld hl, SlowbroSprite + $10 ; $4790 ld de, $c878 call CopySlowbroSpriteData ld hl, SlowbroSprite + $20 ; $47a0 ld de, $c818 call CopySlowbroSpriteData ld hl, SlowbroSprite + $30 ; $47b0 ld de, $c888 call CopySlowbroSpriteData jr .asm_79739 ; 0x79713 $24 .asm_79715 ld hl, SlowbroSprite + $40 ; $47c0 ; facing up sprite ld de, $c878 call CopySlowbroSpriteData ld hl, SlowbroSprite + $50 ; $47d0 ld de, $c8e8 call CopySlowbroSpriteData ld hl, SlowbroSprite + $60 ; $47e0 ld de, $c888 call CopySlowbroSpriteData ld hl, SlowbroSprite + $70 ; $47f0 ld de, $c8f8 call CopySlowbroSpriteData .asm_79739 call Func_79652 jp AnimationShowMonPic CopySlowbroSpriteData: ; 7973f (1e:573f) ld bc, $0010 ld a, BANK(SlowbroSprite) jp FarCopyData2 Func_79747: ; 79747 (1e:5747) ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld hl, $ccf7 ld a, [W_PLAYERBATTSTATUS2] ; $d063 jr z, .asm_79758 ld hl, $ccf3 ld a, [W_ENEMYBATTSTATUS2] ; $d068 .asm_79758 push hl bit 4, a jr nz, .asm_79762 call AnimationSlideMonDown jr .asm_79765 .asm_79762 call AnimationSlideMonOut .asm_79765 pop hl ld a, [hl] and a jp nz, AnimationMinimizeMon call AnimationFlashMonPic jp AnimationShowMonPic Func_79771: ; 79771 (1e:5771) call AnimationSlideMonOut call AnimationSubstitute jp AnimationShowMonPic AnimationBoundUpAndDown: ; 7977a (1e:577a) ; Bounces the mon's sprite up and down several times. It is used ; by Splash's animation. ld c, $5 .asm_7977c push bc call AnimationSlideMonDown pop bc dec c jr nz, .asm_7977c ; 0x79782 $f8 jp AnimationShowMonPic AnimationTransformMon: ; 79787 (1e:5787) ; Redraws this mon's sprite as the back/front sprite of the opposing mon. ; Used in Transform. ld a, [$cfe5] ld [$ceea], a ld a, [W_PLAYERMONID] ld [$cee9], a Func_79793: ; 79793 (1e:5793) ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_797b0 ld a, [$cee9] ld [$cf91], a ld [$d0b5], a xor a ld [W_SPRITEFLIPPED], a call GetMonHeader FuncCoord 12, 0 ; $c3ac ld hl, Coord call LoadFrontSpriteByMonIndex jr .asm_797d3 .asm_797b0 ld a, [$cfd9] push af ld a, [$ceea] ld [$cfd9], a ld [$d0b5], a call GetMonHeader ld a, $4 call Predef ; indirect jump to LoadMonBackSprite (3f103 (f:7103)) xor a call Func_79842 call Func_79820 call Func_79aae pop af ld [$cfd9], a .asm_797d3 ld b, $1 jp GoPAL_SET AnimationHideEnemyMonPic: ; 797d8 (1e:57d8) ; Hides the enemy mon's sprite xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld hl, AnimationHideMonPic ; $5801 call CallWithTurnFlipped ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba jp Delay3 Func_797e8: ; 797e8 (1e:57e8) push bc push de ld [$d09f], a call LoadAnimationTileset pop de pop bc xor a ld e, a ld [W_BASECOORDX], a ; $d081 ld hl, wOAMBuffer .asm_797fa call Func_79329 dec c jr nz, .asm_797fa ret AnimationHideMonPic: ; 79801 (1e:5801) ; Hides the mon's sprite. ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr z, .asm_7980a ld a, $c jr Func_7980c .asm_7980a ld a, $65 Func_7980c: ; 7980c (1e:580c) push hl push de push bc ld e, a ld d, $0 ld hl, wTileMap add hl, de ld bc, $707 call ClearScreenArea pop bc pop de pop hl ret Func_79820: ; 79820 (1e:5820) push de ld a, [H_WHOSETURN] ; $FF00+$f3 and a jr nz, .asm_7982a ld a, $65 jr .asm_7982c .asm_7982a ld a, $c .asm_7982c ld hl, wTileMap ld e, a ld d, $0 add hl, de ld a, $7 sub b and a jr z, .asm_79840 ld de, $14 .asm_7983c add hl, de dec a jr nz, .asm_7983c .asm_79840 pop de ret Func_79842: ; 79842 (1e:5842) ld hl, PointerTable_79aea ; $5aea ld e, a ld d, $0 add hl, de add hl, de add hl, de ld a, [hli] ld e, a ld a, [hli] ld d, a ld a, [hli] ld b, a and $f ld c, a ld a, b swap a and $f ld b, a ret Func_7985b: ; 7985b (1e:585b) ld a, [hld] ld [hli], a inc hl dec c jr nz, Func_7985b ret Func_79862: ; 79862 (1e:5862) ld a, [hli] ld [hld], a dec hl dec c jr nz, Func_79862 ret Func_79869: ; 79869 (1e:5869) ld a, b call Func_7986f ld b, a ret Func_7986f: ; 7986f (1e:586f) ld hl,MoveSoundTable ld e,a ld d,0 add hl,de add hl,de add hl,de ld a,[hli] ld b,a call IsCryMove jr nc,.NotCryMove ld a,[H_WHOSETURN] and a jr nz,.next ld a,[W_PLAYERMONID] ; get number of current monster jr .Continue .next ld a,[$CFE5] .Continue push hl call GetCryData ld b,a pop hl ld a,[$C0F1] add [hl] ld [$C0F1],a inc hl ld a,[$C0F2] add [hl] ld [$C0F2],a jr .done .NotCryMove ld a,[hli] ld [$C0F1],a ld a,[hli] ld [$C0F2],a .done ld a,b ret IsCryMove: ; 798ad (1e:58ad) ; set carry if the move animation involves playing a monster cry ld a,[W_ANIMATIONID] cp a,GROWL jr z,.CryMove cp a,ROAR jr z,.CryMove and a ; clear carry ret .CryMove scf ret MoveSoundTable: ; 798bc (1e:58bc) db $a0,$00,$80 db $a2,$10,$80 db $b3,$00,$80 db $a1,$01,$80 db $a3,$00,$40 db $e9,$00,$ff db $a3,$10,$60 db $a3,$20,$80 db $a3,$00,$a0 db $a6,$00,$80 db $a5,$20,$40 db $a5,$00,$80 db $a4,$00,$a0 db $a7,$10,$c0 db $a7,$00,$a0 db $a8,$00,$c0 db $a8,$10,$a0 db $a9,$00,$e0 db $a7,$20,$c0 db $aa,$00,$80 db $b9,$00,$80 db $ab,$01,$80 db $b7,$00,$80 db $ad,$f0,$40 db $b0,$00,$80 db $ad,$00,$80 db $b8,$10,$80 db $b1,$01,$a0 db $ae,$00,$80 db $b4,$00,$60 db $b4,$01,$40 db $b6,$00,$a0 db $b0,$10,$a0 db $b7,$00,$c0 db $aa,$10,$60 db $b0,$00,$a0 db $b9,$11,$c0 db $b0,$20,$c0 db $b8,$00,$80 db $b1,$00,$80 db $b1,$20,$c0 db $af,$00,$80 db $db,$ff,$40 db $b4,$00,$80 db $a1,$00,$c0 db $a1,$00,$40 db $e4,$00,$80 db $bf,$40,$60 db $bf,$00,$80 db $bf,$ff,$40 db $c7,$80,$c0 db $af,$10,$a0 db $af,$21,$e0 db $c5,$00,$80 db $bb,$20,$60 db $c7,$00,$80 db $cc,$00,$80 db $c2,$40,$80 db $c5,$f0,$e0 db $cf,$00,$80 db $c7,$f0,$60 db $c2,$00,$80 db $e6,$00,$80 db $9d,$01,$a0 db $a9,$f0,$20 db $ba,$01,$c0 db $ba,$00,$80 db $b0,$00,$e0 db $be,$01,$60 db $be,$20,$40 db $bb,$00,$80 db $bb,$40,$c0 db $b1,$03,$60 db $bd,$11,$e0 db $a8,$20,$e0 db $d2,$00,$80 db $b2,$00,$80 db $b2,$11,$a0 db $b2,$01,$c0 db $a9,$14,$c0 db $b1,$02,$a0 db $c5,$f0,$80 db $c5,$20,$c0 db $d5,$00,$20 db $d5,$20,$80 db $d2,$12,$60 db $be,$00,$80 db $aa,$01,$e0 db $c5,$0f,$e0 db $c5,$11,$20 db $a6,$10,$40 db $a5,$10,$c0 db $aa,$00,$20 db $d8,$00,$80 db $e4,$11,$18 db $9f,$20,$c0 db $9e,$20,$c0 db $bd,$00,$10 db $be,$f0,$20 db $df,$f0,$c0 db $a7,$f0,$e0 db $9f,$f0,$40 db $db,$00,$80 db $df,$80,$40 db $df,$00,$80 db $aa,$11,$20 db $aa,$22,$10 db $b1,$f1,$ff db $a9,$f1,$ff db $aa,$33,$30 db $dd,$40,$c0 db $a4,$20,$20 db $a4,$f0,$10 db $a5,$f8,$10 db $a7,$f0,$10 db $bd,$00,$80 db $ae,$00,$c0 db $dd,$c0,$ff db $9f,$f2,$20 db $e1,$00,$80 db $e1,$00,$40 db $9f,$00,$40 db $a7,$10,$ff db $c7,$20,$20 db $dd,$00,$80 db $c5,$1f,$20 db $bd,$2f,$80 db $a5,$1f,$ff db $ca,$1f,$60 db $be,$1e,$20 db $be,$1f,$18 db $aa,$0f,$80 db $9f,$f8,$10 db $9e,$18,$20 db $dd,$08,$40 db $ad,$01,$e0 db $a7,$09,$ff db $e4,$42,$01 db $b2,$00,$ff db $dd,$08,$e0 db $bb,$00,$80 db $9f,$88,$10 db $bd,$48,$ff db $9e,$ff,$ff db $bb,$ff,$10 db $9e,$ff,$04 db $b2,$01,$ff db $a9,$f8,$ff db $a2,$f0,$f0 db $a5,$08,$10 db $a3,$f0,$ff db $b0,$f0,$ff db $e1,$10,$ff db $a4,$f0,$20 db $ca,$f0,$60 db $b8,$12,$10 db $e6,$f0,$20 db $b4,$12,$ff db $db,$80,$04 db $df,$f0,$10 db $c5,$f8,$ff db $be,$f0,$ff db $a7,$01,$ff db $cc,$d8,$04 db $a1,$00,$80 db $a1,$00,$80 Func_79aae: ; 79aae (1e:5aae) ld a, [H_WHOSETURN] ; $FF00+$f3 and a ld a, $31 jr z, .asm_79ab6 xor a .asm_79ab6 ld [H_DOWNARROWBLINKCNT1], a ; $FF00+$8b jr asm_79acb Func_79aba: ; 79aba (1e:5aba) call Load16BitRegisters ld a, [$cd6c] and a jr nz, .asm_79ac8 ld de, Unknown_79b02 ; $5b02 jr asm_79acb .asm_79ac8 ld de, Unknown_79b1b ; $5b1b asm_79acb: ; 79acb (1e:5acb) xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba Func_79ace: ; 79ace (1e:5ace) push hl .asm_79acf push bc push hl ld a, [H_DOWNARROWBLINKCNT1] ; $FF00+$8b ld b, a .asm_79ad4 ld a, [de] add b inc de ld [hli], a dec c jr nz, .asm_79ad4 pop hl ld bc, $14 add hl, bc pop bc dec b jr nz, .asm_79acf ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba pop hl ret PointerTable_79aea: ; 79aea (1e:5aea) dw Unknown_79b24 db $77 dw Unknown_79b55 db $57 dw Unknown_79b78 db $37 dw Unknown_79b8d db $77 dw Unknown_79bbe db $77 dw Unknown_79bef db $77 dw Unknown_79c20 db $86 dw Unknown_79c50 db $3C Unknown_79b02: ; 79b02 (1e:5b02) db $31,$38,$46,$54,$5B,$32,$39,$47,$55,$5C,$34,$3B,$49,$57,$5E,$36,$3D,$4B,$59,$60,$37,$3E,$4C,$5A,$61 Unknown_79b1b: ; 79b1b (1e:5b1b) db $31,$46,$5B,$34,$49,$5E,$37,$4C,$61 Unknown_79b24: ; 79b24 (1e:5b24) db $00,$07,$0E,$15,$1C,$23,$2A,$01,$08,$0F,$16,$1D,$24,$2B,$02,$09,$10,$17,$1E,$25,$2C,$03,$0A,$11,$18,$1F,$26,$2D,$04,$0B,$12,$19,$20,$27,$2E,$05,$0C,$13,$1A,$21,$28,$2F,$06,$0D,$14,$1B,$22,$29,$30 Unknown_79b55: ; 79b55 (1e:5b55) db $00,$07,$0E,$15,$1C,$23,$2A,$01,$08,$0F,$16,$1D,$24,$2B,$03,$0A,$11,$18,$1F,$26,$2D,$04,$0B,$12,$19,$20,$27,$2E,$05,$0C,$13,$1A,$21,$28,$2F Unknown_79b78: ; 79b78 (1e:5b78) db $00,$07,$0E,$15,$1C,$23,$2A,$02,$09,$10,$17,$1E,$25,$2C,$04,$0B,$12,$19,$20,$27,$2E Unknown_79b8d: ; 79b8d (1e:5b8d) db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$19,$00,$02,$06,$0B,$10,$14,$1A,$00,$00,$07,$0C,$11,$15,$1B,$00,$03,$08,$0D,$12,$16,$1C,$00,$04,$09,$0E,$13,$17,$1D,$1F,$05,$0A,$0F,$01,$18,$1E,$20 Unknown_79bbe: ; 79bbe (1e:5bbe) db $00,$00,$00,$30,$00,$37,$00,$00,$00,$2B,$31,$34,$38,$3D,$21,$26,$2C,$01,$35,$39,$3E,$22,$27,$2D,$32,$36,$01,$00,$23,$28,$2E,$33,$01,$3A,$00,$24,$29,$2F,$01,$01,$3B,$00,$25,$2A,$01,$01,$01,$3C,$00 Unknown_79bef: ; 79bef (1e:5bef) db $00,$00,$00,$00,$00,$00,$00,$00,$00,$47,$4D,$00,$00,$00,$00,$00,$48,$4E,$52,$56,$5B,$3F,$43,$49,$4F,$53,$57,$5C,$40,$44,$4A,$50,$54,$58,$00,$41,$45,$4B,$51,$4C,$59,$5D,$42,$46,$4C,$4C,$55,$5A,$5E Unknown_79c20: ; 79c20 (1e:5c20) db $31,$32,$32,$32,$32,$33,$34,$35,$36,$36,$37,$38,$34,$39,$3A,$3A,$3B,$38,$3C,$3D,$3E,$3E,$3F,$40,$41,$42,$43,$43,$44,$45,$46,$47,$43,$48,$49,$4A,$41,$43,$4B,$4C,$4D,$4E,$4F,$50,$50,$50,$51,$52 Unknown_79c50: ; 79c50 (1e:5c50) db $43,$55,$56,$53,$53,$53,$53,$53,$53,$53,$53,$53,$43,$57,$58,$54,$54,$54,$54,$54,$54,$54,$54,$54,$43,$59,$5A,$43,$43,$43,$43,$43,$43,$43,$43,$43 AnimationLeavesFalling: ; 79c74 (1e:5c74) ; Makes leaves float down from the top of the screen. This is used ; in Razor Leaf's animation. ld a, [$ff48] push af ld a, [$cc79] ld [$ff48], a ld d, $37 ld a, $3 ld [W_SUBANIMTRANSFORM], a call Func_79c97 pop af ld [$ff48], a ret AnimationPetalsFalling: ; 79c8a (1e:5c8a) ; Makes lots of petals fall down from the top of the screen. It's used in ; the animation for Petal Dance. ld d, $71 ld a, $14 ld [W_SUBANIMTRANSFORM], a call Func_79c97 jp CleanLCD_OAM Func_79c97: ; 79c97 (1e:5c97) ld c, a ld a, $1 call Func_797e8 call Func_79d2a call Func_79d52 ld hl, wOAMBuffer ld [hl], $0 .asm_79ca8 ld hl, wTrainerSpriteOffset ld de, $0000 ld a, [W_SUBANIMTRANSFORM] ld c, a .asm_79cb2 push bc push hl push de ld a, [hl] ld [$d08a], a call Func_79d16 call Func_79cdb pop de ld hl, $0004 add hl, de ld e, l ld d, h pop hl ld a, [$d08a] ld [hli], a pop bc dec c jr nz, .asm_79cb2 call Delay3 ld hl, wOAMBuffer ld a, [hl] cp $68 jr nz, .asm_79ca8 ret Func_79cdb: ; 79cdb (1e:5cdb) ld hl, wOAMBuffer add hl, de ld a, [hl] inc a inc a cp $70 jr c, .asm_79ce8 ld a, $a0 .asm_79ce8 ld [hli], a ld a, [$d08a] ld b, a ld de, Unknown_79d0d and $7f add e jr nc, .asm_79cf6 inc d .asm_79cf6 ld e, a ld a, b and $80 jr nz, .asm_79d03 ld a, [de] add [hl] ld [hli], a inc hl xor a jr .asm_79d0b .asm_79d03 ld a, [de] ld b, a ld a, [hl] sub b ld [hli], a inc hl ld a, $20 .asm_79d0b ld [hl], a ret Unknown_79d0d: ; 79d0d (1e:5d0d) db $00,$01,$03,$05,$07,$09,$0B,$0D,$0F Func_79d16: ; 79d16 (1e:5d16) ld a, [$d08a] inc a ld b, a and $7f cp $9 ld a, b jr nz, .asm_79d26 and $80 xor $80 .asm_79d26 ld [$d08a], a ret Func_79d2a: ; 79d2a (1e:5d2a) ld hl, $c301 ld de, Unknown_79d3e ld a, [W_SUBANIMTRANSFORM] ld c, a .asm_79d34 ld a, [de] ld [hli], a inc hl inc hl inc hl inc de dec c jr nz, .asm_79d34 ret Unknown_79d3e: ; 79d3e (1e:5d3e) db $38,$40,$50,$60,$70,$88,$90,$56,$67,$4A,$77,$84,$98,$32,$22,$5C,$6C,$7D,$8E,$99 Func_79d52: ; 79d52 (1e:5d52) ld hl, wTrainerSpriteOffset ld de, Unknown_79d63 ld a, [W_SUBANIMTRANSFORM] ld c, a .asm_79d5c ld a, [de] ld [hli], a inc de dec c jr nz, .asm_79d5c ret Unknown_79d63: ; 79d63 (1e:5d63) db $00,$84,$06,$81,$02,$88,$01,$83,$05,$89,$09,$80,$07,$87,$03,$82,$04,$85,$08,$86 AnimationShakeEnemyHUD: ; 79d77 (1e:5d77) ld de, $9310 ld hl, $8000 ld bc, $0031 call CopyVideoData xor a ld [$ffae], a ld hl, $9800 call Func_79e0d ld a, $90 ld [$ffb0], a ld hl, $9b20 call Func_79e0d ld a, $38 ld [$ffb0], a call Func_792fd ld hl, $9800 call Func_79e0d call AnimationHideMonPic call Delay3 ld de, $0208 call Func_79de9 call AnimationShowMonPic call CleanLCD_OAM ld a, $90 ld [$ffb0], a ld hl, $9c00 call Func_79e0d xor a ld [$ffb0], a call SaveScreenTilesToBuffer1 ld hl, $9800 call Func_79e0d call ClearScreen call Delay3 call LoadScreenTilesFromBuffer1 ld hl, $9c00 jp Func_79e0d Func_79dda: ; 79dda (1e:5dda) call Load16BitRegisters ld a, c ld [H_DOWNARROWBLINKCNT1], a ; $FF00+$8b ld a, b push hl call Func_79842 pop hl jp Func_79ace Func_79de9: ; 79de9 (1e:5de9) ld a, [$ffae] ld [wTrainerSpriteOffset], a .asm_79dee ld a, [wTrainerSpriteOffset] add d ld [$ffae], a ld c, $2 call DelayFrames ld a, [wTrainerSpriteOffset] sub d ld [$ffae], a ld c, $2 call DelayFrames dec e jr nz, .asm_79dee ld a, [wTrainerSpriteOffset] ld [$ffae], a ret Func_79e0d: ; 79e0d (1e:5e0d) ld a, h ld [$ffbd], a ld a, l ld [H_AUTOBGTRANSFERDEST], a jp Delay3 TossBallAnimation: ; 79e16 (1e:5e16) ld a,[W_ISINBATTLE] cp a,2 jr z,.BlockBall ; if in trainer battle, play different animation ld a,[$D11E] ld b,a ; upper nybble: how many animations (from PokeBallAnimations) to play ; this will be 4 for successful capture, 6 for breakout and a,$F0 swap a ld c,a ; lower nybble: number of shakes ; store these for later ld a,b and a,$F ld [$CD3D],a ld hl,.PokeBallAnimations ; choose which toss animation to use ld a,[$CF91] cp a,POKE_BALL ld b,TOSS_ANIM jr z,.done cp a,GREAT_BALL ld b,GREATTOSS_ANIM jr z,.done ld b,ULTRATOSS_ANIM .done ld a,b .PlayNextAnimation ld [W_ANIMATIONID],a push bc push hl call PlayAnimation pop hl ld a,[hli] pop bc dec c jr nz,.PlayNextAnimation ret .PokeBallAnimations: ; 79e50 (1e:5e50) ; sequence of animations that make up the Poké Ball toss db POOF_ANIM,HIDEPIC_ANIM,$C2,POOF_ANIM,SHOWPIC_ANIM .BlockBall ; 5E55 ld a,$C1 ld [W_ANIMATIONID],a call PlayAnimation ld a,$95 call PlaySound ; play sound effect ld a,BLOCKBALL_ANIM ld [W_ANIMATIONID],a jp PlayAnimation Func_79e6a: ; 79e6a (1e:5e6a) call WaitForSoundToFinish ld a, [$d05b] and $7f ret z cp $a ld a, $20 ld b, $30 ld c, $a6 jr z, .asm_79e8b ld a, $e0 ld b, $ff ld c, $b0 jr nc, .asm_79e8b ld a, $50 ld b, $1 ld c, $a7 .asm_79e8b ld [$c0f1], a ld a, b ld [$c0f2], a ld a, c jp PlaySound Func_79e96: ; 79e96 (1e:5e96) ld a, [$cd4d] cp $52 jr z, .asm_79ec8 ld c, $8 .asm_79e9f push bc ld hl, $c391 ld a, $1 ld [$d08a], a ld c, $2 call Func_79339 ld hl, $c399 ld a, $ff ld [$d08a], a ld c, $2 call Func_79339 ld a, [rOBP1] ; $FF00+$49 xor $64 ld [rOBP1], a ; $FF00+$49 call DelayFrame pop bc dec c jr nz, .asm_79e9f ret .asm_79ec8 ld c, $2 .asm_79eca push bc ld c, $8 call Func_79eed call Func_79f30 ld c, $8 call Func_79eed call Func_79f30 ld hl, $c390 ld a, $2 ld [$d08a], a ld c, $4 call Func_79352 pop bc dec c jr nz, .asm_79eca ret Func_79eed: ; 79eed (1e:5eed) push bc ld hl, $c391 ld a, $1 ld [$d08a], a ld c, $1 call Func_79339 ld hl, $c395 ld a, $2 ld [$d08a], a ld c, $1 call Func_79339 ld hl, $c399 ld a, $fe ld [$d08a], a ld c, $1 call Func_79339 ld hl, $c39d ld a, $ff ld [$d08a], a ld c, $1 call Func_79339 ld a, [rOBP1] ; $FF00+$49 xor $64 ld [rOBP1], a ; $FF00+$49 call DelayFrame pop bc dec c jr nz, Func_79eed ret Func_79f30: ; 79f30 (1e:5f30) ld hl, $c390 ld de, $cee9 ld bc, $8 call CopyData ld hl, $c398 ld de, $c390 ld bc, $8 call CopyData ld hl, $cee9 ld de, $c398 ld bc, $8 jp CopyData Func_79f54: ; 79f54 (1e:5f54) ld a, $1 ld [$cd50], a ld a, [$cfcb] push af ld a, $ff ld [$cfcb], a ld a, $e4 ld [rOBP1], a ; $FF00+$49 call Func_79fc0 ld b, BANK(asm_f055) ld hl, asm_f055 call Bankswitch ld c, $8 .asm_79f73 push bc call Func_79f92 ld bc, .asm_79f7e push bc ld c, $4 jp [hl] .asm_79f7e ld a, [rOBP1] ; $FF00+$49 xor $64 ld [rOBP1], a ; $FF00+$49 call Delay3 pop bc dec c jr nz, .asm_79f73 pop af ld [$cfcb], a jp LoadPlayerSpriteGraphics Func_79f92: ; 79f92 (1e:5f92) ld a, [$c109] ld hl, PointerTable_79fb0 ; $5fb0 ld c, a ld b, $0 add hl, bc ld a, [hli] ld [$d08a], a ld a, [hli] ld e, a ld a, [hli] ld h, [hl] ld l, a push hl ld hl, $c390 ld d, $0 add hl, de ld e, l ld d, h pop hl ret PointerTable_79fb0: ; 79fb0 (1e:5fb0) db $FF,$00 dw Func_79350 db $01,$00 dw Func_79350 db $01,$01 dw Func_79337 db $FF,$01 dw Func_79337 Func_79fc0: ; 79fc0 (1e:5fc0) ld hl, $8fc0 ld c, $4 .asm_79fc5 push bc push hl call Func_79fd4 pop hl ld bc, $10 add hl, bc pop bc dec c jr nz, .asm_79fc5 ret Func_79fd4: ; 79fd4 (1e:5fd4) ld de, SSAnneSmokePuffTile ; $5fdd ld bc, (BANK(SSAnneSmokePuffTile) << 8) + $01 jp CopyVideoData SSAnneSmokePuffTile: ; 79fdd (1e:5fdd) INCBIN "gfx/ss_anne_smoke_puff.2bpp" RedFishingTilesFront: ; 79fed (1e:5fed) INCBIN "gfx/red_fishing_tile_front.2bpp" RedFishingTilesBack: ; 7a00d (1e:600d) INCBIN "gfx/red_fishing_tile_back.2bpp" RedFishingTilesSide: ; 7a02d (1e:602d) INCBIN "gfx/red_fishing_tile_side.2bpp" RedFishingRodTiles: ; 7a04d (1e:604d) INCBIN "gfx/red_fishingrod_tiles.2bpp" AttackAnimationPointers: ; 7a07d (1e:607d) dw PoundAnim dw KarateChopAnim dw DoubleSlapAnim dw CometPunchAnim dw MegaPunchAnim dw PayDayAnim dw FirePunchAnim dw IcePunchAnim dw ThunderPunchAnim dw ScratchAnim dw VicegripAnim dw GuillotineAnim dw RazorWindAnim dw SwordsDanceAnim dw CutAnim dw GustAnim dw WingAttackAnim dw WhirlwindAnim dw FlyAnim dw BindAnim dw SlamAnim dw VineWhipAnim dw StompAnim dw DoubleKickAnim dw MegaKickAnim dw JumpKickAnim dw RollingKickAnim dw SandAttackAnim dw HeatButtAnim dw HornAttackAnim dw FuryAttackAnim dw HornDrillAnim dw TackleAnim dw BodySlamAnim dw WrapAnim dw TakeDownAnim dw ThrashAnim dw DoubleEdgeAnim dw TailWhipAnim dw PoisonStingAnim dw TwineedleAnim dw PinMissileAnim dw LeerAnim dw BiteAnim dw GrowlAnim dw RoarAnim dw SingAnim dw SupersonicAnim dw SonicBoomAnim dw DisableAnim dw AcidAnim dw EmberAnim dw FlamethrowerAnim dw MistAnim dw WaterGunAnim dw HydroPumpAnim dw SurfAnim dw IceBeamAnim dw BlizzardAnim dw PsyBeamAnim dw BubbleBeamAnim dw AuroraBeamAnim dw HyperBeamAnim dw PeckAnim dw DrillPeckAnim dw SubmissionAnim dw LowKickAnim dw CounterAnim dw SeismicTossAnim dw StrengthAnim dw AbsorbAnim dw MegaDrainAnim dw LeechSeedAnim dw GrowthAnim dw RazorLeafAnim dw SolarBeamAnim dw PoisonPowderAnim dw StunSporeAnim dw SleepPowderAnim dw PedalDanceAnim dw StringShotAnim dw DragonRageAnim dw FireSpinAnim dw ThunderShockAnim dw ThunderBoltAnim dw ThunderWaveAnim dw ThunderAnim dw RockThrowAnim dw EarthquakeAnim dw FissureAnim dw DigAnim dw ToxicAnim dw ConfusionAnim dw PsychicAnim dw HypnosisAnim dw MeditateAnim dw AgilityAnim dw QuickAttackAnim dw RageAnim dw TeleportAnim dw NightShadeAnim dw MimicAnim dw ScreechAnim dw DoubleTeamAnim dw RecoverAnim dw HardenAnim dw MinimizeAnim dw SmokeScreenAnim dw ConfuseRayAnim dw WithdrawAnim dw DefenseCurlAnim dw BarrierAnim dw LightScreenAnim dw HazeAnim dw ReflectAnim dw FocusEnergyAnim dw BideAnim dw MetronomeAnim dw MirrorMoveAnim dw SelfdestructAnim dw EggBombAnim dw LickAnim dw SmogAnim dw SludgeAnim dw BoneClubAnim dw FireBlastAnim dw WaterfallAnim dw ClampAnim dw SwiftAnim dw SkullBashAnim dw SpikeCannonAnim dw ConstrictAnim dw AmnesiaAnim dw KinesisAnim dw SoftboiledAnim dw HiJumpKickAnim dw GlareAnim dw DreamEaterAnim dw PoisonGasAnim dw BarrageAnim dw LeechLifeAnim dw LovelyKissAnim dw SkyAttackAnim dw TransformAnim dw BubbleAnim dw DizzyPunchAnim dw SporeAnim dw FlashAnim dw PsywaveAnim dw SplashAnim dw AcidArmorAnim dw CrabHammerAnim dw ExplosionAnim dw FurySwipesAnim dw BonemerangAnim dw RestAnim dw RockSlideAnim dw HyperFangAnim dw SharpenAnim dw ConversionAnim dw TriAttackAnim dw SuperFangAnim dw SlashAnim dw SubstituteAnim dw StruggleAnim dw ShowPicAnim dw EnemyFlashAnim dw PlayerFlashAnim dw EnemyHUDShakeAnim dw TradeBallDropAnim dw TradeBallAppear1Anim dw TradeBallAppear2Anim dw TradeBallPoofAnim dw XStatItemAnim dw XStatItemAnim dw ShrinkingSquareAnim dw ShrinkingSquareAnim dw XStatItemBlackAnim dw XStatItemBlackAnim dw ShrinkingSquareBlackAnim dw ShrinkingSquareBlackAnim dw UnusedAnim dw UnusedAnim dw ParalyzeAnim dw ParalyzeAnim dw PoisonAnim dw PoisonAnim dw SleepPlayerAnim dw SleepEnemyAnim dw ConfusedPlayerAnim dw ConfusedEnemyAnim dw FaintAnim dw BallTossAnim dw BallShakeAnim dw BallPoofAnim dw BallBlockAnim dw GreatTossAnim dw UltraTossAnim dw ShakeScreenAnim dw HidePicAnim dw ThrowRockAnim dw ThrowBaitAnim dw ZigZagScreenAnim ; each animation is a list of subanimations and special effects ; if first byte < $56 ; db tileset_and_delay, sound_id, subanimation_id ; if first byte >= $D8 ; db special_effect_id, sound_id ; $FF terminated ZigZagScreenAnim: ; 7a213 (1e:6213) db SE_WAVY_SCREEN, $FF db $FF PoundAnim: ; 7a216 (1e:6216) StruggleAnim: ; 7a216 (1e:6216) db $08,$00,$01 db $FF KarateChopAnim: ; 7a21a (1e:621a) db $08,$01,$03 db $FF DoubleSlapAnim: ; 7a21e (1e:621e) db $05,$02,$01 db $05,$02,$01 db $FF CometPunchAnim: ; 7a225 (1e:6225) db $04,$03,$02 db $04,$03,$02 db $FF MegaPunchAnim: ; 7a22c (1e:622c) db $46,$04,$04 db $FF PayDayAnim: ; 7a230 (1e:6230) db $08,$00,$01 db $04,$05,$52 db $FF FirePunchAnim: ; 7a237 (1e:6237) db $06,$06,$02 db $46,$FF,$11 db $FF IcePunchAnim: ; 7a23e (1e:623e) db $06,$07,$02 db $10,$FF,$2F db $FF ThunderPunchAnim: ; 7a245 (1e:6245) db $06,$08,$02 db SE_DARK_SCREEN_PALETTE, $FF db $46,$FF,$2B db SE_RESET_SCREEN_PALETTE, $FF db $FF ScratchAnim: ; 7a250 (1e:6250) db $06,$09,$0F db $FF VicegripAnim: ; 7a254 (1e:6254) db $08,$0A,$2A db $FF GuillotineAnim: ; 7a258 (1e:6258) db $06,$0B,$2A db $FF RazorWindAnim: ; 7a25c (1e:625c) db $04,$0C,$16 db $FF SwordsDanceAnim: ; 7a260 (1e:6260) db $46,$0D,$18 db $46,$0D,$18 db $46,$0D,$18 db $FF CutAnim: ; 7a26a (1e:626a) db SE_DARK_SCREEN_FLASH, $0E db $04,$FF,$16 db $FF GustAnim: ; 7a270 (1e:6270) db $46,$0F,$10 db $06,$FF,$02 db $FF WingAttackAnim: ; 7a277 (1e:6277) db $46,$10,$04 db $FF WhirlwindAnim: ; 7a27b (1e:627b) db $46,$11,$10 db SE_SLIDE_ENEMY_MON_OUT, $FF db $FF FlyAnim: ; 7a281 (1e:6281) db $46,$12,$04 db SE_SHOW_MON_PIC, $FF db $FF BindAnim: ; 7a287 (1e:6287) db $04,$13,$23 db $04,$13,$23 db $FF SlamAnim: ; 7a28e (1e:628e) db $06,$14,$02 db $FF VineWhipAnim: ; 7a292 (1e:6292) db $01,$15,$16 db $08,$FF,$01 db $FF StompAnim: ; 7a299 (1e:6299) db $48,$16,$05 db $FF DoubleKickAnim: ; 7a29d (1e:629d) db $08,$17,$01 db $08,$17,$01 db $FF MegaKickAnim: ; 7a2a4 (1e:62a4) db $46,$18,$04 db $FF JumpKickAnim: ; 7a2a8 (1e:62a8) db $46,$19,$04 db $FF RollingKickAnim: ; 7a2ac (1e:62ac) db SE_DARK_SCREEN_FLASH, $1A db $46,$FF,$04 db $FF SandAttackAnim: ; 7a2b2 (1e:62b2) db $46,$1B,$28 db $FF HeatButtAnim: ; 7a2b6 (1e:62b6) db $46,$1C,$05 db $FF HornAttackAnim: ; 7a2ba (1e:62ba) db $06,$1D,$45 db $46,$FF,$05 db $FF FuryAttackAnim: ; 7a2c1 (1e:62c1) db $02,$1E,$46 db $02,$FF,$46 db $FF HornDrillAnim: ; 7a2c8 (1e:62c8) db $42,$1F,$05 db $42,$FF,$05 db $42,$FF,$05 db $42,$FF,$05 db $42,$FF,$05 db $FF TackleAnim: ; 7a2d8 (1e:62d8) db SE_MOVE_MON_HORIZONTALLY, $48 db SE_RESET_MON_POSITION, $FF db $FF BodySlamAnim: ; 7a2dd (1e:62dd) db SE_MOVE_MON_HORIZONTALLY, $48 db SE_DARK_SCREEN_FLASH, $FF db SE_DARK_SCREEN_FLASH, $FF db SE_RESET_MON_POSITION, $FF db $FF WrapAnim: ; 7a2e6 (1e:62e6) db $04,$22,$23 db $04,$22,$23 db $04,$22,$23 db $FF TakeDownAnim: ; 7a2f0 (1e:62f0) db SE_MOVE_MON_HORIZONTALLY, $48 db SE_DARK_SCREEN_FLASH, $23 db SE_RESET_MON_POSITION, $FF db $FF ThrashAnim: ; 7a2f7 (1e:62f7) db $46,$24,$04 db $FF DoubleEdgeAnim: ; 7a2fb (1e:62fb) db SE_LIGHT_SCREEN_PALETTE, $48 db $06,$FF,$2D db SE_RESET_SCREEN_PALETTE, $FF db SE_MOVE_MON_HORIZONTALLY, $FF db SE_DARK_SCREEN_FLASH, $25 db SE_RESET_MON_POSITION, $FF db $FF TailWhipAnim: ; 7a309 (1e:6309) db SE_MOVE_MON_HORIZONTALLY, $84 db SE_DELAY_ANIMATION_10, $FF db SE_RESET_MON_POSITION, $84 db SE_DELAY_ANIMATION_10, $FF db SE_MOVE_MON_HORIZONTALLY, $84 db SE_DELAY_ANIMATION_10, $FF db SE_RESET_MON_POSITION, $84 db $FF PoisonStingAnim: ; 7a318 (1e:6318) db $06,$27,$00 db $FF TwineedleAnim: ; 7a31c (1e:631c) db $05,$28,$01 db $05,$28,$01 db $FF PinMissileAnim: ; 7a323 (1e:6323) db $03,$29,$01 db $FF LeerAnim: ; 7a327 (1e:6327) db SE_DARK_SCREEN_PALETTE, $48 db SE_DARK_SCREEN_FLASH, $2A db SE_DARK_SCREEN_FLASH, $2A db SE_RESET_SCREEN_PALETTE, $FF db $FF BiteAnim: ; 7a330 (1e:6330) db $08,$2B,$02 db $FF GrowlAnim: ; 7a334 (1e:6334) db $46,$2C,$12 db $FF RoarAnim: ; 7a338 (1e:6338) db $46,$2D,$15 db $46,$2D,$15 db $46,$2D,$15 db $FF SingAnim: ; 7a342 (1e:6342) db $46,$2E,$12 db $50,$FF,$40 db $50,$FF,$40 db $FF SupersonicAnim: ; 7a34c (1e:634c) db $06,$2F,$31 db $FF SonicBoomAnim: ; 7a350 (1e:6350) db $46,$2D,$15 db $46,$2D,$15 db $46,$0F,$10 db $46,$FF,$05 db $FF DisableAnim: ; 7a35d (1e:635d) db SE_DARK_SCREEN_PALETTE, $48 db SE_DARK_SCREEN_FLASH, $2A db SE_DARK_SCREEN_FLASH, $2A db SE_RESET_SCREEN_PALETTE, $FF db $FF AcidAnim: ; 7a366 (1e:6366) db $46,$32,$13 db $46,$32,$14 db $FF EmberAnim: ; 7a36d (1e:636d) db $46,$33,$11 db $FF FlamethrowerAnim: ; 7a371 (1e:6371) db $46,$34,$1F db $46,$34,$0C db $46,$34,$0D db $FF MistAnim: ; 7a37b (1e:637b) db SE_LIGHT_SCREEN_PALETTE, $FF db SE_WATER_DROPLETS_EVERYWHERE, $38 db SE_RESET_SCREEN_PALETTE, $FF db $FF WaterGunAnim: ; 7a382 (1e:6382) db $06,$36,$2C db $FF HydroPumpAnim: ; 7a386 (1e:6386) db $06,$37,$1A db $06,$37,$1A db $FF SurfAnim: ; 7a38d (1e:638d) db SE_WATER_DROPLETS_EVERYWHERE, $38 db $06,$37,$1A db $FF IceBeamAnim: ; 7a393 (1e:6393) db $03,$39,$2E db $10,$FF,$2F db $FF BlizzardAnim: ; 7a39a (1e:639a) db $04,$3A,$38 db $04,$37,$38 db $FF PsyBeamAnim: ; 7a3a1 (1e:63a1) db $03,$3B,$2E db SE_FLASH_SCREEN_LONG, $FF db $FF BubbleBeamAnim: ; 7a3a7 (1e:63a7) db $12,$3C,$35 db $FF AuroraBeamAnim: ; 7a3ab (1e:63ab) db $03,$3D,$2E db SE_DELAY_ANIMATION_10, $FF db SE_DELAY_ANIMATION_10, $FF db $FF HyperBeamAnim: ; 7a3b3 (1e:63b3) db SE_DARK_SCREEN_PALETTE, $48 db SE_SPIRAL_BALLS_INWARD, $FF db $02,$3E,$2E db SE_DARK_SCREEN_FLASH, $FF db SE_DARK_SCREEN_FLASH, $FF db $46,$04,$04 db SE_RESET_SCREEN_PALETTE, $FF db $FF PeckAnim: ; 7a3c4 (1e:63c4) db $08,$3F,$01 db $FF DrillPeckAnim: ; 7a3c8 (1e:63c8) db $46,$40,$04 db $FF SubmissionAnim: ; 7a3cc (1e:63cc) db SE_SLIDE_MON_OUT, $41 db $06,$FF,$01 db SE_SHOW_MON_PIC, $FF db $FF LowKickAnim: ; 7a3d4 (1e:63d4) db SE_SLIDE_MON_OUT, $42 db $46,$FF,$04 db SE_SHOW_MON_PIC, $FF db $FF CounterAnim: ; 7a3dc (1e:63dc) db SE_SLIDE_MON_OUT, $43 db $46,$FF,$04 db SE_SHOW_MON_PIC, $FF db $FF SeismicTossAnim: ; 7a3e4 (1e:63e4) db SE_BLINK_ENEMY_MON, $FF db $41,$8B,$4E db SE_HIDE_ENEMY_MON_PIC, $FF db SE_SLIDE_MON_OUT, $FF db $42,$44,$4F db SE_DELAY_ANIMATION_10, $FF db SE_DELAY_ANIMATION_10, $FF db SE_SHOW_MON_PIC, $FF db $41,$44,$50 db SE_SHOW_ENEMY_MON_PIC, $FF db SE_SHAKE_SCREEN, $FF db $FF StrengthAnim: ; 7a3fe (1e:63fe) db SE_MOVE_MON_HORIZONTALLY, $48 db SE_RESET_MON_POSITION, $FF db $46,$06,$04 db $FF AbsorbAnim: ; 7a406 (1e:6406) db SE_LIGHT_SCREEN_PALETTE, $46 db $06,$FF,$21 db $06,$FF,$22 db SE_RESET_SCREEN_PALETTE, $FF db $FF MegaDrainAnim: ; 7a411 (1e:6411) db SE_LIGHT_SCREEN_PALETTE, $47 db SE_DARK_SCREEN_FLASH, $FF db $06,$FF,$21 db $06,$FF,$22 db SE_DARK_SCREEN_FLASH, $FF db SE_RESET_SCREEN_PALETTE, $FF db $FF LeechSeedAnim: ; 7a420 (1e:6420) db $46,$48,$1B db $55,$4D,$1C db $FF GrowthAnim: ; 7a427 (1e:6427) db SE_LIGHT_SCREEN_PALETTE, $49 db SE_SPIRAL_BALLS_INWARD, $FF db SE_RESET_SCREEN_PALETTE, $FF db $FF RazorLeafAnim: ; 7a42e (1e:642e) db SE_LEAVES_FALLING, $4A db $41,$80,$44 db $01,$0C,$16 db $FF SolarBeamAnim: ; 7a437 (1e:6437) db $06,$4B,$2E db $06,$FF,$01 db $FF PoisonPowderAnim: ; 7a43e (1e:643e) db $06,$4C,$36 db $FF StunSporeAnim: ; 7a442 (1e:6442) db $06,$4D,$36 db $FF SleepPowderAnim: ; 7a446 (1e:6446) db $06,$4E,$36 db $FF PedalDanceAnim: ; 7a44a (1e:644a) db SE_LIGHT_SCREEN_PALETTE, $4F db SE_PETALS_FALLING, $FF db SE_RESET_SCREEN_PALETTE, $FF db $FF StringShotAnim: ; 7a451 (1e:6451) db $08,$50,$37 db $FF DragonRageAnim: ; 7a455 (1e:6455) db $46,$51,$1F db $46,$FF,$0C db $46,$FF,$0D db $46,$FF,$0E db $FF FireSpinAnim: ; 7a462 (1e:6462) db $46,$52,$0C db $46,$FF,$0D db $46,$FF,$0E db $FF ThunderShockAnim: ; 7a46c (1e:646c) db $42,$53,$29 db $FF ThunderBoltAnim: ; 7a470 (1e:6470) db $41,$54,$29 db $41,$54,$29 db $FF ThunderWaveAnim: ; 7a477 (1e:6477) db $42,$55,$29 db $02,$FF,$23 db $04,$FF,$23 db $FF ThunderAnim: ; 7a481 (1e:6481) db SE_DARK_SCREEN_PALETTE, $56 db SE_DARK_SCREEN_FLASH, $FF db $46,$FF,$2B db SE_DARK_SCREEN_FLASH, $FF db $42,$54,$29 db SE_RESET_SCREEN_PALETTE, $FF db $FF RockThrowAnim: ; 7a490 (1e:6490) db $04,$57,$30 db $FF EarthquakeAnim: ; 7a494 (1e:6494) db SE_SHAKE_SCREEN, $58 db SE_SHAKE_SCREEN, $58 db $FF FissureAnim: ; 7a499 (1e:6499) db SE_DARK_SCREEN_FLASH, $59 db SE_SHAKE_SCREEN, $FF db SE_DARK_SCREEN_FLASH, $59 db SE_SHAKE_SCREEN, $FF db $FF DigAnim: ; 7a4a2 (1e:64a2) db $46,$5A,$04 db SE_SLIDE_MON_UP, $FF db $FF ToxicAnim: ; 7a4a8 (1e:64a8) db SE_WATER_DROPLETS_EVERYWHERE, $38 db $46,$5B,$14 db $FF ConfusionAnim: ; 7a4ae (1e:64ae) db SE_FLASH_SCREEN_LONG, $5C db $FF PsychicAnim: ; 7a4b1 (1e:64b1) db SE_FLASH_SCREEN_LONG, $5D db SE_WAVY_SCREEN, $FF db $FF HypnosisAnim: ; 7a4b6 (1e:64b6) db SE_FLASH_SCREEN_LONG, $5E db $FF MeditateAnim: ; 7a4b9 (1e:64b9) db SE_LIGHT_SCREEN_PALETTE, $5F db $46,$FF,$43 db SE_DARK_SCREEN_FLASH, $FF db SE_RESET_SCREEN_PALETTE, $FF db $FF AgilityAnim: ; 7a4c3 (1e:64c3) db SE_LIGHT_SCREEN_PALETTE, $60 db SE_RESET_SCREEN_PALETTE, $FF db $FF QuickAttackAnim: ; 7a4c8 (1e:64c8) db SE_SLIDE_MON_OUT, $61 db $46,$FF,$04 db SE_SHOW_MON_PIC, $FF db $FF RageAnim: ; 7a4d0 (1e:64d0) db $06,$62,$01 db $FF TeleportAnim: ; 7a4d4 (1e:64d4) db SE_SQUISH_MON_PIC, $63 db SE_SHOOT_BALLS_UPWARD, $FF db $FF NightShadeAnim: ; 7a4d9 (1e:64d9) db SE_FLASH_SCREEN_LONG, $5C db SE_WAVY_SCREEN, $FF db $FF MimicAnim: ; 7a4de (1e:64de) db $46,$65,$21 db $46,$65,$22 db $FF ScreechAnim: ; 7a4e5 (1e:64e5) db $46,$66,$12 db $FF DoubleTeamAnim: ; 7a4e9 (1e:64e9) db SE_DARK_SCREEN_PALETTE, $FF db SE_DELAY_ANIMATION_10, $FF db SE_DELAY_ANIMATION_10, $FF db SE_DARK_SCREEN_FLASH, $FF db SE_DARK_SCREEN_FLASH, $FF db SE_RESET_SCREEN_PALETTE, $FF db SE_SHAKE_BACK_AND_FORTH, $67 db SE_SHOW_MON_PIC, $FF db $46,$6F,$33 db $FF RecoverAnim: ; 7a4fd (1e:64fd) db SE_BLINK_MON, $68 db SE_LIGHT_SCREEN_PALETTE, $FF db SE_SPIRAL_BALLS_INWARD, $FF db SE_RESET_SCREEN_PALETTE, $FF db $FF HardenAnim: ; 7a506 (1e:6506) db SE_LIGHT_SCREEN_PALETTE, $69 db $46,$FF,$43 db SE_DARK_SCREEN_FLASH, $FF db SE_RESET_SCREEN_PALETTE, $FF db $FF MinimizeAnim: ; 7a510 (1e:6510) db SE_LIGHT_SCREEN_PALETTE, $6A db SE_SPIRAL_BALLS_INWARD, $FF db SE_MINIMIZE_MON, $FF db SE_RESET_SCREEN_PALETTE, $FF db $FF SmokeScreenAnim: ; 7a519 (1e:6519) db $46,$6B,$28 db $04,$FF,$0A db SE_DARKEN_MON_PALETTE, $FF db SE_DELAY_ANIMATION_10, $FF db SE_DELAY_ANIMATION_10, $FF db SE_DARK_SCREEN_PALETTE, $FF db SE_DELAY_ANIMATION_10, $FF db SE_DELAY_ANIMATION_10, $FF db SE_DELAY_ANIMATION_10, $FF db SE_DELAY_ANIMATION_10, $FF db SE_DELAY_ANIMATION_10, $FF db SE_DELAY_ANIMATION_10, $FF db SE_DARKEN_MON_PALETTE, $FF db SE_DELAY_ANIMATION_10, $FF db SE_RESET_SCREEN_PALETTE, $FF db $FF ConfuseRayAnim: ; 7a53a (1e:653a) db SE_DARK_SCREEN_PALETTE, $6C db $46,$FF,$3E db SE_RESET_SCREEN_PALETTE, $FF db $FF WithdrawAnim: ; 7a542 (1e:6542) db SE_LIGHT_SCREEN_PALETTE, $6E db SE_SLIDE_MON_DOWN, $FF db $06,$FF,$51 db SE_RESET_SCREEN_PALETTE, $FF db SE_SHOW_MON_PIC, $FF db $FF DefenseCurlAnim: ; 7a54e (1e:654e) db SE_LIGHT_SCREEN_PALETTE, $6E db $06,$FF,$43 db SE_DARK_SCREEN_FLASH, $FF db SE_RESET_SCREEN_PALETTE, $FF db $FF BarrierAnim: ; 7a558 (1e:6558) db $46,$6F,$33 db $46,$6F,$33 db $FF LightScreenAnim: ; 7a55f (1e:655f) db SE_LIGHT_SCREEN_PALETTE, $FF db $46,$70,$33 db $46,$70,$33 db SE_RESET_SCREEN_PALETTE, $FF db $FF HazeAnim: ; 7a56a (1e:656a) db SE_DARKEN_MON_PALETTE, $FF db SE_WATER_DROPLETS_EVERYWHERE, $38 db SE_RESET_SCREEN_PALETTE, $FF db $FF ReflectAnim: ; 7a571 (1e:6571) db SE_DARK_SCREEN_PALETTE, $FF db $46,$72,$33 db $46,$72,$33 db SE_RESET_SCREEN_PALETTE, $FF db $FF FocusEnergyAnim: ; 7a57c (1e:657c) db SE_SPIRAL_BALLS_INWARD, $73 db $FF BideAnim: ; 7a57f (1e:657f) db $46,$74,$04 db $FF MetronomeAnim: ; 7a583 (1e:6583) db SE_MOVE_MON_HORIZONTALLY, $84 db SE_DELAY_ANIMATION_10, $FF db SE_RESET_MON_POSITION, $84 db SE_DELAY_ANIMATION_10, $FF db SE_MOVE_MON_HORIZONTALLY, $84 db SE_DELAY_ANIMATION_10, $FF db SE_RESET_MON_POSITION, $84 db $FF MirrorMoveAnim: ; 7a592 (1e:6592) db $08,$76,$01 db $FF SelfdestructAnim: ; 7a596 (1e:6596) db $43,$77,$34 db $FF EggBombAnim: ; 7a59a (1e:659a) db $44,$78,$41 db $44,$78,$42 db $FF LickAnim: ; 7a5a1 (1e:65a1) db $46,$7B,$14 db $FF SmogAnim: ; 7a5a5 (1e:65a5) db SE_DARKEN_MON_PALETTE, $48 db $46,$7A,$19 db SE_RESET_SCREEN_PALETTE, $FF db $FF SludgeAnim: ; 7a5ad (1e:65ad) db $46,$7B,$13 db $46,$7B,$14 db $FF BoneClubAnim: ; 7a5b4 (1e:65b4) db $08,$7C,$02 db $FF FireBlastAnim: ; 7a5b8 (1e:65b8) db $46,$7D,$1F db $46,$FF,$20 db $46,$FF,$20 db $46,$FF,$0C db $46,$FF,$0D db $FF WaterfallAnim: ; 7a5c8 (1e:65c8) db SE_SLIDE_MON_DOWN, $48 db $06,$37,$1A db $08,$FF,$02 db SE_SLIDE_MON_UP, $FF db $FF ClampAnim: ; 7a5d3 (1e:65d3) db $08,$7F,$2A db $06,$83,$23 db $06,$83,$23 db $FF SwiftAnim: ; 7a5dd (1e:65dd) db $43,$80,$3F db $FF SkullBashAnim: ; 7a5e1 (1e:65e1) db $46,$81,$05 db $FF SpikeCannonAnim: ; 7a5e5 (1e:65e5) db $44,$82,$04 db $FF ConstrictAnim: ; 7a5e9 (1e:65e9) db $06,$83,$23 db $06,$83,$23 db $06,$83,$23 db $FF AmnesiaAnim: ; 7a5f3 (1e:65f3) db $08,$84,$25 db $08,$84,$25 db $FF KinesisAnim: ; 7a5fa (1e:65fa) db $08,$85,$01 db $FF SoftboiledAnim: ; 7a5fe (1e:65fe) db SE_SLIDE_MON_HALF_LEFT, $48 db $08,$86,$4C db SE_LIGHT_SCREEN_PALETTE, $FF db SE_SPIRAL_BALLS_INWARD, $FF db SE_RESET_SCREEN_PALETTE, $FF db SE_SHOW_MON_PIC, $FF db $FF HiJumpKickAnim: ; 7a6 (1e:660c) db $46,$87,$04 db $FF GlareAnim: ; 7a610 (1e:6610) db SE_DARK_SCREEN_PALETTE, $48 db SE_DARK_SCREEN_FLASH, $88 db SE_DARK_SCREEN_FLASH, $FF db SE_RESET_SCREEN_PALETTE, $FF db $FF DreamEaterAnim: ; 7a619 (1e:6619) db SE_FLASH_SCREEN_LONG, $89 db SE_DARK_SCREEN_PALETTE, $89 db $08,$89,$02 db SE_RESET_SCREEN_PALETTE, $FF db $FF PoisonGasAnim: ; 7a623 (1e:6623) db $46,$8A,$19 db $FF BarrageAnim: ; 7a627 (1e:6627) db $43,$8B,$41 db $05,$FF,$55 db $FF LeechLifeAnim: ; 7a62e (1e:662e) db $08,$8C,$02 db SE_DARK_SCREEN_FLASH, $FF db $06,$FF,$21 db $06,$FF,$22 db SE_DARK_SCREEN_FLASH, $FF db $FF LovelyKissAnim: ; 7a63c (1e:663c) db $06,$8D,$12 db $FF SkyAttackAnim: ; 7a640 (1e:6640) db SE_SQUISH_MON_PIC, $8E db SE_SHOOT_BALLS_UPWARD, $FF db $46,$87,$04 db SE_SHOW_MON_PIC, $FF db $FF TransformAnim: ; 7a64a (1e:664a) db $46,$8F,$21 db $44,$8F,$22 db $08,$FF,$47 db SE_TRANSFORM_MON, $FF db $FF BubbleAnim: ; 7a656 (1e:6656) db $16,$90,$35 db $FF DizzyPunchAnim: ; 7a65a (1e:665a) db $06,$91,$17 db $06,$91,$17 db $06,$91,$17 db $06,$02,$02 db $FF SporeAnim: ; 7a667 (1e:6667) db $06,$92,$36 db $FF FlashAnim: ; 7a66b (1e:666b) db SE_LIGHT_SCREEN_PALETTE, $48 db SE_DARK_SCREEN_FLASH, $88 db SE_DARK_SCREEN_FLASH, $FF db SE_RESET_SCREEN_PALETTE, $FF db $FF PsywaveAnim: ; 7a674 (1e:6674) db $06,$2F,$31 db SE_WAVY_SCREEN, $5C db $FF SplashAnim: ; 7a67a (1e:667a) db SE_BOUNCE_UP_AND_DOWN, $95 db $FF AcidArmorAnim: ; 7a67d (1e:667d) db SE_SLIDE_MON_DOWN_AND_HIDE, $96 db $FF CrabHammerAnim: ; 7a680 (1e:6680) db $46,$97,$05 db $06,$FF,$2A db $FF ExplosionAnim: ; 7a687 (1e:6687) db $43,$98,$34 db $FF FurySwipesAnim: ; 7a68b (1e:668b) db $04,$99,$0F db $FF BonemerangAnim: ; 7a68f (1e:668f) db $06,$9A,$02 db $FF RestAnim: ; 7a693 (1e:6693) db $10,$9B,$3A db $10,$9B,$3A db $FF RockSlideAnim: ; 7a69a (1e:669a) db $04,$9C,$1D db $03,$9C,$1E db $46,$9D,$04 db $FF HyperFangAnim: ; 7a6a4 (1e:66a4) db $06,$9D,$02 db $FF SharpenAnim: ; 7a6a8 (1e:66a8) db SE_LIGHT_SCREEN_PALETTE, $9E db $46,$FF,$43 db SE_DARK_SCREEN_FLASH, $FF db SE_RESET_SCREEN_PALETTE, $FF db $FF ConversionAnim: ; 7a6b2 (1e:66b2) db SE_DARK_SCREEN_FLASH, $9F db $46,$FF,$21 db $46,$FF,$22 db SE_DARK_SCREEN_FLASH, $FF db $FF TriAttackAnim: ; 7a6bd (1e:66bd) db SE_DARK_SCREEN_FLASH, $A0 db $46,$FF,$4D db SE_DARK_SCREEN_FLASH, $FF db $FF SuperFangAnim: ; 7a6c5 (1e:66c5) db SE_DARK_SCREEN_PALETTE, $48 db $46,$A1,$04 db SE_RESET_SCREEN_PALETTE, $FF db $FF SlashAnim: ; 7a6cd (1e:66cd) db $06,$A2,$0F db $FF SubstituteAnim: ; 7a6d1 (1e:66d1) db SE_SLIDE_MON_OUT, $A3 db $08,$FF,$47 db SE_SUBSTITUTE_MON, $FF db $FF BallTossAnim: ; 7a6d9 (1e:66d9) db $03,$FF,$06 db $FF GreatTossAnim: ; 7a6dd (1e:66dd) db $03,$FF,$07 db $FF UltraTossAnim: ; 7a6e1 (1e:66e1) db $02,$FF,$08 db $FF BallShakeAnim: ; 7a6e5 (1e:66e5) db $04,$FF,$09 db $FF BallPoofAnim: ; 7a6e9 (1e:66e9) db $04,$FF,$0A db $FF ShowPicAnim: ; 7a6ed (1e:66ed) db SE_SHOW_ENEMY_MON_PIC, $FF db $FF HidePicAnim: ; 7a6f0 (1e:66f0) db SE_HIDE_ENEMY_MON_PIC, $FF db $FF EnemyFlashAnim: ; 7a6f3 (1e:66f3) db SE_SHOW_MON_PIC, $FF db $FF PlayerFlashAnim: ; 7a6f6 (1e:66f6) db SE_FLASH_MON_PIC, $FF db $FF EnemyHUDShakeAnim: ; 7a6f9 (1e:66f9) db SE_SHAKE_ENEMY_HUD, $FF db $FF TradeBallDropAnim: ; 7a6fc (1e:66fc) db $86,$FF,$48 db $FF TradeBallAppear1Anim: ; 7a700 (1e:6700) db $84,$FF,$49 db $FF TradeBallAppear2Anim: ; 7a704 (1e:6704) db $86,$FF,$4A db $FF TradeBallPoofAnim: ; 7a708 (1e:6708) db $86,$FF,$4B db $FF XStatItemAnim: ; 7a7c0 (1e:670c) db SE_LIGHT_SCREEN_PALETTE, $FF db SE_SPIRAL_BALLS_INWARD, $FF db SE_RESET_SCREEN_PALETTE, $FF db $FF ShrinkingSquareAnim: ; 7a713 (1e:6713) db SE_LIGHT_SCREEN_PALETTE, $FF db $46,$FF,$43 db SE_RESET_SCREEN_PALETTE, $FF db $FF XStatItemBlackAnim: ; 7a71b (1e:671b) db SE_DARKEN_MON_PALETTE, $FF db SE_SPIRAL_BALLS_INWARD, $FF db SE_RESET_SCREEN_PALETTE, $FF db $FF ShrinkingSquareBlackAnim: ; 7a722 (1e:6722) db SE_DARKEN_MON_PALETTE, $FF db $46,$FF,$43 db SE_RESET_SCREEN_PALETTE, $FF db $FF UnusedAnim: ; 7a72a (1e:672a) db SE_LIGHT_SCREEN_PALETTE, $FF db SE_SHOOT_MANY_BALLS_UPWARD, $FF db SE_RESET_SCREEN_PALETTE, $FF db $FF ParalyzeAnim: ; 7a731 (1e:6731) db $04,$13,$24 db $04,$13,$24 db $FF PoisonAnim: ; 7a738 (1e:6738) db $08,$13,$27 db $08,$13,$27 db $FF SleepPlayerAnim: ; 7a73f (1e:673f) db $10,$9B,$3A db $10,$9B,$3A db $FF SleepEnemyAnim: ; 7a746 (1e:6746) db $10,$9B,$3B db $10,$9B,$3B db $FF ConfusedPlayerAnim: ; 7a74d (1e:674d) db $08,$84,$25 db $08,$84,$25 db $FF ConfusedEnemyAnim: ; 7a754 (1e:6754) db $08,$84,$26 db $08,$84,$26 db $FF BallBlockAnim: ; 7a75b (1e:675b) db $03,$FF,$0B db $FF FaintAnim: ; 7a75f (1e:675f) db SE_SLIDE_MON_DOWN, $5A db $FF ShakeScreenAnim: ; 7a762 (1e:6762) db SE_SHAKE_SCREEN, $FF db $FF ThrowRockAnim: ; 7a765 (1e:6765) db $03,$8B,$53 db $FF ThrowBaitAnim: ; 7a769 (1e:6769) db $03,$8B,$54 db $FF SubanimationPointers: ; 7a76d (1e:676d) dw Subanimation00 dw Subanimation01 dw Subanimation02 dw Subanimation03 dw Subanimation04 dw Subanimation05 dw Subanimation06 dw Subanimation07 dw Subanimation08 dw Subanimation09 dw Subanimation0a dw Subanimation0b dw Subanimation0c dw Subanimation0d dw Subanimation0e dw Subanimation0f dw Subanimation10 dw Subanimation11 dw Subanimation12 dw Subanimation13 dw Subanimation14 dw Subanimation15 dw Subanimation16 dw Subanimation17 dw Subanimation18 dw Subanimation19 dw Subanimation1a dw Subanimation1b dw Subanimation1c dw Subanimation1d dw Subanimation1e dw Subanimation1f dw Subanimation20 dw Subanimation21 dw Subanimation22 dw Subanimation23 dw Subanimation24 dw Subanimation25 dw Subanimation26 dw Subanimation27 dw Subanimation28 dw Subanimation29 dw Subanimation2a dw Subanimation2b dw Subanimation2c dw Subanimation2d dw Subanimation2e dw Subanimation2f dw Subanimation30 dw Subanimation31 dw Subanimation32 dw Subanimation33 dw Subanimation34 dw Subanimation35 dw Subanimation36 dw Subanimation37 dw Subanimation38 dw Subanimation39 dw Subanimation3a dw Subanimation3b dw Subanimation3c dw Subanimation3d dw Subanimation3e dw Subanimation3f dw Subanimation40 dw Subanimation41 dw Subanimation42 dw Subanimation43 dw Subanimation44 dw Subanimation45 dw Subanimation46 dw Subanimation47 dw Subanimation48 dw Subanimation49 dw Subanimation4a dw Subanimation4b dw Subanimation4c dw Subanimation4d dw Subanimation4e dw Subanimation4f dw Subanimation50 dw Subanimation51 dw Subanimation52 dw Subanimation53 dw Subanimation54 dw Subanimation55 Subanimation04: ; 7a819 (1e:6819) db $43 db $02,$1a,$00 db $02,$10,$00 db $02,$03,$00 Subanimation05: ; 7a823 (1e:6823) db $41 db $02,$10,$00 Subanimation08: ; 7a827 (1e:6827) db $0b db $03,$30,$00 db $03,$44,$00 db $03,$94,$00 db $03,$60,$00 db $03,$76,$00 db $03,$9f,$00 db $03,$8d,$00 db $03,$a0,$00 db $03,$1a,$00 db $03,$a1,$00 db $03,$34,$00 Subanimation07: ; 7a849 (1e:6849) db $0b db $03,$30,$00 db $03,$a2,$00 db $03,$31,$00 db $03,$a3,$00 db $03,$32,$00 db $03,$a4,$00 db $03,$92,$00 db $03,$a5,$00 db $03,$15,$00 db $03,$a6,$00 db $03,$34,$00 Subanimation06: ; 7a86b (1e:686b) db $0b db $03,$30,$00 db $03,$a2,$00 db $03,$93,$00 db $03,$61,$00 db $03,$73,$00 db $03,$a7,$00 db $03,$33,$00 db $03,$a8,$00 db $03,$0e,$00 db $03,$a9,$00 db $03,$34,$00 Subanimation09: ; 7a88d (1e:688d) db $04 db $03,$21,$04 db $04,$21,$04 db $03,$21,$04 db $05,$21,$04 Subanimation0a: ; 7a89a (1e:689a) db $46 db $06,$1b,$00 db $07,$1b,$00 db $08,$36,$00 db $09,$36,$00 db $0a,$15,$00 db $0a,$15,$00 Subanimation0b: ; 7a8ad (1e:68ad) db $04 db $01,$2d,$00 db $03,$2f,$00 db $03,$35,$00 db $03,$4d,$00 Subanimation55: ; 7a8ba (1e:68ba) db $41 db $01,$9d,$00 Subanimation11: ; 7a8be (1e:68be) db $4c db $0b,$26,$00 db $0c,$26,$00 db $0b,$26,$00 db $0c,$26,$00 db $0b,$28,$00 db $0c,$28,$00 db $0b,$28,$00 db $0c,$28,$00 db $0b,$27,$00 db $0c,$27,$00 db $0b,$27,$00 db $0c,$27,$00 Subanimation2b: ; 7a8e3 (1e:68e3) db $4b db $0d,$03,$03 db $0e,$03,$03 db $0f,$03,$00 db $0d,$11,$00 db $0d,$11,$00 db $0d,$37,$00 db $0d,$37,$00 db $10,$21,$00 db $10,$21,$00 db $11,$1b,$00 db $11,$1b,$00 Subanimation2c: ; 7a905 (1e:6905) db $4c db $12,$01,$00 db $12,$0f,$00 db $12,$1b,$00 db $12,$25,$00 db $13,$38,$00 db $13,$38,$02 db $14,$38,$00 db $14,$38,$02 db $15,$38,$00 db $15,$38,$00 db $16,$38,$00 db $16,$38,$00 Subanimation12: ; 7a92a (1e:692a) db $69 db $17,$30,$00 db $17,$39,$00 db $17,$3a,$00 db $17,$3b,$00 db $17,$3c,$00 db $17,$3d,$00 db $17,$3e,$00 db $17,$3f,$00 db $17,$1f,$00 Subanimation00: ; 7a946 (1e:6946) db $41 db $01,$17,$00 Subanimation01: ; 7a94a (1e:694a) db $42 db $01,$0f,$00 db $01,$1d,$00 Subanimation02: ; 7a951 (1e:6951) db $43 db $01,$12,$00 db $01,$15,$00 db $01,$1c,$00 Subanimation03: ; 7a95b (1e:695b) db $44 db $01,$0b,$00 db $01,$11,$00 db $01,$18,$00 db $01,$1d,$00 Subanimation0c: ; 7a968 (1e:6968) db $43 db $0c,$20,$00 db $0c,$21,$00 db $0c,$23,$00 Subanimation0d: ; 7a972 (1e:6972) db $46 db $0c,$20,$02 db $0c,$15,$00 db $0c,$21,$02 db $0c,$17,$00 db $0c,$23,$02 db $0c,$19,$00 Subanimation0e: ; 7a985 (1e:6985) db $49 db $0c,$20,$02 db $0c,$15,$02 db $0c,$07,$00 db $0c,$21,$02 db $0c,$17,$02 db $0c,$09,$00 db $0c,$23,$02 db $0c,$19,$02 db $0c,$0c,$00 Subanimation1f: ; 7a9a1 (1e:69a1) db $85 db $0c,$30,$03 db $0c,$40,$03 db $0c,$41,$03 db $0c,$42,$03 db $0c,$21,$00 Subanimation2e: ; 7a9b1 (1e:69b1) db $2e db $18,$43,$02 db $75,$52,$04 db $19,$43,$02 db $75,$63,$04 db $1a,$43,$02 db $75,$4d,$04 db $1b,$43,$02 db $75,$97,$04 db $1c,$43,$02 db $75,$98,$04 db $1d,$43,$02 db $75,$58,$04 db $1e,$43,$02 db $75,$1b,$00 Subanimation2f: ; 7a9dc (1e:69dc) db $44 db $1f,$24,$00 db $20,$20,$00 db $21,$1a,$00 db $22,$15,$00 Subanimation30: ; 7a9e9 (1e:69e9) db $52 db $23,$00,$02 db $23,$02,$02 db $23,$04,$00 db $23,$07,$02 db $23,$02,$02 db $23,$04,$00 db $23,$0e,$02 db $23,$02,$02 db $23,$0c,$00 db $25,$07,$00 db $25,$0e,$00 db $25,$15,$00 db $24,$24,$02 db $23,$1c,$02 db $23,$23,$00 db $23,$21,$02 db $24,$28,$00 db $24,$28,$00 Subanimation0f: ; 7aa20 (1e:6a20) db $4c db $26,$0e,$02 db $26,$16,$02 db $26,$1c,$00 db $27,$0e,$02 db $27,$16,$02 db $27,$1c,$00 db $28,$0e,$02 db $28,$16,$02 db $28,$1c,$00 db $29,$0e,$02 db $29,$16,$02 db $29,$1c,$00 Subanimation16: ; 7aa45 (1e:6a45) db $4c db $2a,$05,$00 db $2b,$05,$02 db $2b,$0c,$02 db $2a,$11,$04 db $2b,$11,$02 db $2b,$17,$02 db $2a,$1b,$04 db $2b,$1b,$02 db $2b,$20,$02 db $2a,$2f,$04 db $2c,$00,$02 db $2c,$00,$00 Subanimation10: ; 7aa6a (1e:6a6a) db $88 db $2d,$44,$00 db $2e,$45,$00 db $2d,$46,$00 db $2e,$47,$00 db $2d,$48,$00 db $2e,$49,$00 db $2d,$2f,$00 db $2e,$1a,$00 Subanimation31: ; 7aa83 (1e:6a83) db $2a db $2f,$46,$00 db $2f,$4a,$00 db $2f,$4b,$00 db $2f,$4c,$00 db $2f,$4d,$00 db $2f,$4e,$00 db $2f,$4f,$00 db $2f,$50,$00 db $2f,$2e,$00 db $2f,$51,$00 Subanimation13: ; 7aaa2 (1e:6aa2) db $86 db $30,$31,$00 db $30,$32,$00 db $30,$92,$00 db $30,$0e,$00 db $30,$0f,$00 db $30,$10,$00 Subanimation14: ; 7aab5 (1e:6ab5) db $49 db $30,$10,$00 db $30,$10,$03 db $31,$1c,$04 db $31,$21,$04 db $31,$26,$00 db $30,$10,$02 db $31,$1d,$04 db $31,$22,$04 db $31,$27,$00 Subanimation41: ; 7aad1 (1e:6ad1) db $85 db $03,$31,$00 db $03,$32,$00 db $03,$92,$00 db $03,$0e,$00 db $03,$10,$00 Subanimation42: ; 7aae1 (1e:6ae1) db $43 db $48,$08,$00 db $49,$08,$00 db $5a,$08,$00 Subanimation15: ; 7aaeb (1e:6aeb) db $22 db $35,$52,$00 db $35,$53,$00 Subanimation17: ; 7aaf2 (1e:6af2) db $44 db $36,$54,$00 db $36,$55,$00 db $37,$56,$00 db $37,$57,$00 Subanimation18: ; 7aaff (1e:6aff) db $a4 db $36,$54,$00 db $36,$55,$00 db $37,$56,$00 db $37,$57,$00 Subanimation40: ; 7ab0c (1e:6b0c) db $46 db $17,$54,$00 db $17,$55,$00 db $17,$0e,$00 db $17,$56,$00 db $17,$57,$00 db $17,$13,$00 Subanimation19: ; 7ab1f (1e:6b1f) db $8c db $38,$31,$00 db $39,$31,$00 db $38,$32,$00 db $39,$32,$00 db $38,$92,$00 db $39,$92,$00 db $38,$0e,$00 db $39,$0e,$00 db $38,$0f,$00 db $39,$0f,$00 db $38,$10,$00 db $39,$10,$00 Subanimation1a: ; 7ab44 (1e:6b44) db $50 db $3a,$08,$00 db $3b,$08,$00 db $3c,$08,$00 db $3d,$08,$00 db $3e,$08,$00 db $3f,$08,$00 db $3e,$08,$00 db $3f,$08,$00 db $3a,$0b,$00 db $3b,$0b,$00 db $3c,$0b,$00 db $3d,$0b,$00 db $3e,$0b,$00 db $3f,$0b,$00 db $3e,$0b,$00 db $3f,$0b,$00 Subanimation1b: ; 7ab75 (1e:6b75) db $84 db $40,$31,$00 db $40,$32,$00 db $40,$92,$00 db $40,$15,$00 Subanimation1c: ; 7ab82 (1e:6b82) db $43 db $41,$58,$00 db $41,$59,$00 db $41,$21,$00 Subanimation1d: ; 7ab8c (1e:6b8c) db $af db $24,$9a,$00 db $23,$1b,$02 db $24,$22,$00 db $23,$16,$02 db $23,$1d,$02 db $24,$98,$00 db $25,$2c,$04 db $25,$2a,$04 db $25,$99,$04 db $25,$62,$04 db $25,$99,$04 db $25,$62,$04 db $25,$99,$04 db $25,$62,$04 db $25,$99,$03 Subanimation1e: ; 7abba (1e:6bba) db $01 db $25,$75,$00 Subanimation20: ; 7abbe (1e:6bbe) db $42 db $42,$07,$00 db $43,$07,$00 Subanimation21: ; 7abc5 (1e:6bc5) db $43 db $44,$00,$00 db $45,$08,$00 db $46,$10,$02 Subanimation22: ; 7abcf (1e:6bcf) db $8b db $47,$10,$00 db $47,$56,$00 db $47,$07,$00 db $47,$aa,$00 db $47,$ab,$00 db $47,$ac,$00 db $47,$ad,$00 db $47,$ae,$00 db $47,$af,$00 db $47,$89,$00 db $47,$b0,$00 Subanimation2d: ; 7abf1 (1e:6bf1) db $66 db $44,$64,$00 db $45,$65,$00 db $46,$66,$00 db $47,$66,$00 db $47,$66,$00 db $47,$66,$00 Subanimation39: ; 7ac04 (1e:6c04) db $61 db $47,$67,$00 Subanimation4e: ; 7ac08 (1e:6c08) db $41 db $71,$0f,$03 Subanimation4f: ; 7ac0c (1e:6c0c) db $47 db $71,$0f,$00 db $71,$08,$00 db $71,$01,$00 db $71,$95,$00 db $72,$95,$00 db $73,$95,$00 db $74,$95,$00 Subanimation50: ; 7ac22 (1e:6c22) db $48 db $74,$95,$00 db $73,$95,$00 db $72,$95,$00 db $71,$95,$00 db $71,$01,$00 db $71,$08,$00 db $71,$0f,$00 db $71,$16,$00 Subanimation29: ; 7ac3b (1e:6c3b) db $5d db $48,$0f,$00 db $4a,$68,$03 db $4b,$2a,$03 db $49,$0f,$00 db $4a,$68,$03 db $4b,$2a,$00 db $4c,$6a,$03 db $4d,$69,$03 db $49,$6b,$00 db $4c,$6a,$03 db $4d,$69,$00 db $4a,$68,$03 db $4b,$2a,$03 db $49,$6c,$00 db $4a,$68,$03 db $4b,$2a,$00 db $4c,$6a,$03 db $4d,$69,$03 db $49,$6d,$00 db $4c,$6a,$03 db $4d,$2a,$00 db $4a,$68,$03 db $4b,$2a,$03 db $49,$0f,$00 db $4a,$68,$03 db $4b,$2a,$00 db $4c,$6a,$03 db $4d,$2a,$03 db $49,$6b,$00 Subanimation2a: ; 7ac93 (1e:6c93) db $44 db $4e,$2b,$00 db $4f,$2b,$00 db $50,$2b,$00 db $50,$2b,$00 Subanimation23: ; 7aca0 (1e:6ca0) db $42 db $51,$2d,$00 db $51,$6e,$00 Subanimation24: ; 7aca7 (1e:6ca7) db $a2 db $51,$2d,$00 db $51,$6e,$00 Subanimation25: ; 7acae (1e:6cae) db $62 db $52,$71,$00 db $52,$72,$00 Subanimation26: ; 7acb5 (1e:6cb5) db $02 db $52,$01,$00 db $52,$2c,$00 Subanimation3a: ; 7acbc (1e:6cbc) db $63 db $53,$71,$00 db $53,$7f,$00 db $53,$81,$00 Subanimation3b: ; 7acc6 (1e:6cc6) db $03 db $53,$01,$00 db $53,$15,$00 db $53,$2c,$00 Subanimation27: ; 7acd0 (1e:6cd0) db $a2 db $54,$01,$00 db $54,$2c,$00 Subanimation28: ; 7acd7 (1e:6cd7) db $23 db $55,$73,$03 db $56,$73,$03 db $57,$73,$00 Subanimation32: ; 7ace1 (1e:6ce1) db $63 db $47,$74,$00 db $47,$43,$00 db $47,$75,$00 Subanimation33: ; 7aceb (1e:6ceb) db $26 db $58,$76,$00 db $34,$76,$00 db $58,$76,$00 db $34,$76,$00 db $58,$76,$00 db $34,$76,$00 Subanimation3c: ; 7acfe (1e:6cfe) db $67 db $59,$79,$03 db $59,$7b,$03 db $59,$77,$03 db $59,$7a,$03 db $59,$78,$03 db $59,$7c,$03 db $59,$76,$00 Subanimation3d: ; 7ad14 (1e:6d14) db $08 db $3a,$4d,$00 db $3b,$4d,$00 db $3c,$4d,$00 db $3d,$4d,$00 db $3e,$4d,$00 db $3f,$4d,$00 db $3e,$4d,$00 db $3f,$4d,$00 Subanimation34: ; 7ad2d (1e:6d2d) db $35 db $48,$7d,$00 db $49,$7d,$00 db $5a,$7d,$00 db $48,$30,$00 db $49,$30,$00 db $5a,$30,$00 db $48,$7e,$00 db $49,$7e,$00 db $5a,$7e,$00 db $48,$7f,$00 db $49,$7f,$00 db $5a,$7f,$00 db $48,$80,$00 db $49,$80,$00 db $5a,$80,$00 db $48,$81,$00 db $49,$81,$00 db $5a,$81,$00 db $48,$82,$00 db $49,$82,$00 db $5a,$82,$00 Subanimation35: ; 7ad6d (1e:6d6d) db $24 db $5b,$83,$03 db $5c,$84,$03 db $5d,$85,$03 db $5e,$09,$00 Subanimation36: ; 7ad7a (1e:6d7a) db $48 db $5f,$2a,$00 db $5f,$00,$00 db $60,$2a,$00 db $60,$00,$00 db $61,$2a,$00 db $61,$00,$00 db $62,$2a,$00 db $62,$00,$00 Subanimation37: ; 7ad93 (1e:6d93) db $2a db $63,$89,$00 db $64,$75,$00 db $63,$76,$00 db $65,$0d,$00 db $65,$86,$00 db $65,$12,$00 db $65,$87,$00 db $65,$17,$00 db $65,$88,$00 db $65,$1a,$00 Subanimation38: ; 7adb2 (1e:6db2) db $50 db $66,$8a,$00 db $66,$33,$00 db $66,$2e,$00 db $67,$24,$03 db $66,$01,$04 db $66,$10,$04 db $66,$1d,$04 db $67,$28,$03 db $66,$2a,$04 db $66,$0e,$04 db $66,$1b,$04 db $67,$26,$03 db $66,$03,$04 db $66,$12,$04 db $66,$1e,$04 db $67,$29,$00 Subanimation3e: ; 7ade3 (1e:6de3) db $92 db $02,$31,$00 db $34,$31,$00 db $02,$31,$00 db $02,$32,$00 db $34,$32,$00 db $02,$32,$00 db $02,$92,$00 db $34,$92,$00 db $02,$92,$00 db $02,$0e,$00 db $34,$0e,$00 db $02,$0e,$00 db $02,$0f,$00 db $34,$0f,$00 db $02,$0f,$00 db $02,$10,$00 db $34,$10,$00 db $02,$10,$00 Subanimation3f: ; 7ae1a (1e:6e1a) db $72 db $68,$4b,$00 db $68,$8c,$00 db $68,$20,$00 db $68,$1c,$00 db $68,$19,$00 db $68,$14,$00 db $68,$76,$00 db $68,$8d,$00 db $68,$15,$00 db $68,$10,$00 db $68,$0c,$00 db $68,$06,$00 db $68,$8e,$00 db $68,$8f,$00 db $68,$90,$00 db $68,$26,$00 db $68,$23,$00 db $68,$1f,$00 Subanimation44: ; 7ae51 (1e:6e51) db $2c db $69,$4b,$00 db $69,$8c,$00 db $69,$20,$00 db $69,$1c,$00 db $69,$19,$00 db $69,$14,$00 db $69,$76,$00 db $69,$8d,$00 db $69,$15,$00 db $69,$10,$00 db $69,$0c,$00 db $69,$06,$00 Subanimation43: ; 7ae76 (1e:6e76) db $a3 db $6a,$07,$00 db $6b,$0f,$00 db $6c,$17,$00 Subanimation45: ; 7ae80 (1e:6e80) db $24 db $6d,$8b,$00 db $6d,$84,$00 db $6d,$63,$00 db $6d,$8c,$00 Subanimation46: ; 7ae8d (1e:6e8d) db $26 db $6d,$8b,$00 db $6d,$84,$00 db $6d,$63,$00 db $6d,$8c,$00 db $6d,$0a,$00 db $6d,$89,$00 Subanimation47: ; 7aea0 (1e:6ea0) db $23 db $06,$82,$00 db $07,$82,$00 db $08,$96,$00 Subanimation48: ; 7aeaa (1e:6eaa) db $06 db $03,$41,$04 db $03,$48,$04 db $04,$48,$04 db $03,$48,$04 db $05,$48,$04 db $03,$48,$03 Subanimation49: ; 7aebd (1e:6ebd) db $04 db $04,$48,$04 db $03,$48,$04 db $05,$48,$04 db $03,$48,$03 Subanimation4a: ; 7aeca (1e:6eca) db $01 db $04,$84,$03 Subanimation4b: ; 7aece (1e:6ece) db $03 db $06,$72,$00 db $07,$72,$00 db $08,$72,$00 Subanimation4c: ; 7aed8 (1e:6ed8) db $68 db $6f,$30,$00 db $6e,$30,$00 db $70,$30,$00 db $6e,$30,$00 db $6f,$30,$00 db $6e,$30,$00 db $70,$30,$00 db $6e,$30,$00 Subanimation4d: ; 7aef1 (1e:6ef1) db $26 db $32,$4b,$00 db $33,$4f,$00 db $32,$20,$00 db $33,$16,$00 db $32,$19,$00 db $33,$0d,$00 Subanimation51: ; 7af04 (1e:6f04) db $a6 db $76,$1b,$00 db $34,$1b,$00 db $76,$1b,$00 db $34,$1b,$00 db $76,$1b,$00 db $34,$1b,$00 Subanimation52: ; 7af17 (1e:6f17) db $47 db $77,$25,$00 db $77,$9b,$00 db $77,$1a,$00 db $77,$9c,$00 db $77,$2f,$00 db $77,$50,$00 db $77,$8c,$00 Subanimation53: ; 7af2d (1e:6f2d) db $0c db $78,$30,$00 db $78,$a2,$00 db $78,$93,$00 db $78,$61,$00 db $78,$73,$00 db $78,$a7,$00 db $78,$33,$00 db $78,$a8,$00 db $78,$0e,$00 db $78,$a9,$00 db $78,$34,$00 db $01,$9e,$00 Subanimation54: ; 7af52 (1e:6f52) db $0b db $79,$30,$00 db $79,$a2,$00 db $79,$93,$00 db $79,$61,$00 db $79,$73,$00 db $79,$a7,$00 db $79,$33,$00 db $79,$a8,$00 db $79,$0e,$00 db $79,$a9,$00 db $79,$34,$00 FrameBlockPointers: ; 7af74 (1e:6f74) dw FrameBlock00 dw FrameBlock01 dw FrameBlock02 dw FrameBlock03 dw FrameBlock04 dw FrameBlock05 dw FrameBlock06 dw FrameBlock07 dw FrameBlock08 dw FrameBlock09 dw FrameBlock0a dw FrameBlock0b dw FrameBlock0c dw FrameBlock0d dw FrameBlock0e dw FrameBlock0f dw FrameBlock10 dw FrameBlock11 dw FrameBlock12 dw FrameBlock13 dw FrameBlock14 dw FrameBlock15 dw FrameBlock16 dw FrameBlock17 dw FrameBlock18 dw FrameBlock19 dw FrameBlock1a dw FrameBlock1b dw FrameBlock1c dw FrameBlock1d dw FrameBlock1e dw FrameBlock1f dw FrameBlock20 dw FrameBlock21 dw FrameBlock22 dw FrameBlock23 dw FrameBlock24 dw FrameBlock25 dw FrameBlock26 dw FrameBlock27 dw FrameBlock28 dw FrameBlock29 dw FrameBlock2a dw FrameBlock2b dw FrameBlock2c dw FrameBlock2d dw FrameBlock2e dw FrameBlock2f dw FrameBlock30 dw FrameBlock31 dw FrameBlock32 dw FrameBlock33 dw FrameBlock34 dw FrameBlock35 dw FrameBlock36 dw FrameBlock37 dw FrameBlock38 dw FrameBlock39 dw FrameBlock3a dw FrameBlock3b dw FrameBlock3c dw FrameBlock3d dw FrameBlock3e dw FrameBlock3f dw FrameBlock40 dw FrameBlock41 dw FrameBlock42 dw FrameBlock43 dw FrameBlock44 dw FrameBlock45 dw FrameBlock46 dw FrameBlock47 dw SmallBlackCircleFrameBlock dw LargeBlockCircleFrameBlock dw FrameBlock4a dw FrameBlock4b dw FrameBlock4c dw FrameBlock4d dw FrameBlock4e dw FrameBlock4f dw FrameBlock50 dw FrameBlock51 dw FrameBlock52 dw FrameBlock53 dw FrameBlock54 dw FrameBlock55 dw FrameBlock56 dw FrameBlock57 dw FrameBlock58 dw FrameBlock59 dw FrameBlock5a dw FrameBlock5b dw FrameBlock5c dw FrameBlock5d dw FrameBlock5e dw FrameBlock5f dw FrameBlock60 dw FrameBlock61 dw FrameBlock62 dw FrameBlock63 dw FrameBlock64 dw FrameBlock65 dw FrameBlock66 dw FrameBlock67 dw FrameBlock68 dw FrameBlock69 dw FrameBlock6a dw FrameBlock6b dw FrameBlock6c dw FrameBlock6d dw FrameBlock6e dw FrameBlock6f dw FrameBlock70 dw FrameBlock71 dw FrameBlock72 dw FrameBlock73 dw FrameBlock74 dw FrameBlock75 dw FrameBlock76 dw FrameBlock77 dw FrameBlock78 dw FrameBlock79 ; FrameBlock format is as follows: ; first byte = number of tiles in FrameBlock ; ; Next, each group of 4 bytes describes a tile in the FrameBlock ; first byte = y offset ; second byte = x offset ; third byte = tile id (it's actually tile id - $31) ; fourth byte = tile properties (xflip/yflip/etc.) FrameBlock01: ; 7b068 (1e:7068) db $09 db $00,$00,$2c,$00 db $00,$08,$2d,$00 db $00,$10,$2c,$20 db $08,$00,$3c,$00 db $08,$08,$3d,$00 db $08,$10,$3c,$20 db $10,$00,$2c,$40 db $10,$08,$2d,$40 db $10,$10,$2c,$60 FrameBlock02: ; 7b08d (1e:708d) db $10 db $00,$00,$20,$00 db $00,$08,$21,$00 db $00,$10,$21,$20 db $00,$18,$20,$20 db $08,$00,$30,$00 db $08,$08,$31,$00 db $08,$10,$31,$20 db $08,$18,$30,$20 db $10,$00,$30,$40 db $10,$08,$31,$40 db $10,$10,$31,$60 db $10,$18,$30,$60 db $18,$00,$20,$40 db $18,$08,$21,$40 db $18,$10,$21,$60 db $18,$18,$20,$60 FrameBlock03: ; 7b0ce (1e:70ce) db $04 db $00,$00,$02,$00 db $00,$08,$02,$20 db $08,$00,$12,$00 db $08,$08,$12,$20 FrameBlock04: ; 7b0df (1e:70df) db $04 db $00,$00,$06,$00 db $00,$08,$07,$00 db $08,$00,$16,$00 db $08,$08,$17,$00 FrameBlock05: ; 7b0f0 (1e:70f0) db $04 db $00,$00,$07,$20 db $00,$08,$06,$20 db $08,$00,$17,$20 db $08,$08,$16,$20 FrameBlock06: ; 7b101 (1e:7101) db $0c db $00,$08,$23,$00 db $08,$00,$32,$00 db $08,$08,$33,$00 db $00,$10,$23,$20 db $08,$10,$33,$20 db $08,$18,$32,$20 db $10,$00,$32,$40 db $10,$08,$33,$40 db $18,$08,$23,$40 db $10,$10,$33,$60 db $10,$18,$32,$60 db $18,$10,$23,$60 FrameBlock07: ; 7b132 (1e:7132) db $10 db $00,$00,$20,$00 db $00,$08,$21,$00 db $08,$00,$30,$00 db $08,$08,$31,$00 db $00,$10,$21,$20 db $00,$18,$20,$20 db $08,$10,$31,$20 db $08,$18,$30,$20 db $10,$00,$30,$40 db $10,$08,$31,$40 db $18,$00,$20,$40 db $18,$08,$21,$40 db $10,$10,$31,$60 db $10,$18,$30,$60 db $18,$10,$21,$60 db $18,$18,$20,$60 FrameBlock08: ; 7b173 (1e:7173) db $10 db $00,$00,$20,$00 db $00,$08,$21,$00 db $08,$00,$30,$00 db $08,$08,$31,$00 db $00,$18,$21,$20 db $00,$20,$20,$20 db $08,$18,$31,$20 db $08,$20,$30,$20 db $18,$00,$30,$40 db $18,$08,$31,$40 db $20,$00,$20,$40 db $20,$08,$21,$40 db $18,$18,$31,$60 db $18,$20,$30,$60 db $20,$18,$21,$60 db $20,$20,$20,$60 FrameBlock09: ; 7b1b4 (1e:71b4) db $0c db $00,$00,$24,$00 db $00,$08,$25,$00 db $08,$00,$34,$00 db $00,$18,$25,$20 db $00,$20,$24,$20 db $08,$20,$34,$20 db $18,$00,$34,$40 db $20,$00,$24,$40 db $20,$08,$25,$40 db $18,$20,$34,$60 db $20,$18,$25,$60 db $20,$20,$24,$60 FrameBlock0a: ; 7b1e5 (1e:71e5) db $0c db $00,$00,$24,$00 db $00,$08,$25,$00 db $08,$00,$34,$00 db $00,$20,$25,$20 db $00,$28,$24,$20 db $08,$28,$34,$20 db $20,$00,$34,$40 db $28,$00,$24,$40 db $28,$08,$25,$40 db $20,$28,$34,$60 db $28,$20,$25,$60 db $28,$28,$24,$60 FrameBlock0b: ; 7b216 (1e:7216) db $04 db $00,$00,$05,$00 db $00,$08,$05,$20 db $08,$00,$15,$00 db $08,$08,$15,$20 FrameBlock0c: ; 7b227 (1e:7227) db $04 db $00,$00,$04,$00 db $00,$08,$04,$20 db $08,$00,$14,$00 db $08,$08,$14,$20 FrameBlock0d: ; 7b238 (1e:7238) db $08 db $00,$00,$0c,$00 db $00,$08,$0d,$00 db $08,$00,$1c,$00 db $08,$08,$1d,$00 db $10,$00,$1d,$60 db $10,$08,$1c,$60 db $18,$00,$0d,$60 db $18,$08,$0c,$60 FrameBlock0e: ; 7b259 (1e:7259) db $04 db $20,$00,$0c,$00 db $20,$08,$0d,$00 db $28,$00,$1c,$00 db $28,$08,$1d,$00 FrameBlock0f: ; 7b26a (1e:726a) db $04 db $30,$00,$1d,$60 db $30,$08,$1c,$60 db $38,$00,$0d,$60 db $38,$08,$0c,$60 FrameBlock10: ; 7b27b (1e:727b) db $08 db $00,$00,$0e,$00 db $00,$08,$0f,$00 db $08,$00,$1e,$00 db $08,$08,$1f,$00 db $00,$10,$0f,$20 db $00,$18,$0e,$20 db $08,$10,$1f,$20 db $08,$18,$1e,$20 FrameBlock11: ; 7b29c (1e:729c) db $08 db $00,$00,$0e,$00 db $00,$08,$0f,$00 db $08,$00,$1e,$00 db $08,$08,$1f,$00 db $00,$20,$0f,$20 db $00,$28,$0e,$20 db $08,$20,$1f,$20 db $08,$28,$1e,$20 FrameBlock12: ; 7b2bd (1e:72bd) db $03 db $00,$00,$37,$00 db $08,$10,$37,$00 db $00,$20,$37,$00 FrameBlock13: ; 7b2ca (1e:72ca) db $04 db $00,$00,$36,$00 db $00,$08,$36,$20 db $08,$00,$36,$40 db $08,$08,$36,$60 FrameBlock14: ; 7b2db (1e:72db) db $08 db $00,$10,$28,$00 db $00,$18,$28,$20 db $08,$10,$38,$00 db $08,$18,$38,$20 db $00,$20,$36,$00 db $00,$28,$36,$20 db $08,$20,$36,$40 db $08,$28,$36,$60 FrameBlock15: ; 7b2fc (1e:72fc) db $0c db $00,$00,$28,$00 db $00,$08,$28,$20 db $08,$00,$38,$00 db $08,$08,$38,$20 db $00,$10,$29,$00 db $00,$18,$29,$20 db $08,$10,$39,$00 db $08,$18,$39,$20 db $00,$20,$28,$00 db $00,$28,$28,$20 db $08,$20,$38,$00 db $08,$28,$38,$20 FrameBlock16: ; 7b32d (1e:732d) db $08 db $00,$00,$29,$00 db $00,$08,$29,$20 db $08,$00,$39,$00 db $08,$08,$39,$20 db $00,$20,$29,$00 db $00,$28,$29,$20 db $08,$20,$39,$00 db $08,$28,$39,$20 FrameBlock17: ; 7b34e (1e:734e) db $04 db $00,$00,$08,$00 db $00,$08,$09,$00 db $08,$00,$18,$00 db $08,$08,$19,$00 FrameBlock18: ; 7b35f (1e:735f) db $01 db $18,$00,$45,$60 FrameBlock19: ; 7b364 (1e:7364) db $02 db $18,$08,$45,$00 db $10,$08,$46,$60 FrameBlock1a: ; 7b36d (1e:736d) db $02 db $10,$10,$45,$60 db $18,$10,$46,$00 FrameBlock1b: ; 7b376 (1e:7376) db $02 db $10,$18,$45,$00 db $08,$18,$46,$60 FrameBlock1c: ; 7b37f (1e:737f) db $02 db $08,$20,$45,$60 db $10,$20,$46,$00 FrameBlock1d: ; 7b388 (1e:7388) db $02 db $08,$28,$45,$00 db $00,$28,$46,$60 FrameBlock1e: ; 7b391 (1e:7391) db $02 db $00,$30,$45,$60 db $08,$30,$46,$00 FrameBlock75: ; 7b39a (1e:739a) db $04 db $00,$00,$43,$00 db $00,$08,$43,$20 db $08,$00,$22,$00 db $08,$08,$43,$60 FrameBlock1f: ; 7b3ab (1e:73ab) db $02 db $00,$00,$03,$00 db $00,$30,$03,$20 FrameBlock20: ; 7b3b4 (1e:73b4) db $06 db $00,$00,$03,$00 db $00,$30,$03,$20 db $08,$08,$03,$00 db $08,$28,$03,$20 db $08,$00,$13,$00 db $08,$30,$13,$20 FrameBlock21: ; 7b3cd (1e:73cd) db $0c db $00,$00,$03,$00 db $00,$30,$03,$20 db $08,$08,$03,$00 db $08,$28,$03,$20 db $08,$00,$13,$00 db $08,$30,$13,$20 db $10,$10,$03,$00 db $10,$20,$03,$20 db $10,$08,$13,$00 db $10,$28,$13,$20 db $10,$00,$03,$00 db $10,$30,$03,$20 FrameBlock22: ; 7b3fe (1e:73fe) db $13 db $00,$00,$03,$00 db $08,$00,$13,$00 db $10,$00,$03,$00 db $18,$00,$13,$00 db $08,$08,$03,$00 db $10,$08,$13,$00 db $18,$08,$03,$00 db $10,$10,$03,$00 db $18,$10,$13,$00 db $18,$18,$03,$00 db $10,$20,$03,$20 db $18,$20,$13,$20 db $08,$28,$03,$20 db $10,$28,$13,$20 db $18,$28,$03,$20 db $00,$30,$03,$20 db $08,$30,$13,$20 db $10,$30,$03,$20 db $18,$30,$13,$20 FrameBlock23: ; 7b44b (1e:744b) db $04 db $00,$00,$0a,$00 db $00,$08,$0b,$00 db $08,$00,$1a,$00 db $08,$08,$1b,$00 FrameBlock24: ; 7b45c (1e:745c) db $02 db $08,$00,$0a,$00 db $08,$08,$0b,$00 FrameBlock25: ; 7b465 (1e:7465) db $0c db $10,$00,$0a,$00 db $10,$08,$0b,$00 db $18,$00,$1a,$00 db $18,$08,$1b,$00 db $00,$10,$0a,$00 db $00,$18,$0b,$00 db $08,$10,$1a,$00 db $08,$18,$1b,$00 db $08,$20,$0a,$00 db $08,$28,$0b,$00 db $10,$20,$1a,$00 db $10,$28,$1b,$00 FrameBlock26: ; 7b496 (1e:7496) db $04 db $00,$10,$44,$00 db $00,$18,$44,$20 db $08,$10,$44,$40 db $08,$18,$44,$60 FrameBlock27: ; 7b4a7 (1e:74a7) db $05 db $08,$08,$44,$00 db $08,$10,$44,$20 db $10,$08,$44,$40 db $10,$10,$44,$60 db $00,$18,$47,$00 FrameBlock28: ; 7b4bc (1e:74bc) db $06 db $10,$00,$44,$00 db $10,$08,$44,$20 db $18,$00,$44,$40 db $18,$08,$44,$60 db $08,$10,$47,$00 db $02,$16,$47,$00 FrameBlock29: ; 7b4d5 (1e:74d5) db $04 db $18,$00,$47,$00 db $12,$06,$47,$00 db $0c,$0c,$47,$00 db $06,$12,$47,$00 FrameBlock2a: ; 7b4e6 (1e:74e6) db $04 db $00,$00,$44,$00 db $00,$08,$44,$20 db $08,$00,$44,$40 db $08,$08,$44,$60 FrameBlock2b: ; 7b4f7 (1e:74f7) db $02 db $06,$02,$47,$00 db $00,$08,$47,$00 FrameBlock2c: ; 7b500 (1e:7500) db $01 db $a0,$00,$4d,$00 FrameBlock2d: ; 7b505 (1e:7505) db $08 db $00,$00,$26,$00 db $00,$08,$27,$00 db $08,$00,$36,$00 db $08,$08,$37,$00 db $10,$00,$28,$00 db $10,$08,$29,$00 db $18,$00,$38,$00 db $18,$08,$39,$00 FrameBlock2e: ; 7b526 (1e:7526) db $08 db $00,$00,$27,$20 db $00,$08,$26,$20 db $08,$00,$37,$20 db $08,$08,$36,$20 db $10,$00,$29,$20 db $10,$08,$28,$20 db $18,$00,$39,$20 db $18,$08,$38,$20 FrameBlock2f: ; 7b547 (1e:7547) db $04 db $00,$00,$0c,$00 db $00,$08,$0d,$00 db $08,$00,$0c,$40 db $08,$08,$0d,$40 FrameBlock30: ; 7b558 (1e:7558) db $04 db $00,$00,$44,$00 db $00,$08,$44,$20 db $08,$00,$44,$40 db $08,$08,$44,$60 FrameBlock31: ; 7b569 (1e:7569) db $01 db $00,$00,$45,$00 FrameBlock32: ; 7b56e (1e:756e) db $07 db $00,$00,$4d,$00 db $00,$08,$2f,$00 db $00,$10,$4d,$20 db $08,$00,$4e,$00 db $08,$08,$07,$00 db $08,$10,$4e,$20 db $10,$08,$3f,$00 FrameBlock33: ; 7b58b (1e:758b) db $07 db $00,$08,$3f,$40 db $08,$00,$4e,$40 db $08,$08,$07,$40 db $08,$10,$4e,$60 db $10,$00,$4d,$40 db $10,$08,$2f,$40 db $10,$10,$4d,$60 FrameBlock34: ; 7b5a8 (1e:75a8) db $01 db $a0,$00,$00,$10 FrameBlock35: ; 7b5ad (1e:75ad) db $06 db $00,$00,$2a,$00 db $00,$08,$2b,$00 db $08,$00,$3a,$00 db $10,$00,$3a,$40 db $18,$00,$2a,$40 db $18,$08,$2b,$40 FrameBlock36: ; 7b5c6 (1e:75c6) db $04 db $00,$00,$00,$00 db $00,$08,$01,$00 db $08,$00,$10,$00 db $08,$08,$11,$00 FrameBlock37: ; 7b5d7 (1e:75d7) db $04 db $00,$00,$01,$a0 db $00,$08,$00,$a0 db $08,$00,$11,$a0 db $08,$08,$10,$a0 FrameBlock38: ; 7b5e8 (1e:75e8) db $04 db $00,$00,$0a,$00 db $00,$08,$0b,$00 db $08,$00,$1a,$00 db $08,$08,$1b,$00 FrameBlock39: ; 7b5f9 (1e:75f9) db $04 db $00,$00,$0b,$20 db $00,$08,$0a,$20 db $08,$00,$1b,$20 db $08,$08,$1a,$20 FrameBlock3a: ; 7b60a (1e:760a) db $04 db $20,$00,$05,$00 db $20,$08,$05,$20 db $28,$00,$15,$00 db $28,$08,$15,$20 FrameBlock3b: ; 7b61b (1e:761b) db $05 db $18,$00,$04,$00 db $18,$08,$04,$20 db $20,$00,$14,$00 db $20,$08,$14,$20 db $28,$04,$41,$00 FrameBlock3c: ; 7b630 (1e:7630) db $06 db $10,$00,$05,$00 db $10,$08,$05,$20 db $18,$00,$15,$00 db $18,$08,$15,$20 db $20,$04,$42,$00 db $28,$04,$42,$00 FrameBlock3d: ; 7b649 (1e:7649) db $07 db $08,$00,$04,$00 db $08,$08,$04,$20 db $10,$00,$14,$00 db $10,$08,$14,$20 db $18,$04,$41,$00 db $20,$04,$41,$00 db $28,$04,$41,$00 FrameBlock3e: ; 7b666 (1e:7666) db $08 db $00,$00,$05,$00 db $00,$08,$05,$20 db $08,$00,$15,$00 db $08,$08,$15,$20 db $10,$04,$42,$00 db $18,$04,$42,$00 db $20,$04,$42,$00 db $28,$04,$42,$00 FrameBlock3f: ; 7b687 (1e:7687) db $08 db $00,$00,$04,$00 db $00,$08,$04,$20 db $08,$00,$14,$00 db $08,$08,$14,$20 db $10,$04,$41,$00 db $18,$04,$41,$00 db $20,$04,$41,$00 db $28,$04,$41,$00 FrameBlock40: ; 7b6a8 (1e:76a8) db $03 db $00,$00,$3d,$00 db $00,$08,$3d,$00 db $08,$08,$3d,$00 FrameBlock41: ; 7b6b5 (1e:76b5) db $04 db $00,$00,$06,$00 db $00,$08,$06,$20 db $08,$00,$16,$00 db $08,$08,$17,$00 FrameBlock42: ; 7b6c6 (1e:76c6) db $0b db $00,$10,$42,$00 db $08,$00,$42,$00 db $08,$08,$42,$00 db $08,$10,$42,$00 db $08,$18,$42,$00 db $08,$20,$42,$00 db $10,$10,$42,$00 db $18,$08,$42,$00 db $18,$18,$42,$00 db $20,$00,$42,$00 db $20,$20,$42,$00 FrameBlock43: ; 7b6f3 (1e:76f3) db $0b db $00,$10,$41,$00 db $08,$00,$41,$00 db $08,$08,$41,$00 db $08,$10,$41,$00 db $08,$18,$41,$00 db $08,$20,$41,$00 db $10,$10,$41,$00 db $18,$08,$41,$00 db $18,$18,$41,$00 db $20,$00,$41,$00 db $20,$20,$41,$00 FrameBlock44: ; 7b720 (1e:7720) db $04 db $00,$00,$49,$00 db $00,$28,$49,$00 db $28,$00,$49,$00 db $28,$28,$49,$00 FrameBlock45: ; 7b731 (1e:7731) db $04 db $00,$00,$49,$00 db $00,$18,$49,$00 db $18,$00,$49,$00 db $18,$18,$49,$00 FrameBlock46: ; 7b742 (1e:7742) db $04 db $00,$00,$49,$00 db $00,$08,$49,$00 db $08,$00,$49,$00 db $08,$08,$49,$00 FrameBlock47: ; 7b753 (1e:7753) db $04 db $00,$00,$43,$00 db $00,$08,$43,$20 db $08,$00,$43,$40 db $08,$08,$43,$60 SmallBlackCircleFrameBlock: ; 7b764 (1e:7764) db $04 db $08,$08,$33,$00 db $08,$10,$33,$20 db $10,$08,$33,$40 db $10,$10,$33,$60 LargeBlockCircleFrameBlock: ; 7b775 (1e:7775) db $10 db $00,$00,$22,$00 db $00,$08,$23,$00 db $00,$10,$23,$20 db $00,$18,$22,$20 db $08,$00,$32,$00 db $08,$08,$43,$00 db $08,$10,$43,$20 db $08,$18,$32,$20 db $10,$00,$32,$40 db $10,$08,$43,$40 db $10,$10,$43,$60 db $10,$18,$32,$60 db $18,$00,$22,$40 db $18,$08,$23,$40 db $18,$10,$23,$60 db $18,$18,$22,$60 FrameBlock71: ; 7b7b6 (1e:77b6) db $10 db $00,$00,$22,$00 db $00,$08,$3b,$00 db $00,$10,$23,$20 db $00,$18,$22,$20 db $08,$00,$32,$00 db $08,$08,$43,$00 db $08,$10,$43,$20 db $08,$18,$32,$20 db $10,$00,$32,$40 db $10,$08,$43,$40 db $10,$10,$43,$60 db $10,$18,$32,$60 db $18,$00,$22,$40 db $18,$08,$23,$40 db $18,$10,$23,$60 db $18,$18,$22,$60 FrameBlock72: ; 7b7f7 (1e:77f7) db $0c db $00,$00,$32,$00 db $00,$08,$43,$00 db $00,$10,$43,$20 db $00,$18,$32,$20 db $08,$00,$32,$40 db $08,$08,$43,$40 db $08,$10,$43,$60 db $08,$18,$32,$60 db $10,$00,$22,$40 db $10,$08,$23,$40 db $10,$10,$23,$60 db $10,$18,$22,$60 FrameBlock73: ; 7b828 (1e:7828) db $08 db $00,$00,$32,$40 db $00,$08,$43,$40 db $00,$10,$43,$60 db $00,$18,$32,$60 db $08,$00,$22,$40 db $08,$08,$23,$40 db $08,$10,$23,$60 db $08,$18,$22,$60 FrameBlock74: ; 7b849 (1e:7849) db $04 db $00,$00,$22,$40 db $00,$08,$23,$40 db $00,$10,$23,$60 db $00,$18,$22,$60 FrameBlock4a: ; 7b85a (1e:785a) db $04 db $08,$18,$4c,$20 db $20,$08,$4b,$00 db $30,$20,$4c,$00 db $18,$30,$4b,$40 FrameBlock4b: ; 7b86b (1e:786b) db $04 db $00,$18,$4c,$00 db $20,$00,$4b,$40 db $38,$20,$4c,$20 db $18,$38,$4b,$00 FrameBlock4c: ; 7b87c (1e:787c) db $04 db $10,$08,$4a,$40 db $30,$10,$4a,$00 db $28,$30,$4a,$20 db $08,$28,$4a,$60 FrameBlock4d: ; 7b88d (1e:788d) db $04 db $08,$00,$4a,$20 db $38,$08,$4a,$60 db $30,$38,$4a,$40 db $00,$30,$4a,$00 FrameBlock4e: ; 7b89e (1e:789e) db $08 db $00,$30,$44,$00 db $00,$38,$44,$20 db $08,$30,$44,$40 db $08,$38,$44,$60 db $26,$0a,$44,$00 db $26,$12,$44,$20 db $2e,$0a,$44,$40 db $2e,$12,$44,$60 FrameBlock4f: ; 7b8bf (1e:78bf) db $0c db $0e,$22,$44,$00 db $0e,$2a,$44,$20 db $16,$22,$44,$40 db $16,$2a,$44,$60 db $06,$32,$47,$00 db $00,$38,$47,$00 db $1a,$16,$44,$00 db $1a,$1e,$44,$20 db $22,$16,$44,$40 db $22,$1e,$44,$60 db $30,$08,$47,$00 db $2a,$0e,$47,$00 FrameBlock50: ; 7b8f0 (1e:78f0) db $08 db $06,$32,$47,$00 db $00,$38,$47,$00 db $12,$26,$47,$00 db $0c,$2c,$47,$00 db $1e,$1a,$47,$00 db $18,$20,$47,$00 db $2a,$0e,$47,$00 db $24,$14,$47,$00 FrameBlock51: ; 7b911 (1e:7911) db $08 db $00,$00,$35,$20 db $08,$00,$35,$40 db $10,$00,$35,$00 db $18,$00,$35,$60 db $00,$40,$35,$00 db $08,$40,$35,$60 db $10,$40,$35,$20 db $18,$40,$35,$40 FrameBlock52: ; 7b932 (1e:7932) db $04 db $00,$00,$2a,$00 db $00,$08,$2b,$00 db $08,$00,$3a,$00 db $08,$08,$3b,$00 FrameBlock53: ; 7b943 (1e:7943) db $03 db $00,$00,$3f,$00 db $00,$08,$3f,$00 db $08,$06,$3f,$00 FrameBlock54: ; 7b950 (1e:7950) db $04 db $00,$00,$0e,$00 db $00,$08,$0e,$20 db $08,$00,$0f,$00 db $08,$08,$0f,$20 FrameBlock55: ; 7b961 (1e:7961) db $03 db $10,$00,$2c,$00 db $10,$08,$3c,$00 db $10,$10,$2d,$00 FrameBlock56: ; 7b96e (1e:796e) db $06 db $10,$10,$31,$00 db $10,$18,$31,$00 db $08,$10,$2c,$00 db $08,$18,$3c,$00 db $08,$20,$2d,$00 db $10,$20,$2d,$00 FrameBlock57: ; 7b987 (1e:7987) db $09 db $08,$20,$31,$00 db $10,$20,$31,$00 db $08,$28,$31,$00 db $10,$28,$31,$00 db $00,$20,$2c,$00 db $00,$28,$3c,$00 db $00,$30,$2d,$00 db $08,$30,$2d,$00 db $10,$30,$2d,$00 FrameBlock58: ; 7b9ac (1e:79ac) db $07 db $00,$00,$46,$00 db $08,$02,$47,$00 db $10,$03,$48,$00 db $18,$04,$48,$00 db $20,$05,$48,$00 db $28,$05,$48,$00 db $30,$05,$48,$00 FrameBlock59: ; 7b9c9 (1e:79c9) db $01 db $00,$00,$42,$00 FrameBlock5a: ; 7b9ce (1e:79ce) db $0c db $00,$00,$24,$00 db $00,$08,$25,$00 db $08,$00,$34,$00 db $00,$10,$25,$20 db $00,$18,$24,$20 db $08,$18,$34,$20 db $10,$00,$34,$40 db $18,$00,$24,$40 db $18,$08,$25,$40 db $10,$18,$34,$60 db $18,$10,$25,$60 db $18,$18,$24,$60 FrameBlock5b: ; 7b9ff (1e:79ff) db $04 db $00,$00,$43,$00 db $00,$08,$43,$20 db $08,$00,$43,$40 db $08,$08,$43,$60 FrameBlock5c: ; 7ba10 (1e:7a10) db $08 db $00,$00,$49,$00 db $02,$08,$49,$00 db $18,$00,$49,$00 db $10,$10,$49,$00 db $08,$00,$43,$00 db $08,$08,$43,$20 db $10,$00,$43,$40 db $10,$08,$43,$60 FrameBlock5d: ; 7ba31 (1e:7a31) db $0b db $00,$00,$49,$00 db $18,$02,$49,$00 db $14,$10,$49,$00 db $08,$00,$43,$00 db $00,$08,$43,$20 db $10,$00,$43,$40 db $10,$08,$43,$60 db $04,$08,$43,$00 db $04,$10,$43,$20 db $0c,$08,$43,$40 db $0c,$10,$43,$60 FrameBlock5e: ; 7ba5e (1e:7a5e) db $0f db $00,$08,$49,$00 db $08,$10,$49,$00 db $20,$00,$49,$00 db $08,$00,$43,$00 db $08,$08,$43,$20 db $10,$00,$43,$40 db $10,$08,$43,$60 db $10,$10,$43,$00 db $10,$18,$43,$20 db $18,$10,$43,$40 db $18,$18,$43,$60 db $20,$08,$43,$00 db $20,$10,$43,$20 db $28,$08,$43,$40 db $28,$10,$43,$60 FrameBlock5f: ; 7ba9b (1e:7a9b) db $04 db $00,$00,$49,$00 db $00,$10,$49,$00 db $00,$20,$49,$00 db $00,$30,$49,$00 FrameBlock60: ; 7baac (1e:7aac) db $08 db $00,$00,$49,$00 db $00,$10,$49,$00 db $00,$20,$49,$00 db $00,$30,$49,$00 db $08,$08,$49,$00 db $08,$18,$49,$00 db $08,$28,$49,$00 db $08,$38,$49,$00 FrameBlock61: ; 7bacd (1e:7acd) db $0c db $00,$00,$49,$00 db $00,$10,$49,$00 db $00,$20,$49,$00 db $00,$30,$49,$00 db $08,$08,$49,$00 db $08,$18,$49,$00 db $08,$28,$49,$00 db $08,$38,$49,$00 db $10,$00,$49,$00 db $10,$10,$49,$00 db $10,$20,$49,$00 db $10,$30,$49,$00 FrameBlock62: ; 7bafe (1e:7afe) db $0f db $00,$00,$49,$00 db $00,$10,$49,$00 db $00,$20,$49,$00 db $00,$30,$49,$00 db $08,$08,$49,$00 db $08,$18,$49,$00 db $08,$28,$49,$00 db $08,$38,$49,$00 db $10,$00,$49,$00 db $10,$10,$49,$00 db $10,$20,$49,$00 db $10,$30,$49,$00 db $18,$08,$49,$00 db $18,$18,$49,$00 db $18,$28,$49,$00 db $18,$38,$49,$00 ; unused FrameBlock63: ; 7bb3f (1e:7b3f) db $06 db $10,$00,$26,$00 db $10,$08,$27,$00 db $08,$10,$26,$00 db $08,$18,$27,$00 db $00,$20,$26,$00 db $00,$28,$27,$00 FrameBlock64: ; 7bb58 (1e:7b58) db $06 db $18,$00,$27,$00 db $10,$08,$26,$00 db $10,$10,$27,$00 db $08,$18,$26,$00 db $08,$20,$27,$00 db $00,$28,$26,$00 FrameBlock65: ; 7bb71 (1e:7b71) db $06 db $00,$00,$1c,$00 db $00,$08,$1d,$00 db $10,$00,$1c,$00 db $10,$08,$1d,$00 db $20,$00,$1c,$00 db $20,$08,$1d,$00 FrameBlock66: ; 7bb8a (1e:7b8a) db $02 db $00,$00,$03,$00 db $08,$00,$13,$00 FrameBlock67: ; 7bb93 (1e:7b93) db $01 db $00,$00,$03,$00 FrameBlock68: ; 7bb98 (1e:7b98) db $04 db $00,$00,$03,$00 db $00,$08,$03,$20 db $08,$00,$13,$00 db $08,$08,$13,$20 FrameBlock69: ; 7bba9 (1e:7ba9) db $01 db $00,$00,$06,$00 FrameBlock6a: ; 7bbae (1e:7bae) db $08 db $00,$00,$2e,$00 db $00,$30,$2e,$20 db $30,$00,$2e,$40 db $30,$30,$2e,$60 db $00,$18,$2f,$00 db $30,$18,$2f,$40 db $18,$00,$3e,$00 db $18,$30,$3e,$20 FrameBlock6b: ; 7bbcf (1e:7bcf) db $08 db $00,$00,$2e,$00 db $00,$20,$2e,$20 db $20,$00,$2e,$40 db $20,$20,$2e,$60 db $00,$10,$2f,$00 db $20,$10,$2f,$40 db $10,$00,$3e,$00 db $10,$20,$3e,$20 FrameBlock6c: ; 7bbf0 (1e:7bf0) db $08 db $00,$00,$2e,$00 db $00,$10,$2e,$20 db $10,$00,$2e,$40 db $10,$10,$2e,$60 db $00,$08,$2f,$00 db $10,$08,$2f,$40 db $08,$00,$3e,$00 db $08,$10,$3e,$20 FrameBlock6d: ; 7bc11 (1e:7c11) db $02 db $00,$00,$1e,$00 db $00,$08,$1f,$00 FrameBlock6e: ; 7bc1a (1e:7c1a) db $04 db $00,$00,$48,$00 db $00,$08,$48,$20 db $08,$00,$12,$00 db $08,$08,$12,$20 FrameBlock6f: ; 7bc2b (1e:7c2b) db $04 db $00,$00,$4a,$00 db $00,$08,$07,$00 db $08,$00,$16,$00 db $08,$08,$17,$00 FrameBlock70: ; 7bc3c (1e:7c3c) db $04 db $00,$00,$07,$20 db $00,$08,$4a,$20 db $08,$00,$17,$20 db $08,$08,$16,$20 FrameBlock76: ; 7bc4d (1e:7c4d) db $07 db $00,$10,$2f,$00 db $01,$08,$2f,$00 db $01,$18,$2f,$00 db $02,$00,$2e,$00 db $02,$20,$2e,$20 db $0a,$00,$3e,$00 db $0a,$20,$3e,$20 FrameBlock77: ; 7bc6a (1e:7c6a) db $04 db $00,$02,$4b,$00 db $00,$0a,$4c,$00 db $08,$00,$4c,$60 db $08,$08,$4b,$60 FrameBlock78: ; 7bc7b (1e:7c7b) db $01 db $00,$00,$4d,$00 FrameBlock79: ; 7bc80 (1e:7c80) db $01 db $00,$00,$4e,$00 FrameBlockBaseCoords: ; 7bc85 (1e:7c85) db $10,$68 db $10,$70 db $10,$78 db $10,$80 db $10,$88 db $10,$90 db $10,$98 db $18,$68 db $18,$70 db $18,$78 db $34,$28 db $18,$80 db $18,$88 db $18,$98 db $20,$68 db $20,$70 db $20,$78 db $20,$80 db $20,$88 db $20,$90 db $20,$98 db $28,$68 db $28,$70 db $28,$78 db $28,$80 db $28,$88 db $30,$68 db $30,$70 db $30,$78 db $30,$80 db $30,$90 db $30,$98 db $38,$68 db $38,$78 db $38,$80 db $38,$88 db $40,$68 db $40,$70 db $40,$78 db $40,$80 db $40,$88 db $40,$98 db $10,$60 db $18,$60 db $20,$60 db $28,$60 db $30,$60 db $40,$60 db $58,$28 db $43,$38 db $33,$48 db $20,$58 db $32,$78 db $58,$58 db $2C,$6C db $34,$80 db $48,$70 db $42,$36 db $38,$44 db $40,$52 db $48,$60 db $3E,$6E db $28,$7C db $28,$8A db $50,$3C db $48,$50 db $40,$64 db $38,$38 db $50,$30 db $50,$38 db $50,$40 db $50,$48 db $50,$50 db $48,$58 db $50,$44 db $48,$48 db $48,$4C db $40,$50 db $40,$54 db $38,$58 db $38,$5C db $30,$64 db $48,$40 db $48,$39 db $24,$88 db $24,$70 db $1C,$70 db $1C,$88 db $34,$68 db $34,$88 db $68,$50 db $60,$50 db $68,$60 db $58,$50 db $60,$60 db $68,$40 db $40,$40 db $38,$40 db $0B,$60 db $44,$48 db $40,$14 db $48,$1C db $50,$24 db $4C,$24 db $10,$62 db $12,$62 db $12,$60 db $20,$72 db $22,$72 db $22,$70 db $28,$62 db $50,$0A db $52,$0A db $38,$30 db $40,$48 db $30,$48 db $40,$30 db $30,$40 db $38,$48 db $40,$4A db $48,$4B db $50,$4C db $58,$4D db $60,$4D db $68,$4D db $38,$10 db $50,$10 db $38,$28 db $48,$18 db $40,$20 db $48,$20 db $40,$3C db $38,$50 db $28,$64 db $1C,$90 db $24,$80 db $2C,$70 db $30,$38 db $10,$50 db $3C,$40 db $40,$58 db $30,$58 db $58,$48 db $50,$58 db $48,$68 db $40,$18 db $28,$58 db $40,$38 db $48,$38 db $08,$70 db $44,$1C db $3C,$58 db $38,$60 db $08,$60 db $38,$70 db $38,$6C db $38,$64 db $1C,$74 db $2E,$74 db $34,$50 db $2F,$60 db $31,$70 db $4C,$30 db $3B,$40 db $2D,$50 db $26,$60 db $2D,$70 db $28,$50 db $1E,$60 db $29,$70 db $16,$60 db $14,$58 db $12,$54 db $14,$50 db $18,$4C db $1C,$48 db $48,$28 FrameBlock00: ; 7bde7 (1e:7de7) db $00,$00 Func_7bde9: ; 7bde9 (1e:7de9) push hl push de push bc ld a, [$cf91] push af ld a, [$d0b5] push af xor a ld [$d083], a ld [$c02a], a dec a ld [$c0ee], a call PlaySound ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld a, $8c call PlaySound call Delay3 xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld [$FF00+$d7], a ld a, [$cee9] ld [$cf1d], a ld c, $0 call Func_7beb4 ld a, [$ceea] ld [$cf91], a ld [$d0b5], a call Func_7beb9 ld de, $9000 ld hl, $9310 ld bc, $31 call CopyVideoData ld a, [$cee9] ld [$cf91], a ld [$d0b5], a call Func_7beb9 ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba ld a, [$cee9] call PlayCry call WaitForSoundToFinish ld c, BANK(Music_SafariZone) ld a, MUSIC_SAFARI_ZONE call PlayMusic ld c, $50 call DelayFrames ld c, $1 call Func_7beb4 ld bc, $110 .asm_7be63 push bc call asm_7befa jr c, .asm_7bea9 call asm_7bec2 pop bc inc b dec c dec c jr nz, .asm_7be63 xor a ld [$ceec], a ld a, $31 ld [$ceeb], a call Func_7bed6 ld a, [$ceea] .asm_7be81 ld [$cf1d], a ld a, $ff ld [$c0ee], a call PlaySound ld a, [$cf1d] call PlayCry ld c, $0 call Func_7beb4 pop af ld [$d0b5], a pop af ld [$cf91], a pop bc pop de pop hl ld a, [$ceec] and a ret z scf ret .asm_7bea9 pop bc ld a, $1 ld [$ceec], a ld a, [$cee9] jr .asm_7be81 Func_7beb4: ; 7beb4 (1e:7eb4) ld b, $b jp GoPAL_SET Func_7beb9: ; 7beb9 (1e:7eb9) call GetMonHeader FuncCoord 7, 2 ; $c3cf ld hl, Coord jp LoadFlippedFrontSpriteByMonIndex asm_7bec2: ; 7bec2 (1e:7ec2) ld a, $31 ld [$ceeb], a call Func_7bed6 ld a, $cf ld [$ceeb], a call Func_7bed6 dec b jr nz, asm_7bec2 ret Func_7bed6: ; 7bed6 (1e:7ed6) push bc xor a ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba FuncCoord 7, 2 ; $c3cf ld hl, Coord ld bc, $707 ld de, $d .asm_7bee3 push bc .asm_7bee4 ld a, [$ceeb] add [hl] ld [hli], a dec c jr nz, .asm_7bee4 pop bc add hl, de dec b jr nz, .asm_7bee3 ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ; $FF00+$ba call Delay3 pop bc ret asm_7befa: ; 7befa (1e:7efa) call DelayFrame push bc call GetJoypadStateLowSensitivity ld a, [$FF00+$b5] pop bc and $2 jr nz, .asm_7bf0d .asm_7bf08 dec c jr nz, asm_7befa and a ret .asm_7bf0d ld a, [$ccd4] and a jr nz, .asm_7bf08 scf ret Func_7bf15: ; 7bf15 (1e:7f15) ld de, $ffe0 call Func_7bf64 ld de, $240 call Func_7bf64 call Delay3 ld a, $ff call PlaySound ld a, [$FF00+$af] ld d, a ld e, $1 ld b, $64 .asm_7bf30 ld a, e xor $fe ld e, a add d ld [$FF00+$af], a push bc ld c, BANK(SFX_02_5b) ld a, (SFX_02_5b - $4000) / 3 call PlayMusic pop bc ld c, $2 call DelayFrames dec b jr nz, .asm_7bf30 ld a, d ld [$FF00+$af], a ld a, $ff call PlaySound ld c, BANK(SFX_02_5f) ld a, (SFX_02_5f - $4000) / 3 call PlayMusic .asm_7bf57 ld a, [$c02a] cp $b9 jr z, .asm_7bf57 call UpdateSprites jp Func_2307 Func_7bf64: ; 7bf64 (1e:7f64) ld hl, $d527 ld a, [hld] push af ld a, [hl] push af push hl push hl ld a, [hli] ld h, [hl] ld l, a add hl, de ld a, h and $3 or $98 ld d, a ld a, l pop hl ld [hli], a ld [hl], d call ScheduleNorthRowRedraw pop hl pop af ld [hli], a pop af ld [hl], a jp Delay3 GetMachinePrice: ; 7bf86 (1e:7f86) ld a, [$cf91] sub TM_01 ret c ld d, a ld hl, TechnicalMachinePrices ; $7fa7 srl a ld c, a ld b, 0 add hl, bc ld a, [hl] srl d jr nc, .asm_7bf9d swap a .asm_7bf9d and $f0 ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c xor a ld [H_DOWNARROWBLINKCNT1], a ; $FF00+$8b ld [$FF00+$8d], a ret TechnicalMachinePrices: ; 7bfa7 (1e:7fa7) ; In thousands (nybbles). db $32, $21, $34, $24, $34 db $21, $45, $55, $32, $32 db $55, $52, $54, $52, $41 db $21, $12, $42, $25, $24 db $22, $52, $24, $34, $42