mirror of
https://github.com/cemu-project/cemu_graphic_packs.git
synced 2024-12-23 08:21:51 +01:00
Autogeneration of static FPS mods + Rajkosto's mod_onearg() in build.sh
This commit is contained in:
parent
17e430f912
commit
fff4410dd2
@ -1,15 +0,0 @@
|
||||
This is based on an extreme simplification of the fps++ mod by Xalphenos; it
|
||||
drops dynamic FPS to get back stability. The Rajkosto "best fence" method is
|
||||
also included for performance and stability. It improves over the previous
|
||||
static fps mod because it allows ANY value as a static fps target and it
|
||||
also includes the stamina fix.
|
||||
|
||||
To use it simply grab one of the uploaded versions or edit one with these
|
||||
changes: a) rules.txt frequency and name b) divide 30 by the target FPS c) use
|
||||
the result of that calculation and the target fps in patches.txt.
|
||||
|
||||
Disclaimer: this is different from the static FPS mod ported recently. The main
|
||||
advantage of this one is that it allows ANY static FPS instead of only 60, 30,
|
||||
20.. and it also includes the stamina fix.
|
||||
|
||||
epigramx
|
@ -1,7 +0,0 @@
|
||||
[Definition]
|
||||
titleIds = 00050000101C9300,00050000101C9400,00050000101C9500
|
||||
name = "The Legend of Zelda: Breath of the Wild - static 30FPS mod"
|
||||
version = 2
|
||||
|
||||
[Control]
|
||||
vsyncFrequency = 30
|
@ -1,108 +0,0 @@
|
||||
[BotwFPSV208] #i.e. v1.5.0
|
||||
moduleMatches = 0x6267BFD0
|
||||
|
||||
#Cave
|
||||
codeCaveSize = 0x1C
|
||||
_multiplier = 0x0 # edit the next line to change the multiplier
|
||||
0x00000000 = .float 0.66667 # = 30FPS / TARGET FPS, e.g. 30FPS / 18FPS = 1.66667
|
||||
_targetfps = 0x18 # edit the next line to change the target fps
|
||||
0x18 = .float 45
|
||||
|
||||
#"Best fence" by Rajkosto
|
||||
_fenceNeg1 = 0x00000004
|
||||
0x00000004 = add r6, r12, r0 #orig instruction we are replacing
|
||||
0x00000008 = cmpwi r6, 500 #check if less than 500 (full sync on those first frames to prevent milk water)
|
||||
0x0000000C = blt .+0x08 #skip subtract if less than
|
||||
0x00000010 = subi r6, r6, 1 #do the subtract
|
||||
0x00000014 = blr #return
|
||||
|
||||
#Extreme simplification of FPS++ by Xalphenos
|
||||
#codeChanges
|
||||
0x031FA97C = nop
|
||||
0x03793328 = nop
|
||||
0x03793334 = nop
|
||||
0x03793378 = lis r29, _multiplier@ha
|
||||
0x03793380 = lfs f0, _multiplier@L(r29)
|
||||
0x0379338C = nop
|
||||
0x03415C1C = lis r12, _multiplier@ha
|
||||
0x03415C24 = lfs f0, _multiplier@l(r12)
|
||||
0x03415C2C = nop
|
||||
0x02D90D2C = lis r10, _targetfps@ha
|
||||
0x02D90D30 = lfs f11, _targetfps@l(r10)
|
||||
0x02D90D88 = lis r10, _targetfps@ha
|
||||
0x02D90D8C = lfs f11, _targetfps@l(r10)
|
||||
|
||||
#Break all forms of frame limiting
|
||||
0x031FAAFC = bla _fenceNeg1 #Best fence (make sure GPU is never more than 1 frame ahead)
|
||||
#0x031FAAE8 = li r0, 1 #Better fence (make sure GPU is never more than 1 second? ahead)
|
||||
#0x031FAB00 = nop #skip fence (no waiting on GPU)
|
||||
0x031FACD0 = nop #disable vsync
|
||||
0x031FACF4 = nop #disable vsync loop
|
||||
|
||||
#Additional vsync dropping
|
||||
0x0309D030 = nop #disable vsync
|
||||
0x0309D054 = nop #disable vsync loop
|
||||
|
||||
#For testing, the original static mod lines (commented out by default):
|
||||
#0x031FB0C0 = li r0, 1
|
||||
#0x031FB104 = li r0, 1
|
||||
|
||||
#Cheats
|
||||
#0x02D90CC0 = fmr f29, f1 #inf stamina
|
||||
#0x02D452A4 = nop #inf hearts
|
||||
#0x02EB6758 = nop #inf arrows
|
||||
|
||||
[BotwFPSv176V192] #i.e. v1.4.0 and v1.4.1
|
||||
moduleMatches = 0xFD091F9F,0xD472D8A5
|
||||
|
||||
#Cave
|
||||
codeCaveSize = 0x1C
|
||||
_multiplier = 0x0 # edit the next line to change the multiplier
|
||||
0x00000000 = .float 0.66667 # = 30FPS / TARGET FPS, e.g. 30FPS / 18FPS = 1.66667
|
||||
_targetfps = 0x18 # edit the next line to change the target fps
|
||||
0x18 = .float 45
|
||||
|
||||
#"Best fence" by Rajkosto
|
||||
_fenceNeg1 = 0x00000004
|
||||
0x00000004 = add r6, r12, r0 #orig instruction we are replacing
|
||||
0x00000008 = cmpwi r6, 500 #check if less than 500 (full sync on those first frames to prevent milk water)
|
||||
0x0000000C = blt .+0x08 #skip subtract if less than
|
||||
0x00000010 = subi r6, r6, 1 #do the subtract
|
||||
0x00000014 = blr #return
|
||||
|
||||
#Extreme simplification of FPS++ by Xalphenos
|
||||
#codeChanges
|
||||
0x031F9E80 = nop
|
||||
0x03792620 = nop
|
||||
0x0379262C = nop
|
||||
0x03792670 = lis r29, _multiplier@ha
|
||||
0x03792678 = lfs f0, _multiplier@L(r29)
|
||||
0x03792684 = nop
|
||||
0x03414EF8 = lis r12, _multiplier@ha
|
||||
0x03414F00 = lfs f0, _multiplier@l(r12)
|
||||
0x03414F08 = nop
|
||||
0x02D90790 = lis r10, _targetfps@ha
|
||||
0x02D90794 = lfs f11, _targetfps@l(r10)
|
||||
0x02D907EC = lis r10, _targetfps@ha
|
||||
0x02D907F0 = lfs f11, _targetfps@l(r10)
|
||||
|
||||
#Break all forms of frame limiting
|
||||
0x031FA000 = bla _fenceNeg1 #Best fence (make sure GPU is never more than 1 frame ahead)
|
||||
#0x031F9FEC = li r0, 1 #Better fence (make sure GPU is never more than 1 second? ahead)
|
||||
#0x031FA004 = nop #skip fence (no waiting on GPU)
|
||||
0x031FA1D4 = nop #disable vsync
|
||||
0x031FA1F8 = nop #disable vsync loop
|
||||
|
||||
#Additional vsync dropping
|
||||
0x0309C9A4 = nop #disable vsync
|
||||
0x0309C9C8 = nop #disable vsync loop
|
||||
|
||||
#For testing, the original static mod lines (commented out by default):
|
||||
#0x031FA5C4 = li r0, 1
|
||||
#0x031FA608 = li r0, 1
|
||||
|
||||
#Cheats
|
||||
#0x02D90724 = fmr f29, f1 #inf stamina
|
||||
#0x02D44D44 = nop #inf hearts
|
||||
#0x02EB61BC = nop #inf arrows
|
||||
|
@ -1,15 +0,0 @@
|
||||
This is based on an extreme simplification of the fps++ mod by Xalphenos; it
|
||||
drops dynamic FPS to get back stability. The Rajkosto "best fence" method is
|
||||
also included for performance and stability. It improves over the previous
|
||||
static fps mod because it allows ANY value as a static fps target and it
|
||||
also includes the stamina fix.
|
||||
|
||||
To use it simply grab one of the uploaded versions or edit one with these
|
||||
changes: a) rules.txt frequency and name b) divide 30 by the target FPS c) use
|
||||
the result of that calculation and the target fps in patches.txt.
|
||||
|
||||
Disclaimer: this is different from the static FPS mod ported recently. The main
|
||||
advantage of this one is that it allows ANY static FPS instead of only 60, 30,
|
||||
20.. and it also includes the stamina fix.
|
||||
|
||||
epigramx
|
@ -1,7 +0,0 @@
|
||||
[Definition]
|
||||
titleIds = 00050000101C9300,00050000101C9400,00050000101C9500
|
||||
name = "The Legend of Zelda: Breath of the Wild - static 45FPS mod"
|
||||
version = 2
|
||||
|
||||
[Control]
|
||||
vsyncFrequency = 45
|
@ -1,108 +0,0 @@
|
||||
[BotwFPSV208] #i.e. v1.5.0
|
||||
moduleMatches = 0x6267BFD0
|
||||
|
||||
#Cave
|
||||
codeCaveSize = 0x1C
|
||||
_multiplier = 0x0 # edit the next line to change the multiplier
|
||||
0x00000000 = .float 0.5 # = 30FPS / TARGET FPS, e.g. 30FPS / 18FPS = 1.66667
|
||||
_targetfps = 0x18 # edit the next line to change the target fps
|
||||
0x18 = .float 60
|
||||
|
||||
#"Best fence" by Rajkosto
|
||||
_fenceNeg1 = 0x00000004
|
||||
0x00000004 = add r6, r12, r0 #orig instruction we are replacing
|
||||
0x00000008 = cmpwi r6, 500 #check if less than 500 (full sync on those first frames to prevent milk water)
|
||||
0x0000000C = blt .+0x08 #skip subtract if less than
|
||||
0x00000010 = subi r6, r6, 1 #do the subtract
|
||||
0x00000014 = blr #return
|
||||
|
||||
#Extreme simplification of FPS++ by Xalphenos
|
||||
#codeChanges
|
||||
0x031FA97C = nop
|
||||
0x03793328 = nop
|
||||
0x03793334 = nop
|
||||
0x03793378 = lis r29, _multiplier@ha
|
||||
0x03793380 = lfs f0, _multiplier@L(r29)
|
||||
0x0379338C = nop
|
||||
0x03415C1C = lis r12, _multiplier@ha
|
||||
0x03415C24 = lfs f0, _multiplier@l(r12)
|
||||
0x03415C2C = nop
|
||||
0x02D90D2C = lis r10, _targetfps@ha
|
||||
0x02D90D30 = lfs f11, _targetfps@l(r10)
|
||||
0x02D90D88 = lis r10, _targetfps@ha
|
||||
0x02D90D8C = lfs f11, _targetfps@l(r10)
|
||||
|
||||
#Break all forms of frame limiting
|
||||
0x031FAAFC = bla _fenceNeg1 #Best fence (make sure GPU is never more than 1 frame ahead)
|
||||
#0x031FAAE8 = li r0, 1 #Better fence (make sure GPU is never more than 1 second? ahead)
|
||||
#0x031FAB00 = nop #skip fence (no waiting on GPU)
|
||||
0x031FACD0 = nop #disable vsync
|
||||
0x031FACF4 = nop #disable vsync loop
|
||||
|
||||
#Additional vsync dropping
|
||||
0x0309D030 = nop #disable vsync
|
||||
0x0309D054 = nop #disable vsync loop
|
||||
|
||||
#For testing, the original static mod lines (commented out by default):
|
||||
#0x031FB0C0 = li r0, 1
|
||||
#0x031FB104 = li r0, 1
|
||||
|
||||
#Cheats
|
||||
#0x02D90CC0 = fmr f29, f1 #inf stamina
|
||||
#0x02D452A4 = nop #inf hearts
|
||||
#0x02EB6758 = nop #inf arrows
|
||||
|
||||
[BotwFPSv176V192] #i.e. v1.4.0 and v1.4.1
|
||||
moduleMatches = 0xFD091F9F,0xD472D8A5
|
||||
|
||||
#Cave
|
||||
codeCaveSize = 0x1C
|
||||
_multiplier = 0x0 # edit the next line to change the multiplier
|
||||
0x00000000 = .float 0.5 # = 30FPS / TARGET FPS, e.g. 30FPS / 18FPS = 1.66667
|
||||
_targetfps = 0x18 # edit the next line to change the target fps
|
||||
0x18 = .float 60
|
||||
|
||||
#"Best fence" by Rajkosto
|
||||
_fenceNeg1 = 0x00000004
|
||||
0x00000004 = add r6, r12, r0 #orig instruction we are replacing
|
||||
0x00000008 = cmpwi r6, 500 #check if less than 500 (full sync on those first frames to prevent milk water)
|
||||
0x0000000C = blt .+0x08 #skip subtract if less than
|
||||
0x00000010 = subi r6, r6, 1 #do the subtract
|
||||
0x00000014 = blr #return
|
||||
|
||||
#Extreme simplification of FPS++ by Xalphenos
|
||||
#codeChanges
|
||||
0x031F9E80 = nop
|
||||
0x03792620 = nop
|
||||
0x0379262C = nop
|
||||
0x03792670 = lis r29, _multiplier@ha
|
||||
0x03792678 = lfs f0, _multiplier@L(r29)
|
||||
0x03792684 = nop
|
||||
0x03414EF8 = lis r12, _multiplier@ha
|
||||
0x03414F00 = lfs f0, _multiplier@l(r12)
|
||||
0x03414F08 = nop
|
||||
0x02D90790 = lis r10, _targetfps@ha
|
||||
0x02D90794 = lfs f11, _targetfps@l(r10)
|
||||
0x02D907EC = lis r10, _targetfps@ha
|
||||
0x02D907F0 = lfs f11, _targetfps@l(r10)
|
||||
|
||||
#Break all forms of frame limiting
|
||||
0x031FA000 = bla _fenceNeg1 #Best fence (make sure GPU is never more than 1 frame ahead)
|
||||
#0x031F9FEC = li r0, 1 #Better fence (make sure GPU is never more than 1 second? ahead)
|
||||
#0x031FA004 = nop #skip fence (no waiting on GPU)
|
||||
0x031FA1D4 = nop #disable vsync
|
||||
0x031FA1F8 = nop #disable vsync loop
|
||||
|
||||
#Additional vsync dropping
|
||||
0x0309C9A4 = nop #disable vsync
|
||||
0x0309C9C8 = nop #disable vsync loop
|
||||
|
||||
#For testing, the original static mod lines (commented out by default):
|
||||
#0x031FA5C4 = li r0, 1
|
||||
#0x031FA608 = li r0, 1
|
||||
|
||||
#Cheats
|
||||
#0x02D90724 = fmr f29, f1 #inf stamina
|
||||
#0x02D44D44 = nop #inf hearts
|
||||
#0x02EB61BC = nop #inf arrows
|
||||
|
@ -1,15 +0,0 @@
|
||||
This is based on an extreme simplification of the fps++ mod by Xalphenos; it
|
||||
drops dynamic FPS to get back stability. The Rajkosto "best fence" method is
|
||||
also included for performance and stability. It improves over the previous
|
||||
static fps mod because it allows ANY value as a static fps target and it
|
||||
also includes the stamina fix.
|
||||
|
||||
To use it simply grab one of the uploaded versions or edit one with these
|
||||
changes: a) rules.txt frequency and name b) divide 30 by the target FPS c) use
|
||||
the result of that calculation and the target fps in patches.txt.
|
||||
|
||||
Disclaimer: this is different from the static FPS mod ported recently. The main
|
||||
advantage of this one is that it allows ANY static FPS instead of only 60, 30,
|
||||
20.. and it also includes the stamina fix.
|
||||
|
||||
epigramx
|
@ -1,7 +0,0 @@
|
||||
[Definition]
|
||||
titleIds = 00050000101C9300,00050000101C9400,00050000101C9500
|
||||
name = "The Legend of Zelda: Breath of the Wild - static 60FPS mod"
|
||||
version = 2
|
||||
|
||||
[Control]
|
||||
vsyncFrequency = 60
|
@ -1,12 +1,17 @@
|
||||
<?php
|
||||
$targetfps = $argv[1];
|
||||
$divisor = 30/$targetfps
|
||||
?>
|
||||
[BotwFPSV208] #i.e. v1.5.0
|
||||
moduleMatches = 0x6267BFD0
|
||||
|
||||
#Cave
|
||||
codeCaveSize = 0x1C
|
||||
_multiplier = 0x0 # edit the next line to change the multiplier
|
||||
0x00000000 = .float 1.00 # = 30FPS / TARGET FPS, e.g. 30FPS / 18FPS = 1.66667
|
||||
|
||||
_divisor = 0x0 # edit the next line to change the divisor
|
||||
0x00000000 = .float <?=$divisor?> # = 30FPS / TARGET FPS, e.g. 30FPS / 18FPS = 1.66667
|
||||
_targetfps = 0x18 # edit the next line to change the target fps
|
||||
0x18 = .float 30
|
||||
0x18 = .float <?=$targetfps?>
|
||||
|
||||
#"Best fence" by Rajkosto
|
||||
_fenceNeg1 = 0x00000004
|
||||
@ -21,11 +26,11 @@ _fenceNeg1 = 0x00000004
|
||||
0x031FA97C = nop
|
||||
0x03793328 = nop
|
||||
0x03793334 = nop
|
||||
0x03793378 = lis r29, _multiplier@ha
|
||||
0x03793380 = lfs f0, _multiplier@L(r29)
|
||||
0x03793378 = lis r29, _divisor@ha
|
||||
0x03793380 = lfs f0, _divisor@L(r29)
|
||||
0x0379338C = nop
|
||||
0x03415C1C = lis r12, _multiplier@ha
|
||||
0x03415C24 = lfs f0, _multiplier@l(r12)
|
||||
0x03415C1C = lis r12, _divisor@ha
|
||||
0x03415C24 = lfs f0, _divisor@l(r12)
|
||||
0x03415C2C = nop
|
||||
0x02D90D2C = lis r10, _targetfps@ha
|
||||
0x02D90D30 = lfs f11, _targetfps@l(r10)
|
||||
@ -57,10 +62,11 @@ moduleMatches = 0xFD091F9F,0xD472D8A5
|
||||
|
||||
#Cave
|
||||
codeCaveSize = 0x1C
|
||||
_multiplier = 0x0 # edit the next line to change the multiplier
|
||||
0x00000000 = .float 1.00 # = 30FPS / TARGET FPS, e.g. 30FPS / 18FPS = 1.66667
|
||||
|
||||
_divisor = 0x0 # edit the next line to change the divisor
|
||||
0x00000000 = .float <?=$divisor?> # = 30FPS / TARGET FPS, e.g. 30FPS / 18FPS = 1.66667
|
||||
_targetfps = 0x18 # edit the next line to change the target fps
|
||||
0x18 = .float 30
|
||||
0x18 = .float <?=$targetfps?>
|
||||
|
||||
#"Best fence" by Rajkosto
|
||||
_fenceNeg1 = 0x00000004
|
||||
@ -75,11 +81,11 @@ _fenceNeg1 = 0x00000004
|
||||
0x031F9E80 = nop
|
||||
0x03792620 = nop
|
||||
0x0379262C = nop
|
||||
0x03792670 = lis r29, _multiplier@ha
|
||||
0x03792678 = lfs f0, _multiplier@L(r29)
|
||||
0x03792670 = lis r29, _divisor@ha
|
||||
0x03792678 = lfs f0, _divisor@L(r29)
|
||||
0x03792684 = nop
|
||||
0x03414EF8 = lis r12, _multiplier@ha
|
||||
0x03414F00 = lfs f0, _multiplier@l(r12)
|
||||
0x03414EF8 = lis r12, _divisor@ha
|
||||
0x03414F00 = lfs f0, _divisor@l(r12)
|
||||
0x03414F08 = nop
|
||||
0x02D90790 = lis r10, _targetfps@ha
|
||||
0x02D90794 = lfs f11, _targetfps@l(r10)
|
18
Source/BreathOfTheWild_StaticFPS/readme.txt
Normal file
18
Source/BreathOfTheWild_StaticFPS/readme.txt
Normal file
@ -0,0 +1,18 @@
|
||||
This is based on an extreme simplification of the fps++ mod by Xalphenos; it
|
||||
drops dynamic FPS to prevent graphics judder. The Rajkosto "best fence" method
|
||||
is also included for performance and stability. Judder was easily noticeable
|
||||
when Link paraglides; the caveat is that the user must pick a target FPS that
|
||||
they can maintain.
|
||||
|
||||
It improves over previous static mods in that it allows ANY value as a
|
||||
static fps target and it includes the stamina fix.
|
||||
|
||||
To use it simply grab one of the provided versions or edit one with these
|
||||
changes: a) rules.txt frequency and name b) divide 30 by the target FPS c) use
|
||||
the result of that calculation and the target fps in patches.txt.
|
||||
|
||||
This readme was derived from a static <?=$argv[1] ?>FPS mod. Additional FPS targets
|
||||
and discussion are at https://forum.cemu.info/showthread.php/421. If you do
|
||||
know how to use build.sh at Slashie's repo, it supports arbitrary targets.
|
||||
|
||||
epigramx
|
7
Source/BreathOfTheWild_StaticFPS/rules.txt
Normal file
7
Source/BreathOfTheWild_StaticFPS/rules.txt
Normal file
@ -0,0 +1,7 @@
|
||||
[Definition]
|
||||
titleIds = 00050000101C9300,00050000101C9400,00050000101C9500
|
||||
name = "The Legend of Zelda: Breath of the Wild - static <?=$argv[1] ?>FPS mod"
|
||||
version = 2
|
||||
|
||||
[Control]
|
||||
vsyncFrequency = <?=$argv[1] ?>
|
20
build.sh
20
build.sh
@ -108,6 +108,23 @@ std_respack () {
|
||||
done
|
||||
}
|
||||
|
||||
mod_onearg () {
|
||||
params=( "$@" )
|
||||
subparams=( "${params[@]:1}" )
|
||||
mod_folder="${params[0]}"
|
||||
|
||||
echo -e "${GREEN}[Building] ${BCYAN}$mod_folder ${NC}with arguments: ${subparams[@]}"
|
||||
for arrg in "${subparams[@]}"
|
||||
do
|
||||
inFolder="Source/$mod_folder"
|
||||
|
||||
outFolder="Modifications/${mod_folder}_${arrg}"
|
||||
|
||||
#echo "${arrg} inFolder: $inFolder outFolder: $outFolder"
|
||||
build_dir "$inFolder" "$outFolder" "$arrg"
|
||||
done
|
||||
}
|
||||
|
||||
res16by9=( "360p" "480p" "540p" "720p" "900p" "1080p" "1440p" "1800p" "2160p" "2880p" "4320p" "5760p" )
|
||||
res21by9=( "540p219" "720p219" "900p219" "1080p219" "1440p219" "1800p219" "2160p219" "2880p219" "4320p219" "5760p219" )
|
||||
res48by9=( "360p489" "480p489" "540p489" "720p489" "900p489" "1080p489" "1440p489" "1800p489" "2160p489" "2880p489" "4320p489" "5760p489" )
|
||||
@ -196,4 +213,7 @@ std_respack "WipeoutCreate" "${res16by9[@]/$just720p}"
|
||||
std_respack "Wonderful101" "${res16by9[@]/$just720p}"
|
||||
std_respack "WoollyWorld" "${res16by9[@]/$just720p}" "${res21by9[@]}" "${res48by9[@]}"
|
||||
std_respack "XenobladeX" "${res16by9[@]/$just720p}" "${res21by9[@]}" "${res48by9[@]}"
|
||||
|
||||
mod_onearg "BreathOfTheWild_StaticFPS" 30 45 60
|
||||
|
||||
echo -e "${NC}"
|
||||
|
Loading…
Reference in New Issue
Block a user