From 57300c7aa236858c4299601d0572ae937698252d Mon Sep 17 00:00:00 2001 From: Crementif <26669564+Crementif@users.noreply.github.com> Date: Fri, 28 Jan 2022 16:59:38 +0100 Subject: [PATCH] [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. --- .../Graphics/patch_AspectRatio.asm | 3 + .../Graphics/patch_GUIAspectRatio.asm | 16 +- src/BreathOfTheWild/Graphics/rules.txt | 2 + .../patch_XboxImageReplacement.asm | 199 +++++++++++++ .../patch_XboxTextReplacement.asm | 261 ++++++++++++++++++ .../Mods/ControllerLayout/rules.txt | 9 + .../Mods/DayLength/patch_DayLength.asm | 4 - .../Mods/DayLength/patch_DayTime.asm | 76 +++++ src/BreathOfTheWild/Mods/DayLength/rules.txt | 228 +++++++++++++-- src/BreathOfTheWild/Mods/Weather/rules.txt | 2 +- 10 files changed, 774 insertions(+), 26 deletions(-) create mode 100644 src/BreathOfTheWild/Mods/ControllerLayout/patch_XboxImageReplacement.asm create mode 100644 src/BreathOfTheWild/Mods/ControllerLayout/patch_XboxTextReplacement.asm create mode 100644 src/BreathOfTheWild/Mods/ControllerLayout/rules.txt delete mode 100644 src/BreathOfTheWild/Mods/DayLength/patch_DayLength.asm create mode 100644 src/BreathOfTheWild/Mods/DayLength/patch_DayTime.asm 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