Merge branch 'master' into DRMain
# Conflicts: # LTTP_RND_GeneralBugfixes.asm # hooks.asm
This commit is contained in:
152
msu.asm
152
msu.asm
@@ -116,12 +116,15 @@
|
||||
|
||||
!FLAG_MSU_PLAY = #$01
|
||||
!FLAG_MSU_REPEAT = #$02
|
||||
!FLAG_MSU_RESUME = #$04
|
||||
!FLAG_MSU_STATUS_TRACK_MISSING = #$08
|
||||
!FLAG_MSU_STATUS_AUDIO_PLAYING = #$10
|
||||
!FLAG_MSU_STATUS_AUDIO_REPEATING = #$20
|
||||
!FLAG_MSU_STATUS_AUDIO_BUSY = #$40
|
||||
!FLAG_MSU_STATUS_DATA_BUSY = #$80
|
||||
|
||||
!FLAG_RESUME_CANCEL = #$01
|
||||
!FLAG_RESUME_FADEIN = #$02
|
||||
|
||||
!REG_CURRENT_MSU_TRACK = $010B
|
||||
!REG_CURRENT_VOLUME = $0127
|
||||
@@ -145,11 +148,46 @@
|
||||
!VAL_VOLUME_HALF = #$80
|
||||
!VAL_VOLUME_FULL = #$FF
|
||||
|
||||
;================================================================================
|
||||
; Check if A has an overworld track
|
||||
;--------------------------------------------------------------------------------
|
||||
IsOverworldTrack:
|
||||
CMP #02 : BEQ .yes ; 2 - Hyrule Field
|
||||
CMP #03 : BEQ .yes ; 3 - Time of Falling Rain
|
||||
CMP #04 : BEQ .yes ; 4 - The Silly Pink Rabbit
|
||||
CMP #05 : BEQ .yes ; 5 - Forest of Mystery
|
||||
CMP #07 : BEQ .yes ; 7 - Kakariko Village
|
||||
CMP #09 : BEQ .yes ; 9 - Dark Golden Land
|
||||
CMP #15 : BEQ .yes ; 15 - Dark Woods
|
||||
CMP #60 : BEQ .yes ; 60 - Light World OW (after ped pull)
|
||||
CMP #61 : BEQ .yes ; 61 - Dark World OW (with all crystals)
|
||||
.no
|
||||
CLC : RTS
|
||||
.yes
|
||||
SEC : RTS
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;================================================================================
|
||||
; Check if the track in A should be resumed
|
||||
;--------------------------------------------------------------------------------
|
||||
IsResumableTrack:
|
||||
PHA
|
||||
LDA MSUResumeType : BEQ +
|
||||
PLA
|
||||
JSR IsOverworldTrack
|
||||
RTS
|
||||
+
|
||||
PLA
|
||||
SEC
|
||||
RTS
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;================================================================================
|
||||
; Extended OST/SPC fallback, decide which track to actually play
|
||||
;--------------------------------------------------------------------------------
|
||||
CheckMusicLoadRequest:
|
||||
PHP : REP #$10 : PHA : PHX : PHY
|
||||
PHP : PHB : PHD : REP #$30 : PHA : PHX : PHY
|
||||
LDA #$0000 : TCD : SEP #$20 : PHA : PLB
|
||||
LDA !REG_MUSIC_CONTROL_REQUEST : BEQ .skip+3 : BMI .skip+3
|
||||
CMP !REG_CURRENT_COMMAND : BNE .continue
|
||||
CMP.b #22 : BNE .skip ; Check GT when mirroring from upstairs
|
||||
@@ -159,7 +197,7 @@ CheckMusicLoadRequest:
|
||||
.skip
|
||||
LDA !REG_MUSIC_CONTROL_REQUEST
|
||||
STA !REG_MUSIC_CONTROL : STZ !REG_MUSIC_CONTROL_REQUEST
|
||||
PLY : PLX : PLA : PLP
|
||||
REP #$30 : PLY : PLX : PLA : PLD : PLB : PLP
|
||||
RTL
|
||||
|
||||
.continue
|
||||
@@ -320,13 +358,13 @@ CheckMusicLoadRequest:
|
||||
|
||||
.done
|
||||
LDA !REG_MUSIC_CONTROL_REQUEST : STA !REG_MUSIC_CONTROL : STZ !REG_MUSIC_CONTROL_REQUEST
|
||||
PLY : PLX : PLA : PLP
|
||||
REP #$30 : PLY : PLX : PLA : PLD : PLB : PLP
|
||||
RTL
|
||||
|
||||
.sfx_indoors
|
||||
LDA !REG_MUSIC_CONTROL_REQUEST : STA !REG_MUSIC_CONTROL : STZ !REG_MUSIC_CONTROL_REQUEST
|
||||
PLY : PLX : PLA : PLP
|
||||
PHP : SEP #$20 : LDA.b #$05 : STA $012D : PLP
|
||||
SEP #$20 : LDA.b #$05 : STA $012D
|
||||
REP #$30 : PLY : PLX : PLA : PLD : PLB : PLP
|
||||
JML Module_PreDungeon_setAmbientSfx
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -404,6 +442,12 @@ StoreMusicOnDeath:
|
||||
MSUInit:
|
||||
PHP
|
||||
|
||||
LDA #$00
|
||||
STA !MSU_LOADED_TRACK
|
||||
STA !MSU_RESUME_TRACK
|
||||
STA !MSU_RESUME_TIME : STA !MSU_RESUME_TIME+1 : STA !MSU_RESUME_TIME+2 : STA !MSU_RESUME_TIME+3
|
||||
STA !MSU_RESUME_CONTROL
|
||||
|
||||
LDA NoBGM : BNE .done
|
||||
|
||||
REP #$20
|
||||
@@ -467,6 +511,41 @@ MSUInit:
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;================================================================================
|
||||
; Stop MSU-1 audio track and save the current position when approriate
|
||||
;--------------------------------------------------------------------------------
|
||||
MSUStopPlaying:
|
||||
PHA : XBA : PHA
|
||||
LDA !MSU_LOADED_TRACK
|
||||
JSR IsResumableTrack : BCC +
|
||||
; dont save if we already saved recently
|
||||
REP #$20
|
||||
LDA !MSU_RESUME_TRACK : AND #$00FF : BEQ ++
|
||||
LDA !NMI_COUNTER : !SUB !MSU_RESUME_TIME : PHA
|
||||
LDA !NMI_COUNTER+2 : SBC !MSU_RESUME_TIME+2 : BNE +++
|
||||
PLA : CMP MSUResumeTimer : !BLT .too_early
|
||||
BRA ++
|
||||
+++
|
||||
PLA
|
||||
++
|
||||
; saving
|
||||
LDA !NMI_COUNTER : STA !MSU_RESUME_TIME
|
||||
LDA !NMI_COUNTER+2 : STA !MSU_RESUME_TIME+2
|
||||
SEP #$20
|
||||
|
||||
LDA !MSU_LOADED_TRACK : STA !MSU_RESUME_TRACK
|
||||
LDA #$00 : STA !MSU_LOADED_TRACK ; dont take this path if we're calling again
|
||||
LDA !FLAG_MSU_RESUME : STA !REG_MSU_CONTROL ; save this track's position
|
||||
PLA : XBA : PLA
|
||||
RTS
|
||||
.too_early
|
||||
SEP #$20
|
||||
+
|
||||
LDA #$00 : STA !REG_MSU_CONTROL
|
||||
PLA : XBA : PLA
|
||||
RTS
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;================================================================================
|
||||
; Play MSU-1 audio track
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -477,6 +556,7 @@ MSUMain:
|
||||
LDA !REG_MSU_ID_01 : CMP !VAL_MSU_ID_01 : BEQ .continue
|
||||
.nomsu
|
||||
SEP #$30
|
||||
-
|
||||
JML SPCContinue
|
||||
.continue
|
||||
LDA !REG_MSU_ID_23 : CMP !VAL_MSU_ID_23 : BNE .nomsu
|
||||
@@ -488,16 +568,28 @@ MSUMain:
|
||||
LDA !REG_MSU_DELAYED_COMMAND : BEQ .do_fade
|
||||
|
||||
.check_busy
|
||||
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_BUSY : BEQ .ready
|
||||
JML SPCContinue
|
||||
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_BUSY : BNE -
|
||||
.ready
|
||||
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BEQ .start
|
||||
JML SPCContinue
|
||||
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BNE -
|
||||
.start
|
||||
LDA !MSU_RESUME_CONTROL : BIT !FLAG_RESUME_CANCEL : BEQ +
|
||||
EOR !FLAG_RESUME_CANCEL : STA !MSU_RESUME_CONTROL
|
||||
REP #$20 : LDA !REG_MSU_LOADED_TRACK : STA !REG_MSU_TRACK : SEP #$20
|
||||
BRA -
|
||||
+
|
||||
LDA !VAL_VOLUME_FULL
|
||||
STA !REG_TARGET_VOLUME
|
||||
|
||||
LDA !MSU_RESUME_CONTROL : BIT !FLAG_RESUME_FADEIN : BEQ +
|
||||
EOR !FLAG_RESUME_FADEIN : STA !MSU_RESUME_CONTROL
|
||||
LDA #$00
|
||||
BRA ++
|
||||
+
|
||||
LDA !VAL_VOLUME_FULL
|
||||
++
|
||||
STA !REG_CURRENT_VOLUME
|
||||
STA !REG_MSU_VOLUME
|
||||
|
||||
LDA !REG_CURRENT_MSU_TRACK : DEC : PHA
|
||||
AND.b #$07 : TAY
|
||||
PLA : LSR #3 : TAX
|
||||
@@ -524,7 +616,7 @@ MSUMain:
|
||||
LDA !REG_TARGET_VOLUME : BRA .set
|
||||
.mute
|
||||
STZ !REG_CURRENT_VOLUME
|
||||
STZ !REG_MSU_CONTROL
|
||||
JSR MSUStopPlaying
|
||||
BRA .set
|
||||
.increment
|
||||
ADC !VAL_VOLUME_INCREMENT : BCS .max
|
||||
@@ -570,7 +662,7 @@ MSUMain:
|
||||
CPX !REG_CURRENT_MSU_TRACK : BNE +
|
||||
- : CPX #27 : BEQ +
|
||||
TXA
|
||||
BRA .done+1
|
||||
JMP .done+1
|
||||
+
|
||||
CPX !REG_CURRENT_COMMAND : BEQ -
|
||||
LDA.b #$00 : XBA
|
||||
@@ -579,6 +671,8 @@ MSUMain:
|
||||
!SUB !REG_MSU_PACK_COUNT : BRA -
|
||||
+
|
||||
|
||||
JSR MSUStopPlaying
|
||||
|
||||
PHX : PHA : TXA : PLX
|
||||
REP #$20
|
||||
BEQ +
|
||||
@@ -587,10 +681,35 @@ MSUMain:
|
||||
DEX : BNE -
|
||||
+
|
||||
STA !REG_MSU_TRACK
|
||||
STA !REG_MSU_LOADED_TRACK
|
||||
SEP #$20
|
||||
|
||||
STZ !REG_MSU_CONTROL
|
||||
PLX
|
||||
TXA : CMP !MSU_RESUME_TRACK : BNE + ; dont resume if too late
|
||||
REP #$20
|
||||
LDA !NMI_COUNTER : !SUB !MSU_RESUME_TIME : PHA
|
||||
LDA !NMI_COUNTER+2 : SBC !MSU_RESUME_TIME+2 : BNE ++
|
||||
PLA : CMP MSUResumeTimer : !BGE +++
|
||||
SEP #$20
|
||||
LDA !FLAG_RESUME_FADEIN : BRA .done_resume
|
||||
++
|
||||
PLA
|
||||
+++
|
||||
SEP #$20
|
||||
LDA !FLAG_RESUME_CANCEL
|
||||
.done_resume:
|
||||
STA !MSU_RESUME_CONTROL
|
||||
LDA #$00 : STA !MSU_RESUME_TRACK
|
||||
+
|
||||
CPX #07 : BNE + ; Kakariko Village
|
||||
LDA $10 : CMP #$07 : BNE +
|
||||
; we're in link's house -> ignore
|
||||
LDA #$00
|
||||
BRA ++
|
||||
+
|
||||
TXA
|
||||
++
|
||||
STA !MSU_LOADED_TRACK
|
||||
STX !REG_CURRENT_MSU_TRACK
|
||||
LDA !REG_MSU_PACK_CURRENT : CMP #$FE : !BLT +
|
||||
LDA #$00 : BRA ++
|
||||
@@ -625,12 +744,12 @@ MSUMain:
|
||||
; Wait for the fanfare music to start, or else it can get skipped entirely
|
||||
;--------------------------------------------------------------------------------
|
||||
FanfarePreload:
|
||||
STA !REG_MUSIC_CONTROL_REQUEST ; thing we wrote over
|
||||
STA.l !REG_MUSIC_CONTROL_REQUEST ; thing we wrote over
|
||||
PHA
|
||||
JSL CheckMusicLoadRequest
|
||||
WAI
|
||||
PLA
|
||||
- : CMP !REG_SPC_CONTROL : BNE -
|
||||
- : CMP.l !REG_SPC_CONTROL : BNE -
|
||||
JML AddReceivedItem_doneWithSoundEffects
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -653,7 +772,7 @@ PendantFanfareWait:
|
||||
jml PendantFanfareContinue
|
||||
.spc
|
||||
SEP #$20
|
||||
LDA !REG_SPC_CONTROL : BNE .continue
|
||||
LDA.l !REG_SPC_CONTROL : BNE .continue
|
||||
.done
|
||||
jml PendantFanfareDone
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -677,7 +796,7 @@ CrystalFanfareWait:
|
||||
jml CrystalFanfareContinue
|
||||
.spc
|
||||
SEP #$20
|
||||
LDA !REG_SPC_CONTROL : BNE .continue
|
||||
LDA.l !REG_SPC_CONTROL : BNE .continue
|
||||
.done
|
||||
jml CrystalFanfareDone
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -704,6 +823,7 @@ EndingMusicWait:
|
||||
LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .done
|
||||
SEP #$20
|
||||
.wait
|
||||
LDA.b $50 : BNE .done
|
||||
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_PLAYING : BNE .wait
|
||||
.done
|
||||
SEP #$20
|
||||
|
||||
Reference in New Issue
Block a user