Skip to content
Merged
1 change: 1 addition & 0 deletions include/xref/d3d8.def
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,7 @@ XREF_SYMBOL(D3DDevice_SetTextureStageStateNotInline)
XREF_SYMBOL(D3DDevice_SetTextureState_BorderColor)
XREF_SYMBOL(D3DDevice_SetTextureState_BumpEnv)
XREF_SYMBOL(D3DDevice_SetTextureState_ColorKeyColor)
XREF_SYMBOL(D3DDevice_SetTextureState_Deferred)
XREF_SYMBOL(D3DDevice_SetTextureState_TexCoordIndex)
XREF_SYMBOL(D3DDevice_SetTile)
XREF_SYMBOL(D3DDevice_SetTransform)
Expand Down
69 changes: 51 additions & 18 deletions src/OOVPADatabase/D3D8/3911.inl
Original file line number Diff line number Diff line change
Expand Up @@ -4239,15 +4239,23 @@ OOVPA_SIG_MATCH(
OOVPA_SIG_HEADER_NO_XREF(D3DDevice_SetTextureState_ColorKeyColor,
3911)
OOVPA_SIG_MATCH(
// push esi
OV_MATCH(0x00, 0x56),

{ 0x00, 0x56 },
{ 0x07, 0x56 },
{ 0x0D, 0x8B },
{ 0x13, 0x8D },
{ 0x1A, 0x8B },
{ 0x21, 0x83 },
{ 0x28, 0x07 },
{ 0x2F, 0x5E },
// mov e??, [esp + param_1]
OV_MATCH(0x0D, 0x8B),
OV_MATCH(0x0F, 0x24, 0x08),
// lea e??, [e?? * 0x04 + 0x40AE0] // 0x40AE0 is a reliable hardcoded value across all builds.
OV_MATCH(0x11, 0x8D),
OV_MATCH(0x14, 0xE0, 0x0A, 0x04, 0x00),

// mov e??, [esp + param_2]
OV_MATCH(0x1A, 0x8B),
OV_MATCH(0x1C, 0x24, 0x0C),

// This is an optional OV pair to tell the difference from the (symbol)_(LTCG variant) signature.
// retn 0x08
OV_MATCH(0x30, 0xC2, 0x08),
//
);

Expand Down Expand Up @@ -5174,17 +5182,16 @@ OOVPA_SIG_MATCH(
OOVPA_SIG_HEADER_NO_XREF(D3D_BlockOnResource,
3911)
OOVPA_SIG_MATCH(
// mov eax, [D3D_g_pDevice]
OV_MATCH(0x00, 0xA1),

{ 0x00, 0xA1 },
{ 0x34, 0x8B }, // mov edx, [ecx+0x1C]
{ 0x35, 0x51 },
{ 0x36, 0x1C },
{ 0x41, 0xC2 }, // retn 4
{ 0x42, 0x04 },
{ 0x43, 0x00 },
{ 0x7E, 0xC2 }, // retn 4
{ 0x7F, 0x04 },
{ 0x80, 0x00 },
// mov esi, [esp + param_1]
OV_MATCH(0x0A, 0x8B, 0x74, 0x24, 0x08),

// and eax, 0x70000
OV_MATCH(0x10, 0x25, 0x00, 0x00, 0x07, 0x00),
// cmp eax, 0x50000
OV_MATCH(0x15, 0x3D, 0x00, 0x00, 0x05, 0x00),
//
);

Expand Down Expand Up @@ -6028,3 +6035,29 @@ OOVPA_SIG_MATCH(
OV_MATCH(0x2C, 0x24),
//
);

// ******************************************************************
// * D3DDevice_SetTextureState_Deferred
// ******************************************************************
// Generic OOVPA as of 3911 and newer.
OOVPA_SIG_HEADER_XREF(D3DDevice_SetTextureState_Deferred,
3911,
XRefOne)
OOVPA_SIG_MATCH(
// mov [ecx * 0x04 + D3D_g_DeferredTextureState],edx
XREF_ENTRY(0x22, XREF_D3D_g_DeferredTextureState),

// mov eax, [edx * 0x04 + ????]
OV_MATCH(0x00, 0x8B, 0x04, 0x95),

// shl param_1, 0x05
OV_MATCH(0x0E, 0xC1, 0xE1, 0x05),

// add param_1, param_2
// mov edx, [esp + param_3]
OV_MATCH(0x13, 0x03, 0xCA, 0x8B, 0x54, 0x24, 0x08),

// mov [ecx * 0x04 + D3D_g_DeferredTextureState], edx
OV_MATCH(0x1F, 0x89, 0x14, 0x8D),
//
);
47 changes: 27 additions & 20 deletions src/OOVPADatabase/D3D8/4034.inl
Original file line number Diff line number Diff line change
Expand Up @@ -369,18 +369,27 @@ OOVPA_SIG_MATCH(
// ******************************************************************
// * D3DDevice_SetTextureState_ColorKeyColor
// ******************************************************************
// Generic OOVPA as of 4034 and newer.
OOVPA_SIG_HEADER_NO_XREF(D3DDevice_SetTextureState_ColorKeyColor,
4034)
OOVPA_SIG_MATCH(
// push esi
OV_MATCH(0x00, 0x56),

{ 0x00, 0x56 },
{ 0x07, 0x8B },
{ 0x0E, 0xE8 },
{ 0x16, 0x08 },
{ 0x1E, 0x89 },
{ 0x26, 0x04 },
{ 0x2E, 0x07 },
{ 0x36, 0xC2 },
// mov e??, [esp + param_1]
OV_MATCH(0x13, 0x8B),
OV_MATCH(0x15, 0x24, 0x08),
// lea e??, [e?? * 0x04 + 0x40AE0] // 0x40AE0 is a reliable hardcoded value across all builds.
OV_MATCH(0x17, 0x8D),
OV_MATCH(0x1A, 0xE0, 0x0A, 0x04, 0x00),

// mov e??, [esp + param_2]
OV_MATCH(0x20, 0x8B),
OV_MATCH(0x22, 0x24, 0x0C),

// This is an optional OV pair to tell the difference from the (symbol)_(LTCG variant) signature.
// retn 0x08
OV_MATCH(0x36, 0xC2, 0x08),
//
);

Expand Down Expand Up @@ -1288,22 +1297,20 @@ OOVPA_END;
// ******************************************************************
// * D3D::BlockOnResource
// ******************************************************************
// Generic OOVPA as of 4034 and newer
OOVPA_SIG_HEADER_NO_XREF(D3D_BlockOnResource,
4034)
OOVPA_SIG_MATCH(
// mov eax, [D3D_g_pDevice]
OV_MATCH(0x00, 0xA1),

{ 0x00, 0xA1 },
{ 0x05, 0x85 },
{ 0x18, 0x00 },
{ 0x19, 0x05 },
{ 0x1A, 0x00 },
{ 0x1B, 0x56 },
{ 0x1C, 0x75 },
{ 0x1D, 0x28 },
{ 0x1E, 0x8B },
{ 0x1F, 0x70 },
{ 0x40, 0x5E },
{ 0x4A, 0xE8 },
// mov eax, [esp + param_1]
OV_MATCH(0x09, 0x8B, 0x44, 0x24, 0x04),

// and ecx, 0x70000
OV_MATCH(0x0F, 0x81, 0xE1, 0x00, 0x00, 0x07, 0x00),
// cmp ecx, 0x50000
OV_MATCH(0x15, 0x81, 0xF9, 0x00, 0x00, 0x05, 0x00),
//
);

Expand Down
56 changes: 29 additions & 27 deletions src/OOVPADatabase/D3D8LTCG/3911.inl
Original file line number Diff line number Diff line change
Expand Up @@ -193,22 +193,27 @@ OOVPA_SIG_MATCH(
// ******************************************************************
// * D3DDevice_SetTextureState_ColorKeyColor
// ******************************************************************
//83C008C1E707890689 ...C3
OOVPA_SIG_HEADER_NO_XREF(D3DDevice_SetTextureState_ColorKeyColor_0__LTCG_esi1_ebx2,
2024)
OOVPA_SIG_HEADER_NO_XREF(D3DDevice_SetTextureState_ColorKeyColor_0__LTCG_eax1_ebx2,
3911)
OOVPA_SIG_MATCH(

{ 0x01, 0x8B },
// push esi
OV_MATCH(0x00, 0x56),

// mov edi, param_1
// mov eax, [e??]
OV_MATCH(0x0B, 0x8B, 0xF8, 0x8B),
// cmp eax, ecx
// jne +0x07
OV_MATCH(0x0F, 0x3B, 0xC1, 0x72, 0x07),

// lea e??, [e?? * 0x04 + 0x40AE0] // 0x40AE0 is a reliable hardcoded value across all builds.
OV_MATCH(0x1A, 0x8D),
OV_MATCH(0x1D, 0xE0, 0x0A, 0x04, 0x00),

{ 0x26, 0x83 },
{ 0x27, 0xC0 },
{ 0x28, 0x08 },
{ 0x29, 0xC1 },
{ 0x2A, 0xE7 },
{ 0x2B, 0x07 },
{ 0x2C, 0x89 },
{ 0x2D, 0x06 },
{ 0x2E, 0x89 },
// This is required OV pair to tell the difference from the (symbol)_4__LTCG_eax1 signature.
// ret
OV_MATCH(0x36, 0xC3),
//
);

Expand Down Expand Up @@ -1139,23 +1144,20 @@ OOVPA_SIG_MATCH(
// ******************************************************************
// * D3D_BlockOnResource
// ******************************************************************
//00007800750C85 ...C3
OOVPA_SIG_HEADER_NO_XREF(D3D_BlockOnResource_0__LTCG_eax1,
2024)
3911)
OOVPA_SIG_MATCH(
// mov edx, [D3D_g_pDevice]
OV_MATCH(0x00, 0x8B, 0x15),

{ 0x00, 0x8B },
{ 0x01, 0x15 },

{ 0x28, 0xF7 },
{ 0x29, 0xC1 },
{ 0x2A, 0x00 },
{ 0x2B, 0x00 },
{ 0x2C, 0x78 },
{ 0x2D, 0x00 },
{ 0x2E, 0x75 },
{ 0x2F, 0x0C },
{ 0x30, 0x85 },
// mov esi, param_1
OV_MATCH(0x09, 0x8B, 0xF0),

// test ecx, 0x780000
OV_MATCH(0x28, 0xF7, 0xC1, 0x00, 0x00, 0x78, 0x00),
// jnz +0x0C
// test e??, e??
OV_MATCH(0x2E, 0x75, 0x0C, 0x085),
//
);

Expand Down
70 changes: 49 additions & 21 deletions src/OOVPADatabase/D3D8LTCG/4039.inl
Original file line number Diff line number Diff line change
Expand Up @@ -399,19 +399,26 @@ OOVPA_SIG_MATCH(
// ******************************************************************
// * D3DDevice_SetTextureState_ColorKeyColor
// ******************************************************************
//E00A040089 ...C20400
OOVPA_SIG_HEADER_NO_XREF(D3DDevice_SetTextureState_ColorKeyColor_4__LTCG_eax1,
2048)
4039)
OOVPA_SIG_MATCH(
// push ebx
OV_MATCH(0x00, 0x53),

{ 0x00, 0x53 },
{ 0x01, 0x8B },
// mov esi, param_1
// mov eax, [e??]
OV_MATCH(0x10, 0x8B, 0xF0, 0x8B),
// cmp eax, ecx
// jne +0x0B
OV_MATCH(0x14, 0x3B, 0xC1, 0x72, 0x0B),

// lea e??, [e?? * 0x04 + 0x40AE0] // 0x40AE0 is a reliable hardcoded value across all builds.
OV_MATCH(0x23, 0x8D),
OV_MATCH(0x26, 0xE0, 0x0A, 0x04, 0x00),

{ 0x26, 0xE0 },
{ 0x27, 0x0A },
{ 0x28, 0x04 },
{ 0x29, 0x00 },
{ 0x2A, 0x89 },
// This is required OV pair to tell the difference from the (symbol)_4__LTCG_eax1_ebx2 signature.
// retn 0x04
OV_MATCH(0x40, 0xC2, 0x04),
//
);

Expand Down Expand Up @@ -824,21 +831,42 @@ OOVPA_SIG_MATCH(
// ******************************************************************
// * D3D_BlockOnResource
// ******************************************************************
//F7C20000780075 ...C3
// Generic OOVPA as of 4039 and newer
OOVPA_SIG_HEADER_NO_XREF(D3D_BlockOnResource_0__LTCG_ecx1,
4039)
OOVPA_SIG_MATCH(
// mov esi, [D3D_g_pDevice]
OV_MATCH(0x01, 0x8B, 0x35),

// mov edx, param_1
OV_MATCH(0x0B, 0x8B, 0x11),

// test edx, 0x780000
OV_MATCH(0x22, 0xF7, 0xC2, 0x00, 0x00, 0x78, 0x00),
// jnz +0x??
OV_MATCH(0x28, 0x75),
//
);

// ******************************************************************
// * D3D_BlockOnResource
// ******************************************************************
// TODO: Lowest build detected is 4627, find if any other titles are
// detected by this signature or missing detection.
// Generic OOVPA as of 4039 and newer
OOVPA_SIG_HEADER_NO_XREF(D3D_BlockOnResource_0__LTCG_eax1,
2036)
4039)
OOVPA_SIG_MATCH(
// mov esi, [D3D_g_pDevice]
OV_MATCH(0x01, 0x8B, 0x35),

{ 0x01, 0x8B },
{ 0x02, 0x35 },

{ 0x22, 0xF7 },
{ 0x23, 0xC2 },
{ 0x24, 0x00 },
{ 0x25, 0x00 },
{ 0x26, 0x78 },
{ 0x27, 0x00 },
{ 0x28, 0x75 },
// mov edx, param_1
OV_MATCH(0x0B, 0x8B, 0x10),

// test edx, 0x780000
OV_MATCH(0x24, 0xF7, 0xC2, 0x00, 0x00, 0x78, 0x00),
// jnz +0x??
OV_MATCH(0x2A, 0x75),
//
);

Expand Down
31 changes: 22 additions & 9 deletions src/OOVPADatabase/D3D8LTCG/4432.inl
Original file line number Diff line number Diff line change
Expand Up @@ -287,19 +287,32 @@ OOVPA_SIG_MATCH(
// ******************************************************************
// * D3DDevice_SetTextureState_ColorKeyColor
// ******************************************************************
//E00A040089
OOVPA_SIG_HEADER_NO_XREF(D3DDevice_SetTextureState_ColorKeyColor,
1036)
4432)
OOVPA_SIG_MATCH(
// push esi
OV_MATCH(0x00, 0x56),

{ 0x01, 0x8B },
{ 0x1D, 0x4C },
// mov eax, [e??]
OV_MATCH(0x07, 0x8B),
// cmp eax, [esi + 0x04]
// jne +0x0E
OV_MATCH(0x09, 0x3B, 0x46, 0x04, 0x72, 0x0E),

// mov e??, [esp + param_1]
OV_MATCH(0x1C, 0x8B),
OV_MATCH(0x1E, 0x24, 0x08),
// lea e??, [e?? * 0x04 + 0x40AE0] // 0x40AE0 is a reliable hardcoded value across all builds.
OV_MATCH(0x20, 0x8D),
OV_MATCH(0x23, 0xE0, 0x0A, 0x04, 0x00),

// mov e??, [esp + param_2]
OV_MATCH(0x29, 0x8B),
OV_MATCH(0x2B, 0x24, 0x0C),

{ 0x23, 0xE0 },
{ 0x24, 0x0A },
{ 0x25, 0x04 },
{ 0x26, 0x00 },
{ 0x27, 0x89 },
// This is an optional OV pair to tell the difference from the (symbol)_(LTCG variant) signature.
// retn 0x08
OV_MATCH(0x3F, 0xC2, 0x08),
//
);

Expand Down
Loading
Loading