diff options
Diffstat (limited to 'audio.asm')
-rw-r--r-- | audio.asm | 233 |
1 files changed, 7 insertions, 226 deletions
@@ -352,248 +352,30 @@ INCLUDE "audio/sfx/cry21_3.asm" INCLUDE "audio/sfx/cry22_3.asm" - SECTION "Audio Engine 1", ROMX -PlayBattleMusic:: - xor a - ld [wAudioFadeOutControl], a - ld [wLowHealthAlarm], a - dec a - ld [wNewSoundID], a - call PlaySound ; stop music - call DelayFrame - ld c, BANK(Music_GymLeaderBattle) - ld a, [wGymLeaderNo] - and a - jr z, .notGymLeaderBattle - ld a, MUSIC_GYM_LEADER_BATTLE - jr .playSong -.notGymLeaderBattle - ld a, [wCurOpponent] - cp OPP_ID_OFFSET - jr c, .wildBattle - cp OPP_SONY3 - jr z, .finalBattle - cp OPP_LANCE - jr nz, .normalTrainerBattle - ld a, MUSIC_GYM_LEADER_BATTLE ; lance also plays gym leader theme - jr .playSong -.normalTrainerBattle - ld a, MUSIC_TRAINER_BATTLE - jr .playSong -.finalBattle - ld a, MUSIC_FINAL_BATTLE - jr .playSong -.wildBattle - ld a, MUSIC_WILD_BATTLE -.playSong - jp PlayMusic - - +INCLUDE "audio/play_battle_music.asm" INCLUDE "audio/engine_1.asm" +INCLUDE "audio/alternate_tempo.asm" -; an alternate start for MeetRival which has a different first measure -Music_RivalAlternateStart:: - ld c, BANK(Music_MeetRival) - ld a, MUSIC_MEET_RIVAL - call PlayMusic - ld hl, wChannelCommandPointers - ld de, Music_MeetRival_branch_b1a2 - call Audio1_OverwriteChannelPointer - ld de, Music_MeetRival_branch_b21d - call Audio1_OverwriteChannelPointer - ld de, Music_MeetRival_branch_b2b5 - -Audio1_OverwriteChannelPointer: - ld a, e - ld [hli], a - ld a, d - ld [hli], a - ret - -; an alternate tempo for MeetRival which is slightly slower -Music_RivalAlternateTempo:: - ld c, BANK(Music_MeetRival) - ld a, MUSIC_MEET_RIVAL - call PlayMusic - ld hl, wChannelCommandPointers - ld de, Music_MeetRival_branch_b119 - jp Audio1_OverwriteChannelPointer - -; applies both the alternate start and alternate tempo -Music_RivalAlternateStartAndTempo:: - call Music_RivalAlternateStart - ld hl, wChannelCommandPointers - ld de, Music_MeetRival_branch_b19b - jp Audio1_OverwriteChannelPointer - -; an alternate tempo for Cities1 which is used for the Hall of Fame room -Music_Cities1AlternateTempo:: - ld a, 10 - ld [wAudioFadeOutCounterReloadValue], a - ld [wAudioFadeOutCounter], a - ld a, $ff ; stop playing music after the fade-out is finished - ld [wAudioFadeOutControl], a - ld c, 100 - call DelayFrames ; wait for the fade-out to finish - ld c, BANK(Music_Cities1) - ld a, MUSIC_CITIES1 - call PlayMusic - ld hl, wChannelCommandPointers - ld de, Music_Cities1_branch_aa6f - jp Audio1_OverwriteChannelPointer +SECTION "Low Health Alarm (Audio Engine 2)", ROMX +INCLUDE "audio/low_health_alarm.asm" -SECTION "Audio Engine 2", ROMX -Music_DoLowHealthAlarm:: - ld a, [wLowHealthAlarm] - cp $ff - jr z, .disableAlarm - - bit 7, a ;alarm enabled? - ret z ;nope - - and $7f ;low 7 bits are the timer. - jr nz, .asm_21383 ;if timer > 0, play low tone. - - call .playToneHi - ld a, 30 ;keep this tone for 30 frames. - jr .asm_21395 ;reset the timer. - -.asm_21383 - cp 20 - jr nz, .asm_2138a ;if timer == 20, - call .playToneLo ;actually set the sound registers. - -.asm_2138a - ld a, $86 - ld [wChannelSoundIDs + Ch5], a ;disable sound channel? - ld a, [wLowHealthAlarm] - and $7f ;decrement alarm timer. - dec a - -.asm_21395 - ; reset the timer and enable flag. - set 7, a - ld [wLowHealthAlarm], a - ret - -.disableAlarm - xor a - ld [wLowHealthAlarm], a ;disable alarm - ld [wChannelSoundIDs + Ch5], a ;re-enable sound channel? - ld de, .toneDataSilence - jr .playTone - -;update the sound registers to change the frequency. -;the tone set here stays until we change it. -.playToneHi - ld de, .toneDataHi - jr .playTone - -.playToneLo - ld de, .toneDataLo - -;update sound channel 1 to play the alarm, overriding all other sounds. -.playTone - ld hl, rNR10 ;channel 1 sound register - ld c, $5 - xor a - -.copyLoop - ld [hli], a - ld a, [de] - inc de - dec c - jr nz, .copyLoop - ret - -;bytes to write to sound channel 1 registers for health alarm. -;starting at FF11 (FF10 is always zeroed), so these bytes are: -;length, envelope, freq lo, freq hi -.toneDataHi - db $A0,$E2,$50,$87 - -.toneDataLo - db $B0,$E2,$EE,$86 - -;written to stop the alarm -.toneDataSilence - db $00,$00,$00,$80 - - -INCLUDE "engine/menu/bills_pc.asm" +SECTION "Audio Engine 2", ROMX INCLUDE "audio/engine_2.asm" - - -Music_PokeFluteInBattle:: - ; begin playing the "caught mon" sound effect - ld a, SFX_CAUGHT_MON - call PlaySoundWaitForCurrent - ; then immediately overwrite the channel pointers - ld hl, wChannelCommandPointers + Ch5 * 2 - ld de, SFX_Pokeflute_Ch5 - call Audio2_OverwriteChannelPointer - ld de, SFX_Pokeflute_Ch6 - call Audio2_OverwriteChannelPointer - ld de, SFX_Pokeflute_Ch7 - -Audio2_OverwriteChannelPointer: - ld a, e - ld [hli], a - ld a, d - ld [hli], a - ret +INCLUDE "audio/poke_flute.asm" SECTION "Audio Engine 3", ROMX -PlayPokedexRatingSfx:: - ld a, [$ffdc] - ld c, $0 - ld hl, OwnedMonValues -.getSfxPointer - cp [hl] - jr c, .gotSfxPointer - inc c - inc hl - jr .getSfxPointer -.gotSfxPointer - push bc - ld a, $ff - ld [wNewSoundID], a - call PlaySoundWaitForCurrent - pop bc - ld b, $0 - ld hl, PokedexRatingSfxPointers - add hl, bc - add hl, bc - ld a, [hli] - ld c, [hl] - call PlayMusic - jp PlayDefaultMusic - -PokedexRatingSfxPointers: - db SFX_DENIED, BANK(SFX_Denied_3) - db SFX_POKEDEX_RATING, BANK(SFX_Pokedex_Rating_1) - db SFX_GET_ITEM_1, BANK(SFX_Get_Item1_1) - db SFX_CAUGHT_MON, BANK(SFX_Caught_Mon) - db SFX_LEVEL_UP, BANK(SFX_Level_Up) - db SFX_GET_KEY_ITEM, BANK(SFX_Get_Key_Item_1) - db SFX_GET_ITEM_2, BANK(SFX_Get_Item2_1) - -OwnedMonValues: - db 10, 40, 60, 90, 120, 150, $ff - - +INCLUDE "audio/pokedex_rating_sfx.asm" INCLUDE "audio/engine_3.asm" - SECTION "Music 1", ROMX INCLUDE "audio/music/pkmnhealed.asm" @@ -663,4 +445,3 @@ INCLUDE "audio/music/surfing.asm" INCLUDE "audio/music/jigglypuffsong.asm" INCLUDE "audio/music/halloffame.asm" INCLUDE "audio/music/credits.asm" - |