unknowncheats uc-forum.com ucdownloads ucdownloads.com

Go Back   UC-Tutorials - Multiplayer Game Hacking and Cheat Tutorials > Programming > Direct3D

- Sponsored Advertisement -
http://www.myfpscheats.com/


Reply
 
Thread Tools Display Modes
  #1  
Old 08-08-2010, 11:20 AM
shad0w_ shad0w_ is offline
Junior Member
 
Join Date: Aug 2010
Posts: 16
Default W2S for Shader Driven Games

Original Thread: http://www.uc-forum.com/forum/d3d-tu...ven-games.html

By ntKid


Hello guys, i started playing a game called Hunter and i noticed it did not use settransform to set the matrices so after reading Azorbix posts about shader driven games and his amazing tips i came up with this.

Code:
struct ModelInfo_t
{
    int X,Y,Team;
    char* Name;
};
 
std::vector<ModelInfo_t>ModelInfo;
 
 void AddModel(IDirect3DDevice9* Device,char* oName,int oTeam)
{
 D3DVIEWPORT9 Viewport;
 D3DXMATRIX ViewProjectionMatrix,LocalToWorld,WorldToLocal;
 D3DXVECTOR3 Vector3D(0,0,0),Vector2D;
 Device->GetVertexShaderConstantF(7,ViewProjectionMatrix,1);//change this to match your game matrix
 Device->GetVertexShaderConstantF(8,LocalToWorld,1);//change this to match your game matrix
 Device->GetViewport(&Viewport);
 D3DXMatrixIdentity(&WorldToLocal);
 D3DXVec3Project(&Vector2D,&Vector3D,&Viewport,&ViewProjectionMatrix,&LocalToWorld,&WorldToLocal);
 if(Vector2D.z < 1.0f)
 {
  ModelInfo_t pModelInfo = {static_cast<int>(Vector2D.x),static_cast<int>(Vector2D.y),oTeam,oName};
  ModelInfo.push_back(pModelInfo);
 }
}
 
void RenderNames()
{
    if(ModelInfo.size() != NULL)
    {
        for(int i = 0; i < ModelInfo.size(); i++)
        {
            iD3DFont.Draw(ModelInfo[i].X,ModelInfo[i].Y,ModelInfo[i].Name,D3DCOLOR_XRGB(255,0,0));
        }
    }
    else{return;}
}
 
HRESULT (WINAPI* pEndScene)(LPDIRECT3DDEVICE9);
HRESULT WINAPI myEndScene(LPDIRECT3DDEVICE9 pDevice)
{
    RenderNames();
    ModelInfo.clear();
    return pEndScene(pDevice);
}
 
int MuleDeerMale[] =
{
    22,
    38,
    79,
    86,
    93,
    101,
    128,
    129,
    157,
    173,
    174,
    177,
    188,
    198,
    269,
    293
};
 
bool bCheckNum(int rec[],int vert)
{
    int i = 0;
 
    while(rec[i] != 0)
    {
        if(rec[i]==vert){return(true);}
        i++;
    }
    return(false);
}
 
HRESULT (WINAPI* pDrawIndexedPrimitive)(LPDIRECT3DDEVICE9,D3DPRIMITIVETYPE,int,int,int,int,int);
HRESULT WINAPI myDrawIndexedPrimitive(LPDIRECT3DDEVICE9 pDevice, D3DPRIMITIVETYPE pType,int BaseVertexIndex,int uiMinIndex,int uiNumVertices,int uiStartIndex,int uiPrimitiveCount)
{
    if(g_Stride==20)
    {
        if(BaseVertexIndex==0 && uiStartIndex==0 && pType==4)
        {
            if(bCheckNum(MuleDeerMale,uiNumVertices))
            {//this should be done just with the head recognition for aimbot and performance but i am tired and lazy to go trough vert log again...
                AddModel(pDevice,"Deer",1);
            }
        }
    }
    return pDrawIndexedPrimitive(pDevice,pType,BaseVertexIndex,uiMinIndex,uiNumVertices,uiStartIndex,uiPrimitiveCount);
}
---updated how i achieved the right registers for hunter---(i dont know if this method will work for all games since im not a d3d guru)

Code:
void doDisassembleShader(LPDIRECT3DDEVICE9 pDevice,char* FileName)
{
    std::ofstream oLogFile(FileName,std::ios::trunc);
 
    if (!oLogFile.is_open())
        return;
 
    IDirect3DVertexShader9* pShader;
 
    pDevice->GetVertexShader(&pShader);
 
    UINT pSizeOfData;
 
    pShader->GetFunction(NULL,&pSizeOfData);
 
    BYTE* pData = new BYTE[pSizeOfData];
 
    pShader->GetFunction(pData,&pSizeOfData);
 
    LPD3DXBUFFER bOut;
 
    D3DXDisassembleShader(reinterpret_cast<DWORD*>(pData),NULL,NULL,&bOut);
 
    oLogFile << static_cast<char*>(bOut->GetBufferPointer()) << std::endl;
 
    oLogFile.close();
 
    delete[] pData;
 
    pShader->Release();
 
}
 
void ReadConstantTable(LPDIRECT3DDEVICE9 pDevice,char* FileName)
{
    std::ofstream oLogFile(FileName,std::ios::trunc);
 
    if (!oLogFile.is_open())
        return;
 
    LPD3DXCONSTANTTABLE pConstantTable;
    D3DXCONSTANT_DESC pConstantDesc[32];
    LPD3DXBUFFER pShaderBuffer,pErrorBuffer;
    UINT pConstantNum = 32;
 
    IDirect3DVertexShader9* pShader;
 
    pDevice->GetVertexShader(&pShader);
 
    UINT pSizeOfData;
 
    pShader->GetFunction(NULL,&pSizeOfData);
 
    BYTE* pData = new BYTE[pSizeOfData];
 
    pShader->GetFunction(pData,&pSizeOfData);
 
    D3DXGetShaderConstantTable(reinterpret_cast<DWORD*>(pData),&pConstantTable);
 
    D3DXCONSTANTTABLE_DESC pDesc;
 
    pConstantTable->GetDesc(&pDesc);
 
    for(UINT StartRegister = 0; StartRegister < pDesc.Constants; StartRegister++)
    {
        D3DXHANDLE Handle = pConstantTable->GetConstant(NULL,StartRegister);
 
        char* bClass[6] = {"D3DXPC_SCALAR","D3DXPC_VECTOR","D3DXPC_MATRIX_ROWS","D3DXPC_MATRIX_COLUMNS","D3DXPC_OBJECT","D3DXPC_STRUCT"};
 
        char* bRegisterSet[4] = {"D3DXRS_BOOL","D3DXRS_INT4","D3DXRS_FLOAT4","D3DXRS_SAMPLER"};
 
        char* bType[19] = {"D3DXPT_VOID","D3DXPT_BOOL","D3DXPT_INT","D3DXPT_FLOAT","D3DXPT_STRING","D3DXPT_TEXTURE","D3DXPT_TEXTURE1D","D3DXPT_TEXTURE2D","D3DXPT_TEXTURE3D","D3DXPT_TEXTURECUBE","D3DXPT_SAMPLER","D3DXPT_SAMPLER1D","D3DXPT_SAMPLER2D","D3DXPT_SAMPLER3D","D3DXPT_SAMPLERCUBE","D3DXPT_PIXELSHADER","D3DXPT_VERTEXSHADER","D3DXPT_PIXELFRAGMENT","D3DXPT_VERTEXFRAGMENT"};
 
        if(Handle != NULL)
        {
            pConstantTable->GetConstantDesc(Handle,pConstantDesc,&pConstantNum);
 
            char bString[MAX_PATH];
 
            for(UINT i =0; i < pConstantNum; i++)
            {
                sprintf(bString,"Name=[%s]\nRegisterSet=[%s]\nRegisterIndex=[%d]\nRegisterCount=[%d]\nClass=[%s]\nType=[%s]\nRows=[%d]\nColumns=[%d]\nElemets=[%d]\nStructMembers=[%d]\nBytes=[%d]\nDefaultValue=[0x%X]\nStartRegister=[%d]\nEND\n",
                    pConstantDesc[i].Name,
                    bRegisterSet[pConstantDesc[i].RegisterSet],
                    pConstantDesc[i].RegisterIndex,
                    pConstantDesc[i].RegisterCount,
                    bClass[pConstantDesc[i].Class],
                    bType[pConstantDesc[i].Type],
                    pConstantDesc[i].Rows,
                    pConstantDesc[i].Columns,
                    pConstantDesc[i].Elements,
                    pConstantDesc[i].StructMembers,
                    pConstantDesc[i].Bytes,
                    (DWORD)pConstantDesc[i].DefaultValue,
                    StartRegister);
 
                oLogFile << static_cast<char*>(bString) << std::endl;
            }
        }
    }
 
    oLogFile.close();
 
    pConstantTable->Release();
 
    pShader->Release();
 
    delete[] pData;
}
 
HRESULT (WINAPI* pDrawIndexedPrimitive)(LPDIRECT3DDEVICE9,D3DPRIMITIVETYPE,int,int,int,int,int);
HRESULT WINAPI myDrawIndexedPrimitive(LPDIRECT3DDEVICE9 pDevice, D3DPRIMITIVETYPE pType,int BaseVertexIndex,int uiMinIndex,int uiNumVertices,int uiStartIndex,int uiPrimitiveCount)
{
    if(g_Stride==20)
    {
        if(BaseVertexIndex==0 && uiStartIndex==0 && pType==4)
        {
            if(bCheckNum(MuleDeerMale,uiNumVertices))
            {
                doDisassembleShader(pDevice,"shader.txt")
            }
        }
    }
    return pDrawIndexedPrimitive(pDevice,pType,BaseVertexIndex,uiMinIndex,uiNumVertices,uiStartIndex,uiPrimitiveCount);
}
Result Shader.txt:
Code:
//
//
// Generated by Microsoft (R) D3DX9 Shader Compiler 9.15.779.0000
//
 
// Registers:
//
//   Name                      Reg   Size
//   ------------------------- ----- ----
//   ViewProjectionMatrix      c7       1(GetVertexShaderConstantF(7,ViewProjectionMatrix,1);)
//   LocalToWorld              c8       1(GetVertexShaderConstantF(8,LocalToWorld,1);)
//   ShadowCoordinateScaleBias c11      1
//   CameraPosition            c12      1
//
    vs_3_0
    def c13, -101010.008, 1, 0, -0.00784313772
    dcl_position v0
    dcl_position1 v1
    dcl_position2 v2
    dcl_position3 v3
    dcl_tangent v4
    dcl_binormal v5
    dcl_normal v6
    dcl_texcoord v7
    dcl_color v8
    dcl_position o0
    dcl_texcoord o1.xy
    dcl_texcoord1 o2
    dcl_texcoord5 o3
    dcl_texcoord6 o4.xyz
    dcl_texcoord7 o5.xyz
    mul r0, c1, v0.y
    mad r0, c0, v0.x, r0
    mad r0, c2, v0.z, r0
    mad r2, c3, v0.w, r0
    mov r0.w, c13.x
    add r0.w, r0.w, c3.w
    sge r3.w, -r0_abs.w, r0_abs.w
    mad r0, v0.xyzx, c13.yyyz, c13.zzzy
    mov r1.w, c13.y
    dp4 r1.x, r0, v1
    dp4 r1.y, r0, v2
    dp4 r1.z, r0, v3
    lrp r0, r3.w, r1, r2
    mad r1.xyz, r0, -c12.w, c12
    mul r2.xyz, r1.y, c9
    mad r2.xyz, c8, r1.x, r2
    mad r3.xyz, c10, r1.z, r2
    mad r1.xyz, v4, -c13.w, -c13.y
    mad o1.xy, v8, c11, c11.wzzw
    dp3 o4.x, r1, r3
    dp3 o5.x, r1, c10
    mad r2.xyz, v5, -c13.w, -c13.y
    dp3 o4.y, r2, r3
    mul r1, r0.y, c5
    dp3 o5.y, r2, c10
    mad r1, c4, r0.x, r1
    mad r2.xyz, v6, -c13.w, -c13.y
    mad r1, c6, r0.z, r1
    dp3 o4.z, r2, r3
    mad r0, c7, r0.w, r1
    dp3 o5.z, r2, c10
    mov o0, r0
    mov o3, r0
    mul o2, c13.yyzz, v7.xyxx
Tutorial updated.
If this is somehow usefull to you dont forget to credit ntKid, Azorbix and Gamedeception.net
Please dont post this anywhere else.
Screenshot Bellow
Reply With Quote
Reply

  • Submit Thread to Digg
  • Submit Thread to del.icio.us
  • Submit Thread to StumbleUpon
  • Submit Thread to Google
  • Submit Thread to Facebook
  • Submit Thread to My Yahoo!
  • Submit Thread to MySpace
  • Submit Thread to Twitter
  • Submit Thread to Reddit

Tags
driven, games, shader, w2s

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off



All times are GMT. The time now is 06:51 AM.