diff options
author | pfero <ohpee@loves.dicksinhisan.us> | 2018-06-04 14:35:34 +0200 |
---|---|---|
committer | pfero <ohpee@loves.dicksinhisan.us> | 2018-06-04 14:35:34 +0200 |
commit | 54c8d02cd671ee1325a55d7784f19a255dfc6c9f (patch) | |
tree | 3651251b88030c481dfcc78ccb42346233717a61 | |
parent | 61bf6b9e58ec3fb6c648000f9d549fe6fd7c272b (diff) |
Disassemble PlayDanger
-rw-r--r-- | audio/engine.asm | 165 | ||||
-rw-r--r-- | constants/audio_constants.asm | 4 | ||||
-rw-r--r-- | shim.sym | 2 | ||||
-rw-r--r-- | wram.asm | 17 |
4 files changed, 180 insertions, 8 deletions
diff --git a/audio/engine.asm b/audio/engine.asm index 3e590f6..0d1d065 100644 --- a/audio/engine.asm +++ b/audio/engine.asm @@ -251,8 +251,8 @@ IsAnySFXOn: ; 3a:42d0 SECTION "Function_e82f0", ROMX[$42f0], BANK[$3a] Function_e82f0: ; 3a:42f0 - call Function_e8352 - call Function_e8307 + call IncrementTempo + call PlayDanger call FadeMusic call Function_e841d ld a, [wVolume] @@ -261,7 +261,166 @@ Function_e82f0: ; 3a:42f0 ld [rNR51], a ret -SECTION "FadeMusic", ROMX[$43ce], BANK[$3a] +PlayDanger: ; 3a:4307 + ld a, [wLowHealthAlarm] + bit DANGER_ON_F, a + ret z + + ; Don't do anything if SFX is being played + and $ff ^ (1 << DANGER_ON_F) + ld d, a + call IsAnySFXOn + jr c, .increment + + ; Play the high tone + and a + jr z, .begin + + ; Play the low tone + cp 16 + jr z, .halfway + + jr .increment + +.halfway + ld hl, DangerSoundLow + jr .applychannel + +.begin + ld hl, DangerSoundHigh + +.applychannel + xor a + ld [rNR10], a + ld a, [hli] + ld [rNR11], a + ld a, [hli] + ld [rNR12], a + ld a, [hli] + ld [rNR13], a + ld a, [hli] + ld [rNR14], a + +.increment + ld a, d + inc a + cp 30 ; Ending frame + jr c, .noreset + xor a +.noreset + ; Make sure the danger sound is kept on + or 1 << DANGER_ON_F + ld [wLowHealthAlarm], a + + ; Make sure channel 1 is on + ld a, [wSoundOutput] + or $11 + ld [wSoundOutput], a + ret + +DangerSoundHigh: ; 3a:434a + db $80 ; duty 50% + db $e2 ; volume 14, envelope decrease sweep 2 + db $50 ; frequency: $750 + db $87 ; restart sound + +DangerSoundLow: ; 3a:434e + db $80 ; duty 50% + db $e2 ; volume 14, envelope decrease sweep 2 + db $ee ; frequency: $6ee + db $86 ; restart sound + +IncrementTempo: ; 3a:4352 + call IsAnyChannelOn + ret c + + ld a, [wIncrementTempo] + ld e, a + ld a, [wIncrementTempo + 1] + ld d, a + or e + ret z + + ld hl, wChannel1Tempo + call .addtempo + ld hl, wChannel2Tempo + call .addtempo + ld hl, wChannel3Tempo + call .addtempo + ld hl, wChannel4Tempo + call .addtempo + xor a + ld [wIncrementTempo], a + ld [wIncrementTempo + 1], a + ret + +.addtempo + ; (int16)[hl] += de + push de + push hl + ld a, [hli] + ld h, [hl] + ld l, a + add hl, de + ld e, l + ld d, h + pop hl + ld [hl], e + inc hl + ld [hl], d + pop de + ret + +IsAnyChannelOn: ; 3a:438e +; Check if any music channel is on and isn't on the last frame + + ld hl, wChannel1Flags1 + bit SOUND_CHANNEL_ON, [hl] + jr z, .check_channel2 + + ld hl, wChannel1NoteDuration + ld a, [hl] + cp 1 + jr nz, .on + +.check_channel2 + ld hl, wChannel2Flags1 + bit SOUND_CHANNEL_ON, [hl] + jr z, .check_channel3 + + ld hl, wChannel2NoteDuration + ld a, [hl] + cp 1 + jr nz, .on + +.check_channel3 + ld hl, wChannel3Flags1 + bit SOUND_CHANNEL_ON, [hl] + jr z, .check_channel4 + + ld hl, wChannel3NoteDuration + ld a, [hl] + cp 1 + jr nz, .on + +.check_channel4 + ld hl, wChannel4Flags1 + bit SOUND_CHANNEL_ON, [hl] + jr z, .off + + ld hl, wChannel4NoteDuration + ld a, [hl] + cp 1 + jr nz, .on + +.off + and a + ret + +.on + scf + ret + FadeMusic: ; 3a:43ce ; Fade music if applicable ; usage: diff --git a/constants/audio_constants.asm b/constants/audio_constants.asm index 0f197f3..e6d56ac 100644 --- a/constants/audio_constants.asm +++ b/constants/audio_constants.asm @@ -94,5 +94,9 @@ VOLUME_SO1_LEVEL EQU %00000111 VOLUME_SO2_LEVEL EQU %01110000 MAX_VOLUME EQU $77 +; wLowHealthAlarm +DANGER_PITCH_F EQU 4 +DANGER_ON_F EQU 7 + ; wMusicFade MUSIC_FADE_IN_F EQU 7 @@ -150,8 +150,6 @@ 33:4000 Function_cc000 33:4000 Function_cc000_2 33:4001 Function_cc001 -3A:4307 Function_e8307 -3A:4352 Function_e8352 3A:441D Function_e841d 3A:45D8 Function_e85d8 3A:47F9 Function_e87f9 @@ -28,14 +28,24 @@ wc195:: db ; c195 wCurChannel:: db ; c198 wVolume:: db ; c199 -wSoundOutput:: db ; c19a +wSoundOutput:: ; c19a +; corresponds to $ff25 +; bit 4-7: ch1-4 so2 on/off +; bit 0-3: ch1-4 so1 on/off + db ds 1 ; TODO wMusicID:: dw ; c19c wMusicBank:: db ; c19e - ds 6 ; TODO + ds 5 ; TODO + +wLowHealthAlarm:: ; c1a4 +; bit 7: on/off +; bit 4: pitch +; bit 0-3: counter + db wMusicFade:: ; c1a5 ; fades volume over x frames @@ -46,8 +56,9 @@ wMusicFade:: ; c1a5 wMusicFadeCount:: db ; c1a6 wMusicFadeID:: dw ; c1a7 - ds 4 ; TODO + ds 2 ; TODO +wIncrementTempo: dw ; c1ab wMapMusic:: db ; c1ad wCryPitch:: dw ; c1ae wCryLength:: dw ; c1b0 |