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