123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628 |
- #ifndef __G_LOCAL_H__
- #define __G_LOCAL_H__
- // g_local.h -- local definitions for game module
- // define GAME_INCLUDE so that g_public.h does not define the
- // short, server-visible gclient_t and gentity_t structures,
- // because we define the full size ones in this file
- #define GAME_INCLUDE
- #include "../ui/gameinfo.h"
- #include "g_shared.h"
- #include "anims.h"
- #include "dmstates.h"
- //==================================================================
- // the "gameversion" client command will print this plus compile date
- #define GAMEVERSION "base"
- #define BODY_QUEUE_SIZE 8
- #define Q3_INFINITE 16777216
- #define FRAMETIME 100 // msec
- #define EVENT_VALID_MSEC 300
- #define CARNAGE_REWARD_TIME 3000
- #define INTERMISSION_DELAY_TIME 1000
- #define START_TIME_LINK_ENTS FRAMETIME*1 // time-delay after map start at which all ents have been spawned, so can link them
- #define START_TIME_FIND_LINKS FRAMETIME*2 // time-delay after map start at which you can find linked entities
- #define START_TIME_MOVERS_SPAWNED FRAMETIME*2 // time-delay after map start at which all movers should be spawned
- #define START_TIME_REMOVE_ENTS FRAMETIME*3 // time-delay after map start to remove temporary ents
- #define START_TIME_NAV_CALC FRAMETIME*4 // time-delay after map start to connect waypoints and calc routes
- #define START_TIME_FIND_WAYPOINT FRAMETIME*5 // time-delay after map start after which it's okay to try to find your best waypoint
- // gentity->flags
- #define FL_SHIELDED 0x00000001 // protected from all damage except lightsabers
- #define FL_DMG_BY_HEAVY_WEAP_ONLY 0x00000002 // protected from all damage except heavy weap class missiles
- #define FL_DMG_BY_SABER_ONLY 0x00000004 //protected from all damage except saber damage
- #define FL_GODMODE 0x00000010
- #define FL_NOTARGET 0x00000020
- #define FL_TEAMSLAVE 0x00000400 // not the first on the team
- #define FL_NO_KNOCKBACK 0x00000800
- #define FL_DROPPED_ITEM 0x00001000
- #define FL_DONT_SHOOT 0x00002000 // Can target him, but not shoot him
- #define FL_UNDYING 0x00004000 // Takes damage down to 1 point, but does not die
- //#define FL_OVERCHARGED 0x00008000 // weapon shot is an overcharged version....probably a lame place to be putting this flag...
- #define FL_LOCK_PLAYER_WEAPONS 0x00010000 // player can't switch weapons... ask james if there's a better spot for this
- #define FL_DISINTEGRATED 0x00020000 // marks that the corpse has already been disintegrated
- #define FL_FORCE_PULLABLE_ONLY 0x00040000 // cannot be force pushed
- #define FL_NO_IMPACT_DMG 0x00080000 // Will not take impact damage
- #define FL_OVERCHARGED_HEALTH 0x00100000 // Reduce health back to max
- #define FL_NO_ANGLES 0x00200000 // No bone angle overrides, no pitch or roll in full angles
- #define FL_RED_CROSSHAIR 0x00400000 // Crosshair red on me
- //Pointer safety utilities
- #define VALID( a ) ( a != NULL )
- #define VALIDATE( a ) ( assert( a ) )
- #define VALIDATEV( a ) if ( a == NULL ) { assert(0); return; }
- #define VALIDATEB( a ) if ( a == NULL ) { assert(0); return qfalse; }
- #define VALIDATEP( a ) if ( a == NULL ) { assert(0); return NULL; }
- #define VALIDSTRING( a ) ( ( a != NULL ) && ( a[0] != NULL ) )
- //animations
- typedef struct
- {
- char filename[MAX_QPATH];
- animation_t animations[MAX_ANIMATIONS];
- animevent_t torsoAnimEvents[MAX_ANIM_EVENTS];
- animevent_t legsAnimEvents[MAX_ANIM_EVENTS];
- unsigned char torsoAnimEventCount;
- unsigned char legsAnimEventCount;
- } animFileSet_t;
- extern stringID_table_t animTable [MAX_ANIMATIONS+1];
- //Interest points
- #define MAX_INTEREST_POINTS 64
- typedef struct
- {
- vec3_t origin;
- char *target;
- } interestPoint_t;
- //Combat points
- #define MAX_COMBAT_POINTS 512
- typedef struct
- {
- vec3_t origin;
- int flags;
- // char *NPC_targetname;
- // team_t team;
- qboolean occupied;
- int waypoint;
- int dangerTime;
- } combatPoint_t;
- // Alert events
- #define MAX_ALERT_EVENTS 32
- enum alertEventType_e
- {
- AET_SIGHT,
- AET_SOUND,
- };
- enum alertEventLevel_e
- {
- AEL_MINOR, //Enemy responds to the sound, but only by looking
- AEL_SUSPICIOUS, //Enemy looks at the sound, and will also investigate it
- AEL_DISCOVERED, //Enemy knows the player is around, and will actively hunt
- AEL_DANGER, //Enemy should try to find cover
- AEL_DANGER_GREAT, //Enemy should run like hell!
- };
- // !!!!!!!!! LOADSAVE-affecting struct !!!!!!!!!!
- typedef struct alertEvent_s
- {
- vec3_t position; //Where the event is located
- float radius; //Consideration radius
- alertEventLevel_e level; //Priority level of the event
- alertEventType_e type; //Event type (sound,sight)
- gentity_t *owner; //Who made the sound
- float light; //ambient light level at point
- float addLight; //additional light- makes it more noticable, even in darkness
- int ID; //unique... if get a ridiculous number, this will repeat, but should not be a problem as it's just comparing it to your lastAlertID
- int timestamp; //when it was created
- qboolean onGround; //alert is on the ground (only used for sounds)
- } alertEvent_t;
- //
- // this structure is cleared as each map is entered
- //
- #define MAX_SPAWN_VARS 64
- #define MAX_SPAWN_VARS_CHARS 2048
- typedef struct
- {
- char targetname[MAX_QPATH];
- char target[MAX_QPATH];
- char target2[MAX_QPATH];
- char target3[MAX_QPATH];
- char target4[MAX_QPATH];
- int nodeID;
- } waypointData_t;
- #define WF_RAINING 0x00000001 // raining
- #define WF_SNOWING 0x00000002 // snowing
- #define WF_PUFFING 0x00000004 // puffing something
- // !!!!!!!!!! LOADSAVE-affecting structure !!!!!!!!!!
- typedef struct
- {
- gclient_t *clients; // [maxclients]
- // store latched cvars here that we want to get at often
- int maxclients;
- int framenum;
- int time; // in msec
- int previousTime; // so movers can back up when blocked
- int globalTime; // global time at level initialization
- char mapname[MAX_QPATH]; // the server name (base1, etc)
- qboolean locationLinked; // target_locations get linked
- gentity_t *locationHead; // head of the location list
- alertEvent_t alertEvents[ MAX_ALERT_EVENTS ];
- int numAlertEvents;
- int curAlertID;
- AIGroupInfo_t groups[MAX_FRAME_GROUPS];
- animFileSet_t knownAnimFileSets[MAX_ANIM_FILES];
- int numKnownAnimFileSets;
- int worldFlags;
- int dmState; //actually, we do want save/load the dynamic music state
- // =====================================
- //
- // NOTE!!!!!! The only things beyond this point in the structure should be the ones you do NOT wish to be
- // affected by loading saved-games. Since loading a game first starts the map and then loads
- // over things like entities etc then these fields are usually the ones setup by the map loader.
- // If they ever get modified in-game let me know and I'll include them in the save. -Ste
- //
- #define LEVEL_LOCALS_T_SAVESTOP logFile // name of whichever field is next below this in the source
- fileHandle_t logFile;
- //Interest points- squadmates automatically look at these if standing around and close to them
- interestPoint_t interestPoints[MAX_INTEREST_POINTS];
- int numInterestPoints;
- //Combat points- NPCs in bState BS_COMBAT_POINT will find their closest empty combat_point
- combatPoint_t combatPoints[MAX_COMBAT_POINTS];
- int numCombatPoints;
- char spawntarget[MAX_QPATH]; // the targetname of the spawnpoint you want the player to start at
- int dmDebounceTime;
- int dmBeatTime;
- int mNumBSPInstances;
- int mBSPInstanceDepth;
- vec3_t mOriginAdjust;
- float mRotationAdjust;
- char *mTargetAdjust;
- qboolean hasBspInstances;
- } level_locals_t;
- extern level_locals_t level;
- extern game_export_t globals;
- extern cvar_t *g_gravity;
- extern cvar_t *g_speed;
- extern cvar_t *g_cheats;
- extern cvar_t *g_developer;
- extern cvar_t *g_knockback;
- extern cvar_t *g_inactivity;
- extern cvar_t *g_debugMove;
- extern cvar_t *g_subtitles;
- extern cvar_t *g_removeDoors;
- extern cvar_t *g_ICARUSDebug;
- extern cvar_t *g_npcdebug;
- extern gentity_t *player;
- //
- // g_spawn.c
- //
- qboolean G_SpawnField( unsigned int uiField, char **ppKey, char **ppValue );
- qboolean G_SpawnString( const char *key, const char *defaultString, char **out );
- // spawn string returns a temporary reference, you must CopyString() if you want to keep it
- qboolean G_SpawnFloat( const char *key, const char *defaultString, float *out );
- qboolean G_SpawnInt( const char *key, const char *defaultString, int *out );
- qboolean G_SpawnVector( const char *key, const char *defaultString, float *out );
- qboolean G_SpawnVector4( const char *key, const char *defaultString, float *out );
- qboolean G_SpawnAngleHack( const char *key, const char *defaultString, float *out );
- void G_SpawnEntitiesFromString( const char *entities );
- //
- // g_cmds.c
- //
- void Cmd_Score_f (gentity_t *ent);
- //
- // g_items.c
- //
- void G_RunItem( gentity_t *ent );
- void RespawnItem( gentity_t *ent );
- void UseHoldableItem( gentity_t *ent );
- void PrecacheItem (gitem_t *it);
- gentity_t *Drop_Item( gentity_t *ent, gitem_t *item, float angle, qboolean copytarget );
- void SetRespawn (gentity_t *ent, float delay);
- void G_SpawnItem (gentity_t *ent, gitem_t *item);
- void FinishSpawningItem( gentity_t *ent );
- void Think_Weapon (gentity_t *ent);
- int ArmorIndex (gentity_t *ent);
- void Add_Ammo (gentity_t *ent, int weapon, int count);
- void Touch_Item (gentity_t *ent, gentity_t *other, trace_t *trace);
- void ClearRegisteredItems( void );
- void RegisterItem( gitem_t *item );
- void SaveRegisteredItems( void );
- //
- // g_utils.c
- //
- int G_ModelIndex( const char *name );
- int G_SoundIndex( const char *name );
- /*
- Ghoul2 Insert Start
- */
- int G_SkinIndex( const char *name );
- void G_SetBoltSurfaceRemoval( const int entNum, const int modelIndex, const int boltIndex, const int surfaceIndex = -1, float duration = 5000 );
- /*
- Ghoul2 Insert End
- */
- int G_EffectIndex( const char *name );
- void G_PlayEffect( const char *name, const vec3_t origin );
- void G_PlayEffect( const char *name, int clientNum );
- void G_PlayEffect( const char *name, const vec3_t origin, const vec3_t fwd );
- void G_PlayEffect( const char *name, const vec3_t origin, const vec3_t axis[3] );
- void G_PlayEffect( int fxID, const vec3_t origin, const vec3_t fwd );
- void G_PlayEffect( int fxID, const vec3_t origin, const vec3_t axis[3] );
- void G_PlayEffect( int fxID, const int modelIndex, const int boltIndex, const int entNum, const vec3_t origin, int iLoopTime = qfalse, qboolean isRelative = qfalse );//iLoopTime 0 = not looping, 1 for infinite, else duration
- void G_PlayEffect( int fxID, int entNum, const vec3_t fwd );
- #ifdef _IMMERSION
- void G_PlayEffect( const char *name, int clientNum, const vec3_t origin, const vec3_t fwd );
- void G_PlayEffect( int fxID, int clientNum, const vec3_t origin, const vec3_t fwd );
- #endif // _IMMERSION
- void G_StopEffect( int fxID, const int modelIndex, const int boltIndex, const int entNum );
- void G_StopEffect(const char *name, const int modelIndex, const int boltIndex, const int entNum );
- int G_BSPIndex( char *name );
- void G_KillBox (gentity_t *ent);
- gentity_t *G_Find (gentity_t *from, int fieldofs, const char *match);
- int G_RadiusList ( vec3_t origin, float radius, gentity_t *ignore, qboolean takeDamage, gentity_t *ent_list[MAX_GENTITIES]);
- gentity_t *G_PickTarget (char *targetname);
- void G_UseTargets (gentity_t *ent, gentity_t *activator);
- void G_UseTargets2 (gentity_t *ent, gentity_t *activator, const char *string);
- void G_SetMovedir ( vec3_t angles, vec3_t movedir);
- void G_InitGentity( gentity_t *e, qboolean bFreeG2 );
- gentity_t *G_Spawn ( int itr = 1);
- gentity_t *G_TempEntity( const vec3_t origin, int event );
- void G_Sound( gentity_t *ent, int soundIndex );
- void G_FreeEntity( gentity_t *e );
- #ifdef _IMMERSION
- int G_ForceIndex( const char *name, int channel );
- void G_Force( gentity_t *ent, int forceIndex );
- void G_ForceArea( gentity_t *ent, int forceIndex );
- void G_ForceBroadcast( gentity_t *ent, int forceIndex );
- void G_ForceStop( gentity_t* ent, int forceIndex );
- #endif // _IMMERSION
- void G_TouchTriggers (gentity_t *ent);
- void G_TouchTeamClients (gentity_t *ent);
- void G_TouchSolids (gentity_t *ent);
- char *vtos( const vec3_t v );
- float vectoyaw( const vec3_t vec );
- void G_AddEvent( gentity_t *ent, int event, int eventParm );
- void G_SetOrigin( gentity_t *ent, const vec3_t origin );
- void G_SetAngles( gentity_t *ent, const vec3_t angles );
- void G_DebugLine(vec3_t A, vec3_t B, int duration, int color, qboolean deleteornot);
- //
- // g_combat.c
- //
- qboolean CanDamage (gentity_t *targ, const vec3_t origin);
- void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, const vec3_t dir, const vec3_t point, int damage, int dflags, int mod, int hitLoc=HL_NONE );
- void G_RadiusDamage (const vec3_t origin, gentity_t *attacker, float damage, float radius, gentity_t *ignore, int mod);
- gentity_t *TossClientItems( gentity_t *self );
- void ExplodeDeath_Wait( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int meansOfDeath,int dFlags,int hitLoc );
- void ExplodeDeath( gentity_t *self );
- void GoExplodeDeath( gentity_t *self, gentity_t *other, gentity_t *activator);
- void G_ApplyKnockback( gentity_t *targ, const vec3_t newDir, float knockback );
- void G_Throw( gentity_t *targ, const vec3_t newDir, float push );
- // damage flags
- #define DAMAGE_RADIUS 0x00000001 // damage was indirect
- #define DAMAGE_NO_ARMOR 0x00000002 // armour does not protect from this damage
- #define DAMAGE_NO_KNOCKBACK 0x00000008 // do not affect velocity, just view angles
- #define DAMAGE_NO_HIT_LOC 0x00000010 // do not modify damage by hit loc
- #define DAMAGE_NO_PROTECTION 0x00000020 // armor, shields, invulnerability, and godmode have no effect
- #define DAMAGE_EXTRA_KNOCKBACK 0x00000040 // add extra knockback to this damage
- #define DAMAGE_DEATH_KNOCKBACK 0x00000080 // only does knockback on death of target
- #define DAMAGE_IGNORE_TEAM 0x00000100 // damage is always done, regardless of teams
- #define DAMAGE_NO_DAMAGE 0x00000200 // do no actual damage but react as if damage was taken
- #define DAMAGE_DISMEMBER 0x00000400 // do dismemberment
- #define DAMAGE_NO_KILL 0x00000800 // do damage, but don't kill them
- #define DAMAGE_HEAVY_WEAP_CLASS 0x00001000 // doing heavy weapon type damage, certain objects may only take damage by missiles containing this flag
- #define DAMAGE_CUSTOM_HUD 0x00002000 // really dumb, but....
- #define DAMAGE_IMPACT_DIE 0x00004000 // if a vehicle hits a wall it should instantly die
- #define DAMAGE_DIE_ON_IMPACT 0x00008000 // ignores force-power based protection
- //
- // g_missile.c
- //
- void G_RunMissile( gentity_t *ent );
- gentity_t *fire_blaster (gentity_t *self, vec3_t start, vec3_t aimdir);
- gentity_t *fire_plasma (gentity_t *self, vec3_t start, vec3_t aimdir);
- gentity_t *fire_grenade (gentity_t *self, vec3_t start, vec3_t aimdir);
- gentity_t *fire_rocket (gentity_t *self, vec3_t start, vec3_t dir);
- //
- // g_mover.c
- //
- #define MOVER_START_ON 1
- #define MOVER_FORCE_ACTIVATE 2
- #define MOVER_CRUSHER 4
- #define MOVER_TOGGLE 8
- #define MOVER_LOCKED 16
- #define MOVER_GOODIE 32
- #define MOVER_PLAYER_USE 64
- #define MOVER_INACTIVE 128
- void G_RunMover( gentity_t *ent );
- //
- // g_misc.c
- //
- void TeleportPlayer( gentity_t *player, vec3_t origin, vec3_t angles );
- //
- // g_weapon.c
- //
- //void CalcMuzzlePoint ( gentity_t *ent, vec3_t forward, vec3_t right, vec3_t up, vec3_t muzzlePoint );
- //void SnapVectorTowards( vec3_t v, vec3_t to );
- //qboolean CheckGauntletAttack( gentity_t *ent );
- void WP_LoadWeaponParms (void);
- void IT_LoadItemParms( void );
- //
- // g_client.c
- //
- team_t PickTeam( int ignoreClientNum );
- void SetClientViewAngle( gentity_t *ent, vec3_t angle );
- gentity_t *SelectSpawnPoint ( vec3_t avoidPoint, team_t team, vec3_t origin, vec3_t angles );
- void respawn (gentity_t *ent);
- void InitClientPersistant (gclient_t *client);
- void InitClientResp (gclient_t *client);
- qboolean ClientSpawn( gentity_t *ent, SavedGameJustLoaded_e eSavedGameJustLoaded );
- void player_die (gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod, int dFlags, int hitLoc);
- void AddScore( gentity_t *ent, int score );
- qboolean SpotWouldTelefrag( gentity_t *spot, team_t checkteam );
- void G_RemoveWeaponModels( gentity_t *ent );
- //
- // g_svcmds.c
- //
- qboolean ConsoleCommand( void );
- //
- // g_weapon.c
- //
- void FireWeapon( gentity_t *ent, qboolean alt_fire );
- //
- // p_hud.c
- //
- void MoveClientToIntermission (gentity_t *client);
- void G_SetStats (gentity_t *ent);
- void DeathmatchScoreboardMessage (gentity_t *client);
- //
- // g_cmds.c
- //
- static void G_SayTo( gentity_t *ent, gentity_t *other, int mode, int color, const char *name, const char *message );
- //
- // g_pweapon.c
- //
- //
- // g_main.c
- //
- void G_RunThink (gentity_t *ent);
- void QDECL G_Error( const char *fmt, ... );
- void SetInUse(gentity_t *ent);
- void ClearInUse(gentity_t *ent);
- qboolean PInUse(unsigned int entNum);
- qboolean PInUse2(gentity_t *ent);
- void WriteInUseBits(void);
- void ReadInUseBits(void);
- //
- // g_nav.cpp
- //
- void Svcmd_Nav_f (void);
- //
- // g_squad.cpp
- //
- void Svcmd_Comm_f (void);
- void Svcmd_Hail_f (void);
- void Svcmd_Form_f (void);
- //
- // g_utils.cpp
- //
- void Svcmd_Use_f (void);
- extern void G_SoundOnEnt( gentity_t *ent, soundChannel_t channel, const char *soundPath );
- extern void G_SoundIndexOnEnt( gentity_t *ent, soundChannel_t channel, int index );
- //
- // g_weapons.cpp
- //
- //
- // g_client.c
- //
- char *ClientConnect( int clientNum, qboolean firstTime, SavedGameJustLoaded_e eSavedGameJustLoaded );
- void ClientUserinfoChanged( int clientNum );
- void ClientDisconnect( int clientNum );
- void ClientBegin( int clientNum, usercmd_t *cmd, SavedGameJustLoaded_e eSavedGameJustLoaded );
- void ClientCommand( int clientNum );
- //
- // g_active.c
- //
- void ClientThink( int clientNum, usercmd_t *cmd );
- void ClientEndFrame (gentity_t *ent);
- //
- // g_inventory.cpp
- //
- extern qboolean INV_GoodieKeyGive( gentity_t *target );
- extern qboolean INV_GoodieKeyTake( gentity_t *target );
- extern int INV_GoodieKeyCheck( gentity_t *target );
- extern qboolean INV_SecurityKeyGive( gentity_t *target, const char *keyname );
- extern void INV_SecurityKeyTake( gentity_t *target, char *keyname );
- extern qboolean INV_SecurityKeyCheck( gentity_t *target, char *keyname );
- //
- // g_team.c
- //
- qboolean OnSameTeam( gentity_t *ent1, gentity_t *ent2 );
- //
- // g_mem.c
- //
- void *G_Alloc( int size );
- void G_InitMemory( void );
- void Svcmd_GameMem_f( void );
- //
- // g_session.c
- //
- void G_ReadSessionData( gclient_t *client );
- void G_InitSessionData( gclient_t *client, char *userinfo );
- void G_InitWorldSession( void );
- void G_WriteSessionData( void );
- //
- // NPC_senses.cpp
- //
- extern void AddSightEvent( gentity_t *owner, vec3_t position, float radius, alertEventLevel_e alertLevel, float addLight=0.0f );
- extern void AddSoundEvent( gentity_t *owner, vec3_t position, float radius, alertEventLevel_e alertLevel, qboolean needLOS = qfalse, qboolean onGround = qfalse );
- extern qboolean G_CheckForDanger( gentity_t *self, int alertEvent );
- extern int G_CheckAlertEvents( gentity_t *self, qboolean checkSight, qboolean checkSound, float maxSeeDist, float maxHearDist, int ignoreAlert = -1, qboolean mustHaveOwner = qfalse, int minAlertLevel = AEL_MINOR, qboolean onGroundOnly = qfalse );
- extern qboolean G_CheckForDanger( gentity_t *self, int alertEvent );
- extern qboolean G_ClearLOS( gentity_t *self, const vec3_t start, const vec3_t end );
- extern qboolean G_ClearLOS( gentity_t *self, gentity_t *ent, const vec3_t end );
- extern qboolean G_ClearLOS( gentity_t *self, const vec3_t start, gentity_t *ent );
- extern qboolean G_ClearLOS( gentity_t *self, gentity_t *ent );
- extern qboolean G_ClearLOS( gentity_t *self, const vec3_t end );
- //============================================================================
- //Tags
- // Reference tags
- #define MAX_REFTAGS 128 // Probably more than we'll ever need
- #define MAX_REFNAME 32
- #define RTF_NONE 0
- #define RTF_NAVGOAL 0x00000001
- typedef struct reference_tag_s
- {
- char name[MAX_REFNAME];
- vec3_t origin;
- vec3_t angles;
- int flags; //Just in case
- int radius; //For nav goals
- } reference_tag_t;
- extern void TAG_Init( void );
- extern reference_tag_t *TAG_Add( const char *name, const char *owner, vec3_t origin, vec3_t angles, int radius, int flags );
- extern int TAG_GetOrigin( const char *owner, const char *name, vec3_t origin );
- extern int TAG_GetAngles( const char *owner, const char *name, vec3_t angles );
- extern int TAG_GetRadius( const char *owner, const char *name );
- extern int TAG_GetFlags( const char *owner, const char *name );
- void TAG_ShowTags( int flags );
- // Reference tags END
- extern char *G_NewString( const char *string );
- // some stuff for savegames...
- //
- void WriteLevel(qboolean qbAutosave);
- void ReadLevel(qboolean qbAutosave, qboolean qbLoadTransition);
- qboolean GameAllowedToSaveHere(void);
- extern qboolean G_ActivateBehavior( gentity_t *ent, int bset );
- //Timing information
- void TIMER_Clear( void );
- void TIMER_Clear( int idx );
- void TIMER_Save( void );
- void TIMER_Load( void );
- void TIMER_Set( gentity_t *ent, const char *identifier, int duration );
- int TIMER_Get( gentity_t *ent, const char *identifier );
- qboolean TIMER_Done( gentity_t *ent, const char *identifier );
- qboolean TIMER_Start( gentity_t *self, const char *identifier, int duration );
- qboolean TIMER_Done2( gentity_t *ent, const char *identifier, qboolean remove = qfalse );
- qboolean TIMER_Exists( gentity_t *ent, const char *identifier );
- void TIMER_Remove( gentity_t *ent, const char *identifier );
- float NPC_GetHFOVPercentage( vec3_t spot, vec3_t from, vec3_t facing, float hFOV );
- float NPC_GetVFOVPercentage( vec3_t spot, vec3_t from, vec3_t facing, float vFOV );
- #ifdef _XBOX
- // data used for NPC water detection
- #define MAX_NPC_WATER_UPDATE 64 // maximum npcs that can be waiting for a water update
- #define MAX_NPC_WATER_UPDATES_PER_FRAME 2 // updates per frame
- extern short npcsToUpdate[MAX_NPC_WATER_UPDATE]; // queue of npcs
- extern short npcsToUpdateTop; // top of the queue
- extern short npcsToUpdateCount; // number of npcs in the queue
- #endif // _XBOX
- #endif//#ifndef __G_LOCAL_H__
|