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

The M2 entity (namespace wowlib::formats::m2): a whole model with its satellite files baked in, versioned on the client it is laid out for. More...

#include <array>
#include <cstring>
#include <format>
#include <optional>
#include <ranges>
#include <span>
#include <string>
#include <string_view>
#include <vector>
#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/flags.hpp>
#include <wowlib/formats/common/version_slot.hpp>
#include <wowlib/formats/m2/bone/bone.hpp>
#include <wowlib/formats/m2/offset_block.hpp>
#include <wowlib/formats/m2/chunked/chunked.hpp>
#include <wowlib/formats/m2/root/root.hpp>
#include <wowlib/formats/m2/satellites.hpp>
#include <wowlib/formats/m2/skeleton.hpp>
#include <wowlib/formats/m2/skin/skin.hpp>
#include <wowlib/fs/filesystem.hpp>
Include dependency graph for m2.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::M2Base
 The version-agnostic base of every M2<V> (welded as "M2"). More...
struct  wowlib::formats::m2::detail::AssemblySkins< V >
 WotLK+ assembly members: the external .skin LOD views baked in. More...
struct  wowlib::formats::m2::detail::AssemblySkins< V >
struct  wowlib::formats::m2::detail::AssemblyLegion< V >
 legion+ assembly members: the chunk stream and the satellites it references. More...
struct  wowlib::formats::m2::detail::AssemblyLegion< V >
struct  wowlib::formats::m2::detail::M2< V >
 A whole M2 model for one client version: the MD20 body plus every baked-in satellite. More...
struct  wowlib::formats::m2::BoneFile
 One .bone file: which bones get facial-pose offset matrices, and the matrices. More...

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::M2 = detail::M2<canonicalVersion(V, M2AssemblyPivots, M2Versions)>
 A whole model — the canonicalizing face of detail::M2: every client version maps to its range's first grid version (M2AssemblyPivots), so one instantiation serves e.g.
template<ClientVersion V>
using wowlib::formats::m2::Skin
 An external LOD view — the canonicalizing face of detail::Skin: every WotLK+ version maps to its range's first grid version (M2SkinPivots: only Cata's shadow batches split the era, so two instantiations cover all nine releases).

Enumerations

enum class  wowlib::formats::m2::GlobalFlags
 M2Root::globalFlags bits. More...

Functions

template<typename Profile, typename Root>
void wowlib::formats::m2::detail::validateProfileAgainstRoot (const Profile &profile, const Root &root, ValidationReport &report)
 Check one skin profile's references INTO the model body — the half of a skin's contracts that needs both files: the local->global vertex lookup and the lookup-table slices every render batch and submesh addresses.

Variables

constexpr std::uint32_t wowlib::formats::m2::Md20Magic
 The MD20 leading magic, as memcpy'd from disk.
constexpr std::uint32_t wowlib::formats::m2::SkinMagic
 The .skin leading magic, as memcpy'd from disk.

Detailed Description

The M2 entity (namespace wowlib::formats::m2): a whole model with its satellite files baked in, versioned on the client it is laid out for.

The assembly unifies the MD20 body (M2Root) with the external .skin LOD views and re-splits low-priority sequence data back out to .anim files on write (driven by the sequence flags). Pre-WotLK everything is one file; Legion+ adds the chunked wrapper and .skel/.bone/.phys satellites (stage 3).

Definition in file m2.hpp.