mirror of
https://github.com/pret/pokered.git
synced 2024-10-22 22:55:31 +00:00
75 lines
1.5 KiB
NASM
75 lines
1.5 KiB
NASM
Music_DoLowHealthAlarm::
|
|
ld a, [wLowHealthAlarm]
|
|
cp $ff
|
|
jr z, .disableAlarm
|
|
|
|
bit 7, a ;alarm enabled?
|
|
ret z ;nope
|
|
|
|
and $7f ;low 7 bits are the timer.
|
|
jr nz, .asm_21383 ;if timer > 0, play low tone.
|
|
|
|
call .playToneHi
|
|
ld a, 30 ;keep this tone for 30 frames.
|
|
jr .asm_21395 ;reset the timer.
|
|
|
|
.asm_21383
|
|
cp 20
|
|
jr nz, .asm_2138a ;if timer == 20,
|
|
call .playToneLo ;actually set the sound registers.
|
|
|
|
.asm_2138a
|
|
ld a, $86
|
|
ld [wChannelSoundIDs + Ch5], a ;disable sound channel?
|
|
ld a, [wLowHealthAlarm]
|
|
and $7f ;decrement alarm timer.
|
|
dec a
|
|
|
|
.asm_21395
|
|
; reset the timer and enable flag.
|
|
set 7, a
|
|
ld [wLowHealthAlarm], a
|
|
ret
|
|
|
|
.disableAlarm
|
|
xor a
|
|
ld [wLowHealthAlarm], a ;disable alarm
|
|
ld [wChannelSoundIDs + Ch5], 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
|
|
|
|
;bytes to write to sound channel 1 registers for health alarm.
|
|
;starting at FF11 (FF10 is always zeroed), so these bytes are:
|
|
;length, envelope, freq lo, freq hi
|
|
.toneDataHi
|
|
db $A0,$E2,$50,$87
|
|
|
|
.toneDataLo
|
|
db $B0,$E2,$EE,$86
|
|
|
|
;written to stop the alarm
|
|
.toneDataSilence
|
|
db $00,$00,$00,$80
|