summaryrefslogtreecommitdiff
path: root/main.asm
diff options
context:
space:
mode:
Diffstat (limited to 'main.asm')
-rw-r--r--main.asm3717
1 files changed, 30 insertions, 3687 deletions
diff --git a/main.asm b/main.asm
index d769208d6..f662f77d2 100644
--- a/main.asm
+++ b/main.asm
@@ -66760,3704 +66760,47 @@ INCBIN "gfx/intro/lz/unown_back.lz"
INCBIN "baserom.gbc", $e799a, $e7a70 - $e799a
+; ================================================================
+; Sound engine and music/sound effect pointers
SECTION "bank3A",DATA,BANK[$3A]
-SoundRestart: ; e8000
-; restart sound operation
-; clear all relevant hardware registers & wram
- push hl
- push de
- push bc
- push af
- call MusicOff
- ld hl, $ff24 ; channel control registers
- xor a
- ld [hli], a ; ff24 ; volume/vin
- ld [hli], a ; ff25 ; sfx channels
- ld a, $80 ; all channels on
- ld [hli], a ; ff26 ; music channels
-
- ld hl, $ff10 ; sound channel registers
- ld e, $04 ; number of channels
-.clearsound
-; sound channel 1 2 3 4
- xor a
- ld [hli], a ; $ff10, $ff15, $ff1a, $ff1f ; sweep = 0
-
- ld [hli], a ; $ff11, $ff16, $ff1b, $ff20 ; length/wavepattern = 0
- ld a, $08
- ld [hli], a ; $ff12, $ff17, $ff1c, $ff21 ; envelope = 0
- xor a
- ld [hli], a ; $ff13, $ff18, $ff1d, $ff22 ; frequency lo = 0
- ld a, $80
- ld [hli], a ; $ff14, $ff19, $ff1e, $ff23 ; restart sound (freq hi = 0)
- dec e
- jr nz, .clearsound
-
- ld hl, Channel1 ; start of channel data
- ld de, $01bf ; length of area to clear (entire sound wram area)
-.clearchannels ; clear $c101-$c2bf
- xor a
- ld [hli], a
- dec de
- ld a, e
- or d
- jr nz, .clearchannels
- ld a, $77 ; max
- ld [Volume], a
- call MusicOn
- pop af
- pop bc
- pop de
- pop hl
- ret
-; e803d
-
-MusicFadeRestart: ; e803d
-; restart but keep the music id to fade in to
- ld a, [MusicFadeIDHi]
- push af
- ld a, [MusicFadeIDLo]
- push af
- call SoundRestart
- pop af
- ld [MusicFadeIDLo], a
- pop af
- ld [MusicFadeIDHi], a
- ret
-; e8051
-
-MusicOn: ; e8051
- ld a, $01
- ld [MusicPlaying], a
- ret
-; e8057
-
-MusicOff: ; e8057
- xor a
- ld [MusicPlaying], a
- ret
-; e805c
-
-UpdateSound: ; e805c
-; called once per frame
- ; no use updating audio if it's not playing
- ld a, [MusicPlaying]
- and a
- ret z
- ; start at ch1
- xor a
- ld [CurChannel], a ; just
- ld [SoundOutput], a ; off
- ld bc, Channel1
-.loop
- ; is the channel active?
- ld hl, Channel1Flags - Channel1
- add hl, bc
- bit 0, [hl]
- jp z, .nextchannel
- ; check time left in the current note
- ld hl, Channel1NoteDuration - Channel1
- add hl, bc
- ld a, [hl]
- cp a, $02 ; 1 or 0?
- jr c, .noteover
- dec [hl]
- jr .asm_e8093
-.noteover
- ; reset vibrato delay
- ld hl, Channel1VibratoDelay - Channel1
- add hl, bc
- ld a, [hl]
- ld hl, Channel1VibratoDelayCount - Channel1
- add hl, bc
- ld [hl], a
- ; turn vibrato off for now
- ld hl, Channel1Flags2 - Channel1
- add hl, bc
- res 1, [hl]
- ; get next note
- call ParseMusic
-.asm_e8093
- ;
- call Functione84f9
- ; duty cycle
- ld hl, Channel1DutyCycle - Channel1
- add hl, bc
- ld a, [hli]
- ld [$c292], a
- ; intensity
- ld a, [hli]
- ld [$c293], a
- ; frequency
- ld a, [hli]
- ld [$c294], a
- ld a, [hl]
- ld [$c295], a
- ;
- call Functione8466 ; handle vibrato and other things
- call HandleNoise
- ; turn off music when playing sfx?
- ld a, [SFXPriority]
- and a
- jr z, .next
- ; are we in a sfx channel right now?
- ld a, [CurChannel]
- cp a, $04
- jr nc, .next
- ; are any sfx channels active?
- ; if so, mute
- ld hl, $c1cc ; Channel5Flags
- bit 0, [hl]
- jr nz, .restnote
- ld hl, $c1fe ; Channel6Flags
- bit 0, [hl]
- jr nz, .restnote
- ld hl, $c230 ; Channel7Flags
- bit 0, [hl]
- jr nz, .restnote
- ld hl, $c262 ; Channel8Flags
- bit 0, [hl]
- jr z, .next
-.restnote
- ld hl, Channel1NoteFlags - Channel1
- add hl, bc
- set 5, [hl] ; Rest
-.next
- ; are we in a sfx channel right now?
- ld a, [CurChannel]
- cp a, $04 ; sfx
- jr nc, .asm_e80ee
- ld hl, $00cb
- add hl, bc
- bit 0, [hl]
- jr nz, .asm_e80fc
-.asm_e80ee
- call UpdateChannels
- ld hl, Channel1Tracks - Channel1
- add hl, bc
- ld a, [SoundOutput]
- or [hl]
- ld [SoundOutput], a
-.asm_e80fc
- ; clear note flags
- ld hl, Channel1NoteFlags - Channel1
- add hl, bc
- xor a
- ld [hl], a
-.nextchannel
- ; next channel
- ld hl, Channel2 - Channel1
- add hl, bc
- ld c, l
- ld b, h
- ld a, [CurChannel]
- inc a
- ld [CurChannel], a
- cp a, $08 ; are we done?
- jp nz, .loop ; do it all again
- ; writing to hardware registers?
- call Functione8307
- ; fade music in/out
- call FadeMusic
- ; write volume to hardware register
- ld a, [Volume]
- ld [$ff24], a
- ; write SO on/off to hardware register
- ld a, [SoundOutput]
- ld [$ff25], a
- ret
-; e8125
-
-UpdateChannels: ; e8125
- ld hl, .ChannelFnPtrs
- ld a, [CurChannel]
- and a, $07
- add a
- ld e, a
- ld d, $00
- add hl, de
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jp [hl]
-
-.ChannelFnPtrs
- dw .Channel1
- dw .Channel2
- dw .Channel3
- dw .Channel4
-; sfx ch ptrs are identical to music chs
-; ..except 5
- dw .Channel5
- dw .Channel6
- dw .Channel7
- dw .Channel8
-
-.Channel1
- ld a, [$c2a6]
- bit 7, a
- ret nz
-.Channel5
- ld hl, Channel1NoteFlags - Channel1
- add hl, bc
- bit 3, [hl]
- jr z, .asm_e8159
- ;
- ld a, [SoundInput]
- ld [$ff10], a
-.asm_e8159
- bit 5, [hl] ; rest
- jr nz, .ch1rest
- bit 4, [hl]
- jr nz, .asm_e81a2
- bit 1, [hl]
- jr nz, .asm_e816b
- bit 6, [hl]
- jr nz, .asm_e8184
- jr .asm_e8175
-.asm_e816b
- ld a, [$c294]
- ld [$ff13], a
- ld a, [$c295]
- ld [$ff14], a
-.asm_e8175
- bit 0, [hl]
- ret z
- ld a, [$c292]
- ld d, a
- ld a, [$ff11]
- and a, $3f ; sound length
- or d
- ld [$ff11], a
- ret
-.asm_e8184
- ld a, [$c292]
- ld d, a
- ld a, [$ff11]
- and a, $3f ; sound length
- or d
- ld [$ff11], a
- ld a, [$c294]
- ld [$ff13], a
- ret
-.ch1rest
- ld a, [$ff26]
- and a, %10001110 ; ch1 off
- ld [$ff26], a
- ld hl, $ff10
- call ClearChannel
- ret
-.asm_e81a2
- ld hl, $c292
- ld a, $3f ; sound length
- or [hl]
- ld [$ff11], a
- ld a, [$c293]
- ld [$ff12], a
- ld a, [$c294]
- ld [$ff13], a
- ld a, [$c295]
- or a, $80
- ld [$ff14], a
- ret
-
-.Channel2
-.Channel6
- ld hl, Channel1NoteFlags - Channel1
- add hl, bc
- bit 5, [hl] ; rest
- jr nz, .ch2rest
- bit 4, [hl]
- jr nz, .asm_e8204
- bit 6, [hl]
- jr nz, .asm_e81e6
- bit 0, [hl]
- ret z
- ld a, [$c292]
- ld d, a
- ld a, [$ff16]
- and a, $3f ; sound length
- or d
- ld [$ff16], a
- ret
-.asm_e81db ; unused
- ld a, [$c294]
- ld [$ff18], a
- ld a, [$c295]
- ld [$ff19], a
- ret
-.asm_e81e6
- ld a, [$c292]
- ld d, a
- ld a, [$ff16]
- and a, $3f ; sound length
- or d
- ld [$ff16], a
- ld a, [$c294]
- ld [$ff18], a
- ret
-.ch2rest
- ld a, [$ff26]
- and a, %10001101 ; ch2 off
- ld [$ff26], a
- ld hl, $ff15
- call ClearChannel
- ret
-.asm_e8204
- ld hl, $c292
- ld a, $3f ; sound length
- or [hl]
- ld [$ff16], a
- ld a, [$c293]
- ld [$ff17], a
- ld a, [$c294]
- ld [$ff18], a
- ld a, [$c295]
- or a, $80 ; initial (restart)
- ld [$ff19], a
- ret
-
-.Channel3
-.Channel7
- ld hl, Channel1NoteFlags - Channel1
- add hl, bc
- bit 5, [hl] ; rest
- jr nz, .ch3rest
- bit 4, [hl]
- jr nz, .asm_e824d
- bit 6, [hl]
- jr nz, .asm_e823a
- ret
-.asm_e822f ; unused
- ld a, [$c294]
- ld [$ff1d], a
- ld a, [$c295]
- ld [$ff1e], a
- ret
-.asm_e823a
- ld a, [$c294]
- ld [$ff1d], a
- ret
-.ch3rest
- ld a, [$ff26]
- and a, %10001011 ; ch3 off
- ld [$ff26], a
- ld hl, $ff1a
- call ClearChannel
- ret
-.asm_e824d
- ld a, $3f
- ld [$ff1b], a
- xor a
- ld [$ff1a], a
- call .asm_e8268
- ld a, $80
- ld [$ff1a], a
- ld a, [$c294]
- ld [$ff1d], a
- ld a, [$c295]
- or a, $80
- ld [$ff1e], a
- ret
-.asm_e8268
- push hl
- ld a, [$c293]
- and a, $0f ; only 0-9 are valid
- ld l, a
- ld h, $00
- ; hl << 4
- ; each wavepattern is $0f bytes long
- ; so seeking is done in $10s
- add hl, hl
- add hl, hl
- add hl, hl
- add hl, hl
- ld de, WaveSamples
- add hl, de
- ; load wavepattern into $ff30-$ff3f
- ld a, [hli]
- ld [$ff30], a
- ld a, [hli]
- ld [$ff31], a
- ld a, [hli]
- ld [$ff32], a
- ld a, [hli]
- ld [$ff33], a
- ld a, [hli]
- ld [$ff34], a
- ld a, [hli]
- ld [$ff35], a
- ld a, [hli]
- ld [$ff36], a
- ld a, [hli]
- ld [$ff37], a
- ld a, [hli]
- ld [$ff38], a
- ld a, [hli]
- ld [$ff39], a
- ld a, [hli]
- ld [$ff3a], a
- ld a, [hli]
- ld [$ff3b], a
- ld a, [hli]
- ld [$ff3c], a
- ld a, [hli]
- ld [$ff3d], a
- ld a, [hli]
- ld [$ff3e], a
- ld a, [hli]
- ld [$ff3f], a
- pop hl
- ld a, [$c293]
- and a, $f0
- sla a
- ld [$ff1c], a
- ret
-
-.Channel4
-.Channel8
- ld hl, Channel1NoteFlags - Channel1
- add hl, bc
- bit 5, [hl] ; rest
- jr nz, .ch4rest
- bit 4, [hl]
- jr nz, .asm_e82d4
- ret
-.asm_e82c1 ; unused
- ld a, [$c294]
- ld [$ff22], a
- ret
-.ch4rest
- ld a, [$ff26]
- and a, %10000111 ; ch4 off
- ld [$ff26], a
- ld hl, $ff1f
- call ClearChannel
- ret
-.asm_e82d4
- ld a, $3f ; sound length
- ld [$ff20], a
- ld a, [$c293]
- ld [$ff21], a
- ld a, [$c294]
- ld [$ff22], a
- ld a, $80
- ld [$ff23], a
- ret
-; e82e7
-
-_CheckSFX: ; e82e7
-; return carry if any sfx channels are active
- ld hl, $c1cc ; Channel5Flags
- bit 0, [hl]
- jr nz, .sfxon
- ld hl, $c1fe ; Channel6Flags
- bit 0, [hl]
- jr nz, .sfxon
- ld hl, $c230 ; Channel7Flags
- bit 0, [hl]
- jr nz, .sfxon
- ld hl, $c262 ; Channel8Flags
- bit 0, [hl]
- jr nz, .sfxon
- and a
- ret
-.sfxon
- scf
- ret
-; e8307
-
-Functione8307: ; e8307
-; what is $c2a6?
- ld a, [$c2a6]
- bit 7, a
- ret z
- and a, $7f
- ld d, a
- call _CheckSFX
- jr c, .asm_e8335
- and a
- jr z, .asm_e8323
- cp a, $10
- jr z, .asm_e831e
- jr .asm_e8335
-.asm_e831e
- ld hl, Tablee8354
- jr .updatehw
-.asm_e8323
- ld hl, Tablee8350
-.updatehw
- xor a
- ld [$ff10], a ; sweep off
- ld a, [hli]
- ld [$ff11], a ; sound length / duty cycle
- ld a, [hli]
- ld [$ff12], a ; ch1 volume envelope
- ld a, [hli]
- ld [$ff13], a ; ch1 frequency lo
- ld a, [hli]
- ld [$ff14], a ; ch1 frequency hi
-.asm_e8335
- ld a, d
- inc a
- cp a, $1e
- jr c, .asm_e833c
- xor a
-.asm_e833c
- or a, $80
- ld [$c2a6], a
- ; is hw ch1 on?
- ld a, [SoundOutput]
- and a, $11
- ret nz
- ; if not, turn it on
- ld a, [SoundOutput]
- or a, $11
- ld [SoundOutput], a
- ret
-; e8350
-
-Tablee8350: ; e8350
- db $80 ; duty 50%
- db $e2 ; volume $e, envelope decrease sweep 2
- db $50 ; frequency: $750
- db $87 ; restart sound
-; e8354
-
-Tablee8354: ; e8354
- db $80 ; duty 50%
- db $e2 ; volume $e, envelope decrease sweep 2
- db $ee ; frequency: $6ee
- db $86 ; restart sound
-; e8358
-
-FadeMusic: ; e8358
-; fade music if applicable
-; usage:
-; write to MusicFade
-; song fades out at the given rate
-; load song id in MusicFadeID
-; fade new song in
-; notes:
-; max # frames per volume level is $3f
-
- ; fading?
- ld a, [MusicFade]
- and a
- ret z
- ; has the count ended?
- ld a, [MusicFadeCount]
- and a
- jr z, .update
- ; count down
- dec a
- ld [MusicFadeCount], a
- ret
-.update
- ld a, [MusicFade]
- ld d, a
- ; get new count
- and a, $3f
- ld [MusicFadeCount], a
- ; get SO1 volume
- ld a, [Volume]
- and a, $07
- ; which way are we fading?
- bit 7, d
- jr nz, .fadein
- ; fading out
- and a
- jr z, .novolume
- dec a
- jr .updatevolume
-.novolume
- ; make sure volume is off
- xor a
- ld [Volume], a
- ; did we just get on a bike?
- ld a, [PlayerState]
- cp a, $01 ; bicycle
- jr z, .bicycle
- push bc
- ; restart sound
- call MusicFadeRestart
- ; get new song id
- ld a, [MusicFadeIDLo]
- and a
- jr z, .quit ; this assumes there are fewer than 256 songs!
- ld e, a
- ld a, [MusicFadeIDHi]
- ld d, a
- ; load new song
- call LoadMusic
-.quit
- ; cleanup
- pop bc
- ; stop fading
- xor a
- ld [MusicFade], a
- ret
-.bicycle
- push bc
- ; restart sound
- call MusicFadeRestart
- ; this turns the volume up
- ; turn it back down
- xor a
- ld [Volume], a
- ; get new song id
- ld a, [MusicFadeIDLo]
- ld e, a
- ld a, [MusicFadeIDHi]
- ld d, a
- ; load new song
- call LoadMusic
- pop bc
- ; fade in
- ld hl, MusicFade
- set 7, [hl]
- ret
-.fadein
- ; are we done?
- cp a, $07
- jr nc, .maxvolume
- ; inc volume
- inc a
- jr .updatevolume
-.maxvolume
- ; we're done
- xor a
- ld [MusicFade], a
- ret
-.updatevolume
- ; hi = lo
- ld d, a
- swap a
- or d
- ld [Volume], a
- ret
-; e83d1
-
-LoadNote: ; e83d1
- ; check mute??
- ld hl, Channel1Flags2 - Channel1
- add hl, bc
- bit 1, [hl]
- ret z
- ; get note duration
- ld hl, Channel1NoteDuration - Channel1
- add hl, bc
- ld a, [hl]
- ld hl, $c297 ; ????
- sub [hl]
- jr nc, .ok
- ld a, $01
-.ok
- ld [hl], a
- ; get frequency
- ld hl, Channel1Frequency - Channel1
- add hl, bc
- ld e, [hl]
- inc hl
- ld d, [hl]
- ; ????
- ld hl, $0021
- add hl, bc
- ld a, e
- sub [hl]
- ld e, a
- ld a, d
- sbc a, $00
- ld d, a
- ; ????
- ld hl, $0022
- add hl, bc
- sub [hl]
- jr nc, .asm_e8420
- ; ????
- ld hl, Channel1Flags3 - Channel1
- add hl, bc
- set 1, [hl]
- ; get frequency
- ld hl, Channel1Frequency - Channel1
- add hl, bc
- ld e, [hl]
- inc hl
- ld d, [hl]
- ; ????
- ld hl, $0021
- add hl, bc
- ld a, [hl]
- sub e
- ld e, a
- ld a, d
- sbc a, $00
- ld d, a
- ; ????
- ld hl, $0022
- add hl, bc
- ld a, [hl]
- sub d
- ld d, a
- jr .asm_e843e
-.asm_e8420
- ; ????
- ld hl, Channel1Flags3 - Channel1
- add hl, bc
- res 1, [hl]
- ; get frequency
- ld hl, Channel1Frequency - Channel1
- add hl, bc
- ld e, [hl]
- inc hl
- ld d, [hl]
- ; ????
- ld hl, $0021
- add hl, bc
- ld a, e
- sub [hl]
- ld e, a
- ld a, d
- sbc a, $00
- ld d, a
- ; ????
- ld hl, $0022
- add hl, bc
- sub [hl]
- ld d, a
-.asm_e843e
- push bc
- ld hl, $c297
- ld b, $00 ; loop count
-.loop
- inc b
- ld a, e
- sub [hl]
- ld e, a
- jr nc, .loop
- ld a, d
- and a
- jr z, .quit
- dec d
- jr .loop
-.quit
- ld a, e ; result
- add [hl]
- ld d, b ; loop count
- ; ????
- pop bc
- ld hl, $0023
- add hl, bc
- ld [hl], d
- ld hl, $0024
- add hl, bc
- ld [hl], a
- ; clear ????
- ld hl, $0025
- add hl, bc
- xor a
- ld [hl], a
- ret
-; e8466
-
-Functione8466: ; e8466
-; handle vibrato and other things
-; unknowns: $c292, $c294
- ld hl, Channel1Flags2 - Channel1
- add hl, bc
- bit 2, [hl]
- jr z, .next
- ld hl, $001c
- add hl, bc
- ld a, [hl]
- rlca
- rlca
- ld [hl], a
- and a, $c0
- ld [$c292], a
- ld hl, Channel1NoteFlags - Channel1
- add hl, bc
- set 0, [hl]
-.next
- ld hl, Channel1Flags2 - Channel1
- add hl, bc
- bit 4, [hl]
- jr z, .vibrato
- ld hl, $0027
- add hl, bc
- ld e, [hl]
- inc hl
- ld d, [hl]
- ld hl, $c294
- ld a, [hli]
- ld h, [hl]
- ld l, a
- add hl, de
- ld e, l
- ld d, h
- ld hl, $c294
- ld [hl], e
- inc hl
- ld [hl], d
-.vibrato
- ; is vibrato on?
- ld hl, Channel1Flags2 - Channel1
- add hl, bc
- bit 0, [hl] ; vibrato
- jr z, .quit
- ; is vibrato active for this note yet?
- ; is the delay over?
- ld hl, Channel1VibratoDelayCount - Channel1
- add hl, bc
- ld a, [hl]
- and a
- jr nz, .subexit
- ; is the extent nonzero?
- ld hl, Channel1VibratoExtent - Channel1
- add hl, bc
- ld a, [hl]
- and a
- jr z, .quit
- ; save it for later
- ld d, a
- ; is it time to toggle vibrato up/down?
- ld hl, Channel1VibratoRate - Channel1
- add hl, bc
- ld a, [hl]
- and a, $0f ; count
- jr z, .toggle
-.subexit
- dec [hl]
- jr .quit
-.toggle
- ; refresh count
- ld a, [hl]
- swap [hl]
- or [hl]
- ld [hl], a
- ; ????
- ld a, [$c294]
- ld e, a
- ; toggle vibrato up/down
- ld hl, Channel1Flags3 - Channel1
- add hl, bc
- bit 0, [hl] ; vibrato up/down
- jr z, .down
-; up
- ; vibrato down
- res 0, [hl]
- ; get the delay
- ld a, d
- and a, $0f ; lo
- ;
- ld d, a
- ld a, e
- sub d
- jr nc, .asm_e84ef
- ld a, $00
- jr .asm_e84ef
-.down
- ; vibrato up
- set 0, [hl]
- ; get the delay
- ld a, d
- and a, $f0 ; hi
- swap a ; move it to lo
- ;
- add e
- jr nc, .asm_e84ef
- ld a, $ff
-.asm_e84ef
- ld [$c294], a
- ;
- ld hl, Channel1NoteFlags - Channel1
- add hl, bc
- set 6, [hl]
-.quit
- ret
-; e84f9
-
-Functione84f9: ; e84f9
- ; quit if ????
- ld hl, Channel1Flags2 - Channel1
- add hl, bc
- bit 1, [hl]
- ret z
- ; de = Frequency
- ld hl, Channel1Frequency - Channel1
- add hl, bc
- ld e, [hl]
- inc hl
- ld d, [hl]
- ;
- ld hl, Channel1Flags3 - Channel1
- add hl, bc
- bit 1, [hl]
- jr z, .next
- ;
- ld hl, $0023
- add hl, bc
- ld l, [hl]
- ld h, $00
- add hl, de
- ld d, h
- ld e, l
- ; get ????
- ld hl, $0024
- add hl, bc
- ld a, [hl]
- ; add it to ????
- ld hl, $0025
- add hl, bc
- add [hl]
- ld [hl], a
- ld a, $00
- adc e
- ld e, a
- ld a, $00
- adc d
- ld d, a
- ;
- ld hl, $0022
- add hl, bc
- ld a, [hl]
- cp d
- jp c, .quit1
- jr nz, .quit2
- ld hl, $0021
- add hl, bc
- ld a, [hl]
- cp e
- jp c, .quit1
- jr .quit2
-.next
- ld a, e
- ld hl, $0023
- add hl, bc
- ld e, [hl]
- sub e
- ld e, a
- ld a, d
- sbc a, $00
- ld d, a
- ld hl, $0024
- add hl, bc
- ld a, [hl]
- add a
- ld [hl], a
- ld a, e
- sbc a, $00
- ld e, a
- ld a, d
- sbc a, $00
- ld d,a
- ld hl, $0022
- add hl, bc
- ld a, d
- cp [hl]
- jr c, .quit1
- jr nz, .quit2
- ld hl, $0021
- add hl, bc
- ld a, e
- cp [hl]
- jr nc, .quit2
-.quit1
- ld hl, Channel1Flags2 - Channel1
- add hl, bc
- res 1, [hl]
- ld hl, Channel1Flags3 - Channel1
- add hl, bc
- res 1, [hl]
- ret
-.quit2
- ld hl, Channel1Frequency - Channel1
- add hl, bc
- ld [hl], e
- inc hl
- ld [hl], d
- ld hl, Channel1NoteFlags - Channel1
- add hl, bc
- set 1, [hl]
- set 0, [hl]
- ret
-; e858c
-HandleNoise: ; e858c
- ; is noise sampling on?
- ld hl, Channel1Flags - Channel1
- add hl, bc
- bit 4, [hl] ; noise sampling
- ret z
- ; are we in a sfx channel?
- ld a, [CurChannel]
- bit 2, a ; sfx
- jr nz, .next
- ; is ch8 on? (noise)
- ld hl, $c262 ; Channel8Flags
- bit 0, [hl] ; on?
- jr z, .next
- ; is ch8 playing noise?
- bit 4, [hl]
- ret nz ; quit if so
- ;
-.next
- ld a, [$c2a2]
- and a
- jr z, ReadNoiseSample
- dec a
- ld [$c2a2], a
- ret
-; e85af
-
-ReadNoiseSample: ; e85af
-; sample struct:
-; [wx] [yy] [zz]
-; w: ? either 2 or 3
-; x: ? 0-7
-; zzyy: pointer to sample data
-; NOTE: these seem to have $4000 added to them later
-
- ; de = NoiseSampleAddress
- ld hl, NoiseSampleAddress
- ld e, [hl]
- inc hl
- ld d, [hl]
- ; is it empty?
- ld a, e
- or d
- jr z, .quit
- ; get the noise sample
- ld a, [de]
- inc de
- ; are we done?
- cp a, $ff
- jr z, .quit
- ;
- and a, $0f ; bottom nybble
- inc a
- ld [$c2a2], a
- ld a, [de]
- inc de
- ld [$c293], a
- ld a, [de]
- inc de
- ld [$c294], a
- xor a
- ld [$c295], a
- ;
- ld hl, NoiseSampleAddress
- ld [hl], e
- inc hl
- ld [hl], d
- ld hl, Channel1NoteFlags - Channel1
- add hl, bc
- set 4, [hl]
- ret
-.quit
- ret
-; e85e1
-
-ParseMusic: ; e85e1
-; parses until a note is read or the song is ended
- call GetMusicByte ; store next byte in a
- cp a, $ff ; is the song over?
- jr z, .readff
- cp a, $d0 ; is it a note?
- jr c, .readnote
- ; then it's a command
-.readcommand
- call ParseCommand
- jr ParseMusic ; start over
-
-.readnote
-; CurMusicByte contains current note
-; special notes
- ld hl, Channel1Flags - Channel1
- add hl, bc
- bit 3, [hl]
- jp nz, Functione8698
- bit 5, [hl]
- jp nz, Functione8698
- bit 4, [hl] ; noise sample
- jp nz, GetNoiseSample
-; normal note
- ; set note duration (bottom nybble)
- ld a, [CurMusicByte]
- and a, $0f
- call SetNoteDuration
- ; get note pitch (top nybble)
- ld a, [CurMusicByte]
- swap a
- and a, $0f
- jr z, .rest ; pitch $0 -> rest
- ; update pitch
- ld hl, Channel1Pitch - Channel1
- add hl, bc
- ld [hl], a
- ; store pitch in e
- ld e, a
- ; store octave in d
- ld hl, Channel1Octave - Channel1
- add hl, bc
- ld d, [hl]
- ; update frequency
- call GetFrequency
- ld hl, Channel1Frequency - Channel1
- add hl, bc
- ld [hl], e
- inc hl
- ld [hl], d
- ; ????
- ld hl, Channel1NoteFlags - Channel1
- add hl, bc
- set 4, [hl]
- jp LoadNote
-.rest
-; note = rest
- ld hl, Channel1NoteFlags - Channel1
- add hl, bc
- set 5, [hl] ; Rest
- ret
-;
-.readff
-; $ff is reached in music data
- ld hl, Channel1Flags - Channel1
- add hl, bc
- bit 1, [hl] ; in a subroutine?
- jr nz, .readcommand ; execute
- ld a, [CurChannel]
- cp a, $04 ; channels 0-3?
- jr nc, .asm_e8651
- ; ????
- ld hl, $00cb
- add hl, bc
- bit 0, [hl]
- jr nz, .ok
-.asm_e8651
- ld hl, Channel1Flags - Channel1
- add hl, bc
- bit 5, [hl]
- call nz, RestoreVolume
- ; end music
- ld a, [CurChannel]
- cp a, $04 ; channel 5?
- jr nz, .ok
- ; ????
- xor a
- ld [$ff10], a ; sweep = 0
-.ok
-; stop playing
- ; turn channel off
- ld hl, Channel1Flags - Channel1
- add hl, bc
- res 0, [hl]
- ; note = rest
- ld hl, Channel1NoteFlags - Channel1
- add hl, bc
- set 5, [hl]
- ; clear music id & bank
- ld hl, Channel1MusicID - Channel1
- add hl, bc
- xor a
- ld [hli], a ; id hi
- ld [hli], a ; id lo
- ld [hli], a ; bank
- ret
-; e8679
+; The sound engine. Interfaces are in bank 0
+INCLUDE "audio/engine.asm"
-RestoreVolume: ; e8679
- ; ch5 only
- ld a, [CurChannel]
- cp a, $04
- ret nz
- xor a
- ld hl, $c222
- ld [hli], a
- ld [hl], a
- ld hl, $c286
- ld [hli], a
- ld [hl], a
- ld a, [LastVolume]
- ld [Volume], a
- xor a
- ld [LastVolume], a
- ld [SFXPriority], a
- ret
-; e8698
+; What music plays when a trainer notices you
+INCLUDE "audio/trainer_encounters.asm"
-Functione8698: ; e8698
- ; turn noise sampling on
- ld hl, Channel1NoteFlags - Channel1
- add hl, bc
- set 4, [hl] ; noise sample
- ; update note duration
- ld a, [CurMusicByte]
- call SetNoteDuration ; top nybble doesnt matter?
- ; update intensity from next param
- call GetMusicByte
- ld hl, Channel1Intensity - Channel1
- add hl, bc
- ld [hl], a
- ; update lo frequency from next param
- call GetMusicByte
- ld hl, Channel1FrequencyLo - Channel1
- add hl, bc
- ld [hl], a
- ; are we on the last channel? (noise sampling)
- ld a, [CurChannel]
- and a, $03
- cp a, $03
- ret z
- ; update hi frequency from next param
- call GetMusicByte
- ld hl, Channel1FrequencyHi - Channel1
- add hl, bc
- ld [hl], a
- ret
-; e86c5
-
-GetNoiseSample: ; e86c5
-; load ptr to sample header in NoiseSampleAddress
- ; are we on the last channel?
- ld a, [CurChannel]
- and a, $03
- cp a, $03
- ; ret if not
- ret nz
- ; update note duration
- ld a, [CurMusicByte]
- and a, $0f
- call SetNoteDuration
- ; check current channel
- ld a, [CurChannel]
- bit 2, a ; are we in a sfx channel?
- jr nz, .sfx
- ld hl, $c262 ; Channel8Flags
- bit 0, [hl] ; is ch8 on? (noise)
- ret nz
- ld a, [MusicNoiseSampleSet]
- jr .next
-.sfx
- ld a, [SFXNoiseSampleSet]
-.next
- ; load noise sample set id into de
- ld e, a
- ld d, $00
- ; load ptr to noise sample set in hl
- ld hl, NoiseSampleSetsPointers
- add hl, de
- add hl, de
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ; get pitch
- ld a, [CurMusicByte]
- swap a
- ; non-rest note?
- and a, $0f
- ret z
- ; use 'pitch' to seek noise sample set
- ld e, a
- ld d, $00
- add hl, de
- add hl, de
- ; load sample pointer into NoiseSampleAddress
- ld a, [hli]
- ld [NoiseSampleAddressLo], a
- ld a, [hl]
- ld [NoiseSampleAddressHi], a
- ; clear ????
- xor a
- ld [$c2a2], a
- ret
-; e870f
+; Pointer table for all 103 songs
+Music: INCLUDE "audio/music_pointers.asm"
-ParseCommand ; e870f
- ; reload command
- ld a, [CurMusicByte]
- ; get command #
- sub a, $d0 ; first command
- ld e, a
- ld d, $00
- ; seek command pointer
- ld hl, MusicCommands
- add hl, de
- add hl, de
- ; jump to the new pointer
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jp [hl]
-; e8720
-
-MusicCommands: ; e8720
-; pointer to each command in order
- ; octaves
- dw MusicD0 ; octave 8
- dw MusicD0 ; octave 7
- dw MusicD0 ; octave 6
- dw MusicD0 ; octave 5
- dw MusicD0 ; octave 4
- dw MusicD0 ; octave 3
- dw MusicD0 ; octave 2
- dw MusicD0 ; octave 1
- dw MusicD8 ; note length + intensity
- dw MusicD9 ; set starting octave
- dw MusicDA ; tempo
- dw MusicDB ; duty cycle
- dw MusicDC ; intensity
- dw MusicDD ; update sound status
- dw MusicDE ; ???? + duty cycle
- dw MusicDF ;
- dw MusicE0 ;
- dw MusicE1 ; vibrato
- dw MusicE2 ;
- dw MusicE3 ; music noise sampling
- dw MusicE4 ; force panning
- dw MusicE5 ; volume
- dw MusicE6 ; tune
- dw MusicE7 ;
- dw MusicE8 ;
- dw MusicE9 ; global tempo
- dw MusicEA ; restart current channel from header
- dw MusicEB ; new song
- dw MusicEC ; sfx priority on
- dw MusicED ; sfx priority off
- dw MusicEE ;
- dw MusicEF ; stereo panning
- dw MusicF0 ; sfx noise sampling
- dw MusicF1 ; nothing
- dw MusicF1 ; nothing
- dw MusicF1 ; nothing
- dw MusicF1 ; nothing
- dw MusicF1 ; nothing
- dw MusicF1 ; nothing
- dw MusicF1 ; nothing
- dw MusicF1 ; nothing
- dw MusicF9 ;
- dw MusicFA ;
- dw MusicFB ;
- dw MusicFC ; jump
- dw MusicFD ; loop
- dw MusicFE ; call
- dw MusicFF ; return
-; e8780
-
-MusicF1: ; e8780
- ret
-; e8781
-
-MusicFF: ; e8781
-; called when $ff is encountered w/ subroutine flag set
-; end music stream
-; return to caller of the subroutine
- ; reset subroutine flag
- ld hl, Channel1Flags - Channel1
- add hl, bc
- res 1, [hl]
- ; copy LastMusicAddress to MusicAddress
- ld hl, Channel1LastMusicAddress - Channel1
- add hl, bc
- ld e, [hl]
- inc hl
- ld d, [hl]
- ld hl, Channel1MusicAddress - Channel1
- add hl, bc
- ld [hl], e
- inc hl
- ld [hl], d
- ret
-; e8796
+; Empty song
+Music_Nothing: INCLUDE "music/nothing.asm"
-MusicFE: ; e8796
-; call music stream (subroutine)
-; parameters: ll hh ; pointer to subroutine
- ; get pointer from next 2 bytes
- call GetMusicByte
- ld e, a
- call GetMusicByte
- ld d, a
- push de
- ; copy MusicAddress to LastMusicAddress
- ld hl, Channel1MusicAddress - Channel1
- add hl, bc
- ld e, [hl]
- inc hl
- ld d, [hl]
- ld hl, Channel1LastMusicAddress - Channel1
- add hl, bc
- ld [hl], e
- inc hl
- ld [hl], d
- ; load pointer into MusicAddress
- pop de
- ld hl, Channel1MusicAddress - Channel1
- add hl, bc
- ld [hl], e
- inc hl
- ld [hl], d
- ; set subroutine flag
- ld hl, Channel1Flags - Channel1
- add hl, bc
- set 1, [hl]
- ret
-; e87bc
+; Pointer table for all 68 base cries
+Cries: INCLUDE "audio/cry_pointers.asm"
-MusicFC: ; e87bc
-; jump
-; parameters: ll hh ; pointer
- ; get pointer from next 2 bytes
- call GetMusicByte
- ld e, a
- call GetMusicByte
- ld d, a
- ld hl, Channel1MusicAddress - Channel1
- add hl, bc
- ld [hl], e
- inc hl
- ld [hl], d
- ret
-; e87cc
-
-MusicFD: ; e87cc
-; loops xx - 1 times
-; 00: infinite
-; params: 3
-; xx ll hh
-; xx : loop count
-; ll hh : pointer
-
- ; get loop count
- call GetMusicByte
- ld hl, Channel1Flags - Channel1
- add hl, bc
- bit 2, [hl] ; has the loop been initiated?
- jr nz, .checkloop
- and a ; loop counter 0 = infinite
- jr z, .loop
- ; initiate loop
- dec a
- set 2, [hl] ; set loop flag
- ld hl, Channel1LoopCount - Channel1
- add hl, bc
- ld [hl], a ; store loop counter
-.checkloop
- ld hl, Channel1LoopCount - Channel1
- add hl, bc
- ld a, [hl]
- and a ; are we done?
- jr z, .endloop
- dec [hl]
-.loop
- ; get pointer
- call GetMusicByte
- ld e, a
- call GetMusicByte
- ld d, a
- ; load new pointer into MusicAddress
- ld hl, Channel1MusicAddress - Channel1
- add hl, bc
- ld [hl], e
- inc hl
- ld [hl], d
- ret
+; Pointer table for all 207 sfx
+SFX: INCLUDE "audio/sfx_pointers.asm"
-.endloop
- ; reset loop flag
- ld hl, Channel1Flags - Channel1
- add hl, bc
- res 2, [hl]
- ; skip to next command
- ld hl, Channel1MusicAddress - Channel1
- add hl, bc
- ld e, [hl]
- inc hl
- ld d, [hl]
- inc de ; skip
- inc de ; pointer
- ld [hl], d
- dec hl
- ld [hl], e
- ret
-; e880e
-MusicFA: ; e880e
-; set condition for a jump
-; used with FB
-; params: 1
-; xx ; condition
+; Songs I
- ; set condition
- call GetMusicByte
- ld hl, Channel1Condition - Channel1
- add hl, bc
- ld [hl], a
- ret
-; e8817
-
-MusicFB: ; e8817
-; conditional jump
-; used with FA
-; params: 3
-; xx: condition
-; ll hh: pointer
-
-; check condition
- ; a = condition
- call GetMusicByte
- ; if existing condition matches, jump to new address
- ld hl, Channel1Condition - Channel1
- add hl, bc
- cp [hl]
- jr z, .jump
-; skip to next command
- ; get address
- ld hl, Channel1MusicAddress - Channel1
- add hl, bc
- ld e, [hl]
- inc hl
- ld d, [hl]
- ; skip pointer
- inc de
- inc de
- ; update address
- ld [hl], d
- dec hl
- ld [hl], e
- ret
-.jump
-; jump to the new address
- ; get pointer
- call GetMusicByte
- ld e, a
- call GetMusicByte
- ld d, a
- ; update pointer in MusicAddress
- ld hl, Channel1MusicAddress - Channel1
- add hl, bc
- ld [hl], e
- inc hl
- ld [hl], d
- ret
-; e883e
-
-MusicEE; e883e
-; conditional jump
-; checks a byte in ram corresponding to the current channel
-; doesn't seem to be set by any commands
-; params: 2
-; ll hh ; pointer
-
-; if ????, jump
- ; get channel
- ld a, [CurChannel]
- and a, $03 ; ch0-3
- ld e, a
- ld d, $00
- ; hl = $c2b8 + channel id
- ld hl, $c2b8
- add hl, de
- ; if set, jump
- ld a, [hl]
- and a
- jr nz, .jump
-; skip to next command
- ; get address
- ld hl, Channel1MusicAddress - Channel1
- add hl, bc
- ld e, [hl]
- inc hl
- ld d, [hl]
- ; skip pointer
- inc de
- inc de
- ; update address
- ld [hl], d
- dec hl
- ld [hl], e
- ret
-.jump
- ; reset jump flag
- ld [hl], $00
- ; de = pointer
- call GetMusicByte
- ld e, a
- call GetMusicByte
- ld d, a
- ; update address
- ld hl, Channel1MusicAddress - Channel1
- add hl, bc
- ld [hl], e
- inc hl
- ld [hl], d
- ret
-; e886d
-
-MusicF9: ; e886d
-; sets some flag
-; seems to be unused
-; params: 0
- ld a, $01
- ld [$c2b5], a
- ret
-; e8873
-
-MusicE2: ; e8873
-; seems to have been dummied out
-; params: 1
- call GetMusicByte
- ld hl, $002c
- add hl, bc
- ld [hl], a
- ld hl, Channel1Flags2 - Channel1
- add hl, bc
- set 3, [hl]
- ret
-; e8882
-
-MusicE1: ; e8882
-; vibrato
-; params: 2
-; 1: [xx]
- ; delay in frames
-; 2: [yz]
- ; y: extent
- ; z: rate (# frames per cycle)
-
- ; set vibrato flag?
- ld hl, Channel1Flags2 - Channel1
- add hl, bc
- set 0, [hl]
- ; start at lower frequency (extent is positive)
- ld hl, Channel1Flags3 - Channel1
- add hl, bc
- res 0, [hl]
- ; get delay
- call GetMusicByte
-; update delay
- ld hl, Channel1VibratoDelay - Channel1
- add hl, bc
- ld [hl], a
-; update delay count
- ld hl, Channel1VibratoDelayCount - Channel1
- add hl, bc
- ld [hl], a
-; update extent
-; this is split into halves only to get added back together at the last second
- ; get extent/rate
- call GetMusicByte
- ld hl, Channel1VibratoExtent - Channel1
- add hl, bc
- ld d, a
- ; get top nybble
- and a, $f0
- swap a
- srl a ; halve
- ld e, a
- adc a, $00 ; round up
- swap a
- or e
- ld [hl], a
-; update rate
- ld hl, Channel1VibratoRate - Channel1
- add hl, bc
- ; get bottom nybble
- ld a, d
- and a, $0f
- ld d, a
- swap a
- or d
- ld [hl], a
- ret
-; e88bd
-
-MusicE0: ; e88bd
-; ????
-; params: 2
- call GetMusicByte
- ld [$c297], a
- call GetMusicByte
- ld d, a
- and a, $0f
- ld e, a
- ld a, d
- swap a
- and a, $0f
- ld d, a
- call GetFrequency
- ld hl, $0021
- add hl, bc
- ld [hl], e
- ld hl, $0022
- add hl, bc
- ld [hl], d
- ld hl, Channel1Flags2 - Channel1
- add hl, bc
- set 1, [hl]
- ret
-; e88e4
-
-MusicE6: ; e88e4
-; tone
-; params: 2
- ld hl, Channel1Flags2 - Channel1
- add hl, bc
- set 4, [hl]
- ld hl, $0028
- add hl, bc
- call GetMusicByte
- ld [hld], a
- call GetMusicByte
- ld [hl], a
- ret
-; e88f7
-
-MusicE7: ; e88f7
-; shrug
-; params: 1
- ld hl, Channel1Flags2 - Channel1
- add hl, bc
- set 6, [hl]
- call GetMusicByte
- ld hl, $0029
- add hl, bc
- ld [hl], a
- ret
-; e8906
-
-MusicDE: ; e8906
-; ???? + duty cycle
-; params: 1
- ;
- ld hl, Channel1Flags2 - Channel1
- add hl, bc
- set 2, [hl] ; duty cycle
- ;
- call GetMusicByte
- rrca
- rrca
- ld hl, $001c
- add hl, bc
- ld [hl], a
- ; update duty cycle
- and a, $c0 ; only uses top 2 bits
- ld hl, Channel1DutyCycle - Channel1
- add hl, bc
- ld [hl], a
- ret
-; e891e
-
-MusicE8: ; e891e
-; shrug
-; params: 1
- ld hl, Channel1Flags2 - Channel1
- add hl, bc
- set 5, [hl]
- call GetMusicByte
- ld hl, $002a
- add hl, bc
- ld [hl], a
- ret
-; e892d
-
-MusicDF: ; e892d
-; toggle something
-; params: none
- ld hl, Channel1Flags - Channel1
- add hl, bc
- bit 3, [hl]
- jr z, .on
- res 3, [hl]
- ret
-.on
- set 3, [hl]
- ret
-; e893b
-
-MusicE3: ; e893b
-; toggle music noise sampling
-; can't be used as a straight toggle since the param is not read from on->off
-; params:
-; noise on: 1
-; noise off: 0
- ; check if noise sampling is on
- ld hl, Channel1Flags - Channel1
- add hl, bc
- bit 4, [hl]
- jr z, .on
- ; turn noise sampling off
- res 4, [hl]
- ret
-.on
- ; turn noise sampling on
- set 4, [hl]
- call GetMusicByte
- ld [MusicNoiseSampleSet], a
- ret
-; e894f
-
-MusicF0: ; e894f
-; toggle sfx noise sampling
-; params:
-; on: 1
-; off: 0
- ; check if noise sampling is on
- ld hl, Channel1Flags - Channel1
- add hl, bc
- bit 4, [hl]
- jr z, .on
- ; turn noise sampling off
- res 4, [hl]
- ret
-.on
- ; turn noise sampling on
- set 4, [hl]
- call GetMusicByte
- ld [SFXNoiseSampleSet], a
- ret
-; e8963
-
-MusicD8: ; e8963
-; note length
-; # frames per 16th note
-; intensity: see MusicDC
-; params: 2
- ; note length
- call GetMusicByte
- ld hl, $002d
- add hl, bc
- ld [hl], a
- ld a, [CurChannel]
- and a, $03
- cp a, $03
- ret z
- ; intensity
- call MusicDC
- ret
-; e8977
-
-MusicDD: ; e8977
-; update sound status
-; params: 1
- call GetMusicByte
- ld [SoundInput], a
- ld hl, Channel1NoteFlags - Channel1
- add hl, bc
- set 3, [hl]
- ret
-; e8984
-
-MusicDB: ; e8984
-; duty cycle
-; params: 1
- call GetMusicByte
- rrca
- rrca
- and a, $c0
- ld hl, Channel1DutyCycle - Channel1
- add hl, bc
- ld [hl], a
- ret
-; e8991
-
-MusicDC: ; e8991
-; intensity
-; params: 1
-; hi: pressure
-; lo: velocity
- call GetMusicByte
- ld hl, Channel1Intensity - Channel1
- add hl, bc
- ld [hl], a
- ret
-; e899a
-
-MusicDA: ; e899a
-; global tempo
-; params: 2
-; de: tempo
- call GetMusicByte
- ld d, a
- call GetMusicByte
- ld e, a
- call SetGlobalTempo
- ret
-; e89a6
-
-MusicD0: ; e89a6
-; used by d0-d7
-; set octave based on lo nybble of the command
- ld hl, Channel1Octave - Channel1
- add hl, bc
- ld a, [CurMusicByte] ; get current command
- and a, $07
- ld [hl], a
- ret
-; e89b1
-
-MusicD9: ; e89b1
-; set starting octave
-; this forces all notes up by the starting octave
-; params: 1
- call GetMusicByte
- ld hl, Channel1StartingOctave - Channel1
- add hl, bc
- ld [hl], a
- ret
-; e89ba
-
-MusicEF: ; e89ba
-; stereo panning
-; params: 1
- ; stereo on?
- ld a, [Options]
- bit 5, a ; stereo
- jr nz, MusicE4
- ; skip param
- call GetMusicByte
- ret
-; e89c5
-
-MusicE4: ; e89c5
-; force panning
-; params: 1
- call SetLRTracks
- call GetMusicByte
- ld hl, Channel1Tracks - Channel1
- add hl, bc
- and [hl]
- ld [hl], a
- ret
-; e89d2
-
-MusicE5: ; e89d2
-; set volume
-; params: 1
-; see Volume
- ; read param even if it's not used
- call GetMusicByte
- ; is the song fading?
- ld a, [MusicFade]
- and a
- ret nz
- ; reload param
- ld a, [CurMusicByte]
- ; set volume
- ld [Volume], a
- ret
-; e89e1
-
-MusicE9: ; e89e1
-; set global tempo to current channel tempo +- param
-; params: 1 signed
- call GetMusicByte
- ld e, a
- ; check sign
- cp a, $80
- jr nc, .negative
-;positive
- ld d, $00
- jr .ok
-.negative
- ld d, $ff
-.ok
- ld hl, Channel1Tempo - Channel1
- add hl, bc
- ld a, [hli]
- ld h, [hl]
- ld l, a
- add hl, de
- ld e, l
- ld d, h
- call SetGlobalTempo
- ret
-; e89fd
-
-MusicEC: ; e89fd
-; turn sfx priority on
-; params: none
- ld a, $01
- ld [SFXPriority], a
- ret
-; e8a03
-
-MusicED: ; e8a03
-; turn sfx priority off
-; params: none
- xor a
- ld [SFXPriority], a
- ret
-; e8a08
-
-MusicEA: ; e8a08
-; restart current channel from channel header (same bank)
-; params: 2 (5)
-; ll hh: pointer to new channel header
-; header format: 0x yy zz
-; x: channel # (0-3)
-; zzyy: pointer to new music data
-
- ; update music id
- ld hl, Channel1MusicID - Channel1
- add hl, bc
- ld a, [hli]
- ld [MusicIDLo], a
- ld a, [hl]
- ld [MusicIDHi], a
- ; update music bank
- ld hl, Channel1MusicBank - Channel1
- add hl, bc
- ld a, [hl]
- ld [MusicBank], a
- ; get pointer to new channel header
- call GetMusicByte
- ld l, a
- call GetMusicByte
- ld h, a
- ld e, [hl]
- inc hl
- ld d, [hl]
- push bc ; save current channel
- call LoadChannel
- call StartChannel
- pop bc ; restore current channel
- ret
-; e8a30
-
-MusicEB: ; e8a30
-; new song
-; params: 2
-; de: song id
- call GetMusicByte
- ld e, a
- call GetMusicByte
- ld d, a
- push bc
- call LoadMusic
- pop bc
- ret
-; e8a3e
-
-GetMusicByte: ; e8a3e
-; returns byte from current address in a
-; advances to next byte in music data
-; input: bc = start of current channel
- push hl
- push de
- ; load address into de
- ld hl, Channel1MusicAddress - Channel1
- add hl, bc
- ld a, [hli]
- ld e, a
- ld d, [hl]
- ; load bank into a
- ld hl, Channel1MusicBank - Channel1
- add hl, bc
- ld a, [hl]
- ; get byte
- call LoadMusicByte ; load data into CurMusicByte
- inc de ; advance to next byte for next time this is called
- ; update channeldata address
- ld hl, Channel1MusicAddress - Channel1
- add hl, bc
- ld a, e
- ld [hli], a
- ld [hl], d
- ; cleanup
- pop de
- pop hl
- ; store channeldata in a
- ld a, [CurMusicByte]
- ret
-; e8a5d
-
-GetFrequency: ; e8a5d
-; generate frequency
-; input:
-; d: octave
-; e: pitch
-; output:
-; de: frequency
-
-; get octave
- ; get starting octave
- ld hl, Channel1StartingOctave - Channel1
- add hl, bc
- ld a, [hl]
- swap a ; hi nybble
- and a, $0f
- ; add current octave
- add d
- push af ; we'll use this later
- ; get starting octave
- ld hl, Channel1StartingOctave - Channel1
- add hl, bc
- ld a, [hl]
- and a, $0f ; lo nybble
- ;
- ld l, a ; ok
- ld d, $00
- ld h, d
- add hl, de ; add current pitch
- add hl, hl ; skip 2 bytes for each
- ld de, FrequencyTable
- add hl, de
- ld e, [hl]
- inc hl
- ld d, [hl]
- ; get our octave
- pop af
-.loop
- ; [7 - octave] loops
- cp a, $07
- jr nc, .ok
- ; sra de
- sra d
- rr e
- inc a
- jr .loop
-.ok
- ld a, d
- and a, $07 ; top 3 bits for frequency (11 total)
- ld d, a
- ret
-; e8a8d
-
-SetNoteDuration: ; e8a8d
-; input: a = note duration in 16ths
- ; store delay units in de
- inc a
- ld e, a
- ld d, $00
- ; store NoteLength in a
- ld hl, Channel1NoteLength - Channel1
- add hl, bc
- ld a, [hl]
- ; multiply NoteLength by delay units
- ld l, $00 ; just multiply
- call MultiplySimple
- ld a, l ; % $100
- ; store Tempo in de
- ld hl, Channel1Tempo - Channel1
- add hl, bc
- ld e, [hl]
- inc hl
- ld d, [hl]
- ; add ???? to the next result
- ld hl, $0016
- add hl, bc
- ld l, [hl]
- ; multiply Tempo by last result (NoteLength * delay % $100)
- call MultiplySimple
- ; copy result to de
- ld e, l
- ld d, h
- ; store result in ????
- ld hl, $0016
- add hl, bc
- ld [hl], e
- ; store result in NoteDuration
- ld hl, Channel1NoteDuration - Channel1
- add hl, bc
- ld [hl], d
- ret
-; e8ab8
-
-MultiplySimple: ; e8ab8
-; multiplies a and de
-; adds the result to l
-; stores the result in hl
- ld h, $00
-.loop
- ; halve a
- srl a
- ; is there a remainder?
- jr nc, .skip
- ; add it to the result
- add hl, de
-.skip
- ; add de, de
- sla e
- rl d
- ; are we done?
- and a
- jr nz, .loop
- ret
-; e8ac7
-
-SetGlobalTempo: ; e8ac7
- push bc ; save current channel
- ; are we dealing with music or sfx?
- ld a, [CurChannel]
- cp a, $04
- jr nc, .sfxchannels
- ld bc, Channel1
- call SetTempo
- ld bc, Channel2
- call SetTempo
- ld bc, Channel3
- call SetTempo
- ld bc, Channel4
- call SetTempo
- jr .end
-.sfxchannels
- ld bc, Channel5
- call SetTempo
- ld bc, Channel6
- call SetTempo
- ld bc, Channel7
- call SetTempo
- ld bc, Channel8
- call SetTempo
-.end
- pop bc ; restore current channel
- ret
-; e8b03
-
-SetTempo: ; e8b03
-; input:
-; de: note length
- ; update Tempo
- ld hl, Channel1Tempo - Channel1
- add hl, bc
- ld [hl], e
- inc hl
- ld [hl], d
- ; clear ????
- xor a
- ld hl, $0016
- add hl, bc
- ld [hl], a
- ret
-; e8b11
-
-StartChannel: ; e8b11
- call SetLRTracks
- ld hl, Channel1Flags - Channel1
- add hl, bc
- set 0, [hl] ; turn channel on
- ret
-; e8b1b
-
-SetLRTracks: ; e8b1b
-; set tracks for a the current channel to default
-; seems to be redundant since this is overwritten by stereo data later
- push de
- ; store current channel in de
- ld a, [CurChannel]
- and a, $03
- ld e, a
- ld d, $00
- ; get this channel's lr tracks
- call GetLRTracks
- add hl, de ; de = channel 0-3
- ld a, [hl]
- ; load lr tracks into Tracks
- ld hl, Channel1Tracks - Channel1
- add hl, bc
- ld [hl], a
- pop de
- ret
-; e8b30
-
-LoadMusic: ; e8b30
-; load music
- call MusicOff
- ld hl, MusicID
- ld [hl], e ; song number
- inc hl
- ld [hl], d ; MusicIDHi (always $00)
- ld hl, Music
- add hl, de ; three
- add hl, de ; byte
- add hl, de ; pointer
- ld a, [hli]
- ld [MusicBank], a
- ld e, [hl]
- inc hl
- ld d, [hl] ; music header address
- call FarLoadMusicByte ; store first byte of music header in a
- rlca
- rlca
- and a, $03 ; get number of channels
- inc a
-.loop
-; start playing channels
- push af
- call LoadChannel
- call StartChannel
- pop af
- dec a
- jr nz, .loop
- xor a
- ld [$c2b5], a
- ld [$c2b8], a
- ld [$c2b9], a
- ld [$c2ba], a
- ld [$c2bb], a
- ld [NoiseSampleAddressLo], a
- ld [NoiseSampleAddressHi], a
- ld [$c2a2], a
- ld [MusicNoiseSampleSet], a
- call MusicOn
- ret
-; e8b79
-
-PlayCry: ; e8b79
-; input: de = cry id
- call MusicOff
- ; load cry id
- ld hl, MusicID
- ld [hl], e
- inc hl
- ld [hl], d
- ; seek pointer table
- ld hl, Cries
- add hl, de
- add hl, de
- add hl, de
- ; get bank
- ld a, [hli]
- ld [MusicBank], a
- ; get address
- ld e, [hl]
- inc hl
- ld d, [hl]
-; read cry header
- ; get byte at bank:address
- call FarLoadMusicByte
- ; get top 2 bits (# chs)
- rlca
- rlca
- and a, $03
- inc a ; ch count -> loop count
-.loop
- push af
- call LoadChannel
- ld hl, Channel1Flags - Channel1
- add hl, bc
- set 5, [hl]
- ld hl, Channel1Flags2 - Channel1
- add hl, bc
- set 4, [hl]
- ld hl, $0027
- add hl, bc
- ld a, [$c2b0]
- ld [hli], a
- ld a, [$c2b1]
- ld [hl], a
- ; are we on the last channel? (music & sfx)
- ld a, [CurChannel]
- and a, $03
- cp a, $03
- jr nc, .start
- ; update tempo
- ld hl, Channel1Tempo - Channel1
- add hl, bc
- ld a, [$c2b2]
- ld [hli], a
- ld a, [$c2b3]
- ld [hl], a
-.start
- call StartChannel
- ld a, [$c2bc]
- and a
- jr z, .next
-; play cry from the side of the monster it's coming from (stereo only)
-; outside of battles cries play on both tracks
- ; is stereo on?
- ld a, [Options]
- bit 5, a ; stereo
- jr z, .next
- ; and [Tracks], [CryTracks]
- ld hl, Channel1Tracks - Channel1
- add hl, bc
- ld a, [hl]
- ld hl, CryTracks
- and a, [hl]
- ld hl, Channel1Tracks - Channel1
- add hl, bc
- ld [hl], a
-.next
- pop af
- dec a
- jr nz, .loop
- ; save current volume
- ld a, [LastVolume]
- and a
- jr nz, .end
- ld a, [Volume]
- ld [LastVolume], a
- ; cries have max volume
- ld a, $77
- ld [Volume], a
-.end
- ld a, $01 ; stop playing music
- ld [SFXPriority], a
- call MusicOn
- ret
-; e8c04
-
-LoadSFX: ; e8c04
-; clear channels if they aren't already
- call MusicOff
- ld hl, $c1cc ; Channel5Flags
- bit 0, [hl] ; ch5 on?
- jr z, .ch6
- res 0, [hl] ; turn it off
- xor a
- ld [$ff11], a ; length/wavepattern = 0
- ld a, $08
- ld [$ff12], a ; envelope = 0
- xor a
- ld [$ff13], a ; frequency lo = 0
- ld a, $80
- ld [$ff14], a ; restart sound (freq hi = 0)
- xor a
- ld [SoundInput], a ; global sound off
- ld [$ff10], a ; sweep = 0
-.ch6
- ld hl, $c1fe ; ch6 on?
- bit 0, [hl]
- jr z, .ch7
- res 0, [hl] ; turn it off
- xor a
- ld [$ff16], a ; length/wavepattern = 0
- ld a, $08
- ld [$ff17], a ; envelope = 0
- xor a
- ld [$ff18], a ; frequency lo = 0
- ld a, $80
- ld [$ff19], a ; restart sound (freq hi = 0)
-.ch7
- ld hl, $c230 ; ch7 on?
- bit 0, [hl]
- jr z, .ch8
- res 0, [hl] ; turn it off
- xor a
- ld [$ff1a], a ; sound mode #3 off
- ld [$ff1b], a ; length/wavepattern = 0
- ld a, $08
- ld [$ff1c], a ; envelope = 0
- xor a
- ld [$ff1d], a ; frequency lo = 0
- ld a, $80
- ld [$ff1e], a ; restart sound (freq hi = 0)
-.ch8
- ld hl, $c262 ; ch8 on?
- bit 0, [hl]
- jr z, .chscleared
- res 0, [hl] ; turn it off
- xor a
- ld [$ff20], a ; length/wavepattern = 0
- ld a, $08
- ld [$ff21], a ; envelope = 0
- xor a
- ld [$ff22], a ; frequency lo = 0
- ld a, $80
- ld [$ff23], a ; restart sound (freq hi = 0)
- xor a
- ld [NoiseSampleAddressLo], a
- ld [NoiseSampleAddressHi], a
-.chscleared
-; start reading sfx header for # chs
- ld hl, MusicID
- 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 [MusicBank], a
- ; get address
- ld e, [hl]
- inc hl
- ld d, [hl]
- ; get # channels
- call FarLoadMusicByte
- rlca ; top 2
- rlca ; bits
- and a, $03
- inc a ; # channels -> # loops
-.startchannels
- push af
- call LoadChannel ; bc = current channel
- ld hl, Channel1Flags - Channel1
- add hl, bc
- set 3, [hl]
- call StartChannel
- pop af
- dec a
- jr nz, .startchannels
- call MusicOn
- xor a
- ld [SFXPriority], a
- ret
-; e8ca6
-
-
-PlaySFX: ; e8ca6
-; play sfx de
-
- call MusicOff
-
-; standard procedure if stereo's off
- ld a, [Options]
- bit 5, a
- jp z, LoadSFX
-
-; else, let's go ahead with this
- ld hl, MusicID
- ld [hl], e
- inc hl
- ld [hl], d
-
-; get sfx ptr
- ld hl, SFX
- add hl, de
- add hl, de
- add hl, de
-
-; bank
- ld a, [hli]
- ld [MusicBank], a
-; address
- ld e, [hl]
- inc hl
- ld d, [hl]
-
-; bit 2-3
- call FarLoadMusicByte
- rlca
- rlca
- and 3 ; ch1-4
- inc a
-
-.loop
- push af
- call LoadChannel
-
- ld hl, Channel1Flags - Channel1
- add hl, bc
- set 3, [hl]
-
- push de
- ; get tracks for this channel
- ld a, [CurChannel]
- and 3 ; ch1-4
- ld e, a
- ld d, $0
- call GetLRTracks
- add hl, de
- ld a, [hl]
- ld hl, $c2bc
- and [hl]
-
- ld hl, Channel1Tracks - Channel1
- add hl, bc
- ld [hl], a
-
- ld hl, $0030 ; $c131 - Channel1
- add hl, bc
- ld [hl], a
-
- ld a, [CryTracks]
- cp 2 ; ch 1-2
- jr c, .asm_e8d0c
-
-; ch3-4
- ld a, [$c2be]
-
- ld hl, $002e ; $c12f - Channel1
- add hl, bc
- ld [hl], a
-
- ld hl, $002f ; $c130 - Channel1
- add hl, bc
- ld [hl], a
-
- ld hl, Channel1Flags2 - Channel1
- add hl, bc
- set 7, [hl]
-
-.asm_e8d0c
- pop de
-
-; turn channel on
- ld hl, Channel1Flags - Channel1
- add hl, bc
- set 0, [hl] ; on
-
-; done?
- pop af
- dec a
- jr nz, .loop
-
-; we're done
- call MusicOn
- ret
-; e8d1b
-
-
-LoadChannel: ; e8d1b
-; prep channel for use
-; input:
-; de:
- ; get pointer to current channel
- call FarLoadMusicByte
- inc de
- and a, $07 ; bit 0-2 (current channel)
- ld [CurChannel], a
- ld c, a
- ld b, $00
- ld hl, ChannelPointers
- add hl, bc
- add hl, bc
- ld c, [hl]
- inc hl
- ld b, [hl] ; bc = channel pointer
- ld hl, Channel1Flags - Channel1
- add hl, bc
- res 0, [hl] ; channel off
- call ChannelInit
- ; load music pointer
- ld hl, Channel1MusicAddress - Channel1
- add hl, bc
- call FarLoadMusicByte
- ld [hli], a
- inc de
- call FarLoadMusicByte
- ld [hl], a
- inc de
- ; load music id
- ld hl, Channel1MusicID - Channel1
- add hl, bc
- ld a, [MusicIDLo]
- ld [hli], a
- ld a, [MusicIDHi]
- ld [hl], a
- ; load music bank
- ld hl, Channel1MusicBank - Channel1
- add hl, bc
- ld a, [MusicBank]
- ld [hl], a
- ret
-; e8d5b
-
-ChannelInit: ; e8d5b
-; make sure channel is cleared
-; set default tempo and note length in case nothing is loaded
-; input:
-; bc = channel struct pointer
- push de
- xor a
- ; get channel struct location and length
- ld hl, Channel1MusicID - Channel1 ; start
- add hl, bc
- ld e, Channel2 - Channel1 ; channel struct length
- ; clear channel
-.loop
- ld [hli], a
- dec e
- jr nz, .loop
- ; set tempo to default ($100)
- ld hl, Channel1Tempo - Channel1
- add hl, bc
- xor a
- ld [hli], a
- inc a
- ld [hl], a
- ; set note length to default ($01) (fast)
- ld hl, Channel1NoteLength - Channel1
- add hl, bc
- ld [hl], a
- pop de
- ret
-; e8d76
-
-FarLoadMusicByte: ; e8d76
-; input:
-; de = current music address
-; output:
-; a = CurMusicByte
- ld a, [MusicBank]
- call LoadMusicByte
- ld a, [CurMusicByte]
- ret
-; e8d80
-
-FrequencyTable: ; e8d80
- dw $0000 ; filler
- dw $f82c
- dw $f89d
- dw $f907
- dw $f96b
- dw $f9ca
- dw $fa23
- dw $fa77
- dw $fac7
- dw $fb12
- dw $fb58
- dw $fb9b
- dw $fbda
- dw $fc16
- dw $fc4e
- dw $fc83
- dw $fcb5
- dw $fce5
- dw $fd11
- dw $fd3b
- dw $fd63
- dw $fd89
- dw $fdac
- dw $fdcd
- dw $fded
-; e8db2
-
-WaveSamples: ; e8db2
- ; these are streams of 32 4-bit values used as wavepatterns
- ; nothing interesting here!
- db $02, $46, $8a, $ce, $ff, $fe, $ed, $dc, $cb, $a9, $87, $65, $44, $33, $22, $11
- db $02, $46, $8a, $ce, $ef, $ff, $fe, $ee, $dd, $cb, $a9, $87, $65, $43, $22, $11
- db $13, $69, $bd, $ee, $ee, $ff, $ff, $ed, $de, $ff, $ff, $ee, $ee, $db, $96, $31
- db $02, $46, $8a, $cd, $ef, $fe, $de, $ff, $ee, $dc, $ba, $98, $76, $54, $32, $10
- db $01, $23, $45, $67, $8a, $cd, $ee, $f7, $7f, $ee, $dc, $a8, $76, $54, $32, $10
- db $00, $11, $22, $33, $44, $33, $22, $11, $ff, $ee, $cc, $aa, $88, $aa, $cc, $ee
- db $02, $46, $8a, $ce, $cb, $a9, $87, $65, $ff, $fe, $ed, $dc, $44, $33, $22, $11
- db $c0, $a9, $87, $f5, $ff, $fe, $ed, $dc, $44, $33, $22, $f1, $02, $46, $8a, $ce
- db $44, $33, $22, $1f, $00, $46, $8a, $ce, $f8, $fe, $ed, $dc, $cb, $a9, $87, $65
- db $11, $00, $00, $08, $00, $13, $57, $9a, $b4, $ba, $a9, $98, $87, $65, $43, $21
-; e8e52
-
-NoiseSampleSetsPointers: ; e8e52
- dw NoiseSampleSets0
- dw NoiseSampleSets1
- dw NoiseSampleSets2
- dw NoiseSampleSets3
- dw NoiseSampleSets4
- dw NoiseSampleSets5
-; e8e5e
-
-NoiseSampleSets:
-NoiseSampleSets0: ; e8e5e
- dw NoiseSampleSet00 ; rest
- dw NoiseSampleSet01 ; c
- dw NoiseSampleSet02 ; c#
- dw NoiseSampleSet03 ; d
- dw NoiseSampleSet04 ; d#
- dw NoiseSampleSet05 ; e
- dw NoiseSampleSet06 ; f
- dw NoiseSampleSet07 ; f#
- dw NoiseSampleSet08 ; g
- dw NoiseSampleSet09 ; g#
- dw NoiseSampleSet10 ; a
- dw NoiseSampleSet11 ; a#
- dw NoiseSampleSet12 ; b
-NoiseSampleSets1: ; e8e78
- dw NoiseSampleSet00
- dw NoiseSampleSet08
- dw NoiseSampleSet09
- dw NoiseSampleSet10
- dw NoiseSampleSet11
- dw NoiseSampleSet12
- dw NoiseSampleSet13
- dw NoiseSampleSet14
- dw NoiseSampleSet15
- dw NoiseSampleSet16
- dw NoiseSampleSet17
- dw NoiseSampleSet18
- dw NoiseSampleSet19
-NoiseSampleSets2: ; e8e92
- dw NoiseSampleSet00
- dw NoiseSampleSet01
- dw NoiseSampleSet17
- dw NoiseSampleSet18
- dw NoiseSampleSet19
- dw NoiseSampleSet05
- dw NoiseSampleSet06
- dw NoiseSampleSet07
- dw NoiseSampleSet08
- dw NoiseSampleSet09
- dw NoiseSampleSet10
- dw NoiseSampleSet11
- dw NoiseSampleSet12
-NoiseSampleSets3: ; e8eac
- dw NoiseSampleSet21
- dw NoiseSampleSet22
- dw NoiseSampleSet23
- dw NoiseSampleSet24
- dw NoiseSampleSet25
- dw NoiseSampleSet26
- dw NoiseSampleSet20
- dw NoiseSampleSet27
- dw NoiseSampleSet28
- dw NoiseSampleSet29
- dw NoiseSampleSet21
- dw NoiseSampleSet37
- dw NoiseSampleSet34
-NoiseSampleSets4: ; e8ec6
- dw NoiseSampleSet21
- dw NoiseSampleSet20
- dw NoiseSampleSet23
- dw NoiseSampleSet24
- dw NoiseSampleSet25
- dw NoiseSampleSet33
- dw NoiseSampleSet26
- dw NoiseSampleSet35
- dw NoiseSampleSet31
- dw NoiseSampleSet32
- dw NoiseSampleSet36
- dw NoiseSampleSet37
- dw NoiseSampleSet30
-NoiseSampleSets5: ; e8ee0
- dw NoiseSampleSet00
- dw NoiseSampleSet17
- dw NoiseSampleSet18
- dw NoiseSampleSet19
- dw NoiseSampleSet27
- dw NoiseSampleSet28
- dw NoiseSampleSet29
- dw NoiseSampleSet05
- dw NoiseSampleSet06
- dw NoiseSampleSet30
- dw NoiseSampleSet24
- dw NoiseSampleSet23
- dw NoiseSampleSet37
-; e8efa
-
-NoiseSampleSet00: ; e8efa
-; unused
- db $20, $11, $00
- db $ff ; end
-; e8efe
-
-NoiseSampleSet01: ; e8efe
- db $20, $c1, $33
- db $ff ; end
-; e8f02
-
-NoiseSampleSet02: ; e8f02
- db $20, $b1, $33
- db $ff ; end
-; e8f06
-
-NoiseSampleSet03: ; e8f06
- db $20, $a1, $33
- db $ff ; end
-; e8f0a
-
-NoiseSampleSet04: ; e8f0a
- db $20, $81, $33
- db $ff ; end
-; e8f0e
-
-NoiseSampleSet05: ; e8f0e
- db $27, $84, $37
- db $26, $84, $36
- db $25, $83, $35
- db $24, $83, $34
- db $23, $82, $33
- db $22, $81, $32
- db $ff ; end
-; e8f21
-
-NoiseSampleSet06: ; e8f21
- db $20, $51, $2a
- db $ff ; end
-; e8f25
-
-NoiseSampleSet07: ; e8f25
- db $21, $41, $2b
- db $20, $61, $2a
- db $ff ; end
-; e8f2c
-
-NoiseSampleSet08: ; e8f2c
- db $20, $81, $10
- db $ff ; end
-; e8f30
-
-NoiseSampleSet09: ; e8f30
- db $20, $82, $23
- db $ff ; end
-; e8f34
-
-NoiseSampleSet10: ; e8f34
- db $20, $82, $25
- db $ff ; end
-; e8f38
-
-NoiseSampleSet11: ; e8f38
- db $20, $82, $26
- db $ff ; end
-; e8f3c
-
-NoiseSampleSet12: ; e8f3c
- db $20, $a1, $10
- db $ff ; end
-; e8f40
-
-NoiseSampleSet13: ; e8f40
- db $20, $a2, $11
- db $ff ; end
-; e8f44
-
-NoiseSampleSet14: ; e8f44
- db $20, $a2, $50
- db $ff ; end
-; e8f48
-
-NoiseSampleSet15: ; e8f48
- db $20, $a1, $18
- db $20, $31, $33
- db $ff ; end
-; e8f4f
-
-NoiseSampleSet16: ; e8f4f
- db $22, $91, $28
- db $20, $71, $18
- db $ff ; end
-; e8f56
-
-NoiseSampleSet17: ; e8f56
- db $20, $91, $22
- db $ff ; end
-; e8f5a
-
-NoiseSampleSet18: ; e8f5a
- db $20, $71, $22
- db $ff ; end
-; e8f5e
-
-NoiseSampleSet19: ; e8f5e
- db $20, $61, $22
- db $ff ; end
-; e8f62
-
-NoiseSampleSet20: ; e8f62
- db $20, $11, $11
- db $ff ; end
-; e8f66
-
-NoiseSampleSet21: ; e8f66
- db $ff
-; e8f67
-
-NoiseSampleSet22: ; e8f67
- db $20, $91, $33
- db $ff ; end
-; e8f6b
-
-NoiseSampleSet23: ; e8f6b
- db $20, $51, $32
- db $ff ; end
-; e8f6f
-
-NoiseSampleSet24: ; e8f6f
- db $20, $81, $31
- db $ff ; end
-; e8f73
-
-NoiseSampleSet25: ; e8f73
- db $20, $88, $6b
- db $20, $71, $00
- db $ff ; end
-; e8f7a
-
-NoiseSampleSet26: ; e8f7a
- db $30, $91, $18
- db $ff ; end
-; e8f7e
-
-NoiseSampleSet27: ; e8f7e
- db $27, $92, $10
- db $ff ; end
-; e8f82
-
-NoiseSampleSet28: ; e8f82
- db $33, $91, $00
- db $33, $11, $00
- db $ff ; end
-; e8f89
-
-NoiseSampleSet29: ; e8f89
- db $33, $91, $11
- db $33, $11, $00
- db $ff ; end
-; e8f90
-
-NoiseSampleSet30: ; e8f90
- db $33, $88, $15
- db $20, $65, $12
- db $ff ; end
-; e8f97
-
-NoiseSampleSet31: ; e8f97
- db $33, $51, $21
- db $33, $11, $11
- db $ff ; end
-; e8f9e
-
-NoiseSampleSet32: ; e8f9e
- db $33, $51, $50
- db $33, $11, $11
- db $ff ; end
-; e8fa5
-
-NoiseSampleSet33: ; e8fa5
- db $20, $a1, $31
- db $ff ; end
-; e8fa9
-
-NoiseSampleSet34: ; e8fa9
- db $20, $84, $12
- db $ff ; end
-; e8fad
-
-NoiseSampleSet35: ; e8fad
- db $33, $81, $00
- db $33, $11, $00
- db $ff ; end
-; e8fb4
-
-NoiseSampleSet36: ; e8fb4
- db $33, $81, $21
- db $33, $11, $11
- db $ff ; end
-; e8fbb
-
-NoiseSampleSet37: ; e8fbb
- db $20, $a8, $6b
- db $20, $71, $00
- db $ff ; end
-; e8fc2
-
-GetLRTracks: ; e8fc2
-; gets the default sound l/r channels
-; stores mono/stereo table in hl
- ld a, [Options]
- bit 5, a ; stereo
- ; made redundant, could have had a purpose in gold
- jr nz, .stereo
- ld hl, MonoTracks
- ret
-.stereo
- ld hl, StereoTracks
- ret
-; e8fd1
-
-MonoTracks: ; e8fd1
-; bit corresponds to track #
-; hi: left channel
-; lo: right channel
- db $11, $22, $44, $88
-; e8fd5
-
-StereoTracks: ; e8fd5
-; made redundant
-; seems to be modified on a per-song basis
- db $11, $22, $44, $88
-; e8fd9
-
-ChannelPointers: ; e8fd9
-; music channels
- dw Channel1
- dw Channel2
- dw Channel3
- dw Channel4
-; sfx channels
- dw Channel5
- dw Channel6
- dw Channel7
- dw Channel8
-; e8fe9
-
-ClearChannels: ; e8fe9
-; runs ClearChannel for all 4 channels
-; doesn't seem to be used, but functionally identical to SoundRestart
- ld hl, $ff24
- xor a
- ld [hli], a
- ld [hli], a
- ld a, $80
- ld [hli], a
- ld hl, $ff10
- ld e, $04
-.loop
- call ClearChannel
- dec e
- jr nz, .loop
- ret
-; e8ffe
-
-ClearChannel: ; e8ffe
-; input: hl = beginning hw sound register ($ff10, $ff15, $ff1a, $ff1f)
-; output: 00 00 80 00 80
-
-; sound channel 1 2 3 4
- xor a
- ld [hli], a ; $ff10, $ff15, $ff1a, $ff1f ; sweep = 0
-
- ld [hli], a ; $ff11, $ff16, $ff1b, $ff20 ; length/wavepattern = 0
- ld a, $08
- ld [hli], a ; $ff12, $ff17, $ff1c, $ff21 ; envelope = 0
- xor a
- ld [hli], a ; $ff13, $ff18, $ff1d, $ff22 ; frequency lo = 0
- ld a, $80
- ld [hli], a ; $ff14, $ff19, $ff1e, $ff23 ; restart sound (freq hi = 0)
- ret
-; e900a
-
-PlayTrainerEncounterMusic: ; e900a
-; input: e = trainer type
- ; turn fade off
- xor a
- ld [MusicFade], a
- ; play nothing for one frame
- push de
- ld de, $0000 ; id: Music_Nothing
- call StartMusic
- call DelayFrame
- ; play new song
- call MaxVolume
- pop de
- ld d, $00
- ld hl, TrainerEncounterMusic
- add hl, de
- ld e, [hl]
- call StartMusic
- ret
-; e9027
-
-TrainerEncounterMusic: ; e9027
- db MUSIC_HIKER_ENCOUNTER
- db MUSIC_YOUNGSTER_ENCOUNTER ; falkner
- db MUSIC_LASS_ENCOUNTER ; whitney
- db MUSIC_YOUNGSTER_ENCOUNTER ; bugsy
- db MUSIC_OFFICER_ENCOUNTER ; morty
- db MUSIC_OFFICER_ENCOUNTER ; pryce
- db MUSIC_LASS_ENCOUNTER ; jasmine
- db MUSIC_OFFICER_ENCOUNTER ; chuck
- db MUSIC_BEAUTY_ENCOUNTER ; clair
- db MUSIC_RIVAL_ENCOUNTER ; rival1
- db MUSIC_HIKER_ENCOUNTER ; pokemon_prof
- db MUSIC_HIKER_ENCOUNTER ; will
- db MUSIC_HIKER_ENCOUNTER ; cal
- db MUSIC_OFFICER_ENCOUNTER ; bruno
- db MUSIC_HIKER_ENCOUNTER ; karen
- db MUSIC_HIKER_ENCOUNTER ; koga
- db MUSIC_OFFICER_ENCOUNTER ; champion
- db MUSIC_YOUNGSTER_ENCOUNTER ; brock
- db MUSIC_LASS_ENCOUNTER ; misty
- db MUSIC_OFFICER_ENCOUNTER ; lt_surge
- db MUSIC_ROCKET_ENCOUNTER ; scientist
- db MUSIC_OFFICER_ENCOUNTER ; erika
- db MUSIC_YOUNGSTER_ENCOUNTER ; youngster
- db MUSIC_YOUNGSTER_ENCOUNTER ; schoolboy
- db MUSIC_YOUNGSTER_ENCOUNTER ; bird_keeper
- db MUSIC_LASS_ENCOUNTER ; lass
- db MUSIC_LASS_ENCOUNTER ; janine
- db MUSIC_HIKER_ENCOUNTER ; cooltrainerm
- db MUSIC_BEAUTY_ENCOUNTER ; cooltrainerf
- db MUSIC_BEAUTY_ENCOUNTER ; beauty
- db MUSIC_POKEMANIAC_ENCOUNTER ; pokemaniac
- db MUSIC_ROCKET_ENCOUNTER ; gruntm
- db MUSIC_HIKER_ENCOUNTER ; gentleman
- db MUSIC_BEAUTY_ENCOUNTER ; skier
- db MUSIC_BEAUTY_ENCOUNTER ; teacher
- db MUSIC_BEAUTY_ENCOUNTER ; sabrina
- db MUSIC_YOUNGSTER_ENCOUNTER ; bug_catcher
- db MUSIC_HIKER_ENCOUNTER ; fisher
- db MUSIC_HIKER_ENCOUNTER ; swimmerm
- db MUSIC_BEAUTY_ENCOUNTER ; swimmerf
- db MUSIC_HIKER_ENCOUNTER ; sailor
- db MUSIC_POKEMANIAC_ENCOUNTER ; super_nerd
- db MUSIC_RIVAL_ENCOUNTER ; rival2
- db MUSIC_HIKER_ENCOUNTER ; guitarist
- db MUSIC_HIKER_ENCOUNTER ; hiker
- db MUSIC_HIKER_ENCOUNTER ; biker
- db MUSIC_OFFICER_ENCOUNTER ; blaine
- db MUSIC_POKEMANIAC_ENCOUNTER ; burglar
- db MUSIC_HIKER_ENCOUNTER ; firebreather
- db MUSIC_POKEMANIAC_ENCOUNTER ; juggler
- db MUSIC_HIKER_ENCOUNTER ; blackbelt_t
- db MUSIC_ROCKET_ENCOUNTER ; executivem
- db MUSIC_YOUNGSTER_ENCOUNTER ; psychic_t
- db MUSIC_LASS_ENCOUNTER ; picnicker
- db MUSIC_YOUNGSTER_ENCOUNTER ; camper
- db MUSIC_ROCKET_ENCOUNTER ; executivef
- db MUSIC_SAGE_ENCOUNTER ; sage
- db MUSIC_SAGE_ENCOUNTER ; medium
- db MUSIC_HIKER_ENCOUNTER ; boarder
- db MUSIC_HIKER_ENCOUNTER ; pokefanm
- db MUSIC_KIMONO_ENCOUNTER ; kimono_girl
- db MUSIC_LASS_ENCOUNTER ; twins
- db MUSIC_BEAUTY_ENCOUNTER ; pokefanf
- db MUSIC_HIKER_ENCOUNTER ; red
- db MUSIC_RIVAL_ENCOUNTER ; blue
- db MUSIC_HIKER_ENCOUNTER ; officer
- db MUSIC_ROCKET_ENCOUNTER ; gruntf
- db MUSIC_HIKER_ENCOUNTER ; mysticalman
- db MUSIC_HIKER_ENCOUNTER
- db MUSIC_HIKER_ENCOUNTER
- db MUSIC_HIKER_ENCOUNTER
-; e906e
-
-Music: ; e906e
- dbw BANK(Music_Nothing), Music_Nothing ; 0xe91a3
- dbw BANK(Music_TitleScreen), Music_TitleScreen ; 0xeb808
- dbw BANK(Music_Route1), Music_Route1 ; 0xec000
- dbw BANK(Music_Route3), Music_Route3 ; 0xec2ca
- dbw BANK(Music_Route12), Music_Route12 ; 0xec506
- dbw BANK(Music_MagnetTrain), Music_MagnetTrain ; 0xef5f0
- dbw BANK(Music_KantoGymLeaderBattle), Music_KantoGymLeaderBattle ; 0xec720
- dbw BANK(Music_KantoTrainerBattle), Music_KantoTrainerBattle ; 0xec9fa
- dbw BANK(Music_KantoWildPokemonBattle), Music_KantoWildPokemonBattle ; 0xed06d
- dbw BANK(Music_PokemonCenter), Music_PokemonCenter ; 0xed5c6
- dbw BANK(Music_LookHiker), Music_LookHiker ; 0xf7411
- dbw BANK(Music_LookLass), Music_LookLass ; 0xed79b
- dbw BANK(Music_LookOfficer), Music_LookOfficer ; 0xed82d
- dbw BANK(Music_HealPokemon), Music_HealPokemon ; 0xf0697
- dbw BANK(Music_LavenderTown), Music_LavenderTown ; 0xef72f
- dbw BANK(Music_Route2), Music_Route2 ; 0xed8dd
- dbw BANK(Music_MtMoon), Music_MtMoon ; 0xedb29
- dbw BANK(Music_ShowMeAround), Music_ShowMeAround ; 0xedbd8
- dbw BANK(Music_GameCorner), Music_GameCorner ; 0xedd6d
- dbw BANK(Music_Bicycle), Music_Bicycle ; 0xee119
- dbw BANK(Music_HallOfFame), Music_HallOfFame ; 0xf05bf
- dbw BANK(Music_ViridianCity), Music_ViridianCity ; 0xf4000
- dbw BANK(Music_CeladonCity), Music_CeladonCity ; 0xf435b
- dbw BANK(Music_TrainerVictory), Music_TrainerVictory ; 0xebeab
- dbw BANK(Music_WildPokemonVictory), Music_WildPokemonVictory ; 0xf4518
- dbw BANK(Music_GymLeaderVictory), Music_GymLeaderVictory ; 0xf462c
- dbw BANK(Music_MtMoonSquare), Music_MtMoonSquare ; 0xf4815
- dbw BANK(Music_Gym), Music_Gym ; 0xf48ae
- dbw BANK(Music_PalletTown), Music_PalletTown ; 0xf4b0c
- dbw BANK(Music_ProfOaksPokemonTalk), Music_ProfOaksPokemonTalk ; 0xf4c9f
- dbw BANK(Music_ProfOak), Music_ProfOak ; 0xf4dea
- dbw BANK(Music_LookRival), Music_LookRival ; 0xf4f79
- dbw BANK(Music_AfterTheRivalFight), Music_AfterTheRivalFight ; 0xf5127
- dbw BANK(Music_Surf), Music_Surf ; 0xf518a
- dbw BANK(Music_Evolution), Music_Evolution ; 0xf06e1
- dbw BANK(Music_NationalPark), Music_NationalPark ; 0xf54e8
- dbw BANK(Music_Credits), Music_Credits ; 0x1f31c
- dbw BANK(Music_AzaleaTown), Music_AzaleaTown ; 0xf57e8
- dbw BANK(Music_CherrygroveCity), Music_CherrygroveCity ; 0xf5b03
- dbw BANK(Music_LookKimonoGirl), Music_LookKimonoGirl ; 0xf79b8
- dbw BANK(Music_UnionCave), Music_UnionCave ; 0xf5c60
- dbw BANK(Music_JohtoWildPokemonBattle), Music_JohtoWildPokemonBattle ; 0xf5dc5
- dbw BANK(Music_JohtoTrainerBattle), Music_JohtoTrainerBattle ; 0xf6096
- dbw BANK(Music_Route30), Music_Route30 ; 0xefc01
- dbw BANK(Music_EcruteakCity), Music_EcruteakCity ; 0xef2d0
- dbw BANK(Music_VioletCity), Music_VioletCity ; 0xf0000
- dbw BANK(Music_JohtoGymLeaderBattle), Music_JohtoGymLeaderBattle ; 0xea50d
- dbw BANK(Music_ChampionBattle), Music_ChampionBattle ; 0xea9c1
- dbw BANK(Music_RivalBattle), Music_RivalBattle ; 0xe974f
- dbw BANK(Music_RocketBattle), Music_RocketBattle ; 0xe9b6f
- dbw BANK(Music_ElmsLab), Music_ElmsLab ; 0xea040
- dbw BANK(Music_DarkCave), Music_DarkCave ; 0xea2be
- dbw BANK(Music_Route29), Music_Route29 ; 0xf0386
- dbw BANK(Music_Route36), Music_Route36 ; 0xe94e9
- dbw BANK(Music_SSAqua), Music_SSAqua ; 0xead99
- dbw BANK(Music_LookYoungster), Music_LookYoungster ; 0xf66c3
- dbw BANK(Music_LookBeauty), Music_LookBeauty ; 0xeee3e
- dbw BANK(Music_LookRocket), Music_LookRocket ; 0xf74a2
- dbw BANK(Music_LookPokemaniac), Music_LookPokemaniac ; 0xebde1
- dbw BANK(Music_LookSage), Music_LookSage ; 0xee35e
- dbw BANK(Music_NewBarkTown), Music_NewBarkTown ; 0xeb2d3
- dbw BANK(Music_GoldenrodCity), Music_GoldenrodCity ; 0xeb453
- dbw BANK(Music_VermilionCity), Music_VermilionCity ; 0xeb676
- dbw BANK(Music_PokemonChannel), Music_PokemonChannel ; 0xee45f
- dbw BANK(Music_PokeFluteChannel), Music_PokeFluteChannel ; 0xf7b13
- dbw BANK(Music_TinTower), Music_TinTower ; 0xf6811
- dbw BANK(Music_SproutTower), Music_SproutTower ; 0xf6974
- dbw BANK(Music_BurnedTower), Music_BurnedTower ; 0xf6a99
- dbw BANK(Music_Lighthouse), Music_Lighthouse ; 0xee569
- dbw BANK(Music_LakeOfRage), Music_LakeOfRage ; 0xee6c5
- dbw BANK(Music_IndigoPlateau), Music_IndigoPlateau ; 0xee852
- dbw BANK(Music_Route37), Music_Route37 ; 0xee94b
- dbw BANK(Music_RocketHideout), Music_RocketHideout ; 0xeeb75
- dbw BANK(Music_DragonsDen), Music_DragonsDen ; 0xeece8
- dbw BANK(Music_JohtoWildPokemonBattleNight), Music_JohtoWildPokemonBattleNight ; 0xf605c
- dbw BANK(Music_RuinsOfAlphRadioSignal), Music_RuinsOfAlphRadioSignal ; 0xeedcb
- dbw BANK(Music_SuccessfulCapture), Music_SuccessfulCapture ; 0xf4602
- dbw BANK(Music_Route26), Music_Route26 ; 0xeefb2
- dbw BANK(Music_Mom), Music_Mom ; 0xf6bf2
- dbw BANK(Music_VictoryRoad), Music_VictoryRoad ; 0xf6c72
- dbw BANK(Music_PokemonLullaby), Music_PokemonLullaby ; 0xf6d79
- dbw BANK(Music_PokemonMarch), Music_PokemonMarch ; 0xf6e23
- dbw BANK(Music_GoldSilverOpening), Music_GoldSilverOpening ; 0xf7055
- dbw BANK(Music_GoldSilverOpening2), Music_GoldSilverOpening2 ; 0xf7308
- dbw BANK(Music_MainMenu), Music_MainMenu ; 0xf78fd
- dbw BANK(Music_RuinsOfAlphInterior), Music_RuinsOfAlphInterior ; 0xebd9e
- dbw BANK(Music_RocketTheme), Music_RocketTheme ; 0xf766d
- dbw BANK(Music_DancingHall), Music_DancingHall ; 0xef9bc
- dbw BANK(Music_BugCatchingContestResults), Music_BugCatchingContestResults ; 0xefb3e
- dbw BANK(Music_BugCatchingContest), Music_BugCatchingContest ; 0xf7c16
- dbw BANK(Music_LakeOfRageRocketsRadioSignal), Music_LakeOfRageRocketsRadioSignal ; 0xef5b1
- dbw BANK(Music_Printer), Music_Printer ; 0xf07fd
- dbw BANK(Music_PostCredits), Music_PostCredits ; 0xcfd9e
- dbw BANK(Music_Clair), Music_Clair ; 0x1fa8d
- dbw BANK(Music_MobileAdapterMenu), Music_MobileAdapterMenu ; 0x17801f
- dbw BANK(Music_MobileAdapter), Music_MobileAdapter ; 0x1fc87
- dbw BANK(Music_BuenasPassword), Music_BuenasPassword ; 0x178153
- dbw BANK(Music_LookMysticalMan), Music_LookMysticalMan ; 0x17843b
- dbw BANK(Music_CrystalOpening), Music_CrystalOpening ; 0x1786e8
- dbw BANK(Music_BattleTowerTheme), Music_BattleTowerTheme ; 0x178889
- dbw BANK(Music_SuicuneBattle), Music_SuicuneBattle ; 0x178b81
- dbw BANK(Music_BattleTowerLobby), Music_BattleTowerLobby ; 0x17948b
- dbw BANK(Music_MobileCenter), Music_MobileCenter ; 0x17961d
-; e91a3
-
-Music_Nothing: ; 0xe91a3
-INCLUDE "music/nothing.asm"
-; 0xe91b0
-
-Cries: ; e91b0
-; 3-byte pointers
- dbw $3c, $747d
- dbw $3c, $7486
- dbw $3c, $748f
- dbw $3c, $7498
- dbw $3c, $74a1
- dbw $3c, $74aa
- dbw $3c, $74b3
- dbw $3c, $74bc
- dbw $3c, $74c5
- dbw $3c, $74ce
- dbw $3c, $74d7
- dbw $3c, $74e0
- dbw $3c, $74e9
- dbw $3c, $74f2
- dbw $3c, $74fb
- dbw $3c, $7504
- dbw $3c, $750d
- dbw $3c, $7516
- dbw $3c, $751f
- dbw $3c, $7528
- dbw $3c, $7531
- dbw $3c, $753a
- dbw $3c, $7543
- dbw $3c, $754c
- dbw $3c, $7555
- dbw $3c, $755e
- dbw $3c, $7567
- dbw $3c, $7570
- dbw $3c, $7579
- dbw $3c, $7582
- dbw $3c, $758b
- dbw $3c, $7594
- dbw $3c, $759d
- dbw $3c, $75a6
- dbw $3c, $75af
- dbw $3c, $75b8
- dbw $3c, $75c1
- dbw $3c, $75ca
- dbw $3c, $6d81
- dbw $3c, $6d96
- dbw $3c, $6d8a
- dbw $3c, $6dde
- dbw $3c, $6d9f
- dbw $3c, $6dc0
- dbw $3c, $6d90
- dbw $3c, $6da8
- dbw $3c, $6db1
- dbw $3c, $6db7
- dbw $3c, $6dc6
- dbw $3c, $6dcf
- dbw $3c, $6e35
- dbw $3c, $6dd8
- dbw $3c, $6e3e
- dbw $3c, $6de7
- dbw $3c, $6ded
- dbw $3c, $6e6b
- dbw $3c, $6df6
- dbw $3c, $6e74
- dbw $3c, $6e08
- dbw $3c, $6e11
- dbw $3c, $6e1a
- dbw $3c, $6e23
- dbw $3c, $6e2c
- dbw $3c, $6e62
- dbw $3c, $6e47
- dbw $3c, $6e50
- dbw $3c, $6e59
- dbw $3c, $6dff
-; e927c
-
-SFX: ; e927c
- dbw $3c, $4b3f ; dex fanfare 50-79
- dbw $3c, $4c2f ; item
- dbw $3c, $4c89 ; caught mon
- dbw $3c, $4941 ; pokeballs placed on table
- dbw $3c, $4947 ; potion
- dbw $3c, $494a ; full heal
- dbw $3c, $494d ; menu
- dbw $3c, $4950 ; read text
- dbw $3c, $4950 ; read text
- dbw $3c, $4bd5 ; dex fanfare 20-49
- dbw $3c, $4cea ; dex fanfare 80-109
- dbw $3c, $4953 ; poison
- dbw $3c, $4956 ; got safari balls
- dbw $3c, $4959 ; boot pc
- dbw $3c, $495c ; shut down pc
- dbw $3c, $495f ; choose pc option
- dbw $3c, $4962 ; bide / escape rope
- dbw $3c, $4965 ; push button
- dbw $3c, $4968 ; second part of itemfinder
- dbw $3c, $496b ; warp to
- dbw $3c, $496e ; warp from
- dbw $3c, $4971 ; change dex mode
- dbw $3c, $4974 ; jump over ledge
- dbw $3c, $4977 ; grass rustle
- dbw $3c, $497a ; fly
- dbw $3c, $497d ; wrong
- dbw $3c, $4983 ; squeak
- dbw $3c, $4986 ; strength
- dbw $3c, $4989 ; boat
- dbw $3c, $498f ; wall open
- dbw $3c, $4992 ; place puzzle piece down
- dbw $3c, $4995 ; enter door
- dbw $3c, $4998 ; switch pokemon
- dbw $3c, $499e ; score tally? ; sounds like something out of game corner
- dbw $3c, $49a4 ; buy/sell
- dbw $3c, $49ad ; exit building
- dbw $3c, $49aa ; bump
- dbw $3c, $49b0 ; save
- dbw $3c, $49f8 ; pokeflute
- dbw $3c, $49fb ; elevator end
- dbw $3c, $49fe ; throw ball
- dbw $3c, $4a04 ; smokescreen
- dbw $3c, $4a0a ; ; something skidding on water?
- dbw $3c, $4a10 ; run
- dbw $3c, $4a13 ; slot machine start
- dbw $3c, $4dbe ; fanfare
- dbw $3c, $4a3d ; peck
- dbw $3c, $4a40 ; kinesis
- dbw $3c, $4a43 ; lick
- dbw $3c, $4a46 ; pound
- dbw $3c, $4a49 ; move puzzle piece
- dbw $3c, $4a4c ; comet punch
- dbw $3c, $4a4f ; mega punch
- dbw $3c, $4a52 ; scratch
- dbw $3c, $4a55 ; vicegrip
- dbw $3c, $4a58 ; razor wind
- dbw $3c, $4a5b ; cut
- dbw $3c, $4a5e ; wing attack
- dbw $3c, $4a61 ; whirlwind
- dbw $3c, $4a64 ; bind
- dbw $3c, $4a67 ; vine whip
- dbw $3c, $4a6a ; double kick
- dbw $3c, $4a6d ; mega kick
- dbw $3c, $4a70 ; headbutt
- dbw $3c, $4a73 ; horn attack
- dbw $3c, $4a76 ; tackle
- dbw $3c, $4a79 ; poison sting
- dbw $3c, $4a7c ; poisonpowder
- dbw $3c, $4a7f ; doubleslap
- dbw $3c, $4a82 ; bite
- dbw $3c, $4a88 ; jump kick
- dbw $3c, $4a8b ; stomp
- dbw $3c, $4a8e ; tail whip
- dbw $3c, $4a91 ; karate chop
- dbw $3c, $4a94 ; submission
- dbw $3c, $4a97 ; water gun
- dbw $3c, $4a9d ; swords dance
- dbw $3c, $4aa0 ; thunder
- dbw $3c, $4aa3 ; supersonic
- dbw $3c, $4aac ; leer
- dbw $3c, $4ab5 ; ember
- dbw $3c, $4abb ; bubblebeam
- dbw $3c, $4ac4 ; hydro pump
- dbw $3c, $4aca ; surf
- dbw $3c, $4ad3 ; psybeam
- dbw $3c, $4adc ; leech seed
- dbw $3c, $4ae5 ; thundershock
- dbw $3c, $4aee ; psychic
- dbw $3c, $4af7 ; screech
- dbw $3c, $4afd ; bone club
- dbw $3c, $4b03 ; sharpen
- dbw $3c, $4b09 ; egg bomb
- dbw $3c, $4b12 ; sing
- dbw $3c, $4b18 ; sky attack
- dbw $3c, $4b21 ; hyper beam
- dbw $3c, $4b24 ; shine
- dbw $3c, $4a1c ;
- dbw $3c, $4a1f ; $60
- dbw $3c, $4a22 ; tap
- dbw $3c, $4a25 ; tap
- dbw $3c, $4a28 ; burn ; that is not a burn
- dbw $3c, $4a2b ; title screen sound
- dbw $3c, $4a2e ; similar to $60
- dbw $3c, $4a31 ; get coin from slots
- dbw $3c, $4a34 ; pay day
- dbw $3c, $4a3a ; metronome
- dbw $3c, $4a19 ; call
- dbw $3c, $4b2d ; hang up
- dbw $3c, $4b30 ; no signal
- dbw $3c, $4b2a ; sandstorm
- dbw $3c, $4b33 ; elevator
- dbw $3c, $52b4 ; protect
- dbw $3c, $52f6 ; sketch
- dbw $3c, $5314 ; rain dance
- dbw $3c, $5334 ; aeroblast
- dbw $3c, $5352 ; spark
- dbw $3c, $5360 ; curse
- dbw $3c, $537d ; rage
- dbw $3c, $539c ; thief
- dbw $3c, $53b0 ; thief
- dbw $3c, $53ca ; spider web
- dbw $3c, $53f7 ; mind reader
- dbw $3c, $541d ; nighmare
- dbw $3c, $5453 ; snore
- dbw $3c, $5469 ; sweet kiss
- dbw $3c, $547f ; sweet kiss
- dbw $3c, $54a5 ; belly drum
- dbw $3c, $54ba ;
- dbw $3c, $54d0 ; sludge bomb
- dbw $3c, $54f5 ; foresight
- dbw $3c, $5515 ; spite
- dbw $3c, $553a ; outrage
- dbw $3c, $554d ; perish song
- dbw $3c, $5570 ; giga drain
- dbw $3c, $55b4 ; attract
- dbw $3c, $55cc ; kinesis
- dbw $3c, $55de ; zap cannon
- dbw $3c, $55ef ; mean look
- dbw $3c, $5621 ; heal bell
- dbw $3c, $5637 ; return
- dbw $3c, $5653 ; exp bar
- dbw $3c, $567f ; milk drink
- dbw $3c, $569f ; present
- dbw $3c, $56b9 ; morning sun
- dbw $3c, $4b3f ; level up
- dbw $3c, $4b86 ; key item
- dbw $3c, $4d56 ; fanfare
- dbw $3c, $4dc7 ; register phone #
- dbw $3c, $4e26 ; 3rd place
- dbw $3c, $4e66 ; get egg from daycare man
- dbw $3c, $4e66 ; get egg from daycare lady
- dbw $3c, $4edc ; move deleted
- dbw $3c, $4f5e ; 2nd place
- dbw $3c, $4fe2 ; 1st place
- dbw $3c, $5069 ; choose a card
- dbw $3c, $5104 ; get tm
- dbw $3c, $517d ; get badge
- dbw $3c, $5236 ; quit slots
- dbw $3c, $5775 ; nothing
- dbw $3c, $5878 ; dex fanfare <20
- dbw $3c, $58d2 ; dex fanfare 140-169
- dbw $3c, $5951 ; dex fanfare 170-199
- dbw $3c, $59d6 ; dex fanfare 200-229
- dbw $3c, $5a66 ; dex fanfare >=230
- dbw $3c, $5784 ; evolved
- dbw $3c, $579b ; master ball
- dbw $3c, $57c0 ; egg crack
- dbw $3c, $57d9 ; charizard fireball (gs intro)
- dbw $3c, $57ff ; pokemon appears (gs intro)
- dbw $3c, $5818 ; flash
- dbw $3c, $5846 ; game freak logo
- dbw $3c, $5b33 ; not very effective
- dbw $3c, $5b40 ; damage
- dbw $3c, $5b50 ; super effective
- dbw $3c, $5b63 ; ball bounce
- dbw $3c, $56df ; moonlight
- dbw $3c, $56fd ; encore
- dbw $3c, $5721 ; beat up
- dbw $3c, $574c ; batom pass
- dbw $3c, $4944 ; ball wiggle
- dbw $3c, $5734 ; sweet scent
- dbw $3c, $5bb3 ; sweet scent
- dbw $3c, $5bec ; hit end of exp bar
- dbw $3c, $5c10 ; give trademon
- dbw $3c, $5c3e ; get trademon
- dbw $3c, $5c6c ; train arrived
- dbw $3c, $675b ; stop slot
- dbw $3c, $5cb4 ; 2 boops
- dbw $3c, $6769 ; glass ting
- dbw $3c, $6773 ; 2 glass ting
- dbw $5e, $582d ; intro unown 1
- dbw $5e, $583e ; intro unown 2
- dbw $5e, $584f ; intro unown 3
- dbw $5e, $586e ; boop
- dbw $5e, $5888 ; game freak ditto transform
- dbw $5e, $58a0 ; intro suicune 1
- dbw $5e, $58aa ; intro pichu
- dbw $5e, $58c0 ; intro suicune 2
- dbw $5e, $58f4 ; intro suicune 3
- dbw $5e, $5907 ; game freak ditto bounce
- dbw $5e, $591d ; intro suicune 4
- dbw $5e, $5942 ; game freak presents
- dbw $5e, $5961 ; tingle
- dbw $3c, $5cd0 ; sand?
- dbw $5e, $597c ; two pc beeps
- dbw $5e, $5992 ; 4 note ditty
- dbw $5e, $59cb ; twinkle
-; e94e9
-
-Music_Route36: ; 0xe94e9
-INCLUDE "music/route36.asm"
-; 0xe974f
-
-Music_RivalBattle: ; 0xe974f
-INCLUDE "music/rivalbattle.asm"
-; 0xe9b6f
-
-Music_RocketBattle: ; 0xe9b6f
-INCLUDE "music/rocketbattle.asm"
-; 0xea040
-
-Music_ElmsLab: ; 0xea040
-INCLUDE "music/elmslab.asm"
-; 0xea2be
-
-Music_DarkCave: ; 0xea2be
-INCLUDE "music/darkcave.asm"
-; 0xea50d
-
-Music_JohtoGymLeaderBattle: ; 0xea50d
-INCLUDE "music/johtogymleaderbattle.asm"
-; 0xea9c1
-
-Music_ChampionBattle: ; 0xea9c1
-INCLUDE "music/championbattle.asm"
-; 0xead99
-
-Music_SSAqua: ; 0xead99
-INCLUDE "music/ssaqua.asm"
-; 0xeb2d3
-
-Music_NewBarkTown: ; 0xeb2d3
-INCLUDE "music/newbarktown.asm"
-; 0xeb453
-
-Music_GoldenrodCity: ; 0xeb453
-INCLUDE "music/goldenrodcity.asm"
-; 0xeb676
-
-Music_VermilionCity: ; 0xeb676
-INCLUDE "music/vermilioncity.asm"
-; 0xeb808
-
-Music_TitleScreen: ; 0xeb808
-INCLUDE "music/titlescreen.asm"
-; 0xebd9e
-
-Music_RuinsOfAlphInterior: ; 0xebd9e
-INCLUDE "music/ruinsofalphinterior.asm"
-; 0xebde1
-
-Music_LookPokemaniac: ; 0xebde1
-INCLUDE "music/lookpokemaniac.asm"
-
-Music_TrainerVictory: ; 0xebeab
-INCLUDE "music/trainervictory.asm"
-; 0xebfc3
+Music_Route36: INCLUDE "music/route36.asm"
+Music_RivalBattle: INCLUDE "music/rivalbattle.asm"
+Music_RocketBattle: INCLUDE "music/rocketbattle.asm"
+Music_ElmsLab: INCLUDE "music/elmslab.asm"
+Music_DarkCave: INCLUDE "music/darkcave.asm"
+Music_JohtoGymLeaderBattle: INCLUDE "music/johtogymleaderbattle.asm"
+Music_ChampionBattle: INCLUDE "music/championbattle.asm"
+Music_SSAqua: INCLUDE "music/ssaqua.asm"
+Music_NewBarkTown: INCLUDE "music/newbarktown.asm"
+Music_GoldenrodCity: INCLUDE "music/goldenrodcity.asm"
+Music_VermilionCity: INCLUDE "music/vermilioncity.asm"
+Music_TitleScreen: INCLUDE "music/titlescreen.asm"
+Music_RuinsOfAlphInterior: INCLUDE "music/ruinsofalphinterior.asm"
+Music_LookPokemaniac: INCLUDE "music/lookpokemaniac.asm"
+Music_TrainerVictory: INCLUDE "music/trainervictory.asm"
SECTION "bank3B",DATA,BANK[$3B]