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_CURRENT = $7F50AB
!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 = $012C
!REG_MUSIC_CONTROL_REQUEST = $012C
@@ -145,7 +150,6 @@ incsrc mantle.asm
incsrc swordswap.asm
incsrc scratchpad.asm
incsrc map.asm
incsrc msu.asm
incsrc dialog.asm
incsrc entrances.asm
incsrc clock.asm
@@ -213,6 +217,8 @@ incsrc servicerequest.asm
incsrc elder.asm
incsrc toast.asm
incsrc darkroomitems.asm
incsrc fastcredits.asm
incsrc msu.asm
incsrc multiworld.asm
incsrc terrorpin.asm
warnpc $A58000

View File

@@ -24,8 +24,7 @@ RTL
;================================================================================
ConditionalWhitenBg:
LDX.b #$00
LDA.l DisableFlashing
REP #$20 : BNE +
LDA.l DisableFlashing : REP #$20 : BNE +
LDA $00,X
JSR WhitenLoopReal
RTL
@@ -55,10 +54,10 @@ WhitenLoopReal:
LDA $7EC3F4 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F4
LDA $10 : CMP.w #$07 : BNE +
LDA $048E
CMP.w #$3C : BEQ ++ ; hookshot cave
CMP.w #$9D : BEQ ++ ; gt right
CMP.w #$9C : BEQ ++ ; gt big room
CMP.w #$A5 : BEQ ++ ; wizzrobes 1
CMP.w #$3C : BEQ ++
CMP.w #$9D : BEQ ++
CMP.w #$9C : BEQ ++
CMP.w #$A5 : BEQ ++
+
LDA $7EC3F6 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F6
LDA $7EC3F8 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F8
@@ -68,7 +67,6 @@ WhitenLoopReal:
LDA $7EC3F8 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F8
BRA +++
+++
LDA $7EC3FA : JSL Filter_Majorly_Whiten_Color : STA $7EC5FA
LDA $7EC3FC : JSL Filter_Majorly_Whiten_Color : STA $7EC5FC
LDA $7EC3FE : JSL Filter_Majorly_Whiten_Color : STA $7EC5FE
@@ -97,7 +95,6 @@ WhitenLoopDummy:
INX #2 : CPX.b #$10 : BEQ +
JMP -
+
LDA $7EC3F0 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F0
LDA $7EC3F2 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F2
LDA $7EC3F4 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F4
@@ -165,7 +162,7 @@ RestoreBgEther:
INX #2 : CPX.b #$10 : BNE -
BRA ++
++
JML $02FF51
JML $02FF51 ; Bank0E.asm : 3936 vanilla restore routine after loop which RTLs
;================================================================================
DDMConditionalLightning:
LDA.l DisableFlashing
@@ -173,7 +170,7 @@ DDMConditionalLightning:
BNE +
LDA.w $0000
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
-
@@ -184,14 +181,11 @@ DDMConditionalLightning:
LDA $F523, Y : LDA $7EC5F0, X
INY #2
INX #2 : CPX.b #$10 : BNE -
JML $07FAAC
JML $07FAAC ; Bank0E.asm : 4754 both branches converge here
;================================================================================
ConditionalGTFlash:
LDA.l DisableFlashing
REP #$20
BNE +
LDA $0000
LDA.l DisableFlashing : REP #$20 : BNE +
LDA $0000
-
LDA $F9C1, Y : STA $7EC5D0, X
INY #2
@@ -203,27 +197,24 @@ ConditionalGTFlash:
LDA $F9C1, Y : LDA $7EC5D0, X
INY #2
INX #2 : CPX.b #$10 : BNE -
RTL
RTL
;================================================================================
ConditionalRedFlash:
LDA.l DisableFlashing
REP #$20 : BNE +
LDA.l DisableFlashing : REP #$20 : BNE +
LDA $00,X
LDA.w #$1D59 : STA $7EC5DA
LDA.w #$25FF : STA $7EC5DC
LDA.w #$001A
RTL
+
LDA $00
LDA.w #$1D59 : LDA $7EC5DA
LDA.w #$25FF : LDA $7EC5DC
LDA.w #$0000
RTL
RTL
;================================================================================
ConditionalPedAncilla:
LDA.l DisableFlashing
REP #$20 : BNE +
LDA.l DisableFlashing : REP #$20 : BNE +
LDA $00,X
LDA $00 : STA $04
LDA $02 : STA $06
@@ -232,32 +223,72 @@ ConditionalPedAncilla:
LDA $00
LDA $00 : LDA $04
LDA $02 : LDA $06
RTL
;================================================================================
LoadElectroPalette:
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
;================================================================================
ConditionalChangeGearPalette:
PHY
STA $00
SEP #$20
LDA.l DisableFlashing : REP #$20 : BNE +
LDA $00,X
-
LDA [$00] : STA $7EC300, X : STA $7EC500, X
INC $00 : INC $00
INX #2
DEY : BPL -
BRA ++
+
LDA $00
-
LDA [$00] : LDA $7EC300, X : LDA $7EC500, X
INC $00 : INC $00
INX #2
DEY : BPL -
BRA ++
++
PLY ; use what was in Y register to determine which p flags to set
CPY #$000E : BNE +
ConditionalLoadGearPalette:
STA $00
SEP #$20
+
SEP #$10
LDA.l DisableFlashing : REP #$20 : BNE +
LDA $00,X
-
LDA [$00]
STA $7EC500, X
INC $00 : INC $00
INX #2
DEY
BPL -
RTS
+
LDA $00
-
LDA [$00]
LDA $7EC500, X
INC $00 : INC $00
INX #2
DEY
BPL -
RTS
;================================================================================
RestoreElectroPalette:
REP #$30
LDX.w #$01B2 : LDY.w #$0002
JSR FillPaletteBufferFromAux
LDX.w #$01B8 : LDY.w #$0003
JSR FillPaletteBufferFromAux
LDX.w #$01E2 : LDY.w #$000E
JSR FillPaletteBufferFromAux
SEP #$30
INC $15
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 DrHudOverride
JSL.l NewDrawHud
JSL.l SwapSpriteIfNecissary
JSL.l SwapSpriteIfNecessary
JSL.l CuccoStorm
JSL.l PollService
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:
JSL $0080B5 ; Module_MainRouting
JSL CheckMusicLoadRequest
PHA : PHP
PHP : REP #$30 : PHA
SEP #$20
;LDA EnableSRAMTrace : AND.l TournamentSeedInverse : BEQ +
; 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_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
;--------------------------------------------------------------------------------
NMIHookAction:

View File

@@ -46,6 +46,7 @@ CheckGanonVulnerability:
dw .light_speed
dw .crystals_and_bosses
dw .bosses_only
dw .all_dungeons_no_agahnim
; 00 = always vulnerable
.vulnerable
@@ -61,10 +62,13 @@ CheckGanonVulnerability:
; 02 = 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 $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 : CMP.b #$20 : BNE .fail ; require aga2 defeated (pyramid hole open)
LDA.l $7EF2DB : AND.b #$20 : BEQ .fail ; require aga2 defeated (pyramid hole open)
BRA .success
; 03 = crystals and aga 2

View File

@@ -747,9 +747,6 @@ dw $0000, $0002, $0004, $0032, $0004, $0006, $0030
;JSL FlipGreenPendant
;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)
BRA + : NOP #2 : +
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)
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)
JSL.l ConditionalWhitenBg
;--------------------------------------------------------------------------------
@@ -776,14 +782,13 @@ JSL.l ConditionalRedFlash : BRA + : NOP #13 : +
org $08C2A1 ; <- 442A3 - ancilla_sword_ceremony.asm : 54 (REP #$20)
JSL.l ConditionalPedAncilla : BRA + : NOP #4 : +
;--------------------------------------------------------------------------------
org $02FDB1 ; <- 17DB1 - Bank0E.asm : 3760 (JSL LoadGearPalette)
JSL.l ConditionalChangeGearPalette : NOP
org $079976 ; <- 039976 - Bank07.asm : 4009 (JSL Palette_ElectroThemedGear)
JSL.l LoadElectroPalette
;--------------------------------------------------------------------------------
org $02FDCB ; <- 17DCB - Bank0E.asm : 3775 (JSL LoadGearPalette)
JSL.l ConditionalChangeGearPalette : NOP
org $07997C ; <- 03997C - Bank07.asm : 4015 (JSL LoadActualGearPalettes)
JSL.l RestoreElectroPalette
;--------------------------------------------------------------------------------
org $02FDE6 ; <- 17DE6 - Bank0E.asm : 3789 (JSL LoadGearPalette)
JSL.l ConditionalChangeGearPalette : NOP
;================================================================================
; Ice Floor Toggle
;--------------------------------------------------------------------------------
@@ -2644,21 +2649,22 @@ dw 37, 11 : db $FB, $40, $00, $00
;--------------------------------------------------------------------------------
org $07839E ; bunny BAGE check
BunnyRead:
JSR.w $07B5A9 ; check A button
BCC .noA
JSR.w CheckIfReading
BNE .noread
JSR.w $07B4DB
NOP
JSR.w $07B5A9 ; check A button
BCC .noA
JSR.w CheckIfReading
BNE .noread
JSR.w $07B4DB
NOP
.noread
.noA
org $07FFF4
CheckIfReading:
JSR.w $07D36C ; check action
LDA #$80 : TRB $3B
CPX #$04
RTS
JSR.w $07D36C ; check action
LDA #$80 : TRB $3B
CPX #$04
RTS
;================================================================================
org $0DB4CA : db $40, $40 ; fire bar statis
@@ -2675,7 +2681,35 @@ Sprite_AttemptDamageToPlayerPlusRecoilLong:
org $1ED1B6
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

152
msu.asm
View File

@@ -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

View File

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

View File

@@ -507,6 +507,10 @@ CreditsLineBlank:
%blankline()
%bigcredits("BONTA EMOSARU")
%blankline()
%bigcredits("SAKURATSUBASA")
%blankline()
@@ -556,9 +560,6 @@ CreditsLineBlank:
%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
FastFanfare:
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)
; Plandomizer Author Name (ASCII) - Leave unused chars as 0
@@ -1522,8 +1528,9 @@ dw #9999 ; Rupee Limit
; $7F5100 - $7F51FF - Block Cypher Buffer
; $7F5200 - $7F52FF - RNG Pointer Block
; $7F5300 - $7F53FF - Multiworld Block
; $7F5400 - $7F540F - MSU Block
; $7F5400 - $7F56FF - Unused
; $7F5410 - $7F56FF - Unused
; $7F5700 - $7F57FF - Dialog Buffer
;