diff options
Diffstat (limited to 'main.asm')
-rw-r--r-- | main.asm | 3717 |
1 files changed, 30 insertions, 3687 deletions
@@ -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] |