mirror of
https://github.com/pret/pokeyellow.git
synced 2026-10-03 15:08:07 -04:00
298 lines
5.3 KiB
NASM
298 lines
5.3 KiB
NASM
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, [wStatusFlags4]
|
|
bit BIT_BATTLE_OVER_OR_BLACKOUT, a
|
|
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
|
|
call CheckForNoBikingMusicMap
|
|
jr c, .walking
|
|
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
|
|
|
|
CheckForNoBikingMusicMap::
|
|
; probably used to not change music upon getting on bike
|
|
ld a, [wCurMap]
|
|
cp ROUTE_23
|
|
jr z, .found
|
|
cp VICTORY_ROAD_1F
|
|
jr z, .found
|
|
cp VICTORY_ROAD_2F
|
|
jr z, .found
|
|
cp VICTORY_ROAD_3F
|
|
jr z, .found
|
|
cp INDIGO_PLATEAU
|
|
jr z, .found
|
|
and a
|
|
ret
|
|
.found
|
|
scf
|
|
ret
|
|
|
|
UpdateMusic6Times::
|
|
ld c, 6
|
|
UpdateMusicCTimes::
|
|
.loop
|
|
push bc
|
|
push hl
|
|
farcall Audio1_UpdateMusic
|
|
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
|
|
jr PlaySound
|
|
|
|
Func_2223::
|
|
xor a
|
|
ld [wChannelSoundIDs + CHAN5], a
|
|
ld [wChannelSoundIDs + CHAN6], a
|
|
ld [wChannelSoundIDs + CHAN7], a
|
|
ld [wChannelSoundIDs + CHAN8], a
|
|
ldh [rAUD1SWEEP], a
|
|
ret
|
|
|
|
StopAllMusic::
|
|
ld a, SFX_STOP_ALL_MUSIC
|
|
ld [wNewSoundID], a
|
|
; 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 + CHAN5], a
|
|
ld [wChannelSoundIDs + CHAN6], a
|
|
ld [wChannelSoundIDs + CHAN7], a
|
|
ld [wChannelSoundIDs + CHAN8], 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
|
|
call DetermineAudioFunction
|
|
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
|
|
|
|
GetNextMusicByte::
|
|
ldh a, [hLoadedROMBank]
|
|
push af
|
|
ld a, [wAudioROMBank]
|
|
call BankswitchCommon
|
|
ld d, $0
|
|
ld a, c
|
|
add a
|
|
ld e, a
|
|
ld hl, wChannelCommandPointers
|
|
add hl, de
|
|
ld a, [hli]
|
|
ld e, a
|
|
ld a, [hld]
|
|
ld d, a
|
|
ld a, [de]
|
|
inc de
|
|
ld [hl], e
|
|
inc hl
|
|
ld [hl], d
|
|
ld e, a
|
|
pop af
|
|
call BankswitchCommon
|
|
ld a, e
|
|
ret
|
|
|
|
InitMusicVariables::
|
|
push hl
|
|
push de
|
|
push bc
|
|
homecall Audio2_InitMusicVariables
|
|
pop bc
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
InitSFXVariables::
|
|
push hl
|
|
push de
|
|
push bc
|
|
homecall Audio2_InitSFXVariables
|
|
pop bc
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
StopAllAudio::
|
|
push hl
|
|
push de
|
|
push bc
|
|
homecall Audio2_StopAllAudio
|
|
pop bc
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
DetermineAudioFunction::
|
|
ldh a, [hLoadedROMBank]
|
|
push af
|
|
ld a, [wAudioROMBank]
|
|
call BankswitchCommon
|
|
; determine the audio function, based on the bank
|
|
cp BANK(Audio1_PlaySound)
|
|
jr nz, .checkForAudio2
|
|
; audio 1
|
|
ld a, b
|
|
call Audio1_PlaySound
|
|
jr .done
|
|
|
|
.checkForAudio2
|
|
cp BANK(Audio2_PlaySound)
|
|
jr nz, .checkForAudio3
|
|
; audio 2
|
|
ld a, b
|
|
call Audio2_PlaySound
|
|
jr .done
|
|
|
|
.checkForAudio3
|
|
cp BANK(Audio3_PlaySound)
|
|
jr nz, .audio4
|
|
; audio 3
|
|
ld a, b
|
|
call Audio3_PlaySound
|
|
jr .done
|
|
|
|
.audio4
|
|
; invalid banks will default to audio 4
|
|
; this is seen when encountering Missingno,
|
|
; as its sprite dimensions overflow to wAudioROMBank
|
|
ld a, b
|
|
call Audio4_PlaySound
|
|
|
|
.done
|
|
pop af
|
|
call BankswitchCommon
|
|
ret
|