summaryrefslogtreecommitdiff
path: root/engine/start_battle.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/start_battle.asm')
-rw-r--r--engine/start_battle.asm197
1 files changed, 197 insertions, 0 deletions
diff --git a/engine/start_battle.asm b/engine/start_battle.asm
new file mode 100644
index 000000000..51f46b3f2
--- /dev/null
+++ b/engine/start_battle.asm
@@ -0,0 +1,197 @@
+ShowLinkBattleParticipants: ; 2ee18
+; If we're not in a communications room,
+; we don't need to be here.
+ ld a, [wLinkMode]
+ and a
+ ret z
+
+ callba _ShowLinkBattleParticipants
+ ld c, 150
+ call DelayFrames
+ call ClearTileMap
+ call ClearSprites
+ ret
+
+FindFirstAliveMonAndStartBattle: ; 2ee2f
+ xor a
+ ld [hMapAnims], a
+ call DelayFrame
+ ld b, 6
+ ld hl, PartyMon1HP
+ ld de, PARTYMON_STRUCT_LENGTH - 1
+
+.loop
+ ld a, [hli]
+ or [hl]
+ jr nz, .okay
+ add hl, de
+ dec b
+ jr nz, .loop
+
+.okay
+ ld de, MON_LEVEL - MON_HP
+ add hl, de
+ ld a, [hl]
+ ld [BattleMonLevel], a
+ predef Predef_StartBattle
+ callba _LoadBattleFontsHPBar
+ ld a, 1
+ ld [hBGMapMode], a
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld [hWY], a
+ ld [rWY], a
+ ld [hMapAnims], a
+ ret
+
+PlayBattleMusic: ; 2ee6c
+ push hl
+ push de
+ push bc
+
+ xor a
+ ld [MusicFade], a
+ ld de, MUSIC_NONE
+ call PlayMusic
+ call DelayFrame
+ call MaxVolume
+
+ ld a, [BattleType]
+ cp BATTLETYPE_SUICUNE
+ ld de, MUSIC_SUICUNE_BATTLE
+ jp z, .done
+ cp BATTLETYPE_ROAMING
+ jp z, .done
+
+ ; Are we fighting a trainer?
+ ld a, [OtherTrainerClass]
+ and a
+ jr nz, .trainermusic
+
+ callba RegionCheck
+ ld a, e
+ and a
+ jr nz, .kantowild
+
+ ld de, MUSIC_JOHTO_WILD_BATTLE
+ ld a, [TimeOfDay]
+ cp NITE_F
+ jr nz, .done
+ ld de, MUSIC_JOHTO_WILD_BATTLE_NIGHT
+ jr .done
+
+.kantowild
+ ld de, MUSIC_KANTO_WILD_BATTLE
+ jr .done
+
+.trainermusic
+ ld de, MUSIC_CHAMPION_BATTLE
+ cp CHAMPION
+ jr z, .done
+ cp RED
+ jr z, .done
+
+ ; really, they should have included admins and scientists here too...
+ ld de, MUSIC_ROCKET_BATTLE
+ cp GRUNTM
+ jr z, .done
+ cp GRUNTF
+ jr z, .done
+
+ ld de, MUSIC_KANTO_GYM_LEADER_BATTLE
+ callba IsKantoGymLeader
+ jr c, .done
+
+ ld de, MUSIC_JOHTO_GYM_LEADER_BATTLE
+ callba IsJohtoGymLeader
+ jr c, .done
+
+ ld de, MUSIC_RIVAL_BATTLE
+ ld a, [OtherTrainerClass]
+ cp RIVAL1
+ jr z, .done
+ cp RIVAL2
+ jr nz, .othertrainer
+
+ ld a, [OtherTrainerID]
+ cp RIVAL2_2_CHIKORITA ; Rival in Indigo Plateau
+ jr c, .done
+ ld de, MUSIC_CHAMPION_BATTLE
+ jr .done
+
+.othertrainer
+ ld a, [wLinkMode]
+ and a
+ jr nz, .johtotrainer
+
+ callba RegionCheck
+ ld a, e
+ and a
+ jr nz, .kantotrainer
+
+.johtotrainer
+ ld de, MUSIC_JOHTO_TRAINER_BATTLE
+ jr .done
+
+.kantotrainer
+ ld de, MUSIC_KANTO_TRAINER_BATTLE
+
+.done
+ call PlayMusic
+
+ pop bc
+ pop de
+ pop hl
+ ret
+
+ClearBattleRAM: ; 2ef18
+ xor a
+ ld [wPlayerAction], a
+ ld [wBattleResult], a
+
+ ld hl, wPartyMenuCursor
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+
+ ld [wMenuScrollPosition], a
+ ld [CriticalHit], a
+ ld [BattleMonSpecies], a
+ ld [wBattleParticipantsNotFainted], a
+ ld [CurBattleMon], a
+ ld [wForcedSwitch], a
+ ld [TimeOfDayPal], a
+ ld [PlayerTurnsTaken], a
+ ld [EnemyTurnsTaken], a
+ ld [EvolvableFlags], a
+
+ ld hl, PlayerHPPal
+ ld [hli], a
+ ld [hl], a
+
+ ld hl, BattleMonDVs
+ ld [hli], a
+ ld [hl], a
+
+ ld hl, EnemyMonDVs
+ ld [hli], a
+ ld [hl], a
+
+; Clear the entire BattleMons area
+ ld hl, wBattle
+ ld bc, wBattleEnd - wBattle
+ xor a
+ call ByteFill
+
+ callab ResetEnemyStatLevels
+
+ call ClearWindowData
+
+ ld hl, hBGMapAddress
+ xor a
+ ld [hli], a
+ ld [hl], VBGMap0 / $100
+ ret