diff --git a/src/Common/Game/IW5/IW5_Assets.h b/src/Common/Game/IW5/IW5_Assets.h index bc2892f5..350a2dea 100644 --- a/src/Common/Game/IW5/IW5_Assets.h +++ b/src/Common/Game/IW5/IW5_Assets.h @@ -3963,7 +3963,8 @@ namespace IW5 struct ReloadStateTimerEntry { - int attachment; + WeaponAttachmentCombination attachment; + short unused; int reloadAddTime; int reloadStartAddTime; }; diff --git a/src/ObjCommon/Game/IW5/InfoString/WeaponFields.h b/src/ObjCommon/Game/IW5/InfoString/WeaponFields.h index b4171233..9e6a34a7 100644 --- a/src/ObjCommon/Game/IW5/InfoString/WeaponFields.h +++ b/src/ObjCommon/Game/IW5/InfoString/WeaponFields.h @@ -4,7 +4,6 @@ namespace IW5 { // WeaponCompleteDef: - // TODO: reloadOverrides // TODO: notetrackOverrides // TODO: iFireTimeAkimbo // TODO: iAltRaiseTimeAkimbo @@ -734,6 +733,7 @@ namespace IW5 {"animOverrides", offsetof(WeaponFullDef, weapCompleteDef.animOverrides), WFT_ANIM_OVERRIDES }, {"soundOverrides", offsetof(WeaponFullDef, weapCompleteDef.soundOverrides), WFT_SOUND_OVERRIDES }, {"fxOverrides", offsetof(WeaponFullDef, weapCompleteDef.fxOverrides), WFT_FX_OVERRIDES }, + {"reloadOverrides", offsetof(WeaponFullDef, weapCompleteDef.reloadOverrides), WFT_RELOAD_OVERRIDES }, }; inline const char* szWeapTypeNames[]{ diff --git a/src/ObjWriting/Game/IW5/AssetDumpers/AssetDumperWeapon.cpp b/src/ObjWriting/Game/IW5/AssetDumpers/AssetDumperWeapon.cpp index a762d23f..06de0a3c 100644 --- a/src/ObjWriting/Game/IW5/AssetDumpers/AssetDumperWeapon.cpp +++ b/src/ObjWriting/Game/IW5/AssetDumpers/AssetDumperWeapon.cpp @@ -229,6 +229,10 @@ namespace IW5 FillFromFxOverrides(std::string(field.szName)); break; + case WFT_RELOAD_OVERRIDES: + FillFromReloadOverrides(std::string(field.szName)); + break; + case WFT_NUM_FIELD_TYPES: default: assert(false); @@ -463,6 +467,31 @@ namespace IW5 m_info_string.SetValueForKey(key, ss.str()); } + void FillFromReloadOverrides(const std::string& key) + { + std::stringstream ss; + bool first = true; + + for (auto i = 0u; i < m_weapon->weapCompleteDef.numReloadStateTimerOverrides; i++) + { + const auto& reloadOverride = m_weapon->weapCompleteDef.reloadOverrides[i]; + + if (!first) + ss << "\n"; + else + first = false; + + if (reloadOverride.attachment.fields) + ss << GetNameForSingleWeaponAttachment(reloadOverride.attachment); + else + ss << "none"; + + ss << ' ' << reloadOverride.reloadAddTime << ' ' << reloadOverride.reloadStartAddTime; + } + + m_info_string.SetValueForKey(key, ss.str()); + } + const WeaponFullDef* m_weapon; }; } // namespace IW5