Refactor time system to use named variables for hours and minutes; add night check functions and update palette handling

This commit is contained in:
scawful
2025-01-17 23:19:28 -05:00
parent 913f9ea3d0
commit b8fa53ec92

View File

@@ -38,8 +38,8 @@ pullpc
LogoFadeInSetClock: LogoFadeInSetClock:
{ {
JSL $00ED7C ; IntroLogoPaletteFadeIn JSL $00ED7C ; IntroLogoPaletteFadeIn
LDA.b #$08 : STA.l $7EE000 ; Set the time to 6:00am LDA.b #$08 : STA.l Hours ; Set the time to 6:00am
LDA.b #$3F : STA.l $7EE002 ; Set the time speed LDA.b #$3F : STA.l TimeSpeed ; Set the time speed
RTL RTL
} }
@@ -50,8 +50,8 @@ pullpc
ResetClockTriforceRoom: ResetClockTriforceRoom:
{ {
JSL $00E384 ; LoadCommonSprites_long JSL $00E384 ; LoadCommonSprites_long
LDA.b #$00 : STA.l $7EE000 ; low hours for palette? LDA.b #$00 : STA.l Hours ; low hours for palette?
LDA.b #$00 : STA.l $7EE001 ; high hours for palette? LDA.b #$00 : STA.l Minutes ; high hours for palette?
RTL RTL
} }
@@ -65,7 +65,7 @@ DrawClockToHud:
{ {
LDX #$00 LDX #$00
.debut .debut
LDY #$00 : LDA $7EE000,x LDY #$00 : LDA Hours,x
.debut2 .debut2
CMP #$0A : BMI .draw CMP #$0A : BMI .draw
SBC #$0A : INY : BRA .debut2 SBC #$0A : INY : BRA .debut2
@@ -146,7 +146,7 @@ RunClock:
LDA #$00 : STA.l Minutes LDA #$00 : STA.l Minutes
LDA.l Hours : INC A : STA.l Hours LDA.l Hours : INC A : STA.l Hours
CMP #$18 : BPL .reset_hours ; hours = 24 ? CMP #$18 : BPL .reset_hours ; hours = 24 ?
;check indoors/outdoors ; check indoors/outdoors
LDA $1B : BEQ .outdoors0 LDA $1B : BEQ .outdoors0
RTS RTS
.outdoors0 .outdoors0
@@ -154,7 +154,7 @@ RunClock:
JSL RomToPaletteBuffer ; update buffer palette JSL RomToPaletteBuffer ; update buffer palette
JSL PaletteBufferToEffective ; update effective palette JSL PaletteBufferToEffective ; update effective palette
;rain layer ? ; rain layer ?
LDA $8C : CMP #$9F : BEQ .skip_bg_updt0 LDA $8C : CMP #$9F : BEQ .skip_bg_updt0
LDA $8C : CMP #$9E : BEQ .skip_bg_updt0 ; canopy layer ? LDA $8C : CMP #$9E : BEQ .skip_bg_updt0 ; canopy layer ?
CMP #$97 : BEQ .skip_bg_updt0 ; fog layer? CMP #$97 : BEQ .skip_bg_updt0 ; fog layer?
@@ -170,10 +170,9 @@ RunClock:
JSR CheckForDailyQuests JSR CheckForDailyQuests
LDA #$00 : STA $7EE000 LDA.b #$00 : STA.l Hours
.update_palette
; check indoors/outdoors ; check indoors/outdoors
LDA $1B : BEQ .outdoors1 LDA.b $1B : BEQ .outdoors1
RTS RTS
.outdoors1 .outdoors1
@@ -234,8 +233,53 @@ CheckForDailyQuests:
RTS 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 pushpc
; Overworld_LoadSprites
org $09C4E3 : JSL CheckIfNight
; Sprite_LoadGraphicsProperties_light_world_only
org $00FC6A : JSL CheckIfNight16Bit
; ========================================================= ; =========================================================
; ----[ Day / Night system * palette effect ]---- ; ----[ Day / Night system * palette effect ]----
; ========================================================= ; =========================================================
@@ -259,18 +303,13 @@ RomToPaletteBuffer:
JSR $C692 ; $02:C692 -> rom to palette buffer for other colors JSR $C692 ; $02:C692 -> rom to palette buffer for other colors
RTL RTL
PaletteBuffer_HUD = $7EC300 PalBuf300_HUD = $7EC300
PaletteBuffer_BG = $7EC340 PalBuf340_BG = $7EC340
PaletteBuffer_Spr = $7EC400 PalBuf400_Spr = $7EC400
PaletteCgram_HUD = $7EC500 PalCgram500_HUD = $7EC500
PaletteCgram_BG = $7EC540 PalCgram540_BG = $7EC540
PaletteCgram_Spr = $7EC600 PalCgram600_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]
; Palettes_LoadSingle.next_color ; Palettes_LoadSingle.next_color
org $1BEF3D : JSL LoadDayNightPaletteEffect org $1BEF3D : JSL LoadDayNightPaletteEffect
@@ -285,14 +324,14 @@ pullpc
LoadDayNightPaletteEffect: LoadDayNightPaletteEffect:
{ {
STA.l !pal_color : CPX #$0041 : BPL .title_check STA.l !pal_color : CPX #$0041 : BPL .title_check
STA.l PaletteBuffer_HUD, X STA.l PalBuf300_HUD, X
RTL RTL
.title_check .title_check
; title or file select screen ? ; title or file select screen ?
LDA $10 : AND #$00FF : CMP #$0002 : BCS .outin_check LDA $10 : AND #$00FF : CMP #$0002 : BCS .outin_check
LDA.l !pal_color LDA.l !pal_color
STA.l PaletteBuffer_HUD, X STA.l PalBuf300_HUD, X
RTL RTL
.outin_check .outin_check
@@ -301,20 +340,20 @@ LoadDayNightPaletteEffect:
BRA .overworld BRA .overworld
.restorecode .restorecode
LDA.l !pal_color LDA.l !pal_color
STA.l PaletteBuffer_HUD, X STA.l PalBuf300_HUD, X
RTL RTL
.overworld .overworld
LDA $1B : AND #$00FF : BEQ .outdoors2 LDA $1B : AND #$00FF : BEQ .outdoors2
LDA.l !pal_color LDA.l !pal_color
STA.l PaletteBuffer_HUD,X STA.l PalBuf300_HUD,X
RTL RTL
.outdoors2 .outdoors2
PHX PHX
JSL ColorSubEffect JSL ColorSubEffect
PLX PLX
STA.l PaletteBuffer_HUD, X STA.l PalBuf300_HUD, X
RTL RTL
} }
@@ -391,10 +430,10 @@ BackgroundFix:
BEQ .no_effect ;BRAnch if A=#$0000 (transparent bg) BEQ .no_effect ;BRAnch if A=#$0000 (transparent bg)
JSL ColorSubEffect JSL ColorSubEffect
.no_effect: .no_effect:
STA.l PaletteCgram_HUD STA.l PalCgram500_HUD
STA.l PaletteBuffer_HUD STA.l PalBuf300_HUD
STA.l PaletteCgram_BG STA.l PalCgram540_BG
STA.l PaletteBuffer_BG STA.l PalBuf340_BG
RTL RTL
} }
@@ -403,8 +442,8 @@ MosaicFix:
BEQ + BEQ +
JSL ColorSubEffect JSL ColorSubEffect
+ +
STA.l PaletteBuffer_HUD STA.l PalBuf300_HUD
STA.l PaletteBuffer_BG STA.l PalBuf340_BG
RTL RTL
} }
@@ -418,8 +457,8 @@ SubAreasFix:
SEP #$20 SEP #$20
PLX PLX
.no_effect .no_effect
STA.l PaletteBuffer_HUD STA.l PalBuf300_HUD
STA.l PaletteBuffer_BG STA.l PalBuf340_BG
RTL RTL
} }
@@ -441,63 +480,23 @@ GlovesFix:
RTL 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: ColorBgFix:
{ {
PHA PHA
SEP #$30 SEP #$30
; Check for save and quit ; Check for save and quit
LDA.b $10 : CMP.b #$17 : BEQ .vanilla LDA.b $10 : CMP.b #$17 : BEQ .vanilla
REP #$30 REP #$30
PLA PLA
STA.l !pal_color STA.l !pal_color
JSL ColorSubEffect JSL ColorSubEffect
STA.l PaletteCgram_HUD STA.l PalCgram500_HUD
STA.l PaletteCgram_BG STA.l PalCgram540_BG
RTL RTL
.vanilla .vanilla
REP #$30 REP #$30
PLA PLA
STA.l PaletteCgram_HUD STA.l PalCgram500_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
RTL RTL
} }
@@ -525,7 +524,7 @@ LoadPeacetimeSprites:
FixSaveAndQuit: FixSaveAndQuit:
{ {
LDA #$08 : STA $7EE000 LDA.b #$08 : STA.l Hours
LDA.l GameState LDA.l GameState
RTL RTL
} }
@@ -533,13 +532,13 @@ FixSaveAndQuit:
FixShockPalette: FixShockPalette:
{ {
PHA PHA
LDA $1B : BNE .indoors LDA.b $1B : BNE .indoors
PLA PLA
STA !pal_color STA !pal_color
PHX PHX
JSL ColorSubEffect JSL ColorSubEffect
PLX PLX
STA.l PaletteCgram_HUD, X STA.l PalCgram500_HUD, X
RTL RTL
.indoors .indoors
PLA PLA
@@ -550,48 +549,39 @@ FixDungeonMapColors:
{ {
PHA PHA
; Cache the current time ; Cache the current time
LDA $7EE000 : STA $7EF900 LDA Hours : STA $7EF900
LDA $7EE001 : STA $7EF901 LDA Minutes : STA $7EF901
; Set the time to 8:00am while map is open ; Set the time to 8:00am while map is open
LDA #$08 : STA $7EE000 LDA.b #$08 : STA Hours
LDA #$00 : STA $7EE001 LDA.b #$00 : STA Minutes
PLA PLA
STA $7EC229 STA.l $7EC229
RTL RTL
} }
RestoreTimeForDungeonMap: RestoreTimeForDungeonMap:
{ {
LDA $7EF900 : STA $7EE000 LDA $7EF900 : STA Hours
LDA $7EF901 : STA $7EE001 LDA $7EF901 : STA Minutes
LDA.l $7EC017 LDA.l $7EC017
RTL RTL
} }
pushpc pushpc
; Overworld_LoadSprites
org $09C4E3 : JSL CheckIfNight
; Sprite_LoadGraphicsProperties_light_world_only
org $00FC6A : JSL CheckIfNight16Bit
; $0BFE70 -> background color loading routine ; $0BFE70 -> background color loading routine
; Background color write fix - 16 bytes ; Background color write fix - 16 bytes
; $0B/FEB6 8F 00 C5 7E STA $7EC500 ; $0B/FEB6 8F 00 C5 7E STA $7EC500
; $0B/FEBA 8F 00 C3 7E STA $7EC300 ; $0B/FEBA 8F 00 C3 7E STA $7EC300
; $0B/FEBE 8F 40 C5 7E STA $7EC540 ; $0B/FEBE 8F 40 C5 7E STA $7EC540
; $0B/FEC2 8F 40 C3 7E STA $7EC340 ; $0B/FEC2 8F 40 C3 7E STA $7EC340
org $0BFEB6 org $0BFEB6 : JSL BackgroundFix
JSL BackgroundFix
; SetBGColorMainBuffer ; SetBGColorMainBuffer
org $0ED5F9 org $0ED5F9 : JSL ColorBgFix
JSL ColorBgFix
; OverworldMosaicTransition_HandleScreensAndLoadShroom ; OverworldMosaicTransition_HandleScreensAndLoadShroom
org $02AE92 org $02AE92 : NOP #6
NOP #6
; ========================================================= ; =========================================================
@@ -599,8 +589,7 @@ org $02AE92
; $0E/D601 8F 00 C3 7E STA $7EC300[$7E:C300] ; $0E/D601 8F 00 C3 7E STA $7EC300[$7E:C300]
; $0E/D605 8F 40 C3 7E STA $7EC340[$7E:C340] ; $0E/D605 8F 40 C3 7E STA $7EC340[$7E:C340]
org $0ED601 org $0ED601 : JSL SubAreasFix
JSL SubAreasFix
; ========================================================= ; =========================================================
; Gloves color loading routine ; Gloves color loading routine
@@ -619,20 +608,19 @@ org $0ED601
; $1B/EE39 6B RTL ; $1B/EE39 6B RTL
; Palettes_Load_LinkGloves ; Palettes_Load_LinkGloves
org $1BEE2D org $1BEE2D : JSL GlovesFix
JSL GlovesFix
; =========================================================
; org $0ABA5A ; org $0ABA5A
; TODO: Handle overworld map palette for flashing icons ; TODO: Handle overworld map palette for flashing icons
; Module0E_03_00_DarkenAndPrep
org $0ED956 : JSL FixDungeonMapColors 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:
GameOver_SaveAndQuit: org $09F604 : JSL FixSaveAndQuit
JSL FixSaveAndQuit