mirror of
https://github.com/cemu-project/cemu_graphic_packs.git
synced 2024-11-22 17:49:17 +01:00
[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.
This commit is contained in:
parent
9440409e25
commit
590daf5304
@ -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
|
|
@ -1,6 +1,6 @@
|
|||||||
[Definition]
|
[Definition]
|
||||||
titleIds = 00050000101C9300,00050000101C9400,00050000101C9500
|
titleIds = 00050000101C9300,00050000101C9400,00050000101C9500
|
||||||
name = CPU Occlusion Query
|
name = CPU Occlusion Query
|
||||||
path = "The Legend of Zelda: Breath of the Wild/Mods/FPS++/CPU Occlusion Query"
|
path = "The Legend of Zelda: Breath of the Wild/Mods/FPS++/NPC Stutter Fix (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.
|
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
|
version = 3
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
Since this work isn't wholy mine anymore I feel it needs a readme.
|
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.
|
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.
|
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.
|
30
Mods/BreathOfTheWild_FPS++/Dynamic Gamespeed/rules.txt
Normal file
30
Mods/BreathOfTheWild_FPS++/Dynamic Gamespeed/rules.txt
Normal file
@ -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
|
81
Mods/BreathOfTheWild_FPS++/Fence Method/patches.txt
Normal file
81
Mods/BreathOfTheWild_FPS++/Fence Method/patches.txt
Normal file
@ -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
|
18
Mods/BreathOfTheWild_FPS++/Fence Method/rules.txt
Normal file
18
Mods/BreathOfTheWild_FPS++/Fence Method/rules.txt
Normal file
@ -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
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -1,8 +1,8 @@
|
|||||||
[Definition]
|
[Definition]
|
||||||
titleIds = 00050000101C9300,00050000101C9400,00050000101C9500
|
titleIds = 00050000101C9300,00050000101C9400,00050000101C9500
|
||||||
name = Vsync Control
|
name = Set FPS Limit
|
||||||
path = "The Legend of Zelda: Breath of the Wild/Mods/FPS++/Vsync Control"
|
path = "The Legend of Zelda: Breath of the Wild/Mods/FPS++/Set FPS Limit (Required)"
|
||||||
description = Select the fps you want to be your limit with FPS++
|
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
|
version = 3
|
||||||
|
|
||||||
[Preset]
|
[Preset]
|
Loading…
Reference in New Issue
Block a user