diff options
-rw-r--r-- | battle/core.asm | 9479 | ||||
-rw-r--r-- | main.asm | 9479 |
2 files changed, 9480 insertions, 9478 deletions
diff --git a/battle/core.asm b/battle/core.asm new file mode 100644 index 000000000..aea371803 --- /dev/null +++ b/battle/core.asm @@ -0,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 + @@ -38424,9488 +38424,11 @@ INCLUDE "trainers/trainers.asm" 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 - -.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 - +INCLUDE "battle/core.asm" dw $0000 ; padding - BattleCommandPointers: ; 3fd28 - INCLUDE "battle/effect_command_pointers.asm" |