364 lines
8.9 KiB
C
364 lines
8.9 KiB
C
// Copyright (C) 2001-2002 Raven Software
|
|
//
|
|
// bg_weapons.h - weapons data loading
|
|
|
|
#ifndef __BG_WEAPONS_H__
|
|
#define __BG_WEAPONS_H__
|
|
|
|
// means of death
|
|
typedef enum
|
|
{
|
|
MOD_UNKNOWN,
|
|
|
|
// Knife
|
|
MOD_KNIFE,
|
|
|
|
// Pistols
|
|
MOD_M1911A1_PISTOL,
|
|
MOD_USSOCOM_PISTOL,
|
|
|
|
// Secondarys
|
|
MOD_M590_SHOTGUN,
|
|
MOD_MICRO_UZI_SUBMACHINEGUN,
|
|
MOD_M3A1_SUBMACHINEGUN,
|
|
MOD_MP5,
|
|
|
|
// Primaries
|
|
MOD_USAS_12_SHOTGUN,
|
|
MOD_M4_ASSAULT_RIFLE,
|
|
MOD_AK74_ASSAULT_RIFLE,
|
|
MOD_MSG90A1_SNIPER_RIFLE,
|
|
MOD_M60_MACHINEGUN,
|
|
MOD_MM1_GRENADE_LAUNCHER,
|
|
MOD_RPG7_LAUNCHER,
|
|
|
|
// Grenades
|
|
MOD_M84_GRENADE,
|
|
MOD_SMOHG92_GRENADE,
|
|
MOD_ANM14_GRENADE,
|
|
MOD_M15_GRENADE,
|
|
|
|
MOD_WATER,
|
|
MOD_CRUSH,
|
|
MOD_TELEFRAG,
|
|
MOD_FALLING,
|
|
MOD_SUICIDE,
|
|
MOD_TEAMCHANGE,
|
|
MOD_TARGET_LASER,
|
|
MOD_TRIGGER_HURT,
|
|
MOD_TRIGGER_HURT_NOSUICIDE
|
|
|
|
} meansOfDeath_t;
|
|
|
|
typedef enum
|
|
{
|
|
WP_NONE,
|
|
|
|
// Knife
|
|
WP_KNIFE,
|
|
|
|
// Pistols
|
|
WP_M1911A1_PISTOL,
|
|
WP_USSOCOM_PISTOL,
|
|
|
|
// Secondarys
|
|
WP_M590_SHOTGUN,
|
|
WP_MICRO_UZI_SUBMACHINEGUN,
|
|
WP_M3A1_SUBMACHINEGUN,
|
|
WP_MP5,
|
|
|
|
// Primaries
|
|
WP_USAS_12_SHOTGUN,
|
|
WP_M4_ASSAULT_RIFLE,
|
|
WP_AK74_ASSAULT_RIFLE,
|
|
WP_MSG90A1,
|
|
WP_M60_MACHINEGUN,
|
|
WP_MM1_GRENADE_LAUNCHER,
|
|
WP_RPG7_LAUNCHER,
|
|
|
|
// Grenades
|
|
WP_M84_GRENADE,
|
|
WP_SMOHG92_GRENADE,
|
|
WP_ANM14_GRENADE,
|
|
WP_M15_GRENADE,
|
|
|
|
WP_NUM_WEAPONS
|
|
} weapon_t;
|
|
|
|
#define WP_DELAYED_CHANGE_BIT (1<<5)
|
|
|
|
typedef enum
|
|
{
|
|
AMMO_KNIFE,
|
|
AMMO_045,
|
|
AMMO_556,
|
|
AMMO_9,
|
|
AMMO_12 ,
|
|
AMMO_762,
|
|
AMMO_40,
|
|
AMMO_RPG7,
|
|
AMMO_M15,
|
|
AMMO_M84,
|
|
AMMO_SMOHG92,
|
|
AMMO_ANM14,
|
|
|
|
AMMO_762_BELT,
|
|
|
|
AMMO_MP5_9,
|
|
|
|
AMMO_MAX,
|
|
|
|
AMMO_NONE,
|
|
|
|
} ammo_t;
|
|
|
|
#define WP_FIREMODE_NONE 0
|
|
#define WP_FIREMODE_AUTO 1
|
|
#define WP_FIREMODE_BURST 2
|
|
#define WP_FIREMODE_SINGLE 3
|
|
#define WP_FIREMODE_MAX 4
|
|
|
|
#define PROJECTILE_FIRE 0x0010 // projectile NOT bullet
|
|
#define PROJECTILE_TIMED 0x0020 // projectile ONLY explodes after time is up
|
|
#define PROJECTILE_GRAVITY 0x0040 // projectile obeys gravity
|
|
#define PROJECTILE_DAMAGE_AREA 0x0080 // projectile does area damage over time
|
|
#define UNLOCK_MUZZLEFLASH 0x0100 // muzzle flash is locked to muzzle bolt by default
|
|
#define PROJECTILE_LIGHTGRAVITY 0x0200 // projectile has light gravity
|
|
|
|
typedef enum
|
|
{
|
|
CAT_NONE = 0,
|
|
CAT_KNIFE,
|
|
CAT_PISTOL,
|
|
CAT_SHOTGUN,
|
|
CAT_SUB,
|
|
CAT_ASSAULT,
|
|
CAT_SNIPER,
|
|
CAT_HEAVY,
|
|
CAT_GRENADE,
|
|
CAT_MAX
|
|
|
|
} ECategory;
|
|
|
|
typedef struct attackData_s
|
|
{
|
|
char name[MAX_QPATH];
|
|
char icon[MAX_QPATH];
|
|
|
|
const char* melee;
|
|
|
|
meansOfDeath_t mod; // means of death
|
|
int ammoIndex; // Index to proper ammo slot
|
|
union
|
|
{
|
|
int range; // Range of weapon
|
|
int velocity; // speed of projectile
|
|
} rV;
|
|
|
|
int clipSize; // how large is a clip
|
|
int fireAmount; // how much ammo to use per shot
|
|
int fireFromClip; // 0 = fire from approp. ammo pool, 1 = fire from clip
|
|
int damage; // how much damage is done per hit
|
|
float inaccuracy; // how inaccurate is weapon
|
|
float maxInaccuracy; // maximum lvl of inaccuracy
|
|
int pellets; // how many individual 'bullets' are shot with one trigger pull?
|
|
int weaponFlags; // which fire modes are available, projectiles timed or impact, .etc
|
|
int projectileLifetime; // how long does projectile live (before exploding)
|
|
int splashRadius; // how large is splash damage radius
|
|
int fireDelay; // Extra delay when firing
|
|
qboolean gore; // is gore enabled for this attack?
|
|
int extraClips; // Extra clips you get when starting
|
|
float bounceScale; // how much something bounces
|
|
|
|
vec3_t minKickAngles;
|
|
vec3_t maxKickAngles;
|
|
|
|
// Names of effects, sounds, models, bones
|
|
char muzzleEffect[MAX_QPATH];
|
|
char muzzleEffectBone[MAX_QPATH];
|
|
char muzzleEffectInWorld[MAX_QPATH];
|
|
char tracerEffect[MAX_QPATH];
|
|
char ejectBone[MAX_QPATH];
|
|
char shellEject[MAX_QPATH];
|
|
char explosionSound[MAX_QPATH];
|
|
char explosionEffect[MAX_QPATH];
|
|
char missileG2Model[MAX_QPATH];
|
|
|
|
int animFire;
|
|
int animFireZoomed;
|
|
|
|
} attackData_t;
|
|
|
|
typedef struct weaponData_s
|
|
{
|
|
char *classname; // Spawning name
|
|
ECategory category; // what group of weapons is this one part of?
|
|
qboolean safe;
|
|
char worldModel[MAX_QPATH]; // world model
|
|
char menuImage[MAX_QPATH]; // names of the icon files
|
|
|
|
int animDrop;
|
|
int animRaise;
|
|
int animIdle;
|
|
int animIdleZoomed;
|
|
int animReload;
|
|
int animReloadStart;
|
|
int animReloadEnd;
|
|
|
|
attackData_t attack[ATTACK_MAX];
|
|
|
|
|
|
} weaponData_t;
|
|
|
|
typedef struct ammoData_s
|
|
{
|
|
char *name; // name of ammo
|
|
char icon[32]; // Name of ammo icon file
|
|
int max; // Max amount player can hold of ammo
|
|
float goreScale;
|
|
|
|
} ammoData_t;
|
|
|
|
extern char *weaponNames[WP_NUM_WEAPONS];
|
|
extern weaponData_t weaponData[WP_NUM_WEAPONS];
|
|
extern char *ammoNames[AMMO_MAX];
|
|
extern ammoData_t ammoData[AMMO_MAX];
|
|
|
|
// Specific weapon information
|
|
|
|
#define WP_FIRST_RANGED_WEAPON WP_M1911A1_PISTOL // this is the first weapon for next and prev weapon switching
|
|
#define WP_FIRST_MELEE_WEAPON WP_KNIFE
|
|
#define MAX_PLAYER_WEAPONS (WP_NUM_WEAPONS-1) // this is the max you can switch to and get with the give all.
|
|
|
|
#define MAX_WEAPON_SOUNDS 12
|
|
#define MAX_WEAPON_SOUND_SLOTS 3
|
|
|
|
#define MAX_SIDE_SURFACES 16
|
|
|
|
typedef struct SOptionalWeapon
|
|
{
|
|
char mName[MAX_QPATH];
|
|
char mMuzzle[MAX_QPATH];
|
|
char *mSurfaces[MAX_SIDE_SURFACES];
|
|
|
|
struct SOptionalWeapon *mNext;
|
|
} TOptionalWeapon;
|
|
|
|
typedef struct SBoltonWeapon
|
|
{
|
|
char mName[MAX_QPATH];
|
|
char mModel[MAX_QPATH];
|
|
char mParent[MAX_QPATH];
|
|
char mBoltToBone[MAX_QPATH];
|
|
char *mRightSide[MAX_SIDE_SURFACES];
|
|
|
|
char mJointBone[MAX_QPATH];
|
|
char mJointParentBone[MAX_QPATH];
|
|
char mJointForward[10];
|
|
char mJointRight[10];
|
|
char mJointUp[10];
|
|
} TBoltonWeapon;
|
|
|
|
typedef struct SNoteTrack
|
|
{
|
|
char mNote[64];
|
|
int mFrame;
|
|
|
|
struct SNoteTrack *mNext;
|
|
} TNoteTrack;
|
|
|
|
#define MAX_WEAPON_ANIM_CHOICES 4
|
|
|
|
typedef struct SAnimInfoWeapon
|
|
{
|
|
char mName[MAX_QPATH];
|
|
char mType[MAX_QPATH];
|
|
char *mAnim[MAX_WEAPON_ANIM_CHOICES];
|
|
char *mTransition[MAX_WEAPON_ANIM_CHOICES];
|
|
char *mEnd[MAX_WEAPON_ANIM_CHOICES];
|
|
float mSpeed;
|
|
int mLODBias;
|
|
int mNumChoices;
|
|
|
|
int mStartFrame[MAX_WEAPON_ANIM_CHOICES];
|
|
int mNumFrames[MAX_WEAPON_ANIM_CHOICES];
|
|
int mFPS[MAX_WEAPON_ANIM_CHOICES];
|
|
|
|
struct SNoteTrack *mNoteTracks[MAX_WEAPON_ANIM_CHOICES];
|
|
struct SAnimInfoWeapon *mNext;
|
|
} TAnimInfoWeapon;
|
|
|
|
typedef struct SAnimWeapon
|
|
{
|
|
char mName[MAX_QPATH];
|
|
char mMuzzle[MAX_QPATH];
|
|
|
|
struct SAnimInfoWeapon *mInfos;
|
|
struct SAnimInfoWeapon *mWeaponModelInfo; // "weaponmodel" info
|
|
struct SAnimWeapon *mNext;
|
|
|
|
} TAnimWeapon;
|
|
|
|
typedef struct SWeaponModel
|
|
{
|
|
char mName[MAX_QPATH];
|
|
char mModel[MAX_QPATH];
|
|
char mBufferName[MAX_QPATH];
|
|
char mBufferModel[MAX_QPATH];
|
|
char mBufferBoltToBone[MAX_QPATH];
|
|
char mBufferMuzzle[MAX_QPATH];
|
|
char mBufferAltMuzzle[MAX_QPATH];
|
|
char mLeftHandsBoltToBone[MAX_QPATH];
|
|
char mRightHandsBoltToBone[MAX_QPATH];
|
|
char *mFrontSurfaces[MAX_SIDE_SURFACES],
|
|
*mRightSideSurfaces[MAX_SIDE_SURFACES],
|
|
*mLeftSideSurfaces[MAX_SIDE_SURFACES];
|
|
|
|
struct SOptionalWeapon *mOptionalList;
|
|
struct SBoltonWeapon *mBolton;
|
|
} TWeaponModel;
|
|
|
|
#define MAX_CALLBACK_SURFACES 4
|
|
|
|
typedef struct SOnOffSurface
|
|
{
|
|
char mName[64];
|
|
int mStatus;
|
|
} TOnOffSurface;
|
|
|
|
typedef struct SSurfaceCallback
|
|
{
|
|
char mName[64];
|
|
struct SOnOffSurface mOnOffSurfaces[MAX_CALLBACK_SURFACES];
|
|
} TSurfaceCallback;
|
|
|
|
#define MAX_SURFACE_CALLBACKS 2
|
|
|
|
typedef struct SWeaponInfo
|
|
{
|
|
char *mName;
|
|
float mForeshorten;
|
|
vec3_t mViewOffset;
|
|
char mSoundNames[MAX_WEAPON_SOUNDS][MAX_QPATH];
|
|
char mSounds[MAX_WEAPON_SOUNDS][MAX_WEAPON_SOUND_SLOTS][MAX_QPATH];
|
|
struct SSurfaceCallback mSurfaceCallbacks[MAX_SURFACE_CALLBACKS];
|
|
struct SAnimWeapon *mAnimList;
|
|
struct SWeaponModel mWeaponModel;
|
|
} TWeaponParseInfo;
|
|
|
|
extern TWeaponParseInfo weaponParseInfo[WP_NUM_WEAPONS];
|
|
extern char weaponLeftHand[MAX_QPATH];
|
|
extern char weaponRightHand[MAX_QPATH];
|
|
|
|
qboolean BG_ParseInviewFile ( qboolean );
|
|
TAnimWeapon* BG_GetInviewAnim ( int weaponIdx,const char *animKey,int *animIndex);
|
|
TAnimWeapon* BG_GetInviewAnimFromIndex ( int weaponIdx,int animIndex);
|
|
TAnimInfoWeapon* BG_GetInviewModelAnim ( int weaponIdx,const char *modelKey,const char *animKey);
|
|
qboolean BG_WeaponHasAlternateAmmo ( int weapon );
|
|
int BG_FindFireMode ( weapon_t weapon, attackType_t attack, int firemode );
|
|
|
|
void BG_CalculateBulletEndpoint ( vec3_t muzzlePoint, vec3_t fireAngs, float inaccuracy, float range, vec3_t end, int *seed );
|
|
int BG_GetMaxAmmo ( const playerState_t* ps, int ammoIndex );
|
|
|
|
#endif
|
|
|