From b8fa53ec92fd4ac0ad8b57c8fe64c8890dbcd597 Mon Sep 17 00:00:00 2001 From: scawful Date: Fri, 17 Jan 2025 23:19:28 -0500 Subject: [PATCH] Refactor time system to use named variables for hours and minutes; add night check functions and update palette handling --- Overworld/time_system.asm | 218 ++++++++++++++++++-------------------- 1 file changed, 103 insertions(+), 115 deletions(-) diff --git a/Overworld/time_system.asm b/Overworld/time_system.asm index f23b9d3..83a63f1 100644 --- a/Overworld/time_system.asm +++ b/Overworld/time_system.asm @@ -38,8 +38,8 @@ pullpc LogoFadeInSetClock: { JSL $00ED7C ; IntroLogoPaletteFadeIn - LDA.b #$08 : STA.l $7EE000 ; Set the time to 6:00am - LDA.b #$3F : STA.l $7EE002 ; Set the time speed + LDA.b #$08 : STA.l Hours ; Set the time to 6:00am + LDA.b #$3F : STA.l TimeSpeed ; Set the time speed RTL } @@ -50,8 +50,8 @@ pullpc ResetClockTriforceRoom: { JSL $00E384 ; LoadCommonSprites_long - LDA.b #$00 : STA.l $7EE000 ; low hours for palette? - LDA.b #$00 : STA.l $7EE001 ; high hours for palette? + LDA.b #$00 : STA.l Hours ; low hours for palette? + LDA.b #$00 : STA.l Minutes ; high hours for palette? RTL } @@ -65,7 +65,7 @@ DrawClockToHud: { LDX #$00 .debut - LDY #$00 : LDA $7EE000,x + LDY #$00 : LDA Hours,x .debut2 CMP #$0A : BMI .draw SBC #$0A : INY : BRA .debut2 @@ -146,7 +146,7 @@ RunClock: LDA #$00 : STA.l Minutes LDA.l Hours : INC A : STA.l Hours CMP #$18 : BPL .reset_hours ; hours = 24 ? - ;check indoors/outdoors + ; check indoors/outdoors LDA $1B : BEQ .outdoors0 RTS .outdoors0 @@ -154,7 +154,7 @@ RunClock: JSL RomToPaletteBuffer ; update buffer palette JSL PaletteBufferToEffective ; update effective palette - ;rain layer ? + ; rain layer ? LDA $8C : CMP #$9F : BEQ .skip_bg_updt0 LDA $8C : CMP #$9E : BEQ .skip_bg_updt0 ; canopy layer ? CMP #$97 : BEQ .skip_bg_updt0 ; fog layer? @@ -170,10 +170,9 @@ RunClock: JSR CheckForDailyQuests - LDA #$00 : STA $7EE000 - .update_palette + LDA.b #$00 : STA.l Hours ; check indoors/outdoors - LDA $1B : BEQ .outdoors1 + LDA.b $1B : BEQ .outdoors1 RTS .outdoors1 @@ -234,8 +233,53 @@ CheckForDailyQuests: RTS } +CheckIfNight: +{ + JSR LoadPeacetimeSprites : BCS + + RTL + + + LDA.l GameState : CMP.b #$02 : BCC .day_time + LDA Hours : CMP.b #$12 : BCS .night_time + LDA Hours : CMP.b #$06 : BCC .night_time + .day_time + LDA.l GameState + RTL + .night_time + LDA.b #$03 + RTL +} + +CheckIfNight16Bit: +{ + SEP #$30 + JSR LoadPeacetimeSprites : BCS + + REP #$30 + RTL + + + REP #$30 + ; Don't change the spriteset during the intro sequence + LDA.l GameState : AND.w #$00FF : CMP.w #$0002 : BCC .day_time + ; 0x12 = 18 hours or 6 pm + LDA Hours : AND.w #$00FF : CMP.w #$0012 : BCS .night_time + ; If it's less than 6 am, jump to night time + LDA Hours : AND.w #$00FF : CMP.w #$0006 : BCC .night_time + .day_time + LDA.l GameState + RTL + .night_time + ; Load the gamestate 03 spritesets, but don't change the save ram + LDA.l GameState : CLC : ADC #$0001 + RTL +} + pushpc +; Overworld_LoadSprites +org $09C4E3 : JSL CheckIfNight + +; Sprite_LoadGraphicsProperties_light_world_only +org $00FC6A : JSL CheckIfNight16Bit + ; ========================================================= ; ----[ Day / Night system * palette effect ]---- ; ========================================================= @@ -259,18 +303,13 @@ RomToPaletteBuffer: JSR $C692 ; $02:C692 -> rom to palette buffer for other colors RTL -PaletteBuffer_HUD = $7EC300 -PaletteBuffer_BG = $7EC340 -PaletteBuffer_Spr = $7EC400 +PalBuf300_HUD = $7EC300 +PalBuf340_BG = $7EC340 +PalBuf400_Spr = $7EC400 -PaletteCgram_HUD = $7EC500 -PaletteCgram_BG = $7EC540 -PaletteCgram_Spr = $7EC600 - -; part of rom pal to buffer routine -; $1B/EF61 9F 00 C3 7E STA $7EC300,x[$7E:C422] -; $1B/EF3D 9F 00 C3 7E STA $7EC300,x[$7E:C412] -; $1B/EF84 9F 00 C3 7E STA $7EC300,x[$7E:C4B2] +PalCgram500_HUD = $7EC500 +PalCgram540_BG = $7EC540 +PalCgram600_Spr = $7EC600 ; Palettes_LoadSingle.next_color org $1BEF3D : JSL LoadDayNightPaletteEffect @@ -285,14 +324,14 @@ pullpc LoadDayNightPaletteEffect: { STA.l !pal_color : CPX #$0041 : BPL .title_check - STA.l PaletteBuffer_HUD, X + STA.l PalBuf300_HUD, X RTL .title_check ; title or file select screen ? LDA $10 : AND #$00FF : CMP #$0002 : BCS .outin_check LDA.l !pal_color - STA.l PaletteBuffer_HUD, X + STA.l PalBuf300_HUD, X RTL .outin_check @@ -301,20 +340,20 @@ LoadDayNightPaletteEffect: BRA .overworld .restorecode LDA.l !pal_color - STA.l PaletteBuffer_HUD, X + STA.l PalBuf300_HUD, X RTL .overworld LDA $1B : AND #$00FF : BEQ .outdoors2 LDA.l !pal_color - STA.l PaletteBuffer_HUD,X + STA.l PalBuf300_HUD,X RTL .outdoors2 PHX JSL ColorSubEffect PLX - STA.l PaletteBuffer_HUD, X + STA.l PalBuf300_HUD, X RTL } @@ -391,10 +430,10 @@ BackgroundFix: BEQ .no_effect ;BRAnch if A=#$0000 (transparent bg) JSL ColorSubEffect .no_effect: - STA.l PaletteCgram_HUD - STA.l PaletteBuffer_HUD - STA.l PaletteCgram_BG - STA.l PaletteBuffer_BG + STA.l PalCgram500_HUD + STA.l PalBuf300_HUD + STA.l PalCgram540_BG + STA.l PalBuf340_BG RTL } @@ -403,8 +442,8 @@ MosaicFix: BEQ + JSL ColorSubEffect + - STA.l PaletteBuffer_HUD - STA.l PaletteBuffer_BG + STA.l PalBuf300_HUD + STA.l PalBuf340_BG RTL } @@ -418,8 +457,8 @@ SubAreasFix: SEP #$20 PLX .no_effect - STA.l PaletteBuffer_HUD - STA.l PaletteBuffer_BG + STA.l PalBuf300_HUD + STA.l PalBuf340_BG RTL } @@ -441,63 +480,23 @@ GlovesFix: RTL } -CheckIfNight: -{ - JSR LoadPeacetimeSprites : BCS + - RTL - + - LDA.l GameState : CMP.b #$02 : BCC .day_time - LDA $7EE000 : CMP.b #$12 : BCS .night_time - LDA $7EE000 : CMP.b #$06 : BCC .night_time - .day_time - LDA.l GameState - RTL - .night_time - LDA.b #$03 - RTL -} - ColorBgFix: { PHA SEP #$30 ; Check for save and quit LDA.b $10 : CMP.b #$17 : BEQ .vanilla - REP #$30 - PLA - STA.l !pal_color - JSL ColorSubEffect - STA.l PaletteCgram_HUD - STA.l PaletteCgram_BG - RTL - + REP #$30 + PLA + STA.l !pal_color + JSL ColorSubEffect + STA.l PalCgram500_HUD + STA.l PalCgram540_BG + RTL .vanilla REP #$30 PLA - STA.l PaletteCgram_HUD - RTL -} - -CheckIfNight16Bit: -{ - SEP #$30 - JSR LoadPeacetimeSprites : BCS + - REP #$30 - RTL - + - REP #$30 - ; Don't change the spriteset during the intro sequence - LDA.l GameState : AND.w #$00FF : CMP.w #$0002 : BCC .day_time - ; 0x12 = 18 hours or 6 pm - LDA $7EE000 : AND.w #$00FF : CMP.w #$0012 : BCS .night_time - ; If it's less than 6 am, jump to night time - LDA $7EE000 : AND.w #$00FF : CMP.w #$0006 : BCC .night_time - .day_time - LDA.l GameState - RTL - .night_time - ; Load the gamestate 03 spritesets, but don't change the save ram - LDA.l GameState : CLC : ADC #$0001 + STA.l PalCgram500_HUD RTL } @@ -525,7 +524,7 @@ LoadPeacetimeSprites: FixSaveAndQuit: { - LDA #$08 : STA $7EE000 + LDA.b #$08 : STA.l Hours LDA.l GameState RTL } @@ -533,13 +532,13 @@ FixSaveAndQuit: FixShockPalette: { PHA - LDA $1B : BNE .indoors + LDA.b $1B : BNE .indoors PLA STA !pal_color PHX JSL ColorSubEffect PLX - STA.l PaletteCgram_HUD, X + STA.l PalCgram500_HUD, X RTL .indoors PLA @@ -550,48 +549,39 @@ FixDungeonMapColors: { PHA ; Cache the current time - LDA $7EE000 : STA $7EF900 - LDA $7EE001 : STA $7EF901 + LDA Hours : STA $7EF900 + LDA Minutes : STA $7EF901 ; Set the time to 8:00am while map is open - LDA #$08 : STA $7EE000 - LDA #$00 : STA $7EE001 + LDA.b #$08 : STA Hours + LDA.b #$00 : STA Minutes PLA - STA $7EC229 + STA.l $7EC229 RTL } RestoreTimeForDungeonMap: { - LDA $7EF900 : STA $7EE000 - LDA $7EF901 : STA $7EE001 + LDA $7EF900 : STA Hours + LDA $7EF901 : STA Minutes LDA.l $7EC017 RTL } pushpc -; Overworld_LoadSprites -org $09C4E3 : JSL CheckIfNight - -; Sprite_LoadGraphicsProperties_light_world_only -org $00FC6A : JSL CheckIfNight16Bit - ; $0BFE70 -> background color loading routine ; Background color write fix - 16 bytes ; $0B/FEB6 8F 00 C5 7E STA $7EC500 ; $0B/FEBA 8F 00 C3 7E STA $7EC300 ; $0B/FEBE 8F 40 C5 7E STA $7EC540 ; $0B/FEC2 8F 40 C3 7E STA $7EC340 -org $0BFEB6 - JSL BackgroundFix +org $0BFEB6 : JSL BackgroundFix ; SetBGColorMainBuffer -org $0ED5F9 - JSL ColorBgFix +org $0ED5F9 : JSL ColorBgFix ; OverworldMosaicTransition_HandleScreensAndLoadShroom -org $02AE92 - NOP #6 +org $02AE92 : NOP #6 ; ========================================================= @@ -599,8 +589,7 @@ org $02AE92 ; $0E/D601 8F 00 C3 7E STA $7EC300[$7E:C300] ; $0E/D605 8F 40 C3 7E STA $7EC340[$7E:C340] -org $0ED601 - JSL SubAreasFix +org $0ED601 : JSL SubAreasFix ; ========================================================= ; Gloves color loading routine @@ -619,20 +608,19 @@ org $0ED601 ; $1B/EE39 6B RTL ; Palettes_Load_LinkGloves -org $1BEE2D - JSL GlovesFix - -; ========================================================= +org $1BEE2D : JSL GlovesFix ; org $0ABA5A ; TODO: Handle overworld map palette for flashing icons +; Module0E_03_00_DarkenAndPrep org $0ED956 : JSL FixDungeonMapColors -org $0AEFA6 : JSL RestoreTimeForDungeonMap +; UnderworldMap_RecoverGFX +org $0AEFA6 : JSL RestoreTimeForDungeonMap -org $0ED745 : JSL FixShockPalette +; RefreshLinkEquipmentPalettes +org $0ED745 : JSL FixShockPalette -org $09F604 -GameOver_SaveAndQuit: - JSL FixSaveAndQuit +; GameOver_SaveAndQuit: +org $09F604 : JSL FixSaveAndQuit \ No newline at end of file