Server: create new hull types

Add reverse engineered hull types and globals in the SDK which will be used to debug and implement AI code in the future.
This commit is contained in:
Kawe Mazidjatari 2024-07-05 15:49:57 +02:00
parent e638cc9323
commit d2cf0ebac6

View File

@ -0,0 +1,127 @@
//=============================================================================//
//
// Purpose:
//
//=============================================================================//
#ifndef AI_HULL_H
#define AI_HULL_H
#include "ai_navmesh.h"
#include "bspflags.h"
#include "mathlib/vector.h"
//=========================================================
// Link Properties. These hulls must correspond to the hulls
// in g_hullProperties!
//=========================================================
enum Hull_e
{
HULL_HUMAN,
HULL_MEDIUM,
HULL_FLYING_VEHICLE,
HULL_SMALL,
HULL_TITAN,
HULL_GOLIATH,
HULL_PROWLER,
//--------------------------------------------
NUM_HULLS, // Confirmed, see [r5apex_ds + CB2765]
HULL_NONE = -1 // No Hull (appears after num hulls as we don't want to count it)
};
struct Hull_s
{
Hull_s(const char* pName, int bit, const Vector3D& _mins, const Vector3D& _maxs,
const float _height, const float _scale, const float _unk10, const float _unk11,
const unsigned int _traceMask, NavMeshType_e _navMeshType)
: hullName(pName), hullBit(bit)
, mins(_mins), maxs(_maxs)
, height(_height), scale(_scale)
, unk10(_unk10), unk11(_unk11)
, traceMask(_traceMask), navMeshType(_navMeshType) {}
const char* hullName;
int hullBit;
Vector3D mins;
Vector3D maxs;
float height; // IK Height?
float scale; // Some scale?
float unk10;
float unk11;
int traceMask;
NavMeshType_e navMeshType;
};
enum HullBits_e
{
bits_HUMAN_HULL = (1 << 0),
bits_MEDIUM_HULL = (1 << 1),
bits_FLYING_VEHICLE_HULL = (1 << 2),
bits_SMALL_HULL = (1 << 3),
bits_TITAN_HULL = (1 << 4),
bits_GOLIATH_HULL = (1 << 5),
bits_PROWLER_HULL = (1 << 6),
};
static inline const char* g_aiHullNames[NUM_HULLS] = {
"HULL_HUMAN",
"HULL_MEDIUM",
"HULL_FLYING_VEHICLE",
"HULL_SMALL",
"HULL_TITAN",
"HULL_GOLIATH",
"HULL_PROWLER",
};
static inline const Hull_s g_aiHullProperties[NUM_HULLS] = {
{g_aiHullNames[HULL_HUMAN] , bits_HUMAN_HULL , Vector3D(-16.0f, -16.0f, 0.0f) , Vector3D(16.0f, 16.0f, 72.0f) , 18.0f, 0.5f , 60.0f , 250.0f, CONTENTS_HITBOX|CONTENTS_MONSTER|CONTENTS_NOAIRDROP|CONTENTS_OPERATORCLIP|CONTENTS_BULLETCLIP|CONTENTS_BLOCKLOS, NAVMESH_SMALL},
{g_aiHullNames[HULL_MEDIUM] , bits_MEDIUM_HULL , Vector3D(-48.0f, -48.0f, 0.0f) , Vector3D(48.0f, 48.0f, 150.0f) , 32.0f, 0.5f , 256.0f, 256.0f, CONTENTS_HITBOX|CONTENTS_DEBRIS , NAVMESH_MEDIUM},
{g_aiHullNames[HULL_FLYING_VEHICLE], bits_FLYING_VEHICLE_HULL, Vector3D(-150.0f, -150.0f, 0.0f), Vector3D(150.0f, 150.0f, 300.0f), 80.0f, 0.5f , 0.0f , 0.0f , CONTENTS_EMPTY , NAVMESH_LARGE},
{g_aiHullNames[HULL_SMALL] , bits_SMALL_HULL , Vector3D(-16.0f, -16.0f, 0.0f) , Vector3D(16.0f, 16.0f, 32.0f) , 18.0f, 0.5f , 0.0f , 0.0f , CONTENTS_EMPTY , NAVMESH_SMALL},
{g_aiHullNames[HULL_TITAN] , bits_TITAN_HULL , Vector3D(-60.0f, -60.0f, 0.0f) , Vector3D(60.0f, 60.0f, 235.0f) , 80.0f, 0.89999998f, 60.0f , 512.0f, CONTENTS_HITBOX|CONTENTS_DEBRIS|CONTENTS_OPERATORCLIP , NAVMESH_LARGE},
{g_aiHullNames[HULL_GOLIATH] , bits_GOLIATH_HULL , Vector3D(-80.0f, -80.0f, 0.0f) , Vector3D(80.0f, 80.0f, 235.0f) , 80.0f, 0.69999999f, 100.0f, 768.0f, CONTENTS_HITBOX|CONTENTS_DEBRIS|CONTENTS_OPERATORCLIP , NAVMESH_EXTRA_LARGE},
{g_aiHullNames[HULL_PROWLER] , bits_PROWLER_HULL , Vector3D(-40.0f, -40.0f, 0.0f) , Vector3D(40.0f, 40.0f, 72.0f) , 18.0f, 0.5f , 60.0f , 250.0f, CONTENTS_HITBOX|CONTENTS_MONSTER|CONTENTS_NOAIRDROP|CONTENTS_OPERATORCLIP|CONTENTS_BULLETCLIP|CONTENTS_BLOCKLOS, NAVMESH_MED_SHORT},
};
//=============================================================================
// >> CAI_Hull
//=============================================================================
namespace NAI_Hull
{
inline const Vector3D& Mins(const Hull_e id) { return g_aiHullProperties[id].mins; }
inline const Vector3D& Maxs(const Hull_e id) { return g_aiHullProperties[id].maxs; }
inline float Length(const Hull_e id) { return (g_aiHullProperties[id].maxs.x - g_aiHullProperties[id].mins.x); }
inline float Width(const Hull_e id) { return (g_aiHullProperties[id].maxs.y - g_aiHullProperties[id].mins.y); }
inline float Height(const Hull_e id) { return (g_aiHullProperties[id].maxs.z - g_aiHullProperties[id].mins.z); }
inline int Bits(const Hull_e id) { return g_aiHullProperties[id].hullBit; }
inline const char* Name(const Hull_e id) { return g_aiHullProperties[id].hullName; }
inline unsigned int TraceMask(const Hull_e id) { return g_aiHullProperties[id].traceMask; };
inline Hull_e LookupId(const char* const szName)
{
if (!szName)
{
// Return the first if null.
return HULL_HUMAN;
}
for (int i = 0; i < NUM_HULLS; i++)
{
if (stricmp(szName, NAI_Hull::Name((Hull_e)i)) == 0)
{
return (Hull_e)i;
}
}
return HULL_HUMAN;
}
};
#endif // AI_HULL_H