Merge branch 'musicstuff'

This commit is contained in:
qwertymodo
2019-08-28 12:55:58 -07:00
8 changed files with 662 additions and 42 deletions

View File

@@ -75,6 +75,15 @@ db #$20, #$19, #$08, #$31 ; year/month/day
!FORCE_HEART_SPAWN = "$7F5033"; !FORCE_HEART_SPAWN = "$7F5033";
!SKIP_HEART_SAVE = "$7F5034"; !SKIP_HEART_SAVE = "$7F5034";
; MSU-1
!REG_MSU_FALLBACK_TABLE = $7F50A0 ; 8 bytes
!REG_MSU_DELAYED_COMMAND = $7F50A9
!REG_MSU_PACK_COUNT = $7F50AA
!REG_MSU_PACK_CURRENT = $7F50AB
!REG_MUSIC_CONTROL = $012B
;!REG_MUSIC_CONTROL = $012C
!REG_MUSIC_CONTROL_REQUEST = $012C
;================================================================================ ;================================================================================
incsrc hooks.asm incsrc hooks.asm
@@ -390,6 +399,11 @@ UseImplicitRegIndexedLongJumpTable:
org $008333 org $008333
Vram_EraseTilemaps_triforce: Vram_EraseTilemaps_triforce:
org $008913
Sound_LoadLightWorldSongBank:
org $00891D
.do_load
org $00893D org $00893D
EnableForceBlank: EnableForceBlank:
@@ -423,6 +437,11 @@ Mirror_InitHdmaSettings:
org $01873A org $01873A
Dungeon_LoadRoom: Dungeon_LoadRoom:
org $02821E
Module_PreDungeon:
org $028296
.setAmbientSfx
org $02A0A8 org $02A0A8
Dungeon_SaveRoomData: Dungeon_SaveRoomData:

View File

@@ -207,6 +207,13 @@ RTL
PostItemAnimation: PostItemAnimation:
LDA.b #$00 : STA !ITEM_BUSY ; mark item as finished LDA.b #$00 : STA !ITEM_BUSY ; mark item as finished
LDA $02D8 : CMP #$32 : BNE + ; Big Key
LDA $1B : BEQ + ; Check that we're indoors
LDA $040C : CMP #$1A : BNE + ; Check that we're in Ganon's Tower
LDA !REG_MSU_FALLBACK_TABLE+7 : AND #$04 : BEQ +
LDA.b #59 : STA !REG_MUSIC_CONTROL_REQUEST
+
LDA $7F509F : BEQ + LDA $7F509F : BEQ +
STZ $1CF0 : STZ $1CF1 ; reset decompression buffer STZ $1CF0 : STZ $1CF1 ; reset decompression buffer
JSL.l Main_ShowTextMessage_Alt JSL.l Main_ShowTextMessage_Alt

View File

@@ -22,6 +22,7 @@
!LOCK_STATS = "$7EF443" !LOCK_STATS = "$7EF443"
FrameHookAction: FrameHookAction:
JSL $0080B5 ; Module_MainRouting JSL $0080B5 ; Module_MainRouting
JSL CheckMusicLoadRequest
PHA : PHP PHA : PHP
;LDA EnableSRAMTrace : AND.l TournamentSeedInverse : BEQ + ;LDA EnableSRAMTrace : AND.l TournamentSeedInverse : BEQ +
; LDA $1A : BNE ++ : JSL.l WriteStatusPreview : ++ ; write every 256 frames ; LDA $1A : BNE ++ : JSL.l WriteStatusPreview : ++ ; write every 256 frames

View File

@@ -4,6 +4,8 @@
org $00802F ; <- 2F - Bank00.asm : 45 org $00802F ; <- 2F - Bank00.asm : 45
JSL.l Init_Primary JSL.l Init_Primary
NOP NOP
org $0CC1AC ; <- 63 D4 00 - Bank0C.asm:8 (dl Tagalong_LoadGfx)
dl Init_PostRAMClear
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;================================================================================ ;================================================================================
@@ -1455,6 +1457,13 @@ crystal_continue:
org $0EE6EC ; <- E220 A922 - Bank0E.asm:2892 (SEP #$20 : LDA.b #$22 : STA $012C) org $0EE6EC ; <- E220 A922 - Bank0E.asm:2892 (SEP #$20 : LDA.b #$22 : STA $012C)
JSL.l ending_wait JSL.l ending_wait
; Process music commands in NMI from new location after muting is processed
org $0080DD
dw !REG_MUSIC_CONTROL
org $008101
dw !REG_MUSIC_CONTROL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;================================================================================ ;================================================================================
@@ -2225,6 +2234,13 @@ PreOverworld_LoadProperties_SetSong:
org $05CC58 ; <- Bank05.asm:1307 (LDA $040A : CMP.b #$18) org $05CC58 ; <- Bank05.asm:1307 (LDA $040A : CMP.b #$18)
JSL PsychoSolder_MusicCheck JSL PsychoSolder_MusicCheck
NOP #1 NOP #1
;--------------------------------------------------------------------------------
org $02B13A ; <- Bank02.asm:7647
dl Overworld_FinishMirrorWarp
;--------------------------------------------------------------------------------
org $0AB949 ; <- Bank0A.asm:270 (Different from US ROM)
JSL BirdTravel_LoadTargetAreaMusic
NOP #16
;================================================================================ ;================================================================================
;================================================================================ ;================================================================================

View File

@@ -47,4 +47,14 @@ Init_Primary:
LDA.b #$81 : STA $4200 ; thing we wrote over, turn on NMI & gamepad LDA.b #$81 : STA $4200 ; thing we wrote over, turn on NMI & gamepad
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; Init_PostRAMClear
;--------------------------------------------------------------------------------
; This gets called after banks $7E and $7F get cleared, so if we need to
; initialize RAM in those banks, do it here
;--------------------------------------------------------------------------------
Init_PostRAMClear:
JSL msu_init
JML $00D463 ; The original target of the jump table that we hijacked

391
msu.asm
View File

@@ -6,7 +6,78 @@
; ;
; Author: qwertymodo ; Author: qwertymodo
; ;
; Free space used: 0x77DDD-0x77F8A ; Track List:
;
; 1 - Title ~ Link to the Past
; 2 - Hyrule Field
; 3 - Time of Falling Rain
; 4 - The Silly Pink Rabbit
; 5 - Forest of Mystery
; 6 - Seal of Seven Maidens
; 7 - Kakariko Village
; 8 - Dimensional Shift (Mirror)
; 9 - Dark Golden Land
; 10 - Unsealing the Master Sword
; 11 - Beginning of the Journey
; 12 - Soldiers of Kakariko Village
; 13 - Black Mist
; 14 - Guessing Game House
; 15 - Dark Woods
; 16 - Majestic Castle
; 17 - Lost Ancient Ruins
; 18 - Dank Dungeons
; 19 - Great Victory!
; 20 - Safety in the Sanctuary
; 21 - Anger of the Guardians
; 22 - Dungeon of Shadows
; 23 - Fortune Teller
; 24 - Dank Dungeons (Copy)
; 25 - Princess Zelda's Rescue
; 26 - Meeting the Maidens
; 27 - The Goddess Appears
; 28 - Priest of the Dark Order
; 29 - Release of Ganon
; 30 - Ganon's Message
; 31 - The Prince of Darkness
; 32 - Power of the Gods
; 33 - Epilogue ~ Beautiful Hyrule
; 34 - Staff Roll
;
; Dungeon-specific tracks
;
; 35 - Eastern Palace
; 36 - Desert Palace
; 37 - Agahnim's Tower
; 38 - Swamp Palace
; 39 - Palace of Darkness
; 40 - Misery Mire
; 41 - Skull Woods
; 42 - Ice Palace
; 43 - Tower of Hera
; 44 - Thieves' Town
; 45 - Turtle Rock
; 46 - Ganon's Tower
; 59 - Ganon's Tower (Upstairs)
;
; Bosses
;
; 47 - Eastern Palace
; 48 - Desert Palace
; 49 - Agahnim's Tower
; 50 - Swamp Palace
; 51 - Palace of Darkness
; 52 - Misery Mire
; 53 - Skull Woods
; 54 - Ice Palace
; 55 - Tower of Hera
; 56 - Thieves' Town
; 57 - Turtle Rock
; 58 - Ganon's Tower
;
; Additional tracks
;
; 60 - Light World OW (after ped pull)
; 61 - Dark World OW (with all crystals)
; ;
;======================================= ;=======================================
@@ -52,18 +123,15 @@
!FLAG_MSU_STATUS_DATA_BUSY = #$80 !FLAG_MSU_STATUS_DATA_BUSY = #$80
!REG_CURRENT_MSU_TRACK = $010B
!REG_CURRENT_VOLUME = $0127 !REG_CURRENT_VOLUME = $0127
!REG_TARGET_VOLUME = $0129 !REG_TARGET_VOLUME = $0129
!REG_CURRENT_MSU_TRACK = $012B
!REG_MUSIC_CONTROL = $012C
!REG_CURRENT_TRACK = $0130 !REG_CURRENT_TRACK = $0130
!REG_CURRENT_COMMAND = $0133 !REG_CURRENT_COMMAND = $0133
!REG_MSU_LOAD_FLAG = $7F509B
!REG_SPC_CONTROL = $2140 !REG_SPC_CONTROL = $2140
!REG_NMI_FLAGS = $4210 !REG_NMI_FLAGS = $4210
!VAL_COMMAND_FADE_OUT = #$F1 !VAL_COMMAND_FADE_OUT = #$F1
!VAL_COMMAND_FADE_HALF = #$F2 !VAL_COMMAND_FADE_HALF = #$F2
!VAL_COMMAND_FULL_VOLUME = #$F3 !VAL_COMMAND_FULL_VOLUME = #$F3
@@ -74,6 +142,218 @@
!VAL_VOLUME_HALF = #$80 !VAL_VOLUME_HALF = #$80
!VAL_VOLUME_FULL = #$FF !VAL_VOLUME_FULL = #$FF
CheckMusicLoadRequest:
PHP : REP #$10 : PHA : PHX : PHY
LDA !REG_MUSIC_CONTROL_REQUEST : BEQ .skip : BMI .skip : CMP !REG_CURRENT_COMMAND : BNE .continue
.skip
STA !REG_MUSIC_CONTROL : STZ !REG_MUSIC_CONTROL_REQUEST
PLY : PLX : PLA : PLP
RTL
.continue
; Shut down NMI until music loads
STZ $4200
LDA NoBGM : BEQ +
BRL .mute
+
LDX !REG_MSU_ID_01 : CPX !VAL_MSU_ID_01 : BEQ +
- : BRL .unmute
+
LDX !REG_MSU_ID_23 : CPX !VAL_MSU_ID_23 : BNE -
LDX !REG_MSU_ID_45 : CPX !VAL_MSU_ID_45 : BNE -
SEP #$10
; Load alternate or dungeon-specific tracks
LDA !REG_MUSIC_CONTROL_REQUEST
CMP.b #02 : BEQ .lightworld
CMP.b #09 : BEQ .darkworld
CMP.b #13 : BEQ .darkwoods
CMP.b #16 : BEQ .castle
CMP.b #17 : BEQ .dungeon
CMP.b #22 : BEQ .dungeon
CMP.b #21 : BNE .check_fallback
;.boss
LDA $040C : LSR : !ADD.b #45
BRA .check_fallback-3
.lightworld
PHA
LDA $7EF300 : AND.b #$40 : BEQ +
LDA.b #60 : BRA .check_fallback-3
+
- : PLA : BRA .check_fallback-3
.darkworld
PHA
LDA $7EF371 : CMP.b #$7F : BNE -
PLA
LDA.b #61 : BRA .check_fallback-3
.darkwoods
PHA
LDA $7EF3CA : BEQ -
LDA $8A : CMP #$40 : BNE -
PLA
LDA.b #15 : BRA .check_fallback-3
.castle
LDA $040C
CMP.b #$08 : BNE .check_fallback ; Hyrule Castle 2
.dungeon
LDA $040C : LSR : !ADD.b #33 : STA !REG_MUSIC_CONTROL_REQUEST
CMP.b #46 : BNE .check_fallback
; Ganon's Tower
LDA $7EF366 : AND.b #$04 : BEQ .check_fallback ; Check if we have the GT big key
LDA !REG_MSU_FALLBACK_TABLE+7 : AND.b #$04 : BEQ .check_fallback ; Check if the 2nd GT track exists
LDA.b #59
STA !REG_MUSIC_CONTROL_REQUEST
.check_fallback
LDA !REG_MUSIC_CONTROL_REQUEST : DEC : PHA
AND.b #$07 : TAY
PLA : LSR #3 : TAX
LDA !REG_MSU_FALLBACK_TABLE,X : BEQ .secondary_fallback : CMP.b #$FF : BEQ .mute
- : CPY #$00 : BEQ +
LSR : DEY : BRA -
+
AND.b #$01 : BEQ .secondary_fallback
.mute
LDA.b #$FF : STA $2140
LDA.b #SPCMutePayload : STA $00
LDA.b #SPCMutePayload>>8 : STA $01
LDA.b #SPCMutePayload>>16
BRA .load
.secondary_fallback
LDX !REG_MUSIC_CONTROL_REQUEST : LDA MSUExtendedFallbackList-1,X
CMP !REG_MUSIC_CONTROL_REQUEST : BEQ .unmute
CPX #35 : !BLT +
CPX #47 : !BLT .dungeon_fallback
+
STA !REG_MUSIC_CONTROL_REQUEST
BRA .check_fallback
.dungeon_fallback
PHB : REP #$10
LDX $040C
LDA.b #Music_Eastern>>16 : PHA : PLB ; Set bank to music pointers
LDY $00 : PHY
REP #$20
LDA MSUDungeonFallbackList,X : STA $00
SEP #$20
LDA ($00)
PLY : STY $00 : SEP #$10 : PLB
STA !REG_MUSIC_CONTROL_REQUEST
BRA .check_fallback
.unmute
LDA.b #$FF : STA $2140
LDA.b #SPCUnmutePayload : STA $00
LDA.b #SPCUnmutePayload>>8 : STA $01
LDA.b #SPCUnmutePayload>>16
.load
REP #$10
JSL Sound_LoadLightWorldSongBank_do_load
; Re-enable NMI and joypad
LDA.b #$81 : STA $4200
LDA !REG_MUSIC_CONTROL_REQUEST : CMP.b #08 : BEQ .done+3 ; No SFX during warp track
LDA $10
CMP.b #$07 : BEQ .sfx_indoors
CMP.b #$0E : BEQ .sfx_indoors
CMP.b #$09 : BNE .done
.sfx_outdoors
SEP #$10
LDX.b #$05
LDA $8A : CMP.b #$70 : BNE + ; Misery Mire
LDA $7EF2F0 : AND.b #$20 : BEQ .rain
+
LDA $7EF3C5 : CMP.b #$02 : BCS +
.rain
LDX.b #$01
+
STX $012D
REP #$10
.done
LDA !REG_MUSIC_CONTROL_REQUEST : STA !REG_MUSIC_CONTROL : STZ !REG_MUSIC_CONTROL_REQUEST
PLY : PLX : PLA : PLP
RTL
.sfx_indoors
LDA !REG_MUSIC_CONTROL_REQUEST : STA !REG_MUSIC_CONTROL : STZ !REG_MUSIC_CONTROL_REQUEST
PLY : PLX : PLA : PLP
JML Module_PreDungeon_setAmbientSfx
msu_init:
PHP : REP #$20
LDA.w #$0000
STA !REG_MSU_VOLUME
STA !REG_MSU_PACK_COUNT
LDA !REG_MSU_ID_01 : CMP !VAL_MSU_ID_01 : BNE .done
LDA !REG_MSU_ID_23 : CMP !VAL_MSU_ID_23 : BNE .done
LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .done
; Count the number of available MSU-1 packs
LDA.w #$0000
LDX.b #$FF
LDY.b #$01
SEP #$20
.check_pack
TYA
REP #$20
STA !REG_MSU_TRACK
!ADD.w #100
INX
SEP #$20
TAY
.wait_pack
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_BUSY : BNE .wait_pack
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BEQ .check_pack
TXA : STA !REG_MSU_PACK_COUNT
; Check the current MSU-1 pack for tracks that require SPC fallback
LDA.b #64
LDX.b #7
LDY.b #7
.check_track
STA !REG_MSU_TRACK_LO
STZ !REG_MSU_TRACK_HI
PHA
CLC
.wait_track
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_BUSY : BNE .wait_track
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BNE +
SEC
+
LDA !REG_MSU_FALLBACK_TABLE,X : ROL : STA !REG_MSU_FALLBACK_TABLE,X
DEY : BPL .next_track
DEX : BPL +
PLA
.done
PLP
RTL
+
LDY.b #7
.next_track
PLA : DEC
BRA .check_track
msu_main: msu_main:
SEP #$20 ; set 8-BIT accumulator SEP #$20 ; set 8-BIT accumulator
LDA $4210 ; thing we wrote over LDA $4210 ; thing we wrote over
@@ -87,29 +367,23 @@ msu_main:
LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .nomsu LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .nomsu
SEP #$30 SEP #$30
LDX !REG_MUSIC_CONTROL : BNE command_ff LDX !REG_MUSIC_CONTROL : BNE command_ff
LDA !REG_MSU_LOAD_FLAG : BEQ do_fade LDA !REG_MSU_DELAYED_COMMAND : BEQ do_fade
msu_check_busy: msu_check_busy:
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_BUSY : BEQ .ready LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_BUSY : BEQ .ready
JML spc_continue JML spc_continue
.ready .ready
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BNE spc_fallback LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BEQ .start
JML spc_continue
.start
LDA !VAL_VOLUME_FULL LDA !VAL_VOLUME_FULL
STA !REG_TARGET_VOLUME STA !REG_TARGET_VOLUME
STA !REG_CURRENT_VOLUME STA !REG_CURRENT_VOLUME
STA !REG_MSU_VOLUME STA !REG_MSU_VOLUME
LDA !REG_MSU_LOAD_FLAG LDA !REG_MSU_DELAYED_COMMAND
STA !REG_MSU_CONTROL STA !REG_MSU_CONTROL
LDA #$00 LDA.b #$00
STA !REG_MSU_LOAD_FLAG STA !REG_MSU_DELAYED_COMMAND
JML spc_continue
spc_fallback:
STZ !REG_MSU_CONTROL
STZ !REG_CURRENT_MSU_TRACK
STZ !REG_TARGET_VOLUME
STZ !REG_CURRENT_VOLUME
STZ !REG_MSU_VOLUME
JML spc_continue JML spc_continue
do_fade: do_fade:
@@ -157,16 +431,73 @@ command_f1:
JML spc_continue JML spc_continue
load_track: load_track:
CPX !REG_CURRENT_MSU_TRACK : BNE .continue CPX !REG_CURRENT_MSU_TRACK : BNE +
CPX #$1B : BEQ .continue - : CPX #27 : BEQ +
JML spc_continue JML spc_continue
.continue +
STX !REG_MSU_TRACK_LO CPX !REG_CURRENT_COMMAND : BEQ -
STZ !REG_MSU_TRACK_HI LDA.b #$00 : XBA
LDA !REG_MSU_PACK_CURRENT : BEQ +
- : CMP !REG_MSU_PACK_COUNT : !BLT +
!SUB !REG_MSU_PACK_COUNT : BRA -
+
PHX : PHA : TXA : PLX
REP #$20
BEQ +
-
!ADD.w #100
DEX : BNE -
+
STA !REG_MSU_TRACK
SEP #$20
STZ !REG_MSU_CONTROL STZ !REG_MSU_CONTROL
LDA.l MSUTrackList,x PLX
STA !REG_MSU_LOAD_FLAG
STX !REG_CURRENT_MSU_TRACK STX !REG_CURRENT_MSU_TRACK
LDA MSUTrackList,X
STA !REG_MSU_DELAYED_COMMAND
LDA MSUExtendedFallbackList-1,X : CMP.b #35 : !BLT .done : CMP.b #47 : !BGE .done
PHB : REP #$10
LDX $040C
LDA.b #Music_Eastern>>16 : PHA : PLB ; Set bank to music pointers
LDY $00 : PHY
REP #$20
LDA MSUDungeonFallbackList,X : STA $00
SEP #$20
LDA ($00)
PLY : STY $00 : SEP #$10 : PLB
.done
STA !REG_MUSIC_CONTROL
JML spc_continue
; No longer used, keeping as a reference for
; multi-pack fallback with the new lookup table
; Delete this once lookup fallback supports multi-pack
.fallback
STA !REG_CURRENT_MSU_TRACK
TAX
LDA.b #$00 : XBA
LDA !REG_MSU_PACK_CURRENT : BEQ +
-
CMP !REG_MSU_PACK_COUNT : !BLT +
!SUB !REG_MSU_PACK_COUNT : BRA -
+
PHA : TXA : PLX
REP #$20
BEQ +
-
!ADD.w #100
DEX : BNE -
+
STA !REG_MSU_TRACK
SEP #$20
JML spc_continue JML spc_continue
pendant_fanfare: pendant_fanfare:
@@ -177,12 +508,13 @@ pendant_fanfare:
LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .spc LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .spc
SEP #$20 SEP #$20
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BNE .spc LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BNE .spc
LDA !REG_MSU_LOAD_FLAG : BNE .continue LDA !REG_MSU_DELAYED_COMMAND : BNE .continue
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done
.continue .continue
jml pendant_continue jml pendant_continue
.spc .spc
SEP #$20 SEP #$20
- : LDA !REG_SPC_CONTROL : BEQ - ; Wait for the track to finish loading
LDA !REG_SPC_CONTROL : BNE .continue LDA !REG_SPC_CONTROL : BNE .continue
.done .done
jml pendant_done jml pendant_done
@@ -196,12 +528,13 @@ crystal_fanfare:
LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .spc LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .spc
SEP #$20 SEP #$20
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BNE .spc LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BNE .spc
LDA !REG_MSU_LOAD_FLAG : BNE .continue LDA !REG_MSU_DELAYED_COMMAND : BNE .continue
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done
.continue .continue
jml crystal_continue jml crystal_continue
.spc .spc
SEP #$20 SEP #$20
- : LDA !REG_SPC_CONTROL : BEQ - ; Wait for the track to finish loading
LDA !REG_SPC_CONTROL : BNE .continue LDA !REG_SPC_CONTROL : BNE .continue
.done .done
jml crystal_done jml crystal_done
@@ -217,5 +550,5 @@ ending_wait:
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_PLAYING : BNE .wait LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_PLAYING : BNE .wait
.done .done
SEP #$20 SEP #$20
LDA #$22 LDA.b #$22
RTL RTL

163
music.asm
View File

@@ -52,16 +52,24 @@ PreOverworld_LoadProperties_ChooseMusic:
.endOfLightWorldChecks .endOfLightWorldChecks
; if we are in the light world go ahead and set chosen selection ; if we are in the light world go ahead and set chosen selection
LDA $7EF3CA : BEQ .lastCheck LDA $7EF3CA : BEQ .checkInverted+4
LDX.b #$0D ; dark woods theme LDX.b #$0F ; dark woods theme
; This music is used in dark woods, and dark death mountain ; This music is used in dark woods
LDA $8A LDA $8A
CMP.b #$40 : BEQ + : CMP.b #$43 : BEQ + : CMP.b #$45 : BEQ + : CMP.b #$47 : BEQ + CMP.b #$40 : BEQ +
LDX.b #$0D ; dark death mountain theme
; This music is used in dark death mountain
CMP.b #$43 : BEQ + : CMP.b #$45 : BEQ + : CMP.b #$47 : BEQ +
LDX.b #$09 ; dark overworld theme LDX.b #$09 ; dark overworld theme
+ +
; if not inverted and light world, or inverted and dark world, skip moon pearl check
.checkInverted
LDA $7EF3CA : CLC : ROL #$03 : CMP InvertedMode : BEQ .lastCheck
; Does Link have a moon pearl? ; Does Link have a moon pearl?
LDA $7EF357 : BNE + LDA $7EF357 : BNE +
LDX.b #$04 ; bunny theme LDX.b #$04 ; bunny theme
@@ -79,6 +87,153 @@ PreOverworld_LoadProperties_ChooseMusic:
JML.l PreOverworld_LoadProperties_SetSong JML.l PreOverworld_LoadProperties_SetSong
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
Overworld_FinishMirrorWarp:
REP #$20
LDA.w #$2641 : STA $4370
LDX.b #$3E
LDA.w #$FF00
.clear_hdma_table
STA $1B00, X : STA $1B40, X
STA $1B80, X : STA $1BC0, X
STA $1C00, X : STA $1C40, X
STA $1C80, X
DEX #2 : BPL .clear_hdma_table
LDA.w #$0000 : STA $7EC007 : STA $7EC009
SEP #$20
JSL $00D7C8 ; $57C8 IN ROM
LDA.b #$80 : STA $9B
LDX.b #$04 ; bunny theme
; if not inverted and light world, or inverted and dark world, skip moon pearl check
LDA $7EF3CA : CLC : ROL #$03 : CMP InvertedMode : BEQ +
LDA $7EF357 : BEQ .endOfLightWorldChecks
+
LDX.b #$09 ; default dark world theme
LDA $8A : CMP.b #$40 : !BGE .endOfLightWorldChecks
LDX.b #$02 ; hyrule field theme
; Check if we're entering the village
CMP.b #$18 : BNE .endOfLightWorldChecks
; Check what phase we're in
LDA $7EF3C5 : CMP.b #$03 : !BGE .endOfLightWorldChecks
LDX.b #$07 ; Default village theme (phase <3)
.endOfLightWorldChecks
STX $012C
LDA $8A : CMP.b #$40 : BNE +
LDX #$0F ; dark woods theme
BRA .bunny
+
CMP.b #$43 : BEQ .darkMountain
CMP.b #$45 : BEQ .darkMountain
CMP.b #$47 : BNE .notDarkMountain
.darkMountain
LDA.b #$09 : STA $012D ; set storm ambient SFX
LDX.b #$0D ; dark mountain theme
.bunny
LDA $7EF357 : ORA InvertedMode : BNE +
LDX #$04 ; bunny theme
+
STX $012C
.notDarkMountain
LDA $11 : STA $010C
STZ $11
STZ $B0
STZ $0200
STZ $0710
RTL
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
BirdTravel_LoadTargetAreaMusic:
; Skip village and lost woods checks if entering dark world or a special area
LDA $8A : CMP.b #$40 : !BGE .notVillageOrWoods
LDX.b #$07 ; Default village theme
; Check what phase we're in
LDA $7EF3C5 : CMP.b #$03 : !BLT +
LDX.b #$02 ; Default light world theme (phase >=3)
+
; Check if we're entering the village
LDA $8A : CMP.b #$18 : BEQ .endOfLightWorldChecks
; For NA release would we also branch on indexes #$22 #$28 #$29
LDX.b #$05 ; Lost woods theme
; check if we've pulled from the master sword pedestal
LDA $7EF300 : AND.b #$40 : BEQ +
LDX.b #$02 ; Default light world theme
+
; check if we are entering lost woods
LDA $8A : BEQ .endOfLightWorldChecks
.notVillageOrWoods
; Use the normal overworld (light world) music
LDX.b #$02
; Check phase ; In phase >= 2
LDA $7EF3C5 : CMP.b #$02 : !BGE +
; If phase < 2, play the legend music
LDX.b #$03
+
.endOfLightWorldChecks
; if we are in the light world go ahead and set chosen selection
LDA $7EF3CA : BEQ .checkInverted+4
LDX.b #$0F ; dark woods theme
; This music is used in dark woods
LDA $8A
CMP.b #$40 : BEQ +
LDX.b #$0D ; dark death mountain theme
; This music is used in dark death mountain
CMP.b #$43 : BEQ + : CMP.b #$45 : BEQ + : CMP.b #$47 : BEQ +
LDX.b #$09 ; dark overworld theme
+
; if not inverted and light world, or inverted and dark world, skip moon pearl check
.checkInverted
LDA $7EF3CA : CLC : ROL #$03 : CMP InvertedMode : BEQ .lastCheck
; Does Link have a moon pearl?
LDA $7EF357 : BNE +
LDX.b #$04 ; bunny theme
+
.lastCheck
RTL
;--------------------------------------------------------------------------------
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;0 = Is Kakariko Overworld ;0 = Is Kakariko Overworld
;1 = Not Kakariko Overworld ;1 = Not Kakariko Overworld

View File

@@ -721,6 +721,10 @@ org $06C93B ; PC 0x3493B
PyramidPotion: PyramidPotion:
db #$2C ; #$2C = Green Potion db #$2C ; #$2C = Green Potion
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; Change track 15 (unused) to point to 13 (Death Mountain) so dark woods can be track 15
org $1A9F15 ; PC 0xD1F15
dw #$2B00 ; Set track 15 pointer to track 13's data
;--------------------------------------------------------------------------------
org $308140 ; PC 0x180140 - 0x18014A [encrypted] org $308140 ; PC 0x180140 - 0x18014A [encrypted]
HeartPieceOutdoorValues: HeartPieceOutdoorValues:
HeartPiece_Spectacle: HeartPiece_Spectacle:
@@ -968,7 +972,11 @@ org $308215 ; PC 0x180215
SeedHash: SeedHash:
db $00, $01, $02, $03, $04 db $00, $01, $02, $03, $04
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; 0x18021A - 0x18021F (unused) org $30821A ; PC 0x18021A
NoBGM:
db $00 ; $00 = BGM enabled (default) $01 = BGM disabled
;--------------------------------------------------------------------------------
; 0x18021B - 0x18021F (unused)
;================================================================================ ;================================================================================
; $308220 (0x180220) - $30823F (0x18023F) ; $308220 (0x180220) - $30823F (0x18023F)
; Plandomizer Author Name (ASCII) - Leave unused chars as 0 ; Plandomizer Author Name (ASCII) - Leave unused chars as 0
@@ -1468,7 +1476,7 @@ dw #9999 ; Rupee Limit
; $7F5098 - Water Entry Index ; $7F5098 - Water Entry Index
; $7F5099 - Last Entered Overworld Door ID ; $7F5099 - Last Entered Overworld Door ID
; $7F509A - (Reserved) ; $7F509A - (Reserved)
; $7F509B - MSU Flag ; $7F509B - Unused
; $7F509C - Inverted Mode Duck Map Temporary ; $7F509C - Inverted Mode Duck Map Temporary
; $7F509D - Stalfos Bomb Damage Value ; $7F509D - Stalfos Bomb Damage Value
; $7F509E - Valid Key Loaded ; $7F509E - Valid Key Loaded
@@ -1598,18 +1606,89 @@ LowHeartFix:
db $08, $08, $10 db $08, $08, $10
;================================================================================ ;================================================================================
org $30D000 ; PC 0x185000 - 0x18503F org $30D000 ; PC 0x185000 - 0x18505F
MSUTrackList: MSUTrackList:
db $00,$01,$03,$03,$03,$03,$03,$03 db $00,$01,$03,$03,$03,$03,$03,$03
db $01,$03,$01,$03,$03,$03,$03,$03 db $01,$03,$01,$03,$03,$03,$03,$03
db $03,$03,$03,$01,$03,$03,$03,$03 db $03,$03,$03,$01,$03,$03,$03,$03
db $03,$03,$03,$03,$03,$01,$03,$03 db $03,$03,$03,$03,$03,$01,$03,$03
db $03,$01,$01,$FF,$FF,$FF,$FF,$FF db $03,$01,$01,$03,$03,$03,$03,$03
db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF db $03,$03,$03,$03,$03,$03,$03,$03
db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF db $03,$03,$03,$03,$03,$03,$03,$03
db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF db $03,$03,$03,$03,$03,$00,$00,$00
MSUExtendedFallbackList:
db $01,$02,$03,$04,$05,$06,$07,$08
db $09,$0A,$0B,$0C,$0D,$0E,$0F,$0D
db $11,$12,$13,$14,$15,$16,$17,$18
db $19,$1A,$1B,$1C,$1D,$1E,$1F,$20
db $21,$22,$11,$11,$10,$16,$16,$16
db $16,$16,$11,$16,$16,$16,$15,$15
db $15,$15,$15,$15,$15,$15,$15,$15
db $15,$15,$16,$02,$09,$00,$00,$00
MSUDungeonFallbackList:
dw $0000 ; Sewer Escape
dw $0000 ; Hyrule Castle
dw Music_Eastern
dw Music_Desert
dw $0000 ; Agahnim's Tower
dw Music_Swamp
dw Music_Darkness
dw Music_Mire
dw Music_Skull
dw Music_Ice
dw Music_Hera
dw Music_Thieves
dw Music_TRock
dw Music_GTower
dw $0000
dw $0000
SPCMutePayload:
dw $0001 ; Transfer size
dw $0A4A ; Transfer destination
db $00 ; mov a,#$70 -> mov a,#$00
dw $0001 ; Transfer size
dw $0AF3 ; Transfer destination
db $00 ; mov $059,#$c0 -> mov $059,#$00
dw $0002 ; Transfer size
dw $0C32 ; Transfer destination
db $00, $00 ; movw $058,ya -> nop #2
dw $0001 ; Transfer size
dw $0D19 ; Transfer destination
db $34 ; movw $058,ya -> mov $058,a
dw $0000 ; Transfer size (end of transfer)
dw $FFFF ; Dummy destination
db $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Padding
SPCUnmutePayload:
dw $0001 ; Transfer size
dw $0A4A ; Transfer destination
db $70 ; mov a,#$70
dw $0001 ; Transfer size
dw $0AF3 ; Transfer destination
db $C0 ; mov $059,#$c0
dw $0002 ; Transfer size
dw $0C32 ; Transfer destination
db $da, $58 ; movw $058,ya
dw $0001 ; Transfer size
dw $0D19 ; Transfer destination
db $34 ; movw $058,ya
dw $0000 ; Transfer size (end of transfer)
dw $FFFF ; Dummy destination
db $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Padding
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; 0x185040 - 1850FF (unused) ; 0x185060 - 1850FF (unused)
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $30D100 ; PC 0x185100 - 0x18513F org $30D100 ; PC 0x185100 - 0x18513F
UnusedTable: ; please do not move this - kkat UnusedTable: ; please do not move this - kkat