Fix battle sound pitch/tempo modifiers

This commit is contained in:
dannye 2021-04-03 13:02:22 -05:00
parent b2afaae7ab
commit 17044ab7eb
6 changed files with 200 additions and 43 deletions

View file

@ -2605,6 +2605,131 @@ _PlayCry::
call MusicOn
ret
_PlayBattleSound::
; clear channels if they aren't already
call MusicOff
ld hl, wChannel5Flags1
bit SOUND_CHANNEL_ON, [hl] ; ch5 on?
jr z, .ch6
res SOUND_CHANNEL_ON, [hl] ; turn it off
xor a
ldh [rNR11], a ; length/wavepattern = 0
ld a, $8
ldh [rNR12], a ; envelope = 0
xor a
ldh [rNR13], a ; frequency lo = 0
ld a, $80
ldh [rNR14], a ; restart sound (freq hi = 0)
xor a
ld [wPitchSweep], a ; pitch sweep off
ldh [rNR10], a ; pitch sweep off
.ch6
ld hl, wChannel6Flags1
bit SOUND_CHANNEL_ON, [hl]
jr z, .ch7
res SOUND_CHANNEL_ON, [hl] ; turn it off
xor a
ldh [rNR21], a ; length/wavepattern = 0
ld a, $8
ldh [rNR22], a ; envelope = 0
xor a
ldh [rNR23], a ; frequency lo = 0
ld a, $80
ldh [rNR24], a ; restart sound (freq hi = 0)
.ch7
ld hl, wChannel7Flags1
bit SOUND_CHANNEL_ON, [hl]
jr z, .ch8
res SOUND_CHANNEL_ON, [hl] ; turn it off
xor a
ldh [rNR30], a ; sound mode #3 off
ldh [rNR31], a ; length/wavepattern = 0
ld a, $8
ldh [rNR32], a ; envelope = 0
xor a
ldh [rNR33], a ; frequency lo = 0
ld a, $80
ldh [rNR34], a ; restart sound (freq hi = 0)
.ch8
ld hl, wChannel8Flags1
bit SOUND_CHANNEL_ON, [hl]
jr z, .chscleared
res SOUND_CHANNEL_ON, [hl] ; turn it off
xor a
ldh [rNR41], a ; length/wavepattern = 0
ld a, $8
ldh [rNR42], a ; envelope = 0
xor a
ldh [rNR43], a ; frequency lo = 0
ld a, $80
ldh [rNR44], a ; restart sound (freq hi = 0)
xor a
ld [wNoiseSampleAddress], a
ld [wNoiseSampleAddress + 1], a
.chscleared
; start reading sfx header for # chs
ld hl, wMusicID
ld [hl], e
inc hl
ld [hl], d
ld hl, SFX
add hl, de ; three
add hl, de ; byte
add hl, de ; pointers
; get bank
ld a, [hli]
ld [wMusicBank], a
; get address
ld e, [hl]
inc hl
ld d, [hl]
; get # channels
call LoadMusicByte
rlca ; top 2
rlca ; bits
maskbits NUM_MUSIC_CHANS
inc a ; # channels -> # loops
.startchannels
push af
call LoadChannel ; bc = current channel
ld hl, CHANNEL_FLAGS1
add hl, bc
set SOUND_SFX, [hl]
ld hl, CHANNEL_FLAGS2
add hl, bc
set SOUND_PITCH_OFFSET, [hl]
ld hl, CHANNEL_PITCH_OFFSET
add hl, bc
ld a, [wCryPitch]
ld [hli], a
ld a, [wCryPitch + 1]
ld [hl], a
; No tempo for channel 4
ld a, [wCurChannel]
maskbits NUM_MUSIC_CHANS
cp CHAN4
jr nc, .start
; Tempo is effectively length
ld hl, CHANNEL_TEMPO
add hl, bc
ld a, [wCryLength]
ld [hli], a
ld a, [wCryLength + 1]
ld [hl], a
.start
call StartChannel
pop af
dec a
jr nz, .startchannels
call MusicOn
xor a
ld [wSFXPriority], a
ret
_PlaySFX::
; clear channels if they aren't already
call MusicOff

View file

@ -113,8 +113,3 @@ SFX:
dba SFX_Shooting_Star
dba SFX_PokefluteInBattle
dba Sfx_NotVeryEffective
dba Sfx_Damage
dba Sfx_SuperEffective