Add runtime muting
This commit is contained in:
@@ -385,6 +385,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:
|
||||||
|
|
||||||
@@ -418,6 +423,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:
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -1445,6 +1445,14 @@ 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
|
||||||
|
!REG_MUSIC_CONTROL = "$012B"
|
||||||
|
org $0080DD
|
||||||
|
dw !REG_MUSIC_CONTROL
|
||||||
|
|
||||||
|
org $008101
|
||||||
|
dw !REG_MUSIC_CONTROL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|
||||||
;================================================================================
|
;================================================================================
|
||||||
|
|||||||
96
msu.asm
96
msu.asm
@@ -18,11 +18,11 @@
|
|||||||
; 8 - Dimensional Shift (Mirror)
|
; 8 - Dimensional Shift (Mirror)
|
||||||
; 9 - Dark Golden Land
|
; 9 - Dark Golden Land
|
||||||
; 10 - Unsealing the Master Sword
|
; 10 - Unsealing the Master Sword
|
||||||
; 11 - Beginning of th Journey
|
; 11 - Beginning of the Journey
|
||||||
; 12 - Soldiers of Kakariko Village
|
; 12 - Soldiers of Kakariko Village
|
||||||
; 13 - Black Mist
|
; 13 - Black Mist
|
||||||
; 14 - Guessing Game House
|
; 14 - Guessing Game House
|
||||||
; 15 - (Unused)
|
; 15 - Dark Woods
|
||||||
; 16 - Majestic Castle
|
; 16 - Majestic Castle
|
||||||
; 17 - Lost Ancient Ruins
|
; 17 - Lost Ancient Ruins
|
||||||
; 18 - Dank Dungeons
|
; 18 - Dank Dungeons
|
||||||
@@ -117,19 +117,23 @@
|
|||||||
!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 = $012B
|
||||||
!REG_MUSIC_CONTROL = $012C
|
;!REG_MUSIC_CONTROL = $012C
|
||||||
|
!REG_MUSIC_CONTROL_REQUEST = $012C
|
||||||
!REG_CURRENT_TRACK = $0130
|
!REG_CURRENT_TRACK = $0130
|
||||||
!REG_CURRENT_COMMAND = $0133
|
!REG_CURRENT_COMMAND = $0133
|
||||||
|
|
||||||
!REG_SPC_CONTROL = $2140
|
!REG_SPC_CONTROL = $2140
|
||||||
!REG_NMI_FLAGS = $4210
|
!REG_NMI_FLAGS = $4210
|
||||||
|
|
||||||
!REG_MSU_DELAYED_COMMAND = $7F5047
|
; $7EF50A0 - $7EF50AF Reserved block in main RAM
|
||||||
!REG_MSU_PACK_COUNT = $7F5048
|
!REG_MSU_FALLBACK_TABLE = $7F50A0 ; 8 bytes
|
||||||
!REG_MSU_PACK_CURRENT = $7F5049
|
!REG_MSU_DELAYED_COMMAND = $7F50A9
|
||||||
|
!REG_MSU_PACK_COUNT = $7F50AA
|
||||||
|
!REG_MSU_PACK_CURRENT = $7F50AB
|
||||||
|
|
||||||
!VAL_COMMAND_FADE_OUT = #$F1
|
!VAL_COMMAND_FADE_OUT = #$F1
|
||||||
!VAL_COMMAND_FADE_HALF = #$F2
|
!VAL_COMMAND_FADE_HALF = #$F2
|
||||||
@@ -141,8 +145,66 @@
|
|||||||
!VAL_VOLUME_HALF = #$80
|
!VAL_VOLUME_HALF = #$80
|
||||||
!VAL_VOLUME_FULL = #$FF
|
!VAL_VOLUME_FULL = #$FF
|
||||||
|
|
||||||
|
CheckMusicLoadRequest:
|
||||||
|
PHP : REP #$10 : PHA : PHX
|
||||||
|
LDA !REG_MUSIC_CONTROL_REQUEST : BEQ .done : BMI .done
|
||||||
|
|
||||||
|
+; ; Shut down NMI until music loads
|
||||||
|
STZ $4200
|
||||||
|
|
||||||
|
; Set SPC into loader mode
|
||||||
|
LDA.b #$FF : STA $2140
|
||||||
|
|
||||||
|
LDA NoBGM : BNE .mute
|
||||||
|
LDX !REG_MSU_ID_01 : CPX !VAL_MSU_ID_01 : BNE .unmute
|
||||||
|
LDX !REG_MSU_ID_23 : CPX !VAL_MSU_ID_23 : BNE .unmute
|
||||||
|
LDX !REG_MSU_ID_45 : CPX !VAL_MSU_ID_45 : BNE .unmute
|
||||||
|
|
||||||
|
; TODO: actually look up the current track in the table
|
||||||
|
LDA !REG_MSU_FALLBACK_TABLE : BEQ .unmute
|
||||||
|
|
||||||
|
.mute
|
||||||
|
LDA.b #SPCMutePayload : STA $00
|
||||||
|
LDA.b #SPCMutePayload>>8 : STA $01
|
||||||
|
LDA.b #SPCMutePayload>>16
|
||||||
|
BRA .load
|
||||||
|
|
||||||
|
.unmute
|
||||||
|
LDA.b #SPCUnmutePayload : STA $00
|
||||||
|
LDA.b #SPCUnmutePayload>>8 : STA $01
|
||||||
|
LDA.b #SPCUnmutePayload>>16
|
||||||
|
|
||||||
|
.load
|
||||||
|
JSL Sound_LoadLightWorldSongBank_do_load
|
||||||
|
|
||||||
|
; Re-enable NMI and joypad
|
||||||
|
LDA.b #$81 : STA $4200
|
||||||
|
|
||||||
|
LDA $10
|
||||||
|
CMP #$07 : BEQ .sfx_indoors : CMP #$0E : BEQ .sfx_indoors
|
||||||
|
CMP #$09 : BNE .done
|
||||||
|
|
||||||
|
.sfx_outdoors
|
||||||
|
SEP #$10
|
||||||
|
; PreOverworld_LoadProperties.noWarpVortex ; Bank02.asm:820
|
||||||
|
LDX.b #$05
|
||||||
|
LDA $7EF3C5 : CMP.b #$02 : BCS +
|
||||||
|
LDX.b #$01 : +
|
||||||
|
STX $012D
|
||||||
|
REP #$10
|
||||||
|
|
||||||
|
.done
|
||||||
|
LDA !REG_MUSIC_CONTROL_REQUEST : STA !REG_MUSIC_CONTROL : STZ !REG_MUSIC_CONTROL_REQUEST
|
||||||
|
PLX : PLA : PLP
|
||||||
|
RTL
|
||||||
|
|
||||||
|
.sfx_indoors
|
||||||
|
LDA !REG_MUSIC_CONTROL_REQUEST : STA !REG_MUSIC_CONTROL : STZ !REG_MUSIC_CONTROL_REQUEST
|
||||||
|
PLX : PLA : PLP
|
||||||
|
JML Module_PreDungeon_setAmbientSfx
|
||||||
|
|
||||||
msu_init:
|
msu_init:
|
||||||
REP #$20 : SEP #$10
|
PHP : REP #$20
|
||||||
LDA #$0000
|
LDA #$0000
|
||||||
STA !REG_MSU_VOLUME
|
STA !REG_MSU_VOLUME
|
||||||
STA !REG_MSU_PACK_COUNT
|
STA !REG_MSU_PACK_COUNT
|
||||||
@@ -155,7 +217,7 @@ msu_init:
|
|||||||
LDX.b #$FF
|
LDX.b #$FF
|
||||||
LDY.b #$01
|
LDY.b #$01
|
||||||
SEP #$20
|
SEP #$20
|
||||||
.check
|
.check_pack
|
||||||
TYA
|
TYA
|
||||||
REP #$20
|
REP #$20
|
||||||
STA !REG_MSU_TRACK
|
STA !REG_MSU_TRACK
|
||||||
@@ -163,11 +225,12 @@ msu_init:
|
|||||||
INX
|
INX
|
||||||
SEP #$20
|
SEP #$20
|
||||||
TAY
|
TAY
|
||||||
.wait
|
.wait_pack
|
||||||
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_BUSY : BNE .wait
|
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
|
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BEQ .check_pack
|
||||||
TXA : STA !REG_MSU_PACK_COUNT
|
TXA : STA !REG_MSU_PACK_COUNT
|
||||||
.done
|
.done
|
||||||
|
PLP
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
msu_main:
|
msu_main:
|
||||||
@@ -250,17 +313,24 @@ load_track:
|
|||||||
CPX !REG_CURRENT_MSU_TRACK : BNE .check_dungeon
|
CPX !REG_CURRENT_MSU_TRACK : BNE .check_dungeon
|
||||||
CPX #$1B : BEQ .continue
|
CPX #$1B : BEQ .continue
|
||||||
JML spc_continue
|
JML spc_continue
|
||||||
|
|
||||||
.check_dungeon
|
.check_dungeon
|
||||||
|
; Convert dungeon tracks to dungeon-specific ones
|
||||||
|
CPX #$10 : BEQ .castle
|
||||||
CPX #$11 : BEQ .dungeon
|
CPX #$11 : BEQ .dungeon
|
||||||
CPX #$16 : BEQ .dungeon
|
CPX #$16 : BEQ .dungeon
|
||||||
CPX #$15 : BNE .continue
|
CPX #$15 : BNE .continue
|
||||||
; boss
|
; boss
|
||||||
LDA $040C : LSR : !ADD #$2D
|
LDA $040C : LSR : !ADD #$2D
|
||||||
BRA .continue-1
|
BRA .continue-1
|
||||||
|
.castle
|
||||||
|
LDA $040C : CMP #$08 : BEQ .dungeon+3 : BRA .continue
|
||||||
.dungeon
|
.dungeon
|
||||||
LDA $040C : LSR : !ADD #$21 : TAX
|
LDA $040C : LSR : !ADD #$21 : TAX
|
||||||
.continue
|
.continue
|
||||||
|
CPX !REG_CURRENT_MSU_TRACK : BNE +
|
||||||
|
JML spc_continue
|
||||||
|
+
|
||||||
LDA #$00 : XBA
|
LDA #$00 : XBA
|
||||||
LDA !REG_MSU_PACK_CURRENT : BEQ +
|
LDA !REG_MSU_PACK_CURRENT : BEQ +
|
||||||
|
|
||||||
|
|||||||
52
tables.asm
52
tables.asm
@@ -960,7 +960,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
|
||||||
@@ -1438,9 +1442,6 @@ dw #9999 ; Rupee Limit
|
|||||||
; $7F5042 - Tile Upload Offset Override (Low)
|
; $7F5042 - Tile Upload Offset Override (Low)
|
||||||
; $7F5043 - Tile Upload Offset Override (High)
|
; $7F5043 - Tile Upload Offset Override (High)
|
||||||
; $7F5044 - $7F5046 - NMI Auxiliary Function
|
; $7F5044 - $7F5046 - NMI Auxiliary Function
|
||||||
; $7F5047 - MSU-1 Delayed Load Command
|
|
||||||
; $7F5048 - MSU-1 Pack Count
|
|
||||||
; $7F5049 - MSU-1 Current Pack
|
|
||||||
; $7F5047 - $7F504F - Unused
|
; $7F5047 - $7F504F - Unused
|
||||||
; $7F5050 - $7F506F - Shop Block
|
; $7F5050 - $7F506F - Shop Block
|
||||||
; $7F5070 - Reserved for OneMind
|
; $7F5070 - Reserved for OneMind
|
||||||
@@ -1621,6 +1622,49 @@ dw Music_TRock
|
|||||||
dw Music_GTower
|
dw Music_GTower
|
||||||
dw $0000
|
dw $0000
|
||||||
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
|
||||||
|
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
; 0x185060 - 1850FF (unused)
|
; 0x185060 - 1850FF (unused)
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user