ref: 7ccb6d91e62fdb1e2857da87e16ececceb52c519
parent: ef20124213e77852e2433dee42ec1a08f4fd1de0
author: yenatch <[email protected]>
date: Tue Dec 17 20:11:06 EST 2013
split out the battle engine into battle/core.asm
--- /dev/null
+++ b/battle/core.asm
@@ -1,0 +1,9479 @@
+; Core components of the battle engine.
+
+
+Function3c000: ; 3c000
+ xor a
+ ld [$c664], a
+ ld [$c6fc], a
+ ld [$d0ec], a
+ ld [BattleEnded], a
+ inc a
+ ld [$d264], a
+ ld hl, OTPartyMon1CurHP
+ ld bc, $002f
+ ld d, $3
+.asm_3c019
+ inc d
+ ld a, [hli]
+ or [hl]
+ jr nz, .asm_3c021
+ add hl, bc
+ jr .asm_3c019
+
+.asm_3c021
+ ld a, d
+ ld [$d430], a
+ ld a, [InLinkBattle]
+ and a
+ jr z, .asm_3c031
+ ld a, [$ffcb]
+ cp $2
+.data_3c02f
+ db $28
+ db $1b
+
+.asm_3c031
+ ld a, [IsInBattle]
+ dec a
+ jr z, .asm_3c047
+ xor a
+ ld [$c718], a
+ call Function3d834
+ call Function3d867
+ call Function3dc18
+ call Function3d4e1
+
+.asm_3c047
+ ld c, $28
+ call DelayFrames
+ call Function309d
+ call Function3d873
+ ld a, d
+ and a
+ jp z, LostBattle
+ call Function30b4
+ ld a, [BattleType]
+ cp $2
+ jp z, Function3c0e2
+ cp $3
+ jp z, Function3c0e2
+ xor a
+ ld [CurPartyMon], a
+.asm_3c06b
+ call Function3d887
+ jr nz, .asm_3c076
+ ld hl, CurPartyMon
+ inc [hl]
+ jr .asm_3c06b
+
+.asm_3c076
+ ld a, [CurBattleMon]
+ ld [$c71a], a
+ ld a, [CurPartyMon]
+ ld [CurBattleMon], a
+ inc a
+ ld hl, PartyCount
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld a, [hl]
+ ld [CurPartySpecies], a
+ ld [TempBattleMonSpecies], a
+ ld hl, $c505
+ ld a, $9
+ call Function3d490
+ call Function309d
+ call Function3d57a
+ call Function3da0d
+ call Function3dab1
+ call Function3f26d
+ call Function3dbde
+ call Function3dc18
+ call Function3db5f
+ call EmptyBattleTextBox
+ call Function309d
+ call SetPlayerTurn
+ call Function3dc23
+ ld a, [InLinkBattle]
+ and a
+ jr z, .asm_3c0df
+ ld a, [$ffcb]
+ cp $2
+ jr nz, .asm_3c0df
+ xor a
+ ld [$c718], a
+ call Function3d834
+ call Function3d867
+ call Function3dc18
+ call Function3d4e1
+ call SetEnemyTurn
+ call Function3dc23
+
+.asm_3c0df
+ jp Function3c12f
+; 3c0e2
+
+Function3c0e2: ; 3c0e2
+ jp Function3e139
+; 3c0e5
+
+
+
+Function3c0e5: ; 3c0e5
+ call Function30b4
+ ld a, [$d0ee]
+ and $c0
+ add $2
+ ld [$d0ee], a
+ ld a, [InLinkBattle]
+ and a
+ ld hl, $47bd
+ jr z, .asm_3c115
+ ld a, [$d0ee]
+ and $c0
+ ld [$d0ee], a
+ ld hl, $47cf
+ call Function3d2e0
+ jr nc, .asm_3c115
+ ld hl, $cd2a
+ bit 4, [hl]
+ jr nz, .asm_3c118
+ ld hl, $5863
+
+.asm_3c115
+ call StdBattleTextBox
+
+.asm_3c118
+ call Function3ceec
+ call Function3d2e0
+ jr c, .asm_3c126
+
+ ld de, SFX_RUN
+ call PlaySFX
+
+.asm_3c126
+ call SetPlayerTurn
+ ld a, 1
+ ld [BattleEnded], a
+ ret
+; 3c12f
+
+Function3c12f: ; 3c12f
+ call Function3c1bf
+ call Function3c3f5
+ jp c, .asm_3c1be
+ xor a
+ ld [$c710], a
+ ld [$c711], a
+ ld [$d264], a
+ ld [$c73f], a
+ ld [$c740], a
+ ld [CurDamage], a
+ ld [$d257], a
+ call Function3c27c
+ call UpdateBattleMonInParty
+ callba AIChooseMove
+ call Function3d2f1
+ jr nz, .asm_3c174
+ callba Function100da5
+ callba Function100641
+ callba Function100dd8
+ jp c, .asm_3c1be
+
+.asm_3c174
+ call Function3c410
+ jr c, .asm_3c18a
+.asm_3c179
+ call Function3e139
+ jr c, .asm_3c1be
+ ld a, [BattleEnded]
+ and a
+ jr nz, .asm_3c1be
+ ld a, [$d232]
+ and a
+ jr nz, .asm_3c1be
+
+.asm_3c18a
+ call Function3c434
+ jr nz, .asm_3c179
+ call Function3c300
+ jr c, .asm_3c1be
+ call Function3c314
+ jr c, .asm_3c19e
+ call Function3c5fe
+ jr .asm_3c1a1
+
+.asm_3c19e
+ call Function3c664
+
+.asm_3c1a1
+ call Function3d2e0
+ jr c, .asm_3c1be
+ ld a, [$d232]
+ and a
+ jr nz, .asm_3c1be
+ ld a, [BattleEnded]
+ and a
+ jr nz, .asm_3c1be
+ call Function3c1d6
+ ld a, [BattleEnded]
+ and a
+ jr nz, .asm_3c1be
+ jp Function3c12f
+
+.asm_3c1be
+ ret
+; 3c1bf
+
+Function3c1bf: ; 3c1bf
+ ret
+; 3c1c0
+
+
+Function3c1c0: ; 3c1c0
+ ld a, $5
+ call GetSRAMBank
+ ld hl, $a89b
+ inc [hl]
+ jr nz, .asm_3c1d2
+ dec hl
+ inc [hl]
+ jr nz, .asm_3c1d2
+ dec [hl]
+ inc hl
+ dec [hl]
+
+.asm_3c1d2
+ call CloseSRAM
+ ret
+; 3c1d6
+
+
+Function3c1d6: ; 3c1d6
+ ld a, [$ffcb]
+ cp $1
+ jr z, .asm_3c1fe
+ call Function3c23c
+ ret c
+ call Function3ca26
+ call Function3c23c
+ ret c
+ call HandleWeather
+ call Function3c23c
+ ret c
+ call Function3c874
+ call Function3c23c
+ ret c
+ call Function3c801
+ call Function3c23c
+ ret c
+ jr .asm_3c21e
+
+.asm_3c1fe
+ call Function3c25c
+ ret c
+ call Function3ca26
+ call Function3c25c
+ ret c
+ call HandleWeather
+ call Function3c25c
+ ret c
+ call Function3c874
+ call Function3c25c
+ ret c
+ call Function3c801
+ call Function3c25c
+ ret c
+
+.asm_3c21e
+ call Function3c8eb
+ call Function3c93c
+ call Function3ca8f
+ call Function3cafb
+ call Function3cb36
+ call Function3de97
+ call Function3dcf9
+ call UpdateBattleMonInParty
+ call Function309d
+ jp Function3c4df
+; 3c23c
+
+Function3c23c: ; 3c23c
+ call Function3c710
+ jr nz, .asm_3c24a
+ call Function3d14e
+ ld a, [BattleEnded]
+ and a
+ jr nz, .asm_3c25a
+
+.asm_3c24a
+ call Function3c70b
+ jr nz, .asm_3c258
+ call Function3cd55
+ ld a, [BattleEnded]
+ and a
+ jr nz, .asm_3c25a
+
+.asm_3c258
+ and a
+ ret
+
+.asm_3c25a
+ scf
+ ret
+; 3c25c
+
+Function3c25c: ; 3c25c
+ call Function3c70b
+ jr nz, .asm_3c26a
+ call Function3cd55
+ ld a, [BattleEnded]
+ and a
+ jr nz, .asm_3c27a
+
+.asm_3c26a
+ call Function3c710
+ jr nz, .asm_3c278
+ call Function3d14e
+ ld a, [BattleEnded]
+ and a
+ jr nz, .asm_3c27a
+
+.asm_3c278
+ and a
+ ret
+
+.asm_3c27a
+ scf
+ ret
+; 3c27c
+
+Function3c27c: ; 3c27c
+ ld a, [$ffcb]
+ cp $1
+ jr z, .asm_3c287
+ call .asm_3c28a
+ jr .asm_3c296
+
+.asm_3c287
+ call .asm_3c296
+.asm_3c28a
+ call SetPlayerTurn
+ ld de, PartyMon1Item
+ ld a, [CurBattleMon]
+ ld b, a
+ jr .asm_3c2a0
+
+.asm_3c296
+ call SetEnemyTurn
+ ld de, OTPartyMon1Item
+ ld a, [CurOTMon]
+ ld b, a
+
+.asm_3c2a0
+ push de
+ push bc
+ callab GetUserItem
+ ld a, [hl]
+ ld [$d265], a
+ sub $98
+ pop bc
+ pop de
+ ret nz
+ ld [hl], a
+ ld h, d
+ ld l, e
+ ld a, b
+ call GetPartyLocation
+ xor a
+ ld [hl], a
+ ld a, $2
+ call _GetBattleVar
+ push af
+ set 7, [hl]
+ ld a, $c
+ call _GetBattleVar
+ push hl
+ push af
+ xor a
+ ld [hl], a
+ ld [AttackMissed], a
+ ld [EffectFailed], a
+ callba BattleCommand77
+ pop af
+ pop hl
+ ld [hl], a
+ call GetItemName
+ ld hl, $4bde
+ call StdBattleTextBox
+ callab BattleCommand8c
+ pop af
+ bit 7, a
+ ret nz
+ xor a
+ ld [$cfca], a
+ ld de, $0103
+ call Function3ee0f
+ call Function3c8e4
+ ld hl, $4d97
+ jp StdBattleTextBox
+; 3c300
+
+Function3c300: ; 3c300
+ ld a, [InLinkBattle]
+ and a
+ jr z, .asm_3c30d
+ ld a, [$d430]
+ cp $f
+ jr z, .asm_3c30f
+
+.asm_3c30d
+ and a
+ ret
+
+.asm_3c30f
+ call Function3c0e5
+ scf
+ ret
+; 3c314
+
+Function3c314: ; 3c314
+ ld a, [InLinkBattle]
+ and a
+ jr z, .asm_3c35b
+ ld a, [$d430]
+ cp $e
+ jr z, .asm_3c35b
+ cp $d
+ jr z, .asm_3c35b
+ sub $4
+ jr c, .asm_3c35b
+ ld a, [$d0ec]
+ cp $2
+ jr nz, .asm_3c34c
+ ld a, [$ffcb]
+ cp $2
+ jr z, .asm_3c341
+ call BattleRandom
+ cp $80
+ jp c, .asm_3c3f1
+ jp Function3c3f3
+
+.asm_3c341
+ call BattleRandom
+ cp $80
+ jp c, Function3c3f3
+ jp .asm_3c3f1
+
+.asm_3c34c
+ callab Function3846c
+ call SetEnemyTurn
+ call Function3dc23
+ jp Function3c3f3
+
+.asm_3c35b
+ ld a, [$d0ec]
+ and a
+ jp nz, .asm_3c3f1
+ call Function3c5b4
+ jr z, .asm_3c36d
+ jp c, .asm_3c3f1
+ jp Function3c3f3
+
+.asm_3c36d
+ call SetPlayerTurn
+ callab GetUserItem
+ push bc
+ callab GetOpponentItem
+ pop de
+ ld a, d
+ cp $4a
+ jr nz, .asm_3c391
+ ld a, b
+ cp $4a
+ jr z, .asm_3c39f
+ call BattleRandom
+ cp e
+ jr nc, .asm_3c3c5
+ jp .asm_3c3f1
+
+.asm_3c391
+ ld a, b
+ cp $4a
+ jr nz, .asm_3c3c5
+ call BattleRandom
+ cp c
+ jr nc, .asm_3c3c5
+ jp Function3c3f3
+
+.asm_3c39f
+ ld a, [$ffcb]
+ cp $2
+ jr z, .asm_3c3b5
+ call BattleRandom
+ cp c
+ jp c, Function3c3f3
+ call BattleRandom
+ cp e
+ jp c, .asm_3c3f1
+ jr .asm_3c3c5
+
+.asm_3c3b5
+ call BattleRandom
+ cp e
+ jp c, .asm_3c3f1
+ call BattleRandom
+ cp c
+ jp c, Function3c3f3
+ jr .asm_3c3c5
+
+.asm_3c3c5
+ ld de, BattleMonSpd
+ ld hl, EnemyMonSpd
+ ld c, $2
+ call StringCmp
+ jr z, .asm_3c3d8
+ jp nc, .asm_3c3f1
+ jp Function3c3f3
+
+.asm_3c3d8
+ ld a, [$ffcb]
+ cp $2
+ jr z, .asm_3c3e9
+ call BattleRandom
+ cp $80
+ jp c, .asm_3c3f1
+ jp Function3c3f3
+
+.asm_3c3e9
+ call BattleRandom
+ cp $80
+ jp c, Function3c3f3
+.asm_3c3f1
+ scf
+ ret
+; 3c3f3
+
+Function3c3f3: ; 3c3f3
+ and a
+ ret
+; 3c3f5
+
+Function3c3f5: ; 3c3f5
+ ld a, [BattleType]
+ cp $6
+ jr nz, .asm_3c40e
+ ld a, [$dc79]
+ and a
+ jr nz, .asm_3c40e
+ ld a, [$d0ee]
+ and $c0
+ add $2
+ ld [$d0ee], a
+ scf
+ ret
+
+.asm_3c40e
+ and a
+ ret
+; 3c410
+
+Function3c410: ; 3c410
+ ld a, [PlayerSubStatus4]
+ and $20
+ jp nz, Function3c432
+ ld hl, EnemySubStatus3
+ res 3, [hl]
+ ld hl, PlayerSubStatus3
+ res 3, [hl]
+ ld a, [hl]
+ and $12
+ jp nz, Function3c432
+ ld hl, PlayerSubStatus1
+ bit 6, [hl]
+ jp nz, Function3c432
+ and a
+ ret
+; 3c432
+
+Function3c432: ; 3c432
+ scf
+ ret
+; 3c434
+
+Function3c434: ; 3c434
+ call Function3c410
+ jp c, .asm_3c4ba
+ ld hl, PlayerSubStatus5
+ bit 4, [hl]
+ jr z, .asm_3c449
+ ld a, [LastPlayerMove]
+ ld [CurPlayerMove], a
+ jr .asm_3c47c
+
+.asm_3c449
+ ld a, [$d0ec]
+ cp $2
+ jr z, .asm_3c4ce
+ and a
+ jr nz, .asm_3c4b5
+ ld a, [PlayerSubStatus3]
+ and $1
+ jr nz, .asm_3c4ba
+ xor a
+ ld [$d235], a
+ inc a
+ ld [FXAnimIDLo], a
+ call Function3e4bc
+ push af
+ call Function30b4
+ call UpdateBattleHuds
+ ld a, [CurPlayerMove]
+ cp $a5
+ jr z, .asm_3c476
+ call PlayClickSFX
+
+.asm_3c476
+ ld a, $1
+ ld [hBGMapMode], a
+ pop af
+ ret nz
+
+.asm_3c47c
+ call SetPlayerTurn
+ callab UpdateMoveData
+ xor a
+ ld [$c732], a
+ ld a, [PlayerMoveEffect]
+ cp $77
+ jr z, .asm_3c494
+ xor a
+ ld [PlayerFuryCutterCount], a
+
+.asm_3c494
+ ld a, [PlayerMoveEffect]
+ cp $51
+ jr z, .asm_3c4a4
+ ld hl, PlayerSubStatus4
+ res 6, [hl]
+ xor a
+ ld [$c72b], a
+
+.asm_3c4a4
+ ld a, [PlayerMoveEffect]
+ cp $6f
+ jr z, .asm_3c4c9
+ cp $74
+ jr z, .asm_3c4c9
+ xor a
+ ld [$c679], a
+ jr .asm_3c4c9
+
+.asm_3c4b5
+ ld hl, PlayerSubStatus3
+ res 0, [hl]
+
+.asm_3c4ba
+ xor a
+ ld [PlayerFuryCutterCount], a
+ ld [$c679], a
+ ld [$c72b], a
+ ld hl, PlayerSubStatus4
+ res 6, [hl]
+
+.asm_3c4c9
+ call Function3e7c1
+ xor a
+ ret
+
+.asm_3c4ce
+ xor a
+ ld [PlayerFuryCutterCount], a
+ ld [$c679], a
+ ld [$c72b], a
+ ld hl, PlayerSubStatus4
+ res 6, [hl]
+ xor a
+ ret
+; 3c4df
+
+Function3c4df: ; 3c4df
+ ld a, [$ffcb]
+ cp $1
+ jr z, .asm_3c4ea
+ call .asm_3c4ed
+ jr .asm_3c518
+
+.asm_3c4ea
+ call .asm_3c518
+.asm_3c4ed
+ ld hl, PlayerSubStatus5
+ bit 4, [hl]
+ ret z
+ ld a, [PlayerEncoreCount]
+ dec a
+ ld [PlayerEncoreCount], a
+ jr z, .asm_3c50a
+ ld hl, BattleMonPPMove1
+ ld a, [CurMoveNum]
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld a, [hl]
+ and $3f
+ ret nz
+
+.asm_3c50a
+ ld hl, PlayerSubStatus5
+ res 4, [hl]
+ call SetEnemyTurn
+ ld hl, $4c8a
+ jp StdBattleTextBox
+
+.asm_3c518
+ ld hl, EnemySubStatus5
+ bit 4, [hl]
+ ret z
+ ld a, [EnemyEncoreCount]
+ dec a
+ ld [EnemyEncoreCount], a
+ jr z, .asm_3c535
+ ld hl, EnemyMonPPMove1
+ ld a, [CurEnemyMoveNum]
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld a, [hl]
+ and $3f
+ ret nz
+
+.asm_3c535
+ ld hl, EnemySubStatus5
+ res 4, [hl]
+ call SetPlayerTurn
+ ld hl, $4c8a
+ jp StdBattleTextBox
+; 3c543
+
+
+Function3c543: ; 3c543
+ ld a, [IsInBattle]
+ dec a
+ jr nz, .Stay
+
+ ld a, [PlayerSubStatus5]
+ bit 7, a
+ jr nz, .Stay
+
+ ld a, [$c731]
+ and a
+ jr nz, .Stay
+
+ ld a, [EnemyMonStatus]
+ and 1 << FRZ | SLP
+ jr nz, .Stay
+
+ ld a, [TempEnemyMonSpecies]
+ ld de, 1
+ ld hl, .Always
+ call IsInArray
+ jr c, .Flee
+
+ call BattleRandom
+ ld b, a
+ cp $80
+ jr nc, .Stay
+
+ push bc
+ ld a, [TempEnemyMonSpecies]
+ ld de, 1
+ ld hl, .Often
+ call IsInArray
+ pop bc
+ jr c, .Flee
+
+ ld a, b
+ cp $1a
+ jr nc, .Stay
+
+ ld a, [TempEnemyMonSpecies]
+ ld de, 1
+ ld hl, .Sometimes
+ call IsInArray
+ jr c, .Flee
+
+.Stay
+ and a
+ ret
+
+.Flee
+ scf
+ ret
+; 3c59a
+
+.Sometimes
+ db MAGNEMITE
+ db GRIMER
+ db TANGELA
+ db MR__MIME
+ db EEVEE
+ db PORYGON
+ db DRATINI
+ db DRAGONAIR
+ db TOGETIC
+ db UMBREON
+ db UNOWN
+ db SNUBBULL
+ db HERACROSS
+ db $ff
+
+.Often
+ db CUBONE
+ db ARTICUNO
+ db ZAPDOS
+ db MOLTRES
+ db QUAGSIRE
+ db DELIBIRD
+ db PHANPY
+ db TEDDIURSA
+ db $ff
+
+.Always
+ db RAIKOU
+ db ENTEI
+; db SUICUNE
+ db $ff
+; 3c5b4
+
+
+Function3c5b4: ; 3c5b4
+ ld a, [CurPlayerMove]
+ call GetMovePriority
+ ld b, a
+ push bc
+ ld a, [CurEnemyMove]
+ call GetMovePriority
+ pop bc
+ cp b
+ ret
+; 3c5c5
+
+GetMovePriority: ; 3c5c5
+ ld b, a
+ cp VITAL_THROW
+ ld a, 0
+ ret z
+ call Function3c5ec
+ ld hl, .data_3c5df
+.loop
+ ld a, [hli]
+ cp b
+ jr z, .asm_3c5dd
+ inc hl
+ cp $ff
+ jr nz, .loop
+ ld a, 1
+ ret
+
+.asm_3c5dd
+ ld a, [hl]
+ ret
+; 3c5df
+
+.data_3c5df
+ db EFFECT_PROTECT, 3
+ db EFFECT_ENDURE, 3
+ db EFFECT_PRIORITY_HIT, 2
+ db EFFECT_WHIRLWIND, 0
+ db EFFECT_COUNTER, 0
+ db EFFECT_MIRROR_COAT, 0
+ db $ff
+; 3c5ec
+
+
+Function3c5ec: ; 3c5ec
+ ld a, b
+ dec a
+ ld hl, $5afc
+ ld bc, $0007
+ call AddNTimes
+ ld a, $10
+ call GetFarByte
+ ld b, a
+ ret
+; 3c5fe
+
+Function3c5fe: ; 3c5fe
+ call Function309d
+ call Function3c543
+ jp c, Function3c0e5
+ call SetEnemyTurn
+ ld a, $1
+ ld [$c70f], a
+ callab Function38000
+ jr c, .asm_3c62f
+ call Function3c6de
+ call Function3d2e0
+ ret c
+ ld a, [$d232]
+ and a
+ ret nz
+ call Function3c710
+ jp z, Function3d14e
+ call Function3c70b
+ jp z, Function3cd55
+
+.asm_3c62f
+ call SetEnemyTurn
+ call Function3c716
+ jp z, Function3cd55
+ call RefreshBattleHuds
+ call Function3c6cf
+ call Function3d2e0
+ ret c
+ ld a, [$d232]
+ and a
+ ret nz
+ call Function3c70b
+ jp z, Function3cd55
+ call Function3c710
+ jp z, Function3d14e
+ call SetPlayerTurn
+ call Function3c716
+ jp z, Function3d14e
+ call RefreshBattleHuds
+ xor a
+ ld [$d0ec], a
+ ret
+; 3c664
+
+Function3c664: ; 3c664
+ xor a
+ ld [$c70f], a
+ call SetEnemyTurn
+ callab Function38000
+ push af
+ call Function3c6cf
+ pop bc
+ ld a, [$d232]
+ and a
+ ret nz
+ call Function3d2e0
+ ret c
+ call Function3c70b
+ jp z, Function3cd55
+ call Function3c710
+ jp z, Function3d14e
+ push bc
+ call SetPlayerTurn
+ call Function3c716
+ pop bc
+ jp z, Function3d14e
+ push bc
+ call RefreshBattleHuds
+ pop af
+ jr c, .asm_3c6be
+ call Function309d
+ call Function3c543
+ jp c, Function3c0e5
+ call Function3c6de
+ call Function3d2e0
+ ret c
+ ld a, [$d232]
+ and a
+ ret nz
+ call Function3c710
+ jp z, Function3d14e
+ call Function3c70b
+ jp z, Function3cd55
+
+.asm_3c6be
+ call SetEnemyTurn
+ call Function3c716
+ jp z, Function3cd55
+ call RefreshBattleHuds
+ xor a
+ ld [$d0ec], a
+ ret
+; 3c6cf
+
+Function3c6cf: ; 3c6cf
+ call SetPlayerTurn
+ call Function3c6fe
+ callab DoPlayerTurn
+ jp Function3c6ed
+; 3c6de
+
+Function3c6de: ; 3c6de
+ call SetEnemyTurn
+ call Function3c6fe
+ callab DoEnemyTurn
+ jp Function3c6ed
+; 3c6ed
+
+Function3c6ed: ; 3c6ed
+ ld a, $5
+ call _GetBattleVar
+ res 2, [hl]
+ res 5, [hl]
+ ld a, $9
+ call _GetBattleVar
+ res 6, [hl]
+ ret
+; 3c6fe
+
+Function3c6fe: ; 3c6fe
+ ld a, $4
+ call _GetBattleVar
+ res 6, [hl]
+ ret
+; 3c706
+
+Function3c706: ; 3c706
+ ld a, [hBattleTurn]
+ and a
+ jr z, Function3c710
+Function3c70b: ; 3c70b
+ ld hl, EnemyMonHPHi
+ jr asm_3c713
+
+Function3c710: ; 3c710
+ ld hl, BattleMonHP
+
+asm_3c713
+ ld a, [hli]
+ or [hl]
+ ret
+; 3c716
+
+Function3c716: ; 3c716
+ call Function3c706
+ ret z
+ ld a, $a
+ call GetBattleVar
+ and $18
+ jr z, .asm_3c768
+ ld hl, $47e2
+ ld de, $0106
+ and $10
+ jr z, .asm_3c733
+ ld hl, $47f8
+ ld de, $0105
+
+.asm_3c733
+ push de
+ call StdBattleTextBox
+ pop de
+ xor a
+ ld [$cfca], a
+ call Function3ee0f
+ call GetEighthMaxHP
+ ld de, $c674
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3c74d
+ ld de, $c67c
+
+.asm_3c74d
+ ld a, $4
+ call GetBattleVar
+ bit 0, a
+ jr z, .asm_3c765
+ call Function3cc76
+ ld a, [de]
+ inc a
+ ld [de], a
+ ld hl, $0000
+.asm_3c75f
+ add hl, bc
+ dec a
+ jr nz, .asm_3c75f
+ ld b, h
+ ld c, l
+
+.asm_3c765
+ call Function3cc3f
+
+.asm_3c768
+ call Function3c706
+ jp z, .asm_3c7f7
+ ld a, $3
+ call _GetBattleVar
+ bit 7, [hl]
+ jr z, .asm_3c7a1
+ call Function3c8e4
+ xor a
+ ld [$cfca], a
+ ld de, $0107
+ ld a, $7
+ call GetBattleVar
+ and $60
+ call z, Function3ee0f
+ call Function3c8e4
+ call GetEighthMaxHP
+ call Function3cc3f
+ ld a, $1
+ ld [hBGMapMode], a
+ call Function3ccef
+ ld hl, $480e
+ call StdBattleTextBox
+
+.asm_3c7a1
+ call Function3c706
+ jr z, .asm_3c7f7
+ ld a, $0
+ call _GetBattleVar
+ bit 0, [hl]
+ jr z, .asm_3c7c5
+ xor a
+ ld [$cfca], a
+ ld de, $010c
+ call Function3ee0f
+ call GetQuarterMaxHP
+ call Function3cc3f
+ ld hl, $4822
+ call StdBattleTextBox
+
+.asm_3c7c5
+ call Function3c706
+ jr z, .asm_3c7f7
+ ld a, $0
+ call _GetBattleVar
+ bit 1, [hl]
+ jr z, .asm_3c7e9
+ xor a
+ ld [$cfca], a
+ ld de, $010c
+ call Function3ee0f
+ call GetQuarterMaxHP
+ call Function3cc3f
+ ld hl, $4836
+ call StdBattleTextBox
+
+.asm_3c7e9
+ ld hl, BattleMonHP
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3c7f4
+ ld hl, EnemyMonHPHi
+
+.asm_3c7f4
+ ld a, [hli]
+ or [hl]
+ ret nz
+
+.asm_3c7f7
+ call RefreshBattleHuds
+ ld c, $14
+ call DelayFrames
+ xor a
+ ret
+; 3c801
+
+Function3c801: ; 3c801
+ ld a, [$ffcb]
+ cp $1
+ jr z, .asm_3c813
+ call SetPlayerTurn
+ call .asm_3c81c
+ call SetEnemyTurn
+ jp .asm_3c81c
+
+.asm_3c813
+ call SetEnemyTurn
+ call .asm_3c81c
+ call SetPlayerTurn
+.asm_3c81c
+ ld hl, PlayerPerishCount
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3c827
+ ld hl, EnemyPerishCount
+
+.asm_3c827
+ ld a, $0
+ call GetBattleVar
+ bit 4, a
+ ret z
+ dec [hl]
+ ld a, [hl]
+ ld [$d265], a
+ push af
+ ld hl, $4864
+ call StdBattleTextBox
+ pop af
+ ret nz
+ ld a, $0
+ call _GetBattleVar
+ res 4, [hl]
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .asm_3c85c
+ ld hl, BattleMonHP
+ xor a
+ ld [hli], a
+ ld [hl], a
+ ld hl, PartyMon1CurHP
+ ld a, [CurBattleMon]
+ call GetPartyLocation
+ xor a
+ ld [hli], a
+ ld [hl], a
+ ret
+
+.asm_3c85c
+ ld hl, EnemyMonHPHi
+ xor a
+ ld [hli], a
+ ld [hl], a
+ ld a, [IsInBattle]
+ dec a
+ ret z
+ ld hl, OTPartyMon1CurHP
+ ld a, [CurOTMon]
+ call GetPartyLocation
+ xor a
+ ld [hli], a
+ ld [hl], a
+ ret
+; 3c874
+
+Function3c874: ; 3c874
+ ld a, [$ffcb]
+ cp $1
+ jr z, .asm_3c886
+ call SetPlayerTurn
+ call .asm_3c88f
+ call SetEnemyTurn
+ jp .asm_3c88f
+
+.asm_3c886
+ call SetEnemyTurn
+ call .asm_3c88f
+ call SetPlayerTurn
+.asm_3c88f
+ ld hl, $c730
+ ld de, $c72e
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3c8a0
+ ld hl, $c731
+ ld de, $c72f
+
+.asm_3c8a0
+ ld a, [hl]
+ and a
+ ret z
+ ld a, $3
+ call GetBattleVar
+ bit 4, a
+ ret nz
+ ld a, [de]
+ ld [$d265], a
+ ld [FXAnimIDLo], a
+ call GetMoveName
+ dec [hl]
+ jr z, .asm_3c8de
+ ld a, $2
+ call GetBattleVar
+ and $60
+ jr nz, .asm_3c8d3
+ call Function3c8e4
+ xor a
+ ld [$cfca], a
+ ld [FXAnimIDHi], a
+ ld a, $37
+ call Predef
+ call Function3c8e4
+
+.asm_3c8d3
+ call Function3cc76
+ call Function3cc3f
+ ld hl, $4de2
+ jr .asm_3c8e1
+
+.asm_3c8de
+ ld hl, $4df5
+
+.asm_3c8e1
+ jp StdBattleTextBox
+; 3c8e4
+
+Function3c8e4: ; 3c8e4
+ ld a, [hBattleTurn]
+ xor $1
+ ld [hBattleTurn], a
+ ret
+; 3c8eb
+
+Function3c8eb: ; 3c8eb
+ ld a, [$ffcb]
+ cp $1
+ jr z, .asm_3c8fd
+ call SetPlayerTurn
+ call .asm_3c906
+ call SetEnemyTurn
+ jp .asm_3c906
+
+.asm_3c8fd
+ call SetEnemyTurn
+ call .asm_3c906
+ call SetPlayerTurn
+.asm_3c906
+ callab GetUserItem
+ ld a, [hl]
+ ld [$d265], a
+ call GetItemName
+ ld a, b
+ cp $3
+ ret nz
+ ld hl, BattleMonHP
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3c922
+ ld hl, EnemyMonHPHi
+
+.asm_3c922
+ ld a, [hli]
+ ld b, a
+ ld a, [hli]
+ ld c, a
+ ld a, [hli]
+ cp b
+ jr nz, .asm_3c92d
+ ld a, [hl]
+ cp c
+ ret z
+
+.asm_3c92d
+ call Function3cc76
+ call Function3c8e4
+ call Function3ccef
+ ld hl, $4880
+ jp StdBattleTextBox
+; 3c93c
+
+Function3c93c: ; 3c93c
+ ld a, [$ffcb]
+ cp $1
+ jr z, .asm_3c94e
+ call SetPlayerTurn
+ call .asm_3c957
+ call SetEnemyTurn
+ jp .asm_3c957
+
+.asm_3c94e
+ call SetEnemyTurn
+ call .asm_3c957
+ call SetPlayerTurn
+.asm_3c957
+ callab GetUserItem
+ ld a, b
+ cp $6
+ jr nz, .asm_3c9ae
+ ld hl, PartyMon1PP
+ ld a, [CurBattleMon]
+ call GetPartyLocation
+ ld d, h
+ ld e, l
+ ld hl, PartyMon1Move1
+ ld a, [CurBattleMon]
+ call GetPartyLocation
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3c99b
+ ld de, $c739
+ ld hl, $c735
+ ld a, [IsInBattle]
+ dec a
+ jr z, .asm_3c99b
+ ld hl, OTPartyMon1PPMove1
+ ld a, [CurOTMon]
+ call GetPartyLocation
+ ld d, h
+ ld e, l
+ ld hl, OTPartyMon1Move1
+ ld a, [CurOTMon]
+ call GetPartyLocation
+
+.asm_3c99b
+ ld c, $0
+.asm_3c99d
+ ld a, [hl]
+ and a
+ jr z, .asm_3c9ae
+ ld a, [de]
+ and $3f
+ jr z, .asm_3c9af
+ inc hl
+ inc de
+ inc c
+ ld a, c
+ cp $4
+ jr nz, .asm_3c99d
+
+.asm_3c9ae
+ ret
+
+.asm_3c9af
+ ld a, [hl]
+ cp $a6
+ ld b, $1
+ jr z, .asm_3c9b8
+ ld b, $5
+
+.asm_3c9b8
+ ld a, [de]
+ add b
+ ld [de], a
+ push bc
+ push bc
+ ld a, [hl]
+ ld [$d265], a
+ ld de, BattleMonItem
+ ld hl, BattleMonPPMove1
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3c9d2
+ ld de, EnemyMonItem
+ ld hl, EnemyMonPPMove1
+
+.asm_3c9d2
+ inc de
+ pop bc
+ ld b, $0
+ add hl, bc
+ push hl
+ ld h, d
+ ld l, e
+ add hl, bc
+ pop de
+ pop bc
+ ld a, [$d265]
+ cp [hl]
+ jr nz, .asm_3c9f5
+ ld a, [hBattleTurn]
+ and a
+ ld a, [PlayerSubStatus5]
+ jr z, .asm_3c9ee
+ ld a, [EnemySubStatus5]
+
+.asm_3c9ee
+ bit 3, a
+ jr nz, .asm_3c9f5
+ ld a, [de]
+ add b
+ ld [de], a
+
+.asm_3c9f5
+ callab GetUserItem
+ ld a, [hl]
+ ld [$d265], a
+ xor a
+ ld [hl], a
+ call Function3df12
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3ca12
+ ld a, [IsInBattle]
+ dec a
+ jr z, .asm_3ca14
+ call Function3df1f
+
+.asm_3ca12
+ xor a
+ ld [hl], a
+
+.asm_3ca14
+ call GetItemName
+ call Function3c8e4
+ call Function3ddc8
+ call Function3c8e4
+ ld hl, $4899
+ jp StdBattleTextBox
+; 3ca26
+
+Function3ca26: ; 3ca26
+ ld a, [$ffcb]
+ cp $1
+ jr z, .asm_3ca38
+ call SetPlayerTurn
+ call .asm_3ca41
+ call SetEnemyTurn
+ jp .asm_3ca41
+
+.asm_3ca38
+ call SetEnemyTurn
+ call .asm_3ca41
+ call SetPlayerTurn
+.asm_3ca41
+ ld hl, $c71d
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3ca4c
+ ld hl, $c71e
+
+.asm_3ca4c
+ ld a, [hl]
+ and a
+ ret z
+ dec a
+ ld [hl], a
+ cp $1
+ ret nz
+ ld hl, $48b6
+ call StdBattleTextBox
+ ld a, $10
+ call _GetBattleVar
+ push af
+ ld a, $f8
+ ld [hl], a
+ callab UpdateMoveData
+ xor a
+ ld [AttackMissed], a
+ ld [AlreadyDisobeyed], a
+ ld a, $a
+ ld [TypeModifier], a
+ callab DoMove
+ xor a
+ ld [CurDamage], a
+ ld [$d257], a
+ ld a, $10
+ call _GetBattleVar
+ pop af
+ ld [hl], a
+ call UpdateBattleMonInParty
+ jp UpdateEnemyMonInParty
+; 3ca8f
+
+Function3ca8f: ; 3ca8f
+ ld a, [$ffcb]
+ cp $1
+ jr z, .asm_3ca9a
+ call .asm_3ca9d
+ jr .asm_3cac9
+
+.asm_3ca9a
+ call .asm_3cac9
+.asm_3ca9d
+ ld a, [BattleMonStatus]
+ bit 5, a
+ ret z
+ ld a, [$c73f]
+ and a
+ ret nz
+ call BattleRandom
+ cp $19
+ ret nc
+ xor a
+ ld [BattleMonStatus], a
+ ld a, [CurBattleMon]
+ ld hl, PartyMon1Status
+ call GetPartyLocation
+ ld [hl], $0
+ call UpdateBattleHuds
+ call SetEnemyTurn
+ ld hl, $524b
+ jp StdBattleTextBox
+
+.asm_3cac9
+ ld a, [EnemyMonStatus]
+ bit 5, a
+ ret z
+ ld a, [$c740]
+ and a
+ ret nz
+ call BattleRandom
+ cp $19
+ ret nc
+ xor a
+ ld [EnemyMonStatus], a
+ ld a, [IsInBattle]
+ dec a
+ jr z, .asm_3caef
+ ld a, [CurOTMon]
+ ld hl, OTPartyMon1Status
+ call GetPartyLocation
+ ld [hl], $0
+
+.asm_3caef
+ call UpdateBattleHuds
+ call SetPlayerTurn
+ ld hl, $524b
+ jp StdBattleTextBox
+; 3cafb
+
+Function3cafb: ; 3cafb
+ ld a, [$ffcb]
+ cp $1
+ jr z, .asm_3cb06
+ call .asm_3cb09
+ jr .asm_3cb1c
+
+.asm_3cb06
+ call .asm_3cb1c
+.asm_3cb09
+ ld a, [PlayerScreens]
+ bit 2, a
+ ret z
+ ld hl, $c701
+ dec [hl]
+ ret nz
+ res 2, a
+ ld [PlayerScreens], a
+ xor a
+ jr .asm_3cb2e
+
+.asm_3cb1c
+ ld a, [EnemyScreens]
+ bit 2, a
+ ret z
+ ld hl, $c705
+ dec [hl]
+ ret nz
+ res 2, a
+ ld [EnemyScreens], a
+ ld a, $1
+
+.asm_3cb2e
+ ld [hBattleTurn], a
+ ld hl, $48d2
+ jp StdBattleTextBox
+; 3cb36
+
+
+Function3cb36: ; 3cb36
+ ld a, [$ffcb]
+ cp 1
+ jr z, .Both
+ call .CheckPlayer
+ jr .CheckEnemy
+
+.Both
+ call .CheckEnemy
+
+.CheckPlayer
+ call SetPlayerTurn
+ ld de, .Your
+ call .asm_3cb6f
+ ld hl, PlayerScreens
+ ld de, PlayerLightScreenCount
+ jr .FadeScreens
+
+.CheckEnemy
+ call SetEnemyTurn
+ ld de, .Enemy
+ call .asm_3cb6f
+ ld hl, EnemyScreens
+ ld de, EnemyLightScreenCount
+
+.FadeScreens
+ bit SCREENS_LIGHT_SCREEN, [hl]
+ call nz, FadeLightScreen
+ bit SCREENS_REFLECT, [hl]
+ call nz, FadeReflect
+ ret
+
+.asm_3cb6f
+ ld hl, StringBuffer1
+ jp CopyName2
+; 3cb75
+
+.Your
+ db "Your@"
+.Enemy
+ db "Enemy@"
+; 3cb80
+
+
+FadeLightScreen: ; 3cb80
+ ld a, [de]
+ dec a
+ ld [de], a
+ ret nz
+ res SCREENS_LIGHT_SCREEN, [hl]
+ push hl
+ push de
+ ld hl, BattleText_0x808e7
+ call StdBattleTextBox
+ pop de
+ pop hl
+ ret
+; 3cb91
+
+FadeReflect: ; 3cb91
+ inc de
+ ld a, [de]
+ dec a
+ ld [de], a
+ ret nz
+ res SCREENS_REFLECT, [hl]
+ ld hl, BattleText_0x80905
+ jp StdBattleTextBox
+; 3cb9e
+
+HandleWeather: ; 3cb9e
+
+ ld a, [Weather]
+ cp 0
+ ret z
+
+ ld hl, WeatherCount
+ dec [hl]
+ jr z, .asm_3cc13
+
+ ld hl, .WeatherMessages
+ call .asm_3cc1e
+ ld a, [Weather]
+ cp WEATHER_SANDSTORM
+ ret nz
+ ld a, [$ffcb]
+ cp 1
+ jr z, .asm_3cbc7
+
+; Player first
+ call SetPlayerTurn
+ call .asm_3cbd0
+ call SetEnemyTurn
+ jr .asm_3cbd0
+
+.asm_3cbc7
+; Enemy first
+ call SetEnemyTurn
+ call .asm_3cbd0
+ call SetPlayerTurn
+
+.asm_3cbd0
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVar
+ bit SUBSTATUS_UNDERGROUND, a
+ ret nz
+
+ ld hl, BattleMonType1
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3cbe3
+ ld hl, EnemyMonType1
+
+.asm_3cbe3
+ ld a, [hli]
+ cp ROCK
+ ret z
+ cp GROUND
+ ret z
+ cp STEEL
+ ret z
+
+ ld a, [hl]
+ cp ROCK
+ ret z
+ cp GROUND
+ ret z
+ cp STEEL
+ ret z
+
+ call Function3c8e4
+ xor a
+ ld [$cfca], a
+ ld de, $010b
+ call Function3ee17
+ call Function3c8e4
+ call GetEighthMaxHP
+ call Function3cc3f
+
+ ld hl, BattleText_0x8084d
+ jp StdBattleTextBox
+
+.asm_3cc13
+ ld hl, .WeatherEndedMessages
+ call .asm_3cc1e
+ xor a
+ ld [Weather], a
+ ret
+
+.asm_3cc1e
+ ld a, [Weather]
+ dec a
+ ld c, a
+ ld b, 0
+ add hl, bc
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp StdBattleTextBox
+; 3cc2d
+
+.WeatherMessages
+ dw BattleText_0x8091f
+ dw BattleText_0x80938
+ dw BattleText_0x80951
+.WeatherEndedMessages
+ dw BattleText_0x80967
+ dw BattleText_0x8097a
+ dw BattleText_0x8098f
+; 3cc39
+
+Function3cc39: ; 3cc39
+ call Function3cc45
+ jp Function3cd3c
+; 3cc3f
+
+Function3cc3f: ; 3cc3f
+ call Function3cc45
+ jp Function3cd36
+; 3cc45
+
+
+
+Function3cc45: ; 3cc45
+ ld hl, BattleMonHP
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3cc50
+ ld hl, EnemyMonHPHi
+
+.asm_3cc50
+ inc 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
+ ret nc
+ ld a, [$d1ec]
+ ld c, a
+ ld a, [$d1ed]
+ ld b, a
+ xor a
+ ld [hli], a
+ ld [hl], a
+ ld [$d1ee], a
+ ld [$d1ef], a
+ ret
+; 3cc76
+
+Function3cc76: ; 3cc76
+ call GetQuarterMaxHP
+ srl c
+ srl c
+ ld a, c
+ and a
+ jr nz, .asm_3cc82
+ inc c
+
+.asm_3cc82
+ ret
+; 3cc83
+
+
+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, Buffer1-2
+
+; player
+ ld hl, BattleMonMaxHP
+
+; whose turn?
+ ld a, [hBattleTurn]
+ and a
+ jr z, .gethp
+
+; enemy
+ ld hl, EnemyMonMaxHP
+
+.gethp
+ ld a, [hli]
+ ld [Buffer2], a
+ ld b, a
+
+ ld a, [hl]
+ ld [Buffer1], a
+ ld c, a
+ ret
+; 3ccc2
+
+Function3ccc2: ; 3ccc2
+ ld hl, BattleMonHP
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3cccd
+ ld hl, EnemyMonHP
+
+.asm_3cccd
+ ld a, [hli]
+ ld b, a
+ ld a, [hli]
+ ld c, a
+ srl b
+ rr c
+ ld a, [hli]
+ ld [Buffer2], a
+ ld a, [hl]
+ ld [Buffer1], a
+ ret
+; 3ccde
+
+Function3ccde: ; 3ccde
+ ld hl, BattleMonHP + 1
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3cce9
+ ld hl, EnemyMonHP + 1
+
+.asm_3cce9
+ ld a, c
+ sub [hl]
+ dec hl
+ ld a, b
+ sbc [hl]
+ ret
+; 3ccef
+
+
+Function3ccef: ; 3ccef
+ ld hl, EnemyMonMaxHP
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3ccfa
+ ld hl, BattleMonMaxHP
+
+.asm_3ccfa
+ ld a, [hli]
+ ld [Buffer2], a
+ ld a, [hld]
+ ld [Buffer1], a
+ dec hl
+ ld a, [hl]
+ ld [$d1ec], a
+ add c
+ ld [hld], a
+ ld [$d1ee], a
+ ld a, [hl]
+ ld [$d1ed], a
+ adc b
+ ld [hli], a
+ ld [$d1ef], a
+ ld a, [Buffer1]
+ ld c, a
+ ld a, [hld]
+ sub c
+ ld a, [Buffer2]
+ ld b, a
+ ld a, [hl]
+ sbc b
+ jr c, .asm_3cd2d
+ ld a, b
+ ld [hli], a
+ ld [$d1ef], a
+ ld a, c
+ ld [hl], a
+ ld [$d1ee], a
+
+.asm_3cd2d
+ call Function3c8e4
+ call Function3cd36
+ jp Function3c8e4
+; 3cd36
+
+Function3cd36: ; 3cd36
+ call Function3cd3c
+ jp UpdateBattleHuds
+; 3cd3c
+
+
+Function3cd3c: ; 3cd3c
+ ld hl, $c55e
+ ld a, [hBattleTurn]
+ and a
+ ld a, $1
+ jr z, .asm_3cd4a
+ ld hl, $c4ca
+ xor a
+
+.asm_3cd4a
+ push bc
+ ld [$d10a], a
+ ld a, $b
+ call Predef
+ pop bc
+ ret
+; 3cd55
+
+Function3cd55: ; 3cd55
+ call Function3cf14
+ ld hl, BattleMonHP
+ ld a, [hli]
+ or [hl]
+ call z, Function3cef1
+ xor a
+ ld [$c6f7], a
+ call Function3ce01
+ call Function3d873
+ ld a, d
+ and a
+ jp z, LostBattle
+ ld hl, BattleMonHP
+ ld a, [hli]
+ or [hl]
+ call nz, Function3df48
+ ld a, $1
+ ld [hBGMapMode], a
+ ld c, $3c
+ call DelayFrames
+ ld a, [IsInBattle]
+ dec a
+ jr nz, .asm_3cd8c
+ ld a, $1
+ ld [BattleEnded], a
+ ret
+
+.asm_3cd8c
+ call Function3cf35
+ jp z, Function3cfa4
+ ld hl, BattleMonHP
+ ld a, [hli]
+ or [hl]
+ jr nz, .asm_3cdba
+ call Function3d1f8
+ jr nc, .asm_3cda4
+ ld a, $1
+ ld [BattleEnded], a
+ ret
+
+.asm_3cda4
+ call Function3d227
+ call Function3d2e0
+ jp c, Function3c0e5
+ ld a, $1
+ ld [$d0ec], a
+ call Function3cf4a
+ jp z, Function3c0e5
+ jr asm_3cdca
+
+.asm_3cdba
+ ld a, $1
+ ld [$d0ec], a
+ call Function3cf4a
+ jp z, Function3c0e5
+ xor a
+ ld [$d0ec], a
+ ret
+
+asm_3cdca
+ ld a, [$ffcb]
+ cp $1
+ jr z, .asm_3cde6
+ call ClearSprites
+ ld hl, $c4a1
+ ld bc, $040a
+ call ClearBox
+ call Function3d2b3
+ ld a, $1
+ call asm_3cf78
+ jr .asm_3cdfc
+
+.asm_3cde6
+ ld a, [CurPartyMon]
+ push af
+ ld a, $1
+ call asm_3cf78
+ call ClearSprites
+ call Function309d
+ pop af
+ ld [CurPartyMon], a
+ call Function3d2b3
+
+.asm_3cdfc
+ xor a
+ ld [$d0ec], a
+ ret
+; 3ce01
+
+Function3ce01: ; 3ce01
+ call UpdateBattleMonInParty
+ ld a, [IsInBattle]
+ dec a
+ jr z, .asm_3ce16
+ ld a, [CurOTMon]
+ ld hl, OTPartyMon1CurHP
+ call GetPartyLocation
+ xor a
+ ld [hli], a
+ ld [hl], a
+
+.asm_3ce16
+ ld hl, PlayerSubStatus3
+ res 2, [hl]
+ xor a
+ ld hl, EnemyDamageTaken
+ ld [hli], a
+ ld [hl], a
+ call Function3d834
+ call Function3dc18
+ ld a, [IsInBattle]
+ dec a
+ jr z, .asm_3ce2f
+ jr .asm_3ce37
+
+.asm_3ce2f
+ call Function3ceec
+ ld a, $1
+ ld [$c6fd], a
+
+.asm_3ce37
+ ld hl, BattleMonHP
+ ld a, [hli]
+ or [hl]
+ jr nz, .asm_3ce47
+ ld a, [$c6f7]
+ and a
+ jr nz, .asm_3ce47
+ call Function3d1aa
+
+.asm_3ce47
+ call Function3d873
+ ld a, d
+ and a
+ ret z
+ ld a, [IsInBattle]
+ dec a
+ call z, Function3d0ea
+ call EmptyBattleTextBox
+ call Function309d
+ ld a, [$d0ee]
+ and $c0
+ ld [$d0ee], a
+ call Function3ceaa
+ jr z, .asm_3ce72
+ ld hl, EnemyMonBaseStats
+ ld b, $7
+.asm_3ce6c
+ srl [hl]
+ inc hl
+ dec b
+ jr nz, .asm_3ce6c
+
+.asm_3ce72
+ ld hl, EnemyMonBaseStats
+ ld de, $c720
+ ld bc, $0007
+ call CopyBytes
+ xor a
+ ld [$c71f], a
+ call Function3ee3b
+ call Function3ceaa
+ ret z
+ ld a, [$c664]
+ push af
+ ld a, d
+ ld [$c664], a
+ ld hl, $c720
+ ld de, EnemyMonBaseStats
+ ld bc, $0007
+ call CopyBytes
+ ld a, $1
+ ld [$c71f], a
+ call Function3ee3b
+ pop af
+ ld [$c664], a
+ ret
+; 3ceaa
+
+Function3ceaa: ; 3ceaa
+ ld a, [PartyCount]
+ ld b, a
+ ld hl, PartyMon1Species
+ ld c, $1
+ ld d, $0
+.asm_3ceb5
+ push hl
+ push bc
+ ld bc, $0022
+ add hl, bc
+ ld a, [hli]
+ or [hl]
+ pop bc
+ pop hl
+ jr z, .asm_3ced1
+ push hl
+ push bc
+ ld bc, $0001
+ add hl, bc
+ pop bc
+ ld a, [hl]
+ pop hl
+ cp $39
+ jr nz, .asm_3ced1
+ ld a, d
+ or c
+ ld d, a
+
+.asm_3ced1
+ sla c
+ push de
+ ld de, $0030
+ add hl, de
+ pop de
+ dec b
+ jr nz, .asm_3ceb5
+ ld a, d
+ ld e, $0
+ ld b, $6
+.asm_3cee1
+ srl a
+ jr nc, .asm_3cee6
+ inc e
+
+.asm_3cee6
+ dec b
+ jr nz, .asm_3cee1
+ ld a, e
+ and a
+ ret
+; 3ceec
+
+
+
+Function3ceec: ; 3ceec
+ xor a
+ ld [Danger], a
+ ret
+; 3cef1
+
+Function3cef1: ; 3cef1
+ call Function3ceec
+ call WaitSFX
+ ld a, $f0
+ ld [CryTracks], a
+ ld a, [BattleMonSpecies]
+ call Function37b6
+ call Function3d43b
+ ld hl, $c535
+ ld bc, $050b
+ call ClearBox
+ ld hl, BattleText_0x80a75
+ jp StdBattleTextBox
+; 3cf14
+
+Function3cf14: ; 3cf14
+ call WaitSFX
+ ld de, SFX_KINESIS
+ call PlaySFX
+ call Function3d432
+ ld de, SFX_UNKNOWN_2A
+ call PlaySFX
+ hlcoord 1, 0
+ ld bc, $040a
+ call ClearBox
+ ld hl, BattleText_0x809a8
+ jp StdBattleTextBox
+; 3cf35
+
+Function3cf35: ; 3cf35
+ ld a, [OTPartyCount]
+ ld b, a
+ xor a
+ ld hl, OTPartyMon1CurHP
+ ld de, $0030
+.asm_3cf40
+ or [hl]
+ inc hl
+ or [hl]
+ dec hl
+ add hl, de
+ dec b
+ jr nz, .asm_3cf40
+ and a
+ ret
+; 3cf4a
+
+Function3cf4a: ; 3cf4a
+ ld hl, EnemyHPPal
+ ld e, $30
+ call Function3e12e
+ call WaitBGMap
+ callba Function2c012
+ ld a, [InLinkBattle]
+ and a
+ jr z, .asm_3cf6d
+ call Function3e8e4
+ ld a, [$d430]
+ cp $f
+ ret z
+ call Function30b4
+
+.asm_3cf6d
+ ld hl, BattleMonHP
+ ld a, [hli]
+ or [hl]
+ ld a, $0
+ jr nz, asm_3cf78
+ inc a
+ ret
+
+asm_3cf78
+ push af
+ xor a
+ ld [$c718], a
+ call Function3d834
+ call Function3d867
+ call Function3dc18
+ pop af
+ and a
+ jr nz, .asm_3cf8f
+ call Function3d4e1
+ jr .asm_3cf92
+
+.asm_3cf8f
+ call asm_3d517
+
+.asm_3cf92
+ call Function3d57a
+ call SetEnemyTurn
+ call Function3dc23
+ xor a
+ ld [EnemyMoveAnimation], a
+ ld [$d0ec], a
+ inc a
+ ret
+; 3cfa4
+
+Function3cfa4: ; 3cfa4
+ call Function3ceec
+ ld a, $1
+ ld [$c6fd], a
+ ld [BattleEnded], a
+ ld a, [InLinkBattle]
+ and a
+ ld a, b
+ call z, Function3d0ea
+ callab Function39939
+ ld hl, BattleText_0x809da
+ call StdBattleTextBox
+ call Function3d2f1
+ jr z, .asm_3cff5
+ ld a, [InLinkBattle]
+ and a
+ ret nz
+ ld a, [$cfc0]
+ bit 0, a
+ jr nz, .asm_3d006
+ call Function3ebd8
+ ld c, $28
+ call DelayFrames
+ ld a, [BattleType]
+ cp $1
+ jr nz, .asm_3cfe8
+ ld a, $2
+ call Predef
+
+.asm_3cfe8
+ ld a, [$c2cc]
+ bit 0, a
+ jr nz, .asm_3cff2
+ call Function3718
+
+.asm_3cff2
+ jp Function3d02b
+
+.asm_3cff5
+ call Function3ebd8
+ ld c, $28
+ call DelayFrames
+ ld c, $4
+ callba Function4ea0a
+ ret
+
+.asm_3d006
+ call Function3ebd8
+ ld c, $28
+ call DelayFrames
+ call EmptyBattleTextBox
+ ld c, $3
+ callba Function11c000
+ call Functiona80
+ ld hl, $c6ec
+ ld a, [hli]
+ or [hl]
+ inc hl
+ or [hl]
+ ret nz
+ call ClearTileMap
+ call WhiteBGMap
+ ret
+; 3d02b
+
+Function3d02b: ; 3d02b
+ ld a, [$c73d]
+ and a
+ call nz, Function3d099
+ call Function3d0b1
+ push af
+ ld a, $0
+ jr nc, .asm_3d044
+ ld a, [$d854]
+ and $7
+ cp $3
+ jr nz, .asm_3d044
+ inc a
+
+.asm_3d044
+ ld b, a
+ ld c, $4
+.asm_3d047
+ ld a, b
+ and a
+ jr z, .asm_3d052
+ call Function3d081
+ dec c
+ dec b
+ jr .asm_3d047
+
+.asm_3d052
+ ld a, c
+ and a
+ jr z, .asm_3d05c
+ call Function3d08d
+ dec c
+ jr .asm_3d052
+
+.asm_3d05c
+ call Function3d099
+ call Function3d099
+ pop af
+ jr nc, .asm_3d07b
+ ld a, [$d854]
+ and $7
+ jr z, .asm_3d07b
+ ld hl, SentToMomTexts
+ dec a
+ ld c, a
+ ld b, 0
+ add hl, bc
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp StdBattleTextBox
+
+.asm_3d07b
+ ld hl, BattleText_0x809be
+ jp StdBattleTextBox
+; 3d081
+
+Function3d081: ; 3d081
+ push bc
+ ld hl, $c688
+ ld de, $d853
+ call Function3d0be
+ pop bc
+ ret
+; 3d08d
+
+Function3d08d: ; 3d08d
+ push bc
+ ld hl, $c688
+ ld de, $d850
+ call Function3d0be
+ pop bc
+ ret
+; 3d099
+
+Function3d099: ; 3d099
+ ld hl, $c688
+ sla [hl]
+ dec hl
+ rl [hl]
+ dec hl
+ rl [hl]
+ ret nc
+ ld a, $ff
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ ret
+; 3d0ab
+
+SentToMomTexts: ; 3d0ab
+ dw BattleText_0x809fc
+ dw BattleText_0x80a2a
+ dw BattleText_0x80a3d
+; 3d0b1
+
+
+Function3d0b1: ; 3d0b1
+ ld hl, $d853
+ ld a, [hld]
+ cp $3f
+ ld a, [hld]
+ sbc $42
+ ld a, [hl]
+ sbc $f
+ ret
+; 3d0be
+
+Function3d0be: ; 3d0be
+ ld c, $3
+ and a
+ push de
+ push hl
+ push bc
+ ld b, h
+ ld c, l
+ callba Function106008
+ pop bc
+ pop hl
+.asm_3d0ce
+ ld a, [de]
+ adc [hl]
+ ld [de], a
+ dec de
+ dec hl
+ dec c
+ jr nz, .asm_3d0ce
+ pop hl
+ ld a, [hld]
+ cp $3f
+ ld a, [hld]
+ sbc $42
+ ld a, [hl]
+ sbc $f
+ ret c
+ ld [hl], $f
+ inc hl
+ ld [hl], $42
+ inc hl
+ ld [hl], $3f
+ ret
+; 3d0ea
+
+Function3d0ea: ; 3d0ea
+ push de
+ ld de, MUSIC_NONE
+ call PlayMusic
+ call DelayFrame
+ ld de, MUSIC_WILD_VICTORY
+ ld a, [IsInBattle]
+ dec a
+ jr nz, .asm_3d113
+ push de
+ call Function3ceaa
+ pop de
+ jr nz, .asm_3d11e
+ ld hl, $c6ec
+ ld a, [hli]
+ or [hl]
+ jr nz, .asm_3d11e
+ ld a, [$c664]
+ and a
+ jr z, .asm_3d121
+ jr .asm_3d11e
+
+.asm_3d113
+ ld de, MUSIC_GYM_VICTORY
+ call IsJohtoGymLeader
+ jr c, .asm_3d11e
+ ld de, MUSIC_TRAINER_VICTORY
+
+.asm_3d11e
+ call PlayMusic
+
+.asm_3d121
+ pop de
+ ret
+; 3d123
+
+
+
+; These functions check if the current opponent is a gym leader or one of a
+; few other special trainers.
+
+; Note: KantoGymLeaders is a subset of JohtoGymLeaders. If you wish to
+; differentiate between the two, call IsKantoGymLeader first.
+
+; The Lance and Red entries are unused for music checks; those trainers are
+; accounted for elsewhere.
+
+IsKantoGymLeader: ; 0x3d123
+ ld hl, KantoGymLeaders
+ jr IsGymLeaderCommon
+
+IsJohtoGymLeader: ; 0x3d128
+ ld hl, JohtoGymLeaders
+IsGymLeaderCommon:
+ push de
+ ld a, [OtherTrainerClass]
+ ld de, $0001
+ call IsInArray
+ pop de
+ ret
+; 0x3d137
+
+JohtoGymLeaders:
+ db FALKNER
+ db WHITNEY
+ db BUGSY
+ db MORTY
+ db PRYCE
+ db JASMINE
+ db CHUCK
+ db CLAIR
+ db WILL
+ db BRUNO
+ db KAREN
+ db KOGA
+; fallthrough
+; these two entries are unused
+ db CHAMPION
+ db RED
+; fallthrough
+KantoGymLeaders:
+ db BROCK
+ db MISTY
+ db LT_SURGE
+ db ERIKA
+ db JANINE
+ db SABRINA
+ db BLAINE
+ db BLUE
+ db $ff
+
+
+Function3d14e: ; 3d14e
+ call Function3cef1
+ ld hl, EnemyMonHPHi
+ ld a, [hli]
+ or [hl]
+ call z, Function3cf14
+ ld a, $1
+ ld [$c6f7], a
+ call Function3d1aa
+ call Function3d873
+ ld a, d
+ and a
+ jp z, LostBattle
+ ld hl, EnemyMonHPHi
+ ld a, [hli]
+ or [hl]
+ jr nz, .asm_3d185
+ call Function3ce01
+ ld a, [IsInBattle]
+ dec a
+ jr nz, .asm_3d17f
+ ld a, $1
+ ld [BattleEnded], a
+ ret
+
+.asm_3d17f
+ call Function3cf35
+ jp z, Function3cfa4
+
+.asm_3d185
+ call Function3d1f8
+ jr nc, .asm_3d190
+ ld a, $1
+ ld [BattleEnded], a
+ ret
+
+.asm_3d190
+ call Function3d227
+ call Function3d2e0
+ jp c, Function3c0e5
+ ld a, c
+ and a
+ ret nz
+ ld a, $1
+ ld [$d0ec], a
+ call Function3cf4a
+ jp z, Function3c0e5
+ jp asm_3cdca
+; 3d1aa
+
+Function3d1aa: ; 3d1aa
+ ld a, [CurBattleMon]
+ ld c, a
+ ld hl, $c664
+ ld b, $0
+ ld a, $3
+ call Predef
+ ld hl, EnemySubStatus3
+ res 2, [hl]
+ xor a
+ ld [Danger], a
+ ld hl, PlayerDamageTaken
+ ld [hli], a
+ ld [hl], a
+ ld [BattleMonStatus], a
+ call UpdateBattleMonInParty
+ ld c, $6
+ ld a, [BattleMonLevel]
+ add $1e
+ ld b, a
+ ld a, [EnemyMonLevel]
+ cp b
+ jr c, .asm_3d1dc
+ ld c, $8
+
+.asm_3d1dc
+ ld a, [CurBattleMon]
+ ld [CurPartyMon], a
+ callab ChangeHappiness
+ ld a, [$d0ee]
+ and $c0
+ add $1
+ ld [$d0ee], a
+ ld a, [$c6f7]
+ and a
+ ret z
+ ret
+; 3d1f8
+
+Function3d1f8: ; 3d1f8
+ call EmptyBattleTextBox
+ call Function309d
+ ld a, [IsInBattle]
+ and a
+ dec a
+ ret nz
+ ld hl, BattleText_0x80a83
+ call StdBattleTextBox
+.asm_3d20a
+ lb bc, 1, 7
+ call PlaceYesNoBox
+ ld a, [$cfa9]
+ jr c, .asm_3d217
+ and a
+ ret
+
+.asm_3d217
+ ld a, [$cfa9]
+ cp $1
+ jr z, .asm_3d20a
+ ld hl, PartyMon1Spd
+ ld de, EnemyMonSpd
+ jp Function3d8b3
+; 3d227
+
+Function3d227: ; 3d227
+ call EmptyBattleTextBox
+ call Function1d6e
+ call Function3d2f7
+ call Function3d362
+ ld a, [InLinkBattle]
+ and a
+ jr z, .asm_3d241
+ ld a, $1
+ ld [$d0ec], a
+ call Function3e8e4
+
+.asm_3d241
+ xor a
+ ld [$d0ec], a
+ call Function3d2e0
+ jr c, .asm_3d251
+ ld hl, EnemyMonHPHi
+ ld a, [hli]
+ or [hl]
+ jr nz, .asm_3d26c
+
+.asm_3d251
+ call ClearSprites
+ call WhiteBGMap
+ call Function3eda6
+ call Function1c07
+ call Function309d
+ call WaitBGMap
+ call ClearSGB
+ call Function32f9
+ xor a
+ ld c, a
+ ret
+
+.asm_3d26c
+ call ClearSprites
+ ld a, [CurBattleMon]
+ ld [$c71a], a
+ ld a, [CurPartyMon]
+ ld [CurBattleMon], a
+ call Function3d581
+ call Function3da0d
+ call Function3dab1
+ call ClearPalettes
+ call DelayFrame
+ call Function3eda6
+ call Function1c17
+ call ClearSGB
+ call Function32f9
+ call Function3f26d
+ call Function3dbde
+ call Function3dc18
+ call Function3db5f
+ call EmptyBattleTextBox
+ call Function309d
+ call SetPlayerTurn
+ call Function3dc23
+ ld a, $1
+ and a
+ ld c, a
+ ret
+; 3d2b3
+
+Function3d2b3: ; 3d2b3
+ ld a, [CurBattleMon]
+ ld [$c71a], a
+ ld a, [CurPartyMon]
+ ld [CurBattleMon], a
+ call Function3d581
+ call Function3da0d
+ call Function3dab1
+ call Function3f26d
+ call Function3dbde
+ call Function3dc18
+ call Function3db5f
+ call EmptyBattleTextBox
+ call Function309d
+ call SetPlayerTurn
+ jp Function3dc23
+; 3d2e0
+
+
+
+Function3d2e0: ; 3d2e0
+ ld a, [InLinkBattle]
+ cp $4
+ jr nz, .asm_3d2ef
+ ld a, [$cd2b]
+ and a
+ jr z, .asm_3d2ef
+ scf
+ ret
+
+.asm_3d2ef
+ xor a
+ ret
+; 3d2f1
+
+Function3d2f1: ; 3d2f1
+ ld a, [InLinkBattle]
+ cp $4
+ ret
+; 3d2f7
+
+Function3d2f7: ; 3d2f7
+ call WhiteBGMap
+Function3d2fa: ; 3d2fa
+ callba Function5004f
+ callba Function50405
+ callba Function8e85
+ callba Function503e0
+ ret
+; 3d313
+
+Function3d313: ; 3d313
+ callba WritePartyMenuTilemap
+ callba PrintPartyMenuText
+ call WaitBGMap
+ call Function32f9
+ call DelayFrame
+ ret
+; 3d329
+
+Function3d329: ; 3d329
+ call Function3d2f1
+ jr z, .asm_3d335
+ callba PartyMenuSelect
+ ret
+
+.asm_3d335
+ callba Function100cb5
+ ret
+; 3d33c
+
+Function3d33c: ; 3d33c
+.asm_3d33c
+ ld a, $2
+ ld [PartyMenuActionText], a
+ call Function3d313
+ call Function3d329
+ ret c
+ call Function3d887
+ jr z, .asm_3d33c
+ xor a
+ ret
+; 3d34f
+
+Function3d34f: ; 3d34f
+ ld hl, CurBattleMon
+ ld a, [CurPartyMon]
+ cp [hl]
+ jr nz, .asm_3d360
+ ld hl, BattleText_0x80c0d
+ call StdBattleTextBox
+ scf
+ ret
+
+.asm_3d360
+ xor a
+ ret
+; 3d362
+
+Function3d362: ; 3d362
+.asm_3d362
+ call Function3d33c
+ ret nc
+ call Function3d2e0
+ ret c
+ ld de, SFX_WRONG
+ call PlaySFX
+ call WaitSFX
+ jr .asm_3d362
+; 3d375
+
+
+
+Function3d375: ; 3d375
+.asm_3d375
+ call Function3d33c
+ ret c
+ call Function3d34f
+ jr c, .asm_3d375
+ xor a
+ ret
+; 3d380
+
+Function3d380: ; 3d380
+.asm_3d380
+ call Function3d362
+ call Function3d2e0
+ ret c
+ call Function3d34f
+ jr c, .asm_3d380
+ xor a
+ ret
+; 3d38e
+
+
+LostBattle: ; 3d38e
+ ld a, 1
+ ld [BattleEnded], a
+
+ ld a, [$cfc0]
+ bit 0, a
+ jr nz, .asm_3d3bd
+
+ ld a, [BattleType]
+ cp BATTLETYPE_CANLOSE
+ jr nz, .asm_3d3e3
+
+; Remove the enemy from the screen.
+ hlcoord 0, 0
+ ld bc, $0815
+ call ClearBox
+ call Function3ebd8
+
+ ld c, 40
+ call DelayFrames
+
+ ld a, [$c2cc]
+ bit 0, a
+ jr nz, .asm_3d3bc
+ call Function3718
+.asm_3d3bc
+ ret
+
+.asm_3d3bd
+; Remove the enemy from the screen.
+ hlcoord 0, 0
+ ld bc, $0815
+ call ClearBox
+ call Function3ebd8
+
+ ld c, 40
+ call DelayFrames
+
+ call EmptyBattleTextBox
+ ld c, 2
+ callba Function11c000
+ call Functiona80
+ call ClearTileMap
+ call WhiteBGMap
+ ret
+
+.asm_3d3e3
+ ld a, [InLinkBattle]
+ and a
+ jr nz, .LostLinkBattle
+
+; Greyscale
+ ld b, 0
+ call GetSGBLayout
+ call Function32f9
+ jr .end
+
+.LostLinkBattle
+ call UpdateEnemyMonInParty
+ call Function3cf35
+ jr nz, .asm_3d40a
+ ld hl, TiedAgainstText
+ ld a, [$d0ee]
+ and $c0
+ add 2
+ ld [$d0ee], a
+ jr .asm_3d412
+
+.asm_3d40a
+ ld hl, LostAgainstText
+ call Function3d2f1
+ jr z, .asm_3d417
+
+.asm_3d412
+ call StdBattleTextBox
+
+.end
+ scf
+ ret
+
+.asm_3d417
+; Remove the enemy from the screen.
+ hlcoord 0, 0
+ ld bc, $0815
+ call ClearBox
+ call Function3ebd8
+
+ ld c, 40
+ call DelayFrames
+
+ ld c, $3
+ callba Function4ea0a
+ scf
+ ret
+; 3d432
+
+
+Function3d432: ; 3d432
+ ld hl, $c510
+ ld de, $c524
+ jp Function3d444
+; 3d43b
+
+Function3d43b: ; 3d43b
+ ld hl, $c569
+ ld de, $c57d
+ jp Function3d444
+; 3d444
+
+Function3d444: ; 3d444
+ ld a, [$cfbe]
+ push af
+ set 6, a
+ ld [$cfbe], a
+ ld b, $7
+.asm_3d44f
+ push bc
+ push de
+ push hl
+ ld b, $6
+.asm_3d454
+ push bc
+ push hl
+ push de
+ ld bc, $0007
+ call CopyBytes
+ pop de
+ pop hl
+ ld bc, -20
+ add hl, bc
+ push hl
+ ld h, d
+ ld l, e
+ add hl, bc
+ ld d, h
+ ld e, l
+ pop hl
+ pop bc
+ dec b
+ jr nz, .asm_3d454
+ ld bc, 20
+ add hl, bc
+ ld de, .Spaces
+ call PlaceString
+ ld c, 2
+ call DelayFrames
+ pop hl
+ pop de
+ pop bc
+ dec b
+ jr nz, .asm_3d44f
+ pop af
+ ld [$cfbe], a
+ ret
+; 3d488
+
+.Spaces
+ db " @"
+; 3d490
+
+
+Function3d490: ; 3d490
+ ld [hConnectionStripLength], a
+ ld c, a
+.asm_3d493
+ push bc
+ push hl
+ ld b, $7
+.asm_3d497
+ push hl
+ call Function3d4ae
+ pop hl
+ ld de, 20
+ add hl, de
+ dec b
+ jr nz, .asm_3d497
+ ld c, 2
+ call DelayFrames
+ pop hl
+ pop bc
+ dec c
+ jr nz, .asm_3d493
+ ret
+; 3d4ae
+
+Function3d4ae: ; 3d4ae
+ ld a, [hConnectionStripLength]
+ ld c, a
+ cp $8
+ jr nz, .asm_3d4bc
+.asm_3d4b5
+ ld a, [hli]
+ ld [hld], a
+ dec hl
+ dec c
+ jr nz, .asm_3d4b5
+ ret
+
+.asm_3d4bc
+ ld a, [hld]
+ ld [hli], a
+ inc hl
+ dec c
+ jr nz, .asm_3d4bc
+ ret
+; 3d4c3
+
+
+Function3d4c3: ; 3d4c3
+ call Function3d557
+ ld a, [$c718]
+ dec a
+ ld b, a
+ call Function3d6ca
+ call Function3d7a0
+ call Function3d834
+ call Function3d867
+ call Function3d7c7
+ call Function3dc18
+ call Function3d57a
+ ret
+; 3d4e1
+
+
+Function3d4e1: ; 3d4e1
+ call Function3d714
+ jr nc, asm_3d517
+ call Function3d557
+ call Function3d533
+ jr c, .asm_3d4f1
+ call Function3d599
+
+.asm_3d4f1
+ call Function3d6ca
+ call Function3d74b
+ push af
+ call Function3d7a0
+ call Function3d7b8
+ call Function3d7c7
+ pop af
+ ret c
+ xor a
+ ld [$c664], a
+ ld [$c6fc], a
+ ld [$d0ec], a
+ inc a
+ ld [$c711], a
+ call Function309d
+ jp Function3e3ad
+
+asm_3d517
+ call Function3d557
+ call Function3d533
+ jr c, .asm_3d522
+ call Function3d599
+
+.asm_3d522
+ call Function3d6ca
+ ld a, $1
+ ld [$c711], a
+ call Function3d7a0
+ call Function3d7b8
+ jp Function3d7c7
+; 3d533
+
+Function3d533: ; 3d533
+ ld a, [InLinkBattle]
+ and a
+ jr z, .asm_3d541
+ ld a, [$d430]
+ sub $4
+ ld b, a
+ jr .asm_3d555
+
+.asm_3d541
+ ld a, [$c718]
+ and a
+ jr z, .asm_3d54b
+ dec a
+ ld b, a
+ jr .asm_3d555
+
+.asm_3d54b
+ ld a, [$d264]
+ and a
+ ld b, $0
+ jr nz, .asm_3d555
+ and a
+ ret
+
+.asm_3d555
+ scf
+ ret
+; 3d557
+
+Function3d557: ; 3d557
+ xor a
+ ld [LastEnemyCounterMove], a
+ ld [LastPlayerCounterMove], a
+ ld [LastEnemyMove], a
+ ld [CurEnemyMove], a
+ dec a
+ ld [$c6e6], a
+ xor a
+ ld [$c730], a
+ ld hl, $c4b2
+ ld a, $8
+ call Function3d490
+ call EmptyBattleTextBox
+ jp Function1d6e
+; 3d57a
+
+Function3d57a: ; 3d57a
+ xor a
+ ld [$c664], a
+ ld [$c6fc], a
+Function3d581: ; 3d581
+ ld a, [CurBattleMon]
+ ld c, a
+ ld hl, $c664
+ ld b, $1
+ push bc
+ ld a, $3
+ call Predef
+ pop bc
+ ld hl, $c6fc
+ ld a, $3
+ jp Predef
+; 3d599
+
+Function3d599: ; 3d599
+ ld b, $ff
+ ld a, $1
+ ld [Buffer1], a
+ ld [Buffer2], a
+.asm_3d5a3
+ ld hl, Buffer1
+ sla [hl]
+ inc hl
+ sla [hl]
+ inc b
+ ld a, [OTPartyCount]
+ cp b
+ jp z, Function3d672
+ ld a, [CurOTMon]
+ cp b
+ jr z, .asm_3d5d0
+ ld hl, OTPartyMon1CurHP
+ push bc
+ ld a, b
+ call GetPartyLocation
+ ld a, [hli]
+ ld c, a
+ ld a, [hl]
+ or c
+ pop bc
+ jr z, .asm_3d5d0
+ call Function3d5d7
+ call Function3d618
+ jr .asm_3d5a3
+
+.asm_3d5d0
+ ld hl, Buffer2
+ set 0, [hl]
+ jr .asm_3d5a3
+; 3d5d7
+
+Function3d5d7: ; 3d5d7
+ push bc
+ ld hl, OTPartyMon1Move1
+ ld a, b
+ call GetPartyLocation
+ pop bc
+ ld e, $5
+.asm_3d5e2
+ dec e
+ jr z, .asm_3d617
+ ld a, [hli]
+ and a
+ jr z, .asm_3d617
+ push hl
+ push de
+ push bc
+ dec a
+ ld hl, $5afb
+ ld bc, $0007
+ call AddNTimes
+ ld de, EnemyMoveAnimation
+ ld a, $10
+ call FarCopyBytes
+ call SetEnemyTurn
+ callab Function0x347c8
+ pop bc
+ pop de
+ pop hl
+ ld a, [$d265]
+ cp $b
+ jr c, .asm_3d5e2
+ ld hl, Buffer1
+ set 0, [hl]
+ ret
+
+.asm_3d617
+ ret
+; 3d618
+
+Function3d618: ; 3d618
+ push bc
+ ld hl, OTPartyCount
+ ld a, b
+ inc a
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld a, [hl]
+ dec a
+ ld hl, $542b
+ ld bc, $0020
+ call AddNTimes
+ ld de, EnemyMonType1
+ ld bc, $0002
+ ld a, $14
+ call FarCopyBytes
+ ld a, [BattleMonType1]
+ ld [PlayerMoveType], a
+ call SetPlayerTurn
+ callab Function0x347c8
+ ld a, [$d265]
+ cp $b
+ jr nc, .asm_3d663
+ ld a, [BattleMonType2]
+ ld [PlayerMoveType], a
+ callab Function0x347c8
+ ld a, [$d265]
+ cp $b
+ jr nc, .asm_3d663
+ pop bc
+ ret
+
+.asm_3d663
+ pop bc
+ ld hl, Buffer1
+ bit 0, [hl]
+ jr nz, .asm_3d66f
+ inc hl
+ set 0, [hl]
+ ret
+
+.asm_3d66f
+ res 0, [hl]
+ ret
+; 3d672
+
+Function3d672: ; 3d672
+.asm_3d672
+ ld hl, Buffer1
+ sla [hl]
+ inc hl
+ sla [hl]
+ jr nc, .asm_3d672
+ ld a, [OTPartyCount]
+ ld b, a
+ ld c, [hl]
+.asm_3d681
+ sla c
+ jr nc, .asm_3d68a
+ dec b
+ jr z, .asm_3d6a7
+ jr .asm_3d681
+
+.asm_3d68a
+ ld a, [Buffer1]
+ and a
+ jr z, .asm_3d69a
+ ld b, $ff
+ ld c, a
+.asm_3d693
+ inc b
+ sla c
+ jr nc, .asm_3d693
+ jr .asm_3d6c9
+
+.asm_3d69a
+ ld b, $ff
+ ld a, [Buffer2]
+ ld c, a
+.asm_3d6a0
+ inc b
+ sla c
+ jr c, .asm_3d6a0
+ jr .asm_3d6c9
+
+.asm_3d6a7
+ ld a, [OTPartyCount]
+ ld b, a
+ call BattleRandom
+ and $7
+ cp b
+ jr nc, .asm_3d6a7
+ ld b, a
+ ld a, [CurOTMon]
+ cp b
+ jr z, .asm_3d6a7
+ ld hl, OTPartyMon1CurHP
+ push bc
+ ld a, b
+ call GetPartyLocation
+ pop bc
+ ld a, [hli]
+ ld c, a
+ ld a, [hl]
+ or c
+ jr z, .asm_3d6a7
+
+.asm_3d6c9
+ ret
+; 3d6ca
+
+Function3d6ca: ; 3d6ca
+ ld a, b
+ ld [CurPartyMon], a
+ ld hl, OTPartyMon1Level
+ call GetPartyLocation
+ ld a, [hl]
+ ld [CurPartyLevel], a
+ ld a, [CurPartyMon]
+ inc a
+ ld hl, OTPartyCount
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld a, [hl]
+ ld [TempEnemyMonSpecies], a
+ ld [CurPartySpecies], a
+ call LoadEnemyMon
+ ld a, [CurPartySpecies]
+ cp $c9
+ jr nz, .asm_3d708
+ ld a, [$def4]
+ and a
+ jr nz, .asm_3d708
+ ld hl, EnemyMonAtkDefDV
+ ld a, $2d
+ call Predef
+ ld a, [UnownLetter]
+ ld [$def4], a
+
+.asm_3d708
+ ld hl, EnemyMonHPHi
+ ld a, [hli]
+ ld [$c6ea], a
+ ld a, [hl]
+ ld [$c6eb], a
+ ret
+; 3d714
+
+Function3d714: ; 3d714
+ ld a, [$d264]
+ dec a
+ jp z, .asm_3d749
+ ld a, [PartyCount]
+ dec a
+ jp z, .asm_3d749
+ ld a, [InLinkBattle]
+ and a
+ jp nz, .asm_3d749
+ ld a, [Options]
+ bit 6, a
+ jr nz, .asm_3d749
+ ld a, [CurPartyMon]
+ push af
+ ld a, [CurBattleMon]
+ ld [CurPartyMon], a
+ callba Functione538
+ pop bc
+ ld a, b
+ ld [CurPartyMon], a
+ jr c, .asm_3d749
+ scf
+ ret
+
+.asm_3d749
+ and a
+ ret
+; 3d74b
+
+Function3d74b: ; 3d74b
+ ld a, [CurPartyMon]
+ push af
+ callab Function39939
+ ld hl, BattleText_0x80aca
+ call StdBattleTextBox
+ lb bc, 1, 7
+ call PlaceYesNoBox
+ ld a, [$cfa9]
+ dec a
+ jr nz, .asm_3d79a
+ call Function3d2f7
+ call Function3d375
+ jr c, .asm_3d791
+ ld a, [CurBattleMon]
+ ld [$c71a], a
+ ld a, [CurPartyMon]
+ ld [CurBattleMon], a
+ call ClearPalettes
+ call DelayFrame
+ call Function3eda6
+ pop af
+ ld [CurPartyMon], a
+ xor a
+ ld [CurEnemyMove], a
+ ld [CurPlayerMove], a
+ and a
+ ret
+
+.asm_3d791
+ call ClearPalettes
+ call DelayFrame
+ call Function3eda6
+
+.asm_3d79a
+ pop af
+ ld [CurPartyMon], a
+ scf
+ ret
+; 3d7a0
+
+Function3d7a0: ; 3d7a0
+ xor a
+ ld [hBGMapMode], a
+ call Function1c07
+ call ClearSprites
+ ld hl, $c4a1
+ ld bc, $040a
+ call ClearBox
+ call WaitBGMap
+ jp Function3ee27
+; 3d7b8
+
+Function3d7b8: ; 3d7b8
+ callab Function39939
+ ld hl, BattleText_0x80af8
+ call StdBattleTextBox
+ jp WaitBGMap
+; 3d7c7
+
+Function3d7c7: ; 3d7c7
+ ld a, [TempEnemyMonSpecies]
+ ld [CurPartySpecies], a
+ ld [CurSpecies], a
+ call GetBaseData
+ ld a, $1
+ ld [MonType], a
+ ld a, $1f
+ call Predef
+ call Function3f47c
+ xor a
+ ld [$cfca], a
+ ld [$c689], a
+ call SetEnemyTurn
+ ld de, $0101
+ call Function3ee17
+ call Function3da79
+ jr nc, .asm_3d800
+ ld a, $1
+ ld [$c689], a
+ ld de, $0101
+ call Function3ee17
+
+.asm_3d800
+ ld bc, TempMonSpecies
+ callba Function4e53f
+ jr c, .asm_3d82c
+ callba CheckBattleScene
+ jr c, .asm_3d821
+ ld hl, $c4ac
+ ld d, $0
+ ld e, $0
+ ld a, $47
+ call Predef
+ jr .asm_3d82c
+
+.asm_3d821
+ ld a, $f
+ ld [CryTracks], a
+ ld a, [TempEnemyMonSpecies]
+ call Function37b6
+
+.asm_3d82c
+ call Function3e036
+ ld a, $1
+ ld [hBGMapMode], a
+ ret
+; 3d834
+
+Function3d834: ; 3d834
+ xor a
+ ld [LastEnemyCounterMove], a
+ ld [LastPlayerCounterMove], a
+ ld [LastEnemyMove], a
+ ld hl, EnemySubStatus1
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ ld [EnemyDisableCount], a
+ ld [EnemyFuryCutterCount], a
+ ld [$c681], a
+ ld [$c72c], a
+ ld [EnemyDisabledMove], a
+ ld [$c6fa], a
+ ld [$c730], a
+ ld [$c731], a
+ ld [EnemyTurnsTaken], a
+ ld hl, PlayerSubStatus5
+ res 7, [hl]
+ ret
+; 3d867
+
+Function3d867: ; 3d867
+ ld a, $7
+ ld b, $8
+ ld hl, EnemyAtkLevel
+.asm_3d86e
+ ld [hli], a
+ dec b
+ jr nz, .asm_3d86e
+ ret
+; 3d873
+
+Function3d873: ; 3d873
+ ld a, [PartyCount]
+ ld e, a
+ xor a
+ ld hl, PartyMon1CurHP
+ ld bc, $002f
+.asm_3d87e
+ or [hl]
+ inc hl
+ or [hl]
+ add hl, bc
+ dec e
+ jr nz, .asm_3d87e
+ ld d, a
+ ret
+; 3d887
+
+
+Function3d887: ; 3d887
+ ld a, [CurPartyMon]
+ ld hl, PartyMon1CurHP
+ call GetPartyLocation
+ ld a, [hli]
+ or [hl]
+ ret nz
+ ld a, [$d264]
+ and a
+ jr nz, .asm_3d8b1
+ ld hl, PartySpecies
+ ld a, [CurPartyMon]
+ ld c, a
+ ld b, 0
+ add hl, bc
+ ld a, [hl]
+ cp EGG
+ ld hl, BattleText_0x80b26
+ jr z, .asm_3d8ae
+ ld hl, BattleText_0x80b0b
+
+.asm_3d8ae
+ call StdBattleTextBox
+
+.asm_3d8b1
+ xor a
+ ret
+; 3d8b3
+
+
+Function3d8b3: ; 3d8b3
+ ld a, [BattleType]
+ cp $2
+ jp z, .asm_3d9a2
+ cp $6
+ jp z, .asm_3d9a2
+ cp $9
+ jp z, .asm_3d98d
+ cp $b
+ jp z, .asm_3d98d
+ cp $7
+ jp z, .asm_3d98d
+ cp $c
+ jp z, .asm_3d98d
+
+ ld a, [InLinkBattle]
+ and a
+ jp nz, .asm_3d9a2
+
+ ld a, [IsInBattle]
+ dec a
+ jp nz, .asm_3d992
+
+ ld a, [EnemySubStatus5]
+ bit 7, a
+ jp nz, .asm_3d98d
+
+ ld a, [$c730]
+ and a
+ jp nz, .asm_3d98d
+
+ push hl
+ push de
+ ld a, [BattleMonItem]
+ ld [$d265], a
+ ld b, a
+ callab GetItem
+ ld a, b
+ cp $48
+ pop de
+ pop hl
+ jr nz, .asm_3d916
+
+ call SetPlayerTurn
+ call GetItemName
+ ld hl, BattleText_0x80b89
+ call StdBattleTextBox
+ jp .asm_3d9a2
+
+.asm_3d916
+ ld a, [$d267]
+ inc a
+ ld [$d267], a
+ ld a, [hli]
+ ld [$ffb5], a
+ ld a, [hl]
+ ld [$ffb6], a
+ ld a, [de]
+ inc de
+ ld [$ffb1], a
+ ld a, [de]
+ ld [$ffb2], a
+ call Function30b4
+ ld de, $ffb5
+ ld hl, $ffb1
+ ld c, $2
+ call StringCmp
+ jr nc, .asm_3d9a2
+ xor a
+ ld [hMultiplicand], a
+ ld a, $20
+ ld [hMultiplier], a
+ call Multiply
+ ld a, [$ffb5]
+ ld [hProduct], a
+ ld a, [$ffb6]
+ ld [hMultiplicand], a
+ ld a, [$ffb1]
+ ld b, a
+ ld a, [$ffb2]
+ srl b
+ rr a
+ srl b
+ rr a
+ and a
+ jr z, .asm_3d9a2
+ ld [hMultiplier], a
+ ld b, $2
+ call Divide
+ ld a, [$ffb5]
+ and a
+ jr nz, .asm_3d9a2
+ ld a, [$d267]
+ ld c, a
+.asm_3d96c
+ dec c
+ jr z, .asm_3d97a
+ ld b, $1e
+ ld a, [$ffb6]
+ add b
+ ld [$ffb6], a
+ jr c, .asm_3d9a2
+ jr .asm_3d96c
+
+.asm_3d97a
+ call BattleRandom
+ ld b, a
+ ld a, [$ffb6]
+ cp b
+ jr nc, .asm_3d9a2
+ ld a, $1
+ ld [$d0ec], a
+ ld hl, BattleText_0x80b3b
+ jr .asm_3d995
+
+.asm_3d98d
+ ld hl, BattleText_0x80ba0
+ jr .asm_3d995
+
+.asm_3d992
+ ld hl, BattleText_0x80b49
+
+.asm_3d995
+ call StdBattleTextBox
+ ld a, $1
+ ld [$d266], a
+ call Function309d
+ and a
+ ret
+
+.asm_3d9a2
+ ld a, [InLinkBattle]
+ and a
+ ld a, $2
+ jr z, .asm_3d9cf
+ call Function309d
+ xor a
+ ld [$d0ec], a
+ ld a, $f
+ ld [CurMoveNum], a
+ xor a
+ ld [CurPlayerMove], a
+ call Function3e8e4
+ call Function30b4
+ call Function3d2e0
+ jr c, .asm_3d9f5
+
+; Got away safely
+ ld a, [$d430]
+ cp $f
+ ld a, $2
+ jr z, .asm_3d9cf
+ dec a
+.asm_3d9cf
+ ld b, a
+ ld a, [$d0ee]
+ and $c0
+ add b
+ ld [$d0ee], a
+ call Function3ceec
+ push de
+ ld de, SFX_RUN
+ call WaitPlaySFX
+ pop de
+ call WaitSFX
+ ld hl, BattleText_0x80b77
+ call StdBattleTextBox
+ call WaitSFX
+ call Function309d
+ scf
+ ret
+
+.asm_3d9f5
+ call Function3ceec
+ ld hl, $cd2a
+ bit 4, [hl]
+ jr nz, .asm_3da05
+ ld hl, BattleText_0x81863
+ call StdBattleTextBox
+
+.asm_3da05
+ call WaitSFX
+ call Function309d
+ scf
+ ret
+; 3da0d
+
+
+Function3da0d: ; 3da0d
+ ld a, $0
+ call GetPartyParamLocation
+ ld de, BattleMonSpecies
+ ld bc, $0006
+ call CopyBytes
+ ld bc, $000f
+ add hl, bc
+ ld de, BattleMonAtkDefDV
+ ld bc, $0007
+ call CopyBytes
+ inc hl
+ inc hl
+ inc hl
+ ld de, BattleMonLevel
+ ld bc, $0011
+ call CopyBytes
+ ld a, [BattleMonSpecies]
+ ld [TempBattleMonSpecies], a
+ ld [CurPartySpecies], a
+ ld [CurSpecies], a
+ call GetBaseData
+ ld a, [BaseType1]
+ ld [BattleMonType1], a
+ ld a, [BaseType2]
+ ld [BattleMonType2], a
+ ld hl, PartyMon1Nickname
+ ld a, [CurBattleMon]
+ call SkipNames
+ ld de, BattleMonNick
+ ld bc, $000b
+ call CopyBytes
+ ld hl, BattleMonAtk
+ ld de, PlayerStats
+ ld bc, $000a
+ call CopyBytes
+ call Function3ec2c
+ call BadgeStatBoosts
+ ret
+; 3da74
+
+Function3da74: ; 3da74
+ call Function3da85
+ jr asm_3da7c
+
+Function3da79: ; 3da79
+ call Function3da97
+
+asm_3da7c
+ ld b, h
+ ld c, l
+ callab CheckShininess
+ ret
+; 3da85
+
+Function3da85: ; 3da85
+ ld hl, BattleMonAtkDefDV
+ ld a, [PlayerSubStatus5]
+ bit 3, a
+ ret z
+ ld hl, PartyMon1DVs
+ ld a, [CurBattleMon]
+ jp GetPartyLocation
+; 3da97
+
+Function3da97: ; 3da97
+ ld hl, EnemyMonAtkDefDV
+ ld a, [EnemySubStatus5]
+ bit 3, a
+ ret z
+ ld hl, $c6f2
+ ld a, [IsInBattle]
+ dec a
+ ret z
+ ld hl, OTPartyMon1AtkDefDV
+ ld a, [CurOTMon]
+ jp GetPartyLocation
+; 3dab1
+
+Function3dab1: ; 3dab1
+ ld a, $7
+ ld b, $8
+ ld hl, PlayerAtkLevel
+.asm_3dab8
+ ld [hli], a
+ dec b
+ jr nz, .asm_3dab8
+ ret
+; 3dabd
+
+
+Function3dabd: ; 3dabd
+ ld a, [CurPartyMon]
+ ld hl, OTPartyMon1Species
+ call GetPartyLocation
+ ld de, EnemyMonSpecies
+ ld bc, $0006
+ call CopyBytes
+ ld bc, $000f
+ add hl, bc
+ ld de, EnemyMonAtkDefDV
+ ld bc, $0007
+ call CopyBytes
+ inc hl
+ inc hl
+ inc hl
+ ld de, EnemyMonLevel
+ ld bc, $0011
+ call CopyBytes
+ ld a, [EnemyMonSpecies]
+ ld [CurSpecies], a
+ call GetBaseData
+ ld hl, OTPartyMon1Nickname
+ ld a, [CurPartyMon]
+ call SkipNames
+ ld de, EnemyMonNick
+ ld bc, $000b
+ call CopyBytes
+ ld hl, EnemyMonAtk
+ ld de, EnemyStats
+ ld bc, $000a
+ call CopyBytes
+ call Function3ec30
+ ld hl, BaseType1
+ ld de, EnemyMonType1
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+ ld hl, BaseHP
+ ld de, EnemyMonBaseStats
+ ld b, $5
+.asm_3db25
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .asm_3db25
+ ld a, [CurPartyMon]
+ ld [CurOTMon], a
+ ret
+; 3db32
+
+
+Function3db32: ; 3db32
+ call ClearSprites
+ ld a, [CurBattleMon]
+ ld [$c71a], a
+ ld a, [CurPartyMon]
+ ld [CurBattleMon], a
+ call Function3d581
+ call Function3da0d
+ call Function3dab1
+ call Function3dbde
+ call Function3dc18
+ call Function3db5f
+ call EmptyBattleTextBox
+ call Function309d
+ ld hl, EnemyMonHPHi
+ ld a, [hli]
+ or [hl]
+ ret
+; 3db5f
+
+
+Function3db5f: ; 3db5f
+ ld hl, BattleMonAtkDefDV
+ ld a, $2d
+ call Predef
+ ld hl, $c505
+ ld b, $7
+ ld c, $8
+ call ClearBox
+ call WaitBGMap
+ xor a
+ ld [hBGMapMode], a
+ call Function3f43d
+ xor a
+ ld [$ffad], a
+ ld [$d0d2], a
+ ld [CurMoveNum], a
+ ld [TypeModifier], a
+ ld [PlayerMoveAnimation], a
+ ld [LastEnemyCounterMove], a
+ ld [LastPlayerCounterMove], a
+ ld [LastPlayerMove], a
+ call Function3e4a8
+ call Function3ee27
+ xor a
+ ld [$c731], a
+ call SetPlayerTurn
+ xor a
+ ld [$cfca], a
+ ld [$c689], a
+ ld de, $0101
+ call Function3ee17
+ call Function3da74
+ jr nc, .asm_3dbbc
+ ld a, $1
+ ld [$c689], a
+ ld de, $0101
+ call Function3ee17
+
+.asm_3dbbc
+ ld a, $0
+ call GetPartyParamLocation
+ ld b, h
+ ld c, l
+ callba Function4e53f
+ jr c, .asm_3dbd6
+ ld a, $f0
+ ld [CryTracks], a
+ ld a, [CurPartySpecies]
+ call Function37b6
+
+.asm_3dbd6
+ call Function3df48
+ ld a, $1
+ ld [hBGMapMode], a
+ ret
+; 3dbde
+
+Function3dbde: ; 3dbde
+ xor a
+ ld [LastEnemyCounterMove], a
+ ld [LastPlayerCounterMove], a
+ ld [LastPlayerMove], a
+ ld hl, PlayerSubStatus1
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ ld hl, PlayerUsedMoves
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ ld [PlayerDisableCount], a
+ ld [PlayerFuryCutterCount], a
+ ld [$c679], a
+ ld [$c72b], a
+ ld [DisabledMove], a
+ ld [$c6fe], a
+ ld [$c731], a
+ ld [$c730], a
+ ld [PlayerTurnsTaken], a
+ ld hl, EnemySubStatus5
+ res 7, [hl]
+ ret
+; 3dc18
+
+Function3dc18: ; 3dc18
+ ld hl, PlayerSubStatus1
+ res 7, [hl]
+ ld hl, EnemySubStatus1
+ res 7, [hl]
+ ret
+; 3dc23
+
+Function3dc23: ; 3dc23
+ ld hl, PlayerScreens
+ ld de, BattleMonType1
+ ld bc, Function3df48
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3dc3a
+ ld hl, EnemyScreens
+ ld de, EnemyMonType1
+ ld bc, Function3e036
+
+.asm_3dc3a
+ bit 0, [hl]
+ ret z
+ ld a, [de]
+ cp $2
+ ret z
+ inc de
+ ld a, [de]
+ cp $2
+ ret z
+ push bc
+ ld hl, BattleText_0x80bae
+ call StdBattleTextBox
+ call GetEighthMaxHP
+ call Function3cc39
+ pop hl
+ call Function3dc5a
+ jp WaitBGMap
+; 3dc5a
+
+Function3dc5a: ; 3dc5a
+ jp [hl]
+; 3dc5b
+
+Function3dc5b: ; 3dc5b
+ ld a, $10
+ call GetBattleVar
+ ld b, a
+ call Function3c5ec
+ ld a, b
+ cp $80
+ jr nz, .asm_3dce4
+ ld a, [CurBattleMon]
+ push af
+ ld hl, DoPlayerTurn
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3dc7e
+ ld hl, DoEnemyTurn
+ ld a, [$c71a]
+ ld [CurBattleMon], a
+
+.asm_3dc7e
+ ld a, BANK(DoPlayerTurn)
+ rst FarCall
+ ld a, $10
+ call _GetBattleVar
+ ld a, $ff
+ ld [hl], a
+ pop af
+ ld [CurBattleMon], a
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3dcc0
+ ld a, [$c71a]
+ call Function399f
+ ld hl, BattleMonHP
+ ld a, [hli]
+ or [hl]
+ jr nz, .asm_3dce4
+ ld a, $f0
+ ld [CryTracks], a
+ ld a, [BattleMonSpecies]
+ call Function37b6
+ ld a, [$c71a]
+ ld c, a
+ ld hl, $c664
+ ld b, $0
+ ld a, $3
+ call Predef
+ call Function3d43b
+ ld hl, BattleText_0x80a75
+ jr .asm_3dcdf
+
+.asm_3dcc0
+ ld hl, EnemyMonHPHi
+ ld a, [hli]
+ or [hl]
+ jr nz, .asm_3dce4
+ ld de, SFX_KINESIS
+ call PlaySFX
+ call WaitSFX
+ ld de, SFX_UNKNOWN_2A
+ call PlaySFX
+ call WaitSFX
+ call Function3d432
+ ld hl, BattleText_0x809a8
+
+.asm_3dcdf
+ call StdBattleTextBox
+ scf
+ ret
+
+.asm_3dce4
+ and a
+ ret
+; 3dce6
+
+Function3dce6: ; 3dce6
+ ld a, [hBattleTurn]
+ push af
+ xor a
+ ld [hBattleTurn], a
+ ld [$cfca], a
+ ld de, $0102
+ call Function3ee17
+ pop af
+ ld [hBattleTurn], a
+ ret
+; 3dcf9
+
+Function3dcf9: ; 3dcf9
+ ld a, [$ffcb]
+ cp $1
+ jr z, .asm_3dd17
+ call SetPlayerTurn
+ call Function3dd2f
+ call Function3dde9
+ call Function3de51
+ call SetEnemyTurn
+ call Function3dd2f
+ call Function3dde9
+ jp Function3de51
+
+.asm_3dd17
+ call SetEnemyTurn
+ call Function3dd2f
+ call Function3dde9
+ call Function3de51
+ call SetPlayerTurn
+ call Function3dd2f
+ call Function3dde9
+ jp Function3de51
+; 3dd2f
+
+Function3dd2f: ; 3dd2f
+ callab GetOpponentItem
+ ld a, b
+ cp $1
+ ret nz
+ ld de, EnemyMonHPLo
+ ld hl, EnemyMonMaxHPHi
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3dd4a
+ ld de, $c63d
+ ld hl, BattleMonMaxHP
+
+.asm_3dd4a
+ push bc
+ ld a, [de]
+ ld [$d1ec], a
+ add a
+ ld c, a
+ dec de
+ ld a, [de]
+ inc de
+ ld [$d1ed], a
+ adc a
+ ld b, a
+ ld a, b
+ cp [hl]
+ ld a, c
+ pop bc
+ jr z, .asm_3dd62
+ jr c, .asm_3dd66
+ ret
+
+.asm_3dd62
+ inc hl
+ cp [hl]
+ dec hl
+ ret nc
+
+.asm_3dd66
+ call Function3ddc8
+ ld a, [hli]
+ ld [Buffer2], a
+ ld a, [hl]
+ ld [Buffer1], a
+ ld a, [de]
+ add c
+ ld [$d1ee], a
+ ld c, a
+ dec de
+ ld a, [de]
+ adc $0
+ ld [$d1ef], a
+ ld b, a
+ ld a, [hld]
+ cp c
+ ld a, [hl]
+ sbc b
+ jr nc, .asm_3dd8d
+ ld a, [hli]
+ ld [$d1ef], a
+ ld a, [hl]
+ ld [$d1ee], a
+
+.asm_3dd8d
+ ld a, [$d1ef]
+ ld [de], a
+ inc de
+ ld a, [$d1ee]
+ ld [de], a
+ ld a, [hBattleTurn]
+ ld [$d10a], a
+ and a
+ ld hl, $c4ca
+ jr z, .asm_3dda4
+ ld hl, $c55e
+
+.asm_3dda4
+ ld [$d10a], a
+ ld a, $b
+ call Predef
+Function3ddac:
+ call RefreshBattleHuds
+ callab GetOpponentItem
+ ld a, [hl]
+ ld [$d265], a
+ call GetItemName
+ callab Function27192
+ ld hl, RecoveredUsingText
+ jp StdBattleTextBox
+; 3ddc8
+
+
+Function3ddc8: ; 3ddc8
+ push hl
+ push de
+ push bc
+ call EmptyBattleTextBox
+ ld a, $69
+ ld [FXAnimIDLo], a
+ call Function3c8e4
+ xor a
+ ld [$cfca], a
+ ld [FXAnimIDHi], a
+ ld a, $37
+ call Predef
+ call Function3c8e4
+ pop bc
+ pop de
+ pop hl
+ ret
+; 3dde9
+
+Function3dde9: ; 3dde9
+ callab GetOpponentItem
+ ld hl, .Statuses
+.asm_3ddf2
+ ld a, [hli]
+ cp $ff
+ ret z
+ inc hl
+ cp b
+ jr nz, .asm_3ddf2
+ dec hl
+ ld b, [hl]
+ ld a, $b
+ call _GetBattleVar
+ and b
+ ret z
+ xor a
+ ld [hl], a
+ push bc
+ call UpdateOpponentInParty
+ pop bc
+ ld a, $9
+ call _GetBattleVar
+ and [hl]
+ res 0, [hl]
+ ld a, $5
+ call _GetBattleVar
+ and [hl]
+ res 0, [hl]
+ ld a, b
+ cp $7f
+ jr nz, .asm_3de26
+ ld a, $7
+ call _GetBattleVar
+ res 7, [hl]
+
+.asm_3de26
+ ld hl, Function0x365fd
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3de31
+ ld hl, Function0x365d7
+
+.asm_3de31
+ call Function3c8e4
+ ld a, BANK(Function0x365fd)
+ rst FarCall
+ call Function3c8e4
+ call Function3ddc8
+ call Function3ddac
+ ld a, $1
+ and a
+ ret
+; 3de44
+
+.Statuses ; 3de44
+ db HELD_HEAL_POISON, 1 << PSN
+ db HELD_HEAL_FREEZE, 1 << FRZ
+ db HELD_HEAL_BURN, 1 << BRN
+ db HELD_HEAL_SLEEP, SLP
+ db HELD_HEAL_PARALYZE, 1 << PAR
+ db HELD_HEAL_STATUS, 1 << PSN | 1 << FRZ | 1 << BRN | SLP | 1 << PAR
+ db $ff
+; 3de51
+
+
+Function3de51: ; 3de51
+ ld a, $7
+ call GetBattleVar
+ bit 7, a
+ ret z
+ callab GetOpponentItem
+ ld a, b
+ cp $10
+ jr z, .asm_3de67
+ cp $f
+ ret nz
+
+.asm_3de67
+ ld a, [hl]
+ ld [$d265], a
+ ld a, $7
+ call _GetBattleVar
+ res 7, [hl]
+ call GetItemName
+ call Function3ddc8
+ ld hl, BattleText_0x80dab
+ call StdBattleTextBox
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .asm_3de90
+ call Function3df1f
+ xor a
+ ld [bc], a
+ ld a, [IsInBattle]
+ dec a
+ ret z
+ ld [hl], $0
+ ret
+
+.asm_3de90
+ call Function3df12
+ xor a
+ ld [bc], a
+ ld [hl], a
+ ret
+; 3de97
+
+Function3de97: ; 3de97
+ ld a, [$ffcb]
+ cp $1
+ jr z, .asm_3dea3
+ call Function3dea9
+ jp Function3deb1
+
+.asm_3dea3
+ call Function3deb1
+ jp Function3dea9
+; 3dea9
+
+Function3dea9: ; 3dea9
+ call Function3df12
+ ld a, $0
+ jp Function3deb6
+; 3deb1
+
+Function3deb1: ; 3deb1
+ call Function3df1f
+ ld a, $1
+Function3deb6: ; 3deb6
+ ld [hBattleTurn], a
+ ld d, h
+ ld e, l
+ push de
+ push bc
+ ld a, [bc]
+ ld b, a
+ callab GetItem
+ ld hl, .data_3defc
+.asm_3dec7
+ ld a, [hli]
+ cp $ff
+ jr z, .asm_3def9
+ inc hl
+ inc hl
+ cp b
+ jr nz, .asm_3dec7
+ pop bc
+ ld a, [bc]
+ ld [$d265], a
+ push bc
+ dec hl
+ dec hl
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, BANK(BattleCommand70)
+ rst FarCall
+ pop bc
+ pop de
+ ld a, [FailedMessage]
+ and a
+ ret nz
+ xor a
+ ld [bc], a
+ ld [de], a
+ call GetItemName
+ ld hl, BattleText_0x80bde
+ call StdBattleTextBox
+ callab BattleCommand8c
+ ret
+
+.asm_3def9
+ pop bc
+ pop de
+ ret
+; 3defc
+
+.data_3defc
+ dbw $1f, BattleCommand70
+ dbw $20, BattleCommand71
+ dbw $21, BattleCommand72
+ dbw $22, BattleCommand73
+ dbw $23, BattleCommand74
+ dbw $24, BattleCommand75
+ dbw $25, BattleCommand76
+ db $ff
+; 3df12
+
+
+Function3df12: ; 3df12
+ ld hl, PartyMon1Item
+ ld a, [CurBattleMon]
+ call GetPartyLocation
+ ld bc, BattleMonItem
+ ret
+; 3df1f
+
+Function3df1f: ; 3df1f
+ ld hl, OTPartyMon1Item
+ ld a, [CurOTMon]
+ call GetPartyLocation
+ ld bc, EnemyMonItem
+ ret
+; 3df2c
+
+Function3df2c: ; 3df2c
+ push hl
+ push de
+ push bc
+ call DrawPlayerHUD
+ ld hl, PlayerHPPal
+ call SetHPPal
+ call CheckDanger
+ call Function3e043
+ ld hl, EnemyHPPal
+ call SetHPPal
+ pop bc
+ pop de
+ pop hl
+ ret
+; 3df48
+
+
+
+Function3df48: ; 3df48
+ push hl
+ push de
+ push bc
+ call DrawPlayerHUD
+ call UpdatePlayerHPPal
+ call CheckDanger
+ pop bc
+ pop de
+ pop hl
+ ret
+; 3df58
+
+DrawPlayerHUD: ; 3df58
+ xor a
+ ld [hBGMapMode], a
+
+; Clear the area
+ hlcoord 9, 7
+ ld bc, $050b
+ call ClearBox
+
+ callba DrawPlayerExpBar
+
+ hlcoord 18, 9
+ ld [hl], $73 ; vertical bar
+ call PrintPlayerHUD
+
+; HP bar
+ hlcoord 10, 9
+ ld b, OTPARTYMON
+ xor a
+ ld [MonType], a
+ ld a, PREDEF_DRAW_PLAYER_HP
+ call Predef
+
+; Exp bar
+ push de
+ ld a, [CurBattleMon]
+ ld hl, PartyMon1Exp + 2
+ call GetPartyLocation
+ ld d, h
+ ld e, l
+
+ hlcoord 10, 11
+ ld a, [TempMonLevel]
+ ld b, a
+ call FillInExpBar
+ pop de
+ ret
+; 3df98
+
+UpdatePlayerHPPal: ; 3df98
+ ld hl, PlayerHPPal
+ jp Function3e12e
+; 3df9e
+
+CheckDanger: ; 3df9e
+ ld hl, BattleMonHP
+ ld a, [hli]
+ or [hl]
+ jr z, .asm_3dfb2
+ ld a, [$c6fd]
+ and a
+ jr nz, .asm_3dfbe
+ ld a, [PlayerHPPal]
+ cp $2
+ jr z, .asm_3dfb9
+
+.asm_3dfb2
+ ld hl, Danger
+ res 7, [hl]
+ jr .asm_3dfbe
+
+.asm_3dfb9
+ ld hl, Danger
+ set 7, [hl]
+
+.asm_3dfbe
+ ret
+; 3dfbf
+
+PrintPlayerHUD: ; 3dfbf
+ ld de, BattleMonNick
+ hlcoord 10, 7
+ call Function3e138
+ call PlaceString
+
+ push bc
+
+ ld a, [CurBattleMon]
+ ld hl, PartyMon1DVs
+ call GetPartyLocation
+ ld de, TempMonDVs
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+ ld hl, BattleMonLevel
+ ld de, TempMonLevel
+ ld bc, $0011
+ call CopyBytes
+ ld a, [CurBattleMon]
+ ld hl, PartyMon1Species
+ call GetPartyLocation
+ ld a, [hl]
+ ld [CurPartySpecies], a
+ ld [CurSpecies], a
+ call GetBaseData
+
+ pop hl
+ dec hl
+
+ ld a, $3
+ ld [MonType], a
+ callab GetGender
+ ld a, $7f
+ jr c, .asm_3e013
+ ld a, $ef
+ jr nz, .asm_3e013
+ ld a, $f5
+
+.asm_3e013
+ ld hl, $c551
+ ld [hl], a
+ ld hl, $c54e
+ push af
+ push hl
+ ld de, BattleMonStatus
+ ld a, $21
+ call Predef
+ pop hl
+ pop bc
+ ret nz
+ ld a, b
+ cp $7f
+ jr nz, .asm_3e02d
+ dec hl
+
+.asm_3e02d
+ ld a, [BattleMonLevel]
+ ld [TempMonLevel], a
+ jp PrintLevel
+; 3e036
+
+Function3e036: ; 3e036
+ push hl
+ push de
+ push bc
+ call Function3e043
+ call Function3e127
+ pop bc
+ pop de
+ pop hl
+ ret
+; 3e043
+
+Function3e043: ; 3e043
+ xor a
+ ld [hBGMapMode], a
+ ld hl, $c4a1
+ ld bc, $040b
+ call ClearBox
+ callba Function2c0c5
+ ld a, [TempEnemyMonSpecies]
+ ld [CurSpecies], a
+ ld [CurPartySpecies], a
+ call GetBaseData
+ ld de, EnemyMonNick
+ ld hl, $c4a1
+ call Function3e138
+ call PlaceString
+ ld h, b
+ ld l, c
+ dec hl
+ ld hl, EnemyMonAtkDefDV
+ ld de, TempMonDVs
+ ld a, [EnemySubStatus5]
+ bit 3, a
+ jr z, .asm_3e080
+ ld hl, $c6f2
+
+.asm_3e080
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+ ld a, $3
+ ld [MonType], a
+ callab GetGender
+ ld a, $7f
+ jr c, .asm_3e09a
+ ld a, $ef
+ jr nz, .asm_3e09a
+ ld a, $f5
+
+.asm_3e09a
+ ld hl, $c4bd
+ ld [hl], a
+ ld hl, $c4ba
+ push af
+ push hl
+ ld de, EnemyMonStatus
+ ld a, $21
+ call Predef
+ pop hl
+ pop bc
+ jr nz, .asm_3e0be
+ ld a, b
+ cp $7f
+ jr nz, .asm_3e0b5
+ dec hl
+
+.asm_3e0b5
+ ld a, [EnemyMonLevel]
+ ld [TempMonLevel], a
+ call PrintLevel
+
+.asm_3e0be
+ ld hl, EnemyMonHPHi
+ ld a, [hli]
+ ld [$ffb5], a
+ ld a, [hld]
+ ld [$ffb6], a
+ or [hl]
+ jr nz, .asm_3e0d1
+ ld c, a
+ ld e, a
+ ld d, $6
+ jp .asm_3e11a
+
+.asm_3e0d1
+ xor a
+ ld [hMultiplicand], a
+ ld a, $30
+ ld [hMultiplier], a
+ call Multiply
+ ld hl, EnemyMonMaxHPHi
+ ld a, [hli]
+ ld b, a
+ ld a, [hl]
+ ld [hMultiplier], a
+ ld a, b
+ and a
+ jr z, .asm_3e105
+ ld a, [hMultiplier]
+ srl b
+ rr a
+ srl b
+ rr a
+ ld [hMultiplier], 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_3e105
+ ld a, [$ffb5]
+ ld [hProduct], a
+ ld a, [$ffb6]
+ ld [hMultiplicand], a
+ ld a, $2
+ ld b, a
+ call Divide
+ ld a, [$ffb6]
+ ld e, a
+ ld a, $6
+ ld d, a
+ ld c, a
+.asm_3e11a
+ xor a
+ ld [$d10a], a
+ ld hl, $c4ca
+ ld b, $0
+ call DrawHPBar
+ ret
+; 3e127
+
+Function3e127: ; 3e127
+ ld hl, EnemyHPPal
+ call Function3e12e
+ ret
+; 3e12e
+
+Function3e12e: ; 3e12e
+ ld b, [hl]
+ call SetHPPal
+ ld a, [hl]
+ cp b
+ ret z
+ jp Function3ee27
+; 3e138
+
+Function3e138: ; 3e138
+ ret
+; 3e139
+
+Function3e139: ; 3e139
+ xor a
+ ld [hBGMapMode], a
+ call Function30bf
+ ld a, [BattleType]
+ cp $2
+ jr z, .asm_3e156
+ cp $3
+ jr z, .asm_3e156
+ call EmptyBattleTextBox
+ call UpdateBattleHuds
+ call EmptyBattleTextBox
+ call Function309d
+
+.asm_3e156
+ ld a, [BattleType]
+ cp $6
+ jr nz, .asm_3e165
+ callba Function24f13
+ jr .asm_3e175
+
+.asm_3e165
+ ld a, [InputType]
+ or a
+ jr z, .asm_3e171
+ callba Function1de294
+.asm_3e171
+ call Function3e19b
+ ret c
+
+.asm_3e175
+ ld a, $1
+ ld [hBGMapMode], a
+ ld a, [$d0d2]
+ cp $1
+ jp z, Function3e192
+ cp $3
+ jp z, Function3e1c7
+ cp $2
+ jp z, Function3e28d
+ cp $4
+ jp z, Function3e489
+ jr .asm_3e156
+; 3e192
+
+Function3e192: ; 3e192
+ xor a
+ ld [$d267], a
+ call Function30b4
+ and a
+ ret
+; 3e19b
+
+Function3e19b: ; 3e19b
+ call Function3d2f1
+ jr z, .asm_3e1a8
+ callba Function24ef2
+ and a
+ ret
+
+.asm_3e1a8
+ callba Function100b12
+ ld a, [$cd2b]
+ and a
+ ret z
+ ld hl, $cd2a
+ bit 4, [hl]
+ jr nz, .asm_3e1c5
+ ld hl, $5863
+ call StdBattleTextBox
+ ld c, $3c
+ call DelayFrames
+
+.asm_3e1c5
+ scf
+ ret
+; 3e1c7
+
+Function3e1c7: ; 3e1c7
+ ld a, [InLinkBattle]
+ and a
+ jp nz, Function3e22b
+ ld a, [$cfc0]
+ and a
+ jp nz, Function3e22b
+ call Function1d6e
+ ld a, [BattleType]
+ cp $3
+ jr z, .asm_3e1f1
+ cp $6
+ jr z, .asm_3e201
+ callba Function10493
+ ld a, [$d0ec]
+ and a
+ jr z, .asm_3e20d
+ jr .asm_3e209
+
+.asm_3e1f1
+ callba Function107bb
+ ld a, $5
+ ld [CurItem], a
+ call DoItemEffect
+ jr .asm_3e209
+
+.asm_3e201
+ ld a, $b1
+ ld [CurItem], a
+ call DoItemEffect
+
+.asm_3e209
+ call Function3e234
+ ret
+
+.asm_3e20d
+ call ClearPalettes
+ call DelayFrame
+ call Function3ed9f
+ call Function3f43d
+ call Function3f47c
+ call Function1c07
+ call WaitBGMap
+ call Function3ee27
+ call Function309d
+ jp Function3e139
+; 3e22b
+
+Function3e22b: ; 3e22b
+ ld hl, BattleText_0x80bf3
+ call StdBattleTextBox
+ jp Function3e139
+; 3e234
+
+Function3e234: ; 3e234
+ ld a, [$c64e]
+ and a
+ jr nz, .asm_3e279
+ callab CheckItemPocket
+ ld a, [$d142]
+ cp $3
+ jr z, .asm_3e24a
+ call WhiteBGMap
+
+.asm_3e24a
+ xor a
+ ld [hBGMapMode], a
+ call Function3ed9f
+ call ClearSprites
+ ld a, [BattleType]
+ cp $3
+ jr z, .asm_3e25d
+ call Function3f43d
+
+.asm_3e25d
+ call Function3f47c
+ ld a, $1
+ ld [$cfa9], a
+ call Function1c07
+ call Function3df2c
+ call WaitBGMap
+ call Function309d
+ call Function1fbf
+ call Function3ee27
+ and a
+ ret
+
+.asm_3e279
+ xor a
+ ld [$c64e], a
+ ld a, [$d0ee]
+ and $c0
+ ld [$d0ee], a
+ call Function1fbf
+ call Function32f9
+ scf
+ ret
+; 3e28d
+
+Function3e28d: ; 3e28d
+ call Function1d6e
+Function3e290:
+ call Function1c07
+ call Function1d6e
+ call WhiteBGMap
+Function3e299:
+ call Function3d2fa
+ xor a
+ ld [PartyMenuActionText], a
+ call Function3d313
+ call Function3d329
+ jr c, .asm_3e2da
+.asm_3e2a8
+ callba Function8ea4a
+ call Function3e2f5
+ jr c, .asm_3e2c8
+ call Function1bee
+ ld a, [$cfa9]
+ cp $1
+ jp z, Function3e358
+ cp $2
+ jr z, .asm_3e2cf
+ cp $3
+ jr z, .asm_3e2da
+ jr .asm_3e2a8
+
+.asm_3e2c8
+ call Function3d2e0
+ jr c, .asm_3e2da
+ jr Function3e299
+
+.asm_3e2cf
+ call Function3e308
+ call Function3d2e0
+ jr c, .asm_3e2da
+ jp Function3e290
+
+.asm_3e2da
+ call ClearSprites
+ call ClearPalettes
+ call DelayFrame
+ call Function3eda6
+ call Function1c17
+ call Function309d
+ call ClearSGB
+ call Function32f9
+ jp Function3e139
+; 3e2f5
+
+Function3e2f5: ; 3e2f5
+ call Function3d2f1
+ jr z, .asm_3e301
+ callba Function24e99
+ ret
+
+.asm_3e301
+ callba Function100d22
+ ret
+; 3e308
+
+Function3e308: ; 3e308
+ call DisableLCD
+ ld hl, $9310
+ ld de, VTiles0
+ ld bc, $0110
+ call CopyBytes
+ ld hl, VTiles2
+ ld de, $8110
+ ld bc, $0310
+ call CopyBytes
+ call EnableLCD
+ call ClearSprites
+ call LowVolume
+ xor a
+ ld [MonType], a
+ callba Function4dc7b
+ call MaxVolume
+ call DisableLCD
+ ld hl, VTiles0
+ ld de, $9310
+ ld bc, $0110
+ call CopyBytes
+ ld hl, $8110
+ ld de, VTiles2
+ ld bc, $0310
+ call CopyBytes
+ call EnableLCD
+ ret
+; 3e358
+
+
+Function3e358: ; 3e358
+ ld a, [CurBattleMon]
+ ld d, a
+ ld a, [CurPartyMon]
+ cp d
+ jr nz, .asm_3e36b
+ ld hl, BattleText_0x80c0d
+ call StdBattleTextBox
+ jp Function3e299
+
+.asm_3e36b
+ ld a, [$c730]
+ and a
+ jr nz, .asm_3e378
+ ld a, [EnemySubStatus5]
+ bit 7, a
+ jr z, .asm_3e381
+
+.asm_3e378
+ ld hl, BattleText_0x80c22
+ call StdBattleTextBox
+ jp Function3e299
+
+.asm_3e381
+ call Function3d887
+ jp z, Function3e299
+ ld a, [CurBattleMon]
+ ld [$c71a], a
+ ld a, $2
+ ld [$d0ec], a
+ call ClearPalettes
+ call DelayFrame
+ call ClearSprites
+ call Function3eda6
+ call Function1c17
+ call ClearSGB
+ call Function32f9
+ ld a, [CurPartyMon]
+ ld [CurBattleMon], a
+ ; fallthrough
+; 3e3ad
+
+Function3e3ad: ; 3e3ad
+ ld a, $1
+ ld [$c710], a
+ ld a, [InLinkBattle]
+ and a
+ jr z, .asm_3e3c1
+ call Function1d6e
+ call Function3e8e4
+ call Function1c17
+
+.asm_3e3c1
+ call Function3e7c1
+ ld a, [InLinkBattle]
+ and a
+ jr nz, .asm_3e3cf
+
+.asm_3e3ca
+ call Function3e40b
+ and a
+ ret
+
+.asm_3e3cf
+ ld a, [$d430]
+ cp $e
+ jp z, .asm_3e3ca
+ cp $d
+ jp z, .asm_3e3ca
+ cp $4
+ jp c, .asm_3e3ca
+ cp $f
+ jr nz, .asm_3e3e9
+ call Function3c0e5
+ ret
+
+.asm_3e3e9
+ ld a, [$ffcb]
+ cp $1
+ jr z, .asm_3e3f7
+ call Function3e40b
+ call Function3e3ff
+ and a
+ ret
+
+.asm_3e3f7
+ call Function3e3ff
+ call Function3e40b
+ and a
+ ret
+; 3e3ff
+
+Function3e3ff: ; 3e3ff
+ callab Function3846c
+ call SetEnemyTurn
+ jp Function3dc23
+; 3e40b
+
+Function3e40b: ; 3e40b
+ call Function3f2f4
+ ld c, $32
+ call DelayFrames
+ ld hl, PlayerSubStatus4
+ res 6, [hl]
+ call SetEnemyTurn
+ call Function3dc5b
+ jr c, .asm_3e423
+ call Function3dce6
+
+.asm_3e423
+ ld hl, $c535
+ ld bc, $050b
+ call ClearBox
+ ld a, [CurBattleMon]
+ ld [CurPartyMon], a
+ call Function3d581
+ call Function3da0d
+ call Function3dab1
+ call Function3f26d
+ call Function3dbde
+ call Function3dc18
+ call Function3db5f
+ call EmptyBattleTextBox
+ call Function309d
+ call SetPlayerTurn
+ call Function3dc23
+ ld a, $2
+ ld [$cfa9], a
+ ret
+; 3e459
+
+Function3e459: ; 3e459
+ ld c, $32
+ call DelayFrames
+ ld hl, $c535
+ ld bc, $050b
+ call ClearBox
+ ld a, [CurPartyMon]
+ ld [CurBattleMon], a
+ call Function3d581
+ call Function3da0d
+ xor a
+ ld [$d265], a
+ call Function3ecab
+ call Function3db5f
+ call EmptyBattleTextBox
+ call Function309d
+ call SetPlayerTurn
+ jp Function3dc23
+; 3e489
+
+
+
+Function3e489: ; 3e489
+ call Function30b4
+ ld a, $3
+ ld [$cfa9], a
+ ld hl, BattleMonSpd
+ ld de, EnemyMonSpd
+ call Function3d8b3
+ ld a, $0
+ ld [$d266], a
+ ret c
+ ld a, [$d0ec]
+ and a
+ ret nz
+ jp Function3e139
+; 3e4a8
+
+
+
+Function3e4a8: ; 3e4a8
+ ld a, [BattleMonItem]
+ ld b, a
+ callab GetItem
+ ld a, b
+ cp $4c
+ ret nz
+ ld a, $1
+ ld [$c73d], a
+ ret
+; 3e4bc
+
+Function3e4bc: ; 3e4bc
+ call Function3d2f1
+ jr nz, .asm_3e4c8
+ callba Function100b9f
+ ret
+
+.asm_3e4c8
+ ld hl, EnemyMonMove1
+ ld a, [$d235]
+ dec a
+ jr z, .asm_3e4e2
+ dec a
+ jr z, .asm_3e4dd
+ call Function3e786
+ ret z
+ ld hl, BattleMonMove1
+ jr .asm_3e4e2
+
+.asm_3e4dd
+ ld a, $2
+ call GetPartyParamLocation
+
+.asm_3e4e2
+ ld de, $d25e
+ ld bc, $0004
+ call CopyBytes
+ xor a
+ ld [hBGMapMode], a
+ ld hl, $c594
+ ld b, $4
+ ld c, $e
+ ld a, [$d235]
+ cp $2
+ jr nz, .asm_3e503
+ ld hl, $c544
+ ld b, $4
+ ld c, $e
+
+.asm_3e503
+ call TextBox
+ ld hl, $c5aa
+ ld a, [$d235]
+ cp $2
+ jr nz, .asm_3e513
+ ld hl, $c55a
+
+.asm_3e513
+ ld a, $14
+ ld [Buffer1], a
+ ld a, $20
+ call Predef
+ ld b, $5
+ ld a, [$d235]
+ cp $2
+ ld a, $d
+ jr nz, .asm_3e52c
+ ld b, $5
+ ld a, $9
+
+.asm_3e52c
+ ld [$cfa1], a
+ ld a, b
+ ld [$cfa2], a
+ ld a, [$d235]
+ cp $1
+ jr z, .asm_3e53e
+ ld a, [CurMoveNum]
+ inc a
+
+.asm_3e53e
+ ld [$cfa9], a
+ ld a, $1
+ ld [$cfaa], a
+ ld a, [$d0eb]
+ inc a
+ ld [$cfa3], a
+ ld a, $1
+ ld [$cfa4], a
+ ld c, $2c
+ ld a, [$d235]
+ dec a
+ ld b, $c1
+ jr z, .asm_3e569
+ dec a
+ ld b, $c3
+ jr z, .asm_3e569
+ ld a, [InLinkBattle]
+ and a
+ jr nz, .asm_3e569
+ ld b, $c7
+
+.asm_3e569
+ ld a, b
+ ld [$cfa8], a
+ ld a, c
+ ld [$cfa5], a
+ xor a
+ ld [$cfa6], a
+ ld a, $10
+ ld [$cfa7], a
+.asm_3e57a
+ ld a, [$d235]
+ and a
+ jr z, .asm_3e58e
+ dec a
+ jr nz, .asm_3e5a3
+ ld hl, $c5c3
+ ld de, .string_3e61c
+ call PlaceString
+ jr .asm_3e5a3
+
+.asm_3e58e
+ call MoveInfoBox
+ ld a, [$d0e3]
+ and a
+ jr z, .asm_3e5a3
+ ld hl, $c5a9
+ ld bc, $0014
+ dec a
+ call AddNTimes
+ ld [hl], $ec
+
+.asm_3e5a3
+ ld a, $1
+ ld [hBGMapMode], a
+ call Function1bd3
+ bit 6, a
+ jp nz, .asm_3e61d
+ bit 7, a
+ jp nz, .asm_3e62e
+ bit 2, a
+ jp nz, Function3e643
+ bit 1, a
+ push af
+ xor a
+ ld [$d0e3], a
+ ld a, [$cfa9]
+ dec a
+ ld [$cfa9], a
+ ld b, a
+ ld a, [$d235]
+ dec a
+ jr nz, .asm_3e5d0
+ pop af
+ ret
+
+.asm_3e5d0
+ dec a
+ ld a, b
+ ld [CurMoveNum], a
+ jr nz, .asm_3e5d9
+ pop af
+ ret
+
+.asm_3e5d9
+ pop af
+ ret nz
+ ld hl, BattleMonPPMove1
+ ld a, [$cfa9]
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld a, [hl]
+ and $3f
+ jr z, .asm_3e610
+ ld a, [PlayerDisableCount]
+ swap a
+ and $f
+ dec a
+ cp c
+ jr z, .asm_3e60b
+ ld a, [$c6e1]
+ and a
+ jr nz, .asm_3e606
+ ld a, [$cfa9]
+ ld hl, BattleMonMove1
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld a, [hl]
+
+.asm_3e606
+ ld [CurPlayerMove], a
+ xor a
+ ret
+
+.asm_3e60b
+ ld hl, BattleText_0x80c5b
+ jr .asm_3e613
+
+.asm_3e610
+ ld hl, Function3cc39
+
+.asm_3e613
+ call StdBattleTextBox
+ call Function30b4
+ jp Function3e4bc
+; 3e61c
+
+.string_3e61c ; 3e61c
+ db "@"
+; 3e61d
+
+.asm_3e61d
+ ld a, [$cfa9]
+ and a
+ jp nz, .asm_3e57a
+ ld a, [$d0eb]
+ inc a
+ ld [$cfa9], a
+ jp .asm_3e57a
+; 3e62e
+
+.asm_3e62e: ; 3e62e
+ ld a, [$cfa9]
+ ld b, a
+ ld a, [$d0eb]
+ inc a
+ inc a
+ cp b
+ jp nz, .asm_3e57a
+ ld a, $1
+ ld [$cfa9], a
+ jp .asm_3e57a
+; 3e643
+
+Function3e643: ; 3e643
+ ld a, [$d0e3]
+ and a
+ jr z, .asm_3e6bf
+ ld hl, BattleMonMoves
+ call .asm_3e6a5
+ ld hl, BattleMonPP
+ call .asm_3e6a5
+ ld hl, PlayerDisableCount
+ ld a, [hl]
+ swap a
+ and $f
+ ld b, a
+ ld a, [$cfa9]
+ cp b
+ jr nz, .asm_3e671
+ ld a, [hl]
+ and $f
+ ld b, a
+ ld a, [$d0e3]
+ swap a
+ add b
+ ld [hl], a
+ jr .asm_3e682
+
+.asm_3e671
+ ld a, [$d0e3]
+ cp b
+ jr nz, .asm_3e682
+ ld a, [hl]
+ and $f
+ ld b, a
+ ld a, [$cfa9]
+ swap a
+ add b
+ ld [hl], a
+
+.asm_3e682
+ ld a, [PlayerSubStatus5]
+ bit 3, a
+ jr nz, .asm_3e69e
+ ld hl, PartyMon1Moves
+ ld a, [CurBattleMon]
+ call GetPartyLocation
+ push hl
+ call .asm_3e6a5
+ pop hl
+ ld bc, $0015
+ add hl, bc
+ call .asm_3e6a5
+
+.asm_3e69e
+ xor a
+ ld [$d0e3], a
+ jp Function3e4bc
+
+.asm_3e6a5
+ push hl
+ ld a, [$d0e3]
+ dec a
+ ld c, a
+ ld b, 0
+ add hl, bc
+ ld d, h
+ ld e, l
+ pop hl
+ ld a, [$cfa9]
+ dec a
+ ld c, a
+ ld b, 0
+ add hl, bc
+ ld a, [de]
+ ld b, [hl]
+ ld [hl], a
+ ld a, b
+ ld [de], a
+ ret
+
+.asm_3e6bf
+ ld a, [$cfa9]
+ ld [$d0e3], a
+ jp Function3e4bc
+; 3e6c8
+
+MoveInfoBox: ; 3e6c8
+ xor a
+ ld [hBGMapMode], a
+
+ hlcoord 0, 8
+ ld b, 3
+ ld c, 9
+ call TextBox
+ call MobileTextBorder
+
+ ld a, [PlayerDisableCount]
+ and a
+ jr z, .asm_3e6f4
+
+ swap a
+ and $f
+ ld b, a
+ ld a, [$cfa9]
+ cp b
+ jr nz, .asm_3e6f4
+
+ hlcoord 1, 10
+ ld de, .Disabled
+ call PlaceString
+ jr .done
+
+.asm_3e6f4
+ ld hl, $cfa9
+ dec [hl]
+ call SetPlayerTurn
+ ld hl, BattleMonMoves
+ ld a, [$cfa9]
+ ld c, a
+ ld b, 0
+ add hl, bc
+ ld a, [hl]
+ ld [CurPlayerMove], a
+
+ ld a, [CurBattleMon]
+ ld [CurPartyMon], a
+ ld a, WILDMON
+ ld [MonType], a
+ callab Functionf8ec
+
+ ld hl, $cfa9
+ ld c, [hl]
+ inc [hl]
+ ld b, 0
+ ld hl, BattleMonPP
+ add hl, bc
+ ld a, [hl]
+ and $3f
+ ld [StringBuffer1], a
+ call Function3e75f
+
+ hlcoord 1, 9
+ ld de, .Type
+ call PlaceString
+
+ hlcoord 7, 11
+ ld [hl], "/"
+
+ callab UpdateMoveData
+ ld a, [PlayerMoveAnimation]
+ ld b, a
+ hlcoord 2, 10
+ ld a, PREDEF_PRINT_MOVE_TYPE
+ call Predef
+
+.done
+ ret
+; 3e74f
+
+.Disabled
+ db "Disabled!@"
+.Type
+ db "TYPE/@"
+; 3e75f
+
+
+Function3e75f: ; 3e75f
+ hlcoord 5, 11
+ ld a, [InLinkBattle]
+ cp $4
+ jr c, .asm_3e76c
+ hlcoord 5, 11
+
+.asm_3e76c
+ push hl
+ ld de, StringBuffer1
+ ld bc, $0102
+ call PrintNum
+ pop hl
+ inc hl
+ inc hl
+ ld [hl], "/"
+ inc hl
+ ld de, $d265
+ ld bc, $0102
+ call PrintNum
+ ret
+; 3e786
+
+Function3e786: ; 3e786
+ ld a, STRUGGLE
+ ld [CurPlayerMove], a
+ ld a, [PlayerDisableCount]
+ and a
+ ld hl, BattleMonPP
+ jr nz, .asm_3e79f
+
+ ld a, [hli]
+ or [hl]
+ inc hl
+ or [hl]
+ inc hl
+ or [hl]
+ and $3f
+ ret nz
+ jr .asm_3e7b4
+
+.asm_3e79f
+ swap a
+ and $f
+ ld b, a
+ ld d, $5
+ xor a
+.asm_3e7a7
+ dec d
+ jr z, .asm_3e7b2
+ ld c, [hl]
+ inc hl
+ dec b
+ jr z, .asm_3e7a7
+ or c
+ jr .asm_3e7a7
+
+.asm_3e7b2
+ and a
+ ret nz
+
+.asm_3e7b4
+ ld hl, BattleText_0x80c72
+ call StdBattleTextBox
+ ld c, 60
+ call DelayFrames
+ xor a
+ ret
+; 3e7c1
+
+
+
+Function3e7c1: ; 3e7c1
+ ld a, [$c711]
+ and a
+ ret nz
+ ld a, [InLinkBattle]
+ and a
+ jr z, .asm_3e817
+ call EmptyBattleTextBox
+ call Function309d
+ ld a, [$d0ec]
+ and a
+ call z, Function3e8e4
+ call Function30b4
+ ld a, [$d430]
+ cp $e
+ jp z, .asm_3e8bd
+ cp $d
+ jp z, .asm_3e82c
+ cp $4
+ jp nc, Function3e8c1
+ ld [CurEnemyMoveNum], a
+ ld c, a
+ ld a, [EnemySubStatus1]
+ bit 6, a
+ jp nz, .asm_3e882
+ ld a, [EnemySubStatus3]
+ and $13
+ jp nz, .asm_3e882
+ ld hl, EnemySubStatus5
+ bit 4, [hl]
+ ld a, [LastEnemyMove]
+ jp nz, .asm_3e87f
+ ld hl, EnemyMonMove1
+ ld b, $0
+ add hl, bc
+ ld a, [hl]
+ jp .asm_3e87f
+
+.asm_3e817
+ ld hl, EnemySubStatus5
+ bit 4, [hl]
+ jr z, .asm_3e824
+ ld a, [LastEnemyMove]
+ jp .asm_3e87f
+
+.asm_3e824
+ call Function3e8d1
+ jp nz, Function3e8c1
+ jr .asm_3e830
+
+.asm_3e82c
+ ld a, $ff
+ jr .asm_3e87f
+
+.asm_3e830
+ ld hl, EnemyMonMove1
+ ld de, EnemyMonPPMove1
+ ld b, $4
+.asm_3e838
+ ld a, [hl]
+ and a
+ jp z, .asm_3e8bd
+ ld a, [EnemyDisabledMove]
+ cp [hl]
+ jr z, .asm_3e848
+ ld a, [de]
+ and $3f
+ jr nz, .asm_3e84f
+
+.asm_3e848
+ inc hl
+ inc de
+ dec b
+ jr nz, .asm_3e838
+ jr .asm_3e8bd
+
+.asm_3e84f
+ ld a, [IsInBattle]
+ dec a
+ jr nz, .asm_3e882
+.asm_3e855
+ ld hl, EnemyMonMove1
+ call BattleRandom
+ and $3
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld a, [EnemyDisableCount]
+ swap a
+ and $f
+ dec a
+ cp c
+ jr z, .asm_3e855
+ ld a, [hl]
+ and a
+ jr z, .asm_3e855
+ ld hl, EnemyMonPPMove1
+ add hl, bc
+ ld b, a
+ ld a, [hl]
+ and $3f
+ jr z, .asm_3e855
+ ld a, c
+ ld [CurEnemyMoveNum], a
+ ld a, b
+
+.asm_3e87f
+ ld [CurEnemyMove], a
+
+.asm_3e882
+ call SetEnemyTurn
+ callab UpdateMoveData
+ call Function3e8d1
+ jr nz, .asm_3e894
+ xor a
+ ld [$c733], a
+
+.asm_3e894
+ ld a, [EnemyMoveEffect]
+ cp $77
+ jr z, .asm_3e89f
+ xor a
+ ld [EnemyFuryCutterCount], a
+
+.asm_3e89f
+ ld a, [EnemyMoveEffect]
+ cp $51
+ jr z, .asm_3e8af
+ ld hl, EnemySubStatus4
+ res 6, [hl]
+ xor a
+ ld [$c72c], a
+
+.asm_3e8af
+ ld a, [EnemyMoveEffect]
+ cp $6f
+ ret z
+ cp $74
+ ret z
+ xor a
+ ld [$c681], a
+ ret
+
+.asm_3e8bd
+ ld a, $a5
+ jr .asm_3e87f
+; 3e8c1
+
+Function3e8c1: ; 3e8c1
+ xor a
+ ld [EnemyFuryCutterCount], a
+ ld [$c681], a
+ ld [$c72c], a
+ ld hl, EnemySubStatus4
+ res 6, [hl]
+ ret
+; 3e8d1
+
+Function3e8d1: ; 3e8d1
+ ld a, [EnemySubStatus4]
+ and $20
+ ret nz
+ ld hl, EnemySubStatus3
+ ld a, [hl]
+ and $13
+ ret nz
+ ld hl, EnemySubStatus1
+ bit 6, [hl]
+ ret
+; 3e8e4
+
+Function3e8e4: ; 3e8e4
+ callba Function100a09
+ ret
+; 3e8eb
+
+
+LoadEnemyMon: ; 3e8eb
+; Initialize enemy monster parameters
+; To do this we pull the species from TempEnemyMonSpecies
+
+; Notes:
+; BattleRandom is used to ensure sync between Game Boys
+
+; Clear the whole EnemyMon struct
+ xor a
+ ld hl, EnemyMonSpecies
+ ld bc, EnemyMonEnd - EnemyMon
+ call ByteFill
+
+; We don't need to be here if we're in a link battle
+ ld a, [InLinkBattle]
+ and a
+ jp nz, Function3dabd
+
+ ld a, [$cfc0] ; ????
+ bit 0, a
+ jp nz, Function3dabd
+
+; Make sure everything knows what species we're working with
+ ld a, [TempEnemyMonSpecies]
+ ld [EnemyMonSpecies], a
+ ld [CurSpecies], a
+ ld [CurPartySpecies], a
+
+; Grab the BaseData for this species
+ call GetBaseData
+
+
+; Let's get the item:
+
+; Is the item predetermined?
+ ld a, [IsInBattle]
+ dec a
+ jr z, .WildItem
+
+; If we're in a trainer battle, the item is in the party struct
+ ld a, [CurPartyMon]
+ ld hl, OTPartyMon1Item
+ call GetPartyLocation ; bc = PartyMon[CurPartyMon] - PartyMons
+ ld a, [hl]
+ jr .UpdateItem
+
+
+.WildItem
+; In a wild battle, we pull from the item slots in BaseData
+
+; Force Item1
+; Used for Ho-Oh, Lugia and Snorlax encounters
+ ld a, [BattleType]
+ cp BATTLETYPE_FORCEITEM
+ ld a, [BaseItems]
+ jr z, .UpdateItem
+
+; Failing that, it's all up to chance
+; Effective chances:
+; 75% None
+; 23% Item1
+; 2% Item2
+
+; 25% chance of getting an item
+ call BattleRandom
+ cp a, $c0
+ ld a, NO_ITEM
+ jr c, .UpdateItem
+
+; From there, an 8% chance for Item2
+ call BattleRandom
+ cp a, $14 ; 8% of 25% = 2% Item2
+ ld a, [BaseItems]
+ jr nc, .UpdateItem
+ ld a, [BaseItems+1]
+
+
+.UpdateItem
+ ld [EnemyMonItem], a
+
+
+; Initialize DVs
+
+; If we're in a trainer battle, DVs are predetermined
+ ld a, [IsInBattle]
+ and a
+ jr z, .InitDVs
+
+; ????
+ ld a, [EnemySubStatus5]
+ bit 3, a
+ jr z, .InitDVs
+
+; Unknown
+ ld hl, $c6f2
+ ld de, EnemyMonDVs
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+ jp .Happiness
+
+
+.InitDVs
+
+; Trainer DVs
+
+; All trainers have preset DVs, determined by class
+; See GetTrainerDVs for more on that
+ callba GetTrainerDVs
+; These are the DVs we'll use if we're actually in a trainer battle
+ ld a, [IsInBattle]
+ dec a
+ jr nz, .UpdateDVs
+
+
+; Wild DVs
+; Here's where the fun starts
+
+; Roaming monsters (Entei, Raikou) work differently
+; They have their own structs, which are shorter than normal
+ ld a, [BattleType]
+ cp a, BATTLETYPE_ROAMING
+ jr nz, .NotRoaming
+
+; Grab HP
+ call GetRoamMonHP
+ ld a, [hl]
+; Check if the HP has been initialized
+ and a
+; We'll do something with the result in a minute
+ push af
+
+; Grab DVs
+ call GetRoamMonDVs
+ inc hl
+ ld a, [hld]
+ ld c, a
+ ld b, [hl]
+
+; Get back the result of our check
+ pop af
+; If the RoamMon struct has already been initialized, we're done
+ jr nz, .UpdateDVs
+
+; If it hasn't, we need to initialize the DVs
+; (HP is initialized at the end of the battle)
+ call GetRoamMonDVs
+ inc hl
+ call BattleRandom
+ ld [hld], a
+ ld c, a
+ call BattleRandom
+ ld [hl], a
+ ld b, a
+; We're done with DVs
+ jr .UpdateDVs
+
+
+.NotRoaming
+; Register a contains BattleType
+
+; Forced shiny battle type
+; Used by Red Gyarados at Lake of Rage
+ cp a, BATTLETYPE_SHINY
+ jr nz, .GenerateDVs
+
+ ld b, ATKDEFDV_SHINY ; $ea
+ ld c, SPDSPCDV_SHINY ; $aa
+ jr .UpdateDVs
+
+.GenerateDVs
+; Generate new random DVs
+ call BattleRandom
+ ld b, a
+ call BattleRandom
+ ld c, a
+
+.UpdateDVs
+; Input DVs in register bc
+ ld hl, EnemyMonDVs
+ ld a, b
+ ld [hli], a
+ ld [hl], c
+
+
+; We've still got more to do if we're dealing with a wild monster
+ ld a, [IsInBattle]
+ dec a
+ jr nz, .Happiness
+
+
+; Species-specfic:
+
+
+; Unown
+ ld a, [TempEnemyMonSpecies]
+ cp a, UNOWN
+ jr nz, .Magikarp
+
+; Get letter based on DVs
+ ld hl, EnemyMonDVs
+ ld a, PREDEF_GET_UNOWN_LETTER
+ call Predef
+; Can't use any letters that haven't been unlocked
+; If combined with forced shiny battletype, causes an infinite loop
+ call CheckUnownLetter
+ jr c, .GenerateDVs ; try again
+
+
+.Magikarp
+; Skimming this part recommended
+
+ ld a, [TempEnemyMonSpecies]
+ cp a, MAGIKARP
+ jr nz, .Happiness
+
+; Get Magikarp's length
+ ld de, EnemyMonDVs
+ ld bc, PlayerID
+ callab CalcMagikarpLength
+
+; We're clear if the length is < 1536
+ ld a, [MagikarpLength]
+ cp a, $06 ; $600 = 1536
+ jr nz, .CheckMagikarpArea
+
+; 5% chance of skipping size checks
+ call Random
+ cp a, $0c ; / $100
+ jr c, .CheckMagikarpArea
+; Try again if > 1614
+ ld a, [MagikarpLength + 1]
+ cp a, $50
+ jr nc, .GenerateDVs
+
+; 20% chance of skipping this check
+ call Random
+ cp a, $32 ; / $100
+ jr c, .CheckMagikarpArea
+; Try again if > 1598
+ ld a, [MagikarpLength + 1]
+ cp a, $40
+ jr nc, .GenerateDVs
+
+.CheckMagikarpArea
+; The z checks are supposed to be nz
+; Instead, all maps in GROUP_LAKE_OF_RAGE (mahogany area)
+; and routes 20 and 44 are treated as Lake of Rage
+
+; This also means Lake of Rage Magikarp can be smaller than ones
+; caught elsewhere rather than the other way around
+
+; Intended behavior enforces a minimum size at Lake of Rage
+; The real behavior prevents size flooring in the Lake of Rage area
+ ld a, [MapGroup]
+ cp a, GROUP_LAKE_OF_RAGE
+ jr z, .Happiness
+ ld a, [MapNumber]
+ cp a, MAP_LAKE_OF_RAGE
+ jr z, .Happiness
+; 40% chance of not flooring
+ call Random
+ cp a, $64 ; / $100
+ jr c, .Happiness
+; Floor at length 1024
+ ld a, [MagikarpLength]
+ cp a, 1024 >> 8
+ jr c, .GenerateDVs ; try again
+
+
+; Finally done with DVs
+
+.Happiness
+; Set happiness
+ ld a, BASE_HAPPINESS
+ ld [EnemyMonHappiness], a
+; Set level
+ ld a, [CurPartyLevel]
+ ld [EnemyMonLevel], a
+; Fill stats
+ ld de, EnemyMonMaxHP
+ ld b, $00
+ ld hl, $d201 ; ?
+ ld a, PREDEF_FILLSTATS
+ call Predef
+
+; If we're in a trainer battle,
+; get the rest of the parameters from the party struct
+ ld a, [IsInBattle]
+ cp a, TRAINER_BATTLE
+ jr z, .OpponentParty
+
+; If we're in a wild battle, check wild-specific stuff
+ and a
+ jr z, .TreeMon
+
+; ????
+ ld a, [EnemySubStatus5]
+ bit 3, a
+ jp nz, .Moves
+
+.TreeMon
+; If we're headbutting trees, some monsters enter battle asleep
+ call CheckSleepingTreeMon
+ ld a, 7 ; Asleep for 7 turns
+ jr c, .UpdateStatus
+; Otherwise, no status
+ xor a
+
+.UpdateStatus
+ ld hl, EnemyMonStatus
+ ld [hli], a
+
+; Unused byte
+ xor a
+ ld [hli], a
+
+; Full HP...
+ ld a, [EnemyMonMaxHPHi]
+ ld [hli], a
+ ld a, [EnemyMonMaxHPLo]
+ ld [hl], a
+
+; ...unless it's a RoamMon
+ ld a, [BattleType]
+ cp a, BATTLETYPE_ROAMING
+ jr nz, .Moves
+
+; Grab HP
+ call GetRoamMonHP
+ ld a, [hl]
+; Check if it's been initialized again
+ and a
+ jr z, .InitRoamHP
+; Update from the struct if it has
+ ld a, [hl]
+ ld [EnemyMonHPLo], a
+ jr .Moves
+
+.InitRoamHP
+; HP only uses the lo byte in the RoamMon struct since
+; Raikou/Entei/Suicune will have < 256 hp at level 40
+ ld a, [EnemyMonHPLo]
+ ld [hl], a
+ jr .Moves
+
+
+.OpponentParty
+; Get HP from the party struct
+ ld hl, (PartyMon1CurHP + 1) - PartyMon1 + OTPartyMon1
+ ld a, [CurPartyMon]
+ call GetPartyLocation
+ ld a, [hld]
+ ld [EnemyMonHPLo], a
+ ld a, [hld]
+ ld [EnemyMonHPHi], a
+
+; Make sure everything knows which monster the opponent is using
+ ld a, [CurPartyMon]
+ ld [CurOTMon], a
+
+; Get status from the party struct
+ dec hl
+ ld a, [hl] ; OTPartyMonStatus
+ ld [EnemyMonStatus], a
+
+
+.Moves
+; ????
+ ld hl, BaseType1
+ ld de, EnemyMonType1
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+
+; Get moves
+ ld de, EnemyMonMoves
+; Are we in a trainer battle?
+ ld a, [IsInBattle]
+ cp a, TRAINER_BATTLE
+ jr nz, .WildMoves
+; Then copy moves from the party struct
+ ld hl, OTPartyMon1Moves
+ ld a, [CurPartyMon]
+ call GetPartyLocation
+ ld bc, NUM_MOVES
+ call CopyBytes
+ jr .PP
+
+.WildMoves
+; Clear EnemyMonMoves
+ xor a
+ ld h, d
+ ld l, e
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+; Make sure the predef knows this isn't a partymon
+ ld [MagikarpLength], a
+; Fill moves based on level
+ ld a, PREDEF_FILLMOVES
+ call Predef
+
+.PP
+; Trainer battle?
+ ld a, [IsInBattle]
+ cp a, TRAINER_BATTLE
+ jr z, .TrainerPP
+
+; Fill wild PP
+ ld hl, EnemyMonMoves
+ ld de, EnemyMonPP
+ ld a, PREDEF_FILLPP
+ call Predef
+ jr .Finish
+
+.TrainerPP
+; Copy PP from the party struct
+ ld hl, OTPartyMon1PP
+ ld a, [CurPartyMon]
+ call GetPartyLocation
+ ld de, EnemyMonPP
+ ld bc, NUM_MOVES
+ call CopyBytes
+
+.Finish
+; Only the first five base stats are copied...
+ ld hl, BaseStats
+ ld de, EnemyMonBaseStats
+ ld b, BaseSpecialDefense - BaseStats
+.loop
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .loop
+
+ ld a, [BaseCatchRate]
+ ld [de], a
+ inc de
+
+ ld a, [BaseExp]
+ ld [de], a
+
+ ld a, [TempEnemyMonSpecies]
+ ld [$d265], a
+
+ call GetPokemonName
+
+; Did we catch it?
+ ld a, [IsInBattle]
+ and a
+ ret z
+
+; Update enemy nick
+ ld hl, StringBuffer1
+ ld de, EnemyMonNick
+ ld bc, PKMN_NAME_LENGTH
+ call CopyBytes
+
+; Caught this mon
+ ld a, [TempEnemyMonSpecies]
+ dec a
+ ld c, a
+ ld b, 1 ; set
+ ld hl, PokedexSeen
+ ld a, PREDEF_FLAG
+ call Predef
+
+ ld hl, EnemyMonStats
+ ld de, EnemyStats
+ ld bc, EnemyMonStatsEnd - EnemyMonStats
+ call CopyBytes
+
+ ret
+; 3eb38
+
+
+CheckSleepingTreeMon: ; 3eb38
+; Return carry if species is in the list
+; for the current time of day
+
+; Don't do anything if this isn't a tree encounter
+ ld a, [BattleType]
+ cp a, BATTLETYPE_TREE
+ jr nz, .NotSleeping
+
+; Get list for the time of day
+ ld hl, .Morn
+ ld a, [TimeOfDay]
+ cp a, DAY
+ jr c, .Check
+ ld hl, .Day
+ jr z, .Check
+ ld hl, .Nite
+
+.Check
+ ld a, [TempEnemyMonSpecies]
+ ld de, 1 ; length of species id
+ call IsInArray
+; If it's a match, the opponent is asleep
+ ret c
+
+.NotSleeping
+ and a
+ ret
+
+.Nite
+ db CATERPIE
+ db METAPOD
+ db BUTTERFREE
+ db WEEDLE
+ db KAKUNA
+ db BEEDRILL
+ db SPEAROW
+ db EKANS
+ db EXEGGCUTE
+ db LEDYBA
+ db AIPOM
+ db $ff ; end
+
+.Day
+ db VENONAT
+ db HOOTHOOT
+ db NOCTOWL
+ db SPINARAK
+ db HERACROSS
+ db $ff ; end
+
+.Morn
+ db VENONAT
+ db HOOTHOOT
+ db NOCTOWL
+ db SPINARAK
+ db HERACROSS
+ db $ff ; end
+; 3eb75
+
+
+CheckUnownLetter: ; 3eb75
+; Return carry if the Unown letter hasn't been unlocked yet
+
+ ld a, [UnlockedUnowns]
+ ld c, a
+ ld de, 0
+
+.loop
+
+; Don't check this set unless it's been unlocked
+ srl c
+ jr nc, .next
+
+; Is our letter in the set?
+ ld hl, .LetterSets
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+
+ push de
+ ld a, [UnownLetter]
+ ld de, 1
+ push bc
+ call IsInArray
+ pop bc
+ pop de
+
+ jr c, .match
+
+.next
+; Make sure we haven't gone past the end of the table
+ inc e
+ inc e
+ ld a, e
+ cp a, .Set1 - .LetterSets
+ jr c, .loop
+
+; Hasn't been unlocked, or the letter is invalid
+ scf
+ ret
+
+.match
+; Valid letter
+ and a
+ ret
+
+.LetterSets
+ dw .Set1
+ dw .Set2
+ dw .Set3
+ dw .Set4
+
+.Set1
+ ; A B C D E F G H I J K
+ db 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, $ff
+.Set2
+ ; L M N O P Q R
+ db 12, 13, 14, 15, 16, 17, 18, $ff
+.Set3
+ ; S T U V W
+ db 19, 20, 21, 22, 23, $ff
+.Set4
+ ; X Y Z
+ db 24, 25, 26, $ff
+
+; 3ebc7
+
+
+Function3ebc7: ; 3ebc7
+ push bc
+ ld a, [BattleMonLevel]
+ ld b, a
+ ld a, [EnemyMonLevel]
+ ld [BattleMonLevel], a
+ ld a, b
+ ld [EnemyMonLevel], a
+ pop bc
+ ret
+; 3ebd8
+
+Function3ebd8: ; 3ebd8
+ xor a
+ ld [TempEnemyMonSpecies], a
+ call Function3ee27
+ ld a, [OtherTrainerClass]
+ ld [TrainerClass], a
+ ld de, VTiles2
+ callab Function5120d
+ ld hl, $c4b3
+ ld c, $0
+.asm_3ebf3
+ inc c
+ ld a, c
+ cp $7
+ ret z
+ xor a
+ ld [hBGMapMode], a
+ ld [hBGMapThird], a
+ ld d, $0
+ push bc
+ push hl
+.asm_3ec01
+ call Function3ec1a
+ inc hl
+ ld a, $7
+ add d
+ ld d, a
+ dec c
+ jr nz, .asm_3ec01
+ ld a, $1
+ ld [hBGMapMode], a
+ ld c, $4
+ call DelayFrames
+ pop hl
+ pop bc
+ dec hl
+ jr .asm_3ebf3
+; 3ec1a
+
+Function3ec1a: ; 3ec1a
+ push hl
+ push de
+ push bc
+ ld e, $7
+.asm_3ec1f
+ ld [hl], d
+ ld bc, $0014
+ add hl, bc
+ inc d
+ dec e
+ jr nz, .asm_3ec1f
+ pop bc
+ pop de
+ pop hl
+ ret
+; 3ec2c
+
+
+Function3ec2c: ; 3ec2c
+ ld a, 1
+ jr Function3ec31
+; 3ec30
+
+Function3ec30: ; 3ec30
+ xor a
+; 3ec31
+
+Function3ec31: ; 3ec31
+ ld [hBattleTurn], a
+ call Function3ec39
+ jp Function3ec76
+; 3ec39
+
+Function3ec39: ; 3ec39
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3ec5a
+ ld a, [BattleMonStatus]
+ and $40
+ ret z
+ ld hl, $c645
+ ld a, [hld]
+ ld b, a
+ ld a, [hl]
+ srl a
+ rr b
+ srl a
+ rr b
+ ld [hli], a
+ or b
+ jr nz, .asm_3ec58
+ ld b, $1
+
+.asm_3ec58
+ ld [hl], b
+ ret
+
+.asm_3ec5a
+ ld a, [EnemyMonStatus]
+ and $40
+ ret z
+ ld hl, $d21f
+ ld a, [hld]
+ ld b, a
+ ld a, [hl]
+ srl a
+ rr b
+ srl a
+ rr b
+ ld [hli], a
+ or b
+ jr nz, .asm_3ec74
+ ld b, $1
+
+.asm_3ec74
+ ld [hl], b
+ ret
+; 3ec76
+
+Function3ec76: ; 3ec76
+ ld a, [hBattleTurn]
+ and a
+ jr z, .asm_3ec93
+ ld a, [BattleMonStatus]
+ and $10
+ ret z
+ ld hl, $c641
+ ld a, [hld]
+ ld b, a
+ ld a, [hl]
+ srl a
+ rr b
+ ld [hli], a
+ or b
+ jr nz, .asm_3ec91
+ ld b, $1
+
+.asm_3ec91
+ ld [hl], b
+ ret
+
+.asm_3ec93
+ ld a, [EnemyMonStatus]
+ and $10
+ ret z
+ ld hl, $d21b
+ ld a, [hld]
+ ld b, a
+ ld a, [hl]
+ srl a
+ rr b
+ ld [hli], a
+ or b
+ jr nz, .asm_3eca9
+ ld b, $1
+
+.asm_3eca9
+ ld [hl], b
+ ret
+; 3ecab
+
+Function3ecab: ; 3ecab
+ ld c, 0
+.asm_3ecad
+ call Function3ecb7
+ inc c
+ ld a, c
+ cp 5
+ jr nz, .asm_3ecad
+ ret
+; 3ecb7
+
+Function3ecb7: ; 3ecb7
+ push bc
+ push bc
+ ld a, [$d265]
+ and a
+ ld a, c
+ ld hl, BattleMonAtk
+ ld de, PlayerStats
+ ld bc, PlayerAtkLevel
+ jr z, .asm_3ecd2
+ ld hl, EnemyMonAtk
+ ld de, EnemyStats
+ ld bc, EnemyAtkLevel
+
+.asm_3ecd2
+ add c
+ ld c, a
+ jr nc, .asm_3ecd7
+ inc b
+.asm_3ecd7
+ ld a, [bc]
+ pop bc
+ ld b, a
+ push bc
+ sla c
+ ld b, 0
+ add hl, bc
+ ld a, c
+ add e
+ ld e, a
+ jr nc, .asm_3ece6
+ inc d
+.asm_3ece6
+ pop bc
+ push hl
+ ld hl, .StatLevelMultipliers
+ dec b
+ sla b
+ ld c, b
+ ld b, 0
+ add hl, bc
+ xor a
+ ld [hMultiplicand], a
+ ld a, [de]
+ ld [$ffb5], a
+ inc de
+ ld a, [de]
+ ld [$ffb6], a
+ ld a, [hli]
+ ld [hMultiplier], a
+ call Multiply
+ ld a, [hl]
+ ld [hMultiplier], a
+ ld b, $4
+ call Divide
+ pop hl
+
+; Cap at 999.
+ ld a, [$ffb6]
+ sub 999 % $100
+ ld a, [$ffb5]
+ sbc 999 / $100
+ jp c, .asm_3ed1e
+
+ ld a, 999 / $100
+ ld [$ffb5], a
+ ld a, 999 % $100
+ ld [$ffb6], a
+
+.asm_3ed1e
+ ld a, [$ffb5]
+ ld [hli], a
+ ld b, a
+ ld a, [$ffb6]
+ ld [hl], a
+ or b
+ jr nz, .asm_3ed29
+ inc [hl]
+
+.asm_3ed29
+ pop bc
+ ret
+; 3ed2b
+
+.StatLevelMultipliers
+; /
+ db 25, 100 ; 25%
+ db 28, 100 ; 28%
+ db 33, 100 ; 33%
+ db 40, 100 ; 40%
+ db 50, 100 ; 50%
+ db 66, 100 ; 66%
+
+ db 1, 1 ; 100%
+
+ db 15, 10 ; 150%
+ db 2, 1 ; 200%
+ db 25, 10 ; 250%
+ db 3, 1 ; 300%
+ db 35, 10 ; 350%
+ db 4, 1 ; 400%
+; 3ed45
+
+
+BadgeStatBoosts: ; 3ed45
+; Raise BattleMon stats depending on which badges have been obtained.
+
+; Every other badge boosts a stat, starting from the first.
+
+; ZephyrBadge: Attack
+; PlainBadge: Speed
+; MineralBadge: Defense
+; GlacierBadge: Special Attack
+; RisingBadge: Special Defense
+
+; The boosted stats are in order, except PlainBadge and MineralBadge's boosts are swapped.
+
+ ld a, [InLinkBattle]
+ and a
+ ret nz
+
+ ld a, [$cfc0]
+ and a
+ ret nz
+
+ ld a, [JohtoBadges]
+
+; Swap badges 3 (PlainBadge) and 5 (MineralBadge).
+ ld d, a
+ and %00000100
+ add a
+ add a
+ ld b, a
+ ld a, d
+ and %00010000
+ rrca
+ rrca
+ ld c, a
+ ld a, d
+ and %11101011
+ or b
+ or c
+ ld b, a
+
+ ld hl, BattleMonAtk
+ ld c, 4
+.CheckBadge
+ ld a, b
+ srl b
+ call c, BoostStat
+ inc hl
+ inc hl
+; Check every other badge.
+ srl b
+ dec c
+ jr nz, .CheckBadge
+; And the last one (RisingBadge) too.
+ srl a
+ call c, BoostStat
+ ret
+; 3ed7c
+
+
+BoostStat: ; 3ed7c
+; Raise stat at hl by 1/8.
+
+ ld a, [hli]
+ ld d, a
+ ld e, [hl]
+ srl d
+ rr e
+ srl d
+ rr e
+ srl d
+ rr e
+ ld a, [hl]
+ add e
+ ld [hld], a
+ ld a, [hl]
+ adc d
+ ld [hli], a
+
+; Cap at 999.
+ ld a, [hld]
+ sub 999 % $100
+ ld a, [hl]
+ sbc 999 / $100
+ ret c
+ ld a, 999 / $100
+ ld [hli], a
+ ld a, 999 % $100
+ ld [hld], a
+ ret
+; 3ed9f
+
+
+Function3ed9f: ; 3ed9f
+ callab Functionfb4f2
+ ret
+; 3eda6
+
+Function3eda6: ; 3eda6
+ callab Functionfb50d
+ ret
+; 3edad
+
+
+Function3edad: ; 3edad
+ ld de, $4ac0
+ ld hl, $96c0
+ ld bc, $3e04
+ call Get1bpp
+ ld de, $4ae0
+ ld hl, $9730
+ ld bc, $3e06
+ call Get1bpp
+ ld de, $4b10
+ ld hl, $9550
+ ld bc, $3e08
+ jp Get2bpp
+; 3edd1
+
+
+EmptyBattleTextBox: ; 3edd1
+ ld hl, .empty
+ jp BattleTextBox
+.empty
+ db "@"
+; 3edd8
+
+
+_BattleRandom: ; 3edd8
+; If the normal RNG is used in a link battle it'll desync.
+; To circumvent this a shared PRNG is used instead.
+
+; But if we're in a non-link battle we're safe to use it
+ ld a, [InLinkBattle]
+ and a
+ jp z, Random
+
+; The PRNG operates in streams of 10 values.
+
+; Which value are we trying to pull?
+ push hl
+ push bc
+ ld a, [LinkBattleRNCount]
+ ld c, a
+ ld b, 0
+ ld hl, LinkBattleRNs
+ add hl, bc
+ inc a
+ ld [LinkBattleRNCount], a
+
+; If we haven't hit the end yet, we're good
+ cp 10 - 1 ; Exclude last value. See the closing comment
+ ld a, [hl]
+ pop bc
+ pop hl
+ ret c
+
+; If we have, we have to generate new pseudorandom data
+; Instead of having multiple PRNGs, ten seeds are used
+ push hl
+ push bc
+ push af
+
+; Reset count to 0
+ xor a
+ ld [LinkBattleRNCount], a
+ ld hl, LinkBattleRNs
+ ld b, 10 ; number of seeds
+
+; Generate next number in the sequence for each seed
+; The algorithm takes the form *5 + 1 % 256
+.loop
+ ; get last #
+ ld a, [hl]
+
+ ; a * 5 + 1
+ ld c, a
+ add a
+ add a
+ add c
+ inc a
+
+ ; update #
+ ld [hli], a
+ dec b
+ jr nz, .loop
+
+; This has the side effect of pulling the last value first,
+; then wrapping around. As a result, when we check to see if
+; we've reached the end, we check the one before it.
+
+ pop af
+ pop bc
+ pop hl
+ ret
+; 3ee0f
+
+
+Function3ee0f: ; 3ee0f
+ ld a, BATTLE_VARS_SUBSTATUS3
+ call GetBattleVar
+ and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
+ ret nz
+; 3ee17
+
+Function3ee17: ; 3ee17
+ ld a, e
+ ld [FXAnimIDLo], a
+ ld a, d
+ ld [FXAnimIDHi], a
+ call WaitBGMap
+ ld a, $37
+ jp Predef
+; 3ee27
+
+Function3ee27: ; 3ee27
+ push af
+ push bc
+ push de
+ push hl
+ ld b, $1
+ call GetSGBLayout
+ call Function32f9
+ call DelayFrame
+ pop hl
+ pop de
+ pop bc
+ pop af
+ ret
+; 3ee3b
+
+
+Function3ee3b: ; 3ee3b
+ ld a, [InLinkBattle]
+ and a
+ ret nz
+ ld a, [$cfc0]
+ bit 0, a
+ ret nz
+ call Function3f0d4
+ xor a
+ ld [CurPartyMon], a
+ ld bc, PartyMon1Species
+
+.asm_3ee50
+ ld hl, $0022
+ add hl, bc
+ ld a, [hli]
+ or [hl]
+ jp z, .asm_3f0b9
+ push bc
+ ld hl, $c664
+ ld a, [CurPartyMon]
+ ld c, a
+ ld b, $2
+ ld d, $0
+ ld a, $3
+ call Predef
+ ld a, c
+ and a
+ pop bc
+ jp z, .asm_3f0b9
+ ld hl, $000c
+ add hl, bc
+ ld d, h
+ ld e, l
+ ld hl, EnemyMonType2
+ push bc
+ ld c, $5
+.asm_3ee7c
+ inc hl
+ ld a, [de]
+ add [hl]
+ ld [de], a
+ jr nc, .asm_3ee89
+ dec de
+ ld a, [de]
+ inc a
+ jr z, .asm_3eea4
+ ld [de], a
+ inc de
+
+.asm_3ee89
+ push hl
+ push bc
+ ld a, $1c
+ call GetPartyParamLocation
+ ld a, [hl]
+ and a
+ pop bc
+ pop hl
+ jr z, .asm_3eea9
+ ld a, [de]
+ add [hl]
+ ld [de], a
+ jr nc, .asm_3eea9
+ dec de
+ ld a, [de]
+ inc a
+ jr z, .asm_3eea4
+ ld [de], a
+ inc de
+ jr .asm_3eea9
+
+.asm_3eea4
+ ld a, $ff
+ ld [de], a
+ inc de
+ ld [de], a
+
+.asm_3eea9
+ inc de
+ inc de
+ dec c
+ jr nz, .asm_3ee7c
+ xor a
+ ld [hMultiplicand], a
+ ld [$ffb5], a
+ ld a, [EnemyMonBaseExp]
+ ld [$ffb6], a
+ ld a, [EnemyMonLevel]
+ ld [hMultiplier], a
+ call Multiply
+ ld a, $7
+ ld [hMultiplier], a
+ ld b, $4
+ call Divide
+ pop bc
+ ld hl, $0006
+ add hl, bc
+ ld a, [PlayerID]
+ cp [hl]
+ jr nz, .asm_3eedd
+ inc hl
+ ld a, [$d47c]
+ cp [hl]
+ ld a, $0
+ jr z, .asm_3eee2
+
+.asm_3eedd
+ call Function3f106
+ ld a, $1
+
+.asm_3eee2
+ ld [$d088], a
+ ld a, [IsInBattle]
+ dec a
+ call nz, Function3f106
+ push bc
+ ld a, $1
+ call GetPartyParamLocation
+ ld a, [hl]
+ cp $7e
+ call z, Function3f106
+ ld a, [$ffb6]
+ ld [$d087], a
+ ld a, [$ffb5]
+ ld [StringBuffer2], a
+ ld a, [CurPartyMon]
+ ld hl, PartyMon1Nickname
+ call GetNick
+ ld hl, UnknownText_0x3f11b
+ call BattleTextBox
+ ld a, [$d087]
+ ld [$ffb6], a
+ ld a, [StringBuffer2]
+ ld [$ffb5], a
+ pop bc
+ call Function3f136
+ push bc
+ call Function309d
+ pop bc
+ ld hl, $000a
+ add hl, bc
+ ld d, [hl]
+ ld a, [$ffb6]
+ add d
+ ld [hld], a
+ ld d, [hl]
+ ld a, [$ffb5]
+ adc d
+ ld [hl], a
+ jr nc, .asm_3ef3d
+ dec hl
+ inc [hl]
+ jr nz, .asm_3ef3d
+ ld a, $ff
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+
+.asm_3ef3d
+ ld a, [CurPartyMon]
+ ld e, a
+ ld d, $0
+ ld hl, PartySpecies
+ add hl, de
+ ld a, [hl]
+ ld [CurSpecies], a
+ call GetBaseData
+ push bc
+ ld d, $64
+ callab Function50e47
+ pop bc
+ ld hl, $000a
+ add hl, bc
+ push bc
+ ld a, [hMultiplicand]
+ ld b, a
+ ld a, [$ffb5]
+ ld c, a
+ ld a, [$ffb6]
+ ld d, a
+ ld a, [hld]
+ sub d
+ ld a, [hld]
+ sbc c
+ ld a, [hl]
+ sbc b
+ jr c, .asm_3ef74
+ ld a, b
+ ld [hli], a
+ ld a, c
+ ld [hli], a
+ ld a, d
+ ld [hld], a
+
+.asm_3ef74
+ xor a
+ ld [MonType], a
+ ld a, $1f
+ call Predef
+ callab Function50e1b
+ pop bc
+ ld hl, $001f
+ add hl, bc
+ ld a, [hl]
+ cp $64
+ jp nc, .asm_3f0b9
+ cp d
+ jp z, .asm_3f0b9
+ ld [$c719], a
+ ld a, [CurPartyLevel]
+ push af
+ ld a, d
+ ld [CurPartyLevel], a
+ ld [hl], a
+ ld hl, $0000
+ add hl, bc
+ ld a, [hl]
+ ld [CurSpecies], a
+ ld [$d265], a
+ call GetBaseData
+ ld hl, $0025
+ add hl, bc
+ ld a, [hld]
+ ld e, a
+ ld d, [hl]
+ push de
+ ld hl, $0024
+ add hl, bc
+ ld d, h
+ ld e, l
+ ld hl, $000a
+ add hl, bc
+ push bc
+ ld b, $1
+ ld a, $c
+ call Predef
+ pop bc
+ pop de
+ ld hl, $0025
+ add hl, bc
+ ld a, [hld]
+ sub e
+ ld e, a
+ ld a, [hl]
+ sbc d
+ ld d, a
+ dec hl
+ ld a, [hl]
+ add e
+ ld [hld], a
+ ld a, [hl]
+ adc d
+ ld [hl], a
+ ld a, [CurBattleMon]
+ ld d, a
+ ld a, [CurPartyMon]
+ cp d
+ jr nz, .asm_3f035
+ ld de, BattleMonHP
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ ld de, BattleMonMaxHP
+ push bc
+ ld bc, $000c
+ call CopyBytes
+ pop bc
+ ld hl, $001f
+ add hl, bc
+ ld a, [hl]
+ ld [BattleMonLevel], a
+ ld a, [PlayerSubStatus5]
+ bit 3, a
+ jr nz, .asm_3f012
+ ld hl, $0026
+ add hl, bc
+ ld de, PlayerStats
+ ld bc, $000a
+ call CopyBytes
+
+.asm_3f012
+ xor a
+ ld [$d265], a
+ call Function3ecab
+ callab Function3ec2c
+ callab BadgeStatBoosts
+ callab Function3df48
+ call EmptyBattleTextBox
+ call Function309d
+ ld a, $1
+ ld [hBGMapMode], a
+
+.asm_3f035
+ callba Function2709e
+ ld a, [CurBattleMon]
+ ld b, a
+ ld a, [CurPartyMon]
+ cp b
+ jr z, .asm_3f057
+ ld de, SFX_HIT_END_OF_EXP_BAR
+ call PlaySFX
+ call WaitSFX
+ ld hl, BattleText_0x80c9c
+ call StdBattleTextBox
+ call Function309d
+
+.asm_3f057
+ xor a
+ ld [MonType], a
+ ld a, $1f
+ call Predef
+ ld hl, $c4a9
+ ld b, $a
+ ld c, $9
+ call TextBox
+ ld hl, $c4bf
+ ld bc, $0004
+ ld a, $28
+ call Predef
+ ld c, $1e
+ call DelayFrames
+ call Functiona80
+ call Function30b4
+ xor a
+ ld [MonType], a
+ ld a, [CurSpecies]
+ ld [$d265], a
+ ld a, [CurPartyLevel]
+ push af
+ ld c, a
+ ld a, [$c719]
+ ld b, a
+
+.asm_3f093
+ inc b
+ ld a, b
+ ld [CurPartyLevel], a
+ push bc
+ ld a, $1a
+ call Predef
+ pop bc
+ ld a, b
+ cp c
+ jr nz, .asm_3f093
+ pop af
+ ld [CurPartyLevel], a
+ ld hl, EvolvableFlags
+ ld a, [CurPartyMon]
+ ld c, a
+ ld b, $1
+ ld a, $3
+ call Predef
+ pop af
+ ld [CurPartyLevel], a
+
+.asm_3f0b9
+ ld a, [PartyCount]
+ ld b, a
+ ld a, [CurPartyMon]
+ inc a
+ cp b
+ jr z, .asm_3f0d1
+ ld [CurPartyMon], a
+ ld a, $0
+ call GetPartyParamLocation
+ ld b, h
+ ld c, l
+ jp .asm_3ee50
+
+.asm_3f0d1
+ jp Function3d57a
+; 3f0d4
+
+Function3f0d4: ; 3f0d4
+ ld a, [$c664]
+ ld b, a
+ ld c, $6
+ ld d, $0
+.asm_3f0dc
+ xor a
+ srl b
+ adc d
+ ld d, a
+ dec c
+ jr nz, .asm_3f0dc
+ cp $2
+ ret c
+ ld [$d265], a
+ ld hl, EnemyMonBaseStats
+ ld c, $7
+.asm_3f0ef
+ xor a
+ ld [hProduct], a
+ ld a, [hl]
+ ld [hMultiplicand], a
+ ld a, [$d265]
+ ld [hMultiplier], a
+ ld b, $2
+ call Divide
+ ld a, [$ffb6]
+ ld [hli], a
+ dec c
+ jr nz, .asm_3f0ef
+ ret
+; 3f106
+
+Function3f106: ; 3f106
+ push bc
+ ld a, [$ffb5]
+ ld b, a
+ ld a, [$ffb6]
+ ld c, a
+ srl b
+ rr c
+ add c
+ ld [$ffb6], a
+ ld a, [$ffb5]
+ adc b
+ ld [$ffb5], a
+ pop bc
+ ret
+; 3f11b
+
+UnknownText_0x3f11b: ; 3f11b
+ text_jump UnknownText_0x1c029c
+ start_asm
+ ld hl, UnknownText_0x3f131
+ ld a, [$d088] ; IsTradedMon
+ and a
+ ret z
+ ld hl, UnknownText_0x3f12c
+ ret
+; 3f12c
+
+UnknownText_0x3f12c: ; 3f12c
+ text_jump UnknownText_0x1c02a9
+ db "@"
+; 3f131
+
+UnknownText_0x3f131: ; 3f131
+ text_jump UnknownText_0x1c02c9
+ db "@"
+; 3f136
+
+
+Function3f136: ; 3f136
+
+ push bc
+
+ ld hl, CurPartyMon
+ ld a, [CurBattleMon]
+ cp [hl]
+ jp nz, .asm_3f219
+
+ ld a, [BattleMonLevel]
+ cp MAX_LEVEL
+ jp nc, .asm_3f219
+
+ ld a, [$ffb6]
+ ld [$d004], a
+ push af
+ ld a, [$ffb5]
+ ld [$d003], a
+ push af
+ xor a
+ ld [DefaultFlypoint], a
+ xor a
+ ld [MonType], a
+ ld a, $1f
+ call Predef
+ ld a, [TempMonLevel]
+ ld b, a
+ ld e, a
+ push de
+ ld de, $d118
+ call Function3f39c
+ push bc
+ ld hl, $d118
+ ld a, [$d004]
+ add [hl]
+ ld [hld], a
+ ld a, [$d003]
+ adc [hl]
+ ld [hld], a
+ jr nc, .asm_3f186
+ inc [hl]
+ jr nz, .asm_3f186
+ ld a, $ff
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+
+.asm_3f186
+ ld d, $64
+ callab Function50e47
+ ld a, [hMultiplicand]
+ ld b, a
+ ld a, [$ffb5]
+ ld c, a
+ ld a, [$ffb6]
+ ld d, a
+ ld hl, $d118
+ ld a, [hld]
+ sub d
+ ld a, [hld]
+ sbc c
+ ld a, [hl]
+ sbc b
+ jr c, .asm_3f1a8
+ ld a, b
+ ld [hli], a
+ ld a, c
+ ld [hli], a
+ ld a, d
+ ld [hld], a
+
+.asm_3f1a8
+ callab Function50e1b
+ ld a, d
+ pop bc
+ pop de
+ ld d, a
+ cp e
+ jr nc, .asm_3f1b7
+ ld a, e
+ ld d, a
+
+.asm_3f1b7
+ ld a, e
+ cp $64
+ jr nc, .asm_3f1ff
+ cp d
+ jr z, .asm_3f1ff
+ inc a
+ ld [TempMonLevel], a
+ ld [CurPartyLevel], a
+ ld [BattleMonLevel], a
+ push de
+ call Function3f21b
+ ld c, $40
+ call Function3f22c
+ call PrintPlayerHUD
+ ld hl, BattleMonNick
+ ld de, StringBuffer1
+ ld bc, $000b
+ call CopyBytes
+ call Function3dfe
+ ld de, SFX_HIT_END_OF_EXP_BAR
+ call PlaySFX
+ callba Function8e79d
+ call WaitSFX
+ ld hl, BattleText_0x80c9c
+ call StdBattleTextBox
+ pop de
+ inc e
+ ld b, $0
+ jr .asm_3f1b7
+
+.asm_3f1ff
+ push bc
+ ld b, d
+ ld de, $d118
+ call Function3f39c
+ ld a, b
+ pop bc
+ ld c, a
+ call Function3f21b
+ call Function3f22c
+ call Function3dfe
+ pop af
+ ld [$ffb5], a
+ pop af
+ ld [$ffb6], a
+
+.asm_3f219
+ pop bc
+ ret
+; 3f21b
+
+Function3f21b: ; 3f21b
+ push bc
+ call WaitSFX
+ ld de, SFX_EXP_BAR
+ call PlaySFX
+ ld c, 10
+ call DelayFrames
+ pop bc
+ ret
+; 3f22c
+
+Function3f22c: ; 3f22c
+ ld d, $3
+ dec b
+.asm_3f22f
+ inc b
+ push bc
+ push de
+ ld hl, $c58d
+ call Function3f41c
+ pop de
+ ld a, $1
+ ld [hBGMapMode], a
+ ld c, d
+ call DelayFrames
+ xor a
+ ld [hBGMapMode], a
+ pop bc
+ ld a, c
+ cp b
+ jr z, .asm_3f268
+ inc b
+ push bc
+ push de
+ ld hl, $c58d
+ call Function3f41c
+ pop de
+ ld a, $1
+ ld [hBGMapMode], a
+ ld c, d
+ call DelayFrames
+ xor a
+ ld [hBGMapMode], a
+ dec d
+ jr nz, .asm_3f263
+ ld d, $1
+
+.asm_3f263
+ pop bc
+ ld a, c
+ cp b
+ jr nz, .asm_3f22f
+
+.asm_3f268
+ ld a, $1
+ ld [hBGMapMode], a
+ ret
+; 3f26d
+
+
+
+Function3f26d: ; 3f26d
+; SendOutMonText?
+
+ ld a, [InLinkBattle]
+ and a
+ jr z, .asm_3f27c
+ ld hl, UnknownText_0x3f2d1
+ ld a, [$d264]
+ and a
+ jr nz, .asm_3f2ce
+
+.asm_3f27c
+ ld hl, EnemyMonHPHi
+ ld a, [hli]
+ or [hl]
+ ld hl, UnknownText_0x3f2d1
+ jr z, .asm_3f2ce
+ xor a
+ ld [hMultiplicand], a
+ ld hl, EnemyMonHPHi
+ ld a, [hli]
+ ld [$c6ea], a
+ ld [$ffb5], a
+ ld a, [hl]
+ ld [$c6eb], a
+ ld [$ffb6], a
+ ld a, $19
+ ld [hMultiplier], a
+ call Multiply
+ ld hl, EnemyMonMaxHPHi
+ ld a, [hli]
+ ld b, [hl]
+ srl a
+ rr b
+ srl a
+ rr b
+ ld a, b
+ ld b, $4
+ ld [hMultiplier], a
+ call Divide
+ ld a, [$ffb6]
+ ld hl, UnknownText_0x3f2d1
+ cp $46
+ jr nc, .asm_3f2ce
+ ld hl, UnknownText_0x3f2d8
+ cp $28
+ jr nc, .asm_3f2ce
+ ld hl, UnknownText_0x3f2df
+ cp $a
+ jr nc, .asm_3f2ce
+ ld hl, UnknownText_0x3f2e6
+
+.asm_3f2ce
+ jp BattleTextBox
+; 3f2d1
+
+
+UnknownText_0x3f2d1: ; 3f2d1
+ text_jump UnknownText_0x1c02df
+ start_asm
+ jr Function3f2eb
+; 3f2d6
+
+UnknownText_0x3f2d8: ; 3f2d8
+ text_jump UnknownText_0x1c02e6
+ start_asm
+ jr Function3f2eb
+; 3f2dd
+
+UnknownText_0x3f2df: ; 3f2df
+ text_jump UnknownText_0x1c02f0
+ start_asm
+ jr Function3f2eb
+; 3f2e4
+
+UnknownText_0x3f2e6: ; 3f2e6
+ text_jump UnknownText_0x1c02fe
+ start_asm
+; 3f2eb
+
+Function3f2eb: ; 3f2eb
+ ld hl, UnknownText_0x3f2ef
+ ret
+; 3f2ef
+
+UnknownText_0x3f2ef: ; 3f2ef
+ text_jump UnknownText_0x1c0317
+ db "@"
+; 3f2f4
+
+
+Function3f2f4: ; 3f2f4
+ ld hl, UnknownText_0x3f2fa
+ jp BattleTextBox
+; 3f2fa
+
+UnknownText_0x3f2fa: ; 3f2fa
+ text_jump UnknownText_0x1c031d
+ start_asm
+; 3f2ff
+
+Function3f2ff: ; 3f2ff
+ push de
+ push bc
+ ld hl, EnemyMonHPLo
+ ld de, $c6eb
+ ld b, [hl]
+ dec hl
+ ld a, [de]
+ sub b
+ ld [$ffb6], a
+ dec de
+ ld b, [hl]
+ ld a, [de]
+ sbc b
+ ld [$ffb5], a
+ ld a, $19
+ ld [hMultiplier], a
+ call Multiply
+ ld hl, EnemyMonMaxHPHi
+ ld a, [hli]
+ ld b, [hl]
+ srl a
+ rr b
+ srl a
+ rr b
+ ld a, b
+ ld b, $4
+ ld [hMultiplier], a
+ call Divide
+ pop bc
+ pop de
+ ld a, [$ffb6]
+ ld hl, UnknownText_0x3f348
+ and a
+ ret z
+ ld hl, UnknownText_0x3f35b
+ cp $1e
+ ret c
+ ld hl, UnknownText_0x3f34d
+ cp $46
+ ret c
+ ld hl, UnknownText_0x3f352
+ ret
+; 3f348
+
+UnknownText_0x3f348: ; 3f348
+ text_jump UnknownText_0x1c0324
+ db "@"
+; 3f34d
+
+UnknownText_0x3f34d: ; 3f34d
+ text_jump UnknownText_0x1c0340
+ db "@"
+; 3f352
+
+UnknownText_0x3f352: ; 3f352
+ text_jump UnknownText_0x1c0352
+ db "@"
+; 3f357
+
+Function3f357: ; 3f357
+ ld hl, UnknownText_0x3f35b
+ ret
+; 3f35b
+
+UnknownText_0x3f35b: ; 3f35b
+ text_jump UnknownText_0x1c0366
+ db "@"
+; 3f360
+
+
+Function3f360: ; 3f360
+ ld hl, $c6f0
+ ld a, [hl]
+ and a
+ jr z, .asm_3f36d
+ dec [hl]
+ ld hl, BattleText_0x80cba
+ jr .asm_3f388
+
+.asm_3f36d
+ dec hl
+ ld a, [hl]
+ and a
+ ret z
+ dec [hl]
+ ld hl, BattleText_0x80cd1
+ jr nz, .asm_3f388
+ push hl
+ ld a, [EnemyMonSpecies]
+ ld [CurSpecies], a
+ call GetBaseData
+ ld a, [BaseCatchRate]
+ ld [EnemyMonCatchRate], a
+ pop hl
+
+.asm_3f388
+ push hl
+ call Function30b4
+ pop hl
+ jp StdBattleTextBox
+; 3f390
+
+
+FillInExpBar: ; 3f390
+ push hl
+ call Function3f39c
+ pop hl
+ ld de, $0007
+ add hl, de
+ jp Function3f41c
+; 3f39c
+
+Function3f39c: ; 3f39c
+ push de
+ ld d, b
+ push de
+ callab Function50e47
+ pop de
+ ld hl, hMultiplicand
+ ld a, [hli]
+ push af
+ ld a, [hli]
+ push af
+ ld a, [hl]
+ push af
+ inc d
+ callab Function50e47
+ ld hl, $ffb6
+ ld a, [hl]
+ ld [$ffba], a
+ pop bc
+ sub b
+ ld [hld], a
+ ld a, [hl]
+ ld [$ffb9], a
+ pop bc
+ sbc b
+ ld [hld], a
+ ld a, [hl]
+ ld [hMathBuffer], a
+ pop bc
+ sbc b
+ ld [hl], a
+ pop de
+ ld hl, $ffb5
+ ld a, [hli]
+ push af
+ ld a, [hl]
+ push af
+ ld a, [de]
+ dec de
+ ld c, a
+ ld a, [$ffba]
+ sub c
+ ld [hld], a
+ ld a, [de]
+ dec de
+ ld b, a
+ ld a, [$ffb9]
+ sbc b
+ ld [hld], a
+ ld a, [de]
+ ld c, a
+ ld a, [hMathBuffer]
+ sbc c
+ ld [hld], a
+ xor a
+ ld [hl], a
+ ld a, $40
+ ld [hMultiplier], a
+ call Multiply
+ pop af
+ ld c, a
+ pop af
+ ld b, a
+.asm_3f3f4
+ ld a, b
+ and a
+ jr z, .asm_3f40c
+ srl b
+ rr c
+ ld hl, hProduct
+ srl [hl]
+ inc hl
+ rr [hl]
+ inc hl
+ rr [hl]
+ inc hl
+ rr [hl]
+ jr .asm_3f3f4
+
+.asm_3f40c
+ ld a, c
+ ld [hMultiplier], a
+ ld b, $4
+ call Divide
+ ld a, [$ffb6]
+ ld b, a
+ ld a, $40
+ sub b
+ ld b, a
+ ret
+; 3f41c
+
+Function3f41c: ; 3f41c
+ ld c, $8
+.asm_3f41e
+ ld a, b
+ sub $8
+ jr c, .asm_3f42c
+ ld b, a
+ ld a, $6a
+ ld [hld], a
+ dec c
+ jr z, .asm_3f43c
+ jr .asm_3f41e
+
+.asm_3f42c
+ add $8
+ jr z, .asm_3f434
+ add $54
+ jr .asm_3f436
+
+.asm_3f434
+ ld a, $62
+
+.asm_3f436
+ ld [hld], a
+ ld a, $62
+ dec c
+ jr nz, .asm_3f434
+
+.asm_3f43c
+ ret
+; 3f43d
+
+Function3f43d: ; 3f43d
+ ld a, [PlayerSubStatus4]
+ bit 4, a
+ ld hl, BattleAnimCmd_DD
+ jr nz, asm_3f46f
+Function3f447: ; 3f447
+ ld a, [$c6fe]
+ and a
+ ld hl, BattleAnimCmd_E2
+ jr nz, asm_3f46f
+ ld a, [CurPartySpecies]
+ push af
+ ld a, [BattleMonSpecies]
+ ld [CurPartySpecies], a
+ ld hl, BattleMonAtkDefDV
+ ld a, $2d
+ call Predef
+ ld de, $9310
+ ld a, $3d
+ call Predef
+ pop af
+ ld [CurPartySpecies], a
+ ret
+
+asm_3f46f
+ ld a, [hBattleTurn]
+ push af
+ xor a
+ ld [hBattleTurn], a
+ ld a, BANK(BattleAnimCommands)
+ rst FarCall
+ pop af
+ ld [hBattleTurn], a
+ ret
+; 3f47c
+
+Function3f47c: ; 3f47c
+ ld a, [EnemySubStatus4]
+ bit 4, a
+ ld hl, BattleAnimCmd_DD
+ jr nz, asm_3f4b4
+Function3f486: ; 3f486
+ ld a, [$c6fa]
+ and a
+ ld hl, BattleAnimCmd_E2
+ jr nz, asm_3f4b4
+ ld a, [CurPartySpecies]
+ push af
+ ld a, [EnemyMonSpecies]
+ ld [CurSpecies], a
+ ld [CurPartySpecies], a
+ call GetBaseData
+ ld hl, EnemyMonAtkDefDV
+ ld a, $2d
+ call Predef
+ ld de, VTiles2
+ ld a, $3e
+ call Predef
+ pop af
+ ld [CurPartySpecies], a
+ ret
+
+asm_3f4b4
+ ld a, [hBattleTurn]
+ push af
+ call SetEnemyTurn
+ ld a, BANK(BattleAnimCommands)
+ rst FarCall
+ pop af
+ ld [hBattleTurn], a
+ ret
+; 3f4c1
+
+
+StartBattle: ; 3f4c1
+ ld a, [PartyCount]
+ and a
+ ret z
+ ld a, [TimeOfDayPal]
+ push af
+ call Function3f4dd
+ call Function3c000
+ call Function3f69e
+ pop af
+ ld [TimeOfDayPal], a
+ scf
+ ret
+; 3f4d9
+
+
+Function3f4d9: ; 3f4d9
+ call Function3c000
+ ret
+; 3f4dd
+
+
+Function3f4dd: ; 3f4dd
+ callba Function106050
+ call Function3f54e
+ xor a
+ ld [TempBattleMonSpecies], a
+ ld [$d0d2], a
+ xor a
+ ld [$ffde], a
+ callba PlayBattleMusic
+ callba Function2ee18
+ callba Function2ee2f
+ call Function2ed3
+ callba ClearBattleRAM
+ call Function3f55e
+ call Function3f568
+ ld b, $0
+ call GetSGBLayout
+ ld hl, rLCDC
+ res 6, [hl]
+ call Function3fb6c
+ call BattleStartMessage
+ ld hl, rLCDC
+ set 6, [hl]
+ xor a
+ ld [hBGMapMode], a
+ call EmptyBattleTextBox
+ hlcoord 9, 7
+ ld bc, 5 << 8 + 11
+ call ClearBox
+ hlcoord 1, 0
+ ld bc, 4 << 8 + 10
+ call ClearBox
+ call ClearSprites
+ ld a, [IsInBattle]
+ cp $1
+ call z, Function3e036
+ ld a, $1
+ ld [hBGMapMode], a
+ ret
+; 3f54e
+
+Function3f54e: ; 3f54e
+ ld a, [OtherTrainerClass]
+ and a
+ jr nz, .asm_3f55a
+ ld a, [$d22e]
+ ld [CurPartySpecies], a
+
+.asm_3f55a
+ ld [TempEnemyMonSpecies], a
+ ret
+; 3f55e
+
+Function3f55e: ; 3f55e
+ ld a, [OtherTrainerClass]
+ and a
+ jp nz, Function3f594
+ jp Function3f607
+; 3f568
+
+Function3f568: ; 3f568
+ ld a, [rSVBK]
+ push af
+ ld a, $6
+ ld [rSVBK], a
+ ld hl, $d000
+ ld bc, VBlank5
+ ld a, $2
+ call ByteFill
+ ld a, [rVBK]
+ push af
+ ld a, $1
+ ld [rVBK], a
+ ld de, $d000
+ ld hl, VBGMap0
+ ld bc, $0f40
+ call Request2bpp
+ pop af
+ ld [rVBK], a
+ pop af
+ ld [rSVBK], a
+ ret
+; 3f594
+
+Function3f594: ; 3f594
+ ld [TrainerClass], a
+ callba Function10606a
+ xor a
+ ld [TempEnemyMonSpecies], a
+ callab Function3957b
+ callab Function39771
+ ld a, [TrainerClass]
+ cp $9
+ jr nz, .asm_3f5b8
+ xor a
+ ld [OTPartyMon1Item], a
+
+.asm_3f5b8
+ ld de, VTiles2
+ callab Function5120d
+ xor a
+ ld [$ffad], a
+ dec a
+ ld [$c6e6], a
+ ld hl, $c4ac
+ ld bc, $0707
+ ld a, $13
+ call Predef
+ ld a, $ff
+ ld [CurOTMon], a
+ ld a, $2
+ ld [IsInBattle], a
+ call IsJohtoGymLeader
+ jr nc, .asm_3f606
+ xor a
+ ld [CurPartyMon], a
+ ld a, [PartyCount]
+ ld b, a
+.asm_3f5ea
+ push bc
+ ld a, $22
+ call GetPartyParamLocation
+ ld a, [hli]
+ or [hl]
+ jr z, .asm_3f5fc
+ ld c, $4
+ callab ChangeHappiness
+
+.asm_3f5fc
+ pop bc
+ dec b
+ jr z, .asm_3f606
+ ld hl, CurPartyMon
+ inc [hl]
+ jr .asm_3f5ea
+
+.asm_3f606
+ ret
+; 3f607
+
+Function3f607: ; 3f607
+ ld a, $1
+ ld [IsInBattle], a
+ callba Function10605d
+ call LoadEnemyMon
+ ld hl, EnemyMonMove1
+ ld de, $c735
+ ld bc, $0004
+ call CopyBytes
+ ld hl, EnemyMonPPMove1
+ ld de, $c739
+ ld bc, $0004
+ call CopyBytes
+ ld hl, EnemyMonAtkDefDV
+ ld a, $2d
+ call Predef
+ ld a, [CurPartySpecies]
+ cp $c9
+ jr nz, .asm_3f648
+ ld a, [$def4]
+ and a
+ jr nz, .asm_3f648
+ ld a, [UnownLetter]
+ ld [$def4], a
+
+.asm_3f648
+ ld de, VTiles2
+ ld a, $3e
+ call Predef
+ xor a
+ ld [TrainerClass], a
+ ld [$ffad], a
+ ld hl, $c4ac
+ ld bc, $0707
+ ld a, $13
+ call Predef
+ ret
+; 3f662
+
+Function3f662: ; 3f662
+ ld hl, EnemyMonMove1
+ ld de, $d25e
+ ld b, $4
+.asm_3f66a
+ ld a, [de]
+ inc de
+ ld [hli], a
+ and a
+ jr z, .asm_3f690
+ push bc
+ push hl
+ push hl
+ dec a
+ ld hl, $5b00
+ ld bc, $0007
+ call AddNTimes
+ ld a, $10
+ call GetFarByte
+ pop hl
+ ld bc, $0005
+ add hl, bc
+ ld [hl], a
+ pop hl
+ pop bc
+ dec b
+ jr nz, .asm_3f66a
+ ret
+
+.asm_3f68e
+ xor a
+ ld [hli], a
+
+.asm_3f690
+ push bc
+ push hl
+ ld bc, $0005
+ add hl, bc
+ xor a
+ ld [hl], a
+ pop hl
+ pop bc
+ dec b
+ jr nz, .asm_3f68e
+ ret
+; 3f69e
+
+
+Function3f69e: ; 3f69e
+ call Function3f6a5
+ call Function3f6d0
+ ret
+; 3f6a5
+
+Function3f6a5: ; 3f6a5
+ ld a, [InLinkBattle]
+ and a
+ jr z, .asm_3f6b7
+ call Function3f759
+ ld c, $96
+ call DelayFrames
+ call Function3f77c
+ ret
+
+.asm_3f6b7
+ ld a, [$d0ee]
+ and $f
+ ret nz
+ call Function3f71d
+ xor a
+ ld [$d1e9], a
+ ld a, $1c
+ call Predef
+ callba Function2ed44
+ ret
+; 3f6d0
+
+Function3f6d0: ; 3f6d0
+ call Function3f998
+ xor a
+ ld [Danger], a
+ ld [IsInBattle], a
+ ld [BattleType], a
+ ld [AttackMissed], a
+ ld [$d22e], a
+ ld [OtherTrainerClass], a
+ ld [$d266], a
+ ld [$d267], a
+ ld [$d232], a
+ ld [$d0d8], a
+ ld [$d0da], a
+ ld [$d0d9], a
+ ld [$d0d2], a
+ ld [CurMoveNum], a
+ ld [$d0db], a
+ ld [$d0d6], a
+ ld [$d0e4], a
+ ld [$d0e0], a
+ ld [$d0df], a
+ ld [$d0e1], a
+ ld hl, PlayerSubStatus1
+ ld b, $18
+.asm_3f715
+ ld [hli], a
+ dec b
+ jr nz, .asm_3f715
+ call WaitSFX
+ ret
+; 3f71d
+
+Function3f71d: ; 3f71d
+ ld hl, $c6ec
+ ld a, [hli]
+ or [hl]
+ inc hl
+ or [hl]
+ ret z
+ ld a, [$c73d]
+ and a
+ jr z, .asm_3f73d
+ ld hl, $c6ee
+ sla [hl]
+ dec hl
+ rl [hl]
+ dec hl
+ rl [hl]
+ jr nc, .asm_3f73d
+ ld a, $ff
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+
+.asm_3f73d
+ ld hl, $c6ee
+ ld de, $d850
+ call Function3d0be
+ ld hl, BattleText_0x80730
+ call StdBattleTextBox
+ ld a, [$cfc0]
+ bit 0, a
+ ret z
+ call ClearTileMap
+ call WhiteBGMap
+ ret
+; 3f759
+
+Function3f759: ; 3f759
+ callba Function1060df
+ callba Function106187
+ ld a, [CurOTMon]
+ ld hl, OTPartyMon1Status
+ call GetPartyLocation
+ ld a, [EnemyMonStatus]
+ ld [hl], a
+ call ClearTileMap
+ callba Function2c1b2
+ ret
+; 3f77c
+
+Function3f77c: ; 3f77c
+ callba Function3d2e0
+ jp c, Function3f80f
+ call Function3f830
+ jr nz, .asm_3f797
+ ld hl, $cd2a
+ bit 4, [hl]
+ jr z, .asm_3f797
+ callba Function2b930
+
+.asm_3f797
+ ld a, [$d0ee]
+ and $f
+ cp $1
+ jr c, .asm_3f7ad
+ jr z, .asm_3f7b8
+ callba Function106107
+ ld de, .Draw
+ jr .asm_3f7c3
+
+.asm_3f7ad
+ callba Function1060fb
+ ld de, .Win
+ jr .asm_3f7c3
+
+.asm_3f7b8
+ callba Function106101
+ ld de, .Lose
+ jr .asm_3f7c3
+
+.asm_3f7c3
+ ld hl, $c546
+ call PlaceString
+ callba Function106187
+ ld c, $c8
+ call DelayFrames
+ ld a, $1
+ call GetSRAMBank
+ call Function3fa42
+ call Function3f85f
+ call CloseSRAM
+ call Function3f830
+ jr z, .asm_3f7ee
+ call Functiona80
+ call ClearTileMap
+ ret
+
+.asm_3f7ee
+ ld c, $c8
+ call DelayFrames
+ call ClearTileMap
+ ret
+; 3f7f7
+
+.Win
+ db "YOU WIN@"
+.Lose
+ db "YOU LOSE@"
+.Draw
+ db " DRAW@"
+; 3f80f
+
+
+Function3f80f: ; 3f80f
+ ld hl, $c546
+ ld de, .Invalid
+ call PlaceString
+ ld c, $c8
+ call DelayFrames
+ call ClearTileMap
+ ret
+; 3f821
+
+.Invalid
+ db "INVALID BATTLE@"
+; 3f830
+
+
+Function3f830: ; 3f830
+ ld a, [InLinkBattle]
+ cp $4
+ ret
+; 3f836
+
+
+Function3f836: ; 3f836
+ ld a, $1
+ call GetSRAMBank
+ call Function3f85f
+ call CloseSRAM
+ ld hl, AttrMap
+ xor a
+ ld bc, $0168
+ call ByteFill
+ call Function3200
+ ld b, $8
+ call GetSGBLayout
+ call Function32f9
+ ld c, $8
+ call DelayFrames
+ call Functiona80
+ ret
+; 3f85f
+
+
+Function3f85f: ; 3f85f
+ call ClearTileMap
+ call ClearSprites
+ call .asm_3f8e0
+ ld hl, $c540
+ ld b, $5
+ ld de, $b268
+.asm_3f870
+ push bc
+ push hl
+ push de
+ ld a, [de]
+ and a
+ jr z, .asm_3f8c9
+ ld a, [$d4b4]
+ and a
+ jr z, .asm_3f8c9
+ push hl
+ push hl
+ ld h, d
+ ld l, e
+ ld de, DefaultFlypoint
+ ld bc, $000a
+ call CopyBytes
+ ld a, $50
+ ld [de], a
+ inc de
+ ld bc, $0006
+ call CopyBytes
+ ld de, DefaultFlypoint
+ pop hl
+ call PlaceString
+ pop hl
+ ld de, $001a
+ add hl, de
+ push hl
+ ld de, $d00d
+ ld bc, $0204
+ call PrintNum
+ pop hl
+ ld de, $0005
+ add hl, de
+ push hl
+ ld de, $d00f
+ ld bc, $0204
+ call PrintNum
+ pop hl
+ ld de, $0005
+ add hl, de
+ ld de, $d011
+ ld bc, $0204
+ call PrintNum
+ jr .asm_3f8cf
+
+.asm_3f8c9
+ ld de, .Format
+ call PlaceString
+
+.asm_3f8cf
+ pop hl
+ ld bc, $0012
+ add hl, bc
+ ld d, h
+ ld e, l
+ pop hl
+ ld bc, $0028
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .asm_3f870
+ ret
+
+.asm_3f8e0
+ ld hl, $c4a1
+ ld de, .Record
+ call PlaceString
+
+ ld hl, $c518
+ ld de, .Result
+ call PlaceString
+
+ ld hl, $c4c8
+ ld de, .Total
+ call PlaceString
+
+ ld hl, $c4f6
+ ld de, $b260
+ call .asm_3f92b
+ jr c, .asm_3f92a
+
+ ld bc, $0204
+ call PrintNum
+
+ ld hl, $c4fb
+ ld de, $b262
+ call .asm_3f92b
+
+ ld bc, $0204
+ call PrintNum
+
+ ld hl, $c500
+ ld de, $b264
+ call .asm_3f92b
+
+ ld bc, $0204
+ call PrintNum
+
+.asm_3f92a
+ ret
+
+.asm_3f92b
+ ld a, [$d4b4]
+ and a
+ ret nz
+ ld de, .Scores
+ call PlaceString
+ scf
+ ret
+; 3f938
+
+.Scores
+ db " 0 0 0@"
+; 3f947
+
+.Format ; 3f947
+ db " --- ", $22, " - - -@"
+.Record ; 3f964
+ db $52, "'s RECORD@"
+.Result ; 3f96e
+ db "RESULT WIN LOSE DRAW@"
+.Total ; 3f983
+ db "TOTAL WIN LOSE DRAW@"
+; 3f998
+
+
+Function3f998: ; 3f998
+ ld a, [BattleType]
+ cp BATTLETYPE_ROAMING
+ jr nz, .asm_3f9c4
+ ld a, [$d0ee]
+ and $f
+ jr z, .asm_3f9af
+ call GetRoamMonHP
+ ld a, [EnemyMonHPLo]
+ ld [hl], a
+ jr .asm_3f9ca
+
+.asm_3f9af
+ call GetRoamMonHP
+ ld [hl], $0
+ call GetRoamMonMapGroup
+ ld [hl], $ff
+ call GetRoamMonMapNumber
+ ld [hl], $ff
+ call GetRoamMonSpecies
+ ld [hl], $0
+ ret
+
+.asm_3f9c4
+ call BattleRandom
+ and $f
+ ret nz
+
+.asm_3f9ca
+ callab Function2a30d
+ ret
+; 3f9d1
+
+GetRoamMonMapGroup: ; 3f9d1
+ ld a, [TempEnemyMonSpecies]
+ ld b, a
+ ld a, [RoamMon1Species]
+ cp b
+ ld hl, RoamMon1MapGroup
+ ret z
+ ld a, [RoamMon2Species]
+ cp b
+ ld hl, RoamMon2MapGroup
+ ret z
+ ld hl, RoamMon3MapGroup
+ ret
+; 3f9e9
+
+GetRoamMonMapNumber: ; 3f9e9
+ ld a, [TempEnemyMonSpecies]
+ ld b, a
+ ld a, [RoamMon1Species]
+ cp b
+ ld hl, RoamMon1MapNumber
+ ret z
+ ld a, [RoamMon2Species]
+ cp b
+ ld hl, RoamMon2MapNumber
+ ret z
+ ld hl, RoamMon3MapNumber
+ ret
+; 3fa01
+
+GetRoamMonHP: ; 3fa01
+; output: hl = RoamMonCurHP
+ ld a, [TempEnemyMonSpecies]
+ ld b, a
+ ld a, [RoamMon1Species]
+ cp b
+ ld hl, RoamMon1CurHP
+ ret z
+ ld a, [RoamMon2Species]
+ cp b
+ ld hl, RoamMon2CurHP
+ ret z
+ ld hl, RoamMon3CurHP
+ ret
+; 3fa19
+
+GetRoamMonDVs: ; 3fa19
+; output: hl = RoamMonDVs
+ ld a, [TempEnemyMonSpecies]
+ ld b, a
+ ld a, [RoamMon1Species]
+ cp b
+ ld hl, RoamMon1DVs
+ ret z
+ ld a, [RoamMon2Species]
+ cp b
+ ld hl, RoamMon2DVs
+ ret z
+ ld hl, RoamMon3DVs
+ ret
+; 3fa31
+
+GetRoamMonSpecies: ; 3fa31
+ ld a, [TempEnemyMonSpecies]
+ ld hl, RoamMon1Species
+ cp [hl]
+ ret z
+ ld hl, RoamMon2Species
+ cp [hl]
+ ret z
+ ld hl, RoamMon3Species
+ ret
+; 3fa42
+
+
+Function3fa42: ; 3fa42
+ ld hl, $d276
+ ld de, StringBuffer1
+ ld bc, $0002
+ call CopyBytes
+ ld hl, $d26b
+ ld bc, $000a
+ call CopyBytes
+ ld hl, $b254
+ call Function3faa0
+ ld hl, $b266
+ ld d, $5
+.asm_3fa62
+ push hl
+ inc hl
+ inc hl
+ ld a, [hl]
+ dec hl
+ dec hl
+ and a
+ jr z, .asm_3fa85
+ push de
+ ld bc, $000c
+ ld de, StringBuffer1
+ call CompareLong
+ pop de
+ pop hl
+ jr c, .asm_3fa99
+ ld bc, $0012
+ add hl, bc
+ dec d
+ jr nz, .asm_3fa62
+ ld bc, $ffee
+ add hl, bc
+ push hl
+
+.asm_3fa85
+ ld d, h
+ ld e, l
+ ld hl, StringBuffer1
+ ld bc, $000c
+ call CopyBytes
+ ld b, $6
+ xor a
+.asm_3fa93
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .asm_3fa93
+ pop hl
+
+.asm_3fa99
+ call Function3faa0
+ call Function3fac8
+ ret
+; 3faa0
+
+Function3faa0: ; 3faa0
+ ld a, [$d0ee]
+ and $f
+ cp $1
+ ld bc, $000d
+ jr c, .asm_3fab4
+ ld bc, $000f
+ jr z, .asm_3fab4
+ ld bc, $0011
+
+.asm_3fab4
+ add hl, bc
+ call Function3fabe
+ ret nc
+ inc [hl]
+ ret nz
+ dec hl
+ inc [hl]
+ ret
+; 3fabe
+
+Function3fabe: ; 3fabe
+ dec hl
+ ld a, [hl]
+ inc hl
+ cp $27
+ ret c
+ ld a, [hl]
+ cp $f
+ ret
+; 3fac8
+
+Function3fac8: ; 3fac8
+ ld b, $5
+ ld hl, $b277
+ ld de, DefaultFlypoint
+.asm_3fad0
+ push bc
+ push de
+ push hl
+ call Function3fb54
+ pop hl
+ ld a, e
+ pop de
+ ld [de], a
+ inc de
+ ld a, b
+ ld [de], a
+ inc de
+ ld a, c
+ ld [de], a
+ inc de
+ ld bc, $0012
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .asm_3fad0
+ ld b, $0
+ ld c, $1
+.asm_3faed
+ ld a, b
+ add b
+ add b
+ ld e, a
+ ld d, $0
+ ld hl, DefaultFlypoint
+ add hl, de
+ push hl
+ ld a, c
+ add c
+ add c
+ ld e, a
+ ld d, $0
+ ld hl, DefaultFlypoint
+ add hl, de
+ ld d, h
+ ld e, l
+ pop hl
+ push bc
+ ld c, $3
+ call StringCmp
+ pop bc
+ jr z, .asm_3fb10
+ jr nc, .asm_3fb1f
+
+.asm_3fb10
+ inc c
+ ld a, c
+ cp $5
+ jr nz, .asm_3faed
+ inc b
+ ld c, b
+ inc c
+ ld a, b
+ cp $4
+ jr nz, .asm_3faed
+ ret
+
+.asm_3fb1f
+ push bc
+ ld a, b
+ ld bc, $0012
+ ld hl, $b266
+ call AddNTimes
+ push hl
+ ld de, DefaultFlypoint
+ ld bc, $0012
+ call CopyBytes
+ pop hl
+ pop bc
+ push hl
+ ld a, c
+ ld bc, $0012
+ ld hl, $b266
+ call AddNTimes
+ pop de
+ push hl
+ ld bc, $0012
+ call CopyBytes
+ ld hl, DefaultFlypoint
+ ld bc, $0012
+ pop de
+ call CopyBytes
+ ret
+; 3fb54
+
+Function3fb54: ; 3fb54
+ ld e, $0
+ ld a, [hld]
+ ld c, a
+ ld a, [hld]
+ ld b, a
+ ld a, [hld]
+ add c
+ ld c, a
+ ld a, [hld]
+ adc b
+ ld b, a
+ jr nc, .asm_3fb63
+ inc e
+
+.asm_3fb63
+ ld a, [hld]
+ add c
+ ld c, a
+ ld a, [hl]
+ adc b
+ ld b, a
+ ret nc
+ inc e
+ ret
+; 3fb6c
+
+Function3fb6c: ; 3fb6c
+ call Function3fbf8
+ ld hl, $c590
+ ld b, $4
+ ld c, $12
+ call TextBox
+ callba MobileTextBorder
+ ld hl, $c505
+ ld bc, $0307
+ call ClearBox
+ call Functione51
+ call Function3ed9f
+ call Function3fbd6
+ xor a
+ ld [$ffde], a
+ ld [hSCY], a
+ ld a, $90
+ ld [hWY], a
+ ld [rWY], a
+ call WaitBGMap
+ xor a
+ ld [hBGMapMode], a
+ callba Function4e980
+ ld a, $1
+ ld [hBGMapMode], a
+ ld a, $31
+ ld [$ffad], a
+ ld hl, $c51a
+ ld bc, $0606
+ ld a, $13
+ call Predef
+ xor a
+ ld [hWY], a
+ ld [rWY], a
+ call WaitBGMap
+ call HideSprites
+ ld b, $1
+ call GetSGBLayout
+ call Function32f9
+ ld a, $90
+ ld [hWY], a
+ xor a
+ ld [hSCX], a
+ ret
+; 3fbd6
+
+Function3fbd6: ; 3fbd6
+ ld a, [rSVBK]
+ push af
+ ld a, $6
+ ld [rSVBK], a
+ ld hl, $d000
+ ld bc, VBlank5
+ ld a, $7f
+ call ByteFill
+ ld de, $d000
+ ld hl, VBGMap0
+ ld bc, $0f40
+ call Request2bpp
+ pop af
+ ld [rSVBK], a
+ ret
+; 3fbf8
+
+Function3fbf8: ; 3fbf8
+ call GetBattleBackpic
+ call Function3fc30
+ ret
+; 3fbff
+
+
+GetBattleBackpic: ; 3fbff
+; Load the player character's backpic (6x6) into VRAM starting from $9310.
+
+; Special exception for Dude.
+ ld b, BANK(DudeBackpic)
+ ld hl, DudeBackpic
+ ld a, [BattleType]
+ cp BATTLETYPE_TUTORIAL
+ jr z, .Decompress
+
+; What gender are we?
+ ld a, [$d45b]
+ bit 2, a
+ jr nz, .Chris
+ ld a, [PlayerGender]
+ bit 0, a
+ jr z, .Chris
+
+; It's a girl.
+ callba GetKrisBackpic
+ ret
+
+.Chris
+; It's a boy.
+ ld b, BANK(ChrisBackpic)
+ ld hl, ChrisBackpic
+
+.Decompress
+ ld de, $9310
+ ld c, $31
+ ld a, PREDEF_DECOMPRESS
+ call Predef
+ ret
+; 3fc30
+
+
+Function3fc30: ; 3fc30
+ ld a, [rSVBK]
+ push af
+ ld a, $6
+ ld [rSVBK], a
+ ld hl, VTiles0
+ ld de, $9310
+ ld a, [hROMBank]
+ ld b, a
+ ld c, $31
+ call Get2bpp
+ pop af
+ ld [rSVBK], a
+ call Function3fc5b
+ ld a, $31
+ ld [$ffad], a
+ ld hl, $c51a
+ ld bc, $0606
+ ld a, $13
+ call Predef
+ ret
+; 3fc5b
+
+Function3fc5b: ; 3fc5b
+ ld hl, Sprites
+ xor a
+ ld [hConnectionStripLength], a
+ ld b, $6
+ ld e, $a8
+.asm_3fc65
+ ld c, $3
+ ld d, $40
+.asm_3fc69
+ ld [hl], d
+ inc hl
+ ld [hl], e
+ inc hl
+ ld a, [hConnectionStripLength]
+ ld [hli], a
+ inc a
+ ld [hConnectionStripLength], a
+ ld a, $1
+ ld [hli], a
+ ld a, d
+ add $8
+ ld d, a
+ dec c
+ jr nz, .asm_3fc69
+ ld a, [hConnectionStripLength]
+ add $3
+ ld [hConnectionStripLength], a
+ ld a, e
+ add $8
+ ld e, a
+ dec b
+ jr nz, .asm_3fc65
+ ret
+; 3fc8b
+
+
+BattleStartMessage: ; 3fc8b
+ ld a, [IsInBattle]
+ dec a
+ jr z, .asm_3fcaa
+
+ ld de, SFX_SHINE
+ call PlaySFX
+ call WaitSFX
+
+ ld c, 20
+ call DelayFrames
+
+ callba Function39939
+
+ ld hl, WantsToBattleText
+ jr .asm_3fd0e
+
+.asm_3fcaa
+ call Function3da79
+ jr nc, .asm_3fcc2
+
+ xor a
+ ld [$cfca], a
+ ld a, 1
+ ld [hBattleTurn], a
+ ld a, 1
+ ld [$c689], a
+ ld de, $0101
+ call Function3ee17
+
+.asm_3fcc2
+ callba CheckSleepingTreeMon
+ jr c, .asm_3fceb
+
+ callba CheckBattleScene
+ jr c, .asm_3fce0
+
+ hlcoord 12, 0
+ ld d, $0
+ ld e, $1
+ ld a, $47
+ call Predef
+ jr .asm_3fceb
+
+.asm_3fce0
+ ld a, $0f
+ ld [CryTracks], a
+ ld a, [TempEnemyMonSpecies]
+ call Function37b6
+
+.asm_3fceb
+ ld a, [BattleType]
+ cp BATTLETYPE_FISH
+ jr nz, .asm_3fcfd
+
+ callba Function106086
+
+ ld hl, HookedPokemonAttackedText
+ jr .asm_3fd0e
+
+.asm_3fcfd
+ ld hl, PokemonFellFromTreeText
+ cp BATTLETYPE_TREE
+ jr z, .asm_3fd0e
+ ld hl, WildPokemonAppearedText2
+ cp $b
+ jr z, .asm_3fd0e
+ ld hl, WildPokemonAppearedText
+
+.asm_3fd0e
+ push hl
+ callba Function2c000
+ pop hl
+ call StdBattleTextBox
+
+ call Function3f830
+ ret nz
+
+ ld c, $2
+ callba Function4ea0a
+
+ ret
+; 3fd26
+
--- a/main.asm
+++ b/main.asm
@@ -38424,9488 +38424,11 @@
SECTION "bankF", ROMX, BANK[$F]
-Function3c000: ; 3c000
- xor a
- ld [$c664], a
- ld [$c6fc], a
- ld [$d0ec], a
- ld [BattleEnded], a
- inc a
- ld [$d264], a
- ld hl, OTPartyMon1CurHP
- ld bc, $002f
- ld d, $3
-.asm_3c019
- inc d
- ld a, [hli]
- or [hl]
- jr nz, .asm_3c021
- add hl, bc
- jr .asm_3c019
+INCLUDE "battle/core.asm"
-.asm_3c021
- ld a, d
- ld [$d430], a
- ld a, [InLinkBattle]
- and a
- jr z, .asm_3c031
- ld a, [$ffcb]
- cp $2
-.data_3c02f
- db $28
- db $1b
-
-.asm_3c031
- ld a, [IsInBattle]
- dec a
- jr z, .asm_3c047
- xor a
- ld [$c718], a
- call Function3d834
- call Function3d867
- call Function3dc18
- call Function3d4e1
-
-.asm_3c047
- ld c, $28
- call DelayFrames
- call Function309d
- call Function3d873
- ld a, d
- and a
- jp z, LostBattle
- call Function30b4
- ld a, [BattleType]
- cp $2
- jp z, Function3c0e2
- cp $3
- jp z, Function3c0e2
- xor a
- ld [CurPartyMon], a
-.asm_3c06b
- call Function3d887
- jr nz, .asm_3c076
- ld hl, CurPartyMon
- inc [hl]
- jr .asm_3c06b
-
-.asm_3c076
- ld a, [CurBattleMon]
- ld [$c71a], a
- ld a, [CurPartyMon]
- ld [CurBattleMon], a
- inc a
- ld hl, PartyCount
- ld c, a
- ld b, $0
- add hl, bc
- ld a, [hl]
- ld [CurPartySpecies], a
- ld [TempBattleMonSpecies], a
- ld hl, $c505
- ld a, $9
- call Function3d490
- call Function309d
- call Function3d57a
- call Function3da0d
- call Function3dab1
- call Function3f26d
- call Function3dbde
- call Function3dc18
- call Function3db5f
- call EmptyBattleTextBox
- call Function309d
- call SetPlayerTurn
- call Function3dc23
- ld a, [InLinkBattle]
- and a
- jr z, .asm_3c0df
- ld a, [$ffcb]
- cp $2
- jr nz, .asm_3c0df
- xor a
- ld [$c718], a
- call Function3d834
- call Function3d867
- call Function3dc18
- call Function3d4e1
- call SetEnemyTurn
- call Function3dc23
-
-.asm_3c0df
- jp Function3c12f
-; 3c0e2
-
-Function3c0e2: ; 3c0e2
- jp Function3e139
-; 3c0e5
-
-
-
-Function3c0e5: ; 3c0e5
- call Function30b4
- ld a, [$d0ee]
- and $c0
- add $2
- ld [$d0ee], a
- ld a, [InLinkBattle]
- and a
- ld hl, $47bd
- jr z, .asm_3c115
- ld a, [$d0ee]
- and $c0
- ld [$d0ee], a
- ld hl, $47cf
- call Function3d2e0
- jr nc, .asm_3c115
- ld hl, $cd2a
- bit 4, [hl]
- jr nz, .asm_3c118
- ld hl, $5863
-
-.asm_3c115
- call StdBattleTextBox
-
-.asm_3c118
- call Function3ceec
- call Function3d2e0
- jr c, .asm_3c126
-
- ld de, SFX_RUN
- call PlaySFX
-
-.asm_3c126
- call SetPlayerTurn
- ld a, 1
- ld [BattleEnded], a
- ret
-; 3c12f
-
-Function3c12f: ; 3c12f
- call Function3c1bf
- call Function3c3f5
- jp c, .asm_3c1be
- xor a
- ld [$c710], a
- ld [$c711], a
- ld [$d264], a
- ld [$c73f], a
- ld [$c740], a
- ld [CurDamage], a
- ld [$d257], a
- call Function3c27c
- call UpdateBattleMonInParty
- callba AIChooseMove
- call Function3d2f1
- jr nz, .asm_3c174
- callba Function100da5
- callba Function100641
- callba Function100dd8
- jp c, .asm_3c1be
-
-.asm_3c174
- call Function3c410
- jr c, .asm_3c18a
-.asm_3c179
- call Function3e139
- jr c, .asm_3c1be
- ld a, [BattleEnded]
- and a
- jr nz, .asm_3c1be
- ld a, [$d232]
- and a
- jr nz, .asm_3c1be
-
-.asm_3c18a
- call Function3c434
- jr nz, .asm_3c179
- call Function3c300
- jr c, .asm_3c1be
- call Function3c314
- jr c, .asm_3c19e
- call Function3c5fe
- jr .asm_3c1a1
-
-.asm_3c19e
- call Function3c664
-
-.asm_3c1a1
- call Function3d2e0
- jr c, .asm_3c1be
- ld a, [$d232]
- and a
- jr nz, .asm_3c1be
- ld a, [BattleEnded]
- and a
- jr nz, .asm_3c1be
- call Function3c1d6
- ld a, [BattleEnded]
- and a
- jr nz, .asm_3c1be
- jp Function3c12f
-
-.asm_3c1be
- ret
-; 3c1bf
-
-Function3c1bf: ; 3c1bf
- ret
-; 3c1c0
-
-
-Function3c1c0: ; 3c1c0
- ld a, $5
- call GetSRAMBank
- ld hl, $a89b
- inc [hl]
- jr nz, .asm_3c1d2
- dec hl
- inc [hl]
- jr nz, .asm_3c1d2
- dec [hl]
- inc hl
- dec [hl]
-
-.asm_3c1d2
- call CloseSRAM
- ret
-; 3c1d6
-
-
-Function3c1d6: ; 3c1d6
- ld a, [$ffcb]
- cp $1
- jr z, .asm_3c1fe
- call Function3c23c
- ret c
- call Function3ca26
- call Function3c23c
- ret c
- call HandleWeather
- call Function3c23c
- ret c
- call Function3c874
- call Function3c23c
- ret c
- call Function3c801
- call Function3c23c
- ret c
- jr .asm_3c21e
-
-.asm_3c1fe
- call Function3c25c
- ret c
- call Function3ca26
- call Function3c25c
- ret c
- call HandleWeather
- call Function3c25c
- ret c
- call Function3c874
- call Function3c25c
- ret c
- call Function3c801
- call Function3c25c
- ret c
-
-.asm_3c21e
- call Function3c8eb
- call Function3c93c
- call Function3ca8f
- call Function3cafb
- call Function3cb36
- call Function3de97
- call Function3dcf9
- call UpdateBattleMonInParty
- call Function309d
- jp Function3c4df
-; 3c23c
-
-Function3c23c: ; 3c23c
- call Function3c710
- jr nz, .asm_3c24a
- call Function3d14e
- ld a, [BattleEnded]
- and a
- jr nz, .asm_3c25a
-
-.asm_3c24a
- call Function3c70b
- jr nz, .asm_3c258
- call Function3cd55
- ld a, [BattleEnded]
- and a
- jr nz, .asm_3c25a
-
-.asm_3c258
- and a
- ret
-
-.asm_3c25a
- scf
- ret
-; 3c25c
-
-Function3c25c: ; 3c25c
- call Function3c70b
- jr nz, .asm_3c26a
- call Function3cd55
- ld a, [BattleEnded]
- and a
- jr nz, .asm_3c27a
-
-.asm_3c26a
- call Function3c710
- jr nz, .asm_3c278
- call Function3d14e
- ld a, [BattleEnded]
- and a
- jr nz, .asm_3c27a
-
-.asm_3c278
- and a
- ret
-
-.asm_3c27a
- scf
- ret
-; 3c27c
-
-Function3c27c: ; 3c27c
- ld a, [$ffcb]
- cp $1
- jr z, .asm_3c287
- call .asm_3c28a
- jr .asm_3c296
-
-.asm_3c287
- call .asm_3c296
-.asm_3c28a
- call SetPlayerTurn
- ld de, PartyMon1Item
- ld a, [CurBattleMon]
- ld b, a
- jr .asm_3c2a0
-
-.asm_3c296
- call SetEnemyTurn
- ld de, OTPartyMon1Item
- ld a, [CurOTMon]
- ld b, a
-
-.asm_3c2a0
- push de
- push bc
- callab GetUserItem
- ld a, [hl]
- ld [$d265], a
- sub $98
- pop bc
- pop de
- ret nz
- ld [hl], a
- ld h, d
- ld l, e
- ld a, b
- call GetPartyLocation
- xor a
- ld [hl], a
- ld a, $2
- call _GetBattleVar
- push af
- set 7, [hl]
- ld a, $c
- call _GetBattleVar
- push hl
- push af
- xor a
- ld [hl], a
- ld [AttackMissed], a
- ld [EffectFailed], a
- callba BattleCommand77
- pop af
- pop hl
- ld [hl], a
- call GetItemName
- ld hl, $4bde
- call StdBattleTextBox
- callab BattleCommand8c
- pop af
- bit 7, a
- ret nz
- xor a
- ld [$cfca], a
- ld de, $0103
- call Function3ee0f
- call Function3c8e4
- ld hl, $4d97
- jp StdBattleTextBox
-; 3c300
-
-Function3c300: ; 3c300
- ld a, [InLinkBattle]
- and a
- jr z, .asm_3c30d
- ld a, [$d430]
- cp $f
- jr z, .asm_3c30f
-
-.asm_3c30d
- and a
- ret
-
-.asm_3c30f
- call Function3c0e5
- scf
- ret
-; 3c314
-
-Function3c314: ; 3c314
- ld a, [InLinkBattle]
- and a
- jr z, .asm_3c35b
- ld a, [$d430]
- cp $e
- jr z, .asm_3c35b
- cp $d
- jr z, .asm_3c35b
- sub $4
- jr c, .asm_3c35b
- ld a, [$d0ec]
- cp $2
- jr nz, .asm_3c34c
- ld a, [$ffcb]
- cp $2
- jr z, .asm_3c341
- call BattleRandom
- cp $80
- jp c, .asm_3c3f1
- jp Function3c3f3
-
-.asm_3c341
- call BattleRandom
- cp $80
- jp c, Function3c3f3
- jp .asm_3c3f1
-
-.asm_3c34c
- callab Function3846c
- call SetEnemyTurn
- call Function3dc23
- jp Function3c3f3
-
-.asm_3c35b
- ld a, [$d0ec]
- and a
- jp nz, .asm_3c3f1
- call Function3c5b4
- jr z, .asm_3c36d
- jp c, .asm_3c3f1
- jp Function3c3f3
-
-.asm_3c36d
- call SetPlayerTurn
- callab GetUserItem
- push bc
- callab GetOpponentItem
- pop de
- ld a, d
- cp $4a
- jr nz, .asm_3c391
- ld a, b
- cp $4a
- jr z, .asm_3c39f
- call BattleRandom
- cp e
- jr nc, .asm_3c3c5
- jp .asm_3c3f1
-
-.asm_3c391
- ld a, b
- cp $4a
- jr nz, .asm_3c3c5
- call BattleRandom
- cp c
- jr nc, .asm_3c3c5
- jp Function3c3f3
-
-.asm_3c39f
- ld a, [$ffcb]
- cp $2
- jr z, .asm_3c3b5
- call BattleRandom
- cp c
- jp c, Function3c3f3
- call BattleRandom
- cp e
- jp c, .asm_3c3f1
- jr .asm_3c3c5
-
-.asm_3c3b5
- call BattleRandom
- cp e
- jp c, .asm_3c3f1
- call BattleRandom
- cp c
- jp c, Function3c3f3
- jr .asm_3c3c5
-
-.asm_3c3c5
- ld de, BattleMonSpd
- ld hl, EnemyMonSpd
- ld c, $2
- call StringCmp
- jr z, .asm_3c3d8
- jp nc, .asm_3c3f1
- jp Function3c3f3
-
-.asm_3c3d8
- ld a, [$ffcb]
- cp $2
- jr z, .asm_3c3e9
- call BattleRandom
- cp $80
- jp c, .asm_3c3f1
- jp Function3c3f3
-
-.asm_3c3e9
- call BattleRandom
- cp $80
- jp c, Function3c3f3
-.asm_3c3f1
- scf
- ret
-; 3c3f3
-
-Function3c3f3: ; 3c3f3
- and a
- ret
-; 3c3f5
-
-Function3c3f5: ; 3c3f5
- ld a, [BattleType]
- cp $6
- jr nz, .asm_3c40e
- ld a, [$dc79]
- and a
- jr nz, .asm_3c40e
- ld a, [$d0ee]
- and $c0
- add $2
- ld [$d0ee], a
- scf
- ret
-
-.asm_3c40e
- and a
- ret
-; 3c410
-
-Function3c410: ; 3c410
- ld a, [PlayerSubStatus4]
- and $20
- jp nz, Function3c432
- ld hl, EnemySubStatus3
- res 3, [hl]
- ld hl, PlayerSubStatus3
- res 3, [hl]
- ld a, [hl]
- and $12
- jp nz, Function3c432
- ld hl, PlayerSubStatus1
- bit 6, [hl]
- jp nz, Function3c432
- and a
- ret
-; 3c432
-
-Function3c432: ; 3c432
- scf
- ret
-; 3c434
-
-Function3c434: ; 3c434
- call Function3c410
- jp c, .asm_3c4ba
- ld hl, PlayerSubStatus5
- bit 4, [hl]
- jr z, .asm_3c449
- ld a, [LastPlayerMove]
- ld [CurPlayerMove], a
- jr .asm_3c47c
-
-.asm_3c449
- ld a, [$d0ec]
- cp $2
- jr z, .asm_3c4ce
- and a
- jr nz, .asm_3c4b5
- ld a, [PlayerSubStatus3]
- and $1
- jr nz, .asm_3c4ba
- xor a
- ld [$d235], a
- inc a
- ld [FXAnimIDLo], a
- call Function3e4bc
- push af
- call Function30b4
- call UpdateBattleHuds
- ld a, [CurPlayerMove]
- cp $a5
- jr z, .asm_3c476
- call PlayClickSFX
-
-.asm_3c476
- ld a, $1
- ld [hBGMapMode], a
- pop af
- ret nz
-
-.asm_3c47c
- call SetPlayerTurn
- callab UpdateMoveData
- xor a
- ld [$c732], a
- ld a, [PlayerMoveEffect]
- cp $77
- jr z, .asm_3c494
- xor a
- ld [PlayerFuryCutterCount], a
-
-.asm_3c494
- ld a, [PlayerMoveEffect]
- cp $51
- jr z, .asm_3c4a4
- ld hl, PlayerSubStatus4
- res 6, [hl]
- xor a
- ld [$c72b], a
-
-.asm_3c4a4
- ld a, [PlayerMoveEffect]
- cp $6f
- jr z, .asm_3c4c9
- cp $74
- jr z, .asm_3c4c9
- xor a
- ld [$c679], a
- jr .asm_3c4c9
-
-.asm_3c4b5
- ld hl, PlayerSubStatus3
- res 0, [hl]
-
-.asm_3c4ba
- xor a
- ld [PlayerFuryCutterCount], a
- ld [$c679], a
- ld [$c72b], a
- ld hl, PlayerSubStatus4
- res 6, [hl]
-
-.asm_3c4c9
- call Function3e7c1
- xor a
- ret
-
-.asm_3c4ce
- xor a
- ld [PlayerFuryCutterCount], a
- ld [$c679], a
- ld [$c72b], a
- ld hl, PlayerSubStatus4
- res 6, [hl]
- xor a
- ret
-; 3c4df
-
-Function3c4df: ; 3c4df
- ld a, [$ffcb]
- cp $1
- jr z, .asm_3c4ea
- call .asm_3c4ed
- jr .asm_3c518
-
-.asm_3c4ea
- call .asm_3c518
-.asm_3c4ed
- ld hl, PlayerSubStatus5
- bit 4, [hl]
- ret z
- ld a, [PlayerEncoreCount]
- dec a
- ld [PlayerEncoreCount], a
- jr z, .asm_3c50a
- ld hl, BattleMonPPMove1
- ld a, [CurMoveNum]
- ld c, a
- ld b, $0
- add hl, bc
- ld a, [hl]
- and $3f
- ret nz
-
-.asm_3c50a
- ld hl, PlayerSubStatus5
- res 4, [hl]
- call SetEnemyTurn
- ld hl, $4c8a
- jp StdBattleTextBox
-
-.asm_3c518
- ld hl, EnemySubStatus5
- bit 4, [hl]
- ret z
- ld a, [EnemyEncoreCount]
- dec a
- ld [EnemyEncoreCount], a
- jr z, .asm_3c535
- ld hl, EnemyMonPPMove1
- ld a, [CurEnemyMoveNum]
- ld c, a
- ld b, $0
- add hl, bc
- ld a, [hl]
- and $3f
- ret nz
-
-.asm_3c535
- ld hl, EnemySubStatus5
- res 4, [hl]
- call SetPlayerTurn
- ld hl, $4c8a
- jp StdBattleTextBox
-; 3c543
-
-
-Function3c543: ; 3c543
- ld a, [IsInBattle]
- dec a
- jr nz, .Stay
-
- ld a, [PlayerSubStatus5]
- bit 7, a
- jr nz, .Stay
-
- ld a, [$c731]
- and a
- jr nz, .Stay
-
- ld a, [EnemyMonStatus]
- and 1 << FRZ | SLP
- jr nz, .Stay
-
- ld a, [TempEnemyMonSpecies]
- ld de, 1
- ld hl, .Always
- call IsInArray
- jr c, .Flee
-
- call BattleRandom
- ld b, a
- cp $80
- jr nc, .Stay
-
- push bc
- ld a, [TempEnemyMonSpecies]
- ld de, 1
- ld hl, .Often
- call IsInArray
- pop bc
- jr c, .Flee
-
- ld a, b
- cp $1a
- jr nc, .Stay
-
- ld a, [TempEnemyMonSpecies]
- ld de, 1
- ld hl, .Sometimes
- call IsInArray
- jr c, .Flee
-
-.Stay
- and a
- ret
-
-.Flee
- scf
- ret
-; 3c59a
-
-.Sometimes
- db MAGNEMITE
- db GRIMER
- db TANGELA
- db MR__MIME
- db EEVEE
- db PORYGON
- db DRATINI
- db DRAGONAIR
- db TOGETIC
- db UMBREON
- db UNOWN
- db SNUBBULL
- db HERACROSS
- db $ff
-
-.Often
- db CUBONE
- db ARTICUNO
- db ZAPDOS
- db MOLTRES
- db QUAGSIRE
- db DELIBIRD
- db PHANPY
- db TEDDIURSA
- db $ff
-
-.Always
- db RAIKOU
- db ENTEI
-; db SUICUNE
- db $ff
-; 3c5b4
-
-
-Function3c5b4: ; 3c5b4
- ld a, [CurPlayerMove]
- call GetMovePriority
- ld b, a
- push bc
- ld a, [CurEnemyMove]
- call GetMovePriority
- pop bc
- cp b
- ret
-; 3c5c5
-
-GetMovePriority: ; 3c5c5
- ld b, a
- cp VITAL_THROW
- ld a, 0
- ret z
- call Function3c5ec
- ld hl, .data_3c5df
-.loop
- ld a, [hli]
- cp b
- jr z, .asm_3c5dd
- inc hl
- cp $ff
- jr nz, .loop
- ld a, 1
- ret
-
-.asm_3c5dd
- ld a, [hl]
- ret
-; 3c5df
-
-.data_3c5df
- db EFFECT_PROTECT, 3
- db EFFECT_ENDURE, 3
- db EFFECT_PRIORITY_HIT, 2
- db EFFECT_WHIRLWIND, 0
- db EFFECT_COUNTER, 0
- db EFFECT_MIRROR_COAT, 0
- db $ff
-; 3c5ec
-
-
-Function3c5ec: ; 3c5ec
- ld a, b
- dec a
- ld hl, $5afc
- ld bc, $0007
- call AddNTimes
- ld a, $10
- call GetFarByte
- ld b, a
- ret
-; 3c5fe
-
-Function3c5fe: ; 3c5fe
- call Function309d
- call Function3c543
- jp c, Function3c0e5
- call SetEnemyTurn
- ld a, $1
- ld [$c70f], a
- callab Function38000
- jr c, .asm_3c62f
- call Function3c6de
- call Function3d2e0
- ret c
- ld a, [$d232]
- and a
- ret nz
- call Function3c710
- jp z, Function3d14e
- call Function3c70b
- jp z, Function3cd55
-
-.asm_3c62f
- call SetEnemyTurn
- call Function3c716
- jp z, Function3cd55
- call RefreshBattleHuds
- call Function3c6cf
- call Function3d2e0
- ret c
- ld a, [$d232]
- and a
- ret nz
- call Function3c70b
- jp z, Function3cd55
- call Function3c710
- jp z, Function3d14e
- call SetPlayerTurn
- call Function3c716
- jp z, Function3d14e
- call RefreshBattleHuds
- xor a
- ld [$d0ec], a
- ret
-; 3c664
-
-Function3c664: ; 3c664
- xor a
- ld [$c70f], a
- call SetEnemyTurn
- callab Function38000
- push af
- call Function3c6cf
- pop bc
- ld a, [$d232]
- and a
- ret nz
- call Function3d2e0
- ret c
- call Function3c70b
- jp z, Function3cd55
- call Function3c710
- jp z, Function3d14e
- push bc
- call SetPlayerTurn
- call Function3c716
- pop bc
- jp z, Function3d14e
- push bc
- call RefreshBattleHuds
- pop af
- jr c, .asm_3c6be
- call Function309d
- call Function3c543
- jp c, Function3c0e5
- call Function3c6de
- call Function3d2e0
- ret c
- ld a, [$d232]
- and a
- ret nz
- call Function3c710
- jp z, Function3d14e
- call Function3c70b
- jp z, Function3cd55
-
-.asm_3c6be
- call SetEnemyTurn
- call Function3c716
- jp z, Function3cd55
- call RefreshBattleHuds
- xor a
- ld [$d0ec], a
- ret
-; 3c6cf
-
-Function3c6cf: ; 3c6cf
- call SetPlayerTurn
- call Function3c6fe
- callab DoPlayerTurn
- jp Function3c6ed
-; 3c6de
-
-Function3c6de: ; 3c6de
- call SetEnemyTurn
- call Function3c6fe
- callab DoEnemyTurn
- jp Function3c6ed
-; 3c6ed
-
-Function3c6ed: ; 3c6ed
- ld a, $5
- call _GetBattleVar
- res 2, [hl]
- res 5, [hl]
- ld a, $9
- call _GetBattleVar
- res 6, [hl]
- ret
-; 3c6fe
-
-Function3c6fe: ; 3c6fe
- ld a, $4
- call _GetBattleVar
- res 6, [hl]
- ret
-; 3c706
-
-Function3c706: ; 3c706
- ld a, [hBattleTurn]
- and a
- jr z, Function3c710
-Function3c70b: ; 3c70b
- ld hl, EnemyMonHPHi
- jr asm_3c713
-
-Function3c710: ; 3c710
- ld hl, BattleMonHP
-
-asm_3c713
- ld a, [hli]
- or [hl]
- ret
-; 3c716
-
-Function3c716: ; 3c716
- call Function3c706
- ret z
- ld a, $a
- call GetBattleVar
- and $18
- jr z, .asm_3c768
- ld hl, $47e2
- ld de, $0106
- and $10
- jr z, .asm_3c733
- ld hl, $47f8
- ld de, $0105
-
-.asm_3c733
- push de
- call StdBattleTextBox
- pop de
- xor a
- ld [$cfca], a
- call Function3ee0f
- call GetEighthMaxHP
- ld de, $c674
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3c74d
- ld de, $c67c
-
-.asm_3c74d
- ld a, $4
- call GetBattleVar
- bit 0, a
- jr z, .asm_3c765
- call Function3cc76
- ld a, [de]
- inc a
- ld [de], a
- ld hl, $0000
-.asm_3c75f
- add hl, bc
- dec a
- jr nz, .asm_3c75f
- ld b, h
- ld c, l
-
-.asm_3c765
- call Function3cc3f
-
-.asm_3c768
- call Function3c706
- jp z, .asm_3c7f7
- ld a, $3
- call _GetBattleVar
- bit 7, [hl]
- jr z, .asm_3c7a1
- call Function3c8e4
- xor a
- ld [$cfca], a
- ld de, $0107
- ld a, $7
- call GetBattleVar
- and $60
- call z, Function3ee0f
- call Function3c8e4
- call GetEighthMaxHP
- call Function3cc3f
- ld a, $1
- ld [hBGMapMode], a
- call Function3ccef
- ld hl, $480e
- call StdBattleTextBox
-
-.asm_3c7a1
- call Function3c706
- jr z, .asm_3c7f7
- ld a, $0
- call _GetBattleVar
- bit 0, [hl]
- jr z, .asm_3c7c5
- xor a
- ld [$cfca], a
- ld de, $010c
- call Function3ee0f
- call GetQuarterMaxHP
- call Function3cc3f
- ld hl, $4822
- call StdBattleTextBox
-
-.asm_3c7c5
- call Function3c706
- jr z, .asm_3c7f7
- ld a, $0
- call _GetBattleVar
- bit 1, [hl]
- jr z, .asm_3c7e9
- xor a
- ld [$cfca], a
- ld de, $010c
- call Function3ee0f
- call GetQuarterMaxHP
- call Function3cc3f
- ld hl, $4836
- call StdBattleTextBox
-
-.asm_3c7e9
- ld hl, BattleMonHP
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3c7f4
- ld hl, EnemyMonHPHi
-
-.asm_3c7f4
- ld a, [hli]
- or [hl]
- ret nz
-
-.asm_3c7f7
- call RefreshBattleHuds
- ld c, $14
- call DelayFrames
- xor a
- ret
-; 3c801
-
-Function3c801: ; 3c801
- ld a, [$ffcb]
- cp $1
- jr z, .asm_3c813
- call SetPlayerTurn
- call .asm_3c81c
- call SetEnemyTurn
- jp .asm_3c81c
-
-.asm_3c813
- call SetEnemyTurn
- call .asm_3c81c
- call SetPlayerTurn
-.asm_3c81c
- ld hl, PlayerPerishCount
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3c827
- ld hl, EnemyPerishCount
-
-.asm_3c827
- ld a, $0
- call GetBattleVar
- bit 4, a
- ret z
- dec [hl]
- ld a, [hl]
- ld [$d265], a
- push af
- ld hl, $4864
- call StdBattleTextBox
- pop af
- ret nz
- ld a, $0
- call _GetBattleVar
- res 4, [hl]
- ld a, [hBattleTurn]
- and a
- jr nz, .asm_3c85c
- ld hl, BattleMonHP
- xor a
- ld [hli], a
- ld [hl], a
- ld hl, PartyMon1CurHP
- ld a, [CurBattleMon]
- call GetPartyLocation
- xor a
- ld [hli], a
- ld [hl], a
- ret
-
-.asm_3c85c
- ld hl, EnemyMonHPHi
- xor a
- ld [hli], a
- ld [hl], a
- ld a, [IsInBattle]
- dec a
- ret z
- ld hl, OTPartyMon1CurHP
- ld a, [CurOTMon]
- call GetPartyLocation
- xor a
- ld [hli], a
- ld [hl], a
- ret
-; 3c874
-
-Function3c874: ; 3c874
- ld a, [$ffcb]
- cp $1
- jr z, .asm_3c886
- call SetPlayerTurn
- call .asm_3c88f
- call SetEnemyTurn
- jp .asm_3c88f
-
-.asm_3c886
- call SetEnemyTurn
- call .asm_3c88f
- call SetPlayerTurn
-.asm_3c88f
- ld hl, $c730
- ld de, $c72e
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3c8a0
- ld hl, $c731
- ld de, $c72f
-
-.asm_3c8a0
- ld a, [hl]
- and a
- ret z
- ld a, $3
- call GetBattleVar
- bit 4, a
- ret nz
- ld a, [de]
- ld [$d265], a
- ld [FXAnimIDLo], a
- call GetMoveName
- dec [hl]
- jr z, .asm_3c8de
- ld a, $2
- call GetBattleVar
- and $60
- jr nz, .asm_3c8d3
- call Function3c8e4
- xor a
- ld [$cfca], a
- ld [FXAnimIDHi], a
- ld a, $37
- call Predef
- call Function3c8e4
-
-.asm_3c8d3
- call Function3cc76
- call Function3cc3f
- ld hl, $4de2
- jr .asm_3c8e1
-
-.asm_3c8de
- ld hl, $4df5
-
-.asm_3c8e1
- jp StdBattleTextBox
-; 3c8e4
-
-Function3c8e4: ; 3c8e4
- ld a, [hBattleTurn]
- xor $1
- ld [hBattleTurn], a
- ret
-; 3c8eb
-
-Function3c8eb: ; 3c8eb
- ld a, [$ffcb]
- cp $1
- jr z, .asm_3c8fd
- call SetPlayerTurn
- call .asm_3c906
- call SetEnemyTurn
- jp .asm_3c906
-
-.asm_3c8fd
- call SetEnemyTurn
- call .asm_3c906
- call SetPlayerTurn
-.asm_3c906
- callab GetUserItem
- ld a, [hl]
- ld [$d265], a
- call GetItemName
- ld a, b
- cp $3
- ret nz
- ld hl, BattleMonHP
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3c922
- ld hl, EnemyMonHPHi
-
-.asm_3c922
- ld a, [hli]
- ld b, a
- ld a, [hli]
- ld c, a
- ld a, [hli]
- cp b
- jr nz, .asm_3c92d
- ld a, [hl]
- cp c
- ret z
-
-.asm_3c92d
- call Function3cc76
- call Function3c8e4
- call Function3ccef
- ld hl, $4880
- jp StdBattleTextBox
-; 3c93c
-
-Function3c93c: ; 3c93c
- ld a, [$ffcb]
- cp $1
- jr z, .asm_3c94e
- call SetPlayerTurn
- call .asm_3c957
- call SetEnemyTurn
- jp .asm_3c957
-
-.asm_3c94e
- call SetEnemyTurn
- call .asm_3c957
- call SetPlayerTurn
-.asm_3c957
- callab GetUserItem
- ld a, b
- cp $6
- jr nz, .asm_3c9ae
- ld hl, PartyMon1PP
- ld a, [CurBattleMon]
- call GetPartyLocation
- ld d, h
- ld e, l
- ld hl, PartyMon1Move1
- ld a, [CurBattleMon]
- call GetPartyLocation
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3c99b
- ld de, $c739
- ld hl, $c735
- ld a, [IsInBattle]
- dec a
- jr z, .asm_3c99b
- ld hl, OTPartyMon1PPMove1
- ld a, [CurOTMon]
- call GetPartyLocation
- ld d, h
- ld e, l
- ld hl, OTPartyMon1Move1
- ld a, [CurOTMon]
- call GetPartyLocation
-
-.asm_3c99b
- ld c, $0
-.asm_3c99d
- ld a, [hl]
- and a
- jr z, .asm_3c9ae
- ld a, [de]
- and $3f
- jr z, .asm_3c9af
- inc hl
- inc de
- inc c
- ld a, c
- cp $4
- jr nz, .asm_3c99d
-
-.asm_3c9ae
- ret
-
-.asm_3c9af
- ld a, [hl]
- cp $a6
- ld b, $1
- jr z, .asm_3c9b8
- ld b, $5
-
-.asm_3c9b8
- ld a, [de]
- add b
- ld [de], a
- push bc
- push bc
- ld a, [hl]
- ld [$d265], a
- ld de, BattleMonItem
- ld hl, BattleMonPPMove1
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3c9d2
- ld de, EnemyMonItem
- ld hl, EnemyMonPPMove1
-
-.asm_3c9d2
- inc de
- pop bc
- ld b, $0
- add hl, bc
- push hl
- ld h, d
- ld l, e
- add hl, bc
- pop de
- pop bc
- ld a, [$d265]
- cp [hl]
- jr nz, .asm_3c9f5
- ld a, [hBattleTurn]
- and a
- ld a, [PlayerSubStatus5]
- jr z, .asm_3c9ee
- ld a, [EnemySubStatus5]
-
-.asm_3c9ee
- bit 3, a
- jr nz, .asm_3c9f5
- ld a, [de]
- add b
- ld [de], a
-
-.asm_3c9f5
- callab GetUserItem
- ld a, [hl]
- ld [$d265], a
- xor a
- ld [hl], a
- call Function3df12
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3ca12
- ld a, [IsInBattle]
- dec a
- jr z, .asm_3ca14
- call Function3df1f
-
-.asm_3ca12
- xor a
- ld [hl], a
-
-.asm_3ca14
- call GetItemName
- call Function3c8e4
- call Function3ddc8
- call Function3c8e4
- ld hl, $4899
- jp StdBattleTextBox
-; 3ca26
-
-Function3ca26: ; 3ca26
- ld a, [$ffcb]
- cp $1
- jr z, .asm_3ca38
- call SetPlayerTurn
- call .asm_3ca41
- call SetEnemyTurn
- jp .asm_3ca41
-
-.asm_3ca38
- call SetEnemyTurn
- call .asm_3ca41
- call SetPlayerTurn
-.asm_3ca41
- ld hl, $c71d
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3ca4c
- ld hl, $c71e
-
-.asm_3ca4c
- ld a, [hl]
- and a
- ret z
- dec a
- ld [hl], a
- cp $1
- ret nz
- ld hl, $48b6
- call StdBattleTextBox
- ld a, $10
- call _GetBattleVar
- push af
- ld a, $f8
- ld [hl], a
- callab UpdateMoveData
- xor a
- ld [AttackMissed], a
- ld [AlreadyDisobeyed], a
- ld a, $a
- ld [TypeModifier], a
- callab DoMove
- xor a
- ld [CurDamage], a
- ld [$d257], a
- ld a, $10
- call _GetBattleVar
- pop af
- ld [hl], a
- call UpdateBattleMonInParty
- jp UpdateEnemyMonInParty
-; 3ca8f
-
-Function3ca8f: ; 3ca8f
- ld a, [$ffcb]
- cp $1
- jr z, .asm_3ca9a
- call .asm_3ca9d
- jr .asm_3cac9
-
-.asm_3ca9a
- call .asm_3cac9
-.asm_3ca9d
- ld a, [BattleMonStatus]
- bit 5, a
- ret z
- ld a, [$c73f]
- and a
- ret nz
- call BattleRandom
- cp $19
- ret nc
- xor a
- ld [BattleMonStatus], a
- ld a, [CurBattleMon]
- ld hl, PartyMon1Status
- call GetPartyLocation
- ld [hl], $0
- call UpdateBattleHuds
- call SetEnemyTurn
- ld hl, $524b
- jp StdBattleTextBox
-
-.asm_3cac9
- ld a, [EnemyMonStatus]
- bit 5, a
- ret z
- ld a, [$c740]
- and a
- ret nz
- call BattleRandom
- cp $19
- ret nc
- xor a
- ld [EnemyMonStatus], a
- ld a, [IsInBattle]
- dec a
- jr z, .asm_3caef
- ld a, [CurOTMon]
- ld hl, OTPartyMon1Status
- call GetPartyLocation
- ld [hl], $0
-
-.asm_3caef
- call UpdateBattleHuds
- call SetPlayerTurn
- ld hl, $524b
- jp StdBattleTextBox
-; 3cafb
-
-Function3cafb: ; 3cafb
- ld a, [$ffcb]
- cp $1
- jr z, .asm_3cb06
- call .asm_3cb09
- jr .asm_3cb1c
-
-.asm_3cb06
- call .asm_3cb1c
-.asm_3cb09
- ld a, [PlayerScreens]
- bit 2, a
- ret z
- ld hl, $c701
- dec [hl]
- ret nz
- res 2, a
- ld [PlayerScreens], a
- xor a
- jr .asm_3cb2e
-
-.asm_3cb1c
- ld a, [EnemyScreens]
- bit 2, a
- ret z
- ld hl, $c705
- dec [hl]
- ret nz
- res 2, a
- ld [EnemyScreens], a
- ld a, $1
-
-.asm_3cb2e
- ld [hBattleTurn], a
- ld hl, $48d2
- jp StdBattleTextBox
-; 3cb36
-
-
-Function3cb36: ; 3cb36
- ld a, [$ffcb]
- cp 1
- jr z, .Both
- call .CheckPlayer
- jr .CheckEnemy
-
-.Both
- call .CheckEnemy
-
-.CheckPlayer
- call SetPlayerTurn
- ld de, .Your
- call .asm_3cb6f
- ld hl, PlayerScreens
- ld de, PlayerLightScreenCount
- jr .FadeScreens
-
-.CheckEnemy
- call SetEnemyTurn
- ld de, .Enemy
- call .asm_3cb6f
- ld hl, EnemyScreens
- ld de, EnemyLightScreenCount
-
-.FadeScreens
- bit SCREENS_LIGHT_SCREEN, [hl]
- call nz, FadeLightScreen
- bit SCREENS_REFLECT, [hl]
- call nz, FadeReflect
- ret
-
-.asm_3cb6f
- ld hl, StringBuffer1
- jp CopyName2
-; 3cb75
-
-.Your
- db "Your@"
-.Enemy
- db "Enemy@"
-; 3cb80
-
-
-FadeLightScreen: ; 3cb80
- ld a, [de]
- dec a
- ld [de], a
- ret nz
- res SCREENS_LIGHT_SCREEN, [hl]
- push hl
- push de
- ld hl, BattleText_0x808e7
- call StdBattleTextBox
- pop de
- pop hl
- ret
-; 3cb91
-
-FadeReflect: ; 3cb91
- inc de
- ld a, [de]
- dec a
- ld [de], a
- ret nz
- res SCREENS_REFLECT, [hl]
- ld hl, BattleText_0x80905
- jp StdBattleTextBox
-; 3cb9e
-
-HandleWeather: ; 3cb9e
-
- ld a, [Weather]
- cp 0
- ret z
-
- ld hl, WeatherCount
- dec [hl]
- jr z, .asm_3cc13
-
- ld hl, .WeatherMessages
- call .asm_3cc1e
- ld a, [Weather]
- cp WEATHER_SANDSTORM
- ret nz
- ld a, [$ffcb]
- cp 1
- jr z, .asm_3cbc7
-
-; Player first
- call SetPlayerTurn
- call .asm_3cbd0
- call SetEnemyTurn
- jr .asm_3cbd0
-
-.asm_3cbc7
-; Enemy first
- call SetEnemyTurn
- call .asm_3cbd0
- call SetPlayerTurn
-
-.asm_3cbd0
- ld a, BATTLE_VARS_SUBSTATUS3
- call GetBattleVar
- bit SUBSTATUS_UNDERGROUND, a
- ret nz
-
- ld hl, BattleMonType1
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3cbe3
- ld hl, EnemyMonType1
-
-.asm_3cbe3
- ld a, [hli]
- cp ROCK
- ret z
- cp GROUND
- ret z
- cp STEEL
- ret z
-
- ld a, [hl]
- cp ROCK
- ret z
- cp GROUND
- ret z
- cp STEEL
- ret z
-
- call Function3c8e4
- xor a
- ld [$cfca], a
- ld de, $010b
- call Function3ee17
- call Function3c8e4
- call GetEighthMaxHP
- call Function3cc3f
-
- ld hl, BattleText_0x8084d
- jp StdBattleTextBox
-
-.asm_3cc13
- ld hl, .WeatherEndedMessages
- call .asm_3cc1e
- xor a
- ld [Weather], a
- ret
-
-.asm_3cc1e
- ld a, [Weather]
- dec a
- ld c, a
- ld b, 0
- add hl, bc
- add hl, bc
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jp StdBattleTextBox
-; 3cc2d
-
-.WeatherMessages
- dw BattleText_0x8091f
- dw BattleText_0x80938
- dw BattleText_0x80951
-.WeatherEndedMessages
- dw BattleText_0x80967
- dw BattleText_0x8097a
- dw BattleText_0x8098f
-; 3cc39
-
-Function3cc39: ; 3cc39
- call Function3cc45
- jp Function3cd3c
-; 3cc3f
-
-Function3cc3f: ; 3cc3f
- call Function3cc45
- jp Function3cd36
-; 3cc45
-
-
-
-Function3cc45: ; 3cc45
- ld hl, BattleMonHP
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3cc50
- ld hl, EnemyMonHPHi
-
-.asm_3cc50
- inc 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
- ret nc
- ld a, [$d1ec]
- ld c, a
- ld a, [$d1ed]
- ld b, a
- xor a
- ld [hli], a
- ld [hl], a
- ld [$d1ee], a
- ld [$d1ef], a
- ret
-; 3cc76
-
-Function3cc76: ; 3cc76
- call GetQuarterMaxHP
- srl c
- srl c
- ld a, c
- and a
- jr nz, .asm_3cc82
- inc c
-
-.asm_3cc82
- ret
-; 3cc83
-
-
-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, Buffer1-2
-
-; player
- ld hl, BattleMonMaxHP
-
-; whose turn?
- ld a, [hBattleTurn]
- and a
- jr z, .gethp
-
-; enemy
- ld hl, EnemyMonMaxHP
-
-.gethp
- ld a, [hli]
- ld [Buffer2], a
- ld b, a
-
- ld a, [hl]
- ld [Buffer1], a
- ld c, a
- ret
-; 3ccc2
-
-Function3ccc2: ; 3ccc2
- ld hl, BattleMonHP
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3cccd
- ld hl, EnemyMonHP
-
-.asm_3cccd
- ld a, [hli]
- ld b, a
- ld a, [hli]
- ld c, a
- srl b
- rr c
- ld a, [hli]
- ld [Buffer2], a
- ld a, [hl]
- ld [Buffer1], a
- ret
-; 3ccde
-
-Function3ccde: ; 3ccde
- ld hl, BattleMonHP + 1
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3cce9
- ld hl, EnemyMonHP + 1
-
-.asm_3cce9
- ld a, c
- sub [hl]
- dec hl
- ld a, b
- sbc [hl]
- ret
-; 3ccef
-
-
-Function3ccef: ; 3ccef
- ld hl, EnemyMonMaxHP
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3ccfa
- ld hl, BattleMonMaxHP
-
-.asm_3ccfa
- ld a, [hli]
- ld [Buffer2], a
- ld a, [hld]
- ld [Buffer1], a
- dec hl
- ld a, [hl]
- ld [$d1ec], a
- add c
- ld [hld], a
- ld [$d1ee], a
- ld a, [hl]
- ld [$d1ed], a
- adc b
- ld [hli], a
- ld [$d1ef], a
- ld a, [Buffer1]
- ld c, a
- ld a, [hld]
- sub c
- ld a, [Buffer2]
- ld b, a
- ld a, [hl]
- sbc b
- jr c, .asm_3cd2d
- ld a, b
- ld [hli], a
- ld [$d1ef], a
- ld a, c
- ld [hl], a
- ld [$d1ee], a
-
-.asm_3cd2d
- call Function3c8e4
- call Function3cd36
- jp Function3c8e4
-; 3cd36
-
-Function3cd36: ; 3cd36
- call Function3cd3c
- jp UpdateBattleHuds
-; 3cd3c
-
-
-Function3cd3c: ; 3cd3c
- ld hl, $c55e
- ld a, [hBattleTurn]
- and a
- ld a, $1
- jr z, .asm_3cd4a
- ld hl, $c4ca
- xor a
-
-.asm_3cd4a
- push bc
- ld [$d10a], a
- ld a, $b
- call Predef
- pop bc
- ret
-; 3cd55
-
-Function3cd55: ; 3cd55
- call Function3cf14
- ld hl, BattleMonHP
- ld a, [hli]
- or [hl]
- call z, Function3cef1
- xor a
- ld [$c6f7], a
- call Function3ce01
- call Function3d873
- ld a, d
- and a
- jp z, LostBattle
- ld hl, BattleMonHP
- ld a, [hli]
- or [hl]
- call nz, Function3df48
- ld a, $1
- ld [hBGMapMode], a
- ld c, $3c
- call DelayFrames
- ld a, [IsInBattle]
- dec a
- jr nz, .asm_3cd8c
- ld a, $1
- ld [BattleEnded], a
- ret
-
-.asm_3cd8c
- call Function3cf35
- jp z, Function3cfa4
- ld hl, BattleMonHP
- ld a, [hli]
- or [hl]
- jr nz, .asm_3cdba
- call Function3d1f8
- jr nc, .asm_3cda4
- ld a, $1
- ld [BattleEnded], a
- ret
-
-.asm_3cda4
- call Function3d227
- call Function3d2e0
- jp c, Function3c0e5
- ld a, $1
- ld [$d0ec], a
- call Function3cf4a
- jp z, Function3c0e5
- jr asm_3cdca
-
-.asm_3cdba
- ld a, $1
- ld [$d0ec], a
- call Function3cf4a
- jp z, Function3c0e5
- xor a
- ld [$d0ec], a
- ret
-
-asm_3cdca
- ld a, [$ffcb]
- cp $1
- jr z, .asm_3cde6
- call ClearSprites
- ld hl, $c4a1
- ld bc, $040a
- call ClearBox
- call Function3d2b3
- ld a, $1
- call asm_3cf78
- jr .asm_3cdfc
-
-.asm_3cde6
- ld a, [CurPartyMon]
- push af
- ld a, $1
- call asm_3cf78
- call ClearSprites
- call Function309d
- pop af
- ld [CurPartyMon], a
- call Function3d2b3
-
-.asm_3cdfc
- xor a
- ld [$d0ec], a
- ret
-; 3ce01
-
-Function3ce01: ; 3ce01
- call UpdateBattleMonInParty
- ld a, [IsInBattle]
- dec a
- jr z, .asm_3ce16
- ld a, [CurOTMon]
- ld hl, OTPartyMon1CurHP
- call GetPartyLocation
- xor a
- ld [hli], a
- ld [hl], a
-
-.asm_3ce16
- ld hl, PlayerSubStatus3
- res 2, [hl]
- xor a
- ld hl, EnemyDamageTaken
- ld [hli], a
- ld [hl], a
- call Function3d834
- call Function3dc18
- ld a, [IsInBattle]
- dec a
- jr z, .asm_3ce2f
- jr .asm_3ce37
-
-.asm_3ce2f
- call Function3ceec
- ld a, $1
- ld [$c6fd], a
-
-.asm_3ce37
- ld hl, BattleMonHP
- ld a, [hli]
- or [hl]
- jr nz, .asm_3ce47
- ld a, [$c6f7]
- and a
- jr nz, .asm_3ce47
- call Function3d1aa
-
-.asm_3ce47
- call Function3d873
- ld a, d
- and a
- ret z
- ld a, [IsInBattle]
- dec a
- call z, Function3d0ea
- call EmptyBattleTextBox
- call Function309d
- ld a, [$d0ee]
- and $c0
- ld [$d0ee], a
- call Function3ceaa
- jr z, .asm_3ce72
- ld hl, EnemyMonBaseStats
- ld b, $7
-.asm_3ce6c
- srl [hl]
- inc hl
- dec b
- jr nz, .asm_3ce6c
-
-.asm_3ce72
- ld hl, EnemyMonBaseStats
- ld de, $c720
- ld bc, $0007
- call CopyBytes
- xor a
- ld [$c71f], a
- call Function3ee3b
- call Function3ceaa
- ret z
- ld a, [$c664]
- push af
- ld a, d
- ld [$c664], a
- ld hl, $c720
- ld de, EnemyMonBaseStats
- ld bc, $0007
- call CopyBytes
- ld a, $1
- ld [$c71f], a
- call Function3ee3b
- pop af
- ld [$c664], a
- ret
-; 3ceaa
-
-Function3ceaa: ; 3ceaa
- ld a, [PartyCount]
- ld b, a
- ld hl, PartyMon1Species
- ld c, $1
- ld d, $0
-.asm_3ceb5
- push hl
- push bc
- ld bc, $0022
- add hl, bc
- ld a, [hli]
- or [hl]
- pop bc
- pop hl
- jr z, .asm_3ced1
- push hl
- push bc
- ld bc, $0001
- add hl, bc
- pop bc
- ld a, [hl]
- pop hl
- cp $39
- jr nz, .asm_3ced1
- ld a, d
- or c
- ld d, a
-
-.asm_3ced1
- sla c
- push de
- ld de, $0030
- add hl, de
- pop de
- dec b
- jr nz, .asm_3ceb5
- ld a, d
- ld e, $0
- ld b, $6
-.asm_3cee1
- srl a
- jr nc, .asm_3cee6
- inc e
-
-.asm_3cee6
- dec b
- jr nz, .asm_3cee1
- ld a, e
- and a
- ret
-; 3ceec
-
-
-
-Function3ceec: ; 3ceec
- xor a
- ld [Danger], a
- ret
-; 3cef1
-
-Function3cef1: ; 3cef1
- call Function3ceec
- call WaitSFX
- ld a, $f0
- ld [CryTracks], a
- ld a, [BattleMonSpecies]
- call Function37b6
- call Function3d43b
- ld hl, $c535
- ld bc, $050b
- call ClearBox
- ld hl, BattleText_0x80a75
- jp StdBattleTextBox
-; 3cf14
-
-Function3cf14: ; 3cf14
- call WaitSFX
- ld de, SFX_KINESIS
- call PlaySFX
- call Function3d432
- ld de, SFX_UNKNOWN_2A
- call PlaySFX
- hlcoord 1, 0
- ld bc, $040a
- call ClearBox
- ld hl, BattleText_0x809a8
- jp StdBattleTextBox
-; 3cf35
-
-Function3cf35: ; 3cf35
- ld a, [OTPartyCount]
- ld b, a
- xor a
- ld hl, OTPartyMon1CurHP
- ld de, $0030
-.asm_3cf40
- or [hl]
- inc hl
- or [hl]
- dec hl
- add hl, de
- dec b
- jr nz, .asm_3cf40
- and a
- ret
-; 3cf4a
-
-Function3cf4a: ; 3cf4a
- ld hl, EnemyHPPal
- ld e, $30
- call Function3e12e
- call WaitBGMap
- callba Function2c012
- ld a, [InLinkBattle]
- and a
- jr z, .asm_3cf6d
- call Function3e8e4
- ld a, [$d430]
- cp $f
- ret z
- call Function30b4
-
-.asm_3cf6d
- ld hl, BattleMonHP
- ld a, [hli]
- or [hl]
- ld a, $0
- jr nz, asm_3cf78
- inc a
- ret
-
-asm_3cf78
- push af
- xor a
- ld [$c718], a
- call Function3d834
- call Function3d867
- call Function3dc18
- pop af
- and a
- jr nz, .asm_3cf8f
- call Function3d4e1
- jr .asm_3cf92
-
-.asm_3cf8f
- call asm_3d517
-
-.asm_3cf92
- call Function3d57a
- call SetEnemyTurn
- call Function3dc23
- xor a
- ld [EnemyMoveAnimation], a
- ld [$d0ec], a
- inc a
- ret
-; 3cfa4
-
-Function3cfa4: ; 3cfa4
- call Function3ceec
- ld a, $1
- ld [$c6fd], a
- ld [BattleEnded], a
- ld a, [InLinkBattle]
- and a
- ld a, b
- call z, Function3d0ea
- callab Function39939
- ld hl, BattleText_0x809da
- call StdBattleTextBox
- call Function3d2f1
- jr z, .asm_3cff5
- ld a, [InLinkBattle]
- and a
- ret nz
- ld a, [$cfc0]
- bit 0, a
- jr nz, .asm_3d006
- call Function3ebd8
- ld c, $28
- call DelayFrames
- ld a, [BattleType]
- cp $1
- jr nz, .asm_3cfe8
- ld a, $2
- call Predef
-
-.asm_3cfe8
- ld a, [$c2cc]
- bit 0, a
- jr nz, .asm_3cff2
- call Function3718
-
-.asm_3cff2
- jp Function3d02b
-
-.asm_3cff5
- call Function3ebd8
- ld c, $28
- call DelayFrames
- ld c, $4
- callba Function4ea0a
- ret
-
-.asm_3d006
- call Function3ebd8
- ld c, $28
- call DelayFrames
- call EmptyBattleTextBox
- ld c, $3
- callba Function11c000
- call Functiona80
- ld hl, $c6ec
- ld a, [hli]
- or [hl]
- inc hl
- or [hl]
- ret nz
- call ClearTileMap
- call WhiteBGMap
- ret
-; 3d02b
-
-Function3d02b: ; 3d02b
- ld a, [$c73d]
- and a
- call nz, Function3d099
- call Function3d0b1
- push af
- ld a, $0
- jr nc, .asm_3d044
- ld a, [$d854]
- and $7
- cp $3
- jr nz, .asm_3d044
- inc a
-
-.asm_3d044
- ld b, a
- ld c, $4
-.asm_3d047
- ld a, b
- and a
- jr z, .asm_3d052
- call Function3d081
- dec c
- dec b
- jr .asm_3d047
-
-.asm_3d052
- ld a, c
- and a
- jr z, .asm_3d05c
- call Function3d08d
- dec c
- jr .asm_3d052
-
-.asm_3d05c
- call Function3d099
- call Function3d099
- pop af
- jr nc, .asm_3d07b
- ld a, [$d854]
- and $7
- jr z, .asm_3d07b
- ld hl, SentToMomTexts
- dec a
- ld c, a
- ld b, 0
- add hl, bc
- add hl, bc
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jp StdBattleTextBox
-
-.asm_3d07b
- ld hl, BattleText_0x809be
- jp StdBattleTextBox
-; 3d081
-
-Function3d081: ; 3d081
- push bc
- ld hl, $c688
- ld de, $d853
- call Function3d0be
- pop bc
- ret
-; 3d08d
-
-Function3d08d: ; 3d08d
- push bc
- ld hl, $c688
- ld de, $d850
- call Function3d0be
- pop bc
- ret
-; 3d099
-
-Function3d099: ; 3d099
- ld hl, $c688
- sla [hl]
- dec hl
- rl [hl]
- dec hl
- rl [hl]
- ret nc
- ld a, $ff
- ld [hli], a
- ld [hli], a
- ld [hl], a
- ret
-; 3d0ab
-
-SentToMomTexts: ; 3d0ab
- dw BattleText_0x809fc
- dw BattleText_0x80a2a
- dw BattleText_0x80a3d
-; 3d0b1
-
-
-Function3d0b1: ; 3d0b1
- ld hl, $d853
- ld a, [hld]
- cp $3f
- ld a, [hld]
- sbc $42
- ld a, [hl]
- sbc $f
- ret
-; 3d0be
-
-Function3d0be: ; 3d0be
- ld c, $3
- and a
- push de
- push hl
- push bc
- ld b, h
- ld c, l
- callba Function106008
- pop bc
- pop hl
-.asm_3d0ce
- ld a, [de]
- adc [hl]
- ld [de], a
- dec de
- dec hl
- dec c
- jr nz, .asm_3d0ce
- pop hl
- ld a, [hld]
- cp $3f
- ld a, [hld]
- sbc $42
- ld a, [hl]
- sbc $f
- ret c
- ld [hl], $f
- inc hl
- ld [hl], $42
- inc hl
- ld [hl], $3f
- ret
-; 3d0ea
-
-Function3d0ea: ; 3d0ea
- push de
- ld de, MUSIC_NONE
- call PlayMusic
- call DelayFrame
- ld de, MUSIC_WILD_VICTORY
- ld a, [IsInBattle]
- dec a
- jr nz, .asm_3d113
- push de
- call Function3ceaa
- pop de
- jr nz, .asm_3d11e
- ld hl, $c6ec
- ld a, [hli]
- or [hl]
- jr nz, .asm_3d11e
- ld a, [$c664]
- and a
- jr z, .asm_3d121
- jr .asm_3d11e
-
-.asm_3d113
- ld de, MUSIC_GYM_VICTORY
- call IsJohtoGymLeader
- jr c, .asm_3d11e
- ld de, MUSIC_TRAINER_VICTORY
-
-.asm_3d11e
- call PlayMusic
-
-.asm_3d121
- pop de
- ret
-; 3d123
-
-
-
-; These functions check if the current opponent is a gym leader or one of a
-; few other special trainers.
-
-; Note: KantoGymLeaders is a subset of JohtoGymLeaders. If you wish to
-; differentiate between the two, call IsKantoGymLeader first.
-
-; The Lance and Red entries are unused for music checks; those trainers are
-; accounted for elsewhere.
-
-IsKantoGymLeader: ; 0x3d123
- ld hl, KantoGymLeaders
- jr IsGymLeaderCommon
-
-IsJohtoGymLeader: ; 0x3d128
- ld hl, JohtoGymLeaders
-IsGymLeaderCommon:
- push de
- ld a, [OtherTrainerClass]
- ld de, $0001
- call IsInArray
- pop de
- ret
-; 0x3d137
-
-JohtoGymLeaders:
- db FALKNER
- db WHITNEY
- db BUGSY
- db MORTY
- db PRYCE
- db JASMINE
- db CHUCK
- db CLAIR
- db WILL
- db BRUNO
- db KAREN
- db KOGA
-; fallthrough
-; these two entries are unused
- db CHAMPION
- db RED
-; fallthrough
-KantoGymLeaders:
- db BROCK
- db MISTY
- db LT_SURGE
- db ERIKA
- db JANINE
- db SABRINA
- db BLAINE
- db BLUE
- db $ff
-
-
-Function3d14e: ; 3d14e
- call Function3cef1
- ld hl, EnemyMonHPHi
- ld a, [hli]
- or [hl]
- call z, Function3cf14
- ld a, $1
- ld [$c6f7], a
- call Function3d1aa
- call Function3d873
- ld a, d
- and a
- jp z, LostBattle
- ld hl, EnemyMonHPHi
- ld a, [hli]
- or [hl]
- jr nz, .asm_3d185
- call Function3ce01
- ld a, [IsInBattle]
- dec a
- jr nz, .asm_3d17f
- ld a, $1
- ld [BattleEnded], a
- ret
-
-.asm_3d17f
- call Function3cf35
- jp z, Function3cfa4
-
-.asm_3d185
- call Function3d1f8
- jr nc, .asm_3d190
- ld a, $1
- ld [BattleEnded], a
- ret
-
-.asm_3d190
- call Function3d227
- call Function3d2e0
- jp c, Function3c0e5
- ld a, c
- and a
- ret nz
- ld a, $1
- ld [$d0ec], a
- call Function3cf4a
- jp z, Function3c0e5
- jp asm_3cdca
-; 3d1aa
-
-Function3d1aa: ; 3d1aa
- ld a, [CurBattleMon]
- ld c, a
- ld hl, $c664
- ld b, $0
- ld a, $3
- call Predef
- ld hl, EnemySubStatus3
- res 2, [hl]
- xor a
- ld [Danger], a
- ld hl, PlayerDamageTaken
- ld [hli], a
- ld [hl], a
- ld [BattleMonStatus], a
- call UpdateBattleMonInParty
- ld c, $6
- ld a, [BattleMonLevel]
- add $1e
- ld b, a
- ld a, [EnemyMonLevel]
- cp b
- jr c, .asm_3d1dc
- ld c, $8
-
-.asm_3d1dc
- ld a, [CurBattleMon]
- ld [CurPartyMon], a
- callab ChangeHappiness
- ld a, [$d0ee]
- and $c0
- add $1
- ld [$d0ee], a
- ld a, [$c6f7]
- and a
- ret z
- ret
-; 3d1f8
-
-Function3d1f8: ; 3d1f8
- call EmptyBattleTextBox
- call Function309d
- ld a, [IsInBattle]
- and a
- dec a
- ret nz
- ld hl, BattleText_0x80a83
- call StdBattleTextBox
-.asm_3d20a
- lb bc, 1, 7
- call PlaceYesNoBox
- ld a, [$cfa9]
- jr c, .asm_3d217
- and a
- ret
-
-.asm_3d217
- ld a, [$cfa9]
- cp $1
- jr z, .asm_3d20a
- ld hl, PartyMon1Spd
- ld de, EnemyMonSpd
- jp Function3d8b3
-; 3d227
-
-Function3d227: ; 3d227
- call EmptyBattleTextBox
- call Function1d6e
- call Function3d2f7
- call Function3d362
- ld a, [InLinkBattle]
- and a
- jr z, .asm_3d241
- ld a, $1
- ld [$d0ec], a
- call Function3e8e4
-
-.asm_3d241
- xor a
- ld [$d0ec], a
- call Function3d2e0
- jr c, .asm_3d251
- ld hl, EnemyMonHPHi
- ld a, [hli]
- or [hl]
- jr nz, .asm_3d26c
-
-.asm_3d251
- call ClearSprites
- call WhiteBGMap
- call Function3eda6
- call Function1c07
- call Function309d
- call WaitBGMap
- call ClearSGB
- call Function32f9
- xor a
- ld c, a
- ret
-
-.asm_3d26c
- call ClearSprites
- ld a, [CurBattleMon]
- ld [$c71a], a
- ld a, [CurPartyMon]
- ld [CurBattleMon], a
- call Function3d581
- call Function3da0d
- call Function3dab1
- call ClearPalettes
- call DelayFrame
- call Function3eda6
- call Function1c17
- call ClearSGB
- call Function32f9
- call Function3f26d
- call Function3dbde
- call Function3dc18
- call Function3db5f
- call EmptyBattleTextBox
- call Function309d
- call SetPlayerTurn
- call Function3dc23
- ld a, $1
- and a
- ld c, a
- ret
-; 3d2b3
-
-Function3d2b3: ; 3d2b3
- ld a, [CurBattleMon]
- ld [$c71a], a
- ld a, [CurPartyMon]
- ld [CurBattleMon], a
- call Function3d581
- call Function3da0d
- call Function3dab1
- call Function3f26d
- call Function3dbde
- call Function3dc18
- call Function3db5f
- call EmptyBattleTextBox
- call Function309d
- call SetPlayerTurn
- jp Function3dc23
-; 3d2e0
-
-
-
-Function3d2e0: ; 3d2e0
- ld a, [InLinkBattle]
- cp $4
- jr nz, .asm_3d2ef
- ld a, [$cd2b]
- and a
- jr z, .asm_3d2ef
- scf
- ret
-
-.asm_3d2ef
- xor a
- ret
-; 3d2f1
-
-Function3d2f1: ; 3d2f1
- ld a, [InLinkBattle]
- cp $4
- ret
-; 3d2f7
-
-Function3d2f7: ; 3d2f7
- call WhiteBGMap
-Function3d2fa: ; 3d2fa
- callba Function5004f
- callba Function50405
- callba Function8e85
- callba Function503e0
- ret
-; 3d313
-
-Function3d313: ; 3d313
- callba WritePartyMenuTilemap
- callba PrintPartyMenuText
- call WaitBGMap
- call Function32f9
- call DelayFrame
- ret
-; 3d329
-
-Function3d329: ; 3d329
- call Function3d2f1
- jr z, .asm_3d335
- callba PartyMenuSelect
- ret
-
-.asm_3d335
- callba Function100cb5
- ret
-; 3d33c
-
-Function3d33c: ; 3d33c
-.asm_3d33c
- ld a, $2
- ld [PartyMenuActionText], a
- call Function3d313
- call Function3d329
- ret c
- call Function3d887
- jr z, .asm_3d33c
- xor a
- ret
-; 3d34f
-
-Function3d34f: ; 3d34f
- ld hl, CurBattleMon
- ld a, [CurPartyMon]
- cp [hl]
- jr nz, .asm_3d360
- ld hl, BattleText_0x80c0d
- call StdBattleTextBox
- scf
- ret
-
-.asm_3d360
- xor a
- ret
-; 3d362
-
-Function3d362: ; 3d362
-.asm_3d362
- call Function3d33c
- ret nc
- call Function3d2e0
- ret c
- ld de, SFX_WRONG
- call PlaySFX
- call WaitSFX
- jr .asm_3d362
-; 3d375
-
-
-
-Function3d375: ; 3d375
-.asm_3d375
- call Function3d33c
- ret c
- call Function3d34f
- jr c, .asm_3d375
- xor a
- ret
-; 3d380
-
-Function3d380: ; 3d380
-.asm_3d380
- call Function3d362
- call Function3d2e0
- ret c
- call Function3d34f
- jr c, .asm_3d380
- xor a
- ret
-; 3d38e
-
-
-LostBattle: ; 3d38e
- ld a, 1
- ld [BattleEnded], a
-
- ld a, [$cfc0]
- bit 0, a
- jr nz, .asm_3d3bd
-
- ld a, [BattleType]
- cp BATTLETYPE_CANLOSE
- jr nz, .asm_3d3e3
-
-; Remove the enemy from the screen.
- hlcoord 0, 0
- ld bc, $0815
- call ClearBox
- call Function3ebd8
-
- ld c, 40
- call DelayFrames
-
- ld a, [$c2cc]
- bit 0, a
- jr nz, .asm_3d3bc
- call Function3718
-.asm_3d3bc
- ret
-
-.asm_3d3bd
-; Remove the enemy from the screen.
- hlcoord 0, 0
- ld bc, $0815
- call ClearBox
- call Function3ebd8
-
- ld c, 40
- call DelayFrames
-
- call EmptyBattleTextBox
- ld c, 2
- callba Function11c000
- call Functiona80
- call ClearTileMap
- call WhiteBGMap
- ret
-
-.asm_3d3e3
- ld a, [InLinkBattle]
- and a
- jr nz, .LostLinkBattle
-
-; Greyscale
- ld b, 0
- call GetSGBLayout
- call Function32f9
- jr .end
-
-.LostLinkBattle
- call UpdateEnemyMonInParty
- call Function3cf35
- jr nz, .asm_3d40a
- ld hl, TiedAgainstText
- ld a, [$d0ee]
- and $c0
- add 2
- ld [$d0ee], a
- jr .asm_3d412
-
-.asm_3d40a
- ld hl, LostAgainstText
- call Function3d2f1
- jr z, .asm_3d417
-
-.asm_3d412
- call StdBattleTextBox
-
-.end
- scf
- ret
-
-.asm_3d417
-; Remove the enemy from the screen.
- hlcoord 0, 0
- ld bc, $0815
- call ClearBox
- call Function3ebd8
-
- ld c, 40
- call DelayFrames
-
- ld c, $3
- callba Function4ea0a
- scf
- ret
-; 3d432
-
-
-Function3d432: ; 3d432
- ld hl, $c510
- ld de, $c524
- jp Function3d444
-; 3d43b
-
-Function3d43b: ; 3d43b
- ld hl, $c569
- ld de, $c57d
- jp Function3d444
-; 3d444
-
-Function3d444: ; 3d444
- ld a, [$cfbe]
- push af
- set 6, a
- ld [$cfbe], a
- ld b, $7
-.asm_3d44f
- push bc
- push de
- push hl
- ld b, $6
-.asm_3d454
- push bc
- push hl
- push de
- ld bc, $0007
- call CopyBytes
- pop de
- pop hl
- ld bc, -20
- add hl, bc
- push hl
- ld h, d
- ld l, e
- add hl, bc
- ld d, h
- ld e, l
- pop hl
- pop bc
- dec b
- jr nz, .asm_3d454
- ld bc, 20
- add hl, bc
- ld de, .Spaces
- call PlaceString
- ld c, 2
- call DelayFrames
- pop hl
- pop de
- pop bc
- dec b
- jr nz, .asm_3d44f
- pop af
- ld [$cfbe], a
- ret
-; 3d488
-
-.Spaces
- db " @"
-; 3d490
-
-
-Function3d490: ; 3d490
- ld [hConnectionStripLength], a
- ld c, a
-.asm_3d493
- push bc
- push hl
- ld b, $7
-.asm_3d497
- push hl
- call Function3d4ae
- pop hl
- ld de, 20
- add hl, de
- dec b
- jr nz, .asm_3d497
- ld c, 2
- call DelayFrames
- pop hl
- pop bc
- dec c
- jr nz, .asm_3d493
- ret
-; 3d4ae
-
-Function3d4ae: ; 3d4ae
- ld a, [hConnectionStripLength]
- ld c, a
- cp $8
- jr nz, .asm_3d4bc
-.asm_3d4b5
- ld a, [hli]
- ld [hld], a
- dec hl
- dec c
- jr nz, .asm_3d4b5
- ret
-
-.asm_3d4bc
- ld a, [hld]
- ld [hli], a
- inc hl
- dec c
- jr nz, .asm_3d4bc
- ret
-; 3d4c3
-
-
-Function3d4c3: ; 3d4c3
- call Function3d557
- ld a, [$c718]
- dec a
- ld b, a
- call Function3d6ca
- call Function3d7a0
- call Function3d834
- call Function3d867
- call Function3d7c7
- call Function3dc18
- call Function3d57a
- ret
-; 3d4e1
-
-
-Function3d4e1: ; 3d4e1
- call Function3d714
- jr nc, asm_3d517
- call Function3d557
- call Function3d533
- jr c, .asm_3d4f1
- call Function3d599
-
-.asm_3d4f1
- call Function3d6ca
- call Function3d74b
- push af
- call Function3d7a0
- call Function3d7b8
- call Function3d7c7
- pop af
- ret c
- xor a
- ld [$c664], a
- ld [$c6fc], a
- ld [$d0ec], a
- inc a
- ld [$c711], a
- call Function309d
- jp Function3e3ad
-
-asm_3d517
- call Function3d557
- call Function3d533
- jr c, .asm_3d522
- call Function3d599
-
-.asm_3d522
- call Function3d6ca
- ld a, $1
- ld [$c711], a
- call Function3d7a0
- call Function3d7b8
- jp Function3d7c7
-; 3d533
-
-Function3d533: ; 3d533
- ld a, [InLinkBattle]
- and a
- jr z, .asm_3d541
- ld a, [$d430]
- sub $4
- ld b, a
- jr .asm_3d555
-
-.asm_3d541
- ld a, [$c718]
- and a
- jr z, .asm_3d54b
- dec a
- ld b, a
- jr .asm_3d555
-
-.asm_3d54b
- ld a, [$d264]
- and a
- ld b, $0
- jr nz, .asm_3d555
- and a
- ret
-
-.asm_3d555
- scf
- ret
-; 3d557
-
-Function3d557: ; 3d557
- xor a
- ld [LastEnemyCounterMove], a
- ld [LastPlayerCounterMove], a
- ld [LastEnemyMove], a
- ld [CurEnemyMove], a
- dec a
- ld [$c6e6], a
- xor a
- ld [$c730], a
- ld hl, $c4b2
- ld a, $8
- call Function3d490
- call EmptyBattleTextBox
- jp Function1d6e
-; 3d57a
-
-Function3d57a: ; 3d57a
- xor a
- ld [$c664], a
- ld [$c6fc], a
-Function3d581: ; 3d581
- ld a, [CurBattleMon]
- ld c, a
- ld hl, $c664
- ld b, $1
- push bc
- ld a, $3
- call Predef
- pop bc
- ld hl, $c6fc
- ld a, $3
- jp Predef
-; 3d599
-
-Function3d599: ; 3d599
- ld b, $ff
- ld a, $1
- ld [Buffer1], a
- ld [Buffer2], a
-.asm_3d5a3
- ld hl, Buffer1
- sla [hl]
- inc hl
- sla [hl]
- inc b
- ld a, [OTPartyCount]
- cp b
- jp z, Function3d672
- ld a, [CurOTMon]
- cp b
- jr z, .asm_3d5d0
- ld hl, OTPartyMon1CurHP
- push bc
- ld a, b
- call GetPartyLocation
- ld a, [hli]
- ld c, a
- ld a, [hl]
- or c
- pop bc
- jr z, .asm_3d5d0
- call Function3d5d7
- call Function3d618
- jr .asm_3d5a3
-
-.asm_3d5d0
- ld hl, Buffer2
- set 0, [hl]
- jr .asm_3d5a3
-; 3d5d7
-
-Function3d5d7: ; 3d5d7
- push bc
- ld hl, OTPartyMon1Move1
- ld a, b
- call GetPartyLocation
- pop bc
- ld e, $5
-.asm_3d5e2
- dec e
- jr z, .asm_3d617
- ld a, [hli]
- and a
- jr z, .asm_3d617
- push hl
- push de
- push bc
- dec a
- ld hl, $5afb
- ld bc, $0007
- call AddNTimes
- ld de, EnemyMoveAnimation
- ld a, $10
- call FarCopyBytes
- call SetEnemyTurn
- callab Function0x347c8
- pop bc
- pop de
- pop hl
- ld a, [$d265]
- cp $b
- jr c, .asm_3d5e2
- ld hl, Buffer1
- set 0, [hl]
- ret
-
-.asm_3d617
- ret
-; 3d618
-
-Function3d618: ; 3d618
- push bc
- ld hl, OTPartyCount
- ld a, b
- inc a
- ld c, a
- ld b, $0
- add hl, bc
- ld a, [hl]
- dec a
- ld hl, $542b
- ld bc, $0020
- call AddNTimes
- ld de, EnemyMonType1
- ld bc, $0002
- ld a, $14
- call FarCopyBytes
- ld a, [BattleMonType1]
- ld [PlayerMoveType], a
- call SetPlayerTurn
- callab Function0x347c8
- ld a, [$d265]
- cp $b
- jr nc, .asm_3d663
- ld a, [BattleMonType2]
- ld [PlayerMoveType], a
- callab Function0x347c8
- ld a, [$d265]
- cp $b
- jr nc, .asm_3d663
- pop bc
- ret
-
-.asm_3d663
- pop bc
- ld hl, Buffer1
- bit 0, [hl]
- jr nz, .asm_3d66f
- inc hl
- set 0, [hl]
- ret
-
-.asm_3d66f
- res 0, [hl]
- ret
-; 3d672
-
-Function3d672: ; 3d672
-.asm_3d672
- ld hl, Buffer1
- sla [hl]
- inc hl
- sla [hl]
- jr nc, .asm_3d672
- ld a, [OTPartyCount]
- ld b, a
- ld c, [hl]
-.asm_3d681
- sla c
- jr nc, .asm_3d68a
- dec b
- jr z, .asm_3d6a7
- jr .asm_3d681
-
-.asm_3d68a
- ld a, [Buffer1]
- and a
- jr z, .asm_3d69a
- ld b, $ff
- ld c, a
-.asm_3d693
- inc b
- sla c
- jr nc, .asm_3d693
- jr .asm_3d6c9
-
-.asm_3d69a
- ld b, $ff
- ld a, [Buffer2]
- ld c, a
-.asm_3d6a0
- inc b
- sla c
- jr c, .asm_3d6a0
- jr .asm_3d6c9
-
-.asm_3d6a7
- ld a, [OTPartyCount]
- ld b, a
- call BattleRandom
- and $7
- cp b
- jr nc, .asm_3d6a7
- ld b, a
- ld a, [CurOTMon]
- cp b
- jr z, .asm_3d6a7
- ld hl, OTPartyMon1CurHP
- push bc
- ld a, b
- call GetPartyLocation
- pop bc
- ld a, [hli]
- ld c, a
- ld a, [hl]
- or c
- jr z, .asm_3d6a7
-
-.asm_3d6c9
- ret
-; 3d6ca
-
-Function3d6ca: ; 3d6ca
- ld a, b
- ld [CurPartyMon], a
- ld hl, OTPartyMon1Level
- call GetPartyLocation
- ld a, [hl]
- ld [CurPartyLevel], a
- ld a, [CurPartyMon]
- inc a
- ld hl, OTPartyCount
- ld c, a
- ld b, $0
- add hl, bc
- ld a, [hl]
- ld [TempEnemyMonSpecies], a
- ld [CurPartySpecies], a
- call LoadEnemyMon
- ld a, [CurPartySpecies]
- cp $c9
- jr nz, .asm_3d708
- ld a, [$def4]
- and a
- jr nz, .asm_3d708
- ld hl, EnemyMonAtkDefDV
- ld a, $2d
- call Predef
- ld a, [UnownLetter]
- ld [$def4], a
-
-.asm_3d708
- ld hl, EnemyMonHPHi
- ld a, [hli]
- ld [$c6ea], a
- ld a, [hl]
- ld [$c6eb], a
- ret
-; 3d714
-
-Function3d714: ; 3d714
- ld a, [$d264]
- dec a
- jp z, .asm_3d749
- ld a, [PartyCount]
- dec a
- jp z, .asm_3d749
- ld a, [InLinkBattle]
- and a
- jp nz, .asm_3d749
- ld a, [Options]
- bit 6, a
- jr nz, .asm_3d749
- ld a, [CurPartyMon]
- push af
- ld a, [CurBattleMon]
- ld [CurPartyMon], a
- callba Functione538
- pop bc
- ld a, b
- ld [CurPartyMon], a
- jr c, .asm_3d749
- scf
- ret
-
-.asm_3d749
- and a
- ret
-; 3d74b
-
-Function3d74b: ; 3d74b
- ld a, [CurPartyMon]
- push af
- callab Function39939
- ld hl, BattleText_0x80aca
- call StdBattleTextBox
- lb bc, 1, 7
- call PlaceYesNoBox
- ld a, [$cfa9]
- dec a
- jr nz, .asm_3d79a
- call Function3d2f7
- call Function3d375
- jr c, .asm_3d791
- ld a, [CurBattleMon]
- ld [$c71a], a
- ld a, [CurPartyMon]
- ld [CurBattleMon], a
- call ClearPalettes
- call DelayFrame
- call Function3eda6
- pop af
- ld [CurPartyMon], a
- xor a
- ld [CurEnemyMove], a
- ld [CurPlayerMove], a
- and a
- ret
-
-.asm_3d791
- call ClearPalettes
- call DelayFrame
- call Function3eda6
-
-.asm_3d79a
- pop af
- ld [CurPartyMon], a
- scf
- ret
-; 3d7a0
-
-Function3d7a0: ; 3d7a0
- xor a
- ld [hBGMapMode], a
- call Function1c07
- call ClearSprites
- ld hl, $c4a1
- ld bc, $040a
- call ClearBox
- call WaitBGMap
- jp Function3ee27
-; 3d7b8
-
-Function3d7b8: ; 3d7b8
- callab Function39939
- ld hl, BattleText_0x80af8
- call StdBattleTextBox
- jp WaitBGMap
-; 3d7c7
-
-Function3d7c7: ; 3d7c7
- ld a, [TempEnemyMonSpecies]
- ld [CurPartySpecies], a
- ld [CurSpecies], a
- call GetBaseData
- ld a, $1
- ld [MonType], a
- ld a, $1f
- call Predef
- call Function3f47c
- xor a
- ld [$cfca], a
- ld [$c689], a
- call SetEnemyTurn
- ld de, $0101
- call Function3ee17
- call Function3da79
- jr nc, .asm_3d800
- ld a, $1
- ld [$c689], a
- ld de, $0101
- call Function3ee17
-
-.asm_3d800
- ld bc, TempMonSpecies
- callba Function4e53f
- jr c, .asm_3d82c
- callba CheckBattleScene
- jr c, .asm_3d821
- ld hl, $c4ac
- ld d, $0
- ld e, $0
- ld a, $47
- call Predef
- jr .asm_3d82c
-
-.asm_3d821
- ld a, $f
- ld [CryTracks], a
- ld a, [TempEnemyMonSpecies]
- call Function37b6
-
-.asm_3d82c
- call Function3e036
- ld a, $1
- ld [hBGMapMode], a
- ret
-; 3d834
-
-Function3d834: ; 3d834
- xor a
- ld [LastEnemyCounterMove], a
- ld [LastPlayerCounterMove], a
- ld [LastEnemyMove], a
- ld hl, EnemySubStatus1
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hl], a
- ld [EnemyDisableCount], a
- ld [EnemyFuryCutterCount], a
- ld [$c681], a
- ld [$c72c], a
- ld [EnemyDisabledMove], a
- ld [$c6fa], a
- ld [$c730], a
- ld [$c731], a
- ld [EnemyTurnsTaken], a
- ld hl, PlayerSubStatus5
- res 7, [hl]
- ret
-; 3d867
-
-Function3d867: ; 3d867
- ld a, $7
- ld b, $8
- ld hl, EnemyAtkLevel
-.asm_3d86e
- ld [hli], a
- dec b
- jr nz, .asm_3d86e
- ret
-; 3d873
-
-Function3d873: ; 3d873
- ld a, [PartyCount]
- ld e, a
- xor a
- ld hl, PartyMon1CurHP
- ld bc, $002f
-.asm_3d87e
- or [hl]
- inc hl
- or [hl]
- add hl, bc
- dec e
- jr nz, .asm_3d87e
- ld d, a
- ret
-; 3d887
-
-
-Function3d887: ; 3d887
- ld a, [CurPartyMon]
- ld hl, PartyMon1CurHP
- call GetPartyLocation
- ld a, [hli]
- or [hl]
- ret nz
- ld a, [$d264]
- and a
- jr nz, .asm_3d8b1
- ld hl, PartySpecies
- ld a, [CurPartyMon]
- ld c, a
- ld b, 0
- add hl, bc
- ld a, [hl]
- cp EGG
- ld hl, BattleText_0x80b26
- jr z, .asm_3d8ae
- ld hl, BattleText_0x80b0b
-
-.asm_3d8ae
- call StdBattleTextBox
-
-.asm_3d8b1
- xor a
- ret
-; 3d8b3
-
-
-Function3d8b3: ; 3d8b3
- ld a, [BattleType]
- cp $2
- jp z, .asm_3d9a2
- cp $6
- jp z, .asm_3d9a2
- cp $9
- jp z, .asm_3d98d
- cp $b
- jp z, .asm_3d98d
- cp $7
- jp z, .asm_3d98d
- cp $c
- jp z, .asm_3d98d
-
- ld a, [InLinkBattle]
- and a
- jp nz, .asm_3d9a2
-
- ld a, [IsInBattle]
- dec a
- jp nz, .asm_3d992
-
- ld a, [EnemySubStatus5]
- bit 7, a
- jp nz, .asm_3d98d
-
- ld a, [$c730]
- and a
- jp nz, .asm_3d98d
-
- push hl
- push de
- ld a, [BattleMonItem]
- ld [$d265], a
- ld b, a
- callab GetItem
- ld a, b
- cp $48
- pop de
- pop hl
- jr nz, .asm_3d916
-
- call SetPlayerTurn
- call GetItemName
- ld hl, BattleText_0x80b89
- call StdBattleTextBox
- jp .asm_3d9a2
-
-.asm_3d916
- ld a, [$d267]
- inc a
- ld [$d267], a
- ld a, [hli]
- ld [$ffb5], a
- ld a, [hl]
- ld [$ffb6], a
- ld a, [de]
- inc de
- ld [$ffb1], a
- ld a, [de]
- ld [$ffb2], a
- call Function30b4
- ld de, $ffb5
- ld hl, $ffb1
- ld c, $2
- call StringCmp
- jr nc, .asm_3d9a2
- xor a
- ld [hMultiplicand], a
- ld a, $20
- ld [hMultiplier], a
- call Multiply
- ld a, [$ffb5]
- ld [hProduct], a
- ld a, [$ffb6]
- ld [hMultiplicand], a
- ld a, [$ffb1]
- ld b, a
- ld a, [$ffb2]
- srl b
- rr a
- srl b
- rr a
- and a
- jr z, .asm_3d9a2
- ld [hMultiplier], a
- ld b, $2
- call Divide
- ld a, [$ffb5]
- and a
- jr nz, .asm_3d9a2
- ld a, [$d267]
- ld c, a
-.asm_3d96c
- dec c
- jr z, .asm_3d97a
- ld b, $1e
- ld a, [$ffb6]
- add b
- ld [$ffb6], a
- jr c, .asm_3d9a2
- jr .asm_3d96c
-
-.asm_3d97a
- call BattleRandom
- ld b, a
- ld a, [$ffb6]
- cp b
- jr nc, .asm_3d9a2
- ld a, $1
- ld [$d0ec], a
- ld hl, BattleText_0x80b3b
- jr .asm_3d995
-
-.asm_3d98d
- ld hl, BattleText_0x80ba0
- jr .asm_3d995
-
-.asm_3d992
- ld hl, BattleText_0x80b49
-
-.asm_3d995
- call StdBattleTextBox
- ld a, $1
- ld [$d266], a
- call Function309d
- and a
- ret
-
-.asm_3d9a2
- ld a, [InLinkBattle]
- and a
- ld a, $2
- jr z, .asm_3d9cf
- call Function309d
- xor a
- ld [$d0ec], a
- ld a, $f
- ld [CurMoveNum], a
- xor a
- ld [CurPlayerMove], a
- call Function3e8e4
- call Function30b4
- call Function3d2e0
- jr c, .asm_3d9f5
-
-; Got away safely
- ld a, [$d430]
- cp $f
- ld a, $2
- jr z, .asm_3d9cf
- dec a
-.asm_3d9cf
- ld b, a
- ld a, [$d0ee]
- and $c0
- add b
- ld [$d0ee], a
- call Function3ceec
- push de
- ld de, SFX_RUN
- call WaitPlaySFX
- pop de
- call WaitSFX
- ld hl, BattleText_0x80b77
- call StdBattleTextBox
- call WaitSFX
- call Function309d
- scf
- ret
-
-.asm_3d9f5
- call Function3ceec
- ld hl, $cd2a
- bit 4, [hl]
- jr nz, .asm_3da05
- ld hl, BattleText_0x81863
- call StdBattleTextBox
-
-.asm_3da05
- call WaitSFX
- call Function309d
- scf
- ret
-; 3da0d
-
-
-Function3da0d: ; 3da0d
- ld a, $0
- call GetPartyParamLocation
- ld de, BattleMonSpecies
- ld bc, $0006
- call CopyBytes
- ld bc, $000f
- add hl, bc
- ld de, BattleMonAtkDefDV
- ld bc, $0007
- call CopyBytes
- inc hl
- inc hl
- inc hl
- ld de, BattleMonLevel
- ld bc, $0011
- call CopyBytes
- ld a, [BattleMonSpecies]
- ld [TempBattleMonSpecies], a
- ld [CurPartySpecies], a
- ld [CurSpecies], a
- call GetBaseData
- ld a, [BaseType1]
- ld [BattleMonType1], a
- ld a, [BaseType2]
- ld [BattleMonType2], a
- ld hl, PartyMon1Nickname
- ld a, [CurBattleMon]
- call SkipNames
- ld de, BattleMonNick
- ld bc, $000b
- call CopyBytes
- ld hl, BattleMonAtk
- ld de, PlayerStats
- ld bc, $000a
- call CopyBytes
- call Function3ec2c
- call BadgeStatBoosts
- ret
-; 3da74
-
-Function3da74: ; 3da74
- call Function3da85
- jr asm_3da7c
-
-Function3da79: ; 3da79
- call Function3da97
-
-asm_3da7c
- ld b, h
- ld c, l
- callab CheckShininess
- ret
-; 3da85
-
-Function3da85: ; 3da85
- ld hl, BattleMonAtkDefDV
- ld a, [PlayerSubStatus5]
- bit 3, a
- ret z
- ld hl, PartyMon1DVs
- ld a, [CurBattleMon]
- jp GetPartyLocation
-; 3da97
-
-Function3da97: ; 3da97
- ld hl, EnemyMonAtkDefDV
- ld a, [EnemySubStatus5]
- bit 3, a
- ret z
- ld hl, $c6f2
- ld a, [IsInBattle]
- dec a
- ret z
- ld hl, OTPartyMon1AtkDefDV
- ld a, [CurOTMon]
- jp GetPartyLocation
-; 3dab1
-
-Function3dab1: ; 3dab1
- ld a, $7
- ld b, $8
- ld hl, PlayerAtkLevel
-.asm_3dab8
- ld [hli], a
- dec b
- jr nz, .asm_3dab8
- ret
-; 3dabd
-
-
-Function3dabd: ; 3dabd
- ld a, [CurPartyMon]
- ld hl, OTPartyMon1Species
- call GetPartyLocation
- ld de, EnemyMonSpecies
- ld bc, $0006
- call CopyBytes
- ld bc, $000f
- add hl, bc
- ld de, EnemyMonAtkDefDV
- ld bc, $0007
- call CopyBytes
- inc hl
- inc hl
- inc hl
- ld de, EnemyMonLevel
- ld bc, $0011
- call CopyBytes
- ld a, [EnemyMonSpecies]
- ld [CurSpecies], a
- call GetBaseData
- ld hl, OTPartyMon1Nickname
- ld a, [CurPartyMon]
- call SkipNames
- ld de, EnemyMonNick
- ld bc, $000b
- call CopyBytes
- ld hl, EnemyMonAtk
- ld de, EnemyStats
- ld bc, $000a
- call CopyBytes
- call Function3ec30
- ld hl, BaseType1
- ld de, EnemyMonType1
- ld a, [hli]
- ld [de], a
- inc de
- ld a, [hl]
- ld [de], a
- ld hl, BaseHP
- ld de, EnemyMonBaseStats
- ld b, $5
-.asm_3db25
- ld a, [hli]
- ld [de], a
- inc de
- dec b
- jr nz, .asm_3db25
- ld a, [CurPartyMon]
- ld [CurOTMon], a
- ret
-; 3db32
-
-
-Function3db32: ; 3db32
- call ClearSprites
- ld a, [CurBattleMon]
- ld [$c71a], a
- ld a, [CurPartyMon]
- ld [CurBattleMon], a
- call Function3d581
- call Function3da0d
- call Function3dab1
- call Function3dbde
- call Function3dc18
- call Function3db5f
- call EmptyBattleTextBox
- call Function309d
- ld hl, EnemyMonHPHi
- ld a, [hli]
- or [hl]
- ret
-; 3db5f
-
-
-Function3db5f: ; 3db5f
- ld hl, BattleMonAtkDefDV
- ld a, $2d
- call Predef
- ld hl, $c505
- ld b, $7
- ld c, $8
- call ClearBox
- call WaitBGMap
- xor a
- ld [hBGMapMode], a
- call Function3f43d
- xor a
- ld [$ffad], a
- ld [$d0d2], a
- ld [CurMoveNum], a
- ld [TypeModifier], a
- ld [PlayerMoveAnimation], a
- ld [LastEnemyCounterMove], a
- ld [LastPlayerCounterMove], a
- ld [LastPlayerMove], a
- call Function3e4a8
- call Function3ee27
- xor a
- ld [$c731], a
- call SetPlayerTurn
- xor a
- ld [$cfca], a
- ld [$c689], a
- ld de, $0101
- call Function3ee17
- call Function3da74
- jr nc, .asm_3dbbc
- ld a, $1
- ld [$c689], a
- ld de, $0101
- call Function3ee17
-
-.asm_3dbbc
- ld a, $0
- call GetPartyParamLocation
- ld b, h
- ld c, l
- callba Function4e53f
- jr c, .asm_3dbd6
- ld a, $f0
- ld [CryTracks], a
- ld a, [CurPartySpecies]
- call Function37b6
-
-.asm_3dbd6
- call Function3df48
- ld a, $1
- ld [hBGMapMode], a
- ret
-; 3dbde
-
-Function3dbde: ; 3dbde
- xor a
- ld [LastEnemyCounterMove], a
- ld [LastPlayerCounterMove], a
- ld [LastPlayerMove], a
- ld hl, PlayerSubStatus1
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hl], a
- ld hl, PlayerUsedMoves
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hl], a
- ld [PlayerDisableCount], a
- ld [PlayerFuryCutterCount], a
- ld [$c679], a
- ld [$c72b], a
- ld [DisabledMove], a
- ld [$c6fe], a
- ld [$c731], a
- ld [$c730], a
- ld [PlayerTurnsTaken], a
- ld hl, EnemySubStatus5
- res 7, [hl]
- ret
-; 3dc18
-
-Function3dc18: ; 3dc18
- ld hl, PlayerSubStatus1
- res 7, [hl]
- ld hl, EnemySubStatus1
- res 7, [hl]
- ret
-; 3dc23
-
-Function3dc23: ; 3dc23
- ld hl, PlayerScreens
- ld de, BattleMonType1
- ld bc, Function3df48
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3dc3a
- ld hl, EnemyScreens
- ld de, EnemyMonType1
- ld bc, Function3e036
-
-.asm_3dc3a
- bit 0, [hl]
- ret z
- ld a, [de]
- cp $2
- ret z
- inc de
- ld a, [de]
- cp $2
- ret z
- push bc
- ld hl, BattleText_0x80bae
- call StdBattleTextBox
- call GetEighthMaxHP
- call Function3cc39
- pop hl
- call Function3dc5a
- jp WaitBGMap
-; 3dc5a
-
-Function3dc5a: ; 3dc5a
- jp [hl]
-; 3dc5b
-
-Function3dc5b: ; 3dc5b
- ld a, $10
- call GetBattleVar
- ld b, a
- call Function3c5ec
- ld a, b
- cp $80
- jr nz, .asm_3dce4
- ld a, [CurBattleMon]
- push af
- ld hl, DoPlayerTurn
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3dc7e
- ld hl, DoEnemyTurn
- ld a, [$c71a]
- ld [CurBattleMon], a
-
-.asm_3dc7e
- ld a, BANK(DoPlayerTurn)
- rst FarCall
- ld a, $10
- call _GetBattleVar
- ld a, $ff
- ld [hl], a
- pop af
- ld [CurBattleMon], a
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3dcc0
- ld a, [$c71a]
- call Function399f
- ld hl, BattleMonHP
- ld a, [hli]
- or [hl]
- jr nz, .asm_3dce4
- ld a, $f0
- ld [CryTracks], a
- ld a, [BattleMonSpecies]
- call Function37b6
- ld a, [$c71a]
- ld c, a
- ld hl, $c664
- ld b, $0
- ld a, $3
- call Predef
- call Function3d43b
- ld hl, BattleText_0x80a75
- jr .asm_3dcdf
-
-.asm_3dcc0
- ld hl, EnemyMonHPHi
- ld a, [hli]
- or [hl]
- jr nz, .asm_3dce4
- ld de, SFX_KINESIS
- call PlaySFX
- call WaitSFX
- ld de, SFX_UNKNOWN_2A
- call PlaySFX
- call WaitSFX
- call Function3d432
- ld hl, BattleText_0x809a8
-
-.asm_3dcdf
- call StdBattleTextBox
- scf
- ret
-
-.asm_3dce4
- and a
- ret
-; 3dce6
-
-Function3dce6: ; 3dce6
- ld a, [hBattleTurn]
- push af
- xor a
- ld [hBattleTurn], a
- ld [$cfca], a
- ld de, $0102
- call Function3ee17
- pop af
- ld [hBattleTurn], a
- ret
-; 3dcf9
-
-Function3dcf9: ; 3dcf9
- ld a, [$ffcb]
- cp $1
- jr z, .asm_3dd17
- call SetPlayerTurn
- call Function3dd2f
- call Function3dde9
- call Function3de51
- call SetEnemyTurn
- call Function3dd2f
- call Function3dde9
- jp Function3de51
-
-.asm_3dd17
- call SetEnemyTurn
- call Function3dd2f
- call Function3dde9
- call Function3de51
- call SetPlayerTurn
- call Function3dd2f
- call Function3dde9
- jp Function3de51
-; 3dd2f
-
-Function3dd2f: ; 3dd2f
- callab GetOpponentItem
- ld a, b
- cp $1
- ret nz
- ld de, EnemyMonHPLo
- ld hl, EnemyMonMaxHPHi
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3dd4a
- ld de, $c63d
- ld hl, BattleMonMaxHP
-
-.asm_3dd4a
- push bc
- ld a, [de]
- ld [$d1ec], a
- add a
- ld c, a
- dec de
- ld a, [de]
- inc de
- ld [$d1ed], a
- adc a
- ld b, a
- ld a, b
- cp [hl]
- ld a, c
- pop bc
- jr z, .asm_3dd62
- jr c, .asm_3dd66
- ret
-
-.asm_3dd62
- inc hl
- cp [hl]
- dec hl
- ret nc
-
-.asm_3dd66
- call Function3ddc8
- ld a, [hli]
- ld [Buffer2], a
- ld a, [hl]
- ld [Buffer1], a
- ld a, [de]
- add c
- ld [$d1ee], a
- ld c, a
- dec de
- ld a, [de]
- adc $0
- ld [$d1ef], a
- ld b, a
- ld a, [hld]
- cp c
- ld a, [hl]
- sbc b
- jr nc, .asm_3dd8d
- ld a, [hli]
- ld [$d1ef], a
- ld a, [hl]
- ld [$d1ee], a
-
-.asm_3dd8d
- ld a, [$d1ef]
- ld [de], a
- inc de
- ld a, [$d1ee]
- ld [de], a
- ld a, [hBattleTurn]
- ld [$d10a], a
- and a
- ld hl, $c4ca
- jr z, .asm_3dda4
- ld hl, $c55e
-
-.asm_3dda4
- ld [$d10a], a
- ld a, $b
- call Predef
-Function3ddac:
- call RefreshBattleHuds
- callab GetOpponentItem
- ld a, [hl]
- ld [$d265], a
- call GetItemName
- callab Function27192
- ld hl, RecoveredUsingText
- jp StdBattleTextBox
-; 3ddc8
-
-
-Function3ddc8: ; 3ddc8
- push hl
- push de
- push bc
- call EmptyBattleTextBox
- ld a, $69
- ld [FXAnimIDLo], a
- call Function3c8e4
- xor a
- ld [$cfca], a
- ld [FXAnimIDHi], a
- ld a, $37
- call Predef
- call Function3c8e4
- pop bc
- pop de
- pop hl
- ret
-; 3dde9
-
-Function3dde9: ; 3dde9
- callab GetOpponentItem
- ld hl, .Statuses
-.asm_3ddf2
- ld a, [hli]
- cp $ff
- ret z
- inc hl
- cp b
- jr nz, .asm_3ddf2
- dec hl
- ld b, [hl]
- ld a, $b
- call _GetBattleVar
- and b
- ret z
- xor a
- ld [hl], a
- push bc
- call UpdateOpponentInParty
- pop bc
- ld a, $9
- call _GetBattleVar
- and [hl]
- res 0, [hl]
- ld a, $5
- call _GetBattleVar
- and [hl]
- res 0, [hl]
- ld a, b
- cp $7f
- jr nz, .asm_3de26
- ld a, $7
- call _GetBattleVar
- res 7, [hl]
-
-.asm_3de26
- ld hl, Function0x365fd
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3de31
- ld hl, Function0x365d7
-
-.asm_3de31
- call Function3c8e4
- ld a, BANK(Function0x365fd)
- rst FarCall
- call Function3c8e4
- call Function3ddc8
- call Function3ddac
- ld a, $1
- and a
- ret
-; 3de44
-
-.Statuses ; 3de44
- db HELD_HEAL_POISON, 1 << PSN
- db HELD_HEAL_FREEZE, 1 << FRZ
- db HELD_HEAL_BURN, 1 << BRN
- db HELD_HEAL_SLEEP, SLP
- db HELD_HEAL_PARALYZE, 1 << PAR
- db HELD_HEAL_STATUS, 1 << PSN | 1 << FRZ | 1 << BRN | SLP | 1 << PAR
- db $ff
-; 3de51
-
-
-Function3de51: ; 3de51
- ld a, $7
- call GetBattleVar
- bit 7, a
- ret z
- callab GetOpponentItem
- ld a, b
- cp $10
- jr z, .asm_3de67
- cp $f
- ret nz
-
-.asm_3de67
- ld a, [hl]
- ld [$d265], a
- ld a, $7
- call _GetBattleVar
- res 7, [hl]
- call GetItemName
- call Function3ddc8
- ld hl, BattleText_0x80dab
- call StdBattleTextBox
- ld a, [hBattleTurn]
- and a
- jr nz, .asm_3de90
- call Function3df1f
- xor a
- ld [bc], a
- ld a, [IsInBattle]
- dec a
- ret z
- ld [hl], $0
- ret
-
-.asm_3de90
- call Function3df12
- xor a
- ld [bc], a
- ld [hl], a
- ret
-; 3de97
-
-Function3de97: ; 3de97
- ld a, [$ffcb]
- cp $1
- jr z, .asm_3dea3
- call Function3dea9
- jp Function3deb1
-
-.asm_3dea3
- call Function3deb1
- jp Function3dea9
-; 3dea9
-
-Function3dea9: ; 3dea9
- call Function3df12
- ld a, $0
- jp Function3deb6
-; 3deb1
-
-Function3deb1: ; 3deb1
- call Function3df1f
- ld a, $1
-Function3deb6: ; 3deb6
- ld [hBattleTurn], a
- ld d, h
- ld e, l
- push de
- push bc
- ld a, [bc]
- ld b, a
- callab GetItem
- ld hl, .data_3defc
-.asm_3dec7
- ld a, [hli]
- cp $ff
- jr z, .asm_3def9
- inc hl
- inc hl
- cp b
- jr nz, .asm_3dec7
- pop bc
- ld a, [bc]
- ld [$d265], a
- push bc
- dec hl
- dec hl
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld a, BANK(BattleCommand70)
- rst FarCall
- pop bc
- pop de
- ld a, [FailedMessage]
- and a
- ret nz
- xor a
- ld [bc], a
- ld [de], a
- call GetItemName
- ld hl, BattleText_0x80bde
- call StdBattleTextBox
- callab BattleCommand8c
- ret
-
-.asm_3def9
- pop bc
- pop de
- ret
-; 3defc
-
-.data_3defc
- dbw $1f, BattleCommand70
- dbw $20, BattleCommand71
- dbw $21, BattleCommand72
- dbw $22, BattleCommand73
- dbw $23, BattleCommand74
- dbw $24, BattleCommand75
- dbw $25, BattleCommand76
- db $ff
-; 3df12
-
-
-Function3df12: ; 3df12
- ld hl, PartyMon1Item
- ld a, [CurBattleMon]
- call GetPartyLocation
- ld bc, BattleMonItem
- ret
-; 3df1f
-
-Function3df1f: ; 3df1f
- ld hl, OTPartyMon1Item
- ld a, [CurOTMon]
- call GetPartyLocation
- ld bc, EnemyMonItem
- ret
-; 3df2c
-
-Function3df2c: ; 3df2c
- push hl
- push de
- push bc
- call DrawPlayerHUD
- ld hl, PlayerHPPal
- call SetHPPal
- call CheckDanger
- call Function3e043
- ld hl, EnemyHPPal
- call SetHPPal
- pop bc
- pop de
- pop hl
- ret
-; 3df48
-
-
-
-Function3df48: ; 3df48
- push hl
- push de
- push bc
- call DrawPlayerHUD
- call UpdatePlayerHPPal
- call CheckDanger
- pop bc
- pop de
- pop hl
- ret
-; 3df58
-
-DrawPlayerHUD: ; 3df58
- xor a
- ld [hBGMapMode], a
-
-; Clear the area
- hlcoord 9, 7
- ld bc, $050b
- call ClearBox
-
- callba DrawPlayerExpBar
-
- hlcoord 18, 9
- ld [hl], $73 ; vertical bar
- call PrintPlayerHUD
-
-; HP bar
- hlcoord 10, 9
- ld b, OTPARTYMON
- xor a
- ld [MonType], a
- ld a, PREDEF_DRAW_PLAYER_HP
- call Predef
-
-; Exp bar
- push de
- ld a, [CurBattleMon]
- ld hl, PartyMon1Exp + 2
- call GetPartyLocation
- ld d, h
- ld e, l
-
- hlcoord 10, 11
- ld a, [TempMonLevel]
- ld b, a
- call FillInExpBar
- pop de
- ret
-; 3df98
-
-UpdatePlayerHPPal: ; 3df98
- ld hl, PlayerHPPal
- jp Function3e12e
-; 3df9e
-
-CheckDanger: ; 3df9e
- ld hl, BattleMonHP
- ld a, [hli]
- or [hl]
- jr z, .asm_3dfb2
- ld a, [$c6fd]
- and a
- jr nz, .asm_3dfbe
- ld a, [PlayerHPPal]
- cp $2
- jr z, .asm_3dfb9
-
-.asm_3dfb2
- ld hl, Danger
- res 7, [hl]
- jr .asm_3dfbe
-
-.asm_3dfb9
- ld hl, Danger
- set 7, [hl]
-
-.asm_3dfbe
- ret
-; 3dfbf
-
-PrintPlayerHUD: ; 3dfbf
- ld de, BattleMonNick
- hlcoord 10, 7
- call Function3e138
- call PlaceString
-
- push bc
-
- ld a, [CurBattleMon]
- ld hl, PartyMon1DVs
- call GetPartyLocation
- ld de, TempMonDVs
- ld a, [hli]
- ld [de], a
- inc de
- ld a, [hl]
- ld [de], a
- ld hl, BattleMonLevel
- ld de, TempMonLevel
- ld bc, $0011
- call CopyBytes
- ld a, [CurBattleMon]
- ld hl, PartyMon1Species
- call GetPartyLocation
- ld a, [hl]
- ld [CurPartySpecies], a
- ld [CurSpecies], a
- call GetBaseData
-
- pop hl
- dec hl
-
- ld a, $3
- ld [MonType], a
- callab GetGender
- ld a, $7f
- jr c, .asm_3e013
- ld a, $ef
- jr nz, .asm_3e013
- ld a, $f5
-
-.asm_3e013
- ld hl, $c551
- ld [hl], a
- ld hl, $c54e
- push af
- push hl
- ld de, BattleMonStatus
- ld a, $21
- call Predef
- pop hl
- pop bc
- ret nz
- ld a, b
- cp $7f
- jr nz, .asm_3e02d
- dec hl
-
-.asm_3e02d
- ld a, [BattleMonLevel]
- ld [TempMonLevel], a
- jp PrintLevel
-; 3e036
-
-Function3e036: ; 3e036
- push hl
- push de
- push bc
- call Function3e043
- call Function3e127
- pop bc
- pop de
- pop hl
- ret
-; 3e043
-
-Function3e043: ; 3e043
- xor a
- ld [hBGMapMode], a
- ld hl, $c4a1
- ld bc, $040b
- call ClearBox
- callba Function2c0c5
- ld a, [TempEnemyMonSpecies]
- ld [CurSpecies], a
- ld [CurPartySpecies], a
- call GetBaseData
- ld de, EnemyMonNick
- ld hl, $c4a1
- call Function3e138
- call PlaceString
- ld h, b
- ld l, c
- dec hl
- ld hl, EnemyMonAtkDefDV
- ld de, TempMonDVs
- ld a, [EnemySubStatus5]
- bit 3, a
- jr z, .asm_3e080
- ld hl, $c6f2
-
-.asm_3e080
- ld a, [hli]
- ld [de], a
- inc de
- ld a, [hl]
- ld [de], a
- ld a, $3
- ld [MonType], a
- callab GetGender
- ld a, $7f
- jr c, .asm_3e09a
- ld a, $ef
- jr nz, .asm_3e09a
- ld a, $f5
-
-.asm_3e09a
- ld hl, $c4bd
- ld [hl], a
- ld hl, $c4ba
- push af
- push hl
- ld de, EnemyMonStatus
- ld a, $21
- call Predef
- pop hl
- pop bc
- jr nz, .asm_3e0be
- ld a, b
- cp $7f
- jr nz, .asm_3e0b5
- dec hl
-
-.asm_3e0b5
- ld a, [EnemyMonLevel]
- ld [TempMonLevel], a
- call PrintLevel
-
-.asm_3e0be
- ld hl, EnemyMonHPHi
- ld a, [hli]
- ld [$ffb5], a
- ld a, [hld]
- ld [$ffb6], a
- or [hl]
- jr nz, .asm_3e0d1
- ld c, a
- ld e, a
- ld d, $6
- jp .asm_3e11a
-
-.asm_3e0d1
- xor a
- ld [hMultiplicand], a
- ld a, $30
- ld [hMultiplier], a
- call Multiply
- ld hl, EnemyMonMaxHPHi
- ld a, [hli]
- ld b, a
- ld a, [hl]
- ld [hMultiplier], a
- ld a, b
- and a
- jr z, .asm_3e105
- ld a, [hMultiplier]
- srl b
- rr a
- srl b
- rr a
- ld [hMultiplier], 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_3e105
- ld a, [$ffb5]
- ld [hProduct], a
- ld a, [$ffb6]
- ld [hMultiplicand], a
- ld a, $2
- ld b, a
- call Divide
- ld a, [$ffb6]
- ld e, a
- ld a, $6
- ld d, a
- ld c, a
-.asm_3e11a
- xor a
- ld [$d10a], a
- ld hl, $c4ca
- ld b, $0
- call DrawHPBar
- ret
-; 3e127
-
-Function3e127: ; 3e127
- ld hl, EnemyHPPal
- call Function3e12e
- ret
-; 3e12e
-
-Function3e12e: ; 3e12e
- ld b, [hl]
- call SetHPPal
- ld a, [hl]
- cp b
- ret z
- jp Function3ee27
-; 3e138
-
-Function3e138: ; 3e138
- ret
-; 3e139
-
-Function3e139: ; 3e139
- xor a
- ld [hBGMapMode], a
- call Function30bf
- ld a, [BattleType]
- cp $2
- jr z, .asm_3e156
- cp $3
- jr z, .asm_3e156
- call EmptyBattleTextBox
- call UpdateBattleHuds
- call EmptyBattleTextBox
- call Function309d
-
-.asm_3e156
- ld a, [BattleType]
- cp $6
- jr nz, .asm_3e165
- callba Function24f13
- jr .asm_3e175
-
-.asm_3e165
- ld a, [InputType]
- or a
- jr z, .asm_3e171
- callba Function1de294
-.asm_3e171
- call Function3e19b
- ret c
-
-.asm_3e175
- ld a, $1
- ld [hBGMapMode], a
- ld a, [$d0d2]
- cp $1
- jp z, Function3e192
- cp $3
- jp z, Function3e1c7
- cp $2
- jp z, Function3e28d
- cp $4
- jp z, Function3e489
- jr .asm_3e156
-; 3e192
-
-Function3e192: ; 3e192
- xor a
- ld [$d267], a
- call Function30b4
- and a
- ret
-; 3e19b
-
-Function3e19b: ; 3e19b
- call Function3d2f1
- jr z, .asm_3e1a8
- callba Function24ef2
- and a
- ret
-
-.asm_3e1a8
- callba Function100b12
- ld a, [$cd2b]
- and a
- ret z
- ld hl, $cd2a
- bit 4, [hl]
- jr nz, .asm_3e1c5
- ld hl, $5863
- call StdBattleTextBox
- ld c, $3c
- call DelayFrames
-
-.asm_3e1c5
- scf
- ret
-; 3e1c7
-
-Function3e1c7: ; 3e1c7
- ld a, [InLinkBattle]
- and a
- jp nz, Function3e22b
- ld a, [$cfc0]
- and a
- jp nz, Function3e22b
- call Function1d6e
- ld a, [BattleType]
- cp $3
- jr z, .asm_3e1f1
- cp $6
- jr z, .asm_3e201
- callba Function10493
- ld a, [$d0ec]
- and a
- jr z, .asm_3e20d
- jr .asm_3e209
-
-.asm_3e1f1
- callba Function107bb
- ld a, $5
- ld [CurItem], a
- call DoItemEffect
- jr .asm_3e209
-
-.asm_3e201
- ld a, $b1
- ld [CurItem], a
- call DoItemEffect
-
-.asm_3e209
- call Function3e234
- ret
-
-.asm_3e20d
- call ClearPalettes
- call DelayFrame
- call Function3ed9f
- call Function3f43d
- call Function3f47c
- call Function1c07
- call WaitBGMap
- call Function3ee27
- call Function309d
- jp Function3e139
-; 3e22b
-
-Function3e22b: ; 3e22b
- ld hl, BattleText_0x80bf3
- call StdBattleTextBox
- jp Function3e139
-; 3e234
-
-Function3e234: ; 3e234
- ld a, [$c64e]
- and a
- jr nz, .asm_3e279
- callab CheckItemPocket
- ld a, [$d142]
- cp $3
- jr z, .asm_3e24a
- call WhiteBGMap
-
-.asm_3e24a
- xor a
- ld [hBGMapMode], a
- call Function3ed9f
- call ClearSprites
- ld a, [BattleType]
- cp $3
- jr z, .asm_3e25d
- call Function3f43d
-
-.asm_3e25d
- call Function3f47c
- ld a, $1
- ld [$cfa9], a
- call Function1c07
- call Function3df2c
- call WaitBGMap
- call Function309d
- call Function1fbf
- call Function3ee27
- and a
- ret
-
-.asm_3e279
- xor a
- ld [$c64e], a
- ld a, [$d0ee]
- and $c0
- ld [$d0ee], a
- call Function1fbf
- call Function32f9
- scf
- ret
-; 3e28d
-
-Function3e28d: ; 3e28d
- call Function1d6e
-Function3e290:
- call Function1c07
- call Function1d6e
- call WhiteBGMap
-Function3e299:
- call Function3d2fa
- xor a
- ld [PartyMenuActionText], a
- call Function3d313
- call Function3d329
- jr c, .asm_3e2da
-.asm_3e2a8
- callba Function8ea4a
- call Function3e2f5
- jr c, .asm_3e2c8
- call Function1bee
- ld a, [$cfa9]
- cp $1
- jp z, Function3e358
- cp $2
- jr z, .asm_3e2cf
- cp $3
- jr z, .asm_3e2da
- jr .asm_3e2a8
-
-.asm_3e2c8
- call Function3d2e0
- jr c, .asm_3e2da
- jr Function3e299
-
-.asm_3e2cf
- call Function3e308
- call Function3d2e0
- jr c, .asm_3e2da
- jp Function3e290
-
-.asm_3e2da
- call ClearSprites
- call ClearPalettes
- call DelayFrame
- call Function3eda6
- call Function1c17
- call Function309d
- call ClearSGB
- call Function32f9
- jp Function3e139
-; 3e2f5
-
-Function3e2f5: ; 3e2f5
- call Function3d2f1
- jr z, .asm_3e301
- callba Function24e99
- ret
-
-.asm_3e301
- callba Function100d22
- ret
-; 3e308
-
-Function3e308: ; 3e308
- call DisableLCD
- ld hl, $9310
- ld de, VTiles0
- ld bc, $0110
- call CopyBytes
- ld hl, VTiles2
- ld de, $8110
- ld bc, $0310
- call CopyBytes
- call EnableLCD
- call ClearSprites
- call LowVolume
- xor a
- ld [MonType], a
- callba Function4dc7b
- call MaxVolume
- call DisableLCD
- ld hl, VTiles0
- ld de, $9310
- ld bc, $0110
- call CopyBytes
- ld hl, $8110
- ld de, VTiles2
- ld bc, $0310
- call CopyBytes
- call EnableLCD
- ret
-; 3e358
-
-
-Function3e358: ; 3e358
- ld a, [CurBattleMon]
- ld d, a
- ld a, [CurPartyMon]
- cp d
- jr nz, .asm_3e36b
- ld hl, BattleText_0x80c0d
- call StdBattleTextBox
- jp Function3e299
-
-.asm_3e36b
- ld a, [$c730]
- and a
- jr nz, .asm_3e378
- ld a, [EnemySubStatus5]
- bit 7, a
- jr z, .asm_3e381
-
-.asm_3e378
- ld hl, BattleText_0x80c22
- call StdBattleTextBox
- jp Function3e299
-
-.asm_3e381
- call Function3d887
- jp z, Function3e299
- ld a, [CurBattleMon]
- ld [$c71a], a
- ld a, $2
- ld [$d0ec], a
- call ClearPalettes
- call DelayFrame
- call ClearSprites
- call Function3eda6
- call Function1c17
- call ClearSGB
- call Function32f9
- ld a, [CurPartyMon]
- ld [CurBattleMon], a
- ; fallthrough
-; 3e3ad
-
-Function3e3ad: ; 3e3ad
- ld a, $1
- ld [$c710], a
- ld a, [InLinkBattle]
- and a
- jr z, .asm_3e3c1
- call Function1d6e
- call Function3e8e4
- call Function1c17
-
-.asm_3e3c1
- call Function3e7c1
- ld a, [InLinkBattle]
- and a
- jr nz, .asm_3e3cf
-
-.asm_3e3ca
- call Function3e40b
- and a
- ret
-
-.asm_3e3cf
- ld a, [$d430]
- cp $e
- jp z, .asm_3e3ca
- cp $d
- jp z, .asm_3e3ca
- cp $4
- jp c, .asm_3e3ca
- cp $f
- jr nz, .asm_3e3e9
- call Function3c0e5
- ret
-
-.asm_3e3e9
- ld a, [$ffcb]
- cp $1
- jr z, .asm_3e3f7
- call Function3e40b
- call Function3e3ff
- and a
- ret
-
-.asm_3e3f7
- call Function3e3ff
- call Function3e40b
- and a
- ret
-; 3e3ff
-
-Function3e3ff: ; 3e3ff
- callab Function3846c
- call SetEnemyTurn
- jp Function3dc23
-; 3e40b
-
-Function3e40b: ; 3e40b
- call Function3f2f4
- ld c, $32
- call DelayFrames
- ld hl, PlayerSubStatus4
- res 6, [hl]
- call SetEnemyTurn
- call Function3dc5b
- jr c, .asm_3e423
- call Function3dce6
-
-.asm_3e423
- ld hl, $c535
- ld bc, $050b
- call ClearBox
- ld a, [CurBattleMon]
- ld [CurPartyMon], a
- call Function3d581
- call Function3da0d
- call Function3dab1
- call Function3f26d
- call Function3dbde
- call Function3dc18
- call Function3db5f
- call EmptyBattleTextBox
- call Function309d
- call SetPlayerTurn
- call Function3dc23
- ld a, $2
- ld [$cfa9], a
- ret
-; 3e459
-
-Function3e459: ; 3e459
- ld c, $32
- call DelayFrames
- ld hl, $c535
- ld bc, $050b
- call ClearBox
- ld a, [CurPartyMon]
- ld [CurBattleMon], a
- call Function3d581
- call Function3da0d
- xor a
- ld [$d265], a
- call Function3ecab
- call Function3db5f
- call EmptyBattleTextBox
- call Function309d
- call SetPlayerTurn
- jp Function3dc23
-; 3e489
-
-
-
-Function3e489: ; 3e489
- call Function30b4
- ld a, $3
- ld [$cfa9], a
- ld hl, BattleMonSpd
- ld de, EnemyMonSpd
- call Function3d8b3
- ld a, $0
- ld [$d266], a
- ret c
- ld a, [$d0ec]
- and a
- ret nz
- jp Function3e139
-; 3e4a8
-
-
-
-Function3e4a8: ; 3e4a8
- ld a, [BattleMonItem]
- ld b, a
- callab GetItem
- ld a, b
- cp $4c
- ret nz
- ld a, $1
- ld [$c73d], a
- ret
-; 3e4bc
-
-Function3e4bc: ; 3e4bc
- call Function3d2f1
- jr nz, .asm_3e4c8
- callba Function100b9f
- ret
-
-.asm_3e4c8
- ld hl, EnemyMonMove1
- ld a, [$d235]
- dec a
- jr z, .asm_3e4e2
- dec a
- jr z, .asm_3e4dd
- call Function3e786
- ret z
- ld hl, BattleMonMove1
- jr .asm_3e4e2
-
-.asm_3e4dd
- ld a, $2
- call GetPartyParamLocation
-
-.asm_3e4e2
- ld de, $d25e
- ld bc, $0004
- call CopyBytes
- xor a
- ld [hBGMapMode], a
- ld hl, $c594
- ld b, $4
- ld c, $e
- ld a, [$d235]
- cp $2
- jr nz, .asm_3e503
- ld hl, $c544
- ld b, $4
- ld c, $e
-
-.asm_3e503
- call TextBox
- ld hl, $c5aa
- ld a, [$d235]
- cp $2
- jr nz, .asm_3e513
- ld hl, $c55a
-
-.asm_3e513
- ld a, $14
- ld [Buffer1], a
- ld a, $20
- call Predef
- ld b, $5
- ld a, [$d235]
- cp $2
- ld a, $d
- jr nz, .asm_3e52c
- ld b, $5
- ld a, $9
-
-.asm_3e52c
- ld [$cfa1], a
- ld a, b
- ld [$cfa2], a
- ld a, [$d235]
- cp $1
- jr z, .asm_3e53e
- ld a, [CurMoveNum]
- inc a
-
-.asm_3e53e
- ld [$cfa9], a
- ld a, $1
- ld [$cfaa], a
- ld a, [$d0eb]
- inc a
- ld [$cfa3], a
- ld a, $1
- ld [$cfa4], a
- ld c, $2c
- ld a, [$d235]
- dec a
- ld b, $c1
- jr z, .asm_3e569
- dec a
- ld b, $c3
- jr z, .asm_3e569
- ld a, [InLinkBattle]
- and a
- jr nz, .asm_3e569
- ld b, $c7
-
-.asm_3e569
- ld a, b
- ld [$cfa8], a
- ld a, c
- ld [$cfa5], a
- xor a
- ld [$cfa6], a
- ld a, $10
- ld [$cfa7], a
-.asm_3e57a
- ld a, [$d235]
- and a
- jr z, .asm_3e58e
- dec a
- jr nz, .asm_3e5a3
- ld hl, $c5c3
- ld de, .string_3e61c
- call PlaceString
- jr .asm_3e5a3
-
-.asm_3e58e
- call MoveInfoBox
- ld a, [$d0e3]
- and a
- jr z, .asm_3e5a3
- ld hl, $c5a9
- ld bc, $0014
- dec a
- call AddNTimes
- ld [hl], $ec
-
-.asm_3e5a3
- ld a, $1
- ld [hBGMapMode], a
- call Function1bd3
- bit 6, a
- jp nz, .asm_3e61d
- bit 7, a
- jp nz, .asm_3e62e
- bit 2, a
- jp nz, Function3e643
- bit 1, a
- push af
- xor a
- ld [$d0e3], a
- ld a, [$cfa9]
- dec a
- ld [$cfa9], a
- ld b, a
- ld a, [$d235]
- dec a
- jr nz, .asm_3e5d0
- pop af
- ret
-
-.asm_3e5d0
- dec a
- ld a, b
- ld [CurMoveNum], a
- jr nz, .asm_3e5d9
- pop af
- ret
-
-.asm_3e5d9
- pop af
- ret nz
- ld hl, BattleMonPPMove1
- ld a, [$cfa9]
- ld c, a
- ld b, $0
- add hl, bc
- ld a, [hl]
- and $3f
- jr z, .asm_3e610
- ld a, [PlayerDisableCount]
- swap a
- and $f
- dec a
- cp c
- jr z, .asm_3e60b
- ld a, [$c6e1]
- and a
- jr nz, .asm_3e606
- ld a, [$cfa9]
- ld hl, BattleMonMove1
- ld c, a
- ld b, $0
- add hl, bc
- ld a, [hl]
-
-.asm_3e606
- ld [CurPlayerMove], a
- xor a
- ret
-
-.asm_3e60b
- ld hl, BattleText_0x80c5b
- jr .asm_3e613
-
-.asm_3e610
- ld hl, Function3cc39
-
-.asm_3e613
- call StdBattleTextBox
- call Function30b4
- jp Function3e4bc
-; 3e61c
-
-.string_3e61c ; 3e61c
- db "@"
-; 3e61d
-
-.asm_3e61d
- ld a, [$cfa9]
- and a
- jp nz, .asm_3e57a
- ld a, [$d0eb]
- inc a
- ld [$cfa9], a
- jp .asm_3e57a
-; 3e62e
-
-.asm_3e62e: ; 3e62e
- ld a, [$cfa9]
- ld b, a
- ld a, [$d0eb]
- inc a
- inc a
- cp b
- jp nz, .asm_3e57a
- ld a, $1
- ld [$cfa9], a
- jp .asm_3e57a
-; 3e643
-
-Function3e643: ; 3e643
- ld a, [$d0e3]
- and a
- jr z, .asm_3e6bf
- ld hl, BattleMonMoves
- call .asm_3e6a5
- ld hl, BattleMonPP
- call .asm_3e6a5
- ld hl, PlayerDisableCount
- ld a, [hl]
- swap a
- and $f
- ld b, a
- ld a, [$cfa9]
- cp b
- jr nz, .asm_3e671
- ld a, [hl]
- and $f
- ld b, a
- ld a, [$d0e3]
- swap a
- add b
- ld [hl], a
- jr .asm_3e682
-
-.asm_3e671
- ld a, [$d0e3]
- cp b
- jr nz, .asm_3e682
- ld a, [hl]
- and $f
- ld b, a
- ld a, [$cfa9]
- swap a
- add b
- ld [hl], a
-
-.asm_3e682
- ld a, [PlayerSubStatus5]
- bit 3, a
- jr nz, .asm_3e69e
- ld hl, PartyMon1Moves
- ld a, [CurBattleMon]
- call GetPartyLocation
- push hl
- call .asm_3e6a5
- pop hl
- ld bc, $0015
- add hl, bc
- call .asm_3e6a5
-
-.asm_3e69e
- xor a
- ld [$d0e3], a
- jp Function3e4bc
-
-.asm_3e6a5
- push hl
- ld a, [$d0e3]
- dec a
- ld c, a
- ld b, 0
- add hl, bc
- ld d, h
- ld e, l
- pop hl
- ld a, [$cfa9]
- dec a
- ld c, a
- ld b, 0
- add hl, bc
- ld a, [de]
- ld b, [hl]
- ld [hl], a
- ld a, b
- ld [de], a
- ret
-
-.asm_3e6bf
- ld a, [$cfa9]
- ld [$d0e3], a
- jp Function3e4bc
-; 3e6c8
-
-MoveInfoBox: ; 3e6c8
- xor a
- ld [hBGMapMode], a
-
- hlcoord 0, 8
- ld b, 3
- ld c, 9
- call TextBox
- call MobileTextBorder
-
- ld a, [PlayerDisableCount]
- and a
- jr z, .asm_3e6f4
-
- swap a
- and $f
- ld b, a
- ld a, [$cfa9]
- cp b
- jr nz, .asm_3e6f4
-
- hlcoord 1, 10
- ld de, .Disabled
- call PlaceString
- jr .done
-
-.asm_3e6f4
- ld hl, $cfa9
- dec [hl]
- call SetPlayerTurn
- ld hl, BattleMonMoves
- ld a, [$cfa9]
- ld c, a
- ld b, 0
- add hl, bc
- ld a, [hl]
- ld [CurPlayerMove], a
-
- ld a, [CurBattleMon]
- ld [CurPartyMon], a
- ld a, WILDMON
- ld [MonType], a
- callab Functionf8ec
-
- ld hl, $cfa9
- ld c, [hl]
- inc [hl]
- ld b, 0
- ld hl, BattleMonPP
- add hl, bc
- ld a, [hl]
- and $3f
- ld [StringBuffer1], a
- call Function3e75f
-
- hlcoord 1, 9
- ld de, .Type
- call PlaceString
-
- hlcoord 7, 11
- ld [hl], "/"
-
- callab UpdateMoveData
- ld a, [PlayerMoveAnimation]
- ld b, a
- hlcoord 2, 10
- ld a, PREDEF_PRINT_MOVE_TYPE
- call Predef
-
-.done
- ret
-; 3e74f
-
-.Disabled
- db "Disabled!@"
-.Type
- db "TYPE/@"
-; 3e75f
-
-
-Function3e75f: ; 3e75f
- hlcoord 5, 11
- ld a, [InLinkBattle]
- cp $4
- jr c, .asm_3e76c
- hlcoord 5, 11
-
-.asm_3e76c
- push hl
- ld de, StringBuffer1
- ld bc, $0102
- call PrintNum
- pop hl
- inc hl
- inc hl
- ld [hl], "/"
- inc hl
- ld de, $d265
- ld bc, $0102
- call PrintNum
- ret
-; 3e786
-
-Function3e786: ; 3e786
- ld a, STRUGGLE
- ld [CurPlayerMove], a
- ld a, [PlayerDisableCount]
- and a
- ld hl, BattleMonPP
- jr nz, .asm_3e79f
-
- ld a, [hli]
- or [hl]
- inc hl
- or [hl]
- inc hl
- or [hl]
- and $3f
- ret nz
- jr .asm_3e7b4
-
-.asm_3e79f
- swap a
- and $f
- ld b, a
- ld d, $5
- xor a
-.asm_3e7a7
- dec d
- jr z, .asm_3e7b2
- ld c, [hl]
- inc hl
- dec b
- jr z, .asm_3e7a7
- or c
- jr .asm_3e7a7
-
-.asm_3e7b2
- and a
- ret nz
-
-.asm_3e7b4
- ld hl, BattleText_0x80c72
- call StdBattleTextBox
- ld c, 60
- call DelayFrames
- xor a
- ret
-; 3e7c1
-
-
-
-Function3e7c1: ; 3e7c1
- ld a, [$c711]
- and a
- ret nz
- ld a, [InLinkBattle]
- and a
- jr z, .asm_3e817
- call EmptyBattleTextBox
- call Function309d
- ld a, [$d0ec]
- and a
- call z, Function3e8e4
- call Function30b4
- ld a, [$d430]
- cp $e
- jp z, .asm_3e8bd
- cp $d
- jp z, .asm_3e82c
- cp $4
- jp nc, Function3e8c1
- ld [CurEnemyMoveNum], a
- ld c, a
- ld a, [EnemySubStatus1]
- bit 6, a
- jp nz, .asm_3e882
- ld a, [EnemySubStatus3]
- and $13
- jp nz, .asm_3e882
- ld hl, EnemySubStatus5
- bit 4, [hl]
- ld a, [LastEnemyMove]
- jp nz, .asm_3e87f
- ld hl, EnemyMonMove1
- ld b, $0
- add hl, bc
- ld a, [hl]
- jp .asm_3e87f
-
-.asm_3e817
- ld hl, EnemySubStatus5
- bit 4, [hl]
- jr z, .asm_3e824
- ld a, [LastEnemyMove]
- jp .asm_3e87f
-
-.asm_3e824
- call Function3e8d1
- jp nz, Function3e8c1
- jr .asm_3e830
-
-.asm_3e82c
- ld a, $ff
- jr .asm_3e87f
-
-.asm_3e830
- ld hl, EnemyMonMove1
- ld de, EnemyMonPPMove1
- ld b, $4
-.asm_3e838
- ld a, [hl]
- and a
- jp z, .asm_3e8bd
- ld a, [EnemyDisabledMove]
- cp [hl]
- jr z, .asm_3e848
- ld a, [de]
- and $3f
- jr nz, .asm_3e84f
-
-.asm_3e848
- inc hl
- inc de
- dec b
- jr nz, .asm_3e838
- jr .asm_3e8bd
-
-.asm_3e84f
- ld a, [IsInBattle]
- dec a
- jr nz, .asm_3e882
-.asm_3e855
- ld hl, EnemyMonMove1
- call BattleRandom
- and $3
- ld c, a
- ld b, $0
- add hl, bc
- ld a, [EnemyDisableCount]
- swap a
- and $f
- dec a
- cp c
- jr z, .asm_3e855
- ld a, [hl]
- and a
- jr z, .asm_3e855
- ld hl, EnemyMonPPMove1
- add hl, bc
- ld b, a
- ld a, [hl]
- and $3f
- jr z, .asm_3e855
- ld a, c
- ld [CurEnemyMoveNum], a
- ld a, b
-
-.asm_3e87f
- ld [CurEnemyMove], a
-
-.asm_3e882
- call SetEnemyTurn
- callab UpdateMoveData
- call Function3e8d1
- jr nz, .asm_3e894
- xor a
- ld [$c733], a
-
-.asm_3e894
- ld a, [EnemyMoveEffect]
- cp $77
- jr z, .asm_3e89f
- xor a
- ld [EnemyFuryCutterCount], a
-
-.asm_3e89f
- ld a, [EnemyMoveEffect]
- cp $51
- jr z, .asm_3e8af
- ld hl, EnemySubStatus4
- res 6, [hl]
- xor a
- ld [$c72c], a
-
-.asm_3e8af
- ld a, [EnemyMoveEffect]
- cp $6f
- ret z
- cp $74
- ret z
- xor a
- ld [$c681], a
- ret
-
-.asm_3e8bd
- ld a, $a5
- jr .asm_3e87f
-; 3e8c1
-
-Function3e8c1: ; 3e8c1
- xor a
- ld [EnemyFuryCutterCount], a
- ld [$c681], a
- ld [$c72c], a
- ld hl, EnemySubStatus4
- res 6, [hl]
- ret
-; 3e8d1
-
-Function3e8d1: ; 3e8d1
- ld a, [EnemySubStatus4]
- and $20
- ret nz
- ld hl, EnemySubStatus3
- ld a, [hl]
- and $13
- ret nz
- ld hl, EnemySubStatus1
- bit 6, [hl]
- ret
-; 3e8e4
-
-Function3e8e4: ; 3e8e4
- callba Function100a09
- ret
-; 3e8eb
-
-
-LoadEnemyMon: ; 3e8eb
-; Initialize enemy monster parameters
-; To do this we pull the species from TempEnemyMonSpecies
-
-; Notes:
-; BattleRandom is used to ensure sync between Game Boys
-
-; Clear the whole EnemyMon struct
- xor a
- ld hl, EnemyMonSpecies
- ld bc, EnemyMonEnd - EnemyMon
- call ByteFill
-
-; We don't need to be here if we're in a link battle
- ld a, [InLinkBattle]
- and a
- jp nz, Function3dabd
-
- ld a, [$cfc0] ; ????
- bit 0, a
- jp nz, Function3dabd
-
-; Make sure everything knows what species we're working with
- ld a, [TempEnemyMonSpecies]
- ld [EnemyMonSpecies], a
- ld [CurSpecies], a
- ld [CurPartySpecies], a
-
-; Grab the BaseData for this species
- call GetBaseData
-
-
-; Let's get the item:
-
-; Is the item predetermined?
- ld a, [IsInBattle]
- dec a
- jr z, .WildItem
-
-; If we're in a trainer battle, the item is in the party struct
- ld a, [CurPartyMon]
- ld hl, OTPartyMon1Item
- call GetPartyLocation ; bc = PartyMon[CurPartyMon] - PartyMons
- ld a, [hl]
- jr .UpdateItem
-
-
-.WildItem
-; In a wild battle, we pull from the item slots in BaseData
-
-; Force Item1
-; Used for Ho-Oh, Lugia and Snorlax encounters
- ld a, [BattleType]
- cp BATTLETYPE_FORCEITEM
- ld a, [BaseItems]
- jr z, .UpdateItem
-
-; Failing that, it's all up to chance
-; Effective chances:
-; 75% None
-; 23% Item1
-; 2% Item2
-
-; 25% chance of getting an item
- call BattleRandom
- cp a, $c0
- ld a, NO_ITEM
- jr c, .UpdateItem
-
-; From there, an 8% chance for Item2
- call BattleRandom
- cp a, $14 ; 8% of 25% = 2% Item2
- ld a, [BaseItems]
- jr nc, .UpdateItem
- ld a, [BaseItems+1]
-
-
-.UpdateItem
- ld [EnemyMonItem], a
-
-
-; Initialize DVs
-
-; If we're in a trainer battle, DVs are predetermined
- ld a, [IsInBattle]
- and a
- jr z, .InitDVs
-
-; ????
- ld a, [EnemySubStatus5]
- bit 3, a
- jr z, .InitDVs
-
-; Unknown
- ld hl, $c6f2
- ld de, EnemyMonDVs
- ld a, [hli]
- ld [de], a
- inc de
- ld a, [hl]
- ld [de], a
- jp .Happiness
-
-
-.InitDVs
-
-; Trainer DVs
-
-; All trainers have preset DVs, determined by class
-; See GetTrainerDVs for more on that
- callba GetTrainerDVs
-; These are the DVs we'll use if we're actually in a trainer battle
- ld a, [IsInBattle]
- dec a
- jr nz, .UpdateDVs
-
-
-; Wild DVs
-; Here's where the fun starts
-
-; Roaming monsters (Entei, Raikou) work differently
-; They have their own structs, which are shorter than normal
- ld a, [BattleType]
- cp a, BATTLETYPE_ROAMING
- jr nz, .NotRoaming
-
-; Grab HP
- call GetRoamMonHP
- ld a, [hl]
-; Check if the HP has been initialized
- and a
-; We'll do something with the result in a minute
- push af
-
-; Grab DVs
- call GetRoamMonDVs
- inc hl
- ld a, [hld]
- ld c, a
- ld b, [hl]
-
-; Get back the result of our check
- pop af
-; If the RoamMon struct has already been initialized, we're done
- jr nz, .UpdateDVs
-
-; If it hasn't, we need to initialize the DVs
-; (HP is initialized at the end of the battle)
- call GetRoamMonDVs
- inc hl
- call BattleRandom
- ld [hld], a
- ld c, a
- call BattleRandom
- ld [hl], a
- ld b, a
-; We're done with DVs
- jr .UpdateDVs
-
-
-.NotRoaming
-; Register a contains BattleType
-
-; Forced shiny battle type
-; Used by Red Gyarados at Lake of Rage
- cp a, BATTLETYPE_SHINY
- jr nz, .GenerateDVs
-
- ld b, ATKDEFDV_SHINY ; $ea
- ld c, SPDSPCDV_SHINY ; $aa
- jr .UpdateDVs
-
-.GenerateDVs
-; Generate new random DVs
- call BattleRandom
- ld b, a
- call BattleRandom
- ld c, a
-
-.UpdateDVs
-; Input DVs in register bc
- ld hl, EnemyMonDVs
- ld a, b
- ld [hli], a
- ld [hl], c
-
-
-; We've still got more to do if we're dealing with a wild monster
- ld a, [IsInBattle]
- dec a
- jr nz, .Happiness
-
-
-; Species-specfic:
-
-
-; Unown
- ld a, [TempEnemyMonSpecies]
- cp a, UNOWN
- jr nz, .Magikarp
-
-; Get letter based on DVs
- ld hl, EnemyMonDVs
- ld a, PREDEF_GET_UNOWN_LETTER
- call Predef
-; Can't use any letters that haven't been unlocked
-; If combined with forced shiny battletype, causes an infinite loop
- call CheckUnownLetter
- jr c, .GenerateDVs ; try again
-
-
-.Magikarp
-; Skimming this part recommended
-
- ld a, [TempEnemyMonSpecies]
- cp a, MAGIKARP
- jr nz, .Happiness
-
-; Get Magikarp's length
- ld de, EnemyMonDVs
- ld bc, PlayerID
- callab CalcMagikarpLength
-
-; We're clear if the length is < 1536
- ld a, [MagikarpLength]
- cp a, $06 ; $600 = 1536
- jr nz, .CheckMagikarpArea
-
-; 5% chance of skipping size checks
- call Random
- cp a, $0c ; / $100
- jr c, .CheckMagikarpArea
-; Try again if > 1614
- ld a, [MagikarpLength + 1]
- cp a, $50
- jr nc, .GenerateDVs
-
-; 20% chance of skipping this check
- call Random
- cp a, $32 ; / $100
- jr c, .CheckMagikarpArea
-; Try again if > 1598
- ld a, [MagikarpLength + 1]
- cp a, $40
- jr nc, .GenerateDVs
-
-.CheckMagikarpArea
-; The z checks are supposed to be nz
-; Instead, all maps in GROUP_LAKE_OF_RAGE (mahogany area)
-; and routes 20 and 44 are treated as Lake of Rage
-
-; This also means Lake of Rage Magikarp can be smaller than ones
-; caught elsewhere rather than the other way around
-
-; Intended behavior enforces a minimum size at Lake of Rage
-; The real behavior prevents size flooring in the Lake of Rage area
- ld a, [MapGroup]
- cp a, GROUP_LAKE_OF_RAGE
- jr z, .Happiness
- ld a, [MapNumber]
- cp a, MAP_LAKE_OF_RAGE
- jr z, .Happiness
-; 40% chance of not flooring
- call Random
- cp a, $64 ; / $100
- jr c, .Happiness
-; Floor at length 1024
- ld a, [MagikarpLength]
- cp a, 1024 >> 8
- jr c, .GenerateDVs ; try again
-
-
-; Finally done with DVs
-
-.Happiness
-; Set happiness
- ld a, BASE_HAPPINESS
- ld [EnemyMonHappiness], a
-; Set level
- ld a, [CurPartyLevel]
- ld [EnemyMonLevel], a
-; Fill stats
- ld de, EnemyMonMaxHP
- ld b, $00
- ld hl, $d201 ; ?
- ld a, PREDEF_FILLSTATS
- call Predef
-
-; If we're in a trainer battle,
-; get the rest of the parameters from the party struct
- ld a, [IsInBattle]
- cp a, TRAINER_BATTLE
- jr z, .OpponentParty
-
-; If we're in a wild battle, check wild-specific stuff
- and a
- jr z, .TreeMon
-
-; ????
- ld a, [EnemySubStatus5]
- bit 3, a
- jp nz, .Moves
-
-.TreeMon
-; If we're headbutting trees, some monsters enter battle asleep
- call CheckSleepingTreeMon
- ld a, 7 ; Asleep for 7 turns
- jr c, .UpdateStatus
-; Otherwise, no status
- xor a
-
-.UpdateStatus
- ld hl, EnemyMonStatus
- ld [hli], a
-
-; Unused byte
- xor a
- ld [hli], a
-
-; Full HP...
- ld a, [EnemyMonMaxHPHi]
- ld [hli], a
- ld a, [EnemyMonMaxHPLo]
- ld [hl], a
-
-; ...unless it's a RoamMon
- ld a, [BattleType]
- cp a, BATTLETYPE_ROAMING
- jr nz, .Moves
-
-; Grab HP
- call GetRoamMonHP
- ld a, [hl]
-; Check if it's been initialized again
- and a
- jr z, .InitRoamHP
-; Update from the struct if it has
- ld a, [hl]
- ld [EnemyMonHPLo], a
- jr .Moves
-
-.InitRoamHP
-; HP only uses the lo byte in the RoamMon struct since
-; Raikou/Entei/Suicune will have < 256 hp at level 40
- ld a, [EnemyMonHPLo]
- ld [hl], a
- jr .Moves
-
-
-.OpponentParty
-; Get HP from the party struct
- ld hl, (PartyMon1CurHP + 1) - PartyMon1 + OTPartyMon1
- ld a, [CurPartyMon]
- call GetPartyLocation
- ld a, [hld]
- ld [EnemyMonHPLo], a
- ld a, [hld]
- ld [EnemyMonHPHi], a
-
-; Make sure everything knows which monster the opponent is using
- ld a, [CurPartyMon]
- ld [CurOTMon], a
-
-; Get status from the party struct
- dec hl
- ld a, [hl] ; OTPartyMonStatus
- ld [EnemyMonStatus], a
-
-
-.Moves
-; ????
- ld hl, BaseType1
- ld de, EnemyMonType1
- ld a, [hli]
- ld [de], a
- inc de
- ld a, [hl]
- ld [de], a
-
-; Get moves
- ld de, EnemyMonMoves
-; Are we in a trainer battle?
- ld a, [IsInBattle]
- cp a, TRAINER_BATTLE
- jr nz, .WildMoves
-; Then copy moves from the party struct
- ld hl, OTPartyMon1Moves
- ld a, [CurPartyMon]
- call GetPartyLocation
- ld bc, NUM_MOVES
- call CopyBytes
- jr .PP
-
-.WildMoves
-; Clear EnemyMonMoves
- xor a
- ld h, d
- ld l, e
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hl], a
-; Make sure the predef knows this isn't a partymon
- ld [MagikarpLength], a
-; Fill moves based on level
- ld a, PREDEF_FILLMOVES
- call Predef
-
-.PP
-; Trainer battle?
- ld a, [IsInBattle]
- cp a, TRAINER_BATTLE
- jr z, .TrainerPP
-
-; Fill wild PP
- ld hl, EnemyMonMoves
- ld de, EnemyMonPP
- ld a, PREDEF_FILLPP
- call Predef
- jr .Finish
-
-.TrainerPP
-; Copy PP from the party struct
- ld hl, OTPartyMon1PP
- ld a, [CurPartyMon]
- call GetPartyLocation
- ld de, EnemyMonPP
- ld bc, NUM_MOVES
- call CopyBytes
-
-.Finish
-; Only the first five base stats are copied...
- ld hl, BaseStats
- ld de, EnemyMonBaseStats
- ld b, BaseSpecialDefense - BaseStats
-.loop
- ld a, [hli]
- ld [de], a
- inc de
- dec b
- jr nz, .loop
-
- ld a, [BaseCatchRate]
- ld [de], a
- inc de
-
- ld a, [BaseExp]
- ld [de], a
-
- ld a, [TempEnemyMonSpecies]
- ld [$d265], a
-
- call GetPokemonName
-
-; Did we catch it?
- ld a, [IsInBattle]
- and a
- ret z
-
-; Update enemy nick
- ld hl, StringBuffer1
- ld de, EnemyMonNick
- ld bc, PKMN_NAME_LENGTH
- call CopyBytes
-
-; Caught this mon
- ld a, [TempEnemyMonSpecies]
- dec a
- ld c, a
- ld b, 1 ; set
- ld hl, PokedexSeen
- ld a, PREDEF_FLAG
- call Predef
-
- ld hl, EnemyMonStats
- ld de, EnemyStats
- ld bc, EnemyMonStatsEnd - EnemyMonStats
- call CopyBytes
-
- ret
-; 3eb38
-
-
-CheckSleepingTreeMon: ; 3eb38
-; Return carry if species is in the list
-; for the current time of day
-
-; Don't do anything if this isn't a tree encounter
- ld a, [BattleType]
- cp a, BATTLETYPE_TREE
- jr nz, .NotSleeping
-
-; Get list for the time of day
- ld hl, .Morn
- ld a, [TimeOfDay]
- cp a, DAY
- jr c, .Check
- ld hl, .Day
- jr z, .Check
- ld hl, .Nite
-
-.Check
- ld a, [TempEnemyMonSpecies]
- ld de, 1 ; length of species id
- call IsInArray
-; If it's a match, the opponent is asleep
- ret c
-
-.NotSleeping
- and a
- ret
-
-.Nite
- db CATERPIE
- db METAPOD
- db BUTTERFREE
- db WEEDLE
- db KAKUNA
- db BEEDRILL
- db SPEAROW
- db EKANS
- db EXEGGCUTE
- db LEDYBA
- db AIPOM
- db $ff ; end
-
-.Day
- db VENONAT
- db HOOTHOOT
- db NOCTOWL
- db SPINARAK
- db HERACROSS
- db $ff ; end
-
-.Morn
- db VENONAT
- db HOOTHOOT
- db NOCTOWL
- db SPINARAK
- db HERACROSS
- db $ff ; end
-; 3eb75
-
-
-CheckUnownLetter: ; 3eb75
-; Return carry if the Unown letter hasn't been unlocked yet
-
- ld a, [UnlockedUnowns]
- ld c, a
- ld de, 0
-
-.loop
-
-; Don't check this set unless it's been unlocked
- srl c
- jr nc, .next
-
-; Is our letter in the set?
- ld hl, .LetterSets
- add hl, de
- ld a, [hli]
- ld h, [hl]
- ld l, a
-
- push de
- ld a, [UnownLetter]
- ld de, 1
- push bc
- call IsInArray
- pop bc
- pop de
-
- jr c, .match
-
-.next
-; Make sure we haven't gone past the end of the table
- inc e
- inc e
- ld a, e
- cp a, .Set1 - .LetterSets
- jr c, .loop
-
-; Hasn't been unlocked, or the letter is invalid
- scf
- ret
-
-.match
-; Valid letter
- and a
- ret
-
-.LetterSets
- dw .Set1
- dw .Set2
- dw .Set3
- dw .Set4
-
-.Set1
- ; A B C D E F G H I J K
- db 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, $ff
-.Set2
- ; L M N O P Q R
- db 12, 13, 14, 15, 16, 17, 18, $ff
-.Set3
- ; S T U V W
- db 19, 20, 21, 22, 23, $ff
-.Set4
- ; X Y Z
- db 24, 25, 26, $ff
-
-; 3ebc7
-
-
-Function3ebc7: ; 3ebc7
- push bc
- ld a, [BattleMonLevel]
- ld b, a
- ld a, [EnemyMonLevel]
- ld [BattleMonLevel], a
- ld a, b
- ld [EnemyMonLevel], a
- pop bc
- ret
-; 3ebd8
-
-Function3ebd8: ; 3ebd8
- xor a
- ld [TempEnemyMonSpecies], a
- call Function3ee27
- ld a, [OtherTrainerClass]
- ld [TrainerClass], a
- ld de, VTiles2
- callab Function5120d
- ld hl, $c4b3
- ld c, $0
-.asm_3ebf3
- inc c
- ld a, c
- cp $7
- ret z
- xor a
- ld [hBGMapMode], a
- ld [hBGMapThird], a
- ld d, $0
- push bc
- push hl
-.asm_3ec01
- call Function3ec1a
- inc hl
- ld a, $7
- add d
- ld d, a
- dec c
- jr nz, .asm_3ec01
- ld a, $1
- ld [hBGMapMode], a
- ld c, $4
- call DelayFrames
- pop hl
- pop bc
- dec hl
- jr .asm_3ebf3
-; 3ec1a
-
-Function3ec1a: ; 3ec1a
- push hl
- push de
- push bc
- ld e, $7
-.asm_3ec1f
- ld [hl], d
- ld bc, $0014
- add hl, bc
- inc d
- dec e
- jr nz, .asm_3ec1f
- pop bc
- pop de
- pop hl
- ret
-; 3ec2c
-
-
-Function3ec2c: ; 3ec2c
- ld a, 1
- jr Function3ec31
-; 3ec30
-
-Function3ec30: ; 3ec30
- xor a
-; 3ec31
-
-Function3ec31: ; 3ec31
- ld [hBattleTurn], a
- call Function3ec39
- jp Function3ec76
-; 3ec39
-
-Function3ec39: ; 3ec39
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3ec5a
- ld a, [BattleMonStatus]
- and $40
- ret z
- ld hl, $c645
- ld a, [hld]
- ld b, a
- ld a, [hl]
- srl a
- rr b
- srl a
- rr b
- ld [hli], a
- or b
- jr nz, .asm_3ec58
- ld b, $1
-
-.asm_3ec58
- ld [hl], b
- ret
-
-.asm_3ec5a
- ld a, [EnemyMonStatus]
- and $40
- ret z
- ld hl, $d21f
- ld a, [hld]
- ld b, a
- ld a, [hl]
- srl a
- rr b
- srl a
- rr b
- ld [hli], a
- or b
- jr nz, .asm_3ec74
- ld b, $1
-
-.asm_3ec74
- ld [hl], b
- ret
-; 3ec76
-
-Function3ec76: ; 3ec76
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3ec93
- ld a, [BattleMonStatus]
- and $10
- ret z
- ld hl, $c641
- ld a, [hld]
- ld b, a
- ld a, [hl]
- srl a
- rr b
- ld [hli], a
- or b
- jr nz, .asm_3ec91
- ld b, $1
-
-.asm_3ec91
- ld [hl], b
- ret
-
-.asm_3ec93
- ld a, [EnemyMonStatus]
- and $10
- ret z
- ld hl, $d21b
- ld a, [hld]
- ld b, a
- ld a, [hl]
- srl a
- rr b
- ld [hli], a
- or b
- jr nz, .asm_3eca9
- ld b, $1
-
-.asm_3eca9
- ld [hl], b
- ret
-; 3ecab
-
-Function3ecab: ; 3ecab
- ld c, 0
-.asm_3ecad
- call Function3ecb7
- inc c
- ld a, c
- cp 5
- jr nz, .asm_3ecad
- ret
-; 3ecb7
-
-Function3ecb7: ; 3ecb7
- push bc
- push bc
- ld a, [$d265]
- and a
- ld a, c
- ld hl, BattleMonAtk
- ld de, PlayerStats
- ld bc, PlayerAtkLevel
- jr z, .asm_3ecd2
- ld hl, EnemyMonAtk
- ld de, EnemyStats
- ld bc, EnemyAtkLevel
-
-.asm_3ecd2
- add c
- ld c, a
- jr nc, .asm_3ecd7
- inc b
-.asm_3ecd7
- ld a, [bc]
- pop bc
- ld b, a
- push bc
- sla c
- ld b, 0
- add hl, bc
- ld a, c
- add e
- ld e, a
- jr nc, .asm_3ece6
- inc d
-.asm_3ece6
- pop bc
- push hl
- ld hl, .StatLevelMultipliers
- dec b
- sla b
- ld c, b
- ld b, 0
- add hl, bc
- xor a
- ld [hMultiplicand], a
- ld a, [de]
- ld [$ffb5], a
- inc de
- ld a, [de]
- ld [$ffb6], a
- ld a, [hli]
- ld [hMultiplier], a
- call Multiply
- ld a, [hl]
- ld [hMultiplier], a
- ld b, $4
- call Divide
- pop hl
-
-; Cap at 999.
- ld a, [$ffb6]
- sub 999 % $100
- ld a, [$ffb5]
- sbc 999 / $100
- jp c, .asm_3ed1e
-
- ld a, 999 / $100
- ld [$ffb5], a
- ld a, 999 % $100
- ld [$ffb6], a
-
-.asm_3ed1e
- ld a, [$ffb5]
- ld [hli], a
- ld b, a
- ld a, [$ffb6]
- ld [hl], a
- or b
- jr nz, .asm_3ed29
- inc [hl]
-
-.asm_3ed29
- pop bc
- ret
-; 3ed2b
-
-.StatLevelMultipliers
-; /
- db 25, 100 ; 25%
- db 28, 100 ; 28%
- db 33, 100 ; 33%
- db 40, 100 ; 40%
- db 50, 100 ; 50%
- db 66, 100 ; 66%
-
- db 1, 1 ; 100%
-
- db 15, 10 ; 150%
- db 2, 1 ; 200%
- db 25, 10 ; 250%
- db 3, 1 ; 300%
- db 35, 10 ; 350%
- db 4, 1 ; 400%
-; 3ed45
-
-
-BadgeStatBoosts: ; 3ed45
-; Raise BattleMon stats depending on which badges have been obtained.
-
-; Every other badge boosts a stat, starting from the first.
-
-; ZephyrBadge: Attack
-; PlainBadge: Speed
-; MineralBadge: Defense
-; GlacierBadge: Special Attack
-; RisingBadge: Special Defense
-
-; The boosted stats are in order, except PlainBadge and MineralBadge's boosts are swapped.
-
- ld a, [InLinkBattle]
- and a
- ret nz
-
- ld a, [$cfc0]
- and a
- ret nz
-
- ld a, [JohtoBadges]
-
-; Swap badges 3 (PlainBadge) and 5 (MineralBadge).
- ld d, a
- and %00000100
- add a
- add a
- ld b, a
- ld a, d
- and %00010000
- rrca
- rrca
- ld c, a
- ld a, d
- and %11101011
- or b
- or c
- ld b, a
-
- ld hl, BattleMonAtk
- ld c, 4
-.CheckBadge
- ld a, b
- srl b
- call c, BoostStat
- inc hl
- inc hl
-; Check every other badge.
- srl b
- dec c
- jr nz, .CheckBadge
-; And the last one (RisingBadge) too.
- srl a
- call c, BoostStat
- ret
-; 3ed7c
-
-
-BoostStat: ; 3ed7c
-; Raise stat at hl by 1/8.
-
- ld a, [hli]
- ld d, a
- ld e, [hl]
- srl d
- rr e
- srl d
- rr e
- srl d
- rr e
- ld a, [hl]
- add e
- ld [hld], a
- ld a, [hl]
- adc d
- ld [hli], a
-
-; Cap at 999.
- ld a, [hld]
- sub 999 % $100
- ld a, [hl]
- sbc 999 / $100
- ret c
- ld a, 999 / $100
- ld [hli], a
- ld a, 999 % $100
- ld [hld], a
- ret
-; 3ed9f
-
-
-Function3ed9f: ; 3ed9f
- callab Functionfb4f2
- ret
-; 3eda6
-
-Function3eda6: ; 3eda6
- callab Functionfb50d
- ret
-; 3edad
-
-
-Function3edad: ; 3edad
- ld de, $4ac0
- ld hl, $96c0
- ld bc, $3e04
- call Get1bpp
- ld de, $4ae0
- ld hl, $9730
- ld bc, $3e06
- call Get1bpp
- ld de, $4b10
- ld hl, $9550
- ld bc, $3e08
- jp Get2bpp
-; 3edd1
-
-
-EmptyBattleTextBox: ; 3edd1
- ld hl, .empty
- jp BattleTextBox
-.empty
- db "@"
-; 3edd8
-
-
-_BattleRandom: ; 3edd8
-; If the normal RNG is used in a link battle it'll desync.
-; To circumvent this a shared PRNG is used instead.
-
-; But if we're in a non-link battle we're safe to use it
- ld a, [InLinkBattle]
- and a
- jp z, Random
-
-; The PRNG operates in streams of 10 values.
-
-; Which value are we trying to pull?
- push hl
- push bc
- ld a, [LinkBattleRNCount]
- ld c, a
- ld b, 0
- ld hl, LinkBattleRNs
- add hl, bc
- inc a
- ld [LinkBattleRNCount], a
-
-; If we haven't hit the end yet, we're good
- cp 10 - 1 ; Exclude last value. See the closing comment
- ld a, [hl]
- pop bc
- pop hl
- ret c
-
-; If we have, we have to generate new pseudorandom data
-; Instead of having multiple PRNGs, ten seeds are used
- push hl
- push bc
- push af
-
-; Reset count to 0
- xor a
- ld [LinkBattleRNCount], a
- ld hl, LinkBattleRNs
- ld b, 10 ; number of seeds
-
-; Generate next number in the sequence for each seed
-; The algorithm takes the form *5 + 1 % 256
-.loop
- ; get last #
- ld a, [hl]
-
- ; a * 5 + 1
- ld c, a
- add a
- add a
- add c
- inc a
-
- ; update #
- ld [hli], a
- dec b
- jr nz, .loop
-
-; This has the side effect of pulling the last value first,
-; then wrapping around. As a result, when we check to see if
-; we've reached the end, we check the one before it.
-
- pop af
- pop bc
- pop hl
- ret
-; 3ee0f
-
-
-Function3ee0f: ; 3ee0f
- ld a, BATTLE_VARS_SUBSTATUS3
- call GetBattleVar
- and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
- ret nz
-; 3ee17
-
-Function3ee17: ; 3ee17
- ld a, e
- ld [FXAnimIDLo], a
- ld a, d
- ld [FXAnimIDHi], a
- call WaitBGMap
- ld a, $37
- jp Predef
-; 3ee27
-
-Function3ee27: ; 3ee27
- push af
- push bc
- push de
- push hl
- ld b, $1
- call GetSGBLayout
- call Function32f9
- call DelayFrame
- pop hl
- pop de
- pop bc
- pop af
- ret
-; 3ee3b
-
-
-Function3ee3b: ; 3ee3b
- ld a, [InLinkBattle]
- and a
- ret nz
- ld a, [$cfc0]
- bit 0, a
- ret nz
- call Function3f0d4
- xor a
- ld [CurPartyMon], a
- ld bc, PartyMon1Species
-
-.asm_3ee50
- ld hl, $0022
- add hl, bc
- ld a, [hli]
- or [hl]
- jp z, .asm_3f0b9
- push bc
- ld hl, $c664
- ld a, [CurPartyMon]
- ld c, a
- ld b, $2
- ld d, $0
- ld a, $3
- call Predef
- ld a, c
- and a
- pop bc
- jp z, .asm_3f0b9
- ld hl, $000c
- add hl, bc
- ld d, h
- ld e, l
- ld hl, EnemyMonType2
- push bc
- ld c, $5
-.asm_3ee7c
- inc hl
- ld a, [de]
- add [hl]
- ld [de], a
- jr nc, .asm_3ee89
- dec de
- ld a, [de]
- inc a
- jr z, .asm_3eea4
- ld [de], a
- inc de
-
-.asm_3ee89
- push hl
- push bc
- ld a, $1c
- call GetPartyParamLocation
- ld a, [hl]
- and a
- pop bc
- pop hl
- jr z, .asm_3eea9
- ld a, [de]
- add [hl]
- ld [de], a
- jr nc, .asm_3eea9
- dec de
- ld a, [de]
- inc a
- jr z, .asm_3eea4
- ld [de], a
- inc de
- jr .asm_3eea9
-
-.asm_3eea4
- ld a, $ff
- ld [de], a
- inc de
- ld [de], a
-
-.asm_3eea9
- inc de
- inc de
- dec c
- jr nz, .asm_3ee7c
- xor a
- ld [hMultiplicand], a
- ld [$ffb5], a
- ld a, [EnemyMonBaseExp]
- ld [$ffb6], a
- ld a, [EnemyMonLevel]
- ld [hMultiplier], a
- call Multiply
- ld a, $7
- ld [hMultiplier], a
- ld b, $4
- call Divide
- pop bc
- ld hl, $0006
- add hl, bc
- ld a, [PlayerID]
- cp [hl]
- jr nz, .asm_3eedd
- inc hl
- ld a, [$d47c]
- cp [hl]
- ld a, $0
- jr z, .asm_3eee2
-
-.asm_3eedd
- call Function3f106
- ld a, $1
-
-.asm_3eee2
- ld [$d088], a
- ld a, [IsInBattle]
- dec a
- call nz, Function3f106
- push bc
- ld a, $1
- call GetPartyParamLocation
- ld a, [hl]
- cp $7e
- call z, Function3f106
- ld a, [$ffb6]
- ld [$d087], a
- ld a, [$ffb5]
- ld [StringBuffer2], a
- ld a, [CurPartyMon]
- ld hl, PartyMon1Nickname
- call GetNick
- ld hl, UnknownText_0x3f11b
- call BattleTextBox
- ld a, [$d087]
- ld [$ffb6], a
- ld a, [StringBuffer2]
- ld [$ffb5], a
- pop bc
- call Function3f136
- push bc
- call Function309d
- pop bc
- ld hl, $000a
- add hl, bc
- ld d, [hl]
- ld a, [$ffb6]
- add d
- ld [hld], a
- ld d, [hl]
- ld a, [$ffb5]
- adc d
- ld [hl], a
- jr nc, .asm_3ef3d
- dec hl
- inc [hl]
- jr nz, .asm_3ef3d
- ld a, $ff
- ld [hli], a
- ld [hli], a
- ld [hl], a
-
-.asm_3ef3d
- ld a, [CurPartyMon]
- ld e, a
- ld d, $0
- ld hl, PartySpecies
- add hl, de
- ld a, [hl]
- ld [CurSpecies], a
- call GetBaseData
- push bc
- ld d, $64
- callab Function50e47
- pop bc
- ld hl, $000a
- add hl, bc
- push bc
- ld a, [hMultiplicand]
- ld b, a
- ld a, [$ffb5]
- ld c, a
- ld a, [$ffb6]
- ld d, a
- ld a, [hld]
- sub d
- ld a, [hld]
- sbc c
- ld a, [hl]
- sbc b
- jr c, .asm_3ef74
- ld a, b
- ld [hli], a
- ld a, c
- ld [hli], a
- ld a, d
- ld [hld], a
-
-.asm_3ef74
- xor a
- ld [MonType], a
- ld a, $1f
- call Predef
- callab Function50e1b
- pop bc
- ld hl, $001f
- add hl, bc
- ld a, [hl]
- cp $64
- jp nc, .asm_3f0b9
- cp d
- jp z, .asm_3f0b9
- ld [$c719], a
- ld a, [CurPartyLevel]
- push af
- ld a, d
- ld [CurPartyLevel], a
- ld [hl], a
- ld hl, $0000
- add hl, bc
- ld a, [hl]
- ld [CurSpecies], a
- ld [$d265], a
- call GetBaseData
- ld hl, $0025
- add hl, bc
- ld a, [hld]
- ld e, a
- ld d, [hl]
- push de
- ld hl, $0024
- add hl, bc
- ld d, h
- ld e, l
- ld hl, $000a
- add hl, bc
- push bc
- ld b, $1
- ld a, $c
- call Predef
- pop bc
- pop de
- ld hl, $0025
- add hl, bc
- ld a, [hld]
- sub e
- ld e, a
- ld a, [hl]
- sbc d
- ld d, a
- dec hl
- ld a, [hl]
- add e
- ld [hld], a
- ld a, [hl]
- adc d
- ld [hl], a
- ld a, [CurBattleMon]
- ld d, a
- ld a, [CurPartyMon]
- cp d
- jr nz, .asm_3f035
- ld de, BattleMonHP
- ld a, [hli]
- ld [de], a
- inc de
- ld a, [hli]
- ld [de], a
- ld de, BattleMonMaxHP
- push bc
- ld bc, $000c
- call CopyBytes
- pop bc
- ld hl, $001f
- add hl, bc
- ld a, [hl]
- ld [BattleMonLevel], a
- ld a, [PlayerSubStatus5]
- bit 3, a
- jr nz, .asm_3f012
- ld hl, $0026
- add hl, bc
- ld de, PlayerStats
- ld bc, $000a
- call CopyBytes
-
-.asm_3f012
- xor a
- ld [$d265], a
- call Function3ecab
- callab Function3ec2c
- callab BadgeStatBoosts
- callab Function3df48
- call EmptyBattleTextBox
- call Function309d
- ld a, $1
- ld [hBGMapMode], a
-
-.asm_3f035
- callba Function2709e
- ld a, [CurBattleMon]
- ld b, a
- ld a, [CurPartyMon]
- cp b
- jr z, .asm_3f057
- ld de, SFX_HIT_END_OF_EXP_BAR
- call PlaySFX
- call WaitSFX
- ld hl, BattleText_0x80c9c
- call StdBattleTextBox
- call Function309d
-
-.asm_3f057
- xor a
- ld [MonType], a
- ld a, $1f
- call Predef
- ld hl, $c4a9
- ld b, $a
- ld c, $9
- call TextBox
- ld hl, $c4bf
- ld bc, $0004
- ld a, $28
- call Predef
- ld c, $1e
- call DelayFrames
- call Functiona80
- call Function30b4
- xor a
- ld [MonType], a
- ld a, [CurSpecies]
- ld [$d265], a
- ld a, [CurPartyLevel]
- push af
- ld c, a
- ld a, [$c719]
- ld b, a
-
-.asm_3f093
- inc b
- ld a, b
- ld [CurPartyLevel], a
- push bc
- ld a, $1a
- call Predef
- pop bc
- ld a, b
- cp c
- jr nz, .asm_3f093
- pop af
- ld [CurPartyLevel], a
- ld hl, EvolvableFlags
- ld a, [CurPartyMon]
- ld c, a
- ld b, $1
- ld a, $3
- call Predef
- pop af
- ld [CurPartyLevel], a
-
-.asm_3f0b9
- ld a, [PartyCount]
- ld b, a
- ld a, [CurPartyMon]
- inc a
- cp b
- jr z, .asm_3f0d1
- ld [CurPartyMon], a
- ld a, $0
- call GetPartyParamLocation
- ld b, h
- ld c, l
- jp .asm_3ee50
-
-.asm_3f0d1
- jp Function3d57a
-; 3f0d4
-
-Function3f0d4: ; 3f0d4
- ld a, [$c664]
- ld b, a
- ld c, $6
- ld d, $0
-.asm_3f0dc
- xor a
- srl b
- adc d
- ld d, a
- dec c
- jr nz, .asm_3f0dc
- cp $2
- ret c
- ld [$d265], a
- ld hl, EnemyMonBaseStats
- ld c, $7
-.asm_3f0ef
- xor a
- ld [hProduct], a
- ld a, [hl]
- ld [hMultiplicand], a
- ld a, [$d265]
- ld [hMultiplier], a
- ld b, $2
- call Divide
- ld a, [$ffb6]
- ld [hli], a
- dec c
- jr nz, .asm_3f0ef
- ret
-; 3f106
-
-Function3f106: ; 3f106
- push bc
- ld a, [$ffb5]
- ld b, a
- ld a, [$ffb6]
- ld c, a
- srl b
- rr c
- add c
- ld [$ffb6], a
- ld a, [$ffb5]
- adc b
- ld [$ffb5], a
- pop bc
- ret
-; 3f11b
-
-UnknownText_0x3f11b: ; 3f11b
- text_jump UnknownText_0x1c029c
- start_asm
- ld hl, UnknownText_0x3f131
- ld a, [$d088] ; IsTradedMon
- and a
- ret z
- ld hl, UnknownText_0x3f12c
- ret
-; 3f12c
-
-UnknownText_0x3f12c: ; 3f12c
- text_jump UnknownText_0x1c02a9
- db "@"
-; 3f131
-
-UnknownText_0x3f131: ; 3f131
- text_jump UnknownText_0x1c02c9
- db "@"
-; 3f136
-
-
-Function3f136: ; 3f136
-
- push bc
-
- ld hl, CurPartyMon
- ld a, [CurBattleMon]
- cp [hl]
- jp nz, .asm_3f219
-
- ld a, [BattleMonLevel]
- cp MAX_LEVEL
- jp nc, .asm_3f219
-
- ld a, [$ffb6]
- ld [$d004], a
- push af
- ld a, [$ffb5]
- ld [$d003], a
- push af
- xor a
- ld [DefaultFlypoint], a
- xor a
- ld [MonType], a
- ld a, $1f
- call Predef
- ld a, [TempMonLevel]
- ld b, a
- ld e, a
- push de
- ld de, $d118
- call Function3f39c
- push bc
- ld hl, $d118
- ld a, [$d004]
- add [hl]
- ld [hld], a
- ld a, [$d003]
- adc [hl]
- ld [hld], a
- jr nc, .asm_3f186
- inc [hl]
- jr nz, .asm_3f186
- ld a, $ff
- ld [hli], a
- ld [hli], a
- ld [hl], a
-
-.asm_3f186
- ld d, $64
- callab Function50e47
- ld a, [hMultiplicand]
- ld b, a
- ld a, [$ffb5]
- ld c, a
- ld a, [$ffb6]
- ld d, a
- ld hl, $d118
- ld a, [hld]
- sub d
- ld a, [hld]
- sbc c
- ld a, [hl]
- sbc b
- jr c, .asm_3f1a8
- ld a, b
- ld [hli], a
- ld a, c
- ld [hli], a
- ld a, d
- ld [hld], a
-
-.asm_3f1a8
- callab Function50e1b
- ld a, d
- pop bc
- pop de
- ld d, a
- cp e
- jr nc, .asm_3f1b7
- ld a, e
- ld d, a
-
-.asm_3f1b7
- ld a, e
- cp $64
- jr nc, .asm_3f1ff
- cp d
- jr z, .asm_3f1ff
- inc a
- ld [TempMonLevel], a
- ld [CurPartyLevel], a
- ld [BattleMonLevel], a
- push de
- call Function3f21b
- ld c, $40
- call Function3f22c
- call PrintPlayerHUD
- ld hl, BattleMonNick
- ld de, StringBuffer1
- ld bc, $000b
- call CopyBytes
- call Function3dfe
- ld de, SFX_HIT_END_OF_EXP_BAR
- call PlaySFX
- callba Function8e79d
- call WaitSFX
- ld hl, BattleText_0x80c9c
- call StdBattleTextBox
- pop de
- inc e
- ld b, $0
- jr .asm_3f1b7
-
-.asm_3f1ff
- push bc
- ld b, d
- ld de, $d118
- call Function3f39c
- ld a, b
- pop bc
- ld c, a
- call Function3f21b
- call Function3f22c
- call Function3dfe
- pop af
- ld [$ffb5], a
- pop af
- ld [$ffb6], a
-
-.asm_3f219
- pop bc
- ret
-; 3f21b
-
-Function3f21b: ; 3f21b
- push bc
- call WaitSFX
- ld de, SFX_EXP_BAR
- call PlaySFX
- ld c, 10
- call DelayFrames
- pop bc
- ret
-; 3f22c
-
-Function3f22c: ; 3f22c
- ld d, $3
- dec b
-.asm_3f22f
- inc b
- push bc
- push de
- ld hl, $c58d
- call Function3f41c
- pop de
- ld a, $1
- ld [hBGMapMode], a
- ld c, d
- call DelayFrames
- xor a
- ld [hBGMapMode], a
- pop bc
- ld a, c
- cp b
- jr z, .asm_3f268
- inc b
- push bc
- push de
- ld hl, $c58d
- call Function3f41c
- pop de
- ld a, $1
- ld [hBGMapMode], a
- ld c, d
- call DelayFrames
- xor a
- ld [hBGMapMode], a
- dec d
- jr nz, .asm_3f263
- ld d, $1
-
-.asm_3f263
- pop bc
- ld a, c
- cp b
- jr nz, .asm_3f22f
-
-.asm_3f268
- ld a, $1
- ld [hBGMapMode], a
- ret
-; 3f26d
-
-
-
-Function3f26d: ; 3f26d
-; SendOutMonText?
-
- ld a, [InLinkBattle]
- and a
- jr z, .asm_3f27c
- ld hl, UnknownText_0x3f2d1
- ld a, [$d264]
- and a
- jr nz, .asm_3f2ce
-
-.asm_3f27c
- ld hl, EnemyMonHPHi
- ld a, [hli]
- or [hl]
- ld hl, UnknownText_0x3f2d1
- jr z, .asm_3f2ce
- xor a
- ld [hMultiplicand], a
- ld hl, EnemyMonHPHi
- ld a, [hli]
- ld [$c6ea], a
- ld [$ffb5], a
- ld a, [hl]
- ld [$c6eb], a
- ld [$ffb6], a
- ld a, $19
- ld [hMultiplier], a
- call Multiply
- ld hl, EnemyMonMaxHPHi
- ld a, [hli]
- ld b, [hl]
- srl a
- rr b
- srl a
- rr b
- ld a, b
- ld b, $4
- ld [hMultiplier], a
- call Divide
- ld a, [$ffb6]
- ld hl, UnknownText_0x3f2d1
- cp $46
- jr nc, .asm_3f2ce
- ld hl, UnknownText_0x3f2d8
- cp $28
- jr nc, .asm_3f2ce
- ld hl, UnknownText_0x3f2df
- cp $a
- jr nc, .asm_3f2ce
- ld hl, UnknownText_0x3f2e6
-
-.asm_3f2ce
- jp BattleTextBox
-; 3f2d1
-
-
-UnknownText_0x3f2d1: ; 3f2d1
- text_jump UnknownText_0x1c02df
- start_asm
- jr Function3f2eb
-; 3f2d6
-
-UnknownText_0x3f2d8: ; 3f2d8
- text_jump UnknownText_0x1c02e6
- start_asm
- jr Function3f2eb
-; 3f2dd
-
-UnknownText_0x3f2df: ; 3f2df
- text_jump UnknownText_0x1c02f0
- start_asm
- jr Function3f2eb
-; 3f2e4
-
-UnknownText_0x3f2e6: ; 3f2e6
- text_jump UnknownText_0x1c02fe
- start_asm
-; 3f2eb
-
-Function3f2eb: ; 3f2eb
- ld hl, UnknownText_0x3f2ef
- ret
-; 3f2ef
-
-UnknownText_0x3f2ef: ; 3f2ef
- text_jump UnknownText_0x1c0317
- db "@"
-; 3f2f4
-
-
-Function3f2f4: ; 3f2f4
- ld hl, UnknownText_0x3f2fa
- jp BattleTextBox
-; 3f2fa
-
-UnknownText_0x3f2fa: ; 3f2fa
- text_jump UnknownText_0x1c031d
- start_asm
-; 3f2ff
-
-Function3f2ff: ; 3f2ff
- push de
- push bc
- ld hl, EnemyMonHPLo
- ld de, $c6eb
- ld b, [hl]
- dec hl
- ld a, [de]
- sub b
- ld [$ffb6], a
- dec de
- ld b, [hl]
- ld a, [de]
- sbc b
- ld [$ffb5], a
- ld a, $19
- ld [hMultiplier], a
- call Multiply
- ld hl, EnemyMonMaxHPHi
- ld a, [hli]
- ld b, [hl]
- srl a
- rr b
- srl a
- rr b
- ld a, b
- ld b, $4
- ld [hMultiplier], a
- call Divide
- pop bc
- pop de
- ld a, [$ffb6]
- ld hl, UnknownText_0x3f348
- and a
- ret z
- ld hl, UnknownText_0x3f35b
- cp $1e
- ret c
- ld hl, UnknownText_0x3f34d
- cp $46
- ret c
- ld hl, UnknownText_0x3f352
- ret
-; 3f348
-
-UnknownText_0x3f348: ; 3f348
- text_jump UnknownText_0x1c0324
- db "@"
-; 3f34d
-
-UnknownText_0x3f34d: ; 3f34d
- text_jump UnknownText_0x1c0340
- db "@"
-; 3f352
-
-UnknownText_0x3f352: ; 3f352
- text_jump UnknownText_0x1c0352
- db "@"
-; 3f357
-
-Function3f357: ; 3f357
- ld hl, UnknownText_0x3f35b
- ret
-; 3f35b
-
-UnknownText_0x3f35b: ; 3f35b
- text_jump UnknownText_0x1c0366
- db "@"
-; 3f360
-
-
-Function3f360: ; 3f360
- ld hl, $c6f0
- ld a, [hl]
- and a
- jr z, .asm_3f36d
- dec [hl]
- ld hl, BattleText_0x80cba
- jr .asm_3f388
-
-.asm_3f36d
- dec hl
- ld a, [hl]
- and a
- ret z
- dec [hl]
- ld hl, BattleText_0x80cd1
- jr nz, .asm_3f388
- push hl
- ld a, [EnemyMonSpecies]
- ld [CurSpecies], a
- call GetBaseData
- ld a, [BaseCatchRate]
- ld [EnemyMonCatchRate], a
- pop hl
-
-.asm_3f388
- push hl
- call Function30b4
- pop hl
- jp StdBattleTextBox
-; 3f390
-
-
-FillInExpBar: ; 3f390
- push hl
- call Function3f39c
- pop hl
- ld de, $0007
- add hl, de
- jp Function3f41c
-; 3f39c
-
-Function3f39c: ; 3f39c
- push de
- ld d, b
- push de
- callab Function50e47
- pop de
- ld hl, hMultiplicand
- ld a, [hli]
- push af
- ld a, [hli]
- push af
- ld a, [hl]
- push af
- inc d
- callab Function50e47
- ld hl, $ffb6
- ld a, [hl]
- ld [$ffba], a
- pop bc
- sub b
- ld [hld], a
- ld a, [hl]
- ld [$ffb9], a
- pop bc
- sbc b
- ld [hld], a
- ld a, [hl]
- ld [hMathBuffer], a
- pop bc
- sbc b
- ld [hl], a
- pop de
- ld hl, $ffb5
- ld a, [hli]
- push af
- ld a, [hl]
- push af
- ld a, [de]
- dec de
- ld c, a
- ld a, [$ffba]
- sub c
- ld [hld], a
- ld a, [de]
- dec de
- ld b, a
- ld a, [$ffb9]
- sbc b
- ld [hld], a
- ld a, [de]
- ld c, a
- ld a, [hMathBuffer]
- sbc c
- ld [hld], a
- xor a
- ld [hl], a
- ld a, $40
- ld [hMultiplier], a
- call Multiply
- pop af
- ld c, a
- pop af
- ld b, a
-.asm_3f3f4
- ld a, b
- and a
- jr z, .asm_3f40c
- srl b
- rr c
- ld hl, hProduct
- srl [hl]
- inc hl
- rr [hl]
- inc hl
- rr [hl]
- inc hl
- rr [hl]
- jr .asm_3f3f4
-
-.asm_3f40c
- ld a, c
- ld [hMultiplier], a
- ld b, $4
- call Divide
- ld a, [$ffb6]
- ld b, a
- ld a, $40
- sub b
- ld b, a
- ret
-; 3f41c
-
-Function3f41c: ; 3f41c
- ld c, $8
-.asm_3f41e
- ld a, b
- sub $8
- jr c, .asm_3f42c
- ld b, a
- ld a, $6a
- ld [hld], a
- dec c
- jr z, .asm_3f43c
- jr .asm_3f41e
-
-.asm_3f42c
- add $8
- jr z, .asm_3f434
- add $54
- jr .asm_3f436
-
-.asm_3f434
- ld a, $62
-
-.asm_3f436
- ld [hld], a
- ld a, $62
- dec c
- jr nz, .asm_3f434
-
-.asm_3f43c
- ret
-; 3f43d
-
-Function3f43d: ; 3f43d
- ld a, [PlayerSubStatus4]
- bit 4, a
- ld hl, BattleAnimCmd_DD
- jr nz, asm_3f46f
-Function3f447: ; 3f447
- ld a, [$c6fe]
- and a
- ld hl, BattleAnimCmd_E2
- jr nz, asm_3f46f
- ld a, [CurPartySpecies]
- push af
- ld a, [BattleMonSpecies]
- ld [CurPartySpecies], a
- ld hl, BattleMonAtkDefDV
- ld a, $2d
- call Predef
- ld de, $9310
- ld a, $3d
- call Predef
- pop af
- ld [CurPartySpecies], a
- ret
-
-asm_3f46f
- ld a, [hBattleTurn]
- push af
- xor a
- ld [hBattleTurn], a
- ld a, BANK(BattleAnimCommands)
- rst FarCall
- pop af
- ld [hBattleTurn], a
- ret
-; 3f47c
-
-Function3f47c: ; 3f47c
- ld a, [EnemySubStatus4]
- bit 4, a
- ld hl, BattleAnimCmd_DD
- jr nz, asm_3f4b4
-Function3f486: ; 3f486
- ld a, [$c6fa]
- and a
- ld hl, BattleAnimCmd_E2
- jr nz, asm_3f4b4
- ld a, [CurPartySpecies]
- push af
- ld a, [EnemyMonSpecies]
- ld [CurSpecies], a
- ld [CurPartySpecies], a
- call GetBaseData
- ld hl, EnemyMonAtkDefDV
- ld a, $2d
- call Predef
- ld de, VTiles2
- ld a, $3e
- call Predef
- pop af
- ld [CurPartySpecies], a
- ret
-
-asm_3f4b4
- ld a, [hBattleTurn]
- push af
- call SetEnemyTurn
- ld a, BANK(BattleAnimCommands)
- rst FarCall
- pop af
- ld [hBattleTurn], a
- ret
-; 3f4c1
-
-
-StartBattle: ; 3f4c1
- ld a, [PartyCount]
- and a
- ret z
- ld a, [TimeOfDayPal]
- push af
- call Function3f4dd
- call Function3c000
- call Function3f69e
- pop af
- ld [TimeOfDayPal], a
- scf
- ret
-; 3f4d9
-
-
-Function3f4d9: ; 3f4d9
- call Function3c000
- ret
-; 3f4dd
-
-
-Function3f4dd: ; 3f4dd
- callba Function106050
- call Function3f54e
- xor a
- ld [TempBattleMonSpecies], a
- ld [$d0d2], a
- xor a
- ld [$ffde], a
- callba PlayBattleMusic
- callba Function2ee18
- callba Function2ee2f
- call Function2ed3
- callba ClearBattleRAM
- call Function3f55e
- call Function3f568
- ld b, $0
- call GetSGBLayout
- ld hl, rLCDC
- res 6, [hl]
- call Function3fb6c
- call BattleStartMessage
- ld hl, rLCDC
- set 6, [hl]
- xor a
- ld [hBGMapMode], a
- call EmptyBattleTextBox
- hlcoord 9, 7
- ld bc, 5 << 8 + 11
- call ClearBox
- hlcoord 1, 0
- ld bc, 4 << 8 + 10
- call ClearBox
- call ClearSprites
- ld a, [IsInBattle]
- cp $1
- call z, Function3e036
- ld a, $1
- ld [hBGMapMode], a
- ret
-; 3f54e
-
-Function3f54e: ; 3f54e
- ld a, [OtherTrainerClass]
- and a
- jr nz, .asm_3f55a
- ld a, [$d22e]
- ld [CurPartySpecies], a
-
-.asm_3f55a
- ld [TempEnemyMonSpecies], a
- ret
-; 3f55e
-
-Function3f55e: ; 3f55e
- ld a, [OtherTrainerClass]
- and a
- jp nz, Function3f594
- jp Function3f607
-; 3f568
-
-Function3f568: ; 3f568
- ld a, [rSVBK]
- push af
- ld a, $6
- ld [rSVBK], a
- ld hl, $d000
- ld bc, VBlank5
- ld a, $2
- call ByteFill
- ld a, [rVBK]
- push af
- ld a, $1
- ld [rVBK], a
- ld de, $d000
- ld hl, VBGMap0
- ld bc, $0f40
- call Request2bpp
- pop af
- ld [rVBK], a
- pop af
- ld [rSVBK], a
- ret
-; 3f594
-
-Function3f594: ; 3f594
- ld [TrainerClass], a
- callba Function10606a
- xor a
- ld [TempEnemyMonSpecies], a
- callab Function3957b
- callab Function39771
- ld a, [TrainerClass]
- cp $9
- jr nz, .asm_3f5b8
- xor a
- ld [OTPartyMon1Item], a
-
-.asm_3f5b8
- ld de, VTiles2
- callab Function5120d
- xor a
- ld [$ffad], a
- dec a
- ld [$c6e6], a
- ld hl, $c4ac
- ld bc, $0707
- ld a, $13
- call Predef
- ld a, $ff
- ld [CurOTMon], a
- ld a, $2
- ld [IsInBattle], a
- call IsJohtoGymLeader
- jr nc, .asm_3f606
- xor a
- ld [CurPartyMon], a
- ld a, [PartyCount]
- ld b, a
-.asm_3f5ea
- push bc
- ld a, $22
- call GetPartyParamLocation
- ld a, [hli]
- or [hl]
- jr z, .asm_3f5fc
- ld c, $4
- callab ChangeHappiness
-
-.asm_3f5fc
- pop bc
- dec b
- jr z, .asm_3f606
- ld hl, CurPartyMon
- inc [hl]
- jr .asm_3f5ea
-
-.asm_3f606
- ret
-; 3f607
-
-Function3f607: ; 3f607
- ld a, $1
- ld [IsInBattle], a
- callba Function10605d
- call LoadEnemyMon
- ld hl, EnemyMonMove1
- ld de, $c735
- ld bc, $0004
- call CopyBytes
- ld hl, EnemyMonPPMove1
- ld de, $c739
- ld bc, $0004
- call CopyBytes
- ld hl, EnemyMonAtkDefDV
- ld a, $2d
- call Predef
- ld a, [CurPartySpecies]
- cp $c9
- jr nz, .asm_3f648
- ld a, [$def4]
- and a
- jr nz, .asm_3f648
- ld a, [UnownLetter]
- ld [$def4], a
-
-.asm_3f648
- ld de, VTiles2
- ld a, $3e
- call Predef
- xor a
- ld [TrainerClass], a
- ld [$ffad], a
- ld hl, $c4ac
- ld bc, $0707
- ld a, $13
- call Predef
- ret
-; 3f662
-
-Function3f662: ; 3f662
- ld hl, EnemyMonMove1
- ld de, $d25e
- ld b, $4
-.asm_3f66a
- ld a, [de]
- inc de
- ld [hli], a
- and a
- jr z, .asm_3f690
- push bc
- push hl
- push hl
- dec a
- ld hl, $5b00
- ld bc, $0007
- call AddNTimes
- ld a, $10
- call GetFarByte
- pop hl
- ld bc, $0005
- add hl, bc
- ld [hl], a
- pop hl
- pop bc
- dec b
- jr nz, .asm_3f66a
- ret
-
-.asm_3f68e
- xor a
- ld [hli], a
-
-.asm_3f690
- push bc
- push hl
- ld bc, $0005
- add hl, bc
- xor a
- ld [hl], a
- pop hl
- pop bc
- dec b
- jr nz, .asm_3f68e
- ret
-; 3f69e
-
-
-Function3f69e: ; 3f69e
- call Function3f6a5
- call Function3f6d0
- ret
-; 3f6a5
-
-Function3f6a5: ; 3f6a5
- ld a, [InLinkBattle]
- and a
- jr z, .asm_3f6b7
- call Function3f759
- ld c, $96
- call DelayFrames
- call Function3f77c
- ret
-
-.asm_3f6b7
- ld a, [$d0ee]
- and $f
- ret nz
- call Function3f71d
- xor a
- ld [$d1e9], a
- ld a, $1c
- call Predef
- callba Function2ed44
- ret
-; 3f6d0
-
-Function3f6d0: ; 3f6d0
- call Function3f998
- xor a
- ld [Danger], a
- ld [IsInBattle], a
- ld [BattleType], a
- ld [AttackMissed], a
- ld [$d22e], a
- ld [OtherTrainerClass], a
- ld [$d266], a
- ld [$d267], a
- ld [$d232], a
- ld [$d0d8], a
- ld [$d0da], a
- ld [$d0d9], a
- ld [$d0d2], a
- ld [CurMoveNum], a
- ld [$d0db], a
- ld [$d0d6], a
- ld [$d0e4], a
- ld [$d0e0], a
- ld [$d0df], a
- ld [$d0e1], a
- ld hl, PlayerSubStatus1
- ld b, $18
-.asm_3f715
- ld [hli], a
- dec b
- jr nz, .asm_3f715
- call WaitSFX
- ret
-; 3f71d
-
-Function3f71d: ; 3f71d
- ld hl, $c6ec
- ld a, [hli]
- or [hl]
- inc hl
- or [hl]
- ret z
- ld a, [$c73d]
- and a
- jr z, .asm_3f73d
- ld hl, $c6ee
- sla [hl]
- dec hl
- rl [hl]
- dec hl
- rl [hl]
- jr nc, .asm_3f73d
- ld a, $ff
- ld [hli], a
- ld [hli], a
- ld [hl], a
-
-.asm_3f73d
- ld hl, $c6ee
- ld de, $d850
- call Function3d0be
- ld hl, BattleText_0x80730
- call StdBattleTextBox
- ld a, [$cfc0]
- bit 0, a
- ret z
- call ClearTileMap
- call WhiteBGMap
- ret
-; 3f759
-
-Function3f759: ; 3f759
- callba Function1060df
- callba Function106187
- ld a, [CurOTMon]
- ld hl, OTPartyMon1Status
- call GetPartyLocation
- ld a, [EnemyMonStatus]
- ld [hl], a
- call ClearTileMap
- callba Function2c1b2
- ret
-; 3f77c
-
-Function3f77c: ; 3f77c
- callba Function3d2e0
- jp c, Function3f80f
- call Function3f830
- jr nz, .asm_3f797
- ld hl, $cd2a
- bit 4, [hl]
- jr z, .asm_3f797
- callba Function2b930
-
-.asm_3f797
- ld a, [$d0ee]
- and $f
- cp $1
- jr c, .asm_3f7ad
- jr z, .asm_3f7b8
- callba Function106107
- ld de, .Draw
- jr .asm_3f7c3
-
-.asm_3f7ad
- callba Function1060fb
- ld de, .Win
- jr .asm_3f7c3
-
-.asm_3f7b8
- callba Function106101
- ld de, .Lose
- jr .asm_3f7c3
-
-.asm_3f7c3
- ld hl, $c546
- call PlaceString
- callba Function106187
- ld c, $c8
- call DelayFrames
- ld a, $1
- call GetSRAMBank
- call Function3fa42
- call Function3f85f
- call CloseSRAM
- call Function3f830
- jr z, .asm_3f7ee
- call Functiona80
- call ClearTileMap
- ret
-
-.asm_3f7ee
- ld c, $c8
- call DelayFrames
- call ClearTileMap
- ret
-; 3f7f7
-
-.Win
- db "YOU WIN@"
-.Lose
- db "YOU LOSE@"
-.Draw
- db " DRAW@"
-; 3f80f
-
-
-Function3f80f: ; 3f80f
- ld hl, $c546
- ld de, .Invalid
- call PlaceString
- ld c, $c8
- call DelayFrames
- call ClearTileMap
- ret
-; 3f821
-
-.Invalid
- db "INVALID BATTLE@"
-; 3f830
-
-
-Function3f830: ; 3f830
- ld a, [InLinkBattle]
- cp $4
- ret
-; 3f836
-
-
-Function3f836: ; 3f836
- ld a, $1
- call GetSRAMBank
- call Function3f85f
- call CloseSRAM
- ld hl, AttrMap
- xor a
- ld bc, $0168
- call ByteFill
- call Function3200
- ld b, $8
- call GetSGBLayout
- call Function32f9
- ld c, $8
- call DelayFrames
- call Functiona80
- ret
-; 3f85f
-
-
-Function3f85f: ; 3f85f
- call ClearTileMap
- call ClearSprites
- call .asm_3f8e0
- ld hl, $c540
- ld b, $5
- ld de, $b268
-.asm_3f870
- push bc
- push hl
- push de
- ld a, [de]
- and a
- jr z, .asm_3f8c9
- ld a, [$d4b4]
- and a
- jr z, .asm_3f8c9
- push hl
- push hl
- ld h, d
- ld l, e
- ld de, DefaultFlypoint
- ld bc, $000a
- call CopyBytes
- ld a, $50
- ld [de], a
- inc de
- ld bc, $0006
- call CopyBytes
- ld de, DefaultFlypoint
- pop hl
- call PlaceString
- pop hl
- ld de, $001a
- add hl, de
- push hl
- ld de, $d00d
- ld bc, $0204
- call PrintNum
- pop hl
- ld de, $0005
- add hl, de
- push hl
- ld de, $d00f
- ld bc, $0204
- call PrintNum
- pop hl
- ld de, $0005
- add hl, de
- ld de, $d011
- ld bc, $0204
- call PrintNum
- jr .asm_3f8cf
-
-.asm_3f8c9
- ld de, .Format
- call PlaceString
-
-.asm_3f8cf
- pop hl
- ld bc, $0012
- add hl, bc
- ld d, h
- ld e, l
- pop hl
- ld bc, $0028
- add hl, bc
- pop bc
- dec b
- jr nz, .asm_3f870
- ret
-
-.asm_3f8e0
- ld hl, $c4a1
- ld de, .Record
- call PlaceString
-
- ld hl, $c518
- ld de, .Result
- call PlaceString
-
- ld hl, $c4c8
- ld de, .Total
- call PlaceString
-
- ld hl, $c4f6
- ld de, $b260
- call .asm_3f92b
- jr c, .asm_3f92a
-
- ld bc, $0204
- call PrintNum
-
- ld hl, $c4fb
- ld de, $b262
- call .asm_3f92b
-
- ld bc, $0204
- call PrintNum
-
- ld hl, $c500
- ld de, $b264
- call .asm_3f92b
-
- ld bc, $0204
- call PrintNum
-
-.asm_3f92a
- ret
-
-.asm_3f92b
- ld a, [$d4b4]
- and a
- ret nz
- ld de, .Scores
- call PlaceString
- scf
- ret
-; 3f938
-
-.Scores
- db " 0 0 0@"
-; 3f947
-
-.Format ; 3f947
- db " --- ", $22, " - - -@"
-.Record ; 3f964
- db $52, "'s RECORD@"
-.Result ; 3f96e
- db "RESULT WIN LOSE DRAW@"
-.Total ; 3f983
- db "TOTAL WIN LOSE DRAW@"
-; 3f998
-
-
-Function3f998: ; 3f998
- ld a, [BattleType]
- cp BATTLETYPE_ROAMING
- jr nz, .asm_3f9c4
- ld a, [$d0ee]
- and $f
- jr z, .asm_3f9af
- call GetRoamMonHP
- ld a, [EnemyMonHPLo]
- ld [hl], a
- jr .asm_3f9ca
-
-.asm_3f9af
- call GetRoamMonHP
- ld [hl], $0
- call GetRoamMonMapGroup
- ld [hl], $ff
- call GetRoamMonMapNumber
- ld [hl], $ff
- call GetRoamMonSpecies
- ld [hl], $0
- ret
-
-.asm_3f9c4
- call BattleRandom
- and $f
- ret nz
-
-.asm_3f9ca
- callab Function2a30d
- ret
-; 3f9d1
-
-GetRoamMonMapGroup: ; 3f9d1
- ld a, [TempEnemyMonSpecies]
- ld b, a
- ld a, [RoamMon1Species]
- cp b
- ld hl, RoamMon1MapGroup
- ret z
- ld a, [RoamMon2Species]
- cp b
- ld hl, RoamMon2MapGroup
- ret z
- ld hl, RoamMon3MapGroup
- ret
-; 3f9e9
-
-GetRoamMonMapNumber: ; 3f9e9
- ld a, [TempEnemyMonSpecies]
- ld b, a
- ld a, [RoamMon1Species]
- cp b
- ld hl, RoamMon1MapNumber
- ret z
- ld a, [RoamMon2Species]
- cp b
- ld hl, RoamMon2MapNumber
- ret z
- ld hl, RoamMon3MapNumber
- ret
-; 3fa01
-
-GetRoamMonHP: ; 3fa01
-; output: hl = RoamMonCurHP
- ld a, [TempEnemyMonSpecies]
- ld b, a
- ld a, [RoamMon1Species]
- cp b
- ld hl, RoamMon1CurHP
- ret z
- ld a, [RoamMon2Species]
- cp b
- ld hl, RoamMon2CurHP
- ret z
- ld hl, RoamMon3CurHP
- ret
-; 3fa19
-
-GetRoamMonDVs: ; 3fa19
-; output: hl = RoamMonDVs
- ld a, [TempEnemyMonSpecies]
- ld b, a
- ld a, [RoamMon1Species]
- cp b
- ld hl, RoamMon1DVs
- ret z
- ld a, [RoamMon2Species]
- cp b
- ld hl, RoamMon2DVs
- ret z
- ld hl, RoamMon3DVs
- ret
-; 3fa31
-
-GetRoamMonSpecies: ; 3fa31
- ld a, [TempEnemyMonSpecies]
- ld hl, RoamMon1Species
- cp [hl]
- ret z
- ld hl, RoamMon2Species
- cp [hl]
- ret z
- ld hl, RoamMon3Species
- ret
-; 3fa42
-
-
-Function3fa42: ; 3fa42
- ld hl, $d276
- ld de, StringBuffer1
- ld bc, $0002
- call CopyBytes
- ld hl, $d26b
- ld bc, $000a
- call CopyBytes
- ld hl, $b254
- call Function3faa0
- ld hl, $b266
- ld d, $5
-.asm_3fa62
- push hl
- inc hl
- inc hl
- ld a, [hl]
- dec hl
- dec hl
- and a
- jr z, .asm_3fa85
- push de
- ld bc, $000c
- ld de, StringBuffer1
- call CompareLong
- pop de
- pop hl
- jr c, .asm_3fa99
- ld bc, $0012
- add hl, bc
- dec d
- jr nz, .asm_3fa62
- ld bc, $ffee
- add hl, bc
- push hl
-
-.asm_3fa85
- ld d, h
- ld e, l
- ld hl, StringBuffer1
- ld bc, $000c
- call CopyBytes
- ld b, $6
- xor a
-.asm_3fa93
- ld [de], a
- inc de
- dec b
- jr nz, .asm_3fa93
- pop hl
-
-.asm_3fa99
- call Function3faa0
- call Function3fac8
- ret
-; 3faa0
-
-Function3faa0: ; 3faa0
- ld a, [$d0ee]
- and $f
- cp $1
- ld bc, $000d
- jr c, .asm_3fab4
- ld bc, $000f
- jr z, .asm_3fab4
- ld bc, $0011
-
-.asm_3fab4
- add hl, bc
- call Function3fabe
- ret nc
- inc [hl]
- ret nz
- dec hl
- inc [hl]
- ret
-; 3fabe
-
-Function3fabe: ; 3fabe
- dec hl
- ld a, [hl]
- inc hl
- cp $27
- ret c
- ld a, [hl]
- cp $f
- ret
-; 3fac8
-
-Function3fac8: ; 3fac8
- ld b, $5
- ld hl, $b277
- ld de, DefaultFlypoint
-.asm_3fad0
- push bc
- push de
- push hl
- call Function3fb54
- pop hl
- ld a, e
- pop de
- ld [de], a
- inc de
- ld a, b
- ld [de], a
- inc de
- ld a, c
- ld [de], a
- inc de
- ld bc, $0012
- add hl, bc
- pop bc
- dec b
- jr nz, .asm_3fad0
- ld b, $0
- ld c, $1
-.asm_3faed
- ld a, b
- add b
- add b
- ld e, a
- ld d, $0
- ld hl, DefaultFlypoint
- add hl, de
- push hl
- ld a, c
- add c
- add c
- ld e, a
- ld d, $0
- ld hl, DefaultFlypoint
- add hl, de
- ld d, h
- ld e, l
- pop hl
- push bc
- ld c, $3
- call StringCmp
- pop bc
- jr z, .asm_3fb10
- jr nc, .asm_3fb1f
-
-.asm_3fb10
- inc c
- ld a, c
- cp $5
- jr nz, .asm_3faed
- inc b
- ld c, b
- inc c
- ld a, b
- cp $4
- jr nz, .asm_3faed
- ret
-
-.asm_3fb1f
- push bc
- ld a, b
- ld bc, $0012
- ld hl, $b266
- call AddNTimes
- push hl
- ld de, DefaultFlypoint
- ld bc, $0012
- call CopyBytes
- pop hl
- pop bc
- push hl
- ld a, c
- ld bc, $0012
- ld hl, $b266
- call AddNTimes
- pop de
- push hl
- ld bc, $0012
- call CopyBytes
- ld hl, DefaultFlypoint
- ld bc, $0012
- pop de
- call CopyBytes
- ret
-; 3fb54
-
-Function3fb54: ; 3fb54
- ld e, $0
- ld a, [hld]
- ld c, a
- ld a, [hld]
- ld b, a
- ld a, [hld]
- add c
- ld c, a
- ld a, [hld]
- adc b
- ld b, a
- jr nc, .asm_3fb63
- inc e
-
-.asm_3fb63
- ld a, [hld]
- add c
- ld c, a
- ld a, [hl]
- adc b
- ld b, a
- ret nc
- inc e
- ret
-; 3fb6c
-
-Function3fb6c: ; 3fb6c
- call Function3fbf8
- ld hl, $c590
- ld b, $4
- ld c, $12
- call TextBox
- callba MobileTextBorder
- ld hl, $c505
- ld bc, $0307
- call ClearBox
- call Functione51
- call Function3ed9f
- call Function3fbd6
- xor a
- ld [$ffde], a
- ld [hSCY], a
- ld a, $90
- ld [hWY], a
- ld [rWY], a
- call WaitBGMap
- xor a
- ld [hBGMapMode], a
- callba Function4e980
- ld a, $1
- ld [hBGMapMode], a
- ld a, $31
- ld [$ffad], a
- ld hl, $c51a
- ld bc, $0606
- ld a, $13
- call Predef
- xor a
- ld [hWY], a
- ld [rWY], a
- call WaitBGMap
- call HideSprites
- ld b, $1
- call GetSGBLayout
- call Function32f9
- ld a, $90
- ld [hWY], a
- xor a
- ld [hSCX], a
- ret
-; 3fbd6
-
-Function3fbd6: ; 3fbd6
- ld a, [rSVBK]
- push af
- ld a, $6
- ld [rSVBK], a
- ld hl, $d000
- ld bc, VBlank5
- ld a, $7f
- call ByteFill
- ld de, $d000
- ld hl, VBGMap0
- ld bc, $0f40
- call Request2bpp
- pop af
- ld [rSVBK], a
- ret
-; 3fbf8
-
-Function3fbf8: ; 3fbf8
- call GetBattleBackpic
- call Function3fc30
- ret
-; 3fbff
-
-
-GetBattleBackpic: ; 3fbff
-; Load the player character's backpic (6x6) into VRAM starting from $9310.
-
-; Special exception for Dude.
- ld b, BANK(DudeBackpic)
- ld hl, DudeBackpic
- ld a, [BattleType]
- cp BATTLETYPE_TUTORIAL
- jr z, .Decompress
-
-; What gender are we?
- ld a, [$d45b]
- bit 2, a
- jr nz, .Chris
- ld a, [PlayerGender]
- bit 0, a
- jr z, .Chris
-
-; It's a girl.
- callba GetKrisBackpic
- ret
-
-.Chris
-; It's a boy.
- ld b, BANK(ChrisBackpic)
- ld hl, ChrisBackpic
-
-.Decompress
- ld de, $9310
- ld c, $31
- ld a, PREDEF_DECOMPRESS
- call Predef
- ret
-; 3fc30
-
-
-Function3fc30: ; 3fc30
- ld a, [rSVBK]
- push af
- ld a, $6
- ld [rSVBK], a
- ld hl, VTiles0
- ld de, $9310
- ld a, [hROMBank]
- ld b, a
- ld c, $31
- call Get2bpp
- pop af
- ld [rSVBK], a
- call Function3fc5b
- ld a, $31
- ld [$ffad], a
- ld hl, $c51a
- ld bc, $0606
- ld a, $13
- call Predef
- ret
-; 3fc5b
-
-Function3fc5b: ; 3fc5b
- ld hl, Sprites
- xor a
- ld [hConnectionStripLength], a
- ld b, $6
- ld e, $a8
-.asm_3fc65
- ld c, $3
- ld d, $40
-.asm_3fc69
- ld [hl], d
- inc hl
- ld [hl], e
- inc hl
- ld a, [hConnectionStripLength]
- ld [hli], a
- inc a
- ld [hConnectionStripLength], a
- ld a, $1
- ld [hli], a
- ld a, d
- add $8
- ld d, a
- dec c
- jr nz, .asm_3fc69
- ld a, [hConnectionStripLength]
- add $3
- ld [hConnectionStripLength], a
- ld a, e
- add $8
- ld e, a
- dec b
- jr nz, .asm_3fc65
- ret
-; 3fc8b
-
-
-BattleStartMessage: ; 3fc8b
- ld a, [IsInBattle]
- dec a
- jr z, .asm_3fcaa
-
- ld de, SFX_SHINE
- call PlaySFX
- call WaitSFX
-
- ld c, 20
- call DelayFrames
-
- callba Function39939
-
- ld hl, WantsToBattleText
- jr .asm_3fd0e
-
-.asm_3fcaa
- call Function3da79
- jr nc, .asm_3fcc2
-
- xor a
- ld [$cfca], a
- ld a, 1
- ld [hBattleTurn], a
- ld a, 1
- ld [$c689], a
- ld de, $0101
- call Function3ee17
-
-.asm_3fcc2
- callba CheckSleepingTreeMon
- jr c, .asm_3fceb
-
- callba CheckBattleScene
- jr c, .asm_3fce0
-
- hlcoord 12, 0
- ld d, $0
- ld e, $1
- ld a, $47
- call Predef
- jr .asm_3fceb
-
-.asm_3fce0
- ld a, $0f
- ld [CryTracks], a
- ld a, [TempEnemyMonSpecies]
- call Function37b6
-
-.asm_3fceb
- ld a, [BattleType]
- cp BATTLETYPE_FISH
- jr nz, .asm_3fcfd
-
- callba Function106086
-
- ld hl, HookedPokemonAttackedText
- jr .asm_3fd0e
-
-.asm_3fcfd
- ld hl, PokemonFellFromTreeText
- cp BATTLETYPE_TREE
- jr z, .asm_3fd0e
- ld hl, WildPokemonAppearedText2
- cp $b
- jr z, .asm_3fd0e
- ld hl, WildPokemonAppearedText
-
-.asm_3fd0e
- push hl
- callba Function2c000
- pop hl
- call StdBattleTextBox
-
- call Function3f830
- ret nz
-
- ld c, $2
- callba Function4ea0a
-
- ret
-; 3fd26
-
-
dw $0000 ; padding
-
BattleCommandPointers: ; 3fd28
-
INCLUDE "battle/effect_command_pointers.asm"