ref: b921c130e82959e5e06d5f1e619438c5e6dbb1e9
parent: 10604fe8b3dfbc876df1bf6872ee8db37f712b1d
author: yenatch <[email protected]>
date: Thu May 2 17:55:03 EDT 2013
Clean up and add a couple functions in bank 0 Mostly related to sound
--- a/main.asm
+++ b/main.asm
@@ -3920,60 +3920,122 @@
FarBattleTextBox: ; 3ad5
-; save bank
- ld a, [$ff9d] ; bank
+; Open a textbox and print text at 20:hl.
+
+ ld a, [hROMBank]
push af
-; bank 20
+
ld a, $20
- rst $10
-; print text at hl
+ rst Bankswitch
+
call BattleTextBox
-; restore bank
+
pop af
- rst $10
+ rst Bankswitch
ret
; 3ae1
-INCBIN "baserom.gbc", $3ae1, $3b86 - $3ae1
+INCBIN "baserom.gbc", $3ae1, $3b4e - $3ae1
+
+CleanSoundRestart: ; 3b4e
+
+ push hl
+ push de
+ push bc
+ push af
+
+ ld a, [hROMBank]
+ push af
+ ld a, BANK(SoundRestart)
+ ld [hROMBank], a
+ ld [$2000], a
+
+ call SoundRestart
+
+ pop af
+ ld [hROMBank], a
+ ld [$2000], a
+
+ pop af
+ pop bc
+ pop de
+ pop hl
+ ret
+; 3b6a
+
+
+CleanUpdateSound: ; 3b6a
+
+ push hl
+ push de
+ push bc
+ push af
+
+ ld a, [hROMBank]
+ push af
+ ld a, BANK(UpdateSound)
+ ld [hROMBank], a
+ ld [$2000], a
+
+ call UpdateSound
+
+ pop af
+ ld [hROMBank], a
+ ld [$2000], a
+
+ pop af
+ pop bc
+ pop de
+ pop hl
+ ret
+; 3b86
+
+
LoadMusicByte: ; 3b86
-; load music data into CurMusicByte
-; input:
-; a: bank
-; de: address
+; CurMusicByte = [a:de]
+
ld [hROMBank], a
- ld [$2000], a ; bankswitch
+ ld [$2000], a
+
ld a, [de]
ld [CurMusicByte], a
ld a, $3a ; manual bank restore
+
ld [hROMBank], a
- ld [$2000], a ; bankswitch
+ ld [$2000], a
ret
; 3b97
+
StartMusic: ; 3b97
-; input:
-; e = song number
+; Play music de.
+
push hl
push de
push bc
push af
- ld a, [hROMBank] ; save bank
+
+ ld a, [hROMBank]
push af
- ld a, BANK(LoadMusic)
+ ld a, BANK(LoadMusic) ; and BANK(SoundRestart)
ld [hROMBank], a
- ld [$2000], a ; bankswitch
- ld a, e ; song number
+ ld [$2000], a
+
+ ld a, e
and a
jr z, .nomusic
+
call LoadMusic
jr .end
+
.nomusic
call SoundRestart
+
.end
pop af
- ld [hROMBank], a ; restore bank
+ ld [hROMBank], a
ld [$2000], a
pop af
pop bc
@@ -3982,25 +4044,58 @@
ret
; 3bbc
-INCBIN "baserom.gbc", $3bbc, $3be3 - $3bbc
+StartMusic2: ; 3bbc
+; Stop playing music, then play music de.
+
+ push hl
+ push de
+ push bc
+ push af
+
+ ld a, [hROMBank]
+ push af
+ ld a, BANK(LoadMusic)
+ ld [hROMBank], a
+ ld [$2000], a
+
+ push de
+ ld de, MUSIC_NONE
+ call LoadMusic
+ call DelayFrame
+ pop de
+ call LoadMusic
+
+ pop af
+ ld [hROMBank], a
+ ld [$2000], a
+
+ pop af
+ pop bc
+ pop de
+ pop hl
+ ret
+
+; 3be3
+
+
PlayCryHeader: ; 3be3
; Play a cry given parameters in header de
-
+
push hl
push de
push bc
push af
-
+
; Save current bank
ld a, [hROMBank]
push af
-
+
; Cry headers are stuck in one bank.
ld a, BANK(CryHeaders)
ld [hROMBank], a
ld [$2000], a
-
+
; Each header is 6 bytes long:
ld hl, CryHeaders
add hl, de
@@ -4009,33 +4104,27 @@
add hl, de
add hl, de
add hl, de
-
-; Header struct:
-; id
ld e, [hl]
inc hl
ld d, [hl]
inc hl
-; pitch
+
ld a, [hli]
ld [CryPitch], a
-; echo
ld a, [hli]
ld [CryEcho], a
-; length
ld a, [hli]
ld [CryLength], a
ld a, [hl]
ld [CryLength+1], a
-
-; That's it for the header
+
ld a, BANK(PlayCry)
ld [hROMBank], a
ld [$2000], a
+
call PlayCry
-
-; Restore bank
+
pop af
ld [hROMBank], a
ld [$2000], a
@@ -4049,31 +4138,35 @@
StartSFX: ; 3c23
-; sfx id order is by priority (highest to lowest)
-; to disable this, remove the check!
-; input: de = sfx id
+; Play sound effect de.
+; Sound effects are ordered by priority (lowest to highest)
+
push hl
push de
push bc
push af
- ; is something already playing?
+
+; Is something already playing?
call CheckSFX
- jr nc, .asm_3c32
- ; only play sfx if it has priority
+ jr nc, .play
+; Does it have priority?
ld a, [CurSFX]
cp e
jr c, .quit
-.asm_3c32
- ld a, [hROMBank] ; save bank
+
+.play
+ ld a, [hROMBank]
push af
- ld a, $3a ; music bank
+ ld a, BANK(LoadSFX)
ld [hROMBank], a
ld [$2000], a ; bankswitch
+
ld a, e
ld [CurSFX], a
call LoadSFX
+
pop af
- ld [hROMBank], a ; restore bank
+ ld [hROMBank], a
ld [$2000], a ; bankswitch
.quit
pop af
@@ -4083,31 +4176,37 @@
ret
; 3c4e
-INCBIN "baserom.gbc", $3c4e, $3c55-$3c4e
+WaitPlaySFX: ; 3c4e
+ call WaitSFX
+ call StartSFX
+ ret
+; 3c55
+
+
WaitSFX: ; 3c55
; infinite loop until sfx is done playing
+
push hl
.loop
; ch5 on?
- ld hl, $c1cc ; Channel5Flags
+ ld hl, Channel5 + Channel1Flags - Channel1
bit 0, [hl]
jr nz, .loop
; ch6 on?
- ld hl, $c1fe ; Channel6Flags
+ ld hl, Channel6 + Channel1Flags - Channel1
bit 0, [hl]
jr nz, .loop
; ch7 on?
- ld hl, $c230 ; Channel7Flags
+ ld hl, Channel7 + Channel1Flags - Channel1
bit 0, [hl]
jr nz, .loop
; ch8 on?
- ld hl, $c262 ; Channel8Flags
+ ld hl, Channel8 + Channel1Flags - Channel1
bit 0, [hl]
jr nz, .loop
- ; we're done
pop hl
ret
; 3c74