From 15427f532085846ab6b51719be687951a094cb6c Mon Sep 17 00:00:00 2001 From: "U-Fish-PC\\Daniel" Date: Thu, 22 May 2014 18:13:20 -0400 Subject: Pull a lot of engine out of main.asm --- main.asm | 50662 ++++++++----------------------------------------------------- 1 file changed, 5938 insertions(+), 44724 deletions(-) (limited to 'main.asm') diff --git a/main.asm b/main.asm index 5fed8c82..4d77ddab 100755 --- a/main.asm +++ b/main.asm @@ -239,7 +239,7 @@ OverworldLoopLessDelay:: ; 0402 (0:0402) 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) - callba Func_1e988 + callba SafariZoneCheck ld a,[$da46] and a jp nz,WarpFound2 @@ -480,7 +480,7 @@ OverworldLoopLessDelay:: ; 0402 (0:0402) ld a,[$d790] bit 7,a ; in the safari zone? jr z,.notSafariZone - callba Func_1e997 + callba SafariZoneCheckSteps ld a,[$da46] and a jp nz,WarpFound2 @@ -519,7 +519,7 @@ OverworldLoopLessDelay:: ; 0402 (0:0402) ld a,[W_CURMAP] cp a,OAKS_LAB jp z,.noFaintCheck - callab AnyPokemonAliveCheck ; check if all the player's pokemon fainted + callab AnyPlayerPokemonAliveCheck ; check if all the player's pokemon fainted ld a,d and a jr z,.allPokemonFainted @@ -1447,7 +1447,7 @@ CheckForJumpingAndTilePairCollisions:: ; 0c2a (0:0c2a) call Predef ; get the tile in front of the player push de push bc - callba Func_1a672 ; check if the player is trying to jump a ledge + callba HandleLedges ; check if the player is trying to jump a ledge pop bc pop de pop hl @@ -6585,7 +6585,7 @@ DisplayPokemonCenterDialogue:: ; 2a72 (0:2a72) jp AfterDisplayingTextID DisplaySafariGameOverText:: ; 2a90 (0:2a90) - callab Func_1e9ed + callab PrintSafariGameOverText jp AfterDisplayingTextID DisplayPokemonFaintedText:: ; 2a9b (0:2a9b) @@ -6618,94 +6618,7 @@ 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 - SFX_Headers_02) / 3 ; Start menu sound - call PlaySound - -RedisplayStartMenu:: ; 2adf (0:2adf) - callba DrawStartMenu - callba PrintSafariZoneSteps ; 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 +INCLUDE "engine/menu/start_menu.asm" ; function to count how many bits are set in a string of bytes ; INPUT: @@ -8325,11 +8238,11 @@ GetSpriteMovementByte2Pointer:: ; 3558 (0:3558) pop de ret -Func_3566:: ; 3566 (0:3566) - call Func_359e +GetTrainerInformation:: ; 3566 (0:3566) + call GetTrainerName ld a, [W_ISLINKBATTLE] ; $d12b and a - jr nz, .asm_3594 + jr nz, .linkBattle ld a, Bank(TrainerPicAndMoneyPointers) call BankswitchHome ld a, [W_TRAINERCLASS] ; $d031 @@ -8350,7 +8263,7 @@ Func_3566:: ; 3566 (0:3566) ld a, [hli] ld [de], a jp BankswitchBack -.asm_3594 +.linkBattle ld hl, $d033 ld de, RedPicFront ld [hl], e @@ -8358,9 +8271,9 @@ Func_3566:: ; 3566 (0:3566) ld [hl], d ret -Func_359e:: ; 359e (0:359e) - ld b, BANK(Func_13a58) - ld hl, Func_13a58 +GetTrainerName:: ; 359e (0:359e) + ld b, BANK(GetTrainerName_) + ld hl, GetTrainerName_ jp Bankswitch ; tests if player's money are at least as much as [$ff9f] @@ -9960,16 +9873,18 @@ GoPAL_SET:: ; 3def (0:3def) ld a,$45 jp Predef -Func_3df9:: ; 3df9 (0:3df9) +; hl points to where the color gets stored +; e contains the number of pixels filled in the health bar (out of 48) +GetHealthBarColor:: ; 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 + cp 27 + ld d, $0 ; green + jr nc, .gotColor + cp 10 + inc d ; yellow + jr nc, .gotColor + inc d ; red +.gotColor ld [hl], d ret @@ -10079,8 +9994,8 @@ Load16BitRegisters:: ; 3e94 (0:3e94) ret Func_3ead:: ; 3ead (0:3ead) - ld b, BANK(Func_1eb0a) - ld hl, Func_1eb0a + ld b, BANK(CinnabarGymQuiz_1eb0a) + ld hl, CinnabarGymQuiz_1eb0a jp Bankswitch Func_3eb5:: ; 3eb5 (0:3eb5) @@ -10325,439 +10240,9 @@ MewPicBack: ; 4205 (1:4205) INCLUDE "data/baseStats/mew.asm" -PrintSafariZoneBattleText: ; 4277 (1:4277) - ld hl, $cce9 - ld a, [hl] - and a - jr z, .asm_4284 - dec [hl] - ld hl, SafariZoneEatingText - jr .asm_429f -.asm_4284 - dec hl - ld a, [hl] - and a - ret z - dec [hl] - ld hl, SafariZoneAngryText - 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 - -SafariZoneEatingText: ; 42a7 (1:42a7) - TX_FAR _SafariZoneEatingText - db "@" - -SafariZoneAngryText: ; 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 - -SetDefaultNamesBeforeTitlescreen: ; 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 [$ffb0], 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 - -LoadTitlescreenGraphics: ; 42dd (1:42dd) - call GBPalWhiteOut - ld a, $1 - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - xor a - ld [$ffd7], a - ld [$ffae], a - ld a, $40 - ld [$ffaf], a - ld a, $90 - ld [$ffb0], 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 [$ffb0], a - call LoadScreenTilesFromBuffer2 - ld a, $98 - call Func_4533 - ld b, $6 - call GoPAL_SET - call GBPalNormal - ld a, $e4 - ld [rOBP0], a ; $ff48 - 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, (SFX_1f_62 - SFX_Headers_1f) / 3 - 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, (SFX_1f_63 - SFX_Headers_1f) / 3 - call PlaySound - call PrintGameVersionOnTitleScreen - ld a, $90 - ld [$ffb0], 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 - callba Func_372ac - call Func_4496 - jr .asm_443b -.asm_4459 - ld a, [wWhichTrade] ; $cd3d - call PlayCry - call WaitForSoundToFinish - call GBPalWhiteOutWithDelay3 - call CleanLCD_OAM - xor a - ld [$ffb0], a - inc a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - 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 [$ffb0], a - ld d, 1 ; scroll out - callba TitleScroll ; indirect jump to TitleScroll (37258 (d:7258)) - ret - -Func_44c1: ; 44c1 (1:44c1) - ld d, 0 ; scroll in - callba TitleScroll ; indirect jump to TitleScroll (37258 (d:7258)) - xor a - ld [$ffb0], a - ret - -Func_44cf: ; 44cf (1:44cf) -.wait - ld a, [$ff44] ; rLY - cp l - jr nz, .wait - - ld a, h - ld [rSCX], a ; $ff43 - -.wait2 - ld a, [$ff44] ; 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 [$ffbd], a - jp Delay3 - -Func_4538: ; 4538 (1:4538) - xor a - ld [$ffb0], 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 "@" - -INCLUDE "data/title_mons.asm" - -; prints version text (red, blue) -PrintGameVersionOnTitleScreen: ; 4598 (1:4598) - FuncCoord 7, 8 ; $c447 - ld hl, Coord - ld de, VersionOnTitleScreenText - jp PlaceString +INCLUDE "engine/battle/safari_zone.asm" -; 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 +INCLUDE "engine/titlescreen.asm" NintenText: ; 45aa (1:45aa) db "NINTEN@" @@ -12230,45302 +11715,7279 @@ Func_5301: ; 5301 (1:5301) ld [$ffea], a ret -Func_5317: ; 5317 (1:5317) - ld c, $50 - call DelayFrames - call ClearScreen - call UpdateSprites - call LoadFontTilePatterns - call LoadHpBarAndStatusTilePatterns - call LoadTrainerInfoTextBoxTiles - 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 +INCLUDE "engine/cable_club.asm" -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 +LoadTrainerInfoTextBoxTiles: ; 5ae6 (1:5ae6) + ld de, TrainerInfoTextBoxTileGraphics ; $7b98 + ld hl, $9760 + ld bc, (BANK(TrainerInfoTextBoxTileGraphics) << 8) +$09 + jp CopyVideoData + +INCLUDE "engine/menu/main_menu.asm" + +INCLUDE "engine/oak_speech.asm" + +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 [wLastMap],a + ret + +Func_62ff: ; 62ff (1:62ff) + ld a, [$d72d] + cp BATTLE_CENTER + jr nz, .asm_6314 + ld hl, BattleCenterSpec1 ; $6428 ld a, [$ffaa] cp $2 - jr nz, .asm_53d2 - call Delay3 - xor a - ld [$ffac], a - ld a, $81 - ld [$ff02], a - call DelayFrame - xor a - ld [$ffac], a - ld a, $81 - ld [$ff02], a -.asm_53d2 - call Delay3 - ld a, $8 - ld [rIE], a ; $ffff - 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 ; $ffff - ld a, $ff - call PlaySound + 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, [$ffaa] 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 + 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] - cp $fe - jr z, .asm_5427 ld [de], a inc de dec c - jr nz, .asm_5427 -.asm_5431 - ld hl, $d896 -.asm_5434 + jr nz, .asm_6339 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 [W_CURMAPTILESET], a ; $d367 + xor a + jr .asm_63b3 +.asm_6346 + ld a, [wLastMap] + ld hl, $d732 + bit 4, [hl] + jr nz, .asm_635b + bit 6, [hl] + res 6, [hl] + jr z, .asm_638e + ld a, [wLastBlackoutMap] + 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] - 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 + 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 + +INCLUDE "data/special_warps.asm" + +; 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 - 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] + ld [W_CURENEMYLVL], a 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, [$ffaa] - 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, SONY1 + $c8 - 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, LoadTitlescreenGraphics - add a - ld c, a - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - jp [hl] + call AddPokemonToParty + jr .loop -Func_5530: - call ClearScreen - call LoadTrainerInfoTextBoxTiles - 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 - callab Func_39bd5 - 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 - callab Func_39bd5 - 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 - callab Func_39bd5 - 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, [$ffb5] - 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 +IshiharaTeam: ; 64df (1:64df) + db EXEGGUTOR,90 + db MEW,20 + db JOLTEON,56 + db DUGTRIO,56 + db ARTICUNO,57 + db $FF -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 - callba Func_c335 - pop hl - pop af - ld [hl], a - call GBFadeIn2 +Func_64ea: ; 64ea (1:64ea) 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 +INCLUDE "engine/menu/naming_screen.asm" -CancelTextString: - db "CANCEL@" +INCLUDE "engine/oak_speech2.asm" -Func_57c7: - ld a, [$cc3d] - ld hl, $c455 - ld bc, $0014 - call AddNTimes - ld [hl], $ec +; 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 -Func_57d6: - ld a, [$cc26] - ld [wWhichPokemon], a - ld a, $36 - call Predef - ld a, $37 - call Predef - call GBPalNormal - call LoadTrainerInfoTextBoxTiles - 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 +HandleItemListSwapping: ; 6b44 (1:6b44) + ld a,[wListMenuID] + cp a,ITEMLISTMENU + jp nz,DisplayListMenuIDLoop ; only rearrange item list menus push hl - ld a, c - ld [$ff95], a - call GetMonName - pop hl - call PlaceString - pop de - inc de + 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 - ld bc, $0014 - add hl, bc - pop bc - inc c - jr .asm_5829 ; 0x5847 $e0 - -CableClubTradeCenter: - 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, WillBeTradedText - 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] + 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 [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 + ld [$cc35],a ; ID of item chosen for swapping (counts from 1) + ld c,20 call DelayFrames - call ClearScreen - call LoadHpBarAndStatusTilePatterns + 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 [$cc5b], a - ld a, [$ffaa] - 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 - callab Func_3ad0e - call ClearScreen - call LoadTrainerInfoTextBoxTiles - 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 + 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 [$cc38], a - jp Func_5345 - -Func_5a18: - ld c, $64 - call DelayFrames + ld [wListScrollOffset],a + ld [wCurrentMenuItem],a +.done xor a - ld [$cc38], a - jp Func_551c - -WillBeTradedText: ; 5a24 (1:5a24) - TX_FAR _WillBeTradedText - db "@" - -TradeCompleted: - db "Trade completed!@" - -TradeCanceled: - db "Too bad! The trade" - next "was canceled!@" + ld [$cc35],a ; 0 means no item is currently being swapped + pop de + pop hl + jp DisplayListMenuIDLoop -PointerTable_5a5b: ; 5a5b (1:5a5b) - dw Func_5530 - dw CableClubTradeCenter +INCLUDE "engine/overworld/pokemart.asm" -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, Club_GFX - ld a, h - ld [$d52f], a - ld a, l - ld [$d52e], a - ld a, Bank(Club_GFX) - ld [$d52b], a - ld hl, Club_Coll - 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 [$ffb5], a - ld a, $a - ld [wMusicHeaderPointer], a - ld a, BANK(Music_Celadon) - ld [$c0f0], a - ld a, MUSIC_CELADON - ld [$c0ee], a - jp PlaySound +INCLUDE "engine/learn_move.asm" -Func_5aaf: ; 5aaf (1:5aaf) - ret +INCLUDE "engine/overworld/pokecenter.asm" -Func_5ab0: - call Load16BitRegisters +SetLastBlackoutMap: +; Set the map to return to when +; blacking out or using Teleport or Dig. +; Safari rest houses don't count. -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 + ld hl, SafariZoneRestHouses + ld a, [W_CURMAP] + ld b, a +.loop + ld a, [hli] + cp -1 + jr z, .notresthouse + cp b + jr nz, .loop + jr .done -Func_5ae0: ; 5ae0 (1:5ae0) - ld d, c -.asm_5ae1 - ld [hli], a - dec d - jr nz, .asm_5ae1 +.notresthouse + ld a, [wLastMap] + ld [wLastBlackoutMap], a +.done + pop hl ret -LoadTrainerInfoTextBoxTiles: ; 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 +SafariZoneRestHouses: + db SAFARI_ZONE_REST_HOUSE_2 + db SAFARI_ZONE_REST_HOUSE_3 + db SAFARI_ZONE_REST_HOUSE_4 + db -1 -.next0 - ld c,20 - call DelayFrames +; function that performs initialization for DisplayTextID +DisplayTextIDInit: ; 7096 (1:7096) 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 [$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,6 - ld c,13 - call TextBoxBorder - FuncCoord 2,2 + ld b,$0e + ld c,$08 + jr nz,.drawTextBoxBorder +; start menu without pokedex + FuncCoord 10, 0 ; $c3aa ld hl,Coord - ld de,ContinueText - call PlaceString - jr .next2 -.next1 - FuncCoord 0,0 + 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,4 - ld c,13 + ld b,$04 + ld c,$12 +.drawTextBoxBorder call TextBoxBorder - FuncCoord 2,2 - ld hl,Coord - ld de,NewGameText - 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,LoadTitlescreenGraphics ; 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 ContinueGame - 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 +.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 [$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 + 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 -LinkMenu: ; 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, WhereWouldYouLikeText - call PrintText - FuncCoord 5, 5 ; $c409 - ld hl, Coord - ld b, $6 - ld c, $d +; 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 - call UpdateSprites - FuncCoord 7, 7 ; $c433 - ld hl, Coord - ld de, TradeCenterText - 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 + 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 [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, [$ffaa] - cp $2 - jr z, .asm_5ca1 -.asm_5c98 - ld a, b - ld [$cc42], a - and $3 - ld [wCurrentMenuItem], a ; $cc26 -.asm_5ca1 - ld a, [$ffaa] - cp $2 - jr nz, .asm_5cb1 - call DelayFrame - call DelayFrame - ld a, $81 - ld [$ff02], 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, PleaseWaitText - 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, LinkCanceledText - call PrintText - ld hl, $d72e - res 6, [hl] + 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 -WhereWouldYouLikeText: ; 5d43 (1:5d43) - TX_FAR _WhereWouldYouLikeText - db "@" +StartMenuPokedexText: ; 718f (1:718f) + db "POKéDEX@" -PleaseWaitText: ; 5d48 (1:5d48) - TX_FAR _PleaseWaitText - db "@" +StartMenuPokemonText: ; 7197 (1:7197) + db "POKéMON@" -LinkCanceledText: ; 5d4d (1:5d4d) - TX_FAR _LinkCanceledText - db "@" +StartMenuItemText: ; 719f (1:719f) + db "ITEM@" -Func_5d52: ; 5d52 (1:5d52) - ld hl, $d732 - res 1, [hl] - call OakSpeech - ld c, $14 - call DelayFrames +StartMenuSaveText: ; 71a4 (1:71a4) + db "SAVE@" -Func_5d5f: ; 5d5f (1:5d5f) - xor a - ld [H_NEWLYPRESSEDBUTTONS], a - ld [H_CURRENTPRESSEDBUTTONS], a - ld [$ffb5], 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 +StartMenuResetText: ; 71a9 (1:71a9) + db "RESET@" -ContinueText: ; 5d7e (1:5d7e) - db "CONTINUE", $4e +StartMenuExitText: ; 71af (1:71af) + db "EXIT@" -NewGameText: ; 5d87 (1:5d87) - db "NEW GAME", $4e +StartMenuOptionText: ; 71b4 (1:71b4) db "OPTION@" -TradeCenterText: ; 5d97 (1:5d97) - db "TRADE CENTER", $4e - db "COLOSSEUM", $4e - db "CANCEL@" - -ContinueGame: ; 5db5 (1:5db5) - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - 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 - 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 ; $ffba - ld c, $1e - jp DelayFrames - -PrintSaveScreenText: ; 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 - ld b, $1 - call CountSetBits - pop hl - ld de, $d11e - ld bc, $102 - jp PrintNumber - -Func_5e42: ; 5e42 (1:5e42) +PrintStartMenuItem: ; 71bb (1:71bb) push hl - ld hl, wPokedexOwned ; $d2f7 - ld b, wPokedexOwnedEnd - wPokedexOwned - call CountSetBits + call PlaceString 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 + ld de,$28 + add hl,de + ret -SaveScreenInfoText: ; 5e6a (1:5e6a) - db "PLAYER" - next "BADGES " - next "#DEX " - next "TIME@" +INCLUDE "engine/overworld/cable_club_npc.asm" -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 +; 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 - FuncCoord 0,10 - ld hl,Coord - ld b,3 - ld c,18 + ret +.textAndCoordTableMatch + call GetTextBoxIDCoords + push hl + call GetAddressOfScreenCoords 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 + 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 - 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,(SFX_02_40 - SFX_Headers_02) / 3 - call PlaySound ; play sound + pop af + ld [$d730],a + call UpdateSprites ; move sprites 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] +; 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,.textSpeedMatchFound - inc hl + jr z,.found + add hl,de jr .loop -.textSpeedMatchFound - ld a,[hl] +.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,[$cd3e] ; battle animation cursor X coordinate + ld a,[hli] ; column of lower right corner + sub e dec a - jr z,.battleAnimationOn -.battleAnimationOff - set 7,d - jr .checkBattleStyle -.battleAnimationOn - res 7,d -.checkBattleStyle - ld a,[$cd3f] ; battle style cursor X coordinate + ld c,a ; c = width + ld a,[hli] ; row of lower right corner + sub d dec a - jr z,.battleStyleShift -.battleStyleSet - set 6,d - jr .storeOptions -.battleStyleShift - res 6,d -.storeOptions - ld a,d - ld [W_OPTIONS],a + ld b,a ; b = height 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 +; 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 de,2 - call IsInArray + 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 - 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) +; 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 -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 +; 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 -SetDefaultNames: ; 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 - ld de, W_PLAYERNAME ; $d158 - ld bc, $b - call CopyData - ld hl, SonyText - ld de, W_RIVALNAME ; $d34a - ld bc, $b - jp CopyData +; 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 -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 SetDefaultNames - 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 LoadDefaultNamesPlayer ; 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 LoadDefaultNamesRival - -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,(SFX_02_48 - SFX_Headers_02) / 3 - 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 ; play NIDORINA cry from TextCommandSounds - 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 "@" + db $06 ; text box ID + db 13,10,19,14 ; text box coordinates + dw UseTossText + db 15,11 ; text coordinates -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 + db $08 ; text box ID + db 0,0,7,5 ; text box coordinates + dw JapaneseSaveMessageText + db 2,2 ; text coordinates -IntroFadePalettes: ; 6282 (1:6282) - db %01010100 - db %10101000 - db %11111100 - db %11111000 - db %11110100 - db %11100100 + db $09 ; text box ID + db 0,6,5,10 ; text box coordinates + dw JapaneseSpeedOptionsText + db 2,7 ; text coordinates -MovePicLeft: ; 6288 (1:6288) - ld a,119 - ld [$FF4B],a - call DelayFrame + db $0b ; text box ID + db 8,12,19,17 ; text box coordinates + dw BattleMenuText + db 10,14 ; text coordinates - ld a,$E4 - ld [rBGP],a -.next - call DelayFrame - ld a,[$FF4B] - sub 8 - cp $FF - ret z - ld [$FF4B],a - jr .next + db $1b ; text box ID + db 0,12,19,17 ; text box coordinates + dw SafariZoneBattleMenuText + db 2,14 ; text coordinates -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 + db $0c ; text box ID + db 11,11,19,17 ; text box coordinates + dw SwitchStatsCancelText + db 13,12 ; text coordinates -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 [wLastMap],a - ret + db $0e ; text box ID + db 0,0,10,6 ; text box coordinates + dw BuySellQuitText + db 2,1 ; text coordinates -Func_62ff: ; 62ff (1:62ff) - ld a, [$d72d] - cp BATTLE_CENTER - jr nz, .asm_6314 - ld hl, BattleCenterSpec1 ; $6428 - ld a, [$ffaa] - 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, [$ffaa] - 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, [wLastMap] - ld hl, $d732 - bit 4, [hl] - jr nz, .asm_635b - bit 6, [hl] - res 6, [hl] - jr z, .asm_638e - ld a, [wLastBlackoutMap] - 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 + db $0f ; text box ID + db 11,0,19,2 ; text box coordinates + dw MoneyText + db 13,0 ; text coordinates -INCLUDE "data/special_warps.asm" + db $12 ; text box ID + db 7,6,11,10 ; text box coordinates + dw JapaneseAhText + db 8,8 ; text coordinates -; 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 + db $1a ; text box ID + db 11,8,19,17 ; text box coordinates + dw JapanesePokedexMenu + db 12,10 ; text coordinates -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 +; note that there is no terminator -IshiharaTeam: ; 64df (1:64df) - db EXEGGUTOR,90 - db MEW,20 - db JOLTEON,56 - db DUGTRIO,56 - db ARTICUNO,57 - db $FF +BuySellQuitText: ; 7413 (1:7413) + db "BUY" + next "SELL" + next "QUIT@@" -Func_64ea: ; 64ea (1:64ea) - ret +UseTossText: ; 7422 (1:7422) + db "USE" + next "TOSS@" -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 - 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 DisplayNamingScreen - 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 +JapaneseSaveMessageText: ; 742b (1:742b) + db "きろく" + next "メッセージ@" -DoYouWantToNicknameText: ; 0x6557 - TX_FAR _DoYouWantToNicknameText - db "@" +JapaneseSpeedOptionsText: ; 7435 (1:7435) + db "はやい" + next "おそい@" -Func_655c: ; 655c (1:655c) - ld hl, $cee9 - xor a - ld [$cfcb], a - ld a, $2 - ld [$d07d], a - call DisplayNamingScreen - 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 +MoneyText: ; 743d (1:743d) + db "MONEY@" -DisplayNamingScreen: ; 6596 (1:6596) - push hl +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] - call GBPalWhiteOutWithDelay3 - call ClearScreen - call UpdateSprites - ld b, $8 - call GoPAL_SET - call LoadHpBarAndStatusTilePatterns - call LoadEDTile - callba Func_7176c - FuncCoord 0, 4 ; $c3f0 + ld a, $f + ld [$d125], a + call DisplayTextBoxID + FuncCoord 13, 1 ; $c3c1 ld hl, Coord - ld b, $9 - ld c, $12 - call TextBoxBorder - call PrintNamingText + 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 - ld [wLastMenuItem], a ; $cc2a + xor a ld [wCurrentMenuItem], a ; $cc26 - ld a, $ff + 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, $7 + ld a, $1 ld [wMaxMenuItem], a ; $cc28 - ld a, $50 - ld [$cf4b], a + ld a, b + ld [wTopMenuItemY], a ; $cc24 + ld a, c + ld [wTopMenuItemX], a ; $cc25 xor a - ld hl, $ceea - ld [hli], a - ld [hli], a - ld [W_SUBANIMTRANSFORM], a ; $d08b -.asm_65ed - call PrintAlphabet - 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 - callba AnimatePartyMon_ForceSpeed1 - pop af + 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 - call GetJoypadStateLowSensitivity - ld a, [H_NEWLYPRESSEDBUTTONS] + 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 - 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 bc, $16 + jr z, .asm_75ca + ld bc, $2a +.asm_75ca 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 + pop hl + add hl, bc + call PlaceString 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 CalcStringLength - ld a, [$ceed] - cp $e5 - ld de, Dakutens ; $6885 - jr z, .asm_66e3 - cp $e4 - ld de, Handakutens ; $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 + ld a, [$d12c] + cp $7 + jr nz, .asm_7603 + xor a + ld [$d12c], a + ld a, [wFlags_0xcd60] + push af push hl - call Func_6871 + ld hl, wFlags_0xcd60 + bit 5, [hl] + set 5, [hl] pop hl - ret nc - dec hl -.addLetter - ld a, [$ceed] - ld [hli], a - ld [hl], $50 +.asm_75f0 + call HandleMenuInput + bit 1, a + jr nz, .asm_75f0 + pop af + pop hl + ld [wFlags_0xcd60], a ld a, (SFX_02_40 - SFX_Headers_02) / 3 call PlaySound - ret -.deleteLetter - ld a, [$cee9] - and a - ret z - call CalcStringLength - dec hl - ld [hl], $50 - ret -.asm_6702 + 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 - 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 + ld [$d12d], a and a - ret nz - ld a, $6 - ld [wCurrentMenuItem], a ; $cc26 + jr nz, .asm_7627 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 [$d12e], a + ld c, $f + call DelayFrames + call Func_7656 + and a + ret +.asm_7627 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 - -LoadEDTile: ; 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" + ld [$d12d], a + ld a, $2 + ld [$d12e], a + ld c, $f + call DelayFrames + call Func_7656 + scf + ret -PrintAlphabet: ; 676f (1:676f) - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - 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 +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_6785 - ld bc, $16 + jr nz, .asm_7644 + push bc + ld bc, $e add hl, bc pop bc + ld c, $6 dec b - jr nz, .asm_6784 - call PlaceString - ld a, $1 - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - jp Delay3 - -LowerCaseAlphabet: ; 679e (1:679e) - db "abcdefghijklmnopqrstuvwxyz ×():;[]",$e1,$e2,"-?!♂♀/",$f2,",¥UPPER CASE@" - -UpperCaseAlphabet: ; 67d6 (1:67d6) - db "ABCDEFGHIJKLMNOPQRSTUVWXYZ ×():;[]",$e1,$e2,"-?!♂♀/",$f2,",¥lower case@" + jr nz, .asm_7644 + ret -Func_680e: ; 680e (1:680e) - call CalcStringLength - 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 +Func_7656: ; 7656 (1:7656) + ld de, $cee9 + ld bc, $506 +.asm_765c + ld a, [de] + inc de 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 + dec c + jr nz, .asm_765c + push bc + ld bc, $e add hl, bc - ld [hl], $77 + pop bc + ld c, $6 + dec b + jr nz, .asm_765c + call UpdateSprites ret -Func_6871: ; 6871 (1:6871) - push de - call CalcStringLength - dec hl - ld a, [hl] - pop hl - ld de, $2 - call IsInArray - ret nc - inc hl - ld a, [hl] - ld [$ceed], a - ret - -Dakutens: ; 6885 (1:6885) - db "かが", "きぎ", "くぐ", "けげ", "こご" - db "さざ", "しじ", "すず", "せぜ", "そぞ" - db "ただ", "ちぢ", "つづ", "てで", "とど" - db "はば", "ひび", "ふぶ", "へべ", "ほぼ" - db "カガ", "キギ", "クグ", "ケゲ", "コゴ" - db "サザ", "シジ", "スズ", "セゼ", "ソゾ" - db "タダ", "チヂ", "ツヅ", "テデ", "トド" - db "ハバ", "ヒビ", "フブ", "へべ", "ホボ" - db $ff - -Handakutens: ; 68d6 (1:68d6) - db "はぱ", "ひぴ", "ふぷ", "へぺ", "ほぽ" - db "ハパ", "ヒピ", "フプ", "へぺ", "ホポ" - db $ff - -; calculates the length of the string at $cf4b and stores it in c -CalcStringLength: ; 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 - -PrintNamingText: ; 68f8 (1:68f8) - FuncCoord 0, 1 ; $c3b4 - ld hl, Coord - ld a, [$d07d] - ld de, YourTextString ; $693f - and a - jr z, .notNickname - ld de, RivalsTextString ; $6945 - dec a - jr z, .notNickname - ld a, [$cf91] - ld [$cd5d], a - push af - callba Func_71882 - 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 .placeString -.notNickname - call PlaceString - ld l, c - ld h, b - ld de, NameTextString ; $694d -.placeString - jp PlaceString - -YourTextString: ; 693f (1:693f) - db "YOUR @" - -RivalsTextString: ; 6945 (1:6945) - db "RIVAL's @" - -NameTextString: ; 694d (1:694d) - db "NAME?@" +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 -NicknameTextString: ; 6953 (1:6953) - db "NICKNAME?@" +.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@" -LoadDefaultNamesPlayer: ; 695d (1:695d) - call Func_6a12 - ld de, DefaultNamesPlayer ; $6aa8 - call DisplayIntroNameTextBox - 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 +Func_76e1: ; 76e1 (1:36e1) xor a - ld [$d07d], a - call DisplayNamingScreen - ld a, [$cf4b] - cp $50 - jr z, .asm_697a - call ClearScreen - call Delay3 - ld de, RedPicFront ; $6ede - ld b, BANK(RedPicFront) - call IntroPredef3B -.asm_6999 - ld hl, YourNameIsText - jp PrintText - -YourNameIsText: ; 699f (1:699f) - TX_FAR _YourNameIsText - db "@" - -LoadDefaultNamesRival: ; 69a4 (1:69a4) - call Func_6a12 ; 0x69a4 call 0x6a12 - ld de, DefaultNamesRival - call DisplayIntroNameTextBox - ld a, [wCurrentMenuItem] ; $cc26 + 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 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 DisplayNamingScreen - 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, HisNameIsText - jp PrintText - -HisNameIsText: ; 69e7 (1:69e7) - TX_FAR _HisNameIsText - 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 + jr nz, .asm_770f + FuncCoord 11, 11 ; $c487 ld hl, Coord - ld de, $67d - ld a, $ff - jr asm_6a19 - -Func_6a12: ; 6a12 (1:6a12) - FuncCoord 5, 4 ; $c3f5 + ld b, $5 + ld c, $7 + call TextBoxBorder + call UpdateSprites + ld a, $c + ld [$fff7], a + FuncCoord 13, 12 ; $c49d ld hl, Coord - ld de, $67d - xor a -asm_6a19: ; 6a19 (1:6a19) - push hl - push de - push bc - ld [$ff8d], a - ld a, d - ld [H_DOWNARROWBLINKCNT1], a ; $ff8b - ld a, e - ld [H_DOWNARROWBLINKCNT2], a ; $ff8c - ld c, a - ld a, [$ff8d] - and a - jr nz, .asm_6a2d + 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 -.asm_6a2d - ld d, h - ld e, l -.asm_6a2f - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - ld a, [$ff8d] - 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, [$ff8d] - and a - jr z, .asm_6a4a - xor a - dec hl - ld [hl], a -.asm_6a4a - ld a, $1 - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - call Delay3 - ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c + ld b, $5 + ld a, $12 + sub e ld c, a - ld h, d - ld l, e - ld a, [$ff8d] - 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] ; $ff8b + pop af + ld de, $ffd8 +.asm_7725 + add hl, de + inc b + inc b dec a - ld [H_DOWNARROWBLINKCNT1], a ; $ff8b - jr nz, .asm_6a2f - pop bc - pop de - pop hl - ret - -DisplayIntroNameTextBox: ; 6a6c (1:6a6c) - push de - ld hl, wTileMap - ld b, $a - ld c, $9 + jr nz, .asm_7725 + ld de, $ffec + add hl, de + inc b call TextBoxBorder - FuncCoord 3, 0 ; $c3a3 + call UpdateSprites + FuncCoord 0, 12 ; $c490 ld hl, Coord - ld de, .namestring ; $6aa3 + 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 - FuncCoord 2, 2 ; $c3ca + jr .asm_7752 +.asm_7776 + pop hl + ld a, [$cd42] + ld [$fff7], a + FuncCoord 0, 12 ; $c490 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 + ld a, [$cd42] inc a - ld [wMaxMenuItem], a ; $cc28 - jp HandleMenuInput - -.namestring ; 6aa3 (1:6aa3) - db "NAME@" + ld e, a + ld d, $0 + add hl, de + ld de, PokemonMenuEntries ; $77c2 + jp PlaceString -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 +FieldMoveNames: ; 778d (1:778d) + db "CUT@" + db "FLY@" + db "@" + db "SURF@" + db "STRENGTH@" + db "FLASH@" + db "DIG@" + db "TELEPORT@" + db "SOFTBOILED@" -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 +PokemonMenuEntries: ; 77c2 (1:77c2) + db "STATS" + next "SWITCH" + next "CANCEL@" -Func_6ad6: ; 6ad6 (1:6ad6) - ld b, a - ld c, $0 -.asm_6ad9 +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 -.asm_6adb + 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 $50 - jr nz, .asm_6adb + cp $ff + jr z, .asm_77ea + cp b + jr z, .asm_7802 + inc hl + inc hl + jr .asm_77f6 +.asm_7802 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 + 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 -TextTerminator_6b20: ; 6b20 (1:6b20) - db "@" +; 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 -; 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 +INCLUDE "engine/battle/1.asm" + +INCLUDE "engine/menu/players_pc.asm" + +_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 [$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 + ld [hli], a + ld a, [wWhichPokemon] ; $cf92 + ld c, a + ld b, $0 + add hl, bc + ld e, l + ld d, h inc de - inc a ; reached the $ff terminator? - jr z,.afterMovingItemsUp - ld a,[hli] - ld [de],a +.asm_7b81 + ld a, [de] 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 + ld [hli], 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 - callab Func_39bd5 - ld a,[wNumBagItems] + jr nz, .asm_7b81 + ld hl, W_PARTYMON1OT ; $d273 + ld d, $5 + ld a, [$cf95] 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] + 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 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,PokemartTellSellPriceText - 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 + 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 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 - callab Func_39bd5 - 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,PokemartTellBuyPriceText - 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 + 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 nz,.skipSettingFlag2 - ld a,$01 - ld [$cf0a],a -.skipSettingFlag2 - ld a,(SFX_02_5a - SFX_Headers_02) / 3 - 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 "@" - -PokemartTellBuyPriceText: ; 6e11 (1:6e11) - TX_FAR _PokemartTellBuyPriceText - 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 "@" - -PokemartTellSellPriceText: ; 6e2a (1:6e2a) - TX_FAR _PokemartTellSellPriceText - 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 "@" - -LearnMove: ; 6e43 (1:6e43) - call SaveScreenTilesToBuffer1 - ld a, [wWhichPokemon] ; $cf92 + 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 - call GetPartyMonName - ld hl, $cd6d - ld de, $d036 + ld a, [$cf95] + and a + jr z, .asm_7bfa + ld hl, W_BOXMON1NAME +.asm_7bfa ld bc, $b - call CopyData - -DontAbandonLearning: ; 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 TryingToLearn - pop de - jp c, AbandonLearning - push hl - push de - ld [$d11e], a - call GetMoveName - ld hl, OneTwoAndText - 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, PrintLearnedMove - ld a, [wWhichPokemon] ; $cf92 - ld b, a - ld a, [wPlayerMonNumber] ; $cc2f - cp b - jp nz, PrintLearnedMove - ld h, d - ld l, e - ld de, W_PLAYERMONMOVES - ld bc, $4 - call CopyData - ld bc, $11 + ld bc, $b add hl, bc - ld de, W_PLAYERMONPP ; $d02d - ld bc, $4 - call CopyData - jp PrintLearnedMove - -AbandonLearning: ; 6eda (1:6eda) - ld hl, AbandonLearningText - call PrintText - FuncCoord 14, 7 ; $c43a - ld hl, Coord - ld bc, $80f - ld a, $14 - ld [$d125], a - call DisplayTextBoxID - ld a, [wCurrentMenuItem] ; $cc26 + ld bc, wPokedexOwned ; $d2f7 + ld a, [$cf95] and a - jp nz, DontAbandonLearning - ld hl, DidNotLearnText - call PrintText - ld b, $0 - ret + jr z, .asm_7c15 + ld bc, $dee2 +.asm_7c15 + jp CopyDataUntil -PrintLearnedMove: ; 6efe (1:6efe) - ld hl, LearnedMove1Text - call PrintText +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, wPokedexSeen + ld a, $10 + call Predef + ld a, $1 + ld [$cc3c], a ret -TryingToLearn: ; 6f07 (1:6f07) - push hl - ld hl, TryingToLearnText - 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 - callab Func_39b87 - pop hl -.asm_6f39 - push hl - ld hl, WhichMoveToForgetText - 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, [$fff6] - set 2, a - ld [$fff6], a - call PlaceString - ld a, [$fff6] - res 2, a - ld [$fff6], 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 + +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 - jr c, .asm_6fa2 - pop hl - add hl, bc + 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 -.asm_6fa2 - ld hl, HMCantDeleteText - call PrintText - pop hl - jr .asm_6f39 -.asm_6fab - scf + 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 -LearnedMove1Text: ; 6fb4 (1:6fb4) - TX_FAR _LearnedMove1Text - db $b,6,"@" - -WhichMoveToForgetText: ; 6fb4 (1:6fb4) - TX_FAR _WhichMoveToForgetText - db "@" +; clears all button presses +DiscardButtonPresses: ; c034 (3:4034) + xor a + ld [H_CURRENTPRESSEDBUTTONS], a + ld [H_NEWLYPRESSEDBUTTONS], a + ld [H_NEWLYRELEASEDBUTTONS], a + ret -AbandonLearningText: ; 6fb9 (1:6fb9) - TX_FAR _AbandonLearningText - db "@" +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 -DidNotLearnText: ; 6fbe (1:6fbe) - TX_FAR _DidNotLearnText - db "@" +INCLUDE "data/map_songs.asm" -TryingToLearnText: ; 6fc3 (1:6fc3) - TX_FAR _TryingToLearnText - db "@" +INCLUDE "data/map_header_banks.asm" -OneTwoAndText: ; 6fc8 (1:6fc8) - TX_FAR _OneTwoAndText - db $a - db $8 - ld a, (SFX_02_58 - SFX_Headers_02) / 3 - call PlaySoundWaitForCurrent - ld hl, PoofText +Func_c335: ; c335 (3:4335) + ld a, $90 + ld [$ffb0], a + ld [rWY], a ; $ff4a + xor a + ld [H_AUTOBGTRANSFERENABLED], a ; $ffba + 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 -PoofText: ; 6fd7 (1:6fd7) - TX_FAR _PoofText - db $a -ForgotAndText: ; 6fdc (1:6fdc) - TX_FAR _ForgotAndText - db "@" - -HMCantDeleteText: ; 6fe1 (1:6fe1) - TX_FAR _HMCantDeleteText - 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] +Func_c35f: ; c35f (3:435f) + ld a, [$d3ae] and a - jr nz, .declinedHealing ; if the player chose No - call SetLastBlackoutMap - 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 - callba AnimateHealingMachine ; 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 + ret z ld c, a - call DelayFrames - jr .done -.declinedHealing - call LoadScreenTilesFromBuffer1 ; restore screen -.done - ld hl, PokemonCenterFarewellText - call PrintText - jp UpdateSprites ; move sprites + 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 ; $ff8b + 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 -PokemonCenterWelcomeText: ; 705d (1:705d) - TX_FAR _PokemonCenterWelcomeText - db "@" +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 -ShallWeHealYourPokemonText: ; 7062 (1:7062) - db $a - TX_FAR _ShallWeHealYourPokemonText - db "@" +INCLUDE "data/force_bike_surf.asm" -NeedYourPokemonText: ; 7068 (1:7068) - TX_FAR _NeedYourPokemonText - db "@" +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 -PokemonFightingFitText: ; 706d (1:706d) - TX_FAR _PokemonFightingFitText - db "@" +PointerTable_c422: ; c422 (3:4422) + dw .asm_c42a + dw .asm_4434 + dw .asm_443A + dw .asm_4440 -PokemonCenterFarewellText: ; 7072 (1:7072) - db $a - TX_FAR _PokemonCenterFarewellText - db "@" +.asm_c42a + ld a, [W_CURMAPHEIGHT] ; $d368 + add a + dec a + cp b + jr z, .setCarry + jr .resetCarry -SetLastBlackoutMap: -; Set the map to return to when -; blacking out or using Teleport or Dig. -; Safari rest houses don't count. +.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 - ld hl, SafariZoneRestHouses - ld a, [W_CURMAP] - ld b, a -.loop + 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] - cp -1 - jr z, .notresthouse - cp b - jr nz, .loop - jr .done - -.notresthouse - ld a, [wLastMap] - ld [wLastBlackoutMap], a -.done + ld h, [hl] + ld l, a + ld a, [$cfc6] + ld de, $1 + call IsInArray +.asm_c473 + pop bc + pop de pop hl ret -SafariZoneRestHouses: - db SAFARI_ZONE_REST_HOUSE_2 - db SAFARI_ZONE_REST_HOUSE_3 - db SAFARI_ZONE_REST_HOUSE_4 - db -1 +.pointerTable_c477: ; c477 (3:4477) + dw .arrayData_c47f + dw .arrayData_c487 + dw .arrayData_c48a + dw .arrayData_c48d -; 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) +.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 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 + jr .asm_c473 -; 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 +Func_c49d: ; c49d (3:449d) + push hl + push de + push bc + callba HandleDoors + 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 -StartMenuPokedexText: ; 718f (1:718f) - db "POKéDEX@" - -StartMenuPokemonText: ; 7197 (1:7197) - db "POKéMON@" - -StartMenuItemText: ; 719f (1:719f) - db "ITEM@" +INCLUDE "data/warp_tile_ids.asm" -StartMenuSaveText: ; 71a4 (1:71a4) - db "SAVE@" +PrintSafariZoneSteps: ; 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 + 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 -StartMenuResetText: ; 71a9 (1:71a9) - db "RESET@" +SafariSteps: ; c579 (3:4579) + db "/500@" -StartMenuExitText: ; 71af (1:71af) - db "EXIT@" +SafariBallText: ; c57e (3:457e) + db "BALL×× @" -StartMenuOptionText: ; 71b4 (1:71b4) - db "OPTION@" +Func_c586: ; c586 (3:4586) + call Load16BitRegisters -PrintStartMenuItem: ; 71bb (1:71bb) - push hl - call PlaceString - pop hl - ld de,$28 - add hl,de +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 -CableClubNPC: ; 71c5 (1:71c5) - ld hl, CableClubNPCText1 - call PrintText - ld a, [$d74b] - bit 5, a - jp nz, Func_71e1 - ld c, $3c - call DelayFrames - ld hl, CableClubNPCText6 - 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, [$ffaa] - cp $2 - jr z, .asm_721a ; 0x71ef $29 - cp $1 - jr z, .asm_721a ; 0x71f3 $25 - ld a, $ff - ld [$ffaa], a - ld a, $2 - ld [$ff01], a - xor a - ld [$ffad], a - ld a, $80 - ld [$ff02], a - ld a, [$cc47] - dec a - ld [$cc47], a - jr z, .asm_7287 ; 0x720b $7a - ld a, $1 - ld [$ff01], a - ld a, $81 - ld [$ff02], 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 - call PrintText +Func_c5be: ; c5be (3:45be) xor a - ld [$cc34], a - call YesNoChoice - ld a, $1 - ld [$cc34], a - ld a, [$cc26] + ld [$ffdb], a + ld hl, W_YCOORD ; $d361 + ld a, [hli] + ld d, a + ld e, [hl] + ld a, [$c109] and a - jr nz, .asm_728f ; 0x723e $4f - callab SaveSAVtoSRAM - call WaitForSoundToFinish - ld a, (SFX_02_5d - SFX_Headers_02) / 3 - call PlaySoundWaitForCurrent - ld hl, CableClubNPCText3 - call PrintText - ld hl, $cc47 - ld a, $3 - ld [hli], a - xor a - ld [hl], a - ld [$ffa9], a - ld [$cc42], a - call Func_227f - ld hl, $cc47 + 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] - inc a - jr nz, Func_72a8 ; 0x726b $3b + 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 [$ffdc], a ld a, [hl] + ld [$ffdd], a + ld a, [W_NUMSPRITES] ; $d4e1 + ld c, a + ld de, $f + ld hl, $c214 + ld a, [$ffdb] + and $3 + jr z, .asm_c678 +.asm_c659 + inc hl + ld a, [$ffdd] + cp [hl] + jr nz, .asm_c672 + dec hl + ld a, [hli] + ld b, a + ld a, [$ffdb] + rrca + jr c, .asm_c66c + ld a, [$ffdc] + dec a + jr .asm_c66f +.asm_c66c + ld a, [$ffdc] 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 - call PrintText - jr Func_7298 ; 0x7285 $11 -.asm_7287 - ld hl, CableClubNPCText7 - call PrintText - jr Func_7298 ; 0x728d $9 -.asm_728f - call Func_72d7 - ld hl, CableClubNPCText5 - 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] +.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, [$ffdc] + cp b + jr nz, .asm_c691 + ld b, [hl] + ld a, [$ffdb] + bit 2, a + jr nz, .asm_c68b + ld a, [$ffdd] + inc a + jr .asm_c68e +.asm_c68b + ld a, [$ffdd] + 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 - ld [$cc34], a ret -Func_72a8: ; 72a8 (1:72a8) - xor a +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 hl, LinkMenu - ld b, BANK(LinkMenu) - 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 [$ffaa], a - ld a, $2 - ld [$ff01], a + ld a, [de] + ld [$d11e], a + push de + ld a, [wWhichPokemon] ; $cf92 + ld hl, W_PARTYMON1NAME ; $d2b5 + call GetPartyMonName xor a - ld [$ffad], a - ld a, $80 - ld [$ff02], 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 + ld [wJoypadForbiddenButtonsMask], a + call EnableAutoTextBoxDrawing + ld a, $d0 + ld [H_DOWNARROWBLINKCNT2], a ; $ff8c + 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 - call GetAddressOfScreenCoords - call TextBoxBorder + ld hl, wWhichPokemon ; $cf92 + inc [hl] 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 + 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, (SFX_02_43 - SFX_Headers_02) / 3 + call PlaySound +.asm_c733 + ld a, $14 + call Predef ; indirect jump to AnyPlayerPokemonAliveCheck (3ca83 (f:4a83)) + ld a, d + and a + jr nz, .asm_c74f + call EnableAutoTextBoxDrawing + ld a, $d1 + ld [H_DOWNARROWBLINKCNT2], a ; $ff8c + call DisplayTextID + ld hl, $d72e + set 5, [hl] + ld a, $ff + jr .asm_c750 +.asm_c74f + xor a +.asm_c750 + ld [$d12d], a 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 +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, Tilesets + 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 [$ffd7], a + xor a + ld [$ffd8], a + pop hl + ld a, [W_CURMAPTILESET] ; $d367 + push hl + push de + ld hl, DungeonTilesets ; $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] ; $ff8b + 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 -; 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 +INCLUDE "data/dungeon_tilesets.asm" -; 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 +INCLUDE "data/tileset_headers.asm" -; 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 +Func_c8de: ; c8de (3:48de) + ld a, [W_DAYCARE_IN_USE] and a - jr z,.addedRows - add hl,bc - dec d - jr .loop -.addedRows - pop bc - add hl,de + 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 -; 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 +INCLUDE "data/hide_show_data.asm" -; note that there is no terminator +PrintUsedStrengthText: ; cd99 (3:4d99) + ld hl, $d728 + set 0, [hl] + ld hl, UsedStrengthText + call PrintText + ld hl, CanMoveBouldersText + jp PrintText -BuySellQuitText: ; 7413 (1:7413) - db "BUY" - next "SELL" - next "QUIT@@" +UsedStrengthText: ; cdaa (3:4daa) + TX_FAR _UsedStrengthText + db $08 ; asm + ld a, [$cf91] + call PlayCry + call Delay3 + jp TextScriptEnd -UseTossText: ; 7422 (1:7422) - db "USE" - next "TOSS@" +CanMoveBouldersText: ; cdbb (3:4dbb) + TX_FAR _CanMoveBouldersText + db "@" -JapaneseSaveMessageText: ; 742b (1:742b) - db "きろく" - next "メッセージ@" +CheckForForcedBikeSurf: ; 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 SEAFOAM_ISLANDS_5 + 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, CurrentTooFastText + jp PrintText +.asm_cdec + ld hl, $d728 + res 1, [hl] + ld hl, CyclingIsFunText + jp PrintText -JapaneseSpeedOptionsText: ; 7435 (1:7435) - db "はやい" - next "おそい@" +CoordsData_cdf7: ; cdf7 (3:4df7) + db $0B,$07,$FF -MoneyText: ; 743d (1:743d) - db "MONEY@" +CurrentTooFastText: ; cdfa (3:4dfa) + TX_FAR _CurrentTooFastText + db "@" -JapaneseMochimonoText: ; 7443 (1:7443) - db "もちもの@" +CyclingIsFunText: ; cdff (3:4dff) + TX_FAR _CyclingIsFunText + db "@" -JapaneseMainMenuText: ; 7448 (1:7448) - db "つづきから" - next "さいしょから@" +; 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 -BattleMenuText: ; 7455 (1:7455) - db "FIGHT ",$E1,$E2 - next "ITEM RUN@" +; 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 -SafariZoneBattleMenuText: ; 7468 (1:7468) - db "BALL× BAIT" - next "THROW ROCK RUN@" +; wild pokemon data: from 4EB8 to 55C7 -SwitchStatsCancelText: ; 7489 (1:7489) - db "SWITCH" - next "STATS" - next "CANCEL@" +LoadWildData: ; ceb8 (3:4eb8) + ld hl,WildDataPointers + ld a,[W_CURMAP] -JapaneseAhText: ; 749d (1:749d) - db "アッ!@" + ; 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 -JapanesePokedexMenu: ; 74a1 (1:74a1) - db "データをみる" - next "なきごえ" - next "ぶんぷをみる" - next "キャンセル@" +INCLUDE "data/wild_mons.asm" -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 +INCLUDE "engine/items/items.asm" -CurrencyString: ; 74e2 (1:74e2) - db " ¥@" +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. -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 +; 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 - 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 + call FillMemory + +; Alter these based on owned badges. + ld de, $cd49 + ld hl, $cd3f + ld a, [W_OBTAINEDBADGES] 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 + 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 -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 +; 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 - ld hl, $d12c - bit 7, [hl] - res 7, [hl] - jr z, .asm_758d + +; Badge no. + ld a, [$cd3d] + ld [hli], a 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] + ld [$cd3d], a + +; Names aren't printed if the badge is owned. + ld a, [de] 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, (SFX_02_40 - SFX_Headers_02) / 3 - call PlaySound - jr .asm_760f -.asm_7603 - xor a - ld [$d12c], a - call HandleMenuInput + 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 - 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 + ld de, 4 + add hl, de -Func_763e: ; 763e (1:763e) - ld de, $cee9 - ld bc, $506 -.asm_7644 - ld a, [hli] - ld [de], a + pop de 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 + jr nz, .DrawBadge ret -Func_7656: ; 7656 (1:7656) - ld de, $cee9 - ld bc, $506 -.asm_765c - ld a, [de] - inc de +.PlaceTiles 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 + inc a + ld [hl], a + inc a 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 +.FaceBadgeTiles + db $20, $28, $30, $38, $40, $48, $50, $58 -.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@" +GymLeaderFaceAndBadgeTileGraphics: ; ea9e (3:6a9e) + INCBIN "gfx/badges.w16.2bpp" -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 [$fff7], 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 +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 - 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, $3 + add hl, de ld e, a - ld d, $0 + ld a, b + and a + jr z, .asm_eebb +.asm_eeb7 add hl, de - ld de, $ffd8 - ld a, [$cd41] -.asm_7747 + 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 - dec a - jr nz, .asm_7747 + 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] ; $ffba + push af + ld a, [$ffd7] + push af 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 [H_AUTOBGTRANSFERENABLED], a ; $ffba + ld [$ffd7], a + call LoadCurrentMapView + call GoPAL_SET_CF1C + ld hl, $d526 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 + 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 [$ffbe], a + ld c, $9 +.asm_ef0f + push bc + push hl + push hl + ld hl, $c378 + ld de, $14 + ld a, [$ffbe] +.asm_ef1a + add hl, de + dec a + jr nz, .asm_ef1a + call ScheduleRowRedrawHelper pop hl - ld a, [$cd42] - ld [$fff7], a - FuncCoord 0, 12 ; $c490 - ld hl, Coord - ld a, [$cd42] - inc a - ld e, a - ld d, $0 + ld de, $20 + ld a, [$ffbe] + ld c, a +.asm_ef28 add hl, de - ld de, PokemonMenuEntries ; $77c2 - jp PlaceString + ld a, h + and $3 + or $98 + dec c + jr nz, .asm_ef28 + ld [$ffd2], a + ld a, l + ld [H_SCREENEDGEREDRAWADDR], a ; $ffd1 + ld a, $2 + ld [H_SCREENEDGEREDRAW], a ; $ffd0 + call DelayFrame + ld hl, $ffbe + inc [hl] + inc [hl] + pop hl + pop bc + dec c + jr nz, .asm_ef0f + pop af + ld [$ffd7], a + pop af + ld [H_AUTOBGTRANSFERENABLED], a ; $ffba + ret -FieldMoveNames: ; 778d (1:778d) - db "CUT@" - db "FLY@" - db "@" - db "SURF@" - db "STRENGTH@" - db "FLASH@" - db "DIG@" - db "TELEPORT@" - db "SOFTBOILED@" +Func_ef4e: ; ef4e (3:6f4e) + ld a, h + sub b + ret nz + ld a, l + sub c + ret -PokemonMenuEntries: ; 77c2 (1:77c2) - db "STATS" - next "SWITCH" - next "CANCEL@" +INCLUDE "engine/overworld/cut.asm" -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 +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 -.asm_77ea - dec c - jr z, .asm_7821 - ld a, [de] ; de is RAM address of move - and a - jr z, .asm_7821 + 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 - inc de ; go to next move - ld hl, FieldMoveDisplayData ; $7823 -.asm_77f6 + 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, .asm_77ea + jr z, .done ; end of list cp b - jr z, .asm_7802 - inc hl - inc hl - jr .asm_77f6 -.asm_7802 - ld a, b - ld [$cd43], a + jr nz, .done ; not for current map anymore 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 + 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 -; 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 - - -DrainHPEffect_: ; 783f (1:783f) - ld hl, W_DAMAGE ; $d0d7 - ld a, [hl] - srl a ; divide damage by 2 - ld [hli], a - ld a, [hl] - rr a - ld [hld], a - or [hl] - jr nz, .asm_784f +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] -.asm_784f - ld hl, W_PLAYERMONCURHP ; $d015 - ld de, W_PLAYERMONMAXHP ; $d023 - ld a, [H_WHOSETURN] ; $fff3 - and a - jp z, Func_7861 - ld hl, W_ENEMYMONCURHP ; $cfe6 - ld de, W_ENEMYMONMAXHP ; $cff4 + pop hl + inc hl + inc hl + jr .missableObjectsLoop -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] +; 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 a, [de] - dec de - sub b + ld hl, W_MISSABLEOBJECTLIST +.loop 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] ; $fff3 + 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 - FuncCoord 10, 9 ; $c45e - ld hl, Coord - ld a, $1 - jr z, .asm_78aa - FuncCoord 2, 2 ; $c3ca - ld hl, Coord + jr nz, .hidden +.notHidden 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)) - callab ReadPlayerMonCurHPAndStatus - ld hl, SuckedHealthText ; $78dc - ld a, [H_WHOSETURN] ; $fff3 - and a - ld a, [W_PLAYERMOVEEFFECT] ; $cfd3 - jr z, .asm_78d2 - ld a, [W_ENEMYMOVEEFFECT] ; $cfcd -.asm_78d2 - cp DREAM_EATER_EFFECT - jr nz, .asm_78d9 - ld hl, DreamWasEatenText -.asm_78d9 - jp PrintText - -SuckedHealthText: ; 78dc (1:78dc) - TX_FAR _SuckedHealthText - db "@" +.hidden + ld [$ffe5], a + ret -DreamWasEatenText: ; 78e1 (1:78e1) - TX_FAR _DreamWasEatenText - db "@" +; 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 -PlayerPC: ; 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, (SFX_02_45 - SFX_Headers_02) / 3 - call PlaySound - ld hl, TurnedOnPC2Text - call PrintText +; 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 -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 +; 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 - ld hl, wListScrollOffset ; $cc36 - ld [hli], a + jr .done +.resetBit + ld a, [hl] + ld b, a + ld a, d + xor $ff + and b ld [hl], a - ld [wPlayerMonNumber], a ; $cc2f - ld hl, WhatDoYouWantText - 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, (SFX_02_46 - SFX_Headers_02) / 3 - 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 + 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_7995: ; 7995 (1:7995) +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 [wCurrentMenuItem], a ; $cc26 - ld [wListScrollOffset], a ; $cc36 - ld a, [wNumBagItems] ; $d31d - and a - jr nz, Func_79ab - ld hl, NothingToDepositText - call PrintText - jp Func_790c - -Func_79ab: ; 79ab (1:79ab) - ld hl, WhatToDepositText - 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, DepositHowManyText - call PrintText - call DisplayChooseQuantityMenu - cp $ff - jp z, Func_79ab -.asm_79e7 - ld hl, wNumBoxItems ; $d53a - call AddItemToInventory - jr c, .asm_79f8 - ld hl, NoRoomToStoreText - call PrintText - jp Func_79ab -.asm_79f8 - ld hl, wNumBagItems ; $d31d - call RemoveItemFromInventory - call WaitForSoundToFinish - ld a, (SFX_02_55 - SFX_Headers_02) / 3 - call PlaySound - call WaitForSoundToFinish - ld hl, ItemWasStoredText - call PrintText - jp Func_79ab - -Func_7a12: ; 7a12 (1:7a12) - xor a - ld [wCurrentMenuItem], a ; $cc26 - ld [wListScrollOffset], a ; $cc36 - ld a, [wNumBoxItems] ; $d53a + ld [H_DOWNARROWBLINKCNT2], a ; $ff8c + call IsSpriteInFrontOfPlayer + ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c + ld [$d718], a and a - jr nz, Func_7a28 - ld hl, NothingStoredText - call PrintText - jp Func_790c - -Func_7a28: ; 7a28 (1:7a28) - ld hl, WhatToWithdrawText - 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] + jp z, Func_f2dd + ld hl, $c101 + ld d, $0 + ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c + 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 - jr nz, .asm_7a64 - ld hl, WithdrawHowManyText - call PrintText - call DisplayChooseQuantityMenu - cp $ff - jp z, Func_7a28 -.asm_7a64 - ld hl, wNumBagItems ; $d31d - call AddItemToInventory - jr c, .asm_7a75 - ld hl, CantCarryMoreText - call PrintText - jp Func_7a28 -.asm_7a75 - ld hl, wNumBoxItems ; $d53a - call RemoveItemFromInventory - call WaitForSoundToFinish - ld a, (SFX_02_55 - SFX_Headers_02) / 3 + 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, (SFX_02_53 - SFX_Headers_02) / 3 call PlaySound - call WaitForSoundToFinish - ld hl, WithdrewItemText - 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, NothingStoredText - call PrintText - jp Func_790c - -Func_7aa5: ; 7aa5 (1:7aa5) - ld hl, WhatToTossText - 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, TossHowManyText - 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@" - -TurnedOnPC2Text: ; 7b22 (1:7b22) - TX_FAR _TurnedOnPC2Text - db "@" - -WhatDoYouWantText: ; 7b27 (1:7b27) - TX_FAR _WhatDoYouWantText - db "@" - -WhatToDepositText: ; 7b2c (1:7b2c) - TX_FAR _WhatToDepositText - db "@" - -DepositHowManyText: ; 7b31 (1:7b31) - TX_FAR _DepositHowManyText - db "@" - -ItemWasStoredText: ; 7b36 (1:7b36) - TX_FAR _ItemWasStoredText - db "@" - -NothingToDepositText: ; 7b3b (1:7b3b) - TX_FAR _NothingToDepositText - db "@" - -NoRoomToStoreText: ; 7b40 (1:7b40) - TX_FAR _NoRoomToStoreText - db "@" - -WhatToWithdrawText: ; 7b45 (1:7b45) - TX_FAR _WhatToWithdrawText - db "@" + ld hl, wFlags_0xcd60 + set 1, [hl] + ret -WithdrawHowManyText: ; 7b4a (1:7b4a) - TX_FAR _WithdrawHowManyText - db "@" +MovementData_f2ad: ; f2ad (3:72ad) + db $40,$FF -WithdrewItemText: ; 7b4f (1:7b4f) - TX_FAR _WithdrewItemText - db "@" +MovementData_f2af: ; f2af (3:72af) + db $00,$FF -NothingStoredText: ; 7b54 (1:7b54) - TX_FAR _NothingStoredText - db "@" +MovementData_f2b1: ; f2b1 (3:72b1) + db $80,$FF -CantCarryMoreText: ; 7b59 (1:7b59) - TX_FAR _CantCarryMoreText - db "@" +MovementData_f2b3: ; f2b3 (3:72b3) + db $C0,$FF -WhatToTossText: ; 7b5e (1:7b5e) - TX_FAR _WhatToTossText - db "@" +Func_f2b5: ; f2b5 (3:72b5) + ld a, [$d730] + bit 0, a + ret nz + callab Func_79f54 + call DiscardButtonPresses + ld [wJoypadForbiddenButtonsMask], a + call Func_f2dd + set 7, [hl] + ld a, [$d718] + ld [H_DOWNARROWBLINKCNT2], a ; $ff8c + call GetSpriteMovementByte2Pointer + ld [hl], $10 + ld a, (SFX_02_56 - SFX_Headers_02) / 3 + jp PlaySound -TossHowManyText: ; 7b63 (1:7b63) - TX_FAR _TossHowManyText - db "@" +Func_f2dd: ; f2dd (3:72dd) + ld hl, wFlags_0xcd60 + res 1, [hl] + res 6, [hl] + ret -_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 +_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 de - ld [hli], a inc a - jr nz, .asm_7b81 + cp $7 + ret nc + ld [de], a + ld a, [de] + ld [$ffe4], 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 d, $5 - ld a, [$cf95] - and a - jr z, .asm_7b97 - ld hl, W_BOXMON1OT - ld d, $13 -.asm_7b97 - ld a, [wWhichPokemon] ; $cf92 + ld a, [$cc49] + and $f + jr z, .asm_f315 + ld hl, W_ENEMYMON1OT +.asm_f315 + ld a, [$ffe4] + dec a 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 hl, W_PLAYERNAME ; $d158 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] + call CopyData + ld a, [$cc49] 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 + jr nz, .asm_f33f 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 + ld a, [$ffe4] + 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, [$ffe4] + dec a + ld bc, $2c 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 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 + 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 - ld hl, wPokedexSeen - 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] + push bc + call _HandleBitArray + pop bc + ld hl, wPokedexSeen ; $d30a + call _HandleBitArray + pop hl + push hl + ld a, [W_ISINBATTLE] ; $d057 and a - ret z - cpl + jr nz, .copyEnemyMonData + call GenRandom ; generate random IVs 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) + 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 [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 - -INCLUDE "data/map_songs.asm" - -INCLUDE "data/map_header_banks.asm" - -Func_c335: ; c335 (3:4335) - ld a, $90 - ld [$ffb0], a - ld [rWY], a ; $ff4a + 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 [H_AUTOBGTRANSFERENABLED], a ; $ffba - 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 [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 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, [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] - ld [$d42f], a - ld a, [hl] - ld [H_DOWNARROWBLINKCNT1], a ; $ff8b - 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 + inc de + push de + ld [de], a 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 + inc de + ld [de], a ld a, [hli] - cp b ;compare y-coord - jr nz, .incorrectY + inc de + ld [de], a 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 - -INCLUDE "data/force_bike_surf.asm" - -Func_c3ff: ; c3ff (3:43ff) - push hl + inc de + ld [de], a 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 + 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 - jp [hl] -.asm_c41e - pop bc + ld a, [W_CURENEMYLVL] + ld d, a + callab CalcExperience 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 - 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 + call AddPokemonToParty_WriteMovePP + inc de + ld a, [W_CURENEMYLVL] ; $d127 + ld [de], a + inc de + ld a, [W_ISINBATTLE] ; $d057 dec a - cp c - jr z, .setCarry - jr .resetCarry -.resetCarry - and a - ret -.setCarry + 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 -Func_c44e: ; c44e (3:444e) +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 - 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 + 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 -.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 +; adds enemy mon [$cf91] (at position [$cf92] in enemy list) to own party +; used in the cable club trade center +_AddEnemyMonToPlayerParty: ; f49d (3:749d) + ld hl, W_NUMINPARTY + ld a, [hl] + cp $6 scf - jr .asm_c473 -.asm_c49a + 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 - jr .asm_c473 + ret ; return success -Func_c49d: ; c49d (3:449d) - push hl - push de - push bc - callba Func_1a609 - jr c, .asm_c4c8 - ld a, [W_CURMAPTILESET] ; $d367 - add a +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 - 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 + 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 + callba Func_58f43 + 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 -INCLUDE "data/warp_tile_ids.asm" +; 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 -PrintSafariZoneSteps: ; 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 - 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 +_HandleBitArray: ; f669 (3:7669) + push hl + push de + push bc + ld a, c 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] + 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 -.asm_c5b9 - ld c, a - ld [$cfc6], a - ret - -Func_c5be: ; c5be (3:45be) - xor a - ld [$ffdb], 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] + ld d, $1 +.shiftLeftLoop ; d = 1 << e, bitmask for the used bit 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 + 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 - 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 +HealParty: ; f6a5 (3:76a5) + ld hl, W_PARTYMON1 + ld de, W_PARTYMON1_HP +.HealPokemon: ; f6ab (3:76ab) 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 + 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, [hli] - ld [$ffdc], a ld a, [hl] - ld [$ffdd], a - ld a, [W_NUMSPRITES] ; $d4e1 - ld c, a - ld de, $f - ld hl, $c214 - ld a, [$ffdb] - and $3 - jr z, .asm_c678 -.asm_c659 - inc hl - ld a, [$ffdd] - cp [hl] - jr nz, .asm_c672 - dec hl - ld a, [hli] - ld b, a - ld a, [$ffdb] - rrca - jr c, .asm_c66c - ld a, [$ffdc] + and a + jr z, .HealNext ; Skip if there's no move here dec a - jr .asm_c66f -.asm_c66c - ld a, [$ffdc] - inc a -.asm_c66f - cp b - jr z, .asm_c697 -.asm_c672 - dec c - jr z, .asm_c69a + ld hl, $001c ; PP offset add hl, de - jr .asm_c659 -.asm_c678 - ld a, [hli] - ld b, a - ld a, [$ffdc] - cp b - jr nz, .asm_c691 - ld b, [hl] - ld a, [$ffdb] - bit 2, a - jr nz, .asm_c68b - ld a, [$ffdd] - inc a - jr .asm_c68e -.asm_c68b - ld a, [$ffdd] - 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 ; $ff8c - call DisplayTextID + 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 -.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, (SFX_02_43 - SFX_Headers_02) / 3 - 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 ; $ff8c - 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 + push bc ld b, a - add a + ld a, [hl] + and $c0 add b - jr nc, .asm_c765 - inc d -.asm_c765 - ld e, a - ld hl, Tilesets + 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 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 [$ffd7], a - xor a - ld [$ffd8], a + ld [de], a ; Restore full HP + pop de pop hl - ld a, [W_CURMAPTILESET] ; $d367 push hl - push de - ld hl, DungeonTilesets ; $47b2 - ld de, $1 - call IsInArray - pop de + ld bc, $002c + ld h, d + ld l, e + add hl, bc + ld d, h + ld e, l pop hl - jr c, .asm_c797 - ld a, [W_CURMAPTILESET] ; $d367 + jr .HealPokemon ; Next Pokémon +.DoneHealing + xor a + ld [wWhichPokemon], a + ld [$d11e], a + ld a, [W_NUMINPARTY] ld b, a - ld a, [H_DOWNARROWBLINKCNT1] ; $ff8b - 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 - -INCLUDE "data/dungeon_tilesets.asm" - -INCLUDE "data/tileset_headers.asm" - -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 +.restoreBonusPPLoop ; loop to restore bonus PP from PP Ups + push bc + call RestoreBonusPP + pop bc + ld hl, wWhichPokemon inc [hl] - ld a, [hl] - cp $50 - ret c - ld a, $50 - ld [hl], a + dec b + jr nz,.restoreBonusPPLoop ret -INCLUDE "data/hide_show_data.asm" - -PrintUsedStrengthText: ; cd99 (3:4d99) - ld hl, $d728 - set 0, [hl] - ld hl, UsedStrengthText - call PrintText - ld hl, CanMoveBouldersText - jp PrintText - -UsedStrengthText: ; cdaa (3:4daa) - TX_FAR _UsedStrengthText - db $08 ; asm - ld a, [$cf91] - call PlayCry - call Delay3 - jp TextScriptEnd - -CanMoveBouldersText: ; cdbb (3:4dbb) - TX_FAR _CanMoveBouldersText - db "@" - -CheckForForcedBikeSurf: ; 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 SEAFOAM_ISLANDS_5 - 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, CurrentTooFastText - jp PrintText -.asm_cdec - ld hl, $d728 - res 1, [hl] - ld hl, CyclingIsFunText - jp PrintText - -CoordsData_cdf7: ; cdf7 (3:4df7) - db $0B,$07,$FF - -CurrentTooFastText: ; cdfa (3:4dfa) - TX_FAR _CurrentTooFastText - db "@" - -CyclingIsFunText: ; cdff (3:4dff) - TX_FAR _CyclingIsFunText - 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 +; predef $9 +; predef $a +; predef $d +; predef $e +Func_f71e: ; f71e (3:771e) + call Load16BitRegisters + xor a + ld [$ffa5], a + ld [$ffa6], a + ld [$ffa7], a + ld d, $1 +.asm_f72a + ld a, [$ffa2] + and $f0 + jr nz, .asm_f75b + inc d + ld a, [$ffa2] + swap a + and $f0 + ld b, a + ld a, [$ffa3] + swap a + ld [$ffa3], a + and $f + or b + ld [$ffa2], a + ld a, [$ffa3] + and $f0 + ld b, a + ld a, [$ffa4] + swap a + ld [$ffa4], a + and $f + or b + ld [$ffa3], a + ld a, [$ffa4] + and $f0 + ld [$ffa4], a + jr .asm_f72a +.asm_f75b 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] + push de + call Func_f800 + pop de + ld a, b + swap a + and $f0 + ld [$ffa5], a + dec d + jr z, .asm_f7bc + push de + call Func_f7d7 + call Func_f800 + pop de + ld a, [$ffa5] + or b + ld [$ffa5], 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 [$ffa6], a + dec d + jr z, .asm_f7bc + push de + call Func_f7d7 + call Func_f800 + pop de + ld a, [$ffa6] + or b + ld [$ffa6], 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 [$ffa7], a + dec d + jr z, .asm_f7bc + push de + call Func_f7d7 + call Func_f800 + pop de + ld a, [$ffa7] + or b + ld [$ffa7], a +.asm_f7bc + ld a, [$ffa5] + ld [$ffa2], a + ld a, [$ffa6] + ld [$ffa3], a + ld a, [$ffa7] + ld [$ffa4], a + pop de + ld a, $6 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 + ret z +.asm_f7ce + push af + call Func_f7d7 + pop af 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 + jr nz, .asm_f7ce 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 +Func_f7d7: ; f7d7 (3:77d7) + ld a, [$ffa4] + swap a + and $f + ld b, a + ld a, [$ffa3] + swap a + ld [$ffa3], a + and $f0 + or b + ld [$ffa4], a + ld a, [$ffa3] + and $f + ld b, a + ld a, [$ffa2] + swap a + ld [$ffa2], a + and $f0 + or b + ld [$ffa3], a + ld a, [$ffa2] + and $f + ld [$ffa2], 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 - 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 + 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 - inc de ; de = address of the slot following the emptied one -.loop ; loop to move up the following slots - ld a,[de] +.asm_f830 + ld [de], a 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 + dec b + jr nz, .asm_f830 +.asm_f835 ret -; wild pokemon data: from 4EB8 to 55C7 - -LoadWildData: ; ceb8 (3:4eb8) - ld hl,WildDataPointers - ld a,[W_CURMAP] +Func_f836: ; f836 (3:7836) + call Load16BitRegisters - ; 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 +Func_f839: ; f839 (3:7839) and a - ret z ; if no water data, we're done - ld de,W_WATERMONS ; otherwise, load surfing data - ld bc,$0014 - jp CopyData - -INCLUDE "data/wild_mons.asm" + 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 -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] +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 + 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 -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 +; writes two bytes $00 $ff to hl +InitializeEmptyList: ; f8a0 (3:78a0) 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 - callab IsGhostBattle - ld b,$10 - jp z,.next12 - ld a,[W_BATTLETYPE] + ld [hli], a 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, 1 << 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] + ld [hl], a + ret -; 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] +IsItemInBag_: ; 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 c,.next10 -.BallSuccess ;$578b - jr .BallSuccess2 -.next10 ;$578d - ld a,[H_QUOTIENT + 3] - ld [$d11e],a + 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 [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] + 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] ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) + ld b, a + ld a, [H_DIVIDEND] ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) + call CalcDifference + ld d, a 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 + jr nz, .asm_f8da + ld a, [$ff98] + set 0, a + ld [$ff98], a +.asm_f8da + ld a, [$ff9a] + ld b, a + ld a, [H_NUMTOPRINT] ; $ff96 (aliases: H_MULTIPLICAND) + call CalcDifference + ld e, a and a - jr z,.next13 - and a, 1 << 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 + jr nz, .asm_f8ec + ld a, [$ff98] + set 1, a + ld [$ff98], a +.asm_f8ec + ld a, [$ff98] + cp $3 + jr z, .asm_f926 + ld a, e + cp d + jr c, .asm_f90a + ld a, [$ff9d] + bit 1, a + jr nz, .asm_f900 + ld d, $c0 + jr .asm_f902 +.asm_f900 + ld d, $80 +.asm_f902 + ld a, [$ff9a] + add $1 + ld [$ff9a], a + jr .asm_f91c +.asm_f90a + ld a, [$ff9d] + bit 0, a + jr nz, .asm_f914 + ld d, $0 + jr .asm_f916 +.asm_f914 + ld d, $40 +.asm_f916 + ld a, [H_REMAINDER] ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) + add $1 + ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) +.asm_f91c + ld a, d + ld [hli], a + ld a, [$ff97] + inc a + ld [$ff97], a + jp Func_f8c8 +.asm_f926 + ld [hl], $ff + ret + +Func_f929: ; f929 (3:7929) 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... + ld [$ff9d], a + ld a, [$c104] + ld d, a + ld a, [$c106] + ld e, a + ld hl, wSpriteStateData1 + ld a, [H_DIVIDEND] ; $ff95 (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 ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) + pop hl inc hl - ld a,[hl] - push af ;...and status ailments + ld b, e + ld a, [hl] + call CalcDifference + jr nc, .asm_f97e 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 - callab Func_3eb01 - pop af - ld [$cf91],a + ld hl, $ff9d + bit 1, [hl] + set 1, [hl] 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,wPokedexOwned ;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] + jr .asm_f987 +.asm_f97e + push hl + ld hl, $ff9d + bit 1, [hl] + res 1, [hl] + pop hl +.asm_f987 + ld [$ffe5], a + ld a, $10 + ld [$ffe6], a + call Func_366b + ld a, [$ffe7] + ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND) + ld a, [$ff9b] 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 "@" + ret z + ld a, [$ff9d] + cpl + and $3 + ld [$ff9d], a + ret -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 +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 -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] +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,.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 + jr z, .asm_f9cf + inc hl + jr .asm_f9c4 +.asm_f9cf + ld a, [hl] +.asm_f9d0 + pop hl ret -SurfingGotOnText: ; da4c (3:5a4c) - TX_FAR _SurfingGotOnText - db "@" +DataTable_f9d2: ; f9d2 (3:79d2) + db $40, $40, $00, $80, $80, $20, $c0, $10, $ff -SurfingNoPlaceToGetOffText: ; da51 (3:5a51) - TX_FAR _SurfingNoPlaceToGetOffText - db "@" +Func_f9db: ; f9db (3:79db) + ret -ItemUsePokedex: ; da56 (3:5a56) - ld a,$29 - jp Predef +INCLUDE "engine/hp_bar.asm" -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,(SFX_02_3e - SFX_Headers_02) / 3 - call PlaySoundWaitForCurrent ; play sound - call WaitForSoundToFinish ; wait for sound to end - callab Func_3ad0e ; 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 +INCLUDE "engine/hidden_object_functions3.asm" -ItemUseVitamin: ; dab4 (3:5ab4) - ld a,[W_ISINBATTLE] - and a - jp nz,ItemUseNotTime +SECTION "bank4",ROMX,BANK[$4] -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,(SFX_02_3d - SFX_Headers_02) / 3 - 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,(SFX_02_3d - SFX_Headers_02) / 3 ; 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,(SFX_02_3e - SFX_Headers_02) / 3 ; 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,(SFX_02_3e - SFX_Headers_02) / 3 - 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 - callab CalcExperience ; 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 - callab PrintStatsBox ; 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 - callab Func_3ad0e ; evolve pokemon, if appropriate - ld a,$01 - ld [$cfcb],a - pop af - ld [$cf91],a - pop af - ld [wWhichPokemon],a - jp RemoveUsedItem +OakAideSprite: ; 10000 (4:4000) + INCBIN "gfx/sprites/oak_aide.2bpp" +RockerSprite: ; 10180 (4:4180) + INCBIN "gfx/sprites/rocker.2bpp" +SwimmerSprite: ; 10300 (4:4300) + INCBIN "gfx/sprites/swimmer.2bpp" +WhitePlayerSprite: ; 10480 (4:4480) + INCBIN "gfx/sprites/white_player.2bpp" +GymHelperSprite: ; 10540 (4:4540) + INCBIN "gfx/sprites/gym_helper.2bpp" +OldPersonSprite: ; 10600 (4:4600) + INCBIN "gfx/sprites/old_person.2bpp" +MartGuySprite: ; 106c0 (4:46c0) + INCBIN "gfx/sprites/mart_guy.2bpp" +FisherSprite: ; 10780 (4:4780) + INCBIN "gfx/sprites/fisher.2bpp" +OldMediumWomanSprite: ; 10840 (4:4840) + INCBIN "gfx/sprites/old_medium_woman.2bpp" +NurseSprite: ; 10900 (4:4900) + INCBIN "gfx/sprites/nurse.2bpp" +CableClubWomanSprite: ; 109c0 (4:49c0) + INCBIN "gfx/sprites/cable_club_woman.2bpp" +MrMasterballSprite: ; 10a80 (4:4a80) + INCBIN "gfx/sprites/mr_masterball.2bpp" +LaprasGiverSprite: ; 10b40 (4:4b40) + INCBIN "gfx/sprites/lapras_giver.2bpp" +WardenSprite: ; 10c00 (4:4c00) + INCBIN "gfx/sprites/warden.2bpp" +SsCaptainSprite: ; 10cc0 (4:4cc0) + INCBIN "gfx/sprites/ss_captain.2bpp" +Fisher2Sprite: ; 10d80 (4:4d80) + INCBIN "gfx/sprites/fisher2.2bpp" +BlackbeltSprite: ; 10f00 (4:4f00) + INCBIN "gfx/sprites/blackbelt.2bpp" +GuardSprite: ; 11080 (4:5080) + INCBIN "gfx/sprites/guard.2bpp" +BallSprite: ; 11140 (4:5140) + INCBIN "gfx/sprites/ball.2bpp" +OmanyteSprite: ; 11180 (4:5180) + INCBIN "gfx/sprites/omanyte.2bpp" +BoulderSprite: ; 111c0 (4:51c0) + INCBIN "gfx/sprites/boulder.2bpp" +PaperSheetSprite: ; 11200 (4:5200) + INCBIN "gfx/sprites/paper_sheet.2bpp" +BookMapDexSprite: ; 11240 (4:5240) + INCBIN "gfx/sprites/book_map_dex.2bpp" +ClipboardSprite: ; 11280 (4:5280) + INCBIN "gfx/sprites/clipboard.2bpp" +SnorlaxSprite: ; 112c0 (4:52c0) + INCBIN "gfx/sprites/snorlax.2bpp" +OldAmberSprite: ; 11300 (4:5300) + INCBIN "gfx/sprites/old_amber.2bpp" +LyingOldManSprite: ; 11340 (4:5340) + INCBIN "gfx/sprites/lying_old_man.2bpp" -VitaminStatRoseText: ; df24 (3:5f24) - TX_FAR _VitaminStatRoseText - db "@" +PokemonLogoGraphics: ; 11380 (4:5380) + INCBIN "gfx/pokemon_logo.w128.2bpp" -VitaminNoEffectText: ; df29 (3:5f29) - TX_FAR _VitaminNoEffectText - db "@" +FontGraphics: ; 11a80 (4:5a80) + INCBIN "gfx/font.w128.1bpp" -VitaminText: ; df2e (3:5f2e) - db "HEALTH@" - db "ATTACK@" - db "DEFENSE@" - db "SPEED@" - db "SPECIAL@" +ABTiles: ; 11e80 (4:5e80) + INCBIN "gfx/AB.2bpp" -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 +HpBarAndStatusGraphics: ; 11ea0 (4:5ea0) + INCBIN "gfx/hp_bar_and_status.2bpp" -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 +BattleHudTiles1: ; 12080 (4:6080) + INCBIN "gfx/battle_hud1.1bpp" -ThrewBaitText: ; dfa5 (3:5fa5) - TX_FAR _ThrewBaitText - db "@" +BattleHudTiles2: ; 12098 (4:6098) + INCBIN "gfx/battle_hud2.1bpp" -ThrewRockText: ; dfaa (3:5faa) - TX_FAR _ThrewRockText - db "@" +BattleHudTiles3: ; 120b0 (4:60b0) + INCBIN "gfx/battle_hud3.1bpp" -; 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 +NintendoCopyrightLogoGraphics: ; 120c8 (4:60c8) + INCBIN "gfx/copyright.h8.2bpp" -EscapeRopeTilesets: ; dffd (3:5ffd) - db FOREST, CEMETERY, CAVERN, FACILITY, INTERIOR - db $ff ; terminator +GamefreakLogoGraphics: ; 121f8 (4:61f8) + INCBIN "gfx/gamefreak.h8.2bpp" -ItemUseRepel: ; e003 (3:6003) - ld b,100 +TextBoxGraphics: ; 12288 (4:6288) + INCBIN "gfx/text_box.2bpp" -ItemUseRepelCommon: ; e005 (3:6005) - ld a,[W_ISINBATTLE] - and a - jp nz,ItemUseNotTime - ld a,b - ld [$d0db],a - jp PrintItemUseTextAndRemoveItem +PokedexTileGraphics: ; 12488 (4:6488) + INCBIN "gfx/pokedex.2bpp" -; 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 +WorldMapTileGraphics: ; 125a8 (4:65a8) + INCBIN "gfx/town_map.2bpp" -; These tables are probably supposed to be door locations in Silph Co., -; but they are unused. -; The reason there are 3 tables is unknown. +PlayerCharacterTitleGraphics: ; 126a8 (4:66a8) + INCBIN "gfx/player_title.2bpp" -; 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 +INCLUDE "engine/battle/4.asm" -ItemUseGuardSpec: ; e0dc (3:60dc) - ld a,[W_ISINBATTLE] - and a - jp z,ItemUseNotTime - ld hl,W_PLAYERBATTSTATUS2 - set 1,[hl] ; Mist bit - jp PrintItemUseTextAndRemoveItem +INCLUDE "engine/menu/status_screen.asm" -ItemUseSuperRepel: ; e0eb (3:60eb) - ld b,200 - jp ItemUseRepelCommon +INCLUDE "engine/menu/party_menu.asm" -ItemUseMaxRepel: ; e0f0 (3:60f0) - ld b,250 - jp ItemUseRepelCommon +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" -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 +INCLUDE "engine/turn_sprite.asm" -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 - callba StatModifierUpEffect ; do stat increase move - pop hl - pop af - ld [hld],a ; restore [W_PLAYERMOVEEFFECT] - pop af - ld [hl],a ; restore [W_PLAYERMOVENUM] - ret +INCLUDE "engine/menu/start_sub_menus.asm" -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 - callba Music_PokeFluteInBattle ; 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 +INCLUDE "engine/items/tms.asm" -; 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 +INCLUDE "engine/battle/4_2.asm" -; 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 +INCLUDE "engine/rng.asm" -; 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 +SECTION "bank5",ROMX,BANK[$5] -PlayedFluteNoEffectText: ; e20b (3:620b) - TX_FAR _PlayedFluteNoEffectText - db "@" +RedCyclingSprite: ; 14000 (5:4000) + INCBIN "gfx/sprites/cycling.2bpp" +RedSprite: ; 14180 (5:4180) + INCBIN "gfx/sprites/red.2bpp" +BlueSprite: ; 14300 (5:4300) + INCBIN "gfx/sprites/blue.2bpp" +OakSprite: ; 14480 (5:4480) + INCBIN "gfx/sprites/oak.2bpp" +BugCatcherSprite: ; 14600 (5:4600) + INCBIN "gfx/sprites/bug_catcher.2bpp" +SlowbroSprite: ; 14780 (5:4780) + INCBIN "gfx/sprites/slowbro.2bpp" +LassSprite: ; 14900 (5:4900) + INCBIN "gfx/sprites/lass.2bpp" +BlackHairBoy1Sprite: ; 14a80 (5:4a80) + INCBIN "gfx/sprites/black_hair_boy_1.2bpp" +LittleGirlSprite: ; 14c00 (5:4c00) + INCBIN "gfx/sprites/little_girl.2bpp" +BirdSprite: ; 14d80 (5:4d80) + INCBIN "gfx/sprites/bird.2bpp" +FatBaldGuySprite: ; 14f00 (5:4f00) + INCBIN "gfx/sprites/fat_bald_guy.2bpp" +GamblerSprite: ; 15080 (5:5080) + INCBIN "gfx/sprites/gambler.2bpp" +BlackHairBoy2Sprite: ; 15200 (5:5200) + INCBIN "gfx/sprites/black_hair_boy_2.2bpp" +GirlSprite: ; 15380 (5:5380) + INCBIN "gfx/sprites/girl.2bpp" +HikerSprite: ; 15500 (5:5500) + INCBIN "gfx/sprites/hiker.2bpp" +FoulardWomanSprite: ; 15680 (5:5680) + INCBIN "gfx/sprites/foulard_woman.2bpp" +GentlemanSprite: ; 15800 (5:5800) + INCBIN "gfx/sprites/gentleman.2bpp" +DaisySprite: ; 15980 (5:5980) + INCBIN "gfx/sprites/daisy.2bpp" +BikerSprite: ; 15b00 (5:5b00) + INCBIN "gfx/sprites/biker.2bpp" +SailorSprite: ; 15c80 (5:5c80) + INCBIN "gfx/sprites/sailor.2bpp" +CookSprite: ; 15e00 (5:5e00) + INCBIN "gfx/sprites/cook.2bpp" +BikeShopGuySprite: ; 15f80 (5:5f80) + INCBIN "gfx/sprites/bike_shop_guy.2bpp" +MrFujiSprite: ; 16040 (5:6040) + INCBIN "gfx/sprites/mr_fuji.2bpp" +GiovanniSprite: ; 161c0 (5:61c0) + INCBIN "gfx/sprites/giovanni.2bpp" +RocketSprite: ; 16340 (5:6340) + INCBIN "gfx/sprites/rocket.2bpp" +MediumSprite: ; 164c0 (5:64c0) + INCBIN "gfx/sprites/medium.2bpp" +WaiterSprite: ; 16640 (5:6640) + INCBIN "gfx/sprites/waiter.2bpp" +ErikaSprite: ; 167c0 (5:67c0) + INCBIN "gfx/sprites/erika.2bpp" +MomGeishaSprite: ; 16940 (5:6940) + INCBIN "gfx/sprites/mom_geisha.2bpp" +BrunetteGirlSprite: ; 16ac0 (5:6ac0) + INCBIN "gfx/sprites/brunette_girl.2bpp" +LanceSprite: ; 16c40 (5:6c40) + INCBIN "gfx/sprites/lance.2bpp" +MomSprite: ; 16dc0 (5:6dc0) + INCBIN "gfx/sprites/mom.2bpp" +BaldingGuySprite: ; 16e80 (5:6e80) + INCBIN "gfx/sprites/balding_guy.2bpp" +YoungBoySprite: ; 16f40 (5:6f40) + INCBIN "gfx/sprites/young_boy.2bpp" +GameboyKidSprite: ; 17000 (5:7000) + INCBIN "gfx/sprites/gameboy_kid.2bpp" +ClefairySprite: ; 170c0 (5:70c0) + INCBIN "gfx/sprites/clefairy.2bpp" +AgathaSprite: ; 17240 (5:7240) + INCBIN "gfx/sprites/agatha.2bpp" +BrunoSprite: ; 173c0 (5:73c0) + INCBIN "gfx/sprites/bruno.2bpp" +LoreleiSprite: ; 17540 (5:7540) + INCBIN "gfx/sprites/lorelei.2bpp" +SeelSprite: ; 176c0 (5:76c0) + INCBIN "gfx/sprites/seel.2bpp" -FluteWokeUpText: ; e210 (3:6210) - TX_FAR _FluteWokeUpText - db "@" +INCLUDE "engine/load_pokedex_tiles.asm" -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 - SFX_Headers_02) / 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 +INCLUDE "engine/overworld/map_sprites.asm" -ItemUseCoinCase: ; e23a (3:623a) - ld a,[W_ISINBATTLE] - and a - jp nz,ItemUseNotTime - ld hl,CoinCaseNumCoinsText - jp PrintText +INCLUDE "engine/overworld/emotion_bubbles.asm" -CoinCaseNumCoinsText: ; e247 (3:6247) - TX_FAR _CoinCaseNumCoinsText - db "@" +INCLUDE "engine/evolve_trade.asm" -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 +INCLUDE "engine/battle/5.asm" -INCLUDE "data/good_rod.asm" +INCLUDE "engine/menu/pc.asm" -SuperRodCode: ; e283 (3:6283) - call FishingInit - jp c, ItemUseNotTime - call ReadSuperRodData ; 0xe8ea - ld a, e -RodResponse: ; e28d (3:628d) - ld [$CD3D], a +SECTION "bank6",ROMX,BANK[$6] - 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 +INCLUDE "data/mapHeaders/celadoncity.asm" -.next - ld hl, $D700 - ld a, [hl] ; store the value in a - push af - push hl - ld [hl], 0 - callba Func_707b6 - pop hl - pop af - ld [hl], a - ret +INCLUDE "data/mapObjects/celadoncity.asm" -; 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,(SFX_02_3e - SFX_Headers_02) / 3 - call PlaySound ; play sound - ld c,80 - call DelayFrames - and a - ret -.surfing - scf ; can't fish when surfing - ret +CeladonCityBlocks: ; 180df (6:40df) + INCBIN "maps/celadoncity.blk" -ItemUseOaksParcel: ; e2de (3:62de) - jp ItemUseNotYoursToUse +INCLUDE "data/mapHeaders/pallettown.asm" -ItemUseItemfinder: ; e2e1 (3:62e1) - ld a,[W_ISINBATTLE] - and a - jp nz,ItemUseNotTime - call ItemUseReloadOverworldData - callba HiddenItemNear ; check for hidden items - ld hl,ItemfinderFoundNothingText - jr nc,.printText ; if no hidden items - ld c,4 -.loop - ld a,(SFX_02_4a - SFX_Headers_02) / 3 - call PlaySoundWaitForCurrent ; play sound - ld a,(SFX_02_5a - SFX_Headers_02) / 3 - call PlaySoundWaitForCurrent ; play sound - dec c - jr nz,.loop - ld hl,ItemfinderFoundItemText -.printText - jp PrintText +INCLUDE "data/mapObjects/pallettown.asm" -ItemfinderFoundItemText: ; e30d (3:630d) - TX_FAR _ItemfinderFoundItemText - db "@" +PalletTownBlocks: ; 182fd (6:42fd) + INCBIN "maps/pallettown.blk" -ItemfinderFoundNothingText: ; e312 (3:6312) - TX_FAR _ItemfinderFoundNothingText - db "@" +INCLUDE "data/mapHeaders/viridiancity.asm" -ItemUsePPUp: ; e317 (3:6317) - ld a,[W_ISINBATTLE] - and a - jp nz,ItemUseNotTime +INCLUDE "data/mapObjects/viridiancity.asm" -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 - callab MoveSelectionMenu ; 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,(SFX_02_3e - SFX_Headers_02) / 3 - 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 +ViridianCityBlocks: ; 183ec (6:43ec) + INCBIN "maps/viridiancity.blk" -RaisePPWhichTechniqueText: ; e45d (3:645d) - TX_FAR _RaisePPWhichTechniqueText - db "@" +INCLUDE "data/mapHeaders/pewtercity.asm" -RestorePPWhichTechniqueText: ; e462 (3:6462) - TX_FAR _RestorePPWhichTechniqueText - db "@" +INCLUDE "data/mapObjects/pewtercity.asm" -PPMaxedOutText: ; e467 (3:6467) - TX_FAR _PPMaxedOutText - db "@" +PewterCityBlocks: ; 185e6 (6:45e6) + INCBIN "maps/pewtercity.blk" -PPIncreasedText: ; e46c (3:646c) - TX_FAR _PPIncreasedText - db "@" +INCLUDE "data/mapHeaders/ceruleancity.asm" -PPRestoredText: ; e471 (3:6471) - TX_FAR _PPRestoredText - db "@" +INCLUDE "data/mapObjects/ceruleancity.asm" -; for items that can't be used from the Item menu -UnusableItem: ; e476 (3:6476) - jp ItemUseNotTime +CeruleanCityBlocks: ; 18830 (6:4830) + INCBIN "maps/ceruleancity.blk" -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,(SFX_02_51 - SFX_Headers_02) / 3 - call PlaySoundWaitForCurrent ; play sound - ld hl,MonCannotLearnMachineMoveText - call PrintText - jr .chooseMon -.checkIfAlreadyLearnedMove - callab CheckIfMoveIsKnown ; 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 +INCLUDE "data/mapHeaders/vermilioncity.asm" -BootedUpTMText: ; e54f (3:654f) - TX_FAR _BootedUpTMText - db "@" +INCLUDE "data/mapObjects/vermilioncity.asm" -BootedUpHMText: ; e554 (3:6554) - TX_FAR _BootedUpHMText - db "@" +VermilionCityBlocks: ; 18a3f (6:4a3f) + INCBIN "maps/vermilioncity.blk" -TeachMachineMoveText: ; e559 (3:6559) - TX_FAR _TeachMachineMoveText - db "@" +INCLUDE "data/mapHeaders/fuchsiacity.asm" -MonCannotLearnMachineMoveText: ; e55e (3:655e) - TX_FAR _MonCannotLearnMachineMoveText - db "@" +INCLUDE "data/mapObjects/fuchsiacity.asm" -PrintItemUseTextAndRemoveItem: ; e563 (3:6563) - ld hl,ItemUseText00 - call PrintText - ld a,(SFX_02_3e - SFX_Headers_02) / 3 - call PlaySound ; play sound - call WaitForTextScrollButtonPress ; wait for button press +FuchsiaCityBlocks: ; 18c86 (6:4c86) + INCBIN "maps/fuchsiacity.blk" -RemoveUsedItem: ; e571 (3:6571) - ld hl,wNumBagItems - ld a,1 ; one item - ld [$cf96],a ; store quantity - jp RemoveItemFromInventory +INCLUDE "engine/play_time.asm" -ItemUseNoEffect: ; e57c (3:657c) - ld hl,ItemUseNoEffectText - jr ItemUseFailed +INCLUDE "scripts/pallettown.asm" -ItemUseNotTime: ; e581 (3:6581) - ld hl,ItemUseNotTimeText - jr ItemUseFailed +INCLUDE "scripts/viridiancity.asm" -ItemUseNotYoursToUse: ; e586 (3:6586) - ld hl,ItemUseNotYoursToUseText - jr ItemUseFailed +INCLUDE "scripts/pewtercity.asm" -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 +INCLUDE "scripts/ceruleancity.asm" -NoCyclingAllowedHere: ; e5ac (3:65ac) - ld hl,NoCyclingAllowedHereText - jr ItemUseFailed +INCLUDE "scripts/vermilioncity.asm" -BoxFullCannotThrowBall: ; e5b1 (3:65b1) - ld hl,BoxFullCannotThrowBallText - jr ItemUseFailed +INCLUDE "scripts/celadoncity.asm" -SurfingAttemptFailed: ; e5b6 (3:65b6) - ld hl,NoSurfingHereText +INCLUDE "scripts/fuchsiacity.asm" -ItemUseFailed: ; e5b9 (3:65b9) - xor a - ld [$cd6a],a ; item use failed - jp PrintText +INCLUDE "data/mapHeaders/blueshouse.asm" -ItemUseNotTimeText: ; e5c0 (3:65c0) - TX_FAR _ItemUseNotTimeText - db "@" +INCLUDE "scripts/blueshouse.asm" -ItemUseNotYoursToUseText: ; e5c5 (3:65c5) - TX_FAR _ItemUseNotYoursToUseText - db "@" +INCLUDE "data/mapObjects/blueshouse.asm" -ItemUseNoEffectText: ; e5ca (3:65ca) - TX_FAR _ItemUseNoEffectText - db "@" +BluesHouseBlocks: ; 19bf6 (6:5bf6) + INCBIN "maps/blueshouse.blk" -ThrowBallAtTrainerMonText1: ; e5cf (3:65cf) - TX_FAR _ThrowBallAtTrainerMonText1 - db "@" +INCLUDE "data/mapHeaders/vermilionhouse3.asm" -ThrowBallAtTrainerMonText2: ; e5d4 (3:65d4) - TX_FAR _ThrowBallAtTrainerMonText2 - db "@" +INCLUDE "scripts/vermilionhouse3.asm" -NoCyclingAllowedHereText: ; e5d9 (3:65d9) - TX_FAR _NoCyclingAllowedHereText - db "@" +INCLUDE "data/mapObjects/vermilionhouse3.asm" -NoSurfingHereText: ; e5de (3:65de) - TX_FAR _NoSurfingHereText - db "@" +VermilionHouse3Blocks: ; 19c3f (6:5c3f) + INCBIN "maps/vermilionhouse3.blk" -BoxFullCannotThrowBallText: ; e5e3 (3:65e3) - TX_FAR _BoxFullCannotThrowBallText - db "@" +INCLUDE "data/mapHeaders/indigoplateaulobby.asm" -ItemUseText00: ; e5e8 (3:65e8) - TX_FAR _ItemUseText001 - db $05 - TX_FAR _ItemUseText002 - db "@" +INCLUDE "scripts/indigoplateaulobby.asm" -GotOnBicycleText: ; e5f2 (3:65f2) - TX_FAR _GotOnBicycleText1 - db $05 - TX_FAR _GotOnBicycleText2 - db "@" +INCLUDE "data/mapObjects/indigoplateaulobby.asm" -GotOffBicycleText: ; e5fc (3:65fc) - TX_FAR _GotOffBicycleText1 - db $05 - TX_FAR _GotOffBicycleText2 - db "@" +IndigoPlateauLobbyBlocks: ; 19ccf (6:5ccf) + INCBIN "maps/indigoplateaulobby.blk" -; 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 +INCLUDE "data/mapHeaders/silphco4.asm" -; 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 +INCLUDE "scripts/silphco4.asm" -; 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 +INCLUDE "data/mapObjects/silphco4.asm" -GetSelectedMoveOffset: ; e6e3 (3:66e3) - ld a,[wWhichPokemon] - call AddNTimes +SilphCo4Blocks: ; 19ea4 (6:5ea4) + INCBIN "maps/silphco4.blk" -GetSelectedMoveOffset2: ; e6e9 (3:66e9) - ld a,[wCurrentMenuItem] - ld c,a - ld b,0 - add hl,bc - ret +INCLUDE "data/mapHeaders/silphco5.asm" -; 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 +INCLUDE "scripts/silphco5.asm" -ThrewAwayItemText: ; e755 (3:6755) - TX_FAR _ThrewAwayItemText - db "@" +INCLUDE "data/mapObjects/silphco5.asm" -IsItOKToTossItemText: ; e75a (3:675a) - TX_FAR _IsItOKToTossItemText - db "@" +SilphCo5Blocks: ; 1a116 (6:6116) + INCBIN "maps/silphco5.blk" -TooImportantToTossText: ; e75f (3:675f) - TX_FAR _TooImportantToTossText - db "@" +INCLUDE "data/mapHeaders/silphco6.asm" -; 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 +INCLUDE "scripts/silphco6.asm" -INCLUDE "data/key_items.asm" +INCLUDE "data/mapObjects/silphco6.asm" -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 - callab CalcExperience - pop de - ld a, [H_NUMTOPRINT] ; $ff96 (aliases: H_MULTIPLICAND) - ld [de], a - inc de - ld a, [$ff97] - ld [de], a - inc de - ld a, [$ff98] - 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 +SilphCo6Blocks: ; 1a36b (6:636b) + INCBIN "maps/silphco6.blk" -; 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 SHIP_PORT ; Vermilion Dock tileset - ld a, [$cfc6] ; tile in front of player - jr z, .skipShoreTiles ; if it's the Vermilion Dock tileset - cp $48 ; eastern shore tile in Safari Zone - jr z, .shoreOrWater - cp $32 ; usual eastern shore tile - jr z, .shoreOrWater -.skipShoreTiles - cp $14 ; water tile - jr z, .shoreOrWater -.notShoreOrWater - scf - ret -.shoreOrWater - and a - ret +INCLUDE "engine/overworld/npc_movement.asm" -; tilesets with water -WaterTilesets: ; e8e0 (3:68e0) - db OVERWORLD, FOREST, DOJO, GYM, SHIP, SHIP_PORT, CAVERN, FACILITY, PLATEAU - db $ff ; terminator +INCLUDE "engine/overworld/doors.asm" -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 +INCLUDE "engine/overworld/ledges.asm" -.ReadFishingGroup ; 0xe8f6 -; hl points to the fishing group entry in the index - inc hl ; skip map id +SECTION "bank7",ROMX,BANK[$7] - ; read fishing group address - ld a, [hli] - ld h, [hl] - ld l, a +INCLUDE "data/mapHeaders/cinnabarisland.asm" - ld b, [hl] ; how many mons in group - inc hl ; point to data - ld e, $0 ; no bite yet +INCLUDE "data/mapObjects/cinnabarisland.asm" -.RandomLoop ; 0xe90c - call GenRandom - srl a - ret c ; 50% chance of no battle +CinnabarIslandBlocks: ; 1c069 (7:4069) + INCBIN "maps/cinnabarisland.blk" - and %11 ; 2-bit random number - cp b - jr nc, .RandomLoop ; if a is greater than the number of mons, regenerate +INCLUDE "data/mapHeaders/route1.asm" - ; 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 +INCLUDE "data/mapObjects/route1.asm" -INCLUDE "data/super_rod.asm" +Route1Blocks: ; 1c0fc (7:40fc) + INCBIN "maps/route1.blk" -; reloads map view and processes sprite data -; for items that cause the overworld to be displayed -ItemUseReloadOverworldData: ; e9c5 (3:69c5) - call LoadCurrentMapView - jp UpdateSprites +UndergroundPathEntranceRoute8Blocks: ; 1c1b0 (7:41b0) + INCBIN "maps/undergroundpathentranceroute8.blk" -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 +OaksLabBlocks: ; 1c1c0 (7:41c0) + INCBIN "maps/oakslab.blk" -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 +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) +CeruleanHouse1Blocks: ; 1c1de (7:41de) +PewterHouse1Blocks: ; 1c1de (7:41de) +PewterHouse2Blocks: ; 1c1de (7:41de) +ViridianHouseBlocks: ; 0x1c1de 41DE size=16 + INCBIN "maps/viridianhouse.blk" -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. +CeladonMansion5Blocks: ; 1c1ee (7:41ee) +SchoolBlocks: ; 0x1c1ee 41EE size=16 + INCBIN "maps/school.blk" -; In Japanese versions, names are displayed above faces. -; Instead of removing relevant code, the name graphics were erased. +CeruleanHouseTrashedBlocks: ; 0x1c1fe size=16 + INCBIN "maps/ceruleanhousetrashed.blk" -; Tile ids for face/badge graphics. - ld de, $cd3f - ld hl, .FaceBadgeTiles - ld bc, 8 - call CopyData +DiglettsCaveEntranceRoute11Blocks: ; 1c20e (7:420e) +DiglettsCaveRoute2Blocks: ; 0x1c20e size=16 + INCBIN "maps/diglettscaveroute2.blk" -; Booleans for each badge. - ld hl, $cd49 - ld bc, 8 - xor a - call FillMemory +INCLUDE "text/monster_names.asm" -; 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 +INCLUDE "engine/clear_save.asm" -; Draw two rows of badges. - ld hl, $cd3d - ld a, $d8 ; [1] - ld [hli], a - ld [hl], $60 ; First name +INCLUDE "engine/predefs7.asm" - FuncCoord 2, 11 - ld hl, Coord - ld de, $cd49 - call .DrawBadgeRow +INCLUDE "scripts/cinnabarisland.asm" - FuncCoord 2, 14 - ld hl, Coord - ld de, $cd49 + 4 -; call .DrawBadgeRow -; ret +INCLUDE "scripts/route1.asm" -.DrawBadgeRow ; ea4c (3:6a4c) -; Draw 4 badges. +INCLUDE "data/mapHeaders/oakslab.asm" - ld c, 4 -.DrawBadge - push de - push hl +INCLUDE "scripts/oakslab.asm" -; Badge no. - ld a, [$cd3d] - ld [hli], a - inc a - ld [$cd3d], a +INCLUDE "data/mapObjects/oakslab.asm" -; Names aren't printed if the badge is owned. - ld a, [de] - and a - ld a, [$cd3e] - jr nz, .SkipName - call .PlaceTiles - jr .PlaceBadge +INCLUDE "data/mapHeaders/viridianmart.asm" -.SkipName - inc a - inc a - inc hl +INCLUDE "scripts/viridianmart.asm" -.PlaceBadge - ld [$cd3e], a - ld de, 20 - 1 - add hl, de - ld a, [$cd3f] - call .PlaceTiles - add hl, de - call .PlaceTiles +INCLUDE "data/mapObjects/viridianmart.asm" -; Shift badge array back one byte. - push bc - ld hl, $cd3f + 1 - ld de, $cd3f - ld bc, 8 - call CopyData - pop bc +ViridianMartBlocks: ; 1d530 (7:5530) + INCBIN "maps/viridianmart.blk" - pop hl - ld de, 4 - add hl, de +INCLUDE "data/mapHeaders/school.asm" - pop de - inc de - dec c - jr nz, .DrawBadge - ret +INCLUDE "scripts/school.asm" -.PlaceTiles - ld [hli], a - inc a - ld [hl], a - inc a - ret +INCLUDE "data/mapObjects/school.asm" -.FaceBadgeTiles - db $20, $28, $30, $38, $40, $48, $50, $58 +INCLUDE "data/mapHeaders/viridianhouse.asm" -GymLeaderFaceAndBadgeTileGraphics: ; ea9e (3:6a9e) - INCBIN "gfx/badges.w16.2bpp" +INCLUDE "scripts/viridianhouse.asm" -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 +INCLUDE "data/mapObjects/viridianhouse.asm" -Func_eedc: ; eedc (3:6edc) - ld a, [W_ISINBATTLE] ; $d057 - inc a - ret z - ld a, [H_AUTOBGTRANSFERENABLED] ; $ffba - push af - ld a, [$ffd7] - push af - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - ld [$ffd7], 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 [$ffbe], a - ld c, $9 -.asm_ef0f - push bc - push hl - push hl - ld hl, $c378 - ld de, $14 - ld a, [$ffbe] -.asm_ef1a - add hl, de - dec a - jr nz, .asm_ef1a - call ScheduleRowRedrawHelper - pop hl - ld de, $20 - ld a, [$ffbe] - ld c, a -.asm_ef28 - add hl, de - ld a, h - and $3 - or $98 - dec c - jr nz, .asm_ef28 - ld [$ffd2], a - ld a, l - ld [H_SCREENEDGEREDRAWADDR], a ; $ffd1 - ld a, $2 - ld [H_SCREENEDGEREDRAW], a ; $ffd0 - call DelayFrame - ld hl, $ffbe - inc [hl] - inc [hl] - pop hl - pop bc - dec c - jr nz, .asm_ef0f - pop af - ld [$ffd7], a - pop af - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - ret +INCLUDE "data/mapHeaders/pewterhouse1.asm" -Func_ef4e: ; ef4e (3:6f4e) - ld a, h - sub b - ret nz - ld a, l - sub c - ret +INCLUDE "scripts/pewterhouse1.asm" -UsedCut: ; ef54 (3:6f54) - xor a - ld [$cd6a], a - ld a, [W_CURMAPTILESET] ; $d367 - and a ; OVERWORLD - jr z, .asm_ef6b - cp GYM - jr nz, .asm_ef77 - ld a, [$cfc6] - cp $50 ; gym cut tree - jr nz, .asm_ef77 - jr asm_ef82 -.asm_ef6b - dec a - ld a, [$cfc6] - cp $3d ; cut tree - jr z, asm_ef82 - cp $52 ; grass - jr z, asm_ef82 -.asm_ef77 - ld hl, NothingToCutText - jp PrintText +INCLUDE "data/mapObjects/pewterhouse1.asm" -NothingToCutText: ; ef7d (3:6f7d) - TX_FAR _NothingToCutText - db "@" +INCLUDE "data/mapHeaders/pewterhouse2.asm" -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 [$ffb0], a - call Delay3 - call LoadGBPal - call LoadCurrentMapView - call SaveScreenTilesToBuffer2 - call Delay3 - xor a - ld [$ffb0], a - ld hl, UsedCutText - call PrintText - call LoadScreenTilesFromBuffer2 - ld hl, $d730 - res 6, [hl] - ld a, $ff - ld [$cfcb], a - call AnimateCutTree - ld de, CutTreeBlockSwaps ; $7100 - call Func_f09f - call Func_eedc - callba Func_79e96 - ld a, $1 - ld [$cfcb], a - ld a, (SFX_02_56 - SFX_Headers_02) / 3 - call PlaySound - ld a, $90 - ld [$ffb0], a - call UpdateSprites - jp Func_eedc +INCLUDE "scripts/pewterhouse2.asm" -UsedCutText: ; eff2 (3:6ff2) - TX_FAR _UsedCutText - db "@" +INCLUDE "data/mapObjects/pewterhouse2.asm" -AnimateCutTree: ; eff7 (3:6ff7) - xor a - ld [$cd50], a - ld a, $e4 - ld [rOBP1], a ; $ff49 - ld a, [$cd4d] - cp $52 - jr z, .asm_f020 - ld de, Overworld_GFX + $2d0 ; $42d0 ; cuttable tree sprite top row - ld hl, $8fc0 - ld bc, (BANK(Overworld_GFX) << 8) + $02 - call CopyVideoData - ld de, Overworld_GFX + $3d0 ; $43d0 ; cuttable tree sprite bottom row - ld hl, $8fe0 - ld bc, (BANK(Overworld_GFX) << 8) + $02 - call CopyVideoData - jr asm_f055 -.asm_f020 - ld hl, $8fc0 - call LoadCutTreeOAM - ld hl, $8fd0 - call LoadCutTreeOAM - ld hl, $8fe0 - call LoadCutTreeOAM - ld hl, $8ff0 - call LoadCutTreeOAM - 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 +INCLUDE "data/mapHeaders/ceruleanhousetrashed.asm" -LoadCutTreeOAM: ; 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, CutTreeOAM ; $7060 - jp WriteOAMBlock +INCLUDE "scripts/ceruleanhousetrashed.asm" -CutTreeOAM: ; f060 (3:7060) - db $FC,$10,$FD,$10 - db $FE,$10,$FF,$10 +INCLUDE "data/mapObjects/ceruleanhousetrashed.asm" -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 +INCLUDE "data/mapHeaders/ceruleanhouse1.asm" -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 +INCLUDE "scripts/ceruleanhouse1.asm" -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 +INCLUDE "data/mapObjects/ceruleanhouse1.asm" -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 +INCLUDE "data/mapHeaders/bikeshop.asm" -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 +INCLUDE "scripts/bikeshop.asm" -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] +INCLUDE "data/mapObjects/bikeshop.asm" -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 +BikeShopBlocks: ; 1d88c (7:588c) + INCBIN "maps/bikeshop.blk" -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 +INCLUDE "data/mapHeaders/lavenderhouse1.asm" -; 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 [$ffe5], a - ret +INCLUDE "scripts/lavenderhouse1.asm" -; 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 +INCLUDE "data/mapObjects/lavenderhouse1.asm" -; 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 +INCLUDE "data/mapHeaders/lavenderhouse2.asm" -; 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 +INCLUDE "scripts/lavenderhouse2.asm" -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 ; $ff8c - call IsSpriteInFrontOfPlayer - ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c - ld [$d718], a - and a - jp z, Func_f2dd - ld hl, $c101 - ld d, $0 - ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c - 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, (SFX_02_53 - SFX_Headers_02) / 3 - call PlaySound - ld hl, wFlags_0xcd60 - set 1, [hl] - ret +INCLUDE "data/mapObjects/lavenderhouse2.asm" -MovementData_f2ad: ; f2ad (3:72ad) - db $40,$FF +INCLUDE "data/mapHeaders/namerater.asm" -MovementData_f2af: ; f2af (3:72af) - db $00,$FF +INCLUDE "scripts/namerater.asm" -MovementData_f2b1: ; f2b1 (3:72b1) - db $80,$FF +INCLUDE "data/mapObjects/namerater.asm" -MovementData_f2b3: ; f2b3 (3:72b3) - db $C0,$FF +INCLUDE "data/mapHeaders/vermilionhouse1.asm" -Func_f2b5: ; f2b5 (3:72b5) - ld a, [$d730] - bit 0, a - ret nz - callab Func_79f54 - call DiscardButtonPresses - ld [wJoypadForbiddenButtonsMask], a - call Func_f2dd - set 7, [hl] - ld a, [$d718] - ld [H_DOWNARROWBLINKCNT2], a ; $ff8c - call GetSpriteMovementByte2Pointer - ld [hl], $10 - ld a, (SFX_02_56 - SFX_Headers_02) / 3 - jp PlaySound +INCLUDE "scripts/vermilionhouse1.asm" -Func_f2dd: ; f2dd (3:72dd) - ld hl, wFlags_0xcd60 - res 1, [hl] - res 6, [hl] - ret +INCLUDE "data/mapObjects/vermilionhouse1.asm" -_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 [$ffe4], 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, [$ffe4] - 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, [$ffe4] - 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, [$ffe4] - 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 - callab CalcExperience - 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 +INCLUDE "data/mapHeaders/vermiliondock.asm" -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 +INCLUDE "scripts/vermiliondock.asm" -; adds enemy mon [$cf91] (at position [$cf92] in enemy list) to own party -; used in the cable club trade center -_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 +INCLUDE "data/mapObjects/vermiliondock.asm" -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 - callba Func_58f43 - 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 +VermilionDockBlocks: ; 1dcda (7:5cda) + INCBIN "maps/vermiliondock.blk" -; 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 +INCLUDE "data/mapHeaders/celadonmansion5.asm" -_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 +INCLUDE "scripts/celadonmansion5.asm" -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 +INCLUDE "data/mapObjects/celadonmansion5.asm" -; predef $9 -; predef $a -; predef $d -; predef $e -Func_f71e: ; f71e (3:771e) - call Load16BitRegisters - xor a - ld [$ffa5], a - ld [$ffa6], a - ld [$ffa7], a - ld d, $1 -.asm_f72a - ld a, [$ffa2] - and $f0 - jr nz, .asm_f75b - inc d - ld a, [$ffa2] - swap a - and $f0 - ld b, a - ld a, [$ffa3] - swap a - ld [$ffa3], a - and $f - or b - ld [$ffa2], a - ld a, [$ffa3] - and $f0 - ld b, a - ld a, [$ffa4] - swap a - ld [$ffa4], a - and $f - or b - ld [$ffa3], a - ld a, [$ffa4] - and $f0 - ld [$ffa4], a - jr .asm_f72a -.asm_f75b - push de - push de - call Func_f800 - pop de - ld a, b - swap a - and $f0 - ld [$ffa5], a - dec d - jr z, .asm_f7bc - push de - call Func_f7d7 - call Func_f800 - pop de - ld a, [$ffa5] - or b - ld [$ffa5], 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 [$ffa6], a - dec d - jr z, .asm_f7bc - push de - call Func_f7d7 - call Func_f800 - pop de - ld a, [$ffa6] - or b - ld [$ffa6], 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 [$ffa7], a - dec d - jr z, .asm_f7bc - push de - call Func_f7d7 - call Func_f800 - pop de - ld a, [$ffa7] - or b - ld [$ffa7], a -.asm_f7bc - ld a, [$ffa5] - ld [$ffa2], a - ld a, [$ffa6] - ld [$ffa3], a - ld a, [$ffa7] - ld [$ffa4], 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 +INCLUDE "data/mapHeaders/fuchsiamart.asm" -Func_f7d7: ; f7d7 (3:77d7) - ld a, [$ffa4] - swap a - and $f - ld b, a - ld a, [$ffa3] - swap a - ld [$ffa3], a - and $f0 - or b - ld [$ffa4], a - ld a, [$ffa3] - and $f - ld b, a - ld a, [$ffa2] - swap a - ld [$ffa2], a - and $f0 - or b - ld [$ffa3], a - ld a, [$ffa2] - and $f - ld [$ffa2], a - ret +INCLUDE "scripts/fuchsiamart.asm" -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 +INCLUDE "data/mapObjects/fuchsiamart.asm" -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 +FuchsiaMartBlocks: ; 1ddc1 (7:5dc1) + INCBIN "maps/fuchsiamart.blk" -Func_f836: ; f836 (3:7836) - call Load16BitRegisters +INCLUDE "data/mapHeaders/saffronhouse1.asm" -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 +INCLUDE "scripts/saffronhouse1.asm" -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 - 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 +INCLUDE "data/mapObjects/saffronhouse1.asm" -; writes two bytes $00 $ff to hl -InitializeEmptyList: ; f8a0 (3:78a0) - xor a - ld [hli], a - dec a - ld [hl], a - ret +INCLUDE "data/mapHeaders/saffronhouse2.asm" -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 +INCLUDE "scripts/saffronhouse2.asm" -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 +INCLUDE "data/mapObjects/saffronhouse2.asm" -Func_f8c8: ; f8c8 (3:78c8) - ld a, [H_REMAINDER] ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - ld b, a - ld a, [H_DIVIDEND] ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) - call CalcDifference - ld d, a - and a - jr nz, .asm_f8da - ld a, [$ff98] - set 0, a - ld [$ff98], a -.asm_f8da - ld a, [$ff9a] - ld b, a - ld a, [H_NUMTOPRINT] ; $ff96 (aliases: H_MULTIPLICAND) - call CalcDifference - ld e, a - and a - jr nz, .asm_f8ec - ld a, [$ff98] - set 1, a - ld [$ff98], a -.asm_f8ec - ld a, [$ff98] - cp $3 - jr z, .asm_f926 - ld a, e - cp d - jr c, .asm_f90a - ld a, [$ff9d] - bit 1, a - jr nz, .asm_f900 - ld d, $c0 - jr .asm_f902 -.asm_f900 - ld d, $80 -.asm_f902 - ld a, [$ff9a] - add $1 - ld [$ff9a], a - jr .asm_f91c -.asm_f90a - ld a, [$ff9d] - bit 0, a - jr nz, .asm_f914 - ld d, $0 - jr .asm_f916 -.asm_f914 - ld d, $40 -.asm_f916 - ld a, [H_REMAINDER] ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - add $1 - ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) -.asm_f91c - ld a, d - ld [hli], a - ld a, [$ff97] - inc a - ld [$ff97], a - jp Func_f8c8 -.asm_f926 - ld [hl], $ff - ret +INCLUDE "data/mapHeaders/diglettscaveroute2.asm" -Func_f929: ; f929 (3:7929) - xor a - ld [$ff9d], a - ld a, [$c104] - ld d, a - ld a, [$c106] - ld e, a - ld hl, wSpriteStateData1 - ld a, [H_DIVIDEND] ; $ff95 (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 ; $ff95 (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 [$ffe5], a - ld a, $10 - ld [$ffe6], a - call Func_366b - ld a, [$ffe7] - ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND) - ld a, [$ff9b] - and a - ret z - ld a, [$ff9d] - cpl - and $3 - ld [$ff9d], a - ret +INCLUDE "scripts/diglettscaveroute2.asm" -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 +INCLUDE "data/mapObjects/diglettscaveroute2.asm" -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 +INCLUDE "data/mapHeaders/route2house.asm" -DataTable_f9d2: ; f9d2 (3:79d2) - db $40, $40, $00, $80, $80, $20, $c0, $10, $ff +INCLUDE "scripts/route2house.asm" -Func_f9db: ; f9db (3:79db) - ret +INCLUDE "data/mapObjects/route2house.asm" -Func_f9dc: ; f9dc (3:79dc) - call Load16BitRegisters +INCLUDE "data/mapHeaders/route5gate.asm" -; 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 +INCLUDE "scripts/route5gate.asm" -; 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 +INCLUDE "data/mapObjects/route5gate.asm" -; 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 +Route5GateBlocks: ; 1e025 (7:6025) + INCBIN "maps/route5gate.blk" -; 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 +INCLUDE "data/mapHeaders/route6gate.asm" -; 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 +INCLUDE "scripts/route6gate.asm" -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, [$fff6] - 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 +INCLUDE "data/mapObjects/route6gate.asm" -; 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 +Route6GateBlocks: ; 1e0e8 (7:60e8) + INCBIN "maps/route6gate.blk" -; prints text for bookshelves in buildings without sign events -PrintBookshelfText: ; 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 PrintPredefTextID - xor a - ld [$ffdb], a - ret -.asm_fb7b - inc hl -.asm_fb7c - inc hl - jr .asm_fb62 -.asm_fb7f - ld a, $ff - ld [$ffdb], a - ld b, BANK(PrintCardKeyText) - ld hl, PrintCardKeyText - jp Bankswitch +INCLUDE "data/mapHeaders/route7gate.asm" -; format: db tileset id, bookshelf tile id, text id -BookshelfTileIDs: ; fb8b (3:7b8b) - db PLATEAU, $30, $3A - db HOUSE, $3D, $3F - db HOUSE, $1E, $40 - db MANSION, $32, $40 - db REDS_HOUSE_1, $32, $40 - db LAB, $28, $40 - db LOBBY, $16, $41 - db GYM, $1D, $40 - db DOJO, $1D, $40 - db GATE, $22, $40 - db MART, $54, $42 - db MART, $55, $42 - db POKECENTER, $54, $42 - db POKECENTER, $55, $42 - db LOBBY, $50, $42 - db LOBBY, $52, $42 - db SHIP, $36, $40 - db $FF +INCLUDE "scripts/route7gate.asm" -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 +INCLUDE "data/mapObjects/route7gate.asm" -IndigoPlateauStatuesText1: ; fbd9 (3:7bd9) - TX_FAR _IndigoPlateauStatuesText1 - db "@" +Route7GateBlocks: ; 1e1af (7:61af) + INCBIN "maps/route7gate.blk" -IndigoPlateauStatuesText2: ; fbde (3:7bde) - TX_FAR _IndigoPlateauStatuesText2 - db "@" +INCLUDE "data/mapHeaders/route8gate.asm" -IndigoPlateauStatuesText3: ; fbe3 (3:7be3) - TX_FAR _IndigoPlateauStatuesText3 - db "@" +INCLUDE "scripts/route8gate.asm" -BookOrSculptureText: ; fbe8 (3:7be8) - db $08 ; asm - ld hl, PokemonBooksText - ld a, [W_CURMAPTILESET] - cp MANSION ; 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 +INCLUDE "data/mapObjects/route8gate.asm" -PokemonBooksText: ; fc03 (3:7c03) - TX_FAR _PokemonBooksText - db "@" +Route8GateBlocks: ; 1e271 (7:6271) + INCBIN "maps/route8gate.blk" -DiglettSculptureText: ; fc08 (3:7c08) - TX_FAR _DiglettSculptureText - db "@" +INCLUDE "data/mapHeaders/undergroundpathentranceroute8.asm" -ElevatorText: ; fc0d (3:7c0d) - TX_FAR _ElevatorText - db "@" +INCLUDE "scripts/undergroundpathentranceroute8.asm" -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 - callba DisplayTownMap - ld hl, $d730 - res 6, [hl] - ld de, TextScriptEnd - push de - ld a, [H_LOADEDROMBANK] - push af - jp CloseTextDisplay +INCLUDE "data/mapObjects/undergroundpathentranceroute8.asm" -PokemonStuffText: ; fc45 (3:7c45) - TX_FAR _PokemonStuffText - db "@" +INCLUDE "data/mapHeaders/powerplant.asm" -SECTION "bank4",ROMX,BANK[$4] +INCLUDE "scripts/powerplant.asm" -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 +INCLUDE "data/mapObjects/powerplant.asm" -PokemonLogoGraphics: ; 11380 (4:5380) - INCBIN "gfx/pokemon_logo.w128.2bpp" +PowerPlantBlocks: ; 1e446 (7:6446) + INCBIN "maps/powerplant.blk" -FontGraphics: ; 11a80 (4:5a80) - INCBIN "gfx/font.w128.1bpp" +INCLUDE "data/mapHeaders/diglettscaveroute11.asm" -ABTiles: ; 11e80 (4:5e80) - INCBIN "gfx/AB.2bpp" +INCLUDE "scripts/diglettscaveroute11.asm" -HpBarAndStatusGraphics: ; 11ea0 (4:5ea0) - INCBIN "gfx/hp_bar_and_status.2bpp" +INCLUDE "data/mapObjects/diglettscaveroute11.asm" -BattleHudTiles1: ; 12080 (4:6080) - INCBIN "gfx/battle_hud1.1bpp" +INCLUDE "data/mapHeaders/route16house.asm" -BattleHudTiles2: ; 12098 (4:6098) - INCBIN "gfx/battle_hud2.1bpp" +INCLUDE "scripts/route16house.asm" -BattleHudTiles3: ; 120b0 (4:60b0) - INCBIN "gfx/battle_hud3.1bpp" +INCLUDE "data/mapObjects/route16house.asm" -NintendoCopyrightLogoGraphics: ; 120c8 (4:60c8) - INCBIN "gfx/copyright.h8.2bpp" +INCLUDE "data/mapHeaders/route22gate.asm" -GamefreakLogoGraphics: ; 121f8 (4:61f8) - INCBIN "gfx/gamefreak.h8.2bpp" +INCLUDE "scripts/route22gate.asm" -TextBoxGraphics: ; 12288 (4:6288) - INCBIN "gfx/text_box.2bpp" +INCLUDE "data/mapObjects/route22gate.asm" -PokedexTileGraphics: ; 12488 (4:6488) - INCBIN "gfx/pokedex.2bpp" +Route22GateBlocks: ; 1e74a (7:674a) + INCBIN "maps/route22gate.blk" -WorldMapTileGraphics: ; 125a8 (4:65a8) - INCBIN "gfx/town_map.2bpp" +INCLUDE "data/mapHeaders/billshouse.asm" -PlayerCharacterTitleGraphics: ; 126a8 (4:66a8) - INCBIN "gfx/player_title.2bpp" +INCLUDE "scripts/billshouse.asm" -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, [$fff6] - 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 [$ff24], 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, [$ffd7] - push af - xor a - ld [$ffd7], 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 [$ffd7], 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, "@" +INCLUDE "data/mapObjects/billshouse.asm" -StatusText: ; 12abc (4:6abc) - db "STATUS/@" +BillsHouseBlocks: ; 1e905 (7:6905) + INCBIN "maps/billshouse.blk" -OKText: ; 12ac4 (4:6ac4) - db "OK@" +INCLUDE "engine/menu/oaks_pc.asm" -; 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 +INCLUDE "engine/hidden_object_functions7.asm" -PTile: ; 12adc (4:6adc) ; This is a single 1bpp "P" tile - INCBIN "gfx/p_tile.1bpp" +SECTION "bank9",ROMX,BANK[$9] -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 +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" -StatsText: ; 12b3a (4:6b3a) - db "ATTACK" - next "DEFENSE" - next "SPEED" - next "SPECIAL@" +INCLUDE "engine/battle/9.asm" -StatusScreen2: ; 12b57 (4:6b57) - ld a, [$ffd7] - push af - xor a - ld [$ffd7], a - ld [$ffba], a - ld bc, $0005 - ld hl, $d0dc - call FillMemory - ld hl, $cfa0 - ld de, $d0dc - ld bc, $0004 - call CopyData - callab Func_39b87 - 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 - callab GetMaxPP - 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 100 - 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 [$ffba], a - call Delay3 - call WaitForTextScrollButtonPress ; wait for button - pop af - ld [$ffd7], a - ld hl, $d72c - res 1, [hl] - ld a, $77 - ld [$ff24], 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 - callab CalcExperience - ld hl, $cfa8 - ld a, [$ff98] - sub [hl] - ld [hld], a - ld a, [$ff97] - sbc [hl] - ld [hld], a - ld a, [$ff96] - 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 - callba Func_71791 ; load pokemon icon graphics - -RedrawPartyMenu_: ; 12ce3 (4:6ce3) - ld a,[$D07D] - cp a,$04 - jp z,.printMessage - call ErasePartyMenuCursors - callba SendBlkPacket_PartyMenu ; 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 - callba Func_71868 ; 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 SwitchPartyMon_Stats - 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 - callba CheckForForcedBikeSurf - 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,(BANK(RedPicFront) << 8) | $01 - 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 - callab DisplayOptionMenu - call LoadScreenTilesFromBuffer2 ; restore saved screen - call LoadTextBoxTilePatterns - call UpdateSprites - jp RedisplayStartMenu - -SwitchPartyMon: ; 13613 (4:7613) - call SwitchPartyMon_Stats - ld a, [wWhichTrade] ; $cd3d - call SwitchPartyMon_OAM - ld a, [wCurrentMenuItem] ; $cc26 - call SwitchPartyMon_OAM - jp RedrawPartyMenu_ - -SwitchPartyMon_OAM: ; 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, (SFX_02_58 - SFX_Headers_02) / 3 - jp PlaySound - -SwitchPartyMon_Stats: ; 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 ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) - ld a, [de] - ld [hl], a - ld a, [H_DIVIDEND] ; $ff95 (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 - -INCLUDE "data/tms.asm" - -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 - callab Func_372d6 - ld a, [$cf0b] - cp $1 - ld de, YouWinText - jr c, .asm_137de - ld de, YouLoseText - jr z, .asm_137de - ld de, DrawText -.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, PickUpPayDayMoneyText - 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@" - -PickUpPayDayMoneyText: ; 1386b (4:786b) - TX_FAR _PickUpPayDayMoneyText - db "@" - -Func_13870: ; 13870 (4:7870) - ld a, [$cc57] - and a - ret nz - ld a, [$d736] - and a - ret nz - callab Func_c49d - jr nc, .asm_13888 -.asm_13884 - ld a, $1 - and a - ret -.asm_13888 - callab Func_128d8 - 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 FOREST ; Viridian Forest/Safari Zone - jr z, .asm_13912 - ld a, [W_GRASSRATE] ; $d887 -.asm_138c4 - ld b, a - ld a, [H_RAND1] ; $ffd3 - cp b - jr nc, .asm_13912 - ld a, [H_RAND2] ; $ffd4 - 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 ; $ff8c - 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 - -RecoilEffect_: ; 1392c (4:792c) - ld a, [H_WHOSETURN] ; $fff3 - 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, [W_DAMAGE + 1] - ld c, a - srl b - rr c - ld a, d - cp STRUGGLE - 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] ; $fff3 - 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, HitWithRecoilText ; $799e - jp PrintText -HitWithRecoilText: ; 1399e (4:799e) - TX_FAR _HitWithRecoilText - db "@" - -ConversionEffect_: ; 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 ; is mon immune to typical attacks (dig/fly) - jr nz, PrintButItFailedText - ld a, [hli] - ld [de], a - inc de - ld a, [hl] - ld [de], a - ld hl, Func_3fba8 - call Func_139d5 - ld hl, ConvertedTypeText - jp PrintText - -ConvertedTypeText: ; 139cd (4:79cd) - TX_FAR _ConvertedTypeText - db "@" - -PrintButItFailedText: ; 139d2 (4:79d2) - ld hl, PrintButItFailedText_ -Func_139d5: ; 139d5 (4:79d5) - ld b, BANK(PrintButItFailedText_) - jp Bankswitch - -HazeEffect_: ; 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, StatusChangesEliminatedText - 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 - -StatusChangesEliminatedText: ; 13a53 (4:7a53) - TX_FAR _StatusChangesEliminatedText - 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 SONY1 - jr z, .asm_13a86 - cp SONY2 - jr z, .asm_13a86 - cp SONY3 - 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 - -INCLUDE "data/sprite_sets.asm" - -PrintEmotionBubble: ; 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.w16.2bpp" - -EvolveTradeMon: ; 17d7d (5:7d7d) -; Verify the TradeMon's species name before -; attempting to initiate a trade evolution. - -; The names of the trade evolutions in Blue (JP) -; are checked. In that version, TradeMons that -; can evolve are Graveler and Haunter. - -; In localization, this check was translated -; before monster names were finalized. -; Then, Haunter's name was "Spectre". -; Since its name no longer starts with -; "SP", it is prevented from evolving. - -; This may have been why Red/Green's trades -; were used instead, where none can evolve. - -; This was fixed in Yellow. - - ld a, [wTradeMonNick] - - ; GRAVELER - cp "G" - jr z, .ok - - ; "SPECTRE" (HAUNTER) - cp "S" - ret nz - ld a, [wTradeMonNick + 1] - cp "P" - ret nz - -.ok - 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 - callab Func_3ad0e - 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, [$fff3] ;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, SubstituteText - call PrintText - ld hl, Func_3cd5a - ld b, BANK(Func_3cd5a) - jp Bankswitch -.alreadyHasSubstitute - ld hl, HasSubstituteText - jr .printText -.notEnoughHP - ld hl, TooWeakSubstituteText -.printText - jp PrintText - -SubstituteText: ; 17e1d (5:7e1d) - TX_FAR _SubstituteText - db "@" - -HasSubstituteText: ; 17e22 (5:7e22) - TX_FAR _HasSubstituteText - db "@" - -TooWeakSubstituteText: ; 17e27 (5:7e27) - TX_FAR _TooWeakSubstituteText - db "@" - -ActivatePC: ; 17e2c (5:7e2c) - call SaveScreenTilesToBuffer2 ;XXX: copy background from wTileMap to wTileMapBackup2 - ld a, (SFX_02_45 - SFX_Headers_02) / 3 - call PlaySound ;XXX: play sound or stop music - ld hl, TurnedOnPC1Text - 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) - callba Func_213c8 - 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, (SFX_02_47 - SFX_Headers_02) / 3 - call PlaySound ;XXX: play sound or stop music - call WaitForSoundToFinish ;XXX: wait for sound to be done - ld hl, AccessedMyPCText - call PrintText - callba PlayerPC - jr ReloadMainMenu -OaksPC: ; 17ec0 (5:7ec0) - ld a, (SFX_02_47 - SFX_Headers_02) / 3 - call PlaySound ;XXX: play sound or stop music - call WaitForSoundToFinish ;XXX: wait for sound to be done - callba Func_1e915 - jr ReloadMainMenu -PKMNLeague: ; 17ed2 (5:7ed2) - ld a, (SFX_02_47 - SFX_Headers_02) / 3 - call PlaySound ;XXX: play sound or stop music - call WaitForSoundToFinish ;XXX: wait for sound to be done - callba PKMNLeaguePC - jr ReloadMainMenu -BillsPC: ; 17ee4 (5:7ee4) - ld a, (SFX_02_47 - SFX_Headers_02) / 3 - 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, AccessedSomeonesPCText - jr .printText -.billsPC - ld hl, AccessedBillsPCText -.printText - call PrintText - callba BillsPC_ -ReloadMainMenu: ; 17f06 (5:7f06) - xor a - ld [$CC3C], a - call ReloadMapData - call UpdateSprites ;XXX: moves sprites - jp PCMainMenu -LogOff: ; 17f13 (5:7f13) - ld a, (SFX_02_46 - SFX_Headers_02) / 3 - 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 - -TurnedOnPC1Text: ; 17f23 (5:7f23) - TX_FAR _TurnedOnPC1Text - db "@" - -AccessedBillsPCText: ; 17f28 (5:7f28) - TX_FAR _AccessedBillsPCText - db "@" - -AccessedSomeonesPCText: ; 17f2d (5:7f2d) - TX_FAR _AccessedSomeonesPCText - db "@" - -AccessedMyPCText: ; 17f32 (5:7f32) - TX_FAR _AccessedMyPCText - db "@" - -; removes one of the specified item ID [$FFdb] from bag (if existent) -RemoveItemByID: ; 17f37 (5:7f37) - ld hl, wBagItems ; $d31e - ld a, [$ffdb] - ld b, a - xor a - ld [$ffdc], a -.asm_17f40 - ld a, [hli] - cp $ff - ret z - cp b - jr z, .asm_17f4f - inc hl - ld a, [$ffdc] - inc a - ld [$ffdc], a - jr .asm_17f40 -.asm_17f4f - ld a, $1 - ld [$cf96], a - ld a, [$ffdc] - ld [wWhichPokemon], a ; $cf92 - ld hl, wNumBagItems ; $d31d - jp RemoveItemFromInventory - -SECTION "bank6",ROMX,BANK[$6] - -INCLUDE "data/mapHeaders/celadoncity.asm" - -INCLUDE "data/mapObjects/celadoncity.asm" - -CeladonCityBlocks: ; 180df (6:40df) - INCBIN "maps/celadoncity.blk" - -INCLUDE "data/mapHeaders/pallettown.asm" - -INCLUDE "data/mapObjects/pallettown.asm" - -PalletTownBlocks: ; 182fd (6:42fd) - INCBIN "maps/pallettown.blk" - -INCLUDE "data/mapHeaders/viridiancity.asm" - -INCLUDE "data/mapObjects/viridiancity.asm" - -ViridianCityBlocks: ; 183ec (6:43ec) - INCBIN "maps/viridiancity.blk" - -INCLUDE "data/mapHeaders/pewtercity.asm" - -INCLUDE "data/mapObjects/pewtercity.asm" - -PewterCityBlocks: ; 185e6 (6:45e6) - INCBIN "maps/pewtercity.blk" - -INCLUDE "data/mapHeaders/ceruleancity.asm" - -INCLUDE "data/mapObjects/ceruleancity.asm" - -CeruleanCityBlocks: ; 18830 (6:4830) - INCBIN "maps/ceruleancity.blk" - -INCLUDE "data/mapHeaders/vermilioncity.asm" - -INCLUDE "data/mapObjects/vermilioncity.asm" - -VermilionCityBlocks: ; 18a3f (6:4a3f) - INCBIN "maps/vermilioncity.blk" - -INCLUDE "data/mapHeaders/fuchsiacity.asm" - -INCLUDE "data/mapObjects/fuchsiacity.asm" - -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 - -INCLUDE "scripts/pallettown.asm" - -INCLUDE "scripts/viridiancity.asm" - -INCLUDE "scripts/pewtercity.asm" - -INCLUDE "scripts/ceruleancity.asm" - -INCLUDE "scripts/vermilioncity.asm" - -INCLUDE "scripts/celadoncity.asm" - -INCLUDE "scripts/fuchsiacity.asm" - -INCLUDE "data/mapHeaders/blueshouse.asm" - -INCLUDE "scripts/blueshouse.asm" - -INCLUDE "data/mapObjects/blueshouse.asm" - -BluesHouseBlocks: ; 19bf6 (6:5bf6) - INCBIN "maps/blueshouse.blk" - -INCLUDE "data/mapHeaders/vermilionhouse3.asm" - -INCLUDE "scripts/vermilionhouse3.asm" - -INCLUDE "data/mapObjects/vermilionhouse3.asm" - -VermilionHouse3Blocks: ; 19c3f (6:5c3f) - INCBIN "maps/vermilionhouse3.blk" - -INCLUDE "data/mapHeaders/indigoplateaulobby.asm" - -INCLUDE "scripts/indigoplateaulobby.asm" - -INCLUDE "data/mapObjects/indigoplateaulobby.asm" - -IndigoPlateauLobbyBlocks: ; 19ccf (6:5ccf) - INCBIN "maps/indigoplateaulobby.blk" - -INCLUDE "data/mapHeaders/silphco4.asm" - -INCLUDE "scripts/silphco4.asm" - -INCLUDE "data/mapObjects/silphco4.asm" - -SilphCo4Blocks: ; 19ea4 (6:5ea4) - INCBIN "maps/silphco4.blk" - -INCLUDE "data/mapHeaders/silphco5.asm" - -INCLUDE "scripts/silphco5.asm" - -INCLUDE "data/mapObjects/silphco5.asm" - -SilphCo5Blocks: ; 1a116 (6:6116) - INCBIN "maps/silphco5.blk" - -INCLUDE "data/mapHeaders/silphco6.asm" - -INCLUDE "scripts/silphco6.asm" - -INCLUDE "data/mapObjects/silphco6.asm" - -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 ; $ff8c - 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 [$ff95], 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 ; $ff8c - 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 OVERWORLD - dw OverworldDoorTileIDs - db FOREST - dw ForestDoorTileIDs - db MART - dw MartDoorTileIDs - db HOUSE - dw HouseDoorTileIDs - db FOREST_GATE - dw TilesetMuseumDoorTileIDs - db MUSEUM - dw TilesetMuseumDoorTileIDs - db GATE - dw TilesetMuseumDoorTileIDs - db SHIP - dw ShipDoorTileIDs - db LOBBY - dw LobbyDoorTileIDs - db MANSION - dw MansionDoorTileIDs - db LAB - dw LabDoorTileIDs - db FACILITY - dw FacilityDoorTileIDs - db PLATEAU - dw PlateauDoorTileIDs - db $ff - -OverworldDoorTileIDs: ; 1a654 (6:6654) - db $1B,$58,$00 - -ForestDoorTileIDs: ; 1a657 (6:6657) - db $3a,$00 - -MartDoorTileIDs: ; 1a659 (6:6659) - db $5e,$00 - -HouseDoorTileIDs: ; 1a65b (6:665b) - db $54,$00 - -TilesetMuseumDoorTileIDs: ; 1a65d (6:665d) - db $3b,$00 - -ShipDoorTileIDs: ; 1a65f (6:665f) - db $1e,$00 - -LobbyDoorTileIDs: ; 1a661 (6:6661) - db $1c,$38,$1a,$00 - -MansionDoorTileIDs: ; 1a665 (6:6665) - db $1a,$1c,$53,$00 - -LabDoorTileIDs: ; 1a669 (6:6669) - db $34,$00 - -FacilityDoorTileIDs: ; 1a66b (6:666b) - db $43,$58,$1b,$00 - -PlateauDoorTileIDs: ; 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 ; OVERWORLD - 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 LoadHoppingShadowOAM - ld a, (SFX_02_4e - SFX_Headers_02) / 3 - 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 - -LoadHoppingShadowOAM: ; 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] - -INCLUDE "data/mapHeaders/cinnabarisland.asm" - -INCLUDE "data/mapObjects/cinnabarisland.asm" - -CinnabarIslandBlocks: ; 1c069 (7:4069) - INCBIN "maps/cinnabarisland.blk" - -INCLUDE "data/mapHeaders/route1.asm" - -INCLUDE "data/mapObjects/route1.asm" - -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) -CeruleanHouse1Blocks: ; 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" - -INCLUDE "text/monster_names.asm" - -Func_1c98a: ; 1c98a (7:498a) - call ClearScreen - call GoPAL_SET_CF1C - call LoadFontTilePatterns - call LoadTextBoxTilePatterns - ld hl, ClearSaveDataText - 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 - callba Func_73b6a - jp InitGame - -ClearSaveDataText: ; 1c9c1 (7:49c1) - TX_FAR _ClearSaveDataText - db "@" - -Func_1c9c6: ; 1c9c6 (7:49c6) - ld hl, WhichFloorText - 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 - -WhichFloorText: ; 1ca14 (7:4a14) - TX_FAR _WhichFloorText - db "@" - -INCLUDE "scripts/cinnabarisland.asm" - -INCLUDE "scripts/route1.asm" - -INCLUDE "data/mapHeaders/oakslab.asm" - -INCLUDE "scripts/oakslab.asm" - -INCLUDE "data/mapObjects/oakslab.asm" - -INCLUDE "data/mapHeaders/viridianmart.asm" - -INCLUDE "scripts/viridianmart.asm" - -INCLUDE "data/mapObjects/viridianmart.asm" - -ViridianMartBlocks: ; 1d530 (7:5530) - INCBIN "maps/viridianmart.blk" - -INCLUDE "data/mapHeaders/school.asm" - -INCLUDE "scripts/school.asm" - -INCLUDE "data/mapObjects/school.asm" - -INCLUDE "data/mapHeaders/viridianhouse.asm" - -INCLUDE "scripts/viridianhouse.asm" - -INCLUDE "data/mapObjects/viridianhouse.asm" - -INCLUDE "data/mapHeaders/pewterhouse1.asm" - -INCLUDE "scripts/pewterhouse1.asm" - -INCLUDE "data/mapObjects/pewterhouse1.asm" - -INCLUDE "data/mapHeaders/pewterhouse2.asm" - -INCLUDE "scripts/pewterhouse2.asm" - -INCLUDE "data/mapObjects/pewterhouse2.asm" - -INCLUDE "data/mapHeaders/ceruleanhousetrashed.asm" - -INCLUDE "scripts/ceruleanhousetrashed.asm" - -INCLUDE "data/mapObjects/ceruleanhousetrashed.asm" - -INCLUDE "data/mapHeaders/ceruleanhouse1.asm" - -INCLUDE "scripts/ceruleanhouse1.asm" - -INCLUDE "data/mapObjects/ceruleanhouse1.asm" - -INCLUDE "data/mapHeaders/bikeshop.asm" - -INCLUDE "scripts/bikeshop.asm" - -INCLUDE "data/mapObjects/bikeshop.asm" - -BikeShopBlocks: ; 1d88c (7:588c) - INCBIN "maps/bikeshop.blk" - -INCLUDE "data/mapHeaders/lavenderhouse1.asm" - -INCLUDE "scripts/lavenderhouse1.asm" - -INCLUDE "data/mapObjects/lavenderhouse1.asm" - -INCLUDE "data/mapHeaders/lavenderhouse2.asm" - -INCLUDE "scripts/lavenderhouse2.asm" - -INCLUDE "data/mapObjects/lavenderhouse2.asm" - -INCLUDE "data/mapHeaders/namerater.asm" - -INCLUDE "scripts/namerater.asm" - -INCLUDE "data/mapObjects/namerater.asm" - -INCLUDE "data/mapHeaders/vermilionhouse1.asm" - -INCLUDE "scripts/vermilionhouse1.asm" - -INCLUDE "data/mapObjects/vermilionhouse1.asm" - -INCLUDE "data/mapHeaders/vermiliondock.asm" - -INCLUDE "scripts/vermiliondock.asm" - -INCLUDE "data/mapObjects/vermiliondock.asm" - -VermilionDockBlocks: ; 1dcda (7:5cda) - INCBIN "maps/vermiliondock.blk" - -INCLUDE "data/mapHeaders/celadonmansion5.asm" - -INCLUDE "scripts/celadonmansion5.asm" - -INCLUDE "data/mapObjects/celadonmansion5.asm" - -INCLUDE "data/mapHeaders/fuchsiamart.asm" - -INCLUDE "scripts/fuchsiamart.asm" - -INCLUDE "data/mapObjects/fuchsiamart.asm" - -FuchsiaMartBlocks: ; 1ddc1 (7:5dc1) - INCBIN "maps/fuchsiamart.blk" - -INCLUDE "data/mapHeaders/saffronhouse1.asm" - -INCLUDE "scripts/saffronhouse1.asm" - -INCLUDE "data/mapObjects/saffronhouse1.asm" - -INCLUDE "data/mapHeaders/saffronhouse2.asm" - -INCLUDE "scripts/saffronhouse2.asm" - -INCLUDE "data/mapObjects/saffronhouse2.asm" - -INCLUDE "data/mapHeaders/diglettscaveroute2.asm" - -INCLUDE "scripts/diglettscaveroute2.asm" - -INCLUDE "data/mapObjects/diglettscaveroute2.asm" - -INCLUDE "data/mapHeaders/route2house.asm" - -INCLUDE "scripts/route2house.asm" - -INCLUDE "data/mapObjects/route2house.asm" - -INCLUDE "data/mapHeaders/route5gate.asm" - -INCLUDE "scripts/route5gate.asm" - -INCLUDE "data/mapObjects/route5gate.asm" - -Route5GateBlocks: ; 1e025 (7:6025) - INCBIN "maps/route5gate.blk" - -INCLUDE "data/mapHeaders/route6gate.asm" - -INCLUDE "scripts/route6gate.asm" - -INCLUDE "data/mapObjects/route6gate.asm" - -Route6GateBlocks: ; 1e0e8 (7:60e8) - INCBIN "maps/route6gate.blk" - -INCLUDE "data/mapHeaders/route7gate.asm" - -INCLUDE "scripts/route7gate.asm" - -INCLUDE "data/mapObjects/route7gate.asm" - -Route7GateBlocks: ; 1e1af (7:61af) - INCBIN "maps/route7gate.blk" - -INCLUDE "data/mapHeaders/route8gate.asm" - -INCLUDE "scripts/route8gate.asm" - -INCLUDE "data/mapObjects/route8gate.asm" - -Route8GateBlocks: ; 1e271 (7:6271) - INCBIN "maps/route8gate.blk" - -INCLUDE "data/mapHeaders/undergroundpathentranceroute8.asm" - -INCLUDE "scripts/undergroundpathentranceroute8.asm" - -INCLUDE "data/mapObjects/undergroundpathentranceroute8.asm" - -INCLUDE "data/mapHeaders/powerplant.asm" - -INCLUDE "scripts/powerplant.asm" - -INCLUDE "data/mapObjects/powerplant.asm" - -PowerPlantBlocks: ; 1e446 (7:6446) - INCBIN "maps/powerplant.blk" - -INCLUDE "data/mapHeaders/diglettscaveroute11.asm" - -INCLUDE "scripts/diglettscaveroute11.asm" - -INCLUDE "data/mapObjects/diglettscaveroute11.asm" - -INCLUDE "data/mapHeaders/route16house.asm" - -INCLUDE "scripts/route16house.asm" - -INCLUDE "data/mapObjects/route16house.asm" - -INCLUDE "data/mapHeaders/route22gate.asm" - -INCLUDE "scripts/route22gate.asm" - -INCLUDE "data/mapObjects/route22gate.asm" - -Route22GateBlocks: ; 1e74a (7:674a) - INCBIN "maps/route22gate.blk" - -INCLUDE "data/mapHeaders/billshouse.asm" - -INCLUDE "scripts/billshouse.asm" - -INCLUDE "data/mapObjects/billshouse.asm" - -BillsHouseBlocks: ; 1e905 (7:6905) - INCBIN "maps/billshouse.blk" - -Func_1e915: ; 1e915 (7:6915) - call SaveScreenTilesToBuffer2 - ld hl, AccessedOaksPCText - call PrintText - ld hl, GetDexRatedText - 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, ClosedOaksPCText - call PrintText - jp LoadScreenTilesFromBuffer2 - -GetDexRatedText: ; 1e93b (7:693b) - TX_FAR _GetDexRatedText - db "@" - -ClosedOaksPCText: ; 1e940 (7:6940) - TX_FAR _ClosedOaksPCText - db $0d,"@" - -AccessedOaksPCText: ; 1e946 (7:6946) - TX_FAR _AccessedOaksPCText - db "@" - -PrintNewBikeText: ; 1e94b (7:694b) - call EnableAutoTextBoxDrawing - ld a, $39 - jp PrintPredefTextID - -NewBicycleText: ; 1e953 (7:6953) - TX_FAR _NewBicycleText - db "@" - -DisplayOakLabLeftPoster: ; 1e958 (7:6958) - call EnableAutoTextBoxDrawing - ld a, $05 ; PushStartText - jp PrintPredefTextID - -PushStartText: ; 1e960 (7:6960) - TX_FAR _PushStartText - db "@" - -DisplayOakLabRightPoster: ; 1e965 (7:6965) - call EnableAutoTextBoxDrawing - ld hl, wPokedexOwned - ld b, wPokedexOwnedEnd - wPokedexOwned - call CountSetBits - ld a, [$d11e] - cp $2 - ld a, $6 ; SaveOptionText - jr c, .asm_1e97b - ld a, $7 ; StrengthsAndWeaknessesText -.asm_1e97b - jp PrintPredefTextID - -SaveOptionText: ; 1e97e (7:697e) - TX_FAR _SaveOptionText - db "@" - -StrengthsAndWeaknessesText: ; 1e983 (7:6983) - TX_FAR _StrengthsAndWeaknessesText - 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 - SFX_Headers_02) / 3 - call PlayMusic -.asm_1e9c2 - ld a, [$c02a] - cp $b9 - jr nz, .asm_1e9c2 - ld a, $d3 - ld [H_DOWNARROWBLINKCNT2], a ; $ff8c - call DisplayTextID - xor a - ld [$d528], a - ld a, $9c - ld [H_DOWNARROWBLINKCNT1], a ; $ff8b - 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, SafariGameOverText - jp PrintText - -SafariGameOverText: ; 1e9f7 (7:69f7) - db $08 ; asm - ld a, [W_NUMSAFARIBALLS] ; $da47 - and a - jr z, .asm_1ea04 - ld hl, TimesUpText - call PrintText -.asm_1ea04 - ld hl, GameOverText - call PrintText - jp TextScriptEnd - -TimesUpText: ; 1ea0d (7:6a0d) - TX_FAR _TimesUpText - db "@" - -GameOverText: ; 1ea12 (7:6a12) - TX_FAR _GameOverText - db "@" - -PrintCinnabarQuiz: ; 1ea17 (7:6a17) - ld a, [$c109] - cp $4 - ret nz - call EnableAutoTextBoxDrawing - ld a, $31 - jp PrintPredefTextID - -CinnabarGymQuiz: ; 1ea25 (7:6a25) - db $08 ; asm - xor a - ld [$da38], a - ld a, [wWhichTrade] ; $cd3d - push af - and $f - ld [$ffdb], a - pop af - and $f0 - swap a - ld [$ffdc], a - ld hl, CinnabarGymQuizIntroText - call PrintText - ld a, [$ffdb] - dec a - add a - ld d, $0 - ld e, a - ld hl, CinnabarQuizQuestions - 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, [$ffdc] - ld c, a - ld a, [wCurrentMenuItem] ; $cc26 - cp c - jr nz, .asm_1eab8 - ld hl, $d126 - set 5, [hl] - ld a, [$ffdb] - ld [$ffe0], a - ld hl, CinnabarGymQuizCorrectText - call PrintText - ld a, [$ffe0] - ld c, a - ld b, $1 - call Func_1ea8a - jp Func_1eb0a -.asm_1eab8 - call WaitForSoundToFinish - ld a, (SFX_02_51 - SFX_Headers_02) / 3 - call PlaySound - call WaitForSoundToFinish - ld hl, CinnabarGymQuizIncorrectText - call PrintText - ld a, [$ffdb] - 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, [$ffdb] - add $2 - ld [$da38], a - ret - -CinnabarGymQuizCorrectText: ; 1eae3 (7:6ae3) - db $0b - TX_FAR _CinnabarGymQuizCorrectText - db $06,$08 - - ld a, [$ffe0] - ld c, a - ld b, $2 - call Func_1ea8a - ld a, c - and a - jp nz, TextScriptEnd - call WaitForSoundToFinish - ld a, (SFX_02_57 - SFX_Headers_02) / 3 - call PlaySound - call WaitForSoundToFinish - jp TextScriptEnd - -CinnabarGymQuizIncorrectText: ; 1eb05 (7:6b05) - TX_FAR _CinnabarGymQuizIncorrectText - db "@" - -Func_1eb0a: ; 1eb0a (7:6b0a) - ld a, $6 - ld [$ffdb], a -.asm_1eb0e - ld a, [$ffdb] - 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, [$ffdb] - ld [$ffe0], 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 - -PrintMagazinesText: ; 1eb60 (7:6b60) - call EnableAutoTextBoxDrawing - ld a, $30 - call PrintPredefTextID - ret - -MagazinesText: ; 1eb69 (7:6b69) - TX_FAR _MagazinesText - db "@" - -BillsHousePC: ; 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 PrintPredefTextID -.asm_1eb8b - ld a, $1 - ld [$cc3c], a - ld a, $2e - call PrintPredefTextID - ld c, $20 - call DelayFrames - ld a, (SFX_02_3c - SFX_Headers_02) / 3 - call PlaySound - call WaitForSoundToFinish - ld c, $50 - call DelayFrames - ld a, (SFX_02_48 - SFX_Headers_02) / 3 - call PlaySound - call WaitForSoundToFinish - ld c, $30 - call DelayFrames - ld a, (SFX_02_3c - SFX_Headers_02) / 3 - call PlaySound - call WaitForSoundToFinish - ld c, $20 - call DelayFrames - ld a, (SFX_02_3a - SFX_Headers_02) / 3 - 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 PrintPredefTextID - 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, (SFX_02_49 - SFX_Headers_02) / 3 - 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 EEVEE - 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 "@" - -DisplayOakLabEmailText: ; 1ecaf (7:6caf) - ld a, [$c109] - cp $4 - ret nz - call EnableAutoTextBoxDrawing - ld a, $8 ; OakLabEmailText - jp PrintPredefTextID - -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 - -INCLUDE "text/type_names.asm" - -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♀@" - -FocusEnergyEffect_: ; 27f86 (9:7f86) - ld hl, W_PLAYERBATTSTATUS2 ; $d063 - ld a, [H_WHOSETURN] ; $fff3 - and a - jr z, .asm_27f91 - ld hl, W_ENEMYBATTSTATUS2 ; $d068 -.asm_27f91 - bit 2, [hl] ; is mon already using focus energy? - jr nz, .asm_27fa5 - set 2, [hl] ; mon is now using focus energy - callab Func_3fba8 - ld hl, GettingPumpedText ; $7fb2 - jp PrintText -.asm_27fa5 - ld c, $32 - call DelayFrames - ld hl, PrintButItFailedText_ - ld b, BANK(PrintButItFailedText_) - jp Bankswitch - -GettingPumpedText: ; 27fb3 (9:7fb3) - db $0a - TX_FAR _GettingPumpedText - 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" - -LeechSeedEffect_: ; 2bea9 (a:7ea9) - callab MoveHitTest - 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] ; $fff3 - 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 GRASS - jr z, .asm_2bee7 - inc de - ld a, [de] - cp GRASS - jr z, .asm_2bee7 - bit 7, [hl] - jr nz, .asm_2bee7 - set 7, [hl] - callab Func_3fba8 - ld hl, WasSeededText ; $7ef2 - jp PrintText -.asm_2bee7 - ld c, $32 - call DelayFrames - ld hl, EvadedAttackText ; $7ef7 - jp PrintText - -WasSeededText: ; 2bef2 (a:7ef2) - TX_FAR _WasSeededText - db "@" - -EvadedAttackText: ; 2bef7 (a:7ef7) - TX_FAR _EvadedAttackText - 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, SupperEffectiveText - jr nc, .done - ld hl, NotVeryEffectiveText -.done - jp PrintText - -SupperEffectiveText: ; 2fb8e (b:7b8e) - TX_FAR _SupperEffectiveText - db "@" - -NotVeryEffectiveText: ; 2fb93 (b:7b93) - TX_FAR _NotVeryEffectiveText - 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" - -; checks if the mon in wWhichPokemon already knows the move in $d0e0 -CheckIfMoveIsKnown: ; 2fe18 (b:7e18) - ld a, [wWhichPokemon] - ld hl, W_PARTYMON1_MOVE1 - ld bc, $2c - call AddNTimes - ld a, [$d0e0] - ld b, a - ld c, $4 ; nubmer of moves -.loop - ld a, [hli] - cp b - jr z, .alreadyKnown ; found a match - dec c - jr nz, .loop - and a - ret -.alreadyKnown - ld hl, AlreadyKnowsText - call PrintText - scf - ret - -AlreadyKnowsText: ; 2fe3b (b:7e3b) - TX_FAR _AlreadyKnowsText - 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 ; $ff8b - ld bc, -1 ; $ffff -.columnInnerLoop - ld a, [de] - dec de - swap a ; only high nybble contains information - call ScalePixelsByTwo - ld a, [H_SPRITEINTERLACECOUNTER] ; $ff8b - dec a - ld [H_SPRITEINTERLACECOUNTER], a ; $ff8b - 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 - -PayDayEffect_ ; 2feb8 (b:7eb8) - xor a - ld hl, $cd6d - ld [hli], a - ld a, [$fff3] - and a - ld a, [$d022] - jr z, .asm_2fec8 ; 0x2fec3 $3 - ld a, [$cff3] -.asm_2fec8 - add a - ld [$ff98], a - xor a - ld [$ff95], a - ld [$ff96], a - ld [$ff97], a - ld a, $64 - ld [$ff99], a - ld b, $4 - call Divide - ld a, [$ff98] - ld [hli], a - ld a, [$ff99] - ld [$ff98], a - ld a, $a - ld [$ff99], a - ld b, $4 - call Divide - ld a, [$ff98] - swap a - ld b, a - ld a, [$ff99] - add b - ld [hl], a - ld de, $cce7 - ld c, $3 - ld a, $b - call Predef - ld hl, CoinsScatteredText ; $7f04 - jp PrintText - -CoinsScatteredText: ; 2ff04 (b:7f04) - TX_FAR _CoinsScatteredText - db "@" - -Func_2ff09 ; 2ff09 (b:7f09) - ld a, [$c102] - and $8 - jr z, .asm_2ff2e - ld b, COIN_CASE - 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 PrintPredefTextID - 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" - -MistEffect_: ; 33f2b (c:7f2b) - ld hl, W_PLAYERBATTSTATUS2 - ld a, [$fff3] - and a - jr z, .asm_33f36 - ld hl, W_ENEMYBATTSTATUS2 -.asm_33f36 - bit 1, [hl] ; is mon protected by mist? - jr nz, .asm_33f4a - set 1, [hl] ; mon is now protected by mist - callab Func_3fba8 - ld hl, ShroudedInMistText - jp PrintText -.asm_33f4a - ld hl, PrintButItFailedText_ - ld b, BANK(PrintButItFailedText_) - jp Bankswitch - -ShroudedInMistText: ; 33f52 (c:7f52) - TX_FAR _ShroudedInMistText - db "@" - -OneHitKOEffect_: ; 33f57 (c:7f57) - ld hl, W_DAMAGE ; $d0d7 - xor a - ld [hli], a - ld [hl], a ; set the damage output to zero - dec a - ld [$d05e], a - ld hl, $d02a - ld de, $cffb - ld a, [H_WHOSETURN] ; $fff3 - 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, [$ff44] ; rLY - cp l - jr nz, .wait - - ld a, h - ld [rSCX], a ; $ff43 - -.wait2 - ld a, [$ff44] ; 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 STARTER1 - jr z, .ok - cp STARTER2 - jr z, .ok - cp STARTER3 - 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 - callab Func_3a948 - 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 LoadSlotMachineTiles - 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, (SFX_1f_66 - SFX_Headers_1f) / 3 - 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, NotThisTimeText - 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, SlotsMachineText_37665 - call PrintText - call WaitForTextScrollButtonPress - call Func_3776b - call Func_3775f - ld a, $e4 - ld [$ff48], a - jp .loop - -SlotsMachineText_37665: ; 37665 (d:7665) - db $08 ; asm - push bc - call Func_37728 - ld hl, LinedUpText - pop bc - inc bc - inc bc - inc bc - inc bc - ret - -LinedUpText: ; 37673 (d:7673) - TX_FAR _LinedUpText - 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@" - -NotThisTimeText: ; 3769d (d:769d) - TX_FAR _NotThisTimeText - 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, (SFX_1f_42 - SFX_Headers_1f) / 3 - call PlaySound - xor a - ld [$cd4c], a - ld b, $8 - ld de, 100 - ret - -SlotReward300Func: ; 37702 (d:7702) - ld hl, YeahText - call PrintText - ld a, (SFX_1f_3b - SFX_Headers_1f) / 3 - 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 - -YeahText: ; 37722 (d:7722) - TX_FAR _YeahText - 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, (SFX_1f_65 - SFX_Headers_1f) / 3 - 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, (SFX_1f_64 - SFX_Headers_1f) / 3 - jp PlaySound -.skip - ld a, [de] - and a - ret nz - jr .loop - -LoadSlotMachineTiles: ; 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 - -INCLUDE "data/slot_machine_wheels.asm" - -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 ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) - ld [$ff9b], a - ld [H_SAVEDNUMTOPRINT], a ; $ff9c - ld [$ff9d], a - ld [$ff9e], a -.asm_37d4f - ld a, [H_REMAINDER] ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - srl a - ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - jr nc, .asm_37d77 - ld a, [$ff9e] - ld c, a - ld a, [$ff98] - add c - ld [$ff9e], a - ld a, [$ff9d] - ld c, a - ld a, [$ff97] - adc c - ld [$ff9d], a - ld a, [H_SAVEDNUMTOPRINT] ; $ff9c - ld c, a - ld a, [H_NUMTOPRINT] ; $ff96 (aliases: H_MULTIPLICAND) - adc c - ld [H_SAVEDNUMTOPRINT], a ; $ff9c - ld a, [$ff9b] - ld c, a - ld a, [H_DIVIDEND] ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) - adc c - ld [$ff9b], a -.asm_37d77 - dec b - jr z, .asm_37d94 - ld a, [$ff98] - sla a - ld [$ff98], a - ld a, [$ff97] - rl a - ld [$ff97], a - ld a, [H_NUMTOPRINT] ; $ff96 (aliases: H_MULTIPLICAND) - rl a - ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND) - ld a, [H_DIVIDEND] ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) - rl a - ld [H_DIVIDEND], a ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) - jr .asm_37d4f -.asm_37d94 - ld a, [$ff9e] - ld [$ff98], a - ld a, [$ff9d] - ld [$ff97], a - ld a, [H_SAVEDNUMTOPRINT] ; $ff9c - ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND) - ld a, [$ff9b] - ld [H_DIVIDEND], a ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) - ret - -_Divide: ; 37da5 (d:7da5) - xor a - ld [$ff9a], a - ld [$ff9b], a - ld [H_SAVEDNUMTOPRINT], a ; $ff9c - ld [$ff9d], a - ld [$ff9e], a - ld a, $9 - ld e, a -.asm_37db3 - ld a, [$ff9a] - ld c, a - ld a, [H_NUMTOPRINT] ; $ff96 (aliases: H_MULTIPLICAND) - sub c - ld d, a - ld a, [H_REMAINDER] ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - ld c, a - ld a, [H_DIVIDEND] ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) - sbc c - jr c, .asm_37dce - ld [H_DIVIDEND], a ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) - ld a, d - ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND) - ld a, [$ff9e] - inc a - ld [$ff9e], a - jr .asm_37db3 -.asm_37dce - ld a, b - cp $1 - jr z, .asm_37e18 - ld a, [$ff9e] - sla a - ld [$ff9e], a - ld a, [$ff9d] - rl a - ld [$ff9d], a - ld a, [H_SAVEDNUMTOPRINT] ; $ff9c - rl a - ld [H_SAVEDNUMTOPRINT], a ; $ff9c - ld a, [$ff9b] - rl a - ld [$ff9b], a - dec e - jr nz, .asm_37e04 - ld a, $8 - ld e, a - ld a, [$ff9a] - ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - xor a - ld [$ff9a], a - ld a, [H_NUMTOPRINT] ; $ff96 (aliases: H_MULTIPLICAND) - ld [H_DIVIDEND], a ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) - ld a, [$ff97] - ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND) - ld a, [$ff98] - ld [$ff97], a -.asm_37e04 - ld a, e - cp $1 - jr nz, .asm_37e0a - dec b -.asm_37e0a - ld a, [H_REMAINDER] ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - srl a - ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - ld a, [$ff9a] - rr a - ld [$ff9a], a - jr .asm_37db3 -.asm_37e18 - ld a, [H_NUMTOPRINT] ; $ff96 (aliases: H_MULTIPLICAND) - ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - ld a, [$ff9e] - ld [$ff98], a - ld a, [$ff9d] - ld [$ff97], a - ld a, [H_SAVEDNUMTOPRINT] ; $ff9c - ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND) - ld a, [$ff9b] - ld [H_DIVIDEND], a ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) - ret - -StartSlotMachine: ; 37e2d (d:7e2d) - ld a, [wTrainerSpriteOffset] - cp $fd - jr z, .asm_37e66 - cp $fe - jr z, .asm_37e6a - cp $ff - jr z, .asm_37e6e - callba Func_2ff09 - 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 PrintPredefTextID - 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] - -INCLUDE "data/moves.asm" - -INCLUDE "data/base_stats.asm" - -INCLUDE "data/cries.asm" - -Func_39680: ; 39680 (e:5680) - ld a, [H_WHOSETURN] ; $fff3 - 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] ; $fff3 - 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 - callab _LoadTrainerPic - 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 - callab AIGetTypeEffectiveness - 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 - -INCLUDE "text/trainer_names.asm" - -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,[W_CUROPPONENT] - 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 STARTER3 - ld b,MEGA_DRAIN - jr z,.GiveStarterMove - cp STARTER1 - 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 - -INCLUDE "data/trainer_moves.asm" - -INCLUDE "data/trainer_parties.asm" - -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,(SFX_08_3e - SFX_Headers_08) / 3 - 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 - callab EnemySendOut - 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 - callab StatModifierUpEffect - 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 "@" - -DrawAllPokeballs: ; 3a849 (e:6849) - 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/game_boy.norepeat.2bpp" - INCBIN "gfx/link_cable.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, [$ffd7] - 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, IsEvolvingText - call PrintText - ld c, $32 - call DelayFrames - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - ld hl, wTileMap - ld bc, $c14 - call ClearScreenArea - ld a, $1 - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - ld a, $ff - ld [$cfcb], a - call CleanLCD_OAM - callab Func_7bde9 - jp c, Func_3af2e - ld hl, EvolvedText - 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, IntoText - call Func_3c59 - ld a, (SFX_02_3b - SFX_Headers_02) / 3 - 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 [$ffd7], 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, StoppedEvolvingText - call PrintText - call ClearScreen - pop hl - call Func_3af52 - jp asm_3ad2e - -EvolvedText: ; 3af3e (e:6f3e) - TX_FAR _EvolvedText - db "@" - -IntoText: ; 3af43 (e:6f43) - TX_FAR _IntoText - db "@" - -StoppedEvolvingText: ; 3af48 (e:6f48) - TX_FAR _StoppedEvolvingText - db "@" - -IsEvolvingText: ; 3af4d (e:6f4d) - TX_FAR _IsEvolvingText - 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 LearnMove (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)) - -INCLUDE "data/evos_moves.asm" - -HealEffect_: ; 3b9ec (e:79ec) - ld a, [H_WHOSETURN] ; $fff3 - 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 REST - jr nz, .asm_3ba37 - push hl - push de - push af - ld c, $32 - call DelayFrames - ld hl, W_PLAYERMONSTATUS ; $d018 - ld a, [H_WHOSETURN] ; $fff3 - and a - jr z, .asm_3ba25 - ld hl, W_ENEMYMONSTATUS ; $cfe9 -.asm_3ba25 - ld a, [hl] - and a - ld [hl], 2 ; Number of turns from Rest - ld hl, StartedSleepingEffect ; $7aa2 - jr z, .asm_3ba31 - ld hl, FellAsleepBecameHealthyText ; $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] ; $fff3 - 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, RegainedHealthText ; $7aac - jp PrintText - -Func_3ba97: ; 3ba97 (e:7a97) - ld c, $32 - call DelayFrames - ld hl, PrintButItFailedText_ - jp BankswitchEtoF - -StartedSleepingEffect: ; 3baa2 (e:7aa2) - TX_FAR _StartedSleepingEffect - db "@" - -FellAsleepBecameHealthyText: ; 3baa7 (e:7aa7) - TX_FAR _FellAsleepBecameHealthyText - db "@" - -RegainedHealthText: ; 3baac (e:7aac) - TX_FAR _RegainedHealthText - db "@" - -TransformEffect_: ; 3bab1 (e:7ab1) - ld hl, W_PLAYERMONID - ld de, $cfe5 - ld bc, W_ENEMYBATTSTATUS3 ; $d069 - ld a, [W_ENEMYBATTSTATUS1] ; $d067 - ld a, [H_WHOSETURN] ; $fff3 - 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 ; is mon invulnerable to typical attacks? (fly/dig) - jp nz, Func_3bb8c - push hl - push de - push bc - ld hl, W_PLAYERBATTSTATUS2 ; $d063 - ld a, [H_WHOSETURN] ; $fff3 - 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] ; $fff3 - 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, TransformedText ; $7b92 - jp PrintText - -Func_3bb7d: ; 3bb7d (e:7b7d) - ld a, [H_WHOSETURN] ; $fff3 - 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, PrintButItFailedText_ ; $7b53 - jp BankswitchEtoF - -TransformedText: ; 3bb92 (e:7b92) - TX_FAR _TransformedText - db "@" - -ReflectLightScreenEffect_: ; 3bb97 (e:7b97) - ld hl, W_PLAYERBATTSTATUS3 ; $d064 - ld de, W_PLAYERMOVEEFFECT ; $cfd3 - ld a, [H_WHOSETURN] ; $fff3 - and a - jr z, .asm_3bba8 - ld hl, W_ENEMYBATTSTATUS3 ; $d069 - ld de, W_ENEMYMOVEEFFECT ; $cfcd -.asm_3bba8 - ld a, [de] - cp LIGHT_SCREEN_EFFECT - jr nz, .reflect - bit 1, [hl] ; is mon already protected by light screen? - jr nz, .moveFailed - set 1, [hl] ; mon is now protected by light screen - ld hl, LightScreenProtectedText ; $7bd7 - jr .asm_3bbc1 -.reflect - bit 2, [hl] ; is mon already protected by reflect? - jr nz, .moveFailed - set 2, [hl] ; mon is now protected by reflect - ld hl, ReflectGainedArmorText ; $7bdc -.asm_3bbc1 - push hl - ld hl, Func_3fba8 ; $7ba8 - call BankswitchEtoF - pop hl - jp PrintText -.moveFailed - ld c, $32 - call DelayFrames - ld hl, PrintButItFailedText_ ; $7b53 - jp BankswitchEtoF - -LightScreenProtectedText: ; 3bbd7 (e:7bd7) - TX_FAR _LightScreenProtectedText - db "@" - -ReflectGainedArmorText: ; 3bbdc (e:7bdc) - TX_FAR _ReflectGainedArmorText - db "@" - -BankswitchEtoF: ; 3bbe1 (e:7be1) - ld b, BANK(BattleCore) - jp Bankswitch - -SECTION "bankF",ROMX,BANK[$F] - -BattleCore: - -; These are move effects (second value from the Moves table in bank $E). -EffectsArray1: ; 3c000 (f:4000) - db CONVERSION_EFFECT - db HAZE_EFFECT - db SWITCH_AND_TELEPORT_EFFECT - db MIST_EFFECT - db FOCUS_ENERGY_EFFECT - db CONFUSION_EFFECT - db HEAL_EFFECT - db TRANSFORM_EFFECT - db LIGHT_SCREEN_EFFECT - db REFLECT_EFFECT - db POISON_EFFECT - db PARALYZE_EFFECT - db SUBSTITUTE_EFFECT - db MIMIC_EFFECT - db LEECH_SEED_EFFECT - db SPLASH_EFFECT - db -1 -EffectsArray2: ; 3c011 (f:4011) -; moves that do damage but not through normal calculations -; e.g., Super Fang, Psywave - db SUPER_FANG_EFFECT - db SPECIAL_DAMAGE_EFFECT - db -1 -EffectsArray3: ; 3c014 (f:4014) -; non-damaging, stat‐affecting or status‐causing moves? -; e.g., Meditate, Bide, Hypnosis - db $01 - db ATTACK_UP1_EFFECT - db DEFENSE_UP1_EFFECT - db SPEED_UP1_EFFECT - db SPECIAL_UP1_EFFECT - db ACCURACY_UP1_EFFECT - db EVASION_UP1_EFFECT - db ATTACK_DOWN1_EFFECT - db DEFENSE_DOWN1_EFFECT - db SPEED_DOWN1_EFFECT - db SPECIAL_DOWN1_EFFECT - db ACCURACY_DOWN1_EFFECT - db EVASION_DOWN1_EFFECT - db BIDE_EFFECT - db SLEEP_EFFECT - db ATTACK_UP2_EFFECT - db DEFENSE_UP2_EFFECT - db SPEED_UP2_EFFECT - db SPECIAL_UP2_EFFECT - db ACCURACY_UP2_EFFECT - db EVASION_UP2_EFFECT - db ATTACK_DOWN2_EFFECT - db DEFENSE_DOWN2_EFFECT - db SPEED_DOWN2_EFFECT - db SPECIAL_DOWN2_EFFECT - db ACCURACY_DOWN2_EFFECT - db EVASION_DOWN2_EFFECT - db -1 -EffectsArray4: ; 3c030 (f:4030) -; Attacks that aren't finished after they faint the opponent. - db DRAIN_HP_EFFECT - db EXPLODE_EFFECT - db DREAM_EATER_EFFECT - db PAY_DAY_EFFECT - db TWO_TO_FIVE_ATTACKS_EFFECT - db $1E - db ATTACK_TWICE_EFFECT - db RECOIL_EFFECT - db TWINEEDLE_EFFECT - db RAGE_EFFECT - db -1 -EffectsArray5: ; 3c03b (f:403b) - db DRAIN_HP_EFFECT - db EXPLODE_EFFECT - db DREAM_EATER_EFFECT - db PAY_DAY_EFFECT - db SWIFT_EFFECT - db TWO_TO_FIVE_ATTACKS_EFFECT - db $1E - db CHARGE_EFFECT - db SUPER_FANG_EFFECT - db SPECIAL_DAMAGE_EFFECT - db FLY_EFFECT - db ATTACK_TWICE_EFFECT - db JUMP_KICK_EFFECT - db RECOIL_EFFECT - ; fallthrough to Next EffectsArray -EffectsArray5B: ; 3c049 (f:4049) -; moves that prevent the player from switching moves? - db THRASH_PETAL_DANCE_EFFECT - db TRAPPING_EFFECT - db -1 - -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 [$ffb0], a - ld [rWY], a ; $ff4a - xor a - ld [$ffd7], a - ld [$ffaf], a - dec a - ld [$cfcb], a - call Delay3 - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - ld b, $70 - ld c, $90 - ld a, c - ld [$ffae], a - call DelayFrame - ld a, $e4 - ld [rBGP], a ; $ff47 - ld [rOBP0], a ; $ff48 - ld [rOBP1], a ; $ff49 -.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 [$ffae], a - dec c - dec c - jr nz, .asm_3c0bb - ld a, $1 - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - ld a, $31 - ld [$ffe1], a - FuncCoord 1, 5 ; $c405 - ld hl, Coord - ld a, $1 - call Predef ; indirect jump to Func_3f0c6 (3f0c6 (f:70c6)) - xor a - ld [$ffb0], a - ld [rWY], a ; $ff4a - inc a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - call Delay3 - ld b, $1 - call GoPAL_SET - call ResetLCD_OAM - ld hl, PrintBeginningBattleText - ld b, BANK(PrintBeginningBattleText) - 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, [$ff44] - cp l - jr nz, Func_3c110 - ld a, h - ld [rSCX], a ; $ff43 -.asm_3c118 - ld a, [$ff44] - 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, OutOfSafariBallsText - jp PrintText -.asm_3c17a - callab PrintSafariZoneBattleText - 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 - -OutOfSafariBallsText: ; 3c1a8 (f:41a8) - TX_FAR _OutOfSafariBallsText - 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, WildRanText - jr nz, .asm_3c216 - xor a - ld [$cf0b], a - ld hl, EnemyRanText -.asm_3c216 - call PrintText - ld a, (SFX_08_44 - SFX_Headers_08) / 3 - call PlaySoundWaitForCurrent - xor a - ld [H_WHOSETURN], a ; $fff3 - ld hl, AnimationSlideEnemyMonOut - ld b, BANK(AnimationSlideEnemyMonOut) - jp Bankswitch - -WildRanText: ; 3c229 (f:4229) - TX_FAR _WildRanText - db "@" - -EnemyRanText: ; 3c22e (f:422e) - TX_FAR _EnemyRanText - 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 - callab Func_3a74b -.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, [$ffaa] - 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 - callab TrainerAI - 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 - callab TrainerAI - 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] ; $fff3 - and a - jr z, .playersTurn - ld hl, W_ENEMYMONCURHP ; $cfe6 - ld de, W_ENEMYMONSTATUS ; $cfe9 -.playersTurn - ld a, [de] - and (1 << BRN) | (1 << PSN) - jr z, .notBurnedOrPoisoned - push hl - ld hl, HurtByPoisonText - ld a, [de] - and 1 << 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] ; $fff3 - 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] ; $fff3 - push af - xor $1 - ld [H_WHOSETURN], a ; $fff3 - xor a - ld [$cc5b], a - ld a,ABSORB - call PlayMoveAnimation ; play leech seed animation (from opposing mon) - pop af - ld [H_WHOSETURN], a ; $fff3 - 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] ; $fff3 - 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] ; $fff3 - 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] ; $fff3 - xor $1 - ld [H_WHOSETURN], a ; $fff3 - call UpdateCurMonHPBar - ld a, [H_WHOSETURN] ; $fff3 - xor $1 - ld [H_WHOSETURN], a ; $fff3 - pop hl - ret - -UpdateCurMonHPBar: ; 3c4f6 (f:44f6) - FuncCoord 10, 9 ; $c45e - ld hl, Coord ; tile pointer to player HP bar - ld a, [H_WHOSETURN] ; $fff3 - 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, (SFX_08_48 - SFX_Headers_08) / 3 ; SFX_FALL? - call PlaySoundWaitForCurrent -.sfxwait - ld a, [$c02a] - cp (SFX_08_48 - SFX_Headers_08) / 3 - jr z, .sfxwait - ld a, (SFX_08_43 - SFX_Headers_08) / 3 ; 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, EnemyMonFaintedText - 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 - callab GainExperience - 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, GainExperience - ld b, BANK(GainExperience) - jp Bankswitch - -EnemyMonFaintedText: ; 0x3c63e - TX_FAR _EnemyMonFaintedText - 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 - callab DrawEnemyPokeballs - 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 - call PrintText - ld a, [W_ISLINKBATTLE] ; $d12b - cp $4 - ret z - call ScrollTrainerPicAfterBattle - ld c, $28 - call DelayFrames - call Func_3381 - ld hl, MoneyForWinningText - 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, UseNextMonText - 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 - -UseNextMonText: ; 3c7d3 (f:47d3) - TX_FAR _UseNextMonText - 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 - 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 ; $ff8b - ld c, a -.asm_3c8e2 - push bc - push hl - ld b, $7 -.asm_3c8e6 - push hl - ld a, [H_DOWNARROWBLINKCNT1] ; $ff8b - ld c, a -.asm_3c8ea - ld a, [H_DOWNARROWBLINKCNT1] ; $ff8b - 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,AlreadyOutText - 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, NoWillText - call PrintText -.asm_3cab2 - xor a - ret - -NoWillText: ; 3cab4 (f:4ab4) - TX_FAR _NoWillText - db "@" - -Func_3cab9: ; 3cab9 (f:4ab9) - call IsGhostBattle - 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 [$ff97], a - ld a, [hl] - ld [$ff98], a - ld a, [de] - ld [$ff8d], a - inc de - ld a, [de] - ld [$ff8e], a - call LoadScreenTilesFromBuffer1 - ld de, $ff97 - ld hl, $ff8d - ld c, $2 - call StringCmp - jr nc, .asm_3cb5c - xor a - ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND) - ld a, $20 - ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - call Multiply - ld a, [$ff97] - ld [H_DIVIDEND], a ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) - ld a, [$ff98] - ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND) - ld a, [$ff8d] - ld b, a - ld a, [$ff8e] - srl b - rr a - srl b - rr a - and a - jr z, .asm_3cb5c - ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - ld b, $2 - call Divide - ld a, [$ff97] - 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, [$ff98] - add b - ld [$ff98], a - jr c, .asm_3cb5c - jr .asm_3cb2b -.asm_3cb39 - call GenRandomInBattle - ld b, a - ld a, [$ff98] - cp b - jr nc, .asm_3cb5c - ld a, $1 - ld [$cd6a], a - ld hl, CantEscapeText - jr .asm_3cb4f -.asm_3cb4c - ld hl, NoRunningText -.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, (SFX_08_44 - SFX_Headers_08) / 3 - call PlaySoundWaitForCurrent - ld hl, GotAwayText - call PrintText - call WaitForSoundToFinish - call SaveScreenTilesToBuffer1 - scf - ret - -CantEscapeText: ; 3cb97 (f:4b97) - TX_FAR _CantEscapeText - db "@" - -NoRunningText: ; 3cb9c (f:4b9c) - TX_FAR _NoRunningText - db "@" - -GotAwayText: ; 3cba1 (f:4ba1) - TX_FAR _GotAwayText - 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) - callab SendOutMon - 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 [$ffe1], 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 ; $fff3 - 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 ; $ff8b - 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 ; $ff8b - 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 ; $ffba - FuncCoord 9, 7 ; $c435 - ld hl, Coord - ld bc, $50b - call ClearScreenArea - callab Func_3a902 - 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 ; $ffba - 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 ; $ffba - ld hl, wTileMap - ld bc, $40c - call ClearScreenArea - callab Func_3a919 - 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 [$ff97], a - ld a, [hld] - ld [$ff98], 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 ; $ff96 (aliases: H_MULTIPLICAND) - ld a, $30 - ld [H_REMAINDER], a ; $ff99 (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 ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - ld a, b - and a - jr z, .asm_3ce6a - ld a, [H_REMAINDER] ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - srl b - rr a - srl b - rr a - ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - ld a, [$ff97] - ld b, a - srl b - ld a, [$ff98] - rr a - srl b - rr a - ld [$ff98], a - ld a, b - ld [$ff97], a -.asm_3ce6a - ld a, [$ff97] - ld [H_DIVIDEND], a ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) - ld a, [$ff98] - ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND) - ld a, $2 - ld b, a - call Divide - ld a, [$ff98] - 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 ; $ffba - 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, SAFARI_BALL - 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, ItemsCantBeUsedHereText - call PrintText - jp InitBattleMenu -.asm_3cffd ; bag? - call SaveScreenTilesToBuffer2 ; copy bg? - ld a, [W_BATTLETYPE] ; $d05a - cp $2 - jr nz, asm_3d00e - ld a, SAFARI_BAIT - 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 - -ItemsCantBeUsedHereText: ; 3d0c5 (f:50c5) - TX_FAR _ItemsCantBeUsedHereText - 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, SAFARI_ROCK - 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, BANK(AnimationSubstitute) ; BANK(AnimationMinimizeMon) - 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, AlreadyOutText - 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) - callab RetreatMon - 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 - -AlreadyOutText: ; 3d1f5 (f:51f5) - TX_FAR _AlreadyOutText - 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 - callab Func_39b87 - ret - -.writemoves - ld de, $d0e1 - ld a, [$fff6] - set 2, a - ld [$fff6], a - call PlaceString - ld a, [$fff6] - res 2, a - ld [$fff6], 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, NoMovesLeftText - call PrintText - ld c, $3c - call DelayFrames - xor a - ret - -NoMovesLeftText: ; 3d430 (f:5430) - TX_FAR _NoMovesLeftText - 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 ; $ffba - 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 - call PlaceString - jr .asm_3d54e -.asm_3d4df - ld hl, wCurrentMenuItem ; $cc26 - dec [hl] - xor a - ld [H_WHOSETURN], a ; $fff3 - 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 - callab GetMaxPP - 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 - 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 ; $ffba - 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 | 1 << 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 - callab AIEnemyTrainerChooseMoves -.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 - callab PrintWaitingText -.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 ; $fff3 - 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 PrintGhostText - 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 CHARGE_EFFECT - jp z, Func_3f132 - cp FLY_EFFECT - 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 PrintMonName1Text - 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,FLY_EFFECT - jr z,.next5 - cp a,CHARGE_EFFECT - 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,MIRROR_MOVE_EFFECT - jr nz,.next6 ; 577A - call MirrorMoveCopyMove - jp z,Func_3d80a - xor a - ld [$CCED],a - jp Func_3d69a -.next6 - cp a,METRONOME_EFFECT - 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 PrintMoveFailureText - ld a,[W_PLAYERMOVEEFFECT] - cp a,EXPLODE_EFFECT - jr z,.next9 ; 57B9 - jp Func_3d80a -.next8 - call ApplyAttackToEnemyPokemon - call Func_3dc5c - callab DisplayEffectiveness - 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 - -PrintGhostText: ; 3d811 (f:5811) -; print the ghost battle messages - call IsGhostBattle - ret nz - ld a,[H_WHOSETURN] - and a - jr nz,.Ghost - ld a,[W_PLAYERMONSTATUS] ; player’s turn - and a,SLP | (1 << 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 "@" - -IsGhostBattle: ; 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 FRZ,[hl] ; frozen? - jr z,.HeldInPlaceCheck ; to 5898 - ld hl,IsFrozenText - 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 ; confused - ld [hl],a - call PrintHurtItselfText - jr .next5 ; 5952 -.next3 - ld a,[$CCEE] - and a - jr z,.ParalysisCheck ; 593E - ld hl,$CCDC - cp [hl] - jr nz,.ParalysisCheck - call PrintMoveIsDisabledText - ld hl,Func_3d80a ; $580a - jp Func_3da37 -.ParalysisCheck - ld hl,W_PLAYERMONSTATUS - bit PAR,[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,FLY_EFFECT - jr z,.next8 ; 5966 - cp a,CHARGE_EFFECT - 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,BIDE - ld [W_PLAYERMOVENUM],a - ld hl,asm_3d705 ; $5705 - jp Func_3da37 -.next10 - bit 1,[hl] - jr z,.next13 ; 59FF - ld a,THRASH - 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, RAGE - 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 "@" - -IsFrozenText: ; 3da47 (f:5a47) - TX_FAR _IsFrozenText - 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 "@" - -PrintMoveIsDisabledText: ; 3da88 (f:5a88) - ld hl, wPlayerSelectedMove ; $ccdc - ld de, W_PLAYERBATTSTATUS1 ; $d062 - ld a, [H_WHOSETURN] ; $fff3 - 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, MoveIsDisabledText - jp PrintText - -MoveIsDisabledText: ; 3daa8 (f:5aa8) - TX_FAR _MoveIsDisabledText - db "@" - -PrintHurtItselfText: ; 3daad (f:5aad) - ld hl, HurtItselfText - 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 ; $fff3 - call PlayMoveAnimation - call Func_3cd60 - xor a - ld [H_WHOSETURN], a ; $fff3 - jp ApplyDamageToPlayerPokemon - -PrintMonName1Text: ; 3daf5 (f:5af5) - ld hl, MonName1Text - jp PrintText - -MonName1Text: ; 3dafb (f:5afb) - TX_FAR _MonName1Text - db $08 ; asm - ld a, [H_WHOSETURN] ; $fff3 - 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, Used2Text - ret nz - ld a, [$d11e] - cp DOUBLESLAP - ld hl, Used2Text - ret c - ld hl, Used1Text - ret - -Used1Text: ; 3db2d (f:5b2d) - TX_FAR _Used1Text - db $08 ; asm - jr PrintInsteadText - -Used2Text: ; 3db34 (f:5b34) - TX_FAR _Used2Text - db $08 ; asm - -PrintInsteadText: ; 3db39 (f:5b39) - ld a, [$cced] - and a - jr z, PrintCF4BText - ld hl, InsteadText - ret - -InsteadText: ; 3db43 (f:5b43) - TX_FAR _InsteadText - db $08 ; asm - -PrintCF4BText: ; 3db48 (f:5b48) - ld hl, CF4BText - ret - -CF4BText: ; 3db4c (f:5b4c) - TX_FAR _CF4BText - db $08 ; asm - ld hl, ExclamationPointPointerTable - 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 - -ExclamationPointPointerTable: ; 3db62 (f:5b62) - dw ExclamationPoint1Text - dw ExclamationPoint2Text - dw ExclamationPoint3Text - dw ExclamationPoint4Text - dw ExclamationPoint5Text - -ExclamationPoint1Text: ; 3db6c (f:5b6c) - TX_FAR _ExclamationPoint1Text - db "@" - -ExclamationPoint2Text: ; 3db71 (f:5b71) - TX_FAR _ExclamationPoint2Text - db "@" - -ExclamationPoint3Text: ; 3db76 (f:5b76) - TX_FAR _ExclamationPoint3Text - db "@" - -ExclamationPoint4Text: ; 3db7b (f:5b7b) - TX_FAR _ExclamationPoint4Text - db "@" - -ExclamationPoint5Text: ; 3db80 (f:5b80) - TX_FAR _ExclamationPoint5Text - 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 - -PrintMoveFailureText: ; 3dbe2 (f:5be2) - ld de, W_PLAYERMOVEEFFECT ; $cfd3 - ld a, [H_WHOSETURN] ; $fff3 - and a - jr z, .asm_3dbed - ld de, W_ENEMYMOVEEFFECT ; $cfcd -.asm_3dbed - ld hl, DoesntAffectMonText ; $5c57 - ld a, [$d05b] - and $7f - jr z, .asm_3dc04 - ld hl, AttackMissedText ; $5c42 - ld a, [$d05e] - cp $ff - jr nz, .asm_3dc04 - ld hl, UnaffectedText ; $5c4c -.asm_3dc04 - push de - call PrintText - xor a - ld [$d05e], a - pop de - ld a, [de] - cp JUMP_KICK_EFFECT - ret nz - - ; if you get here, the mon used hi jump kick and missed - 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, KeptGoingAndCrashedText ; $5c47 - call PrintText - ld b, $4 - ld a, $24 - call Predef ; indirect jump to Func_48125 (48125 (12:4125)) - ld a, [H_WHOSETURN] ; $fff3 - and a - jr nz, .asm_3dc3f - jp ApplyDamageToPlayerPokemon -.asm_3dc3f - jp ApplyDamageToEnemyPokemon - -AttackMissedText: ; 3dc42 (f:5c42) - TX_FAR _AttackMissedText - db "@" - -KeptGoingAndCrashedText: ; 3dc47 (f:5c47) - TX_FAR _KeptGoingAndCrashedText - db "@" - -UnaffectedText: ; 3dc4c (f:5c4c) - TX_FAR _UnaffectedText - db "@" - -PrintDoesntAffectText: ; 3dc51 (f:5c51) - ld hl, DoesntAffectMonText ; $5c57 - jp PrintText - -DoesntAffectMonText: ; 3dc57 (f:5c57) - TX_FAR _DoesntAffectMonText - db "@" - -Func_3dc5c: ; 3dc5c (f:5c5c) - ld a, [$d05e] - and a - jr z, .asm_3dc75 - dec a - add a - ld hl, CriticalOHKOTextPointers ; $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 - -CriticalOHKOTextPointers: ; 3dc7a (f:5c7a) - dw CriticalHitText - dw OHKOText - -CriticalHitText: ; 3dc7e (f:5c7e) - TX_FAR _CriticalHitText - db "@" - -OHKOText: ; 3dc83 (f:5c83) - TX_FAR _OHKOText - 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 -; what level might disobey? - ld hl, W_OBTAINEDBADGES - bit 7, [hl] - ld a, 101 - jr nz, .asm_3dcce - bit 5, [hl] - ld a, 70 - jr nz, .asm_3dcce - bit 3, [hl] - ld a, 50 - jr nz, .asm_3dcce - bit 1, [hl] - ld a, 30 - jr nz, .asm_3dcce - ld a, 10 -.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, WontObeyText - call PrintText - call PrintHurtItselfText - jp Func_3ddb4 -.asm_3dd0e - call GenRandomInBattle - add a - swap a - and $7 - jr z, .asm_3dd0e - ld [W_PLAYERMONSTATUS], a ; $d018 - ld hl, BeganToNapText - jr .asm_3dd3a -.asm_3dd20 - call GenRandomInBattle - and $3 - ld hl, LoafingAroundText - and a - jr z, .asm_3dd3a - ld hl, WontObeyText - dec a - jr z, .asm_3dd3a - ld hl, TurnedAwayText - dec a - jr z, .asm_3dd3a - ld hl, IgnoredOrdersText -.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 - -LoafingAroundText: ; 3ddb6 (f:5db6) - TX_FAR _LoafingAroundText - db "@" - -BeganToNapText: ; 3ddbb (f:5dbb) - TX_FAR _BeganToNapText - db "@" - -WontObeyText: ; 3ddc0 (f:5dc0) - TX_FAR _WontObeyText - db "@" - -TurnedAwayText: ; 3ddc5 (f:5dc5) - TX_FAR _TurnedAwayText - db "@" - -IgnoredOrdersText: ; 3ddca (f:5dca) - TX_FAR _IgnoredOrdersText - 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, [$ff97] - ld b, a - ld a, [$ff98] - 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, [$ff97] - ld b, a - ld a, [$ff98] - 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 [$ff97], a - ld a, [hl] - ld [$ff98], 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, [$fff3] ; 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] ; $fff3 - 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] ; $fff3 - 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 - callab Func_79747 ; animate the substitute breaking -; 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 StatModifierUpEffect ; 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,NUM_MOVES + 1 ; 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 - -INCLUDE "data/type_effects.asm" - -; 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,ATTACK_DOWN1_EFFECT - jr c,.skipEnemyMistCheck - cp a,BIDE_EFFECT - jr c,.enemyMistCheck - cp a,$3a - jr c,.skipEnemyMistCheck - cp a,POISON_EFFECT - 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 ; is mon protected by mist? - 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,ATTACK_DOWN1_EFFECT - jr c,.skipPlayerMistCheck - cp a,BIDE_EFFECT - jr c,.playerMistCheck - cp a,$3a - jr c,.skipPlayerMistCheck - cp a,POISON_EFFECT - jr c,.playerMistCheck - jr .skipPlayerMistCheck -.playerMistCheck -; similar to enemy mist check - ld a,[W_PLAYERBATTSTATUS2] - bit 1,a ; is mon protected by mist? - 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 ; $ff96 (aliases: H_MULTIPLICAND) - dec hl - ld a, [hli] - ld [$ff97], a - ld a, [hl] - ld [$ff98], a -.asm_3e69c - call GenRandomInBattle - rrca - cp $d9 - jr c, .asm_3e69c - ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - call Multiply - ld a, $ff - ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - ld b, $4 - call Divide - ld a, [$ff97] - ld hl, W_DAMAGE ; $d0d7 - ld [hli], a - ld a, [$ff98] - ld [hl], a - ret - -Func_3e6bc: ; 3e6bc (f:66bc) - ld a, [wEnemySelectedMove] ; $ccdd - inc a - jp z, Func_3e88c - call PrintGhostText - 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 CHARGE_EFFECT - jp z, Func_3f132 - cp FLY_EFFECT - jp z, Func_3f132 - jr asm_3e72b -asm_3e70b: ; 3e70b (f:670b) - ld hl, W_ENEMYBATTSTATUS1 ; $d067 - res 4, [hl] ; no longer charging up for attack - res 6, [hl] ; no longer invulnerable to typcial attacks - 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 PrintMonName1Text - 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 EXPLODE_EFFECT - 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 ; does mon have a substitute? - 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 ; does mon have a substitute? - ld hl, Func_79771 - ld b, BANK(Func_79771) - call nz, Bankswitch ; slide the substitute's sprite out - jr asm_3e7ef - -Func_3e7d1: ; 3e7d1 (f:67d1) - call Func_3ec81 - ld c, $1e - call DelayFrames - ld a, [W_ENEMYMOVEEFFECT] ; $cfcd - cp FLY_EFFECT - jr z, .asm_3e7e6 - cp CHARGE_EFFECT - 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 MIRROR_MOVE_EFFECT - jr nz, .notMirrorMoveEffect - call MirrorMoveCopyMove - jp z, Func_3e88c - jp Func_3e6fc -.notMirrorMoveEffect - cp METRONOME_EFFECT - jr nz, .notMetronomeEffect - call MetronomePickMove - jp Func_3e6fc -.notMetronomeEffect - 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 PrintMoveFailureText - ld a, [W_ENEMYMOVEEFFECT] ; $cfcd - cp EXPLODE_EFFECT - jr z, .asm_3e83e - jp Func_3e88c -.asm_3e82b - call ApplyAttackToPlayerPokemon - call Func_3dc5c - callab DisplayEffectiveness - 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] ; is mon hitting multiple times? (example: double kick) - jr z, .asm_3e873 - push hl - ld hl, $d06f - dec [hl] - pop hl - jp nz, Func_3e794 - res 2, [hl] ; mon is no longer hitting multiple times - ld hl, HitXTimesText ; $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 - -HitXTimesText: ; 3e887 (f:6887) - TX_FAR _HitXTimesText - 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 - call PrintText - xor a - ld [$cc5b], a - ld a,SLP_ANIM - call PlayMoveAnimation - jr .asm_3e8b5 -.asm_3e8af - ld hl, WokeUpText - 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, IsFrozenText - 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 - 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 - 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 - 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 - 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 - call PrintText - jp Func_3e9aa -.asm_3e944 - ld hl, IsConfusedText - 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 - 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 ; $fff3 - ld a, POUND - call PlayMoveAnimation - ld a, $1 - ld [H_WHOSETURN], a ; $fff3 - 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 PrintMoveIsDisabledText - 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 - 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 FLY_EFFECT - jr z, .asm_3e9e7 - cp CHARGE_EFFECT - 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] ; is mon using bide? - 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 - 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, BIDE - ld [W_ENEMYMOVENUM], a ; $cfcc - call Func_3ec81 - ld hl, asm_3e782 ; $6782 - jp Func_3eab8 -.asm_3ea54 - bit 1, [hl] ; is mon using thrash or petal dance? - jr z, .asm_3ea83 - ld a, THRASH - ld [W_ENEMYMOVENUM], a ; $cfcc - ld hl, ThrashingAboutText - 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] ; mon is no longer using thrash or petal dance - set 7, [hl] ; mon is now confused - call GenRandomInBattle - and $3 - inc a - inc a - ld [$d070], a - pop hl - jp Func_3eab8 -.asm_3ea83 - bit 5, [hl] ; is mon using multi-turn move? - jp z, Func_3ea9b - ld hl, AttackContinuesText - 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 ; is mon using rage? - jp z, Func_3eaba - ld a, RAGE - 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] ; $fff3 - 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 - callab Func_372d6 - 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)) - callab Func_3ee58 - ld a, $1 - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - ld a, $ff - ld [$cfcb], a - call CleanLCD_OAM - call ClearScreen - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - ld [$ffb0], a - ld [rWY], a ; $ff4a - ld [$ffd7], 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 ; $ff8b - 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] ; $ff8b - ld [hli], a - inc a - ld [H_DOWNARROWBLINKCNT1], a ; $ff8b - inc hl - dec c - jr nz, .asm_3ecb6 - ld a, [H_DOWNARROWBLINKCNT1] ; $ff8b - add $4 - ld [H_DOWNARROWBLINKCNT1], a ; $ff8b - 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 [$ffe1], 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) - callab Func_39680 - 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 ; $fff3 - call Func_3ed27 - jp Func_3ed64 - -Func_3ed27: ; 3ed27 (f:6d27) - ld a, [H_WHOSETURN] ; $fff3 - 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] ; $fff3 - 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 ; $ff96 (aliases: H_MULTIPLICAND) - ld a, [de] - ld [$ff97], a - inc de - ld a, [de] - ld [$ff98], a - ld a, [hli] - ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - call Multiply - ld a, [hl] - ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - ld b, $4 - call Divide - pop hl - ld a, [$ff98] - sub $e7 - ld a, [$ff97] - sbc $3 - jp c, Func_3ee0c - ld a, $3 - ld [$ff97], a - ld a, $e7 - ld [$ff98], a - -Func_3ee0c: ; 3ee0c (f:6e0c) - ld a, [$ff97] - ld [hli], a - ld b, a - ld a, [$ff98] - 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] - cp $4 - ret z - ld a, [W_OBTAINEDBADGES] - 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] ; $ff40 - 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] ; $fff3 - 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 SELFDESTRUCT - jr z, .asm_3eef1 - cp EXPLOSION - ret nz -.asm_3eef1 - ld a, [de] - bit 6, a ; fly/dig - ret nz - ld a, [hli] - cp GHOST - ret z - ld a, [hl] - cp GHOST - ret z - ld a, [W_MOVEMISSED] ; $d05f - and a - ret nz - ld a, MEGA_PUNCH - ld [$cc5b], a - -PlayMoveAnimation: ; 3ef07 (f:6f07) - ld [$D07C],a - call Delay3 - PREDEF_JUMP MoveAnimationPredef ; predef 8 - -InitBattle: ; 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 - callab Func_13870 - ret nz -asm_3ef3d: ; 3ef3d (f:6f3d) - ld a, [$d35d] - push af - ld hl, $d358 - ld a, [hl] - push af - res 1, [hl] - callab Func_525af - ld a, [W_ENEMYMONID] - sub $c8 - jp c, InitWildBattle - ld [W_TRAINERCLASS], a ; $d031 - call Func_3566 - callab ReadTrainer - call Func_3ec32 - call _LoadTrainerPic - xor a - ld [W_ENEMYMONID], a - ld [$ffe1], 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 - -InitWildBattle: ; 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 IsGhostBattle - 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 [$ffe1], 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 ; $ffba - ld hl, TerminatorText_3f04a - call PrintText - call SaveScreenTilesToBuffer1 - call ClearScreen - ld a, $98 - ld [$ffbd], a - ld a, $1 - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - call Delay3 - ld a, $9c - ld [$ffbd], 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 - callab Func_137aa - pop af - ld [$d358], a - pop af - ld [$d35d], a - ld a, [$d0d4] - ld [$ffd7], 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(TrainerPics) ; 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, [$ffe1] - ld [H_DOWNARROWBLINKCNT1], a ; $ff8b - 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] ; $ff8b - add $31 - jr asm_3f0d0 - -Func_3f0c6: ; 3f0c6 (f:70c6) - ld a, [$cc4f] - ld h, a - ld a, [$cc50] - ld l, a - ld a, [$ffe1] -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, [$fff3] ;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 SleepEffect ; unused effect - dw PoisonEffect ; POISON_SIDE_EFFECT1 - dw DrainHPEffect ; DRAIN_HP_EFFECT - dw FreezeBurnParalyzeEffect ; BURN_SIDE_EFFECT1 - dw FreezeBurnParalyzeEffect ; FREEZE_SIDE_EFFECT - dw FreezeBurnParalyzeEffect ; PARALYZE_SIDE_EFFECT1 - dw ExplodeEffect ; EXPLODE_EFFECT - dw DrainHPEffect ; DREAM_EATER_EFFECT - dw $0000 ; MIRROR_MOVE_EFFECT - dw StatModifierUpEffect ; ATTACK_UP1_EFFECT - dw StatModifierUpEffect ; DEFENSE_UP1_EFFECT - dw StatModifierUpEffect ; SPEED_UP1_EFFECT - dw StatModifierUpEffect ; SPECIAL_UP1_EFFECT - dw StatModifierUpEffect ; ACCURACY_UP1_EFFECT - dw StatModifierUpEffect ; EVASION_UP1_EFFECT - dw PayDayEffect ; PAY_DAY_EFFECT - dw $0000 ; SWIFT_EFFECT - dw StatModifierDownEffect ; ATTACK_DOWN1_EFFECT - dw StatModifierDownEffect ; DEFENSE_DOWN1_EFFECT - dw StatModifierDownEffect ; SPEED_DOWN1_EFFECT - dw StatModifierDownEffect ; SPECIAL_DOWN1_EFFECT - dw StatModifierDownEffect ; ACCURACY_DOWN1_EFFECT - dw StatModifierDownEffect ; EVASION_DOWN1_EFFECT - dw ConversionEffect ; CONVERSION_EFFECT - dw HazeEffect ; HAZE_EFFECT - dw BideEffect ; BIDE_EFFECT - dw ThrashPetalDanceEffect ; THRASH_PETAL_DANCE_EFFECT - dw SwitchAndTeleportEffect ; SWITCH_AND_TELEPORT_EFFECT - dw TwoToFiveAttacksEffect ; TWO_TO_FIVE_ATTACKS_EFFECT - dw TwoToFiveAttacksEffect ; unused effect - dw FlichSideEffect ; FLINCH_SIDE_EFFECT1 - dw SleepEffect ; SLEEP_EFFECT - dw PoisonEffect ; POISON_SIDE_EFFECT2 - dw FreezeBurnParalyzeEffect ; BURN_SIDE_EFFECT2 - dw FreezeBurnParalyzeEffect ; unused effect - dw FreezeBurnParalyzeEffect ; PARALYZE_SIDE_EFFECT2 - dw FlichSideEffect ; FLINCH_SIDE_EFFECT2 - dw OneHitKOEffect ; OHKO_EFFECT - dw ChargeEffect ; CHARGE_EFFECT - dw $0000 ; SUPER_FANG_EFFECT - dw $0000 ; SPECIAL_DAMAGE_EFFECT - dw TrappingEffect ; TRAPPING_EFFECT - dw ChargeEffect ; FLY_EFFECT - dw TwoToFiveAttacksEffect ; ATTACK_TWICE_EFFECT - dw $0000 ; JUMP_KICK_EFFECT - dw MistEffect ; MIST_EFFECT - dw FocusEnergyEffect ; FOCUS_ENERGY_EFFECT - dw RecoilEffect ; RECOIL_EFFECT - dw ConfusionEffect ; CONFUSION_EFFECT - dw StatModifierUpEffect ; ATTACK_UP2_EFFECT - dw StatModifierUpEffect ; DEFENSE_UP2_EFFECT - dw StatModifierUpEffect ; SPEED_UP2_EFFECT - dw StatModifierUpEffect ; SPECIAL_UP2_EFFECT - dw StatModifierUpEffect ; ACCURACY_UP2_EFFECT - dw StatModifierUpEffect ; EVASION_UP2_EFFECT - dw HealEffect ; HEAL_EFFECT - dw TransformEffect ; TRANSFORM_EFFECT - dw StatModifierDownEffect ; ATTACK_DOWN2_EFFECT - dw StatModifierDownEffect ; DEFENSE_DOWN2_EFFECT - dw StatModifierDownEffect ; SPEED_DOWN2_EFFECT - dw StatModifierDownEffect ; SPECIAL_DOWN2_EFFECT - dw StatModifierDownEffect ; ACCURACY_DOWN2_EFFECT - dw StatModifierDownEffect ; EVASION_DOWN2_EFFECT - dw ReflectLightScreenEffect ; LIGHT_SCREEN_EFFECT - dw ReflectLightScreenEffect ; REFLECT_EFFECT - dw PoisonEffect ; POISON_EFFECT - dw ParalyzeEffect ; PARALYZE_EFFECT - dw StatModifierDownEffect ; ATTACK_DOWN_SIDE_EFFECT - dw StatModifierDownEffect ; DEFENSE_DOWN_SIDE_EFFECT - dw StatModifierDownEffect ; SPEED_DOWN_SIDE_EFFECT - dw StatModifierDownEffect ; SPECIAL_DOWN_SIDE_EFFECT - dw StatModifierDownEffect ; unused effect - dw StatModifierDownEffect ; unused effect - dw StatModifierDownEffect ; unused effect - dw StatModifierDownEffect ; unused effect - dw ConfusionSideEffect ; CONFUSION_SIDE_EFFECT - dw TwoToFiveAttacksEffect ; TWINEEDLE_EFFECT - dw $0000 ; unused effect - dw SubstituteEffect ; SUBSTITUTE_EFFECT - dw HyperBeamEffect ; HYPER_BEAM_EFFECT - dw RageEffect ; RAGE_EFFECT - dw MimicEffect ; MIMIC_EFFECT - dw $0000 ; METRONOME_EFFECT - dw LeechSeedEffect ; LEECH_SEED_EFFECT - dw SplashEffect ; SPLASH_EFFECT - dw DisableEffect ; DISABLE_EFFECT - -SleepEffect: ; 3f1fc (f:71fc) - ld de, W_ENEMYMONSTATUS ; $cfe9 - ld bc, W_ENEMYBATTSTATUS2 ; $d068 - ld a, [H_WHOSETURN] ; $fff3 - and a - jp z, .asm_3f20e - ld de, W_PLAYERMONSTATUS ; $d018 - ld bc, W_PLAYERBATTSTATUS2 ; $d063 - -.asm_3f20e - ld a, [bc] - bit 5, a ; does the mon need to recharge? (hyper beam) - res 5, a ; mon no longer needs to recharge - ld [bc], a - jr nz, .asm_3f231 - ld a, [de] - ld b, a - and $7 - jr z, .asm_3f222 - ld hl, AlreadyAsleepText - 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, FellAsleepText - jp PrintText -.asm_3f242 - jp PrintDidntAffectText - -FellAsleepText: ; 3f245 (f:7245) - TX_FAR _FellAsleepText - db "@" - -AlreadyAsleepText: ; 3f24a (f:724a) - TX_FAR _AlreadyAsleepText - db "@" - -PoisonEffect: ; 3f24f (f:724f) - ld hl, W_ENEMYMONSTATUS ; $cfe9 - ld de, W_PLAYERMOVEEFFECT ; $cfd3 - ld a, [H_WHOSETURN] ; $fff3 - 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 POISON_SIDE_EFFECT1 - ld b, $34 ; ~20% chance of poisoning - jr z, .asm_3f290 - cp POISON_SIDE_EFFECT2 - ld b, $67 ; ~40% chance of poisoning - 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] ; $fff3 - 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, BadlyPoisonedText - jr .asm_3f2c0 -.asm_3f2bd - ld hl, PoisonedText -.asm_3f2c0 - pop de - ld a, [de] - cp POISON_EFFECT - 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 POISON_EFFECT - ret nz -.asm_3f2d7 - ld c, $32 - call DelayFrames - jp PrintDidntAffectText - -PoisonedText: ; 3f2df (f:72df) - TX_FAR _PoisonedText - db "@" - -BadlyPoisonedText: ; 3f2e4 (f:72e4) - TX_FAR _BadlyPoisonedText - db "@" - -DrainHPEffect: ; 3f2e9 (f:72e9) - ld hl, DrainHPEffect_ - ld b, BANK(DrainHPEffect_) - jp Bankswitch - -ExplodeEffect: ; 3f2f1 (f:72f1) - ld hl, W_PLAYERMONCURHP ; $d015 - ld de, W_PLAYERBATTSTATUS2 ; $d063 - ld a, [H_WHOSETURN] ; $fff3 - and a - jr z, .asm_3f302 - ld hl, W_ENEMYMONCURHP ; $cfe6 - ld de, W_ENEMYBATTSTATUS2 ; $d068 -.asm_3f302 - xor a - ld [hli], a ; set the mon's HP to 0 - ld [hli], a - inc hl - ld [hl], a ; set mon's status to 0 - ld a, [de] - res 7, a ; clear mon's leech seed status - 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, [$fff3] ;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, 1 << PAR - ld [W_ENEMYMONSTATUS], a - call Func_3ed27 ;quarter speed of affected monster - ld a, $a9 - call Func_3fbb9 ;animation - jp PrintMayNotAttackText ;print paralysis text -.burn - ld a, 1 << BRN - ld [W_ENEMYMONSTATUS], a - call Func_3ed64 - ld a, $a9 - call Func_3fbb9 ;animation - ld hl, BurnedText - jp PrintText -.freeze - call Func_3f9cf ;resets bit 5 of the D063/D068 flags - ld a, 1 << FRZ - ld [W_ENEMYMONSTATUS], a - ld a, $a9 - call Func_3fbb9 ;animation - ld hl, FrozenText - 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, 1 << PAR - ld [W_PLAYERMONSTATUS], a - call Func_3ed27 - jp PrintMayNotAttackText -.burn - ld a, 1 << BRN - ld [W_PLAYERMONSTATUS], a - call Func_3ed64 - ld hl, BurnedText - jp PrintText -.freeze - ld a, 1 << FRZ - ld [W_PLAYERMONSTATUS], a - ld hl, FrozenText - jp PrintText - -BurnedText: ; 3f3d8 (f:73d8) - TX_FAR _BurnedText - db "@" - -FrozenText: ; 3f3dd (f:73dd) - TX_FAR _FrozenText - db "@" - -CheckDefrost: ; 3f3e2 (f:73e2) - and a, 1 << FRZ ;are they frozen? - ret z ;return if so - ;not frozen - ld a, [$fff3] ;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, FireDefrostedText - jr .common -.opponent - ld a, [W_ENEMYMOVETYPE] ;same as above with addresses swapped - sub a, FIRE - ret nz - ld [W_PLAYERMONSTATUS], a - ld hl, $d16f - ld a, [wPlayerMonNumber] - ld bc, $002c - call AddNTimes - xor a - ld [hl], a - ld hl, FireDefrostedText -.common - jp PrintText - -FireDefrostedText: ; 3f423 (f:7423) - TX_FAR _FireDefrostedText - db "@" - -StatModifierUpEffect: ; 3f428 (f:7428) - ld hl, wPlayerMonStatMods ; $cd1a - ld de, W_PLAYERMOVEEFFECT ; $cfd3 - ld a, [H_WHOSETURN] ; $fff3 - 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] ; $fff3 - 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 ; $ff96 (aliases: H_MULTIPLICAND) - ld a, [de] - ld [$ff97], a - inc de - ld a, [de] - ld [$ff98], a - ld a, [hli] - ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - call Multiply - ld a, [hl] - ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - ld b, $4 - call Divide - pop hl - ld a, [$ff98] - sub $e7 - ld a, [$ff97] - sbc $3 - jp c, Func_3f4c3 - ld a, 999 / $100 - ld [$ff97], a - ld a, 999 % $100 - ld [$ff98], a - -Func_3f4c3: ; 3f4c3 (f:74c3) - ld a, [$ff97] - ld [hli], a - ld a, [$ff98] - 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] ; $fff3 - 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 MINIMIZE - 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 MINIMIZE - 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] ; $fff3 - and a - call z, Func_3ee19 - ld hl, MonsStatsRoseText - call PrintText - call Func_3ed27 - jp Func_3ed64 - -Func_3f520: ; 3f520 (f:7520) - pop hl - dec [hl] - -Func_3f522: ; 3f522 (f:7522) - ld hl, NothingHappenedText - jp PrintText - -MonsStatsRoseText: ; 3f528 (f:7528) - TX_FAR _MonsStatsRoseText - db $08 ; asm - ld hl, GreatlyRoseText - ld a, [H_WHOSETURN] ; $fff3 - and a - ld a, [W_PLAYERMOVEEFFECT] ; $cfd3 - jr z, .asm_3f53b - ld a, [W_ENEMYMOVEEFFECT] ; $cfcd -.asm_3f53b - cp ATTACK_DOWN1_EFFECT - ret nc - ld hl, RoseText - ret - -GreatlyRoseText: ; 3f542 (f:7542) - db $0a - TX_FAR _GreatlyRoseText - -RoseText: ; 3f547 (f:7547) - TX_FAR _RoseText - db "@" - -StatModifierDownEffect: ; 3f54c (f:754c) - ld hl, wEnemyMonStatMods ; $cd2e - ld de, W_PLAYERMOVEEFFECT ; $cfd3 - ld bc, W_ENEMYBATTSTATUS1 ; $d067 - ld a, [H_WHOSETURN] ; $fff3 - 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 ATTACK_DOWN_SIDE_EFFECT - jr c, .asm_3f58a - call GenRandomInBattle - cp SPLASH_EFFECT - jp nc, Func_3f650 - ld a, [de] - sub ATTACK_DOWN_SIDE_EFFECT - 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] ; $fff3 - 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 ; $ff96 (aliases: H_MULTIPLICAND) - ld a, [de] - ld [$ff97], a - inc de - ld a, [de] - ld [$ff98], a - ld a, [hli] - ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - call Multiply - ld a, [hl] - ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - ld b, $4 - call Divide - pop hl - ld a, [$ff98] - ld b, a - ld a, [$ff97] - or b - jp nz, Func_3f624 - ld [$ff97], a - ld a, $1 - ld [$ff98], a - -Func_3f624: ; 3f624 (f:7624) - ld a, [$ff97] - ld [hli], a - ld a, [$ff98] - 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] ; $fff3 - and a - call nz, Func_3ee19 - ld hl, MonsStatsFellText - 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 ATTACK_DOWN_SIDE_EFFECT - ret nc - ld hl, NothingHappenedText - jp PrintText - -Func_3f65a: ; 3f65a (f:765a) - ld a, [de] - cp $44 - ret nc - jp Func_3fb4e - -MonsStatsFellText: ; 3f661 (f:7661) - TX_FAR _MonsStatsFellText - db $08 ; asm - ld hl, FellText - ld a, [H_WHOSETURN] ; $fff3 - 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, GreatlyFellText - ret - -GreatlyFellText: ; 3f67e (f:767e) - db $0a - TX_FAR _GreatlyFellText - -FellText: ; 3f683 (f:7683) - TX_FAR _FellText - db "@" - -Func_3f688: ; 3f688 (f:7688) - ld hl, StatsTextStrings - 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 - -BideEffect: ; 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] ; mon is now using bide - 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 - -ThrashPetalDanceEffect: ; 3f717 (f:7717) - ld hl, W_PLAYERBATTSTATUS1 ; $d062 - ld de, $d06a - ld a, [H_WHOSETURN] ; $fff3 - and a - jr z, .asm_3f728 - ld hl, W_ENEMYBATTSTATUS1 ; $d067 - ld de, $d06f -.asm_3f728 - set 1, [hl] ; mon is now using thrash/petal dance - call GenRandomInBattle - and $1 - inc a - inc a - ld [de], a - ld a, [H_WHOSETURN] ; $fff3 - add $b0 - jp Func_3fb96 - -SwitchAndTeleportEffect: ; 3f739 (f:7739) - ld a, [H_WHOSETURN] ; $fff3 - 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 TELEPORT - jp nz, PrintDidntAffectText - jp PrintButItFailedText_ -.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, IsUnaffectedText - ld a, [W_PLAYERMOVENUM] ; $cfd2 - cp TELEPORT - jp nz, PrintText - jp PrintButItFailedText_ -.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 TELEPORT - jp nz, PrintDidntAffectText - jp PrintButItFailedText_ -.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, IsUnaffectedText - ld a, [W_ENEMYMOVENUM] ; $cfcc - cp TELEPORT - jp nz, PrintText - jp Func_3fb4e -.asm_3f7e4 - push af - call Func_3fbb9 - ld c, $14 - call DelayFrames - pop af - ld hl, RanFromBattleText ; $7802 - cp TELEPORT - jr z, .asm_3f7ff - ld hl, RanAwayScaredText ; $7807 - cp ROAR - jr z, .asm_3f7ff - ld hl, WasBlownAwayText ; $780c -.asm_3f7ff - jp PrintText - -RanFromBattleText: ; 3f802 (f:7802) - TX_FAR _RanFromBattleText - db "@" - -RanAwayScaredText: ; 3f807 (f:7807) - TX_FAR _RanAwayScaredText - db "@" - -WasBlownAwayText: ; 3f80c (f:780c) - TX_FAR _WasBlownAwayText - db "@" - -TwoToFiveAttacksEffect: ; 3f811 (f:7811) - ld hl, W_PLAYERBATTSTATUS1 ; $d062 - ld de, $d06a - ld bc, W_NUMHITS ; $d074 - ld a, [H_WHOSETURN] ; $fff3 - and a - jr z, .asm_3f828 - ld hl, W_ENEMYBATTSTATUS1 ; $d067 - ld de, $d06f - ld bc, $cd05 -.asm_3f828 - bit 2, [hl] ; is mon attacking multiple times? - ret nz - set 2, [hl] ; mon is now attacking multiple times - ld hl, W_PLAYERMOVEEFFECT ; $cfd3 - ld a, [H_WHOSETURN] ; $fff3 - and a - jr z, .asm_3f838 - ld hl, W_ENEMYMOVEEFFECT ; $cfcd -.asm_3f838 - ld a, [hl] - cp TWINEEDLE_EFFECT - jr z, .asm_3f856 - cp ATTACK_TWICE_EFFECT - 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 - -FlichSideEffect: ; 3f85b (f:785b) - call CheckTargetSubstitute - ret nz - ld hl, W_ENEMYBATTSTATUS1 ; $d067 - ld de, W_PLAYERMOVEEFFECT ; $cfd3 - ld a, [H_WHOSETURN] ; $fff3 - and a - jr z, .asm_3f870 - ld hl, W_PLAYERBATTSTATUS1 ; $d062 - ld de, W_ENEMYMOVEEFFECT ; $cfcd -.asm_3f870 - ld a, [de] - cp FLINCH_SIDE_EFFECT1 - ld b, $1a ; ~10% chance of flinch - jr z, .asm_3f879 - ld b, $4d ; ~30% chance of flinch -.asm_3f879 - call GenRandomInBattle - cp b - ret nc - set 3, [hl] ; set mon's status to flinching - call Func_3f9cf - ret - -OneHitKOEffect: ; 3f884 (f:7884) - ld hl, OneHitKOEffect_ - ld b, BANK(OneHitKOEffect_) - jp Bankswitch - -ChargeEffect: ; 3f88c (f:788c) - ld hl, W_PLAYERBATTSTATUS1 ; $d062 - ld de, W_PLAYERMOVEEFFECT ; $cfd3 - ld a, [H_WHOSETURN] ; $fff3 - 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 ; de contains enemy or player MOVENUM - cp FLY_EFFECT - jr nz, .asm_3f8ad - set 6, [hl] ; mon is now invulnerable to typical attacks (fly/dig) - ld b, $64 -.asm_3f8ad - ld a, [de] - cp DIG - jr nz, .asm_3f8b6 - set 6, [hl] ; mon is now invulnerable to typical attacks (fly/dig) - 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, ChargeMoveEffectText ; $78c8 - jp PrintText - -ChargeMoveEffectText: ; 3f8c8 (f:78c8) - TX_FAR _ChargeMoveEffectText - db $08 ; asm - ld a, [wWhichTrade] ; $cd3d - cp RAZOR_WIND - ld hl, MadeWhirlwindText ; $78f9 - jr z, .asm_3f8f8 - cp SOLARBEAM - ld hl, TookInSunlightText ; $78fe - jr z, .asm_3f8f8 - cp SKULL_BASH - ld hl, LoweredItsHeadText ; $7903 - jr z, .asm_3f8f8 - cp SKY_ATTACK - ld hl, SkyAttackGlowingText ; $7908 - jr z, .asm_3f8f8 - cp FLY - ld hl, FlewUpHighText ; $790d - jr z, .asm_3f8f8 - cp DIG - ld hl, DugAHoleText ; $7912 -.asm_3f8f8 - ret - -MadeWhirlwindText: ; 3f8f9 (f:78f9) - TX_FAR _MadeWhirlwindText - db "@" - -TookInSunlightText: ; 3f8fe (f:78fe) - TX_FAR _TookInSunlightText - db "@" - -LoweredItsHeadText: ; 3f903 (f:7903) - TX_FAR _LoweredItsHeadText - db "@" - -SkyAttackGlowingText: ; 3f908 (f:7908) - TX_FAR _SkyAttackGlowingText - db "@" - -FlewUpHighText: ; 3f90d (f:790d) - TX_FAR _FlewUpHighText - db "@" - -DugAHoleText: ; 3f912 (f:7912) - TX_FAR _DugAHoleText - db "@" - -TrappingEffect: ; 3f917 (f:7917) - ld hl, W_PLAYERBATTSTATUS1 ; $d062 - ld de, $d06a - ld a, [H_WHOSETURN] ; $fff3 - 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 - -MistEffect: ; 3f941 (f:7941) - ld hl, MistEffect_ - ld b, BANK(MistEffect_) - jp Bankswitch - -FocusEnergyEffect: ; 3f949 (f:7949) - ld hl, FocusEnergyEffect_ - ld b, BANK(FocusEnergyEffect_) - jp Bankswitch - -RecoilEffect: ; 3f951 (f:7951) - ld hl, RecoilEffect_ - ld b, BANK(RecoilEffect_) - jp Bankswitch - -ConfusionSideEffect: ; 3f959 (f:7959) - call GenRandomInBattle - cp $19 - ret nc - jr Func_3f96f - -ConfusionEffect: ; 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] ; $fff3 - 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] ; is mon confused? - jr nz, Func_3f9a6 - set 7, [hl] ; mon is now confused - push af - call GenRandomInBattle - and $3 - inc a - inc a - ld [bc], a - pop af - cp CONFUSION_SIDE_EFFECT - call nz, Func_3fb89 - ld hl, BecameConfusedText ; $79a1 - jp PrintText - -BecameConfusedText: ; 3f9a1 (f:79a1) - TX_FAR _BecameConfusedText - db "@" - -Func_3f9a6: ; 3f9a6 (f:79a6) - cp CONFUSION_SIDE_EFFECT - ret z - ld c, $32 - call DelayFrames - jp Func_3fb4e - -ParalyzeEffect: ; 3f9b1 (f:79b1) - ld hl, ParalyzeEffect_ - ld b, BANK(ParalyzeEffect_) - jp Bankswitch - -SubstituteEffect: ; 3f9b9 (f:79b9) - ld hl, SubstituteEffectHandler - ld b, BANK(SubstituteEffectHandler) - jp Bankswitch - -HyperBeamEffect: ; 3f9c1 (f:79c1) - ld hl, W_PLAYERBATTSTATUS2 ; $d063 - ld a, [H_WHOSETURN] ; $fff3 - and a - jr z, .asm_3f9cc - ld hl, W_ENEMYBATTSTATUS2 ; $d068 -.asm_3f9cc - set 5, [hl] ; mon now needs to recharge - ret - -Func_3f9cf: ; 3f9cf (f:79cf) - push hl - ld hl, W_ENEMYBATTSTATUS2 ; $d068 - ld a, [H_WHOSETURN] ; $fff3 - and a - jr z, .asm_3f9db - ld hl, W_PLAYERBATTSTATUS2 ; $d063 -.asm_3f9db - res 5, [hl] ; mon no longer needs to recharge - pop hl - ret - -RageEffect: ; 3f9df (f:79df) - ld hl, W_PLAYERBATTSTATUS2 - ld a, [H_WHOSETURN] - and a - jr z, .player - ld hl, W_ENEMYBATTSTATUS2 -.player - set 6, [hl] ; mon is now in "rage" mode - ret - -MimicEffect: ; 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, MimicLearnedMoveText - jp PrintText -.asm_3fa74 - jp PrintButItFailedText_ - -MimicLearnedMoveText: ; 3fa77 (f:7a77) - TX_FAR _MimicLearnedMoveText - db "@" - -LeechSeedEffect: ; 3fa7c (f:7a7c) - ld hl, LeechSeedEffect_ - ld b, BANK(LeechSeedEffect_) - jp Bankswitch - -SplashEffect: ; 3fa84 (f:7a84) - call Func_3fba8 - jp PrintNoEffectText - -DisableEffect: ; 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] ; $fff3 - 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] ; $fff3 - 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] ; $fff3 - and a - jr nz, .asm_3faf8 - inc hl -.asm_3faf8 - ld a, [$d11e] - ld [hl], a - call GetMoveName - ld hl, MoveWasDisabledText ; $7b09 - jp PrintText -.asm_3fb05 - pop hl -.asm_3fb06 - jp PrintButItFailedText_ - -MoveWasDisabledText: ; 3fb09 (f:7b09) - TX_FAR _MoveWasDisabledText - db "@" - -PayDayEffect: ; 3fb0e (f:7b0e) - ld hl, PayDayEffect_ - ld b, BANK(PayDayEffect_) - jp Bankswitch - -ConversionEffect: ; 3fb16 (f:7b16) - ld hl, ConversionEffect_ - ld b, BANK(ConversionEffect_) - jp Bankswitch - -HazeEffect: ; 3fb1e (f:7b1e) - ld hl, HazeEffect_ - ld b, BANK(HazeEffect_) - jp Bankswitch - -HealEffect: ; 3fb26 (f:7b26) - ld hl, HealEffect_ - ld b, BANK(HealEffect_) - jp Bankswitch - -TransformEffect: ; 3fb2e (f:7b2e) - ld hl, TransformEffect_ - ld b, BANK(TransformEffect_) - jp Bankswitch - -ReflectLightScreenEffect: ; 3fb36 (f:7b36) - ld hl, ReflectLightScreenEffect_ - ld b, BANK(ReflectLightScreenEffect_) - jp Bankswitch - -NothingHappenedText: ; 3fb3e (f:7b3e) - TX_FAR _NothingHappenedText - db "@" - -PrintNoEffectText: ; 3fb43 (f:7b43) - ld hl, NoEffectText - jp PrintText - -NoEffectText: ; 3fb49 (f:7b49) - TX_FAR _NoEffectText - db "@" - -Func_3fb4e: ; 3fb4e (f:7b4e) - ld a, [$ccf4] - and a - ret nz - -PrintButItFailedText_: ; 3fb53 (f:7b53) - ld hl, ButItFailedText - jp PrintText - -ButItFailedText: ; 3fb59 (f:7b59) - TX_FAR _ButItFailedText - db "@" - -PrintDidntAffectText: ; 3fb5e (f:7b5e) - ld hl, DidntAffectText - jp PrintText - -DidntAffectText: ; 3fb64 (f:7b64) - TX_FAR _DidntAffectText - db "@" - -IsUnaffectedText: ; 3fb69 (f:7b69) - TX_FAR _IsUnaffectedText - db "@" - -PrintMayNotAttackText: ; 3fb6e (f:7b6e) - ld hl, ParalyzedMayNotAttackText ; $7b74 - jp PrintText - -ParalyzedMayNotAttackText: ; 3fb74 (f:7b74) - TX_FAR _ParalyzedMayNotAttackText - db "@" - -CheckTargetSubstitute: ; 3fb79 (f:7b79) - push hl - ld hl, $d068 - ld a, [$fff3] ;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] ; $fff3 - 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] ; $fff3 - 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] ; $fff3 - 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 - callab LoadPokedexTilePatterns -.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,wPokedexSeenEnd - wPokedexSeen - 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,wPokedexOwnedEnd - wPokedexOwned - 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,wPokedexSeenEnd - 1 - 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 - callab LoadPokedexTilePatterns ; 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 - -INCLUDE "data/pokedex_entries.asm" - -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 - -INCLUDE "data/pokedex_order.asm" - -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, [$ffaf] - push af - ld a, [$ffae] - push af - xor a - ld [W_OPTIONS], a ; $d355 - ld [$ffaf], a - ld [$ffae], 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 [$ffae], a - pop af - ld [$ffaf], 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 LoadTradingGFXAndMonNames - 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 PrintTradeWentToText - dw PrintTradeForSendsText - dw PrintTradeFarewellText - dw PrintTradeTakeCareText - dw PrintTradeWillTradeText - 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 ; $ffba - call Delay3 - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - 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 - -LoadTradingGFXAndMonNames: ; 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 ; $ff48 - call EnableLCD - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - 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 ; $ff49 - 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 ; $ff40 - ld a, $50 - ld [$ffb0], a - ld a, $86 - ld [rWX], a ; $ff4b - ld [$ffae], a - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - 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 ; $ff4b - ld [$ffae], 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 ; $ffba - 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 [$ffae], a - call DelayFrame - ld a, $8b - ld [rLCDC], a ; $ff40 - FuncCoord 6, 2 ; $c3ce - ld hl, Coord - ld b, $7 - call Func_41842 - call Func_41186 - ld a, (SFX_02_3d - SFX_Headers_02) / 3 - call PlaySound - ld c, $14 -.asm_412c8 - ld a, [$ffae] - add $4 - ld [$ffae], 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 ; $ff48 - 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, (SFX_02_3c - SFX_Headers_02) / 3 - call PlaySound - jr .asm_412e7 -.asm_41318 - call CleanLCD_OAM - ld a, $1 - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - call ClearScreen - ld b, $98 - call CopyScreenTileBufferToVRAM - call Delay3 - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - 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 ; $ffba - ld a, [$cd3e] - call Func_415a4 - ld a, $ad - call Func_41676 - ld a, $1 - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - ld a, [$cd3e] - call PlayCry - call Func_41181 - FuncCoord 4, 10 ; $c46c - ld hl, Coord - ld bc, $80c - call ClearScreenArea - jp PrintTradeTakeCareText - -Func_41376: ; 41376 (10:5376) - call Func_41411 - ld a, $1 - ld [$d08a], a - ld a, $e4 - ld [rOBP0], a ; $ff48 - 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 ; $ffba - call Func_4149f - ld b, $4 - call Func_414c5 - call Func_4145c - ld b, $6 - call Func_414c5 - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - 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 ; $ffba - call Func_4149f - ld b, $4 - call Func_414c5 - call Func_4142d - ld b, $6 - call Func_414c5 - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - jp CleanLCD_OAM - -Func_41411: ; 41411 (10:5411) - ld a, $1 - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - call ClearScreen - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - call Func_4120b - call DelayFrame - ld a, $ab - ld [rLCDC], a ; $ff40 - xor a - ld [$ffae], a - ld a, $90 - ld [$ffb0], 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 [$ffd2], a - ld a, l - ld [H_SCREENEDGEREDRAWADDR], a ; $ffd1 - ld a, $2 - ld [H_SCREENEDGEREDRAW], a ; $ffd0 - 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, [$ffae] - sub $2 - jr .asm_414d9 -.asm_414d5 - ld a, [$ffae] - add $2 -.asm_414d9 - ld [$ffae], 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] ; $ff47 - xor $3c - ld [rBGP], a ; $ff47 - 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) - callba Func_71882 - 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] ; $ffba - xor $1 - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - 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 ; $ffba - call ClearScreen - ld a, $e3 - ld [rLCDC], a ; $ff40 - ld a, $7 - ld [rWX], a ; $ff4b - xor a - ld [$ffb0], a - ld a, $90 - ld [$ffae], a - ret - -Func_415df: ; 415df (10:55df) - ld c, $32 - call DelayFrames -.asm_415e4 - call DelayFrame - ld a, [rWX] ; $ff4b - inc a - inc a - ld [rWX], a ; $ff4b - cp $a1 - jr nz, .asm_415e4 - call Func_41196 - ld c, $a - call DelayFrames - ld a, $7 - ld [rWX], a ; $ff4b - ret - -PrintTradeWentToText: ; 415fe (10:55fe) - ld hl, TradeWentToText - call PrintText - ld c, $c8 - call DelayFrames - jp Func_415df - -TradeWentToText: ; 4160c (10:560c) - TX_FAR _TradeWentToText - db "@" - -PrintTradeForSendsText: ; 41611 (10:5611) - ld hl, TradeForText - call PrintText - call Delay50 - ld hl, TradeSendsText - call PrintText - jp Delay50 - -TradeForText: ; 41623 (10:5623) - TX_FAR _TradeForText - db "@" - -TradeSendsText: ; 41628 (10:5628) - TX_FAR _TradeSendsText - db "@" - -PrintTradeFarewellText: ; 4162d (10:562d) - ld hl, TradeWavesFarewellText - call PrintText - call Delay50 - ld hl, TradeTransferredText - call PrintText - call Delay50 - jp Func_415df - -TradeWavesFarewellText: ; 41642 (10:5642) - TX_FAR _TradeWavesFarewellText - db "@" - -TradeTransferredText: ; 41647 (10:5647) - TX_FAR _TradeTransferredText - db "@" - -PrintTradeTakeCareText: ; 4164c (10:564c) - ld hl, TradeTakeCareText - call PrintText - jp Delay50 - -TradeTakeCareText: ; 41655 (10:5655) - TX_FAR _TradeTakeCareText - db "@" - -PrintTradeWillTradeText: ; 4165a (10:565a) - ld hl, TradeWillTradeText - call PrintText - call Delay50 - ld hl, TradeforText - call PrintText - jp Delay50 - -TradeWillTradeText: ; 4166c (10:566c) - TX_FAR _TradeWillTradeText - db "@" - -TradeforText: ; 41671 (10:5671) - TX_FAR _TradeforText - 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 PlayShootingStar - call PlayIntroScene - call GBFadeOut2 - xor a - ld [$ffae], 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 [$ffae], 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, (SFX_1f_5f - SFX_Headers_1f) / 3 - call PlaySound - xor a - ld [$d09f], a - ld de, IntroNidorinoAnimation1 - call AnimateIntroNidorino -; hop - ld a, (SFX_1f_60 - SFX_Headers_1f) / 3 - call PlaySound - ld de, IntroNidorinoAnimation2 - call AnimateIntroNidorino - ld c, $a - call CheckForUserInterruption - ret c - -; hip - ld a, (SFX_1f_5f - SFX_Headers_1f) / 3 - call PlaySound - ld de, IntroNidorinoAnimation1 - call AnimateIntroNidorino -; hop - ld a, (SFX_1f_60 - SFX_Headers_1f) / 3 - call PlaySound - ld de, IntroNidorinoAnimation2 - call AnimateIntroNidorino - ld c, $1e - call CheckForUserInterruption - ret c - -; raise - ld b, $4 - call Func_4183f - ld a, (SFX_1f_61 - SFX_Headers_1f) / 3 - call PlaySound - ld de, $401 - call Func_4180e - ld c, $1e - call CheckForUserInterruption - ret c - -; slash - ld b, $5 - call Func_4183f - ld a, (SFX_1f_62 - SFX_Headers_1f) / 3 - call PlaySound - ld de, $800 - call Func_4180e -; hip - ld a, (SFX_1f_5f - SFX_Headers_1f) / 3 - 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, (SFX_1f_5f - SFX_Headers_1f) / 3 - call PlaySound - xor a - ld [$d09f], a - ld de, IntroNidorinoAnimation4 ; $5931 - call AnimateIntroNidorino -; hop - ld a, (SFX_1f_60 - SFX_Headers_1f) / 3 - 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, (SFX_1f_5e - SFX_Headers_1f) / 3 - 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, [$ffae] - 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, [$ffae] - inc a - inc a -.asm_41831 - ld [$ffae], 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 - -LoadIntroGraphics: ; 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 - -PlayShootingStar: ; 4188a (10:588a) - ld b, $c - call GoPAL_SET - callba Func_4538 - ld a, $e4 - ld [rBGP], a ; $ff47 - ld c, $b4 - call DelayFrames - call ClearScreen - call DisableLCD - xor a - ld [W_CUROPPONENT], a ; $d059 - call Func_418e9 - call LoadIntroGraphics - call EnableLCD - ld hl, rLCDC ; $ff40 - res 5, [hl] - set 3, [hl] - ld c, $40 - call DelayFrames - callba AnimateShootingStar - 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.h8.2bpp" - INCBIN "gfx/gamefreak_logo.2bpp" - ds $10 ; blank tile - -FightIntroBackMon: ; 41a99 (10:5a99) - INCBIN "gfx/intro_fight.2bpp" - -FightIntroFrontMon: ; 42099 (10:6099) - -IF _RED - INCBIN "gfx/red/intro_nido_1.6x6.2bpp" - INCBIN "gfx/red/intro_nido_2.6x6.2bpp" - INCBIN "gfx/red/intro_nido_3.6x6.2bpp" - ds $10 ; blank tile -ENDC -IF _BLUE - INCBIN "gfx/blue/intro_purin_1.6x6.2bpp" - INCBIN "gfx/blue/intro_purin_2.6x6.2bpp" - INCBIN "gfx/blue/intro_purin_3.6x6.2bpp" - ds $10 ; blank tile -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] - -INCLUDE "data/mapHeaders/lavendertown.asm" - -INCLUDE "data/mapObjects/lavendertown.asm" - -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" - -INCLUDE "scripts/lavendertown.asm" - -DisplayDexRating: ; 44169 (11:4169) - ld hl, wPokedexSeen - ld b, wPokedexSeenEnd - wPokedexSeen - call CountSetBits - ld a, [$D11E] ; result of CountSetBits (seen count) - ld [$FFDB], a - ld hl, wPokedexOwned - ld b, wPokedexOwnedEnd - wPokedexOwned - 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, PokedexRatingText_441cc - call PrintText - pop hl - call PrintText - callba Func_7d13b - 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 - -PokedexRatingText_441cc: ; 441cc (11:41cc) - TX_FAR _OaksLabText_441cc - db "@" - -DexRatingsTable: ; 441d1 (11:41d1) - db 10 - dw PokedexRatingText_44201 - db 20 - dw PokedexRatingText_44206 - db 30 - dw PokedexRatingText_4420b - db 40 - dw PokedexRatingText_44210 - db 50 - dw PokedexRatingText_44215 - db 60 - dw PokedexRatingText_4421a - db 70 - dw PokedexRatingText_4421f - db 80 - dw PokedexRatingText_44224 - db 90 - dw PokedexRatingText_44229 - db 100 - dw PokedexRatingText_4422e - db 110 - dw PokedexRatingText_44233 - db 120 - dw PokedexRatingText_44238 - db 130 - dw PokedexRatingText_4423d - db 140 - dw PokedexRatingText_44242 - db 150 - dw PokedexRatingText_44247 - db 152 - dw PokedexRatingText_4424c - -PokedexRatingText_44201: ; 44201 (11:4201) - TX_FAR _OaksLabText_44201 - db "@" - -PokedexRatingText_44206: ; 44206 (11:4206) - TX_FAR _OaksLabText_44206 - db "@" - -PokedexRatingText_4420b: ; 4420b (11:420b) - TX_FAR _OaksLabText_4420b - db "@" - -PokedexRatingText_44210: ; 44210 (11:4210) - TX_FAR _OaksLabText_44210 - db "@" - -PokedexRatingText_44215: ; 44215 (11:4215) - TX_FAR _OaksLabText_44215 - db "@" - -PokedexRatingText_4421a: ; 4421a (11:421a) - TX_FAR _OaksLabText_4421a - db "@" - -PokedexRatingText_4421f: ; 4421f (11:421f) - TX_FAR _OaksLabText_4421f - db "@" - -PokedexRatingText_44224: ; 44224 (11:4224) - TX_FAR _OaksLabText_44224 - db "@" - -PokedexRatingText_44229: ; 44229 (11:4229) - TX_FAR _OaksLabText_44229 - db "@" - -PokedexRatingText_4422e: ; 4422e (11:422e) - TX_FAR _OaksLabText_4422e - db "@" - -PokedexRatingText_44233: ; 44233 (11:4233) - TX_FAR _OaksLabText_44233 - db "@" - -PokedexRatingText_44238: ; 44238 (11:4238) - TX_FAR _OaksLabText_44238 - db "@" - -PokedexRatingText_4423d: ; 4423d (11:423d) - TX_FAR _OaksLabText_4423d - db "@" - -PokedexRatingText_44242: ; 44242 (11:4242) - TX_FAR _OaksLabText_44242 - db "@" - -PokedexRatingText_44247: ; 44247 (11:4247) - TX_FAR _OaksLabText_44247 - db "@" - -PokedexRatingText_4424c: ; 4424c (11:424c) - TX_FAR _OaksLabText_4424c - db "@" - -INCLUDE "data/mapHeaders/viridianpokecenter.asm" - -INCLUDE "scripts/viridianpokecenter.asm" - -INCLUDE "data/mapObjects/viridianpokecenter.asm" - -INCLUDE "data/mapHeaders/mansion1.asm" - -INCLUDE "scripts/mansion1.asm" - -INCLUDE "data/mapObjects/mansion1.asm" - -Mansion1Blocks: ; 443fe (11:43fe) - INCBIN "maps/mansion1.blk" - -INCLUDE "data/mapHeaders/rocktunnel1.asm" - -INCLUDE "scripts/rocktunnel1.asm" - -INCLUDE "data/mapObjects/rocktunnel1.asm" - -RockTunnel1Blocks: ; 44675 (11:4675) - INCBIN "maps/rocktunnel1.blk" - -INCLUDE "data/mapHeaders/seafoamislands1.asm" - -INCLUDE "scripts/seafoamislands1.asm" - -INCLUDE "data/mapObjects/seafoamislands1.asm" - -SeafoamIslands1Blocks: ; 4489f (11:489f) - INCBIN "maps/seafoamislands1.blk" - -INCLUDE "data/mapHeaders/ssanne3.asm" - -INCLUDE "scripts/ssanne3.asm" - -INCLUDE "data/mapObjects/ssanne3.asm" - -SSAnne3Blocks: ; 44956 (11:4956) - INCBIN "maps/ssanne3.blk" - -INCLUDE "data/mapHeaders/victoryroad3.asm" - -INCLUDE "scripts/victoryroad3.asm" - -INCLUDE "data/mapObjects/victoryroad3.asm" - -VictoryRoad3Blocks: ; 44b37 (11:4b37) - INCBIN "maps/victoryroad3.blk" - -INCLUDE "data/mapHeaders/rockethideout1.asm" - -INCLUDE "scripts/rockethideout1.asm" - -INCLUDE "data/mapObjects/rockethideout1.asm" - -RocketHideout1Blocks: ; 44d49 (11:4d49) - INCBIN "maps/rockethideout1.blk" - -INCLUDE "data/mapHeaders/rockethideout2.asm" - -INCLUDE "scripts/rockethideout2.asm" - -INCLUDE "data/mapObjects/rockethideout2.asm" - -RocketHideout2Blocks: ; 45147 (11:5147) - INCBIN "maps/rockethideout2.blk" - -INCLUDE "data/mapHeaders/rockethideout3.asm" - -INCLUDE "scripts/rockethideout3.asm" - -INCLUDE "data/mapObjects/rockethideout3.asm" - -RocketHideout3Blocks: ; 4537f (11:537f) - INCBIN "maps/rockethideout3.blk" - -INCLUDE "data/mapHeaders/rockethideout4.asm" - -INCLUDE "scripts/rockethideout4.asm" - -INCLUDE "data/mapObjects/rockethideout4.asm" - -RocketHideout4Blocks: ; 45650 (11:5650) - INCBIN "maps/rockethideout4.blk" - -INCLUDE "data/mapHeaders/rockethideoutelevator.asm" - -INCLUDE "scripts/rockethideoutelevator.asm" - -INCLUDE "data/mapObjects/rockethideoutelevator.asm" - -RocketHideoutElevatorBlocks: ; 457a8 (11:57a8) - INCBIN "maps/rockethideoutelevator.blk" - -INCLUDE "data/mapHeaders/silphcoelevator.asm" - -INCLUDE "scripts/silphcoelevator.asm" - -INCLUDE "data/mapObjects/silphcoelevator.asm" - -SilphCoElevatorBlocks: ; 4585b (11:585b) - INCBIN "maps/silphcoelevator.blk" - -INCLUDE "data/mapHeaders/safarizoneeast.asm" - -INCLUDE "scripts/safarizoneeast.asm" - -INCLUDE "data/mapObjects/safarizoneeast.asm" - -SafariZoneEastBlocks: ; 458dc (11:58dc) - INCBIN "maps/safarizoneeast.blk" - -INCLUDE "data/mapHeaders/safarizonenorth.asm" - -INCLUDE "scripts/safarizonenorth.asm" - -INCLUDE "data/mapObjects/safarizonenorth.asm" - -SafariZoneNorthBlocks: ; 45a3e (11:5a3e) - INCBIN "maps/safarizonenorth.blk" - -INCLUDE "data/mapHeaders/safarizonecenter.asm" - -INCLUDE "scripts/safarizonecenter.asm" - -INCLUDE "data/mapObjects/safarizonecenter.asm" - -SafariZoneCenterBlocks: ; 45c1e (11:5c1e) - INCBIN "maps/safarizonecenter.blk" - -INCLUDE "data/mapHeaders/safarizoneresthouse1.asm" - -INCLUDE "scripts/safarizoneresthouse1.asm" - -INCLUDE "data/mapObjects/safarizoneresthouse1.asm" - -INCLUDE "data/mapHeaders/safarizoneresthouse2.asm" - -INCLUDE "scripts/safarizoneresthouse2.asm" - -INCLUDE "data/mapObjects/safarizoneresthouse2.asm" - -INCLUDE "data/mapHeaders/safarizoneresthouse3.asm" - -INCLUDE "scripts/safarizoneresthouse3.asm" - -INCLUDE "data/mapObjects/safarizoneresthouse3.asm" - -INCLUDE "data/mapHeaders/safarizoneresthouse4.asm" - -INCLUDE "scripts/safarizoneresthouse4.asm" - -INCLUDE "data/mapObjects/safarizoneresthouse4.asm" - -INCLUDE "data/mapHeaders/unknowndungeon2.asm" - -INCLUDE "scripts/unknowndungeon2.asm" - -INCLUDE "data/mapObjects/unknowndungeon2.asm" - -UnknownDungeon2Blocks: ; 45e5d (11:5e5d) - INCBIN "maps/unknowndungeon2.blk" - -INCLUDE "data/mapHeaders/unknowndungeon3.asm" - -INCLUDE "scripts/unknowndungeon3.asm" - -INCLUDE "data/mapObjects/unknowndungeon3.asm" - -UnknownDungeon3Blocks: ; 45f58 (11:5f58) - INCBIN "maps/unknowndungeon3.blk" - -INCLUDE "data/mapHeaders/rocktunnel2.asm" - -INCLUDE "scripts/rocktunnel2.asm" - -INCLUDE "data/mapObjects/rocktunnel2.asm" - -RockTunnel2Blocks: ; 461a1 (11:61a1) - INCBIN "maps/rocktunnel2.blk" - -INCLUDE "data/mapHeaders/seafoamislands2.asm" - -INCLUDE "scripts/seafoamislands2.asm" - -INCLUDE "data/mapObjects/seafoamislands2.asm" - -SeafoamIslands2Blocks: ; 463be (11:63be) - INCBIN "maps/seafoamislands2.blk" - -INCLUDE "data/mapHeaders/seafoamislands3.asm" - -INCLUDE "scripts/seafoamislands3.asm" - -INCLUDE "data/mapObjects/seafoamislands3.asm" - -SeafoamIslands3Blocks: ; 464fa (11:64fa) - INCBIN "maps/seafoamislands3.blk" - -INCLUDE "data/mapHeaders/seafoamislands4.asm" - -INCLUDE "scripts/seafoamislands4.asm" - -INCLUDE "data/mapObjects/seafoamislands4.asm" - -SeafoamIslands4Blocks: ; 46706 (11:6706) - INCBIN "maps/seafoamislands4.blk" - -INCLUDE "data/mapHeaders/seafoamislands5.asm" - -INCLUDE "scripts/seafoamislands5.asm" - -INCLUDE "data/mapObjects/seafoamislands5.asm" - -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, [$ffea] - 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 [$ffee], 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 [$ffea], a - ret - -INCLUDE "data/hidden_objects.asm" - -SECTION "bank12",ROMX,BANK[$12] - -INCLUDE "data/mapHeaders/route7.asm" - -INCLUDE "data/mapObjects/route7.asm" - -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] ; $ff47 - or b - ld [rBGP], a ; $ff47 - ld c, $4 - call DelayFrames - ld a, [rBGP] ; $ff47 - and $fc - ld [rBGP], a ; $ff47 - ret - -Func_480ff: ; 480ff (12:40ff) - call Load16BitRegisters - ld a, $1 - ld [$d0a0], a - xor a -.asm_48108 - ld [H_NUMTOPRINT], a ; $ff96 (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] ; $ff96 (aliases: H_MULTIPLICAND) - xor b - ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND) - ld [rWY], a ; $ff4a - ld c, $3 - jp DelayFrames - -Func_48125: ; 48125 (12:4125) - call Load16BitRegisters - xor a -.asm_48129 - ld [$ff97], 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 ; $ff4b - ret - -Func_4813f: ; 4813f (12:413f) - ld a, [$ff97] - xor b - ld [$ff97], a - bit 7, a - jr z, .asm_48149 - xor a -.asm_48149 - add $7 - ld [rWX], a ; $ff4b - ld c, $4 - jp DelayFrames - -INCLUDE "scripts/route7.asm" - -INCLUDE "data/mapHeaders/redshouse1f.asm" - -INCLUDE "scripts/redshouse1f.asm" - -INCLUDE "data/mapObjects/redshouse1f.asm" - -RedsHouse1FBlocks: ; 48209 (12:4209) - INCBIN "maps/redshouse1f.blk" - -INCLUDE "data/mapHeaders/celadonmart3.asm" - -INCLUDE "scripts/celadonmart3.asm" - -INCLUDE "data/mapObjects/celadonmart3.asm" - -CeladonMart3Blocks: ; 48322 (12:4322) - INCBIN "maps/celadonmart3.blk" - -INCLUDE "data/mapHeaders/celadonmart4.asm" - -INCLUDE "scripts/celadonmart4.asm" - -INCLUDE "data/mapObjects/celadonmart4.asm" - -CeladonMart4Blocks: ; 483a1 (12:43a1) - INCBIN "maps/celadonmart4.blk" - -INCLUDE "data/mapHeaders/celadonmartroof.asm" - -INCLUDE "scripts/celadonmartroof.asm" - -INCLUDE "data/mapObjects/celadonmartroof.asm" - -CeladonMartRoofBlocks: ; 485cc (12:45cc) - INCBIN "maps/celadonmartroof.blk" - -INCLUDE "data/mapHeaders/celadonmartelevator.asm" - -INCLUDE "scripts/celadonmartelevator.asm" - -INCLUDE "data/mapObjects/celadonmartelevator.asm" - -CeladonMartElevatorBlocks: ; 48684 (12:4684) - INCBIN "maps/celadonmartelevator.blk" - -INCLUDE "data/mapHeaders/celadonmansion1.asm" - -INCLUDE "scripts/celadonmansion1.asm" - -INCLUDE "data/mapObjects/celadonmansion1.asm" - -CeladonMansion1Blocks: ; 48716 (12:4716) - INCBIN "maps/celadonmansion1.blk" - -INCLUDE "data/mapHeaders/celadonmansion2.asm" - -INCLUDE "scripts/celadonmansion2.asm" - -INCLUDE "data/mapObjects/celadonmansion2.asm" - -CeladonMansion2Blocks: ; 4876c (12:476c) - INCBIN "maps/celadonmansion2.blk" - -INCLUDE "data/mapHeaders/celadonmansion3.asm" - -INCLUDE "scripts/celadonmansion3.asm" - -INCLUDE "data/mapObjects/celadonmansion3.asm" - -CeladonMansion3Blocks: ; 48847 (12:4847) - INCBIN "maps/celadonmansion3.blk" - -INCLUDE "data/mapHeaders/celadonmansion4.asm" - -INCLUDE "scripts/celadonmansion4.asm" - -INCLUDE "data/mapObjects/celadonmansion4.asm" - -CeladonMansion4Blocks: ; 48894 (12:4894) - INCBIN "maps/celadonmansion4.blk" - -INCLUDE "data/mapHeaders/celadonpokecenter.asm" - -INCLUDE "scripts/celadonpokecenter.asm" - -INCLUDE "data/mapObjects/celadonpokecenter.asm" - -INCLUDE "data/mapHeaders/celadongym.asm" - -INCLUDE "scripts/celadongym.asm" - -INCLUDE "data/mapObjects/celadongym.asm" - -CeladonGymBlocks: ; 48b84 (12:4b84) - INCBIN "maps/celadongym.blk" - -INCLUDE "data/mapHeaders/celadongamecorner.asm" - -INCLUDE "scripts/celadongamecorner.asm" - -INCLUDE "data/mapObjects/celadongamecorner.asm" - -CeladonGameCornerBlocks: ; 49003 (12:5003) - INCBIN "maps/celadongamecorner.blk" - -INCLUDE "data/mapHeaders/celadonmart5.asm" - -INCLUDE "scripts/celadonmart5.asm" - -INCLUDE "data/mapObjects/celadonmart5.asm" - -CeladonMart5Blocks: ; 490bc (12:50bc) - INCBIN "maps/celadonmart5.blk" - -INCLUDE "data/mapHeaders/celadonprizeroom.asm" - -INCLUDE "scripts/celadonprizeroom.asm" - -INCLUDE "data/mapObjects/celadonprizeroom.asm" - -CeladonPrizeRoomBlocks: ; 49131 (12:5131) - INCBIN "maps/celadonprizeroom.blk" - -INCLUDE "data/mapHeaders/celadondiner.asm" - -INCLUDE "scripts/celadondiner.asm" - -INCLUDE "data/mapObjects/celadondiner.asm" - -CeladonDinerBlocks: ; 491ee (12:51ee) - INCBIN "maps/celadondiner.blk" - -INCLUDE "data/mapHeaders/celadonhouse.asm" - -INCLUDE "scripts/celadonhouse.asm" - -INCLUDE "data/mapObjects/celadonhouse.asm" - -CeladonHouseBlocks: ; 4924d (12:524d) - INCBIN "maps/celadonhouse.blk" - -INCLUDE "data/mapHeaders/celadonhotel.asm" - -INCLUDE "scripts/celadonhotel.asm" - -INCLUDE "data/mapObjects/celadonhotel.asm" - -CeladonHotelBlocks: ; 492a7 (12:52a7) - INCBIN "maps/celadonhotel.blk" - -INCLUDE "data/mapHeaders/mtmoonpokecenter.asm" - -INCLUDE "scripts/mtmoonpokecenter.asm" - -INCLUDE "data/mapObjects/mtmoonpokecenter.asm" - -INCLUDE "data/mapHeaders/rocktunnelpokecenter.asm" - -INCLUDE "scripts/rocktunnelpokecenter.asm" - -INCLUDE "data/mapObjects/rocktunnelpokecenter.asm" - -INCLUDE "data/mapHeaders/route11gate.asm" - -INCLUDE "scripts/route11gate.asm" - -INCLUDE "data/mapObjects/route11gate.asm" - -INCLUDE "data/mapHeaders/route11gateupstairs.asm" - -INCLUDE "scripts/route11gateupstairs.asm" - -INCLUDE "data/mapObjects/route11gateupstairs.asm" - -INCLUDE "data/mapHeaders/route12gate.asm" - -INCLUDE "scripts/route12gate.asm" - -INCLUDE "data/mapObjects/route12gate.asm" - -Route12GateBlocks: ; 49540 (12:5540) - INCBIN "maps/route12gate.blk" - -INCLUDE "data/mapHeaders/route12gateupstairs.asm" - -INCLUDE "scripts/route12gateupstairs.asm" - -INCLUDE "data/mapObjects/route12gateupstairs.asm" - -INCLUDE "data/mapHeaders/route15gate.asm" - -INCLUDE "scripts/route15gate.asm" - -INCLUDE "data/mapObjects/route15gate.asm" - -INCLUDE "data/mapHeaders/route15gateupstairs.asm" - -INCLUDE "scripts/route15gateupstairs.asm" - -INCLUDE "data/mapObjects/route15gateupstairs.asm" - -INCLUDE "data/mapHeaders/route16gate.asm" - -INCLUDE "scripts/route16gate.asm" - -INCLUDE "data/mapObjects/route16gate.asm" - -Route16GateBlocks: ; 497e3 (12:57e3) - INCBIN "maps/route16gate.blk" - -INCLUDE "data/mapHeaders/route16gateupstairs.asm" - -INCLUDE "scripts/route16gateupstairs.asm" - -INCLUDE "data/mapObjects/route16gateupstairs.asm" - -INCLUDE "data/mapHeaders/route18gate.asm" - -INCLUDE "scripts/route18gate.asm" - -INCLUDE "data/mapObjects/route18gate.asm" - -INCLUDE "data/mapHeaders/route18gateupstairs.asm" - -INCLUDE "scripts/route18gateupstairs.asm" - -INCLUDE "data/mapObjects/route18gateupstairs.asm" - -INCLUDE "data/mapHeaders/mtmoon1.asm" - -INCLUDE "scripts/mtmoon1.asm" - -INCLUDE "data/mapObjects/mtmoon1.asm" - -MtMoon1Blocks: ; 49b97 (12:5b97) - INCBIN "maps/mtmoon1.blk" - -INCLUDE "data/mapHeaders/mtmoon3.asm" - -INCLUDE "scripts/mtmoon3.asm" - -INCLUDE "data/mapObjects/mtmoon3.asm" - -MtMoon3Blocks: ; 4a041 (12:6041) - INCBIN "maps/mtmoon3.blk" - -INCLUDE "data/mapHeaders/safarizonewest.asm" - -INCLUDE "scripts/safarizonewest.asm" - -INCLUDE "data/mapObjects/safarizonewest.asm" - -SafariZoneWestBlocks: ; 4a248 (12:6248) - INCBIN "maps/safarizonewest.blk" - -INCLUDE "data/mapHeaders/safarizonesecrethouse.asm" - -INCLUDE "scripts/safarizonesecrethouse.asm" - -INCLUDE "data/mapObjects/safarizonesecrethouse.asm" - -SafariZoneSecretHouseBlocks: ; 4a37f (12:637f) - INCBIN "maps/safarizonesecrethouse.blk" - -SECTION "bank13",ROMX,BANK[$13] - -TrainerPics: - -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" - -INCLUDE "data/mapHeaders/battlecenterm.asm" - -INCLUDE "scripts/battlecenterm.asm" - -INCLUDE "data/mapObjects/battlecenterm.asm" - -BattleCenterMBlocks: ; 4fd5d (13:7d5d) - INCBIN "maps/battlecenterm.blk" - -INCLUDE "data/mapHeaders/tradecenterm.asm" - -INCLUDE "scripts/tradecenterm.asm" - -INCLUDE "data/mapObjects/tradecenterm.asm" - -TradeCenterMBlocks: ; 4fd91 (13:7d91) - INCBIN "maps/tradecenterm.blk" - -_GivePokemon: ; 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 - callab Func_3eb01 - call SetPokedexOwnedFlag - callab Func_e7a4 - 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, SetToBoxText - call PrintText - scf - ret -.asm_4fdf9 - ld hl, BoxIsFullText - call PrintText - and a - ret -.asm_4fe01 - call SetPokedexOwnedFlag - call AddPokemonToParty - ld a, $1 - ld [$cc3c], a - ld [$ccd3], a - scf - ret - -SetPokedexOwnedFlag: ; 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, GotMonText - jp PrintText - -GotMonText: ; 4fe39 (13:7e39) - TX_FAR _GotMonText - db $0b - db "@" - -SetToBoxText: ; 4fe3f (13:7e3f) - TX_FAR _SetToBoxText - db "@" - -BoxIsFullText: ; 4fe44 (13:7e44) - TX_FAR _BoxIsFullText - 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(LearnMove),LearnMove - 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(UsedCut),UsedCut - dbw BANK(ShowPokedexData),ShowPokedexData - dbw BANK(WriteMonMoves),WriteMonMoves - dbw BANK(SaveSAV),SaveSAV - db BANK(LoadSGBBorderAndPalettes) - dw LoadSGBBorderAndPalettes - 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 - db BANK(DisplayStarterMonDex) - dw DisplayStarterMonDex; 46 load dex screen - db BANK(_AddPokemonToParty) - dw _AddPokemonToParty - dbw BANK(UpdateHPBar),UpdateHPBar - dbw BANK(Func_3cdec),Func_3cdec - dbw BANK(LoadTownMap_Nest),LoadTownMap_Nest - dbw BANK(Func_27d6b),Func_27d6b - db BANK(PrintEmotionBubble) - dw PrintEmotionBubble; 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 - db BANK(HallOfFameComputer) - dw HallOfFameComputer - 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 - db BANK(PrintUsedStrengthText) - dw PrintUsedStrengthText - 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(OaksAideScript),OaksAideScript - -SECTION "bank14",ROMX,BANK[$14] - -INCLUDE "data/mapHeaders/route22.asm" - -INCLUDE "data/mapObjects/route22.asm" - -Route22Blocks: ; 5003d (14:403d) - INCBIN "maps/route22.blk" - -INCLUDE "data/mapHeaders/route20.asm" - -INCLUDE "data/mapObjects/route20.asm" - -Route20Blocks: ; 5017d (14:417d) - INCBIN "maps/route20.blk" - -INCLUDE "data/mapHeaders/route23.asm" - -INCLUDE "data/mapObjects/route23.asm" - -Route23Blocks: ; 503b2 (14:43b2) - INCBIN "maps/route23.blk" - -INCLUDE "data/mapHeaders/route24.asm" - -INCLUDE "data/mapObjects/route24.asm" - -Route24Blocks: ; 506e7 (14:46e7) - INCBIN "maps/route24.blk" - -INCLUDE "data/mapHeaders/route25.asm" - -INCLUDE "data/mapObjects/route25.asm" - -Route25Blocks: ; 50810 (14:4810) - INCBIN "maps/route25.blk" - -INCLUDE "data/mapHeaders/indigoplateau.asm" - -INCLUDE "scripts/indigoplateau.asm" - -INCLUDE "data/mapObjects/indigoplateau.asm" - -IndigoPlateauBlocks: ; 5094a (14:494a) - INCBIN "maps/indigoplateau.blk" - -INCLUDE "data/mapHeaders/saffroncity.asm" - -INCLUDE "data/mapObjects/saffroncity.asm" - -SaffronCityBlocks: ; 50a98 (14:4a98) - INCBIN "maps/saffroncity.blk" - -INCLUDE "scripts/saffroncity.asm" - -INCLUDE "scripts/route20.asm" - -INCLUDE "scripts/route22.asm" - -INCLUDE "scripts/route23.asm" - -INCLUDE "scripts/route24.asm" - -INCLUDE "scripts/route25.asm" - -INCLUDE "data/mapHeaders/victoryroad2.asm" - -INCLUDE "scripts/victoryroad2.asm" - -INCLUDE "data/mapObjects/victoryroad2.asm" - -VictoryRoad2Blocks: ; 519af (14:59af) - INCBIN "maps/victoryroad2.blk" - -INCLUDE "data/mapHeaders/mtmoon2.asm" - -INCLUDE "scripts/mtmoon2.asm" - -INCLUDE "data/mapObjects/mtmoon2.asm" - -MtMoon2Blocks: ; 51a91 (14:5a91) - INCBIN "maps/mtmoon2.blk" - -INCLUDE "data/mapHeaders/silphco7.asm" - -INCLUDE "scripts/silphco7.asm" - -INCLUDE "data/mapObjects/silphco7.asm" - -SilphCo7Blocks: ; 51f57 (14:5f57) - INCBIN "maps/silphco7.blk" - -INCLUDE "data/mapHeaders/mansion2.asm" - -INCLUDE "scripts/mansion2.asm" - -INCLUDE "data/mapObjects/mansion2.asm" - -Mansion2Blocks: ; 52110 (14:6110) - INCBIN "maps/mansion2.blk" - -INCLUDE "data/mapHeaders/mansion3.asm" - -INCLUDE "scripts/mansion3.asm" - -INCLUDE "data/mapObjects/mansion3.asm" - -Mansion3Blocks: ; 52326 (14:6326) - INCBIN "maps/mansion3.blk" - -INCLUDE "data/mapHeaders/mansion4.asm" - -INCLUDE "scripts/mansion4.asm" - -INCLUDE "data/mapObjects/mansion4.asm" - -Mansion4Blocks: ; 524dd (14:64dd) - INCBIN "maps/mansion4.blk" - -Func_525af: ; 525af (14:65af) - ld a, [$ffd7] - 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 - -ParalyzeEffect_: ; 52601 (14:6601) - ld hl, W_ENEMYMONSTATUS ; $cfe9 - ld de, W_PLAYERMOVETYPE ; $cfd5 - ld a, [H_WHOSETURN] ; $fff3 - and a - jp z, .asm_52613 - ld hl, W_PLAYERMONSTATUS ; $d018 - ld de, W_ENEMYMOVETYPE ; $cfcf - -.asm_52613 - ld a, [hl] - and a - jr nz, .asm_52659 - ld a, [de] - cp EVASION_DOWN1_EFFECT - 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 - callab MoveHitTest - pop hl - ld a, [W_MOVEMISSED] ; $d05f - and a - jr nz, .asm_52659 - set 6, [hl] - callab Func_3ed27 - ld c, $1e - call DelayFrames - callab Func_3fba8 - ld hl, PrintMayNotAttackText - ld b, BANK(PrintMayNotAttackText) - jp Bankswitch -.asm_52659 - ld c, $32 - call DelayFrames - ld hl, PrintDidntAffectText - ld b, BANK(PrintDidntAffectText) - jp Bankswitch -.asm_52666 - ld c, $32 - call DelayFrames - ld hl, PrintDoesntAffectText - ld b, BANK(PrintDoesntAffectText) - jp Bankswitch - -PrintCardKeyText: ; 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, CARD_KEY - call IsItemInBag - jr z, .asm_526dc - call Func_526fd - push de - ld a, $1 - ld [H_DOWNARROWBLINKCNT2], a ; $ff8c - call PrintPredefTextID - 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, (SFX_1f_57 - SFX_Headers_1f) / 3 - jp PlaySound -.asm_526dc - ld a, $2 - ld [H_DOWNARROWBLINKCNT2], a ; $ff8c - jp PrintPredefTextID - -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 - db $0D - db "@" - -ExchangeCoinsForPrizesTextPtr: ; 52784 (14:6784) - TX_FAR _ExchangeCoinsForPrizesText - db "@" - -WhichPrizeTextPtr: ; 52789 (14:6789) - TX_FAR _WhichPrizeText - 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 - -INCLUDE "data/prizes.asm" - -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,SorryNeedMoreCoinsText - 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 - db $0D - db "@" - -SoYouWantPrizeTextPtr: ; 52960 (14:6960) - TX_FAR _SoYouWantPrizeText - db "@" - -SorryNeedMoreCoinsText: ; 52965 (14:6965) - TX_FAR _SorryNeedMoreCoinsText - db $0D - db "@" - -PrizeRoomBagIsFullTextPtr: ; 5296b (14:696b) - TX_FAR _OopsYouDontHaveEnoughRoomText - db $0D - db "@" - -OhFineThenTextPtr: ; 52971 (14:6971) - TX_FAR _OhFineThenText - 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 - -INCLUDE "data/prize_mon_levels.asm" - -PrintNotebookText: ; 52996 (14:6996) - call EnableAutoTextBoxDrawing - ld a, $1 - ld [$cc3c], a - ld a, [wTrainerSpriteOffset] - jp PrintPredefTextID - -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 "@" - -PrintFightingDojoText2: ; 52a08 (14:6a08) - call EnableAutoTextBoxDrawing - ld a, $37 - jp PrintPredefTextID - -FightingDojoText_52a10: ; 52a10 (14:6a10) - TX_FAR _FightingDojoText_52a10 - db "@" - -PrintFightingDojoText3: ; 52a15 (14:6a15) - call EnableAutoTextBoxDrawing - ld a, $38 - jp PrintPredefTextID - -FightingDojoText_52a1d: ; 52a1d (14:6a1d) - TX_FAR _FightingDojoText_52a1d - db "@" - -PrintFightingDojoText: ; 52a22 (14:6a22) - call EnableAutoTextBoxDrawing - ld a, $36 - jp PrintPredefTextID - -FightingDojoText: ; 52a2a (14:6a2a) - TX_FAR _FightingDojoText - db "@" - -PrintIndigoPlateauHQText: ; 52a2f (14:6a2f) - ld a, [$c109] - cp $4 - ret nz - call EnableAutoTextBoxDrawing - ld a, $27 - jp PrintPredefTextID - -IndigoPlateauHQText: ; 52a3d (14:6a3d) - TX_FAR _IndigoPlateauHQText - db "@" - -SECTION "bank15",ROMX,BANK[$15] - -INCLUDE "data/mapHeaders/route2.asm" - -INCLUDE "data/mapObjects/route2.asm" - -Route2Blocks: ; 5407e (15:407e) - INCBIN "maps/route2.blk" - -INCLUDE "data/mapHeaders/route3.asm" - -INCLUDE "data/mapObjects/route3.asm" - -Route3Blocks: ; 54255 (15:4255) - INCBIN "maps/route3.blk" - -INCLUDE "data/mapHeaders/route4.asm" - -INCLUDE "data/mapObjects/route4.asm" - -Route4Blocks: ; 543ec (15:43ec) - INCBIN "maps/route4.blk" - -INCLUDE "data/mapHeaders/route5.asm" - -INCLUDE "data/mapObjects/route5.asm" - -Route5Blocks: ; 545d2 (15:45d2) - INCBIN "maps/route5.blk" - -INCLUDE "data/mapHeaders/route9.asm" - -INCLUDE "data/mapObjects/route9.asm" - -Route9Blocks: ; 546fe (15:46fe) - INCBIN "maps/route9.blk" - -INCLUDE "data/mapHeaders/route13.asm" - -INCLUDE "data/mapObjects/route13.asm" - -Route13Blocks: ; 5488b (15:488b) - INCBIN "maps/route13.blk" - -INCLUDE "data/mapHeaders/route14.asm" - -INCLUDE "data/mapObjects/route14.asm" - -Route14Blocks: ; 54a12 (15:4a12) - INCBIN "maps/route14.blk" - -INCLUDE "data/mapHeaders/route17.asm" - -INCLUDE "data/mapObjects/route17.asm" - -Route17Blocks: ; 54ba8 (15:4ba8) - INCBIN "maps/route17.blk" - -INCLUDE "data/mapHeaders/route19.asm" - -INCLUDE "data/mapObjects/route19.asm" - -Route19Blocks: ; 54ef1 (15:4ef1) - INCBIN "maps/route19.blk" - -INCLUDE "data/mapHeaders/route21.asm" - -INCLUDE "data/mapObjects/route21.asm" - -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" - -GainExperience: ; 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 ; $ff96 (aliases: H_MULTIPLICAND) - ld [$ff97], a - ld a, [$d008] - ld [$ff98], a - ld a, [W_ENEMYMONLEVEL] ; $cff3 - ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - call Multiply - ld a, $7 - ld [H_REMAINDER], a ; $ff99 (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, [$ff98] - ld [$cf4c], a - add b - ld [hld], a - ld b, [hl] - ld a, [$ff97] - 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 - callab CalcExperience - ld a, [H_NUMTOPRINT] ; $ff96 (aliases: H_MULTIPLICAND) - ld b, a - ld a, [$ff97] - ld c, a - ld a, [$ff98] - 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, GainedText - call PrintText - xor a - ld [$cc49], a - call LoadMonData - pop hl - ld bc, $13 - add hl, bc - push hl - callba Func_58f43 - 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 - callab Func_3ed99 - callab Func_3ed1a - callab Func_3ee19 - callab Func_3cd60 - callab Func_3ee94 - call SaveScreenTilesToBuffer1 -.asm_553f7 - ld hl, GrewLevelText - call PrintText - xor a - ld [$cc49], a - call LoadMonData - ld d, $1 - callab PrintStatsBox - 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 ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) - ld a, [hl] - ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND) - ld a, [$d11e] - ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - ld b, $2 - call Divide - ld a, [$ff98] - ld [hli], a - dec c - jr nz, .asm_55488 - ret - -Func_5549f: ; 5549f (15:549f) - ld a, [$ff97] - ld b, a - ld a, [$ff98] - ld c, a - srl b - rr c - add c - ld [$ff98], a - ld a, [$ff97] - adc b - ld [$ff97], a - ret - -GainedText: ; 554b2 (15:54b2) - TX_FAR _GainedText - db $08 ; asm - ld a, [$cc5b] - ld hl, WithExpAllText - and a - ret nz - ld hl, ExpPointsText - ld a, [$cf4d] - and a - ret z - ld hl, BoostedText - ret - -WithExpAllText: ; 554cb (15:54cb) - TX_FAR _WithExpAllText - db $08 ; asm - ld hl, ExpPointsText - ret - -BoostedText: ; 554d4 (15:54d4) - TX_FAR _BoostedText - -ExpPointsText: ; 554d8 (15:54d8) - TX_FAR _ExpPointsText - db "@" - -GrewLevelText: ; 554dd (15:54dd) - TX_FAR _GrewLevelText - db $0b - db "@" - -INCLUDE "scripts/route2.asm" - -INCLUDE "scripts/route3.asm" - -INCLUDE "scripts/route4.asm" - -INCLUDE "scripts/route5.asm" - -INCLUDE "scripts/route9.asm" - -INCLUDE "scripts/route13.asm" - -INCLUDE "scripts/route14.asm" - -INCLUDE "scripts/route17.asm" - -INCLUDE "scripts/route19.asm" - -INCLUDE "scripts/route21.asm" - -INCLUDE "data/mapHeaders/vermilionhouse2.asm" - -INCLUDE "scripts/vermilionhouse2.asm" - -INCLUDE "data/mapObjects/vermilionhouse2.asm" - -INCLUDE "data/mapHeaders/celadonmart2.asm" - -INCLUDE "scripts/celadonmart2.asm" - -INCLUDE "data/mapObjects/celadonmart2.asm" - -CeladonMart2Blocks: ; 56148 (15:6148) - INCBIN "maps/celadonmart2.blk" - -INCLUDE "data/mapHeaders/fuchsiahouse3.asm" - -INCLUDE "scripts/fuchsiahouse3.asm" - -INCLUDE "data/mapObjects/fuchsiahouse3.asm" - -INCLUDE "data/mapHeaders/daycarem.asm" - -INCLUDE "scripts/daycarem.asm" - -INCLUDE "data/mapObjects/daycarem.asm" - -INCLUDE "data/mapHeaders/route12house.asm" - -INCLUDE "scripts/route12house.asm" - -INCLUDE "data/mapObjects/route12house.asm" - -INCLUDE "data/mapHeaders/silphco8.asm" - -INCLUDE "scripts/silphco8.asm" - -INCLUDE "data/mapObjects/silphco8.asm" - -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 - callba Func_44dd - 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 - callba LoadTrainerInfoTextBoxTiles - ld b, $8 - call GoPAL_SET - call Delay3 - call GBPalNormal - ld a, $90 - ld [$ff48], 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 ; $ff8c - call Func_56903 - ld a, [hli] - ld [$ffeb], a - inc hl - ld a, [hl] - ld [$ffec], a - ld de, $fe - add hl, de - ld a, [hli] - ld [$ffed], a - ld a, [hl] - ld [$ffee], a - ret - -Func_56819: ; 56819 (15:6819) - ld hl, wSpriteStateData1 - ld de, $0004 - ld a, [$cf13] - ld [H_DOWNARROWBLINKCNT2], a ; $ff8c - 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 ; $ff8c - call Func_56903 - ld a, [$ffeb] - ld [hli], a - inc hl - ld a, [$ffec] - ld [hl], a - ld de, $fe - add hl, de - ld a, [$ffed] - ld [hli], a - ld a, [$ffee] - ld [hl], a - ret - -Func_5685d: ; 5685d (15:685d) - ld hl, wSpriteStateData1 - ld de, $0004 - ld a, [$cf13] - ld [H_DOWNARROWBLINKCNT2], a ; $ff8c - 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 ; $ff8c - jp MoveSprite_ - -Func_56903: ; 56903 (15:6903) - push de - add hl, de - ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c - 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] - -INCLUDE "data/mapHeaders/route6.asm" - -INCLUDE "data/mapObjects/route6.asm" - -Route6Blocks: ; 58079 (16:4079) - INCBIN "maps/route6.blk" - -INCLUDE "data/mapHeaders/route8.asm" - -INCLUDE "data/mapObjects/route8.asm" - -Route8Blocks: ; 581c6 (16:41c6) - INCBIN "maps/route8.blk" - -INCLUDE "data/mapHeaders/route10.asm" - -INCLUDE "data/mapObjects/route10.asm" - -Route10Blocks: ; 58356 (16:4356) - INCBIN "maps/route10.blk" - -INCLUDE "data/mapHeaders/route11.asm" - -INCLUDE "data/mapObjects/route11.asm" - -Route11Blocks: ; 5855f (16:455f) - INCBIN "maps/route11.blk" - -INCLUDE "data/mapHeaders/route12.asm" - -INCLUDE "data/mapObjects/route12.asm" - -Route12Blocks: ; 58710 (16:4710) - INCBIN "maps/route12.blk" - -INCLUDE "data/mapHeaders/route15.asm" - -INCLUDE "data/mapObjects/route15.asm" - -Route15Blocks: ; 589cc (16:49cc) - INCBIN "maps/route15.blk" - -INCLUDE "data/mapHeaders/route16.asm" - -INCLUDE "data/mapObjects/route16.asm" - -Route16Blocks: ; 58b84 (16:4b84) - INCBIN "maps/route16.blk" - -INCLUDE "data/mapHeaders/route18.asm" - -INCLUDE "data/mapObjects/route18.asm" - -Route18Blocks: ; 58c9c (16:4c9c) - INCBIN "maps/route18.blk" - - INCBIN "maps/unusedblocks58d7d.blk" - -PrintBeginningBattleText: ; 58d99 (16:4d99) - ld a, [W_ISINBATTLE] ; $d057 - dec a - jr nz, .trainerBattle - ld a, [W_CURMAP] ; $d35e - cp POKEMONTOWER_3 - jr c, .notPokemonTower - cp LAVENDER_HOUSE_1 - jr c, .pokemonTower -.notPokemonTower - ld a, [W_ENEMYMONID] - call PlayCry - ld hl, WildMonAppearedText - ld a, [W_MOVEMISSED] ; $d05f - and a - jr z, .notFishing - ld hl, HookedMonAttackedText -.notFishing - jr .wildBattle -.trainerBattle - call .playSFX - ld c, $14 - call DelayFrames - ld hl, TrainerWantsToFightText -.wildBattle - push hl - callab DrawAllPokeballs - pop hl - call PrintText - jr .done -.pokemonTower - ld b, SILPH_SCOPE - call IsItemInBag - ld a, [W_ENEMYMONID] - ld [$cf91], a - cp MAROWAK - jr z, .isMarowak - ld a, b - and a - jr z, .noSilphScope - callab Func_3eb01 - jr .notPokemonTower -.noSilphScope - ld hl, EnemyAppearedText - call PrintText - ld hl, GhostCantBeIDdText - call PrintText - jr .done -.isMarowak - ld a, b - and a - jr z, .noSilphScope - ld hl, EnemyAppearedText - call PrintText - ld hl, UnveiledGhostText - call PrintText - callab Func_3eb01 - callab Func_708ca - ld hl, WildMonAppearedText - call PrintText - -.playSFX - xor a - ld [$c0f1], a - ld a, $80 - ld [$c0f2], a - ld a, (SFX_08_77 - SFX_Headers_08) / 3 - call PlaySound - jp WaitForSoundToFinish -.done - ret - -WildMonAppearedText: ; 58e3b (16:4e3b) - TX_FAR _WildMonAppearedText - db "@" - -HookedMonAttackedText: ; 58e40 (16:4e40) - TX_FAR _HookedMonAttackedText - db "@" - -EnemyAppearedText: ; 58e45 (16:4e45) - TX_FAR _EnemyAppearedText - db "@" - -TrainerWantsToFightText: ; 58e4a (16:4e4a) - TX_FAR _TrainerWantsToFightText - db "@" - -UnveiledGhostText: ; 58e4f (16:4e4f) - TX_FAR _UnveiledGhostText - db "@" - -GhostCantBeIDdText: ; 58e54 (16:4e54) - TX_FAR _GhostCantBeIDdText - db "@" - -SendOutMon: ; 58e59 (16:4e59) - ld hl, W_ENEMYMONCURHP ; $cfe6 - ld a, [hli] - or [hl] - ld hl, GoText - jr z, .printText - xor a - ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND) - ld hl, W_ENEMYMONCURHP ; $cfe6 - ld a, [hli] - ld [$cce3], a - ld [$ff97], a - ld a, [hl] - ld [$cce4], a - ld [$ff98], a - ld a, $19 - ld [H_REMAINDER], a ; $ff99 (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 ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - call Divide - ld a, [$ff98] - ld hl, GoText - cp $46 - jr nc, .printText - ld hl, DoItText - cp $28 - jr nc, .printText - ld hl, GetmText - cp $a - jr nc, .printText - ld hl, EnemysWeakText -.printText - jp PrintText - -GoText: ; 58eae (16:4eae) - TX_FAR _GoText - db $08 ; asm - jr PrintPlayerMon1Text - -DoItText: ; 58eb5 (16:4eb5) - TX_FAR _DoItText - db $08 ; asm - jr PrintPlayerMon1Text - -GetmText: ; 58ebc (16:4ebc) - TX_FAR _GetmText - db $08 ; asm - jr PrintPlayerMon1Text - -EnemysWeakText: ; 58ec3 (16:4ec3) - TX_FAR _EnemysWeakText - db $08 ; asm - -PrintPlayerMon1Text: - ld hl, PlayerMon1Text - ret - -PlayerMon1Text: ; 58ecc (16:4ecc) - TX_FAR _PlayerMon1Text - db "@" - -RetreatMon: ; 58ed1 (16:4ed1) - ld hl, PlayerMon2Text - jp PrintText - -PlayerMon2Text: ; 58ed7 (16:4ed7) - TX_FAR _PlayerMon2Text - 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, EnoughText - and a - ret z - ld hl, ComeBackText - cp $1e - ret c - ld hl, OKExclamationText - cp $46 - ret c - ld hl, GoodText - ret - -EnoughText: ; 58f25 (16:4f25) - TX_FAR _EnoughText - db $08 ; asm - jr PrintComeBackText - -OKExclamationText: ; 58f2c (16:4f2c) - TX_FAR _OKExclamationText - db $08 ; asm - jr PrintComeBackText - -GoodText: ; 58f33 (16:4f33) - TX_FAR _GoodText - db $08 ; asm - jr PrintComeBackText - -PrintComeBackText: ; 58f3a (16:4f3a) - ld hl, ComeBackText - ret - -ComeBackText: ; 58f3e (16:4f3e) - TX_FAR _ComeBackText - 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, [$ff98] - ld c, a - ld a, [hld] - sub c - ld a, [$ff97] - ld c, a - ld a, [hld] - sbc c - ld a, [H_NUMTOPRINT] ; $ff96 (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 ; $ff99 - call Multiply - ld a, [hl] - and $f0 - swap a - ld [H_MULTIPLIER], a ; $ff99 - call Multiply - ld a, [hli] - and $f - ld [H_DIVISOR], a ; $ff99 - ld b, $4 - call Divide - ld a, [H_MULTIPLICAND] ; $ff96 (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 ; $ff99 - call Multiply - ld a, [H_MULTIPLICAND] ; $ff96 (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 ; $ff96 - 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] ; $ff96 - sbc b - ld [H_MULTIPLICAND], a ; $ff96 - 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 ; $ff96 (aliases: H_NUMTOPRINT) - ld [H_MULTIPLICAND+1], a - ld a, d - ld [H_MULTIPLICAND+2], a - ld [H_MULTIPLIER], a ; $ff99 (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 - -OaksAideScript ; 0x59035 - ld hl, OaksAideHiText - call PrintText - call YesNoChoice - ld a, [$cc26] - and a - jr nz, .asm_59086 ; 0x59042 $42 - ld hl, wPokedexOwned - ld b, wPokedexOwnedEnd - wPokedexOwned - call CountSetBits - ld a, [$d11e] - ld [$ffdd], a - ld b, a - ld a, [$ffdb] - cp b - jr z, .asm_59059 ; 0x59055 $2 - jr nc, .asm_5907c ; 0x59057 $23 -.asm_59059 - ld hl, OaksAideHereYouGoText - call PrintText - ld a, [$ffdc] - ld b, a - ld c, 1 - call GiveItem - jr nc, .BagFull - ld hl, OaksAideGotItemText - call PrintText - ld a, $1 - jr .asm_5908e ; 0x59071 $1b -.BagFull - ld hl, OaksAideNoRoomText - call PrintText - xor a - jr .asm_5908e ; 0x5907a $12 -.asm_5907c - ld hl, OaksAideUhOhText - call PrintText - ld a, $80 - jr .asm_5908e ; 0x59084 $8 -.asm_59086 - ld hl, OaksAideComeBackText - call PrintText - ld a, $ff -.asm_5908e - ld [$ffdb], a - ret - -OaksAideHiText: ; 59091 (16:5091) - TX_FAR _OaksAideHiText - db "@" - -OaksAideUhOhText: ; 59096 (16:5096) - TX_FAR _OaksAideUhOhText - db "@" - -OaksAideComeBackText: ; 5909b (16:509b) - TX_FAR _OaksAideComeBackText - db "@" - -OaksAideHereYouGoText: ; 590a0 (16:50a0) - TX_FAR _OaksAideHereYouGoText - db "@" - -OaksAideGotItemText: ; 590a5 (16:50a5) - TX_FAR _OaksAideGotItemText - db $0b - db "@" - -OaksAideNoRoomText: ; 590ab (16:50ab) - TX_FAR _OaksAideNoRoomText - db "@" - -INCLUDE "scripts/route6.asm" - -INCLUDE "scripts/route8.asm" - -INCLUDE "scripts/route10.asm" - -INCLUDE "scripts/route11.asm" - -INCLUDE "scripts/route12.asm" - -INCLUDE "scripts/route15.asm" - -INCLUDE "scripts/route16.asm" - -INCLUDE "scripts/route18.asm" - -INCLUDE "data/mapHeaders/fanclub.asm" - -INCLUDE "scripts/fanclub.asm" - -INCLUDE "data/mapObjects/fanclub.asm" - -FanClubBlocks: ; 59cd5 (16:5cd5) - INCBIN "maps/fanclub.blk" - -INCLUDE "data/mapHeaders/silphco2.asm" - -INCLUDE "scripts/silphco2.asm" - -INCLUDE "data/mapObjects/silphco2.asm" - -SilphCo2Blocks: ; 59ec8 (16:5ec8) - INCBIN "maps/silphco2.blk" - -INCLUDE "data/mapHeaders/silphco3.asm" - -INCLUDE "scripts/silphco3.asm" - -INCLUDE "data/mapObjects/silphco3.asm" - -SilphCo3Blocks: ; 5a0a6 (16:60a6) - INCBIN "maps/silphco3.blk" - -INCLUDE "data/mapHeaders/silphco10.asm" - -INCLUDE "scripts/silphco10.asm" - -INCLUDE "data/mapObjects/silphco10.asm" - -SilphCo10Blocks: ; 5a25a (16:625a) - INCBIN "maps/silphco10.blk" - -INCLUDE "data/mapHeaders/lance.asm" - -INCLUDE "scripts/lance.asm" - -INCLUDE "data/mapObjects/lance.asm" - -LanceBlocks: ; 5a3e9 (16:63e9) - INCBIN "maps/lance.blk" - -INCLUDE "data/mapHeaders/halloffameroom.asm" - -INCLUDE "scripts/halloffameroom.asm" - -INCLUDE "data/mapObjects/halloffameroom.asm" - -HallofFameRoomBlocks: ; 5a58b (16:658b) - INCBIN "maps/halloffameroom.blk" - -RemoveGuardDrink: ; 5a59f (16:659f) - ld hl, GuardDrinksList -.drinkLoop - ld a, [hli] - ld [$ffdb], 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" - -CopycatsHouse2FBlocks: ; 5c010 (17:4010) -RedsHouse2FBlocks: ; 0x5c010 16? - INCBIN "maps/redshouse2f.blk" - -Museum1FBlocks: ; 5c020 (17:4020) - INCBIN "maps/museum1f.blk" - -Museum2FBlocks: ; 5c048 (17:4048) - INCBIN "maps/museum2f.blk" - -SaffronPokecenterBlocks: ; 5c064 (17:4064) -VermilionPokecenterBlocks: ; 5c064 (17:4064) -LavenderPokecenterBlocks: ; 5c064 (17:4064) -PewterPokecenterBlocks: ; 5c064 (17:4064) - INCBIN "maps/pewterpokecenter.blk" - -UndergroundPathEntranceRoute7Blocks: ; 5c080 (17:4080) -UndergroundPathEntranceRoute7CopyBlocks: ; 5c080 (17:4080) -UndergroundPathEntranceRoute6Blocks: ; 5c080 (17:4080) -UndergroundPathEntranceRoute5Blocks: ; 5c080 (17:4080) - INCBIN "maps/undergroundpathentranceroute5.blk" - -Route2GateBlocks: ; 5c090 (17:4090) -ViridianForestEntranceBlocks: ; 5c090 (17:4090) -ViridianForestExitBlocks: ; 5c090 (17:4090) - INCBIN "maps/viridianforestexit.blk" - -INCLUDE "data/mapHeaders/redshouse2f.asm" - -INCLUDE "scripts/redshouse2f.asm" - -INCLUDE "data/mapObjects/redshouse2f.asm" - -; this function temporarily makes the starters (and Ivysaur) seen -; so that the full Pokedex information gets displayed in Oak's lab -DisplayStarterMonDex: ; 5c0dc (17:40dc) - ld a, %01001011 ; set starter flags - ld [wPokedexOwned], a ; $d2f7 - ld a, $3d - call Predef ; indirect jump to ShowPokedexData (402d1 (10:42d1)) - xor a ; unset starter flags - ld [wPokedexOwned], a ; $d2f7 - ret - -INCLUDE "data/mapHeaders/museum1f.asm" - -INCLUDE "scripts/museum1f.asm" - -INCLUDE "data/mapObjects/museum1f.asm" - -INCLUDE "data/mapHeaders/museum2f.asm" - -INCLUDE "scripts/museum2f.asm" - -INCLUDE "data/mapObjects/museum2f.asm" - -INCLUDE "data/mapHeaders/pewtergym.asm" - -INCLUDE "scripts/pewtergym.asm" - -INCLUDE "data/mapObjects/pewtergym.asm" - -PewterGymBlocks: ; 5c558 (17:4558) - INCBIN "maps/pewtergym.blk" - -INCLUDE "data/mapHeaders/pewterpokecenter.asm" - -INCLUDE "scripts/pewterpokecenter.asm" - -INCLUDE "data/mapObjects/pewterpokecenter.asm" - -INCLUDE "data/mapHeaders/ceruleanpokecenter.asm" - -INCLUDE "scripts/ceruleanpokecenter.asm" - -INCLUDE "data/mapObjects/ceruleanpokecenter.asm" - -CeruleanPokecenterBlocks: ; 5c68b (17:468b) - INCBIN "maps/ceruleanpokecenter.blk" - -INCLUDE "data/mapHeaders/ceruleangym.asm" - -INCLUDE "scripts/ceruleangym.asm" - -INCLUDE "data/mapObjects/ceruleangym.asm" - -CeruleanGymBlocks: ; 5c866 (17:4866) - INCBIN "maps/ceruleangym.blk" - -INCLUDE "data/mapHeaders/ceruleanmart.asm" - -INCLUDE "scripts/ceruleanmart.asm" - -INCLUDE "data/mapObjects/ceruleanmart.asm" - -INCLUDE "data/mapHeaders/lavenderpokecenter.asm" - -INCLUDE "scripts/lavenderpokecenter.asm" - -INCLUDE "data/mapObjects/lavenderpokecenter.asm" - -INCLUDE "data/mapHeaders/lavendermart.asm" - -INCLUDE "scripts/lavendermart.asm" - -INCLUDE "data/mapObjects/lavendermart.asm" - -INCLUDE "data/mapHeaders/vermilionpokecenter.asm" - -INCLUDE "scripts/vermilionpokecenter.asm" - -INCLUDE "data/mapObjects/vermilionpokecenter.asm" - -INCLUDE "data/mapHeaders/vermilionmart.asm" - -INCLUDE "scripts/vermilionmart.asm" - -INCLUDE "data/mapObjects/vermilionmart.asm" - -INCLUDE "data/mapHeaders/vermiliongym.asm" - -INCLUDE "scripts/vermiliongym.asm" - -INCLUDE "data/mapObjects/vermiliongym.asm" - -VermilionGymBlocks: ; 5cc38 (17:4c38) - INCBIN "maps/vermiliongym.blk" - -INCLUDE "data/mapHeaders/copycatshouse2f.asm" - -INCLUDE "scripts/copycatshouse2f.asm" - -INCLUDE "data/mapObjects/copycatshouse2f.asm" - -INCLUDE "data/mapHeaders/fightingdojo.asm" - -INCLUDE "scripts/fightingdojo.asm" - -INCLUDE "data/mapObjects/fightingdojo.asm" - -FightingDojoBlocks: ; 5cfe3 (17:4fe3) - INCBIN "maps/fightingdojo.blk" - -INCLUDE "data/mapHeaders/saffrongym.asm" - -INCLUDE "scripts/saffrongym.asm" - -INCLUDE "data/mapObjects/saffrongym.asm" - -SaffronGymBlocks: ; 5d3a3 (17:53a3) - INCBIN "maps/saffrongym.blk" - -INCLUDE "data/mapHeaders/saffronmart.asm" - -INCLUDE "scripts/saffronmart.asm" - -INCLUDE "data/mapObjects/saffronmart.asm" - -INCLUDE "data/mapHeaders/silphco1.asm" - -INCLUDE "scripts/silphco1.asm" - -INCLUDE "data/mapObjects/silphco1.asm" - -SilphCo1Blocks: ; 5d4a2 (17:54a2) - INCBIN "maps/silphco1.blk" - -INCLUDE "data/mapHeaders/saffronpokecenter.asm" - -INCLUDE "scripts/saffronpokecenter.asm" - -INCLUDE "data/mapObjects/saffronpokecenter.asm" - -INCLUDE "data/mapHeaders/viridianforestexit.asm" - -INCLUDE "scripts/viridianforestexit.asm" - -INCLUDE "data/mapObjects/viridianforestexit.asm" - -INCLUDE "data/mapHeaders/route2gate.asm" - -INCLUDE "scripts/route2gate.asm" - -INCLUDE "data/mapObjects/route2gate.asm" - -INCLUDE "data/mapHeaders/viridianforestentrance.asm" - -INCLUDE "scripts/viridianforestentrance.asm" - -INCLUDE "data/mapObjects/viridianforestentrance.asm" - -INCLUDE "data/mapHeaders/undergroundpathentranceroute5.asm" - -INCLUDE "scripts/undergroundpathentranceroute5.asm" - -INCLUDE "data/mapObjects/undergroundpathentranceroute5.asm" - -INCLUDE "data/mapHeaders/undergroundpathentranceroute6.asm" - -INCLUDE "scripts/undergroundpathentranceroute6.asm" - -INCLUDE "data/mapObjects/undergroundpathentranceroute6.asm" - -INCLUDE "data/mapHeaders/undergroundpathentranceroute7.asm" - -INCLUDE "scripts/undergroundpathentranceroute7.asm" - -INCLUDE "data/mapObjects/undergroundpathentranceroute7.asm" - -INCLUDE "data/mapHeaders/undergroundpathentranceroute7copy.asm" - -INCLUDE "scripts/undergroundpathentranceroute7copy.asm" - -INCLUDE "data/mapObjects/undergroundpathentranceroute7copy.asm" - -INCLUDE "data/mapHeaders/silphco9.asm" - -INCLUDE "scripts/silphco9.asm" - -INCLUDE "data/mapObjects/silphco9.asm" - -SilphCo9Blocks: ; 5d989 (17:5989) - INCBIN "maps/silphco9.blk" - -INCLUDE "data/mapHeaders/victoryroad1.asm" - -INCLUDE "scripts/victoryroad1.asm" - -INCLUDE "data/mapObjects/victoryroad1.asm" - -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 - -PrintRedsNESText: ; 5db79 (17:5b79) - call EnableAutoTextBoxDrawing - ld a, $4 ; RedBedroomSNESText - jp PrintPredefTextID - -RedBedroomSNESText: ; 5db81 (17:5b81) - TX_FAR _RedBedroomSNESText - db "@" - -OpenRedsPC: ; 5db86 (17:5b86) - call EnableAutoTextBoxDrawing - ld a, $3 - jp PrintPredefTextID - -RedBedroomPC: ; 5db8e (17:5b8e) - db $fc ; FuncTX_ItemStoragePC - -Route15GateLeftBinoculars: ; 5db8f (17:5b8f) - ld a, [$c109] - cp $4 ; i - ret nz - call EnableAutoTextBoxDrawing - ld a, $a ; text id Route15UpstairsBinocularsText - call PrintPredefTextID - 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 PrintPredefTextID - 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 PrintPredefTextID - 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 ; $ffba - call Delay3 - xor a - ld [$ffb0], 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 [$ffe1], 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 [$ffb0], a - ret +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" -PrintBlackboardLinkCableText: ; 5dc1a (17:5c1a) - call EnableAutoTextBoxDrawing - ld a, $1 - ld [$cc3c], a - ld a, [$cd3d] - call PrintPredefTextID - ret +INCLUDE "engine/battle/a.asm" -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 +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" -LinkCableHelpText1: ; 5dc9e (17:5c9e) - TX_FAR _LinkCableHelpText1 - db "@" +INCLUDE "engine/battle/b.asm" -LinkCableHelpText2: ; 5dca3 (17:5ca3) - TX_FAR _LinkCableHelpText2 - db "@" +TrainerInfoTextBoxTileGraphics: ; 2fb98 (b:7b98) + INCBIN "gfx/trainer_info.2bpp" -HowToLinkText: ; 5dca8 (17:5ca8) - db "HOW TO LINK" - next "COLOSSEUM" - next "TRADE CENTER" - next "STOP READING@" +BlankLeaderNames: ; 2fc28 (b:7c28) + INCBIN "gfx/blank_leader_names.2bpp" -LinkCableInfoTexts: ; 5dcd8 (17:5cd8) - dw LinkCableInfoText1 - dw LinkCableInfoText2 - dw LinkCableInfoText3 +CircleTile: ; 2fd88 (b:7d88) + INCBIN "gfx/circle_tile.2bpp" -LinkCableInfoText1: ; 5dcde (17:5cde) - TX_FAR _LinkCableInfoText1 - db "@" +BadgeNumbersTileGraphics: ; 2fd98 (b:7d98) + INCBIN "gfx/badge_numbers.2bpp" -LinkCableInfoText2: ; 5dce3 (17:5ce3) - TX_FAR _LinkCableInfoText2 - db "@" +INCLUDE "engine/items/tmhm.asm" -LinkCableInfoText3: ; 5dce8 (17:5ce8) - TX_FAR _LinkCableInfoText3 - db "@" +INCLUDE "engine/battle/b_2.asm" -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 +INCLUDE "engine/game_corner_slots2.asm" -ViridianSchoolBlackboardText1: ; 5dda2 (17:5da2) - TX_FAR _ViridianSchoolBlackboardText1 - 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" -ViridianSchoolBlackboardText2: ; 5dda7 (17:5da7) - TX_FAR _ViridianSchoolBlackboardText2 - db "@" +INCLUDE "engine/battle/c.asm" -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 "@" +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" -ViridianBlackboardPoisonText: ; 5dddb (17:5ddb) - TX_FAR _ViridianBlackboardPoisonText - db "@" +INCLUDE "engine/titlescreen2.asm" -ViridianBlackbaordPrlzText: ; 5dde0 (17:5de0) - TX_FAR _ViridianBlackbaordPrlzText - db "@" +INCLUDE "engine/battle/d.asm" -ViridianBlackboardBurnText: ; 5dde5 (17:5de5) - TX_FAR _ViridianBlackboardBurnText - db "@" +INCLUDE "engine/slot_machine.asm" -ViridianBlackboardFrozenText: ; 5ddea (17:5dea) - TX_FAR _ViridianBlackboardFrozenText - db "@" +INCLUDE "engine/overworld/pewter_guys.asm" -PrintTrashText: ; 5ddef (17:5def) - call EnableAutoTextBoxDrawing - ld a, $26 - jp PrintPredefTextID +INCLUDE "engine/multiply_divide.asm" -VermilionGymTrashText: ; 5ddf7 (17:5df7) - TX_FAR _VermilionGymTrashText - db "@" +INCLUDE "engine/game_corner_slots.asm" -GymTrashScript: ; 5ddfc (17:5dfc) - call EnableAutoTextBoxDrawing - ld a, [wWhichTrade] ; $cd3d - ld [$cd5b], a +SECTION "bankE",ROMX,BANK[$E] -; Don't do the trash can puzzle if it's already been done. - ld a, [$d773] - bit 0, a - jr z, .ok +INCLUDE "data/moves.asm" - ld a, $26 ; DisplayTextID $26 = VermilionGymTrashText (nothing in the trash) - jp PrintPredefTextID +INCLUDE "data/base_stats.asm" -.ok - bit 1, a - jr nz, .trySecondLock +INCLUDE "data/cries.asm" - ld a, [$d743] - ld b, a - ld a, [$cd5b] - cp b - jr z, .openFirstLock +INCLUDE "engine/battle/e.asm" - ld a, $26 ; DisplayTextID $26 = VermilionGymTrashText (nothing in the trash) - jr .done +; tiles for gameboy and link cable graphics used for trading sequence animation +TradingAnimationGraphics: ; 3a9be (e:69be) + INCBIN "gfx/game_boy.norepeat.2bpp" + INCBIN "gfx/link_cable.2bpp" -.openFirstLock -; Next can is trying for the second switch. - ld hl, $d773 - set 1, [hl] +; 4 tiles for actual wire transfer animation (pokeball wandering inside wire) +TradingAnimationGraphics2: ; 3acce (e:6cce) + INCBIN "gfx/trade2.2bpp" - ld hl, GymTrashCans ; $5e7d - ld a, [$cd5b] - ; * 5 - ld b, a - add a - add a - add b +INCLUDE "engine/evos_moves.asm" - ld d, 0 - ld e, a - add hl, de - ld a, [hli] +INCLUDE "engine/battle/e_2.asm" - ld [$ffdb], a - push hl - call GenRandom - swap a - ld b, a - ld a, [$ffdb] - and b - dec a - pop hl +SECTION "bankF",ROMX,BANK[$F] - ld d, 0 - ld e, a - add hl, de - ld a, [hl] - and $f - ld [$d744], a +INCLUDE "engine/battle/core.asm" - ld a, $3b ; DisplayTextID $3b = VermilionGymTrashSuccesText1 (first lock opened!) - jr .done +SECTION "bank10",ROMX,BANK[$10] -.trySecondLock - ld a, [$d744] - ld b, a - ld a, [$cd5b] - cp b - jr z, .openSecondLock +INCLUDE "engine/menu/pokedex.asm" -; Reset the cans. - ld hl, $d773 - res 1, [hl] - call GenRandom +INCLUDE "engine/trade.asm" - and $e - ld [$d743], a +INCLUDE "engine/intro.asm" - ld a, $3e ; DisplayTextID $3e = VermilionGymTrashFailText (locks reset!) - jr .done +INCLUDE "engine/trade2.asm" -.openSecondLock -; Completed the trash can puzzle. - ld hl, $d773 - set 0, [hl] - ld hl, $d126 - set 6, [hl] +SECTION "bank11",ROMX,BANK[$11] - ld a, $3d ; DisplayTextID $3d = VermilionGymTrashSuccesText3 (2nd lock opened!) +INCLUDE "data/mapHeaders/lavendertown.asm" -.done - jp PrintPredefTextID - -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, (SFX_02_49 - SFX_Headers_02) / 3 - call PlaySound - call WaitForSoundToFinish - jp TextScriptEnd +INCLUDE "data/mapObjects/lavendertown.asm" -VermilionGymTrashSuccesText2: ; 5dedb (17:5edb) - TX_FAR _VermilionGymTrashSuccesText2 - db "@" +LavenderTownBlocks: ; 44085 (11:4085) + INCBIN "maps/lavendertown.blk" -UnnamedText_5dee0: ; 5dee0 (17:5ee0) - db $08 ; asm - call WaitForSoundToFinish - ld a, (SFX_02_49 - SFX_Headers_02) / 3 - call PlaySound - call WaitForSoundToFinish - jp TextScriptEnd +ViridianPokecenterBlocks: ; 440df (11:40df) + INCBIN "maps/viridianpokecenter.blk" -VermilionGymTrashSuccesText3: ; 5deef (17:5eef) - TX_FAR _VermilionGymTrashSuccesText3 - db $08 ; asm - call WaitForSoundToFinish - ld a, (SFX_02_57 - SFX_Headers_02) / 3 - call PlaySound - call WaitForSoundToFinish - jp TextScriptEnd +SafariZoneRestHouse1Blocks: ; 440fb (11:40fb) +SafariZoneRestHouse2Blocks: ; 440fb (11:40fb) +SafariZoneRestHouse3Blocks: ; 440fb (11:40fb) +SafariZoneRestHouse4Blocks: ; 440fb (11:40fb) + INCBIN "maps/safarizoneresthouse1.blk" -VermilionGymTrashFailText: ; 5df02 (17:5f02) - TX_FAR _VermilionGymTrashFailText - db $08 ; asm - call WaitForSoundToFinish - ld a, (SFX_02_51 - SFX_Headers_02) / 3 - call PlaySound - call WaitForSoundToFinish - jp TextScriptEnd +INCLUDE "scripts/lavendertown.asm" -SECTION "bank18",ROMX,BANK[$18] +INCLUDE "engine/pokedex_rating.asm" -ViridianForestBlocks: ; 60000 (18:4000) - INCBIN "maps/viridianforest.blk" +INCLUDE "data/mapHeaders/viridianpokecenter.asm" -UndergroundPathNSBlocks: ; 60198 (18:4198) - INCBIN "maps/undergroundpathns.blk" +INCLUDE "scripts/viridianpokecenter.asm" -UndergroundPathWEBlocks: ; 601f4 (18:41f4) - INCBIN "maps/undergroundpathwe.blk" +INCLUDE "data/mapObjects/viridianpokecenter.asm" - INCBIN "maps/unusedblocks60258.blk" +INCLUDE "data/mapHeaders/mansion1.asm" -SSAnne10Blocks: ; 603c0 (18:43c0) -SSAnne9Blocks: ; 603c0 (18:43c0) - INCBIN "maps/ssanne9.blk" +INCLUDE "scripts/mansion1.asm" -INCLUDE "data/mapHeaders/pokemontower1.asm" +INCLUDE "data/mapObjects/mansion1.asm" -INCLUDE "scripts/pokemontower1.asm" +Mansion1Blocks: ; 443fe (11:43fe) + INCBIN "maps/mansion1.blk" -INCLUDE "data/mapObjects/pokemontower1.asm" +INCLUDE "data/mapHeaders/rocktunnel1.asm" -PokemonTower1Blocks: ; 6048c (18:448c) - INCBIN "maps/pokemontower1.blk" +INCLUDE "scripts/rocktunnel1.asm" -INCLUDE "data/mapHeaders/pokemontower2.asm" +INCLUDE "data/mapObjects/rocktunnel1.asm" -INCLUDE "scripts/pokemontower2.asm" +RockTunnel1Blocks: ; 44675 (11:4675) + INCBIN "maps/rocktunnel1.blk" -INCLUDE "data/mapObjects/pokemontower2.asm" +INCLUDE "data/mapHeaders/seafoamislands1.asm" -PokemonTower2Blocks: ; 60666 (18:4666) - INCBIN "maps/pokemontower2.blk" +INCLUDE "scripts/seafoamislands1.asm" -INCLUDE "data/mapHeaders/pokemontower3.asm" +INCLUDE "data/mapObjects/seafoamislands1.asm" -INCLUDE "scripts/pokemontower3.asm" +SeafoamIslands1Blocks: ; 4489f (11:489f) + INCBIN "maps/seafoamislands1.blk" -INCLUDE "data/mapObjects/pokemontower3.asm" +INCLUDE "data/mapHeaders/ssanne3.asm" -PokemonTower3Blocks: ; 60790 (18:4790) - INCBIN "maps/pokemontower3.blk" +INCLUDE "scripts/ssanne3.asm" -INCLUDE "data/mapHeaders/pokemontower4.asm" +INCLUDE "data/mapObjects/ssanne3.asm" -INCLUDE "scripts/pokemontower4.asm" +SSAnne3Blocks: ; 44956 (11:4956) + INCBIN "maps/ssanne3.blk" -INCLUDE "data/mapObjects/pokemontower4.asm" +INCLUDE "data/mapHeaders/victoryroad3.asm" -PokemonTower4Blocks: ; 608cc (18:48cc) - INCBIN "maps/pokemontower4.blk" +INCLUDE "scripts/victoryroad3.asm" -INCLUDE "data/mapHeaders/pokemontower5.asm" +INCLUDE "data/mapObjects/victoryroad3.asm" -INCLUDE "scripts/pokemontower5.asm" +VictoryRoad3Blocks: ; 44b37 (11:4b37) + INCBIN "maps/victoryroad3.blk" -INCLUDE "data/mapObjects/pokemontower5.asm" +INCLUDE "data/mapHeaders/rockethideout1.asm" -PokemonTower5Blocks: ; 60a89 (18:4a89) - INCBIN "maps/pokemontower5.blk" +INCLUDE "scripts/rockethideout1.asm" -INCLUDE "data/mapHeaders/pokemontower6.asm" +INCLUDE "data/mapObjects/rockethideout1.asm" -INCLUDE "scripts/pokemontower6.asm" +RocketHideout1Blocks: ; 44d49 (11:4d49) + INCBIN "maps/rockethideout1.blk" -INCLUDE "data/mapObjects/pokemontower6.asm" +INCLUDE "data/mapHeaders/rockethideout2.asm" -PokemonTower6Blocks: ; 60c95 (18:4c95) - INCBIN "maps/pokemontower6.blk" +INCLUDE "scripts/rockethideout2.asm" - INCBIN "maps/unusedblocks60cef.blk" +INCLUDE "data/mapObjects/rockethideout2.asm" -INCLUDE "data/mapHeaders/pokemontower7.asm" +RocketHideout2Blocks: ; 45147 (11:5147) + INCBIN "maps/rockethideout2.blk" -INCLUDE "scripts/pokemontower7.asm" +INCLUDE "data/mapHeaders/rockethideout3.asm" -INCLUDE "data/mapObjects/pokemontower7.asm" +INCLUDE "scripts/rockethideout3.asm" -PokemonTower7Blocks: ; 60f20 (18:4f20) - INCBIN "maps/pokemontower7.blk" +INCLUDE "data/mapObjects/rockethideout3.asm" -INCLUDE "data/mapHeaders/celadonmart1.asm" +RocketHideout3Blocks: ; 4537f (11:537f) + INCBIN "maps/rockethideout3.blk" -INCLUDE "scripts/celadonmart1.asm" +INCLUDE "data/mapHeaders/rockethideout4.asm" -INCLUDE "data/mapObjects/celadonmart1.asm" +INCLUDE "scripts/rockethideout4.asm" -CeladonMart1Blocks: ; 60fde (18:4fde) - INCBIN "maps/celadonmart1.blk" +INCLUDE "data/mapObjects/rockethideout4.asm" -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 [$ffdb], 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, LabFossil_610ae - call PrintText - call YesNoChoice - ld a, [wCurrentMenuItem] ; $cc26 - and a - jr nz, .asm_610a7 - ld hl, LabFossil_610b3 - call PrintText - ld a, [W_FOSSILITEM] - ld [$ffdb], a - callba RemoveItemByID - ld hl, LabFossil_610b8 - call PrintText - ld hl, $d7a3 - set 0, [hl] - set 1, [hl] - ret -.asm_610a7 - ld hl, LabFossil_610bd - call PrintText - ret +RocketHideout4Blocks: ; 45650 (11:5650) + INCBIN "maps/rockethideout4.blk" -LabFossil_610ae: ; 610ae (18:50ae) - TX_FAR _Lab4Text_610ae - db "@" +INCLUDE "data/mapHeaders/rockethideoutelevator.asm" -LabFossil_610b3: ; 610b3 (18:50b3) - TX_FAR _Lab4Text_610b3 - db "@" +INCLUDE "scripts/rockethideoutelevator.asm" -LabFossil_610b8: ; 610b8 (18:50b8) - TX_FAR _Lab4Text_610b8 - db "@" +INCLUDE "data/mapObjects/rockethideoutelevator.asm" -LabFossil_610bd: ; 610bd (18:50bd) - TX_FAR _Lab4Text_610bd - db "@" +RocketHideoutElevatorBlocks: ; 457a8 (11:57a8) + INCBIN "maps/rockethideoutelevator.blk" -Func_610c2: ; 610c2 (18:50c2) - ld hl, $cc5b - xor a - ld [$ffdb], 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, [$ffdb] - ld bc, $28 - call AddNTimes - ld de, $cd6d - call PlaceString - ld hl, $ffdb - inc [hl] - pop hl - jr .asm_610c8 +INCLUDE "data/mapHeaders/silphcoelevator.asm" -; 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 +INCLUDE "scripts/silphcoelevator.asm" -INCLUDE "data/mapHeaders/viridianforest.asm" +INCLUDE "data/mapObjects/silphcoelevator.asm" -INCLUDE "scripts/viridianforest.asm" +SilphCoElevatorBlocks: ; 4585b (11:585b) + INCBIN "maps/silphcoelevator.blk" -INCLUDE "data/mapObjects/viridianforest.asm" +INCLUDE "data/mapHeaders/safarizoneeast.asm" -INCLUDE "data/mapHeaders/ssanne1.asm" +INCLUDE "scripts/safarizoneeast.asm" -INCLUDE "scripts/ssanne1.asm" +INCLUDE "data/mapObjects/safarizoneeast.asm" -INCLUDE "data/mapObjects/ssanne1.asm" +SafariZoneEastBlocks: ; 458dc (11:58dc) + INCBIN "maps/safarizoneeast.blk" -SSAnne1Blocks: ; 612df (18:52df) - INCBIN "maps/ssanne1.blk" +INCLUDE "data/mapHeaders/safarizonenorth.asm" -INCLUDE "data/mapHeaders/ssanne2.asm" +INCLUDE "scripts/safarizonenorth.asm" -INCLUDE "scripts/ssanne2.asm" +INCLUDE "data/mapObjects/safarizonenorth.asm" -INCLUDE "data/mapObjects/ssanne2.asm" +SafariZoneNorthBlocks: ; 45a3e (11:5a3e) + INCBIN "maps/safarizonenorth.blk" -SSAnne2Blocks: ; 6156e (18:556e) - INCBIN "maps/ssanne2.blk" +INCLUDE "data/mapHeaders/safarizonecenter.asm" -INCLUDE "data/mapHeaders/ssanne4.asm" +INCLUDE "scripts/safarizonecenter.asm" -INCLUDE "scripts/ssanne4.asm" +INCLUDE "data/mapObjects/safarizonecenter.asm" -INCLUDE "data/mapObjects/ssanne4.asm" +SafariZoneCenterBlocks: ; 45c1e (11:5c1e) + INCBIN "maps/safarizonecenter.blk" -SSAnne4Blocks: ; 61666 (18:5666) - INCBIN "maps/ssanne4.blk" +INCLUDE "data/mapHeaders/safarizoneresthouse1.asm" -INCLUDE "data/mapHeaders/ssanne5.asm" +INCLUDE "scripts/safarizoneresthouse1.asm" -INCLUDE "scripts/ssanne5.asm" +INCLUDE "data/mapObjects/safarizoneresthouse1.asm" -INCLUDE "data/mapObjects/ssanne5.asm" +INCLUDE "data/mapHeaders/safarizoneresthouse2.asm" -SSAnne5Blocks: ; 61761 (18:5761) - INCBIN "maps/ssanne5.blk" +INCLUDE "scripts/safarizoneresthouse2.asm" -INCLUDE "data/mapHeaders/ssanne6.asm" +INCLUDE "data/mapObjects/safarizoneresthouse2.asm" -INCLUDE "scripts/ssanne6.asm" +INCLUDE "data/mapHeaders/safarizoneresthouse3.asm" -INCLUDE "data/mapObjects/ssanne6.asm" +INCLUDE "scripts/safarizoneresthouse3.asm" -SSAnne6Blocks: ; 61851 (18:5851) - INCBIN "maps/ssanne6.blk" +INCLUDE "data/mapObjects/safarizoneresthouse3.asm" -INCLUDE "data/mapHeaders/ssanne7.asm" +INCLUDE "data/mapHeaders/safarizoneresthouse4.asm" -INCLUDE "scripts/ssanne7.asm" +INCLUDE "scripts/safarizoneresthouse4.asm" -INCLUDE "data/mapObjects/ssanne7.asm" +INCLUDE "data/mapObjects/safarizoneresthouse4.asm" -SSAnne7Blocks: ; 6195e (18:595e) - INCBIN "maps/ssanne7.blk" +INCLUDE "data/mapHeaders/unknowndungeon2.asm" -INCLUDE "data/mapHeaders/ssanne8.asm" +INCLUDE "scripts/unknowndungeon2.asm" -INCLUDE "scripts/ssanne8.asm" +INCLUDE "data/mapObjects/unknowndungeon2.asm" -INCLUDE "data/mapObjects/ssanne8.asm" +UnknownDungeon2Blocks: ; 45e5d (11:5e5d) + INCBIN "maps/unknowndungeon2.blk" -SSAnne8Blocks: ; 61adf (18:5adf) - INCBIN "maps/ssanne8.blk" +INCLUDE "data/mapHeaders/unknowndungeon3.asm" -INCLUDE "data/mapHeaders/ssanne9.asm" +INCLUDE "scripts/unknowndungeon3.asm" -INCLUDE "scripts/ssanne9.asm" +INCLUDE "data/mapObjects/unknowndungeon3.asm" -INCLUDE "data/mapObjects/ssanne9.asm" +UnknownDungeon3Blocks: ; 45f58 (11:5f58) + INCBIN "maps/unknowndungeon3.blk" -INCLUDE "data/mapHeaders/ssanne10.asm" +INCLUDE "data/mapHeaders/rocktunnel2.asm" -INCLUDE "scripts/ssanne10.asm" +INCLUDE "scripts/rocktunnel2.asm" -INCLUDE "data/mapObjects/ssanne10.asm" +INCLUDE "data/mapObjects/rocktunnel2.asm" -INCLUDE "data/mapHeaders/undergroundpathns.asm" +RockTunnel2Blocks: ; 461a1 (11:61a1) + INCBIN "maps/rocktunnel2.blk" -INCLUDE "scripts/undergroundpathns.asm" +INCLUDE "data/mapHeaders/seafoamislands2.asm" -INCLUDE "data/mapObjects/undergroundpathns.asm" +INCLUDE "scripts/seafoamislands2.asm" -INCLUDE "data/mapHeaders/undergroundpathwe.asm" +INCLUDE "data/mapObjects/seafoamislands2.asm" -INCLUDE "scripts/undergroundpathwe.asm" +SeafoamIslands2Blocks: ; 463be (11:63be) + INCBIN "maps/seafoamislands2.blk" -INCLUDE "data/mapObjects/undergroundpathwe.asm" +INCLUDE "data/mapHeaders/seafoamislands3.asm" -INCLUDE "data/mapHeaders/diglettscave.asm" +INCLUDE "scripts/seafoamislands3.asm" -INCLUDE "scripts/diglettscave.asm" +INCLUDE "data/mapObjects/seafoamislands3.asm" -INCLUDE "data/mapObjects/diglettscave.asm" +SeafoamIslands3Blocks: ; 464fa (11:64fa) + INCBIN "maps/seafoamislands3.blk" -DiglettsCaveBlocks: ; 61f86 (18:5f86) - INCBIN "maps/diglettscave.blk" +INCLUDE "data/mapHeaders/seafoamislands4.asm" -INCLUDE "data/mapHeaders/silphco11.asm" +INCLUDE "scripts/seafoamislands4.asm" -INCLUDE "scripts/silphco11.asm" +INCLUDE "data/mapObjects/seafoamislands4.asm" -INCLUDE "data/mapObjects/silphco11.asm" +SeafoamIslands4Blocks: ; 46706 (11:6706) + INCBIN "maps/seafoamislands4.blk" -SilphCo11Blocks: ; 623c8 (18:63c8) - INCBIN "maps/silphco11.blk" +INCLUDE "data/mapHeaders/seafoamislands5.asm" -GymStatues: ; 62419 (18:6419) -; if in a gym and have the corresponding badge, a = $D and jp PrintPredefTextID -; if in a gym and don’t have the corresponding badge, a = $C and jp PrintPredefTextID -; 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 PrintPredefTextID - -.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 "@" +INCLUDE "scripts/seafoamislands5.asm" -GymStatueText2: ; 62458 (18:6458) - TX_FAR _GymStatueText2 - db "@" +INCLUDE "data/mapObjects/seafoamislands5.asm" -PrintBenchGuyText: ; 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 PrintPredefTextID - -; 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 +SeafoamIslands5Blocks: ; 468fa (11:68fa) + INCBIN "maps/seafoamislands5.blk" -ViridianCityPokecenterBenchGuyText: ; 624a3 (18:64a3) - TX_FAR _ViridianCityPokecenterGuyText - db "@" +INCLUDE "engine/overworld/hidden_objects.asm" -PewterCityPokecenterBenchGuyText: ; 624a8 (18:64a8) - TX_FAR _PewterCityPokecenterGuyText - db "@" +SECTION "bank12",ROMX,BANK[$12] -CeruleanCityPokecenterBenchGuyText: ; 624ad (18:64ad) - TX_FAR _CeruleanPokecenterGuyText - db "@" +INCLUDE "data/mapHeaders/route7.asm" -LavenderCityPokecenterBenchGuyText: ; 624b2 (18:64b2) - TX_FAR _LavenderPokecenterGuyText - db "@" +INCLUDE "data/mapObjects/route7.asm" -MtMoonPokecenterBenchGuyText: ; 624b7 (18:64b7) - TX_FAR _MtMoonPokecenterBenchGuyText - db "@" +Route7Blocks: ; 48051 (12:4051) + INCBIN "maps/route7.blk" -RockTunnelPokecenterBenchGuyText: ; 624bc (18:64bc) - TX_FAR _RockTunnelPokecenterGuyText - db "@" +CeladonPokecenterBlocks: ; 480ab (12:40ab) +RockTunnelPokecenterBlocks: ; 480ab (12:40ab) +MtMoonPokecenterBlocks: ; 480ab (12:40ab) + INCBIN "maps/mtmoonpokecenter.blk" -UnusedBenchGuyText1: ; 624c1 (18:64c1) - TX_FAR _UnusedBenchGuyText1 - db "@" +Route18GateBlocks: ; 480c7 (12:40c7) +Route15GateBlocks: ; 480c7 (12:40c7) +Route11GateBlocks: ; 480c7 (12:40c7) + INCBIN "maps/route11gate.blk" -UnusedBenchGuyText2: ; 624c6 (18:64c6) - TX_FAR _UnusedBenchGuyText2 - db "@" +Route18GateUpstairsBlocks: ; 480db (12:40db) +Route16GateUpstairsBlocks: ; 480db (12:40db) +Route12GateUpstairsBlocks: ; 480db (12:40db) +Route15GateUpstairsBlocks: ; 480db (12:40db) +Route11GateUpstairsBlocks: ; 480db (12:40db) + INCBIN "maps/route11gateupstairs.blk" -UnusedBenchGuyText3: ; 624cb (18:64cb) - TX_FAR _UnusedBenchGuyText3 - db "@" +INCLUDE "engine/predefs12.asm" -VermilionCityPokecenterBenchGuyText: ; 624d0 (18:64d0) - TX_FAR _VermilionPokecenterGuyText - db "@" +INCLUDE "scripts/route7.asm" -CeladonCityPokecenterBenchGuyText: ; 624d5 (18:64d5) - TX_FAR _CeladonCityPokecenterGuyText - db "@" +INCLUDE "data/mapHeaders/redshouse1f.asm" -FuchsiaCityPokecenterBenchGuyText: ; 624da (18:64da) - TX_FAR _FuchsiaCityPokecenterGuyText - db "@" +INCLUDE "scripts/redshouse1f.asm" -CinnabarIslandPokecenterBenchGuyText: ; 624df (18:64df) - TX_FAR _CinnabarPokecenterGuyText - db "@" +INCLUDE "data/mapObjects/redshouse1f.asm" -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 +RedsHouse1FBlocks: ; 48209 (12:4209) + INCBIN "maps/redshouse1f.blk" -SaffronCityPokecenterBenchGuyText1: ; 624f8 (18:64f8) - TX_FAR _SaffronCityPokecenterGuyText1 - db "@" +INCLUDE "data/mapHeaders/celadonmart3.asm" -SaffronCityPokecenterBenchGuyText2: ; 624fd (18:64fd) - TX_FAR _SaffronCityPokecenterGuyText2 - db "@" +INCLUDE "scripts/celadonmart3.asm" -CeladonCityHotelText: ; 62502 (18:6502) - TX_FAR _CeladonCityHotelText - db "@" +INCLUDE "data/mapObjects/celadonmart3.asm" - ret +CeladonMart3Blocks: ; 48322 (12:4322) + INCBIN "maps/celadonmart3.blk" -TerminatorText_62508: ; 62508 (18:6508) - db "@" +INCLUDE "data/mapHeaders/celadonmart4.asm" -PrintBookcaseText: ; 6509 (18:6509) - call EnableAutoTextBoxDrawing - ld a, $e ; BookcaseText - jp PrintPredefTextID +INCLUDE "scripts/celadonmart4.asm" -BookcaseText: ; 62511 (18:6511) - TX_FAR _BookcaseText - db "@" +INCLUDE "data/mapObjects/celadonmart4.asm" -OpenPokemonCenterPC: ; 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 ; PredefText1f - jp PrintPredefTextID +CeladonMart4Blocks: ; 483a1 (12:43a1) + INCBIN "maps/celadonmart4.blk" -PredefText1f: ; 62529 (18:6529) - db $F9 ; FuncTX_PokemonCenterPC +INCLUDE "data/mapHeaders/celadonmartroof.asm" -SECTION "bank19",ROMX,BANK[$19] +INCLUDE "scripts/celadonmartroof.asm" -Overworld_GFX: ; 64000 (19:4000) - INCBIN "gfx/tilesets/overworld.w128.t2.2bpp" -Overworld_Block: ; 645e0 (19:45e0) - INCBIN "gfx/blocksets/overworld.bst" -RedsHouse1_GFX: -RedsHouse2_GFX: ; 64de0 (19:4de0) - INCBIN "gfx/tilesets/reds_house.w128.t7.2bpp" -RedsHouse1_Block: -RedsHouse2_Block: ; 65270 (19:5270) - INCBIN "gfx/blocksets/reds_house.bst" -House_GFX: ; 653a0 (19:53a0) - INCBIN "gfx/tilesets/house.w128.t2.2bpp" -House_Block: ; 65980 (19:5980) - INCBIN "gfx/blocksets/house.bst" -Mansion_GFX: ; 65bb0 (19:5bb0) - INCBIN "gfx/tilesets/mansion.w128.t2.2bpp" -Mansion_Block: ; 66190 (19:6190) - INCBIN "gfx/blocksets/mansion.bst" -ShipPort_GFX: ; 66610 (19:6610) - INCBIN "gfx/tilesets/ship_port.w128.t2.2bpp" -ShipPort_Block: ; 66bf0 (19:6bf0) - INCBIN "gfx/blocksets/ship_port.bst" -Interior_GFX: ; 66d60 (19:6d60) - INCBIN "gfx/tilesets/interior.w128.t1.2bpp" -Interior_Block: ; 67350 (19:7350) - INCBIN "gfx/blocksets/interior.bst" -Plateau_GFX: ; 676f0 (19:76f0) - INCBIN "gfx/tilesets/plateau.w128.t10.2bpp" -Plateau_Block: ; 67b50 (19:7b50) - INCBIN "gfx/blocksets/plateau.bst" +INCLUDE "data/mapObjects/celadonmartroof.asm" -SECTION "bank1A",ROMX,BANK[$1A] +CeladonMartRoofBlocks: ; 485cc (12:45cc) + INCBIN "maps/celadonmartroof.blk" -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 +INCLUDE "data/mapHeaders/celadonmartelevator.asm" -Version_GFX: ; 6802f (1a:402f) -IF _RED - INCBIN "gfx/red/redgreenversion.h8.1bpp" - ; 80 bytes -ENDC -IF _BLUE - INCBIN "gfx/blue/blueversion.h8.1bpp" - ; 64 bytes -ENDC +INCLUDE "scripts/celadonmartelevator.asm" -Dojo_GFX: -Gym_GFX: ; 6807f (1a:407f) - INCBIN "gfx/tilesets/gym.w128.2bpp" -Dojo_Block: -Gym_Block: ; 6867f (1a:467f) - INCBIN "gfx/blocksets/gym.bst" -Mart_GFX: -Pokecenter_GFX: ; 68dbf (1a:4dbf) - INCBIN "gfx/tilesets/pokecenter.w128.2bpp" -Mart_Block: -Pokecenter_Block: ; 693bf (1a:53bf) - INCBIN "gfx/blocksets/pokecenter.bst" -ForestGate_GFX: -Museum_GFX: -Gate_GFX: ; 6960f (1a:560f) - INCBIN "gfx/tilesets/gate.w128.t1.2bpp" -ForestGate_Block: -Museum_Block: -Gate_Block: ; 69bff (1a:5bff) - INCBIN "gfx/blocksets/gate.bst" -Forest_GFX: ; 6a3ff (1a:63ff) - INCBIN "gfx/tilesets/forest.w128.2bpp" -Forest_Block: ; 6a9ff (1a:69ff) - INCBIN "gfx/blocksets/forest.bst" -Facility_GFX: ; 6b1ff (1a:71ff) - INCBIN "gfx/tilesets/facility.w128.2bpp" -Facility_Block: ; 6b7ff (1a:77ff) - INCBIN "gfx/blocksets/facility.bst" +INCLUDE "data/mapObjects/celadonmartelevator.asm" -SECTION "bank1B",ROMX,BANK[$1B] +CeladonMartElevatorBlocks: ; 48684 (12:4684) + INCBIN "maps/celadonmartelevator.blk" -Cemetery_GFX: ; 6c000 (1b:4000) - INCBIN "gfx/tilesets/cemetery.w128.t4.2bpp" -Cemetery_Block: ; 6c5c0 (1b:45c0) - INCBIN "gfx/blocksets/cemetery.bst" -Cavern_GFX: ; 6cca0 (1b:4ca0) - INCBIN "gfx/tilesets/cavern.w128.t14.2bpp" -Cavern_Block: ; 6d0c0 (1b:50c0) - INCBIN "gfx/blocksets/cavern.bst" -Lobby_GFX: ; 6d8c0 (1b:58c0) - INCBIN "gfx/tilesets/lobby.w128.t2.2bpp" -Lobby_Block: ; 6dea0 (1b:5ea0) - INCBIN "gfx/blocksets/lobby.bst" -Ship_GFX: ; 6e390 (1b:6390) - INCBIN "gfx/tilesets/ship.w128.t6.2bpp" -Ship_Block: ; 6e930 (1b:6930) - INCBIN "gfx/blocksets/ship.bst" -Lab_GFX: ; 6ed10 (1b:6d10) - INCBIN "gfx/tilesets/lab.w128.t4.2bpp" -Lab_Block: ; 6f2d0 (1b:72d0) - INCBIN "gfx/blocksets/lab.bst" -Club_GFX: ; 6f670 (1b:7670) - INCBIN "gfx/tilesets/club.w128.t5.2bpp" -Club_Block: ; 6fb20 (1b:7b20) - INCBIN "gfx/blocksets/club.bst" -Underground_GFX: ; 6fd60 (1b:7d60) - INCBIN "gfx/tilesets/underground.w128.t7.2bpp" -Underground_Block: ; 6fef0 (1b:7ef0) - INCBIN "gfx/blocksets/underground.bst" +INCLUDE "data/mapHeaders/celadonmansion1.asm" -SECTION "bank1C",ROMX,BANK[$1C] +INCLUDE "scripts/celadonmansion1.asm" -LoadShootingStarGraphics: ; 70000 (1c:4000) - ld a, $f9 - ld [rOBP0], a ; $ff48 - ld a, $a4 - ld [rOBP1], a ; $ff49 - 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 +INCLUDE "data/mapObjects/celadonmansion1.asm" -AnimateShootingStar: ; 70044 (1c:4044) - call LoadShootingStarGraphics - ld a, (SFX_1f_67 - SFX_Headers_1f) / 3 - 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 +CeladonMansion1Blocks: ; 48716 (12:4716) + INCBIN "maps/celadonmansion1.blk" + +INCLUDE "data/mapHeaders/celadonmansion2.asm" + +INCLUDE "scripts/celadonmansion2.asm" + +INCLUDE "data/mapObjects/celadonmansion2.asm" + +CeladonMansion2Blocks: ; 4876c (12:476c) + INCBIN "maps/celadonmansion2.blk" + +INCLUDE "data/mapHeaders/celadonmansion3.asm" -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 +INCLUDE "scripts/celadonmansion3.asm" -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] ; $ff49 - xor $a0 - ld [rOBP1], a ; $ff49 - 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" - -AnimateHallOfFame: ; 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 [$ffd7], a - ld [W_SPRITEFLIPPED], a - ld [$d358], a - ld [$cd40], a - inc a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - ld hl, $d5a2 - ld a, [hl] - inc a - jr z, .asm_701eb - inc [hl] -.asm_701eb - ld a, $90 - ld [$ffb0], 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 - 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 [$ffb0], a - ld hl, rLCDC ; $ff40 - res 3, [hl] - ret +INCLUDE "data/mapObjects/celadonmansion3.asm" -HallOfFameText: ; 7026b (1c:426b) - db "HALL OF FAME@" +CeladonMansion3Blocks: ; 48847 (12:4847) + INCBIN "maps/celadonmansion3.blk" -Func_70278: ; 70278 (1c:4278) - call ClearScreen - ld a, $d0 - ld [$ffaf], a - ld a, $c0 - ld [$ffae], 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 ; $ff47 - 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 [$ffaf], a - ld c, a - call Func_7036d - ld d, $0 - ld e, $fc -.asm_702d5 - call DelayFrame - ld a, [$ffae] - add e - ld [$ffae], a - cp d - jr nz, .asm_702d5 - ret +INCLUDE "data/mapHeaders/celadonmansion4.asm" -Func_702e1: ; 702e1 (1c:42e1) - ld a, [$cd3e] - ld hl, W_PARTYMON1NAME ; $d2b5 - call GetPartyMonName - call Func_702f0 - jp Func_70404 +INCLUDE "scripts/celadonmansion4.asm" -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 - 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, RedPicFront ; $6ede - ld a, BANK(RedPicFront) - 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 +INCLUDE "data/mapObjects/celadonmansion4.asm" -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)) +CeladonMansion4Blocks: ; 48894 (12:4894) + INCBIN "maps/celadonmansion4.blk" -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 - 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 - call PlaceString - FuncCoord 4, 10 ; $c46c - ld hl, Coord - ld de, wPlayerMoney ; $d347 - ld c, $a3 - call PrintBCDNumber - ld hl, DexSeenOwnedText - call Func_703e2 - ld hl, DexRatingText - call Func_703e2 - ld hl, $cc5d +INCLUDE "data/mapHeaders/celadonpokecenter.asm" -Func_703e2: ; 703e2 (1c:43e2) - call PrintText - ld c, $78 - jp DelayFrames +INCLUDE "scripts/celadonpokecenter.asm" -HoFPlayTimeText: ; 703ea (1c:43ea) - db "PLAY TIME@" +INCLUDE "data/mapObjects/celadonpokecenter.asm" -HoFMoneyText: ; 703f4 (1c:43f4) - db "MONEY@" +INCLUDE "data/mapHeaders/celadongym.asm" -DexSeenOwnedText: ; 703fa (1c:43fa) - TX_FAR _DexSeenOwnedText - db "@" +INCLUDE "scripts/celadongym.asm" -DexRatingText: ; 703ff (1c:43ff) - TX_FAR _DexRatingText - db "@" +INCLUDE "data/mapObjects/celadongym.asm" -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 +CeladonGymBlocks: ; 48b84 (12:4b84) + INCBIN "maps/celadongym.blk" -Func_70423: ; 70423 (1c:4423) - ld a, $a - ld [$cfc8], a - ld [$cfc9], a - ld a, $ff - ld [wMusicHeaderPointer], a - jp GBFadeOut2 +INCLUDE "data/mapHeaders/celadongamecorner.asm" -AnimateHealingMachine: ; 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] ; $ff49 - push af - ld a, $e0 - ld [rOBP1], a ; $ff49 - 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, (SFX_02_4a - SFX_Headers_02) / 3 - 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 ; $ff49 - pop hl - pop af - ld [hl], a - jp UpdateSprites +INCLUDE "scripts/celadongamecorner.asm" -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] ; $ff49 - xor d - ld [rOBP1], a ; $ff49 - ld c, $a - call DelayFrames - dec b - jr nz, .asm_704f5 - ret +INCLUDE "data/mapObjects/celadongamecorner.asm" -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 +CeladonGameCornerBlocks: ; 49003 (12:5003) + INCBIN "maps/celadongamecorner.blk" -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, (SFX_02_4c - SFX_Headers_02) / 3 - call PlaySound - ld hl, $d732 - bit 4, [hl] - res 4, [hl] - pop hl - jr nz, .asm_7055e - call Func_705aa - ld a, (SFX_02_4f - SFX_Headers_02) / 3 - 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, (SFX_02_50 - SFX_Headers_02) / 3 - 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 +INCLUDE "data/mapHeaders/celadonmart5.asm" + +INCLUDE "scripts/celadonmart5.asm" -_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, (SFX_02_4b - SFX_Headers_02) / 3 - 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, (SFX_02_50 - SFX_Headers_02) / 3 - 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 +INCLUDE "data/mapObjects/celadonmart5.asm" -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 +CeladonMart5Blocks: ; 490bc (12:50bc) + INCBIN "maps/celadonmart5.blk" -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 +INCLUDE "data/mapHeaders/celadonprizeroom.asm" -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 +INCLUDE "scripts/celadonprizeroom.asm" -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 +INCLUDE "data/mapObjects/celadonprizeroom.asm" -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 +CeladonPrizeRoomBlocks: ; 49131 (12:5131) + INCBIN "maps/celadonprizeroom.blk" -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 +INCLUDE "data/mapHeaders/celadondiner.asm" -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 +INCLUDE "scripts/celadondiner.asm" -Func_70772: ; 70772 (1c:4772) - ld a, [$cd4f] - ld [$c104], a - ld a, [$cd50] - ld [$c102], a - ret +INCLUDE "data/mapObjects/celadondiner.asm" -Func_7077f: ; 7077f (1c:477f) - ld a, [$cf1b] - xor $1 - inc a - inc a - ret +CeladonDinerBlocks: ; 491ee (12:51ee) + INCBIN "maps/celadondiner.blk" -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 +INCLUDE "data/mapHeaders/celadonhouse.asm" -; format: db tileset id, tile id, value to be put in $cd5b -DataTable_707a9: ; 707a9 (1c:47a9) - db FACILITY, $20, 1 ; warp pad - db FACILITY, $11, 2 ; hole - db CAVERN, $22, 2 ; hole - db INTERIOR, $55, 1 ; warp pad - db $FF +INCLUDE "scripts/celadonhouse.asm" -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, NoNibbleText - jr z, .asm_70836 - cp $2 - ld hl, NothingHereText - 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 PrintEmotionBubble (17c47 (5:7c47)) - ld a, [$c102] - cp $4 - jr nz, .asm_70833 - ld a, $44 - ld [$c39c], a -.asm_70833 - ld hl, ItsABiteText -.asm_70836 - call PrintText - ld hl, $d736 - res 6, [hl] - call LoadFontTilePatterns - ret +INCLUDE "data/mapObjects/celadonhouse.asm" -Func_70842: ; 70842 (1c:4842) - ld a, [hl] - xor $1 - ld [hl], a - ret +CeladonHouseBlocks: ; 4924d (12:524d) + INCBIN "maps/celadonhouse.blk" -NoNibbleText: ; 70847 (1c:4847) - TX_FAR _NoNibbleText - db "@" +INCLUDE "data/mapHeaders/celadonhotel.asm" -NothingHereText: ; 7084c (1c:484c) - TX_FAR _NothingHereText - db "@" +INCLUDE "scripts/celadonhotel.asm" -ItsABiteText: ; 70851 (1c:4851) - TX_FAR _ItsABiteText - db "@" +INCLUDE "data/mapObjects/celadonhotel.asm" -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 +CeladonHotelBlocks: ; 492a7 (12:52a7) + INCBIN "maps/celadonhotel.blk" -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 +INCLUDE "data/mapHeaders/mtmoonpokecenter.asm" +INCLUDE "scripts/mtmoonpokecenter.asm" -Func_708ca: ; 708ca (1c:48ca) - ld a, $e4 - ld [rOBP1], a ; $ff49 - call Func_7092a - FuncCoord 12, 0 ; $c3ac - ld hl, Coord - ld bc, $707 - call ClearScreenArea - call Delay3 - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - ld a, $91 - ld [$cee9], a - ld a, $1 - ld [H_WHOSETURN], a ; $fff3 - callab Func_79793 - ld d, $80 - call Func_704f3 -.asm_708f6 - ld c, $a - call DelayFrames - ld a, [rOBP1] ; $ff49 - sla a - sla a - ld [rOBP1], a ; $ff49 - jr nz, .asm_708f6 - call CleanLCD_OAM - call Func_7092a - ld b, $e4 -.asm_7090d - ld c, $a - call DelayFrames - ld a, [rOBP1] ; $ff49 - srl b - rra - srl b - rra - ld [rOBP1], a ; $ff49 - ld a, b - and a - jr nz, .asm_7090d - ld a, $1 - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - call Delay3 - jp CleanLCD_OAM +INCLUDE "data/mapObjects/mtmoonpokecenter.asm" + +INCLUDE "data/mapHeaders/rocktunnelpokecenter.asm" + +INCLUDE "scripts/rocktunnelpokecenter.asm" + +INCLUDE "data/mapObjects/rocktunnelpokecenter.asm" + +INCLUDE "data/mapHeaders/route11gate.asm" + +INCLUDE "scripts/route11gate.asm" + +INCLUDE "data/mapObjects/route11gate.asm" + +INCLUDE "data/mapHeaders/route11gateupstairs.asm" + +INCLUDE "scripts/route11gateupstairs.asm" + +INCLUDE "data/mapObjects/route11gateupstairs.asm" + +INCLUDE "data/mapHeaders/route12gate.asm" + +INCLUDE "scripts/route12gate.asm" + +INCLUDE "data/mapObjects/route12gate.asm" + +Route12GateBlocks: ; 49540 (12:5540) + INCBIN "maps/route12gate.blk" + +INCLUDE "data/mapHeaders/route12gateupstairs.asm" -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 +INCLUDE "scripts/route12gateupstairs.asm" -Func_7096d: ; 7096d (1c:496d) - ld a, $1 - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - call Delay3 - xor a - ld [$ffb0], a - dec a - ld [$cfcb], a - call DelayFrame - ld hl, $c102 - ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c - 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 LoadBattleTransitionTile - 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] +INCLUDE "data/mapObjects/route12gateupstairs.asm" -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 +INCLUDE "data/mapHeaders/route15gate.asm" -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 +INCLUDE "scripts/route15gate.asm" -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 +INCLUDE "data/mapObjects/route15gate.asm" -; 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 +INCLUDE "data/mapHeaders/route15gateupstairs.asm" -; 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 +INCLUDE "scripts/route15gateupstairs.asm" - ; all SS_ANNE maps, VICTORY_ROAD_1, LANCES_ROOM, and HALL_OF_FAME - db SS_ANNE_1 - db HALL_OF_FAME +INCLUDE "data/mapObjects/route15gateupstairs.asm" - ; all POKEMONTOWER maps and Lavender Town buildings - db LAVENDER_POKECENTER - db LAVENDER_HOUSE_2 +INCLUDE "data/mapHeaders/route16gate.asm" - ; 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 +INCLUDE "scripts/route16gate.asm" -LoadBattleTransitionTile: ; 70a4d (1c:4a4d) - ld hl, $8ff0 - ld de, BattleTransitionTile ; $4a59 - ld bc, (BANK(BattleTransitionTile) << 8) + $01 - jp CopyVideoData +INCLUDE "data/mapObjects/route16gate.asm" -BattleTransitionTile: ; 70a59 (1c:4a59) - INCBIN "gfx/battle_transition.2bpp" +Route16GateBlocks: ; 497e3 (12:57e3) + INCBIN "maps/route16gate.blk" -Func_70a69: ; 70a69 (1c:4a69) - ld a, $ff - ld [rBGP], a ; $ff47 - ld [rOBP0], a ; $ff48 - ld [rOBP1], a ; $ff49 - ret +INCLUDE "data/mapHeaders/route16gateupstairs.asm" -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 +INCLUDE "scripts/route16gateupstairs.asm" -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 +INCLUDE "data/mapObjects/route16gateupstairs.asm" -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 +INCLUDE "data/mapHeaders/route18gate.asm" -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 +INCLUDE "scripts/route18gate.asm" -Func_70b5d: ; 70b5d (1c:4b5d) - ld hl, DataTable_70b72 ; $4b72 -.asm_70b60 - ld a, [hli] - cp $1 - jr z, .asm_70b6e - ld [rBGP], a ; $ff47 - ld c, $2 - call DelayFrames - jr .asm_70b60 -.asm_70b6e - dec b - jr nz, Func_70b5d - ret +INCLUDE "data/mapObjects/route18gate.asm" -DataTable_70b72: ; 70b72 (1c:4b72) - db $F9,$FE,$FF,$FE,$F9,$E4,$90,$40,$00,$40,$90,$E4 - db $01 ; terminator +INCLUDE "data/mapHeaders/route18gateupstairs.asm" -Func_70b7f: ; 70b7f (1c:4b7f) - ld c, $9 -.asm_70b81 - push bc - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - 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 ; $ffba - ld c, $6 - call DelayFrames - pop bc - dec c - jr nz, .asm_70b81 - call Func_70a69 - ld c, $a - jp DelayFrames +INCLUDE "scripts/route18gateupstairs.asm" -Func_70bca: ; 70bca (1c:4bca) - ld c, $9 - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba -.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 +INCLUDE "data/mapObjects/route18gateupstairs.asm" -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 +INCLUDE "data/mapHeaders/mtmoon1.asm" -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 +INCLUDE "scripts/mtmoon1.asm" -Func_70c7e: ; 70c7e (1c:4c7e) - ld c, $12 - ld hl, wTileMap - FuncCoord 1, 17 ; $c4f5 - ld de, Coord - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba -.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 +INCLUDE "data/mapObjects/mtmoon1.asm" -Func_70caa: ; 70caa (1c:4caa) - ld c, $a -.asm_70cac - ld [hl], $ff - inc hl - inc hl - dec c - jr nz, .asm_70cac - ret +MtMoon1Blocks: ; 49b97 (12:5b97) + INCBIN "maps/mtmoon1.blk" -Func_70cb4: ; 70cb4 (1c:4cb4) - ld c, $14 - ld hl, wTileMap - FuncCoord 19, 1 ; $c3c7 - ld de, Coord - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba -.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 +INCLUDE "data/mapHeaders/mtmoon3.asm" -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 +INCLUDE "scripts/mtmoon3.asm" -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 +INCLUDE "data/mapObjects/mtmoon3.asm" -Func_70cfd: ; 70cfd (1c:4cfd) - ld b, $3 - call Func_70b5d - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - ret +MtMoon3Blocks: ; 4a041 (12:6041) + INCBIN "maps/mtmoon3.blk" -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 +INCLUDE "data/mapHeaders/safarizonewest.asm" -Func_70d19: ; 70d19 (1c:4d19) - ld a, $1 - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - call Delay3 - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - ret +INCLUDE "scripts/safarizonewest.asm" -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 +INCLUDE "data/mapObjects/safarizonewest.asm" -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 +SafariZoneWestBlocks: ; 4a248 (12:6248) + INCBIN "maps/safarizonewest.blk" + +INCLUDE "data/mapHeaders/safarizonesecrethouse.asm" + +INCLUDE "scripts/safarizonesecrethouse.asm" + +INCLUDE "data/mapObjects/safarizonesecrethouse.asm" + +SafariZoneSecretHouseBlocks: ; 4a37f (12:637f) + INCBIN "maps/safarizonesecrethouse.blk" + +SECTION "bank13",ROMX,BANK[$13] + +TrainerPics: + +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" -Unknown_70dfe: ; 70dfe (1c:4dfe) - db $02,$03,$05,$04,$09,$FF +INCLUDE "data/mapHeaders/battlecenterm.asm" -Unknown_70e04: ; 70e04 (1c:4e04) - db $01,$01,$02,$02,$04,$02,$04,$02,$03,$FF +INCLUDE "scripts/battlecenterm.asm" -Unknown_70e0e: ; 70e0e (1c:4e0e) - db $02,$01,$03,$01,$04,$01,$04,$01,$04,$01,$03,$01,$02,$01,$01,$01,$01,$FF +INCLUDE "data/mapObjects/battlecenterm.asm" -Unknown_70e20: ; 70e20 (1c:4e20) - db $04,$01,$04,$00,$03,$01,$03,$00,$02,$01,$02,$00,$01,$FF +BattleCenterMBlocks: ; 4fd5d (13:7d5d) + INCBIN "maps/battlecenterm.blk" -Unknown_70e2e: ; 70e2e (1c:4e2e) - db $04,$00,$03,$00,$03,$00,$02,$00,$02,$00,$01,$00,$01,$00,$01,$FF +INCLUDE "data/mapHeaders/tradecenterm.asm" -DisplayTownMap: ; 70e3e (1c:4e3e) - call LoadTownMap - ld hl, $cfcb - ld a, [hl] - push af - ld [hl], $ff - push hl - ld a, $1 - ld [$ffb7], 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 +INCLUDE "scripts/tradecenterm.asm" -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] +INCLUDE "data/mapObjects/tradecenterm.asm" -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, [$ffb5] - ld b, a - and $c3 - jr z, .asm_70ec8 - ld a, (SFX_02_3c - SFX_Headers_02) / 3 - call PlaySound - bit 6, b - jr nz, .asm_70ef2 - bit 7, b - jr nz, .asm_70f01 - xor a - ld [$d09b], a - ld [$ffb7], 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 +TradeCenterMBlocks: ; 4fd91 (13:7d91) + INCBIN "maps/tradecenterm.blk" -INCLUDE "data/town_map_order.asm" +INCLUDE "engine/give_pokemon.asm" -TownMapCursor: ; 70f40 (1c:4f40) - INCBIN "gfx/town_map_cursor.1bpp" +INCLUDE "engine/predefs.asm" -LoadTownMap_Nest: ; 70f60 (1c:4f60) - call LoadTownMap - 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 - call PlaceString - call WaitForTextScrollButtonPress - call Func_711ab - pop hl - pop af - ld [hl], a - ret +SECTION "bank14",ROMX,BANK[$14] -MonsNestText: ; 70f89 (1c:4f89) - db "'s NEST@" +INCLUDE "data/mapHeaders/route22.asm" -LoadTownMap_Fly: ; 70f90 (1c:4f90) - call CleanLCD_OAM - call LoadTownMap - 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 - call PlaceString - ld a, [W_CURMAP] ; $d35e - ld b, $0 - call Func_711c4 - ld hl, $cd3e - FuncCoord 18, 0 ; $c3b2 - ld de, Coord +INCLUDE "data/mapObjects/route22.asm" -.townMapFlyLoop - 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, [$ffb5] - ld b, a - pop hl - and $c3 - jr z, .asm_71004 - bit 0, b - jr nz, .asm_71026 - ld a, (SFX_02_3c - SFX_Headers_02) / 3 - call PlaySound - bit 6, b - jr nz, .asm_71042 - bit 7, b - jr nz, .asm_71058 - jr .asm_71037 -.asm_71026 - ld a, (SFX_02_3e - SFX_Headers_02) / 3 - 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 .townMapFlyLoop -.asm_71052 - ld hl, $cd3e - jp .townMapFlyLoop -.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 .townMapFlyLoop -.asm_71068 - ld hl, $cd49 - jr .asm_71058 +Route22Blocks: ; 5003d (14:403d) + INCBIN "maps/route22.blk" -ToText: ; 7106d (1c:506d) - db "To@" +INCLUDE "data/mapHeaders/route20.asm" -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 +INCLUDE "data/mapObjects/route20.asm" -TownMapUpArrow: ; 71093 (1c:5093) - INCBIN "gfx/up_arrow.1bpp" +Route20Blocks: ; 5017d (14:417d) + INCBIN "maps/route20.blk" -LoadTownMap: ; 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 +INCLUDE "data/mapHeaders/route23.asm" + +INCLUDE "data/mapObjects/route23.asm" -CompressedMap: ; 71100 (1c:5100) -; you can decompress this file with the redrle program in the extras/ dir - INCBIN "gfx/town_map.rle" +Route23Blocks: ; 503b2 (14:43b2) + INCBIN "maps/route23.blk" -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 +INCLUDE "data/mapHeaders/route24.asm" -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 +INCLUDE "data/mapObjects/route24.asm" -Func_711ef: ; 711ef (1c:51ef) - callba Func_e9cb - 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 - 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 +Route24Blocks: ; 506e7 (14:46e7) + INCBIN "maps/route24.blk" + +INCLUDE "data/mapHeaders/route25.asm" + +INCLUDE "data/mapObjects/route25.asm" + +Route25Blocks: ; 50810 (14:4810) + INCBIN "maps/route25.blk" + +INCLUDE "data/mapHeaders/indigoplateau.asm" + +INCLUDE "scripts/indigoplateau.asm" + +INCLUDE "data/mapObjects/indigoplateau.asm" -AreaUnknownText: ; 7124a (1c:524a) - db " AREA UNKNOWN@" +IndigoPlateauBlocks: ; 5094a (14:494a) + INCBIN "maps/indigoplateau.blk" -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 +INCLUDE "data/mapHeaders/saffroncity.asm" -Func_7126d: ; 7126d (1c:526d) - ld a, [$cd5b] - and a - ld hl, $c390 - jr z, Func_71279 - ld hl, $c380 +INCLUDE "data/mapObjects/saffroncity.asm" -Func_71279: ; 71279 (1c:5279) - push hl - ld hl, $fcfc - add hl, bc - ld b, h - ld c, l - pop hl +SaffronCityBlocks: ; 50a98 (14:4a98) + INCBIN "maps/saffroncity.blk" -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 +INCLUDE "scripts/saffroncity.asm" -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 +INCLUDE "scripts/route20.asm" -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 +INCLUDE "scripts/route22.asm" -INCLUDE "data/town_map_entries.asm" +INCLUDE "scripts/route23.asm" -INCLUDE "text/map_names.asm" +INCLUDE "scripts/route24.asm" -MonNestIcon: ; 716be (1c:56be) - INCBIN "gfx/mon_nest_icon.1bpp" +INCLUDE "scripts/route25.asm" -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 +INCLUDE "data/mapHeaders/victoryroad2.asm" -AnimatePartyMon_ForceSpeed1: ; 716f7 (1c:56f7) - xor a - ld [wCurrentMenuItem], a ; $cc26 - ld b, a - inc a - jr GetAnimationSpeed - -; $cf1f contains the party mon's health bar colors -; 0: green -; 1: yellow -; 2: red -AnimatePartyMon: ; 716ff (1c:56ff) - ld hl, $cf1f - ld a, [wCurrentMenuItem] - ld c, a - ld b, $0 - add hl, bc - ld a, [hl] +INCLUDE "scripts/victoryroad2.asm" -GetAnimationSpeed: ; 7170a (1c:570a) - ld c, a - ld hl, PartyMonSpeeds - 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, .resetSprites - cp c - jr z, .animateSprite -.incTimer - inc a - cp b - jr nz, .resetTimer - xor a -.resetTimer - ld [W_SUBANIMTRANSFORM], a ; $d08b - jp DelayFrame -.resetSprites - push bc - ld hl, $cc5b - ld de, wOAMBuffer - ld bc, $60 - call CopyData - pop bc - xor a - jr .incTimer -.animateSprite - push bc - ld hl, $c302 ; OAM tile id - ld bc, $10 - ld a, [wCurrentMenuItem] - call AddNTimes - ld c, $40 ; amount to increase the tile id by - ld a, [hl] - cp $4 ; tile ID for SPRITE_BALL_M - jr z, .editCoords - cp $8 ; tile ID for SPRITE_HELIX - jr nz, .editTileIDS -; SPRITE_BALL_M and SPRITE_HELIX only shake up and down -.editCoords - dec hl - dec hl ; dec hl to the OAM y coord - ld c, $1 ; amount to increase the y coord by -; otherwise, load a second sprite frame -.editTileIDS - ld b, $4 - ld de, $4 -.loop - ld a, [hl] - add c - ld [hl], a - add hl, de - dec b - jr nz, .loop - pop bc - ld a, c - jr .incTimer +INCLUDE "data/mapObjects/victoryroad2.asm" -PartyMonSpeeds: ; 71769 (1c:5769) - db $05,$10,$20 +VictoryRoad2Blocks: ; 519af (14:59af) + INCBIN "maps/victoryroad2.blk" -Func_7176c: ; 7176c (1c:576c) - ld hl, MonOverworldSpritePointers ; $57c0 - ld a, $1c +INCLUDE "data/mapHeaders/mtmoon2.asm" -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 +INCLUDE "scripts/mtmoon2.asm" -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] ; $ff8c - ld hl, W_PARTYMON1 ; $d164 - ld e, a - ld d, $0 - add hl, de - ld a, [hl] - call GetPartyMonSpriteID - ld [$cd5b], a - call Func_718c3 - pop bc - pop de - pop hl - ret +INCLUDE "data/mapObjects/mtmoon2.asm" -Func_71882: ; 71882 (1c:5882) - xor a - ld [H_DOWNARROWBLINKCNT2], a ; $ff8c - ld a, [$cd5d] - call GetPartyMonSpriteID - ld [$cd5b], a - jr Func_718c3 +MtMoon2Blocks: ; 51a91 (14:5a91) + INCBIN "maps/mtmoon2.blk" -Func_71890: ; 71890 (1c:5890) - ld a, [$cf91] - call GetPartyMonSpriteID - 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 +INCLUDE "data/mapHeaders/silphco7.asm" + +INCLUDE "scripts/silphco7.asm" + +INCLUDE "data/mapObjects/silphco7.asm" + +SilphCo7Blocks: ; 51f57 (14:5f57) + INCBIN "maps/silphco7.blk" + +INCLUDE "data/mapHeaders/mansion2.asm" + +INCLUDE "scripts/mansion2.asm" + +INCLUDE "data/mapObjects/mansion2.asm" + +Mansion2Blocks: ; 52110 (14:6110) + INCBIN "maps/mansion2.blk" + +INCLUDE "data/mapHeaders/mansion3.asm" + +INCLUDE "scripts/mansion3.asm" + +INCLUDE "data/mapObjects/mansion3.asm" + +Mansion3Blocks: ; 52326 (14:6326) + INCBIN "maps/mansion3.blk" -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 +INCLUDE "data/mapHeaders/mansion4.asm" -Func_718c3: ; 718c3 (1c:58c3) - push af - ld c, $10 - ld h, $c3 - ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c - 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 +INCLUDE "scripts/mansion4.asm" -GetPartyMonSpriteID: ; 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 +INCLUDE "data/mapObjects/mansion4.asm" -INCLUDE "data/mon_party_sprites.asm" +Mansion4Blocks: ; 524dd (14:64dd) + INCBIN "maps/mansion4.blk" -MonOverworldSprites: ; 71959 (1c:5959) - INCBIN "gfx/mon_ow_sprites.2bpp" +INCLUDE "engine/battle/14.asm" -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, TradedForText - 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 +INCLUDE "engine/overworld/card_key.asm" -Func_71b6a: ; 71b6a (1c:5b6a) - push de - ld [$d11e],a - call GetMonName - ld hl,$cd6d - pop de - ld bc,$b - jp CopyData +INCLUDE "engine/menu/prize_menu.asm" -INCLUDE "data/trades.asm" +INCLUDE "engine/hidden_object_functions14.asm" -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, ConnectCableText - 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 - callab EvolveTradeMon - call ClearScreen - call Func_71ca2 - callba Func_eedc - and a - ld a,$3 - jr .asm_ee803 ; 0x71c9b $1 -.asm_c4bc2 ; 0x71c9d - scf -.asm_ee803 ; 0x71c9e - ld [$cd12],a - ret +SECTION "bank15",ROMX,BANK[$15] -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 +INCLUDE "data/mapHeaders/route2.asm" -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 +INCLUDE "data/mapObjects/route2.asm" -Func_71d11: ; 71d11 (1c:5d11) - push hl - push bc - call CopyData - pop bc - pop hl - ret +Route2Blocks: ; 5407e (15:407e) + INCBIN "maps/route2.blk" -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 +INCLUDE "data/mapHeaders/route3.asm" -Func_71d4f: ; 71d4f (1c:5d4f) - ld a, [W_NUMINPARTY] ; $d163 - dec a - call AddNTimes - ld e, l - ld d, h - ret +INCLUDE "data/mapObjects/route3.asm" -String_71d59: ; 71d59 (1c:5d59) - ; "TRAINER@@@@@@@@@@" - db $5d, "@@@@@@@@@@" - -InGameTradeTextPointers: ; 71d64 (1c:5d64) - dw TradeTextPointers1 - dw TradeTextPointers2 - dw TradeTextPointers3 - -TradeTextPointers1: ; 71d6a (1c:5d6a) - dw WannaTrade1Text - dw NoTrade1Text - dw WrongMon1Text - dw Thanks1Text - dw AfterTrade1Text - -TradeTextPointers2: ; 71d74 (1c:5d74) - dw WannaTrade2Text - dw NoTrade2Text - dw WrongMon2Text - dw Thanks2Text - dw AfterTrade2Text - -TradeTextPointers3: ; 71d7e (1c:5d7e) - dw WannaTrade3Text - dw NoTrade3Text - dw WrongMon3Text - dw Thanks3Text - dw AfterTrade3Text - -ConnectCableText: ; 71d88 (1c:5d88) - TX_FAR _ConnectCableText - db "@" +Route3Blocks: ; 54255 (15:4255) + INCBIN "maps/route3.blk" -TradedForText: ; 71d8d (1c:5d8d) - TX_FAR _TradedForText - db $11, $a, "@" +INCLUDE "data/mapHeaders/route4.asm" -WannaTrade1Text: ; 71d94 (1c:5d94) - TX_FAR _WannaTrade1Text - db "@" +INCLUDE "data/mapObjects/route4.asm" -NoTrade1Text: ; 71d99 (1c:5d99) - TX_FAR _NoTrade1Text - db "@" +Route4Blocks: ; 543ec (15:43ec) + INCBIN "maps/route4.blk" -WrongMon1Text: ; 71d9e (1c:5d9e) - TX_FAR _WrongMon1Text - db "@" +INCLUDE "data/mapHeaders/route5.asm" -Thanks1Text: ; 71da3 (1c:5da3) - TX_FAR _Thanks1Text - db "@" +INCLUDE "data/mapObjects/route5.asm" -AfterTrade1Text: ; 71da8 (1c:5da8) - TX_FAR _AfterTrade1Text - db "@" +Route5Blocks: ; 545d2 (15:45d2) + INCBIN "maps/route5.blk" -WannaTrade2Text: ; 71dad (1c:5dad) - TX_FAR _WannaTrade2Text - db "@" +INCLUDE "data/mapHeaders/route9.asm" -NoTrade2Text: ; 71db2 (1c:5db2) - TX_FAR _NoTrade2Text - db "@" +INCLUDE "data/mapObjects/route9.asm" -WrongMon2Text: ; 71db7 (1c:5db7) - TX_FAR _WrongMon2Text - db "@" +Route9Blocks: ; 546fe (15:46fe) + INCBIN "maps/route9.blk" -Thanks2Text: ; 71dbc (1c:5dbc) - TX_FAR _Thanks2Text - db "@" +INCLUDE "data/mapHeaders/route13.asm" -AfterTrade2Text: ; 71dc1 (1c:5dc1) - TX_FAR _AfterTrade2Text - db "@" +INCLUDE "data/mapObjects/route13.asm" -WannaTrade3Text: ; 71dc6 (1c:5dc6) - TX_FAR _WannaTrade3Text - db "@" +Route13Blocks: ; 5488b (15:488b) + INCBIN "maps/route13.blk" -NoTrade3Text: ; 71dcb (1c:5dcb) - TX_FAR _NoTrade3Text - db "@" +INCLUDE "data/mapHeaders/route14.asm" -WrongMon3Text: ; 71dd0 (1c:5dd0) - TX_FAR _WrongMon3Text - db "@" +INCLUDE "data/mapObjects/route14.asm" -Thanks3Text: ; 71dd5 (1c:5dd5) - TX_FAR _Thanks3Text - db "@" +Route14Blocks: ; 54a12 (15:4a12) + INCBIN "maps/route14.blk" -AfterTrade3Text: ; 71dda (1c:5dda) - TX_FAR _AfterTrade3Text - db "@" +INCLUDE "data/mapHeaders/route17.asm" -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] +INCLUDE "data/mapObjects/route17.asm" -SendPalPacket_Black: ; 71dff (1c:5dff) - ld hl, PalPacket_Black - ld de, BlkPacket_Battle - ret +Route17Blocks: ; 54ba8 (15:4ba8) + INCBIN "maps/route17.blk" -; uses PalPacket_Empty to build a packet based on mon IDs and health color -BuildBattlePalPacket: ; 71e06 (1c:5e06) - ld hl, PalPacket_Empty - 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 PAL_GREENBAR - ld [hli], a - inc hl - ld a, [$cf1e] - add PAL_GREENBAR - 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_Battle - ld a, $1 - ld [$cf1c], a - ret +INCLUDE "data/mapHeaders/route19.asm" -SendPalPacket_TownMap: ; 71e48 (1c:5e48) - ld hl, PalPacket_TownMap - ld de, BlkPacket_WholeScreen - ret +INCLUDE "data/mapObjects/route19.asm" -; uses PalPacket_Empty to build a packet based the mon ID -BuildStatusScreenPalPacket: ; 71e4f (1c:5e4f) - ld hl, PalPacket_Empty - ld de, $cf2d - ld bc, $10 - call CopyData - ld a, [$cf91] - cp VICTREEBEL + 1 - jr c, .pokemon - ld a, $1 ; not pokemon -.pokemon - call DeterminePaletteIDOutOfBattle - 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_StatusScreen - ret +Route19Blocks: ; 54ef1 (15:4ef1) + INCBIN "maps/route19.blk" + +INCLUDE "data/mapHeaders/route21.asm" -SendPalPacket_PartyMenu: ; 71e7b (1c:5e7b) - ld hl, PalPacket_PartyMenu - ld de, $cf2e - ret +INCLUDE "data/mapObjects/route21.asm" -SendPalPacket_Pokedex: ; 71e82 (1c:5e82) - ld hl, PalPacket_Pokedex - ld de, $cf2d - ld bc, $10 - call CopyData - ld a, [$cf91] - call DeterminePaletteIDOutOfBattle - ld hl, $cf30 - ld [hl], a - ld hl, $cf2d - ld de, BlkPacket_Pokedex - ret +Route21Blocks: ; 5506d (15:506d) + INCBIN "maps/route21.blk" -SendPalPacket_Slots: ; 71e9f (1c:5e9f) - ld hl, PalPacket_Slots - ld de, BlkPacket_Slots - ret +VermilionHouse2Blocks: ; 5522f (15:522f) +Route12HouseBlocks: ; 5522f (15:522f) +DayCareMBlocks: ; 5522f (15:522f) + INCBIN "maps/daycarem.blk" -SendPalPacket_Titlescreen: ; 71ea6 (1c:5ea6) - ld hl, PalPacket_Titlescreen - ld de, BlkPacket_Titlescreen - ret +FuchsiaHouse3Blocks: ; 5523f (15:523f) + INCBIN "maps/fuchsiahouse3.blk" -; used mostly for menus and the Oak intro -SendPalPacket_Generic: ; 71ead (1c:5ead) - ld hl, PalPacket_Generic - ld de, BlkPacket_WholeScreen - ret +INCLUDE "engine/battle/15.asm" -SendPalPacket_NidorinoIntro: ; 71eb4 (1c:5eb4) - ld hl, PalPacket_NidorinoIntro - ld de, BlkPacket_NidorinoIntro - ret +INCLUDE "scripts/route2.asm" -SendPalPacket_GameFreakIntro: ; 71ebb (1c:5ebb) - ld hl, PalPacket_GameFreakIntro - ld de, BlkPacket_GameFreakIntro - ld a, $8 - ld [$cf1c], a - ret +INCLUDE "scripts/route3.asm" -; uses PalPacket_Empty to build a packet based on the current map -BuildOverworldPalPacket: ; 71ec7 (1c:5ec7) - ld hl, PalPacket_Empty - ld de, $cf2d - ld bc, $10 - call CopyData - ld a, [W_CURMAPTILESET] - cp CEMETERY - jr z, .PokemonTowerOrAgatha - cp CAVERN - 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, [wLastMap] ; 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_WholeScreen - 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 +INCLUDE "scripts/route4.asm" -; used when a Pokemon is the only thing on the screen -; such as evolution, trading and the Hall of Fame -SendPokemonPalette_WholeScreen: ; 71f17 (1c:5f17) - push bc - ld hl, PalPacket_Empty - 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 DeterminePaletteIDOutOfBattle -.asm_71f31 - ld [$cf2e], a - ld hl, $cf2d - ld de, BlkPacket_WholeScreen - ret +INCLUDE "scripts/route5.asm" -BuildTrainerCardPalPacket: ; 71f3b (1c:5f3b) - ld hl, BlkPacket_TrainerCard - 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_TrainerCard - ld de, $cc5b - ret +INCLUDE "scripts/route9.asm" -PointerTable_71f73: ; 71f73 (1c:5f73) - dw SendPalPacket_Black - dw BuildBattlePalPacket - dw SendPalPacket_TownMap - dw BuildStatusScreenPalPacket - dw SendPalPacket_Pokedex - dw SendPalPacket_Slots - dw SendPalPacket_Titlescreen - dw SendPalPacket_NidorinoIntro - dw SendPalPacket_Generic - dw BuildOverworldPalPacket - dw SendPalPacket_PartyMenu - dw SendPokemonPalette_WholeScreen - dw SendPalPacket_GameFreakIntro - dw BuildTrainerCardPalPacket - -; 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] -DeterminePaletteIDOutOfBattle: ; 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 +INCLUDE "scripts/route13.asm" -SendBlkPacket_PartyMenu: ; 71fb6 (1c:5fb6) - ld hl, BlkPacket_PartyMenu ; $62f4 - ld de, $cf2e - ld bc, $30 - jp CopyData +INCLUDE "scripts/route14.asm" -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 +INCLUDE "scripts/route17.asm" -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 +INCLUDE "scripts/route19.asm" -LoadSGBBorderAndPalettes: ; 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 +INCLUDE "scripts/route21.asm" -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 [$fff9], a - ei - call Wait7000 - ld a, [rJOYP] ; $ff0 - and $3 - cp $3 - jr nz, .asm_720fd - ld a, $20 - ld [rJOYP], a ; $ff0 - ld a, [rJOYP] ; $ff0 - ld a, [rJOYP] ; $ff0 - call Wait7000 - call Wait7000 - ld a, $30 - ld [rJOYP], a ; $ff0 - call Wait7000 - call Wait7000 - ld a, $10 - ld [rJOYP], a ; $ff0 - ld a, [rJOYP] ; $ff0 - ld a, [rJOYP] ; $ff0 - ld a, [rJOYP] ; $ff0 - ld a, [rJOYP] ; $ff0 - ld a, [rJOYP] ; $ff0 - ld a, [rJOYP] ; $ff0 - call Wait7000 - call Wait7000 - ld a, $30 - ld [rJOYP], a ; $ff0 - ld a, [rJOYP] ; $ff0 - ld a, [rJOYP] ; $ff0 - ld a, [rJOYP] ; $ff0 - call Wait7000 - call Wait7000 - ld a, [rJOYP] ; $ff0 - and $3 - cp $3 - jr nz, .asm_720fd - call Func_72102 - and a - ret -.asm_720fd - call Func_72102 - scf - ret +INCLUDE "data/mapHeaders/vermilionhouse2.asm" -Func_72102: ; 72102 (1c:6102) - ld hl, PalPacket_724e8 - call SendSGBPacket - jp Wait7000 +INCLUDE "scripts/vermilionhouse2.asm" -Func_7210b: ; 7210b (1c:610b) - di - push de - call DisableLCD - ld a, $e4 - ld [rBGP], a ; $ff47 - 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 ; $ff40 - pop hl - call SendSGBPacket - xor a - ld [rBGP], a ; $ff47 - ei - ret +INCLUDE "data/mapObjects/vermilionhouse2.asm" -Wait7000: ; 7214a (1c:614a) -; each loop takes about 10 cycles so this routine actually loops through 70000 -; cycles. - ld de, 7000 -.loop - nop - nop - nop - dec de - ld a, d - or e - jr nz, .loop - ret +INCLUDE "data/mapHeaders/celadonmart2.asm" -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 +INCLUDE "scripts/celadonmart2.asm" -Func_7216d: ; 7216d (1c:616d) - ld a, $80 - ld [$ff68], 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 [$ff69], a - dec c - jr nz, .asm_72174 - ret +INCLUDE "data/mapObjects/celadonmart2.asm" -Func_72187: ; 72187 (1c:6187) - ret +CeladonMart2Blocks: ; 56148 (15:6148) + INCBIN "maps/celadonmart2.blk" -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 +INCLUDE "data/mapHeaders/fuchsiahouse3.asm" -INCLUDE "data/sgb_packets.asm" +INCLUDE "scripts/fuchsiahouse3.asm" -INCLUDE "data/mon_palettes.asm" +INCLUDE "data/mapObjects/fuchsiahouse3.asm" -INCLUDE "data/super_palettes.asm" +INCLUDE "data/mapHeaders/daycarem.asm" -INCLUDE "data/sgb_border.asm" +INCLUDE "scripts/daycarem.asm" -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 - call PrintText - ld c, $64 - call DelayFrames - pop hl - res 6, [hl] - ld a, $1 ; bad checksum -.goodsum - ld [$d088], a ; checksum flag - ret +INCLUDE "data/mapObjects/daycarem.asm" -FileDataDestroyedText: ; 7361e (1c:761e) - TX_FAR _FileDataDestroyedText - db "@" +INCLUDE "data/mapHeaders/route12house.asm" -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 +INCLUDE "scripts/route12house.asm" -.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 [$ffd7], a - ld hl, $b0c0 - ld de, W_NUMINBOX ; $da80 - ld bc, $462 - call CopyData - and a - jp SAVGoodChecksum +INCLUDE "data/mapObjects/route12house.asm" -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 +INCLUDE "data/mapHeaders/silphco8.asm" + +INCLUDE "scripts/silphco8.asm" + +INCLUDE "data/mapObjects/silphco8.asm" -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, wPokedexSeenEnd - wPokedexOwned - call CopyData - and a - jp SAVGoodChecksum +SilphCo8Blocks: ; 5666d (15:666d) + INCBIN "maps/silphco8.blk" -SAVBadCheckSum: ; 736f7 (1c:76f7) - scf +INCLUDE "engine/menu/diploma.asm" -SAVGoodChecksum: ; 736f8 (1c:76f8) - ld a, $0 - ld [$6000], a - ld [$0], a - ret +INCLUDE "engine/overworld/trainers.asm" -Func_73701: ; 0x73701 - call LoadSAVCheckSum - call LoadSAVCheckSum1 - jp LoadSAVCheckSum2 +SECTION "bank16",ROMX,BANK[$16] -SaveSAV: ;$770a - callba PrintSaveScreenText - 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, (SFX_02_5d - SFX_Headers_02) / 3 ;sound for saved game - call PlaySoundWaitForCurrent - call WaitForSoundToFinish - ld c,$1e - jp DelayFrames +INCLUDE "data/mapHeaders/route6.asm" -NowSavingString: - db "Now saving...@" +INCLUDE "data/mapObjects/route6.asm" -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 +Route6Blocks: ; 58079 (16:4079) + INCBIN "maps/route6.blk" -WouldYouLikeToSaveText: ; 0x7377d - TX_FAR _WouldYouLikeToSaveText - db "@" +INCLUDE "data/mapHeaders/route8.asm" -GameSavedText: ; 73782 (1c:7782) - TX_FAR _GameSavedText - db "@" +INCLUDE "data/mapObjects/route8.asm" -OlderFileWillBeErasedText: ; 73787 (1c:7787) - TX_FAR _OlderFileWillBeErasedText - db "@" +Route8Blocks: ; 581c6 (16:41c6) + INCBIN "maps/route8.blk" -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, [$ffd7] - ld [$b522], a - ld hl, $a598 - ld bc, $f8b - call SAVCheckSum - ld [$b523], a - xor a - ld [$6000], a - ld [$0], a - ret +INCLUDE "data/mapHeaders/route10.asm" -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 +INCLUDE "data/mapObjects/route10.asm" -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, wPokedexSeenEnd - wPokedexOwned - call CopyData - ld hl, $a598 - ld bc, $f8b - call SAVCheckSum - ld [$b523], a - xor a - ld [$6000], a - ld [$0], a - ret +Route10Blocks: ; 58356 (16:4356) + INCBIN "maps/route10.blk" -SaveSAVtoSRAM: ; 73848 (1c:7848) - ld a, $2 - ld [$d088], a - call SaveSAVtoSRAM0 - call SaveSAVtoSRAM1 - jp SaveSAVtoSRAM2 +INCLUDE "data/mapHeaders/route11.asm" -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 +INCLUDE "data/mapObjects/route11.asm" -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 +Route11Blocks: ; 5855f (16:455f) + INCBIN "maps/route11.blk" -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 +INCLUDE "data/mapHeaders/route12.asm" -PointerTable_73895: ; 73895 (1c:7895) - dw $A000 - dw $A462 - dw $A8C4 - dw $AD26 - dw $B188 - dw $B5EA +INCLUDE "data/mapObjects/route12.asm" -Func_738a1:: ; 738a1 (1c:78a1) - ld hl, WhenYouChangeBoxText - 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, (SFX_02_5d - SFX_Headers_02) / 3 - call PlaySoundWaitForCurrent - call WaitForSoundToFinish - ret +Route12Blocks: ; 58710 (16:4710) + INCBIN "maps/route12.blk" -WhenYouChangeBoxText: ; 73909 (1c:7909) - TX_FAR _WhenYouChangeBoxText - db "@" +INCLUDE "data/mapHeaders/route15.asm" -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 +INCLUDE "data/mapObjects/route15.asm" -Func_7393f: ; 7393f (1c:793f) - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - 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, ChooseABoxText - 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 - 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 ; $ffba - ret +Route15Blocks: ; 589cc (16:49cc) + INCBIN "maps/route15.blk" -ChooseABoxText: ; 739d4 (1c:79d4) - TX_FAR _ChooseABoxText - db "@" +INCLUDE "data/mapHeaders/route16.asm" -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 +INCLUDE "data/mapObjects/route16.asm" -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 +Route16Blocks: ; 58b84 (16:4b84) + INCBIN "maps/route16.blk" -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 +INCLUDE "data/mapHeaders/route18.asm" -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 +INCLUDE "data/mapObjects/route18.asm" -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 +Route18Blocks: ; 58c9c (16:4c9c) + INCBIN "maps/route18.blk" -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 + INCBIN "maps/unusedblocks58d7d.blk" -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 +INCLUDE "engine/battle/16.asm" -PadSRAM_FF: ; 73b8f (1c:7b8f) - ld [$4000], a - ld hl, $a000 - ld bc, $2000 - ld a, $ff - jp FillMemory +INCLUDE "engine/experience.asm" -SECTION "bank1D",ROMX,BANK[$1D] +INCLUDE "engine/overworld/oaks_aide.asm" -CopycatsHouse1FBlocks: ; 74000 (1d:4000) - INCBIN "maps/copycatshouse1f.blk" +INCLUDE "scripts/route6.asm" -CinnabarMartBlocks: ; 74010 (1d:4010) -PewterMartBlocks: ; 74010 (1d:4010) - INCBIN "maps/pewtermart.blk" +INCLUDE "scripts/route8.asm" -FuchsiaHouse1Blocks: ; 74020 (1d:4020) - INCBIN "maps/fuchsiahouse1.blk" +INCLUDE "scripts/route10.asm" -CinnabarPokecenterBlocks: ; 74030 (1d:4030) -FuchsiaPokecenterBlocks: ; 74030 (1d:4030) - INCBIN "maps/fuchsiapokecenter.blk" +INCLUDE "scripts/route11.asm" -CeruleanHouse2Blocks: ; 7404c (1d:404c) - INCBIN "maps/ceruleanhouse2.blk" +INCLUDE "scripts/route12.asm" -HallOfFameComputer: ; 7405c (1d:405c) - callba AnimateHallOfFame - 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 ; $ff47 - 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 Credits +INCLUDE "scripts/route15.asm" -Func_740ba: ; 740ba (1d:40ba) - ld hl, DataTable_74160 ; $4160 - ld b, $4 -.asm_740bf - ld a, [hli] - ld [rBGP], a ; $ff47 - ld c, $5 - call DelayFrames - dec b - jr nz, .asm_740bf - ret +INCLUDE "scripts/route16.asm" -DisplayCreditsMon: ; 740cb (1d:40cb) - xor a - ld [H_AUTOBGTRANSFERENABLED],a - call SaveScreenTilesToBuffer1 - call FillMiddleOfScreenWithWhite +INCLUDE "scripts/route18.asm" - ; 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 +INCLUDE "data/mapHeaders/fanclub.asm" -INCLUDE "data/credit_mons.asm" +INCLUDE "scripts/fanclub.asm" -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 +INCLUDE "data/mapObjects/fanclub.asm" -Func_74152: ; 74152 (1d:4152) - ld a, [$ff44] - cp l - jr nz, Func_74152 - ld a, h - ld [rSCX], a ; $ff43 -.asm_7415a - ld a, [$ff44] - cp h - jr z, .asm_7415a - ret +FanClubBlocks: ; 59cd5 (16:5cd5) + INCBIN "maps/fanclub.blk" -DataTable_74160: ; 74160 (1d:4160) - db $C0,$D0,$E0,$F0 +INCLUDE "data/mapHeaders/silphco2.asm" -Func_74164: ; 74164 (1d:4164) - ld a, l - ld [H_AUTOBGTRANSFERDEST], a ; $ffbc - ld a, h - ld [$ffbd], a - ld a, $1 - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - jp Delay3 +INCLUDE "scripts/silphco2.asm" -Func_74171: ; 74171 (1d:4171) - ld [hl], $0 - inc hl - inc hl - dec bc - ld a, b - or c - jr nz, Func_74171 - ret +INCLUDE "data/mapObjects/silphco2.asm" -Func_7417b: ; 7417b (1d:417b) - ld bc, $50 - ld a, $7e - jp FillMemory +SilphCo2Blocks: ; 59ec8 (16:5ec8) + INCBIN "maps/silphco2.blk" -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 +INCLUDE "data/mapHeaders/silphco3.asm" -Credits: ; 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 - callba Func_4541 - 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 +INCLUDE "scripts/silphco3.asm" -UnnamedText_74229: ; 74229 (1d:4229) - db $60," ",$62," ",$64," ",$64," ",$66," ",$68,"@" - db $61," ",$63," ",$65," ",$65," ",$67," ",$69,"@" +INCLUDE "data/mapObjects/silphco3.asm" -INCLUDE "data/credits_order.asm" +SilphCo3Blocks: ; 5a0a6 (16:60a6) + INCBIN "maps/silphco3.blk" -INCLUDE "text/credits_text.asm" +INCLUDE "data/mapHeaders/silphco10.asm" -TheEndGfx: ; 7473e (1d:473e) ; 473E (473F on blue) - INCBIN "gfx/theend.w40.interleave.2bpp" +INCLUDE "scripts/silphco10.asm" -PrintStatusAilment: ; 747de (1d:47de) - ld a, [de] - bit PSN, a - jr nz, .psn - bit BRN, a - jr nz, .brn - bit FRZ, a - jr nz, .frz - bit PAR, a - jr nz, .par - and 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 +INCLUDE "data/mapObjects/silphco10.asm" -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, [W_YCOORD] - call Func_7486b - cp d - jr nc, .asm_74824 ; 0x7484e $d4 - ld a, [W_YCOORD] - add $4 - cp d - jr c, .asm_74824 ; 0x74856 $cc - ld a, [W_XCOORD] - call Func_7486b - cp e - jr nc, .asm_74824 ; 0x7485f $c3 - ld a, [W_XCOORD] - add $5 - cp e - jr c, .asm_74824 ; 0x74867 $bb - scf - ret +SilphCo10Blocks: ; 5a25a (16:625a) + INCBIN "maps/silphco10.blk" -Func_7486b: ; 7486b (1d:486b) - sub $5 - cp $f0 - ret c - xor a - ret +INCLUDE "data/mapHeaders/lance.asm" + +INCLUDE "scripts/lance.asm" -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 +INCLUDE "data/mapObjects/lance.asm" -INCLUDE "data/mapHeaders/viridiangym.asm" +LanceBlocks: ; 5a3e9 (16:63e9) + INCBIN "maps/lance.blk" -INCLUDE "scripts/viridiangym.asm" +INCLUDE "data/mapHeaders/halloffameroom.asm" -INCLUDE "data/mapObjects/viridiangym.asm" +INCLUDE "scripts/halloffameroom.asm" -ViridianGymBlocks: ; 74c47 (1d:4c47) - INCBIN "maps/viridiangym.blk" +INCLUDE "data/mapObjects/halloffameroom.asm" -INCLUDE "data/mapHeaders/pewtermart.asm" +HallofFameRoomBlocks: ; 5a58b (16:658b) + INCBIN "maps/halloffameroom.blk" -INCLUDE "scripts/pewtermart.asm" +INCLUDE "engine/overworld/saffron_guards.asm" -INCLUDE "data/mapObjects/pewtermart.asm" +SECTION "bank17",ROMX,BANK[$17] -INCLUDE "data/mapHeaders/unknowndungeon1.asm" +SaffronMartBlocks: ; 5c000 (17:4000) +LavenderMartBlocks: ; 5c000 (17:4000) +CeruleanMartBlocks: ; 5c000 (17:4000) +VermilionMartBlocks: ; 5c000 (17:4000) + INCBIN "maps/vermilionmart.blk" -INCLUDE "scripts/unknowndungeon1.asm" +CopycatsHouse2FBlocks: ; 5c010 (17:4010) +RedsHouse2FBlocks: ; 0x5c010 16? + INCBIN "maps/redshouse2f.blk" -INCLUDE "data/mapObjects/unknowndungeon1.asm" +Museum1FBlocks: ; 5c020 (17:4020) + INCBIN "maps/museum1f.blk" -UnknownDungeon1Blocks: ; 74d76 (1d:4d76) - INCBIN "maps/unknowndungeon1.blk" +Museum2FBlocks: ; 5c048 (17:4048) + INCBIN "maps/museum2f.blk" -INCLUDE "data/mapHeaders/ceruleanhouse2.asm" +SaffronPokecenterBlocks: ; 5c064 (17:4064) +VermilionPokecenterBlocks: ; 5c064 (17:4064) +LavenderPokecenterBlocks: ; 5c064 (17:4064) +PewterPokecenterBlocks: ; 5c064 (17:4064) + INCBIN "maps/pewterpokecenter.blk" -INCLUDE "scripts/ceruleanhouse2.asm" +UndergroundPathEntranceRoute7Blocks: ; 5c080 (17:4080) +UndergroundPathEntranceRoute7CopyBlocks: ; 5c080 (17:4080) +UndergroundPathEntranceRoute6Blocks: ; 5c080 (17:4080) +UndergroundPathEntranceRoute5Blocks: ; 5c080 (17:4080) + INCBIN "maps/undergroundpathentranceroute5.blk" -INCLUDE "data/mapObjects/ceruleanhouse2.asm" +Route2GateBlocks: ; 5c090 (17:4090) +ViridianForestEntranceBlocks: ; 5c090 (17:4090) +ViridianForestExitBlocks: ; 5c090 (17:4090) + INCBIN "maps/viridianforestexit.blk" -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 [$ff9f], a - ld [$ffa1], a - ld a, $2 - ld [$ffa0], a - call HasEnoughMoney - jr nc, .enoughMoney - ld hl, VendingMachineText4 - jp PrintText -.enoughMoney - call Func_74fe7 - ld a, [$ffdb] - 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, (SFX_02_53 - SFX_Headers_02) / 3 - 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 +INCLUDE "data/mapHeaders/redshouse2f.asm" -VendingMachineText1: ; 74f99 (1d:4f99) - TX_FAR _VendingMachineText1 - db "@" +INCLUDE "scripts/redshouse2f.asm" -DrinkText: ; 74f9e (1d:4f9e) - db "FRESH WATER" - next "SODA POP" - next "LEMONADE" - next "CANCEL@" +INCLUDE "data/mapObjects/redshouse2f.asm" -DrinkPriceText: ; 74fc3 (1d:4fc3) - db "¥200" - next "¥300" - next "¥350",$4E,"@" +INCLUDE "engine/predefs17.asm" -VendingMachineText4: ; 74fd3 (1d:4fd3) - TX_FAR _VendingMachineText4 - db "@" +INCLUDE "data/mapHeaders/museum1f.asm" -VendingMachineText5: ; 74fd8 (1d:4fd8) - TX_FAR _VendingMachineText5 - db "@" +INCLUDE "scripts/museum1f.asm" -VendingMachineText6: ; 74fdd (1d:4fdd) - TX_FAR _VendingMachineText6 - db "@" +INCLUDE "data/mapObjects/museum1f.asm" -VendingMachineText7: ; 74fe2 (1d:4fe2) - TX_FAR _VendingMachineText7 - db "@" +INCLUDE "data/mapHeaders/museum2f.asm" -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 [$ffdb], a - ld a, [hli] - ld [$ffdc], a - ld a, [hli] - ld [$ffdd], a - ld a, [hl] - ld [$ffde], a - ret +INCLUDE "scripts/museum2f.asm" -VendingPrices: ; 75000 (1d:5000) - db FRESH_WATER,$00,$02,$00 - db SODA_POP, $00,$03,$00 - db LEMONADE, $00,$03,$50 +INCLUDE "data/mapObjects/museum2f.asm" -INCLUDE "data/mapHeaders/fuchsiahouse1.asm" +INCLUDE "data/mapHeaders/pewtergym.asm" -INCLUDE "scripts/fuchsiahouse1.asm" +INCLUDE "scripts/pewtergym.asm" -INCLUDE "data/mapObjects/fuchsiahouse1.asm" +INCLUDE "data/mapObjects/pewtergym.asm" -INCLUDE "data/mapHeaders/fuchsiapokecenter.asm" +PewterGymBlocks: ; 5c558 (17:4558) + INCBIN "maps/pewtergym.blk" -INCLUDE "scripts/fuchsiapokecenter.asm" +INCLUDE "data/mapHeaders/pewterpokecenter.asm" -INCLUDE "data/mapObjects/fuchsiapokecenter.asm" +INCLUDE "scripts/pewterpokecenter.asm" -INCLUDE "data/mapHeaders/fuchsiahouse2.asm" +INCLUDE "data/mapObjects/pewterpokecenter.asm" -INCLUDE "scripts/fuchsiahouse2.asm" +INCLUDE "data/mapHeaders/ceruleanpokecenter.asm" -INCLUDE "data/mapObjects/fuchsiahouse2.asm" +INCLUDE "scripts/ceruleanpokecenter.asm" -FuchsiaHouse2Blocks: ; 751ad (1d:51ad) - INCBIN "maps/fuchsiahouse2.blk" +INCLUDE "data/mapObjects/ceruleanpokecenter.asm" -INCLUDE "data/mapHeaders/safarizoneentrance.asm" +CeruleanPokecenterBlocks: ; 5c68b (17:468b) + INCBIN "maps/ceruleanpokecenter.blk" -INCLUDE "scripts/safarizoneentrance.asm" +INCLUDE "data/mapHeaders/ceruleangym.asm" -INCLUDE "data/mapObjects/safarizoneentrance.asm" +INCLUDE "scripts/ceruleangym.asm" -SafariZoneEntranceBlocks: ; 75425 (1d:5425) - INCBIN "maps/safarizoneentrance.blk" +INCLUDE "data/mapObjects/ceruleangym.asm" -INCLUDE "data/mapHeaders/fuchsiagym.asm" +CeruleanGymBlocks: ; 5c866 (17:4866) + INCBIN "maps/ceruleangym.blk" -INCLUDE "scripts/fuchsiagym.asm" +INCLUDE "data/mapHeaders/ceruleanmart.asm" -INCLUDE "data/mapObjects/fuchsiagym.asm" +INCLUDE "scripts/ceruleanmart.asm" -FuchsiaGymBlocks: ; 756aa (1d:56aa) - INCBIN "maps/fuchsiagym.blk" +INCLUDE "data/mapObjects/ceruleanmart.asm" -INCLUDE "data/mapHeaders/fuchsiameetingroom.asm" +INCLUDE "data/mapHeaders/lavenderpokecenter.asm" -INCLUDE "scripts/fuchsiameetingroom.asm" +INCLUDE "scripts/lavenderpokecenter.asm" -INCLUDE "data/mapObjects/fuchsiameetingroom.asm" +INCLUDE "data/mapObjects/lavenderpokecenter.asm" -FuchsiaMeetingRoomBlocks: ; 75722 (1d:5722) - INCBIN "maps/fuchsiameetingroom.blk" +INCLUDE "data/mapHeaders/lavendermart.asm" -INCLUDE "data/mapHeaders/cinnabargym.asm" +INCLUDE "scripts/lavendermart.asm" -INCLUDE "scripts/cinnabargym.asm" +INCLUDE "data/mapObjects/lavendermart.asm" -INCLUDE "data/mapObjects/cinnabargym.asm" +INCLUDE "data/mapHeaders/vermilionpokecenter.asm" -CinnabarGymBlocks: ; 75b26 (1d:5b26) - INCBIN "maps/cinnabargym.blk" +INCLUDE "scripts/vermilionpokecenter.asm" -INCLUDE "data/mapHeaders/lab1.asm" +INCLUDE "data/mapObjects/vermilionpokecenter.asm" -INCLUDE "scripts/lab1.asm" +INCLUDE "data/mapHeaders/vermilionmart.asm" -INCLUDE "data/mapObjects/lab1.asm" +INCLUDE "scripts/vermilionmart.asm" -Lab1Blocks: ; 75bf1 (1d:5bf1) - INCBIN "maps/lab1.blk" +INCLUDE "data/mapObjects/vermilionmart.asm" -INCLUDE "data/mapHeaders/lab2.asm" +INCLUDE "data/mapHeaders/vermiliongym.asm" -INCLUDE "scripts/lab2.asm" +INCLUDE "scripts/vermiliongym.asm" -INCLUDE "data/mapObjects/lab2.asm" +INCLUDE "data/mapObjects/vermiliongym.asm" -Lab2Blocks: ; 75c6b (1d:5c6b) - INCBIN "maps/lab2.blk" +VermilionGymBlocks: ; 5cc38 (17:4c38) + INCBIN "maps/vermiliongym.blk" -INCLUDE "data/mapHeaders/lab3.asm" +INCLUDE "data/mapHeaders/copycatshouse2f.asm" -INCLUDE "scripts/lab3.asm" +INCLUDE "scripts/copycatshouse2f.asm" -INCLUDE "data/mapObjects/lab3.asm" +INCLUDE "data/mapObjects/copycatshouse2f.asm" -Lab3Blocks: ; 75d15 (1d:5d15) - INCBIN "maps/lab3.blk" +INCLUDE "data/mapHeaders/fightingdojo.asm" -INCLUDE "data/mapHeaders/lab4.asm" +INCLUDE "scripts/fightingdojo.asm" -INCLUDE "scripts/lab4.asm" +INCLUDE "data/mapObjects/fightingdojo.asm" -INCLUDE "data/mapObjects/lab4.asm" +FightingDojoBlocks: ; 5cfe3 (17:4fe3) + INCBIN "maps/fightingdojo.blk" -Lab4Blocks: ; 75e10 (1d:5e10) - INCBIN "maps/lab4.blk" +INCLUDE "data/mapHeaders/saffrongym.asm" -INCLUDE "data/mapHeaders/cinnabarpokecenter.asm" +INCLUDE "scripts/saffrongym.asm" -INCLUDE "scripts/cinnabarpokecenter.asm" +INCLUDE "data/mapObjects/saffrongym.asm" -INCLUDE "data/mapObjects/cinnabarpokecenter.asm" +SaffronGymBlocks: ; 5d3a3 (17:53a3) + INCBIN "maps/saffrongym.blk" -INCLUDE "data/mapHeaders/cinnabarmart.asm" +INCLUDE "data/mapHeaders/saffronmart.asm" -INCLUDE "scripts/cinnabarmart.asm" +INCLUDE "scripts/saffronmart.asm" -INCLUDE "data/mapObjects/cinnabarmart.asm" +INCLUDE "data/mapObjects/saffronmart.asm" -INCLUDE "data/mapHeaders/copycatshouse1f.asm" +INCLUDE "data/mapHeaders/silphco1.asm" -INCLUDE "scripts/copycatshouse1f.asm" +INCLUDE "scripts/silphco1.asm" -INCLUDE "data/mapObjects/copycatshouse1f.asm" +INCLUDE "data/mapObjects/silphco1.asm" -INCLUDE "data/mapHeaders/gary.asm" +SilphCo1Blocks: ; 5d4a2 (17:54a2) + INCBIN "maps/silphco1.blk" -INCLUDE "scripts/gary.asm" +INCLUDE "data/mapHeaders/saffronpokecenter.asm" -INCLUDE "data/mapObjects/gary.asm" +INCLUDE "scripts/saffronpokecenter.asm" -GaryBlocks: ; 7615f (1d:615f) - INCBIN "maps/gary.blk" +INCLUDE "data/mapObjects/saffronpokecenter.asm" -INCLUDE "data/mapHeaders/lorelei.asm" +INCLUDE "data/mapHeaders/viridianforestexit.asm" -INCLUDE "scripts/lorelei.asm" +INCLUDE "scripts/viridianforestexit.asm" -INCLUDE "data/mapObjects/lorelei.asm" +INCLUDE "data/mapObjects/viridianforestexit.asm" -LoreleiBlocks: ; 762ac (1d:62ac) - INCBIN "maps/lorelei.blk" +INCLUDE "data/mapHeaders/route2gate.asm" -INCLUDE "data/mapHeaders/bruno.asm" +INCLUDE "scripts/route2gate.asm" -INCLUDE "scripts/bruno.asm" +INCLUDE "data/mapObjects/route2gate.asm" -INCLUDE "data/mapObjects/bruno.asm" +INCLUDE "data/mapHeaders/viridianforestentrance.asm" -BrunoBlocks: ; 76403 (1d:6403) - INCBIN "maps/bruno.blk" +INCLUDE "scripts/viridianforestentrance.asm" -INCLUDE "data/mapHeaders/agatha.asm" +INCLUDE "data/mapObjects/viridianforestentrance.asm" -INCLUDE "scripts/agatha.asm" +INCLUDE "data/mapHeaders/undergroundpathentranceroute5.asm" -INCLUDE "data/mapObjects/agatha.asm" +INCLUDE "scripts/undergroundpathentranceroute5.asm" -AgathaBlocks: ; 76560 (1d:6560) - INCBIN "maps/agatha.blk" +INCLUDE "data/mapObjects/undergroundpathentranceroute5.asm" -PKMNLeaguePC: ; 0x7657e - ld hl, AccessedHoFPCText - call PrintText - ld hl, $D730 - set 6, [hl] - push hl - ld a, [$CFCB] - push af - ld a, [$ffD7] - push af - xor a - ld [$ffD7], 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 - callba Func_73b3f - 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 [$ffD7], a - pop af - ld [$CFCB], a - pop hl - res 6, [hl] - call GBPalWhiteOutWithDelay3 - call ClearScreen - call GoPAL_SET_CF1C - jp GBPalNormal +INCLUDE "data/mapHeaders/undergroundpathentranceroute6.asm" -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 +INCLUDE "scripts/undergroundpathentranceroute6.asm" -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 +INCLUDE "data/mapObjects/undergroundpathentranceroute6.asm" -HallOfFameNoText: ; 76670 (1d:6670) - db "HALL OF FAME No @" +INCLUDE "data/mapHeaders/undergroundpathentranceroute7.asm" -AccessedHoFPCText: ; 76683 (1d:6683) - TX_FAR _AccessedHoFPCText - db "@" +INCLUDE "scripts/undergroundpathentranceroute7.asm" -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 PrintPredefTextID +INCLUDE "data/mapObjects/undergroundpathentranceroute7.asm" -INCLUDE "data/hidden_item_coords.asm" +INCLUDE "data/mapHeaders/undergroundpathentranceroute7copy.asm" -FoundHiddenItemText: ; 7675b (1d:675b) -; XXX where is the pointer to this? - TX_FAR _FoundHiddenItemText - 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, (SFX_02_3b - SFX_Headers_02) / 3 - 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 +INCLUDE "scripts/undergroundpathentranceroute7copy.asm" -HiddenItemBagFullText: ; 76794 (1d:6794) - TX_FAR _HiddenItemBagFullText - db "@" +INCLUDE "data/mapObjects/undergroundpathentranceroute7copy.asm" -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 [$ff9f], a - ld [$ffa0], a - ld [$ffa1], 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 [$ffa1], a - jr .bcddone -.bcd20 - ld a, $20 - ld [$ffa1], a - jr .bcddone -.bcd40 ; due to a typo, this is never used - ld a, $40 - ld [$ffa1], a - jr .bcddone -.bcd100 - ld a, $1 - ld [$ffa0], 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 PrintPredefTextID +INCLUDE "data/mapHeaders/silphco9.asm" -INCLUDE "data/hidden_coins.asm" +INCLUDE "scripts/silphco9.asm" -FoundHiddenCoinsText: ; 76847 (1d:6847) - TX_FAR _FoundHiddenCoinsText - db $10,"@" +INCLUDE "data/mapObjects/silphco9.asm" -DroppedHiddenCoinsText: ; 7684d (1d:684d) - TX_FAR _FoundHiddenCoins2Text - db $10 - TX_FAR _DroppedHiddenCoinsText - db "@" +SilphCo9Blocks: ; 5d989 (17:5989) + INCBIN "maps/silphco9.blk" -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 +INCLUDE "data/mapHeaders/victoryroad1.asm" -SECTION "bank1E",ROMX,BANK[$1E] +INCLUDE "scripts/victoryroad1.asm" -; 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 +INCLUDE "data/mapObjects/victoryroad1.asm" -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 +VictoryRoad1Blocks: ; 5db04 (17:5b04) + INCBIN "maps/victoryroad1.blk" -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 +INCLUDE "engine/predefs17_2.asm" -; 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 +INCLUDE "engine/hidden_object_functions17.asm" -; 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 +SECTION "bank18",ROMX,BANK[$18] -; 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, BANK(AnimationTileset1) ; 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 +ViridianForestBlocks: ; 60000 (18:4000) + INCBIN "maps/viridianforest.blk" - db 79 ; number of tiles - dw AnimationTileset2 - db $FF +UndergroundPathNSBlocks: ; 60198 (18:4198) + INCBIN "maps/undergroundpathns.blk" - db 64 ; number of tiles - dw AnimationTileset1 - db $FF +UndergroundPathWEBlocks: ; 601f4 (18:41f4) + INCBIN "maps/undergroundpathwe.blk" -AnimationTileset1: ; 781fe (1e:41fe) - INCBIN "gfx/attack_anim_1.2bpp" + INCBIN "maps/unusedblocks60258.blk" -AnimationTileset2: ; 786ee (1e:46ee) - INCBIN "gfx/attack_anim_2.2bpp" +SSAnne10Blocks: ; 603c0 (18:43c0) +SSAnne9Blocks: ; 603c0 (18:43c0) + INCBIN "maps/ssanne9.blk" -SlotMachineTiles2: ; 78bde (1e:4bde) -IF _RED - INCBIN "gfx/red/slotmachine2.2bpp" -ENDC -IF _BLUE - INCBIN "gfx/blue/slotmachine2.2bpp" -ENDC +INCLUDE "data/mapHeaders/pokemontower1.asm" -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 +INCLUDE "scripts/pokemontower1.asm" - ; if throwing a Poké Ball, skip the regular animation code - cp a,TOSS_ANIM - jr nz,.MoveAnimation - ld de,.AnimationFinished - push de - jp TossBallAnimation +INCLUDE "data/mapObjects/pokemontower1.asm" -.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 +PokemonTower1Blocks: ; 6048c (18:448c) + INCBIN "maps/pokemontower1.blk" -ShareMoveAnimations: ; 78da6 (1e:4da6) -; some moves just reuse animations from status conditions - ld a,[H_WHOSETURN] - and a - ret z +INCLUDE "data/mapHeaders/pokemontower2.asm" - ; opponent’s turn +INCLUDE "scripts/pokemontower2.asm" - ld a,[W_ANIMATIONID] +INCLUDE "data/mapObjects/pokemontower2.asm" - cp a,AMNESIA - ld b,CONF_ANIM - jr z,.Replace +PokemonTower2Blocks: ; 60666 (18:4666) + INCBIN "maps/pokemontower2.blk" - cp a,REST - ld b,SLP_ANIM - ret nz +INCLUDE "data/mapHeaders/pokemontower3.asm" -.Replace - ld a,b - ld [W_ANIMATIONID],a - ret +INCLUDE "scripts/pokemontower3.asm" -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] +INCLUDE "data/mapObjects/pokemontower3.asm" -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 +PokemonTower3Blocks: ; 60790 (18:4790) + INCBIN "maps/pokemontower3.blk" -Func_78dfe: ; 78dfe (1e:4dfe) - ld bc, $302 +INCLUDE "data/mapHeaders/pokemontower4.asm" -Func_78e01: ; 78e01 (1e:4e01) - push bc - push bc -.asm_78e03 - ld a, [rWX] ; $ff4b - inc a - ld [rWX], a ; $ff4b - ld c, $2 - call DelayFrames - dec b - jr nz, .asm_78e03 - pop bc -.asm_78e11 - ld a, [rWX] ; $ff4b - dec a - ld [rWX], a ; $ff4b - ld c, $2 - call DelayFrames - dec b - jr nz, .asm_78e11 - pop bc - dec c - jr nz, Func_78e01 - ret +INCLUDE "scripts/pokemontower4.asm" -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 ; $ff48 - ld a, $6c - ld [rOBP1], a ; $ff49 - ret -.asm_78e47 - ld a, $e4 - ld [$cc79], a - ld [rOBP0], a ; $ff48 - ld a, $6c - ld [rOBP1], a ; $ff49 - ret +INCLUDE "data/mapObjects/pokemontower4.asm" -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 +PokemonTower4Blocks: ; 608cc (18:48cc) + INCBIN "maps/pokemontower4.blk" -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 +INCLUDE "data/mapHeaders/pokemontower5.asm" + +INCLUDE "scripts/pokemontower5.asm" + +INCLUDE "data/mapObjects/pokemontower5.asm" + +PokemonTower5Blocks: ; 60a89 (18:4a89) + INCBIN "maps/pokemontower5.blk" + +INCLUDE "data/mapHeaders/pokemontower6.asm" + +INCLUDE "scripts/pokemontower6.asm" + +INCLUDE "data/mapObjects/pokemontower6.asm" + +PokemonTower6Blocks: ; 60c95 (18:4c95) + INCBIN "maps/pokemontower6.blk" + + INCBIN "maps/unusedblocks60cef.blk" + +INCLUDE "data/mapHeaders/pokemontower7.asm" + +INCLUDE "scripts/pokemontower7.asm" -; 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 +INCLUDE "data/mapObjects/pokemontower7.asm" -; Format: Animation ID (1 byte), Address (2 bytes) -AnimationIdSpecialEffects: ; 78ef5 (1e:4ef5) - db MEGA_PUNCH - dw AnimationFlashScreen +PokemonTower7Blocks: ; 60f20 (18:4f20) + INCBIN "maps/pokemontower7.blk" - db GUILLOTINE - dw AnimationFlashScreen +INCLUDE "data/mapHeaders/celadonmart1.asm" - db MEGA_KICK - dw AnimationFlashScreen +INCLUDE "scripts/celadonmart1.asm" - db HEADBUTT - dw AnimationFlashScreen +INCLUDE "data/mapObjects/celadonmart1.asm" - db TAIL_WHIP - dw Func_790d0 +CeladonMart1Blocks: ; 60fde (18:4fde) + INCBIN "maps/celadonmart1.blk" - db GROWL - dw DoGrowlSpecialEffects +INCLUDE "engine/overworld/cinnabar_lab.asm" - db DISABLE - dw AnimationFlashScreen +INCLUDE "data/mapHeaders/viridianforest.asm" - db BLIZZARD - dw DoBlizzardSpecialEffects +INCLUDE "scripts/viridianforest.asm" - db BUBBLEBEAM - dw AnimationFlashScreen +INCLUDE "data/mapObjects/viridianforest.asm" - db HYPER_BEAM - dw FlashScreenEveryFourFrameBlocks +INCLUDE "data/mapHeaders/ssanne1.asm" - db THUNDERBOLT - dw FlashScreenEveryEightFrameBlocks +INCLUDE "scripts/ssanne1.asm" - db REFLECT - dw AnimationFlashScreen +INCLUDE "data/mapObjects/ssanne1.asm" - db SELFDESTRUCT - dw DoExplodeSpecialEffects +SSAnne1Blocks: ; 612df (18:52df) + INCBIN "maps/ssanne1.blk" - db SPORE - dw AnimationFlashScreen +INCLUDE "data/mapHeaders/ssanne2.asm" - db EXPLOSION - dw DoExplodeSpecialEffects +INCLUDE "scripts/ssanne2.asm" - db ROCK_SLIDE - dw DoRockSlideSpecialEffects +INCLUDE "data/mapObjects/ssanne2.asm" - db $AA - dw Func_79041 +SSAnne2Blocks: ; 6156e (18:556e) + INCBIN "maps/ssanne2.blk" - db $AB - dw Func_7904c +INCLUDE "data/mapHeaders/ssanne4.asm" - db $AC - dw Func_7907c +INCLUDE "scripts/ssanne4.asm" - db TOSS_ANIM - dw DoBallTossSpecialEffects +INCLUDE "data/mapObjects/ssanne4.asm" - db SHAKE_ANIM - dw DoBallShakeSpecialEffects +SSAnne4Blocks: ; 61666 (18:5666) + INCBIN "maps/ssanne4.blk" - db POOF_ANIM - dw DoPoofSpecialEffects +INCLUDE "data/mapHeaders/ssanne5.asm" - db GREATTOSS_ANIM - dw DoBallTossSpecialEffects +INCLUDE "scripts/ssanne5.asm" - db ULTRATOSS_ANIM - dw DoBallTossSpecialEffects +INCLUDE "data/mapObjects/ssanne5.asm" - db $FF ; terminator +SSAnne5Blocks: ; 61761 (18:5761) + INCBIN "maps/ssanne5.blk" -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,(SFX_08_41 - SFX_Headers_08) / 3 - 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 +INCLUDE "data/mapHeaders/ssanne6.asm" -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,(SFX_08_3c - SFX_Headers_08) / 3 - 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 +INCLUDE "scripts/ssanne6.asm" -; 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,(SFX_08_42 - SFX_Headers_08) / 3 - jp PlaySound +INCLUDE "data/mapObjects/ssanne6.asm" -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 +SSAnne6Blocks: ; 61851 (18:5851) + INCBIN "maps/ssanne6.blk" -; 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 +INCLUDE "data/mapHeaders/ssanne7.asm" -; 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 +INCLUDE "scripts/ssanne7.asm" -; 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,(SFX_02_44 - SFX_Headers_02) / 3 - jp PlaySound ; play sound +INCLUDE "data/mapObjects/ssanne7.asm" -BallMoveDistances1: ; 79078 (1e:5078) - db -12,-12,-8 - db $ff ; terminator +SSAnne7Blocks: ; 6195e (18:595e) + INCBIN "maps/ssanne7.blk" -; 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,(SFX_08_58 - SFX_Headers_08) / 3 - 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 +INCLUDE "data/mapHeaders/ssanne8.asm" -BallMoveDistances2: ; 790b3 (1e:50b3) - db 11,12,-12,-7,7,12,-8,8 - db $ff ; terminator +INCLUDE "scripts/ssanne8.asm" -; 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 +INCLUDE "data/mapObjects/ssanne8.asm" -; 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 +SSAnne8Blocks: ; 61adf (18:5adf) + INCBIN "maps/ssanne8.blk" -; 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 +INCLUDE "data/mapHeaders/ssanne9.asm" -AnimationDelay10: ; 79150 (1e:5150) - ld c,10 - jp DelayFrames +INCLUDE "scripts/ssanne9.asm" -; 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 +INCLUDE "data/mapObjects/ssanne9.asm" -; 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 +INCLUDE "data/mapHeaders/ssanne10.asm" -; 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 +INCLUDE "scripts/ssanne10.asm" -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 +INCLUDE "data/mapObjects/ssanne10.asm" -AnimationDarkScreenPalette: ; 791d6 (1e:51d6) -; Changes the screen's palette to a dark palette. - ld bc, $6f6f - jr Func_791fc +INCLUDE "data/mapHeaders/undergroundpathns.asm" -AnimationDarkenMonPalette: ; 791db (1e:51db) -; Darkens the mon sprite's palette. - ld bc, $f9f4 - jr Func_791fc +INCLUDE "scripts/undergroundpathns.asm" -Func_791e0: ; 791e0 (1e:51e0) - ld bc, $fef8 - jr Func_791fc +INCLUDE "data/mapObjects/undergroundpathns.asm" -Func_791e5: ; 791e5 (1e:51e5) - ld bc, $ffff - jr Func_791fc +INCLUDE "data/mapHeaders/undergroundpathwe.asm" -AnimationResetScreenPalette: ; 791ea (1e:51ea) -; Restores the screen's palette to the normal palette. - ld bc, $e4e4 - jr Func_791fc +INCLUDE "scripts/undergroundpathwe.asm" -Func_791ef: ; 791ef (1e:51ef) - ld bc, $0000 - jr Func_791fc +INCLUDE "data/mapObjects/undergroundpathwe.asm" -AnimationLightScreenPalette: ; 791f4 (1e:51f4) -; Changes the screen to use a palette with light colors. - ld bc, $9090 - jr Func_791fc +INCLUDE "data/mapHeaders/diglettscave.asm" -Func_791f9: ; 791f9 (1e:51f9) - ld bc, $4040 +INCLUDE "scripts/diglettscave.asm" -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 ; $ff47 - ret +INCLUDE "data/mapObjects/diglettscave.asm" - ld b, $5 +DiglettsCaveBlocks: ; 61f86 (18:5f86) + INCBIN "maps/diglettscave.blk" -Func_79209: ; 79209 (1e:5209) - ld a, $21 - jp Predef ; indirect jump to Func_480ff (480ff (12:40ff)) +INCLUDE "data/mapHeaders/silphco11.asm" -AnimationShakeScreen: ; 7920e (1e:520e) -; Shakes the screen for a while. Used in Earthquake/Fissure/etc. animations. - ld b, $8 +INCLUDE "scripts/silphco11.asm" -Func_79210: ; 79210 (1e:5210) - ld a, $24 - jp Predef ; indirect jump to Func_48125 (48125 (12:4125)) +INCLUDE "data/mapObjects/silphco11.asm" -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 +SilphCo11Blocks: ; 623c8 (18:63c8) + INCBIN "maps/silphco11.blk" -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 +INCLUDE "engine/hidden_object_functions18.asm" -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 +SECTION "bank19",ROMX,BANK[$19] + +Overworld_GFX: ; 64000 (19:4000) + INCBIN "gfx/tilesets/overworld.w128.t2.2bpp" +Overworld_Block: ; 645e0 (19:45e0) + INCBIN "gfx/blocksets/overworld.bst" +RedsHouse1_GFX: +RedsHouse2_GFX: ; 64de0 (19:4de0) + INCBIN "gfx/tilesets/reds_house.w128.t7.2bpp" +RedsHouse1_Block: +RedsHouse2_Block: ; 65270 (19:5270) + INCBIN "gfx/blocksets/reds_house.bst" +House_GFX: ; 653a0 (19:53a0) + INCBIN "gfx/tilesets/house.w128.t2.2bpp" +House_Block: ; 65980 (19:5980) + INCBIN "gfx/blocksets/house.bst" +Mansion_GFX: ; 65bb0 (19:5bb0) + INCBIN "gfx/tilesets/mansion.w128.t2.2bpp" +Mansion_Block: ; 66190 (19:6190) + INCBIN "gfx/blocksets/mansion.bst" +ShipPort_GFX: ; 66610 (19:6610) + INCBIN "gfx/tilesets/ship_port.w128.t2.2bpp" +ShipPort_Block: ; 66bf0 (19:6bf0) + INCBIN "gfx/blocksets/ship_port.bst" +Interior_GFX: ; 66d60 (19:6d60) + INCBIN "gfx/tilesets/interior.w128.t1.2bpp" +Interior_Block: ; 67350 (19:7350) + INCBIN "gfx/blocksets/interior.bst" +Plateau_GFX: ; 676f0 (19:76f0) + INCBIN "gfx/tilesets/plateau.w128.t10.2bpp" +Plateau_Block: ; 67b50 (19:7b50) + INCBIN "gfx/blocksets/plateau.bst" -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 +SECTION "bank1A",ROMX,BANK[$1A] -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 +INCLUDE "engine/battle/1a.asm" -AnimationSlideEnemyMonOut: ; 792b9 (1e:52b9) -; Slides the enemy mon out of the screen horizontally. - ld hl, AnimationSlideMonOut ; $52af - jp CallWithTurnFlipped +Version_GFX: ; 6802f (1a:402f) +IF _RED + INCBIN "gfx/red/redgreenversion.h8.1bpp" + ; 80 bytes +ENDC +IF _BLUE + INCBIN "gfx/blue/blueversion.h8.1bpp" + ; 64 bytes +ENDC -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 +Dojo_GFX: +Gym_GFX: ; 6807f (1a:407f) + INCBIN "gfx/tilesets/gym.w128.2bpp" +Dojo_Block: +Gym_Block: ; 6867f (1a:467f) + INCBIN "gfx/blocksets/gym.bst" +Mart_GFX: +Pokecenter_GFX: ; 68dbf (1a:4dbf) + INCBIN "gfx/tilesets/pokecenter.w128.2bpp" +Mart_Block: +Pokecenter_Block: ; 693bf (1a:53bf) + INCBIN "gfx/blocksets/pokecenter.bst" +ForestGate_GFX: +Museum_GFX: +Gate_GFX: ; 6960f (1a:560f) + INCBIN "gfx/tilesets/gate.w128.t1.2bpp" +ForestGate_Block: +Museum_Block: +Gate_Block: ; 69bff (1a:5bff) + INCBIN "gfx/blocksets/gate.bst" +Forest_GFX: ; 6a3ff (1a:63ff) + INCBIN "gfx/tilesets/forest.w128.2bpp" +Forest_Block: ; 6a9ff (1a:69ff) + INCBIN "gfx/blocksets/forest.bst" +Facility_GFX: ; 6b1ff (1a:71ff) + INCBIN "gfx/tilesets/facility.w128.2bpp" +Facility_Block: ; 6b7ff (1a:77ff) + INCBIN "gfx/blocksets/facility.bst" -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 +SECTION "bank1B",ROMX,BANK[$1B] -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 +Cemetery_GFX: ; 6c000 (1b:4000) + INCBIN "gfx/tilesets/cemetery.w128.t4.2bpp" +Cemetery_Block: ; 6c5c0 (1b:45c0) + INCBIN "gfx/blocksets/cemetery.bst" +Cavern_GFX: ; 6cca0 (1b:4ca0) + INCBIN "gfx/tilesets/cavern.w128.t14.2bpp" +Cavern_Block: ; 6d0c0 (1b:50c0) + INCBIN "gfx/blocksets/cavern.bst" +Lobby_GFX: ; 6d8c0 (1b:58c0) + INCBIN "gfx/tilesets/lobby.w128.t2.2bpp" +Lobby_Block: ; 6dea0 (1b:5ea0) + INCBIN "gfx/blocksets/lobby.bst" +Ship_GFX: ; 6e390 (1b:6390) + INCBIN "gfx/tilesets/ship.w128.t6.2bpp" +Ship_Block: ; 6e930 (1b:6930) + INCBIN "gfx/blocksets/ship.bst" +Lab_GFX: ; 6ed10 (1b:6d10) + INCBIN "gfx/tilesets/lab.w128.t4.2bpp" +Lab_Block: ; 6f2d0 (1b:72d0) + INCBIN "gfx/blocksets/lab.bst" +Club_GFX: ; 6f670 (1b:7670) + INCBIN "gfx/tilesets/club.w128.t5.2bpp" +Club_Block: ; 6fb20 (1b:7b20) + INCBIN "gfx/blocksets/club.bst" +Underground_GFX: ; 6fd60 (1b:7d60) + INCBIN "gfx/tilesets/underground.w128.t7.2bpp" +Underground_Block: ; 6fef0 (1b:7ef0) + INCBIN "gfx/blocksets/underground.bst" -Func_79337: ; 79337 (1e:5337) - ld l, e - ld h, d +SECTION "bank1C",ROMX,BANK[$1C] -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 +INCLUDE "engine/gamefreak.asm" -Func_79350: ; 79350 (1e:5350) - ld l, e - ld h, d +INCLUDE "engine/hall_of_fame.asm" -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 +INCLUDE "engine/overworld/healing_machine.asm" -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 +INCLUDE "engine/overworld/player_animations.asm" -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 +INCLUDE "engine/battle/1c.asm" -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 +INCLUDE "engine/town_map.asm" -AnimationFlashEnemyMonPic: ; 79398 (1e:5398) -; Flashes the enemy mon's sprite on and off - ld hl, AnimationFlashMonPic - jp CallWithTurnFlipped +INCLUDE "engine/mon_party_sprites.asm" -AnimationShowMonPic: ; 7939e (1e:539e) - xor a - call Func_79842 - call Func_79820 - call Func_79aae - jp Delay3 +INCLUDE "engine/in_game_trades.asm" -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 +INCLUDE "engine/palettes.asm" -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 +INCLUDE "engine/save.asm" -.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 +SECTION "bank1D",ROMX,BANK[$1D] -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] ; $fff3 - 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 +CopycatsHouse1FBlocks: ; 74000 (1d:4000) + INCBIN "maps/copycatshouse1f.blk" -AnimationResetMonPosition: ; 79415 (1e:5415) -; Resets the mon's sprites to be located at the normal coordinates. - ld a, [H_WHOSETURN] ; $fff3 - 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] ; $fff3 - 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] ; $fff3 - 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 +CinnabarMartBlocks: ; 74010 (1d:4010) +PewterMartBlocks: ; 74010 (1d:4010) + INCBIN "maps/pewtermart.blk" -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 +FuchsiaHouse1Blocks: ; 74020 (1d:4020) + INCBIN "maps/fuchsiahouse1.blk" -AnimationShootBallsUpward: ; 794f9 (1e:54f9) -; Shoots one pillar of "energy" balls upwards. Used in Teleport/Sky Attack -; animations. - ld a, [H_WHOSETURN] ; $fff3 - 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 +CinnabarPokecenterBlocks: ; 74030 (1d:4030) +FuchsiaPokecenterBlocks: ; 74030 (1d:4030) + INCBIN "maps/fuchsiapokecenter.blk" -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 +CeruleanHouse2Blocks: ; 7404c (1d:404c) + INCBIN "maps/ceruleanhouse2.blk" -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 +INCLUDE "engine/HoF_room_pc.asm" -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 +INCLUDE "engine/status_ailments.asm" -MinimizedMonSprite: ; 795c4 (1e:55c4) - INCBIN "gfx/minimized_mon_sprite.1bpp" +INCLUDE "engine/items/itemfinder.asm" -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 +INCLUDE "scripts/ceruleancity2.asm" -Func_795f8: ; 795f8 (1e:55f8) - ld a, [H_WHOSETURN] ; $fff3 - 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] ; $fff3 - 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 +INCLUDE "data/mapHeaders/viridiangym.asm" -Func_79633: ; 79633 (1e:5633) - ld a, [hl] - add $7 - cp $61 - ret c - ld a, $7f - ret +INCLUDE "scripts/viridiangym.asm" -Func_7963c: ; 7963c (1e:563c) - ld a, [hl] - sub $7 - cp $30 - ret c - ld a, $7f - ret +INCLUDE "data/mapObjects/viridiangym.asm" -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 +ViridianGymBlocks: ; 74c47 (1d:4c47) + INCBIN "maps/viridiangym.blk" -Func_79652: ; 79652 (1e:5652) - ld a, [H_WHOSETURN] ; $fff3 - and a - ld hl, $9310 - jr z, .asm_7965d - ld hl, $9000 -.asm_7965d - ld de, $c6e8 - ld bc, $31 - jp CopyVideoData +INCLUDE "data/mapHeaders/pewtermart.asm" -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 +INCLUDE "scripts/pewtermart.asm" -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 +INCLUDE "data/mapObjects/pewtermart.asm" -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 +INCLUDE "data/mapHeaders/unknowndungeon1.asm" -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, [$fff3] - 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 +INCLUDE "scripts/unknowndungeon1.asm" -Func_79747: ; 79747 (1e:5747) - ld a, [H_WHOSETURN] ; $fff3 - 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 +INCLUDE "data/mapObjects/unknowndungeon1.asm" -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 +UnknownDungeon1Blocks: ; 74d76 (1d:4d76) + INCBIN "maps/unknowndungeon1.blk" -Func_79793: ; 79793 (1e:5793) - ld a, [H_WHOSETURN] ; $fff3 - 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 +INCLUDE "data/mapHeaders/ceruleanhouse2.asm" -AnimationHideEnemyMonPic: ; 797d8 (1e:57d8) -; Hides the enemy mon's sprite - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - ld hl, AnimationHideMonPic ; $5801 - call CallWithTurnFlipped - ld a, $1 - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - jp Delay3 +INCLUDE "scripts/ceruleanhouse2.asm" -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 +INCLUDE "data/mapObjects/ceruleanhouse2.asm" -AnimationHideMonPic: ; 79801 (1e:5801) -; Hides the mon's sprite. - ld a, [H_WHOSETURN] ; $fff3 - and a - jr z, .asm_7980a - ld a, $c - jr Func_7980c -.asm_7980a - ld a, $65 +INCLUDE "engine/menu/vending_machine.asm" -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 +INCLUDE "data/mapHeaders/fuchsiahouse1.asm" -Func_79820: ; 79820 (1e:5820) - push de - ld a, [H_WHOSETURN] ; $fff3 - 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 +INCLUDE "scripts/fuchsiahouse1.asm" + +INCLUDE "data/mapObjects/fuchsiahouse1.asm" + +INCLUDE "data/mapHeaders/fuchsiapokecenter.asm" + +INCLUDE "scripts/fuchsiapokecenter.asm" + +INCLUDE "data/mapObjects/fuchsiapokecenter.asm" + +INCLUDE "data/mapHeaders/fuchsiahouse2.asm" + +INCLUDE "scripts/fuchsiahouse2.asm" + +INCLUDE "data/mapObjects/fuchsiahouse2.asm" + +FuchsiaHouse2Blocks: ; 751ad (1d:51ad) + INCBIN "maps/fuchsiahouse2.blk" + +INCLUDE "data/mapHeaders/safarizoneentrance.asm" + +INCLUDE "scripts/safarizoneentrance.asm" -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 +INCLUDE "data/mapObjects/safarizoneentrance.asm" -Func_7985b: ; 7985b (1e:585b) - ld a, [hld] - ld [hli], a - inc hl - dec c - jr nz, Func_7985b - ret +SafariZoneEntranceBlocks: ; 75425 (1d:5425) + INCBIN "maps/safarizoneentrance.blk" -Func_79862: ; 79862 (1e:5862) - ld a, [hli] - ld [hld], a - dec hl - dec c - jr nz, Func_79862 - ret +INCLUDE "data/mapHeaders/fuchsiagym.asm" -Func_79869: ; 79869 (1e:5869) - ld a, b - call Func_7986f - ld b, a - ret +INCLUDE "scripts/fuchsiagym.asm" -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 +INCLUDE "data/mapObjects/fuchsiagym.asm" -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 +FuchsiaGymBlocks: ; 756aa (1d:56aa) + INCBIN "maps/fuchsiagym.blk" -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] ; $fff3 - and a - ld a, $31 - jr z, .asm_79ab6 - xor a -.asm_79ab6 - ld [H_DOWNARROWBLINKCNT1], a ; $ff8b - jr asm_79acb +INCLUDE "data/mapHeaders/fuchsiameetingroom.asm" -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 ; $ffba +INCLUDE "scripts/fuchsiameetingroom.asm" -Func_79ace: ; 79ace (1e:5ace) - push hl -.asm_79acf - push bc - push hl - ld a, [H_DOWNARROWBLINKCNT1] ; $ff8b - 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 ; $ffba - pop hl - ret +INCLUDE "data/mapObjects/fuchsiameetingroom.asm" -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 +FuchsiaMeetingRoomBlocks: ; 75722 (1d:5722) + INCBIN "maps/fuchsiameetingroom.blk" -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 +INCLUDE "data/mapHeaders/cinnabargym.asm" -Unknown_79b1b: ; 79b1b (1e:5b1b) - db $31,$46,$5B,$34,$49,$5E,$37,$4C,$61 +INCLUDE "scripts/cinnabargym.asm" -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 +INCLUDE "data/mapObjects/cinnabargym.asm" -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 +CinnabarGymBlocks: ; 75b26 (1d:5b26) + INCBIN "maps/cinnabargym.blk" -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 +INCLUDE "data/mapHeaders/lab1.asm" -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 +INCLUDE "scripts/lab1.asm" -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 +INCLUDE "data/mapObjects/lab1.asm" -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 +Lab1Blocks: ; 75bf1 (1d:5bf1) + INCBIN "maps/lab1.blk" -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 +INCLUDE "data/mapHeaders/lab2.asm" -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 +INCLUDE "scripts/lab2.asm" -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 +INCLUDE "data/mapObjects/lab2.asm" -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 +Lab2Blocks: ; 75c6b (1d:5c6b) + INCBIN "maps/lab2.blk" -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 +INCLUDE "data/mapHeaders/lab3.asm" -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 +INCLUDE "scripts/lab3.asm" -Unknown_79d0d: ; 79d0d (1e:5d0d) - db $00,$01,$03,$05,$07,$09,$0B,$0D,$0F +INCLUDE "data/mapObjects/lab3.asm" -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 +Lab3Blocks: ; 75d15 (1d:5d15) + INCBIN "maps/lab3.blk" -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 +INCLUDE "data/mapHeaders/lab4.asm" -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 +INCLUDE "scripts/lab4.asm" -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 +INCLUDE "data/mapObjects/lab4.asm" -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 +Lab4Blocks: ; 75e10 (1d:5e10) + INCBIN "maps/lab4.blk" -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 +INCLUDE "data/mapHeaders/cinnabarpokecenter.asm" -Func_79dda: ; 79dda (1e:5dda) - call Load16BitRegisters - ld a, c - ld [H_DOWNARROWBLINKCNT1], a ; $ff8b - ld a, b - push hl - call Func_79842 - pop hl - jp Func_79ace +INCLUDE "scripts/cinnabarpokecenter.asm" -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 +INCLUDE "data/mapObjects/cinnabarpokecenter.asm" -Func_79e0d: ; 79e0d (1e:5e0d) - ld a, h - ld [$ffbd], a - ld a, l - ld [H_AUTOBGTRANSFERDEST], a - jp Delay3 +INCLUDE "data/mapHeaders/cinnabarmart.asm" -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 +INCLUDE "scripts/cinnabarmart.asm" - ; 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 +INCLUDE "data/mapObjects/cinnabarmart.asm" - ; 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 +INCLUDE "data/mapHeaders/copycatshouse1f.asm" + +INCLUDE "scripts/copycatshouse1f.asm" + +INCLUDE "data/mapObjects/copycatshouse1f.asm" + +INCLUDE "data/mapHeaders/gary.asm" + +INCLUDE "scripts/gary.asm" + +INCLUDE "data/mapObjects/gary.asm" + +GaryBlocks: ; 7615f (1d:615f) + INCBIN "maps/gary.blk" -.PokeBallAnimations: ; 79e50 (1e:5e50) -; sequence of animations that make up the Poké Ball toss - db POOF_ANIM,HIDEPIC_ANIM,$C2,POOF_ANIM,SHOWPIC_ANIM +INCLUDE "data/mapHeaders/lorelei.asm" -.BlockBall ; 5E55 - ld a,$C1 - ld [W_ANIMATIONID],a - call PlayAnimation - ld a,(SFX_08_43 - SFX_Headers_08) / 3 - call PlaySound ; play sound effect - ld a,BLOCKBALL_ANIM - ld [W_ANIMATIONID],a - jp PlayAnimation +INCLUDE "scripts/lorelei.asm" -Func_79e6a: ; 79e6a (1e:5e6a) - call WaitForSoundToFinish - ld a, [$d05b] - and $7f - ret z - cp $a - ld a, $20 - ld b, $30 - ld c, (SFX_08_50 - SFX_Headers_08) / 3 - jr z, .asm_79e8b - ld a, $e0 - ld b, $ff - ld c, (SFX_08_5a - SFX_Headers_08) / 3 - jr nc, .asm_79e8b - ld a, $50 - ld b, $1 - ld c, (SFX_08_51 - SFX_Headers_08) / 3 -.asm_79e8b - ld [$c0f1], a - ld a, b - ld [$c0f2], a - ld a, c - jp PlaySound +INCLUDE "data/mapObjects/lorelei.asm" -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] ; $ff49 - xor $64 - ld [rOBP1], a ; $ff49 - 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 +LoreleiBlocks: ; 762ac (1d:62ac) + INCBIN "maps/lorelei.blk" -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] ; $ff49 - xor $64 - ld [rOBP1], a ; $ff49 - call DelayFrame - pop bc - dec c - jr nz, Func_79eed - ret +INCLUDE "data/mapHeaders/bruno.asm" -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 +INCLUDE "scripts/bruno.asm" -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 ; $ff49 - call LoadSmokeTileFourTimes - callba asm_f055 - 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] ; $ff49 - xor $64 - ld [rOBP1], a ; $ff49 - call Delay3 - pop bc - dec c - jr nz, .asm_79f73 - pop af - ld [$cfcb], a - jp LoadPlayerSpriteGraphics +INCLUDE "data/mapObjects/bruno.asm" -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 +BrunoBlocks: ; 76403 (1d:6403) + INCBIN "maps/bruno.blk" -PointerTable_79fb0: ; 79fb0 (1e:5fb0) - db $FF,$00 - dw Func_79350 +INCLUDE "data/mapHeaders/agatha.asm" - db $01,$00 - dw Func_79350 +INCLUDE "scripts/agatha.asm" - db $01,$01 - dw Func_79337 +INCLUDE "data/mapObjects/agatha.asm" - db $FF,$01 - dw Func_79337 +AgathaBlocks: ; 76560 (1d:6560) + INCBIN "maps/agatha.blk" -LoadSmokeTileFourTimes: ; 79fc0 (1e:5fc0) - ld hl, $8fc0 - ld c, $4 -.loop - push bc - push hl - call LoadSmokeTile - pop hl - ld bc, $10 - add hl, bc - pop bc - dec c - jr nz, .loop - ret +INCLUDE "engine/menu/league_pc.asm" -LoadSmokeTile: ; 79fd4 (1e:5fd4) - ld de, SSAnneSmokePuffTile ; $5fdd - ld bc, (BANK(SSAnneSmokePuffTile) << 8) + $01 - jp CopyVideoData +INCLUDE "engine/overworld/hidden_items.asm" + +SECTION "bank1E",ROMX,BANK[$1E] + +INCLUDE "engine/battle/animations.asm" -SSAnneSmokePuffTile: ; 79fdd (1e:5fdd) - INCBIN "gfx/ss_anne_smoke_puff.2bpp" +INCLUDE "engine/overworld/cut2.asm" + +INCLUDE "engine/overworld/ssanne.asm" RedFishingTilesFront: ; 79fed (1e:5fed) INCBIN "gfx/red_fishing_tile_front.2bpp" @@ -57541,256 +19003,8 @@ RedFishingRodTiles: ; 7a04d (1e:604d) INCLUDE "data/animations.asm" -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 ; $ffba - ld a, (SFX_08_3c - SFX_Headers_08) / 3 - call PlaySound - call Delay3 - xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - ld [$ffd7], 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 ; $ffba - 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 ; $ffba - 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 ; $ffba - call Delay3 - pop bc - ret -asm_7befa: ; 7befa (1e:7efa) - call DelayFrame - push bc - call GetJoypadStateLowSensitivity - ld a, [$ffb5] - 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 - -ShakeElevator: ; 7bf15 (1e:7f15) - ld de, $ffe0 - call Func_7bf64 - ld de, $240 - call Func_7bf64 - call Delay3 - ld a, $ff - call PlaySound - ld a, [$ffaf] - ld d, a - ld e, $1 - ; number of times to play collision sfx - ld b, $64 -.asm_7bf30 - ld a, e - xor $fe - ld e, a - add d - ld [$ffaf], a - push bc - ld c, BANK(SFX_02_5b) - ld a, (SFX_02_5b - SFX_Headers_02) / 3 - call PlayMusic - pop bc - ld c, $2 - call DelayFrames - dec b - jr nz, .asm_7bf30 - ld a, d - ld [$ffaf], a - ld a, $ff - call PlaySound - ld c, BANK(SFX_02_5f) - ld a, (SFX_02_5f - SFX_Headers_02) / 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 +INCLUDE "engine/evolution.asm" -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 ; $ff8c - xor a - ld [H_DOWNARROWBLINKCNT1], a ; $ff8b - ld [$ff8d], a - ret +INCLUDE "engine/overworld/elevator.asm" -INCLUDE "data/tm_prices.asm" +INCLUDE "engine/items/tm_prices.asm" -- cgit v1.2.3