Refactoring

Added remaining functions of pm_math/pm_debug
This commit is contained in:
s1lentq 2016-01-28 05:50:27 +06:00
parent a8cc9cc76f
commit 4a774865ba
8 changed files with 452 additions and 252 deletions

View File

@ -59,7 +59,7 @@ CCSBotManager::CCSBotManager(void)
m_bServerActive = false; m_bServerActive = false;
TheBotPhrases = new BotPhraseManager; // TODO: Reverse me! TheBotPhrases = new BotPhraseManager;
// load the database of bot radio chatter // load the database of bot radio chatter
TheBotPhrases->Initialize("BotChatter.db", 0); TheBotPhrases->Initialize("BotChatter.db", 0);

View File

@ -220,11 +220,11 @@ public:
void SetNavPlace(unsigned int place) { m_navPlace = place; } void SetNavPlace(unsigned int place) { m_navPlace = place; }
enum SkillType { LOW, AVERAGE, HIGH, RANDOM }; enum SkillType { LOW, AVERAGE, HIGH, RANDOM };
NOXREF NOBODY const char *GetRandomBotName(SkillType skill); NOXREF const char *GetRandomBotName(SkillType skill);
static void MonitorBotCVars(void); static void MonitorBotCVars(void);
static void MaintainBotQuota(void); static void MaintainBotQuota(void);
NOBODY static bool AddBot(const BotProfile *profile, BotProfileTeamType team); static bool AddBot(const BotProfile *profile, BotProfileTeamType team);
#define FROM_CONSOLE true #define FROM_CONSOLE true
static bool BotAddCommand(BotProfileTeamType team, bool isFromConsole = false); // process the "bot_add" console command static bool BotAddCommand(BotProfileTeamType team, bool isFromConsole = false); // process the "bot_add" console command

View File

@ -342,24 +342,11 @@ void EndRoundMessage(const char *sentence, int event)
{ {
if (teamTriggered) if (teamTriggered)
{ {
UTIL_LogPrintf UTIL_LogPrintf("Team \"%s\" triggered \"%s\" (CT \"%i\") (T \"%i\")\n", team, message, mp->m_iNumCTWins, mp->m_iNumTerroristWins);
(
"Team \"%s\" triggered \"%s\" (CT \"%i\") (T \"%i\")\n",
team,
message,
mp->m_iNumCTWins,
mp->m_iNumTerroristWins
);
} }
else else
{ {
UTIL_LogPrintf UTIL_LogPrintf("World triggered \"%s\" (CT \"%i\") (T \"%i\")\n", message, mp->m_iNumCTWins, mp->m_iNumTerroristWins);
(
"World triggered \"%s\" (CT \"%i\") (T \"%i\")\n",
message,
mp->m_iNumCTWins,
mp->m_iNumTerroristWins
);
} }
} }
@ -437,7 +424,6 @@ void ReadMultiplayCvars(CHalfLifeMultiplay *mp)
/* <11492c> ../cstrike/dlls/multiplay_gamerules.cpp:479 */ /* <11492c> ../cstrike/dlls/multiplay_gamerules.cpp:479 */
CHalfLifeMultiplay::CHalfLifeMultiplay(void) CHalfLifeMultiplay::CHalfLifeMultiplay(void)
{ {
UNTESTED
m_VoiceGameMgr.Init(&g_GameMgrHelper, gpGlobals->maxClients); m_VoiceGameMgr.Init(&g_GameMgrHelper, gpGlobals->maxClients);
RefreshSkillData(); RefreshSkillData();
@ -512,7 +498,7 @@ CHalfLifeMultiplay::CHalfLifeMultiplay(void)
m_bMapHasRescueZone = false; m_bMapHasRescueZone = false;
m_iStoredSpectValue = (int)allow_spectators.value; m_iStoredSpectValue = (int)allow_spectators.value;
for (int j = 0; j < MAX_VIP_QUEUES; j++) for (int j = 0; j < MAX_VIP_QUEUES; ++j)
{ {
VIPQueue[j] = NULL; VIPQueue[j] = NULL;
} }
@ -860,14 +846,7 @@ void CHalfLifeMultiplay::__MAKE_VHOOK(GiveC4)(void)
player->HintMessage("#Hint_you_have_the_bomb", FALSE, TRUE); player->HintMessage("#Hint_you_have_the_bomb", FALSE, TRUE);
// Log this information // Log this information
UTIL_LogPrintf UTIL_LogPrintf("\"%s<%i><%s><TERRORIST>\" triggered \"Spawned_With_The_Bomb\"\n", STRING(player->pev->netname), GETPLAYERUSERID(player->edict()), GETPLAYERAUTHID(player->edict()));
(
"\"%s<%i><%s><TERRORIST>\" triggered \"Spawned_With_The_Bomb\"\n",
STRING(player->pev->netname),
GETPLAYERUSERID(player->edict()),
GETPLAYERAUTHID(player->edict())
);
m_bBombDropped = FALSE; m_bBombDropped = FALSE;
} }
} }
@ -903,14 +882,7 @@ void CHalfLifeMultiplay::__MAKE_VHOOK(GiveC4)(void)
player->HintMessage("#Hint_you_have_the_bomb", FALSE, TRUE); player->HintMessage("#Hint_you_have_the_bomb", FALSE, TRUE);
// Log this information // Log this information
UTIL_LogPrintf UTIL_LogPrintf("\"%s<%i><%s><TERRORIST>\" triggered \"Spawned_With_The_Bomb\"\n", STRING(player->pev->netname), GETPLAYERUSERID(player->edict()), GETPLAYERAUTHID(player->edict()));
(
"\"%s<%i><%s><TERRORIST>\" triggered \"Spawned_With_The_Bomb\"\n",
STRING(player->pev->netname),
GETPLAYERUSERID(player->edict()),
GETPLAYERAUTHID(player->edict())
);
m_bBombDropped = FALSE; m_bBombDropped = FALSE;
return; return;
} }
@ -2546,9 +2518,7 @@ void CHalfLifeMultiplay::__MAKE_VHOOK(Think)(void)
pPlayer->m_iHideHUD |= HIDEHUD_ALL; pPlayer->m_iHideHUD |= HIDEHUD_ALL;
m_fTeamCount = gpGlobals->time + 100000.0; m_fTeamCount = gpGlobals->time + 100000.0;
UTIL_LogPrintf("Career Round %d %d %d %d\n", m_iRoundWinStatus, m_iNumCTWins, UTIL_LogPrintf("Career Round %d %d %d %d\n", m_iRoundWinStatus, m_iNumCTWins, m_iNumTerroristWins, TheCareerTasks->AreAllTasksComplete());
m_iNumTerroristWins, TheCareerTasks->AreAllTasksComplete());
break; break;
} }
} }
@ -2624,7 +2594,6 @@ void CHalfLifeMultiplay::__MAKE_VHOOK(Think)(void)
MESSAGE_END(); MESSAGE_END();
UTIL_LogPrintf("Career Match %d %d %d %d\n", m_iRoundWinStatus, m_iNumCTWins, m_iNumTerroristWins, TheCareerTasks->AreAllTasksComplete()); UTIL_LogPrintf("Career Match %d %d %d %d\n", m_iRoundWinStatus, m_iNumCTWins, m_iNumTerroristWins, TheCareerTasks->AreAllTasksComplete());
SERVER_COMMAND("setpause\n"); SERVER_COMMAND("setpause\n");
} }
} }
@ -2959,19 +2928,8 @@ void CHalfLifeMultiplay::CheckRestartRound(void)
// log the restart // log the restart
UTIL_LogPrintf("World triggered \"Restart_Round_(%i_%s)\"\n", iRestartDelay, (iRestartDelay == 1) ? "second" : "seconds"); UTIL_LogPrintf("World triggered \"Restart_Round_(%i_%s)\"\n", iRestartDelay, (iRestartDelay == 1) ? "second" : "seconds");
UTIL_LogPrintf UTIL_LogPrintf("Team \"CT\" scored \"%i\" with \"%i\" players\n", m_iNumCTWins, m_iNumCT);
( UTIL_LogPrintf("Team \"TERRORIST\" scored \"%i\" with \"%i\" players\n", m_iNumTerroristWins, m_iNumTerrorist);
"Team \"CT\" scored \"%i\" with \"%i\" players\n",
m_iNumCTWins,
m_iNumCT
);
UTIL_LogPrintf
(
"Team \"TERRORIST\" scored \"%i\" with \"%i\" players\n",
m_iNumTerroristWins,
m_iNumTerrorist
);
// let the players know // let the players know
UTIL_ClientPrintAll(HUD_PRINTCENTER, "#Game_will_restart_in", UTIL_dtos1(iRestartDelay), (iRestartDelay == 1) ? "SECOND" : "SECONDS"); UTIL_ClientPrintAll(HUD_PRINTCENTER, "#Game_will_restart_in", UTIL_dtos1(iRestartDelay), (iRestartDelay == 1) ? "SECOND" : "SECONDS");
@ -3211,13 +3169,7 @@ void CHalfLifeMultiplay::__MAKE_VHOOK(InitHUD)(CBasePlayer *pl)
int i; int i;
// notify other clients of player joining the game // notify other clients of player joining the game
UTIL_LogPrintf UTIL_LogPrintf("\"%s<%i><%s><>\" entered the game\n", STRING(pl->pev->netname), GETPLAYERUSERID(pl->edict()), GETPLAYERAUTHID(pl->edict()));
(
"\"%s<%i><%s><>\" entered the game\n",
STRING(pl->pev->netname),
GETPLAYERUSERID(pl->edict()),
GETPLAYERAUTHID(pl->edict())
);
UpdateGameMode(pl); UpdateGameMode(pl);
@ -3417,14 +3369,7 @@ void CHalfLifeMultiplay::__MAKE_VHOOK(ClientDisconnected)(edict_t *pClient)
char *team = GetTeam(pPlayer->m_iTeam); char *team = GetTeam(pPlayer->m_iTeam);
FireTargets("game_playerleave", pPlayer, pPlayer, USE_TOGGLE, 0); FireTargets("game_playerleave", pPlayer, pPlayer, USE_TOGGLE, 0);
UTIL_LogPrintf UTIL_LogPrintf("\"%s<%i><%s><%s>\" disconnected\n", STRING(pPlayer->pev->netname), GETPLAYERUSERID(pPlayer->edict()), GETPLAYERAUTHID(pPlayer->edict()), team);
(
"\"%s<%i><%s><%s>\" disconnected\n",
STRING(pPlayer->pev->netname),
GETPLAYERUSERID(pPlayer->edict()),
GETPLAYERAUTHID(pPlayer->edict()),
team
);
// destroy all of the players weapons and items // destroy all of the players weapons and items
pPlayer->RemoveAllItems(TRUE); pPlayer->RemoveAllItems(TRUE);
@ -3740,13 +3685,7 @@ void CHalfLifeMultiplay::__MAKE_VHOOK(PlayerKilled)(CBasePlayer *pVictim, entvar
WRITE_LONG(DRC_FLAG_PRIO_MASK | DRC_FLAG_DRAMATIC | DRC_FLAG_FINAL); WRITE_LONG(DRC_FLAG_PRIO_MASK | DRC_FLAG_DRAMATIC | DRC_FLAG_FINAL);
MESSAGE_END(); MESSAGE_END();
UTIL_LogPrintf UTIL_LogPrintf("\"%s<%i><%s><TERRORIST>\" triggered \"Assassinated_The_VIP\"\n", STRING(killer->pev->netname), GETPLAYERUSERID(killer->edict()), GETPLAYERAUTHID(killer->edict()));
(
"\"%s<%i><%s><TERRORIST>\" triggered \"Assassinated_The_VIP\"\n",
STRING(killer->pev->netname),
GETPLAYERUSERID(killer->edict()),
GETPLAYERAUTHID(killer->edict())
);
} }
else else
killer->AddAccount(REWARD_KILLED_ENEMY); killer->AddAccount(REWARD_KILLED_ENEMY);
@ -3874,16 +3813,8 @@ void CHalfLifeMultiplay::__MAKE_VHOOK(DeathNotice)(CBasePlayer *pVictim, entvars
{ {
// killed self // killed self
char *team = GetTeam(pVictim->m_iTeam); char *team = GetTeam(pVictim->m_iTeam);
UTIL_LogPrintf("\"%s<%i><%s><%s>\" committed suicide with \"%s\"\n", STRING(pVictim->pev->netname), GETPLAYERUSERID(pVictim->edict()),
UTIL_LogPrintf GETPLAYERAUTHID(pVictim->edict()), team, killer_weapon_name);
(
"\"%s<%i><%s><%s>\" committed suicide with \"%s\"\n",
STRING(pVictim->pev->netname),
GETPLAYERUSERID(pVictim->edict()),
GETPLAYERAUTHID(pVictim->edict()),
team,
killer_weapon_name
);
} }
else if (pKiller->flags & FL_CLIENT) else if (pKiller->flags & FL_CLIENT)
{ {
@ -3892,34 +3823,15 @@ void CHalfLifeMultiplay::__MAKE_VHOOK(DeathNotice)(CBasePlayer *pVictim, entvars
char *VictimTeam = GetTeam(pVictim->m_iTeam); char *VictimTeam = GetTeam(pVictim->m_iTeam);
char *KillerTeam = GetTeam(pPlayer->m_iTeam); char *KillerTeam = GetTeam(pPlayer->m_iTeam);
UTIL_LogPrintf UTIL_LogPrintf("\"%s<%i><%s><%s>\" killed \"%s<%i><%s><%s>\" with \"%s\"\n", STRING(pKiller->netname), GETPLAYERUSERID(ENT(pKiller)), GETPLAYERAUTHID(ENT(pKiller)),
( KillerTeam, STRING(pVictim->pev->netname), GETPLAYERUSERID(pVictim->edict()), GETPLAYERAUTHID(pVictim->edict()), VictimTeam, killer_weapon_name);
"\"%s<%i><%s><%s>\" killed \"%s<%i><%s><%s>\" with \"%s\"\n",
STRING(pKiller->netname),
GETPLAYERUSERID(ENT(pKiller)),
GETPLAYERAUTHID(ENT(pKiller)),
KillerTeam,
STRING(pVictim->pev->netname),
GETPLAYERUSERID(pVictim->edict()),
GETPLAYERAUTHID(pVictim->edict()),
VictimTeam,
killer_weapon_name
);
} }
else else
{ {
// killed by the world // killed by the world
char *team = GetTeam(pVictim->m_iTeam); char *team = GetTeam(pVictim->m_iTeam);
UTIL_LogPrintf("\"%s<%i><%s><%s>\" committed suicide with \"%s\" (world)\n", STRING(pVictim->pev->netname), GETPLAYERUSERID(pVictim->edict()),
UTIL_LogPrintf GETPLAYERAUTHID(pVictim->edict()), team, killer_weapon_name);
(
"\"%s<%i><%s><%s>\" committed suicide with \"%s\" (world)\n",
STRING(pVictim->pev->netname),
GETPLAYERUSERID(pVictim->edict()),
GETPLAYERAUTHID(pVictim->edict()),
team,
killer_weapon_name
);
} }
CheckWinConditions(); CheckWinConditions();

View File

@ -140,12 +140,12 @@ FunctionHook g_FunctionHooks[] =
{ 0x01DB6710, "PM_Init", (size_t)&PM_Init }, { 0x01DB6710, "PM_Init", (size_t)&PM_Init },
{ 0x01DB1020, "PM_FindTextureType", (size_t)&PM_FindTextureType }, { 0x01DB1020, "PM_FindTextureType", (size_t)&PM_FindTextureType },
//pm_debug //pm_debug
//{ 0x0, "PM_ShowClipBox", (size_t)&PM_ShowClipBox }, //{ 0x01DAEEE0, "PM_ShowClipBox", (size_t)&PM_ShowClipBox }, // NOXREF
//{ 0x0, "PM_ParticleLine", (size_t)&PM_ParticleLine }, //{ 0x01DAEEF0, "PM_ParticleLine", (size_t)&PM_ParticleLine }, // NOXREF
//{ 0x0, "PM_DrawRectangle", (size_t)&PM_DrawRectangle }, //{ 0x01DAEFC0, "PM_DrawRectangle", (size_t)&PM_DrawRectangle }, // NOXREF
//{ 0x0, "PM_DrawPhysEntBBox", (size_t)&PM_DrawPhysEntBBox }, //{ 0x01DAF290, "PM_DrawPhysEntBBox", (size_t)&PM_DrawPhysEntBBox }, // NOXREF
//{ 0x0, "PM_DrawBBox", (size_t)&PM_DrawBBox }, //{ 0x01DAFB50, "PM_DrawBBox", (size_t)&PM_DrawBBox }, // NOXREF
//{ 0x0, "PM_ViewEntity", (size_t)&PM_ViewEntity }, //{ 0x01DAFF20, "PM_ViewEntity", (size_t)&PM_ViewEntity }, // NOXREF
//pm_shared //pm_shared
//{ 0x01DB0AB0, "PM_SwapTextures", (size_t)&PM_SwapTextures }, // NOXREF //{ 0x01DB0AB0, "PM_SwapTextures", (size_t)&PM_SwapTextures }, // NOXREF
//{ 0x01DB0B30, "PM_IsThereGrassTexture", (size_t)&PM_IsThereGrassTexture }, // NOXREF //{ 0x01DB0B30, "PM_IsThereGrassTexture", (size_t)&PM_IsThereGrassTexture }, // NOXREF
@ -203,28 +203,28 @@ FunctionHook g_FunctionHooks[] =
//pm_math //pm_math
//{ 0x0, "anglemod", (size_t)&anglemod }, //{ 0x0, "anglemod", (size_t)&anglemod },
{ 0x01DB0000, "AngleVectors", (size_t)&AngleVectors }, { 0x01DB0000, "AngleVectors", (size_t)&AngleVectors },
//{ 0x0, "AngleVectorsTranspose", (size_t)&AngleVectorsTranspose }, //{ 0x01DB0100, "AngleVectorsTranspose", (size_t)&AngleVectorsTranspose }, // NOXREF
{ 0x01DB0200, "AngleMatrix", (size_t)&AngleMatrix }, { 0x01DB0200, "AngleMatrix", (size_t)&AngleMatrix },
//{ 0x0, "AngleIMatrix", (size_t)&AngleIMatrix }, //{ 0x01DB02D0, "AngleIMatrix", (size_t)&AngleIMatrix }, // NOXREF
//{ 0x0, "NormalizeAngles", (size_t)&NormalizeAngles }, //{ 0x01DB03A0, "NormalizeAngles", (size_t)&NormalizeAngles }, // NOXREF
//{ 0x0, "InterpolateAngles", (size_t)&InterpolateAngles }, //{ 0x01DB03F0, "InterpolateAngles", (size_t)&InterpolateAngles }, // NOXREF
//{ 0x0, "AngleBetweenVectors", (size_t)&AngleBetweenVectors }, //{ 0x01DB0510, "AngleBetweenVectors", (size_t)&AngleBetweenVectors }, // NOXREF
//{ 0x0, "VectorTransform", (size_t)&VectorTransform }, //{ 0x01DB05B0, "VectorTransform", (size_t)&VectorTransform }, // NOXREF
{ 0x01DB0610, "VectorCompare", (size_t)&VectorCompare }, { 0x01DB0610, "VectorCompare", (size_t)&VectorCompare },
{ 0x01DB0640, "VectorMA", (size_t)&VectorMA }, { 0x01DB0640, "VectorMA", (size_t)&VectorMA },
//{ 0x01DB0680, "_DotProduct", (size_t)&_DotProduct }, // NOXREF //{ 0x01DB0680, "_DotProduct", (size_t)&_DotProduct }, // NOXREF
//{ 0x01DB06A0, "_VectorSubtract", (size_t)&_VectorSubtract }, // NOXREF //{ 0x01DB06A0, "_VectorSubtract", (size_t)&_VectorSubtract }, // NOXREF
//{ 0x01DB06D0, "_VectorAdd", (size_t)&_VectorAdd }, // NOXREF //{ 0x01DB06D0, "_VectorAdd", (size_t)&_VectorAdd }, // NOXREF
//{ 0x01DB0700, "_VectorCopy", (size_t)&_VectorCopy }, // NOXREF //{ 0x01DB0700, "_VectorCopy", (size_t)&_VectorCopy }, // NOXREF
//{ 0x01DB0720, "CrossProduct", (size_t)&_CrossProduct }, // NOXREF //{ 0x01DB0720, "CrossProduct", (size_t)&_CrossProduct }, // NOXREF
{ 0x01DB0760, "Length", (size_t)&Length }, { 0x01DB0760, "Length", (size_t)&Length },
//{ 0x0, "Distance", (size_t)&Distance }, //{ 0x01DB0780, "Distance", (size_t)&Distance }, // NOXREF
{ 0x01DB07D0, "VectorNormalize", (size_t)&VectorNormalize }, { 0x01DB07D0, "VectorNormalize", (size_t)&VectorNormalize },
//{ 0x0, "VectorInverse", (size_t)&VectorInverse }, //{ 0x01DB0820, "VectorInverse", (size_t)&VectorInverse },
{ 0x01DB0840, "VectorScale", (size_t)&VectorScale }, { 0x01DB0840, "VectorScale", (size_t)&VectorScale },
//{ 0x0, "Q_log2", (size_t)&Q_log2 }, //{ 0x01DB0870, "Q_log2", (size_t)&Q_log2 },
//{ 0x0, "VectorMatrix", (size_t)&VectorMatrix }, //{ 0x01DB0880, "VectorMatrix", (size_t)&VectorMatrix },
//{ 0x0, "VectorAngles", (size_t)&VectorAngles }, //{ 0x01DB09D0, "VectorAngles", (size_t)&VectorAngles },
#endif // PM_Shared_Region #endif // PM_Shared_Region

View File

@ -1,5 +1,10 @@
#include "precompiled.h" #include "precompiled.h"
#undef vec3_t
// Expand debugging BBOX particle hulls by this many units.
#define BOX_GAP 0.0f
static int PM_boxpnt[6][4] = static int PM_boxpnt[6][4] =
{ {
{ 0, 4, 6, 2 }, // +X { 0, 4, 6, 2 }, // +X
@ -11,73 +16,233 @@ static int PM_boxpnt[6][4] =
}; };
/* <2d0110> ../cstrike/pm_shared/pm_debug.c:43 */ /* <2d0110> ../cstrike/pm_shared/pm_debug.c:43 */
NOBODY void PM_ShowClipBox(void) void PM_ShowClipBox(void)
{ {
#ifdef _DEBUG
if (!pmove->runfuncs)
return;
// More debugging, draw the particle bbox for player and for the entity we are looking directly at.
// aslo prints entity info to the console overlay.
if (!pmove->server)
return;
// Draw entity in center of view
// Also draws the normal to the clip plane that intersects our movement ray. Leaves a particle
// trail at the intersection point.
PM_ViewEntity();
// Show our BBOX in particles.
//PM_DrawBBox(pmove->player_mins[pmove->usehull], pmove->player_maxs[pmove->usehull], pmove->origin, 132, 0.1);
/*
{
int i;
for (i = 0; i < pmove->numphysent; i++)
{
if (pmove->physents[ i ].info >= 1 && pmove->physents[ i ].info <= 4)
{
PM_DrawBBox(pmove->player_mins[pmove->usehull], pmove->player_maxs[pmove->usehull], pmove->physents[i].origin, 132, 0.1);
}
}
}
*/
#endif // _DEBUG
} }
/* <2d0012> ../cstrike/pm_shared/pm_debug.c:82 */ /* <2d0012> ../cstrike/pm_shared/pm_debug.c:82 */
NOBODY void PM_ParticleLine(vec3_t start, vec3_t end, int pcolor, float life, float vert) void PM_ParticleLine(vec3_t start, vec3_t end, int pcolor, float life, float vert)
{ {
// float linestep; // 84 float linestep = 2.0f;
// float curdist; // 85 float curdist;
// float len; // 86 float len;
// vec3_t curpos; // 87 vec3_t curpos;
// vec3_t diff; // 88 vec3_t diff;
// int i; // 89 int i;
// Determine distance;
VectorSubtract(end, start, diff);
len = VectorNormalize(diff);
curdist = 0;
while (curdist <= len)
{
for (i = 0; i < 3; ++i)
curpos[i] = start[i] + curdist * diff[i];
pmove->PM_Particle(curpos, pcolor, life, 0, vert);
curdist += linestep;
}
} }
/* <2d0197> ../cstrike/pm_shared/pm_debug.c:114 */ /* <2d0197> ../cstrike/pm_shared/pm_debug.c:114 */
NOBODY void PM_DrawRectangle(vec3_t tl, vec3_t bl, vec3_t tr, vec3_t br, int pcolor, float life) void PM_DrawRectangle(vec3_t tl, vec3_t bl, vec3_t tr, vec3_t br, int pcolor, float life)
{ {
PM_ParticleLine(tl, bl, pcolor, life, 0);
PM_ParticleLine(bl, br, pcolor, life, 0);
PM_ParticleLine(br, tr, pcolor, life, 0);
PM_ParticleLine(tr, tl, pcolor, life, 0);
} }
/* <2cff57> ../cstrike/pm_shared/pm_debug.c:128 */ /* <2cff57> ../cstrike/pm_shared/pm_debug.c:128 */
NOBODY void PM_DrawPhysEntBBox(int num, int pcolor, float life) void PM_DrawPhysEntBBox(int num, int pcolor, float life)
{ {
// physent_t *pe; // 130 physent_t *pe;
// vec3_t org; // 131 vec3_t org;
// int j; // 132 int j;
// vec3_t tmp; // 133 vec3_t tmp;
// vec_t p; // 134 vec3_t p[8];
// float gap; // 135 float gap = BOX_GAP;
// vec3_t modelmins; // 136 vec3_t modelmins, modelmaxs;
// vec3_t modelmaxs; // 136
// { if (num >= pmove->numphysent || num <= 0)
// vec3_t forward; // 161 return;
// vec3_t right; // 161
// vec3_t up; // 161 pe = &pmove->physents[num];
// }
if (pe->model)
{
VectorCopy(pe->origin, org);
pmove->PM_GetModelBounds(pe->model, modelmins, modelmaxs);
for (j = 0; j < 8; ++j)
{
tmp[0] = (j & 1) ? modelmins[0] - gap : modelmaxs[0] + gap;
tmp[1] = (j & 2) ? modelmins[1] - gap : modelmaxs[1] + gap;
tmp[2] = (j & 4) ? modelmins[2] - gap : modelmaxs[2] + gap;
VectorCopy(tmp, p[j]);
}
// If the bbox should be rotated, do that
if (pe->angles[0] || pe->angles[1] || pe->angles[2])
{
vec3_t forward, right, up;
AngleVectorsTranspose(pe->angles, forward, right, up);
for (j = 0; j < 8; ++j)
{
VectorCopy(p[j], tmp);
p[j][0] = DotProduct(tmp, forward);
p[j][1] = DotProduct(tmp, right);
p[j][2] = DotProduct(tmp, up);
}
}
// Offset by entity origin, if any.
for (j = 0; j < 8; ++j)
VectorAdd(p[j], org, p[j]);
for (j = 0; j < 6; ++j)
{
PM_DrawRectangle(
p[PM_boxpnt[j][1]],
p[PM_boxpnt[j][0]],
p[PM_boxpnt[j][2]],
p[PM_boxpnt[j][3]],
pcolor, life);
}
}
else
{
for (j = 0; j < 8; ++j)
{
tmp[0] = (j & 1) ? pe->mins[0] : pe->maxs[0];
tmp[1] = (j & 2) ? pe->mins[1] : pe->maxs[1];
tmp[2] = (j & 4) ? pe->mins[2] : pe->maxs[2];
VectorAdd(tmp, pe->origin, tmp);
VectorCopy(tmp, p[j]);
}
for (j = 0; j < 6; ++j)
{
PM_DrawRectangle(
p[PM_boxpnt[j][1]],
p[PM_boxpnt[j][0]],
p[PM_boxpnt[j][2]],
p[PM_boxpnt[j][3]],
pcolor, life);
}
}
} }
/* <2d030c> ../cstrike/pm_shared/pm_debug.c:218 */ /* <2d030c> ../cstrike/pm_shared/pm_debug.c:218 */
NOBODY void PM_DrawBBox(vec3_t mins, vec3_t maxs, vec3_t origin, int pcolor, float life) void PM_DrawBBox(vec3_t mins, vec3_t maxs, vec3_t origin, int pcolor, float life)
{ {
// int j; // 220 int j;
// vec3_t tmp; // 222
// vec_t p; // 223 vec3_t tmp;
// float gap; // 224 vec3_t p[8];
// PM_DrawRectangle(vec3_t tl, float gap = BOX_GAP;
// vec3_t bl,
// vec3_t tr, for (j = 0; j < 8; ++j)
// vec3_t br, {
// int pcolor, tmp[0] = (j & 1) ? mins[0] - gap : maxs[0] + gap;
// float life); // 238 tmp[1] = (j & 2) ? mins[1] - gap : maxs[1] + gap;
tmp[2] = (j & 4) ? mins[2] - gap : maxs[2] + gap;
VectorAdd(tmp, origin, tmp);
VectorCopy(tmp, p[j]);
}
for (j = 0; j < 6; ++j)
{
PM_DrawRectangle(
p[PM_boxpnt[j][1]],
p[PM_boxpnt[j][0]],
p[PM_boxpnt[j][2]],
p[PM_boxpnt[j][3]],
pcolor, life);
}
} }
// Shows a particle trail from player to entity in crosshair.
// Shows particles at that entities bbox
// Tries to shoot a ray out by about 128 units.
/* <2d03e9> ../cstrike/pm_shared/pm_debug.c:260 */ /* <2d03e9> ../cstrike/pm_shared/pm_debug.c:260 */
NOBODY void PM_ViewEntity(void) void PM_ViewEntity(void)
{ {
// vec3_t forward; // 262 vec3_t forward, right, up;
// vec3_t right; // 262 float raydist = 256.0f;
// vec3_t up; // 262 vec3_t origin;
// float raydist; // 263 vec3_t end;
// vec3_t origin; // 264 int i;
// vec3_t end; // 265 pmtrace_t trace;
// int i; // 266 int pcolor = 77;
// pmtrace_t trace; // 267 float fup;
// int pcolor; // 268
// float fup; // 269 #if 0
// PM_DrawPhysEntBBox(int num, if (!pm_showclip.value)
// int pcolor, return;
// float life); // 294 #endif
// Determine movement angles
AngleVectors(pmove->angles, forward, right, up);
VectorCopy(pmove->origin, origin);
fup = 0.5 * (pmove->_player_mins[pmove->usehull][2] + pmove->_player_maxs[pmove->usehull][2]);
fup += pmove->view_ofs[2];
fup -= 4;
for (i = 0; i < 3; i++)
{
end[i] = origin[i] + raydist * forward[i];
}
trace = pmove->PM_PlayerTrace(origin, end, PM_STUDIO_BOX, -1);
// Not the world
if (trace.ent > 0)
{
pcolor = 111;
}
// Draw the hull or bbox.
if (trace.ent > 0)
{
PM_DrawPhysEntBBox(trace.ent, pcolor, 0.3f);
}
} }

View File

@ -32,11 +32,11 @@
#pragma once #pragma once
#endif #endif
NOBODY void PM_ShowClipBox(void); void PM_ShowClipBox(void);
NOBODY void PM_ParticleLine(vec3_t start, vec3_t end, int pcolor, float life, float vert); void PM_ParticleLine(vec3_t start, vec3_t end, int pcolor, float life, float vert);
NOBODY void PM_DrawRectangle(vec3_t tl, vec3_t bl, vec3_t tr, vec3_t br, int pcolor, float life); void PM_DrawRectangle(vec3_t tl, vec3_t bl, vec3_t tr, vec3_t br, int pcolor, float life);
NOBODY void PM_DrawPhysEntBBox(int num, int pcolor, float life); void PM_DrawPhysEntBBox(int num, int pcolor, float life);
NOBODY void PM_DrawBBox(vec3_t mins, vec3_t maxs, vec3_t origin, int pcolor, float life); void PM_DrawBBox(vec3_t mins, vec3_t maxs, vec3_t origin, int pcolor, float life);
NOBODY void PM_ViewEntity(void); void PM_ViewEntity(void);
#endif // PM_DEBUG_H #endif // PM_DEBUG_H

View File

@ -16,7 +16,7 @@ int nanmask;
#endif // HOOK_GAMEDLL #endif // HOOK_GAMEDLL
/* <2ce436> ../cstrike/pm_shared/pm_math.c:35 */ /* <2ce436> ../cstrike/pm_shared/pm_math.c:35 */
NOBODY float anglemod(float a) float anglemod(float a)
{ {
a = (360.0 / 65536) * ((int)(a *(65536 / 360.0)) & 65535); a = (360.0 / 65536) * ((int)(a *(65536 / 360.0)) & 65535);
return a; return a;
@ -63,15 +63,39 @@ void AngleVectors(const vec_t *angles, vec_t *forward, vec_t *right, vec_t *up)
} }
/* <2ce521> ../cstrike/pm_shared/pm_math.c:76 */ /* <2ce521> ../cstrike/pm_shared/pm_math.c:76 */
NOBODY void AngleVectorsTranspose(const vec_t *angles, vec_t *forward, vec_t *right, vec_t *up) void AngleVectorsTranspose(const vec_t *angles, vec_t *forward, vec_t *right, vec_t *up)
{ {
// float angle; // 78 float angle;
// float sr; // 79 float sr, sp, sy, cr, cp, cy;
// float sp; // 79
// float sy; // 79 angle = angles[YAW] * (M_PI * 2 / 360);
// float cr; // 79 sy = sin(angle);
// float cp; // 79 cy = cos(angle);
// float cy; // 79 angle = angles[PITCH] * (M_PI * 2 / 360);
sp = sin(angle);
cp = cos(angle);
angle = angles[ROLL] * (M_PI * 2 / 360);
sr = sin(angle);
cr = cos(angle);
if (forward)
{
forward[0] = cp * cy;
forward[1] = (sr * sp * cy + cr * -sy);
forward[2] = (cr * sp * cy + -sr * -sy);
}
if (right)
{
right[0] = cp * sy;
right[1] = (sr * sp * sy + cr * cy);
right[2] = (cr * sp * sy + -sr * cy);
}
if (up)
{
up[0] = -sp;
up[1] = sr * cp;
up[2] = cr * cp;
}
} }
/* <2ce5d0> ../cstrike/pm_shared/pm_math.c:112 */ /* <2ce5d0> ../cstrike/pm_shared/pm_math.c:112 */
@ -110,48 +134,111 @@ void AngleMatrix(const vec_t *angles, float (*matrix)[4])
} }
/* <2ce67b> ../cstrike/pm_shared/pm_math.c:142 */ /* <2ce67b> ../cstrike/pm_shared/pm_math.c:142 */
NOBODY void AngleIMatrix(const vec_t *angles, float (*matrix)[4]) void AngleIMatrix(const vec_t *angles, float (*matrix)[4])
{ {
// float angle; // 144 float angle;
// float sr; // 145 float sr, sp, sy, cr, cp, cy;
// float sp; // 145
// float sy; // 145 angle = angles[YAW] * (M_PI * 2 / 360);
// float cr; // 145 sy = sin(angle);
// float cp; // 145 cy = cos(angle);
// float cy; // 145 angle = angles[PITCH] * (M_PI * 2 / 360);
sp = sin(angle);
cp = cos(angle);
angle = angles[ROLL] * (M_PI * 2 / 360);
sr = sin(angle);
cr = cos(angle);
// matrix = (YAW * PITCH) * ROLL
matrix[0][0] = cp * cy;
matrix[0][1] = cp * sy;
matrix[0][2] = -sp;
matrix[1][0] = sr * sp * cy + cr * -sy;
matrix[1][1] = sr * sp * sy + cr * cy;
matrix[1][2] = sr * cp;
matrix[2][0] = (cr * sp * cy + -sr * -sy);
matrix[2][1] = (cr * sp * sy + -sr * cy);
matrix[2][2] = cr * cp;
matrix[0][3] = 0.0;
matrix[1][3] = 0.0;
matrix[2][3] = 0.0;
} }
/* <2ce710> ../cstrike/pm_shared/pm_math.c:172 */ /* <2ce710> ../cstrike/pm_shared/pm_math.c:172 */
NOBODY void NormalizeAngles(float *angles) void NormalizeAngles(float *angles)
{ {
// int i; // 174 int i;
// Normalize angles
for (i = 0; i < 3; ++i)
{
if (angles[i] > 180.0)
{
angles[i] -= 360.0;
}
else if (angles[i] < -180.0)
{
angles[i] += 360.0;
}
}
} }
// Interpolate Euler angles.
// FIXME: Use Quaternions to avoid discontinuities
// Frac is 0.0 to 1.0 (i.e., should probably be clamped, but doesn't have to be)
/* <2ce75f> ../cstrike/pm_shared/pm_math.c:198 */ /* <2ce75f> ../cstrike/pm_shared/pm_math.c:198 */
NOBODY void InterpolateAngles(float *start, float *end, float *output, float frac) void InterpolateAngles(float *start, float *end, float *output, float frac)
{ {
// int i; // 200 int i;
// float ang1; // 201 float ang1, ang2;
// float ang2; // 201 float d;
// float d; // 202
// NormalizeAngles(float *angles); // 204 NormalizeAngles(start);
// NormalizeAngles(float *angles); // 205 NormalizeAngles(end);
// NormalizeAngles(float *angles); // 225
for (i = 0; i < 3; ++i)
{
ang1 = start[i];
ang2 = end[i];
d = ang2 - ang1;
if (d > 180)
{
d -= 360;
}
else if (d < -180)
{
d += 360;
}
output[i] = ang1 + d * frac;
}
NormalizeAngles(output);
} }
/* <2ce893> ../cstrike/pm_shared/pm_math.c:235 */ /* <2ce893> ../cstrike/pm_shared/pm_math.c:235 */
NOBODY float AngleBetweenVectors(const vec_t *v1, const vec_t *v2) float AngleBetweenVectors(const vec_t *v1, const vec_t *v2)
{ {
// float angle; // 237 float angle;
// float l1; // 238 float l1 = Length(v1);
// float l2; // 239 float l2 = Length(v2);
// Length(const vec_t *v); // 238
// Length(const vec_t *v); // 239 if (!l1 || !l2)
return 0.0f;
angle = acos(DotProduct(v1, v2)) / (l1 * l2);
angle = (angle * 180.0f) / M_PI;
return angle;
} }
/* <2ce953> ../cstrike/pm_shared/pm_math.c:251 */ /* <2ce953> ../cstrike/pm_shared/pm_math.c:251 */
NOBODY void VectorTransform(const vec_t *in1, float *in2, vec_t *out) void VectorTransform(const vec_t *in1, float (*in2)[4], vec_t *out)
{ {
out[0] = _DotProduct(in1, in2[0]) + in2[0][3];
out[1] = _DotProduct(in1, in2[1]) + in2[1][3];
out[2] = _DotProduct(in1, in2[2]) + in2[2][3];
} }
/* <2ce996> ../cstrike/pm_shared/pm_math.c:259 */ /* <2ce996> ../cstrike/pm_shared/pm_math.c:259 */
@ -175,7 +262,7 @@ void VectorMA(const vec_t *veca, float scale, const vec_t *vecb, vec_t *vecc)
} }
/* <2cea34> ../cstrike/pm_shared/pm_math.c:278 */ /* <2cea34> ../cstrike/pm_shared/pm_math.c:278 */
float_precision _DotProduct(vec_t *v1, vec_t *v2) float_precision _DotProduct(const vec_t *v1, const vec_t *v2)
{ {
return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2]; return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2];
} }
@ -225,10 +312,11 @@ float_precision Length(const vec_t *v)
} }
/* <2cebc2> ../cstrike/pm_shared/pm_math.c:325 */ /* <2cebc2> ../cstrike/pm_shared/pm_math.c:325 */
NOBODY float Distance(const vec_t *v1, const vec_t *v2) float Distance(const vec_t *v1, const vec_t *v2)
{ {
// vec_t *d; // 327 vec_t d[3];
// Length(const vec_t *v); // 329 VectorSubtract(v2, v1, d);
return Length(d);
} }
/* <2cec3c> ../cstrike/pm_shared/pm_math.c:332 */ /* <2cec3c> ../cstrike/pm_shared/pm_math.c:332 */
@ -252,8 +340,11 @@ float_precision VectorNormalize(vec_t *v)
} }
/* <2ceca2> ../cstrike/pm_shared/pm_math.c:351 */ /* <2ceca2> ../cstrike/pm_shared/pm_math.c:351 */
NOBODY void VectorInverse(vec_t *v) void VectorInverse(vec_t *v)
{ {
v[0] = -v[0];
v[1] = -v[1];
v[2] = -v[2];
} }
/* <2cecc9> ../cstrike/pm_shared/pm_math.c:358 */ /* <2cecc9> ../cstrike/pm_shared/pm_math.c:358 */
@ -265,7 +356,7 @@ void VectorScale(const vec_t *in, vec_t scale, vec_t *out)
} }
/* <2ced0f> ../cstrike/pm_shared/pm_math.c:366 */ /* <2ced0f> ../cstrike/pm_shared/pm_math.c:366 */
NOBODY int Q_log2(int val) int Q_log2(int val)
{ {
int answer = 0; int answer = 0;
while (val >>= 1) while (val >>= 1)
@ -275,23 +366,55 @@ NOBODY int Q_log2(int val)
} }
/* <2ced4d> ../cstrike/pm_shared/pm_math.c:374 */ /* <2ced4d> ../cstrike/pm_shared/pm_math.c:374 */
NOBODY void VectorMatrix(vec_t *forward, vec_t *right, vec_t *up) void VectorMatrix(vec_t *forward, vec_t *right, vec_t *up)
{ {
// vec3_t *tmp; // 376 vec_t tmp[3];
// CrossProduct(const vec_t *v1,
// const vec_t *v2, if (forward[0] == 0 && forward[1] == 0)
// vec_t *cross); // 390 {
// VectorNormalize(vec_t *v); // 391 right[0] = 1;
// CrossProduct(const vec_t *v1, right[1] = 0;
// const vec_t *v2, right[2] = 0;
// vec_t *cross); // 392
// VectorNormalize(vec_t *v); // 393 up[0] = -forward[2];
up[1] = 0;
up[2] = 0;
return;
}
tmp[0] = 0; tmp[1] = 0; tmp[2] = 1.0;
_CrossProduct(forward, tmp, right);
VectorNormalize(right);
_CrossProduct(right, forward, up);
VectorNormalize(up);
} }
/* <2cee68> ../cstrike/pm_shared/pm_math.c:398 */ /* <2cee68> ../cstrike/pm_shared/pm_math.c:398 */
NOBODY void VectorAngles(const vec_t *forward, vec_t *angles) void VectorAngles(const vec_t *forward, vec_t *angles)
{ {
// float tmp; // 400 float tmp, yaw, pitch;
// float yaw; // 400
// float pitch; // 400 if (forward[1] == 0 && forward[0] == 0)
{
yaw = 0;
if (forward[2] > 0)
pitch = 90;
else
pitch = 270;
}
else
{
yaw = (atan2(forward[1], forward[0]) * 180 / M_PI);
if (yaw < 0)
yaw += 360;
tmp = sqrt (forward[0]*forward[0] + forward[1]*forward[1]);
pitch = (atan2(forward[2], tmp) * 180 / M_PI);
if (pitch < 0)
pitch += 360;
}
angles[0] = pitch;
angles[1] = yaw;
angles[2] = 0;
} }

View File

@ -48,32 +48,32 @@ extern int nanmask;
#define IS_NAN(x) ((*reinterpret_cast<int *>(&(x)) & nanmask) == nanmask) #define IS_NAN(x) ((*reinterpret_cast<int *>(&(x)) & nanmask) == nanmask)
NOBODY float anglemod(float a); float anglemod(float a);
void AngleVectors(const vec_t *angles, vec_t *forward, vec_t *right, vec_t *up); void AngleVectors(const vec_t *angles, vec_t *forward, vec_t *right, vec_t *up);
NOBODY void AngleVectorsTranspose(const vec_t *angles, vec_t *forward, vec_t *right, vec_t *up); void AngleVectorsTranspose(const vec_t *angles, vec_t *forward, vec_t *right, vec_t *up);
void AngleMatrix(const vec_t *angles, float (*matrix)[4]); void AngleMatrix(const vec_t *angles, float (*matrix)[4]);
NOBODY void AngleIMatrix(const vec_t *angles, float (*matrix)[4]); void AngleIMatrix(const vec_t *angles, float (*matrix)[4]);
NOBODY void NormalizeAngles(float *angles); void NormalizeAngles(float *angles);
NOBODY void InterpolateAngles(float *start, float *end, float *output, float frac); void InterpolateAngles(float *start, float *end, float *output, float frac);
NOBODY float AngleBetweenVectors(const vec_t *v1, const vec_t *v2); float AngleBetweenVectors(const vec_t *v1, const vec_t *v2);
NOBODY void VectorTransform(const vec_t *in1, float *in2, vec_t *out); void VectorTransform(const vec_t *in1, float *in2, vec_t *out);
int VectorCompare(const vec_t *v1, const vec_t *v2); int VectorCompare(const vec_t *v1, const vec_t *v2);
void VectorMA(const vec_t *veca, float scale, const vec_t *vecb, vec_t *vecc); void VectorMA(const vec_t *veca, float scale, const vec_t *vecb, vec_t *vecc);
float_precision _DotProduct(vec_t *v1, vec_t *v2); float_precision _DotProduct(const vec_t *v1, const vec_t *v2);
void _VectorSubtract(vec_t *veca, vec_t *vecb, vec_t *out); void _VectorSubtract(vec_t *veca, vec_t *vecb, vec_t *out);
void _VectorAdd(vec_t *veca, vec_t *vecb, vec_t *out); void _VectorAdd(vec_t *veca, vec_t *vecb, vec_t *out);
void _VectorCopy(vec_t *in, vec_t *out); void _VectorCopy(vec_t *in, vec_t *out);
void _CrossProduct(const vec_t *v1, const vec_t *v2, vec_t *cross); void _CrossProduct(const vec_t *v1, const vec_t *v2, vec_t *cross);
float_precision Length(const vec_t *v); float_precision Length(const vec_t *v);
NOBODY float Distance(const vec_t *v1, const vec_t *v2); float Distance(const vec_t *v1, const vec_t *v2);
float_precision VectorNormalize(vec_t *v); float_precision VectorNormalize(vec_t *v);
NOBODY void VectorInverse(vec_t *v); void VectorInverse(vec_t *v);
NOBODY void VectorScale(const vec_t *in, vec_t scale, vec_t *out); void VectorScale(const vec_t *in, vec_t scale, vec_t *out);
NOBODY int Q_log2(int val); int Q_log2(int val);
NOBODY void VectorMatrix(vec_t *forward, vec_t *right, vec_t *up); void VectorMatrix(vec_t *forward, vec_t *right, vec_t *up);
NOBODY void VectorAngles(const vec_t *forward, vec_t *angles); void VectorAngles(const vec_t *forward, vec_t *angles);
#endif // PM_MATH_H #endif // PM_MATH_H