// Copyright (C) 1999-2000 Id Software, Inc. // #ifndef __CG_PUBLIC_H #define __CG_PUBLIC_H #define CMD_BACKUP 64 #define CMD_MASK (CMD_BACKUP - 1) // allow a lot of command backups for very fast systems // multiple commands may be combined into a single packet, so this // needs to be larger than PACKET_BACKUP #define MAX_ENTITIES_IN_SNAPSHOT 256 // snapshots are a view of the server at a given time // Snapshots are generated at regular time intervals by the server, // but they may not be sent if a client's rate level is exceeded, or // they may be dropped by the network. typedef struct { int snapFlags; // SNAPFLAG_RATE_DELAYED, etc int ping; int serverTime; // server time the message is valid for (in msec) byte areamask[MAX_MAP_AREA_BYTES]; // portalarea visibility bits playerState_t ps; // complete information about the current player at this time playerState_t vps; //vehicle I'm riding's playerstate (if applicable) -rww int numEntities; // all of the entities that need to be presented entityState_t entities[MAX_ENTITIES_IN_SNAPSHOT]; // at the time of this snapshot int numServerCommands; // text based server commands to execute when this int serverCommandSequence; // snapshot becomes current } snapshot_t; enum { CGAME_EVENT_NONE, CGAME_EVENT_TEAMMENU, CGAME_EVENT_SCOREBOARD, CGAME_EVENT_EDITHUD }; /* ================================================================== functions imported from the main executable ================================================================== */ #define CGAME_IMPORT_API_VERSION 5 typedef enum { CG_PRINT = 0, CG_ERROR, CG_MILLISECONDS, //Also for profiling.. do not use for game related tasks. CG_PRECISIONTIMER_START, CG_PRECISIONTIMER_END, CG_CVAR_REGISTER, CG_CVAR_UPDATE, CG_CVAR_SET, CG_CVAR_VARIABLESTRINGBUFFER, CG_CVAR_GETHIDDENVALUE, CG_ARGC, CG_ARGV, CG_ARGS, CG_FS_FOPENFILE, CG_FS_READ, CG_FS_WRITE, CG_FS_FCLOSEFILE, CG_FS_GETFILELIST, CG_SENDCONSOLECOMMAND, CG_ADDCOMMAND, CG_REMOVECOMMAND, CG_SENDCLIENTCOMMAND, CG_UPDATESCREEN, CG_CM_LOADMAP, CG_CM_NUMINLINEMODELS, CG_CM_INLINEMODEL, CG_CM_TEMPBOXMODEL, CG_CM_TEMPCAPSULEMODEL, CG_CM_POINTCONTENTS, CG_CM_TRANSFORMEDPOINTCONTENTS, CG_CM_BOXTRACE, CG_CM_CAPSULETRACE, CG_CM_TRANSFORMEDBOXTRACE, CG_CM_TRANSFORMEDCAPSULETRACE, CG_CM_MARKFRAGMENTS, CG_S_GETVOICEVOLUME, CG_S_MUTESOUND, CG_S_STARTSOUND, CG_S_STARTLOCALSOUND, CG_S_CLEARLOOPINGSOUNDS, CG_S_ADDLOOPINGSOUND, CG_S_UPDATEENTITYPOSITION, CG_S_ADDREALLOOPINGSOUND, CG_S_STOPLOOPINGSOUND, CG_S_RESPATIALIZE, CG_S_SHUTUP, CG_S_REGISTERSOUND, CG_S_STARTBACKGROUNDTRACK, //rww - AS trap implem CG_S_UPDATEAMBIENTSET, CG_AS_PARSESETS, CG_AS_ADDPRECACHEENTRY, CG_S_ADDLOCALSET, CG_AS_GETBMODELSOUND, CG_R_LOADWORLDMAP, CG_R_REGISTERMODEL, CG_R_REGISTERSKIN, CG_R_REGISTERSHADER, CG_R_REGISTERSHADERNOMIP, CG_R_REGISTERFONT, CG_R_FONT_STRLENPIXELS, CG_R_FONT_STRLENCHARS, CG_R_FONT_STRHEIGHTPIXELS, CG_R_FONT_DRAWSTRING, CG_LANGUAGE_ISASIAN, CG_LANGUAGE_USESSPACES, CG_ANYLANGUAGE_READCHARFROMSTRING, CGAME_MEMSET = 100, CGAME_MEMCPY, CGAME_STRNCPY, CGAME_SIN, CGAME_COS, CGAME_ATAN2, CGAME_SQRT, CGAME_MATRIXMULTIPLY, CGAME_ANGLEVECTORS, CGAME_PERPENDICULARVECTOR, CGAME_FLOOR, CGAME_CEIL, CGAME_TESTPRINTINT, CGAME_TESTPRINTFLOAT, CGAME_ACOS, CGAME_ASIN, CG_R_CLEARSCENE = 200, CG_R_CLEARDECALS, CG_R_ADDREFENTITYTOSCENE, CG_R_ADDPOLYTOSCENE, CG_R_ADDPOLYSTOSCENE, CG_R_ADDDECALTOSCENE, CG_R_LIGHTFORPOINT, CG_R_ADDLIGHTTOSCENE, CG_R_ADDADDITIVELIGHTTOSCENE, CG_R_RENDERSCENE, CG_R_SETCOLOR, CG_R_DRAWSTRETCHPIC, CG_R_MODELBOUNDS, CG_R_LERPTAG, CG_R_DRAWROTATEPIC, CG_R_DRAWROTATEPIC2, CG_R_SETRANGEFOG, //linear fogging, with settable range -rww CG_R_SETREFRACTIONPROP, //set some properties for the draw layer for my refractive effect (here primarily for mod authors) -rww CG_R_REMAP_SHADER, CG_R_GET_LIGHT_STYLE, CG_R_SET_LIGHT_STYLE, CG_R_GET_BMODEL_VERTS, CG_R_GETDISTANCECULL, CG_R_GETREALRES, CG_R_AUTOMAPELEVADJ, CG_R_INITWIREFRAMEAUTO, CG_FX_ADDLINE, CG_GETGLCONFIG, CG_GETGAMESTATE, CG_GETCURRENTSNAPSHOTNUMBER, CG_GETSNAPSHOT, CG_GETDEFAULTSTATE, CG_GETSERVERCOMMAND, CG_GETCURRENTCMDNUMBER, CG_GETUSERCMD, CG_SETUSERCMDVALUE, CG_SETCLIENTFORCEANGLE, CG_SETCLIENTTURNEXTENT, CG_OPENUIMENU, CG_TESTPRINTINT, CG_TESTPRINTFLOAT, CG_MEMORY_REMAINING, CG_KEY_ISDOWN, CG_KEY_GETCATCHER, CG_KEY_SETCATCHER, CG_KEY_GETKEY, CG_PC_ADD_GLOBAL_DEFINE, CG_PC_LOAD_SOURCE, CG_PC_FREE_SOURCE, CG_PC_READ_TOKEN, CG_PC_SOURCE_FILE_AND_LINE, CG_PC_LOAD_GLOBAL_DEFINES, CG_PC_REMOVE_ALL_GLOBAL_DEFINES, CG_S_STOPBACKGROUNDTRACK, CG_REAL_TIME, CG_SNAPVECTOR, CG_CIN_PLAYCINEMATIC, CG_CIN_STOPCINEMATIC, CG_CIN_RUNCINEMATIC, CG_CIN_DRAWCINEMATIC, CG_CIN_SETEXTENTS, CG_GET_ENTITY_TOKEN, CG_R_INPVS, CG_FX_REGISTER_EFFECT, CG_FX_PLAY_EFFECT, CG_FX_PLAY_ENTITY_EFFECT, CG_FX_PLAY_EFFECT_ID, CG_FX_PLAY_PORTAL_EFFECT_ID, CG_FX_PLAY_ENTITY_EFFECT_ID, CG_FX_PLAY_BOLTED_EFFECT_ID, CG_FX_ADD_SCHEDULED_EFFECTS, CG_FX_INIT_SYSTEM, CG_FX_SET_REFDEF, CG_FX_FREE_SYSTEM, CG_FX_ADJUST_TIME, CG_FX_DRAW_2D_EFFECTS, CG_FX_RESET, CG_FX_ADDPOLY, CG_FX_ADDBEZIER, CG_FX_ADDPRIMITIVE, CG_FX_ADDSPRITE, CG_FX_ADDELECTRICITY, // CG_SP_PRINT, CG_SP_GETSTRINGTEXTSTRING, CG_ROFF_CLEAN, CG_ROFF_UPDATE_ENTITIES, CG_ROFF_CACHE, CG_ROFF_PLAY, CG_ROFF_PURGE_ENT, //rww - dynamic vm memory allocation! CG_TRUEMALLOC, CG_TRUEFREE, /* Ghoul2 Insert Start */ CG_G2_LISTSURFACES, CG_G2_LISTBONES, CG_G2_SETMODELS, CG_G2_HAVEWEGHOULMODELS, CG_G2_GETBOLT, CG_G2_GETBOLT_NOREC, CG_G2_GETBOLT_NOREC_NOROT, CG_G2_INITGHOUL2MODEL, CG_G2_SETSKIN, CG_G2_COLLISIONDETECT, CG_G2_CLEANMODELS, CG_G2_ANGLEOVERRIDE, CG_G2_PLAYANIM, CG_G2_GETBONEANIM, CG_G2_GETBONEFRAME, //trimmed down version of GBA, so I don't have to pass all those unused args across the VM-exe border CG_G2_GETGLANAME, CG_G2_COPYGHOUL2INSTANCE, CG_G2_COPYSPECIFICGHOUL2MODEL, CG_G2_DUPLICATEGHOUL2INSTANCE, CG_G2_HASGHOUL2MODELONINDEX, CG_G2_REMOVEGHOUL2MODEL, CG_G2_SKINLESSMODEL, CG_G2_GETNUMGOREMARKS, CG_G2_ADDSKINGORE, CG_G2_CLEARSKINGORE, CG_G2_SIZE, CG_G2_ADDBOLT, CG_G2_ATTACHENT, CG_G2_SETBOLTON, CG_G2_SETROOTSURFACE, CG_G2_SETSURFACEONOFF, CG_G2_SETNEWORIGIN, CG_G2_DOESBONEEXIST, CG_G2_GETSURFACERENDERSTATUS, CG_G2_GETTIME, CG_G2_SETTIME, CG_G2_ABSURDSMOOTHING, /* //rww - RAGDOLL_BEGIN */ CG_G2_SETRAGDOLL, CG_G2_ANIMATEG2MODELS, /* //rww - RAGDOLL_END */ //additional ragdoll options -rww CG_G2_RAGPCJCONSTRAINT, CG_G2_RAGPCJGRADIENTSPEED, CG_G2_RAGEFFECTORGOAL, CG_G2_GETRAGBONEPOS, CG_G2_RAGEFFECTORKICK, CG_G2_RAGFORCESOLVE, //rww - ik move method, allows you to specify a bone and move it to a world point (within joint constraints) //by using the majority of gil's existing bone angling stuff from the ragdoll code. CG_G2_SETBONEIKSTATE, CG_G2_IKMOVE, CG_G2_REMOVEBONE, CG_G2_ATTACHINSTANCETOENTNUM, CG_G2_CLEARATTACHEDINSTANCE, CG_G2_CLEANENTATTACHMENTS, CG_G2_OVERRIDESERVER, CG_G2_GETSURFACENAME, CG_SET_SHARED_BUFFER, CG_CM_REGISTER_TERRAIN, CG_RMG_INIT, CG_RE_INIT_RENDERER_TERRAIN, CG_R_WEATHER_CONTENTS_OVERRIDE, CG_R_WORLDEFFECTCOMMAND, //Adding trap to get weather working CG_WE_ADDWEATHERZONE /* Ghoul2 Insert End */ } cgameImport_t; /* ================================================================== functions exported to the main executable ================================================================== */ typedef enum { CG_INIT, // void CG_Init( int serverMessageNum, int serverCommandSequence, int clientNum ) // called when the level loads or when the renderer is restarted // all media should be registered at this time // cgame will display loading status by calling SCR_Update, which // will call CG_DrawInformation during the loading process // reliableCommandSequence will be 0 on fresh loads, but higher for // demos, tourney restarts, or vid_restarts CG_SHUTDOWN, // void (*CG_Shutdown)( void ); // oportunity to flush and close any open files CG_CONSOLE_COMMAND, // qboolean (*CG_ConsoleCommand)( void ); // a console command has been issued locally that is not recognized by the // main game system. // use Cmd_Argc() / Cmd_Argv() to read the command, return qfalse if the // command is not known to the game CG_DRAW_ACTIVE_FRAME, // void (*CG_DrawActiveFrame)( int serverTime, stereoFrame_t stereoView, qboolean demoPlayback ); // Generates and draws a game scene and status information at the given time. // If demoPlayback is set, local movement prediction will not be enabled CG_CROSSHAIR_PLAYER, // int (*CG_CrosshairPlayer)( void ); CG_LAST_ATTACKER, // int (*CG_LastAttacker)( void ); CG_KEY_EVENT, // void (*CG_KeyEvent)( int key, qboolean down ); CG_MOUSE_EVENT, // void (*CG_MouseEvent)( int dx, int dy ); CG_EVENT_HANDLING, // void (*CG_EventHandling)(int type); CG_POINT_CONTENTS, // int CG_PointContents( const vec3_t point, int passEntityNum ); CG_GET_LERP_ORIGIN, // void CG_LerpOrigin(int num, vec3_t result); CG_GET_LERP_DATA, CG_GET_GHOUL2, CG_GET_MODEL_LIST, CG_CALC_LERP_POSITIONS, // void CG_CalcEntityLerpPositions(int num); CG_TRACE, CG_G2TRACE, //void CG_Trace( trace_t *result, const vec3_t start, const vec3_t mins, const vec3_t maxs, const vec3_t end, // int skipNumber, int mask ); CG_G2MARK, CG_RAG_CALLBACK, CG_INCOMING_CONSOLE_COMMAND, CG_GET_USEABLE_FORCE, CG_GET_ORIGIN, // int entnum, vec3_t origin CG_GET_ANGLES, // int entnum, vec3_t angle CG_GET_ORIGIN_TRAJECTORY, // int entnum CG_GET_ANGLE_TRAJECTORY, // int entnum CG_ROFF_NOTETRACK_CALLBACK, // int entnum, char *notetrack CG_IMPACT_MARK, //void CG_ImpactMark( qhandle_t markShader, const vec3_t origin, const vec3_t dir, // float orientation, float red, float green, float blue, float alpha, // qboolean alphaFade, float radius, qboolean temporary ) CG_MAP_CHANGE, CG_AUTOMAP_INPUT, CG_MISC_ENT, //rwwRMG - added CG_GET_SORTED_FORCE_POWER, } cgameExport_t; typedef struct { float up; float down; float yaw; float pitch; qboolean goToDefaults; } autoMapInput_t; // CG_POINT_CONTENTS typedef struct { vec3_t mPoint; // input int mPassEntityNum; // input } TCGPointContents; // CG_GET_BOLT_POS typedef struct { vec3_t mOrigin; // output vec3_t mAngles; // output vec3_t mScale; // output int mEntityNum; // input } TCGGetBoltData; // CG_IMPACT_MARK typedef struct { int mHandle; vec3_t mPoint; vec3_t mAngle; float mRotation; float mRed; float mGreen; float mBlue; float mAlphaStart; float mSizeStart; } TCGImpactMark; // CG_GET_LERP_ORIGIN // CG_GET_LERP_ANGLES // CG_GET_MODEL_SCALE typedef struct { int mEntityNum; // input vec3_t mPoint; // output } TCGVectorData; // CG_TRACE/CG_G2TRACE typedef struct { trace_t mResult; // output vec3_t mStart, mMins, mMaxs, mEnd; // input int mSkipNumber, mMask; // input } TCGTrace; // CG_G2MARK typedef struct { int shader; float size; vec3_t start, dir; } TCGG2Mark; // CG_INCOMING_CONSOLE_COMMAND typedef struct { char conCommand[1024]; } TCGIncomingConsoleCommand; // CG_FX_CAMERASHAKE typedef struct { vec3_t mOrigin; // input float mIntensity; // input int mRadius; // input int mTime; // input } TCGCameraShake; // CG_MISC_ENT typedef struct { char mModel[MAX_QPATH]; // input vec3_t mOrigin, mAngles, mScale; // input } TCGMiscEnt; typedef struct { refEntity_t ent; // output void *ghoul2; // input int modelIndex; // input int boltIndex; // input vec3_t origin; // input vec3_t angles; // input vec3_t modelScale; // input } TCGPositionOnBolt; //ragdoll callback structs -rww #define RAG_CALLBACK_NONE 0 #define RAG_CALLBACK_DEBUGBOX 1 typedef struct { vec3_t mins; vec3_t maxs; int duration; } ragCallbackDebugBox_t; #define RAG_CALLBACK_DEBUGLINE 2 typedef struct { vec3_t start; vec3_t end; int time; int color; int radius; } ragCallbackDebugLine_t; #define RAG_CALLBACK_BONESNAP 3 typedef struct { char boneName[128]; //name of the bone in question int entNum; //index of entity who owns the bone in question } ragCallbackBoneSnap_t; #define RAG_CALLBACK_BONEIMPACT 4 typedef struct { char boneName[128]; //name of the bone in question int entNum; //index of entity who owns the bone in question } ragCallbackBoneImpact_t; #define RAG_CALLBACK_BONEINSOLID 5 typedef struct { vec3_t bonePos; //world coordinate position of the bone int entNum; //index of entity who owns the bone in question int solidCount; //higher the count, the longer we've been in solid (the worse off we are) } ragCallbackBoneInSolid_t; #define RAG_CALLBACK_TRACELINE 6 typedef struct { trace_t tr; vec3_t start; vec3_t end; vec3_t mins; vec3_t maxs; int ignore; int mask; } ragCallbackTraceLine_t; #define MAX_CG_SHARED_BUFFER_SIZE 2048 //---------------------------------------------- #endif // __CG_PUBLIC_H