Rustler prop fix

Unwoking attempt to fix shader fighting issues
Dirt now works properly with ImVehFt
This commit is contained in:
Silent 2014-06-19 00:57:22 +02:00
parent e076a275b1
commit 99ca045bee
3 changed files with 50 additions and 28 deletions

View file

@ -1300,18 +1300,30 @@ void __declspec(naked) CacheCRC32()
void __declspec(naked) PlaneAtomicRendererSetup()
{
static const char aStaticProp[] = "static_prop";
static const char aMovingProp[] = "moving_prop";
_asm
{
mov eax, [esi+4]
push eax
call GetFrameNodeName
//push eax
mov [esp+8+8], eax
push 11
push offset aStaticProp
push eax
call strncmp
add esp, 10h
test eax, eax
jz PlaneAtomicRendererSetup_Alpha
push 11
push offset aMovingProp
push [esp+12+8]
call strncmp
add esp, 0Ch
test eax, eax
jnz PlaneAtomicRendererSetup_NoAlpha
PlaneAtomicRendererSetup_Alpha:
push 734370h
jmp PlaneAtomicRendererSetup_Return
@ -1723,6 +1735,12 @@ void SetShader(RxD3D9InstanceData* pInstData)
float fEnvVars[2] = { *(float*)0x8D12C0, RpMaterialGetColor(pInstData->material)->alpha * (1.0f/255.0f) };
RwRGBAReal* AmbientLight = RpLightGetColor(*(RpLight**)0xC886E8);
// Normalise the balance
if ( fEnvVars[0] < 0.0f )
fEnvVars[0] = 0.0f;
else if ( fEnvVars[0] > 1.0f )
fEnvVars[0] = 1.0f;
RwD3D9SetVertexShader(pNVCShader);
_rwD3D9VSSetActiveWorldMatrix(RwFrameGetLTM(RpAtomicGetFrame(pRenderedAtomic)));
@ -2168,8 +2186,17 @@ BOOL InjectDelayedPatches_10()
// ImVehFt conflicts
if ( GetModuleHandle("ImVehFt.asi") == nullptr )
{
// Lights
InjectHook(0x4C830C, LightMaterialsFix, PATCH_CALL);
// Flying components
InjectMethodVP(0x59F180, CObject::Render, PATCH_JUMP);
// Cars getting dirty
// Only 1.0 and Steam
InjectMethodVP(0x4C9648, CVehicleModelInfo::FindEditableMaterialList, PATCH_CALL);
Patch<DWORD>(0x4C964D, 0x0FEBCE8B);
Patch<DWORD>(0x5D5DC2, 32); // 1.0 ONLY
}
return FALSE;
@ -2259,12 +2286,6 @@ __forceinline void Patch_SA_10()
InjectHook(0x5D9B44, DarkVehiclesFix3, PATCH_JUMP);
InjectHook(0x5D9CB2, DarkVehiclesFix4, PATCH_JUMP);
// Cars getting dirty
// Only 1.0 and Steam
InjectMethodVP(0x4C9648, CVehicleModelInfo::FindEditableMaterialList, PATCH_CALL);
Patch<DWORD>(0x4C964D, 0x0FEBCE8B);
Patch<DWORD>(0x5D5DC2, 32); // 1.0 ONLY
// Bindable NUM5
// Only 1.0 and Steam
Nop(0x57DC55, 2);

View file

@ -25,7 +25,8 @@ VS_OUTPUT NVC_vertex_shader( in VS_INPUT In )
Out.Texture = In.Texture;
Out.Color.rgb = (In.DayColor.rgb * (1.0-fEnvVars[0]) + In.NightColor.rgb * fEnvVars[0]) + AmbientLight.rgb;
Out.Color.a = fEnvVars[1];
Out.Color.a = In.DayColor.a * fEnvVars[1];
//Out.Color.rgb = In.DayColor.rgb + AmbientLight.rgb;
Out.Color = saturate(Out.Color);
return Out;

View file

@ -32,14 +32,14 @@
dp4 oPos.y, v0, c1
dp4 oPos.z, v0, c2
dp4 oPos.w, v0, c3
mov r0.xy, c6
mov r0.x, c6.x
add r0.x, r0.x, -c4.x
mul r1.xyz, v2, c4.x
mad r0.xzw, v3.xyyz, r0.x, r1.xyyz
add r0.xzw, r0, c5.xyyz
max r1.xyz, r0.xzww, c6.y
max r1.w, r0.y, c4.y
min oD0, r1, c6.x
mul r0.yzw, v2.xxyz, c4.x
mad r0.xyz, v3, r0.x, r0.yzww
add r0.xyz, r0, c5
mul r0.w, v3.w, c4.y
max r0, r0, c6.y
min oD0, r0, c6.x
mov oT0.xy, v1
// approximately 13 instruction slots used
@ -112,26 +112,26 @@ const BYTE g_vs20_NVC_vertex_shader[] =
0, 0, 8, 192, 0, 0,
228, 144, 3, 0, 228, 160,
1, 0, 0, 2, 0, 0,
3, 128, 6, 0, 228, 160,
1, 128, 6, 0, 0, 160,
2, 0, 0, 3, 0, 0,
1, 128, 0, 0, 0, 128,
4, 0, 0, 161, 5, 0,
0, 3, 1, 0, 7, 128,
2, 0, 228, 144, 4, 0,
0, 3, 0, 0, 14, 128,
2, 0, 144, 144, 4, 0,
0, 160, 4, 0, 0, 4,
0, 0, 13, 128, 3, 0,
148, 144, 0, 0, 0, 128,
1, 0, 148, 128, 2, 0,
0, 3, 0, 0, 13, 128,
0, 0, 7, 128, 3, 0,
228, 144, 0, 0, 0, 128,
0, 0, 249, 128, 2, 0,
0, 3, 0, 0, 7, 128,
0, 0, 228, 128, 5, 0,
148, 160, 11, 0, 0, 3,
1, 0, 7, 128, 0, 0,
248, 128, 6, 0, 85, 160,
11, 0, 0, 3, 1, 0,
8, 128, 0, 0, 85, 128,
4, 0, 85, 160, 10, 0,
228, 160, 5, 0, 0, 3,
0, 0, 8, 128, 3, 0,
255, 144, 4, 0, 85, 160,
11, 0, 0, 3, 0, 0,
15, 128, 0, 0, 228, 128,
6, 0, 85, 160, 10, 0,
0, 3, 0, 0, 15, 208,
1, 0, 228, 128, 6, 0,
0, 0, 228, 128, 6, 0,
0, 160, 1, 0, 0, 2,
0, 0, 3, 224, 1, 0,
228, 144, 255, 255, 0, 0