123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- PlayDefaultMusic::
- call WaitForSoundToFinish
- xor a
- ld c, a
- ld d, a
- ld [wLastMusicSoundID], a
- jr PlayDefaultMusicCommon
- PlayDefaultMusicFadeOutCurrent::
- ; Fade out the current music and then play the default music.
- ld c, 10
- ld d, 0
- ld a, [wd72e]
- bit 5, a ; has a battle just ended?
- jr z, PlayDefaultMusicCommon
- xor a
- ld [wLastMusicSoundID], a
- ld c, 8
- ld d, c
- PlayDefaultMusicCommon::
- ld a, [wWalkBikeSurfState]
- and a
- jr z, .walking
- cp $2
- jr z, .surfing
- ld a, MUSIC_BIKE_RIDING
- jr .next
- .surfing
- ld a, MUSIC_SURFING
- .next
- ld b, a
- ld a, d
- and a ; should current music be faded out first?
- ld a, BANK(Music_BikeRiding)
- jr nz, .next2
- ; Only change the audio ROM bank if the current music isn't going to be faded
- ; out before the default music begins.
- ld [wAudioROMBank], a
- .next2
- ; [wAudioSavedROMBank] will be copied to [wAudioROMBank] after fading out the
- ; current music (if the current music is faded out).
- ld [wAudioSavedROMBank], a
- jr .next3
- .walking
- ld a, [wMapMusicSoundID]
- ld b, a
- call CompareMapMusicBankWithCurrentBank
- jr c, .next4
- .next3
- ld a, [wLastMusicSoundID]
- cp b ; is the default music already playing?
- ret z ; if so, do nothing
- .next4
- ld a, c
- ld [wAudioFadeOutControl], a
- ld a, b
- ld [wLastMusicSoundID], a
- ld [wNewSoundID], a
- jp PlaySound
- UpdateMusic6Times::
- ; This is called when entering a map, before fading out the current music and
- ; playing the default music (i.e. the map's music or biking/surfing music).
- ld a, [wAudioROMBank]
- ld b, a
- cp BANK(Audio1_UpdateMusic)
- jr nz, .checkForAudio2
- ; audio 1
- ld hl, Audio1_UpdateMusic
- jr .next
- .checkForAudio2
- cp BANK(Audio2_UpdateMusic)
- jr nz, .audio3
- ; audio 2
- ld hl, Audio2_UpdateMusic
- jr .next
- .audio3
- ld hl, Audio3_UpdateMusic
- .next
- ld c, 6
- .loop
- push bc
- push hl
- call Bankswitch
- pop hl
- pop bc
- dec c
- jr nz, .loop
- ret
- CompareMapMusicBankWithCurrentBank::
- ; Compares the map music's audio ROM bank with the current audio ROM bank
- ; and updates the audio ROM bank variables.
- ; Returns whether the banks are different in carry.
- ld a, [wMapMusicROMBank]
- ld e, a
- ld a, [wAudioROMBank]
- cp e
- jr nz, .differentBanks
- ld [wAudioSavedROMBank], a
- and a
- ret
- .differentBanks
- ld a, c ; this is a fade-out counter value and it's always non-zero
- and a
- ld a, e
- jr nz, .next
- ; If the fade-counter is non-zero, we don't change the audio ROM bank because
- ; it's needed to keep playing the music as it fades out. The FadeOutAudio
- ; routine will take care of copying [wAudioSavedROMBank] to [wAudioROMBank]
- ; when the music has faded out.
- ld [wAudioROMBank], a
- .next
- ld [wAudioSavedROMBank], a
- scf
- ret
- PlayMusic::
- ld b, a
- ld [wNewSoundID], a
- xor a
- ld [wAudioFadeOutControl], a
- ld a, c
- ld [wAudioROMBank], a
- ld [wAudioSavedROMBank], a
- ld a, b
- ; plays music specified by a. If value is $ff, music is stopped
- PlaySound::
- push hl
- push de
- push bc
- ld b, a
- ld a, [wNewSoundID]
- and a
- jr z, .next
- xor a
- ld [wChannelSoundIDs + Ch4], a
- ld [wChannelSoundIDs + Ch5], a
- ld [wChannelSoundIDs + Ch6], a
- ld [wChannelSoundIDs + Ch7], a
- .next
- ld a, [wAudioFadeOutControl]
- and a ; has a fade-out length been specified?
- jr z, .noFadeOut
- ld a, [wNewSoundID]
- and a ; is the new sound ID 0?
- jr z, .done ; if so, do nothing
- xor a
- ld [wNewSoundID], a
- ld a, [wLastMusicSoundID]
- cp $ff ; has the music been stopped?
- jr nz, .fadeOut ; if not, fade out the current music
- ; If it has been stopped, start playing the new music immediately.
- xor a
- ld [wAudioFadeOutControl], a
- .noFadeOut
- xor a
- ld [wNewSoundID], a
- ld a, [H_LOADEDROMBANK]
- ld [hSavedROMBank], a
- ld a, [wAudioROMBank]
- ld [H_LOADEDROMBANK], a
- ld [MBC1RomBank], a
- cp BANK(Audio1_PlaySound)
- jr nz, .checkForAudio2
- ; audio 1
- ld a, b
- call Audio1_PlaySound
- jr .next2
- .checkForAudio2
- cp BANK(Audio2_PlaySound)
- jr nz, .audio3
- ; audio 2
- ld a, b
- call Audio2_PlaySound
- jr .next2
- .audio3
- ld a, b
- call Audio3_PlaySound
- .next2
- ld a, [hSavedROMBank]
- ld [H_LOADEDROMBANK], a
- ld [MBC1RomBank], a
- jr .done
- .fadeOut
- ld a, b
- ld [wLastMusicSoundID], a
- ld a, [wAudioFadeOutControl]
- ld [wAudioFadeOutCounterReloadValue], a
- ld [wAudioFadeOutCounter], a
- ld a, b
- ld [wAudioFadeOutControl], a
- .done
- pop bc
- pop de
- pop hl
- ret
|