Skip to content

Conversation

@cueki
Copy link

@cueki cueki commented Oct 16, 2025

put head in wood chipper for 1 week see what comes out

New

Added support for bone animation data with compressed quaternions/vectors and RLE decompression, animation descriptors with frame count/fps/flags, IK rules/chains/links and error data, and movement/velocity data.

Sequence parsing now includes descriptors with blending and timing, animation events, auto layers, IK locks, activity names/weights, keyvalue strings, and pose parameters.

Flex/facial system includes eyeball movement parameters, vertex animations, flex controllers/UI config/rules/operators (all flex operation types), mesh flex controllers, and mouth bone references.

Also added all 21 bone flags, attachment points on bones, external model and animation block references, and basic Header2 parsing.

Tested with the included v44, v47,and v49 MDL files and my own v48s (TF2 Heavy and Bot Heavy models).

WIP

  • External animation files not yet supported (only embedded animations with animBlock == 0)
  • Some animation features not parsed: local hierarchy, animation sections, zero frame data
  • Some sequence offset fields read but arrays not parsed: animIndexIndex, weightListIndex, poseKeyIndex, cyclePoseIndex
  • Header2 arrays for source bone transforms, linear bone table, and bone flex drivers not fully parsed
  • Untested: local node transitions, model-local attachments, global IK autoplay locks (didn't have in models)

@craftablescience craftablescience added the enhancement New feature or request label Oct 16, 2025
@cueki
Copy link
Author

cueki commented Nov 7, 2025

Tested against all models from HL2, TF2, CS:GO, Portal 2, and L4D2. 30,456 succeeded, 38 failed. The failures are 2 corrupted TF2 files, 2 CS:GO hash mismatches, and 34 L4D2 models that seem to use a different vtx strip group format.

@craftablescience
Copy link
Owner

oh wow L4D2 parses? I didn't expect it to have the same format

@cueki
Copy link
Author

cueki commented Nov 7, 2025

with 10x as many errors comparably :), I thought I'd give it a shot anyways... it would require some more work to actually be fully 'supporting' the format

@SpringierTrain
Copy link

does it work with HL2X :trollface:

Copy link
Owner

@craftablescience craftablescience left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't worry too much about fixing these, I will get around to it eventually

@cueki
Copy link
Author

cueki commented Nov 25, 2025

Should be good now :)

Not entirely confident about the Math.h change, I think it's what you wanted.

@cueki cueki force-pushed the main branch 2 times, most recently from 535d9c4 to ba32ce6 Compare November 25, 2025 11:35
//int32_t meshesOffset;
std::vector<Mesh> meshes;

// These do not map to raw memory
Copy link
Author

@cueki cueki Nov 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we can probably remove this comment here and at #R459 ...

unless its something specific you care about, the whole header is a parsed representation

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants