[BotW] Add Xbox Button Layout pack, fix grass on UW res, day time pack!

* Can now use the Xbox Button Layout graphic pack to swap the ABXY buttons around to follow the standard Xbox Controller layout. Will still have to download file mods for PS4/PS5 controllers.
* Fully fix grass on ultrawide resolutions, since distant grass was apparently also bugged!
* Rewrite the time mod to work much better since previously it could sometimes be kinda buggy. You can now also force a time of day.
This commit is contained in:
Crementif 2022-01-28 16:59:38 +01:00
parent 84fb724c9e
commit 57300c7aa2
No known key found for this signature in database
GPG Key ID: 12BB8BD3EA30651E
10 changed files with 774 additions and 26 deletions

View File

@ -30,6 +30,9 @@ moduleMatches = 0x6267BFD0
0x035b0a30 = lis r5, grassCulling@ha 0x035b0a30 = lis r5, grassCulling@ha
0x035b0a38 = lfs f11, grassCulling@l(r5) 0x035b0a38 = lfs f11, grassCulling@l(r5)
; 2nd Type Of Grass Culling (calculated every frame)
; Still kinda unsure how this should be calculated but it works
0x1047BFB8 = .float (($ultrawideHUDMode != 0)*(120*0.5) + (($ultrawideHUDMode == 0)*(120)))
[BotW_AspectRatio_V176V192] [BotW_AspectRatio_V176V192]

View File

@ -56,7 +56,11 @@ li r10, $ultrawideHUDMode
cmpwi r10, 0 cmpwi r10, 0
beq exitScale beq exitScale
; Log currently loaded pane to register ; Log currently loaded pane to register if logging is enabled
li r10, $enableUltrawideDebugLogging
cmpwi r10, 2
blt skipPaneLogging
mr r10, r3 mr r10, r3
mr r11, r4 mr r11, r4
mr r12, r5 mr r12, r5
@ -71,6 +75,8 @@ mr r3, r10
mr r4, r11 mr r4, r11
mr r5, r12 mr r5, r12
skipPaneLogging:
; ------------------------------------------------------------------------------------------ ; ------------------------------------------------------------------------------------------
; Store whether there's a subpanel name ; Store whether there's a subpanel name
@ -2816,7 +2822,7 @@ blr
; ------------------------------------------------------------------------------------------ ; ------------------------------------------------------------------------------------------
_createNewScreenHook: _createNewScreenHook:
; Copy ; Copy screen name to buffer
lis r11, copyScreenStringLen@ha lis r11, copyScreenStringLen@ha
lwz r11, copyScreenStringLen@l(r11) lwz r11, copyScreenStringLen@l(r11)
lis r12, copyScreenString@ha lis r12, copyScreenString@ha
@ -2842,6 +2848,10 @@ addi r11, r11, -1
cmpwi r11, -1 cmpwi r11, -1
bne eraseSubPanelLoop bne eraseSubPanelLoop
li r10, $enableUltrawideDebugLogging
cmpwi r10, 1
blt skipLayoutFileLogging
crxor 4*cr1+eq, 4*cr1+eq, 4*cr1+eq crxor 4*cr1+eq, 4*cr1+eq, 4*cr1+eq
lis r3, newLineFormatScreen@ha lis r3, newLineFormatScreen@ha
addi r3, r3, newLineFormatScreen@l addi r3, r3, newLineFormatScreen@l
@ -2854,6 +2864,8 @@ bl import.coreinit.OSReport
mtlr r10 mtlr r10
mr r3, r11 mr r3, r11
skipLayoutFileLogging:
lwz r11, 0xC(r30) lwz r11, 0xC(r30)
blr blr

View File

@ -25,6 +25,8 @@ $shadowNearbyEnd = 1.0
$shadowFarStart = 1.0 $shadowFarStart = 1.0
$shadowFarEnd = 1.0 $shadowFarEnd = 1.0
# Should be set to 1 or 2 (changes verbosity of loggin) when trying to log the layout of panes while they're getting loaded for debugging purposes
$enableUltrawideDebugLogging:int = 0
# Aspect Ratio # Aspect Ratio

View File

@ -0,0 +1,199 @@
[BotW_XboxImageReplacement_V208]
moduleMatches = 0x6267BFD0
.origin = codecave
str_Nt_KeyTexA_00_d:
.string "Nt_KeyTexA_00^d.bflim"
str_Nt_KeyTexB_00_d:
.string "Nt_KeyTexB_00^d.bflim"
str_Nt_KeyTexX_00_d:
.string "Nt_KeyTexX_00^d.bflim"
str_Nt_KeyTexY_00_d:
.string "Nt_KeyTexY_00^d.bflim"
loadLineFormat:
.string " -> Loaded .bflym: %s - Replaced with: %s %c"
loadLineReplacement:
.string "None"
loadLineCharacter:
.int 10
.align 4
; compares the string from r4 and r5
; r4 is untouched, so use that to do multiple comparisons
; other registers used: r0, r11, r3, r31
tempR4:
.int 0
tempR5:
.int 0
tempR6:
.int 0
tempR7:
.int 0
tempR0:
.int 0
tempR11:
.int 0
tempR3:
.int 0
tempR13:
.int 0
tempR31:
.int 0
; Unused registers: r12, r0, r31, r10, r6
_replaceButtonPrompts:
; Check if image filename isn't 0
cmpwi r5, 0
beqlr
mflr r13
; Backup registers
lis r12, tempR3@ha
stw r3, tempR3@l(r12)
lis r12, tempR4@ha
stw r4, tempR4@l(r12)
lis r12, tempR5@ha
stw r5, tempR5@l(r12)
lis r12, tempR6@ha
stw r6, tempR6@l(r12)
lis r12, tempR7@ha
stw r7, tempR7@l(r12)
lis r12, tempR0@ha
stw r0, tempR0@l(r12)
lis r12, tempR11@ha
stw r11, tempR11@l(r12)
lis r12, tempR13@ha
stw r13, tempR13@l(r12)
lis r12, tempR31@ha
stw r31, tempR31@l(r12)
; Check for buttons from e.g. DoCommand layout (used when holding something, climbing, jumping off a cliff etc)
lis r4, str_Nt_KeyTexA_00_d@ha
addi r4, r4, str_Nt_KeyTexA_00_d@l
bla _compareString
beq replaceWithBButton
lis r4, str_Nt_KeyTexB_00_d@ha
addi r4, r4, str_Nt_KeyTexB_00_d@l
bla _compareString
beq replaceWithAButton
lis r4, str_Nt_KeyTexX_00_d@ha
addi r4, r4, str_Nt_KeyTexX_00_d@l
bla _compareString
beq replaceWithYButton
lis r4, str_Nt_KeyTexY_00_d@ha
addi r4, r4, str_Nt_KeyTexY_00_d@l
bla _compareString
beq replaceWithXButton
li r3, $enableDebugLogging
cmpwi r3, 1
bne skipImageLogging
; Log the image that's trying to get loaded, r5 already contains the image name
crxor 4*cr1+eq, 4*cr1+eq, 4*cr1+eq
lis r3, loadLineFormat@ha
addi r3, r3, loadLineFormat@l
mr r4, r5
lis r5, loadLineReplacement@ha
addi r5, r5, loadLineReplacement@l
lis r6, loadLineCharacter@ha
lwz r6, loadLineCharacter@l(r6)
bl import.coreinit.OSReport
skipImageLogging:
; If no matches, exit the hook
lis r12, tempR5@ha
lwz r5, tempR5@l(r12)
b exitHook
replaceWithAButton:
lis r6, str_Nt_KeyTexA_00_d@ha
addi r6, r6, str_Nt_KeyTexA_00_d@l
b logReplacement
replaceWithBButton:
lis r6, str_Nt_KeyTexB_00_d@ha
addi r6, r6, str_Nt_KeyTexB_00_d@l
b logReplacement
replaceWithXButton:
lis r6, str_Nt_KeyTexX_00_d@ha
addi r6, r6, str_Nt_KeyTexX_00_d@l
b logReplacement
replaceWithYButton:
lis r6, str_Nt_KeyTexY_00_d@ha
addi r6, r6, str_Nt_KeyTexY_00_d@l
b logReplacement
logReplacement:
; Log the image that's trying to get loaded, r5 already contains the image name
crxor 4*cr1+eq, 4*cr1+eq, 4*cr1+eq
lis r3, loadLineFormat@ha
addi r3, r3, loadLineFormat@l
mr r4, r5
mr r5, r6
lis r6, loadLineCharacter@ha
lwz r6, loadLineCharacter@l(r6)
bl import.coreinit.OSReport
b exitHook
exitHook:
lis r12, tempR3@ha
lwz r3, tempR3@l(r12)
lis r12, tempR4@ha
lwz r4, tempR4@l(r12)
lis r12, tempR6@ha
lwz r6, tempR6@l(r12)
lis r12, tempR7@ha
lwz r7, tempR7@l(r12)
lis r12, tempR0@ha
lwz r0, tempR0@l(r12)
lis r12, tempR11@ha
lwz r11, tempR11@l(r12)
lis r12, tempR13@ha
lwz r13, tempR13@l(r12)
lis r12, tempR31@ha
lwz r31, tempR31@l(r12)
mtlr r13
lwz r12, 0(r3)
blr
0x03C48B68 = bla _replaceButtonPrompts
; compares the string from r4 and r5
; r4 is untouched, so use that to do multiple comparisons
; other registers used: r0, r11, r3, r31
_compareString:
mr r31, r5
startLoop:
lbz r0, 0(r31)
lbz r3, 0(r4)
cmpwi r0, 0
bne checkForMatch
cmpwi r3, 0
bne checkForMatch
li r4, 1
cmpwi r4, 1
blr
checkForMatch:
cmpw r0, r3
bne noMatch
addi r31, r31, 1
addi r4, r4, 1
b startLoop
noMatch:
li r4, 0
cmpwi r4, 1
blr

View File

@ -0,0 +1,261 @@
[BotW_XboxTextReplacement_V208]
moduleMatches = 0x6267BFD0
.origin = codecave
textReplacementFormat:
.string " -> Button %s: Changed text to %.10s = hex: 0x%2X%c"
textReplacementCharacter:
.int 10
.align 4
wcharToCharBuffer:
.string " "
.align 4
str_WideA:
.byte 0x00
.byte 0x41
.byte 0x00
.byte 0x00
str_WideB:
.byte 0x00
.byte 0x42
.byte 0x00
.byte 0x00
str_WideX:
.byte 0x00
.byte 0x58
.byte 0x00
.byte 0x00
str_WideY:
.byte 0x00
.byte 0x59
.byte 0x00
.byte 0x00
.align 4
str2_WideA:
.byte 0xE0
.byte 0x40
.byte 0x00
.byte 0x00
str2_WideB:
.byte 0xE0
.byte 0x41
.byte 0x00
.byte 0x00
str2_WideX:
.byte 0xE0
.byte 0x42
.byte 0x00
.byte 0x00
str2_WideY:
.byte 0xE0
.byte 0x43
.byte 0x00
.byte 0x00
str2_WideDefault:
.byte 0xE0
.byte 0x43
.byte 0x00
.byte 0x00
.align 4
; free registers r9, r3, r31, r5, r0
; r4 holds text
; r29 + 0x80 is start of the name of the text pane
patchText:
mr r31, r6
mr r12, r4
mflr r9
li r3, $enableDebugLogging
cmpwi r3, 1
bne skipTextLogging
; Make temporary conversion of wide char to char
lis r3, wcharToCharBuffer@ha
addi r3, r3, wcharToCharBuffer@l
li r5, 1
li r6, 0
wcharToCharLoop:
lbzx r0, r4, r5
stbx r0, r3, r6
addi r5, r5, 2
addi r6, r6, 1
cmpwi r6, 10 ; only copy 10 characters
bne wcharToCharLoop
lis r5, wcharToCharBuffer@ha
addi r5, r5, wcharToCharBuffer@l
; Log the text that's being loaded
mr r0, r7
crxor 4*cr1+eq, 4*cr1+eq, 4*cr1+eq
lis r3, textReplacementFormat@ha
addi r3, r3, textReplacementFormat@l
addi r4, r29, 0x80
lwz r6, 0(r12)
lis r7, textReplacementCharacter@ha
lwz r7, textReplacementCharacter@l(r7)
bl import.coreinit.OSReport
mr r7, r0
skipTextLogging:
; Check for DoCommand button (button prompts start with T_[X]_00)
addi r3, r29, 0x80
lbz r5, 0(r3)
cmpwi r5, 0x54 ; T
bne nextButton
lbz r5, 1(r3)
cmpwi r5, 0x5F ; _
bne nextButton
; Check _00 part
lbz r5, 3(r3)
cmpwi r5, 0x5F ; _
bne nextButton
lbz r5, 4(r3)
cmpwi r5, 0x30 ; 0
bne nextButton
lbz r5, 5(r3)
cmpwi r5, 0x30 ; 0
bne nextButton
; Check which button it is
lbz r5, 2(r3)
cmpwi r5, 0x41 ; A
beq replaceButtonB
lbz r5, 2(r3)
cmpwi r5, 0x42 ; B
beq replaceButtonA
lbz r5, 2(r3)
cmpwi r5, 0x58 ; X
beq replaceButtonY
lbz r5, 2(r3)
cmpwi r5, 0x59 ; Y
beq replaceButtonX
nextButton:
; Check guide buttons in most of the other screens
addi r3, r29, 0x80
lbz r5, 0(r3)
cmpwi r5, 0x54 ; T
bne exitTextPatch
lbz r5, 1(r3)
cmpwi r5, 0x5F ; _
bne exitTextPatch
lbz r5, 2(r3)
cmpwi r5, 0x49 ; I
bne exitTextPatch
lbz r5, 3(r3)
cmpwi r5, 0x63 ; c
bne exitTextPatch
lbz r5, 4(r3)
cmpwi r5, 0x6F ; o
bne exitTextPatch
lbz r5, 5(r3)
cmpwi r5, 0x6E ; n
bne exitTextPatch
lbz r5, 6(r3)
cmpwi r5, 0x5F ; _
bne exitTextPatch
# lbz r5, 7(r3)
# cmpwi r5, 0x30 ; 0
# bne exitTextPatch
b replaceAllButtons
# lbz r5, 8(r3)
# cmpwi r5, 0x30 ; 0
# beq replaceAllButtons
# lbz r5, 8(r3)
# cmpwi r5, 0x31 ; 1
# beq replaceAllButtons
# lbz r5, 8(r3)
# cmpwi r5, 0x32 ; 2
# beq replaceAllButtons
# lbz r5, 8(r3)
# cmpwi r5, 0x33 ; 3
# beq replaceAllButtons
b exitTextPatch
; Load the current text and see what button it is
replaceAllButtons:
mr r4, r12
lbz r5, 1(r4)
cmpwi r5, 0x40 ; A
beq replaceWideButtonB
lbz r5, 1(r4)
cmpwi r5, 0x41 ; B
beq replaceWideButtonA
lbz r5, 1(r4)
cmpwi r5, 0x42 ; X
beq replaceWideButtonY
lbz r5, 1(r4)
cmpwi r5, 0x43 ; Y
beq replaceWideButtonX
; If none matched, just go to exit
b exitTextPatch
replaceButtonA:
lis r12, str_WideA@ha
addi r12, r12, str_WideA@l
b exitTextPatch
replaceButtonB:
lis r12, str_WideB@ha
addi r12, r12, str_WideB@l
b exitTextPatch
replaceButtonX:
lis r12, str_WideX@ha
addi r12, r12, str_WideX@l
b exitTextPatch
replaceButtonY:
lis r12, str_WideY@ha
addi r12, r12, str_WideY@l
b exitTextPatch
replaceWideButtonA:
lis r12, str2_WideA@ha
addi r12, r12, str2_WideA@l
b exitTextPatch
replaceWideButtonB:
lis r12, str2_WideB@ha
addi r12, r12, str2_WideB@l
b exitTextPatch
replaceWideButtonX:
lis r12, str2_WideX@ha
addi r12, r12, str2_WideX@l
b exitTextPatch
replaceWideButtonY:
lis r12, str2_WideY@ha
addi r12, r12, str2_WideY@l
b exitTextPatch
exitTextPatch:
mr r4, r12
mr r6, r31
mtlr r9
subf r31, r30, r3
blr
0x03C4BA40 = bla patchText

View File

@ -0,0 +1,9 @@
[Definition]
titleIds = 00050000101C9300,00050000101C9400,00050000101C9500
name = Xbox Controller Button Layout
path = "The Legend of Zelda: Breath of the Wild/Mods/Xbox Controller Button Layout"
description = Swaps the ABXY buttons from the Nintendo layout to the standard PC/Xbox layout.|You can find mods for PS4/PS5 controllers on GameBanana.
version = 6
[Default]
$enableDebugLogging:int = 0

View File

@ -1,4 +0,0 @@
[BotW_DayLength_V208]
moduleMatches = 0x6267BFD0
0x10301844 = .float (1/(120*$timeScale))

View File

@ -0,0 +1,76 @@
[BotW_DayTime_V208]
moduleMatches = 0x6267BFD0
.origin = codecave
const_timeMultiplier:
.float $timeMultiplier
const_cloudMultiplier:
.float $cloudMultiplier
; Normal Time Mode - Time
multiplyTimeStep:
lfs f7, 0xA4(r30) ; original instruction to load timestep
lis r9, const_timeMultiplier@ha
lfs f8, const_timeMultiplier@l(r9)
fmuls f7, f7, f8
lwz r9, 0(r6) ; repeat prior instruction for free r9 register
blr
0x0365FF78 = bla multiplyTimeStep
; Normal Time Mode - Clouds
multiplyCloudStep:
lis r4, const_cloudMultiplier@ha
lfs f11, const_cloudMultiplier@l(r4)
fmuls f6, f6, f11
stfs f6, 0xB0(r30)
blr
0x03660018 = bla multiplyCloudStep
; OnlyUpdateTimeOfDay Mode - Time & Clouds
multiplyOnlyTimeStep:
lfs f9, 0xA4(r30)
lis r4, const_timeMultiplier@ha
lfs f6, const_timeMultiplier@l(r4)
fmuls f9, f9, f6
blr
0x03660154 = bla multiplyOnlyTimeStep
; Change mode to one of the forced ones when forced time is enabled
calcForceTime:
li r12, $timeCycleMode
cmpwi r12, 1
beq noForcedTime
li r12, $dayTimeEnum
cmpwi r0, 0
blr
noForcedTime:
lbz r12, 0x129(r30)
cmpwi r0, 0
blr
0x0365FB18 = bla calcForceTime
calcForceTime2:
li r12, $timeCycleMode
cmpwi r12, 1
beq noForcedTime1
li r12, $dayTimeEnum ; Load forced time
cmpwi r0, 0
blr
noForcedTime1:
lbz r12, 0x129(r30) ; Normal load instruction
cmpwi r0, 0
blr
0x0365FE0C = bla calcForceTime2

View File

@ -1,80 +1,270 @@
[Definition] [Definition]
titleIds = 00050000101C9300,00050000101C9400,00050000101C9500 titleIds = 00050000101C9300,00050000101C9400,00050000101C9500
name = Day Length name = Day Time
path = "The Legend of Zelda: Breath of the Wild/Mods/Day Length" path = "The Legend of Zelda: Breath of the Wild/Mods/Day Time"
description = Changes the amount of real time that an in-game day takes.|Blood moons might not appear when you change the day length.||Made by chrispurnell. description = Allows you to set a fixed time or change the length of the day-night cycle.|This could alter blood moon frequency or other time-related mechanics.||Made by chrispurnell.
version = 6 version = 6
[Default] [Default]
$timeScale = 1 $timeCycleMode:int = 0
$timeMultiplier = 1.0
$cloudMultiplier = 1.0
$dayTimeEnum:int = 0
[Preset]
name = Enabled (Default)
category = Day/Night Cycle
default = 1
$timeCycleMode:int = 1
[Preset]
name = Disabled (Fixed Time Of Day)
category = Day/Night Cycle
$timeCycleMode:int = 0
[Preset] [Preset]
name = 15 seconds name = 15 seconds
category = Day Length category = Day Length
$timeScale = 0.025 condition = ($timeCycleMode == 1)
$timeMultiplier = 96
$cloudMultiplier = 96
[Preset] [Preset]
name = 30 seconds name = 30 seconds
category = Day Length category = Day Length
$timeScale = 0.05 condition = ($timeCycleMode == 1)
$timeMultiplier = 48
$cloudMultiplier = 48
[Preset] [Preset]
name = 1 minutes name = 1 minutes
category = Day Length category = Day Length
$timeScale = 0.1 condition = ($timeCycleMode == 1)
$timeMultiplier = 24
$cloudMultiplier = 24
[Preset] [Preset]
name = 6 minutes name = 6 minutes
category = Day Length category = Day Length
$timeScale = 0.25 condition = ($timeCycleMode == 1)
$timeMultiplier = 4
$cloudMultiplier = 4
[Preset] [Preset]
name = 12 minutes name = 12 minutes
category = Day Length category = Day Length
$timeScale = 0.5 condition = ($timeCycleMode == 1)
$timeMultiplier = 2
$cloudMultiplier = 2
[Preset] [Preset]
name = 24 minutes (Default) name = 24 minutes (Default)
category = Day Length category = Day Length
condition = ($timeCycleMode == 1)
default = 1 default = 1
$timeMultiplier = 1.0
$cloudMultiplier = 1.0
[Preset]
name = 36 minutes
category = Day Length
condition = ($timeCycleMode == 1)
$timeMultiplier = 0.75
$cloudMultiplier = 0.75
[Preset] [Preset]
name = 48 minutes name = 48 minutes
category = Day Length category = Day Length
$timeScale = 2 condition = ($timeCycleMode == 1)
$timeMultiplier = 0.5
$cloudMultiplier = 0.5
[Preset] [Preset]
name = 72 minutes name = 72 minutes
category = Day Length category = Day Length
$timeScale = 3 condition = ($timeCycleMode == 1)
$timeMultiplier = (1/3)
$cloudMultiplier = (1/3)
[Preset] [Preset]
name = 96 minutes name = 96 minutes
category = Day Length category = Day Length
$timeScale = 4 condition = ($timeCycleMode == 1)
$timeMultiplier = 0.25
$cloudMultiplier = 0.25
[Preset] [Preset]
name = 2 hours name = 2 hours
category = Day Length category = Day Length
$timeScale = 5 condition = ($timeCycleMode == 1)
$timeMultiplier = 0.2
$cloudMultiplier = 0.2
[Preset] [Preset]
name = 4 hours name = 4 hours
category = Day Length category = Day Length
$timeScale = 10 condition = ($timeCycleMode == 1)
$timeMultiplier = 0.1
$cloudMultiplier = 0.1
[Preset] [Preset]
name = 12 hours name = 12 hours
category = Day Length category = Day Length
$timeScale = 30 condition = ($timeCycleMode == 1)
$timeMultiplier = (1/3)/10
$cloudMultiplier = (1/3)/10
[Preset] [Preset]
name = 24 hours name = 24 hours
category = Day Length category = Day Length
$timeScale = 60 condition = ($timeCycleMode == 1)
$timeMultiplier = (1/6)/10
$cloudMultiplier = (1/6)/10
[Preset] [Preset]
name = Freeze time name = 00:00
category = Day Length category = Fixed Time Of Day
$timeScale = 9999 condition = ($timeCycleMode == 0)
$dayTimeEnum = 0x2A
[Preset]
name = 01:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0xA
[Preset]
name = 02:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0xB
[Preset]
name = 03:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0xC
[Preset]
name = 04:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0xD
[Preset]
name = 05:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0xE
[Preset]
name = 06:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0xF
[Preset]
name = 07:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0x10
[Preset]
name = 08:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0x11
[Preset]
name = 09:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0x12
[Preset]
name = 10:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0x13
[Preset]
name = 11:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0x14
[Preset]
name = 12:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
default = 1
$dayTimeEnum = 0x15
[Preset]
name = 13:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0x16
[Preset]
name = 14:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0x17
[Preset]
name = 15:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0x18
[Preset]
name = 16:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0x19
[Preset]
name = 17:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0x1A
[Preset]
name = 18:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0x1B
[Preset]
name = 19:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0x1C
[Preset]
name = 20:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0x1D
[Preset]
name = 21:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0x1E
[Preset]
name = 22:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0x1F
[Preset]
name = 23:00
category = Fixed Time Of Day
condition = ($timeCycleMode == 0)
$dayTimeEnum = 0x20

View File

@ -2,7 +2,7 @@
titleIds = 00050000101C9300,00050000101C9400,00050000101C9500 titleIds = 00050000101C9300,00050000101C9400,00050000101C9500
name = Weather name = Weather
path = "The Legend of Zelda: Breath of the Wild/Mods/Weather" path = "The Legend of Zelda: Breath of the Wild/Mods/Weather"
description = Allows you to change the weather, to an individual level.|Won't change weather in areas that have a certain type forced.||Made by dragbe. description = Allows you to change the weather forecast to an individual level.|Won't change weather in areas that have a certain type forced.||Made by dragbe.
version = 6 version = 6
# Weather names from https://github.com/zeldaret/botw # Weather names from https://github.com/zeldaret/botw