summaryrefslogtreecommitdiff
path: root/main.asm
diff options
context:
space:
mode:
Diffstat (limited to 'main.asm')
-rwxr-xr-x[-rw-r--r--]main.asm5049
1 files changed, 3727 insertions, 1322 deletions
diff --git a/main.asm b/main.asm
index 4ae06fec..f93dc860 100644..100755
--- a/main.asm
+++ b/main.asm
@@ -928,7 +928,7 @@ WarpFound2: ; 073c (0:073c)
ld [$d73b],a ; save ID of used warp
ld a,[W_CURMAP]
ld [$d73c],a
- call CheckIfInOutsideMap ; check if the tileset number is 0 or the map is Route 12
+ call CheckIfInOutsideMap
jr nz,.indoorMaps
; this is for handling "outside" maps that can't have the 0xFF destination map
ld a,[W_CURMAP]
@@ -1144,13 +1144,12 @@ PlayMapChangeSound: ; 08c9 (0:08c9)
ret nz
jp GBFadeIn1
-; function to set the Z flag if the tileset number is 0 or the map is Route 12
-; strangely, Route 12 has tileset 0, so the check is redundant
CheckIfInOutsideMap: ; 08e1 (0:08e1)
+; If the player is in an outside map (a town or route), set the z flag
ld a,[W_CURMAPTILESET]
- and a
+ and a ; most towns/routes have tileset 0
ret z
- cp a,ROUTE_12
+ cp a,$17 ; Route 23 / Indigo Plateau
ret
; this function is an extra check that sometimes has to pass in order to warp, beyond just standing on a warp
@@ -1215,12 +1214,12 @@ HandleBlackOut: ; 0931 (0:0931)
jp Func_5d5f
StopMusic: ; 0951 (0:0951)
- ld [$cfc7],a
+ ld [W_CURCHANNELPOINTER],a
ld a,$ff
ld [$c0ee],a
call PlaySound
.waitLoop
- ld a,[$cfc7]
+ ld a,[W_CURCHANNELPOINTER]
and a
jr nz,.waitLoop
jp StopAllSounds
@@ -2744,10 +2743,10 @@ LoadMapHeader: ; 107c (0:107c)
ld b,$00
ld a,[H_LOADEDROMBANK]
push af
- ld a,$03
+ ld a, BANK(MapSongBanks)
ld [H_LOADEDROMBANK],a
ld [$2000],a
- ld hl,$404d
+ ld hl, MapSongBanks
add hl,bc
add hl,bc
ld a,[hli]
@@ -5275,7 +5274,7 @@ StopAllSounds: ; 200e (0:200e)
ld [$c0ef], a
ld [$c0f0], a
xor a
- ld [$cfc7], a
+ ld [W_CURCHANNELPOINTER], a
ld [$c0ee], a
ld [$cfca], a
dec a
@@ -5805,10 +5804,10 @@ asm_2324: ; 2324 (0:2324)
jr z, .asm_2343
cp $2
jr z, .asm_2332
- ld a, $d2
+ ld a, (Music_BikeRiding - $4000) / 3
jr .asm_2334
.asm_2332
- ld a, $d6
+ ld a, (Music_Surfing - $4000) / 3
.asm_2334
ld b, a
ld a, d
@@ -5830,7 +5829,7 @@ asm_2324: ; 2324 (0:2324)
ret z
.asm_2351
ld a, c
- ld [$cfc7], a
+ ld [W_CURCHANNELPOINTER], a
ld a, b
ld [$cfca], a
ld [$c0ee], a
@@ -5888,7 +5887,7 @@ PlayMusic: ; 23a1 (0:23a1)
ld b, a
ld [$c0ee], a
xor a
- ld [$cfc7], a
+ ld [W_CURCHANNELPOINTER], a
ld a, c
ld [$c0ef], a
ld [$c0f0], a
@@ -5909,7 +5908,7 @@ PlaySound: ; 23b1 (0:23b1)
ld [$c02c], a
ld [$c02d], a
.asm_23c8
- ld a, [$cfc7]
+ ld a, [W_CURCHANNELPOINTER]
and a
jr z, .asm_23e3
ld a, [$c0ee]
@@ -5921,7 +5920,7 @@ PlaySound: ; 23b1 (0:23b1)
cp $ff
jr nz, .asm_2414
xor a
- ld [$cfc7], a
+ ld [W_CURCHANNELPOINTER], a
.asm_23e3
xor a
ld [$c0ee], a
@@ -5954,11 +5953,11 @@ PlaySound: ; 23b1 (0:23b1)
.asm_2414
ld a, b
ld [$cfca], a
- ld a, [$cfc7]
+ ld a, [W_CURCHANNELPOINTER]
ld [$cfc8], a
ld [$cfc9], a
ld a, b
- ld [$cfc7], a
+ ld [W_CURCHANNELPOINTER], a
.asm_2425
pop bc
pop de
@@ -6704,7 +6703,7 @@ ResetPlayerSpriteData_ClearSpriteData: ; 28c4 (0:28c4)
jp FillMemory
Func_28cb: ; 28cb (0:28cb)
- ld a, [$cfc7]
+ ld a, [W_CURCHANNELPOINTER]
and a
jr nz, .asm_28dc
ld a, [$d72c]
@@ -6739,10 +6738,10 @@ Func_28cb: ; 28cb (0:28cb)
ld [$FF00+$24], a
ret
.asm_2903
- ld a, [$cfc7]
+ ld a, [W_CURCHANNELPOINTER]
ld b, a
xor a
- ld [$cfc7], a
+ ld [W_CURCHANNELPOINTER], a
ld a, $ff
ld [$c0ee], a
call PlaySound
@@ -7005,7 +7004,7 @@ DisplayStartMenu: ; 2acd (0:2acd)
ld [$2000],a ; ROM bank 4
ld a,[$d700] ; walking/biking/surfing
ld [$d11a],a
- ld a,$8f ; Start menu sound
+ ld a, (SFX_02_3f - $4000) / 3 ; Start menu sound
call PlaySound
RedisplayStartMenu: ; 2adf (0:2adf)
@@ -7134,7 +7133,7 @@ AddAmountSoldToMoney: ; 2b9e (0:2b9e)
ld a,$13
ld [$d125],a
call DisplayTextBoxID ; redraw money text box
- ld a,$b2
+ ld a, (SFX_02_5a - $4000) / 3
call PlaySoundWaitForCurrent ; play sound
jp WaitForSoundToFinish ; wait until sound is done playing
@@ -8431,14 +8430,14 @@ PlayTrainerMusic: ; 33e8 (0:33e8)
ret z
cp $c8 + SONY3
ret z
- ld a, [W_LONEATTACKNO] ; $d05c
+ ld a, [W_GYMLEADERNO] ; $d05c
and a
ret nz
xor a
- ld [$cfc7], a
+ ld [W_CURCHANNELPOINTER], a
ld a, $ff
call PlaySound ; stop music
- ld a, $1f
+ ld a, BANK(Music_MeetEvilTrainer)
ld [$c0ef], a
ld [$c0f0], a
ld a, [W_ENGAGEDTRAINERCLASS]
@@ -8450,7 +8449,7 @@ PlayTrainerMusic: ; 33e8 (0:33e8)
jr z, .noEvilTrainer
cp b
jr nz, .evilTrainerListLoop
- ld a, $f6
+ ld a, (Music_MeetEvilTrainer - $4000) / 3
jr .PlaySound
.noEvilTrainer
ld hl, FemaleTrainerList
@@ -8460,10 +8459,10 @@ PlayTrainerMusic: ; 33e8 (0:33e8)
jr z, .maleTrainer
cp b
jr nz, .femaleTrainerListLoop
- ld a, $f9
+ ld a, (Music_MeetFemaleTrainer - $4000) / 3
jr .PlaySound
.maleTrainer
- ld a, $fc
+ ld a, (Music_MeetMaleTrainer - $4000) / 3
.PlaySound
ld [$c0ee], a
jp PlaySound
@@ -11019,7 +11018,7 @@ INCBIN "baserom.gbc",$43db,$43ea - $43db
call PrintGameVersionOnTitleScreen
call Delay3
call WaitForSoundToFinish
- ld a, $c3
+ ld a, (Music_TitleScreen - $4000) / 3
ld [$c0ee], a
call PlaySound
xor a
@@ -13170,8 +13169,8 @@ Func_5317: ; 5317 (1:5317)
call Predef ; indirect jump to HealParty (f6a5 (3:76a5))
jp Func_577d
.asm_5506
- ld c, $1f
- ld a, $d9
+ ld c, BANK(Music_GameCorner)
+ ld a, (Music_GameCorner - $4000) / 3
call PlayMusic
jr Func_551c
@@ -13709,7 +13708,7 @@ Func_5849:
ld a, [hl]
ld [$cd3e], a
ld a, $a
- ld [$cfc7], a
+ ld [W_CURCHANNELPOINTER], a
ld a, $2
ld [$c0f0], a
ld a, $e5
@@ -13806,10 +13805,10 @@ Func_5a5f: ; 5a5f (1:5a5f)
ld [W_ISLINKBATTLE], a ; $d12b
ld [$FF00+$b5], a
ld a, $a
- ld [$cfc7], a
- ld a, $2
+ ld [W_CURCHANNELPOINTER], a
+ ld a, BANK(Music_Celadon)
ld [$c0f0], a
- ld a, $ca
+ ld a, (Music_Celadon - $4000) / 3
ld [$c0ee], a
jp PlaySound
@@ -14600,9 +14599,9 @@ Func_60ca: ; 60ca (1:60ca)
OakSpeech: ; 6115 (1:6115)
ld a,$FF
call PlaySound ; stop music
- ld a,2 ; bank of song
+ ld a, BANK(Music_Routes2) ; bank of song
ld c,a
- ld a,$EF ; song #
+ ld a, (Music_Routes2 - $4000) / 3 ; song #
call PlayMusic ; plays music
call ClearScreen
call LoadTextBoxTilePatterns
@@ -14699,7 +14698,7 @@ Function61BC: ; 61bc (1:61bc)
ld [$C0EF],a
ld [$C0F0],a
ld a,$A
- ld [$CFC7],a
+ ld [W_CURCHANNELPOINTER],a
ld a,$FF
ld [$C0EE],a
call PlaySound ; stop music
@@ -16452,7 +16451,7 @@ DisplayPokemonCenterDialogue_: ; 6fe6 (1:6fe6)
ld hl, Func_70433
call Bankswitch ; do the healing machine animation
xor a
- ld [$cfc7], a
+ ld [W_CURCHANNELPOINTER], a
ld a, [$c0f0]
ld [$c0ef], a
ld a, [$d35b]
@@ -18114,209 +18113,1920 @@ Func_7c18: ; 7c18 (1:7c18)
SECTION "bank2",ROMX,BANK[$2]
-INCBIN "baserom.gbc",$8000,$822e - $8000
+INCLUDE "music/headers/sfxheaders02.tx"
+INCLUDE "music/headers/musicheaders02.tx"
+
+INCLUDE "music/sfx/sfx_02_01.tx"
+INCLUDE "music/sfx/sfx_02_02.tx"
+INCLUDE "music/sfx/sfx_02_03.tx"
+INCLUDE "music/sfx/sfx_02_04.tx"
+INCLUDE "music/sfx/sfx_02_05.tx"
+INCLUDE "music/sfx/sfx_02_06.tx"
+INCLUDE "music/sfx/sfx_02_07.tx"
+INCLUDE "music/sfx/sfx_02_08.tx"
+INCLUDE "music/sfx/sfx_02_09.tx"
+INCLUDE "music/sfx/sfx_02_0a.tx"
+INCLUDE "music/sfx/sfx_02_0b.tx"
+INCLUDE "music/sfx/sfx_02_0c.tx"
+INCLUDE "music/sfx/sfx_02_0d.tx"
+INCLUDE "music/sfx/sfx_02_0e.tx"
+INCLUDE "music/sfx/sfx_02_0f.tx"
+INCLUDE "music/sfx/sfx_02_10.tx"
+INCLUDE "music/sfx/sfx_02_11.tx"
+INCLUDE "music/sfx/sfx_02_12.tx"
+INCLUDE "music/sfx/sfx_02_13.tx"
+
+Music2_Channel3DutyPointers: ; 0x8361
+ dw Music2_Channel3Duty1
+ dw Music2_Channel3Duty2
+ dw Music2_Channel3Duty3
+ dw Music2_Channel3Duty4
+ dw Music2_Channel3Duty5
+ dw SFX_02_3f_Ch1 ; unused
+ dw SFX_02_3f_Ch1 ; unused
+ dw SFX_02_3f_Ch1 ; unused
+ dw SFX_02_3f_Ch1 ; unused
+
+Music2_Channel3Duty1: ; 0x8373
+ db $02,$46,$8A,$CE,$FF,$FE,$ED,$DC,$CB,$A9,$87,$65,$44,$33,$22,$11
+
+Music2_Channel3Duty2: ; 0x8383
+ db $02,$46,$8A,$CE,$EF,$FF,$FE,$EE,$DD,$CB,$A9,$87,$65,$43,$22,$11
+
+Music2_Channel3Duty3: ; 0x8393
+ db $13,$69,$BD,$EE,$EE,$FF,$FF,$ED,$DE,$FF,$FF,$EE,$EE,$DB,$96,$31
+
+Music2_Channel3Duty4: ; 0x83a3
+ db $02,$46,$8A,$CD,$EF,$FE,$DE,$FF,$EE,$DC,$BA,$98,$76,$54,$32,$10
+
+Music2_Channel3Duty5: ; 0x83b3
+ db $01,$23,$45,$67,$8A,$CD,$EE,$F7,$7F,$EE,$DC,$A8,$76,$54,$32,$10
+
+INCLUDE "music/sfx/sfx_02_3f.tx"
+INCLUDE "music/sfx/sfx_02_5e.tx"
+INCLUDE "music/sfx/sfx_02_56.tx"
+INCLUDE "music/sfx/sfx_02_57.tx"
+INCLUDE "music/sfx/sfx_02_58.tx"
+INCLUDE "music/sfx/sfx_02_3c.tx"
+INCLUDE "music/sfx/sfx_02_59.tx"
+INCLUDE "music/sfx/sfx_02_5a.tx"
+INCLUDE "music/sfx/sfx_02_5b.tx"
+INCLUDE "music/sfx/sfx_02_5c.tx"
+INCLUDE "music/sfx/sfx_02_40.tx"
+INCLUDE "music/sfx/sfx_02_5d.tx"
+INCLUDE "music/sfx/sfx_02_3d.tx"
+INCLUDE "music/sfx/sfx_02_43.tx"
+INCLUDE "music/sfx/sfx_02_3e.tx"
+INCLUDE "music/sfx/sfx_02_44.tx"
+INCLUDE "music/sfx/sfx_02_45.tx"
+INCLUDE "music/sfx/sfx_02_46.tx"
+INCLUDE "music/sfx/sfx_02_47.tx"
+INCLUDE "music/sfx/sfx_02_48.tx"
+INCLUDE "music/sfx/sfx_02_49.tx"
+INCLUDE "music/sfx/sfx_02_4a.tx"
+INCLUDE "music/sfx/sfx_02_4b.tx"
+INCLUDE "music/sfx/sfx_02_4c.tx"
+INCLUDE "music/sfx/sfx_02_4d.tx"
+INCLUDE "music/sfx/sfx_02_4e.tx"
+INCLUDE "music/sfx/sfx_02_4f.tx"
+INCLUDE "music/sfx/sfx_02_50.tx"
+INCLUDE "music/sfx/sfx_02_51.tx"
+INCLUDE "music/sfx/sfx_02_52.tx"
+INCLUDE "music/sfx/sfx_02_53.tx"
+INCLUDE "music/sfx/sfx_02_54.tx"
+INCLUDE "music/sfx/sfx_02_55.tx"
+INCLUDE "music/sfx/sfx_02_5f.tx"
+INCLUDE "music/sfx/sfx_02_unused.tx"
+INCLUDE "music/sfx/sfx_02_1d.tx"
+INCLUDE "music/sfx/sfx_02_37.tx"
+INCLUDE "music/sfx/sfx_02_38.tx"
+INCLUDE "music/sfx/sfx_02_25.tx"
+INCLUDE "music/sfx/sfx_02_39.tx"
+INCLUDE "music/sfx/sfx_02_17.tx"
+INCLUDE "music/sfx/sfx_02_23.tx"
+INCLUDE "music/sfx/sfx_02_24.tx"
+INCLUDE "music/sfx/sfx_02_14.tx"
+INCLUDE "music/sfx/sfx_02_22.tx"
+INCLUDE "music/sfx/sfx_02_1a.tx"
+INCLUDE "music/sfx/sfx_02_1b.tx"
+INCLUDE "music/sfx/sfx_02_19.tx"
+INCLUDE "music/sfx/sfx_02_1f.tx"
+INCLUDE "music/sfx/sfx_02_20.tx"
+INCLUDE "music/sfx/sfx_02_16.tx"
+INCLUDE "music/sfx/sfx_02_21.tx"
+INCLUDE "music/sfx/sfx_02_15.tx"
+INCLUDE "music/sfx/sfx_02_1e.tx"
+INCLUDE "music/sfx/sfx_02_1c.tx"
+INCLUDE "music/sfx/sfx_02_18.tx"
+INCLUDE "music/sfx/sfx_02_2d.tx"
+INCLUDE "music/sfx/sfx_02_2a.tx"
+INCLUDE "music/sfx/sfx_02_2f.tx"
+INCLUDE "music/sfx/sfx_02_26.tx"
+INCLUDE "music/sfx/sfx_02_27.tx"
+INCLUDE "music/sfx/sfx_02_28.tx"
+INCLUDE "music/sfx/sfx_02_32.tx"
+INCLUDE "music/sfx/sfx_02_29.tx"
+INCLUDE "music/sfx/sfx_02_2b.tx"
+INCLUDE "music/sfx/sfx_02_30.tx"
+INCLUDE "music/sfx/sfx_02_2e.tx"
+INCLUDE "music/sfx/sfx_02_31.tx"
+INCLUDE "music/sfx/sfx_02_2c.tx"
+INCLUDE "music/sfx/sfx_02_33.tx"
+INCLUDE "music/sfx/sfx_02_34.tx"
+INCLUDE "music/sfx/sfx_02_35.tx"
+INCLUDE "music/sfx/sfx_02_36.tx"
+
+PlayBattleMusic: ; 0x90c6
+ xor a
+ ld [W_CURCHANNELPOINTER], a
+ ld [$d083], a
+ dec a
+ ld [$c0ee], a
+ call PlaySound ; stop music
+ call DelayFrame
+ ld c, BANK(Music_GymLeaderBattle)
+ ld a, [W_GYMLEADERNO]
+ and a
+ jr z, .notGymLeaderBattle
+ ld a, (Music_GymLeaderBattle - $4000) / 3
+ jr .playSong
+.notGymLeaderBattle
+ ld a, [W_CUROPPONENT]
+ cp $c8
+ jr c, .wildBattle
+ cp SONY3 + $c8
+ jr z, .finalBattle
+ cp LANCE + $c8
+ jr nz, .normalTrainerBattle
+ ld a, (Music_GymLeaderBattle - $4000) / 3 ; lance also plays gym leader theme
+ jr .playSong
+.normalTrainerBattle
+ ld a, (Music_TrainerBattle - $4000) / 3
+ jr .playSong
+.finalBattle
+ ld a, (Music_FinalBattle - $4000) / 3
+ jr .playSong
+.wildBattle
+ ld a, (Music_WildBattle - $4000) / 3
+.playSong
+ jp PlayMusic
+
+Func_9103: ; 0x9103
+ ld c, CH0
+.loop
+ ld b, $0
+ ld hl, $c026
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .nextChannel
+ ld a, c
+ cp CH4
+ jr nc, .asm_912e ; if sfx channel
+ ld a, [$c002]
+ and a
+ jr z, .asm_912e
+ bit 7, a
+ jr nz, .nextChannel
+ set 7, a
+ ld [$c002], a
+ xor a
+ ld [$ff00+$25], a
+ ld [$ff00+$1a], a
+ ld a, $80
+ ld [$ff00+$1a], a
+ jr .nextChannel
+.asm_912e
+ call Music2_ApplyMusicAffects
+.nextChannel
+ ld a, c
+ inc c ; inc channel number
+ cp CH7
+ jr nz, .loop
+ ret
-;Music Headers
-;Pallet Town
-PalletTown_mh: ; 0x822E - 0x8236
- db $80
- dw PalletTown_md_1 ;Channel 1 ($A7C5 - $A85E)
- db $01
- dw PalletTown_md_2 ;Channel 2 ($A85f - $A8DD)
- db $02
- dw PalletTown_md_3 ;Channel 3 ($A8DE - $AA75)
-
-;Pokemon Center
-Pokecenter_mh: ; 0x8237 - 0x823F
- db $80
- dw Pokecenter_md_1 ;Channel 1 ($BE56 - $BEF8)
- db $01
- dw Pokecenter_md_2 ;Channel 2 ($BEF9 - $BF6F)
- db $02
- dw Pokecenter_md_3 ;Channel 3 ($BF70 - $BFFF)
-
-;Gyms
-Gym_mh: ; 0x8240 - 0x8248
- db $80
- dw Gym_md_1 ;Channel 1 ($BCBB - $BD6A)
- db $01
- dw Gym_md_2 ;Channel 2 ($BD6B - $BDF9)
- db $02
- dw Gym_md_3 ;Channel 3 ($BDFA - $BE55)
-
-;Viridian City, Pewter City, Saffron City
-Cities1_mh: ; 0x8249 - 0x8254
- db $C0
- dw Cities1_md_1 ;Channel 1
- db $01
- dw Cities1_md_2 ;Channel 2
- db $02
- dw Cities1_md_3 ;Channel 3
- db $03
- dw Cities1_md_4 ;Channel 4
+; this routine checks flags for music effects currently applied
+; to the channel and calls certain functions based on flags.
+; known flags for $c02e:
+; 1: call has been used
+; 3: a toggle used only by this routine for vibrato
+; 4: pitchbend flag
+; 6: dutycycle flag
+Music2_ApplyMusicAffects: ; 0x9138
+ ld b, $0
+ ld hl, $c0b6 ; delay unitl next note
+ add hl, bc
+ ld a, [hl]
+ cp $1 ; if the delay is 1, play next note
+ jp z, Music2_PlayNextNote
+ dec a ; otherwise, decrease the delay timer
+ ld [hl], a
+ ld a, c
+ cp CH4
+ jr nc, .startChecks ; if a sfx channel
+ ld hl, $c02a
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .startChecks
+ ret
+.startChecks
+ ld hl, $c02e
+ add hl, bc
+ bit 6, [hl] ; dutycycle
+ jr z, .checkForExecuteMusic
+ call Music2_ApplyDutyCycle
+.checkForExecuteMusic
+ ld b, $0
+ ld hl, $c036
+ add hl, bc
+ bit 0, [hl]
+ jr nz, .checkForPitchBend
+ ld hl, $c02e
+ add hl, bc
+ bit 2, [hl]
+ jr nz, .disablePitchBendVibrato
+.checkForPitchBend
+ ld hl, $c02e
+ add hl, bc
+ bit 4, [hl] ; pitchbend
+ jr z, .checkVibratoDelay
+ jp Music2_ApplyPitchBend
+.checkVibratoDelay
+ ld hl, $c04e ; vibrato delay
+ add hl, bc
+ ld a, [hl]
+ and a ; check if delay is over
+ jr z, .checkForVibrato
+ dec [hl] ; otherwise, dec delay
+.disablePitchBendVibrato
+ ret
+.checkForVibrato
+ ld hl, $c056 ; vibrato rate
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr nz, .vibrato
+ ret ; no vibrato
+.vibrato
+ ld d, a
+ ld hl, $c05e
+ add hl, bc
+ ld a, [hl]
+ and $f
+ and a
+ jr z, .vibratoAlreadyDone
+ dec [hl] ; apply vibrato pitch change
+ ret
+.vibratoAlreadyDone
+ ld a, [hl]
+ swap [hl]
+ or [hl]
+ ld [hl], a ; reset the vibrato value and start again
+ ld hl, $c066
+ add hl, bc
+ ld e, [hl] ; get note pitch
+ ld hl, $c02e
+ add hl, bc
+ bit 3, [hl] ; this is the only code that sets/resets bit three so
+ jr z, .unset ; it continuously alternates which path it takes
+ res 3, [hl]
+ ld a, d
+ and $f
+ ld d, a
+ ld a, e
+ sub d
+ jr nc, .noCarry
+ ld a, $0
+.noCarry
+ jr .done
+.unset
+ set 3, [hl]
+ ld a, d
+ and $f0
+ swap a
+ add e
+ jr nc, .done
+ ld a, $ff
+.done
+ ld d, a
+ ld b, $3
+ call Func_9838
+ ld [hl], d
+ ret
-;Cerulean City, Fuchsia City
-Cities2_mh: ; 0x8255 - 0x825D
- db $80
- dw Cities2_md_1 ;Channel 1
- db $01
- dw Cities2_md_2 ;Channel 2
- db $02
- dw Cities2_md_3 ;Channel 3
-
-;Celadon City
-Celadon_mh: ; 0x825E - 0x8266
- db $80
- dw Celadon_md_1 ;Channel 1
- db $01
- dw Celadon_md_2 ;Channel 2
- db $02
- dw Celadon_md_3 ;Channel 3
-
-;Cinnabar Island
-Cinnabar_mh: ; 0x8267 - 0x826F
- db $80
- dw Cinnabar_md_1 ;Channel 1
- db $01
- dw Cinnabar_md_2 ;Channel 2
- db $02
- dw Cinnabar_md_3 ;Channel 3
-
-;Vermilion City
-Vermilion_mh: ; 0x8270 - 0x827B
- db $C0
- dw Vermilion_md_1 ;Channel 1
- db $01
- dw Vermilion_md_2 ;Channel 2
- db $02
- dw Vermilion_md_3 ;Channel 3
- db $03
- dw Vermilion_md_4 ;Channel 4
+; this routine executes all music commands that take up no time,
+; like tempo changes, duty changes etc. and doesn't return
+; until the first note is reached
+Music2_PlayNextNote ; 0x91d0
+ ld hl, $c06e
+ add hl, bc
+ ld a, [hl]
+ ld hl, $c04e
+ add hl, bc
+ ld [hl], a
+ ld hl, $c02e
+ add hl, bc
+ res 4, [hl]
+ res 5, [hl]
+ call Music2_endchannel
+ ret
-;Lavender Town
-Lavender_mh: ; 0x827C - 0x8287
- db $C0
- dw Lavender_md_1 ;Channel 1
- db $01
- dw Lavender_md_2 ;Channel 2
- db $02
- dw Lavender_md_3 ;Channel 3
- db $03
- dw Lavender_md_4 ;Channel 4
+Music2_endchannel: ; 0x91e6
+ call Music2_GetNextMusicByte
+ ld d, a
+ cp $ff ; is this command an endchannel?
+ jp nz, Music2_callchannel ; no
+ ld b, $0 ; yes
+ ld hl, $c02e
+ add hl, bc
+ bit 1, [hl]
+ jr nz, .returnFromCall
+ ld a, c
+ cp CH3
+ jr nc, .noiseOrSfxChannel
+ jr .asm_923f
+.noiseOrSfxChannel
+ res 2, [hl]
+ ld hl, $c036
+ add hl, bc
+ res 0, [hl]
+ cp CH6
+ jr nz, .notSfxChannel3
+ ld a, $0
+ ld [$ff00+$1a], a
+ ld a, $80
+ ld [$ff00+$1a], a
+.notSfxChannel3
+ jr nz, .asm_9222
+ ld a, [$c003]
+ and a
+ jr z, .asm_9222
+ xor a
+ ld [$c003], a
+ jr .asm_923f
+.asm_9222
+ jr .asm_9248
+.returnFromCall
+ res 1, [hl]
+ ld d, $0
+ ld a, c
+ add a
+ ld e, a
+ ld hl, $c006
+ add hl, de
+ push hl ; store current channel address
+ ld hl, $c016
+ add hl, de
+ ld e, l
+ ld d, h
+ pop hl
+ ld a, [de]
+ ld [hli], a
+ inc de
+ ld a, [de]
+ ld [hl], a ; loads channel address to return to
+ jp Music2_endchannel
+.asm_923f
+ ld hl, Unknown_9b1f
+ add hl, bc
+ ld a, [$ff00+$25]
+ and [hl]
+ ld [$ff00+$25], a
+.asm_9248
+ ld a, [$c02a]
+ cp $14
+ jr nc, .asm_9251
+ jr .asm_926e
+.asm_9251
+ ld a, [$c02a]
+ cp $86
+ jr z, .asm_926e
+ jr c, .asm_925c
+ jr .asm_926e
+.asm_925c
+ ld a, c
+ cp CH4
+ jr z, .asm_9265
+ call Func_96c7
+ ret c
+.asm_9265
+ ld a, [$c005]
+ ld [$ff00+$24], a
+ xor a
+ ld [$c005], a
+.asm_926e
+ ld hl, $c026
+ add hl, bc
+ ld [hl], b
+ ret
-;SS Anne
-SSAnne_mh: ; 0x8288 - 0x8290
- db $80
- dw SSAnne_md_1 ;Channel 1
- db $01
- dw SSAnne_md_2 ;Channel 2
- db $02
- dw SSAnne_md_3 ;Channel 3
-
-;Meet Prof. Oak
-MeetProfOak_mh: ; 0x8291 - 0x8299
- db $80
- dw MeetProfOak_md_1 ;Channel 1
- db $01
- dw MeetProfOak_md_2 ;Channel 2
- db $02
- dw MeetProfOak_md_3 ;Channel 3
-
-;Meet Rival
-MeetRival_mh: ; 0x829A - 0x82A2
- db $80
- dw MeetRival_md_1 ;Channel 1
- db $01
- dw MeetRival_md_2 ;Channel 2
- db $02
- dw MeetRival_md_3 ;Channel 3
-
-;Guy walks you to museum
-MuseumGuy_mh: ; 0x82A3 - 0x82AE
- db $C0
- dw MuseumGuy_md_1 ;Channel 1
- db $01
- dw MuseumGuy_md_2 ;Channel 2
- db $02
- dw MuseumGuy_md_3 ;Channel 3
- db $03
- dw MuseumGuy_md_4 ;Channel 4
+Music2_callchannel: ; 0x9274
+ cp $fd ; is this command a callchannel?
+ jp nz, Music2_loopchannel ; no
+ call Music2_GetNextMusicByte ; yes
+ push af
+ call Music2_GetNextMusicByte
+ ld d, a
+ pop af
+ ld e, a
+ push de ; store pointer
+ ld d, $0
+ ld a, c
+ add a
+ ld e, a
+ ld hl, $c006
+ add hl, de
+ push hl
+ ld hl, $c016
+ add hl, de
+ ld e, l
+ ld d, h
+ pop hl
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hld]
+ ld [de], a ; copy current channel address
+ pop de
+ ld [hl], e
+ inc hl
+ ld [hl], d ; overwrite current address with pointer
+ ld b, $0
+ ld hl, $c02e
+ add hl, bc
+ set 1, [hl] ; set the call flag
+ jp Music2_endchannel
-;Safari Zone
-SafariZone_mh: ; 0x82AF - 0x82B7
- db $80
- dw SafariZone_md_1 ;Channel 1
- db $01
- dw SafariZone_md_2 ;Channel 2
- db $02
- dw SafariZone_md_3 ;Channel 3
-
-;Pokemon Get Healed
-PkmnHealed_mh: ; 0x82B8 - 0x82C0
- db $80
- dw PkmnHealed_md_1 ;Channel 1
- db $01
- dw PkmnHealed_md_2 ;Channel 2
- db $02
- dw PkmnHealed_md_3 ;Channel 3
-
-;Routes 1 and 2
-Routes1_mh: ; 0x82C1 - 0x82CC
- db $C0
- dw Routes1_md_1 ;Channel 1
- db $01
- dw Routes1_md_2 ;Channel 2
- db $02
- dw Routes1_md_3 ;Channel 3
- db $03
- dw Routes1_md_4 ;Channel 4
+Music2_loopchannel: ; 0x92a9
+ cp $fe ; is this command a loopchannel?
+ jp nz, Music2_notetype ; no
+ call Music2_GetNextMusicByte ; yes
+ ld e, a
+ and a
+ jr z, .infiniteLoop
+ ld b, $0
+ ld hl, $c0be
+ add hl, bc
+ ld a, [hl]
+ cp e
+ jr nz, .loopAgain
+ ld a, $1 ; if no more loops to make,
+ ld [hl], a
+ call Music2_GetNextMusicByte ; skip pointer
+ call Music2_GetNextMusicByte
+ jp Music2_endchannel
+.loopAgain ; inc loop count
+ inc a
+ ld [hl], a
+ ; fall through
+.infiniteLoop ; overwrite current address with pointer
+ call Music2_GetNextMusicByte
+ push af
+ call Music2_GetNextMusicByte
+ ld b, a
+ ld d, $0
+ ld a, c
+ add a
+ ld e, a
+ ld hl, $c006
+ add hl, de
+ pop af
+ ld [hli], a
+ ld [hl], b
+ jp Music2_endchannel
-;Routes 24 and 25
-Routes2_mh: ; 0x82CD - 0x82D8
- db $C0
- dw Routes2_md_1 ;Channel 1
- db $01
- dw Routes2_md_2 ;Channel 2
- db $02
- dw Routes2_md_3 ;Channel 3
- db $03
- dw Routes2_md_4 ;Channel 4
+Music2_notetype: ; 0x92e4
+ and $f0
+ cp $d0 ; is this command a notetype?
+ jp nz, Music2_togglecall ; no
+ ld a, d ; yes
+ and $f
+ ld b, $0
+ ld hl, $c0c6
+ add hl, bc
+ ld [hl], a ; store low nibble as speed
+ ld a, c
+ cp CH3
+ jr z, .noiseChannel ; noise channel has 0 params
+ call Music2_GetNextMusicByte
+ ld d, a
+ ld a, c
+ cp CH2
+ jr z, .musicChannel3
+ cp CH6
+ jr nz, .notChannel3
+ ld hl, $c0e7
+ jr .sfxChannel3
+.musicChannel3
+ ld hl, $c0e6
+.sfxChannel3
+ ld a, d
+ and $f
+ ld [hl], a ; store low nibble of param as duty
+ ld a, d
+ and $30
+ sla a
+ ld d, a
+ ; fall through
+
+ ; if channel 3, store high nibble as volume
+ ; else, store volume (high nibble) and fade (low nibble)
+.notChannel3
+ ld b, $0
+ ld hl, $c0de
+ add hl, bc
+ ld [hl], d
+.noiseChannel
+ jp Music2_endchannel
-;Routes 3, 4, 5, 6, 7, 8, 9, 10, 16, 17, 18, 19, 20, 21, 22
-Routes3_mh: ; 0x82D9 - 0x82E4
- db $C0
- dw Routes3_md_1 ;Channel 1
- db $01
- dw Routes3_md_2 ;Channel 2
- db $02
- dw Routes3_md_3 ;Channel 3
- db $03
- dw Routes3_md_4 ;Channel 4
+Music2_togglecall: ; 0x9323
+ ld a, d
+ cp $e8 ; is this command an togglecall?
+ jr nz, Music2_vibrato ; no
+ ld b, $0 ; yes
+ ld hl, $c02e
+ add hl, bc
+ ld a, [hl]
+ xor $1
+ ld [hl], a ; flip bit 0 of $c02e (toggle returning from call)
+ jp Music2_endchannel
+
+Music2_vibrato: ; 0x9335
+ cp $ea ; is this command a vibrato?
+ jr nz, Music2_pitchbend ; no
+ call Music2_GetNextMusicByte ; yes
+ ld b, $0
+ ld hl, $c04e
+ add hl, bc
+ ld [hl], a ; store delay
+ ld hl, $c06e
+ add hl, bc
+ ld [hl], a ; store delay
+ call Music2_GetNextMusicByte
+ ld d, a
+ and $f0
+ swap a
+ ld b, $0
+ ld hl, $c056
+ add hl, bc
+ srl a
+ ld e, a
+ adc b
+ swap a
+ or e
+ ld [hl], a ; store rate as both high and low nibbles
+ ld a, d
+ and $f
+ ld d, a
+ ld hl, $c05e
+ add hl, bc
+ swap a
+ or d
+ ld [hl], a ; store depth as both high and low nibbles
+ jp Music2_endchannel
+
+Music2_pitchbend: ; 0x936d
+ cp $eb ; is this command a pitchbend?
+ jr nz, Music2_duty ; no
+ call Music2_GetNextMusicByte ; yes
+ ld b, $0
+ ld hl, $c076
+ add hl, bc
+ ld [hl], a ; store first param
+ call Music2_GetNextMusicByte
+ ld d, a
+ and $f0
+ swap a
+ ld b, a
+ ld a, d
+ and $f
+ call Func_9858
+ ld b, $0
+ ld hl, $c0a6
+ add hl, bc
+ ld [hl], d ; store unknown part of second param
+ ld hl, $c0ae
+ add hl, bc
+ ld [hl], e ; store unknown part of second param
+ ld b, $0
+ ld hl, $c02e
+ add hl, bc
+ set 4, [hl] ; set pitchbend flag
+ call Music2_GetNextMusicByte
+ ld d, a
+ jp Music2_notelength
+
+Music2_duty: ; 0x93a5
+ cp $ec ; is this command a duty?
+ jr nz, Music2_tempo ; no
+ call Music2_GetNextMusicByte ; yes
+ rrca
+ rrca
+ and $c0
+ ld b, $0
+ ld hl, $c03e
+ add hl, bc
+ ld [hl], a ; store duty
+ jp Music2_endchannel
+
+Music2_tempo: ; 0x93ba
+ cp $ed ; is this command a tempo?
+ jr nz, Music2_unknownmusic0xee ; no
+ ld a, c ; yes
+ cp CH4
+ jr nc, .sfxChannel
+ call Music2_GetNextMusicByte
+ ld [$c0e8], a ; store first param
+ call Music2_GetNextMusicByte
+ ld [$c0e9], a ; store second param
+ xor a
+ ld [$c0ce], a ; clear RAM
+ ld [$c0cf], a
+ ld [$c0d0], a
+ ld [$c0d1], a
+ jr .musicChannelDone
+.sfxChannel
+ call Music2_GetNextMusicByte
+ ld [$c0ea], a ; store first param
+ call Music2_GetNextMusicByte
+ ld [$c0eb], a ; store second param
+ xor a
+ ld [$c0d2], a ; clear RAM
+ ld [$c0d3], a
+ ld [$c0d4], a
+ ld [$c0d5], a
+.musicChannelDone
+ jp Music2_endchannel
+
+Music2_unknownmusic0xee: ; 0x93fa
+ cp $ee ; is this command an unknownmusic0xee?
+ jr nz, Music2_unknownmusic0xef ; no
+ call Music2_GetNextMusicByte ; yes
+ ld [$c004], a ; store first param
+ jp Music2_endchannel
+
+; this appears to never be used
+Music2_unknownmusic0xef ; 0x9407
+ cp $ef ; is this command an unknownmusic0xef?
+ jr nz, Music2_dutycycle ; no
+ call Music2_GetNextMusicByte ; yes
+ push bc
+ call Func_9876
+ pop bc
+ ld a, [$c003]
+ and a
+ jr nz, .skip
+ ld a, [$c02d]
+ ld [$c003], a
+ xor a
+ ld [$c02d], a
+.skip
+ jp Music2_endchannel
+
+Music2_dutycycle: ; 0x9426
+ cp $fc ; is this command a dutycycle?
+ jr nz, Music2_stereopanning ; no
+ call Music2_GetNextMusicByte ; yes
+ ld b, $0
+ ld hl, $c046
+ add hl, bc
+ ld [hl], a ; store full cycle
+ and $c0
+ ld hl, $c03e
+ add hl, bc
+ ld [hl], a ; store first duty
+ ld hl, $c02e
+ add hl, bc
+ set 6, [hl] ; set dutycycle flag
+ jp Music2_endchannel
+
+Music2_stereopanning: ; 0x9444
+ cp $f0 ; is this command a stereopanning?
+ jr nz, Music2_executemusic ; no
+ call Music2_GetNextMusicByte ; yes
+ ld [$ff00+$24], a ; store stereopanning
+ jp Music2_endchannel
+
+Music2_executemusic: ; 0x9450
+ cp $f8 ; is this command an executemusic?
+ jr nz, Music2_octave ; no
+ ld b, $0 ; yes
+ ld hl, $c036
+ add hl, bc
+ set 0, [hl]
+ jp Music2_endchannel
+
+Music2_octave: ; 0x945f
+ and $f0
+ cp $e0 ; is this command an octave?
+ jr nz, Music2_unknownsfx0x20 ; no
+ ld hl, $c0d6 ; yes
+ ld b, $0
+ add hl, bc
+ ld a, d
+ and $f
+ ld [hl], a ; store low nibble as octave
+ jp Music2_endchannel
-;Routes 11, 12, 13, 14, 15
-Routes4_mh: ; 0x82E5 - 0x82F0
- db $C0
- dw Routes4_md_1 ;Channel 1
- db $01
- dw Routes4_md_2 ;Channel 2
- db $02
- dw Routes4_md_3 ;Channel 3
- db $03
- dw Routes4_md_4 ;Channel 4
+Music2_unknownsfx0x20: ; 0x9472
+ cp $20 ; is this command an unknownsfx0x20?
+ jr nz, Music2_unknownsfx0x10 ; no
+ ld a, c
+ cp CH3 ; is this a noise or sfx channel?
+ jr c, Music2_unknownsfx0x10 ; no
+ ld b, $0
+ ld hl, $c036
+ add hl, bc
+ bit 0, [hl]
+ jr nz, Music2_unknownsfx0x10 ; no
+ call Music2_notelength ; yes
+ ld d, a
+ ld b, $0
+ ld hl, $c03e
+ add hl, bc
+ ld a, [hl]
+ or d
+ ld d, a
+ ld b, $1
+ call Func_9838
+ ld [hl], d
+ call Music2_GetNextMusicByte
+ ld d, a
+ ld b, $2
+ call Func_9838
+ ld [hl], d
+ call Music2_GetNextMusicByte
+ ld e, a
+ ld a, c
+ cp CH7
+ ld a, $0
+ jr z, .sfxNoiseChannel ; only two params for noise channel
+ push de
+ call Music2_GetNextMusicByte
+ pop de
+.sfxNoiseChannel
+ ld d, a
+ push de
+ call Func_9629
+ call Func_95f8
+ pop de
+ call Func_964b
+ ret
-;Indigo Plateau
-IndigoPlateau_mh: ; 0x82F1 - 0x82FC
- db $C0
- dw IndigoPlateau_md_1 ;Channel 1
- db $01
- dw IndigoPlateau_md_2 ;Channel 2
- db $02
- dw IndigoPlateau_md_3 ;Channel 3
- db $03
- dw IndigoPlateau_md_4 ;Channel 4
+Music2_unknownsfx0x10:
+ ld a, c
+ cp CH4
+ jr c, Music2_note ; if not a sfx
+ ld a, d
+ cp $10 ; is this command a unknownsfx0x10?
+ jr nz, Music2_note ; no
+ ld b, $0
+ ld hl, $c036
+ add hl, bc
+ bit 0, [hl]
+ jr nz, Music2_note ; no
+ call Music2_GetNextMusicByte ; yes
+ ld [$ff00+$10], a
+ jp Music2_endchannel
-INCLUDE "music.asm"
+Music2_note:
+ ld a, c
+ cp CH3
+ jr nz, Music2_notelength ; if not noise channel
+ ld a, d
+ and $f0
+ cp $b0 ; is this command a dnote?
+ jr z, Music2_dnote ; yes
+ jr nc, Music2_notelength ; no
+ swap a
+ ld b, a
+ ld a, d
+ and $f
+ ld d, a
+ ld a, b
+ push de
+ push bc
+ jr asm_94fd
+
+Music2_dnote:
+ ld a, d
+ and $f
+ push af
+ push bc
+ call Music2_GetNextMusicByte ; get dnote instrument
+asm_94fd
+ ld d, a
+ ld a, [$c003]
+ and a
+ jr nz, .asm_9508
+ ld a, d
+ call Func_9876
+.asm_9508
+ pop bc
+ pop de
+
+Music2_notelength: ; 0x950a
+ ld a, d
+ push af
+ and $f
+ inc a
+ ld b, $0
+ ld e, a ; store note length (in 16ths)
+ ld d, b
+ ld hl, $c0c6
+ add hl, bc
+ ld a, [hl]
+ ld l, b
+ call Func_9847
+ ld a, c
+ cp CH4
+ jr nc, .sfxChannel
+ ld a, [$c0e8]
+ ld d, a
+ ld a, [$c0e9]
+ ld e, a
+ jr .skip
+.sfxChannel
+ ld d, $1
+ ld e, $0
+ cp CH7
+ jr z, .skip ; if noise channel
+ call Func_9693
+ ld a, [$c0ea]
+ ld d, a
+ ld a, [$c0eb]
+ ld e, a
+.skip
+ ld a, l
+ ld b, $0
+ ld hl, $c0ce
+ add hl, bc
+ ld l, [hl]
+ call Func_9847
+ ld e, l
+ ld d, h
+ ld hl, $c0ce
+ add hl, bc
+ ld [hl], e
+ ld a, d
+ ld hl, $c0b6
+ add hl, bc
+ ld [hl], a
+ ld hl, $c036
+ add hl, bc
+ bit 0, [hl]
+ jr nz, Music2_notepitch
+ ld hl, $c02e
+ add hl, bc
+ bit 2, [hl]
+ jr z, Music2_notepitch
+ pop hl
+ ret
+Music2_notepitch: ; 0x9568
+ pop af
+ and $f0
+ cp $c0 ; compare to rest
+ jr nz, .notRest
+ ld a, c
+ cp CH4
+ jr nc, .sfxChannel
+ ld hl, $c02a
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr nz, .done
+ ; fall through
+.sfxChannel
+ ld a, c
+ cp CH2
+ jr z, .musicChannel3
+ cp CH6
+ jr nz, .notSfxChannel3
+.musicChannel3
+ ld b, $0
+ ld hl, Unknown_9b1f
+ add hl, bc
+ ld a, [$ff00+$25]
+ and [hl]
+ ld [$ff00+$25], a
+ jr .done
+.notSfxChannel3
+ ld b, $2
+ call Func_9838
+ ld a, $8
+ ld [hli], a
+ inc hl
+ ld a, $80
+ ld [hl], a
+.done
+ ret
+.notRest
+ swap a
+ ld b, $0
+ ld hl, $c0d6
+ add hl, bc
+ ld b, [hl]
+ call Func_9858
+ ld b, $0
+ ld hl, $c02e
+ add hl, bc
+ bit 4, [hl]
+ jr z, .asm_95b8
+ call Func_978f
+.asm_95b8
+ push de
+ ld a, c
+ cp CH4
+ jr nc, .skip ; if sfx channel
+ ld hl, $c02a
+ ld d, $0
+ ld e, a
+ add hl, de
+ ld a, [hl]
+ and a
+ jr nz, .asm_95cb
+ jr .skip
+.asm_95cb
+ pop de
+ ret
+.skip
+ ld b, $0
+ ld hl, $c0de
+ add hl, bc
+ ld d, [hl]
+ ld b, $2
+ call Func_9838
+ ld [hl], d
+ call Func_9629
+ call Func_95f8
+ pop de
+ ld b, $0
+ ld hl, $c02e
+ add hl, bc
+ bit 0, [hl]
+ jr z, .asm_95ef
+ inc e
+ jr nc, .asm_95ef
+ inc d
+.asm_95ef
+ ld hl, $c066
+ add hl, bc
+ ld [hl], e
+ call Func_964b
+ ret
+
+Func_95f8: ; 0x95f8
+ ld b, $0
+ ld hl, Unknown_9b27
+ add hl, bc
+ ld a, [$ff00+$25]
+ or [hl]
+ ld d, a
+ ld a, c
+ cp CH7
+ jr z, .sfxNoiseChannel
+ cp CH4
+ jr nc, .skip ; if sfx channel
+ ld hl, $c02a
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr nz, .skip
+.sfxNoiseChannel
+ ld a, [$c004]
+ ld hl, Unknown_9b27
+ add hl, bc
+ and [hl]
+ ld d, a
+ ld a, [$ff00+$25]
+ ld hl, Unknown_9b1f
+ add hl, bc
+ and [hl]
+ or d
+ ld d, a
+.skip
+ ld a, d
+ ld [$ff00+$25], a
+ ret
+
+Func_9629: ; 0x9629
+ ld b, $0
+ ld hl, $c0b6
+ add hl, bc
+ ld d, [hl]
+ ld a, c
+ cp CH2
+ jr z, .channel3 ; if music channel 3
+ cp CH6
+ jr z, .channel3 ; if sfx channel 3
+ ld a, d
+ and $3f
+ ld d, a
+ ld hl, $c03e
+ add hl, bc
+ ld a, [hl]
+ or d
+ ld d, a
+.channel3
+ ld b, $1
+ call Func_9838
+ ld [hl], d
+ ret
+
+Func_964b: ; 0x964b
+ ld a, c
+ cp CH2
+ jr z, .channel3
+ cp CH6
+ jr nz, .notSfxChannel3
+ ; fall through
+.channel3
+ push de
+ ld de, $c0e6
+ cp CH2
+ jr z, .musicChannel3
+ ld de, $c0e7
+.musicChannel3
+ ld a, [de]
+ add a
+ ld d, $0
+ ld e, a
+ ld hl, Music2_Channel3DutyPointers
+ add hl, de
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld hl, $ff30
+ ld b, $f
+ ld a, $0
+ ld [$ff00+$1a], a
+.loop
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, b
+ dec b
+ and a
+ jr nz, .loop
+ ld a, $80
+ ld [$ff00+$1a], a
+ pop de
+.notSfxChannel3
+ ld a, d
+ or $80
+ and $c7
+ ld d, a
+ ld b, $3
+ call Func_9838
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ call Func_96b5
+ ret
+
+Func_9693: ; 0x9693
+ call Func_96e5
+ jr nc, .asm_96ab
+ ld d, $0
+ ld a, [$c0f2]
+ add $80
+ jr nc, .asm_96a2
+ inc d
+.asm_96a2
+ ld [$c0eb], a
+ ld a, d
+ ld [$c0ea], a
+ jr .asm_96b4
+.asm_96ab
+ xor a
+ ld [$c0eb], a
+ ld a, $1
+ ld [$c0ea], a
+.asm_96b4
+ ret
+
+Func_96b5: ; 0x96b5
+ call Func_96e5
+ jr nc, .asm_96c6
+ ld a, [$c0f1]
+ add e
+ jr nc, .asm_96c1
+ inc d
+.asm_96c1
+ dec hl
+ ld e, a
+ ld [hl], e
+ inc hl
+ ld [hl], d
+.asm_96c6
+ ret
+
+Func_96c7: ; 0x96c7
+ call Func_96e5
+ jr nc, .asm_96e2
+ ld hl, $c006
+ ld e, c
+ ld d, $0
+ sla e
+ rl d
+ add hl, de
+ ld a, [hl]
+ sub $1
+ ld [hl], a
+ inc hl
+ ld a, [hl]
+ sbc $0
+ ld [hl], a
+ scf
+ ret
+.asm_96e2
+ scf
+ ccf
+ ret
+
+Func_96e5: ; 0x96e5
+ ld a, [$c02a]
+ cp $14
+ jr nc, .asm_96ee
+ jr .asm_96f4
+.asm_96ee
+ cp $86
+ jr z, .asm_96f4
+ jr c, .asm_96f7
+.asm_96f4
+ scf
+ ccf
+ ret
+.asm_96f7
+ scf
+ ret
+
+Music2_ApplyPitchBend: ; 0x96f9
+ ld hl, $c02e
+ add hl, bc
+ bit 5, [hl]
+ jp nz, .asm_9740
+ ld hl, $c09e
+ add hl, bc
+ ld e, [hl]
+ ld hl, $c096
+ add hl, bc
+ ld d, [hl]
+ ld hl, $c07e
+ add hl, bc
+ ld l, [hl]
+ ld h, b
+ add hl, de
+ ld d, h
+ ld e, l
+ ld hl, $c08e
+ add hl, bc
+ push hl
+ ld hl, $c086
+ add hl, bc
+ ld a, [hl]
+ pop hl
+ add [hl]
+ ld [hl], a
+ ld a, $0
+ adc e
+ ld e, a
+ ld a, $0
+ adc d
+ ld d, a
+ ld hl, $c0a6
+ add hl, bc
+ ld a, [hl]
+ cp d
+ jp c, .asm_9786
+ jr nz, .asm_9773
+ ld hl, $c0ae
+ add hl, bc
+ ld a, [hl]
+ cp e
+ jp c, .asm_9786
+ jr .asm_9773
+.asm_9740
+ ld hl, $c09e
+ add hl, bc
+ ld a, [hl]
+ ld hl, $c096
+ add hl, bc
+ ld d, [hl]
+ ld hl, $c07e
+ add hl, bc
+ ld e, [hl]
+ sub e
+ ld e, a
+ ld a, d
+ sbc b
+ ld d, a
+ ld hl, $c086
+ add hl, bc
+ ld a, [hl]
+ add a
+ ld [hl], a
+ ld a, e
+ sbc b
+ ld e, a
+ ld a, d
+ sbc b
+ ld d, a
+ ld hl, $c0a6
+ add hl, bc
+ ld a, d
+ cp [hl]
+ jr c, .asm_9786
+ jr nz, .asm_9773
+ ld hl, $c0ae
+ add hl, bc
+ ld a, e
+ cp [hl]
+ jr c, .asm_9786
+.asm_9773
+ ld hl, $c09e
+ add hl, bc
+ ld [hl], e
+ ld hl, $c096
+ add hl, bc
+ ld [hl], d
+ ld b, $3
+ call Func_9838
+ ld a, e
+ ld [hli], a
+ ld [hl], d
+ ret
+.asm_9786
+ ld hl, $c02e
+ add hl, bc
+ res 4, [hl]
+ res 5, [hl]
+ ret
+
+Func_978f: ; 0x978f
+ ld hl, $c096
+ add hl, bc
+ ld [hl], d
+ ld hl, $c09e
+ add hl, bc
+ ld [hl], e
+ ld hl, $c0b6
+ add hl, bc
+ ld a, [hl]
+ ld hl, $c076
+ add hl, bc
+ sub [hl]
+ jr nc, .asm_97a7
+ ld a, $1
+.asm_97a7
+ ld [hl], a
+ ld hl, $c0ae
+ add hl, bc
+ ld a, e
+ sub [hl]
+ ld e, a
+ ld a, d
+ sbc b
+ ld hl, $c0a6
+ add hl, bc
+ sub [hl]
+ jr c, .asm_97c3
+ ld d, a
+ ld b, $0
+ ld hl, $c02e
+ add hl, bc
+ set 5, [hl]
+ jr .asm_97e6
+.asm_97c3
+ ld hl, $c096
+ add hl, bc
+ ld d, [hl]
+ ld hl, $c09e
+ add hl, bc
+ ld e, [hl]
+ ld hl, $c0ae
+ add hl, bc
+ ld a, [hl]
+ sub e
+ ld e, a
+ ld a, d
+ sbc b
+ ld d, a
+ ld hl, $c0a6
+ add hl, bc
+ ld a, [hl]
+ sub d
+ ld d, a
+ ld b, $0
+ ld hl, $c02e
+ add hl, bc
+ res 5, [hl]
+.asm_97e6
+ ld hl, $c076
+ add hl, bc
+.asm_97ea
+ inc b
+ ld a, e
+ sub [hl]
+ ld e, a
+ jr nc, .asm_97ea
+ ld a, d
+ and a
+ jr z, .asm_97f8
+ dec a
+ ld d, a
+ jr .asm_97ea
+.asm_97f8
+ ld a, e
+ add [hl]
+ ld d, b
+ ld b, $0
+ ld hl, $c07e
+ add hl, bc
+ ld [hl], d
+ ld hl, $c086
+ add hl, bc
+ ld [hl], a
+ ld hl, $c08e
+ add hl, bc
+ ld [hl], a
+ ret
+
+Music2_ApplyDutyCycle: ; 0x980d
+ ld b, $0
+ ld hl, $c046
+ add hl, bc
+ ld a, [hl]
+ rlca
+ rlca
+ ld [hl], a
+ and $c0
+ ld d, a
+ ld b, $1
+ call Func_9838
+ ld a, [hl]
+ and $3f
+ or d
+ ld [hl], a
+ ret
+
+Music2_GetNextMusicByte: ; 0x9825
+ ld d, $0
+ ld a, c
+ add a
+ ld e, a
+ ld hl, $c006
+ add hl, de
+ ld a, [hli]
+ ld e, a
+ ld a, [hld]
+ ld d, a
+ ld a, [de] ; get next music command
+ inc de
+ ld [hl], e ; store address of next command
+ inc hl
+ ld [hl], d
+ ret
+
+Func_9838: ; 0x9838
+ ld a, c
+ ld hl, Unknown_9b17
+ add l
+ jr nc, .noCarry
+ inc h
+.noCarry
+ ld l, a
+ ld a, [hl]
+ add b
+ ld l, a
+ ld h, $ff
+ ret
+
+Func_9847: ; 0x9847
+ ld h, $0
+.loop
+ srl a
+ jr nc, .noCarry
+ add hl, de
+.noCarry
+ sla e
+ rl d
+ and a
+ jr z, .done
+ jr .loop
+.done
+ ret
+
+Func_9858: ; 0x9858
+ ld h, $0
+ ld l, a
+ add hl, hl
+ ld d, h
+ ld e, l
+ ld hl, Unknown_9b2f
+ add hl, de
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld a, b
+.loop
+ cp $7
+ jr z, .done
+ sra d
+ rr e
+ inc a
+ jr .loop
+.done
+ ld a, $8
+ add d
+ ld d, a
+ ret
+
+Func_9876: ; 0x9876
+ ld [$c001], a
+ cp $ff
+ jp z, Func_9a34
+ cp $b9
+ jp z, Func_994e
+ jp c, Func_994e
+ cp $fe
+ jr z, .asm_988d
+ jp nc, Func_994e
+.asm_988d
+ xor a
+ ld [$c000], a
+ ld [$c003], a
+ ld [$c0e9], a
+ ld [$c0e6], a
+ ld [$c0e7], a
+ ld d, $8
+ ld hl, $c016
+ call FillMusicRAM2
+ ld hl, $c006
+ call FillMusicRAM2
+ ld d, $4
+ ld hl, $c026
+ call FillMusicRAM2
+ ld hl, $c02e
+ call FillMusicRAM2
+ ld hl, $c03e
+ call FillMusicRAM2
+ ld hl, $c046
+ call FillMusicRAM2
+ ld hl, $c04e
+ call FillMusicRAM2
+ ld hl, $c056
+ call FillMusicRAM2
+ ld hl, $c05e
+ call FillMusicRAM2
+ ld hl, $c066
+ call FillMusicRAM2
+ ld hl, $c06e
+ call FillMusicRAM2
+ ld hl, $c036
+ call FillMusicRAM2
+ ld hl, $c076
+ call FillMusicRAM2
+ ld hl, $c07e
+ call FillMusicRAM2
+ ld hl, $c086
+ call FillMusicRAM2
+ ld hl, $c08e
+ call FillMusicRAM2
+ ld hl, $c096
+ call FillMusicRAM2
+ ld hl, $c09e
+ call FillMusicRAM2
+ ld hl, $c0a6
+ call FillMusicRAM2
+ ld hl, $c0ae
+ call FillMusicRAM2
+ ld a, $1
+ ld hl, $c0be
+ call FillMusicRAM2
+ ld hl, $c0b6
+ call FillMusicRAM2
+ ld hl, $c0c6
+ call FillMusicRAM2
+ ld [$c0e8], a
+ ld a, $ff
+ ld [$c004], a
+ xor a
+ ld [$ff00+$24], a
+ ld a, $8
+ ld [$ff00+$10], a
+ ld a, $0
+ ld [$ff00+$25], a
+ xor a
+ ld [$ff00+$1a], a
+ ld a, $80
+ ld [$ff00+$1a], a
+ ld a, $77
+ ld [$ff00+$24], a
+ jp Func_9a8f
+
+Func_994e: ; 0x994e
+ ld l, a
+ ld e, a
+ ld h, $0
+ ld d, h
+ add hl, hl
+ add hl, de
+ ld de, SFX_Headers_02
+ add hl, de
+ ld a, h
+ ld [$c0ec], a
+ ld a, l
+ ld [$c0ed], a
+ ld a, [hl]
+ and $c0
+ rlca
+ rlca
+ ld c, a
+.asm_9967
+ ld d, c
+ ld a, c
+ add a
+ add c
+ ld c, a
+ ld b, $0
+ ld a, [$c0ec]
+ ld h, a
+ ld a, [$c0ed]
+ ld l, a
+ add hl, bc
+ ld c, d
+ ld a, [hl]
+ and $f
+ ld e, a
+ ld d, $0
+ ld hl, $c026
+ add hl, de
+ ld a, [hl]
+ and a
+ jr z, .asm_99a3
+ ld a, e
+ cp $7
+ jr nz, .asm_999a
+ ld a, [$c001]
+ cp $14
+ jr nc, .asm_9993
+ ret
+.asm_9993
+ ld a, [hl]
+ cp $14
+ jr z, .asm_99a3
+ jr c, .asm_99a3
+.asm_999a
+ ld a, [$c001]
+ cp [hl]
+ jr z, .asm_99a3
+ jr c, .asm_99a3
+ ret
+.asm_99a3
+ xor a
+ push de
+ ld h, d
+ ld l, e
+ add hl, hl
+ ld d, h
+ ld e, l
+ ld hl, $c016
+ add hl, de
+ ld [hli], a
+ ld [hl], a
+ ld hl, $c006
+ add hl, de
+ ld [hli], a
+ ld [hl], a
+ pop de
+ ld hl, $c026
+ add hl, de
+ ld [hl], a
+ ld hl, $c02e
+ add hl, de
+ ld [hl], a
+ ld hl, $c03e
+ add hl, de
+ ld [hl], a
+ ld hl, $c046
+ add hl, de
+ ld [hl], a
+ ld hl, $c04e
+ add hl, de
+ ld [hl], a
+ ld hl, $c056
+ add hl, de
+ ld [hl], a
+ ld hl, $c05e
+ add hl, de
+ ld [hl], a
+ ld hl, $c066
+ add hl, de
+ ld [hl], a
+ ld hl, $c06e
+ add hl, de
+ ld [hl], a
+ ld hl, $c076
+ add hl, de
+ ld [hl], a
+ ld hl, $c07e
+ add hl, de
+ ld [hl], a
+ ld hl, $c086
+ add hl, de
+ ld [hl], a
+ ld hl, $c08e
+ add hl, de
+ ld [hl], a
+ ld hl, $c096
+ add hl, de
+ ld [hl], a
+ ld hl, $c09e
+ add hl, de
+ ld [hl], a
+ ld hl, $c0a6
+ add hl, de
+ ld [hl], a
+ ld hl, $c0ae
+ add hl, de
+ ld [hl], a
+ ld hl, $c036
+ add hl, de
+ ld [hl], a
+ ld a, $1
+ ld hl, $c0be
+ add hl, de
+ ld [hl], a
+ ld hl, $c0b6
+ add hl, de
+ ld [hl], a
+ ld hl, $c0c6
+ add hl, de
+ ld [hl], a
+ ld a, e
+ cp $4
+ jr nz, .asm_9a2b
+ ld a, $8
+ ld [$ff00+$10], a
+.asm_9a2b
+ ld a, c
+ and a
+ jp z, Func_9a8f
+ dec c
+ jp .asm_9967
+
+Func_9a34: ; 0x9a34
+ ld a, $80
+ ld [$ff00+$26], a
+ ld [$ff00+$1a], a
+ xor a
+ ld [$ff00+$25], a
+ ld [$ff00+$1c], a
+ ld a, $8
+ ld [$ff00+$10], a
+ ld [$ff00+$12], a
+ ld [$ff00+$17], a
+ ld [$ff00+$21], a
+ ld a, $40
+ ld [$ff00+$14], a
+ ld [$ff00+$19], a
+ ld [$ff00+$23], a
+ ld a, $77
+ ld [$ff00+$24], a
+ xor a
+ ld [$c000], a
+ ld [$c003], a
+ ld [$c002], a
+ ld [$c0e9], a
+ ld [$c0eb], a
+ ld [$c0e6], a
+ ld [$c0e7], a
+ ld d, $a0
+ ld hl, $c006
+ call FillMusicRAM2
+ ld a, $1
+ ld d, $18
+ ld hl, $c0b6
+ call FillMusicRAM2
+ ld [$c0e8], a
+ ld [$c0ea], a
+ ld a, $ff
+ ld [$c004], a
+ ret
+
+; fills d bytes at hl with a
+FillMusicRAM2: ; 0x9a89
+ ld b, d
+.loop
+ ld [hli], a
+ dec b
+ jr nz, .loop
+ ret
+
+Func_9a8f: ; 0x9a8f
+ ld a, [$c001]
+ ld l, a
+ ld e, a
+ ld h, $0
+ ld d, h
+ add hl, hl
+ add hl, de
+ ld de, SFX_Headers_02
+ add hl, de
+ ld e, l
+ ld d, h
+ ld hl, $c006
+ ld a, [de] ; get channel number
+ ld b, a
+ rlca
+ rlca
+ and $3
+ ld c, a
+ ld a, b
+ and $f
+ ld b, c
+ inc b
+ inc de
+ ld c, $0
+.asm_9ab1
+ cp c
+ jr z, .asm_9ab9
+ inc c
+ inc hl
+ inc hl
+ jr .asm_9ab1
+.asm_9ab9
+ push hl
+ push bc
+ push af
+ ld b, $0
+ ld c, a
+ ld hl, $c026
+ add hl, bc
+ ld a, [$c001]
+ ld [hl], a
+ pop af
+ cp $3
+ jr c, .asm_9ad2
+ ld hl, $c02e
+ add hl, bc
+ set 2, [hl]
+.asm_9ad2
+ pop bc
+ pop hl
+ ld a, [de] ; get channel pointer
+ ld [hli], a
+ inc de
+ ld a, [de]
+ ld [hli], a
+ inc de
+ inc c
+ dec b
+ ld a, b
+ and a
+ ld a, [de]
+ inc de
+ jr nz, .asm_9ab1
+ ld a, [$c001]
+ cp $14
+ jr nc, .asm_9aeb
+ jr .asm_9b15
+.asm_9aeb
+ ld a, [$c001]
+ cp $86
+ jr z, .asm_9b15
+ jr c, .asm_9af6
+ jr .asm_9b15
+.asm_9af6
+ ld hl, $c02a
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ ld hl, $c012 ; sfx noise channel pointer
+ ld de, Noise2_endchannel
+ ld [hl], e
+ inc hl
+ ld [hl], d ; overwrite pointer to point to endchannel
+ ld a, [$c005]
+ and a
+ jr nz, .asm_9b15
+ ld a, [$ff00+$24]
+ ld [$c005], a
+ ld a, $77
+ ld [$ff00+$24], a
+.asm_9b15
+ ret
+
+Noise2_endchannel: ; 0x9b16
+ endchannel
+
+Unknown_9b17: ; 0x9b17
+ db $10, $15, $1A, $1F ; channels 0-3
+ db $10, $15, $1A, $1F ; channels 4-7
+
+Unknown_9b1f: ; 0x9b1f
+ db $EE, $DD, $BB, $77 ; channels 0-3
+ db $EE, $DD, $BB, $77 ; channels 4-7
+
+Unknown_9b27: ; 0x9b27
+ db $11, $22, $44, $88 ; channels 0-3
+ db $11, $22, $44, $88 ; channels 4-7
+
+Unknown_9b2f: ; 0x9b2f
+ dw $F82C
+ dw $F89D
+ dw $F907
+ dw $F96B
+ dw $F9CA
+ dw $FA23
+ dw $FA77
+ dw $FAC7
+ dw $FB12
+ dw $FB58
+ dw $FB9B
+ dw $FBDA
+
+; an alternate start for MeetRival which has a different first measure
+Music_RivalAlternateStart: ; 0x9b47
+ ld c, BANK(Music_MeetRival)
+ ld a, (Music_MeetRival - $4000) / 3
+ call PlayMusic
+ ld hl, $c006
+ ld de, Music_MeetRival_branch_b1a2
+ call Music2_OverwriteChannelPointer
+ ld de, Music_MeetRival_branch_b21d
+ call Music2_OverwriteChannelPointer
+ ld de, Music_MeetRival_branch_b2b5
+
+Music2_OverwriteChannelPointer: ; 0x9b60
+ ld a, e
+ ld [hli], a
+ ld a, d
+ ld [hli], a
+ ret
+
+; an alternate tempo for MeetRival which is slightly slower
+Music_RivalAlternateTempo: ; 0x9b65
+ ld c, BANK(Music_MeetRival)
+ ld a, (Music_MeetRival - $4000) / 3
+ call PlayMusic
+ ld hl, $c006
+ ld de, Music_MeetRival_branch_b119
+ jp Music2_OverwriteChannelPointer
+
+; applies both the alternate start and alternate tempo
+Music_RivalAlternateStartAndTempo: ; 0x9b75
+ call Music_RivalAlternateStart
+ ld hl, $c006
+ ld de, Music_MeetRival_branch_b19b
+ jp Music2_OverwriteChannelPointer
+
+; an alternate tempo for Cities1 which is used for the Hall of Fame room
+Music_Cities1AlternateTempo: ; 0x9b81
+ ld a, $a
+ ld [$cfc8], a
+ ld [$cfc9], a
+ ld a, $ff
+ ld [W_CURCHANNELPOINTER], a
+ ld c, $64
+ call DelayFrames
+ ld c, BANK(Music_Cities1)
+ ld a, (Music_Cities1 - $4000) / 3
+ call PlayMusic
+ ld hl, $c006
+ ld de, Music_Cities1_branch_aa6f
+ jp Music2_OverwriteChannelPointer
+
+INCLUDE "music/pkmnhealed.tx"
+INCLUDE "music/routes1.tx"
+INCLUDE "music/routes2.tx"
+INCLUDE "music/routes3.tx"
+INCLUDE "music/routes4.tx"
+INCLUDE "music/indigoplateau.tx"
+INCLUDE "music/pallettown.tx"
+INCLUDE "music/unusedsong.tx"
+INCLUDE "music/cities1.tx"
+INCLUDE "music/sfx/sfx_02_3a.tx"
+INCLUDE "music/museumguy.tx"
+INCLUDE "music/meetprofoak.tx"
+INCLUDE "music/meetrival.tx"
+INCLUDE "music/sfx/sfx_02_41.tx"
+INCLUDE "music/sfx/sfx_02_3b.tx"
+INCLUDE "music/sfx/sfx_02_42.tx"
+INCLUDE "music/ssanne.tx"
+INCLUDE "music/cities2.tx"
+INCLUDE "music/celadon.tx"
+INCLUDE "music/cinnabar.tx"
+INCLUDE "music/vermilion.tx"
+INCLUDE "music/lavender.tx"
+INCLUDE "music/safarizone.tx"
+INCLUDE "music/gym.tx"
+INCLUDE "music/pokecenter.tx"
+
SECTION "bank3",ROMX,BANK[$3]
_GetJoypadState: ; c000 (3:4000)
@@ -18370,7 +20080,503 @@ HandleJoypadResetButtons: ; c03c (3:403c)
jp z, SoftReset
jp GetJoypadState
-INCBIN "baserom.gbc",$c04d,$c23d - $c04d
+MapSongBanks: ; c04d (3:404d)
+ db (Music_PalletTown - $4000) / 3
+ db BANK(Music_PalletTown) ;PALLET_TOWN
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; VIRIDIAN_CITY
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; PEWTER_CITY
+ db (Music_Cities2 - $4000) / 3
+ db BANK(Music_Cities2) ; CERULEAN_CITY
+ db (Music_Lavender - $4000) / 3
+ db BANK(Music_Lavender) ; LAVENDER_TOWN
+ db (Music_Vermilion - $4000) / 3
+ db BANK(Music_Vermilion) ; VERMILION_CITY
+ db (Music_Celadon - $4000) / 3
+ db BANK(Music_Celadon) ; CELADON_CITY
+ db (Music_Cities2 - $4000) / 3
+ db BANK(Music_Cities2) ; FUCHSIA_CITY
+ db (Music_Cinnabar - $4000) / 3
+ db BANK(Music_Cinnabar) ; CINNABAR_ISLAND
+ db (Music_IndigoPlateau - $4000) / 3
+ db BANK(Music_IndigoPlateau) ; INDIGO_PLATEAU
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; SAFFRON_CITY
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; unused
+ db (Music_Routes1 - $4000) / 3
+ db BANK(Music_Routes1) ; ROUTE_1
+ db (Music_Routes1 - $4000) / 3
+ db BANK(Music_Routes1) ; ROUTE_2
+ db (Music_Routes3 - $4000) / 3
+ db BANK(Music_Routes3) ; ROUTE_3
+ db (Music_Routes3 - $4000) / 3
+ db BANK(Music_Routes3) ; ROUTE_4
+ db (Music_Routes3 - $4000) / 3
+ db BANK(Music_Routes3) ; ROUTE_5
+ db (Music_Routes3 - $4000) / 3
+ db BANK(Music_Routes3) ; ROUTE_6
+ db (Music_Routes3 - $4000) / 3
+ db BANK(Music_Routes3) ; ROUTE_7
+ db (Music_Routes3 - $4000) / 3
+ db BANK(Music_Routes3) ; ROUTE_8
+ db (Music_Routes3 - $4000) / 3
+ db BANK(Music_Routes3) ; ROUTE_9
+ db (Music_Routes3 - $4000) / 3
+ db BANK(Music_Routes3) ; ROUTE_10
+ db (Music_Routes4 - $4000) / 3
+ db BANK(Music_Routes4) ; ROUTE_11
+ db (Music_Routes4 - $4000) / 3
+ db BANK(Music_Routes4) ; ROUTE_12
+ db (Music_Routes4 - $4000) / 3
+ db BANK(Music_Routes4) ; ROUTE_13
+ db (Music_Routes4 - $4000) / 3
+ db BANK(Music_Routes4) ; ROUTE_14
+ db (Music_Routes4 - $4000) / 3
+ db BANK(Music_Routes4) ; ROUTE_15
+ db (Music_Routes3 - $4000) / 3
+ db BANK(Music_Routes3) ; ROUTE_16
+ db (Music_Routes3 - $4000) / 3
+ db BANK(Music_Routes3) ; ROUTE_17
+ db (Music_Routes3 - $4000) / 3
+ db BANK(Music_Routes3) ; ROUTE_18
+ db (Music_Routes3 - $4000) / 3
+ db BANK(Music_Routes3) ; ROUTE_19
+ db (Music_Routes3 - $4000) / 3
+ db BANK(Music_Routes3) ; ROUTE_20
+ db (Music_Routes3 - $4000) / 3
+ db BANK(Music_Routes3) ; ROUTE_21
+ db (Music_Routes3 - $4000) / 3
+ db BANK(Music_Routes3) ; ROUTE_22
+ db (Music_IndigoPlateau - $4000) / 3
+ db BANK(Music_IndigoPlateau) ; ROUTE_23
+ db (Music_Routes2 - $4000) / 3
+ db BANK(Music_Routes2) ; ROUTE_24
+ db (Music_Routes2 - $4000) / 3
+ db BANK(Music_Routes2) ; ROUTE_25
+ db (Music_PalletTown - $4000) / 3
+ db BANK(Music_PalletTown) ; RedsHouse1F
+ db (Music_PalletTown - $4000) / 3
+ db BANK(Music_PalletTown) ; RedsHouse2F
+ db (Music_PalletTown - $4000) / 3
+ db BANK(Music_PalletTown) ; BluesHouse
+ db (Music_OaksLab - $4000) / 3
+ db BANK(Music_OaksLab) ; OaksLab
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; ViridianPokecenter
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; ViridianMart
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; School
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; ViridianHouse
+ db (Music_Gym - $4000) / 3
+ db BANK(Music_Gym) ; ViridianGym
+ db (Music_Dungeon2 - $4000) / 3
+ db BANK(Music_Dungeon2) ; DiglettsCaveRoute2
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; ViridianForestexit
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; Route2House
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; Route2Gate
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; ViridianForestEntrance
+ db (Music_Dungeon2 - $4000) / 3
+ db BANK(Music_Dungeon2) ; ViridianForest
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; MuseumF1
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; MuseumF2
+ db (Music_Gym - $4000) / 3
+ db BANK(Music_Gym) ; PewterGym
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; PewterHouse1
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; PewterMart
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; PewterHouse2
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; PewterPokecenter
+ db (Music_Dungeon3 - $4000) / 3
+ db BANK(Music_Dungeon3) ; MtMoon1
+ db (Music_Dungeon3 - $4000) / 3
+ db BANK(Music_Dungeon3) ; MtMoon2
+ db (Music_Dungeon3 - $4000) / 3
+ db BANK(Music_Dungeon3) ; MtMoon3
+ db (Music_Cities2 - $4000) / 3
+ db BANK(Music_Cities2) ; CeruleanHouseTrashed
+ db (Music_Cities2 - $4000) / 3
+ db BANK(Music_Cities2) ; CeruleanHouse
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; CeruleanPokecenter
+ db (Music_Gym - $4000) / 3
+ db BANK(Music_Gym) ; CeruleanGym
+ db (Music_Cities2 - $4000) / 3
+ db BANK(Music_Cities2) ; BikeShop
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; CeruleanMart
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; MtMoonPokecenter
+ db (Music_Dungeon3 - $4000) / 3
+ db BANK(Music_Dungeon3) ; CeruleanHouseTrashed
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; Route5Gate
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; UndergroundTunnelEntranceRoute5
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; DayCareM
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; Route6Gate
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; UndergroundTunnelEntranceRoute6
+ db (Music_Vermilion - $4000) / 3
+ db BANK(Music_Vermilion) ; FREEZE
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; Route7Gate
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; UndergroundPathEntranceRoute7
+ db (Music_Celadon - $4000) / 3
+ db BANK(Music_Celadon) ;FREEZE
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; Route8Gate
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; UndergroundPathEntranceRoute8
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; RockTunnelPokecenter
+ db (Music_Dungeon3 - $4000) / 3
+ db BANK(Music_Dungeon3) ; RockTunnel1
+ db (Music_Dungeon1 - $4000) / 3
+ db BANK(Music_Dungeon1) ; PowerPlant
+ db (Music_Vermilion - $4000) / 3
+ db BANK(Music_Vermilion) ; Route11Gate
+ db (Music_Dungeon2 - $4000) / 3
+ db BANK(Music_Dungeon2) ; DiglettsCaveEntranceRoute11
+ db (Music_Vermilion - $4000) / 3
+ db BANK(Music_Vermilion) ; Route11GateUpstairs
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; Route12Gate
+ db (Music_Cities2 - $4000) / 3
+ db BANK(Music_Cities2) ; BillsHouse
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; VermilionPokecenter
+ db (Music_Vermilion - $4000) / 3
+ db BANK(Music_Vermilion) ; FanClub
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; VermilionMart
+ db (Music_Gym - $4000) / 3
+ db BANK(Music_Gym) ; VermilionGym
+ db (Music_Vermilion - $4000) / 3
+ db BANK(Music_Vermilion) ; VermilionHouse1
+ db (Music_SSAnne - $4000) / 3
+ db BANK(Music_SSAnne) ; VermilionDock
+ db (Music_SSAnne - $4000) / 3
+ db BANK(Music_SSAnne) ; SSAnne1
+ db (Music_SSAnne - $4000) / 3
+ db BANK(Music_SSAnne) ; SSAnne2
+ db (Music_SSAnne - $4000) / 3
+ db BANK(Music_SSAnne) ; SSAnne3
+ db (Music_SSAnne - $4000) / 3
+ db BANK(Music_SSAnne) ; SSAnne4
+ db (Music_SSAnne - $4000) / 3
+ db BANK(Music_SSAnne) ; SSAnne5
+ db (Music_SSAnne - $4000) / 3
+ db BANK(Music_SSAnne) ; SSAnne6
+ db (Music_SSAnne - $4000) / 3
+ db BANK(Music_SSAnne) ; SSAnne7
+ db (Music_SSAnne - $4000) / 3
+ db BANK(Music_SSAnne) ; SSAnne8
+ db (Music_SSAnne - $4000) / 3
+ db BANK(Music_SSAnne) ; SSAnne9
+ db (Music_SSAnne - $4000) / 3
+ db BANK(Music_SSAnne) ; SSAnne10
+ db (Music_Dungeon2 - $4000) / 3
+ db BANK(Music_Dungeon2) ;unused
+ db (Music_Dungeon2 - $4000) / 3
+ db BANK(Music_Dungeon2) ;unused
+ db (Music_SSAnne - $4000) / 3
+ db BANK(Music_SSAnne) ;unused
+ db (Music_Dungeon3 - $4000) / 3
+ db BANK(Music_Dungeon3) ; VictoryRoad1
+ db (Music_PokemonTower - $4000) / 3
+ db BANK(Music_PokemonTower) ;unused
+ db (Music_Dungeon1 - $4000) / 3
+ db BANK(Music_Dungeon1) ;unused
+ db (Music_SilphCo - $4000) / 3
+ db BANK(Music_SilphCo) ;unused
+ db (Music_SilphCo - $4000) / 3
+ db BANK(Music_SilphCo) ;unused
+ db (Music_IndigoPlateau - $4000) / 3
+ db BANK(Music_IndigoPlateau) ; Lance
+ db (Music_SSAnne - $4000) / 3
+ db BANK(Music_SSAnne) ;unused
+ db (Music_SSAnne - $4000) / 3
+ db BANK(Music_SSAnne) ;unused
+ db (Music_SSAnne - $4000) / 3
+ db BANK(Music_SSAnne) ;unused
+ db (Music_SSAnne - $4000) / 3
+ db BANK(Music_SSAnne) ;unused
+ db (Music_PalletTown - $4000) / 3
+ db BANK(Music_PalletTown) ; HallofFameRoom
+ db (Music_Routes1 - $4000) / 3
+ db BANK(Music_Routes1) ; UndergroundPathNS
+ db (Music_IndigoPlateau - $4000) / 3
+ db BANK(Music_IndigoPlateau) ; Gary
+ db (Music_Routes1 - $4000) / 3
+ db BANK(Music_Routes1) ; UndergroundPathWE
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; CeladonMart1
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; CeladonMart2
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; CeladonMart3
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; CeladonMart4
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; CeladonMartRoof
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; CeladonMartElevator
+ db (Music_Celadon - $4000) / 3
+ db BANK(Music_Celadon) ; CeladonMansion1
+ db (Music_Celadon - $4000) / 3
+ db BANK(Music_Celadon) ; CeladonMansion2
+ db (Music_Celadon - $4000) / 3
+ db BANK(Music_Celadon) ; CeladonMansion3
+ db (Music_Celadon - $4000) / 3
+ db BANK(Music_Celadon) ; CeladonMansion4
+ db (Music_Celadon - $4000) / 3
+ db BANK(Music_Celadon) ; CeladonMansion5
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; CeladonPokecenter
+ db (Music_Gym - $4000) / 3
+ db BANK(Music_Gym) ; CeladonGym
+ db (Music_GameCorner - $4000) / 3
+ db BANK(Music_GameCorner) ; CeladonGameCorner
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; CeladonMart5
+ db (Music_Celadon - $4000) / 3
+ db BANK(Music_Celadon) ; CeladonPrizeRoom
+ db (Music_Celadon - $4000) / 3
+ db BANK(Music_Celadon) ; CeladonDiner
+ db (Music_Celadon - $4000) / 3
+ db BANK(Music_Celadon) ; CeladonHouse
+ db (Music_Celadon - $4000) / 3
+ db BANK(Music_Celadon) ; CeladonHotel
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; LavenderPokecenter
+ db (Music_PokemonTower - $4000) / 3
+ db BANK(Music_PokemonTower) ; PokemonTower1
+ db (Music_PokemonTower - $4000) / 3
+ db BANK(Music_PokemonTower) ; PokemonTower2
+ db (Music_PokemonTower - $4000) / 3
+ db BANK(Music_PokemonTower) ; PokemonTower3
+ db (Music_PokemonTower - $4000) / 3
+ db BANK(Music_PokemonTower) ; PokemonTower4
+ db (Music_PokemonTower - $4000) / 3
+ db BANK(Music_PokemonTower) ; PokemonTower5
+ db (Music_PokemonTower - $4000) / 3
+ db BANK(Music_PokemonTower) ; PokemonTower6
+ db (Music_PokemonTower - $4000) / 3
+ db BANK(Music_PokemonTower) ; PokemonTower7
+ db (Music_Lavender - $4000) / 3
+ db BANK(Music_Lavender) ; LavenderHouse1
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; LavenderMart
+ db (Music_Lavender - $4000) / 3
+ db BANK(Music_Lavender) ; LavenderHouse2
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; FuchsiaMart
+ db (Music_Cities2 - $4000) / 3
+ db BANK(Music_Cities2) ; FuchsiaHouse1
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; FuchsiaPokecenter
+ db (Music_Cities2 - $4000) / 3
+ db BANK(Music_Cities2) ; FuchsiaHouse2
+ db (Music_Cities2 - $4000) / 3
+ db BANK(Music_Cities2) ; SafariZoneEntrance
+ db (Music_Gym - $4000) / 3
+ db BANK(Music_Gym) ; FuchsiaGym
+ db (Music_Cities2 - $4000) / 3
+ db BANK(Music_Cities2) ; FuchsiaMeetingRoom
+ db (Music_Dungeon2 - $4000) / 3
+ db BANK(Music_Dungeon2) ; SeafoamIslands2
+ db (Music_Dungeon2 - $4000) / 3
+ db BANK(Music_Dungeon2) ; SeafoamIslands3
+ db (Music_Dungeon2 - $4000) / 3
+ db BANK(Music_Dungeon2) ; SeafoamIslands4
+ db (Music_Dungeon2 - $4000) / 3
+ db BANK(Music_Dungeon2) ; SeafoamIslands5
+ db (Music_Cities2 - $4000) / 3
+ db BANK(Music_Cities2) ; VermilionHouse2
+ db (Music_Cities2 - $4000) / 3
+ db BANK(Music_Cities2) ; FuchsiaHouse3
+ db (Music_CinnabarMansion - $4000) / 3
+ db BANK(Music_CinnabarMansion) ; Mansion1
+ db (Music_Gym - $4000) / 3
+ db BANK(Music_Gym) ; CinnabarGym
+ db (Music_Cinnabar - $4000) / 3
+ db BANK(Music_Cinnabar) ; Lab1
+ db (Music_Cinnabar - $4000) / 3
+ db BANK(Music_Cinnabar) ; Lab2
+ db (Music_Cinnabar - $4000) / 3
+ db BANK(Music_Cinnabar) ; Lab3
+ db (Music_Cinnabar - $4000) / 3
+ db BANK(Music_Cinnabar) ; Lab4
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; CinnabarPokecenter
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; CinnabarMart
+ db (Music_Cinnabar - $4000) / 3
+ db BANK(Music_Cinnabar)
+ db (Music_IndigoPlateau - $4000) / 3
+ db BANK(Music_IndigoPlateau) ; IndigoPlateauLobby
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; CopycatsHouseF1
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; CopycatsHouseF2
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; FightingDojo
+ db (Music_Gym - $4000) / 3
+ db BANK(Music_Gym) ; SaffronGym
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; SaffronHouse1
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; SaffronMart
+ db (Music_SilphCo - $4000) / 3
+ db BANK(Music_SilphCo) ; SilphCo1
+ db (Music_Pokecenter - $4000) / 3
+ db BANK(Music_Pokecenter) ; SaffronPokecenter
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; SaffronHouse2
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; Route15Gate
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; Route15GateUpstairs
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; Route16GateMap
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; Route16GateUpstairs
+ db (Music_Celadon - $4000) / 3
+ db BANK(Music_Celadon) ; Route16House
+ db (Music_Celadon - $4000) / 3
+ db BANK(Music_Celadon) ; Route12House
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; Route18Gate
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; Route18GateUpstairs
+ db (Music_Dungeon2 - $4000) / 3
+ db BANK(Music_Dungeon2) ; SeafoamIslands1
+ db (Music_Dungeon2 - $4000) / 3
+ db BANK(Music_Dungeon2) ; Route22Gate
+ db (Music_Dungeon3 - $4000) / 3
+ db BANK(Music_Dungeon3) ; VictoryRoad2
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; Route12GateUpstairs
+ db (Music_Vermilion - $4000) / 3
+ db BANK(Music_Vermilion) ; VermilionHouse3
+ db (Music_Dungeon2 - $4000) / 3
+ db BANK(Music_Dungeon2) ; DiglettsCave
+ db (Music_Dungeon3 - $4000) / 3
+ db BANK(Music_Dungeon3) ; VictoryRoad3
+ db (Music_Dungeon1 - $4000) / 3
+ db BANK(Music_Dungeon1) ; RocketHideout1
+ db (Music_Dungeon1 - $4000) / 3
+ db BANK(Music_Dungeon1) ; RocketHideout2
+ db (Music_Dungeon1 - $4000) / 3
+ db BANK(Music_Dungeon1) ; RocketHideout3
+ db (Music_Dungeon1 - $4000) / 3
+ db BANK(Music_Dungeon1) ; RocketHideout4
+ db (Music_Dungeon1 - $4000) / 3
+ db BANK(Music_Dungeon1) ; RocketHideoutElevator
+ db (Music_Dungeon1 - $4000) / 3
+ db BANK(Music_Dungeon1)
+ db (Music_Dungeon1 - $4000) / 3
+ db BANK(Music_Dungeon1)
+ db (Music_Dungeon1 - $4000) / 3
+ db BANK(Music_Dungeon1)
+ db (Music_SilphCo - $4000) / 3
+ db BANK(Music_SilphCo) ; SilphCo2
+ db (Music_SilphCo - $4000) / 3
+ db BANK(Music_SilphCo) ; SilphCo3
+ db (Music_SilphCo - $4000) / 3
+ db BANK(Music_SilphCo) ; SilphCo4
+ db (Music_SilphCo - $4000) / 3
+ db BANK(Music_SilphCo) ; SilphCo5
+ db (Music_SilphCo - $4000) / 3
+ db BANK(Music_SilphCo) ; SilphCo6
+ db (Music_SilphCo - $4000) / 3
+ db BANK(Music_SilphCo) ; SilphCo7
+ db (Music_SilphCo - $4000) / 3
+ db BANK(Music_SilphCo) ; SilphCo8
+ db (Music_CinnabarMansion - $4000) / 3
+ db BANK(Music_CinnabarMansion) ; Mansion2
+ db (Music_CinnabarMansion - $4000) / 3
+ db BANK(Music_CinnabarMansion) ; Mansion3
+ db (Music_CinnabarMansion - $4000) / 3
+ db BANK(Music_CinnabarMansion) ; Mansion4
+ db (Music_SafariZone - $4000) / 3
+ db BANK(Music_SafariZone) ; SafariZoneEast
+ db (Music_SafariZone - $4000) / 3
+ db BANK(Music_SafariZone) ; SafariZoneNorth
+ db (Music_SafariZone - $4000) / 3
+ db BANK(Music_SafariZone) ; SafariZoneWest
+ db (Music_SafariZone - $4000) / 3
+ db BANK(Music_SafariZone) ; SafariZoneCenter
+ db (Music_SafariZone - $4000) / 3
+ db BANK(Music_SafariZone) ; SafariZoneRestHouse1
+ db (Music_SafariZone - $4000) / 3
+ db BANK(Music_SafariZone) ; SafariZoneSecretHouse
+ db (Music_SafariZone - $4000) / 3
+ db BANK(Music_SafariZone) ; SafariZoneRestHouse2
+ db (Music_SafariZone - $4000) / 3
+ db BANK(Music_SafariZone) ; SafariZoneRestHouse3
+ db (Music_SafariZone - $4000) / 3
+ db BANK(Music_SafariZone) ; SafariZoneRestHouse4
+ db (Music_Dungeon1 - $4000) / 3
+ db BANK(Music_Dungeon1) ; UnknownDungeon2
+ db (Music_Dungeon1 - $4000) / 3
+ db BANK(Music_Dungeon1) ; UnknownDungeon3
+ db (Music_Dungeon1 - $4000) / 3
+ db BANK(Music_Dungeon1) ; UnknownDungeon1
+ db (Music_Cities2 - $4000) / 3
+ db BANK(Music_Cities2) ; NameRater
+ db (Music_Cities1 - $4000) / 3
+ db BANK(Music_Cities1) ; CeruleanHouse2
+ db (Music_Cinnabar - $4000) / 3
+ db BANK(Music_Cinnabar)
+ db (Music_Dungeon3 - $4000) / 3
+ db BANK(Music_Dungeon3) ; RockTunnel2
+ db (Music_SilphCo - $4000) / 3
+ db BANK(Music_SilphCo) ; SilphCo9
+ db (Music_SilphCo - $4000) / 3
+ db BANK(Music_SilphCo) ; SilphCo10
+ db (Music_SilphCo - $4000) / 3
+ db BANK(Music_SilphCo) ; SilphCo11
+ db (Music_SilphCo - $4000) / 3
+ db BANK(Music_SilphCo) ; SilphCoElevator
+ db (Music_SilphCo - $4000) / 3
+ db BANK(Music_SilphCo)
+ db (Music_SilphCo - $4000) / 3
+ db BANK(Music_SilphCo)
+ db (Music_Celadon - $4000) / 3
+ db BANK(Music_Celadon) ; BattleCenterM
+ db (Music_Celadon - $4000) / 3
+ db BANK(Music_Celadon) ; TradeCenterM
+ db (Music_SilphCo - $4000) / 3
+ db BANK(Music_SilphCo)
+ db (Music_SilphCo - $4000) / 3
+ db BANK(Music_SilphCo)
+ db (Music_SilphCo - $4000) / 3
+ db BANK(Music_SilphCo)
+ db (Music_SilphCo - $4000) / 3
+ db BANK(Music_SilphCo)
+ db (Music_Gym - $4000) / 3
+ db BANK(Music_Gym) ; Lorelei
+ db (Music_Dungeon1 - $4000) / 3
+ db BANK(Music_Dungeon1) ; Bruno
+ db (Music_PokemonTower - $4000) / 3
+ db BANK(Music_PokemonTower) ; Agatha
; see also MapHeaderPointers
MapHeaderBanks: ; c23d (3:423d)
@@ -25627,8 +27833,8 @@ ItemUsePokeflute: ; e140 (3:6140)
and a,$80
jr nz,.skipMusic
call WaitForSoundToFinish ; wait for sound to end
- ld b, BANK(Func_22306)
- ld hl, Func_22306
+ ld b, BANK(Music_PokeFluteInBattle)
+ ld hl, Music_PokeFluteInBattle
call Bankswitch ; play in-battle pokeflute music
.musicWaitLoop ; wait for music to finish playing
ld a,[$c02c]
@@ -25700,8 +27906,8 @@ PlayedFluteHadEffectText: ; e215 (3:6215)
; play out-of-battle pokeflute music
ld a,$ff
call PlaySound ; turn off music
- ld a,$b8
- ld c,$02
+ ld a, (SFX_02_5e - $4000) / 3
+ ld c, BANK(SFX_02_5e)
call PlayMusic ; play music
.musicWaitLoop ; wait for music to finish playing
ld a,[$c028]
@@ -33494,9 +35700,9 @@ PalletTownScript1: ; 18e81 (6:4e81)
ld [$D528],a
ld a,$FF
call PlaySound ; stop music
- ld a,2
+ ld a, BANK(Music_MeetProfOak)
ld c,a ; song bank
- ld a,$DB ; “oak appears” music
+ ld a, (Music_MeetProfOak - $4000) / 3 ; “oak appears” music
call PlayMusic ; plays music
ld a,$FC
ld [W_JOYPADFORBIDDENBUTTONSMASK],a
@@ -34388,8 +36594,8 @@ CeruleanCityScript0: ; 194c8 (6:54c8)
ld [$c0ee], a
call PlaySound
.asm_19512
- ld c, $2
- ld a, $de
+ ld c, BANK(Music_MeetRival)
+ ld a, (Music_MeetRival - $4000) / 3
call PlayMusic
xor a
ld [H_CURRENTPRESSEDBUTTONS], a
@@ -34493,8 +36699,8 @@ CeruleanCityScript2: ; 195b1 (6:55b1)
ld a, $ff
ld [$c0ee], a
call PlaySound
- ld b, BANK(Func_9b47)
- ld hl, Func_9b47
+ ld b, BANK(Music_RivalAlternateStart)
+ ld hl, Music_RivalAlternateStart
call Bankswitch
ld a, $1
ld [$ff00+$8c], a
@@ -37508,8 +39714,8 @@ OaksLabScript10: ; 1cd6d (7:4d6d)
call Func_34a6 ; face object
ld a, $8
ld [$d528], a
- ld c, $2
- ld a, $de
+ ld c, BANK(Music_MeetRival)
+ ld a, (Music_MeetRival - $4000) / 3
call PlayMusic ; play music
ld a, $f
ld [$ff00+$8c], a
@@ -37604,8 +39810,8 @@ OaksLabScript13: ; 1ce32 (7:4e32)
ld a, $10
ld [$ff00+$8c], a
call DisplayTextID
- ld b, BANK(Func_9b47)
- ld hl, Func_9b47
+ ld b, BANK(Music_RivalAlternateStart)
+ ld hl, Music_RivalAlternateStart
call Bankswitch
ld a, $1
ld [$ff00+$8c], a
@@ -37672,8 +39878,8 @@ OaksLabScript15: ; 1ceb0 (7:4eb0)
ld a, $ff
ld [$c0ee], a
call PlaySound
- ld b, BANK(Func_9b47)
- ld hl, Func_9b47
+ ld b, BANK(Music_RivalAlternateStart)
+ ld hl, Music_RivalAlternateStart
call Bankswitch
ld a, $15
ld [$ff00+$8c], a
@@ -37782,8 +39988,8 @@ OaksLabScript16: ; 1cf12 (7:4f12)
ld a, $ff
ld [$c0ee], a
call PlaySound
- ld b, BANK(Func_9b47)
- ld hl, Func_9b47
+ ld b, BANK(Music_RivalAlternateStart)
+ ld hl, Music_RivalAlternateStart
call Bankswitch
ld a, $1
ld [$ff00+$8c], a
@@ -39451,8 +41657,8 @@ VermilionDock_1db9b: ; 1db9b (7:5b9b)
ld [W_JOYPADFORBIDDENBUTTONSMASK], a
ld [$c0ee], a
call PlaySound
- ld c, $1f
- ld a, $d6
+ ld c, BANK(Music_Surfing)
+ ld a, (Music_Surfing - $4000) / 3
call PlayMusic
ld b, BANK(Func_79fc0)
ld hl, Func_79fc0
@@ -41210,11 +43416,11 @@ asm_1e9ab: ; 1e9ab (7:69ab)
asm_1e9b0: ; 1e9b0 (7:69b0)
call EnableAutoTextBoxDrawing
xor a
- ld [$cfc7], a
+ ld [W_CURCHANNELPOINTER], a
dec a
call PlaySound
- ld c, $2
- ld a, $b9
+ ld c, BANK(SFX_02_5f)
+ ld a, (SFX_02_5f - $4000) / 3
call PlayMusic
.asm_1e9c2
ld a, [$c02a]
@@ -41611,14 +43817,154 @@ UnnamedText_1ecbd: ; 1ecbd (7:6cbd)
SECTION "bank8",ROMX,BANK[$8]
-Unknown_20000: ; 20000 (8:4000)
-INCBIN "baserom.gbc",$20000,$20361 - $20000
-
-Unknown_20361: ; 20361 (8:4361)
-INCBIN "baserom.gbc",$20361,$2049b - $20361
-
-Unknown_2049b: ; 2049b (8:449b)
-INCBIN "baserom.gbc",$2049b,$2136e - $2049b
+INCLUDE "music/headers/sfxheaders08.tx"
+INCLUDE "music/headers/musicheaders08.tx"
+
+INCLUDE "music/sfx/sfx_08_01.tx"
+INCLUDE "music/sfx/sfx_08_02.tx"
+INCLUDE "music/sfx/sfx_08_03.tx"
+INCLUDE "music/sfx/sfx_08_04.tx"
+INCLUDE "music/sfx/sfx_08_05.tx"
+INCLUDE "music/sfx/sfx_08_06.tx"
+INCLUDE "music/sfx/sfx_08_07.tx"
+INCLUDE "music/sfx/sfx_08_08.tx"
+INCLUDE "music/sfx/sfx_08_09.tx"
+INCLUDE "music/sfx/sfx_08_0a.tx"
+INCLUDE "music/sfx/sfx_08_0b.tx"
+INCLUDE "music/sfx/sfx_08_0c.tx"
+INCLUDE "music/sfx/sfx_08_0d.tx"
+INCLUDE "music/sfx/sfx_08_0e.tx"
+INCLUDE "music/sfx/sfx_08_0f.tx"
+INCLUDE "music/sfx/sfx_08_10.tx"
+INCLUDE "music/sfx/sfx_08_11.tx"
+INCLUDE "music/sfx/sfx_08_12.tx"
+INCLUDE "music/sfx/sfx_08_13.tx"
+
+Music8_Channel3DutyPointers: ; 20361 (1f:4361)
+ dw Music8_Channel3Duty1
+ dw Music8_Channel3Duty2
+ dw Music8_Channel3Duty3
+ dw Music8_Channel3Duty4
+ dw Music8_Channel3Duty5
+ dw SFX_08_40_Ch1 ; unused
+ dw SFX_08_40_Ch1 ; unused
+ dw SFX_08_40_Ch1 ; unused
+ dw SFX_08_40_Ch1 ; unused
+
+Music8_Channel3Duty1: ; 20373 (8:4373)
+ db $02,$46,$8A,$CE,$FF,$FE,$ED,$DC,$CB,$A9,$87,$65,$44,$33,$22,$11
+
+Music8_Channel3Duty2: ; 20383 (8:4383)
+ db $02,$46,$8A,$CE,$EF,$FF,$FE,$EE,$DD,$CB,$A9,$87,$65,$43,$22,$11
+
+Music8_Channel3Duty3: ; 20393 (8:4393)
+ db $13,$69,$BD,$EE,$EE,$FF,$FF,$ED,$DE,$FF,$FF,$EE,$EE,$DB,$96,$31
+
+Music8_Channel3Duty4: ; 203a3 (8:43a3)
+ db $02,$46,$8A,$CD,$EF,$FE,$DE,$FF,$EE,$DC,$BA,$98,$76,$54,$32,$10
+
+Music8_Channel3Duty5: ; 203b3 (8:43b3)
+ db $01,$23,$45,$67,$8A,$CD,$EE,$F7,$7F,$EE,$DC,$A8,$76,$54,$32,$10
+
+INCLUDE "music/sfx/sfx_08_40.tx"
+INCLUDE "music/sfx/sfx_08_3f.tx"
+INCLUDE "music/sfx/sfx_08_3c.tx"
+INCLUDE "music/sfx/sfx_08_3d.tx"
+INCLUDE "music/sfx/sfx_08_3e.tx"
+INCLUDE "music/sfx/sfx_08_77.tx"
+INCLUDE "music/sfx/sfx_08_41.tx"
+INCLUDE "music/sfx/sfx_08_42.tx"
+INCLUDE "music/sfx/sfx_08_43.tx"
+INCLUDE "music/sfx/sfx_08_44.tx"
+INCLUDE "music/sfx/sfx_08_45.tx"
+INCLUDE "music/sfx/sfx_08_pokeflute_ch3.tx"
+INCLUDE "music/sfx/sfx_08_47.tx"
+INCLUDE "music/sfx/sfx_08_48.tx"
+INCLUDE "music/sfx/sfx_08_49.tx"
+INCLUDE "music/sfx/sfx_08_4a.tx"
+INCLUDE "music/sfx/sfx_08_4b.tx"
+INCLUDE "music/sfx/sfx_08_4c.tx"
+INCLUDE "music/sfx/sfx_08_4d.tx"
+INCLUDE "music/sfx/sfx_08_4e.tx"
+INCLUDE "music/sfx/sfx_08_4f.tx"
+INCLUDE "music/sfx/sfx_08_50.tx"
+INCLUDE "music/sfx/sfx_08_51.tx"
+INCLUDE "music/sfx/sfx_08_52.tx"
+INCLUDE "music/sfx/sfx_08_53.tx"
+INCLUDE "music/sfx/sfx_08_54.tx"
+INCLUDE "music/sfx/sfx_08_55.tx"
+INCLUDE "music/sfx/sfx_08_56.tx"
+INCLUDE "music/sfx/sfx_08_57.tx"
+INCLUDE "music/sfx/sfx_08_58.tx"
+INCLUDE "music/sfx/sfx_08_59.tx"
+INCLUDE "music/sfx/sfx_08_5a.tx"
+INCLUDE "music/sfx/sfx_08_5b.tx"
+INCLUDE "music/sfx/sfx_08_5c.tx"
+INCLUDE "music/sfx/sfx_08_5d.tx"
+INCLUDE "music/sfx/sfx_08_5e.tx"
+INCLUDE "music/sfx/sfx_08_5f.tx"
+INCLUDE "music/sfx/sfx_08_60.tx"
+INCLUDE "music/sfx/sfx_08_61.tx"
+INCLUDE "music/sfx/sfx_08_62.tx"
+INCLUDE "music/sfx/sfx_08_63.tx"
+INCLUDE "music/sfx/sfx_08_64.tx"
+INCLUDE "music/sfx/sfx_08_65.tx"
+INCLUDE "music/sfx/sfx_08_66.tx"
+INCLUDE "music/sfx/sfx_08_67.tx"
+INCLUDE "music/sfx/sfx_08_68.tx"
+INCLUDE "music/sfx/sfx_08_69.tx"
+INCLUDE "music/sfx/sfx_08_6a.tx"
+INCLUDE "music/sfx/sfx_08_6b.tx"
+INCLUDE "music/sfx/sfx_08_6c.tx"
+INCLUDE "music/sfx/sfx_08_6d.tx"
+INCLUDE "music/sfx/sfx_08_6e.tx"
+INCLUDE "music/sfx/sfx_08_6f.tx"
+INCLUDE "music/sfx/sfx_08_70.tx"
+INCLUDE "music/sfx/sfx_08_71.tx"
+INCLUDE "music/sfx/sfx_08_72.tx"
+INCLUDE "music/sfx/sfx_08_73.tx"
+INCLUDE "music/sfx/sfx_08_74.tx"
+INCLUDE "music/sfx/sfx_08_75.tx"
+INCLUDE "music/sfx/sfx_08_76.tx"
+INCLUDE "music/sfx/sfx_08_unused.tx"
+INCLUDE "music/sfx/sfx_08_1d.tx"
+INCLUDE "music/sfx/sfx_08_37.tx"
+INCLUDE "music/sfx/sfx_08_38.tx"
+INCLUDE "music/sfx/sfx_08_25.tx"
+INCLUDE "music/sfx/sfx_08_39.tx"
+INCLUDE "music/sfx/sfx_08_17.tx"
+INCLUDE "music/sfx/sfx_08_23.tx"
+INCLUDE "music/sfx/sfx_08_24.tx"
+INCLUDE "music/sfx/sfx_08_14.tx"
+INCLUDE "music/sfx/sfx_08_22.tx"
+INCLUDE "music/sfx/sfx_08_1a.tx"
+INCLUDE "music/sfx/sfx_08_1b.tx"
+INCLUDE "music/sfx/sfx_08_19.tx"
+INCLUDE "music/sfx/sfx_08_1f.tx"
+INCLUDE "music/sfx/sfx_08_20.tx"
+INCLUDE "music/sfx/sfx_08_16.tx"
+INCLUDE "music/sfx/sfx_08_21.tx"
+INCLUDE "music/sfx/sfx_08_15.tx"
+INCLUDE "music/sfx/sfx_08_1e.tx"
+INCLUDE "music/sfx/sfx_08_1c.tx"
+INCLUDE "music/sfx/sfx_08_18.tx"
+INCLUDE "music/sfx/sfx_08_2d.tx"
+INCLUDE "music/sfx/sfx_08_2a.tx"
+INCLUDE "music/sfx/sfx_08_2f.tx"
+INCLUDE "music/sfx/sfx_08_26.tx"
+INCLUDE "music/sfx/sfx_08_27.tx"
+INCLUDE "music/sfx/sfx_08_28.tx"
+INCLUDE "music/sfx/sfx_08_32.tx"
+INCLUDE "music/sfx/sfx_08_29.tx"
+INCLUDE "music/sfx/sfx_08_2b.tx"
+INCLUDE "music/sfx/sfx_08_30.tx"
+INCLUDE "music/sfx/sfx_08_2e.tx"
+INCLUDE "music/sfx/sfx_08_31.tx"
+INCLUDE "music/sfx/sfx_08_2c.tx"
+INCLUDE "music/sfx/sfx_08_33.tx"
+INCLUDE "music/sfx/sfx_08_34.tx"
+INCLUDE "music/sfx/sfx_08_35.tx"
+INCLUDE "music/sfx/sfx_08_36.tx"
Func_2136e: ; 2136e (8:536e)
ld a, [$d083]
@@ -41671,13 +44017,13 @@ asm_213af: ; 213af (8:53af)
ret
Unknown_213bc: ; 213bc (8:53bc)
-INCBIN "baserom.gbc",$213bc,$213c0 - $213bc
+ db $A0,$E2,$50,$87
Unknown_213c0: ; 213c0 (8:53c0)
-INCBIN "baserom.gbc",$213c0,$213c4 - $213c0
+ db $B0,$E2,$EE,$86
Unknown_213c4: ; 213c4 (8:53c4)
-INCBIN "baserom.gbc",$213c4,$213c8 - $213c4
+ db $00,$00,$00,$80
Func_213c8: ; 213c8 (8:53c8)
xor a
@@ -42261,22 +44607,22 @@ UnnamedText_21865: ; 21865 (8:5865)
INCBIN "baserom.gbc",$21878,$21879 - $21878
Func_21879: ; 21879 (8:5879)
- ld c, $0
-.asm_2187b
+ ld c, CH0
+.loop
ld b, $0
ld hl, $c026
add hl, bc
ld a, [hl]
and a
- jr z, .asm_218a7
+ jr z, .nextChannel
ld a, c
- cp $4
- jr nc, .asm_218a4
+ cp CH4
+ jr nc, .applyAffects ; if sfx channel
ld a, [$c002]
and a
- jr z, .asm_218a4
+ jr z, .applyAffects
bit 7, a
- jr nz, .asm_218a7
+ jr nz, .nextChannel
set 7, a
ld [$c002], a
xor a
@@ -42284,122 +44630,130 @@ Func_21879: ; 21879 (8:5879)
ld [$FF00+$1a], a
ld a, $80
ld [$FF00+$1a], a
- jr .asm_218a7
-.asm_218a4
- call Func_218ae
-.asm_218a7
+ jr .nextChannel
+.applyAffects
+ call Music8_ApplyMusicAffects
+.nextChannel
ld a, c
inc c
- cp $7
- jr nz, .asm_2187b
+ cp CH7
+ jr nz, .loop
ret
-; known jump sources: 218a4 (8:58a4)
-Func_218ae: ; 218ae (8:58ae)
+; this routine checks flags for music effects currently applied
+; to the channel and calls certain functions based on flags.
+; known flags for $c02e:
+; 1: call has been used
+; 3: a toggle used only by this routine for vibrato
+; 4: pitchbend flag
+; 6: dutycycle flag
+Music8_ApplyMusicAffects: ; 218ae (8:58ae)
ld b, $0
- ld hl, $c0b6
+ ld hl, $c0b6 ; delay unitl next note
add hl, bc
ld a, [hl]
- cp $1
- jp z, Func_21946
- dec a
+ cp $1 ; if the delay is 1, play next note
+ jp z, Music8_PlayNextNote
+ dec a ; otherwise, decrease the delay timer
ld [hl], a
ld a, c
- cp $4
- jr nc, .asm_218ca
+ cp CH4
+ jr nc, .startChecks ; if a sfx channel
ld hl, $c02a
add hl, bc
ld a, [hl]
and a
- jr z, .asm_218ca
+ jr z, .startChecks
ret
-.asm_218ca
+.startChecks
ld hl, $c02e
add hl, bc
- bit 6, [hl]
- jr z, .asm_218d5
- call Func_21fcc
-.asm_218d5
+ bit 6, [hl] ; dutycycle
+ jr z, .checkForExecuteMusic
+ call Music8_ApplyDutyCycle
+.checkForExecuteMusic
ld b, $0
ld hl, $c036
add hl, bc
bit 0, [hl]
- jr nz, .asm_218e7
+ jr nz, .checkForPitchBend
ld hl, $c02e
add hl, bc
bit 2, [hl]
- jr nz, .asm_218fb
-.asm_218e7
+ jr nz, .disablePitchBendVibrato
+.checkForPitchBend
ld hl, $c02e
add hl, bc
- bit 4, [hl]
- jr z, .asm_218f2
- jp Func_21eb8
-.asm_218f2
- ld hl, $c04e
+ bit 4, [hl] ; pitchbend
+ jr z, .checkVibratoDelay
+ jp Music8_ApplyPitchBend
+.checkVibratoDelay
+ ld hl, $c04e ; vibrato delay
add hl, bc
ld a, [hl]
- and a
- jr z, .asm_218fc
- dec [hl]
-.asm_218fb
+ and a ; check if delay is over
+ jr z, .checkForVibrato
+ dec [hl] ; otherwise, dec delay
+.disablePitchBendVibrato
ret
-.asm_218fc
- ld hl, $c056
+.checkForVibrato
+ ld hl, $c056 ; vibrato rate
add hl, bc
ld a, [hl]
and a
- jr nz, .asm_21905
- ret
-.asm_21905
+ jr nz, .vibrato
+ ret ; no vibrato
+.vibrato
ld d, a
ld hl, $c05e
add hl, bc
ld a, [hl]
and $f
and a
- jr z, .asm_21912
- dec [hl]
+ jr z, .vibratoAlreadyDone
+ dec [hl] ; apply vibrato pitch change
ret
-.asm_21912
+.vibratoAlreadyDone
ld a, [hl]
swap [hl]
or [hl]
- ld [hl], a
+ ld [hl], a ; reset the vibrato value and start again
ld hl, $c066
add hl, bc
- ld e, [hl]
+ ld e, [hl] ; get note pitch
ld hl, $c02e
add hl, bc
- bit 3, [hl]
- jr z, .asm_21932
+ bit 3, [hl] ; this is the only code that sets/resets bit three so
+ jr z, .unset ; it continuously alternates which path it takes
res 3, [hl]
ld a, d
and $f
ld d, a
ld a, e
sub d
- jr nc, .asm_21930
+ jr nc, .noCarry
ld a, $0
-.asm_21930
- jr .asm_2193e
-.asm_21932
+.noCarry
+ jr .done
+.unset
set 3, [hl]
ld a, d
and $f0
swap a
add e
- jr nc, .asm_2193e
+ jr nc, .done
ld a, $ff
-.asm_2193e
+.done
ld d, a
ld b, $3
call Func_21ff7
ld [hl], d
ret
-; known jump sources: 218b7 (8:58b7)
-Func_21946: ; 21946 (8:5946)
+; this routine executes all music commands that take up no time,
+; like tempo changes, duty changes etc. and doesn't return
+; until the first note is reached
+Music8_PlayNextNote: ; 21946 (8:5946)
ld hl, $c06e
add hl, bc
ld a, [hl]
@@ -42411,42 +44765,41 @@ Func_21946: ; 21946 (8:5946)
res 4, [hl]
res 5, [hl]
ld a, c
- cp $4
- jr nz, .asm_21963
+ cp CH4
+ jr nz, .beginChecks
ld a, [$d083]
bit 7, a
ret nz
-.asm_21963
- call Func_21967
+.beginChecks
+ call Music8_endchannel
ret
-; known jump sources: 21963 (8:5963), 219bd (8:59bd), 21a27 (8:5a27), 21a49 (8:5a49), 21a62 (8:5a62), 21aa1 (8:5aa1), 21ab3 (8:5ab3), 21aeb (8:5aeb), 21b38 (8:5b38), 21b78 (8:5b78), 21b85 (8:5b85), 21ba4 (8:5ba4), 21bc2 (8:5bc2), 21bce (8:5bce), 21bdd (8:5bdd), 21bf0 (8:5bf0), 21c59 (8:5c59)
-Func_21967: ; 21967 (8:5967)
- call Func_21fe4
+Music8_endchannel: ; 21967 (8:5967)
+ call Music8_GetNextMusicByte
ld d, a
- cp $ff
- jp nz, Func_219f5
- ld b, $0
+ cp $ff ; is this command an endchannel?
+ jp nz, Music8_callchannel ; no
+ ld b, $0 ; yes
ld hl, $c02e
add hl, bc
bit 1, [hl]
- jr nz, .asm_219a5
+ jr nz, .returnFromCall
ld a, c
- cp $3
- jr nc, .asm_21981
+ cp CH3
+ jr nc, .noiseOrSfxChannel
jr .asm_219c0
-.asm_21981
+.noiseOrSfxChannel
res 2, [hl]
ld hl, $c036
add hl, bc
res 0, [hl]
- cp $6
- jr nz, .asm_21995
+ cp CH6
+ jr nz, .notSfxChannel3
ld a, $0
ld [$FF00+$1a], a
ld a, $80
ld [$FF00+$1a], a
-.asm_21995
+.notSfxChannel3
jr nz, .asm_219a3
ld a, [$c003]
and a
@@ -42456,7 +44809,7 @@ Func_21967: ; 21967 (8:5967)
jr .asm_219c0
.asm_219a3
jr .asm_219c9
-.asm_219a5
+.returnFromCall
res 1, [hl]
ld d, $0
ld a, c
@@ -42464,7 +44817,7 @@ Func_21967: ; 21967 (8:5967)
ld e, a
ld hl, $c006
add hl, de
- push hl
+ push hl ; store current channel address
ld hl, $c016
add hl, de
ld e, l
@@ -42474,10 +44827,10 @@ Func_21967: ; 21967 (8:5967)
ld [hli], a
inc de
ld a, [de]
- ld [hl], a
- jp Func_21967
+ ld [hl], a ; loads channel address to return to
+ jp Music8_endchannel
.asm_219c0
- ld hl, Unknown_222de ; $62de
+ ld hl, Unknown_222de
add hl, bc
ld a, [$FF00+$25]
and [hl]
@@ -42495,7 +44848,7 @@ Func_21967: ; 21967 (8:5967)
jr .asm_219ef
.asm_219dd
ld a, c
- cp $4
+ cp CH4
jr z, .asm_219e6
call Func_21e6d
ret c
@@ -42510,17 +44863,16 @@ Func_21967: ; 21967 (8:5967)
ld [hl], b
ret
-; known jump sources: 2196d (8:596d)
-Func_219f5: ; 219f5 (8:59f5)
- cp $fd
- jp nz, Func_21a2a
- call Func_21fe4
+Music8_callchannel: ; 219f5 (8:59f5)
+ cp $fd ; is this command a callchannel?
+ jp nz, Music8_loopchannel ; no
+ call Music8_GetNextMusicByte ; yes
push af
- call Func_21fe4
+ call Music8_GetNextMusicByte
ld d, a
pop af
ld e, a
- push de
+ push de ; store pointer
ld d, $0
ld a, c
add a
@@ -42537,43 +44889,43 @@ Func_219f5: ; 219f5 (8:59f5)
ld [de], a
inc de
ld a, [hld]
- ld [de], a
+ ld [de], a ; copy current channel address
pop de
ld [hl], e
inc hl
- ld [hl], d
+ ld [hl], d ; overwrite current address with pointer
ld b, $0
ld hl, $c02e
add hl, bc
- set 1, [hl]
- jp Func_21967
+ set 1, [hl] ; set the call flag
+ jp Music8_endchannel
-; known jump sources: 219f7 (8:59f7)
-Func_21a2a: ; 21a2a (8:5a2a)
- cp $fe
- jp nz, Func_21a65
- call Func_21fe4
+Music8_loopchannel: ; 21a2a (8:5a2a)
+ cp $fe ; is this command a loopchannel?
+ jp nz, Music8_notetype ; no
+ call Music8_GetNextMusicByte ; yes
ld e, a
and a
- jr z, .asm_21a4e
+ jr z, .infiniteLoop
ld b, $0
ld hl, $c0be
add hl, bc
ld a, [hl]
cp e
- jr nz, .asm_21a4c
- ld a, $1
+ jr nz, .loopAgain
+ ld a, $1 ; if no more loops to make,
ld [hl], a
- call Func_21fe4
- call Func_21fe4
- jp Func_21967
-.asm_21a4c
+ call Music8_GetNextMusicByte ; skip pointer
+ call Music8_GetNextMusicByte
+ jp Music8_endchannel
+.loopAgain ; inc loop count
inc a
ld [hl], a
-.asm_21a4e
- call Func_21fe4
+ ; fall through
+.infiniteLoop ; overwrite current address with pointer
+ call Music8_GetNextMusicByte
push af
- call Func_21fe4
+ call Music8_GetNextMusicByte
ld b, a
ld d, $0
ld a, c
@@ -42584,73 +44936,76 @@ Func_21a2a: ; 21a2a (8:5a2a)
pop af
ld [hli], a
ld [hl], b
- jp Func_21967
+ jp Music8_endchannel
-; known jump sources: 21a2c (8:5a2c)
-Func_21a65: ; 21a65 (8:5a65)
+Music8_notetype: ; 21a65 (8:5a65)
and $f0
- cp $d0
- jp nz, Func_21aa4
- ld a, d
+ cp $d0 ; is this command a notetype?
+ jp nz, Music8_togglecall ; no
+ ld a, d ; yes
and $f
ld b, $0
ld hl, $c0c6
add hl, bc
- ld [hl], a
+ ld [hl], a ; store low nibble as speed
ld a, c
- cp $3
- jr z, .asm_21aa1
- call Func_21fe4
+ cp CH3
+ jr z, .noiseChannel ; noise channel has 0 params
+ call Music8_GetNextMusicByte
ld d, a
ld a, c
- cp $2
- jr z, .asm_21a8d
- cp $6
- jr nz, .asm_21a9a
+ cp CH2
+ jr z, .musicChannel3
+ cp CH6
+ jr nz, .notChannel3
ld hl, $c0e7
- jr .asm_21a90
-.asm_21a8d
+ jr .sfxChannel3
+.musicChannel3
ld hl, $c0e6
-.asm_21a90
+.sfxChannel3
ld a, d
and $f
- ld [hl], a
+ ld [hl], a ; store low nibble of param as duty
ld a, d
and $30
sla a
ld d, a
-.asm_21a9a
+ ; fall through
+
+ ; if channel 3, store high nibble as volume
+ ; else, store volume (high nibble) and fade (low nibble)
+.notChannel3
ld b, $0
ld hl, $c0de
add hl, bc
ld [hl], d
-.asm_21aa1
- jp Func_21967
+.noiseChannel
+ jp Music8_endchannel
-; known jump sources: 21a69 (8:5a69)
-Func_21aa4: ; 21aa4 (8:5aa4)
+Music8_togglecall: ; 21aa4 (8:5aa4)
ld a, d
- cp $e8
- jr nz, .asm_21ab6
- ld b, $0
+ cp $e8 ; is this command an togglecall?
+ jr nz, Music8_vibrato ; no
+ ld b, $0 ; yes
ld hl, $c02e
add hl, bc
ld a, [hl]
xor $1
- ld [hl], a
- jp Func_21967
-.asm_21ab6
- cp $ea
- jr nz, .asm_21aee
- call Func_21fe4
+ ld [hl], a ; flip bit 0 of $c02e (toggle returning from call)
+ jp Music8_endchannel
+
+Music8_vibrato: ; 21ab6 (8:5ab6)
+ cp $ea ; is this command a vibrato?
+ jr nz, Music8_pitchbend ; no
+ call Music8_GetNextMusicByte ; yes
ld b, $0
ld hl, $c04e
add hl, bc
- ld [hl], a
+ ld [hl], a ; store delay
ld hl, $c06e
add hl, bc
- ld [hl], a
- call Func_21fe4
+ ld [hl], a ; store delay
+ call Music8_GetNextMusicByte
ld d, a
and $f0
swap a
@@ -42662,7 +45017,7 @@ Func_21aa4: ; 21aa4 (8:5aa4)
adc b
swap a
or e
- ld [hl], a
+ ld [hl], a ; store rate as both high and low nibbles
ld a, d
and $f
ld d, a
@@ -42670,17 +45025,18 @@ Func_21aa4: ; 21aa4 (8:5aa4)
add hl, bc
swap a
or d
- ld [hl], a
- jp Func_21967
-.asm_21aee
- cp $eb
- jr nz, .asm_21b26
- call Func_21fe4
+ ld [hl], a ; store depth as both high and low nibbles
+ jp Music8_endchannel
+
+Music8_pitchbend: ; 21aee (8:5aee)
+ cp $eb ; is this command a pitchbend?
+ jr nz, Music8_duty ; no
+ call Music8_GetNextMusicByte ; yes
ld b, $0
ld hl, $c076
add hl, bc
- ld [hl], a
- call Func_21fe4
+ ld [hl], a ; store first param
+ call Music8_GetNextMusicByte
ld d, a
and $f0
swap a
@@ -42691,132 +45047,142 @@ Func_21aa4: ; 21aa4 (8:5aa4)
ld b, $0
ld hl, $c0a6
add hl, bc
- ld [hl], d
+ ld [hl], d ; store unknown part of second param
ld hl, $c0ae
add hl, bc
- ld [hl], e
+ ld [hl], e ; store unknown part of second param
ld b, $0
ld hl, $c02e
add hl, bc
- set 4, [hl]
- call Func_21fe4
+ set 4, [hl] ; set pitchbend flag
+ call Music8_GetNextMusicByte
ld d, a
- jp Func_21c8b
-.asm_21b26
- cp $ec
- jr nz, .asm_21b3b
- call Func_21fe4
+ jp Music8_notelength
+
+Music8_duty: ; 21b26 (8:5b26)
+ cp $ec ; is this command a duty?
+ jr nz, Music8_tempo ; no
+ call Music8_GetNextMusicByte ; yes
rrca
rrca
and $c0
ld b, $0
ld hl, $c03e
add hl, bc
- ld [hl], a
- jp Func_21967
-.asm_21b3b
- cp $ed
- jr nz, .asm_21b7b
- ld a, c
- cp $4
- jr nc, .asm_21b5f
- call Func_21fe4
- ld [$c0e8], a
- call Func_21fe4
- ld [$c0e9], a
- xor a
- ld [$c0ce], a
+ ld [hl], a ; store duty
+ jp Music8_endchannel
+
+Music8_tempo: ; 21b3b (8:5b3b)
+ cp $ed ; is this command a tempo?
+ jr nz, Music8_unknownmusic0xee ; no
+ ld a, c ; yes
+ cp CH4
+ jr nc, .sfxChannel
+ call Music8_GetNextMusicByte
+ ld [$c0e8], a ; store first param
+ call Music8_GetNextMusicByte
+ ld [$c0e9], a ; store second param
+ xor a
+ ld [$c0ce], a ; clear RAM
ld [$c0cf], a
ld [$c0d0], a
ld [$c0d1], a
- jr .asm_21b78
-.asm_21b5f
- call Func_21fe4
- ld [$c0ea], a
- call Func_21fe4
- ld [$c0eb], a
- xor a
- ld [$c0d2], a
+ jr .musicChannelDone
+.sfxChannel
+ call Music8_GetNextMusicByte
+ ld [$c0ea], a ; store first param
+ call Music8_GetNextMusicByte
+ ld [$c0eb], a ; store second param
+ xor a
+ ld [$c0d2], a ; clear RAM
ld [$c0d3], a
ld [$c0d4], a
ld [$c0d5], a
-.asm_21b78
- jp Func_21967
-.asm_21b7b
- cp $ee
- jr nz, .asm_21b88
- call Func_21fe4
- ld [$c004], a
- jp Func_21967
-.asm_21b88
- cp $ef
- jr nz, .asm_21ba7
- call Func_21fe4
+.musicChannelDone
+ jp Music8_endchannel
+
+Music8_unknownmusic0xee: ; 21b7b (8:5b7b)
+ cp $ee ; is this command an unknownmusic0xee?
+ jr nz, Music8_unknownmusic0xef ; no
+ call Music8_GetNextMusicByte ; yes
+ ld [$c004], a ; store first param
+ jp Music8_endchannel
+
+; this appears to never be used
+Music8_unknownmusic0xef: ; 21b88 (8:5b88)
+ cp $ef ; is this command an unknownmusic0xef?
+ jr nz, Music8_dutycycle ; no
+ call Music8_GetNextMusicByte ; yes
push bc
call Func_22035
pop bc
ld a, [$c003]
and a
- jr nz, .asm_21ba4
+ jr nz, .skip
ld a, [$c02d]
ld [$c003], a
xor a
ld [$c02d], a
-.asm_21ba4
- jp Func_21967
-.asm_21ba7
- cp $fc
- jr nz, .asm_21bc5
- call Func_21fe4
+.skip
+ jp Music8_endchannel
+
+Music8_dutycycle: ; 21ba7 (8:5ba7)
+ cp $fc ; is this command a dutycycle?
+ jr nz, Music8_stereopanning ; no
+ call Music8_GetNextMusicByte ; yes
ld b, $0
ld hl, $c046
add hl, bc
- ld [hl], a
+ ld [hl], a ; store full cycle
and $c0
ld hl, $c03e
add hl, bc
- ld [hl], a
+ ld [hl], a ; store first duty
ld hl, $c02e
add hl, bc
- set 6, [hl]
- jp Func_21967
-.asm_21bc5
- cp $f0
- jr nz, .asm_21bd1
- call Func_21fe4
+ set 6, [hl] ; set dutycycle flag
+ jp Music8_endchannel
+
+Music8_stereopanning: ; 21bc5 (8:5bc5)
+ cp $f0 ; is this command a stereopanning?
+ jr nz, Music8_executemusic ; no
+ call Music8_GetNextMusicByte ; yes
ld [$FF00+$24], a
- jp Func_21967
-.asm_21bd1
- cp $f8
- jr nz, .asm_21be0
- ld b, $0
+ jp Music8_endchannel
+
+Music8_executemusic: ; 21bd1 (8:5bd1)
+ cp $f8 ; is this command an executemusic?
+ jr nz, Music8_octave ; no
+ ld b, $0 ; yes
ld hl, $c036
add hl, bc
set 0, [hl]
- jp Func_21967
-.asm_21be0
+ jp Music8_endchannel
+
+Music8_octave: ; 21be0 (8:5be0)
and $f0
- cp $e0
- jr nz, .asm_21bf3
- ld hl, $c0d6
+ cp $e0 ; is this command an octave?
+ jr nz, Music8_unknownsfx0x20 ; no
+ ld hl, $c0d6 ; yes
ld b, $0
add hl, bc
ld a, d
and $f
- ld [hl], a
- jp Func_21967
-.asm_21bf3
- cp $20
- jr nz, .asm_21c40
+ ld [hl], a ; store low nibble as octave
+ jp Music8_endchannel
+
+Music8_unknownsfx0x20: ; 21bf3
+ cp $20 ; is this command an unknownsfx0x20?
+ jr nz, Music8_unknownsfx0x10 ; no
ld a, c
- cp $3
- jr c, .asm_21c40
+ cp CH3 ; is this a noise or sfx channel?
+ jr c, Music8_unknownsfx0x10 ; no
ld b, $0
ld hl, $c036
add hl, bc
bit 0, [hl]
- jr nz, .asm_21c40
- call Func_21c8b
+ jr nz, Music8_unknownsfx0x10 ; no
+ call Music8_notelength
ld d, a
ld b, $0
ld hl, $c03e
@@ -42827,21 +45193,21 @@ Func_21aa4: ; 21aa4 (8:5aa4)
ld b, $1
call Func_21ff7
ld [hl], d
- call Func_21fe4
+ call Music8_GetNextMusicByte
ld d, a
ld b, $2
call Func_21ff7
ld [hl], d
- call Func_21fe4
+ call Music8_GetNextMusicByte
ld e, a
ld a, c
- cp $7
+ cp CH7
ld a, $0
- jr z, .asm_21c33
+ jr z, .sfxNoiseChannel ; only two params for noise channel
push de
- call Func_21fe4
+ call Music8_GetNextMusicByte
pop de
-.asm_21c33
+.sfxNoiseChannel
ld d, a
push de
call Func_21daa
@@ -42849,30 +45215,32 @@ Func_21aa4: ; 21aa4 (8:5aa4)
pop de
call Func_21dcc
ret
-.asm_21c40
+
+Music8_unknownsfx0x10: ; 21c40 (8:5c40)
ld a, c
- cp $4
- jr c, .asm_21c5c
+ cp CH4
+ jr c, Music8_note ; if not a sfx
ld a, d
- cp $10
- jr nz, .asm_21c5c
+ cp $10 ; is this command a unknownsfx0x10?
+ jr nz, Music8_note ; no
ld b, $0
ld hl, $c036
add hl, bc
bit 0, [hl]
- jr nz, .asm_21c5c
- call Func_21fe4
+ jr nz, Music8_note ; no
+ call Music8_GetNextMusicByte ; yes
ld [$FF00+$10], a
- jp Func_21967
-.asm_21c5c
+ jp Music8_endchannel
+
+Music8_note: ; 21c5c (8:5c5c)
ld a, c
- cp $3
- jr nz, Func_21c8b
+ cp CH3
+ jr nz, Music8_notelength ; if not noise channel
ld a, d
and $f0
- cp $b0
- jr z, .asm_21c76
- jr nc, Func_21c8b
+ cp $b0 ; is this command a dnote?
+ jr z, Music8_dnote ; yes
+ jr nc, Music8_notelength ; no
swap a
ld b, a
ld a, d
@@ -42881,14 +45249,15 @@ Func_21aa4: ; 21aa4 (8:5aa4)
ld a, b
push de
push bc
- jr .asm_21c7e
-.asm_21c76
+ jr asm_21c7e
+
+Music8_dnote: ; 21c76 (8:5c76)
ld a, d
and $f
push af
push bc
- call Func_21fe4
-.asm_21c7e
+ call Music8_GetNextMusicByte ; get dnote instrument
+asm_21c7e
ld d, a
ld a, [$c003]
and a
@@ -42899,14 +45268,13 @@ Func_21aa4: ; 21aa4 (8:5aa4)
pop bc
pop de
-; known jump sources: 21b23 (8:5b23), 21c06 (8:5c06), 21c5f (8:5c5f), 21c68 (8:5c68)
-Func_21c8b: ; 21c8b (8:5c8b)
+Music8_notelength: ; 21c8b (8:5c8b)
ld a, d
push af
and $f
inc a
ld b, $0
- ld e, a
+ ld e, a ; store note length (in 16ths)
ld d, b
ld hl, $c0c6
add hl, bc
@@ -42914,24 +45282,24 @@ Func_21c8b: ; 21c8b (8:5c8b)
ld l, b
call Func_22006
ld a, c
- cp $4
- jr nc, .asm_21cac
+ cp CH4
+ jr nc, .sfxChannel
ld a, [$c0e8]
ld d, a
ld a, [$c0e9]
ld e, a
- jr .asm_21cbf
-.asm_21cac
+ jr .skip
+.sfxChannel
ld d, $1
ld e, $0
- cp $7
- jr z, .asm_21cbf
+ cp CH7
+ jr z, .skip ; if noise channel
call Func_21e2f
ld a, [$c0ea]
ld d, a
ld a, [$c0eb]
ld e, a
-.asm_21cbf
+.skip
ld a, l
ld b, $0
ld hl, $c0ce
@@ -42950,41 +45318,43 @@ Func_21c8b: ; 21c8b (8:5c8b)
ld hl, $c036
add hl, bc
bit 0, [hl]
- jr nz, .asm_21ce9
+ jr nz, Music8_notepitch
ld hl, $c02e
add hl, bc
bit 2, [hl]
- jr z, .asm_21ce9
+ jr z, Music8_notepitch
pop hl
ret
-.asm_21ce9
+
+Music8_notepitch: ; 21ce9 (8:5ce9)
pop af
and $f0
- cp $c0
- jr nz, .asm_21d20
+ cp $c0 ; compare to rest
+ jr nz, .notRest
ld a, c
- cp $4
- jr nc, .asm_21cfd
+ cp CH4
+ jr nc, .sfxChannel
ld hl, $c02a
add hl, bc
ld a, [hl]
and a
- jr nz, .asm_21d1f
-.asm_21cfd
+ jr nz, .done
+ ; fall through
+.sfxChannel
ld a, c
- cp $2
- jr z, .asm_21d06
- cp $6
- jr nz, .asm_21d13
-.asm_21d06
+ cp CH2
+ jr z, .musicChannel3
+ cp CH6
+ jr nz, .notSfxChannel3
+.musicChannel3
ld b, $0
- ld hl, Unknown_222de ; $62de
+ ld hl, Unknown_222de
add hl, bc
ld a, [$FF00+$25]
and [hl]
ld [$FF00+$25], a
- jr .asm_21d1f
-.asm_21d13
+ jr .done
+.notSfxChannel3
ld b, $2
call Func_21ff7
ld a, $8
@@ -42992,9 +45362,9 @@ Func_21c8b: ; 21c8b (8:5c8b)
inc hl
ld a, $80
ld [hl], a
-.asm_21d1f
+.done
ret
-.asm_21d20
+.notRest
swap a
ld b, $0
ld hl, $c0d6
@@ -43010,8 +45380,8 @@ Func_21c8b: ; 21c8b (8:5c8b)
.asm_21d39
push de
ld a, c
- cp $4
- jr nc, .asm_21d4e
+ cp CH4
+ jr nc, .skip ; if sfx channel
ld hl, $c02a
ld d, $0
ld e, a
@@ -43019,11 +45389,11 @@ Func_21c8b: ; 21c8b (8:5c8b)
ld a, [hl]
and a
jr nz, .asm_21d4c
- jr .asm_21d4e
+ jr .skip
.asm_21d4c
pop de
ret
-.asm_21d4e
+.skip
ld b, $0
ld hl, $c0de
add hl, bc
@@ -43049,52 +45419,50 @@ Func_21c8b: ; 21c8b (8:5c8b)
call Func_21dcc
ret
-; known jump sources: 21c38 (8:5c38), 21d5e (8:5d5e)
Func_21d79: ; 21d79 (8:5d79)
ld b, $0
- ld hl, Unknown_222e6 ; $62e6
+ ld hl, Unknown_222e6
add hl, bc
ld a, [$FF00+$25]
or [hl]
ld d, a
ld a, c
- cp $7
- jr z, .asm_21d94
- cp $4
- jr nc, .asm_21da6
+ cp CH7
+ jr z, .sfxNoiseChannel
+ cp CH4
+ jr nc, .skip ; if sfx channel
ld hl, $c02a
add hl, bc
ld a, [hl]
and a
- jr nz, .asm_21da6
-.asm_21d94
+ jr nz, .skip
+.sfxNoiseChannel
ld a, [$c004]
- ld hl, Unknown_222e6 ; $62e6
+ ld hl, Unknown_222e6
add hl, bc
and [hl]
ld d, a
ld a, [$FF00+$25]
- ld hl, Unknown_222de ; $62de
+ ld hl, Unknown_222de
add hl, bc
and [hl]
or d
ld d, a
-.asm_21da6
+.skip
ld a, d
ld [$FF00+$25], a
ret
-; known jump sources: 21c35 (8:5c35), 21d5b (8:5d5b)
Func_21daa: ; 21daa (8:5daa)
ld b, $0
ld hl, $c0b6
add hl, bc
ld d, [hl]
ld a, c
- cp $2
- jr z, .asm_21dc5
- cp $6
- jr z, .asm_21dc5
+ cp CH2
+ jr z, .channel3 ; if music channel 3
+ cp CH6
+ jr z, .channel3 ; if sfx channel 3
ld a, d
and $3f
ld d, a
@@ -43103,31 +45471,31 @@ Func_21daa: ; 21daa (8:5daa)
ld a, [hl]
or d
ld d, a
-.asm_21dc5
+.channel3
ld b, $1
call Func_21ff7
ld [hl], d
ret
-; known jump sources: 21c3c (8:5c3c), 21d75 (8:5d75)
Func_21dcc: ; 21dcc (8:5dcc)
ld a, c
- cp $2
- jr z, .asm_21dd5
- cp $6
- jr nz, .asm_21e02
-.asm_21dd5
+ cp CH2
+ jr z, .channel3
+ cp CH6
+ jr nz, .notSfxChannel3
+ ; fall through
+.channel3
push de
ld de, $c0e6
- cp $2
- jr z, .asm_21de0
+ cp CH2
+ jr z, .musicChannel3
ld de, $c0e7
-.asm_21de0
+.musicChannel3
ld a, [de]
add a
ld d, $0
ld e, a
- ld hl, Unknown_20361 ; $4361
+ ld hl, Music8_Channel3DutyPointers
add hl, de
ld e, [hl]
inc hl
@@ -43136,18 +45504,18 @@ Func_21dcc: ; 21dcc (8:5dcc)
ld b, $f
ld a, $0
ld [$FF00+$1a], a
-.asm_21df5
+.loop
ld a, [de]
inc de
ld [hli], a
ld a, b
dec b
and a
- jr nz, .asm_21df5
+ jr nz, .loop
ld a, $80
ld [$FF00+$1a], a
pop de
-.asm_21e02
+.notSfxChannel3
ld a, d
or $80
and $c7
@@ -43158,18 +45526,19 @@ Func_21dcc: ; 21dcc (8:5dcc)
inc hl
ld [hl], d
ld a, c
- cp $4
- jr c, .asm_21e18
+ cp CH4
+ jr c, .musicChannel
call Func_21e56
-.asm_21e18
+.musicChannel
ret
+Func_21e19: ; 21e19 (8:5e19)
ld a, c
- cp $4
- jr nz, .asm_21e2e ; 0x21e1c $10
+ cp CH4
+ jr nz, .asm_21e2e
ld a, [$d083]
bit 7, a
- jr z, .asm_21e2e ; 0x21e23 $9
+ jr z, .asm_21e2e
xor a
ld [$c0f1], a
ld a, $80
@@ -43177,7 +45546,6 @@ Func_21dcc: ; 21dcc (8:5dcc)
.asm_21e2e
ret
-; known jump sources: 21cb4 (8:5cb4)
Func_21e2f: ; 21e2f (8:5e2f)
call Func_21e8b
jr c, .asm_21e39
@@ -43202,7 +45570,6 @@ Func_21e2f: ; 21e2f (8:5e2f)
.asm_21e55
ret
-; known jump sources: 21e15 (8:5e15)
Func_21e56: ; 21e56 (8:5e56)
call Func_21e8b
jr c, .asm_21e60
@@ -43222,7 +45589,6 @@ Func_21e56: ; 21e56 (8:5e56)
.asm_21e6c
ret
-; known jump sources: 219e2 (8:59e2)
Func_21e6d: ; 21e6d (8:5e6d)
call Func_21e8b
jr nc, .asm_21e88
@@ -43246,7 +45612,6 @@ Func_21e6d: ; 21e6d (8:5e6d)
ccf
ret
-; known jump sources: 21e2f (8:5e2f), 21e56 (8:5e56), 21e6d (8:5e6d)
Func_21e8b: ; 21e8b (8:5e8b)
ld a, [$c02a]
cp $14
@@ -43264,7 +45629,6 @@ Func_21e8b: ; 21e8b (8:5e8b)
scf
ret
-; known jump sources: 21e34 (8:5e34), 21e5b (8:5e5b)
Func_21e9f: ; 21e9f (8:5e9f)
ld a, [$c02d]
ld b, a
@@ -43285,12 +45649,11 @@ Func_21e9f: ; 21e9f (8:5e9f)
scf
ret
-; known jump sources: 218ef (8:58ef)
-Func_21eb8: ; 21eb8 (8:5eb8)
+Music8_ApplyPitchBend: ; 21eb8 (8:5eb8)
ld hl, $c02e
add hl, bc
bit 5, [hl]
- jp nz, Func_21eff
+ jp nz, .asm_21eff
ld hl, $c09e
add hl, bc
ld e, [hl]
@@ -43323,17 +45686,15 @@ Func_21eb8: ; 21eb8 (8:5eb8)
add hl, bc
ld a, [hl]
cp d
- jp c, Func_21f45
- jr nz, asm_21f32
+ jp c, .asm_21f45
+ jr nz, .asm_21f32
ld hl, $c0ae
add hl, bc
ld a, [hl]
cp e
- jp c, Func_21f45
- jr asm_21f32
-
-; known jump sources: 21ebe (8:5ebe)
-Func_21eff: ; 21eff (8:5eff)
+ jp c, .asm_21f45
+ jr .asm_21f32
+.asm_21eff
ld hl, $c09e
add hl, bc
ld a, [hl]
@@ -43363,14 +45724,14 @@ Func_21eff: ; 21eff (8:5eff)
add hl, bc
ld a, d
cp [hl]
- jr c, Func_21f45
- jr nz, asm_21f32
+ jr c, .asm_21f45
+ jr nz, .asm_21f32
ld hl, $c0ae
add hl, bc
ld a, e
cp [hl]
- jr c, Func_21f45
-asm_21f32: ; 21f32 (8:5f32)
+ jr c, .asm_21f45
+.asm_21f32
ld hl, $c09e
add hl, bc
ld [hl], e
@@ -43383,16 +45744,13 @@ asm_21f32: ; 21f32 (8:5f32)
ld [hli], a
ld [hl], d
ret
-
-; known jump sources: 21eef (8:5eef), 21efa (8:5efa), 21f26 (8:5f26), 21f30 (8:5f30)
-Func_21f45: ; 21f45 (8:5f45)
+.asm_21f45
ld hl, $c02e
add hl, bc
res 4, [hl]
res 5, [hl]
ret
-; known jump sources: 21d36 (8:5d36)
Func_21f4e: ; 21f4e (8:5f4e)
ld hl, $c096
add hl, bc
@@ -43482,8 +45840,7 @@ Func_21f4e: ; 21f4e (8:5f4e)
ld [hl], a
ret
-; known jump sources: 218d2 (8:58d2)
-Func_21fcc: ; 21fcc (8:5fcc)
+Music8_ApplyDutyCycle: ; 21fcc (8:5fcc)
ld b, $0
ld hl, $c046
add hl, bc
@@ -43501,8 +45858,7 @@ Func_21fcc: ; 21fcc (8:5fcc)
ld [hl], a
ret
-; known jump sources: 21967 (8:5967), 219fa (8:59fa), 219fe (8:59fe), 21a2f (8:5a2f), 21a43 (8:5a43), 21a46 (8:5a46), 21a4e (8:5a4e), 21a52 (8:5a52), 21a7b (8:5a7b), 21aba (8:5aba), 21ac9 (8:5ac9), 21af2 (8:5af2), 21afc (8:5afc), 21b1f (8:5b1f), 21b2a (8:5b2a), 21b44 (8:5b44), 21b4a (8:5b4a), 21b5f (8:5b5f), 21b65 (8:5b65), 21b7f (8:5b7f), 21b8c (8:5b8c), 21bab (8:5bab), 21bc9 (8:5bc9), 21c19 (8:5c19), 21c23 (8:5c23), 21c2f (8:5c2f), 21c54 (8:5c54), 21c7b (8:5c7b)
-Func_21fe4: ; 21fe4 (8:5fe4)
+Music8_GetNextMusicByte: ; 21fe4 (8:5fe4)
ld d, $0
ld a, c
add a
@@ -43513,21 +45869,20 @@ Func_21fe4: ; 21fe4 (8:5fe4)
ld e, a
ld a, [hld]
ld d, a
- ld a, [de]
+ ld a, [de] ; get next music command
inc de
- ld [hl], e
+ ld [hl], e ; store address of next command
inc hl
ld [hl], d
ret
-; known jump sources: 21941 (8:5941), 21c15 (8:5c15), 21c1f (8:5c1f), 21d15 (8:5d15), 21d57 (8:5d57), 21dc7 (8:5dc7), 21e0a (8:5e0a), 21f3e (8:5f3e), 21fdb (8:5fdb)
Func_21ff7: ; 21ff7 (8:5ff7)
ld a, c
- ld hl, Unknown_222d6 ; $62d6
+ ld hl, Unknown_222d6
add l
- jr nc, .asm_21fff
+ jr nc, .noCarry
inc h
-.asm_21fff
+.noCarry
ld l, a
ld a, [hl]
add b
@@ -43535,49 +45890,46 @@ Func_21ff7: ; 21ff7 (8:5ff7)
ld h, $ff
ret
-; known jump sources: 21c9a (8:5c9a), 21cc7 (8:5cc7)
Func_22006: ; 22006 (8:6006)
ld h, $0
-.asm_22008
+.loop
srl a
- jr nc, .asm_2200d
+ jr nc, .noCarry
add hl, de
-.asm_2200d
+.noCarry
sla e
rl d
and a
- jr z, .asm_22016
- jr .asm_22008
-.asm_22016
+ jr z, .done
+ jr .loop
+.done
ret
-; known jump sources: 21b08 (8:5b08), 21d29 (8:5d29)
Func_22017: ; 22017 (8:6017)
ld h, $0
ld l, a
add hl, hl
ld d, h
ld e, l
- ld hl, Unknown_222ee ; $62ee
+ ld hl, Unknown_222ee
add hl, de
ld e, [hl]
inc hl
ld d, [hl]
ld a, b
-.asm_22025
- cp $7
- jr z, .asm_22030
+.loop
+ cp CH7
+ jr z, .done
sra d
rr e
inc a
- jr .asm_22025
-.asm_22030
+ jr .loop
+.done
ld a, $8
add d
ld d, a
ret
-; known jump sources: 21b90 (8:5b90), 21c86 (8:5c86)
Func_22035: ; 22035 (8:6035)
ld [$c001], a
cp $ff
@@ -43597,53 +45949,53 @@ Func_22035: ; 22035 (8:6035)
ld [$c0e7], a
ld d, $8
ld hl, $c016
- call Func_22248
+ call FillMusicRAM8
ld hl, $c006
- call Func_22248
+ call FillMusicRAM8
ld d, $4
ld hl, $c026
- call Func_22248
+ call FillMusicRAM8
ld hl, $c02e
- call Func_22248
+ call FillMusicRAM8
ld hl, $c03e
- call Func_22248
+ call FillMusicRAM8
ld hl, $c046
- call Func_22248
+ call FillMusicRAM8
ld hl, $c04e
- call Func_22248
+ call FillMusicRAM8
ld hl, $c056
- call Func_22248
+ call FillMusicRAM8
ld hl, $c05e
- call Func_22248
+ call FillMusicRAM8
ld hl, $c066
- call Func_22248
+ call FillMusicRAM8
ld hl, $c06e
- call Func_22248
+ call FillMusicRAM8
ld hl, $c036
- call Func_22248
+ call FillMusicRAM8
ld hl, $c076
- call Func_22248
+ call FillMusicRAM8
ld hl, $c07e
- call Func_22248
+ call FillMusicRAM8
ld hl, $c086
- call Func_22248
+ call FillMusicRAM8
ld hl, $c08e
- call Func_22248
+ call FillMusicRAM8
ld hl, $c096
- call Func_22248
+ call FillMusicRAM8
ld hl, $c09e
- call Func_22248
+ call FillMusicRAM8
ld hl, $c0a6
- call Func_22248
+ call FillMusicRAM8
ld hl, $c0ae
- call Func_22248
+ call FillMusicRAM8
ld a, $1
ld hl, $c0be
- call Func_22248
+ call FillMusicRAM8
ld hl, $c0b6
- call Func_22248
+ call FillMusicRAM8
ld hl, $c0c6
- call Func_22248
+ call FillMusicRAM8
ld [$c0e8], a
ld a, $ff
ld [$c004], a
@@ -43661,7 +46013,6 @@ Func_22035: ; 22035 (8:6035)
ld [$FF00+$24], a
jp Func_2224e
-; known jump sources: 2203f (8:603f), 22042 (8:6042), 22049 (8:6049)
Func_2210d: ; 2210d (8:610d)
ld l, a
ld e, a
@@ -43669,7 +46020,7 @@ Func_2210d: ; 2210d (8:610d)
ld d, h
add hl, hl
add hl, de
- ld de, Unknown_20000 ; $4000
+ ld de, SFX_Headers_08
add hl, de
ld a, h
ld [$c0ec], a
@@ -43680,9 +46031,7 @@ Func_2210d: ; 2210d (8:610d)
rlca
rlca
ld c, a
-
-; known jump sources: 221f0 (8:61f0)
-Func_22126: ; 22126 (8:6126)
+.asm_22126
ld d, c
ld a, c
add a
@@ -43813,9 +46162,8 @@ Func_22126: ; 22126 (8:6126)
and a
jp z, Func_2224e
dec c
- jp Func_22126
+ jp .asm_22126
-; known jump sources: 2203a (8:603a)
Func_221f3: ; 221f3 (8:61f3)
ld a, $80
ld [$FF00+$26], a
@@ -43844,27 +46192,26 @@ Func_221f3: ; 221f3 (8:61f3)
ld [$c0e7], a
ld d, $a0
ld hl, $c006
- call Func_22248
+ call FillMusicRAM8
ld a, $1
ld d, $18
ld hl, $c0b6
- call Func_22248
+ call FillMusicRAM8
ld [$c0e8], a
ld [$c0ea], a
ld a, $ff
ld [$c004], a
ret
-; known jump sources: 22061 (8:6061), 22067 (8:6067), 2206f (8:606f), 22075 (8:6075), 2207b (8:607b), 22081 (8:6081), 22087 (8:6087), 2208d (8:608d), 22093 (8:6093), 22099 (8:6099), 2209f (8:609f), 220a5 (8:60a5), 220ab (8:60ab), 220b1 (8:60b1), 220b7 (8:60b7), 220bd (8:60bd), 220c3 (8:60c3), 220c9 (8:60c9), 220cf (8:60cf), 220d5 (8:60d5), 220dd (8:60dd), 220e3 (8:60e3), 220e9 (8:60e9), 2222f (8:622f), 22239 (8:6239)
-Func_22248: ; 22248 (8:6248)
+; fills d bytes at hl with a
+FillMusicRAM8: ; 22248 (8:6248)
ld b, d
-.asm_22249
+.loop
ld [hli], a
dec b
- jr nz, .asm_22249
+ jr nz, .loop
ret
-; known jump sources: 2210a (8:610a), 221ec (8:61ec)
Func_2224e: ; 2224e (8:624e)
ld a, [$c001]
ld l, a
@@ -43873,12 +46220,12 @@ Func_2224e: ; 2224e (8:624e)
ld d, h
add hl, hl
add hl, de
- ld de, Unknown_20000 ; $4000
+ ld de, SFX_Headers_08
add hl, de
ld e, l
ld d, h
ld hl, $c006
- ld a, [de]
+ ld a, [de] ; get channel number
ld b, a
rlca
rlca
@@ -43916,7 +46263,7 @@ Func_2224e: ; 2224e (8:624e)
.asm_22291
pop bc
pop hl
- ld a, [de]
+ ld a, [de] ; get channel pointer
ld [hli], a
inc de
ld a, [de]
@@ -43945,11 +46292,11 @@ Func_2224e: ; 2224e (8:624e)
ld [hli], a
ld [hli], a
ld [hl], a
- ld hl, $c012
- ld de, Unknown_222d5 ; $62d5
+ ld hl, $c012 ; sfx noise channel pointer
+ ld de, Noise8_endchannel
ld [hl], e
inc hl
- ld [hl], d
+ ld [hl], d ; overwrite pointer to point to endchannel
ld a, [$c005]
and a
jr nz, .asm_222d4
@@ -43960,45 +46307,64 @@ Func_2224e: ; 2224e (8:624e)
.asm_222d4
ret
-Unknown_222d5: ; 222d5 (8:62d5)
-INCBIN "baserom.gbc",$222d5,$222d6 - $222d5
+Noise8_endchannel: ; 222d5 (8:62d5)
+ endchannel
Unknown_222d6: ; 222d6 (8:62d6)
-INCBIN "baserom.gbc",$222d6,$222de - $222d6
+ db $10, $15, $1A, $1F ; channels 0-3
+ db $10, $15, $1A, $1F ; channels 4-7
Unknown_222de: ; 222de (8:62de)
-INCBIN "baserom.gbc",$222de,$222e6 - $222de
+ db $EE, $DD, $BB, $77 ; channels 0-3
+ db $EE, $DD, $BB, $77 ; channels 4-7
Unknown_222e6: ; 222e6 (8:62e6)
-INCBIN "baserom.gbc",$222e6,$222ee - $222e6
+ db $11, $22, $44, $88 ; channels 0-3
+ db $11, $22, $44, $88 ; channels 4-7
Unknown_222ee: ; 222ee (8:62ee)
-INCBIN "baserom.gbc",$222ee,$22306 - $222ee
-
-; known jump sources: e1d6 (3:61d6)
-Func_22306: ; 22306 (8:6306)
- ld a, $9a
+ dw $F82C
+ dw $F89D
+ dw $F907
+ dw $F96B
+ dw $F9CA
+ dw $FA23
+ dw $FA77
+ dw $FAC7
+ dw $FB12
+ dw $FB58
+ dw $FB9B
+ dw $FBDA
+
+Music_PokeFluteInBattle: ; 22306 (8:6306)
+ ld a, (SFX_08_46 - $4000) / 3 ; PokeFlute outside of battle
call PlaySoundWaitForCurrent
ld hl, $c00e
- ld de, Unknown_22322 ; $6322
- call Func_2231d
- ld de, Unknown_22325 ; $6325
- call Func_2231d
- ld de, Unknown_2049b ; $449b
-
-; known jump sources: 22311 (8:6311), 22317 (8:6317)
-Func_2231d: ; 2231d (8:631d)
+ ld de, SFX_08_PokeFlute_Ch1
+ call Music8_OverwriteChannelPointer
+ ld de, SFX_08_PokeFlute_Ch2
+ call Music8_OverwriteChannelPointer
+ ld de, SFX_08_PokeFlute_Ch3
+
+Music8_OverwriteChannelPointer: ; 2231d (8:631d)
ld a, e
ld [hli], a
ld a, d
ld [hli], a
ret
-Unknown_22322: ; 22322 (8:6322)
-INCBIN "baserom.gbc",$22322,$22325 - $22322
-
-Unknown_22325: ; 22325 (8:6325)
-INCBIN "baserom.gbc",$22325,$23f52 - $22325
+INCLUDE "music/sfx/sfx_08_pokeflute.tx"
+INCLUDE "music/sfx/sfx_08_unused2.tx"
+INCLUDE "music/gymleaderbattle.tx"
+INCLUDE "music/trainerbattle.tx"
+INCLUDE "music/wildbattle.tx"
+INCLUDE "music/finalbattle.tx"
+INCLUDE "music/sfx/sfx_08_3a.tx"
+INCLUDE "music/sfx/sfx_08_3b.tx"
+INCLUDE "music/sfx/sfx_08_46.tx"
+INCLUDE "music/defeatedtrainer.tx"
+INCLUDE "music/defeatedwildmon.tx"
+INCLUDE "music/defeatedgymleader.tx"
SECTION "bank9",ROMX,BANK[$9]
@@ -51830,7 +54196,7 @@ ReadMove: ; 39884 (e:5884)
pop hl
ret
-; move choice modifiaction methods that are applied for each trainer class
+; move choice modification methods that are applied for each trainer class
; 0 is sentinel value
TrainerClassMoveChoiceModifications: ; 3989b (e:589b)
db 0 ; YOUNGSTER
@@ -51882,6 +54248,7 @@ db 1,0 ; AGATHA
db 1,3,0 ; LANCE
; trainer pic pointers and base money.
+; money received after battle = base money × level of highest-level enemy mon
dw YoungsterPic
db 0,$15,0
@@ -57616,7 +59983,7 @@ Func_3c567: ; 3c567 (f:4567)
jr .asm_3c5db
.asm_3c5d3
call Func_3c643
- ld a, $f9
+ ld a, (Music_DefeatedWildMon - $4000) / 3
call Func_3c6ee
.asm_3c5db
ld hl, W_PLAYERMONCURHP ; $d015
@@ -57727,16 +60094,16 @@ Func_3c664: ; 3c664 (f:4664)
TrainerBattleVictory: ; 3c696 (f:4696)
call Func_3c643
- ld b, $fc
+ ld b, (Music_DefeatedGymLeader - $4000) / 3
ld a, [W_GYMLEADERNO] ; $d05c
and a
- jr nz, .notgymleader
- ld b, $f6 ; gym leader win music
-.notgymleader
+ jr nz, .gymleader
+ ld b, (Music_DefeatedTrainer - $4000) / 3
+.gymleader
ld a, [W_TRAINERCLASS] ; $d031
cp SONY3 ; final battle against rival
jr nz, .notrival
- ld b, $fc ; final rival battle win music
+ ld b, (Music_DefeatedGymLeader - $4000) / 3
ld hl, W_FLAGS_D733
set 1, [hl]
.notrival
@@ -57774,7 +60141,7 @@ Func_3c6ee: ; 3c6ee (f:46ee)
ld a, $ff
ld [$c0ee], a
call PlaySoundWaitForCurrent
- ld c, $8
+ ld c, BANK(Music_DefeatedTrainer)
pop af
call PlayMusic
jp Delay3
@@ -69700,7 +72067,7 @@ Func_44fd7: ; 44fd7 (11:4fd7)
ret
Unknown_45023: ; 45023 (11:5023)
-; 0x45023 XXX: it looks to me this is probably data for copying tiles into memory, maybe to mix and match a few tilesets, but I don't really know for sure
+; XXX: it looks to me this is probably data for copying tiles into memory, maybe to mix and match a few tilesets, but I don't really know for sure
dw SpinnerArrowAnimTiles ;address from within tileset graphics
db 1 ;number of tiles to copy?
db BANK(SpinnerArrowAnimTiles) ;bank of tileset graphics
@@ -73932,7 +76299,6 @@ Func_48bec: ; 48bec (12:4bec)
ld bc, $0208
ld a, $17
jp Predef
-; 0x48c07
INCBIN "baserom.gbc",$48c07,$48c12 - $48c07
@@ -77777,8 +80143,8 @@ Route22Script0: ; 50f00 (14:4f00)
ld [$c0ee], a
call PlaySound
.asm_50f4e
- ld c, $2
- ld a, $de
+ ld c, BANK(Music_MeetRival)
+ ld a, (Music_MeetRival - $4000) / 3
call PlayMusic
ld a, $1
ld [$ff00+$8c], a
@@ -77853,8 +80219,8 @@ Route22Script2: ; 50fb5 (14:4fb5)
ld a, $ff
ld [$c0ee], a
call PlaySound
- ld b, BANK(Func_9b47)
- ld hl, Func_9b47
+ ld b, BANK(Music_RivalAlternateStart)
+ ld hl, Music_RivalAlternateStart
call Bankswitch
ld a, [$cf0d]
cp $1
@@ -77920,9 +80286,9 @@ Func_5104e: ; 5104e (14:504e)
ld a, $ff
ld [$c0ee], a
call PlaySound
- ld b, BANK(Func_9b65)
- ld hl, Func_9b65
- call Bankswitch ; indirect jump to Func_9b65 (9b65 (2:5b65))
+ ld b, BANK(Music_RivalAlternateTempo)
+ ld hl, Music_RivalAlternateTempo
+ call Bankswitch ; indirect jump to Music_RivalAlternateTempo (9b65 (2:5b65))
ld a, $2
ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c
call Func_50ee6
@@ -77998,9 +80364,9 @@ INCBIN "baserom.gbc",$510d9,$510df - $510d9
ld a, $ff
ld [$c0ee], a
call PlaySound
- ld b, BANK(Func_9b75)
- ld hl, Func_9b75
- call Bankswitch ; indirect jump to Func_9b75 (9b75 (2:5b75))
+ ld b, BANK(Music_RivalAlternateStartAndTempo)
+ ld hl, Music_RivalAlternateStartAndTempo
+ call Bankswitch ; indirect jump to Music_RivalAlternateStartAndTempo (9b75 (2:5b75))
ld a, [$cf0d]
cp $1
jr nz, .asm_51134
@@ -79393,8 +81759,8 @@ INCBIN "baserom.gbc",$51c17,$51c23 - $51c17
ld a, $ff
ld [$c0ee], a
call PlaySound
- ld c, $2
- ld a, $de
+ ld c, BANK(Music_MeetRival)
+ ld a, (Music_MeetRival - $4000) / 3
call PlayMusic
ld a, $9
ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c
@@ -79473,9 +81839,9 @@ INCBIN "baserom.gbc",$51c7d,$51c82 - $51c7d
ld a, $ff
ld [$c0ee], a
call PlaySound
- ld b, BANK(Func_9b47)
- ld hl, Func_9b47
- call Bankswitch ; indirect jump to Func_9b47 (9b47 (2:5b47))
+ ld b, BANK(Music_RivalAlternateStart)
+ ld hl, Music_RivalAlternateStart
+ call Bankswitch ; indirect jump to Music_RivalAlternateStart (9b47 (2:5b47))
ld de, Unknown_51d1d ; $5d1d
ld a, [$cf0d]
cp $1
@@ -80325,9 +82691,9 @@ Func_525af: ; 525af (14:65af)
ld a, $2
ld [W_BATTLETYPE], a ; $d05a
.asm_525f9
- ld hl, Func_90c6
- ld b, BANK(Func_90c6)
- jp Bankswitch ; indirect jump to Func_90c6 (90c6 (2:50c6))
+ ld hl, PlayBattleMusic
+ ld b, BANK(PlayBattleMusic)
+ jp Bankswitch ; indirect jump to PlayBattleMusic (90c6 (2:50c6))
Func_52601: ; 52601 (14:6601)
ld hl, W_ENEMYMONSTATUS ; $cfe9
@@ -89589,8 +91955,8 @@ PewterPokecenterText3: ; 5c59b (17:459b)
jr nz, .asm_5c5c3 ; 0x5c5c5 $fc
dec hl
push hl
- ld c, $1f
- ld a, $d0
+ ld c, BANK(Music_JigglypuffSong)
+ ld a, (Music_JigglypuffSong - $4000) / 3
call PlayMusic
pop hl
.asm_5c5d1
@@ -92612,8 +94978,8 @@ PokemonTower2Script0: ; 6050f (18:450f)
ld a, $ff
ld [$c0ee], a
call PlaySound
- ld c, $2
- ld a, $de
+ ld c, BANK(Music_MeetRival)
+ ld a, (Music_MeetRival - $4000) / 3
call PlayMusic
ld hl, $d764
res 6, [hl]
@@ -92667,8 +95033,8 @@ PokemonTower2Script1: ; 60563 (18:4563)
ld a, $ff
ld [$c0ee], a
call PlaySound
- ld b, BANK(Func_9b47)
- ld hl, Func_9b47
+ ld b, BANK(Music_RivalAlternateStart)
+ ld hl, Music_RivalAlternateStart
call Bankswitch
ld a, $2
ld [W_POKEMONTOWER2CURSCRIPT], a
@@ -94187,8 +96553,8 @@ SSAnne2Script0: ; 613be (18:53be)
ld a, $ff
ld [$c0ee], a
call PlaySound
- ld c, $2
- ld a, $de
+ ld c, BANK(Music_MeetRival)
+ ld a, (Music_MeetRival - $4000) / 3
call PlayMusic
ld a, [$cd3d]
ld [$ff00+$db], a
@@ -94304,8 +96670,8 @@ SSAnne2Script2: ; 6146d (18:546d)
ld a, $ff
ld [$c0ee], a
call PlaySound
- ld b, BANK(Func_9b47)
- ld hl, Func_9b47
+ ld b, BANK(Music_RivalAlternateStart)
+ ld hl, Music_RivalAlternateStart
call Bankswitch
ld a, $3
ld [W_SSANNE2CURSCRIPT], a
@@ -96449,8 +98815,8 @@ Func_701a0: ; 701a0 (1c:41a0)
.asm_701eb
ld a, $90
ld [$FF00+$b0], a
- ld c, $1f
- ld a, $ca
+ ld c, BANK(Music_HallOfFame)
+ ld a, (Music_HallOfFame - $4000) / 3
call PlayMusic
ld hl, W_PARTYMON1 ; $d164
ld c, $ff
@@ -96716,7 +99082,7 @@ Func_70423: ; 70423 (1c:4423)
ld [$cfc8], a
ld [$cfc9], a
ld a, $ff
- ld [$cfc7], a
+ ld [W_CURCHANNELPOINTER], a
jp GBFadeOut2
Func_70433: ; 70433 (1c:4433)
@@ -96737,12 +99103,12 @@ Func_70433: ; 70433 (1c:4433)
ld de, Unknown_704d7 ; $44d7
call Func_70503
ld a, $4
- ld [$cfc7], a
+ ld [W_CURCHANNELPOINTER], a
ld a, $ff
ld [$c0ee], a
call PlaySound
.asm_70464
- ld a, [$cfc7]
+ ld a, [W_CURCHANNELPOINTER]
and a
jr nz, .asm_70464
ld a, [W_NUMINPARTY] ; $d163
@@ -101274,8 +103640,8 @@ Func_7405c: ; 7405c (1d:405c)
call EnableLCD
ld a, $ff
call PlaySoundWaitForCurrent
- ld c, $1f
- ld a, $c7
+ ld c, BANK(Music_Credits)
+ ld a, (Music_Credits - $4000) / 3
call PlayMusic
ld c, $80
call DelayFrames
@@ -104129,7 +106495,6 @@ UnnamedText_75a38: ; 75a38 (1d:5a38)
UnnamedText_75a3d: ; 75a3d (1d:5a3d)
TX_FAR _UnnamedText_75a3d
db "@"
-; 0x75a3d + 5 bytes
CinnabarGymText7: ; 75a42 (1d:5a42)
db $08 ; asm
@@ -104844,8 +107209,8 @@ GaryScript3: ; 75fbb (1d:5fbb)
ret
GaryScript4: ; 75fe4 (1d:5fe4)
- ld b, BANK(Func_9b81)
- ld hl, Func_9b81
+ ld b, BANK(Music_Cities1AlternateTempo)
+ ld hl, Music_Cities1AlternateTempo
call Bankswitch
ld a, $2
ld [$ff00+$8c], a
@@ -108586,8 +110951,8 @@ Func_7bde9: ; 7bde9 (1e:7de9)
ld a, [$cee9]
call PlayCry
call WaitForSoundToFinish
- ld c, $2
- ld a, $e5
+ ld c, BANK(Music_SafariZone)
+ ld a, (Music_SafariZone - $4000) / 3
call PlayMusic
ld c, $50
call DelayFrames
@@ -108722,8 +111087,8 @@ Func_7bf15: ; 7bf15 (1e:7f15)
add d
ld [$FF00+$af], a
push bc
- ld c, $2
- ld a, $b4
+ ld c, BANK(SFX_02_5b)
+ ld a, (SFX_02_5b - $4000) / 3
call PlayMusic
pop bc
ld c, $2
@@ -108734,8 +111099,8 @@ Func_7bf15: ; 7bf15 (1e:7f15)
ld [$FF00+$af], a
ld a, $ff
call PlaySound
- ld c, $2
- ld a, $b9
+ ld c, BANK(SFX_02_5f)
+ ld a, (SFX_02_5f - $4000) / 3
call PlayMusic
.asm_7bf57
ld a, [$c02a]
@@ -108806,170 +111171,160 @@ TechnicalMachinePrices: ; 7bfa7 (1e:7fa7)
SECTION "bank1F",ROMX,BANK[$1F]
-Unknown_7c000: ; 7c000 (1f:4000)
-INCBIN "baserom.gbc",$7c000,$7c361 - $7c000
-
-Unknown_7c361: ; 7c361 (1f:4361)
-INCBIN "baserom.gbc",$7c361,$7c45e - $7c361
-
+INCLUDE "music/headers/sfxheaders1f.tx"
+INCLUDE "music/headers/musicheaders1f.tx"
+
+INCLUDE "music/sfx/sfx_1f_01.tx"
+INCLUDE "music/sfx/sfx_1f_02.tx"
+INCLUDE "music/sfx/sfx_1f_03.tx"
+INCLUDE "music/sfx/sfx_1f_04.tx"
+INCLUDE "music/sfx/sfx_1f_05.tx"
+INCLUDE "music/sfx/sfx_1f_06.tx"
+INCLUDE "music/sfx/sfx_1f_07.tx"
+INCLUDE "music/sfx/sfx_1f_08.tx"
+INCLUDE "music/sfx/sfx_1f_09.tx"
+INCLUDE "music/sfx/sfx_1f_0a.tx"
+INCLUDE "music/sfx/sfx_1f_0b.tx"
+INCLUDE "music/sfx/sfx_1f_0c.tx"
+INCLUDE "music/sfx/sfx_1f_0d.tx"
+INCLUDE "music/sfx/sfx_1f_0e.tx"
+INCLUDE "music/sfx/sfx_1f_0f.tx"
+INCLUDE "music/sfx/sfx_1f_10.tx"
+INCLUDE "music/sfx/sfx_1f_11.tx"
+INCLUDE "music/sfx/sfx_1f_12.tx"
+INCLUDE "music/sfx/sfx_1f_13.tx"
+
+Music1f_Channel3DutyPointers: ; 7c361 (1f:4361)
+ dw Music1f_Channel3Duty1
+ dw Music1f_Channel3Duty2
+ dw Music1f_Channel3Duty3
+ dw Music1f_Channel3Duty4
+ dw Music1f_Channel3Duty5
+ dw SFX_1f_3f_Ch1 ; unused
+ dw SFX_1f_3f_Ch1 ; unused
+ dw SFX_1f_3f_Ch1 ; unused
+ dw SFX_1f_3f_Ch1 ; unused
+
+Music1f_Channel3Duty1: ; 7c373 (1f:4373)
+ db $02,$46,$8A,$CE,$FF,$FE,$ED,$DC,$CB,$A9,$87,$65,$44,$33,$22,$11
+
+Music1f_Channel3Duty2: ; 7c383 (1f:4383)
+ db $02,$46,$8A,$CE,$EF,$FF,$FE,$EE,$DD,$CB,$A9,$87,$65,$43,$22,$11
+
+Music1f_Channel3Duty3: ; 7c393 (1f:4393)
+ db $13,$69,$BD,$EE,$EE,$FF,$FF,$ED,$DE,$FF,$FF,$EE,$EE,$DB,$96,$31
+
+Music1f_Channel3Duty4: ; 7c3a3 (1f:43a3)
+ db $02,$46,$8A,$CD,$EF,$FE,$DE,$FF,$EE,$DC,$BA,$98,$76,$54,$32,$10
+
+Music1f_Channel3Duty5: ; 7c3b3 (1f:43b3)
+ db $01,$23,$45,$67,$8A,$CD,$EE,$F7,$7F,$EE,$DC,$A8,$76,$54,$32,$10
+
+INCLUDE "music/sfx/sfx_1f_3f.tx"
+INCLUDE "music/sfx/sfx_1f_56.tx"
+INCLUDE "music/sfx/sfx_1f_57.tx"
+INCLUDE "music/sfx/sfx_1f_58.tx"
+INCLUDE "music/sfx/sfx_1f_3c.tx"
+INCLUDE "music/sfx/sfx_1f_59.tx"
+INCLUDE "music/sfx/sfx_1f_5a.tx"
+INCLUDE "music/sfx/sfx_1f_5b.tx"
+INCLUDE "music/sfx/sfx_1f_5c.tx"
+INCLUDE "music/sfx/sfx_1f_40.tx"
IF _RED
-UnknSong_md_7c45e: ; 7c45e (1f:445e)
- mus_duty duty50
- mus_note noteD, note4_16
-
- db $f4
-
- mus_note noteC, note16
- mus_note noteC, note2
- mus_note noteD, note4
-
- mus_octave oct3
- mus_note noteG#, note16
- mus_note noteC, note4_8_16
- mus_note noteD, note4
-
- mus_octave oct3
- mus_note noteRst, note16
-
- mus_note noteC, note4_8_16
- mus_note noteD, note4
-
- mus_octave oct3
- mus_note noteC, note16
- mus_note noteC, note2
- mus_note noteD, note8_16
-
- mus_octave oct3
- mus_note noteA#, note16
- mus_note noteC, note2
-
- mus_end
-UnknSong_md_7c475: ; 7c475 (1f:4475)
- mus_duty duty50
- mus_note noteD, note4_16
- mus_note noteC, note2_16
- mus_note noteC, note16
- mus_note noteC, note16
- mus_note noteD, note4
-
- db $d4
-
- mus_note noteC, note8
- mus_note noteC, note2
- mus_note noteD, note4
- mus_note noteRst, note4_16
-
- mus_note noteG#, note8
- mus_note noteC, note4_8_16
- mus_note noteD, note4
- mus_note noteRst, note4_16
-
- mus_note noteRst, note8
-
- mus_note noteC, note4_8_16
- mus_note noteD, note4
- mus_note noteRst, note4_16
-
- mus_note noteC, note8
- mus_note noteC, note2
- mus_note noteD, note8_16
- mus_note noteRst, note4_16
-
- mus_note noteA#, note8
- mus_note noteC, note2
-
- mus_end
+ INCLUDE "music/sfx/sfx_1f_5d.tx"
ENDC
IF _BLUE
-UnknSong_md_7c45e: ; 7c45e (1f:445e)
- mus_duty duty50
- mus_note noteD, note4
-
- mus_octave oct3
- mus_note noteC, note16
- mus_note noteC, note4_8_16
- mus_note noteD, note4
-
- mus_octave oct3
- mus_note noteG#, note16
- mus_note noteC, note4_8_16
- mus_note noteD, note4
-
- mus_octave oct3
- mus_note noteRst, note16
-
- mus_note noteC, note4_8_16
- mus_note noteD, note4
-
- mus_octave oct3
- mus_note noteC, note16
- mus_note noteC, note2
- mus_note noteD, note1
-
- db $f2
-
- mus_octave oct7
- mus_note noteC, note2
-
- mus_end
-UnknSong_md_7c475: ; 7c475 (1f:4475)
- mus_duty duty50
- mus_note noteD, note4
- mus_note noteC, note2_16
- mus_note noteC, note16
- mus_note noteC, note16
- mus_note noteD, note4
- mus_note noteRst, note4_16
-
- mus_note noteC, note8
- mus_note noteC, note4_8_16
- mus_note noteD, note4
- mus_note noteRst, note4_16
-
- mus_note noteG#, note8
- mus_note noteC, note4_8_16
- mus_note noteD, note4
- mus_note noteRst, note4_16
-
- mus_note noteRst, note8
-
- mus_note noteC, note4_8_16
- mus_note noteD, note4
- mus_note noteRst, note4_16
-
- mus_note noteC, note8
- mus_note noteC, note2
- mus_note noteD, note1
-
- db $d2
-
- mus_octave oct6
- mus_note noteC, note2
-
- mus_end
+ INCLUDE "music/blue/sfx_1f_5d.tx"
ENDC
+INCLUDE "music/sfx/sfx_1f_3d.tx"
+INCLUDE "music/sfx/sfx_1f_43.tx"
+INCLUDE "music/sfx/sfx_1f_3e.tx"
+INCLUDE "music/sfx/sfx_1f_44.tx"
+INCLUDE "music/sfx/sfx_1f_45.tx"
+INCLUDE "music/sfx/sfx_1f_46.tx"
+INCLUDE "music/sfx/sfx_1f_47.tx"
+INCLUDE "music/sfx/sfx_1f_48.tx"
+INCLUDE "music/sfx/sfx_1f_49.tx"
+INCLUDE "music/sfx/sfx_1f_4a.tx"
+INCLUDE "music/sfx/sfx_1f_4b.tx"
+INCLUDE "music/sfx/sfx_1f_4c.tx"
+INCLUDE "music/sfx/sfx_1f_4d.tx"
+INCLUDE "music/sfx/sfx_1f_4e.tx"
+INCLUDE "music/sfx/sfx_1f_4f.tx"
+INCLUDE "music/sfx/sfx_1f_50.tx"
+INCLUDE "music/sfx/sfx_1f_51.tx"
+INCLUDE "music/sfx/sfx_1f_52.tx"
+INCLUDE "music/sfx/sfx_1f_53.tx"
+INCLUDE "music/sfx/sfx_1f_54.tx"
+INCLUDE "music/sfx/sfx_1f_55.tx"
+INCLUDE "music/sfx/sfx_1f_5e.tx"
+INCLUDE "music/sfx/sfx_1f_5f.tx"
+INCLUDE "music/sfx/sfx_1f_60.tx"
+INCLUDE "music/sfx/sfx_1f_61.tx"
+INCLUDE "music/sfx/sfx_1f_62.tx"
+INCLUDE "music/sfx/sfx_1f_63.tx"
+INCLUDE "music/sfx/sfx_1f_64.tx"
+INCLUDE "music/sfx/sfx_1f_65.tx"
+INCLUDE "music/sfx/sfx_1f_66.tx"
+INCLUDE "music/sfx/sfx_1f_67.tx"
+INCLUDE "music/sfx/sfx_1f_unused.tx"
+INCLUDE "music/sfx/sfx_1f_1d.tx"
+INCLUDE "music/sfx/sfx_1f_37.tx"
+INCLUDE "music/sfx/sfx_1f_38.tx"
+INCLUDE "music/sfx/sfx_1f_25.tx"
+INCLUDE "music/sfx/sfx_1f_39.tx"
+INCLUDE "music/sfx/sfx_1f_17.tx"
+INCLUDE "music/sfx/sfx_1f_23.tx"
+INCLUDE "music/sfx/sfx_1f_24.tx"
+INCLUDE "music/sfx/sfx_1f_14.tx"
+INCLUDE "music/sfx/sfx_1f_22.tx"
+INCLUDE "music/sfx/sfx_1f_1a.tx"
+INCLUDE "music/sfx/sfx_1f_1b.tx"
+INCLUDE "music/sfx/sfx_1f_19.tx"
+INCLUDE "music/sfx/sfx_1f_1f.tx"
+INCLUDE "music/sfx/sfx_1f_20.tx"
+INCLUDE "music/sfx/sfx_1f_16.tx"
+INCLUDE "music/sfx/sfx_1f_21.tx"
+INCLUDE "music/sfx/sfx_1f_15.tx"
+INCLUDE "music/sfx/sfx_1f_1e.tx"
+INCLUDE "music/sfx/sfx_1f_1c.tx"
+INCLUDE "music/sfx/sfx_1f_18.tx"
+INCLUDE "music/sfx/sfx_1f_2d.tx"
+INCLUDE "music/sfx/sfx_1f_2a.tx"
+INCLUDE "music/sfx/sfx_1f_2f.tx"
+INCLUDE "music/sfx/sfx_1f_26.tx"
+INCLUDE "music/sfx/sfx_1f_27.tx"
+INCLUDE "music/sfx/sfx_1f_28.tx"
+INCLUDE "music/sfx/sfx_1f_32.tx"
+INCLUDE "music/sfx/sfx_1f_29.tx"
+INCLUDE "music/sfx/sfx_1f_2b.tx"
+INCLUDE "music/sfx/sfx_1f_30.tx"
+INCLUDE "music/sfx/sfx_1f_2e.tx"
+INCLUDE "music/sfx/sfx_1f_31.tx"
+INCLUDE "music/sfx/sfx_1f_2c.tx"
+INCLUDE "music/sfx/sfx_1f_33.tx"
+INCLUDE "music/sfx/sfx_1f_34.tx"
+INCLUDE "music/sfx/sfx_1f_35.tx"
+INCLUDE "music/sfx/sfx_1f_36.tx"
-INCBIN "baserom.gbc",$7c490,$7d13b - $7c490
-
-; known jump sources: 441b0 (11:41b0)
Func_7d13b: ; 7d13b (1f:513b)
ld a, [$FF00+$dc]
ld c, $0
- ld hl, Unknown_7d170 ; $5170
-.asm_7d142
+ ld hl, OwnedMonValues
+.getSfxPointer
cp [hl]
- jr c, .asm_7d149
+ jr c, .gotSfxPointer
inc c
inc hl
- jr .asm_7d142
-.asm_7d149
+ jr .getSfxPointer
+.gotSfxPointer
push bc
ld a, $ff
ld [$c0ee], a
call PlaySoundWaitForCurrent
pop bc
ld b, $0
- ld hl, Unknown_7d162 ; $5162
+ ld hl, PokedexRatingSfxPointers
add hl, bc
add hl, bc
ld a, [hli]
@@ -108977,29 +111332,42 @@ Func_7d13b: ; 7d13b (1f:513b)
call PlayMusic
jp Func_2307
-Unknown_7d162: ; 7d162 (1f:5162)
-INCBIN "baserom.gbc",$7d162,$7d170 - $7d162
-
-Unknown_7d170: ; 7d170 (1f:5170)
-INCBIN "baserom.gbc",$7d170,$7d177 - $7d170
+PokedexRatingSfxPointers: ; 7d162 (1f:5162)
+ db (SFX_1f_51 - $4000) / 3
+ db BANK(SFX_1f_51)
+ db (SFX_02_41 - $4000) / 3
+ db BANK(SFX_02_41)
+ db (SFX_02_3a - $4000) / 3
+ db BANK(SFX_02_3a)
+ db (SFX_08_46 - $4000) / 3
+ db BANK(SFX_08_46)
+ db (SFX_08_3a - $4000) / 3
+ db BANK(SFX_08_3a)
+ db (SFX_02_42 - $4000) / 3
+ db BANK(SFX_02_42)
+ db (SFX_02_3b - $4000) / 3
+ db BANK(SFX_02_3b)
+
+OwnedMonValues: ; 7d170 (1f:5170)
+ db 10, 40, 60, 90, 120, 150, $ff
Func_7d177: ; 7d177 (1f:5177)
- ld c, $0
-.asm_7d179
+ ld c, CH0
+.loop
ld b, $0
ld hl, $c026
add hl, bc
ld a, [hl]
and a
- jr z, .asm_7d1a5
+ jr z, .nextChannel
ld a, c
- cp $4
- jr nc, .asm_7d1a2
+ cp CH4
+ jr nc, .applyAffects ; if sfx channel
ld a, [$c002]
and a
- jr z, .asm_7d1a2
+ jr z, .applyAffects
bit 7, a
- jr nz, .asm_7d1a5
+ jr nz, .nextChannel
set 7, a
ld [$c002], a
xor a
@@ -109007,122 +111375,130 @@ Func_7d177: ; 7d177 (1f:5177)
ld [$FF00+$1a], a
ld a, $80
ld [$FF00+$1a], a
- jr .asm_7d1a5
-.asm_7d1a2
- call Func_7d1ac
-.asm_7d1a5
+ jr .nextChannel
+.applyAffects
+ call Music1f_Music2_ApplyMusicAffects
+.nextChannel
ld a, c
- inc c
- cp $7
- jr nz, .asm_7d179
+ inc c ; inc channel number
+ cp CH7
+ jr nz, .loop
ret
-; known jump sources: 7d1a2 (1f:51a2)
-Func_7d1ac: ; 7d1ac (1f:51ac)
+; this routine checks flags for music effects currently applied
+; to the channel and calls certain functions based on flags.
+; known flags for $c02e:
+; 1: call has been used
+; 3: a toggle used only by this routine for vibrato
+; 4: pitchbend flag
+; 6: dutycycle flag
+Music1f_Music2_ApplyMusicAffects: ; 7d1ac (1f:51ac)
ld b, $0
- ld hl, $c0b6
+ ld hl, $c0b6 ; delay until next note
add hl, bc
ld a, [hl]
- cp $1
- jp z, Func_7d244
- dec a
+ cp $1 ; if delay is 1, play next note
+ jp z, Music1f_Music2_PlayNextNote
+ dec a ; otherwise, decrease the delay timer
ld [hl], a
ld a, c
- cp $4
- jr nc, .asm_7d1c8
+ cp CH4
+ jr nc, .startChecks ; if a sfx channel
ld hl, $c02a
add hl, bc
ld a, [hl]
and a
- jr z, .asm_7d1c8
+ jr z, .startChecks
ret
-.asm_7d1c8
+.startChecks
ld hl, $c02e
add hl, bc
- bit 6, [hl]
- jr z, .asm_7d1d3
- call Func_7d881
-.asm_7d1d3
+ bit 6, [hl] ; dutycycle
+ jr z, .checkForExecuteMusic
+ call Music1f_ApplyDutyCycle
+.checkForExecuteMusic
ld b, $0
ld hl, $c036
add hl, bc
bit 0, [hl]
- jr nz, .asm_7d1e5
+ jr nz, .checkForPitchBend
ld hl, $c02e
add hl, bc
bit 2, [hl]
- jr nz, .asm_7d1f9
-.asm_7d1e5
+ jr nz, .disablePitchBendVibrato
+.checkForPitchBend
ld hl, $c02e
add hl, bc
- bit 4, [hl]
- jr z, .asm_7d1f0
- jp Func_7d76d
-.asm_7d1f0
- ld hl, $c04e
+ bit 4, [hl] ; pitchbend
+ jr z, .checkVibratoDelay
+ jp Music1f_ApplyPitchBend
+.checkVibratoDelay
+ ld hl, $c04e ; vibrato delay
add hl, bc
ld a, [hl]
- and a
- jr z, .asm_7d1fa
- dec [hl]
-.asm_7d1f9
+ and a ; check if delay is over
+ jr z, .checkForVibrato
+ dec [hl] ; otherwise, dec delay
+.disablePitchBendVibrato
ret
-.asm_7d1fa
- ld hl, $c056
+.checkForVibrato
+ ld hl, $c056 ; vibrato rate
add hl, bc
ld a, [hl]
and a
- jr nz, .asm_7d203
- ret
-.asm_7d203
+ jr nz, .vibrato
+ ret ; no vibrato
+.vibrato
ld d, a
ld hl, $c05e
add hl, bc
ld a, [hl]
and $f
and a
- jr z, .asm_7d210
- dec [hl]
+ jr z, .vibratoAlreadyDone
+ dec [hl] ; apply vibrato pitch change
ret
-.asm_7d210
+.vibratoAlreadyDone
ld a, [hl]
swap [hl]
or [hl]
- ld [hl], a
+ ld [hl], a ; reset the vibrato value and start again
ld hl, $c066
add hl, bc
- ld e, [hl]
+ ld e, [hl] ; get note pitch
ld hl, $c02e
add hl, bc
- bit 3, [hl]
- jr z, .asm_7d230
+ bit 3, [hl] ; this is the only code that sets/resets bit three so
+ jr z, .unset ; it continuously alternates which path it takes
res 3, [hl]
ld a, d
and $f
ld d, a
ld a, e
sub d
- jr nc, .asm_7d22e
+ jr nc, .noCarry
ld a, $0
-.asm_7d22e
- jr .asm_7d23c
-.asm_7d230
+.noCarry
+ jr .done
+.unset
set 3, [hl]
ld a, d
and $f0
swap a
add e
- jr nc, .asm_7d23c
+ jr nc, .done
ld a, $ff
-.asm_7d23c
+.done
ld d, a
ld b, $3
call Func_7d8ac
ld [hl], d
ret
-; known jump sources: 7d1b5 (1f:51b5)
-Func_7d244: ; 7d244 (1f:5244)
+; this routine executes all music commands that take up no time,
+; like tempo changes, duty changes etc. and doesn't return
+; until the first note is reached
+Music1f_Music2_PlayNextNote: ; 7d244 (1f:5244)
ld hl, $c06e
add hl, bc
ld a, [hl]
@@ -109133,36 +111509,35 @@ Func_7d244: ; 7d244 (1f:5244)
add hl, bc
res 4, [hl]
res 5, [hl]
- call Func_7d25a
+ call Music1f_endchannel
ret
-; known jump sources: 7d256 (1f:5256), 7d2b0 (1f:52b0), 7d31a (1f:531a), 7d33c (1f:533c), 7d355 (1f:5355), 7d394 (1f:5394), 7d3a6 (1f:53a6), 7d3de (1f:53de), 7d42b (1f:542b), 7d46b (1f:546b), 7d478 (1f:5478), 7d497 (1f:5497), 7d4b5 (1f:54b5), 7d4c1 (1f:54c1), 7d4d0 (1f:54d0), 7d4e3 (1f:54e3), 7d54c (1f:554c)
-Func_7d25a: ; 7d25a (1f:525a)
- call Func_7d899
+Music1f_endchannel: ; 7d25a (1f:525a)
+ call Music1f_GetNextMusicByte
ld d, a
- cp $ff
- jp nz, Func_7d2e8
- ld b, $0
+ cp $ff ; is this command an endchannel?
+ jp nz, Music1f_callchannel ; no
+ ld b, $0 ; yes
ld hl, $c02e
add hl, bc
bit 1, [hl]
- jr nz, .asm_7d298
+ jr nz, .returnFromCall
ld a, c
- cp $3
- jr nc, .asm_7d274
+ cp CH3
+ jr nc, .noiseOrSfxChannel
jr .asm_7d2b3
-.asm_7d274
+.noiseOrSfxChannel
res 2, [hl]
ld hl, $c036
add hl, bc
res 0, [hl]
- cp $6
- jr nz, .asm_7d288
+ cp CH6
+ jr nz, .notSfxChannel3
ld a, $0
ld [$FF00+$1a], a
ld a, $80
ld [$FF00+$1a], a
-.asm_7d288
+.notSfxChannel3
jr nz, .asm_7d296
ld a, [$c003]
and a
@@ -109172,7 +111547,7 @@ Func_7d25a: ; 7d25a (1f:525a)
jr .asm_7d2b3
.asm_7d296
jr .asm_7d2bc
-.asm_7d298
+.returnFromCall
res 1, [hl]
ld d, $0
ld a, c
@@ -109180,7 +111555,7 @@ Func_7d25a: ; 7d25a (1f:525a)
ld e, a
ld hl, $c006
add hl, de
- push hl
+ push hl ; store current channel address
ld hl, $c016
add hl, de
ld e, l
@@ -109190,10 +111565,10 @@ Func_7d25a: ; 7d25a (1f:525a)
ld [hli], a
inc de
ld a, [de]
- ld [hl], a
- jp Func_7d25a
+ ld [hl], a ; loads channel address to return to
+ jp Music1f_endchannel
.asm_7d2b3
- ld hl, Unknown_7db93 ; $5b93
+ ld hl, Unknown_7db93
add hl, bc
ld a, [$FF00+$25]
and [hl]
@@ -109211,7 +111586,7 @@ Func_7d25a: ; 7d25a (1f:525a)
jr .asm_7d2e2
.asm_7d2d0
ld a, c
- cp $4
+ cp CH4
jr z, .asm_7d2d9
call Func_7d73b
ret c
@@ -109226,17 +111601,16 @@ Func_7d25a: ; 7d25a (1f:525a)
ld [hl], b
ret
-; known jump sources: 7d260 (1f:5260)
-Func_7d2e8: ; 7d2e8 (1f:52e8)
- cp $fd
- jp nz, Func_7d31d
- call Func_7d899
+Music1f_callchannel: ; 7d2e8 (1f:52e8)
+ cp $fd ; is this command a callchannel?
+ jp nz, Music1f_loopchannel ; no
+ call Music1f_GetNextMusicByte ; yes
push af
- call Func_7d899
+ call Music1f_GetNextMusicByte
ld d, a
pop af
ld e, a
- push de
+ push de ; store pointer
ld d, $0
ld a, c
add a
@@ -109253,43 +111627,43 @@ Func_7d2e8: ; 7d2e8 (1f:52e8)
ld [de], a
inc de
ld a, [hld]
- ld [de], a
+ ld [de], a ; copy current channel address
pop de
ld [hl], e
inc hl
- ld [hl], d
+ ld [hl], d ; overwrite current address with pointer
ld b, $0
ld hl, $c02e
add hl, bc
- set 1, [hl]
- jp Func_7d25a
+ set 1, [hl] ; set the call flag
+ jp Music1f_endchannel
-; known jump sources: 7d2ea (1f:52ea)
-Func_7d31d: ; 7d31d (1f:531d)
- cp $fe
- jp nz, Func_7d358
- call Func_7d899
+Music1f_loopchannel: ; 7d31d (1f:531d)
+ cp $fe ; is this command a loopchannel?
+ jp nz, Music1f_notetype ; no
+ call Music1f_GetNextMusicByte ; yes
ld e, a
and a
- jr z, .asm_7d341
+ jr z, .infiniteLoop
ld b, $0
ld hl, $c0be
add hl, bc
ld a, [hl]
cp e
- jr nz, .asm_7d33f
- ld a, $1
+ jr nz, .loopAgain
+ ld a, $1 ; if no more loops to make
ld [hl], a
- call Func_7d899
- call Func_7d899
- jp Func_7d25a
-.asm_7d33f
+ call Music1f_GetNextMusicByte ; skip pointer
+ call Music1f_GetNextMusicByte
+ jp Music1f_endchannel
+.loopAgain ; inc loop count
inc a
ld [hl], a
-.asm_7d341
- call Func_7d899
+ ; fall through
+.infiniteLoop ; overwrite current address with pointer
+ call Music1f_GetNextMusicByte
push af
- call Func_7d899
+ call Music1f_GetNextMusicByte
ld b, a
ld d, $0
ld a, c
@@ -109300,73 +111674,76 @@ Func_7d31d: ; 7d31d (1f:531d)
pop af
ld [hli], a
ld [hl], b
- jp Func_7d25a
+ jp Music1f_endchannel
-; known jump sources: 7d31f (1f:531f)
-Func_7d358: ; 7d358 (1f:5358)
+Music1f_notetype: ; 7d358 (1f:5358)
and $f0
- cp $d0
- jp nz, Func_7d397
- ld a, d
+ cp $d0 ; is this command a notetype?
+ jp nz, Music1f_togglecall ; no
+ ld a, d ; yes
and $f
ld b, $0
ld hl, $c0c6
add hl, bc
- ld [hl], a
+ ld [hl], a ; store low nibble as speed
ld a, c
- cp $3
- jr z, .asm_7d394
- call Func_7d899
+ cp CH3
+ jr z, .noiseChannel ; noise channel has 0 params
+ call Music1f_GetNextMusicByte
ld d, a
ld a, c
- cp $2
- jr z, .asm_7d380
- cp $6
- jr nz, .asm_7d38d
+ cp CH2
+ jr z, .musicChannel3
+ cp CH6
+ jr nz, .notChannel3
ld hl, $c0e7
- jr .asm_7d383
-.asm_7d380
+ jr .sfxChannel3
+.musicChannel3
ld hl, $c0e6
-.asm_7d383
+.sfxChannel3
ld a, d
and $f
- ld [hl], a
+ ld [hl], a ; store low nibble of param as duty
ld a, d
and $30
sla a
ld d, a
-.asm_7d38d
+ ; fall through
+
+ ; if channel 3, store high nibble as volume
+ ; else, store volume (high nibble) and fade (low nibble)
+.notChannel3
ld b, $0
ld hl, $c0de
add hl, bc
ld [hl], d
-.asm_7d394
- jp Func_7d25a
+.noiseChannel
+ jp Music1f_endchannel
-; known jump sources: 7d35c (1f:535c)
-Func_7d397: ; 7d397 (1f:5397)
+Music1f_togglecall: ; 7d397 (1f:5397)
ld a, d
- cp $e8
- jr nz, .asm_7d3a9
- ld b, $0
+ cp $e8 ; is this command an togglecall?
+ jr nz, Music1f_vibrato ; no
+ ld b, $0 ; yes
ld hl, $c02e
add hl, bc
ld a, [hl]
xor $1
- ld [hl], a
- jp Func_7d25a
-.asm_7d3a9
- cp $ea
- jr nz, .asm_7d3e1
- call Func_7d899
+ ld [hl], a ; flip bit 0 of $c02e (toggle returning from call)
+ jp Music1f_endchannel
+
+Music1f_vibrato: ; 7d3a9 (1f:53a9)
+ cp $ea ; is this command a vibrato?
+ jr nz, Music1f_pitchbend ; no
+ call Music1f_GetNextMusicByte ; yes
ld b, $0
ld hl, $c04e
add hl, bc
- ld [hl], a
+ ld [hl], a ; store delay
ld hl, $c06e
add hl, bc
- ld [hl], a
- call Func_7d899
+ ld [hl], a ; store delay
+ call Music1f_GetNextMusicByte
ld d, a
and $f0
swap a
@@ -109378,7 +111755,7 @@ Func_7d397: ; 7d397 (1f:5397)
adc b
swap a
or e
- ld [hl], a
+ ld [hl], a ; store rate as both high and low nibbles
ld a, d
and $f
ld d, a
@@ -109386,17 +111763,18 @@ Func_7d397: ; 7d397 (1f:5397)
add hl, bc
swap a
or d
- ld [hl], a
- jp Func_7d25a
-.asm_7d3e1
- cp $eb
- jr nz, .asm_7d419
- call Func_7d899
+ ld [hl], a ; store depth as both high and low nibbles
+ jp Music1f_endchannel
+
+Music1f_pitchbend: ; 7d3e1 (1f:53e1)
+ cp $eb ; is this command a pitchbend?
+ jr nz, Music1f_duty ; no
+ call Music1f_GetNextMusicByte ; yes
ld b, $0
ld hl, $c076
add hl, bc
- ld [hl], a
- call Func_7d899
+ ld [hl], a ; store first param
+ call Music1f_GetNextMusicByte
ld d, a
and $f0
swap a
@@ -109407,132 +111785,142 @@ Func_7d397: ; 7d397 (1f:5397)
ld b, $0
ld hl, $c0a6
add hl, bc
- ld [hl], d
+ ld [hl], d ; store unknown part of second param
ld hl, $c0ae
add hl, bc
- ld [hl], e
+ ld [hl], e ; store unknown part of second param
ld b, $0
ld hl, $c02e
add hl, bc
- set 4, [hl]
- call Func_7d899
+ set 4, [hl] ; set pitchbend flag
+ call Music1f_GetNextMusicByte
ld d, a
- jp Func_7d57e
-.asm_7d419
- cp $ec
- jr nz, .asm_7d42e
- call Func_7d899
+ jp Music1f_notelength
+
+Music1f_duty: ; 7d419 (1f:5419)
+ cp $ec ; is this command a duty?
+ jr nz, Music1f_tempo ; no
+ call Music1f_GetNextMusicByte ; yes
rrca
rrca
and $c0
ld b, $0
ld hl, $c03e
add hl, bc
- ld [hl], a
- jp Func_7d25a
-.asm_7d42e
- cp $ed
- jr nz, .asm_7d46e
- ld a, c
- cp $4
- jr nc, .asm_7d452
- call Func_7d899
- ld [$c0e8], a
- call Func_7d899
- ld [$c0e9], a
- xor a
- ld [$c0ce], a
+ ld [hl], a ; store duty
+ jp Music1f_endchannel
+
+Music1f_tempo: ; 7d42e (1f:542e)
+ cp $ed ; is this command a tempo?
+ jr nz, Music1f_unknownmusic0xee ; no
+ ld a, c ; yes
+ cp CH4
+ jr nc, .sfxChannel
+ call Music1f_GetNextMusicByte
+ ld [$c0e8], a ; store first param
+ call Music1f_GetNextMusicByte
+ ld [$c0e9], a ; store second param
+ xor a
+ ld [$c0ce], a ; clear RAM
ld [$c0cf], a
ld [$c0d0], a
ld [$c0d1], a
- jr .asm_7d46b
-.asm_7d452
- call Func_7d899
- ld [$c0ea], a
- call Func_7d899
- ld [$c0eb], a
- xor a
- ld [$c0d2], a
+ jr .musicChannelDone
+.sfxChannel
+ call Music1f_GetNextMusicByte
+ ld [$c0ea], a ; store first param
+ call Music1f_GetNextMusicByte
+ ld [$c0eb], a ; store second param
+ xor a
+ ld [$c0d2], a ; clear RAM
ld [$c0d3], a
ld [$c0d4], a
ld [$c0d5], a
-.asm_7d46b
- jp Func_7d25a
-.asm_7d46e
- cp $ee
- jr nz, .asm_7d47b
- call Func_7d899
- ld [$c004], a
- jp Func_7d25a
-.asm_7d47b
- cp $ef
- jr nz, .asm_7d49a
- call Func_7d899
+.musicChannelDone
+ jp Music1f_endchannel
+
+Music1f_unknownmusic0xee: ; 7d46e (1f:546e)
+ cp $ee ; is this command an unknownmusic0xee?
+ jr nz, Music1f_unknownmusic0xef ; no
+ call Music1f_GetNextMusicByte ; yes
+ ld [$c004], a ; store first param
+ jp Music1f_endchannel
+
+; this appears to never be used
+Music1f_unknownmusic0xef: ; 7d47b (1f:547b)
+ cp $ef ; is this command an unknownmusic0xef?
+ jr nz, Music1f_dutycycle ; no
+ call Music1f_GetNextMusicByte ; yes
push bc
call Func_7d8ea
pop bc
ld a, [$c003]
and a
- jr nz, .asm_7d497
+ jr nz, .skip
ld a, [$c02d]
ld [$c003], a
xor a
ld [$c02d], a
-.asm_7d497
- jp Func_7d25a
-.asm_7d49a
- cp $fc
- jr nz, .asm_7d4b8
- call Func_7d899
+.skip
+ jp Music1f_endchannel
+
+Music1f_dutycycle: ; 7d49a (1f:549a)
+ cp $fc ; is this command a dutycycle?
+ jr nz, Music1f_stereopanning ; no
+ call Music1f_GetNextMusicByte ; yes
ld b, $0
ld hl, $c046
add hl, bc
- ld [hl], a
+ ld [hl], a ; store full cycle
and $c0
ld hl, $c03e
add hl, bc
- ld [hl], a
+ ld [hl], a ; store first duty
ld hl, $c02e
add hl, bc
- set 6, [hl]
- jp Func_7d25a
-.asm_7d4b8
- cp $f0
- jr nz, .asm_7d4c4
- call Func_7d899
- ld [$FF00+$24], a
- jp Func_7d25a
-.asm_7d4c4
- cp $f8
- jr nz, .asm_7d4d3
- ld b, $0
+ set 6, [hl] ; set duty flag
+ jp Music1f_endchannel
+
+Music1f_stereopanning: ; 7d4b8 (1f:54b8)
+ cp $f0 ; is this command a stereopanning?
+ jr nz, Music1f_executemusic ; no
+ call Music1f_GetNextMusicByte ; yes
+ ld [$FF00+$24], a ; store stereopanning
+ jp Music1f_endchannel
+
+Music1f_executemusic: ; 7d4c4 (1f:54c4)
+ cp $f8 ; is this command an executemusic?
+ jr nz, Music1f_octave ; no
+ ld b, $0 ; yes
ld hl, $c036
add hl, bc
set 0, [hl]
- jp Func_7d25a
-.asm_7d4d3
+ jp Music1f_endchannel
+
+Music1f_octave: ; 7d4d3 (1f:54d3)
and $f0
- cp $e0
- jr nz, .asm_7d4e6
- ld hl, $c0d6
+ cp $e0 ; is this command an octave?
+ jr nz, Music1f_unknownsfx0x20 ; no
+ ld hl, $c0d6 ; yes
ld b, $0
add hl, bc
ld a, d
and $f
- ld [hl], a
- jp Func_7d25a
-.asm_7d4e6
- cp $20
- jr nz, .asm_7d533
+ ld [hl], a ; store low nibble as octave
+ jp Music1f_endchannel
+
+Music1f_unknownsfx0x20: ; 7d4e6 (1f:54e6)
+ cp $20 ; is this command an unknownsfx0x20?
+ jr nz, Music1f_unknownsfx0x10 ; no
ld a, c
- cp $3
- jr c, .asm_7d533
+ cp CH3 ; is this a noise or sfx channel?
+ jr c, Music1f_unknownsfx0x10 ; no
ld b, $0
ld hl, $c036
add hl, bc
bit 0, [hl]
- jr nz, .asm_7d533
- call Func_7d57e
+ jr nz, Music1f_unknownsfx0x10 ; no
+ call Music1f_notelength ; yes
ld d, a
ld b, $0
ld hl, $c03e
@@ -109543,21 +111931,21 @@ Func_7d397: ; 7d397 (1f:5397)
ld b, $1
call Func_7d8ac
ld [hl], d
- call Func_7d899
+ call Music1f_GetNextMusicByte
ld d, a
ld b, $2
call Func_7d8ac
ld [hl], d
- call Func_7d899
+ call Music1f_GetNextMusicByte
ld e, a
ld a, c
- cp $7
+ cp CH7
ld a, $0
- jr z, .asm_7d526
+ jr z, .sfxNoiseChannel ; only two params for noise channel
push de
- call Func_7d899
+ call Music1f_GetNextMusicByte
pop de
-.asm_7d526
+.sfxNoiseChannel
ld d, a
push de
call Func_7d69d
@@ -109565,30 +111953,32 @@ Func_7d397: ; 7d397 (1f:5397)
pop de
call Func_7d6bf
ret
-.asm_7d533
+
+Music1f_unknownsfx0x10 ; 7d533 (1f:5533)
ld a, c
- cp $4
- jr c, .asm_7d54f
+ cp CH4
+ jr c, Music1f_note ; if not a sfx
ld a, d
- cp $10
- jr nz, .asm_7d54f
+ cp $10 ; is this command an unknownsfx0x10?
+ jr nz, Music1f_note ; no
ld b, $0
ld hl, $c036
add hl, bc
bit 0, [hl]
- jr nz, .asm_7d54f
- call Func_7d899
+ jr nz, Music1f_note ; no
+ call Music1f_GetNextMusicByte ; yes
ld [$FF00+$10], a
- jp Func_7d25a
-.asm_7d54f
+ jp Music1f_endchannel
+
+Music1f_note: ; 7d54f (1f:554f)
ld a, c
- cp $3
- jr nz, Func_7d57e
+ cp CH3
+ jr nz, Music1f_notelength ; if not noise channel
ld a, d
and $f0
- cp $b0
- jr z, .asm_7d569
- jr nc, Func_7d57e
+ cp $b0 ; is this command a dnote?
+ jr z, Music1f_dnote ; yes
+ jr nc, Music1f_notelength ; no
swap a
ld b, a
ld a, d
@@ -109597,14 +111987,15 @@ Func_7d397: ; 7d397 (1f:5397)
ld a, b
push de
push bc
- jr .asm_7d571
-.asm_7d569
+ jr asm_7d571
+
+Music1f_dnote: ; 7d569 (1f:5569)
ld a, d
and $f
push af
push bc
- call Func_7d899
-.asm_7d571
+ call Music1f_GetNextMusicByte ; get dnote instrument
+asm_7d571
ld d, a
ld a, [$c003]
and a
@@ -109615,14 +112006,13 @@ Func_7d397: ; 7d397 (1f:5397)
pop bc
pop de
-; known jump sources: 7d416 (1f:5416), 7d4f9 (1f:54f9), 7d552 (1f:5552), 7d55b (1f:555b)
-Func_7d57e: ; 7d57e (1f:557e)
+Music1f_notelength: ; 7d57e (1f:557e)
ld a, d
push af
and $f
inc a
ld b, $0
- ld e, a
+ ld e, a ; store note length (in 16ths)
ld d, b
ld hl, $c0c6
add hl, bc
@@ -109630,24 +112020,24 @@ Func_7d57e: ; 7d57e (1f:557e)
ld l, b
call Func_7d8bb
ld a, c
- cp $4
- jr nc, .asm_7d59f
+ cp CH4
+ jr nc, .sfxChannel
ld a, [$c0e8]
ld d, a
ld a, [$c0e9]
ld e, a
- jr .asm_7d5b2
-.asm_7d59f
+ jr .skip
+.sfxChannel
ld d, $1
ld e, $0
- cp $7
- jr z, .asm_7d5b2
+ cp CH7
+ jr z, .skip ; if noise channel
call Func_7d707
ld a, [$c0ea]
ld d, a
ld a, [$c0eb]
ld e, a
-.asm_7d5b2
+.skip
ld a, l
ld b, $0
ld hl, $c0ce
@@ -109666,41 +112056,43 @@ Func_7d57e: ; 7d57e (1f:557e)
ld hl, $c036
add hl, bc
bit 0, [hl]
- jr nz, .asm_7d5dc
+ jr nz, Music1f_notepitch
ld hl, $c02e
add hl, bc
bit 2, [hl]
- jr z, .asm_7d5dc
+ jr z, Music1f_notepitch
pop hl
ret
-.asm_7d5dc
+
+Music1f_notepitch: ; 7d5dc (1f:55dc)
pop af
and $f0
- cp $c0
- jr nz, .asm_7d613
+ cp $c0 ; compare to rest
+ jr nz, .notRest
ld a, c
- cp $4
- jr nc, .asm_7d5f0
+ cp CH4
+ jr nc, .sfxChannel
ld hl, $c02a
add hl, bc
ld a, [hl]
and a
- jr nz, .asm_7d612
-.asm_7d5f0
+ jr nz, .quit
+ ; fall through
+.sfxChannel
ld a, c
- cp $2
- jr z, .asm_7d5f9
- cp $6
- jr nz, .asm_7d606
-.asm_7d5f9
+ cp CH2
+ jr z, .musicChannel3
+ cp CH6
+ jr nz, .notSfxChannel3
+.musicChannel3
ld b, $0
- ld hl, Unknown_7db93 ; $5b93
+ ld hl, Unknown_7db93
add hl, bc
ld a, [$FF00+$25]
and [hl]
ld [$FF00+$25], a
- jr .asm_7d612
-.asm_7d606
+ jr .quit
+.notSfxChannel3
ld b, $2
call Func_7d8ac
ld a, $8
@@ -109708,9 +112100,9 @@ Func_7d57e: ; 7d57e (1f:557e)
inc hl
ld a, $80
ld [hl], a
-.asm_7d612
+.quit
ret
-.asm_7d613
+.notRest
swap a
ld b, $0
ld hl, $c0d6
@@ -109726,20 +112118,20 @@ Func_7d57e: ; 7d57e (1f:557e)
.asm_7d62c
push de
ld a, c
- cp $4
- jr nc, .asm_7d641
+ cp CH4
+ jr nc, .skip ; if sfx Channel
ld hl, $c02a
ld d, $0
ld e, a
add hl, de
ld a, [hl]
and a
- jr nz, .asm_7d63f
- jr .asm_7d641
-.asm_7d63f
+ jr nz, .done
+ jr .skip
+.done
pop de
ret
-.asm_7d641
+.skip
ld b, $0
ld hl, $c0de
add hl, bc
@@ -109765,52 +112157,50 @@ Func_7d57e: ; 7d57e (1f:557e)
call Func_7d6bf
ret
-; known jump sources: 7d52b (1f:552b), 7d651 (1f:5651)
Func_7d66c: ; 7d66c (1f:566c)
ld b, $0
- ld hl, Unknown_7db9b ; $5b9b
+ ld hl, Unknown_7db9b
add hl, bc
ld a, [$FF00+$25]
or [hl]
ld d, a
ld a, c
- cp $7
- jr z, .asm_7d687
- cp $4
- jr nc, .asm_7d699
+ cp CH7
+ jr z, .sfxNoiseChannel
+ cp CH4
+ jr nc, .skip ; if sfx channel
ld hl, $c02a
add hl, bc
ld a, [hl]
and a
- jr nz, .asm_7d699
-.asm_7d687
+ jr nz, .skip
+.sfxNoiseChannel
ld a, [$c004]
- ld hl, Unknown_7db9b ; $5b9b
+ ld hl, Unknown_7db9b
add hl, bc
and [hl]
ld d, a
ld a, [$FF00+$25]
- ld hl, Unknown_7db93 ; $5b93
+ ld hl, Unknown_7db93
add hl, bc
and [hl]
or d
ld d, a
-.asm_7d699
+.skip
ld a, d
ld [$FF00+$25], a
ret
-; known jump sources: 7d528 (1f:5528), 7d64e (1f:564e)
Func_7d69d: ; 7d69d (1f:569d)
ld b, $0
ld hl, $c0b6
add hl, bc
ld d, [hl]
ld a, c
- cp $2
- jr z, .asm_7d6b8
- cp $6
- jr z, .asm_7d6b8
+ cp CH2
+ jr z, .channel3 ; if music channel 3
+ cp CH6
+ jr z, .channel3 ; if sfx channel 3
ld a, d
and $3f
ld d, a
@@ -109819,31 +112209,31 @@ Func_7d69d: ; 7d69d (1f:569d)
ld a, [hl]
or d
ld d, a
-.asm_7d6b8
+.channel3
ld b, $1
call Func_7d8ac
ld [hl], d
ret
-; known jump sources: 7d52f (1f:552f), 7d668 (1f:5668)
Func_7d6bf: ; 7d6bf (1f:56bf)
ld a, c
- cp $2
- jr z, .asm_7d6c8
- cp $6
- jr nz, .asm_7d6f5
-.asm_7d6c8
+ cp CH2
+ jr z, .channel3
+ cp CH6
+ jr nz, .notSfxChannel3
+ ; fall through
+.channel3
push de
ld de, $c0e6
- cp $2
- jr z, .asm_7d6d3
+ cp CH2
+ jr z, .musicChannel3
ld de, $c0e7
-.asm_7d6d3
+.musicChannel3
ld a, [de]
add a
ld d, $0
ld e, a
- ld hl, Unknown_7c361 ; $4361
+ ld hl, Music1f_Channel3DutyPointers
add hl, de
ld e, [hl]
inc hl
@@ -109852,18 +112242,18 @@ Func_7d6bf: ; 7d6bf (1f:56bf)
ld b, $f
ld a, $0
ld [$FF00+$1a], a
-.asm_7d6e8
+.loop
ld a, [de]
inc de
ld [hli], a
ld a, b
dec b
and a
- jr nz, .asm_7d6e8
+ jr nz, .loop
ld a, $80
ld [$FF00+$1a], a
pop de
-.asm_7d6f5
+.notSfxChannel3
ld a, d
or $80
and $c7
@@ -109876,7 +112266,6 @@ Func_7d6bf: ; 7d6bf (1f:56bf)
call Func_7d729
ret
-; known jump sources: 7d5a7 (1f:55a7)
Func_7d707: ; 7d707 (1f:5707)
call Func_7d759
jr nc, .asm_7d71f
@@ -109898,7 +112287,6 @@ Func_7d707: ; 7d707 (1f:5707)
.asm_7d728
ret
-; known jump sources: 7d703 (1f:5703)
Func_7d729: ; 7d729 (1f:5729)
call Func_7d759
jr nc, .asm_7d73a
@@ -109915,7 +112303,6 @@ Func_7d729: ; 7d729 (1f:5729)
.asm_7d73a
ret
-; known jump sources: 7d2d5 (1f:52d5)
Func_7d73b: ; 7d73b (1f:573b)
call Func_7d759
jr nc, .asm_7d756
@@ -109939,7 +112326,6 @@ Func_7d73b: ; 7d73b (1f:573b)
ccf
ret
-; known jump sources: 7d707 (1f:5707), 7d729 (1f:5729), 7d73b (1f:573b)
Func_7d759: ; 7d759 (1f:5759)
ld a, [$c02a]
cp $14
@@ -109957,12 +112343,11 @@ Func_7d759: ; 7d759 (1f:5759)
scf
ret
-; known jump sources: 7d1ed (1f:51ed)
-Func_7d76d: ; 7d76d (1f:576d)
+Music1f_ApplyPitchBend: ; 7d76d (1f:576d)
ld hl, $c02e
add hl, bc
bit 5, [hl]
- jp nz, Func_7d7b4
+ jp nz, .asm_7d7b4
ld hl, $c09e
add hl, bc
ld e, [hl]
@@ -109995,17 +112380,15 @@ Func_7d76d: ; 7d76d (1f:576d)
add hl, bc
ld a, [hl]
cp d
- jp c, Func_7d7fa
- jr nz, asm_7d7e7
+ jp c, .asm_7d7fa
+ jr nz, .asm_7d7e7
ld hl, $c0ae
add hl, bc
ld a, [hl]
cp e
- jp c, Func_7d7fa
- jr asm_7d7e7
-
-; known jump sources: 7d773 (1f:5773)
-Func_7d7b4: ; 7d7b4 (1f:57b4)
+ jp c, .asm_7d7fa
+ jr .asm_7d7e7
+.asm_7d7b4
ld hl, $c09e
add hl, bc
ld a, [hl]
@@ -110035,14 +112418,14 @@ Func_7d7b4: ; 7d7b4 (1f:57b4)
add hl, bc
ld a, d
cp [hl]
- jr c, Func_7d7fa
- jr nz, asm_7d7e7
+ jr c, .asm_7d7fa
+ jr nz, .asm_7d7e7
ld hl, $c0ae
add hl, bc
ld a, e
cp [hl]
- jr c, Func_7d7fa
-asm_7d7e7: ; 7d7e7 (1f:57e7)
+ jr c, .asm_7d7fa
+.asm_7d7e7
ld hl, $c09e
add hl, bc
ld [hl], e
@@ -110055,16 +112438,13 @@ asm_7d7e7: ; 7d7e7 (1f:57e7)
ld [hli], a
ld [hl], d
ret
-
-; known jump sources: 7d7a4 (1f:57a4), 7d7af (1f:57af), 7d7db (1f:57db), 7d7e5 (1f:57e5)
-Func_7d7fa: ; 7d7fa (1f:57fa)
+.asm_7d7fa
ld hl, $c02e
add hl, bc
res 4, [hl]
res 5, [hl]
ret
-; known jump sources: 7d629 (1f:5629)
Func_7d803: ; 7d803 (1f:5803)
ld hl, $c096
add hl, bc
@@ -110154,8 +112534,7 @@ Func_7d803: ; 7d803 (1f:5803)
ld [hl], a
ret
-; known jump sources: 7d1d0 (1f:51d0)
-Func_7d881: ; 7d881 (1f:5881)
+Music1f_ApplyDutyCycle: ; 7d881 (1f:5881)
ld b, $0
ld hl, $c046
add hl, bc
@@ -110173,8 +112552,7 @@ Func_7d881: ; 7d881 (1f:5881)
ld [hl], a
ret
-; known jump sources: 7d25a (1f:525a), 7d2ed (1f:52ed), 7d2f1 (1f:52f1), 7d322 (1f:5322), 7d336 (1f:5336), 7d339 (1f:5339), 7d341 (1f:5341), 7d345 (1f:5345), 7d36e (1f:536e), 7d3ad (1f:53ad), 7d3bc (1f:53bc), 7d3e5 (1f:53e5), 7d3ef (1f:53ef), 7d412 (1f:5412), 7d41d (1f:541d), 7d437 (1f:5437), 7d43d (1f:543d), 7d452 (1f:5452), 7d458 (1f:5458), 7d472 (1f:5472), 7d47f (1f:547f), 7d49e (1f:549e), 7d4bc (1f:54bc), 7d50c (1f:550c), 7d516 (1f:5516), 7d522 (1f:5522), 7d547 (1f:5547), 7d56e (1f:556e)
-Func_7d899: ; 7d899 (1f:5899)
+Music1f_GetNextMusicByte: ; 7d899 (1f:5899)
ld d, $0
ld a, c
add a
@@ -110185,21 +112563,20 @@ Func_7d899: ; 7d899 (1f:5899)
ld e, a
ld a, [hld]
ld d, a
- ld a, [de]
+ ld a, [de] ; get next music command
inc de
- ld [hl], e
+ ld [hl], e ; store address of next command
inc hl
ld [hl], d
ret
-; known jump sources: 7d23f (1f:523f), 7d508 (1f:5508), 7d512 (1f:5512), 7d608 (1f:5608), 7d64a (1f:564a), 7d6ba (1f:56ba), 7d6fd (1f:56fd), 7d7f3 (1f:57f3), 7d890 (1f:5890)
Func_7d8ac: ; 7d8ac (1f:58ac)
ld a, c
- ld hl, Unknown_7db8b ; $5b8b
+ ld hl, Unknown_7db8b
add l
- jr nc, .asm_7d8b4
+ jr nc, .noCarry
inc h
-.asm_7d8b4
+.noCarry
ld l, a
ld a, [hl]
add b
@@ -110207,49 +112584,46 @@ Func_7d8ac: ; 7d8ac (1f:58ac)
ld h, $ff
ret
-; known jump sources: 7d58d (1f:558d), 7d5ba (1f:55ba)
Func_7d8bb: ; 7d8bb (1f:58bb)
ld h, $0
-.asm_7d8bd
+.loop
srl a
- jr nc, .asm_7d8c2
+ jr nc, .noCarry
add hl, de
-.asm_7d8c2
+.noCarry
sla e
rl d
and a
- jr z, .asm_7d8cb
- jr .asm_7d8bd
-.asm_7d8cb
+ jr z, .done
+ jr .loop
+.done
ret
-; known jump sources: 7d3fb (1f:53fb), 7d61c (1f:561c)
Func_7d8cc: ; 7d8cc (1f:58cc)
ld h, $0
ld l, a
add hl, hl
ld d, h
ld e, l
- ld hl, Unknown_7dba3 ; $5ba3
+ ld hl, Unknown_7dba3
add hl, de
ld e, [hl]
inc hl
ld d, [hl]
ld a, b
-.asm_7d8da
+.loop
cp $7
- jr z, .asm_7d8e5
+ jr z, .done
sra d
rr e
inc a
- jr .asm_7d8da
-.asm_7d8e5
+ jr .loop
+.done
ld a, $8
add d
ld d, a
ret
-; known jump sources: 7d483 (1f:5483), 7d579 (1f:5579)
Func_7d8ea: ; 7d8ea (1f:58ea)
ld [$c001], a
cp $ff
@@ -110269,53 +112643,53 @@ Func_7d8ea: ; 7d8ea (1f:58ea)
ld [$c0e7], a
ld d, $8
ld hl, $c016
- call Func_7dafd
+ call FillMusicRAM1f
ld hl, $c006
- call Func_7dafd
+ call FillMusicRAM1f
ld d, $4
ld hl, $c026
- call Func_7dafd
+ call FillMusicRAM1f
ld hl, $c02e
- call Func_7dafd
+ call FillMusicRAM1f
ld hl, $c03e
- call Func_7dafd
+ call FillMusicRAM1f
ld hl, $c046
- call Func_7dafd
+ call FillMusicRAM1f
ld hl, $c04e
- call Func_7dafd
+ call FillMusicRAM1f
ld hl, $c056
- call Func_7dafd
+ call FillMusicRAM1f
ld hl, $c05e
- call Func_7dafd
+ call FillMusicRAM1f
ld hl, $c066
- call Func_7dafd
+ call FillMusicRAM1f
ld hl, $c06e
- call Func_7dafd
+ call FillMusicRAM1f
ld hl, $c036
- call Func_7dafd
+ call FillMusicRAM1f
ld hl, $c076
- call Func_7dafd
+ call FillMusicRAM1f
ld hl, $c07e
- call Func_7dafd
+ call FillMusicRAM1f
ld hl, $c086
- call Func_7dafd
+ call FillMusicRAM1f
ld hl, $c08e
- call Func_7dafd
+ call FillMusicRAM1f
ld hl, $c096
- call Func_7dafd
+ call FillMusicRAM1f
ld hl, $c09e
- call Func_7dafd
+ call FillMusicRAM1f
ld hl, $c0a6
- call Func_7dafd
+ call FillMusicRAM1f
ld hl, $c0ae
- call Func_7dafd
+ call FillMusicRAM1f
ld a, $1
ld hl, $c0be
- call Func_7dafd
+ call FillMusicRAM1f
ld hl, $c0b6
- call Func_7dafd
+ call FillMusicRAM1f
ld hl, $c0c6
- call Func_7dafd
+ call FillMusicRAM1f
ld [$c0e8], a
ld a, $ff
ld [$c004], a
@@ -110333,7 +112707,6 @@ Func_7d8ea: ; 7d8ea (1f:58ea)
ld [$FF00+$24], a
jp Func_7db03
-; known jump sources: 7d8f4 (1f:58f4), 7d8f7 (1f:58f7), 7d8fe (1f:58fe)
Func_7d9c2: ; 7d9c2 (1f:59c2)
ld l, a
ld e, a
@@ -110341,7 +112714,7 @@ Func_7d9c2: ; 7d9c2 (1f:59c2)
ld d, h
add hl, hl
add hl, de
- ld de, Unknown_7c000 ; $4000
+ ld de, SFX_Headers_1f
add hl, de
ld a, h
ld [$c0ec], a
@@ -110352,9 +112725,7 @@ Func_7d9c2: ; 7d9c2 (1f:59c2)
rlca
rlca
ld c, a
-
-; known jump sources: 7daa5 (1f:5aa5)
-Func_7d9db: ; 7d9db (1f:59db)
+.asm_7d9db
ld d, c
ld a, c
add a
@@ -110485,9 +112856,8 @@ Func_7d9db: ; 7d9db (1f:59db)
and a
jp z, Func_7db03
dec c
- jp Func_7d9db
+ jp .asm_7d9db
-; known jump sources: 7d8ef (1f:58ef)
Func_7daa8: ; 7daa8 (1f:5aa8)
ld a, $80
ld [$FF00+$26], a
@@ -110516,27 +112886,26 @@ Func_7daa8: ; 7daa8 (1f:5aa8)
ld [$c0e7], a
ld d, $a0
ld hl, $c006
- call Func_7dafd
+ call FillMusicRAM1f
ld a, $1
ld d, $18
ld hl, $c0b6
- call Func_7dafd
+ call FillMusicRAM1f
ld [$c0e8], a
ld [$c0ea], a
ld a, $ff
ld [$c004], a
ret
-; known jump sources: 7d916 (1f:5916), 7d91c (1f:591c), 7d924 (1f:5924), 7d92a (1f:592a), 7d930 (1f:5930), 7d936 (1f:5936), 7d93c (1f:593c), 7d942 (1f:5942), 7d948 (1f:5948), 7d94e (1f:594e), 7d954 (1f:5954), 7d95a (1f:595a), 7d960 (1f:5960), 7d966 (1f:5966), 7d96c (1f:596c), 7d972 (1f:5972), 7d978 (1f:5978), 7d97e (1f:597e), 7d984 (1f:5984), 7d98a (1f:598a), 7d992 (1f:5992), 7d998 (1f:5998), 7d99e (1f:599e), 7dae4 (1f:5ae4), 7daee (1f:5aee)
-Func_7dafd: ; 7dafd (1f:5afd)
+; fills d bytes at hl with a
+FillMusicRAM1f: ; 7dafd (1f:5afd)
ld b, d
-.asm_7dafe
+.loop
ld [hli], a
dec b
- jr nz, .asm_7dafe
+ jr nz, .loop
ret
-; known jump sources: 7d9bf (1f:59bf), 7daa1 (1f:5aa1)
Func_7db03: ; 7db03 (1f:5b03)
ld a, [$c001]
ld l, a
@@ -110545,12 +112914,12 @@ Func_7db03: ; 7db03 (1f:5b03)
ld d, h
add hl, hl
add hl, de
- ld de, Unknown_7c000 ; $4000
+ ld de, SFX_Headers_1f
add hl, de
ld e, l
ld d, h
ld hl, $c006
- ld a, [de]
+ ld a, [de] ; get channel number
ld b, a
rlca
rlca
@@ -110588,7 +112957,7 @@ Func_7db03: ; 7db03 (1f:5b03)
.asm_7db46
pop bc
pop hl
- ld a, [de]
+ ld a, [de] ; get channel pointer
ld [hli], a
inc de
ld a, [de]
@@ -110617,11 +112986,11 @@ Func_7db03: ; 7db03 (1f:5b03)
ld [hli], a
ld [hli], a
ld [hl], a
- ld hl, $c012
- ld de, Unknown_7db8a ; $5b8a
+ ld hl, $c012 ; sfx noise channel pointer
+ ld de, Noise1f_endchannel
ld [hl], e
inc hl
- ld [hl], d
+ ld [hl], d ; overwrite pointer to point to endchannel
ld a, [$c005]
and a
jr nz, .asm_7db89
@@ -110632,20 +113001,57 @@ Func_7db03: ; 7db03 (1f:5b03)
.asm_7db89
ret
-Unknown_7db8a: ; 7db8a (1f:5b8a)
-INCBIN "baserom.gbc",$7db8a,$7db8b - $7db8a
+Noise1f_endchannel: ; 7db8a (1f:5b8a)
+ endchannel
Unknown_7db8b: ; 7db8b (1f:5b8b)
-INCBIN "baserom.gbc",$7db8b,$7db93 - $7db8b
+ db $10, $15, $1A, $1F ; channels 0-3
+ db $10, $15, $1A, $1F ; channels 4-7
Unknown_7db93: ; 7db93 (1f:5b93)
-INCBIN "baserom.gbc",$7db93,$7db9b - $7db93
+ db $EE, $DD, $BB, $77 ; channels 0-3
+ db $EE, $DD, $BB, $77 ; channels 4-7
Unknown_7db9b: ; 7db9b (1f:5b9b)
-INCBIN "baserom.gbc",$7db9b,$7dba3 - $7db9b
+ db $11, $22, $44, $88 ; channels 0-3
+ db $11, $22, $44, $88 ; channels 4-7
Unknown_7dba3: ; 7dba3 (1f:5ba3)
-INCBIN "baserom.gbc",$7dba3,$80000 - $7dba3
+ dw $F82C
+ dw $F89D
+ dw $F907
+ dw $F96B
+ dw $F9CA
+ dw $FA23
+ dw $FA77
+ dw $FAC7
+ dw $FB12
+ dw $FB58
+ dw $FB9B
+ dw $FBDA
+
+INCLUDE "music/bikeriding.tx"
+INCLUDE "music/dungeon1.tx"
+INCLUDE "music/gamecorner.tx"
+INCLUDE "music/titlescreen.tx"
+INCLUDE "music/sfx/sfx_1f_3a.tx"
+INCLUDE "music/dungeon2.tx"
+INCLUDE "music/dungeon3.tx"
+INCLUDE "music/cinnabarmansion.tx"
+INCLUDE "music/sfx/sfx_1f_41.tx"
+INCLUDE "music/sfx/sfx_1f_3b.tx"
+INCLUDE "music/sfx/sfx_1f_42.tx"
+INCLUDE "music/oakslab.tx"
+INCLUDE "music/pokemontower.tx"
+INCLUDE "music/silphco.tx"
+INCLUDE "music/meeteviltrainer.tx"
+INCLUDE "music/meetfemaletrainer.tx"
+INCLUDE "music/meetmaletrainer.tx"
+INCLUDE "music/introbattle.tx"
+INCLUDE "music/surfing.tx"
+INCLUDE "music/jigglypuffsong.tx"
+INCLUDE "music/halloffame.tx"
+INCLUDE "music/credits.tx"
SECTION "bank20",ROMX,BANK[$20]
@@ -122480,7 +124886,6 @@ _UnnamedText_72bd: ; a2985 (28:6985)
UnnamedText_a29cc: ; a29cc (28:69cc)
db $0, "Please wait.@@"
-; 0xa29b
_UnnamedText_72c8: ; a29db (28:69db)
db $0, "The link has been", $4f