Merge branch 'master' into DRMain

# Conflicts:
#	LTTP_RND_GeneralBugfixes.asm
#	hooks.asm
This commit is contained in:
aerinon
2021-06-22 13:12:07 -06:00
11 changed files with 428 additions and 98 deletions

View File

@@ -81,7 +81,12 @@ db #$20, #$19, #$08, #$31 ; year/month/day
!REG_MSU_PACK_COUNT = $7F50AA !REG_MSU_PACK_COUNT = $7F50AA
!REG_MSU_PACK_CURRENT = $7F50AB !REG_MSU_PACK_CURRENT = $7F50AB
!REG_MSU_PACK_REQUEST = $7F50AC !REG_MSU_PACK_REQUEST = $7F50AC
!REG_SPC_LOADING = $7F50AD !REG_MSU_LOADED_TRACK = $7F50AD ; 2 bytes
!REG_SPC_LOADING = $7F50AF
!MSU_LOADED_TRACK = $7F5400
!MSU_RESUME_TRACK = $7F5401
!MSU_RESUME_TIME = $7F5402 ; 4 bytes
!MSU_RESUME_CONTROL = $7F5406
!REG_MUSIC_CONTROL = $012B !REG_MUSIC_CONTROL = $012B
;!REG_MUSIC_CONTROL = $012C ;!REG_MUSIC_CONTROL = $012C
!REG_MUSIC_CONTROL_REQUEST = $012C !REG_MUSIC_CONTROL_REQUEST = $012C
@@ -145,7 +150,6 @@ incsrc mantle.asm
incsrc swordswap.asm incsrc swordswap.asm
incsrc scratchpad.asm incsrc scratchpad.asm
incsrc map.asm incsrc map.asm
incsrc msu.asm
incsrc dialog.asm incsrc dialog.asm
incsrc entrances.asm incsrc entrances.asm
incsrc clock.asm incsrc clock.asm
@@ -213,6 +217,8 @@ incsrc servicerequest.asm
incsrc elder.asm incsrc elder.asm
incsrc toast.asm incsrc toast.asm
incsrc darkroomitems.asm incsrc darkroomitems.asm
incsrc fastcredits.asm
incsrc msu.asm
incsrc multiworld.asm incsrc multiworld.asm
incsrc terrorpin.asm incsrc terrorpin.asm
warnpc $A58000 warnpc $A58000

View File

@@ -24,8 +24,7 @@ RTL
;================================================================================ ;================================================================================
ConditionalWhitenBg: ConditionalWhitenBg:
LDX.b #$00 LDX.b #$00
LDA.l DisableFlashing LDA.l DisableFlashing : REP #$20 : BNE +
REP #$20 : BNE +
LDA $00,X LDA $00,X
JSR WhitenLoopReal JSR WhitenLoopReal
RTL RTL
@@ -55,10 +54,10 @@ WhitenLoopReal:
LDA $7EC3F4 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F4 LDA $7EC3F4 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F4
LDA $10 : CMP.w #$07 : BNE + LDA $10 : CMP.w #$07 : BNE +
LDA $048E LDA $048E
CMP.w #$3C : BEQ ++ ; hookshot cave CMP.w #$3C : BEQ ++
CMP.w #$9D : BEQ ++ ; gt right CMP.w #$9D : BEQ ++
CMP.w #$9C : BEQ ++ ; gt big room CMP.w #$9C : BEQ ++
CMP.w #$A5 : BEQ ++ ; wizzrobes 1 CMP.w #$A5 : BEQ ++
+ +
LDA $7EC3F6 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F6 LDA $7EC3F6 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F6
LDA $7EC3F8 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F8 LDA $7EC3F8 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F8
@@ -68,7 +67,6 @@ WhitenLoopReal:
LDA $7EC3F8 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F8 LDA $7EC3F8 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F8
BRA +++ BRA +++
+++ +++
LDA $7EC3FA : JSL Filter_Majorly_Whiten_Color : STA $7EC5FA LDA $7EC3FA : JSL Filter_Majorly_Whiten_Color : STA $7EC5FA
LDA $7EC3FC : JSL Filter_Majorly_Whiten_Color : STA $7EC5FC LDA $7EC3FC : JSL Filter_Majorly_Whiten_Color : STA $7EC5FC
LDA $7EC3FE : JSL Filter_Majorly_Whiten_Color : STA $7EC5FE LDA $7EC3FE : JSL Filter_Majorly_Whiten_Color : STA $7EC5FE
@@ -97,7 +95,6 @@ WhitenLoopDummy:
INX #2 : CPX.b #$10 : BEQ + INX #2 : CPX.b #$10 : BEQ +
JMP - JMP -
+ +
LDA $7EC3F0 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F0 LDA $7EC3F0 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F0
LDA $7EC3F2 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F2 LDA $7EC3F2 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F2
LDA $7EC3F4 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F4 LDA $7EC3F4 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F4
@@ -165,7 +162,7 @@ RestoreBgEther:
INX #2 : CPX.b #$10 : BNE - INX #2 : CPX.b #$10 : BNE -
BRA ++ BRA ++
++ ++
JML $02FF51 JML $02FF51 ; Bank0E.asm : 3936 vanilla restore routine after loop which RTLs
;================================================================================ ;================================================================================
DDMConditionalLightning: DDMConditionalLightning:
LDA.l DisableFlashing LDA.l DisableFlashing
@@ -173,7 +170,7 @@ DDMConditionalLightning:
BNE + BNE +
LDA.w $0000 LDA.w $0000
LDX.b #$02 LDX.b #$02
JML $07FA7F JML $07FA7F ; Bank0E.asm : 4738 vanilla loop equivalent to below beginning at LDY #$00
+ +
LDA.b $00 : LDX.b #$02 : LDY #$00 LDA.b $00 : LDX.b #$02 : LDY #$00
- -
@@ -184,13 +181,10 @@ DDMConditionalLightning:
LDA $F523, Y : LDA $7EC5F0, X LDA $F523, Y : LDA $7EC5F0, X
INY #2 INY #2
INX #2 : CPX.b #$10 : BNE - INX #2 : CPX.b #$10 : BNE -
JML $07FAAC ; Bank0E.asm : 4754 both branches converge here
JML $07FAAC
;================================================================================ ;================================================================================
ConditionalGTFlash: ConditionalGTFlash:
LDA.l DisableFlashing LDA.l DisableFlashing : REP #$20 : BNE +
REP #$20
BNE +
LDA $0000 LDA $0000
- -
LDA $F9C1, Y : STA $7EC5D0, X LDA $F9C1, Y : STA $7EC5D0, X
@@ -206,14 +200,12 @@ ConditionalGTFlash:
RTL RTL
;================================================================================ ;================================================================================
ConditionalRedFlash: ConditionalRedFlash:
LDA.l DisableFlashing LDA.l DisableFlashing : REP #$20 : BNE +
REP #$20 : BNE +
LDA $00,X LDA $00,X
LDA.w #$1D59 : STA $7EC5DA LDA.w #$1D59 : STA $7EC5DA
LDA.w #$25FF : STA $7EC5DC LDA.w #$25FF : STA $7EC5DC
LDA.w #$001A LDA.w #$001A
RTL RTL
+ +
LDA $00 LDA $00
LDA.w #$1D59 : LDA $7EC5DA LDA.w #$1D59 : LDA $7EC5DA
@@ -222,8 +214,7 @@ ConditionalRedFlash:
RTL RTL
;================================================================================ ;================================================================================
ConditionalPedAncilla: ConditionalPedAncilla:
LDA.l DisableFlashing LDA.l DisableFlashing : REP #$20 : BNE +
REP #$20 : BNE +
LDA $00,X LDA $00,X
LDA $00 : STA $04 LDA $00 : STA $04
LDA $02 : STA $06 LDA $02 : STA $06
@@ -234,30 +225,70 @@ ConditionalPedAncilla:
LDA $02 : LDA $06 LDA $02 : LDA $06
RTL RTL
;================================================================================ ;================================================================================
ConditionalChangeGearPalette: LoadElectroPalette:
PHY REP #$20
LDA.w #$0202 : STA $0C
LDA.w #$0404 : STA $0E
LDA.w #$001B : STA $02
SEP #$10
LDX $0C : LDA $1BEBB4, X : AND.w #$00FF : ADC #$D630
REP #$10 : LDX.w #$01B2 : LDY.w #$0002
JSR ConditionalLoadGearPalette
SEP #$10
LDX $0D
LDA $1BEBC1, X : AND.w #$00FF : ADC #$D648
REP #$10 : LDX.w #$01B8 : LDY.w #$0003
JSR ConditionalLoadGearPalette
SEP #$10
LDX $0E
LDA $1BEC06, X : AND.w #$00FF : ASL A : ADC #$D308
REP #$10 : LDX.w #$01E2 : LDY.w #$000E
JSR ConditionalLoadGearPalette
SEP #$30
INC $15
RTL
;================================================================================
ConditionalLoadGearPalette:
STA $00 STA $00
SEP #$20 SEP #$20
LDA.l DisableFlashing : REP #$20 : BNE + LDA.l DisableFlashing : REP #$20 : BNE +
LDA $00,X LDA $00,X
- -
LDA [$00] : STA $7EC300, X : STA $7EC500, X LDA [$00]
STA $7EC500, X
INC $00 : INC $00 INC $00 : INC $00
INX #2 INX #2
DEY : BPL - DEY
BRA ++ BPL -
RTS
+ +
LDA $00 LDA $00
- -
LDA [$00] : LDA $7EC300, X : LDA $7EC500, X LDA [$00]
LDA $7EC500, X
INC $00 : INC $00 INC $00 : INC $00
INX #2 INX #2
DEY : BPL - DEY
BRA ++ BPL -
++ RTS
PLY ; use what was in Y register to determine which p flags to set ;================================================================================
CPY #$000E : BNE + RestoreElectroPalette:
SEP #$20 REP #$30
+ LDX.w #$01B2 : LDY.w #$0002
SEP #$10 JSR FillPaletteBufferFromAux
LDX.w #$01B8 : LDY.w #$0003
JSR FillPaletteBufferFromAux
LDX.w #$01E2 : LDY.w #$000E
JSR FillPaletteBufferFromAux
SEP #$30
INC $15
RTL RTL
;================================================================================
FillPaletteBufferFromAux:
-
LDA $7EC300, X
STA $7EC500, X
INX #2
DEY
BPL -
RTS

View File

@@ -17,7 +17,7 @@ OnDrawHud:
JSL.l DrawChallengeTimer ; this has to come before NewDrawHud because the timer overwrites the compass counter JSL.l DrawChallengeTimer ; this has to come before NewDrawHud because the timer overwrites the compass counter
JSL.l DrHudOverride JSL.l DrHudOverride
JSL.l NewDrawHud JSL.l NewDrawHud
JSL.l SwapSpriteIfNecissary JSL.l SwapSpriteIfNecessary
JSL.l CuccoStorm JSL.l CuccoStorm
JSL.l PollService JSL.l PollService
JML.l ReturnFromOnDrawHud JML.l ReturnFromOnDrawHud

124
fastcredits.asm Normal file
View File

@@ -0,0 +1,124 @@
;===================================================================================================
FastCreditsCutsceneTimer:
BIT.b $F2-1 : BVC .slow
LDA.w #$0001 : STA.b $50
LDA.b $C8
CLC
ADC.w #$0004
AND.w #$FFFE
STA.b $C8
SEP #$20
RTL
.slow
INC.b $C8
SEP #$20
RTL
FastCreditsScrollOW:
JSR FastCreditsCutsceneScrollY
TAY
STY.b $30
JSR FastCreditsCutsceneScrollX
TAY
STY.b $31
RTL
FastCreditsCutsceneScrollX:
PHX
TXA
CLC
ADC.w #$0020
TAX
LDY.b #$00
JSR FastCreditsCutsceneScroll
PLX
RTS
FastCreditsCutsceneScrollY:
LDY.b #$06
FastCreditsCutsceneScroll:
LDA.w $00E2,Y
CMP.l $0EC308,X ; compare to target
ROL.b $00 ; put carry in here
LDA.l $0EC348,X ; get movement
BPL ++ ; if positive, leave saved carry alone
INC.b $00 ; otherwise, flip it
++ ROR.b $00 ; recover carry
BCC ++ ; scroll if carry not set
LDA.w #$0000
++ BIT.b $F2-1 : BVC .slow ; check for X held
AND.w #$FFFF ; get sign of A
BPL .positive
EOR.w #$FFFF
INC
ASL
ASL
EOR.w #$FFFF
INC
RTS
.positive
ASL
ASL
.slow
RTS
FastCreditsCutsceneUnderworldX:
JSR FastCreditsCutsceneScrollX
CLC
ADC.b $E2
STA.b $E2
RTL
FastCreditsCutsceneUnderworldY:
JSR FastCreditsCutsceneScrollY
CLC
ADC.b $E8
STA.b $E8
RTL
FastTextScroll:
LDA.b $1A
BIT.b $F2-1 : BVC .slow
AND.w #$0000
RTL
.slow
AND.w #$0003
RTL
DumbFlagForMSU:
STA.l $7EF3CA
STZ.b $50
RTL

View File

@@ -23,7 +23,10 @@
FrameHookAction: FrameHookAction:
JSL $0080B5 ; Module_MainRouting JSL $0080B5 ; Module_MainRouting
JSL CheckMusicLoadRequest JSL CheckMusicLoadRequest
PHA : PHP PHP : REP #$30 : PHA
SEP #$20
;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
;+ ;+
@@ -37,9 +40,9 @@ FrameHookAction:
LDA !ITEM_FRAMES_LOW : INC : STA !ITEM_FRAMES_LOW : BNE + LDA !ITEM_FRAMES_LOW : INC : STA !ITEM_FRAMES_LOW : BNE +
LDA !ITEM_FRAMES_HIGH : INC : STA !ITEM_FRAMES_HIGH LDA !ITEM_FRAMES_HIGH : INC : STA !ITEM_FRAMES_HIGH
+ +
SEP #$20 ; set 8-bit accumulator ?? check this ;SEP #$20 ; set 8-bit accumulator ?? check this
++ ++
PLP : PLA REP #$30 : PLA : PLP
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
NMIHookAction: NMIHookAction:

View File

@@ -46,6 +46,7 @@ CheckGanonVulnerability:
dw .light_speed dw .light_speed
dw .crystals_and_bosses dw .crystals_and_bosses
dw .bosses_only dw .bosses_only
dw .all_dungeons_no_agahnim
; 00 = always vulnerable ; 00 = always vulnerable
.vulnerable .vulnerable
@@ -61,10 +62,13 @@ CheckGanonVulnerability:
; 02 = All dungeons ; 02 = All dungeons
.all_dungeons .all_dungeons
LDA.l $7EF3C5 : CMP.b #$03 : BCC .fail ; require post-aga world state
; 09 = All dungeons except agahnim
.all_dungeons_no_agahnim
LDA.l $7EF374 : AND.b #$07 : CMP.b #$07 : BNE .fail ; require all pendants LDA.l $7EF374 : AND.b #$07 : CMP.b #$07 : BNE .fail ; require all pendants
LDA.l $7EF37A : AND.b #$7F : CMP.b #$7F : BNE .fail ; require all crystals LDA.l $7EF37A : AND.b #$7F : CMP.b #$7F : BNE .fail ; require all crystals
LDA.l $7EF3C5 : CMP.b #$03 : BCC .fail ; require post-aga world state LDA.l $7EF2DB : AND.b #$20 : BEQ .fail ; require aga2 defeated (pyramid hole open)
LDA.l $7EF2DB : AND.b #$20 : CMP.b #$20 : BNE .fail ; require aga2 defeated (pyramid hole open)
BRA .success BRA .success
; 03 = crystals and aga 2 ; 03 = crystals and aga 2

View File

@@ -747,9 +747,6 @@ dw $0000, $0002, $0004, $0032, $0004, $0006, $0030
;JSL FlipGreenPendant ;JSL FlipGreenPendant
;NOP #6 ;NOP #6
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $08AAF9 ; -< 42AF9 - ancilla_ether_spell.asm : 46 (JSL Palette_Restore_BG_From_Flash)
JSL.l RestoreBgEther
;--------------------------------------------------------------------------------
org $02A3F4 ; <- 123F4 - Bank02.asm : 6222 (LDA.b #$72 : BRA .setBrightness) org $02A3F4 ; <- 123F4 - Bank02.asm : 6222 (LDA.b #$72 : BRA .setBrightness)
BRA + : NOP #2 : + BRA + : NOP #2 : +
org $02A3FD ; <- 123FD - Bank02.asm : 6233 (LDA.b #$32 : STA $9a) org $02A3FD ; <- 123FD - Bank02.asm : 6233 (LDA.b #$32 : STA $9a)
@@ -758,6 +755,15 @@ JSL.l ConditionalLightning
org $1DE9CD ; <- EE9CD - Bank1D.asm : 568 (JSL Filter_Majorly_Whiten_Bg) org $1DE9CD ; <- EE9CD - Bank1D.asm : 568 (JSL Filter_Majorly_Whiten_Bg)
JSL.l ConditionalWhitenBg JSL.l ConditionalWhitenBg
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $08AAE9 ; <- 042AE9 - ancilla_ether_spell.asm : 34 (JSL Palette_ElectroThemedGear)
JSL.l LoadElectroPalette
;--------------------------------------------------------------------------------
org $08AAF5 ; <- 042AF5 - ancilla_ether_spell.asm : 45 (JSL LoadActualGearPalettes)
JSL.l RestoreElectroPalette
;--------------------------------------------------------------------------------
org $08AAF9 ; -< 42AF9 - ancilla_ether_spell.asm : 46 (JSL Palette_Restore_BG_From_Flash)
JSL.l RestoreBgEther
;--------------------------------------------------------------------------------
org $08AAED ; <- 42AED - ancilla_ether_spell.asm : 35 (JSL Filter_Majorly_Whiten_Bg) org $08AAED ; <- 42AED - ancilla_ether_spell.asm : 35 (JSL Filter_Majorly_Whiten_Bg)
JSL.l ConditionalWhitenBg JSL.l ConditionalWhitenBg
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -776,14 +782,13 @@ JSL.l ConditionalRedFlash : BRA + : NOP #13 : +
org $08C2A1 ; <- 442A3 - ancilla_sword_ceremony.asm : 54 (REP #$20) org $08C2A1 ; <- 442A3 - ancilla_sword_ceremony.asm : 54 (REP #$20)
JSL.l ConditionalPedAncilla : BRA + : NOP #4 : + JSL.l ConditionalPedAncilla : BRA + : NOP #4 : +
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $02FDB1 ; <- 17DB1 - Bank0E.asm : 3760 (JSL LoadGearPalette) org $079976 ; <- 039976 - Bank07.asm : 4009 (JSL Palette_ElectroThemedGear)
JSL.l ConditionalChangeGearPalette : NOP JSL.l LoadElectroPalette
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $02FDCB ; <- 17DCB - Bank0E.asm : 3775 (JSL LoadGearPalette) org $07997C ; <- 03997C - Bank07.asm : 4015 (JSL LoadActualGearPalettes)
JSL.l ConditionalChangeGearPalette : NOP JSL.l RestoreElectroPalette
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $02FDE6 ; <- 17DE6 - Bank0E.asm : 3789 (JSL LoadGearPalette)
JSL.l ConditionalChangeGearPalette : NOP
;================================================================================ ;================================================================================
; Ice Floor Toggle ; Ice Floor Toggle
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -2659,6 +2664,7 @@ CheckIfReading:
LDA #$80 : TRB $3B LDA #$80 : TRB $3B
CPX #$04 CPX #$04
RTS RTS
;================================================================================ ;================================================================================
org $0DB4CA : db $40, $40 ; fire bar statis org $0DB4CA : db $40, $40 ; fire bar statis
@@ -2675,7 +2681,35 @@ Sprite_AttemptDamageToPlayerPlusRecoilLong:
org $1ED1B6 org $1ED1B6
JSL NewFireBarDamage JSL NewFireBarDamage
;================================================================================ ;================================================================================
; Remove heart beeps from 1/2 max HP
org $0DDB60
db $00, $00
;================================================================================
; Fast credits
org $02A096
JSL DumbFlagForMSU
org $0EC3AF
JSL FastCreditsScrollOW
JMP.w $0EC3C7
org $0EC41F
JSL FastCreditsCutsceneUnderworldY
org $0EC42C
JSL FastCreditsCutsceneUnderworldX
org $0EC488
JSL FastCreditsCutsceneTimer
org $0EE773
JSL FastTextScroll : NOP
;================================================================================ ;================================================================================
; Terrorpin AI fix ; Terrorpin AI fix

152
msu.asm
View File

@@ -116,12 +116,15 @@
!FLAG_MSU_PLAY = #$01 !FLAG_MSU_PLAY = #$01
!FLAG_MSU_REPEAT = #$02 !FLAG_MSU_REPEAT = #$02
!FLAG_MSU_RESUME = #$04
!FLAG_MSU_STATUS_TRACK_MISSING = #$08 !FLAG_MSU_STATUS_TRACK_MISSING = #$08
!FLAG_MSU_STATUS_AUDIO_PLAYING = #$10 !FLAG_MSU_STATUS_AUDIO_PLAYING = #$10
!FLAG_MSU_STATUS_AUDIO_REPEATING = #$20 !FLAG_MSU_STATUS_AUDIO_REPEATING = #$20
!FLAG_MSU_STATUS_AUDIO_BUSY = #$40 !FLAG_MSU_STATUS_AUDIO_BUSY = #$40
!FLAG_MSU_STATUS_DATA_BUSY = #$80 !FLAG_MSU_STATUS_DATA_BUSY = #$80
!FLAG_RESUME_CANCEL = #$01
!FLAG_RESUME_FADEIN = #$02
!REG_CURRENT_MSU_TRACK = $010B !REG_CURRENT_MSU_TRACK = $010B
!REG_CURRENT_VOLUME = $0127 !REG_CURRENT_VOLUME = $0127
@@ -145,11 +148,46 @@
!VAL_VOLUME_HALF = #$80 !VAL_VOLUME_HALF = #$80
!VAL_VOLUME_FULL = #$FF !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 ; Extended OST/SPC fallback, decide which track to actually play
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
CheckMusicLoadRequest: 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 LDA !REG_MUSIC_CONTROL_REQUEST : BEQ .skip+3 : BMI .skip+3
CMP !REG_CURRENT_COMMAND : BNE .continue CMP !REG_CURRENT_COMMAND : BNE .continue
CMP.b #22 : BNE .skip ; Check GT when mirroring from upstairs CMP.b #22 : BNE .skip ; Check GT when mirroring from upstairs
@@ -159,7 +197,7 @@ CheckMusicLoadRequest:
.skip .skip
LDA !REG_MUSIC_CONTROL_REQUEST LDA !REG_MUSIC_CONTROL_REQUEST
STA !REG_MUSIC_CONTROL : STZ !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 RTL
.continue .continue
@@ -320,13 +358,13 @@ CheckMusicLoadRequest:
.done .done
LDA !REG_MUSIC_CONTROL_REQUEST : STA !REG_MUSIC_CONTROL : STZ !REG_MUSIC_CONTROL_REQUEST 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 RTL
.sfx_indoors .sfx_indoors
LDA !REG_MUSIC_CONTROL_REQUEST : STA !REG_MUSIC_CONTROL : STZ !REG_MUSIC_CONTROL_REQUEST LDA !REG_MUSIC_CONTROL_REQUEST : STA !REG_MUSIC_CONTROL : STZ !REG_MUSIC_CONTROL_REQUEST
PLY : PLX : PLA : PLP SEP #$20 : LDA.b #$05 : STA $012D
PHP : SEP #$20 : LDA.b #$05 : STA $012D : PLP REP #$30 : PLY : PLX : PLA : PLD : PLB : PLP
JML Module_PreDungeon_setAmbientSfx JML Module_PreDungeon_setAmbientSfx
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -404,6 +442,12 @@ StoreMusicOnDeath:
MSUInit: MSUInit:
PHP 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 LDA NoBGM : BNE .done
REP #$20 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 ; Play MSU-1 audio track
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -477,6 +556,7 @@ MSUMain:
LDA !REG_MSU_ID_01 : CMP !VAL_MSU_ID_01 : BEQ .continue LDA !REG_MSU_ID_01 : CMP !VAL_MSU_ID_01 : BEQ .continue
.nomsu .nomsu
SEP #$30 SEP #$30
-
JML SPCContinue JML SPCContinue
.continue .continue
LDA !REG_MSU_ID_23 : CMP !VAL_MSU_ID_23 : BNE .nomsu 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 LDA !REG_MSU_DELAYED_COMMAND : BEQ .do_fade
.check_busy .check_busy
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_BUSY : BEQ .ready LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_BUSY : BNE -
JML SPCContinue
.ready .ready
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BEQ .start LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BNE -
JML SPCContinue
.start .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 LDA !VAL_VOLUME_FULL
STA !REG_TARGET_VOLUME 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_CURRENT_VOLUME
STA !REG_MSU_VOLUME STA !REG_MSU_VOLUME
LDA !REG_CURRENT_MSU_TRACK : DEC : PHA LDA !REG_CURRENT_MSU_TRACK : DEC : PHA
AND.b #$07 : TAY AND.b #$07 : TAY
PLA : LSR #3 : TAX PLA : LSR #3 : TAX
@@ -524,7 +616,7 @@ MSUMain:
LDA !REG_TARGET_VOLUME : BRA .set LDA !REG_TARGET_VOLUME : BRA .set
.mute .mute
STZ !REG_CURRENT_VOLUME STZ !REG_CURRENT_VOLUME
STZ !REG_MSU_CONTROL JSR MSUStopPlaying
BRA .set BRA .set
.increment .increment
ADC !VAL_VOLUME_INCREMENT : BCS .max ADC !VAL_VOLUME_INCREMENT : BCS .max
@@ -570,7 +662,7 @@ MSUMain:
CPX !REG_CURRENT_MSU_TRACK : BNE + CPX !REG_CURRENT_MSU_TRACK : BNE +
- : CPX #27 : BEQ + - : CPX #27 : BEQ +
TXA TXA
BRA .done+1 JMP .done+1
+ +
CPX !REG_CURRENT_COMMAND : BEQ - CPX !REG_CURRENT_COMMAND : BEQ -
LDA.b #$00 : XBA LDA.b #$00 : XBA
@@ -579,6 +671,8 @@ MSUMain:
!SUB !REG_MSU_PACK_COUNT : BRA - !SUB !REG_MSU_PACK_COUNT : BRA -
+ +
JSR MSUStopPlaying
PHX : PHA : TXA : PLX PHX : PHA : TXA : PLX
REP #$20 REP #$20
BEQ + BEQ +
@@ -587,10 +681,35 @@ MSUMain:
DEX : BNE - DEX : BNE -
+ +
STA !REG_MSU_TRACK STA !REG_MSU_TRACK
STA !REG_MSU_LOADED_TRACK
SEP #$20 SEP #$20
STZ !REG_MSU_CONTROL
PLX 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 STX !REG_CURRENT_MSU_TRACK
LDA !REG_MSU_PACK_CURRENT : CMP #$FE : !BLT + LDA !REG_MSU_PACK_CURRENT : CMP #$FE : !BLT +
LDA #$00 : BRA ++ LDA #$00 : BRA ++
@@ -625,12 +744,12 @@ MSUMain:
; Wait for the fanfare music to start, or else it can get skipped entirely ; Wait for the fanfare music to start, or else it can get skipped entirely
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
FanfarePreload: FanfarePreload:
STA !REG_MUSIC_CONTROL_REQUEST ; thing we wrote over STA.l !REG_MUSIC_CONTROL_REQUEST ; thing we wrote over
PHA PHA
JSL CheckMusicLoadRequest JSL CheckMusicLoadRequest
WAI WAI
PLA PLA
- : CMP !REG_SPC_CONTROL : BNE - - : CMP.l !REG_SPC_CONTROL : BNE -
JML AddReceivedItem_doneWithSoundEffects JML AddReceivedItem_doneWithSoundEffects
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -653,7 +772,7 @@ PendantFanfareWait:
jml PendantFanfareContinue jml PendantFanfareContinue
.spc .spc
SEP #$20 SEP #$20
LDA !REG_SPC_CONTROL : BNE .continue LDA.l !REG_SPC_CONTROL : BNE .continue
.done .done
jml PendantFanfareDone jml PendantFanfareDone
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -677,7 +796,7 @@ CrystalFanfareWait:
jml CrystalFanfareContinue jml CrystalFanfareContinue
.spc .spc
SEP #$20 SEP #$20
LDA !REG_SPC_CONTROL : BNE .continue LDA.l !REG_SPC_CONTROL : BNE .continue
.done .done
jml CrystalFanfareDone jml CrystalFanfareDone
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -704,6 +823,7 @@ EndingMusicWait:
LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .done LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .done
SEP #$20 SEP #$20
.wait .wait
LDA.b $50 : BNE .done
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

View File

@@ -15,7 +15,7 @@ RTL
!BANK_BASE = "#$29" !BANK_BASE = "#$29"
org $BF8000 org $BF8000
SwapSpriteIfNecissary: SwapSpriteIfNecessary:
PHP PHP
SEP #$20 ; set 8-bit accumulator SEP #$20 ; set 8-bit accumulator
LDA !SPRITE_SWAP : BEQ + : !ADD !BANK_BASE : CMP $BC : BEQ + LDA !SPRITE_SWAP : BEQ + : !ADD !BANK_BASE : CMP $BC : BEQ +

View File

@@ -507,6 +507,10 @@ CreditsLineBlank:
%blankline() %blankline()
%bigcredits("BONTA EMOSARU")
%blankline()
%bigcredits("SAKURATSUBASA") %bigcredits("SAKURATSUBASA")
%blankline() %blankline()
@@ -556,9 +560,6 @@ CreditsLineBlank:
%emptyline() %emptyline()
%emptyline() %emptyline()
%emptyline() %emptyline()
%emptyline()
%emptyline()
%emptyline()
;=================================================================================================== ;===================================================================================================

View File

@@ -992,8 +992,14 @@ db $00 ; $00 = BGM enabled (default) $01 = BGM disabled
org $30821B ; PC 0x18021B org $30821B ; PC 0x18021B
FastFanfare: FastFanfare:
db $00 ; $00 = Normal fanfare (default) $01 = Fast fanfare db $00 ; $00 = Normal fanfare (default) $01 = Fast fanfare
org $30821C ; PC 0x18021C
MSUResumeType:
db $01 ; Type of tracks to resume #$00 = Everything - #$01 = Overworld (default)
org $30821D ; PC 0x18021D
MSUResumeTimer:
dw $0708 ; Number of frames on a different track until we no longer resume (0x708 = 1800 = ~30s)
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; 0x18021C - 0x18021F (unused) ; 0x18021F - 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
@@ -1522,8 +1528,9 @@ dw #9999 ; Rupee Limit
; $7F5100 - $7F51FF - Block Cypher Buffer ; $7F5100 - $7F51FF - Block Cypher Buffer
; $7F5200 - $7F52FF - RNG Pointer Block ; $7F5200 - $7F52FF - RNG Pointer Block
; $7F5300 - $7F53FF - Multiworld Block ; $7F5300 - $7F53FF - Multiworld Block
; $7F5400 - $7F540F - MSU Block
; $7F5400 - $7F56FF - Unused ; $7F5410 - $7F56FF - Unused
; $7F5700 - $7F57FF - Dialog Buffer ; $7F5700 - $7F57FF - Dialog Buffer
; ;