idRandom random; // random number generator used throughout the game
idProgram program; // currently loaded script and data space
idThread * frameCommandThread;
idPush push; // geometric pushing
idPVS pvs; // potential visible set
pvsHandle_t clientsPVS[MAX_CLIENTS];// PVS of multiplayer clients updated every frame
idTestModel * testmodel; // for development testing of models
// RAVEN BEGIN
// bdube: not using id effects
// idEntityFx * testFx; // for development testing of fx
// RAVEN END
// only set when an end level is activated, which will take over camera positioning
// and draw end-level guis, then
idStr sessionCommand; // a target_sessionCommand can set this to return something to the session
idMultiplayerGame mpGame; // handles rules for standard dm
// RAVEN BEGIN
// bdube: not using smoke particles
// idSmokeParticles * smokeParticles; // global smoke trails
// RAVEN END
idEditEntities * editEntities; // in game editing
int cinematicSkipTime; // don't allow skipping cinemetics until this time has passed so player doesn't skip out accidently from a firefight
int cinematicStopTime; // cinematics have several camera changes, so keep track of when we stop them so that we don't reset cinematicSkipTime unnecessarily
int cinematicMaxSkipTime; // time to end cinematic when skipping. there's a possibility of an infinite loop if the map isn't set up right.
bool inCinematic; // game is playing cinematic (player controls frozen)
bool skipCinematic;
// are kept up to date with changes to serverInfo
int framenum;
int previousTime; // time in msec of last frame
int time; // in msec
int msec; // time since last update in milliseconds
int mHz; // hertz
int vacuumAreaNum; // -1 if level doesn't have any outside areas
// RAVEN BEGIN
// abahr:
idList<rvGravityArea*> gravityInfo; // area num for each gravity zone
virtual void ServerClientConnect( int clientNum );
virtual void ServerClientBegin( int clientNum );
virtual void ServerClientDisconnect( int clientNum );
virtual void ServerWriteInitialReliableMessages( int clientNum );
// RAVEN BEGIN
// jnewquist: Use dword array to match pvs array so we don't have endianness problems.
virtual void ServerWriteSnapshot( int clientNum, int sequence, idBitMsg &msg, dword *clientInPVS, int numPVSClients );
// RAVEN END
virtual bool ServerApplySnapshot( int clientNum, int sequence );
virtual void ServerProcessReliableMessage( int clientNum, const idBitMsg &msg );
virtual void ClientReadSnapshot( int clientNum, int sequence, const int gameFrame, const int gameTime, const int dupeUsercmds, const int aheadOfServer, const idBitMsg &msg );
virtual bool ClientApplySnapshot( int clientNum, int sequence );
virtual void ClientProcessReliableMessage( int clientNum, const idBitMsg &msg );
do not synchronize implicit decls over the network
implicit decls are created when loading sounds and materials that don't have an explicit entry in the def files
clients and server may load those in different orders in a same map, or even join in with different orders because of different map histories before this game
in D3 we maintain remap tables, but it's much better to have tighter multiplayer assets so we have no need at all
still, you want to catch when bad things happen, so indexes should ALL be read and written through these functions