[BotW] FPS++ Cleanup, Temporary Arrow fix, Add more dynamic values

This commit is contained in:
Pig 2021-01-15 00:24:22 +01:00
parent e6a8d9001c
commit 6adc2057f7
3 changed files with 58 additions and 31 deletions

View File

@ -20,8 +20,8 @@ disableFastScrolling:
; This calculates dynamic FPS system. ; This calculates dynamic FPS system.
_calculateAverageFPSInt: _calculateAverageFPSInt:
lis r8, averageFPS1Inv@ha lis r8, averageFPS1@ha
lfs f0, averageFPS1Inv@l(r8) lfs f0, averageFPS1@l(r8)
lis r8, const_roundUpModifier@ha lis r8, const_roundUpModifier@ha
lfs f13, const_roundUpModifier@l(r8) lfs f13, const_roundUpModifier@l(r8)
fadds f0, f0, f13 fadds f0, f0, f13

View File

@ -36,13 +36,19 @@ averageFPS30:
.float $fpsLimit .float $fpsLimit
averageFPS30Inv: averageFPS30Inv:
.float $fpsLimit .float 900/$fpsLimit
averageFPS1: averageFPS1:
.float 30/$fpsLimit .float $fpsLimit/30
averageFPS1Inv: averageFPS1Inv:
.float $fpsLimit/30 .float 30/$fpsLimit
averageFPS0.5:
.float $fpsLimit/60
averageFPS0.5Inv:
.float 30/(2*$fpsLimit)
averageSum: averageSum:
.float $fpsLimit*$frameAverageAmount .float $fpsLimit*$frameAverageAmount
@ -161,21 +167,38 @@ lis r11, averageFPS30@ha ; Store the calculated FPS...
stfs f10, averageFPS30@l(r11) ; ...to replace constants that normally use 30 stfs f10, averageFPS30@l(r11) ; ...to replace constants that normally use 30
; Set average speed (1.0 range) ; Set average speed (1.0 range)
lis r11, const_30@ha ; Load a constant float with 30... lis r11, const_30@ha ; Load a constant float with 30.0...
lfs f12, const_30@l(r11) ; ...into f12 lfs f12, const_30@l(r11) ; ...into f12
fdivs f7, f12, f10 ; Divide the calculated FPS by 30 fdivs f7, f10, f12 ; Divide the calculated FPS by 30
lis r11, averageFPS1@ha ; Store this new divided calculated FPS... lis r11, averageFPS1@ha ; Store this new divided calculated FPS...
stfs f7, averageFPS1@l(r11) ; ...to replace constants that normally use 1 stfs f7, averageFPS1@l(r11) ; ...to replace constants that normally use 1
; Set average speed (inverted 1.0 range) ; Set average speed (0.5 range)
fdivs f10, f10, f12 ; Multiply 1.0 by 30.0 to invert the FPS fadds f12, f12, f12 ; Add 30.0 to 30.0 to get 60.0
lis r11, averageFPS1Inv@ha ; Store the inverted 30 float... fdivs f7, f10, f12 ; Divide the calculated FPS by 60
stfs f10, averageFPS1Inv@l(r11) ; ...to replace constants that is lower when FPS is higher lis r11, averageFPS0.5@ha ; Store this new divided calculated FPS...
stfs f7, averageFPS0.5@l(r11) ; ...to replace constants that normally use 0.5
; Set average speed (inverted 30 range) ; Set average speed (inverted 30 range)
fmuls f10, f7, f12 ; Multiply 1.0 by 30.0 to invert the FPS lis r11, const_30@ha ; Load a constant float with 30.0...
lis r11, averageFPS30Inv@ha ; Store the inverted 30 float... lfs f12, const_30@l(r11) ; ...into f12
stfs f10, averageFPS30Inv@l(r11); ...to replace constants that is lower when FPS is higher fmuls f12, f12, f12 ; Multiply 30.0 by 30.0 to get 900.0
fdivs f7, f12, f10 ; Divide 900.0 by the calculated FPS to invert the FPS
lis r11, averageFPS30Inv@ha ; Store the inverted 30.0 float...
stfs f7, averageFPS30Inv@l(r11) ; ...to replace constants that is lower when FPS is higher
; Set average speed (inverted 1.0 range)
lis r11, const_30@ha ; Load a constant float with 30...
lfs f12, const_30@l(r11) ; ...into f12
fdivs f7, f12, f10 ; Divides 30.0 by the calculated FPS to invert the FPS
lis r11, averageFPS1Inv@ha ; Store the inverted 1.0 float...
stfs f7, averageFPS1Inv@l(r11) ; ...to replace constants that is lower when FPS is higher
; Set average speed (inverted 0.5 range)
fadds f7, f10, f10 ; Add the calculated FPS to itself and store it in f7
fdivs f7, f12, f7 ; Divide 30.0 by 2 * the calculated FPS and store it in f7
lis r11, averageFPS0.5Inv@ha ; Store the inverted 0.5 float...
stfs f7, averageFPS0.5Inv@l(r11); ...to replace constants that is lower when FPS is higher
; Check whether debug mode is on ; Check whether debug mode is on
li r11, $debugMode ; Load debugMode value in r11 li r11, $debugMode ; Load debugMode value in r11
@ -193,15 +216,15 @@ blr ; Return back to the address stored in the link register
; Multiplies the time draining using the calculated FPS ; Multiplies the time draining using the calculated FPS
_changeArrowTimeDrain: _changeArrowTimeDrain:
lfs f1, 0xFC(r11) ; Execute original instruction that got replaced with this codecave jump lfs f1, 0xFC(r11) ; Execute original instruction that got replaced with this codecave jump
lis r12, averageFPS1@ha ; Load the average FPS... lis r12, averageFPS1Inv@ha ; Load the average FPS...
lfs f0, averageFPS1@l(r12) ; ...into f0 lfs f0, averageFPS1Inv@l(r12) ; ...into f0
fmuls f1, f1, f0 ; Multiply the time draining value by the average FPS divider fmuls f1, f1, f0 ; Multiply the time draining value by the average FPS divider
blr ; Return to the address that's stored in the link register blr ; Return to the address that's stored in the link register
; Multiplies the distance you travel during the flurry rush dash using the calculated FPS ; Multiplies the distance you travel during the flurry rush dash using the calculated FPS
_changeFlurryRush: _changeFlurryRush:
lis r4, averageFPS1Inv@ha ; Load average FPS into f8.. lis r4, averageFPS1@ha ; Load average FPS into f8..
lfs f8, averageFPS1Inv@l(r4) ; ...which is a float register that's safe to use since it's initialized later lfs f8, averageFPS1@l(r4) ; ...which is a float register that's safe to use since it's initialized later
fmuls f13, f13, f8 ; Multiply the flurry rush distance (stored in f1) with the FPS multiplier fmuls f13, f13, f8 ; Multiply the flurry rush distance (stored in f1) with the FPS multiplier
fcmpu cr0, f13, f29 ; Execute original instruction that got replaced with this codecave jump fcmpu cr0, f13, f29 ; Execute original instruction that got replaced with this codecave jump
blr ; Return to the address that's stored in the link register blr ; Return to the address that's stored in the link register
@ -220,21 +243,25 @@ blr ; Return to the address that's stored in the link register
0x02D5F760 = bla _changeArrowTimeDrain ; Fix the stamina drain during arrow time 0x02D5F760 = bla _changeArrowTimeDrain ; Fix the stamina drain during arrow time
0x03793328 = nop 0x03793328 = nop
0x03793334 = nop 0x03793334 = nop
0x03793378 = lis r29, averageFPS1@ha ; Load the calculated FPS value 0x03793378 = lis r29, averageFPS1Inv@ha ; Load the calculated FPS value
0x03793380 = lfs f0, averageFPS1@l(r29) ; ...to use that as animation speed 0x03793380 = lfs f0, averageFPS1Inv@l(r29) ; ...to use that as animation speed
0x0379338C = nop ; Prevent an instruction from overwriting the loaded value 0x0379338C = nop ; Prevent an instruction from overwriting the loaded value
0x03415C1C = lis r12, averageFPS1@ha ; Load the calculated FPS value 0x03415C1C = lis r12, averageFPS1Inv@ha ; Load the calculated FPS value
0x03415C24 = lfs f0, averageFPS1@l(r12) ; ...to store that for the GUI speed value 0x03415C24 = lfs f0, averageFPS1Inv@l(r12) ; ...to store that for the GUI speed value
0x03415C2C = nop ; Prevent an instruction from overwriting the loaded value 0x03415C2C = nop ; Prevent an instruction from overwriting the loaded value
0x02D90D2C = lis r10, averageFPS30@ha 0x02D90D2C = lis r10, averageFPS30@ha
0x02D90D30 = lfs f11, averageFPS30@l(r10) 0x02D90D30 = lfs f11, averageFPS30@l(r10)
0x02D90D88 = lis r10, averageFPS30@ha 0x02D90D88 = lis r10, averageFPS30@ha ; Fix stamina regen by loading the calculated FPS value...
0x02D90D8C = lfs f11, averageFPS30@l(r10) 0x02D90D8C = lfs f11, averageFPS30@l(r10) ; ...instead of the normal static 30.0 float it uses
0x037DC35C = lis r12, averageFPS1@ha ; Fix audio looping by loading the calculated FPS value... 0x037DC35C = lis r12, averageFPS1Inv@ha ; Fix audio looping by loading the calculated FPS value...
0x037DC360 = lfs f13, averageFPS1@l(r12) ; ...instead of the normal static 1.0 float it uses 0x037DC360 = lfs f13, averageFPS1Inv@l(r12) ; ...instead of the normal static 1.0 float it uses
0x02F62B3C = lis r12, averageFPS1@ha ; Fix map scrolling by loading the calculated FPS value... 0x02F62B3C = lis r12, averageFPS1Inv@ha ; Fix map scrolling by loading the calculated FPS value...
0x02F62B40 = lfs f0, averageFPS1@l(r12) ; ...instead of the normal static 1.0 float it uses 0x02F62B40 = lfs f0, averageFPS1Inv@l(r12) ; ...instead of the normal static 1.0 float it uses
0x020E730C = lis r12, averageFPS30Inv@ha ; Fix arrow speed by loading the calculated FPS value... 0x020E730C = lis r12, averageFPS30Inv@ha ; Fix arrow speed by loading the calculated FPS value...
0x020E731C = lfs f13, averageFPS30Inv@l(r12); ...instead of the normal static 30.0 float it uses 0x020E731C = lfs f13, averageFPS30Inv@l(r12); ...instead of the normal static 30.0 float it uses
0x033609D8 = lis r6, averageFPS1@ha ; Fix shield surfing by loading the calculated FPS value... 0x020E3EB0 = lis r12, averageFPS0.5@ha ; Modify something to do with arrow bounce and distance by loading the calculated FPS value...
0x033609E0 = lfs f0, averageFPS1@l(r6) ; ...instead of the normal static 1.0 float it uses 0x020E3EB8 = lfs f13, averageFPS0.5@l(r12) ; ...instead of the normal static 0.5 float it uses
0x020E5390 = lis r10, averageFPS0.5@ha ; Modify the distance arrows travel straight by loading the calculated FPS value...
0x020E5398 = lfs f13, averageFPS0.5@l(r10) ; ...instead of the normal static 0.5 float it uses
0x033609D8 = lis r6, averageFPS1Inv@ha ; Fix shield surfing by loading the calculated FPS value...
0x033609E0 = lfs f0, averageFPS1Inv@l(r6) ; ...instead of the normal static 1.0 float it uses

View File

@ -2,7 +2,7 @@
titleIds = 00050000101C9300,00050000101C9400,00050000101C9500 titleIds = 00050000101C9300,00050000101C9400,00050000101C9500
name = FPS++ name = FPS++
path = "The Legend of Zelda: Breath of the Wild/Mods/FPS++" path = "The Legend of Zelda: Breath of the Wild/Mods/FPS++"
description = Allows you to change the FPS and the speed that most things run at.|Some elements aren't patched though which can cause some physics issues. To bypass any issues you can enable the Temporary 30FPS Limit.||Made by Xalphenos, rajkosto, epigramx, Crementif and leoetlino. description = Allows you to change the FPS and the speed that most things run at.|Some elements aren't patched though which can cause some physics issues. To bypass any issues you can enable the Temporary 30FPS Limit.||Made by Xalphenos, rajkosto, epigramx, Crementif, leoetlino and Pig.
version = 6 version = 6
[Default] [Default]