chore: dump iw5 weapon fx overrides

This commit is contained in:
Jan 2024-04-07 14:04:12 +02:00
parent ea0cb66eae
commit 4f0d9674ff
No known key found for this signature in database
GPG Key ID: 44B581F78FF5C57C
4 changed files with 80 additions and 4 deletions

View File

@ -118,6 +118,9 @@ namespace IW5
WFT_ATTACHMENT, WFT_ATTACHMENT,
WFT_ANIM_OVERRIDES, WFT_ANIM_OVERRIDES,
WFT_SOUND_OVERRIDES, WFT_SOUND_OVERRIDES,
WFT_FX_OVERRIDES,
WFT_RELOAD_OVERRIDES,
WFT_NOTE_TRACK_OVERRIDES,
WFT_NUM_FIELD_TYPES, WFT_NUM_FIELD_TYPES,
}; };

View File

@ -3943,13 +3943,24 @@ namespace IW5
SoundOverrideTypes soundType; SoundOverrideTypes soundType;
}; };
enum FXOverrideTypes : unsigned int
{
FXTYPE_NONE = 0x0,
FXTYPE_VIEW_FLASH = 0x1,
FXTYPE_WORLD_FLASH = 0x2,
FXTYPE_VIEW_SHELL_EJECT = 0x3,
FXTYPE_WORLD_SHELL_EJECT = 0x4,
FXTYPE_COUNT
};
struct FXOverrideEntry struct FXOverrideEntry
{ {
unsigned short attachment1; WeaponAttachmentCombination attachment1;
unsigned short attachment2; WeaponAttachmentCombination attachment2;
FxEffectDef* overrideFX; FxEffectDef* overrideFX;
FxEffectDef* altmodeFX; FxEffectDef* altmodeFX;
unsigned int fxType; FXOverrideTypes fxType;
}; };
struct ReloadStateTimerEntry struct ReloadStateTimerEntry

View File

@ -4,7 +4,6 @@
namespace IW5 namespace IW5
{ {
// WeaponCompleteDef: // WeaponCompleteDef:
// TODO: fxOverrides
// TODO: reloadOverrides // TODO: reloadOverrides
// TODO: notetrackOverrides // TODO: notetrackOverrides
// TODO: iFireTimeAkimbo // TODO: iFireTimeAkimbo
@ -734,6 +733,7 @@ namespace IW5
{"attachments", offsetof(WeaponFullDef, scopes), WFT_ATTACHMENT }, {"attachments", offsetof(WeaponFullDef, scopes), WFT_ATTACHMENT },
{"animOverrides", offsetof(WeaponFullDef, weapCompleteDef.animOverrides), WFT_ANIM_OVERRIDES }, {"animOverrides", offsetof(WeaponFullDef, weapCompleteDef.animOverrides), WFT_ANIM_OVERRIDES },
{"soundOverrides", offsetof(WeaponFullDef, weapCompleteDef.soundOverrides), WFT_SOUND_OVERRIDES }, {"soundOverrides", offsetof(WeaponFullDef, weapCompleteDef.soundOverrides), WFT_SOUND_OVERRIDES },
{"fxOverrides", offsetof(WeaponFullDef, weapCompleteDef.fxOverrides), WFT_FX_OVERRIDES },
}; };
inline const char* szWeapTypeNames[]{ inline const char* szWeapTypeNames[]{
@ -934,4 +934,13 @@ namespace IW5
"player_lastshot", "player_lastshot",
}; };
static_assert(std::extent_v<decltype(soundOverrideTypeNames)> == SNDTYPE_PLAYER_COUNT); static_assert(std::extent_v<decltype(soundOverrideTypeNames)> == SNDTYPE_PLAYER_COUNT);
inline const char* fxOverrideTypeNames[]{
"none",
"view_flash",
"world_flash",
"view_shell_eject",
"world_shell_eject",
};
static_assert(std::extent_v<decltype(fxOverrideTypeNames)> == FXTYPE_COUNT);
} // namespace IW5 } // namespace IW5

View File

@ -225,6 +225,10 @@ namespace IW5
FillFromSoundOverrides(std::string(field.szName)); FillFromSoundOverrides(std::string(field.szName));
break; break;
case WFT_FX_OVERRIDES:
FillFromFxOverrides(std::string(field.szName));
break;
case WFT_NUM_FIELD_TYPES: case WFT_NUM_FIELD_TYPES:
default: default:
assert(false); assert(false);
@ -410,6 +414,55 @@ namespace IW5
m_info_string.SetValueForKey(key, ss.str()); m_info_string.SetValueForKey(key, ss.str());
} }
void FillFromFxOverrides(const std::string& key)
{
std::stringstream ss;
bool first = true;
for (auto i = 0u; i < m_weapon->weapCompleteDef.numFXOverrides; i++)
{
const auto& fxOverride = m_weapon->weapCompleteDef.fxOverrides[i];
if (!first)
ss << "\n";
else
first = false;
assert(fxOverride.fxType < FXTYPE_COUNT);
if (fxOverride.attachment1.fields)
ss << GetNameForSingleWeaponAttachment(fxOverride.attachment1);
else
ss << "none";
ss << ' ';
if (fxOverride.attachment2.fields)
ss << GetNameForSingleWeaponAttachment(fxOverride.attachment2);
else
ss << "none";
ss << ' ';
if (fxOverride.fxType < FXTYPE_COUNT)
ss << fxOverrideTypeNames[fxOverride.fxType] << ' ';
if (fxOverride.overrideFX && fxOverride.overrideFX->name && fxOverride.overrideFX->name[0])
ss << fxOverride.overrideFX->name;
else
ss << "none";
ss << ' ';
if (fxOverride.altmodeFX && fxOverride.altmodeFX->name && fxOverride.altmodeFX->name[0])
ss << fxOverride.altmodeFX->name;
else
ss << "none";
}
m_info_string.SetValueForKey(key, ss.str());
}
const WeaponFullDef* m_weapon; const WeaponFullDef* m_weapon;
}; };
} // namespace IW5 } // namespace IW5