diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/shared/weapon_parse.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/shared/weapon_parse.h')
| -rw-r--r-- | game/shared/weapon_parse.h | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/game/shared/weapon_parse.h b/game/shared/weapon_parse.h new file mode 100644 index 0000000..f1d4c92 --- /dev/null +++ b/game/shared/weapon_parse.h @@ -0,0 +1,161 @@ +//========= 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 |