2019-01-20 23:57:59 +01:00
[BotwV208]
moduleMatches = 0x6267BFD0
2019-03-24 14:20:46 +01:00
codeCaveSize = 0x20
2019-01-20 23:57:59 +01:00
# Constants
2019-03-24 14:20:46 +01:00
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
2019-01-20 23:57:59 +01:00
2019-03-24 14:20:46 +01:00
# 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.
2019-01-20 23:57:59 +01:00
_changeWeather = 0x00000004
2019-03-24 14:20:46 +01:00
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
2019-01-20 23:57:59 +01:00
2019-03-24 14:20:46 +01:00
0x31FACD4 = bla _changeWeather
2019-01-20 23:57:59 +01:00
2019-03-24 14:20:46 +01:00
# 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:
2019-01-20 23:57:59 +01:00
# .text:03668FE8 stb r0, 0x19(r30)
2019-03-24 14:20:46 +01:00
# .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.