LearnMove: ; 6bc8 (1:6bc8) call SaveScreenTilesToBuffer1 ld a, [wWhichPokemon] ld hl, wPartyMonNicks call GetPartyMonName ld hl, wcd6d ld de, wLearnMoveMonName ld bc, NAME_LENGTH call CopyData DontAbandonLearning: ; 6be0 (1:6be0) ld hl, wPartyMon1Moves ld bc, wPartyMon2Moves - wPartyMon1Moves ld a, [wWhichPokemon] call AddNTimes ld d, h ld e, l ld b, NUM_MOVES .findEmptyMoveSlotLoop ld a, [hl] and a jr z, .next inc hl dec b jr nz, .findEmptyMoveSlotLoop push de call TryingToLearn pop de jp c, AbandonLearning push hl push de ld [wd11e], a call GetMoveName ld hl, OneTwoAndText call PrintText pop de pop hl .next ld a, [wMoveNum] ld [hl], a ld bc, wPartyMon1PP - wPartyMon1Moves add hl, bc push hl push de dec a ld hl, Moves ld bc, MoveEnd - Moves call AddNTimes ld de, wBuffer ld a, BANK(Moves) call FarCopyData ld a, [wBuffer + 5] ; a = move's max PP pop de pop hl ld [hl], a ld a, [wIsInBattle] and a jp z, PrintLearnedMove ld a, [wWhichPokemon] ld b, a ld a, [wPlayerMonNumber] cp b jp nz, PrintLearnedMove ld h, d ld l, e ld de, wBattleMonMoves ld bc, NUM_MOVES call CopyData ld bc, wPartyMon1PP - wPartyMon1OTID add hl, bc ld de, wBattleMonPP ld bc, NUM_MOVES call CopyData jp PrintLearnedMove AbandonLearning: ; 6c5f (1:6c5f) ld hl, AbandonLearningText call PrintText coord hl, 14, 7 lb bc, 8, 15 ld a, TWO_OPTION_MENU ld [wTextBoxID], a call DisplayTextBoxID ; yes/no menu ld a, [wCurrentMenuItem] and a jp nz, DontAbandonLearning ld hl, DidNotLearnText call PrintText ld b, 0 ret PrintLearnedMove: ; 6c83 (1:6c83) ld hl, LearnedMove1Text call PrintText ld b, 1 ret TryingToLearn: ; 6c8c (1:6c8c) push hl ld hl, TryingToLearnText call PrintText coord hl, 14, 7 lb bc, 8, 15 ld a, TWO_OPTION_MENU ld [wTextBoxID], a call DisplayTextBoxID ; yes/no menu pop hl ld a, [wCurrentMenuItem] rra ret c ld bc, -NUM_MOVES add hl, bc push hl ld de, wMoves ld bc, NUM_MOVES call CopyData callab FormatMovesString pop hl .loop push hl ld hl, WhichMoveToForgetText call PrintText coord hl, 4, 7 lb bc, 4, 14 call TextBoxBorder coord hl, 6, 8 ld de, wMovesString ld a, [hFlags_0xFFFA] set 2, a ld [hFlags_0xFFFA], a call PlaceString ld a, [hFlags_0xFFFA] res 2, a ld [hFlags_0xFFFA], a ld hl, wTopMenuItemY ld a, 8 ld [hli], a ; wTopMenuItemY ld a, 5 ld [hli], a ; wTopMenuItemX xor a ld [hli], a ; wCurrentMenuItem inc hl ld a, [wNumMovesMinusOne] ld [hli], a ; wMaxMenuItem ld a, A_BUTTON | B_BUTTON ld [hli], a ; wMenuWatchedKeys ld [hl], 0 ; wLastMenuItem ld hl, hFlags_0xFFFA set 1, [hl] call HandleMenuInput ld hl, hFlags_0xFFFA res 1, [hl] push af call LoadScreenTilesFromBuffer1 pop af pop hl bit 1, a ; pressed b jr nz, .cancel push hl ld a, [wCurrentMenuItem] ld c, a ld b, 0 add hl, bc ld a, [hl] push af push bc call IsMoveHM pop bc pop de ld a, d jr c, .hm pop hl add hl, bc and a ret .hm ld hl, HMCantDeleteText call PrintText pop hl jr .loop .cancel scf ret LearnedMove1Text: ; 6d31 (1:6d31) TX_FAR _LearnedMove1Text db $b,6,"@" WhichMoveToForgetText: ; 6d38 (1:6d38) TX_FAR _WhichMoveToForgetText db "@" AbandonLearningText: ; 6d3d (1:6d3d) TX_FAR _AbandonLearningText db "@" DidNotLearnText: ; 6d42 (1:6d42) TX_FAR _DidNotLearnText db "@" TryingToLearnText: ; 6d47 (1:6d47) TX_FAR _TryingToLearnText db "@" OneTwoAndText: ; 6d4c (1:6d4c) ; 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 TX_FAR _OneTwoAndText db $a TX_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 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 PoofText: ; 6d88 (1:6d88) TX_FAR _PoofText db $a ForgotAndText: ; 6d8d (1:6d8d) TX_FAR _ForgotAndText db "@" HMCantDeleteText: ; 6d92 (1:6d92) TX_FAR _HMCantDeleteText db "@"