// MPropertySuppressBaseClassField = m_flHeadDamageMultiplier
// MPropertySuppressBaseClassField = m_flChestDamageMultiplier
// MPropertySuppressBaseClassField = m_flStomachDamageMultiplier
// MPropertySuppressBaseClassField = m_flArmDamageMultiplier
// MPropertySuppressBaseClassField = m_flLegDamageMultiplier
// MPropertySuppressBaseClassField = m_nMaxAdditionalAmmoBalancingShots
class CAI_CitadelNPCVData : public CAI_BaseNPCVData
{
public:
    CUtlOrderedMap<EAbilitySlots_t, CSubclassName<4>> m_mapBoundAbilities;
    float32 m_flSightRangePlayers;
    float32 m_flSightRangeNPCs;
    CGlobalSymbol m_MeleeAnimName;
    float32 m_flMeleeAttemptRange;
    float32 m_flMeleeHitRange;
    CUtlVector<float32> m_MeleeAttackPoints;
    float32 m_flMaxHealthBarDrawDistance;
    // MPropertyStartGroup = Movement
    float32 m_flWalkSpeed;
    float32 m_flRunSpeed;
    float32 m_flTurnRate;
    float32 m_flAcceleration;
    float32 m_flStepHeight;
    float32 m_flJumpAnticipationTime;
    // MPropertyStartGroup = Sounds
    CSoundEventName m_BeamStartSound;
    CSoundEventName m_BeamStopSound;
    CSoundEventName m_BeamPointStartLoopSound;
    CSoundEventName m_BeamPointEndLoopSound;
    CSoundEventName m_BeamPointClosestLoopSound;
    CSoundEventName m_strAmbientLoopSound;
    CSoundEventName m_DeathSound;
    CSoundEventName m_strLastHitSound;
    bool m_bPlayLastHitSound;
    float32 m_flLastHitSoundWindowTime;
    CSoundEventName m_MeleeHitSound;
    CSoundEventName m_MeleeHitPlayerSound;
    // MPropertyStartGroup = Visuals
    // MPropertyDescription = When set, uses this model when on the Amber team.  Falls back to Model Name if not set
    CResourceNameTyped<CWeakHandle<InfoForResourceTypeCModel>> m_sAmberModelName;
    // MPropertyDescription = When set, uses this model when on the Sapphire team.  Falls back to Model Name if not set
    CResourceNameTyped<CWeakHandle<InfoForResourceTypeCModel>> m_sSapphireModelName;
    CModelMaterialGroupName m_sDefaultMaterialGroupName;
    CModelMaterialGroupName m_sEnemyMaterialGroupName;
    CModelMaterialGroupName m_sTeam1MaterialGroupName;
    CModelMaterialGroupName m_sTeam2MaterialGroupName;
    CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>> m_MeleeSwingParticle;
    CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>> m_MeleeActivateParticle;
    float32 m_flModelScale;
    // MPropertyDescription = Particle to play instead of doing a ragdoll
    CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>> m_DeathParticle;
    CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>> m_JumpParticle;
    // MPropertyStartGroup = Outline
    float32 m_flOutlineRange;
    float32 m_flOutlineWidth;
    // MPropertyDescription = Whether to show an outline through walls
    bool m_bOutlineThroughWalls;
    // MPropertyDescription = Whether to show an outline when visible
    bool m_bOutlineWhenVisible;
    // MPropertyDescription = If not showing an outline, whether to hide / suppress other outlines through this object.
    bool m_bSuppressOtherOutlinesWhenVisible;
    // MPropertyStartGroup = Health Bar
    CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>> m_HealthBarParticle;
    CUtlString m_sHealthBarAttachment;
    Color m_HealthBarColorFriend;
    Color m_HealthBarColorEnemy;
    Color m_HealthBarColorTeam1;
    Color m_HealthBarColorTeam2;
    Color m_HealthBarColorTeamNeutral;
    // MPropertyStartGroup = Misc
    // MPropertyDescription = Extra distance that a melee attacking npc can hit this npc from. Useful for medium and larger npcs.
    float32 m_flMeleeTargetRadius;
    float32 m_flHealthBarOffset;
    // MPropertyDescription = When true, spawns breakables defined in the model
    bool m_bSpawnBreakablesOnDeath;
    // MPropertySuppressExpr = m_bSpawnBreakablesOnDeath == false
    float32 m_flBreakableForceScale;
    // MPropertyDescription = Modifier for physics impulses applied to this NPC (0 == unmoveable)
    float32 m_flPhysicsImpulseMultiplier;
    // MPropertyStartGroup = Beam Weapon
    float32 m_flBeamWeaponWidth;
    float32 m_flBeamTurnRate;
    CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>> m_BeamWeaponParticle;
    CCitadelWeaponInfo m_WeaponInfo;
};

KV3 Class Defaults

{
    _class = "CAI_CitadelNPCVData"
    m_sModelName = resource_name:""
    m_hFootstepSounds = ""
    m_vecNavLinkMovementNames = [  ]
    m_flAimConeAngle = 6.0
    m_nMaxHealth = 100
    m_vecIntrinsicModifiers = [  ]
    m_statusEffectMap = 
    {
    }
    m_vecAttachments = [  ]
    m_flHeadDamageMultiplier = 1.5
    m_flChestDamageMultiplier = 1.0
    m_flStomachDamageMultiplier = 1.0
    m_flArmDamageMultiplier = 1.0
    m_flLegDamageMultiplier = 1.0
    m_nMaxAdditionalAmmoBalancingShots = 0
    m_bTakesDamage = true
    m_strDamagedEffect = resource_name:""
    m_bLightsFiresWhenDamaged = false
    m_nRagdollHealth = 0
    m_flImpactEnergyScale = 1.0
    m_bAllowNonZUpMovement = false
    m_bUseDynamicCollisionHull = false
    m_bRequestCapsuleCollision = false
    m_flCapsuleRadiusOverride = 0.0
    m_flCapsuleHeightOverride = 0.0
    m_vecActionDesiredShared = [  ]
    m_sPlayerKilledNpcSound = soundevent:""
    m_sCustomDeathHandshake = ""
    m_sDefaultMovementSettings = ""
    m_mappedMovementSettings = [  ]
    m_bEnableCodeDrivenAnimgraphMovement = false
    m_bEnableAnimgraphTagDrivenStrafing = true
    m_flMassOverride = -1.0
    m_flThreatTemperature = 20.0
    m_flFlashpoint = -1.0
    m_mapBoundAbilities = 
    {
    }
    m_flSightRangePlayers = 0.0
    m_flSightRangeNPCs = 0.0
    m_MeleeAnimName = ""
    m_flMeleeAttemptRange = 80.0
    m_flMeleeHitRange = 80.0
    m_MeleeAttackPoints = [  ]
    m_flMaxHealthBarDrawDistance = 0.0
    m_flWalkSpeed = 300.0
    m_flRunSpeed = 300.0
    m_flTurnRate = 180.0
    m_flAcceleration = 200.0
    m_flStepHeight = 36.0
    m_flJumpAnticipationTime = 0.6
    m_BeamStartSound = soundevent:""
    m_BeamStopSound = soundevent:""
    m_BeamPointStartLoopSound = soundevent:""
    m_BeamPointEndLoopSound = soundevent:""
    m_BeamPointClosestLoopSound = soundevent:""
    m_strAmbientLoopSound = soundevent:""
    m_DeathSound = soundevent:""
    m_strLastHitSound = soundevent:""
    m_bPlayLastHitSound = true
    m_flLastHitSoundWindowTime = 1.0
    m_MeleeHitSound = soundevent:""
    m_MeleeHitPlayerSound = soundevent:""
    m_sAmberModelName = resource_name:""
    m_sSapphireModelName = resource_name:""
    m_sDefaultMaterialGroupName = ""
    m_sEnemyMaterialGroupName = ""
    m_sTeam1MaterialGroupName = ""
    m_sTeam2MaterialGroupName = ""
    m_MeleeSwingParticle = resource_name:""
    m_MeleeActivateParticle = resource_name:""
    m_flModelScale = 1.0
    m_DeathParticle = resource_name:""
    m_JumpParticle = resource_name:""
    m_flOutlineRange = 2000.0
    m_flOutlineWidth = 4.0
    m_bOutlineThroughWalls = false
    m_bOutlineWhenVisible = false
    m_bSuppressOtherOutlinesWhenVisible = false
    m_HealthBarParticle = resource_name:""
    m_sHealthBarAttachment = ""
    m_HealthBarColorFriend = [ 0, 0, 0, 0 ]
    m_HealthBarColorEnemy = [ 0, 0, 0, 0 ]
    m_HealthBarColorTeam1 = [ 0, 0, 0, 0 ]
    m_HealthBarColorTeam2 = [ 0, 0, 0, 0 ]
    m_HealthBarColorTeamNeutral = [ 0, 0, 0, 0 ]
    m_flMeleeTargetRadius = 0.0
    m_flHealthBarOffset = 0.0
    m_bSpawnBreakablesOnDeath = false
    m_flBreakableForceScale = 1.0
    m_flPhysicsImpulseMultiplier = 1.0
    m_flBeamWeaponWidth = 1.0
    m_flBeamTurnRate = 90.0
    m_BeamWeaponParticle = resource_name:""
    m_WeaponInfo = 
    {
        m_flBulletDamage = 0.0
        m_eDamageType = "CITADEL_DAMAGETYPE_BULLET"
        m_iBullets = 1
        m_iSplitShotsMax = -1
        m_bHitOnceAcrossAllBullets = false
        m_iBulletsToFullyClaimOrb = 1
        m_flExplosionRadius = 0.0
        m_flExplosionDamageScaleAtMaxRadius = 0.3
        m_bAllowExplosionToCollectGold = false
        m_iClipSize = 0
        m_flCycleTime = 0.15
        m_flBulletCreationDelay = 0.0
        m_iBurstShotCount = 1
        m_flIntraBurstCycleTime = 0.0
        m_iAmmoConsumedPerShot = 1
        m_flRange = 8192.0
        m_flRangeWhileZoomed = 0.0
        m_flDamageFalloffStartRange = 0.0
        m_flDamageFalloffEndRange = 900.0
        m_flDamageFalloffBias = 0.5
        m_flDamageFalloffStartScale = 1.0
        m_flDamageFalloffEndScale = 0.0
        m_bDontPassThroughPortals = false
        m_bPlayImpactEffectsOnTeammates = false
        m_flPenetrationPercent = 0.0
        m_flIronSightsTime = 0.1
        m_reloadDuration = 0.0
        m_bReloadUseActiveWeaponInfoDuration = false
        m_bReloadSingleBullets = false
        m_bReloadSingleBulletsAllowCancel = false
        m_flReloadSingleBulletsInitialDelay = 0.0
        m_bCanCrit = true
        m_flCritBonusStartRange = 0.0
        m_flCritBonusEndRange = 0.0
        m_flCritBonusStart = 1.0
        m_flCritBonusEnd = 1.0
        m_flCritBonusAgainstNPCs = 0.2
        m_eCritFilter = "CITADEL_UNIT_TARGET_ALL"
        m_eCritAlwaysFilter = ""
        m_bSpinsUp = false
        m_flMaxSpinCycleTime = -1.0
        m_flSpinIncreaseRate = 0.0
        m_flSpinDecayRate = 0.0
        m_flBuildUpRate = -1.0
        m_bIsSemiAuto = false
        m_flBulletSpeed = 1000.0
        m_flBulletSpeedRandomFactor = 0.0
        m_flBulletGravityScale = 1.0
        m_flBulletRadius = 0.0
        m_flBulletRadiusVsWorld = 0.0
        m_flBulletLifetime = 0.0
        m_flVerticalAimBias = 0.0
        m_flBulletInheritShooterVelocityScale = 0.0
        m_bCanZoom = true
        m_flZoomFOV = 70.0
        m_flZoomFOV_Relative = -5.0
        m_flZoomMoveSpeedPercent = 0.75
        m_flShootMoveSpeedPercent = 0.75
        m_flReloadMoveSpeedPercent = 1.0
        m_bUsesSpreadPattern = true
        m_Spread = 0.2
        m_bFirstShotPerfectAccuracy = false
        m_AimingShootSpreadPenalty = 0.0
        m_flScatterYawScale = 1.0
        m_flShootSpreadPenaltyPerShot = 0.0
        m_ShootSpreadPenaltyPerShotNormalization = 
        {
            m_bNormalizeSpreadPerShot = false
            m_FireRatePctRange = [ 0.0, 100.0 ]
            m_SpreadPerShotFactor = 1.0
        }
        m_flShootSpreadPenaltyDecayDelay = -1.0
        m_flShootSpreadPenaltyDecay = 1.0
        m_flSpreadPenaltyDecay = 3.0
        m_flShootingUpSpreadPenalty = 0.0
        m_flAutoReplenishClip = 0.0
        m_NpcAimingSpread = 0.0
        m_vecScatterOffsets = [  ]
        m_flPelletScatterFactor = 1.0
        m_flPelletScatterSpreadFactor = 0.5
        m_bApplySpreadToFirstPellet = false
        m_vecOriginOffsets = [  ]
        m_flVerticalPunch = 1.0
        m_flHorizontalPunch = 0.5
        m_HorizontalRecoil = 
        {
            m_Range = 0.0
            m_flBurstSlope = 0.0
            m_flBurstExponent = 1.0
            m_flBurstConstant = 0.0
        }
        m_VerticallRecoil = 
        {
            m_Range = 0.0
            m_flBurstSlope = 0.0
            m_flBurstExponent = 1.0
            m_flBurstConstant = 0.0
        }
        m_flRecoilSpeed = 1.0
        m_flRecoilRecoveryDelayFactor = 1.0
        m_flRecoilRecoverySpeed = 1.0
        m_flRecoilShotIndexRecoveryTimeFactor = 0.25
        m_nRecoilSeed = 0
        m_szBulletTravelTracerParticle = resource_name:"particles/weapon_fx/default_tracer.vpcf"
        m_szSelfBulletTravelTracerParticle = resource_name:""
        m_szBulletLinkParticle = resource_name:""
        m_bUseDesatForFriendlyNonHeroTracer = true
        m_eAttachmentSourceType = "EAttachmentSource_WeaponMuzzles"
        m_strCustomAttachmentSource = "ability_cast"
        m_szMuzzleFlashEffectName = resource_name:""
        m_strWeaponImpactEffect = resource_name:""
        m_mapImpactEffects = 
        {
        }
        m_bUseWeaponAbilityName = false
        m_flDamageForce = 50.0
        m_strShootSound = soundevent:""
        m_strFirstShotSound = soundevent:""
        m_strShotReleaseSound = soundevent:""
        m_strBulletLoopingSound = soundevent:""
        m_strBulletWhizSound = soundevent:""
        m_strBulletImpactSound = soundevent:""
        m_flBulletWhizDistance = 150.0
        m_strReloadSound = soundevent:""
        m_strReloadEndSound = soundevent:""
        m_strLocalPlayerBulletImpactSound = soundevent:""
        m_strLocalPlayerBulletImpactHeavySound = soundevent:""
        m_strZoomInSound = soundevent:""
        m_strZoomOutSound = soundevent:""
        m_strSpinUpSound = soundevent:""
        m_strSpinDownSound = soundevent:""
        m_strSpinUpLoopSound = soundevent:""
        m_flMaxLagCompensation = 340282346638528859811704183484516925440.0
    }
}