diff options
Diffstat (limited to 'engine/battle/start_battle.asm')
-rwxr-xr-x | engine/battle/start_battle.asm | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/engine/battle/start_battle.asm b/engine/battle/start_battle.asm new file mode 100755 index 00000000..7627a100 --- /dev/null +++ b/engine/battle/start_battle.asm @@ -0,0 +1,144 @@ +PlayBattleMusic: + push hl + push de + push bc + + xor a + ld [wMusicFade], a + ld de, MUSIC_NONE + call PlayMusic + call DelayFrame + call MaxVolume + + ; Are we fighting a trainer? + ld a, [wOtherTrainerClass] + and a + jr nz, .trainermusic + + farcall RegionCheck + ld a, e + and a + jr nz, .kantowild + + ld de, MUSIC_JOHTO_WILD_BATTLE + ld a, [wTimeOfDay] + 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 + + ; They should have included EXECUTIVEM, EXECUTIVEF, and SCIENTIST too... + ld de, MUSIC_ROCKET_BATTLE + cp GRUNTM + jr z, .done + cp GRUNTF + jr z, .done + + ld de, MUSIC_KANTO_GYM_LEADER_BATTLE + farcall IsKantoGymLeader + jr c, .done + + ; IsGymLeader also counts CHAMPION, RED, and the Kanto gym leaders + ; but they have been taken care of before this + ld de, MUSIC_JOHTO_GYM_LEADER_BATTLE + farcall IsGymLeader + jr c, .done + + ld de, MUSIC_RIVAL_BATTLE + ld a, [wOtherTrainerClass] + cp RIVAL1 + jr z, .done + cp RIVAL2 + jr nz, .othertrainer + + ld a, [wOtherTrainerID] + 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 + + farcall 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: + xor a + ld [wBattlePlayerAction], a + ld [wBattleResult], a + + ld hl, wPartyMenuCursor + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a + + ld [wMenuScrollPosition], a + ld [wCriticalHit], a + ld [wBattleMonSpecies], a + ld [wBattleParticipantsNotFainted], a + ld [wCurBattleMon], a + ld [wForcedSwitch], a + ld [wTimeOfDayPal], a + ld [wPlayerTurnsTaken], a + ld [wEnemyTurnsTaken], a + ld [wEvolvableFlags], a + + ld hl, wPlayerHPPal + ld [hli], a + ld [hl], a + + ld hl, wBattleMonDVs + ld [hli], a + ld [hl], a + + ld hl, wEnemyMonDVs + ld [hli], a + ld [hl], a + +; Clear the entire BattleMons area + ld hl, wBattle + ld bc, wBattleEnd - wBattle + xor a + call ByteFill + + callfar ResetEnemyStatLevels + + call ClearWindowData + + ld hl, hBGMapAddress + xor a ; LOW(vBGMap0) + ld [hli], a + ld [hl], HIGH(vBGMap0) + ret |