[BotwV208] moduleMatches = 0x6267BFD0 codeCaveSize = 0x20 # Constants 0x0000000 = .byte $weatherByte ; This address holds the value set by the presets _weatherConst = 0x0000000 ; Makes a symbol of the value above _weatherAddress = 0x3FF7DB24 ; This symbol points to the weather address # Code that changes the weather address value. # This code is executed each frame since there's too many addresses that mess with the original one, and changing those caused crashes. Shouldn't affect performance regardless. _changeWeather = 0x00000004 0x0000004 = lis r6, _weatherConst@ha ; Load first half of the address to the "weather value" 0x0000008 = lbz r6, _weatherConst@l(r6) ; Use the first half of the "weather value" address to load the full value set by the current preset 0x000000C = lis r5, _weatherAddress@ha ; Load first half of the actual "weather address" 0x0000010 = stb r6, _weatherAddress@l(r5) ; Store the "weather value" byte into the "weather address", using the first half of that address 0x0000014 = addi r6, r1, 0x18 ; Do the original instruction that got replaced by the code jump 0x0000018 = blr ; Return to the code before the code jump 0x31FACD4 = bla _changeWeather # Disable original instructions that write the weather value, just because 0x3668FE8 = nop 0x3668FEC = nop # How to find the memory address where the weather is stored (if it needs to be updated): # 1. Make 1 breakpoint on one of the following instructions using Cemu's PPC debugger: # .text:03668FE8 stb r0, 0x19(r30) # .text:03668FEC stb r26, 0x18(r30) # 2. Fast travel into an area where the weather isn't constant # 3. After it hits the breakpoint, look at the register view and find the value after R30. # 4. Use a hex calculator to add 0x18 to that address and you'll have the address.