DoPlayerTurn: ; 34000 call SetPlayerTurn ld a, [$d0ec] and a ret nz jr DoTurn ; 3400a DoEnemyTurn: ; 3400a call SetEnemyTurn ld a, [InLinkBattle] and a jr z, DoTurn ld a, [$d430] cp $e jr z, DoTurn cp $4 ret nc ; fallthrough ; 3401d DoTurn: ; 3401d ; Read in and execute the user's move effects for this turn. xor a ld [$c6b4], a ; Effect command checkturn is called for every move. call CheckTurn ld a, [$c6b4] and a ret nz call UpdateMoveData ; 3402c DoMove: ; 3402c ; Get the user's move effect. ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar ld c, a ld b, 0 ld hl, MoveEffectsPointers add hl, bc add hl, bc ld a, BANK(MoveEffectsPointers) call GetFarHalfword ld de, BattleScriptBuffer .GetMoveEffect ld a, BANK(MoveEffects) call GetFarByte inc hl ld [de], a inc de cp $ff jr nz, .GetMoveEffect ; Start at the first command. ld hl, BattleScriptBuffer ld a, l ld [BattleScriptBufferLoc], a ld a, h ld [BattleScriptBufferLoc + 1], a .ReadMoveEffectCommand ; ld a, [BattleScriptBufferLoc++] ld a, [BattleScriptBufferLoc] ld l, a ld a, [BattleScriptBufferLoc + 1] ld h, a ld a, [hli] push af ld a, l ld [BattleScriptBufferLoc], a ld a, h ld [BattleScriptBufferLoc + 1], a pop af ; $fe is used to terminate branches without ending the read cycle. cp $fe ret nc ; The rest of the commands (01-af) are read from BattleCommandPointers. push bc dec a ld c, a ld b, 0 ld hl, BattleCommandPointers add hl, bc add hl, bc pop bc ld a, BANK(BattleCommandPointers) call GetFarHalfword call .DoMoveEffectCommand jr .ReadMoveEffectCommand .DoMoveEffectCommand jp [hl] ; 34084 CheckTurn: BattleCommand01: ; 34084 ; checkturn ; Repurposed as hardcoded turn handling. Useless as a command. ; Move $ff immediately ends the turn. ld a, BATTLE_VARS_MOVE call GetBattleVar inc a jp z, Function34385 xor a ld [AttackMissed], a ld [EffectFailed], a ld [$c689], a ld [AlreadyDisobeyed], a ld [AlreadyFailed], a ld [$c73e], a ld a, 10 ; 1.0 ld [TypeModifier], a ld a, [hBattleTurn] and a jp nz, CheckEnemyTurn CheckPlayerTurn: ; check recharge ld hl, PlayerSubStatus4 bit 5, [hl] jr z, .CheckSleep res 5, [hl] ; 'must recharge!' ld hl, MustRechargeText call StdBattleTextBox call CantMove jp Function34385 .CheckSleep ld hl, BattleMonStatus ld a, [hl] and $7 jr z, .CheckFrozen dec a ld [BattleMonStatus], a and $7 jr z, .WokeUp xor a ld [$cfca], a ld de, ANIM_SLP call FarPlayBattleAnimation jr .FastAsleep .WokeUp ; 'woke up!' ld hl, WokeUpText call StdBattleTextBox call CantMove call UpdateBattleMonInParty ld hl, Function3df48 call CallBattleCore ld a, $1 ld [$ffd4], a ld hl, PlayerSubStatus1 res 0, [hl] jr .CheckFrozen .FastAsleep ; 'fast asleep!' ld hl, FastAsleepText call StdBattleTextBox ; Snore and Sleep Talk bypass sleep. ld a, [CurPlayerMove] cp SNORE jr z, .CheckFrozen cp SLEEP_TALK jr z, .CheckFrozen call CantMove jp Function34385 .CheckFrozen ld hl, BattleMonStatus bit 5, [hl] jr z, .CheckFlinch ; Flame Wheel and Sacred Fire thaw the user. ld a, [CurPlayerMove] cp FLAME_WHEEL jr z, .CheckFlinch cp SACRED_FIRE jr z, .CheckFlinch ; 'frozen solid!' ld hl, FrozenSolidText call StdBattleTextBox call CantMove jp Function34385 .CheckFlinch ld hl, PlayerSubStatus3 bit 3, [hl] ; flinch jr z, .CheckDisabled res 3, [hl] ; 'flinched!' ld hl, FlinchedText call StdBattleTextBox call CantMove jp Function34385 .CheckDisabled ld hl, PlayerDisableCount ld a, [hl] and a jr z, .CheckConfused dec a ld [hl], a and $f jr nz, .CheckConfused ld [hl], a ld [DisabledMove], a ; 'disabled no more!' ld hl, DisabledNoMoreText call StdBattleTextBox .CheckConfused ld a, [PlayerSubStatus3] add a jr nc, .CheckAttract ld hl, PlayerConfuseCount dec [hl] jr nz, .Confused ld hl, PlayerSubStatus3 res 7, [hl] ; 'confused no more!' ld hl, ConfusedNoMoreText call StdBattleTextBox jr .CheckAttract .Confused ; 'confused!' ld hl, IsConfusedText call StdBattleTextBox xor a ld [$cfca], a ld de, ANIM_CONFUSED call FarPlayBattleAnimation ; 50% chance of hitting itself call BattleRandom cp $80 jr nc, .CheckAttract ld hl, PlayerSubStatus3 ld a, [hl] and $80 ld [hl], a call HitConfusion call CantMove jp Function34385 .CheckAttract ld a, [PlayerSubStatus1] add a ; check bit 7 jr nc, .CheckDisabledMove ; 'in love with' ld hl, InLoveWithText call StdBattleTextBox xor a ld [$cfca], a ld de, ANIM_IN_LOVE call FarPlayBattleAnimation ; 50% chance of infatuation call BattleRandom cp $80 jr c, .CheckDisabledMove ; 'infatuation kept it from attacking!' ld hl, InfatuationText call StdBattleTextBox call CantMove jp Function34385 .CheckDisabledMove ; We can't disable a move that doesn't exist. ld a, [DisabledMove] and a jr z, .CheckParalyzed ; Are we using the disabled move? ld hl, CurPlayerMove cp [hl] jr nz, .CheckParalyzed call MoveDisabled call CantMove jp Function34385 .CheckParalyzed ld hl, BattleMonStatus bit 6, [hl] ret z ; 25% chance to be fully paralyzed call BattleRandom cp $3f ret nc ; 'fully paralyzed!' ld hl, FullyParalyzedText call StdBattleTextBox call CantMove jp Function34385 ; 341f0 CantMove: ; 341f0 ld a, BATTLE_VARS_SUBSTATUS1 call _GetBattleVar res 6, [hl] ld a, BATTLE_VARS_SUBSTATUS3 call _GetBattleVar ld a, [hl] and $ec ld [hl], a call ResetFuryCutterCount ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar cp FLY jr z, .asm_3420f cp $5b ret nz .asm_3420f res 5, [hl] res 6, [hl] jp Function37ece ; 34216 Function34216: ; 34216 call SwitchTurn call CantMove jp SwitchTurn ; 3421f CheckEnemyTurn: ; 3421f ; check recharge ld hl, EnemySubStatus4 bit 5, [hl] jr z, .CheckSleep res 5, [hl] ; 'must recharge!' ld hl, MustRechargeText call StdBattleTextBox call CantMove jp Function34385 .CheckSleep ld hl, EnemyMonStatus ld a, [hl] and $7 jr z, .CheckFrozen dec a ld [EnemyMonStatus], a and a jr z, .WokeUp ; 'fast asleep!' ld hl, FastAsleepText call StdBattleTextBox xor a ld [$cfca], a ld de, ANIM_SLP call FarPlayBattleAnimation jr .FastAsleep .WokeUp ; 'woke up!' ld hl, WokeUpText call StdBattleTextBox call CantMove call UpdateEnemyMonInParty ld hl, Function3e036 call CallBattleCore ld a, $1 ld [$ffd4], a ld hl, EnemySubStatus1 res 0, [hl] jr .CheckFrozen .FastAsleep ; Snore and Sleep Talk bypass sleep. ld a, [CurEnemyMove] cp SNORE jr z, .CheckFrozen cp SLEEP_TALK jr z, .CheckFrozen call CantMove jp Function34385 .CheckFrozen ld hl, EnemyMonStatus bit 5, [hl] jr z, .CheckFlinch ld a, [CurEnemyMove] cp $ac jr z, .CheckFlinch cp $dd jr z, .CheckFlinch ; 'frozen solid!' ld hl, FrozenSolidText call StdBattleTextBox call CantMove jp Function34385 .CheckFlinch ld hl, EnemySubStatus3 bit 3, [hl] jr z, .CheckDisabled res 3, [hl] ; 'flinched!' ld hl, FlinchedText call StdBattleTextBox call CantMove jp Function34385 .CheckDisabled ld hl, EnemyDisableCount ld a, [hl] and a jr z, .CheckConfused dec a ld [hl], a and $f jr nz, .CheckConfused ld [hl], a ld [EnemyDisabledMove], a ; 'disabled no more!' ld hl, DisabledNoMoreText call StdBattleTextBox .CheckConfused ld a, [EnemySubStatus3] add a jr nc, .CheckAttract ld hl, $c67b dec [hl] jr nz, .Confused ld hl, EnemySubStatus3 res 7, [hl] ; 'confused no more!' ld hl, ConfusedNoMoreText call StdBattleTextBox jr .CheckAttract .Confused ; 'confused!' ld hl, IsConfusedText call StdBattleTextBox xor a ld [$cfca], a ld de, ANIM_CONFUSED call FarPlayBattleAnimation ; 50% chance of hitting itself call BattleRandom cp $80 jr nc, .CheckAttract ld hl, EnemySubStatus3 ld a, [hl] and %10000000 ld [hl], a ; 'hurt itself in its confusion!' ld hl, HurtItselfText call StdBattleTextBox call Function355dd call BattleCommand62 call BattleCommand0a xor a ld [$cfca], a ; Flicker the monster pic unless flying or underground. ld de, $0115 ld a, BATTLE_VARS_SUBSTATUS3_OPP call GetBattleVar and $60 call z, PlayFXAnimID ld c, $1 call Function35d1c call BattleCommand0c call CantMove jp Function34385 .CheckAttract ld a, [EnemySubStatus1] add a ; check bit 7 jr nc, .CheckDisabledMove ; 'in love with' ld hl, InLoveWithText call StdBattleTextBox xor a ld [$cfca], a ld de, ANIM_IN_LOVE call FarPlayBattleAnimation ; 50% chance of infatuation call BattleRandom cp $80 jr c, .CheckDisabledMove ; 'infatuation kept it from attacking!' ld hl, InfatuationText call StdBattleTextBox call CantMove jp Function34385 .CheckDisabledMove ; We can't disable a move that doesn't exist. ld a, [EnemyDisabledMove] and a jr z, .CheckParalyzed ; Are we using the disabled move? ld hl, CurEnemyMove cp [hl] jr nz, .CheckParalyzed call MoveDisabled call CantMove jp Function34385 .CheckParalyzed ld hl, EnemyMonStatus bit 6, [hl] ret z ; 25% chance to be fully paralyzed call BattleRandom cp $3f ret nc ; 'fully paralyzed!' ld hl, FullyParalyzedText call StdBattleTextBox call CantMove ; fallthrough ; 34385 Function34385: ; 34385 ld a, $1 ld [$c6b4], a jp ResetDamage ; 3438d MoveDisabled: ; 3438d ; Make sure any charged moves fail ld a, BATTLE_VARS_SUBSTATUS3 call _GetBattleVar res 4, [hl] ld a, BATTLE_VARS_MOVE call GetBattleVar ld [$d265], a call GetMoveName ; 'disabled!' ld hl, DisabledMoveText jp StdBattleTextBox ; 343a5 HitConfusion: ; 343a5 ; 'hurt itself in its confusion!' ld hl, HurtItselfText call StdBattleTextBox xor a ld [CriticalHit], a call Function355dd call BattleCommand62 call BattleCommand0a xor a ld [$cfca], a ; Flicker the monster pic unless flying or underground. ld de, $0115 ld a, BATTLE_VARS_SUBSTATUS3_OPP call GetBattleVar and $60 call z, PlayFXAnimID ld hl, Function3df48 call CallBattleCore ld a, $1 ld [$ffd4], a ld c, $1 call Function35d7e jp BattleCommand0c ; 343db BattleCommand02: ; 343db ; checkobedience ; Enemy can't disobey ld a, [hBattleTurn] and a ret nz call Function34548 ret nz ; If we've already checked this turn ld a, [AlreadyDisobeyed] and a ret nz xor a ld [AlreadyDisobeyed], a ; No obedience in link battles (since no handling exists for enemy) ld a, [InLinkBattle] and a ret nz ld a, [$cfc0] and a ret nz ; If the monster's id doesn't match the player's, ; some conditions need to be met. ld a, PartyMon1ID - PartyMon1 call BattlePartyAttr ld a, [PlayerID] cp [hl] jr nz, .obeylevel inc hl ld a, [PlayerID + 1] cp [hl] ret z .obeylevel ; The maximum obedience level is constrained by owned badges: ld hl, JohtoBadges ; risingbadge bit 7, [hl] ld a, 101 jr nz, .getlevel ; stormbadge bit 5, [hl] ld a, 70 jr nz, .getlevel ; fogbadge bit 3, [hl] ld a, 50 jr nz, .getlevel ; hivebadge bit 1, [hl] ld a, 30 jr nz, .getlevel ; no badges ld a, 10 .getlevel ; c = obedience level ; d = monster level ; b = c + d ld b, a ld c, a ld a, [BattleMonLevel] ld d, a add b ld b, a ; No overflow (this should never happen) jr nc, .checklevel ld b, $ff .checklevel ; If the monster's level is lower than the obedience level, it will obey. ld a, c cp d ret nc ; Random number from 0 to obedience level + monster level .rand1 call BattleRandom swap a cp b jr nc, .rand1 ; The higher above the obedience level the monster is, ; the more likely it is to disobey. cp c ret c ; Sleep-only moves have separate handling, and a higher chance of ; being ignored. Lazy monsters like their sleep. call IgnoreSleepOnly ret c ; Another random number from 0 to obedience level + monster level .rand2 call BattleRandom cp b jr nc, .rand2 ; A second chance. cp c jr c, .UseInstead ; No hope of using a move now. ; b = number of levels the monster is above the obedience level ld a, d sub c ld b, a ; The chance of napping is the difference out of 256. call BattleRandom swap a sub b jr c, .Nap ; The chance of not hitting itself is the same. cp b jr nc, .DoNothing ; 'won't obey!' ld hl, WontObeyText call StdBattleTextBox call HitConfusion jp Function3450c .Nap call BattleRandom add a swap a and 7 jr z, .Nap ld [BattleMonStatus], a ; 'began to nap!' ld hl, BeganToNapText jr .Print .DoNothing call BattleRandom and 3 ; 'loafing around!' ld hl, LoafingAroundText and a jr z, .Print ; 'won't obey!' ld hl, WontObeyText dec a jr z, .Print ; 'turned away!' ld hl, TurnedAwayText dec a jr z, .Print ; 'ignored orders!' ld hl, IgnoredOrdersText .Print call StdBattleTextBox jp Function3450c .UseInstead ; Can't use another move if the monster only has one! ld a, [BattleMonMove2] and a jr z, .DoNothing ; Don't bother trying to handle Disable. ld a, [DisabledMove] and a jr nz, .DoNothing ld hl, BattleMonPP ld de, BattleMonMoves ld b, 0 ld c, NUM_MOVES .GetTotalPP ld a, [hli] and $3f ; exclude pp up add b ld b, a dec c jr z, .CheckMovePP ; Stop at undefined moves. inc de ld a, [de] and a jr nz, .GetTotalPP .CheckMovePP ld hl, BattleMonPP ld a, [CurMoveNum] ld e, a ld d, 0 add hl, de ; Can't use another move if only one move has PP. ld a, [hl] and $3f cp b jr z, .DoNothing ; Make sure we can actually use the move once we get there. ld a, 1 ld [AlreadyDisobeyed], a ld a, [$cfa3] ld b, a ; Save the move we originally picked for afterward. ld a, [CurMoveNum] ld c, a push af .RandomMove call BattleRandom and 3 cp b jr nc, .RandomMove ; Not the move we were trying to use. cp c jr z, .RandomMove ; Make sure it has PP. ld [CurMoveNum], a ld hl, BattleMonPP ld e, a ld d, 0 add hl, de ld a, [hl] and $3f jr z, .RandomMove ; Use it. ld a, [CurMoveNum] ld c, a ld b, 0 ld hl, BattleMonMoves add hl, bc ld a, [hl] ld [CurPlayerMove], a call SetPlayerTurn call UpdateMoveData call DoMove ; Restore original move choice. pop af ld [CurMoveNum], a ; fallthrough ; 3450c Function3450c: ; 3450c xor a ld [LastPlayerMove], a ld [LastEnemyCounterMove], a ld hl, PlayerSubStatus5 res 4, [hl] ; Break encore too. xor a ld [PlayerEncoreCount], a jp EndMoveEffect ; 3451f IgnoreSleepOnly: ; 3451f ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar cp SNORE jr z, .CheckSleep cp SLEEP_TALK jr z, .CheckSleep and a ret .CheckSleep ld a, BATTLE_VARS_STATUS call GetBattleVar and 7 ret z ; 'ignored orders…sleeping!' ld hl, IgnoredSleepingText call StdBattleTextBox call EndMoveEffect scf ret ; 34541 BattleCommand03: ; 34541 ; usedmovetext callba DisplayUsedMoveText ret ; 34548 Function34548: ; 34548 ld a, [hBattleTurn] and a ld a, [$c732] ; player jr z, .end ld a, [$c733] ; enemy .end and a ret ; 34555 BattleCommand04: ; 34555 call Function34548 ret nz ld hl, BattleMonPP ld de, PlayerSubStatus3 ld bc, PlayerTurnsTaken ld a, [hBattleTurn] and a jr z, .asm_34570 ld hl, EnemyMonPP ld de, EnemySubStatus3 ld bc, EnemyTurnsTaken .asm_34570 ; If we've gotten this far, this counts as a turn. ld a, [bc] inc a ld [bc], a ld a, BATTLE_VARS_MOVE call GetBattleVar cp STRUGGLE ret z ld a, [de] and %111 ; rollout | bide | ??? ret nz call .asm_345ad ld a, b and a jp nz, EndMoveEffect ; SubStatus5 inc de inc de ld a, [de] bit 3, a ret nz ld a, [hBattleTurn] and a ld hl, PartyMon1PP ld a, [CurBattleMon] jr z, .asm_345a4 ; skip this part entirely if wildbattle ld a, [IsInBattle] dec a jr z, .asm_345c5 ld hl, OTPartyMon1PP ld a, [CurOTMon] .asm_345a4 call GetPartyLocation push hl call Function3460b pop hl ret c .asm_345ad ld a, [hBattleTurn] and a ld a, [CurMoveNum] jr z, .asm_345b8 ld a, [CurEnemyMoveNum] .asm_345b8 ld c, a ld b, $0 add hl, bc ld a, [hl] and $3f jr z, .asm_345e3 dec [hl] ld b, $0 ret .asm_345c5 ld hl, EnemyMonMoves ld a, [CurEnemyMoveNum] ld c, a ld b, $0 add hl, bc ld a, [hl] cp MIMIC jr z, .asm_345dc ld hl, $c735 add hl, bc ld a, [hl] cp MIMIC ret z .asm_345dc ld hl, $c739 call .asm_345ad ret .asm_345e3 call BattleCommandaa ; get move effect ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar ; continuous? ld hl, .continuousmoves ld de, 1 call IsInArray ; 'has no pp left for [move]' ld hl, HasNoPPLeftText jr c, .print ; 'but no pp is left for the move' ld hl, NoPPLeftText .print call StdBattleTextBox ld b, 1 ret ; 34602 .continuousmoves ; 34602 db EFFECT_RAZOR_WIND db EFFECT_SKY_ATTACK db EFFECT_SKULL_BASH db EFFECT_SOLARBEAM db EFFECT_FLY db EFFECT_ROLLOUT db EFFECT_BIDE db EFFECT_RAMPAGE db $ff ; 3460b Function3460b: ; 3460b ld a, [hBattleTurn] and a ld a, [CurMoveNum] jr z, .asm_34616 ld a, [CurEnemyMoveNum] .asm_34616 ld c, a ld a, 2 call UserPartyAttr ld a, BATTLE_VARS_MOVE call GetBattleVar cp MIMIC jr z, .asm_3462f ld b, 0 add hl, bc ld a, [hl] cp MIMIC jr nz, .asm_3462f scf ret .asm_3462f and a ret ; 34631 BattleCommand05: ; 34631 ; critical ; Determine whether this attack's hit will be critical. xor a ld [CriticalHit], a ld a, BATTLE_VARS_MOVE_POWER call GetBattleVar and a ret z ld a, [hBattleTurn] and a ld hl, EnemyMonItem ld a, [EnemyMonSpecies] jr nz, .Item ld hl, BattleMonItem ld a, [BattleMonSpecies] .Item ld c, 0 cp CHANSEY jr nz, .Farfetchd ld a, [hl] cp LUCKY_PUNCH jr nz, .FocusEnergy ; +2 critical level ld c, 2 jr .Tally .Farfetchd cp FARFETCH_D jr nz, .FocusEnergy ld a, [hl] cp STICK jr nz, .FocusEnergy ; +2 critical level ld c, 2 jr .Tally .FocusEnergy ld a, BATTLE_VARS_SUBSTATUS4 call GetBattleVar bit 2, a jr z, .CheckCritical ; +1 critical level inc c .CheckCritical ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar ld de, 1 ld hl, .Criticals push bc call IsInArray pop bc jr nc, .ScopeLens ; +2 critical level inc c inc c .ScopeLens push bc call GetUserItem ld a, b cp HELD_CRITICAL_UP ; Increased critical chance. Only Scope Lens has this. pop bc jr nz, .Tally ; +1 critical level inc c .Tally ld hl, .Chances ld b, 0 add hl, bc call BattleRandom cp [hl] ret nc ld a, 1 ld [CriticalHit], a ret .Criticals db KARATE_CHOP, RAZOR_WIND, RAZOR_LEAF, CRABHAMMER, SLASH, AEROBLAST, CROSS_CHOP, $ff .Chances ; 6.25% 12.1% 24.6% 33.2% 49.6% 49.6% 49.6% db $11, $20, $40, $55, $80, $80, $80 ; 0 1 2 3 4 5 6 ; 346b2 BattleCommand4e: ; 346b2 ; triplekick ld a, [$c689] ld b, a inc b ld hl, CurDamage + 1 ld a, [hld] ld e, a ld a, [hli] ld d, a .asm_346be dec b ret z ld a, [hl] add e ld [hld], a ld a, [hl] adc d ld [hli], a ; No overflow. jr nc, .asm_346be ld a, $ff ld [hld], a ld [hl], a ret ; 346cd BattleCommand4f: ; 346cd ; kickcounter ld hl, $c689 inc [hl] ret ; 346d2 BattleCommand07: ; 346d2 ; stab ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar cp STRUGGLE ret z ld hl, BattleMonType1 ld a, [hli] ld b, a ld c, [hl] ld hl, EnemyMonType1 ld a, [hli] ld d, a ld e, [hl] ld a, [hBattleTurn] and a jr z, .go ld hl, EnemyMonType1 ld a, [hli] ld b, a ld c, [hl] ld hl, BattleMonType1 ld a, [hli] ld d, a ld e, [hl] .go ld a, BATTLE_VARS_MOVE_TYPE call _GetBattleVar ld [$d265], a push hl push de push bc callba DoWeatherModifiers pop bc pop de pop hl push de push bc callba DoBadgeTypeBoosts pop bc pop de ld a, [$d265] cp b jr z, .stab cp c jr z, .stab jr .asm_3473a .stab ld hl, CurDamage + 1 ld a, [hld] ld h, [hl] ld l, a ld b, h ld c, l srl b rr c add hl, bc ld a, h ld [CurDamage], a ld a, l ld [CurDamage + 1], a ld hl, TypeModifier set 7, [hl] .asm_3473a ld a, BATTLE_VARS_MOVE_TYPE call GetBattleVar ld b, a ld hl, TypeMatchup .asm_34743 ld a, [hli] cp $ff jr z, .end ; foresight cp $fe jr nz, .asm_34757 ld a, BATTLE_VARS_SUBSTATUS1_OPP call GetBattleVar bit 3, a jr nz, .end jr .asm_34743 .asm_34757 cp b jr nz, .asm_347b3 ld a, [hl] cp d jr z, .asm_34763 cp e jr z, .asm_34763 jr .asm_347b3 .asm_34763 push hl push bc inc hl ld a, [TypeModifier] and %10000000 ld b, a ld a, [hl] and a jr nz, .asm_34775 inc a ld [AttackMissed], a xor a .asm_34775 ld [$ffb7], a add b ld [TypeModifier], a xor a ld [$ffb4], a ld hl, CurDamage ld a, [hli] ld [$ffb5], a ld a, [hld] ld [$ffb6], a call Multiply ld a, [$ffb4] ld b, a ld a, [$ffb5] or b ld b, a ld a, [$ffb6] or b jr z, .asm_347ab ld a, $a ld [$ffb7], a ld b, $4 call Divide ld a, [$ffb5] ld b, a ld a, [$ffb6] or b jr nz, .asm_347ab ld a, $1 ld [$ffb6], a .asm_347ab ld a, [$ffb5] ld [hli], a ld a, [$ffb6] ld [hl], a pop bc pop hl .asm_347b3 inc hl inc hl jr .asm_34743 .end call Function347c8 ld a, [$d265] ld b, a ld a, [TypeModifier] and $80 or b ld [TypeModifier], a ret ; 347c8 Function347c8: ; 347c8 ld hl, EnemyMonType1 ld a, [hBattleTurn] and a jr z, Function347d3 ld hl, BattleMonType1 ; fallthrough ; 347d3 Function347d3: ; 347d3 push hl push de push bc ld a, BATTLE_VARS_MOVE_TYPE call GetBattleVar ld d, a ld b, [hl] inc hl ld c, [hl] ld a, $a ld [$d265], a ld hl, TypeMatchup .asm_347e7 ld a, [hli] cp $ff jr z, .asm_3482f ; 0x347ea $43 cp $fe jr nz, .asm_347fb ; 0x347ee $b ld a, BATTLE_VARS_SUBSTATUS1_OPP call GetBattleVar bit SUBSTATUS_IDENTIFIED, a jr nz, .asm_3482f ; 0x347f7 $36 jr .asm_347e7 ; 0x347f9 $ec .asm_347fb cp d jr nz, .asm_34807 ; 0x347fc $9 ld a, [hli] cp b jr z, .asm_3480b ; 0x34800 $9 cp c jr z, .asm_3480b ; 0x34803 $6 jr .asm_34808 ; 0x34805 $1 .asm_34807 inc hl .asm_34808 inc hl jr .asm_347e7 ; 0x34809 $dc .asm_3480b xor a ld [$ffb3], a ld [$ffb4], a ld [$ffb5], a ld a, [hli] ld [$ffb6], a ld a, [$d265] ld [$ffb7], a call Multiply ld a, $a ld [$ffb7], a push bc ld b, $4 call Divide pop bc ld a, [$ffb6] ld [$d265], a jr .asm_347e7 ; 0x3482d $b8 .asm_3482f pop bc pop de pop hl ret ; 34833 BattleCommanda3: ; 34833 call Function347c8 ld a, [$d265] and a ld a, $a jr nz, .asm_3484a ; 3483c $c call ResetDamage xor a ld [TypeModifier], a inc a ld [AttackMissed], a ret .asm_3484a ld [$d265], a ret ; 3484e Function3484e: ; 3484e push hl push de push bc ld a, $a ld [$c716], a ld hl, PlayerUsedMoves ld a, [hl] and a jr z, .asm_348b0 ; 0x3485b $53 ld d, $4 ld e, $0 .asm_34861 ld a, [hli] and a jr z, .asm_3489f ; 0x34863 $3a push hl dec a ld hl, Moves + PlayerMovePower - PlayerMoveStruct call GetMoveAttr and a jr z, .asm_3489b ; 0x3486e $2b inc hl call GetMoveByte ld hl, EnemyMonType1 call Function347d3 ld a, [$d265] cp $b jr nc, .asm_34895 ; 0x3487f $14 and a jr z, .asm_3489b ; 0x34882 $17 cp $a jr nc, .asm_34891 ; 0x34886 $9 ld a, e cp $1 jr nc, .asm_3489b ; 0x3488b $e ld e, $1 jr .asm_3489b ; 0x3488f $a .asm_34891 ld e, $2 jr .asm_3489b ; 0x34893 $6 .asm_34895 call Function34931 pop hl jr .asm_348d7 ; 0x34899 $3c .asm_3489b pop hl dec d jr nz, .asm_34861 ; 0x3489d $c2 .asm_3489f ld a, e cp $2 jr z, .asm_348d7 ; 0x348a2 $33 call Function34939 ld a, e and a jr nz, .asm_348d7 ; 0x348a9 $2c call Function34939 jr .asm_348d7 ; 0x348ae $27 .asm_348b0 ld a, [BattleMonType1] ld b, a ld hl, EnemyMonType1 call Function347d3 ld a, [$d265] cp $b jr c, .asm_348c4 ; 0x348bf $3 call Function34931 .asm_348c4 ld a, [BattleMonType2] cp b jr z, .asm_348d7 ; 0x348c8 $d call Function347d3 ld a, [$d265] cp $b jr c, .asm_348d7 ; 0x348d2 $3 call Function34931 .asm_348d7 call Function348de pop bc pop de pop hl ret ; 348de Function348de: ; 348de ld de, EnemyMonMove1 ld b, 5 ld c, 0 ld a, [$d265] push af .loop dec b jr z, .exit ld a, [de] and a jr z, .exit inc de dec a ld hl, Moves + PlayerMovePower - PlayerMoveStruct call GetMoveAttr and a jr z, .loop inc hl call GetMoveByte ld hl, BattleMonType1 call Function347d3 ld a, [$d265] and a jr z, .loop inc c cp $a jr c, .loop inc c inc c inc c inc c inc c cp $a jr z, .loop ld c, $64 jr .loop .exit pop af ld [$d265], a ld a, c and a jr z, .doubledown ; double down cp $5 jr c, Function34931 ; down cp $64 ret c jr Function34939 ; up .doubledown call Function34931 ; fallthrough ; 34931 Function34931: ; 34931 ld a, [$c716] dec a ld [$c716], a ret ; 34939 Function34939: ; 34939 ld a, [$c716] inc a ld [$c716], a ret ; 34941 Function34941: ; 34941 xor a ld [$c717], a call Function349f4 ret c ld a, [EnemySubStatus1] bit 4, a jr z, .asm_34986 ld a, [$c67f] cp $1 jr nz, .asm_34986 call Function349f4 call Function34b77 call Function34b20 call Function34a85 ld a, e cp $2 jr nz, .asm_34971 ld a, [$c716] add $30 ld [$c717], a ret .asm_34971 call Function349f4 sla c sla c ld b, $ff .asm_3497a inc b sla c jr nc, .asm_3497a ld a, b add $30 ld [$c717], a ret .asm_34986 call Function3484e ld a, [$c716] cp $b ret nc ld a, [LastEnemyCounterMove] and a jr z, .asm_349d2 call Function34a2a ld a, [$c716] and a jr z, .asm_349d2 ld c, a call Function34aa7 ld a, [$c716] cp $ff ret z ld b, a ld a, e cp $2 jr z, .asm_349be call Function3484e ld a, [$c716] cp $a ret nc ld a, b add $10 ld [$c717], a ret .asm_349be ld c, $10 call Function3484e ld a, [$c716] cp $a jr nc, .asm_349cc ld c, $20 .asm_349cc ld a, b add c ld [$c717], a ret .asm_349d2 call Function3484e ld a, [$c716] cp $a ret nc call Function349f4 call Function34b77 call Function34b20 call Function34a85 ld a, e cp $2 ret nz ld a, [$c716] add $10 ld [$c717], a ret ; 349f4 Function349f4: ; 349f4 ld a, [OTPartyCount] cp 2 jr c, .asm_34a26 ld d, a ld e, 0 ld b, $20 ld c, 0 ld hl, OTPartyMon1HP .asm_34a05 ld a, [CurOTMon] cp e jr z, .asm_34a16 push bc ld b, [hl] inc hl ld a, [hld] or b pop bc jr z, .asm_34a16 ld a, c or b ld c, a .asm_34a16 srl b push bc ld bc, $30 add hl, bc pop bc inc e dec d jr nz, .asm_34a05 ld a, c and a jr nz, .asm_34a28 .asm_34a26 scf ret .asm_34a28 and a ret ; 34a2a Function34a2a: ; 34a2a ld hl, OTPartyMon1 ld a, [OTPartyCount] ld b, a ld c, $20 ld d, 0 xor a ld [$c716], a .asm_34a39 ld a, [CurOTMon] cp d push hl jr z, .asm_34a77 push hl push bc ld bc, $0022 add hl, bc pop bc ld a, [hli] or [hl] pop hl jr z, .asm_34a77 ld a, [hl] ld [CurSpecies], a call GetBaseData ld a, [LastEnemyCounterMove] dec a ld hl, Moves + PlayerMovePower - PlayerMoveStruct call GetMoveAttr and a jr z, .asm_34a77 inc hl call GetMoveByte ld hl, $d23d call Function347d3 ld a, [$d265] and a jr nz, .asm_34a77 ld a, [$c716] or c ld [$c716], a .asm_34a77 pop hl dec b ret z push bc ld bc, $30 add hl, bc pop bc inc d srl c jr .asm_34a39 ; 34a85 Function34a85: ; 34a85 push bc ld a, [OTPartyCount] ld e, a ld hl, OTPartyMon1HP ld b, $20 ld c, $0 .asm_34a91 ld a, [hli] or [hl] jr z, .asm_34a98 ld a, b or c ld c, a .asm_34a98 srl b push bc ld bc, $2f add hl, bc pop bc dec e jr nz, .asm_34a91 ld a, c pop bc and c ld c, a ; fallthrough ; 34aa7 Function34aa7: ; 34aa7 ld a, $ff ld [$c716], a ld hl, OTPartyMon1Move1 ld b, $20 ld d, $0 ld e, $0 .asm_34ab5 ld a, b and c jr z, .asm_34b00 push hl push bc ld b, $4 ld c, $0 .asm_34abf ld a, [hli] and a push hl jr z, .asm_34aef dec a ld hl, Moves + PlayerMovePower - PlayerMoveStruct call GetMoveAttr and a jr z, .asm_34ae9 inc hl call GetMoveByte ld hl, BattleMonType1 call Function347d3 ld a, [$d265] cp $a jr c, .asm_34ae9 ld e, $1 cp $b jr c, .asm_34ae9 ld e, $2 jr .asm_34aef .asm_34ae9 pop hl dec b jr nz, .asm_34abf jr .asm_34af0 .asm_34aef pop hl .asm_34af0 ld a, e pop bc pop hl cp $2 jr z, .asm_34b0e cp $1 jr nz, .asm_34b00 ld a, d or b ld d, a jr .asm_34b00 .asm_34b00 push bc ld bc, $0030 add hl, bc pop bc srl b jr nc, .asm_34ab5 ld a, d ld b, a and a ret z .asm_34b0e push bc sla b sla b ld c, $ff .asm_34b15 inc c sla b jr nc, .asm_34b15 ld a, c ld [$c716], a pop bc ret ; 34b20 Function34b20: ; 34b20 push bc ld hl, OTPartySpecies ld b, $20 ld c, $0 .asm_34b28 ld a, [hli] cp $ff jr z, .asm_34b72 push hl ld [CurSpecies], a call GetBaseData ld a, [LastEnemyCounterMove] and a jr z, .asm_34b4a dec a ld hl, Moves + PlayerMovePower - PlayerMoveStruct call GetMoveAttr and a jr z, .asm_34b4a inc hl call GetMoveByte jr .asm_34b5d .asm_34b4a ld a, [BattleMonType1] ld hl, $d23d call Function347d3 ld a, [$d265] cp $b jr nc, .asm_34b6d ld a, [BattleMonType2] .asm_34b5d ld hl, $d23d call Function347d3 ld a, [$d265] cp $b jr nc, .asm_34b6d ld a, b or c ld c, a .asm_34b6d srl b pop hl jr .asm_34b28 .asm_34b72 ld a, c pop bc and c ld c, a ret ; 34b77 Function34b77: ; 34b77 push bc ld de, OTPartySpecies ld b, $20 ld c, 0 ld hl, OTPartyMon1HP .asm_34b82 ld a, [de] inc de cp $ff jr z, .asm_34bac push hl push bc ld b, [hl] inc hl ld c, [hl] inc hl inc hl srl c rl b srl c rl b ld a, [hld] cp c ld a, [hl] sbc b pop bc jr nc, .asm_34ba1 ld a, b or c ld c, a .asm_34ba1 srl b pop hl push bc ld bc, $0030 add hl, bc pop bc jr .asm_34b82 .asm_34bac ld a, c pop bc and c ld c, a ret ; 34bb1 TypeMatchup: ; 34bb1 INCLUDE "battle/type_matchup.asm" ; 34cfd BattleCommand08: ; 34cfd ; damagevariation ; Modify the damage spread between 85% and 100%. ; Because of the method of division the probability distribution ; is not consistent. This makes the highest damage multipliers ; rarer than normal. ; No point in reducing 1 or 0 damage. ld hl, CurDamage ld a, [hli] and a jr nz, .go ld a, [hl] cp 2 ret c .go ; Start with the maximum damage. xor a ld [$ffb4], a dec hl ld a, [hli] ld [$ffb5], a ld a, [hl] ld [$ffb6], a ; Multiply by 85-100%... .loop call BattleRandom rrca cp $d9 ; 85% jr c, .loop ld [$ffb7], a call Multiply ; ...divide by 100%... ld a, $ff ; 100% ld [$ffb7], a ld b, $4 call Divide ; ...to get .85-1.00x damage. ld a, [$ffb5] ld hl, CurDamage ld [hli], a ld a, [$ffb6] ld [hl], a ret ; 34d32 BattleCommand09: ; 34d32 ; checkhit call .DreamEater jp z, .Miss call .Protect jp nz, .Miss call .DrainSub jp z, .Miss call .LockOn ret nz call .FlyDigMoves jp nz, .Miss call .ThunderRain ret z call .UnleashedEnergy ret nz ; Perfect-accuracy moves ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_ALWAYS_HIT ret z call .StatModifiers ld a, [PlayerMoveAccuracy] ld b, a ld a, [hBattleTurn] and a jr z, .BrightPowder ld a, [EnemyMoveAccuracy] ld b, a .BrightPowder push bc call GetOpponentItem ld a, b cp HELD_BRIGHTPOWDER ld a, c ; % miss pop bc jr nz, .asm_34d81 ld c, a ld a, b sub c ld b, a jr nc, .asm_34d81 ld b, 0 .asm_34d81 ld a, b cp $ff jr z, .Hit call BattleRandom cp b jr nc, .Miss .Hit ret .Miss ; Keep the damage value intact if we're using (Hi) Jump Kick. ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_JUMP_KICK jr z, .Missed call ResetDamage .Missed ld a, 1 ld [AttackMissed], a ret .DreamEater ; Return z if we're trying to eat the dream of ; a monster that isn't sleeping. ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_DREAM_EATER ret nz ld a, BATTLE_VARS_STATUS_OPP call GetBattleVar and SLP ret .Protect ; Return nz if the opponent is protected. ld a, BATTLE_VARS_SUBSTATUS1_OPP call GetBattleVar bit SUBSTATUS_PROTECT, a ret z ld c, 40 call DelayFrames ; 'protecting itself!' ld hl, ProtectingItselfText call StdBattleTextBox ld c, 40 call DelayFrames ld a, 1 and a ret .LockOn ; Return nz if we are locked-on and aren't trying to use Earthquake, ; Fissure or Magnitude on a monster that is flying. ld a, BATTLE_VARS_SUBSTATUS5_OPP call _GetBattleVar bit SUBSTATUS_LOCK_ON, [hl] res SUBSTATUS_LOCK_ON, [hl] ret z ld a, BATTLE_VARS_SUBSTATUS3_OPP call GetBattleVar bit SUBSTATUS_FLYING, a jr z, .LockedOn ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar cp EARTHQUAKE ret z cp FISSURE ret z cp MAGNITUDE ret z .LockedOn ld a, 1 and a ret .DrainSub ; Return z if using an HP drain move on a substitute. call CheckSubstituteOpp jr z, .asm_34e00 ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_LEECH_HIT ret z cp EFFECT_DREAM_EATER ret z .asm_34e00 ld a, 1 and a ret .FlyDigMoves ; Check for moves that can hit underground/flying opponents. ; Return z if the current move can hit the opponent. ld a, BATTLE_VARS_SUBSTATUS3_OPP call GetBattleVar and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND ret z bit SUBSTATUS_FLYING, a jr z, .DigMoves ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar cp GUST ret z cp WHIRLWIND ret z cp THUNDER ret z cp TWISTER ret .DigMoves ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar cp EARTHQUAKE ret z cp FISSURE ret z cp MAGNITUDE ret .ThunderRain ; Return z if the current move always hits in rain, and it is raining. ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_THUNDER ret nz ld a, [Weather] cp WEATHER_RAIN ret .UnleashedEnergy ; Return nz if unleashing energy from Bide. ld a, BATTLE_VARS_SUBSTATUS4 call GetBattleVar bit SUBSTATUS_UNLEASH, a ret .StatModifiers ld a, [hBattleTurn] and a ld hl, PlayerMoveAccuracy ld a, [PlayerAccLevel] ld b, a ld a, [EnemyEvaLevel] ld c, a jr z, .asm_34e60 ld hl, EnemyMoveAccuracy ld a, [EnemyAccLevel] ld b, a ld a, [PlayerEvaLevel] ld c, a .asm_34e60 cp b jr c, .asm_34e6b ld a, BATTLE_VARS_SUBSTATUS1_OPP call GetBattleVar bit SUBSTATUS_IDENTIFIED, a ret nz .asm_34e6b ld a, $e sub c ld c, a xor a ld [$ffb4], a ld [$ffb5], a ld a, [hl] ld [$ffb6], a push hl ld d, $2 .asm_34e7a push bc ld hl, .AccProb dec b sla b ld c, b ld b, 0 add hl, bc pop bc ld a, [hli] ld [$ffb7], a call Multiply ld a, [hl] ld [$ffb7], a ld b, $4 call Divide ld a, [$ffb6] ld b, a ld a, [$ffb5] or b jr nz, .asm_34ea2 ld [$ffb5], a ld a, $1 ld [$ffb6], a .asm_34ea2 ld b, c dec d jr nz, .asm_34e7a ld a, [$ffb5] and a ld a, [$ffb6] jr z, .asm_34eaf ld a, $ff .asm_34eaf pop hl ld [hl], a ret .AccProb db 33, 100 ; 33% -6 db 36, 100 ; 36% -5 db 43, 100 ; 43% -4 db 50, 100 ; 50% -3 db 60, 100 ; 60% -2 db 75, 100 ; 75% -1 db 1, 1 ; 100% 0 db 133, 100 ; 133% +1 db 166, 100 ; 166% +2 db 2, 1 ; 200% +3 db 233, 100 ; 233% +4 db 133, 50 ; 266% +5 db 3, 1 ; 300% +6 ; 34ecc BattleCommand90: ; 34ecc ; effectchance xor a ld [EffectFailed], a call CheckSubstituteOpp jr nz, .failed push hl ld hl, PlayerMoveEffectChance ld a, [hBattleTurn] and a jr z, .asm_34ee1 ld hl, EnemyMoveEffectChance .asm_34ee1 call BattleRandom cp [hl] pop hl ret c .failed ld a, 1 ld [EffectFailed], a and a ret ; 34eee BattleCommand0a: ; 34eee ; lowersub ld a, BATTLE_VARS_SUBSTATUS4 call GetBattleVar bit SUBSTATUS_SUBSTITUTE, a ret z ld a, BATTLE_VARS_SUBSTATUS3 call GetBattleVar bit SUBSTATUS_CHARGED, a jr nz, .asm_34f18 ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_RAZOR_WIND jr z, .asm_34f21 cp EFFECT_SKY_ATTACK jr z, .asm_34f21 cp EFFECT_SKULL_BASH jr z, .asm_34f21 cp EFFECT_SOLARBEAM jr z, .asm_34f21 cp EFFECT_FLY jr z, .asm_34f21 .asm_34f18 call .Rampage jr z, .asm_34f21 call Function34548 ret nz .asm_34f21 call Function37ed5 jr c, .asm_34f36 xor a ld [$cfca], a ld [FXAnimIDHi], a inc a ld [$c689], a ld a, SUBSTITUTE jp Function37e44 .asm_34f36 call BattleCommanda7 jp BattleCommandaa .Rampage ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_ROLLOUT jr z, .asm_34f4d cp EFFECT_RAMPAGE jr z, .asm_34f4d ld a, 1 and a ret .asm_34f4d ld a, [$c73e] and a ld a, 0 ld [$c73e], a ret ; 34f57 BattleCommandab: ; 34f57 ; hittarget call BattleCommand0a call BattleCommand0b jp BattleCommand0c ; 34f60 BattleCommand0b: ; 34f60 ld a, [AttackMissed] and a jp nz, BattleCommandaa ld a, [hBattleTurn] and a ld de, PlayerRolloutCount ld a, 1 jr z, .asm_34f76 ld de, EnemyRolloutCount ld a, 4 .asm_34f76 ld [$cfca], a ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_MULTI_HIT jr z, .asm_34fb0 cp EFFECT_CONVERSION jr z, .asm_34fb0 cp EFFECT_DOUBLE_HIT jr z, .asm_34fb0 cp EFFECT_TWINEEDLE jr z, .asm_34fb0 cp EFFECT_TRIPLE_KICK jr z, .asm_34f96 xor a ld [$c689], a .asm_34f96 ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar ld e, a ld d, 0 call PlayFXAnimID ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar cp FLY jr z, .asm_34fad cp DIG ret nz .asm_34fad ; clear sprite jp Function37ec7 .asm_34fb0 ld a, [$c689] and 1 xor 1 ld [$c689], a ld a, [de] cp $1 push af ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar ld e, a ld d, 0 pop af jp z, PlayFXAnimID xor a ld [$cfca], a jp PlayFXAnimID ; 34fd1 BattleCommand92: ; 34fd1 ld a, [AttackMissed] and a jp nz, BattleCommandaa xor a jr BattleCommand91_92 ; 34fdb BattleCommand91: ; 34fdb ld a, [AttackMissed] and a jp nz, BattleCommandaa ld a, [hBattleTurn] and a ld a, 2 jr z, BattleCommand91_92 ld a, 5 ; fallthrough ; 34feb BattleCommand91_92: ; 34feb ld [$cfca], a xor a ld [$c689], a ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar ld e, a ld d, 0 jp PlayFXAnimID ; 34ffd SwitchTurn: ; 34ffd BattleCommand93: ; 34ffd ; switchturn ld a, [hBattleTurn] xor 1 ld [hBattleTurn], a ret ; 35004 BattleCommand0c: ; 35004 ; raisesub ld a, BATTLE_VARS_SUBSTATUS4 call GetBattleVar bit SUBSTATUS_SUBSTITUTE, a ret z call Function37ed5 jp c, BattleCommanda6 xor a ld [$cfca], a ld [FXAnimIDHi], a ld a, $2 ld [$c689], a ld a, SUBSTITUTE jp Function37e44 ; 35023 BattleCommand0d: ; 35023 ; resulttext ld a, [AttackMissed] and a ret z call Function350e4 ld a, BATTLE_VARS_MOVE_ANIM call _GetBattleVar cp FLY jr z, .asm_3504f ; 35032 $1b cp DIG jr z, .asm_3504f ; 35036 $17 ; Move effect: inc hl ld a, [hl] cp EFFECT_MULTI_HIT jr z, .asm_35049 cp EFFECT_DOUBLE_HIT jr z, .asm_35049 cp EFFECT_TWINEEDLE jr z, .asm_35049 jp EndMoveEffect .asm_35049 call BattleCommand0c jp EndMoveEffect .asm_3504f ld a, BATTLE_VARS_SUBSTATUS3 call _GetBattleVar res SUBSTATUS_UNDERGROUND, [hl] res SUBSTATUS_FLYING, [hl] call Function37ece jp EndMoveEffect ; 3505e BattleCommand0e: ; 3505e ; checkfaint ld a, BATTLE_VARS_SUBSTATUS1_OPP call GetBattleVar bit SUBSTATUS_ENDURE, a jr z, .asm_35072 ; 35065 $b call BattleCommand4b ld b, $0 jr nc, .asm_3508b ; 3506c $1d ld b, $1 jr .asm_3508b ; 35070 $19 .asm_35072 call GetOpponentItem ld a, b cp HELD_FOCUS_BAND ld b, $0 jr nz, .asm_3508b ; 3507a $f call BattleRandom cp c jr nc, .asm_3508b ; 35080 $9 call BattleCommand4b ld b, $0 jr nc, .asm_3508b ; 35087 $2 ld b, $2 .asm_3508b push bc call .asm_50bb ld c, $0 ld a, [hBattleTurn] and a jr nz, .asm_3509b call Function35d1c jr .asm_3509e .asm_3509b call Function35d7e .asm_3509e pop bc ld a, b and a ret z dec a jr nz, .asm_350ab ; 350a3 $6 ld hl, EnduredText jp StdBattleTextBox .asm_350ab call GetOpponentItem ld a, [hl] ld [$d265], a call GetItemName ld hl, HungOnText jp StdBattleTextBox .asm_50bb ld a, BATTLE_VARS_SUBSTATUS4_OPP call GetBattleVar bit SUBSTATUS_SUBSTITUTE, a ret nz ld de, PlayerDamageTaken + 1 ld a, [hBattleTurn] and a jr nz, .asm_350ce ld de, EnemyDamageTaken + 1 .asm_350ce ld a, [CurDamage + 1] ld b, a ld a, [de] add b ld [de], a dec de ld a, [CurDamage] ld b, a ld a, [de] adc b ld [de], a ret nc ld a, $ff ld [de], a inc de ld [de], a ret ; 350e4 Function350e4: ; 350e4 ld hl, DoesntAffectText ld de, DoesntAffectText ld a, [TypeModifier] and $7f jr z, .asm_35110 ; 0x350ef $1f ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_FUTURE_SIGHT ld hl, ButItFailedText ld de, ItFailedText jr z, .asm_35110 ; 0x350fe $10 ld hl, AttackMissedText ld de, AttackMissed2Text ld a, [CriticalHit] cp $ff jr nz, .asm_35110 ; 0x3510b $3 ld hl, UnaffectedText .asm_35110 call Function35157 xor a ld [CriticalHit], a ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_JUMP_KICK ret nz ld a, [TypeModifier] and $7f ret z ld hl, CurDamage 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_3513e ; 0x3513a $2 inc a ld [hl], a .asm_3513e ld hl, CrashedText call StdBattleTextBox ld a, $1 ld [$c689], a call Function37e36 ld c, $1 ld a, [hBattleTurn] and a jp nz, Function35d1c jp Function35d7e Function35157: ; 35157 ld a, BATTLE_VARS_SUBSTATUS1_OPP call GetBattleVar bit SUBSTATUS_PROTECT, a jr z, .asm_35162 ld h, d ld l, e .asm_35162 jp StdBattleTextBox ; 35165 BattleCommanda5: ; 35165 ld a, [AttackMissed] and a ret z ld a, [TypeModifier] and $7f jp z, PrintDoesntAffect jp PrintButItFailed ; 35175 BattleCommand0f: ; 35175 ; criticaltext ; Prints the message for critical hits or one-hit KOs. ; If there is no message to be printed, wait 20 frames. ld a, [CriticalHit] and a jr z, .wait dec a add a ld hl, .ptrs ld b, 0 ld c, a add hl, bc ld a, [hli] ld h, [hl] ld l, a call StdBattleTextBox xor a ld [CriticalHit], a .wait ld c, 20 jp DelayFrames .ptrs dw CriticalHitText ; 'critical hit' dw OneHitKOText ; 'one-hit ko' ; 35197 BattleCommandae: ; 35197 ; startloop ld hl, PlayerRolloutCount ld a, [hBattleTurn] and a jr z, .asm_351a2 ld hl, EnemyRolloutCount .asm_351a2 xor a ld [hl], a ret ; 351a5 BattleCommandad: ; 351a5 ; supereffectivelooptext ld a, BATTLE_VARS_SUBSTATUS3 call _GetBattleVar bit 2, a ret nz ; fallthrough ; 351ad BattleCommand10: ; 351ad ; supereffectivetext ld a, [TypeModifier] and $7f cp 10 ; 1.0 ret z ld hl, SuperEffectiveText ; 'super-effective' jr nc, .print ld hl, NotVeryEffectiveText ; 'not very effective' .print jp StdBattleTextBox ; 351c0 BattleCommand11: ; 351c0 ; checkdestinybond ; Faint the user if it fainted an opponent using Destiny Bond. ld hl, EnemyMonHPHi ld a, [hBattleTurn] and a jr z, .asm_351cb ld hl, BattleMonHP .asm_351cb ld a, [hli] or [hl] ret nz ld a, BATTLE_VARS_SUBSTATUS5_OPP call GetBattleVar bit SUBSTATUS_DESTINY_BOND, a jr z, .asm_35231 ld hl, TookDownWithItText call StdBattleTextBox ld a, [hBattleTurn] and a ld hl, EnemyMonMaxHP + 1 bccoord 2, 2 ; hp bar ld a, 0 jr nz, .asm_351f2 ld hl, BattleMonMaxHP + 1 bccoord 10, 9 ; hp bar ld a, 1 .asm_351f2 ld [$d10a], a ld a, [hld] ld [$d1ea], a ld a, [hld] ld [$d1eb], a ld a, [hl] ld [$d1ec], a xor a ld [hld], a ld a, [hl] ld [$d1ed], a xor a ld [hl], a ld [$d1ee], a ld [$d1ef], a ld h, b ld l, c ld a, $b call Predef call RefreshBattleHuds call SwitchTurn xor a ld [$cfca], a ld [FXAnimIDHi], a inc a ld [$c689], a ld a, $c2 call Function37e44 call SwitchTurn jr .asm_3524d ; 3522f $1c .asm_35231 ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_MULTI_HIT jr z, .asm_3524a cp EFFECT_DOUBLE_HIT jr z, .asm_3524a cp EFFECT_TWINEEDLE jr z, .asm_3524a cp EFFECT_TRIPLE_KICK jr z, .asm_3524a cp EFFECT_BEAT_UP jr nz, .asm_3524d .asm_3524a call BattleCommand0c .asm_3524d jp EndMoveEffect ; 35250 BattleCommand12: ; 35250 ; buildopponentrage jp .start .start ld a, [AttackMissed] and a ret nz ld a, BATTLE_VARS_SUBSTATUS4_OPP call GetBattleVar bit SUBSTATUS_RAGE, a ret z ld de, $c72c ld a, [hBattleTurn] and a jr z, .asm_3526b ld de, $c72b .asm_3526b ld a, [de] inc a ret z ld [de], a call SwitchTurn ld hl, RageBuildingText call StdBattleTextBox jp SwitchTurn ; 3527b BattleCommanda2: ; 3527b ; ragedamage ld a, [CurDamage] ld h, a ld b, a ld a, [CurDamage + 1] ld l, a ld c, a ld a, [hBattleTurn] and a ld a, [$c72b] jr z, .asm_35290 ; 3528b $3 ld a, [$c72c] .asm_35290 and a jr z, .asm_3529a ; 35291 $7 dec a add hl, bc jr nc, .asm_35290 ; 35295 $f9 ld hl, $ffff .asm_3529a ld a, h ld [CurDamage], a ld a, l ld [CurDamage + 1], a ret ; 352a3 EndMoveEffect: ; 352a3 ld a, [BattleScriptBufferLoc] ld l, a ld a, [BattleScriptBufferLoc + 1] ld h, a ld a, $ff ld [hli], a ld [hli], a ld [hl], a ret ; 352b1 DittoMetalPowder: ; 352b1 ld a, PartyMon1Species - PartyMon1 call BattlePartyAttr ld a, [hBattleTurn] and a ld a, [hl] jr nz, .Ditto ld a, [TempEnemyMonSpecies] .Ditto cp DITTO ret nz push bc call GetOpponentItem ld a, [hl] cp METAL_POWDER pop bc ret nz ld a, c srl a add c ld c, a ret nc srl b ld a, b and a jr nz, .asm_352d8 inc b .asm_352d8 scf rr c ret ; 352dc BattleCommand06: ; 352dc ; damagestats ld a, [hBattleTurn] and a jp nz, EnemyAttackDamage ; fallthrough ; 352e2 PlayerAttackDamage: ; 352e2 ; Return move power d, player level e, enemy defense c and player attack b. call ResetDamage ld hl, PlayerMovePower ld a, [hli] and a ld d, a ret z ld a, [hl] cp SPECIAL jr nc, .special ; Physical ld hl, EnemyMonDef ld a, [hli] ld b, a ld c, [hl] ; Reflect ld a, [EnemyScreens] bit 4, a jr z, .physicalcrit sla c rl b .physicalcrit ld hl, BattleMonAtk call GetDamageStatsCritical jr c, .thickclub ld hl, $c6c3 ld a, [hli] ld b, a ld c, [hl] ld hl, PlayerStats jr .thickclub .special ld hl, EnemyMonSpclDef ld a, [hli] ld b, a ld c, [hl] ; Light Screen ld a, [EnemyScreens] bit 3, a jr z, .specialcrit sla c rl b .specialcrit ld hl, BattleMonSpclAtk call GetDamageStatsCritical jr c, .lightball ld hl, $c6c9 ld a, [hli] ld b, a ld c, [hl] ld hl, $c6bc .lightball ; Note: Returns player special attack at hl in hl. call LightBallBoost jr .done .thickclub ; Note: Returns player attack at hl in hl. call ThickClubBoost .done call Function3534d ld a, [BattleMonLevel] ld e, a call DittoMetalPowder ld a, 1 and a ret ; 3534d Function3534d: ; 3534d ; Truncate 16-bit values hl and bc to 8-bit values b and c respectively. ; b = hl, c = bc ld a, h or b jr z, .asm_3536b srl b rr c srl b rr c ld a, c or b jr nz, .asm_3535e inc c .asm_3535e srl h rr l srl h rr l ld a, l or h jr nz, .asm_3536b inc l .asm_3536b ld a, [InLinkBattle] cp 3 jr z, .done ld a, h or b jr nz, Function3534d .done ld b, l ret ; 35378 GetDamageStatsCritical: ; 35378 ; Return carry if non-critical. ld a, [CriticalHit] and a scf ret z ; fallthrough ; 3537e GetDamageStats: ; 3537e ; Return the attacker's offensive stat and the defender's defensive ; stat based on whether the attacking type is physical or special. push hl push bc ld a, [hBattleTurn] and a jr nz, .enemy ld a, [PlayerMoveType] cp SPECIAL ; special ld a, [PlayerSAtkLevel] ld b, a ld a, [EnemySDefLevel] jr nc, .end ; physical ld a, [PlayerAtkLevel] ld b, a ld a, [EnemyDefLevel] jr .end .enemy ld a, [EnemyMoveType] cp SPECIAL ; special ld a, [EnemySAtkLevel] ld b, a ld a, [PlayerSDefLevel] jr nc, .end ; physical ld a, [EnemyAtkLevel] ld b, a ld a, [PlayerDefLevel] .end cp b pop bc pop hl ret ; 353b5 ThickClubBoost: ; 353b5 ; Return in hl the stat value at hl. ; If the attacking monster is Cubone or Marowak and ; it's holding a Thick Club, double it. push bc push de ld b, CUBONE ld c, MAROWAK ld d, THICK_CLUB call SpeciesItemBoost pop de pop bc ret ; 353c3 LightBallBoost: ; 353c3 ; Return in hl the stat value at hl. ; If the attacking monster is Pikachu and it's ; holding a Light Ball, double it. push bc push de ld b, PIKACHU ld c, PIKACHU ld d, LIGHT_BALL call SpeciesItemBoost pop de pop bc ret ; 353d1 SpeciesItemBoost: ; 353d1 ; Return in hl the stat value at hl. ; If the attacking monster is species b or c and ; it's holding item d, double it. ld a, [hli] ld l, [hl] ld h, a push hl ld a, PartyMon1Species - PartyMon1 call BattlePartyAttr ld a, [hBattleTurn] and a ld a, [hl] jr z, .CompareSpecies ld a, [TempEnemyMonSpecies] .CompareSpecies pop hl cp b jr z, .GetItem cp c ret nz .GetItem push hl call GetUserItem ld a, [hl] pop hl cp d ret nz ; Double the stat sla l rl h ret ; 353f6 EnemyAttackDamage: ; 353f6 call ResetDamage ; No damage dealt with 0 power. ld hl, EnemyMovePower ld a, [hli] ; hl = EnemyMoveType ld d, a and a ret z ld a, [hl] cp SPECIAL jr nc, .Special ; Physical ld hl, BattleMonDef ld a, [hli] ld b, a ld c, [hl] ; Reflect ld a, [PlayerScreens] bit 4, a jr z, .physicalcrit sla c rl b .physicalcrit ld hl, EnemyMonAtk call GetDamageStatsCritical jr c, .thickclub ld hl, $c6b8 ld a, [hli] ld b, a ld c, [hl] ld hl, EnemyStats jr .thickclub .Special ld hl, BattleMonSpclDef ld a, [hli] ld b, a ld c, [hl] ; Light Screen ld a, [PlayerScreens] bit 3, a jr z, .specialcrit sla c rl b .specialcrit ld hl, EnemyMonSpclAtk call GetDamageStatsCritical jr c, .lightball ld hl, $c6be ld a, [hli] ld b, a ld c, [hl] ld hl, $c6c7 .lightball call LightBallBoost jr .done .thickclub call ThickClubBoost .done call Function3534d ld a, [EnemyMonLevel] ld e, a call DittoMetalPowder ld a, 1 and a ret ; 35461 BattleCommanda1: ; 35461 ; beatup call ResetDamage ld a, [hBattleTurn] and a jp nz, .asm_354ef ld a, [PlayerSubStatus3] bit 2, a jr nz, .asm_35482 ; 3546f $11 ld c, $14 call DelayFrames xor a ld [PlayerRolloutCount], a ld [DefaultFlypoint], a ld [$c72d], a jr .asm_3548d ; 35480 $b .asm_35482 ld a, [PlayerRolloutCount] ld b, a ld a, [PartyCount] sub b ld [DefaultFlypoint], a .asm_3548d ld a, [DefaultFlypoint] ld hl, PartyMon1Nickname call GetNick ld a, $22 call Function355bd ld a, [hli] or [hl] jp z, Function355b0 ld a, [DefaultFlypoint] ld c, a ld a, [CurBattleMon] cp [hl] ld hl, BattleMonStatus jr z, .asm_354b2 ; 354ab $5 ld a, $20 call Function355bd .asm_354b2 ld a, [hl] and a jp nz, Function355b0 ld a, $1 ld [$c72d], a ld hl, BeatUpAttackText call StdBattleTextBox ld a, [EnemyMonSpecies] ld [CurSpecies], a call GetBaseData ld a, [$d239] ld c, a push bc ld a, $0 call Function355bd ld a, [hl] ld [CurSpecies], a call GetBaseData ld a, [$d238] pop bc ld b, a push bc ld a, $1f call Function355bd ld a, [hl] ld e, a pop bc ld a, [PlayerMovePower] ld d, a ret .asm_354ef ld a, [EnemySubStatus3] bit 2, a jr nz, .asm_35502 xor a ld [EnemyRolloutCount], a ld [DefaultFlypoint], a ld [$c72d], a jr .asm_3550d .asm_35502 ld a, [EnemyRolloutCount] ld b, a ld a, [OTPartyCount] sub b ld [DefaultFlypoint], a .asm_3550d ld a, [IsInBattle] dec a jr z, .asm_3556b ld a, [InLinkBattle] and a jr nz, .asm_35532 ld a, [$cfc0] and a jr nz, .asm_35532 ld a, [DefaultFlypoint] ld c, a ld b, $0 ld hl, OTPartySpecies add hl, bc ld a, [hl] ld [$d265], a call GetPokemonName jr .asm_35544 .asm_35532 ld a, [DefaultFlypoint] ld hl, OTPartyMon1Nickname ld bc, $000b call AddNTimes ld de, StringBuffer1 call CopyBytes .asm_35544 ld a, $22 call Function355bd ld a, [hli] or [hl] jp z, Function355b0 ld a, [DefaultFlypoint] ld b, a ld a, [CurOTMon] cp b ld hl, EnemyMonStatus jr z, .asm_35560 ld a, $20 call Function355bd .asm_35560 ld a, [hl] and a jr nz, Function355b0 ld a, $1 ld [$c72d], a jr .asm_3557d .asm_3556b ld a, [EnemyMonSpecies] ld [$d265], a call GetPokemonName ld hl, BeatUpAttackText call StdBattleTextBox jp EnemyAttackDamage .asm_3557d ld hl, BeatUpAttackText call StdBattleTextBox ld a, [BattleMonSpecies] ld [CurSpecies], a call GetBaseData ld a, [$d239] ld c, a push bc ld a, $0 call Function355bd ld a, [hl] ld [CurSpecies], a call GetBaseData ld a, [$d238] pop bc ld b, a push bc ld a, $1f call Function355bd ld a, [hl] ld e, a pop bc ld a, [EnemyMovePower] ld d, a ret ; 355b0 Function355b0: ; 355b0 ld b, $12 ; buildopponentrage jp SkipToBattleCommand ; 355b5 BattleCommanda8: ; 355b5 ld a, [$c72d] and a ret nz jp PrintButItFailed ; 355bd Function355bd: ; 355bd push bc ld c, a ld b, 0 ld a, [hBattleTurn] and a ld hl, PartyMon1Species jr z, .asm_355cc ld hl, OTPartyMon1Species .asm_355cc ld a, [DefaultFlypoint] add hl, bc call GetPartyLocation pop bc ret ; 355d5 BattleCommanda9: ; 355d5 ; clearmissdamage ld a, [AttackMissed] and a ret z jp ResetDamage ; 355dd Function355dd: ; 355dd call ResetDamage ld a, [hBattleTurn] and a ld hl, BattleMonDef ld de, PlayerScreens ld a, [BattleMonLevel] jr z, .asm_355f7 ld hl, EnemyMonDef ld de, EnemyScreens ld a, [EnemyMonLevel] .asm_355f7 push af ld a, [hli] ld b, a ld c, [hl] ld a, [de] bit 4, a jr z, .asm_35604 sla c rl b .asm_35604 dec hl dec hl dec hl ld a, [hli] ld l, [hl] ld h, a call Function3534d ld d, $28 pop af ld e, a ret ; 35612 BattleCommand62: ; 35612 ; damagecalc ; Return a damage value for move power d, player level e, enemy defense c and player attack b. ; Return 1 if successful, else 0. ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar ; Selfdestruct and Explosion halve defense. cp EFFECT_EXPLOSION jr nz, .asm_35620 srl c jr nz, .asm_35620 inc c .asm_35620 ; Variable-hit moves and Conversion can have a power of 0. cp EFFECT_MULTI_HIT jr z, .asm_3562b cp EFFECT_CONVERSION jr z, .asm_3562b ; No damage if move power is 0. ld a, d and a ret z .asm_3562b ; Minimum defense value is 1. ld a, c and a jr nz, .asm_35631 ld c, 1 .asm_35631 xor a ld hl, hDividend ld [hli], a ld [hli], a ld [hl], a ; Level * 2 ld a, e add a jr nc, .asm_3563e ld [hl], $1 .asm_3563e inc hl ld [hli], a ; / 5 ld a, 5 ld [hld], a push bc ld b, $4 call Divide pop bc ; + 2 inc [hl] inc [hl] ; * bp inc hl ld [hl], d call Multiply ; * Attack ld [hl], b call Multiply ; / Defense ld [hl], c ld b, $4 call Divide ; / 50 ld [hl], 50 ld b, $4 call Divide ; Item boosts call GetUserItem ld a, b and a jr z, .DoneItem ld hl, TypeBoostItems .NextItem ld a, [hli] cp $ff jr z, .DoneItem ; Item effect cp b ld a, [hli] jr nz, .NextItem ; Type ld b, a ld a, BATTLE_VARS_MOVE_TYPE call GetBattleVar cp b jr nz, .DoneItem ; * 100 + item effect amount ld a, c add 100 ld [hMultiplier], a call Multiply ; / 100 ld a, 100 ld [hDivisor], a ld b, 4 call Divide .DoneItem ; Critical hits call .CriticalMultiplier ; Update CurDamage (capped at 997). ld hl, CurDamage ld b, [hl] ld a, [$ffb6] add b ld [$ffb6], a jr nc, .asm_356a5 ld a, [$ffb5] inc a ld [$ffb5], a and a jr z, .Cap .asm_356a5 ld a, [$ffb3] ld b, a ld a, [$ffb4] or a jr nz, .Cap ld a, [$ffb5] cp 998 / $100 jr c, .asm_356bd cp 998 / $100 + 1 jr nc, .Cap ld a, [$ffb6] cp 998 % $100 jr nc, .Cap .asm_356bd inc hl ld a, [$ffb6] ld b, [hl] add b ld [hld], a ld a, [$ffb5] ld b, [hl] adc b ld [hl], a jr c, .Cap ld a, [hl] cp 998 / $100 jr c, .asm_356df cp 998 / $100 + 1 jr nc, .Cap inc hl ld a, [hld] cp 998 % $100 jr c, .asm_356df .Cap ld a, 997 / $100 ld [hli], a ld a, 997 % $100 ld [hld], a .asm_356df ; Minimum neutral damage is 2 (bringing the cap to 999). inc hl ld a, [hl] add 2 ld [hld], a jr nc, .asm_356e7 inc [hl] .asm_356e7 ld a, 1 and a ret .CriticalMultiplier ld a, [CriticalHit] and a ret z ; x2 ld a, [$ffb6] add a ld [$ffb6], a ld a, [$ffb5] rl a ld [$ffb5], a ; Cap at $ffff. ret nc ld a, $ff ld [$ffb5], a ld [$ffb6], a ret ; 35703 TypeBoostItems: ; 35703 db HELD_NORMAL_BOOST, NORMAL ; Pink/Polkadot Bow db HELD_FIGHTING_BOOST, FIGHTING ; Blackbelt db HELD_FLYING_BOOST, FLYING ; Sharp Beak db HELD_POISON_BOOST, POISON ; Poison Barb db HELD_GROUND_BOOST, GROUND ; Soft Sand db HELD_ROCK_BOOST, ROCK ; Hard Stone db HELD_BUG_BOOST, BUG ; Silverpowder db HELD_GHOST_BOOST, GHOST ; Spell Tag db HELD_FIRE_BOOST, FIRE ; Charcoal db HELD_WATER_BOOST, WATER ; Mystic Water db HELD_GRASS_BOOST, GRASS ; Miracle Seed db HELD_ELECTRIC_BOOST, ELECTRIC ; Magnet db HELD_PSYCHIC_BOOST, PSYCHIC ; Twistedspoon db HELD_ICE_BOOST, ICE ; Nevermeltice db HELD_DRAGON_BOOST, DRAGON ; Dragon Scale db HELD_DARK_BOOST, DARK ; Blackglasses db HELD_STEEL_BOOST, STEEL ; Metal Coat db $ff ; 35726 BattleCommand3f: ; 35726 ; constantdamage ld hl, BattleMonLevel ld a, [hBattleTurn] and a jr z, .asm_35731 ld hl, EnemyMonLevel .asm_35731 ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_LEVEL_DAMAGE ld b, [hl] ld a, 0 jr z, .asm_3578c ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_PSYWAVE jr z, .asm_35758 cp EFFECT_SUPER_FANG jr z, .asm_3576b cp EFFECT_REVERSAL jr z, .asm_35792 ld a, BATTLE_VARS_MOVE_POWER call GetBattleVar ld b, a ld a, $0 jr .asm_3578c .asm_35758 ld a, b srl a add b ld b, a .asm_3575d call BattleRandom and a jr z, .asm_3575d ; 35761 $fa cp b jr nc, .asm_3575d ; 35764 $f7 ld b, a ld a, $0 jr .asm_3578c ; 35769 $21 .asm_3576b ld hl, EnemyMonHPHi ld a, [hBattleTurn] and a jr z, .asm_35776 ; 35771 $3 ld hl, BattleMonHP .asm_35776 ld a, [hli] srl a ld b, a ld a, [hl] rr a push af ld a, b pop bc and a jr nz, .asm_3578c ; 35781 $9 or b ld a, $0 jr nz, .asm_3578c ; 35786 $4 ld b, $1 jr .asm_3578c ; 3578a $0 .asm_3578c ld hl, CurDamage ld [hli], a ld [hl], b ret .asm_35792 ld hl, BattleMonHP ld a, [hBattleTurn] and a jr z, .asm_3579d ; 35798 $3 ld hl, EnemyMonHPHi .asm_3579d xor a ld [$ffb3], a ld [$ffb4], a ld a, [hli] ld [$ffb5], a ld a, [hli] ld [$ffb6], a ld a, $30 ld [$ffb7], a call Multiply ld a, [hli] ld b, a ld a, [hl] ld [$ffb7], a ld a, b and a jr z, .asm_357d6 ld a, [$ffb7] srl b rr a srl b rr a ld [$ffb7], a ld a, [$ffb5] ld b, a srl b ld a, [$ffb6] rr a srl b rr a ld [$ffb6], a ld a, b ld [$ffb5], a .asm_357d6 ld b, $4 call Divide ld a, [$ffb6] ld b, a ld hl, .FlailPower .asm_357e1 ld a, [hli] cp b jr nc, .asm_357e8 inc hl jr .asm_357e1 .asm_357e8 ld a, [hBattleTurn] and a ld a, [hl] jr nz, .asm_357f8 ld hl, PlayerMovePower ld [hl], a push hl call PlayerAttackDamage jr .asm_35800 .asm_357f8 ld hl, EnemyMovePower ld [hl], a push hl call EnemyAttackDamage .asm_35800 call BattleCommand62 pop hl ld [hl], 1 ret .FlailPower ; px, bp db 1, 200 db 4, 150 db 9, 100 db 16, 80 db 32, 40 db 48, 20 ; 35813 BattleCommand40: ; 35813 ; counter ld a, 1 ld [AttackMissed], a ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP call GetBattleVar and a ret z ld b, a callab GetMoveEffect ld a, b cp EFFECT_COUNTER ret z call BattleCommanda3 ld a, [$d265] and a ret z call Function36abf ret z ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP call GetBattleVar dec a ld de, StringBuffer1 call GetMoveData ld a, [$d075] and a ret z ld a, [$d076] cp SPECIAL ret nc ld hl, CurDamage ld a, [hli] or [hl] ret z ld a, [hl] add a ld [hld], a ld a, [hl] adc a ld [hl], a jr nc, .capped ld a, $ff ld [hli], a ld [hl], a .capped xor a ld [AttackMissed], a ret ; 35864 BattleCommand41: ; 35864 ; encore ld hl, EnemyMonMoves ld de, EnemyEncoreCount ld a, [hBattleTurn] and a jr z, .asm_35875 ; 3586d $6 ld hl, BattleMonMoves ld de, PlayerEncoreCount .asm_35875 ld a, BATTLE_VARS_LAST_MOVE_OPP call GetBattleVar and a jp z, Function35923 cp STRUGGLE jp z, Function35923 cp ENCORE jp z, Function35923 cp MIRROR_MOVE jp z, Function35923 ld b, a .asm_3588e ld a, [hli] cp b jr nz, .asm_3588e ld bc, $0005 add hl, bc ld a, [hl] and $3f jp z, Function35923 ld a, [AttackMissed] and a jp nz, Function35923 ld a, BATTLE_VARS_SUBSTATUS5_OPP call _GetBattleVar bit 4, [hl] jp nz, Function35923 set 4, [hl] call BattleRandom and $3 inc a inc a inc a ld [de], a call Function36abf jr nz, .asm_3591a ld a, [hBattleTurn] and a jr z, .asm_358ef push hl ld a, [LastPlayerMove] ld b, a ld c, $0 ld hl, BattleMonMoves .asm_358cc ld a, [hli] cp b jr z, .asm_358dd inc c ld a, c cp $4 jr c, .asm_358cc pop hl res 4, [hl] xor a ld [de], a jr Function35923 .asm_358dd pop hl ld a, c ld [CurMoveNum], a ld a, b ld [CurPlayerMove], a dec a ld de, PlayerMoveStruct call GetMoveData jr .asm_3591a .asm_358ef push hl ld a, [LastEnemyMove] ld b, a ld c, $0 ld hl, EnemyMonMoves .asm_358f9 ld a, [hli] cp b jr z, .asm_3590a inc c ld a, c cp $4 jr c, .asm_358f9 pop hl res 4, [hl] xor a ld [de], a jr Function35923 .asm_3590a pop hl ld a, c ld [CurEnemyMoveNum], a ld a, b ld [CurEnemyMove], a dec a ld de, EnemyMoveStruct call GetMoveData .asm_3591a call AnimateCurrentMove ld hl, GotAnEncoreText jp StdBattleTextBox ; 35923 Function35923: ; 35923 jp PrintDidntAffect2 ; 35926 BattleCommand42: ; 35926 ; painsplit ld a, [AttackMissed] and a jp nz, Function359cd call CheckSubstituteOpp jp nz, Function359cd call AnimateCurrentMove ld hl, $c63f ld de, EnemyMonMaxHPLo call .asm_3597d ld a, $1 ld [$d10a], a ld hl, $c55e ld a, $b call Predef ld hl, EnemyMonHPHi ld a, [hli] ld [$d1ed], a ld a, [hli] ld [$d1ec], a ld a, [hli] ld [$d1eb], a ld a, [hl] ld [$d1ea], a call Function359ac xor a ld [$d10a], a call ResetDamage ld hl, $c4ca ld a, $b call Predef callba Function178000 ld hl, SharedPainText jp StdBattleTextBox .asm_3597d ld a, [hld] ld [$d1ea], a ld a, [hld] ld [$d1eb], a ld a, [hld] ld b, a ld [$d1ec], a ld a, [hl] ld [$d1ed], a dec de dec de ld a, [de] dec de add b ld [$d257], a ld b, [hl] ld a, [de] adc b srl a ld [CurDamage], a ld a, [$d257] rr a ld [$d257], a inc hl inc hl inc hl inc de inc de inc de ; fallthrough ; 359ac Function359ac: ; 359ac ld c, [hl] dec hl ld a, [$d257] sub c ld b, [hl] dec hl ld a, [CurDamage] sbc b jr nc, .asm_359c2 ld a, [CurDamage] ld b, a ld a, [$d257] ld c, a .asm_359c2 ld a, c ld [hld], a ld [$d1ee], a ld a, b ld [hli], a ld [$d1ef], a ret ; 359cd Function359cd: ; 359cd jp PrintDidntAffect2 ; 359d0 BattleCommand43: ; 359d0 ; snore ld a, BATTLE_VARS_STATUS call GetBattleVar and SLP ret nz call ResetDamage ld a, $1 ld [AttackMissed], a call Function37354 jp EndMoveEffect ; 359e6 BattleCommand44: ; 359e6 ; conversion2 ld a, [AttackMissed] and a jr nz, .asm_35a50 ; 359ea $64 ld hl, BattleMonType1 ld a, [hBattleTurn] and a jr z, .asm_359f7 ; 359f2 $3 ld hl, EnemyMonType1 .asm_359f7 ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP call GetBattleVar and a jr z, .asm_35a50 ; 359fd $51 push hl dec a ld hl, Moves + PlayerMoveType - PlayerMoveStruct call GetMoveAttr ld d, a pop hl cp CURSE_T jr z, .asm_35a50 ; 35a0b $43 call AnimateCurrentMove call SwitchTurn .asm_35a13 call BattleRandom and $1f cp $a jr c, .asm_35a24 ; 35a1a $8 cp $14 jr c, .asm_35a13 ; 35a1e $f3 cp $1c jr nc, .asm_35a13 ; 35a22 $ef .asm_35a24 ld [hli], a ld [hld], a push hl ld a, BATTLE_VARS_MOVE_TYPE call _GetBattleVar push af push hl ld a, d ld [hl], a call Function347c8 pop hl pop af ld [hl], a pop hl ld a, [$d265] cp $a jr nc, .asm_35a13 ; 35a3c $d5 call SwitchTurn ld a, [hl] ld [$d265], a ld a, $29 call Predef ld hl, TransformedTypeText jp StdBattleTextBox .asm_35a50 jp Function37354 ; 35a53 BattleCommand45: ; 35a53 ; lockon call CheckSubstituteOpp jr nz, .asm_35a6e ld a, [AttackMissed] and a jr nz, .asm_35a6e ld a, BATTLE_VARS_SUBSTATUS5_OPP call _GetBattleVar set SUBSTATUS_LOCK_ON, [hl] call AnimateCurrentMove ld hl, TookAimText jp StdBattleTextBox .asm_35a6e call AnimateFailedMove jp PrintDidntAffect ; 35a74 BattleCommand46: ; 35a74 ; sketch call Function372d8 ld a, [InLinkBattle] and a jr z, .asm_35a83 ; 35a7b $6 call AnimateFailedMove jp PrintNothingHappened .asm_35a83 call CheckSubstituteOpp jp nz, .asm_35b10 ld a, BATTLE_VARS_SUBSTATUS5_OPP call _GetBattleVar bit 3, [hl] jp nz, .asm_35b10 ld a, $2 call UserPartyAttr ld d, h ld e, l ld hl, BattleMonMoves ld a, [hBattleTurn] and a jr z, .asm_35aa5 ; 35aa0 $3 ld hl, EnemyMonMoves .asm_35aa5 ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP call GetBattleVar ld [$d265], a ld b, a and a jr z, .asm_35b10 ; 35aaf $5f cp STRUGGLE jr z, .asm_35b10 ; 35ab3 $5b ld c, $4 .asm_35ab7 ld a, [hli] cp b jr z, .asm_35b10 ; 35ab9 $55 dec c jr nz, .asm_35ab7 ; 35abc $f9 dec hl ld c, $4 .asm_35ac1 dec c ld a, [hld] cp SKETCH jr nz, .asm_35ac1 ; 35ac5 $fa inc hl ld a, b ld [hl], a push bc push hl dec a ld hl, Moves + PlayerMovePP - PlayerMoveStruct call GetMoveAttr pop hl ld bc, $0006 add hl, bc ld [hl], a pop bc ld a, [hBattleTurn] and a jr z, .asm_35af6 ; 35add $17 ld a, [IsInBattle] dec a jr nz, .asm_35af6 ; 35ae3 $11 ld a, [hl] push bc ld hl, $c739 ld b, $0 add hl, bc ld [hl], a ld hl, $c735 add hl, bc pop bc ld [hl], b jr .asm_35b04 ; 35af4 $e .asm_35af6 ld a, [hl] push af ld l, c ld h, $0 add hl, de ld a, b ld [hl], a pop af ld de, $0015 add hl, de ld [hl], a .asm_35b04 call GetMoveName call AnimateCurrentMove ld hl, SketchedText jp StdBattleTextBox .asm_35b10 call AnimateFailedMove jp PrintDidntAffect ; 35b16 BattleCommand47: ; 35b16 ; defrostopponent ; If the opponent isn't frozen, raise Attack one stage. ; If the opponent is frozen, thaw them and raise Accuracy two stages. call AnimateCurrentMove ld a, BATTLE_VARS_STATUS_OPP call _GetBattleVar call Defrost ; Sharply raise accuracy ld a, BATTLE_VARS_MOVE_EFFECT call _GetBattleVar ld a, [hl] push hl push af ld a, $a ; meditate, sharpen ld [hl], a call BattleCommand1c pop af pop hl ld [hl], a ret ; 35b33 BattleCommand48: ; 35b33 ; sleeptalk call Function372d8 ld a, [AttackMissed] and a jr nz, .asm_35ba3 ; 35b3a $67 ld a, [hBattleTurn] and a ld hl, BattleMonMove2 ld a, [DisabledMove] ld d, a jr z, .asm_35b4f ; 35b46 $7 ld hl, EnemyMonMove2 ld a, [EnemyDisabledMove] ld d, a .asm_35b4f ld a, BATTLE_VARS_STATUS call GetBattleVar and $7 jr z, .asm_35ba3 ; 35b56 $4b ld a, [hl] and a jr z, .asm_35ba3 ; 35b5a $47 call .asm_35ba9 jr c, .asm_35ba3 ; 35b5f $42 dec hl .asm_35b62 push hl call BattleRandom and $3 ld c, a ld b, $0 add hl, bc ld a, [hl] pop hl and a jr z, .asm_35b62 ; 35b6f $f1 ld e, a ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar cp e jr z, .asm_35b62 ; 35b78 $e8 ld a, e cp d jr z, .asm_35b62 ; 35b7c $e4 call .asm_35bdf jr z, .asm_35b62 ; 35b81 $df ld a, BATTLE_VARS_MOVE call _GetBattleVar ld a, e ld [hl], a call Function34548 jr nz, .asm_35b9a ; 35b8d $b ld a, [$c689] push af call BattleCommand0a pop af ld [$c689], a .asm_35b9a call Function37e36 call UpdateMoveData jp ResetTurn .asm_35ba3 call AnimateFailedMove jp TryPrintButItFailed .asm_35ba9 push hl push de push bc call .asm_35bb3 pop bc pop de pop hl ret .asm_35bb3 ld a, [hBattleTurn] and a ld a, [DisabledMove] jr z, .asm_35bbe ld a, [EnemyDisabledMove] .asm_35bbe ld b, a ld a, $10 call GetBattleVar ld c, a dec hl ld d, $4 .asm_35bc8 ld a, [hl] and a jr z, .asm_35bdb cp c jr z, .asm_35bd7 cp b jr z, .asm_35bd7 call .asm_35bdf jr nz, .asm_35bdd .asm_35bd7 inc hl dec d jr nz, .asm_35bc8 .asm_35bdb scf ret .asm_35bdd and a ret .asm_35bdf push hl push de push bc ld b, a callab GetMoveEffect ld a, b pop bc pop de pop hl cp $91 ret z cp $27 ret z cp $4b ret z cp $97 ret z cp $9b ret z cp $1a ret ; 35bff BattleCommand49: ; 35bff ; destinybond ld a, BATTLE_VARS_SUBSTATUS5 call _GetBattleVar set 6, [hl] call AnimateCurrentMove ld hl, DestinyBondEffectText jp StdBattleTextBox ; 35c0f BattleCommand4a: ; 35c0f ; spite ld a, [AttackMissed] and a jp nz, .asm_35c91 ld bc, $0030 ld hl, EnemyMonMoves ld a, [hBattleTurn] and a jr z, .asm_35c24 ; 35c1f $3 ld hl, BattleMonMoves .asm_35c24 ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP call GetBattleVar and a jr z, .asm_35c91 ; 35c2a $65 cp $a5 jr z, .asm_35c91 ; 35c2e $61 ld b, a ld c, $ff .asm_35c33 inc c ld a, [hli] cp b jr nz, .asm_35c33 ; 35c36 $fb ld [$d265], a dec hl ld b, $0 push bc ld c, $6 add hl, bc pop bc ld a, [hl] and $3f jr z, .asm_35c91 ; 35c46 $49 push bc call GetMoveName call BattleRandom and $3 inc a inc a ld b, a ld a, [hl] and $3f cp b jr nc, .asm_35c5b ; 35c58 $1 ld b, a .asm_35c5b ld a, [hl] sub b ld [hl], a push af ld a, $17 call OpponentPartyAttr ld d, b pop af pop bc add hl, bc ld e, a ld a, BATTLE_VARS_SUBSTATUS5_OPP call GetBattleVar bit 3, a jr nz, .asm_35c82 ; 35c70 $10 ld a, [hBattleTurn] and a jr nz, .asm_35c81 ; 35c75 $a ld a, [IsInBattle] dec a jr nz, .asm_35c81 ; 35c7b $4 ld hl, $c739 add hl, bc .asm_35c81 ld [hl], e .asm_35c82 push de call AnimateCurrentMove pop de ld a, d ld [$d265], a ld hl, SpiteEffectText jp StdBattleTextBox .asm_35c91 jp PrintDidntAffect2 ; 35c94 BattleCommand4b: ; 35c94 ; falseswipe ld hl, EnemyMonHPHi ld a, [hBattleTurn] and a jr z, .asm_35c9f ; 35c9a $3 ld hl, BattleMonHP .asm_35c9f ld de, CurDamage ld c, $2 push hl push de call StringCmp pop de pop hl jr c, .asm_35cc7 ; 35cab $1a ld a, [hli] ld [de], a inc de ld a, [hl] dec a ld [de], a inc a jr nz, .asm_35cba ; 35cb4 $4 dec de ld a, [de] dec a ld [de], a .asm_35cba ld a, [CriticalHit] cp $2 jr nz, .asm_35cc5 ; 35cbf $4 xor a ld [CriticalHit], a .asm_35cc5 scf ret .asm_35cc7 and a ret ; 35cc9 BattleCommand4c: ; 35cc9 ; healbell ld a, BATTLE_VARS_SUBSTATUS1 call _GetBattleVar res 0, [hl] ld de, PartyMon1Status ld a, [hBattleTurn] and a jr z, .asm_35cdb ; 35cd6 $3 ld de, OTPartyMon1Status .asm_35cdb ld a, BATTLE_VARS_STATUS call _GetBattleVar xor a ld [hl], a ld h, d ld l, e ld bc, $30 ld d, $6 .asm_35ce9 ld [hl], a add hl, bc dec d jr nz, .asm_35ce9 call AnimateCurrentMove ld hl, BellChimedText call StdBattleTextBox ld a, [hBattleTurn] and a jp z, Function365d7 jp Function365fd ; 35d00 FarPlayBattleAnimation: ; 35d00 ; play animation de ; battle animations disabled? ld a, BATTLE_VARS_SUBSTATUS3 call GetBattleVar and $60 ; bit 6 | 5 ret nz ; fallthrough ; 35d08 PlayFXAnimID: ; 35d08 ld a, e ld [FXAnimIDLo], a ld a, d ld [FXAnimIDHi], a ld c, 3 call DelayFrames callab PlayBattleAnim ret ; 35d1c Function35d1c: ; 35d1c ld hl, CurDamage ld a, [hli] ld b, a ld a, [hl] or b jr z, .asm_35d7b ld a, c and a jr nz, .asm_35d31 ld a, [EnemySubStatus4] bit 4, a jp nz, Function35de0 .asm_35d31 ld a, [hld] ld b, a ld a, [EnemyMonHPLo] ld [$d1ec], a sub b ld [EnemyMonHPLo], a ld a, [hl] ld b, a ld a, [EnemyMonHPHi] ld [$d1ed], a sbc b ld [EnemyMonHPHi], a jr nc, .asm_35d59 ld a, [$d1ed] ld [hli], a ld a, [$d1ec] ld [hl], a xor a ld hl, EnemyMonHPHi ld [hli], a ld [hl], a .asm_35d59 ld hl, EnemyMonMaxHPHi ld a, [hli] ld [$d1eb], a ld a, [hl] ld [$d1ea], a ld hl, EnemyMonHPHi ld a, [hli] ld [$d1ef], a ld a, [hl] ld [$d1ee], a ld hl, $c4ca xor a ld [$d10a], a ld a, $b call Predef .asm_35d7b jp RefreshBattleHuds ; 35d7e Function35d7e: ; 35d7e ld hl, CurDamage ld a, [hli] ld b, a ld a, [hl] or b jr z, .asm_35ddd ld a, c and a jr nz, .asm_35d93 ld a, [PlayerSubStatus4] bit 4, a jp nz, Function35de0 .asm_35d93 ld a, [hld] ld b, a ld a, [$c63d] ld [$d1ec], a sub b ld [$c63d], a ld [$d1ee], a ld b, [hl] ld a, [BattleMonHP] ld [$d1ed], a sbc b ld [BattleMonHP], a ld [$d1ef], a jr nc, .asm_35dc5 ld a, [$d1ed] ld [hli], a ld a, [$d1ec] ld [hl], a xor a ld hl, BattleMonHP ld [hli], a ld [hl], a ld hl, $d1ee ld [hli], a ld [hl], a .asm_35dc5 ld hl, BattleMonMaxHP ld a, [hli] ld [$d1eb], a ld a, [hl] ld [$d1ea], a ld hl, $c55e ld a, $1 ld [$d10a], a ld a, $b call Predef .asm_35ddd jp RefreshBattleHuds ; 35de0 Function35de0: ; 35de0 ld hl, SubTookDamageText call StdBattleTextBox ld de, $c6e0 ld a, [hBattleTurn] and a jr z, .asm_35df1 ld de, $c6df .asm_35df1 ld hl, CurDamage ld a, [hli] and a jr nz, .asm_35dff ld a, [de] sub [hl] ld [de], a jr z, .asm_35dff jr nc, .asm_35e3d .asm_35dff ld a, BATTLE_VARS_SUBSTATUS4_OPP call _GetBattleVar res 4, [hl] ld hl, SubFadedText call StdBattleTextBox call SwitchTurn call BattleCommanda7 ld a, BATTLE_VARS_SUBSTATUS3 call GetBattleVar and $60 ; fly | dig call z, Function37ec7 call SwitchTurn ld a, BATTLE_VARS_MOVE_EFFECT call _GetBattleVar cp EFFECT_MULTI_HIT jr z, .asm_35e3a cp EFFECT_DOUBLE_HIT jr z, .asm_35e3a cp EFFECT_TWINEEDLE jr z, .asm_35e3a cp EFFECT_TRIPLE_KICK jr z, .asm_35e3a cp EFFECT_BEAT_UP jr z, .asm_35e3a xor a ld [hl], a .asm_35e3a call RefreshBattleHuds .asm_35e3d jp ResetDamage ; 35e40 UpdateMoveData: ; 35e40 ld a, BATTLE_VARS_MOVE_ANIM call _GetBattleVar ld d, h ld e, l ld a, BATTLE_VARS_MOVE call GetBattleVar ld [$cf60], a ; not CurSpecies ld [$d265], a dec a call GetMoveData call GetMoveName jp CopyName1 ; 35e5c BattleCommand14: ; 35e5c ; sleeptarget call GetOpponentItem ld a, b cp $17 jr nz, .asm_35e70 ; 35e62 $c ld a, [hl] ld [$d265], a call GetItemName ld hl, ProtectedByText jr .asm_35ec6 .asm_35e70 ld a, BATTLE_VARS_STATUS_OPP call _GetBattleVar ld d, h ld e, l ld a, [de] and 7 ld hl, AlreadyAsleepText jr nz, .asm_35ec6 ld a, [AttackMissed] and a jp nz, PrintDidntAffect2 ld hl, DidntAffect1Text call Function35ece jr c, .asm_35ec6 ld a, [de] and a jr nz, .asm_35ec6 call CheckSubstituteOpp jr nz, .asm_35ec6 call AnimateCurrentMove ld b, $7 ld a, [$cfc0] and a jr z, .asm_35ea4 ld b, $3 .asm_35ea4 call BattleRandom and b jr z, .asm_35ea4 cp 7 jr z, .asm_35ea4 inc a ld [de], a call UpdateOpponentInParty call RefreshBattleHuds ld hl, FellAsleepText call StdBattleTextBox callba Function3dde9 jp z, Function34216 ret .asm_35ec6 push hl call AnimateFailedMove pop hl jp StdBattleTextBox ; 35ece Function35ece: ; 35ece ; Enemy turn ld a, [hBattleTurn] and a jr z, .asm_35eec ; Not in link battle ld a, [InLinkBattle] and a jr nz, .asm_35eec ld a, [$cfc0] and a jr nz, .asm_35eec ; Not locked-on by the enemy ld a, [PlayerSubStatus5] bit 5, a jr nz, .asm_35eec call BattleRandom cp $40 ret c .asm_35eec xor a ret ; 35eee BattleCommand13: ; 35eee ; poisontarget call CheckSubstituteOpp ret nz ld a, BATTLE_VARS_STATUS_OPP call _GetBattleVar and a ret nz ld a, [TypeModifier] and $7f ret z call Function35fe1 ret z call GetOpponentItem ld a, b cp $14 ret z ld a, [EffectFailed] and a ret nz call Function37962 ret nz call Function35ff5 ld de, $0106 call Function37e54 call RefreshBattleHuds ld hl, WasPoisonedText call StdBattleTextBox callba Function3dde9 ret ; 35f2c BattleCommand2f: ; 35f2c ; poison ld hl, DoesntAffectText ld a, [TypeModifier] and $7f jp z, .asm_35fb8 call Function35fe1 jp z, .asm_35fb8 ld a, BATTLE_VARS_STATUS_OPP call GetBattleVar ld b, a ld hl, AlreadyPoisonedText and $8 jp nz, .asm_35fb8 call GetOpponentItem ld a, b cp $14 jr nz, .asm_35f5f ; 35f51 $c ld a, [hl] ld [$d265], a call GetItemName ld hl, ProtectedByText jr .asm_35fb8 ; 35f5d $59 .asm_35f5f ld hl, DidntAffect1Text ld a, BATTLE_VARS_STATUS_OPP call GetBattleVar and a jr nz, .asm_35fb8 ; 35f68 $4e ld a, [hBattleTurn] and a jr z, .asm_35f89 ; 35f6d $1a ld a, [InLinkBattle] and a jr nz, .asm_35f89 ; 35f73 $14 ld a, [$cfc0] and a jr nz, .asm_35f89 ; 35f79 $e ld a, [PlayerSubStatus5] bit 5, a jr nz, .asm_35f89 ; 35f80 $7 call BattleRandom cp $40 jr c, .asm_35fb8 ; 35f87 $2f .asm_35f89 call CheckSubstituteOpp jr nz, .asm_35fb8 ; 35f8c $2a ld a, [AttackMissed] and a jr nz, .asm_35fb8 ; 35f92 $24 call Function35fc9 jr z, .asm_35fa4 ; 35f97 $b call Function35fc0 ld hl, WasPoisonedText call StdBattleTextBox jr .asm_35fb1 ; 35fa2 $d .asm_35fa4 set 0, [hl] xor a ld [de], a call Function35fc0 ld hl, BadlyPoisonedText call StdBattleTextBox .asm_35fb1 callba Function3dde9 ret .asm_35fb8 push hl call AnimateFailedMove pop hl jp StdBattleTextBox ; 35fc0 Function35fc0: ; 35fc0 call AnimateCurrentMove call Function35ff5 jp RefreshBattleHuds ; 35fc9 Function35fc9: ; 35fc9 ld a, BATTLE_VARS_SUBSTATUS5_OPP call _GetBattleVar ld a, [hBattleTurn] and a ld de, $c67c jr z, .asm_35fd9 ld de, $c674 .asm_35fd9 ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_TOXIC ret ; 35fe1 Function35fe1: ; 35fe1 ld de, EnemyMonType1 ld a, [hBattleTurn] and a jr z, .asm_35fec ld de, BattleMonType1 .asm_35fec ld a, [de] inc de cp POISON ret z ld a, [de] cp POISON ret ; 35ff5 Function35ff5: ; 35ff5 ld a, BATTLE_VARS_STATUS_OPP call _GetBattleVar set PSN, [hl] jp UpdateOpponentInParty ; 35fff BattleCommand15: ; 35fff ; draintarget call Function36011 ld hl, SuckedHealthText jp StdBattleTextBox ; 36008 BattleCommand16: ; 36008 ; eatdream call Function36011 ld hl, DreamEatenText jp StdBattleTextBox ; 36011 Function36011: ; 36011 ld hl, CurDamage ld a, [hli] srl a ld [$ffb3], a ld b, a ld a, [hl] rr a ld [$ffb4], a or b jr nz, .asm_36026 ; 0x36020 $4 ld a, $1 ld [$ffb4], a .asm_36026 ld hl, BattleMonHP ld de, BattleMonMaxHP ld a, [hBattleTurn] and a jr z, .asm_36037 ; 0x3602f $6 ld hl, EnemyMonHPHi ld de, EnemyMonMaxHPHi .asm_36037 ld bc, $d1ed 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, [$ffb4] ld b, [hl] add b ld [hld], a ld [$d1ee], a ld a, [$ffb3] ld b, [hl] adc b ld [hli], a ld [$d1ef], a jr c, .asm_36064 ; 0x36056 $c ld a, [hld] ld b, a ld a, [de] dec de sub b ld a, [hli] ld b, a ld a, [de] inc de sbc b jr nc, .asm_36070 ; 0x36062 $c .asm_36064 ld a, [de] ld [hld], a ld [$d1ee], a dec de ld a, [de] ld [hli], a ld [$d1ef], a inc de .asm_36070 ld a, [hBattleTurn] and a ld hl, $c55e ld a, $1 jr z, .asm_3607e ; 0x36078 $4 ld hl, $c4ca xor a .asm_3607e ld [$d10a], a ld a, $b call Predef call RefreshBattleHuds jp UpdateBattleMonInParty ; 3608c BattleCommand17: ; 3608c ; burntarget xor a ld [$cfca], a call CheckSubstituteOpp ret nz ld a, BATTLE_VARS_STATUS_OPP call _GetBattleVar and a jp nz, Defrost ld a, [TypeModifier] and $7f ret z call Function36e5b ret z call GetOpponentItem ld a, b cp $15 ret z ld a, [EffectFailed] and a ret nz call Function37962 ret nz ld a, BATTLE_VARS_STATUS_OPP call _GetBattleVar set 4, [hl] call UpdateOpponentInParty ld hl, Function3ec76 call CallBattleCore ld de, $0105 call Function37e54 call RefreshBattleHuds ld hl, WasBurnedText call StdBattleTextBox callba Function3dde9 ret ; 360dd Defrost: ; 360dd ld a, [hl] and $20 ret z xor a ld [hl], a ld a, [hBattleTurn] and a ld a, [CurOTMon] ld hl, OTPartyMon1Status jr z, .ok ld hl, PartyMon1Status ld a, [CurBattleMon] .ok call GetPartyLocation xor a ld [hl], a call UpdateOpponentInParty ld hl, DefrostedOpponentText jp StdBattleTextBox ; 36102 BattleCommand18: ; 36102 ; freezetarget xor a ld [$cfca], a call CheckSubstituteOpp ret nz ld a, BATTLE_VARS_STATUS_OPP call _GetBattleVar and a ret nz ld a, [TypeModifier] and $7f ret z ld a, [Weather] cp $2 ret z call Function36e5b ret z call GetOpponentItem ld a, b cp $16 ret z ld a, [EffectFailed] and a ret nz call Function37962 ret nz ld a, BATTLE_VARS_STATUS_OPP call _GetBattleVar set 5, [hl] call UpdateOpponentInParty ld de, $0108 call Function37e54 call RefreshBattleHuds ld hl, WasFrozenText call StdBattleTextBox callba Function3dde9 ret nz call Function34216 call EndRechargeOpp ld hl, $c740 ld a, [hBattleTurn] and a jr z, .asm_36162 ; 3615d $3 ld hl, $c73f .asm_36162 ld [hl], $1 ret ; 36165 BattleCommand19: ; 36165 ; paralyzetarget xor a ld [$cfca], a call CheckSubstituteOpp ret nz ld a, BATTLE_VARS_STATUS_OPP call _GetBattleVar and a ret nz ld a, [TypeModifier] and $7f ret z call GetOpponentItem ld a, b cp $18 ret z ld a, [EffectFailed] and a ret nz call Function37962 ret nz ld a, BATTLE_VARS_STATUS_OPP call _GetBattleVar set 6, [hl] call UpdateOpponentInParty ld hl, Function3ec39 call CallBattleCore ld de, $0109 call Function37e54 call RefreshBattleHuds call PrintParalyze ld hl, Function3dde9 jp CallBattleCore ; 361ac BattleCommand70: ; 361ac ; attackup ld b, $0 jr BattleCommand1c BattleCommand71: ; 361b0 ; defenseup ld b, $1 jr BattleCommand1c BattleCommand72: ; 361b4 ; speedup ld b, $2 jr BattleCommand1c BattleCommand73: ; 361b8 ; specialattackup ld b, $3 jr BattleCommand1c BattleCommand74: ; 361bc ; specialdefenseup ld b, $4 jr BattleCommand1c BattleCommand75: ; 361c0 ; accuracyup ld b, $5 jr BattleCommand1c BattleCommand76: ; 361c4 ; evasionup ld b, $6 jr BattleCommand1c BattleCommand77: ; 361c8 ; attackup2 ld b, $10 jr BattleCommand1c BattleCommand78: ; 361cc ; defenseup2 ld b, $11 jr BattleCommand1c BattleCommand79: ; 361d0 ; speedup2 ld b, $12 jr BattleCommand1c BattleCommand7a: ; 361d4 ; specialattackup2 ld b, $13 jr BattleCommand1c BattleCommand7b: ; 361d8 ; specialdefenseup2 ld b, $14 jr BattleCommand1c BattleCommand7c: ; 361dc ; accuracyup2 ld b, $15 jr BattleCommand1c BattleCommand7d: ; 361e0 ; evasionup2 ld b, $16 jr BattleCommand1c BattleCommand1c: ; 361e4 ; statup call Function361ef ld a, [FailedMessage] and a ret nz jp Function36281 ; 361ef Function361ef: ; 361ef ld a, b ld [LoweredStat], a ld hl, PlayerStatLevels ld a, [hBattleTurn] and a jr z, .asm_361fe ; 0x361f9 $3 ld hl, EnemyStatLevels .asm_361fe ld a, [AttackMissed] and a jp nz, Function3627b ld a, [EffectFailed] and a jp nz, Function3627b ld a, [LoweredStat] and $f ld c, a ld b, $0 add hl, bc ld b, [hl] inc b ld a, $d cp b jp c, Function36270 ld a, [LoweredStat] and $f0 jr z, .asm_3622b ; 0x36222 $7 inc b ld a, $d cp b jr nc, .asm_3622b ; 0x36228 $1 ld b, a .asm_3622b ld [hl], b push hl ld a, c cp $5 jr nc, .asm_36268 ; 0x36230 $36 ld hl, $c641 ld de, PlayerStats ld a, [hBattleTurn] and a jr z, .asm_36243 ; 0x3623b $6 ld hl, $d21b ld de, EnemyStats .asm_36243 push bc sla c ld b, $0 add hl, bc ld a, c add e ld e, a jr nc, .asm_3624f ; 0x3624c $1 inc d .asm_3624f pop bc ld a, [hld] sub $e7 jr nz, .asm_3625b ; 0x36253 $6 ld a, [hl] sbc $3 jp z, Function3626e .asm_3625b ld a, [hBattleTurn] and a jr z, .asm_36265 ; 0x3625e $5 call Function365fd jr .asm_36268 ; 0x36263 $3 .asm_36265 call Function365d7 .asm_36268 pop hl xor a ld [FailedMessage], a ret ; 3626e Function3626e: ; 3626e pop hl dec [hl] ; fallthrough ; 36270 Function36270: ; 36270 ld a, $2 ld [FailedMessage], a ld a, $1 ld [AttackMissed], a ret ; 3627b Function3627b: ; 3627b ld a, $1 ld [FailedMessage], a ret ; 36281 Function36281: ; 36281 ld bc, $c6fe ld hl, Function3f447 ld a, [hBattleTurn] and a jr z, .asm_36292 ; 0x3628a $6 ld bc, $c6fa ld hl, Function3f486 .asm_36292 ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar cp MINIMIZE ret nz ld a, $1 ld [bc], a call Function37ed5 ret nc xor a ld [$ffd4], a call CallBattleCore call WaitBGMap jp BattleCommandaa ; 362ad BattleCommand7e: ; 362ad ; attackdown ld a, ATTACK jr BattleCommand1d BattleCommand7f: ; 362b1 ; defensedown ld a, DEFENSE jr BattleCommand1d BattleCommand80: ; 362b5 ; speeddown ld a, SPEED jr BattleCommand1d BattleCommand81: ; 362b9 ; specialattackdown ld a, SP_ATTACK jr BattleCommand1d BattleCommand82: ; 362bd ; specialdefensedown ld a, SP_DEFENSE jr BattleCommand1d BattleCommand83: ; 362c1 ; accuracydown ld a, ACCURACY jr BattleCommand1d BattleCommand84: ; 362c5 ; evasiondown ld a, EVASION jr BattleCommand1d BattleCommand85: ; 362c9 ; attackdown2 ld a, $10 | ATTACK jr BattleCommand1d BattleCommand86: ; 362cd ; defensedown2 ld a, $10 | DEFENSE jr BattleCommand1d BattleCommand87: ; 362d1 ; speeddown2 ld a, $10 | SPEED jr BattleCommand1d BattleCommand88: ; 362d5 ; specialattackdown2 ld a, $10 | SP_ATTACK jr BattleCommand1d BattleCommand89: ; 362d9 ; specialdefensedown2 ld a, $10 | SP_DEFENSE jr BattleCommand1d BattleCommand8a: ; 362dd ; accuracydown2 ld a, $10 | ACCURACY jr BattleCommand1d BattleCommand8b: ; 362e1 ; evasiondown2 ld a, $10 | EVASION BattleCommand1d: ; 362e3 ; statdown ld [LoweredStat], a call Function36391 jp nz, .Mist ld hl, EnemyStatLevels ld a, [hBattleTurn] and a jr z, .GetStatLevel ld hl, PlayerStatLevels .GetStatLevel ; Attempt to lower the stat. ld a, [LoweredStat] and $f ld c, a ld b, 0 add hl, bc ld b, [hl] dec b jp z, .CantLower ; Sharply lower the stat if applicable. ld a, [LoweredStat] and $f0 jr z, .ComputerMiss dec b jr nz, .ComputerMiss inc b .ComputerMiss ; Computer opponents have a 1/4 chance of failing. ld a, [hBattleTurn] and a jr z, .DidntMiss ld a, [InLinkBattle] and a jr nz, .DidntMiss ld a, [$cfc0] and a jr nz, .DidntMiss ; Lock-On still always works. ld a, [PlayerSubStatus5] bit SUBSTATUS_LOCK_ON, a jr nz, .DidntMiss ; Attacking moves that also lower accuracy are unaffected. ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_ACCURACY_DOWN_HIT jr z, .DidntMiss call BattleRandom cp $40 jr c, .Failed .DidntMiss call CheckSubstituteOpp jr nz, .Failed ld a, [AttackMissed] and a jr nz, .Failed ld a, [EffectFailed] and a jr nz, .Failed call CheckHiddenOpponent jr nz, .Failed ; Accuracy/Evasion reduction don't involve stats. ld [hl], b ld a, c cp ACCURACY jr nc, .Hit push hl ld hl, EnemyMonAtk + 1 ld de, EnemyStats ld a, [hBattleTurn] and a jr z, .asm_36366 ld hl, BattleMonAtk + 1 ld de, PlayerStats .asm_36366 call Function3641a pop hl jr z, .CouldntLower .Hit xor a ld [FailedMessage], a ret .CouldntLower inc [hl] .CantLower ld a, 3 ld [FailedMessage], a ld a, 1 ld [AttackMissed], a ret .Failed ld a, 1 ld [FailedMessage], a ld [AttackMissed], a ret .Mist ld a, 2 ld [FailedMessage], a ld a, 1 ld [AttackMissed], a ret ; 36391 Function36391: ; 36391 ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_ATTACK_DOWN jr c, .asm_363ae cp EFFECT_EVASION_DOWN + 1 jr c, .asm_363b0 cp EFFECT_ATTACK_DOWN_2 jr c, .asm_363ae cp EFFECT_EVASION_DOWN_2 + 1 jr c, .asm_363b0 cp EFFECT_ATTACK_DOWN_HIT jr c, .asm_363ae cp EFFECT_EVASION_DOWN_HIT + 1 jr c, .asm_363b0 .asm_363ae xor a ret .asm_363b0 ld a, BATTLE_VARS_SUBSTATUS4_OPP call GetBattleVar bit SUBSTATUS_MIST, a ret ; 363b8 BattleCommand8c: ; 363b8 ld a, [FailedMessage] and a ret nz ld a, [LoweredStat] and $f ld b, a inc b call GetStatName ld hl, .stat jp BattleTextBox .stat TX_FAR UnknownText_0x1c0cc6 start_asm ld hl, .up ld a, [LoweredStat] and $f0 ret z ld hl, .wayup ret .wayup TX_FAR UnknownText_0x1c0cd0 db "@" .up TX_FAR UnknownText_0x1c0ce0 db "@" ; 363e9 BattleCommand8d: ; 363e9 ld a, [FailedMessage] and a ret nz ld a, [LoweredStat] and $f ld b, a inc b call GetStatName ld hl, .stat jp BattleTextBox .stat TX_FAR UnknownText_0x1c0ceb start_asm ld hl, .fell ld a, [LoweredStat] and $f0 ret z ld hl, .sharplyfell ret .sharplyfell TX_FAR UnknownText_0x1c0cf5 db "@" .fell TX_FAR UnknownText_0x1c0d06 db "@" ; 3641a Function3641a: ; 3641a ; Lower stat c from stat struct hl (buffer de). push bc sla c ld b, 0 add hl, bc ; add de, c ld a, c add e ld e, a jr nc, .asm_36426 inc d .asm_36426 pop bc ; The lowest possible stat is 1. ld a, [hld] sub 1 jr nz, .asm_3642f ld a, [hl] and a ret z .asm_3642f ld a, [hBattleTurn] and a jr z, .Player call SwitchTurn call Function365d7 call SwitchTurn jr .end .Player call SwitchTurn call Function365fd call SwitchTurn .end ld a, 1 and a ret ; 3644c BattleCommand8e: ; 3644c ; statupfailtext ld a, [FailedMessage] and a ret z push af call BattleCommandaa pop af dec a jp z, TryPrintButItFailed ld a, [LoweredStat] and $f ld b, a inc b call GetStatName ld hl, WontRiseAnymoreText jp StdBattleTextBox ; 3646a BattleCommand8f: ; 3646a ; statdownfailtext ld a, [FailedMessage] and a ret z push af call BattleCommandaa pop af dec a jp z, TryPrintButItFailed dec a ld hl, ProtectedByMistText jp z, StdBattleTextBox ld a, [LoweredStat] and $f ld b, a inc b call GetStatName ld hl, WontDropAnymoreText jp StdBattleTextBox ; 3648f GetStatName: ; 3648f ld hl, .names ld c, "@" .CheckName dec b jr z, .Copy .GetName ld a, [hli] cp c jr z, .CheckName jr .GetName .Copy ld de, StringBuffer2 ld bc, StringBuffer3 - StringBuffer2 jp CopyBytes .names db "ATTACK@" db "DEFENSE@" db "SPEED@" db "SPCL.ATK@" db "SPCL.DEF@" db "ACCURACY@" db "EVASION@" db "ABILITY@" ; 364e6 Table0x364e6: ; 364e6 db 25, 100 db 28, 100 db 33, 100 db 40, 100 db 50, 100 db 66, 100 ; 364f2 StatLevelMulipliers: ; 364f2 db 1, 1 ; 1.0x db 15, 10 ; 1.5x db 2, 1 ; 2.0x db 25, 10 ; 2.5x db 3, 1 ; 3.0x db 35, 10 ; 3.5x db 4, 1 ; 4.0x ; 36500 BattleCommanda4: ; 36500 ; allstatsup ; Attack call ResetMiss call BattleCommand70 call BattleCommand8c ; Defense call ResetMiss call BattleCommand71 call BattleCommand8c ; Speed call ResetMiss call BattleCommand72 call BattleCommand8c ; Special Attack call ResetMiss call BattleCommand73 call BattleCommand8c ; Special Defense call ResetMiss call BattleCommand74 jp BattleCommand8c ; 3652d ResetMiss: ; 3652d xor a ld [AttackMissed], a ret ; 36532 Function36532: ; 36532 ld [LoweredStat], a ld hl, PlayerStatLevels ld a, [hBattleTurn] and a jr z, .asm_36540 ld hl, EnemyStatLevels .asm_36540 ld a, [LoweredStat] and $f ld c, a ld b, 0 add hl, bc ld b, [hl] dec b jr z, .asm_36589 ld a, [LoweredStat] and $f0 jr z, .asm_36558 dec b jr nz, .asm_36558 inc b .asm_36558 ld [hl], b ld a, c cp 5 jr nc, .asm_36576 push hl ld hl, $c641 ld de, PlayerStats ld a, [hBattleTurn] and a jr z, .asm_36570 ld hl, $d21b ld de, EnemyStats .asm_36570 call Function3641a pop hl jr z, .asm_36588 .asm_36576 ld a, [hBattleTurn] and a jr z, .asm_36580 call Function365fd jr .asm_36583 .asm_36580 call Function365d7 .asm_36583 xor a ld [FailedMessage], a ret .asm_36588 inc [hl] .asm_36589 ld a, 2 ld [FailedMessage], a ret ; 3658f BattleCommandac: ; 3658f ; tristatuschance call BattleCommand90 ; 1/3 chance of each status .loop call BattleRandom swap a and 3 jr z, .loop ; jump dec a ld hl, .ptrs rst JumpTable ret .ptrs dw BattleCommand19 ; paralyze dw BattleCommand18 ; freeze dw BattleCommand17 ; burn ; 365a7 BattleCommandaf: ; 365a7 ; curl ld a, BATTLE_VARS_SUBSTATUS2 call _GetBattleVar set 0, [hl] ret ; 365af BattleCommanda6: ; 365af ld hl, Function3f43d ld a, [hBattleTurn] and a jr z, .asm_365ba ; 365b5 $3 ld hl, Function3f47c .asm_365ba xor a ld [$ffd4], a call CallBattleCore jp WaitBGMap ; 365c3 BattleCommanda7: ; 365c3 ld hl, Function3f447 ld a, [hBattleTurn] and a jr z, .asm_365ce ; 365c9 $3 ld hl, Function3f486 .asm_365ce xor a ld [$ffd4], a call CallBattleCore jp WaitBGMap ; 365d7 Function365d7: ; 365d7 ld hl, PlayerAtkLevel ld de, PlayerStats ld bc, BattleMonAtk ld a, $5 call Function3661d ld hl, BadgeStatBoosts call CallBattleCore call SwitchTurn ld hl, Function3ec39 call CallBattleCore ld hl, Function3ec76 call CallBattleCore jp SwitchTurn ; 365fd Function365fd: ; 365fd ld hl, EnemyAtkLevel ld de, EnemyStats ld bc, EnemyMonAtk ld a, $5 call Function3661d call SwitchTurn ld hl, Function3ec39 call CallBattleCore ld hl, Function3ec76 call CallBattleCore jp SwitchTurn ; 3661d Function3661d: ; 3661d .asm_3661d push af ld a, [hli] push hl push bc ld c, a dec c ld b, 0 ld hl, Table0x364e6 add hl, bc add hl, bc xor a ld [hMultiplicand], a ld a, [de] ld [hMultiplicand + 1], a inc de ld a, [de] ld [hMultiplicand + 2], a inc de ld a, [hli] ld [hMultiplier], a call Multiply ld a, [hl] ld [hDivisor], a ld b, 4 call Divide ld a, [hQuotient + 1] ld b, a ld a, [hQuotient + 2] or b jr nz, .asm_36651 ld a, 1 ld [hQuotient + 2], a jr .asm_36662 .asm_36651 ld a, [hQuotient + 2] cp 999 % $100 ld a, b sbc 999 / $100 jr c, .asm_36662 ld a, 999 % $100 ld [$ffb6], a ld a, 999 / $100 ld [$ffb5], a .asm_36662 pop bc ld a, [$ffb5] ld [bc], a inc bc ld a, [$ffb6] ld [bc], a inc bc pop hl pop af dec a jr nz, .asm_3661d ret ; 36671 BattleCommand21: ; 36671 ; storeenergy ld a, BATTLE_VARS_SUBSTATUS3 call GetBattleVar bit 0, a ret z ld hl, PlayerRolloutCount ld a, [hBattleTurn] and a jr z, .asm_36684 ld hl, EnemyRolloutCount .asm_36684 dec [hl] jr nz, .asm_366dc ld a, BATTLE_VARS_SUBSTATUS3 call _GetBattleVar res 0, [hl] ld hl, UnleashedEnergyText call StdBattleTextBox ld a, BATTLE_VARS_MOVE_POWER call _GetBattleVar ld a, 1 ld [hl], a ld hl, PlayerDamageTaken + 1 ld de, $c732 ld a, [hBattleTurn] and a jr z, .asm_366ad ld hl, EnemyDamageTaken + 1 ld de, $c733 .asm_366ad ld a, [hld] add a ld b, a ld [CurDamage + 1], a ld a, [hl] rl a ld [CurDamage], a jr nc, .asm_366c3 ld a, $ff ld [CurDamage], a ld [CurDamage + 1], a .asm_366c3 or b jr nz, .asm_366cb ld a, 1 ld [AttackMissed], a .asm_366cb xor a ld [hli], a ld [hl], a ld [de], a ld a, BATTLE_VARS_MOVE_ANIM call _GetBattleVar ld a, BIDE ld [hl], a ld b, $22 ; unleashenergy jp SkipToBattleCommand .asm_366dc ld hl, StoringEnergyText call StdBattleTextBox jp EndMoveEffect ; 366e5 BattleCommand22: ; 366e5 ; unleashenergy ld de, $c682 ld bc, PlayerRolloutCount ld a, [hBattleTurn] and a jr z, .asm_366f6 ; 366ee $6 ld de, $c684 ld bc, EnemyRolloutCount .asm_366f6 ld a, BATTLE_VARS_SUBSTATUS3 call _GetBattleVar set 0, [hl] xor a ld [de], a inc de ld [de], a ld [PlayerMoveEffect], a ld [EnemyMoveEffect], a call BattleRandom and $1 inc a inc a ld [bc], a ld a, $1 ld [$c689], a call AnimateCurrentMove jp EndMoveEffect ; 3671a BattleCommand3e: ; 3671a ; checkrampage ld de, PlayerRolloutCount ld a, [hBattleTurn] and a jr z, .asm_36725 ; 36720 $3 ld de, EnemyRolloutCount .asm_36725 ld a, BATTLE_VARS_SUBSTATUS3 call _GetBattleVar bit 1, [hl] ret z ld a, [de] dec a ld [de], a jr nz, .asm_3674c ; 36730 $1a res 1, [hl] call SwitchTurn call Function37962 push af call SwitchTurn pop af jr nz, .asm_3674c ; 3673f $b set 7, [hl] call BattleRandom and $1 inc a inc a inc de ld [de], a .asm_3674c ld b, $3d ; rampage jp SkipToBattleCommand ; 36751 BattleCommand3d: ; 36751 ; rampage ; No rampage during Sleep Talk. ld a, BATTLE_VARS_STATUS call GetBattleVar and 7 ret nz ld de, PlayerRolloutCount ld a, [hBattleTurn] and a jr z, .asm_36764 ; 3675f $3 ld de, EnemyRolloutCount .asm_36764 ld a, BATTLE_VARS_SUBSTATUS3 call _GetBattleVar set 1, [hl] call BattleRandom and $1 inc a ld [de], a ld a, 1 ld [$c73e], a ret ; 36778 BattleCommanda0: ; 36778 ; teleport ld a, [BattleType] cp BATTLETYPE_SHINY jr z, .asm_367b9 cp $9 jr z, .asm_367b9 cp $b jr z, .asm_367b9 cp BATTLETYPE_SUICUNE jr z, .asm_367b9 ld a, BATTLE_VARS_SUBSTATUS5_OPP call GetBattleVar bit SUBSTATUS_CANT_RUN, a jr nz, .asm_367b9 ld a, [hBattleTurn] and a jr nz, .asm_367bf ld a, [IsInBattle] dec a jr nz, .asm_367b9 ld a, [$d143] ld b, a ld a, [BattleMonLevel] cp b jr nc, .asm_367df add b ld c, a inc c .asm_367ac call BattleRandom cp c jr nc, .asm_367ac ; 367b0 $fa srl b srl b cp b jr nc, .asm_367df ; 367b7 $26 .asm_367b9 call AnimateFailedMove jp PrintButItFailed .asm_367bf ld a, [IsInBattle] dec a jr nz, .asm_367b9 ; 367c3 $f4 ld a, [BattleMonLevel] ld b, a ld a, [$d143] cp b jr nc, .asm_367df ; 367cd $10 add b ld c, a inc c .asm_367d2 call BattleRandom cp c jr nc, .asm_367d2 ; 367d6 $fa srl b srl b cp b jr nc, .asm_367df ; 367dd $0 .asm_367df call UpdateBattleMonInParty xor a ld [$cfca], a inc a ld [$d232], a ld [$c689], a call Function36804 call BattleCommand0a call Function37e36 ld c, 20 call DelayFrames call Function36804 ld hl, FledFromBattleText jp StdBattleTextBox ; 36804 Function36804: ; 36804 ld a, [$d0ee] and $c0 or $2 ld [$d0ee], a ret ; 3680f BattleCommand23: ; 3680f ; forceswitch ld a, [BattleType] cp BATTLETYPE_SHINY jp z, .asm_36969 cp $9 jp z, .asm_36969 cp $b jp z, .asm_36969 cp BATTLETYPE_SUICUNE jp z, .asm_36969 ld a, [hBattleTurn] and a jp nz, .asm_368cd ld a, [AttackMissed] and a jr nz, .asm_36852 ; 36830 $20 ld a, [IsInBattle] dec a jr nz, .asm_36869 ; 36836 $31 ld a, [$d143] ld b, a ld a, [BattleMonLevel] cp b jr nc, .asm_36855 ; 36840 $13 add b ld c, a inc c .asm_36845 call BattleRandom cp c jr nc, .asm_36845 ; 36849 $fa srl b srl b cp b jr nc, .asm_36855 ; 36850 $3 .asm_36852 jp .asm_36969 .asm_36855 call UpdateBattleMonInParty xor a ld [$cfca], a inc a ld [$d232], a call Function36804 ld a, [PlayerMoveAnimation] jp .asm_36975 .asm_36869 call Function349f4 jr c, .asm_368ca ; 3686c $5c ld a, [$c70f] and a jr z, .asm_368ca ; 36872 $56 call UpdateEnemyMonInParty ld a, $1 ld [$c689], a call AnimateCurrentMove ld c, $14 call DelayFrames ld hl, $c4a1 ld bc, $040a call ClearBox ld c, $14 call DelayFrames ld a, [OTPartyCount] ld b, a ld a, [CurOTMon] ld c, a .asm_3689a call BattleRandom and $7 cp b jr nc, .asm_3689a ; 368a0 $f8 cp c jr z, .asm_3689a ; 368a3 $f5 push af push bc ld hl, OTPartyMon1HP call GetPartyLocation ld a, [hli] or [hl] pop bc pop de jr z, .asm_3689a ; 368b1 $e7 ld a, d inc a ld [$c718], a callab Function3d4c3 ld hl, DraggedOutText call StdBattleTextBox ld hl, SpikesDamage jp CallBattleCore .asm_368ca jp .asm_36969 .asm_368cd ld a, [AttackMissed] and a jr nz, .asm_368f3 ld a, [IsInBattle] dec a jr nz, .asm_36908 ld a, [BattleMonLevel] ld b, a ld a, [$d143] cp b jr nc, .asm_368f5 add b ld c, a inc c .asm_368e6 call BattleRandom cp c jr nc, .asm_368e6 srl b srl b cp b jr nc, .asm_368f5 .asm_368f3 jr .asm_36969 .asm_368f5 call UpdateBattleMonInParty xor a ld [$cfca], a inc a ld [$d232], a call Function36804 ld a, [EnemyMoveAnimation] jr .asm_36975 .asm_36908 call Function36994 jr c, .asm_36969 ld a, [$c70f] cp $1 jr z, .asm_368ca call UpdateBattleMonInParty ld a, $1 ld [$c689], a call AnimateCurrentMove ld c, $14 call DelayFrames ld hl, $c535 ld bc, $050b call ClearBox ld c, $14 call DelayFrames ld a, [PartyCount] ld b, a ld a, [CurBattleMon] ld c, a .asm_3693a call BattleRandom and $7 cp b jr nc, .asm_3693a cp c jr z, .asm_3693a push af push bc ld hl, PartyMon1HP call GetPartyLocation ld a, [hli] or [hl] pop bc pop de jr z, .asm_3693a ld a, d ld [CurPartyMon], a ld hl, Function3db32 call CallBattleCore ld hl, DraggedOutText call StdBattleTextBox ld hl, SpikesDamage jp CallBattleCore .asm_36969 call BattleCommand0a call BattleCommandaa call BattleCommand0c jp PrintButItFailed .asm_36975 push af call Function36804 ld a, $1 ld [$c689], a call AnimateCurrentMove ld c, $14 call DelayFrames pop af ld hl, FledInFearText cp $2e jr z, .asm_36991 ld hl, BlownAwayText .asm_36991 jp StdBattleTextBox ; 36994 Function36994: ; 36994 ld a, [PartyCount] ld d, a ld e, 0 ld bc, $30 .asm_3699d ld a, [CurBattleMon] cp e jr z, .asm_369ae ld a, e ld hl, PartyMon1HP call AddNTimes ld a, [hli] or [hl] jr nz, .asm_369b4 .asm_369ae inc e dec d jr nz, .asm_3699d scf ret .asm_369b4 and a ret ; 369b6 BattleCommand24: ; 369b6 ; endloop ; Loop back to the command before 'critical'. ld de, PlayerRolloutCount ld bc, $c682 ld a, [hBattleTurn] and a jr z, .asm_369c7 ld de, EnemyRolloutCount ld bc, $c684 .asm_369c7 ld a, BATTLE_VARS_SUBSTATUS3 call _GetBattleVar bit 2, [hl] jp nz, .asm_36a43 set 2, [hl] ld a, BATTLE_VARS_MOVE_EFFECT call _GetBattleVar ld a, [hl] cp EFFECT_TWINEEDLE jr z, .asm_36a3f cp EFFECT_DOUBLE_HIT ld a, $1 jr z, .asm_36a3a ld a, [hl] cp EFFECT_BEAT_UP jr z, .asm_369fb cp EFFECT_TRIPLE_KICK jr nz, .asm_36a2b .asm_369ec call BattleRandom and $3 jr z, .asm_369ec dec a jr nz, .asm_36a3a ld a, $1 ld [bc], a jr .asm_36a48 .asm_369fb ld a, [hBattleTurn] and a jr nz, .asm_36a0b ld a, [PartyCount] cp $1 jp z, .asm_36a1e dec a jr .asm_36a3a .asm_36a0b ld a, [IsInBattle] cp $1 jp z, .asm_36a1e ld a, [OTPartyCount] cp $1 jp z, .asm_36a1e dec a jr .asm_36a3a .asm_36a1e ld a, BATTLE_VARS_SUBSTATUS3 call _GetBattleVar res 2, [hl] call BattleCommanda8 jp EndMoveEffect .asm_36a2b call BattleRandom and $3 cp $2 jr c, .asm_36a39 ; 36a32 $5 call BattleRandom and $3 .asm_36a39 inc a .asm_36a3a ld [de], a inc a ld [bc], a jr .asm_36a6b ; 36a3d $2c .asm_36a3f ld a, $1 jr .asm_36a3a ; 36a41 $f7 .asm_36a43 ld a, [de] dec a ld [de], a jr nz, .asm_36a6b ; 36a46 $23 .asm_36a48 ld a, BATTLE_VARS_SUBSTATUS3 call _GetBattleVar res 2, [hl] ld hl, PlayerHitTimesText ld a, [hBattleTurn] and a jr z, .asm_36a5a ld hl, EnemyHitTimesText .asm_36a5a push bc ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_BEAT_UP jr z, .asm_36a67 call StdBattleTextBox .asm_36a67 pop bc xor a ld [bc], a ret ; Loop back to the command before 'critical'. .asm_36a6b ld a, [BattleScriptBufferLoc + 1] ld h, a ld a, [BattleScriptBufferLoc] ld l, a .asm_36a73 ld a, [hld] cp $5 ; critical jr nz, .asm_36a73 ; 36a76 $fb inc hl ld a, h ld [BattleScriptBufferLoc + 1], a ld a, l ld [BattleScriptBufferLoc], a ret ; 36a82 BattleCommand94: ; 36a82 ld a, [AttackMissed] and a ret nz call CheckSubstituteOpp jr nz, .asm_36a9a ; 36a8a $e ld a, BATTLE_VARS_STATUS_OPP call GetBattleVar and $27 jr nz, .asm_36a9a ; 36a93 $5 call Function36abf jr z, Function36ab5 ; 36a98 $1b .asm_36a9a ld a, 1 ld [AttackMissed], a ret ; 36aa0 BattleCommand25: ; 36aa0 call CheckSubstituteOpp ret nz ld a, BATTLE_VARS_STATUS_OPP call GetBattleVar and $27 ret nz call Function36abf ret nz ld a, [EffectFailed] and a ret nz ; fallthrough ; 36ab5 Function36ab5: ; 36ab5 ld a, BATTLE_VARS_SUBSTATUS3_OPP call _GetBattleVar set 3, [hl] jp EndRechargeOpp ; 36abf Function36abf: ; 36abf push bc ld a, [$c70f] ld b, a ld a, [hBattleTurn] xor b pop bc ret ; 36ac9 BattleCommand4d: ; 36ac9 ; kingsrock ld a, [AttackMissed] and a ret nz call GetUserItem ld a, b cp HELD_TRADE_EVOLVE ; king's rock ret nz call CheckSubstituteOpp ret nz ld a, BATTLE_VARS_MOVE_EFFECT call _GetBattleVar ld d, h ld e, l call GetUserItem call BattleRandom cp c ret nc call EndRechargeOpp ld a, BATTLE_VARS_SUBSTATUS3_OPP call _GetBattleVar set 3, [hl] ret ; 36af3 BattleCommand26: ; 36af3 ; ohko call ResetDamage ld a, [TypeModifier] and $7f jr z, .asm_36b2f ; 36afb $32 ld hl, EnemyMonLevel ld de, BattleMonLevel ld bc, PlayerMoveAccuracy ld a, [hBattleTurn] and a jr z, .asm_36b12 ; 36b09 $7 push hl ld h, d ld l, e pop de ld bc, EnemyMoveAccuracy .asm_36b12 ld a, [de] sub [hl] jr c, .asm_36b2f ; 36b14 $19 add a ld e, a ld a, [bc] add e jr nc, .asm_36b1e ; 36b1a $2 ld a, $ff .asm_36b1e ld [bc], a call BattleCommand09 ld hl, CurDamage ld a, $ff ld [hli], a ld [hl], a ld a, $2 ld [CriticalHit], a ret .asm_36b2f ld a, $ff ld [CriticalHit], a ld a, $1 ld [AttackMissed], a ret ; 36b3a BattleCommand3a: ; 36b3a ; checkcharge ; charged? ld a, BATTLE_VARS_SUBSTATUS3 call _GetBattleVar bit 4, [hl] ret z ; go to town res 4, [hl] res 5, [hl] res 6, [hl] ld b, $39 ; charge jp SkipToBattleCommand ; 36b4d BattleCommand39: ; 36b4d ; charge call BattleCommand38 ld a, BATTLE_VARS_STATUS call GetBattleVar and $7 jr z, .asm_36b65 call BattleCommandaa call BattleCommand0c call PrintButItFailed jp EndMoveEffect .asm_36b65 ld a, BATTLE_VARS_SUBSTATUS3 call _GetBattleVar set 4, [hl] ld hl, IgnoredOrders2Text ld a, [AlreadyDisobeyed] and a call nz, StdBattleTextBox call BattleCommand0a xor a ld [$cfca], a inc a ld [$c689], a call Function37e36 ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar cp $13 jr z, .asm_36b96 ; 36b8b $9 cp $5b jr z, .asm_36b96 ; 36b8f $5 call BattleCommand0c jr .asm_36b99 ; 36b94 $3 .asm_36b96 call Function37ec0 .asm_36b99 ld a, BATTLE_VARS_SUBSTATUS3 call _GetBattleVar ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar ld b, a cp $13 jr z, .asm_36bb0 ; 36ba6 $8 cp $5b jr nz, .asm_36bb2 ; 36baa $6 set 5, [hl] jr .asm_36bb2 ; 36bae $2 .asm_36bb0 set 6, [hl] .asm_36bb2 call Function34548 jr nz, .asm_36bc3 ; 36bb5 $c ld a, BATTLE_VARS_LAST_COUNTER_MOVE call _GetBattleVar ld [hl], b ld a, BATTLE_VARS_LAST_MOVE call _GetBattleVar ld [hl], b .asm_36bc3 call ResetDamage ld hl, .text_36bdb call BattleTextBox ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_SKULL_BASH ld b, $fe ; endturn jp z, SkipToBattleCommand jp EndMoveEffect .text_36bdb ; [user] TX_FAR UnknownText_0x1c0d0e start_asm ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar cp RAZOR_WIND ld hl, .RazorWind jr z, .asm_36c0d cp SOLARBEAM ld hl, .Solarbeam jr z, .asm_36c0d cp SKULL_BASH ld hl, .SkullBash jr z, .asm_36c0d cp SKY_ATTACK ld hl, .SkyAttack jr z, .asm_36c0d cp FLY ld hl, .Fly jr z, .asm_36c0d cp DIG ld hl, .Dig .asm_36c0d ret .RazorWind ; 'made a whirlwind!' TX_FAR UnknownText_0x1c0d12 db "@" .Solarbeam ; 'took in sunlight!' TX_FAR UnknownText_0x1c0d26 db "@" .SkullBash ; 'lowered its head!' TX_FAR UnknownText_0x1c0d3a db "@" .SkyAttack ; 'is glowing!' TX_FAR UnknownText_0x1c0d4e db "@" .Fly ; 'flew up high!' TX_FAR UnknownText_0x1c0d5c db "@" .Dig ; 'dug a hole!' TX_FAR UnknownText_0x1c0d6c db "@" ; 36c2c BattleCommand3c: ; 36c2c ; unused ret ; 36c2d BattleCommand3b: ; 36c2d ; traptarget ld a, [AttackMissed] and a ret nz ld hl, $c731 ld de, $c72f ld a, [hBattleTurn] and a jr z, .asm_36c43 ld hl, $c730 ld de, $c72e .asm_36c43 ld a, [hl] and a ret nz ld a, BATTLE_VARS_SUBSTATUS4_OPP call GetBattleVar bit 4, a ret nz call BattleRandom and 3 inc a inc a inc a ld [hl], a ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar ld [de], a ld b, a ld hl, .Traps .asm_36c61 ld a, [hli] cp b jr z, .asm_36c69 inc hl inc hl jr .asm_36c61 .asm_36c69 ld a, [hli] ld h, [hl] ld l, a jp StdBattleTextBox .Traps dbw BIND, UsedBindText ; 'used BIND on' dbw WRAP, WrappedByText ; 'was WRAPPED by' dbw FIRE_SPIN, FireSpinTrapText ; 'was trapped!' dbw CLAMP, ClampedByText ; 'was CLAMPED by' dbw WHIRLPOOL, WhirlpoolTrapText ; 'was trapped!' ; 36c7e BattleCommand28: ; 36c7e ; mist ld a, BATTLE_VARS_SUBSTATUS4 call _GetBattleVar bit 1, [hl] jr nz, .asm_36c92 ; 36c85 $b set 1, [hl] call AnimateCurrentMove ld hl, MistText jp StdBattleTextBox .asm_36c92 call AnimateFailedMove jp PrintButItFailed ; 36c98 BattleCommand29: ; 36c98 ; focusenergy ld a, BATTLE_VARS_SUBSTATUS4 call _GetBattleVar bit 2, [hl] jr nz, .asm_36cac ; 36c9f $b set 2, [hl] call AnimateCurrentMove ld hl, GettingPumpedText jp StdBattleTextBox .asm_36cac call AnimateFailedMove jp PrintButItFailed ; 36cb2 BattleCommand27: ; 36cb2 ; recoil ld hl, BattleMonMaxHP ld a, [hBattleTurn] and a jr z, .asm_36cbd ; 36cb8 $3 ld hl, EnemyMonMaxHPHi .asm_36cbd ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar ld d, a ld a, [CurDamage] ld b, a ld a, [CurDamage + 1] ld c, a srl b rr c srl b rr c ld a, b or c jr nz, .asm_36cd8 ; 36cd5 $1 inc c .asm_36cd8 ld a, [hli] ld [$d1eb], a ld a, [hl] ld [$d1ea], a dec hl dec hl ld a, [hl] ld [$d1ec], a sub c ld [hld], a ld [$d1ee], a ld a, [hl] ld [$d1ed], a sbc b ld [hl], a ld [$d1ef], a jr nc, .asm_36cfe ; 36cf4 $8 xor a ld [hli], a ld [hl], a ld hl, $d1ee ld [hli], a ld [hl], a .asm_36cfe ld hl, $c55e ld a, [hBattleTurn] and a ld a, $1 jr z, .asm_36d0c ; 36d06 $4 ld hl, $c4ca xor a .asm_36d0c ld [$d10a], a ld a, $b call Predef call RefreshBattleHuds ld hl, RecoilText jp StdBattleTextBox ; 36d1d BattleCommand2b: ; 36d1d ; confusetarget call GetOpponentItem ld a, b cp $19 ret z ld a, [EffectFailed] and a ret nz call Function37962 ret nz call CheckSubstituteOpp ret nz ld a, BATTLE_VARS_SUBSTATUS3_OPP call _GetBattleVar bit 7, [hl] ret nz jr Function36d70 BattleCommand2a: ; 36d3b ; confuse call GetOpponentItem ld a, b cp $19 jr nz, .asm_36d53 ld a, [hl] ld [$d265], a call GetItemName call AnimateFailedMove ld hl, ProtectedByText jp StdBattleTextBox .asm_36d53 ld a, BATTLE_VARS_SUBSTATUS3_OPP call _GetBattleVar bit 7, [hl] jr z, .asm_36d65 call AnimateFailedMove ld hl, AlreadyConfusedText jp StdBattleTextBox .asm_36d65 call CheckSubstituteOpp jr nz, Function36db6 ld a, [AttackMissed] and a jr nz, Function36db6 ; fallthrough ; 36d70 Function36d70: ; 36d70 ld bc, EnemyConfuseCount ld a, [hBattleTurn] and a jr z, .asm_36d7b ld bc, PlayerConfuseCount .asm_36d7b set 7, [hl] call BattleRandom and 3 inc a inc a ld [bc], a ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_CONFUSE_HIT jr z, .asm_36d99 cp EFFECT_SNORE jr z, .asm_36d99 cp EFFECT_SWAGGER jr z, .asm_36d99 call AnimateCurrentMove .asm_36d99 ld de, $0103 call Function37e54 ld hl, BecameConfusedText call StdBattleTextBox call GetOpponentItem ld a, b cp $f jr z, .asm_36db0 cp $10 ret nz .asm_36db0 ld hl, Function3de51 jp CallBattleCore ; 36db6 Function36db6: ; 36db6 ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_CONFUSE_HIT ret z cp EFFECT_SNORE ret z cp EFFECT_SWAGGER ret z jp PrintDidntAffect2 ; 36dc7 BattleCommand30: ; 36dc7 ; paralyze ld a, BATTLE_VARS_STATUS_OPP call GetBattleVar bit 6, a jr nz, .asm_36e49 ; 36dce $79 ld a, [TypeModifier] and $7f jr z, .asm_36e55 ; 36dd5 $7e call GetOpponentItem ld a, b cp $18 jr nz, .asm_36def ; 36ddd $10 ld a, [hl] ld [$d265], a call GetItemName call AnimateFailedMove ld hl, ProtectedByText jp StdBattleTextBox .asm_36def ld a, [hBattleTurn] and a jr z, .asm_36e0e ; 36df2 $1a ld a, [InLinkBattle] and a jr nz, .asm_36e0e ; 36df8 $14 ld a, [$cfc0] and a jr nz, .asm_36e0e ; 36dfe $e ld a, [PlayerSubStatus5] bit 5, a jr nz, .asm_36e0e ; 36e05 $7 call BattleRandom cp $40 jr c, .asm_36e52 ; 36e0c $44 .asm_36e0e ld a, BATTLE_VARS_STATUS_OPP call _GetBattleVar and a jr nz, .asm_36e52 ; 36e14 $3c ld a, [AttackMissed] and a jr nz, .asm_36e52 ; 36e1a $36 call CheckSubstituteOpp jr nz, .asm_36e52 ; 36e1f $31 ld c, $1e call DelayFrames call AnimateCurrentMove ld a, $1 ld [$ffd4], a ld a, BATTLE_VARS_STATUS_OPP call _GetBattleVar set 6, [hl] call UpdateOpponentInParty ld hl, Function3ec39 call CallBattleCore call UpdateBattleHuds call PrintParalyze ld hl, Function3dde9 jp CallBattleCore .asm_36e49 call AnimateFailedMove ld hl, AlreadyParalyzedText jp StdBattleTextBox .asm_36e52 jp PrintDidntAffect2 .asm_36e55 call AnimateFailedMove jp PrintDoesntAffect ; 36e5b Function36e5b: ; 36e5b ; Compare move type to user type. ; Return z if matching the user type (unless the move is Normal). push hl ld hl, EnemyMonType1 ld a, [hBattleTurn] and a jr z, .ok ld hl, BattleMonType1 .ok ld a, BATTLE_VARS_MOVE_TYPE call GetBattleVar cp NORMAL jr z, .normal cp [hl] jr z, .return inc hl cp [hl] .return pop hl ret .normal ld a, 1 and a pop hl ret ; 36e7c BattleCommand31: ; 36e7c ; substitute call BattleCommandaa ld hl, BattleMonMaxHP ld de, $c6df ld a, [hBattleTurn] and a jr z, .asm_36e90 ; 36e88 $6 ld hl, EnemyMonMaxHPHi ld de, $c6e0 .asm_36e90 ld a, BATTLE_VARS_SUBSTATUS4 call GetBattleVar bit 4, a jr nz, .asm_36ef4 ; 36e97 $5b ld a, [hli] ld b, [hl] srl a rr b srl a rr b dec hl dec hl ld a, b ld [de], a ld a, [hld] sub b ld e, a ld a, [hl] sbc $0 ld d, a jr c, .asm_36eff ; 36eae $4f ld a, d or e jr z, .asm_36eff ; 36eb2 $4b ld [hl], d inc hl ld [hl], e ld a, BATTLE_VARS_SUBSTATUS4 call _GetBattleVar set 4, [hl] ld hl, $c730 ld de, $c72e ld a, [hBattleTurn] and a jr z, .asm_36ecf ; 36ec7 $6 ld hl, $c731 ld de, $c72f .asm_36ecf xor a ld [hl], a ld [de], a call Function37ed5 jr c, .asm_36ee8 ; 36ed5 $11 xor a ld [$cfca], a ld [FXAnimIDHi], a ld [$c689], a ld a, $a4 call Function37e44 jr .asm_36eeb ; 36ee6 $3 .asm_36ee8 call BattleCommanda6 .asm_36eeb ld hl, MadeSubstituteText call StdBattleTextBox jp RefreshBattleHuds .asm_36ef4 call Function34548 call nz, BattleCommand0c ld hl, HasSubstituteText jr .asm_36f08 ; 36efd $9 .asm_36eff call Function34548 call nz, BattleCommand0c ld hl, TooWeakSubText .asm_36f08 jp StdBattleTextBox ; 36f0b BattleCommand32: ; 36f0b ; rechargenextturn ld a, BATTLE_VARS_SUBSTATUS4 call _GetBattleVar set 5, [hl] ret ; 36f13 EndRechargeOpp: ; 36f13 push hl ld a, BATTLE_VARS_SUBSTATUS4_OPP call _GetBattleVar res 5, [hl] pop hl ret ; 36f1d BattleCommand97: ; 36f1d ; rage ld a, BATTLE_VARS_SUBSTATUS4 call _GetBattleVar set 6, [hl] ret ; 36f25 BattleCommand98: ; 36f25 ; doubleflyingdamage ld a, BATTLE_VARS_SUBSTATUS3_OPP call GetBattleVar bit SUBSTATUS_FLYING, a ret z jr DoubleDamage ; 36f2f BattleCommand99: ; 36f2f ; doubleundergrounddamage ld a, BATTLE_VARS_SUBSTATUS3_OPP call GetBattleVar bit SUBSTATUS_UNDERGROUND, a ret z ; fallthrough ; 36f37 DoubleDamage: ; 36f37 ld hl, CurDamage + 1 sla [hl] dec hl rl [hl] jr nc, .quit ld a, $ff ld [hli], a ld [hl], a .quit ret ; 36f46 BattleCommand33: ; 36f46 ; mimic call Function372d8 call BattleCommandaa ld a, [AttackMissed] and a jr nz, .asm_36f9a ; 36f50 $48 ld hl, BattleMonMoves ld a, [hBattleTurn] and a jr z, .asm_36f5d ; 36f58 $3 ld hl, EnemyMonMoves .asm_36f5d call CheckHiddenOpponent jr nz, .asm_36f9a ; 36f60 $38 ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP call GetBattleVar and a jr z, .asm_36f9a ; 36f68 $30 cp $a5 jr z, .asm_36f9a ; 36f6c $2c ld b, a ld c, $4 .asm_36f71 ld a, [hli] cp b jr z, .asm_36f9a ; 36f73 $25 dec c jr nz, .asm_36f71 ; 36f76 $f9 dec hl .asm_36f79 ld a, [hld] cp $66 jr nz, .asm_36f79 ; 36f7c $fb inc hl ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP call GetBattleVar ld [hl], a ld [$d265], a ld bc, $0006 add hl, bc ld [hl], $5 call GetMoveName call AnimateCurrentMove ld hl, LearnedMoveText jp StdBattleTextBox .asm_36f9a jp Function37357 ; 36f9d BattleCommand35: ; 36f9d ; leechseed ld a, [AttackMissed] and a jr nz, .asm_36fd8 ; 36fa1 $35 call CheckSubstituteOpp jr nz, .asm_36fd8 ; 36fa6 $30 ld de, EnemyMonType1 ld a, [hBattleTurn] and a jr z, .asm_36fb3 ; 36fae $3 ld de, BattleMonType1 .asm_36fb3 ld a, [de] cp $16 jr z, .asm_36fd2 ; 36fb6 $1a inc de ld a, [de] cp $16 jr z, .asm_36fd2 ; 36fbc $14 ld a, BATTLE_VARS_SUBSTATUS4_OPP call _GetBattleVar bit 7, [hl] jr nz, .asm_36fd8 ; 36fc5 $11 set 7, [hl] call AnimateCurrentMove ld hl, WasSeededText jp StdBattleTextBox .asm_36fd2 call AnimateFailedMove jp PrintDoesntAffect .asm_36fd8 call AnimateFailedMove ld hl, EvadedText jp StdBattleTextBox ; 36fe1 BattleCommand36: ; 36fe1 call AnimateCurrentMove callba Function1060e5 jp PrintNothingHappened ; 36fed BattleCommand37: ; 36fed ; disable ld a, [AttackMissed] and a jr nz, .asm_37059 ; 36ff1 $66 ld de, EnemyDisableCount ld hl, EnemyMonMoves ld a, [hBattleTurn] and a jr z, .asm_37004 ; 36ffc $6 ld de, PlayerDisableCount ld hl, BattleMonMoves .asm_37004 ld a, [de] and a jr nz, .asm_37059 ; 37006 $51 ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP call GetBattleVar and a jr z, .asm_37059 ; 3700e $49 cp $a5 jr z, .asm_37059 ; 37012 $45 ld b, a ld c, $ff .asm_37017 inc c ld a, [hli] cp b jr nz, .asm_37017 ; 3701a $fb ld a, [hBattleTurn] and a ld hl, EnemyMonPPMove1 jr z, .asm_37027 ; 37022 $3 ld hl, BattleMonPP .asm_37027 ld b, $0 add hl, bc ld a, [hl] and a jr z, .asm_37059 ; 3702c $2b .asm_3702e call BattleRandom and $7 jr z, .asm_3702e ; 37033 $f9 inc a inc c swap c add c ld [de], a call AnimateCurrentMove ld hl, DisabledMove ld a, [hBattleTurn] and a jr nz, .asm_37047 ; 37044 $1 inc hl .asm_37047 ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP call GetBattleVar ld [hl], a ld [$d265], a call GetMoveName ld hl, WasDisabledText jp StdBattleTextBox .asm_37059 jp Function37354 ; 3705c BattleCommand1e: ; 3705c ; payday xor a ld hl, StringBuffer1 ld [hli], a ld a, [hBattleTurn] and a ld a, [BattleMonLevel] jr z, .asm_3706c ; 37067 $3 ld a, [EnemyMonLevel] .asm_3706c add a ld hl, $c6ee add [hl] ld [hld], a jr nc, .asm_37079 ; 37072 $5 inc [hl] dec hl jr nz, .asm_37079 ; 37076 $1 inc [hl] .asm_37079 ld hl, CoinsScatteredText jp StdBattleTextBox ; 3707f BattleCommand1f: ; 3707f ; conversion ld hl, BattleMonMoves ld de, BattleMonType1 ld a, [hBattleTurn] and a jr z, .asm_37090 ; 37088 $6 ld hl, EnemyMonMoves ld de, EnemyMonType1 .asm_37090 push de ld c, $0 ld de, StringBuffer1 .asm_37096 push hl ld b, $0 add hl, bc ld a, [hl] pop hl and a jr z, .asm_370b2 ; 3709d $13 push hl push bc dec a ld hl, Moves + PlayerMoveType - PlayerMoveStruct call GetMoveAttr ld [de], a inc de pop bc pop hl inc c ld a, c cp $4 jr c, .asm_37096 ; 370b0 $e4 .asm_370b2 ld a, $ff ld [de], a inc de ld [de], a inc de ld [de], a pop de ld hl, StringBuffer1 .asm_370bd ld a, [hl] cp $ff jr z, .asm_370d3 ; 370c0 $11 cp $13 jr z, .asm_370d0 ; 370c4 $a ld a, [de] cp [hl] jr z, .asm_370d0 ; 370c8 $6 inc de ld a, [de] dec de cp [hl] jr nz, .asm_370d9 ; 370ce $9 .asm_370d0 inc hl jr .asm_370bd ; 370d1 $ea .asm_370d3 call AnimateFailedMove jp PrintButItFailed .asm_370d9 call BattleRandom and $3 ld c, a ld b, $0 ld hl, StringBuffer1 add hl, bc ld a, [hl] cp $ff jr z, .asm_370d9 ; 370e8 $ef cp $13 jr z, .asm_370d9 ; 370ec $eb ld a, [de] cp [hl] jr z, .asm_370d9 ; 370f0 $e7 inc de ld a, [de] dec de cp [hl] jr z, .asm_370d9 ; 370f6 $e1 ld a, [hl] ld [de], a inc de ld [de], a ld [$d265], a callba GetTypeName call AnimateCurrentMove ld hl, TransformedTypeText jp StdBattleTextBox ; 3710e BattleCommand20: ; 3710e ; resetstats ld a, 7 ; neutral ld hl, PlayerStatLevels call .Fill ld hl, EnemyStatLevels call .Fill ld a, [hBattleTurn] push af call SetPlayerTurn call Function365d7 call SetEnemyTurn call Function365fd pop af ld [hBattleTurn], a call AnimateCurrentMove ld hl, EliminatedStatsText jp StdBattleTextBox .Fill ld b, PlayerStatLevelsEnd - PlayerStatLevels .asm_37139 ld [hli], a dec b jr nz, .asm_37139 ret ; 3713e BattleCommand2c: ; 3713e ; heal ld de, BattleMonHP ld hl, BattleMonMaxHP ld a, [hBattleTurn] and a jr z, .asm_3714f ; 37147 $6 ld de, EnemyMonHPHi ld hl, EnemyMonMaxHPHi .asm_3714f ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar ld b, a push hl push de push bc ld c, $2 call StringCmp pop bc pop de pop hl jp z, .asm_371c4 ld a, b cp $9c jr nz, .asm_37199 ; 37166 $31 push hl push de push af call BattleCommandaa ld a, BATTLE_VARS_SUBSTATUS5 call _GetBattleVar res 0, [hl] ld a, BATTLE_VARS_STATUS call _GetBattleVar ld a, [hl] and a ld [hl], $3 ld hl, WentToSleepText jr z, .asm_37186 ; 37181 $3 ld hl, RestedText .asm_37186 call StdBattleTextBox ld a, [hBattleTurn] and a jr nz, .asm_37193 ; 3718c $5 call Function365d7 jr .asm_37196 ; 37191 $3 .asm_37193 call Function365fd .asm_37196 pop af pop de pop hl .asm_37199 jr z, .asm_371a3 ; 37199 $8 ld hl, GetHalfMaxHP call CallBattleCore jr .asm_371a9 ; 371a1 $6 .asm_371a3 ld hl, GetMaxHP call CallBattleCore .asm_371a9 call AnimateCurrentMove call SwitchTurn ld hl, Function3ccef call CallBattleCore call SwitchTurn call UpdateUserInParty call RefreshBattleHuds ld hl, RegainedHealthText jp StdBattleTextBox .asm_371c4 call AnimateFailedMove ld hl, HPIsFullText jp StdBattleTextBox ; 371cd BattleCommand2d: ; 371cd ; transform call Function372d8 ld a, BATTLE_VARS_SUBSTATUS5_OPP call _GetBattleVar bit 3, [hl] jp nz, Function372d2 call CheckHiddenOpponent jp nz, Function372d2 xor a ld [$cfca], a ld [FXAnimIDHi], a ld a, $1 ld [$c689], a ld a, BATTLE_VARS_SUBSTATUS4 call _GetBattleVar bit 4, [hl] push af jr z, .asm_37200 ; 371f4 $a call Function34548 jr nz, .asm_37200 ; 371f9 $5 ld a, $a4 call Function37e44 .asm_37200 ld a, BATTLE_VARS_SUBSTATUS5 call _GetBattleVar set 3, [hl] call ResetActorDisable ld hl, BattleMonSpecies ld de, EnemyMonSpecies ld a, [hBattleTurn] and a jr nz, .asm_3721f ; 37213 $a ld hl, EnemyMonSpecies ld de, BattleMonSpecies xor a ld [CurMoveNum], a .asm_3721f push hl ld a, [hli] ld [de], a inc hl inc de inc de ld bc, $0004 call CopyBytes ld a, [hBattleTurn] and a jr z, .asm_3723a ; 3722e $a ld a, [de] ld [$c6f2], a inc de ld a, [de] ld [$c6f3], a dec de .asm_3723a ld a, [hli] ld [de], a inc de ld a, [hli] ld [de], a inc de ld bc, $000c add hl, bc push hl ld h, d ld l, e add hl, bc ld d, h ld e, l pop hl ld bc, $000c call CopyBytes ld bc, $ffe2 add hl, bc push de ld d, h ld e, l pop hl ld bc, $ffe8 add hl, bc ld b, $4 .asm_3725f ld a, [de] inc de and a jr z, .asm_3726c ; 37262 $8 cp SKETCH ld a, 1 jr z, .asm_3726c ; 37268 $2 ld a, 5 .asm_3726c ld [hli], a dec b jr nz, .asm_3725f ; 3726e $ef pop hl ld a, [hl] ld [$d265], a call GetPokemonName ld hl, EnemyStats ld de, PlayerStats ld bc, $000a call BattleSideCopy ld hl, EnemyStatLevels ld de, PlayerStatLevels ld bc, $0008 call BattleSideCopy call Function37ed5 jr c, .asm_372a8 ; 37293 $13 ld a, [hBattleTurn] and a ld a, [$c6fe] jr z, .asm_372a0 ; 3729b $3 ld a, [$c6fa] .asm_372a0 and a jr nz, .asm_372a8 ; 372a1 $5 call Function37e36 jr .asm_372ae ; 372a6 $6 .asm_372a8 call BattleCommandaa call BattleCommanda6 .asm_372ae xor a ld [$cfca], a ld [FXAnimIDHi], a ld a, $2 ld [$c689], a pop af ld a, $a4 call nz, Function37e44 ld hl, TransformedText jp StdBattleTextBox ; 372c6 BattleSideCopy: ; 372c6 ; Copy bc bytes from hl to de if it's the player's turn. ; Copy bc bytes from de to hl if it's the enemy's turn. ld a, [hBattleTurn] and a jr z, .copy ; Swap hl and de push hl ld h, d ld l, e pop de .copy jp CopyBytes ; 372d2 Function372d2: ; 372d2 call AnimateFailedMove jp PrintButItFailed ; 372d8 Function372d8: ; 372d8 ld a, BATTLE_VARS_LAST_COUNTER_MOVE call _GetBattleVar xor a ld [hl], a ld a, BATTLE_VARS_LAST_MOVE call _GetBattleVar xor a ld [hl], a ret ; 372e7 ResetActorDisable: ; 372e7 ld a, [hBattleTurn] and a jr z, .player xor a ld [EnemyDisableCount], a ld [EnemyDisabledMove], a ret .player xor a ld [PlayerDisableCount], a ld [DisabledMove], a ret ; 372fc BattleCommand2e: ; 372fc ; screen ld hl, PlayerScreens ld bc, PlayerLightScreenCount ld a, [hBattleTurn] and a jr z, .asm_3730d ld hl, EnemyScreens ld bc, EnemyLightScreenCount .asm_3730d ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar cp EFFECT_LIGHT_SCREEN jr nz, .Reflect bit 3, [hl] jr nz, .asm_37337 set 3, [hl] ld a, $5 ld [bc], a ld hl, LightScreenEffectText jr .asm_37331 .Reflect bit 4, [hl] jr nz, .asm_37337 set 4, [hl] ; LightScreenCount -> ReflectCount inc bc ld a, $5 ld [bc], a ld hl, ReflectEffectText .asm_37331 call AnimateCurrentMove jp StdBattleTextBox .asm_37337 call AnimateFailedMove jp PrintButItFailed ; 3733d PrintDoesntAffect: ; 3733d ; 'it doesn't affect' ld hl, DoesntAffectText jp StdBattleTextBox ; 37343 PrintNothingHappened: ; 37343 ; 'but nothing happened!' ld hl, NothingHappenedText jp StdBattleTextBox ; 37349 TryPrintButItFailed: ; 37349 ld a, [AlreadyFailed] and a ret nz ; fallthrough ; 3734e PrintButItFailed: ; 3734e ; 'but it failed!' ld hl, ButItFailedText jp StdBattleTextBox ; 37354 Function37354: ; 37354 call AnimateFailedMove ; fallthrough ; 37357 Function37357: ; 37357 ld hl, ButItFailedText ; 'but it failed!' ld de, ItFailedText ; 'it failed!' jp Function35157 ; 37360 PrintDidntAffect: ; 37360 ; 'it didn't affect' ld hl, DidntAffect1Text jp StdBattleTextBox ; 37366 PrintDidntAffect2: ; 37366 call AnimateFailedMove ld hl, DidntAffect1Text ; 'it didn't affect' ld de, DidntAffect2Text ; 'it didn't affect' jp Function35157 ; 37372 PrintParalyze: ; 37372 ; 'paralyzed! maybe it can't attack!' ld hl, ParalyzedText jp StdBattleTextBox ; 37378 CheckSubstituteOpp: ; 37378 ld a, BATTLE_VARS_SUBSTATUS4_OPP call GetBattleVar bit 4, a ret ; 37380 BattleCommand1a: ; 37380 callba Function10610d ld a, $4 ld [$cfca], a ld c, $3 call DelayFrames ld a, BATTLE_VARS_STATUS call _GetBattleVar xor a ld [hli], a inc hl ld [hli], a ld [hl], a ld a, $1 ld [$c689], a call BattleCommand0a call Function37e36 ld a, BATTLE_VARS_SUBSTATUS4 call _GetBattleVar res 7, [hl] ld a, BATTLE_VARS_SUBSTATUS5_OPP call _GetBattleVar res 6, [hl] call Function37ed5 ret nc callba DrawPlayerHUD callba Function3e043 call WaitBGMap jp RefreshBattleHuds ; 373c9 INCLUDE "battle/effects/mirror_move.asm" INCLUDE "battle/effects/metronome.asm" CheckUserMove: ; 37462 ; Return z if the user has move a. ld b, a ld de, BattleMonMoves ld a, [hBattleTurn] and a jr z, .ok ld de, EnemyMonMoves .ok ld c, NUM_MOVES .loop ld a, [de] inc de cp b ret z dec c jr nz, .loop ld a, 1 and a ret ; 3747b ResetTurn: ; 3747b ld hl, $c732 ld a, [hBattleTurn] and a jr z, .asm_37486 ld hl, $c733 .asm_37486 ld [hl], 1 xor a ld [AlreadyDisobeyed], a call DoMove jp EndMoveEffect ; 37492 INCLUDE "battle/effects/thief.asm" BattleCommand51: ; 37517 ; arenatrap ; Doesn't work on an absent opponent. call CheckHiddenOpponent jr nz, .failed ; Don't trap if the opponent is already trapped. ld a, BATTLE_VARS_SUBSTATUS5 call _GetBattleVar bit SUBSTATUS_CANT_RUN, [hl] jr nz, .failed ; Otherwise trap the opponent. set SUBSTATUS_CANT_RUN, [hl] call AnimateCurrentMove ld hl, CantEscapeNowText jp StdBattleTextBox .failed call AnimateFailedMove jp PrintButItFailed ; 37536 INCLUDE "battle/effects/nightmare.asm" BattleCommand53: ; 37563 ; defrost ; Thaw the user. ld a, BATTLE_VARS_STATUS call _GetBattleVar bit FRZ, [hl] ret z res FRZ, [hl] ; Don't update the enemy's party struct in a wild battle. ld a, [hBattleTurn] and a jr z, .party ld a, [IsInBattle] dec a jr z, .done .party ld a, PartyMon1Status - PartyMon1 call UserPartyAttr res FRZ, [hl] .done call RefreshBattleHuds ld hl, WasDefrostedText jp StdBattleTextBox ; 37588 INCLUDE "battle/effects/curse.asm" INCLUDE "battle/effects/protect.asm" INCLUDE "battle/effects/endure.asm" INCLUDE "battle/effects/spikes.asm" INCLUDE "battle/effects/foresight.asm" INCLUDE "battle/effects/perish_song.asm" INCLUDE "battle/effects/sandstorm.asm" INCLUDE "battle/effects/rollout.asm" BattleCommand5d: ; 37791 ; unused ret ; 37792 BattleCommand5e: ; 37792 ; furycutter ld hl, PlayerFuryCutterCount ld a, [hBattleTurn] and a jr z, .go ld hl, EnemyFuryCutterCount .go ld a, [AttackMissed] and a jp nz, ResetFuryCutterCount inc [hl] ; Damage capped at 5 turns' worth (16x). ld a, [hl] ld b, a cp 6 jr c, .checkdouble ld b, 5 .checkdouble dec b ret z ; Double the damage ld hl, CurDamage + 1 sla [hl] dec hl rl [hl] jr nc, .checkdouble ; No overflow ld a, $ff ld [hli], a ld [hl], a ret ; 377be ResetFuryCutterCount: ; 377be push hl ld hl, PlayerFuryCutterCount ld a, [hBattleTurn] and a jr z, .reset ld hl, EnemyFuryCutterCount .reset xor a ld [hl], a pop hl ret ; 377ce BattleCommand5f: ; 377ce ; attract ld a, [AttackMissed] and a jr nz, .asm_377f2 call Function377f5 jr c, .asm_377f2 call CheckHiddenOpponent jr nz, .asm_377f2 ld a, BATTLE_VARS_SUBSTATUS1_OPP call _GetBattleVar bit 7, [hl] jr nz, .asm_377f2 set 7, [hl] call AnimateCurrentMove ; 'fell in love!' ld hl, FellInLoveText jp StdBattleTextBox .asm_377f2 jp Function37354 ; 377f5 Function377f5: ; 377f5 ld a, 0 call BattlePartyAttr ld a, [hl] ld [CurPartySpecies], a ld a, [CurBattleMon] ld [CurPartyMon], a xor a ld [MonType], a callba GetGender jr c, .asm_37849 ld b, 1 jr nz, .asm_37815 dec b .asm_37815 push bc ld a, [TempEnemyMonSpecies] ld [CurPartySpecies], a ld hl, EnemyMonAtkDefDV ld a, [EnemySubStatus5] bit 3, a jr z, .asm_37829 ld hl, $c6f2 .asm_37829 ld a, [hli] ld [$d123], a ld a, [hl] ld [$d124], a ld a, 3 ld [MonType], a callba GetGender pop bc jr c, .asm_37849 ld a, 1 jr nz, .asm_37844 dec a .asm_37844 xor b jr z, .asm_37849 and a ret .asm_37849 scf ret ; 3784b BattleCommand60: ; 3784b ; happinesspower push bc ld hl, BattleMonHappiness ld a, [hBattleTurn] and a jr z, .asm_37857 ; 37852 $3 ld hl, EnemyMonHappiness .asm_37857 xor a ld [$ffb4], a ld [$ffb5], a ld a, [hl] ld [$ffb6], a ld a, $a ld [$ffb7], a call Multiply ld a, $19 ld [$ffb7], a ld b, $4 call Divide ld a, [$ffb6] ld d, a pop bc ret ; 37874 BattleCommand61: ; 37874 ; present ld a, [InLinkBattle] cp $3 jr z, .asm_3787d ; 37879 $2 push bc push de .asm_3787d call BattleCommand07 ld a, [InLinkBattle] cp $3 jr z, .asm_37889 ; 37885 $2 pop de pop bc .asm_37889 ld a, [$d265] and a jp z, AnimateFailedMove ld a, [AttackMissed] and a jp nz, AnimateFailedMove push bc call BattleRandom ld b, a ld hl, .table_37907 ld c, 0 .asm_378a1 ld a, [hli] cp $ff jr z, .asm_378b7 ; 378a4 $11 cp b jr nc, .asm_378ad ; 378a7 $4 inc c inc hl jr .asm_378a1 ; 378ab $f4 .asm_378ad ld a, c ld [$c689], a call Function37de9 ld d, [hl] pop bc ret .asm_378b7 pop bc ld a, $3 ld [$c689], a call AnimateCurrentMove call SwitchTurn ld hl, AICheckPlayerMaxHP ld a, [hBattleTurn] and a jr z, .asm_378ce ; 378c9 $3 ld hl, AICheckEnemyMaxHP .asm_378ce ld a, BANK(AICheckPlayerMaxHP) rst FarCall jr c, .asm_378f3 ; 378d1 $20 ld hl, GetQuarterMaxHP call CallBattleCore call SwitchTurn ld hl, Function3ccef call CallBattleCore call SwitchTurn ld hl, RegainedHealthText call StdBattleTextBox call SwitchTurn call UpdateOpponentInParty jr .asm_37904 ; 378f1 $11 .asm_378f3 call SwitchTurn call Function37ed5 jr nc, .asm_37904 ; 378f9 $9 call AnimateFailedMove ld hl, RefusedGiftText call StdBattleTextBox .asm_37904 jp EndMoveEffect .table_37907 db $66, 40 db $b3, 80 db $cc, 120 db $ff ; 3790e BattleCommand63: ; 3790e ; frustrationpower push bc ld hl, BattleMonHappiness ld a, [hBattleTurn] and a jr z, .asm_3791a ; 37915 $3 ld hl, EnemyMonHappiness .asm_3791a ld a, $ff sub [hl] ld [$ffb6], a xor a ld [$ffb4], a ld [$ffb5], a ld a, $a ld [$ffb7], a call Multiply ld a, $19 ld [$ffb7], a ld b, $4 call Divide ld a, [$ffb6] ld d, a pop bc ret ; 37939 BattleCommand64: ; 37939 ; safeguard ld hl, PlayerScreens ld de, $c701 ld a, [hBattleTurn] and a jr z, .asm_3794a ; 37942 $6 ld hl, EnemyScreens ld de, $c705 .asm_3794a bit 2, [hl] jr nz, .asm_3795c ; 3794c $e set 2, [hl] ld a, $5 ld [de], a call AnimateCurrentMove ld hl, CoveredByVeilText jp StdBattleTextBox .asm_3795c call AnimateFailedMove jp PrintButItFailed ; 37962 Function37962: ; 37962 push hl ld hl, EnemyScreens ld a, [hBattleTurn] and a jr z, .asm_3796e ld hl, PlayerScreens .asm_3796e bit 2, [hl] pop hl ret ; 37972 BattleCommand65: ; 37972 ; checksafeguard ld hl, EnemyScreens ld a, [hBattleTurn] and a jr z, .asm_3797d ; 37978 $3 ld hl, PlayerScreens .asm_3797d bit 2, [hl] ret z ld a, $1 ld [AttackMissed], a call BattleCommandaa ld hl, SafeguardProtectText call StdBattleTextBox jp EndMoveEffect ; 37991 BattleCommand66: ; 37991 ; getmagnitude push bc call BattleRandom ld b, a ld hl, .Magnitudes .asm_37999 ld a, [hli] cp b jr nc, .asm_379a1 ; 3799b $4 inc hl inc hl jr .asm_37999 ; 3799f $f8 .asm_379a1 ld d, [hl] push de inc hl ld a, [hl] ld [$d265], a call BattleCommandaa ld hl, MagnitudeText call StdBattleTextBox pop de pop bc ret .Magnitudes ; /255, BP, magnitude db 13, 10, 4 db 38, 30, 5 db 89, 50, 6 db 166, 70, 7 db 217, 90, 8 db 242, 110, 9 db 255, 150, 10 ; 379c9 BattleCommand67: ; 379c9 ; batonpass ld a, [hBattleTurn] and a jp nz, .Enemy ; Need something to switch to call CheckAnyOtherAlivePartyMons jp z, FailedBatonPass call UpdateBattleMonInParty call AnimateCurrentMove ld c, 50 call DelayFrames ; Transition into switchmon menu call Function1d6e callba Function3d2f7 callba ForcePickSwitchMonInBattle ; Return to battle scene call ClearPalettes callba Function3ed9f call Function1c17 call ClearSprites hlcoord 1, 0 lb bc, 4, 10 call ClearBox ld b, 1 call GetSGBLayout call Function32f9 call BatonPass_LinkPlayerSwitch ; Mobile link battles handle entrances differently callba Function3d2e0 jp c, EndMoveEffect ld hl, PassedBattleMonEntrance call CallBattleCore call ResetBatonPassStatus ret .Enemy ; Wildmons don't have anything to switch to ld a, [IsInBattle] dec a ; WILDMON jp z, FailedBatonPass call CheckAnyOtherAliveEnemyMons jp z, FailedBatonPass call UpdateEnemyMonInParty call AnimateCurrentMove call BatonPass_LinkEnemySwitch ; Mobile link battles handle entrances differently callba Function3d2e0 jp c, EndMoveEffect ; Passed enemy PartyMon entrance xor a ld [$c718], a ld hl, Function3d517 call CallBattleCore ld hl, Function3d57a call CallBattleCore ld a, 1 ld [$d265], a ld hl, Function3ecab call CallBattleCore ld hl, SpikesDamage call CallBattleCore jr ResetBatonPassStatus ; 37a67 BatonPass_LinkPlayerSwitch: ; 37a67 ld a, [InLinkBattle] and a ret z ld a, 1 ld [$d0ec], a call Function1d6e ld hl, Function3e8e4 call CallBattleCore call Function1c17 xor a ld [$d0ec], a ret ; 37a82 BatonPass_LinkEnemySwitch: ; 37a82 ld a, [InLinkBattle] and a ret z call Function1d6e ld hl, Function3e8e4 call CallBattleCore ld a, [OTPartyCount] add 4 ld b, a ld a, [$d430] cp 4 jr c, .asm_37aa0 cp b jr c, .asm_37aa8 .asm_37aa0 ld a, [CurOTMon] add 4 ld [$d430], a .asm_37aa8 jp Function1c17 ; 37aab FailedBatonPass: ; 37aab call AnimateFailedMove jp PrintButItFailed ; 37ab1 ResetBatonPassStatus: ; 37ab1 ; Reset status changes that aren't passed by Baton Pass. ; Nightmare isn't passed. ld a, BATTLE_VARS_STATUS call GetBattleVar and SLP jr nz, .ok ld a, BATTLE_VARS_SUBSTATUS1 call _GetBattleVar res SUBSTATUS_NIGHTMARE, [hl] .ok ; Disable isn't passed. call ResetActorDisable ; Attraction isn't passed. ld hl, PlayerSubStatus1 res SUBSTATUS_IN_LOVE, [hl] ld hl, EnemySubStatus1 res SUBSTATUS_IN_LOVE, [hl] ld hl, PlayerSubStatus5 ld a, BATTLE_VARS_SUBSTATUS5 call _GetBattleVar res 3, [hl] res 4, [hl] ; New mon hasn't used a move yet. ld a, BATTLE_VARS_LAST_MOVE call _GetBattleVar ld [hl], 0 xor a ld [$c730], a ld [$c731], a ret ; 37ae9 CheckAnyOtherAlivePartyMons: ; 37ae9 ld hl, PartyMon1HP ld a, [PartyCount] ld d, a ld a, [CurBattleMon] ld e, a jr CheckAnyOtherAliveMons ; 37af6 CheckAnyOtherAliveEnemyMons: ; 37af6 ld hl, OTPartyMon1HP ld a, [OTPartyCount] ld d, a ld a, [CurOTMon] ld e, a ; fallthrough ; 37b01 CheckAnyOtherAliveMons: ; 37b01 ; Check for nonzero HP starting from partymon ; HP at hl for d partymons, besides current mon e. ; Return nz if any are alive. xor a ld b, a ld c, a .loop ld a, c cp d jr z, .done cp e jr z, .next ld a, [hli] or b ld b, a ld a, [hld] or b ld b, a .next push bc ld bc, PartyMon2 - PartyMon1 add hl, bc pop bc inc c jr .loop .done ld a, b and a ret ; 37b1d BattleCommand68: ; 37b1d ld hl, $c711 ld a, [hBattleTurn] and a jr z, .asm_37b28 ; 37b23 $3 ld hl, $c710 .asm_37b28 ld a, [hl] and a ret z ld hl, CurDamage + 1 sla [hl] dec hl rl [hl] ret nc ld a, $ff ld [hli], a ld [hl], a ret ; 37b39 BattleCommand69: ; 37b39 ; clearhazards ld a, BATTLE_VARS_SUBSTATUS4 call _GetBattleVar bit 7, [hl] jr z, .asm_37b4a ; 37b40 $8 res 7, [hl] ld hl, ShedLeechSeedText call StdBattleTextBox .asm_37b4a ld hl, PlayerScreens ld de, $c730 ld a, [hBattleTurn] and a jr z, .asm_37b5b ; 37b53 $6 ld hl, EnemyScreens ld de, $c731 .asm_37b5b bit 0, [hl] jr z, .asm_37b69 ; 37b5d $a res 0, [hl] ld hl, BlewSpikesText push de call StdBattleTextBox pop de .asm_37b69 ld a, [de] and a ret z xor a ld [de], a ld hl, ReleasedByText jp StdBattleTextBox ; 37b74 BattleCommand6a: ; 37b74 ; healmorn ld b, MORN jr BattleCommand6a6c ; 37b78 BattleCommand6b: ; 37b78 ; healday ld b, DAY jr BattleCommand6a6c ; 37b7c BattleCommand6c: ; 37b7c ; healnite ld b, NITE ; fallthrough ; 37b7e BattleCommand6a6c: ; 37b7e ; Time- and weather-sensitive heal. ld hl, BattleMonMaxHP ld de, BattleMonHP ld a, [hBattleTurn] and a jr z, .start ld hl, EnemyMonMaxHP ld de, EnemyMonHP .start ; Index for .Multipliers ; Default restores half max HP. ld c, 2 ; Don't bother healing if HP is already full. push bc call StringCmp pop bc jr z, .Full ; Don't factor in time of day in link battles. ld a, [InLinkBattle] and a jr nz, .Weather ld a, [TimeOfDay] cp b jr z, .Weather dec c .Weather ld a, [Weather] and a jr z, .Heal ; x2 in sun ; /2 in rain/sandstorm inc c cp WEATHER_SUN jr z, .Heal dec c dec c .Heal ld b, 0 ld hl, .Multipliers add hl, bc add hl, bc ld a, [hli] ld h, [hl] ld l, a ld a, BANK(GetMaxHP) rst FarCall call AnimateCurrentMove call SwitchTurn callab Function3ccef call SwitchTurn call UpdateUserInParty ; 'regained health!' ld hl, RegainedHealthText jp StdBattleTextBox .Full call AnimateFailedMove ; 'hp is full!' ld hl, HPIsFullText jp StdBattleTextBox .Multipliers dw GetEighthMaxHP dw GetQuarterMaxHP dw GetHalfMaxHP dw GetMaxHP ; 37be8 BattleCommand6d: ; 37be8 ; hiddenpower ld a, [AttackMissed] and a ret nz callba HiddenPowerDamage ret ; 37bf4 BattleCommand6e: ; 37bf4 ; startrain ld a, WEATHER_RAIN ld [Weather], a ld a, 5 ld [WeatherCount], a call AnimateCurrentMove ld hl, DownpourText jp StdBattleTextBox ; 37c07 BattleCommand6f: ; 37c07 ; startsun ld a, WEATHER_SUN ld [Weather], a ld a, 5 ld [WeatherCount], a call AnimateCurrentMove ld hl, SunGotBrightText jp StdBattleTextBox ; 37c1a BattleCommand95: ; 37c1a ; bellydrum call BattleCommand77 ld a, [AttackMissed] and a jr nz, .asm_37c4f callab GetHalfMaxHP callab Function3ccde jr nc, .asm_37c4f push bc call AnimateCurrentMove pop bc callab Function3cc3f call UpdateUserInParty ld a, $5 .asm_37c41 push af call BattleCommand77 pop af dec a jr nz, .asm_37c41 ; 37c47 $f8 ld hl, BellyDrumText jp StdBattleTextBox .asm_37c4f call AnimateFailedMove jp PrintButItFailed ; 37c55 BattleCommand96: ; 37c55 ; psychup ld hl, EnemyStatLevels ld de, PlayerStatLevels ld a, [hBattleTurn] and a jr z, .asm_37c64 ; 37c5e $4 push hl ld h, d ld l, e pop de .asm_37c64 push hl ld b, $8 .asm_37c67 ld a, [hli] cp $7 jr nz, .asm_37c76 ; 37c6a $a dec b jr nz, .asm_37c67 ; 37c6d $f8 pop hl call AnimateFailedMove jp PrintButItFailed .asm_37c76 pop hl ld b, $8 .asm_37c79 ld a, [hli] ld [de], a inc de dec b jr nz, .asm_37c79 ; 37c7d $fa ld a, [hBattleTurn] and a jr nz, .asm_37c89 ; 37c82 $5 call Function365d7 jr .asm_37c8c ; 37c87 $3 .asm_37c89 call Function365fd .asm_37c8c call AnimateCurrentMove ld hl, CopiedStatsText jp StdBattleTextBox ; 37c95 BattleCommand9a: ; 37c95 ; mirrorcoat ld a, 1 ld [AttackMissed], a ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP call GetBattleVar and a ret z ld b, a callab GetMoveEffect ld a, b cp EFFECT_MIRROR_COAT ret z call BattleCommanda3 ld a, [$d265] and a ret z call Function36abf ret z ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP call GetBattleVar dec a ld de, StringBuffer1 call GetMoveData ld a, [$d075] and a ret z ld a, [$d076] cp SPECIAL ret c ld hl, CurDamage ld a, [hli] or [hl] ret z ld a, [hl] add a ld [hld], a ld a, [hl] adc a ld [hl], a jr nc, .capped ld a, $ff ld [hli], a ld [hl], a .capped xor a ld [AttackMissed], a ret ; 37ce6 BattleCommand9d: ; 37ce6 ; doubleminimizedamage ld hl, $c6fa ld a, [hBattleTurn] and a jr z, .asm_37cf1 ; 37cec $3 ld hl, $c6fe .asm_37cf1 ld a, [hl] and a ret z ld hl, CurDamage + 1 sla [hl] dec hl rl [hl] ret nc ld a, $ff ld [hli], a ld [hl], a ret ; 37d02 BattleCommand9e: ; 37d02 ; skipsuncharge ld a, [Weather] cp WEATHER_SUN ret nz ld b, $39 ; charge jp SkipToBattleCommand ; 37d0d BattleCommand9b: ; 37d0d ; checkfuturesight ld hl, $c71d ld de, $c727 ld a, [hBattleTurn] and a jr z, .ok ld hl, $c71e ld de, $c729 .ok ld a, [hl] and a ret z cp 1 ret nz ld [hl], 0 ld a, [de] inc de ld [CurDamage], a ld a, [de] ld [CurDamage + 1], a ld b, $9c ; futuresight jp SkipToBattleCommand ; 37d34 BattleCommand9c: ; 37d34 ; futuresight call Function34548 jr nz, .asm_37d4b ; 37d37 $12 ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar ld b, a ld a, BATTLE_VARS_LAST_COUNTER_MOVE call _GetBattleVar ld [hl], b ld a, BATTLE_VARS_LAST_MOVE call _GetBattleVar ld [hl], b .asm_37d4b ld hl, $c71d ld a, [hBattleTurn] and a jr z, .asm_37d56 ; 37d51 $3 ld hl, $c71e .asm_37d56 ld a, [hl] and a jr nz, .asm_37d87 ; 37d58 $2d ld a, $4 ld [hl], a call BattleCommand0a call BattleCommandaa ld hl, ForesawAttackText call StdBattleTextBox call BattleCommand0c ld de, $c727 ld a, [hBattleTurn] and a jr z, .asm_37d77 ; 37d72 $3 ld de, $c729 .asm_37d77 ld hl, CurDamage ld a, [hl] ld [de], a ld [hl], $0 inc hl inc de ld a, [hl] ld [de], a ld [hl], $0 jp EndMoveEffect .asm_37d87 pop bc call ResetDamage call AnimateFailedMove call PrintButItFailed jp EndMoveEffect ; 37d94 BattleCommand9f: ; 37d94 ; thunderaccuracy ld a, BATTLE_VARS_MOVE_TYPE call _GetBattleVar inc hl ld a, [Weather] cp WEATHER_RAIN jr z, .asm_37da7 ; 37d9f $6 cp WEATHER_SUN ret nz ld [hl], $80 ret .asm_37da7 ld [hl], $ff ret ; 37daa CheckHiddenOpponent: ; 37daa ld a, BATTLE_VARS_SUBSTATUS3_OPP call GetBattleVar and $60 ; fly | dig ret ; 37db2 GetUserItem: ; 37db2 ; Return the effect of the user's item in bc, and its id at hl. ld hl, BattleMonItem ld a, [hBattleTurn] and a jr z, .go ld hl, EnemyMonItem .go ld b, [hl] jp GetItem ; 37dc1 GetOpponentItem: ; 37dc1 ; Return the effect of the opponent's item in bc, and its id at hl. ld hl, EnemyMonItem ld a, [hBattleTurn] and a jr z, .go ld hl, BattleMonItem .go ld b, [hl] jp GetItem ; 37dd0 GetItem: ; 37dd0 ; Return the effect of item b in bc. ld a, b and a ret z push hl ld hl, ItemAttributes + 2 dec a ld c, a ld b, 0 ld a, Item2Attributes - Item1Attributes call AddNTimes ld a, BANK(ItemAttributes) call GetFarHalfword ld b, l ld c, h pop hl ret ; 37de9 Function37de9: ; 37de9 push hl push de push bc ld a, [$c689] push af call BattleCommand0a pop af ld [$c689], a call Function37e19 call BattleCommand0c pop bc pop de pop hl ret ; 37e01 AnimateCurrentMove: ; 37e01 push hl push de push bc ld a, [$c689] push af call BattleCommand0a pop af ld [$c689], a call Function37e36 call BattleCommand0c pop bc pop de pop hl ret ; 37e19 Function37e19: ; 37e19 xor a ld [FXAnimIDHi], a ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar and a ret z ld [FXAnimIDLo], a ld a, [hBattleTurn] and a ld a, 1 jr z, .asm_37e30 ld a, 4 .asm_37e30 ld [$cfca], a jp Function37e47 ; 37e36 Function37e36: ; 37e36 xor a ld [$cfca], a ld [FXAnimIDHi], a ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar and a ret z ; fallthrough ; 37e44 Function37e44: ; 37e44 ld [FXAnimIDLo], a ; fallthrough ; 37e47 Function37e47: ; 37e47 push hl push de push bc callab PlayBattleAnim pop bc pop de pop hl ret ; 37e54 Function37e54: ; 37e54 ld a, e ld [FXAnimIDLo], a ld a, d ld [FXAnimIDHi], a xor a ld [$cfca], a push hl push de push bc call SwitchTurn callab PlayBattleAnim call SwitchTurn pop bc pop de pop hl ret ; 37e73 CallBattleCore: ; 37e73 ld a, BANK(BattleCore) rst FarCall ret ; 37e77 AnimateFailedMove: ; 37e77 call BattleCommand0a call BattleCommandaa jp BattleCommand0c ; 37e80 BattleCommandaa: ; 37e80 ; movedelay ; Wait 40 frames. ld c, 40 jp DelayFrames ; 37e85 BattleCommand38: ; 37e85 ; cleartext ; Used in multi-hit moves. ld hl, .text jp BattleTextBox .text db "@" ; 37e8c SkipToBattleCommand: ; 37e8c ; Skip over commands until reaching command b. ld a, [BattleScriptBufferLoc + 1] ld h, a ld a, [BattleScriptBufferLoc] ld l, a .asm_37e94 ld a, [hli] cp b jr nz, .asm_37e94 ld a, h ld [BattleScriptBufferLoc + 1], a ld a, l ld [BattleScriptBufferLoc], a ret ; 37ea1 GetMoveAttr: ; 37ea1 ; Assuming hl = Moves + x, return attribute x of move a. push bc ld bc, Move2 - Move1 call AddNTimes call GetMoveByte pop bc ret ; 37ead GetMoveData: ; 37ead ; Copy move struct a to de. ld hl, Moves ld bc, Move2 - Move1 call AddNTimes ld a, Bank(Moves) jp FarCopyBytes ; 37ebb GetMoveByte: ; 37ebb ld a, BANK(Moves) jp GetFarByte ; 37ec0 Function37ec0: ; 37ec0 callba Functionfbd54 ret ; 37ec7 Function37ec7: ; 37ec7 callba Functionfbd71 ret ; 37ece Function37ece: ; 37ece callba Functionfbd69 ret ; 37ed5 Function37ed5: ; 37ed5 ; Related to mobile link battles. push hl push de push bc callba CheckBattleScene pop bc pop de pop hl ret ; 37ee2