mirror of
https://github.com/pret/pokeyellow.git
synced 2026-05-27 13:32:36 -05:00
295 lines
5.3 KiB
NASM
295 lines
5.3 KiB
NASM
PlayDefaultMusic:: ; 216b (0:216b)
|
|
call WaitForSoundToFinish
|
|
xor a
|
|
ld c, a
|
|
ld d, a
|
|
ld [wLastMusicSoundID], a
|
|
jr PlayDefaultMusicCommon
|
|
|
|
PlayDefaultMusicFadeOutCurrent:: ; 2176 (0:2176)
|
|
; 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:: ; 2118 (0:2118)
|
|
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, $1f ; 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:: ; 21c8 (0:21c8)
|
|
; probably used to not change music upon getting on bike
|
|
ld a, [wCurMap]
|
|
cp ROUTE_23
|
|
jr z, .found
|
|
cp VICTORY_ROAD_1
|
|
jr z, .found
|
|
cp VICTORY_ROAD_2
|
|
jr z, .found
|
|
cp VICTORY_ROAD_3
|
|
jr z, .found
|
|
cp INDIGO_PLATEAU
|
|
jr z, .found
|
|
and a
|
|
ret
|
|
.found
|
|
scf
|
|
ret
|
|
|
|
UpdateMusic6Times:: ; 21e3 (0:21e3)
|
|
ld c, $6
|
|
UpdateMusicCTimes::
|
|
.loop
|
|
push bc
|
|
push hl
|
|
callba Audio1_UpdateMusic ; 2:509d
|
|
pop hl
|
|
pop bc
|
|
dec c
|
|
jr nz, .loop
|
|
ret
|
|
|
|
CompareMapMusicBankWithCurrentBank:: ; 21f5 (0:21f5)
|
|
; 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:: ; 2211 (0:2211)
|
|
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:: ; 2223 (0:2223)
|
|
xor a
|
|
ld [wChannelSoundIDs + CH4], a
|
|
ld [wChannelSoundIDs + CH5], a
|
|
ld [wChannelSoundIDs + CH6], a
|
|
ld [wChannelSoundIDs + CH7], a
|
|
ld [rNR10], a
|
|
ret
|
|
|
|
StopAllMusic:: ; 2233 (0:2233)
|
|
ld a, $FF
|
|
ld [wNewSoundID], a
|
|
; plays music specified by a. If value is $ff, music is stopped
|
|
PlaySound:: ; 2238 (0:2238)
|
|
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
|
|
jr z, .noFadeOut
|
|
ld a, [wNewSoundID]
|
|
and a
|
|
jr z, .done
|
|
xor a
|
|
ld [wNewSoundID], a
|
|
ld a, [wLastMusicSoundID]
|
|
cp $ff
|
|
jr nz, .fadeOut
|
|
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:: ; 2288 (0:2288)
|
|
ld a, [H_LOADEDROMBANK]
|
|
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:: ; 22aa (0:22aa)
|
|
push hl
|
|
push de
|
|
push bc
|
|
homecall Audio2_InitMusicVariables ; 8:59f8
|
|
pop bc
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
InitSFXVariables:: ; 22c0 (0:22c0)
|
|
push hl
|
|
push de
|
|
push bc
|
|
homecall Audio2_InitSFXVariables ; 8:5ab7
|
|
pop bc
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
StopAllAudio:: ; 22d6 (0:22d6)
|
|
push hl
|
|
push de
|
|
push bc
|
|
homecall Audio2_StopAllAudio
|
|
pop bc
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
DetermineAudioFunction:: ; 22ec (0:22ec)
|
|
ld a, [H_LOADEDROMBANK]
|
|
push af
|
|
ld a, [wAudioROMBank]
|
|
call BankswitchCommon
|
|
; determine the audio function, based on the bank
|
|
cp BANK(Audio1_PlaySound)
|
|
jr nz, .checkForBank08
|
|
; bank 02 (audio 1)
|
|
ld a, b
|
|
call Audio1_PlaySound
|
|
jr .done
|
|
|
|
.checkForBank08
|
|
cp BANK(Audio2_PlaySound)
|
|
jr nz, .checkForBank1F
|
|
; bank 08 (audio 2)
|
|
ld a, b
|
|
call Audio2_PlaySound
|
|
jr .done
|
|
|
|
.checkForBank1F
|
|
cp BANK(Audio3_PlaySound)
|
|
jr nz, .bank20
|
|
; bank 1f (audio 3)
|
|
ld a, b
|
|
call Audio3_PlaySound
|
|
jr .done
|
|
|
|
.bank20
|
|
; invalid banks will default to XX:6bd4
|
|
; 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
|
|
|