typedef struct {
char *name; // mod name
char *version; // mod version
DWORD crc32; // crc32 checksum
modType_t type; // mod type
DWORD refdef; // addr of refdef
DWORD refdefViewAngles; // addr of refdefVA
// Refer to CG_ConsoleCommand to find these (or vmmain command case 0x2)
DWORD commands; // addr of console command list
int numCommands; // number of commands in list
// These will be used to fill in the pointers to player data
DWORD centBase; // &cg_entities[0]
DWORD centSize; // sizeof(centity_t)
DWORD centCurrentStateOffset; // currentState offset
DWORD ciBase; // &clientInfo[0]
DWORD ciSize; // sizeof(clientInfo_t)
DWORD ciInfoValidOffset; // infoValid offset
DWORD ciNameOffset; // name offset
DWORD ciTeamOffset; // team offset
DWORD CG_Init; // called every time cgame.dll is loaded
DWORD CG_Shutdown; // called on every map change
DWORD CG_DrawActiveFrame; // called every frame
DWORD CG_Player; // called for each player every frame
DWORD CG_SetLerpFrameAnimationRate; // used to capture clientinfo base & size for unknown mods
DWORD CG_FinishWeaponChange; // changes between 2 weapons. i.e. forced change scoped -> normal
DWORD CG_PlayVoiceChat; // capture voice chat messages for GUI
DWORD CG_EntityEvent; // get EntitiyEvent info
DWORD CG_Trace; // run entity traces
DWORD CG_DamageFeedback; // disable view distortion from being hit
DWORD CG_WeaponFireRecoil; // disable view distortion when firing
DWORD CG_Respawn; // lots of stuff we can reset or whatever on respawn
DWORD CG_DrawNewCompass; // Std UI functions to remove
DWORD CG_AddToTeamChat;
DWORD CG_AddToTeamChat2; // only needed by etmain 2.60
DWORD CG_AddPMItem;
DWORD CG_AddPMItem2; // jaymod version
DWORD CG_DrawPlayerStatusHead;
DWORD CG_DrawPlayerStats;
DWORD CG_AntiCheat; // etpro AntiCheat func
DWORD CG_ConfigString; // used for bypassing ETPRO anti-cheat
DWORD SyscallResetCode; // if (orig_syscall != 0x445810) orig_syscall = 0x445810;
} cgMod_t