From 590daf530480e14fac27880482ba500ce117e12c Mon Sep 17 00:00:00 2001 From: Crementif <26669564+Crementif@users.noreply.github.com> Date: Sun, 7 Apr 2019 14:34:38 +0200 Subject: [PATCH] [BotW] Add central fence method pack, change ordering Should be clear now which packs are required. Also, gone with the multiple fence skip packs. Instead, there's now a confusing mess for devs to sort out. --- .../BOTW FPS2.2/rules.txt | 30 ------- .../CPU Occlusion Query/rules.txt | 4 +- .../patches.txt | 0 .../readme.txt} | 6 +- .../Dynamic Gamespeed/rules.txt | 30 +++++++ .../Fence Method/patches.txt | 81 +++++++++++++++++++ .../Fence Method/rules.txt | 18 +++++ .../FenceBest/patches.txt | 30 ------- .../BreathOfTheWild_FPS++/FenceBest/rules.txt | 6 -- .../FenceBetter/patches.txt | 11 --- .../FenceBetter/rules.txt | 6 -- .../FenceSkip/patches.txt | 11 --- .../BreathOfTheWild_FPS++/FenceSkip/rules.txt | 6 -- .../{vsync Control => Limit FPS}/rules.txt | 6 +- 14 files changed, 137 insertions(+), 108 deletions(-) delete mode 100644 Mods/BreathOfTheWild_FPS++/BOTW FPS2.2/rules.txt rename Mods/BreathOfTheWild_FPS++/{BOTW FPS2.2 => Dynamic Gamespeed}/patches.txt (100%) rename Mods/BreathOfTheWild_FPS++/{BOTW FPS2.2/Readme.txt => Dynamic Gamespeed/readme.txt} (86%) create mode 100644 Mods/BreathOfTheWild_FPS++/Dynamic Gamespeed/rules.txt create mode 100644 Mods/BreathOfTheWild_FPS++/Fence Method/patches.txt create mode 100644 Mods/BreathOfTheWild_FPS++/Fence Method/rules.txt delete mode 100644 Mods/BreathOfTheWild_FPS++/FenceBest/patches.txt delete mode 100644 Mods/BreathOfTheWild_FPS++/FenceBest/rules.txt delete mode 100644 Mods/BreathOfTheWild_FPS++/FenceBetter/patches.txt delete mode 100644 Mods/BreathOfTheWild_FPS++/FenceBetter/rules.txt delete mode 100644 Mods/BreathOfTheWild_FPS++/FenceSkip/patches.txt delete mode 100644 Mods/BreathOfTheWild_FPS++/FenceSkip/rules.txt rename Mods/BreathOfTheWild_FPS++/{vsync Control => Limit FPS}/rules.txt (74%) diff --git a/Mods/BreathOfTheWild_FPS++/BOTW FPS2.2/rules.txt b/Mods/BreathOfTheWild_FPS++/BOTW FPS2.2/rules.txt deleted file mode 100644 index e3299fed..00000000 --- a/Mods/BreathOfTheWild_FPS++/BOTW FPS2.2/rules.txt +++ /dev/null @@ -1,30 +0,0 @@ -[Definition] -titleIds = 00050000101C9300,00050000101C9400,00050000101C9500 -name = Dynamic (FPS++) -path = "The Legend of Zelda: Breath of the Wild/Mods/FPS++/2.2Testing" -description = Important: Don't enable Static FPS while having FPS++ also enabled! This pack won't work without Cemuhook, make sure to install that! This pack only works when you've properly updated your game (we always recommend the latest updates). Keep in mind that going above 30fps will bring game bugs, so you might want to use the "30FPS" preset. -version = 3 - -[Preset] -name = 32 Frames Averaged -$amount_of_FPS_averaged = 32 - -[Preset] -name = 16 Frames Averaged -$amount_of_FPS_averaged = 16 - -[Preset] -name = 8 Frames Averaged -$amount_of_FPS_averaged = 8 - -[Preset] -name = 6 Frames Averaged -$amount_of_FPS_averaged = 6 - -[Preset] -name = 4 Frames Averaged -$amount_of_FPS_averaged = 4 - -[Preset] -name = 3 Frames Averaged -$amount_of_FPS_averaged = 3 \ No newline at end of file diff --git a/Mods/BreathOfTheWild_FPS++/CPU Occlusion Query/rules.txt b/Mods/BreathOfTheWild_FPS++/CPU Occlusion Query/rules.txt index 12f017c5..cbd81bf5 100644 --- a/Mods/BreathOfTheWild_FPS++/CPU Occlusion Query/rules.txt +++ b/Mods/BreathOfTheWild_FPS++/CPU Occlusion Query/rules.txt @@ -1,6 +1,6 @@ [Definition] titleIds = 00050000101C9300,00050000101C9400,00050000101C9500 name = CPU Occlusion Query -path = "The Legend of Zelda: Breath of the Wild/Mods/FPS++/CPU Occlusion Query" -description = Changes occlusion querys from gpu type to cpu type. Fixes nvidia npc "ai stutter" when full sync at gx2drawdone is disabled. Does not fix camera rune or random crashes. Use lwzx workaround for random crash fix if you disable drawdone. +path = "The Legend of Zelda: Breath of the Wild/Mods/FPS++/NPC Stutter Fix (CPU Occlusion Query)" +description = Changes occlusion queries from GPU to CPU type. This is a workaround for the NPC or creatures stuttering at a distance when full sync at GX2DrawDone is disabled. If you disable that option for extra FPS, you will need to enable the LWZX workaround to fix (most) crashes if you disable this. version = 3 diff --git a/Mods/BreathOfTheWild_FPS++/BOTW FPS2.2/patches.txt b/Mods/BreathOfTheWild_FPS++/Dynamic Gamespeed/patches.txt similarity index 100% rename from Mods/BreathOfTheWild_FPS++/BOTW FPS2.2/patches.txt rename to Mods/BreathOfTheWild_FPS++/Dynamic Gamespeed/patches.txt diff --git a/Mods/BreathOfTheWild_FPS++/BOTW FPS2.2/Readme.txt b/Mods/BreathOfTheWild_FPS++/Dynamic Gamespeed/readme.txt similarity index 86% rename from Mods/BreathOfTheWild_FPS++/BOTW FPS2.2/Readme.txt rename to Mods/BreathOfTheWild_FPS++/Dynamic Gamespeed/readme.txt index 1c165d8f..589941f2 100644 --- a/Mods/BreathOfTheWild_FPS++/BOTW FPS2.2/Readme.txt +++ b/Mods/BreathOfTheWild_FPS++/Dynamic Gamespeed/readme.txt @@ -1,4 +1,4 @@ -Since this work isn't wholy mine anymore I feel it needs a readme. -Thanks to the contributors Crementif and EpigramX and as always Rajkosto for the input early on and for making it possible to begin with. Also thanks to the Cemu dev team for creating such a fun emulator. They recently added a debugger to aid in projects like this and I can't wait to try it out. +Since this work isn't wholy mine anymore I feel it needs a readme. +Thanks to the contributors Crementif and EpigramX and as always Rajkosto for the input early on and for making it possible to begin with. Also thanks to the Cemu dev team for creating such a fun emulator. They recently added a debugger to aid in projects like this and I can't wait to try it out. -Credits for the Arrow fix go to EpigramX and the initial porting of it to fps++ by Crementif. It's always nice to see people contribute to make something better. I fully welcome others messing around with this and have added comments to all the original code in hope that it is easier to understand. But I suck at comments as much as I suck at code. If you have questions about patching feel free to ask me on discord. I would like to avoid situations where a whole bunch of lines are copy pasted into fps++, where 90% of them don't do anything,claiming it fixes things it doesnt. And fragmenting the user base with regards to which fps++ they should use. \ No newline at end of file +Credits for the Arrow fix go to EpigramX and the initial porting of it to fps++ by Crementif. It's always nice to see people contribute to make something better. I fully welcome others messing around with this and have added comments to all the original code in hope that it is easier to understand. But I suck at comments as much as I suck at code. If you have questions about patching feel free to ask me on discord. I would like to avoid situations where a whole bunch of lines are copy pasted into fps++, where 90% of them don't do anything,claiming it fixes things it doesnt. And fragmenting the user base with regards to which fps++ they should use. \ No newline at end of file diff --git a/Mods/BreathOfTheWild_FPS++/Dynamic Gamespeed/rules.txt b/Mods/BreathOfTheWild_FPS++/Dynamic Gamespeed/rules.txt new file mode 100644 index 00000000..95c6aad9 --- /dev/null +++ b/Mods/BreathOfTheWild_FPS++/Dynamic Gamespeed/rules.txt @@ -0,0 +1,30 @@ +[Definition] +titleIds = 00050000101C9300,00050000101C9400,00050000101C9500 +name = Dynamic Gamespeed +path = "The Legend of Zelda: Breath of the Wild/Mods/FPS++/Dynamic Gamespeed (Required)" +description = DON'T USE STATIC FPS WITH FPS++! Don't forget to set the FPS limit if you want to exceed 30 FPS. Lowering the amount of averaged frames, how more reactive the gamespeed becomes to your FPS. +version = 3 + +[Preset] +name = 32 Frames Averaged +$amount_of_FPS_averaged = 32 + +[Preset] +name = 16 Frames Averaged +$amount_of_FPS_averaged = 16 + +[Preset] +name = 8 Frames Averaged +$amount_of_FPS_averaged = 8 + +[Preset] +name = 6 Frames Averaged +$amount_of_FPS_averaged = 6 + +[Preset] +name = 4 Frames Averaged +$amount_of_FPS_averaged = 4 + +[Preset] +name = 3 Frames Averaged +$amount_of_FPS_averaged = 3 \ No newline at end of file diff --git a/Mods/BreathOfTheWild_FPS++/Fence Method/patches.txt b/Mods/BreathOfTheWild_FPS++/Fence Method/patches.txt new file mode 100644 index 00000000..103c6f60 --- /dev/null +++ b/Mods/BreathOfTheWild_FPS++/Fence Method/patches.txt @@ -0,0 +1,81 @@ +[BotwFenceV208] +moduleMatches = 0x6267BFD0 + +# Code Cave +codeCaveSize = 0x50 + +# Fence Method Value +_fenceMethod = 0x0000000 +0x0000000 = .int $fenceMethod + +# Performance Fence method + +_conditionalPerformanceFence = 0x0000004 +0x0000004 = lis r11, _fenceMethod@ha +0x0000008 = lwz r11, _fenceMethod@l(r11) +0x000000C = cmpwi r11, 1 +0x0000010 = beq .+0x0C +0x0000014 = li r0, 1 +0x0000018 = blr +0x000001C = lwz r0, 0x388(r31) +0x0000020 = blr + +# Accuracy and Skip Fence methods + +_conditionalAccuracyAndSkipFence = 0x0000024 +0x0000024 = lis r5, _fenceMethod@ha +0x0000028 = lwz r11, _fenceMethod@l(r5) +0x000002C = cmpwi r11, 2 +0x0000030 = li r5, 6 +0x0000034 = add r6, r12, r0 +0x0000038 = bne .+0x10 +0x000003C = cmpwi r6, 500 +0x0000040 = blt .+0x08 +0x0000044 = subi r6, r6, 1 +0x0000048 = cmpwi r11, 3 +0x000004C = blr + +0x31FAAE8 = bla _conditionalPerformanceFence +0x31FAAF8 = bla _conditionalAccuracyAndSkipFence +0x31FAAFC = beq .+0x08 + +[BotwFenceV176V192] +moduleMatches = 0xFD091F9F, 0xD472D8A5 + +# Code Cave +codeCaveSize = 0x50 + +# Fence Method Value +_fenceMethod = 0x0000000 +0x0000000 = .int $fenceMethod + +# Performance Fence method + +_conditionalPerformanceFence = 0x0000004 +0x0000004 = lis r11, _fenceMethod@ha +0x0000008 = lwz r11, _fenceMethod@l(r11) +0x000000C = cmpwi r11, 1 +0x0000010 = beq .+0x0C +0x0000014 = li r0, 1 +0x0000018 = blr +0x000001C = lwz r0, 0x388(r31) +0x0000020 = blr + +# Accuracy and Skip Fence methods + +_conditionalAccuracyAndSkipFence = 0x0000024 +0x0000024 = lis r5, _fenceMethod@ha +0x0000028 = lwz r11, _fenceMethod@l(r5) +0x000002C = cmpwi r11, 2 +0x0000030 = li r5, 6 +0x0000034 = add r6, r12, r0 +0x0000038 = bne .+0x10 +0x000003C = cmpwi r6, 500 +0x0000040 = blt .+0x08 +0x0000044 = subi r6, r6, 1 +0x0000048 = cmpwi r11, 3 +0x000004C = blr + +0x31F9FEC = bla _conditionalPerformanceFence +0x31F9FFC = bla _conditionalAccuracyAndSkipFence +0x31FA000 = beq .+0x08 \ No newline at end of file diff --git a/Mods/BreathOfTheWild_FPS++/Fence Method/rules.txt b/Mods/BreathOfTheWild_FPS++/Fence Method/rules.txt new file mode 100644 index 00000000..b3c119e8 --- /dev/null +++ b/Mods/BreathOfTheWild_FPS++/Fence Method/rules.txt @@ -0,0 +1,18 @@ +[Definition] +titleIds = 00050000101C9300,00050000101C9400,00050000101C9500 +name = Fence Method +path = "The Legend of Zelda: Breath of the Wild/Mods/FPS++/Fence Method (Required)" +description = Performance fence gives better performance with some CPU's and some (lower) resolutions. Accurate fence likely solves all of the milk water. Fence skip will likely cause milk water. +version = 3 + +[Preset] +name = Performance Fence +$fenceMethod:int = 1 + +[Preset] +name = Accurate Fence +$fenceMethod:int = 2 + +[Preset] +name = Fence Skip +$fenceMethod:int = 3 \ No newline at end of file diff --git a/Mods/BreathOfTheWild_FPS++/FenceBest/patches.txt b/Mods/BreathOfTheWild_FPS++/FenceBest/patches.txt deleted file mode 100644 index 000221f0..00000000 --- a/Mods/BreathOfTheWild_FPS++/FenceBest/patches.txt +++ /dev/null @@ -1,30 +0,0 @@ -[BotwFPSV208] -moduleMatches = 0x6267BFD0 -#cave -codeCaveSize = 0x14 - -_fenceNeg1 = 0x00000000 -0x00000000 = add r6, r12, r0 #orig instruction we are replacing -0x00000004 = cmpwi r6, 500 #check if less than 500 (full sync on those first frames to prevent milk water) -0x00000008 = blt .+0x08 #skip subtract if less than -0x0000000C = subi r6, r6, 1 #do the subtract -0x00000010 = blr #return - -#code changes -0x031FAAFC = bla _fenceNeg1 ;Best fence (make sure GPU is never more than 1 frame ahead) - -[BotwFPSv176V192] -moduleMatches = 0xFD091F9F, 0xD472D8A5 - -#cave -codeCaveSize = 0x14 - -_fenceNeg1 = 0x00000000 -0x00000000 = add r6, r12, r0 #orig instruction we are replacing -0x00000004 = cmpwi r6, 500 #check if less than 500 (full sync on those first frames to prevent milk water) -0x00000008 = blt .+0x08 #skip subtract if less than -0x0000000C = subi r6, r6, 1 #do the subtract -0x00000010 = blr - -#code changes -0x031FA000 = bla _fenceNeg1 \ No newline at end of file diff --git a/Mods/BreathOfTheWild_FPS++/FenceBest/rules.txt b/Mods/BreathOfTheWild_FPS++/FenceBest/rules.txt deleted file mode 100644 index 936bf18b..00000000 --- a/Mods/BreathOfTheWild_FPS++/FenceBest/rules.txt +++ /dev/null @@ -1,6 +0,0 @@ -[Definition] -titleIds = 00050000101C9300,00050000101C9400,00050000101C9500 -name = Best Fence -path = "The Legend of Zelda: Breath of the Wild/Mods/FPS++/Best Fence" -description = Subtract 1 from fence value. Original default option that is least likely to cause milk water. No difference from best on high end systems. Incompatible with other fence options. -version = 3 diff --git a/Mods/BreathOfTheWild_FPS++/FenceBetter/patches.txt b/Mods/BreathOfTheWild_FPS++/FenceBetter/patches.txt deleted file mode 100644 index b495dcd3..00000000 --- a/Mods/BreathOfTheWild_FPS++/FenceBetter/patches.txt +++ /dev/null @@ -1,11 +0,0 @@ -[BotwFPSV208] -moduleMatches = 0x6267BFD0 - -#code changes -0x031FAAE8 = li r0, 1 ;Better fence (make sure GPU is never more than 1 second? ahead) - -[BotwFPSv176V192] -moduleMatches = 0xFD091F9F, 0xD472D8A5 - -#code changes -0x031F9FEC = li r0, 1 \ No newline at end of file diff --git a/Mods/BreathOfTheWild_FPS++/FenceBetter/rules.txt b/Mods/BreathOfTheWild_FPS++/FenceBetter/rules.txt deleted file mode 100644 index 469819e6..00000000 --- a/Mods/BreathOfTheWild_FPS++/FenceBetter/rules.txt +++ /dev/null @@ -1,6 +0,0 @@ -[Definition] -titleIds = 00050000101C9300,00050000101C9400,00050000101C9500 -name = Better Fence -path = "The Legend of Zelda: Breath of the Wild/Mods/FPS++/Better Fence" -description = Ensure fence value is always 1. Better for lower end hardware. If you feel like you are getting framerate capped try this. -version = 3 diff --git a/Mods/BreathOfTheWild_FPS++/FenceSkip/patches.txt b/Mods/BreathOfTheWild_FPS++/FenceSkip/patches.txt deleted file mode 100644 index 3163ca4e..00000000 --- a/Mods/BreathOfTheWild_FPS++/FenceSkip/patches.txt +++ /dev/null @@ -1,11 +0,0 @@ -[BotwFPSV208] -moduleMatches = 0x6267BFD0 - -#code changes -0x031FAB00 = nop ; skip fence (no waiting on GPU) - -[BotwFPSv176V192] -moduleMatches = 0xFD091F9F, 0xD472D8A5 - -#code changes -0x031FA004 = nop \ No newline at end of file diff --git a/Mods/BreathOfTheWild_FPS++/FenceSkip/rules.txt b/Mods/BreathOfTheWild_FPS++/FenceSkip/rules.txt deleted file mode 100644 index 94592656..00000000 --- a/Mods/BreathOfTheWild_FPS++/FenceSkip/rules.txt +++ /dev/null @@ -1,6 +0,0 @@ -[Definition] -titleIds = 00050000101C9300,00050000101C9400,00050000101C9500 -name = Skip Fence -path = "The Legend of Zelda: Breath of the Wild/Mods/FPS++/Skip Fence" -description = Don't call gx2setgpufence. Most likely to cause milk water. Incompatible with other fence options. -version = 3 diff --git a/Mods/BreathOfTheWild_FPS++/vsync Control/rules.txt b/Mods/BreathOfTheWild_FPS++/Limit FPS/rules.txt similarity index 74% rename from Mods/BreathOfTheWild_FPS++/vsync Control/rules.txt rename to Mods/BreathOfTheWild_FPS++/Limit FPS/rules.txt index 8934de37..90fc15f3 100644 --- a/Mods/BreathOfTheWild_FPS++/vsync Control/rules.txt +++ b/Mods/BreathOfTheWild_FPS++/Limit FPS/rules.txt @@ -1,8 +1,8 @@ [Definition] titleIds = 00050000101C9300,00050000101C9400,00050000101C9500 -name = Vsync Control -path = "The Legend of Zelda: Breath of the Wild/Mods/FPS++/Vsync Control" -description = Select the fps you want to be your limit with FPS++ +name = Set FPS Limit +path = "The Legend of Zelda: Breath of the Wild/Mods/FPS++/Set FPS Limit (Required)" +description = Sets a cap on the FPS. If you want no gameplay bugs, use 30FPS. These bugs range from crashing after cutscenes, certain boss fights will fly away to the horizon and some physics are more intense. version = 3 [Preset]