diff options
Diffstat (limited to 'game/shared/dod/dod_weapon_parse.cpp')
| -rw-r--r-- | game/shared/dod/dod_weapon_parse.cpp | 195 |
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" ); + } + } +} + |