8 hours ago8 hr The part I think is actually new is the naming. Every clip is stored under StrCode32(file_name). Hash the names from anim_infos.json, match against the entry list, and 4105 of the 4389 clips get named. The map is in the repo as clip_name_map.json if you just want that.Also confirming field1 of the 16 byte entry is the high 16 bits of StrCode64(file_name):strcode64(run_2_0) = 112525763169308 high 16 bits = 26199 entry field1 = 26199On the channel mapping: ChannelIndex isn't a bone index, it's a track unit, and the .frig maps units to bones. body_skel.frig is 15 units / 27 segments, kind 3 are two bone leg chains, kind 8 are three bone arm chains. sk_shoulder_* and sk_upperarm_* have no channel of their own, they only exist inside the type 8 units, which is why they end up stuck at rest if you map channels to bones one to one.Measured shoulder rotation across a clip to confirm they're being driven:kick_long_4_0_inside_y0_000_punch 267.8 / 311.9 deg gkdeflect_s01_snapunder_0_0_y00 206.5 / 226.1 deg run_2_0 71.3 / 43.6 deg idle 63.8 / 49.3 degTwo things that cost me time: the .mtar header says 21 bones but clips use 20, and frame rate is 10 with keys every 3 to 4 frames, so retiming without resampling gives visible stepping.Doesn't retarget. Output is PES's own skeleton as JSON, mapping it elsewhere is still unsolved on my end.Verified on all 10 body_anime files, 4389 clips, 4105 named, no failures. Standard library only, no game assets in the repo.Format work builds on mrdev's mtar_reader_py37_mrdev.py and the notes in Aoba's thread and Zampax's thread.Link
Create an account or sign in to comment