Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
7745462
feat(endfield): switch to neutwo tonemapping by default
spiwar Jan 27, 2026
a249519
feat(endfield): disable cloning, fix hair shadows, fix reshade bypass
SGTForgery Jan 28, 2026
0c0dc3e
feat(endfield): re-tuned SDR and HDR hue correction values
spiwar Jan 28, 2026
04c568b
feat(endfield): adjust white clip for sdr & hdr
spiwar Jan 28, 2026
5341dfa
fix(endfield): re-enable swapchain encoding option, only upgrade RGBA…
spiwar Jan 29, 2026
9237ed8
feat(endfield): Added alt fog blend mode with hue preservation, Impro…
SGTForgery Jan 29, 2026
a54ecbf
feat(endfield) Added deferred shader support for alt fog / bypass for…
SGTForgery Feb 1, 2026
dda5a20
feat(endfield) Added more deferred shaders, added missing UI shader f…
SGTForgery Feb 1, 2026
06e1bbc
fix(endfield): change default white clip to 65.f
spiwar Feb 2, 2026
d9d2fd4
feat(endfield): Added cubemap luminance, glass transparency, AO toggl…
SGTForgery Feb 4, 2026
2142823
feat(endfield): Added second glass transparency shader
SGTForgery Feb 4, 2026
969110b
chore(endfield): Added glass shader backup ASM
SGTForgery Feb 4, 2026
c7e6483
fix(endfield) Using .asm to stop glass shader freezing
SGTForgery Feb 4, 2026
bb85f62
fix(endfield) Using .asm to stop glass shader freezing
SGTForgery Feb 4, 2026
7c23692
feat(endfield) Added Improved GTAO with Vis Bitmask, AO modulation to…
SGTForgery Feb 13, 2026
698c04d
feat(endfield): switch to mcleod boynton hue, remove hue sliders
spiwar Feb 15, 2026
b12371e
feat(endfield): Added AO distance scaling, Removed legacy code + cbuf…
SGTForgery Feb 18, 2026
6ffee37
fix(endfield): Move color grading functions before tonemapping
spiwar Feb 22, 2026
57edfd6
fix(endfield): update stable build for 1.2.4
ItsTheSewerRat May 12, 2026
03d2a2e
fix(endfield): mix mb functions used in common.hlsl
spiwar May 14, 2026
b6b9137
fix(endfield): run sdr code if vanilla, fix imgui compilation issues
spiwar May 14, 2026
4344d12
fix(endfield): fix up vanilla/sdr mode
spiwar May 16, 2026
d5ccda5
fix(endfield): retuned hue correction, change defaults
spiwar May 17, 2026
380bd49
fix(endfield): update shaders for 1.3.3
ItsTheSewerRat Jun 7, 2026
856e1b4
fix(endfield): correct SDR swapchain output
ItsTheSewerRat Jun 14, 2026
dfd6869
fix(endfield): hide latency bar draw directly
ItsTheSewerRat Jun 26, 2026
94072eb
feat(endfield): split latency text visibility toggle
ItsTheSewerRat Jun 26, 2026
bcda2fa
fix(endfield): match latency bar by vertex shader
ItsTheSewerRat Jun 26, 2026
4915c91
fix(endfield): refine latency bar hiding
ItsTheSewerRat Jun 27, 2026
1d11f4d
fix(endfield): stop vignette flicker
ItsTheSewerRat Jul 14, 2026
c84c4d5
fix(endfield): update post-processing shaders
ItsTheSewerRat Jul 17, 2026
16c85be
fix(endfield): update rendering shaders
ItsTheSewerRat Jul 17, 2026
1b06004
fix(endfield): update deferred and material shaders
ItsTheSewerRat Jul 17, 2026
a574633
fix(endfield): port improved GTAO
ItsTheSewerRat Jul 17, 2026
fb4756a
fix(endfield): update UI shaders
ItsTheSewerRat Jul 17, 2026
bf4b472
fix(endfield): update addon integration for 1.4.4
ItsTheSewerRat Jul 17, 2026
f91866d
feat(endfield): add experimental VFX Boost
ItsTheSewerRat Jul 17, 2026
b2baec5
fix(endfield): scope VFX Boost to orb textures
ItsTheSewerRat Jul 18, 2026
4d87bc5
fix(endfield): performance optimizations for VFX Boost texture matching
ItsTheSewerRat Jul 19, 2026
d000a4e
fix(endfield): add two missing UI shader hashes
ItsTheSewerRat Jul 19, 2026
2846082
fix(endfield): improve VFX Boost performance and UI visibility
ItsTheSewerRat Jul 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,106 changes: 1,011 additions & 95 deletions src/games/endfield/addon.cpp

Large diffs are not rendered by default.

Binary file added src/games/endfield/ao/0xB4CAAAA7.cso
Binary file not shown.
449 changes: 449 additions & 0 deletions src/games/endfield/ao/gtao-main_0x43A0000B.cs_5_0.hlsl

Large diffs are not rendered by default.

43 changes: 43 additions & 0 deletions src/games/endfield/ao/gtao-spatial-avg_0xA683B186.cs_5_0.hlsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// ---- Created with 3Dmigoto v1.4.1 on Tue Feb 10 15:11:49 2026
Texture2D<float4> t0 : register(t0);

SamplerState s0_s : register(s0);

cbuffer cb0 : register(b0)
{
float4 cb0[1];
}


#include "../shared.h"

#define cmp -

RWTexture2D<unorm float4> u0 : register(u0);

[numthreads(8, 8, 1)]
void main(uint3 vThreadID : SV_DispatchThreadID)
{
float4 r0,r1;
r0.xy = (uint2)vThreadID.xy;
r0.xy = float2(0.5,0.5) + r0.xy;
r0.zw = r0.xy * cb0[0].zw + -cb0[0].zw;
r0.z = t0.SampleLevel(s0_s, r0.zw, 0).x;
r1.xy = cb0[0].zw * r0.xy;
r0.xy = r0.xy * cb0[0].zw + cb0[0].zw;
r0.x = t0.SampleLevel(s0_s, r0.xy, 0).x;
r0.y = t0.SampleLevel(s0_s, r1.xy, 0).x;
r1.xyzw = cb0[0].zwzw * float4(1,-1,-1,1) + r1.xyxy;
r0.y = r0.y + r0.z;
r0.z = t0.SampleLevel(s0_s, r1.xy, 0).x;
r0.w = t0.SampleLevel(s0_s, r1.zw, 0).x;
r0.y = r0.y + r0.z;
r0.y = r0.y + r0.w;
r0.x = r0.y + r0.x;
r0.x = 0.200000003 * r0.x;
if (shader_injection.disable_game_ao >= 0.5f) {
r0.x = 1.0f;
}
u0[vThreadID.xy] = r0.xxxx;
return;
}
122 changes: 122 additions & 0 deletions src/games/endfield/ao/gtao-temporal_0xDD16F0F8.cs_5_0.hlsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
// ---- Created with 3Dmigoto v1.4.1 on Tue Feb 10 15:11:49 2026
Texture2D<float4> t3 : register(t3);

Texture2D<float4> t2 : register(t2);

Texture2D<float4> t1 : register(t1);

Texture2D<float4> t0 : register(t0);

SamplerState s0_s : register(s0);

cbuffer cb0 : register(b0)
{
float4 cb0[5];
}


#include "../shared.h"

#define cmp -

RWTexture2D<float4> u0 : register(u0);

[numthreads(8, 8, 1)]
void main(uint3 vThreadID : SV_DispatchThreadID)
{
float4 r0,r1,r2,r3,r4;
r0.xy = (uint2)vThreadID.xy;
r0.xy = float2(0.5,0.5) + r0.xy;
r0.zw = cb0[4].zw * r0.xy;
r1.xy = t2.SampleLevel(s0_s, r0.zw, 0).xy;
r1.zw = abs(r1.xy) * float2(2,2) + float2(-1,-1);
r1.zw = r1.zw * r1.zw;
r1.zw = r1.zw * r1.zw;
r1.xy = float2(-0.5,-0.5) + r1.xy;
r2.xy = cmp(float2(0,0) < r1.xy);
r1.xy = cmp(r1.xy < float2(0,0));
r1.xy = (int2)-r2.xy + (int2)r1.xy;
r1.xy = (int2)r1.xy;
r1.xy = r1.zw * r1.xy;
r1.zw = r0.xy * cb0[4].zw + -r1.xy;
if (IMPROVED_GTAO >= 0.5) {
// Manual bilinear interpolation for previous AO (reduces wobble/ghosting)
// Only interpolate AO (.x), keep depth (.y) point-sampled
float2 texelPos = r1.zw * cb0[4].xy - 0.5;
float2 f = frac(texelPos);
float2 base = (floor(texelPos) + 0.5) * cb0[4].zw;
float ao00 = t3.SampleLevel(s0_s, base, 0).x;
float ao10 = t3.SampleLevel(s0_s, base + float2(cb0[4].z, 0), 0).x;
float ao01 = t3.SampleLevel(s0_s, base + float2(0, cb0[4].w), 0).x;
float ao11 = t3.SampleLevel(s0_s, base + cb0[4].zw, 0).x;
r2.x = lerp(lerp(ao00, ao10, f.x), lerp(ao01, ao11, f.x), f.y);
r2.y = t3.SampleLevel(s0_s, r1.zw, 0).y; // depth: point-sampled
} else {
r2.xy = t3.SampleLevel(s0_s, r1.zw, 0).xy;
}
r2.z = t0.SampleLevel(s0_s, r0.zw, 0).x;
r2.z = 0.00999999978 * r2.z;
r3.y = min(1, r2.z);
r3.x = t1.SampleLevel(s0_s, r0.zw, 0).x;
r2.zw = cmp(r1.zw < float2(0,0));
r2.z = (int)r2.w | (int)r2.z;
r1.zw = cmp(float2(1,1) < r1.zw);
r1.z = (int)r1.w | (int)r1.z;
r1.z = (int)r1.z | (int)r2.z;
if (r1.z != 0) {
r3.z = 0;
} else {
r1.xy = cb0[4].xy * r1.xy;
r1.x = dot(r1.xy, r1.xy);
r1.x = sqrt(r1.x);
r1.x = cb0[2].z * -r1.x;
r1.x = 1.44269502 * r1.x;
r1.x = exp2(r1.x);
r1.x = 0.970000029 * r1.x;
r1.y = r3.y + -r2.y;
r1.y = -1442.69507 * abs(r1.y);
r1.y = exp2(r1.y);
r3.z = r1.x * r1.y;
}
r1.x = cmp(0.000000 == cb0[2].y);
if (r1.x == 0) {
r1.xy = r0.xy * cb0[4].zw + -cb0[4].zw;
r1.x = t1.SampleLevel(s0_s, r1.xy, 0).x;
r4.xyzw = cb0[4].zwzw * float4(0,-1,1,-1) + r0.zwzw;
r1.y = t1.SampleLevel(s0_s, r4.xy, 0).x;
r1.z = t1.SampleLevel(s0_s, r4.zw, 0).x;
r4.xyzw = cb0[4].zwzw * float4(-1,0,1,0) + r0.zwzw;
r1.w = t1.SampleLevel(s0_s, r4.xy, 0).x;
r2.y = t1.SampleLevel(s0_s, r4.zw, 0).x;
r4.xyzw = cb0[4].zwzw * float4(-1,1,0,1) + r0.zwzw;
r0.z = t1.SampleLevel(s0_s, r4.xy, 0).x;
r0.w = t1.SampleLevel(s0_s, r4.zw, 0).x;
r0.xy = r0.xy * cb0[4].zw + cb0[4].zw;
r0.x = t1.SampleLevel(s0_s, r0.xy, 0).x;
r0.y = min(r1.w, r3.x);
r2.z = min(r2.y, r0.w);
r0.y = min(r2.z, r0.y);
r0.y = min(r1.y, r0.y);
r2.z = min(r1.x, r1.z);
r2.w = min(r0.z, r0.x);
r2.z = min(r2.z, r2.w);
r0.y = min(r2.z, r0.y);
r1.w = max(r1.w, r3.x);
r0.w = max(r2.y, r0.w);
r0.w = max(r1.w, r0.w);
r1.x = max(r1.x, r1.z);
r0.x = max(r0.z, r0.x);
r0.xw = max(r1.xy, r0.xw);
r0.x = max(r0.w, r0.x);
r0.y = max(r2.x, r0.y);
r0.x = min(r0.y, r0.x);
r0.x = r0.x + -r3.x;
r3.x = r3.z * r0.x + r3.x;
}
if (shader_injection.disable_game_ao >= 0.5f) {
r3.x = 1.0f;
}
r3.w = 0;
u0[vThreadID.xy] = r3.xyzw;
return;
}
Binary file added src/games/endfield/bloom/0x2CF2F67B.cso
Binary file not shown.
Binary file added src/games/endfield/bloom/0x948BF835.cso
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ cbuffer cb1 : register(b1)

cbuffer cb0 : register(b0)
{
float4 cb0[110];
float4 cb0[28];
// cb0[82].zw = sample offset scale
// cb0[109].x = bloom intensity multiplier
}
Expand Down Expand Up @@ -61,7 +61,7 @@ void main(uint3 vThreadID : SV_DispatchThreadID)
while (true) {
r1.w = cmp((int)r0.w >= 13);
if (r1.w != 0) break;
r2.xy = icb[r0.w+0].xy * cb0[82].zw;
r2.xy = icb[r0.w+0].xy * cb0[0].zw;
r2.xy = r0.xy * cb1[0].zw + r2.xy;
r2.xyz = t0.SampleLevel(s0_s, r2.xy, 0).xyz;
r1.w = max(r2.x, r2.y);
Expand All @@ -76,7 +76,7 @@ void main(uint3 vThreadID : SV_DispatchThreadID)
r1.w = r2.w / r1.w;
r2.xyz = r2.xyz * r1.www;

r2.xyz = cb0[109].xxx * r2.xyz * (BLOOM_STRENGTH / 50.0f);
r2.xyz = cb0[27].xxx * r2.xyz * (BLOOM_STRENGTH / 50.0f);

r1.w = dot(r2.xyz, float3(0.212672904,0.715152204,0.0721750036));
r1.w = 1 + r1.w;
Expand All @@ -99,4 +99,4 @@ void main(uint3 vThreadID : SV_DispatchThreadID)
r0.xyzw = r1.xyzw * r0.xxxx;
u0[vThreadID.xy] = r0.xyzw;
return;
}
}
Loading
Loading