Devil May Cry 3 HD Collection · Evidence-first C++20 research

Урок 6 — Animation, motion groups і MOT/CMotion boundary — DMC Rengine

Lesson 6 of 12 in the canonical DMC3 MOD learning path. Understand the recovered motion-group and MOD-side animation-binding boundary while keeping MOT/CMotion as its own authority. The repository Markdown remains the source authority for this educational page.

Lesson 6 scope

How to use lesson 6

Головне розділення

serialized MOD rest-local
!=
runtime evaluated animated-local

MOD не повинен поглинати MOT parser або зберігати animated pose назад у serialized rest transforms.

Motion group

Третя node-domain byte array (+0x08 pointer у domain header) тепер EXE-confirmed як motion-group selector.

Runtime chain:

MOD third-domain
 -> manager +0x18
 -> CMotion third-domain pointer
 -> read by hierarchy order position
 -> map through nodeAtOrderPosition
 -> CMotionJoint +0xF8

Кілька CMotion evaluator/control sites порівнюють joint +0xF8 із requested group id.

em000 corpus

Bound archive:

em000-extract.zip SHA-256 306130125f09824811289366324f4208c3c1aba880c5a7efa3953a88d566d07b.

Census:

Group histogram:

0 -> 132
1 -> 91
2 -> 3

Це доводить multi-group domain, але не дозволяє назвати 0/1/2 «body», «weapon», «upper body» тощо без окремого direct proof.

Default joint

Header +0x13 = MOD default_joint_index.

JntNo parser використовує його як fallback для out-of-range selector. Окремий consumer використовує його для currentWorld[].

Не називай його root без доказу.

Canonical animation binding

analysis/mod/animation_binding робить тільки MOD-owned composition:

MOD hierarchy
+ MOD motion_group
+ caller-provided evaluated animated-local matrices
 -> currentWorld[]
 -> inverseRestWorld * currentWorld
 -> skin palette

AnimationJointBinding містить:

Що навмисно не робить цей module

Правильний майбутній design

MOT parser/evaluator
     |
     v
evaluated animated-local matrices
     |
     v
MOD animation_binding
     |
     v
currentWorld
     |
     v
skin palette

Так ми зберігаємо format boundaries і можемо окремо тестувати MOT та MOD.

Canonical source

This page is a public discovery and readability layer. It does not replace the repository's current implementation, status, evidence or format-specific documentation.

Open canonical GitHub source

Evidence boundary

A parser is not automatically a writer. A successful writer is not automatically equivalent to Capcom's offline tools. Synthetic validation does not establish original-game behavioral equivalence.

Use the current status for promoted capabilities and open proof gates.