mirror of
https://github.com/ioquake/jedi-academy.git
synced 2024-11-29 07:22:23 +00:00
1684 lines
43 KiB
C
1684 lines
43 KiB
C
// Copyright (C) 1999-2000 Id Software, Inc.
|
|
//
|
|
// bg_public.h -- definitions shared by both the server game and client game modules
|
|
|
|
// because games can change separately from the main system version, we need a
|
|
// second version that must match between game and cgame
|
|
|
|
#ifndef __BG_PUBLIC_H__
|
|
#define __BG_PUBLIC_H__
|
|
|
|
#include "bg_weapons.h"
|
|
#include "anims.h"
|
|
#include "bg_vehicles.h"
|
|
|
|
//these two defs are shared now because we do clientside ent parsing
|
|
#define MAX_SPAWN_VARS 64
|
|
#define MAX_SPAWN_VARS_CHARS 4096
|
|
|
|
|
|
#define GAME_VERSION "basejka-1"
|
|
|
|
#define STEPSIZE 18
|
|
|
|
#define DEFAULT_GRAVITY 800
|
|
#define GIB_HEALTH -40
|
|
#define ARMOR_PROTECTION 0.50 // Shields only stop 50% of armor-piercing dmg
|
|
#define ARMOR_REDUCTION_FACTOR 0.50 // Certain damage doesn't take off armor as efficiently
|
|
|
|
#define JUMP_VELOCITY 225//270
|
|
|
|
#define MAX_ITEMS 256
|
|
|
|
#define RANK_TIED_FLAG 0x4000
|
|
|
|
#define ITEM_RADIUS 15 // item sizes are needed for client side pickup detection
|
|
|
|
#define SCORE_NOT_PRESENT -9999 // for the CS_SCORES[12] when only one player is present
|
|
|
|
#define VOTE_TIME 30000 // 30 seconds before vote times out
|
|
|
|
#define DEFAULT_MINS_2 -24
|
|
#define DEFAULT_MAXS_2 40
|
|
#define CROUCH_MAXS_2 16
|
|
#define STANDARD_VIEWHEIGHT_OFFSET -4
|
|
|
|
#define MINS_Z -24
|
|
#define DEFAULT_VIEWHEIGHT (DEFAULT_MAXS_2+STANDARD_VIEWHEIGHT_OFFSET)//26
|
|
#define CROUCH_VIEWHEIGHT (CROUCH_MAXS_2+STANDARD_VIEWHEIGHT_OFFSET)//12
|
|
#define DEAD_VIEWHEIGHT -16
|
|
|
|
#define MAX_CLIENT_SCORE_SEND 20
|
|
|
|
//
|
|
// config strings are a general means of communicating variable length strings
|
|
// from the server to all connected clients.
|
|
//
|
|
|
|
// CS_SERVERINFO and CS_SYSTEMINFO are defined in q_shared.h
|
|
#define CS_MUSIC 2
|
|
#define CS_MESSAGE 3 // from the map worldspawn's message field
|
|
#define CS_MOTD 4 // g_motd string for server message of the day
|
|
#define CS_WARMUP 5 // server time when the match will be restarted
|
|
#define CS_SCORES1 6
|
|
#define CS_SCORES2 7
|
|
#define CS_VOTE_TIME 8
|
|
#define CS_VOTE_STRING 9
|
|
#define CS_VOTE_YES 10
|
|
#define CS_VOTE_NO 11
|
|
|
|
#define CS_TEAMVOTE_TIME 12
|
|
#define CS_TEAMVOTE_STRING 14
|
|
#define CS_TEAMVOTE_YES 16
|
|
#define CS_TEAMVOTE_NO 18
|
|
|
|
#define CS_GAME_VERSION 20
|
|
#define CS_LEVEL_START_TIME 21 // so the timer only shows the current level
|
|
#define CS_INTERMISSION 22 // when 1, fraglimit/timelimit has been hit and intermission will start in a second or two
|
|
#define CS_FLAGSTATUS 23 // string indicating flag status in CTF
|
|
#define CS_SHADERSTATE 24
|
|
#define CS_BOTINFO 25
|
|
|
|
#define CS_ITEMS 27 // string of 0's and 1's that tell which items are present
|
|
|
|
#define CS_CLIENT_JEDIMASTER 28 // current jedi master
|
|
#define CS_CLIENT_DUELWINNER 29 // current duel round winner - needed for printing at top of scoreboard
|
|
#define CS_CLIENT_DUELISTS 30 // client numbers for both current duelists. Needed for a number of client-side things.
|
|
#define CS_CLIENT_DUELHEALTHS 31 // nmckenzie: DUEL_HEALTH. Hopefully adding this cs is safe and good?
|
|
#define CS_GLOBAL_AMBIENT_SET 32
|
|
|
|
#define CS_AMBIENT_SET 37
|
|
|
|
#define CS_SIEGE_STATE (CS_AMBIENT_SET+MAX_AMBIENT_SETS)
|
|
#define CS_SIEGE_OBJECTIVES (CS_SIEGE_STATE+1)
|
|
#define CS_SIEGE_TIMEOVERRIDE (CS_SIEGE_OBJECTIVES+1)
|
|
#define CS_SIEGE_WINTEAM (CS_SIEGE_TIMEOVERRIDE+1)
|
|
#define CS_SIEGE_ICONS (CS_SIEGE_WINTEAM+1)
|
|
|
|
#define CS_MODELS (CS_SIEGE_ICONS+1)
|
|
#define CS_SKYBOXORG (CS_MODELS+MAX_MODELS) //rww - skybox info
|
|
#define CS_SOUNDS (CS_SKYBOXORG+1)
|
|
#define CS_ICONS (CS_SOUNDS+MAX_SOUNDS)
|
|
#define CS_PLAYERS (CS_ICONS+MAX_ICONS)
|
|
/*
|
|
Ghoul2 Insert Start
|
|
*/
|
|
#define CS_G2BONES (CS_PLAYERS+MAX_CLIENTS)
|
|
//rww - used to be CS_CHARSKINS, but I have eliminated the need for that.
|
|
/*
|
|
Ghoul2 Insert End
|
|
*/
|
|
#define CS_LOCATIONS (CS_G2BONES+MAX_G2BONES)
|
|
#define CS_PARTICLES (CS_LOCATIONS+MAX_LOCATIONS)
|
|
#define CS_EFFECTS (CS_PARTICLES+MAX_LOCATIONS)
|
|
#define CS_LIGHT_STYLES (CS_EFFECTS + MAX_FX)
|
|
|
|
//rwwRMG - added:
|
|
#define CS_TERRAINS (CS_LIGHT_STYLES + (MAX_LIGHT_STYLES*3))
|
|
#define CS_BSP_MODELS (CS_TERRAINS + MAX_TERRAINS)
|
|
|
|
#define CS_MAX (CS_BSP_MODELS + MAX_SUB_BSP)
|
|
|
|
#if (CS_MAX) > MAX_CONFIGSTRINGS
|
|
#error overflow: (CS_MAX) > MAX_CONFIGSTRINGS
|
|
#endif
|
|
|
|
typedef enum {
|
|
G2_MODELPART_HEAD = 10,
|
|
G2_MODELPART_WAIST,
|
|
G2_MODELPART_LARM,
|
|
G2_MODELPART_RARM,
|
|
G2_MODELPART_RHAND,
|
|
G2_MODELPART_LLEG,
|
|
G2_MODELPART_RLEG
|
|
} g2ModelParts_t;
|
|
|
|
#define G2_MODEL_PART 50
|
|
|
|
#define BG_NUM_TOGGLEABLE_SURFACES 31
|
|
|
|
#define MAX_CUSTOM_SIEGE_SOUNDS 30
|
|
|
|
#include "../namespace_begin.h"
|
|
extern const char *bg_customSiegeSoundNames[MAX_CUSTOM_SIEGE_SOUNDS];
|
|
|
|
extern const char *bgToggleableSurfaces[BG_NUM_TOGGLEABLE_SURFACES];
|
|
extern const int bgToggleableSurfaceDebris[BG_NUM_TOGGLEABLE_SURFACES];
|
|
#include "../namespace_end.h"
|
|
|
|
typedef enum {
|
|
HANDEXTEND_NONE = 0,
|
|
HANDEXTEND_FORCEPUSH,
|
|
HANDEXTEND_FORCEPULL,
|
|
HANDEXTEND_FORCE_HOLD,
|
|
HANDEXTEND_SABERPULL,
|
|
HANDEXTEND_CHOKE, //use handextend priorities to choke someone being gripped
|
|
HANDEXTEND_WEAPONREADY,
|
|
HANDEXTEND_DODGE,
|
|
HANDEXTEND_KNOCKDOWN,
|
|
HANDEXTEND_DUELCHALLENGE,
|
|
HANDEXTEND_TAUNT,
|
|
|
|
HANDEXTEND_PRETHROW,
|
|
HANDEXTEND_POSTTHROW,
|
|
HANDEXTEND_PRETHROWN,
|
|
HANDEXTEND_POSTTHROWN,
|
|
|
|
HANDEXTEND_DRAGGING,
|
|
|
|
HANDEXTEND_JEDITAUNT,
|
|
} forceHandAnims_t;
|
|
|
|
typedef enum
|
|
{
|
|
BROKENLIMB_NONE = 0,
|
|
BROKENLIMB_LARM,
|
|
BROKENLIMB_RARM,
|
|
NUM_BROKENLIMBS
|
|
} brokenLimb_t;
|
|
|
|
//for supplier class items
|
|
#define TOSS_DEBOUNCE_TIME 5000
|
|
|
|
enum {
|
|
GT_FFA, // free for all
|
|
GT_HOLOCRON, // holocron ffa
|
|
GT_JEDIMASTER, // jedi master
|
|
GT_DUEL, // one on one tournament
|
|
GT_POWERDUEL,
|
|
GT_SINGLE_PLAYER, // single player ffa
|
|
|
|
//-- team games go after this --
|
|
|
|
GT_TEAM, // team deathmatch
|
|
GT_SIEGE, // siege
|
|
GT_CTF, // capture the flag
|
|
GT_CTY,
|
|
GT_MAX_GAME_TYPE
|
|
};
|
|
typedef int gametype_t;
|
|
|
|
typedef enum { GENDER_MALE, GENDER_FEMALE, GENDER_NEUTER } gender_t;
|
|
|
|
extern vec3_t WP_MuzzlePoint[WP_NUM_WEAPONS];
|
|
|
|
#include "../namespace_begin.h"
|
|
extern int forcePowerSorted[NUM_FORCE_POWERS];
|
|
#include "../namespace_end.h"
|
|
|
|
enum
|
|
{
|
|
SABERLOCK_TOP,
|
|
SABERLOCK_SIDE,
|
|
SABERLOCK_LOCK,
|
|
SABERLOCK_BREAK,
|
|
SABERLOCK_SUPERBREAK,
|
|
SABERLOCK_WIN,
|
|
SABERLOCK_LOSE
|
|
};
|
|
|
|
enum
|
|
{
|
|
DIR_RIGHT,
|
|
DIR_LEFT,
|
|
DIR_FRONT,
|
|
DIR_BACK
|
|
};
|
|
|
|
/*
|
|
===================================================================================
|
|
|
|
PMOVE MODULE
|
|
|
|
The pmove code takes a player_state_t and a usercmd_t and generates a new player_state_t
|
|
and some other output data. Used for local prediction on the client game and true
|
|
movement on the server game.
|
|
===================================================================================
|
|
*/
|
|
|
|
|
|
#pragma pack(push, 1)
|
|
typedef struct animation_s {
|
|
unsigned short firstFrame;
|
|
unsigned short numFrames;
|
|
short frameLerp; // msec between frames
|
|
//initialLerp is abs(frameLerp)
|
|
signed char loopFrames; // 0 to numFrames
|
|
} animation_t;
|
|
#pragma pack(pop)
|
|
|
|
#include "../namespace_begin.h"
|
|
extern qboolean BGPAFtextLoaded;
|
|
extern animation_t bgHumanoidAnimations[MAX_TOTALANIMATIONS];
|
|
#include "../namespace_end.h"
|
|
|
|
#define MAX_ANIM_FILES 64
|
|
#define MAX_ANIM_EVENTS 300
|
|
|
|
typedef enum
|
|
{
|
|
FOOTSTEP_R,
|
|
FOOTSTEP_L,
|
|
FOOTSTEP_HEAVY_R,
|
|
FOOTSTEP_HEAVY_L,
|
|
NUM_FOOTSTEP_TYPES
|
|
} footstepType_t;
|
|
|
|
extern stringID_table_t animEventTypeTable[MAX_ANIM_EVENTS+1];
|
|
extern stringID_table_t footstepTypeTable[NUM_FOOTSTEP_TYPES+1];
|
|
|
|
//size of Anim eventData array...
|
|
#define MAX_RANDOM_ANIM_SOUNDS 4
|
|
#define AED_ARRAY_SIZE (MAX_RANDOM_ANIM_SOUNDS+3)
|
|
//indices for AEV_SOUND data
|
|
#define AED_SOUNDINDEX_START 0
|
|
#define AED_SOUNDINDEX_END (MAX_RANDOM_ANIM_SOUNDS-1)
|
|
#define AED_SOUND_NUMRANDOMSNDS (MAX_RANDOM_ANIM_SOUNDS)
|
|
#define AED_SOUND_PROBABILITY (MAX_RANDOM_ANIM_SOUNDS+1)
|
|
//indices for AEV_SOUNDCHAN data
|
|
#define AED_SOUNDCHANNEL (MAX_RANDOM_ANIM_SOUNDS+2)
|
|
//indices for AEV_FOOTSTEP data
|
|
#define AED_FOOTSTEP_TYPE 0
|
|
#define AED_FOOTSTEP_PROBABILITY 1
|
|
//indices for AEV_EFFECT data
|
|
#define AED_EFFECTINDEX 0
|
|
#define AED_BOLTINDEX 1
|
|
#define AED_EFFECT_PROBABILITY 2
|
|
#define AED_MODELINDEX 3
|
|
//indices for AEV_FIRE data
|
|
#define AED_FIRE_ALT 0
|
|
#define AED_FIRE_PROBABILITY 1
|
|
//indices for AEV_MOVE data
|
|
#define AED_MOVE_FWD 0
|
|
#define AED_MOVE_RT 1
|
|
#define AED_MOVE_UP 2
|
|
//indices for AEV_SABER_SWING data
|
|
#define AED_SABER_SWING_SABERNUM 0
|
|
#define AED_SABER_SWING_TYPE 1
|
|
#define AED_SABER_SWING_PROBABILITY 2
|
|
//indices for AEV_SABER_SPIN data
|
|
#define AED_SABER_SPIN_SABERNUM 0
|
|
#define AED_SABER_SPIN_TYPE 1 //0 = saberspinoff, 1 = saberspin, 2-4 = saberspin1-saberspin3
|
|
#define AED_SABER_SPIN_PROBABILITY 2
|
|
|
|
typedef enum
|
|
{//NOTENOTE: Be sure to update animEventTypeTable and ParseAnimationEvtBlock(...) if you change this enum list!
|
|
AEV_NONE,
|
|
AEV_SOUND, //# animID AEV_SOUND framenum soundpath randomlow randomhi chancetoplay
|
|
AEV_FOOTSTEP, //# animID AEV_FOOTSTEP framenum footstepType chancetoplay
|
|
AEV_EFFECT, //# animID AEV_EFFECT framenum effectpath boltName chancetoplay
|
|
AEV_FIRE, //# animID AEV_FIRE framenum altfire chancetofire
|
|
AEV_MOVE, //# animID AEV_MOVE framenum forwardpush rightpush uppush
|
|
AEV_SOUNDCHAN, //# animID AEV_SOUNDCHAN framenum CHANNEL soundpath randomlow randomhi chancetoplay
|
|
AEV_SABER_SWING, //# animID AEV_SABER_SWING framenum CHANNEL randomlow randomhi chancetoplay
|
|
AEV_SABER_SPIN, //# animID AEV_SABER_SPIN framenum CHANNEL chancetoplay
|
|
AEV_NUM_AEV
|
|
} animEventType_t;
|
|
|
|
typedef struct animevent_s
|
|
{
|
|
animEventType_t eventType;
|
|
unsigned short keyFrame; //Frame to play event on
|
|
signed short eventData[AED_ARRAY_SIZE]; //Unique IDs, can be soundIndex of sound file to play OR effect index or footstep type, etc.
|
|
char *stringData; //we allow storage of one string, temporarily (in case we have to look up an index later, then make sure to set stringData to NULL so we only do the look-up once)
|
|
} animevent_t;
|
|
|
|
typedef struct
|
|
{
|
|
char filename[MAX_QPATH];
|
|
animation_t *anims;
|
|
// animsounds_t torsoAnimSnds[MAX_ANIM_SOUNDS];
|
|
// animsounds_t legsAnimSnds[MAX_ANIM_SOUNDS];
|
|
// qboolean soundsCached;
|
|
} bgLoadedAnim_t;
|
|
|
|
typedef struct
|
|
{
|
|
char filename[MAX_QPATH];
|
|
animevent_t torsoAnimEvents[MAX_ANIM_EVENTS];
|
|
animevent_t legsAnimEvents[MAX_ANIM_EVENTS];
|
|
qboolean eventsParsed;
|
|
} bgLoadedEvents_t;
|
|
|
|
#include "../namespace_begin.h"
|
|
|
|
extern bgLoadedAnim_t bgAllAnims[MAX_ANIM_FILES];
|
|
|
|
//In SP this is shared in with the anim stuff, and humanoid anim sets can be loaded
|
|
//multiple times just for the sake of sounds being different. We probably wouldn't
|
|
//care normally but since we're working in VMs we have to do everything possible to
|
|
//cut memory cost.
|
|
//On the bright side this also means we're cutting a rather large size out of
|
|
//required game-side memory.
|
|
#ifndef QAGAME
|
|
extern bgLoadedEvents_t bgAllEvents[MAX_ANIM_FILES];
|
|
extern int bgNumAnimEvents;
|
|
#endif
|
|
|
|
#include "../namespace_end.h"
|
|
|
|
typedef enum {
|
|
PM_NORMAL, // can accelerate and turn
|
|
PM_JETPACK, // special jetpack movement
|
|
PM_FLOAT, // float with no gravity in general direction of velocity (intended for gripping)
|
|
PM_NOCLIP, // noclip movement
|
|
PM_SPECTATOR, // still run into walls
|
|
PM_DEAD, // no acceleration or turning, but free falling
|
|
PM_FREEZE, // stuck in place with no control
|
|
PM_INTERMISSION, // no movement or status bar
|
|
PM_SPINTERMISSION // no movement or status bar
|
|
} pmtype_t;
|
|
|
|
typedef enum {
|
|
WEAPON_READY,
|
|
WEAPON_RAISING,
|
|
WEAPON_DROPPING,
|
|
WEAPON_FIRING,
|
|
WEAPON_CHARGING,
|
|
WEAPON_CHARGING_ALT,
|
|
WEAPON_IDLE, //lowered // NOTENOTE Added with saber
|
|
} weaponstate_t;
|
|
|
|
|
|
enum {
|
|
FORCE_MASTERY_UNINITIATED,
|
|
FORCE_MASTERY_INITIATE,
|
|
FORCE_MASTERY_PADAWAN,
|
|
FORCE_MASTERY_JEDI,
|
|
FORCE_MASTERY_JEDI_GUARDIAN,
|
|
FORCE_MASTERY_JEDI_ADEPT,
|
|
FORCE_MASTERY_JEDI_KNIGHT,
|
|
FORCE_MASTERY_JEDI_MASTER,
|
|
NUM_FORCE_MASTERY_LEVELS
|
|
};
|
|
|
|
#include "../namespace_begin.h"
|
|
extern char *forceMasteryLevels[NUM_FORCE_MASTERY_LEVELS];
|
|
extern int forceMasteryPoints[NUM_FORCE_MASTERY_LEVELS];
|
|
|
|
extern int bgForcePowerCost[NUM_FORCE_POWERS][NUM_FORCE_POWER_LEVELS];
|
|
#include "../namespace_end.h"
|
|
|
|
// pmove->pm_flags
|
|
#define PMF_DUCKED 1
|
|
#define PMF_JUMP_HELD 2
|
|
#define PMF_ROLLING 4
|
|
#define PMF_BACKWARDS_JUMP 8 // go into backwards land
|
|
#define PMF_BACKWARDS_RUN 16 // coast down to backwards run
|
|
#define PMF_TIME_LAND 32 // pm_time is time before rejump
|
|
#define PMF_TIME_KNOCKBACK 64 // pm_time is an air-accelerate only time
|
|
#define PMF_FIX_MINS 128 // mins have been brought up, keep tracing down to fix them
|
|
#define PMF_TIME_WATERJUMP 256 // pm_time is waterjump
|
|
#define PMF_RESPAWNED 512 // clear after attack and jump buttons come up
|
|
#define PMF_USE_ITEM_HELD 1024
|
|
#define PMF_UPDATE_ANIM 2048 // The server updated the animation, the pmove should set the ghoul2 anim to match.
|
|
#define PMF_FOLLOW 4096 // spectate following another player
|
|
#define PMF_SCOREBOARD 8192 // spectate as a scoreboard
|
|
#define PMF_STUCK_TO_WALL 16384 // grabbing a wall
|
|
|
|
#define PMF_ALL_TIMES (PMF_TIME_WATERJUMP|PMF_TIME_LAND|PMF_TIME_KNOCKBACK)
|
|
|
|
#define MAXTOUCH 32
|
|
|
|
struct bgEntity_s
|
|
{
|
|
entityState_t s;
|
|
playerState_t *playerState;
|
|
Vehicle_t *m_pVehicle; //vehicle data
|
|
void *ghoul2; //g2 instance
|
|
int localAnimIndex; //index locally (game/cgame) to anim data for this skel
|
|
vec3_t modelScale; //needed for g2 collision
|
|
|
|
//Data type(s) must directly correspond to the head of the gentity and centity structures
|
|
};
|
|
|
|
typedef struct {
|
|
// state (in / out)
|
|
playerState_t *ps;
|
|
|
|
//rww - shared ghoul2 stuff (not actually the same data, but hey)
|
|
void *ghoul2;
|
|
int g2Bolts_LFoot;
|
|
int g2Bolts_RFoot;
|
|
vec3_t modelScale;
|
|
|
|
//hacky bool so we know if we're dealing with a nonhumanoid (which is probably a rockettrooper)
|
|
qboolean nonHumanoid;
|
|
|
|
// command (in)
|
|
usercmd_t cmd;
|
|
int tracemask; // collide against these types of surfaces
|
|
int debugLevel; // if set, diagnostic output will be printed
|
|
qboolean noFootsteps; // if the game is setup for no footsteps by the server
|
|
qboolean gauntletHit; // true if a gauntlet attack would actually hit something
|
|
|
|
int framecount;
|
|
|
|
// results (out)
|
|
int numtouch;
|
|
int touchents[MAXTOUCH];
|
|
|
|
int useEvent;
|
|
|
|
vec3_t mins, maxs; // bounding box size
|
|
|
|
int watertype;
|
|
int waterlevel;
|
|
|
|
int gametype;
|
|
|
|
int debugMelee;
|
|
int stepSlideFix;
|
|
int noSpecMove;
|
|
|
|
animation_t *animations;
|
|
|
|
float xyspeed;
|
|
|
|
// for fixed msec Pmove
|
|
int pmove_fixed;
|
|
int pmove_msec;
|
|
|
|
// callbacks to test the world
|
|
// these will be different functions during game and cgame
|
|
void (*trace)( trace_t *results, const vec3_t start, const vec3_t mins, const vec3_t maxs, const vec3_t end, int passEntityNum, int contentMask );
|
|
int (*pointcontents)( const vec3_t point, int passEntityNum );
|
|
|
|
int checkDuelLoss;
|
|
|
|
//rww - bg entitystate access method
|
|
bgEntity_t *baseEnt; //base address of the entity array (g_entities or cg_entities)
|
|
int entSize; //size of the struct (gentity_t or centity_t) so things can be dynamic
|
|
} pmove_t;
|
|
|
|
#include "../namespace_begin.h"
|
|
|
|
extern pmove_t *pm;
|
|
|
|
#define SETANIM_TORSO 1
|
|
#define SETANIM_LEGS 2
|
|
#define SETANIM_BOTH SETANIM_TORSO|SETANIM_LEGS//3
|
|
|
|
#define SETANIM_FLAG_NORMAL 0//Only set if timer is 0
|
|
#define SETANIM_FLAG_OVERRIDE 1//Override previous
|
|
#define SETANIM_FLAG_HOLD 2//Set the new timer
|
|
#define SETANIM_FLAG_RESTART 4//Allow restarting the anim if playing the same one (weapon fires)
|
|
#define SETANIM_FLAG_HOLDLESS 8//Set the new timer
|
|
|
|
|
|
// if a full pmove isn't done on the client, you can just update the angles
|
|
void PM_UpdateViewAngles( playerState_t *ps, const usercmd_t *cmd );
|
|
void Pmove (pmove_t *pmove);
|
|
|
|
#include "../namespace_end.h"
|
|
|
|
//===================================================================================
|
|
|
|
|
|
// player_state->stats[] indexes
|
|
// NOTE: may not have more than 16
|
|
typedef enum {
|
|
STAT_HEALTH,
|
|
STAT_HOLDABLE_ITEM,
|
|
STAT_HOLDABLE_ITEMS,
|
|
STAT_PERSISTANT_POWERUP,
|
|
//MAKE SURE STAT_WEAPONS REMAINS 4!!!!
|
|
//There is a hardcoded reference in msg.cpp to send it in 32 bits -rww
|
|
STAT_WEAPONS = 4, // 16 bit fields
|
|
STAT_ARMOR,
|
|
STAT_DEAD_YAW, // look this direction when dead (FIXME: get rid of?)
|
|
STAT_CLIENTS_READY, // bit mask of clients wishing to exit the intermission (FIXME: configstring?)
|
|
STAT_MAX_HEALTH // health / armor limit, changable by handicap
|
|
} statIndex_t;
|
|
|
|
|
|
// player_state->persistant[] indexes
|
|
// these fields are the only part of player_state that isn't
|
|
// cleared on respawn
|
|
// NOTE: may not have more than 16
|
|
typedef enum {
|
|
PERS_SCORE, // !!! MUST NOT CHANGE, SERVER AND GAME BOTH REFERENCE !!!
|
|
PERS_HITS, // total points damage inflicted so damage beeps can sound on change
|
|
PERS_RANK, // player rank or team rank
|
|
PERS_TEAM, // player team
|
|
PERS_SPAWN_COUNT, // incremented every respawn
|
|
PERS_PLAYEREVENTS, // 16 bits that can be flipped for events
|
|
PERS_ATTACKER, // clientnum of last damage inflicter
|
|
PERS_ATTACKEE_ARMOR, // health/armor of last person we attacked
|
|
PERS_KILLED, // count of the number of times you died
|
|
// player awards tracking
|
|
PERS_IMPRESSIVE_COUNT, // two railgun hits in a row
|
|
PERS_EXCELLENT_COUNT, // two successive kills in a short amount of time
|
|
PERS_DEFEND_COUNT, // defend awards
|
|
PERS_ASSIST_COUNT, // assist awards
|
|
PERS_GAUNTLET_FRAG_COUNT, // kills with the guantlet
|
|
PERS_CAPTURES // captures
|
|
} persEnum_t;
|
|
|
|
|
|
// entityState_t->eFlags
|
|
#define EF_G2ANIMATING (1<<0) //perform g2 bone anims based on torsoAnim and legsAnim, works for ET_GENERAL -rww
|
|
#define EF_DEAD (1<<1) // don't draw a foe marker over players with EF_DEAD
|
|
//#define EF_BOUNCE_SHRAPNEL (1<<2) // special shrapnel flag
|
|
//do not use eflags for server-only things, it wastes bandwidth -rww
|
|
#define EF_RADAROBJECT (1<<2) // display on team radar
|
|
|
|
#define EF_TELEPORT_BIT (1<<3) // toggled every time the origin abruptly changes
|
|
|
|
#define EF_SHADER_ANIM (1<<4) // Animating shader (by s.frame)
|
|
|
|
#define EF_PLAYER_EVENT (1<<5)
|
|
//#define EF_BOUNCE (1<<5) // for missiles
|
|
//#define EF_BOUNCE_HALF (1<<6) // for missiles
|
|
//these aren't even referenced in bg or client code and do not need to be eFlags, so I
|
|
//am using these flags for rag stuff -rww
|
|
|
|
#define EF_RAG (1<<6) //ragdoll him even if he's alive
|
|
|
|
|
|
#define EF_PERMANENT (1<<7) // rww - I am claiming this. (for permanent entities)
|
|
|
|
#define EF_NODRAW (1<<8) // may have an event, but no model (unspawned items)
|
|
#define EF_FIRING (1<<9) // for lightning gun
|
|
#define EF_ALT_FIRING (1<<10) // for alt-fires, mostly for lightning guns though
|
|
#define EF_JETPACK_ACTIVE (1<<11) //jetpack is activated
|
|
|
|
#define EF_NOT_USED_1 (1<<12) // not used
|
|
|
|
#define EF_TALK (1<<13) // draw a talk balloon
|
|
#define EF_CONNECTION (1<<14) // draw a connection trouble sprite
|
|
#define EF_NOT_USED_6 (1<<15) // not used
|
|
|
|
#define EF_NOT_USED_2 (1<<16) // not used
|
|
#define EF_NOT_USED_3 (1<<17) // not used
|
|
#define EF_NOT_USED_4 (1<<18) // not used
|
|
|
|
#define EF_BODYPUSH (1<<19) //rww - claiming this for fullbody push effect
|
|
|
|
#define EF_DOUBLE_AMMO (1<<20) // Hacky way to get around ammo max
|
|
#define EF_SEEKERDRONE (1<<21) // show seeker drone floating around head
|
|
#define EF_MISSILE_STICK (1<<22) // missiles that stick to the wall.
|
|
#define EF_ITEMPLACEHOLDER (1<<23) // item effect
|
|
#define EF_SOUNDTRACKER (1<<24) // sound position needs to be updated in relation to another entity
|
|
#define EF_DROPPEDWEAPON (1<<25) // it's a dropped weapon
|
|
#define EF_DISINTEGRATION (1<<26) // being disintegrated by the disruptor
|
|
#define EF_INVULNERABLE (1<<27) // just spawned in or whatever, so is protected
|
|
|
|
#define EF_CLIENTSMOOTH (1<<28) // standard lerporigin smooth override on client
|
|
|
|
#define EF_JETPACK (1<<29) //rww - wearing a jetpack
|
|
#define EF_JETPACK_FLAMING (1<<30) //rww - jetpack fire effect
|
|
|
|
#define EF_NOT_USED_5 (1<<31) // not used
|
|
|
|
//These new EF2_??? flags were added for NPCs, they really should not be used often.
|
|
//NOTE: we only allow 10 of these!
|
|
#define EF2_HELD_BY_MONSTER (1<<0) // Being held by something, like a Rancor or a Wampa
|
|
#define EF2_USE_ALT_ANIM (1<<1) // For certain special runs/stands for creatures like the Rancor and Wampa whose runs/stands are conditional
|
|
#define EF2_ALERTED (1<<2) // For certain special anims, for Rancor: means you've had an enemy, so use the more alert stand
|
|
#define EF2_GENERIC_NPC_FLAG (1<<3) // So far, used for Rancor...
|
|
#define EF2_FLYING (1<<4) // Flying FIXME: only used on NPCs doesn't *really* have to be passed over, does it?
|
|
#define EF2_HYPERSPACE (1<<5) // Used to both start the hyperspace effect on the predicted client and to let the vehicle know it can now jump into hyperspace (after turning to face the proper angle)
|
|
#define EF2_BRACKET_ENTITY (1<<6) // Draw as bracketed
|
|
#define EF2_SHIP_DEATH (1<<7) // "died in ship" mode
|
|
#define EF2_NOT_USED_1 (1<<8) // not used
|
|
|
|
|
|
typedef enum {
|
|
EFFECT_NONE = 0,
|
|
EFFECT_SMOKE,
|
|
EFFECT_EXPLOSION,
|
|
EFFECT_EXPLOSION_PAS,
|
|
EFFECT_SPARK_EXPLOSION,
|
|
EFFECT_EXPLOSION_TRIPMINE,
|
|
EFFECT_EXPLOSION_DETPACK,
|
|
EFFECT_EXPLOSION_FLECHETTE,
|
|
EFFECT_STUNHIT,
|
|
EFFECT_EXPLOSION_DEMP2ALT,
|
|
EFFECT_EXPLOSION_TURRET,
|
|
EFFECT_SPARKS,
|
|
EFFECT_WATER_SPLASH,
|
|
EFFECT_ACID_SPLASH,
|
|
EFFECT_LAVA_SPLASH,
|
|
EFFECT_LANDING_MUD,
|
|
EFFECT_LANDING_SAND,
|
|
EFFECT_LANDING_DIRT,
|
|
EFFECT_LANDING_SNOW,
|
|
EFFECT_LANDING_GRAVEL,
|
|
EFFECT_MAX
|
|
} effectTypes_t;
|
|
|
|
// NOTE: may not have more than 16
|
|
enum {
|
|
PW_NONE,
|
|
|
|
PW_QUAD,
|
|
PW_BATTLESUIT,
|
|
PW_PULL,
|
|
//PW_INVIS, //rww - removed
|
|
//PW_REGEN, //rww - removed
|
|
//PW_FLIGHT, //rww - removed
|
|
|
|
PW_REDFLAG,
|
|
PW_BLUEFLAG,
|
|
PW_NEUTRALFLAG,
|
|
|
|
PW_SHIELDHIT,
|
|
|
|
//PW_SCOUT, //rww - removed
|
|
//PW_GUARD, //rww - removed
|
|
//PW_DOUBLER, //rww - removed
|
|
//PW_AMMOREGEN, //rww - removed
|
|
PW_SPEEDBURST,
|
|
PW_DISINT_4,
|
|
PW_SPEED,
|
|
PW_CLOAKED,
|
|
PW_FORCE_ENLIGHTENED_LIGHT,
|
|
PW_FORCE_ENLIGHTENED_DARK,
|
|
PW_FORCE_BOON,
|
|
PW_YSALAMIRI,
|
|
|
|
PW_NUM_POWERUPS
|
|
|
|
};
|
|
typedef int powerup_t;
|
|
|
|
enum {
|
|
HI_NONE,
|
|
|
|
HI_SEEKER,
|
|
HI_SHIELD,
|
|
HI_MEDPAC,
|
|
HI_MEDPAC_BIG,
|
|
HI_BINOCULARS,
|
|
HI_SENTRY_GUN,
|
|
HI_JETPACK,
|
|
|
|
HI_HEALTHDISP,
|
|
HI_AMMODISP,
|
|
HI_EWEB,
|
|
HI_CLOAK,
|
|
|
|
HI_NUM_HOLDABLE
|
|
};
|
|
typedef int holdable_t;
|
|
|
|
|
|
typedef enum {
|
|
CTFMESSAGE_FRAGGED_FLAG_CARRIER,
|
|
CTFMESSAGE_FLAG_RETURNED,
|
|
CTFMESSAGE_PLAYER_RETURNED_FLAG,
|
|
CTFMESSAGE_PLAYER_CAPTURED_FLAG,
|
|
CTFMESSAGE_PLAYER_GOT_FLAG
|
|
} ctfMsg_t;
|
|
|
|
// reward sounds (stored in ps->persistant[PERS_PLAYEREVENTS])
|
|
#define PLAYEREVENT_DENIEDREWARD 0x0001
|
|
#define PLAYEREVENT_GAUNTLETREWARD 0x0002
|
|
|
|
// entityState_t->event values
|
|
// entity events are for effects that take place reletive
|
|
// to an existing entities origin. Very network efficient.
|
|
|
|
// two bits at the top of the entityState->event field
|
|
// will be incremented with each change in the event so
|
|
// that an identical event started twice in a row can
|
|
// be distinguished. And off the value with ~EV_EVENT_BITS
|
|
// to retrieve the actual event number
|
|
#define EV_EVENT_BIT1 0x00000100
|
|
#define EV_EVENT_BIT2 0x00000200
|
|
#define EV_EVENT_BITS (EV_EVENT_BIT1|EV_EVENT_BIT2)
|
|
|
|
#define EVENT_VALID_MSEC 300
|
|
|
|
typedef enum
|
|
{
|
|
PDSOUND_NONE,
|
|
PDSOUND_PROTECTHIT,
|
|
PDSOUND_PROTECT,
|
|
PDSOUND_ABSORBHIT,
|
|
PDSOUND_ABSORB,
|
|
PDSOUND_FORCEJUMP,
|
|
PDSOUND_FORCEGRIP
|
|
} pdSounds_t;
|
|
|
|
typedef enum {
|
|
EV_NONE,
|
|
|
|
EV_CLIENTJOIN,
|
|
|
|
EV_FOOTSTEP,
|
|
EV_FOOTSTEP_METAL,
|
|
EV_FOOTSPLASH,
|
|
EV_FOOTWADE,
|
|
EV_SWIM,
|
|
|
|
EV_STEP_4,
|
|
EV_STEP_8,
|
|
EV_STEP_12,
|
|
EV_STEP_16,
|
|
|
|
EV_FALL,
|
|
|
|
EV_JUMP_PAD, // boing sound at origin, jump sound on player
|
|
|
|
EV_GHOUL2_MARK, //create a projectile impact mark on something with a client-side g2 instance.
|
|
|
|
EV_GLOBAL_DUEL,
|
|
EV_PRIVATE_DUEL,
|
|
|
|
EV_JUMP,
|
|
EV_ROLL,
|
|
EV_WATER_TOUCH, // foot touches
|
|
EV_WATER_LEAVE, // foot leaves
|
|
EV_WATER_UNDER, // head touches
|
|
EV_WATER_CLEAR, // head leaves
|
|
|
|
EV_ITEM_PICKUP, // normal item pickups are predictable
|
|
EV_GLOBAL_ITEM_PICKUP, // powerup / team sounds are broadcast to everyone
|
|
|
|
EV_VEH_FIRE,
|
|
|
|
EV_NOAMMO,
|
|
EV_CHANGE_WEAPON,
|
|
EV_FIRE_WEAPON,
|
|
EV_ALT_FIRE,
|
|
EV_SABER_ATTACK,
|
|
EV_SABER_HIT,
|
|
EV_SABER_BLOCK,
|
|
EV_SABER_CLASHFLARE,
|
|
EV_SABER_UNHOLSTER,
|
|
EV_BECOME_JEDIMASTER,
|
|
EV_DISRUPTOR_MAIN_SHOT,
|
|
EV_DISRUPTOR_SNIPER_SHOT,
|
|
EV_DISRUPTOR_SNIPER_MISS,
|
|
EV_DISRUPTOR_HIT,
|
|
EV_DISRUPTOR_ZOOMSOUND,
|
|
|
|
EV_PREDEFSOUND,
|
|
|
|
EV_TEAM_POWER,
|
|
|
|
EV_SCREENSHAKE,
|
|
|
|
EV_LOCALTIMER,
|
|
|
|
EV_USE, // +Use key
|
|
|
|
EV_USE_ITEM0,
|
|
EV_USE_ITEM1,
|
|
EV_USE_ITEM2,
|
|
EV_USE_ITEM3,
|
|
EV_USE_ITEM4,
|
|
EV_USE_ITEM5,
|
|
EV_USE_ITEM6,
|
|
EV_USE_ITEM7,
|
|
EV_USE_ITEM8,
|
|
EV_USE_ITEM9,
|
|
EV_USE_ITEM10,
|
|
EV_USE_ITEM11,
|
|
EV_USE_ITEM12,
|
|
EV_USE_ITEM13,
|
|
EV_USE_ITEM14,
|
|
EV_USE_ITEM15,
|
|
|
|
EV_ITEMUSEFAIL,
|
|
|
|
EV_ITEM_RESPAWN,
|
|
EV_ITEM_POP,
|
|
EV_PLAYER_TELEPORT_IN,
|
|
EV_PLAYER_TELEPORT_OUT,
|
|
|
|
EV_GRENADE_BOUNCE, // eventParm will be the soundindex
|
|
EV_MISSILE_STICK, // eventParm will be the soundindex
|
|
|
|
EV_PLAY_EFFECT,
|
|
EV_PLAY_EFFECT_ID,
|
|
EV_PLAY_PORTAL_EFFECT_ID,
|
|
|
|
EV_PLAYDOORSOUND,
|
|
EV_PLAYDOORLOOPSOUND,
|
|
EV_BMODEL_SOUND,
|
|
|
|
EV_MUTE_SOUND,
|
|
EV_VOICECMD_SOUND,
|
|
EV_GENERAL_SOUND,
|
|
EV_GLOBAL_SOUND, // no attenuation
|
|
EV_GLOBAL_TEAM_SOUND,
|
|
EV_ENTITY_SOUND,
|
|
|
|
EV_PLAY_ROFF,
|
|
|
|
EV_GLASS_SHATTER,
|
|
EV_DEBRIS,
|
|
EV_MISC_MODEL_EXP,
|
|
|
|
EV_CONC_ALT_IMPACT,
|
|
|
|
EV_MISSILE_HIT,
|
|
EV_MISSILE_MISS,
|
|
EV_MISSILE_MISS_METAL,
|
|
EV_BULLET, // otherEntity is the shooter
|
|
|
|
EV_PAIN,
|
|
EV_DEATH1,
|
|
EV_DEATH2,
|
|
EV_DEATH3,
|
|
EV_OBITUARY,
|
|
|
|
EV_POWERUP_QUAD,
|
|
EV_POWERUP_BATTLESUIT,
|
|
//EV_POWERUP_REGEN,
|
|
|
|
EV_FORCE_DRAINED,
|
|
|
|
EV_GIB_PLAYER, // gib a previously living player
|
|
EV_SCOREPLUM, // score plum
|
|
|
|
EV_CTFMESSAGE,
|
|
|
|
EV_BODYFADE,
|
|
|
|
EV_SIEGE_ROUNDOVER,
|
|
EV_SIEGE_OBJECTIVECOMPLETE,
|
|
|
|
EV_DESTROY_GHOUL2_INSTANCE,
|
|
|
|
EV_DESTROY_WEAPON_MODEL,
|
|
|
|
EV_GIVE_NEW_RANK,
|
|
EV_SET_FREE_SABER,
|
|
EV_SET_FORCE_DISABLE,
|
|
|
|
EV_WEAPON_CHARGE,
|
|
EV_WEAPON_CHARGE_ALT,
|
|
|
|
EV_SHIELD_HIT,
|
|
|
|
EV_DEBUG_LINE,
|
|
EV_TESTLINE,
|
|
EV_STOPLOOPINGSOUND,
|
|
EV_STARTLOOPINGSOUND,
|
|
EV_TAUNT,
|
|
|
|
//rww - Begin NPC sound events
|
|
EV_ANGER1, //Say when acquire an enemy when didn't have one before
|
|
EV_ANGER2,
|
|
EV_ANGER3,
|
|
|
|
EV_VICTORY1, //Say when killed an enemy
|
|
EV_VICTORY2,
|
|
EV_VICTORY3,
|
|
|
|
EV_CONFUSE1, //Say when confused
|
|
EV_CONFUSE2,
|
|
EV_CONFUSE3,
|
|
|
|
EV_PUSHED1, //Say when pushed
|
|
EV_PUSHED2,
|
|
EV_PUSHED3,
|
|
|
|
EV_CHOKE1, //Say when choking
|
|
EV_CHOKE2,
|
|
EV_CHOKE3,
|
|
|
|
EV_FFWARN, //ffire founds
|
|
EV_FFTURN,
|
|
//extra sounds for ST
|
|
EV_CHASE1,
|
|
EV_CHASE2,
|
|
EV_CHASE3,
|
|
EV_COVER1,
|
|
EV_COVER2,
|
|
EV_COVER3,
|
|
EV_COVER4,
|
|
EV_COVER5,
|
|
EV_DETECTED1,
|
|
EV_DETECTED2,
|
|
EV_DETECTED3,
|
|
EV_DETECTED4,
|
|
EV_DETECTED5,
|
|
EV_LOST1,
|
|
EV_OUTFLANK1,
|
|
EV_OUTFLANK2,
|
|
EV_ESCAPING1,
|
|
EV_ESCAPING2,
|
|
EV_ESCAPING3,
|
|
EV_GIVEUP1,
|
|
EV_GIVEUP2,
|
|
EV_GIVEUP3,
|
|
EV_GIVEUP4,
|
|
EV_LOOK1,
|
|
EV_LOOK2,
|
|
EV_SIGHT1,
|
|
EV_SIGHT2,
|
|
EV_SIGHT3,
|
|
EV_SOUND1,
|
|
EV_SOUND2,
|
|
EV_SOUND3,
|
|
EV_SUSPICIOUS1,
|
|
EV_SUSPICIOUS2,
|
|
EV_SUSPICIOUS3,
|
|
EV_SUSPICIOUS4,
|
|
EV_SUSPICIOUS5,
|
|
//extra sounds for Jedi
|
|
EV_COMBAT1,
|
|
EV_COMBAT2,
|
|
EV_COMBAT3,
|
|
EV_JDETECTED1,
|
|
EV_JDETECTED2,
|
|
EV_JDETECTED3,
|
|
EV_TAUNT1,
|
|
EV_TAUNT2,
|
|
EV_TAUNT3,
|
|
EV_JCHASE1,
|
|
EV_JCHASE2,
|
|
EV_JCHASE3,
|
|
EV_JLOST1,
|
|
EV_JLOST2,
|
|
EV_JLOST3,
|
|
EV_DEFLECT1,
|
|
EV_DEFLECT2,
|
|
EV_DEFLECT3,
|
|
EV_GLOAT1,
|
|
EV_GLOAT2,
|
|
EV_GLOAT3,
|
|
EV_PUSHFAIL,
|
|
|
|
EV_SIEGESPEC,
|
|
|
|
} entity_event_t; // There is a maximum of 256 events (8 bits transmission, 2 high bits for uniqueness)
|
|
|
|
|
|
typedef enum {
|
|
GTS_RED_CAPTURE,
|
|
GTS_BLUE_CAPTURE,
|
|
GTS_RED_RETURN,
|
|
GTS_BLUE_RETURN,
|
|
GTS_RED_TAKEN,
|
|
GTS_BLUE_TAKEN,
|
|
GTS_REDTEAM_SCORED,
|
|
GTS_BLUETEAM_SCORED,
|
|
GTS_REDTEAM_TOOK_LEAD,
|
|
GTS_BLUETEAM_TOOK_LEAD,
|
|
GTS_TEAMS_ARE_TIED
|
|
} global_team_sound_t;
|
|
|
|
|
|
|
|
enum {
|
|
TEAM_FREE,
|
|
TEAM_RED,
|
|
TEAM_BLUE,
|
|
TEAM_SPECTATOR,
|
|
|
|
TEAM_NUM_TEAMS
|
|
};
|
|
typedef int team_t;
|
|
|
|
typedef enum {
|
|
DUELTEAM_FREE,
|
|
DUELTEAM_LONE,
|
|
DUELTEAM_DOUBLE,
|
|
|
|
DUELTEAM_SINGLE, // for regular duel matches (not power duel)
|
|
} duelTeam_t;
|
|
|
|
// Time between location updates
|
|
#define TEAM_LOCATION_UPDATE_TIME 1000
|
|
|
|
// How many players on the overlay
|
|
#define TEAM_MAXOVERLAY 32
|
|
|
|
//team task
|
|
typedef enum {
|
|
TEAMTASK_NONE,
|
|
TEAMTASK_OFFENSE,
|
|
TEAMTASK_DEFENSE,
|
|
TEAMTASK_PATROL,
|
|
TEAMTASK_FOLLOW,
|
|
TEAMTASK_RETRIEVE,
|
|
TEAMTASK_ESCORT,
|
|
TEAMTASK_CAMP
|
|
} teamtask_t;
|
|
|
|
// means of death
|
|
typedef enum {
|
|
MOD_UNKNOWN,
|
|
MOD_STUN_BATON,
|
|
MOD_MELEE,
|
|
MOD_SABER,
|
|
MOD_BRYAR_PISTOL,
|
|
MOD_BRYAR_PISTOL_ALT,
|
|
MOD_BLASTER,
|
|
MOD_TURBLAST,
|
|
MOD_DISRUPTOR,
|
|
MOD_DISRUPTOR_SPLASH,
|
|
MOD_DISRUPTOR_SNIPER,
|
|
MOD_BOWCASTER,
|
|
MOD_REPEATER,
|
|
MOD_REPEATER_ALT,
|
|
MOD_REPEATER_ALT_SPLASH,
|
|
MOD_DEMP2,
|
|
MOD_DEMP2_ALT,
|
|
MOD_FLECHETTE,
|
|
MOD_FLECHETTE_ALT_SPLASH,
|
|
MOD_ROCKET,
|
|
MOD_ROCKET_SPLASH,
|
|
MOD_ROCKET_HOMING,
|
|
MOD_ROCKET_HOMING_SPLASH,
|
|
MOD_THERMAL,
|
|
MOD_THERMAL_SPLASH,
|
|
MOD_TRIP_MINE_SPLASH,
|
|
MOD_TIMED_MINE_SPLASH,
|
|
MOD_DET_PACK_SPLASH,
|
|
MOD_VEHICLE,
|
|
MOD_CONC,
|
|
MOD_CONC_ALT,
|
|
MOD_FORCE_DARK,
|
|
MOD_SENTRY,
|
|
MOD_WATER,
|
|
MOD_SLIME,
|
|
MOD_LAVA,
|
|
MOD_CRUSH,
|
|
MOD_TELEFRAG,
|
|
MOD_FALLING,
|
|
MOD_COLLISION,
|
|
MOD_VEH_EXPLOSION,
|
|
MOD_SUICIDE,
|
|
MOD_TARGET_LASER,
|
|
MOD_TRIGGER_HURT,
|
|
MOD_TEAM_CHANGE,
|
|
//AURELIO: when/if you put this back in, remember to make a case for it in all the other places where
|
|
//mod's are checked. Also, it probably isn't the most elegant solution for what you want - just add
|
|
//a frag back to the player after you call the player_die (and keep a local of his pre-death score to
|
|
//make sure he actually lost points, there may be cases where you don't lose points on changing teams
|
|
//or suiciding, and so you would actually be giving him a point) -Rich
|
|
// I put it back in for now, if it becomes a problem we'll work around it later (it shouldn't though)...
|
|
MOD_MAX
|
|
} meansOfDeath_t;
|
|
|
|
|
|
//---------------------------------------------------------
|
|
|
|
// gitem_t->type
|
|
enum {
|
|
IT_BAD,
|
|
IT_WEAPON, // EFX: rotate + upscale + minlight
|
|
IT_AMMO, // EFX: rotate
|
|
IT_ARMOR, // EFX: rotate + minlight
|
|
IT_HEALTH, // EFX: static external sphere + rotating internal
|
|
IT_POWERUP, // instant on, timer based
|
|
// EFX: rotate + external ring that rotates
|
|
IT_HOLDABLE, // single use, holdable item
|
|
// EFX: rotate + bob
|
|
IT_PERSISTANT_POWERUP,
|
|
IT_TEAM
|
|
};
|
|
typedef int itemType_t;
|
|
|
|
#define MAX_ITEM_MODELS 4
|
|
|
|
typedef struct gitem_s {
|
|
char *classname; // spawning name
|
|
char *pickup_sound;
|
|
char *world_model[MAX_ITEM_MODELS];
|
|
char *view_model;
|
|
char *icon;
|
|
// char *pickup_name; // for printing on pickup
|
|
|
|
int quantity; // for ammo how much, or duration of powerup
|
|
itemType_t giType; // IT_* flags
|
|
|
|
int giTag;
|
|
|
|
char *precaches; // string of all models and images this item will use
|
|
char *sounds; // string of all sounds this item will use
|
|
char *description;
|
|
} gitem_t;
|
|
|
|
// included in both the game dll and the client
|
|
#include "../namespace_begin.h"
|
|
|
|
extern gitem_t bg_itemlist[];
|
|
extern int bg_numItems;
|
|
|
|
float vectoyaw( const vec3_t vec );
|
|
|
|
gitem_t *BG_FindItem( const char *classname );
|
|
gitem_t *BG_FindItemForWeapon( weapon_t weapon );
|
|
gitem_t *BG_FindItemForPowerup( powerup_t pw );
|
|
gitem_t *BG_FindItemForHoldable( holdable_t pw );
|
|
#define ITEM_INDEX(x) ((x)-bg_itemlist)
|
|
|
|
qboolean BG_CanItemBeGrabbed( int gametype, const entityState_t *ent, const playerState_t *ps );
|
|
|
|
#include "../namespace_end.h"
|
|
|
|
|
|
#define SABER_BLOCK_DUR 150 // number of milliseconds a block animation should take.
|
|
|
|
|
|
|
|
// g_dmflags->integer flags
|
|
#define DF_NO_FALLING 8
|
|
#define DF_FIXED_FOV 16
|
|
#define DF_NO_FOOTSTEPS 32
|
|
|
|
//rwwRMG - added in CONTENTS_TERRAIN
|
|
// content masks
|
|
#define MASK_ALL (-1)
|
|
#define MASK_SOLID (CONTENTS_SOLID|CONTENTS_TERRAIN)
|
|
#define MASK_PLAYERSOLID (CONTENTS_SOLID|CONTENTS_PLAYERCLIP|CONTENTS_BODY|CONTENTS_TERRAIN)
|
|
#define MASK_NPCSOLID (CONTENTS_SOLID|CONTENTS_MONSTERCLIP|CONTENTS_BODY|CONTENTS_TERRAIN)
|
|
#define MASK_DEADSOLID (CONTENTS_SOLID|CONTENTS_PLAYERCLIP|CONTENTS_TERRAIN)
|
|
#define MASK_WATER (CONTENTS_WATER|CONTENTS_LAVA|CONTENTS_SLIME)
|
|
#define MASK_OPAQUE (CONTENTS_SOLID|CONTENTS_SLIME|CONTENTS_LAVA|CONTENTS_TERRAIN)
|
|
#define MASK_SHOT (CONTENTS_SOLID|CONTENTS_BODY|CONTENTS_CORPSE|CONTENTS_TERRAIN)
|
|
|
|
|
|
// ET_FX States (stored in modelindex2)
|
|
|
|
#define FX_STATE_OFF 0
|
|
#define FX_STATE_ONE_SHOT 1
|
|
#define FX_STATE_ONE_SHOT_LIMIT 10
|
|
#define FX_STATE_CONTINUOUS 20
|
|
|
|
//
|
|
// entityState_t->eType
|
|
//
|
|
typedef enum {
|
|
ET_GENERAL,
|
|
ET_PLAYER,
|
|
ET_ITEM,
|
|
ET_MISSILE,
|
|
ET_SPECIAL, // rww - force fields
|
|
ET_HOLOCRON, // rww - holocron icon displays
|
|
ET_MOVER,
|
|
ET_BEAM,
|
|
ET_PORTAL,
|
|
ET_SPEAKER,
|
|
ET_PUSH_TRIGGER,
|
|
ET_TELEPORT_TRIGGER,
|
|
ET_INVISIBLE,
|
|
ET_NPC, // ghoul2 player-like entity
|
|
ET_TEAM,
|
|
ET_BODY,
|
|
ET_TERRAIN,
|
|
ET_FX,
|
|
|
|
ET_EVENTS // any of the EV_* events can be added freestanding
|
|
// by setting eType to ET_EVENTS + eventNum
|
|
// this avoids having to set eFlags and eventNum
|
|
} entityType_t;
|
|
|
|
|
|
|
|
|
|
//
|
|
// fields are needed for spawning from the entity string
|
|
//
|
|
//I moved these from g_spawn.c because the entity parsing stuff is semi-shared now -rww
|
|
#undef _GAME_SIDE
|
|
|
|
#ifdef QAGAME
|
|
#define _GAME_SIDE
|
|
#elif defined CGAME
|
|
#define _GAME_SIDE
|
|
#endif
|
|
|
|
#ifdef _GAME_SIDE
|
|
typedef enum {
|
|
F_INT,
|
|
F_FLOAT,
|
|
F_LSTRING, // string on disk, pointer in memory, TAG_LEVEL
|
|
F_GSTRING, // string on disk, pointer in memory, TAG_GAME
|
|
F_VECTOR,
|
|
F_ANGLEHACK,
|
|
F_ENTITY, // index on disk, pointer in memory
|
|
F_ITEM, // index on disk, pointer in memory
|
|
F_CLIENT, // index on disk, pointer in memory
|
|
F_PARM1, // Special case for parms
|
|
F_PARM2, // Special case for parms
|
|
F_PARM3, // Special case for parms
|
|
F_PARM4, // Special case for parms
|
|
F_PARM5, // Special case for parms
|
|
F_PARM6, // Special case for parms
|
|
F_PARM7, // Special case for parms
|
|
F_PARM8, // Special case for parms
|
|
F_PARM9, // Special case for parms
|
|
F_PARM10, // Special case for parms
|
|
F_PARM11, // Special case for parms
|
|
F_PARM12, // Special case for parms
|
|
F_PARM13, // Special case for parms
|
|
F_PARM14, // Special case for parms
|
|
F_PARM15, // Special case for parms
|
|
F_PARM16, // Special case for parms
|
|
F_IGNORE
|
|
} fieldtype_t;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
{
|
|
char *name;
|
|
int ofs;
|
|
fieldtype_t type;
|
|
int flags;
|
|
} BG_field_t;
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
// Okay, here lies the much-dreaded Pat-created FSM movement chart... Heretic II strikes again!
|
|
// Why am I inflicting this on you? Well, it's better than hardcoded states.
|
|
// Ideally this will be replaced with an external file or more sophisticated move-picker
|
|
// once the game gets out of prototype stage.
|
|
|
|
// rww - Moved all this to bg_public so that we can access the saberMoveData stuff on the cgame
|
|
// which is currently used for determining if a saber trail should be rendered in a given frame
|
|
#ifdef LS_NONE
|
|
#undef LS_NONE
|
|
#endif
|
|
|
|
enum {
|
|
//totally invalid
|
|
LS_INVALID = -1,
|
|
// Invalid, or saber not armed
|
|
LS_NONE = 0,
|
|
|
|
// General movements with saber
|
|
LS_READY,
|
|
LS_DRAW,
|
|
LS_PUTAWAY,
|
|
|
|
// Attacks
|
|
LS_A_TL2BR,//4
|
|
LS_A_L2R,
|
|
LS_A_BL2TR,
|
|
LS_A_BR2TL,
|
|
LS_A_R2L,
|
|
LS_A_TR2BL,
|
|
LS_A_T2B,
|
|
LS_A_BACKSTAB,
|
|
LS_A_BACK,
|
|
LS_A_BACK_CR,
|
|
LS_ROLL_STAB,
|
|
LS_A_LUNGE,
|
|
LS_A_JUMP_T__B_,
|
|
LS_A_FLIP_STAB,
|
|
LS_A_FLIP_SLASH,
|
|
LS_JUMPATTACK_DUAL,
|
|
LS_JUMPATTACK_ARIAL_LEFT,
|
|
LS_JUMPATTACK_ARIAL_RIGHT,
|
|
LS_JUMPATTACK_CART_LEFT,
|
|
LS_JUMPATTACK_CART_RIGHT,
|
|
LS_JUMPATTACK_STAFF_LEFT,
|
|
LS_JUMPATTACK_STAFF_RIGHT,
|
|
LS_BUTTERFLY_LEFT,
|
|
LS_BUTTERFLY_RIGHT,
|
|
LS_A_BACKFLIP_ATK,
|
|
LS_SPINATTACK_DUAL,
|
|
LS_SPINATTACK,
|
|
LS_LEAP_ATTACK,
|
|
LS_SWOOP_ATTACK_RIGHT,
|
|
LS_SWOOP_ATTACK_LEFT,
|
|
LS_TAUNTAUN_ATTACK_RIGHT,
|
|
LS_TAUNTAUN_ATTACK_LEFT,
|
|
LS_KICK_F,
|
|
LS_KICK_B,
|
|
LS_KICK_R,
|
|
LS_KICK_L,
|
|
LS_KICK_S,
|
|
LS_KICK_BF,
|
|
LS_KICK_RL,
|
|
LS_KICK_F_AIR,
|
|
LS_KICK_B_AIR,
|
|
LS_KICK_R_AIR,
|
|
LS_KICK_L_AIR,
|
|
LS_STABDOWN,
|
|
LS_STABDOWN_STAFF,
|
|
LS_STABDOWN_DUAL,
|
|
LS_DUAL_SPIN_PROTECT,
|
|
LS_STAFF_SOULCAL,
|
|
LS_A1_SPECIAL,
|
|
LS_A2_SPECIAL,
|
|
LS_A3_SPECIAL,
|
|
LS_UPSIDE_DOWN_ATTACK,
|
|
LS_PULL_ATTACK_STAB,
|
|
LS_PULL_ATTACK_SWING,
|
|
LS_SPINATTACK_ALORA,
|
|
LS_DUAL_FB,
|
|
LS_DUAL_LR,
|
|
LS_HILT_BASH,
|
|
|
|
//starts
|
|
LS_S_TL2BR,//26
|
|
LS_S_L2R,
|
|
LS_S_BL2TR,//# Start of attack chaining to SLASH LR2UL
|
|
LS_S_BR2TL,//# Start of attack chaining to SLASH LR2UL
|
|
LS_S_R2L,
|
|
LS_S_TR2BL,
|
|
LS_S_T2B,
|
|
|
|
//returns
|
|
LS_R_TL2BR,//33
|
|
LS_R_L2R,
|
|
LS_R_BL2TR,
|
|
LS_R_BR2TL,
|
|
LS_R_R2L,
|
|
LS_R_TR2BL,
|
|
LS_R_T2B,
|
|
|
|
//transitions
|
|
LS_T1_BR__R,//40
|
|
LS_T1_BR_TR,
|
|
LS_T1_BR_T_,
|
|
LS_T1_BR_TL,
|
|
LS_T1_BR__L,
|
|
LS_T1_BR_BL,
|
|
LS_T1__R_BR,//46
|
|
LS_T1__R_TR,
|
|
LS_T1__R_T_,
|
|
LS_T1__R_TL,
|
|
LS_T1__R__L,
|
|
LS_T1__R_BL,
|
|
LS_T1_TR_BR,//52
|
|
LS_T1_TR__R,
|
|
LS_T1_TR_T_,
|
|
LS_T1_TR_TL,
|
|
LS_T1_TR__L,
|
|
LS_T1_TR_BL,
|
|
LS_T1_T__BR,//58
|
|
LS_T1_T___R,
|
|
LS_T1_T__TR,
|
|
LS_T1_T__TL,
|
|
LS_T1_T___L,
|
|
LS_T1_T__BL,
|
|
LS_T1_TL_BR,//64
|
|
LS_T1_TL__R,
|
|
LS_T1_TL_TR,
|
|
LS_T1_TL_T_,
|
|
LS_T1_TL__L,
|
|
LS_T1_TL_BL,
|
|
LS_T1__L_BR,//70
|
|
LS_T1__L__R,
|
|
LS_T1__L_TR,
|
|
LS_T1__L_T_,
|
|
LS_T1__L_TL,
|
|
LS_T1__L_BL,
|
|
LS_T1_BL_BR,//76
|
|
LS_T1_BL__R,
|
|
LS_T1_BL_TR,
|
|
LS_T1_BL_T_,
|
|
LS_T1_BL_TL,
|
|
LS_T1_BL__L,
|
|
|
|
//Bounces
|
|
LS_B1_BR,
|
|
LS_B1__R,
|
|
LS_B1_TR,
|
|
LS_B1_T_,
|
|
LS_B1_TL,
|
|
LS_B1__L,
|
|
LS_B1_BL,
|
|
|
|
//Deflected attacks
|
|
LS_D1_BR,
|
|
LS_D1__R,
|
|
LS_D1_TR,
|
|
LS_D1_T_,
|
|
LS_D1_TL,
|
|
LS_D1__L,
|
|
LS_D1_BL,
|
|
LS_D1_B_,
|
|
|
|
//Reflected attacks
|
|
LS_V1_BR,
|
|
LS_V1__R,
|
|
LS_V1_TR,
|
|
LS_V1_T_,
|
|
LS_V1_TL,
|
|
LS_V1__L,
|
|
LS_V1_BL,
|
|
LS_V1_B_,
|
|
|
|
// Broken parries
|
|
LS_H1_T_,//
|
|
LS_H1_TR,
|
|
LS_H1_TL,
|
|
LS_H1_BR,
|
|
LS_H1_B_,
|
|
LS_H1_BL,
|
|
|
|
// Knockaways
|
|
LS_K1_T_,//
|
|
LS_K1_TR,
|
|
LS_K1_TL,
|
|
LS_K1_BR,
|
|
LS_K1_BL,
|
|
|
|
// Parries
|
|
LS_PARRY_UP,//
|
|
LS_PARRY_UR,
|
|
LS_PARRY_UL,
|
|
LS_PARRY_LR,
|
|
LS_PARRY_LL,
|
|
|
|
// Projectile Reflections
|
|
LS_REFLECT_UP,//
|
|
LS_REFLECT_UR,
|
|
LS_REFLECT_UL,
|
|
LS_REFLECT_LR,
|
|
LS_REFLECT_LL,
|
|
|
|
LS_MOVE_MAX//
|
|
};
|
|
typedef int saberMoveName_t;
|
|
|
|
typedef enum {
|
|
Q_BR,
|
|
Q_R,
|
|
Q_TR,
|
|
Q_T,
|
|
Q_TL,
|
|
Q_L,
|
|
Q_BL,
|
|
Q_B,
|
|
Q_NUM_QUADS
|
|
} saberQuadrant_t;
|
|
|
|
typedef struct
|
|
{
|
|
char *name;
|
|
int animToUse;
|
|
int startQuad;
|
|
int endQuad;
|
|
unsigned animSetFlags;
|
|
int blendTime;
|
|
int blocking;
|
|
saberMoveName_t chain_idle; // What move to call if the attack button is not pressed at the end of this anim
|
|
saberMoveName_t chain_attack; // What move to call if the attack button (and nothing else) is pressed
|
|
qboolean trailLength;
|
|
} saberMoveData_t;
|
|
|
|
#include "../namespace_begin.h"
|
|
|
|
extern saberMoveData_t saberMoveData[LS_MOVE_MAX];
|
|
|
|
bgEntity_t *PM_BGEntForNum( int num );
|
|
qboolean BG_KnockDownable(playerState_t *ps);
|
|
qboolean BG_LegalizedForcePowers(char *powerOut, int maxRank, qboolean freeSaber, int teamForce, int gametype, int fpDisabled);
|
|
|
|
#include "../namespace_end.h"
|
|
|
|
#ifdef __LCC__ //can't inline it then, it is declared over in bg_misc in this case
|
|
void BG_GiveMeVectorFromMatrix(mdxaBone_t *boltMatrix, int flags, vec3_t vec);
|
|
#else
|
|
// given a boltmatrix, return in vec a normalised vector for the axis requested in flags
|
|
static ID_INLINE void BG_GiveMeVectorFromMatrix(mdxaBone_t *boltMatrix, int flags, vec3_t vec)
|
|
{
|
|
switch (flags)
|
|
{
|
|
case ORIGIN:
|
|
vec[0] = boltMatrix->matrix[0][3];
|
|
vec[1] = boltMatrix->matrix[1][3];
|
|
vec[2] = boltMatrix->matrix[2][3];
|
|
break;
|
|
case POSITIVE_Y:
|
|
vec[0] = boltMatrix->matrix[0][1];
|
|
vec[1] = boltMatrix->matrix[1][1];
|
|
vec[2] = boltMatrix->matrix[2][1];
|
|
break;
|
|
case POSITIVE_X:
|
|
vec[0] = boltMatrix->matrix[0][0];
|
|
vec[1] = boltMatrix->matrix[1][0];
|
|
vec[2] = boltMatrix->matrix[2][0];
|
|
break;
|
|
case POSITIVE_Z:
|
|
vec[0] = boltMatrix->matrix[0][2];
|
|
vec[1] = boltMatrix->matrix[1][2];
|
|
vec[2] = boltMatrix->matrix[2][2];
|
|
break;
|
|
case NEGATIVE_Y:
|
|
vec[0] = -boltMatrix->matrix[0][1];
|
|
vec[1] = -boltMatrix->matrix[1][1];
|
|
vec[2] = -boltMatrix->matrix[2][1];
|
|
break;
|
|
case NEGATIVE_X:
|
|
vec[0] = -boltMatrix->matrix[0][0];
|
|
vec[1] = -boltMatrix->matrix[1][0];
|
|
vec[2] = -boltMatrix->matrix[2][0];
|
|
break;
|
|
case NEGATIVE_Z:
|
|
vec[0] = -boltMatrix->matrix[0][2];
|
|
vec[1] = -boltMatrix->matrix[1][2];
|
|
vec[2] = -boltMatrix->matrix[2][2];
|
|
break;
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#include "../namespace_begin.h"
|
|
|
|
void BG_IK_MoveArm(void *ghoul2, int lHandBolt, int time, entityState_t *ent, int basePose, vec3_t desiredPos, qboolean *ikInProgress,
|
|
vec3_t origin, vec3_t angles, vec3_t scale, int blendTime, qboolean forceHalt);
|
|
|
|
void BG_G2PlayerAngles(void *ghoul2, int motionBolt, entityState_t *cent, int time, vec3_t cent_lerpOrigin,
|
|
vec3_t cent_lerpAngles, vec3_t legs[3], vec3_t legsAngles, qboolean *tYawing,
|
|
qboolean *tPitching, qboolean *lYawing, float *tYawAngle, float *tPitchAngle,
|
|
float *lYawAngle, int frametime, vec3_t turAngles, vec3_t modelScale, int ciLegs,
|
|
int ciTorso, int *corrTime, vec3_t lookAngles, vec3_t lastHeadAngles, int lookTime,
|
|
entityState_t *emplaced, int *crazySmoothFactor);
|
|
void BG_G2ATSTAngles(void *ghoul2, int time, vec3_t cent_lerpAngles );
|
|
|
|
//BG anim utility functions:
|
|
|
|
int BG_AnimLength( int index, animNumber_t anim );
|
|
|
|
qboolean BG_InSpecialJump( int anim );
|
|
qboolean BG_InSaberStandAnim( int anim );
|
|
qboolean BG_InReboundJump( int anim );
|
|
qboolean BG_InReboundHold( int anim );
|
|
qboolean BG_InReboundRelease( int anim );
|
|
qboolean BG_InBackFlip( int anim );
|
|
qboolean BG_DirectFlippingAnim( int anim );
|
|
qboolean BG_SaberInAttack( int move );
|
|
qboolean BG_SaberInSpecial( int move );
|
|
qboolean BG_KickMove( int move );
|
|
qboolean BG_SaberInIdle( int move );
|
|
qboolean BG_FlippingAnim( int anim );
|
|
qboolean BG_SpinningSaberAnim( int anim );
|
|
qboolean BG_SaberInSpecialAttack( int anim );
|
|
qboolean BG_SaberInKata( int saberMove );
|
|
qboolean BG_InKataAnim(int anim);
|
|
qboolean BG_KickingAnim( int anim );
|
|
int BG_InGrappleMove(int anim);
|
|
int BG_BrokenParryForAttack( int move );
|
|
int BG_BrokenParryForParry( int move );
|
|
int BG_KnockawayForParry( int move );
|
|
qboolean BG_InRoll( playerState_t *ps, int anim );
|
|
qboolean BG_InDeathAnim( int anim );
|
|
qboolean BG_InSaberLockOld( int anim );
|
|
qboolean BG_InSaberLock( int anim );
|
|
|
|
void BG_SaberStartTransAnim( int clientNum, int saberAnimLevel, int weapon, int anim, float *animSpeed, int broken );
|
|
|
|
void BG_ForcePowerDrain( playerState_t *ps, forcePowers_t forcePower, int overrideAmt );
|
|
|
|
void BG_EvaluateTrajectory( const trajectory_t *tr, int atTime, vec3_t result );
|
|
void BG_EvaluateTrajectoryDelta( const trajectory_t *tr, int atTime, vec3_t result );
|
|
|
|
void BG_AddPredictableEventToPlayerstate( int newEvent, int eventParm, playerState_t *ps );
|
|
|
|
void BG_TouchJumpPad( playerState_t *ps, entityState_t *jumppad );
|
|
|
|
void BG_PlayerStateToEntityState( playerState_t *ps, entityState_t *s, qboolean snap );
|
|
void BG_PlayerStateToEntityStateExtraPolate( playerState_t *ps, entityState_t *s, int time, qboolean snap );
|
|
|
|
qboolean BG_PlayerTouchesItem( playerState_t *ps, entityState_t *item, int atTime );
|
|
|
|
void BG_InitAnimsets(void);
|
|
void BG_ClearAnimsets(void);
|
|
int BG_ParseAnimationFile(const char *filename, animation_t *animSet, qboolean isHumanoid);
|
|
#ifndef QAGAME
|
|
int BG_ParseAnimationEvtFile( const char *as_filename, int animFileIndex, int eventFileIndex );
|
|
#endif
|
|
|
|
qboolean BG_HasAnimation(int animIndex, int animation);
|
|
int BG_PickAnim( int animIndex, int minAnim, int maxAnim );
|
|
|
|
int BG_GetItemIndexByTag(int tag, int type);
|
|
|
|
qboolean BG_IsItemSelectable(playerState_t *ps, int item);
|
|
|
|
qboolean BG_HasYsalamiri(int gametype, playerState_t *ps);
|
|
qboolean BG_CanUseFPNow(int gametype, playerState_t *ps, int time, forcePowers_t power);
|
|
|
|
void *BG_Alloc ( int size );
|
|
void *BG_AllocUnaligned ( int size );
|
|
void *BG_TempAlloc( int size );
|
|
void BG_TempFree( int size );
|
|
char *BG_StringAlloc ( const char *source );
|
|
qboolean BG_OutOfMemory ( void );
|
|
|
|
void BG_BLADE_ActivateTrail ( bladeInfo_t *blade, float duration );
|
|
void BG_BLADE_DeactivateTrail ( bladeInfo_t *blade, float duration );
|
|
void BG_SI_Activate( saberInfo_t *saber );
|
|
void BG_SI_Deactivate( saberInfo_t *saber );
|
|
void BG_SI_BladeActivate( saberInfo_t *saber, int iBlade, qboolean bActive );
|
|
qboolean BG_SI_Active(saberInfo_t *saber);
|
|
void BG_SI_SetLength( saberInfo_t *saber, float length );
|
|
void BG_SI_SetDesiredLength(saberInfo_t *saber, float len, int bladeNum);
|
|
void BG_SI_SetLengthGradual( saberInfo_t *saber, int time );
|
|
float BG_SI_Length(saberInfo_t *saber);
|
|
float BG_SI_LengthMax(saberInfo_t *saber);
|
|
void BG_SI_ActivateTrail ( saberInfo_t *saber, float duration );
|
|
void BG_SI_DeactivateTrail ( saberInfo_t *saber, float duration );
|
|
extern void BG_AttachToRancor( void *ghoul2,float rancYaw,vec3_t rancOrigin,int time,qhandle_t *modelList,vec3_t modelScale,qboolean inMouth,vec3_t out_origin,vec3_t out_angles,vec3_t out_axis[3] );
|
|
|
|
extern int WeaponReadyAnim[WP_NUM_WEAPONS];
|
|
extern int WeaponAttackAnim[WP_NUM_WEAPONS];
|
|
|
|
extern int forcePowerDarkLight[NUM_FORCE_POWERS];
|
|
|
|
#include "../namespace_end.h"
|
|
|
|
#define ARENAS_PER_TIER 4
|
|
#define MAX_ARENAS 1024
|
|
#define MAX_ARENAS_TEXT 8192
|
|
|
|
#define MAX_BOTS 1024
|
|
#define MAX_BOTS_TEXT 8192
|
|
|
|
#define HYPERSPACE_TIME 4000 //For hyperspace triggers
|
|
#define HYPERSPACE_TELEPORT_FRAC 0.75f
|
|
#define HYPERSPACE_SPEED 10000.0f//was 30000
|
|
#define HYPERSPACE_TURN_RATE 45.0f
|
|
|
|
#endif //__BG_PUBLIC_H__
|