diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index dcd0a6b..d6af057 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -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 diff --git a/accessibility.asm b/accessibility.asm index 3504a12..6e88345 100644 --- a/accessibility.asm +++ b/accessibility.asm @@ -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 diff --git a/events.asm b/events.asm index 5f5bb8d..4d26bb5 100644 --- a/events.asm +++ b/events.asm @@ -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 diff --git a/fastcredits.asm b/fastcredits.asm new file mode 100644 index 0000000..97f23a6 --- /dev/null +++ b/fastcredits.asm @@ -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 + + diff --git a/framehook.asm b/framehook.asm index fdec526..92cc458 100644 --- a/framehook.asm +++ b/framehook.asm @@ -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: diff --git a/goalitem.asm b/goalitem.asm index 81351ab..8cd7502 100644 --- a/goalitem.asm +++ b/goalitem.asm @@ -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 diff --git a/hooks.asm b/hooks.asm index 6e5532a..1b854c4 100755 --- a/hooks.asm +++ b/hooks.asm @@ -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 diff --git a/msu.asm b/msu.asm index cec1a19..1ef1897 100644 --- a/msu.asm +++ b/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 diff --git a/spriteswap.asm b/spriteswap.asm index 022cc51..ab5e82c 100644 --- a/spriteswap.asm +++ b/spriteswap.asm @@ -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 -} \ No newline at end of file +} diff --git a/stats/creditsnew.asm b/stats/creditsnew.asm index 106ffd1..2b1bbba 100644 --- a/stats/creditsnew.asm +++ b/stats/creditsnew.asm @@ -507,6 +507,10 @@ CreditsLineBlank: %blankline() +%bigcredits("BONTA EMOSARU") + +%blankline() + %bigcredits("SAKURATSUBASA") %blankline() @@ -556,9 +560,6 @@ CreditsLineBlank: %emptyline() %emptyline() %emptyline() -%emptyline() -%emptyline() -%emptyline() ;=================================================================================================== diff --git a/tables.asm b/tables.asm index 42f6a4a..a31e9f8 100644 --- a/tables.asm +++ b/tables.asm @@ -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 ;