Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DWORD m_pCaps, SelectShader = 0;
- class cCaps
- {
- public:
- char _0x0000[336];
- DWORD ShaderMode; //0x0150
- };//Size=0x0184
- class i3Shader
- {
- public:
- };
- class i3RenderContext_DIP
- {
- public:
- char pad_0000[12]; //0x0000
- class i3Timer* i3Timer; //0x000C
- class i3RenderTarget* i3RenderTarget; //0x0010
- class i3TextureDX* i3TextureDX; //0x0014
- class i3VertexArrayDX* i3VertexArrayDX; //0x0018
- class i3IndexArray* i3IndexArray; //0x001C
- BYTE VertexCount; //0x0020
- char pad_0021[2123]; //0x0021
- class N00001F9F* N000008ED; //0x086C
- class N00002011* N000008EC; //0x0870
- char pad_0874[32]; //0x0874
- class i3GfxPerformanceReport* i3GfxPerformanceReport; //0x0894
- DWORD DrawCount; //0x0898
- DWORD DrawPrimCount; //0x089C
- char pad_08A0[17704]; //0x08A0
- class i3TextureCubeDX* i3TextureCubeDX; //0x4DC8
- char pad_4DCC[996]; //0x4DCC
- class i3Shader* Shader; //0x51B0
- class i3ShaderCache* i3ShaderCache; //0x51B4
- char pad_51B8[540]; //0x51B8
- LPDIRECT3DDEVICE9 pDevice; //0x53D4
- char pad_53D8[12]; //0x53D8
- class i3RenderTarget* i3RenderTarget2; //0x53E4
- char pad_53E8[148]; //0x53E8
- class i3GfxFontDXManager* i3GfxFontDXManager; //0x547C
- class i3GfxFontDX2Manager* i3GfxFontDX2Manager2; //0x5480
- class i3GfxFontDX2Manager* i3GfxFontDX2Manager3; //0x5484
- char pad_5488[20]; //0x5488
- DWORD DrawSize; //0x549C
- char pad_54A0[12]; //0x54A0
- DWORD DrawSize2; //0x54AC
- char pad_54B0[4]; //0x54B0
- class N00004C4B* N00001AB1; //0x54B4
- char pad_54B8[8]; //0x54B8
- DWORD dwSize; //0x54C0
- DWORD isReady; //0x54C4
- char pad_54C8[3908]; //0x54C8
- }; //Size: 0x640C
- typedef void (__thiscall* tSelectShader)(void *p, i3Shader* , int);
- tSelectShader oSelectShader;
- HRESULT WINAPI hkDrawIndexedPrimitive(LPDIRECT3DDEVICE9 pDevice, D3DPRIMITIVETYPE PrimType,INT BaseVertexIndex,UINT MinVertexIndex,UINT NumVertices,UINT startIndex,UINT primCount)
- {
- pDevice->SetFVF ( D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1 );
- pDevice->GetPixelShader(&oldlShader2);
- pDevice->SetTexture ( 0, NULL );
- pDevice->SetPixelShader(0);
- pDevice->SetRenderState(D3DRS_ZENABLE, FALSE);
- pDevice->SetRenderState(D3DRS_STENCILENABLE, FALSE);
- pDevice->SetRenderState(D3DRS_ZENABLE, TRUE);
- pDevice->SetRenderState(D3DRS_STENCILENABLE, TRUE);
- pDevice->SetPixelShader(oldlShader2);
- return pDevice->DrawIndexedPrimitive(PrimType, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount);
- }
- i3Shader* __fastcall myDrawIndexedPrim2(void *p, void *Unknown, i3Shader *Shader, D3DPRIMITIVETYPE I3G_PRIMITIVE, unsigned int startIdx, unsigned int primCount)
- {
- unsigned int dwRenderContext;
- int dwDrawPrimitiveSize;
- int dwDrawPrimitiveSize_Count;
- int dwDrawPrimitiveSize_VertexBufferData;
- int dwOffset;
- int dwBufferData;
- int i;
- int size2 = 0;
- oSelectShader = (tSelectShader)SelectShader;
- dwRenderContext = (unsigned int)(p);
- i3RenderContext_DIP* pRC = (i3RenderContext_DIP*)(p);
- //dwDrawCount = (unsigned int)*(DWORD*)(i3RenderContext + 0x89C);
- *(DWORD *)(dwRenderContext + 0x898) += primCount;
- (*(DWORD*)(dwRenderContext + 0x89C))++;
- cCaps* pCaps = (cCaps*)(*(DWORD*)(m_pCaps));
- if(pCaps->ShaderMode)
- {
- oSelectShader(p, Shader, 0);
- }
- if((*(DWORD *)(dwRenderContext + 0x20) >> 5) & 1 && *(DWORD *)(dwRenderContext + 0x54C4) == 1)
- {
- dwDrawPrimitiveSize = *(DWORD *)(dwRenderContext + 0x54B4);
- dwDrawPrimitiveSize_Count = *(DWORD *)(dwDrawPrimitiveSize + 0x8C);
- dwDrawPrimitiveSize_VertexBufferData = *(DWORD *)(dwDrawPrimitiveSize + 0xE0);
- dwOffset = dwDrawPrimitiveSize * *(DWORD *)(dwRenderContext + 0x54C0);
- dwBufferData = dwDrawPrimitiveSize_VertexBufferData;
- for ( i = dwDrawPrimitiveSize_Count; size2 < *(DWORD *)(dwRenderContext + 0x54AC); dwDrawPrimitiveSize_VertexBufferData = dwBufferData )
- {
- (*(void (__stdcall **)(DWORD, signed int, int, int, DWORD))(**(DWORD **)(dwRenderContext + 0x53D4) + 0x190))(
- *(DWORD *)(dwRenderContext + 0x53D4),
- 1,
- dwDrawPrimitiveSize_VertexBufferData,
- dwOffset,
- 0);
- hkDrawIndexedPrimitive((LPDIRECT3DDEVICE9)*(DWORD *)(dwRenderContext + 0x53D4), I3G_PRIMITIVE, 0, 0, 5, startIdx, primCount);
- dwOffset += dwDrawPrimitiveSize_Count;//i
- ++size2;
- }
- }
- else {
- hkDrawIndexedPrimitive((LPDIRECT3DDEVICE9)*(DWORD *)(dwRenderContext + 0x53D4), I3G_PRIMITIVE, 0, 0, 5, startIdx, primCount);
- }
- return pRC->Shader;
- }
- void ThreadHook()
- {
- DWORD hGfxDx = (DWORD)GetModuleHandleA("i3GfxDx.dll");
- DWORD dwScane = (DWORD)GetModuleHandleA("i3SceneDx.dll");
- if(hGfxDx)
- {
- DWORD dwDrawPrime = hGfxDx + 0x62260;
- DWORD ResultSearch = dwScane+0x69AFF;
- DWORD EndSearch = *(DWORD*)(ResultSearch + 2);
- DWORD dwPrime = *(DWORD*)(EndSearch);
- if(dwPrime)
- {
- HMODULE hGfxDx = LoadLibraryA("i3GfxDx.dll");
- m_pCaps = (DWORD)GetProcAddress(hGfxDx,"?m_pCaps@i3RenderContext@@1PAVi3GfxCaps@@A");
- SelectShader = (DWORD)GetProcAddress(hGfxDx,"?SelectShader@i3RenderContext@@QAEXPAVi3Shader@@H@Z");
- xMakePTR((PBYTE)EndSearch,(DWORD)myDrawIndexedPrim2);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment