162 lines
5.6 KiB
C++
162 lines
5.6 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose: Weapon data file parsing, shared by game & client dlls.
|
|
//
|
|
// $NoKeywords: $
|
|
//=============================================================================//
|
|
|
|
#ifndef WEAPON_PARSE_H
|
|
#define WEAPON_PARSE_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "shareddefs.h"
|
|
|
|
class IFileSystem;
|
|
|
|
typedef unsigned short WEAPON_FILE_INFO_HANDLE;
|
|
|
|
// -----------------------------------------------------------
|
|
// Weapon sound types
|
|
// Used to play sounds defined in the weapon's classname.txt file
|
|
// This needs to match pWeaponSoundCategories in weapon_parse.cpp
|
|
// ------------------------------------------------------------
|
|
typedef enum {
|
|
EMPTY,
|
|
SINGLE,
|
|
SINGLE_NPC,
|
|
WPN_DOUBLE, // Can't be "DOUBLE" because windows.h uses it.
|
|
DOUBLE_NPC,
|
|
BURST,
|
|
RELOAD,
|
|
RELOAD_NPC,
|
|
MELEE_MISS,
|
|
MELEE_HIT,
|
|
MELEE_HIT_WORLD,
|
|
SPECIAL1,
|
|
SPECIAL2,
|
|
SPECIAL3,
|
|
TAUNT,
|
|
DEPLOY,
|
|
|
|
// Add new shoot sound types here
|
|
|
|
NUM_SHOOT_SOUND_TYPES,
|
|
} WeaponSound_t;
|
|
|
|
int GetWeaponSoundFromString( const char *pszString );
|
|
|
|
#define MAX_SHOOT_SOUNDS 16 // Maximum number of shoot sounds per shoot type
|
|
|
|
#define MAX_WEAPON_STRING 80
|
|
#define MAX_WEAPON_PREFIX 16
|
|
#define MAX_WEAPON_AMMO_NAME 32
|
|
|
|
#define WEAPON_PRINTNAME_MISSING "!!! Missing printname on weapon"
|
|
|
|
class CHudTexture;
|
|
class KeyValues;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Contains the data read from the weapon's script file.
|
|
// It's cached so we only read each weapon's script file once.
|
|
// Each game provides a CreateWeaponInfo function so it can have game-specific
|
|
// data (like CS move speeds) in the weapon script.
|
|
//-----------------------------------------------------------------------------
|
|
class FileWeaponInfo_t
|
|
{
|
|
public:
|
|
|
|
FileWeaponInfo_t();
|
|
|
|
// Each game can override this to get whatever values it wants from the script.
|
|
virtual void Parse( KeyValues *pKeyValuesData, const char *szWeaponName );
|
|
|
|
|
|
public:
|
|
bool bParsedScript;
|
|
bool bLoadedHudElements;
|
|
|
|
// SHARED
|
|
char szClassName[MAX_WEAPON_STRING];
|
|
char szPrintName[MAX_WEAPON_STRING]; // Name for showing in HUD, etc.
|
|
|
|
char szViewModel[MAX_WEAPON_STRING]; // View model of this weapon
|
|
char szWorldModel[MAX_WEAPON_STRING]; // Model of this weapon seen carried by the player
|
|
char szAnimationPrefix[MAX_WEAPON_PREFIX]; // Prefix of the animations that should be used by the player carrying this weapon
|
|
int iSlot; // inventory slot.
|
|
int iPosition; // position in the inventory slot.
|
|
int iMaxClip1; // max primary clip size (-1 if no clip)
|
|
int iMaxClip2; // max secondary clip size (-1 if no clip)
|
|
int iDefaultClip1; // amount of primary ammo in the gun when it's created
|
|
int iDefaultClip2; // amount of secondary ammo in the gun when it's created
|
|
int iWeight; // this value used to determine this weapon's importance in autoselection.
|
|
int iRumbleEffect; // Which rumble effect to use when fired? (xbox)
|
|
bool bAutoSwitchTo; // whether this weapon should be considered for autoswitching to
|
|
bool bAutoSwitchFrom; // whether this weapon can be autoswitched away from when picking up another weapon or ammo
|
|
int iFlags; // miscellaneous weapon flags
|
|
char szAmmo1[MAX_WEAPON_AMMO_NAME]; // "primary" ammo type
|
|
char szAmmo2[MAX_WEAPON_AMMO_NAME]; // "secondary" ammo type
|
|
|
|
// Sound blocks
|
|
char aShootSounds[NUM_SHOOT_SOUND_TYPES][MAX_WEAPON_STRING];
|
|
|
|
int iAmmoType;
|
|
int iAmmo2Type;
|
|
bool m_bMeleeWeapon; // Melee weapons can always "fire" regardless of ammo.
|
|
|
|
// This tells if the weapon was built right-handed (defaults to true).
|
|
// This helps cl_righthand make the decision about whether to flip the model or not.
|
|
bool m_bBuiltRightHanded;
|
|
bool m_bAllowFlipping; // False to disallow flipping the model, regardless of whether
|
|
// it is built left or right handed.
|
|
|
|
// CLIENT DLL
|
|
// Sprite data, read from the data file
|
|
int iSpriteCount;
|
|
CHudTexture *iconActive;
|
|
CHudTexture *iconInactive;
|
|
CHudTexture *iconAmmo;
|
|
CHudTexture *iconAmmo2;
|
|
CHudTexture *iconCrosshair;
|
|
CHudTexture *iconAutoaim;
|
|
CHudTexture *iconZoomedCrosshair;
|
|
CHudTexture *iconZoomedAutoaim;
|
|
CHudTexture *iconSmall;
|
|
|
|
// TF2 specific
|
|
bool bShowUsageHint; // if true, then when you receive the weapon, show a hint about it
|
|
|
|
// SERVER DLL
|
|
|
|
};
|
|
|
|
// The weapon parse function
|
|
bool ReadWeaponDataFromFileForSlot( IFileSystem* filesystem, const char *szWeaponName,
|
|
WEAPON_FILE_INFO_HANDLE *phandle, const unsigned char *pICEKey = NULL );
|
|
|
|
// If weapon info has been loaded for the specified class name, this returns it.
|
|
WEAPON_FILE_INFO_HANDLE LookupWeaponInfoSlot( const char *name );
|
|
|
|
FileWeaponInfo_t *GetFileWeaponInfoFromHandle( WEAPON_FILE_INFO_HANDLE handle );
|
|
WEAPON_FILE_INFO_HANDLE GetInvalidWeaponInfoHandle( void );
|
|
void PrecacheFileWeaponInfoDatabase( IFileSystem *filesystem, const unsigned char *pICEKey );
|
|
|
|
|
|
//
|
|
// Read a possibly-encrypted KeyValues file in.
|
|
// If pICEKey is NULL, then it appends .txt to the filename and loads it as an unencrypted file.
|
|
// If pICEKey is non-NULL, then it appends .ctx to the filename and loads it as an encrypted file.
|
|
//
|
|
// (This should be moved into a more appropriate place).
|
|
//
|
|
KeyValues* ReadEncryptedKVFile( IFileSystem *filesystem, const char *szFilenameWithoutExtension, const unsigned char *pICEKey, bool bForceReadEncryptedFile = false );
|
|
|
|
|
|
// Each game implements this. It can return a derived class and override Parse() if it wants.
|
|
extern FileWeaponInfo_t* CreateWeaponInfo();
|
|
|
|
|
|
#endif // WEAPON_PARSE_H
|