[Code] Engine Drawing PHP Code: struct CF_FontBase
{
unsigned char ucPadding[0xC]; //0000
ID3DXFont* m_pDefault; //000C
ID3DXFont* m_pVerdanaBold; //0010
ID3DXFont* m_pVerdanaSkinny; //0014
ID3DXFont* m_pVerdanaGiant; //0018
ID3DXFont* m_pVerdanaBig; //001C
ID3DXFont* m_pVerdanaBigSkinny; //0020
};
PHP Code: __declspec(noinline) void CEngine::RenderTextEngine( int x, int y, DWORD color, char *str, bool bCenter, bool bOutline )
{
if( !IsReady() )
return;
if( *(DWORD *)m_pFontBase == NULL )
return;
CF_Viewport vp = GetViewport();
if( GetFontBase() )
{
if( GetFontBase()->m_pVerdanaSkinny )
{
int StringWidth = g_Engine.GetStringWidth( str, GetFontBase()->m_pVerdanaSkinny );
if( bCenter )
{
x -= (int)(StringWidth/2);
}
RECT fp = { x, y, vp.x, vp.y };
if( bOutline )
{
RECT fp1 = { x + 1, y, vp.x, vp.y };
RECT fp2 = { x - 1, y, vp.x, vp.y };
RECT fp3 = { x, y + 1, vp.x, vp.y };
RECT fp4 = { x, y - 1, vp.x, vp.y };
GetFontBase()->m_pVerdanaSkinny->DrawTextA( NULL, str, -1, &fp1, DT_LEFT, D3DCOLOR_RGBA( 0, 0, 0, ALPHA( color ) ) );
GetFontBase()->m_pVerdanaSkinny->DrawTextA( NULL, str, -1, &fp2, DT_LEFT, D3DCOLOR_RGBA( 0, 0, 0, ALPHA( color ) ) );
GetFontBase()->m_pVerdanaSkinny->DrawTextA( NULL, str, -1, &fp3, DT_LEFT, D3DCOLOR_RGBA( 0, 0, 0, ALPHA( color ) ) );
GetFontBase()->m_pVerdanaSkinny->DrawTextA( NULL, str, -1, &fp4, DT_LEFT, D3DCOLOR_RGBA( 0, 0, 0, ALPHA( color ) ) );
}
GetFontBase()->m_pVerdanaSkinny->DrawTextA( NULL, str, -1, &fp, DT_LEFT, color );
}
}
}
int CEngine::GetStringWidth( char *szString, ID3DXFont* Font )
{
TEXTMETRICA Met;
Font->GetTextMetrics( &Met );
INT iStringSize = NULL;
for(int i = 0; szString[i] != '\0'; i++)
iStringSize++;
return iStringSize * Met.tmAveCharWidth;
}
You can find the address for the CF_FontBase from the RenderText function PHP Code: RenderTextString((int)dword_102491C0, (int)"Initializing Engine Manager ...", 580, 540, -1, 1);
you can also create your own fonts, but i leave that up to yourself  arty:  arty:  arty:
added FillRGBA Oct 12th 2009 PHP Code: class ILTClient
{
public: // Index Offset
virtual const char *CLTClientName(void); // 0000 0000
virtual ILTCommon* Common(void); // 0001 0004
virtual ILTPhysics* Physics(void); // 0002 0008
virtual void* Transform(void); // 0003 000C
virtual ILTModel* GetModelLT(void); // 0004 0010
virtual ILTSoundMgr* SoundMgr(void); // 0005 0014
virtual void DebugOutput(void); // 0006 0018
virtual void sub_414BE0(void); // 0007 001C
virtual void sub_414C30(void); // 0008 0020
virtual void sub_414DF0(void); // 0009 0024
virtual void* FindItYourself001(void); // 0010 0028
virtual void sub_4122B0(void); // 0011 002C
virtual void FindItYourself002(void); // 0012 0030
virtual void sub_4153D0(void); // 0013 0034
virtual void sub_415420(void); // 0014 0038
virtual void sub_414FB0(void); // 0015 003C
virtual void sub_415090(void); // 0016 0040
virtual void sub_4150C0(void); // 0017 0044
virtual void sub_4150F0(void); // 0018 0048
virtual void sub_415120(void); // 0019 004C
virtual void sub_415160(void); // 0020 0050
virtual void sub_4151A0(void); // 0021 0054
virtual void sub_4151D0(void); // 0022 0058
virtual void sub_415200(void); // 0023 005C
virtual void sub_415230(void); // 0024 0060
virtual void sub_415250(void); // 0025 0064
virtual void sub_415270(void); // 0026 0068
virtual void sub_4152A0(void); // 0027 006C
virtual voidFindItYourself003(); // 0028 0070
virtual void sub_415630(void); // 0029 0074
virtual void sub_415780(void); // 0030 0078
virtual void sub_4154D0(void); // 0031 007C
virtual void sub_415570(void); // 0032 0080
virtual void sub_413AA0(void); // 0033 0084
virtual void sub_413CD0(void); // 0034 0088
virtual void sub_413D80(void); // 0035 008C
virtual void sub_413E10(void); // 0036 0090
virtual void FindItYourself004(); // 0037 0094
virtual void FindItYourself005(); // 0038 0098
virtual void sub_414880(void); // 0039 009C
virtual void sub_414740(void); // 0040 00A0
virtual void sub_4146E0(void); // 0041 00A4
virtual void sub_414840(void); // 0042 00A8
virtual void sub_414800(void); // 0043 00AC
virtual void sub_414780(void); // 0044 00B0
virtual void sub_4147C0(void); // 0045 00B4
virtual void FindItYourself006( ); // 0046 00B8
virtual void FindItYourself007( ); // 0047 00BC
virtual void sub_4124B0(void); // 0048 00C0
virtual void FindItYourself008(void); // 0049 00C4
virtual ILTDrawPrim* DrawPrim(void); // 0050 00C8
};
class ILTDrawPrim
{
public:
virtual char* GetClassName() = 0; //0000
virtual void Padding001() = 0; //0004
virtual void Padding002() = 0; //0008
virtual void Padding003() = 0; //000C
virtual LTRESULT SetTexture(HTEXTURE hTexture) = 0; //0010
virtual LTRESULT BeginDrawPrimBlock() = 0; //0014
virtual void Padding004() = 0; //0018
virtual void Padding005() = 0; //001C
virtual void Padding006() = 0; //0020
virtual void Padding007() = 0; //0024
virtual void Padding008() = 0; //0028
virtual void Padding009() = 0; //002C
virtual void Padding010() = 0; //0030
virtual void Padding011() = 0; //0034
virtual void Padding012() = 0; //0038
virtual void Padding013() = 0; //003C
virtual void Padding014() = 0; //0040
virtual void Padding015() = 0; //0044
virtual void Padding016() = 0; //0048
virtual void Padding017() = 0; //004C
virtual void Padding018() = 0; //0050
virtual void Padding019() = 0; //0054
virtual void Padding020() = 0; //0058
virtual LTRESULT DrawPrim( LT_POLYG4 *pPrim, const uint32 nCount = 1) = 0; //005C
virtual void Padding022() = 0; //0060
};
PHP Code: void DrawPrimSetRGBA(LT_POLYG4& Primitive, byte r, byte g, byte b, byte a)
{
for(int nCurrVert = 0; nCurrVert < LT_POLYG4::k_nNumVerts; nCurrVert++)
{
Primitive.verts[nCurrVert].rgba.Init( r, g, b, a );
}
}
void DrawPrimSetXYWH(LT_POLYG4& Primitive, float fLeft, float fTop, float fWidth, float fHeight)
{
Primitive.verts[0].pos = LTVector(fLeft, fTop, 1.0f);
Primitive.verts[1].pos = LTVector(fLeft + fWidth, fTop, 1.0f);
Primitive.verts[2].pos = LTVector(fLeft + fWidth, fTop + fHeight, 1.0f);
Primitive.verts[3].pos = LTVector(fLeft, fTop + fHeight, 1.0f);
}
__declspec(noinline) void CEngine::FillRGBA( float x, float y, float w, float h, unsigned char r, unsigned char g, unsigned char b, unsigned char a )
{
if( GetClient() )
{
if( GetClient()->DrawPrim() )
{
LT_POLYG4 Poly;
DrawPrimSetRGBA( Poly, r, g, b, a );
DrawPrimSetXYWH( Poly, x, y, w, h );
GetClient()->DrawPrim()->DrawPrim( &Poly );
}
}
}
__declspec(noinline) void CEngine::OutlineRGBA( float x, float y, float w, float h, float boarder, unsigned char r, unsigned char g, unsigned char b, unsigned char a )
{
if( GetClient() )
{
if( GetClient()->DrawPrim() )
{
LT_POLYG4 Polys[4];
DrawPrimSetRGBA( Polys[0], r, g, b, a );
DrawPrimSetRGBA( Polys[1], r, g, b, a );
DrawPrimSetRGBA( Polys[2], r, g, b, a );
DrawPrimSetRGBA( Polys[3], r, g, b, a );
DrawPrimSetXYWH( Polys[0], x, y, w, boarder );
DrawPrimSetXYWH( Polys[1], x, y, boarder, h );
DrawPrimSetXYWH( Polys[2], x, y + h, w + boarder, boarder );
DrawPrimSetXYWH( Polys[3], x + w, y, boarder, h );
GetClient()->DrawPrim()->DrawPrim( Polys, 4 );
}
}
}
Will i release more, who knows, but any retard with d3d9 could do this, i am just making people who write PURE engine hacks' lives easier.
you can also thank uNrEaL, who was most supportive during finding all this stuff.
|