All pastes #830143 Raw Edit

Something

public text v1 · immutable
#830143 ·published 2007-12-23 20:32 UTC
rendered paste body
struct CViewMatrix
{
	DWORD		m_dwUnknown[46];
	float*		m_pflMatrix;			// + 0xB8
	DWORD		m_dwUnknown1[11];
	float		m_flXPos;				// + 0xE8
	float		m_flYPos;				// + 0xEC
	float		m_flZPos;				// + 0xF0
};

struct CGameVec
{
	DWORD	m_dwUnknown[33];
	float*	m_pflMatrix; // + 0x84
	DWORD	m_dwUnknown1[11];
	float	m_flXPos; // + 0xB4
	float	m_flYPos; // + 0xB8
	float	m_flZPos; // + 0xBC
};

struct CInfo
{
	DWORD		m_dwUnkown;
	CGameVec*	m_pPosition; //0004
};

typedef struct CPlayer
{
	DWORD			m_dwUnknown[22];
	int				m_iKitID;			// + 0x58
	DWORD			m_dwUnknown1[2];
	char			m_szName[28];		// + 0x64
	CInfo*			m_pInfo;			// + 0x80
	CViewMatrix*	m_pViewMatrix;		// + 0x84
	DWORD			m_dwUnknown2[11];
	BOOL			m_bAlive;			// + 0xB4
	DWORD			m_dwUnknown3[2];
	float			m_flFOV;			// + 0xC0
	DWORD			m_dwUnknown4[20];
	int				m_iTeam;			// + 0xD8
	DWORD			m_dwUnknown5[16];
	BOOL			m_bTakingFlag;		// + 0x11C
	DWORD			m_dwUnknown6[23];
	BOOL			m_bRunning;			// + 0x17C
	DWORD			m_dwUnknown7[45];
	int				m_iAmmo;			// + 0x234 
	DWORD			m_dwUnknown8[8];
};

int NewCalcScreen(const float* in, float* out, float flFov, float* mainViewOrigin, float* mainViewAngles, int displayCenterX, int displayCenterY )
{
	float aim[3];
	float newaim[3];
	float view[3];
	float tmp[3];
	float num;

	if( flFov == 0.0f )
		return false;

	VectorSubtract(in,mainViewOrigin,aim);	
	MakeVector(mainViewAngles,view);	

	if ( VectorAngle(view,aim) > ( flFov/ 1.8 ) )
	{
		return false;
	}		

	VectorRotateZ(aim,-mainViewAngles[1],newaim);// yaw
	VectorRotateY(newaim,-mainViewAngles[0],tmp);// pitch
	VectorRotateX(tmp,-mainViewAngles[2],newaim);// roll

	//they are behind us!@~!#@!$@!$
	if (newaim[0] <= 0)
	{
		return false;
	}
	num = (float)((displayCenterX/newaim[0])*(120.0/flFov - 1.0/3.0));

	out[0] = displayCenterX - num*newaim[1];
	out[1] = displayCenterY - num*newaim[2];

	return true;
}

bool bWorldtoScreenx( IDirect3DDevice9* pDevice, CPlayer* pPlayer, CPlayer* pLocalPlayer, D3DXVECTOR3* pScreen )
{
	float flLocalPos[3], flRemotePos[3];
	float flScreen[3], flViewAngles[3];
	D3DVIEWPORT9 Viewport;

	if( SUCCEEDED( pDevice->GetViewport( &Viewport ) ) == false )
		return false;

	flRemotePos[0] = pPlayer->m_pInfo->m_pPosition->m_flXPos;
	flRemotePos[1] = pPlayer->m_pInfo->m_pPosition->m_flYPos;
	flRemotePos[2] = pPlayer->m_pInfo->m_pPosition->m_flZPos;

	flLocalPos[0] = pLocalPlayer->m_pInfo->m_pPosition->m_flXPos;
	flLocalPos[1] = pLocalPlayer->m_pInfo->m_pPosition->m_flYPos;
	flLocalPos[2] = pLocalPlayer->m_pInfo->m_pPosition->m_flZPos;

	flViewAngles[0] = 90; // have fun finding the viewangles :P
	flViewAngles[1] = 90;
	flViewAngles[2] = 0.0f;

	bool bReturn = NewCalcScreen( flRemotePos, flScreen, pLocalPlayer->m_flFOV, flLocalPos, flViewAngles, Viewport.Width / 2, Viewport.Height / 2 );

	pScreen->x = flScreen[0];
	pScreen->y = flScreen[1];

	return bReturn;
}

char g_szClassList[7][20] = { "SpecialOp", "Sniper", "Assault", "Support", "Engineer", "Medic", "AntiTank" };


HRESULT APIENTRY hkIDirect3DDevice9::EndScene()
{
	char szFormatString[100] = { 0 };

	if ( g_pPlayerManager == NULL )
		return m_pD3Ddev->EndScene();

	CPlayer *pLocalPlayer = g_pPlayerManager->pGetLocalPlayer();// pGetPlayerByIndex( 0 );

	if ( pLocalPlayer == NULL )
		return m_pD3Ddev->EndScene();

	for ( int i = 0; i <= 255; i++ )   
	{  
		CPlayer *pPlayer = g_pPlayerManager->pGetPlayerByIndex( i );  

		if ( pPlayer != NULL )  
		{ 
			D3DXVECTOR3 vecScreen;

			if ( pPlayer->m_bAlive && bWorldtoScreenx( m_pD3Ddev, pPlayer, pLocalPlayer, &vecScreen ) )
			{
				sprintf( szFormatString, "%s [%s]", pPlayer->m_szName, g_szClassList[ pPlayer->m_iKitID ] );
				g_pD3DFont->AddFont( vecScreen.x, vecScreen.y, ( pPlayer->m_iTeam == 1 )? 0x0000FFFF: 0xFF0000FF, FT_BORDER, szFormatString );
			}
		}
	}

	if( g_pD3DFont )
		g_pD3DFont->RenderAll();

	return m_pD3Ddev->EndScene();
}