ref: 25a3e67b940fc91c11ed9b408fa20762995e6948
dir: /engine/battle/move_effects/transform.asm/
TransformEffect_: ld hl, wBattleMonSpecies ld de, wEnemyMonSpecies ld bc, wEnemyBattleStatus3 ld a, [wEnemyBattleStatus1] ld a, [hWhoseTurn] and a jr nz, .hitTest ld hl, wEnemyMonSpecies ld de, wBattleMonSpecies ld bc, wPlayerBattleStatus3 ld [wPlayerMoveListIndex], a ld a, [wPlayerBattleStatus1] .hitTest bit INVULNERABLE, a ; is mon invulnerable to typical attacks? (fly/dig) jp nz, .failed push hl push de push bc ld hl, wPlayerBattleStatus2 ld a, [hWhoseTurn] and a jr z, .transformEffect ld hl, wEnemyBattleStatus2 .transformEffect ; animation(s) played are different if target has Substitute up bit HAS_SUBSTITUTE_UP, [hl] push af ld hl, HideSubstituteShowMonAnim ld b, BANK(HideSubstituteShowMonAnim) call nz, Bankswitch ld a, [wOptions] add a ld hl, PlayCurrentMoveAnimation ld b, BANK(PlayCurrentMoveAnimation) jr nc, .gotAnimToPlay ld hl, AnimationTransformMon ld b, BANK(AnimationTransformMon) .gotAnimToPlay call Bankswitch ld hl, ReshowSubstituteAnim ld b, BANK(ReshowSubstituteAnim) pop af call nz, Bankswitch pop bc ld a, [bc] set TRANSFORMED, a ; mon is now transformed ld [bc], a pop de pop hl push hl ; transform user into opposing Pokemon ; species ld a, [hl] ld [de], a ; type 1, type 2, catch rate, and moves ld bc, $5 add hl, bc inc de inc de inc de inc de inc de inc bc inc bc call CopyData ld a, [hWhoseTurn] and a jr z, .next ; save enemy mon DVs at wTransformedEnemyMonOriginalDVs ld a, [de] ld [wTransformedEnemyMonOriginalDVs], a inc de ld a, [de] ld [wTransformedEnemyMonOriginalDVs + 1], a dec de .next ; DVs ld a, [hli] ld [de], a inc de ld a, [hli] ld [de], a inc de ; Attack, Defense, Speed, and Special stats inc hl inc hl inc hl inc de inc de inc de ld bc, $8 call CopyData ld bc, wBattleMonMoves - wBattleMonPP add hl, bc ; ld hl, wBattleMonMoves ld b, NUM_MOVES .copyPPLoop ; 5 PP for all moves ld a, [hli] and a jr z, .lessThanFourMoves ld a, $5 ld [de], a inc de dec b jr nz, .copyPPLoop jr .copyStats .lessThanFourMoves ; 0 PP for blank moves xor a ld [de], a inc de dec b jr nz, .lessThanFourMoves .copyStats ; original (unmodified) stats and stat mods pop hl ld a, [hl] ld [wd11e], a call GetMonName ld hl, wEnemyMonUnmodifiedAttack ld de, wPlayerMonUnmodifiedAttack call .copyBasedOnTurn ; original (unmodified) stats ld hl, wEnemyMonStatMods ld de, wPlayerMonStatMods call .copyBasedOnTurn ; stat mods ld hl, TransformedText jp PrintText .copyBasedOnTurn ld a, [hWhoseTurn] and a jr z, .gotStatsOrModsToCopy push hl ld h, d ld l, e pop de .gotStatsOrModsToCopy ld bc, $8 jp CopyData .failed ld hl, PrintButItFailedText_ jp BankswitchEtoF TransformedText: text_far _TransformedText text_end