mirror of
https://github.com/pret/pokered.git
synced 2024-10-22 22:55:31 +00:00
80 lines
1.5 KiB
NASM
80 lines
1.5 KiB
NASM
Music_DoLowHealthAlarm::
|
|
ld a, [wLowHealthAlarm]
|
|
cp DISABLE_LOW_HEALTH_ALARM
|
|
jr z, .disableAlarm
|
|
|
|
bit BIT_LOW_HEALTH_ALARM, a
|
|
ret z
|
|
|
|
and LOW_HEALTH_TIMER_MASK
|
|
jr nz, .notToneHi ;if timer > 0, play low tone.
|
|
|
|
call .playToneHi
|
|
ld a, 30 ;keep this tone for 30 frames.
|
|
jr .resetTimer
|
|
|
|
.notToneHi
|
|
cp 20
|
|
jr nz, .noTone ;if timer == 20,
|
|
call .playToneLo ;actually set the sound registers.
|
|
|
|
.noTone
|
|
ld a, CRY_SFX_END
|
|
ld [wChannelSoundIDs + CHAN5], a ;disable sound channel?
|
|
ld a, [wLowHealthAlarm]
|
|
and LOW_HEALTH_TIMER_MASK
|
|
dec a
|
|
|
|
.resetTimer
|
|
; reset the timer and enable flag.
|
|
set BIT_LOW_HEALTH_ALARM, a
|
|
ld [wLowHealthAlarm], a
|
|
ret
|
|
|
|
.disableAlarm
|
|
xor a
|
|
ld [wLowHealthAlarm], a ;disable alarm
|
|
ld [wChannelSoundIDs + CHAN5], a ;re-enable sound channel?
|
|
ld de, .toneDataSilence
|
|
jr .playTone
|
|
|
|
;update the sound registers to change the frequency.
|
|
;the tone set here stays until we change it.
|
|
.playToneHi
|
|
ld de, .toneDataHi
|
|
jr .playTone
|
|
|
|
.playToneLo
|
|
ld de, .toneDataLo
|
|
|
|
;update sound channel 1 to play the alarm, overriding all other sounds.
|
|
.playTone
|
|
ld hl, rNR10 ;channel 1 sound register
|
|
ld c, $5
|
|
xor a
|
|
|
|
.copyLoop
|
|
ld [hli], a
|
|
ld a, [de]
|
|
inc de
|
|
dec c
|
|
jr nz, .copyLoop
|
|
ret
|
|
|
|
MACRO alarm_tone
|
|
db \1 ; length
|
|
db \2 ; envelope
|
|
dw \3 ; frequency
|
|
ENDM
|
|
|
|
;bytes to write to sound channel 1 registers for health alarm.
|
|
;starting at FF11 (FF10 is always zeroed).
|
|
.toneDataHi
|
|
alarm_tone $A0, $E2, $8750
|
|
|
|
.toneDataLo
|
|
alarm_tone $B0, $E2, $86EE
|
|
|
|
;written to stop the alarm
|
|
.toneDataSilence
|
|
alarm_tone $00, $00, $8000
|