2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2026-06-28 11:58:03 +00:00

feat: T5 weapon dumping & loading (#792)

* Update docs.

* Add weapon constants.

* Register asset dumper.

* Add fields and strings for weapon parsing.

* Add gdt and raw weapon loader.

* Add weapon dumper.

* Clang format.

* Update T5 strings.

* Fix forgotten rename.

* Clang format.

* fix: add missing t5 weapon fields

* chore: properly sort,format and check size of t5 weapon enum strings

* chore: remove unused functions

* chore: add t5 weapon checks and defaults

* format enum strings

* chore: make FlameTable struct use pascal case name

* feat: dump and load flametable

* fix: make loaded weapons match vanilla data

---------

Co-authored-by: njohnson <gitea.nicholasjohnson.info>
Co-authored-by: Jan Laupetin <jan@laupetin.net>
This commit is contained in:
Paging Red
2026-06-20 07:03:36 -04:00
committed by GitHub
parent e5683c3bbd
commit 5b11848f4d
30 changed files with 2382 additions and 39 deletions
+3 -3
View File
@@ -3242,7 +3242,7 @@ namespace T4
int clientOnly;
};
struct flameTable
struct FlameTable
{
float flameVar_streamChunkGravityStart;
float flameVar_streamChunkGravityEnd;
@@ -3788,8 +3788,8 @@ namespace T4
float hipDofEnd;
const char* flameTableFirstPerson;
const char* flameTableThirdPerson;
flameTable* flameTableFirstPersonPtr;
flameTable* flameTableThirdPersonPtr;
FlameTable* flameTableFirstPersonPtr;
FlameTable* flameTableThirdPersonPtr;
FxEffectDef* tagFx_preparationEffect;
FxEffectDef* tagFlash_preparationEffect;
};
+1
View File
@@ -24,6 +24,7 @@ namespace
"vertexdecl",
"vertexshader",
"pixelshader",
"flametable",
};
static_assert(std::extent_v<decltype(SUB_ASSET_TYPE_NAMES)> == SUB_ASSET_TYPE_COUNT);
} // namespace
+2
View File
@@ -66,6 +66,7 @@ namespace T5
SUB_ASSET_TYPE_VERTEX_DECL,
SUB_ASSET_TYPE_VERTEX_SHADER,
SUB_ASSET_TYPE_PIXEL_SHADER,
SUB_ASSET_TYPE_FLAME_TABLE,
SUB_ASSET_TYPE_COUNT
};
@@ -212,6 +213,7 @@ namespace T5
using SubAssetVertexDecl = SubAsset<SUB_ASSET_TYPE_VERTEX_DECL, MaterialVertexDeclaration>;
using SubAssetVertexShader = SubAsset<SUB_ASSET_TYPE_VERTEX_SHADER, MaterialVertexShader>;
using SubAssetPixelShader = SubAsset<SUB_ASSET_TYPE_PIXEL_SHADER, MaterialPixelShader>;
using SubAssetFlameTable = SubAsset<SUB_ASSET_TYPE_FLAME_TABLE, FlameTable>;
} // namespace T5
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetPhysPreset, name);
+41 -22
View File
@@ -3778,7 +3778,8 @@ namespace T5
WEAPON_ICON_RATIO_1TO1 = 0x0,
WEAPON_ICON_RATIO_2TO1 = 0x1,
WEAPON_ICON_RATIO_4TO1 = 0x2,
WEAPON_ICON_RATIO_COUNT = 0x3,
WEAPON_ICON_RATIO_NUM,
};
enum weapType_t
@@ -3791,7 +3792,8 @@ namespace T5
WEAPTYPE_BOMB = 0x5,
WEAPTYPE_MINE = 0x6,
WEAPTYPE_MELEE = 0x7,
WEAPTYPE_NUM = 0x8,
WEAPTYPE_NUM,
};
enum weapClass_t
@@ -3809,7 +3811,8 @@ namespace T5
WEAPCLASS_ITEM = 0xA,
WEAPCLASS_MELEE = 0xB,
WEAPCLASS_KILLSTREAK_ALT_STORED_WEAPON = 0xC,
WEAPCLASS_NUM = 0xD,
WEAPCLASS_NUM,
};
enum PenetrateType
@@ -3818,7 +3821,8 @@ namespace T5
PENETRATE_TYPE_SMALL = 0x1,
PENETRATE_TYPE_MEDIUM = 0x2,
PENETRATE_TYPE_LARGE = 0x3,
PENETRATE_TYPE_COUNT = 0x4,
PENETRATE_TYPE_NUM,
};
enum ImpactType
@@ -3839,7 +3843,8 @@ namespace T5
IMPACT_TYPE_TANK_SHELL = 0xD,
IMPACT_TYPE_BOLT = 0xE,
IMPACT_TYPE_BLADE = 0xF,
IMPACT_TYPE_COUNT = 0x10,
IMPACT_TYPE_NUM,
};
enum weapInventoryType_t
@@ -3849,7 +3854,8 @@ namespace T5
WEAPINVENTORY_ITEM = 0x2,
WEAPINVENTORY_ALTMODE = 0x3,
WEAPINVENTORY_MELEE = 0x4,
WEAPINVENTORYCOUNT = 0x5,
WEAPINVENTORY_NUM,
};
enum weapFireType_t
@@ -3861,7 +3867,8 @@ namespace T5
WEAPON_FIRETYPE_BURSTFIRE4 = 0x4,
WEAPON_FIRETYPE_STACKED = 0x5,
WEAPON_FIRETYPE_MINIGUN = 0x6,
WEAPON_FIRETYPECOUNT = 0x7,
WEAPON_FIRETYPE_NUM,
};
enum weapClipType_t
@@ -3872,7 +3879,8 @@ namespace T5
WEAPON_CLIPTYPE_DP28 = 0x3,
WEAPON_CLIPTYPE_PTRS = 0x4,
WEAPON_CLIPTYPE_LMG = 0x5,
WEAPON_CLIPTYPECOUNT = 0x6,
WEAPON_CLIPTYPE_NUM,
};
enum OffhandClass
@@ -3882,7 +3890,8 @@ namespace T5
OFFHAND_CLASS_SMOKE_GRENADE = 0x2,
OFFHAND_CLASS_FLASH_GRENADE = 0x3,
OFFHAND_CLASS_GEAR = 0x4,
OFFHAND_CLASS_COUNT = 0x5,
OFFHAND_CLASS_NUM,
};
enum OffhandSlot
@@ -3892,7 +3901,8 @@ namespace T5
OFFHAND_SLOT_TACTICAL_GRENADE = 0x2,
OFFHAND_SLOT_EQUIPMENT = 0x3,
OFFHAND_SLOT_SPECIFIC_USE = 0x4,
OFFHAND_SLOT_COUNT = 0x5,
OFFHAND_SLOT_NUM,
};
enum weapStance_t
@@ -3900,7 +3910,8 @@ namespace T5
WEAPSTANCE_STAND = 0x0,
WEAPSTANCE_DUCK = 0x1,
WEAPSTANCE_PRONE = 0x2,
WEAPSTANCE_NUM = 0x3,
WEAPSTANCE_NUM,
};
enum activeReticleType_t
@@ -3908,7 +3919,8 @@ namespace T5
VEH_ACTIVE_RETICLE_NONE = 0x0,
VEH_ACTIVE_RETICLE_PIP_ON_A_STICK = 0x1,
VEH_ACTIVE_RETICLE_BOUNCING_DIAMOND = 0x2,
VEH_ACTIVE_RETICLE_COUNT = 0x3,
VEH_ACTIVE_RETICLE_NUM,
};
enum ammoCounterClipType_t
@@ -3920,14 +3932,16 @@ namespace T5
AMMO_COUNTER_CLIP_ROCKET = 0x4,
AMMO_COUNTER_CLIP_BELTFED = 0x5,
AMMO_COUNTER_CLIP_ALTWEAPON = 0x6,
AMMO_COUNTER_CLIP_COUNT = 0x7,
AMMO_COUNTER_CLIP_NUM,
};
enum weapOverlayReticle_t
{
WEAPOVERLAYRETICLE_NONE = 0x0,
WEAPOVERLAYRETICLE_CROSSHAIR = 0x1,
WEAPOVERLAYRETICLE_NUM = 0x2,
WEAPOVERLAYRETICLE_NUM,
};
enum WeapOverlayInteface_t
@@ -3935,7 +3949,8 @@ namespace T5
WEAPOVERLAYINTERFACE_NONE = 0x0,
WEAPOVERLAYINTERFACE_JAVELIN = 0x1,
WEAPOVERLAYINTERFACE_TURRETSCOPE = 0x2,
WEAPOVERLAYINTERFACECOUNT = 0x3,
WEAPOVERLAYINTERFACE_NUM,
};
enum weapProjExposion_t
@@ -3950,7 +3965,8 @@ namespace T5
WEAPPROJEXP_FIRE = 0x7,
WEAPPROJEXP_NAPALMBLOB = 0x8,
WEAPPROJEXP_BOLT = 0x9,
WEAPPROJEXP_NUM = 0xA,
WEAPPROJEXP_NUM,
};
enum WeapStickinessType
@@ -3961,7 +3977,8 @@ namespace T5
WEAPSTICKINESS_GROUND = 0x3,
WEAPSTICKINESS_GROUND_WITH_YAW = 0x4,
WEAPSTICKINESS_FLESH = 0x5,
WEAPSTICKINESS_COUNT = 0x6,
WEAPSTICKINESS_NUM,
};
enum WeapRotateType
@@ -3969,7 +3986,8 @@ namespace T5
WEAPROTATE_GRENADE_ROTATE = 0x0,
WEAPROTATE_BLADE_ROTATE = 0x1,
WEAPROTATE_CYLINDER_ROTATE = 0x2,
WEAPROTATE_COUNT = 0x3,
WEAPROTATE_NUM,
};
enum guidedMissileType_t
@@ -3981,7 +3999,8 @@ namespace T5
MISSILE_GUIDANCE_BALLISTIC = 0x4,
MISSILE_GUIDANCE_WIREGUIDED = 0x5,
MISSILE_GUIDANCE_TVGUIDED = 0x6,
MISSILE_GUIDANCE_COUNT = 0x7,
MISSILE_GUIDANCE_NUM,
};
enum weapAnimFiles_t
@@ -4118,7 +4137,7 @@ namespace T5
HITLOC_COUNT
};
struct flameTable
struct FlameTable
{
float flameVar_streamChunkGravityStart;
float flameVar_streamChunkGravityEnd;
@@ -4741,8 +4760,8 @@ namespace T5
int scanPauseTime;
const char* flameTableFirstPerson;
const char* flameTableThirdPerson;
flameTable* flameTableFirstPersonPtr;
flameTable* flameTableThirdPersonPtr;
FlameTable* flameTableFirstPersonPtr;
FlameTable* flameTableThirdPersonPtr;
FxEffectDef* tagFx_preparationEffect;
FxEffectDef* tagFlash_preparationEffect;
bool doGibbing;
+4 -4
View File
@@ -88,7 +88,7 @@ namespace T6
struct XRigidVertList;
struct XSurface;
struct XModel;
struct flameTable;
struct FlameTable;
struct cStaticModel_s;
struct FxElemVelStateSample;
struct FxElemVisStateSample;
@@ -4944,8 +4944,8 @@ namespace T6
int scanPauseTime;
const char* flameTableFirstPerson;
const char* flameTableThirdPerson;
flameTable* flameTableFirstPersonPtr;
flameTable* flameTableThirdPersonPtr;
FlameTable* flameTableFirstPersonPtr;
FlameTable* flameTableThirdPersonPtr;
FxEffectDef* tagFx_preparationEffect;
FxEffectDef* tagFlash_preparationEffect;
bool doGibbing;
@@ -6681,7 +6681,7 @@ namespace T6
int animDuration;
};
struct flameTable
struct FlameTable
{
float flameVar_streamChunkGravityStart;
float flameVar_streamChunkGravityEnd;