Merge branch 'musicstuff'
This commit is contained in:
@@ -75,6 +75,15 @@ db #$20, #$19, #$08, #$31 ; year/month/day
|
||||
!FORCE_HEART_SPAWN = "$7F5033";
|
||||
!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
|
||||
@@ -390,6 +399,11 @@ UseImplicitRegIndexedLongJumpTable:
|
||||
org $008333
|
||||
Vram_EraseTilemaps_triforce:
|
||||
|
||||
org $008913
|
||||
Sound_LoadLightWorldSongBank:
|
||||
org $00891D
|
||||
.do_load
|
||||
|
||||
org $00893D
|
||||
EnableForceBlank:
|
||||
|
||||
@@ -423,6 +437,11 @@ Mirror_InitHdmaSettings:
|
||||
org $01873A
|
||||
Dungeon_LoadRoom:
|
||||
|
||||
org $02821E
|
||||
Module_PreDungeon:
|
||||
org $028296
|
||||
.setAmbientSfx
|
||||
|
||||
org $02A0A8
|
||||
Dungeon_SaveRoomData:
|
||||
|
||||
|
||||
@@ -207,6 +207,13 @@ RTL
|
||||
PostItemAnimation:
|
||||
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 +
|
||||
STZ $1CF0 : STZ $1CF1 ; reset decompression buffer
|
||||
JSL.l Main_ShowTextMessage_Alt
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
!LOCK_STATS = "$7EF443"
|
||||
FrameHookAction:
|
||||
JSL $0080B5 ; Module_MainRouting
|
||||
JSL CheckMusicLoadRequest
|
||||
PHA : PHP
|
||||
;LDA EnableSRAMTrace : AND.l TournamentSeedInverse : BEQ +
|
||||
; LDA $1A : BNE ++ : JSL.l WriteStatusPreview : ++ ; write every 256 frames
|
||||
|
||||
16
hooks.asm
16
hooks.asm
@@ -4,6 +4,8 @@
|
||||
org $00802F ; <- 2F - Bank00.asm : 45
|
||||
JSL.l Init_Primary
|
||||
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)
|
||||
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)
|
||||
JSL PsychoSolder_MusicCheck
|
||||
NOP #1
|
||||
;--------------------------------------------------------------------------------
|
||||
org $02B13A ; <- Bank02.asm:7647
|
||||
dl Overworld_FinishMirrorWarp
|
||||
;--------------------------------------------------------------------------------
|
||||
org $0AB949 ; <- Bank0A.asm:270 (Different from US ROM)
|
||||
JSL BirdTravel_LoadTargetAreaMusic
|
||||
NOP #16
|
||||
;================================================================================
|
||||
|
||||
;================================================================================
|
||||
|
||||
10
init.asm
10
init.asm
@@ -48,3 +48,13 @@ Init_Primary:
|
||||
LDA.b #$81 : STA $4200 ; thing we wrote over, turn on NMI & gamepad
|
||||
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
391
msu.asm
@@ -6,7 +6,78 @@
|
||||
;
|
||||
; 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
|
||||
|
||||
|
||||
!REG_CURRENT_MSU_TRACK = $010B
|
||||
!REG_CURRENT_VOLUME = $0127
|
||||
!REG_TARGET_VOLUME = $0129
|
||||
!REG_CURRENT_MSU_TRACK = $012B
|
||||
!REG_MUSIC_CONTROL = $012C
|
||||
!REG_CURRENT_TRACK = $0130
|
||||
!REG_CURRENT_COMMAND = $0133
|
||||
!REG_MSU_LOAD_FLAG = $7F509B
|
||||
|
||||
!REG_SPC_CONTROL = $2140
|
||||
!REG_NMI_FLAGS = $4210
|
||||
|
||||
|
||||
!VAL_COMMAND_FADE_OUT = #$F1
|
||||
!VAL_COMMAND_FADE_HALF = #$F2
|
||||
!VAL_COMMAND_FULL_VOLUME = #$F3
|
||||
@@ -74,6 +142,218 @@
|
||||
!VAL_VOLUME_HALF = #$80
|
||||
!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:
|
||||
SEP #$20 ; set 8-BIT accumulator
|
||||
LDA $4210 ; thing we wrote over
|
||||
@@ -87,29 +367,23 @@ msu_main:
|
||||
LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .nomsu
|
||||
SEP #$30
|
||||
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:
|
||||
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_BUSY : BEQ .ready
|
||||
JML spc_continue
|
||||
.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
|
||||
STA !REG_TARGET_VOLUME
|
||||
STA !REG_CURRENT_VOLUME
|
||||
STA !REG_MSU_VOLUME
|
||||
LDA !REG_MSU_LOAD_FLAG
|
||||
LDA !REG_MSU_DELAYED_COMMAND
|
||||
STA !REG_MSU_CONTROL
|
||||
LDA #$00
|
||||
STA !REG_MSU_LOAD_FLAG
|
||||
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
|
||||
LDA.b #$00
|
||||
STA !REG_MSU_DELAYED_COMMAND
|
||||
JML spc_continue
|
||||
|
||||
do_fade:
|
||||
@@ -157,16 +431,73 @@ command_f1:
|
||||
JML spc_continue
|
||||
|
||||
load_track:
|
||||
CPX !REG_CURRENT_MSU_TRACK : BNE .continue
|
||||
CPX #$1B : BEQ .continue
|
||||
JML spc_continue
|
||||
.continue
|
||||
STX !REG_MSU_TRACK_LO
|
||||
STZ !REG_MSU_TRACK_HI
|
||||
CPX !REG_CURRENT_MSU_TRACK : BNE +
|
||||
- : CPX #27 : BEQ +
|
||||
JML spc_continue
|
||||
+
|
||||
CPX !REG_CURRENT_COMMAND : BEQ -
|
||||
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
|
||||
LDA.l MSUTrackList,x
|
||||
STA !REG_MSU_LOAD_FLAG
|
||||
PLX
|
||||
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
|
||||
|
||||
pendant_fanfare:
|
||||
@@ -177,12 +508,13 @@ pendant_fanfare:
|
||||
LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .spc
|
||||
SEP #$20
|
||||
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
|
||||
.continue
|
||||
jml pendant_continue
|
||||
.spc
|
||||
SEP #$20
|
||||
- : LDA !REG_SPC_CONTROL : BEQ - ; Wait for the track to finish loading
|
||||
LDA !REG_SPC_CONTROL : BNE .continue
|
||||
.done
|
||||
jml pendant_done
|
||||
@@ -196,12 +528,13 @@ crystal_fanfare:
|
||||
LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .spc
|
||||
SEP #$20
|
||||
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
|
||||
.continue
|
||||
jml crystal_continue
|
||||
.spc
|
||||
SEP #$20
|
||||
- : LDA !REG_SPC_CONTROL : BEQ - ; Wait for the track to finish loading
|
||||
LDA !REG_SPC_CONTROL : BNE .continue
|
||||
.done
|
||||
jml crystal_done
|
||||
@@ -217,5 +550,5 @@ ending_wait:
|
||||
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_PLAYING : BNE .wait
|
||||
.done
|
||||
SEP #$20
|
||||
LDA #$22
|
||||
LDA.b #$22
|
||||
RTL
|
||||
|
||||
163
music.asm
163
music.asm
@@ -52,16 +52,24 @@ PreOverworld_LoadProperties_ChooseMusic:
|
||||
|
||||
.endOfLightWorldChecks
|
||||
; 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
|
||||
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
|
||||
+
|
||||
|
||||
; 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
|
||||
@@ -79,6 +87,153 @@ PreOverworld_LoadProperties_ChooseMusic:
|
||||
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
|
||||
;1 = Not Kakariko Overworld
|
||||
|
||||
95
tables.asm
95
tables.asm
@@ -721,6 +721,10 @@ org $06C93B ; PC 0x3493B
|
||||
PyramidPotion:
|
||||
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]
|
||||
HeartPieceOutdoorValues:
|
||||
HeartPiece_Spectacle:
|
||||
@@ -968,7 +972,11 @@ org $308215 ; PC 0x180215
|
||||
SeedHash:
|
||||
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)
|
||||
; Plandomizer Author Name (ASCII) - Leave unused chars as 0
|
||||
@@ -1468,7 +1476,7 @@ dw #9999 ; Rupee Limit
|
||||
; $7F5098 - Water Entry Index
|
||||
; $7F5099 - Last Entered Overworld Door ID
|
||||
; $7F509A - (Reserved)
|
||||
; $7F509B - MSU Flag
|
||||
; $7F509B - Unused
|
||||
; $7F509C - Inverted Mode Duck Map Temporary
|
||||
; $7F509D - Stalfos Bomb Damage Value
|
||||
; $7F509E - Valid Key Loaded
|
||||
@@ -1598,18 +1606,89 @@ LowHeartFix:
|
||||
db $08, $08, $10
|
||||
|
||||
;================================================================================
|
||||
org $30D000 ; PC 0x185000 - 0x18503F
|
||||
org $30D000 ; PC 0x185000 - 0x18505F
|
||||
MSUTrackList:
|
||||
db $00,$01,$03,$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,$03,$03,$01,$03,$03
|
||||
db $03,$01,$01,$FF,$FF,$FF,$FF,$FF
|
||||
db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
|
||||
db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
|
||||
db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
|
||||
db $03,$01,$01,$03,$03,$03,$03,$03
|
||||
db $03,$03,$03,$03,$03,$03,$03,$03
|
||||
db $03,$03,$03,$03,$03,$03,$03,$03
|
||||
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
|
||||
UnusedTable: ; please do not move this - kkat
|
||||
|
||||
Reference in New Issue
Block a user