diff --git a/src/BreathOfTheWild/Graphics/patch_AspectRatio.asm b/src/BreathOfTheWild/Graphics/patch_AspectRatio.asm index 5b65035c..520e9aff 100644 --- a/src/BreathOfTheWild/Graphics/patch_AspectRatio.asm +++ b/src/BreathOfTheWild/Graphics/patch_AspectRatio.asm @@ -30,6 +30,9 @@ moduleMatches = 0x6267BFD0 0x035b0a30 = lis r5, grassCulling@ha 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] diff --git a/src/BreathOfTheWild/Graphics/patch_GUIAspectRatio.asm b/src/BreathOfTheWild/Graphics/patch_GUIAspectRatio.asm index 121258fe..7da4e334 100644 --- a/src/BreathOfTheWild/Graphics/patch_GUIAspectRatio.asm +++ b/src/BreathOfTheWild/Graphics/patch_GUIAspectRatio.asm @@ -56,7 +56,11 @@ li r10, $ultrawideHUDMode cmpwi r10, 0 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 r11, r4 mr r12, r5 @@ -71,6 +75,8 @@ mr r3, r10 mr r4, r11 mr r5, r12 +skipPaneLogging: + ; ------------------------------------------------------------------------------------------ ; Store whether there's a subpanel name @@ -2816,7 +2822,7 @@ blr ; ------------------------------------------------------------------------------------------ _createNewScreenHook: -; Copy +; Copy screen name to buffer lis r11, copyScreenStringLen@ha lwz r11, copyScreenStringLen@l(r11) lis r12, copyScreenString@ha @@ -2842,6 +2848,10 @@ addi r11, r11, -1 cmpwi r11, -1 bne eraseSubPanelLoop +li r10, $enableUltrawideDebugLogging +cmpwi r10, 1 +blt skipLayoutFileLogging + crxor 4*cr1+eq, 4*cr1+eq, 4*cr1+eq lis r3, newLineFormatScreen@ha addi r3, r3, newLineFormatScreen@l @@ -2854,6 +2864,8 @@ bl import.coreinit.OSReport mtlr r10 mr r3, r11 +skipLayoutFileLogging: + lwz r11, 0xC(r30) blr diff --git a/src/BreathOfTheWild/Graphics/rules.txt b/src/BreathOfTheWild/Graphics/rules.txt index ecf84599..20d7875f 100644 --- a/src/BreathOfTheWild/Graphics/rules.txt +++ b/src/BreathOfTheWild/Graphics/rules.txt @@ -25,6 +25,8 @@ $shadowNearbyEnd = 1.0 $shadowFarStart = 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 diff --git a/src/BreathOfTheWild/Mods/ControllerLayout/patch_XboxImageReplacement.asm b/src/BreathOfTheWild/Mods/ControllerLayout/patch_XboxImageReplacement.asm new file mode 100644 index 00000000..06cf057b --- /dev/null +++ b/src/BreathOfTheWild/Mods/ControllerLayout/patch_XboxImageReplacement.asm @@ -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 \ No newline at end of file diff --git a/src/BreathOfTheWild/Mods/ControllerLayout/patch_XboxTextReplacement.asm b/src/BreathOfTheWild/Mods/ControllerLayout/patch_XboxTextReplacement.asm new file mode 100644 index 00000000..28ca07f1 --- /dev/null +++ b/src/BreathOfTheWild/Mods/ControllerLayout/patch_XboxTextReplacement.asm @@ -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 \ No newline at end of file diff --git a/src/BreathOfTheWild/Mods/ControllerLayout/rules.txt b/src/BreathOfTheWild/Mods/ControllerLayout/rules.txt new file mode 100644 index 00000000..c846521b --- /dev/null +++ b/src/BreathOfTheWild/Mods/ControllerLayout/rules.txt @@ -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 \ No newline at end of file diff --git a/src/BreathOfTheWild/Mods/DayLength/patch_DayLength.asm b/src/BreathOfTheWild/Mods/DayLength/patch_DayLength.asm deleted file mode 100644 index 2f4544c7..00000000 --- a/src/BreathOfTheWild/Mods/DayLength/patch_DayLength.asm +++ /dev/null @@ -1,4 +0,0 @@ -[BotW_DayLength_V208] -moduleMatches = 0x6267BFD0 - -0x10301844 = .float (1/(120*$timeScale)) diff --git a/src/BreathOfTheWild/Mods/DayLength/patch_DayTime.asm b/src/BreathOfTheWild/Mods/DayLength/patch_DayTime.asm new file mode 100644 index 00000000..f2efc7d0 --- /dev/null +++ b/src/BreathOfTheWild/Mods/DayLength/patch_DayTime.asm @@ -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 \ No newline at end of file diff --git a/src/BreathOfTheWild/Mods/DayLength/rules.txt b/src/BreathOfTheWild/Mods/DayLength/rules.txt index a90ee1d5..fc44106b 100644 --- a/src/BreathOfTheWild/Mods/DayLength/rules.txt +++ b/src/BreathOfTheWild/Mods/DayLength/rules.txt @@ -1,80 +1,270 @@ [Definition] titleIds = 00050000101C9300,00050000101C9400,00050000101C9500 -name = Day Length -path = "The Legend of Zelda: Breath of the Wild/Mods/Day Length" -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. +name = Day Time +path = "The Legend of Zelda: Breath of the Wild/Mods/Day Time" +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 [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] name = 15 seconds category = Day Length -$timeScale = 0.025 +condition = ($timeCycleMode == 1) +$timeMultiplier = 96 +$cloudMultiplier = 96 [Preset] name = 30 seconds category = Day Length -$timeScale = 0.05 +condition = ($timeCycleMode == 1) +$timeMultiplier = 48 +$cloudMultiplier = 48 [Preset] name = 1 minutes category = Day Length -$timeScale = 0.1 +condition = ($timeCycleMode == 1) +$timeMultiplier = 24 +$cloudMultiplier = 24 [Preset] name = 6 minutes category = Day Length -$timeScale = 0.25 +condition = ($timeCycleMode == 1) +$timeMultiplier = 4 +$cloudMultiplier = 4 [Preset] name = 12 minutes category = Day Length -$timeScale = 0.5 +condition = ($timeCycleMode == 1) +$timeMultiplier = 2 +$cloudMultiplier = 2 [Preset] name = 24 minutes (Default) category = Day Length +condition = ($timeCycleMode == 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] name = 48 minutes category = Day Length -$timeScale = 2 +condition = ($timeCycleMode == 1) +$timeMultiplier = 0.5 +$cloudMultiplier = 0.5 [Preset] name = 72 minutes category = Day Length -$timeScale = 3 +condition = ($timeCycleMode == 1) +$timeMultiplier = (1/3) +$cloudMultiplier = (1/3) [Preset] name = 96 minutes category = Day Length -$timeScale = 4 +condition = ($timeCycleMode == 1) +$timeMultiplier = 0.25 +$cloudMultiplier = 0.25 [Preset] name = 2 hours category = Day Length -$timeScale = 5 +condition = ($timeCycleMode == 1) +$timeMultiplier = 0.2 +$cloudMultiplier = 0.2 [Preset] name = 4 hours category = Day Length -$timeScale = 10 +condition = ($timeCycleMode == 1) +$timeMultiplier = 0.1 +$cloudMultiplier = 0.1 [Preset] name = 12 hours category = Day Length -$timeScale = 30 +condition = ($timeCycleMode == 1) +$timeMultiplier = (1/3)/10 +$cloudMultiplier = (1/3)/10 [Preset] name = 24 hours category = Day Length -$timeScale = 60 +condition = ($timeCycleMode == 1) +$timeMultiplier = (1/6)/10 +$cloudMultiplier = (1/6)/10 + [Preset] -name = Freeze time -category = Day Length -$timeScale = 9999 \ No newline at end of file +name = 00:00 +category = Fixed Time Of Day +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 \ No newline at end of file diff --git a/src/BreathOfTheWild/Mods/Weather/rules.txt b/src/BreathOfTheWild/Mods/Weather/rules.txt index 751b238b..2f638d34 100644 --- a/src/BreathOfTheWild/Mods/Weather/rules.txt +++ b/src/BreathOfTheWild/Mods/Weather/rules.txt @@ -2,7 +2,7 @@ titleIds = 00050000101C9300,00050000101C9400,00050000101C9500 name = 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 # Weather names from https://github.com/zeldaret/botw