shithub: pokecrystal

ref: 1ab4b59d869195e89e2fd2e285809fab6f7318e5
dir: /battle/effect_commands.asm/

View raw version
DoPlayerTurn: ; 34000
	call SetPlayerTurn

	ld a, [$d0ec]
	and a
	ret nz

	jr DoTurn
; 3400a


DoEnemyTurn: ; 3400a
	call SetEnemyTurn

	ld a, [InLinkBattle]
	and a
	jr z, DoTurn

	ld a, [$d430]
	cp $e
	jr z, DoTurn
	cp $4
	ret nc

	; fallthrough
; 3401d


DoTurn: ; 3401d
; Read in and execute the user's move effects for this turn.

	xor a
	ld [$c6b4], a

; Effect command checkturn is called for every move.
	call CheckTurn

	ld a, [$c6b4]
	and a
	ret nz

	call UpdateMoveData
; 3402c


DoMove: ; 3402c
; Get the user's move effect.
	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	ld c, a
	ld b, 0
	ld hl, MoveEffectsPointers
	add hl, bc
	add hl, bc
	ld a, BANK(MoveEffectsPointers)
	call GetFarHalfword

	ld de, BattleScriptBuffer

.GetMoveEffect
	ld a, BANK(MoveEffects)
	call GetFarByte
	inc hl
	ld [de], a
	inc de
	cp $ff
	jr nz, .GetMoveEffect

; Start at the first command.
	ld hl, BattleScriptBuffer
	ld a, l
	ld [BattleScriptBufferLoc], a
	ld a, h
	ld [BattleScriptBufferLoc + 1], a

.ReadMoveEffectCommand

; ld a, [BattleScriptBufferLoc++]
	ld a, [BattleScriptBufferLoc]
	ld l, a
	ld a, [BattleScriptBufferLoc + 1]
	ld h, a

	ld a, [hli]

	push af
	ld a, l
	ld [BattleScriptBufferLoc], a
	ld a, h
	ld [BattleScriptBufferLoc + 1], a
	pop af

; $fe is used to terminate branches without ending the read cycle.
	cp $fe
	ret nc

; The rest of the commands (01-af) are read from BattleCommandPointers.
	push bc
	dec a
	ld c, a
	ld b, 0
	ld hl, BattleCommandPointers
	add hl, bc
	add hl, bc
	pop bc

	ld a, BANK(BattleCommandPointers)
	call GetFarHalfword

	call .DoMoveEffectCommand

	jr .ReadMoveEffectCommand

.DoMoveEffectCommand
	jp [hl]
; 34084


CheckTurn:
BattleCommand01: ; 34084
; checkturn

; Repurposed as hardcoded turn handling. Useless as a command.

; Move $ff immediately ends the turn.
	ld a, BATTLE_VARS_MOVE
	call GetBattleVar
	inc a
	jp z, Function0x34385

	xor a
	ld [AttackMissed], a
	ld [EffectFailed], a
	ld [$c689], a
	ld [AlreadyDisobeyed], a
	ld [AlreadyFailed], a
	ld [$c73e], a

	ld a, 10 ; 1.0
	ld [TypeModifier], a

	ld a, [hBattleTurn]
	and a
	jp nz, CheckEnemyTurn


CheckPlayerTurn:

; check recharge
	ld hl, PlayerSubStatus4
	bit 5, [hl]
	jr z, .CheckSleep
	res 5, [hl]

; 'must recharge!'
	ld hl, MustRechargeText
	call StdBattleTextBox

	call CantMove
	jp Function0x34385


.CheckSleep
	ld hl, BattleMonStatus
	ld a, [hl]
	and $7
	jr z, .CheckFrozen
	dec a
	ld [BattleMonStatus], a
	and $7
	jr z, .WokeUp
	xor a
	ld [$cfca], a
	ld de, ANIM_SLP
	call FarPlayBattleAnimation
	jr .FastAsleep


.WokeUp
; 'woke up!'
	ld hl, WokeUpText
	call StdBattleTextBox

	call CantMove
	call UpdateBattleMonInParty
	ld hl, 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 Function0x34385


.CheckFrozen
	ld hl, BattleMonStatus
	bit 5, [hl]
	jr z, .CheckFlinch

; Flame Wheel and Sacred Fire thaw the user.
	ld a, [CurPlayerMove]
	cp FLAME_WHEEL
	jr z, .CheckFlinch
	cp SACRED_FIRE
	jr z, .CheckFlinch

; 'frozen solid!'
	ld hl, FrozenSolidText
	call StdBattleTextBox

	call CantMove
	jp Function0x34385


.CheckFlinch
	ld hl, PlayerSubStatus3
	bit 3, [hl] ; flinch
	jr z, .CheckDisabled

	res 3, [hl]

; 'flinched!'
	ld hl, FlinchedText
	call StdBattleTextBox

	call CantMove
	jp Function0x34385


.CheckDisabled
	ld hl, PlayerDisableCount
	ld a, [hl]
	and a
	jr z, .CheckConfused
	dec a
	ld [hl], a
	and $f
	jr nz, .CheckConfused
	ld [hl], a
	ld [DisabledMove], a

; 'disabled no more!'
	ld hl, DisabledNoMoreText
	call StdBattleTextBox


.CheckConfused
	ld a, [PlayerSubStatus3]
	add a
	jr nc, .CheckAttract
	ld hl, PlayerConfuseCount
	dec [hl]
	jr nz, .Confused

	ld hl, PlayerSubStatus3
	res 7, [hl]

; 'confused no more!'
	ld hl, ConfusedNoMoreText
	call StdBattleTextBox

	jr .CheckAttract


.Confused
; 'confused!'
	ld hl, IsConfusedText
	call StdBattleTextBox

	xor a
	ld [$cfca], a
	ld de, ANIM_CONFUSED
	call FarPlayBattleAnimation

; 50% chance of hitting itself
	call BattleRandom
	cp $80
	jr nc, .CheckAttract

	ld hl, PlayerSubStatus3
	ld a, [hl]
	and $80
	ld [hl], a

	call HitConfusion

	call CantMove
	jp Function0x34385


.CheckAttract
	ld a, [PlayerSubStatus1]
	add a ; check bit 7
	jr nc, .CheckDisabledMove

; 'in love with'
	ld hl, InLoveWithText
	call StdBattleTextBox

	xor a
	ld [$cfca], a

	ld de, ANIM_IN_LOVE
	call FarPlayBattleAnimation

; 50% chance of infatuation
	call BattleRandom
	cp $80
	jr c, .CheckDisabledMove

; 'infatuation kept it from attacking!'
	ld hl, InfatuationText
	call StdBattleTextBox

	call CantMove
	jp Function0x34385


.CheckDisabledMove
; We can't disable a move that doesn't exist.
	ld a, [DisabledMove]
	and a
	jr z, .CheckParalyzed

; Are we using the disabled move?
	ld hl, CurPlayerMove
	cp [hl]
	jr nz, .CheckParalyzed

	call MoveDisabled
	call CantMove
	jp Function0x34385


.CheckParalyzed
	ld hl, BattleMonStatus
	bit 6, [hl]
	ret z

; 25% chance to be fully paralyzed
	call BattleRandom
	cp $3f
	ret nc

; 'fully paralyzed!'
	ld hl, FullyParalyzedText
	call StdBattleTextBox
	call CantMove
	jp Function0x34385
; 341f0


CantMove: ; 341f0
	ld a, BATTLE_VARS_SUBSTATUS1
	call _GetBattleVar
	res 6, [hl]

	ld a, BATTLE_VARS_SUBSTATUS3
	call _GetBattleVar
	ld a, [hl]
	and $ec
	ld [hl], a

	call ResetFuryCutterCount

	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar
	cp FLY
	jr z, .asm_3420f

	cp $5b
	ret nz

.asm_3420f
	res 5, [hl]
	res 6, [hl]
	jp Function0x37ece
; 34216



Function0x34216: ; 34216
	call SwitchTurn
	call CantMove
	jp SwitchTurn
; 3421f



CheckEnemyTurn: ; 3421f

; check recharge
	ld hl, EnemySubStatus4
	bit 5, [hl]
	jr z, .CheckSleep
	res 5, [hl]

; 'must recharge!'
	ld hl, MustRechargeText
	call StdBattleTextBox
	call CantMove
	jp Function0x34385


.CheckSleep
	ld hl, EnemyMonStatus
	ld a, [hl]
	and $7
	jr z, .CheckFrozen
	dec a
	ld [EnemyMonStatus], a
	and a
	jr z, .WokeUp

; 'fast asleep!'
	ld hl, FastAsleepText
	call StdBattleTextBox
	xor a
	ld [$cfca], a
	ld de, ANIM_SLP
	call FarPlayBattleAnimation
	jr .FastAsleep


.WokeUp
; 'woke up!'
	ld hl, WokeUpText
	call StdBattleTextBox
	call CantMove
	call UpdateEnemyMonInParty
	ld hl, 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 Function0x34385


.CheckFrozen
	ld hl, EnemyMonStatus
	bit 5, [hl]
	jr z, .CheckFlinch
	ld a, [CurEnemyMove]
	cp $ac
	jr z, .CheckFlinch
	cp $dd
	jr z, .CheckFlinch

; 'frozen solid!'
	ld hl, FrozenSolidText
	call StdBattleTextBox
	call CantMove
	jp Function0x34385


.CheckFlinch
	ld hl, EnemySubStatus3
	bit 3, [hl]
	jr z, .CheckDisabled

	res 3, [hl]

; 'flinched!'
	ld hl, FlinchedText
	call StdBattleTextBox

	call CantMove
	jp Function0x34385


.CheckDisabled
	ld hl, EnemyDisableCount
	ld a, [hl]
	and a
	jr z, .CheckConfused

	dec a
	ld [hl], a
	and $f
	jr nz, .CheckConfused

	ld [hl], a
	ld [EnemyDisabledMove], a

; 'disabled no more!'
	ld hl, DisabledNoMoreText
	call StdBattleTextBox


.CheckConfused
	ld a, [EnemySubStatus3]
	add a
	jr nc, .CheckAttract

	ld hl, $c67b
	dec [hl]
	jr nz, .Confused

	ld hl, EnemySubStatus3
	res 7, [hl]

; 'confused no more!'
	ld hl, ConfusedNoMoreText
	call StdBattleTextBox

	jr .CheckAttract


.Confused
; 'confused!'
	ld hl, IsConfusedText
	call StdBattleTextBox

	xor a
	ld [$cfca], a
	ld de, ANIM_CONFUSED
	call FarPlayBattleAnimation

; 50% chance of hitting itself
	call BattleRandom
	cp $80
	jr nc, .CheckAttract

	ld hl, EnemySubStatus3
	ld a, [hl]
	and %10000000
	ld [hl], a

; 'hurt itself in its confusion!'
	ld hl, HurtItselfText
	call StdBattleTextBox

	call Function0x355dd

	call BattleCommand62

	call BattleCommand0a

	xor a
	ld [$cfca], a

; Flicker the monster pic unless flying or underground.
	ld de, $0115
	ld a, BATTLE_VARS_SUBSTATUS3_OPP
	call GetBattleVar
	and $60
	call z, PlayFXAnimID

	ld c, $1
	call Function0x35d1c

	call BattleCommand0c

	call CantMove
	jp Function0x34385


.CheckAttract
	ld a, [EnemySubStatus1]
	add a ; check bit 7
	jr nc, .CheckDisabledMove

; 'in love with'
	ld hl, InLoveWithText
	call StdBattleTextBox

	xor a
	ld [$cfca], a

	ld de, ANIM_IN_LOVE
	call FarPlayBattleAnimation

; 50% chance of infatuation
	call BattleRandom
	cp $80
	jr c, .CheckDisabledMove

; 'infatuation kept it from attacking!'
	ld hl, InfatuationText
	call StdBattleTextBox

	call CantMove
	jp Function0x34385


.CheckDisabledMove
; We can't disable a move that doesn't exist.
	ld a, [EnemyDisabledMove]
	and a
	jr z, .CheckParalyzed

; Are we using the disabled move?
	ld hl, CurEnemyMove
	cp [hl]
	jr nz, .CheckParalyzed

	call MoveDisabled

	call CantMove
	jp Function0x34385


.CheckParalyzed
	ld hl, EnemyMonStatus
	bit 6, [hl]
	ret z

; 25% chance to be fully paralyzed
	call BattleRandom
	cp $3f
	ret nc

; 'fully paralyzed!'
	ld hl, FullyParalyzedText
	call StdBattleTextBox

	call CantMove

	; fallthrough
; 34385


Function0x34385: ; 34385
	ld a, $1
	ld [$c6b4], a
	jp ResetDamage
; 3438d


MoveDisabled: ; 3438d

; Make sure any charged moves fail
	ld a, BATTLE_VARS_SUBSTATUS3
	call _GetBattleVar
	res 4, [hl]

	ld a, BATTLE_VARS_MOVE
	call GetBattleVar
	ld [$d265], a
	call GetMoveName

; 'disabled!'
	ld hl, DisabledMoveText
	jp StdBattleTextBox
; 343a5


HitConfusion: ; 343a5

; 'hurt itself in its confusion!'
	ld hl, HurtItselfText
	call StdBattleTextBox

	xor a
	ld [CriticalHit], a

	call Function0x355dd

	call BattleCommand62

	call BattleCommand0a

	xor a
	ld [$cfca], a

; Flicker the monster pic unless flying or underground.
	ld de, $0115
	ld a, BATTLE_VARS_SUBSTATUS3_OPP
	call GetBattleVar
	and $60
	call z, PlayFXAnimID

	ld hl, Function3df48
	call CallBattleCore

	ld a, $1
	ld [$ffd4], a

	ld c, $1
	call Function0x35d7e

	jp BattleCommand0c
; 343db


BattleCommand02: ; 343db
; checkobedience

; Enemy can't disobey
	ld a, [hBattleTurn]
	and a
	ret nz

	call Function0x34548
	ret nz

; If we've already checked this turn
	ld a, [AlreadyDisobeyed]
	and a
	ret nz

	xor a
	ld [AlreadyDisobeyed], a

; No obedience in link battles (since no handling exists for enemy)
	ld a, [InLinkBattle]
	and a
	ret nz

	ld a, [$cfc0]
	and a
	ret nz

; If the monster's id doesn't match the player's,
; some conditions need to be met.
	ld a, PartyMon1ID - PartyMon1
	call BattlePartyAttr

	ld a, [PlayerID]
	cp [hl]
	jr nz, .obeylevel
	inc hl
	ld a, [PlayerID + 1]
	cp [hl]
	ret z


.obeylevel
; The maximum obedience level is constrained by owned badges:
	ld hl, JohtoBadges

; risingbadge
	bit 7, [hl]
	ld a, 101
	jr nz, .getlevel

; stormbadge
	bit 5, [hl]
	ld a, 70
	jr nz, .getlevel

; fogbadge
	bit 3, [hl]
	ld a, 50
	jr nz, .getlevel

; hivebadge
	bit 1, [hl]
	ld a, 30
	jr nz, .getlevel

; no badges
	ld a, 10


.getlevel
; c = obedience level
; d = monster level
; b = c + d

	ld b, a
	ld c, a

	ld a, [BattleMonLevel]
	ld d, a

	add b
	ld b, a

; No overflow (this should never happen)
	jr nc, .checklevel
	ld b, $ff


.checklevel
; If the monster's level is lower than the obedience level, it will obey.
	ld a, c
	cp d
	ret nc


; Random number from 0 to obedience level + monster level
.rand1
	call BattleRandom
	swap a
	cp b
	jr nc, .rand1

; The higher above the obedience level the monster is,
; the more likely it is to disobey.
	cp c
	ret c

; Sleep-only moves have separate handling, and a higher chance of
; being ignored. Lazy monsters like their sleep.
	call IgnoreSleepOnly
	ret c


; Another random number from 0 to obedience level + monster level
.rand2
	call BattleRandom
	cp b
	jr nc, .rand2

; A second chance.
	cp c
	jr c, .UseInstead


; No hope of using a move now.

; b = number of levels the monster is above the obedience level
	ld a, d
	sub c
	ld b, a

; The chance of napping is the difference out of 256.
	call BattleRandom
	swap a
	sub b
	jr c, .Nap

; The chance of not hitting itself is the same.
	cp b
	jr nc, .DoNothing

; 'won't obey!'
	ld hl, WontObeyText
	call StdBattleTextBox

	call HitConfusion

	jp Function0x3450c


.Nap
	call BattleRandom
	add a
	swap a
	and 7
	jr z, .Nap

	ld [BattleMonStatus], a

; 'began to nap!'
	ld hl, BeganToNapText
	jr .Print


.DoNothing
	call BattleRandom
	and 3

; 'loafing around!'
	ld hl, LoafingAroundText
	and a
	jr z, .Print

; 'won't obey!'
	ld hl, WontObeyText
	dec a
	jr z, .Print

; 'turned away!'
	ld hl, TurnedAwayText
	dec a
	jr z, .Print

; 'ignored orders!'
	ld hl, IgnoredOrdersText

.Print
	call StdBattleTextBox
	jp Function0x3450c


.UseInstead

; Can't use another move if the monster only has one!
	ld a, [BattleMonMove2]
	and a
	jr z, .DoNothing

; Don't bother trying to handle Disable.
	ld a, [DisabledMove]
	and a
	jr nz, .DoNothing


	ld hl, BattleMonPP
	ld de, BattleMonMoves
	ld b, 0
	ld c, NUM_MOVES

.GetTotalPP
	ld a, [hli]
	and $3f ; exclude pp up
	add b
	ld b, a

	dec c
	jr z, .CheckMovePP

; Stop at undefined moves.
	inc de
	ld a, [de]
	and a
	jr nz, .GetTotalPP


.CheckMovePP
	ld hl, BattleMonPP
	ld a, [CurMoveNum]
	ld e, a
	ld d, 0
	add hl, de

; Can't use another move if only one move has PP.
	ld a, [hl]
	and $3f
	cp b
	jr z, .DoNothing


; Make sure we can actually use the move once we get there.
	ld a, 1
	ld [AlreadyDisobeyed], a

	ld a, [$cfa3]
	ld b, a

; Save the move we originally picked for afterward.
	ld a, [CurMoveNum]
	ld c, a
	push af


.RandomMove
	call BattleRandom
	and 3

	cp b
	jr nc, .RandomMove

; Not the move we were trying to use.
	cp c
	jr z, .RandomMove

; Make sure it has PP.
	ld [CurMoveNum], a
	ld hl, BattleMonPP
	ld e, a
	ld d, 0
	add hl, de
	ld a, [hl]
	and $3f
	jr z, .RandomMove


; Use it.
	ld a, [CurMoveNum]
	ld c, a
	ld b, 0
	ld hl, BattleMonMoves
	add hl, bc
	ld a, [hl]
	ld [CurPlayerMove], a

	call SetPlayerTurn
	call UpdateMoveData
	call DoMove


; Restore original move choice.
	pop af
	ld [CurMoveNum], a

	; fallthrough
; 3450c


Function0x3450c: ; 3450c
	xor a
	ld [LastPlayerMove], a
	ld [LastEnemyCounterMove], a

	ld hl, PlayerSubStatus5
	res 4, [hl]

; Break encore too.
	xor a
	ld [PlayerEncoreCount], a

	jp EndMoveEffect
; 3451f


IgnoreSleepOnly: ; 3451f

	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar

	cp SNORE
	jr z, .CheckSleep
	cp SLEEP_TALK
	jr z, .CheckSleep
	and a
	ret

.CheckSleep
	ld a, BATTLE_VARS_STATUS
	call GetBattleVar
	and 7
	ret z

; 'ignored orders…sleeping!'
	ld hl, IgnoredSleepingText
	call StdBattleTextBox

	call EndMoveEffect

	scf
	ret
; 34541


BattleCommand03: ; 34541
; usedmovetext
	callba DisplayUsedMoveText
	ret
; 34548


Function0x34548: ; 34548

	ld a, [hBattleTurn]
	and a
	ld a, [$c732] ; player
	jr z, .end
	ld a, [$c733] ; enemy
.end
	and a
	ret
; 34555


BattleCommand04: ; 34555
	call Function0x34548
	ret nz

	ld hl, BattleMonPP
	ld de, PlayerSubStatus3
	ld bc, PlayerTurnsTaken

	ld a, [hBattleTurn]
	and a
	jr z, .asm_34570

	ld hl, EnemyMonPP
	ld de, EnemySubStatus3
	ld bc, EnemyTurnsTaken

.asm_34570
; If we've gotten this far, this counts as a turn.
	ld a, [bc]
	inc a
	ld [bc], a

	ld a, BATTLE_VARS_MOVE
	call GetBattleVar
	cp STRUGGLE
	ret z

	ld a, [de]
	and %111 ; rollout | bide | ???
	ret nz

	call .asm_345ad
	ld a, b
	and a
	jp nz, EndMoveEffect

; SubStatus5
	inc de
	inc de

	ld a, [de]
	bit 3, a
	ret nz

	ld a, [hBattleTurn]
	and a

	ld hl, PartyMon1PP
	ld a, [CurBattleMon]
	jr z, .asm_345a4

; skip this part entirely if wildbattle
	ld a, [IsInBattle]
	dec a
	jr z, .asm_345c5

	ld hl, OTPartyMon1PP
	ld a, [CurOTMon]

.asm_345a4
	call GetPartyLocation
	push hl
	call Function0x3460b
	pop hl
	ret c

.asm_345ad
	ld a, [hBattleTurn]
	and a
	ld a, [CurMoveNum]
	jr z, .asm_345b8
	ld a, [CurEnemyMoveNum]

.asm_345b8
	ld c, a
	ld b, $0
	add hl, bc
	ld a, [hl]
	and $3f
	jr z, .asm_345e3
	dec [hl]
	ld b, $0
	ret

.asm_345c5
	ld hl, EnemyMonMoves
	ld a, [CurEnemyMoveNum]
	ld c, a
	ld b, $0
	add hl, bc
	ld a, [hl]
	cp MIMIC
	jr z, .asm_345dc
	ld hl, $c735
	add hl, bc
	ld a, [hl]
	cp MIMIC
	ret z

.asm_345dc
	ld hl, $c739
	call .asm_345ad
	ret

.asm_345e3
	call BattleCommandaa
; get move effect
	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
; continuous?
	ld hl, .continuousmoves
	ld de, 1
	call IsInArray

; 'has no pp left for [move]'
	ld hl, HasNoPPLeftText
	jr c, .print
; 'but no pp is left for the move'
	ld hl, NoPPLeftText
.print
	call StdBattleTextBox
	ld b, 1
	ret
; 34602

.continuousmoves ; 34602
	db EFFECT_RAZOR_WIND
	db EFFECT_SKY_ATTACK
	db EFFECT_SKULL_BASH
	db EFFECT_SOLARBEAM
	db EFFECT_FLY
	db EFFECT_ROLLOUT
	db EFFECT_BIDE
	db EFFECT_RAMPAGE
	db $ff
; 3460b

Function0x3460b: ; 3460b
	ld a, [hBattleTurn]
	and a
	ld a, [CurMoveNum]
	jr z, .asm_34616
	ld a, [CurEnemyMoveNum]

.asm_34616
	ld c, a
	ld a, 2
	call UserPartyAttr

	ld a, BATTLE_VARS_MOVE
	call GetBattleVar
	cp MIMIC
	jr z, .asm_3462f

	ld b, 0
	add hl, bc
	ld a, [hl]
	cp MIMIC
	jr nz, .asm_3462f

	scf
	ret

.asm_3462f
	and a
	ret
; 34631


BattleCommand05: ; 34631
; critical

; Determine whether this attack's hit will be critical.

	xor a
	ld [CriticalHit], a

	ld a, BATTLE_VARS_MOVE_POWER
	call GetBattleVar
	and a
	ret z

	ld a, [hBattleTurn]
	and a
	ld hl, EnemyMonItem
	ld a, [EnemyMonSpecies]
	jr nz, .Item
	ld hl, BattleMonItem
	ld a, [BattleMonSpecies]

.Item
	ld c, 0

	cp CHANSEY
	jr nz, .Farfetchd
	ld a, [hl]
	cp LUCKY_PUNCH
	jr nz, .FocusEnergy

; +2 critical level
	ld c, 2
	jr .Tally

.Farfetchd
	cp FARFETCH_D
	jr nz, .FocusEnergy
	ld a, [hl]
	cp STICK
	jr nz, .FocusEnergy

; +2 critical level
	ld c, 2
	jr .Tally

.FocusEnergy
	ld a, BATTLE_VARS_SUBSTATUS4
	call GetBattleVar
	bit 2, a
	jr z, .CheckCritical

; +1 critical level
	inc c

.CheckCritical
	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar
	ld de, 1
	ld hl, .Criticals
	push bc
	call IsInArray
	pop bc
	jr nc, .ScopeLens

; +2 critical level
	inc c
	inc c

.ScopeLens
	push bc
	call GetUserItem
	ld a, b
	cp $49 ; Increased critical chance. Only Scope Lens has this.
	pop bc
	jr nz, .Tally

; +1 critical level
	inc c

.Tally
	ld hl, .Chances
	ld b, 0
	add hl, bc
	call BattleRandom
	cp [hl]
	ret nc
	ld a, 1
	ld [CriticalHit], a
	ret

.Criticals
	db KARATE_CHOP, RAZOR_WIND, RAZOR_LEAF, CRABHAMMER, SLASH, AEROBLAST, CROSS_CHOP, $ff
.Chances
	; 6.25% 12.1% 24.6% 33.2% 49.6% 49.6% 49.6%
	db $11,  $20,  $40,  $55,  $80,  $80,  $80
	;   0     1     2     3     4     5     6
; 346b2


BattleCommand4e: ; 346b2
; triplekick

	ld a, [$c689]
	ld b, a
	inc b
	ld hl, CurDamage + 1
	ld a, [hld]
	ld e, a
	ld a, [hli]
	ld d, a
.asm_346be
	dec b
	ret z
	ld a, [hl]
	add e
	ld [hld], a
	ld a, [hl]
	adc d
	ld [hli], a

; No overflow.
	jr nc, .asm_346be
	ld a, $ff
	ld [hld], a
	ld [hl], a
	ret
; 346cd


BattleCommand4f: ; 346cd
; kickcounter

	ld hl, $c689
	inc [hl]
	ret
; 346d2


BattleCommand07: ; 346d2
; stab
	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar
	cp STRUGGLE
	ret z

	ld hl, BattleMonType1
	ld a, [hli]
	ld b, a
	ld c, [hl]
	ld hl, EnemyMonType1
	ld a, [hli]
	ld d, a
	ld e, [hl]

	ld a, [hBattleTurn]
	and a
	jr z, .go

	ld hl, EnemyMonType1
	ld a, [hli]
	ld b, a
	ld c, [hl]
	ld hl, BattleMonType1
	ld a, [hli]
	ld d, a
	ld e, [hl]

.go
	ld a, BATTLE_VARS_MOVE_TYPE
	call _GetBattleVar
	ld [$d265], a

	push hl
	push de
	push bc
	callba DoWeatherModifiers
	pop bc
	pop de
	pop hl

	push de
	push bc
	callba DoBadgeTypeBoosts
	pop bc
	pop de

	ld a, [$d265]
	cp b
	jr z, .stab
	cp c
	jr z, .stab

	jr .asm_3473a

.stab
	ld hl, CurDamage + 1
	ld a, [hld]
	ld h, [hl]
	ld l, a

	ld b, h
	ld c, l
	srl b
	rr c
	add hl, bc

	ld a, h
	ld [CurDamage], a
	ld a, l
	ld [CurDamage + 1], a

	ld hl, TypeModifier
	set 7, [hl]

.asm_3473a
	ld a, BATTLE_VARS_MOVE_TYPE
	call GetBattleVar
	ld b, a
	ld hl, TypeMatchup

.asm_34743
	ld a, [hli]

	cp $ff
	jr z, .end

; foresight
	cp $fe
	jr nz, .asm_34757
	ld a, BATTLE_VARS_SUBSTATUS1_OPP
	call GetBattleVar
	bit 3, a
	jr nz, .end

	jr .asm_34743

.asm_34757
	cp b
	jr nz, .asm_347b3
	ld a, [hl]
	cp d
	jr z, .asm_34763
	cp e
	jr z, .asm_34763
	jr .asm_347b3

.asm_34763
	push hl
	push bc
	inc hl
	ld a, [TypeModifier]
	and %10000000
	ld b, a
	ld a, [hl]
	and a
	jr nz, .asm_34775
	inc a
	ld [AttackMissed], a
	xor a
.asm_34775
	ld [$ffb7], a
	add b
	ld [TypeModifier], a

	xor a
	ld [$ffb4], a

	ld hl, CurDamage
	ld a, [hli]
	ld [$ffb5], a
	ld a, [hld]
	ld [$ffb6], a

	call Multiply

	ld a, [$ffb4]
	ld b, a
	ld a, [$ffb5]
	or b
	ld b, a
	ld a, [$ffb6]
	or b
	jr z, .asm_347ab

	ld a, $a
	ld [$ffb7], a
	ld b, $4
	call Divide
	ld a, [$ffb5]
	ld b, a
	ld a, [$ffb6]
	or b
	jr nz, .asm_347ab

	ld a, $1
	ld [$ffb6], a

.asm_347ab
	ld a, [$ffb5]
	ld [hli], a
	ld a, [$ffb6]
	ld [hl], a
	pop bc
	pop hl

.asm_347b3
	inc hl
	inc hl
	jr .asm_34743

.end
	call Function0x347c8
	ld a, [$d265]
	ld b, a
	ld a, [TypeModifier]
	and $80
	or b
	ld [TypeModifier], a
	ret
; 347c8


Function0x347c8: ; 347c8
	ld hl, EnemyMonType1
	ld a, [hBattleTurn]
	and a
	jr z, Function0x347d3
	ld hl, BattleMonType1

	; fallthrough
; 347d3


Function0x347d3: ; 347d3
	push hl
	push de
	push bc
	ld a, BATTLE_VARS_MOVE_TYPE
	call GetBattleVar
	ld d, a
	ld b, [hl]
	inc hl
	ld c, [hl]
	ld a, $a
	ld [$d265], a
	ld hl, TypeMatchup
.asm_347e7
	ld a, [hli]
	cp $ff
	jr z, .asm_3482f ; 0x347ea $43
	cp $fe
	jr nz, .asm_347fb ; 0x347ee $b
	ld a, BATTLE_VARS_SUBSTATUS1_OPP
	call GetBattleVar
	bit SUBSTATUS_IDENTIFIED, a
	jr nz, .asm_3482f ; 0x347f7 $36
	jr .asm_347e7 ; 0x347f9 $ec
.asm_347fb
	cp d
	jr nz, .asm_34807 ; 0x347fc $9
	ld a, [hli]
	cp b
	jr z, .asm_3480b ; 0x34800 $9
	cp c
	jr z, .asm_3480b ; 0x34803 $6
	jr .asm_34808 ; 0x34805 $1
.asm_34807
	inc hl
.asm_34808
	inc hl
	jr .asm_347e7 ; 0x34809 $dc
.asm_3480b
	xor a
	ld [$ffb3], a
	ld [$ffb4], a
	ld [$ffb5], a
	ld a, [hli]
	ld [$ffb6], a
	ld a, [$d265]
	ld [$ffb7], a
	call Multiply
	ld a, $a
	ld [$ffb7], a
	push bc
	ld b, $4
	call Divide
	pop bc
	ld a, [$ffb6]
	ld [$d265], a
	jr .asm_347e7 ; 0x3482d $b8
.asm_3482f
	pop bc
	pop de
	pop hl
	ret
; 34833


BattleCommanda3: ; 34833
	call Function0x347c8
	ld a, [$d265]
	and a
	ld a, $a
	jr nz, .asm_3484a ; 3483c $c
	call ResetDamage
	xor a
	ld [TypeModifier], a
	inc a
	ld [AttackMissed], a
	ret
.asm_3484a
	ld [$d265], a
	ret
; 3484e


Function0x3484e: ; 3484e
	push hl
	push de
	push bc
	ld a, $a
	ld [$c716], a
	ld hl, PlayerUsedMoves
	ld a, [hl]
	and a
	jr z, .asm_348b0 ; 0x3485b $53
	ld d, $4
	ld e, $0
.asm_34861
	ld a, [hli]
	and a
	jr z, .asm_3489f ; 0x34863 $3a
	push hl
	dec a
	ld hl, Moves + PlayerMovePower - PlayerMoveStruct
	call GetMoveAttr
	and a
	jr z, .asm_3489b ; 0x3486e $2b
	inc hl
	call GetMoveByte
	ld hl, EnemyMonType1
	call Function0x347d3
	ld a, [$d265]
	cp $b
	jr nc, .asm_34895 ; 0x3487f $14
	and a
	jr z, .asm_3489b ; 0x34882 $17
	cp $a
	jr nc, .asm_34891 ; 0x34886 $9
	ld a, e
	cp $1
	jr nc, .asm_3489b ; 0x3488b $e
	ld e, $1
	jr .asm_3489b ; 0x3488f $a
.asm_34891
	ld e, $2
	jr .asm_3489b ; 0x34893 $6
.asm_34895
	call Function0x34931
	pop hl
	jr .asm_348d7 ; 0x34899 $3c
.asm_3489b
	pop hl
	dec d
	jr nz, .asm_34861 ; 0x3489d $c2
.asm_3489f
	ld a, e
	cp $2
	jr z, .asm_348d7 ; 0x348a2 $33
	call Function0x34939
	ld a, e
	and a
	jr nz, .asm_348d7 ; 0x348a9 $2c
	call Function0x34939
	jr .asm_348d7 ; 0x348ae $27
.asm_348b0
	ld a, [BattleMonType1]
	ld b, a
	ld hl, EnemyMonType1
	call Function0x347d3
	ld a, [$d265]
	cp $b
	jr c, .asm_348c4 ; 0x348bf $3
	call Function0x34931
.asm_348c4
	ld a, [BattleMonType2]
	cp b
	jr z, .asm_348d7 ; 0x348c8 $d
	call Function0x347d3
	ld a, [$d265]
	cp $b
	jr c, .asm_348d7 ; 0x348d2 $3
	call Function0x34931
.asm_348d7
	call Function0x348de
	pop bc
	pop de
	pop hl
	ret
; 348de


Function0x348de: ; 348de
	ld de, EnemyMonMove1
	ld b, 5
	ld c, 0

	ld a, [$d265]
	push af

.loop
	dec b
	jr z, .exit

	ld a, [de]
	and a
	jr z, .exit

	inc de
	dec a
	ld hl, Moves + PlayerMovePower - PlayerMoveStruct
	call GetMoveAttr
	and a
	jr z, .loop

	inc hl
	call GetMoveByte
	ld hl, BattleMonType1
	call Function0x347d3
	ld a, [$d265]
	and a
	jr z, .loop

	inc c
	cp $a
	jr c, .loop

	inc c
	inc c
	inc c
	inc c
	inc c

	cp $a
	jr z, .loop

	ld c, $64
	jr .loop
.exit

	pop af
	ld [$d265], a

	ld a, c
	and a
	jr z, .doubledown ; double down
	cp $5
	jr c, Function0x34931 ; down
	cp $64
	ret c
	jr Function0x34939 ; up

.doubledown
	call Function0x34931
	
	; fallthrough
; 34931


Function0x34931: ; 34931
	ld a, [$c716]
	dec a
	ld [$c716], a
	ret
; 34939


Function0x34939: ; 34939
	ld a, [$c716]
	inc a
	ld [$c716], a
	ret
; 34941


Function0x34941: ; 34941
	xor a
	ld [$c717], a
	call Function0x349f4
	ret c

	ld a, [EnemySubStatus1]
	bit 4, a
	jr z, .asm_34986

	ld a, [$c67f]
	cp $1
	jr nz, .asm_34986

	call Function0x349f4
	call Function0x34b77
	call Function0x34b20
	call Function0x34a85

	ld a, e
	cp $2
	jr nz, .asm_34971

	ld a, [$c716]
	add $30
	ld [$c717], a
	ret

.asm_34971
	call Function0x349f4
	sla c
	sla c
	ld b, $ff

.asm_3497a
	inc b
	sla c
	jr nc, .asm_3497a

	ld a, b
	add $30
	ld [$c717], a
	ret

.asm_34986
	call Function0x3484e
	ld a, [$c716]
	cp $b
	ret nc

	ld a, [LastEnemyCounterMove]
	and a
	jr z, .asm_349d2

	call Function0x34a2a
	ld a, [$c716]
	and a
	jr z, .asm_349d2

	ld c, a
	call Function0x34aa7
	ld a, [$c716]
	cp $ff
	ret z

	ld b, a
	ld a, e
	cp $2
	jr z, .asm_349be

	call Function0x3484e
	ld a, [$c716]
	cp $a
	ret nc

	ld a, b
	add $10
	ld [$c717], a
	ret

.asm_349be
	ld c, $10
	call Function0x3484e
	ld a, [$c716]
	cp $a
	jr nc, .asm_349cc
	ld c, $20

.asm_349cc
	ld a, b
	add c
	ld [$c717], a
	ret

.asm_349d2
	call Function0x3484e
	ld a, [$c716]
	cp $a
	ret nc

	call Function0x349f4
	call Function0x34b77
	call Function0x34b20
	call Function0x34a85

	ld a, e
	cp $2
	ret nz

	ld a, [$c716]
	add $10
	ld [$c717], a
	ret
; 349f4


Function0x349f4: ; 349f4
	ld a, [OTPartyCount]
	cp 2
	jr c, .asm_34a26

	ld d, a
	ld e, 0
	ld b, $20
	ld c, 0
	ld hl, OTPartyMon1CurHP

.asm_34a05
	ld a, [CurOTMon]
	cp e
	jr z, .asm_34a16

	push bc
	ld b, [hl]
	inc hl
	ld a, [hld]
	or b
	pop bc
	jr z, .asm_34a16

	ld a, c
	or b
	ld c, a
.asm_34a16
	srl b
	push bc
	ld bc, $30
	add hl, bc
	pop bc
	inc e
	dec d
	jr nz, .asm_34a05

	ld a, c
	and a
	jr nz, .asm_34a28

.asm_34a26
	scf
	ret

.asm_34a28
	and a
	ret
; 34a2a


Function0x34a2a: ; 34a2a
	ld hl, OTPartyMon1
	ld a, [OTPartyCount]
	ld b, a
	ld c, $20
	ld d, 0
	xor a
	ld [$c716], a

.asm_34a39
	ld a, [CurOTMon]
	cp d
	push hl
	jr z, .asm_34a77

	push hl
	push bc
	ld bc, $0022
	add hl, bc
	pop bc
	ld a, [hli]
	or [hl]
	pop hl
	jr z, .asm_34a77

	ld a, [hl]
	ld [CurSpecies], a
	call GetBaseData
	ld a, [LastEnemyCounterMove]
	dec a
	ld hl, Moves + PlayerMovePower - PlayerMoveStruct
	call GetMoveAttr
	and a
	jr z, .asm_34a77

	inc hl
	call GetMoveByte
	ld hl, $d23d
	call Function0x347d3
	ld a, [$d265]
	and a
	jr nz, .asm_34a77

	ld a, [$c716]
	or c
	ld [$c716], a
.asm_34a77
	pop hl
	dec b
	ret z

	push bc
	ld bc, $30
	add hl, bc
	pop bc

	inc d
	srl c
	jr .asm_34a39
; 34a85


Function0x34a85: ; 34a85
	push bc
	ld a, [OTPartyCount]
	ld e, a
	ld hl, OTPartyMon1CurHP
	ld b, $20
	ld c, $0
.asm_34a91
	ld a, [hli]
	or [hl]
	jr z, .asm_34a98

	ld a, b
	or c
	ld c, a

.asm_34a98
	srl b
	push bc
	ld bc, $2f
	add hl, bc
	pop bc
	dec e
	jr nz, .asm_34a91

	ld a, c
	pop bc

	and c
	ld c, a

	; fallthrough
; 34aa7

Function0x34aa7: ; 34aa7

	ld a, $ff
	ld [$c716], a
	ld hl, OTPartyMon1Move1
	ld b, $20
	ld d, $0
	ld e, $0
.asm_34ab5
	ld a, b
	and c
	jr z, .asm_34b00

	push hl
	push bc
	ld b, $4
	ld c, $0
.asm_34abf
	ld a, [hli]
	and a
	push hl
	jr z, .asm_34aef

	dec a
	ld hl, Moves + PlayerMovePower - PlayerMoveStruct
	call GetMoveAttr
	and a
	jr z, .asm_34ae9

	inc hl
	call GetMoveByte
	ld hl, BattleMonType1
	call Function0x347d3
	ld a, [$d265]
	cp $a
	jr c, .asm_34ae9

	ld e, $1
	cp $b
	jr c, .asm_34ae9

	ld e, $2
	jr .asm_34aef

.asm_34ae9
	pop hl
	dec b
	jr nz, .asm_34abf

	jr .asm_34af0

.asm_34aef
	pop hl
.asm_34af0
	ld a, e
	pop bc
	pop hl
	cp $2
	jr z, .asm_34b0e

	cp $1
	jr nz, .asm_34b00

	ld a, d
	or b
	ld d, a
	jr .asm_34b00

.asm_34b00
	push bc
	ld bc, $0030
	add hl, bc
	pop bc
	srl b
	jr nc, .asm_34ab5

	ld a, d
	ld b, a
	and a
	ret z

.asm_34b0e
	push bc
	sla b
	sla b
	ld c, $ff
.asm_34b15
	inc c
	sla b
	jr nc, .asm_34b15

	ld a, c
	ld [$c716], a
	pop bc
	ret
; 34b20


Function0x34b20: ; 34b20
	push bc
	ld hl, OTPartySpecies
	ld b, $20
	ld c, $0

.asm_34b28
	ld a, [hli]
	cp $ff
	jr z, .asm_34b72

	push hl
	ld [CurSpecies], a
	call GetBaseData
	ld a, [LastEnemyCounterMove]
	and a
	jr z, .asm_34b4a

	dec a
	ld hl, Moves + PlayerMovePower - PlayerMoveStruct
	call GetMoveAttr
	and a
	jr z, .asm_34b4a

	inc hl
	call GetMoveByte
	jr .asm_34b5d

.asm_34b4a
	ld a, [BattleMonType1]
	ld hl, $d23d
	call Function0x347d3
	ld a, [$d265]
	cp $b
	jr nc, .asm_34b6d
	ld a, [BattleMonType2]

.asm_34b5d
	ld hl, $d23d
	call Function0x347d3
	ld a, [$d265]
	cp $b
	jr nc, .asm_34b6d

	ld a, b
	or c
	ld c, a

.asm_34b6d
	srl b
	pop hl
	jr .asm_34b28

.asm_34b72
	ld a, c
	pop bc
	and c
	ld c, a
	ret
; 34b77


Function0x34b77: ; 34b77
	push bc
	ld de, OTPartySpecies
	ld b, $20
	ld c, 0
	ld hl, OTPartyMon1CurHP

.asm_34b82
	ld a, [de]
	inc de
	cp $ff
	jr z, .asm_34bac

	push hl
	push bc
	ld b, [hl]
	inc hl
	ld c, [hl]
	inc hl
	inc hl
	srl c
	rl b
	srl c
	rl b
	ld a, [hld]
	cp c
	ld a, [hl]
	sbc b
	pop bc
	jr nc, .asm_34ba1

	ld a, b
	or c
	ld c, a

.asm_34ba1
	srl b
	pop hl
	push bc
	ld bc, $0030
	add hl, bc
	pop bc
	jr .asm_34b82

.asm_34bac
	ld a, c
	pop bc
	and c
	ld c, a
	ret
; 34bb1


TypeMatchup: ; 34bb1
INCLUDE "battle/type_matchup.asm"
; 34cfd


BattleCommand08: ; 34cfd
; damagevariation

; Modify the damage spread between 85% and 100%.

; Because of the method of division the probability distribution
; is not consistent. This makes the highest damage multipliers
; rarer than normal.


; No point in reducing 1 or 0 damage.
	ld hl, CurDamage
	ld a, [hli]
	and a
	jr nz, .go
	ld a, [hl]
	cp 2
	ret c

.go
; Start with the maximum damage.
	xor a
	ld [$ffb4], a
	dec hl
	ld a, [hli]
	ld [$ffb5], a
	ld a, [hl]
	ld [$ffb6], a

; Multiply by 85-100%...
.loop
	call BattleRandom
	rrca
	cp $d9 ; 85%
	jr c, .loop

	ld [$ffb7], a
	call Multiply

; ...divide by 100%...
	ld a, $ff ; 100%
	ld [$ffb7], a
	ld b, $4
	call Divide

; ...to get .85-1.00x damage.
	ld a, [$ffb5]
	ld hl, CurDamage
	ld [hli], a
	ld a, [$ffb6]
	ld [hl], a
	ret
; 34d32


BattleCommand09: ; 34d32
; checkhit

	call .DreamEater
	jp z, .Miss

	call .Protect
	jp nz, .Miss

	call .DrainSub
	jp z, .Miss

	call .LockOn
	ret nz

	call .FlyDigMoves
	jp nz, .Miss

	call .ThunderRain
	ret z

	call .UnleashedEnergy
	ret nz

; Perfect-accuracy moves
	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	cp EFFECT_ALWAYS_HIT
	ret z

	call .StatModifiers

	ld a, [PlayerMoveAccuracy]
	ld b, a
	ld a, [hBattleTurn]
	and a
	jr z, .BrightPowder
	ld a, [EnemyMoveAccuracy]
	ld b, a

.BrightPowder
	push bc
	call GetOpponentItem
	ld a, b
	cp HELD_BRIGHTPOWDER
	ld a, c ; % miss
	pop bc
	jr nz, .asm_34d81

	ld c, a
	ld a, b
	sub c
	ld b, a
	jr nc, .asm_34d81
	ld b, 0

.asm_34d81
	ld a, b
	cp $ff
	jr z, .Hit

	call BattleRandom
	cp b
	jr nc, .Miss

.Hit
	ret


.Miss
; Keep the damage value intact if we're using (Hi) Jump Kick.
	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	cp EFFECT_JUMP_KICK
	jr z, .Missed
	call ResetDamage

.Missed
	ld a, 1
	ld [AttackMissed], a
	ret


.DreamEater
; Return z if we're trying to eat the dream of
; a monster that isn't sleeping.
	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	cp EFFECT_DREAM_EATER
	ret nz

	ld a, BATTLE_VARS_STATUS_OPP
	call GetBattleVar
	and SLP
	ret


.Protect
; Return nz if the opponent is protected.
	ld a, BATTLE_VARS_SUBSTATUS1_OPP
	call GetBattleVar
	bit SUBSTATUS_PROTECT, a
	ret z

	ld c, 40
	call DelayFrames

; 'protecting itself!'
	ld hl, ProtectingItselfText
	call StdBattleTextBox

	ld c, 40
	call DelayFrames

	ld a, 1
	and a
	ret


.LockOn
; Return nz if we are locked-on and aren't trying to use Earthquake,
; Fissure or Magnitude on a monster that is flying.
	ld a, BATTLE_VARS_SUBSTATUS5_OPP
	call _GetBattleVar
	bit SUBSTATUS_LOCK_ON, [hl]
	res SUBSTATUS_LOCK_ON, [hl]
	ret z

	ld a, BATTLE_VARS_SUBSTATUS3_OPP
	call GetBattleVar
	bit SUBSTATUS_FLYING, a
	jr z, .LockedOn

	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar

	cp EARTHQUAKE
	ret z
	cp FISSURE
	ret z
	cp MAGNITUDE
	ret z

.LockedOn
	ld a, 1
	and a
	ret


.DrainSub
; Return z if using an HP drain move on a substitute.
	call CheckSubstituteOpp
	jr z, .asm_34e00

	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar

	cp EFFECT_LEECH_HIT
	ret z
	cp EFFECT_DREAM_EATER
	ret z

.asm_34e00
	ld a, 1
	and a
	ret


.FlyDigMoves
; Check for moves that can hit underground/flying opponents.
; Return z if the current move can hit the opponent.

	ld a, BATTLE_VARS_SUBSTATUS3_OPP
	call GetBattleVar
	and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
	ret z

	bit SUBSTATUS_FLYING, a
	jr z, .DigMoves

	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar

	cp GUST
	ret z
	cp WHIRLWIND
	ret z
	cp THUNDER
	ret z
	cp TWISTER
	ret

.DigMoves
	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar

	cp EARTHQUAKE
	ret z
	cp FISSURE
	ret z
	cp MAGNITUDE
	ret


.ThunderRain
; Return z if the current move always hits in rain, and it is raining.
	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	cp EFFECT_THUNDER
	ret nz

	ld a, [Weather]
	cp WEATHER_RAIN
	ret


.UnleashedEnergy
; Return nz if unleashing energy from Bide.
	ld a, BATTLE_VARS_SUBSTATUS4
	call GetBattleVar
	bit SUBSTATUS_UNLEASH, a
	ret


.StatModifiers

	ld a, [hBattleTurn]
	and a

	ld hl, PlayerMoveAccuracy
	ld a, [PlayerAccLevel]
	ld b, a
	ld a, [EnemyEvaLevel]
	ld c, a

	jr z, .asm_34e60

	ld hl, EnemyMoveAccuracy
	ld a, [EnemyAccLevel]
	ld b, a
	ld a, [PlayerEvaLevel]
	ld c, a

.asm_34e60
	cp b
	jr c, .asm_34e6b

	ld a, BATTLE_VARS_SUBSTATUS1_OPP
	call GetBattleVar
	bit SUBSTATUS_IDENTIFIED, a
	ret nz

.asm_34e6b
	ld a, $e
	sub c
	ld c, a
	xor a
	ld [$ffb4], a
	ld [$ffb5], a
	ld a, [hl]
	ld [$ffb6], a
	push hl
	ld d, $2

.asm_34e7a
	push bc
	ld hl, .AccProb
	dec b
	sla b
	ld c, b
	ld b, 0
	add hl, bc
	pop bc
	ld a, [hli]
	ld [$ffb7], a
	call Multiply
	ld a, [hl]
	ld [$ffb7], a
	ld b, $4
	call Divide
	ld a, [$ffb6]
	ld b, a
	ld a, [$ffb5]
	or b
	jr nz, .asm_34ea2
	ld [$ffb5], a
	ld a, $1
	ld [$ffb6], a

.asm_34ea2
	ld b, c
	dec d
	jr nz, .asm_34e7a

	ld a, [$ffb5]
	and a
	ld a, [$ffb6]
	jr z, .asm_34eaf
	ld a, $ff

.asm_34eaf
	pop hl
	ld [hl], a
	ret

.AccProb
	db  33, 100 ;  33% -6
	db  36, 100 ;  36% -5
	db  43, 100 ;  43% -4
	db  50, 100 ;  50% -3
	db  60, 100 ;  60% -2
	db  75, 100 ;  75% -1
	db   1,   1 ; 100%  0
	db 133, 100 ; 133% +1
	db 166, 100 ; 166% +2
	db   2,   1 ; 200% +3
	db 233, 100 ; 233% +4
	db 133,  50 ; 266% +5
	db   3,   1 ; 300% +6

; 34ecc


BattleCommand90: ; 34ecc
; effectchance

	xor a
	ld [EffectFailed], a
	call CheckSubstituteOpp
	jr nz, .failed

	push hl
	ld hl, PlayerMoveEffectChance
	ld a, [hBattleTurn]
	and a
	jr z, .asm_34ee1
	ld hl, EnemyMoveEffectChance
.asm_34ee1

	call BattleRandom
	cp [hl]
	pop hl
	ret c

.failed
	ld a, 1
	ld [EffectFailed], a
	and a
	ret
; 34eee


BattleCommand0a: ; 34eee

	ld a, BATTLE_VARS_SUBSTATUS4
	call GetBattleVar
	bit SUBSTATUS_SUBSTITUTE, a
	ret z

	ld a, BATTLE_VARS_SUBSTATUS3
	call GetBattleVar
	bit SUBSTATUS_CHARGED, a
	jr nz, .asm_34f18

	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	cp EFFECT_RAZOR_WIND
	jr z, .asm_34f21
	cp EFFECT_SKY_ATTACK
	jr z, .asm_34f21
	cp EFFECT_SKULL_BASH
	jr z, .asm_34f21
	cp EFFECT_SOLARBEAM
	jr z, .asm_34f21
	cp EFFECT_FLY
	jr z, .asm_34f21

.asm_34f18
	call .Rampage
	jr z, .asm_34f21

	call Function0x34548
	ret nz

.asm_34f21
	call Function0x37ed5
	jr c, .asm_34f36

	xor a
	ld [$cfca], a
	ld [FXAnimIDHi], a
	inc a
	ld [$c689], a
	ld a, $a4
	jp Function0x37e44

.asm_34f36
	call BattleCommanda7
	jp BattleCommandaa

.Rampage
	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	cp EFFECT_ROLLOUT
	jr z, .asm_34f4d
	cp EFFECT_RAMPAGE
	jr z, .asm_34f4d

	ld a, 1
	and a
	ret

.asm_34f4d
	ld a, [$c73e]
	and a
	ld a, 0
	ld [$c73e], a
	ret
; 34f57


BattleCommandab: ; 34f57
; hittarget
	call BattleCommand0a
	call BattleCommand0b
	jp BattleCommand0c
; 34f60


BattleCommand0b: ; 34f60
	ld a, [AttackMissed]
	and a
	jp nz, BattleCommandaa

	ld a, [hBattleTurn]
	and a
	ld de, PlayerRolloutCount
	ld a, 1
	jr z, .asm_34f76
	ld de, EnemyRolloutCount
	ld a, 4

.asm_34f76
	ld [$cfca], a
	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	cp EFFECT_MULTI_HIT
	jr z, .asm_34fb0
	cp EFFECT_CONVERSION
	jr z, .asm_34fb0
	cp EFFECT_DOUBLE_HIT
	jr z, .asm_34fb0
	cp EFFECT_TWINEEDLE
	jr z, .asm_34fb0
	cp EFFECT_TRIPLE_KICK
	jr z, .asm_34f96
	xor a
	ld [$c689], a

.asm_34f96

	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar
	ld e, a
	ld d, 0
	call PlayFXAnimID

	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar
	cp FLY
	jr z, .asm_34fad
	cp DIG
	ret nz

.asm_34fad
; clear sprite
	jp Function0x37ec7
.asm_34fb0
	ld a, [$c689]
	and 1
	xor 1
	ld [$c689], a
	ld a, [de]
	cp $1
	push af
	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar
	ld e, a
	ld d, 0
	pop af
	jp z, PlayFXAnimID
	xor a
	ld [$cfca], a
	jp PlayFXAnimID
; 34fd1


BattleCommand92: ; 34fd1
	ld a, [AttackMissed]
	and a
	jp nz, BattleCommandaa

	xor a
	jr BattleCommand91_92
; 34fdb


BattleCommand91: ; 34fdb
	ld a, [AttackMissed]
	and a
	jp nz, BattleCommandaa

	ld a, [hBattleTurn]
	and a
	ld a, 2
	jr z, BattleCommand91_92
	ld a, 5

	; fallthrough
; 34feb


BattleCommand91_92: ; 34feb
	ld [$cfca], a
	xor a
	ld [$c689], a
	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar
	ld e, a
	ld d, 0
	jp PlayFXAnimID
; 34ffd


SwitchTurn: ; 34ffd
BattleCommand93: ; 34ffd
; switchturn

	ld a, [hBattleTurn]
	xor 1
	ld [hBattleTurn], a
	ret
; 35004


BattleCommand0c: ; 35004
	ld a, BATTLE_VARS_SUBSTATUS4
	call GetBattleVar
	bit SUBSTATUS_SUBSTITUTE, a
	ret z

	call Function0x37ed5
	jp c, BattleCommanda6

	xor a
	ld [$cfca], a
	ld [FXAnimIDHi], a
	ld a, $2
	ld [$c689], a
	ld a, $a4
	jp Function0x37e44
; 35023


BattleCommand0d: ; 35023
; resulttext
	ld a, [AttackMissed]
	and a
	ret z

	call Function0x350e4
	ld a, BATTLE_VARS_MOVE_ANIM
	call _GetBattleVar

	cp FLY
	jr z, .asm_3504f ; 35032 $1b
	cp DIG
	jr z, .asm_3504f ; 35036 $17

; Move effect:
	inc hl
	ld a, [hl]

	cp EFFECT_MULTI_HIT
	jr z, .asm_35049
	cp EFFECT_DOUBLE_HIT
	jr z, .asm_35049
	cp EFFECT_TWINEEDLE
	jr z, .asm_35049
	jp EndMoveEffect

.asm_35049
	call BattleCommand0c
	jp EndMoveEffect

.asm_3504f
	ld a, BATTLE_VARS_SUBSTATUS3
	call _GetBattleVar
	res SUBSTATUS_UNDERGROUND, [hl]
	res SUBSTATUS_FLYING, [hl]
	call Function0x37ece
	jp EndMoveEffect
; 3505e


BattleCommand0e: ; 3505e
; checkfaint

	ld a, BATTLE_VARS_SUBSTATUS1_OPP
	call GetBattleVar
	bit SUBSTATUS_ENDURE, a
	jr z, .asm_35072 ; 35065 $b
	call BattleCommand4b
	ld b, $0
	jr nc, .asm_3508b ; 3506c $1d
	ld b, $1
	jr .asm_3508b ; 35070 $19

.asm_35072
	call GetOpponentItem
	ld a, b
	cp HELD_FOCUS_BAND
	ld b, $0
	jr nz, .asm_3508b ; 3507a $f
	call BattleRandom
	cp c
	jr nc, .asm_3508b ; 35080 $9
	call BattleCommand4b
	ld b, $0
	jr nc, .asm_3508b ; 35087 $2
	ld b, $2
.asm_3508b
	push bc
	call .asm_50bb
	ld c, $0
	ld a, [hBattleTurn]
	and a
	jr nz, .asm_3509b
	call Function0x35d1c
	jr .asm_3509e

.asm_3509b
	call Function0x35d7e

.asm_3509e
	pop bc
	ld a, b
	and a
	ret z
	dec a
	jr nz, .asm_350ab ; 350a3 $6
	ld hl, EnduredText
	jp StdBattleTextBox

.asm_350ab
	call GetOpponentItem
	ld a, [hl]
	ld [$d265], a
	call GetItemName

	ld hl, HungOnText
	jp StdBattleTextBox

.asm_50bb
	ld a, BATTLE_VARS_SUBSTATUS4_OPP
	call GetBattleVar
	bit SUBSTATUS_SUBSTITUTE, a
	ret nz

	ld de, PlayerDamageTaken + 1
	ld a, [hBattleTurn]
	and a
	jr nz, .asm_350ce
	ld de, EnemyDamageTaken + 1

.asm_350ce
	ld a, [CurDamage + 1]
	ld b, a
	ld a, [de]
	add b
	ld [de], a
	dec de
	ld a, [CurDamage]
	ld b, a
	ld a, [de]
	adc b
	ld [de], a
	ret nc
	ld a, $ff
	ld [de], a
	inc de
	ld [de], a
	ret
; 350e4


Function0x350e4: ; 350e4
	ld hl, DoesntAffectText
	ld de, DoesntAffectText
	ld a, [TypeModifier]
	and $7f
	jr z, .asm_35110 ; 0x350ef $1f
	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	cp EFFECT_FUTURE_SIGHT
	ld hl, ButItFailedText
	ld de, ItFailedText
	jr z, .asm_35110 ; 0x350fe $10
	ld hl, AttackMissedText
	ld de, AttackMissed2Text
	ld a, [CriticalHit]
	cp $ff
	jr nz, .asm_35110 ; 0x3510b $3
	ld hl, UnaffectedText
.asm_35110
	call Function0x35157
	xor a
	ld [CriticalHit], a
	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	cp EFFECT_JUMP_KICK
	ret nz
	ld a, [TypeModifier]
	and $7f
	ret z
	ld hl, CurDamage
	ld a, [hli]
	ld b, [hl]
	srl a
	rr b
	srl a
	rr b
	srl a
	rr b
	ld [hl], b
	dec hl
	ld [hli], a
	or b
	jr nz, .asm_3513e ; 0x3513a $2
	inc a
	ld [hl], a
.asm_3513e
	ld hl, CrashedText
	call StdBattleTextBox
	ld a, $1
	ld [$c689], a
	call Function0x37e36
	ld c, $1
	ld a, [hBattleTurn]
	and a
	jp nz, Function0x35d1c
	jp Function0x35d7e

Function0x35157: ; 35157
	ld a, BATTLE_VARS_SUBSTATUS1_OPP
	call GetBattleVar
	bit SUBSTATUS_PROTECT, a
	jr z, .asm_35162
	ld h, d
	ld l, e
.asm_35162
	jp StdBattleTextBox
; 35165


BattleCommanda5: ; 35165
	ld a, [AttackMissed]
	and a
	ret z

	ld a, [TypeModifier]
	and $7f
	jp z, PrintDoesntAffect
	jp PrintButItFailed
; 35175


BattleCommand0f: ; 35175
; criticaltext
; Prints the message for critical hits or one-hit KOs.

; If there is no message to be printed, wait 20 frames.
	ld a, [CriticalHit]
	and a
	jr z, .wait

	dec a
	add a
	ld hl, .ptrs
	ld b, 0
	ld c, a
	add hl, bc
	ld a, [hli]
	ld h, [hl]
	ld l, a
	call StdBattleTextBox

	xor a
	ld [CriticalHit], a

.wait
	ld c, 20
	jp DelayFrames

.ptrs
	dw CriticalHitText ; 'critical hit'
	dw OneHitKOText    ; 'one-hit ko'
; 35197


BattleCommandae: ; 35197
; startloop

	ld hl, PlayerRolloutCount
	ld a, [hBattleTurn]
	and a
	jr z, .asm_351a2
	ld hl, EnemyRolloutCount

.asm_351a2
	xor a
	ld [hl], a
	ret
; 351a5


BattleCommandad: ; 351a5
; supereffectivelooptext

	ld a, BATTLE_VARS_SUBSTATUS3
	call _GetBattleVar
	bit 2, a
	ret nz

	; fallthrough
; 351ad


BattleCommand10: ; 351ad
; supereffectivetext

	ld a, [TypeModifier]
	and $7f
	cp 10 ; 1.0
	ret z
	ld hl, SuperEffectiveText ; 'super-effective'
	jr nc, .print
	ld hl, NotVeryEffectiveText ; 'not very effective'
.print
	jp StdBattleTextBox
; 351c0


BattleCommand11: ; 351c0
; checkdestinybond

; Faint the user if it fainted an opponent using Destiny Bond.

	ld hl, EnemyMonHPHi
	ld a, [hBattleTurn]
	and a
	jr z, .asm_351cb
	ld hl, BattleMonHP

.asm_351cb
	ld a, [hli]
	or [hl]
	ret nz

	ld a, BATTLE_VARS_SUBSTATUS5_OPP
	call GetBattleVar
	bit SUBSTATUS_DESTINY_BOND, a
	jr z, .asm_35231

	ld hl, TookDownWithItText
	call StdBattleTextBox

	ld a, [hBattleTurn]
	and a
	ld hl, EnemyMonMaxHP + 1
	bccoord 2, 2 ; hp bar
	ld a, 0
	jr nz, .asm_351f2
	ld hl, BattleMonMaxHP + 1
	bccoord 10, 9 ; hp bar
	ld a, 1

.asm_351f2
	ld [$d10a], a
	ld a, [hld]
	ld [$d1ea], a
	ld a, [hld]
	ld [$d1eb], a
	ld a, [hl]
	ld [$d1ec], a
	xor a
	ld [hld], a
	ld a, [hl]
	ld [$d1ed], a
	xor a
	ld [hl], a
	ld [$d1ee], a
	ld [$d1ef], a
	ld h, b
	ld l, c
	ld a, $b
	call Predef
	call RefreshBattleHuds

	call SwitchTurn
	xor a
	ld [$cfca], a
	ld [FXAnimIDHi], a
	inc a
	ld [$c689], a
	ld a, $c2
	call Function0x37e44
	call SwitchTurn

	jr .asm_3524d ; 3522f $1c

.asm_35231
	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	cp EFFECT_MULTI_HIT
	jr z, .asm_3524a
	cp EFFECT_DOUBLE_HIT
	jr z, .asm_3524a
	cp EFFECT_TWINEEDLE
	jr z, .asm_3524a
	cp EFFECT_TRIPLE_KICK
	jr z, .asm_3524a
	cp EFFECT_BEAT_UP
	jr nz, .asm_3524d

.asm_3524a
	call BattleCommand0c

.asm_3524d
	jp EndMoveEffect
; 35250


BattleCommand12: ; 35250
; buildopponentrage

	jp .start
.start
	ld a, [AttackMissed]
	and a
	ret nz

	ld a, BATTLE_VARS_SUBSTATUS4_OPP
	call GetBattleVar
	bit SUBSTATUS_RAGE, a
	ret z

	ld de, $c72c
	ld a, [hBattleTurn]
	and a
	jr z, .asm_3526b
	ld de, $c72b
.asm_3526b
	ld a, [de]
	inc a
	ret z
	ld [de], a

	call SwitchTurn
	ld hl, RageBuildingText
	call StdBattleTextBox
	jp SwitchTurn
; 3527b


BattleCommanda2: ; 3527b
; ragedamage

	ld a, [CurDamage]
	ld h, a
	ld b, a
	ld a, [CurDamage + 1]
	ld l, a
	ld c, a
	ld a, [hBattleTurn]
	and a
	ld a, [$c72b]
	jr z, .asm_35290 ; 3528b $3
	ld a, [$c72c]
.asm_35290
	and a
	jr z, .asm_3529a ; 35291 $7
	dec a
	add hl, bc
	jr nc, .asm_35290 ; 35295 $f9
	ld hl, $ffff
.asm_3529a
	ld a, h
	ld [CurDamage], a
	ld a, l
	ld [CurDamage + 1], a
	ret
; 352a3


EndMoveEffect: ; 352a3
	ld a, [BattleScriptBufferLoc]
	ld l, a
	ld a, [BattleScriptBufferLoc + 1]
	ld h, a
	ld a, $ff
	ld [hli], a
	ld [hli], a
	ld [hl], a
	ret
; 352b1


DittoMetalPowder: ; 352b1
	ld a, PartyMon1Species - PartyMon1
	call BattlePartyAttr
	ld a, [hBattleTurn]
	and a
	ld a, [hl]
	jr nz, .Ditto
	ld a, [TempEnemyMonSpecies]

.Ditto
	cp DITTO
	ret nz

	push bc
	call GetOpponentItem
	ld a, [hl]
	cp METAL_POWDER
	pop bc
	ret nz

	ld a, c
	srl a
	add c
	ld c, a
	ret nc

	srl b
	ld a, b
	and a
	jr nz, .asm_352d8
	inc b
.asm_352d8
	scf
	rr c
	ret
; 352dc


BattleCommand06: ; 352dc
; damagestats

	ld a, [hBattleTurn]
	and a
	jp nz, EnemyAttackDamage

	; fallthrough
; 352e2


PlayerAttackDamage: ; 352e2
; Return move power d, player level e, enemy defense c and player attack b.

	call ResetDamage

	ld hl, PlayerMovePower
	ld a, [hli]
	and a
	ld d, a
	ret z

	ld a, [hl]
	cp FIRE
	jr nc, .special


; Physical
	ld hl, EnemyMonDef
	ld a, [hli]
	ld b, a
	ld c, [hl]

; Reflect
	ld a, [EnemyScreens]
	bit 4, a
	jr z, .physicalcrit
	sla c
	rl b

.physicalcrit
	ld hl, BattleMonAtk
	call GetDamageStatsCritical
	jr c, .thickclub

	ld hl, $c6c3
	ld a, [hli]
	ld b, a
	ld c, [hl]
	ld hl, PlayerStats
	jr .thickclub


.special
	ld hl, EnemyMonSpclDef
	ld a, [hli]
	ld b, a
	ld c, [hl]

; Light Screen
	ld a, [EnemyScreens]
	bit 3, a
	jr z, .specialcrit
	sla c
	rl b

.specialcrit
	ld hl, BattleMonSpclAtk
	call GetDamageStatsCritical
	jr c, .lightball

	ld hl, $c6c9
	ld a, [hli]
	ld b, a
	ld c, [hl]
	ld hl, $c6bc

.lightball
; Note: Returns player special attack at hl in hl.
	call LightBallBoost
	jr .done

.thickclub
; Note: Returns player attack at hl in hl.
	call ThickClubBoost

.done
	call Function0x3534d

	ld a, [BattleMonLevel]
	ld e, a
	call DittoMetalPowder

	ld a, 1
	and a
	ret
; 3534d


Function0x3534d: ; 3534d
; Truncate 16-bit values hl and bc to 8-bit values b and c respectively.
; b = hl, c = bc

	ld a, h
	or b
	jr z, .asm_3536b

	srl b
	rr c
	srl b
	rr c

	ld a, c
	or b
	jr nz, .asm_3535e
	inc c

.asm_3535e
	srl h
	rr l
	srl h
	rr l

	ld a, l
	or h
	jr nz, .asm_3536b
	inc l

.asm_3536b
	ld a, [InLinkBattle]
	cp 3
	jr z, .done

	ld a, h
	or b
	jr nz, Function0x3534d

.done
	ld b, l
	ret
; 35378


GetDamageStatsCritical: ; 35378
; Return carry if non-critical.

	ld a, [CriticalHit]
	and a
	scf
	ret z

	; fallthrough
; 3537e


GetDamageStats: ; 3537e
; Return the attacker's offensive stat and the defender's defensive
; stat based on whether the attacking type is physical or special.

	push hl
	push bc
	ld a, [hBattleTurn]
	and a
	jr nz, .enemy
	ld a, [PlayerMoveType]
	cp FIRE
; special
	ld a, [PlayerSAtkLevel]
	ld b, a
	ld a, [EnemySDefLevel]
	jr nc, .end
; physical
	ld a, [PlayerAtkLevel]
	ld b, a
	ld a, [EnemyDefLevel]
	jr .end

.enemy
	ld a, [EnemyMoveType]
	cp FIRE
; special
	ld a, [EnemySAtkLevel]
	ld b, a
	ld a, [PlayerSDefLevel]
	jr nc, .end
; physical
	ld a, [EnemyAtkLevel]
	ld b, a
	ld a, [PlayerDefLevel]
.end
	cp b
	pop bc
	pop hl
	ret
; 353b5


ThickClubBoost: ; 353b5
; Return in hl the stat value at hl.

; If the attacking monster is Cubone or Marowak and
; it's holding a Thick Club, double it.
	push bc
	push de
	ld b, CUBONE
	ld c, MAROWAK
	ld d, THICK_CLUB
	call SpeciesItemBoost
	pop de
	pop bc
	ret
; 353c3


LightBallBoost: ; 353c3
; Return in hl the stat value at hl.

; If the attacking monster is Pikachu and it's
; holding a Light Ball, double it.
	push bc
	push de
	ld b, PIKACHU
	ld c, PIKACHU
	ld d, LIGHT_BALL
	call SpeciesItemBoost
	pop de
	pop bc
	ret
; 353d1


SpeciesItemBoost: ; 353d1
; Return in hl the stat value at hl.

; If the attacking monster is species b or c and
; it's holding item d, double it.

	ld a, [hli]
	ld l, [hl]
	ld h, a

	push hl
	ld a, PartyMon1Species - PartyMon1
	call BattlePartyAttr

	ld a, [hBattleTurn]
	and a
	ld a, [hl]
	jr z, .CompareSpecies
	ld a, [TempEnemyMonSpecies]
.CompareSpecies
	pop hl

	cp b
	jr z, .GetItem
	cp c
	ret nz

.GetItem
	push hl
	call GetUserItem
	ld a, [hl]
	pop hl
	cp d
	ret nz

; Double the stat
	sla l
	rl h
	ret
; 353f6


EnemyAttackDamage: ; 353f6
	call ResetDamage

; No damage dealt with 0 power.
	ld hl, EnemyMovePower
	ld a, [hli] ; hl = EnemyMoveType
	ld d, a
	and a
	ret z

	ld a, [hl]
	cp FIRE
	jr nc, .Special


; Physical
	ld hl, BattleMonDef
	ld a, [hli]
	ld b, a
	ld c, [hl]

; Reflect
	ld a, [PlayerScreens]
	bit 4, a
	jr z, .physicalcrit
	sla c
	rl b

.physicalcrit
	ld hl, EnemyMonAtk
	call GetDamageStatsCritical
	jr c, .thickclub

	ld hl, $c6b8
	ld a, [hli]
	ld b, a
	ld c, [hl]
	ld hl, EnemyStats
	jr .thickclub


.Special
	ld hl, BattleMonSpclDef
	ld a, [hli]
	ld b, a
	ld c, [hl]

; Light Screen
	ld a, [PlayerScreens]
	bit 3, a
	jr z, .specialcrit
	sla c
	rl b

.specialcrit
	ld hl, EnemyMonSpclAtk
	call GetDamageStatsCritical
	jr c, .lightball
	ld hl, $c6be
	ld a, [hli]
	ld b, a
	ld c, [hl]
	ld hl, $c6c7

.lightball
	call LightBallBoost
	jr .done

.thickclub
	call ThickClubBoost

.done
	call Function0x3534d

	ld a, [EnemyMonLevel]
	ld e, a
	call DittoMetalPowder

	ld a, 1
	and a
	ret
; 35461


BattleCommanda1: ; 35461
; beatup

	call ResetDamage
	ld a, [hBattleTurn]
	and a
	jp nz, .asm_354ef
	ld a, [PlayerSubStatus3]
	bit 2, a
	jr nz, .asm_35482 ; 3546f $11
	ld c, $14
	call DelayFrames
	xor a
	ld [PlayerRolloutCount], a
	ld [DefaultFlypoint], a
	ld [$c72d], a
	jr .asm_3548d ; 35480 $b
.asm_35482
	ld a, [PlayerRolloutCount]
	ld b, a
	ld a, [PartyCount]
	sub b
	ld [DefaultFlypoint], a
.asm_3548d
	ld a, [DefaultFlypoint]
	ld hl, PartyMon1Nickname
	call GetNick
	ld a, $22
	call Function0x355bd
	ld a, [hli]
	or [hl]
	jp z, Function0x355b0
	ld a, [DefaultFlypoint]
	ld c, a
	ld a, [CurBattleMon]
	cp [hl]
	ld hl, BattleMonStatus
	jr z, .asm_354b2 ; 354ab $5
	ld a, $20
	call Function0x355bd
.asm_354b2
	ld a, [hl]
	and a
	jp nz, Function0x355b0
	ld a, $1
	ld [$c72d], a
	ld hl, BeatUpAttackText
	call StdBattleTextBox
	ld a, [EnemyMonSpecies]
	ld [CurSpecies], a
	call GetBaseData
	ld a, [$d239]
	ld c, a
	push bc
	ld a, $0
	call Function0x355bd
	ld a, [hl]
	ld [CurSpecies], a
	call GetBaseData
	ld a, [$d238]
	pop bc
	ld b, a
	push bc
	ld a, $1f
	call Function0x355bd
	ld a, [hl]
	ld e, a
	pop bc
	ld a, [PlayerMovePower]
	ld d, a
	ret

.asm_354ef
	ld a, [EnemySubStatus3]
	bit 2, a
	jr nz, .asm_35502

	xor a
	ld [EnemyRolloutCount], a
	ld [DefaultFlypoint], a
	ld [$c72d], a
	jr .asm_3550d

.asm_35502
	ld a, [EnemyRolloutCount]
	ld b, a
	ld a, [OTPartyCount]
	sub b
	ld [DefaultFlypoint], a
.asm_3550d
	ld a, [IsInBattle]
	dec a
	jr z, .asm_3556b

	ld a, [InLinkBattle]
	and a
	jr nz, .asm_35532

	ld a, [$cfc0]
	and a
	jr nz, .asm_35532

	ld a, [DefaultFlypoint]
	ld c, a
	ld b, $0
	ld hl, OTPartySpecies
	add hl, bc
	ld a, [hl]
	ld [$d265], a
	call GetPokemonName
	jr .asm_35544

.asm_35532
	ld a, [DefaultFlypoint]
	ld hl, OTPartyMon1Nickname
	ld bc, $000b
	call AddNTimes
	ld de, StringBuffer1
	call CopyBytes
.asm_35544
	ld a, $22
	call Function0x355bd
	ld a, [hli]
	or [hl]
	jp z, Function0x355b0
	ld a, [DefaultFlypoint]
	ld b, a
	ld a, [CurOTMon]
	cp b
	ld hl, EnemyMonStatus
	jr z, .asm_35560

	ld a, $20
	call Function0x355bd
.asm_35560
	ld a, [hl]
	and a
	jr nz, Function0x355b0

	ld a, $1
	ld [$c72d], a
	jr .asm_3557d

.asm_3556b
	ld a, [EnemyMonSpecies]
	ld [$d265], a
	call 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 Function0x355bd
	ld a, [hl]
	ld [CurSpecies], a
	call GetBaseData
	ld a, [$d238]
	pop bc
	ld b, a
	push bc
	ld a, $1f
	call Function0x355bd
	ld a, [hl]
	ld e, a
	pop bc
	ld a, [EnemyMovePower]
	ld d, a
	ret
; 355b0


Function0x355b0: ; 355b0
	ld b, $12 ; buildopponentrage
	jp SkipToBattleCommand
; 355b5


BattleCommanda8: ; 355b5
	ld a, [$c72d]
	and a
	ret nz
	jp PrintButItFailed
; 355bd


Function0x355bd: ; 355bd
	push bc
	ld c, a
	ld b, 0
	ld a, [hBattleTurn]
	and a
	ld hl, PartyMon1Species
	jr z, .asm_355cc
	ld hl, OTPartyMon1Species

.asm_355cc
	ld a, [DefaultFlypoint]
	add hl, bc
	call GetPartyLocation
	pop bc
	ret
; 355d5


BattleCommanda9: ; 355d5
; clearmissdamage
	ld a, [AttackMissed]
	and a
	ret z
	jp ResetDamage
; 355dd


Function0x355dd: ; 355dd
	call ResetDamage
	ld a, [hBattleTurn]
	and a
	ld hl, BattleMonDef
	ld de, PlayerScreens
	ld a, [BattleMonLevel]
	jr z, .asm_355f7

	ld hl, EnemyMonDef
	ld de, EnemyScreens
	ld a, [EnemyMonLevel]
.asm_355f7
	push af
	ld a, [hli]
	ld b, a
	ld c, [hl]
	ld a, [de]
	bit 4, a
	jr z, .asm_35604

	sla c
	rl b
.asm_35604
	dec hl
	dec hl
	dec hl
	ld a, [hli]
	ld l, [hl]
	ld h, a
	call Function0x3534d
	ld d, $28
	pop af
	ld e, a
	ret
; 35612


BattleCommand62: ; 35612
; damagecalc

; Return a damage value for move power d, player level e, enemy defense c and player attack b.

; Return 1 if successful, else 0.

	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar

; Selfdestruct and Explosion halve defense.
	cp EFFECT_EXPLOSION
	jr nz, .asm_35620

	srl c
	jr nz, .asm_35620
	inc c

.asm_35620

; Variable-hit moves and Conversion can have a power of 0.
	cp EFFECT_MULTI_HIT
	jr z, .asm_3562b

	cp EFFECT_CONVERSION
	jr z, .asm_3562b

; No damage if move power is 0.
	ld a, d
	and a
	ret z

.asm_3562b
; Minimum defense value is 1.
	ld a, c
	and a
	jr nz, .asm_35631
	ld c, 1
.asm_35631


	xor a
	ld hl, hDividend
	ld [hli], a
	ld [hli], a
	ld [hl], a

; Level * 2
	ld a, e
	add a
	jr nc, .asm_3563e
	ld [hl], $1
.asm_3563e
	inc hl
	ld [hli], a

; / 5
	ld a, 5
	ld [hld], a
	push bc
	ld b, $4
	call Divide
	pop bc

; + 2
	inc [hl]
	inc [hl]

; * bp
	inc hl
	ld [hl], d
	call Multiply

; * Attack
	ld [hl], b
	call Multiply

; / Defense
	ld [hl], c
	ld b, $4
	call Divide

; / 50
	ld [hl], 50
	ld b, $4
	call Divide


; Item boosts
	call GetUserItem

	ld a, b
	and a
	jr z, .DoneItem

	ld hl, TypeBoostItems

.NextItem
	ld a, [hli]
	cp $ff
	jr z, .DoneItem

; Item effect
	cp b
	ld a, [hli]
	jr nz, .NextItem

; Type
	ld b, a
	ld a, BATTLE_VARS_MOVE_TYPE
	call GetBattleVar
	cp b
	jr nz, .DoneItem

; * 100 + item effect amount
	ld a, c
	add 100
	ld [hMultiplier], a
	call Multiply

; / 100
	ld a, 100
	ld [hDivisor], a
	ld b, 4
	call Divide
.DoneItem

; Critical hits
	call .CriticalMultiplier


; Update CurDamage (capped at 997).
	ld hl, CurDamage
	ld b, [hl]
	ld a, [$ffb6]
	add b
	ld [$ffb6], a
	jr nc, .asm_356a5

	ld a, [$ffb5]
	inc a
	ld [$ffb5], a
	and a
	jr z, .Cap

.asm_356a5
	ld a, [$ffb3]
	ld b, a
	ld a, [$ffb4]
	or a
	jr nz, .Cap

	ld a, [$ffb5]
	cp 998 / $100
	jr c, .asm_356bd

	cp 998 / $100 + 1
	jr nc, .Cap

	ld a, [$ffb6]
	cp 998 % $100
	jr nc, .Cap

.asm_356bd
	inc hl

	ld a, [$ffb6]
	ld b, [hl]
	add b
	ld [hld], a

	ld a, [$ffb5]
	ld b, [hl]
	adc b
	ld [hl], a
	jr c, .Cap

	ld a, [hl]
	cp 998 / $100
	jr c, .asm_356df

	cp 998 / $100 + 1
	jr nc, .Cap

	inc hl
	ld a, [hld]
	cp 998 % $100
	jr c, .asm_356df

.Cap
	ld a, 997 / $100
	ld [hli], a
	ld a, 997 % $100
	ld [hld], a


.asm_356df
; Minimum neutral damage is 2 (bringing the cap to 999).
	inc hl
	ld a, [hl]
	add 2
	ld [hld], a
	jr nc, .asm_356e7
	inc [hl]
.asm_356e7

	ld a, 1
	and a
	ret


.CriticalMultiplier
	ld a, [CriticalHit]
	and a
	ret z

; x2
	ld a, [$ffb6]
	add a
	ld [$ffb6], a

	ld a, [$ffb5]
	rl a
	ld [$ffb5], a

; Cap at $ffff.
	ret nc

	ld a, $ff
	ld [$ffb5], a
	ld [$ffb6], a

	ret
; 35703


TypeBoostItems: ; 35703
	db HELD_NORMAL_BOOST,   NORMAL   ; Pink/Polkadot Bow
	db HELD_FIGHTING_BOOST, FIGHTING ; Blackbelt
	db HELD_FLYING_BOOST,   FLYING   ; Sharp Beak
	db HELD_POISON_BOOST,   POISON   ; Poison Barb
	db HELD_GROUND_BOOST,   GROUND   ; Soft Sand
	db HELD_ROCK_BOOST,     ROCK     ; Hard Stone
	db HELD_BUG_BOOST,      BUG      ; Silverpowder
	db HELD_GHOST_BOOST,    GHOST    ; Spell Tag
	db HELD_FIRE_BOOST,     FIRE     ; Charcoal
	db HELD_WATER_BOOST,    WATER    ; Mystic Water
	db HELD_GRASS_BOOST,    GRASS    ; Miracle Seed
	db HELD_ELECTRIC_BOOST, ELECTRIC ; Magnet
	db HELD_PSYCHIC_BOOST,  PSYCHIC  ; Twistedspoon
	db HELD_ICE_BOOST,      ICE      ; Nevermeltice
	db HELD_DRAGON_BOOST,   DRAGON   ; Dragon Scale
	db HELD_DARK_BOOST,     DARK     ; Blackglasses
	db HELD_STEEL_BOOST,    STEEL    ; Metal Coat
	db $ff
; 35726


BattleCommand3f: ; 35726
; constantdamage

	ld hl, BattleMonLevel
	ld a, [hBattleTurn]
	and a
	jr z, .asm_35731
	ld hl, EnemyMonLevel

.asm_35731
	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	cp EFFECT_LEVEL_DAMAGE
	ld b, [hl]
	ld a, 0
	jr z, .asm_3578c

	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	cp EFFECT_PSYWAVE
	jr z, .asm_35758

	cp EFFECT_SUPER_FANG
	jr z, .asm_3576b

	cp EFFECT_REVERSAL
	jr z, .asm_35792

	ld a, BATTLE_VARS_MOVE_POWER
	call GetBattleVar
	ld b, a
	ld a, $0
	jr .asm_3578c

.asm_35758
	ld a, b
	srl a
	add b
	ld b, a
.asm_3575d
	call BattleRandom
	and a
	jr z, .asm_3575d ; 35761 $fa
	cp b
	jr nc, .asm_3575d ; 35764 $f7
	ld b, a
	ld a, $0
	jr .asm_3578c ; 35769 $21
.asm_3576b
	ld hl, EnemyMonHPHi
	ld a, [hBattleTurn]
	and a
	jr z, .asm_35776 ; 35771 $3
	ld hl, BattleMonHP
.asm_35776
	ld a, [hli]
	srl a
	ld b, a
	ld a, [hl]
	rr a
	push af
	ld a, b
	pop bc
	and a
	jr nz, .asm_3578c ; 35781 $9
	or b
	ld a, $0
	jr nz, .asm_3578c ; 35786 $4
	ld b, $1
	jr .asm_3578c ; 3578a $0
.asm_3578c
	ld hl, CurDamage
	ld [hli], a
	ld [hl], b
	ret
.asm_35792
	ld hl, BattleMonHP
	ld a, [hBattleTurn]
	and a
	jr z, .asm_3579d ; 35798 $3
	ld hl, EnemyMonHPHi
.asm_3579d
	xor a
	ld [$ffb3], a
	ld [$ffb4], a
	ld a, [hli]
	ld [$ffb5], a
	ld a, [hli]
	ld [$ffb6], a
	ld a, $30
	ld [$ffb7], a
	call Multiply
	ld a, [hli]
	ld b, a
	ld a, [hl]
	ld [$ffb7], a
	ld a, b
	and a
	jr z, .asm_357d6

	ld a, [$ffb7]
	srl b
	rr a
	srl b
	rr a
	ld [$ffb7], a
	ld a, [$ffb5]
	ld b, a
	srl b
	ld a, [$ffb6]
	rr a
	srl b
	rr a
	ld [$ffb6], a
	ld a, b
	ld [$ffb5], a

.asm_357d6
	ld b, $4
	call Divide
	ld a, [$ffb6]
	ld b, a
	ld hl, .FlailPower

.asm_357e1
	ld a, [hli]
	cp b
	jr nc, .asm_357e8
	inc hl
	jr .asm_357e1

.asm_357e8
	ld a, [hBattleTurn]
	and a
	ld a, [hl]
	jr nz, .asm_357f8

	ld hl, PlayerMovePower
	ld [hl], a
	push hl
	call PlayerAttackDamage
	jr .asm_35800

.asm_357f8
	ld hl, EnemyMovePower
	ld [hl], a
	push hl
	call EnemyAttackDamage

.asm_35800
	call BattleCommand62
	pop hl
	ld [hl], 1
	ret

.FlailPower
	;  px,  bp
	db  1, 200
	db  4, 150
	db  9, 100
	db 16,  80
	db 32,  40
	db 48,  20
; 35813


BattleCommand40: ; 35813
; counter

	ld a, $1
	ld [AttackMissed], a
	ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
	call GetBattleVar
	and a
	ret z
	ld b, a

	callab GetMoveEffect

	ld a, b
	cp $59
	ret z
	call BattleCommanda3
	ld a, [$d265]
	and a
	ret z
	call Function0x36abf
	ret z
	ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
	call GetBattleVar
	dec a
	ld de, StringBuffer1
	call GetMoveData
	ld a, [$d075]
	and a
	ret z
	ld a, [$d076]
	cp $14
	ret nc
	ld hl, CurDamage
	ld a, [hli]
	or [hl]
	ret z
	ld a, [hl]
	add a
	ld [hld], a
	ld a, [hl]
	adc a
	ld [hl], a
	jr nc, .asm_3585f ; 35859 $4
	ld a, $ff
	ld [hli], a
	ld [hl], a
.asm_3585f
	xor a
	ld [AttackMissed], a
	ret
; 35864


BattleCommand41: ; 35864
; encore

	ld hl, EnemyMonMoves
	ld de, EnemyEncoreCount
	ld a, [hBattleTurn]
	and a
	jr z, .asm_35875 ; 3586d $6
	ld hl, BattleMonMoves
	ld de, PlayerEncoreCount
.asm_35875
	ld a, BATTLE_VARS_LAST_MOVE_OPP
	call GetBattleVar
	and a
	jp z, Function0x35923
	cp STRUGGLE
	jp z, Function0x35923
	cp ENCORE
	jp z, Function0x35923
	cp MIRROR_MOVE
	jp z, Function0x35923
	ld b, a

.asm_3588e
	ld a, [hli]
	cp b
	jr nz, .asm_3588e

	ld bc, $0005
	add hl, bc
	ld a, [hl]
	and $3f
	jp z, Function0x35923
	ld a, [AttackMissed]
	and a
	jp nz, Function0x35923
	ld a, BATTLE_VARS_SUBSTATUS5_OPP
	call _GetBattleVar
	bit 4, [hl]
	jp nz, Function0x35923
	set 4, [hl]
	call BattleRandom
	and $3
	inc a
	inc a
	inc a
	ld [de], a
	call Function0x36abf
	jr nz, .asm_3591a
	ld a, [hBattleTurn]
	and a
	jr z, .asm_358ef
	push hl
	ld a, [LastPlayerMove]
	ld b, a
	ld c, $0
	ld hl, BattleMonMoves
.asm_358cc
	ld a, [hli]
	cp b
	jr z, .asm_358dd
	inc c
	ld a, c
	cp $4
	jr c, .asm_358cc
	pop hl
	res 4, [hl]
	xor a
	ld [de], a
	jr Function0x35923
.asm_358dd
	pop hl
	ld a, c
	ld [CurMoveNum], a
	ld a, b
	ld [CurPlayerMove], a
	dec a
	ld de, PlayerMoveStruct
	call GetMoveData
	jr .asm_3591a
.asm_358ef
	push hl
	ld a, [LastEnemyMove]
	ld b, a
	ld c, $0
	ld hl, EnemyMonMoves
.asm_358f9
	ld a, [hli]
	cp b
	jr z, .asm_3590a
	inc c
	ld a, c
	cp $4
	jr c, .asm_358f9
	pop hl
	res 4, [hl]
	xor a
	ld [de], a
	jr Function0x35923
.asm_3590a
	pop hl
	ld a, c
	ld [CurEnemyMoveNum], a
	ld a, b
	ld [CurEnemyMove], a
	dec a
	ld de, EnemyMoveStruct
	call GetMoveData
.asm_3591a
	call Function0x37e01

	ld hl, GotAnEncoreText
	jp StdBattleTextBox
; 35923


Function0x35923: ; 35923
	jp PrintDidntAffect2
; 35926


BattleCommand42: ; 35926
; painsplit

	ld a, [AttackMissed]
	and a
	jp nz, Function0x359cd
	call CheckSubstituteOpp
	jp nz, Function0x359cd
	call Function0x37e01
	ld hl, $c63f
	ld de, EnemyMonMaxHPLo
	call .asm_3597d
	ld a, $1
	ld [$d10a], a
	ld hl, $c55e
	ld a, $b
	call Predef
	ld hl, EnemyMonHPHi
	ld a, [hli]
	ld [$d1ed], a
	ld a, [hli]
	ld [$d1ec], a
	ld a, [hli]
	ld [$d1eb], a
	ld a, [hl]
	ld [$d1ea], a
	call Function0x359ac
	xor a
	ld [$d10a], a
	call ResetDamage
	ld hl, $c4ca
	ld a, $b
	call Predef
	callba Function178000

	ld hl, SharedPainText
	jp StdBattleTextBox

.asm_3597d
	ld a, [hld]
	ld [$d1ea], a
	ld a, [hld]
	ld [$d1eb], a
	ld a, [hld]
	ld b, a
	ld [$d1ec], a
	ld a, [hl]
	ld [$d1ed], a
	dec de
	dec de
	ld a, [de]
	dec de
	add b
	ld [$d257], a
	ld b, [hl]
	ld a, [de]
	adc b
	srl a
	ld [CurDamage], a
	ld a, [$d257]
	rr a
	ld [$d257], a
	inc hl
	inc hl
	inc hl
	inc de
	inc de
	inc de

	; fallthrough
; 359ac


Function0x359ac: ; 359ac
	ld c, [hl]
	dec hl
	ld a, [$d257]
	sub c
	ld b, [hl]
	dec hl
	ld a, [CurDamage]
	sbc b
	jr nc, .asm_359c2

	ld a, [CurDamage]
	ld b, a
	ld a, [$d257]
	ld c, a
.asm_359c2
	ld a, c
	ld [hld], a
	ld [$d1ee], a
	ld a, b
	ld [hli], a
	ld [$d1ef], a
	ret
; 359cd

Function0x359cd: ; 359cd
	jp PrintDidntAffect2
; 359d0


BattleCommand43: ; 359d0
; snore
	ld a, BATTLE_VARS_STATUS
	call GetBattleVar
	and SLP
	ret nz
	call ResetDamage
	ld a, $1
	ld [AttackMissed], a
	call Function0x37354
	jp EndMoveEffect
; 359e6


BattleCommand44: ; 359e6
; conversion2

	ld a, [AttackMissed]
	and a
	jr nz, .asm_35a50 ; 359ea $64
	ld hl, BattleMonType1
	ld a, [hBattleTurn]
	and a
	jr z, .asm_359f7 ; 359f2 $3
	ld hl, EnemyMonType1
.asm_359f7
	ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
	call GetBattleVar
	and a
	jr z, .asm_35a50 ; 359fd $51
	push hl
	dec a
	ld hl, Moves + PlayerMoveType - PlayerMoveStruct
	call GetMoveAttr
	ld d, a
	pop hl
	cp CURSE_T
	jr z, .asm_35a50 ; 35a0b $43
	call Function0x37e01

	call SwitchTurn
.asm_35a13
	call BattleRandom
	and $1f
	cp $a
	jr c, .asm_35a24 ; 35a1a $8
	cp $14
	jr c, .asm_35a13 ; 35a1e $f3
	cp $1c
	jr nc, .asm_35a13 ; 35a22 $ef
.asm_35a24
	ld [hli], a
	ld [hld], a
	push hl
	ld a, BATTLE_VARS_MOVE_TYPE
	call _GetBattleVar
	push af
	push hl
	ld a, d
	ld [hl], a
	call Function0x347c8
	pop hl
	pop af
	ld [hl], a
	pop hl
	ld a, [$d265]
	cp $a
	jr nc, .asm_35a13 ; 35a3c $d5
	call SwitchTurn

	ld a, [hl]
	ld [$d265], a
	ld a, $29
	call Predef
	ld hl, $5452
	jp StdBattleTextBox
.asm_35a50
	jp Function0x37354
; 35a53


BattleCommand45: ; 35a53
; lockon

	call CheckSubstituteOpp
	jr nz, .asm_35a6e
	ld a, [AttackMissed]
	and a
	jr nz, .asm_35a6e
	ld a, BATTLE_VARS_SUBSTATUS5_OPP
	call _GetBattleVar
	set SUBSTATUS_LOCK_ON, [hl]
	call Function0x37e01

	ld hl, TookAimText
	jp StdBattleTextBox

.asm_35a6e
	call Function0x37e77
	jp PrintDidntAffect
; 35a74


BattleCommand46: ; 35a74
; sketch

	call Function0x372d8
	ld a, [InLinkBattle]
	and a
	jr z, .asm_35a83 ; 35a7b $6
	call Function0x37e77
	jp PrintNothingHappened
.asm_35a83
	call CheckSubstituteOpp
	jp nz, .asm_35b10
	ld a, BATTLE_VARS_SUBSTATUS5_OPP
	call _GetBattleVar
	bit 3, [hl]
	jp nz, .asm_35b10
	ld a, $2
	call UserPartyAttr
	ld d, h
	ld e, l
	ld hl, BattleMonMoves
	ld a, [hBattleTurn]
	and a
	jr z, .asm_35aa5 ; 35aa0 $3
	ld hl, EnemyMonMoves
.asm_35aa5
	ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
	call GetBattleVar
	ld [$d265], a
	ld b, a
	and a
	jr z, .asm_35b10 ; 35aaf $5f
	cp STRUGGLE
	jr z, .asm_35b10 ; 35ab3 $5b
	ld c, $4
.asm_35ab7
	ld a, [hli]
	cp b
	jr z, .asm_35b10 ; 35ab9 $55
	dec c
	jr nz, .asm_35ab7 ; 35abc $f9
	dec hl
	ld c, $4
.asm_35ac1
	dec c
	ld a, [hld]
	cp SKETCH
	jr nz, .asm_35ac1 ; 35ac5 $fa
	inc hl
	ld a, b
	ld [hl], a
	push bc
	push hl
	dec a
	ld hl, Moves + PlayerMovePP - PlayerMoveStruct
	call GetMoveAttr
	pop hl
	ld bc, $0006
	add hl, bc
	ld [hl], a
	pop bc
	ld a, [hBattleTurn]
	and a
	jr z, .asm_35af6 ; 35add $17
	ld a, [IsInBattle]
	dec a
	jr nz, .asm_35af6 ; 35ae3 $11
	ld a, [hl]
	push bc
	ld hl, $c739
	ld b, $0
	add hl, bc
	ld [hl], a
	ld hl, $c735
	add hl, bc
	pop bc
	ld [hl], b
	jr .asm_35b04 ; 35af4 $e
.asm_35af6
	ld a, [hl]
	push af
	ld l, c
	ld h, $0
	add hl, de
	ld a, b
	ld [hl], a
	pop af
	ld de, $0015
	add hl, de
	ld [hl], a
.asm_35b04
	call GetMoveName
	call Function0x37e01

	ld hl, SketchedText
	jp StdBattleTextBox

.asm_35b10
	call Function0x37e77
	jp PrintDidntAffect
; 35b16


BattleCommand47: ; 35b16
; defrostopponent

; If the opponent isn't frozen, raise Attack one stage.
; If the opponent is frozen, thaw them and raise Accuracy two stages.

	call Function0x37e01

	ld a, BATTLE_VARS_STATUS_OPP
	call _GetBattleVar
	call Defrost

; Sharply raise accuracy
	ld a, BATTLE_VARS_MOVE_EFFECT
	call _GetBattleVar
	ld a, [hl]
	push hl
	push af

	ld a, $a ; meditate, sharpen
	ld [hl], a
	call BattleCommand1c

	pop af
	pop hl
	ld [hl], a
	ret
; 35b33


BattleCommand48: ; 35b33
; sleeptalk

	call Function0x372d8
	ld a, [AttackMissed]
	and a
	jr nz, .asm_35ba3 ; 35b3a $67
	ld a, [hBattleTurn]
	and a
	ld hl, BattleMonMove2
	ld a, [DisabledMove]
	ld d, a
	jr z, .asm_35b4f ; 35b46 $7
	ld hl, EnemyMonMove2
	ld a, [EnemyDisabledMove]
	ld d, a
.asm_35b4f
	ld a, BATTLE_VARS_STATUS
	call GetBattleVar
	and $7
	jr z, .asm_35ba3 ; 35b56 $4b
	ld a, [hl]
	and a
	jr z, .asm_35ba3 ; 35b5a $47
	call .asm_35ba9
	jr c, .asm_35ba3 ; 35b5f $42
	dec hl
.asm_35b62
	push hl
	call BattleRandom
	and $3
	ld c, a
	ld b, $0
	add hl, bc
	ld a, [hl]
	pop hl
	and a
	jr z, .asm_35b62 ; 35b6f $f1
	ld e, a
	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar
	cp e
	jr z, .asm_35b62 ; 35b78 $e8
	ld a, e
	cp d
	jr z, .asm_35b62 ; 35b7c $e4
	call .asm_35bdf
	jr z, .asm_35b62 ; 35b81 $df
	ld a, BATTLE_VARS_MOVE
	call _GetBattleVar
	ld a, e
	ld [hl], a
	call Function0x34548
	jr nz, .asm_35b9a ; 35b8d $b
	ld a, [$c689]
	push af
	call BattleCommand0a
	pop af
	ld [$c689], a
.asm_35b9a
	call Function0x37e36
	call UpdateMoveData
	jp ResetTurn
.asm_35ba3
	call Function0x37e77
	jp TryPrintButItFailed

.asm_35ba9
	push hl
	push de
	push bc
	call .asm_35bb3
	pop bc
	pop de
	pop hl
	ret

.asm_35bb3
	ld a, [hBattleTurn]
	and a
	ld a, [DisabledMove]
	jr z, .asm_35bbe

	ld a, [EnemyDisabledMove]
.asm_35bbe
	ld b, a
	ld a, $10
	call GetBattleVar
	ld c, a
	dec hl
	ld d, $4
.asm_35bc8
	ld a, [hl]
	and a
	jr z, .asm_35bdb

	cp c
	jr z, .asm_35bd7
	cp b
	jr z, .asm_35bd7

	call .asm_35bdf
	jr nz, .asm_35bdd

.asm_35bd7
	inc hl
	dec d
	jr nz, .asm_35bc8

.asm_35bdb
	scf
	ret

.asm_35bdd
	and a
	ret

.asm_35bdf
	push hl
	push de
	push bc

	ld b, a
	callab GetMoveEffect
	ld a, b

	pop bc
	pop de
	pop hl

	cp $91
	ret z
	cp $27
	ret z
	cp $4b
	ret z
	cp $97
	ret z
	cp $9b
	ret z
	cp $1a
	ret
; 35bff


BattleCommand49: ; 35bff
; destinybond

	ld a, BATTLE_VARS_SUBSTATUS5
	call _GetBattleVar
	set 6, [hl]
	call Function0x37e01
	ld hl, DestinyBondEffectText
	jp StdBattleTextBox
; 35c0f


BattleCommand4a: ; 35c0f
; spite

	ld a, [AttackMissed]
	and a
	jp nz, .asm_35c91
	ld bc, $0030
	ld hl, EnemyMonMoves
	ld a, [hBattleTurn]
	and a
	jr z, .asm_35c24 ; 35c1f $3
	ld hl, BattleMonMoves
.asm_35c24
	ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
	call GetBattleVar
	and a
	jr z, .asm_35c91 ; 35c2a $65
	cp $a5
	jr z, .asm_35c91 ; 35c2e $61
	ld b, a
	ld c, $ff
.asm_35c33
	inc c
	ld a, [hli]
	cp b
	jr nz, .asm_35c33 ; 35c36 $fb
	ld [$d265], a
	dec hl
	ld b, $0
	push bc
	ld c, $6
	add hl, bc
	pop bc
	ld a, [hl]
	and $3f
	jr z, .asm_35c91 ; 35c46 $49
	push bc
	call GetMoveName
	call BattleRandom
	and $3
	inc a
	inc a
	ld b, a
	ld a, [hl]
	and $3f
	cp b
	jr nc, .asm_35c5b ; 35c58 $1
	ld b, a
.asm_35c5b
	ld a, [hl]
	sub b
	ld [hl], a
	push af
	ld a, $17
	call OpponentPartyAttr
	ld d, b
	pop af
	pop bc
	add hl, bc
	ld e, a
	ld a, BATTLE_VARS_SUBSTATUS5_OPP
	call GetBattleVar
	bit 3, a
	jr nz, .asm_35c82 ; 35c70 $10
	ld a, [hBattleTurn]
	and a
	jr nz, .asm_35c81 ; 35c75 $a
	ld a, [IsInBattle]
	dec a
	jr nz, .asm_35c81 ; 35c7b $4
	ld hl, $c739
	add hl, bc
.asm_35c81
	ld [hl], e
.asm_35c82
	push de
	call Function0x37e01
	pop de
	ld a, d
	ld [$d265], a
	ld hl, SpiteEffectText
	jp StdBattleTextBox
.asm_35c91
	jp PrintDidntAffect2
; 35c94


BattleCommand4b: ; 35c94
; falseswipe

	ld hl, EnemyMonHPHi
	ld a, [hBattleTurn]
	and a
	jr z, .asm_35c9f ; 35c9a $3
	ld hl, BattleMonHP
.asm_35c9f
	ld de, CurDamage
	ld c, $2
	push hl
	push de
	call StringCmp
	pop de
	pop hl
	jr c, .asm_35cc7 ; 35cab $1a
	ld a, [hli]
	ld [de], a
	inc de
	ld a, [hl]
	dec a
	ld [de], a
	inc a
	jr nz, .asm_35cba ; 35cb4 $4
	dec de
	ld a, [de]
	dec a
	ld [de], a
.asm_35cba
	ld a, [CriticalHit]
	cp $2
	jr nz, .asm_35cc5 ; 35cbf $4
	xor a
	ld [CriticalHit], a
.asm_35cc5
	scf
	ret
.asm_35cc7
	and a
	ret
; 35cc9


BattleCommand4c: ; 35cc9
; healbell

	ld a, BATTLE_VARS_SUBSTATUS1
	call _GetBattleVar
	res 0, [hl]
	ld de, PartyMon1Status
	ld a, [hBattleTurn]
	and a
	jr z, .asm_35cdb ; 35cd6 $3
	ld de, OTPartyMon1Status
.asm_35cdb
	ld a, BATTLE_VARS_STATUS
	call _GetBattleVar
	xor a
	ld [hl], a
	ld h, d
	ld l, e
	ld bc, $30
	ld d, $6
.asm_35ce9
	ld [hl], a
	add hl, bc
	dec d
	jr nz, .asm_35ce9
	call Function0x37e01

	ld hl, BellChimedText
	call StdBattleTextBox

	ld a, [hBattleTurn]
	and a
	jp z, Function0x365d7
	jp Function0x365fd
; 35d00


FarPlayBattleAnimation: ; 35d00
; play animation de

; battle animations disabled?
	ld a, BATTLE_VARS_SUBSTATUS3
	call GetBattleVar
	and $60 ; bit 6 | 5
	ret nz

	; fallthrough
; 35d08

PlayFXAnimID: ; 35d08
	ld a, e
	ld [FXAnimIDLo], a
	ld a, d
	ld [FXAnimIDHi], a

	ld c, 3
	call DelayFrames

	callab PlayBattleAnim

	ret
; 35d1c


Function0x35d1c: ; 35d1c
	ld hl, CurDamage
	ld a, [hli]
	ld b, a
	ld a, [hl]
	or b
	jr z, .asm_35d7b

	ld a, c
	and a
	jr nz, .asm_35d31

	ld a, [EnemySubStatus4]
	bit 4, a
	jp nz, Function0x35de0
.asm_35d31
	ld a, [hld]
	ld b, a
	ld a, [EnemyMonHPLo]
	ld [$d1ec], a
	sub b
	ld [EnemyMonHPLo], a
	ld a, [hl]
	ld b, a
	ld a, [EnemyMonHPHi]
	ld [$d1ed], a
	sbc b
	ld [EnemyMonHPHi], a
	jr nc, .asm_35d59

	ld a, [$d1ed]
	ld [hli], a
	ld a, [$d1ec]
	ld [hl], a
	xor a
	ld hl, EnemyMonHPHi
	ld [hli], a
	ld [hl], a
.asm_35d59
	ld hl, EnemyMonMaxHPHi
	ld a, [hli]
	ld [$d1eb], a
	ld a, [hl]
	ld [$d1ea], a
	ld hl, EnemyMonHPHi
	ld a, [hli]
	ld [$d1ef], a
	ld a, [hl]
	ld [$d1ee], a
	ld hl, $c4ca
	xor a
	ld [$d10a], a
	ld a, $b
	call Predef
.asm_35d7b
	jp RefreshBattleHuds
; 35d7e


Function0x35d7e: ; 35d7e
	ld hl, CurDamage
	ld a, [hli]
	ld b, a
	ld a, [hl]
	or b
	jr z, .asm_35ddd

	ld a, c
	and a
	jr nz, .asm_35d93

	ld a, [PlayerSubStatus4]
	bit 4, a
	jp nz, Function0x35de0
.asm_35d93
	ld a, [hld]
	ld b, a
	ld a, [$c63d]
	ld [$d1ec], a
	sub b
	ld [$c63d], a
	ld [$d1ee], a
	ld b, [hl]
	ld a, [BattleMonHP]
	ld [$d1ed], a
	sbc b
	ld [BattleMonHP], a
	ld [$d1ef], a
	jr nc, .asm_35dc5

	ld a, [$d1ed]
	ld [hli], a
	ld a, [$d1ec]
	ld [hl], a
	xor a
	ld hl, BattleMonHP
	ld [hli], a
	ld [hl], a
	ld hl, $d1ee
	ld [hli], a
	ld [hl], a
.asm_35dc5
	ld hl, BattleMonMaxHP
	ld a, [hli]
	ld [$d1eb], a
	ld a, [hl]
	ld [$d1ea], a
	ld hl, $c55e
	ld a, $1
	ld [$d10a], a
	ld a, $b
	call Predef
.asm_35ddd
	jp RefreshBattleHuds
; 35de0


Function0x35de0: ; 35de0

	ld hl, SubTookDamageText
	call StdBattleTextBox

	ld de, $c6e0
	ld a, [hBattleTurn]
	and a
	jr z, .asm_35df1

	ld de, $c6df
.asm_35df1
	ld hl, CurDamage
	ld a, [hli]
	and a
	jr nz, .asm_35dff

	ld a, [de]
	sub [hl]
	ld [de], a
	jr z, .asm_35dff

	jr nc, .asm_35e3d

.asm_35dff
	ld a, BATTLE_VARS_SUBSTATUS4_OPP
	call _GetBattleVar
	res 4, [hl]

	ld hl, SubFadedText
	call StdBattleTextBox

	call SwitchTurn
	call BattleCommanda7
	ld a, BATTLE_VARS_SUBSTATUS3
	call GetBattleVar
	and $60 ; fly | dig
	call z, Function0x37ec7
	call SwitchTurn

	ld a, BATTLE_VARS_MOVE_EFFECT
	call _GetBattleVar
	cp EFFECT_MULTI_HIT
	jr z, .asm_35e3a
	cp EFFECT_DOUBLE_HIT
	jr z, .asm_35e3a
	cp EFFECT_TWINEEDLE
	jr z, .asm_35e3a
	cp EFFECT_TRIPLE_KICK
	jr z, .asm_35e3a
	cp EFFECT_BEAT_UP
	jr z, .asm_35e3a

	xor a
	ld [hl], a
.asm_35e3a
	call RefreshBattleHuds
.asm_35e3d
	jp ResetDamage
; 35e40


UpdateMoveData: ; 35e40

	ld a, BATTLE_VARS_MOVE_ANIM
	call _GetBattleVar
	ld d, h
	ld e, l

	ld a, BATTLE_VARS_MOVE
	call GetBattleVar
	ld [$cf60], a ; not CurSpecies
	ld [$d265], a

	dec a
	call GetMoveData
	call GetMoveName
	jp CopyName1
; 35e5c


BattleCommand14: ; 35e5c
; sleeptarget

	call GetOpponentItem
	ld a, b
	cp $17
	jr nz, .asm_35e70 ; 35e62 $c
	ld a, [hl]
	ld [$d265], a
	call GetItemName
	ld hl, ProtectedByText
	jr .asm_35ec6

.asm_35e70
	ld a, BATTLE_VARS_STATUS_OPP
	call _GetBattleVar
	ld d, h
	ld e, l
	ld a, [de]
	and 7
	ld hl, AlreadyAsleepText
	jr nz, .asm_35ec6

	ld a, [AttackMissed]
	and a
	jp nz, PrintDidntAffect2

	ld hl, DidntAffect1Text
	call Function0x35ece
	jr c, .asm_35ec6

	ld a, [de]
	and a
	jr nz, .asm_35ec6

	call CheckSubstituteOpp
	jr nz, .asm_35ec6

	call Function0x37e01
	ld b, $7
	ld a, [$cfc0]
	and a
	jr z, .asm_35ea4
	ld b, $3

.asm_35ea4
	call BattleRandom
	and b
	jr z, .asm_35ea4
	cp 7
	jr z, .asm_35ea4
	inc a
	ld [de], a
	call UpdateOpponentInParty
	call RefreshBattleHuds

	ld hl, FellAsleepText
	call StdBattleTextBox

	callba Function3dde9

	jp z, Function0x34216
	ret

.asm_35ec6
	push hl
	call Function0x37e77
	pop hl
	jp StdBattleTextBox
; 35ece


Function0x35ece: ; 35ece
; Enemy turn
	ld a, [hBattleTurn]
	and a
	jr z, .asm_35eec

; Not in link battle
	ld a, [InLinkBattle]
	and a
	jr nz, .asm_35eec


	ld a, [$cfc0]
	and a
	jr nz, .asm_35eec

; Not locked-on by the enemy
	ld a, [PlayerSubStatus5]
	bit 5, a
	jr nz, .asm_35eec

	call BattleRandom
	cp $40
	ret c

.asm_35eec
	xor a
	ret
; 35eee


BattleCommand13: ; 35eee
; poisontarget

	call CheckSubstituteOpp
	ret nz
	ld a, BATTLE_VARS_STATUS_OPP
	call _GetBattleVar
	and a
	ret nz
	ld a, [TypeModifier]
	and $7f
	ret z
	call Function0x35fe1
	ret z
	call GetOpponentItem
	ld a, b
	cp $14
	ret z
	ld a, [EffectFailed]
	and a
	ret nz
	call Function0x37962
	ret nz
	call Function0x35ff5
	ld de, $0106
	call Function0x37e54
	call RefreshBattleHuds

	ld hl, WasPoisonedText
	call StdBattleTextBox

	callba Function3dde9
	ret
; 35f2c


BattleCommand2f: ; 35f2c
; poison

	ld hl, DoesntAffectText
	ld a, [TypeModifier]
	and $7f
	jp z, .asm_35fb8
	call Function0x35fe1
	jp z, .asm_35fb8
	ld a, BATTLE_VARS_STATUS_OPP
	call GetBattleVar
	ld b, a
	ld hl, AlreadyPoisonedText
	and $8
	jp nz, .asm_35fb8
	call GetOpponentItem
	ld a, b
	cp $14
	jr nz, .asm_35f5f ; 35f51 $c
	ld a, [hl]
	ld [$d265], a
	call GetItemName
	ld hl, ProtectedByText
	jr .asm_35fb8 ; 35f5d $59
.asm_35f5f
	ld hl, DidntAffect1Text
	ld a, BATTLE_VARS_STATUS_OPP
	call GetBattleVar
	and a
	jr nz, .asm_35fb8 ; 35f68 $4e
	ld a, [hBattleTurn]
	and a
	jr z, .asm_35f89 ; 35f6d $1a
	ld a, [InLinkBattle]
	and a
	jr nz, .asm_35f89 ; 35f73 $14
	ld a, [$cfc0]
	and a
	jr nz, .asm_35f89 ; 35f79 $e
	ld a, [PlayerSubStatus5]
	bit 5, a
	jr nz, .asm_35f89 ; 35f80 $7
	call BattleRandom
	cp $40
	jr c, .asm_35fb8 ; 35f87 $2f
.asm_35f89
	call CheckSubstituteOpp
	jr nz, .asm_35fb8 ; 35f8c $2a
	ld a, [AttackMissed]
	and a
	jr nz, .asm_35fb8 ; 35f92 $24
	call Function0x35fc9
	jr z, .asm_35fa4 ; 35f97 $b
	call Function0x35fc0

	ld hl, WasPoisonedText
	call StdBattleTextBox

	jr .asm_35fb1 ; 35fa2 $d
.asm_35fa4
	set 0, [hl]
	xor a
	ld [de], a
	call Function0x35fc0

	ld hl, BadlyPoisonedText
	call StdBattleTextBox

.asm_35fb1
	callba Function3dde9
	ret

.asm_35fb8
	push hl
	call Function0x37e77
	pop hl
	jp StdBattleTextBox
; 35fc0


Function0x35fc0: ; 35fc0
	call Function0x37e01
	call Function0x35ff5
	jp RefreshBattleHuds
; 35fc9


Function0x35fc9: ; 35fc9
	ld a, BATTLE_VARS_SUBSTATUS5_OPP
	call _GetBattleVar
	ld a, [hBattleTurn]
	and a
	ld de, $c67c
	jr z, .asm_35fd9
	ld de, $c674
.asm_35fd9
	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	cp EFFECT_TOXIC
	ret
; 35fe1


Function0x35fe1: ; 35fe1
	ld de, EnemyMonType1
	ld a, [hBattleTurn]
	and a
	jr z, .asm_35fec
	ld de, BattleMonType1
.asm_35fec
	ld a, [de]
	inc de
	cp POISON
	ret z
	ld a, [de]
	cp POISON
	ret
; 35ff5


Function0x35ff5: ; 35ff5
	ld a, BATTLE_VARS_STATUS_OPP
	call _GetBattleVar
	set PSN, [hl]
	jp UpdateOpponentInParty
; 35fff


BattleCommand15: ; 35fff
; draintarget
	call Function0x36011
	ld hl, SuckedHealthText
	jp StdBattleTextBox
; 36008


BattleCommand16: ; 36008
; eatdream
	call Function0x36011
	ld hl, DreamEatenText
	jp StdBattleTextBox
; 36011


Function0x36011: ; 36011
	ld hl, CurDamage
	ld a, [hli]
	srl a
	ld [$ffb3], a
	ld b, a
	ld a, [hl]
	rr a
	ld [$ffb4], a
	or b
	jr nz, .asm_36026 ; 0x36020 $4
	ld a, $1
	ld [$ffb4], a
.asm_36026
	ld hl, BattleMonHP
	ld de, BattleMonMaxHP
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36037 ; 0x3602f $6
	ld hl, EnemyMonHPHi
	ld de, EnemyMonMaxHPHi
.asm_36037
	ld bc, $d1ed
	ld a, [hli]
	ld [bc], a
	ld a, [hl]
	dec bc
	ld [bc], a
	ld a, [de]
	dec bc
	ld [bc], a
	inc de
	ld a, [de]
	dec bc
	ld [bc], a
	ld a, [$ffb4]
	ld b, [hl]
	add b
	ld [hld], a
	ld [$d1ee], a
	ld a, [$ffb3]
	ld b, [hl]
	adc b
	ld [hli], a
	ld [$d1ef], a
	jr c, .asm_36064 ; 0x36056 $c
	ld a, [hld]
	ld b, a
	ld a, [de]
	dec de
	sub b
	ld a, [hli]
	ld b, a
	ld a, [de]
	inc de
	sbc b
	jr nc, .asm_36070 ; 0x36062 $c
.asm_36064
	ld a, [de]
	ld [hld], a
	ld [$d1ee], a
	dec de
	ld a, [de]
	ld [hli], a
	ld [$d1ef], a
	inc de
.asm_36070
	ld a, [hBattleTurn]
	and a
	ld hl, $c55e
	ld a, $1
	jr z, .asm_3607e ; 0x36078 $4
	ld hl, $c4ca
	xor a
.asm_3607e
	ld [$d10a], a
	ld a, $b
	call Predef
	call RefreshBattleHuds
	jp UpdateBattleMonInParty
; 3608c


BattleCommand17: ; 3608c
; burntarget

	xor a
	ld [$cfca], a
	call CheckSubstituteOpp
	ret nz
	ld a, BATTLE_VARS_STATUS_OPP
	call _GetBattleVar
	and a
	jp nz, Defrost
	ld a, [TypeModifier]
	and $7f
	ret z
	call Function0x36e5b
	ret z
	call GetOpponentItem
	ld a, b
	cp $15
	ret z
	ld a, [EffectFailed]
	and a
	ret nz
	call Function0x37962
	ret nz
	ld a, BATTLE_VARS_STATUS_OPP
	call _GetBattleVar
	set 4, [hl]
	call UpdateOpponentInParty
	ld hl, Function3ec76
	call CallBattleCore
	ld de, $0105
	call Function0x37e54
	call RefreshBattleHuds

	ld hl, WasBurnedText
	call StdBattleTextBox

	callba Function3dde9
	ret
; 360dd


Defrost: ; 360dd
	ld a, [hl]
	and $20
	ret z

	xor a
	ld [hl], a

	ld a, [hBattleTurn]
	and a
	ld a, [CurOTMon]
	ld hl, OTPartyMon1Status
	jr z, .ok
	ld hl, PartyMon1Status
	ld a, [CurBattleMon]
.ok

	call GetPartyLocation
	xor a
	ld [hl], a
	call UpdateOpponentInParty

	ld hl, DefrostedOpponentText
	jp StdBattleTextBox
; 36102


BattleCommand18: ; 36102
; freezetarget

	xor a
	ld [$cfca], a
	call CheckSubstituteOpp
	ret nz
	ld a, BATTLE_VARS_STATUS_OPP
	call _GetBattleVar
	and a
	ret nz
	ld a, [TypeModifier]
	and $7f
	ret z
	ld a, [Weather]
	cp $2
	ret z
	call Function0x36e5b
	ret z
	call GetOpponentItem
	ld a, b
	cp $16
	ret z
	ld a, [EffectFailed]
	and a
	ret nz
	call Function0x37962
	ret nz
	ld a, BATTLE_VARS_STATUS_OPP
	call _GetBattleVar
	set 5, [hl]
	call UpdateOpponentInParty
	ld de, $0108
	call Function0x37e54
	call RefreshBattleHuds

	ld hl, WasFrozenText
	call StdBattleTextBox

	callba Function3dde9
	ret nz
	call Function0x34216
	call EndRechargeOpp
	ld hl, $c740
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36162 ; 3615d $3
	ld hl, $c73f
.asm_36162
	ld [hl], $1
	ret
; 36165


BattleCommand19: ; 36165
; paralyzetarget

	xor a
	ld [$cfca], a
	call CheckSubstituteOpp
	ret nz
	ld a, BATTLE_VARS_STATUS_OPP
	call _GetBattleVar
	and a
	ret nz
	ld a, [TypeModifier]
	and $7f
	ret z
	call GetOpponentItem
	ld a, b
	cp $18
	ret z
	ld a, [EffectFailed]
	and a
	ret nz
	call Function0x37962
	ret nz
	ld a, BATTLE_VARS_STATUS_OPP
	call _GetBattleVar
	set 6, [hl]
	call UpdateOpponentInParty
	ld hl, Function3ec39
	call CallBattleCore
	ld de, $0109
	call Function0x37e54
	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 Function0x361ef
	ld a, [FailedMessage]
	and a
	ret nz
	jp Function0x36281
; 361ef


Function0x361ef: ; 361ef
	ld a, b
	ld [LoweredStat], a
	ld hl, PlayerStatLevels
	ld a, [hBattleTurn]
	and a
	jr z, .asm_361fe ; 0x361f9 $3
	ld hl, EnemyStatLevels
.asm_361fe
	ld a, [AttackMissed]
	and a
	jp nz, Function0x3627b
	ld a, [EffectFailed]
	and a
	jp nz, Function0x3627b
	ld a, [LoweredStat]
	and $f
	ld c, a
	ld b, $0
	add hl, bc
	ld b, [hl]
	inc b
	ld a, $d
	cp b
	jp c, Function0x36270
	ld a, [LoweredStat]
	and $f0
	jr z, .asm_3622b ; 0x36222 $7
	inc b
	ld a, $d
	cp b
	jr nc, .asm_3622b ; 0x36228 $1
	ld b, a
.asm_3622b
	ld [hl], b
	push hl
	ld a, c
	cp $5
	jr nc, .asm_36268 ; 0x36230 $36
	ld hl, $c641
	ld de, PlayerStats
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36243 ; 0x3623b $6
	ld hl, $d21b
	ld de, EnemyStats
.asm_36243
	push bc
	sla c
	ld b, $0
	add hl, bc
	ld a, c
	add e
	ld e, a
	jr nc, .asm_3624f ; 0x3624c $1
	inc d
.asm_3624f
	pop bc
	ld a, [hld]
	sub $e7
	jr nz, .asm_3625b ; 0x36253 $6
	ld a, [hl]
	sbc $3
	jp z, Function0x3626e
.asm_3625b
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36265 ; 0x3625e $5
	call Function0x365fd
	jr .asm_36268 ; 0x36263 $3
.asm_36265
	call Function0x365d7
.asm_36268
	pop hl
	xor a
	ld [FailedMessage], a
	ret
; 3626e


Function0x3626e: ; 3626e
	pop hl
	dec [hl]
	; fallthrough
; 36270


Function0x36270: ; 36270
	ld a, $2
	ld [FailedMessage], a
	ld a, $1
	ld [AttackMissed], a
	ret
; 3627b


Function0x3627b: ; 3627b
	ld a, $1
	ld [FailedMessage], a
	ret
; 36281


Function0x36281: ; 36281
	ld bc, $c6fe
	ld hl, $7447
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36292 ; 0x3628a $6
	ld bc, $c6fa
	ld hl, $7486
.asm_36292
	ld a, $c
	call GetBattleVar
	cp $6b
	ret nz
	ld a, $1
	ld [bc], a
	call Function0x37ed5
	ret nc
	xor a
	ld [$ffd4], a
	call 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 Function0x36391
	jp nz, .Mist

	ld hl, EnemyStatLevels
	ld a, [hBattleTurn]
	and a
	jr z, .GetStatLevel
	ld hl, PlayerStatLevels

.GetStatLevel
; Attempt to lower the stat.
	ld a, [LoweredStat]
	and $f
	ld c, a
	ld b, 0
	add hl, bc
	ld b, [hl]
	dec b
	jp z, .CantLower

; Sharply lower the stat if applicable.
	ld a, [LoweredStat]
	and $f0
	jr z, .ComputerMiss
	dec b
	jr nz, .ComputerMiss
	inc b

.ComputerMiss
; Computer opponents have a 1/4 chance of failing.
	ld a, [hBattleTurn]
	and a
	jr z, .DidntMiss
	ld a, [InLinkBattle]
	and a
	jr nz, .DidntMiss

	ld a, [$cfc0]
	and a
	jr nz, .DidntMiss

; Lock-On still always works.
	ld a, [PlayerSubStatus5]
	bit SUBSTATUS_LOCK_ON, a
	jr nz, .DidntMiss

; Attacking moves that also lower accuracy are unaffected.
	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	cp EFFECT_ACCURACY_DOWN_HIT
	jr z, .DidntMiss

	call BattleRandom
	cp $40
	jr c, .Failed

.DidntMiss
	call CheckSubstituteOpp
	jr nz, .Failed

	ld a, [AttackMissed]
	and a
	jr nz, .Failed

	ld a, [EffectFailed]
	and a
	jr nz, .Failed

	call CheckHiddenOpponent
	jr nz, .Failed

; Accuracy/Evasion reduction don't involve stats.
	ld [hl], b
	ld a, c
	cp ACCURACY
	jr nc, .Hit

	push hl
	ld hl, EnemyMonAtk + 1
	ld de, EnemyStats
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36366
	ld hl, BattleMonAtk + 1
	ld de, PlayerStats
.asm_36366
	call Function0x3641a
	pop hl
	jr z, .CouldntLower

.Hit
	xor a
	ld [FailedMessage], a
	ret

.CouldntLower
	inc [hl]
.CantLower
	ld a, 3
	ld [FailedMessage], a
	ld a, 1
	ld [AttackMissed], a
	ret

.Failed
	ld a, 1
	ld [FailedMessage], a
	ld [AttackMissed], a
	ret

.Mist
	ld a, 2
	ld [FailedMessage], a
	ld a, 1
	ld [AttackMissed], a
	ret
; 36391


Function0x36391: ; 36391
	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	cp EFFECT_ATTACK_DOWN
	jr c, .asm_363ae
	cp EFFECT_EVASION_DOWN + 1
	jr c, .asm_363b0
	cp EFFECT_ATTACK_DOWN_2
	jr c, .asm_363ae
	cp EFFECT_EVASION_DOWN_2 + 1
	jr c, .asm_363b0
	cp EFFECT_ATTACK_DOWN_HIT
	jr c, .asm_363ae
	cp EFFECT_EVASION_DOWN_HIT + 1
	jr c, .asm_363b0
.asm_363ae
	xor a
	ret
.asm_363b0
	ld a, BATTLE_VARS_SUBSTATUS4_OPP
	call GetBattleVar
	bit SUBSTATUS_MIST, a
	ret
; 363b8


BattleCommand8c: ; 363b8
	ld a, [FailedMessage]
	and a
	ret nz
	ld a, [LoweredStat]
	and $f
	ld b, a
	inc b
	call GetStatName
	ld hl, .stat
	jp BattleTextBox

.stat
	TX_FAR UnknownText_0x1c0cc6
	start_asm

	ld hl, .up
	ld a, [LoweredStat]
	and $f0
	ret z
	ld hl, .wayup
	ret

.wayup
	TX_FAR UnknownText_0x1c0cd0
	db "@"

.up
	TX_FAR UnknownText_0x1c0ce0
	db "@"

; 363e9


BattleCommand8d: ; 363e9
	ld a, [FailedMessage]
	and a
	ret nz
	ld a, [LoweredStat]
	and $f
	ld b, a
	inc b
	call GetStatName
	ld hl, .stat
	jp BattleTextBox

.stat
	TX_FAR UnknownText_0x1c0ceb
	start_asm

	ld hl, .fell
	ld a, [LoweredStat]
	and $f0
	ret z
	ld hl, .sharplyfell
	ret

.sharplyfell
	TX_FAR UnknownText_0x1c0cf5
	db "@"
.fell
	TX_FAR UnknownText_0x1c0d06
	db "@"

; 3641a


Function0x3641a: ; 3641a
; Lower stat c from stat struct hl (buffer de).

	push bc
	sla c
	ld b, 0
	add hl, bc
	; add de, c
	ld a, c
	add e
	ld e, a
	jr nc, .asm_36426
	inc d
.asm_36426
	pop bc

; The lowest possible stat is 1.
	ld a, [hld]
	sub 1
	jr nz, .asm_3642f
	ld a, [hl]
	and a
	ret z

.asm_3642f
	ld a, [hBattleTurn]
	and a
	jr z, .Player

	call SwitchTurn
	call Function0x365d7
	call SwitchTurn
	jr .end

.Player
	call SwitchTurn
	call Function0x365fd
	call SwitchTurn
.end
	ld a, 1
	and a
	ret
; 3644c


BattleCommand8e: ; 3644c
; statupfailtext
	ld a, [FailedMessage]
	and a
	ret z
	push af
	call BattleCommandaa
	pop af
	dec a
	jp z, TryPrintButItFailed
	ld a, [LoweredStat]
	and $f
	ld b, a
	inc b
	call GetStatName
	ld hl, WontRiseAnymoreText
	jp StdBattleTextBox
; 3646a


BattleCommand8f: ; 3646a
; statdownfailtext
	ld a, [FailedMessage]
	and a
	ret z
	push af
	call BattleCommandaa
	pop af
	dec a
	jp z, TryPrintButItFailed
	dec a
	ld hl, ProtectedByMistText
	jp z, StdBattleTextBox
	ld a, [LoweredStat]
	and $f
	ld b, a
	inc b
	call GetStatName
	ld hl, WontDropAnymoreText
	jp StdBattleTextBox
; 3648f


GetStatName: ; 3648f
	ld hl, .names
	ld c, "@"
.CheckName
	dec b
	jr z, .Copy
.GetName
	ld a, [hli]
	cp c
	jr z, .CheckName
	jr .GetName
.Copy
	ld de, StringBuffer2
	ld bc, StringBuffer3 - StringBuffer2
	jp CopyBytes

.names
	db "ATTACK@"
	db "DEFENSE@"
	db "SPEED@"
	db "SPCL.ATK@"
	db "SPCL.DEF@"
	db "ACCURACY@"
	db "EVASION@"
	db "ABILITY@"
; 364e6


Table0x364e6: ; 364e6
	db 25, 100
	db 28, 100
	db 33, 100
	db 40, 100
	db 50, 100
	db 66, 100
; 364f2


StatLevelMulipliers: ; 364f2
	db  1,  1 ; 1.0x
	db 15, 10 ; 1.5x
	db  2,  1 ; 2.0x
	db 25, 10 ; 2.5x
	db  3,  1 ; 3.0x
	db 35, 10 ; 3.5x
	db  4,  1 ; 4.0x
; 36500


BattleCommanda4: ; 36500
; allstatsup

; Attack
	call ResetMiss
	call BattleCommand70
	call BattleCommand8c

; Defense
	call ResetMiss
	call BattleCommand71
	call BattleCommand8c

; Speed
	call ResetMiss
	call BattleCommand72
	call BattleCommand8c

; Special Attack
	call ResetMiss
	call BattleCommand73
	call BattleCommand8c

; Special Defense
	call ResetMiss
	call BattleCommand74
	jp   BattleCommand8c
; 3652d


ResetMiss: ; 3652d
	xor a
	ld [AttackMissed], a
	ret
; 36532


Function0x36532: ; 36532
	ld [LoweredStat], a

	ld hl, PlayerStatLevels
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36540
	ld hl, EnemyStatLevels

.asm_36540
	ld a, [LoweredStat]
	and $f
	ld c, a
	ld b, 0
	add hl, bc
	ld b, [hl]
	dec b
	jr z, .asm_36589

	ld a, [LoweredStat]
	and $f0
	jr z, .asm_36558
	dec b
	jr nz, .asm_36558
	inc b

.asm_36558
	ld [hl], b
	ld a, c
	cp 5
	jr nc, .asm_36576

	push hl
	ld hl, $c641
	ld de, PlayerStats
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36570
	ld hl, $d21b
	ld de, EnemyStats

.asm_36570
	call Function0x3641a
	pop hl
	jr z, .asm_36588

.asm_36576
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36580

	call Function0x365fd

	jr .asm_36583

.asm_36580
	call Function0x365d7

.asm_36583
	xor a
	ld [FailedMessage], a
	ret

.asm_36588
	inc [hl]

.asm_36589
	ld a, 2
	ld [FailedMessage], a
	ret
; 3658f


BattleCommandac: ; 3658f
; tristatuschance

	call BattleCommand90

; 1/3 chance of each status
.loop
	call BattleRandom
	swap a
	and 3
	jr z, .loop
; jump
	dec a
	ld hl, .ptrs
	rst JumpTable
	ret
.ptrs
	dw BattleCommand19 ; paralyze
	dw BattleCommand18 ; freeze
	dw BattleCommand17 ; burn
; 365a7


BattleCommandaf: ; 365a7
; curl
	ld a, BATTLE_VARS_SUBSTATUS2
	call _GetBattleVar
	set 0, [hl]
	ret
; 365af


BattleCommanda6: ; 365af
	ld hl, $743d
	ld a, [hBattleTurn]
	and a
	jr z, .asm_365ba ; 365b5 $3
	ld hl, $747c
.asm_365ba
	xor a
	ld [$ffd4], a
	call CallBattleCore
	jp WaitBGMap
; 365c3


BattleCommanda7: ; 365c3
	ld hl, $7447
	ld a, [hBattleTurn]
	and a
	jr z, .asm_365ce ; 365c9 $3
	ld hl, $7486
.asm_365ce
	xor a
	ld [$ffd4], a
	call CallBattleCore
	jp WaitBGMap
; 365d7


Function0x365d7: ; 365d7
	ld hl, PlayerAtkLevel
	ld de, PlayerStats
	ld bc, BattleMonAtk

	ld a, $5
	call Function0x3661d

	ld hl, BadgeStatBoosts
	call CallBattleCore

	call SwitchTurn

	ld hl, Function3ec39
	call CallBattleCore

	ld hl, Function3ec76
	call CallBattleCore

	jp SwitchTurn
; 365fd


Function0x365fd: ; 365fd
	ld hl, EnemyAtkLevel
	ld de, EnemyStats
	ld bc, EnemyMonAtk

	ld a, $5
	call Function0x3661d

	call SwitchTurn

	ld hl, Function3ec39
	call CallBattleCore

	ld hl, Function3ec76
	call CallBattleCore

	jp SwitchTurn
; 3661d


Function0x3661d: ; 3661d
.asm_3661d
	push af
	ld a, [hli]
	push hl
	push bc

	ld c, a
	dec c
	ld b, 0
	ld hl, Table0x364e6
	add hl, bc
	add hl, bc

	xor a
	ld [hMultiplicand], a
	ld a, [de]
	ld [hMultiplicand + 1], a
	inc de
	ld a, [de]
	ld [hMultiplicand + 2], a
	inc de

	ld a, [hli]
	ld [hMultiplier], a
	call Multiply

	ld a, [hl]
	ld [hDivisor], a
	ld b, 4
	call Divide

	ld a, [hQuotient + 1]
	ld b, a
	ld a, [hQuotient + 2]
	or b
	jr nz, .asm_36651

	ld a, 1
	ld [hQuotient + 2], a
	jr .asm_36662

.asm_36651
	ld a, [hQuotient + 2]
	cp 999 % $100
	ld a, b
	sbc 999 / $100
	jr c, .asm_36662

	ld a, 999 % $100
	ld [$ffb6], a
	ld a, 999 / $100
	ld [$ffb5], a

.asm_36662
	pop bc
	ld a, [$ffb5]
	ld [bc], a
	inc bc
	ld a, [$ffb6]
	ld [bc], a
	inc bc
	pop hl
	pop af
	dec a
	jr nz, .asm_3661d

	ret
; 36671


BattleCommand21: ; 36671
; storeenergy

	ld a, BATTLE_VARS_SUBSTATUS3
	call GetBattleVar
	bit 0, a
	ret z
	ld hl, PlayerRolloutCount
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36684
	ld hl, EnemyRolloutCount
.asm_36684
	dec [hl]
	jr nz, .asm_366dc
	ld a, BATTLE_VARS_SUBSTATUS3
	call _GetBattleVar
	res 0, [hl]

	ld hl, UnleashedEnergyText
	call StdBattleTextBox

	ld a, BATTLE_VARS_MOVE_POWER
	call _GetBattleVar
	ld a, 1
	ld [hl], a
	ld hl, PlayerDamageTaken + 1
	ld de, $c732
	ld a, [hBattleTurn]
	and a
	jr z, .asm_366ad
	ld hl, EnemyDamageTaken + 1
	ld de, $c733
.asm_366ad
	ld a, [hld]
	add a
	ld b, a
	ld [CurDamage + 1], a
	ld a, [hl]
	rl a
	ld [CurDamage], a
	jr nc, .asm_366c3
	ld a, $ff
	ld [CurDamage], a
	ld [CurDamage + 1], a
.asm_366c3
	or b
	jr nz, .asm_366cb
	ld a, 1
	ld [AttackMissed], a
.asm_366cb
	xor a
	ld [hli], a
	ld [hl], a
	ld [de], a

	ld a, BATTLE_VARS_MOVE_ANIM
	call _GetBattleVar
	ld a, BIDE
	ld [hl], a

	ld b, $22 ; unleashenergy
	jp SkipToBattleCommand

.asm_366dc
	ld hl, StoringEnergyText
	call StdBattleTextBox
	jp EndMoveEffect
; 366e5


BattleCommand22: ; 366e5
; unleashenergy

	ld de, $c682
	ld bc, PlayerRolloutCount
	ld a, [hBattleTurn]
	and a
	jr z, .asm_366f6 ; 366ee $6
	ld de, $c684
	ld bc, EnemyRolloutCount
.asm_366f6
	ld a, BATTLE_VARS_SUBSTATUS3
	call _GetBattleVar
	set 0, [hl]
	xor a
	ld [de], a
	inc de
	ld [de], a
	ld [PlayerMoveEffect], a
	ld [EnemyMoveEffect], a
	call BattleRandom
	and $1
	inc a
	inc a
	ld [bc], a
	ld a, $1
	ld [$c689], a
	call Function0x37e01
	jp EndMoveEffect
; 3671a


BattleCommand3e: ; 3671a
; checkrampage

	ld de, PlayerRolloutCount
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36725 ; 36720 $3
	ld de, EnemyRolloutCount
.asm_36725
	ld a, BATTLE_VARS_SUBSTATUS3
	call _GetBattleVar
	bit 1, [hl]
	ret z
	ld a, [de]
	dec a
	ld [de], a
	jr nz, .asm_3674c ; 36730 $1a
	res 1, [hl]
	call SwitchTurn
	call Function0x37962
	push af
	call SwitchTurn
	pop af
	jr nz, .asm_3674c ; 3673f $b
	set 7, [hl]
	call BattleRandom
	and $1
	inc a
	inc a
	inc de
	ld [de], a
.asm_3674c
	ld b, $3d ; rampage
	jp SkipToBattleCommand
; 36751


BattleCommand3d: ; 36751
; rampage

; No rampage during Sleep Talk.
	ld a, BATTLE_VARS_STATUS
	call GetBattleVar
	and 7
	ret nz

	ld de, PlayerRolloutCount
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36764 ; 3675f $3
	ld de, EnemyRolloutCount
.asm_36764
	ld a, BATTLE_VARS_SUBSTATUS3
	call _GetBattleVar
	set 1, [hl]
	call BattleRandom
	and $1
	inc a
	ld [de], a
	ld a, 1
	ld [$c73e], a
	ret
; 36778


BattleCommanda0: ; 36778
; teleport

	ld a, [BattleType]
	cp BATTLETYPE_SHINY
	jr z, .asm_367b9
	cp $9
	jr z, .asm_367b9
	cp $b
	jr z, .asm_367b9
	cp BATTLETYPE_SUICUNE
	jr z, .asm_367b9

	ld a, BATTLE_VARS_SUBSTATUS5_OPP
	call GetBattleVar
	bit SUBSTATUS_CANT_RUN, a
	jr nz, .asm_367b9
	ld a, [hBattleTurn]
	and a
	jr nz, .asm_367bf
	ld a, [IsInBattle]
	dec a
	jr nz, .asm_367b9
	ld a, [$d143]
	ld b, a
	ld a, [BattleMonLevel]
	cp b
	jr nc, .asm_367df
	add b
	ld c, a
	inc c
.asm_367ac
	call BattleRandom
	cp c
	jr nc, .asm_367ac ; 367b0 $fa
	srl b
	srl b
	cp b
	jr nc, .asm_367df ; 367b7 $26

.asm_367b9
	call Function0x37e77
	jp PrintButItFailed

.asm_367bf
	ld a, [IsInBattle]
	dec a
	jr nz, .asm_367b9 ; 367c3 $f4
	ld a, [BattleMonLevel]
	ld b, a
	ld a, [$d143]
	cp b
	jr nc, .asm_367df ; 367cd $10
	add b
	ld c, a
	inc c
.asm_367d2
	call BattleRandom
	cp c
	jr nc, .asm_367d2 ; 367d6 $fa
	srl b
	srl b
	cp b
	jr nc, .asm_367df ; 367dd $0
.asm_367df
	call UpdateBattleMonInParty
	xor a
	ld [$cfca], a
	inc a
	ld [$d232], a
	ld [$c689], a
	call Function0x36804
	call BattleCommand0a
	call Function0x37e36
	ld c, 20
	call DelayFrames
	call Function0x36804

	ld hl, FledFromBattleText
	jp StdBattleTextBox
; 36804


Function0x36804: ; 36804
	ld a, [$d0ee]
	and $c0
	or $2
	ld [$d0ee], a
	ret
; 3680f


BattleCommand23: ; 3680f
; forceswitch

	ld a, [BattleType]
	cp BATTLETYPE_SHINY
	jp z, .asm_36969
	cp $9
	jp z, .asm_36969
	cp $b
	jp z, .asm_36969
	cp BATTLETYPE_SUICUNE
	jp z, .asm_36969
	ld a, [hBattleTurn]
	and a
	jp nz, .asm_368cd
	ld a, [AttackMissed]
	and a
	jr nz, .asm_36852 ; 36830 $20
	ld a, [IsInBattle]
	dec a
	jr nz, .asm_36869 ; 36836 $31
	ld a, [$d143]
	ld b, a
	ld a, [BattleMonLevel]
	cp b
	jr nc, .asm_36855 ; 36840 $13
	add b
	ld c, a
	inc c
.asm_36845
	call BattleRandom
	cp c
	jr nc, .asm_36845 ; 36849 $fa
	srl b
	srl b
	cp b
	jr nc, .asm_36855 ; 36850 $3
.asm_36852
	jp .asm_36969
.asm_36855
	call UpdateBattleMonInParty
	xor a
	ld [$cfca], a
	inc a
	ld [$d232], a
	call Function0x36804
	ld a, [PlayerMoveAnimation]
	jp .asm_36975
.asm_36869
	call Function0x349f4
	jr c, .asm_368ca ; 3686c $5c
	ld a, [$c70f]
	and a
	jr z, .asm_368ca ; 36872 $56
	call UpdateEnemyMonInParty
	ld a, $1
	ld [$c689], a
	call Function0x37e01
	ld c, $14
	call DelayFrames
	ld hl, $c4a1
	ld bc, $040a
	call ClearBox
	ld c, $14
	call DelayFrames
	ld a, [OTPartyCount]
	ld b, a
	ld a, [CurOTMon]
	ld c, a
.asm_3689a
	call BattleRandom
	and $7
	cp b
	jr nc, .asm_3689a ; 368a0 $f8
	cp c
	jr z, .asm_3689a ; 368a3 $f5
	push af
	push bc
	ld hl, OTPartyMon1CurHP
	call GetPartyLocation
	ld a, [hli]
	or [hl]
	pop bc
	pop de
	jr z, .asm_3689a ; 368b1 $e7
	ld a, d
	inc a
	ld [$c718], a
	callab Function3d4c3

	ld hl, DraggedOutText
	call StdBattleTextBox

	ld hl, Function3dc23
	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 Function0x36804
	ld a, [EnemyMoveAnimation]
	jr .asm_36975

.asm_36908
	call Function0x36994
	jr c, .asm_36969

	ld a, [$c70f]
	cp $1
	jr z, .asm_368ca

	call UpdateBattleMonInParty
	ld a, $1
	ld [$c689], a
	call Function0x37e01
	ld c, $14
	call DelayFrames
	ld hl, $c535
	ld bc, $050b
	call 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, PartyMon1CurHP
	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, Function3dc23
	jp CallBattleCore

.asm_36969
	call BattleCommand0a
	call BattleCommandaa
	call BattleCommand0c
	jp PrintButItFailed

.asm_36975
	push af
	call Function0x36804
	ld a, $1
	ld [$c689], a
	call Function0x37e01
	ld c, $14
	call DelayFrames
	pop af

	ld hl, FledInFearText
	cp $2e
	jr z, .asm_36991
	ld hl, BlownAwayText
.asm_36991
	jp StdBattleTextBox
; 36994


Function0x36994: ; 36994
	ld a, [PartyCount]
	ld d, a
	ld e, 0
	ld bc, $30
.asm_3699d
	ld a, [CurBattleMon]
	cp e
	jr z, .asm_369ae

	ld a, e
	ld hl, PartyMon1CurHP
	call AddNTimes
	ld a, [hli]
	or [hl]
	jr nz, .asm_369b4

.asm_369ae
	inc e
	dec d
	jr nz, .asm_3699d

	scf
	ret

.asm_369b4
	and a
	ret
; 369b6


BattleCommand24: ; 369b6
; endloop

; Loop back to the command before 'critical'.

	ld de, PlayerRolloutCount
	ld bc, $c682
	ld a, [hBattleTurn]
	and a
	jr z, .asm_369c7
	ld de, EnemyRolloutCount
	ld bc, $c684
.asm_369c7

	ld a, BATTLE_VARS_SUBSTATUS3
	call _GetBattleVar
	bit 2, [hl]
	jp nz, .asm_36a43
	set 2, [hl]
	ld a, BATTLE_VARS_MOVE_EFFECT
	call _GetBattleVar
	ld a, [hl]
	cp EFFECT_TWINEEDLE
	jr z, .asm_36a3f
	cp EFFECT_DOUBLE_HIT
	ld a, $1
	jr z, .asm_36a3a
	ld a, [hl]
	cp EFFECT_BEAT_UP
	jr z, .asm_369fb
	cp EFFECT_TRIPLE_KICK
	jr nz, .asm_36a2b
.asm_369ec
	call BattleRandom
	and $3
	jr z, .asm_369ec
	dec a
	jr nz, .asm_36a3a
	ld a, $1
	ld [bc], a
	jr .asm_36a48
.asm_369fb
	ld a, [hBattleTurn]
	and a
	jr nz, .asm_36a0b
	ld a, [PartyCount]
	cp $1
	jp z, .asm_36a1e
	dec a
	jr .asm_36a3a
.asm_36a0b
	ld a, [IsInBattle]
	cp $1
	jp z, .asm_36a1e
	ld a, [OTPartyCount]
	cp $1
	jp z, .asm_36a1e
	dec a
	jr .asm_36a3a

.asm_36a1e
	ld a, BATTLE_VARS_SUBSTATUS3
	call _GetBattleVar
	res 2, [hl]
	call BattleCommanda8
	jp EndMoveEffect
.asm_36a2b
	call BattleRandom
	and $3
	cp $2
	jr c, .asm_36a39 ; 36a32 $5
	call BattleRandom
	and $3
.asm_36a39
	inc a
.asm_36a3a
	ld [de], a
	inc a
	ld [bc], a
	jr .asm_36a6b ; 36a3d $2c
.asm_36a3f
	ld a, $1
	jr .asm_36a3a ; 36a41 $f7

.asm_36a43
	ld a, [de]
	dec a
	ld [de], a
	jr nz, .asm_36a6b ; 36a46 $23
.asm_36a48
	ld a, BATTLE_VARS_SUBSTATUS3
	call _GetBattleVar
	res 2, [hl]

	ld hl, PlayerHitTimesText
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36a5a
	ld hl, EnemyHitTimesText
.asm_36a5a

	push bc
	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	cp EFFECT_BEAT_UP
	jr z, .asm_36a67
	call StdBattleTextBox
.asm_36a67

	pop bc
	xor a
	ld [bc], a
	ret

; Loop back to the command before 'critical'.
.asm_36a6b
	ld a, [BattleScriptBufferLoc + 1]
	ld h, a
	ld a, [BattleScriptBufferLoc]
	ld l, a
.asm_36a73
	ld a, [hld]
	cp $5 ; critical
	jr nz, .asm_36a73 ; 36a76 $fb
	inc hl
	ld a, h
	ld [BattleScriptBufferLoc + 1], a
	ld a, l
	ld [BattleScriptBufferLoc], a
	ret
; 36a82


BattleCommand94: ; 36a82
	ld a, [AttackMissed]
	and a
	ret nz
	call CheckSubstituteOpp
	jr nz, .asm_36a9a ; 36a8a $e
	ld a, BATTLE_VARS_STATUS_OPP
	call GetBattleVar
	and $27
	jr nz, .asm_36a9a ; 36a93 $5
	call Function0x36abf
	jr z, Function0x36ab5 ; 36a98 $1b
.asm_36a9a
	ld a, 1
	ld [AttackMissed], a
	ret
; 36aa0


BattleCommand25: ; 36aa0
	call CheckSubstituteOpp
	ret nz
	ld a, BATTLE_VARS_STATUS_OPP
	call GetBattleVar
	and $27
	ret nz
	call Function0x36abf
	ret nz
	ld a, [EffectFailed]
	and a
	ret nz

	; fallthrough
; 36ab5


Function0x36ab5: ; 36ab5
	ld a, BATTLE_VARS_SUBSTATUS3_OPP
	call _GetBattleVar
	set 3, [hl]
	jp EndRechargeOpp
; 36abf


Function0x36abf: ; 36abf
	push bc
	ld a, [$c70f]
	ld b, a
	ld a, [hBattleTurn]
	xor b
	pop bc
	ret
; 36ac9


BattleCommand4d: ; 36ac9
; kingsrock

	ld a, [AttackMissed]
	and a
	ret nz

	call GetUserItem
	ld a, b
	cp $4b ; king's rock
	ret nz

	call CheckSubstituteOpp
	ret nz
	ld a, BATTLE_VARS_MOVE_EFFECT
	call _GetBattleVar
	ld d, h
	ld e, l
	call GetUserItem
	call BattleRandom
	cp c
	ret nc
	call EndRechargeOpp
	ld a, BATTLE_VARS_SUBSTATUS3_OPP
	call _GetBattleVar
	set 3, [hl]
	ret
; 36af3


BattleCommand26: ; 36af3
; ohko

	call ResetDamage
	ld a, [TypeModifier]
	and $7f
	jr z, .asm_36b2f ; 36afb $32
	ld hl, EnemyMonLevel
	ld de, BattleMonLevel
	ld bc, PlayerMoveAccuracy
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36b12 ; 36b09 $7
	push hl
	ld h, d
	ld l, e
	pop de
	ld bc, EnemyMoveAccuracy
.asm_36b12
	ld a, [de]
	sub [hl]
	jr c, .asm_36b2f ; 36b14 $19
	add a
	ld e, a
	ld a, [bc]
	add e
	jr nc, .asm_36b1e ; 36b1a $2
	ld a, $ff
.asm_36b1e
	ld [bc], a
	call BattleCommand09
	ld hl, CurDamage
	ld a, $ff
	ld [hli], a
	ld [hl], a
	ld a, $2
	ld [CriticalHit], a
	ret
.asm_36b2f
	ld a, $ff
	ld [CriticalHit], a
	ld a, $1
	ld [AttackMissed], a
	ret
; 36b3a


BattleCommand3a: ; 36b3a
; checkcharge

; charged?
	ld a, BATTLE_VARS_SUBSTATUS3
	call _GetBattleVar
	bit 4, [hl]
	ret z
; go to town
	res 4, [hl]
	res 5, [hl]
	res 6, [hl]
	ld b, $39 ; charge
	jp SkipToBattleCommand
; 36b4d


BattleCommand39: ; 36b4d
; charge

	call BattleCommand38
	ld a, BATTLE_VARS_STATUS
	call GetBattleVar
	and $7
	jr z, .asm_36b65

	call BattleCommandaa
	call BattleCommand0c
	call PrintButItFailed
	jp EndMoveEffect

.asm_36b65
	ld a, BATTLE_VARS_SUBSTATUS3
	call _GetBattleVar
	set 4, [hl]

	ld hl, IgnoredOrders2Text
	ld a, [AlreadyDisobeyed]
	and a
	call nz, StdBattleTextBox

	call BattleCommand0a
	xor a
	ld [$cfca], a
	inc a
	ld [$c689], a
	call Function0x37e36
	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar
	cp $13
	jr z, .asm_36b96 ; 36b8b $9
	cp $5b
	jr z, .asm_36b96 ; 36b8f $5
	call BattleCommand0c
	jr .asm_36b99 ; 36b94 $3
.asm_36b96
	call Function0x37ec0
.asm_36b99
	ld a, BATTLE_VARS_SUBSTATUS3
	call _GetBattleVar
	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar
	ld b, a
	cp $13
	jr z, .asm_36bb0 ; 36ba6 $8
	cp $5b
	jr nz, .asm_36bb2 ; 36baa $6
	set 5, [hl]
	jr .asm_36bb2 ; 36bae $2

.asm_36bb0
	set 6, [hl]

.asm_36bb2
	call Function0x34548
	jr nz, .asm_36bc3 ; 36bb5 $c
	ld a, BATTLE_VARS_LAST_COUNTER_MOVE
	call _GetBattleVar
	ld [hl], b
	ld a, BATTLE_VARS_LAST_MOVE
	call _GetBattleVar
	ld [hl], b

.asm_36bc3
	call ResetDamage

	ld hl, .text_36bdb
	call BattleTextBox

	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	cp EFFECT_SKULL_BASH
	ld b, $fe ; endturn
	jp z, SkipToBattleCommand
	jp EndMoveEffect

.text_36bdb
; [user]
	TX_FAR UnknownText_0x1c0d0e
	start_asm

	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar
	cp RAZOR_WIND
	ld hl, .RazorWind
	jr z, .asm_36c0d

	cp SOLARBEAM
	ld hl, .Solarbeam
	jr z, .asm_36c0d

	cp SKULL_BASH
	ld hl, .SkullBash
	jr z, .asm_36c0d

	cp SKY_ATTACK
	ld hl, .SkyAttack
	jr z, .asm_36c0d

	cp FLY
	ld hl, .Fly
	jr z, .asm_36c0d

	cp DIG
	ld hl, .Dig

.asm_36c0d
	ret

.RazorWind
; 'made a whirlwind!'
	TX_FAR UnknownText_0x1c0d12
	db "@"

.Solarbeam
; 'took in sunlight!'
	TX_FAR UnknownText_0x1c0d26
	db "@"

.SkullBash
; 'lowered its head!'
	TX_FAR UnknownText_0x1c0d3a
	db "@"

.SkyAttack
; 'is glowing!'
	TX_FAR UnknownText_0x1c0d4e
	db "@"

.Fly
; 'flew up high!'
	TX_FAR UnknownText_0x1c0d5c
	db "@"

.Dig
; 'dug a hole!'
	TX_FAR UnknownText_0x1c0d6c
	db "@"
; 36c2c


BattleCommand3c: ; 36c2c
; unused
	ret
; 36c2d


BattleCommand3b: ; 36c2d
; traptarget

	ld a, [AttackMissed]
	and a
	ret nz
	ld hl, $c731
	ld de, $c72f
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36c43
	ld hl, $c730
	ld de, $c72e

.asm_36c43
	ld a, [hl]
	and a
	ret nz
	ld a, BATTLE_VARS_SUBSTATUS4_OPP
	call GetBattleVar
	bit 4, a
	ret nz
	call BattleRandom
	and 3
	inc a
	inc a
	inc a
	ld [hl], a
	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar
	ld [de], a
	ld b, a
	ld hl, .Traps

.asm_36c61
	ld a, [hli]
	cp b
	jr z, .asm_36c69
	inc hl
	inc hl
	jr .asm_36c61

.asm_36c69
	ld a, [hli]
	ld h, [hl]
	ld l, a
	jp StdBattleTextBox

.Traps
	dbw BIND,      UsedBindText      ; 'used BIND on'
	dbw WRAP,      WrappedByText     ; 'was WRAPPED by'
	dbw FIRE_SPIN, FireSpinTrapText  ; 'was trapped!'
	dbw CLAMP,     ClampedByText     ; 'was CLAMPED by'
	dbw WHIRLPOOL, WhirlpoolTrapText ; 'was trapped!'
; 36c7e


BattleCommand28: ; 36c7e
; mist

	ld a, BATTLE_VARS_SUBSTATUS4
	call _GetBattleVar
	bit 1, [hl]
	jr nz, .asm_36c92 ; 36c85 $b
	set 1, [hl]
	call Function0x37e01
	ld hl, MistText
	jp StdBattleTextBox
.asm_36c92
	call Function0x37e77
	jp PrintButItFailed
; 36c98


BattleCommand29: ; 36c98
; focusenergy

	ld a, BATTLE_VARS_SUBSTATUS4
	call _GetBattleVar
	bit 2, [hl]
	jr nz, .asm_36cac ; 36c9f $b
	set 2, [hl]
	call Function0x37e01
	ld hl, GettingPumpedText
	jp StdBattleTextBox
.asm_36cac
	call Function0x37e77
	jp PrintButItFailed
; 36cb2


BattleCommand27: ; 36cb2
; recoil

	ld hl, BattleMonMaxHP
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36cbd ; 36cb8 $3
	ld hl, EnemyMonMaxHPHi
.asm_36cbd
	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar
	ld d, a
	ld a, [CurDamage]
	ld b, a
	ld a, [CurDamage + 1]
	ld c, a
	srl b
	rr c
	srl b
	rr c
	ld a, b
	or c
	jr nz, .asm_36cd8 ; 36cd5 $1
	inc c
.asm_36cd8
	ld a, [hli]
	ld [$d1eb], a
	ld a, [hl]
	ld [$d1ea], a
	dec hl
	dec hl
	ld a, [hl]
	ld [$d1ec], a
	sub c
	ld [hld], a
	ld [$d1ee], a
	ld a, [hl]
	ld [$d1ed], a
	sbc b
	ld [hl], a
	ld [$d1ef], a
	jr nc, .asm_36cfe ; 36cf4 $8
	xor a
	ld [hli], a
	ld [hl], a
	ld hl, $d1ee
	ld [hli], a
	ld [hl], a
.asm_36cfe
	ld hl, $c55e
	ld a, [hBattleTurn]
	and a
	ld a, $1
	jr z, .asm_36d0c ; 36d06 $4
	ld hl, $c4ca
	xor a
.asm_36d0c
	ld [$d10a], a
	ld a, $b
	call Predef
	call RefreshBattleHuds
	ld hl, RecoilText
	jp StdBattleTextBox
; 36d1d


BattleCommand2b: ; 36d1d
; confusetarget

	call GetOpponentItem
	ld a, b
	cp $19
	ret z
	ld a, [EffectFailed]
	and a
	ret nz
	call Function0x37962
	ret nz
	call CheckSubstituteOpp
	ret nz
	ld a, BATTLE_VARS_SUBSTATUS3_OPP
	call _GetBattleVar
	bit 7, [hl]
	ret nz
	jr Function0x36d70


BattleCommand2a: ; 36d3b
; confuse

	call GetOpponentItem
	ld a, b
	cp $19
	jr nz, .asm_36d53
	ld a, [hl]
	ld [$d265], a
	call GetItemName
	call Function0x37e77
	ld hl, ProtectedByText
	jp StdBattleTextBox

.asm_36d53
	ld a, BATTLE_VARS_SUBSTATUS3_OPP
	call _GetBattleVar
	bit 7, [hl]
	jr z, .asm_36d65
	call Function0x37e77
	ld hl, AlreadyConfusedText
	jp StdBattleTextBox

.asm_36d65
	call CheckSubstituteOpp
	jr nz, Function0x36db6
	ld a, [AttackMissed]
	and a
	jr nz, Function0x36db6

	; fallthrough
; 36d70


Function0x36d70: ; 36d70
	ld bc, EnemyConfuseCount
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36d7b
	ld bc, PlayerConfuseCount

.asm_36d7b
	set 7, [hl]
	call BattleRandom
	and 3
	inc a
	inc a
	ld [bc], a

	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	cp EFFECT_CONFUSE_HIT
	jr z, .asm_36d99
	cp EFFECT_SNORE
	jr z, .asm_36d99
	cp EFFECT_SWAGGER
	jr z, .asm_36d99
	call Function0x37e01

.asm_36d99
	ld de, $0103
	call Function0x37e54

	ld hl, BecameConfusedText
	call StdBattleTextBox

	call GetOpponentItem
	ld a, b
	cp $f
	jr z, .asm_36db0
	cp $10
	ret nz
.asm_36db0
	ld hl, Function3de51
	jp CallBattleCore
; 36db6

Function0x36db6: ; 36db6
	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	cp EFFECT_CONFUSE_HIT
	ret z
	cp EFFECT_SNORE
	ret z
	cp EFFECT_SWAGGER
	ret z
	jp PrintDidntAffect2
; 36dc7


BattleCommand30: ; 36dc7
; paralyze

	ld a, BATTLE_VARS_STATUS_OPP
	call GetBattleVar
	bit 6, a
	jr nz, .asm_36e49 ; 36dce $79
	ld a, [TypeModifier]
	and $7f
	jr z, .asm_36e55 ; 36dd5 $7e
	call GetOpponentItem
	ld a, b
	cp $18
	jr nz, .asm_36def ; 36ddd $10
	ld a, [hl]
	ld [$d265], a
	call GetItemName
	call Function0x37e77
	ld hl, ProtectedByText
	jp StdBattleTextBox
.asm_36def
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36e0e ; 36df2 $1a
	ld a, [InLinkBattle]
	and a
	jr nz, .asm_36e0e ; 36df8 $14
	ld a, [$cfc0]
	and a
	jr nz, .asm_36e0e ; 36dfe $e
	ld a, [PlayerSubStatus5]
	bit 5, a
	jr nz, .asm_36e0e ; 36e05 $7
	call BattleRandom
	cp $40
	jr c, .asm_36e52 ; 36e0c $44
.asm_36e0e
	ld a, BATTLE_VARS_STATUS_OPP
	call _GetBattleVar
	and a
	jr nz, .asm_36e52 ; 36e14 $3c
	ld a, [AttackMissed]
	and a
	jr nz, .asm_36e52 ; 36e1a $36
	call CheckSubstituteOpp
	jr nz, .asm_36e52 ; 36e1f $31
	ld c, $1e
	call DelayFrames
	call Function0x37e01
	ld a, $1
	ld [$ffd4], a
	ld a, BATTLE_VARS_STATUS_OPP
	call _GetBattleVar
	set 6, [hl]
	call UpdateOpponentInParty
	ld hl, Function3ec39
	call CallBattleCore
	call UpdateBattleHuds
	call PrintParalyze
	ld hl, Function3dde9
	jp CallBattleCore
.asm_36e49
	call Function0x37e77
	ld hl, AlreadyParalyzedText
	jp StdBattleTextBox
.asm_36e52
	jp PrintDidntAffect2
.asm_36e55
	call Function0x37e77
	jp PrintDoesntAffect
; 36e5b


Function0x36e5b: ; 36e5b
; Compare move type to user type.
; Return z if matching the user type (unless the move is Normal).

	push hl

	ld hl, EnemyMonType1
	ld a, [hBattleTurn]
	and a
	jr z, .ok
	ld hl, BattleMonType1
.ok

	ld a, BATTLE_VARS_MOVE_TYPE
	call GetBattleVar
	cp NORMAL
	jr z, .normal

	cp [hl]
	jr z, .return

	inc hl
	cp [hl]

.return
	pop hl
	ret

.normal
	ld a, 1
	and a
	pop hl
	ret
; 36e7c


BattleCommand31: ; 36e7c
; substitute

	call BattleCommandaa
	ld hl, BattleMonMaxHP
	ld de, $c6df
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36e90 ; 36e88 $6
	ld hl, EnemyMonMaxHPHi
	ld de, $c6e0
.asm_36e90
	ld a, BATTLE_VARS_SUBSTATUS4
	call GetBattleVar
	bit 4, a
	jr nz, .asm_36ef4 ; 36e97 $5b
	ld a, [hli]
	ld b, [hl]
	srl a
	rr b
	srl a
	rr b
	dec hl
	dec hl
	ld a, b
	ld [de], a
	ld a, [hld]
	sub b
	ld e, a
	ld a, [hl]
	sbc $0
	ld d, a
	jr c, .asm_36eff ; 36eae $4f
	ld a, d
	or e
	jr z, .asm_36eff ; 36eb2 $4b
	ld [hl], d
	inc hl
	ld [hl], e
	ld a, BATTLE_VARS_SUBSTATUS4
	call _GetBattleVar
	set 4, [hl]
	ld hl, $c730
	ld de, $c72e
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36ecf ; 36ec7 $6
	ld hl, $c731
	ld de, $c72f
.asm_36ecf
	xor a
	ld [hl], a
	ld [de], a
	call Function0x37ed5
	jr c, .asm_36ee8 ; 36ed5 $11
	xor a
	ld [$cfca], a
	ld [FXAnimIDHi], a
	ld [$c689], a
	ld a, $a4
	call Function0x37e44
	jr .asm_36eeb ; 36ee6 $3
.asm_36ee8
	call BattleCommanda6
.asm_36eeb
	ld hl, MadeSubstituteText
	call StdBattleTextBox
	jp RefreshBattleHuds
.asm_36ef4
	call Function0x34548
	call nz, BattleCommand0c
	ld hl, HasSubstituteText
	jr .asm_36f08 ; 36efd $9
.asm_36eff
	call Function0x34548
	call nz, BattleCommand0c
	ld hl, TooWeakSubText
.asm_36f08
	jp StdBattleTextBox
; 36f0b

BattleCommand32: ; 36f0b
; rechargenextturn
	ld a, BATTLE_VARS_SUBSTATUS4
	call _GetBattleVar
	set 5, [hl]
	ret
; 36f13


EndRechargeOpp: ; 36f13
	push hl
	ld a, BATTLE_VARS_SUBSTATUS4_OPP
	call _GetBattleVar
	res 5, [hl]
	pop hl
	ret
; 36f1d


BattleCommand97: ; 36f1d
; rage
	ld a, BATTLE_VARS_SUBSTATUS4
	call _GetBattleVar
	set 6, [hl]
	ret
; 36f25


BattleCommand98: ; 36f25
; doubleflyingdamage
	ld a, BATTLE_VARS_SUBSTATUS3_OPP
	call GetBattleVar
	bit SUBSTATUS_FLYING, a
	ret z
	jr DoubleDamage
; 36f2f


BattleCommand99: ; 36f2f
; doubleundergrounddamage
	ld a, BATTLE_VARS_SUBSTATUS3_OPP
	call GetBattleVar
	bit SUBSTATUS_UNDERGROUND, a
	ret z

	; fallthrough
; 36f37


DoubleDamage: ; 36f37
	ld hl, CurDamage + 1
	sla [hl]
	dec hl
	rl [hl]
	jr nc, .quit

	ld a, $ff
	ld [hli], a
	ld [hl], a
.quit
	ret
; 36f46


BattleCommand33: ; 36f46
; mimic

	call Function0x372d8
	call BattleCommandaa
	ld a, [AttackMissed]
	and a
	jr nz, .asm_36f9a ; 36f50 $48
	ld hl, BattleMonMoves
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36f5d ; 36f58 $3
	ld hl, EnemyMonMoves
.asm_36f5d
	call CheckHiddenOpponent
	jr nz, .asm_36f9a ; 36f60 $38
	ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
	call GetBattleVar
	and a
	jr z, .asm_36f9a ; 36f68 $30
	cp $a5
	jr z, .asm_36f9a ; 36f6c $2c
	ld b, a
	ld c, $4
.asm_36f71
	ld a, [hli]
	cp b
	jr z, .asm_36f9a ; 36f73 $25
	dec c
	jr nz, .asm_36f71 ; 36f76 $f9
	dec hl
.asm_36f79
	ld a, [hld]
	cp $66
	jr nz, .asm_36f79 ; 36f7c $fb
	inc hl
	ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
	call GetBattleVar
	ld [hl], a
	ld [$d265], a
	ld bc, $0006
	add hl, bc
	ld [hl], $5
	call GetMoveName
	call Function0x37e01
	ld hl, LearnedMoveText
	jp StdBattleTextBox
.asm_36f9a
	jp Function0x37357
; 36f9d


BattleCommand35: ; 36f9d
; leechseed
	ld a, [AttackMissed]
	and a
	jr nz, .asm_36fd8 ; 36fa1 $35
	call CheckSubstituteOpp
	jr nz, .asm_36fd8 ; 36fa6 $30
	ld de, EnemyMonType1
	ld a, [hBattleTurn]
	and a
	jr z, .asm_36fb3 ; 36fae $3
	ld de, BattleMonType1
.asm_36fb3
	ld a, [de]
	cp $16
	jr z, .asm_36fd2 ; 36fb6 $1a
	inc de
	ld a, [de]
	cp $16
	jr z, .asm_36fd2 ; 36fbc $14
	ld a, BATTLE_VARS_SUBSTATUS4_OPP
	call _GetBattleVar
	bit 7, [hl]
	jr nz, .asm_36fd8 ; 36fc5 $11
	set 7, [hl]
	call Function0x37e01
	ld hl, WasSeededText
	jp StdBattleTextBox
.asm_36fd2
	call Function0x37e77
	jp PrintDoesntAffect
.asm_36fd8
	call Function0x37e77
	ld hl, EvadedText
	jp StdBattleTextBox
; 36fe1


BattleCommand36: ; 36fe1
	call Function0x37e01
	callba Function1060e5
	jp PrintNothingHappened
; 36fed


BattleCommand37: ; 36fed
; disable

	ld a, [AttackMissed]
	and a
	jr nz, .asm_37059 ; 36ff1 $66
	ld de, EnemyDisableCount
	ld hl, EnemyMonMoves
	ld a, [hBattleTurn]
	and a
	jr z, .asm_37004 ; 36ffc $6
	ld de, PlayerDisableCount
	ld hl, BattleMonMoves
.asm_37004
	ld a, [de]
	and a
	jr nz, .asm_37059 ; 37006 $51
	ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
	call GetBattleVar
	and a
	jr z, .asm_37059 ; 3700e $49
	cp $a5
	jr z, .asm_37059 ; 37012 $45
	ld b, a
	ld c, $ff
.asm_37017
	inc c
	ld a, [hli]
	cp b
	jr nz, .asm_37017 ; 3701a $fb
	ld a, [hBattleTurn]
	and a
	ld hl, EnemyMonPPMove1
	jr z, .asm_37027 ; 37022 $3
	ld hl, BattleMonPP
.asm_37027
	ld b, $0
	add hl, bc
	ld a, [hl]
	and a
	jr z, .asm_37059 ; 3702c $2b
.asm_3702e
	call BattleRandom
	and $7
	jr z, .asm_3702e ; 37033 $f9
	inc a
	inc c
	swap c
	add c
	ld [de], a
	call Function0x37e01
	ld hl, DisabledMove
	ld a, [hBattleTurn]
	and a
	jr nz, .asm_37047 ; 37044 $1
	inc hl
.asm_37047
	ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
	call GetBattleVar
	ld [hl], a
	ld [$d265], a
	call GetMoveName
	ld hl, WasDisabledText
	jp StdBattleTextBox
.asm_37059
	jp Function0x37354
; 3705c


BattleCommand1e: ; 3705c
; payday

	xor a
	ld hl, StringBuffer1
	ld [hli], a
	ld a, [hBattleTurn]
	and a
	ld a, [BattleMonLevel]
	jr z, .asm_3706c ; 37067 $3
	ld a, [EnemyMonLevel]
.asm_3706c
	add a
	ld hl, $c6ee
	add [hl]
	ld [hld], a
	jr nc, .asm_37079 ; 37072 $5
	inc [hl]
	dec hl
	jr nz, .asm_37079 ; 37076 $1
	inc [hl]
.asm_37079
	ld hl, CoinsScatteredText
	jp StdBattleTextBox
; 3707f


BattleCommand1f: ; 3707f
; conversion

	ld hl, BattleMonMoves
	ld de, BattleMonType1
	ld a, [hBattleTurn]
	and a
	jr z, .asm_37090 ; 37088 $6
	ld hl, EnemyMonMoves
	ld de, EnemyMonType1
.asm_37090
	push de
	ld c, $0
	ld de, StringBuffer1
.asm_37096
	push hl
	ld b, $0
	add hl, bc
	ld a, [hl]
	pop hl
	and a
	jr z, .asm_370b2 ; 3709d $13
	push hl
	push bc
	dec a
	ld hl, Moves + PlayerMoveType - PlayerMoveStruct
	call GetMoveAttr
	ld [de], a
	inc de
	pop bc
	pop hl
	inc c
	ld a, c
	cp $4
	jr c, .asm_37096 ; 370b0 $e4
.asm_370b2
	ld a, $ff
	ld [de], a
	inc de
	ld [de], a
	inc de
	ld [de], a
	pop de
	ld hl, StringBuffer1
.asm_370bd
	ld a, [hl]
	cp $ff
	jr z, .asm_370d3 ; 370c0 $11
	cp $13
	jr z, .asm_370d0 ; 370c4 $a
	ld a, [de]
	cp [hl]
	jr z, .asm_370d0 ; 370c8 $6
	inc de
	ld a, [de]
	dec de
	cp [hl]
	jr nz, .asm_370d9 ; 370ce $9
.asm_370d0
	inc hl
	jr .asm_370bd ; 370d1 $ea
.asm_370d3
	call Function0x37e77
	jp PrintButItFailed
.asm_370d9
	call BattleRandom
	and $3
	ld c, a
	ld b, $0
	ld hl, StringBuffer1
	add hl, bc
	ld a, [hl]
	cp $ff
	jr z, .asm_370d9 ; 370e8 $ef
	cp $13
	jr z, .asm_370d9 ; 370ec $eb
	ld a, [de]
	cp [hl]
	jr z, .asm_370d9 ; 370f0 $e7
	inc de
	ld a, [de]
	dec de
	cp [hl]
	jr z, .asm_370d9 ; 370f6 $e1
	ld a, [hl]
	ld [de], a
	inc de
	ld [de], a
	ld [$d265], a
	callba GetTypeName
	call Function0x37e01
	ld hl, TransformedTypeText
	jp StdBattleTextBox
; 3710e


BattleCommand20: ; 3710e
; resetstats

	ld a, 7 ; neutral
	ld hl, PlayerStatLevels
	call .Fill
	ld hl, EnemyStatLevels
	call .Fill

	ld a, [hBattleTurn]
	push af

	call SetPlayerTurn
	call Function0x365d7
	call SetEnemyTurn
	call Function0x365fd

	pop af
	ld [hBattleTurn], a

	call Function0x37e01

	ld hl, EliminatedStatsText
	jp StdBattleTextBox

.Fill
	ld b, PlayerStatLevelsEnd - PlayerStatLevels
.asm_37139
	ld [hli], a
	dec b
	jr nz, .asm_37139
	ret
; 3713e


BattleCommand2c: ; 3713e
; heal

	ld de, BattleMonHP
	ld hl, BattleMonMaxHP
	ld a, [hBattleTurn]
	and a
	jr z, .asm_3714f ; 37147 $6
	ld de, EnemyMonHPHi
	ld hl, EnemyMonMaxHPHi
.asm_3714f
	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar
	ld b, a
	push hl
	push de
	push bc
	ld c, $2
	call StringCmp
	pop bc
	pop de
	pop hl
	jp z, .asm_371c4
	ld a, b
	cp $9c
	jr nz, .asm_37199 ; 37166 $31
	push hl
	push de
	push af
	call BattleCommandaa
	ld a, BATTLE_VARS_SUBSTATUS5
	call _GetBattleVar
	res 0, [hl]
	ld a, BATTLE_VARS_STATUS
	call _GetBattleVar
	ld a, [hl]
	and a
	ld [hl], $3
	ld hl, WentToSleepText
	jr z, .asm_37186 ; 37181 $3
	ld hl, RestedText
.asm_37186
	call StdBattleTextBox
	ld a, [hBattleTurn]
	and a
	jr nz, .asm_37193 ; 3718c $5
	call Function0x365d7
	jr .asm_37196 ; 37191 $3
.asm_37193
	call Function0x365fd
.asm_37196
	pop af
	pop de
	pop hl
.asm_37199
	jr z, .asm_371a3 ; 37199 $8
	ld hl, GetHalfMaxHP
	call CallBattleCore
	jr .asm_371a9 ; 371a1 $6
.asm_371a3
	ld hl, GetMaxHP
	call CallBattleCore
.asm_371a9
	call Function0x37e01
	call SwitchTurn
	ld hl, Function3ccef
	call CallBattleCore
	call SwitchTurn
	call UpdateUserInParty
	call RefreshBattleHuds
	ld hl, RegainedHealthText
	jp StdBattleTextBox

.asm_371c4
	call Function0x37e77
	ld hl, HPIsFullText
	jp StdBattleTextBox
; 371cd


BattleCommand2d: ; 371cd
; transform

	call Function0x372d8
	ld a, BATTLE_VARS_SUBSTATUS5_OPP
	call _GetBattleVar
	bit 3, [hl]
	jp nz, Function0x372d2
	call CheckHiddenOpponent
	jp nz, Function0x372d2
	xor a
	ld [$cfca], a
	ld [FXAnimIDHi], a
	ld a, $1
	ld [$c689], a
	ld a, BATTLE_VARS_SUBSTATUS4
	call _GetBattleVar
	bit 4, [hl]
	push af
	jr z, .asm_37200 ; 371f4 $a
	call Function0x34548
	jr nz, .asm_37200 ; 371f9 $5
	ld a, $a4
	call Function0x37e44
.asm_37200
	ld a, BATTLE_VARS_SUBSTATUS5
	call _GetBattleVar
	set 3, [hl]
	call Function0x372e7
	ld hl, BattleMonSpecies
	ld de, EnemyMonSpecies
	ld a, [hBattleTurn]
	and a
	jr nz, .asm_3721f ; 37213 $a
	ld hl, EnemyMonSpecies
	ld de, BattleMonSpecies
	xor a
	ld [CurMoveNum], a
.asm_3721f
	push hl
	ld a, [hli]
	ld [de], a
	inc hl
	inc de
	inc de
	ld bc, $0004
	call CopyBytes
	ld a, [hBattleTurn]
	and a
	jr z, .asm_3723a ; 3722e $a
	ld a, [de]
	ld [$c6f2], a
	inc de
	ld a, [de]
	ld [$c6f3], a
	dec de
.asm_3723a
	ld a, [hli]
	ld [de], a
	inc de
	ld a, [hli]
	ld [de], a
	inc de
	ld bc, $000c
	add hl, bc
	push hl
	ld h, d
	ld l, e
	add hl, bc
	ld d, h
	ld e, l
	pop hl
	ld bc, $000c
	call CopyBytes
	ld bc, $ffe2
	add hl, bc
	push de
	ld d, h
	ld e, l
	pop hl
	ld bc, $ffe8
	add hl, bc
	ld b, $4
.asm_3725f
	ld a, [de]
	inc de
	and a
	jr z, .asm_3726c ; 37262 $8
	cp SKETCH
	ld a, 1
	jr z, .asm_3726c ; 37268 $2
	ld a, 5
.asm_3726c
	ld [hli], a
	dec b
	jr nz, .asm_3725f ; 3726e $ef
	pop hl
	ld a, [hl]
	ld [$d265], a
	call GetPokemonName
	ld hl, EnemyStats
	ld de, PlayerStats
	ld bc, $000a
	call BattleSideCopy
	ld hl, EnemyStatLevels
	ld de, PlayerStatLevels
	ld bc, $0008
	call BattleSideCopy
	call Function0x37ed5
	jr c, .asm_372a8 ; 37293 $13
	ld a, [hBattleTurn]
	and a
	ld a, [$c6fe]
	jr z, .asm_372a0 ; 3729b $3
	ld a, [$c6fa]
.asm_372a0
	and a
	jr nz, .asm_372a8 ; 372a1 $5
	call Function0x37e36
	jr .asm_372ae ; 372a6 $6
.asm_372a8
	call BattleCommandaa
	call BattleCommanda6
.asm_372ae
	xor a
	ld [$cfca], a
	ld [FXAnimIDHi], a
	ld a, $2
	ld [$c689], a
	pop af
	ld a, $a4
	call nz, Function0x37e44
	ld hl, TransformedText
	jp StdBattleTextBox
; 372c6


BattleSideCopy: ; 372c6
; Copy bc bytes from hl to de if it's the player's turn.
; Copy bc bytes from de to hl if it's the enemy's turn.
	ld a, [hBattleTurn]
	and a
	jr z, .copy

; Swap hl and de
	push hl
	ld h, d
	ld l, e
	pop de
.copy
	jp CopyBytes
; 372d2


Function0x372d2: ; 372d2
	call Function0x37e77
	jp PrintButItFailed
; 372d8


Function0x372d8: ; 372d8
	ld a, BATTLE_VARS_LAST_COUNTER_MOVE
	call _GetBattleVar
	xor a
	ld [hl], a

	ld a, BATTLE_VARS_LAST_MOVE
	call _GetBattleVar
	xor a
	ld [hl], a
	ret
; 372e7


Function0x372e7: ; 372e7
	ld a, [hBattleTurn]
	and a
	jr z, .player

	xor a
	ld [EnemyDisableCount], a
	ld [EnemyDisabledMove], a
	ret

.player
	xor a
	ld [PlayerDisableCount], a
	ld [DisabledMove], a
	ret
; 372fc


BattleCommand2e: ; 372fc
; screen

	ld hl, PlayerScreens
	ld bc, PlayerLightScreenCount
	ld a, [hBattleTurn]
	and a
	jr z, .asm_3730d
	ld hl, EnemyScreens
	ld bc, EnemyLightScreenCount

.asm_3730d
	ld a, BATTLE_VARS_MOVE_EFFECT
	call GetBattleVar
	cp EFFECT_LIGHT_SCREEN
	jr nz, .Reflect

	bit 3, [hl]
	jr nz, .asm_37337
	set 3, [hl]
	ld a, $5
	ld [bc], a
	ld hl, LightScreenEffectText
	jr .asm_37331

.Reflect
	bit 4, [hl]
	jr nz, .asm_37337
	set 4, [hl]

; LightScreenCount -> ReflectCount
	inc bc

	ld a, $5
	ld [bc], a
	ld hl, ReflectEffectText

.asm_37331
	call Function0x37e01
	jp StdBattleTextBox

.asm_37337
	call Function0x37e77
	jp PrintButItFailed
; 3733d


PrintDoesntAffect: ; 3733d
; 'it doesn't affect'
	ld hl, DoesntAffectText
	jp StdBattleTextBox
; 37343


PrintNothingHappened: ; 37343
; 'but nothing happened!'
	ld hl, NothingHappenedText
	jp StdBattleTextBox
; 37349


TryPrintButItFailed: ; 37349
	ld a, [AlreadyFailed]
	and a
	ret nz

	; fallthrough
; 3734e


PrintButItFailed: ; 3734e
; 'but it failed!'
	ld hl, ButItFailedText
	jp StdBattleTextBox
; 37354


Function0x37354: ; 37354
	call Function0x37e77
	; fallthrough
; 37357

Function0x37357: ; 37357
	ld hl, ButItFailedText ; 'but it failed!'
	ld de, ItFailedText    ; 'it failed!'
	jp Function0x35157
; 37360


PrintDidntAffect: ; 37360
; 'it didn't affect'
	ld hl, DidntAffect1Text
	jp StdBattleTextBox
; 37366


PrintDidntAffect2: ; 37366
	call Function0x37e77
	ld hl, DidntAffect1Text ; 'it didn't affect'
	ld de, DidntAffect2Text ; 'it didn't affect'
	jp Function0x35157
; 37372


PrintParalyze: ; 37372
; 'paralyzed! maybe it can't attack!'
	ld hl, ParalyzedText
	jp StdBattleTextBox
; 37378


CheckSubstituteOpp: ; 37378
	ld a, BATTLE_VARS_SUBSTATUS4_OPP
	call GetBattleVar
	bit 4, a
	ret
; 37380


BattleCommand1a: ; 37380
	callba Function10610d
	ld a, $4
	ld [$cfca], a
	ld c, $3
	call DelayFrames
	ld a, BATTLE_VARS_STATUS
	call _GetBattleVar
	xor a
	ld [hli], a
	inc hl
	ld [hli], a
	ld [hl], a
	ld a, $1
	ld [$c689], a
	call BattleCommand0a
	call Function0x37e36
	ld a, BATTLE_VARS_SUBSTATUS4
	call _GetBattleVar
	res 7, [hl]
	ld a, BATTLE_VARS_SUBSTATUS5_OPP
	call _GetBattleVar
	res 6, [hl]
	call Function0x37ed5
	ret nc
	callba DrawPlayerHUD
	callba Function3e043
	call WaitBGMap
	jp RefreshBattleHuds
; 373c9


INCLUDE "battle/effects/mirror_move.asm"

INCLUDE "battle/effects/metronome.asm"


CheckUserMove: ; 37462
; Return z if the user has move a.
	ld b, a
	ld de, BattleMonMoves
	ld a, [hBattleTurn]
	and a
	jr z, .ok
	ld de, EnemyMonMoves
.ok

	ld c, NUM_MOVES
.loop
	ld a, [de]
	inc de
	cp b
	ret z

	dec c
	jr nz, .loop

	ld a, 1
	and a
	ret
; 3747b


ResetTurn: ; 3747b
	ld hl, $c732
	ld a, [hBattleTurn]
	and a
	jr z, .asm_37486
	ld hl, $c733

.asm_37486
	ld [hl], 1
	xor a
	ld [AlreadyDisobeyed], a
	call DoMove
	jp EndMoveEffect
; 37492


INCLUDE "battle/effects/thief.asm"


BattleCommand51: ; 37517
; arenatrap

; Doesn't work on an absent opponent.

	call CheckHiddenOpponent
	jr nz, .failed

; Don't trap if the opponent is already trapped.

	ld a, BATTLE_VARS_SUBSTATUS5
	call _GetBattleVar
	bit SUBSTATUS_CANT_RUN, [hl]
	jr nz, .failed

; Otherwise trap the opponent.

	set SUBSTATUS_CANT_RUN, [hl]
	call Function0x37e01
	ld hl, CantEscapeNowText
	jp StdBattleTextBox

.failed
	call Function0x37e77
	jp PrintButItFailed
; 37536


INCLUDE "battle/effects/nightmare.asm"


BattleCommand53: ; 37563
; defrost

; Thaw the user.

	ld a, BATTLE_VARS_STATUS
	call _GetBattleVar
	bit FRZ, [hl]
	ret z
	res FRZ, [hl]

; Don't update the enemy's party struct in a wild battle.

	ld a, [hBattleTurn]
	and a
	jr z, .party

	ld a, [IsInBattle]
	dec a
	jr z, .done

.party
	ld a, PartyMon1Status - PartyMon1
	call UserPartyAttr
	res FRZ, [hl]

.done
	call RefreshBattleHuds
	ld hl, WasDefrostedText
	jp StdBattleTextBox
; 37588


INCLUDE "battle/effects/curse.asm"

INCLUDE "battle/effects/protect.asm"

INCLUDE "battle/effects/endure.asm"

INCLUDE "battle/effects/spikes.asm"

INCLUDE "battle/effects/foresight.asm"

INCLUDE "battle/effects/perish_song.asm"

INCLUDE "battle/effects/sandstorm.asm"

INCLUDE "battle/effects/rollout.asm"


BattleCommand5d: ; 37791
; unused
	ret
; 37792


BattleCommand5e: ; 37792
; furycutter

	ld hl, PlayerFuryCutterCount
	ld a, [hBattleTurn]
	and a
	jr z, .go
	ld hl, EnemyFuryCutterCount

.go
	ld a, [AttackMissed]
	and a
	jp nz, ResetFuryCutterCount

	inc [hl]

; Damage capped at 5 turns' worth (16x).
	ld a, [hl]
	ld b, a
	cp 6
	jr c, .checkdouble
	ld b, 5

.checkdouble
	dec b
	ret z

; Double the damage
	ld hl, CurDamage + 1
	sla [hl]
	dec hl
	rl [hl]
	jr nc, .checkdouble

; No overflow
	ld a, $ff
	ld [hli], a
	ld [hl], a
	ret
; 377be


ResetFuryCutterCount: ; 377be

	push hl

	ld hl, PlayerFuryCutterCount
	ld a, [hBattleTurn]
	and a
	jr z, .reset
	ld hl, EnemyFuryCutterCount

.reset
	xor a
	ld [hl], a

	pop hl
	ret
; 377ce


BattleCommand5f: ; 377ce
; attract
	ld a, [AttackMissed]
	and a
	jr nz, .asm_377f2
	call Function0x377f5
	jr c, .asm_377f2
	call CheckHiddenOpponent
	jr nz, .asm_377f2
	ld a, BATTLE_VARS_SUBSTATUS1_OPP
	call _GetBattleVar
	bit 7, [hl]
	jr nz, .asm_377f2

	set 7, [hl]
	call Function0x37e01

; 'fell in love!'
	ld hl, FellInLoveText
	jp StdBattleTextBox

.asm_377f2
	jp Function0x37354
; 377f5


Function0x377f5: ; 377f5
	ld a, 0
	call BattlePartyAttr
	ld a, [hl]
	ld [CurPartySpecies], a

	ld a, [CurBattleMon]
	ld [CurPartyMon], a
	xor a
	ld [MonType], a

	callba GetGender
	jr c, .asm_37849

	ld b, 1
	jr nz, .asm_37815
	dec b

.asm_37815
	push bc
	ld a, [TempEnemyMonSpecies]
	ld [CurPartySpecies], a
	ld hl, EnemyMonAtkDefDV
	ld a, [EnemySubStatus5]
	bit 3, a
	jr z, .asm_37829
	ld hl, $c6f2

.asm_37829
	ld a, [hli]
	ld [$d123], a
	ld a, [hl]
	ld [$d124], a
	ld a, 3
	ld [MonType], a
	callba GetGender
	pop bc
	jr c, .asm_37849

	ld a, 1
	jr nz, .asm_37844
	dec a

.asm_37844
	xor b
	jr z, .asm_37849

	and a
	ret

.asm_37849
	scf
	ret
; 3784b


BattleCommand60: ; 3784b
; happinesspower
	push bc
	ld hl, BattleMonHappiness
	ld a, [hBattleTurn]
	and a
	jr z, .asm_37857 ; 37852 $3
	ld hl, EnemyMonHappiness
.asm_37857
	xor a
	ld [$ffb4], a
	ld [$ffb5], a
	ld a, [hl]
	ld [$ffb6], a
	ld a, $a
	ld [$ffb7], a
	call Multiply
	ld a, $19
	ld [$ffb7], a
	ld b, $4
	call Divide
	ld a, [$ffb6]
	ld d, a
	pop bc
	ret
; 37874


BattleCommand61: ; 37874
; present

	ld a, [InLinkBattle]
	cp $3
	jr z, .asm_3787d ; 37879 $2
	push bc
	push de
.asm_3787d
	call BattleCommand07
	ld a, [InLinkBattle]
	cp $3
	jr z, .asm_37889 ; 37885 $2
	pop de
	pop bc
.asm_37889
	ld a, [$d265]
	and a
	jp z, Function0x37e77
	ld a, [AttackMissed]
	and a
	jp nz, Function0x37e77
	push bc
	call BattleRandom
	ld b, a
	ld hl, .table_37907
	ld c, 0
.asm_378a1
	ld a, [hli]
	cp $ff
	jr z, .asm_378b7 ; 378a4 $11
	cp b
	jr nc, .asm_378ad ; 378a7 $4
	inc c
	inc hl
	jr .asm_378a1 ; 378ab $f4
.asm_378ad
	ld a, c
	ld [$c689], a
	call Function0x37de9
	ld d, [hl]
	pop bc
	ret
.asm_378b7
	pop bc
	ld a, $3
	ld [$c689], a
	call Function0x37e01
	call SwitchTurn
	ld hl, AICheckPlayerMaxHP
	ld a, [hBattleTurn]
	and a
	jr z, .asm_378ce ; 378c9 $3
	ld hl, AICheckEnemyMaxHP
.asm_378ce
	ld a, BANK(AICheckPlayerMaxHP)
	rst FarCall
	jr c, .asm_378f3 ; 378d1 $20
	ld hl, 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 Function0x37ed5
	jr nc, .asm_37904 ; 378f9 $9
	call Function0x37e77
	ld hl, RefusedGiftText
	call StdBattleTextBox
.asm_37904
	jp EndMoveEffect

.table_37907
	db $66,  40
	db $b3,  80
	db $cc, 120
	db $ff
; 3790e


BattleCommand63: ; 3790e
; frustrationpower

	push bc
	ld hl, BattleMonHappiness
	ld a, [hBattleTurn]
	and a
	jr z, .asm_3791a ; 37915 $3
	ld hl, EnemyMonHappiness
.asm_3791a
	ld a, $ff
	sub [hl]
	ld [$ffb6], a
	xor a
	ld [$ffb4], a
	ld [$ffb5], a
	ld a, $a
	ld [$ffb7], a
	call Multiply
	ld a, $19
	ld [$ffb7], a
	ld b, $4
	call Divide
	ld a, [$ffb6]
	ld d, a
	pop bc
	ret
; 37939


BattleCommand64: ; 37939
; safeguard

	ld hl, PlayerScreens
	ld de, $c701
	ld a, [hBattleTurn]
	and a
	jr z, .asm_3794a ; 37942 $6
	ld hl, EnemyScreens
	ld de, $c705
.asm_3794a
	bit 2, [hl]
	jr nz, .asm_3795c ; 3794c $e
	set 2, [hl]
	ld a, $5
	ld [de], a
	call Function0x37e01
	ld hl, CoveredByVeilText
	jp StdBattleTextBox
.asm_3795c
	call Function0x37e77
	jp PrintButItFailed
; 37962


Function0x37962: ; 37962
	push hl
	ld hl, EnemyScreens
	ld a, [hBattleTurn]
	and a
	jr z, .asm_3796e
	ld hl, PlayerScreens

.asm_3796e
	bit 2, [hl]
	pop hl
	ret
; 37972


BattleCommand65: ; 37972
; checksafeguard
	ld hl, EnemyScreens
	ld a, [hBattleTurn]
	and a
	jr z, .asm_3797d ; 37978 $3
	ld hl, PlayerScreens
.asm_3797d
	bit 2, [hl]
	ret z
	ld a, $1
	ld [AttackMissed], a
	call BattleCommandaa
	ld hl, SafeguardProtectText
	call StdBattleTextBox
	jp EndMoveEffect
; 37991


BattleCommand66: ; 37991
; getmagnitude

	push bc
	call BattleRandom
	ld b, a
	ld hl, .Magnitudes
.asm_37999
	ld a, [hli]
	cp b
	jr nc, .asm_379a1 ; 3799b $4
	inc hl
	inc hl
	jr .asm_37999 ; 3799f $f8
.asm_379a1
	ld d, [hl]
	push de
	inc hl
	ld a, [hl]
	ld [$d265], a
	call BattleCommandaa
	ld hl, MagnitudeText
	call StdBattleTextBox
	pop de
	pop bc
	ret

.Magnitudes
	;  /255, BP, magnitude
	db  13,  10,  4
	db  38,  30,  5
	db  89,  50,  6
	db 166,  70,  7
	db 217,  90,  8
	db 242, 110,  9
	db 255, 150, 10
; 379c9


BattleCommand67: ; 379c9
; batonpass

	ld a, [hBattleTurn]
	and a
	jp nz, .Enemy

	call Function0x37ae9
	jp z, Function0x37aab

	call UpdateBattleMonInParty
	call Function0x37e01

	ld c, 50
	call DelayFrames

	call Function1d6e
	callba Function3d2f7
	callba Function3d380
	call ClearPalettes
	callba Function3ed9f
	call Function1c17
	call ClearSprites

	hlcoord 1, 0
	lb bc, 4, 10
	call ClearBox

	ld b, 1
	call GetSGBLayout
	call Function32f9
	call Function0x37a67

	callba Function3d2e0
	jp c, EndMoveEffect

	ld hl, Function3e459
	call CallBattleCore
	call Function0x37ab1
	ret

.Enemy
	ld a, [IsInBattle]
	dec a
	jp z, Function0x37aab

	call Function0x37af6
	jp z, Function0x37aab

	call UpdateEnemyMonInParty
	call Function0x37e01
	call Function0x37a82

	callba Function3d2e0
	jp c, EndMoveEffect

	xor a
	ld [$c718], a

	ld hl, Function3d517
	call CallBattleCore

	ld hl, Function3d57a
	call CallBattleCore

	ld a, 1
	ld [$d265], a

	ld hl, Function3ecab
	call CallBattleCore

	ld hl, Function3dc23
	call CallBattleCore

	jr Function0x37ab1
; 37a67


Function0x37a67: ; 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


Function0x37a82; 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 $1c17
; 37aab


Function0x37aab: ; 37aab
	call Function0x37e77
	jp PrintButItFailed
; 37ab1


Function0x37ab1: ; 37ab1
	ld a, BATTLE_VARS_STATUS
	call GetBattleVar
	and 7
	jr nz, .asm_37ac1
	ld a, BATTLE_VARS_SUBSTATUS1
	call _GetBattleVar
	res 0, [hl]

.asm_37ac1
	call Function0x372e7
	ld hl, PlayerSubStatus1
	res 7, [hl]
	ld hl, EnemySubStatus1
	res 7, [hl]
	ld hl, PlayerSubStatus5
	ld a, BATTLE_VARS_SUBSTATUS5
	call _GetBattleVar
	res 3, [hl]
	res 4, [hl]
	ld a, BATTLE_VARS_LAST_MOVE
	call _GetBattleVar
	ld [hl], 0
	xor a
	ld [$c730], a
	ld [$c731], a
	ret
; 37ae9


Function0x37ae9: ; 37ae9
	ld hl, PartyMon1CurHP
	ld a, [PartyCount]
	ld d, a
	ld a, [CurBattleMon]
	ld e, a
	jr Function0x37b01
; 37af6


Function0x37af6: ; 37af6
	ld hl, OTPartyMon1CurHP
	ld a, [OTPartyCount]
	ld d, a
	ld a, [CurOTMon]
	ld e, a

	; fallthrough
; 37b01

Function0x37b01: ; 37b01
	xor a
	ld b, a
	ld c, a
.asm_37b04
	ld a, c
	cp d
	jr z, .asm_37b1a

	cp e
	jr z, .asm_37b11

	ld a, [hli]
	or b
	ld b, a
	ld a, [hld]
	or b
	ld b, a
.asm_37b11
	push bc
	ld bc, $30
	add hl, bc
	pop bc
	inc c
	jr .asm_37b04

.asm_37b1a
	ld a, b
	and a
	ret
; 37b1d


BattleCommand68: ; 37b1d
	ld hl, $c711
	ld a, [hBattleTurn]
	and a
	jr z, .asm_37b28 ; 37b23 $3
	ld hl, $c710
.asm_37b28
	ld a, [hl]
	and a
	ret z
	ld hl, CurDamage + 1
	sla [hl]
	dec hl
	rl [hl]
	ret nc
	ld a, $ff
	ld [hli], a
	ld [hl], a
	ret
; 37b39


BattleCommand69: ; 37b39
; clearhazards

	ld a, BATTLE_VARS_SUBSTATUS4
	call _GetBattleVar
	bit 7, [hl]
	jr z, .asm_37b4a ; 37b40 $8
	res 7, [hl]
	ld hl, ShedLeechSeedText
	call StdBattleTextBox
.asm_37b4a
	ld hl, PlayerScreens
	ld de, $c730
	ld a, [hBattleTurn]
	and a
	jr z, .asm_37b5b ; 37b53 $6
	ld hl, EnemyScreens
	ld de, $c731
.asm_37b5b
	bit 0, [hl]
	jr z, .asm_37b69 ; 37b5d $a
	res 0, [hl]
	ld hl, BlewSpikesText
	push de
	call StdBattleTextBox
	pop de
.asm_37b69
	ld a, [de]
	and a
	ret z
	xor a
	ld [de], a
	ld hl, ReleasedByText
	jp StdBattleTextBox
; 37b74


BattleCommand6a: ; 37b74
; healmorn
	ld b, MORN
	jr BattleCommand6a6c
; 37b78

BattleCommand6b: ; 37b78
; healday
	ld b, DAY
	jr BattleCommand6a6c
; 37b7c

BattleCommand6c: ; 37b7c
; healnite
	ld b, NITE
	; fallthrough
; 37b7e

BattleCommand6a6c: ; 37b7e
; Time- and weather-sensitive heal.

	ld hl, BattleMonMaxHP
	ld de, BattleMonHP
	ld a, [hBattleTurn]
	and a
	jr z, .start
	ld hl, EnemyMonMaxHP
	ld de, EnemyMonHP

.start
; Index for .Multipliers
; Default restores half max HP.
	ld c, 2

; Don't bother healing if HP is already full.
	push bc
	call StringCmp
	pop bc
	jr z, .Full

; Don't factor in time of day in link battles.
	ld a, [InLinkBattle]
	and a
	jr nz, .Weather

	ld a, [TimeOfDay]
	cp b
	jr z, .Weather
	dec c

.Weather
	ld a, [Weather]
	and a
	jr z, .Heal

; x2 in sun
; /2 in rain/sandstorm
	inc c
	cp WEATHER_SUN
	jr z, .Heal
	dec c
	dec c

.Heal
	ld b, 0
	ld hl, .Multipliers
	add hl, bc
	add hl, bc

	ld a, [hli]
	ld h, [hl]
	ld l, a
	ld a, BANK(GetMaxHP)
	rst FarCall

	call Function0x37e01
	call SwitchTurn

	callab Function3ccef

	call SwitchTurn
	call UpdateUserInParty

; 'regained health!'
	ld hl, RegainedHealthText
	jp StdBattleTextBox

.Full
	call Function0x37e77

; 'hp is full!'
	ld hl, HPIsFullText
	jp StdBattleTextBox

.Multipliers
	dw GetEighthMaxHP
	dw GetQuarterMaxHP
	dw GetHalfMaxHP
	dw GetMaxHP
; 37be8


BattleCommand6d: ; 37be8
; hiddenpower

	ld a, [AttackMissed]
	and a
	ret nz
	callba GetHiddenPower
	ret
; 37bf4


BattleCommand6e: ; 37bf4
; startrain
	ld a, WEATHER_RAIN
	ld [Weather], a
	ld a, 5
	ld [WeatherCount], a
	call Function0x37e01
	ld hl, DownpourText
	jp StdBattleTextBox
; 37c07


BattleCommand6f: ; 37c07
; startsun
	ld a, WEATHER_SUN
	ld [Weather], a
	ld a, 5
	ld [WeatherCount], a
	call Function0x37e01
	ld hl, SunGotBrightText
	jp StdBattleTextBox
; 37c1a


BattleCommand95: ; 37c1a
; bellydrum
	call BattleCommand77
	ld a, [AttackMissed]
	and a
	jr nz, .asm_37c4f

	callab GetHalfMaxHP

	callab Function3ccde
	jr nc, .asm_37c4f

	push bc
	call Function0x37e01
	pop bc
	callab Function3cc3f
	call UpdateUserInParty
	ld a, $5

.asm_37c41
	push af
	call BattleCommand77
	pop af
	dec a
	jr nz, .asm_37c41 ; 37c47 $f8

	ld hl, BellyDrumText
	jp StdBattleTextBox
.asm_37c4f
	call Function0x37e77
	jp PrintButItFailed
; 37c55


BattleCommand96: ; 37c55
; psychup

	ld hl, EnemyStatLevels
	ld de, PlayerStatLevels
	ld a, [hBattleTurn]
	and a
	jr z, .asm_37c64 ; 37c5e $4
	push hl
	ld h, d
	ld l, e
	pop de
.asm_37c64
	push hl
	ld b, $8
.asm_37c67
	ld a, [hli]
	cp $7
	jr nz, .asm_37c76 ; 37c6a $a
	dec b
	jr nz, .asm_37c67 ; 37c6d $f8
	pop hl
	call Function0x37e77
	jp PrintButItFailed
.asm_37c76
	pop hl
	ld b, $8
.asm_37c79
	ld a, [hli]
	ld [de], a
	inc de
	dec b
	jr nz, .asm_37c79 ; 37c7d $fa
	ld a, [hBattleTurn]
	and a
	jr nz, .asm_37c89 ; 37c82 $5
	call Function0x365d7
	jr .asm_37c8c ; 37c87 $3
.asm_37c89
	call Function0x365fd
.asm_37c8c
	call Function0x37e01
	ld hl, CopiedStatsText
	jp StdBattleTextBox
; 37c95


BattleCommand9a: ; 37c95
; mirrorcoat

	ld a, $1
	ld [AttackMissed], a
	ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
	call GetBattleVar
	and a
	ret z
	ld b, a
	callab GetMoveEffect
	ld a, b
	cp $90
	ret z
	call BattleCommanda3
	ld a, [$d265]
	and a
	ret z
	call Function0x36abf
	ret z
	ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
	call GetBattleVar
	dec a
	ld de, StringBuffer1
	call GetMoveData
	ld a, [$d075]
	and a
	ret z
	ld a, [$d076]
	cp $14
	ret c
	ld hl, CurDamage
	ld a, [hli]
	or [hl]
	ret z
	ld a, [hl]
	add a
	ld [hld], a
	ld a, [hl]
	adc a
	ld [hl], a
	jr nc, .asm_37ce1 ; 37cdb $4
	ld a, $ff
	ld [hli], a
	ld [hl], a
.asm_37ce1
	xor a
	ld [AttackMissed], a
	ret
; 37ce6


BattleCommand9d: ; 37ce6
; doubleminimizedamage

	ld hl, $c6fa
	ld a, [hBattleTurn]
	and a
	jr z, .asm_37cf1 ; 37cec $3
	ld hl, $c6fe
.asm_37cf1
	ld a, [hl]
	and a
	ret z
	ld hl, CurDamage + 1
	sla [hl]
	dec hl
	rl [hl]
	ret nc
	ld a, $ff
	ld [hli], a
	ld [hl], a
	ret
; 37d02


BattleCommand9e: ; 37d02
; skipsuncharge
	ld a, [Weather]
	cp WEATHER_SUN
	ret nz
	ld b, $39 ; charge
	jp SkipToBattleCommand
; 37d0d


BattleCommand9b: ; 37d0d
; checkfuturesight

	ld hl, $c71d
	ld de, $c727
	ld a, [hBattleTurn]
	and a
	jr z, .ok
	ld hl, $c71e
	ld de, $c729
.ok

	ld a, [hl]
	and a
	ret z
	cp 1
	ret nz

	ld [hl], 0
	ld a, [de]
	inc de
	ld [CurDamage], a
	ld a, [de]
	ld [CurDamage + 1], a
	ld b, $9c ; futuresight
	jp SkipToBattleCommand
; 37d34

BattleCommand9c: ; 37d34
; futuresight

	call Function0x34548
	jr nz, .asm_37d4b ; 37d37 $12
	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar
	ld b, a
	ld a, BATTLE_VARS_LAST_COUNTER_MOVE
	call _GetBattleVar
	ld [hl], b
	ld a, BATTLE_VARS_LAST_MOVE
	call _GetBattleVar
	ld [hl], b
.asm_37d4b
	ld hl, $c71d
	ld a, [hBattleTurn]
	and a
	jr z, .asm_37d56 ; 37d51 $3
	ld hl, $c71e
.asm_37d56
	ld a, [hl]
	and a
	jr nz, .asm_37d87 ; 37d58 $2d
	ld a, $4
	ld [hl], a
	call BattleCommand0a
	call BattleCommandaa
	ld hl, ForesawAttackText
	call StdBattleTextBox
	call BattleCommand0c
	ld de, $c727
	ld a, [hBattleTurn]
	and a
	jr z, .asm_37d77 ; 37d72 $3
	ld de, $c729
.asm_37d77
	ld hl, CurDamage
	ld a, [hl]
	ld [de], a
	ld [hl], $0
	inc hl
	inc de
	ld a, [hl]
	ld [de], a
	ld [hl], $0
	jp EndMoveEffect
.asm_37d87
	pop bc
	call ResetDamage
	call Function0x37e77
	call PrintButItFailed
	jp EndMoveEffect
; 37d94


BattleCommand9f: ; 37d94
; thunderaccuracy

	ld a, BATTLE_VARS_MOVE_TYPE
	call _GetBattleVar
	inc hl
	ld a, [Weather]
	cp WEATHER_RAIN
	jr z, .asm_37da7 ; 37d9f $6
	cp WEATHER_SUN
	ret nz
	ld [hl], $80
	ret
.asm_37da7
	ld [hl], $ff
	ret
; 37daa


CheckHiddenOpponent: ; 37daa
	ld a, BATTLE_VARS_SUBSTATUS3_OPP
	call GetBattleVar
	and $60 ; fly | dig
	ret
; 37db2


GetUserItem: ; 37db2
; Return the effect of the user's item in bc, and its id at hl.
	ld hl, BattleMonItem
	ld a, [hBattleTurn]
	and a
	jr z, .go
	ld hl, EnemyMonItem
.go
	ld b, [hl]
	jp GetItem
; 37dc1


GetOpponentItem: ; 37dc1
; Return the effect of the opponent's item in bc, and its id at hl.
	ld hl, EnemyMonItem
	ld a, [hBattleTurn]
	and a
	jr z, .go
	ld hl, BattleMonItem
.go
	ld b, [hl]
	jp GetItem
; 37dd0


GetItem: ; 37dd0
; Return the effect of item b in bc.
	ld a, b
	and a
	ret z

	push hl
	ld hl, ItemAttributes + 2
	dec a
	ld c, a
	ld b, 0
	ld a, Item2Attributes - Item1Attributes
	call AddNTimes
	ld a, BANK(ItemAttributes)
	call GetFarHalfword
	ld b, l
	ld c, h
	pop hl
	ret
; 37de9


Function0x37de9: ; 37de9
	push hl
	push de
	push bc
	ld a, [$c689]
	push af
	call BattleCommand0a
	pop af
	ld [$c689], a
	call Function0x37e19
	call BattleCommand0c
	pop bc
	pop de
	pop hl
	ret
; 37e01


Function0x37e01: ; 37e01
	push hl
	push de
	push bc
	ld a, [$c689]
	push af
	call BattleCommand0a
	pop af
	ld [$c689], a
	call Function0x37e36
	call BattleCommand0c
	pop bc
	pop de
	pop hl
	ret
; 37e19


Function0x37e19: ; 37e19
	xor a
	ld [FXAnimIDHi], a

	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar
	and a
	ret z

	ld [FXAnimIDLo], a

	ld a, [hBattleTurn]
	and a
	ld a, 1
	jr z, .asm_37e30
	ld a, 4

.asm_37e30
	ld [$cfca], a

	jp Function0x37e47
; 37e36


Function0x37e36: ; 37e36
	xor a
	ld [$cfca], a
	ld [FXAnimIDHi], a

	ld a, BATTLE_VARS_MOVE_ANIM
	call GetBattleVar
	and a
	ret z

	; fallthrough
; 37e44


Function0x37e44: ; 37e44

	ld [FXAnimIDLo], a

	; fallthrough
; 37e47


Function0x37e47: ; 37e47
	push hl
	push de
	push bc
	callab PlayBattleAnim
	pop bc
	pop de
	pop hl
	ret
; 37e54


Function0x37e54: ; 37e54
	ld a, e
	ld [FXAnimIDLo], a
	ld a, d
	ld [FXAnimIDHi], a
	xor a
	ld [$cfca], a

	push hl
	push de
	push bc
	call SwitchTurn

	callab PlayBattleAnim

	call SwitchTurn
	pop bc
	pop de
	pop hl
	ret
; 37e73


CallBattleCore: ; 37e73
	ld a, BANK(BattleCore)
	rst FarCall
	ret
; 37e77


Function0x37e77: ; 37e77
	call BattleCommand0a
	call BattleCommandaa
	jp BattleCommand0c
; 37e80


BattleCommandaa: ; 37e80
; movedelay
; Wait 40 frames.
	ld c, 40
	jp DelayFrames
; 37e85


BattleCommand38: ; 37e85
; cleartext

; Used in multi-hit moves.
	ld hl, .text
	jp BattleTextBox
.text
	db "@"
; 37e8c


SkipToBattleCommand: ; 37e8c
; Skip over commands until reaching command b.
	ld a, [BattleScriptBufferLoc + 1]
	ld h, a
	ld a, [BattleScriptBufferLoc]
	ld l, a
.asm_37e94
	ld a, [hli]
	cp b
	jr nz, .asm_37e94

	ld a, h
	ld [BattleScriptBufferLoc + 1], a
	ld a, l
	ld [BattleScriptBufferLoc], a
	ret
; 37ea1


GetMoveAttr: ; 37ea1
; Assuming hl = Moves + x, return attribute x of move a.
	push bc
	ld bc, Move2 - Move1
	call AddNTimes
	call GetMoveByte
	pop bc
	ret
; 37ead


GetMoveData: ; 37ead
; Copy move struct a to de.
	ld hl, Moves
	ld bc, Move2 - Move1
	call AddNTimes
	ld a, Bank(Moves)
	jp FarCopyBytes
; 37ebb


GetMoveByte: ; 37ebb
	ld a, BANK(Moves)
	jp GetFarByte
; 37ec0


Function0x37ec0: ; 37ec0
	callba Functionfbd54
	ret
; 37ec7


Function0x37ec7: ; 37ec7
	callba Functionfbd71
	ret
; 37ece


Function0x37ece: ; 37ece
	callba Functionfbd69
	ret
; 37ed5


Function0x37ed5: ; 37ed5
; Related to mobile link battles.
	push hl
	push de
	push bc
	callba CheckBattleScene
	pop bc
	pop de
	pop hl
	ret
; 37ee2