Currently, we ARE able to splice together custom yanm files by taking parts of other files and inserting them into others via hex to create custom animations for the WWE 2K games. An example of this, was merging Undertaker and Kane's entrance into one for a Brothers of Destruction entrance.
Our hope is to be able to either dump the yanms into an fbx or other readable format to open in MotionBuilder or 3DSmax and edit them, and be able to export them back into the game as a new yamn (which we know is possible via hex editing yanms)
Jakey from 2Kmodz provided the following writeup on the offsets in the yanm files, as well as a few samples to look at. Included is a yobj character model as well. It's openable with an included maxscript.
Samples: https://www39.zippyshare.com/v/wzZ9uUIv/file.htmlYANM format and its complexities:
Offsets 0x00 - 0x03 = YANM string reference
Offsets 0x04 - 0x07 = size of file in 4 bytes, up to POF0 string (eg. 00 00 0F C8). Any offsets in the file start after here.
Offsets 0x08 - 0x09 = Unknown. Havok type? Always 05 00 starting with WWE 2K16, but 04 00 is also accepted.
Offsets 0x0A - 0x0B = Bone count. Last gen (PS3/360) YANMs have a count of 0x3D (61 in decimal). PC is almost always 0x3F (63 in decimal). Removing one disables the last bone in the list.
Depending on the YANM format in use, there will be different size bone information.
For PC/some last gen animations, offset 0x0C is the first bone.
Offsets 0x00 - 0x03 = packed file size. To get the raw size, you take these 4 bytes and multiply them by an integer. Depending on the next few bytes will indicate whether this integer is 0x04, 0x08 or 0x14 (20 in decimal). To get the packed size, you take the raw size and divide by the integer.
Offsets 0x04 - 0x05 = Unknown. These are a set of bytes that factor into the integer you multiply/divide. Here are some of the values used from what I've seen and the integers used that make up the animation of the bone:
02 04 = 0x14
03 04 = 0x08
52 00 = 0x04
53 00 = 0x04
43 00 = 0x08
42 00 = 0x04
41 00 = 0x04 (used in move animations)
40 00 = 0x04 (used in move animations)
23 00 = 0x08
22 00 = 0x08
Offsets 0x06 - 0x07 = Size of bone part up to the next valid bone packed size. This can vary, but usually follows a sequence:
00 10 = used if 41 00 and 40 00 are the two bytes prior
00 18 = used if 22 00, 42 00, or 02 04 are the two bytes prior
00 20 = used if 52 00 are the two bytes prior
00 30 = used if 23 00, 43 00, or 03 04 are the two bytes prior
00 38 = used if 53 00 are the two bytes prior
Offsets 0x08 - 0x0B = Bone. Last gen and PC use different bones. There is a skeletal structure for all of the 63 bones that I can include if requested.
Depending on if this is a move animation or an entrance, this is either the end (signified by the 00 10 earlier) or offsets 0x0C - 0x0F = Length reference 1.
Offsets 0x10 - 0x13 = Size of the previous offset (almost always 00 00 00 02).
Offsets 0x14 - 0x18 = Length reference 2 (the actual data).