mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-20 16:15:43 +00:00
chore: dump iw5 weapon fx overrides
This commit is contained in:
parent
ea0cb66eae
commit
4f0d9674ff
@ -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,
|
||||||
};
|
};
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user