mirror of
https://github.com/cemu-project/cemu_graphic_packs.git
synced 2025-04-20 09:51:29 +02:00
Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
39f9bd6654 | ||
![]() |
61d458f9bd | ||
![]() |
108a1f0335 | ||
![]() |
7d54f240ec | ||
![]() |
d0205dcb80 | ||
![]() |
09207ededf | ||
![]() |
a8ab6fd326 | ||
![]() |
88a7e7b464 | ||
![]() |
01efa057a8 | ||
![]() |
91d33317d2 | ||
![]() |
1ee177b162 | ||
![]() |
b28ad54c73 |
@ -3,4 +3,5 @@ titleIds = 0005000010137F00,0005000010138300,0005000010144800
|
||||
name = AA Removal
|
||||
path = "Donkey Kong Country: Tropical Freeze/Enhancements/AA Removal"
|
||||
description = Removes AA, no performance gain. Used for clean look or injecting external AA.
|
||||
#Credits: Skalfate
|
||||
version = 4
|
||||
|
@ -1,6 +0,0 @@
|
||||
[Definition]
|
||||
titleIds = 0005000010150300,0005000010152A00,0005000010152B00
|
||||
name = Anti-Aliasing
|
||||
path = "Dr. Luigi/Graphics/Anti-Aliasing (WIP)"
|
||||
description = Re-enables the game's anti-aliasing and scales it up to the current resolution. Made by M&&M.
|
||||
version = 4
|
6
Mods/TwilightPrincessHD_DisableMirror/patches.txt
Normal file
6
Mods/TwilightPrincessHD_DisableMirror/patches.txt
Normal file
@ -0,0 +1,6 @@
|
||||
[zelda-tp-disable-mirroring]
|
||||
moduleMatches = 0x1A03E108, 0xA3175EEA
|
||||
|
||||
0x02941064 = stb r0, 0x667d(r12)
|
||||
0x0294819c = li r0, 32
|
||||
0x029481ac = stb r0, 0x667d(r11)
|
6
Mods/TwilightPrincessHD_DisableMirror/rules.txt
Normal file
6
Mods/TwilightPrincessHD_DisableMirror/rules.txt
Normal file
@ -0,0 +1,6 @@
|
||||
[Definition]
|
||||
titleIds = 000500001019C800,000500001019E600,000500001019E500
|
||||
name = Disable Mirroring
|
||||
path = "The Legend of Zelda: Twilight Princess HD/Mods/Disable Mirroring (Hero Mode)"
|
||||
description = Hero Mode will no longer be mirrored.|Made by EitchKeii.
|
||||
version = 4
|
@ -3,6 +3,7 @@ titleIds = 0005000010137F00,0005000010138300,0005000010144800
|
||||
name = Resolution
|
||||
path = "Donkey Kong Country: Tropical Freeze/Graphics/Resolution"
|
||||
description = Changes the resolution of the game. Made by getdls and Skalfate.
|
||||
#Credits: getdls, Skalfate
|
||||
version = 4
|
||||
|
||||
[Preset]
|
||||
|
@ -1,246 +0,0 @@
|
||||
#version 420
|
||||
#extension GL_ARB_texture_gather : enable
|
||||
#extension GL_ARB_separate_shader_objects : enable
|
||||
#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 SET_POSITION(_v) gl_Position = _v; gl_Position.z = (gl_Position.z + gl_Position.w) / 2.0
|
||||
#define GET_FRAGCOORD() vec4(gl_FragCoord.xy*uf_fragCoordScale.xy,gl_FragCoord.zw)
|
||||
#define gl_VertexID gl_VertexIndex
|
||||
#define gl_InstanceID gl_InstanceIndex
|
||||
#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 SET_POSITION(_v) gl_Position = _v
|
||||
#define GET_FRAGCOORD() vec4(gl_FragCoord.xy*uf_fragCoordScale,gl_FragCoord.zw)
|
||||
#endif
|
||||
// This shader was automatically converted to be cross-compatible with Vulkan and OpenGL.
|
||||
|
||||
// shader 9e9abde99f9510dc
|
||||
#ifdef VULKAN
|
||||
layout(set = 1, binding = 1) uniform ufBlock
|
||||
{
|
||||
uniform float uf_alphaTestRef;
|
||||
uniform vec4 uf_fragCoordScale;
|
||||
};
|
||||
#else
|
||||
uniform float uf_alphaTestRef;
|
||||
uniform vec2 uf_fragCoordScale;
|
||||
#endif
|
||||
TEXTURE_LAYOUT(0, 1, 0) uniform sampler2D textureUnitPS0;
|
||||
layout(location = 0) in vec4 passParameterSem129;
|
||||
layout(location = 1) in vec4 passParameterSem128;
|
||||
layout(location = 0) out vec4 passPixelColor0;
|
||||
// uf_fragCoordScale was moved to the ufBlock
|
||||
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 R122i = ivec4(0);
|
||||
ivec4 R123i = 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;
|
||||
vec3 cubeMapSTM;
|
||||
int cubeMapFaceId;
|
||||
//R0i = floatBitsToInt(passParameterSem129);
|
||||
R1i = floatBitsToInt(passParameterSem128);
|
||||
R5i.xyz = floatBitsToInt(texture(textureUnitPS0, intBitsToFloat(R1i.zw)).xyz);
|
||||
R6i.xyz = floatBitsToInt(texture(textureUnitPS0, intBitsToFloat(R1i.xy)).xyz);
|
||||
// 0
|
||||
backupReg0i = R0i.y;
|
||||
backupReg1i = R0i.x;
|
||||
PV0i.x = 0;
|
||||
PV0i.y = floatBitsToInt(intBitsToFloat(backupReg0i) * 1.0);
|
||||
PV0i.z = 0;
|
||||
R127i.w = floatBitsToInt(intBitsToFloat(backupReg1i) * 1.0);
|
||||
PV0i.w = R127i.w;
|
||||
R8i.w = 0x3f800000;
|
||||
PS0i = R8i.w;
|
||||
// 1
|
||||
R2i.x = floatBitsToInt(intBitsToFloat(R1i.z) + intBitsToFloat(PV0i.w));
|
||||
R2i.y = floatBitsToInt(intBitsToFloat(R1i.w) + intBitsToFloat(PV0i.x));
|
||||
R3i.z = floatBitsToInt(intBitsToFloat(PV0i.z) + intBitsToFloat(R1i.z));
|
||||
PV1i.w = PV0i.y;
|
||||
R3i.y = floatBitsToInt(intBitsToFloat(PV0i.y) + intBitsToFloat(R1i.w));
|
||||
PS1i = R3i.y;
|
||||
// 2
|
||||
R4i.x = floatBitsToInt(intBitsToFloat(R1i.z) + intBitsToFloat(R127i.w));
|
||||
R4i.y = floatBitsToInt(intBitsToFloat(R1i.w) + intBitsToFloat(PV1i.w));
|
||||
R0i.z = floatBitsToInt(intBitsToFloat(R6i.z) * intBitsToFloat(0x3de978d5));
|
||||
R3i.x = floatBitsToInt(intBitsToFloat(R5i.z) * intBitsToFloat(0x3de978d5));
|
||||
PS0i = R3i.x;
|
||||
R2i.xyz = floatBitsToInt(texture(textureUnitPS0, intBitsToFloat(R2i.xy)).xyz);
|
||||
R7i.xyz = floatBitsToInt(texture(textureUnitPS0, intBitsToFloat(R3i.zy)).xyz);
|
||||
R4i.xyz = floatBitsToInt(texture(textureUnitPS0, intBitsToFloat(R4i.xy)).xyz);
|
||||
// 0
|
||||
tempi.x = floatBitsToInt(dot(vec4(intBitsToFloat(R5i.x),intBitsToFloat(R5i.y),intBitsToFloat(R3i.x),-0.0),vec4(intBitsToFloat(0x3e991687),intBitsToFloat(0x3f1645a2),1.0,0.0)));
|
||||
PV0i.x = tempi.x;
|
||||
PV0i.y = tempi.x;
|
||||
PV0i.z = tempi.x;
|
||||
PV0i.w = tempi.x;
|
||||
R127i.z = tempi.x;
|
||||
R122i.x = floatBitsToInt((intBitsToFloat(R6i.y) * intBitsToFloat(0x3f1645a2) + intBitsToFloat(R0i.z)));
|
||||
PS0i = R122i.x;
|
||||
// 1
|
||||
tempi.x = floatBitsToInt(dot(vec4(intBitsToFloat(R2i.x),intBitsToFloat(R2i.y),intBitsToFloat(R2i.z),-0.0),vec4(intBitsToFloat(0x3e991687),intBitsToFloat(0x3f1645a2),intBitsToFloat(0x3de978d5),0.0)));
|
||||
PV1i.x = tempi.x;
|
||||
PV1i.y = tempi.x;
|
||||
PV1i.z = tempi.x;
|
||||
PV1i.w = tempi.x;
|
||||
R127i.y = tempi.x;
|
||||
R126i.z = floatBitsToInt((intBitsToFloat(R6i.x) * intBitsToFloat(0x3e991687) + intBitsToFloat(PS0i)));
|
||||
PS1i = R126i.z;
|
||||
// 2
|
||||
R126i.x = floatBitsToInt(dot(vec4(intBitsToFloat(R7i.x),intBitsToFloat(R7i.y),intBitsToFloat(R7i.z),-0.0),vec4(intBitsToFloat(0x3e991687),intBitsToFloat(0x3f1645a2),intBitsToFloat(0x3de978d5),0.0)));
|
||||
PV0i.x = R126i.x;
|
||||
PV0i.y = R126i.x;
|
||||
PV0i.z = R126i.x;
|
||||
PV0i.w = R126i.x;
|
||||
R127i.x = floatBitsToInt(intBitsToFloat(R127i.z) + intBitsToFloat(PV1i.x));
|
||||
PS0i = R127i.x;
|
||||
// 3
|
||||
tempi.x = floatBitsToInt(dot(vec4(intBitsToFloat(R4i.x),intBitsToFloat(R4i.y),intBitsToFloat(R4i.z),-0.0),vec4(intBitsToFloat(0x3e991687),intBitsToFloat(0x3f1645a2),intBitsToFloat(0x3de978d5),0.0)));
|
||||
PV1i.x = tempi.x;
|
||||
PV1i.y = tempi.x;
|
||||
PV1i.z = tempi.x;
|
||||
PV1i.w = tempi.x;
|
||||
R127i.w = tempi.x;
|
||||
PS1i = floatBitsToInt(intBitsToFloat(PV0i.x) + intBitsToFloat(PS0i));
|
||||
// 4
|
||||
PV0i.x = floatBitsToInt(intBitsToFloat(R127i.y) + intBitsToFloat(PV1i.x));
|
||||
PV0i.y = floatBitsToInt(intBitsToFloat(R126i.x) + intBitsToFloat(PV1i.x));
|
||||
PV0i.z = floatBitsToInt(intBitsToFloat(R127i.z) + intBitsToFloat(R126i.x));
|
||||
PV0i.w = floatBitsToInt(intBitsToFloat(PV1i.x) + intBitsToFloat(PS1i));
|
||||
R126i.y = floatBitsToInt(min(intBitsToFloat(R127i.z), intBitsToFloat(R127i.y)));
|
||||
PS0i = R126i.y;
|
||||
// 5
|
||||
backupReg0i = R127i.x;
|
||||
backupReg1i = R127i.z;
|
||||
backupReg2i = R127i.y;
|
||||
R127i.x = floatBitsToInt(-(intBitsToFloat(PV0i.x)) + intBitsToFloat(PV0i.z));
|
||||
PV1i.x = R127i.x;
|
||||
PV1i.y = floatBitsToInt(intBitsToFloat(PV0i.w) * intBitsToFloat(0x3d000000));
|
||||
R127i.z = floatBitsToInt(min(intBitsToFloat(R126i.x), intBitsToFloat(R127i.w)));
|
||||
PV1i.w = floatBitsToInt(-(intBitsToFloat(PV0i.y)) + intBitsToFloat(backupReg0i));
|
||||
R127i.y = floatBitsToInt(max(intBitsToFloat(backupReg1i), intBitsToFloat(backupReg2i)));
|
||||
PS1i = R127i.y;
|
||||
// 6
|
||||
backupReg0i = R126i.x;
|
||||
backupReg1i = R127i.w;
|
||||
R126i.x = floatBitsToInt(-(intBitsToFloat(PV1i.w)));
|
||||
PV0i.y = floatBitsToInt(max(intBitsToFloat(PV1i.x), -(intBitsToFloat(PV1i.x))));
|
||||
PV0i.z = floatBitsToInt(max(-(intBitsToFloat(PV1i.w)), intBitsToFloat(PV1i.w)));
|
||||
R127i.w = floatBitsToInt(max(intBitsToFloat(PV1i.y), intBitsToFloat(0x3c000000)));
|
||||
PS0i = floatBitsToInt(max(intBitsToFloat(backupReg0i), intBitsToFloat(backupReg1i)));
|
||||
// 7
|
||||
PV1i.x = floatBitsToInt(min(intBitsToFloat(PV0i.z), intBitsToFloat(PV0i.y)));
|
||||
PV1i.y = floatBitsToInt(max(intBitsToFloat(R127i.y), intBitsToFloat(PS0i)));
|
||||
PV1i.w = floatBitsToInt(min(intBitsToFloat(R126i.y), intBitsToFloat(R127i.z)));
|
||||
// 8
|
||||
R2i.x = floatBitsToInt(max(intBitsToFloat(R126i.z), intBitsToFloat(PV1i.y)));
|
||||
R2i.z = floatBitsToInt(min(intBitsToFloat(R126i.z), intBitsToFloat(PV1i.w)));
|
||||
PV0i.w = floatBitsToInt(intBitsToFloat(R127i.w) + intBitsToFloat(PV1i.x));
|
||||
// 9
|
||||
PS1i = floatBitsToInt(1.0 / intBitsToFloat(PV0i.w));
|
||||
// 10
|
||||
PV0i.x = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R127i.x), intBitsToFloat(PS1i)));
|
||||
PV0i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R126i.x), intBitsToFloat(PS1i)));
|
||||
// 11
|
||||
PV1i.z = floatBitsToInt(max(intBitsToFloat(PV0i.x), intBitsToFloat(0xc1000000)));
|
||||
PV1i.w = floatBitsToInt(max(intBitsToFloat(PV0i.y), intBitsToFloat(0xc1000000)));
|
||||
// 12
|
||||
PV0i.y = floatBitsToInt(min(intBitsToFloat(PV1i.w), intBitsToFloat(0x41000000)));
|
||||
PV0i.w = floatBitsToInt(min(intBitsToFloat(PV1i.z), intBitsToFloat(0x41000000)));
|
||||
// 13
|
||||
R126i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R0i.x), intBitsToFloat(PV0i.y)));
|
||||
PV1i.z = R126i.z;
|
||||
R127i.w = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R0i.y), intBitsToFloat(PV0i.w)));
|
||||
PV1i.w = R127i.w;
|
||||
// 14
|
||||
R0i.x = floatBitsToInt((intBitsToFloat(PV1i.z) * intBitsToFloat(0x3e2aaaac) + intBitsToFloat(R1i.x)));
|
||||
R0i.y = floatBitsToInt((intBitsToFloat(PV1i.w) * intBitsToFloat(0x3e2aaaac) + intBitsToFloat(R1i.y)));
|
||||
R4i.z = floatBitsToInt((intBitsToFloat(PV1i.z) * intBitsToFloat(0xbe2aaaaa) + intBitsToFloat(R1i.x)));
|
||||
R4i.w = floatBitsToInt((intBitsToFloat(PV1i.w) * intBitsToFloat(0xbe2aaaaa) + intBitsToFloat(R1i.y)));
|
||||
R4i.x = floatBitsToInt((intBitsToFloat(PV1i.z) * 0.5 + intBitsToFloat(R1i.x)));
|
||||
PS0i = R4i.x;
|
||||
// 15
|
||||
backupReg0i = R1i.x;
|
||||
R1i.x = floatBitsToInt((-(intBitsToFloat(R126i.z)) * 0.5 + intBitsToFloat(backupReg0i)));
|
||||
R4i.y = floatBitsToInt((intBitsToFloat(R127i.w) * 0.5 + intBitsToFloat(R1i.y)));
|
||||
R1i.z = floatBitsToInt((-(intBitsToFloat(R127i.w)) * 0.5 + intBitsToFloat(R1i.y)));
|
||||
R0i.xyz = floatBitsToInt(texture(textureUnitPS0, intBitsToFloat(R0i.xy)).xyz);
|
||||
R7i.xyz = floatBitsToInt(texture(textureUnitPS0, intBitsToFloat(R4i.zw)).xyz);
|
||||
R4i.xyz = floatBitsToInt(texture(textureUnitPS0, intBitsToFloat(R4i.xy)).xyz);
|
||||
R1i.xyz = floatBitsToInt(texture(textureUnitPS0, intBitsToFloat(R1i.xz)).xyz);
|
||||
// 0
|
||||
R126i.x = floatBitsToInt(intBitsToFloat(R0i.z) + intBitsToFloat(R7i.z));
|
||||
R126i.x = floatBitsToInt(intBitsToFloat(R126i.x) / 2.0);
|
||||
R127i.z = floatBitsToInt(intBitsToFloat(R0i.y) + intBitsToFloat(R7i.y));
|
||||
R127i.z = floatBitsToInt(intBitsToFloat(R127i.z) / 2.0);
|
||||
PV0i.z = R127i.z;
|
||||
R127i.w = floatBitsToInt(intBitsToFloat(R0i.x) + intBitsToFloat(R7i.x));
|
||||
R127i.w = floatBitsToInt(intBitsToFloat(R127i.w) / 2.0);
|
||||
PV0i.w = R127i.w;
|
||||
// 1
|
||||
PV1i.x = floatBitsToInt(intBitsToFloat(R4i.x) + intBitsToFloat(R1i.x));
|
||||
PV1i.y = PV0i.w;
|
||||
PV1i.y = floatBitsToInt(intBitsToFloat(PV1i.y) / 2.0);
|
||||
R126i.z = floatBitsToInt(intBitsToFloat(R4i.z) + intBitsToFloat(R1i.z));
|
||||
PV1i.w = floatBitsToInt(intBitsToFloat(R4i.y) + intBitsToFloat(R1i.y));
|
||||
PS1i = PV0i.z;
|
||||
PS1i = floatBitsToInt(intBitsToFloat(PS1i) / 2.0);
|
||||
// 2
|
||||
R127i.x = floatBitsToInt((intBitsToFloat(PV1i.x) * 0.25 + intBitsToFloat(PV1i.y)));
|
||||
R127i.y = floatBitsToInt((intBitsToFloat(PV1i.w) * 0.25 + intBitsToFloat(PS1i)));
|
||||
PV0i.w = R126i.x;
|
||||
PV0i.w = floatBitsToInt(intBitsToFloat(PV0i.w) / 2.0);
|
||||
// 3
|
||||
backupReg0i = R126i.z;
|
||||
R126i.z = floatBitsToInt((intBitsToFloat(backupReg0i) * 0.25 + intBitsToFloat(PV0i.w)));
|
||||
PV1i.z = R126i.z;
|
||||
// 4
|
||||
tempi.x = floatBitsToInt(dot(vec4(intBitsToFloat(R127i.x),intBitsToFloat(R127i.y),intBitsToFloat(PV1i.z),-0.0),vec4(intBitsToFloat(0x3e991687),intBitsToFloat(0x3f1645a2),intBitsToFloat(0x3de978d5),0.0)));
|
||||
PV0i.x = tempi.x;
|
||||
PV0i.y = tempi.x;
|
||||
PV0i.z = tempi.x;
|
||||
PV0i.w = tempi.x;
|
||||
// 5
|
||||
PV1i.y = ((intBitsToFloat(PV0i.x) > intBitsToFloat(R2i.x))?int(0xFFFFFFFF):int(0x0));
|
||||
PV1i.z = ((intBitsToFloat(R2i.z) > intBitsToFloat(PV0i.x))?int(0xFFFFFFFF):int(0x0));
|
||||
// 6
|
||||
R123i.x = ((PV1i.z == 0)?(PV1i.y):(int(-1)));
|
||||
PV0i.x = R123i.x;
|
||||
// 7
|
||||
R8i.x = ((PV0i.x == 0)?(R127i.x):(R127i.w));
|
||||
R8i.y = ((PV0i.x == 0)?(R127i.y):(R127i.z));
|
||||
R8i.z = ((PV0i.x == 0)?(R126i.z):(R126i.x));
|
||||
// export
|
||||
if( ((vec4(intBitsToFloat(R8i.x), intBitsToFloat(R8i.y), intBitsToFloat(R8i.z), intBitsToFloat(R8i.w))).a > uf_alphaTestRef) == false) discard;
|
||||
passPixelColor0 = vec4(intBitsToFloat(R8i.x), intBitsToFloat(R8i.y), intBitsToFloat(R8i.z), intBitsToFloat(R8i.w));
|
||||
}
|
@ -0,0 +1,609 @@
|
||||
// shader 340382e6fbbb3951
|
||||
#include <metal_stdlib>
|
||||
using namespace metal;
|
||||
#define SET_POSITION(_v) out.position = _v; out.position.z = (out.position.z + out.position.w) / 2.0
|
||||
// start of shader inputs/outputs, predetermined by Cemu. Do not touch
|
||||
struct SupportBuffer {
|
||||
int4 remapped[11];
|
||||
float2 fragCoordScale;
|
||||
};
|
||||
|
||||
#define GET_FRAGCOORD() float4(in.position.xy * supportBuffer.fragCoordScale.xy, in.position.z, 1.0 / in.position.w)
|
||||
struct FragmentIn {
|
||||
float4 position [[position]];
|
||||
float4 passParameterSem0 [[user(locn0)]] [[center_no_perspective]];
|
||||
float4 passParameterSem1 [[user(locn1)]] [[center_no_perspective]];
|
||||
};
|
||||
|
||||
struct FragmentOut {
|
||||
float4 passPixelColor0 [[color(0)]];
|
||||
};
|
||||
|
||||
// end of shader inputs/outputs
|
||||
template<typename TextureT, typename CoordT>
|
||||
float sampleCompareEmulate(TextureT tex, sampler samplr, CoordT coord, float compareValue) {
|
||||
return compareValue < tex.sample(samplr, coord).x ? 1.0 : 0.0;
|
||||
}
|
||||
template<typename TextureT, typename CoordT>
|
||||
float2 textureCalculateLod(TextureT tex, sampler samplr, CoordT coord) {
|
||||
float lod = tex.calculate_unclamped_lod(samplr, coord);
|
||||
return float2(floor(lod), fract(lod));
|
||||
}
|
||||
int clampFI32(int v)
|
||||
{
|
||||
if( v == 0x7FFFFFFF )
|
||||
return as_type<int>(1.0);
|
||||
else if( v == 0xFFFFFFFF )
|
||||
return as_type<int>(0.0);
|
||||
return as_type<int>(clamp(as_type<float>(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; }
|
||||
fragment FragmentOut main0(FragmentIn in [[stage_in]], float2 pointCoord [[point_coord]], bool frontFacing [[front_facing]], constant SupportBuffer& supportBuffer [[buffer(0)]], texture2d_array<float> tex0 [[texture(0)]], sampler samplr0 [[sampler(0)]], texture2d<float> tex1 [[texture(1)]], sampler samplr1 [[sampler(1)]], texture2d<float> tex2 [[texture(2)]], sampler samplr2 [[sampler(2)]]) {
|
||||
FragmentOut out;
|
||||
int4 R0i = int4(0);
|
||||
int4 R1i = int4(0);
|
||||
int4 R2i = int4(0);
|
||||
int4 R3i = int4(0);
|
||||
int4 R4i = int4(0);
|
||||
int4 R5i = int4(0);
|
||||
int4 R6i = int4(0);
|
||||
int4 R7i = int4(0);
|
||||
int4 R8i = int4(0);
|
||||
int4 R9i = int4(0);
|
||||
int4 R122i = int4(0);
|
||||
int4 R123i = int4(0);
|
||||
int4 R124i = int4(0);
|
||||
int4 R125i = int4(0);
|
||||
int4 R126i = int4(0);
|
||||
int4 R127i = int4(0);
|
||||
int backupReg0i, backupReg1i, backupReg2i, backupReg3i, backupReg4i;
|
||||
int PV0ix = 0, PV0iy = 0, PV0iz = 0, PV0iw = 0, PV1ix = 0, PV1iy = 0, PV1iz = 0, PV1iw = 0;
|
||||
int PS0i = 0, PS1i = 0;
|
||||
int4 tempi = int4(0);
|
||||
float tempResultf;
|
||||
int tempResulti;
|
||||
int4 ARi = int4(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;
|
||||
R0i = as_type<int4>(in.passParameterSem0);
|
||||
R1i = as_type<int4>(in.passParameterSem1);
|
||||
if( activeMaskStackC[1] == true ) {
|
||||
R7i.xyz = as_type<int3>(tex2.sample(samplr2, float2(as_type<float>(R0i.x),as_type<float>(R0i.y))).xyz);
|
||||
R1i.w = as_type<int>(tex1.sample(samplr1, float2(as_type<float>(R0i.x),as_type<float>(R0i.y))).x);
|
||||
}
|
||||
if( activeMaskStackC[1] == true ) {
|
||||
// 0
|
||||
R127i.x = as_type<int>(as_type<float>(R7i.x) * 2.0 + -(1.0));
|
||||
R127i.y = as_type<int>(as_type<float>(R7i.y) * 2.0 + -(1.0));
|
||||
PV0iz = 0;
|
||||
R127i.w = as_type<int>(mul_nonIEEE(-(as_type<float>(R1i.w)),as_type<float>(supportBuffer.remapped[0].x)) + -(as_type<float>(supportBuffer.remapped[1].z)));
|
||||
R126i.w = int(0x3f800000);
|
||||
// 1
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R127i.x),as_type<float>(R127i.y),as_type<float>(PV0iz),as_type<float>(0x80000000)),float4(as_type<float>(R127i.x),as_type<float>(R127i.y),as_type<float>(R127i.y),0.0)));
|
||||
PV1ix = tempi.x;
|
||||
PV1iy = tempi.x;
|
||||
PV1iz = tempi.x;
|
||||
PV1iw = tempi.x;
|
||||
R2i.x = as_type<int>(mul_nonIEEE(as_type<float>(R1i.x), as_type<float>(R127i.w)));
|
||||
// 2
|
||||
R125i.x = as_type<int>(mul_nonIEEE(as_type<float>(R1i.y), as_type<float>(R127i.w)));
|
||||
PV0iy = as_type<int>(-(as_type<float>(PV1ix)) + 1.0);
|
||||
R126i.z = R127i.w;
|
||||
R3i.w = as_type<int>(max(as_type<float>(R127i.w), -(as_type<float>(R127i.w))));
|
||||
R125i.w = int(0x3f800000);
|
||||
// 3
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R2i.x),as_type<float>(R125i.x),as_type<float>(R126i.z),as_type<float>(R126i.w)),float4(as_type<float>(supportBuffer.remapped[2].x),as_type<float>(supportBuffer.remapped[2].y),as_type<float>(supportBuffer.remapped[2].z),as_type<float>(supportBuffer.remapped[2].w))));
|
||||
PV1ix = tempi.x;
|
||||
PV1iy = tempi.x;
|
||||
PV1iz = tempi.x;
|
||||
PV1iw = tempi.x;
|
||||
PS1i = as_type<int>(sqrt(as_type<float>(PV0iy)));
|
||||
// 4
|
||||
R126i.x = 0;
|
||||
R5i.y = 0;
|
||||
R127i.z = as_type<int>(-(as_type<float>(PS1i)));
|
||||
R127i.w = as_type<int>(mul_nonIEEE(as_type<float>(R126i.w), as_type<float>(supportBuffer.remapped[3].w)));
|
||||
R124i.w = as_type<int>(1.0 / as_type<float>(PV1ix));
|
||||
// 5
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R127i.x),as_type<float>(R127i.y),as_type<float>(R127i.z),as_type<float>(0x80000000)),float4(as_type<float>(R127i.x),as_type<float>(R127i.y),as_type<float>(R127i.z),0.0)));
|
||||
PV1ix = tempi.x;
|
||||
PV1iy = tempi.x;
|
||||
PV1iz = tempi.x;
|
||||
PV1iw = tempi.x;
|
||||
R6i.z = 0;
|
||||
// 6
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R2i.x),as_type<float>(R125i.x),as_type<float>(R126i.z),as_type<float>(R127i.w)),float4(as_type<float>(supportBuffer.remapped[3].x),as_type<float>(supportBuffer.remapped[3].y),as_type<float>(supportBuffer.remapped[3].z),1.0)));
|
||||
PV0ix = tempi.x;
|
||||
PV0iy = tempi.x;
|
||||
PV0iz = tempi.x;
|
||||
PV0iw = tempi.x;
|
||||
tempResultf = 1.0 / sqrt(as_type<float>(PV1ix));
|
||||
PS0i = as_type<int>(tempResultf);
|
||||
// 7
|
||||
R1i.x = as_type<int>(mul_nonIEEE(as_type<float>(R127i.x), as_type<float>(PS0i)));
|
||||
R1i.y = as_type<int>(mul_nonIEEE(as_type<float>(R127i.y), as_type<float>(PS0i)));
|
||||
R3i.z = as_type<int>(mul_nonIEEE(as_type<float>(R127i.z), as_type<float>(PS0i)));
|
||||
R127i.w = as_type<int>(mul_nonIEEE(as_type<float>(R126i.w), as_type<float>(supportBuffer.remapped[4].w)));
|
||||
R6i.x = as_type<int>(as_type<float>(PV0ix) * as_type<float>(R124i.w));
|
||||
// 8
|
||||
R124i.x = as_type<int>(mul_nonIEEE(as_type<float>(R1i.x),as_type<float>(R3i.w)) + as_type<float>(R2i.x));
|
||||
R127i.y = as_type<int>(mul_nonIEEE(as_type<float>(R1i.y),as_type<float>(R3i.w)) + as_type<float>(R125i.x));
|
||||
R127i.z = as_type<int>(mul_nonIEEE(as_type<float>(R3i.z),as_type<float>(R3i.w)) + as_type<float>(R126i.z));
|
||||
PV0iw = as_type<int>(max(as_type<float>(R1i.y), -(as_type<float>(R1i.y))));
|
||||
tempResultf = max(0.0, as_type<float>(supportBuffer.remapped[5].w));
|
||||
tempResultf = log2(tempResultf);
|
||||
if( isinf(tempResultf) == true ) tempResultf = -3.40282347E+38F;
|
||||
R4i.w = as_type<int>(tempResultf);
|
||||
// 9
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R124i.x),as_type<float>(R127i.y),as_type<float>(R127i.z),as_type<float>(R125i.w)),float4(as_type<float>(supportBuffer.remapped[2].x),as_type<float>(supportBuffer.remapped[2].y),as_type<float>(supportBuffer.remapped[2].z),as_type<float>(supportBuffer.remapped[2].w))));
|
||||
PV1ix = tempi.x;
|
||||
PV1iy = tempi.x;
|
||||
PV1iz = tempi.x;
|
||||
PV1iw = tempi.x;
|
||||
R6i.y = as_type<int>(-(as_type<float>(PV0iw)) + 1.0);
|
||||
// 10
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R2i.x),as_type<float>(R125i.x),as_type<float>(R126i.z),as_type<float>(R127i.w)),float4(as_type<float>(supportBuffer.remapped[4].x),as_type<float>(supportBuffer.remapped[4].y),as_type<float>(supportBuffer.remapped[4].z),1.0)));
|
||||
PV0ix = tempi.x;
|
||||
PV0iy = tempi.x;
|
||||
PV0iz = tempi.x;
|
||||
PV0iw = tempi.x;
|
||||
R1i.x = as_type<int>(1.0 / as_type<float>(PV1ix));
|
||||
// 11
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R124i.x),as_type<float>(R127i.y),as_type<float>(R127i.z),as_type<float>(R125i.w)),float4(as_type<float>(supportBuffer.remapped[3].x),as_type<float>(supportBuffer.remapped[3].y),as_type<float>(supportBuffer.remapped[3].z),as_type<float>(supportBuffer.remapped[3].w))));
|
||||
PV1ix = tempi.x;
|
||||
PV1iy = tempi.x;
|
||||
PV1iz = tempi.x;
|
||||
PV1iw = tempi.x;
|
||||
R7i.y = as_type<int>(as_type<float>(PV0ix) * as_type<float>(R124i.w));
|
||||
// 12
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R124i.x),as_type<float>(R127i.y),as_type<float>(R127i.z),as_type<float>(R125i.w)),float4(as_type<float>(supportBuffer.remapped[4].x),as_type<float>(supportBuffer.remapped[4].y),as_type<float>(supportBuffer.remapped[4].z),as_type<float>(supportBuffer.remapped[4].w))));
|
||||
PV0ix = tempi.x;
|
||||
PV0iy = tempi.x;
|
||||
PV0iz = tempi.x;
|
||||
PV0iw = tempi.x;
|
||||
PS0i = as_type<int>(as_type<float>(PV1ix) * as_type<float>(R1i.x));
|
||||
// 13
|
||||
R127i.x = as_type<int>(-(as_type<float>(R6i.x)) + as_type<float>(PS0i));
|
||||
R126i.y = as_type<int>(-(as_type<float>(R6i.x)) + as_type<float>(PS0i));
|
||||
PV1iz = as_type<int>(as_type<float>(PV0ix) * as_type<float>(R1i.x));
|
||||
PV1iw = as_type<int>(mul_nonIEEE(as_type<float>(R125i.w), as_type<float>(supportBuffer.remapped[6].w)));
|
||||
PS1i = as_type<int>(mul_nonIEEE(as_type<float>(R126i.w), as_type<float>(supportBuffer.remapped[6].w)));
|
||||
// 14
|
||||
R3i.x = as_type<int>(-(as_type<float>(R7i.y)) + as_type<float>(PV1iz));
|
||||
PV0iy = as_type<int>(-(as_type<float>(R7i.y)) + as_type<float>(PV1iz));
|
||||
R127i.z = as_type<int>(mul_nonIEEE(as_type<float>(R127i.z),as_type<float>(supportBuffer.remapped[6].z)) + as_type<float>(PV1iw));
|
||||
R122i.x = as_type<int>(mul_nonIEEE(as_type<float>(R126i.z),as_type<float>(supportBuffer.remapped[6].z)) + as_type<float>(PS1i));
|
||||
// 15
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R127i.x),as_type<float>(PV0iy),as_type<float>(R126i.x),as_type<float>(0x80000000)),float4(as_type<float>(R127i.x),as_type<float>(PV0iy),as_type<float>(R126i.x),0.0)));
|
||||
PV1ix = tempi.x;
|
||||
PV1iy = tempi.x;
|
||||
PV1iz = tempi.x;
|
||||
PV1iw = tempi.x;
|
||||
R127i.x = as_type<int>(mul_nonIEEE(as_type<float>(R125i.x),as_type<float>(supportBuffer.remapped[6].y)) + as_type<float>(R122i.x));
|
||||
// 16
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R124i.x),as_type<float>(R127i.y),as_type<float>(R127i.z),0.0),float4(as_type<float>(supportBuffer.remapped[6].x),as_type<float>(supportBuffer.remapped[6].y),1.0,0.0)));
|
||||
PV0ix = tempi.x;
|
||||
PV0iy = tempi.x;
|
||||
PV0iz = tempi.x;
|
||||
PV0iw = tempi.x;
|
||||
PS0i = as_type<int>(sqrt(as_type<float>(PV1ix)));
|
||||
// 17
|
||||
R123i.z = as_type<int>(mul_nonIEEE(as_type<float>(R2i.x),as_type<float>(supportBuffer.remapped[6].x)) + as_type<float>(R127i.x));
|
||||
R126i.w = as_type<int>(as_type<float>(PV0ix) * as_type<float>(R1i.x));
|
||||
PS1i = as_type<int>(1.0 / as_type<float>(PS0i));
|
||||
// 18
|
||||
R4i.z = as_type<int>(as_type<float>(R123i.z) * as_type<float>(R124i.w));
|
||||
PV0iw = as_type<int>(as_type<float>(PS1i) * as_type<float>(0x3db4b4b5));
|
||||
// 19
|
||||
PV1ix = as_type<int>(mul_nonIEEE(as_type<float>(PV0iw), as_type<float>(supportBuffer.remapped[5].y)));
|
||||
PV1iw = as_type<int>(-(as_type<float>(R4i.z)) + as_type<float>(R126i.w));
|
||||
// 20
|
||||
R7i.x = as_type<int>(mul_nonIEEE(as_type<float>(R126i.y), as_type<float>(PV1ix)));
|
||||
R8i.y = as_type<int>(mul_nonIEEE(as_type<float>(R3i.x), as_type<float>(PV1ix)));
|
||||
R5i.z = as_type<int>(mul_nonIEEE(as_type<float>(PV1iw), as_type<float>(PV1ix)));
|
||||
}
|
||||
while( activeMaskStackC[1] == true )
|
||||
{
|
||||
if( activeMaskStackC[1] == true ) {
|
||||
activeMaskStack[1] = activeMaskStack[0];
|
||||
activeMaskStackC[2] = activeMaskStackC[1];
|
||||
// 0
|
||||
R1i.y = (($sampleCount > as_type<float>(R6i.z))?-1:0);
|
||||
// 1
|
||||
predResult = (R1i.y == 0);
|
||||
activeMaskStack[1] = predResult;
|
||||
activeMaskStackC[2] = predResult == true && activeMaskStackC[1] == true;
|
||||
}
|
||||
else {
|
||||
activeMaskStack[1] = false;
|
||||
activeMaskStackC[2] = false;
|
||||
}
|
||||
if( activeMaskStackC[2] == true ) {
|
||||
// 0
|
||||
R1i.y = R5i.y;
|
||||
}
|
||||
if( activeMaskStackC[2] == true ) {
|
||||
break;
|
||||
}
|
||||
activeMaskStackC[1] = activeMaskStack[0] == true && activeMaskStackC[0] == true;
|
||||
if( activeMaskStackC[1] == true ) {
|
||||
activeMaskStack[1] = activeMaskStack[0];
|
||||
activeMaskStackC[2] = activeMaskStackC[1];
|
||||
// 0
|
||||
R123i.w = as_type<int>(as_type<float>(R6i.z) * 4.0 + 0.0);
|
||||
// 1
|
||||
R8i.x = as_type<int>(as_type<float>(R123i.w) + 1.0);
|
||||
R9i.y = as_type<int>(as_type<float>(R123i.w) + 2.0);
|
||||
R8i.z = as_type<int>(as_type<float>(R123i.w) + 3.0);
|
||||
R5i.w = as_type<int>(as_type<float>(R123i.w) + 4.0);
|
||||
// 2
|
||||
R1i.x = as_type<int>(mul_nonIEEE(as_type<float>(R7i.x),as_type<float>(R8i.x)) + as_type<float>(R6i.x));
|
||||
R1i.y = as_type<int>(mul_nonIEEE(as_type<float>(R8i.y),as_type<float>(R8i.x)) + as_type<float>(R7i.y));
|
||||
R1i.z = as_type<int>(mul_nonIEEE(as_type<float>(R7i.x),as_type<float>(R9i.y)) + as_type<float>(R6i.x));
|
||||
R1i.w = as_type<int>(mul_nonIEEE(as_type<float>(R8i.y),as_type<float>(R9i.y)) + as_type<float>(R7i.y));
|
||||
R2i.x = as_type<int>(mul_nonIEEE(as_type<float>(R7i.x),as_type<float>(R8i.z)) + as_type<float>(R6i.x));
|
||||
// 3
|
||||
PV1ix = as_type<int>(max(as_type<float>(R1i.y), -(1.0)));
|
||||
R2i.y = as_type<int>(mul_nonIEEE(as_type<float>(R8i.y),as_type<float>(R8i.z)) + as_type<float>(R7i.y));
|
||||
PV1iz = as_type<int>(max(as_type<float>(R1i.x), -(1.0)));
|
||||
PV1iw = as_type<int>(max(as_type<float>(R1i.z), -(1.0)));
|
||||
R127i.w = as_type<int>(max(as_type<float>(R1i.w), -(1.0)));
|
||||
// 4
|
||||
PV0ix = as_type<int>(min(as_type<float>(PV1iz), 1.0));
|
||||
PV0iy = as_type<int>(min(as_type<float>(PV1ix), 1.0));
|
||||
R2i.z = as_type<int>(mul_nonIEEE(as_type<float>(R7i.x),as_type<float>(R5i.w)) + as_type<float>(R6i.x));
|
||||
R2i.w = as_type<int>(mul_nonIEEE(as_type<float>(R8i.y),as_type<float>(R5i.w)) + as_type<float>(R7i.y));
|
||||
R127i.y = as_type<int>(min(as_type<float>(PV1iw), 1.0));
|
||||
// 5
|
||||
R127i.x = as_type<int>(max(as_type<float>(R2i.y), -(1.0)));
|
||||
R126i.y = as_type<int>(as_type<float>(R1i.x) + -(as_type<float>(PV0ix)));
|
||||
PV1iz = as_type<int>(max(as_type<float>(R2i.x), -(1.0)));
|
||||
PV1iw = as_type<int>(min(as_type<float>(R127i.w), 1.0));
|
||||
R125i.y = as_type<int>(as_type<float>(R1i.y) + -(as_type<float>(PV0iy)));
|
||||
// 6
|
||||
PV0ix = as_type<int>(max(as_type<float>(R2i.w), -(1.0)));
|
||||
PV0iy = as_type<int>(max(as_type<float>(R2i.z), -(1.0)));
|
||||
R127i.z = as_type<int>(as_type<float>(R1i.z) + -(as_type<float>(R127i.y)));
|
||||
R127i.w = as_type<int>(as_type<float>(R1i.w) + -(as_type<float>(PV1iw)));
|
||||
PS0i = as_type<int>(min(as_type<float>(PV1iz), 1.0));
|
||||
// 7
|
||||
PV1ix = as_type<int>(min(as_type<float>(R127i.x), 1.0));
|
||||
R127i.y = as_type<int>(as_type<float>(R2i.x) + -(as_type<float>(PS0i)));
|
||||
PV1iz = as_type<int>(min(as_type<float>(PV0iy), 1.0));
|
||||
PV1iw = as_type<int>(min(as_type<float>(PV0ix), 1.0));
|
||||
R3i.x = as_type<int>(mul_nonIEEE(as_type<float>(R5i.z),as_type<float>(R8i.x)) + as_type<float>(R4i.z));
|
||||
// 8
|
||||
PV0ix = as_type<int>(0.0);
|
||||
R124i.y = as_type<int>(as_type<float>(R2i.y) + -(as_type<float>(PV1ix)));
|
||||
R126i.z = as_type<int>(as_type<float>(R2i.z) + -(as_type<float>(PV1iz)));
|
||||
R126i.w = as_type<int>(as_type<float>(R2i.w) + -(as_type<float>(PV1iw)));
|
||||
R4i.y = as_type<int>(mul_nonIEEE(as_type<float>(R5i.z),as_type<float>(R9i.y)) + as_type<float>(R4i.z));
|
||||
// 9
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R126i.y),as_type<float>(R125i.y),as_type<float>(PV0ix),as_type<float>(0x80000000)),float4(1.0,1.0,1.0,0.0)));
|
||||
PV1ix = tempi.x;
|
||||
PV1iy = tempi.x;
|
||||
PV1iz = tempi.x;
|
||||
PV1iw = tempi.x;
|
||||
R0i.z = as_type<int>(mul_nonIEEE(as_type<float>(R5i.z),as_type<float>(R8i.z)) + as_type<float>(R4i.z));
|
||||
// 10
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R127i.z),as_type<float>(R127i.w),as_type<float>(R127i.w),as_type<float>(0x80000000)),float4(1.0,1.0,0.0,0.0)));
|
||||
PV0ix = tempi.x;
|
||||
PV0iy = tempi.x;
|
||||
PV0iz = tempi.x;
|
||||
PV0iw = tempi.x;
|
||||
R127i.z = ((as_type<float>(PV1ix) != 0.0)?-1:0);
|
||||
// 11
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R127i.y),as_type<float>(R124i.y),as_type<float>(R124i.y),as_type<float>(0x80000000)),float4(1.0,1.0,0.0,0.0)));
|
||||
PV1ix = tempi.x;
|
||||
R127i.y = tempi.x;
|
||||
PV1iz = tempi.x;
|
||||
PV1iw = tempi.x;
|
||||
PS1i = ((as_type<float>(PV0ix) != 0.0)?-1:0);
|
||||
// 12
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R126i.z),as_type<float>(R126i.w),as_type<float>(R126i.w),as_type<float>(0x80000000)),float4(1.0,1.0,0.0,0.0)));
|
||||
PV0ix = tempi.x;
|
||||
PV0iy = tempi.x;
|
||||
PV0iz = tempi.x;
|
||||
PV0iw = tempi.x;
|
||||
R127i.z = R127i.z | PS1i;
|
||||
// 13
|
||||
PV1iy = ((as_type<float>(R127i.y) != 0.0)?-1:0);
|
||||
R126i.w = ((as_type<float>(PV0ix) != 0.0)?-1:0);
|
||||
R0i.w = as_type<int>(mul_nonIEEE(as_type<float>(R5i.z),as_type<float>(R5i.w)) + as_type<float>(R4i.z));
|
||||
// 14
|
||||
PV0ix = PV1iy | R127i.z;
|
||||
// 15
|
||||
R3i.y = R126i.w | PV0ix;
|
||||
// 16
|
||||
predResult = (R3i.y != 0);
|
||||
activeMaskStack[1] = predResult;
|
||||
activeMaskStackC[2] = predResult == true && activeMaskStackC[1] == true;
|
||||
}
|
||||
else {
|
||||
activeMaskStack[1] = false;
|
||||
activeMaskStackC[2] = false;
|
||||
}
|
||||
if( activeMaskStackC[2] == true ) {
|
||||
// 0
|
||||
R1i.y = R5i.y;
|
||||
}
|
||||
if( activeMaskStackC[2] == true ) {
|
||||
break;
|
||||
}
|
||||
activeMaskStackC[1] = activeMaskStack[0] == true && activeMaskStackC[0] == true;
|
||||
if( activeMaskStackC[1] == true ) {
|
||||
// 0
|
||||
PV0ix = R1i.z;
|
||||
PV0ix = as_type<int>(as_type<float>(PV0ix) / 2.0);
|
||||
PV0iy = as_type<int>(-(as_type<float>(R1i.w)));
|
||||
PV0iy = as_type<int>(as_type<float>(PV0iy) / 2.0);
|
||||
PV0iz = R1i.x;
|
||||
PV0iz = as_type<int>(as_type<float>(PV0iz) / 2.0);
|
||||
PV0iw = as_type<int>(-(as_type<float>(R1i.y)));
|
||||
PV0iw = as_type<int>(as_type<float>(PV0iw) / 2.0);
|
||||
R127i.y = R2i.x;
|
||||
R127i.y = as_type<int>(as_type<float>(R127i.y) / 2.0);
|
||||
// 1
|
||||
R1i.x = as_type<int>(as_type<float>(PV0iz) + 0.5);
|
||||
R1i.y = as_type<int>(as_type<float>(PV0iw) + 0.5);
|
||||
R1i.z = as_type<int>(as_type<float>(PV0ix) + 0.5);
|
||||
R1i.w = as_type<int>(as_type<float>(PV0iy) + 0.5);
|
||||
PS1i = as_type<int>(-(as_type<float>(R2i.y)));
|
||||
PS1i = as_type<int>(as_type<float>(PS1i) / 2.0);
|
||||
// 2
|
||||
R2i.x = as_type<int>(as_type<float>(R127i.y) + 0.5);
|
||||
R2i.y = as_type<int>(as_type<float>(PS1i) + 0.5);
|
||||
PV0iz = as_type<int>(-(as_type<float>(R2i.w)));
|
||||
PV0iz = as_type<int>(as_type<float>(PV0iz) / 2.0);
|
||||
PV0iw = R2i.z;
|
||||
PV0iw = as_type<int>(as_type<float>(PV0iw) / 2.0);
|
||||
R4i.x = 0;
|
||||
// 3
|
||||
backupReg0i = R3i.x;
|
||||
R3i.x = as_type<int>(as_type<float>(PV0iw) + 0.5);
|
||||
R3i.y = as_type<int>(as_type<float>(PV0iz) + 0.5);
|
||||
R2i.z = backupReg0i;
|
||||
R2i.w = int(0x3f800000);
|
||||
R5i.x = 0;
|
||||
}
|
||||
if( activeMaskStackC[1] == true ) {
|
||||
R1i.x = as_type<int>(tex1.sample(samplr1, float2(as_type<float>(R1i.x),as_type<float>(R1i.y))).x);
|
||||
R1i.y = as_type<int>(tex1.sample(samplr1, float2(as_type<float>(R1i.z),as_type<float>(R1i.w))).x);
|
||||
R1i.z = as_type<int>(tex1.sample(samplr1, float2(as_type<float>(R2i.x),as_type<float>(R2i.y))).x);
|
||||
R1i.w = as_type<int>(tex1.sample(samplr1, float2(as_type<float>(R3i.x),as_type<float>(R3i.y))).x);
|
||||
}
|
||||
if( activeMaskStackC[1] == true ) {
|
||||
activeMaskStack[1] = activeMaskStack[0];
|
||||
activeMaskStackC[2] = activeMaskStackC[1];
|
||||
// 0
|
||||
R126i.x = 0;
|
||||
R125i.y = R0i.z;
|
||||
R127i.z = R4i.y;
|
||||
R127i.w = int(0x3f800000);
|
||||
R125i.w = int(0x3f800000);
|
||||
// 1
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R4i.x),as_type<float>(R4i.x),as_type<float>(R2i.z),as_type<float>(R2i.w)),float4(as_type<float>(supportBuffer.remapped[7].x),as_type<float>(supportBuffer.remapped[7].y),as_type<float>(supportBuffer.remapped[7].z),as_type<float>(supportBuffer.remapped[7].w))));
|
||||
PV1ix = tempi.x;
|
||||
R127i.y = tempi.x;
|
||||
PV1iz = tempi.x;
|
||||
PV1iw = tempi.x;
|
||||
R125i.x = 0;
|
||||
// 2
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R5i.x),as_type<float>(R5i.x),as_type<float>(R127i.z),as_type<float>(R127i.w)),float4(as_type<float>(supportBuffer.remapped[7].x),as_type<float>(supportBuffer.remapped[7].y),as_type<float>(supportBuffer.remapped[7].z),as_type<float>(supportBuffer.remapped[7].w))));
|
||||
PV0ix = tempi.x;
|
||||
PV0iy = tempi.x;
|
||||
PV0iz = tempi.x;
|
||||
R126i.w = tempi.x;
|
||||
R126i.z = R0i.w;
|
||||
// 3
|
||||
backupReg0i = R127i.y;
|
||||
PV1ix = as_type<int>(mul_nonIEEE(as_type<float>(R2i.w), as_type<float>(supportBuffer.remapped[8].w)));
|
||||
R127i.y = as_type<int>(mul_nonIEEE(as_type<float>(R127i.w), as_type<float>(supportBuffer.remapped[8].w)));
|
||||
R127i.w = int(0x3f800000);
|
||||
R127i.x = as_type<int>(1.0 / as_type<float>(backupReg0i));
|
||||
// 4
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R4i.x),as_type<float>(R4i.x),as_type<float>(R2i.z),as_type<float>(PV1ix)),float4(as_type<float>(supportBuffer.remapped[8].x),as_type<float>(supportBuffer.remapped[8].y),as_type<float>(supportBuffer.remapped[8].z),1.0)));
|
||||
PV0ix = tempi.x;
|
||||
PV0iy = tempi.x;
|
||||
PV0iz = tempi.x;
|
||||
PV0iw = tempi.x;
|
||||
R126i.y = as_type<int>(1.0 / as_type<float>(R126i.w));
|
||||
// 5
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R5i.x),as_type<float>(R5i.x),as_type<float>(R127i.z),as_type<float>(R127i.y)),float4(as_type<float>(supportBuffer.remapped[8].x),as_type<float>(supportBuffer.remapped[8].y),as_type<float>(supportBuffer.remapped[8].z),1.0)));
|
||||
PV1ix = tempi.x;
|
||||
PV1iy = tempi.x;
|
||||
PV1iz = tempi.x;
|
||||
PV1iw = tempi.x;
|
||||
R127i.z = as_type<int>(as_type<float>(PV0ix) * as_type<float>(R127i.x));
|
||||
// 6
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R126i.x),as_type<float>(R126i.x),as_type<float>(R125i.y),as_type<float>(R125i.w)),float4(as_type<float>(supportBuffer.remapped[7].x),as_type<float>(supportBuffer.remapped[7].y),as_type<float>(supportBuffer.remapped[7].z),as_type<float>(supportBuffer.remapped[7].w))));
|
||||
PV0ix = tempi.x;
|
||||
PV0iy = tempi.x;
|
||||
PV0iz = tempi.x;
|
||||
PV0iw = tempi.x;
|
||||
R127i.x = as_type<int>(as_type<float>(PV1ix) * as_type<float>(R126i.y));
|
||||
// 7
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R126i.x),as_type<float>(R126i.x),as_type<float>(R125i.y),as_type<float>(R125i.w)),float4(as_type<float>(supportBuffer.remapped[8].x),as_type<float>(supportBuffer.remapped[8].y),as_type<float>(supportBuffer.remapped[8].z),as_type<float>(supportBuffer.remapped[8].w))));
|
||||
PV1ix = tempi.x;
|
||||
PV1iy = tempi.x;
|
||||
PV1iz = tempi.x;
|
||||
PV1iw = tempi.x;
|
||||
PS1i = as_type<int>(1.0 / as_type<float>(PV0ix));
|
||||
// 8
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R125i.x),as_type<float>(R125i.x),as_type<float>(R126i.z),as_type<float>(R127i.w)),float4(as_type<float>(supportBuffer.remapped[7].x),as_type<float>(supportBuffer.remapped[7].y),as_type<float>(supportBuffer.remapped[7].z),as_type<float>(supportBuffer.remapped[7].w))));
|
||||
PV0ix = tempi.x;
|
||||
PV0iy = tempi.x;
|
||||
PV0iz = tempi.x;
|
||||
PV0iw = tempi.x;
|
||||
R125i.y = as_type<int>(as_type<float>(PV1ix) * as_type<float>(PS1i));
|
||||
// 9
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R125i.x),as_type<float>(R125i.x),as_type<float>(R126i.z),as_type<float>(R127i.w)),float4(as_type<float>(supportBuffer.remapped[8].x),as_type<float>(supportBuffer.remapped[8].y),as_type<float>(supportBuffer.remapped[8].z),as_type<float>(supportBuffer.remapped[8].w))));
|
||||
PV1ix = tempi.x;
|
||||
PV1iy = tempi.x;
|
||||
PV1iz = tempi.x;
|
||||
PV1iw = tempi.x;
|
||||
PS1i = as_type<int>(1.0 / as_type<float>(PV0ix));
|
||||
// 10
|
||||
R123i.x = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[0].y),-(as_type<float>(R127i.x))) + -(as_type<float>(supportBuffer.remapped[0].z)));
|
||||
R123i.y = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[0].y),-(as_type<float>(R127i.z))) + -(as_type<float>(supportBuffer.remapped[0].z)));
|
||||
R123i.z = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[0].y),-(as_type<float>(R125i.y))) + -(as_type<float>(supportBuffer.remapped[0].z)));
|
||||
PV0iw = as_type<int>(as_type<float>(PV1ix) * as_type<float>(PS1i));
|
||||
// 11
|
||||
R1i.x = as_type<int>(as_type<float>(R1i.x) + -(as_type<float>(R123i.y)));
|
||||
R1i.y = as_type<int>(as_type<float>(R1i.y) + -(as_type<float>(R123i.x)));
|
||||
R0i.z = as_type<int>(as_type<float>(R1i.z) + -(as_type<float>(R123i.z)));
|
||||
R123i.w = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[0].y),-(as_type<float>(PV0iw))) + -(as_type<float>(supportBuffer.remapped[0].z)));
|
||||
// 12
|
||||
R2i.x = ((0.0 > as_type<float>(R1i.x))?-1:0);
|
||||
R1i.z = ((0.0 > as_type<float>(R0i.z))?-1:0);
|
||||
R0i.w = ((0.0 > as_type<float>(R1i.y))?-1:0);
|
||||
R1i.w = as_type<int>(as_type<float>(R1i.w) + -(as_type<float>(R123i.w)));
|
||||
// 13
|
||||
PV1iy = R2i.x | R0i.w;
|
||||
R2i.y = ((0.0 > as_type<float>(R1i.w))?-1:0);
|
||||
// 14
|
||||
PV0ix = R1i.z | PV1iy;
|
||||
// 15
|
||||
R2i.z = R2i.y | PV0ix;
|
||||
// 16
|
||||
predResult = (R2i.z != 0);
|
||||
activeMaskStack[1] = predResult;
|
||||
activeMaskStackC[2] = predResult == true && activeMaskStackC[1] == true;
|
||||
}
|
||||
else {
|
||||
activeMaskStack[1] = false;
|
||||
activeMaskStackC[2] = false;
|
||||
}
|
||||
if( activeMaskStackC[2] == true ) {
|
||||
// 0
|
||||
int offset = as_type<int>($sampleCount * 4.0);
|
||||
R127i.x = ((R0i.w == 0)?(offset):(R9i.y));
|
||||
R127i.y = ((R2i.x == 0)?(offset):(R8i.x));
|
||||
R127i.z = ((R2i.y == 0)?(offset):(R5i.w));
|
||||
R127i.w = ((R1i.z == 0)?(offset):(R8i.z));
|
||||
PS0i = as_type<int>(1.0 / as_type<float>(supportBuffer.remapped[9].x));
|
||||
// 1
|
||||
R126i.x = as_type<int>(as_type<float>(R3i.w) * as_type<float>(PS0i));
|
||||
R126i.x = clampFI32(R126i.x);
|
||||
PV1iy = as_type<int>(min(as_type<float>(R127i.y), as_type<float>(R127i.x)));
|
||||
R126i.z = as_type<int>(max(as_type<float>(R1i.x), -(as_type<float>(R1i.x))));
|
||||
R126i.w = as_type<int>(max(as_type<float>(R1i.y), -(as_type<float>(R1i.y))));
|
||||
R125i.z = as_type<int>(max(as_type<float>(R0i.z), -(as_type<float>(R0i.z))));
|
||||
// 2
|
||||
PV0ix = as_type<int>(min(as_type<float>(R127i.w), as_type<float>(PV1iy)));
|
||||
R126i.y = as_type<int>(max(as_type<float>(R1i.w), -(as_type<float>(R1i.w))));
|
||||
// 3
|
||||
R5i.y = as_type<int>(min(as_type<float>(R127i.z), as_type<float>(PV0ix)));
|
||||
// 4
|
||||
backupReg0i = R127i.x;
|
||||
backupReg1i = R127i.z;
|
||||
R127i.x = ((as_type<float>(R127i.y) == as_type<float>(R5i.y))?-1:0);
|
||||
R127i.y = ((as_type<float>(R127i.w) == as_type<float>(R5i.y))?-1:0);
|
||||
R127i.z = ((as_type<float>(backupReg0i) == as_type<float>(R5i.y))?-1:0);
|
||||
PV0iw = as_type<int>(as_type<float>(R5i.y) / ($sampleCount * 4.0)); // TODO: should $sampleCount be used here as well?
|
||||
R125i.y = ((as_type<float>(backupReg1i) == as_type<float>(R5i.y))?-1:0);
|
||||
// 5
|
||||
PV1iy = as_type<int>(mul_nonIEEE(as_type<float>(PV0iw), as_type<float>(R6i.y)));
|
||||
// 6
|
||||
PV0iw = as_type<int>(mul_nonIEEE(as_type<float>(R126i.x), as_type<float>(PV1iy)));
|
||||
PV0iw = clampFI32(PV0iw);
|
||||
// 7
|
||||
PV1iz = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[5].z), as_type<float>(PV0iw)));
|
||||
// 8
|
||||
PV0ix = as_type<int>(mul_nonIEEE(as_type<float>(PV1iz), as_type<float>(R4i.w)));
|
||||
// 9
|
||||
PS1i = as_type<int>(exp2(as_type<float>(PV0ix)));
|
||||
// 10
|
||||
PV0iw = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[5].x), as_type<float>(PS1i)));
|
||||
// 11
|
||||
PV1ix = ((as_type<float>(PV0iw) > as_type<float>(R126i.z))?-1:0);
|
||||
PV1iy = ((as_type<float>(PV0iw) > as_type<float>(R125i.z))?-1:0);
|
||||
PV1iz = ((as_type<float>(PV0iw) > as_type<float>(R126i.y))?-1:0);
|
||||
PV1iw = ((as_type<float>(PV0iw) > as_type<float>(R126i.w))?-1:0);
|
||||
// 12
|
||||
R123i.x = ((R127i.z == 0)?(0):(PV1iw));
|
||||
R127i.y = ((R127i.y == 0)?(0):(PV1iy));
|
||||
R123i.z = ((R127i.x == 0)?(0):(PV1ix));
|
||||
R126i.w = ((R125i.y == 0)?(0):(PV1iz));
|
||||
// 13
|
||||
PV1iz = R123i.z | R123i.x;
|
||||
// 14
|
||||
PV0ix = R127i.y | PV1iz;
|
||||
// 15
|
||||
R1i.y = R126i.w | PV0ix;
|
||||
}
|
||||
if( activeMaskStackC[2] == true ) {
|
||||
break;
|
||||
}
|
||||
activeMaskStackC[1] = activeMaskStack[0] == true && activeMaskStackC[0] == true;
|
||||
if( activeMaskStackC[1] == true ) {
|
||||
// 0
|
||||
R6i.z = as_type<int>(as_type<float>(R6i.z) + 1.0);
|
||||
}
|
||||
}
|
||||
if( activeMaskStackC[1] == true ) {
|
||||
// 0
|
||||
R123i.x = as_type<int>(as_type<float>(R0i.x) * 2.0 + -(1.0));
|
||||
R127i.y = as_type<int>(mul_nonIEEE(as_type<float>(R7i.x),as_type<float>(R5i.y)) + as_type<float>(R6i.x));
|
||||
PV0iz = as_type<int>(as_type<float>(R5i.y) / ($sampleCount * 4.0));
|
||||
R123i.w = as_type<int>(as_type<float>(R0i.y) * 2.0 + -(1.0));
|
||||
PS0i = as_type<int>(1.0 / as_type<float>(R3i.z));
|
||||
// 1
|
||||
R123i.x = as_type<int>(mul_nonIEEE(-(as_type<float>(R123i.x)),as_type<float>(R123i.x)) + 1.0);
|
||||
PV1iy = as_type<int>(-(as_type<float>(PV0iz)) + 1.0);
|
||||
R123i.z = as_type<int>(mul_nonIEEE(-(as_type<float>(R123i.w)),as_type<float>(R123i.w)) + 1.0);
|
||||
PV1iw = as_type<int>(as_type<float>(supportBuffer.remapped[9].w) * as_type<float>(PS0i));
|
||||
PV1iw = clampFI32(PV1iw);
|
||||
R126i.y = as_type<int>(mul_nonIEEE(as_type<float>(R8i.y),as_type<float>(R5i.y)) + as_type<float>(R7i.y));
|
||||
// 2
|
||||
backupReg0i = R1i.y;
|
||||
PV0ix = as_type<int>(max(as_type<float>(PV1iy), as_type<float>(0x3dcccccd)));
|
||||
R1i.y = as_type<int>(mul_nonIEEE(as_type<float>(R123i.z), as_type<float>(R123i.x)));
|
||||
R2i.z = as_type<int>(-(as_type<float>(PV1iw)) + 1.0);
|
||||
R0i.w = ((backupReg0i == 0)?(0):(int(0x3f800000)));
|
||||
PS0i = R127i.y;
|
||||
PS0i = as_type<int>(as_type<float>(PS0i) / 2.0);
|
||||
// 3
|
||||
PV1ix = as_type<int>(-(as_type<float>(R126i.y)));
|
||||
PV1ix = as_type<int>(as_type<float>(PV1ix) / 2.0);
|
||||
R0i.z = as_type<int>(rint(1.0));
|
||||
PV1iw = as_type<int>(min(as_type<float>(PV0ix), 1.0));
|
||||
R0i.x = as_type<int>(as_type<float>(PS0i) + 0.5);
|
||||
// 4
|
||||
R0i.y = as_type<int>(as_type<float>(PV1ix) + 0.5);
|
||||
R1i.z = as_type<int>(mul_nonIEEE(as_type<float>(PV1iw), as_type<float>(PV1iw)));
|
||||
}
|
||||
if( activeMaskStackC[1] == true ) {
|
||||
R0i.xyz = as_type<int3>(tex0.sample(samplr0, float2(as_type<float>(R0i.x), as_type<float>(R0i.y)), uint(rint(as_type<float>(R0i.z)))).xyz);
|
||||
}
|
||||
if( activeMaskStackC[1] == true ) {
|
||||
// 0
|
||||
PV0iw = as_type<int>(mul_nonIEEE(as_type<float>(R1i.z), as_type<float>(supportBuffer.remapped[10].w)));
|
||||
PV0iw = clampFI32(PV0iw);
|
||||
// 1
|
||||
PV1iy = as_type<int>(mul_nonIEEE(as_type<float>(R7i.z), as_type<float>(PV0iw)));
|
||||
// 2
|
||||
PV0iw = as_type<int>(mul_nonIEEE(as_type<float>(PV1iy), as_type<float>(R1i.y)));
|
||||
// 3
|
||||
PV1iw = as_type<int>(mul_nonIEEE(as_type<float>(PV0iw), as_type<float>(R2i.z)));
|
||||
// 4
|
||||
PV0iy = as_type<int>(mul_nonIEEE(as_type<float>(PV1iw), as_type<float>(R0i.w)));
|
||||
// 5
|
||||
PV1ix = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[10].x), as_type<float>(PV0iy)));
|
||||
R2i.w = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[10].y), as_type<float>(PV0iy)));
|
||||
// 6
|
||||
R2i.x = as_type<int>(mul_nonIEEE(as_type<float>(R0i.x), as_type<float>(PV1ix)));
|
||||
R2i.y = as_type<int>(mul_nonIEEE(as_type<float>(R0i.y), as_type<float>(PV1ix)));
|
||||
R2i.z = as_type<int>(mul_nonIEEE(as_type<float>(R0i.z), as_type<float>(PV1ix)));
|
||||
}
|
||||
// export
|
||||
out.passPixelColor0 = as_type<float4>(float4(as_type<float>(R2i.x), as_type<float>(R2i.y), as_type<float>(R2i.z), as_type<float>(R2i.w)));
|
||||
return out;
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,585 @@
|
||||
// shader 8ff2cf86e789335f
|
||||
#include <metal_stdlib>
|
||||
using namespace metal;
|
||||
#define SET_POSITION(_v) out.position = _v; out.position.z = (out.position.z + out.position.w) / 2.0
|
||||
// start of shader inputs/outputs, predetermined by Cemu. Do not touch
|
||||
struct SupportBuffer {
|
||||
int4 remapped[10];
|
||||
float2 fragCoordScale;
|
||||
};
|
||||
|
||||
#define GET_FRAGCOORD() float4(in.position.xy * supportBuffer.fragCoordScale.xy, in.position.z, 1.0 / in.position.w)
|
||||
struct FragmentIn {
|
||||
float4 position [[position]];
|
||||
float4 passParameterSem0 [[user(locn0)]];
|
||||
float4 passParameterSem1 [[user(locn1)]];
|
||||
float4 passParameterSem3 [[user(locn2)]];
|
||||
float4 passParameterSem4 [[user(locn3)]];
|
||||
float4 passParameterSem6 [[user(locn4)]];
|
||||
};
|
||||
|
||||
struct FragmentOut {
|
||||
float4 passPixelColor0 [[color(0)]];
|
||||
};
|
||||
|
||||
// end of shader inputs/outputs
|
||||
void redcCUBE(float4 src0, float4 src1, thread float3& stm, thread int& faceId)
|
||||
{
|
||||
// stm -> x .. s, y .. t, z .. MajorAxis*2.0
|
||||
float3 inputCoord = normalize(float3(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 = float2(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 = float2(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 = float2(rx,ry);
|
||||
if( rz >= 0.0 )
|
||||
{
|
||||
faceId = 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
faceId = 5;
|
||||
}
|
||||
}
|
||||
}
|
||||
float3 redcCUBEReverse(float2 st, int faceId)
|
||||
{
|
||||
st.yx = st.xy;
|
||||
float3 v;
|
||||
float majorAxis = 1.0;
|
||||
if( faceId == 0 )
|
||||
{
|
||||
v.yz = (st-float2(1.5))*(majorAxis*2.0);
|
||||
v.x = 1.0;
|
||||
}
|
||||
else if( faceId == 1 )
|
||||
{
|
||||
v.yz = (st-float2(1.5))*(majorAxis*2.0);
|
||||
v.x = -1.0;
|
||||
}
|
||||
else if( faceId == 2 )
|
||||
{
|
||||
v.xz = (st-float2(1.5))*(majorAxis*2.0);
|
||||
v.y = 1.0;
|
||||
}
|
||||
else if( faceId == 3 )
|
||||
{
|
||||
v.xz = (st-float2(1.5))*(majorAxis*2.0);
|
||||
v.y = -1.0;
|
||||
}
|
||||
else if( faceId == 4 )
|
||||
{
|
||||
v.xy = (st-float2(1.5))*(majorAxis*2.0);
|
||||
v.z = 1.0;
|
||||
}
|
||||
else
|
||||
{
|
||||
v.xy = (st-float2(1.5))*(majorAxis*2.0);
|
||||
v.z = -1.0;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
template<typename TextureT, typename CoordT>
|
||||
float sampleCompareEmulate(TextureT tex, sampler samplr, CoordT coord, float compareValue) {
|
||||
return compareValue < tex.sample(samplr, coord).x ? 1.0 : 0.0;
|
||||
}
|
||||
template<typename TextureT, typename CoordT>
|
||||
float2 textureCalculateLod(TextureT tex, sampler samplr, CoordT coord) {
|
||||
float lod = tex.calculate_unclamped_lod(samplr, coord);
|
||||
return float2(floor(lod), fract(lod));
|
||||
}
|
||||
int clampFI32(int v)
|
||||
{
|
||||
if( v == 0x7FFFFFFF )
|
||||
return as_type<int>(1.0);
|
||||
else if( v == 0xFFFFFFFF )
|
||||
return as_type<int>(0.0);
|
||||
return as_type<int>(clamp(as_type<float>(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; }
|
||||
|
||||
#define reflExtra $reflExtra
|
||||
|
||||
fragment FragmentOut main0(FragmentIn in [[stage_in]], float2 pointCoord [[point_coord]], bool frontFacing [[front_facing]], constant SupportBuffer& supportBuffer [[buffer(0)]], texture2d<float> tex1 [[texture(0)]], sampler samplr1 [[sampler(0)]], texture2d<float> tex2 [[texture(1)]], sampler samplr2 [[sampler(1)]], texture2d<float> tex3 [[texture(2)]], sampler samplr3 [[sampler(2)]], texture2d<float> tex5 [[texture(3)]], sampler samplr5 [[sampler(3)]], texture2d<float> tex7 [[texture(4)]], sampler samplr7 [[sampler(4)]], texture2d<float> tex8 [[texture(5)]], sampler samplr8 [[sampler(5)]], texturecube_array<float> tex9 [[texture(6)]], sampler samplr9 [[sampler(6)]], texture2d_array<float> tex11 [[texture(7)]], sampler samplr11 [[sampler(7)]], texture2d<float> tex12 [[texture(8)]], sampler samplr12 [[sampler(8)]], texture2d<float> tex14 [[texture(9)]], sampler samplr14 [[sampler(9)]]) {
|
||||
FragmentOut out;
|
||||
int4 R0i = int4(0);
|
||||
int4 R1i = int4(0);
|
||||
int4 R2i = int4(0);
|
||||
int4 R3i = int4(0);
|
||||
int4 R4i = int4(0);
|
||||
int4 R5i = int4(0);
|
||||
int4 R6i = int4(0);
|
||||
int4 R7i = int4(0);
|
||||
int4 R8i = int4(0);
|
||||
int4 R9i = int4(0);
|
||||
int4 R10i = int4(0);
|
||||
int4 R11i = int4(0);
|
||||
int4 R12i = int4(0);
|
||||
int4 R13i = int4(0);
|
||||
int4 R122i = int4(0);
|
||||
int4 R123i = int4(0);
|
||||
int4 R124i = int4(0);
|
||||
int4 R125i = int4(0);
|
||||
int4 R126i = int4(0);
|
||||
int4 R127i = int4(0);
|
||||
int backupReg0i, backupReg1i, backupReg2i, backupReg3i, backupReg4i;
|
||||
int PV0ix = 0, PV0iy = 0, PV0iz = 0, PV0iw = 0, PV1ix = 0, PV1iy = 0, PV1iz = 0, PV1iw = 0;
|
||||
int PS0i = 0, PS1i = 0;
|
||||
int4 tempi = int4(0);
|
||||
float tempResultf;
|
||||
int tempResulti;
|
||||
int4 ARi = int4(0);
|
||||
bool predResult = true;
|
||||
float3 cubeMapSTM;
|
||||
int cubeMapFaceId;
|
||||
float cubeMapArrayIndex9 = 0.0;
|
||||
R0i = as_type<int4>(in.passParameterSem0);
|
||||
R1i = as_type<int4>(in.passParameterSem1);
|
||||
R2i = as_type<int4>(in.passParameterSem3);
|
||||
R3i = as_type<int4>(in.passParameterSem4);
|
||||
R4i = as_type<int4>(in.passParameterSem6);
|
||||
R7i.xyzw = as_type<int4>(tex3.sample(samplr3, float2(as_type<float>(R4i.z),as_type<float>(R4i.w))).xyzw);
|
||||
R2i.w = as_type<int>(tex5.sample(samplr5, float2(as_type<float>(R0i.x),as_type<float>(R0i.y))).x);
|
||||
R5i.xyzw = as_type<int4>(tex7.gather(samplr7, float2(0.0001) + float2(as_type<float>(R0i.x),as_type<float>(R0i.y))).xyzw);
|
||||
R6i.xyzw = as_type<int4>(tex8.gather(samplr8, float2(0.0001) + float2(as_type<float>(R0i.x),as_type<float>(R0i.y))).xyzw);
|
||||
R8i.xyzw = as_type<int4>(tex1.sample(samplr1, float2(as_type<float>(R4i.z),as_type<float>(R4i.w))).xyzw);
|
||||
// 0
|
||||
R127i.x = as_type<int>(as_type<float>(R7i.x) * 2.0 + -(1.0));
|
||||
R127i.y = as_type<int>(as_type<float>(R7i.y) * 2.0 + -(1.0));
|
||||
R126i.z = as_type<int>(as_type<float>(R7i.z) * 2.0 + -(1.0));
|
||||
R127i.w = as_type<int>(mul_nonIEEE(as_type<float>(R2i.w),as_type<float>(supportBuffer.remapped[0].x)) + as_type<float>(supportBuffer.remapped[1].x));
|
||||
R127i.z = as_type<int>(-(as_type<float>(R2i.w)) + as_type<float>(R5i.x));
|
||||
// 1
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R127i.x),as_type<float>(R127i.y),as_type<float>(R126i.z),as_type<float>(0x80000000)),float4(as_type<float>(R127i.x),as_type<float>(R127i.y),as_type<float>(R126i.z),0.0)));
|
||||
PV1ix = tempi.x;
|
||||
PV1iy = tempi.x;
|
||||
PV1iz = tempi.x;
|
||||
PV1iw = tempi.x;
|
||||
R2i.z = as_type<int>(-(as_type<float>(R127i.w)));
|
||||
// 2
|
||||
R12i.x = as_type<int>(mul_nonIEEE(as_type<float>(R0i.z), -(as_type<float>(R127i.w))));
|
||||
R12i.y = as_type<int>(mul_nonIEEE(as_type<float>(R0i.w), -(as_type<float>(R127i.w))));
|
||||
PV0iz = as_type<int>(mul_nonIEEE(as_type<float>(R127i.w), as_type<float>(supportBuffer.remapped[2].y)));
|
||||
R125i.w = as_type<int>(max(as_type<float>(R127i.z), -(as_type<float>(R127i.z))));
|
||||
tempResultf = 1.0 / sqrt(as_type<float>(PV1ix));
|
||||
R126i.y = as_type<int>(tempResultf);
|
||||
// 3
|
||||
R4i.x = as_type<int>(mul_nonIEEE(as_type<float>(R127i.x), as_type<float>(R126i.y)));
|
||||
R4i.y = as_type<int>(mul_nonIEEE(as_type<float>(R127i.y), as_type<float>(R126i.y)));
|
||||
R127i.z = as_type<int>(-(as_type<float>(R2i.w)) + as_type<float>(R5i.y));
|
||||
R126i.w = as_type<int>(-(as_type<float>(R2i.w)) + as_type<float>(R5i.z));
|
||||
R127i.w = as_type<int>(1.0 / as_type<float>(PV0iz));
|
||||
R127i.w = as_type<int>(as_type<float>(R127i.w) * 2.0);
|
||||
// 4
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R12i.x),as_type<float>(R12i.y),as_type<float>(R2i.z),as_type<float>(0x80000000)),float4(as_type<float>(R12i.x),as_type<float>(R12i.y),as_type<float>(R2i.z),0.0)));
|
||||
PV0ix = tempi.x;
|
||||
PV0iy = tempi.x;
|
||||
PV0iz = tempi.x;
|
||||
PV0iw = tempi.x;
|
||||
R9i.x = as_type<int>(mul_nonIEEE(as_type<float>(R2i.x),as_type<float>(R4i.x)) + as_type<float>(R0i.x));
|
||||
// 5
|
||||
backupReg0i = R127i.z;
|
||||
R126i.x = as_type<int>(-(as_type<float>(R2i.w)) + as_type<float>(R5i.w));
|
||||
R9i.y = as_type<int>(mul_nonIEEE(as_type<float>(R2i.y),as_type<float>(R4i.y)) + as_type<float>(R0i.y));
|
||||
R127i.z = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[0].x), as_type<float>(R127i.w)));
|
||||
R127i.w = as_type<int>(max(as_type<float>(backupReg0i), -(as_type<float>(backupReg0i))));
|
||||
PS1i = as_type<int>(sqrt(as_type<float>(PV0ix)));
|
||||
// 6
|
||||
R127i.x = as_type<int>(dot(float4(as_type<float>(R7i.x),as_type<float>(R7i.y),as_type<float>(R7i.z),as_type<float>(0x80000000)),float4(as_type<float>(0x3eaaaaab),as_type<float>(0x3eaaaaab),as_type<float>(0x3eaaaaab),0.0)));
|
||||
PV0iy = R127i.x;
|
||||
PV0iz = R127i.x;
|
||||
PV0iw = R127i.x;
|
||||
PS0i = as_type<int>(1.0 / as_type<float>(PS1i));
|
||||
// 7
|
||||
R2i.x = as_type<int>(mul_nonIEEE(as_type<float>(R12i.x), as_type<float>(PS0i)));
|
||||
R13i.y = as_type<int>(mul_nonIEEE(as_type<float>(R12i.y), as_type<float>(PS0i)));
|
||||
R9i.z = as_type<int>(mul_nonIEEE(as_type<float>(R2i.z), as_type<float>(PS0i)));
|
||||
PV1iw = as_type<int>(-(as_type<float>(R127i.x)) + as_type<float>(R6i.x));
|
||||
R125i.x = as_type<int>(-(as_type<float>(R127i.x)) + as_type<float>(R6i.y));
|
||||
// 8
|
||||
backupReg0i = R127i.x;
|
||||
R127i.x = as_type<int>(max(as_type<float>(R126i.w), -(as_type<float>(R126i.w))));
|
||||
PV0iy = as_type<int>(-(as_type<float>(backupReg0i)) + as_type<float>(R6i.w));
|
||||
R125i.z = as_type<int>(max(as_type<float>(R126i.x), -(as_type<float>(R126i.x))));
|
||||
PV0iw = as_type<int>(-(as_type<float>(backupReg0i)) + as_type<float>(R6i.z));
|
||||
PS0i = as_type<int>(max(as_type<float>(PV1iw), -(as_type<float>(PV1iw))));
|
||||
PS0i = as_type<int>(as_type<float>(PS0i) * 4.0);
|
||||
// 9
|
||||
backupReg0i = R126i.z;
|
||||
PV1ix = as_type<int>(max(as_type<float>(R125i.x), -(as_type<float>(R125i.x))));
|
||||
PV1ix = as_type<int>(as_type<float>(PV1ix) * 4.0);
|
||||
PV1iy = as_type<int>(max(as_type<float>(PV0iy), -(as_type<float>(PV0iy))));
|
||||
PV1iy = as_type<int>(as_type<float>(PV1iy) * 4.0);
|
||||
R126i.z = as_type<int>(mul_nonIEEE(as_type<float>(R127i.z),as_type<float>(R125i.w)) + as_type<float>(PS0i));
|
||||
PV1iw = as_type<int>(max(as_type<float>(PV0iw), -(as_type<float>(PV0iw))));
|
||||
PV1iw = as_type<int>(as_type<float>(PV1iw) * 4.0);
|
||||
R5i.z = as_type<int>(mul_nonIEEE(as_type<float>(backupReg0i), as_type<float>(R126i.y)));
|
||||
// 10
|
||||
backupReg0i = R127i.z;
|
||||
R123i.x = as_type<int>(mul_nonIEEE(as_type<float>(backupReg0i),as_type<float>(R127i.w)) + as_type<float>(PV1ix));
|
||||
R123i.y = as_type<int>(mul_nonIEEE(as_type<float>(backupReg0i),as_type<float>(R125i.z)) + as_type<float>(PV1iy));
|
||||
R127i.z = as_type<int>(fract(as_type<float>(R3i.x)));
|
||||
R123i.w = as_type<int>(mul_nonIEEE(as_type<float>(backupReg0i),as_type<float>(R127i.x)) + as_type<float>(PV1iw));
|
||||
R125i.x = as_type<int>(fract(as_type<float>(R3i.y)));
|
||||
// 11
|
||||
R127i.x = as_type<int>(as_type<float>(R126i.z) + -(as_type<float>(R123i.w)));
|
||||
R126i.y = R4i.x;
|
||||
R126i.y = as_type<int>(as_type<float>(R126i.y) * 2.0);
|
||||
R126i.z = as_type<int>(-(as_type<float>(R123i.x)) + as_type<float>(R123i.y));
|
||||
R127i.w = R4i.y;
|
||||
R127i.w = as_type<int>(as_type<float>(R127i.w) * 2.0);
|
||||
R125i.w = R5i.z;
|
||||
R125i.w = as_type<int>(as_type<float>(R125i.w) * 2.0);
|
||||
// 12
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R4i.x),as_type<float>(R4i.y),as_type<float>(R5i.z),as_type<float>(0x80000000)),float4(as_type<float>(R2i.x),as_type<float>(R13i.y),as_type<float>(R9i.z),0.0)));
|
||||
PV0ix = tempi.x;
|
||||
R127i.y = tempi.x;
|
||||
PV0iz = tempi.x;
|
||||
PV0iw = tempi.x;
|
||||
PS0i = as_type<int>(as_type<float>(R126i.z) + as_type<float>(R127i.x));
|
||||
// 13
|
||||
backupReg0i = R127i.x;
|
||||
R127i.x = as_type<int>(mul_nonIEEE(-(as_type<float>(PV0ix)),as_type<float>(R126i.y)) + as_type<float>(R2i.x));
|
||||
PV1iy = as_type<int>(as_type<float>(R126i.z) + -(as_type<float>(backupReg0i)));
|
||||
R126i.z = as_type<int>(mul_nonIEEE(-(as_type<float>(PV0ix)),as_type<float>(R127i.w)) + as_type<float>(R13i.y));
|
||||
PV1iw = as_type<int>(as_type<float>(PS0i) + as_type<float>(R127i.z));
|
||||
PV1iw = clampFI32(PV1iw);
|
||||
R125i.z = as_type<int>(mul_nonIEEE(-(as_type<float>(PV0ix)),as_type<float>(R125i.w)) + as_type<float>(R9i.z));
|
||||
// 14
|
||||
R6i.x = as_type<int>(mul_nonIEEE(as_type<float>(R1i.x),as_type<float>(R9i.x)) + as_type<float>(R1i.z));
|
||||
PV0iy = as_type<int>(as_type<float>(PV1iy) + as_type<float>(R125i.x));
|
||||
PV0iy = clampFI32(PV0iy);
|
||||
R11i.z = as_type<int>(rint(0.0));
|
||||
PV0iw = as_type<int>(-(as_type<float>(R127i.z)) + as_type<float>(PV1iw));
|
||||
R10i.w = as_type<int>(-(as_type<float>(R7i.w)) * 3.0 + 3.0);
|
||||
// 15
|
||||
R11i.x = as_type<int>(mul_nonIEEE(as_type<float>(R3i.z),as_type<float>(PV0iw)) + as_type<float>(R0i.x));
|
||||
R5i.y = as_type<int>(mul_nonIEEE(as_type<float>(R1i.y),as_type<float>(R9i.y)) + as_type<float>(R1i.w));
|
||||
R1i.z = as_type<int>(as_type<float>(R2i.x) + as_type<float>(supportBuffer.remapped[3].x));
|
||||
PV1iw = as_type<int>(-(as_type<float>(R125i.x)) + as_type<float>(PV0iy));
|
||||
R1i.y = as_type<int>(as_type<float>(R13i.y) + as_type<float>(supportBuffer.remapped[3].y));
|
||||
// 16
|
||||
R125i.x = as_type<int>(max(-(as_type<float>(R127i.y)), 0.0));
|
||||
R11i.y = as_type<int>(mul_nonIEEE(as_type<float>(R3i.w),as_type<float>(PV1iw)) + as_type<float>(R0i.y));
|
||||
R6i.z = as_type<int>(as_type<float>(R9i.z) + as_type<float>(supportBuffer.remapped[3].z));
|
||||
R127i.w = as_type<int>(as_type<float>(R8i.w) * 255.0);
|
||||
R6i.y = as_type<int>(-(as_type<float>(R7i.w)) + 1.0);
|
||||
// 17
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(supportBuffer.remapped[4].x),as_type<float>(supportBuffer.remapped[4].y),as_type<float>(supportBuffer.remapped[4].z),as_type<float>(0x80000000)),float4(as_type<float>(R127i.x),as_type<float>(R126i.z),as_type<float>(R125i.z),0.0)));
|
||||
PV1ix = tempi.x;
|
||||
PV1iy = tempi.x;
|
||||
PV1iz = tempi.x;
|
||||
PV1iw = tempi.x;
|
||||
R1i.w = 0;
|
||||
// 18
|
||||
R124i.x = as_type<int>(dot(float4(as_type<float>(supportBuffer.remapped[5].x),as_type<float>(supportBuffer.remapped[5].y),as_type<float>(supportBuffer.remapped[5].z),as_type<float>(0x80000000)),float4(as_type<float>(R127i.x),as_type<float>(R126i.z),as_type<float>(R125i.z),0.0)));
|
||||
PV0iy = R124i.x;
|
||||
PV0iz = R124i.x;
|
||||
PV0iw = R124i.x;
|
||||
R124i.z = as_type<int>(-(as_type<float>(PV1ix)));
|
||||
// 19
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(supportBuffer.remapped[6].x),as_type<float>(supportBuffer.remapped[6].y),as_type<float>(supportBuffer.remapped[6].z),as_type<float>(0x80000000)),float4(as_type<float>(R127i.x),as_type<float>(R126i.z),as_type<float>(R125i.z),0.0)));
|
||||
PV1ix = tempi.x;
|
||||
R124i.y = tempi.x;
|
||||
PV1iz = tempi.x;
|
||||
PV1iw = tempi.x;
|
||||
R4i.z = int(as_type<float>(R127i.w));
|
||||
// 20
|
||||
redcCUBE(float4(as_type<float>(R124i.z),as_type<float>(R124i.z),as_type<float>(R124i.x),as_type<float>(PV1ix)),float4(as_type<float>(PV1ix),as_type<float>(R124i.x),as_type<float>(R124i.z),as_type<float>(R124i.z)),cubeMapSTM,cubeMapFaceId);
|
||||
R0i.x = as_type<int>(cubeMapSTM.x);
|
||||
R0i.y = as_type<int>(cubeMapSTM.y);
|
||||
R0i.z = as_type<int>(cubeMapSTM.z);
|
||||
R0i.w = cubeMapFaceId;
|
||||
R2i.y = as_type<int>(min(as_type<float>(R125i.x), 1.0));
|
||||
// 21
|
||||
R3i.x = 0;
|
||||
R3i.y = as_type<int>(as_type<float>(R7i.w) * 255.0);
|
||||
R10i.z = R0i.w;
|
||||
R3i.w = as_type<int>(mul_nonIEEE(-(as_type<float>(R7i.w)),as_type<float>(R6i.y)) + as_type<float>(R6i.y));
|
||||
R3i.z = as_type<int>(1.0 / abs(as_type<float>(R0i.z)));
|
||||
// 0
|
||||
R125i.x = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[3].x), as_type<float>(supportBuffer.remapped[7].w)));
|
||||
R123i.y = as_type<int>(mul_nonIEEE(as_type<float>(R0i.y),as_type<float>(R3i.z)) + 1.5);
|
||||
R124i.z = R4i.z & int(0xfc);
|
||||
R123i.w = as_type<int>(mul_nonIEEE(as_type<float>(R0i.x),as_type<float>(R3i.z)) + 1.5);
|
||||
R127i.y = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[3].y), as_type<float>(supportBuffer.remapped[7].w)));
|
||||
// 1
|
||||
R10i.x = R123i.y;
|
||||
R10i.y = R123i.w;
|
||||
R125i.z = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[3].z), as_type<float>(supportBuffer.remapped[7].w)));
|
||||
R127i.w = as_type<int>(as_type<float>(R3i.w) + as_type<float>(0x3c23d70a));
|
||||
R127i.w = clampFI32(R127i.w);
|
||||
R126i.z = as_type<int>(-(as_type<float>(R2i.y)) + 1.0);
|
||||
// 2
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R1i.z),as_type<float>(R1i.y),as_type<float>(R6i.z),as_type<float>(0x80000000)),float4(as_type<float>(R1i.z),as_type<float>(R1i.y),as_type<float>(R6i.z),0.0)));
|
||||
PV0ix = tempi.x;
|
||||
PV0iy = tempi.x;
|
||||
PV0iz = tempi.x;
|
||||
PV0iw = tempi.x;
|
||||
R124i.y = int(as_type<float>(R3i.y));
|
||||
// 3
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R4i.x),as_type<float>(R4i.y),as_type<float>(R5i.z),as_type<float>(R5i.z)),float4(-(as_type<float>(R125i.x)),-(as_type<float>(R127i.y)),-(as_type<float>(R125i.z)),-(as_type<float>(R3i.x)))));
|
||||
PV1ix = tempi.x;
|
||||
PV1iy = tempi.x;
|
||||
PV1iz = tempi.x;
|
||||
R126i.w = tempi.x;
|
||||
tempResultf = 1.0 / sqrt(as_type<float>(PV0ix));
|
||||
PS1i = as_type<int>(tempResultf);
|
||||
// 4
|
||||
backupReg0i = R124i.z;
|
||||
PV0ix = as_type<int>(mul_nonIEEE(as_type<float>(R1i.z), as_type<float>(PS1i)));
|
||||
PV0iy = as_type<int>(mul_nonIEEE(as_type<float>(R1i.y), as_type<float>(PS1i)));
|
||||
R124i.z = as_type<int>(mul_nonIEEE(as_type<float>(R127i.w), as_type<float>(R127i.w)));
|
||||
PV0iw = as_type<int>(mul_nonIEEE(as_type<float>(R6i.z), as_type<float>(PS1i)));
|
||||
R127i.x = as_type<int>(float(backupReg0i));
|
||||
// 5
|
||||
backupReg0i = R126i.z;
|
||||
R124i.x = as_type<int>(mul_nonIEEE(as_type<float>(PV0ix), as_type<float>(supportBuffer.remapped[7].w)));
|
||||
R126i.y = as_type<int>(mul_nonIEEE(as_type<float>(PV0iy), as_type<float>(supportBuffer.remapped[7].w)));
|
||||
R126i.z = as_type<int>(mul_nonIEEE(as_type<float>(PV0iw), as_type<float>(supportBuffer.remapped[7].w)));
|
||||
R127i.w = as_type<int>(as_type<float>(R6i.y) * 0.5 + 0.5);
|
||||
R125i.y = as_type<int>(mul_nonIEEE(-(as_type<float>(R2i.y)),as_type<float>(backupReg0i)) + as_type<float>(backupReg0i));
|
||||
// 6
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R4i.x),as_type<float>(R4i.y),as_type<float>(R5i.z),as_type<float>(R5i.z)),float4(-(as_type<float>(R124i.x)),-(as_type<float>(R126i.y)),-(as_type<float>(R126i.z)),-(as_type<float>(R1i.w)))));
|
||||
tempi.x = clampFI32(tempi.x);
|
||||
PV0ix = tempi.x;
|
||||
PV0iy = tempi.x;
|
||||
PV0iz = tempi.x;
|
||||
PV0iw = tempi.x;
|
||||
R126i.x = R124i.y & int(1);
|
||||
// 7
|
||||
tempi.x = as_type<int>(dot(float4(-(as_type<float>(R125i.x)),-(as_type<float>(R127i.y)),-(as_type<float>(R125i.z)),as_type<float>(0x80000000)),float4(-(as_type<float>(R124i.x)),-(as_type<float>(R126i.y)),-(as_type<float>(R126i.z)),0.0)));
|
||||
tempi.x = clampFI32(tempi.x);
|
||||
PV1ix = tempi.x;
|
||||
PV1iy = tempi.x;
|
||||
PV1iz = tempi.x;
|
||||
R125i.w = tempi.x;
|
||||
PS1i = as_type<int>(mul_nonIEEE(as_type<float>(PV0ix), as_type<float>(PV0ix)));
|
||||
// 8
|
||||
R125i.x = as_type<int>(mul_nonIEEE(as_type<float>(R127i.w), as_type<float>(R127i.w)));
|
||||
R125i.x = as_type<int>(as_type<float>(R125i.x) / 2.0);
|
||||
R127i.y = as_type<int>(mul_nonIEEE(as_type<float>(R124i.z),as_type<float>(PS1i)) + -(as_type<float>(PS1i)));
|
||||
PV0iz = as_type<int>(-(as_type<float>(PV1ix)) + 1.0);
|
||||
R3i.w = as_type<int>(as_type<float>(R127i.x) * as_type<float>(0x3b820821));
|
||||
R122i.x = as_type<int>(mul_nonIEEE(-(as_type<float>(R2i.y)),as_type<float>(R125i.y)) + as_type<float>(R125i.y));
|
||||
// 9
|
||||
backupReg0i = R125i.y;
|
||||
R127i.x = R126i.w;
|
||||
R127i.x = as_type<int>(as_type<float>(R127i.x) * 2.0);
|
||||
R125i.y = as_type<int>(mul_nonIEEE(-(as_type<float>(R125i.w)),as_type<float>(PV0iz)) + as_type<float>(PV0iz));
|
||||
R126i.z = as_type<int>(-(as_type<float>(R7i.w)) * 3.0 + 4.0);
|
||||
R127i.w = as_type<int>(mul_nonIEEE(as_type<float>(backupReg0i), as_type<float>(R122i.x)));
|
||||
R7i.y = as_type<int>(as_type<float>(R3i.w) * 0.25 + 0.25);
|
||||
// 10
|
||||
R3i.x = R126i.w;
|
||||
R3i.x = clampFI32(R3i.x);
|
||||
R126i.y = ((R126i.x == 0)?(0):(int(0x3f800000)));
|
||||
PV0iz = as_type<int>(as_type<float>(R127i.y) + 1.0);
|
||||
R123i.w = as_type<int>(mul_nonIEEE(as_type<float>(R2i.y),-(as_type<float>(R125i.x))) + as_type<float>(R2i.y));
|
||||
R125i.z = as_type<int>(-(as_type<float>(R3i.w)) * as_type<float>(0x3d23d70a) + as_type<float>(0x3d23d70a));
|
||||
// 11
|
||||
backupReg0i = R126i.z;
|
||||
R123i.x = as_type<int>(mul_nonIEEE(-(as_type<float>(R125i.w)),as_type<float>(R125i.y)) + as_type<float>(R125i.y));
|
||||
R127i.y = as_type<int>(mul_nonIEEE(as_type<float>(R127i.y),as_type<float>(PV0iz)) + as_type<float>(PV0iz));
|
||||
R126i.z = as_type<int>(as_type<float>(R125i.x) + as_type<float>(R123i.w));
|
||||
PV1iw = as_type<int>(mul_nonIEEE(as_type<float>(R126i.w), as_type<float>(R127i.x)));
|
||||
PS1i = as_type<int>(1.0 / as_type<float>(backupReg0i));
|
||||
// 12
|
||||
R124i.x = as_type<int>(mul_nonIEEE(as_type<float>(R127i.w), as_type<float>(PS1i)));
|
||||
R123i.y = as_type<int>(mul_nonIEEE(as_type<float>(R3i.x),-(as_type<float>(R125i.x))) + as_type<float>(R3i.x));
|
||||
R6i.z = as_type<int>(mul_nonIEEE(as_type<float>(R126i.y), as_type<float>(PV1iw)));
|
||||
R126i.w = as_type<int>(mul_nonIEEE(as_type<float>(R125i.y), as_type<float>(R123i.x)));
|
||||
R127i.x = as_type<int>(mul_nonIEEE(as_type<float>(R8i.y),as_type<float>(R3i.w)) + as_type<float>(R125i.z));
|
||||
// 13
|
||||
backupReg0i = R125i.x;
|
||||
backupReg1i = R123i.y;
|
||||
R125i.x = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[7].w), as_type<float>(supportBuffer.remapped[7].w)));
|
||||
R123i.y = as_type<int>(mul_nonIEEE(as_type<float>(R8i.x),as_type<float>(R3i.w)) + as_type<float>(R125i.z));
|
||||
R127i.z = as_type<int>(as_type<float>(backupReg0i) + as_type<float>(backupReg1i));
|
||||
R127i.w = as_type<int>(mul_nonIEEE(as_type<float>(R8i.z),as_type<float>(R3i.w)) + as_type<float>(R125i.z));
|
||||
R125i.z = as_type<int>(1.0 / as_type<float>(R127i.y));
|
||||
// 14
|
||||
backupReg0i = R126i.z;
|
||||
R126i.x = as_type<int>(mul_nonIEEE(as_type<float>(R123i.y),-(as_type<float>(R124i.x))) + as_type<float>(R123i.y));
|
||||
R127i.y = as_type<int>(mul_nonIEEE(as_type<float>(R127i.w),-(as_type<float>(R126i.w))) + as_type<float>(R127i.w));
|
||||
R126i.z = as_type<int>(mul_nonIEEE(as_type<float>(R127i.x),-(as_type<float>(R126i.w))) + as_type<float>(R127i.x));
|
||||
R123i.w = as_type<int>(mul_nonIEEE(as_type<float>(R123i.y),-(as_type<float>(R126i.w))) + as_type<float>(R123i.y));
|
||||
R7i.x = as_type<int>(1.0 / as_type<float>(backupReg0i));
|
||||
// 15
|
||||
backupReg0i = R127i.z;
|
||||
R123i.x = as_type<int>(mul_nonIEEE(as_type<float>(R127i.x),-(as_type<float>(R124i.x))) + as_type<float>(R127i.x));
|
||||
R125i.y = as_type<int>(mul_nonIEEE(as_type<float>(R124i.z), as_type<float>(R125i.z)));
|
||||
R127i.z = as_type<int>(as_type<float>(R126i.w) + as_type<float>(R123i.w));
|
||||
R127i.w = as_type<int>(mul_nonIEEE(as_type<float>(R127i.w),-(as_type<float>(R124i.x))) + as_type<float>(R127i.w));
|
||||
R126i.y = as_type<int>(1.0 / as_type<float>(backupReg0i));
|
||||
// 16
|
||||
backupReg0i = R126i.x;
|
||||
R126i.x = as_type<int>(as_type<float>(R126i.w) + as_type<float>(R127i.y));
|
||||
R2i.y = as_type<int>(as_type<float>(R124i.x) + as_type<float>(backupReg0i));
|
||||
R7i.z = as_type<int>(mul_nonIEEE(as_type<float>(R125i.x), as_type<float>(R125i.x)));
|
||||
R126i.w = as_type<int>(as_type<float>(R126i.w) + as_type<float>(R126i.z));
|
||||
R6i.y = as_type<int>(as_type<float>(R124i.x) + as_type<float>(R123i.x));
|
||||
// 17
|
||||
backupReg0i = R7i.x;
|
||||
R7i.x = as_type<int>(as_type<float>(R124i.x) + as_type<float>(R127i.w));
|
||||
R3i.y = as_type<int>(mul_nonIEEE(as_type<float>(R126i.y), as_type<float>(R125i.y)));
|
||||
R3i.z = as_type<int>(as_type<float>(R8i.x) * as_type<float>(0x3f895ef0) + as_type<float>(0xba0a8ec8));
|
||||
R3i.z = clampFI32(R3i.z);
|
||||
PV1iw = as_type<int>(0.25 * as_type<float>(backupReg0i));
|
||||
R0i.w = as_type<int>(as_type<float>(R8i.y) * as_type<float>(0x3f895ef0) + as_type<float>(0xba0a8ec8));
|
||||
R0i.w = clampFI32(R0i.w);
|
||||
// 18
|
||||
PV0ix = as_type<int>(mul_nonIEEE(as_type<float>(R126i.x), as_type<float>(PV1iw)));
|
||||
PV0iy = as_type<int>(mul_nonIEEE(as_type<float>(R126i.w), as_type<float>(PV1iw)));
|
||||
PV0iz = as_type<int>(mul_nonIEEE(as_type<float>(R127i.z), as_type<float>(PV1iw)));
|
||||
R6i.w = as_type<int>(as_type<float>(R8i.z) * as_type<float>(0x3f895ef0) + as_type<float>(0xba0a8ec8));
|
||||
R6i.w = clampFI32(R6i.w);
|
||||
PS0i = R4i.z & int(1);
|
||||
// 19
|
||||
R8i.y = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[8].z), as_type<float>(PV0ix)));
|
||||
R5i.z = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[8].y), as_type<float>(PV0iy)));
|
||||
R7i.w = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[8].x), as_type<float>(PV0iz)));
|
||||
R8i.z = as_type<int>(float(PS0i));
|
||||
// 20
|
||||
R4i.x = R11i.x;
|
||||
R4i.y = R11i.y;
|
||||
R4i.z = as_type<int>(rint(1.0));
|
||||
R8i.w = as_type<int>(tex5.sample(samplr5, float2(as_type<float>(R9i.x),as_type<float>(R9i.y))).x);
|
||||
R13i.xzw = as_type<int3>(tex12.sample(samplr12, float2(as_type<float>(R11i.x),as_type<float>(R11i.y))).xzw);
|
||||
R0i.xyz = as_type<int3>(tex11.sample(samplr11, float2(as_type<float>(R11i.x), as_type<float>(R11i.y)), uint(rint(as_type<float>(R11i.z)))).xyz);
|
||||
R1i.xyzw = as_type<int4>(tex2.sample(samplr2, float2(as_type<float>(R11i.x),as_type<float>(R11i.y)), level(0.0)).xyzw);
|
||||
R4i.xyz = as_type<int3>(tex11.sample(samplr11, float2(as_type<float>(R4i.x), as_type<float>(R4i.y)), uint(rint(as_type<float>(R4i.z)))).xyz);
|
||||
|
||||
#if (reflExtra == 0) // Normal Reflections
|
||||
|
||||
R10i.xyz = as_type<int3>(tex9.sample(samplr9, redcCUBEReverse(as_type<float2>(R10i.xy),R10i.z), uint(cubeMapArrayIndex9), level(as_type<float>(R10i.w))).xyz);
|
||||
|
||||
#elif (reflExtra == 1) // Enhanced Reflections
|
||||
|
||||
R10i.xyz = as_type<int3>(tex9.sample(samplr9, redcCUBEReverse(as_type<float2>(R10i.xy),R10i.z), uint(cubeMapArrayIndex9), level(0.0)).xyz);
|
||||
|
||||
#endif
|
||||
|
||||
R11i.xyz = as_type<int3>(tex14.sample(samplr14, float2(as_type<float>(R11i.x),as_type<float>(R11i.y))).xyz);
|
||||
// 0
|
||||
R123i.x = as_type<int>(as_type<float>(R13i.w) * 0.5 + 0.5);
|
||||
R123i.y = as_type<int>(mul_nonIEEE(as_type<float>(R13i.w),-(as_type<float>(R7i.y))) + as_type<float>(R13i.w));
|
||||
R123i.z = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[0].x),as_type<float>(R8i.w)) + as_type<float>(supportBuffer.remapped[1].x));
|
||||
R126i.w = as_type<int>(mul_nonIEEE(as_type<float>(R13i.x), as_type<float>(R3i.x)));
|
||||
R127i.w = as_type<int>(mul_nonIEEE(as_type<float>(R1i.z),as_type<float>(R7i.x)) + as_type<float>(R4i.z));
|
||||
// 1
|
||||
PV1ix = as_type<int>(-(as_type<float>(R123i.z)));
|
||||
PV1iy = as_type<int>(as_type<float>(R3i.x) + as_type<float>(R123i.x));
|
||||
PV1iy = clampFI32(PV1iy);
|
||||
PV1iz = as_type<int>(mul_nonIEEE(-(as_type<float>(R123i.z)), as_type<float>(R5i.y)));
|
||||
PV1iw = as_type<int>(mul_nonIEEE(-(as_type<float>(R123i.z)), as_type<float>(R6i.x)));
|
||||
PS1i = as_type<int>(as_type<float>(R7i.y) + as_type<float>(R123i.y));
|
||||
// 2
|
||||
R126i.x = as_type<int>(-(as_type<float>(R12i.x)) + as_type<float>(PV1iw));
|
||||
R126i.y = as_type<int>(-(as_type<float>(R12i.y)) + as_type<float>(PV1iz));
|
||||
PV0iz = as_type<int>(-(as_type<float>(R2i.z)) + as_type<float>(PV1ix));
|
||||
R8i.w = as_type<int>(mul_nonIEEE(as_type<float>(R126i.w), as_type<float>(PV1iy)));
|
||||
R125i.y = as_type<int>(mul_nonIEEE(as_type<float>(PS1i),-(as_type<float>(R1i.w))) + as_type<float>(PS1i));
|
||||
// 3
|
||||
tempi.x = as_type<int>(dot(float4(as_type<float>(R2i.x),as_type<float>(R13i.y),as_type<float>(R9i.z),as_type<float>(0x80000000)),float4(as_type<float>(R126i.x),as_type<float>(R126i.y),as_type<float>(PV0iz),0.0)));
|
||||
PV1ix = tempi.x;
|
||||
R127i.y = tempi.x;
|
||||
PV1iz = tempi.x;
|
||||
PV1iw = tempi.x;
|
||||
PS1i = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[9].x), as_type<float>(R126i.w)));
|
||||
// 4
|
||||
backupReg0i = R126i.y;
|
||||
R123i.x = as_type<int>(mul_nonIEEE(-(as_type<float>(R2i.x)),as_type<float>(PV1ix)) + as_type<float>(R126i.x));
|
||||
R126i.y = as_type<int>(mul_nonIEEE(as_type<float>(PS1i), as_type<float>(R7i.z)));
|
||||
R127i.z = as_type<int>(mul_nonIEEE(as_type<float>(R13i.z), as_type<float>(R13i.z)));
|
||||
R126i.w = as_type<int>(mul_nonIEEE(-(as_type<float>(R13i.y)),as_type<float>(PV1ix)) + as_type<float>(backupReg0i));
|
||||
// 5
|
||||
PV1ix = as_type<int>(mul_nonIEEE(as_type<float>(R125i.y), as_type<float>(R2i.y)));
|
||||
R123i.y = as_type<int>(mul_nonIEEE(as_type<float>(R1i.x),as_type<float>(R2i.y)) + as_type<float>(R4i.x));
|
||||
PV1iz = as_type<int>(mul_nonIEEE(as_type<float>(R123i.x), as_type<float>(R123i.x)));
|
||||
R125i.w = as_type<int>(mul_nonIEEE(as_type<float>(R125i.y), as_type<float>(R6i.y)));
|
||||
PS1i = as_type<int>(mul_nonIEEE(as_type<float>(R125i.y), as_type<float>(R7i.x)));
|
||||
// 6
|
||||
backupReg0i = R123i.y;
|
||||
backupReg1i = R127i.z;
|
||||
R123i.x = as_type<int>(mul_nonIEEE(as_type<float>(R1i.y),as_type<float>(R6i.y)) + as_type<float>(R4i.y));
|
||||
R123i.y = as_type<int>(mul_nonIEEE(as_type<float>(R126i.w),as_type<float>(R126i.w)) + as_type<float>(PV1iz));
|
||||
R127i.z = as_type<int>(mul_nonIEEE(as_type<float>(R10i.x),as_type<float>(PV1ix)) + as_type<float>(backupReg0i));
|
||||
R127i.w = as_type<int>(mul_nonIEEE(as_type<float>(R10i.z),as_type<float>(PS1i)) + as_type<float>(R127i.w));
|
||||
R4i.w = as_type<int>(mul_nonIEEE(as_type<float>(R8i.z), as_type<float>(backupReg1i)));
|
||||
// 7
|
||||
backupReg0i = R123i.y;
|
||||
R123i.y = as_type<int>(mul_nonIEEE(as_type<float>(R10i.y),as_type<float>(R125i.w)) + as_type<float>(R123i.x));
|
||||
PV1iw = as_type<int>(mul_nonIEEE(as_type<float>(R126i.y), as_type<float>(R3i.y)));
|
||||
tempResultf = 1.0 / sqrt(as_type<float>(backupReg0i));
|
||||
PS1i = as_type<int>(tempResultf);
|
||||
// 8
|
||||
R1i.x = as_type<int>(mul_nonIEEE(as_type<float>(R7i.w),as_type<float>(PV1iw)) + as_type<float>(R127i.z));
|
||||
R8i.y = as_type<int>(mul_nonIEEE(as_type<float>(R8i.y),as_type<float>(PV1iw)) + as_type<float>(R127i.w));
|
||||
R5i.z = as_type<int>(mul_nonIEEE(as_type<float>(R5i.z),as_type<float>(PV1iw)) + as_type<float>(R123i.y));
|
||||
PV0iw = as_type<int>(mul_nonIEEE(as_type<float>(R127i.y), as_type<float>(PS1i)));
|
||||
// 9
|
||||
PV1iz = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[2].z), as_type<float>(PV0iw)));
|
||||
// 10
|
||||
PV0iy = as_type<int>(as_type<float>(PV1iz) * as_type<float>(0x3ced9168));
|
||||
PV0iy = clampFI32(PV0iy);
|
||||
// 11
|
||||
R123i.y = as_type<int>(mul_nonIEEE(as_type<float>(PV0iy),as_type<float>(R6i.z)) + 1.0);
|
||||
// 12
|
||||
R10i.x = as_type<int>(mul_nonIEEE(-(as_type<float>(R3i.w)),as_type<float>(R123i.y)) + as_type<float>(R123i.y));
|
||||
// 0
|
||||
R123i.x = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[8].x),as_type<float>(R8i.w)) + as_type<float>(R0i.x));
|
||||
R123i.z = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[8].z),as_type<float>(R8i.w)) + as_type<float>(R0i.z));
|
||||
R123i.w = as_type<int>(mul_nonIEEE(as_type<float>(supportBuffer.remapped[8].y),as_type<float>(R8i.w)) + as_type<float>(R0i.y));
|
||||
// 1
|
||||
PV1iy = as_type<int>(mul_nonIEEE(as_type<float>(R123i.z), as_type<float>(R10i.x)));
|
||||
PV1iz = as_type<int>(mul_nonIEEE(as_type<float>(R123i.w), as_type<float>(R10i.x)));
|
||||
PV1iw = as_type<int>(mul_nonIEEE(as_type<float>(R123i.x), as_type<float>(R10i.x)));
|
||||
// 2
|
||||
PV0ix = as_type<int>(mul_nonIEEE(as_type<float>(PV1iz), as_type<float>(R0i.w)));
|
||||
PV0iy = as_type<int>(mul_nonIEEE(as_type<float>(PV1iw), as_type<float>(R3i.z)));
|
||||
PV0iw = as_type<int>(mul_nonIEEE(as_type<float>(PV1iy), as_type<float>(R6i.w)));
|
||||
// 3
|
||||
R123i.x = as_type<int>(as_type<float>(PV0iw) * as_type<float>(0x3f6e896b) + as_type<float>(0x3a011b1e));
|
||||
R123i.y = as_type<int>(as_type<float>(PV0ix) * as_type<float>(0x3f6e896b) + as_type<float>(0x3a011b1e));
|
||||
R123i.z = as_type<int>(as_type<float>(PV0iy) * as_type<float>(0x3f6e896b) + as_type<float>(0x3a011b1e));
|
||||
// 4
|
||||
PV0iy = as_type<int>(as_type<float>(R8i.y) + as_type<float>(R123i.x));
|
||||
PV0iz = as_type<int>(as_type<float>(R5i.z) + as_type<float>(R123i.y));
|
||||
PV0iw = as_type<int>(as_type<float>(R1i.x) + as_type<float>(R123i.z));
|
||||
// 5
|
||||
R4i.x = as_type<int>(mul_nonIEEE(as_type<float>(R13i.z),as_type<float>(PV0iw)) + as_type<float>(R11i.x));
|
||||
R4i.y = as_type<int>(mul_nonIEEE(as_type<float>(R13i.z),as_type<float>(PV0iz)) + as_type<float>(R11i.y));
|
||||
R4i.z = as_type<int>(mul_nonIEEE(as_type<float>(R13i.z),as_type<float>(PV0iy)) + as_type<float>(R11i.z));
|
||||
// export
|
||||
out.passPixelColor0 = as_type<float4>(float4(as_type<float>(R4i.x), as_type<float>(R4i.y), as_type<float>(R4i.z), as_type<float>(R4i.w)));
|
||||
return out;
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
// shader cb0e6e8cbec4502a
|
||||
#include <metal_stdlib>
|
||||
using namespace metal;
|
||||
#define SET_POSITION(_v) out.position = _v; out.position.z = (out.position.z + out.position.w) / 2.0
|
||||
// start of shader inputs/outputs, predetermined by Cemu. Do not touch
|
||||
struct SupportBuffer {
|
||||
float2 fragCoordScale;
|
||||
};
|
||||
|
||||
#define GET_FRAGCOORD() float4(in.position.xy * supportBuffer.fragCoordScale.xy, in.position.z, 1.0 / in.position.w)
|
||||
struct FragmentIn {
|
||||
float4 position [[position]];
|
||||
float4 passParameterSem3 [[user(locn0)]];
|
||||
};
|
||||
|
||||
struct FragmentOut {
|
||||
float4 passPixelColor0 [[color(0)]];
|
||||
};
|
||||
|
||||
// end of shader inputs/outputs
|
||||
template<typename TextureT, typename CoordT>
|
||||
float sampleCompareEmulate(TextureT tex, sampler samplr, CoordT coord, float compareValue) {
|
||||
return compareValue < tex.sample(samplr, coord).x ? 1.0 : 0.0;
|
||||
}
|
||||
template<typename TextureT, typename CoordT>
|
||||
float2 textureCalculateLod(TextureT tex, sampler samplr, CoordT coord) {
|
||||
float lod = tex.calculate_unclamped_lod(samplr, coord);
|
||||
return float2(floor(lod), fract(lod));
|
||||
}
|
||||
int clampFI32(int v)
|
||||
{
|
||||
if( v == 0x7FFFFFFF )
|
||||
return as_type<int>(1.0);
|
||||
else if( v == 0xFFFFFFFF )
|
||||
return as_type<int>(0.0);
|
||||
return as_type<int>(clamp(as_type<float>(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; }
|
||||
|
||||
#define disableDOF $disableDOF
|
||||
|
||||
#if (disableDOF == 0) // Keep DOF Enabled
|
||||
|
||||
fragment FragmentOut main0(FragmentIn in [[stage_in]], float2 pointCoord [[point_coord]], bool frontFacing [[front_facing]], constant SupportBuffer& supportBuffer [[buffer(0)]], texture2d<float> tex0 [[texture(0)]], sampler samplr0 [[sampler(0)]]) {
|
||||
int radius = int(rint(2.0 / supportBuffer.fragCoordScale.y));
|
||||
float2 resolution = float2(tex0.get_width(), tex0.get_height());
|
||||
|
||||
float2 center = (in.passParameterSem3.xy + in.passParameterSem3.zw) / 2.0;
|
||||
float3 result = float3(0.0);
|
||||
float count = 0.0;
|
||||
for (int x = 1 - radius; x <= radius - 1; x += 2) {
|
||||
for (int y = 1 - radius; y <= radius - 1; y += 2) {
|
||||
if (length(float2(x, y)) <= radius) {
|
||||
result += tex0.sample(samplr0, center + float2(x, y) / resolution).xyz;
|
||||
count += 1.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {float4(result / count, 1.0)};
|
||||
}
|
||||
|
||||
#elif (disableDOF == 1) // Disable DOF
|
||||
|
||||
fragment FragmentOut main0(FragmentIn in [[stage_in]], float2 pointCoord [[point_coord]], bool frontFacing [[front_facing]], constant SupportBuffer& supportBuffer [[buffer(0)]], texture2d<float> tex0 [[texture(0)]], sampler samplr0 [[sampler(0)]]) {
|
||||
return {tex0.sample(samplr0, in.passParameterSem3)};
|
||||
}
|
||||
|
||||
#endif
|
@ -29,6 +29,10 @@ uniform vec4 uf_fragCoordScale;
|
||||
uniform float uf_alphaTestRef;
|
||||
uniform vec2 uf_fragCoordScale;
|
||||
#endif
|
||||
|
||||
#define AAENABLE $AAEnable
|
||||
|
||||
|
||||
TEXTURE_LAYOUT(0, 1, 0) uniform sampler2D textureUnitPS0;
|
||||
layout(location = 0) in vec4 passParameterSem129;
|
||||
layout(location = 1) in vec4 passParameterSem128;
|
||||
@ -68,22 +72,34 @@ ivec4 ARi = ivec4(0);
|
||||
bool predResult = true;
|
||||
vec3 cubeMapSTM;
|
||||
int cubeMapFaceId;
|
||||
R0i = floatBitsToInt(passParameterSem129);
|
||||
#if (AAENABLE == 1)
|
||||
R0i = floatBitsToInt(passParameterSem129);
|
||||
#endif
|
||||
R1i = floatBitsToInt(passParameterSem128);
|
||||
R5i.xyz = floatBitsToInt(texture(textureUnitPS0, intBitsToFloat(R1i.zw)).xyz);
|
||||
R6i.xyz = floatBitsToInt(texture(textureUnitPS0, intBitsToFloat(R1i.xy)).xyz);
|
||||
|
||||
ivec2 resolution = textureSize(textureUnitPS0,0);
|
||||
float iresX = float(resolution.x)/float(1280);
|
||||
float iresY = float(resolution.y)/float(720);
|
||||
#if (AAENABLE == 1)
|
||||
ivec2 resolution = textureSize(textureUnitPS0,0);
|
||||
float iresX = float(resolution.x)/float(1280);
|
||||
float iresY = float(resolution.y)/float(720);
|
||||
#endif
|
||||
|
||||
// 0
|
||||
backupReg0i = R0i.y;
|
||||
backupReg1i = R0i.x;
|
||||
PV0i.x = 0;
|
||||
PV0i.y = floatBitsToInt(intBitsToFloat(backupReg0i) / iresY);
|
||||
#if (AAENABLE == 1)
|
||||
PV0i.y = floatBitsToInt(intBitsToFloat(backupReg0i) / iresY);
|
||||
#else
|
||||
PV0i.y = floatBitsToInt(intBitsToFloat(backupReg0i) * 1.0);
|
||||
#endif
|
||||
PV0i.z = 0;
|
||||
R127i.w = floatBitsToInt(intBitsToFloat(backupReg1i) / iresX);
|
||||
#if (AAENABLE == 1)
|
||||
R127i.w = floatBitsToInt(intBitsToFloat(backupReg1i) / iresX);
|
||||
#else
|
||||
R127i.w = floatBitsToInt(intBitsToFloat(backupReg1i) * 1.0);
|
||||
#endif
|
||||
PV0i.w = R127i.w;
|
||||
R8i.w = 0x3f800000;
|
||||
PS0i = R8i.w;
|
@ -1,83 +1,90 @@
|
||||
[Definition]
|
||||
titleIds = 0005000010150300,0005000010152A00,0005000010152B00
|
||||
name = Resolution
|
||||
path = "Dr. Luigi/Graphics/Resolution"
|
||||
description = Changes the resolution of the game. Anti-aliasing is disabled by default. Made by M&&M.
|
||||
version = 4
|
||||
name = Graphics Settings
|
||||
path = "Dr. Luigi/Graphics"
|
||||
description = Changes the resolution of the game and Enable/Disable the game's Anti-Aliasing.|Made by M&&M.
|
||||
#Credits: M&&M
|
||||
version = 6
|
||||
|
||||
[Preset]
|
||||
name = 1280x720 (Default)
|
||||
[Default]
|
||||
$width = 1280
|
||||
$height = 720
|
||||
$gameWidth = 1280
|
||||
$gameHeight = 720
|
||||
$AAEnable:int = 1
|
||||
|
||||
# Performance
|
||||
|
||||
[Preset]
|
||||
category = Resolution
|
||||
name = 640x360
|
||||
$width = 640
|
||||
$height = 360
|
||||
$gameWidth = 1280
|
||||
$gameHeight = 720
|
||||
|
||||
[Preset]
|
||||
category = Resolution
|
||||
name = 960x540
|
||||
$width = 960
|
||||
$height = 540
|
||||
$gameWidth = 1280
|
||||
$gameHeight = 720
|
||||
|
||||
[Preset]
|
||||
category = Resolution
|
||||
name = 1280x720 (Default)
|
||||
default = 1
|
||||
|
||||
# Common HD Resolutions
|
||||
|
||||
[Preset]
|
||||
category = Resolution
|
||||
name = 1600x900
|
||||
$width = 1600
|
||||
$height = 900
|
||||
$gameWidth = 1280
|
||||
$gameHeight = 720
|
||||
|
||||
[Preset]
|
||||
category = Resolution
|
||||
name = 1920x1080
|
||||
$width = 1920
|
||||
$height = 1080
|
||||
$gameWidth = 1280
|
||||
$gameHeight = 720
|
||||
|
||||
[Preset]
|
||||
category = Resolution
|
||||
name = 2560x1440
|
||||
$width = 2560
|
||||
$height = 1440
|
||||
$gameWidth = 1280
|
||||
$gameHeight = 720
|
||||
|
||||
[Preset]
|
||||
category = Resolution
|
||||
name = 3200x1800
|
||||
$width = 3200
|
||||
$height = 1800
|
||||
$gameWidth = 1280
|
||||
$gameHeight = 720
|
||||
|
||||
[Preset]
|
||||
category = Resolution
|
||||
name = 3840x2160
|
||||
$width = 3840
|
||||
$height = 2160
|
||||
$gameWidth = 1280
|
||||
$gameHeight = 720
|
||||
|
||||
[Preset]
|
||||
category = Resolution
|
||||
name = 5120x2880
|
||||
$width = 5120
|
||||
$height = 2880
|
||||
$gameWidth = 1280
|
||||
$gameHeight = 720
|
||||
|
||||
[Preset]
|
||||
category = Resolution
|
||||
name = 7680x4320
|
||||
$width = 7680
|
||||
$height = 4320
|
||||
$gameWidth = 1280
|
||||
$gameHeight = 720
|
||||
|
||||
[Preset]
|
||||
category = Anti-Aliasing
|
||||
name = Enable
|
||||
$AAEnable:int = 1
|
||||
|
||||
[Preset]
|
||||
category = Anti-Aliasing
|
||||
name = Disable
|
||||
$AAEnable:int = 0
|
||||
|
||||
[TextureRedefine]
|
||||
width = 1280
|
@ -3,6 +3,7 @@ titleIds = 000500001010ec00,000500001010ed00,000500001010eb00
|
||||
name = Contrasty
|
||||
path = "Mario Kart 8/Enhancements/Contrasty"
|
||||
description = This pack tweaks the colors and contrast to whatever preset you set it as.|You can also make your own preset by editing the Default preset in the Contrasty folder from the game's graphic packs.|Made by getdls.
|
||||
#Credits: getdls
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 000500001010ec00,000500001010ed00,000500001010eb00
|
||||
name = Debanding
|
||||
path = "Mario Kart 8/Enhancements/Debanding"
|
||||
description = Adds a debanding post processing shader to the game.|This pack can only be used with OpenGL.|Made by getdls.
|
||||
#Credits: getdls
|
||||
version = 6
|
||||
rendererFilter = opengl
|
||||
|
||||
|
@ -3,6 +3,7 @@ titleIds = 000500001010ec00,000500001010ed00,000500001010eb00
|
||||
name = Remove MKTV Watermark
|
||||
path = "Mario Kart 8/Enhancements/Remove MKTV Watermark"
|
||||
description = Removes the MKTV watermark in the replays or highlight reel.|Made by Crementif.
|
||||
#Credits: Crementif
|
||||
version = 6
|
||||
|
||||
[TextureRedefine]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 000500001010ec00,000500001010ed00,000500001010eb00
|
||||
name = Graphic Options
|
||||
path = "Mario Kart 8/Graphics"
|
||||
description = Allows you to change the game's TV resolution, gamepad resolution, shadow quality, anti-aliasing, bloom intensity, motion blur quality, level of detail and anisotropic filtering quality.|Made by Crementif, theboy181 and M&&M.
|
||||
#Credits: Crementif, theboy181, M&&M
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,4 +3,5 @@ titleIds = 000500001010ec00,000500001010ed00,000500001010eb00
|
||||
name = 60FPS for 3/4 Player Splitscreen
|
||||
path = "Mario Kart 8/Mods/60FPS Splitscreen"
|
||||
description = Forces the game to run at 60FPS instead of 30FPS in 3/4 player splitscreen.|In those splitscreen modes, it normally alternates which screen is being updated each frame. This mod forces it to draw all the screens every frame instead.|Made by theboy181 and Xalphenos.
|
||||
#Credits: theboy181, Xalphenos
|
||||
version = 6
|
||||
|
@ -3,4 +3,5 @@ titleIds = 000500001010ec00,000500001010ed00,000500001010eb00
|
||||
name = Remove All HUD Elements
|
||||
path = "Mario Kart 8/Mods/No HUD (breaks menus)"
|
||||
description = Disables any HUD while racing.|Breaks many of the menu's so don't use this if you just want to play the game.||Made by Crementif.
|
||||
#Credits: Crementif
|
||||
version = 6
|
||||
|
@ -3,6 +3,7 @@ titleIds = 000500001010ec00,000500001010ed00,000500001010eb00
|
||||
name = Multiplayer network port
|
||||
path = "Mario Kart 8/Workarounds/Multiplayer network port"
|
||||
description = Forces peer-to-peer multiplayer to use a certain network port number, so that you can port forward it in your router.||This might help with connecting to online services, or with some 118-XXXX errors.
|
||||
#Credits: ashquarky
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -0,0 +1,17 @@
|
||||
[SI_sigpatch_V16]
|
||||
moduleMatches = 0x39E9EBC6 ; 1.1.0
|
||||
|
||||
0x02512D44 = li r3, 0
|
||||
0x02512D48 = blr
|
||||
|
||||
[SI_sigpatch_V1]
|
||||
moduleMatches = 0xC683642E ; 1.0.0
|
||||
|
||||
0x025121E8 = li r3, 0
|
||||
0x025121EC = blr
|
||||
|
||||
[SI_sigpatch_demo]
|
||||
moduleMatches = 0xAF023381 ; Demo
|
||||
|
||||
0x025101C4 = li r3, 0
|
||||
0x025101C8 = blr
|
6
src/SkylandersImaginators/Mods/SignaturePatch/rules.txt
Normal file
6
src/SkylandersImaginators/Mods/SignaturePatch/rules.txt
Normal file
@ -0,0 +1,6 @@
|
||||
[Definition]
|
||||
titleIds = 00050000101F4D00,00050000101FB100,0005000010205E00
|
||||
name = Signature Patch
|
||||
path = "Skylanders Imaginators/Mods/Signature Patch"
|
||||
description = This patch removes the check for a factory's signature on dumps of characters released for Skylanders Imaginators, allowing for unique UIDs and unreleased characters to be generated.||Made by Winner Nombre with help from MusicDisc, MoltenLavaCore, and NefariousTechSupport.
|
||||
version = 7
|
@ -0,0 +1,9 @@
|
||||
[SSF_RemovePortalCheck_V16]
|
||||
moduleMatches = 0xa0b35374 ; v16
|
||||
|
||||
0x024B0A28 = li r3, 0x203
|
||||
|
||||
[SSF_RemovePortalCheck_V0]
|
||||
moduleMatches = 0xb1f102ec ; v0
|
||||
|
||||
0x024B09A0 = li r3, 0x203
|
@ -0,0 +1,6 @@
|
||||
[Definition]
|
||||
titleIds = 0005000010139200,0005000010140400
|
||||
name = Allow Portals From Other Skylanders Games
|
||||
path = "Skylanders Swap Force/Mods/Allow Portals From Other Skylanders Games"
|
||||
description = Allows any (non-Xbox!) Portal of Power to be used.||Made by Winner Nombre.
|
||||
version = 7
|
151
src/Splatoon/Mods/DPADJump/patch_dpadjump.asm
Normal file
151
src/Splatoon/Mods/DPADJump/patch_dpadjump.asm
Normal file
@ -0,0 +1,151 @@
|
||||
[dpad-jump_v288]
|
||||
moduleMatches = 0x659C782E
|
||||
|
||||
Lp_Utl_getCurSceneId = 0x028C67EC
|
||||
|
||||
.origin = codecave
|
||||
state:
|
||||
.char 0
|
||||
screen_x:
|
||||
.short 1080 ; LEFT
|
||||
.short 1080 ; UP
|
||||
.short 1080 ; RIGHT
|
||||
.short 1170 ; DOWN
|
||||
screen_y:
|
||||
.short 130 ; LEFT
|
||||
.short 290 ; UP
|
||||
.short 450 ; RIGHT
|
||||
.short 625 ; DOWN
|
||||
|
||||
perform:
|
||||
mflr r0 ; Push LR and important registers to the stack
|
||||
stwu r1, -0x10(r1)
|
||||
stw r31, 0xC(r1)
|
||||
stw r30, 0x8(r1)
|
||||
stw r29, 0x4(r1)
|
||||
stw r0, 0x14(r1)
|
||||
|
||||
mr r31, r4
|
||||
|
||||
lis r30, state@hi
|
||||
ori r30, r30, state@l
|
||||
lbz r30, 0x0(r30)
|
||||
|
||||
bl import.vpad.VPADGetTPCalibratedPoint
|
||||
mr r29, r3
|
||||
|
||||
bl Lp_Utl_getCurSceneId ; Check if this is being called during a match
|
||||
cmpwi r3, 7
|
||||
beq perform_touch
|
||||
cmpwi r3, 12 ; Or Recon
|
||||
bne perform_exit ; If not, then exit
|
||||
|
||||
perform_touch:
|
||||
cmpwi r30, 0
|
||||
beq perform_exit ; Exit if state is 0 (no DPAD pressed)
|
||||
subi r30, r30, 1 ; state should be the array index + 1 (since 0 is reserved for no DPAD pressed)
|
||||
mulli r30, r30, 2 ; Multiply by 2 for the screen arrays (.short)
|
||||
|
||||
lis r3, screen_x@hi
|
||||
ori r3, r3, screen_x@l
|
||||
lhzx r3, r3, r30
|
||||
|
||||
lis r4, screen_y@hi
|
||||
ori r4, r4, screen_y@l
|
||||
lhzx r4, r4, r30
|
||||
|
||||
; Perform a fake touch on the gamepad
|
||||
sth r3, 0x0(r31) ; VPADTouchData.x
|
||||
sth r4, 0x2(r31) ; VPADTouchData.y
|
||||
|
||||
li r3, 1
|
||||
li r4, 0
|
||||
sth r3, 0x4(r31) ; VPADTouchData.touched
|
||||
sth r4, 0x6(r31) ; VPADTouchData.validity
|
||||
|
||||
perform_exit:
|
||||
mr r3, r29 ; Return result from VPADGetTPCalibratedPoint
|
||||
lwz r0, 0x14(r1) ; Restore registers from stack
|
||||
mtlr r0
|
||||
lwz r31, 0xC(r1)
|
||||
lwz r30, 0x8(r1)
|
||||
lwz r29, 0x4(r1)
|
||||
addi r1, r1, 0x10
|
||||
blr
|
||||
|
||||
check_input:
|
||||
mflr r0 ; Push LR and important registers to the stack
|
||||
stwu r1, -0x10(r1)
|
||||
stw r31, 0xC(r1)
|
||||
stw r30, 0x8(r1)
|
||||
stw r0, 0x14(r1)
|
||||
|
||||
mr r31, r4
|
||||
|
||||
bl import.vpad.VPADRead
|
||||
mr r30, r3
|
||||
|
||||
lwz r3, 0x0(r31) ; VPADStatus.hold
|
||||
lis r4, 0x0000
|
||||
ori r4, r4, 0x8000 ; VPAD_BUTTON_A
|
||||
li r5, 0 ; Set to 0 to avoid removing input (happens at set_state)
|
||||
and r6, r3, r4
|
||||
cmpw r6, r4
|
||||
bne check_input_reset
|
||||
|
||||
li r4, 0x0800 ; VPAD_BUTTON_LEFT
|
||||
and r5, r3, r4
|
||||
cmpwi r5, 0
|
||||
li r4, 1
|
||||
bne check_input_set_state
|
||||
|
||||
li r4, 0x0200 ; VPAD_BUTTON_UP
|
||||
and r5, r3, r4
|
||||
cmpwi r5, 0
|
||||
li r4, 2
|
||||
bne check_input_set_state
|
||||
|
||||
li r4, 0x0400 ; VPAD_BUTTON_RIGHT
|
||||
and r5, r3, r4
|
||||
cmpwi r5, 0
|
||||
li r4, 3
|
||||
bne check_input_set_state
|
||||
|
||||
li r4, 0x0100 ; VPAD_BUTTON_DOWN
|
||||
and r5, r3, r4
|
||||
cmpwi r5, 0
|
||||
beq check_input_reset
|
||||
li r4, 4
|
||||
|
||||
check_input_set_state:
|
||||
bl Lp_Utl_getCurSceneId ; Check if this is being called during a match
|
||||
cmpwi r3, 7
|
||||
beq _check_input_set_state
|
||||
cmpwi r3, 12 ; Or Recon
|
||||
bne check_input_exit ; If not, then exit
|
||||
|
||||
_check_input_set_state:
|
||||
lwz r3, 0x0(r31)
|
||||
sub r5, r3, r5 ; Disable DPAD input to avoid sending unnecessary signals (very hacky, doesn't work too well)
|
||||
stw r5, 0x0(r31)
|
||||
|
||||
lis r3, state@hi
|
||||
ori r3, r3, state@l
|
||||
stb r4, 0x0(r3)
|
||||
|
||||
check_input_exit:
|
||||
mr r3, r30 ; Return result from VPADRead
|
||||
lwz r0, 0x14(r1) ; Restore registers from stack
|
||||
mtlr r0
|
||||
lwz r31, 0xC(r1)
|
||||
lwz r30, 0x8(r1)
|
||||
addi r1, r1, 0x10
|
||||
blr
|
||||
|
||||
check_input_reset:
|
||||
li r4, 0
|
||||
b check_input_set_state
|
||||
|
||||
0x28D0F30 = bl check_input ; VPADRead
|
||||
0x286FD38 = bl perform ; VPADGetTPCalibratedPoint
|
||||
|
6
src/Splatoon/Mods/DPADJump/rules.txt
Normal file
6
src/Splatoon/Mods/DPADJump/rules.txt
Normal file
@ -0,0 +1,6 @@
|
||||
[Definition]
|
||||
titleIds = 0005000010176900,0005000010176A00,0005000010162B00
|
||||
name = DPADJump
|
||||
path = "Splatoon/Mods/Superjump With The DPAD"
|
||||
description = Hold A + D-Pad in any direction to super jump to a teammate or the spawn point during a match or Recon, similar to SwapDRC patches.|Made by primaviera.
|
||||
version = 7
|
@ -0,0 +1,4 @@
|
||||
[begone_autorotate]
|
||||
moduleMatches = 0xF7A78809, 0x659c782e
|
||||
|
||||
0x02664f20 = nop
|
6
src/Splatoon/Mods/Disable Autorotate/rules.txt
Normal file
6
src/Splatoon/Mods/Disable Autorotate/rules.txt
Normal file
@ -0,0 +1,6 @@
|
||||
[Definition]
|
||||
titleIds = 0005000010176900,0005000010176A00,0005000010162B00
|
||||
name = Disable Autorotate
|
||||
path = "Splatoon/Mods/Disable Autorotate"
|
||||
description = Prevents the camera from automatically rotating when the player moves left or right.
|
||||
version = 7
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = Anti-Aliasing Pack
|
||||
path = "Xenoblade Chronicles X/Enhancements/Anti-Aliasing"
|
||||
description = Allows you to modify the game's existing anti-aliasing solution or replace it with the universally supported Nvidia FXAA solution. This changes how the games gets rid of jagged edges to make sharp edges look better.||Made by SkalFate, modified by Intra.
|
||||
#Credits: SkalFate, Intra
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
@ -276,5 +277,3 @@ $FXAADISCARD:int = 0
|
||||
# Pure red and blue or combination of only R and B, will get no AA.
|
||||
# 1 = On.
|
||||
# 0 = Off.
|
||||
|
||||
# Credits: Made by SkalFate, updated by Intra
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = Contrasty
|
||||
path = "Xenoblade Chronicles X/Enhancements/Contrasty"
|
||||
description = This pack tweaks the colours and contrast to whatever preset you set it as. You can also make your own preset by editing the Default preset in the Contrasty folder from the game's graphic packs.|Not compatible with the Anti-Aliasing mod.|Made by getdls.
|
||||
#Credits: getdls
|
||||
version = 5
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = Fancy GFX
|
||||
path = "Xenoblade Chronicles X/Enhancements/Fancy FX"
|
||||
description = Pretty blur, de-band sky, re-align cinematic etc, maintained on Nvidia. Made by getdls.
|
||||
#Credits: getdls
|
||||
version = 4
|
||||
|
||||
#Disabled, causes gfx errors on 1.15.x Enable if fixed.
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = Negative texture LOD bias
|
||||
path = "Xenoblade Chronicles X/Enhancements/Negative Texture LOD"
|
||||
description = Texture LOD override, possible shimmer but sharper textures.
|
||||
#Credits: Crementif
|
||||
version = 4
|
||||
|
||||
[Preset]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = Anisotropic Filtering
|
||||
path = "Xenoblade Chronicles X/Enhancements/Anisotropic Filtering"
|
||||
description = Enables anisotropic filtering for ground, wall and vegetation textures to make them appear clearer when viewed from an angle.|Has a minimal performance impact.
|
||||
#Credits: Crementif
|
||||
version = 7
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = Graphics
|
||||
path = "Xenoblade Chronicles X/Graphics"
|
||||
description = Changes the resolution of the game and the quality of the other elements.|Made by getdls and Lemon King.
|
||||
#Credits: getdls, Lemon King
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = FPS++ For Xenoblade Chronicles X
|
||||
path = "Xenoblade Chronicles X/Mods/FPS++ For XCX"
|
||||
description = Allows you to change the FPS and the speed that most things run at.|Some bugs might still occur if you run games at 60FPS.|Only supports the latest update!
|
||||
#Credits: Crementif, M&&M, lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Ground damage multiplicator"
|
||||
path = "Xenoblade Chronicles X/Mods/Battle/Ground damage multiplicator"
|
||||
description = Increase the damage done by your team. Doesn't affect the damage numbers that are shown.|Can also make the game more challenging by dividing damage.
|
||||
#Credits: lasyan3, lashoun, Crementif, Intra
|
||||
version = 7
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Enemy Statistics modificator"
|
||||
path = "Xenoblade Chronicles X/Mods/Battle/Enemy Statistics modificator"
|
||||
description = Apply a percent modificator on enemies stats (HP, Melee Attack, Melee Accuracy, Ranged Attack, Ranged Accuracy, Potential and Evasion).|You can consult the new values in the Bestiary menu.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Enemy de-aggro range reducer"
|
||||
path = "Xenoblade Chronicles X/Mods/Battle/Enemy de-aggro"
|
||||
description = Decrease or increase the distance needed to run to lose aggro from enemies.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Overdrive unlocked pre-Chapter 5"
|
||||
path = "Xenoblade Chronicles X/Mods/Battle/Overdrive unlocked"
|
||||
description = Unleash the power of Overdrive before Chapter 5 or relock it after Chapter 5.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,4 +3,5 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Soul Challenges - Skell auto restore"
|
||||
path = "Xenoblade Chronicles X/Mods/Battle/Soul Challenges - Skell auto restore"
|
||||
description = When your Skell is destroyed and the insurance is still valid, the Skell is automatically restored (use fast travel or die to get it back).
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Soul Challenges - QTE Auto"
|
||||
path = "Xenoblade Chronicles X/Mods/Battle/Soul Challenges - QTE Auto"
|
||||
description = QTE during battles are automatically done (force result).|Does not work on skell destroyed soul voice.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Soul Challenges - QTE Speed"
|
||||
path = "Xenoblade Chronicles X/Mods/Battle/Soul Challenges - QTE Speed"
|
||||
description = Speed of QTE does not increase or decrease during battles.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -0,0 +1,16 @@
|
||||
[XCX_SkellFlight_v101E_v102U]
|
||||
moduleMatches = 0xF882D5CF, 0x30B6E091, 0x218F6E07 ; 1.0.1E, 1.0.2U, 1.0.0E
|
||||
; GetSkyUnit__Q2_3cfs19CfCompoPropertyDollCFv
|
||||
0x025CE8DC = li r3, $mod
|
||||
|
||||
[XCX_SkellFlight_v102J]
|
||||
moduleMatches = 0x7672271D ; 1.0.2J
|
||||
0x025CDEB8 = li r3, $mod
|
||||
|
||||
[XCX_SkellFlight_v100U]
|
||||
moduleMatches = 0xAB97DE6B, 0x676EB33E ; 1.0.1U, 1.0.0U
|
||||
0x025CE86C = li r3, $mod
|
||||
|
||||
[XCX_SkellFlight_v100J]
|
||||
moduleMatches = 0x785CA8A9 ; 1.0.0J
|
||||
0x025CD3DC = li r3, $mod
|
17
src/XenobladeChroniclesX/Mods/BattleSkellFlight/rules.txt
Normal file
17
src/XenobladeChroniclesX/Mods/BattleSkellFlight/rules.txt
Normal file
@ -0,0 +1,17 @@
|
||||
[Definition]
|
||||
titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Enable/Disable Skell Flight"
|
||||
path = "Xenoblade Chronicles X/Mods/Battle/Skell Flight Unlocked"
|
||||
description = Fly with your Skell before A Girl's Wings, or Disable the flight module after A Girl's Wings.
|
||||
#Credits: Intra
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
$mod = 1
|
||||
|
||||
[Preset]
|
||||
name = Force Enable
|
||||
|
||||
[Preset]
|
||||
name = Force Disable
|
||||
$mod = 0
|
15
src/XenobladeChroniclesX/Mods/BattleSkellFuel/patch_Fuel.asm
Normal file
15
src/XenobladeChroniclesX/Mods/BattleSkellFuel/patch_Fuel.asm
Normal file
@ -0,0 +1,15 @@
|
||||
[XCX_InfiniteFuel_v101E_v102U]
|
||||
moduleMatches = 0xF882D5CF, 0x30B6E091, 0x218F6E07 ; 1.0.1E, 1.0.2U, 1.0.0E
|
||||
0x025CE7C8 = lfs f1, 0x3184(r3)
|
||||
|
||||
[XCX_InfiniteFuel_v102J]
|
||||
moduleMatches = 0x7672271D ; 1.0.2J
|
||||
0x025CDDA4 = lfs f1, 0x3184(r3)
|
||||
|
||||
[XCX_InfiniteFuel_v100U]
|
||||
moduleMatches = 0xAB97DE6B, 0x676EB33E ; 1.0.1U, 1.0.0U
|
||||
0x025CE758 = lfs f1, 0x3184(r3)
|
||||
|
||||
[XCX_InfiniteFuel_v100J]
|
||||
moduleMatches = 0x785CA8A9 ; 1.0.0J
|
||||
0x025CD2C8 = lfs f1, 0x3184(r3)
|
7
src/XenobladeChroniclesX/Mods/BattleSkellFuel/rules.txt
Normal file
7
src/XenobladeChroniclesX/Mods/BattleSkellFuel/rules.txt
Normal file
@ -0,0 +1,7 @@
|
||||
[Definition]
|
||||
titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Infinite Fuel"
|
||||
path = "Xenoblade Chronicles X/Mods/Battle/Infinite Fuel"
|
||||
description = Makes your skell fuel always be at its max.
|
||||
#Credits: Intra
|
||||
version = 6
|
@ -0,0 +1,110 @@
|
||||
[XCX_BootWithTP_Data]
|
||||
moduleMatches = 0xF882D5CF, 0x30B6E091, 0x7672271D, 0x218F6E07, 0xAB97DE6B, 0x676EB33E, 0x785CA8A9 ; 1.0.1E, 1.0.2U, 1.0.2J, 1.0.0E, 1.0.1U, 1.0.0U, 1.0.0J
|
||||
.origin = codecave
|
||||
|
||||
;adress offsets for all the various stats a character has
|
||||
currentHP = 0x84
|
||||
currentTP = 0x94
|
||||
maxHP = 0x88
|
||||
maxTP = 0x98
|
||||
meleeAttack = 0x9C
|
||||
rangedAttack = 0xA0
|
||||
potential = 0xA4
|
||||
defence = 0xA8
|
||||
meleeAccuracy = 0xAC
|
||||
rangedAccuracy = 0xB0
|
||||
evasion = 0xB4
|
||||
physicalRes = 0xBC
|
||||
beamRes = 0xC0
|
||||
etherRes = 0xC4
|
||||
thermalRes = 0xC8
|
||||
electricRes = 0xCC
|
||||
gravityRes = 0xD0
|
||||
|
||||
;array of flags that check if applied max tp on boot to a specific character/skell
|
||||
BoolBootWithTP:
|
||||
.byte $QoL-1, $QoL-1, $QoL-1, $QoL-1, $QoLSkell-1, $QoLSkell-1, $QoLSkell-1, $QoLSkell-1
|
||||
;keeps track if entered a function from ground or skell so that code that only applies to one can be conditionally executed
|
||||
BoolIsInnerOrDoll:
|
||||
.uint 0
|
||||
;prevents a bug of delayed character getting max tp after boot
|
||||
;if a character position is not in your party at boot and then you add a character to that position
|
||||
;its flag was never set and so that character then gets the mod applied to them way later than expected.
|
||||
;with this fix it is still possible to trigure it by starting with exactly 1 character in your party and then recruiting a character within 1 skip travel
|
||||
;the bug can also happen by seeing a loading screen over 2 billion times to loop to negative (end even then won't apply to positions that its already applies before)
|
||||
;that is such specific circumstances with such a minor bug that I don't care to fix it further
|
||||
;the proper way to fix this would be to find a section of code that runs after ground boot and skell boot, does not need skell boot to happen to run, and does not get called in any other section of the game.
|
||||
;then uses that spot set the flags above and nothing else. currently not worth it for such a minor bug
|
||||
NumOfTimesLoadingScreenRan:
|
||||
.uint 0
|
||||
;array of cheat settings for ground
|
||||
InnerCheatSettingsArray:
|
||||
.short $TPCheat, $HPCheat, $noHPcheatnodieifdamagelt, $TPupdatecheatdieat0TP, $TPupdatecheatnegative, $HPupdatecheatnegative
|
||||
;array of cheat settings for skell
|
||||
DollCheatSettingsArray:
|
||||
.short $TPCheatSkell, $HPCheatSkell, $noHPcheatnodieifdamageltSkell, $TPupdatecheatdieat0TPSkell, $TPupdatecheatnegativeSkell, $HPupdatecheatnegativeSkell
|
||||
;array of syncronous settings for ground
|
||||
InnerSyncSettingsArray:
|
||||
.byte $HPboundtoTP, $HPboundtoTPNegative, $TPboundtoHP, $TPboundtoHPNegative
|
||||
;array of syncronous settings for skell
|
||||
DollSyncSettingsArray:
|
||||
.byte $HPboundtoTPSkell, $HPboundtoTPNegativeSkell, $TPboundtoHPSkell, $TPboundtoHPNegativeSkell
|
||||
;array of after battle heal settings for ground
|
||||
InnerSlipHealSettingsArray:
|
||||
.byte $afterbattleheal, $afterbattlerestoretp, $skiptravelheal
|
||||
;array of after battle heal settings for ground
|
||||
DollSlipHealSettingsArray:
|
||||
.byte $afterbattleheal, $afterbattlerestoretp, $skiptravelhealSkell
|
||||
;storage space for current hp for each character
|
||||
StoreCurrentHP:
|
||||
.uint 0, 0, 0, 0
|
||||
;storage space for current hp for each skell
|
||||
StoreCurrentHPDoll:
|
||||
.uint 0, 0, 0, 0
|
||||
;array of pointers to the storage space for characters stats
|
||||
;below that, the stprage space for each characters stats
|
||||
StoreCharacterStatsPointers:
|
||||
.uint StoreCharacter0Stats, StoreCharacter1Stats, StoreCharacter2Stats, StoreCharacter3Stats
|
||||
StoreCharacter0Stats:
|
||||
.uint 0, 0, 0, 0, 0, 0, 0, 0
|
||||
StoreCharacter1Stats:
|
||||
.uint 0, 0, 0, 0, 0, 0, 0, 0
|
||||
StoreCharacter2Stats:
|
||||
.uint 0, 0, 0, 0, 0, 0, 0, 0
|
||||
StoreCharacter3Stats:
|
||||
.uint 0, 0, 0, 0, 0, 0, 0, 0
|
||||
;array of pointers to the storage space for skells stats
|
||||
;below that, the stprage space for each skells stats
|
||||
StoreCharacterStatsDollPointers:
|
||||
.uint StoreCharacter0StatsDoll, StoreCharacter1StatsDoll, StoreCharacter2StatsDoll, StoreCharacter3StatsDoll
|
||||
StoreCharacter0StatsDoll:
|
||||
.uint 0, 0, 0, 0, 0, 0, 0, 0
|
||||
StoreCharacter1StatsDoll:
|
||||
.uint 0, 0, 0, 0, 0, 0, 0, 0
|
||||
StoreCharacter2StatsDoll:
|
||||
.uint 0, 0, 0, 0, 0, 0, 0, 0
|
||||
StoreCharacter3StatsDoll:
|
||||
.uint 0, 0, 0, 0, 0, 0, 0, 0
|
||||
;array of offsets for each of the stats. used to lower code duplication
|
||||
PointerStatsOffsets:
|
||||
.short maxHP, meleeAttack, rangedAttack, potential, defence, meleeAccuracy, rangedAccuracy, evasion
|
||||
;multiple function pointers arrays used to make the checksetting function usable for all setting types from all sections:
|
||||
FunctionPointerArrayCheatBoot:
|
||||
.uint NoTensionCheat, InfiniteTensionCheat, TensionEqualsHealthCheat, HPTPMod_blr, NoHealthCheat, InfiniteHealthCheat, HealthEqualsTensionCheat, HPTPMod_blr
|
||||
FunctionPointerArrayCheatTP:
|
||||
.uint NoTensionCheat, InfiniteTensionCheat, TensionEqualsHealthCheat, TensionUpdatesFromHealthCheatTP, NoHealthCheat, InfiniteHealthCheat, HealthEqualsTensionCheatTP, HealthUpdatesFromTensionCheatTP
|
||||
FunctionPointerArrayCheatHP:
|
||||
.uint NoTensionCheat, InfiniteTensionCheat, TensionEqualsHealthCheat, TensionUpdatesFromHealthCheatHP, NoHealthCheatHP, InfiniteHealthCheat, HealthEqualsTensionCheat, HealthUpdatesFromTensionCheatHP
|
||||
FunctionPointerArraySync:
|
||||
.uint addTPHPSynchronous, addTPHPAsynchronous, addTPHPDecreaseOnly, addTPHPIncreaseOnly
|
||||
;lookup table for all the settings above if applying to ground characters
|
||||
LookupTableforInner:
|
||||
.uint InnerCheatSettingsArray, InnerSyncSettingsArray, InnerSlipHealSettingsArray, BoolBootWithTP, StoreCurrentHP, StoreCharacterStatsPointers
|
||||
;lookup table for all the settings above if applying to skells
|
||||
LookupTableforDoll:
|
||||
.uint DollCheatSettingsArray, DollSyncSettingsArray, DollSlipHealSettingsArray, BoolBootWithTP+4, StoreCurrentHPDoll, StoreCharacterStatsDollPointers
|
||||
|
||||
;only piece of data used in the tphp_features file
|
||||
;is used to tell the update hp function of the mod if the current heal is an out of battle heal
|
||||
CurrentSlipHealPosition:
|
||||
.uint 0
|
@ -0,0 +1,71 @@
|
||||
[XCX_BootWithTP_Features]
|
||||
moduleMatches = 0xF882D5CF, 0x30B6E091, 0x7672271D, 0x218F6E07, 0xAB97DE6B, 0x676EB33E, 0x785CA8A9 ; 1.0.1E, 1.0.2U, 1.0.2J, 1.0.0E, 1.0.1U, 1.0.0U, 1.0.0J
|
||||
.origin = codecave
|
||||
;currently missing features:
|
||||
;a way to ignore max hp / max tp
|
||||
;a way to fix your character health being shown on screen after battle if continously below its max
|
||||
;a way to detect if the slip heal function is currently appling to a human or skell
|
||||
|
||||
|
||||
;This function is the exact same as 0x021D50F4 = nop
|
||||
;the extra code is needed to make the cheat only apply when the apropriate option is selected in the rules.txt
|
||||
;prevents skells from losing 50 GP/sec while out of them
|
||||
StopSkellLosingGP:
|
||||
li r4, $disableSkellLosingGP
|
||||
cmpwi r4, 0
|
||||
beq _StopSkellLosingGPExit
|
||||
mflr r4
|
||||
addi r4, r4, 8
|
||||
mtlr r4
|
||||
blr
|
||||
_StopSkellLosingGPExit:
|
||||
lwz r3, 0x24(r30)
|
||||
blr
|
||||
|
||||
;no healing is the exact same as 0x021764F4 = blr
|
||||
;prevents RegistDamage::HealHide::DamageSystem::HandleKey from ever being called
|
||||
;the extra code is needed to make the dont update TP option work
|
||||
;stops out of battle heals, and can also stop TP udating from out of battle heals in the sync settings
|
||||
DontUpdateHP:
|
||||
li r11, $afterbattleheal
|
||||
cmpwi r11, 0
|
||||
bne _DontUpdateHPExit
|
||||
mtlr r0
|
||||
blr
|
||||
_DontUpdateHPExit:
|
||||
li r11, $afterbattlerestoretp
|
||||
cmpwi r11, 0
|
||||
bne _SkipDontUpdateTPslip
|
||||
lis r9, CurrentSlipHealPosition@ha
|
||||
lwz r11, CurrentSlipHealPosition@l(r9)
|
||||
addi r11, r11, 1
|
||||
cmpwi r11, 8
|
||||
blt+ _CheckIFCountTooHigh
|
||||
li r11, 0
|
||||
_CheckIFCountTooHigh:
|
||||
stw r11, CurrentSlipHealPosition@l(r9)
|
||||
_SkipDontUpdateTPslip:
|
||||
or r11, r1, r1
|
||||
blr
|
||||
|
||||
[XCX_BootWithTP_Features_v101E_v102U]
|
||||
moduleMatches = 0xF882D5CF, 0x30B6E091, 0x218F6E07 ; 1.0.1E, 1.0.2U, 1.0.0E
|
||||
;prevents skells from losing 50 GP/sec while out of them
|
||||
0x021D50EC = bla StopSkellLosingGP
|
||||
;stops out of battle heals
|
||||
0x021764F8 = bla DontUpdateHP
|
||||
|
||||
[XCX_BootWithTP_Features_v102J]
|
||||
moduleMatches = 0x7672271D ; 1.0.2J
|
||||
0x021D4BB8 = bla StopSkellLosingGP
|
||||
0x02175FC4 = bla DontUpdateHP
|
||||
|
||||
[XCX_BootWithTP_Features_v100U]
|
||||
moduleMatches = 0xAB97DE6B, 0x676EB33E ; 1.0.1U, 1.0.0U
|
||||
0x021D50EC = bla StopSkellLosingGP
|
||||
0x021764F8 = bla DontUpdateHP
|
||||
|
||||
[XCX_BootWithTP_Features_v100J]
|
||||
moduleMatches = 0x785CA8A9 ; 1.0.0J
|
||||
0x021D4934 = bla StopSkellLosingGP
|
||||
0x02175D40 = bla DontUpdateHP
|
@ -0,0 +1,642 @@
|
||||
[XCX_BootWithTP_Sync]
|
||||
moduleMatches = 0xF882D5CF, 0x30B6E091, 0x7672271D, 0x218F6E07, 0xAB97DE6B, 0x676EB33E, 0x785CA8A9 ; 1.0.1E, 1.0.2U, 1.0.2J, 1.0.0E, 1.0.1U, 1.0.0U, 1.0.0J
|
||||
.origin = codecave
|
||||
;currently missing features:
|
||||
;being able to negatively correlate hp by its self or tp by its self
|
||||
;finishing the currently unfinished tp only updates from hp (or vice versa)
|
||||
;make hp gained from reving party members apply to sync settings
|
||||
;inspired from a glitch that happened with "Weird: tp equal hp" in a in-dev version of the mod:
|
||||
;setting your tp to only equal the last ammount of hp gained, with it reseting to 0 when taking damage (also a seperate option to make using tp also set it to 0)
|
||||
;setting your hp to the last ammount of tp gained, but still allowing you to take damage from enemies
|
||||
|
||||
|
||||
|
||||
;list of know bugs:
|
||||
|
||||
;the current hp is bound the position in the character list
|
||||
;so with the no heal on skip travel if you swap party members, the new party member will have the current hp of the party member who used to be in that slot (minor bug)
|
||||
|
||||
;if a characters base stats were to update without calling the boot section of the mod it would break the don't heal when skip traveling setting
|
||||
;I do not think this bug is possible to happen but listing it hear incase it does (currently not a bug but has potential to be a major bug)
|
||||
|
||||
;when a party member is revived, their HP is updated from a seperate section of code
|
||||
;so their TP won't match in the sync settings until the next update to hp or tp (minor bug)
|
||||
|
||||
;the one described in detail in tphp_data, that the NumOfTimesLoadingScreenRan variable mostly fixes (minor bug)
|
||||
|
||||
;weird: tp equals hp, will have a visual glitch when hitting max tp. this happens because the tp update section is called before the game updates tp (major bug for the setting) (but setting is really low priority)
|
||||
|
||||
;various other bugs related to weird: tp/hp equals hp/tp (major bug for the setting) (but setting is really low priority)
|
||||
|
||||
|
||||
|
||||
;storage space to conditionally back up registers r3-r31
|
||||
RegistersBackUpTPHP:
|
||||
.uint 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
|
||||
;storeage space to back up link register
|
||||
LinkRegisterBackUpTPHP:
|
||||
.uint 0
|
||||
CountRegisterBackupTPHP:
|
||||
.uint 0
|
||||
|
||||
;function that allows us to conditionally branch link return
|
||||
HPTPMod_blr:
|
||||
blr
|
||||
|
||||
;function that has different entance points if your on ground or in a skell
|
||||
;loads data from the tphp_data file that the mod needs to work
|
||||
GetModDataInnerHPTP:
|
||||
lis r31, RegistersBackUpTPHP@ha
|
||||
stmw r14, RegistersBackUpTPHP@l(r31)
|
||||
li r23, 0
|
||||
lis r31, BoolIsInnerOrDoll@ha
|
||||
stw r23, BoolIsInnerOrDoll@l(r31)
|
||||
lis r31, LookupTableforInner@ha
|
||||
addi r31, r31, LookupTableforInner@l-4
|
||||
b GetModDataHPTP
|
||||
GetModDataDollHPTP:
|
||||
lis r31, RegistersBackUpTPHP@ha
|
||||
stmw r14, RegistersBackUpTPHP@l(r31)
|
||||
li r23, 1
|
||||
lis r31, BoolIsInnerOrDoll@ha
|
||||
stw r23, BoolIsInnerOrDoll@l(r31)
|
||||
lis r31, LookupTableforDoll@hi
|
||||
addi r31, r31, LookupTableforDoll@l-4
|
||||
GetModDataHPTP:
|
||||
lwzu r23, 4(r31) ; CheatSettingsArray
|
||||
lwzu r24, 4(r31) ; SyncSettingsArray
|
||||
lwzu r25, 4(r31) ; SlipHealSettingsArray
|
||||
lwzu r27, 4(r31) ; BoolBootWithTP
|
||||
lwzu r28, 4(r31) ; StoreCurrentHP
|
||||
lwzu r29, 4(r31) ; StoreCharacterStatsPointers
|
||||
blr
|
||||
|
||||
;function with multiple entrance points depeding of if applying a TP cheat, HP cheat, binding TP, or binding HP
|
||||
;does some setup work at the entrance then if a cheat/setting is enabled, branches to the appropriate function from the function lookup table in tphp_data
|
||||
CheckSyncSettingHP:
|
||||
li r3, 0
|
||||
mflr r0
|
||||
bl HPStopSlipHealTP
|
||||
mtlr r0
|
||||
lbzu r31, 2(r24) ; $TPboundtoHP
|
||||
li r19, currentHP
|
||||
li r18, currentTP
|
||||
b _LoadSyncFunctionPointers
|
||||
CheckSyncSettingTP:
|
||||
lwz r3, currentHP(r10)
|
||||
cmpwi r3, 0
|
||||
ble HPTPMod_blr
|
||||
li r3, 0
|
||||
lbz r31, 0(r24) ; $HPboundtoTP
|
||||
addi r23, r23, 2
|
||||
li r19, currentTP
|
||||
li r18, currentHP
|
||||
_LoadSyncFunctionPointers:
|
||||
lis r30, FunctionPointerArraySync@hi
|
||||
ori r30, r30, FunctionPointerArraySync@l
|
||||
b CheckSettingsTPHP
|
||||
CheckHealthCheat:
|
||||
li r3, 4*4
|
||||
lhz r31, 1*2(r23) ; $CheatHP
|
||||
b CheckSettingsTPHP
|
||||
CheckTensionCheat:
|
||||
li r3, 0
|
||||
lhz r31, 0*2(r23) ; $CheatTP
|
||||
CheckSettingsTPHP:
|
||||
cmpwi r31, 1
|
||||
beq BranchToFoundCheat
|
||||
addi r3, r3, 4
|
||||
cmpwi r31, 2
|
||||
beq BranchToFoundCheat
|
||||
addi r3, r3, 4
|
||||
cmpwi r31, 3
|
||||
beq BranchToFoundCheat
|
||||
addi r3, r3, 4
|
||||
cmpwi r31, 4
|
||||
beq BranchToFoundCheat
|
||||
blr
|
||||
BranchToFoundCheat:
|
||||
lwzx r3, r30, r3
|
||||
mtctr r3
|
||||
bctr
|
||||
|
||||
;list of simple functions that get called from HP cheat and TP cheat settings.
|
||||
NoTensionCheat:
|
||||
li r31, 0
|
||||
stw r31, currentTP(r10)
|
||||
blr
|
||||
TensionEqualsHealthCheat:
|
||||
lwz r31, currentHP(r10)
|
||||
stw r31, currentTP(r10)
|
||||
blr
|
||||
InfiniteTensionCheat:
|
||||
lwz r31, maxTP(r10)
|
||||
stw r31, currentTP(r10)
|
||||
blr
|
||||
NoHealthCheat:
|
||||
li r31, 2
|
||||
stw r31, currentHP(r10)
|
||||
blr
|
||||
HealthEqualsTensionCheat:
|
||||
lwz r31, currentTP(r10)
|
||||
stw r31, currentHP(r10)
|
||||
blr
|
||||
InfiniteHealthCheat:
|
||||
lwz r31, maxHP(r10)
|
||||
stw r31, currentHP(r10)
|
||||
blr
|
||||
|
||||
;some of the functions above need to be a little bit different if calling them when HP updates or TP updates
|
||||
HealthEqualsTensionCheatTP:
|
||||
lwz r31, currentTP(r10)
|
||||
add r31, r31, r21
|
||||
stw r31, currentHP(r10)
|
||||
blr
|
||||
NoHealthCheatHP:
|
||||
li r31, 2
|
||||
stw r31, currentHP(r10)
|
||||
lhz r12, 2*2(r23)
|
||||
cmpw r21, r12
|
||||
bge HPTPMod_blr
|
||||
li r31, 0
|
||||
stw r31, currentHP(r10)
|
||||
blr
|
||||
|
||||
;unfinished and currently have their settings commented out in rules.txt
|
||||
TensionUpdatesFromHealthCheatTP:
|
||||
lhz r3, 1*2(r23) ; $HPCheat
|
||||
cmpwi r31, 3
|
||||
blr; _addTPtoHPEXit
|
||||
HealthUpdatesFromTensionCheatTP:
|
||||
lwz r31, 0x84(r10)
|
||||
add r31, r31, r21
|
||||
stw r31, 0x84(r10)
|
||||
blr; _addTPtoHPEXit
|
||||
TensionUpdatesFromHealthCheatHP:
|
||||
blr; _addHPtoTPAsynchronous
|
||||
HealthUpdatesFromTensionCheatHP:
|
||||
lwz r12, 0x84(r10)
|
||||
add r12, r12, r21
|
||||
stw r12, 0x84(r10)
|
||||
blr
|
||||
|
||||
;the function that synchronously binds HP & TP. is shared with HP updating and TP updating, but Boot has its own sperate sync function
|
||||
addTPHPSynchronous:
|
||||
addi r18, r18, 4
|
||||
lwz r31, maxTP(r10)
|
||||
lwz r12, maxHP(r10)
|
||||
cmpw r12, r31
|
||||
bgt _MaxTPSmallerintp
|
||||
b _MaxHPSmallerintp
|
||||
_MaxTPSmallerintp:
|
||||
lwz r12, maxTP(r10)
|
||||
_MaxHPSmallerintp:
|
||||
lwzx r31, r10, r19
|
||||
add r31, r31, r21
|
||||
mflr r0
|
||||
bl addTPHPComparetoMax
|
||||
mtlr r0
|
||||
lwzx r12, r10, r18
|
||||
stwx r12, r10, r19
|
||||
blr
|
||||
|
||||
;function that asynchronously binds HP & TP. has multiple entrance points if inclease only or decrease only are applied.
|
||||
;shade with HP updating and TP updating. boot never calls async
|
||||
addTPHPIncreaseOnly:
|
||||
cmpwi r21, 0
|
||||
blt HPTPMod_blr
|
||||
b addTPHPAsynchronous
|
||||
addTPHPDecreaseOnly:
|
||||
cmpwi r21, 0
|
||||
bgt HPTPMod_blr
|
||||
addTPHPAsynchronous:
|
||||
lhz r31, 0(r23) ; $CheatHP
|
||||
cmpwi r31, 0
|
||||
bne HPTPMod_blr
|
||||
lbz r31, 1(r24) ; $HPboundtoTPNegative
|
||||
cmpwi r31, 0
|
||||
bne _addTPHPAsynchronousNegative
|
||||
lwzx r31, r10, r18
|
||||
add r31, r31, r21
|
||||
addi r18, r18, 4
|
||||
lwzx r12, r10, r18
|
||||
b addTPHPComparetoMax
|
||||
_addTPHPAsynchronousNegative:
|
||||
lwzx r31, r10, r18
|
||||
sub r31, r31, r21
|
||||
addi r18, r18, 4
|
||||
lwzx r12, r10, r18
|
||||
b addTPHPComparetoMax
|
||||
|
||||
;function that gets called after async & sync settings. prevents us from having more HP/TP than out maximum
|
||||
;CheckifTPNegative only gets called when HP updates. prevents negative TP as negative TP is glitchy.
|
||||
;handling negative HP is not only unesisary but undesired as that is how the game checks for death
|
||||
addTPHPComparetoMax:
|
||||
addi r18, r18, -4
|
||||
cmpw r12, r31
|
||||
blt _hitMaximumHPTP
|
||||
stwx r31, r10, r18
|
||||
blr
|
||||
_hitMaximumHPTP:
|
||||
stwx r12, r10, r18
|
||||
blr
|
||||
CheckifTPNegative:
|
||||
lbz r30, 0(r24) ; $TPboundtoHP
|
||||
cmpwi r30, 0
|
||||
beq HPTPMod_blr
|
||||
cmpwi r31, 0
|
||||
blt _hitMinimumTP
|
||||
;stw r31, currentTP(r10)
|
||||
blr
|
||||
_hitMinimumTP:
|
||||
li r12, 0
|
||||
stw r12, currentTP(r10)
|
||||
blr
|
||||
|
||||
;function that only gets called during the "boot" section of the mod.
|
||||
;actually gets called every loading screen, every time a party member is added or removed, everytime your gear updates, etc.
|
||||
;this backs up all of the characters permanent stats so that the hp update and tp update section of the mods can identify which character is being modified and update the apropriate hp backup int tphp_data
|
||||
;boot is able to identify the characters because r26 broadcast which character is currently being modified
|
||||
backUpCharacterStats:
|
||||
li r31, 8
|
||||
mtctr r31
|
||||
mulli r31, r26, 4
|
||||
lwzx r29, r29, r31
|
||||
addi r29, r29, -4
|
||||
lis r3, PointerStatsOffsets@ha
|
||||
addi r3, r3, PointerStatsOffsets@l-2
|
||||
_forloopbackUpCharacterStats:
|
||||
lhzu r30, 2(r3)
|
||||
lwzx r31, r10, r30
|
||||
stwu r31, 4(r29)
|
||||
bdnz _forloopbackUpCharacterStats
|
||||
blr
|
||||
|
||||
;function only gets called during hp update and tp update
|
||||
;it loops and checks for which character is currently being modified and updates their dedicated hp storage
|
||||
;the hp storage is used for the "dont heal when skip traveling option"
|
||||
;identifying a character by all their stats is pretty innefficient but couldn't find a better solution and this works
|
||||
checkWhichCharacter:
|
||||
addic. r20, r20, -1
|
||||
blt DidNotFindCharacter
|
||||
li r31, 8
|
||||
mtctr r31
|
||||
lis r3, PointerStatsOffsets@ha
|
||||
addi r3, r3, PointerStatsOffsets@l-2
|
||||
addi r26, r26, 4
|
||||
lwzx r31, r29, r26
|
||||
addi r31, r31, -4
|
||||
_forloopCompareCharacterStats:
|
||||
lhzu r30, 2(r3)
|
||||
lwzx r22, r10, r30
|
||||
lwzu r19, 4(r31)
|
||||
cmpw r19, r22
|
||||
bne checkWhichCharacter
|
||||
bdnz _forloopCompareCharacterStats
|
||||
lwz r22, 0x84(r10)
|
||||
blr
|
||||
|
||||
;prep for the checkWhichCharacter function and exception exit if didn't find character
|
||||
DidNotFindCharacter:
|
||||
mtlr r0
|
||||
blr
|
||||
StoreCharacterHealth:
|
||||
mflr r0
|
||||
li r20, 4
|
||||
li r26, -4
|
||||
bl checkWhichCharacter
|
||||
stwx r22, r28, r26
|
||||
mtlr r0
|
||||
blr
|
||||
|
||||
|
||||
|
||||
;####################################################################################################################
|
||||
;####################################################################################################################
|
||||
;####################################################################################################################
|
||||
|
||||
;only gets called in boot section.
|
||||
;checks if to max tp every loading screen, if not checks if to max tp on boot
|
||||
;there is a sequence of 1 byte flags for each character and their skell in hptp_data
|
||||
;checks if the flag for the current character is set and if so does not apply the mod
|
||||
;if the flag is not set this means that the function was never run before, which the first time it runs is when booting the game
|
||||
;so max our tp and then set the flag so the mod doesn't max tp again
|
||||
CheckifToMaxTP_Boot:
|
||||
add r31, r27, r26
|
||||
cmpwi r3, 0
|
||||
bne _applymaxTP
|
||||
cmpwi r30, 4
|
||||
bgt HPTPMod_blr
|
||||
lbz r3, 0(r31)
|
||||
cmpwi r3, 0
|
||||
bne HPTPMod_blr
|
||||
_applymaxTP:
|
||||
lwz r3, maxTP(r10)
|
||||
stw r3, currentTP(r10)
|
||||
li r3, 1
|
||||
stb r3, 0(r31)
|
||||
blr
|
||||
|
||||
;checks if the "no skip travel after heal setting is set.
|
||||
;if so replaces our HP with the stored HP from the StoreCharacterHealth functions
|
||||
;mod can easily identify which character to apply to by the value in r26
|
||||
CheckNoHealAfterSkipTravel:
|
||||
lbz r3, 2(r25) ; $skiptravelheal
|
||||
cmpwi r3, 0
|
||||
bne HPTPMod_blr
|
||||
mulli r31, r26, 4
|
||||
add r28, r28, r31
|
||||
lwz r31, 0(r28)
|
||||
cmpwi r31, 0
|
||||
ble HPTPMod_blr
|
||||
stw r31, currentHP(r10)
|
||||
lbz r3, 0(r24) ; $synchronous
|
||||
cmpwi r3, 1
|
||||
beq _NoHealAfterSkipTravelWithSync
|
||||
blr
|
||||
_NoHealAfterSkipTravelWithSync:
|
||||
mflr r30
|
||||
addi r30, r30, 4
|
||||
mtlr r30
|
||||
stw r31, currentTP(r10)
|
||||
blr
|
||||
|
||||
;specialized sync function for the boot section of the mod
|
||||
CheckBootSynchronous:
|
||||
lbz r3, 0(r24) ; $synchronous
|
||||
cmpwi r3, 1
|
||||
bne HPTPMod_blr
|
||||
lwz r3, maxTP(r10)
|
||||
lwz r31, maxHP(r10)
|
||||
cmpw r31, r3
|
||||
bgt _MaxTPSmallerbootsync
|
||||
b _MaxHPSmallerbootsync
|
||||
_MaxTPSmallerbootsync:
|
||||
lwz r31, maxTP(r10)
|
||||
_MaxHPSmallerbootsync:
|
||||
stw r31, currentTP(r10)
|
||||
stw r31, currentHP(r10)
|
||||
blr
|
||||
|
||||
;free registers = r3 r23-r31 r0
|
||||
;r26 = current character (0-3)
|
||||
;r10 = pointer to character battle data
|
||||
;main function of the boot section. multiple entrance depeding for ground characters and skells
|
||||
;does entrance set up, calls the necissary functions, and the fixes everything at exit
|
||||
BootWithTPInner:
|
||||
mflr r0
|
||||
;lis r31, LinkRegisterBackUpTPHP@ha
|
||||
;stw r0, LinkRegisterBackUpTPHP@l(r31)
|
||||
bl GetModDataInnerHPTP
|
||||
lis r31, NumOfTimesLoadingScreenRan@ha
|
||||
lwz r30, NumOfTimesLoadingScreenRan@l(r31)
|
||||
addi r30, r30, 1
|
||||
stw r30, NumOfTimesLoadingScreenRan@l(r31)
|
||||
li r3, $everyloadingscreen
|
||||
b BootWithTP
|
||||
BootWithTPDoll:
|
||||
mflr r0
|
||||
;lis r31, LinkRegisterBackUpTPHP@ha
|
||||
;stw r0, LinkRegisterBackUpTPHP@l(r31)
|
||||
bl GetModDataDollHPTP
|
||||
lis r31, NumOfTimesLoadingScreenRan@ha
|
||||
lwz r30, NumOfTimesLoadingScreenRan@l(r31)
|
||||
li r3, $everyloadingscreenSkell
|
||||
BootWithTP:
|
||||
bl CheckifToMaxTP_Boot
|
||||
mfctr r31
|
||||
lis r30, CountRegisterBackupTPHP@ha
|
||||
stw r31, CountRegisterBackupTPHP@l(r30)
|
||||
lis r30, FunctionPointerArrayCheatBoot@hi
|
||||
ori r30, r30, FunctionPointerArrayCheatBoot@l
|
||||
bl CheckTensionCheat
|
||||
bl CheckHealthCheat
|
||||
bl CheckNoHealAfterSkipTravel
|
||||
bl CheckBootSynchronous
|
||||
bl backUpCharacterStats
|
||||
BootWithTPExit:
|
||||
;lis r31, RegistersBackUpTPHP@ha
|
||||
;lmw r14, RegistersBackUpTPHP@l(r31)
|
||||
;lis r31, LinkRegisterBackUpTPHP@ha
|
||||
;lwz r0, LinkRegisterBackUpTPHP@l(r31)
|
||||
mtlr r0
|
||||
lis r31, CountRegisterBackupTPHP@ha
|
||||
lwz r30, CountRegisterBackupTPHP@l(r31)
|
||||
mtctr r30
|
||||
li r3, 1
|
||||
blr
|
||||
|
||||
|
||||
|
||||
;####################################################################################################################
|
||||
;####################################################################################################################
|
||||
;####################################################################################################################
|
||||
|
||||
;this function only needs to exist because tp update is called before tp is applied
|
||||
;and hp update is called after hp is applied
|
||||
CheckifSyncNegTP:
|
||||
lbz r31, 0(r24)
|
||||
cmpwi r31, 1
|
||||
bne HPTPMod_blr
|
||||
lbz r31, 1(r24)
|
||||
cmpwi r31, 0
|
||||
beq HPTPMod_blr
|
||||
neg r21, r21
|
||||
blr
|
||||
|
||||
;this function only needs to exist because tp update is called before tp is applied
|
||||
;prevents the game from updating TP because we just updated it ourselves
|
||||
FixGameChangingTPWeChanged:
|
||||
li r21, 0
|
||||
blr
|
||||
CheckifModifiedTP:
|
||||
lhz r31, -2(r23) ; $CheatTP
|
||||
cmpwi r31, 0
|
||||
bne FixGameChangingTPWeChanged
|
||||
lbz r31, 0(r24) ; $sync
|
||||
cmpwi r31, 1
|
||||
beq FixGameChangingTPWeChanged
|
||||
blr
|
||||
|
||||
|
||||
;is called before the game adds your TP
|
||||
;free registers = r5, r31, r12, r0
|
||||
;character battle data = the pointer that is pointed to by (r4 + 0x1d0)+0x1a0
|
||||
;we then move that pointer into r10 so we can share code with boot & hp
|
||||
;r27 holds the amount of TP that will be added, mod moves it into r21 to share code with hp
|
||||
;main function of the tp update section. multiple entrance depeding for ground characters and skells
|
||||
;does entrance set up, calls the necissary functions, and the fixes everything at exit
|
||||
addTPtoHPInner:
|
||||
lwz r5, 0(r4)
|
||||
mflr r0
|
||||
lis r31, LinkRegisterBackUpTPHP@ha
|
||||
stw r0, LinkRegisterBackUpTPHP@l(r31)
|
||||
or r12, r27, r27
|
||||
bl GetModDataInnerHPTP
|
||||
b addTPtoHP
|
||||
addTPtoHPDoll:
|
||||
lwz r5, 0(r6)
|
||||
mflr r0
|
||||
lis r31, LinkRegisterBackUpTPHP@ha
|
||||
stw r0, LinkRegisterBackUpTPHP@l(r31)
|
||||
or r12, r27, r27
|
||||
bl GetModDataDollHPTP
|
||||
addTPtoHP:
|
||||
or r21, r12, r12
|
||||
lis r30, FunctionPointerArrayCheatTP@hi
|
||||
ori r30, r30, FunctionPointerArrayCheatTP@l
|
||||
lwz r5, 0x1d0(r5)
|
||||
addi r10, r5, 0x1a0
|
||||
bl CheckTensionCheat
|
||||
bl CheckHealthCheat
|
||||
bl CheckifSyncNegTP
|
||||
bl CheckSyncSettingTP
|
||||
bl CheckifModifiedTP
|
||||
bl StoreCharacterHealth
|
||||
_addTPtoHPExit:
|
||||
lis r31, LinkRegisterBackUpTPHP@ha
|
||||
lwz r0, LinkRegisterBackUpTPHP@l(r31)
|
||||
mtlr r0
|
||||
or r0, r21, r21
|
||||
lis r31, RegistersBackUpTPHP@ha
|
||||
lmw r14, RegistersBackUpTPHP@l(r31)
|
||||
or r27, r0, r0
|
||||
lis r31, BoolIsInnerOrDoll@ha
|
||||
lwz r31, BoolIsInnerOrDoll@l(r31)
|
||||
cmpwi r31, 0
|
||||
bne _addTPtoHPDollExit
|
||||
_addTPtoHPInnerExit:
|
||||
lwz r5, 0(r4)
|
||||
blr
|
||||
_addTPtoHPDollExit:
|
||||
lwz r5, 0(r6)
|
||||
blr
|
||||
|
||||
|
||||
|
||||
;####################################################################################################################
|
||||
;####################################################################################################################
|
||||
;####################################################################################################################
|
||||
|
||||
;this function checks the CurrentSlipHealPosition variable found in tphp_data
|
||||
;it uses this variable to detect if the heal is currently an out of battle heal
|
||||
;if so & if the users has set the mod to not update tp ot of battle
|
||||
;then this prevents tp from updating from out of battle heals and only out of battle heals
|
||||
HPStopSlipHealTP:
|
||||
lbz r31, 0(r24) ; $TPboundtoHP
|
||||
cmpwi r31, 1
|
||||
beq HPTPMod_blr
|
||||
lis r31, CurrentSlipHealPosition@ha
|
||||
lwz r31, CurrentSlipHealPosition@l(r31)
|
||||
cmpwi r31, 0
|
||||
ble+ HPTPMod_blr
|
||||
addi r12, r31, -1
|
||||
lis r31, CurrentSlipHealPosition@ha
|
||||
stw r12, CurrentSlipHealPosition@l(r31)
|
||||
cmpwi r12, 0
|
||||
mtlr r0
|
||||
bgt+ HPTPMod_blr
|
||||
li r12, 0
|
||||
stw r12, CurrentSlipHealPosition@l(r31)
|
||||
blr
|
||||
|
||||
;this function only needs to exist because hp update is called after hp is applied
|
||||
;and tp update is called before tp is applied
|
||||
CheckifSyncHP:
|
||||
lbz r31, 2(r24)
|
||||
cmpwi r31, 1
|
||||
bne HPTPMod_blr
|
||||
neg r21, r21
|
||||
lbz r31, 3(r24)
|
||||
cmpwi r31, 0
|
||||
bne HPTPMod_blr
|
||||
li r21, 0
|
||||
blr
|
||||
|
||||
;free registers = r12, r31, r0
|
||||
;r21 = amount of damage that was taken from HP (we neg r21 to share code with tp)
|
||||
;r10 = pointer to character battle data
|
||||
;main function of the hpupdate section. multiple entrance depeding for ground characters and skells
|
||||
;does entrance set up, calls the necissary functions, and the fixes everything at exit
|
||||
addHPtoTPInner:
|
||||
mflr r0
|
||||
lis r31, LinkRegisterBackUpTPHP@ha
|
||||
stw r0, LinkRegisterBackUpTPHP@l(r31)
|
||||
bl GetModDataInnerHPTP
|
||||
b addHPtoTP
|
||||
addHPtoTPDoll:
|
||||
mflr r0
|
||||
lis r31, LinkRegisterBackUpTPHP@ha
|
||||
stw r0, LinkRegisterBackUpTPHP@l(r31)
|
||||
bl GetModDataDollHPTP
|
||||
addHPtoTP:
|
||||
neg r21, r21
|
||||
lis r30, FunctionPointerArrayCheatHP@hi
|
||||
ori r30, r30, FunctionPointerArrayCheatHP@l
|
||||
bl CheckHealthCheat
|
||||
bl CheckTensionCheat
|
||||
bl CheckifSyncHP
|
||||
bl CheckSyncSettingHP
|
||||
bl CheckifTPNegative
|
||||
bl StoreCharacterHealth
|
||||
addHPtoTPExit:
|
||||
lis r31, LinkRegisterBackUpTPHP@ha
|
||||
lwz r0, LinkRegisterBackUpTPHP@l(r31)
|
||||
lis r31, RegistersBackUpTPHP@ha
|
||||
lmw r14, RegistersBackUpTPHP@l(r31)
|
||||
mtlr r0
|
||||
lwz r12, 0x10(r30)
|
||||
blr
|
||||
|
||||
;btw thank you for looking at my mod!
|
||||
;as a little treat I discoved a fun game breaking cheat
|
||||
;its not worth making a gfx for because all it does is remove the battle system from the game
|
||||
;so like actually just breaks the game and makes it not work
|
||||
;but still kinda funny for a few minutes
|
||||
;you cannot target enemies, enemies cannot target you, and enemies cannot move, only play their idle animation
|
||||
;0x022B7484 = nop ; 1.0.1E, 1.0.2U, 1.0.0E
|
||||
;0x022B6E94 = nop ; 1.0.2J
|
||||
;0x022B7414 = nop ; 1.0.1U, 1.0.0U
|
||||
;0x022B6D20 = nop ; 1.0.0J
|
||||
|
||||
[XCX_BootWithTP_Sync_v101E_v102U]
|
||||
moduleMatches = 0xF882D5CF, 0x30B6E091, 0x218F6E07 ; 1.0.1E, 1.0.2U, 1.0.0E
|
||||
;calls the boot section of the mod for ground characters
|
||||
0x02367C1C = bla BootWithTPInner
|
||||
;calls the boot section of the mod for Skells
|
||||
0x02367E20 = bla BootWithTPDoll
|
||||
;calls the tp section of the mod for ground characters
|
||||
0x0212D620 = bla addTPtoHPInner
|
||||
;calls the tp section of the mod for Skells
|
||||
0x025E5A9C = bla addHPtoTPInner
|
||||
;calls the hp section of the mod for ground characters
|
||||
0x0212D6EC = bla addTPtoHPDoll
|
||||
;calls the hp section of the mod for Skells
|
||||
0x025CE770 = bla addHPtoTPDoll
|
||||
|
||||
[XCX_BootWithTP_Sync_v102J]
|
||||
moduleMatches = 0x7672271D ; 1.0.2J
|
||||
0x02367450 = bla BootWithTPInner
|
||||
0x02367654 = bla BootWithTPDoll
|
||||
0x0212D0EC = bla addTPtoHPInner
|
||||
0x025E5078 = bla addHPtoTPInner
|
||||
0x0212D1B8 = bla addTPtoHPDoll
|
||||
0x025CDD4C = bla addHPtoTPDoll
|
||||
|
||||
[XCX_BootWithTP_Sync_v100U]
|
||||
moduleMatches = 0xAB97DE6B, 0x676EB33E ; 1.0.1U, 1.0.0U
|
||||
0x02367BAC = bla BootWithTPInner
|
||||
0x02367DB0 = bla BootWithTPDoll
|
||||
0x0212D620 = bla addTPtoHPInner
|
||||
0x025E5A2C = bla addHPtoTPInner
|
||||
0x0212D6EC = bla addTPtoHPDoll
|
||||
0x025CE700 = bla addHPtoTPDoll
|
||||
|
||||
[XCX_BootWithTP_Sync_v100J]
|
||||
moduleMatches = 0x785CA8A9 ; 1.0.0J
|
||||
0x023672DC = bla BootWithTPInner
|
||||
0x023674E0 = bla BootWithTPDoll
|
||||
0x0212CE68 = bla addTPtoHPInner
|
||||
0x025E459C = bla addHPtoTPInner
|
||||
0x0212CF34 = bla addTPtoHPDoll
|
||||
0x025CD270 = bla addHPtoTPDoll
|
608
src/XenobladeChroniclesX/Mods/BattleTensionPoints/rules.txt
Normal file
608
src/XenobladeChroniclesX/Mods/BattleTensionPoints/rules.txt
Normal file
@ -0,0 +1,608 @@
|
||||
[Definition]
|
||||
titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = TP and HP functionality
|
||||
path = "Xenoblade Chronicles X/Mods/Battle/TP QoL & Changes"
|
||||
description = This mod by default only applies 2 Quality of Life changes. It sets your Tension points to their max once at boot, and prevents your Skell GP from draining while your outside it.||On top of the QoL changes, this mod also features very extensive ways to customize the way your HP and TP are handled by the game that veteran players may enjoy.
|
||||
#Credits: Intra
|
||||
version = 7
|
||||
|
||||
[Default]
|
||||
$QoL = 1
|
||||
$QoLSkell = 1
|
||||
$everyloadingscreen = 0
|
||||
$everyloadingscreenSkell = 0
|
||||
$disableSkellLosingGP = 1
|
||||
$customSync = 0
|
||||
$customCheat = 0
|
||||
$TPCheat = 0
|
||||
$TPCheatSkell = 0
|
||||
$HPCheat = 0
|
||||
$HPCheatSkell = 0
|
||||
$noHPcheatnodieifdamagelt = 0
|
||||
$TPupdatecheatdieat0TP = 0
|
||||
$TPupdatecheatnegative = 0
|
||||
$HPupdatecheatnegative = 0
|
||||
$noHPcheatnodieifdamageltSkell = 0
|
||||
$TPupdatecheatdieat0TPSkell = 0
|
||||
$TPupdatecheatnegativeSkell = 0
|
||||
$HPupdatecheatnegativeSkell = 0
|
||||
$afterbattleheal = 1
|
||||
$skiptravelheal = 1
|
||||
$skiptravelhealSkell = 1
|
||||
$afterbattlerestoretp = 1
|
||||
$HPboundtoTP = 0
|
||||
$HPboundtoTPNegative = 0
|
||||
$TPboundtoHP = 0
|
||||
$TPboundtoHPNegative = 0
|
||||
$HPboundtoTPSkell = 0
|
||||
$HPboundtoTPNegativeSkell = 0
|
||||
$TPboundtoHPSkell = 0
|
||||
$TPboundtoHPNegativeSkell = 0
|
||||
|
||||
|
||||
[Preset]
|
||||
category = Quality of Life TP on Boot
|
||||
name = "Off"
|
||||
$QoL = 0
|
||||
$QoLSkell = 0
|
||||
|
||||
[Preset]
|
||||
category = Quality of Life TP on Boot
|
||||
name = "Max TP on boot"
|
||||
default = 1
|
||||
|
||||
[Preset]
|
||||
category = Quality of Life TP on Boot
|
||||
name = "Max TP Every time you skip travel or die"
|
||||
$everyloadingscreen = 1
|
||||
$everyloadingscreenSkell = 1
|
||||
|
||||
[Preset]
|
||||
category = Quality of Life Skell GP
|
||||
name = "Unchanged"
|
||||
condition = ($HPboundtoTPSkell==0)+($HPboundtoTPSkell==4) == 1
|
||||
$disableSkellLosingGP = 0
|
||||
|
||||
[Preset]
|
||||
category = Quality of Life Skell GP
|
||||
name = "Disable your Skell loosing GP when your not in it"
|
||||
default = 1
|
||||
|
||||
[Preset]
|
||||
category = Cheat
|
||||
name = "Off "
|
||||
|
||||
[Preset]
|
||||
category = Cheat
|
||||
name = "CHALLENGE: No TP"
|
||||
$TPCheat = 1
|
||||
$TPCheatSkell = 1
|
||||
|
||||
[Preset]
|
||||
category = Cheat
|
||||
name = "CHALLENGE: Die in 1 Hit"
|
||||
$HPCheat = 1
|
||||
$HPCheatSkell = 1
|
||||
|
||||
[Preset]
|
||||
category = Cheat
|
||||
name = "CHEAT: Infinite TP"
|
||||
$TPCheat = 2
|
||||
$TPCheatSkell = 2
|
||||
|
||||
[Preset]
|
||||
category = Cheat
|
||||
name = "CHEAT: Infinite HP"
|
||||
$HPCheat = 2
|
||||
$HPCheatSkell = 2
|
||||
|
||||
[Preset]
|
||||
category = Cheat
|
||||
name = "CHEAT: Infinite HP & TP"
|
||||
$TPCheat = 2
|
||||
$HPCheat = 2
|
||||
$TPCheatSkell = 2
|
||||
$HPCheatSkell = 2
|
||||
|
||||
[Preset]
|
||||
category = Cheat
|
||||
name = "Custom (Remember to set the custom options to off when unselecting)"
|
||||
$customCheat = 1
|
||||
|
||||
[Preset]
|
||||
category = Ground: Cheat TP
|
||||
condition = $customCheat == 1
|
||||
name = "Off "
|
||||
|
||||
[Preset]
|
||||
category = Ground: Cheat TP
|
||||
condition = $customCheat == 1
|
||||
name = "CHALLENGE: No TP "
|
||||
$TPCheat = 1
|
||||
|
||||
#[Preset]
|
||||
#category = Ground: Cheat TP
|
||||
#condition = $customCheat == 1
|
||||
#name = "WEIRD: Only TP Updates From Damage (Unfinished) "
|
||||
#$TPCheat = 4
|
||||
|
||||
[Preset]
|
||||
category = Ground: Cheat TP
|
||||
condition = $customCheat == 1
|
||||
name = "WEIRD: TP always equals HP "
|
||||
$TPCheat = 3
|
||||
|
||||
[Preset]
|
||||
category = Ground: Cheat TP
|
||||
condition = $customCheat == 1
|
||||
name = "CHEAT: Infinite TP "
|
||||
$TPCheat = 2
|
||||
|
||||
[Preset]
|
||||
category = Ground: Cheat HP
|
||||
condition = $customCheat == 1
|
||||
name = "Off "
|
||||
|
||||
[Preset]
|
||||
category = Ground: Cheat HP
|
||||
condition = $customCheat == 1
|
||||
name = "CHALLENGE: Die in 1 Hit "
|
||||
$HPCheat = 1
|
||||
|
||||
#[Preset]
|
||||
#category = Ground: Cheat HP
|
||||
#condition = $customCheat == 1
|
||||
#name = "WEIRD: Only HP Updates From Using TP (Unfinished) "
|
||||
#$HPCheat = 4
|
||||
|
||||
[Preset]
|
||||
category = Ground: Cheat HP
|
||||
condition = $customCheat == 1
|
||||
name = "WEIRD: HP always equals TP "
|
||||
$HPCheat = 3
|
||||
|
||||
[Preset]
|
||||
category = Ground: Cheat HP
|
||||
condition = $customCheat == 1
|
||||
name = "CHEAT: Infinite HP "
|
||||
$HPCheat = 2
|
||||
|
||||
[Preset]
|
||||
category = Skell: Cheat TP
|
||||
condition = $customCheat == 1
|
||||
name = "Off "
|
||||
|
||||
[Preset]
|
||||
category = Skell: Cheat TP
|
||||
condition = $customCheat == 1
|
||||
name = "CHALLENGE: No TP "
|
||||
$TPCheatSkell = 1
|
||||
|
||||
#[Preset]
|
||||
#category = Skell: Cheat TP
|
||||
#condition = $customCheat == 1
|
||||
#name = "WEIRD: Only TP Updates From Damage (Unfinished) "
|
||||
#$TPCheatSkell = 4
|
||||
|
||||
[Preset]
|
||||
category = Skell: Cheat TP
|
||||
condition = $customCheat == 1
|
||||
name = "WEIRD: TP always equals HP "
|
||||
$TPCheatSkell = 3
|
||||
|
||||
[Preset]
|
||||
category = Skell: Cheat TP
|
||||
condition = $customCheat == 1
|
||||
name = "CHEAT: Infinite TP "
|
||||
$TPCheatSkell = 2
|
||||
|
||||
[Preset]
|
||||
category = Skell: Cheat HP
|
||||
condition = $customCheat == 1
|
||||
name = "Off "
|
||||
|
||||
[Preset]
|
||||
category = Skell: Cheat HP
|
||||
condition = $customCheat == 1
|
||||
name = "CHALLENGE: Die in 1 Hit "
|
||||
$HPCheatSkell = 1
|
||||
|
||||
#[Preset]
|
||||
#category = Skell: Cheat HP
|
||||
#condition = $customCheat == 1
|
||||
#name = "WEIRD: Only HP Updates From Using TP (Unfinished) "
|
||||
#$HPCheatSkell = 4
|
||||
|
||||
[Preset]
|
||||
category = Skell: Cheat HP
|
||||
condition = $customCheat == 1
|
||||
name = "WEIRD: HP always equals TP "
|
||||
$HPCheatSkell = 3
|
||||
|
||||
[Preset]
|
||||
category = Skell: Cheat HP
|
||||
condition = $customCheat == 1
|
||||
name = "CHEAT: Infinite HP "
|
||||
$HPCheatSkell = 2
|
||||
|
||||
[Preset]
|
||||
category = Modify Die in 1 Hit Cheat
|
||||
condition = ($customCheat==1)*(($HPCheat==1)+($HPCheatSkell==1)) != 0
|
||||
name = "Unchanged "
|
||||
|
||||
[Preset]
|
||||
category = Modify Die in 1 Hit Cheat
|
||||
condition = ($customCheat==1)*(($HPCheat==1)+($HPCheatSkell==1)) != 0
|
||||
name = "Die in 1 Hit Unless Only Taking 1 Damage"
|
||||
$noHPcheatnodieifdamagelt = 1
|
||||
$noHPcheatnodieifdamageltSkell = 1
|
||||
|
||||
[Preset]
|
||||
category = Modify Die in 1 Hit Cheat
|
||||
condition = ($customCheat==1)*(($HPCheat==1)+($HPCheatSkell==1)) != 0
|
||||
name = "Die in 1 Hit Unless Taking 100 or less Damage"
|
||||
$noHPcheatnodieifdamagelt = 100
|
||||
$noHPcheatnodieifdamageltSkell = 100
|
||||
|
||||
[Preset]
|
||||
category = Modify Die in 1 Hit Cheat
|
||||
condition = ($customCheat==1)*(($HPCheat==1)+($HPCheatSkell==1)) != 0
|
||||
name = "Die in 1 Hit Unless Taking 1000 or less Damage"
|
||||
$noHPcheatnodieifdamagelt = 1000
|
||||
$noHPcheatnodieifdamageltSkell = 1000
|
||||
|
||||
[Preset]
|
||||
category = Modify Only TP Updates From Damage Cheat
|
||||
condition = ($customCheat==1)*(($TPCheat==3)+($TPCheatSkell==3)) != 0
|
||||
name = "Unchanged "
|
||||
|
||||
[Preset]
|
||||
category = Modify Only TP Updates From Damage Cheat
|
||||
condition = ($customCheat==1)*(($TPCheat==3)+($TPCheatSkell==3)) != 0
|
||||
name = "Negative Correlation"
|
||||
$TPupdatecheatnegative = 1
|
||||
|
||||
[Preset]
|
||||
category = Modify Only TP Updates From Damage Cheat
|
||||
condition = ($customCheat==1)*(($TPCheat==3)+($TPCheatSkell==3)) != 0
|
||||
name = "Die if your TP hits 0"
|
||||
$TPupdatecheatdieat0TP = 1
|
||||
|
||||
[Preset]
|
||||
category = Modify Only TP Updates From Damage Cheat
|
||||
condition = ($customCheat==1)*(($TPCheat==3)+($TPCheatSkell==3)) != 0
|
||||
name = "Die if your TP hits 0 AND Negative Correlation"
|
||||
$TPupdatecheatdieat0TP = 1
|
||||
$TPupdatecheatnegative = 1
|
||||
$TPupdatecheatdieat0TPSkell = 1
|
||||
$TPupdatecheatnegativeSkell = 1
|
||||
|
||||
[Preset]
|
||||
category = Modify Only HP Updates From Using TP Cheat
|
||||
condition = ($customCheat==1)*(($HPCheat==3)+($HPCheatSkell==3)) != 0
|
||||
name = "Unchanged "
|
||||
|
||||
[Preset]
|
||||
category = Modify Only HP Updates From Using TP Cheat
|
||||
condition = ($customCheat==1)*(($HPCheat==3)+($HPCheatSkell==3)) != 0
|
||||
name = "Negative Correlation "
|
||||
$HPupdatecheatnegative = 1
|
||||
$HPupdatecheatnegativeSkell = 1
|
||||
|
||||
[Preset]
|
||||
category = Change Gameplay: Auto Healing
|
||||
name = "Unchanged "
|
||||
|
||||
[Preset]
|
||||
category = Change Gameplay: Auto Healing
|
||||
name = "Disable healing after battle"
|
||||
$afterbattleheal = 0
|
||||
|
||||
[Preset]
|
||||
category = Change Gameplay: Auto Healing
|
||||
condition = ($TPboundtoHP==2)+($TPboundtoHP==4)+($TPboundtoHPSkell==2)+($TPboundtoHPSkell==4) != 0
|
||||
name = "Disable restoring TP after battle"
|
||||
$afterbattlerestoretp = 0
|
||||
|
||||
[Preset]
|
||||
category = Change Gameplay: Auto Healing
|
||||
condition = ($TPboundtoHP==2)+($TPboundtoHP==4)+($TPboundtoHPSkell==2)+($TPboundtoHPSkell==4) == 0
|
||||
name = "Disable healing after battle AND from skip traveling"
|
||||
$afterbattleheal = 0
|
||||
$skiptravelheal = 0
|
||||
$skiptravelhealSkell = 0
|
||||
|
||||
[Preset]
|
||||
category = Change Gameplay: Auto Healing
|
||||
condition = ($TPboundtoHP==2)+($TPboundtoHP==4)+($TPboundtoHPSkell==2)+($TPboundtoHPSkell==4) != 0
|
||||
name = "Disable healing/TP restore after battle AND healing from skip traveling"
|
||||
$afterbattleheal = 0
|
||||
$afterbattlerestoretp = 0
|
||||
$skiptravelheal = 0
|
||||
$skiptravelhealSkell = 0
|
||||
|
||||
[Preset]
|
||||
category = Change Gameplay: Bind HP and TP
|
||||
name = "Off "
|
||||
|
||||
[Preset]
|
||||
category = Change Gameplay: Bind HP and TP
|
||||
name = "HP & TP are bound Asynchronously"
|
||||
$HPboundtoTP = 2
|
||||
$TPboundtoHP = 2
|
||||
$HPboundtoTPSkell = 2
|
||||
$TPboundtoHPSkell = 2
|
||||
|
||||
[Preset]
|
||||
category = Change Gameplay: Bind HP and TP
|
||||
condition = (($TPCheat==0)*($HPCheat==0))*(($TPCheatSkell==0)*($HPCheatSkell==0)) != 0
|
||||
name = "HP & TP are bound Synchronously (always the same)"
|
||||
$HPboundtoTP = 1
|
||||
$TPboundtoHP = 1
|
||||
$HPboundtoTPSkell = 1
|
||||
$TPboundtoHPSkell = 1
|
||||
|
||||
[Preset]
|
||||
category = Change Gameplay: Bind HP and TP
|
||||
name = "HP & TP are bound Asynchronously (Negative Correlation)"
|
||||
$HPboundtoTP = 2
|
||||
$TPboundtoHP = 2
|
||||
$HPboundtoTPSkell = 2
|
||||
$TPboundtoHPSkell = 2
|
||||
$HPboundtoTPNegative = 1
|
||||
$TPboundtoHPNegative = 1
|
||||
$HPboundtoTPNegativeSkell = 1
|
||||
$TPboundtoHPNegativeSkell = 1
|
||||
|
||||
[Preset]
|
||||
category = Change Gameplay: Bind HP and TP
|
||||
name = "Only binds if losing HP or TP"
|
||||
$HPboundtoTP = 3
|
||||
$TPboundtoHP = 3
|
||||
$HPboundtoTPSkell = 3
|
||||
$TPboundtoHPSkell = 3
|
||||
|
||||
#[Preset]
|
||||
#category = Change Gameplay: Bind HP and TP
|
||||
#name = "Only binds if losing HP or TP (Negative Correlation)"
|
||||
#$HPboundtoTP = 3
|
||||
#$TPboundtoHP = 3
|
||||
#$HPboundtoTPSkell = 3
|
||||
#$TPboundtoHPSkell = 3
|
||||
#$HPboundtoTPNegative = 1
|
||||
#$TPboundtoHPNegative = 1
|
||||
#$HPboundtoTPNegativeSkell = 1
|
||||
#$TPboundtoHPNegativeSkell = 1
|
||||
|
||||
[Preset]
|
||||
category = Change Gameplay: Bind HP and TP
|
||||
name = "Only binds if gaining HP or TP"
|
||||
$HPboundtoTP = 4
|
||||
$TPboundtoHP = 4
|
||||
$HPboundtoTPSkell = 4
|
||||
$TPboundtoHPSkell = 4
|
||||
|
||||
#[Preset]
|
||||
#category = Change Gameplay: Bind HP and TP
|
||||
#name = "Only binds if gaining HP or TP (Negative Correlation)"
|
||||
#$HPboundtoTP = 4
|
||||
#$TPboundtoHP = 4
|
||||
#$HPboundtoTPSkell = 4
|
||||
#$TPboundtoHPSkell = 4
|
||||
#$HPboundtoTPNegative = 1
|
||||
#$TPboundtoHPNegative = 1
|
||||
#$HPboundtoTPNegativeSkell = 1
|
||||
#$TPboundtoHPNegativeSkell = 1
|
||||
|
||||
[Preset]
|
||||
category = Change Gameplay: Bind HP and TP
|
||||
name = "Custom (Remember to set the custom options to off when unselecting) "
|
||||
$customSync = 1
|
||||
|
||||
[Preset]
|
||||
category = Ground: Bind HP to TP
|
||||
condition = $customSync == 1
|
||||
name = "Off "
|
||||
|
||||
[Preset]
|
||||
category = Ground: Bind HP to TP
|
||||
condition = $customSync == 1
|
||||
name = "Asynchronously"
|
||||
$HPboundtoTP = 2
|
||||
|
||||
[Preset]
|
||||
category = Ground: Bind HP to TP
|
||||
condition = $customSync == 1
|
||||
name = "Decreasing Only"
|
||||
$HPboundtoTP = 3
|
||||
|
||||
[Preset]
|
||||
category = Ground: Bind HP to TP
|
||||
condition = $customSync == 1
|
||||
name = "Increasing Only"
|
||||
$HPboundtoTP = 4
|
||||
|
||||
[Preset]
|
||||
category = Ground: Bind HP to TP
|
||||
condition = $customSync == 1
|
||||
name = "Asynchronously (Negative Correlation)"
|
||||
$HPboundtoTP = 2
|
||||
$HPboundtoTPNegative = 1
|
||||
|
||||
[Preset]
|
||||
category = Ground: Bind HP to TP
|
||||
condition = $customSync == 1
|
||||
name = "Decreasing Only (Negative Correlation)"
|
||||
$HPboundtoTP = 3
|
||||
$HPboundtoTPNegative = 1
|
||||
|
||||
[Preset]
|
||||
category = Ground: Bind HP to TP
|
||||
condition = $customSync == 1
|
||||
name = "Increasing Only (Negative Correlation)"
|
||||
$HPboundtoTP = 4
|
||||
$HPboundtoTPNegative = 1
|
||||
|
||||
[Preset]
|
||||
category = Ground: Bind HP to TP
|
||||
condition = ($customSync == 1) * (($TPCheat==0)*($HPCheat==0)) == 1
|
||||
name = "Bind HP AND TP Synchronously"
|
||||
$TPboundtoHP = 1
|
||||
$HPboundtoTP = 1
|
||||
|
||||
[Preset]
|
||||
category = Ground: Bind HP to TP
|
||||
condition = ($customSync == 1) * (($TPCheat==0)*($HPCheat==0)) == 1
|
||||
name = "Bind HP AND TP Synchronously (Negative Correlation)"
|
||||
$TPboundtoHP = 1
|
||||
$HPboundtoTP = 1
|
||||
$HPboundtoTPNegative = 1
|
||||
$TPboundtoHPNegative = 1
|
||||
|
||||
[Preset]
|
||||
category = Ground: Bind TP to HP
|
||||
condition = ($customSync==1)*($HPboundtoTP!=1) == 1
|
||||
name = "Off "
|
||||
|
||||
[Preset]
|
||||
category = Ground: Bind TP to HP
|
||||
condition = ($customSync==1)*($HPboundtoTP!=1) == 1
|
||||
name = "Asynchronously "
|
||||
$TPboundtoHP = 2
|
||||
|
||||
[Preset]
|
||||
category = Ground: Bind TP to HP
|
||||
condition = ($customSync==1)*($HPboundtoTP!=1) == 1
|
||||
name = "Decreasing Only "
|
||||
$TPboundtoHP = 3
|
||||
|
||||
[Preset]
|
||||
category = Ground: Bind TP to HP
|
||||
condition = ($customSync==1)*($HPboundtoTP!=1) == 1
|
||||
name = "Increasing Only "
|
||||
$TPboundtoHP = 4
|
||||
|
||||
[Preset]
|
||||
category = Ground: Bind TP to HP
|
||||
condition = ($customSync==1)*($HPboundtoTP!=1) == 1
|
||||
name = "Asynchronously (Negative Correlation) "
|
||||
$TPboundtoHP = 2
|
||||
$TPboundtoHPNegative = 1
|
||||
|
||||
[Preset]
|
||||
category = Ground: Bind TP to HP
|
||||
condition = ($customSync==1)*($HPboundtoTP!=1) == 1
|
||||
name = "Decreasing Only (Negative Correlation) "
|
||||
$TPboundtoHP = 3
|
||||
$TPboundtoHPNegative = 1
|
||||
|
||||
[Preset]
|
||||
category = Ground: Bind TP to HP
|
||||
condition = ($customSync==1)*($HPboundtoTP!=1) == 1
|
||||
name = "Increasing Only (Negative Correlation) "
|
||||
$TPboundtoHP = 4
|
||||
$TPboundtoHPNegative = 1
|
||||
|
||||
[Preset]
|
||||
category = Skell: Bind HP to TP
|
||||
condition = $customSync == 1
|
||||
name = "Off "
|
||||
|
||||
[Preset]
|
||||
category = Skell: Bind HP to TP
|
||||
condition = $customSync == 1
|
||||
name = "Asynchronously "
|
||||
$HPboundtoTPSkell = 2
|
||||
|
||||
[Preset]
|
||||
category = Skell: Bind HP to TP
|
||||
condition = $customSync == 1
|
||||
name = "Decreasing Only "
|
||||
$HPboundtoTPSkell = 3
|
||||
|
||||
[Preset]
|
||||
category = Skell: Bind HP to TP
|
||||
condition = $customSync == 1
|
||||
name = "Increasing Only "
|
||||
$HPboundtoTPSkell = 4
|
||||
|
||||
[Preset]
|
||||
category = Skell: Bind HP to TP
|
||||
condition = $customSync == 1
|
||||
name = "Asynchronously (Negative Correlation) "
|
||||
$HPboundtoTPSkell = 2
|
||||
$HPboundtoTPNegativeSkell = 1
|
||||
|
||||
[Preset]
|
||||
category = Skell: Bind HP to TP
|
||||
condition = $customSync == 1
|
||||
name = "Decreasing Only (Negative Correlation) "
|
||||
$HPboundtoTPSkell = 3
|
||||
$HPboundtoTPNegativeSkell = 1
|
||||
|
||||
[Preset]
|
||||
category = Skell: Bind HP to TP
|
||||
condition = $customSync == 1
|
||||
name = "Increasing Only (Negative Correlation) "
|
||||
$HPboundtoTPSkell = 4
|
||||
$HPboundtoTPNegativeSkell = 1
|
||||
|
||||
[Preset]
|
||||
category = Skell: Bind HP to TP
|
||||
condition = ($customSync == 1) * (($TPCheatSkell==0)*($HPCheatSkell==0)) == 1
|
||||
name = "Bind HP AND TP Synchronously "
|
||||
$TPboundtoHPSkell = 1
|
||||
$HPboundtoTPSkell = 1
|
||||
|
||||
[Preset]
|
||||
category = Skell: Bind HP to TP
|
||||
condition = ($customSync == 1) * (($TPCheatSkell==0)*($HPCheatSkell==0)) == 1
|
||||
name = "Bind HP AND TP Synchronously (Negative Correlation) "
|
||||
$TPboundtoHPSkell = 1
|
||||
$HPboundtoTPSkell = 1
|
||||
$HPboundtoTPNegativeSkell = 1
|
||||
$TPboundtoHPNegativeSkell = 1
|
||||
|
||||
[Preset]
|
||||
category = Skell: Bind TP to HP
|
||||
condition = ($customSync==1)*($HPboundtoTPSkell!=1) == 1
|
||||
name = "Off "
|
||||
|
||||
[Preset]
|
||||
category = Skell: Bind TP to HP
|
||||
condition = ($customSync==1)*($HPboundtoTPSkell!=1) == 1
|
||||
name = "Asynchronously "
|
||||
$TPboundtoHPSkell = 2
|
||||
|
||||
[Preset]
|
||||
category = Skell: Bind TP to HP
|
||||
condition = ($customSync==1)*($HPboundtoTPSkell!=1) == 1
|
||||
name = "Decreasing Only "
|
||||
$TPboundtoHPSkell = 3
|
||||
|
||||
[Preset]
|
||||
category = Skell: Bind TP to HP
|
||||
condition = ($customSync==1)*($HPboundtoTPSkell!=1) == 1
|
||||
name = "Increasing Only "
|
||||
$TPboundtoHPSkell = 4
|
||||
|
||||
[Preset]
|
||||
category = Skell: Bind TP to HP
|
||||
condition = ($customSync==1)*($HPboundtoTPSkell!=1) == 1
|
||||
name = "Asynchronously (Negative Correlation) "
|
||||
$TPboundtoHPSkell = 2
|
||||
$TPboundtoHPNegativeSkell = 1
|
||||
|
||||
[Preset]
|
||||
category = Skell: Bind TP to HP
|
||||
condition = ($customSync==1)*($HPboundtoTPSkell!=1) == 1
|
||||
name = "Decreasing Only (Negative Correlation) "
|
||||
$TPboundtoHPSkell = 3
|
||||
$TPboundtoHPNegativeSkell = 1
|
||||
|
||||
[Preset]
|
||||
category = Skell: Bind TP to HP
|
||||
condition = ($customSync==1)*($HPboundtoTPSkell!=1) == 1
|
||||
name = "Increasing Only (Negative Correlation) "
|
||||
$TPboundtoHPSkell = 4
|
||||
$TPboundtoHPNegativeSkell = 1
|
@ -0,0 +1,38 @@
|
||||
[XCX_OFFLINE_DivisionF]
|
||||
moduleMatches = 0xF882D5CF, 0x30B6E091, 0x7672271D, 0x218F6E07, 0xAB97DE6B, 0x676EB33E, 0x785CA8A9 ; 1.0.1E, 1.0.2U, 1.0.2J, 1.0.0E, 1.0.1U, 1.0.0U, 1.0.0J
|
||||
.origin = codecave
|
||||
|
||||
_forceChangeDivision:
|
||||
li r3, $division
|
||||
stw r3, 0xc4(r12)
|
||||
blr
|
||||
|
||||
[XCX_OFFLINE_DivisionF_v101E]
|
||||
moduleMatches = 0xF882D5CF, 0x218F6E07 ; 1.0.1E, 1.0.0E
|
||||
0x0288D39C = ba _forceChangeDivision
|
||||
0x0288D3B8 = ba _forceChangeDivision
|
||||
;0x02AC623C = li r3, 0 ; offline__Q2_4menu19CTerminalMenu_UnionFv ;makes the division option show up on the blade terminal but just softlocks if selecting currently
|
||||
|
||||
[XCX_OFFLINE_DivisionF_v102U]
|
||||
moduleMatches = 0x30B6E091 ; 1.0.2U
|
||||
0x0288D39C = ba _forceChangeDivision
|
||||
0x0288D3B8 = ba _forceChangeDivision
|
||||
;0x02AC622C = li r3, 0 ; offline__Q2_4menu19CTerminalMenu_UnionFv
|
||||
|
||||
[XCX_OFFLINE_DivisionF_v102J]
|
||||
moduleMatches = 0x7672271D ; 1.0.2J
|
||||
0x0288A2FC = ba _forceChangeDivision
|
||||
0x0288A318 = ba _forceChangeDivision
|
||||
;0x02AC28FC = li r3, 0
|
||||
|
||||
[XCX_OFFLINE_DivisionF_v100U]
|
||||
moduleMatches = 0xAB97DE6B, 0x676EB33E ; 1.0.1U, 1.0.0U
|
||||
0x0288D320 = ba _forceChangeDivision
|
||||
0x0288D33C = ba _forceChangeDivision
|
||||
;0x02AC61B0 = li r3, 0
|
||||
|
||||
[XCX_OFFLINE_DivisionF_v100J]
|
||||
moduleMatches = 0x785CA8A9 ; 1.0.0J
|
||||
0x02888F24 = ba _forceChangeDivision
|
||||
0x02888F40 = ba _forceChangeDivision
|
||||
;0x02AC0B14 = li r3, 0
|
@ -0,0 +1,55 @@
|
||||
[Definition]
|
||||
titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Offline Change Division"
|
||||
path = "Xenoblade Chronicles X/Mods/BLADE/Offline Change Division"
|
||||
description = Simple mod to force change your BLADE Division.|It is normally only possible to change it online.
|
||||
#Credits: Intra
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
$division = 1
|
||||
|
||||
[Preset]
|
||||
category = Division
|
||||
name = Pathfinders
|
||||
$division = 1
|
||||
|
||||
[Preset]
|
||||
category = Division
|
||||
name = Interceptors
|
||||
$division = 2
|
||||
|
||||
[Preset]
|
||||
category = Division
|
||||
name = Harriers
|
||||
$division = 3
|
||||
|
||||
[Preset]
|
||||
category = Division
|
||||
name = Reclaimers
|
||||
$division = 4
|
||||
|
||||
[Preset]
|
||||
category = Division
|
||||
name = Curators
|
||||
$division = 5
|
||||
|
||||
[Preset]
|
||||
category = Division
|
||||
name = Prospecters
|
||||
$division = 6
|
||||
|
||||
[Preset]
|
||||
category = Division
|
||||
name = Outfitters
|
||||
$division = 7
|
||||
|
||||
[Preset]
|
||||
category = Division
|
||||
name = Mediators
|
||||
$division = 8
|
||||
|
||||
[Preset]
|
||||
category = Division
|
||||
name = Have No Division (Glitch)
|
||||
$division = 0
|
@ -3,4 +3,5 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "DLC Quests unlocked"
|
||||
path = "Xenoblade Chronicles X/Mods/BLADE/DLC Quests unlocked"
|
||||
description = DLC Support quests are unlocked and accessible right after you are a BLADE member.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = Field Skill Level
|
||||
path = "Xenoblade Chronicles X/Mods/BLADE/Field Skill Level"
|
||||
description = "You can change your Mechanical, Archaeological and Biological field skill level."
|
||||
#Credits: Intra
|
||||
version = 7
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Gain Reward Tickets from Time Attack or DLC missions"
|
||||
path = "Xenoblade Chronicles X/Mods/BLADE/Gain Reward Tickets from Time Attack or DLC missions"
|
||||
description = Adds Exchange Tickets in reward of completing Blade missions.|This mod will not work if More Reward Tickets is enabled.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Offline Global Nemesis missions"
|
||||
path = "Xenoblade Chronicles X/Mods/BLADE/Offline Global Nemesis missions"
|
||||
description = Global Nemesis (both Telethia Plume and Yggralith Zero) are available in the BLADE console.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -0,0 +1,46 @@
|
||||
[XCX_InfiniteTickets]
|
||||
moduleMatches = 0xF882D5CF, 0x30B6E091, 0x7672271D, 0x218F6E07, 0xAB97DE6B, 0x676EB33E, 0x785CA8A9 ; 1.0.1E, 1.0.2U, 1.0.2J, 1.0.0E, 1.0.1U, 1.0.0U, 1.0.0J
|
||||
.origin = codecave
|
||||
|
||||
ticketammount = $ticketammount
|
||||
miraniumammount = $miraniumammount
|
||||
moneyammount = $moneyammount
|
||||
|
||||
InfiniteTickets:
|
||||
lis r3, ticketammount@hi
|
||||
ori r3, r3, ticketammount@l
|
||||
blr
|
||||
|
||||
InfiniteMiranium:
|
||||
lis r3, miraniumammount@hi
|
||||
ori r3, r3, miraniumammount@l
|
||||
blr
|
||||
|
||||
InfiniteMoney:
|
||||
lis r3, moneyammount@hi
|
||||
ori r3, r3, moneyammount@l
|
||||
blr
|
||||
|
||||
[XCX_InfiniteTickets_v101E_v102U]
|
||||
moduleMatches = 0xF882D5CF, 0x30B6E091, 0x218F6E07 ; 1.0.1E, 1.0.2U, 1.0.0E
|
||||
0x027F6B50 = ba InfiniteMoney
|
||||
0x027F6CA8 = ba InfiniteTickets
|
||||
0x027F6D44 = ba InfiniteMiranium
|
||||
|
||||
[XCX_InfiniteTickets_v102J]
|
||||
moduleMatches = 0x7672271D ; 1.0.2J
|
||||
0x027F46F4 = ba InfiniteMoney
|
||||
0x027F484C = ba InfiniteTickets
|
||||
0x027F48E8 = ba InfinitMiranium
|
||||
|
||||
[XCX_InfiniteTickets_v100U]
|
||||
moduleMatches = 0xAB97DE6B, 0x676EB33E ; 1.0.1U, 1.0.0U
|
||||
0x027F6AD4 = ba InfiniteMoney
|
||||
0x027F6C2C = ba InfiniteTickets
|
||||
0x027F6CC8 = ba InfiniteMiranium
|
||||
|
||||
[XCX_InfiniteTickets_v100J]
|
||||
moduleMatches = 0x785CA8A9 ; 1.0.0J
|
||||
0x027F36C8 = ba InfiniteMoney
|
||||
0x027F3820 = ba InfiniteTickets
|
||||
0x027F38BC = ba InfiniteMiranium
|
80
src/XenobladeChroniclesX/Mods/BladeInfiniteTickets/rules.txt
Normal file
80
src/XenobladeChroniclesX/Mods/BladeInfiniteTickets/rules.txt
Normal file
@ -0,0 +1,80 @@
|
||||
[Definition]
|
||||
titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Infinite Tickets and Miranium and Money"
|
||||
path = "Xenoblade Chronicles X/Mods/BLADE/Infinite Tickets\Miranium\Money"
|
||||
description = Force the game to read you having a certain amount of tickets, miranium, and money.
|
||||
#Credits: Intra
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
$ticketammount = 9999
|
||||
$miraniumammount = 999999
|
||||
$moneyammount = 99999999
|
||||
|
||||
[Preset]
|
||||
category = Tickets
|
||||
name = 0
|
||||
$ticketammount = 0
|
||||
|
||||
[Preset]
|
||||
category = Tickets
|
||||
name = 1,000
|
||||
$ticketammount = 1000
|
||||
|
||||
[Preset]
|
||||
category = Tickets
|
||||
name = 9,999
|
||||
default = 1
|
||||
$ticketammount = 9999
|
||||
|
||||
[Preset]
|
||||
category = Tickets
|
||||
name = 99,999
|
||||
$ticketammount = 99999
|
||||
|
||||
[Preset]
|
||||
category = Miranium
|
||||
name = 0
|
||||
$miraniumammount = 0
|
||||
|
||||
[Preset]
|
||||
category = Miranium
|
||||
name = 10,000
|
||||
$miraniumammount = 10000
|
||||
|
||||
[Preset]
|
||||
category = Miranium
|
||||
name = 99,999
|
||||
default = 1
|
||||
$miraniumammount = 99999
|
||||
|
||||
[Preset]
|
||||
category = Miranium
|
||||
name = 999,999
|
||||
$miraniumammount = 999999
|
||||
|
||||
[Preset]
|
||||
category = Money
|
||||
name = 0
|
||||
$moneyammount = 0
|
||||
|
||||
[Preset]
|
||||
category = Money
|
||||
name = 10,000
|
||||
$moneyammount = 10000
|
||||
|
||||
[Preset]
|
||||
category = Money
|
||||
name = 1,000,000
|
||||
$moneyammount = 1000000
|
||||
|
||||
[Preset]
|
||||
category = Money
|
||||
name = 99,999,999
|
||||
default = 1
|
||||
$moneyammount = 99999999
|
||||
|
||||
[Preset]
|
||||
category = Money
|
||||
name = 999,999,999
|
||||
$moneyammount = 99999999
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Lv60 Skells unlocked"
|
||||
path = "Xenoblade Chronicles X/Mods/BLADE/Lv60 Skells unlocked"
|
||||
description = Lv60 Skells and equipment are unlocked and accessible right after you are a BLADE member.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = Set BLADE Medal Count
|
||||
path = "Xenoblade Chronicles X/Mods/BLADE/BLADE Medals"
|
||||
description = Set the number of BLADE Medals you currently have. (must complete a nemesis mission for the new value to save)
|
||||
#Credits: Intra
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "More Reward Tickets"
|
||||
path = "Xenoblade Chronicles X/Mods/BLADE/More Reward Tickets"
|
||||
description = Increase the Tickets gained with Squad tasks and missions.|Uncapped presets ignore max tickets.
|
||||
#Credits: lasyan3, Crementif
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Squad tasks and missions are available offline"
|
||||
path = "Xenoblade Chronicles X/Mods/BLADE/Offline Squad tasks and missions"
|
||||
description = Squad tasks and missions are available offline. Presets allow to select a Squad Mission, or you can use [Social > Squad Select] menu for random selection.||Recommended to be combined with More Reward Tickets (x3).||"Enable Online Mode" setting must be OFF for the mod to work!!
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
64
src/XenobladeChroniclesX/Mods/CharacterClass/patch_class.asm
Normal file
64
src/XenobladeChroniclesX/Mods/CharacterClass/patch_class.asm
Normal file
@ -0,0 +1,64 @@
|
||||
[XCX_class]
|
||||
moduleMatches = 0xF882D5CF, 0x30B6E091, 0x7672271D, 0x218F6E07, 0xAB97DE6B, 0x676EB33E, 0x785CA8A9 ; 1.0.1E, 1.0.2U, 1.0.2J, 1.0.0E, 1.0.1U, 1.0.0U, 1.0.0J
|
||||
.origin = codecave
|
||||
|
||||
_classMemorJP100:
|
||||
;reads from the static address that stores the address for the start of character info memory section
|
||||
lis r11, 0x103a
|
||||
lwz r11, -0x489c (r11)
|
||||
b _charClassCheat
|
||||
|
||||
_classMemorUS100:
|
||||
;reads from the static address that stores the address for the start of character info memory section
|
||||
lis r11, 0x103a
|
||||
lwz r11, -0x3e78 (r11)
|
||||
b _charClassCheat
|
||||
|
||||
_classMemorJP102:
|
||||
;reads from the static address that stores the address for the start of character info memory section
|
||||
lis r11, 0x103a
|
||||
lwz r11, -0x42b0 (r11)
|
||||
b _charClassCheat
|
||||
|
||||
_classMemorEU101US102:
|
||||
;reads from the static address that stores the address for the start of character info memory section
|
||||
lis r11, 0x103a
|
||||
lwz r11, -0x3d78 (r11)
|
||||
|
||||
_charClassCheat:
|
||||
; Character class
|
||||
li r9, $class
|
||||
stb r9, $memoffset (r11)
|
||||
; Character class rank
|
||||
li r9, $rank
|
||||
stb r9, $memoffset+2 (r11)
|
||||
; Character class exp
|
||||
li r9, $exp
|
||||
sth r9, $memoffset+4 (r11)
|
||||
;its seems that after a class hits its max rank,
|
||||
;the rank counter continues to go up, the game just never shows you.
|
||||
;I almost looped the full range, my rank exp on drifter is 0xeff9 out of 0xffff
|
||||
;I think character exp works the same way
|
||||
;sadly these mods destroy that value, even if we dont change the exp, just changing the rank/level does
|
||||
;but the only way to even see them is to open up a hex editor
|
||||
|
||||
;fixes the line we over wrote
|
||||
lis r11, 0x103a
|
||||
blr
|
||||
|
||||
[XCX_Class_v101E_v102U]
|
||||
moduleMatches = 0xF882D5CF, 0x30B6E091, 0x218F6E07 ; 1.0.1E, 1.0.2U, 1.0.0E
|
||||
; Our code applies when the reqMenuCreateParty function is used
|
||||
0x023429FC = bla _classMemorEU101US102
|
||||
|
||||
[XCX_Class_v102J]
|
||||
moduleMatches = 0x7672271D ; 1.0.2J
|
||||
0x02342230 = bla _classMemorJP102
|
||||
|
||||
[XCX_Class_v100U]
|
||||
moduleMatches = 0xAB97DE6B, 0x676EB33E ; 1.0.1U, 1.0.0U
|
||||
0x0234298C = bla _classMemorUS100
|
||||
|
||||
[XCX_Class_v100J]
|
||||
moduleMatches = 0x785CA8A9 ; 1.0.0J
|
||||
0x023420BC = bla _classMemorJP100
|
378
src/XenobladeChroniclesX/Mods/CharacterClass/rules.txt
Normal file
378
src/XenobladeChroniclesX/Mods/CharacterClass/rules.txt
Normal file
@ -0,0 +1,378 @@
|
||||
[Definition]
|
||||
titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = Character Class
|
||||
path = "Xenoblade Chronicles X/Mods/Character/Character Class"
|
||||
description = "You can change the Class and Rank of any character.||***Activate by pressing START(+), then Party->Active Members->Confirm Changes."
|
||||
#Credits: Intra
|
||||
version = 7
|
||||
|
||||
[Default]
|
||||
$memoffset = 0x1D0
|
||||
$class = 1
|
||||
$rank = 1
|
||||
$exp = 0
|
||||
$characterID = 1
|
||||
$classtype = 0
|
||||
|
||||
[Preset]
|
||||
category = "Character"
|
||||
name = "Playable Avatar"
|
||||
|
||||
[Preset]
|
||||
category = "Character"
|
||||
name = "Nagi"
|
||||
$characterID = 2
|
||||
$memoffset = (($characterID-1)*0x57C)+0x1D0
|
||||
|
||||
[Preset]
|
||||
category = "Character"
|
||||
name = "L"
|
||||
$characterID = 3
|
||||
$memoffset = (($characterID-1)*0x57C)+0x1D0
|
||||
|
||||
[Preset]
|
||||
category = "Character"
|
||||
name = "Lao"
|
||||
$characterID = 4
|
||||
$memoffset = (($characterID-1)*0x57C)+0x1D0
|
||||
|
||||
[Preset]
|
||||
category = "Character"
|
||||
name = "H.B."
|
||||
$characterID = 5
|
||||
$memoffset = (($characterID-1)*0x57C)+0x1D0
|
||||
|
||||
[Preset]
|
||||
category = "Character"
|
||||
name = "Gwin"
|
||||
$characterID = 6
|
||||
$memoffset = (($characterID-1)*0x57C)+0x1D0
|
||||
|
||||
[Preset]
|
||||
category = "Character"
|
||||
name = "Frye"
|
||||
$characterID = 7
|
||||
$memoffset = (($characterID-1)*0x57C)+0x1D0
|
||||
|
||||
[Preset]
|
||||
category = "Character"
|
||||
name = "Doug"
|
||||
$characterID = 8
|
||||
$memoffset = (($characterID-1)*0x57C)+0x1D0
|
||||
|
||||
[Preset]
|
||||
category = "Character"
|
||||
name = "Yelv"
|
||||
$characterID = 9
|
||||
$memoffset = (($characterID-1)*0x57C)+0x1D0
|
||||
|
||||
[Preset]
|
||||
category = "Character"
|
||||
name = "Boze"
|
||||
$characterID = 10
|
||||
$memoffset = (($characterID-1)*0x57C)+0x1D0
|
||||
|
||||
[Preset]
|
||||
category = "Character"
|
||||
name = "Phog"
|
||||
$characterID = 11
|
||||
$memoffset = (($characterID-1)*0x57C)+0x1D0
|
||||
|
||||
[Preset]
|
||||
category = "Character"
|
||||
name = "Elma"
|
||||
$characterID = 12
|
||||
$memoffset = (($characterID-1)*0x57C)+0x1D0
|
||||
|
||||
[Preset]
|
||||
category = "Character"
|
||||
name = "Lin"
|
||||
$characterID = 13
|
||||
$memoffset = (($characterID-1)*0x57C)+0x1D0
|
||||
|
||||
[Preset]
|
||||
category = "Character"
|
||||
name = "Celica"
|
||||
$characterID = 14
|
||||
$memoffset = (($characterID-1)*0x57C)+0x1D0
|
||||
|
||||
[Preset]
|
||||
category = "Character"
|
||||
name = "Irina"
|
||||
$characterID = 15
|
||||
$memoffset = (($characterID-1)*0x57C)+0x1D0
|
||||
|
||||
[Preset]
|
||||
category = "Character"
|
||||
name = "Murderess"
|
||||
$characterID = 16
|
||||
$memoffset = (($characterID-1)*0x57C)+0x1D0
|
||||
|
||||
[Preset]
|
||||
category = "Character"
|
||||
name = "Alexa"
|
||||
$characterID = 17
|
||||
$memoffset = (($characterID-1)*0x57C)+0x1D0
|
||||
|
||||
[Preset]
|
||||
category = "Character"
|
||||
name = "Hope"
|
||||
$characterID = 18
|
||||
$memoffset = (($characterID-1)*0x57C)+0x1D0
|
||||
|
||||
[Preset]
|
||||
category = "Character"
|
||||
name = "Mia"
|
||||
$characterID = 19
|
||||
$memoffset = (($characterID-1)*0x57C)+0x1D0
|
||||
|
||||
[Preset]
|
||||
category = "Class Type"
|
||||
name = Playable Avatar Classes
|
||||
$classtype = 0
|
||||
|
||||
[Preset]
|
||||
category = "Class Type"
|
||||
name = Playable Character Classes
|
||||
$classtype = 1
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Drifter
|
||||
condition = $classtype == 0
|
||||
$class = 1
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Striker
|
||||
condition = $classtype == 0
|
||||
$class = 2
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Commando
|
||||
condition = $classtype == 0
|
||||
$class = 7
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Enforcer
|
||||
condition = $classtype == 0
|
||||
$class = 12
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Samurai Gunner
|
||||
condition = $classtype == 0
|
||||
$class = 3
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Duelist
|
||||
condition = $classtype == 0
|
||||
$class = 4
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Shield Trooper
|
||||
condition = $classtype == 0
|
||||
$class = 5
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Bastion Warrior
|
||||
condition = $classtype == 0
|
||||
$class = 6
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Winged Viper
|
||||
condition = $classtype == 0
|
||||
$class = 8
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Full Metal Jaguar
|
||||
condition = $classtype == 0
|
||||
$class = 9
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Partisan Eagle
|
||||
condition = $classtype == 0
|
||||
$class = 10
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Astral Crusader
|
||||
condition = $classtype == 0
|
||||
$class = 11
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Psycorruptor
|
||||
condition = $classtype == 0
|
||||
$class = 13
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Mastermind
|
||||
condition = $classtype == 0
|
||||
$class = 14
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Blast Fencer
|
||||
condition = $classtype == 0
|
||||
$class = 15
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Galactic Knight
|
||||
condition = $classtype == 0
|
||||
$class = 16
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Duelist+ (Nagi)
|
||||
condition = $classtype == 1
|
||||
$class = 17
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Shield Trooper (L)
|
||||
condition = $classtype == 1
|
||||
$class = 18
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Partisan Eagle (Lao)
|
||||
condition = $classtype == 1
|
||||
$class = 19
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Shield Trooper+ (H.B.)
|
||||
condition = $classtype == 1
|
||||
$class = 20
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Samurai Gunner (Gwin)
|
||||
condition = $classtype == 1
|
||||
$class = 21
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Samurai Gunner+ (Frye)
|
||||
condition = $classtype == 1
|
||||
$class = 22
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Blast Fencer+ (Doug)
|
||||
condition = $classtype == 1
|
||||
$class = 23
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Blast Fencer+ (Yelv)
|
||||
condition = $classtype == 1
|
||||
$class = 24
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Partisan Eagle (Boze)
|
||||
condition = $classtype == 1
|
||||
$class = 25
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Winged Viper (Phog)
|
||||
condition = $classtype == 1
|
||||
$class = 26
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Full Metal Jaguar (Elma)
|
||||
condition = $classtype == 1
|
||||
$class = 27
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Shield Trooper (Lin)
|
||||
condition = $classtype == 1
|
||||
$class = 28
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Psycorruptor+ (Celica)
|
||||
condition = $classtype == 1
|
||||
$class = 29
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Psycorruptor+ (Irina)
|
||||
condition = $classtype == 1
|
||||
$class = 30
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Winged Viper+ (Murderess)
|
||||
condition = $classtype == 1
|
||||
$class = 31
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Partisan Eagle+ (Alexa)
|
||||
condition = $classtype == 1
|
||||
$class = 32
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Psycorruptor+ (Hope)
|
||||
condition = $classtype == 1
|
||||
$class = 33
|
||||
|
||||
[Preset]
|
||||
category = "Class"
|
||||
name = Psycorruptor (Mia)
|
||||
condition = $classtype == 1
|
||||
$class = 34
|
||||
|
||||
#[Preset]
|
||||
#category = "Class"
|
||||
#name = Invalid Class (will crash the game)
|
||||
#$class = 0 #or anything above 34
|
||||
|
||||
#[Preset]
|
||||
#category = "Rank"
|
||||
#name = 0 (does nothing interesting)
|
||||
#$rank = 0
|
||||
|
||||
[Preset]
|
||||
category = "Rank"
|
||||
name = 1
|
||||
$rank = 1
|
||||
|
||||
[Preset]
|
||||
category = "Rank"
|
||||
name = 5 (Will not unlock anything)
|
||||
$rank = 5
|
||||
|
||||
[Preset]
|
||||
category = "Rank"
|
||||
name = 10 (Will not unlock anything)
|
||||
$rank = 10
|
||||
|
||||
[Preset]
|
||||
category = "Rank"
|
||||
name = 15 (Will not unlock anything)
|
||||
condition = $class > 16
|
||||
$rank = 15
|
||||
|
||||
[Preset]
|
||||
category = "Rank"
|
||||
name = 20 (Will not unlock anything)
|
||||
condition = $class > 16
|
||||
$rank = 20
|
@ -0,0 +1,29 @@
|
||||
[XCX_EquipAnyWeapon_v101E]
|
||||
moduleMatches = 0xF882D5CF, 0x218F6E07 ; 1.0.1E, 1.0.0E
|
||||
; WHO : checkEquipConditionInner__Q2_4menu13MenuEquipUtilSFRCQ2_2fw7SPcDataiT2bPi
|
||||
; WHAT : forces the equipment check to always return true. (can equip any level of gear, and can equip any weapon) (does not affect skells)
|
||||
0x02CC4428 = li r3, 1
|
||||
|
||||
; WHO : _checkWeapon__Q2_4Arts14CArtsControlPcFi
|
||||
; WHAT : Allows any weapon to use any art. 99% of the time this crashes the game, but could be useful for a "have 2 melee/ranged weapons equiped mod"
|
||||
;0x0269DCA8 = blr
|
||||
|
||||
[XCX_EquipAnyWeapon_v102U]
|
||||
moduleMatches = 0x30B6E091 ; 1.0.2U
|
||||
0x02CC43C8 = li r3, 1
|
||||
;0x0269DCA8 = blr
|
||||
|
||||
[XCX_EquipAnyWeapon_v102J]
|
||||
moduleMatches = 0x7672271D ; 1.0.2J
|
||||
0x02CBF920 = li r3, 1
|
||||
;0x0269D284 = blr
|
||||
|
||||
[XCX_EquipAnyWeapon_v100U]
|
||||
moduleMatches = 0xAB97DE6B, 0x676EB33E ; 1.0.1U, 1.0.0U
|
||||
0x02CC4250 = li r3, 1
|
||||
;0x0269DC38 = blr
|
||||
|
||||
[XCX_EquipAnyWeapon_v100J]
|
||||
moduleMatches = 0x785CA8A9 ; 1.0.0J
|
||||
0x02CBB62C = li r3, 1
|
||||
;0x0269C7A8 = blr
|
@ -0,0 +1,7 @@
|
||||
[Definition]
|
||||
titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Equip Any Weapon - Use any level of gear at any time"
|
||||
path = "Xenoblade Chronicles X/Mods/Character/Equip Any Weapon"
|
||||
description = Allows any character to equip any weapon and also removes the level check on gear so you can equip it even if under leveled. (Does not affect skells).
|
||||
#Credits: Intra
|
||||
version = 6
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = Character Level
|
||||
path = "Xenoblade Chronicles X/Mods/Character/Character Level"
|
||||
description = "You can change the level of any character.||***Activate by pressing START(+), then Party->Active Members->Confirm Changes."
|
||||
#Credits: Intra
|
||||
version = 7
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = Change Character Name
|
||||
path = "Xenoblade Chronicles X/Mods/Character/Change Name"
|
||||
description = Change the names of the playable characters, even if they're locked or not in your party.|The (JP) names do not work properly on NA and EU versions of the game.||***Activate by pressing START(+), then Party->Active Members->Confirm Changes.||To create your own name(s) look at the rules.txt in the downloadedGraphicsPack/XenobladeX/Mods/CharacterName folder.
|
||||
#Credits: Intra
|
||||
version = 7
|
||||
|
||||
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = Character Size and Invisible Chest
|
||||
path = "Xenoblade Chronicles X/Mods/Character/Character Size"
|
||||
description = "You can change the height of any character and also make the chest of some characters not render.||Recommended to be combined with the 'No Fading When Close-up' mod (in Graphics).||***Activate by pressing START(+), then Party->Active Members->Confirm Changes."
|
||||
#Credits: Intra
|
||||
version = 7
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = Unlock Character Arts
|
||||
path = "Xenoblade Chronicles X/Mods/Character/Unlock Arts"
|
||||
description = "Allows you to unlock all arts or specific arts. Using the "Force Arts" option allows party members to have arts they normally shouldn't have, and also allows having 2+ of the same art to be equiped.||***Activate "Unlock Arts" by pressing START(+), then Party->Arts->any character.|***Activate "Force Arts" by Party->active members->confirm changes."
|
||||
#Credits: Intra
|
||||
version = 7
|
||||
|
||||
[Default]
|
||||
@ -90,140 +91,140 @@ $mclass = 0
|
||||
$mmission = 0
|
||||
|
||||
[Preset]
|
||||
category = "Character:"
|
||||
category = "Character"
|
||||
name = "Playable Avatar"
|
||||
|
||||
[Preset]
|
||||
category = "Character:"
|
||||
category = "Character"
|
||||
name = "Nagi"
|
||||
$characterID = 2
|
||||
$memoffset = (($characterID-1)*0x57C)+0x422
|
||||
|
||||
[Preset]
|
||||
category = "Character:"
|
||||
category = "Character"
|
||||
name = "L"
|
||||
$characterID = 3
|
||||
$memoffset = (($characterID-1)*0x57C)+0x422
|
||||
|
||||
[Preset]
|
||||
category = "Character:"
|
||||
category = "Character"
|
||||
name = "Lao"
|
||||
$characterID = 4
|
||||
$memoffset = (($characterID-1)*0x57C)+0x422
|
||||
|
||||
[Preset]
|
||||
category = "Character:"
|
||||
category = "Character"
|
||||
name = "H.B."
|
||||
$characterID = 5
|
||||
$memoffset = (($characterID-1)*0x57C)+0x422
|
||||
|
||||
[Preset]
|
||||
category = "Character:"
|
||||
category = "Character"
|
||||
name = "Gwin"
|
||||
$characterID = 6
|
||||
$memoffset = (($characterID-1)*0x57C)+0x422
|
||||
|
||||
[Preset]
|
||||
category = "Character:"
|
||||
category = "Character"
|
||||
name = "Frye"
|
||||
$characterID = 7
|
||||
$memoffset = (($characterID-1)*0x57C)+0x422
|
||||
|
||||
[Preset]
|
||||
category = "Character:"
|
||||
category = "Character"
|
||||
name = "Doug"
|
||||
$characterID = 8
|
||||
$memoffset = (($characterID-1)*0x57C)+0x422
|
||||
|
||||
[Preset]
|
||||
category = "Character:"
|
||||
category = "Character"
|
||||
name = "Yelv"
|
||||
$characterID = 9
|
||||
$memoffset = (($characterID-1)*0x57C)+0x422
|
||||
|
||||
[Preset]
|
||||
category = "Character:"
|
||||
category = "Character"
|
||||
name = "Boze"
|
||||
$characterID = 10
|
||||
$memoffset = (($characterID-1)*0x57C)+0x422
|
||||
|
||||
[Preset]
|
||||
category = "Character:"
|
||||
category = "Character"
|
||||
name = "Phog"
|
||||
$characterID = 11
|
||||
$memoffset = (($characterID-1)*0x57C)+0x422
|
||||
|
||||
[Preset]
|
||||
category = "Character:"
|
||||
category = "Character"
|
||||
name = "Elma"
|
||||
$characterID = 12
|
||||
$memoffset = (($characterID-1)*0x57C)+0x422
|
||||
|
||||
[Preset]
|
||||
category = "Character:"
|
||||
category = "Character"
|
||||
name = "Lin"
|
||||
$characterID = 13
|
||||
$memoffset = (($characterID-1)*0x57C)+0x422
|
||||
|
||||
[Preset]
|
||||
category = "Character:"
|
||||
category = "Character"
|
||||
name = "Celica"
|
||||
$characterID = 14
|
||||
$memoffset = (($characterID-1)*0x57C)+0x422
|
||||
|
||||
[Preset]
|
||||
category = "Character:"
|
||||
category = "Character"
|
||||
name = "Irina"
|
||||
$characterID = 15
|
||||
$memoffset = (($characterID-1)*0x57C)+0x422
|
||||
|
||||
[Preset]
|
||||
category = "Character:"
|
||||
category = "Character"
|
||||
name = "Murderess"
|
||||
$characterID = 16
|
||||
$memoffset = (($characterID-1)*0x57C)+0x422
|
||||
|
||||
[Preset]
|
||||
category = "Character:"
|
||||
category = "Character"
|
||||
name = "Alexa"
|
||||
$characterID = 17
|
||||
$memoffset = (($characterID-1)*0x57C)+0x422
|
||||
|
||||
[Preset]
|
||||
category = "Character:"
|
||||
category = "Character"
|
||||
name = "Hope"
|
||||
$characterID = 18
|
||||
$memoffset = (($characterID-1)*0x57C)+0x422
|
||||
|
||||
[Preset]
|
||||
category = "Character:"
|
||||
category = "Character"
|
||||
name = "Mia"
|
||||
$characterID = 19
|
||||
$memoffset = (($characterID-1)*0x57C)+0x422
|
||||
|
||||
#[Preset]
|
||||
#category = "Combine with other mods?"
|
||||
#name = "No"
|
||||
#condition = ($characterID != 1)
|
||||
#
|
||||
#[Preset]
|
||||
#category = "Combine with other mods?"
|
||||
#name = "Combine with Force Weapons mod"
|
||||
#condition = ($characterID != 1)
|
||||
#$combweapmod = 1
|
||||
#
|
||||
#[Preset]
|
||||
#category = "Combine with other mods?"
|
||||
#name = "Combine with Change Class mod"
|
||||
#condition = ($characterID != 1)
|
||||
#$combclassmod = 1
|
||||
#
|
||||
#[Preset]
|
||||
#category = "Combine with other mods?"
|
||||
#name = "Combine with both Change Class and Force Weapons"
|
||||
#condition = ($characterID != 1)
|
||||
#$combweapmod = 1
|
||||
#$combclassmod = 1
|
||||
[Preset]
|
||||
category = "Combine with other mods?"
|
||||
name = "No"
|
||||
condition = ($characterID != 1)
|
||||
|
||||
[Preset]
|
||||
category = "Combine with other mods?"
|
||||
name = "Combine with Equip Any Weapon Mod"
|
||||
condition = ($characterID != 1)
|
||||
$combweapmod = 1
|
||||
|
||||
[Preset]
|
||||
category = "Combine with other mods?"
|
||||
name = "Combine with Change Class Mod"
|
||||
condition = ($characterID != 1)
|
||||
$combclassmod = 1
|
||||
|
||||
[Preset]
|
||||
category = "Combine with other mods?"
|
||||
name = "Combine with both Change Class and Equip Any Weapon Mods"
|
||||
condition = ($characterID != 1)
|
||||
$combweapmod = 1
|
||||
$combclassmod = 1
|
||||
|
||||
|
||||
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Catch range mod"
|
||||
path = "Xenoblade Chronicles X/Mods/Collectibles/Catch range mod"
|
||||
description = Increase the distance from which collectibles are grabbed.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Ignore 100th"
|
||||
path = "Xenoblade Chronicles X/Mods/Collectibles/Ignore 100th"
|
||||
description = Ignore items past 99|Do not collect if you have 99 of the item, and don't sell it.||Collect items past 99|Collect even if you have 99 of the item, does not give any extra items.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,4 +3,5 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Armors can have 3 augment slots"
|
||||
path = "Xenoblade Chronicles X/Mods/Equipment/Armors can have 3 augment slots"
|
||||
description = Using L's shop, you can have 3 augment slots on your EQUIPPED armors (ground and skell).
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Unlimited augment upgrades"
|
||||
path = "Xenoblade Chronicles X/Mods/Equipment/Unlimited augment upgrades"
|
||||
description = You can upgrade infinitely all the augments inside a piece of equipment.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Unlock all augments"
|
||||
path = "Xenoblade Chronicles X/Mods/Equipment/Unlock all augments"
|
||||
description = All the augments are already known at the shop, and with the CHEAT preset they cost nothing.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Battle Points X"
|
||||
path = "Xenoblade Chronicles X/Mods/Experience/Battle Points"
|
||||
description = Change the amount of Battle points gained when a new level (or class level) is reached, when completing missions or exploring.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "BLADE Points X"
|
||||
path = "Xenoblade Chronicles X/Mods/Experience/BLADE Points"
|
||||
description = Change the amount of BLADE points gained in various situations.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Class Exp Points X"
|
||||
path = "Xenoblade Chronicles X/Mods/Experience/Class Exp Points"
|
||||
description = Change the amount of Class Exp points gained in battle, missions, quests and exploration.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Friends Points X"
|
||||
path = "Xenoblade Chronicles X/Mods/Experience/Friends Points"
|
||||
description = More Friends points gained when activating a Soul Voice Link during battle.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Lv Exp Points"
|
||||
path = "Xenoblade Chronicles X/Mods/Experience/Lv Exp Points"
|
||||
description = Change the amount of Level Exp points gained in battle, missions, quests and exploration.|Ignores the 9999 exp cap.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = Field of View
|
||||
path = "Xenoblade Chronicles X/Mods/Field of View"
|
||||
description = Changes the field of view (FOV). Fixes edge framing for 21:9 cinematics and other FOV tweaks.
|
||||
#Credits: getdls
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "FrontierNav - Miranium frequency mod"
|
||||
path = "Xenoblade Chronicles X/Mods/FrontierNav/Miranium frequency mod"
|
||||
description = Affect the frequency of the FrontierNav income for the Miranium (Vanilla is every 30 minutes).
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "FrontierNav - Miranium quantity mod"
|
||||
path = "Xenoblade Chronicles X/Mods/FrontierNav/Miranium quantity mod"
|
||||
description = Affect the quantity of the FrontierNav income for the Miranium.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "FrontierNav - Money frequency mod"
|
||||
path = "Xenoblade Chronicles X/Mods/FrontierNav/Money frequency mod"
|
||||
description = Affect the frequency of the FrontierNav income for the Money (Vanilla is 15 minutes).
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "FrontierNav - Money quantity mod"
|
||||
path = "Xenoblade Chronicles X/Mods/FrontierNav/Money quantity mod"
|
||||
description = Affect the quantity of the FrontierNav income for the Money.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "FrontierNav - Resources frequency mod"
|
||||
path = "Xenoblade Chronicles X/Mods/FrontierNav/Resources frequency mod"
|
||||
description = Affect the frequency of the FrontierNav income for the resources (Vanilla is every 5 minutes).
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "FrontierNav - Resources quantity mod"
|
||||
path = "Xenoblade Chronicles X/Mods/FrontierNav/Resources quantity mod"
|
||||
description = Affect the quantity of the FrontierNav income for the resources.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -3,6 +3,7 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Camera distance mod"
|
||||
path = "Xenoblade Chronicles X/Mods/Graphics/Camera distance mod"
|
||||
description = Affect the default distance of the camera (Vanilla zoom is 0).|Does not affect max zoom possible.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
|
||||
[Default]
|
||||
|
@ -0,0 +1,12 @@
|
||||
[XCX_FixCameraBug_v101E_v102U_v100U]
|
||||
moduleMatches = 0xF882D5CF, 0x30B6E091, 0x218F6E07, 0xAB97DE6B, 0x676EB33E ; 1.0.1E, 1.0.2U, 1.0.0E, 1.0.1U, 1.0.0U
|
||||
;Prevents checkRoom__Q2_3Cam8CRootCamFPQ2_3cfs5CfObj from ever being called
|
||||
0x0222EE70 = blr
|
||||
|
||||
[XCX_FixCameraBug_v102J]
|
||||
moduleMatches = 0x7672271D ; 1.0.2J
|
||||
0x0222E93C = blr
|
||||
|
||||
[XCX_FixCameraBug_v100J]
|
||||
moduleMatches = 0x785CA8A9 ; 1.0.0J
|
||||
0x0222E6B8 = blr
|
@ -0,0 +1,7 @@
|
||||
[Definition]
|
||||
titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = Fix Under Ceiling Camera Bug
|
||||
path = "Xenoblade Chronicles X/Mods/Graphics/Fix Camera Bug"
|
||||
description = Fixes the really annoying camera bug where if your character ever goes under a ceiling, the game forgets all your settings and reverts to default.
|
||||
#Credits: Intra
|
||||
version = 6
|
@ -3,4 +3,5 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Freecam"
|
||||
path = "Xenoblade Chronicles X/Mods/Graphics/Freecam"
|
||||
description = Look around the world with the developer freecam.|The game functions like normal when you're in this mode. Area renders around camera, so going too far will make your character have no ground and die.||Mod made by blingbloing.|||Hold 'R' button to move camera up|Hold 'L' button to move camera down|Hold 'X' button to keep camera in place|Hold 'Y' button to speed up camera|Tip: Press and hold the R stick button to speed up even more
|
||||
#Credits: blingbloing
|
||||
version = 6
|
||||
|
280
src/XenobladeChroniclesX/Mods/GraphicsLibINI/patch_ini.asm
Normal file
280
src/XenobladeChroniclesX/Mods/GraphicsLibINI/patch_ini.asm
Normal file
@ -0,0 +1,280 @@
|
||||
[XCX_libini]
|
||||
moduleMatches = 0xF882D5CF, 0x30B6E091, 0x7672271D, 0x218F6E07, 0xAB97DE6B, 0x676EB33E, 0x785CA8A9 ; 1.0.1E, 1.0.2U, 1.0.2J, 1.0.0E, 1.0.1U, 1.0.0U, 1.0.0J
|
||||
.origin = codecave
|
||||
|
||||
;allocates memory to back up and restore registers r0-r31
|
||||
ini_register_backup:
|
||||
.uint 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
|
||||
;allocates memory to back up and restore the link register (LR)
|
||||
ini_linkregister_backup:
|
||||
.uint 0
|
||||
|
||||
;over writes original ini file with 0's
|
||||
DeleteINI:
|
||||
addi r30, r22, -4
|
||||
li r28, 0
|
||||
_whileLoopDeleteINI:
|
||||
stwu r28, 4(r30)
|
||||
lbz r24, 4(r30)
|
||||
cmpwi r24, 0
|
||||
bne+ _whileLoopDeleteINI
|
||||
blr
|
||||
|
||||
;passes PrintOnOff into the PrintSettings function wraper
|
||||
PrintOnOffSettingsINImod:
|
||||
lis r27, PrintOnOffINImod@hi
|
||||
ori r27, r27, PrintOnOffINImod@l
|
||||
b PrintSettingsINImod
|
||||
|
||||
;passes PrintStringValue into the PrintSettings function wraper
|
||||
PrintStringValueSettingsINImod:
|
||||
lis r27, PrintStringValueINImod@hi
|
||||
ori r27, r27, PrintStringValueINImod@l
|
||||
b PrintSettingsINImod
|
||||
|
||||
;passes Callsprintf directly into the PrintSettings function wraper
|
||||
PrintFloatSettingsINImod:
|
||||
lis r27, CallsprintfINImod@hi
|
||||
ori r27, r27, CallsprintfINImod@l
|
||||
b PrintSettingsINImod
|
||||
|
||||
;passes PrintAMVP into the PrintSettings function wraper
|
||||
PrintAMVPSettingsINImod:
|
||||
lis r27, PrintAMVPINImod@hi
|
||||
ori r27, r27, PrintAMVPINImod@l
|
||||
b PrintSettingsINImod
|
||||
|
||||
;takes in a pointer to a string(r22), and prints it
|
||||
PrintSettingNameINImod:
|
||||
lwzu r29, 4(r22)
|
||||
addi r29, r29, -1
|
||||
_whileloopPrintSettingNameINImod:
|
||||
lbzu r26, 1(r29)
|
||||
stbu r26, 1(r30)
|
||||
cmpwi r26, 0
|
||||
bne+ _whileloopPrintSettingNameINImod
|
||||
blr
|
||||
|
||||
;prints new line character
|
||||
PrintNewLineINImod:
|
||||
li r26, 0x0D0A
|
||||
sth r26, 0(r30)
|
||||
addi r30, r30, 1
|
||||
blr
|
||||
|
||||
;function wraper that takes in r20 and a function pointer(r27)
|
||||
;loops the function by the ammount in r20
|
||||
PrintSettingsINImod:
|
||||
mflr r31
|
||||
_forloopPrintSettingsINImod:
|
||||
bl PrintSettingNameINImod
|
||||
mtctr r27
|
||||
bctrl
|
||||
bl PrintNewLineINImod
|
||||
addic. r20, r20, -1
|
||||
bgt+ _forloopPrintSettingsINImod
|
||||
mtlr r31
|
||||
blr
|
||||
|
||||
;checks if the floating point precision is less than 0 or greater than 9
|
||||
;if so set precision to 1 to prevent the game from crashing
|
||||
CheckifPrecisionIsValidINImod:
|
||||
cmpwi r26, 0x30+0
|
||||
bge+ _ifPrecisionLessThan0INImod
|
||||
li r26, 0x30+1
|
||||
_ifPrecisionLessThan0INImod:
|
||||
cmpwi r26, 0x30+9
|
||||
ble+ _ifPrecisionGreaterThan9INImod
|
||||
li r26, 0x30+1
|
||||
_ifPrecisionGreaterThan9INImod:
|
||||
blr
|
||||
|
||||
;calls the C function sprintf()
|
||||
;takes in a pointer to a formating string by r4
|
||||
;takes in an address to print to by r3
|
||||
;takes in a float to print by f1
|
||||
;outputs the last address printed to in r11
|
||||
CallsprintfINImod:
|
||||
mflr r29
|
||||
lfsu f1, 4(r24)
|
||||
lis r4, str_floating_precision_INImod@hi
|
||||
ori r4, r4, str_floating_precision_INImod@l
|
||||
lbzu r26, 1(r21)
|
||||
addi r26, r26, 0x30
|
||||
bl CheckifPrecisionIsValidINImod
|
||||
stb r26, 2(r4)
|
||||
or r3, r30, r30
|
||||
CREQV 4*cr1+eq, 4*cr1+eq, 4*cr1+eq ;required for some reason
|
||||
mtctr r25
|
||||
bctrl ;bl sprintf
|
||||
or r30, r11, r11
|
||||
mtlr r29
|
||||
blr
|
||||
|
||||
;takes in r23 and prints either on or off
|
||||
PrintOnOffINImod:
|
||||
lwzu r26, 4(r23)
|
||||
stw r26, 0(r30)
|
||||
_whileloopPrintOnOffINImod:
|
||||
lbzu r26, 1(r30)
|
||||
cmpwi r26, 0
|
||||
bne+ _whileloopPrintOnOffINImod
|
||||
blr
|
||||
|
||||
;takes in a string pointer(r18), and hijacks PrintSettingName to print it
|
||||
PrintStringValueINImod:
|
||||
mflr r28
|
||||
addi r30, r30, -1
|
||||
or r19, r22, r22
|
||||
or r22, r18, r18
|
||||
bl PrintSettingNameINImod
|
||||
or r18, r22, r22
|
||||
or r22, r19, r19
|
||||
mtlr r28
|
||||
blr
|
||||
|
||||
;takes in a floating point(r24), and its precision(r21)
|
||||
;calls sprintf() 3 times to print 3 floats sperated by a comma
|
||||
PrintAMVPINImod:
|
||||
mflr r28
|
||||
lis r19, 0x202C
|
||||
ori r19, r19, 0x2000
|
||||
bl CallsprintfINImod
|
||||
stw r19, 0(r30)
|
||||
addi r30, r30, 3
|
||||
addi r21, r21, -1
|
||||
bl CallsprintfINImod
|
||||
stw r19, 0(r30)
|
||||
addi r30, r30, 3
|
||||
addi r21, r21, -1
|
||||
bl CallsprintfINImod
|
||||
mtlr r28
|
||||
blr
|
||||
|
||||
; r22 == 0x23f09100
|
||||
; registers that do not need to be restored:
|
||||
; r25 r24 r28 r10
|
||||
EditINIforinimod:
|
||||
;back up registers r0-r31
|
||||
lis r10, ini_register_backup@ha
|
||||
stmw r0, ini_register_backup@l(r10)
|
||||
;back up link register
|
||||
mflr r25
|
||||
lis r10, ini_linkregister_backup@ha
|
||||
stw r25, ini_linkregister_backup@l(r10)
|
||||
;load the function pointer for the C function sprintf() into r25
|
||||
lis r25, sprintfFunctionPointer@hi
|
||||
ori r25, r25, sprintfFunctionPointer@l
|
||||
;deletes the lib.ini file in ram so we can over write it with our own
|
||||
bl DeleteINI
|
||||
|
||||
;r30 will track current position in file
|
||||
addi r30, r22, -1
|
||||
;r22 will keep track of the current setting
|
||||
lis r22, lookuptable_settingname_INImod@ha
|
||||
addi r22, r22, lookuptable_settingname_INImod@l-4
|
||||
;r23 will keep track of on/off settings
|
||||
lis r23, lookuptable_onoff_INImod@ha
|
||||
addi r23, r23, lookuptable_onoff_INImod@l-4
|
||||
;r24 will keep track of floating point numbers
|
||||
lis r24, lookuptable_float_INImod@ha
|
||||
addi r24, r24, lookuptable_float_INImod@l-4
|
||||
;r21 will keep track of floating point precision
|
||||
lis r21, lookuptable_float_precision_INImod@ha
|
||||
addi r21, r21, lookuptable_float_precision_INImod@l-1
|
||||
;r18 will keep track of string values (only used for luttex1 & cube)
|
||||
lis r18, lookuptable_stringvalue_INImod@ha
|
||||
addi r18, r18, lookuptable_stringvalue_INImod@l-4
|
||||
;the r20 is how many times the loop executes, aka number of settings to print
|
||||
|
||||
;print all the on off settings at the begining of the file
|
||||
li r20, 9
|
||||
bl PrintOnOffSettingsINImod
|
||||
|
||||
;print luttex1 and cube setting
|
||||
li r20, 2
|
||||
bl PrintStringValueSettingsINImod
|
||||
|
||||
;print float settings until hitting an on/off setting
|
||||
li r20, 41
|
||||
bl PrintFloatSettingsINImod
|
||||
|
||||
;print red auto on/off setting
|
||||
li r20, 1
|
||||
bl PrintOnOffSettingsINImod
|
||||
|
||||
;print float settings until hitting an on/off setting
|
||||
li r20, 14
|
||||
bl PrintFloatSettingsINImod
|
||||
|
||||
;print blur on/off setting
|
||||
li r20, 1
|
||||
bl PrintOnOffSettingsINImod
|
||||
|
||||
;print float settings until hitting an on/off setting
|
||||
li r20, 3
|
||||
bl PrintFloatSettingsINImod
|
||||
|
||||
;print shadow half on/off setting
|
||||
li r20, 1
|
||||
bl PrintOnOffSettingsINImod
|
||||
|
||||
;print float settings until hitting an on/off setting
|
||||
li r20, 3
|
||||
bl PrintFloatSettingsINImod
|
||||
|
||||
;print sRGBmode on/off setting
|
||||
li r20, 1
|
||||
bl PrintOnOffSettingsINImod
|
||||
|
||||
;print float settings until hitting avmp settings
|
||||
li r20, 11
|
||||
bl PrintFloatSettingsINImod
|
||||
|
||||
;print avmp settings
|
||||
li r20, 16
|
||||
bl PrintAMVPSettingsINImod
|
||||
|
||||
;print last 2 float settings settings
|
||||
li r20, 2
|
||||
bl PrintFloatSettingsINImod
|
||||
|
||||
ExitEditINImod:
|
||||
;restore registers r0-r31 & LR
|
||||
lis r10, ini_linkregister_backup@ha
|
||||
lwz r25, ini_linkregister_backup@l(r10)
|
||||
mtlr r25
|
||||
lis r10, ini_register_backup@ha
|
||||
lmw r0, ini_register_backup@l(r10)
|
||||
;restores line we over wrote and returns to the game
|
||||
;lwz r22, 0xa0(r31)
|
||||
addi r25,r1,0x38
|
||||
blr
|
||||
|
||||
|
||||
[XCX_libini_V101E]
|
||||
moduleMatches = 0xF882D5CF, 0x218F6E07 ; 1.0.1E, 1.0.0E
|
||||
;pointer for the C function sprintf()
|
||||
sprintfFunctionPointer = 0x03B18118
|
||||
;patches the address with a branch link to the mod
|
||||
0x02FF94C8 = bla EditINIforinimod
|
||||
|
||||
[XCX_libini_V102U]
|
||||
moduleMatches = 0x30B6E091 ; 1.0.2U
|
||||
sprintfFunctionPointer = 0x03B18098
|
||||
0x02FF9468 = bla EditINIforinimod
|
||||
|
||||
[XCX_libini_V102J]
|
||||
moduleMatches = 0x7672271D ; 1.0.2J
|
||||
sprintfFunctionPointer = 0x03B134B0
|
||||
0x02FF4990 = bla EditINIforinimod
|
||||
|
||||
[XCX_libini_V100U]
|
||||
moduleMatches = 0xAB97DE6B, 0x676EB33E ; 1.0.1U, 1.0.0U
|
||||
sprintfFunctionPointer = 0x03B17F18
|
||||
0x02FF92F0 = bla EditINIforinimod
|
||||
|
||||
[XCX_libini_V100J]
|
||||
moduleMatches = 0x785CA8A9 ; 1.0.0J
|
||||
sprintfFunctionPointer = 0x03B0DEB0
|
||||
0x02FEF588 = bla EditINIforinimod
|
271
src/XenobladeChroniclesX/Mods/GraphicsLibINI/patch_inidata.asm
Normal file
271
src/XenobladeChroniclesX/Mods/GraphicsLibINI/patch_inidata.asm
Normal file
@ -0,0 +1,271 @@
|
||||
[XCX_libini_Data]
|
||||
moduleMatches = 0xF882D5CF, 0x30B6E091, 0x7672271D, 0x218F6E07, 0xAB97DE6B, 0x676EB33E, 0x785CA8A9 ; 1.0.1E, 1.0.2U, 1.0.2J, 1.0.0E, 1.0.1U, 1.0.0U, 1.0.0J
|
||||
.origin = codecave
|
||||
|
||||
;This file allocates all the data from the rules.txt into ram
|
||||
;this file also creates lookup tables to make the data easier to use
|
||||
;the ini.asm file then contains code that will use this data
|
||||
|
||||
;string values for luttex1 and cube setting
|
||||
value_luttex1:
|
||||
.uint $luttex1_s1, $luttex1_s2, 0 ;if a larger string is needed, add $luttex1_s3, $luttex1_s4, etc. to before the 0
|
||||
value_cube:
|
||||
.uint $cube_s1, 0 ;if a larger string is needed, add $cube_s2, $cube_s3, etc. to before the 0
|
||||
|
||||
;list of strings that are in the lib.ini file
|
||||
;this mod will be reprinting them
|
||||
str_tonemap:
|
||||
.string "tonemap="
|
||||
str_ssao:
|
||||
.string "ssao="
|
||||
str_bloom:
|
||||
.string "bloom="
|
||||
str_godray:
|
||||
.string "godray="
|
||||
str_AntiAliasing:
|
||||
.string "AntiAliasing="
|
||||
str_ColReduction:
|
||||
.string "ColReduction="
|
||||
str_dof:
|
||||
.string "dof="
|
||||
str_lensFlare:
|
||||
.string "lensFlare="
|
||||
|
||||
str_lut:
|
||||
.string "lut="
|
||||
str_luttex1:
|
||||
.string "luttex1="
|
||||
|
||||
str_cube:
|
||||
.string "cube="
|
||||
|
||||
str_tonemax:
|
||||
.string "tonemax="
|
||||
str_tonemin:
|
||||
.string "tonemin="
|
||||
str_tonemul:
|
||||
.string "tonemul="
|
||||
str_toneLastmul:
|
||||
.string "toneLastmul="
|
||||
str_toneBlmmax:
|
||||
.string "toneBlmmax="
|
||||
str_toneBlmmin:
|
||||
.string "toneBlmmin="
|
||||
str_toneBlmmul:
|
||||
.string "toneBlmmul="
|
||||
str_toneBlmLastmul:
|
||||
.string "toneBlmLastmul="
|
||||
|
||||
str_godray_inival:
|
||||
.string "godray_inival="
|
||||
str_godray_decay:
|
||||
.string "godray_decay="
|
||||
str_godray_scale:
|
||||
.string "godray_scale="
|
||||
|
||||
str_blm_border_sub:
|
||||
.string "blm_border_sub="
|
||||
str_blm_border_mul:
|
||||
.string "blm_border_mul="
|
||||
str_blm_border_sub2:
|
||||
.string "blm_border_sub2="
|
||||
str_blm_border_mul2:
|
||||
.string "blm_border_mul2="
|
||||
str_blm_border_max:
|
||||
.string "blm_border_max="
|
||||
str_blm_tex_mul:
|
||||
.string "blm_tex_mul="
|
||||
str_blm_blurscale1:
|
||||
.string "blm_blurscale1="
|
||||
str_blm_blurscale2:
|
||||
.string "blm_blurscale2="
|
||||
str_blm_blurscale3:
|
||||
.string "blm_blurscale3="
|
||||
str_blm_blurRange1:
|
||||
.string "blm_blurRange1="
|
||||
str_blm_blurRange2:
|
||||
.string "blm_blurRange2="
|
||||
str_blm_blurRange3:
|
||||
.string "blm_blurRange3="
|
||||
str_blm_scale1:
|
||||
.string "blm_scale1="
|
||||
str_blm_scale2:
|
||||
.string "blm_scale2="
|
||||
str_blm_scale3:
|
||||
.string "blm_scale3="
|
||||
|
||||
str_lens_max:
|
||||
.string "lens_max="
|
||||
str_lens_rot:
|
||||
.string "lens_rot="
|
||||
str_lens_sub:
|
||||
.string "lens_sub="
|
||||
str_lens_mul:
|
||||
.string "lens_mul="
|
||||
str_lens_weight:
|
||||
.string "lens_weight="
|
||||
str_lens_decay:
|
||||
.string "lens_decay="
|
||||
str_lens_str:
|
||||
.string "lens_str="
|
||||
str_lens_paMax:
|
||||
.string "lens_paMax="
|
||||
str_lens_UVDecay:
|
||||
.string "lens_UVDecay="
|
||||
|
||||
str_AA_Sharpness:
|
||||
.string "AA_Sharpness="
|
||||
str_AA_Range:
|
||||
.string "AA_Range="
|
||||
str_AA_Threshold:
|
||||
.string "AA_Threshold="
|
||||
str_AA_ThresholdMin:
|
||||
.string "AA_ThresholdMin="
|
||||
|
||||
str_red_sclX:
|
||||
.string "red_sclX="
|
||||
str_red_sclY:
|
||||
.string "red_sclY="
|
||||
|
||||
str_red_Auto:
|
||||
.string "red_Auto="
|
||||
str_red_AtMaxX:
|
||||
.string "red_AtMaxX="
|
||||
str_red_AtMaxY:
|
||||
.string "red_AtMaxY="
|
||||
str_red_AtMinX:
|
||||
.string "red_AtMinX="
|
||||
str_red_AtMinY:
|
||||
.string "red_AtMinY="
|
||||
str_red_AtRate:
|
||||
.string "red_AtRate="
|
||||
|
||||
str_ao_Lengs:
|
||||
.string "ao_Lengs="
|
||||
str_ao_LengsRatio:
|
||||
.string "ao_LengsRatio="
|
||||
str_ao_range:
|
||||
.string "ao_range="
|
||||
str_ao_rangeRatio:
|
||||
.string "ao_rangeRatio="
|
||||
str_ao_sub:
|
||||
.string "ao_sub="
|
||||
str_ao_subRatio:
|
||||
.string "ao_subRatio="
|
||||
str_ao_Mul:
|
||||
.string "ao_Mul="
|
||||
str_ao_blurRange:
|
||||
.string "ao_blurRange="
|
||||
str_ao_blurScale:
|
||||
.string "ao_blurScale="
|
||||
|
||||
str_blur:
|
||||
.string "blur="
|
||||
str_blurStr:
|
||||
.string "blurStr="
|
||||
str_blurSub:
|
||||
.string "blurSub="
|
||||
|
||||
str_shadowStr:
|
||||
.string "shadowStr="
|
||||
str_shadowHalf:
|
||||
.string "shadowHalf="
|
||||
|
||||
str_simShwStr:
|
||||
.string "simShwStr="
|
||||
str_simShwIn:
|
||||
.string "simShwIn="
|
||||
str_simShwMin:
|
||||
.string "simShwMin="
|
||||
|
||||
str_sRGBMode:
|
||||
.string "sRGBMode="
|
||||
str_gamma:
|
||||
.string "gamma="
|
||||
|
||||
str_ao_av_CenterWeight:
|
||||
.string "ao_av_CenterWeight="
|
||||
str_ao_av_MaxDistance:
|
||||
.string "ao_av_MaxDistance="
|
||||
str_ao_av_MaxRadius:
|
||||
.string "ao_av_MaxRadius="
|
||||
str_ao_av_FadeOutStart:
|
||||
.string "ao_av_FadeOutStart="
|
||||
str_ao_av_FadeOutDistance:
|
||||
.string "ao_av_FadeOutDistance="
|
||||
str_ao_av_BlurFallOff:
|
||||
.string "ao_av_BlurFallOff="
|
||||
str_ao_av_BlurScale:
|
||||
.string "ao_av_BlurScale="
|
||||
str_ao_av_Shwstr:
|
||||
.string "ao_av_Shwstr="
|
||||
|
||||
str_cam_near:
|
||||
.string "cam_near="
|
||||
str_cam_far:
|
||||
.string "cam_far="
|
||||
|
||||
str_avmp01:
|
||||
.string "avmp01 = "
|
||||
str_avmp02:
|
||||
.string "avmp02 = "
|
||||
str_avmp03:
|
||||
.string "avmp03 = "
|
||||
str_avmp04:
|
||||
.string "avmp04 = "
|
||||
str_avmp05:
|
||||
.string "avmp05 = "
|
||||
str_avmp06:
|
||||
.string "avmp06 = "
|
||||
str_avmp07:
|
||||
.string "avmp07 = "
|
||||
str_avmp08:
|
||||
.string "avmp08 = "
|
||||
str_avmp09:
|
||||
.string "avmp09 = "
|
||||
str_avmp10:
|
||||
.string "avmp10 = "
|
||||
str_avmp11:
|
||||
.string "avmp11 = "
|
||||
str_avmp12:
|
||||
.string "avmp12 = "
|
||||
str_avmp13:
|
||||
.string "avmp13 = "
|
||||
str_avmp14:
|
||||
.string "avmp14 = "
|
||||
str_avmp15:
|
||||
.string "avmp15 = "
|
||||
str_avmp16:
|
||||
.string "avmp16 = "
|
||||
|
||||
str_cloud_h_min:
|
||||
.string "cloud_h_min="
|
||||
str_cloud_h_max:
|
||||
.string "cloud_h_max="
|
||||
|
||||
;array of pointers to the list of strings above
|
||||
;will be used to print the associated strings into memory
|
||||
lookuptable_settingname_INImod:
|
||||
.uint str_tonemap, str_ssao, str_bloom, str_godray, str_AntiAliasing, str_ColReduction, str_dof, str_lensFlare, str_lut, str_luttex1, str_cube, str_tonemax, str_tonemin, str_tonemul, str_toneLastmul, str_toneBlmmax, str_toneBlmmin, str_toneBlmmul, str_toneBlmLastmul, str_godray_inival, str_godray_decay, str_godray_scale, str_blm_border_sub, str_blm_border_mul, str_blm_border_sub2, str_blm_border_mul2, str_blm_border_max, str_blm_tex_mul, str_blm_blurscale1, str_blm_blurscale2, str_blm_blurscale3, str_blm_blurRange1, str_blm_blurRange2, str_blm_blurRange3, str_blm_scale1, str_blm_scale2, str_blm_scale3, str_lens_max, str_lens_rot, str_lens_sub, str_lens_mul, str_lens_weight, str_lens_decay, str_lens_str, str_lens_paMax, str_lens_UVDecay, str_AA_Sharpness, str_AA_Range, str_AA_Threshold, str_AA_ThresholdMin, str_red_sclX, str_red_sclY, str_red_Auto, str_red_AtMaxX, str_red_AtMaxY, str_red_AtMinX, str_red_AtMinY, str_red_AtRate, str_ao_Lengs, str_ao_LengsRatio, str_ao_range, str_ao_rangeRatio, str_ao_sub, str_ao_subRatio, str_ao_Mul, str_ao_blurRange, str_ao_blurScale, str_blur, str_blurStr, str_blurSub, str_shadowStr, str_shadowHalf, str_simShwStr, str_simShwIn, str_simShwMin, str_sRGBMode, str_gamma, str_ao_av_CenterWeight, str_ao_av_MaxDistance, str_ao_av_MaxRadius, str_ao_av_FadeOutStart, str_ao_av_FadeOutDistance, str_ao_av_BlurFallOff, str_ao_av_BlurScale, str_ao_av_Shwstr, str_cam_near, str_cam_far, str_avmp01, str_avmp02, str_avmp03, str_avmp04, str_avmp05, str_avmp06, str_avmp07, str_avmp08, str_avmp09, str_avmp10, str_avmp11, str_avmp12, str_avmp13, str_avmp14, str_avmp15, str_avmp16, str_cloud_h_min, str_cloud_h_max
|
||||
|
||||
;array of short strings that either contain "on" or "off"
|
||||
;will be used to print the associated setting
|
||||
lookuptable_onoff_INImod:
|
||||
.uint $tonemap, $ssao, $bloom, $godray, $AntiAliasing, $ColReduction, $dof, $lensFlare, $lut, $red_Auto, $blur, $shadowHalf, $sRGBMode
|
||||
|
||||
;array of string pointers used to print the luttex1 and cube setting values
|
||||
lookuptable_stringvalue_INImod:
|
||||
.uint value_luttex1, value_cube
|
||||
|
||||
;array of floats used to print the float for the associated string
|
||||
lookuptable_float_INImod:
|
||||
.float $tonemax, $tonemin, $tonemul, $toneLastmul, $toneBlmmax, $toneBlmmin, $toneBlmmul, $toneBlmLastmul, $godray_inival, $godray_decay, $godray_scale, $blm_border_sub, $blm_border_mul, $blm_border_sub2, $blm_border_mul2, $blm_border_max, $blm_tex_mul, $blm_blurscale1, $blm_blurscale2, $blm_blurscale3, $blm_blurRange1, $blm_blurRange2, $blm_blurRange3, $blm_scale1, $blm_scale2, $blm_scale3, $lens_max, $lens_rot, $lens_sub, $lens_mul, $lens_weight, $lens_decay, $lens_str, $lens_paMax, $lens_UVDecay, $AA_Sharpness, $AA_Range, $AA_Threshold, $AA_ThresholdMin, $red_sclX, $red_sclY, $red_AtMaxX, $red_AtMaxY, $red_AtMinX, $red_AtMinY, $red_AtRate, $ao_Lengs, $ao_LengsRatio, $ao_range, $ao_rangeRatio, $ao_sub, $ao_subRatio, $ao_Mul, $ao_blurRange, $ao_blurScale, $blurStr, $blurSub, $shadowStr, $simShwStr, $simShwIn, $simShwMin, $gamma, $ao_av_CenterWeight, $ao_av_MaxDistance, $ao_av_MaxRadius, $ao_av_FadeOutStart, $ao_av_FadeOutDistance, $ao_av_BlurFallOff, $ao_av_BlurScale, $ao_av_Shwstr, $cam_near, $cam_far, $avmp0101, $avmp0102, $avmp0103, $avmp0201, $avmp0202, $avmp0203, $avmp0301, $avmp0302, $avmp0303, $avmp0401, $avmp0402, $avmp0403, $avmp0501, $avmp0502, $avmp0503, $avmp0601, $avmp0602, $avmp0603, $avmp0701, $avmp0702, $avmp0703, $avmp0801, $avmp0802, $avmp0803, $avmp0901, $avmp0902, $avmp0903, $avmp1001, $avmp1002, $avmp1003, $avmp1101, $avmp1102, $avmp1103, $avmp1201, $avmp1202, $avmp1203, $avmp1301, $avmp1302, $avmp1303, $avmp1401, $avmp1402, $avmp1403, $avmp1501, $avmp1502, $avmp1503, $avmp1601, $avmp1602, $avmp1603, $cloud_h_min, $cloud_h_max
|
||||
|
||||
;array of intigers used to set the number of decimal places printed for the associated float
|
||||
lookuptable_float_precision_INImod:
|
||||
.byte $tonemax_DecimalPlaces, $tonemin_DecimalPlaces, $tonemul_DecimalPlaces, $toneLastmul_DecimalPlaces, $toneBlmmax_DecimalPlaces, $toneBlmmin_DecimalPlaces, $toneBlmmul_DecimalPlaces, $toneBlmLastmul_DecimalPlaces, $godray_inival_DecimalPlaces, $godray_decay_DecimalPlaces, $godray_scale_DecimalPlaces, $blm_border_sub_DecimalPlaces, $blm_border_mul_DecimalPlaces, $blm_border_sub2_DecimalPlaces, $blm_border_mul2_DecimalPlaces, $blm_border_max_DecimalPlaces, $blm_tex_mul_DecimalPlaces, $blm_blurscale1_DecimalPlaces, $blm_blurscale2_DecimalPlaces, $blm_blurscale3_DecimalPlaces, $blm_blurRange1_DecimalPlaces, $blm_blurRange2_DecimalPlaces, $blm_blurRange3_DecimalPlaces, $blm_scale1_DecimalPlaces, $blm_scale2_DecimalPlaces, $blm_scale3_DecimalPlaces, $lens_max_DecimalPlaces, $lens_rot_DecimalPlaces, $lens_sub_DecimalPlaces, $lens_mul_DecimalPlaces, $lens_weight_DecimalPlaces, $lens_decay_DecimalPlaces, $lens_str_DecimalPlaces, $lens_paMax_DecimalPlaces, $lens_UVDecay_DecimalPlaces, $AA_Sharpness_DecimalPlaces, $AA_Range_DecimalPlaces, $AA_Threshold_DecimalPlaces, $AA_ThresholdMin_DecimalPlaces, $red_sclX_DecimalPlaces, $red_sclY_DecimalPlaces, $red_AtMaxX_DecimalPlaces, $red_AtMaxY_DecimalPlaces, $red_AtMinX_DecimalPlaces, $red_AtMinY_DecimalPlaces, $red_AtRate_DecimalPlaces, $ao_Lengs_DecimalPlaces, $ao_LengsRatio_DecimalPlaces, $ao_range_DecimalPlaces, $ao_rangeRatio_DecimalPlaces, $ao_sub_DecimalPlaces, $ao_subRatio_DecimalPlaces, $ao_Mul_DecimalPlaces, $ao_blurRange_DecimalPlaces, $ao_blurScale_DecimalPlaces, $blurStr_DecimalPlaces, $blurSub_DecimalPlaces, $shadowStr_DecimalPlaces, $simShwStr_DecimalPlaces, $simShwIn_DecimalPlaces, $simShwMin_DecimalPlaces, $gamma_DecimalPlaces, $ao_av_CenterWeight_DecimalPlaces, $ao_av_MaxDistance_DecimalPlaces, $ao_av_MaxRadius_DecimalPlaces, $ao_av_FadeOutStart_DecimalPlaces, $ao_av_FadeOutDistance_DecimalPlaces, $ao_av_BlurFallOff_DecimalPlaces, $ao_av_BlurScale_DecimalPlaces, $ao_av_Shwstr_DecimalPlaces, $cam_near_DecimalPlaces, $cam_far_DecimalPlaces, $avmp01_DecimalPlaces, $avmp02_DecimalPlaces, $avmp03_DecimalPlaces, $avmp04_DecimalPlaces, $avmp05_DecimalPlaces, $avmp06_DecimalPlaces, $avmp07_DecimalPlaces, $avmp08_DecimalPlaces, $avmp09_DecimalPlaces, $avmp10_DecimalPlaces, $avmp11_DecimalPlaces, $avmp12_DecimalPlaces, $avmp13_DecimalPlaces, $avmp14_DecimalPlaces, $avmp15_DecimalPlaces, $avmp16_DecimalPlaces, $cloud_h_min_DecimalPlaces, $cloud_h_max_DecimalPlaces
|
||||
|
||||
;format string that the C function sprintf() needs
|
||||
;the * will be replaced with a number that sets the number of decimal places
|
||||
str_floating_precision_INImod:
|
||||
.string "%.*f"
|
151
src/XenobladeChroniclesX/Mods/GraphicsLibINI/readme.md
Normal file
151
src/XenobladeChroniclesX/Mods/GraphicsLibINI/readme.md
Normal file
@ -0,0 +1,151 @@
|
||||
------
|
||||
### XCX lib.ini MOD
|
||||
------
|
||||
### What is this for?
|
||||
This mod finds the ram copy of the lib.ini file thats located in monolib.cpk. It then will edit any and all options that the user wishes to edit. The mod is ran after the lib.ini is loaded into memory but before the game reads it.
|
||||
|
||||
The lib.ini file contains various settings mostly related to graphical settings such as AntiAliasing and the current RGB mode.
|
||||
|
||||
The lib.ini file is read once at boot and never again so you will need to restart the game to see changes.
|
||||
|
||||
Some proven to work settings are Bloom, AntiAliasing, sRGBMode, cloud_h_max, cloud_h_min, etc.
|
||||
|
||||
Some settings however are proven to not work.
|
||||
|
||||
Below is what an unmodified lib.ini file looks like:
|
||||
|
||||
------
|
||||
|
||||
```
|
||||
tonemap=on
|
||||
ssao=on
|
||||
bloom=on
|
||||
godray=on
|
||||
AntiAliasing=on
|
||||
ColReduction=off
|
||||
dof=off
|
||||
lensFlare=on
|
||||
|
||||
lut=on
|
||||
luttex1=lutba
|
||||
|
||||
cube=cube
|
||||
|
||||
tonemax=2.5
|
||||
tonemin=1.0
|
||||
tonemul=1.0
|
||||
toneLastmul=1.00
|
||||
toneBlmmax=1.3
|
||||
toneBlmmin=1.0
|
||||
toneBlmmul=1.0
|
||||
toneBlmLastmul=0.8
|
||||
|
||||
godray_inival=0.95
|
||||
godray_decay=0.99
|
||||
godray_scale=1.235
|
||||
|
||||
blm_border_sub=0.20
|
||||
blm_border_mul=0.45
|
||||
blm_border_sub2=3.0
|
||||
blm_border_mul2=1.5
|
||||
blm_border_max=3.5
|
||||
blm_tex_mul=3.0
|
||||
blm_blurscale1=1.0
|
||||
blm_blurscale2=0.7
|
||||
blm_blurscale3=1.5
|
||||
blm_blurRange1=0.9
|
||||
blm_blurRange2=0.8
|
||||
blm_blurRange3=0.8
|
||||
blm_scale1=0.2
|
||||
blm_scale2=0.1
|
||||
blm_scale3=0.1
|
||||
|
||||
lens_max=1
|
||||
lens_rot=0
|
||||
lens_sub=1.5
|
||||
lens_mul=3.5
|
||||
lens_weight=0.1
|
||||
lens_decay=1.0
|
||||
lens_str=1.5
|
||||
lens_paMax=4.0
|
||||
lens_UVDecay=0.290
|
||||
|
||||
AA_Sharpness=8.0
|
||||
AA_Range=0.5
|
||||
AA_Threshold=0.17
|
||||
AA_ThresholdMin=0.05
|
||||
|
||||
red_sclX=0.96
|
||||
red_sclY=1.0
|
||||
|
||||
red_Auto=on
|
||||
red_AtMaxX=0.96
|
||||
red_AtMaxY=1.0
|
||||
red_AtMinX=0.6
|
||||
red_AtMinY=0.86
|
||||
red_AtRate=100.0
|
||||
|
||||
ao_Lengs=0.1
|
||||
ao_LengsRatio=1.98
|
||||
ao_range=5.7
|
||||
ao_rangeRatio=1.000
|
||||
ao_sub=0.02
|
||||
ao_subRatio=0.150
|
||||
ao_Mul=2.0
|
||||
ao_blurRange=0.720
|
||||
ao_blurScale=0.75
|
||||
|
||||
|
||||
blur=off
|
||||
blurStr=0.2
|
||||
blurSub=0.05
|
||||
|
||||
shadowStr=1.0
|
||||
shadowHalf=off
|
||||
|
||||
simShwStr=1.6
|
||||
simShwIn=0.7
|
||||
simShwMin=0.15
|
||||
|
||||
sRGBMode=on
|
||||
gamma=6
|
||||
|
||||
ao_av_CenterWeight=1.090
|
||||
ao_av_MaxDistance=0.15
|
||||
ao_av_MaxRadius=0.2
|
||||
ao_av_FadeOutStart=70000.0
|
||||
ao_av_FadeOutDistance=10000.0
|
||||
ao_av_BlurFallOff=0.050
|
||||
ao_av_BlurScale=1.6
|
||||
ao_av_Shwstr=0.5
|
||||
|
||||
cam_near=0.1
|
||||
cam_far=80000.0
|
||||
|
||||
|
||||
avmp01 = 0.5 , 0.5 , 0.5
|
||||
avmp02 = 0.5 , 0.5 , 0.5
|
||||
avmp03 = 0.5 , 0.5 , 0.5
|
||||
avmp04 = 0.5 , 0.5 , 0.5
|
||||
avmp05 = 0.5 , 0.5 , 0.5
|
||||
avmp06 = 0.5 , 0.5 , 0.5
|
||||
avmp07 = 0.5 , 0.5 , 0.5
|
||||
avmp08 = 0.5 , 0.5 , 0.5
|
||||
avmp09 = 0.5 , 0.5 , 0.5
|
||||
avmp10 = 0.5 , 0.5 , 0.5
|
||||
avmp11 = 0.5 , 0.5 , 0.5
|
||||
avmp12 = 0.5 , 0.5 , 0.5
|
||||
avmp13 = 0.5 , 0.5 , 0.5
|
||||
avmp14 = 0.5 , 0.5 , 0.5
|
||||
avmp15 = 0.5 , 0.5 , 0.5
|
||||
avmp16 = 0.5 , 0.5 , 0.5
|
||||
|
||||
cloud_h_min=1000.0
|
||||
cloud_h_max=1100.0
|
||||
|
||||
|
||||
```
|
||||
|
||||
------
|
||||
|
||||
#Have fun playing with all the settings!
|
2559
src/XenobladeChroniclesX/Mods/GraphicsLibINI/rules.txt
Normal file
2559
src/XenobladeChroniclesX/Mods/GraphicsLibINI/rules.txt
Normal file
File diff suppressed because it is too large
Load Diff
@ -3,4 +3,5 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "No Fading When Close-up"
|
||||
path = "Xenoblade Chronicles X/Mods/Graphics/No Fading When Close-up"
|
||||
description = Makes it so that character and skell models don't fade out when the camera gets too close.
|
||||
#Credits: blingbloing
|
||||
version = 6
|
||||
|
@ -3,4 +3,5 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Remove Overdrive Blur"
|
||||
path = "Xenoblade Chronicles X/Mods/Graphics/Remove Overdrive Blur"
|
||||
description = Removes the blur that happens around the screen when you are in Overdrive.
|
||||
#Credits: blingbloing
|
||||
version = 6
|
||||
|
@ -3,5 +3,6 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = Hide Offline Label
|
||||
path = "Xenoblade Chronicles X/Mods/Hide Offline Label"
|
||||
description = Removes offline blinking tag. Does not change the actual online state.
|
||||
#Credits: getdls
|
||||
version = 6
|
||||
default = 1
|
||||
|
@ -3,5 +3,6 @@ titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Change time from eManual"
|
||||
path = "Xenoblade Chronicles X/Mods/HUD/Change time from eManual"
|
||||
description = Allow to change time from the eManual entry of the main menu.|Fixes the soft lock that happens when selecting eManual on Cemu.
|
||||
#Credits: lasyan3
|
||||
version = 6
|
||||
default = 1
|
||||
|
@ -0,0 +1,32 @@
|
||||
[XCX_RemoveBattleUI_Arts_v101E]
|
||||
moduleMatches = 0xF882D5CF, 0x218F6E07 ; 1.0.1E, 1.0.0E
|
||||
;remove arts pallet
|
||||
0x02a8ace4 = nop ;draw__Q2_4menu15MenuArtsPaletteFv
|
||||
;fixes camera bug when skip traveling
|
||||
0x02769448 = blr ;move__Q2_2ev12CCamPlayableFf
|
||||
;???
|
||||
;0x02c6b248 = nop ;close arts pallet
|
||||
|
||||
[XCX_RemoveBattleUI_Arts_v102U]
|
||||
moduleMatches = 0x30B6E091 ; 1.0.2U
|
||||
0x02a8acd4 = nop ;draw__Q2_4menu15MenuArtsPaletteFv
|
||||
0x02769448 = blr ;move__Q2_2ev12CCamPlayableFf
|
||||
;0x02c6b1e8 = nop ;close arts pallet
|
||||
|
||||
[XCX_RemoveBattleUI_Arts_v102J]
|
||||
moduleMatches = 0x7672271D ; 1.0.2J
|
||||
0x02a8724c = nop ;draw__Q2_4menu15MenuArtsPaletteFv
|
||||
0x02767bc0 = blr ;move__Q2_2ev12CCamPlayableFf
|
||||
;0x02c6675c = nop ;close arts pallet
|
||||
|
||||
[XCX_RemoveBattleUI_Arts_v100U]
|
||||
moduleMatches = 0xAB97DE6B, 0x676EB33E ; 1.0.1U, 1.0.0U
|
||||
0x02a8ac58 = nop ;draw__Q2_4menu15MenuArtsPaletteFv
|
||||
0x027693e8 = blr ;move__Q2_2ev12CCamPlayableFf
|
||||
;0x02c6b070 = nop ;close arts pallet
|
||||
|
||||
[XCX_RemoveBattleUI_Arts_v100J]
|
||||
moduleMatches = 0x785CA8A9 ; 1.0.0J
|
||||
0x02a855a0 = nop ;draw__Q2_4menu15MenuArtsPaletteFv
|
||||
0x02766c50 = blr ;move__Q2_2ev12CCamPlayableFf
|
||||
;0x02c62c48 = nop ;close arts pallet
|
@ -0,0 +1,7 @@
|
||||
[Definition]
|
||||
titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
|
||||
name = "Remove Battle UI Arts"
|
||||
path = "Xenoblade Chronicles X/Mods/HUD/Remove Battle UI/Remove Arts pallet UI"
|
||||
description = Removes arts from the mid battle UI.|Breaks camera during cutscenes.
|
||||
#Credits: Blingblong
|
||||
version = 6
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user