// Hooking the parent callee because COD is being ghey and failing to load a map shader otherwise void __declspec(naked) CEngine::hR_DrawXModelSkinnedParent() { char *pShader; __asm { pushad mov eax, [ebx+0xb8] mov ebx, [eax] mov pShader, ebx } if(KEY(VK_F7)) CUtils::Log(true, "DrawXModelSkinnedParent: %s\n", pShader); if(strstr(pShader, "sas") || strstr(pShader, "usmc")) { DrawID = DRAW_TEAM1; } else if(strstr(pShader, "opforce") || strstr(pShader, "arab")) { DrawID = DRAW_TEAM2; } __asm { popad jmp [trR_DrawXModelSkinnedParent] } } void __declspec(naked) CEngine::hR_DrawXModelSkinnedCached() { char *pShader; __asm { pushad mov ebx, [edi+0xb8] mov eax, [ebx] mov pShader, eax } if(KEY(VK_F8)) CUtils::Log(true, "R_DrawXModelSkinnedCached: %s\n", pShader); if(!strstr(pShader, "mi24p") && !strstr(pShader, "weapon") && !strstr(pShader, "cobra")) { DrawID = DRAW_NOCHAMS; if(strstr(pShader, "sas") || strstr(pShader, "usmc")) { DrawID = DRAW_TEAM1; } else if(strstr(pShader, "opforce") || strstr(pShader, "arab") || strstr(pShader, "head_suren")) { DrawID = DRAW_TEAM2; } else if(strstr(pShader, "guille")) { DrawID = DRAW_GUILLE; } } __asm { popad jmp [trR_DrawXModelSkinnedCached] } } // ===================================================================================== HRESULT APIENTRY hIDirect3DDevice9::DrawIndexedPrimitive(D3DPRIMITIVETYPE Type,INT BaseVertexIndex,UINT MinVertexIndex,UINT NumVertices,UINT startIndex,UINT primCount) { int DrawID = CEngine::GetDrawID(); if(DrawID != CEngine::DRAW_NONE) { int DrawID = CEngine::GetDrawID(); if(Cvar::GetInt(V_CHAMS) && CEngine::DRAW_NOCHAMS != DrawID) m_pD3Ddev->SetTexture(0, m_pManager->m_pD3Dtexture_back[DrawID]); if(Cvar::GetInt(V_WALLHACK)) m_pD3Ddev->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE); m_pD3Ddev->DrawIndexedPrimitive(Type,BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount); if(Cvar::GetInt(V_CHAMS) && CEngine::DRAW_NOCHAMS != DrawID) m_pD3Ddev->SetTexture(0, m_pManager->m_pD3Dtexture_front[DrawID]); if(Cvar::GetInt(V_WALLHACK)) m_pD3Ddev->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE); } CEngine::SetDrawID(CEngine::DRAW_NONE); return m_pD3Ddev->DrawIndexedPrimitive(Type,BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount); }