ref: cabf0a5b8762b7781840d7b497962f8262b2941f
dir: /battle/effect_commands.asm/
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, Function0x34385 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 Function0x34385 .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, $5f48 call CallBankF 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 Function0x34385 .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 Function0x34385 .CheckFlinch ld hl, PlayerSubStatus3 bit 3, [hl] ; flinch jr z, .CheckDisabled res 3, [hl] ; 'flinched!' ld hl, FlinchedText call StdBattleTextBox call CantMove jp Function0x34385 .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 Function0x34385 .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 Function0x34385 .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 Function0x34385 .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 Function0x34385 ; 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 Function0x37ece ; 34216 Function0x34216: ; 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 Function0x34385 .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, $6036 call CallBankF 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 Function0x34385 .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 Function0x34385 .CheckFlinch ld hl, EnemySubStatus3 bit 3, [hl] jr z, .CheckDisabled res 3, [hl] ; 'flinched!' ld hl, FlinchedText call StdBattleTextBox call CantMove jp Function0x34385 .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 Function0x355dd 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 Function0x35d1c call BattleCommand0c call CantMove jp Function0x34385 .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 Function0x34385 .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 Function0x34385 .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 Function0x34385: ; 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 Function0x355dd 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, $5f48 call CallBankF ld a, $1 ld [$ffd4], a ld c, $1 call Function0x35d7e jp BattleCommand0c ; 343db BattleCommand02: ; 343db ; checkobedience ; Enemy can't disobey ld a, [hBattleTurn] and a ret nz call Function0x34548 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 Function0x3450c .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 Function0x3450c .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 Function0x3450c: ; 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 Function0x34548: ; 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 Function0x34548 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 Function0x3460b 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 Function0x3460b: ; 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 $49 ; 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 Function0x347c8 ld a, [$d265] ld b, a ld a, [TypeModifier] and $80 or b ld [TypeModifier], a ret ; 347c8 Function0x347c8: ; 347c8 ld hl, EnemyMonType1 ld a, [hBattleTurn] and a jr z, Function0x347d3 ld hl, BattleMonType1 ; fallthrough ; 347d3 Function0x347d3: ; 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 Function0x347c8 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 Function0x3484e: ; 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 Function0x347d3 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 Function0x34931 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 Function0x34939 ld a, e and a jr nz, .asm_348d7 ; 0x348a9 $2c call Function0x34939 jr .asm_348d7 ; 0x348ae $27 .asm_348b0 ld a, [BattleMonType1] ld b, a ld hl, EnemyMonType1 call Function0x347d3 ld a, [$d265] cp $b jr c, .asm_348c4 ; 0x348bf $3 call Function0x34931 .asm_348c4 ld a, [BattleMonType2] cp b jr z, .asm_348d7 ; 0x348c8 $d call Function0x347d3 ld a, [$d265] cp $b jr c, .asm_348d7 ; 0x348d2 $3 call Function0x34931 .asm_348d7 call Function0x348de pop bc pop de pop hl ret ; 348de Function0x348de: ; 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 Function0x347d3 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, Function0x34931 ; down cp $64 ret c jr Function0x34939 ; up .doubledown call Function0x34931 ; fallthrough ; 34931 Function0x34931: ; 34931 ld a, [$c716] dec a ld [$c716], a ret ; 34939 Function0x34939: ; 34939 ld a, [$c716] inc a ld [$c716], a ret ; 34941 Function0x34941: ; 34941 xor a ld [$c717], a call Function0x349f4 ret c ld a, [EnemySubStatus1] bit 4, a jr z, .asm_34986 ld a, [$c67f] cp $1 jr nz, .asm_34986 call Function0x349f4 call Function0x34b77 call Function0x34b20 call Function0x34a85 ld a, e cp $2 jr nz, .asm_34971 ld a, [$c716] add $30 ld [$c717], a ret .asm_34971 call Function0x349f4 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 Function0x3484e ld a, [$c716] cp $b ret nc ld a, [LastEnemyCounterMove] and a jr z, .asm_349d2 call Function0x34a2a ld a, [$c716] and a jr z, .asm_349d2 ld c, a call Function0x34aa7 ld a, [$c716] cp $ff ret z ld b, a ld a, e cp $2 jr z, .asm_349be call Function0x3484e ld a, [$c716] cp $a ret nc ld a, b add $10 ld [$c717], a ret .asm_349be ld c, $10 call Function0x3484e 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 Function0x3484e ld a, [$c716] cp $a ret nc call Function0x349f4 call Function0x34b77 call Function0x34b20 call Function0x34a85 ld a, e cp $2 ret nz ld a, [$c716] add $10 ld [$c717], a ret ; 349f4 Function0x349f4: ; 349f4 ld a, [OTPartyCount] cp 2 jr c, .asm_34a26 ld d, a ld e, 0 ld b, $20 ld c, 0 ld hl, OTPartyMon1CurHP .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 Function0x34a2a: ; 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 Function0x347d3 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 Function0x34a85: ; 34a85 push bc ld a, [OTPartyCount] ld e, a ld hl, OTPartyMon1CurHP 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 Function0x34aa7: ; 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 Function0x347d3 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 Function0x34b20: ; 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 Function0x347d3 ld a, [$d265] cp $b jr nc, .asm_34b6d ld a, [BattleMonType2] .asm_34b5d ld hl, $d23d call Function0x347d3 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 Function0x34b77: ; 34b77 push bc ld de, OTPartySpecies ld b, $20 ld c, 0 ld hl, OTPartyMon1CurHP .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 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 Function0x34548 ret nz .asm_34f21 call Function0x37ed5 jr c, .asm_34f36 xor a ld [$cfca], a ld [FXAnimIDHi], a inc a ld [$c689], a ld a, $a4 jp Function0x37e44 .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 Function0x37ec7 .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 ld a, BATTLE_VARS_SUBSTATUS4 call GetBattleVar bit SUBSTATUS_SUBSTITUTE, a ret z call Function0x37ed5 jp c, BattleCommanda6 xor a ld [$cfca], a ld [FXAnimIDHi], a ld a, $2 ld [$c689], a ld a, $a4 jp Function0x37e44 ; 35023 BattleCommand0d: ; 35023 ; resulttext ld a, [AttackMissed] and a ret z call Function0x350e4 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 Function0x37ece 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 Function0x35d1c jr .asm_3509e .asm_3509b call Function0x35d7e .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 Function0x350e4: ; 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 Function0x35157 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 Function0x37e36 ld c, $1 ld a, [hBattleTurn] and a jp nz, Function0x35d1c jp Function0x35d7e Function0x35157: ; 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 Function0x37e44 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 FIRE 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 Function0x3534d ld a, [BattleMonLevel] ld e, a call DittoMetalPowder ld a, 1 and a ret ; 3534d Function0x3534d: ; 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, Function0x3534d .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 FIRE ; 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 FIRE ; 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 FIRE 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 Function0x3534d 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 $38a2 ld a, $22 call Function0x355bd ld a, [hli] or [hl] jp z, Function0x355b0 ld a, [DefaultFlypoint] ld c, a ld a, [CurBattleMon] cp [hl] ld hl, BattleMonStatus jr z, .asm_354b2 ; 354ab $5 ld a, $20 call Function0x355bd .asm_354b2 ld a, [hl] and a jp nz, Function0x355b0 ld a, $1 ld [$c72d], a ld hl, BeatUpAttackText call StdBattleTextBox ld a, [EnemyMonSpecies] ld [CurSpecies], a call $3856 ld a, [$d239] ld c, a push bc ld a, $0 call Function0x355bd ld a, [hl] ld [CurSpecies], a call $3856 ld a, [$d238] pop bc ld b, a push bc ld a, $1f call Function0x355bd 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 $343b 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 Function0x355bd ld a, [hli] or [hl] jp z, Function0x355b0 ld a, [DefaultFlypoint] ld b, a ld a, [CurOTMon] cp b ld hl, EnemyMonStatus jr z, .asm_35560 ld a, $20 call Function0x355bd .asm_35560 ld a, [hl] and a jr nz, Function0x355b0 ld a, $1 ld [$c72d], a jr .asm_3557d .asm_3556b ld a, [EnemyMonSpecies] ld [$d265], a call $343b 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 Function0x355bd ld a, [hl] ld [CurSpecies], a call GetBaseData ld a, [$d238] pop bc ld b, a push bc ld a, $1f call Function0x355bd ld a, [hl] ld e, a pop bc ld a, [EnemyMovePower] ld d, a ret ; 355b0 Function0x355b0: ; 355b0 ld b, $12 ; buildopponentrage jp SkipToBattleCommand ; 355b5 BattleCommanda8: ; 355b5 ld a, [$c72d] and a ret nz jp PrintButItFailed ; 355bd Function0x355bd: ; 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 Function0x355dd: ; 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 Function0x3534d 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 Function3c5ec ld a, b cp $59 ret z call BattleCommanda3 ld a, [$d265] and a ret z call Function0x36abf 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 $14 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, .asm_3585f ; 35859 $4 ld a, $ff ld [hli], a ld [hl], a .asm_3585f 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, Function0x35923 cp STRUGGLE jp z, Function0x35923 cp ENCORE jp z, Function0x35923 cp MIRROR_MOVE jp z, Function0x35923 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, Function0x35923 ld a, [AttackMissed] and a jp nz, Function0x35923 ld a, BATTLE_VARS_SUBSTATUS5_OPP call _GetBattleVar bit 4, [hl] jp nz, Function0x35923 set 4, [hl] call BattleRandom and $3 inc a inc a inc a ld [de], a call Function0x36abf 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 Function0x35923 .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 Function0x35923 .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 Function0x37e01 ld hl, GotAnEncoreText jp StdBattleTextBox ; 35923 Function0x35923: ; 35923 jp PrintDidntAffect2 ; 35926 BattleCommand42: ; 35926 ; painsplit ld a, [AttackMissed] and a jp nz, Function0x359cd call CheckSubstituteOpp jp nz, Function0x359cd call Function0x37e01 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 Function0x359ac 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 Function0x359ac: ; 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 Function0x359cd: ; 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 Function0x37354 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 Function0x37e01 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 Function0x347c8 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, $5452 jp StdBattleTextBox .asm_35a50 jp Function0x37354 ; 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 Function0x37e01 ld hl, TookAimText jp StdBattleTextBox .asm_35a6e call Function0x37e77 jp PrintDidntAffect ; 35a74 BattleCommand46: ; 35a74 ; sketch call Function0x372d8 ld a, [InLinkBattle] and a jr z, .asm_35a83 ; 35a7b $6 call Function0x37e77 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 Function0x37e01 ld hl, SketchedText jp StdBattleTextBox .asm_35b10 call Function0x37e77 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 Function0x37e01 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 Function0x372d8 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 Function0x34548 jr nz, .asm_35b9a ; 35b8d $b ld a, [$c689] push af call BattleCommand0a pop af ld [$c689], a .asm_35b9a call Function0x37e36 call UpdateMoveData jp ResetTurn .asm_35ba3 call Function0x37e77 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 Function3c5ec 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 Function0x37e01 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 Function0x37e01 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 Function0x37e01 ld hl, BellChimedText call StdBattleTextBox ld a, [hBattleTurn] and a jp z, Function0x365d7 jp Function0x365fd ; 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 Function0x35d1c: ; 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, Function0x35de0 .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 Function0x35d7e: ; 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, Function0x35de0 .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 Function0x35de0: ; 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, Function0x37ec7 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 Function0x35ece jr c, .asm_35ec6 ld a, [de] and a jr nz, .asm_35ec6 call CheckSubstituteOpp jr nz, .asm_35ec6 call Function0x37e01 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, Function0x34216 ret .asm_35ec6 push hl call Function0x37e77 pop hl jp StdBattleTextBox ; 35ece Function0x35ece: ; 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 Function0x35fe1 ret z call GetOpponentItem ld a, b cp $14 ret z ld a, [EffectFailed] and a ret nz call Function0x37962 ret nz call Function0x35ff5 ld de, $0106 call Function0x37e54 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 Function0x35fe1 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 Function0x35fc9 jr z, .asm_35fa4 ; 35f97 $b call Function0x35fc0 ld hl, WasPoisonedText call StdBattleTextBox jr .asm_35fb1 ; 35fa2 $d .asm_35fa4 set 0, [hl] xor a ld [de], a call Function0x35fc0 ld hl, BadlyPoisonedText call StdBattleTextBox .asm_35fb1 callba Function3dde9 ret .asm_35fb8 push hl call Function0x37e77 pop hl jp StdBattleTextBox ; 35fc0 Function0x35fc0: ; 35fc0 call Function0x37e01 call Function0x35ff5 jp RefreshBattleHuds ; 35fc9 Function0x35fc9: ; 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 Function0x35fe1: ; 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 Function0x35ff5: ; 35ff5 ld a, BATTLE_VARS_STATUS_OPP call _GetBattleVar set PSN, [hl] jp UpdateOpponentInParty ; 35fff BattleCommand15: ; 35fff ; draintarget call Function0x36011 ld hl, SuckedHealthText jp StdBattleTextBox ; 36008 BattleCommand16: ; 36008 ; eatdream call Function0x36011 ld hl, DreamEatenText jp StdBattleTextBox ; 36011 Function0x36011: ; 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 Function0x36e5b ret z call GetOpponentItem ld a, b cp $15 ret z ld a, [EffectFailed] and a ret nz call Function0x37962 ret nz ld a, BATTLE_VARS_STATUS_OPP call _GetBattleVar set 4, [hl] call UpdateOpponentInParty ld hl, $6c76 call CallBankF ld de, $0105 call Function0x37e54 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 Function0x36e5b ret z call GetOpponentItem ld a, b cp $16 ret z ld a, [EffectFailed] and a ret nz call Function0x37962 ret nz ld a, BATTLE_VARS_STATUS_OPP call _GetBattleVar set 5, [hl] call UpdateOpponentInParty ld de, $0108 call Function0x37e54 call RefreshBattleHuds ld hl, WasFrozenText call StdBattleTextBox callba Function3dde9 ret nz call Function0x34216 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 Function0x37962 ret nz ld a, BATTLE_VARS_STATUS_OPP call _GetBattleVar set 6, [hl] call UpdateOpponentInParty ld hl, $6c39 call CallBankF ld de, $0109 call Function0x37e54 call RefreshBattleHuds call PrintParalyze ld hl, $5de9 jp CallBankF ; 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 Function0x361ef ld a, [FailedMessage] and a ret nz jp Function0x36281 ; 361ef Function0x361ef: ; 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, Function0x3627b ld a, [EffectFailed] and a jp nz, Function0x3627b 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, Function0x36270 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, Function0x3626e .asm_3625b ld a, [hBattleTurn] and a jr z, .asm_36265 ; 0x3625e $5 call Function0x365fd jr .asm_36268 ; 0x36263 $3 .asm_36265 call Function0x365d7 .asm_36268 pop hl xor a ld [FailedMessage], a ret ; 3626e Function0x3626e: ; 3626e pop hl dec [hl] ; fallthrough ; 36270 Function0x36270: ; 36270 ld a, $2 ld [FailedMessage], a ld a, $1 ld [AttackMissed], a ret ; 3627b Function0x3627b: ; 3627b ld a, $1 ld [FailedMessage], a ret ; 36281 Function0x36281: ; 36281 ld bc, $c6fe ld hl, $7447 ld a, [hBattleTurn] and a jr z, .asm_36292 ; 0x3628a $6 ld bc, $c6fa ld hl, $7486 .asm_36292 ld a, $c call GetBattleVar cp $6b ret nz ld a, $1 ld [bc], a call Function0x37ed5 ret nc xor a ld [$ffd4], a call CallBankF 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 Function0x36391 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 Function0x3641a 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 Function0x36391: ; 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 Function0x3641a: ; 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 Function0x365d7 call SwitchTurn jr .end .Player call SwitchTurn call Function0x365fd 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 Function0x36532: ; 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 Function0x3641a pop hl jr z, .asm_36588 .asm_36576 ld a, [hBattleTurn] and a jr z, .asm_36580 call Function0x365fd jr .asm_36583 .asm_36580 call Function0x365d7 .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, $743d ld a, [hBattleTurn] and a jr z, .asm_365ba ; 365b5 $3 ld hl, $747c .asm_365ba xor a ld [$ffd4], a call CallBankF jp WaitBGMap ; 365c3 BattleCommanda7: ; 365c3 ld hl, $7447 ld a, [hBattleTurn] and a jr z, .asm_365ce ; 365c9 $3 ld hl, $7486 .asm_365ce xor a ld [$ffd4], a call CallBankF jp WaitBGMap ; 365d7 Function0x365d7: ; 365d7 ld hl, PlayerAtkLevel ld de, PlayerStats ld bc, BattleMonAtk ld a, $5 call Function0x3661d ld hl, BadgeStatBoosts call CallBankF call SwitchTurn ld hl, $6c39 call CallBankF ld hl, $6c76 call CallBankF jp SwitchTurn ; 365fd Function0x365fd: ; 365fd ld hl, EnemyAtkLevel ld de, EnemyStats ld bc, EnemyMonAtk ld a, $5 call Function0x3661d call SwitchTurn ld hl, $6c39 call CallBankF ld hl, $6c76 call CallBankF jp SwitchTurn ; 3661d Function0x3661d: ; 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 Function0x37e01 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 Function0x37962 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 Function0x37e77 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 Function0x36804 call BattleCommand0a call Function0x37e36 ld c, 20 call DelayFrames call Function0x36804 ld hl, FledFromBattleText jp StdBattleTextBox ; 36804 Function0x36804: ; 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 Function0x36804 ld a, [PlayerMoveAnimation] jp .asm_36975 .asm_36869 call Function0x349f4 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 Function0x37e01 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, OTPartyMon1CurHP 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, $5c23 jp CallBankF .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 Function0x36804 ld a, [EnemyMoveAnimation] jr .asm_36975 .asm_36908 call Function0x36994 jr c, .asm_36969 ld a, [$c70f] cp $1 jr z, .asm_368ca call UpdateBattleMonInParty ld a, $1 ld [$c689], a call Function0x37e01 ld c, $14 call DelayFrames ld hl, $c535 ld bc, $050b call $0fb6 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, PartyMon1CurHP call GetPartyLocation ld a, [hli] or [hl] pop bc pop de jr z, .asm_3693a ld a, d ld [CurPartyMon], a ld hl, $5b32 call CallBankF ld hl, DraggedOutText call StdBattleTextBox ld hl, $5c23 jp CallBankF .asm_36969 call BattleCommand0a call BattleCommandaa call BattleCommand0c jp PrintButItFailed .asm_36975 push af call Function0x36804 ld a, $1 ld [$c689], a call Function0x37e01 ld c, $14 call DelayFrames pop af ld hl, FledInFearText cp $2e jr z, .asm_36991 ld hl, BlownAwayText .asm_36991 jp StdBattleTextBox ; 36994 Function0x36994: ; 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, PartyMon1CurHP 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 Function0x36abf jr z, Function0x36ab5 ; 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 Function0x36abf ret nz ld a, [EffectFailed] and a ret nz ; fallthrough ; 36ab5 Function0x36ab5: ; 36ab5 ld a, BATTLE_VARS_SUBSTATUS3_OPP call _GetBattleVar set 3, [hl] jp EndRechargeOpp ; 36abf Function0x36abf: ; 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 $4b ; 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 Function0x37e36 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 Function0x37ec0 .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 Function0x34548 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 Function0x37e01 ld hl, MistText jp StdBattleTextBox .asm_36c92 call Function0x37e77 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 Function0x37e01 ld hl, GettingPumpedText jp StdBattleTextBox .asm_36cac call Function0x37e77 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 Function0x37962 ret nz call CheckSubstituteOpp ret nz ld a, BATTLE_VARS_SUBSTATUS3_OPP call _GetBattleVar bit 7, [hl] ret nz jr Function0x36d70 BattleCommand2a: ; 36d3b ; confuse call GetOpponentItem ld a, b cp $19 jr nz, .asm_36d53 ld a, [hl] ld [$d265], a call GetItemName call Function0x37e77 ld hl, ProtectedByText jp StdBattleTextBox .asm_36d53 ld a, BATTLE_VARS_SUBSTATUS3_OPP call _GetBattleVar bit 7, [hl] jr z, .asm_36d65 call Function0x37e77 ld hl, AlreadyConfusedText jp StdBattleTextBox .asm_36d65 call CheckSubstituteOpp jr nz, Function0x36db6 ld a, [AttackMissed] and a jr nz, Function0x36db6 ; fallthrough ; 36d70 Function0x36d70: ; 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 Function0x37e01 .asm_36d99 ld de, $0103 call Function0x37e54 ld hl, BecameConfusedText call StdBattleTextBox call GetOpponentItem ld a, b cp $f jr z, .asm_36db0 cp $10 ret nz .asm_36db0 ld hl, $5e51 jp CallBankF ; 36db6 Function0x36db6: ; 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 Function0x37e77 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 Function0x37e01 ld a, $1 ld [$ffd4], a ld a, BATTLE_VARS_STATUS_OPP call _GetBattleVar set 6, [hl] call UpdateOpponentInParty ld hl, $6c39 call CallBankF call UpdateBattleHuds call PrintParalyze ld hl, $5de9 jp CallBankF .asm_36e49 call Function0x37e77 ld hl, AlreadyParalyzedText jp StdBattleTextBox .asm_36e52 jp PrintDidntAffect2 .asm_36e55 call Function0x37e77 jp PrintDoesntAffect ; 36e5b Function0x36e5b: ; 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 Function0x37ed5 jr c, .asm_36ee8 ; 36ed5 $11 xor a ld [$cfca], a ld [FXAnimIDHi], a ld [$c689], a ld a, $a4 call Function0x37e44 jr .asm_36eeb ; 36ee6 $3 .asm_36ee8 call BattleCommanda6 .asm_36eeb ld hl, MadeSubstituteText call StdBattleTextBox jp RefreshBattleHuds .asm_36ef4 call Function0x34548 call nz, BattleCommand0c ld hl, HasSubstituteText jr .asm_36f08 ; 36efd $9 .asm_36eff call Function0x34548 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 Function0x372d8 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 Function0x37e01 ld hl, LearnedMoveText jp StdBattleTextBox .asm_36f9a jp Function0x37357 ; 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 Function0x37e01 ld hl, WasSeededText jp StdBattleTextBox .asm_36fd2 call Function0x37e77 jp PrintDoesntAffect .asm_36fd8 call Function0x37e77 ld hl, EvadedText jp StdBattleTextBox ; 36fe1 BattleCommand36: ; 36fe1 call Function0x37e01 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 Function0x37e01 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 Function0x37354 ; 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 Function0x37e77 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 Function0x37e01 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 Function0x365d7 call SetEnemyTurn call Function0x365fd pop af ld [hBattleTurn], a call Function0x37e01 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 Function0x365d7 jr .asm_37196 ; 37191 $3 .asm_37193 call Function0x365fd .asm_37196 pop af pop de pop hl .asm_37199 jr z, .asm_371a3 ; 37199 $8 ld hl, $4c9f call CallBankF jr .asm_371a9 ; 371a1 $6 .asm_371a3 ld hl, $4cac call CallBankF .asm_371a9 call Function0x37e01 call SwitchTurn ld hl, $4cef call CallBankF call SwitchTurn call UpdateUserInParty call RefreshBattleHuds ld hl, RegainedHealthText jp StdBattleTextBox .asm_371c4 call Function0x37e77 ld hl, HPIsFullText jp StdBattleTextBox ; 371cd BattleCommand2d: ; 371cd ; transform call Function0x372d8 ld a, BATTLE_VARS_SUBSTATUS5_OPP call _GetBattleVar bit 3, [hl] jp nz, Function0x372d2 call CheckHiddenOpponent jp nz, Function0x372d2 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 Function0x34548 jr nz, .asm_37200 ; 371f9 $5 ld a, $a4 call Function0x37e44 .asm_37200 ld a, BATTLE_VARS_SUBSTATUS5 call _GetBattleVar set 3, [hl] call Function0x372e7 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 $3026 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 $3026 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 $a6 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 $343b ld hl, EnemyStats ld de, PlayerStats ld bc, $000a call BattleSideCopy ld hl, EnemyStatLevels ld de, PlayerStatLevels ld bc, $0008 call BattleSideCopy call Function0x37ed5 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 Function0x37e36 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, Function0x37e44 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 Function0x372d2: ; 372d2 call Function0x37e77 jp PrintButItFailed ; 372d8 Function0x372d8: ; 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 Function0x372e7: ; 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 Function0x37e01 jp StdBattleTextBox .asm_37337 call Function0x37e77 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 Function0x37354: ; 37354 call Function0x37e77 ; fallthrough ; 37357 Function0x37357: ; 37357 ld hl, ButItFailedText ; 'but it failed!' ld de, ItFailedText ; 'it failed!' jp Function0x35157 ; 37360 PrintDidntAffect: ; 37360 ; 'it didn't affect' ld hl, DidntAffect1Text jp StdBattleTextBox ; 37366 PrintDidntAffect2: ; 37366 call Function0x37e77 ld hl, DidntAffect1Text ; 'it didn't affect' ld de, DidntAffect2Text ; 'it didn't affect' jp Function0x35157 ; 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 Function0x37e36 ld a, BATTLE_VARS_SUBSTATUS4 call _GetBattleVar res 7, [hl] ld a, BATTLE_VARS_SUBSTATUS5_OPP call _GetBattleVar res 6, [hl] call Function0x37ed5 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 Function0x37e01 ld hl, CantEscapeNowText jp StdBattleTextBox .failed call Function0x37e77 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 Function0x377f5 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 Function0x37e01 ; 'fell in love!' ld hl, FellInLoveText jp StdBattleTextBox .asm_377f2 jp Function0x37354 ; 377f5 Function0x377f5: ; 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, Function0x37e77 ld a, [AttackMissed] and a jp nz, Function0x37e77 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 Function0x37de9 ld d, [hl] pop bc ret .asm_378b7 pop bc ld a, $3 ld [$c689], a call Function0x37e01 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, $4c8e call CallBankF call SwitchTurn ld hl, $4cef call CallBankF call SwitchTurn ld hl, RegainedHealthText call StdBattleTextBox call SwitchTurn call UpdateOpponentInParty jr .asm_37904 ; 378f1 $11 .asm_378f3 call SwitchTurn call Function0x37ed5 jr nc, .asm_37904 ; 378f9 $9 call Function0x37e77 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 Function0x37e01 ld hl, CoveredByVeilText jp StdBattleTextBox .asm_3795c call Function0x37e77 jp PrintButItFailed ; 37962 Function0x37962: ; 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 call Function0x37ae9 jp z, Function0x37aab call UpdateBattleMonInParty call Function0x37e01 ld c, 50 call DelayFrames call Function1d6e callba Function3d2f7 callba Function3d380 call ClearPalettes callba Function3ed9f call Function1c17 call ClearSprites ld hl, $c4a1 ld bc, $040a call ClearBox ld b, 1 call GetSGBLayout call Function32f9 call Function0x37a67 callba Function3d2e0 jp c, EndMoveEffect ld hl, Function3e459 call CallBankF call Function0x37ab1 ret .Enemy ld a, [IsInBattle] dec a jp z, Function0x37aab call Function0x37af6 jp z, Function0x37aab call UpdateEnemyMonInParty call Function0x37e01 call Function0x37a82 callba Function3d2e0 jp c, EndMoveEffect xor a ld [$c718], a ld hl, $5517 call CallBankF ld hl, $557a call CallBankF ld a, 1 ld [$d265], a ld hl, $6cab call CallBankF ld hl, $5c23 call CallBankF jr Function0x37ab1 ; 37a67 Function0x37a67: ; 37a67 ld a, [InLinkBattle] and a ret z ld a, 1 ld [$d0ec], a call $1d6e ld hl, $68e4 call CallBankF call $1c17 xor a ld [$d0ec], a ret ; 37a82 Function0x37a82; 37a82 ld a, [InLinkBattle] and a ret z call $1d6e ld hl, $68e4 call CallBankF 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 $1c17 ; 37aab Function0x37aab: ; 37aab call Function0x37e77 jp PrintButItFailed ; 37ab1 Function0x37ab1: ; 37ab1 ld a, BATTLE_VARS_STATUS call GetBattleVar and 7 jr nz, .asm_37ac1 ld a, BATTLE_VARS_SUBSTATUS1 call _GetBattleVar res 0, [hl] .asm_37ac1 call Function0x372e7 ld hl, PlayerSubStatus1 res 7, [hl] ld hl, EnemySubStatus1 res 7, [hl] ld hl, PlayerSubStatus5 ld a, BATTLE_VARS_SUBSTATUS5 call _GetBattleVar res 3, [hl] res 4, [hl] ld a, BATTLE_VARS_LAST_MOVE call _GetBattleVar ld [hl], 0 xor a ld [$c730], a ld [$c731], a ret ; 37ae9 Function0x37ae9: ; 37ae9 ld hl, PartyMon1CurHP ld a, [PartyCount] ld d, a ld a, [CurBattleMon] ld e, a jr Function0x37b01 ; 37af6 Function0x37af6: ; 37af6 ld hl, OTPartyMon1CurHP ld a, [OTPartyCount] ld d, a ld a, [CurOTMon] ld e, a ; fallthrough ; 37b01 Function0x37b01: ; 37b01 xor a ld b, a ld c, a .asm_37b04 ld a, c cp d jr z, .asm_37b1a cp e jr z, .asm_37b11 ld a, [hli] or b ld b, a ld a, [hld] or b ld b, a .asm_37b11 push bc ld bc, $30 add hl, bc pop bc inc c jr .asm_37b04 .asm_37b1a 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 Function0x37e01 call SwitchTurn callab Function3ccef call SwitchTurn call UpdateUserInParty ; 'regained health!' ld hl, RegainedHealthText jp StdBattleTextBox .Full call Function0x37e77 ; '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 GetHiddenPower ret ; 37bf4 BattleCommand6e: ; 37bf4 ; startrain ld a, WEATHER_RAIN ld [Weather], a ld a, 5 ld [WeatherCount], a call Function0x37e01 ld hl, DownpourText jp StdBattleTextBox ; 37c07 BattleCommand6f: ; 37c07 ; startsun ld a, WEATHER_SUN ld [Weather], a ld a, 5 ld [WeatherCount], a call Function0x37e01 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 Function0x37e01 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 Function0x37e77 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 Function0x37e77 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 Function0x365d7 jr .asm_37c8c ; 37c87 $3 .asm_37c89 call Function0x365fd .asm_37c8c call Function0x37e01 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 Function3c5ec ld a, b cp $90 ret z call BattleCommanda3 ld a, [$d265] and a ret z call Function0x36abf 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 $14 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, .asm_37ce1 ; 37cdb $4 ld a, $ff ld [hli], a ld [hl], a .asm_37ce1 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 Function0x34548 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 Function0x37e77 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 Function0x37de9: ; 37de9 push hl push de push bc ld a, [$c689] push af call BattleCommand0a pop af ld [$c689], a call Function0x37e19 call BattleCommand0c pop bc pop de pop hl ret ; 37e01 Function0x37e01: ; 37e01 push hl push de push bc ld a, [$c689] push af call BattleCommand0a pop af ld [$c689], a call Function0x37e36 call BattleCommand0c pop bc pop de pop hl ret ; 37e19 Function0x37e19: ; 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 Function0x37e47 ; 37e36 Function0x37e36: ; 37e36 xor a ld [$cfca], a ld [FXAnimIDHi], a ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar and a ret z ; fallthrough ; 37e44 Function0x37e44: ; 37e44 ld [FXAnimIDLo], a ; fallthrough ; 37e47 Function0x37e47: ; 37e47 push hl push de push bc callab PlayBattleAnim pop bc pop de pop hl ret ; 37e54 Function0x37e54: ; 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 CallBankF: ; 37e73 ld a, $f rst FarCall ret ; 37e77 Function0x37e77: ; 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 Function0x37ec0: ; 37ec0 callba Functionfbd54 ret ; 37ec7 Function0x37ec7: ; 37ec7 callba Functionfbd71 ret ; 37ece Function0x37ece: ; 37ece callba Functionfbd69 ret ; 37ed5 Function0x37ed5: ; 37ed5 ; Related to mobile link battles. push hl push de push bc callba CheckBattleScene pop bc pop de pop hl ret ; 37ee2