// MVDataRoot
// MVDataAssociatedFile = scripts/heroes.vdata
// MVDataOverlayType = 1
// MVDataOutlinerLeafNameFn = !!UNKNOWN!!
class CitadelHeroData_t
{
    void* __vftable;
public:
    CUtlVector<HeroAnimGraphDefaultValueOverride_t> m_vecAnimGraphDefaultValueOverrides;
private:
    uint8 pad_0020[8];
public:
    HeroID_t m_HeroID;
    CUtlString m_strHeroSortName;
    CUtlString m_strHeroSearchName;
    // MPropertyStartGroup = Screen Space Particle FX
    CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>> m_hDamageTakenParticle;
    CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>> m_hGroundDamageTakenParticle;
    CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>> m_hDeathParticle;
    CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>> m_hLowHealthParticle;
    // MPropertyStartGroup = Visuals
    CPanoramaImageName m_strIconImageSmall;
    CPanoramaImageName m_strIconHeroCard;
    CPanoramaImageName m_strIconHeroCardCritical;
    CPanoramaImageName m_strIconHeroCardGloat;
    CPanoramaImageName m_strMinimapImage;
    CPanoramaImageName m_strTopBarVertical;
    CPanoramaImageName m_strLogoImageEnglish;
    CPanoramaImageName m_strLogoImageLocalized;
    CResourceNameTyped<CWeakHandle<InfoForResourceTypeIParticleSystemDefinition>> m_hRespawnParticle;
    Color m_colorUI;
    CResourceNameTyped<CWeakHandle<InfoForResourceTypeCModel>> m_strModelName;
    int32 m_nModelSkin;
    // MPropertyDescription = If specified, this model will be used if convar citadel_use_wip_models is true.
    CResourceNameTyped<CWeakHandle<InfoForResourceTypeCModel>> m_strWIPModelName;
    // MPropertyDescription = If specified, this model will be used in main instead of 'Model Name'.
    CResourceNameTyped<CWeakHandle<InfoForResourceTypeCModel>> m_strMainOnlyModelName;
    // MPropertyDescription = When set, also use the 'Main Only Model Name' in the Experimental branch
    bool m_bUseMainOnlyModelForExperimental;
    // MPropertyStartGroup = UI
    uint64 m_iAddedTime;
    // MPropertyAttributeEditor = AssetBrowse( vmap )
    CUtlString m_strUIPortraitMap;
    // MPropertyAttributeEditor = AssetBrowse( vmap )
    CUtlString m_strUIShoppingMap;
    // MPropertyAttributeEditor = AssetBrowse( vmap )
    CUtlString m_strUITeamRevealMap;
    // MPropertyAttributeEditor = AssetBrowse( vmap )
    CUtlString m_strUIPostgamePortraitMap;
    HeroStatsUI_t m_heroStatsUI;
    HeroStatsDisplay_t m_heroStatsDisplay;
    CitadelStatsDisplay_t m_ShopStatDisplay;
    // MPropertyStartGroup = Sounds
    CSoundEventName m_strDeathVOSound;
    CSoundEventName m_strDeathSound;
    CSoundEventName m_strLastHitSound;
    CSoundEventName m_strRosterSelectedSound;
    CSoundEventName m_strRosterRemovedSound;
    CSoundEventName m_strVoteRevealSound;
    CSoundEventName m_strLowHealthSound;
    CSoundEventName m_strHeroSpecificLowHealthSound;
    CSoundEventName m_strMovementLoop;
    CSoundEventName m_strPostGameVictorySound;
    CSoundEventName m_strPostGameDefeatSound;
    // MPropertyDescription = Teammate footstep sounds are relative to whoever we're spectating.
    CResourceNameTyped<CWeakHandle<InfoForResourceTypeCVSoundEventScriptList>> m_hGameSoundEventScript;
    CResourceNameTyped<CWeakHandle<InfoForResourceTypeCVSoundEventScriptList>> m_hGeneratedVOEventScript;
    float32 m_flStealthSpeedMetersPerSecond;
    // MPropertyStartGroup
    bool m_bInDevelopment;
    bool m_bAssignedPlayersOnly;
    bool m_bNewPlayerRecommended;
    bool m_bLaneTestingRecommended;
    bool m_bNeedsTesting;
    bool m_bLimitedTesting;
    bool m_bDisabled;
    bool m_bPlayerSelectable;
    bool m_bPrereleaseOnly;
    int32 m_nComplexity;
    // MPropertyDescription = Minimum bot match difficulty for this hero to appear as an ally bot. -1 = never.
    // MPropertyAttributeRange = -1 4
    int32 m_nAllyBotDifficulty;
    // MPropertyDescription = Minimum bot match difficulty for this hero to appear as an enemy bot. -1 = never.
    // MPropertyAttributeRange = -1 4
    int32 m_nEnemyBotDifficulty;
    // MPropertyStartGroup = Low Health Settings
    // MPropertyDescription = Percentage of health to be considered low health
    // MPropertyAttributeRange = 0 1
    float32 m_flMinLowHealthPercentage;
    // MPropertyDescription = Percentage of health to be considered low health when you have high max health.
    // MPropertyAttributeRange = 0 1
    float32 m_flMaxLowHealthPercentage;
    // MPropertyDescription = Percentage of health to be considered mid health
    // MPropertyAttributeRange = 0 1
    float32 m_flMinMidHealthPercentage;
    // MPropertyDescription = Percentage of health to be considered mid health when you have high max health.
    // MPropertyAttributeRange = 0 1
    float32 m_flMaxMidHealthPercentage;
    // MPropertyDescription = Min Max Health for Remapped Value
    float32 m_flMinHealthForThreshold;
    // MPropertyDescription = Max Max Health for remapped value
    float32 m_flMaxHealthForThreshold;
    // MPropertyDescription = How long a player is deemed in combat taking or dealing damage to a player
    float32 m_flInCombatWithHeroDuration;
    // MPropertyDescription = How long a player is deemed in combat taking or dealing damage to a non-player
    float32 m_flInCombatWithNonHeroDuration;
    // MPropertyDescription = How long a player is deemed in combat taking or dealing damage to a neutral trooper
    float32 m_flInCombatWithNeutralDuration;
    // MPropertyDescription = Show N/A for falloff numbers in gun panel.
    bool m_bNAGunFalloffRange;
    // MPropertyStartGroup
    CUtlOrderedMap<EStatsType, float32> m_mapStartingStats;
    CUtlOrderedMap<EStatsType, HeroScalingStat_t> m_mapScalingStats;
    CPiecewiseCurve m_groundDashPositionCurve;
    CUtlOrderedMap<EItemSlotTypes_t, CUtlVector<ModCostBonuses_t>> m_mapModCostBonuses;
private:
    uint8 pad_0CD8[24];
public:
    CUtlOrderedMap<EAbilitySlots_t, CSubclassName<4>> m_mapBoundAbilities;
    CUtlOrderedMap<EAbilitySlots_t, CSubclassName<4>> m_mapWIPAbilities;
    CUtlOrderedMap<EItemSlotTypes_t, ItemSlotInfo_t> m_mapItemSlotInfo;
private:
    uint8 pad_0D68[80];
public:
    EAbilityResourceType m_eAbilityResourceType;
    CUtlString m_strGunTag;
    CUtlVector<CUtlString> m_vecHeroTags;
    EHeroType m_eHeroType;
    CUtlString m_strRosterBackgroundLayout;
    CUtlString m_strHideoutRichPresence;
    // MPropertyMapKeyLeafChoiceProviderFn = !!UNKNOWN!!
    CUtlOrderedMap<CUtlString, float32> m_mapItemDraftWeights;
    // MPropertyMapKeyLeafChoiceProviderFn = !!UNKNOWN!!
    CUtlOrderedMap<CUtlString, float32> m_mapItemDraftCounterWeights;
private:
    uint8 pad_0E48[24];
public:
    CUtlOrderedMap<EModifierValue, float32> m_mapStandardLevelUpUpgrades;
    CUtlOrderedMap<int32, HeroLevel_t> m_mapLevelInfo;
    CUtlOrderedMap<EItemSlotTypes_t, CUtlVector<HeroPurchaseBonus_t>> m_mapPurchaseBonuses;
};

KV3 Class Defaults

{
    _class = "CitadelHeroData_t"
    m_vecAnimGraphDefaultValueOverrides = [  ]
    m_HeroID = 0
    m_strHeroSortName = ""
    m_strHeroSearchName = ""
    m_hDamageTakenParticle = resource_name:""
    m_hGroundDamageTakenParticle = resource_name:""
    m_hDeathParticle = resource_name:""
    m_hLowHealthParticle = resource_name:""
    m_strIconImageSmall = panorama:""
    m_strIconHeroCard = panorama:""
    m_strIconHeroCardCritical = panorama:""
    m_strIconHeroCardGloat = panorama:""
    m_strMinimapImage = panorama:""
    m_strTopBarVertical = panorama:""
    m_strLogoImageEnglish = panorama:""
    m_strLogoImageLocalized = panorama:""
    m_hRespawnParticle = resource_name:""
    m_colorUI = [ 0, 0, 0, 0 ]
    m_strModelName = resource_name:""
    m_nModelSkin = 0
    m_strWIPModelName = resource_name:""
    m_strMainOnlyModelName = resource_name:""
    m_bUseMainOnlyModelForExperimental = true
    m_iAddedTime = 0
    m_strUIPortraitMap = ""
    m_strUIShoppingMap = ""
    m_strUITeamRevealMap = ""
    m_strUIPostgamePortraitMap = ""
    m_heroStatsUI = 
    {
        m_strWeaponNameLocString = ""
        m_strWeaponImage = ""
        m_eWeaponType = "ECitadelWeapon_Invalid"
        m_eWeaponStatDisplay = "EStatsCount"
        m_vecDisplayStats = [  ]
    }
    m_heroStatsDisplay = 
    {
        m_vecWeaponHeaderStats = [  ]
        m_vecWeaponStats = [  ]
        m_vecHealthHeaderStats = [  ]
        m_vecHealthStats = [  ]
        m_vecMagicHeaderStats = [  ]
        m_vecMagicStats = [  ]
    }
    m_ShopStatDisplay = 
    {
        m_eWeaponStatsDisplay = 
        {
            m_strWeaponNameLocString = ""
            m_strWeaponDescLocString = ""
            m_strWeaponImage = panorama:""
            m_strSecondaryWeaponDescLocString = ""
            m_eWeaponAttributes = ""
            m_vecDisplayStats = [  ]
            m_vecOtherDisplayStats = [  ]
        }
        m_eVitalityStatsDisplay = 
        {
            m_vecDisplayStats = [  ]
            m_vecOtherDisplayStats = [  ]
        }
        m_eSpiritStatsDisplay = 
        {
            m_vecDisplayStats = [  ]
        }
    }
    m_strDeathVOSound = soundevent:""
    m_strDeathSound = soundevent:""
    m_strLastHitSound = soundevent:""
    m_strRosterSelectedSound = soundevent:""
    m_strRosterRemovedSound = soundevent:""
    m_strVoteRevealSound = soundevent:""
    m_strLowHealthSound = soundevent:""
    m_strHeroSpecificLowHealthSound = soundevent:""
    m_strMovementLoop = soundevent:""
    m_strPostGameVictorySound = soundevent:""
    m_strPostGameDefeatSound = soundevent:""
    m_hGameSoundEventScript = resource_name:""
    m_hGeneratedVOEventScript = resource_name:""
    m_flStealthSpeedMetersPerSecond = 4.0
    m_bInDevelopment = false
    m_bAssignedPlayersOnly = false
    m_bNewPlayerRecommended = false
    m_bLaneTestingRecommended = false
    m_bNeedsTesting = false
    m_bLimitedTesting = false
    m_bDisabled = false
    m_bPlayerSelectable = true
    m_bPrereleaseOnly = false
    m_nComplexity = 0
    m_nAllyBotDifficulty = 0
    m_nEnemyBotDifficulty = 0
    m_flMinLowHealthPercentage = 0.1
    m_flMaxLowHealthPercentage = 0.2
    m_flMinMidHealthPercentage = 0.4
    m_flMaxMidHealthPercentage = 0.5
    m_flMinHealthForThreshold = 1000.0
    m_flMaxHealthForThreshold = 2750.0
    m_flInCombatWithHeroDuration = 3.0
    m_flInCombatWithNonHeroDuration = 0.5
    m_flInCombatWithNeutralDuration = 3.0
    m_bNAGunFalloffRange = false
    m_mapStartingStats = 
    {
    }
    m_mapScalingStats = 
    {
    }
    m_groundDashPositionCurve = 
    {
        m_spline = [  ]
        m_tangents = [  ]
        m_vDomainMins = [ 0.0, 0.0 ]
        m_vDomainMaxs = [ 0.0, 0.0 ]
    }
    m_mapModCostBonuses = 
    {
    }
    m_mapBoundAbilities = 
    {
    }
    m_mapWIPAbilities = 
    {
    }
    m_mapItemSlotInfo = 
    {
    }
    m_eAbilityResourceType = "EResourceType_None"
    m_strGunTag = ""
    m_vecHeroTags = [  ]
    m_eHeroType = "ECitadelHeroType_LastEnum"
    m_strRosterBackgroundLayout = ""
    m_strHideoutRichPresence = ""
    m_mapItemDraftWeights = 
    {
    }
    m_mapItemDraftCounterWeights = 
    {
    }
    m_mapStandardLevelUpUpgrades = 
    {
    }
    m_mapLevelInfo = 
    {
    }
    m_mapPurchaseBonuses = 
    {
    }
}