wowlib 0.0.0
Read & write World of Warcraft client files — a C++26 core
Loading...
Searching...
No Matches
skeleton.hpp File Reference

The .skel skeleton entity (namespace wowlib::formats::m2), 7.3+: a FIRST-CLASS entity with its own filesystem read/write — skeletons are SHARED between models (SKPD parent links), so an M2 references its skeleton rather than owning it exclusively. More...

#include <array>
#include <cstdint>
#include <format>
#include <optional>
#include <set>
#include <span>
#include <string>
#include <vector>
#include <welder/vocabulary.hpp>
#include <wowlib/core/client_version.hpp>
#include <wowlib/core/error.hpp>
#include <wowlib/core/file_key.hpp>
#include <wowlib/core/lang.hpp>
#include <wowlib/formats/common/file_entity.hpp>
#include <wowlib/formats/common/chunked_file.hpp>
#include <wowlib/formats/m2/offset_block.hpp>
#include <wowlib/formats/m2/boundaries.hpp>
#include <wowlib/formats/m2/root/record/bone.hpp>
#include <wowlib/formats/m2/root/record/scene.hpp>
#include <wowlib/formats/m2/root/record/sequence.hpp>
#include <wowlib/formats/m2/chunked/records.hpp>
#include <wowlib/formats/m2/satellites.hpp>
#include <wowlib/fs/filesystem.hpp>
#include <wowlib/formats/m2/root/record/track.hpp>
Include dependency graph for skeleton.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  wowlib::formats::m2::detail::SkelHeader< V >
 The SKL1 payload: the skeleton's identity. More...
struct  wowlib::formats::m2::detail::SkelSequences< V >
 The SKS1 payload: the sequence set that moved out of the model. More...
struct  wowlib::formats::m2::detail::SkelBones< V >
 The SKB1 payload: the bones that moved out of the model (external sequences' track data lives in the .anim AFSB chunks). More...
struct  wowlib::formats::m2::detail::SkelAttachments< V >
 The SKA1 payload: the attachments that moved out of the model (external sequences' track data lives in the .anim AFSA chunks). More...
struct  wowlib::formats::m2::SkelParentData
 The SKPD payload: the parent-skeleton link used for de-duplication (e.g. More...
struct  wowlib::formats::m2::SkeletonBase
 The version-agnostic base of every Skeleton<V> (welded as "Skeleton"). More...
struct  wowlib::formats::m2::detail::Skeleton< V >

Namespaces

namespace  wowlib
namespace  wowlib::formats
namespace  wowlib::formats::m2
namespace  wowlib::formats::m2::detail
 A shared model skeleton (.skel, 7.3+): the bones, attachments and sequences a skel-based model moved out of its MD20 image, plus the satellite ids.

Typedefs

template<ClientVersion V>
using wowlib::formats::m2::SkelHeader = detail::SkelHeader<canonicalVersion(V, M2ChunkPayloadPivots, M2ChunkedVersions)>
 The SKL1 payload — canonicalizing face of detail::SkelHeader.
template<ClientVersion V>
using wowlib::formats::m2::SkelSequences = detail::SkelSequences<canonicalVersion(V, M2ChunkPayloadPivots, M2ChunkedVersions)>
 The SKS1 payload — canonicalizing face of detail::SkelSequences.
template<ClientVersion V>
using wowlib::formats::m2::SkelBones = detail::SkelBones<canonicalVersion(V, M2ChunkPayloadPivots, M2ChunkedVersions)>
 The SKB1 payload — canonicalizing face of detail::SkelBones.
template<ClientVersion V>
using wowlib::formats::m2::SkelAttachments = detail::SkelAttachments<canonicalVersion(V, M2ChunkPayloadPivots, M2ChunkedVersions)>
 The SKA1 payload — canonicalizing face of detail::SkelAttachments.
template<ClientVersion V>
using wowlib::formats::m2::Skeleton = detail::Skeleton<canonicalVersion(V, M2ChunkPayloadPivots, M2ChunkedVersions)>
 A shared model skeleton — the canonicalizing face of detail::Skeleton: the whole chunked era is one range (M2ChunkPayloadPivots is empty), so a SINGLE instantiation serves Legion through the latest release.

Detailed Description

The .skel skeleton entity (namespace wowlib::formats::m2), 7.3+: a FIRST-CLASS entity with its own filesystem read/write — skeletons are SHARED between models (SKPD parent links), so an M2 references its skeleton rather than owning it exclusively.

A .skel is a chunked file (forward fourccs): SKL1 identity, SKS1 sequences, SKB1 bones and SKA1 attachments (offset headers into the chunk), SKPD parent link, AFID/BFID satellite ids. SKB1/SKA1 reference external per-sequence track data in the .anim files' AFSB/AFSA chunks, so they travel as verbatim blobs at chunk level and decode into the typed boneBlock/attachmentBlock once the .anim resolution is in hand (read(fs, key) does both).

The SK*1 chunk payload records live here beside the entity: each is a small offset-addressed header whose M2Arrays resolve against the chunk's own payload (padding included), reusing the body's record types.

Definition in file skeleton.hpp.