XPlor/definitions/cod/xmodel.xscript

51 lines
1.7 KiB
Plaintext
Raw Normal View History

2026-01-01 22:18:40 -05:00
type xmodel [display="XModel"]
{
i32 name_ptr [ui, readonly, display="Name Ptr"];
u8 num_bones [ui, readonly, display="Num Bones"];
u8 num_root_bones [ui, readonly, display="Num Root Bones"];
u8 num_surfaces [ui, readonly, display="Num Surfaces"];
i8 lod_ramp_type [ui, readonly, display="LOD Ramp Type"];
// Model surfaces pointers (4 LODs)
i32 model_surfs_ptr_0 [ui, readonly, display="Model Surfs Ptr LOD0"];
i32 model_surfs_ptr_1 [ui, readonly, display="Model Surfs Ptr LOD1"];
i32 model_surfs_ptr_2 [ui, readonly, display="Model Surfs Ptr LOD2"];
i32 model_surfs_ptr_3 [ui, readonly, display="Model Surfs Ptr LOD3"];
// LOD info (4 floats = 16 bytes)
lod_info = read(16) [ui, readonly, display="LOD Info"];
i32 coll_surfs_ptr [ui, readonly, display="Coll Surfs Ptr"];
i32 num_coll_surfs [ui, readonly, display="Num Coll Surfs"];
i32 contents [ui, readonly, display="Contents"];
i32 bone_info_ptr [ui, readonly, display="Bone Info Ptr"];
// Bounds (6 floats = 24 bytes for mins + maxs)
bounds = read(24) [ui, readonly, display="Bounds"];
// Radius (float)
radius = read(4) [ui, readonly, display="Radius"];
i32 phys_preset_ptr [ui, readonly, display="Phys Preset Ptr"];
i32 phys_collmap_ptr [ui, readonly, display="Phys Collmap Ptr"];
u16 flags [ui, readonly, display="Flags"];
skip(2); // padding
// Parse inline name
2026-01-01 22:18:40 -05:00
if (name_ptr == -1) {
name = cstring() [ui, readonly, display="Name"];
_name = name;
2026-01-01 22:18:40 -05:00
}
// Note: Full XModel inline parsing would require:
// - XModelSurfs for each LOD
// - XBoneInfo array
// - Collision surfaces
// - Physics preset
// - Physics collision map
// These are complex nested structures
2026-01-01 22:18:40 -05:00
}