ref: 32de1b269468f48d073a8e6d52843877baff0ba4
dir: /engine/evos_moves.asm/
Func_3ad0e: ; 3ad0e (e:6d0e) ld hl, wccd3 xor a ld [hl], a ld a, [wWhichPokemon] ; wWhichPokemon ld c, a ld b, $1 call Func_3b057 Func_3ad1c: ; 3ad1c (e:6d1c) ld a, [$ffd7] push af xor a ld [wd121], a dec a ld [wWhichPokemon], a ; wWhichPokemon push hl push bc push de ld hl, W_NUMINPARTY ; W_NUMINPARTY push hl asm_3ad2e: ; 3ad2e (e:6d2e) ld hl, wWhichPokemon ; wWhichPokemon inc [hl] pop hl inc hl ld a, [hl] cp $ff jp z, Func_3aede ld [wHPBarMaxHP], a push hl ld a, [wWhichPokemon] ; wWhichPokemon ld c, a ld hl, wccd3 ld b, $2 call Func_3b057 ld a, c and a jp z, asm_3ad2e ld a, [wHPBarMaxHP] 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, [wcf91] push af xor a ld [wcc49], a call LoadMonData pop af ld [wcf91], 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] ; W_ISLINKBATTLE cp $32 jr z, asm_3ad2e ld a, b cp $2 jr z, .asm_3ada4 ld a, [wccd4] and a jr nz, asm_3ad2e ld a, b cp $1 jr z, .asm_3adad .asm_3ad91 ld a, [W_ISLINKBATTLE] ; W_ISLINKBATTLE cp $32 jp nz, Func_3aed9 ld a, [hli] ld b, a ld a, [wcfb9] cp b jp c, asm_3ad2e jr .asm_3adb6 .asm_3ada4 ld a, [hli] ld b, a ld a, [wcf91] cp b jp nz, Func_3aed9 .asm_3adad ld a, [hli] ld b, a ld a, [wcfb9] cp b jp c, Func_3aeda .asm_3adb6 ld [W_CURENEMYLVL], a ; W_CURENEMYLVL ld a, $1 ld [wd121], a push hl ld a, [hl] ld [wHPBarMaxHP + 1], a ld a, [wWhichPokemon] ; wWhichPokemon ld hl, W_PARTYMON1NAME ; W_PARTYMON1NAME 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 [wcfcb], a call ClearSprites callab Func_7bde9 jp c, Func_3af2e ld hl, EvolvedText call PrintText pop hl ld a, [hl] ld [wd0b5], a ld [wcf98], a ld [wHPBarMaxHP + 1], a ld a, MONSTER_NAME ld [W_LISTTYPE], a ld a, $e ld [wPredefBank], 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, [wd11e] push af ld a, [wd0b5] ld [wd11e], a ld a, $3a call Predef ; indirect jump to IndexToPokedex (41010 (10:5010)) ld a, [wd11e] dec a ld hl, BaseStats ld bc, $1c call AddNTimes ld de, W_MONHEADER call CopyData ld a, [wd0b5] ld [W_MONHDEXNUM], a pop af ld [wd11e], a ld hl, wcfa8 ld de, wcfba ld b, $1 call CalcStats ld a, [wWhichPokemon] ; wWhichPokemon ld hl, W_PARTYMON1_NUM ; W_PARTYMON1_NUM (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, wcfbb ld a, [hld] sub c ld c, a ld a, [hl] sbc b ld b, a ld hl, wcf9a ld a, [hl] add c ld [hld], a ld a, [hl] adc b ld [hl], a dec hl pop bc call CopyData ld a, [wd0b5] ld [wd11e], a xor a ld [wcc49], a call Func_3af5b pop hl ld a, $42 call Predef ; indirect jump to SetPartyMonTypes (5db5e (17:5b5e)) ld a, [W_ISINBATTLE] ; W_ISINBATTLE and a call z, Func_3af52 ld a, $3a call Predef ; indirect jump to IndexToPokedex (41010 (10:5010)) ld a, [wd11e] dec a ld c, a ld b, $1 ld hl, wPokedexOwned ; wPokedexOwned push bc call Func_3b057 pop bc ld hl, wPokedexSeen ; wd30a call Func_3b057 pop de pop hl ld a, [wcf98] 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] ; W_ISLINKBATTLE cp $32 ret z ld a, [W_ISINBATTLE] ; W_ISINBATTLE and a ret nz ld a, [wd121] and a call nz, Func_2307 ret Func_3aef7: ; 3aef7 (e:6ef7) ld a, [wd0b5] push af ld a, [W_MONHDEXNUM] ld [wd0b5], a call GetName pop af ld [wd0b5], a ld hl, wcd6d ld de, wcf4b .asm_3af0e ld a, [de] inc de cp [hl] inc hl ret nz cp $50 jr nz, .asm_3af0e ld a, [wWhichPokemon] ; wWhichPokemon ld bc, $b ld hl, W_PARTYMON1NAME ; W_PARTYMON1NAME call AddNTimes push hl call GetName ld hl, wcd6d 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] ; W_ISLINKBATTLE cp $32 ret z jp ReloadTilesetTilePatterns Func_3af5b: ; 3af5b (e:6f5b) ld hl, EvosMovesPointerTable ld a, [wd11e] 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 .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] ; W_CURENEMYLVL cp b ld a, [hli] jr nz, .asm_3af77 ld d, a ld a, [wcc49] and a jr nz, .asm_3af96 ld hl, W_PARTYMON1_MOVE1 ; W_PARTYMON1_MOVE1 ld a, [wWhichPokemon] ; wWhichPokemon 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 [wd0e0], a ld [wd11e], a call GetMoveName call CopyStringToCF4B ld a, $1b call Predef ; indirect jump to LearnMove (6e43 (1:6e43)) .asm_3afb1 ld a, [wcf91] ld [wd11e], 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 ; [wHPBarMaxHP]: (?) WriteMonMoves: ; 3afb8 (e:6fb8) call GetPredefRegisters push hl push de push bc ld hl, EvosMovesPointerTable ld b, $0 ld a, [wcf91] ; 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] ; W_CURENEMYLVL cp b jp c, .done ; mon level < move level (assumption: learnset is sorted by level) ld a, [wHPBarMaxHP] and a jr z, .skipMinLevelCheck ld a, [wWhichTrade] ; wWhichTrade (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, [wHPBarMaxHP] 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, [wHPBarMaxHP] 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, wHPBarMaxHP ld a, BANK(Moves) call FarCopyData ld a, [wHPBarNewHP + 1] 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 ; FlagActionPredef jp Predef INCLUDE "data/evos_moves.asm"