ref: 3e6c37fe5242d78ba915192a03e183dfbf031110
parent: b582066865787dfa21193cd7754395c7d8ee3a85
author: yenatch <[email protected]>
date: Tue Mar 26 16:39:44 EDT 2013
Move effect commands dump
--- /dev/null
+++ b/battle/effect_command_pointers.asm
@@ -1,0 +1,177 @@
+; 3fd28
+ dw BattleCommand01 ; 34084
+ dw BattleCommand02 ; 343db
+ dw BattleCommand03 ; 34541
+ dw BattleCommand04 ; 34555
+ dw BattleCommand05 ; 34631
+ dw BattleCommand06 ; 352dc
+ dw BattleCommand07 ; 346d2
+ dw BattleCommand08 ; 34cfd
+ dw BattleCommand09 ; 34d32
+ dw BattleCommand0a ; 34eee
+ dw BattleCommand0b ; 34f60
+ dw BattleCommand0c ; 35004
+ dw BattleCommand0d ; 35023
+ dw BattleCommand0e ; 3505e
+ dw BattleCommand0f ; 35175
+ dw BattleCommand10 ; 351ad
+ dw BattleCommand11 ; 351c0
+ dw BattleCommand12 ; 35250
+ dw BattleCommand13 ; 35eee
+ dw BattleCommand14 ; 35e5c
+ dw BattleCommand15 ; 35fff
+ dw BattleCommand16 ; 36008
+ dw BattleCommand17 ; 3608c
+ dw BattleCommand18 ; 36102
+ dw BattleCommand19 ; 36165
+ dw BattleCommand1a ; 37380
+ dw BattleCommand1b ; 373c9
+ dw BattleCommand1c ; 361e4
+ dw BattleCommand1d ; 362e3
+ dw BattleCommand1e ; 3705c
+ dw BattleCommand1f ; 3707f
+ dw BattleCommand20 ; 3710e
+ dw BattleCommand21 ; 36671
+ dw BattleCommand22 ; 366e5
+ dw BattleCommand23 ; 3680f
+ dw BattleCommand24 ; 369b6
+ dw BattleCommand25 ; 36aa0
+ dw BattleCommand26 ; 36af3
+ dw BattleCommand27 ; 36cb2
+ dw BattleCommand28 ; 36c7e
+ dw BattleCommand29 ; 36c98
+ dw BattleCommand2a ; 36d3b
+ dw BattleCommand2b ; 36d1d
+ dw BattleCommand2c ; 3713e
+ dw BattleCommand2d ; 371cd
+ dw BattleCommand2e ; 372fc
+ dw BattleCommand2f ; 35f2c
+ dw BattleCommand30 ; 36dc7
+ dw BattleCommand31 ; 36e7c
+ dw BattleCommand32 ; 36f0b
+ dw BattleCommand33 ; 36f46
+ dw BattleCommand34 ; 37418
+ dw BattleCommand35 ; 36f9d
+ dw BattleCommand36 ; 36fe1
+ dw BattleCommand37 ; 36fed
+ dw BattleCommand38 ; 37e85
+ dw BattleCommand39 ; 36b4d
+ dw BattleCommand3a ; 36b3a
+ dw BattleCommand3b ; 36c2d
+ dw BattleCommand3c ; 36c2c
+ dw BattleCommand3d ; 36751
+ dw BattleCommand3e ; 3671a
+ dw BattleCommand3f ; 35726
+ dw BattleCommand40 ; 35813
+ dw BattleCommand41 ; 35864
+ dw BattleCommand42 ; 35926
+ dw BattleCommand43 ; 359d0
+ dw BattleCommand44 ; 359e6
+ dw BattleCommand45 ; 35a53
+ dw BattleCommand46 ; 35a74
+ dw BattleCommand47 ; 35b16
+ dw BattleCommand48 ; 35b33
+ dw BattleCommand49 ; 35bff
+ dw BattleCommand4a ; 35c0f
+ dw BattleCommand4b ; 35c94
+ dw BattleCommand4c ; 35cc9
+ dw BattleCommand4d ; 36ac9
+ dw BattleCommand4e ; 346b2
+ dw BattleCommand4f ; 346cd
+ dw BattleCommand50 ; 37492
+ dw BattleCommand51 ; 37517
+ dw BattleCommand52 ; 37536
+ dw BattleCommand53 ; 37563
+ dw BattleCommand54 ; 37588
+ dw BattleCommand55 ; 37618
+ dw BattleCommand56 ; 37683
+ dw BattleCommand57 ; 376a0
+ dw BattleCommand58 ; 376c2
+ dw BattleCommand59 ; 376f8
+ dw BattleCommand5a ; 3766f
+ dw BattleCommand5b ; 37718
+ dw BattleCommand5c ; 37734
+ dw BattleCommand5d ; 37791
+ dw BattleCommand5e ; 37792
+ dw BattleCommand5f ; 377ce
+ dw BattleCommand60 ; 3784b
+ dw BattleCommand61 ; 37874
+ dw BattleCommand62 ; 35612
+ dw BattleCommand63 ; 3790e
+ dw BattleCommand64 ; 37939
+ dw BattleCommand65 ; 37972
+ dw BattleCommand66 ; 37991
+ dw BattleCommand67 ; 379c9
+ dw BattleCommand68 ; 37b1d
+ dw BattleCommand69 ; 37b39
+ dw BattleCommand6a ; 37b74
+ dw BattleCommand6b ; 37b78
+ dw BattleCommand6c ; 37b7c
+ dw BattleCommand6d ; 37be8
+ dw BattleCommand6e ; 37bf4
+ dw BattleCommand6f ; 37c07
+ dw BattleCommand70 ; 361ac
+ dw BattleCommand71 ; 361b0
+ dw BattleCommand72 ; 361b4
+ dw BattleCommand73 ; 361b8
+ dw BattleCommand74 ; 361bc
+ dw BattleCommand75 ; 361c0
+ dw BattleCommand76 ; 361c4
+ dw BattleCommand77 ; 361c8
+ dw BattleCommand78 ; 361cc
+ dw BattleCommand79 ; 361d0
+ dw BattleCommand7a ; 361d4
+ dw BattleCommand7b ; 361d8
+ dw BattleCommand7c ; 361dc
+ dw BattleCommand7d ; 361e0
+ dw BattleCommand7e ; 362ad
+ dw BattleCommand7f ; 362b1
+ dw BattleCommand80 ; 362b5
+ dw BattleCommand81 ; 362b9
+ dw BattleCommand82 ; 362bd
+ dw BattleCommand83 ; 362c1
+ dw BattleCommand84 ; 362c5
+ dw BattleCommand85 ; 362c9
+ dw BattleCommand86 ; 362cd
+ dw BattleCommand87 ; 362d1
+ dw BattleCommand88 ; 362d5
+ dw BattleCommand89 ; 362d9
+ dw BattleCommand8a ; 362dd
+ dw BattleCommand8b ; 362e1
+ dw BattleCommand8c ; 363b8
+ dw BattleCommand8d ; 363e9
+ dw BattleCommand8e ; 3644c
+ dw BattleCommand8f ; 3646a
+ dw BattleCommand90 ; 34ecc
+ dw BattleCommand91 ; 34fdb
+ dw BattleCommand92 ; 34fd1
+ dw BattleCommand93 ; 34ffd
+ dw BattleCommand94 ; 36a82
+ dw BattleCommand95 ; 37c1a
+ dw BattleCommand96 ; 37c55
+ dw BattleCommand97 ; 36f1d
+ dw BattleCommand98 ; 36f25
+ dw BattleCommand99 ; 36f2f
+ dw BattleCommand9a ; 37c95
+ dw BattleCommand9b ; 37d0d
+ dw BattleCommand9c ; 37d34
+ dw BattleCommand9d ; 37ce6
+ dw BattleCommand9e ; 37d02
+ dw BattleCommand9f ; 37d94
+ dw BattleCommanda0 ; 36778
+ dw BattleCommanda1 ; 35461
+ dw BattleCommanda2 ; 3527b
+ dw BattleCommanda3 ; 34833
+ dw BattleCommanda4 ; 36500
+ dw BattleCommanda5 ; 35165
+ dw BattleCommanda6 ; 365af
+ dw BattleCommanda7 ; 365c3
+ dw BattleCommanda8 ; 355b5
+ dw BattleCommanda9 ; 355d5
+ dw BattleCommandaa ; 37e80
+ dw BattleCommandab ; 34f57
+ dw BattleCommandac ; 3658f
+ dw BattleCommandad ; 351a5
+ dw BattleCommandae ; 35197
+ dw BattleCommandaf ; 365a7
+; 3fe86
--- /dev/null
+++ b/battle/effect_commands.asm
@@ -1,0 +1,10511 @@
+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 CleanGetBattleVarPair
+ 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 CleanGetBattleVarPair
+ inc a
+ jp z, Function0x34385
+
+ xor a
+ ld [AttackMissed], a
+ ld [$c70d], a
+ ld [$c689], a
+ ld [AlreadyDisobeyed], a
+ ld [$c6fb], 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 FarBattleTextBox
+
+ 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_SLEEP
+ call FarPlayBattleAnimation
+ jr .FastAsleep
+
+
+.WokeUp
+; 'woke up!'
+ ld hl, WokeUpText
+ call FarBattleTextBox
+
+ call CantMove
+ call $399c
+ ld hl, $5f48
+ call $7e73
+ ld a, $1
+ ld [$ffd4], a
+ ld hl, PlayerSubStatus1
+ res 0, [hl]
+ jr .CheckFrozen
+
+
+.FastAsleep
+; 'fast asleep!'
+ ld hl, FastAsleepText
+ call FarBattleTextBox
+
+; 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 FarBattleTextBox
+
+ call CantMove
+ jp Function0x34385
+
+
+.CheckFlinch
+ ld hl, PlayerSubStatus3
+ bit 3, [hl] ; flinch
+ jr z, .CheckDisabled
+
+ res 3, [hl]
+
+; 'flinched!'
+ ld hl, FlinchedText
+ call FarBattleTextBox
+
+ 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 FarBattleTextBox
+
+
+.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 FarBattleTextBox
+
+ jr .CheckAttract
+
+
+.Confused
+; 'confused!'
+ ld hl, IsConfusedText
+ call FarBattleTextBox
+
+ xor a
+ ld [$cfca], a
+ ld de, ANIM_CONFUSED
+ call FarPlayBattleAnimation
+
+; 50% chance of hitting itself
+ call FarBattleRNG
+ 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 FarBattleTextBox
+
+ xor a
+ ld [$cfca], a
+
+ ld de, ANIM_INLOVE
+ call FarPlayBattleAnimation
+
+; 50% chance of infatuation
+ call FarBattleRNG
+ cp $80
+ jr c, .CheckDisabledMove
+
+; 'infatuation kept it from attacking!'
+ ld hl, InfatuationText
+ call FarBattleTextBox
+
+ 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 FarBattleRNG
+ cp $3f
+ ret nc
+
+; 'fully paralyzed!'
+ ld hl, FullyParalyzedText
+ call FarBattleTextBox
+ call CantMove
+ jp Function0x34385
+; 341f0
+
+
+CantMove: ; 341f0
+ ld a, BATTLE_VARS_SUBSTATUS1
+ call GetBattleVarPair
+ res 6, [hl]
+
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ ld a, [hl]
+ and $ec
+ ld [hl], a
+
+ call Function0x377be
+
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ cp FLY
+ jr z, .asm_3420f
+
+ cp $5b
+ ret nz
+
+.asm_3420f
+ res 5, [hl]
+ res 6, [hl]
+ jp $7ece
+; 34216
+
+
+
+Function0x34216: ; 34216
+ call $4ffd
+ call CantMove
+ jp $4ffd
+; 3421f
+
+
+
+CheckEnemyTurn: ; 3421f
+
+; check recharge
+ ld hl, EnemySubStatus4
+ bit 5, [hl]
+ jr z, .CheckSleep
+ res 5, [hl]
+
+; 'must recharge!'
+ ld hl, MustRechargeText
+ call FarBattleTextBox
+ 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 FarBattleTextBox
+ xor a
+ ld [$cfca], a
+ ld de, ANIM_SLEEP
+ call FarPlayBattleAnimation
+ jr .FastAsleep
+
+
+.WokeUp
+; 'woke up!'
+ ld hl, WokeUpText
+ call FarBattleTextBox
+ call CantMove
+ call $39b0
+ ld hl, $6036
+ call $7e73
+ 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 FarBattleTextBox
+ call CantMove
+ jp Function0x34385
+
+
+.CheckFlinch
+ ld hl, EnemySubStatus3
+ bit 3, [hl]
+ jr z, .CheckDisabled
+
+ res 3, [hl]
+
+; 'flinched!'
+ ld hl, FlinchedText
+ call FarBattleTextBox
+
+ call CantMove
+ jp Function0x34385
+
+
+.CheckDisabled
+ ld hl, EnemyEncoreCount
+ ld a, [hl]
+ and a
+ jr z, .CheckConfused
+
+ dec a
+ ld [hl], a
+ and $f
+ jr nz, .CheckConfused
+
+ ld [hl], a
+ ld [EnemyEncoredMove], a
+
+; 'disabled no more!'
+ ld hl, DisabledNoMoreText
+ call FarBattleTextBox
+
+
+.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 FarBattleTextBox
+
+ jr .CheckAttract
+
+
+.Confused
+; 'confused!'
+ ld hl, IsConfusedText
+ call FarBattleTextBox
+
+ xor a
+ ld [$cfca], a
+ ld de, ANIM_CONFUSED
+ call FarPlayBattleAnimation
+
+; 50% chance of hitting itself
+ call FarBattleRNG
+ 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 FarBattleTextBox
+
+ call Function0x355dd
+
+ call $5612
+
+ 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 CleanGetBattleVarPair
+ and $60
+ call z, PlayFXAnimID
+
+ ld c, $1
+ call Function0x35d1c
+
+ call $5004
+
+ call CantMove
+ jp Function0x34385
+
+
+.CheckAttract
+ ld a, [EnemySubStatus1]
+ add a ; check bit 7
+ jr nc, .CheckDisabledMove
+
+; 'in love with'
+ ld hl, InLoveWithText
+ call FarBattleTextBox
+
+ xor a
+ ld [$cfca], a
+
+ ld de, ANIM_INLOVE
+ call FarPlayBattleAnimation
+
+; 50% chance of infatuation
+ call FarBattleRNG
+ cp $80
+ jr c, .CheckDisabledMove
+
+; 'infatuation kept it from attacking!'
+ ld hl, InfatuationText
+ call FarBattleTextBox
+
+ call CantMove
+ jp Function0x34385
+
+
+.CheckDisabledMove
+; We can't disable a move that doesn't exist.
+ ld a, [EnemyEncoredMove]
+ 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 FarBattleRNG
+ cp $3f
+ ret nc
+
+; 'fully paralyzed!'
+ ld hl, FullyParalyzedText
+ call FarBattleTextBox
+
+ 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 GetBattleVarPair
+ res 4, [hl]
+
+ ld a, BATTLE_VARS_MOVE
+ call CleanGetBattleVarPair
+ ld [$d265], a
+ call $34f8
+
+; 'disabled!'
+ ld hl, DisabledMoveText
+ jp FarBattleTextBox
+; 343a5
+
+
+HitConfusion: ; 343a5
+
+; 'hurt itself in its confusion!'
+ ld hl, HurtItselfText
+ call FarBattleTextBox
+
+ xor a
+ ld [CriticalHit], a
+
+ call Function0x355dd
+
+ call $5612
+
+ 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 CleanGetBattleVarPair
+ and $60
+ call z, PlayFXAnimID
+
+ ld hl, $5f48
+ call $7e73
+
+ ld a, $1
+ ld [$ffd4], a
+
+ ld c, $1
+ call Function0x35d7e
+
+ jp $5004
+; 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 FarBattleRNG
+ 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 FarBattleRNG
+ 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 FarBattleRNG
+ 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 FarBattleTextBox
+
+ call HitConfusion
+
+ jp $450c
+
+
+.Nap
+ call FarBattleRNG
+ add a
+ swap a
+ and 7
+ jr z, .Nap
+
+ ld [BattleMonStatus], a
+
+; 'began to nap!'
+ ld hl, BeganToNapText
+ jr .Print
+
+
+.DoNothing
+ call FarBattleRNG
+ 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
+
+ call FarBattleTextBox
+ jp $450c
+
+
+.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 FarBattleRNG
+ 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
+
+ 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 CleanGetBattleVarPair
+
+ cp SNORE
+ jr z, .CheckSleep
+ cp SLEEP_TALK
+ jr z, .CheckSleep
+ and a
+ ret
+
+.CheckSleep
+ ld a, BATTLE_VARS_STATUS
+ call CleanGetBattleVarPair
+ and 7
+ ret z
+
+; 'ignored orders…sleeping!'
+ ld hl, $4f7b
+ call FarBattleTextBox
+
+ 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 CleanGetBattleVarPair
+ 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 $7e80
+; get move effect
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+; continuous?
+ ld hl, .continuousmoves
+ ld de, $0001 ; don't skip
+ call IsInArray
+
+; 'has no pp left for [move]'
+ ld hl, $4fba
+ jr c, .print
+; 'but no pp is left for the move'
+ ld hl, $4f99
+ call FarBattleTextBox
+ ld b, $1
+ ret
+; 34602
+
+.continuousmoves ; 34602
+ db $27 ; RAZOR_WIND
+ db $4b ; SKY_ATTACK
+ db $91 ; SKULL_BASH
+ db $97 ; SOLARBEAM
+ db $9b ; FLY, DIG
+ db $75 ; ROLLOUT
+ db $1a ; BIDE
+ db $1b ; THRASH, PETAL_DANCE, OUTRAGE
+ db $ff ; end
+; 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 $3945
+
+ ld a, BATTLE_VARS_MOVE
+ call CleanGetBattleVarPair
+ 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 CleanGetBattleVarPair
+ 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 CleanGetBattleVarPair
+ bit 2, a
+ jr z, .CheckCritical
+
+; +1 critical level
+ inc c
+
+.CheckCritical
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ 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 FarBattleRNG
+ 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
+ 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
+ jr nc, .asm_346be ; 346c6 $f6
+ ld a, $ff
+ ld [hld], a
+ ld [hl], a
+ ret
+; 346cd
+
+
+BattleCommand4f: ; 346cd
+ ld hl, $c689
+ inc [hl]
+ ret
+; 346d2
+
+
+BattleCommand07: ; 346d2
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ 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, .asm_346f7
+
+ ld hl, EnemyMonType1
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ld hl, BattleMonType1
+ ld a, [hli]
+ ld d, a
+ ld e, [hl]
+
+.asm_346f7
+ ld a, BATTLE_VARS_MOVE_TYPE
+ call GetBattleVarPair
+ ld [$d265], a
+
+ push hl
+ push de
+ push bc
+ ld a, $3e
+ ld hl, $7da4
+ rst FarCall
+ pop bc
+ pop de
+ pop hl
+
+ push de
+ push bc
+ ld a, $3e
+ ld hl, $7e24
+ rst FarCall
+ pop bc
+ pop de
+
+ ld a, [$d265]
+ cp b
+ jr z, .asm_34720
+ cp c
+ jr z, .asm_34720
+ jr .asm_3473a
+
+.asm_34720
+ 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 CleanGetBattleVarPair
+ ld b, a
+ ld hl, TypeMatchup
+.asm_34743
+ ld a, [hli]
+ cp $ff
+ jr z, .asm_347b7 ; 34746 $6f
+ cp $fe
+ jr nz, .asm_34757 ; 3474a $b
+ ld a, BATTLE_VARS_SUBSTATUS1_OPP
+ call CleanGetBattleVarPair
+ bit 3, a
+ jr nz, .asm_347b7 ; 34753 $62
+ jr .asm_34743 ; 34755 $ec
+.asm_34757
+ cp b
+ jr nz, .asm_347b3 ; 34758 $59
+ ld a, [hl]
+ cp d
+ jr z, .asm_34763 ; 3475c $5
+ cp e
+ jr z, .asm_34763 ; 3475f $2
+ jr .asm_347b3 ; 34761 $50
+.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 ; 3476e $5
+ 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 $3119
+ ld a, [$ffb4]
+ ld b, a
+ ld a, [$ffb5]
+ or b
+ ld b, a
+ ld a, [$ffb6]
+ or b
+ jr z, .asm_347ab ; 34794 $15
+ ld a, $a
+ ld [$ffb7], a
+ ld b, $4
+ call $3124
+ ld a, [$ffb5]
+ ld b, a
+ ld a, [$ffb6]
+ or b
+ jr nz, .asm_347ab ; 347a5 $4
+ 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 ; 347b5 $8c
+.asm_347b7
+ 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, .asm_347d3 ; 0x347ce $3
+ ld hl, BattleMonType1
+.asm_347d3
+ push hl
+ push de
+ push bc
+ ld a, $f
+ call CleanGetBattleVarPair
+ 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, $5
+ call CleanGetBattleVarPair
+ bit 3, 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
+
+
+; 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, $5afd
+ call $7ea1
+ and a
+ jr z, .asm_3489b ; 0x3486e $2b
+ inc hl
+ call $7ebb
+ ld hl, EnemyMonType1
+ call $47d3
+ 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 $4931
+ 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 $4939
+ ld a, e
+ and a
+ jr nz, .asm_348d7 ; 0x348a9 $2c
+ call $4939
+ jr .asm_348d7 ; 0x348ae $27
+.asm_348b0
+ ld a, [BattleMonType1]
+ ld b, a
+ ld hl, EnemyMonType1
+ call $47d3
+ ld a, [$d265]
+ cp $b
+ jr c, .asm_348c4 ; 0x348bf $3
+ call $4931
+.asm_348c4
+ ld a, [BattleMonType2]
+ cp b
+ jr z, .asm_348d7 ; 0x348c8 $d
+ call $47d3
+ ld a, [$d265]
+ cp $b
+ jr c, .asm_348d7 ; 0x348d2 $3
+ call $4931
+.asm_348d7
+ call $48de
+ pop bc
+ pop de
+ pop hl
+ ret
+; 348de
+
+
+; 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, $5afd
+ call $7ea1
+ and a
+ jr z, .loop
+
+ inc hl
+ call $7ebb
+ ld hl, BattleMonType1
+ call $47d3
+ 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
+ cp $5
+ jr c, .down
+ cp $64
+ ret c
+ jr .up
+
+.doubledown
+ call .down
+
+.down
+ ld a, [$c716]
+ dec a
+ ld [$c716], a
+ ret
+
+.up
+ ld a, [$c716]
+ inc a
+ ld [$c716], a
+ ret
+; 34941
+
+
+; 34941
+ xor a
+ ld [$c717], a
+ call $49f4
+ ret c
+
+ ld a, [EnemySubStatus1]
+ bit 4, a
+ jr z, .asm_34986
+
+ ld a, [$c67f]
+ cp $1
+ jr nz, .asm_34986
+
+ call $49f4
+ call $4b77
+ call $4b20
+ call $4a85
+ ld a, e
+ cp $2
+ jr nz, .asm_34971
+
+ ld a, [$c716]
+ add $30
+ ld [$c717], a
+ ret
+
+.asm_34971
+ call $49f4
+ 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 $484e
+ ld a, [$c716]
+ cp $b
+ ret nc
+
+ ld a, [LastEnemyCounterMove]
+ and a
+ jr z, .asm_349d2
+
+ call $4a2a
+ ld a, [$c716]
+ and a
+ jr z, .asm_349d2
+
+ ld c, a
+ call $4aa7
+ ld a, [$c716]
+ cp $ff
+ ret z
+
+ ld b, a
+ ld a, e
+ cp $2
+ jr z, .asm_349be
+
+ call $484e
+ ld a, [$c716]
+ cp $a
+ ret nc
+
+ ld a, b
+ add $10
+ ld [$c717], a
+ ret
+
+.asm_349be
+ ld c, $10
+ call $484e
+ 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 $484e
+ ld a, [$c716]
+ cp $a
+ ret nc
+
+ call $49f4
+ call $4b77
+ call $4b20
+ call $4a85
+
+ ld a, e
+ cp $2
+ ret nz
+
+ ld a, [$c716]
+ add $10
+ ld [$c717], a
+ ret
+; 349f4
+
+
+; 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, $0030
+ 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
+
+
+; 34a2a
+ ld hl, OTPartyMon1Species2
+ 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 GetBaseStats
+ ld a, [LastEnemyCounterMove]
+ dec a
+ ld hl, $5afd
+ call $7ea1
+ and a
+ jr z, .asm_34a77
+
+ inc hl
+ call $7ebb
+ ld hl, $d23d
+ call $47d3
+ 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
+
+ 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, $002f
+ add hl, bc
+ pop bc
+ dec e
+ jr nz, .asm_34a91
+
+ ld a, c
+ pop bc
+
+ and c
+ ld c, a
+ 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, $5afd
+ call $7ea1
+ and a
+ jr z, .asm_34ae9
+
+ inc hl
+ call $7ebb
+ ld hl, BattleMonType1
+ call $47d3
+ 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
+
+
+; 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 GetBaseStats
+ ld a, [LastEnemyCounterMove]
+ and a
+ jr z, .asm_34b4a
+
+ dec a
+ ld hl, $5afd
+ call $7ea1
+ and a
+ jr z, .asm_34b4a
+
+ inc hl
+ call $7ebb
+ jr .asm_34b5d
+
+.asm_34b4a
+ ld a, [BattleMonType1]
+ ld hl, $d23d
+ call $47d3
+ ld a, [$d265]
+ cp $b
+ jr nc, .asm_34b6d
+ ld a, [BattleMonType2]
+
+.asm_34b5d
+ ld hl, $d23d
+ call $47d3
+ 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
+
+
+; 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 FarBattleRNG
+ 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 CleanGetBattleVarPair
+ cp $11
+ 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 $4d ; 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 FarBattleRNG
+ 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 CleanGetBattleVarPair
+ cp $2d
+ 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 CleanGetBattleVarPair
+ cp $8
+ ret nz
+
+ ld a, BATTLE_VARS_STATUS_OPP
+ call CleanGetBattleVarPair
+ and 7 ; sleep
+ ret
+
+
+.Protect
+; Return nz if the opponent is protected.
+ ld a, BATTLE_VARS_SUBSTATUS1_OPP
+ call CleanGetBattleVarPair
+ bit 2, a
+ ret z
+
+ ld c, 40
+ call DelayFrames
+
+; 'protecting itself!'
+ ld hl, BattleText_0x8167a
+ call FarBattleTextBox
+
+ 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 GetBattleVarPair
+ bit 5, [hl]
+ res 5, [hl]
+ ret z
+
+ ld a, BATTLE_VARS_SUBSTATUS3_OPP
+ call CleanGetBattleVarPair
+ bit 6, a ; flying
+ jr z, .LockedOn
+
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+
+ 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 ; CheckOpponentSub
+ jr z, .asm_34e00
+
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+
+ cp $3 ; drain
+ ret z
+ cp $8 ; 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 CleanGetBattleVarPair
+ and $60 ; fly | dig
+ ret z
+
+ bit 6, a
+ jr z, .DigMoves
+
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+
+ cp GUST
+ ret z
+ cp WHIRLWIND
+ ret z
+ cp THUNDER
+ ret z
+ cp TWISTER
+ ret
+
+.DigMoves
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+
+ 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 CleanGetBattleVarPair
+ cp $98
+ ret nz
+
+ ld a, [Weather]
+ cp WEATHER_RAIN
+ ret
+
+
+.UnleashedEnergy
+; Return nz if unleashing energy from Bide.
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call CleanGetBattleVarPair
+ bit 0, 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 CleanGetBattleVarPair
+ bit 3, 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
+ xor a
+ ld [$c70d], a
+ call CheckSubstituteOpp
+ jr nz, .asm_34ee7 ; 34ed3 $12
+ push hl
+ ld hl, PlayerMoveEffectChance
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_34ee1 ; 34edc $3
+ ld hl, EnemyMoveEffectChance
+.asm_34ee1
+ call FarBattleRNG
+ cp [hl]
+ pop hl
+ ret c
+.asm_34ee7
+ ld a, $1
+ ld [$c70d], a
+ and a
+ ret
+; 34eee
+
+
+BattleCommand0a: ; 34eee
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call CleanGetBattleVarPair
+ bit 4, a
+ ret z
+
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call CleanGetBattleVarPair
+ bit 4, a
+ jr nz, .asm_34f18
+
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp $27 ; razor wind
+ jr z, .asm_34f21
+ cp $4b ; sky attack
+ jr z, .asm_34f21
+ cp $91 ; skull bash
+ jr z, .asm_34f21
+ cp $97 ; solarbeam
+ jr z, .asm_34f21
+ cp $9b ; fly / dig
+ jr z, .asm_34f21
+
+.asm_34f18
+ call .Rampage
+ jr z, .asm_34f21
+
+ call Function0x34548
+ ret nz
+
+.asm_34f21
+ call $7ed5
+ jr c, .asm_34f36
+
+ xor a
+ ld [$cfca], a
+ ld [FXAnimIDHi], a
+ inc a
+ ld [$c689], a
+ ld a, $a4
+ jp $7e44
+
+.asm_34f36
+ call $65c3
+ jp $7e80
+
+.Rampage
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp $75 ; rollout
+ jr z, .asm_34f4d
+ cp $1b ; 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, $7e80
+
+ ld a, [hBattleTurn]
+ and a
+ ld de, $c672
+ ld a, 1
+ jr z, .asm_34f76
+ ld de, $c67a
+ ld a, 4
+
+.asm_34f76
+ ld [$cfca], a
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp $1d ; multihit
+ jr z, .asm_34fb0
+ cp $1e ; conversion
+ jr z, .asm_34fb0
+ cp $2c ; double kick / bonemerang
+ jr z, .asm_34fb0
+ cp $4d ; twineedle
+ jr z, .asm_34fb0
+ cp $68 ; triple kick
+ jr z, .asm_34f96
+ xor a
+ ld [$c689], a
+
+.asm_34f96
+
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ ld e, a
+ ld d, 0
+ call PlayFXAnimID
+
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ cp FLY
+ jr z, .asm_34fad
+ cp DIG
+ ret nz
+
+.asm_34fad
+; clear sprite
+ jp $7ec7
+.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 CleanGetBattleVarPair
+ 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, $7e80
+
+ xor a
+ jr BattleCommand91_92
+; 34fdb
+
+
+BattleCommand91: ; 34fdb
+ ld a, [AttackMissed]
+ and a
+ jp nz, $7e80
+
+ 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 CleanGetBattleVarPair
+ ld e, a
+ ld d, 0
+ jp PlayFXAnimID
+; 34ffd
+
+
+BattleCommand93: ; 34ffd
+ ld a, [hBattleTurn]
+ xor $1
+ ld [hBattleTurn], a
+ ret
+; 35004
+
+
+BattleCommand0c: ; 35004
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call CleanGetBattleVarPair
+ bit 4, a
+ ret z
+ call $7ed5
+ jp c, BattleCommanda6
+ xor a
+ ld [$cfca], a
+ ld [FXAnimIDHi], a
+ ld a, $2
+ ld [$c689], a
+ ld a, $a4
+ jp $7e44
+; 35023
+
+
+BattleCommand0d: ; 35023
+ ld a, [AttackMissed]
+ and a
+ ret z
+ call $50e4
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call GetBattleVarPair
+ cp $13
+ jr z, .asm_3504f ; 35032 $1b
+ cp $5b
+ jr z, .asm_3504f ; 35036 $17
+ inc hl
+ ld a, [hl]
+ cp $1d
+ jr z, .asm_35049 ; 3503c $b
+ cp $2c
+ jr z, .asm_35049 ; 35040 $7
+ cp $4d
+ jr z, .asm_35049 ; 35044 $3
+ jp EndMoveEffect
+.asm_35049
+ call BattleCommand0c
+ jp EndMoveEffect
+.asm_3504f
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ res 5, [hl]
+ res 6, [hl]
+ call $7ece
+ jp EndMoveEffect
+; 3505e
+
+
+BattleCommand0e: ; 3505e
+ ld a, BATTLE_VARS_SUBSTATUS1_OPP
+ call CleanGetBattleVarPair
+ bit 5, a
+ jr z, .asm_35072 ; 35065 $b
+ call $5c94
+ 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 $4f
+ ld b, $0
+ jr nz, .asm_3508b ; 3507a $f
+ call FarBattleRNG
+ cp c
+ jr nc, .asm_3508b ; 35080 $9
+ call $5c94
+ 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, $4eb0
+ jp FarBattleTextBox
+
+.asm_350ab
+ call GetOpponentItem
+ ld a, [hl]
+ ld [$d265], a
+ call $3468
+ ld hl, $4e99
+ jp FarBattleTextBox
+
+.asm_50bb
+ ld a, $8
+ call CleanGetBattleVarPair
+ bit 4, a
+ ret nz
+ ld de, EnemyDamageTaken
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .asm_350ce ; 0x350c9 $3
+ ld de, $c685
+
+.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
+
+
+; 350e4
+ ld hl, $5071
+ ld de, $5071
+ ld a, [TypeModifier]
+ and $7f
+ jr z, .asm_35110 ; 0x350ef $1f
+ ld a, $d
+ call CleanGetBattleVarPair
+ cp $94
+ ld hl, $54f0
+ ld de, $5500
+ jr z, .asm_35110 ; 0x350fe $10
+ ld hl, $5020
+ ld de, $5033
+ ld a, [CriticalHit]
+ cp $ff
+ jr nz, .asm_35110 ; 0x3510b $3
+ ld hl, $5061
+.asm_35110
+ call Function0x35157
+ xor a
+ ld [CriticalHit], a
+ ld a, $d
+ call CleanGetBattleVarPair
+ cp $2d
+ 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, $5046
+ call FarBattleTextBox
+ ld a, $1
+ ld [$c689], a
+ call $7e36
+ ld c, $1
+ ld a, [hBattleTurn]
+ and a
+ jp nz, Function0x35d1c
+ jp Function0x35d7e
+
+Function0x35157: ; 35157
+ ld a, BATTLE_VARS_SUBSTATUS1_OPP
+ call CleanGetBattleVarPair
+ bit 2, a ; protect
+ jr z, .asm_35162
+ ld h, d
+ ld l, e
+.asm_35162
+ jp FarBattleTextBox
+; 35165
+
+
+BattleCommanda5: ; 35165
+ ld a, [AttackMissed]
+ and a
+ ret z
+
+ ld a, [TypeModifier]
+ and $7f
+ jp z, PrintDoesntAffect
+ jp $734e
+; 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 FarBattleTextBox
+
+ xor a
+ ld [CriticalHit], a
+
+.wait
+ ld c, 20
+ jp DelayFrames
+
+.ptrs
+ dw BattleText_0x81086 ; 'critical hit'
+ dw BattleText_0x81097 ; 'one-hit ko'
+; 35197
+
+
+BattleCommandae: ; 35197
+; player
+ ld hl, $c672
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_351a2
+; enemy
+ ld hl, $c67a
+
+.asm_351a2
+ xor a
+ ld [hl], a
+ ret
+; 351a5
+
+
+BattleCommandad: ; 351a5
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ bit 2, a
+ ret nz
+
+ ; fallthrough
+; 351ad
+
+
+BattleCommand10: ; 351ad
+ ld a, [TypeModifier]
+ and $7f
+ cp 10 ; 1.0
+ ret z
+ ld hl, BattleText_0x810aa ; 'super-effective'
+ jr nc, .print
+ ld hl, BattleText_0x810c1 ; 'not very effective'
+ jp FarBattleTextBox
+; 351c0
+
+
+BattleCommand11: ; 351c0
+ 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 CleanGetBattleVarPair
+ bit 6, a
+ jr z, .asm_35231 ; 351d5 $5a
+ ld hl, $50da
+ call FarBattleTextBox
+ ld a, [hBattleTurn]
+ and a
+ ld hl, EnemyMonMaxHPLo
+ ld bc, $c4ca
+ ld a, $0
+ jr nz, .asm_351f2 ; 351e8 $8
+ ld hl, $c63f
+ ld bc, $c55e
+ 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 $2d83
+ call $39c9
+ call $4ffd
+ xor a
+ ld [$cfca], a
+ ld [FXAnimIDHi], a
+ inc a
+ ld [$c689], a
+ ld a, $c2
+ call $7e44
+ call $4ffd
+ jr .asm_3524d ; 3522f $1c
+.asm_35231
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp $1d
+ jr z, .asm_3524a ; 35238 $10
+ cp $2c
+ jr z, .asm_3524a ; 3523c $c
+ cp $4d
+ jr z, .asm_3524a ; 35240 $8
+ cp $68
+ jr z, .asm_3524a ; 35244 $4
+ cp $9a
+ jr nz, .asm_3524d ; 35248 $3
+.asm_3524a
+ call BattleCommand0c
+.asm_3524d
+ jp EndMoveEffect
+; 35250
+
+
+BattleCommand12: ; 35250
+ jp .start
+.start
+ ld a, [AttackMissed]
+ and a
+ ret nz
+ ld a, $8
+ call CleanGetBattleVarPair
+ bit 6, 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 $4ffd
+ ld hl, $50f3
+ call FarBattleTextBox
+ jp $4ffd
+; 3527b
+
+
+BattleCommanda2: ; 3527b
+ 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
+; damagecalc
+
+ ld a, [hBattleTurn]
+ and a
+ jp nz, EnemyAttackDamage
+
+ ; fallthrough
+; 352e2
+
+
+PlayerAttackDamage: ; 352e2
+
+ call ResetDamage
+ ld hl, PlayerMovePower
+ ld a, [hli]
+ and a
+ ld d, a
+ ret z
+ ld a, [hl]
+ cp $14
+ jr nc, .asm_35315 ; 352ef $24
+ ld hl, EnemyMonDef
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ld a, [$c700]
+ bit 4, a
+ jr z, .asm_35302 ; 352fc $4
+ sla c
+ rl b
+.asm_35302
+ ld hl, BattleMonAtk
+ call GetDamageStatsCritical
+ jr c, .asm_3533c ; 35308 $32
+ ld hl, $c6c3
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ld hl, $c6b6
+ jr .asm_3533c ; 35313 $27
+.asm_35315
+ ld hl, EnemyMonSpclDef
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ld a, [$c700]
+ bit 3, a
+ jr z, .asm_35326 ; 35320 $4
+ sla c
+ rl b
+.asm_35326
+ ld hl, BattleMonSpclAtk
+ call GetDamageStatsCritical
+ jr c, .asm_35337 ; 3532c $9
+ ld hl, $c6c9
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ld hl, $c6bc
+.asm_35337
+ call $53c3
+ jr .asm_3533f ; 3533a $3
+.asm_3533c
+ call $53b5
+.asm_3533f
+ call .asm_3534d
+ ld a, [BattleMonLevel]
+ ld e, a
+ call DittoMetalPowder
+ ld a, 1
+ and a
+ ret
+
+.asm_3534d
+ ld a, h
+ or b
+ jr z, .asm_3536b ; 0x3534f $1a
+ srl b
+ rr c
+ srl b
+ rr c
+ ld a, c
+ or b
+ jr nz, .asm_3535e ; 0x3535b $1
+ inc c
+.asm_3535e
+ srl h
+ rr l
+ srl h
+ rr l
+ ld a, l
+ or h
+ jr nz, .asm_3536b ; 0x35368 $1
+ inc l
+.asm_3536b
+ ld a, [InLinkBattle]
+ cp $3
+ jr z, .asm_35376 ; 0x35370 $4
+ ld a, h
+ or b
+ jr nz, .asm_3534d ; 0x35374 $d7
+.asm_35376
+ 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
+; If the attacking monster is Cubone or Marowak and
+; it's holding a Thick Club, double stat value hl.
+ push bc
+ push de
+ ld b, CUBONE
+ ld c, MAROWAK
+ ld d, THICK_CLUB
+ call SpeciesItemBoost
+ pop de
+ pop bc
+ ret
+; 353c3
+
+
+LightBallBoost: ; 353c3
+; If the attacking monster is Pikachu and it's
+; holding a Light Ball, double stat value hl.
+ push bc
+ push de
+ ld b, PIKACHU
+ ld c, PIKACHU
+ ld d, LIGHT_BALL
+ call SpeciesItemBoost
+ pop de
+ pop bc
+ ret
+; 353d1
+
+
+SpeciesItemBoost: ; 353d1
+; If the attacking monster is species b or c and
+; it's holding item d, double stat value hl.
+
+ 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, .asm_35416
+ sla c
+ rl b
+
+.asm_35416
+ ld hl, EnemyMonAtk
+ call GetDamageStatsCritical
+ jr c, .asm_35450
+
+ ld hl, $c6b8
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ld hl, $c6c1
+ jr .asm_35450
+
+
+.Special
+ ld hl, BattleMonSpclDef
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+
+; Light Screen
+ ld a, [PlayerScreens]
+ bit 3, a
+ jr z, .asm_3543a
+ sla c
+ rl b
+
+.asm_3543a
+ ld hl, EnemyMonSpclAtk
+ call GetDamageStatsCritical
+ jr c, .asm_3544b
+ ld hl, $c6be
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ld hl, $c6c7
+
+.asm_3544b
+ call $53c3
+ jr .asm_35453
+
+.asm_35450
+ call $53b5
+
+.asm_35453
+ call $534d
+ ld a, [EnemyMonLevel]
+ ld e, a
+ call $52b1
+ 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 [$c672], a
+ ld [DefaultFlypoint], a
+ ld [$c72d], a
+ jr .asm_3548d ; 35480 $b
+.asm_35482
+ ld a, [$c672]
+ ld b, a
+ ld a, [PartyCount]
+ sub b
+ ld [DefaultFlypoint], a
+.asm_3548d
+ ld a, [DefaultFlypoint]
+ ld hl, PartyMon1Nickname
+ call $38a2
+ ld a, $22
+ call Function0x355bd
+ ld a, [hli]
+ or [hl]
+ jp z, $55b0
+ 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, $55b0
+ ld a, $1
+ ld [$c72d], a
+ ld hl, BeatUpAttackText
+ call FarBattleTextBox
+ ld a, [EnemyMonSpecies]
+ ld [CurSpecies], a
+ call $3856
+ ld a, [$d239]
+ ld c, a
+ push bc
+ ld a, $0
+ call Function0x355bd
+ ld a, [hl]
+ ld [CurSpecies], a
+ call $3856
+ ld a, [$d238]
+ pop bc
+ ld b, a
+ push bc
+ ld a, $1f
+ call Function0x355bd
+ ld a, [hl]
+ ld e, a
+ pop bc
+ ld a, [PlayerMovePower]
+ ld d, a
+ ret
+
+.asm_354ef
+ ld a, [EnemySubStatus3]
+ bit 2, a
+ jr nz, .asm_35502
+
+ xor a
+ ld [$c67a], a
+ ld [DefaultFlypoint], a
+ ld [$c72d], a
+ jr .asm_3550d
+
+.asm_35502
+ ld a, [$c67a]
+ ld b, a
+ ld a, [OTPartyCount]
+ sub b
+ ld [DefaultFlypoint], a
+.asm_3550d
+ ld a, [IsInBattle]
+ dec a
+ jr z, .asm_3556b
+
+ ld a, [InLinkBattle]
+ and a
+ jr nz, .asm_35532
+
+ ld a, [$cfc0]
+ and a
+ jr nz, .asm_35532
+
+ ld a, [DefaultFlypoint]
+ ld c, a
+ ld b, $0
+ ld hl, OTPartySpecies
+ add hl, bc
+ ld a, [hl]
+ ld [$d265], a
+ call $343b
+ jr .asm_35544
+
+.asm_35532
+ ld a, [DefaultFlypoint]
+ ld hl, OTPartyMon1Nickname
+ ld bc, $000b
+ call AddNTimes
+ ld de, StringBuffer1
+ call CopyBytes
+.asm_35544
+ ld a, $22
+ call Function0x355bd
+ ld a, [hli]
+ or [hl]
+ jp z, $55b0
+ 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, .asm_355b0
+
+ ld a, $1
+ ld [$c72d], a
+ jr .asm_3557d
+
+.asm_3556b
+ ld a, [EnemyMonSpecies]
+ ld [$d265], a
+ call $343b
+ ld hl, BeatUpAttackText
+ call FarBattleTextBox
+ jp $53f6
+.asm_3557d
+ ld hl, BeatUpAttackText
+ call FarBattleTextBox
+ ld a, [BattleMonSpecies]
+ ld [CurSpecies], a
+ call GetBaseStats
+ ld a, [$d239]
+ ld c, a
+ push bc
+ ld a, $0
+ call Function0x355bd
+ ld a, [hl]
+ ld [CurSpecies], a
+ call GetBaseStats
+ 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
+
+.asm_355b0
+ ld b, $12
+ jp $7e8c
+; 355b5
+
+
+BattleCommanda8: ; 355b5
+ ld a, [$c72d]
+ and a
+ ret nz
+ jp $734e
+; 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, OTPartyMon1Species2
+.asm_355cc
+ ld a, [DefaultFlypoint]
+ add hl, bc
+ call GetPartyLocation
+ pop bc
+ ret
+; 355d5
+
+
+BattleCommanda9: ; 355d5
+ 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, $c700
+ 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 $534d
+ ld d, $28
+ pop af
+ ld e, a
+ ret
+; 35612
+
+
+BattleCommand62: ; 35612
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp $7
+ jr nz, .asm_35620 ; 35619 $5
+ srl c
+ jr nz, .asm_35620 ; 3561d $1
+ inc c
+.asm_35620
+ cp $1d
+ jr z, .asm_3562b ; 35622 $7
+ cp $1e
+ jr z, .asm_3562b ; 35626 $3
+ ld a, d
+ and a
+ ret z
+.asm_3562b
+ ld a, c
+ and a
+ jr nz, .asm_35631 ; 3562d $2
+ ld c, $1
+.asm_35631
+ xor a
+ ld hl, $ffb3
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ ld a, e
+ add a
+ jr nc, .asm_3563e ; 3563a $2
+ ld [hl], $1
+.asm_3563e
+ inc hl
+ ld [hli], a
+ ld a, $5
+ ld [hld], a
+ push bc
+ ld b, $4
+ call $3124
+ pop bc
+ inc [hl]
+ inc [hl]
+ inc hl
+ ld [hl], d
+ call $3119
+ ld [hl], b
+ call $3119
+ ld [hl], c
+ ld b, $4
+ call $3124
+ ld [hl], $32
+ ld b, $4
+ call $3124
+ call GetUserItem
+ ld a, b
+ and a
+ jr z, .asm_3568f ; 35667 $26
+ ld hl, TypeBoostItems
+.asm_3566c
+ ld a, [hli]
+ cp $ff
+ jr z, .asm_3568f ; 3566f $1e
+ cp b
+ ld a, [hli]
+ jr nz, .asm_3566c ; 35673 $f7
+ ld b, a
+ ld a, BATTLE_VARS_MOVE_TYPE
+ call CleanGetBattleVarPair
+ cp b
+ jr nz, .asm_3568f ; 3567c $11
+ ld a, c
+ add $64
+ ld [$ffb7], a
+ call $3119
+ ld a, $64
+ ld [$ffb7], a
+ ld b, $4
+ call $3124
+.asm_3568f
+ call Function0x356eb
+ ld hl, CurDamage
+ ld b, [hl]
+ ld a, [$ffb6]
+ add b
+ ld [$ffb6], a
+ jr nc, .asm_356a5 ; 3569b $8
+ ld a, [$ffb5]
+ inc a
+ ld [$ffb5], a
+ and a
+ jr z, .asm_356d9 ; 356a3 $34
+.asm_356a5
+ ld a, [$ffb3]
+ ld b, a
+ ld a, [$ffb4]
+ or a
+ jr nz, .asm_356d9 ; 356ab $2c
+ ld a, [$ffb5]
+ cp $3
+ jr c, .asm_356bd ; 356b1 $a
+ cp $4
+ jr nc, .asm_356d9 ; 356b5 $22
+ ld a, [$ffb6]
+ cp $e6
+ jr nc, .asm_356d9 ; 356bb $1c
+.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, .asm_356d9 ; 356c8 $f
+ ld a, [hl]
+ cp $3
+ jr c, .asm_356df ; 356cd $10
+ cp $4
+ jr nc, .asm_356d9 ; 356d1 $6
+ inc hl
+ ld a, [hld]
+ cp $e6
+ jr c, .asm_356df ; 356d7 $6
+.asm_356d9
+ ld a, $3
+ ld [hli], a
+ ld a, $e5
+ ld [hld], a
+.asm_356df
+ inc hl
+ ld a, [hl]
+ add $2
+ ld [hld], a
+ jr nc, .asm_356e7 ; 356e4 $1
+ inc [hl]
+.asm_356e7
+ ld a, $1
+ and a
+ ret
+; 356eb
+
+
+Function0x356eb: ; 356eb
+ ld a, [CriticalHit]
+ and a
+ ret z
+
+ ld a, [$ffb6]
+ add a
+ ld [$ffb6], a
+ ld a, [$ffb5]
+ rl a
+ ld [$ffb5], a
+ ret nc
+
+ ld a, $ff
+ ld [$ffb5], a
+ ld [$ffb6], a
+ ret
+; 35703
+
+
+TypeBoostItems: ; 35703
+ db $32, NORMAL ; Pink/Polkadot Bow
+ db $33, FIGHTING ; Blackbelt
+ db $34, FLYING ; Sharp Beak
+ db $35, POISON ; Poison Barb
+ db $36, GROUND ; Soft Sand
+ db $37, ROCK ; Hard Stone
+ db $38, BUG ; Silverpowder
+ db $39, GHOST ; Spell Tag
+ db $3a, FIRE ; Charcoal
+ db $3b, WATER ; Mystic Water
+ db $3c, GRASS ; Miracle Seed
+ db $3d, ELECTRIC ; Magnet
+ db $3e, PSYCHIC ; Twistedspoon
+ db $3f, ICE ; Nevermeltice
+ db $40, DRAGON ; Dragon Scale
+ db $41, DARK ; Blackglasses
+ db $42, STEEL ; Metal Coat
+ db $ff
+; 35726
+
+
+BattleCommand3f: ; 35726
+
+ ld hl, BattleMonLevel
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_35731
+ ld hl, EnemyMonLevel
+
+.asm_35731
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp $57
+ ld b, [hl]
+ ld a, 0
+ jr z, .asm_3578c
+
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp $58
+ jr z, .asm_35758
+
+ cp $28
+ jr z, .asm_3576b
+
+ cp $63
+ jr z, .asm_35792
+
+ ld a, BATTLE_VARS_MOVE_POWER
+ call CleanGetBattleVarPair
+ ld b, a
+ ld a, $0
+ jr .asm_3578c
+
+.asm_35758
+ ld a, b
+ srl a
+ add b
+ ld b, a
+.asm_3575d
+ call FarBattleRNG
+ 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 $3119
+ 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 $3124
+ ld a, [$ffb6]
+ ld b, a
+ ld hl, .table_35807
+
+.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 $5612
+ pop hl
+ ld [hl], 1
+ ret
+
+.table_35807
+ db 1, $c8
+ db 4, $96
+ db 9, $64
+ db 16, $50
+ db 32, $28
+ db 48, $14
+; 35813
+
+
+BattleCommand40: ; 35813
+ ld a, $1
+ ld [AttackMissed], a
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
+ call CleanGetBattleVarPair
+ and a
+ ret z
+ ld b, a
+ ld hl, $45ec
+ ld a, $f
+ rst FarCall
+ ld a, b
+ cp $59
+ ret z
+ call $4833
+ ld a, [$d265]
+ and a
+ ret z
+ call Function0x36abf
+ ret z
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
+ call CleanGetBattleVarPair
+ 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
+ ld hl, EnemyMonMoves
+ ld de, EnemyPerishCount
+ 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 CleanGetBattleVarPair
+ and a
+ jp z, $5923
+ cp $a5
+ jp z, $5923
+ cp $e3
+ jp z, $5923
+ cp $77
+ jp z, $5923
+ ld b, a
+.asm_3588e
+ ld a, [hli]
+ cp b
+ jr nz, .asm_3588e ; 35890 $fc
+ ld bc, $0005
+ add hl, bc
+ ld a, [hl]
+ and $3f
+ jp z, $5923
+ ld a, [AttackMissed]
+ and a
+ jp nz, $5923
+ ld a, BATTLE_VARS_SUBSTATUS5_OPP
+ call GetBattleVarPair
+ bit 4, [hl]
+ jp nz, $5923
+ set 4, [hl]
+ call FarBattleRNG
+ and $3
+ inc a
+ inc a
+ inc a
+ ld [de], a
+ call Function0x36abf
+ jr nz, .asm_3591a ; 358bb $5d
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_358ef ; 358c0 $2d
+ 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 ; 358ce $d
+ inc c
+ ld a, c
+ cp $4
+ jr c, .asm_358cc ; 358d4 $f6
+ pop hl
+ res 4, [hl]
+ xor a
+ ld [de], a
+ jr .asm_35923 ; 358db $46
+.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 ; 358ed $2b
+.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 ; 358fb $d
+ inc c
+ ld a, c
+ cp $4
+ jr c, .asm_358f9 ; 35901 $f6
+ pop hl
+ res 4, [hl]
+ xor a
+ ld [de], a
+ jr .asm_35923 ; 35908 $19
+.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 $7e01
+ ld hl, $5109
+ jp FarBattleTextBox
+.asm_35923
+ jp PrintDidntAffect2
+; 35926
+
+
+BattleCommand42: ; 35926
+ ld a, [AttackMissed]
+ and a
+ jp nz, .asm_359cd
+ call CheckSubstituteOpp
+ jp nz, .asm_359cd
+ call $7e01
+ ld hl, $c63f
+ ld de, EnemyMonMaxHPLo
+ call .asm_3597d
+ ld a, $1
+ ld [$d10a], a
+ ld hl, $c55e
+ ld a, $b
+ call $2d83
+ 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 $59ac
+ xor a
+ ld [$d10a], a
+ call ResetDamage
+ ld hl, $c4ca
+ ld a, $b
+ call $2d83
+ ld a, $5e
+ ld hl, $4000
+ rst FarCall
+ ld hl, $511b
+ jp FarBattleTextBox
+
+.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
+ 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
+
+.asm_359cd
+ jp $7366
+; 359d0
+
+
+BattleCommand43: ; 359d0
+ ld a, BATTLE_VARS_STATUS
+ call CleanGetBattleVarPair
+ and $7
+ ret nz
+ call ResetDamage
+ ld a, $1
+ ld [AttackMissed], a
+ call Function0x37354
+ jp EndMoveEffect
+; 359e6
+
+
+BattleCommand44: ; 359e6
+ 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 CleanGetBattleVarPair
+ and a
+ jr z, .asm_35a50 ; 359fd $51
+ push hl
+ dec a
+ ld hl, $5afe
+ call $7ea1
+ ld d, a
+ pop hl
+ cp $13
+ jr z, .asm_35a50 ; 35a0b $43
+ call $7e01
+ call $4ffd
+.asm_35a13
+ call FarBattleRNG
+ 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 GetBattleVarPair
+ 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 $4ffd
+ ld a, [hl]
+ ld [$d265], a
+ ld a, $29
+ call $2d83
+ ld hl, $5452
+ jp FarBattleTextBox
+.asm_35a50
+ jp Function0x37354
+; 35a53
+
+
+BattleCommand45: ; 35a53
+ call CheckSubstituteOpp
+ jr nz, .asm_35a6e ; 35a56 $16
+ ld a, [AttackMissed]
+ and a
+ jr nz, .asm_35a6e ; 35a5c $10
+ ld a, BATTLE_VARS_SUBSTATUS5_OPP
+ call GetBattleVarPair
+ set 5, [hl]
+ call $7e01
+ ld hl, $5136
+ jp FarBattleTextBox
+.asm_35a6e
+ call $7e77
+ jp PrintDidntAffect
+; 35a74
+
+
+BattleCommand46: ; 35a74
+ call Function0x372d8
+ ld a, [InLinkBattle]
+ and a
+ jr z, .asm_35a83 ; 35a7b $6
+ call $7e77
+ jp PrintNothingHappened
+.asm_35a83
+ call CheckSubstituteOpp
+ jp nz, $5b10
+ ld a, BATTLE_VARS_SUBSTATUS5_OPP
+ call GetBattleVarPair
+ bit 3, [hl]
+ jp nz, $5b10
+ ld a, $2
+ call $3945
+ 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 CleanGetBattleVarPair
+ ld [$d265], a
+ ld b, a
+ and a
+ jr z, .asm_35b10 ; 35aaf $5f
+ cp $a5
+ 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 $a6
+ jr nz, .asm_35ac1 ; 35ac5 $fa
+ inc hl
+ ld a, b
+ ld [hl], a
+ push bc
+ push hl
+ dec a
+ ld hl, $5b00
+ call $7ea1
+ 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 $34f8
+ call $7e01
+ ld hl, $5143
+ jp FarBattleTextBox
+.asm_35b10
+ call $7e77
+ jp PrintDidntAffect
+; 35b16
+
+
+BattleCommand47: ; 35b16
+ call $7e01
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ call Function0x360dd
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call GetBattleVarPair
+ ld a, [hl]
+ push hl
+ push af
+ ld a, $a
+ ld [hl], a
+ call BattleCommand1c
+ pop af
+ pop hl
+ ld [hl], a
+ ret
+; 35b33
+
+
+BattleCommand48: ; 35b33
+ 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, [EnemyEncoredMove]
+ ld d, a
+.asm_35b4f
+ ld a, BATTLE_VARS_STATUS
+ call CleanGetBattleVarPair
+ 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 FarBattleRNG
+ 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 CleanGetBattleVarPair
+ 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 GetBattleVarPair
+ 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 $7e36
+ call UpdateMoveData
+ jp ResetTurn
+.asm_35ba3
+ call $7e77
+ jp $7349
+
+.asm_35ba9
+ push hl
+ push de
+ push bc
+ call .asm_35bb3
+ pop bc
+ pop de
+ pop hl
+ ret
+
+.asm_35bb3
+ ld a, [$ffe4]
+ and a
+ ld a, [DisabledMove]
+ jr z, .asm_35bbe
+
+ ld a, [EnemyEncoredMove]
+.asm_35bbe
+ ld b, a
+ ld a, $10
+ call CleanGetBattleVarPair
+ 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
+ ld hl, $45ec
+ ld a, $f
+ rst $8
+ 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
+ ld a, BATTLE_VARS_SUBSTATUS5
+ call GetBattleVarPair
+ set 6, [hl]
+ call $7e01
+ ld hl, $5156
+ jp FarBattleTextBox
+; 35c0f
+
+
+BattleCommand4a: ; 35c0f
+ ld a, [AttackMissed]
+ and a
+ jp nz, $5c91
+ 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 CleanGetBattleVarPair
+ 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 $34f8
+ call FarBattleRNG
+ 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 $3951
+ ld d, b
+ pop af
+ pop bc
+ add hl, bc
+ ld e, a
+ ld a, BATTLE_VARS_SUBSTATUS5_OPP
+ call CleanGetBattleVarPair
+ 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 $7e01
+ pop de
+ ld a, d
+ ld [$d265], a
+ ld hl, $517f
+ jp FarBattleTextBox
+.asm_35c91
+ jp PrintDidntAffect2
+; 35c94
+
+
+BattleCommand4b: ; 35c94
+ 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
+ ld a, BATTLE_VARS_SUBSTATUS1
+ call GetBattleVarPair
+ 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 GetBattleVarPair
+ xor a
+ ld [hl], a
+ ld h, d
+ ld l, e
+ ld bc, $0030
+ ld d, $6
+.asm_35ce9
+ ld [hl], a
+ add hl, bc
+ dec d
+ jr nz, .asm_35ce9 ; 35cec $fb
+ call $7e01
+ ld hl, $51a0
+ call FarBattleTextBox
+ 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 CleanGetBattleVarPair
+ 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
+
+ ld hl, $40d6
+ ld a, $33
+ rst FarCall ; callab SafePlayBattleAnimation
+
+ 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 $39c9
+; 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 $39c9
+; 35de0
+
+
+Function0x35de0: ; 35de0
+ ld hl, $53ad
+ call FarBattleTextBox
+ ld de, $c6e0
+ ld a, [$ffe4]
+ 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, $8
+ call GetBattleVarPair
+ res 4, [hl]
+ ld hl, $53d0
+ call FarBattleTextBox
+ call $4ffd
+ call $65c3
+ ld a, $2
+ call CleanGetBattleVarPair
+ and $60
+ call z, $7ec7
+ call $4ffd
+ ld a, $d
+ call GetBattleVarPair
+ cp $1d
+ jr z, .asm_35e3a
+
+ cp $2c
+ jr z, .asm_35e3a
+
+ cp $4d
+ jr z, .asm_35e3a
+
+ cp $68
+ jr z, .asm_35e3a
+
+ cp $9a
+ jr z, .asm_35e3a
+
+ xor a
+ ld [hl], a
+.asm_35e3a
+ call $39c9
+.asm_35e3d
+ jp ResetDamage
+; 35e40
+
+
+UpdateMoveData: ; 35e40
+
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call GetBattleVarPair
+ ld d, h
+ ld e, l
+
+ ld a, BATTLE_VARS_MOVE
+ call CleanGetBattleVarPair
+ 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 $3468
+ ld hl, $55a9
+ jr .asm_35ec6 ; 35e6e $56
+.asm_35e70
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ ld d, h
+ ld e, l
+ ld a, [de]
+ and $7
+ ld hl, $51c1
+ jr nz, .asm_35ec6 ; 35e7d $47
+ ld a, [AttackMissed]
+ and a
+ jp nz, PrintDidntAffect2
+ ld hl, $550c
+ call Function0x35ece
+ jr c, .asm_35ec6 ; 35e8c $38
+ ld a, [de]
+ and a
+ jr nz, .asm_35ec6 ; 35e90 $34
+ call CheckSubstituteOpp
+ jr nz, .asm_35ec6 ; 35e95 $2f
+ call $7e01
+ ld b, $7
+ ld a, [$cfc0]
+ and a
+ jr z, .asm_35ea4 ; 35ea0 $2
+ ld b, $3
+.asm_35ea4
+ call FarBattleRNG
+ and b
+ jr z, .asm_35ea4 ; 35ea8 $fa
+ cp $7
+ jr z, .asm_35ea4 ; 35eac $f6
+ inc a
+ ld [de], a
+ call $398e
+ call $39c9
+ ld hl, $51b1
+ call FarBattleTextBox
+ ld a, $f
+ ld hl, $5de9
+ rst FarCall
+ jp z, $4216
+ ret
+.asm_35ec6
+ push hl
+ call $7e77
+ pop hl
+ jp FarBattleTextBox
+; 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 FarBattleRNG
+ cp $40
+ ret c
+
+.asm_35eec
+ xor a
+ ret
+; 35eee
+
+
+BattleCommand13: ; 35eee
+ call CheckSubstituteOpp
+ ret nz
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ 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, [$c70d]
+ and a
+ ret nz
+ call Function0x37962
+ ret nz
+ call Function0x35ff5
+ ld de, $0106
+ call $7e54
+ call $39c9
+ ld hl, $51d5
+ call FarBattleTextBox
+ ld a, $f
+ ld hl, $5de9
+ rst FarCall
+ ret
+; 35f2c
+
+
+BattleCommand2f: ; 35f2c
+ ld hl, $5071
+ ld a, [TypeModifier]
+ and $7f
+ jp z, $5fb8
+ call Function0x35fe1
+ jp z, $5fb8
+ ld a, BATTLE_VARS_STATUS_OPP
+ call CleanGetBattleVarPair
+ ld b, a
+ ld hl, $51fa
+ and $8
+ jp nz, $5fb8
+ call GetOpponentItem
+ ld a, b
+ cp $14
+ jr nz, .asm_35f5f ; 35f51 $c
+ ld a, [hl]
+ ld [$d265], a
+ call $3468
+ ld hl, $55a9
+ jr .asm_35fb8 ; 35f5d $59
+.asm_35f5f
+ ld hl, $550c
+ ld a, BATTLE_VARS_STATUS_OPP
+ call CleanGetBattleVarPair
+ 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 FarBattleRNG
+ 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, $51d5
+ call FarBattleTextBox
+ jr .asm_35fb1 ; 35fa2 $d
+.asm_35fa4
+ set 0, [hl]
+ xor a
+ ld [de], a
+ call Function0x35fc0
+ ld hl, $51e6
+ call FarBattleTextBox
+.asm_35fb1
+ ld a, $f
+ ld hl, $5de9
+ rst FarCall
+ ret
+.asm_35fb8
+ push hl
+ call $7e77
+ pop hl
+ jp FarBattleTextBox
+; 35fc0
+
+
+Function0x35fc0: ; 35fc0
+ call $7e01
+ call Function0x35ff5
+ jp $39c9
+; 35fc9
+
+
+Function0x35fc9: ; 35fc9
+ ld a, $9
+ call $39e7
+ ld a, [hBattleTurn]
+ and a
+ ld de, $c67c
+ jr z, .asm_35fd9 ; 0x35fd4 $3
+ ld de, $c674
+.asm_35fd9
+ ld a, $d
+ call CleanGetBattleVarPair
+ cp $21
+ ret
+; 35fe1
+
+
+Function0x35fe1: ; 35fe1
+ ld de, EnemyMonType1
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_35fec ; 0x35fe7 $3
+ ld de, BattleMonType1
+.asm_35fec
+ ld a, [de]
+ inc de
+ cp $3
+ ret z
+ ld a, [de]
+ cp $3
+ ret
+; 35ff5
+
+
+Function0x35ff5: ; 35ff5
+ ld a, $b
+ call $39e7
+ set 3, [hl]
+ jp $398e
+; 35fff
+
+
+BattleCommand15: ; 35fff
+ call Function0x36011
+ ld hl, $5210
+ jp FarBattleTextBox
+; 36008
+
+
+BattleCommand16: ; 36008
+ call Function0x36011
+ ld hl, $5227
+ jp FarBattleTextBox
+; 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 $39c9
+ jp $399c
+; 3608c
+
+
+BattleCommand17: ; 3608c
+ xor a
+ ld [$cfca], a
+ call CheckSubstituteOpp
+ ret nz
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ and a
+ jp nz, Function0x360dd
+ ld a, [TypeModifier]
+ and $7f
+ ret z
+ call Function0x36e5b
+ ret z
+ call GetOpponentItem
+ ld a, b
+ cp $15
+ ret z
+ ld a, [$c70d]
+ and a
+ ret nz
+ call Function0x37962
+ ret nz
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ set 4, [hl]
+ call $398e
+ ld hl, $6c76
+ call $7e73
+ ld de, $0105
+ call $7e54
+ call $39c9
+ ld hl, $523c
+ call FarBattleTextBox
+ ld a, $f
+ ld hl, $5de9
+ rst FarCall
+ ret
+; 360dd
+
+
+Function0x360dd: ; 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, .asm_360f4 ; 0x360ec $6
+ ld hl, PartyMon1Status
+ ld a, [CurBattleMon]
+.asm_360f4
+ call GetPartyLocation
+ xor a
+ ld [hl], a
+ call $398e
+ ld hl, $524b
+ jp FarBattleTextBox
+; 36102
+
+
+BattleCommand18: ; 36102
+ xor a
+ ld [$cfca], a
+ call CheckSubstituteOpp
+ ret nz
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ 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, [$c70d]
+ and a
+ ret nz
+ call Function0x37962
+ ret nz
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ set 5, [hl]
+ call $398e
+ ld de, $0108
+ call $7e54
+ call $39c9
+ ld hl, $525d
+ call FarBattleTextBox
+ ld a, $f
+ ld hl, $5de9
+ rst FarCall
+ ret nz
+ call $4216
+ 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
+ xor a
+ ld [$cfca], a
+ call CheckSubstituteOpp
+ ret nz
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ and a
+ ret nz
+ ld a, [TypeModifier]
+ and $7f
+ ret z
+ call GetOpponentItem
+ ld a, b
+ cp $18
+ ret z
+ ld a, [$c70d]
+ and a
+ ret nz
+ call Function0x37962
+ ret nz
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ set 6, [hl]
+ call $398e
+ ld hl, $6c39
+ call $7e73
+ ld de, $0109
+ call $7e54
+ call $39c9
+ call PrintParalyze
+ ld hl, $5de9
+ jp $7e73
+; 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, [$c70e]
+ and a
+ ret nz
+ jp Function0x36281
+; 361ef
+
+
+Function0x361ef: ; 361ef
+ ld a, b
+ ld [$c70c], 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, [$c70d]
+ and a
+ jp nz, Function0x3627b
+ ld a, [$c70c]
+ and $f
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld b, [hl]
+ inc b
+ ld a, $d
+ cp b
+ jp c, $6270
+ ld a, [$c70c]
+ 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, $c6b6
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36243 ; 0x3623b $6
+ ld hl, $d21b
+ ld de, $c6c1
+.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 [$c70e], a
+ ret
+; 3626e
+
+Function0x3626e: ; 3626e
+ pop hl
+ dec [hl]
+ ld a, $2
+ ld [$c70e], a
+ ld a, $1
+ ld [AttackMissed], a
+ ret
+; 3627b
+
+Function0x3627b: ; 3627b
+ ld a, $1
+ ld [$c70e], 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 CleanGetBattleVarPair
+ cp $6b
+ ret nz
+ ld a, $1
+ ld [bc], a
+ call $7ed5
+ ret nc
+ xor a
+ ld [$ffd4], a
+ call $7e73
+ call WaitBGMap
+ jp $7e80
+; 362ad
+
+
+BattleCommand7e: ; 362ad
+; attackdown
+ ld a, $0
+ jr BattleCommand1d
+BattleCommand7f: ; 362b1
+; defensedown
+ ld a, $1
+ jr BattleCommand1d
+BattleCommand80: ; 362b5
+; speeddown
+ ld a, $2
+ jr BattleCommand1d
+BattleCommand81: ; 362b9
+; specialattackdown
+ ld a, $3
+ jr BattleCommand1d
+BattleCommand82: ; 362bd
+; specialdefensedown
+ ld a, $4
+ jr BattleCommand1d
+BattleCommand83: ; 362c1
+; accuracydown
+ ld a, $5
+ jr BattleCommand1d
+BattleCommand84: ; 362c5
+; evasiondown
+ ld a, $6
+ jr BattleCommand1d
+BattleCommand85: ; 362c9
+; attackdown2
+ ld a, $10
+ jr BattleCommand1d
+BattleCommand86: ; 362cd
+; defensedown2
+ ld a, $11
+ jr BattleCommand1d
+BattleCommand87: ; 362d1
+; speeddown2
+ ld a, $12
+ jr BattleCommand1d
+BattleCommand88: ; 362d5
+; specialattackdown2
+ ld a, $13
+ jr BattleCommand1d
+BattleCommand89: ; 362d9
+; specialdefensedown2
+ ld a, $14
+ jr BattleCommand1d
+BattleCommand8a: ; 362dd
+; accuracydown2
+ ld a, $15
+ jr BattleCommand1d
+BattleCommand8b: ; 362e1
+; evasiondown2
+ ld a, $16
+
+BattleCommand1d: ; 362e3
+; statdown
+ ld [$c70c], a
+ call Function0x36391
+ jp nz, Function0x36386
+ ld hl, EnemyStatLevels
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_362f7 ; 362f2 $3
+ ld hl, PlayerStatLevels
+.asm_362f7
+ ld a, [$c70c]
+ and $f
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld b, [hl]
+ dec b
+ jp z, $6372
+ ld a, [$c70c]
+ and $f0
+ jr z, .asm_36310 ; 3630a $4
+ dec b
+ jr nz, .asm_36310 ; 3630d $1
+ inc b
+.asm_36310
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36338 ; 36313 $23
+ ld a, [InLinkBattle]
+ and a
+ jr nz, .asm_36338 ; 36319 $1d
+ ld a, [$cfc0]
+ and a
+ jr nz, .asm_36338 ; 3631f $17
+ ld a, [PlayerSubStatus5]
+ bit 5, a
+ jr nz, .asm_36338 ; 36326 $10
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp $49
+ jr z, .asm_36338 ; 3632f $7
+ call FarBattleRNG
+ cp $40
+ jr c, .asm_3637d ; 36336 $45
+.asm_36338
+ call CheckSubstituteOpp
+ jr nz, .asm_3637d ; 3633b $40
+ ld a, [AttackMissed]
+ and a
+ jr nz, .asm_3637d ; 36341 $3a
+ ld a, [$c70d]
+ and a
+ jr nz, .asm_3637d ; 36347 $34
+ call CheckHiddenOpponent
+ jr nz, .asm_3637d ; 3634c $2f
+ ld [hl], b
+ ld a, c
+ cp $5
+ jr nc, .asm_3636c ; 36352 $18
+ push hl
+ ld hl, $d21b
+ ld de, $c6c1
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36366 ; 3635e $6
+ ld hl, $c641
+ ld de, $c6b6
+.asm_36366
+ call Function0x3641a
+ pop hl
+ jr z, .asm_36371 ; 3636a $5
+.asm_3636c
+ xor a
+ ld [$c70e], a
+ ret
+.asm_36371
+ inc [hl]
+ ld a, $3
+ ld [$c70e], a
+ ld a, $1
+ ld [AttackMissed], a
+ ret
+.asm_3637d
+ ld a, $1
+ ld [$c70e], a
+ ld [AttackMissed], a
+ ret
+; 36386
+
+
+Function0x36386: ; 36386
+ ld a, $2
+ ld [$c70e], a
+ ld a, $1
+ ld [AttackMissed], a
+ ret
+; 36391
+
+
+Function0x36391: ; 36391
+ ld a, $d
+ call CleanGetBattleVarPair
+ cp $12
+ jr c, .asm_363ae ; 0x36398 $14
+ cp $19
+ jr c, .asm_363b0 ; 0x3639c $12
+ cp $3a
+ jr c, .asm_363ae ; 0x363a0 $c
+ cp $41
+ jr c, .asm_363b0 ; 0x363a4 $a
+ cp $44
+ jr c, .asm_363ae ; 0x363a8 $4
+ cp $4b
+ jr c, .asm_363b0 ; 0x363ac $2
+.asm_363ae
+ xor a
+ ret
+.asm_363b0
+ ld a, $8
+ call CleanGetBattleVarPair
+ bit 1, a
+ ret
+; 363b8
+
+
+BattleCommand8c: ; 363b8
+ ld a, [$c70e]
+ and a
+ ret nz
+ ld a, [$c70c]
+ and $f
+ ld b, a
+ inc b
+ call $648f
+ ld hl, .stat
+ jp BattleTextBox
+
+.stat
+ TX_FAR UnknownText_0x1c0cc6
+ start_asm
+
+ ld hl, .up
+ ld a, [$c70c]
+ 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, [$c70e]
+ and a
+ ret nz
+ ld a, [$c70c]
+ and $f
+ ld b, a
+ inc b
+ call $648f
+ ld hl, .stat
+ jp BattleTextBox
+
+.stat
+ TX_FAR UnknownText_0x1c0ceb
+ start_asm
+
+ ld hl, .fell
+ ld a, [$c70c]
+ and $f0
+ ret z
+ ld hl, .sharplyfell
+ ret
+
+.sharplyfell
+ TX_FAR UnknownText_0x1c0cf5
+ db "@"
+.fell
+ TX_FAR UnknownText_0x1c0d06
+ db "@"
+
+; 3641a
+
+
+Function0x3641a: ; 3641a
+ push bc
+ sla c
+ ld b, $0
+ add hl, bc
+ ld a, c
+ add e
+ ld e, a
+ jr nc, .asm_36426 ; 0x36423 $1
+ inc d
+.asm_36426
+ pop bc
+ ld a, [hld]
+ sub $1
+ jr nz, .asm_3642f ; 0x3642a $3
+ ld a, [hl]
+ and a
+ ret z
+.asm_3642f
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3643f ; 0x36432 $b
+ call $4ffd
+ call Function0x365d7
+ call $4ffd
+ jr .asm_36448 ; 0x3643d $9
+.asm_3643f
+ call $4ffd
+ call Function0x365fd
+ call $4ffd
+.asm_36448
+ ld a, $1
+ and a
+ ret
+; 3644c
+
+
+BattleCommand8e: ; 3644c
+; applystatuser
+ ld a, [$c70e]
+ and a
+ ret z
+ push af
+ call $7e80
+ pop af
+ dec a
+ jp z, $7349
+ ld a, [$c70c]
+ and $f
+ ld b, a
+ inc b
+ call $648f
+ ld hl, $5272
+ jp FarBattleTextBox
+; 3646a
+
+
+BattleCommand8f: ; 3646a
+; applystattarget
+ ld a, [$c70e]
+ and a
+ ret z
+ push af
+ call $7e80
+ pop af
+ dec a
+ jp z, $7349
+ dec a
+ ld hl, $5321
+ jp z, FarBattleTextBox
+ ld a, [$c70c]
+ and $f
+ ld b, a
+ inc b
+ call $648f
+ ld hl, $528f
+ jp FarBattleTextBox
+; 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
+ dw $6419
+ dw $641c
+ dw $6421
+ dw $6428
+ dw $6432
+ dw $6442
+; 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
+ call ResetMiss
+ call BattleCommand70
+ call $63b8
+
+ call ResetMiss
+ call $61b0
+ call $63b8
+
+ call ResetMiss
+ call $61b4
+ call $63b8
+
+ call ResetMiss
+ call $61b8
+ call $63b8
+
+ call ResetMiss
+ call $61bc
+ jp $63b8
+; 3652d
+
+
+ResetMiss: ; 3652d
+ xor a
+ ld [AttackMissed], a
+ ret
+; 36532
+
+
+Function0x36532: ; 36532
+ ld [$c70c], a
+
+ ld hl, PlayerStatLevels
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36540
+ ld hl, EnemyStatLevels
+
+.asm_36540
+ ld a, [$c70c]
+ and $f
+ ld c, a
+ ld b, 0
+ add hl, bc
+ ld b, [hl]
+ dec b
+ jr z, .asm_36589
+
+ ld a, [$c70c]
+ 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, $c6b6
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36570
+ ld hl, $d21b
+ ld de, $c6c1
+
+.asm_36570
+ call $641a
+ 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 [$c70e], a
+ ret
+
+.asm_36588
+ inc [hl]
+
+.asm_36589
+ ld a, 2
+ ld [$c70e], a
+ ret
+; 3658f
+
+
+BattleCommandac: ; 3658f
+;
+ call $4ecc
+
+; get bit 4-5
+; ensure result is nonzero
+; (this makes the chance of each result 1/3)
+.loop
+ call FarBattleRNG
+ swap a
+ and %11
+ jr z, .loop
+; jump
+ dec a
+ ld hl, .ptrs
+ rst $28
+ ret
+.ptrs
+ dw $6165
+ dw $6102
+ dw $608c
+; 365a7
+
+
+BattleCommandaf: ; 365a7
+ ld a, BATTLE_VARS_SUBSTATUS2
+ call GetBattleVarPair
+ 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 $7e73
+ jp $31f6
+; 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 $7e73
+ jp $31f6
+; 365d7
+
+
+Function0x365d7: ; 365d7
+ ld hl, PlayerAtkLevel
+ ld de, $c6b6
+ ld bc, BattleMonAtk
+
+ ld a, $5
+ call Function0x3661d
+
+ ld hl, $6d45
+ call $7e73
+
+ call $4ffd
+
+ ld hl, $6c39
+ call $7e73
+
+ ld hl, $6c76
+ call $7e73
+
+ jp $4ffd
+; 365fd
+
+
+Function0x365fd: ; 365fd
+ ld hl, EnemyAtkLevel
+ ld de, $c6c1
+ ld bc, EnemyMonAtk
+
+ ld a, $5
+ call Function0x3661d
+
+ call $4ffd
+
+ ld hl, $6c39
+ call $7e73
+
+ ld hl, $6c76
+ call $7e73
+
+ jp $4ffd
+; 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 [$ffb4], a
+ ld a, [de]
+ ld [$ffb5], a
+ inc de
+ ld a, [de]
+ ld [$ffb6], a
+ inc de
+ ld a, [hli]
+ ld [$ffb7], a
+ call Multiply
+
+ ld a, [hl]
+ ld [$ffb7], a
+ ld b, $4
+ call Divide
+
+ ld a, [$ffb5]
+ ld b, a
+ ld a, [$ffb6]
+ or b
+ jr nz, .asm_36651
+
+ ld a, $1
+ ld [$ffb6], a
+ jr .asm_36662
+
+.asm_36651
+ ld a, [$ffb6]
+ cp $e7
+ ld a, b
+ sbc $3
+ jr c, .asm_36662
+
+ ld a, $e7
+ ld [$ffb6], a
+ ld a, $3
+ 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
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call CleanGetBattleVarPair
+ bit 0, a
+ ret z
+ ld hl, $c672
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36684 ; 3667f $3
+ ld hl, $c67a
+.asm_36684
+ dec [hl]
+ jr nz, .asm_366dc ; 36685 $55
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ res 0, [hl]
+ ld hl, $4e84
+ call FarBattleTextBox
+ ld a, BATTLE_VARS_MOVE_POWER
+ call GetBattleVarPair
+ ld a, $1
+ ld [hl], a
+ ld hl, EnemyDamageTaken
+ ld de, $c732
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_366ad ; 366a5 $6
+ ld hl, $c685
+ 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 ; 366b9 $8
+ ld a, $ff
+ ld [CurDamage], a
+ ld [CurDamage + 1], a
+.asm_366c3
+ or b
+ jr nz, .asm_366cb ; 366c4 $5
+ 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 GetBattleVarPair
+ ld a, $75
+ ld [hl], a
+ ld b, $22
+ jp $7e8c
+.asm_366dc
+ ld hl, $4e6e
+ call FarBattleTextBox
+ jp EndMoveEffect
+; 366e5
+
+
+BattleCommand22: ; 366e5
+ ld de, $c682
+ ld bc, $c672
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_366f6 ; 366ee $6
+ ld de, $c684
+ ld bc, $c67a
+.asm_366f6
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ set 0, [hl]
+ xor a
+ ld [de], a
+ inc de
+ ld [de], a
+ ld [PlayerMoveEffect], a
+ ld [EnemyMoveEffect], a
+ call FarBattleRNG
+ and $1
+ inc a
+ inc a
+ ld [bc], a
+ ld a, $1
+ ld [$c689], a
+ call $7e01
+ jp EndMoveEffect
+; 3671a
+
+
+BattleCommand3e: ; 3671a
+ ld de, $c672
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36725 ; 36720 $3
+ ld de, $c67a
+.asm_36725
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ bit 1, [hl]
+ ret z
+ ld a, [de]
+ dec a
+ ld [de], a
+ jr nz, .asm_3674c ; 36730 $1a
+ res 1, [hl]
+ call $4ffd
+ call Function0x37962
+ push af
+ call $4ffd
+ pop af
+ jr nz, .asm_3674c ; 3673f $b
+ set 7, [hl]
+ call FarBattleRNG
+ and $1
+ inc a
+ inc a
+ inc de
+ ld [de], a
+.asm_3674c
+ ld b, $3d
+ jp $7e8c
+; 36751
+
+
+BattleCommand3d: ; 36751
+ ld a, BATTLE_VARS_STATUS
+ call CleanGetBattleVarPair
+ and $7
+ ret nz
+ ld de, $c672
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36764 ; 3675f $3
+ ld de, $c67a
+.asm_36764
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ set 1, [hl]
+ call FarBattleRNG
+ and $1
+ inc a
+ ld [de], a
+ ld a, $1
+ ld [$c73e], a
+ ret
+; 36778
+
+
+BattleCommanda0: ; 36778
+; run
+ ld a, [BattleType]
+ cp $7 ; BATTLE_SHINY
+ jr z, .asm_367b9
+ cp $9 ; ?
+ jr z, .asm_367b9
+ cp $b ; ?
+ jr z, .asm_367b9
+ cp $c ; suicune
+ jr z, .asm_367b9
+ ld a, BATTLE_VARS_SUBSTATUS5_OPP
+ call CleanGetBattleVarPair
+ bit 7, 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 FarBattleRNG
+ cp c
+ jr nc, .asm_367ac ; 367b0 $fa
+ srl b
+ srl b
+ cp b
+ jr nc, .asm_367df ; 367b7 $26
+
+.asm_367b9
+ call $7e77
+ jp $734e
+
+.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 FarBattleRNG
+ cp c
+ jr nc, .asm_367d2 ; 367d6 $fa
+ srl b
+ srl b
+ cp b
+ jr nc, .asm_367df ; 367dd $0
+.asm_367df
+ call $399c
+ xor a
+ ld [$cfca], a
+ inc a
+ ld [$d232], a
+ ld [$c689], a
+ call Function0x36804
+ call BattleCommand0a
+ call $7e36
+ ld c, $14
+ call DelayFrames
+ call Function0x36804
+ ld hl, $52ac
+ jp FarBattleTextBox
+; 36804
+
+
+Function0x36804: ; 36804
+ ld a, [$d0ee]
+ and $c0
+ or $2
+ ld [$d0ee], a
+ ret
+; 3680f
+
+
+BattleCommand23: ; 3680f
+ ld a, [BattleType]
+ cp $7
+ jp z, $6969
+ cp $9
+ jp z, $6969
+ cp $b
+ jp z, $6969
+ cp $c
+ jp z, $6969
+ 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 FarBattleRNG
+ cp c
+ jr nc, .asm_36845 ; 36849 $fa
+ srl b
+ srl b
+ cp b
+ jr nc, .asm_36855 ; 36850 $3
+.asm_36852
+ jp $6969
+.asm_36855
+ call $399c
+ xor a
+ ld [$cfca], a
+ inc a
+ ld [$d232], a
+ call Function0x36804
+ ld a, [PlayerMoveAnimation]
+ jp $6975
+.asm_36869
+ call $49f4
+ jr c, .asm_368ca ; 3686c $5c
+ ld a, [$c70f]
+ and a
+ jr z, .asm_368ca ; 36872 $56
+ call $39b0
+ ld a, $1
+ ld [$c689], a
+ call $7e01
+ 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 FarBattleRNG
+ 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
+ ld hl, $54c3
+ ld a, $f
+ rst FarCall
+ ld hl, $5544
+ call FarBattleTextBox
+ ld hl, $5c23
+ jp $7e73
+.asm_368ca
+ jp $6969
+
+.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 FarBattleRNG
+ cp c
+ jr nc, .asm_368e6
+
+ srl b
+ srl b
+ cp b
+ jr nc, .asm_368f5
+
+.asm_368f3
+ jr .asm_36969
+
+.asm_368f5
+ call $399c
+ xor a
+ ld [$cfca], a
+ inc a
+ ld [$d232], a
+ call $6804
+ ld a, [EnemyMoveAnimation]
+ jr .asm_36975
+
+.asm_36908
+ call Function0x36994
+ jr c, .asm_36969
+
+ ld a, [$c70f]
+ cp $1
+ jr z, .asm_368ca
+
+ call $399c
+ ld a, $1
+ ld [$c689], a
+ call $7e01
+ ld c, $14
+ call DelayFrames
+ ld hl, $c535
+ ld bc, $050b
+ call $0fb6
+ ld c, $14
+ call DelayFrames
+ ld a, [PartyCount]
+ ld b, a
+ ld a, [CurBattleMon]
+ ld c, a
+.asm_3693a
+ call FarBattleRNG
+ and $7
+ cp b
+ jr nc, .asm_3693a
+
+ cp c
+ jr z, .asm_3693a
+
+ push af
+ push bc
+ ld hl, PartyMon1CurHP
+ call GetPartyLocation
+ ld a, [hli]
+ or [hl]
+ pop bc
+ pop de
+ jr z, .asm_3693a
+
+ ld a, d
+ ld [CurPartyMon], a
+ ld hl, $5b32
+ call $7e73
+ ld hl, $5544
+ call FarBattleTextBox
+ ld hl, $5c23
+ jp $7e73
+.asm_36969
+ call $4eee
+ call $7e80
+ call $5004
+ jp $734e
+.asm_36975
+ push af
+ call $6804
+ ld a, $1
+ ld [$c689], a
+ call $7e01
+ ld c, $14
+ call DelayFrames
+ pop af
+ ld hl, $52c1
+ cp $2e
+ jr z, .asm_36991
+
+ ld hl, $52d2
+.asm_36991
+ jp FarBattleTextBox
+; 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
+ ld de, $c672
+ ld bc, $c682
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_369c7 ; 369bf $6
+ ld de, $c67a
+ ld bc, $c684
+.asm_369c7
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ bit 2, [hl]
+ jp nz, $6a43
+ set 2, [hl]
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call GetBattleVarPair
+ ld a, [hl]
+ cp $4d
+ jr z, .asm_36a3f ; 369db $62
+ cp $2c
+ ld a, $1
+ jr z, .asm_36a3a ; 369e1 $57
+ ld a, [hl]
+ cp $9a
+ jr z, .asm_369fb ; 369e6 $13
+ cp $68
+ jr nz, .asm_36a2b ; 369ea $3f
+.asm_369ec
+ call FarBattleRNG
+ and $3
+ jr z, .asm_369ec ; 369f1 $f9
+ dec a
+ jr nz, .asm_36a3a ; 369f4 $44
+ ld a, $1
+ ld [bc], a
+ jr .asm_36a48 ; 369f9 $4d
+.asm_369fb
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .asm_36a0b ; 369fe $b
+ ld a, [PartyCount]
+ cp $1
+ jp z, $6a1e
+ dec a
+ jr .asm_36a3a ; 36a09 $2f
+.asm_36a0b
+ ld a, [IsInBattle]
+ cp $1
+ jp z, $6a1e
+ ld a, [OTPartyCount]
+ cp $1
+ jp z, $6a1e
+ dec a
+ jr .asm_36a3a ; 36a1c $1c
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ res 2, [hl]
+ call $55b5
+ jp EndMoveEffect
+.asm_36a2b
+ call FarBattleRNG
+ and $3
+ cp $2
+ jr c, .asm_36a39 ; 36a32 $5
+ call FarBattleRNG
+ 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
+ ld a, [de]
+ dec a
+ ld [de], a
+ jr nz, .asm_36a6b ; 36a46 $23
+.asm_36a48
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ res 2, [hl]
+ ld hl, $52e5
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36a5a ; 36a55 $3
+ ld hl, $52f8
+.asm_36a5a
+ push bc
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp $9a
+ jr z, .asm_36a67 ; 36a62 $3
+ call FarBattleTextBox
+.asm_36a67
+ pop bc
+ xor a
+ ld [bc], a
+ ret
+.asm_36a6b
+ ld a, [BattleScriptBufferLoc + 1]
+ ld h, a
+ ld a, [BattleScriptBufferLoc]
+ ld l, a
+.asm_36a73
+ ld a, [hld]
+ cp $5
+ 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 CleanGetBattleVarPair
+ 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 CleanGetBattleVarPair
+ and $27
+ ret nz
+ call Function0x36abf
+ ret nz
+ ld a, [$c70d]
+ and a
+ ret nz
+
+ ; fallthrough
+; 36ab5
+
+
+Function0x36ab5: ; 36ab5
+ ld a, BATTLE_VARS_SUBSTATUS3_OPP
+ call GetBattleVarPair
+ 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
+ ld a, [AttackMissed]
+ and a
+ ret nz
+ call GetUserItem
+ ld a, b
+ cp $4b
+ ret nz
+ call CheckSubstituteOpp
+ ret nz
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call GetBattleVarPair
+ ld d, h
+ ld e, l
+ call GetUserItem
+ call FarBattleRNG
+ cp c
+ ret nc
+ call EndRechargeOpp
+ ld a, BATTLE_VARS_SUBSTATUS3_OPP
+ call GetBattleVarPair
+ set 3, [hl]
+ ret
+; 36af3
+
+
+BattleCommand26: ; 36af3
+ 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 $4d32
+ 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
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+; charged?
+ bit 4, [hl]
+ ret z
+; go to town
+ res 4, [hl]
+ res 5, [hl]
+ res 6, [hl]
+ ld b, $39
+ jp $7e8c
+; 36b4d
+
+
+BattleCommand39: ; 36b4d
+ call $7e85
+ ld a, BATTLE_VARS_STATUS
+ call CleanGetBattleVarPair
+ and $7
+ jr z, .asm_36b65 ; 36b57 $c
+ call $7e80
+ call BattleCommand0c
+ call $734e
+ jp EndMoveEffect
+.asm_36b65
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ set 4, [hl]
+ ld hl, $5850
+ ld a, [AlreadyDisobeyed]
+ and a
+ call nz, FarBattleTextBox
+ call BattleCommand0a
+ xor a
+ ld [$cfca], a
+ inc a
+ ld [$c689], a
+ call $7e36
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ 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 $7ec0
+.asm_36b99
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVarPair
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ 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 GetBattleVarPair
+ ld [hl], b
+ ld a, BATTLE_VARS_LAST_MOVE
+ call GetBattleVarPair
+ ld [hl], b
+
+.asm_36bc3
+ call ResetDamage
+
+ ld hl, .text_36bdb
+ call BattleTextBox
+
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp $91 ; skull bash
+ ld b, $fe
+ jp z, $7e8c
+ jp EndMoveEffect
+
+.text_36bdb
+; [user]
+ TX_FAR UnknownText_0x1c0d0e
+ start_asm
+
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ 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
+ 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 CleanGetBattleVarPair
+ bit 4, a
+ ret nz
+ call FarBattleRNG
+ and 3
+ inc a
+ inc a
+ inc a
+ ld [hl], a
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ 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 FarBattleTextBox
+
+.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
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call GetBattleVarPair
+ bit 1, [hl]
+ jr nz, .asm_36c92 ; 36c85 $b
+ set 1, [hl]
+ call $7e01
+ ld hl, MistText
+ jp FarBattleTextBox
+.asm_36c92
+ call $7e77
+ jp $734e
+; 36c98
+
+
+BattleCommand29: ; 36c98
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call GetBattleVarPair
+ bit 2, [hl]
+ jr nz, .asm_36cac ; 36c9f $b
+ set 2, [hl]
+ call $7e01
+ ld hl, GettingPumpedText
+ jp FarBattleTextBox
+.asm_36cac
+ call $7e77
+ jp $734e
+; 36cb2
+
+
+BattleCommand27: ; 36cb2
+ 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 CleanGetBattleVarPair
+ 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 $2d83
+ call $39c9
+ ld hl, RecoilText
+ jp FarBattleTextBox
+; 36d1d
+
+
+BattleCommand2b: ; 36d1d
+; battleanimation + confuse
+ call GetOpponentItem
+ ld a, b
+ cp $19
+ ret z
+ ld a, [$c70d]
+ and a
+ ret nz
+ call Function0x37962
+ ret nz
+ call CheckSubstituteOpp
+ ret nz
+ ld a, BATTLE_VARS_SUBSTATUS3_OPP
+ call GetBattleVarPair
+ bit 7, [hl]
+ ret nz
+ jr Function0x36d70
+
+BattleCommand2a: ; 36d3b
+ call GetOpponentItem
+ ld a, b
+ cp $19
+ jr nz, .asm_36d53
+ ld a, [hl]
+ ld [$d265], a
+ call $3468
+ call $7e77
+ ld hl, ProtectedByText
+ jp FarBattleTextBox
+
+.asm_36d53
+ ld a, BATTLE_VARS_SUBSTATUS3_OPP
+ call GetBattleVarPair
+ bit 7, [hl]
+ jr z, .asm_36d65
+ call $7e77
+ ld hl, AlreadyConfusedText
+ jp FarBattleTextBox
+
+.asm_36d65
+ call CheckSubstituteOpp
+ jr nz, Function0x36db6
+ ld a, [AttackMissed]
+ and a
+ jr nz, Function0x36db6
+
+ ; fallthrough
+; 36d70
+
+
+Function0x36d70: ; 36d70
+ ld bc, $c67b
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_36d7b ; 36d76 $3
+ ld bc, PlayerConfuseCount
+.asm_36d7b
+ set 7, [hl]
+ call FarBattleRNG
+ and $3
+ inc a
+ inc a
+ ld [bc], a
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp $4c
+ jr z, .asm_36d99
+ cp $5c
+ jr z, .asm_36d99
+ cp $76
+ jr z, .asm_36d99
+ call $7e01
+.asm_36d99
+ ld de, $0103
+ call $7e54
+ ld hl, BecameConfusedText
+ call FarBattleTextBox
+ call GetOpponentItem
+ ld a, b
+ cp $f
+ jr z, .asm_36db0
+ cp $10
+ ret nz
+.asm_36db0
+ ld hl, $5e51
+ jp $7e73
+; 36db6
+
+Function0x36db6: ; 36db6
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp $4c
+ ret z
+ cp $5c
+ ret z
+ cp $76
+ ret z
+ jp PrintDidntAffect2
+; 36dc7
+
+
+BattleCommand30: ; 36dc7
+ ld a, BATTLE_VARS_STATUS_OPP
+ call CleanGetBattleVarPair
+ 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 $3468
+ call $7e77
+ ld hl, ProtectedByText
+ jp FarBattleTextBox
+.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 FarBattleRNG
+ cp $40
+ jr c, .asm_36e52 ; 36e0c $44
+.asm_36e0e
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ 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 $7e01
+ ld a, $1
+ ld [$ffd4], a
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ set 6, [hl]
+ call $398e
+ ld hl, $6c39
+ call $7e73
+ call $39d4
+ call PrintParalyze
+ ld hl, $5de9
+ jp $7e73
+.asm_36e49
+ call $7e77
+ ld hl, AlreadyParalyzedText
+ jp FarBattleTextBox
+.asm_36e52
+ jp PrintDidntAffect2
+.asm_36e55
+ call $7e77
+ 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 CleanGetBattleVarPair
+ 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
+ call $7e80
+ 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 CleanGetBattleVarPair
+ 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 GetBattleVarPair
+ 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 $7ed5
+ jr c, .asm_36ee8 ; 36ed5 $11
+ xor a
+ ld [$cfca], a
+ ld [FXAnimIDHi], a
+ ld [$c689], a
+ ld a, $a4
+ call $7e44
+ jr .asm_36eeb ; 36ee6 $3
+.asm_36ee8
+ call BattleCommanda6
+.asm_36eeb
+ ld hl, MadeSubstituteText
+ call FarBattleTextBox
+ jp $39c9
+.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 FarBattleTextBox
+; 36f0b
+
+BattleCommand32: ; 36f0b
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call GetBattleVarPair
+ set 5, [hl]
+ ret
+; 36f13
+
+
+EndRechargeOpp: ; 36f13
+ push hl
+ ld a, BATTLE_VARS_SUBSTATUS4_OPP
+ call GetBattleVarPair
+ res 5, [hl]
+ pop hl
+ ret
+; 36f1d
+
+
+BattleCommand97: ; 36f1d
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call GetBattleVarPair
+ set 6, [hl]
+ ret
+; 36f25
+
+
+BattleCommand98: ; 36f25
+ ld a, BATTLE_VARS_SUBSTATUS3_OPP
+ call CleanGetBattleVarPair
+ bit 6, a
+ ret z
+ jr BattleCommand9899
+; 36f2f
+
+
+BattleCommand99: ; 36f2f
+ ld a, BATTLE_VARS_SUBSTATUS3_OPP
+ call CleanGetBattleVarPair
+ bit 5, a ; recharge
+ ret z
+
+ ; fallthrough
+; 36f37
+
+
+BattleCommand9899: ; 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
+ call Function0x372d8
+ call $7e80
+ 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 CleanGetBattleVarPair
+ 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 CleanGetBattleVarPair
+ ld [hl], a
+ ld [$d265], a
+ ld bc, $0006
+ add hl, bc
+ ld [hl], $5
+ call $34f8
+ call $7e01
+ ld hl, LearnedMoveText
+ jp FarBattleTextBox
+.asm_36f9a
+ jp $7357
+; 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 GetBattleVarPair
+ bit 7, [hl]
+ jr nz, .asm_36fd8 ; 36fc5 $11
+ set 7, [hl]
+ call $7e01
+ ld hl, WasSeededText
+ jp FarBattleTextBox
+.asm_36fd2
+ call $7e77
+ jp PrintDoesntAffect
+.asm_36fd8
+ call $7e77
+ ld hl, EvadedText
+ jp FarBattleTextBox
+; 36fe1
+
+
+BattleCommand36: ; 36fe1
+ call $7e01
+ ld a, $41
+ ld hl, $60e5
+ rst FarCall
+ jp PrintNothingHappened
+; 36fed
+
+
+BattleCommand37: ; 36fed
+; disable
+
+ ld a, [AttackMissed]
+ and a
+ jr nz, .asm_37059 ; 36ff1 $66
+ ld de, EnemyEncoreCount
+ 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 CleanGetBattleVarPair
+ 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 FarBattleRNG
+ and $7
+ jr z, .asm_3702e ; 37033 $f9
+ inc a
+ inc c
+ swap c
+ add c
+ ld [de], a
+ call $7e01
+ 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 CleanGetBattleVarPair
+ ld [hl], a
+ ld [$d265], a
+ call $34f8
+ ld hl, WasDisabledText
+ jp FarBattleTextBox
+.asm_37059
+ jp Function0x37354
+; 3705c
+
+
+BattleCommand1e: ; 3705c
+ 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 FarBattleTextBox
+; 3707f
+
+
+BattleCommand1f: ; 3707f
+ 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, $5afe
+ call $7ea1
+ 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 $7e77
+ jp $734e
+.asm_370d9
+ call FarBattleRNG
+ 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
+ ld a, $14
+ ld hl, $4964
+ rst FarCall
+ call $7e01
+ ld hl, TransformedTypeText
+ jp FarBattleTextBox
+; 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 $7e01
+
+ ld hl, EliminatedStatsText
+ jp FarBattleTextBox
+
+.Fill
+ ld b, PlayerStatLevelsEnd - PlayerStatLevels
+.asm_37139
+ ld [hli], a
+ dec b
+ jr nz, .asm_37139
+ ret
+; 3713e
+
+
+BattleCommand2c: ; 3713e
+ 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 CleanGetBattleVarPair
+ 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 $7e80
+ ld a, BATTLE_VARS_SUBSTATUS5
+ call GetBattleVarPair
+ res 0, [hl]
+ ld a, BATTLE_VARS_STATUS
+ call GetBattleVarPair
+ ld a, [hl]
+ and a
+ ld [hl], $3
+ ld hl, WentToSleepText
+ jr z, .asm_37186 ; 37181 $3
+ ld hl, RestedText
+.asm_37186
+ call FarBattleTextBox
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .asm_37193 ; 3718c $5
+ call Function0x365d7
+ jr .asm_37196 ; 37191 $3
+.asm_37193
+ call Function0x365fd
+.asm_37196
+ pop af
+ pop de
+ pop hl
+.asm_37199
+ jr z, .asm_371a3 ; 37199 $8
+ ld hl, $4c9f
+ call $7e73
+ jr .asm_371a9 ; 371a1 $6
+.asm_371a3
+ ld hl, $4cac
+ call $7e73
+.asm_371a9
+ call $7e01
+ call $4ffd
+ ld hl, $4cef
+ call $7e73
+ call $4ffd
+ call $3995
+ call $39c9
+ ld hl, RegainedHealthText
+ jp FarBattleTextBox
+
+.asm_371c4
+ call $7e77
+ ld hl, HPIsFullText
+ jp FarBattleTextBox
+; 371cd
+
+
+BattleCommand2d: ; 371cd
+; transform
+
+ call Function0x372d8
+ ld a, BATTLE_VARS_SUBSTATUS5_OPP
+ call GetBattleVarPair
+ 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 GetBattleVarPair
+ bit 4, [hl]
+ push af
+ jr z, .asm_37200 ; 371f4 $a
+ call Function0x34548
+ jr nz, .asm_37200 ; 371f9 $5
+ ld a, $a4
+ call $7e44
+.asm_37200
+ ld a, BATTLE_VARS_SUBSTATUS5
+ call GetBattleVarPair
+ set 3, [hl]
+ call $72e7
+ ld hl, BattleMonSpecies
+ ld de, EnemyMonSpecies
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .asm_3721f ; 37213 $a
+ ld hl, EnemyMonSpecies
+ ld de, BattleMonSpecies
+ xor a
+ ld [CurMoveNum], a
+.asm_3721f
+ push hl
+ ld a, [hli]
+ ld [de], a
+ inc hl
+ inc de
+ inc de
+ ld bc, $0004
+ call $3026
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3723a ; 3722e $a
+ ld a, [de]
+ ld [$c6f2], a
+ inc de
+ ld a, [de]
+ ld [$c6f3], a
+ dec de
+.asm_3723a
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld bc, $000c
+ add hl, bc
+ push hl
+ ld h, d
+ ld l, e
+ add hl, bc
+ ld d, h
+ ld e, l
+ pop hl
+ ld bc, $000c
+ call $3026
+ ld bc, $ffe2
+ add hl, bc
+ push de
+ ld d, h
+ ld e, l
+ pop hl
+ ld bc, $ffe8
+ add hl, bc
+ ld b, $4
+.asm_3725f
+ ld a, [de]
+ inc de
+ and a
+ jr z, .asm_3726c ; 37262 $8
+ cp $a6
+ ld a, $1
+ jr z, .asm_3726c ; 37268 $2
+ ld a, $5
+.asm_3726c
+ ld [hli], a
+ dec b
+ jr nz, .asm_3725f ; 3726e $ef
+ pop hl
+ ld a, [hl]
+ ld [$d265], a
+ call $343b
+ ld hl, $c6c1
+ ld de, $c6b6
+ ld bc, $000a
+ call BattleSideCopy
+ ld hl, EnemyStatLevels
+ ld de, PlayerStatLevels
+ ld bc, $0008
+ call BattleSideCopy
+ call $7ed5
+ 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 $7e36
+ jr .asm_372ae ; 372a6 $6
+.asm_372a8
+ call $7e80
+ 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, $7e44
+ ld hl, TransformedText
+ jp FarBattleTextBox
+; 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 $7e77
+ jp $734e
+; 372d8
+
+
+Function0x372d8: ; 372d8
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE
+ call GetBattleVarPair
+ xor a
+ ld [hl], a
+
+ ld a, BATTLE_VARS_LAST_MOVE
+ call GetBattleVarPair
+ xor a
+ ld [hl], a
+ ret
+; 372e7
+
+
+; 372e7
+ ld a, [hBattleTurn]
+ and a
+ jr z, .player
+
+ xor a
+ ld [EnemyEncoreCount], a
+ ld [EnemyEncoredMove], a
+ ret
+
+.player
+ xor a
+ ld [PlayerDisableCount], a
+ ld [DisabledMove], a
+ ret
+; 372fc
+
+
+BattleCommand2e: ; 372fc
+ ld hl, PlayerScreens
+ ld bc, PlayerLightScreenCount
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3730d ; 37305 $6
+ ld hl, $c700
+ ld bc, $c706
+.asm_3730d
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ cp $23
+ jr nz, .asm_37324 ; 37314 $e
+ bit 3, [hl]
+ jr nz, .asm_37337 ; 37318 $1d
+ set 3, [hl]
+ ld a, $5
+ ld [bc], a
+ ld hl, $54b4
+ jr .asm_37331 ; 37322 $d
+.asm_37324
+ bit 4, [hl]
+ jr nz, .asm_37337 ; 37326 $f
+ set 4, [hl]
+ inc bc
+ ld a, $5
+ ld [bc], a
+ ld hl, $54c7
+.asm_37331
+ call $7e01
+ jp FarBattleTextBox
+.asm_37337
+ call $7e77
+ jp $734e
+; 3733d
+
+
+PrintDoesntAffect: ; 3733d
+; 'it doesn't affect'
+ ld hl, DoesntAffectText
+ jp FarBattleTextBox
+; 37343
+
+
+PrintNothingHappened: ; 37343
+; 'but nothing happened!'
+ ld hl, NothingHappenedText
+ jp FarBattleTextBox
+; 37349
+
+
+PrintButItFailed: ; 37349
+ ld a, [$c6fb]
+ and a
+ ret nz
+
+; 'but it failed!'
+ ld hl, ButItFailedText
+ jp FarBattleTextBox
+; 37354
+
+
+Function0x37354: ; 37354
+ call $7e77
+ ld hl, ButItFailedText ; 'but it failed!'
+ ld de, ItFailedText ; 'it failed!'
+ jp Function0x35157
+; 37360
+
+
+PrintDidntAffect; 37360
+; 'it didn't affect'
+ ld hl, DidntAffect1Text
+ jp FarBattleTextBox
+; 37366
+
+
+PrintDidntAffect2: ; 37366
+ call $7e77
+ 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 FarBattleTextBox
+; 37378
+
+
+CheckSubstituteOpp: ; 37378
+ ld a, BATTLE_VARS_SUBSTATUS4_OPP
+ call CleanGetBattleVarPair
+ bit 4, a
+ ret
+; 37380
+
+
+BattleCommand1a: ; 37380
+ ld a, $41
+ ld hl, $610d
+ rst FarCall
+ ld a, $4
+ ld [$cfca], a
+ ld c, $3
+ call DelayFrames
+ ld a, BATTLE_VARS_STATUS
+ call GetBattleVarPair
+ xor a
+ ld [hli], a
+ inc hl
+ ld [hli], a
+ ld [hl], a
+ ld a, $1
+ ld [$c689], a
+ call BattleCommand0a
+ call $7e36
+ ld a, BATTLE_VARS_SUBSTATUS4
+ call GetBattleVarPair
+ res 7, [hl]
+ ld a, BATTLE_VARS_SUBSTATUS5_OPP
+ call GetBattleVarPair
+ res 6, [hl]
+ call $7ed5
+ ret nc
+ ld a, $f
+ ld hl, $5f58
+ rst FarCall
+ ld a, $f
+ ld hl, $6043
+ rst FarCall
+ call $31f6
+ jp $39c9
+; 373c9
+
+
+BattleCommand1b: ; 373c9
+; mirrormove
+
+ call Function0x372d8
+ ld a, BATTLE_VARS_MOVE
+ call GetBattleVarPair
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
+ call CleanGetBattleVarPair
+ and a
+ jr z, .asm_373de ; 373d7 $5
+ call CheckUserMove
+ jr nz, .asm_373ea ; 373dc $c
+.asm_373de
+ call $7e77
+ ld hl, MirrorMoveFailedText
+ call FarBattleTextBox
+ jp EndMoveEffect
+.asm_373ea
+ ld a, b
+ ld [hl], a
+ ld [$d265], a
+ push af
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call GetBattleVarPair
+ ld d, h
+ ld e, l
+ pop af
+ dec a
+ call GetMoveData
+ call $34f8
+ call $30d6
+ call Function0x34548
+ jr nz, .asm_37412 ; 37405 $b
+ ld a, [$c689]
+ push af
+ call BattleCommand0a
+ pop af
+ ld [$c689], a
+.asm_37412
+ call $7e80
+ jp ResetTurn
+; 37418
+
+
+BattleCommand34: ; 37418
+; metronome
+
+ call Function0x372d8
+ call Function0x34548
+ jr nz, .asm_3742b
+
+ ld a, [$c689]
+ push af
+ call BattleCommand0a
+ pop af
+ ld [$c689], a
+
+.asm_3742b
+ call $7e36
+
+.GetMove
+ call FarBattleRNG
+
+; No invalid moves.
+ cp BEAT_UP + 1
+ jr nc, .GetMove
+
+; None of the moves in MetronomeExcepts.
+ push af
+ ld de, 1
+ ld hl, MetronomeExcepts
+ call IsInArray
+ pop bc
+ jr c, .GetMove
+
+; No moves the user already has.
+ ld a, b
+ call CheckUserMove
+ jr z, .GetMove
+
+
+ ld a, BATTLE_VARS_MOVE
+ call GetBattleVarPair
+ ld [hl], b
+ call UpdateMoveData
+ jp ResetTurn
+; 37454
+
+
+MetronomeExcepts: ; 37454
+ db $00
+ db METRONOME
+ db STRUGGLE
+ db SKETCH
+ db MIMIC
+ db COUNTER
+ db MIRROR_COAT
+ db PROTECT
+ db DETECT
+ db ENDURE
+ db DESTINY_BOND
+ db SLEEP_TALK
+ db THIEF
+ db $ff
+; 37462
+
+
+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 $402c
+ jp $52a3
+; 37492
+
+
+BattleCommand50: ; 37492
+; thief
+
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .asm_374ce ; 37495 $37
+ call .asm_37501
+ ld a, [hl]
+ and a
+ ret nz
+ call .asm_3750c
+ ld a, [hl]
+ and a
+ ret z
+ ld [$d265], a
+ ld d, a
+ ld a, $2e
+ ld hl, $5e76
+ rst FarCall
+ ret c
+ ld a, [$c70d]
+ and a
+ ret nz
+ ld a, [InLinkBattle]
+ and a
+ jr z, .asm_374be ; 374b7 $5
+ ld a, [IsInBattle]
+ dec a
+ ret z
+.asm_374be
+ call .asm_3750c
+ xor a
+ ld [hl], a
+ ld [de], a
+ call .asm_37501
+ ld a, [$d265]
+ ld [hl], a
+ ld [de], a
+ jr .asm_374f8 ; 374cc $2a
+.asm_374ce
+ call .asm_3750c
+ ld a, [hl]
+ and a
+ ret nz
+ call .asm_37501
+ ld a, [hl]
+ and a
+ ret z
+ ld [$d265], a
+ ld d, a
+ ld a, $2e
+ ld hl, $5e76
+ rst FarCall
+ ret c
+ ld a, [$c70d]
+ and a
+ ret nz
+ call .asm_37501
+ xor a
+ ld [hl], a
+ ld [de], a
+ call .asm_3750c
+ ld a, [$d265]
+ ld [hl], a
+ ld [de], a
+.asm_374f8
+ call $3468
+ ld hl, StoleText
+ jp FarBattleTextBox
+
+.asm_37501
+ ld a, 1
+ call BattlePartyAttr
+ ld d, h
+ ld e, l
+ ld hl, BattleMonItem
+ ret
+
+.asm_3750c
+ ld a, 1
+ call $396d ; GetOTStat_Battle
+ ld d, h
+ ld e, l
+ ld hl, EnemyMonItem
+ ret
+; 37517
+
+
+BattleCommand51: ; 37517
+; arenatrap
+ call CheckHiddenOpponent
+ jr nz, .asm_37530 ; 3751a $14
+ ld a, BATTLE_VARS_SUBSTATUS5
+ call GetBattleVarPair
+ bit 7, [hl]
+ jr nz, .asm_37530 ; 37523 $b
+ set 7, [hl]
+ call $7e01
+ ld hl, CantEscapeNowText
+ jp FarBattleTextBox
+.asm_37530
+ call $7e77
+ jp $734e
+; 37536
+
+
+BattleCommand52: ; 37536
+; nightmare
+
+ call CheckHiddenOpponent
+ jr nz, .asm_3755d ; 37539 $22
+ call CheckSubstituteOpp
+ jr nz, .asm_3755d ; 3753e $1d
+ ld a, BATTLE_VARS_STATUS_OPP
+ call GetBattleVarPair
+ and $7
+ jr z, .asm_3755d ; 37547 $14
+ ld a, BATTLE_VARS_SUBSTATUS1_OPP
+ call GetBattleVarPair
+ bit 0, [hl]
+ jr nz, .asm_3755d ; 37550 $b
+ set 0, [hl]
+ call $7e01
+ ld hl, StartedNightmareText
+ jp FarBattleTextBox
+.asm_3755d
+ call $7e77
+ jp $734e
+; 37563
+
+
+BattleCommand53: ; 37563
+; defrost
+
+ ld a, BATTLE_VARS_STATUS
+ call GetBattleVarPair
+ bit 5, [hl]
+ ret z
+ res 5, [hl]
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37578 ; 37570 $6
+ ld a, [IsInBattle]
+ dec a
+ jr z, .asm_3757f ; 37576 $7
+.asm_37578
+ ld a, $20
+ call $3945
+ res 5, [hl]
+.asm_3757f
+ call $39c9
+ ld hl, WasDefrostedText
+ jp FarBattleTextBox
+; 37588
+
+
+BattleCommand54: ; 37588
+; curse
+
+ ld de, BattleMonType1
+ ld bc, PlayerStatLevels
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37599 ; 37591 $6
+ ld de, EnemyMonType1
+ ld bc, EnemyStatLevels
+.asm_37599
+ ld a, [de]
+ cp $8
+ jr z, .asm_375d7 ; 3759c $39
+ inc de
+ ld a, [de]
+ cp $8
+ jr z, .asm_375d7 ; 375a2 $33
+ ld a, [bc]
+ cp $d
+ jr c, .asm_375af ; 375a7 $6
+ inc bc
+ ld a, [bc]
+ cp $d
+ jr nc, .asm_3760a ; 375ad $5b
+.asm_375af
+ ld a, $1
+ ld [$c689], a
+ call $7e01
+ ld a, $2
+ call Function0x36532
+ call $4ffd
+ call $63e9
+ call ResetMiss
+ call $4ffd
+ call BattleCommand70
+ call $63b8
+ call ResetMiss
+ call $61b0
+ jp $63b8
+.asm_375d7
+ call CheckHiddenOpponent
+ jr nz, .asm_37604 ; 375da $28
+ call CheckSubstituteOpp
+ jr nz, .asm_37604 ; 375df $23
+ ld a, BATTLE_VARS_SUBSTATUS1_OPP
+ call GetBattleVarPair
+ bit 1, [hl]
+ jr nz, .asm_37604 ; 375e8 $1a
+ set 1, [hl]
+ call $7e01
+ ld hl, $4c9f
+ call $7e73
+ ld hl, $4c3f
+ call $7e73
+ call $3995
+ ld hl, PutACurseText
+ jp FarBattleTextBox
+.asm_37604
+ call $7e77
+ jp $734e
+.asm_3760a
+ ld b, $8
+ call $648f
+ call $7e77
+ ld hl, WontRiseAnymoreText
+ jp FarBattleTextBox
+; 37618
+
+
+BattleCommand55: ; 37618
+; protect
+
+ call Function0x3762c
+ ret c
+ ld a, BATTLE_VARS_SUBSTATUS1
+ call GetBattleVarPair
+ set 2, [hl]
+ call $7e01
+ ld hl, ProtectedItselfText
+ jp FarBattleTextBox
+; 3762c
+
+
+Function0x3762c: ; 3762c
+ ld de, $c679
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37637
+
+ ld de, PlayerDamageTaken
+.asm_37637
+ call $6abf
+ jr nz, .asm_37665
+
+ ld a, $3
+ call CleanGetBattleVarPair
+ bit 4, a
+ jr nz, .asm_37665
+
+ ld b, $ff
+ ld a, [de]
+ ld c, a
+.asm_37649
+ ld a, c
+ and a
+ jr z, .asm_37656
+
+ dec c
+ srl b
+ ld a, b
+ and a
+ jr nz, .asm_37649
+
+ jr .asm_37665
+
+.asm_37656
+ call FarBattleRNG
+ and a
+ jr z, .asm_37656
+
+ dec a
+ cp b
+ jr nc, .asm_37665
+
+ ld a, [de]
+ inc a
+ ld [de], a
+ and a
+ ret
+
+.asm_37665
+ xor a
+ ld [de], a
+ call $7e77
+ call $734e
+ scf
+ ret
+; 3766f
+
+
+BattleCommand5a: ; 3766f
+; endure
+
+ call Function0x3762c
+ ret c
+; get substatus1
+ ld a, BATTLE_VARS_SUBSTATUS1
+ call GetBattleVarPair
+ set 5, [hl] ; endure
+ call $7e01
+ ld hl, BracedItselfText
+ jp FarBattleTextBox
+; 37683
+
+
+BattleCommand56: ; 37683
+; spikes
+
+ ld hl, $c700
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3768e ; 37689 $3
+ ld hl, PlayerScreens
+.asm_3768e
+ bit 0, [hl]
+ jr nz, .asm_3769d ; 37690 $b
+ set 0, [hl]
+ call $7e01
+ ld hl, SpikesText
+ jp FarBattleTextBox
+.asm_3769d
+ jp Function0x37354
+; 376a0
+
+
+BattleCommand57: ; 376a0
+; foresight
+
+ ld a, [AttackMissed]
+ and a
+ jr nz, .asm_376bf ; 376a4 $19
+ call CheckHiddenOpponent
+ jr nz, .asm_376bf ; 376a9 $14
+ ld a, BATTLE_VARS_SUBSTATUS1_OPP
+ call GetBattleVarPair
+ bit 3, [hl]
+ jr nz, .asm_376bf ; 376b2 $b
+ set 3, [hl]
+ call $7e01
+ ld hl, IdentifiedText
+ jp FarBattleTextBox
+.asm_376bf
+ jp Function0x37354
+; 376c2
+
+
+BattleCommand58: ; 376c2
+; perishsong
+
+ ld hl, PlayerSubStatus1
+ ld de, EnemySubStatus1
+ bit 4, [hl]
+ jr z, .asm_376d1 ; 376ca $5
+ ld a, [de]
+ bit 4, a
+ jr nz, .asm_376f2 ; 376cf $21
+.asm_376d1
+ bit 4, [hl]
+ jr nz, .asm_376dc ; 376d3 $7
+ set 4, [hl]
+ ld a, $4
+ ld [PlayerPerishCount], a
+.asm_376dc
+ ld a, [de]
+ bit 4, a
+ jr nz, .asm_376e9 ; 376df $8
+ set 4, a
+ ld [de], a
+ ld a, $4
+ ld [$c67f], a
+.asm_376e9
+ call $7e01
+ ld hl, StartPerishText
+ jp FarBattleTextBox
+.asm_376f2
+ call $7e77
+ jp $734e
+; 376f8
+
+
+BattleCommand59: ; 376f8
+; startsandstorm
+
+ ld a, [Weather]
+ cp WEATHER_SANDSTORM
+ jr z, .asm_37712
+ ld a, WEATHER_SANDSTORM
+ ld [Weather], a
+ ld a, 5
+ ld [WeatherCount], a
+ call $7e01
+ ld hl, SandstormBrewedText
+ jp FarBattleTextBox
+.asm_37712
+ call $7e77
+ jp $734e
+; 37718
+
+
+BattleCommand5b: ; 37718
+; checkcurl
+
+ ld de, $c672
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37723 ; 3771e $3
+ ld de, $c67a
+.asm_37723
+ ld a, BATTLE_VARS_SUBSTATUS1
+ call CleanGetBattleVarPair
+ bit 6, a
+ jr z, .asm_37731 ; 3772a $5
+ ld b, $4
+ jp $7e8c
+.asm_37731
+ xor a
+ ld [de], a
+ ret
+; 37734
+
+
+BattleCommand5c: ; 37734
+; rolloutpower
+
+ ld a, BATTLE_VARS_STATUS
+ call CleanGetBattleVarPair
+ and $7
+ ret nz
+ ld hl, $c672
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37747 ; 37742 $3
+ ld hl, $c67a
+.asm_37747
+ ld a, [hl]
+ and a
+ jr nz, .asm_37750 ; 37749 $5
+ ld a, $1
+ ld [$c73e], a
+.asm_37750
+ ld a, [AttackMissed]
+ and a
+ jr z, .asm_3775e ; 37754 $8
+ ld a, BATTLE_VARS_SUBSTATUS1
+ call GetBattleVarPair
+ res 6, [hl]
+ ret
+.asm_3775e
+ inc [hl]
+ ld a, [hl]
+ ld b, a
+ cp $5
+ jr c, .asm_3776e ; 37763 $9
+ ld a, BATTLE_VARS_SUBSTATUS1
+ call GetBattleVarPair
+ res 6, [hl]
+ jr .asm_37775 ; 3776c $7
+.asm_3776e
+ ld a, BATTLE_VARS_SUBSTATUS1
+ call GetBattleVarPair
+ set 6, [hl]
+.asm_37775
+ ld a, BATTLE_VARS_SUBSTATUS2
+ call CleanGetBattleVarPair
+ bit 0, a
+ jr z, .asm_3777f ; 3777c $1
+ inc b
+.asm_3777f
+ dec b
+ jr z, .asm_37790 ; 37780 $e
+ ld hl, CurDamage + 1
+ sla [hl]
+ dec hl
+ rl [hl]
+ jr nc, .asm_3777f ; 3778a $f3
+ ld a, $ff
+ ld [hli], a
+ ld [hl], a
+.asm_37790
+ ret
+; 37791
+
+
+BattleCommand5d: ; 37791
+; unused
+ ret
+; 37792
+
+
+BattleCommand5e: ; 37792
+; furycutter
+
+ ld hl, $c678
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3779d ; 37798 $3
+ ld hl, $c680
+.asm_3779d
+ ld a, [AttackMissed]
+ and a
+ jp nz, Function0x377be
+ inc [hl]
+ ld a, [hl]
+ ld b, a
+ cp $6
+ jr c, .asm_377ad ; 377a9 $2
+ ld b, $5
+.asm_377ad
+ dec b
+ ret z
+ ld hl, CurDamage + 1
+ sla [hl]
+ dec hl
+ rl [hl]
+ jr nc, .asm_377ad ; 377b7 $f4
+ ld a, $ff
+ ld [hli], a
+ ld [hl], a
+ ret
+; 377be
+
+
+Function0x377be: ; 377be
+ push hl
+
+ ld hl, $c678
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_377ca
+ ld hl, $c680
+
+.asm_377ca
+ 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 GetBattleVarPair
+ bit 7, [hl]
+ jr nz, .asm_377f2
+
+ set 7, [hl]
+ call $7e01
+
+; 'fell in love!'
+ ld hl, FellInLoveText
+ jp FarBattleTextBox
+
+.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
+
+ ld a, $14
+ ld hl, $4bdd
+ rst FarCall
+ 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
+ ld a, $14
+ ld hl, $4bdd
+ rst FarCall
+ 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
+; checkhappiness
+ 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 $3119
+ ld a, $19
+ ld [$ffb7], a
+ ld b, $4
+ call $3124
+ 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 $46d2
+ ld a, [InLinkBattle]
+ cp $3
+ jr z, .asm_37889 ; 37885 $2
+ pop de
+ pop bc
+.asm_37889
+ ld a, [$d265]
+ and a
+ jp z, $7e77
+ ld a, [AttackMissed]
+ and a
+ jp nz, $7e77
+ push bc
+ call FarBattleRNG
+ 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 $7de9
+ ld d, [hl]
+ pop bc
+ ret
+.asm_378b7
+ pop bc
+ ld a, $3
+ ld [$c689], a
+ call $7e01
+ call $4ffd
+ ld hl, $5246
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_378ce ; 378c9 $3
+ ld hl, $5251
+.asm_378ce
+ ld a, $e
+ rst FarCall
+ jr c, .asm_378f3 ; 378d1 $20
+ ld hl, $4c8e
+ call $7e73
+ call $4ffd
+ ld hl, $4cef
+ call $7e73
+ call $4ffd
+ ld hl, RegainedHealthText
+ call FarBattleTextBox
+ call $4ffd
+ call $398e
+ jr .asm_37904 ; 378f1 $11
+.asm_378f3
+ call $4ffd
+ call $7ed5
+ jr nc, .asm_37904 ; 378f9 $9
+ call $7e77
+ ld hl, RefusedGiftText
+ call FarBattleTextBox
+.asm_37904
+ jp EndMoveEffect
+
+.table_37907
+ db $66, 40
+ db $b3, 80
+ db $cc, 120
+ db $ff
+; 3790e
+
+
+BattleCommand63: ; 3790e
+; checkfrustration
+
+ 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 $3119
+ ld a, $19
+ ld [$ffb7], a
+ ld b, $4
+ call $3124
+ 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, $c700
+ ld de, $c705
+.asm_3794a
+ bit 2, [hl]
+ jr nz, .asm_3795c ; 3794c $e
+ set 2, [hl]
+ ld a, $5
+ ld [de], a
+ call $7e01
+ ld hl, CoveredByVeilText
+ jp FarBattleTextBox
+.asm_3795c
+ call $7e77
+ jp $734e
+; 37962
+
+
+Function0x37962: ; 37962
+ push hl
+ ld hl, $c700
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3796e
+ ld hl, PlayerScreens
+
+.asm_3796e
+ bit 2, [hl]
+ pop hl
+ ret
+; 37972
+
+
+BattleCommand65: ; 37972
+ ld hl, $c700
+ 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 $7e80
+ ld hl, SafeguardProtectText
+ call FarBattleTextBox
+ jp EndMoveEffect
+; 37991
+
+
+BattleCommand66: ; 37991
+; getmagnitude
+
+ push bc
+ call FarBattleRNG
+ 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 $7e80
+ ld hl, MagnitudeText
+ call FarBattleTextBox
+ 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, $7aab
+
+ call $399c
+ call $7e01
+
+ ld c, 50
+ call DelayFrames
+
+ call $1d6e
+
+ ld a, $f
+ ld hl, $52f7
+ rst FarCall
+
+ ld a, $f
+ ld hl, $5380
+ rst FarCall
+
+ call $3317
+
+ ld a, $f
+ ld hl, $6d9f
+ rst FarCall
+
+ call $1c17
+ call $300b
+
+ ld hl, $c4a1
+ ld bc, $040a
+ call ClearBox
+
+ ld b, 1
+ call $3340
+ call $32f9
+ call $7a67
+
+ ld a, $f
+ ld hl, $52e0
+ rst FarCall
+
+ jp c, EndMoveEffect
+
+ ld hl, $6459
+ call $7e73
+ call $7ab1
+
+ ret
+
+.Enemy
+ ld a, [IsInBattle]
+ dec a
+ jp z, $7aab
+
+ call $7af6
+ jp z, $7aab
+
+ call $39b0
+ call $7e01
+ call $7a82
+
+ ld a, $f
+ ld hl, $52e0
+ rst FarCall
+ jp c, $52a3
+
+ xor a
+ ld [$c718], a
+
+ ld hl, $5517
+ call $7e73
+
+ ld hl, $557a
+ call $7e73
+
+ ld a, 1
+ ld [$d265], a
+
+ ld hl, $6cab
+ call $7e73
+
+ ld hl, $5c23
+ call $7e73
+
+ jr Function0x37ab1
+
+ ld a, [InLinkBattle]
+ and a
+ ret z
+
+ ld a, 1
+ ld [$d0ec], a
+
+ call $1d6e
+
+ ld hl, $68e4
+ call $7e73
+
+ call $1c17
+
+ xor a
+ ld [$d0ec], a
+
+ ret
+; 37a82
+
+ ld a, [InLinkBattle]
+ and a
+ ret z
+
+ call $1d6e
+ ld hl, $68e4
+ call $7e73
+ 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
+ call $7e77
+ jp $734e
+
+
+Function0x37ab1: ; 37ab1
+ ld a, $a
+ call CleanGetBattleVarPair
+ and $7
+ jr nz, .asm_37ac1
+ ld a, $0
+ call GetBattleVarPair
+ res 0, [hl]
+
+.asm_37ac1
+ call $72e7
+ ld hl, PlayerSubStatus1
+ res 7, [hl]
+ ld hl, EnemySubStatus1
+ res 7, [hl]
+ ld hl, PlayerSubStatus5
+ ld a, $4
+ call GetBattleVarPair
+ res 3, [hl]
+ res 4, [hl]
+ ld a, $13
+ call GetBattleVarPair
+ 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 .asm_37b01
+
+ ld hl, OTPartyMon1CurHP
+ ld a, [OTPartyCount]
+ ld d, a
+ ld a, [CurOTMon]
+ ld e, a
+.asm_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, $0030
+ 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 GetBattleVarPair
+ bit 7, [hl]
+ jr z, .asm_37b4a ; 37b40 $8
+ res 7, [hl]
+ ld hl, ShedLeechSeedText
+ call FarBattleTextBox
+.asm_37b4a
+ ld hl, PlayerScreens
+ ld de, $c730
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37b5b ; 37b53 $6
+ ld hl, $c700
+ ld de, $c731
+.asm_37b5b
+ bit 0, [hl]
+ jr z, .asm_37b69 ; 37b5d $a
+ res 0, [hl]
+ ld hl, BlewSpikesText
+ push de
+ call FarBattleTextBox
+ pop de
+.asm_37b69
+ ld a, [de]
+ and a
+ ret z
+ xor a
+ ld [de], a
+ ld hl, ReleasedByText
+ jp FarBattleTextBox
+; 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 $7e01
+ call $4ffd
+
+ ld hl, $4cef
+ ld a, $f
+ rst FarCall ; callab 3ccef
+
+ call $4ffd
+ call $3995
+
+; 'regained health!'
+ ld hl, RegainedHealthText
+ jp FarBattleTextBox
+
+.Full
+ call $7e77
+
+; 'hp is full!'
+ ld hl, HPIsFullText
+ jp FarBattleTextBox
+
+.Multipliers
+ dw GetEighthMaxHP
+ dw GetQuarterMaxHP
+ dw GetHalfMaxHP
+ dw GetMaxHP
+; 37be8
+
+
+BattleCommand6d: ; 37be8
+ ld a, [AttackMissed]
+ and a
+ ret nz
+
+ ld a, $3e
+ ld hl, $7ced
+ rst FarCall ; callba 3e 7ced
+ ret
+; 37bf4
+
+
+BattleCommand6e: ; 37bf4
+; startrain
+ ld a, WEATHER_RAIN
+ ld [Weather], a
+ ld a, 5
+ ld [WeatherCount], a
+ call $7e01
+ ld hl, DownpourText
+ jp FarBattleTextBox
+; 37c07
+
+
+BattleCommand6f: ; 37c07
+; startsun
+ ld a, WEATHER_SUN
+ ld [Weather], a
+ ld a, 5
+ ld [WeatherCount], a
+ call $7e01
+ ld hl, SunGotBrightText
+ jp FarBattleTextBox
+; 37c1a
+
+
+BattleCommand95: ; 37c1a
+; bellydrum
+ call $61c8
+ ld a, [AttackMissed]
+ and a
+ jr nz, .asm_37c4f ; 37c21 $2c
+ ld hl, $4c9f
+ ld a, $f
+ rst FarCall
+ ld hl, $4cde
+ ld a, $f
+ rst FarCall
+ jr nc, .asm_37c4f ; 37c2f $1e
+ push bc
+ call $7e01
+ pop bc
+ ld hl, $4c3f
+ ld a, $f
+ rst FarCall
+ call $3995
+ ld a, $5
+.asm_37c41
+ push af
+ call $61c8
+ pop af
+ dec a
+ jr nz, .asm_37c41 ; 37c47 $f8
+ ld hl, BellyDrumText
+ jp FarBattleTextBox
+.asm_37c4f
+ call $7e77
+ jp $734e
+; 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 $7e77
+ jp $734e
+.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 $7e01
+ ld hl, CopiedStatsText
+ jp FarBattleTextBox
+; 37c95
+
+
+BattleCommand9a: ; 37c95
+; mirrorcoat
+
+ ld a, $1
+ ld [AttackMissed], a
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
+ call CleanGetBattleVarPair
+ and a
+ ret z
+ ld b, a
+ ld hl, $45ec
+ ld a, $f
+ rst FarCall
+ ld a, b
+ cp $90
+ ret z
+ call $4833
+ ld a, [$d265]
+ and a
+ ret z
+ call Function0x36abf
+ ret z
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
+ call CleanGetBattleVarPair
+ 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
+; checkminimize
+
+ 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
+ jp $7e8c
+; 37d0d
+
+
+BattleCommand9b: ; 37d0d
+ ld hl, $c71d
+ ld de, $c727
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_37d1e ; 37d16 $6
+ ld hl, $c71e
+ ld de, $c729
+.asm_37d1e
+ 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
+ jp $7e8c
+; 37d34
+
+BattleCommand9c: ; 37d34
+; futuresight
+
+ call Function0x34548
+ jr nz, .asm_37d4b ; 37d37 $12
+ ld a, BATTLE_VARS_MOVE_ANIM
+ call CleanGetBattleVarPair
+ ld b, a
+ ld a, BATTLE_VARS_LAST_COUNTER_MOVE
+ call GetBattleVarPair
+ ld [hl], b
+ ld a, BATTLE_VARS_LAST_MOVE
+ call GetBattleVarPair
+ 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 $7e80
+ ld hl, ForesawAttackText
+ call FarBattleTextBox
+ 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 $7e77
+ call $734e
+ jp EndMoveEffect
+; 37d94
+
+
+BattleCommand9f: ; 37d94
+; thunderaccuracy
+
+ ld a, BATTLE_VARS_MOVE_TYPE
+ call GetBattleVarPair
+ 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 CleanGetBattleVarPair
+ 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, $67c3 ; Items
+ dec a
+ ld c, a
+ ld b, 0
+ ld a, 7
+ call AddNTimes
+ ld a, $1 ; BANK(Items)
+ call GetFarHalfword
+ ld b, l
+ ld c, h
+ pop hl
+ ret
+; 37de9
+
+
+INCBIN "baserom.gbc", $37de9, $37e80 - $37de9
+
+
+BattleCommandaa: ; 37e80
+; wait
+; Wait 40 frames.
+ ld c, 40
+ jp DelayFrames
+; 37e85
+
+
+BattleCommand38: ; 37e85
+; duped out
+; Used in multi-hit moves.
+ ld hl, .text
+ jp BattleTextBox
+.text
+ db "@"
+; 37e8c
+
+
+INCBIN "baserom.gbc", $37e8c, $37ead - $37e8c
+
+
+GetMoveData: ; 37ead
+; Get move struct a.
+ ld hl, Moves
+ ld bc, Move1 - Move0
+ call AddNTimes
+ ld a, Bank(Moves)
+ jp FarCopyBytes
+; 37ebb
+
+INCBIN "baserom.gbc", $37ebb, $37ee2 - $37ebb
+
+
+
--- a/main.asm
+++ b/main.asm
@@ -1126,14 +1126,34 @@
; 0xeba
-INCBIN "baserom.gbc",$eba,$fc8 - $eba
+INCBIN "baserom.gbc",$eba,$fb6 - $eba
+ClearBox: ; fb6
+; Fill a c*b box at hl with blank tiles.
+
+ ld a, " "
+.y
+ push bc
+ push hl
+.x
+ ld [hli], a
+ dec c
+ jr nz, .x
+ pop hl
+ ld bc, 20 ; screen width
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .y
+ ret
+; fc8
+
ClearTileMap: ; fc8
-; Fill the tile map with blank tiles
+; Fill TileMap with blank tiles
ld hl, TileMap
- ld a, $7f ; blank tile
- ld bc, 360 ; length of TileMap
+ ld a, " "
+ ld bc, 360 ; screen dimensions 20*18
call ByteFill
; We aren't done if the LCD is on
@@ -3271,8 +3291,10 @@
ret
; 0x3420
+
INCBIN "baserom.gbc",$3420,$3468 - $3420
+
GetItemName: ; 3468
push hl
push bc
@@ -3291,10 +3313,31 @@
pop bc
pop hl
ret
-; 0x3487
+; 3487
-INCBIN "baserom.gbc",$3487,$3856 - $3487
+INCBIN "baserom.gbc", $3487, $34f8 - $3487
+
+
+GetMoveName: ; 34f8
+ push hl
+; move name
+ ld a, $2 ; move names
+ ld [$cf61], a
+; move id
+ ld a, [$d265]
+ ld [$cf60], a
+
+ call GetName
+ ld de, StringBuffer1
+ pop hl
+ ret
+; 350c
+
+
+INCBIN "baserom.gbc", $350c, $3856 - $350c
+
+
GetBaseStats: ; 3856
push bc
push de
@@ -3483,8 +3526,27 @@
jp AddNTimes
; 392d
-INCBIN "baserom.gbc", $392d, $397d - $392d
+INCBIN "baserom.gbc", $392d, $395d - $392d
+
+
+BattlePartyAttr: ; 395d
+; Get attribute a from the active monster's party struct.
+ push bc
+ ld c, a
+ ld b, 0
+ ld hl, PartyMons
+ add hl, bc
+ ld a, [CurBattleMon]
+ call GetPartyLocation
+ pop bc
+ ret
+; 396d
+
+
+INCBIN "baserom.gbc", $396d, $397d - $396d
+
+
ResetDamage: ; 397d
xor a
ld [CurDamage], a
@@ -5666,9 +5728,17 @@
db $98, $88 ; mysticalman
; 2715c
-INCBIN "baserom.gbc",$2715c,$27a2d - $2715c
+INCBIN "baserom.gbc", $2715c, $271f4 - $2715c
+MoveEffectsPointers: ; 271f4
+INCBIN "baserom.gbc", $271f4, $2732e - $271f4
+
+MoveEffects: ; 2732e
+
+INCBIN "baserom.gbc", $2732e, $27a2d - $2732e
+
+
SECTION "bankA",DATA,BANK[$A]
INCBIN "baserom.gbc",$28000,$2a2a0 - $28000
@@ -6006,15 +6076,9 @@
SECTION "bankD",DATA,BANK[$D]
-INCBIN "baserom.gbc",$34000,$34bb1 - $34000
+INCLUDE "battle/effect_commands.asm"
-TypeMatchup: ; 34bb1
-INCLUDE "battle/type_matchup.asm"
-; 34cfd
-INCBIN "baserom.gbc",$34cfd,$37ee2 - $34cfd
-
-
SECTION "bankE",DATA,BANK[$E]
INCBIN "baserom.gbc",$38000,$39999 - $38000
@@ -6027,8 +6091,92 @@
SECTION "bankF",DATA,BANK[$F]
-INCBIN "baserom.gbc",$3C000,$3d123 - $3C000
+INCBIN "baserom.gbc", $3c000, $3cc83 - $3c000
+GetEighthMaxHP: ; 3cc83
+; output: bc
+ call GetQuarterMaxHP
+; assumes nothing can have 1024 or more hp
+; halve result
+ srl c
+; round up
+ ld a, c
+ and a
+ jr nz, .end
+ inc c
+.end
+ ret
+; 3cc8e
+
+
+GetQuarterMaxHP: ; 3cc8e
+; output: bc
+ call GetMaxHP
+
+; quarter result
+ srl b
+ rr c
+ srl b
+ rr c
+
+; assumes nothing can have 1024 or more hp
+; round up
+ ld a, c
+ and a
+ jr nz, .end
+ inc c
+.end
+ ret
+; 3cc9f
+
+
+GetHalfMaxHP: ; 3cc9f
+; output: bc
+ call GetMaxHP
+
+; halve reslut
+ srl b
+ rr c
+
+; floor = 1
+ ld a, c
+ or b
+ jr nz, .end
+ inc c
+.end
+ ret
+; 3ccac
+
+
+GetMaxHP: ; 3ccac
+; output: bc, $d1ea-b
+
+; player
+ ld hl, BattleMonMaxHP
+
+; whose turn?
+ ld a, [hBattleTurn]
+ and a
+ jr z, .gethp
+
+; enemy
+ ld hl, EnemyMonMaxHP
+
+.gethp
+ ld a, [hli]
+ ld [$d1eb], a
+ ld b, a
+
+ ld a, [hl]
+ ld [$d1ea], a
+ ld c, a
+ ret
+; 3ccc2
+
+
+INCBIN "baserom.gbc", $3ccc2, $3d123 - $3ccc2
+
+
; These functions check if the current opponent is a gym leader or one of a
; few other special trainers.
@@ -6894,9 +7042,16 @@
ret
; 0x3fd26
-INCBIN "baserom.gbc",$3fd26,$3fe86 - $3fd26
+ dw $0000 ; padding
+
+BattleCommandPointers: ; 3fd28
+
+INCLUDE "battle/effect_command_pointers.asm"
+
+
+
SECTION "bank10",DATA,BANK[$10]
INCBIN "baserom.gbc",$40000,$40c65-$40000
@@ -14626,7 +14781,366 @@
; japanese mystery gift gfx
INCBIN "gfx/misc/mystery_gift_jp.2bpp"
-INCBIN "baserom.gbc",$105db0,$105ef6 - $105db0
+
+DisplayUsedMoveText: ; 105db0
+; battle command 03
+ ld hl, UsedMoveText
+ call BattleTextBox
+ jp WaitBGMap
+; 105db9
+
+
+UsedMoveText: ; 105db9
+
+; this is a stream of text and asm from 105db9 to 105ef6
+
+; print actor name
+ text_jump _ActorNameText, BANK(_ActorNameText)
+ start_asm
+
+; ????
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .start
+
+; append used move list
+ ld a, [PlayerMoveAnimation]
+ call UpdateUsedMoves
+
+.start
+; get address for last move
+ ld a, $13 ; last move
+ call GetBattleVarPair
+ ld d, h
+ ld e, l
+
+; get address for last counter move
+ ld a, $11
+ call GetBattleVarPair
+
+; get move animation (id)
+ ld a, $c ; move animation
+ call CleanGetBattleVarPair
+ ld [$d265], a
+
+; check actor ????
+ push hl
+ callba Function0x34548
+ pop hl
+ jr nz, .grammar
+
+; update last move
+ ld a, [$d265]
+ ld [hl], a
+ ld [de], a
+
+.grammar
+ call GetMoveGrammar
+; $d265 now contains MoveGrammar
+
+
+; everything except 'instead' made redundant in localization
+
+; check obedience
+ ld a, [$c6f4]
+ and a
+ ld hl, UsedMove2Text
+ ret nz
+
+; check move grammar
+ ld a, [$d265]
+ cp $3
+ ld hl, UsedMove2Text
+ ret c
+ ld hl, UsedMove1Text
+ ret
+; 105e04
+
+UsedMove1Text: ; 105e04
+ text_jump _UsedMove1Text, BANK(_UsedMove1Text)
+ start_asm
+ jr Function105e10
+; 105e0b
+
+UsedMove2Text: ; 105e0b
+ text_jump _UsedMove2Text, BANK(_UsedMove2Text)
+ start_asm
+; 105e10
+
+Function105e10: ; 105e10
+; check obedience
+ ld a, [$c6f4]
+ and a
+ jr z, GetMoveNameText
+; print "instead,"
+ ld hl, UsedInsteadText
+ ret
+; 105e1a
+
+UsedInsteadText: ; 105e1a
+ text_jump _UsedInsteadText, BANK(_UsedInsteadText)
+ start_asm
+; 105e1f
+
+GetMoveNameText: ; 105e1f
+ ld hl, MoveNameText
+ ret
+; 105e23
+
+MoveNameText: ; 105e23
+ text_jump _MoveNameText, BANK(_MoveNameText)
+ start_asm
+; 105e28
+
+GetUsedMoveTextEnder: ; 105e28
+; get start address
+ ld hl, .endusedmovetexts
+
+; get move id
+ ld a, [$d265]
+
+; 2-byte pointer
+ add a
+
+; seek
+ push bc
+ ld b, $0
+ ld c, a
+ add hl, bc
+ pop bc
+
+; get pointer to usedmovetext ender
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ret
+; 105e39
+
+.endusedmovetexts ; 105e39
+ dw EndUsedMove1Text
+ dw EndUsedMove2Text
+ dw EndUsedMove3Text
+ dw EndUsedMove4Text
+ dw EndUsedMove5Text
+; 105e43
+
+EndUsedMove1Text: ; 105e43
+ text_jump _EndUsedMove1Text, BANK(_EndUsedMove1Text)
+ db "@"
+; 105e48
+EndUsedMove2Text: ; 105e48
+ text_jump _EndUsedMove2Text, BANK(_EndUsedMove2Text)
+ db "@"
+; 105e4d
+EndUsedMove3Text: ; 105e4d
+ text_jump _EndUsedMove3Text, BANK(_EndUsedMove3Text)
+ db "@"
+; 105e52
+EndUsedMove4Text: ; 105e52
+ text_jump _EndUsedMove4Text, BANK(_EndUsedMove4Text)
+ db "@"
+; 105e57
+EndUsedMove5Text: ; 105e57
+ text_jump _EndUsedMove5Text, BANK(_EndUsedMove5Text)
+ db "@"
+; 105e5c
+
+
+GetMoveGrammar: ; 105e5c
+; store move grammar type in $d265
+
+ push bc
+; c = move id
+ ld a, [$d265]
+ ld c, a
+ ld b, $0
+
+; read grammar table
+ ld hl, MoveGrammar
+.loop
+ ld a, [hli]
+; end of table?
+ cp $ff
+ jr z, .end
+; match?
+ cp c
+ jr z, .end
+; advance grammar type at $00
+ and a
+ jr nz, .loop
+; next grammar type
+ inc b
+ jr .loop
+
+.end
+; $d265 now contains move grammar
+ ld a, b
+ ld [$d265], a
+
+; we're done
+ pop bc
+ ret
+; 105e7a
+
+MoveGrammar: ; 105e7a
+; made redundant in localization
+; each move is given an identifier for what usedmovetext to use (0-4):
+
+; 0
+ db SWORDS_DANCE
+ db GROWTH
+ db STRENGTH
+ db HARDEN
+ db MINIMIZE
+ db SMOKESCREEN
+ db WITHDRAW
+ db DEFENSE_CURL
+ db EGG_BOMB
+ db SMOG
+ db BONE_CLUB
+ db FLASH
+ db SPLASH
+ db ACID_ARMOR
+ db BONEMERANG
+ db REST
+ db SHARPEN
+ db SUBSTITUTE
+ db MIND_READER
+ db SNORE
+ db PROTECT
+ db SPIKES
+ db ENDURE
+ db ROLLOUT
+ db SWAGGER
+ db SLEEP_TALK
+ db HIDDEN_POWER
+ db PSYCH_UP
+ db EXTREMESPEED
+ db 0 ; end set
+
+; 1
+ db RECOVER
+ db TELEPORT
+ db BIDE
+ db SELFDESTRUCT
+ db AMNESIA
+ db FLAIL
+ db 0 ; end set
+
+; 2
+ db MEDITATE
+ db AGILITY
+ db MIMIC
+ db DOUBLE_TEAM
+ db BARRAGE
+ db TRANSFORM
+ db STRUGGLE
+ db SCARY_FACE
+ db 0 ; end set
+
+; 3
+ db POUND
+ db SCRATCH
+ db VICEGRIP
+ db WING_ATTACK
+ db FLY
+ db BIND
+ db SLAM
+ db HORN_ATTACK
+ db WRAP
+ db THRASH
+ db TAIL_WHIP
+ db LEER
+ db BITE
+ db GROWL
+ db ROAR
+ db SING
+ db PECK
+ db ABSORB
+ db STRING_SHOT
+ db EARTHQUAKE
+ db FISSURE
+ db DIG
+ db TOXIC
+ db SCREECH
+ db METRONOME
+ db LICK
+ db CLAMP
+ db CONSTRICT
+ db POISON_GAS
+ db BUBBLE
+ db SLASH
+ db SPIDER_WEB
+ db NIGHTMARE
+ db CURSE
+ db FORESIGHT
+ db CHARM
+ db ATTRACT
+ db ROCK_SMASH
+ db 0 ; end set
+
+; all other moves = 4
+ db $ff ; end
+; 105ed0
+
+
+UpdateUsedMoves: ; 105ed0
+; append move a to PlayerUsedMoves unless it has already been used
+
+ push bc
+; start of list
+ ld hl, PlayerUsedMoves
+; get move id
+ ld b, a
+; loop count
+ ld c, NUM_MOVES
+
+.loop
+; get move from the list
+ ld a, [hli]
+; not used yet?
+ and a
+ jr z, .add
+; already used?
+ cp b
+ jr z, .quit
+; next byte
+ dec c
+ jr nz, .loop
+
+; if the list is full and the move hasn't already been used
+; shift the list back one byte, deleting the first move used
+; this can occur with struggle or a new learned move
+ ld hl, PlayerUsedMoves + 1
+; 1 = 2
+ ld a, [hld]
+ ld [hli], a
+; 2 = 3
+ inc hl
+ ld a, [hld]
+ ld [hli], a
+; 3 = 4
+ inc hl
+ ld a, [hld]
+ ld [hl], a
+; 4 = new move
+ ld a, b
+ ld [PlayerUsedMoves + 3], a
+ jr .quit
+
+.add
+; go back to the byte we just inced from
+ dec hl
+; add the new move
+ ld [hl], b
+
+.quit
+; list updated
+ pop bc
+ ret
+; 105ef6
+
+
HallOfFame2: ; 0x105ef6
ret
--- a/wram.asm
+++ b/wram.asm
@@ -604,7 +604,7 @@
EnemyDamageTaken: ; c684
ds 2
- ds 4
+ ds 5
BattleScriptBuffer: ; c68a
ds 40
@@ -612,7 +612,7 @@
BattleScriptBufferLoc: ; c6b2
ds 2
- ds 25
+ ds 24
PlayerStatLevels: ; c6cc
; 07 neutral