mirror of
https://github.com/cemu-project/cemu_graphic_packs.git
synced 2024-12-27 18:31:50 +01:00
[BotW] Major FPS++ improvements, tree/shadow draw distance, ultrawide GUI
Made by Exzap, me and Skalfate.
This commit is contained in:
parent
7a27d2fdc1
commit
39a464b65e
@ -0,0 +1,98 @@
|
||||
#version 430
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
#extension GL_ARB_separate_shader_objects : enable
|
||||
// shader 7cd338ce4c6ea935
|
||||
// Used for: Ultrawide cutscenes (when enabled)
|
||||
float aspectRatio = float(($gameWidth/$gameHeight)/($width/$height));
|
||||
float reverseAspectRatio = float(($width/$height)/($gameWidth/$gameHeight));
|
||||
|
||||
|
||||
// start of shader inputs/outputs, predetermined by Cemu. Do not touch
|
||||
#ifdef VULKAN
|
||||
#define ATTR_LAYOUT(__vkSet, __location) layout(set = __vkSet, location = __location)
|
||||
#define UNIFORM_BUFFER_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(set = __vkSet, binding = __vkLocation, std140)
|
||||
#define TEXTURE_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(set = __vkSet, binding = __vkLocation)
|
||||
#define GET_FRAGCOORD() vec4(gl_FragCoord.xy*uf_fragCoordScale.xy,gl_FragCoord.zw)
|
||||
#else
|
||||
#define ATTR_LAYOUT(__vkSet, __location) layout(location = __location)
|
||||
#define UNIFORM_BUFFER_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(binding = __glLocation, std140)
|
||||
#define TEXTURE_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(binding = __glLocation)
|
||||
#define GET_FRAGCOORD() vec4(gl_FragCoord.xy*uf_fragCoordScale,gl_FragCoord.zw)
|
||||
#endif
|
||||
#ifdef VULKAN
|
||||
layout(set = 1, binding = 1) uniform ufBlock
|
||||
{
|
||||
uniform ivec4 uf_remappedPS[1];
|
||||
uniform vec4 uf_fragCoordScale;
|
||||
};
|
||||
#else
|
||||
uniform ivec4 uf_remappedPS[1];
|
||||
uniform vec2 uf_fragCoordScale;
|
||||
#endif
|
||||
TEXTURE_LAYOUT(0, 1, 0) uniform sampler2D textureUnitPS0;
|
||||
layout(location = 0) in vec4 passParameterSem0;
|
||||
layout(location = 0) out vec4 passPixelColor0;
|
||||
// end of shader inputs/outputs
|
||||
int clampFI32(int v)
|
||||
{
|
||||
if( v == 0x7FFFFFFF )
|
||||
return floatBitsToInt(1.0);
|
||||
else if( v == 0xFFFFFFFF )
|
||||
return floatBitsToInt(0.0);
|
||||
return floatBitsToInt(clamp(intBitsToFloat(v), 0.0, 1.0));
|
||||
}
|
||||
float mul_nonIEEE(float a, float b){ if( a == 0.0 || b == 0.0 ) return 0.0; return a*b; }
|
||||
void main()
|
||||
{
|
||||
vec4 R0f = vec4(0.0);
|
||||
vec4 R127f = vec4(0.0);
|
||||
float backupReg0f, backupReg1f, backupReg2f, backupReg3f, backupReg4f;
|
||||
vec4 PV0f = vec4(0.0), PV1f = vec4(0.0);
|
||||
float PS0f = 0.0, PS1f = 0.0;
|
||||
vec4 tempf = vec4(0.0);
|
||||
float tempResultf;
|
||||
int tempResulti;
|
||||
ivec4 ARi = ivec4(0);
|
||||
bool predResult = true;
|
||||
vec3 cubeMapSTM;
|
||||
int cubeMapFaceId;
|
||||
R0f = passParameterSem0;
|
||||
R0f.xyzw = (texture(textureUnitPS0, (R0f.xy*vec2(reverseAspectRatio, 1.0))+vec2(-aspectRatio, 0.0)).xyzw);
|
||||
// 0
|
||||
backupReg0f = R0f.x;
|
||||
tempResultf = max(0.0, backupReg0f);
|
||||
tempResultf = log2(tempResultf);
|
||||
if( isinf(tempResultf) == true ) tempResultf = -3.40282347E+38F;
|
||||
PS0f = tempResultf;
|
||||
// 1
|
||||
R127f.z = mul_nonIEEE(PS0f, intBitsToFloat(uf_remappedPS[0].x));
|
||||
tempResultf = max(0.0, R0f.y);
|
||||
tempResultf = log2(tempResultf);
|
||||
if( isinf(tempResultf) == true ) tempResultf = -3.40282347E+38F;
|
||||
PS1f = tempResultf;
|
||||
// 2
|
||||
R127f.w = mul_nonIEEE(PS1f, intBitsToFloat(uf_remappedPS[0].x));
|
||||
tempResultf = max(0.0, R0f.z);
|
||||
tempResultf = log2(tempResultf);
|
||||
if( isinf(tempResultf) == true ) tempResultf = -3.40282347E+38F;
|
||||
PS0f = tempResultf;
|
||||
// 3
|
||||
R127f.x = mul_nonIEEE(PS0f, intBitsToFloat(uf_remappedPS[0].x));
|
||||
PS1f = exp2(R127f.z);
|
||||
// 4
|
||||
R0f.x = PS1f;
|
||||
PS0f = exp2(R127f.w);
|
||||
// 5
|
||||
R0f.y = PS0f;
|
||||
PS1f = exp2(R127f.x);
|
||||
// 6
|
||||
R0f.z = PS1f;
|
||||
// export
|
||||
|
||||
#if $ultrawideHUD == 1
|
||||
bool isOutsideEdges = (passParameterSem0.x > (aspectRatio/2.0f)*1.0f) && (passParameterSem0.x < ((aspectRatio/2.0f)*3.0f));
|
||||
passPixelColor0 = vec4(isOutsideEdges ? R0f.x : 0.0, isOutsideEdges ? R0f.y : 0.0, isOutsideEdges ? R0f.z : 0.0, isOutsideEdges ? R0f.w : 0.0);
|
||||
#else
|
||||
passPixelColor0 = vec4(R0f.x, R0f.y, R0f.z, R0f.w);
|
||||
#endif
|
||||
}
|
2795
src/BreathOfTheWild/Graphics/patch_GUIAspectRatio.asm
Normal file
2795
src/BreathOfTheWild/Graphics/patch_GUIAspectRatio.asm
Normal file
File diff suppressed because it is too large
Load Diff
1406
src/BreathOfTheWild/Graphics/patch_GUIScreens.asm
Normal file
1406
src/BreathOfTheWild/Graphics/patch_GUIScreens.asm
Normal file
File diff suppressed because it is too large
Load Diff
@ -3,7 +3,7 @@ titleIds = 00050000101C9300,00050000101C9400,00050000101C9500
|
||||
name = Graphics
|
||||
path = "The Legend of Zelda: Breath of the Wild/Graphics"
|
||||
description = Allows you to change the game resolution, shadow resolution and anti-aliasing.||Made by Kiri, Skalfate, rajkosto and NAVras.
|
||||
version = 6
|
||||
version = 7
|
||||
|
||||
[Default]
|
||||
$width = 1280
|
||||
@ -12,12 +12,18 @@ $gameWidth = 1280
|
||||
$gameHeight = 720
|
||||
$aspectRatioWidth = 16
|
||||
$aspectRatioHeight = 9
|
||||
$ultrawideHUD:int = 0
|
||||
$fxaa:int = 1
|
||||
$shadowRes = 1
|
||||
$subPix:int = 1.0
|
||||
$edgeThreshold:int = 0.125
|
||||
$edgeThresholdMin:int = 0.0156
|
||||
|
||||
$shadowNearbyStart = 1.0 # the starting distance should be kept at 1.0
|
||||
$shadowNearbyEnd = 1.0
|
||||
$shadowFarStart = 1.0
|
||||
$shadowFarEnd = 1.0
|
||||
|
||||
|
||||
# Aspect Ratio
|
||||
|
||||
@ -36,24 +42,28 @@ name = 21:9
|
||||
category = Aspect Ratio
|
||||
$aspectRatioWidth = 21
|
||||
$aspectRatioHeight = 9
|
||||
$ultrawideHUD:int = 1
|
||||
|
||||
[Preset]
|
||||
name = 32:9
|
||||
category = Aspect Ratio
|
||||
$aspectRatioWidth = 32
|
||||
$aspectRatioHeight = 9
|
||||
$ultrawideHUD:int = 1
|
||||
|
||||
[Preset]
|
||||
name = 32:10
|
||||
category = Aspect Ratio
|
||||
$aspectRatioWidth = 32
|
||||
$aspectRatioHeight = 10
|
||||
$ultrawideHUD:int = 1
|
||||
|
||||
[Preset]
|
||||
name = 48:9
|
||||
category = Aspect Ratio
|
||||
$aspectRatioWidth = 48
|
||||
$aspectRatioHeight = 9
|
||||
$ultrawideHUD:int = 1
|
||||
|
||||
[Preset]
|
||||
name = 4:3
|
||||
@ -427,6 +437,47 @@ name = Extreme (400%, Unstable)
|
||||
category = Shadows
|
||||
$shadowRes = 4
|
||||
|
||||
|
||||
[Preset]
|
||||
category = Shadow Draw Distance
|
||||
name = Low (Low Draw Distance, Sharp Shadows)
|
||||
$shadowNearbyEnd = 0.6
|
||||
$shadowFarStart = 0.6
|
||||
$shadowFarEnd = 0.75
|
||||
|
||||
[Preset]
|
||||
name = Medium (Lower Draw Distance, Sharper Shadows)
|
||||
category = Shadow Draw Distance
|
||||
$shadowNearbyEnd = 0.8
|
||||
$shadowFarStart = 0.8
|
||||
$shadowFarEnd = 0.9
|
||||
|
||||
[Preset]
|
||||
name = High (Default)
|
||||
category = Shadow Draw Distance
|
||||
default = 1
|
||||
|
||||
[Preset]
|
||||
name = Very High (Recommended)
|
||||
category = Shadow Draw Distance
|
||||
$shadowNearbyEnd = 1.25
|
||||
$shadowFarStart = 1.25
|
||||
$shadowFarEnd = 1.30
|
||||
|
||||
[Preset]
|
||||
name = Ultra (Higher Draw Distance, Slightly Blurrier Shadows)
|
||||
category = Shadow Draw Distance
|
||||
$shadowNearbyEnd = 1.3
|
||||
$shadowFarStart = 1.3
|
||||
$shadowFarEnd = 1.5
|
||||
|
||||
[Preset]
|
||||
name = Extreme (Higher Draw Distance, Blurry Shadows)
|
||||
category = Shadow Draw Distance
|
||||
$shadowNearbyEnd = 1.4
|
||||
$shadowFarStart = 1.4
|
||||
$shadowFarEnd = 1.55
|
||||
|
||||
# All 720p textures:
|
||||
# - 0x001=World Lighting Red8
|
||||
# - 0x005=Link and Objects Depth
|
||||
|
@ -40,4 +40,11 @@ fmuls f13, f13, f1
|
||||
blr
|
||||
|
||||
0x0313A60C = bla _setObjectDrawDistanceDivider
|
||||
0x0313A678 = bla _setObjectDrawDistanceDivider
|
||||
0x0313A678 = bla _setObjectDrawDistanceDivider
|
||||
|
||||
|
||||
; Tree billboard draw distance
|
||||
|
||||
; either one of these actually do stuff
|
||||
0x102E94D8 = .float $tree
|
||||
0x102BC438 = .float $tree
|
@ -2,12 +2,13 @@
|
||||
titleIds = 00050000101C9300,00050000101C9400,00050000101C9500
|
||||
name = Draw Distance
|
||||
path = "The Legend of Zelda: Breath of the Wild/Mods/Draw Distance"
|
||||
description = Extend the draw distance of objects and entities in the game, which will see a small performance decrease when making it higher. Lowering this will not offer more performance.|You can also make distant textures appear as higher resolution variants.||Made By Crementif.
|
||||
description = Extend the draw distance of objects and entities in the game, which will see a small performance decrease when making it higher.|Lowering this will not offer more performance.|You can also make distant textures appear as higher resolution variants.||Made By Crementif.
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
$actor = 1.0
|
||||
$object = 1.0
|
||||
$tree = 1.0
|
||||
$textureLODBias:int = 0
|
||||
|
||||
|
||||
@ -46,38 +47,73 @@ $actor = 2
|
||||
|
||||
# Objects Draw Distance
|
||||
|
||||
[Preset]
|
||||
name = Potato (0.2x)
|
||||
category = Trees, Bushes, Landscape And Other Objects
|
||||
$object = 0.2
|
||||
|
||||
[Preset]
|
||||
name = Very Low (0.5x)
|
||||
category = Trees, Bushes, Landscape And Other Objects
|
||||
$object = 0.5
|
||||
# People ran into issues with events spawning
|
||||
# [Preset]
|
||||
# name = Potato (0.2x)
|
||||
# category = Terrain, Buildings, Bushes And Other Objects
|
||||
# $object = 0.2
|
||||
#
|
||||
# [Preset]
|
||||
# name = Very Low (0.5x)
|
||||
# category = Terrain, Buildings, Bushes And Other Objects
|
||||
# $object = 0.5
|
||||
|
||||
[Preset]
|
||||
name = Low (0.75x)
|
||||
category = Trees, Bushes, Landscape And Other Objects
|
||||
category = Terrain, Buildings, Bushes And Other Objects
|
||||
$object = 0.75
|
||||
|
||||
[Preset]
|
||||
name = Medium (1x)
|
||||
category = Trees, Bushes, Landscape And Other Objects
|
||||
category = Terrain, Buildings, Bushes And Other Objects
|
||||
default = 1
|
||||
$object = 1.0
|
||||
|
||||
[Preset]
|
||||
name = High (1.25x)
|
||||
category = Trees, Bushes, Landscape And Other Objects
|
||||
category = Terrain, Buildings, Bushes And Other Objects
|
||||
$object = 1.25
|
||||
|
||||
[Preset]
|
||||
name = Ultra (1.5x, requires Extended Memory pack!)
|
||||
category = Trees, Bushes, Landscape And Other Objects
|
||||
category = Terrain, Buildings, Bushes And Other Objects
|
||||
$object = 1.5
|
||||
|
||||
|
||||
# Tree Billboard Draw Distance
|
||||
|
||||
[Preset]
|
||||
name = Potato
|
||||
category = Trees (2D Billboards)
|
||||
$tree = 1.5
|
||||
|
||||
[Preset]
|
||||
name = Low
|
||||
category = Trees (2D Billboards)
|
||||
$tree = 1.25
|
||||
|
||||
[Preset]
|
||||
name = Medium (Default)
|
||||
category = Trees (2D Billboards)
|
||||
default = 1
|
||||
$tree = 1.0
|
||||
|
||||
[Preset]
|
||||
name = High
|
||||
category = Trees (2D Billboards)
|
||||
$tree = 0.66
|
||||
|
||||
[Preset]
|
||||
name = Ultra
|
||||
category = Trees (2D Billboards)
|
||||
$tree = 0.33
|
||||
|
||||
[Preset]
|
||||
name = Extreme
|
||||
category = Trees (2D Billboards)
|
||||
$tree = 0.05
|
||||
|
||||
|
||||
# Texture LOD Bias
|
||||
|
||||
[Preset]
|
||||
|
@ -2,3 +2,5 @@ Since this work isn't wholly 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 doesn't. And fragmenting the user base with regards to which FPS++ they should use.
|
||||
|
||||
To clarify the statement above, we don't give permission for redistributing FPS++ **or parts of it** in any form unless it's done with explicit permission.
|
@ -1,96 +1,267 @@
|
||||
[BotW_ControllerScrollSpeed_V208]
|
||||
moduleMatches = 0x6267BFD0
|
||||
|
||||
.origin = codecave
|
||||
|
||||
0x03053bd4 = blr ; disable scroll speed adjustment (would require a bigger rewrite for dynamic FPS support)
|
||||
0x030BD694 = ba _ZN4sead14ControllerBase23updateDerivativeParams_Ejj ; redirect to our re-implementation
|
||||
|
||||
const_roundUpModifier:
|
||||
.float $roundUpModifier
|
||||
|
||||
averageFPS1IntInvIgnore:
|
||||
.int 0
|
||||
averageFPS1IntInvValue:
|
||||
.int 1
|
||||
|
||||
disableFastScrolling:
|
||||
.int 0
|
||||
|
||||
; The game initializes two tables for intial and repeated delay. One entry for each button (up to 32). Counts in frames.
|
||||
; This is a very imperfect fix, which is why it's an opt-in fix that's even then only enabled for those that are above 60FPS in the menus.
|
||||
|
||||
; This calculates dynamic FPS system.
|
||||
_calculateAverageFPSInt:
|
||||
lis r8, averageFPS1@ha
|
||||
lfs f0, averageFPS1@l(r8)
|
||||
lis r8, const_roundUpModifier@ha
|
||||
lfs f13, const_roundUpModifier@l(r8)
|
||||
fadds f0, f0, f13
|
||||
fctiwz f0, f0
|
||||
lis r8, averageFPS1IntInvIgnore@ha
|
||||
stfd f0, averageFPS1IntInvIgnore@l(r8)
|
||||
li r8, 0
|
||||
lis r10, disableFastScrolling@ha
|
||||
stw r8, disableFastScrolling@l(r10)
|
||||
lis r8, averageFPS1IntInvValue@ha
|
||||
lwz r10, averageFPS1IntInvValue@l(r8)
|
||||
cmpwi r10, $cursorFixAbove
|
||||
ble disabledFix
|
||||
|
||||
lis r8, averageFPS1IntInvValue@ha
|
||||
stw r10, averageFPS1IntInvValue@l(r8)
|
||||
li r8, 1
|
||||
lis r10, disableFastScrolling@ha
|
||||
stw r8, disableFastScrolling@l(r10)
|
||||
add r8, r29, r6
|
||||
blr
|
||||
|
||||
disabledFix:
|
||||
li r8, 1
|
||||
lis r10, averageFPS1IntInvValue@ha
|
||||
stw r8, averageFPS1IntInvValue@l(r10)
|
||||
add r8, r29, r6
|
||||
blr
|
||||
|
||||
_scaleRepeatInputDelay:
|
||||
lis r7, averageFPS1IntInvValue@ha
|
||||
lwz r7, averageFPS1IntInvValue@l(r7)
|
||||
lbz r10, 0xC8(r8) ; read repeat delay (in frames) from table
|
||||
mullw r10, r10, r7
|
||||
blr
|
||||
|
||||
_scaleInitialInputDelay:
|
||||
lis r7, averageFPS1IntInvValue@ha
|
||||
lwz r7, averageFPS1IntInvValue@l(r7)
|
||||
lbz r8, 0xA8(r4) ; read initial delay (in frames) from table
|
||||
mullw r8, r8, r7
|
||||
lwzx r7, r9, r11
|
||||
blr
|
||||
|
||||
; Patch sead::ControllerBase::updateDerivativeParams_
|
||||
0x030BD76C = bla _calculateAverageFPSInt
|
||||
0x030bd770 = bla _scaleRepeatInputDelay
|
||||
0x030BD77C = nop
|
||||
0x030bd784 = bla _scaleInitialInputDelay
|
||||
|
||||
|
||||
; Disable fast scrolling function
|
||||
_disableFastScrolling:
|
||||
lis r12, disableFastScrolling@ha
|
||||
lwz r10, disableFastScrolling@l(r12)
|
||||
cmpwi r10, 1
|
||||
beq disableFastScrollingPath
|
||||
|
||||
lis r12, 4
|
||||
addi r12, r12, 0x68C
|
||||
cmpwi r6, 0
|
||||
add r12, r3, r12
|
||||
blr
|
||||
|
||||
disableFastScrollingPath:
|
||||
mtlr r9
|
||||
blr
|
||||
|
||||
0x03053AF8 = mflr r9
|
||||
0x03053AFC = bla _disableFastScrolling
|
||||
0x03053B00 = mtlr r9
|
||||
0x03053B04 = nop
|
||||
0x10327D60 = scrollSpeed:
|
||||
; .float 1.0
|
||||
_ZN4sead14ControllerBase21createStickCrossMask_Ev:
|
||||
stwu r1,-16(r1)
|
||||
stw r31,12(r1)
|
||||
mr r31,r1
|
||||
lwz r10,252(r3)
|
||||
li r9,0
|
||||
cmpwi r10,0
|
||||
BLT _87c9cb495aa50099_L2
|
||||
li r9,15
|
||||
slw r9,r9,r10
|
||||
_87c9cb495aa50099_L2:
|
||||
lwz r8,256(r3)
|
||||
cmpwi r8,0
|
||||
BLT _87c9cb495aa50099_L3
|
||||
li r10,15
|
||||
slw r10,r10,r8
|
||||
or r9,r9,r10
|
||||
_87c9cb495aa50099_L3:
|
||||
mr r3,r9
|
||||
addi r11,r31,16
|
||||
lwz r31,-4(r11)
|
||||
mr r1,r11
|
||||
blr
|
||||
_ZN4sead14ControllerBase23updateDerivativeParams_Ejj:
|
||||
stwu r1,-128(r1)
|
||||
mflr r0
|
||||
stw r0,132(r1)
|
||||
stfd f30,112(r1)
|
||||
stfd f31,120(r1)
|
||||
stw r19,60(r1)
|
||||
stw r20,64(r1)
|
||||
stw r21,68(r1)
|
||||
stw r22,72(r1)
|
||||
stw r23,76(r1)
|
||||
stw r24,80(r1)
|
||||
stw r25,84(r1)
|
||||
stw r26,88(r1)
|
||||
stw r27,92(r1)
|
||||
stw r28,96(r1)
|
||||
stw r29,100(r1)
|
||||
stw r30,104(r1)
|
||||
stw r31,108(r1)
|
||||
mr r31,r1
|
||||
mr r30,r3
|
||||
mr r29,r4
|
||||
mr r24,r5
|
||||
lwz r6,252(r3)
|
||||
cmpwi r6,0
|
||||
BLT _87c9cb495aa50099_L7
|
||||
addi r5,r30,280
|
||||
lfs f1,232(r30)
|
||||
lfs f2,240(r30)
|
||||
lis r9,0x30b
|
||||
ori r9,r9,53900
|
||||
mtctr r9
|
||||
bctrl
|
||||
mr r28,r3
|
||||
lwz r6,256(r30)
|
||||
cmpwi r6,0
|
||||
BLT _87c9cb495aa50099_L8
|
||||
_87c9cb495aa50099_L25:
|
||||
mr r3,r30
|
||||
mr r4,r29
|
||||
addi r5,r30,288
|
||||
lfs f1,236(r30)
|
||||
lfs f2,244(r30)
|
||||
lis r9,0x30b
|
||||
ori r9,r9,53900
|
||||
mtctr r9
|
||||
bctrl
|
||||
or r28,r28,r3
|
||||
lwz r8,252(r30)
|
||||
li r9,0
|
||||
cmpwi r8,0
|
||||
BLT _87c9cb495aa50099_L9
|
||||
_87c9cb495aa50099_L23:
|
||||
li r10,15
|
||||
slw r9,r10,r8
|
||||
_87c9cb495aa50099_L9:
|
||||
lwz r8,256(r30)
|
||||
cmpwi r8,0
|
||||
BLT _87c9cb495aa50099_L10
|
||||
li r10,15
|
||||
slw r10,r10,r8
|
||||
or r9,r9,r10
|
||||
.align 4
|
||||
_87c9cb495aa50099_L10:
|
||||
lwz r10,268(r30)
|
||||
andc r10,r10,r9
|
||||
or r9,r10,r28
|
||||
stw r9,268(r30)
|
||||
andc r10,r29,r9
|
||||
stw r10,4(r30)
|
||||
andc r9,r9,r29
|
||||
stw r9,0(r30)
|
||||
li r9,0
|
||||
stw r9,8(r30)
|
||||
lis r9,averageFPS30@ha
|
||||
lfs f31,averageFPS30@l(r9)
|
||||
lis r9,scrollSpeed@ha
|
||||
lfs f30,scrollSpeed@l(r9)
|
||||
lwz r9,248(r30)
|
||||
cmpwi r9,0
|
||||
BEQ _87c9cb495aa50099_L11
|
||||
addi r27,r30,199
|
||||
addi r28,r30,104
|
||||
li r29,0
|
||||
lis r23,_87c9cb495aa50099_LC0@ha
|
||||
lis r26,_87c9cb495aa50099_LC1@ha
|
||||
li r21,1
|
||||
li r25,0
|
||||
_87c9cb495aa50099_L18:
|
||||
lbzu r8,1(r27)
|
||||
lbz r10,-32(r27)
|
||||
lwz r9,268(r30)
|
||||
srw r9,r9,r29
|
||||
andi. r7,r9,1
|
||||
BNE cr0, _87c9cb495aa50099_L12
|
||||
sth r25,-64(r28)
|
||||
sth r25,0(r28)
|
||||
b _87c9cb495aa50099_L13
|
||||
_87c9cb495aa50099_L12:
|
||||
mr r20,r28
|
||||
lfs f0,_87c9cb495aa50099_LC0@l(r23)
|
||||
fdivs f0,f0,f31
|
||||
fmuls f0,f0,f30
|
||||
lfs f12,_87c9cb495aa50099_LC1@l(r26)
|
||||
fcmpu f0,f12
|
||||
cror 30,29,30
|
||||
BEQ _87c9cb495aa50099_L14
|
||||
fctiwz f0,f0
|
||||
stfd f0,8(r31)
|
||||
lwz r7,12(r31)
|
||||
b _87c9cb495aa50099_L15
|
||||
_87c9cb495aa50099_L14:
|
||||
lfs f12,_87c9cb495aa50099_LC1@l(r26)
|
||||
fsubs f0,f0,f12
|
||||
fctiwz f0,f0
|
||||
stfd f0,16(r31)
|
||||
lwz r7,20(r31)
|
||||
addis r7,r7,0x8000
|
||||
_87c9cb495aa50099_L15:
|
||||
lhz r9,0(r20)
|
||||
add r9,r7,r9
|
||||
rlwinm r9, r9, 0, 16, 31
|
||||
cmplwi r9,1091
|
||||
BGT _87c9cb495aa50099_L16
|
||||
sth r9,0(r20)
|
||||
b _87c9cb495aa50099_L13
|
||||
_87c9cb495aa50099_L16:
|
||||
addi r9,r9,-1092
|
||||
sth r9,0(r20)
|
||||
lhz r19,-64(r20)
|
||||
cmpwi r8,0
|
||||
BEQ _87c9cb495aa50099_L17
|
||||
cmplw r10,r19
|
||||
BGT _87c9cb495aa50099_L17
|
||||
subf r10,r10,r19
|
||||
divwu r9,r10,r8
|
||||
mullw r8,r9,r8
|
||||
cmpw r10,r8
|
||||
BNE _87c9cb495aa50099_L17
|
||||
slw r9,r21,r29
|
||||
lwz r10,8(r30)
|
||||
or r9,r10,r9
|
||||
stw r9,8(r30)
|
||||
_87c9cb495aa50099_L17:
|
||||
addi r19,r19,1
|
||||
sth r19,-64(r20)
|
||||
_87c9cb495aa50099_L13:
|
||||
addi r29,r29,1
|
||||
addi r28,r28,2
|
||||
lwz r9,248(r30)
|
||||
cmpw r29,r9
|
||||
BLT _87c9cb495aa50099_L18
|
||||
_87c9cb495aa50099_L11:
|
||||
cmpwi r24,0
|
||||
BNE _87c9cb495aa50099_L19
|
||||
lwz r9,12(r30)
|
||||
andi. r8,r9,1
|
||||
BEQ cr0, _87c9cb495aa50099_L20
|
||||
rlwinm r9,r9,0,30,28
|
||||
ori r9,r9,2
|
||||
stw r9,12(r30)
|
||||
b _87c9cb495aa50099_L21
|
||||
_87c9cb495aa50099_L24:
|
||||
ori r10,r10,4
|
||||
stw r10,12(r30)
|
||||
lfs f0,272(r30)
|
||||
fctiwz f0,f0
|
||||
stfd f0,24(r31)
|
||||
lwz r9,28(r31)
|
||||
stw r9,16(r30)
|
||||
lfs f0,276(r30)
|
||||
fctiwz f0,f0
|
||||
stfd f0,32(r31)
|
||||
lwz r9,36(r31)
|
||||
stw r9,20(r30)
|
||||
b _87c9cb495aa50099_L6
|
||||
_87c9cb495aa50099_L20:
|
||||
li r9,0
|
||||
stw r9,12(r30)
|
||||
_87c9cb495aa50099_L21:
|
||||
lfs f0,272(r30)
|
||||
fctiwz f0,f0
|
||||
stfd f0,40(r31)
|
||||
lwz r9,44(r31)
|
||||
stw r9,16(r30)
|
||||
lfs f0,276(r30)
|
||||
fctiwz f0,f0
|
||||
stfd f0,48(r31)
|
||||
lwz r9,52(r31)
|
||||
stw r9,20(r30)
|
||||
b _87c9cb495aa50099_L6
|
||||
_87c9cb495aa50099_L8:
|
||||
lwz r8,252(r30)
|
||||
li r9,0
|
||||
cmpwi r8,0
|
||||
BLT _87c9cb495aa50099_L10
|
||||
b _87c9cb495aa50099_L23
|
||||
_87c9cb495aa50099_L19:
|
||||
lwz r9,12(r30)
|
||||
rlwinm r10,r9,0,31,29
|
||||
andi. r7,r9,1
|
||||
BNE cr0, _87c9cb495aa50099_L20
|
||||
b _87c9cb495aa50099_L24
|
||||
_87c9cb495aa50099_L7:
|
||||
lwz r6,256(r3)
|
||||
li r28,0
|
||||
li r9,0
|
||||
cmpwi r6,0
|
||||
BLT _87c9cb495aa50099_L10
|
||||
b _87c9cb495aa50099_L25
|
||||
_87c9cb495aa50099_L6:
|
||||
addi r11,r31,128
|
||||
lwz r0,4(r11)
|
||||
mtlr r0
|
||||
lwz r19,-68(r11)
|
||||
lwz r20,-64(r11)
|
||||
lwz r21,-60(r11)
|
||||
lwz r22,-56(r11)
|
||||
lwz r23,-52(r11)
|
||||
lwz r24,-48(r11)
|
||||
lwz r25,-44(r11)
|
||||
lwz r26,-40(r11)
|
||||
lwz r27,-36(r11)
|
||||
lwz r28,-32(r11)
|
||||
lwz r29,-28(r11)
|
||||
lwz r30,-24(r11)
|
||||
lwz r31,-20(r11)
|
||||
lfd f30,-16(r11)
|
||||
lfd f31,-8(r11)
|
||||
mr r1,r11
|
||||
blr
|
||||
_87c9cb495aa50099_LC0:
|
||||
.int 1191182336
|
||||
_87c9cb495aa50099_LC1:
|
||||
.int 1325400064
|
211
src/BreathOfTheWild/Mods/FPS++/patch_Cutscene.asm
Normal file
211
src/BreathOfTheWild/Mods/FPS++/patch_Cutscene.asm
Normal file
@ -0,0 +1,211 @@
|
||||
[BotW_Cutscene_V208]
|
||||
moduleMatches = 0x6267BFD0
|
||||
|
||||
.origin = codecave
|
||||
|
||||
cutsceneMode:
|
||||
.int $cutsceneFPSLimitMode
|
||||
|
||||
lastCutsceneId:
|
||||
.int 0
|
||||
|
||||
cutsceneFPSLimit:
|
||||
.float 0
|
||||
|
||||
|
||||
_setCutsceneFPSLimit:
|
||||
stw r0, 4(r31) ; Original instruction
|
||||
|
||||
; Register r9 still holds the ID of this cutscene
|
||||
; Register r29 is the parameter structure that this object is created with which also holds the event name
|
||||
lwz r12, 8(r29)
|
||||
|
||||
; Check if the event name is not 0
|
||||
cmpwi r12, 0
|
||||
beqlr
|
||||
|
||||
; Check if the to-be-created event is a cutscene by checking if the event name starts with *emo
|
||||
lbz r3, 1(r12)
|
||||
cmpwi r3, 0x65 ; e
|
||||
bnelr
|
||||
|
||||
lbz r3, 2(r12)
|
||||
cmpwi r3, 0x6D ; m
|
||||
bnelr
|
||||
|
||||
lbz r3, 3(r12)
|
||||
cmpwi r3, 0x6F ; o
|
||||
bnelr
|
||||
|
||||
; Enforce cutscene mode settings
|
||||
lis r3, cutsceneMode@ha
|
||||
lwz r3, cutsceneMode@l(r3)
|
||||
cmpwi r3, 0
|
||||
beqlr
|
||||
cmpwi r3, 2
|
||||
beq _setCutscene60FPSLimit
|
||||
cmpwi r3, 3
|
||||
beq _setCutscene30FPSLimit
|
||||
|
||||
; Load each digit of the "Demo000_0" string pointer in the params, then add the numbers together
|
||||
li r22, 0
|
||||
|
||||
lbz r3, 4(r12)
|
||||
addi r3, r3, -0x30
|
||||
mulli r3, r3, 1000
|
||||
add r22, r22, r3
|
||||
|
||||
lbz r3, 5(r12)
|
||||
addi r3, r3, -0x30
|
||||
mulli r3, r3, 100
|
||||
add r22, r22, r3
|
||||
|
||||
lbz r3, 6(r12)
|
||||
addi r3, r3, -0x30
|
||||
mulli r3, r3, 10
|
||||
add r22, r22, r3
|
||||
|
||||
lbz r3, 8(r12)
|
||||
addi r3, r3, -0x30
|
||||
mulli r3, r3, 1
|
||||
add r22, r22, r3
|
||||
|
||||
cmpwi r22, 3480 ; demo348_0 ; Could be part of the crash at the Rito Village bridge
|
||||
beq _setCutscene30FPSLimit
|
||||
|
||||
cmpwi r22, 3481 ; demo348_1 ; Crash at the Rito Village bridge
|
||||
beq _setCutscene30FPSLimit
|
||||
|
||||
cmpwi r22, 1620 ; demo162_0 ; Perhaps the crash at the end of vah ruta
|
||||
beq _setCutscene30FPSLimit
|
||||
cmpwi r22, 1630 ; demo163_0 ; Perhaps the crash at the end of vah ruta
|
||||
beq _setCutscene30FPSLimit
|
||||
|
||||
cmpwi r22, 3340 ; demo334_0 ; Perhaps the crash at the end of vah ruta
|
||||
beq _setCutscene30FPSLimit
|
||||
|
||||
; A bunch of divine beast enter and exit events. Could definitely be narrowed down in the future.
|
||||
cmpwi r22, 1110 ; demo110_0
|
||||
beq _setCutscene30FPSLimit
|
||||
cmpwi r22, 1110 ; demo111_0
|
||||
beq _setCutscene30FPSLimit
|
||||
cmpwi r22, 1120 ; demo112_0
|
||||
beq _setCutscene30FPSLimit
|
||||
cmpwi r22, 1130 ; demo113_0
|
||||
beq _setCutscene30FPSLimit
|
||||
cmpwi r22, 1140 ; demo114_0
|
||||
beq _setCutscene30FPSLimit
|
||||
cmpwi r22, 1150 ; demo115_0
|
||||
beq _setCutscene30FPSLimit
|
||||
cmpwi r22, 1160 ; demo116_0
|
||||
beq _setCutscene30FPSLimit
|
||||
cmpwi r22, 1170 ; demo117_0
|
||||
beq _setCutscene30FPSLimit
|
||||
cmpwi r22, 1180 ; demo118_0
|
||||
beq _setCutscene30FPSLimit
|
||||
cmpwi r22, 1190 ; demo119_0
|
||||
beq _setCutscene30FPSLimit
|
||||
cmpwi r22, 1200 ; demo120_0
|
||||
beq _setCutscene30FPSLimit
|
||||
cmpwi r22, 1210 ; demo121_0
|
||||
beq _setCutscene30FPSLimit
|
||||
cmpwi r22, 1220 ; demo122_0
|
||||
beq _setCutscene30FPSLimit
|
||||
cmpwi r22, 1230 ; demo123_0
|
||||
beq _setCutscene30FPSLimit
|
||||
cmpwi r22, 1240 ; demo124_0
|
||||
beq _setCutscene30FPSLimit
|
||||
cmpwi r22, 1250 ; demo125_0
|
||||
beq _setCutscene30FPSLimit
|
||||
blr
|
||||
|
||||
; 30FPS limit case
|
||||
_setCutscene30FPSLimit:
|
||||
lis r3, const_30@ha
|
||||
lfs f10, const_30@l(r3)
|
||||
b _returnWithCutsceneFPSLimit
|
||||
|
||||
; 60FPS limit case
|
||||
_setCutscene60FPSLimit:
|
||||
lis r3, const_60@ha
|
||||
lfs f10, const_60@l(r3)
|
||||
b _returnWithCutsceneFPSLimit
|
||||
|
||||
_returnWithCutsceneFPSLimit:
|
||||
lis r3, lastCutsceneId@ha
|
||||
stw r9, lastCutsceneId@l(r3)
|
||||
lis r3, cutsceneFPSLimit@ha
|
||||
stfs f10, cutsceneFPSLimit@l(r3)
|
||||
blr
|
||||
|
||||
|
||||
_removeCutsceneFPSLimit:
|
||||
lwz r11, 0x27C(r30) ; Original instruction
|
||||
|
||||
lwz r9, 0x274(r30)
|
||||
lis r8, lastCutsceneId@ha
|
||||
lwz r8, lastCutsceneId@l(r8)
|
||||
cmpw r9, r8
|
||||
bnelr
|
||||
|
||||
lis r8, const_0.0@ha
|
||||
lfs f10, const_0.0@l(r8)
|
||||
lis r8, cutsceneFPSLimit@ha
|
||||
stfs f10, cutsceneFPSLimit@l(r8)
|
||||
blr
|
||||
|
||||
|
||||
; Check if a cutscene is ongoing with a set FPS limit
|
||||
_checkCutsceneFPSLimit:
|
||||
lis r11, const_0.0@ha
|
||||
lfs f7, const_0.0@l(r11)
|
||||
lis r11, cutsceneFPSLimit@ha
|
||||
lfs f12, cutsceneFPSLimit@l(r11)
|
||||
fcmpu cr0, f12, f7
|
||||
beq _calculateDynamicFPS
|
||||
|
||||
; If a cutscene FPS limit is set, lower FPS
|
||||
_lowerCutsceneFPS:
|
||||
; Calculate how many ticks a frame has to take to render at the given FPS limit
|
||||
lis r11, const_1@ha
|
||||
lfs f7, const_1@l(r11)
|
||||
fdivs f12, f7, f12
|
||||
lis r11, timerTickSpeed@ha
|
||||
lfs f7, timerTickSpeed@l(r11)
|
||||
fmuls f12, f7, f12
|
||||
|
||||
; Subtract the time that it took for the actual frame to render and make sure that it's not negative (which means a frame already took longer to render then the FPS limit)
|
||||
fsubs f12, f12, f10
|
||||
lis r12, const_0.0@ha
|
||||
lfs f7, const_0.0@l(r12)
|
||||
fcmpu cr0, f7, f12
|
||||
ble .+0x8
|
||||
fmr f12, f7
|
||||
|
||||
; Convert the remaining ticks that should be spend idling to an integer (but it requires storing it in memory)
|
||||
fctiwz f12, f12
|
||||
lis r11, floatConvHa@ha
|
||||
stfd f12, floatConvHa@l(r11)
|
||||
|
||||
; Load the converted integer ticks and sleep for the given amount of time
|
||||
mr r12, r4
|
||||
li r3, 0
|
||||
lis r11, floatConvL@ha
|
||||
lwz r4, floatConvL@l(r11)
|
||||
mflr r11
|
||||
bl import.coreinit.OSSleepTicks
|
||||
mtlr r11
|
||||
mr r4, r12
|
||||
|
||||
lis r11, cutsceneFPSLimit@ha
|
||||
lfs f10, cutsceneFPSLimit@l(r11)
|
||||
|
||||
; Skip dynamic FPS code when cutscene FPS limit is in place since the game should always run at 30FPS
|
||||
b _setGamespeed
|
||||
|
||||
|
||||
; Hook evt::EventFlowBase's ctor (event object creation)
|
||||
0x031D2D2C = bla _setCutsceneFPSLimit
|
||||
|
||||
; Hook evt::EventFlowBase's dtor (event object destruction)
|
||||
0x031D3798 = bla _removeCutsceneFPSLimit
|
@ -16,7 +16,10 @@ const_1.5:
|
||||
.float 1.5
|
||||
const_30:
|
||||
.float 30
|
||||
const_60:
|
||||
.float 60
|
||||
|
||||
timerTickSpeed:
|
||||
busSpeed:
|
||||
.float 62156250
|
||||
|
||||
@ -24,17 +27,16 @@ convSub:
|
||||
.uint 0x43300000
|
||||
.uint 0x80000000
|
||||
|
||||
floatConv:
|
||||
floatConvHa:
|
||||
.uint 0
|
||||
floatConvL:
|
||||
.uint 0
|
||||
|
||||
# Variables
|
||||
|
||||
; Cemu doesn't parse the variables correctly until it saves all the settings. This is just a temporary test of a workaround to make it work.
|
||||
; To change this workaround back, change the lines from
|
||||
; ($advancedMode * $fpsLimitAdvanced) + ((($advancedMode+1) % 2) * $fpsLimitNormal)
|
||||
; to
|
||||
; $fpsLimit
|
||||
|
||||
fpsLimit:
|
||||
.float (($advancedMode == 0) * $fpsLimitAdvanced) + (($advancedMode == 1) * $fpsLimitNormal)
|
||||
.float $fpsLimit
|
||||
|
||||
lowFPSLimit:
|
||||
.float $lowFPSLimit
|
||||
@ -43,45 +45,42 @@ bufferSizeDivider:
|
||||
.float $frameAverageAmount
|
||||
|
||||
averageFPS30:
|
||||
.float (($advancedMode == 0) * $fpsLimitAdvanced) + (($advancedMode == 1) * $fpsLimitNormal)
|
||||
.float $fpsLimit
|
||||
|
||||
averageFPS30Inv:
|
||||
.float 900/((($advancedMode == 0) * $fpsLimitAdvanced) + (($advancedMode == 1) * $fpsLimitNormal))
|
||||
.float 900/$fpsLimit
|
||||
|
||||
averageFPS1.5:
|
||||
.float (1.5*((($advancedMode == 0) * $fpsLimitAdvanced) + (($advancedMode == 1) * $fpsLimitNormal)))/30
|
||||
.float (1.5*$fpsLimit)/30
|
||||
|
||||
averageFPS1.5Inv:
|
||||
.float 45/((($advancedMode == 0) * $fpsLimitAdvanced) + (($advancedMode == 1) * $fpsLimitNormal))
|
||||
.float 45/$fpsLimit
|
||||
|
||||
averageFPS1:
|
||||
.float ((($advancedMode == 0) * $fpsLimitAdvanced) + (($advancedMode == 1) * $fpsLimitNormal))/30
|
||||
.float $fpsLimit/30
|
||||
|
||||
averageFPS1Inv:
|
||||
.float 30/((($advancedMode == 0) * $fpsLimitAdvanced) + (($advancedMode == 1) * $fpsLimitNormal))
|
||||
.float 30/$fpsLimit
|
||||
|
||||
averageFPS0.5:
|
||||
.float ((($advancedMode == 0) * $fpsLimitAdvanced) + (($advancedMode == 1) * $fpsLimitNormal))/60
|
||||
.float $fpsLimit/60
|
||||
|
||||
averageFPS0.5Inv:
|
||||
.float 30/(2*((($advancedMode == 0) * $fpsLimitAdvanced) + (($advancedMode == 1) * $fpsLimitNormal)))
|
||||
.float 30/(2*$fpsLimit)
|
||||
|
||||
averageSum:
|
||||
.float ((($advancedMode == 0) * $fpsLimitAdvanced) + (($advancedMode == 1) * $fpsLimitNormal))*$frameAverageAmount
|
||||
.float $fpsLimit*$frameAverageAmount
|
||||
|
||||
initBuffer:
|
||||
.byte 0
|
||||
buffer:
|
||||
.float 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; buffer can only store a max length of 32 frames
|
||||
|
||||
bufferStart:
|
||||
.ptr 0xDC
|
||||
bufferIndex:
|
||||
.int 0
|
||||
|
||||
bufferCurrEntry:
|
||||
.ptr 0xDC
|
||||
bufferIndexEnd:
|
||||
.int (4*$frameAverageAmount)
|
||||
|
||||
bufferEnd:
|
||||
.ptr 0xDC+(4*$frameAverageAmount)
|
||||
|
||||
; Useful for trying potential FPS values. Need to set debugMode = 1 to enable the debugging in the interface and code.
|
||||
; Useful for trying potential FPS values. Need to set debugMode = 1 to enable the debugging options in the graphic pack selection and code.
|
||||
debugAddr:
|
||||
.ptr 0x00000000
|
||||
|
||||
@ -94,13 +93,15 @@ debugMultiplier:
|
||||
_calculateGamespeed:
|
||||
stw r0, 0x78(r30) ; Execute original instruction that got replaced with a jump to this function
|
||||
|
||||
; If static FPS is enabled, always set currently "running" FPS to $fpsLimit
|
||||
li r3, $staticFPSMode ; Load the $staticFPSMode setting into r3
|
||||
cmpwi r3, 1 ; Compare with 1, which is when it's enabled
|
||||
bne _checkExternalSpeed ; If the comparison is not equal, run
|
||||
lis r3, fpsLimit@ha ; Load current FPS limit...
|
||||
lfs f10, fpsLimit@l(r3) ; ...into f10
|
||||
b _setGamespeed ; Skip dynamic FPS code when static mode is enabled and go to the game speed setting code
|
||||
; Check and set the cursor speed value if it has been set by the Menu Cursor Speed graphic pack
|
||||
_checkCursorSpeed:
|
||||
lis r11, const_0.0@ha ; Load a 0 float...
|
||||
lfs f12, const_0.0@l(r11) ; ...into f12
|
||||
lfs f7, 0xD4(r30) ; Load the external cursor speed offset
|
||||
fcmpu cr0, f7, f12 ; Compare the value stored in the external memory offset to 0 (f12)
|
||||
beq _convertTicksToFrametime ; Don't change the value if the menu cursor speed isn't manually set
|
||||
lis r3, scrollSpeed@ha ; Load the address of the scrollSpeed from the cutscene patch...
|
||||
stfs f7, scrollSpeed@l(r3) ; ...and then store the external cursor speed from f7 into that address
|
||||
|
||||
; If the manual speed has been set by an external program to something other then 0, use that as the static speed
|
||||
_checkExternalSpeed:
|
||||
@ -108,71 +109,68 @@ lis r11, const_0.0@ha ; Load a 0 float...
|
||||
lfs f12, const_0.0@l(r11) ; ...into f12
|
||||
lfs f10, 0xD0(r30) ; Load the external speed offset
|
||||
fcmpu cr0, f10, f12 ; Compare the value stored in the external memory offset to 0 (f12)
|
||||
beq _calculateDynamicFPS ; Compare the
|
||||
b _setGamespeed
|
||||
bne _setGamespeed
|
||||
|
||||
; If static FPS is enabled, always set currently "running" FPS to $fpsLimit
|
||||
_checkStaticFPS:
|
||||
li r3, $staticFPSMode ; Load the $staticFPSMode setting into r3
|
||||
cmpwi r3, 1 ; Compare with 1, which is when it's enabled
|
||||
bne _calcAverageFPS ; If the comparison is not equal, run
|
||||
lis r3, fpsLimit@ha ; Load current FPS limit...
|
||||
lfs f10, fpsLimit@l(r3) ; ...into f10
|
||||
b _setGamespeed ; Skip dynamic FPS code when static mode is enabled and go to the game speed setting code
|
||||
|
||||
; Calculate speed of current frame (FPS). It's calculated by using the ticks between the previous frame and now, which is stored in r12, and the amount of ticks that the Wii U executes in a second (the bus speed).
|
||||
_convertTicksToFrametime:
|
||||
xoris r12, r12, 0x8000 ; Flip the sign bit of int ticks for floating point conversion
|
||||
lis r11, floatConv@ha ; Load upper half of the int to float address to then...
|
||||
stw r12, floatConv@l+0x4(r11) ; ...store sign flipped ticks in memory as lower half of double
|
||||
lis r12, 0x4330 ; Create upper half of ticks double
|
||||
stw r12, floatConv@l+0x0(r11) ; Store it in upper half of memory
|
||||
lfd f10, floatConv@l+0x0(r11) ; Load full double ticks into f10
|
||||
lis r12, convSub@ha ; Load number required to convert the raw integer...
|
||||
lfd f12, convSub@l(r12) ; ... to an actual ticks float into f12
|
||||
fsub f10, f10, f12 ; Do the subtraction that changes the integer representation to a float representation of the tick number
|
||||
frsp f10, f10 ; Round the ticks to single precision and store the ticks back to f10
|
||||
|
||||
; Call externalized cutscene FPS function which will return to checkExternalSpeed
|
||||
b _checkCutsceneFPSLimit
|
||||
|
||||
; Calculate speed of current frame (FPS). It's calculated by using the ticks between the previous frame and now, which is stored in r12, and the amount of ticks that the Wii U executes in a second (the bus speed).
|
||||
_calculateDynamicFPS:
|
||||
xoris r12, r12, 0x8000 ; Flip the sign bit of int ticks for floating point conversion
|
||||
stw r12, 0xD8(r30) ; Store sign flipped ticks in memory as lower half of double
|
||||
lis r12, 0x4330 ; Create upper half of ticks double
|
||||
stw r12, 0xD4(r30) ; Store it in upper half of memory
|
||||
lfd f10, 0xD4(r30) ; Load full double ticks into f10
|
||||
lis r12, convSub@ha ; Load number to subtract from tick double...
|
||||
lfd f12, convSub@l(r12) ; ...to create tick float into f12
|
||||
fsub f10, f10, f12 ; Do the subtraction
|
||||
frsp f10, f10 ; Round to single precision and tick float is in f10
|
||||
lis r12, const_1@ha ; Load float of 1...
|
||||
lfs f12, const_1@l(r12) ; ...into f12
|
||||
fdivs f10, f12, f10 ; Divide 1 by ticks
|
||||
lis r12, busSpeed@ha ; Load wii u bus speed...
|
||||
lfs f12, busSpeed@l(r12) ; ...into f12
|
||||
lis r12, timerTickSpeed@ha ; Load wii u bus speed...
|
||||
lfs f12, timerTickSpeed@l(r12) ; ...into f12
|
||||
fmuls f10, f12, f10 ; Multiply bus speed to have current fps in f10. (1/ticks)*bus speed
|
||||
|
||||
; Initialize the circular buffer with default values whenever a setting gets changed
|
||||
_initializeAverageBuffer:
|
||||
lis r12, initBuffer@ha ; Load the initBuffer variable to see whether the buffer has to be initialized/reset again
|
||||
lbz r11, initBuffer@l(r12) ; ...to check whether/what the current buffer settings are
|
||||
cmpwi r11, 1 ; Compare the previously $frameAverageAmount with the current $frameAverageAmount
|
||||
beq _calcAverageFPS ; Continue to calulating the average FPS if the previous settings are the same as the permanently set settings
|
||||
li r11, 1 ; Load "1" into r11
|
||||
stb r11, initBuffer@l(r12) ; Store that 1 into the initBuffer so that it will only initialize this once
|
||||
lis r12, fpsLimit@ha ; Load current FPS limit...
|
||||
lfs f10, fpsLimit@l(r12) ; ...into f10
|
||||
lis r12, bufferStart@ha ; Load offset to the start of the averaging buffer...
|
||||
lwz r12, bufferStart@l(r12) ; ...into r12
|
||||
lis r3, bufferEnd@ha ; Load offset to the end of the averaging buffer...
|
||||
lwz r3, bufferEnd@l(r3) ; ...into r3
|
||||
add r11, r12, r30 ; Make full offset by adding r30 (the empty buffer offset) to r12, which is the buffer offset.
|
||||
stfs f10, 0x0(r11) ; Store f10 to the address in r12 + 0x04 using this specific instruction, which also adds the 0x04 to r12
|
||||
addi r12, r12, 0x04 ; Add 0x04 to the buffer offset to make the next entry offset
|
||||
cmpw r12, r3 ; Compare the current address offset in r12 with the address offset in r3
|
||||
ble .-0x10 ; Loop back until the whole buffer is initialized with the value from f12
|
||||
|
||||
; Calculate the rolling average FPS over the last N amount of frames which are stored in the circular buffer
|
||||
_calcAverageFPS:
|
||||
lis r3, bufferCurrEntry@ha ; Load the offset to the current value
|
||||
lwz r12, bufferCurrEntry@l(r3) ; Load the current buffer offset
|
||||
lis r11, averageSum@ha ; Load the current average sum
|
||||
lfs f7, averageSum@l(r11) ; ...into f7
|
||||
lis r3, averageSum@ha ; Load the current average sum
|
||||
lfs f7, averageSum@l(r3) ; ...into f7
|
||||
lis r11, buffer@ha ; Load the address of buffer...
|
||||
addi r11, r11, buffer@l ; ...into r11 for later
|
||||
lis r12, bufferIndex@ha ; Load the offset to the current value
|
||||
lwz r12, bufferIndex@l(r12) ; Load the current buffer offset
|
||||
|
||||
add r3, r12, r30 ; Add r12 to r30 to create the whole offset, since Cemu's assembly doesn't support LFSX and STFX
|
||||
lfs f12, 0x0(r3) ; Load the value that's stored in the current offset
|
||||
fadds f7, f7, f10 ; Add the FPS from this current frame
|
||||
.int 0x7d8b642e ; Load the value that's stored at the current index
|
||||
;lfsx f12, r11, r12 ; Cemu only supports the lfsx instruction on the very latest version, so use assembled instruction bytes for legacy support
|
||||
fsubs f7, f7, f12 ; Subtract this value from the current average sum
|
||||
stfs f7, averageSum@l(r11) ; Store this new average sum again
|
||||
stfs f10, 0x0(r3) ; Store the FPS value from this current frame in place of the old value
|
||||
fadds f7, f7, f10 ; Add the FPS from this current frame
|
||||
.int 0x7d4b652e ; Store the FPS value from this current frame in place of the old value
|
||||
;stfsx f10, r11, r12 ; Cemu only supports the stfsx instruction on the very latest version, so use assembled instruction bytes for legacy support
|
||||
stfs f7, averageSum@l(r3) ; Store this new average sum again
|
||||
|
||||
; Store the offset to the next buffer entry
|
||||
lis r11, bufferEnd@ha ; Load offset to the end of the averaging buffer
|
||||
lwz r11, bufferEnd@l(r11) ; ...into r11
|
||||
addi r12, r12, 0x04 ; Add 0x04 to the current entry offset to have the next entry offset
|
||||
cmpw r11, r12 ; Compare this new entry offset to the end offset
|
||||
bgt .+0x0C ; Skip the next 2 lines if the next entry offset is smaller
|
||||
lis r12, bufferStart@ha ; Load start of the buffer offset...
|
||||
lwz r12, bufferStart@l(r12) ; ...into r12
|
||||
lis r3, bufferCurrEntry@ha ; Load current buffer entry
|
||||
stw r12, bufferCurrEntry@l(r3) ; ...into r12
|
||||
lis r11, bufferIndexEnd@ha ; Load offset to the end of the averaging buffer
|
||||
lwz r11, bufferIndexEnd@l(r11) ; ...into r11
|
||||
addi r12, r12, 0x04 ; Add 0x04 to the current buffer index to have the next buffer index
|
||||
cmpw r11, r12 ; Compare this new buffer index to the end index
|
||||
bgt .+0x08 ; Skip the next line if the next index is smaller then the end index
|
||||
li r12, 0 ; Set the current index to 0 if the end of the buffer was reached
|
||||
lis r3, bufferIndex@ha ; Load current buffer index
|
||||
stw r12, bufferIndex@l(r3) ; ...into r12
|
||||
|
||||
lis r3, bufferSizeDivider@ha ; Load the buffer size divider
|
||||
lfs f10, bufferSizeDivider@l(r3); ...into f10
|
||||
@ -227,8 +225,8 @@ lis r11, const_30@ha ; Load a constant float with 30.0...
|
||||
lfs f12, const_30@l(r11) ; ...into f12
|
||||
fmuls f7, f7, f12 ; Multiply 30.0 by 1.5 to get 45.0 and store it in f7
|
||||
fdivs f7, f7, f10 ; Divide 45.0 by the calculated FPS to invert the FPS
|
||||
lis r11, averageFPS1.5Inv@ha ; Store the inverted 1.5 float...
|
||||
stfs f7, averageFPS1.5Inv@l(r11) ; ...to replace constants that are lower when FPS is higher
|
||||
lis r11, averageFPS1.5Inv@ha ; Store the inverted 1.5 float...
|
||||
stfs f7, averageFPS1.5Inv@l(r11); ...to replace constants that are lower when FPS is higher
|
||||
|
||||
; Set average speed (inverted 1.0 range)
|
||||
fdivs f7, f12, f10 ; Divides 30.0 by the calculated FPS to invert the FPS
|
||||
|
36
src/BreathOfTheWild/Mods/FPS++/patch_KorokChasing.asm
Normal file
36
src/BreathOfTheWild/Mods/FPS++/patch_KorokChasing.asm
Normal file
@ -0,0 +1,36 @@
|
||||
[BotW_KorokChasing_V208]
|
||||
moduleMatches = 0x6267BFD0
|
||||
|
||||
.origin = codecave
|
||||
; --------------------------
|
||||
; This set of patches fixes the speed with which hidden Koroks (shown as sparkles on the ground) move along their path
|
||||
; In unpatched state, the speed would scale directly with FPS, so at 60 FPS the Koroks would move twice as fast
|
||||
|
||||
_constFloatTimestepKorok:
|
||||
.float 30.0
|
||||
|
||||
0x0348ba3c = bla _HiddenKorokMoveCalcTimestep
|
||||
_HiddenKorokMoveCalcTimestep:
|
||||
; replaced instruction:
|
||||
; 0348ba3c fdivs f25,f27,f13
|
||||
; calculates:
|
||||
; f25 = 1.0 / timeStepInSeconds
|
||||
; available registers: r4
|
||||
lis r4, _constFloatTimestepKorok@ha
|
||||
lfs f25, _constFloatTimestepKorok@lo(r4)
|
||||
blr
|
||||
|
||||
; 0344acd8 ec 0d 58 24 fdivs f0,f13,f11
|
||||
; general korok move function? maybe should be patched too?
|
||||
|
||||
; Hidden korok rest time is measured in frames. Normally it also counts +1.0 each frame but we use a dynamic timestep instead
|
||||
0x022ac944 = bla _HiddenKorokRestActionCalcTimestep
|
||||
_HiddenKorokRestActionCalcTimestep:
|
||||
; replaced instruction:
|
||||
; 022ac944 fadds f0,f12,f0
|
||||
; available registers: r3
|
||||
lis r3, averageFPS1Inv@ha
|
||||
lfs f0, averageFPS1Inv@lo(r3)
|
||||
fadds f0, f12, f0
|
||||
blr
|
||||
|
42
src/BreathOfTheWild/Mods/FPS++/patch_Ragdolls.asm
Normal file
42
src/BreathOfTheWild/Mods/FPS++/patch_Ragdolls.asm
Normal file
@ -0,0 +1,42 @@
|
||||
[BotW_Ragdolls_V208]
|
||||
moduleMatches = 0x6267BFD0
|
||||
|
||||
.origin = codecave
|
||||
|
||||
const_ragdollTimestepA:
|
||||
.float 0.03333334 ; the expected timestep at 30 FPS (1/30)
|
||||
|
||||
; -----------------------------
|
||||
; Patch RagdollApplyForce function to always use the expected timestep of 1/30
|
||||
; and disable the timestep scaling as its incorrect to scale one-frame impulses by time
|
||||
|
||||
; f12 is the timestep in seconds (so for 30 FPS thats 1/30 -> 0.03333)
|
||||
RagdollHit_TimestepPatch1:
|
||||
lis r6, const_ragdollTimestepA@ha
|
||||
lfs f12, const_ragdollTimestepA@lo(r6)
|
||||
blr
|
||||
|
||||
0x0333d350 = bla RagdollHit_TimestepPatch1 ; replaced instruction: lfs f12,0x48(r25)
|
||||
|
||||
; disable more timestep scaling
|
||||
; 0333d80c fnmsubs f9,f9,f9,f31
|
||||
0x0333d80c = fmr f9, f31
|
||||
|
||||
; 0333dc78 fnmsubs f9,f9,f9,f30
|
||||
0x0333dc78 = fmr f9, f30
|
||||
|
||||
; 0333dd58 fnmsubs f9,f9,f9,f30
|
||||
0x0333dd58 = fmr f9, f30
|
||||
|
||||
|
||||
;_changeImpulsePower:
|
||||
;lis r10, averageFPS1Inv@ha
|
||||
;lfs f13, averageFPS1Inv@l(r10)
|
||||
;lis r10, debugMultiplier@ha
|
||||
;lfs f11, debugMultiplier@l(r10)
|
||||
;fmuls f13, f13, f11
|
||||
;fmuls f1, f1, f13
|
||||
;lwz r10, 0x2C(r28)
|
||||
;blr
|
||||
;
|
||||
;0x0333E3D0 = bla _changeImpulsePower
|
49
src/BreathOfTheWild/Mods/FPS++/patch_WaterPhysics.asm
Normal file
49
src/BreathOfTheWild/Mods/FPS++/patch_WaterPhysics.asm
Normal file
@ -0,0 +1,49 @@
|
||||
[BotW_WaterPhysics_V208]
|
||||
moduleMatches = 0x6267BFD0
|
||||
|
||||
.origin = codecave
|
||||
|
||||
; turn quadratic scaling of timesteps into mostly linear scaling by setting one of the two timestep variables closer to 1.0
|
||||
; this is the more correct behavior as the applied velocities also scale linearly with timestep, but not exactly due to external factors like friction (probably)
|
||||
;
|
||||
; fixes objects not decelerating fast enough when falling into water
|
||||
; fixes object drifting speed when pushed by water currents
|
||||
|
||||
_constFloat1:
|
||||
.float 1.0
|
||||
|
||||
_constTimestepDampingFactor:
|
||||
.float 0.45 ; damping factor 0.0 -> linear scaling by timestep, 1.0 -> quadratic scaling by timestep
|
||||
|
||||
_constInverse30:
|
||||
.float 1.0 / 30.0
|
||||
|
||||
0x034a804c = bla _water_physics_timestep_fix
|
||||
|
||||
; input:
|
||||
; f30 <-- Timestep30 (Timestep scale factor where 30 FPS is 1.0. 60 FPS is ~0.5, 90 FPS is ~0.333)
|
||||
; f1 <-- TimescaleProperty (a property from the object, usually 1.0)
|
||||
; output:
|
||||
; f30 --> Scaled timestep. Normally only f30 * f1 but we introduce a damping factor:
|
||||
; f30 = ((f30 - 1.0) * _constTimestepDampingFactor + 1.0) * f1
|
||||
; available registers:
|
||||
; f12, r28
|
||||
_water_physics_timestep_fix:
|
||||
; replaced instruction: fmr f30, f1
|
||||
; scale f30 to be close to 1/30 FPS
|
||||
; - 1.0
|
||||
lis r28, _constFloat1@ha
|
||||
lfs f12, _constFloat1@lo(r28)
|
||||
fsubs f30, f30, f12
|
||||
; * _constTimestepDampingFactor
|
||||
lis r28, _constTimestepDampingFactor@ha
|
||||
lfs f12, _constTimestepDampingFactor@lo(r28)
|
||||
fmuls f30, f30, f12
|
||||
; + 1.0
|
||||
lis r28, _constFloat1@ha
|
||||
lfs f12, _constFloat1@lo(r28)
|
||||
fadds f30, f30, f12
|
||||
; * f1 (property from object)
|
||||
fmuls f30, f30, f1
|
||||
blr
|
||||
|
@ -2,7 +2,7 @@
|
||||
titleIds = 00050000101C9300,00050000101C9400,00050000101C9500
|
||||
name = 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, leoetlino and Pig.
|
||||
description = Allows you to change the FPS and the speed that most things run at.|Some bugs might still occur if you run at high FPS.||Made by Xalphenos, rajkosto, epigramx, Crementif, leoetlino, Pig and Exzap.
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
@ -17,7 +17,7 @@ $fpsLimit = 0
|
||||
$frameAverageAmount = 8
|
||||
$fenceMethod = 1
|
||||
$lowFPSLimit = 20
|
||||
$cursorFixAbove:int = 999
|
||||
$cutsceneFPSLimitMode:int = 1
|
||||
$roundUpModifier = 0.8
|
||||
|
||||
$showDebugModeOptions:int = 0
|
||||
@ -205,26 +205,32 @@ condition = $advancedMode == 1
|
||||
$fpsLimitAdvanced = 20
|
||||
|
||||
|
||||
# Cursor Fix Mode
|
||||
# Cutscene FPS Limit Mode
|
||||
|
||||
[Preset]
|
||||
name = Disabled (Default)
|
||||
category = Menu Cursor Fix (Experimental)
|
||||
condition = ($advancedMode-$staticFPSMode == 1)
|
||||
$cursorFixAbove:int = 999
|
||||
name = Automatically Limit In Few Cutscenes (Recommended)
|
||||
category = Cutscene FPS Limit
|
||||
condition = $advancedMode == 1
|
||||
default = 1
|
||||
$cutsceneFPSLimitMode:int = 1
|
||||
|
||||
[Preset]
|
||||
name = Enabled At 72FPS And Higher (Recommended)
|
||||
category = Menu Cursor Fix (Experimental)
|
||||
condition = ($advancedMode-$staticFPSMode == 1)
|
||||
$cursorFixAbove:int = 2
|
||||
name = Limit all cutscenes to 60FPS
|
||||
category = Cutscene FPS Limit
|
||||
condition = $advancedMode == 1
|
||||
$cutsceneFPSLimitMode:int = 2
|
||||
|
||||
[Preset]
|
||||
name = Enabled (For Testing, Not Recommended!)
|
||||
category = Menu Cursor Fix (Experimental)
|
||||
condition = ($advancedMode-$staticFPSMode == 1)
|
||||
$cursorFixAbove:int = 1
|
||||
name = Limit all cutscenes to 30FPS
|
||||
category = Cutscene FPS Limit
|
||||
condition = $advancedMode == 1
|
||||
$cutsceneFPSLimitMode:int = 3
|
||||
|
||||
[Preset]
|
||||
name = Disabled (Causes Crashes Above 30-60FPS)
|
||||
category = Cutscene FPS Limit
|
||||
condition = $advancedMode == 1
|
||||
$cutsceneFPSLimitMode:int = 0
|
||||
|
||||
# Static Mode
|
||||
|
||||
|
@ -1,398 +0,0 @@
|
||||
#version 430
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
#extension GL_ARB_separate_shader_objects : enable
|
||||
// shader 6ef3887dc83ac35e
|
||||
// Used for: Fog Clouds
|
||||
|
||||
|
||||
// start of shader inputs/outputs, predetermined by Cemu. Do not touch
|
||||
#ifdef VULKAN
|
||||
#define ATTR_LAYOUT(__vkSet, __location) layout(set = __vkSet, location = __location)
|
||||
#define UNIFORM_BUFFER_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(set = __vkSet, binding = __vkLocation, std140)
|
||||
#define TEXTURE_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(set = __vkSet, binding = __vkLocation)
|
||||
#define GET_FRAGCOORD() vec4(gl_FragCoord.xy*uf_fragCoordScale.xy,gl_FragCoord.zw)
|
||||
#else
|
||||
#define ATTR_LAYOUT(__vkSet, __location) layout(location = __location)
|
||||
#define UNIFORM_BUFFER_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(binding = __glLocation, std140)
|
||||
#define TEXTURE_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(binding = __glLocation)
|
||||
#define GET_FRAGCOORD() vec4(gl_FragCoord.xy*uf_fragCoordScale,gl_FragCoord.zw)
|
||||
#endif
|
||||
#ifdef VULKAN
|
||||
layout(set = 1, binding = 5) uniform ufBlock
|
||||
{
|
||||
uniform ivec4 uf_remappedPS[9];
|
||||
uniform float uf_alphaTestRef;
|
||||
uniform vec4 uf_fragCoordScale;
|
||||
};
|
||||
#else
|
||||
uniform ivec4 uf_remappedPS[9];
|
||||
uniform float uf_alphaTestRef;
|
||||
uniform vec2 uf_fragCoordScale;
|
||||
#endif
|
||||
TEXTURE_LAYOUT(0, 1, 0) uniform sampler2D textureUnitPS0;
|
||||
TEXTURE_LAYOUT(1, 1, 1) uniform sampler2D textureUnitPS1;
|
||||
TEXTURE_LAYOUT(2, 1, 2) uniform sampler2D textureUnitPS2;
|
||||
TEXTURE_LAYOUT(4, 1, 3) uniform sampler2D textureUnitPS4;
|
||||
TEXTURE_LAYOUT(10, 1, 4) uniform samplerCubeArray textureUnitPS10;
|
||||
layout(location = 0) in vec4 passParameterSem0;
|
||||
layout(location = 1) in vec4 passParameterSem1;
|
||||
layout(location = 2) in vec4 passParameterSem3;
|
||||
layout(location = 3) in vec4 passParameterSem4;
|
||||
layout(location = 4) in vec4 passParameterSem8;
|
||||
layout(location = 5) in vec4 passParameterSem9;
|
||||
layout(location = 6) in vec4 passParameterSem11;
|
||||
layout(location = 7) in vec4 passParameterSem14;
|
||||
layout(location = 8) in vec4 passParameterSem15;
|
||||
layout(location = 9) in vec4 passParameterSem16;
|
||||
layout(location = 0) out vec4 passPixelColor0;
|
||||
// end of shader inputs/outputs
|
||||
void redcCUBE(vec4 src0, vec4 src1, out vec3 stm, out int faceId)
|
||||
{
|
||||
// stm -> x .. s, y .. t, z .. MajorAxis*2.0
|
||||
vec3 inputCoord = normalize(vec3(src1.y, src1.x, src0.x));
|
||||
float rx = inputCoord.x;
|
||||
float ry = inputCoord.y;
|
||||
float rz = inputCoord.z;
|
||||
if( abs(rx) > abs(ry) && abs(rx) > abs(rz) )
|
||||
{
|
||||
stm.z = rx*2.0;
|
||||
stm.xy = vec2(ry,rz);
|
||||
if( rx >= 0.0 )
|
||||
{
|
||||
faceId = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
faceId = 1;
|
||||
}
|
||||
}
|
||||
else if( abs(ry) > abs(rx) && abs(ry) > abs(rz) )
|
||||
{
|
||||
stm.z = ry*2.0;
|
||||
stm.xy = vec2(rx,rz);
|
||||
if( ry >= 0.0 )
|
||||
{
|
||||
faceId = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
faceId = 3;
|
||||
}
|
||||
}
|
||||
else //if( abs(rz) > abs(ry) && abs(rz) > abs(rx) )
|
||||
{
|
||||
stm.z = rz*2.0;
|
||||
stm.xy = vec2(rx,ry);
|
||||
if( rz >= 0.0 )
|
||||
{
|
||||
faceId = 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
faceId = 5;
|
||||
}
|
||||
}
|
||||
}
|
||||
vec3 redcCUBEReverse(vec2 st, int faceId)
|
||||
{
|
||||
st.yx = st.xy;
|
||||
vec3 v;
|
||||
float majorAxis = 1.0;
|
||||
if( faceId == 0 )
|
||||
{
|
||||
v.yz = (st-vec2(1.5))*(majorAxis*2.0);
|
||||
v.x = 1.0;
|
||||
}
|
||||
else if( faceId == 1 )
|
||||
{
|
||||
v.yz = (st-vec2(1.5))*(majorAxis*2.0);
|
||||
v.x = -1.0;
|
||||
}
|
||||
else if( faceId == 2 )
|
||||
{
|
||||
v.xz = (st-vec2(1.5))*(majorAxis*2.0);
|
||||
v.y = 1.0;
|
||||
}
|
||||
else if( faceId == 3 )
|
||||
{
|
||||
v.xz = (st-vec2(1.5))*(majorAxis*2.0);
|
||||
v.y = -1.0;
|
||||
}
|
||||
else if( faceId == 4 )
|
||||
{
|
||||
v.xy = (st-vec2(1.5))*(majorAxis*2.0);
|
||||
v.z = 1.0;
|
||||
}
|
||||
else
|
||||
{
|
||||
v.xy = (st-vec2(1.5))*(majorAxis*2.0);
|
||||
v.z = -1.0;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
int clampFI32(int v)
|
||||
{
|
||||
if( v == 0x7FFFFFFF )
|
||||
return floatBitsToInt(1.0);
|
||||
else if( v == 0xFFFFFFFF )
|
||||
return floatBitsToInt(0.0);
|
||||
return floatBitsToInt(clamp(intBitsToFloat(v), 0.0, 1.0));
|
||||
}
|
||||
float mul_nonIEEE(float a, float b){ if( a == 0.0 || b == 0.0 ) return 0.0; return a*b; }
|
||||
void main()
|
||||
{
|
||||
vec4 R0f = vec4(0.0);
|
||||
vec4 R1f = vec4(0.0);
|
||||
vec4 R2f = vec4(0.0);
|
||||
vec4 R3f = vec4(0.0);
|
||||
vec4 R4f = vec4(0.0);
|
||||
vec4 R5f = vec4(0.0);
|
||||
vec4 R6f = vec4(0.0);
|
||||
vec4 R7f = vec4(0.0);
|
||||
vec4 R8f = vec4(0.0);
|
||||
vec4 R9f = vec4(0.0);
|
||||
vec4 R10f = vec4(0.0);
|
||||
vec4 R11f = vec4(0.0);
|
||||
vec4 R122f = vec4(0.0);
|
||||
vec4 R123f = vec4(0.0);
|
||||
vec4 R126f = vec4(0.0);
|
||||
vec4 R127f = vec4(0.0);
|
||||
float backupReg0f, backupReg1f, backupReg2f, backupReg3f, backupReg4f;
|
||||
vec4 PV0f = vec4(0.0), PV1f = vec4(0.0);
|
||||
float PS0f = 0.0, PS1f = 0.0;
|
||||
vec4 tempf = vec4(0.0);
|
||||
float tempResultf;
|
||||
int tempResulti;
|
||||
ivec4 ARi = ivec4(0);
|
||||
bool predResult = true;
|
||||
vec3 cubeMapSTM;
|
||||
int cubeMapFaceId;
|
||||
float cubeMapArrayIndex10 = 0.0;
|
||||
R0f = passParameterSem0;
|
||||
R1f = passParameterSem1;
|
||||
R2f = passParameterSem3;
|
||||
R3f = passParameterSem4;
|
||||
R4f = passParameterSem8;
|
||||
R5f = passParameterSem9;
|
||||
R6f = passParameterSem11;
|
||||
R7f = passParameterSem14;
|
||||
R8f = passParameterSem15;
|
||||
R9f = passParameterSem16;
|
||||
R10f.xw = (texture(textureUnitPS0, R4f.xy).xw);
|
||||
R10f.y = (texture(textureUnitPS2, R5f.xy).w);
|
||||
// 0
|
||||
R11f.x = R0f.x + -(R1f.x);
|
||||
R123f.y = (R10f.w * 2.0 + -(1.0));
|
||||
PV0f.y = R123f.y;
|
||||
R123f.z = (R10f.x * 2.0 + -(1.0));
|
||||
PV0f.z = R123f.z;
|
||||
R127f.w = R10f.y * 1.0;
|
||||
R127f.z = 1.0 / R2f.w;
|
||||
PS0f = R127f.z;
|
||||
// 1
|
||||
PV1f.x = mul_nonIEEE(R3f.y, PV0f.z);
|
||||
PV1f.y = mul_nonIEEE(R3f.y, PV0f.y);
|
||||
R11f.z = mul_nonIEEE(R2f.x, PS0f);
|
||||
R10f.w = intBitsToFloat(uf_remappedPS[0].x);
|
||||
R11f.y = mul_nonIEEE(R2f.y, PS0f);
|
||||
PS1f = R11f.y;
|
||||
// 2
|
||||
PV0f.x = R2f.z * R127f.z;
|
||||
R2f.y = R0f.y + -(R1f.y);
|
||||
PV0f.z = mul_nonIEEE(PV1f.x, R127f.w);
|
||||
PV0f.w = mul_nonIEEE(R127f.w, PV1f.y);
|
||||
R2f.w = R7f.x + 0.0;
|
||||
PS0f = R2f.w;
|
||||
// 3
|
||||
R4f.xyz = vec3(R4f.z,R4f.w,R5f.x) + vec3(PV0f.z,PV0f.w,PV0f.z);
|
||||
R4f.w = R5f.y + PV0f.w;
|
||||
R122f.x = (mul_nonIEEE(intBitsToFloat(uf_remappedPS[1].w),PV0f.x) + -(intBitsToFloat(uf_remappedPS[1].y)));
|
||||
PS1f = R122f.x;
|
||||
// 4
|
||||
R5f.x = dot(vec4(R6f.x,R6f.y,R6f.z,-0.0),vec4(intBitsToFloat(uf_remappedPS[2].x),intBitsToFloat(uf_remappedPS[2].y),intBitsToFloat(uf_remappedPS[2].z),0.0));
|
||||
PV0f.x = R5f.x;
|
||||
PV0f.y = R5f.x;
|
||||
PV0f.z = R5f.x;
|
||||
PV0f.w = R5f.x;
|
||||
R127f.z = 1.0 / PS1f;
|
||||
PS0f = R127f.z;
|
||||
// 5
|
||||
backupReg0f = R0f.z;
|
||||
tempf.x = dot(vec4(R6f.x,R6f.y,R6f.z,-0.0),vec4(intBitsToFloat(uf_remappedPS[3].x),intBitsToFloat(uf_remappedPS[3].y),intBitsToFloat(uf_remappedPS[3].z),0.0));
|
||||
PV1f.x = tempf.x;
|
||||
PV1f.y = tempf.x;
|
||||
PV1f.z = tempf.x;
|
||||
PV1f.w = tempf.x;
|
||||
R127f.y = tempf.x;
|
||||
R5f.y = backupReg0f + -(R1f.z);
|
||||
PS1f = R5f.y;
|
||||
// 6
|
||||
tempf.x = dot(vec4(R6f.x,R6f.y,R6f.z,-0.0),vec4(intBitsToFloat(uf_remappedPS[4].x),intBitsToFloat(uf_remappedPS[4].y),intBitsToFloat(uf_remappedPS[4].z),0.0));
|
||||
PV0f.x = tempf.x;
|
||||
PV0f.y = tempf.x;
|
||||
PV0f.z = tempf.x;
|
||||
PV0f.w = tempf.x;
|
||||
R2f.z = tempf.x;
|
||||
R3f.z = R7f.y + 0.0;
|
||||
PS0f = R3f.z;
|
||||
// 7
|
||||
backupReg0f = R6f.z;
|
||||
tempf.x = dot(vec4(R6f.x,R6f.y,R6f.z,-0.0),vec4(intBitsToFloat(uf_remappedPS[5].x),intBitsToFloat(uf_remappedPS[5].y),intBitsToFloat(uf_remappedPS[5].z),0.0));
|
||||
PV1f.x = tempf.x;
|
||||
PV1f.y = tempf.x;
|
||||
PV1f.z = tempf.x;
|
||||
PV1f.w = tempf.x;
|
||||
R127f.w = tempf.x;
|
||||
R6f.z = -(backupReg0f);
|
||||
PS1f = R6f.z;
|
||||
// 8
|
||||
redcCUBE(vec4(PS1f,PS1f,R6f.x,R6f.y),vec4(R6f.y,R6f.x,PS1f,PS1f),cubeMapSTM,cubeMapFaceId);
|
||||
R126f.x = cubeMapSTM.x;
|
||||
R126f.y = cubeMapSTM.y;
|
||||
R126f.z = cubeMapSTM.z;
|
||||
R126f.w = intBitsToFloat(cubeMapFaceId);
|
||||
PV0f.x = R126f.x;
|
||||
PV0f.y = R126f.y;
|
||||
PV0f.z = R126f.z;
|
||||
PV0f.w = R126f.w;
|
||||
R6f.y = -(intBitsToFloat(uf_remappedPS[1].z)) * R127f.z;
|
||||
PS0f = R6f.y;
|
||||
// 9
|
||||
backupReg0f = R0f.w;
|
||||
PV1f.x = R127f.w * R127f.w;
|
||||
R0f.y = R7f.z + 0.0;
|
||||
R10f.z = PV0f.w;
|
||||
R0f.w = (backupReg0f * 2.0 + -(1.0));
|
||||
PS1f = 1.0 / abs(PV0f.z);
|
||||
// 10
|
||||
R123f.x = (R2f.z * R2f.z + PV1f.x);
|
||||
PV0f.x = R123f.x;
|
||||
R123f.z = (mul_nonIEEE(R126f.y,PS1f) + 1.5);
|
||||
PV0f.z = R123f.z;
|
||||
R123f.w = (mul_nonIEEE(R126f.x,PS1f) + 1.5);
|
||||
PV0f.w = R123f.w;
|
||||
// 11
|
||||
R10f.x = PV0f.z;
|
||||
R10f.y = PV0f.w;
|
||||
R0f.x = (R127f.y * R127f.y + PV0f.x);
|
||||
PS1f = R0f.x;
|
||||
R10f.xyz = (textureLod(textureUnitPS10, vec4(redcCUBEReverse(R10f.xy,floatBitsToInt(R10f.z)),cubeMapArrayIndex10),R10f.w).xyz);
|
||||
R7f.xyzw = (texture(textureUnitPS1, R4f.xy).xyzw);
|
||||
R4f.y = (texture(textureUnitPS4, R11f.zy).x);
|
||||
R11f.y = (texture(textureUnitPS0, R4f.zw).w);
|
||||
// 0
|
||||
R123f.x = (R5f.x * R5f.x + R0f.x);
|
||||
PV0f.x = R123f.x;
|
||||
PV0f.y = R10f.x * 1.0;
|
||||
PV0f.z = R10f.y * 1.0;
|
||||
PV0f.w = R10f.z * 1.0;
|
||||
R126f.x = mul_nonIEEE(R7f.z, R7f.z);
|
||||
PS0f = R126f.x;
|
||||
// 1
|
||||
R127f.x = (mul_nonIEEE(PV0f.w,intBitsToFloat(uf_remappedPS[6].y)) + 0.0);
|
||||
R123f.y = (mul_nonIEEE(PV0f.z,intBitsToFloat(uf_remappedPS[6].y)) + 0.0);
|
||||
PV1f.y = R123f.y;
|
||||
R123f.z = (mul_nonIEEE(PV0f.y,intBitsToFloat(uf_remappedPS[6].y)) + 0.0);
|
||||
PV1f.z = R123f.z;
|
||||
R126f.w = mul_nonIEEE(R7f.x, R7f.x);
|
||||
tempResultf = 1.0 / sqrt(PV0f.x);
|
||||
PS1f = tempResultf;
|
||||
// 2
|
||||
backupReg0f = R126f.x;
|
||||
R126f.x = (mul_nonIEEE(R5f.y,backupReg0f) + R1f.z);
|
||||
PV0f.y = mul_nonIEEE(R7f.y, R7f.y);
|
||||
PV0f.z = mul_nonIEEE(R2f.z, PS1f);
|
||||
R127f.w = (mul_nonIEEE(intBitsToFloat(uf_remappedPS[0].w),PV1f.z) + R2f.w);
|
||||
R126f.z = (mul_nonIEEE(intBitsToFloat(uf_remappedPS[0].w),PV1f.y) + R3f.z);
|
||||
PS0f = R126f.z;
|
||||
// 3
|
||||
R123f.x = (mul_nonIEEE(intBitsToFloat(uf_remappedPS[0].w),R127f.x) + R0f.y);
|
||||
PV1f.x = R123f.x;
|
||||
PV1f.y = max(PV0f.z, -(PV0f.z));
|
||||
R123f.z = (mul_nonIEEE(R11f.x,R126f.w) + R1f.x);
|
||||
PV1f.z = R123f.z;
|
||||
R123f.w = (mul_nonIEEE(R2f.y,PV0f.y) + R1f.y);
|
||||
PV1f.w = R123f.w;
|
||||
// 4
|
||||
backupReg0f = R126f.z;
|
||||
PV0f.x = max(PV1f.y, intBitsToFloat(0x3e99999a));
|
||||
R127f.y = mul_nonIEEE(PV1f.z, R127f.w);
|
||||
PV0f.y = R127f.y;
|
||||
R126f.z = mul_nonIEEE(R126f.x, PV1f.x);
|
||||
PV0f.z = R126f.z;
|
||||
R127f.w = mul_nonIEEE(PV1f.w, backupReg0f);
|
||||
PV0f.w = R127f.w;
|
||||
PS0f = R11f.y + R0f.w;
|
||||
PS0f = clamp(PS0f, 0.0, 1.0);
|
||||
// 5
|
||||
PV1f.x = -(PV0f.w) + intBitsToFloat(uf_remappedPS[7].y);
|
||||
PV1f.y = -(PV0f.y) + intBitsToFloat(uf_remappedPS[7].x);
|
||||
PV1f.z = -(PV0f.z) + intBitsToFloat(uf_remappedPS[7].z);
|
||||
PV1f.w = min(PV0f.x, 1.0);
|
||||
PS1f = mul_nonIEEE(R7f.w, PS0f);
|
||||
// 6
|
||||
backupReg0f = R1f.w;
|
||||
R126f.x = (mul_nonIEEE(PV1f.y,R9f.y) + R127f.y);
|
||||
PV0f.x = R126f.x;
|
||||
R127f.y = (mul_nonIEEE(PV1f.x,R9f.y) + R127f.w);
|
||||
PV0f.y = R127f.y;
|
||||
PV0f.z = PV1f.w + intBitsToFloat(0xbe99999a);
|
||||
R127f.w = (mul_nonIEEE(PV1f.z,R9f.y) + R126f.z);
|
||||
PV0f.w = R127f.w;
|
||||
R1f.w = mul_nonIEEE(backupReg0f, PS1f);
|
||||
PS0f = R1f.w;
|
||||
// 7
|
||||
PV1f.x = R8f.z + -(PV0f.w);
|
||||
PV1f.y = PV0f.z * intBitsToFloat(0x3fb6db6e);
|
||||
PV1f.z = R8f.y + -(PV0f.y);
|
||||
PV1f.w = R8f.x + -(PV0f.x);
|
||||
// 8
|
||||
backupReg0f = R127f.y;
|
||||
PV0f.x = -(PV1f.y) + 1.0;
|
||||
R127f.y = (mul_nonIEEE(PV1f.w,R8f.w) + R126f.x);
|
||||
PV0f.y = R127f.y;
|
||||
R126f.z = (mul_nonIEEE(PV1f.x,R8f.w) + R127f.w);
|
||||
PV0f.z = R126f.z;
|
||||
R127f.w = (mul_nonIEEE(PV1f.z,R8f.w) + backupReg0f);
|
||||
PV0f.w = R127f.w;
|
||||
// 9
|
||||
PV1f.x = -(PV0f.w) + intBitsToFloat(uf_remappedPS[8].y);
|
||||
PV1f.y = -(PV0f.y) + intBitsToFloat(uf_remappedPS[8].x);
|
||||
PV1f.z = -(PV0f.z) + intBitsToFloat(uf_remappedPS[8].z);
|
||||
PV1f.w = mul_nonIEEE(PV0f.x, PV0f.x);
|
||||
// 10
|
||||
backupReg0f = R6f.y;
|
||||
R6f.x = (mul_nonIEEE(PV1f.y,R9f.x) + R127f.y);
|
||||
R6f.y = (mul_nonIEEE(PV1f.x,R9f.x) + R127f.w);
|
||||
R8f.z = (PV1f.w * intBitsToFloat(0x42c80000) + backupReg0f);
|
||||
R6f.z = (mul_nonIEEE(PV1f.z,R9f.x) + R126f.z);
|
||||
PS0f = R6f.z;
|
||||
// 0
|
||||
R123f.y = (mul_nonIEEE(R4f.y,intBitsToFloat(uf_remappedPS[1].w)) + intBitsToFloat(uf_remappedPS[1].x));
|
||||
PV0f.y = R123f.y;
|
||||
// 1
|
||||
PV1f.y = PV0f.y + -(R8f.z);
|
||||
// 2
|
||||
PV0f.x = max(PV1f.y, 0.0);
|
||||
// 3
|
||||
PV1f.w = min(PV0f.x, intBitsToFloat(0x42c80000));
|
||||
// 4
|
||||
PV0f.z = PV1f.w + -0.0;
|
||||
// 5
|
||||
PV1f.y = PV0f.z * intBitsToFloat(0x3c23d70a);
|
||||
PV1f.y = clamp(PV1f.y, 0.0, 1.0);
|
||||
// 6
|
||||
PV0f.x = mul_nonIEEE(R1f.w, PV1f.y);
|
||||
PV0f.x = clamp(PV0f.x, 0.0, 1.0);
|
||||
// 7
|
||||
R6f.w = mul_nonIEEE(R3f.x, PV0f.x);
|
||||
// export
|
||||
if( ((vec4(R6f.x, R6f.y, R6f.z, R6f.w)).a > uf_alphaTestRef) == false) discard;
|
||||
|
||||
|
||||
#if ($enableFogCloudsColor == 0)
|
||||
passPixelColor0 = vec4(R6f.x, R6f.y, R6f.z, R6f.w*$fogCloudsOpacity);
|
||||
#else
|
||||
passPixelColor0 = vec4($fogCloudsRed, $fogCloudsGreen, $fogCloudsBlue, R6f.w*$fogCloudsOpacity);
|
||||
#endif
|
||||
}
|
@ -1,983 +0,0 @@
|
||||
[Definition]
|
||||
titleIds = 00050000101C9300,00050000101C9400,00050000101C9500
|
||||
name = Fog and Mist
|
||||
path = "The Legend of Zelda: Breath of the Wild/Mods/Fog and Mist"
|
||||
description = Allows you to make various fog types in the game less visible or change their colors.||Made by Skalfate.
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
$setting:int = 0
|
||||
|
||||
$enableGroundFogColor:int = 1
|
||||
$groundFogRed = 1.0
|
||||
$groundFogGreen = 1.0
|
||||
$groundFogBlue = 1.0
|
||||
$groundFogOpacity = 1.0
|
||||
$groundFogBrightness = 1.0
|
||||
|
||||
$enableWaterFogColor:int = 1
|
||||
$waterFogRed = 1.0
|
||||
$waterFogGreen = 1.0
|
||||
$waterFogBlue = 1.0
|
||||
$waterFogOpacity = 1.0
|
||||
|
||||
$enableGreeneryFogColor:int = 1
|
||||
$greeneryFogRed = 1.0
|
||||
$greeneryFogGreen = 1.0
|
||||
$greeneryFogBlue = 1.0
|
||||
$greeneryFogOpacity = 1.0
|
||||
$greeneryFogBrightness = 1.0
|
||||
|
||||
$enableDistanceFogColor:int = 1
|
||||
$distanceFogRed = 1.0
|
||||
$distanceFogGreen = 1.0
|
||||
$distanceFogBlue = 1.0
|
||||
$distanceFogOpacity = 1.0
|
||||
|
||||
$enableFogCloudsColor:int = 1
|
||||
$fogCloudsRed = 1.0
|
||||
$fogCloudsGreen = 1.0
|
||||
$fogCloudsBlue = 1.0
|
||||
$fogCloudsOpacity = 1.0
|
||||
|
||||
$enableCastleFogColor:int = 1
|
||||
$castleFogRed = 1.0
|
||||
$castleFogGreen = 1.0
|
||||
$castleFogBlue = 1.0
|
||||
$castleFogOpacity = 1.0
|
||||
|
||||
$enableGanonAuraColor:int = 1
|
||||
$ganonAuraRed = 1.0
|
||||
$ganonAuraGreen = 1.0
|
||||
$ganonAuraBlue = 1.0
|
||||
$ganonAuraOpacity = 1.0
|
||||
|
||||
# Setting Selector
|
||||
|
||||
[Preset]
|
||||
name = Ground Fog
|
||||
category = Fog Settings
|
||||
default = 1
|
||||
$setting:int = 0
|
||||
|
||||
[Preset]
|
||||
name = Water Fog
|
||||
category = Fog Settings
|
||||
$setting:int = 1
|
||||
|
||||
[Preset]
|
||||
name = Greenery Fog (e.g. trees, bushes and vines)
|
||||
category = Fog Settings
|
||||
default = 1
|
||||
$setting:int = 2
|
||||
|
||||
[Preset]
|
||||
name = Distance Fog
|
||||
category = Fog Settings
|
||||
$setting:int = 3
|
||||
|
||||
[Preset]
|
||||
name = Mist Clouds
|
||||
category = Fog Settings
|
||||
$setting:int = 4
|
||||
|
||||
[Preset]
|
||||
name = Hyrule Castle Fog/Aura
|
||||
category = Fog Settings
|
||||
$setting:int = 5
|
||||
|
||||
|
||||
# Ground Fog
|
||||
|
||||
[Preset]
|
||||
name = 100% Opacity (Default)
|
||||
category = Ground Fog Visibility
|
||||
condition = $setting == 0
|
||||
default = 1
|
||||
$groundFogOpacity = 1.0
|
||||
|
||||
[Preset]
|
||||
name = 80% Opacity
|
||||
category = Ground Fog Visibility
|
||||
condition = $setting == 0
|
||||
$groundFogOpacity = 0.8
|
||||
|
||||
[Preset]
|
||||
name = 60% Opacity
|
||||
category = Ground Fog Visibility
|
||||
condition = $setting == 0
|
||||
$groundFogOpacity = 0.6
|
||||
|
||||
[Preset]
|
||||
name = 50% Opacity
|
||||
category = Ground Fog Visibility
|
||||
condition = $setting == 0
|
||||
$groundFogOpacity = 0.5
|
||||
|
||||
[Preset]
|
||||
name = 40% Opacity
|
||||
category = Ground Fog Visibility
|
||||
condition = $setting == 0
|
||||
$groundFogOpacity = 0.4
|
||||
|
||||
[Preset]
|
||||
name = 20% Opacity
|
||||
category = Ground Fog Visibility
|
||||
condition = $setting == 0
|
||||
$groundFogOpacity = 0.2
|
||||
|
||||
[Preset]
|
||||
name = 10% Opacity
|
||||
category = Ground Fog Visibility
|
||||
condition = $setting == 0
|
||||
$groundFogOpacity = 0.1
|
||||
|
||||
[Preset]
|
||||
name = 0% Opacity
|
||||
category = Ground Fog Visibility
|
||||
condition = $setting == 0
|
||||
$groundFogOpacity = 0.0
|
||||
|
||||
[Preset]
|
||||
name = 0.5x Brightness
|
||||
category = Ground Fog Brightness
|
||||
condition = $setting == 0
|
||||
$groundFogBrightness = 0.5
|
||||
|
||||
[Preset]
|
||||
name = 0.75x Brightness
|
||||
category = Ground Fog Brightness
|
||||
condition = $setting == 0
|
||||
$groundFogBrightness = 0.75
|
||||
|
||||
[Preset]
|
||||
name = 1x Brightness (Default)
|
||||
category = Ground Fog Brightness
|
||||
default = 1
|
||||
condition = $setting == 0
|
||||
$groundFogBrightness = 1.0
|
||||
|
||||
[Preset]
|
||||
name = 1.5x Brightness
|
||||
category = Ground Fog Brightness
|
||||
condition = $setting == 0
|
||||
$groundFogBrightness = 1.5
|
||||
|
||||
[Preset]
|
||||
name = 2x Brightness
|
||||
category = Ground Fog Brightness
|
||||
condition = $setting == 0
|
||||
$groundFogBrightness = 2.0
|
||||
|
||||
[Preset]
|
||||
name = 3x Brightness
|
||||
category = Ground Fog Brightness
|
||||
condition = $setting == 0
|
||||
$groundFogBrightness = 3.0
|
||||
|
||||
[Preset]
|
||||
name = 4x Brightness
|
||||
category = Ground Fog Brightness
|
||||
condition = $setting == 0
|
||||
$groundFogBrightness = 4.0
|
||||
|
||||
[Preset]
|
||||
name = Normal (Default)
|
||||
category = Ground Fog Color
|
||||
condition = $setting == 0
|
||||
default = 1
|
||||
$enableGroundFogColor:int = 0
|
||||
|
||||
[Preset]
|
||||
name = Black Fog
|
||||
category = Ground Fog Color
|
||||
condition = $setting == 0
|
||||
$groundFogRed = 1.0
|
||||
$groundFogGreen = 1.0
|
||||
$groundFogBlue = 1.0
|
||||
|
||||
[Preset]
|
||||
name = Gray Fog
|
||||
category = Ground Fog Color
|
||||
condition = $setting == 0
|
||||
$groundFogRed = 0.75
|
||||
$groundFogGreen = 0.75
|
||||
$groundFogBlue = 0.75
|
||||
|
||||
[Preset]
|
||||
name = Navy Fog
|
||||
category = Ground Fog Color
|
||||
condition = $setting == 0
|
||||
$groundFogRed = 0.0
|
||||
$groundFogGreen = 0.0
|
||||
$groundFogBlue = 0.5
|
||||
|
||||
[Preset]
|
||||
name = Blue Fog
|
||||
category = Ground Fog Color
|
||||
condition = $setting == 0
|
||||
$groundFogRed = 0.0
|
||||
$groundFogGreen = 0.0
|
||||
$groundFogBlue = 1.0
|
||||
|
||||
[Preset]
|
||||
name = Cyan Fog
|
||||
category = Ground Fog Color
|
||||
condition = $setting == 0
|
||||
$groundFogRed = 0.0
|
||||
$groundFogGreen = 0.5
|
||||
$groundFogBlue = 0.5
|
||||
|
||||
[Preset]
|
||||
name = Green Fog
|
||||
category = Ground Fog Color
|
||||
condition = $setting == 0
|
||||
$groundFogRed = 0.0
|
||||
$groundFogGreen = 1.0
|
||||
$groundFogBlue = 0.0
|
||||
|
||||
[Preset]
|
||||
name = Red Fog
|
||||
category = Ground Fog Color
|
||||
condition = $setting == 0
|
||||
$groundFogRed = 1.0
|
||||
$groundFogGreen = 0.0
|
||||
$groundFogBlue = 0.0
|
||||
|
||||
# Water Fog
|
||||
|
||||
[Preset]
|
||||
name = 100% Opacity (Default)
|
||||
category = Water Fog Visibility
|
||||
condition = $setting == 1
|
||||
default = 1
|
||||
$waterFogOpacity = 1.0
|
||||
|
||||
[Preset]
|
||||
name = 80% Opacity
|
||||
category = Water Fog Visibility
|
||||
condition = $setting == 1
|
||||
$waterFogOpacity = 0.8
|
||||
|
||||
[Preset]
|
||||
name = 60% Opacity
|
||||
category = Water Fog Visibility
|
||||
condition = $setting == 1
|
||||
$waterFogOpacity = 0.6
|
||||
|
||||
[Preset]
|
||||
name = 50% Opacity
|
||||
category = Water Fog Visibility
|
||||
condition = $setting == 1
|
||||
$waterFogOpacity = 0.5
|
||||
|
||||
[Preset]
|
||||
name = 40% Opacity
|
||||
category = Water Fog Visibility
|
||||
condition = $setting == 1
|
||||
$waterFogOpacity = 0.4
|
||||
|
||||
[Preset]
|
||||
name = 20% Opacity
|
||||
category = Water Fog Visibility
|
||||
condition = $setting == 1
|
||||
$waterFogOpacity = 0.2
|
||||
|
||||
[Preset]
|
||||
name = 10% Opacity
|
||||
category = Water Fog Visibility
|
||||
condition = $setting == 1
|
||||
$waterFogOpacity = 0.1
|
||||
|
||||
[Preset]
|
||||
name = 0% Opacity
|
||||
category = Water Fog Visibility
|
||||
condition = $setting == 1
|
||||
$waterFogOpacity = 0.0
|
||||
|
||||
[Preset]
|
||||
name = Normal (Default)
|
||||
category = Water Fog Color
|
||||
condition = $setting == 1
|
||||
default = 1
|
||||
$enableWaterFogColor:int = 0
|
||||
|
||||
[Preset]
|
||||
name = Black Fog
|
||||
category = Water Fog Color
|
||||
condition = $setting == 1
|
||||
$waterFogRed = 1.0
|
||||
$waterFogGreen = 1.0
|
||||
$waterFogBlue = 1.0
|
||||
|
||||
[Preset]
|
||||
name = Gray Fog
|
||||
category = Water Fog Color
|
||||
condition = $setting == 1
|
||||
$waterFogRed = 0.75
|
||||
$waterFogGreen = 0.75
|
||||
$waterFogBlue = 0.75
|
||||
|
||||
[Preset]
|
||||
name = Navy Fog
|
||||
category = Water Fog Color
|
||||
condition = $setting == 1
|
||||
$waterFogRed = 0.0
|
||||
$waterFogGreen = 0.0
|
||||
$waterFogBlue = 0.5
|
||||
|
||||
[Preset]
|
||||
name = Blue Fog
|
||||
category = Water Fog Color
|
||||
condition = $setting == 1
|
||||
$waterFogRed = 0.0
|
||||
$waterFogGreen = 0.0
|
||||
$waterFogBlue = 1.0
|
||||
|
||||
[Preset]
|
||||
name = Cyan Fog
|
||||
category = Water Fog Color
|
||||
condition = $setting == 1
|
||||
$waterFogRed = 0.0
|
||||
$waterFogGreen = 0.5
|
||||
$waterFogBlue = 0.5
|
||||
|
||||
[Preset]
|
||||
name = Green Fog
|
||||
category = Water Fog Color
|
||||
condition = $setting == 1
|
||||
$waterFogRed = 0.0
|
||||
$waterFogGreen = 1.0
|
||||
$waterFogBlue = 0.0
|
||||
|
||||
[Preset]
|
||||
name = Red Fog
|
||||
category = Water Fog Color
|
||||
condition = $setting == 1
|
||||
$waterFogRed = 1.0
|
||||
$waterFogGreen = 0.0
|
||||
$waterFogBlue = 0.0
|
||||
|
||||
# Greenery Fog
|
||||
|
||||
[Preset]
|
||||
name = 100% Opacity (Default)
|
||||
category = Greenery Fog Visibility
|
||||
condition = $setting == 2
|
||||
default = 1
|
||||
$greeneryFogOpacity = 1.0
|
||||
|
||||
[Preset]
|
||||
name = 80% Opacity
|
||||
category = Greenery Fog Visibility
|
||||
condition = $setting == 2
|
||||
$greeneryFogOpacity = 0.8
|
||||
|
||||
[Preset]
|
||||
name = 60% Opacity
|
||||
category = Greenery Fog Visibility
|
||||
condition = $setting == 2
|
||||
$greeneryFogOpacity = 0.6
|
||||
|
||||
[Preset]
|
||||
name = 50% Opacity
|
||||
category = Greenery Fog Visibility
|
||||
condition = $setting == 2
|
||||
$greeneryFogOpacity = 0.5
|
||||
|
||||
[Preset]
|
||||
name = 40% Opacity
|
||||
category = Greenery Fog Visibility
|
||||
condition = $setting == 2
|
||||
$greeneryFogOpacity = 0.4
|
||||
|
||||
[Preset]
|
||||
name = 20% Opacity
|
||||
category = Greenery Fog Visibility
|
||||
condition = $setting == 2
|
||||
$greeneryFogOpacity = 0.2
|
||||
|
||||
[Preset]
|
||||
name = 10% Opacity
|
||||
category = Greenery Fog Visibility
|
||||
condition = $setting == 2
|
||||
$greeneryFogOpacity = 0.1
|
||||
|
||||
[Preset]
|
||||
name = 0% Opacity
|
||||
category = Greenery Fog Visibility
|
||||
condition = $setting == 2
|
||||
$greeneryFogOpacity = 0.0
|
||||
|
||||
[Preset]
|
||||
name = 0.5x Brightness
|
||||
category = Greenery Fog Brightness
|
||||
condition = $setting == 2
|
||||
$greeneryFogBrightness = 0.5
|
||||
|
||||
[Preset]
|
||||
name = 0.75x Brightness
|
||||
category = Greenery Fog Brightness
|
||||
condition = $setting == 2
|
||||
$greeneryFogBrightness = 0.75
|
||||
|
||||
[Preset]
|
||||
name = 1x Brightness (Default)
|
||||
category = Greenery Fog Brightness
|
||||
default = 1
|
||||
condition = $setting == 2
|
||||
$greeneryFogBrightness = 1.0
|
||||
|
||||
[Preset]
|
||||
name = 1.5x Brightness
|
||||
category = Greenery Fog Brightness
|
||||
condition = $setting == 2
|
||||
$greeneryFogBrightness = 1.5
|
||||
|
||||
[Preset]
|
||||
name = 2x Brightness
|
||||
category = Greenery Fog Brightness
|
||||
condition = $setting == 2
|
||||
$greeneryFogBrightness = 2.0
|
||||
|
||||
[Preset]
|
||||
name = 3x Brightness
|
||||
category = Greenery Fog Brightness
|
||||
condition = $setting == 2
|
||||
$greeneryFogBrightness = 3.0
|
||||
|
||||
[Preset]
|
||||
name = 4x Brightness
|
||||
category = Greenery Fog Brightness
|
||||
condition = $setting == 2
|
||||
$greeneryFogBrightness = 4.0
|
||||
|
||||
[Preset]
|
||||
name = Normal (Default)
|
||||
category = Greenery Fog Color
|
||||
condition = $setting == 2
|
||||
default = 1
|
||||
$enableGreeneryFogColor:int = 0
|
||||
|
||||
[Preset]
|
||||
name = Black Fog
|
||||
category = Greenery Fog Color
|
||||
condition = $setting == 2
|
||||
$greeneryFogRed = 1.0
|
||||
$greeneryFogGreen = 1.0
|
||||
$greeneryFogBlue = 1.0
|
||||
|
||||
[Preset]
|
||||
name = Gray Fog
|
||||
category = Greenery Fog Color
|
||||
condition = $setting == 2
|
||||
$greeneryFogRed = 0.75
|
||||
$greeneryFogGreen = 0.75
|
||||
$greeneryFogBlue = 0.75
|
||||
|
||||
[Preset]
|
||||
name = Navy Fog
|
||||
category = Greenery Fog Color
|
||||
condition = $setting == 2
|
||||
$greeneryFogRed = 0.0
|
||||
$greeneryFogGreen = 0.0
|
||||
$greeneryFogBlue = 0.5
|
||||
|
||||
[Preset]
|
||||
name = Blue Fog
|
||||
category = Greenery Fog Color
|
||||
condition = $setting == 2
|
||||
$greeneryFogRed = 0.0
|
||||
$greeneryFogGreen = 0.0
|
||||
$greeneryFogBlue = 1.0
|
||||
|
||||
[Preset]
|
||||
name = Cyan Fog
|
||||
category = Greenery Fog Color
|
||||
condition = $setting == 2
|
||||
$greeneryFogRed = 0.0
|
||||
$greeneryFogGreen = 0.5
|
||||
$greeneryFogBlue = 0.5
|
||||
|
||||
[Preset]
|
||||
name = Green Fog
|
||||
category = Greenery Fog Color
|
||||
condition = $setting == 2
|
||||
$greeneryFogRed = 0.0
|
||||
$greeneryFogGreen = 1.0
|
||||
$greeneryFogBlue = 0.0
|
||||
|
||||
[Preset]
|
||||
name = Red Fog
|
||||
category = Greenery Fog Color
|
||||
condition = $setting == 2
|
||||
$greeneryFogRed = 1.0
|
||||
$greeneryFogGreen = 0.0
|
||||
$greeneryFogBlue = 0.0
|
||||
|
||||
# Distance Fog
|
||||
|
||||
[Preset]
|
||||
name = 100% Opacity (Default)
|
||||
category = Distance Fog Visibility
|
||||
condition = $setting == 3
|
||||
default = 1
|
||||
$distanceFogOpacity = 1.0
|
||||
|
||||
[Preset]
|
||||
name = 80% Opacity
|
||||
category = Distance Fog Visibility
|
||||
condition = $setting == 3
|
||||
$distanceFogOpacity = 0.8
|
||||
|
||||
[Preset]
|
||||
name = 60% Opacity
|
||||
category = Distance Fog Visibility
|
||||
condition = $setting == 3
|
||||
$distanceFogOpacity = 0.6
|
||||
|
||||
[Preset]
|
||||
name = 50% Opacity
|
||||
category = Distance Fog Visibility
|
||||
condition = $setting == 3
|
||||
$distanceFogOpacity = 0.5
|
||||
|
||||
[Preset]
|
||||
name = 40% Opacity
|
||||
category = Distance Fog Visibility
|
||||
condition = $setting == 3
|
||||
$distanceFogOpacity = 0.4
|
||||
|
||||
[Preset]
|
||||
name = 20% Opacity
|
||||
category = Distance Fog Visibility
|
||||
condition = $setting == 3
|
||||
$distanceFogOpacity = 0.2
|
||||
|
||||
[Preset]
|
||||
name = 10% Opacity
|
||||
category = Distance Fog Visibility
|
||||
condition = $setting == 3
|
||||
$distanceFogOpacity = 0.1
|
||||
|
||||
[Preset]
|
||||
name = 0% Opacity
|
||||
category = Distance Fog Visibility
|
||||
condition = $setting == 3
|
||||
$distanceFogOpacity = 0.0
|
||||
|
||||
[Preset]
|
||||
name = Normal (Default)
|
||||
category = Distance Fog Color
|
||||
condition = $setting == 3
|
||||
default = 1
|
||||
$enableDistanceFogColor:int = 0
|
||||
|
||||
[Preset]
|
||||
name = Black Fog
|
||||
category = Distance Fog Color
|
||||
condition = $setting == 3
|
||||
$distanceFogRed = 1.0
|
||||
$distanceFogGreen = 1.0
|
||||
$distanceFogBlue = 1.0
|
||||
|
||||
[Preset]
|
||||
name = Gray Fog
|
||||
category = Distance Fog Color
|
||||
condition = $setting == 3
|
||||
$distanceFogRed = 0.75
|
||||
$distanceFogGreen = 0.75
|
||||
$distanceFogBlue = 0.75
|
||||
|
||||
[Preset]
|
||||
name = Navy Fog
|
||||
category = Distance Fog Color
|
||||
condition = $setting == 3
|
||||
$distanceFogRed = 0.0
|
||||
$distanceFogGreen = 0.0
|
||||
$distanceFogBlue = 0.5
|
||||
|
||||
[Preset]
|
||||
name = Blue Fog
|
||||
category = Distance Fog Color
|
||||
condition = $setting == 3
|
||||
$distanceFogRed = 0.0
|
||||
$distanceFogGreen = 0.0
|
||||
$distanceFogBlue = 1.0
|
||||
|
||||
[Preset]
|
||||
name = Cyan Fog
|
||||
category = Distance Fog Color
|
||||
condition = $setting == 3
|
||||
$distanceFogRed = 0.0
|
||||
$distanceFogGreen = 0.5
|
||||
$distanceFogBlue = 0.5
|
||||
|
||||
[Preset]
|
||||
name = Green Fog
|
||||
category = Distance Fog Color
|
||||
condition = $setting == 3
|
||||
$distanceFogRed = 0.0
|
||||
$distanceFogGreen = 1.0
|
||||
$distanceFogBlue = 0.0
|
||||
|
||||
[Preset]
|
||||
name = Red Fog
|
||||
category = Distance Fog Color
|
||||
condition = $setting == 3
|
||||
$distanceFogRed = 1.0
|
||||
$distanceFogGreen = 0.0
|
||||
$distanceFogBlue = 0.0
|
||||
|
||||
# Fog Clouds
|
||||
|
||||
[Preset]
|
||||
name = 100% Opacity (Default)
|
||||
category = Fog Clouds Visibility
|
||||
condition = $setting == 4
|
||||
default = 1
|
||||
$fogCloudsOpacity = 1.0
|
||||
|
||||
[Preset]
|
||||
name = 80% Opacity
|
||||
category = Fog Clouds Visibility
|
||||
condition = $setting == 4
|
||||
$fogCloudsOpacity = 0.8
|
||||
|
||||
[Preset]
|
||||
name = 60% Opacity
|
||||
category = Fog Clouds Visibility
|
||||
condition = $setting == 4
|
||||
$fogCloudsOpacity = 0.6
|
||||
|
||||
[Preset]
|
||||
name = 50% Opacity
|
||||
category = Fog Clouds Visibility
|
||||
condition = $setting == 4
|
||||
$fogCloudsOpacity = 0.5
|
||||
|
||||
[Preset]
|
||||
name = 40% Opacity
|
||||
category = Fog Clouds Visibility
|
||||
condition = $setting == 4
|
||||
$fogCloudsOpacity = 0.4
|
||||
|
||||
[Preset]
|
||||
name = 20% Opacity
|
||||
category = Fog Clouds Visibility
|
||||
condition = $setting == 4
|
||||
$fogCloudsOpacity = 0.2
|
||||
|
||||
[Preset]
|
||||
name = 10% Opacity
|
||||
category = Fog Clouds Visibility
|
||||
condition = $setting == 4
|
||||
$fogCloudsOpacity = 0.1
|
||||
|
||||
[Preset]
|
||||
name = 0% Opacity
|
||||
category = Fog Clouds Visibility
|
||||
condition = $setting == 4
|
||||
$fogCloudsOpacity = 0.0
|
||||
|
||||
[Preset]
|
||||
name = Normal (Default)
|
||||
category = Fog Clouds Color
|
||||
condition = $setting == 4
|
||||
default = 1
|
||||
$enableFogCloudsColor:int = 0
|
||||
|
||||
[Preset]
|
||||
name = Black Fog
|
||||
category = Fog Clouds Color
|
||||
condition = $setting == 4
|
||||
$fogCloudsRed = 1.0
|
||||
$fogCloudsGreen = 1.0
|
||||
$fogCloudsBlue = 1.0
|
||||
|
||||
[Preset]
|
||||
name = Gray Fog
|
||||
category = Fog Clouds Color
|
||||
condition = $setting == 4
|
||||
$fogCloudsRed = 0.75
|
||||
$fogCloudsGreen = 0.75
|
||||
$fogCloudsBlue = 0.75
|
||||
|
||||
[Preset]
|
||||
name = Navy Fog
|
||||
category = Fog Clouds Color
|
||||
condition = $setting == 4
|
||||
$fogCloudsRed = 0.0
|
||||
$fogCloudsGreen = 0.0
|
||||
$fogCloudsBlue = 0.5
|
||||
|
||||
[Preset]
|
||||
name = Blue Fog
|
||||
category = Fog Clouds Color
|
||||
condition = $setting == 4
|
||||
$fogCloudsRed = 0.0
|
||||
$fogCloudsGreen = 0.0
|
||||
$fogCloudsBlue = 1.0
|
||||
|
||||
[Preset]
|
||||
name = Cyan Fog
|
||||
category = Fog Clouds Color
|
||||
condition = $setting == 4
|
||||
$fogCloudsRed = 0.0
|
||||
$fogCloudsGreen = 0.5
|
||||
$fogCloudsBlue = 0.5
|
||||
|
||||
[Preset]
|
||||
name = Green Fog
|
||||
category = Fog Clouds Color
|
||||
condition = $setting == 4
|
||||
$fogCloudsRed = 0.0
|
||||
$fogCloudsGreen = 1.0
|
||||
$fogCloudsBlue = 0.0
|
||||
|
||||
[Preset]
|
||||
name = Red Fog
|
||||
category = Fog Clouds Color
|
||||
condition = $setting == 4
|
||||
$fogCloudsRed = 1.0
|
||||
$fogCloudsGreen = 0.0
|
||||
$fogCloudsBlue = 0.0
|
||||
|
||||
# Hyrule Castle Fog
|
||||
|
||||
[Preset]
|
||||
name = 100% Opacity (Default)
|
||||
category = Castle Fog Visibility
|
||||
condition = $setting == 5
|
||||
default = 1
|
||||
$castleFogOpacity = 1.0
|
||||
|
||||
[Preset]
|
||||
name = 80% Opacity
|
||||
category = Castle Fog Visibility
|
||||
condition = $setting == 5
|
||||
$castleFogOpacity = 0.8
|
||||
|
||||
[Preset]
|
||||
name = 60% Opacity
|
||||
category = Castle Fog Visibility
|
||||
condition = $setting == 5
|
||||
$castleFogOpacity = 0.6
|
||||
|
||||
[Preset]
|
||||
name = 50% Opacity
|
||||
category = Castle Fog Visibility
|
||||
condition = $setting == 5
|
||||
$castleFogOpacity = 0.5
|
||||
|
||||
[Preset]
|
||||
name = 40% Opacity
|
||||
category = Castle Fog Visibility
|
||||
condition = $setting == 5
|
||||
$castleFogOpacity = 0.4
|
||||
|
||||
[Preset]
|
||||
name = 20% Opacity
|
||||
category = Castle Fog Visibility
|
||||
condition = $setting == 5
|
||||
$castleFogOpacity = 0.2
|
||||
|
||||
[Preset]
|
||||
name = 10% Opacity
|
||||
category = Castle Fog Visibility
|
||||
condition = $setting == 5
|
||||
$castleFogOpacity = 0.1
|
||||
|
||||
[Preset]
|
||||
name = 0% Opacity
|
||||
category = Castle Fog Visibility
|
||||
condition = $setting == 5
|
||||
$castleFogOpacity = 0.0
|
||||
|
||||
[Preset]
|
||||
name = Normal (Default)
|
||||
category = Castle Fog Color
|
||||
condition = $setting == 5
|
||||
default = 1
|
||||
$enableCastleFogColor:int = 0
|
||||
|
||||
[Preset]
|
||||
name = Black Fog
|
||||
category = Castle Fog Color
|
||||
condition = $setting == 5
|
||||
$castleFogRed = 1.0
|
||||
$castleFogGreen = 1.0
|
||||
$castleFogBlue = 1.0
|
||||
|
||||
[Preset]
|
||||
name = Gray Fog
|
||||
category = Castle Fog Color
|
||||
condition = $setting == 5
|
||||
$castleFogRed = 0.75
|
||||
$castleFogGreen = 0.75
|
||||
$castleFogBlue = 0.75
|
||||
|
||||
[Preset]
|
||||
name = Navy Fog
|
||||
category = Castle Fog Color
|
||||
condition = $setting == 5
|
||||
$castleFogRed = 0.0
|
||||
$castleFogGreen = 0.0
|
||||
$castleFogBlue = 0.5
|
||||
|
||||
[Preset]
|
||||
name = Blue Fog
|
||||
category = Castle Fog Color
|
||||
condition = $setting == 5
|
||||
$castleFogRed = 0.0
|
||||
$castleFogGreen = 0.0
|
||||
$castleFogBlue = 1.0
|
||||
|
||||
[Preset]
|
||||
name = Cyan Fog
|
||||
category = Castle Fog Color
|
||||
condition = $setting == 5
|
||||
$castleFogRed = 0.0
|
||||
$castleFogGreen = 0.5
|
||||
$castleFogBlue = 0.5
|
||||
|
||||
[Preset]
|
||||
name = Green Fog
|
||||
category = Castle Fog Color
|
||||
condition = $setting == 5
|
||||
$castleFogRed = 0.0
|
||||
$castleFogGreen = 1.0
|
||||
$castleFogBlue = 0.0
|
||||
|
||||
[Preset]
|
||||
name = Red Fog
|
||||
category = Castle Fog Color
|
||||
condition = $setting == 5
|
||||
$castleFogRed = 1.0
|
||||
$castleFogGreen = 0.0
|
||||
$castleFogBlue = 0.0
|
||||
|
||||
|
||||
# Hyrule Castle Ganon's Aura
|
||||
|
||||
[Preset]
|
||||
name = 300% Opacity
|
||||
category = Ganon's Aura Visibility
|
||||
condition = $setting == 6
|
||||
$ganonAuraOpacity = 2.0
|
||||
|
||||
[Preset]
|
||||
name = 200% Opacity
|
||||
category = Ganon's Aura Visibility
|
||||
condition = $setting == 6
|
||||
$ganonAuraOpacity = 2.0
|
||||
|
||||
[Preset]
|
||||
name = 150% Opacity
|
||||
category = Ganon's Aura Visibility
|
||||
condition = $setting == 6
|
||||
$ganonAuraOpacity = 1.5
|
||||
|
||||
[Preset]
|
||||
name = 100% Opacity (Default)
|
||||
category = Ganon's Aura Visibility
|
||||
condition = $setting == 6
|
||||
default = 1
|
||||
$ganonAuraOpacity = 1.0
|
||||
|
||||
[Preset]
|
||||
name = 80% Opacity
|
||||
category = Ganon's Aura Visibility
|
||||
condition = $setting == 6
|
||||
$ganonAuraOpacity = 0.8
|
||||
|
||||
[Preset]
|
||||
name = 60% Opacity
|
||||
category = Ganon's Aura Visibility
|
||||
condition = $setting == 6
|
||||
$ganonAuraOpacity = 0.6
|
||||
|
||||
[Preset]
|
||||
name = 50% Opacity
|
||||
category = Ganon's Aura Visibility
|
||||
condition = $setting == 6
|
||||
$ganonAuraOpacity = 0.5
|
||||
|
||||
[Preset]
|
||||
name = 40% Opacity
|
||||
category = Ganon's Aura Visibility
|
||||
condition = $setting == 6
|
||||
$ganonAuraOpacity = 0.4
|
||||
|
||||
[Preset]
|
||||
name = 20% Opacity
|
||||
category = Ganon's Aura Visibility
|
||||
condition = $setting == 6
|
||||
$ganonAuraOpacity = 0.2
|
||||
|
||||
[Preset]
|
||||
name = 10% Opacity
|
||||
category = Ganon's Aura Visibility
|
||||
condition = $setting == 6
|
||||
$ganonAuraOpacity = 0.2
|
||||
|
||||
[Preset]
|
||||
name = 0% Opacity
|
||||
category = Ganon's Aura Visibility
|
||||
condition = $setting == 6
|
||||
$ganonAuraOpacity = 0.0
|
||||
|
||||
[Preset]
|
||||
name = Normal (Default)
|
||||
category = Ganon's Aura Color
|
||||
condition = $setting == 6
|
||||
default = 1
|
||||
$enableGanonAuraColor:int = 0
|
||||
|
||||
[Preset]
|
||||
name = Black Aura
|
||||
category = Ganon's Aura Color
|
||||
condition = $setting == 6
|
||||
$ganonAuraRed = 1.0
|
||||
$ganonAuraGreen = 1.0
|
||||
$ganonAuraBlue = 1.0
|
||||
|
||||
[Preset]
|
||||
name = Navy Aura
|
||||
category = Ganon's Aura Color
|
||||
condition = $setting == 6
|
||||
$ganonAuraRed = 0.0
|
||||
$ganonAuraGreen = 0.0
|
||||
$ganonAuraBlue = 0.5
|
||||
|
||||
[Preset]
|
||||
name = Blue Aura
|
||||
category = Ganon's Aura Color
|
||||
condition = $setting == 6
|
||||
$ganonAuraRed = 0.0
|
||||
$ganonAuraGreen = 0.0
|
||||
$ganonAuraBlue = 1.0
|
||||
|
||||
[Preset]
|
||||
name = Cyan Aura
|
||||
category = Ganon's Aura Color
|
||||
condition = $setting == 6
|
||||
$ganonAuraRed = 0.0
|
||||
$ganonAuraGreen = 0.5
|
||||
$ganonAuraBlue = 0.5
|
||||
|
||||
[Preset]
|
||||
name = Green Aura
|
||||
category = Ganon's Aura Color
|
||||
condition = $setting == 6
|
||||
$ganonAuraRed = 0.0
|
||||
$ganonAuraGreen = 1.0
|
||||
$ganonAuraBlue = 0.0
|
||||
|
||||
[Preset]
|
||||
name = Red Aura
|
||||
category = Ganon's Aura Color
|
||||
condition = $setting == 6
|
||||
$ganonAuraRed = 1.0
|
||||
$ganonAuraGreen = 0.0
|
||||
$ganonAuraBlue = 0.0
|
@ -0,0 +1,4 @@
|
||||
[BotW_MenuCursorSpeed_V208]
|
||||
moduleMatches = 0x6267BFD0
|
||||
|
||||
0x10327D60 = .float $cursorSpeed ; sets cursor speed in a static memory address that's also used by the GameSpeed patch to read the cursor speed
|
80
src/BreathOfTheWild/Mods/MenuCursorSpeed/rules.txt
Normal file
80
src/BreathOfTheWild/Mods/MenuCursorSpeed/rules.txt
Normal file
@ -0,0 +1,80 @@
|
||||
[Definition]
|
||||
titleIds = 00050000101C9300,00050000101C9400,00050000101C9500
|
||||
name = Menu Navigation Speed
|
||||
path = "The Legend of Zelda: Breath of the Wild/Mods/Menu Navigation Speed"
|
||||
description = Change the speed at which you can navigate the cursor through the menus.|Requires you to use FPS++.||Made by Exzap.
|
||||
version = 6
|
||||
|
||||
|
||||
[Default]
|
||||
$cursorSpeed = 1.0
|
||||
|
||||
[Preset]
|
||||
name = 0.7x
|
||||
category = Menu Navigation Speed
|
||||
$cursorSpeed = 0.7
|
||||
|
||||
[Preset]
|
||||
name = 0.8x
|
||||
category = Menu Navigation Speed
|
||||
$cursorSpeed = 0.8
|
||||
|
||||
[Preset]
|
||||
name = 0.9x
|
||||
category = Menu Navigation Speed
|
||||
$cursorSpeed = 0.9
|
||||
|
||||
[Preset]
|
||||
name = 1.0x (Default)
|
||||
category = Menu Navigation Speed
|
||||
default = 1
|
||||
|
||||
[Preset]
|
||||
name = 1.05x
|
||||
category = Menu Navigation Speed
|
||||
$cursorSpeed = 1.05
|
||||
|
||||
[Preset]
|
||||
name = 1.1x
|
||||
category = Menu Navigation Speed
|
||||
$cursorSpeed = 1.1
|
||||
|
||||
[Preset]
|
||||
name = 1.15x
|
||||
category = Menu Navigation Speed
|
||||
$cursorSpeed = 1.15
|
||||
|
||||
[Preset]
|
||||
name = 1.2x
|
||||
category = Menu Navigation Speed
|
||||
$cursorSpeed = 1.2
|
||||
|
||||
[Preset]
|
||||
name = 1.25x
|
||||
category = Menu Navigation Speed
|
||||
$cursorSpeed = 1.2
|
||||
|
||||
[Preset]
|
||||
name = 1.5x
|
||||
category = Menu Navigation Speed
|
||||
$cursorSpeed = 1.5
|
||||
|
||||
[Preset]
|
||||
name = 1.75x
|
||||
category = Menu Navigation Speed
|
||||
$cursorSpeed = 1.75
|
||||
|
||||
[Preset]
|
||||
name = 2.0x
|
||||
category = Menu Navigation Speed
|
||||
$cursorSpeed = 2.0
|
||||
|
||||
[Preset]
|
||||
name = 2.5x
|
||||
category = Menu Navigation Speed
|
||||
$cursorSpeed = 2.5
|
||||
|
||||
[Preset]
|
||||
name = 3x
|
||||
category = Menu Navigation Speed
|
||||
$cursorSpeed = 3
|
@ -0,0 +1,822 @@
|
||||
#version 430
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
#extension GL_ARB_separate_shader_objects : enable
|
||||
|
||||
// shader 1c7db40ff5d693ab -- Links and all NPCs RGb renderer, all npcs fog rgb renderer, sun-side facing brightness
|
||||
#define npcfogopacity $npcfogopacity
|
||||
#define npcfogred $npcfogred
|
||||
#define npcfoggreen $npcfoggreen
|
||||
#define npcfogblue $npcfogblue
|
||||
|
||||
// start of shader inputs/outputs, predetermined by Cemu. Do not touch
|
||||
#ifdef VULKAN
|
||||
#define ATTR_LAYOUT(__vkSet, __location) layout(set = __vkSet, location = __location)
|
||||
#define UNIFORM_BUFFER_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(set = __vkSet, binding = __vkLocation, std140)
|
||||
#define TEXTURE_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(set = __vkSet, binding = __vkLocation)
|
||||
#define GET_FRAGCOORD() vec4(gl_FragCoord.xy*uf_fragCoordScale.xy,gl_FragCoord.zw)
|
||||
#else
|
||||
#define ATTR_LAYOUT(__vkSet, __location) layout(location = __location)
|
||||
#define UNIFORM_BUFFER_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(binding = __glLocation, std140)
|
||||
#define TEXTURE_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(binding = __glLocation)
|
||||
#define GET_FRAGCOORD() vec4(gl_FragCoord.xy*uf_fragCoordScale,gl_FragCoord.zw)
|
||||
#endif
|
||||
#ifdef VULKAN
|
||||
layout(set = 1, binding = 11) uniform ufBlock
|
||||
{
|
||||
uniform ivec4 uf_remappedPS[33];
|
||||
uniform vec4 uf_fragCoordScale;
|
||||
};
|
||||
#else
|
||||
uniform ivec4 uf_remappedPS[33];
|
||||
uniform vec2 uf_fragCoordScale;
|
||||
#endif
|
||||
TEXTURE_LAYOUT(0, 1, 0) uniform sampler2D textureUnitPS0;
|
||||
TEXTURE_LAYOUT(2, 1, 1) uniform sampler2D textureUnitPS2;
|
||||
TEXTURE_LAYOUT(3, 1, 2) uniform sampler2D textureUnitPS3;
|
||||
TEXTURE_LAYOUT(4, 1, 3) uniform sampler2D textureUnitPS4;
|
||||
TEXTURE_LAYOUT(5, 1, 4) uniform sampler2D textureUnitPS5;
|
||||
TEXTURE_LAYOUT(6, 1, 5) uniform sampler2D textureUnitPS6;
|
||||
TEXTURE_LAYOUT(7, 1, 6) uniform samplerCubeArray textureUnitPS7;
|
||||
TEXTURE_LAYOUT(11, 1, 7) uniform sampler2D textureUnitPS11;
|
||||
TEXTURE_LAYOUT(12, 1, 8) uniform sampler2D textureUnitPS12;
|
||||
TEXTURE_LAYOUT(14, 1, 9) uniform sampler2D textureUnitPS14;
|
||||
TEXTURE_LAYOUT(15, 1, 10) uniform sampler2D textureUnitPS15;
|
||||
layout(location = 0) in vec4 passParameterSem0;
|
||||
layout(location = 1) in vec4 passParameterSem2;
|
||||
layout(location = 2) in vec4 passParameterSem6;
|
||||
layout(location = 0) out vec4 passPixelColor0;
|
||||
layout(location = 1) out vec4 passPixelColor1;
|
||||
layout(location = 2) out vec4 passPixelColor2;
|
||||
layout(location = 3) out vec4 passPixelColor3;
|
||||
layout(location = 4) out vec4 passPixelColor4;
|
||||
// end of shader inputs/outputs
|
||||
|
||||
void redcCUBE(vec4 src0, vec4 src1, out vec3 stm, out int faceId)
|
||||
{
|
||||
// stm -> x .. s, y .. t, z .. MajorAxis*2.0
|
||||
vec3 inputCoord = normalize(vec3(src1.y, src1.x, src0.x));
|
||||
float rx = inputCoord.x;
|
||||
float ry = inputCoord.y;
|
||||
float rz = inputCoord.z;
|
||||
if( abs(rx) > abs(ry) && abs(rx) > abs(rz) )
|
||||
{
|
||||
stm.z = rx*2.0;
|
||||
stm.xy = vec2(ry,rz);
|
||||
if( rx >= 0.0 )
|
||||
{
|
||||
faceId = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
faceId = 1;
|
||||
}
|
||||
}
|
||||
else if( abs(ry) > abs(rx) && abs(ry) > abs(rz) )
|
||||
{
|
||||
stm.z = ry*2.0;
|
||||
stm.xy = vec2(rx,rz);
|
||||
if( ry >= 0.0 )
|
||||
{
|
||||
faceId = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
faceId = 3;
|
||||
}
|
||||
}
|
||||
else //if( abs(rz) > abs(ry) && abs(rz) > abs(rx) )
|
||||
{
|
||||
stm.z = rz*2.0;
|
||||
stm.xy = vec2(rx,ry);
|
||||
if( rz >= 0.0 )
|
||||
{
|
||||
faceId = 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
faceId = 5;
|
||||
}
|
||||
}
|
||||
}
|
||||
vec3 redcCUBEReverse(vec2 st, int faceId)
|
||||
{
|
||||
st.yx = st.xy;
|
||||
vec3 v;
|
||||
float majorAxis = 1.0;
|
||||
if( faceId == 0 )
|
||||
{
|
||||
v.yz = (st-vec2(1.5))*(majorAxis*2.0);
|
||||
v.x = 1.0;
|
||||
}
|
||||
else if( faceId == 1 )
|
||||
{
|
||||
v.yz = (st-vec2(1.5))*(majorAxis*2.0);
|
||||
v.x = -1.0;
|
||||
}
|
||||
else if( faceId == 2 )
|
||||
{
|
||||
v.xz = (st-vec2(1.5))*(majorAxis*2.0);
|
||||
v.y = 1.0;
|
||||
}
|
||||
else if( faceId == 3 )
|
||||
{
|
||||
v.xz = (st-vec2(1.5))*(majorAxis*2.0);
|
||||
v.y = -1.0;
|
||||
}
|
||||
else if( faceId == 4 )
|
||||
{
|
||||
v.xy = (st-vec2(1.5))*(majorAxis*2.0);
|
||||
v.z = 1.0;
|
||||
}
|
||||
else
|
||||
{
|
||||
v.xy = (st-vec2(1.5))*(majorAxis*2.0);
|
||||
v.z = -1.0;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
int clampFI32(int v)
|
||||
{
|
||||
if( v == 0x7FFFFFFF )
|
||||
return floatBitsToInt(1.0);
|
||||
else if( v == 0xFFFFFFFF )
|
||||
return floatBitsToInt(0.0);
|
||||
return floatBitsToInt(clamp(intBitsToFloat(v), 0.0, 1.0));
|
||||
}
|
||||
float mul_nonIEEE(float a, float b){ if( a == 0.0 || b == 0.0 ) return 0.0; return a*b; }
|
||||
void main()
|
||||
{
|
||||
ivec4 R0i = ivec4(0);
|
||||
ivec4 R1i = ivec4(0);
|
||||
ivec4 R2i = ivec4(0);
|
||||
ivec4 R3i = ivec4(0);
|
||||
ivec4 R4i = ivec4(0);
|
||||
ivec4 R5i = ivec4(0);
|
||||
ivec4 R6i = ivec4(0);
|
||||
ivec4 R7i = ivec4(0);
|
||||
ivec4 R8i = ivec4(0);
|
||||
ivec4 R9i = ivec4(0);
|
||||
ivec4 R10i = ivec4(0);
|
||||
ivec4 R11i = ivec4(0);
|
||||
ivec4 R12i = ivec4(0);
|
||||
ivec4 R13i = ivec4(0);
|
||||
ivec4 R14i = ivec4(0);
|
||||
ivec4 R15i = ivec4(0);
|
||||
ivec4 R16i = ivec4(0);
|
||||
ivec4 R17i = ivec4(0);
|
||||
ivec4 R122i = ivec4(0);
|
||||
ivec4 R123i = ivec4(0);
|
||||
ivec4 R124i = ivec4(0);
|
||||
ivec4 R125i = ivec4(0);
|
||||
ivec4 R126i = ivec4(0);
|
||||
ivec4 R127i = ivec4(0);
|
||||
int backupReg0i, backupReg1i, backupReg2i, backupReg3i, backupReg4i;
|
||||
ivec4 PV0i = ivec4(0), PV1i = ivec4(0);
|
||||
int PS0i = 0, PS1i = 0;
|
||||
ivec4 tempi = ivec4(0);
|
||||
float tempResultf;
|
||||
int tempResulti;
|
||||
ivec4 ARi = ivec4(0);
|
||||
bool predResult = true;
|
||||
bool activeMaskStack[2];
|
||||
bool activeMaskStackC[3];
|
||||
activeMaskStack[0] = false;
|
||||
activeMaskStackC[0] = false;
|
||||
activeMaskStackC[1] = false;
|
||||
activeMaskStack[0] = true;
|
||||
activeMaskStackC[0] = true;
|
||||
activeMaskStackC[1] = true;
|
||||
vec3 cubeMapSTM;
|
||||
int cubeMapFaceId;
|
||||
float cubeMapArrayIndex7 = 0.0;
|
||||
R0i = floatBitsToInt(passParameterSem0);
|
||||
R1i = floatBitsToInt(passParameterSem2);
|
||||
R2i = floatBitsToInt(passParameterSem6);
|
||||
if( activeMaskStackC[1] == true ) {
|
||||
R3i.w = floatBitsToInt(texture(textureUnitPS6, intBitsToFloat(R0i.xy)).x);
|
||||
R7i.xyzw = floatBitsToInt(texture(textureUnitPS3, intBitsToFloat(R2i.zw)).xyzw);
|
||||
R15i.xyzw = floatBitsToInt(texture(textureUnitPS2, intBitsToFloat(R2i.zw)).xyzw);
|
||||
R2i.xy = floatBitsToInt(texture(textureUnitPS14, intBitsToFloat(R0i.xy)).xw);
|
||||
R4i.xy = floatBitsToInt(texture(textureUnitPS15, intBitsToFloat(R0i.xy)).xy);
|
||||
R16i.xyz = floatBitsToInt(texture(textureUnitPS4, intBitsToFloat(R2i.zw)).xyz);
|
||||
R14i.x = floatBitsToInt(texture(textureUnitPS11, intBitsToFloat(R2i.zw)).x);
|
||||
}
|
||||
if( activeMaskStackC[1] == true ) {
|
||||
// 0
|
||||
R124i.x = floatBitsToInt((intBitsToFloat(R7i.x) * 2.0 + -(1.0)));
|
||||
R125i.y = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R3i.w),intBitsToFloat(uf_remappedPS[0].x)) + intBitsToFloat(uf_remappedPS[1].x)));
|
||||
PV0i.y = R125i.y;
|
||||
R3i.z = 0;
|
||||
R5i.w = 0x3f800000;
|
||||
R126i.y = floatBitsToInt((intBitsToFloat(R7i.y) * 2.0 + -(1.0)));
|
||||
PS0i = R126i.y;
|
||||
// 1
|
||||
R126i.x = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R0i.z), -(intBitsToFloat(PV0i.y))));
|
||||
PV1i.x = R126i.x;
|
||||
R127i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R0i.w), -(intBitsToFloat(PV0i.y))));
|
||||
PV1i.y = R127i.y;
|
||||
R127i.z = floatBitsToInt(-(intBitsToFloat(PV0i.y)));
|
||||
PV1i.z = R127i.z;
|
||||
R127i.w = floatBitsToInt((mul_nonIEEE(intBitsToFloat(PV0i.y),intBitsToFloat(uf_remappedPS[2].x)) + -(intBitsToFloat(uf_remappedPS[2].y))));
|
||||
R127i.w = clampFI32(R127i.w);
|
||||
R126i.z = floatBitsToInt(-(intBitsToFloat(uf_remappedPS[3].w)) + 1.0);
|
||||
PS1i = R126i.z;
|
||||
// 2
|
||||
tempi.x = floatBitsToInt(dot(vec4(intBitsToFloat(PV1i.x),intBitsToFloat(PV1i.y),intBitsToFloat(PV1i.z),-0.0),vec4(intBitsToFloat(PV1i.x),intBitsToFloat(PV1i.y),intBitsToFloat(PV1i.z),0.0)));
|
||||
PV0i.x = tempi.x;
|
||||
PV0i.y = tempi.x;
|
||||
PV0i.z = tempi.x;
|
||||
PV0i.w = tempi.x;
|
||||
PS0i = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV1i.x), intBitsToFloat(uf_remappedPS[4].x)));
|
||||
// 3
|
||||
R127i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R127i.y),intBitsToFloat(uf_remappedPS[4].y)) + intBitsToFloat(PS0i)));
|
||||
R3i.y = floatBitsToInt(-(intBitsToFloat(R127i.w)) + 1.0);
|
||||
PV1i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R126i.x), intBitsToFloat(uf_remappedPS[5].x)));
|
||||
R10i.w = floatBitsToInt(-(intBitsToFloat(R127i.z)) * intBitsToFloat(0x3ba3d70a));
|
||||
PS1i = floatBitsToInt(sqrt(intBitsToFloat(PV0i.x)));
|
||||
// 4
|
||||
R125i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R127i.y),intBitsToFloat(uf_remappedPS[5].y)) + intBitsToFloat(PV1i.z)));
|
||||
PV0i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R126i.x), intBitsToFloat(uf_remappedPS[6].x)));
|
||||
R125i.z = floatBitsToInt((intBitsToFloat(R7i.z) * 2.0 + -(1.0)));
|
||||
R127i.w = floatBitsToInt(max(intBitsToFloat(R15i.y), intBitsToFloat(R15i.z)));
|
||||
PS0i = floatBitsToInt(1.0 / intBitsToFloat(PS1i));
|
||||
// 5
|
||||
backupReg0i = R127i.x;
|
||||
R127i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R127i.y),intBitsToFloat(uf_remappedPS[6].y)) + intBitsToFloat(PV0i.y)));
|
||||
R0i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R127i.y), intBitsToFloat(PS0i)));
|
||||
PV1i.y = R0i.y;
|
||||
R5i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R127i.z), intBitsToFloat(PS0i)));
|
||||
R123i.w = floatBitsToInt((mul_nonIEEE(-(intBitsToFloat(R125i.y)),intBitsToFloat(uf_remappedPS[4].z)) + intBitsToFloat(backupReg0i)));
|
||||
PV1i.w = R123i.w;
|
||||
R3i.x = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R126i.x), intBitsToFloat(PS0i)));
|
||||
PS1i = R3i.x;
|
||||
// 6
|
||||
R123i.x = floatBitsToInt((mul_nonIEEE(-(intBitsToFloat(PV1i.y)),intBitsToFloat(PV1i.y)) + 1.0));
|
||||
PV0i.x = R123i.x;
|
||||
R6i.y = floatBitsToInt(max(intBitsToFloat(R15i.x), intBitsToFloat(R127i.w)));
|
||||
R9i.z = floatBitsToInt(intBitsToFloat(uf_remappedPS[4].w) + intBitsToFloat(PV1i.w));
|
||||
PV0i.z = R9i.z;
|
||||
R123i.w = floatBitsToInt((mul_nonIEEE(-(intBitsToFloat(R125i.y)),intBitsToFloat(uf_remappedPS[5].z)) + intBitsToFloat(R125i.x)));
|
||||
PV0i.w = R123i.w;
|
||||
tempResultf = max(0.0, intBitsToFloat(R3i.y));
|
||||
tempResultf = log2(tempResultf);
|
||||
if( isinf(tempResultf) == true ) tempResultf = -3.40282347E+38F;
|
||||
R127i.y = floatBitsToInt(tempResultf);
|
||||
PS0i = R127i.y;
|
||||
// 7
|
||||
R5i.x = floatBitsToInt(intBitsToFloat(uf_remappedPS[5].w) + intBitsToFloat(PV0i.w));
|
||||
PV1i.x = R5i.x;
|
||||
R8i.y = PV0i.z;
|
||||
R123i.z = floatBitsToInt((mul_nonIEEE(-(intBitsToFloat(R125i.y)),intBitsToFloat(uf_remappedPS[6].z)) + intBitsToFloat(R127i.x)));
|
||||
PV1i.z = R123i.z;
|
||||
R126i.w = floatBitsToInt(intBitsToFloat(R1i.w) + intBitsToFloat(0xbe99999a));
|
||||
tempResultf = 1.0 / sqrt(intBitsToFloat(PV0i.x));
|
||||
R4i.z = floatBitsToInt(tempResultf);
|
||||
PS1i = R4i.z;
|
||||
// 8
|
||||
R9i.x = floatBitsToInt(intBitsToFloat(PV1i.x) * intBitsToFloat(0x3a83126f));
|
||||
PV0i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(uf_remappedPS[3].y), intBitsToFloat(R127i.y)));
|
||||
R8i.z = floatBitsToInt(intBitsToFloat(uf_remappedPS[6].w) + intBitsToFloat(PV1i.z));
|
||||
PV0i.z = R8i.z;
|
||||
R127i.w = floatBitsToInt(mul_nonIEEE(intBitsToFloat(uf_remappedPS[3].x), intBitsToFloat(R127i.y)));
|
||||
R13i.x = floatBitsToInt(min(intBitsToFloat(R2i.x), intBitsToFloat(R2i.y)));
|
||||
PS0i = R13i.x;
|
||||
// 9
|
||||
R127i.x = uf_remappedPS[7].y;
|
||||
R9i.y = floatBitsToInt(intBitsToFloat(PV0i.z) * intBitsToFloat(0x3a83126f));
|
||||
R127i.z = uf_remappedPS[8].y;
|
||||
R125i.w = floatBitsToInt(min(intBitsToFloat(R15i.y), intBitsToFloat(R15i.z)));
|
||||
PS1i = floatBitsToInt(exp2(intBitsToFloat(PV0i.y)));
|
||||
// 10
|
||||
backupReg0i = R127i.w;
|
||||
R123i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R126i.z),intBitsToFloat(PS1i)) + intBitsToFloat(uf_remappedPS[3].w))/2.0);
|
||||
PV0i.x = R123i.x;
|
||||
R2i.y = floatBitsToInt(intBitsToFloat(R6i.y) + intBitsToFloat(0x2edbe6ff));
|
||||
R126i.z = uf_remappedPS[9].y;
|
||||
R127i.w = floatBitsToInt(intBitsToFloat(R13i.x) + intBitsToFloat(0xbecccccd));
|
||||
R125i.x = floatBitsToInt(exp2(intBitsToFloat(backupReg0i)));
|
||||
PS0i = R125i.x;
|
||||
// 11
|
||||
backupReg0i = R126i.w;
|
||||
R123i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R125i.y),intBitsToFloat(uf_remappedPS[10].x)) + -(intBitsToFloat(uf_remappedPS[10].y))));
|
||||
R123i.x = clampFI32(R123i.x);
|
||||
PV1i.x = R123i.x;
|
||||
R11i.y = floatBitsToInt(intBitsToFloat(PV0i.x) + 0.5);
|
||||
R124i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R125i.y), intBitsToFloat(uf_remappedPS[11].y)));
|
||||
R126i.w = floatBitsToInt(intBitsToFloat(backupReg0i) * intBitsToFloat(0x40200001));
|
||||
R126i.w = clampFI32(R126i.w);
|
||||
R14i.y = floatBitsToInt((intBitsToFloat(0xbf59999a) * intBitsToFloat(R4i.y) + 1.0));
|
||||
PS1i = R14i.y;
|
||||
// 12
|
||||
backupReg0i = R0i.y;
|
||||
tempi.x = floatBitsToInt(dot(vec4(intBitsToFloat(R127i.x),intBitsToFloat(R127i.z),intBitsToFloat(R126i.z),-0.0),vec4(intBitsToFloat(R3i.x),intBitsToFloat(backupReg0i),intBitsToFloat(R5i.z),0.0)));
|
||||
tempi.x = clampFI32(tempi.x);
|
||||
PV0i.x = tempi.x;
|
||||
PV0i.y = tempi.x;
|
||||
PV0i.z = tempi.x;
|
||||
PV0i.w = tempi.x;
|
||||
R127i.x = floatBitsToInt(-(intBitsToFloat(PV1i.x)) + 1.0);
|
||||
PS0i = R127i.x;
|
||||
// 13
|
||||
tempi.x = floatBitsToInt(dot(vec4(intBitsToFloat(R124i.x),intBitsToFloat(R126i.y),intBitsToFloat(R125i.z),-0.0),vec4(intBitsToFloat(R124i.x),intBitsToFloat(R126i.y),intBitsToFloat(R125i.z),0.0)));
|
||||
PV1i.x = tempi.x;
|
||||
PV1i.y = tempi.x;
|
||||
PV1i.z = tempi.x;
|
||||
PV1i.w = tempi.x;
|
||||
tempResultf = max(0.0, intBitsToFloat(PV0i.x));
|
||||
tempResultf = log2(tempResultf);
|
||||
if( isinf(tempResultf) == true ) tempResultf = -3.40282347E+38F;
|
||||
PS1i = floatBitsToInt(tempResultf);
|
||||
// 14
|
||||
R0i.x = floatBitsToInt(min(intBitsToFloat(R15i.x), intBitsToFloat(R125i.w)));
|
||||
R12i.y = floatBitsToInt(intBitsToFloat(R127i.w) * intBitsToFloat(0x41200000));
|
||||
R12i.y = clampFI32(R12i.y);
|
||||
R127i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(uf_remappedPS[12].z), intBitsToFloat(PS1i)));
|
||||
R123i.w = floatBitsToInt((mul_nonIEEE(intBitsToFloat(uf_remappedPS[3].z),-(intBitsToFloat(R125i.x))) + intBitsToFloat(uf_remappedPS[3].z)));
|
||||
PV0i.w = R123i.w;
|
||||
PS0i = floatBitsToInt(sqrt(intBitsToFloat(PV1i.x)));
|
||||
// 15
|
||||
R125i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R125i.y),intBitsToFloat(uf_remappedPS[13].x)) + intBitsToFloat(uf_remappedPS[14].w)));
|
||||
R125i.x = clampFI32(R125i.x);
|
||||
R127i.y = floatBitsToInt((intBitsToFloat(PS0i) * 4.0 + intBitsToFloat(0xc0400000)));
|
||||
R127i.y = clampFI32(R127i.y);
|
||||
R126i.z = floatBitsToInt(intBitsToFloat(R126i.w) * intBitsToFloat(0x3dcccccd));
|
||||
R2i.w = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV0i.w), intBitsToFloat(R14i.y)));
|
||||
PS1i = floatBitsToInt(1.0 / intBitsToFloat(PS0i));
|
||||
// 16
|
||||
R17i.x = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R124i.x), intBitsToFloat(PS1i)));
|
||||
R17i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R126i.y), intBitsToFloat(PS1i)));
|
||||
R13i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R125i.z), intBitsToFloat(PS1i)));
|
||||
R127i.w = floatBitsToInt((intBitsToFloat(R125i.y) * intBitsToFloat(0x3ba3d70a) + intBitsToFloat(0xbfe66666)));
|
||||
tempResultf = max(0.0, intBitsToFloat(R127i.x));
|
||||
tempResultf = log2(tempResultf);
|
||||
if( isinf(tempResultf) == true ) tempResultf = -3.40282347E+38F;
|
||||
PS0i = floatBitsToInt(tempResultf);
|
||||
// 17
|
||||
R6i.x = floatBitsToInt(intBitsToFloat(R1i.x) * intBitsToFloat(0x3f4ccccd));
|
||||
R13i.y = floatBitsToInt(intBitsToFloat(R127i.y) + -(0.5));
|
||||
R13i.y = floatBitsToInt(intBitsToFloat(R13i.y) * 4.0);
|
||||
R13i.y = clampFI32(R13i.y);
|
||||
PV1i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(uf_remappedPS[12].x), intBitsToFloat(PS0i)));
|
||||
R6i.w = floatBitsToInt(intBitsToFloat(R1i.y) * intBitsToFloat(0x3f4ccccd));
|
||||
PS1i = floatBitsToInt(exp2(intBitsToFloat(R127i.z)));
|
||||
// 18
|
||||
R8i.x = floatBitsToInt(intBitsToFloat(R1i.z) * intBitsToFloat(0x3f4ccccd));
|
||||
R123i.y = floatBitsToInt((mul_nonIEEE(-(intBitsToFloat(R126i.z)),intBitsToFloat(R127i.w)) + intBitsToFloat(R127i.w)));
|
||||
R123i.y = clampFI32(R123i.y);
|
||||
PV0i.y = R123i.y;
|
||||
R2i.z = floatBitsToInt(-(intBitsToFloat(R2i.w)) + 1.0);
|
||||
R123i.w = floatBitsToInt((mul_nonIEEE(-(intBitsToFloat(uf_remappedPS[12].w)),intBitsToFloat(PS1i)) + 1.0));
|
||||
PV0i.w = R123i.w;
|
||||
PS0i = floatBitsToInt(exp2(intBitsToFloat(PV1i.z)));
|
||||
// 19
|
||||
R12i.x = R1i.w;
|
||||
R12i.x = clampFI32(R12i.x);
|
||||
R123i.y = floatBitsToInt((mul_nonIEEE(-(intBitsToFloat(PS0i)),intBitsToFloat(PV0i.w)) + intBitsToFloat(PV0i.w)));
|
||||
PV1i.y = R123i.y;
|
||||
R6i.z = floatBitsToInt((intBitsToFloat(R126i.w) * intBitsToFloat(0x3dcccccd) + intBitsToFloat(PV0i.y)));
|
||||
PV1i.w = floatBitsToInt(intBitsToFloat(R13i.y) + intBitsToFloat(0x3f4ccccd));
|
||||
PV1i.w = clampFI32(PV1i.w);
|
||||
PS1i = floatBitsToInt(1.0 / intBitsToFloat(R124i.z));
|
||||
// 20
|
||||
R2i.x = floatBitsToInt((intBitsToFloat(PS1i) * intBitsToFloat(0x3dcccccd) + 1.0));
|
||||
R5i.y = R6i.y;
|
||||
R5i.y = clampFI32(R5i.y);
|
||||
R0i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV1i.y), intBitsToFloat(uf_remappedPS[15].w)));
|
||||
R3i.w = floatBitsToInt(intBitsToFloat(PV1i.w) + -(1.0));
|
||||
tempResultf = max(0.0, intBitsToFloat(R125i.x));
|
||||
tempResultf = log2(tempResultf);
|
||||
if( isinf(tempResultf) == true ) tempResultf = -3.40282347E+38F;
|
||||
R0i.w = floatBitsToInt(tempResultf);
|
||||
PS0i = R0i.w;
|
||||
}
|
||||
if( activeMaskStackC[1] == true ) {
|
||||
// 0
|
||||
R126i.x = floatBitsToInt(mul_nonIEEE(intBitsToFloat(uf_remappedPS[16].x), intBitsToFloat(uf_remappedPS[17].w)));
|
||||
PV0i.x = R126i.x;
|
||||
R125i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(uf_remappedPS[16].y), intBitsToFloat(uf_remappedPS[17].w)));
|
||||
PV0i.y = R125i.y;
|
||||
R10i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R0i.z), intBitsToFloat(R14i.y)));
|
||||
PV0i.z = R10i.z;
|
||||
R4i.w = floatBitsToInt(intBitsToFloat(R2i.x) * intBitsToFloat(0x42960000));
|
||||
R126i.w = floatBitsToInt(1.0 / intBitsToFloat(R2i.y));
|
||||
PS0i = R126i.w;
|
||||
// 1
|
||||
R125i.x = PV0i.x;
|
||||
R127i.y = floatBitsToInt((mul_nonIEEE(-(intBitsToFloat(R0i.x)),intBitsToFloat(PS0i)) + 1.0));
|
||||
R126i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(uf_remappedPS[16].z), intBitsToFloat(uf_remappedPS[17].w)));
|
||||
PV1i.z = R126i.z;
|
||||
R123i.w = floatBitsToInt((mul_nonIEEE(-(intBitsToFloat(PV0i.y)),intBitsToFloat(PV0i.y)) + 1.0));
|
||||
PV1i.w = R123i.w;
|
||||
R0i.z = floatBitsToInt((mul_nonIEEE(-(intBitsToFloat(PV0i.z)),intBitsToFloat(R2i.z)) + intBitsToFloat(R2i.z)));
|
||||
PS1i = R0i.z;
|
||||
// 2
|
||||
R127i.x = floatBitsToInt(mul_nonIEEE(intBitsToFloat(uf_remappedPS[13].y), intBitsToFloat(R0i.w)));
|
||||
PV0i.y = PV1i.z;
|
||||
R2i.z = floatBitsToInt(intBitsToFloat(uf_remappedPS[18].x) + -(intBitsToFloat(R6i.x)));
|
||||
R0i.w = floatBitsToInt(intBitsToFloat(uf_remappedPS[18].y) + -(intBitsToFloat(R6i.w)));
|
||||
tempResultf = 1.0 / sqrt(intBitsToFloat(PV1i.w));
|
||||
PS0i = floatBitsToInt(tempResultf);
|
||||
// 3
|
||||
tempi.x = floatBitsToInt(dot(vec4(intBitsToFloat(R3i.x),intBitsToFloat(R5i.z),intBitsToFloat(R5i.z),-0.0),vec4(intBitsToFloat(R125i.x),intBitsToFloat(PV0i.y),intBitsToFloat(R3i.z),0.0)));
|
||||
PV1i.x = tempi.x;
|
||||
PV1i.y = tempi.x;
|
||||
PV1i.z = tempi.x;
|
||||
PV1i.w = tempi.x;
|
||||
PS1i = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PS0i), intBitsToFloat(R4i.z)));
|
||||
// 4
|
||||
backupReg0i = R127i.y;
|
||||
backupReg1i = R127i.x;
|
||||
R127i.x = floatBitsToInt(intBitsToFloat(R127i.y) + intBitsToFloat(0x2edbe6ff));
|
||||
R127i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PS1i), intBitsToFloat(PV1i.x)));
|
||||
R124i.z = backupReg0i;
|
||||
R124i.z = clampFI32(R124i.z);
|
||||
R8i.w = floatBitsToInt(intBitsToFloat(uf_remappedPS[18].z) + -(intBitsToFloat(R8i.x)));
|
||||
PS0i = floatBitsToInt(exp2(intBitsToFloat(backupReg1i)));
|
||||
// 5
|
||||
backupReg0i = R0i.y;
|
||||
tempi.x = floatBitsToInt(dot(vec4(intBitsToFloat(R3i.x),intBitsToFloat(backupReg0i),intBitsToFloat(R5i.z),-0.0),vec4(intBitsToFloat(R126i.x),intBitsToFloat(R125i.y),intBitsToFloat(R126i.z),0.0)));
|
||||
PV1i.x = tempi.x;
|
||||
PV1i.y = tempi.x;
|
||||
PV1i.z = tempi.x;
|
||||
PV1i.w = tempi.x;
|
||||
PS1i = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PS0i), intBitsToFloat(uf_remappedPS[19].w)));
|
||||
// 6
|
||||
R3i.x = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R4i.y), intBitsToFloat(PS1i)));
|
||||
R126i.y = R4i.x;
|
||||
R126i.y = clampFI32(R126i.y);
|
||||
PV0i.z = floatBitsToInt(max(-(intBitsToFloat(PV1i.x)), 0.0));
|
||||
PV0i.w = floatBitsToInt(intBitsToFloat(PV1i.x) + -(intBitsToFloat(R127i.y)));
|
||||
PS0i = floatBitsToInt(1.0 / intBitsToFloat(R127i.x));
|
||||
// 7
|
||||
R125i.x = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R124i.z), intBitsToFloat(PS0i)));
|
||||
PV1i.y = floatBitsToInt(min(intBitsToFloat(PV0i.z), 1.0));
|
||||
R123i.z = floatBitsToInt((mul_nonIEEE(intBitsToFloat(PV0i.w),intBitsToFloat(R3i.y)) + intBitsToFloat(R127i.y)));
|
||||
PV1i.z = R123i.z;
|
||||
R127i.w = floatBitsToInt(intBitsToFloat(R15i.w) * intBitsToFloat(0x437f0000));
|
||||
R127i.y = floatBitsToInt(-(intBitsToFloat(R6i.z)) + 1.0);
|
||||
PS1i = R127i.y;
|
||||
// 8
|
||||
R127i.x = floatBitsToInt(intBitsToFloat(R15i.x) + -(intBitsToFloat(R6i.y)));
|
||||
PV0i.y = floatBitsToInt(max(-(intBitsToFloat(PV1i.z)), intBitsToFloat(0xbf7d70a4)));
|
||||
PV0i.y = floatBitsToInt(intBitsToFloat(PV0i.y) / 2.0);
|
||||
PV0i.z = floatBitsToInt(intBitsToFloat(PV1i.y) * intBitsToFloat(0x40a00000));
|
||||
PV0i.z = clampFI32(PV0i.z);
|
||||
R125i.w = floatBitsToInt(intBitsToFloat(R15i.y) + -(intBitsToFloat(R6i.y)));
|
||||
R124i.w = floatBitsToInt(intBitsToFloat(R15i.z) + -(intBitsToFloat(R6i.y)));
|
||||
PS0i = R124i.w;
|
||||
// 9
|
||||
backupReg0i = R127i.y;
|
||||
backupReg1i = R6i.z;
|
||||
R124i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R3i.w),intBitsToFloat(PV0i.z)) + 1.0));
|
||||
R127i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R126i.w), intBitsToFloat(R5i.y)));
|
||||
R6i.z = floatBitsToInt((mul_nonIEEE(intBitsToFloat(backupReg0i),intBitsToFloat(R126i.y)) + intBitsToFloat(backupReg1i)));
|
||||
R126i.w = floatBitsToInt(intBitsToFloat(PV0i.y) + 0.5);
|
||||
PV1i.w = R126i.w;
|
||||
R3i.w = 0;
|
||||
PS1i = R3i.w;
|
||||
// 10
|
||||
backupReg0i = R127i.x;
|
||||
backupReg1i = R127i.w;
|
||||
R127i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(backupReg0i),intBitsToFloat(R125i.x)) + intBitsToFloat(R6i.y)));
|
||||
R126i.y = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R125i.w),intBitsToFloat(R125i.x)) + intBitsToFloat(R6i.y)));
|
||||
PV0i.z = floatBitsToInt(-(intBitsToFloat(PV1i.w)) + 1.0);
|
||||
R123i.w = floatBitsToInt((intBitsToFloat(PV1i.w) * intBitsToFloat(0xbc996e30) + intBitsToFloat(0x3d981626)));
|
||||
PV0i.w = R123i.w;
|
||||
R127i.w = int(intBitsToFloat(backupReg1i));
|
||||
PS0i = R127i.w;
|
||||
// 11
|
||||
backupReg0i = R125i.x;
|
||||
R125i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R124i.w),intBitsToFloat(backupReg0i)) + intBitsToFloat(R6i.y)));
|
||||
R6i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R1i.y), intBitsToFloat(R124i.x)));
|
||||
R123i.z = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R126i.w),intBitsToFloat(PV0i.w)) + intBitsToFloat(0xbe593484)));
|
||||
PV1i.z = R123i.z;
|
||||
R9i.w = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R1i.x), intBitsToFloat(R124i.x)));
|
||||
PS1i = floatBitsToInt(sqrt(intBitsToFloat(PV0i.z)));
|
||||
// 12
|
||||
R4i.x = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R1i.z), intBitsToFloat(R124i.x)));
|
||||
PV0i.y = floatBitsToInt(intBitsToFloat(PS1i) * intBitsToFloat(0x3f22f983));
|
||||
PV0i.z = floatBitsToInt(intBitsToFloat(0x3f895ef0) * intBitsToFloat(R127i.y));
|
||||
R123i.w = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R126i.w),intBitsToFloat(PV1i.z)) + intBitsToFloat(0x3fc90da4)));
|
||||
PV0i.w = R123i.w;
|
||||
R127i.y = R127i.w & int(1);
|
||||
PS0i = R127i.y;
|
||||
// 13
|
||||
backupReg0i = R2i.w;
|
||||
backupReg0i = R2i.w;
|
||||
R11i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(PV0i.y),-(intBitsToFloat(PV0i.w))) + 1.0));
|
||||
R5i.y = floatBitsToInt((mul_nonIEEE(intBitsToFloat(PV0i.z),intBitsToFloat(R127i.x)) + intBitsToFloat(0xba0a8ec8)));
|
||||
R5i.y = clampFI32(R5i.y);
|
||||
R5i.z = floatBitsToInt((mul_nonIEEE(intBitsToFloat(PV0i.z),intBitsToFloat(R126i.y)) + intBitsToFloat(0xba0a8ec8)));
|
||||
R5i.z = clampFI32(R5i.z);
|
||||
R2i.w = floatBitsToInt((mul_nonIEEE(intBitsToFloat(backupReg0i),-(intBitsToFloat(R10i.z))) + intBitsToFloat(backupReg0i)));
|
||||
R3i.z = floatBitsToInt((mul_nonIEEE(intBitsToFloat(PV0i.z),intBitsToFloat(R125i.x)) + intBitsToFloat(0xba0a8ec8)));
|
||||
R3i.z = clampFI32(R3i.z);
|
||||
PS1i = R3i.z;
|
||||
// 14
|
||||
tempi.x = floatBitsToInt(dot(vec4(intBitsToFloat(R17i.x),intBitsToFloat(R17i.y),intBitsToFloat(R13i.z),-0.0),vec4(intBitsToFloat(uf_remappedPS[16].x),intBitsToFloat(uf_remappedPS[16].y),intBitsToFloat(uf_remappedPS[16].z),0.0)));
|
||||
PV0i.x = tempi.x;
|
||||
PV0i.y = tempi.x;
|
||||
PV0i.z = tempi.x;
|
||||
PV0i.w = tempi.x;
|
||||
PS0i = floatBitsToInt(float(R127i.y));
|
||||
// 15
|
||||
R2i.x = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R16i.x), intBitsToFloat(PS0i)));
|
||||
R2i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R16i.y), intBitsToFloat(PS0i)));
|
||||
R4i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R16i.z), intBitsToFloat(PS0i)));
|
||||
PV1i.w = floatBitsToInt(max(-(intBitsToFloat(PV0i.x)), 0.0));
|
||||
PS1i = floatBitsToInt(intBitsToFloat(R7i.z) * intBitsToFloat(0x3eaaaaab));
|
||||
// 16
|
||||
R123i.x = floatBitsToInt((intBitsToFloat(R7i.y) * intBitsToFloat(0x3eaaaaab) + intBitsToFloat(PS1i)));
|
||||
PV0i.x = R123i.x;
|
||||
PV0i.z = floatBitsToInt(min(intBitsToFloat(PV1i.w), 1.0));
|
||||
PS0i = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R13i.z), -(intBitsToFloat(R3i.w))));
|
||||
// 17
|
||||
backupReg0i = R7i.x;
|
||||
R7i.x = floatBitsToInt((intBitsToFloat(backupReg0i) * intBitsToFloat(0x3eaaaaab) + intBitsToFloat(PV0i.x)));
|
||||
PV1i.y = floatBitsToInt(intBitsToFloat(PV0i.z) + intBitsToFloat(0xbecccccd));
|
||||
R122i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R13i.z),-(intBitsToFloat(R126i.z))) + intBitsToFloat(PS0i)));
|
||||
PS1i = R122i.x;
|
||||
// 18
|
||||
R123i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R17i.y),-(intBitsToFloat(R125i.y))) + intBitsToFloat(PS1i)));
|
||||
PV0i.x = R123i.x;
|
||||
R7i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV1i.y), intBitsToFloat(R4i.w)));
|
||||
R7i.z = clampFI32(R7i.z);
|
||||
// 19
|
||||
R12i.z = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R17i.x),-(intBitsToFloat(R126i.x))) + intBitsToFloat(PV0i.x)));
|
||||
PV1i.z = R12i.z;
|
||||
// 20
|
||||
PV0i.y = PV1i.z;
|
||||
PV0i.y = clampFI32(PV0i.y);
|
||||
// 21
|
||||
R14i.z = floatBitsToInt(intBitsToFloat(PV0i.y) + intBitsToFloat(0xbecccccd));
|
||||
}
|
||||
if( activeMaskStackC[1] == true ) {
|
||||
// 0
|
||||
tempi.x = floatBitsToInt(dot(vec4(intBitsToFloat(R5i.x),intBitsToFloat(R8i.y),intBitsToFloat(R8i.z),intBitsToFloat(R5i.w)),vec4(intBitsToFloat(uf_remappedPS[20].x),intBitsToFloat(uf_remappedPS[20].y),intBitsToFloat(uf_remappedPS[20].z),intBitsToFloat(uf_remappedPS[20].w))));
|
||||
PV0i.x = tempi.x;
|
||||
PV0i.y = tempi.x;
|
||||
PV0i.z = tempi.x;
|
||||
PV0i.w = tempi.x;
|
||||
// 1
|
||||
tempi.x = floatBitsToInt(dot(vec4(intBitsToFloat(R5i.x),intBitsToFloat(R8i.y),intBitsToFloat(R8i.z),intBitsToFloat(R5i.w)),vec4(intBitsToFloat(uf_remappedPS[21].x),intBitsToFloat(uf_remappedPS[21].y),intBitsToFloat(uf_remappedPS[21].z),intBitsToFloat(uf_remappedPS[21].w))));
|
||||
PV1i.x = tempi.x;
|
||||
PV1i.y = tempi.x;
|
||||
PV1i.z = tempi.x;
|
||||
PV1i.w = tempi.x;
|
||||
R126i.z = floatBitsToInt(1.0 / intBitsToFloat(PV0i.x));
|
||||
PS1i = R126i.z;
|
||||
// 2
|
||||
tempi.x = floatBitsToInt(dot(vec4(intBitsToFloat(R5i.x),intBitsToFloat(R8i.y),intBitsToFloat(R8i.z),intBitsToFloat(R5i.w)),vec4(intBitsToFloat(uf_remappedPS[22].x),intBitsToFloat(uf_remappedPS[22].y),intBitsToFloat(uf_remappedPS[22].z),intBitsToFloat(uf_remappedPS[22].w))));
|
||||
PV0i.x = tempi.x;
|
||||
PV0i.y = tempi.x;
|
||||
PV0i.z = tempi.x;
|
||||
PV0i.w = tempi.x;
|
||||
R10i.x = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV1i.x), intBitsToFloat(PS1i)));
|
||||
PS0i = R10i.x;
|
||||
// 3
|
||||
R10i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV0i.x), intBitsToFloat(R126i.z)));
|
||||
}
|
||||
if( activeMaskStackC[1] == true ) {
|
||||
R9i.y = floatBitsToInt(textureLod(textureUnitPS0, intBitsToFloat(R9i.xy),0.0).x);
|
||||
R10i.w = floatBitsToInt(textureLod(textureUnitPS5, intBitsToFloat(R10i.xy),intBitsToFloat(R10i.w)).x);
|
||||
R11i.xyz = floatBitsToInt(texture(textureUnitPS12, intBitsToFloat(R11i.xy)).xyz);
|
||||
}
|
||||
if( activeMaskStackC[1] == true ) {
|
||||
// 0
|
||||
backupReg0i = R9i.y;
|
||||
PV0i.x = floatBitsToInt(intBitsToFloat(R10i.w) + intBitsToFloat(uf_remappedPS[23].z));
|
||||
PV0i.x = clampFI32(PV0i.x);
|
||||
R9i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R11i.x), intBitsToFloat(R6i.z)));
|
||||
R123i.z = floatBitsToInt((intBitsToFloat(backupReg0i) * 2.0 + -(1.0)));
|
||||
PV0i.z = R123i.z;
|
||||
R5i.w = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R11i.y), intBitsToFloat(R6i.z)));
|
||||
R11i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R11i.z), intBitsToFloat(R6i.z)));
|
||||
PS0i = R11i.y;
|
||||
// 1
|
||||
R123i.x = floatBitsToInt((intBitsToFloat(PV0i.z) * intBitsToFloat(0x41c80000) + intBitsToFloat(R9i.z)));
|
||||
PV1i.x = R123i.x;
|
||||
R3i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV0i.x), intBitsToFloat(uf_remappedPS[24].z)));
|
||||
PV1i.y = R3i.y;
|
||||
// 2
|
||||
R4i.y = PV1i.y;
|
||||
PV0i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV1i.y), intBitsToFloat(R12i.y)));
|
||||
R10i.w = floatBitsToInt(-(intBitsToFloat(PV1i.x)) + intBitsToFloat(uf_remappedPS[25].x));
|
||||
// 3
|
||||
PV1i.z = floatBitsToInt(intBitsToFloat(R1i.w) + intBitsToFloat(PV0i.z));
|
||||
PV1i.z = clampFI32(PV1i.z);
|
||||
PV1i.w = floatBitsToInt(intBitsToFloat(PV0i.z) + -(1.0));
|
||||
// 4
|
||||
R123i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R8i.w),intBitsToFloat(PV1i.z)) + intBitsToFloat(R8i.x)));
|
||||
PV0i.x = R123i.x;
|
||||
R123i.y = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R0i.w),intBitsToFloat(PV1i.z)) + intBitsToFloat(R6i.w)));
|
||||
PV0i.y = R123i.y;
|
||||
R123i.z = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R2i.z),intBitsToFloat(PV1i.z)) + intBitsToFloat(R6i.x)));
|
||||
PV0i.z = R123i.z;
|
||||
R123i.w = floatBitsToInt((mul_nonIEEE(intBitsToFloat(PV1i.w),intBitsToFloat(R12i.x)) + 1.0));
|
||||
PV0i.w = R123i.w;
|
||||
// 5
|
||||
PV1i.x = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV0i.w), intBitsToFloat(R7i.z)));
|
||||
PV1i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV0i.x), intBitsToFloat(uf_remappedPS[26].z)));
|
||||
PV1i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV0i.y), intBitsToFloat(uf_remappedPS[26].y)));
|
||||
PV1i.w = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV0i.z), intBitsToFloat(uf_remappedPS[26].x)));
|
||||
// 6
|
||||
PV0i.x = floatBitsToInt(mul_nonIEEE(intBitsToFloat(uf_remappedPS[17].w), intBitsToFloat(PV1i.y)));
|
||||
PV0i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(uf_remappedPS[17].w), intBitsToFloat(PV1i.z)));
|
||||
PV0i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(uf_remappedPS[17].w), intBitsToFloat(PV1i.w)));
|
||||
PV0i.w = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R13i.y), intBitsToFloat(PV1i.x)));
|
||||
// 7
|
||||
R123i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(PV0i.z),intBitsToFloat(PV0i.w)) + intBitsToFloat(R9i.w)));
|
||||
PV1i.x = R123i.x;
|
||||
R123i.z = floatBitsToInt((mul_nonIEEE(intBitsToFloat(PV0i.x),intBitsToFloat(PV0i.w)) + intBitsToFloat(R4i.x)));
|
||||
PV1i.z = R123i.z;
|
||||
R123i.w = floatBitsToInt((mul_nonIEEE(intBitsToFloat(PV0i.y),intBitsToFloat(PV0i.w)) + intBitsToFloat(R6i.y)));
|
||||
PV1i.w = R123i.w;
|
||||
// 8
|
||||
PV0i.x = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV1i.w), intBitsToFloat(R5i.z)));
|
||||
PV0i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV1i.x), intBitsToFloat(R5i.y)));
|
||||
PV0i.w = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV1i.z), intBitsToFloat(R3i.z)));
|
||||
// 9
|
||||
R0i.x = floatBitsToInt((intBitsToFloat(PV0i.y) * intBitsToFloat(0x3f6e896b) + intBitsToFloat(0x3a011b1e)));
|
||||
R0i.y = floatBitsToInt((intBitsToFloat(PV0i.x) * intBitsToFloat(0x3f6e896b) + intBitsToFloat(0x3a011b1e)));
|
||||
R2i.z = floatBitsToInt((intBitsToFloat(PV0i.w) * intBitsToFloat(0x3f6e896b) + intBitsToFloat(0x3a011b1e)));
|
||||
}
|
||||
if( activeMaskStackC[1] == true ) {
|
||||
activeMaskStack[1] = activeMaskStack[0];
|
||||
activeMaskStackC[2] = activeMaskStackC[1];
|
||||
// 0
|
||||
R123i.y = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R10i.w),intBitsToFloat(uf_remappedPS[27].x)) + intBitsToFloat(uf_remappedPS[28].w)));
|
||||
R123i.y = clampFI32(R123i.y);
|
||||
PV0i.y = R123i.y;
|
||||
// 1
|
||||
PV1i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV0i.y), intBitsToFloat(uf_remappedPS[29].w)));
|
||||
// 2
|
||||
PV0i.w = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV1i.z), intBitsToFloat(R14i.y)));
|
||||
// 3
|
||||
R123i.x = floatBitsToInt((mul_nonIEEE(-(intBitsToFloat(PV0i.w)),intBitsToFloat(R0i.z)) + intBitsToFloat(R0i.z)));
|
||||
PV1i.x = R123i.x;
|
||||
PV1i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(PV0i.w), intBitsToFloat(R0i.z)));
|
||||
// 4
|
||||
PV0i.x = floatBitsToInt(mul_nonIEEE(intBitsToFloat(uf_remappedPS[29].y), intBitsToFloat(PV1i.y)));
|
||||
PV0i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(uf_remappedPS[29].z), intBitsToFloat(PV1i.y)));
|
||||
PV0i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(uf_remappedPS[29].x), intBitsToFloat(PV1i.y)));
|
||||
PV0i.w = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R3i.x), intBitsToFloat(PV1i.x)));
|
||||
R5i.z = floatBitsToInt((mul_nonIEEE(-(intBitsToFloat(R3i.x)),intBitsToFloat(PV1i.x)) + intBitsToFloat(PV1i.x)));
|
||||
PS0i = R5i.z;
|
||||
// 5
|
||||
R123i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(uf_remappedPS[19].z),intBitsToFloat(PV0i.w)) + intBitsToFloat(PV0i.y)));
|
||||
PV1i.x = R123i.x;
|
||||
R123i.y = floatBitsToInt((mul_nonIEEE(intBitsToFloat(uf_remappedPS[19].x),intBitsToFloat(PV0i.w)) + intBitsToFloat(PV0i.z)));
|
||||
PV1i.y = R123i.y;
|
||||
R123i.z = floatBitsToInt((mul_nonIEEE(intBitsToFloat(uf_remappedPS[19].y),intBitsToFloat(PV0i.w)) + intBitsToFloat(PV0i.x)));
|
||||
PV1i.z = R123i.z;
|
||||
R4i.w = 0;
|
||||
// 6
|
||||
R123i.y = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R9i.y),intBitsToFloat(R2i.w)) + intBitsToFloat(PV1i.y)));
|
||||
PV0i.y = R123i.y;
|
||||
R123i.z = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R5i.w),intBitsToFloat(R2i.w)) + intBitsToFloat(PV1i.z)));
|
||||
PV0i.z = R123i.z;
|
||||
R123i.w = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R11i.y),intBitsToFloat(R2i.w)) + intBitsToFloat(PV1i.x)));
|
||||
PV0i.w = R123i.w;
|
||||
// 7
|
||||
R4i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(uf_remappedPS[15].x),intBitsToFloat(R10i.z)) + intBitsToFloat(PV0i.y)));
|
||||
R5i.y = floatBitsToInt((mul_nonIEEE(intBitsToFloat(uf_remappedPS[15].y),intBitsToFloat(R10i.z)) + intBitsToFloat(PV0i.z)));
|
||||
R6i.z = floatBitsToInt((mul_nonIEEE(intBitsToFloat(uf_remappedPS[15].z),intBitsToFloat(R10i.z)) + intBitsToFloat(PV0i.w)));
|
||||
// 8
|
||||
predResult = (intBitsToFloat(R14i.x) != intBitsToFloat(0x3dc0c0c1));
|
||||
activeMaskStack[1] = predResult;
|
||||
activeMaskStackC[2] = predResult == true && activeMaskStackC[1] == true;
|
||||
}
|
||||
else {
|
||||
activeMaskStack[1] = false;
|
||||
activeMaskStackC[2] = false;
|
||||
}
|
||||
if( activeMaskStackC[2] == true ) {
|
||||
// 0
|
||||
R3i.xyz = floatBitsToInt(vec3(intBitsToFloat(R2i.x),intBitsToFloat(R2i.y),intBitsToFloat(R4i.z)) + vec3(intBitsToFloat(R0i.x),intBitsToFloat(R0i.y),intBitsToFloat(R2i.z)));
|
||||
R3i.w = 0x3f800000;
|
||||
R0i.x = 0;
|
||||
PS0i = R0i.x;
|
||||
// 1
|
||||
R0i.yzw = ivec3(0,0,0);
|
||||
}
|
||||
activeMaskStack[1] = activeMaskStack[1] == false;
|
||||
activeMaskStackC[2] = activeMaskStack[1] == true && activeMaskStackC[1] == true;
|
||||
if( activeMaskStackC[2] == true ) {
|
||||
// 0
|
||||
tempi.x = floatBitsToInt(dot(vec4(intBitsToFloat(R17i.x),intBitsToFloat(R17i.y),intBitsToFloat(R13i.z),-0.0),vec4(intBitsToFloat(uf_remappedPS[30].x),intBitsToFloat(uf_remappedPS[30].y),intBitsToFloat(uf_remappedPS[30].z),0.0)));
|
||||
PV0i.x = tempi.x;
|
||||
PV0i.y = tempi.x;
|
||||
PV0i.z = tempi.x;
|
||||
PV0i.w = tempi.x;
|
||||
R0i.w = 0x40400000;
|
||||
PS0i = R0i.w;
|
||||
// 1
|
||||
R127i.x = floatBitsToInt(dot(vec4(intBitsToFloat(R17i.x),intBitsToFloat(R17i.y),intBitsToFloat(R13i.z),-0.0),vec4(intBitsToFloat(uf_remappedPS[31].x),intBitsToFloat(uf_remappedPS[31].y),intBitsToFloat(uf_remappedPS[31].z),0.0)));
|
||||
PV1i.x = R127i.x;
|
||||
PV1i.y = R127i.x;
|
||||
PV1i.z = R127i.x;
|
||||
PV1i.w = R127i.x;
|
||||
R127i.z = floatBitsToInt(-(intBitsToFloat(PV0i.x)));
|
||||
PS1i = R127i.z;
|
||||
// 2
|
||||
tempi.x = floatBitsToInt(dot(vec4(intBitsToFloat(R17i.x),intBitsToFloat(R17i.y),intBitsToFloat(R13i.z),-0.0),vec4(intBitsToFloat(uf_remappedPS[32].x),intBitsToFloat(uf_remappedPS[32].y),intBitsToFloat(uf_remappedPS[32].z),0.0)));
|
||||
PV0i.x = tempi.x;
|
||||
PV0i.y = tempi.x;
|
||||
PV0i.z = tempi.x;
|
||||
PV0i.w = tempi.x;
|
||||
R127i.y = tempi.x;
|
||||
PS0i = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R12i.z), intBitsToFloat(R13i.x)));
|
||||
// 3
|
||||
backupReg0i = R127i.x;
|
||||
backupReg0i = R127i.x;
|
||||
backupReg1i = R127i.z;
|
||||
backupReg1i = R127i.z;
|
||||
redcCUBE(vec4(intBitsToFloat(R127i.z),intBitsToFloat(R127i.z),intBitsToFloat(backupReg0i),intBitsToFloat(PV0i.x)),vec4(intBitsToFloat(PV0i.x),intBitsToFloat(backupReg0i),intBitsToFloat(backupReg1i),intBitsToFloat(backupReg1i)),cubeMapSTM,cubeMapFaceId);
|
||||
R127i.x = floatBitsToInt(cubeMapSTM.x);
|
||||
R127i.y = floatBitsToInt(cubeMapSTM.y);
|
||||
R127i.z = floatBitsToInt(cubeMapSTM.z);
|
||||
R127i.w = cubeMapFaceId;
|
||||
PV1i.x = R127i.x;
|
||||
PV1i.y = R127i.y;
|
||||
PV1i.z = R127i.z;
|
||||
PV1i.w = R127i.w;
|
||||
R2i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R3i.y), intBitsToFloat(PS0i)));
|
||||
R2i.z = clampFI32(R2i.z);
|
||||
PS1i = R2i.z;
|
||||
// 4
|
||||
PV0i.x = floatBitsToInt(intBitsToFloat(R14i.z) * intBitsToFloat(0x42960000));
|
||||
PV0i.x = clampFI32(PV0i.x);
|
||||
R0i.z = PV1i.w;
|
||||
PS0i = floatBitsToInt(1.0 / abs(intBitsToFloat(PV1i.z)));
|
||||
// 5
|
||||
backupReg0i = R1i.y;
|
||||
R123i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R127i.x),intBitsToFloat(PS0i)) + 1.5));
|
||||
PV1i.x = R123i.x;
|
||||
R1i.y = floatBitsToInt((mul_nonIEEE(intBitsToFloat(uf_remappedPS[18].y),intBitsToFloat(PV0i.x)) + intBitsToFloat(backupReg0i)));
|
||||
R123i.z = floatBitsToInt((mul_nonIEEE(intBitsToFloat(uf_remappedPS[18].x),intBitsToFloat(PV0i.x)) + intBitsToFloat(R1i.x)));
|
||||
PV1i.z = R123i.z;
|
||||
R123i.w = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R127i.y),intBitsToFloat(PS0i)) + 1.5));
|
||||
PV1i.w = R123i.w;
|
||||
R1i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(uf_remappedPS[18].z),intBitsToFloat(PV0i.x)) + intBitsToFloat(R1i.z)));
|
||||
PS1i = R1i.x;
|
||||
// 6
|
||||
R0i.x = PV1i.w;
|
||||
R0i.y = PV1i.x;
|
||||
R3i.x = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R16i.x), intBitsToFloat(PV1i.z)));
|
||||
PS0i = R3i.x;
|
||||
}
|
||||
if( activeMaskStackC[2] == true ) {
|
||||
R0i.xyz = floatBitsToInt(textureLod(textureUnitPS7, vec4(redcCUBEReverse(intBitsToFloat(R0i.xy),R0i.z),cubeMapArrayIndex7),intBitsToFloat(R0i.w)).xyz);
|
||||
}
|
||||
if( activeMaskStackC[2] == true ) {
|
||||
// 0
|
||||
R123i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(uf_remappedPS[18].y),intBitsToFloat(R2i.z)) + intBitsToFloat(R0i.y)));
|
||||
PV0i.x = R123i.x;
|
||||
R123i.y = floatBitsToInt((mul_nonIEEE(intBitsToFloat(uf_remappedPS[18].x),intBitsToFloat(R2i.z)) + intBitsToFloat(R0i.x)));
|
||||
PV0i.y = R123i.y;
|
||||
R3i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R16i.z), intBitsToFloat(R1i.x)));
|
||||
R123i.w = floatBitsToInt((mul_nonIEEE(intBitsToFloat(uf_remappedPS[18].z),intBitsToFloat(R2i.z)) + intBitsToFloat(R0i.z)));
|
||||
PV0i.w = R123i.w;
|
||||
R3i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R16i.y), intBitsToFloat(R1i.y)));
|
||||
PS0i = R3i.y;
|
||||
// 1
|
||||
R0i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R15i.x),intBitsToFloat(PV0i.y)) + intBitsToFloat(R2i.x)));
|
||||
R0i.y = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R15i.y),intBitsToFloat(PV0i.x)) + intBitsToFloat(R2i.y)));
|
||||
R0i.z = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R15i.z),intBitsToFloat(PV0i.w)) + intBitsToFloat(R4i.z)));
|
||||
R0i.w = 0;
|
||||
R3i.w = 0x3f800000;
|
||||
PS1i = R3i.w;
|
||||
}
|
||||
activeMaskStackC[1] = activeMaskStack[0] == true && activeMaskStackC[0] == true;
|
||||
if( activeMaskStackC[1] == true ) {
|
||||
// 0
|
||||
R1i.w = 0x3f800000;
|
||||
// 1
|
||||
backupReg0i = R3i.x;
|
||||
backupReg1i = R3i.y;
|
||||
backupReg2i = R3i.z;
|
||||
backupReg3i = R3i.w;
|
||||
R3i.xyz = ivec3(backupReg0i,backupReg1i,backupReg2i);
|
||||
R3i.w = backupReg3i;
|
||||
// 2
|
||||
R2i.xyz = ivec3(R0i.x,R0i.y,R0i.z);
|
||||
R2i.w = R0i.w;
|
||||
// 3
|
||||
backupReg0i = R1i.w;
|
||||
R1i.xyz = ivec3(R4i.x,R5i.y,R6i.z);
|
||||
R1i.w = backupReg0i;
|
||||
// 4
|
||||
R0i.xyz = ivec3(R13i.x,R4i.y,R5i.z);
|
||||
R0i.w = R4i.w;
|
||||
// 5
|
||||
R4i.xyz = ivec3(R7i.x,R7i.x,R7i.x);
|
||||
R4i.w = R7i.x;
|
||||
}
|
||||
// export
|
||||
passPixelColor0 = vec4(intBitsToFloat(R0i.x), intBitsToFloat(R0i.y), intBitsToFloat(R0i.z), intBitsToFloat(R0i.w)); // light/shadows on link when sun face side
|
||||
passPixelColor1 = vec4(intBitsToFloat(R1i.x) * npcfogred, intBitsToFloat(R1i.y) * npcfoggreen, intBitsToFloat(R1i.z) * npcfogblue, intBitsToFloat(R1i.w) * npcfogopacity); // link and all npcs body fog rgb
|
||||
passPixelColor2 = vec4(intBitsToFloat(R2i.x), intBitsToFloat(R2i.y), intBitsToFloat(R2i.z), intBitsToFloat(R2i.w)); // link rgb only in celshade removal mode
|
||||
passPixelColor3 = vec4(intBitsToFloat(R3i.x), intBitsToFloat(R3i.y), intBitsToFloat(R3i.z), intBitsToFloat(R3i.w));
|
||||
passPixelColor4 = vec4(intBitsToFloat(R4i.x), intBitsToFloat(R4i.y), intBitsToFloat(R4i.z), intBitsToFloat(R4i.w));
|
||||
}
|
@ -1,9 +1,12 @@
|
||||
#version 430
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
#extension GL_ARB_separate_shader_objects : enable
|
||||
// shader 29c30aaa023dc7e6
|
||||
// Used for: Big Bottom Swirls of Ganon's Aura around Hyrule Castle
|
||||
|
||||
// shader 29c30aaa023dc7e6 -- Ganons middle and bottom big swirl
|
||||
#define aurared $castleaurared
|
||||
#define auragreen $castleauragreen
|
||||
#define aurablue $castleaurablue
|
||||
#define auraopacity $castleauraopacity
|
||||
|
||||
// start of shader inputs/outputs, predetermined by Cemu. Do not touch
|
||||
#ifdef VULKAN
|
||||
@ -163,19 +166,14 @@ PV0f.y = R127f.y;
|
||||
R127f.w = (mul_nonIEEE(PV1f.z,R8f.w) + backupReg0f);
|
||||
PV0f.w = R127f.w;
|
||||
// 9
|
||||
PV1f.x = -(PV0f.w) + intBitsToFloat(uf_remappedPS[1].z);
|
||||
PV1f.y = -(PV0f.x) + intBitsToFloat(uf_remappedPS[1].y);
|
||||
PV1f.z = -(PV0f.y) + intBitsToFloat(uf_remappedPS[1].x);
|
||||
PV1f.x = -(PV0f.w) + intBitsToFloat(uf_remappedPS[1].z); // blue rgb
|
||||
PV1f.y = -(PV0f.x) + intBitsToFloat(uf_remappedPS[1].y); // green rgb
|
||||
PV1f.z = -(PV0f.y) + intBitsToFloat(uf_remappedPS[1].x); // red rgb
|
||||
// 10
|
||||
R1f.x = (mul_nonIEEE(PV1f.z,R9f.x) + R127f.y);
|
||||
R1f.y = (mul_nonIEEE(PV1f.y,R9f.x) + R127f.x);
|
||||
R1f.z = (mul_nonIEEE(PV1f.x,R9f.x) + R127f.w);
|
||||
R1f.x = (mul_nonIEEE(PV1f.z,R9f.x) + R127f.y); // red rgb
|
||||
R1f.y = (mul_nonIEEE(PV1f.y,R9f.x) + R127f.x); // green rgb
|
||||
R1f.z = (mul_nonIEEE(PV1f.x,R9f.x) + R127f.w); // blue rgb
|
||||
// export
|
||||
if( ((vec4(R1f.x, R1f.y, R1f.z, R1f.w)).a > uf_alphaTestRef) == false) discard;
|
||||
|
||||
#if ($enableGanonAuraColor == 0)
|
||||
passPixelColor0 = vec4(R1f.x, R1f.y, R1f.z, R1f.w*$ganonAuraOpacity);
|
||||
#else
|
||||
passPixelColor0 = vec4($ganonAuraRed, $ganonAuraGreen, $ganonAuraBlue, R1f.w*$ganonAuraOpacity);
|
||||
#endif
|
||||
passPixelColor0 = vec4(R1f.x * aurared, R1f.y * auragreen, R1f.z * aurablue, R1f.w * auraopacity); // rgb color and opacity for the middle swirl effect
|
||||
}
|
@ -1,13 +1,12 @@
|
||||
#version 430
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
#extension GL_ARB_separate_shader_objects : enable
|
||||
// shader 2e2543216c04766d
|
||||
// Used for: Fog Around Water
|
||||
|
||||
float fogOpacity = float($waterFogOpacity);
|
||||
float fogRed = float($waterFogOpacity);
|
||||
float fogGreen = float($waterFogOpacity);
|
||||
float fogBlue = float($waterFogOpacity);
|
||||
// shader 2e2543216c04766d -- Water RGB and edge clarity and Distant Water Fog
|
||||
#define waterfoglevel $distantfoglevel
|
||||
#define waterfogred $distantfogred
|
||||
#define waterfoggreen $distantfoggreen
|
||||
#define waterfogblue $distantfogred
|
||||
|
||||
// start of shader inputs/outputs, predetermined by Cemu. Do not touch
|
||||
#ifdef VULKAN
|
||||
@ -687,19 +686,13 @@ R3i.w = floatBitsToInt((intBitsToFloat(R125i.w) * intBitsToFloat(0x3f6e896b) + i
|
||||
R6i.w = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R127i.z), intBitsToFloat(R126i.w)));
|
||||
PS1i = R6i.w;
|
||||
// 22
|
||||
PV0i.y = floatBitsToInt(intBitsToFloat(R4i.x) + intBitsToFloat(R3i.w));
|
||||
PV0i.z = floatBitsToInt(intBitsToFloat(R9i.y) + intBitsToFloat(R8i.y));
|
||||
PV0i.w = floatBitsToInt(intBitsToFloat(R4i.z) + intBitsToFloat(R4i.y));
|
||||
PV0i.y = floatBitsToInt(intBitsToFloat(R4i.x) + intBitsToFloat(R3i.w)); // blue color body water
|
||||
PV0i.z = floatBitsToInt(intBitsToFloat(R9i.y) + intBitsToFloat(R8i.y)); // green color body water
|
||||
PV0i.w = floatBitsToInt(intBitsToFloat(R4i.z) + intBitsToFloat(R4i.y)); // red color body water
|
||||
// 23
|
||||
R6i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R2i.z),intBitsToFloat(PV0i.w)) + intBitsToFloat(R3i.x)));
|
||||
R6i.y = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R2i.z),intBitsToFloat(PV0i.z)) + intBitsToFloat(R3i.y)));
|
||||
R6i.z = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R2i.z),intBitsToFloat(PV0i.y)) + intBitsToFloat(R3i.z)));
|
||||
|
||||
R6i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R2i.z),intBitsToFloat(PV0i.w)) + intBitsToFloat(R3i.x) * waterfogred )); // R3i is water fog color red
|
||||
R6i.y = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R2i.z),intBitsToFloat(PV0i.z)) + intBitsToFloat(R3i.y) * waterfoggreen )); // R3i is water fog green
|
||||
R6i.z = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R2i.z),intBitsToFloat(PV0i.y)) + intBitsToFloat(R3i.z) * waterfogblue )); // R3i is water fog blue
|
||||
// export
|
||||
#if ($enableWaterFogColor == 0)
|
||||
passPixelColor0 = vec4(intBitsToFloat(R6i.x), intBitsToFloat(R6i.y), intBitsToFloat(R6i.z), intBitsToFloat(R6i.w) * fogOpacity);
|
||||
#else
|
||||
passPixelColor0 = vec4(fogRed, fogGreen, fogBlue, intBitsToFloat(R6i.w)*fogOpacity);
|
||||
#endif
|
||||
|
||||
passPixelColor0 = vec4(intBitsToFloat(R6i.x), intBitsToFloat(R6i.y), intBitsToFloat(R6i.z), intBitsToFloat(R6i.w)) * waterfoglevel; // xyz is RGB for water color, and w is edge see through clarity
|
||||
}
|
@ -1,9 +1,12 @@
|
||||
#version 430
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
#extension GL_ARB_separate_shader_objects : enable
|
||||
// shader 397f3d8521c96e30
|
||||
// Used for: Small Top Swirls of Ganon's Aura around Hyrule Castle
|
||||
|
||||
// shader 397f3d8521c96e30 -- ganons castle swirl shader
|
||||
#define aurared $castleaurared
|
||||
#define auragreen $castleauragreen
|
||||
#define aurablue $castleaurablue
|
||||
#define auraopacity $castleauraopacity
|
||||
|
||||
// start of shader inputs/outputs, predetermined by Cemu. Do not touch
|
||||
#ifdef VULKAN
|
||||
@ -196,10 +199,5 @@ R8f.y = (mul_nonIEEE(PV0f.y,R10f.x) + R127f.x);
|
||||
R8f.z = (mul_nonIEEE(PV0f.x,R10f.x) + R127f.w);
|
||||
// export
|
||||
if( ((vec4(R8f.x, R8f.y, R8f.z, R8f.w)).a > uf_alphaTestRef) == false) discard;
|
||||
|
||||
#if ($enableGanonAuraColor == 0)
|
||||
passPixelColor0 = vec4(R8f.x, R8f.y, R8f.z, R8f.w*$ganonAuraOpacity);
|
||||
#else
|
||||
passPixelColor0 = vec4($ganonAuraRed, $ganonAuraGreen, $ganonAuraBlue, R8f.w*$ganonAuraOpacity);
|
||||
#endif
|
||||
passPixelColor0 = vec4(R8f.x * aurared, R8f.y * auragreen, R8f.z * aurablue, R8f.w * auraopacity); // rgb color for the top swirls effect
|
||||
}
|
@ -1,9 +1,13 @@
|
||||
#version 430
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
#extension GL_ARB_separate_shader_objects : enable
|
||||
// shader 527591781440691a
|
||||
// Used for: Distance Fog
|
||||
|
||||
// shader 527591781440691a -- Controls RGb and Opacity of the Fog Clouds in the distance
|
||||
|
||||
#define ffcOpacity $fieldfogcloudsopacity
|
||||
#define ffcRed $fieldfogcloudsred
|
||||
#define ffcGreen $fieldfogcloudsgreen
|
||||
#define ffcBlue $fieldfogcloudsblue
|
||||
|
||||
// start of shader inputs/outputs, predetermined by Cemu. Do not touch
|
||||
#ifdef VULKAN
|
||||
@ -343,10 +347,5 @@ PV1f.x = mul_nonIEEE(R1f.w, PV0f.y);
|
||||
R10f.w = mul_nonIEEE(R3f.x, PV1f.x);
|
||||
// export
|
||||
if( ((vec4(R10f.x, R10f.y, R10f.z, R10f.w)).a > uf_alphaTestRef) == false) discard;
|
||||
|
||||
#if ($enableDistanceFogColor == 0)
|
||||
passPixelColor0 = vec4(R10f.x, R10f.y, R10f.z, R10f.w*$distanceFogOpacity);
|
||||
#else
|
||||
passPixelColor0 = vec4($distanceFogRed, $distanceFogGreen, $distanceFogBlue, R10f.w*$distanceFogOpacity);
|
||||
#endif
|
||||
}
|
||||
passPixelColor0 = vec4(R10f.x * ffcRed, R10f.y * ffcGreen, R10f.z * ffcBlue, R10f.w * ffcOpacity); // RGB for fog fields in the distance
|
||||
}
|
@ -0,0 +1,243 @@
|
||||
#version 430
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
#extension GL_ARB_separate_shader_objects : enable
|
||||
|
||||
// shader 5a8eb2055c65a0c2 -- Something Close to Aura RGB
|
||||
#define aurared $castleaurared
|
||||
#define auragreen $castleauragreen
|
||||
#define aurablue $aurablue
|
||||
#define auraopacity $castleauraopacity
|
||||
|
||||
// start of shader inputs/outputs, predetermined by Cemu. Do not touch
|
||||
#ifdef VULKAN
|
||||
#define ATTR_LAYOUT(__vkSet, __location) layout(set = __vkSet, location = __location)
|
||||
#define UNIFORM_BUFFER_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(set = __vkSet, binding = __vkLocation, std140)
|
||||
#define TEXTURE_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(set = __vkSet, binding = __vkLocation)
|
||||
#define GET_FRAGCOORD() vec4(gl_FragCoord.xy*uf_fragCoordScale.xy,gl_FragCoord.zw)
|
||||
#else
|
||||
#define ATTR_LAYOUT(__vkSet, __location) layout(location = __location)
|
||||
#define UNIFORM_BUFFER_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(binding = __glLocation, std140)
|
||||
#define TEXTURE_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(binding = __glLocation)
|
||||
#define GET_FRAGCOORD() vec4(gl_FragCoord.xy*uf_fragCoordScale,gl_FragCoord.zw)
|
||||
#endif
|
||||
#ifdef VULKAN
|
||||
layout(set = 1, binding = 4) uniform ufBlock
|
||||
{
|
||||
uniform ivec4 uf_remappedPS[5];
|
||||
uniform float uf_alphaTestRef;
|
||||
uniform vec4 uf_fragCoordScale;
|
||||
};
|
||||
#else
|
||||
uniform ivec4 uf_remappedPS[5];
|
||||
uniform float uf_alphaTestRef;
|
||||
uniform vec2 uf_fragCoordScale;
|
||||
#endif
|
||||
TEXTURE_LAYOUT(0, 1, 0) uniform sampler2D textureUnitPS0;
|
||||
TEXTURE_LAYOUT(1, 1, 1) uniform sampler2D textureUnitPS1;
|
||||
TEXTURE_LAYOUT(2, 1, 2) uniform sampler2D textureUnitPS2;
|
||||
TEXTURE_LAYOUT(4, 1, 3) uniform sampler2D textureUnitPS4;
|
||||
layout(location = 0) in vec4 passParameterSem0;
|
||||
layout(location = 1) in vec4 passParameterSem1;
|
||||
layout(location = 2) in vec4 passParameterSem2;
|
||||
layout(location = 3) in vec4 passParameterSem3;
|
||||
layout(location = 4) in vec4 passParameterSem4;
|
||||
layout(location = 5) in vec4 passParameterSem5;
|
||||
layout(location = 6) in vec4 passParameterSem7;
|
||||
layout(location = 7) in vec4 passParameterSem8;
|
||||
layout(location = 8) in vec4 passParameterSem9;
|
||||
layout(location = 9) in vec4 passParameterSem11;
|
||||
layout(location = 10) in vec4 passParameterSem14;
|
||||
layout(location = 11) in vec4 passParameterSem15;
|
||||
layout(location = 12) in vec4 passParameterSem16;
|
||||
layout(location = 0) out vec4 passPixelColor0;
|
||||
// end of shader inputs/outputs
|
||||
int clampFI32(int v)
|
||||
{
|
||||
if( v == 0x7FFFFFFF )
|
||||
return floatBitsToInt(1.0);
|
||||
else if( v == 0xFFFFFFFF )
|
||||
return floatBitsToInt(0.0);
|
||||
return floatBitsToInt(clamp(intBitsToFloat(v), 0.0, 1.0));
|
||||
}
|
||||
float mul_nonIEEE(float a, float b){ if( a == 0.0 || b == 0.0 ) return 0.0; return a*b; }
|
||||
void main()
|
||||
{
|
||||
vec4 R0f = vec4(0.0);
|
||||
vec4 R1f = vec4(0.0);
|
||||
vec4 R2f = vec4(0.0);
|
||||
vec4 R3f = vec4(0.0);
|
||||
vec4 R4f = vec4(0.0);
|
||||
vec4 R5f = vec4(0.0);
|
||||
vec4 R6f = vec4(0.0);
|
||||
vec4 R7f = vec4(0.0);
|
||||
vec4 R8f = vec4(0.0);
|
||||
vec4 R9f = vec4(0.0);
|
||||
vec4 R10f = vec4(0.0);
|
||||
vec4 R11f = vec4(0.0);
|
||||
vec4 R12f = vec4(0.0);
|
||||
vec4 R13f = vec4(0.0);
|
||||
vec4 R122f = vec4(0.0);
|
||||
vec4 R123f = vec4(0.0);
|
||||
vec4 R125f = vec4(0.0);
|
||||
vec4 R126f = vec4(0.0);
|
||||
vec4 R127f = vec4(0.0);
|
||||
float backupReg0f, backupReg1f, backupReg2f, backupReg3f, backupReg4f;
|
||||
vec4 PV0f = vec4(0.0), PV1f = vec4(0.0);
|
||||
float PS0f = 0.0, PS1f = 0.0;
|
||||
vec4 tempf = vec4(0.0);
|
||||
float tempResultf;
|
||||
int tempResulti;
|
||||
ivec4 ARi = ivec4(0);
|
||||
bool predResult = true;
|
||||
vec3 cubeMapSTM;
|
||||
int cubeMapFaceId;
|
||||
R0f = passParameterSem0;
|
||||
R1f = passParameterSem1;
|
||||
R2f = passParameterSem2;
|
||||
R3f = passParameterSem3;
|
||||
R4f = passParameterSem4;
|
||||
R5f = passParameterSem5;
|
||||
R6f = passParameterSem7;
|
||||
R7f = passParameterSem8;
|
||||
R8f = passParameterSem9;
|
||||
R9f = passParameterSem11;
|
||||
R10f = passParameterSem14;
|
||||
R11f = passParameterSem15;
|
||||
R12f = passParameterSem16;
|
||||
R5f.xw = (texture(textureUnitPS0, R7f.xy).xw);
|
||||
// 0
|
||||
R127f.x = R2f.z * R2f.z;
|
||||
R123f.y = (R5f.x * 2.0 + -(1.0));
|
||||
PV0f.y = R123f.y;
|
||||
R4f.z = -(intBitsToFloat(uf_remappedPS[0].z)) + intBitsToFloat(uf_remappedPS[0].w);
|
||||
R123f.w = (R5f.w * 2.0 + -(1.0));
|
||||
PV0f.w = R123f.w;
|
||||
PS0f = 1.0 / R3f.w;
|
||||
// 1
|
||||
R13f.x = mul_nonIEEE(R3f.x, PS0f);
|
||||
PV1f.y = mul_nonIEEE(R5f.y, PV0f.w);
|
||||
PV1f.z = mul_nonIEEE(R4f.y, PV0f.y);
|
||||
R13f.w = mul_nonIEEE(R3f.y, PS0f);
|
||||
R6f.y = 1.0 / R3f.w;
|
||||
PS1f = R6f.y;
|
||||
// 2
|
||||
backupReg0f = R5f.z;
|
||||
backupReg0f = R5f.z;
|
||||
R5f.x = R7f.z + PV1f.z;
|
||||
R5f.y = R7f.w + PV1f.y;
|
||||
R5f.z = (mul_nonIEEE(backupReg0f,PV1f.z) + R8f.x);
|
||||
R5f.w = (mul_nonIEEE(backupReg0f,PV1f.y) + R8f.y);
|
||||
R7f.x = (R2f.y * R2f.y + R127f.x);
|
||||
PS0f = R7f.x;
|
||||
R5f.x = (texture(textureUnitPS1, R5f.xy).w);
|
||||
R8f.xw = (texture(textureUnitPS2, R5f.zw).xw);
|
||||
R5f.z = (texture(textureUnitPS4, R13f.xw).x);
|
||||
// 0
|
||||
R123f.x = (mul_nonIEEE(R6f.w,R5f.x) + -(R0f.w));
|
||||
PV0f.x = R123f.x;
|
||||
PV0f.y = R3f.z * R6f.y;
|
||||
R123f.z = (R2f.x * R2f.x + R7f.x);
|
||||
PV0f.z = R123f.z;
|
||||
R127f.w = mul_nonIEEE(R8f.w, R8f.w);
|
||||
R126f.w = (mul_nonIEEE(intBitsToFloat(uf_remappedPS[1].w),R5f.z) + intBitsToFloat(uf_remappedPS[1].x));
|
||||
PS0f = R126f.w;
|
||||
// 1
|
||||
PV1f.x = mul_nonIEEE(R8f.x, R8f.x);
|
||||
R127f.y = (mul_nonIEEE(PV0f.y,intBitsToFloat(uf_remappedPS[1].w)) + -(intBitsToFloat(uf_remappedPS[1].y)));
|
||||
R125f.w = mul_nonIEEE(R1f.w, PV0f.x);
|
||||
R125f.w = clamp(R125f.w, 0.0, 1.0);
|
||||
PV1f.w = R125f.w;
|
||||
tempResultf = 1.0 / sqrt(PV0f.z);
|
||||
PS1f = tempResultf;
|
||||
// 2
|
||||
backupReg0f = R127f.w;
|
||||
PV0f.x = mul_nonIEEE(R2f.x, PS1f);
|
||||
PV0f.y = mul_nonIEEE(R2f.y, PS1f);
|
||||
PV0f.z = mul_nonIEEE(R2f.z, PS1f);
|
||||
R127f.w = mul_nonIEEE(backupReg0f, PV1f.w);
|
||||
PV0f.w = R127f.w;
|
||||
R127f.z = mul_nonIEEE(PV1f.x, PV1f.w);
|
||||
PS0f = R127f.z;
|
||||
// 3
|
||||
backupReg0f = R0f.x;
|
||||
tempf.x = dot(vec4(R9f.x,R9f.y,R9f.z,-0.0),vec4(PV0f.x,PV0f.y,PV0f.z,0.0));
|
||||
PV1f.x = tempf.x;
|
||||
PV1f.y = tempf.x;
|
||||
PV1f.z = tempf.x;
|
||||
PV1f.w = tempf.x;
|
||||
R122f.x = (mul_nonIEEE(backupReg0f,PV0f.w) + intBitsToFloat(0x3c75c28f));
|
||||
PS1f = R122f.x;
|
||||
// 4
|
||||
backupReg0f = R0f.y;
|
||||
PV0f.x = max(PV1f.x, -(PV1f.x));
|
||||
R0f.y = (mul_nonIEEE(R1f.x,R127f.z) + PS1f);
|
||||
R123f.z = (mul_nonIEEE(R0f.z,R127f.w) + intBitsToFloat(0x3d23d70a));
|
||||
PV0f.z = R123f.z;
|
||||
R123f.w = (mul_nonIEEE(backupReg0f,R127f.w) + intBitsToFloat(0x3c75c28f));
|
||||
PV0f.w = R123f.w;
|
||||
PS0f = 1.0 / R127f.y;
|
||||
// 5
|
||||
R1f.x = (mul_nonIEEE(R1f.y,R127f.z) + PV0f.w);
|
||||
PV1f.y = -(intBitsToFloat(uf_remappedPS[1].z)) * PS0f;
|
||||
PV1f.z = PV0f.x + -(intBitsToFloat(uf_remappedPS[0].z));
|
||||
R1f.w = (mul_nonIEEE(R1f.z,R127f.z) + PV0f.z);
|
||||
PS1f = 1.0 / R4f.z;
|
||||
// 6
|
||||
PV0f.x = PV1f.z * PS1f;
|
||||
PV0f.x = clamp(PV0f.x, 0.0, 1.0);
|
||||
R127f.y = R125f.w;
|
||||
R127f.y = clamp(R127f.y, 0.0, 1.0);
|
||||
PV0f.z = -(PV1f.y) + R126f.w;
|
||||
PS0f = 1.0 / intBitsToFloat(uf_remappedPS[2].y);
|
||||
// 7
|
||||
PV1f.x = PV0f.z * PS0f;
|
||||
PV1f.x = clamp(PV1f.x, 0.0, 1.0);
|
||||
R123f.z = (intBitsToFloat(0xc0000000) * PV0f.x + intBitsToFloat(0x40400000));
|
||||
PV1f.z = R123f.z;
|
||||
PV1f.w = mul_nonIEEE(PV0f.x, PV0f.x);
|
||||
// 8
|
||||
PV0f.y = mul_nonIEEE(PV1f.w, PV1f.z);
|
||||
PV0f.w = mul_nonIEEE(R127f.y, PV1f.x);
|
||||
// 9
|
||||
PV1f.x = mul_nonIEEE(PV0f.w, PV0f.y);
|
||||
// 10
|
||||
PV0f.w = mul_nonIEEE(R4f.x, PV1f.x);
|
||||
// 11
|
||||
backupReg0f = R10f.w;
|
||||
R10f.w = mul_nonIEEE(backupReg0f, PV0f.w);
|
||||
// 0
|
||||
backupReg0f = R0f.y;
|
||||
PV0f.x = -(R1f.w) + intBitsToFloat(uf_remappedPS[3].z);
|
||||
PV0f.y = -(R1f.x) + intBitsToFloat(uf_remappedPS[3].y);
|
||||
PV0f.z = -(backupReg0f) + intBitsToFloat(uf_remappedPS[3].x);
|
||||
// 1
|
||||
R127f.y = (mul_nonIEEE(PV0f.x,R12f.y) + R1f.w);
|
||||
PV1f.y = R127f.y;
|
||||
R127f.z = (mul_nonIEEE(PV0f.y,R12f.y) + R1f.x);
|
||||
PV1f.z = R127f.z;
|
||||
R126f.w = (mul_nonIEEE(PV0f.z,R12f.y) + R0f.y);
|
||||
PV1f.w = R126f.w;
|
||||
// 2
|
||||
PV0f.x = R11f.x + -(PV1f.w);
|
||||
PV0f.z = R11f.z + -(PV1f.y);
|
||||
PV0f.w = R11f.y + -(PV1f.z);
|
||||
// 3
|
||||
backupReg0f = R127f.y;
|
||||
R127f.x = (mul_nonIEEE(PV0f.w,R11f.w) + R127f.z);
|
||||
PV1f.x = R127f.x;
|
||||
R127f.y = (mul_nonIEEE(PV0f.x,R11f.w) + R126f.w);
|
||||
PV1f.y = R127f.y;
|
||||
R126f.w = (mul_nonIEEE(PV0f.z,R11f.w) + backupReg0f);
|
||||
PV1f.w = R126f.w;
|
||||
// 4
|
||||
PV0f.x = -(PV1f.w) + intBitsToFloat(uf_remappedPS[4].z);
|
||||
PV0f.y = -(PV1f.x) + intBitsToFloat(uf_remappedPS[4].y);
|
||||
PV0f.z = -(PV1f.y) + intBitsToFloat(uf_remappedPS[4].x);
|
||||
// 5
|
||||
R10f.x = (mul_nonIEEE(PV0f.z,R12f.x) + R127f.y);
|
||||
R10f.y = (mul_nonIEEE(PV0f.y,R12f.x) + R127f.x);
|
||||
R10f.z = (mul_nonIEEE(PV0f.x,R12f.x) + R126f.w);
|
||||
// export
|
||||
if( ((vec4(R10f.x, R10f.y, R10f.z, R10f.w)).a > uf_alphaTestRef) == false) discard;
|
||||
passPixelColor0 = vec4(R10f.x * aurared, R10f.y * auragreen, R10f.z * aurablue, R10f.w * auraopacity);
|
||||
}
|
@ -1,9 +1,13 @@
|
||||
#version 430
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
#extension GL_ARB_separate_shader_objects : enable
|
||||
// shader 699b238ae15d113b
|
||||
// Used for: Fog Hyrule Castle
|
||||
|
||||
// shader 699b238ae15d113b -- Ganons Castle Moat Fog
|
||||
|
||||
#define basefogred $castlebasefogred
|
||||
#define basefoggreen $castlebasefoggreen
|
||||
#define basefogblue $castlebasefogblue
|
||||
#define basefogopacity $castlebasefogopacity
|
||||
|
||||
// start of shader inputs/outputs, predetermined by Cemu. Do not touch
|
||||
#ifdef VULKAN
|
||||
@ -43,6 +47,7 @@ layout(location = 8) in vec4 passParameterSem15;
|
||||
layout(location = 9) in vec4 passParameterSem16;
|
||||
layout(location = 0) out vec4 passPixelColor0;
|
||||
// end of shader inputs/outputs
|
||||
|
||||
int clampFI32(int v)
|
||||
{
|
||||
if( v == 0x7FFFFFFF )
|
||||
@ -190,10 +195,5 @@ R7f.y = (mul_nonIEEE(PV0f.y,R9f.x) + R127f.x);
|
||||
R7f.z = (mul_nonIEEE(PV0f.x,R9f.x) + R127f.w);
|
||||
// export
|
||||
if( ((vec4(R7f.x, R7f.y, R7f.z, R7f.w)).a > uf_alphaTestRef) == false) discard;
|
||||
|
||||
#if ($enableCastleFogColor == 0)
|
||||
passPixelColor0 = vec4(R7f.x, R7f.y, R7f.z, R7f.w*$castleFogOpacity);
|
||||
#else
|
||||
passPixelColor0 = vec4($castleFogRed, $castleFogGreen, $castleFogBlue, R7f.w*$castleFogOpacity);
|
||||
#endif
|
||||
passPixelColor0 = vec4(R7f.x * basefogred, R7f.y * basefoggreen, R7f.z * basefogblue, R7f.w * basefogopacity); // rgb and opacity
|
||||
}
|
@ -1,14 +1,13 @@
|
||||
#version 430
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
#extension GL_ARB_separate_shader_objects : enable
|
||||
// shader bec68ec6f40a864f
|
||||
// Used for: Ground Fog
|
||||
|
||||
float fogOpacity = float($groundFogOpacity);
|
||||
float fogBrightness = float($groundFogBrightness);
|
||||
float fogRed = float($groundFogOpacity);
|
||||
float fogGreen = float($groundFogOpacity);
|
||||
float fogBlue = float($groundFogOpacity);
|
||||
// shader bec68ec6f40a864f -- Affects distant area fog rgb, distance lighting, ground lighting
|
||||
#define distantlight $distantlighting
|
||||
#define dflevel $distantfoglevel
|
||||
#define dfred $distantfogred
|
||||
#define dfgreen $distantfoggreen
|
||||
#define dfblue $distantfogblue
|
||||
|
||||
// start of shader inputs/outputs, predetermined by Cemu. Do not touch
|
||||
#ifdef VULKAN
|
||||
@ -987,16 +986,8 @@ R0i.w = R24i.w;
|
||||
R2i.xyz = ivec3(R25i.x,R25i.y,R25i.z);
|
||||
R2i.w = R25i.w;
|
||||
// export
|
||||
|
||||
passPixelColor0 = vec4(intBitsToFloat(R0i.x), intBitsToFloat(R0i.y), intBitsToFloat(R0i.z)*fogBrightness, intBitsToFloat(R0i.w));
|
||||
|
||||
#if ($enableGroundFogColor == 0)
|
||||
passPixelColor1 = vec4(intBitsToFloat(R1i.x), intBitsToFloat(R1i.y), intBitsToFloat(R1i.z), intBitsToFloat(R1i.w)*fogOpacity);
|
||||
#else
|
||||
passPixelColor1 = vec4(fogRed, fogGreen, fogBlue, intBitsToFloat(R1i.w)*fogOpacity);
|
||||
#endif
|
||||
|
||||
passPixelColor1 = vec4(intBitsToFloat(R1i.x), intBitsToFloat(R1i.y), intBitsToFloat(R1i.z), intBitsToFloat(R1i.w));
|
||||
passPixelColor2 = vec4(intBitsToFloat(R2i.x), intBitsToFloat(R2i.y), intBitsToFloat(R2i.z), intBitsToFloat(R2i.w));
|
||||
passPixelColor3 = vec4(intBitsToFloat(R3i.x), intBitsToFloat(R3i.y), intBitsToFloat(R3i.z), intBitsToFloat(R3i.w));
|
||||
passPixelColor0 = vec4(intBitsToFloat(R0i.x), intBitsToFloat(R0i.y), intBitsToFloat(R0i.z) * distantlight, intBitsToFloat(R0i.w)); // x affects shadows sharpness, and z affects distant area lighting brightness
|
||||
passPixelColor1 = vec4(intBitsToFloat(R1i.x) * dfred, intBitsToFloat(R1i.y) * dfgreen, intBitsToFloat(R1i.z) * dfblue, intBitsToFloat(R1i.w)) * dflevel; // x,y,z affects the color red,green,blue of the fog, w does
|
||||
passPixelColor2 = vec4(intBitsToFloat(R2i.x), intBitsToFloat(R2i.y), intBitsToFloat(R2i.z), intBitsToFloat(R2i.w)); // affects ground color rgb
|
||||
passPixelColor3 = vec4(intBitsToFloat(R3i.x), intBitsToFloat(R3i.y), intBitsToFloat(R3i.z), intBitsToFloat(R3i.w)); // xyz - RGB for body of waters edge surfaces
|
||||
}
|
@ -1,14 +1,13 @@
|
||||
#version 430
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
#extension GL_ARB_separate_shader_objects : enable
|
||||
// shader fb2e18ae56397ca7
|
||||
// Used for: Fog around trees, bushes and vines
|
||||
|
||||
float fogOpacity = float($greeneryFogOpacity);
|
||||
float fogBrightness = float($greeneryFogBrightness);
|
||||
float fogRed = float($greeneryFogOpacity);
|
||||
float fogGreen = float($greeneryFogOpacity);
|
||||
float fogBlue = float($greeneryFogOpacity);
|
||||
// shader fb2e18ae56397ca7 -- Affects Trees Bushes and Vines
|
||||
#define gli $distantlighting
|
||||
#define gfoglevel $distantfoglevel
|
||||
#define gred $distantfogred
|
||||
#define ggreen $distantfoggreen
|
||||
#define gblue $distantfogblue
|
||||
|
||||
// start of shader inputs/outputs, predetermined by Cemu. Do not touch
|
||||
#ifdef VULKAN
|
||||
@ -980,16 +979,9 @@ R0i.w = R25i.w;
|
||||
// 13
|
||||
R2i.xyz = ivec3(R26i.x,R26i.y,R26i.z);
|
||||
R2i.w = R26i.w;
|
||||
|
||||
// export
|
||||
passPixelColor0 = vec4(intBitsToFloat(R0i.x), intBitsToFloat(R0i.y), intBitsToFloat(R0i.z) * fogBrightness, intBitsToFloat(R0i.w));
|
||||
|
||||
#if ($enableGreeneryFogColor == 0)
|
||||
passPixelColor1 = vec4(intBitsToFloat(R1i.x), intBitsToFloat(R1i.y), intBitsToFloat(R1i.z), intBitsToFloat(R1i.w)*fogOpacity);
|
||||
#else
|
||||
passPixelColor1 = vec4(fogRed, fogGreen, fogBlue, intBitsToFloat(R1i.w)*fogOpacity);
|
||||
#endif
|
||||
|
||||
passPixelColor2 = vec4(intBitsToFloat(R2i.x), intBitsToFloat(R2i.y), intBitsToFloat(R2i.z), intBitsToFloat(R2i.w));
|
||||
passPixelColor3 = vec4(intBitsToFloat(R3i.x), intBitsToFloat(R3i.y), intBitsToFloat(R3i.z), intBitsToFloat(R3i.w));
|
||||
passPixelColor0 = vec4(intBitsToFloat(R0i.x), intBitsToFloat(R0i.y), intBitsToFloat(R0i.z) * gli, intBitsToFloat(R0i.w)); // x affects shadows, z affects lighting of trees,bushes,flowers,vines
|
||||
passPixelColor1 = vec4(intBitsToFloat(R1i.x) * gred, intBitsToFloat(R1i.y) * ggreen, intBitsToFloat(R1i.z) * gblue, intBitsToFloat(R1i.w)) * gfoglevel; // rgb fog for distant trees
|
||||
passPixelColor2 = vec4(intBitsToFloat(R2i.x), intBitsToFloat(R2i.y), intBitsToFloat(R2i.z), intBitsToFloat(R2i.w)); // xyz - RGB Bloom/Glowness - to tress and bushes and vines multiply by 20 to see
|
||||
passPixelColor3 = vec4(intBitsToFloat(R3i.x), intBitsToFloat(R3i.y), intBitsToFloat(R3i.z), intBitsToFloat(R3i.w)); // xyz - RGB Bloom for on water objects like korok rings
|
||||
}
|
662
src/BreathOfTheWild/Mods/RemoveFog/rules.txt
Normal file
662
src/BreathOfTheWild/Mods/RemoveFog/rules.txt
Normal file
@ -0,0 +1,662 @@
|
||||
[Definition]
|
||||
titleIds = 00050000101C9300,00050000101C9400,00050000101C9500
|
||||
name = Remove (Distant) Fog, Haze and Clouds
|
||||
path = "The Legend of Zelda: Breath of the Wild/Mods/Remove Distant Fog"
|
||||
description = Allows you to remove or customize each type of fog in the game.|NPC fog will conflict with the remove cel-shading graphic packs.||Made by Skalfate."
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
# Settings will show a set of options and exclude other sets of options
|
||||
# Settings 0 = Shows Settings related to Distant Fog that affects all, the world, the trees, the water, the npc
|
||||
# Settings 1 = Shows Settings related to Field Fog Clouds
|
||||
# Settings 2 = Shows Settings related to NPC Fog
|
||||
# Settings 3 = Shows Settings related to Castle Aura & Moat
|
||||
# Settings 4 = Shows Settings related to Custom Preset edited by the user
|
||||
$settings = 0
|
||||
# -----------------
|
||||
# Distant Fog affects the world Fog, the water fog, the greenery objects like trees and bushes fog
|
||||
$distantlighting = 1
|
||||
$distantfoglevel = 1
|
||||
$distantfogred = 1
|
||||
$distantfoggreen = 1
|
||||
$distantfogblue = 1
|
||||
# -----------------
|
||||
# Field Fog Clouds that move around on the grounds
|
||||
$fieldfogcloudsopacity = 1
|
||||
$fieldfogcloudsred = 1
|
||||
$fieldfogcloudsgreen = 1
|
||||
$fieldfogcloudsblue = 1
|
||||
# -----------------
|
||||
# NPC in the distance have a fogy haze around them that immitates the world haze
|
||||
$npcfogopacity = 1
|
||||
$npcfogred = 1
|
||||
$npcfoggreen = 1
|
||||
$npcfogblue = 1
|
||||
# -----------------
|
||||
# Castle Base Moat Fog
|
||||
$castlebasefogopacity = 1
|
||||
$castlebasefogred = 1
|
||||
$castlebasefoggreen = 1
|
||||
$castlebasefogblue = 1
|
||||
# -----------------
|
||||
# Castle Aura
|
||||
$castleauraopacity = 1
|
||||
$castleaurared = 1
|
||||
$castleauragreen = 1
|
||||
$castleaurablue = 1
|
||||
|
||||
|
||||
# Main Menu # ------------------------------
|
||||
[Preset]
|
||||
category = Main Menu
|
||||
name = Distant Fog Settings
|
||||
$settings = 0
|
||||
|
||||
[Preset]
|
||||
category = Main Menu
|
||||
name = Field Fog Clouds Settings
|
||||
$settings = 1
|
||||
|
||||
[Preset]
|
||||
category = Main Menu
|
||||
name = NPC Fog Settings
|
||||
$settings = 2
|
||||
|
||||
[Preset]
|
||||
category = Main Menu
|
||||
name = Castle Fog Settings
|
||||
$settings = 3
|
||||
|
||||
[Preset]
|
||||
category = Main Menu
|
||||
name = Custom Preset Settings
|
||||
$settings = 4
|
||||
|
||||
# Seconday Menus ------------------------------
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant World Fog
|
||||
name = Default Fog Levels
|
||||
$distantfoglevel = 1
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant World Fog
|
||||
name = Fog 0%
|
||||
$distantfoglevel = 0
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant World Fog
|
||||
name = Fog 10%
|
||||
$distantfoglevel = 0.1
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant World Fog
|
||||
name = Fog 20%
|
||||
$distantfoglevel = 0.2
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant World Fog
|
||||
name = Fog 30%
|
||||
$distantfoglevel = 0.3
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant World Fog
|
||||
name = Fog 40%
|
||||
$distantfoglevel = 0.4
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant World Fog
|
||||
name = Fog 50%
|
||||
$distantfoglevel = 0.5
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant World Fog
|
||||
name = Fog 60%
|
||||
$distantfoglevel = 0.6
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant World Fog
|
||||
name = Fog 80%
|
||||
$distantfoglevel = 0.8
|
||||
|
||||
# ------------------------------
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Lighting
|
||||
name = Default Distant Lighting 1x
|
||||
$distantlighting = 1
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Lighting
|
||||
name = Distant Lighting x2
|
||||
$distantlighting = 2
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Lighting
|
||||
name = Distant Lighting x3
|
||||
$distantlighting = 3
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Lighting
|
||||
name = Distant Lighting x4
|
||||
$distantlighting = 4
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Lighting
|
||||
name = Distant Lighting x6
|
||||
$distantlighting = 6
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Lighting
|
||||
name = Distant Lighting x8
|
||||
$distantlighting = 8
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Lighting
|
||||
name = Darker Distant Lighting 20%
|
||||
$distantlighting = 0.8
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Lighting
|
||||
name = Darker Distant Lighting 40%
|
||||
$distantlighting = 0.6
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Lighting
|
||||
name = Darker Distant Lighting 60%
|
||||
$distantlighting = 0.4
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Lighting
|
||||
name = Darker Distant Lighting 80%
|
||||
$distantlighting = 0.2
|
||||
|
||||
# ------------------------------
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Fog RGB
|
||||
name = Default Fog RGB
|
||||
$distantfogred = 1
|
||||
$distantfoggreen = 1
|
||||
$distantfogblue = 1
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Fog RGB
|
||||
name = Red Fog x1
|
||||
$distantfogred = 1
|
||||
$distantfoggreen = 0
|
||||
$distantfogblue = 0
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Fog RGB
|
||||
name = Red Fog x2
|
||||
$distantfogred = 2
|
||||
$distantfoggreen = 0
|
||||
$distantfogblue = 0
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Fog RGB
|
||||
name = Red Fog x3
|
||||
$distantfogred = 3
|
||||
$distantfoggreen = 0
|
||||
$distantfogblue = 0
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Fog RGB
|
||||
name = Blue Fog x1
|
||||
$distantfogred = 0
|
||||
$distantfoggreen = 0
|
||||
$distantfogblue = 1
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Fog RGB
|
||||
name = Blue Fog x2
|
||||
$distantfogred = 0
|
||||
$distantfoggreen = 0
|
||||
$distantfogblue = 2
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Fog RGB
|
||||
name = Blue Fog x3
|
||||
$distantfogred = 0
|
||||
$distantfoggreen = 0
|
||||
$distantfogblue = 3
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Fog RGB
|
||||
name = Green Fog x1
|
||||
$distantfogred = 0
|
||||
$distantfoggreen = 1
|
||||
$distantfogblue = 0
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Fog RGB
|
||||
name = Green Fog x2
|
||||
$distantfogred = 0
|
||||
$distantfoggreen = 2
|
||||
$distantfogblue = 0
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Fog RGB
|
||||
name = Green Fog x3
|
||||
$distantfogred = 0
|
||||
$distantfoggreen = 3
|
||||
$distantfogblue = 0
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Fog RGB
|
||||
name = Purple Fog x2
|
||||
# blue and red makes purple
|
||||
$distantfogred = 2
|
||||
$distantfoggreen = 0
|
||||
$distantfogblue = 2
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Fog RGB
|
||||
name = Purple Fog x3
|
||||
$distantfogred = 3
|
||||
$distantfoggreen = 0
|
||||
$distantfogblue = 3
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Fog RGB
|
||||
name = Cyan Fog x2
|
||||
# blue and green makes cyan
|
||||
$distantfogred = 0
|
||||
$distantfoggreen = 2
|
||||
$distantfogblue = 2
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 0
|
||||
category = Distant Fog RGB
|
||||
name = Cyan Fog x3
|
||||
$distantfogred = 0
|
||||
$distantfoggreen = 3
|
||||
$distantfogblue = 3
|
||||
|
||||
# ------------------------------
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 1
|
||||
category = Field Fog Clouds
|
||||
name = Default Field Fog Clouds Enabled
|
||||
$fieldfogcloudsopacity = 1
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 1
|
||||
category = Field Fog Clouds
|
||||
name = Field Fog Clouds Disabled
|
||||
$fieldfogcloudsopacity = 0
|
||||
|
||||
# Field Fog Clouds ------------------------------
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 1
|
||||
category = Field Fog Clouds RGB
|
||||
name = Default RGB Field Fog Clouds
|
||||
$fieldfogcloudsred = 1
|
||||
$fieldfogcloudsgreen = 1
|
||||
$fieldfogcloudsblue = 1
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 1
|
||||
category = Field Fog Clouds RGB
|
||||
name = Red Field Fog Clouds
|
||||
$fieldfogcloudsred = 30 # red needs amplified levels to be visible
|
||||
$fieldfogcloudsgreen = 1
|
||||
$fieldfogcloudsblue = 1
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 1
|
||||
category = Field Fog Clouds RGB
|
||||
name = Blue Field Fog Clouds
|
||||
$fieldfogcloudsred = 1
|
||||
$fieldfogcloudsgreen = 1
|
||||
$fieldfogcloudsblue = 4
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 1
|
||||
category = Field Fog Clouds RGB
|
||||
name = Green Field Fog Clouds
|
||||
$fieldfogcloudsred = 1
|
||||
$fieldfogcloudsgreen = 4
|
||||
$fieldfogcloudsblue = 1
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 1
|
||||
category = Field Fog Clouds RGB
|
||||
name = Purple Field Fog Clouds
|
||||
# blue and red makes purple
|
||||
$fieldfogcloudsred = 30 # red needs amplified levels to be visible
|
||||
$fieldfogcloudsgreen = 1
|
||||
$fieldfogcloudsblue = 3
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 1
|
||||
category = Field Fog Clouds RGB
|
||||
name = Cyan Field Fog Clouds
|
||||
#blue and green makes cyan
|
||||
$fieldfogcloudsred = 1 # red needs amplified levels to be visible
|
||||
$fieldfogcloudsgreen = 3
|
||||
$fieldfogcloudsblue = 3
|
||||
|
||||
# Distant NPC Fog ------------------------------
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 2
|
||||
category = Distant NPC Fog Percentage
|
||||
name = Default Distant NPC Fog Enabled
|
||||
$npcfogred = 1
|
||||
$npcfoggreen = 1
|
||||
$npcfogblue = 1
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 2
|
||||
category = Distant NPC Fog Percentage
|
||||
name = Distant NPC Fog 0%
|
||||
$npcfogred = 0
|
||||
$npcfoggreen = 0
|
||||
$npcfogblue = 0
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 2
|
||||
category = Distant NPC Fog Percentage
|
||||
name = Distant NPC Fog 10%
|
||||
$npcfogred = 0.1
|
||||
$npcfoggreen = 0.1
|
||||
$npcfogblue = 0.1
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 2
|
||||
category = Distant NPC Fog Percentage
|
||||
name = Distant NPC Fog 20%
|
||||
$npcfogred = 0.2
|
||||
$npcfoggreen = 0.2
|
||||
$npcfogblue = 0.2
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 2
|
||||
category = Distant NPC Fog Percentage
|
||||
name = Distant NPC Fog 30%
|
||||
$npcfogred = 0.3
|
||||
$npcfoggreen = 0.3
|
||||
$npcfogblue = 0.3
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 2
|
||||
category = Distant NPC Fog Percentage
|
||||
name = Distant NPC Fog 40%
|
||||
$npcfogred = 0.4
|
||||
$npcfoggreen = 0.4
|
||||
$npcfogblue = 0.4
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 2
|
||||
category = Distant NPC Fog Percentage
|
||||
name = Distant NPC Fog 60%
|
||||
$npcfogred = 0.6
|
||||
$npcfoggreen = 0.6
|
||||
$npcfogblue = 0.6
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 2
|
||||
category = Distant NPC Fog Percentage
|
||||
name = Distant NPC Fog 80%
|
||||
$npcfogred = 0.8
|
||||
$npcfoggreen = 0.8
|
||||
$npcfogblue = 0.8
|
||||
|
||||
# Castle Fog Values ------------------------------
|
||||
|
||||
# Castle Aura
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Aura
|
||||
name = Castle Aura Enabled
|
||||
$castleauraopacity = 1
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Aura
|
||||
name = Castle Aura Disabled
|
||||
$castleauraopacity = 0
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Aura
|
||||
name = Castle Aura 30%
|
||||
$castleauraopacity = 0.3
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Aura
|
||||
name = Castle Aura 50%
|
||||
$castleauraopacity = 0.5
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Aura
|
||||
name = Castle Aura 80%
|
||||
$castleauraopacity = 0.8
|
||||
|
||||
# Castle Swirling Aura RGB
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Aura RGB
|
||||
name = Default RGB Castle Aura
|
||||
$castleaurared = 1
|
||||
$castleauragreen = 1
|
||||
$castleaurablue = 1
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Aura RGB
|
||||
name = Red Castle Aura
|
||||
$castleaurared = 18
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Aura RGB
|
||||
name = Green Castle Aura
|
||||
$castleauragreen = 2
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Aura RGB
|
||||
name = Blue Castle Aura
|
||||
$castleaurablue = 2
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Aura RGB
|
||||
name = Purple Castle Aura
|
||||
$castleaurared = 4
|
||||
$castleaurablue = 4
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Aura RGB
|
||||
name = Cyan Castle Aura
|
||||
$castleaurared = 4
|
||||
$castleauragreen = 4
|
||||
|
||||
# Castle Moat Fog -------------------------------------
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Fog
|
||||
name = Castle Moat Fog Enabled
|
||||
$castlebasefogopacity = 1
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Fog
|
||||
name = Castle Moat Fog Disabled
|
||||
$castlebasefogopacity = 0
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Fog
|
||||
name = Castle Moat Fog 30%
|
||||
$castlebasefogopacity = 0.3
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Fog
|
||||
name = Castle Moat Fog 50%
|
||||
$castlebasefogopacity = 0.5
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Fog
|
||||
name = Castle Moat Fog 80%
|
||||
$castlebasefogopacity = 0.8
|
||||
|
||||
# Castle Moat RGB
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Moat Fog RGB
|
||||
name = Default RGB Castle Moat Fog
|
||||
$castlebasefogred = 1
|
||||
$castlebasefoggreen = 1
|
||||
$castlebasefogblue = 1
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Moat Fog RGB
|
||||
name = Red Castle Moat Fog
|
||||
$castlebasefogred = 18
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Moat Fog RGB
|
||||
name = Green Castle Moat Fog
|
||||
$castlebasefoggreen = 2
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Moat Fog RGB
|
||||
name = Blue Castle Moat Fog
|
||||
$castlebasefogblue = 2
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Moat Fog RGB
|
||||
name = Purple Castle Moat Fog
|
||||
$castlebasefogred = 4
|
||||
$castlebasefogblue = 4
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 3
|
||||
category = Castle Moat Fog RGB
|
||||
name = Cyan Castle Moat Fog
|
||||
$castlebasefogred = 4
|
||||
$castlebasefoggreen = 4
|
||||
|
||||
# Custom Preset Values ------------------------------
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 4
|
||||
category = CustomPreset
|
||||
name = Default Preset
|
||||
$distantlighting = 1
|
||||
$distantfogred = 1
|
||||
$distantfoggreen = 1
|
||||
$distantfogblue = 1
|
||||
#
|
||||
$fieldfogcloudsred = 1
|
||||
$fieldfogcloudsgreen = 1
|
||||
$fieldfogcloudsblue = 1
|
||||
#
|
||||
$npcfogred = 1
|
||||
$npcfoggreen = 1
|
||||
$npcfogblue = 1
|
||||
|
||||
[Preset]
|
||||
condition = $settings == 4
|
||||
category = CustomPreset
|
||||
name = Custom Preset (edit the rules.txt)
|
||||
$distantlighting = 1
|
||||
#
|
||||
$distantfoglevel = 1
|
||||
#
|
||||
$distantfogred = 1
|
||||
$distantfoggreen = 1
|
||||
$distantfogblue = 1
|
||||
#
|
||||
$fieldfogcloudsopacity = 1
|
||||
$fieldfogcloudsred = 1
|
||||
$fieldfogcloudsgreen = 1
|
||||
$fieldfogcloudsblue = 1
|
||||
#
|
||||
$npcfogopacity = 1
|
||||
$npcfogred = 1
|
||||
$npcfoggreen = 1
|
||||
$npcfogblue = 1
|
||||
#
|
||||
$castlebasefogopacity = 1
|
||||
$castlebasefogred = 1
|
||||
$castlebasefoggreen = 1
|
||||
$castlebasefogblue = 1
|
||||
#
|
||||
$castleauraopacity = 1
|
||||
$castleaurared = 1
|
||||
$castleauragreen = 1
|
||||
$castleaurablue = 1
|
||||
|
||||
# Information
|
||||
# by SkalFate
|
||||
# ----------------------
|
||||
# Distant lighting - is for distant area lighting of the land and how far in the distance everything is lit up
|
||||
# ------ Game Values are multiplied, so if you want to lower a value, use 0.01-0.99, or if you want to go higher go from 1.0-X.X
|
||||
|
||||
# Greenery lighting - is the same as above but for trees vines, bushes
|
||||
# ------ Game Values are multiplied, so if you want to lower a value, use 0.01-0.99, or if you want to go higher go from 1.0-X.X
|
||||
|
||||
# RGB - Red, Green, Blue - is self explanatory for the color of the fog, trees, water.
|
||||
# ------ Game Values are multiplied so if you want to lower a value, use 0.01-0.99, or if you want to go higher go from 1.0-X.X
|
||||
|
||||
# ----------------------
|
||||
# (fieldfogopacity) = Fog Transparency/Opacity - how thick or thin you want the fog fields to look
|
||||
# ------ Values are multiplied, so if you want to lower use [0.01 - 0.99], or if you want to go higher go from [1.0 - X.X]
|
||||
|
||||
# (fieldfogcloudsred, fieldfogcloudsgreen, fieldfogcloudsblue ) = RGB - Red, Green, Blue - Changes the color of the fog fields.
|
||||
# ------ Values are multiplied so if you want to lower use [0.01 - 0.99], or if you want to go higher go from [1.0 - X.X]
|
||||
|
||||
# (npcfogred, npcfoggreen, npcblue ) = RGB - Red, Green, Blue - Changes the color of distant npcs fog.
|
||||
# ------ Values are multiplied so if you want to lower use [0.01 - 0.99], or if you want to go higher go from [1.0 - X.X]
|
Loading…
Reference in New Issue
Block a user