mirror of
https://github.com/thornAvery/kep-hack.git
synced 2025-09-16 02:13:23 +12:00
436 lines
5.8 KiB
NASM
436 lines
5.8 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, [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, 0 ; 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 [wMusicFade], a
|
|
ld a, b
|
|
ld [wLastMusicSoundID], a
|
|
ld [wMusicFadeID], a
|
|
|
|
; if no fade, play immediately
|
|
ld a, [wMusicFade]
|
|
and a
|
|
jr nz, .next5
|
|
ld a, b
|
|
call PlayMusic
|
|
.next5
|
|
|
|
ret
|
|
|
|
;UpdateMusic6Times::
|
|
;CompareMapMusicBankWithCurrentBank:
|
|
; ret
|
|
|
|
; plays music or SFX specified by a. If value is $ff, music is stopped
|
|
PlaySound::
|
|
push de
|
|
cp $ff
|
|
jr nz, .notff
|
|
xor a
|
|
call PlayMusic
|
|
pop de
|
|
ret
|
|
.notff
|
|
ld e, a
|
|
xor a
|
|
ld d, a
|
|
call PlaySFX
|
|
pop de
|
|
ret
|
|
|
|
;InitSound::
|
|
; push hl
|
|
; push de
|
|
; push bc
|
|
; push af
|
|
;
|
|
; ldh a, [hLoadedROMBank]
|
|
; push af
|
|
; ld a, BANK(_InitSound)
|
|
; ldh [hLoadedROMBank], a
|
|
; ld [MBC1RomBank], a
|
|
;
|
|
; call _InitSound
|
|
;
|
|
; pop af
|
|
; ldh [hLoadedROMBank], a
|
|
; ld [MBC1RomBank], a
|
|
;
|
|
; pop af
|
|
; pop bc
|
|
; pop de
|
|
; pop hl
|
|
; ret
|
|
|
|
UpdateSound::
|
|
; push hl
|
|
; push de
|
|
; push bc
|
|
; push af
|
|
|
|
ldh a, [hLoadedROMBank]
|
|
push af
|
|
ld a, BANK(_UpdateSound)
|
|
ldh [hLoadedROMBank], a
|
|
ld [MBC1RomBank], a
|
|
|
|
call _UpdateSound
|
|
|
|
pop af
|
|
ldh [hLoadedROMBank], a
|
|
ld [MBC1RomBank], a
|
|
|
|
; pop af
|
|
; pop bc
|
|
; pop de
|
|
; pop hl
|
|
ret
|
|
|
|
_LoadMusicByte::
|
|
; [wCurMusicByte] = [a:de]
|
|
ldh [hLoadedROMBank], a
|
|
ld [MBC1RomBank], a
|
|
|
|
ld a, [de]
|
|
ld [wCurMusicByte], a
|
|
ld a, BANK(LoadMusicByte)
|
|
|
|
ldh [hLoadedROMBank], a
|
|
ld [MBC1RomBank], a
|
|
ret
|
|
|
|
PlayMusic::
|
|
ld e, a
|
|
xor a
|
|
ld d, a
|
|
; Play music de.
|
|
|
|
push hl
|
|
push de
|
|
push bc
|
|
push af
|
|
|
|
ldh a, [hLoadedROMBank]
|
|
push af
|
|
ld a, BANK(_PlayMusic) ; aka BANK(_InitSound)
|
|
ldh [hLoadedROMBank], a
|
|
ld [MBC1RomBank], a
|
|
|
|
ld a, e
|
|
and a
|
|
jr z, .nomusic
|
|
|
|
call _PlayMusic
|
|
jr .end
|
|
|
|
.nomusic
|
|
call _InitSound
|
|
|
|
.end
|
|
pop af
|
|
ldh [hLoadedROMBank], a
|
|
ld [MBC1RomBank], a
|
|
pop af
|
|
pop bc
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
;PlayMusic2::
|
|
; ld e, a
|
|
; xor a
|
|
; ld d, a
|
|
; Stop playing music, then play music de.
|
|
;
|
|
; push hl
|
|
; push de
|
|
; push bc
|
|
; push af
|
|
;
|
|
; ldh a, [hLoadedROMBank]
|
|
; push af
|
|
; ld a, BANK(_PlayMusic)
|
|
; ldh [hLoadedROMBank], a
|
|
; ld [MBC1RomBank], a
|
|
;
|
|
; push de
|
|
; ld de, MUSIC_NONE
|
|
; call _PlayMusic
|
|
; call DelayFrame
|
|
; pop de
|
|
; call _PlayMusic
|
|
;
|
|
; pop af
|
|
; ldh [hLoadedROMBank], a
|
|
; ld [MBC1RomBank], a
|
|
;
|
|
; pop af
|
|
; pop bc
|
|
; pop de
|
|
; pop hl
|
|
; ret
|
|
|
|
PlayCry::
|
|
; Play monster a's cry.
|
|
|
|
push hl
|
|
push de
|
|
push bc
|
|
push af
|
|
|
|
ld [wd11e], a
|
|
predef IndexToPokedex
|
|
ld a, [wd11e]
|
|
dec a
|
|
ld e, a
|
|
ld d, 0
|
|
|
|
ldh a, [hLoadedROMBank]
|
|
push af
|
|
|
|
; Cries are stuck in one bank.
|
|
ld a, BANK(PokemonCries)
|
|
ldh [hLoadedROMBank], a
|
|
ld [MBC1RomBank], a
|
|
|
|
ld hl, PokemonCries
|
|
rept 6 ; sizeof(mon_cry)
|
|
add hl, de
|
|
endr
|
|
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
inc hl
|
|
|
|
ld a, [hli]
|
|
ld [wCryPitch], a
|
|
ld a, [hli]
|
|
ld [wCryPitch + 1], a
|
|
ld a, [hli]
|
|
ld [wCryLength], a
|
|
ld a, [hl]
|
|
ld [wCryLength + 1], a
|
|
|
|
ld a, BANK(_PlayCry)
|
|
ldh [hLoadedROMBank], a
|
|
ld [MBC1RomBank], a
|
|
|
|
call _PlayCry
|
|
|
|
pop af
|
|
ldh [hLoadedROMBank], a
|
|
ld [MBC1RomBank], a
|
|
|
|
call WaitForSoundToFinish
|
|
|
|
pop af
|
|
pop bc
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
PlayBattleSound::
|
|
push hl
|
|
push de
|
|
push bc
|
|
push af
|
|
|
|
push af
|
|
ld a, c
|
|
ld [wCryPitch], a
|
|
ld a, b
|
|
ld [wCryPitch + 1], a
|
|
ld a, e
|
|
ld [wCryLength], a
|
|
ld a, d
|
|
ld [wCryLength + 1], a
|
|
pop af
|
|
|
|
ld e, a
|
|
xor a
|
|
ld d, a
|
|
|
|
ldh a, [hLoadedROMBank]
|
|
push af
|
|
|
|
ld a, BANK(_PlayBattleSound)
|
|
ldh [hLoadedROMBank], a
|
|
ld [MBC1RomBank], a
|
|
|
|
ld a, e
|
|
ld [wCurSFX], a
|
|
call _PlayBattleSound
|
|
|
|
pop af
|
|
ldh [hLoadedROMBank], a
|
|
ld [MBC1RomBank], a
|
|
|
|
pop af
|
|
pop bc
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
PlaySFX::
|
|
; Play sound effect de.
|
|
; Sound effects are ordered by priority (highest to lowest)
|
|
|
|
push hl
|
|
push de
|
|
push bc
|
|
push af
|
|
|
|
; Is something already playing?
|
|
; call CheckSFX
|
|
; jr nc, .play
|
|
|
|
; Does it have priority?
|
|
; ld a, [wCurSFX]
|
|
; cp e
|
|
; jr c, .done
|
|
|
|
.play
|
|
ldh a, [hLoadedROMBank]
|
|
push af
|
|
ld a, BANK(_PlaySFX)
|
|
ldh [hLoadedROMBank], a
|
|
ld [MBC1RomBank], a
|
|
|
|
ld a, e
|
|
ld [wCurSFX], a
|
|
call _PlaySFX
|
|
|
|
pop af
|
|
ldh [hLoadedROMBank], a
|
|
ld [MBC1RomBank], a
|
|
|
|
.done
|
|
pop af
|
|
pop bc
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
PlaySoundWaitForCurrent::
|
|
WaitPlaySFX::
|
|
push af
|
|
call WaitForSoundToFinish
|
|
pop af
|
|
jp PlaySound
|
|
|
|
; Wait for sound to finish playing
|
|
WaitForSoundToFinish::
|
|
WaitSFX::
|
|
ld a, [wLowHealthAlarm]
|
|
and a
|
|
ret nz
|
|
ld a, [wSFXDontWait]
|
|
and a
|
|
ret nz
|
|
|
|
; infinite loop until sfx is done playing
|
|
|
|
push hl
|
|
|
|
.wait
|
|
ld hl, wChannel5Flags1
|
|
bit 0, [hl]
|
|
jr nz, .wait
|
|
ld hl, wChannel6Flags1
|
|
bit 0, [hl]
|
|
jr nz, .wait
|
|
ld hl, wChannel7Flags1
|
|
bit 0, [hl]
|
|
jr nz, .wait
|
|
ld hl, wChannel8Flags1
|
|
bit 0, [hl]
|
|
jr nz, .wait
|
|
|
|
pop hl
|
|
ret
|
|
|
|
WaitForSongToFinish::
|
|
.loop
|
|
call IsSongPlaying
|
|
jr c, .loop
|
|
ret
|
|
|
|
IsSongPlaying::
|
|
; Return carry if any song channels are active.
|
|
ld a, [wChannel1Flags1]
|
|
bit 0, a
|
|
jr nz, .playing
|
|
ld a, [wChannel2Flags1]
|
|
bit 0, a
|
|
jr nz, .playing
|
|
ld a, [wChannel3Flags1]
|
|
bit 0, a
|
|
jr nz, .playing
|
|
ld a, [wChannel4Flags1]
|
|
bit 0, a
|
|
jr nz, .playing
|
|
and a
|
|
ret
|
|
.playing
|
|
scf
|
|
ret
|