summaryrefslogtreecommitdiff
path: root/game/shared/dod/dod_weapon_parse.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/shared/dod/dod_weapon_parse.cpp')
-rw-r--r--game/shared/dod/dod_weapon_parse.cpp195
1 files changed, 195 insertions, 0 deletions
diff --git a/game/shared/dod/dod_weapon_parse.cpp b/game/shared/dod/dod_weapon_parse.cpp
new file mode 100644
index 0000000..35d7183
--- /dev/null
+++ b/game/shared/dod/dod_weapon_parse.cpp
@@ -0,0 +1,195 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#include "cbase.h"
+#include <KeyValues.h>
+#include "dod_weapon_parse.h"
+#include "dod_shareddefs.h"
+
+// criteria that we parse out of the file.
+// tells us which player animation states
+// should use the alternate wpn p model
+static struct
+{
+ const char *m_pCriteriaName;
+ int m_iFlagValue;
+} g_AltWpnCritera[] =
+{
+ { "ALTWPN_CRITERIA_FIRING", ALTWPN_CRITERIA_FIRING },
+ { "ALTWPN_CRITERIA_RELOADING", ALTWPN_CRITERIA_RELOADING },
+ { "ALTWPN_CRITERIA_DEPLOYED", ALTWPN_CRITERIA_DEPLOYED },
+ { "ALTWPN_CRITERIA_DEPLOYED_RELOAD", ALTWPN_CRITERIA_DEPLOYED_RELOAD },
+ { "ALTWPN_CRITERIA_PRONE_DEPLOYED_RELOAD", ALTWPN_CRITERIA_PRONE_DEPLOYED_RELOAD }
+};
+
+FileWeaponInfo_t* CreateWeaponInfo()
+{
+ return new CDODWeaponInfo;
+}
+
+
+CDODWeaponInfo::CDODWeaponInfo()
+{
+ m_szReloadModel[0] = '\0';
+ m_szDeployedModel[0] = '\0';
+ m_szDeployedReloadModel[0] = '\0';
+ m_szProneDeployedReloadModel[0] = '\0';
+}
+
+
+void CDODWeaponInfo::Parse( KeyValues *pKeyValuesData, const char *szWeaponName )
+{
+ BaseClass::Parse( pKeyValuesData, szWeaponName );
+
+ m_iCrosshairMinDistance = pKeyValuesData->GetInt( "CrosshairMinDistance", 4 );
+ m_iCrosshairDeltaDistance = pKeyValuesData->GetInt( "CrosshairDeltaDistance", 3 );
+ m_iMuzzleFlashType = pKeyValuesData->GetFloat( "MuzzleFlashType", 0 );
+ m_flMuzzleFlashScale = pKeyValuesData->GetFloat( "MuzzleFlashScale", 0.5 );
+
+ m_iDamage = pKeyValuesData->GetInt( "Damage", 1 );
+ m_flAccuracy = pKeyValuesData->GetFloat( "Accuracy", 1.0 );
+ m_flSecondaryAccuracy = pKeyValuesData->GetFloat( "SecondaryAccuracy", 1.0 );
+ m_flAccuracyMovePenalty = pKeyValuesData->GetFloat( "AccuracyMovePenalty", 0.1 );
+ m_flRecoil = pKeyValuesData->GetFloat( "Recoil", 99.0 );
+ m_flPenetration = pKeyValuesData->GetFloat( "Penetration", 1.0 );
+ m_flFireDelay = pKeyValuesData->GetFloat( "FireDelay", 0.1 );
+ m_flSecondaryFireDelay = pKeyValuesData->GetFloat( "SecondaryFireDelay", 0.1 );
+ m_flTimeToIdleAfterFire = pKeyValuesData->GetFloat( "IdleTimeAfterFire", 1.0 );
+ m_flIdleInterval = pKeyValuesData->GetFloat( "IdleInterval", 1.0 );
+ m_bCanDrop = ( pKeyValuesData->GetInt( "CanDrop", 1 ) > 0 );
+ m_iBulletsPerShot = pKeyValuesData->GetInt( "BulletsPerShot", 1 );
+
+ m_iHudClipHeight = pKeyValuesData->GetInt( "HudClipHeight", 0 );
+ m_iHudClipBaseHeight = pKeyValuesData->GetInt( "HudClipBaseHeight", 0 );
+ m_iHudClipBulletHeight = pKeyValuesData->GetInt( "HudClipBulletHeight", 0 );
+
+ m_iAmmoPickupClips = pKeyValuesData->GetInt( "AmmoPickupClips", 2 );
+
+ m_iDefaultAmmoClips = pKeyValuesData->GetInt( "DefaultAmmoClips", 0 );
+
+ m_flViewModelFOV = pKeyValuesData->GetFloat( "ViewModelFOV", 90.0f );
+
+// const char *pAnimEx = pKeyValuesData->GetString( "PlayerAnimationExtension", "error" );
+// Q_strncpy( m_szAnimExtension, pAnimEx, sizeof( m_szAnimExtension ) );
+
+ // if this key exists, use this for reload animations instead of anim_prefix
+// Q_strncpy( m_szReloadAnimPrefix, pKeyValuesData->GetString( "reload_anim_prefix", "" ), MAX_WEAPON_PREFIX );
+
+ m_flBotAudibleRange = pKeyValuesData->GetFloat( "BotAudibleRange", 2000.0f );
+
+ m_iTracerType = pKeyValuesData->GetInt( "Tracer", 0 );
+
+ //Weapon Type
+ const char *pTypeString = pKeyValuesData->GetString( "WeaponType", NULL );
+
+ m_WeaponType = WPN_TYPE_UNKNOWN;
+ if ( !pTypeString )
+ {
+ Assert( false );
+ }
+ else if ( Q_stricmp( pTypeString, "Melee" ) == 0 )
+ {
+ m_WeaponType = WPN_TYPE_MELEE;
+ }
+ else if ( Q_stricmp( pTypeString, "Camera" ) == 0 )
+ {
+ m_WeaponType = WPN_TYPE_CAMERA;
+ }
+ else if ( Q_stricmp( pTypeString, "Grenade" ) == 0 )
+ {
+ m_WeaponType = WPN_TYPE_GRENADE;
+ }
+ else if ( Q_stricmp( pTypeString, "Pistol" ) == 0 )
+ {
+ m_WeaponType = WPN_TYPE_PISTOL;
+ }
+ else if ( Q_stricmp( pTypeString, "Rifle" ) == 0 )
+ {
+ m_WeaponType = WPN_TYPE_RIFLE;
+ }
+ else if ( Q_stricmp( pTypeString, "Sniper" ) == 0 )
+ {
+ m_WeaponType = WPN_TYPE_SNIPER;
+ }
+ else if ( Q_stricmp( pTypeString, "SubMG" ) == 0 )
+ {
+ m_WeaponType = WPN_TYPE_SUBMG;
+ }
+ else if ( Q_stricmp( pTypeString, "MG" ) == 0 )
+ {
+ m_WeaponType = WPN_TYPE_MG;
+ }
+ else if ( Q_stricmp( pTypeString, "Bazooka" ) == 0 )
+ {
+ m_WeaponType = WPN_TYPE_BAZOOKA;
+ }
+ else if ( Q_stricmp( pTypeString, "Bandage" ) == 0 )
+ {
+ m_WeaponType = WPN_TYPE_BANDAGE;
+ }
+ else if ( Q_stricmp( pTypeString, "Sidearm" ) == 0 )
+ {
+ m_WeaponType = WPN_TYPE_SIDEARM;
+ }
+ else if ( Q_stricmp( pTypeString, "RifleGrenade" ) == 0 )
+ {
+ m_WeaponType = WPN_TYPE_RIFLEGRENADE;
+ }
+ else if ( Q_stricmp( pTypeString, "Bomb" ) == 0 )
+ {
+ m_WeaponType = WPN_TYPE_BOMB;
+ }
+ else
+ {
+ Assert( false );
+ }
+
+ Q_strncpy( m_szReloadModel, pKeyValuesData->GetString( "reloadmodel" ), sizeof( m_szReloadModel ) );
+ Q_strncpy( m_szDeployedModel, pKeyValuesData->GetString( "deployedmodel" ), sizeof( m_szDeployedModel ) );
+ Q_strncpy( m_szDeployedReloadModel, pKeyValuesData->GetString( "deployedreloadmodel" ), sizeof( m_szDeployedReloadModel ) );
+ Q_strncpy( m_szProneDeployedReloadModel, pKeyValuesData->GetString( "pronedeployedreloadmodel" ), sizeof( m_szProneDeployedReloadModel ) );
+
+
+ m_iAltWpnCriteria = ALTWPN_CRITERIA_NONE;
+
+ for ( int i=0; i < ARRAYSIZE( g_AltWpnCritera ); i++ )
+ {
+ int iVal = pKeyValuesData->GetInt( g_AltWpnCritera[i].m_pCriteriaName, 0 );
+ if ( iVal == 1 )
+ {
+ m_iAltWpnCriteria |= g_AltWpnCritera[i].m_iFlagValue;
+ }
+ }
+
+ const char *szNormalOffset = pKeyValuesData->GetString( "vm_normal_offset", "0 0 0" );
+ const char *szProneOffset = pKeyValuesData->GetString( "vm_prone_offset", "0 0 0" );
+ const char *szIronSightOffset = pKeyValuesData->GetString( "vm_ironsight_offset", "0 0 0" );
+
+ sscanf( szNormalOffset, "%f %f %f", &m_vecViewNormalOffset[0], &m_vecViewNormalOffset[1], &m_vecViewNormalOffset[2]);
+ sscanf( szProneOffset, "%f %f %f", &m_vecViewProneOffset[0], &m_vecViewProneOffset[1], &m_vecViewProneOffset[2]);
+ sscanf( szIronSightOffset, "%f %f %f", &m_vecIronSightOffset[0], &m_vecIronSightOffset[1], &m_vecIronSightOffset[2]);
+
+ m_iDefaultTeam = TEAM_ALLIES;
+
+ const char *pDefaultTeam = pKeyValuesData->GetString( "default_team", NULL );
+
+ if ( pDefaultTeam )
+ {
+ if ( FStrEq( pDefaultTeam, "Axis" ) )
+ {
+ m_iDefaultTeam = TEAM_AXIS;
+ }
+ else if ( FStrEq( pDefaultTeam, "Allies" ) )
+ {
+ m_iDefaultTeam = TEAM_ALLIES;
+ }
+ else
+ {
+ Assert( !"invalid param to \"default_team\" in weapon scripts\n" );
+ }
+ }
+}
+