[Misc]: Updated files from 'scr/Game' folder

This commit is contained in:
JerryALT 2024-06-18 15:08:08 +03:00
parent 0ddebb9b68
commit 1944dc360c
5 changed files with 502 additions and 114 deletions

View File

@ -11,6 +11,7 @@ namespace Game
Game::cg_s* cgs = reinterpret_cast<Game::cg_s*>(0x6FA590);
Game::cgMedia_t* cgMedia = reinterpret_cast<Game::cgMedia_t*>(0x729400);
Game::cgs_t* cgsArray = reinterpret_cast<Game::cgs_t*>(0x6FA130);
Game::centity_s* cg_entitiesArray = reinterpret_cast<Game::centity_s*>(0x72B6E8);
Game::clientActive_t* clients = reinterpret_cast<Game::clientActive_t*>(0x85BD98);
Game::clientUIActive_t* clientUIActive = reinterpret_cast<Game::clientUIActive_t*>(0x85BD70);
Game::CinematicGlob* cinematicGlob = reinterpret_cast<Game::CinematicGlob*>(0x1621600);
@ -37,8 +38,12 @@ namespace Game
Game::uiInfo_s* uiInfo = reinterpret_cast<Game::uiInfo_s*>(0x1290F50);
Game::weaponInfo_s* cg_weaponsArray = reinterpret_cast<Game::weaponInfo_s*>(0x6F7C88);
Game::WinMouseVars_t* s_wmv = reinterpret_cast<Game::WinMouseVars_t*>(0x13E06F0);
Game::DxGlobals* dx = reinterpret_cast<Game::DxGlobals*>(0x1623F84);
int* g_currentMenuType = reinterpret_cast<int*>(0x1E209B4);
Game::server_t* sv = reinterpret_cast<Game::server_t*>(0x14B10F8);
Game::serverStatic_t* svs = reinterpret_cast<Game::serverStatic_t*>(0x14C2B98);
longjmp_internal_t longjmp_internal = longjmp_internal_t(0x64285C);
int* g_waitingForKey = reinterpret_cast<int*>(0x1E209C4);
@ -280,7 +285,7 @@ namespace Game
if (Game::HasLoadedMod())
fontscalea = fontscalea = scrPlace->scaleVirtualToReal[1] * scale;
else
fontscalea = (Dvars::console_menu_style->current.enabled) ? fontscalea = 1.5 * scale : fontscalea = scrPlace->scaleVirtualToReal[1] * scale;
fontscalea = (Dvars::console_menu_style->current.enabled) ? fontscalea = 1.5f * scale : fontscalea = scrPlace->scaleVirtualToReal[1] * scale;
const auto ui_smallFont = Dvars::Functions::Dvar_FindVar("ui_smallFont");
const auto ui_extraBigFont = Dvars::Functions::Dvar_FindVar("ui_extraBigFont");
@ -331,13 +336,13 @@ namespace Game
int UI_TextWidth(const char* text, int maxChars, Font_s* font, float scale)
{
float normscale = R_NormalizedTextScale(font, scale);
float normscale = static_cast<float>(R_NormalizedTextScale(font, scale));
return (int)((float)R_TextWidth(text, maxChars, font) * normscale);
}
int UI_TextHeight(Font_s* font, float scale)
{
float normscale = R_NormalizedTextScale(font, scale);
float normscale = static_cast<float>(R_NormalizedTextScale(font, scale));
return (int)((float)R_TextHeight(font) * normscale);
}
@ -352,7 +357,7 @@ namespace Game
{
case 7:
v7 = *x * ScrPlace->scaleVirtualToReal[0];
v8 = (float)(ScrPlace->realViewableMin[0] + ScrPlace->realViewableMax[0]) * 0.5;
v8 = (float)(ScrPlace->realViewableMin[0] + ScrPlace->realViewableMax[0]) * 0.5f;
*x = v7 + v8;
*w = *w * ScrPlace->scaleVirtualToReal[0];
break;
@ -372,7 +377,7 @@ namespace Game
break;
case 2:
v7 = *x * ScrPlace->scaleVirtualToReal[0];
v8 = 0.5 * ScrPlace->realViewportSize[0];
v8 = 0.5f * ScrPlace->realViewportSize[0];
*x = v7 + v8;
*w = *w * ScrPlace->scaleVirtualToReal[0];
break;
@ -390,7 +395,7 @@ namespace Game
{
case 7:
v9 = *y * ScrPlace->scaleVirtualToReal[1];
v10 = (float)(ScrPlace->realViewableMin[1] + ScrPlace->realViewableMax[1]) * 0.5;
v10 = (float)(ScrPlace->realViewableMin[1] + ScrPlace->realViewableMax[1]) * 0.5f;
*y = v9 + v10;
*h = *h * ScrPlace->scaleVirtualToReal[1];
case 6:
@ -409,7 +414,7 @@ namespace Game
break;
case 2:
v9 = *y * ScrPlace->scaleVirtualToReal[1];
v10 = 0.5 * ScrPlace->realViewportSize[1];
v10 = 0.5f * ScrPlace->realViewportSize[1];
*y = v9 + v10;
*h = *h * ScrPlace->scaleVirtualToReal[1];
break;
@ -430,8 +435,8 @@ namespace Game
float yScale = xScale;
ScrPlace_ApplyRect(ScrPlace, &ix, &iy, &xScale, &yScale, horzAlign, vertAlign);
int x = floor(ix + 0.5);
int y = floor(iy + 0.5);
float x = floor(ix + 0.5f);
float y = floor(iy + 0.5f);
R_AddCmdDrawTextASM(text, maxChars, font, x, y, xScale, yScale, 0.0, color, style);
}
@ -677,59 +682,24 @@ namespace Game
if (name == boneNames[localBoneIndex])
break;
}
*index = localBoneIndex + offset;
*index = static_cast<unsigned char>(localBoneIndex + offset);
return 1;
}
/*
int DObjGetBoneIndex(Game::DObj_s* obj, unsigned int name, unsigned __int8* index)
int DObjGetBoneIndex(const DObj_s* obj/*ecx*/, unsigned int name, unsigned __int8* index)
{
int j; // [esp+0h] [ebp-18h]
int ja; // [esp+0h] [ebp-18h]
unsigned int boneIndex; // [esp+4h] [ebp-14h]
int numModels; // [esp+8h] [ebp-10h]
Game::XModel* model; // [esp+Ch] [ebp-Ch]
Game::XModel* modela; // [esp+Ch] [ebp-Ch]
unsigned int localBoneIndex; // [esp+10h] [ebp-8h]
Game::XModel** models; // [esp+14h] [ebp-4h]
localBoneIndex = *index;
if (localBoneIndex == 255)
return 0;
models = obj->models;
numModels = obj->numModels;
if (localBoneIndex < obj->numBones)
int result;
const static uint32_t DObjGetBoneIndex_func = 0x59A090;
__asm
{
for (j = 0; j < numModels; ++j)
{
model = models[j];
if (localBoneIndex < model->numBones)
{
if (name != model->boneNames[localBoneIndex])
break;
return 1;
}
localBoneIndex -= model->numBones;
}
push index;
push name;
mov ecx, obj;
call DObjGetBoneIndex_func;
add esp, 8;
mov result, eax;
}
boneIndex = 0;
for (ja = 0; ja < numModels; ++ja)
{
modela = models[ja];
if (XModelGetBoneIndex(modela, name, boneIndex, index))
return 1;
boneIndex += modela->numBones;
}
*index = -1;
return 0;
}
*/
//skill issue
int DObjGetBoneIndex(Game::DObj_s* obj, unsigned int name, unsigned __int8* index)
{
return 1;
return result;
}
void ChangeViewmodelDobj(int weapIndex /*eax*/, unsigned __int8 weaponModel /*cl*/, Game::XModel* newHands, Game::XModel* newGoggles, Game::XModel* newRocket, Game::XModel* newKnife, char updateClientInfo)
@ -1006,7 +976,7 @@ namespace Game
float AngleNormalize360(float angle)
{
return (360.0 / 65536) * ((int)(angle * (65536 / 360.0)) & 65535);
return (360.0f / 65536.0f) * ((int)(angle * (65536.0f / 360.0f)) & 65535);
}
float AngleNormalize180(float angle) {
@ -1054,14 +1024,14 @@ namespace Game
break;
case 9:
v7 = secondChar + (firstChar << 8);
if (Taiwanese_ValidBig5Code(v7))
if (Taiwanese_ValidBig5Code(static_cast<uint16_t>(v7)))
{
*usedCount = 2;
return v7;
}
break;
case 10:
if (sub_55C380(firstChar, secondChar))
if (sub_55C380(static_cast<uint16_t>(firstChar), static_cast<uint16_t>(secondChar)))
{
*usedCount = 2;
return secondChar + (firstChar << 8);
@ -1069,7 +1039,7 @@ namespace Game
break;
case 11:
v7 = secondChar + (firstChar << 8);
if (sub_55C3B0(v7))
if (sub_55C3B0(static_cast<uint16_t>(v7)))
{
*usedCount = 2;
return v7;
@ -1415,4 +1385,62 @@ namespace Game
add esp, 8;
}
}
Game::centity_s* CG_GetEntity(int entityIndex)
{
return &Game::cg_entitiesArray[384 * entityIndex];
}
int CL_ControllerIndexFromClientNum()
{
return 0;
}
float CG_CornerDebugPrint/*<st0>*/(const float* color/*eax*/, const char* text/*ecx*/, const Game::ScreenPlacement* ScrPlace, float posX, float posY, float labelWidth, const char* label)
{
float result;
const uint32_t CG_CornerDebugPrint_func = 0x4113A0;
__asm
{
push label;
sub esp, 0Ch;
fld labelWidth;
fstp [esp + 8h];
fld posY;
fstp [esp + 4h];
fld posX;
fstp [esp];
push ScrPlace;
mov eax, [color];
mov ecx, [text];
call CG_CornerDebugPrint_func;
add esp, 14h;
fstp dword ptr[result];
}
return result;
}
Com_ClientDObjCreate_t Com_ClientDObjCreate = Com_ClientDObjCreate_t(0x535F30);
void AmmoColor(cg_s* cgameGlob/*edi*/, float* color/*esi*/, int weapIndex/*eax*/)
{
const uint32_t AmmoColor_func = 0x408CA0;
__asm
{
pushad;
mov edi, [cgameGlob];
mov esi, [color];
mov eax, weapIndex;
call AmmoColor_func;
popad;
}
}
}

View File

@ -18,6 +18,7 @@ namespace Game
extern Game::cg_s* cgs;
extern Game::cgMedia_t* cgMedia;
extern Game::cgs_t* cgsArray;
extern Game::centity_s* cg_entitiesArray;
extern Game::clientActive_t* clients;
extern Game::clientUIActive_t* clientUIActive;
extern Game::CinematicGlob* cinematicGlob;
@ -42,8 +43,12 @@ namespace Game
extern Game::WeaponDef_s** bg_weaponDefs;
extern Game::weaponInfo_s* cg_weaponsArray;
extern Game::WinMouseVars_t* s_wmv;
extern Game::DxGlobals* dx;
extern int* g_currentMenuType;
extern Game::server_t* sv;
extern Game::serverStatic_t* svs;
extern int* g_waitingForKey;
extern bool* isDvarSystemActive;
extern int* level_initializing;
@ -172,7 +177,7 @@ namespace Game
unsigned int G_GetWeaponIndexForName(const char* name);
int DObjGetBoneIndex(Game::DObj_s* obj, unsigned int name, unsigned __int8* index);
int DObjGetBoneIndex(const DObj_s* obj/*ecx*/, unsigned int name, unsigned __int8* index);
int XModelGetBoneIndex(Game::XModel* model, unsigned int name, unsigned int offset, unsigned __int8* index);
void ChangeViewmodelDobj(int weapIndex /*eax*/, unsigned __int8 weaponModel /*cl*/, Game::XModel* newHands, Game::XModel* newGoggles, Game::XModel* newRocket, Game::XModel* newKnife, char updateClientInfo);
@ -269,4 +274,16 @@ namespace Game
int CG_PlayClientSoundAlias/*eax*/(Game::snd_alias_list_t* aliasList/*eax*/, int localClientNum, float* origin);
void DynEntCl_PlayEventFx(const float* origin/*edx*/, int axis/*ecx*/, const Game::FxEffectDef* def, int time);
Game::centity_s* CG_GetEntity(int entityIndex);
//rumble
int CL_ControllerIndexFromClientNum();
float CG_CornerDebugPrint/*<st0>*/(const float* color/*eax*/, const char* text/*ecx*/, const Game::ScreenPlacement* ScrPlace, float posX, float posY, float labelWidth, const char* label);
typedef Game::DObj_s* (*Com_ClientDObjCreate_t)(Game::DObjModel_s* dobjModels, std::uint16_t numModels, Game::XAnimTree_s* tree, int handle);
extern Com_ClientDObjCreate_t Com_ClientDObjCreate;
void AmmoColor(Game::cg_s* cgameGlob/*edi*/, float* color/*esi*/, int weapIndex/*eax*/);
}

View File

@ -5,9 +5,16 @@ namespace Game
Game::cgMedia_t_mod cgMediaMod = {};
Game::gui_t gui = {};
IDirect3DDevice9* d3d9_device = nullptr;
bool HasLoadedMod()
{
std::string modDir = Dvars::Functions::Dvar_FindVar("fs_game")->current.string;
return !modDir.empty();
}
bool DebugModeEnabled()
{
return Components::Flags::HasFlag("debug");
}
}

View File

@ -28,5 +28,8 @@ namespace Game
extern Game::cgMedia_t_mod cgMediaMod;
extern Game::gui_t gui;
extern IDirect3DDevice9* d3d9_device;
bool HasLoadedMod();
bool DebugModeEnabled();
}

View File

@ -128,7 +128,6 @@ namespace Game
ASSET_TYPE_ASSETLIST = 0x22,
};
//Sounds Structure
typedef enum
{
SAT_UNKNOWN = 0x0,
@ -1964,36 +1963,40 @@ namespace Game
__int16 steerYaw;
float time;
unsigned __int16 wheelFraction[6];
char wheelBoneIndex[6];
char tag_body;
char tag_turret;
char tag_barrel;
unsigned __int8 wheelBoneIndex[6];
unsigned __int8 tag_body;
unsigned __int8 tag_turret;
unsigned __int8 tag_barrel;
};
struct FxEffect;
struct CEntFx
{
int triggerTime;
int effect; //FxEffect*
FxEffect* effect;
};
union CEntity
{
CEntActorInfo actor;
CEntTurretInfo turret;
CEntVehicleInfo vehicle;
CEntFx fx;
};
struct cpose_t
{
unsigned __int16 lightingHandle;
char eType;
char eTypeUnion;
unsigned __int8 eType;
unsigned __int8 eTypeUnion;
bool isRagdoll;
int ragdollHandle;
int physObjId;
int cullIn;
float origin[3];
float angles[3];
union
{
CEntActorInfo actor;
CEntTurretInfo turret;
CEntVehicleInfo vehicle;
CEntFx fx;
}u9;
CEntity ent;
};
struct centity_s
@ -2004,7 +2007,7 @@ namespace Game
bool nextValid;
bool bMuzzleFlash;
bool bTrailMade;
char oldEType;
unsigned __int8 oldEType;
int previousEventSequence;
float lightingOrigin[3];
};
@ -4330,6 +4333,14 @@ namespace Game
XModel** models;
};
struct __declspec(align(4)) DObjModel_s
{
XModel* model;
unsigned __int16 boneName;
bool ignoreCollision;
};
struct weaponInfo_s
{
DObj_s* viewModelDObj;
@ -4406,13 +4417,10 @@ namespace Game
struct snapshot_s
{
int snapFlags;
int ping;
int serverTime;
playerState_s ps;
int numEntities;
int numClients;
entityState_s entities[512];
//clientState_s clients[64];
int entityNums[2048];
int serverCommandSequence;
};
@ -4508,31 +4516,6 @@ namespace Game
Material* textDecodeCharactersGlow;
}cgMedia_t;
/*
struct cg_s
{
int clientNum;
int localClientNum;
int nextState;
DemoType demoType;
CubemapShot cubemapShot;
int renderScreen;
int latestSnapshotNum;
int latestSnapshotTime;
snapshot_s* snap;
snapshot_s* nextSnap;
snapshot_s activeSnapshots[2];
float frameInterpolation;
int frametime;
int time;
int oldTime;
int physicsTime;
int mapRestart;
//int renderingThirdPerson;
playerState_s predictedPlayerState;
};
*/
struct playerEntity_t
{
float fLastWeaponPosFrac;
@ -4628,7 +4611,6 @@ namespace Game
OBJST_NUMSTATES = 0x6,
};
//from cod3sp
struct objectiveInfo_t
{
objectiveState_t state;
@ -4774,6 +4756,26 @@ namespace Game
int lastPlayedTime;
};
enum InvalidCmdHintType
{
INVALID_CMD_NONE = 0x0,
INVALID_CMD_NO_AMMO_BULLETS = 0x1,
INVALID_CMD_NO_AMMO_FRAG_GRENADE = 0x2,
INVALID_CMD_NO_AMMO_SPECIAL_GRENADE = 0x3,
INVALID_CMD_STAND_BLOCKED = 0x4,
INVALID_CMD_CROUCH_BLOCKED = 0x5,
INVALID_CMD_TARGET_TOO_CLOSE = 0x6,
INVALID_CMD_LOCKON_REQUIRED = 0x7,
INVALID_CMD_NOT_ENOUGH_CLEARANCE = 0x8,
};
struct cg_s_shellshock_test
{
int time;
int duration;
};
// Reversed
struct cg_s
{
int clientNum;
@ -4797,8 +4799,8 @@ namespace Game
int physicsTime;
playerState_s predictedPlayerState;
centity_s predictedPlayerEntity;
char gap0[12];
playerEntity_t playerEntity;
char gap0[12];
int validPPS;
int predictedErrorTime;
float predictedError[3];
@ -4828,7 +4830,7 @@ namespace Game
int cursorHintFade;
int cursorHintString;
int lastClipFlashTime;
int invalidCmdHintType;
InvalidCmdHintType invalidCmdHintType;
int invalidCmdHintTime;
int lastHealthPulseTime;
int lastHealthLerpDelay;
@ -4865,6 +4867,7 @@ namespace Game
float kickAVel[3];
float kickAngles[3];
float gunPitch;
bool gameSaved;
float gunYaw;
float gunXOfs;
float gunYOfs;
@ -4878,21 +4881,20 @@ namespace Game
float selectedLocation[2];
float compassNorthYaw;
float compassNorth[2];
int compassMapMaterial;
Material* compassMapMaterial;
float compassMapUpperLeft[2];
float compassMapWorldSize[2];
int compassFadeTime;
int healthFadeTime;
char gap1[4];
int ammoFadeTime;
int stanceFadeTime;
int sprintFadeTime;
int offhandFadeTime;
int offhandFlashTime;
char gap1[4];
objectiveInfo_t objectives[16];
targetInfo_t targets[32];
shellshock_t shellshock;
cgShockinfo_t testShock;
cg_s_shellshock_test testShock;
int holdBreathTime;
int holdBreathInTime;
int holdBreathDelay;
@ -4910,6 +4912,7 @@ namespace Game
visionSetVars_t visionSetTo[2];
visionSetVars_t visionSetCurrent[2];
visionSetLerpData_t visionSetLerpData[2];
char gap2[12];
char visionNameNaked[64];
char visionNameNight[64];
int extraButtons;
@ -4918,8 +4921,8 @@ namespace Game
int stepViewStart;
float stepViewChange;
float zNear;
int cinematicTime;
hudElemSoundInfo_t hudElemSound[32];
char gap2[16];
};
enum svscmd_type
@ -6382,4 +6385,334 @@ namespace Game
bool cinematicFinished;
char gap0[1788];
};
struct GfxWindowTarget
{
HWND__* hwnd;
IDirect3DSwapChain9* swapChain;
int width;
int height;
};
struct __declspec(align(8)) DxGlobals
{
IDirect3D9* d3d9;
IDirect3DDevice9* device;
unsigned int adapterIndex;
bool adapterNativeIsValid;
int adapterNativeWidth;
int adapterNativeHeight;
int adapterFullscreenWidth;
int adapterFullscreenHeight;
int depthStencilFormat;
unsigned int displayModeCount;
_D3DDISPLAYMODE displayModes[256];
const char* resolutionNameTable[257];
const char* refreshRateNameTable[257];
char modeText[5120];
IDirect3DQuery9* fencePool[8];
unsigned int nextFence;
int gpuSync;
int multiSampleType;
unsigned int multiSampleQuality;
int sunSpriteSamples;
IDirect3DSurface9* singleSampleDepthStencilSurface;
bool deviceLost;
bool inScene;
int targetWindowIndex;
int windowCount;
GfxWindowTarget windows[1];
int flushGpuQueryCount;
IDirect3DQuery9* flushGpuQuery;
unsigned __int64 gpuSyncDelay;
unsigned __int64 gpuSyncStart;
unsigned __int64 gpuSyncEnd;
bool flushGpuQueryIssued;
int linearNonMippedMinFilter;
int linearNonMippedMagFilter;
int linearMippedMinFilter;
int linearMippedMagFilter;
int anisotropicMinFilter;
int anisotropicMagFilter;
int linearMippedAnisotropy;
int anisotropyFor2x;
int anisotropyFor4x;
int mipFilterMode;
unsigned int mipBias;
IDirect3DQuery9* swapFence;
};
enum serverState_t
{
SS_DEAD = 0x0,
SS_LOADING = 0x1,
SS_GAME = 0x2,
};
struct svEntity_s
{
unsigned __int16 worldSector;
unsigned __int16 nextEntityInWorldSector;
int linkcontents;
float linkmin[2];
float linkmax[2];
};
struct snapshotEntityNumbers_t
{
int numSnapshotEntities;
int snapshotEntities[2048];
};
// Fully Reversed
struct server_t
{
serverState_t state;
int timeResidual;
bool clearTimeResidual;
int pendingSnapshot;
int inFrame;
int clientMessageTimeout;
int partialFrametime;
int nextFrameTime;
cmodel_t* models[512];
unsigned __int16 emptyConfigString;
unsigned __int16 configstrings[2815];
svEntity_s svEntities[2176];
int gentities;
int gentitySize;
int num_entities;
playerState_s* gameClients;
int gameClientSize;
int checksum;
int levelTime;
int skelTimeStamp;
unsigned int skelMemPos;
int previousTime;
int previousTimeIndex;
int previousTotalTimes[10];
int previousErrorTimes[10];
snapshotEntityNumbers_t entityNumbers;
char cmd[1024];
char cmd2[1024];
char cmd3[1024];
char cmd4[1024];
};
struct serverCommandsHeader_t
{
int rover;
int sequence;
int sent;
};
struct serverCommands_s
{
serverCommandsHeader_t header;
char buf[8192];
int commands[256];
};
struct netchan_t
{
int outgoingSequence;
};
struct client_t
{
int state;
serverCommands_s reliableCommands;
usercmd_s lastUsercmd;
gentity_s* gentity;
playerState_s frames[1];
netchan_t netchan;
};
enum netadrtype_t
{
NA_BOT = 0x0,
NA_BAD = 0x1,
NA_LOOPBACK = 0x2,
NA_BROADCAST = 0x3,
NA_IP = 0x4,
};
struct netadr_t
{
netadrtype_t type;
unsigned __int8 ip[4];
unsigned __int8 ipx[10];
unsigned __int16 port;
};
// Fully Reversed
struct serverStatic_t
{
int initialized;
int snapFlagServerBit;
client_t* clients;
int numSnapshotEntities;
int nextSnapshotEntities;
netadr_t authorizeAddress;
int playerDeaths;
int playerScore;
};
enum DevEventType
{
EVENT_ACTIVATE = 0x0,
EVENT_DEACTIVATE = 0x1,
EVENT_ACCEPT = 0x2,
EVENT_UPDATE = 0x3,
EVENT_DRAW = 0x4,
EVENT_SAVE = 0x5,
};
struct __declspec(align(4)) DevGraph
{
float(*knots)[2];
int* knotCount;
int knotCountMax;
int selectedKnot;
void(__cdecl* eventCallback)(const DevGraph*, DevEventType, int);
void(__cdecl* textCallback)(const DevGraph*, const float, const float, char*, const int);
void* data;
bool disableEditingEndPoints;
};
struct RumbleInfo;
struct RumbleGraph;
struct RumbleDevguiGraphInfo
{
RumbleInfo* rumbleInfo;
RumbleGraph* rumbleGraph;
};
struct RumbleGraph
{
char graphName[64];
float knots[16][2];
int knotCount;
DevGraph devguiGraph;
RumbleDevguiGraphInfo devguiGraphInfo;
};
struct RumbleInfo
{
int rumbleNameIndex;
float duration;
float range;
RumbleGraph* highRumbleGraph;
RumbleGraph* lowRumbleGraph;
int fadeWithDistance;
int broadcast;
const dvar_s* durationDvar;
const dvar_s* loopDvar;
};
union RumbleSource
{
int entityNum;
float pos[3];
};
enum RumbleSourceType
{
RUMBLESOURCE_INVALID = 0x0,
RUMBLESOURCE_ENTITY = 0x1,
RUMBLESOURCE_POS = 0x2,
};
struct ActiveRumble
{
RumbleInfo* rumbleInfo;
int startTime;
bool loop;
RumbleSourceType sourceType;
unsigned char scale;
RumbleSource source;
};
struct RumbleGlobals
{
RumbleGraph graphs[64];
RumbleInfo infos[32];
ActiveRumble activeRumbles[32];
float receiverPos[3];
int receiverEntNum;
};
//struct level_locals_t
//{
// gclient_s* clients;
// gentity_s* gentities;
// int gentitySize;
// int num_entities;
// gentity_s* firstFreeEnt;
// gentity_s* lastFreeEnt;
// sentient_s* sentients;
// int actors;
// int vehicles;
// int turrets;
// int initializing;
// int clientIsSpawning;
// int maxclients;
// int framenum;
// int time;
// int previousTime;
// int snapTime;
// int newSession;
// char gap0[4];
// int actorCount;
// SpawnVar spawnVar;
// int reloadDelayTime;
// int absoluteReloadDelayTime;
// EntHandle droppedWeaponCue[32];
// int changelevel;
// int bMissionSuccess;
// int bMissionFailed;
// int exitTime;
// int savepersist;
// char cinematic[64];
// float fFogOpaqueDist;
// float fFogOpaqueDistSqrd;
// unsigned int grenadeHintCount;
// int remapCount;
// int iSearchFrame;
// loading_t loading;
// int actorPredictDepth;
// int bDrawCompassFriendlies;
// int bPlayerIgnoreRadiusDamage;
// int bPlayerIgnoreRadiusDamageLatched;
// int unknown_1;
// unsigned __int8 triggerIndex;
// int currentEntityThink;
// int currentIndex;
// bool checkAnimChange;
// int bRegisterItems;
// int framePos;
// cached_tag_mat_t cachedTagMat;
// cached_tag_mat_t cachedEntTargetTagMat;
// unsigned __int16 soundAliasFirst;
// unsigned __int16 soundAliasLast;
// trigger_info_t pendingTriggerList[256];
// trigger_info_t currentTriggerList[256];
// int pendingTriggerListSize;
// int currentTriggerListSize;
// unsigned __int8 entTriggerIndex[2176];
// unsigned __int8 specialIndex[2176];
// char gap2[2304]; // <-- need research
// unsigned __int8 cgData_actorOnCompass[32];
// unsigned __int8 cgData_actorTeam[32];
// unsigned __int16 modelMap[512];
// float priorityNodeBias;
// int scriptPrintChannel;
// float compassMapUpperLeft[2];
// float compassMapWorldSize[2];
// float compassNorth[2];
// float mapSunColor[3];
// float mapSunDirection[3];
//};
}