diff options
Diffstat (limited to 'engine/pokemon')
-rw-r--r-- | engine/pokemon/add_mon.asm | 6 | ||||
-rw-r--r-- | engine/pokemon/bills_pc.asm | 82 | ||||
-rw-r--r-- | engine/pokemon/evos_moves.asm | 186 | ||||
-rw-r--r-- | engine/pokemon/learn_move.asm | 30 | ||||
-rw-r--r-- | engine/pokemon/load_mon_data.asm | 21 | ||||
-rw-r--r-- | engine/pokemon/status_screen.asm | 26 |
6 files changed, 290 insertions, 61 deletions
diff --git a/engine/pokemon/add_mon.asm b/engine/pokemon/add_mon.asm index 611aebf4..c498f02a 100644 --- a/engine/pokemon/add_mon.asm +++ b/engine/pokemon/add_mon.asm @@ -170,6 +170,12 @@ _AddPartyMon:: inc de ld a, [hli] ; catch rate (held item in gen 2) ld [de], a + ld a, [wcf91] + cp KADABRA + jr nz, .notKadabra + ld a, TWISTEDSPOON_GSC + ld [de], a +.notKadabra ld hl, wMonHMoves ld a, [hli] inc de diff --git a/engine/pokemon/bills_pc.asm b/engine/pokemon/bills_pc.asm index 7aba8001..13ad1b20 100644 --- a/engine/pokemon/bills_pc.asm +++ b/engine/pokemon/bills_pc.asm @@ -11,18 +11,15 @@ DisplayPCMainMenu:: and a jr nz, .leaguePCAvailable hlcoord 0, 0 - ld b, 8 - ld c, 14 + lb bc, 8, 14 jr .next .noOaksPC hlcoord 0, 0 - ld b, 6 - ld c, 14 + lb bc, 6, 14 jr .next .leaguePCAvailable hlcoord 0, 0 - ld b, 10 - ld c, 14 + lb bc, 10, 14 .next call TextBoxBorder call UpdateSprites @@ -119,10 +116,13 @@ BillsPCMenu: lb bc, BANK(PokeballTileGraphics), 1 call CopyVideoData call LoadScreenTilesFromBuffer2DisableBGTransfer + hlcoord 0, 12 + lb bc, 4, 18 + call TextBoxBorder hlcoord 0, 0 - ld b, 10 - ld c, 12 + lb bc, 12, 12 call TextBoxBorder + call UpdateSprites hlcoord 2, 2 ld de, BillsPCMenuText call PlaceString @@ -133,7 +133,7 @@ BillsPCMenu: ld [hli], a ; wTopMenuItemX inc hl inc hl - ld a, 4 + ld a, 5 ld [hli], a ; wMaxMenuItem ld a, A_BUTTON | B_BUTTON ld [hli], a ; wMenuWatchedKeys @@ -144,11 +144,8 @@ BillsPCMenu: ld [hli], a ; wListScrollOffset ld [hl], a ; wMenuWatchMovingOutOfBounds ld [wPlayerMonNumber], a - ld hl, WhatText - call PrintText hlcoord 9, 14 - ld b, 2 - ld c, 9 + lb bc, 2, 9 call TextBoxBorder ld a, [wCurrentBoxNum] and $7f @@ -184,6 +181,8 @@ BillsPCMenu: jp z, BillsPCRelease ; release cp $3 jp z, BillsPCChangeBox ; change box + cp $4 + jp z, BillsPCPrintBox ExitBillsPC: ld a, [wFlags_0xcd60] @@ -204,6 +203,10 @@ ExitBillsPC: res 6, [hl] ret +BillsPCPrintBox: + callfar PrintPCBox + jp BillsPCMenu + BillsPCDeposit: ld a, [wPartyCount] dec a @@ -222,11 +225,26 @@ BillsPCDeposit: ld hl, wPartyCount call DisplayMonListMenu jp c, BillsPCMenu + callfar IsThisPartymonStarterPikachu_Party + jr nc, .asm_215ad + call CheckPikachuFollowingPlayer + jr z, .asm_215ad + ld hl, SleepingPikachuText2 + call PrintText + jp BillsPCMenu +.asm_215ad call DisplayDepositWithdrawMenu jp nc, BillsPCMenu + callfar IsThisPartymonStarterPikachu_Party + jr nc, .asm_215c9 + ld e, $1b + callfar PlayPikachuSoundClip + jr .asm_215cf +.asm_215c9 ld a, [wcf91] - call GetCryData - call PlaySoundWaitForCurrent + call PlayCry +.asm_215cf + callabd_ModifyPikachuHappiness PIKAHAPPY_DEPOSITED ld a, PARTY_TO_BOX ld [wMoveMonType], a call MoveMon @@ -253,6 +271,10 @@ BillsPCDeposit: call PrintText jp BillsPCMenu +SleepingPikachuText2: + text_far _SleepingPikachuText2 + text_end + BillsPCWithdraw: ld a, [wBoxCount] and a @@ -276,9 +298,15 @@ BillsPCWithdraw: ld a, [wWhichPokemon] ld hl, wBoxMonNicks call GetPartyMonName + callfar IsThisPartymonStarterPikachu_Box + jr nc, .asm_21660 + ld e, $22 + callfar PlayPikachuSoundClip + jr .asm_21666 +.asm_21660 ld a, [wcf91] - call GetCryData - call PlaySoundWaitForCurrent + call PlayCry +.asm_21666 xor a ; BOX_TO_PARTY ld [wMoveMonType], a call MoveMon @@ -301,6 +329,8 @@ BillsPCRelease: ld hl, wBoxCount call DisplayMonListMenu jp c, BillsPCMenu + callfar IsThisPartymonStarterPikachu_Box + jr c, .asm_216cb ld hl, OnceReleasedText call PrintText call YesNoChoice @@ -317,6 +347,16 @@ BillsPCRelease: call PrintText jp BillsPCMenu +.asm_216cb + ld a, [wWhichPokemon] + ld hl, wBoxMonNicks + call GetPartyMonName + ld e, $27 + callfar PlayPikachuSoundClip + ld hl, PikachuUnhappyText + call PrintText + jp BillsPCMenu + BillsPCChangeBox: farcall ChangeBox jp BillsPCMenu @@ -343,6 +383,7 @@ BillsPCMenuText: next "DEPOSIT <PKMN>" next "RELEASE <PKMN>" next "CHANGE BOX" + next "PRINT BOX" next "SEE YA!" db "@" @@ -381,8 +422,7 @@ INCLUDE "data/moves/hm_moves.asm" DisplayDepositWithdrawMenu: hlcoord 9, 10 - ld b, 6 - ld c, 9 + lb bc, 6, 9 call TextBoxBorder ld a, [wParentMenuItem] and a ; was the Deposit or Withdraw item selected in the parent menu? @@ -488,6 +528,10 @@ CantTakeMonText: text_far _CantTakeMonText text_end +PikachuUnhappyText: + text_far _PikachuUnhappyText + text_end + ReleaseWhichMonText: text_far _ReleaseWhichMonText text_end diff --git a/engine/pokemon/evos_moves.asm b/engine/pokemon/evos_moves.asm index 7d5fd469..165ae02d 100644 --- a/engine/pokemon/evos_moves.asm +++ b/engine/pokemon/evos_moves.asm @@ -1,5 +1,6 @@ ; try to evolve the mon in [wWhichPokemon] TryEvolvingMon: +EvolveTradeMon: ld hl, wCanEvolveFlags xor a ld [hl], a @@ -93,9 +94,13 @@ Evolution_PartyMonLoop: ; loop over party mons jp c, Evolution_PartyMonLoop ; if so, go the next mon jr .doEvolution .checkItemEvo + ld a, [wIsInBattle] ; are we in battle? + and a ld a, [hli] + jp nz, .nextEvoEntry1 ; don't evolve if we're in a battle as wcf91 could be holding the last mon sent out + ld b, a ; evolution item - ld a, [wcf91] ; this is supposed to be the last item used, but it is also used to hold species numbers + ld a, [wcf91] ; last item used cp b ; was the evolution item in this entry used? jp nz, .nextEvoEntry1 ; if not, go to the next evolution entry .checkLevel @@ -140,7 +145,7 @@ Evolution_PartyMonLoop: ; loop over party mons ld [wEvoNewSpecies], a ld a, MONSTER_NAME ld [wNameListType], a - ld a, BANK(TrainerNames) ; bank is not used for monster names + ld a, BANK(MonsterNames) ; bank is not used for monster names ld [wPredefBank], a call GetName push hl @@ -318,23 +323,9 @@ Evolution_ReloadTilesetTilePatterns: jp ReloadTilesetTilePatterns LearnMoveFromLevelUp: - ld hl, EvosMovesPointerTable ld a, [wd11e] ; species ld [wcf91], 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 -.skipEvolutionDataLoop ; loop to skip past the evolution data, which comes before the move data - ld a, [hli] - and a ; have we reached the end of the evolution data? - jr nz, .skipEvolutionDataLoop ; if not, jump back up + call GetMonLearnset .learnSetLoop ; loop over the learn set until we reach a move that is learnt at the current level or the end of the list ld a, [hli] and a ; have we reached the end of the learn set? @@ -370,33 +361,147 @@ LearnMoveFromLevelUp: call GetMoveName call CopyStringToCF4B predef LearnMove + ld a, b + and a + jr z, .done + callfar IsThisPartymonStarterPikachu_Party + jr nc, .done + ld a, [wMoveNum] + cp THUNDERBOLT + jr z, .foundThunderOrThunderbolt + cp THUNDER + jr nz, .done +.foundThunderOrThunderbolt + ld a, $5 + ld [wd49c], a + ld a, $85 + ld [wPikachuMood], a .done ld a, [wcf91] ld [wd11e], a ret -; writes the moves a mon has at level [wCurEnemyLVL] to [de] -; move slots are being filled up sequentially and shifted if all slots are full -WriteMonMoves: - call GetPredefRegisters - push hl - push de - push bc +Func_3b079: + ld a, [wcf91] + push af + call Func_3b0a2 + jr c, .asm_3b09c + + call Func_3b10f + jr nc, .asm_3b096 + + call Func_3b0a2 + jr c, .asm_3b09c + + call Func_3b10f + jr nc, .asm_3b096 + + call Func_3b0a2 + jr c, .asm_3b09c +.asm_3b096 + pop af + ld [wcf91], a + and a + ret +.asm_3b09c + pop af + ld [wcf91], a + scf + ret + +Func_3b0a2: +; XXX what is wcf91 entering this function? + ld a, [wd11e] + ld [wMoveNum], a + predef CanLearnTM + ld a, c + and a + jr nz, .asm_3b0ec + ld hl, Pointer_3b0ee + ld a, [wcf91] + ld de, $1 + call IsInArray + jr c, .asm_3b0d2 + ld a, $ff + ld [wMonHGrowthRate], a + ld a, [wd11e] + ld hl, wMonHMoves + ld de, $1 + call IsInArray + jr c, .asm_3b0ec +.asm_3b0d2 + ld a, [wd11e] + ld d, a + call GetMonLearnset +.loop + ld a, [hli] + and a + jr z, .asm_3b0ea + ld b, a + ld a, [wCurEnemyLVL] + cp b + jr c, .asm_3b0ea + ld a, [hli] + cp d + jr z, .asm_3b0ec + jr .loop +.asm_3b0ea + and a + ret +.asm_3b0ec + scf + ret + +INCLUDE "data/pokemon/unknown_list.asm" + +Func_3b10f: + ld c, $0 +.asm_3b111 ld hl, EvosMovesPointerTable - ld b, 0 - ld a, [wcf91] ; cur mon ID - dec a - add a - rl b - ld c, a + ld b, $0 + add hl, bc add hl, bc ld a, [hli] ld h, [hl] ld l, a -.skipEvoEntriesLoop +.asm_3b11b ld a, [hli] and a - jr nz, .skipEvoEntriesLoop + jr z, .asm_3b130 + cp $2 + jr nz, .asm_3b124 + inc hl +.asm_3b124 + inc hl + ld a, [wcf91] + cp [hl] + jr z, .asm_3b138 + inc hl + ld a, [hl] + and a + jr nz, .asm_3b11b +.asm_3b130 + inc c + ld a, c + cp VICTREEBEL + jr c, .asm_3b111 + and a + ret +.asm_3b138 + inc c + ld a, c + ld [wcf91], a + scf + ret + +; writes the moves a mon has at level [wCurEnemyLVL] to [de] +; move slots are being filled up sequentially and shifted if all slots are full +WriteMonMoves: + call GetPredefRegisters + push hl + push de + push bc + call GetMonLearnset jr .firstMove .nextMove pop de @@ -510,4 +615,21 @@ WriteMonMoves_ShiftMoveData: Evolution_FlagAction: predef_jump FlagActionPredef +GetMonLearnset: + ld hl, EvosMovesPointerTable + ld b, 0 + ld a, [wcf91] + dec a + ld c, a + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a +.skipEvolutionDataLoop ; loop to skip past the evolution data, which comes before the move data + ld a, [hli] + and a ; have we reached the end of the evolution data? + jr nz, .skipEvolutionDataLoop ; if not, jump back up + ret + INCLUDE "data/pokemon/evos_moves.asm" diff --git a/engine/pokemon/learn_move.asm b/engine/pokemon/learn_move.asm index fd92ec57..9f4ac2d2 100644 --- a/engine/pokemon/learn_move.asm +++ b/engine/pokemon/learn_move.asm @@ -121,8 +121,7 @@ TryingToLearn: ld hl, WhichMoveToForgetText call PrintText hlcoord 4, 7 - ld b, 4 - ld c, 14 + lb bc, 4, 14 call TextBoxBorder hlcoord 6, 8 ld de, wMovesString @@ -206,11 +205,36 @@ TryingToLearnText: text_end OneTwoAndText: +; bugfix: In Red/Blue, the SFX_SWAP sound was played in the wrong bank, which played an incorrect sound +; Yellow has fixed this by swapping to the correct bank text_far _OneTwoAndText text_pause text_asm + push af + push bc + push de + push hl + ld a, $1 + ld [wMuteAudioAndPauseMusic], a + call DelayFrame + ld a, [wAudioROMBank] + push af + ld a, BANK(SFX_Swap_1) + ld [wAudioROMBank], a + ld [wAudioSavedROMBank], a + call WaitForSoundToFinish ld a, SFX_SWAP - call PlaySoundWaitForCurrent + call PlaySound + call WaitForSoundToFinish + pop af + ld [wAudioROMBank], a + ld [wAudioSavedROMBank], a + xor a + ld [wMuteAudioAndPauseMusic], a + pop hl + pop de + pop bc + pop af ld hl, PoofText ret diff --git a/engine/pokemon/load_mon_data.asm b/engine/pokemon/load_mon_data.asm index c5e2041a..3d9417a7 100644 --- a/engine/pokemon/load_mon_data.asm +++ b/engine/pokemon/load_mon_data.asm @@ -15,7 +15,7 @@ LoadMonData_:: ld a, [wWhichPokemon] ld e, a - callfar GetMonSpecies + call GetMonSpecies .GetMonHeader ld a, [wcf91] @@ -47,3 +47,22 @@ LoadMonData_:: ld de, wLoadedMon ld bc, wPartyMon2 - wPartyMon1 jp CopyData + +; get species of mon e in list [wMonDataLocation] for LoadMonData +GetMonSpecies: + ld hl, wPartySpecies + ld a, [wMonDataLocation] + and a + jr z, .getSpecies + dec a + jr z, .enemyParty + ld hl, wBoxSpecies + jr .getSpecies +.enemyParty + ld hl, wEnemyPartySpecies +.getSpecies + ld d, 0 + add hl, de + ld a, [hl] + ld [wcf91], a + ret diff --git a/engine/pokemon/status_screen.asm b/engine/pokemon/status_screen.asm index ac03514a..0adfc217 100644 --- a/engine/pokemon/status_screen.asm +++ b/engine/pokemon/status_screen.asm @@ -170,8 +170,25 @@ StatusScreen: call GBPalNormal hlcoord 1, 0 call LoadFlippedFrontSpriteByMonIndex ; draw Pokémon picture + ld a, [wMonDataLocation] + cp ENEMY_PARTY_DATA + jr z, .playRegularCry + cp BOX_DATA + jr z, .checkBoxData + callfar IsThisPartymonStarterPikachu_Party + jr nc, .playRegularCry + jr .playPikachuSoundClip +.checkBoxData + callfar IsThisPartymonStarterPikachu_Box + jr nc, .playRegularCry +.playPikachuSoundClip + ld e, 16 + callfar PlayPikachuSoundClip + jr .continue +.playRegularCry ld a, [wcf91] call PlayCry ; play Pokémon cry +.continue call WaitForTextScrollButtonPress ; wait for button pop af ldh [hTileAnimations], a @@ -251,16 +268,14 @@ PrintStatsBox: and a ; a is 0 from the status screen jr nz, .DifferentBox hlcoord 0, 8 - ld b, 8 - ld c, 8 + lb bc, 8, 8 call TextBoxBorder ; Draws the box hlcoord 1, 9 ; Start printing stats from here ld bc, $19 ; Number offset jr .PrintStats .DifferentBox hlcoord 9, 2 - ld b, 8 - ld c, 9 + lb bc, 8, 9 call TextBoxBorder hlcoord 11, 3 ld bc, $18 @@ -315,8 +330,7 @@ StatusScreen2: hlcoord 19, 3 ld [hl], $78 hlcoord 0, 8 - ld b, 8 - ld c, 18 + lb bc, 8, 18 call TextBoxBorder ; Draw move container hlcoord 2, 9 ld de, wMovesString |