Author Topic: Decent FF7 Model Viewer  (Read 105685 times)

L. Spiro

  • *
  • Posts: 797
    • View Profile
    • http://www.memoryhacking.com/index.php
Decent FF7 Model Viewer
« Reply #175 on: 2004-09-10 09:21:52 »
They are ripped from memory.
I exported with my own tools, then wrote a script to put the values into code for loading into my program.
Barret looks fine, and it animates perfectly.
It’s just Barret’s normal standing pose.

Unfortunately they are loaded into RAM dynamically and I haven't bothered to track the pointer that points to where they are loaded each time, so after a shut down of the game, I have to find them again.

But I’ve found a lot.  Also some enemies (though I haven't exported those ones) and other characters.
I could probably find Cactuer’s animation.  It would be pretty easy to study.


Also, Block_A and Rec_B always have the same values, as far as I have seen.


L. Spiro

mirex

  • *
  • Posts: 1645
    • View Profile
    • http://mirex.mypage.sk
Decent FF7 Model Viewer
« Reply #176 on: 2004-09-10 10:35:02 »
well thats great, comparing values decoded in memory with file could solve how the animations are stored in the file

i thought that cactuar has only 2 frames (running and running) so there aint much to study

L. Spiro

  • *
  • Posts: 797
    • View Profile
    • http://www.memoryhacking.com/index.php
Decent FF7 Model Viewer
« Reply #177 on: 2004-09-10 11:03:57 »
That’s the point with Cactuer.

A smaller and simpler file should be easier to manage while decoding.


I have revised the animation header format and I will post it later.  Work ends in 30 minutes so I will have time to verify my changes and make the fomat description nice and neat at that time.
Plus after work I have to watch the latest Naruto episode, so in a little over an hour I will post.


L. Spiro

L. Spiro

  • *
  • Posts: 797
    • View Profile
    • http://www.memoryhacking.com/index.php
Decent FF7 Model Viewer
« Reply #178 on: 2004-09-10 12:24:59 »
It’s easiest to see the changes when both are shown together.  Here is the original but I don’t know if mirex keeps a more up-to-date one.

Code: [Select]
struct s_FF7AAanimHdr {
unsigned long rec_a; //0
unsigned long rec_b; //4
unsigned long block_len; //8

unsigned short block_a; //12
unsigned short real_data_len; //14
unsigned short translat[3]; //16
unsigned char u1; //22
} FF7AAanimHdr; //size = 23 bytes



The new one:

Code: [Select]
struct s_FF7AAanimHdr {
unsigned long rec_a; //0
unsigned long frames_1; //4
unsigned long block_len; //8

unsigned short frames_2; //12
unsigned short real_data_len; //14
unsigned char u1; //16
} FF7AAanimHdr; //size = 17 bytes



Both “rec_b” and “block_a” keep the same values in nearly every model I have seen, so I don’t know which is the CORRECT one, but for now they both depict the number of frames in the animation.

I moved u1 from the bottom and put it over the 3 shorts.  Directly after the real data length, there is one byte of unknown information.

I removed the translations because they are actually part of each frame of animation (not just the header).

So, immediately after the “u1” byte, you would see 3 signed shorts, then 36 bits of a rotational offset, also per frame.


The shorts need explanation.  It seems they are stored in reverse format, and AT LEAST the middle one (Y) is inverted.
To decode them, you must reverse their bytes.
Cloud’s file shows 00 00 FE 2E 00 00 for these 6 bytes.
After reversing, this is how it looks:
00 00 -> 0
2E FE -> -466
00 00 -> 0


I posted Barret’s data already so I will show it as well.
From sbda, we get:
00 00
FE 12
FF FF
We reverse each short, and get:
00 00 -> 0
12 FE -> -494
FF FF -> -1

These match the data I posted, however the Y coordinate in each seems to be inverted.  They should be 466 and 494 by the time they hit final state in RAM, so it seems that not only do you reverse the Y short bytes, you then have to subtract it from 0 to get the final result (note that -1 is the correct final result and it seems only the Y needs to be inverted).


The next 36 bits are the first frame’s rotational offsets, decoded the same way as the rest of the rotations.  Changing these values spins the entire model, and each frame has this.


The way this is all stored in RAM:
The first 12 bytes are the rotational offsets.
The next 12 bytes are the translational offsets.
Then each 12 bytes represents the X, Y, and Z of each bone for that frame.
The next frame follows immediately and starts again with the rotational offsets.
The size of each frame in RAM is (iBones * 12 + 24).


I hope all that helps.


L. Spiro

L. Spiro

  • *
  • Posts: 797
    • View Profile
    • http://www.memoryhacking.com/index.php
Decent FF7 Model Viewer
« Reply #179 on: 2004-09-10 13:29:42 »
I may know what the u1 value is also.
It seems to indicate how many rotations to skip before starting to load the model (and after the 3 rotational offsets).

On most models I have noticed it’s 0, but Red XIII’s doesn’t load correctly so I decided to trace his animation.

His animation actually starts 2 rotations (24 bits) later; that is why his first frame is screwed.  And low-and-behold, u1 (in my post; not the old u1) is 2.

Here is Red XII’s first animation data (VERY LONG).


[code]
Frame 0: Rotations/Translations: 0.0f 0.0f 0.0f 0.0f 267.0f 118.0f
Frame 0: Bone 0: < 3.164063f, 0.0f, 0.0f >
Frame 0: Bone 1: < 3.164063f, 0.0f, 0.0f >
Frame 0: Bone 2: < 0.0f, 0.0f, 0.0f >
Frame 0: Bone 3: < 24.25781f, 358.9453f, 0.0f >
Frame 0: Bone 4: < 349.1016f, 1.054688f, 0.3515625f >
Frame 0: Bone 5: < 311.1328f, 279.1406f, 92.46094f >
Frame 0: Bone 6: < 358.2422f, 243.2813f, 206.3672f >
Frame 0: Bone 7: < 354.0234f, 27.07031f, 345.5859f >
Frame 0: Bone 8: < 16.17188f, 356.1328f, 1.054688f >
Frame 0: Bone 9: < 310.7813f, 82.61719f, 267.5391f >
Frame 0: Bone 10: < 0.3515625f, 117.0703f, 153.2813f >
Frame 0: Bone 11: < 354.7266f, 331.875f, 15.11719f >
Frame 0: Bone 12: < 12.65625f, 1.054688f, 358.9453f >
Frame 0: Bone 13: < 10.19531f, 1.054688f, 0.3515625f >
Frame 0: Bone 14: < 0.3515625f, 0.0f, 0.0f >
Frame 0: Bone 15: < 351.9141f, 349.8047f, 335.3906f >
Frame 0: Bone 16: < 72.77344f, 207.0703f, 190.8984f >
Frame 0: Bone 17: < 44.64844f, 21.44531f, 4.921875f >
Frame 0: Bone 18: < 285.4688f, 177.1875f, 183.1641f >
Frame 0: Bone 19: < 357.1875f, 351.2109f, 18.98438f >
Frame 0: Bone 20: < 329.4141f, 0.703125f, 358.9453f >
Frame 0: Bone 21: < 348.0469f, 8.4375f, 24.96094f >
Frame 0: Bone 22: < 86.83594f, 95.27344f, 108.2813f >
Frame 0: Bone 23: < 40.78125f, 339.6094f, 357.1875f >
Frame 0: Bone 24: < 279.4922f, 178.9453f, 181.4063f >
Frame 0: Bone 25: < 358.5938f, 0.3515625f, 348.3984f >
Frame 0: Bone 26: < 343.8281f, 359.6484f, 1.054688f >
Frame 0: Bone 27: < 29.88281f, 254.8828f, 176.4844f >
Frame 0: Bone 28: < 323.0859f, 345.9375f, 98.08594f >
Frame 0: Bone 29: < 76.64063f, 176.8359f, 176.4844f >
Frame 0: Bone 30: < 300.2344f, 180.0f, 180.0f >
Frame 0: Bone 31: < 342.4219f, 10.89844f, 15.82031f >
Frame 0: Bone 32: < 320.2734f, 0.0f, 0.0f >
Frame 0: Bone 33: < 13.35938f, 180.0f, 180.0f >
Frame 0: Bone 34: < 18.63281f, 14.0625f, 4.570313f >
Frame 0: Bone 35: < 14.0625f, 353.3203f, 358.5938f >
Frame 0: Bone 36: < 18.28125f, 358.2422f, 359.2969f >
Frame 0: Bone 37: < 354.0234f, 347.3438f, 1.40625f >
Frame 0: Bone 38: < 350.5078f, 359.6484f, 0.0f >
Frame 0: Bone 39: < 350.8594f, 355.4297f, 0.703125f >
Frame 0: Bone 40: < 29.88281f, 105.1172f, 28.47656f >
Frame 0: Bone 41: < 35.15625f, 356.4844f, 74.53125f >
Frame 0: Bone 42: < 71.36719f, 0.703125f, 0.703125f >
Frame 0: Bone 43: < 299.8828f, 0.0f, 0.0f >
Frame 0: Bone 44: < 312.1875f, 341.0156f, 344.8828f >
Frame 0: Bone 45: < 300.5859f, 0.0f, 0.0f >
Frame 1: Rotations/Translations: 0.0f 0.0f 0.0f 0.0f 266.0f 124.0f
Frame 1: Bone 0: < 3.515625f, 0.0f, 0.0f >
Frame 1: Bone 1: < 2.460938f, 0.0f, 0.0f >
Frame 1: Bone 2: < 0.0f, 0.0f, 0.0f >
Frame 1: Bone 3: < 24.96094f, 357.8906f, 0.0f >
Frame 1: Bone 4: < 348.75f, 1.757813f, 0.703125f >
Frame 1: Bone 5: < 311.4844f, 279.8438f, 93.16406f >
Frame 1: Bone 6: < 358.9453f, 243.6328f, 206.3672f >
Frame 1: Bone 7: < 347.3438f, 27.07031f, 345.5859f >
Frame 1: Bone 8: < 9.84375f, 354.375f, 0.703125f >
Frame 1: Bone 9: < 310.0781f, 84.02344f, 267.1875f >
Frame 1: Bone 10: < 0.3515625f, 117.0703f, 153.2813f >
Frame 1: Bone 11: < 348.3984f, 330.8203f, 15.46875f >
Frame 1: Bone 12: < 8.4375f, 359.6484f, 358.9453f >
Frame 1: Bone 13: < 9.84375f, 2.109375f, 0.703125f >
Frame 1: Bone 14: < 359.6484f, 0.0f, 0.0f >
Frame 1: Bone 15: < 352.2656f, 349.4531f, 335.3906f >
Frame 1: Bone 16: < 73.82813f, 207.0703f, 191.25f >
Frame 1: Bone 17: < 44.64844f, 21.44531f, 4.921875f >
Frame 1: Bone 18: < 285.4688f, 177.1875f, 183.1641f >
Frame 1: Bone 19: < 357.1875f, 350.5078f, 18.63281f >
Frame 1: Bone 20: < 330.8203f, 0.703125f, 358.9453f >
Frame 1: Bone 21: < 348.0469f, 8.4375f, 24.96094f >
Frame 1: Bone 22: < 87.1875f, 78.04688f, 91.05469f >
Frame 1: Bone 23: < 40.42969f, 339.6094f, 357.1875f >
Frame 1: Bone 24: < 278.7891f, 178.5938f, 181.4063f >
Frame 1: Bone 25: < 0.0f, 0.0f, 348.3984f >
Frame 1: Bone 26: < 343.4766f, 359.6484f, 1.054688f >
Frame 1: Bone 27: < 29.88281f, 254.8828f, 176.4844f >
Frame 1: Bone 28: < 323.4375f, 342.0703f, 100.5469f >
Frame 1: Bone 29: < 74.17969f, 177.1875f, 177.1875f >
Frame 1: Bone 30: < 299.8828f, 180.0f, 180.0f >
Frame 1: Bone 31: < 342.0703f, 10.89844f, 15.82031f >
Frame 1: Bone 32: < 319.9219f, 0.0f, 0.0f >
Frame 1: Bone 33: < 13.35938f, 180.0f, 180.0f >
Frame 1: Bone 34: < 17.22656f, 15.46875f, 4.570313f >
Frame 1: Bone 35: < 13.35938f, 351.2109f, 357.8906f >
Frame 1: Bone 36: < 18.63281f, 355.4297f, 358.5938f >
Frame 1: Bone 37: < 355.0781f, 347.3438f, 1.054688f >
Frame 1: Bone 38: < 352.2656f, 2.109375f, 359.6484f >
Frame 1: Bone 39: < 354.375f, 357.8906f, 0.3515625f >
Frame 1: Bone 40: < 29.88281f, 105.4688f, 28.82813f >
Frame 1: Bone 41: < 35.15625f, 355.7813f, 74.17969f >
Frame 1: Bone 42: < 74.17969f, 0.703125f, 0.703125f >
Frame 1: Bone 43: < 293.5547f, 0.0f, 0.0f >
Frame 1: Bone 44: < 314.2969f, 342.7734f, 342.7734f >
Frame 1: Bone 45: < 301.6406f, 0.0f, 0.0f >
Frame 2: Rotations/Translations: 0.0f 0.0f 0.0f 0.0f 265.0f 130.0f
Frame 2: Bone 0: < 3.867188f, 0.0f, 0.0f >
Frame 2: Bone 1: < 1.054688f, 0.0f, 0.0f >
Frame 2: Bone 2: < 0.0f, 0.0f, 0.0f >
Frame 2: Bone 3: < 26.36719f, 356.8359f, 0.0f >
Frame 2: Bone 4: < 348.0469f, 2.8125f, 1.054688f >
Frame 2: Bone 5: < 311.8359f, 280.1953f, 94.21875f >
Frame 2: Bone 6: < 359.6484f, 243.9844f, 206.3672f >
Frame 2: Bone 7: < 343.8281f, 26.71875f, 345.9375f >
Frame 2: Bone 8: < 3.164063f, 352.6172f, 1.054688f >
Frame 2: Bone 9: < 309.7266f, 85.42969f, 266.4844f >
Frame 2: Bone 10: < 1.054688f, 116.7188f, 153.2813f >
Frame 2: Bone 11: < 344.8828f, 330.4688f, 15.46875f >
Frame 2: Bone 12: < 3.515625f, 358.5938f, 358.9453f >
Frame 2: Bone 13: < 9.140625f, 3.164063f, 1.054688f >
Frame 2: Bone 14: < 358.5938f, 0.0f, 0.0f >
Frame 2: Bone 15: < 352.2656f, 349.4531f, 335.3906f >
Frame 2: Bone 16: < 74.88281f, 207.0703f, 191.6016f >
Frame 2: Bone 17: < 44.64844f, 21.44531f, 4.921875f >
Frame 2: Bone 18: < 285.1172f, 177.1875f, 183.1641f >
Frame 2: Bone 19: < 356.8359f, 350.1563f, 18.28125f >
Frame 2: Bone 20: < 332.5781f, 0.3515625f, 358.9453f >
Frame 2: Bone 21: < 348.3984f, 8.789063f, 24.96094f >
Frame 2: Bone 22: < 86.83594f, 58.71094f, 71.71875f >
Frame 2: Bone 23: < 40.07813f, 339.9609f, 357.1875f >
Frame 2: Bone 24: < 277.3828f, 178.5938f, 181.7578f >
Frame 2: Bone 25: < 1.40625f, 0.0f, 348.3984f >
Frame 2: Bone 26: < 342.7734f, 359.6484f, 1.054688f >
Frame 2: Bone 27: < 29.88281f, 254.5313f, 175.7813f >
Frame 2: Bone 28: < 324.1406f, 337.8516f, 103.0078f >
Frame 2: Bone 29: < 71.71875f, 177.5391f, 177.5391f >
Frame 2: Bone 30: < 298.4766f, 180.0f, 180.0f >
Frame 2: Bone 31: < 341.3672f, 10.54688f, 15.82031f >
Frame 2: Bone 32: < 319.5703f, 0.0f, 0.0f >
Frame 2: Bone 33: < 12.65625f, 180.0f, 180.0f >
Frame 2: Bone 34: < 16.875f, 15.46875f, 4.570313f >
Frame 2: Bone 35: < 11.60156f, 350.1563f, 357.8906f >
Frame 2: Bone 36: < 16.875f, 352.9688f, 357.8906f >
Frame 2: Bone 37: < 356.4844f, 348.75f, 0.703125f >
Frame 2: Bone 38: < 354.7266f, 4.570313f, 359.6484f >
Frame 2: Bone 39: < 358.2422f, 0.703125f, 0.0f >
Frame 2: Bone 40: < 29.88281f, 105.4688f, 29.17969f >
Frame 2: Bone 41: < 35.15625f, 355.4297f, 73.82813f >
Frame 2: Bone 42: < 76.28906f, 1.054688f, 1.054688f >
Frame 2: Bone 43: < 286.875f, 0.0f, 0.0f >
Frame 2: Bone 44: < 317.8125f, 344.5313f, 340.3125f >
Frame 2: Bone 45: < 302.6953f, 0.0f, 0.0f >
Frame 3: Rotations/Translations: 0.0f 0.0f 0.0f 0.0f 266.0f 136.0f
Frame 3: Bone 0: < 4.921875f, 0.0f, 0.0f >
Frame 3: Bone 1: < 359.2969f, 0.0f, 0.0f >
Frame 3: Bone 2: < 0.0f, 0.0f, 0.0f >
Frame 3: Bone 3: < 27.77344f, 355.7813f, 0.0f >
Frame 3: Bone 4: < 347.3438f, 3.515625f, 1.40625f >
Frame 3: Bone 5: < 311.8359f, 280.1953f, 95.27344f >
Frame 3: Bone 6: < 0.703125f, 244.3359f, 206.3672f >
Frame 3: Bone 7: < 343.8281f, 24.96094f, 346.2891f >
Frame 3: Bone 8: < 357.1875f, 350.8594f, 1.757813f >
Frame 3: Bone 9: < 309.375f, 87.1875f, 265.4297f >
Frame 3: Bone 10: < 1.40625f, 116.7188f, 153.2813f >
Frame 3: Bone 11: < 344.1797f, 331.1719f, 15.11719f >
Frame 3: Bone 12: < 359.6484f, 357.1875f, 359.2969f >
Frame 3: Bone 13: < 8.4375f, 4.21875f, 1.40625f >
Frame 3: Bone 14: < 357.1875f, 0.0f, 0.0f >
Frame 3: Bone 15: < 352.6172f, 349.4531f, 335.3906f >
Frame 3: Bone 16: < 75.9375f, 207.0703f, 191.6016f >
Frame 3: Bone 17: < 44.64844f, 21.44531f, 4.921875f >
Frame 3: Bone 18: < 284.7656f, 177.1875f, 183.1641f >
Frame 3: Bone 19: < 356.1328f, 349.4531f, 17.92969f >
Frame 3: Bone 20: < 333.9844f, 0.3515625f, 358.9453f >
Frame 3: Bone 21: < 348.75f, 8.789063f, 24.96094f >
Frame 3: Bone 22: < 86.48438f, 42.1875f, 54.84375f >
Frame 3: Bone 23: < 39.375f, 339.9609f, 357.1875f >
Frame 3: Bone 24: < 275.9766f, 177.8906f, 182.1094f >
Frame 3: Bone 25: < 2.460938f, 359.6484f, 348.3984f >
Frame 3: Bone 26: < 342.4219f, 359.6484f, 1.054688f >
Frame 3: Bone 27: < 29.53125f, 254.1797f, 174.7266f >
Frame 3: Bone 28: < 324.4922f, 333.6328f, 105.8203f >
Frame 3: Bone 29: < 69.96094f, 177.8906f, 177.8906f >
Frame 3: Bone 30: < 296.7188f, 180.0f, 180.0f >
Frame 3: Bone 31: < 341.0156f, 10.54688f, 16.17188f >
Frame 3: Bone 32: < 319.2188f, 0.0f, 0.0f >
Frame 3: Bone 33: < 11.95313f, 180.0f, 180.0f >
Frame 3: Bone 34: < 17.92969f, 14.0625f, 4.570313f >
Frame 3: Bone 35: < 8.789063f, 350.1563f, 358.5938f >
Frame 3: Bone 36: < 13.71094f, 351.2109f, 357.8906f >
Frame 3: Bone 37: < 358.2422f, 351.2109f, 0.3515625f >
Frame 3: Bone 38: < 357.5391f, 6.328125f, 359.6484f >
Frame 3: Bone 39: < 2.109375f, 3.515625f, 0.0f >
Frame 3: Bone 40: < 29.53125f, 106.1719f, 30.23438f >
Frame 3: Bone 41: < 35.50781f, 354.7266f, 73.125f >
Frame 3: Bone 42: < 77.69531f, 1.054688f, 1.054688f >
Frame 3: Bone 43: < 280.5469f, 0.0f, 0.0f >
Frame 3: Bone 44: < 321.6797f, 346.2891f, 338.2031f >
Frame 3: Bone 45: < 303.75f, 0.0f, 0.0f >
Frame 4: Rotations/Translations: 0.0f 0.0f 0.0f 0.0f 266.0f 140.0f
Frame 4: Bone 0: < 5.625f, 0.0f, 0.0f >
Frame 4: Bone 1: < 357.1875f, 0.0f, 0.0f >
Frame 4: Bone 2: < 0.0f, 0.0f, 0.0f >
Frame 4: Bone 3: < 29.53125f, 354.7266f, 0.0f >
Frame 4: Bone 4: < 346.6406f, 4.21875f, 1.757813f >
Frame 4: Bone 5: < 312.1875f, 280.1953f, 96.32813f >
Frame 4: Bone 6: < 1.40625f, 244.6875f, 206.3672f >
Frame 4: Bone 7: < 346.2891f, 22.85156f, 346.6406f >
Frame 4: Bone 8: < 353.6719f, 349.1016f, 2.109375f >
Frame 4: Bone 9: < 309.0234f, 88.94531f, 264.0234f >
Frame 4: Bone 10: < 2.109375f, 116.3672f, 153.2813f >
Frame 4: Bone 11: < 345.9375f, 332.5781f, 14.76563f >
Frame 4: Bone 12: < 357.1875f, 356.1328f, 359.6484f >
Frame 4: Bone 13: < 7.734375f, 4.921875f, 1.40625f >
Frame 4: Bone 14: < 356.1328f, 0.0f, 0.0f >
Frame 4: Bone 15: < 352.9688f, 349.1016f, 335.3906f >
Frame 4: Bone 16: < 76.64063f, 207.0703f, 191.6016f >
Frame 4: Bone 17: < 44.64844f, 21.44531f, 4.921875f >
Frame 4: Bone 18: < 283.7109f, 176.8359f, 183.5156f >
Frame 4: Bone 19: < 355.4297f, 348.75f, 17.57813f >
Frame 4: Bone 20: < 335.3906f, 0.3515625f, 358.9453f >
Frame 4: Bone 21: < 349.1016f, 9.140625f, 24.96094f >
Frame 4: Bone 22: < 86.13281f, 30.9375f, 43.59375f >
Frame 4: Bone 23: < 39.02344f, 339.9609f, 357.1875f >
Frame 4: Bone 24: < 274.2188f, 177.1875f, 182.8125f >
Frame 4: Bone 25: < 3.515625f, 359.6484f, 348.75f >
Frame 4: Bone 26: < 341.7188f, 359.6484f, 1.054688f >
Frame 4: Bone 27: < 29.53125f, 253.4766f, 173.6719f >
Frame 4: Bone 28: < 324.8438f, 329.4141f, 108.2813f >
Frame 4: Bone 29: < 68.90625f, 177.8906f, 177.8906f >
Frame 4: Bone 30: < 294.9609f, 180.0f, 180.0f >
Frame 4: Bone 31: < 341.0156f, 10.19531f, 16.52344f >
Frame 4: Bone 32: < 318.8672f, 0.0f, 0.0f >
Frame 4: Bone 33: < 10.89844f, 180.0f, 180.0f >
Frame 4: Bone 34: < 19.6875f, 11.60156f, 3.867188f >
Frame 4: Bone 35: < 4.921875f, 350.8594f, 359.2969f >
Frame 4: Bone 36: < 9.492188f, 350.5078f, 358.5938f >
Frame 4: Bone 37: < 0.3515625f, 354.375f, 0.0f >
Frame 4: Bone 38: < 0.703125f, 7.734375f, 0.0f >
Frame 4: Bone 39: < 5.976563f, 5.976563f, 0.703125f >
Frame 4: Bone 40: < 29.53125f, 106.5234f, 31.28906f >
Frame 4: Bone 41: < 35.85938f, 354.0234f, 72.77344f >
Frame 4: Bone 42: < 78.04688f, 1.054688f, 1.054688f >
Frame 4: Bone 43: < 274.9219f, 0.0f, 0.0f >
Frame 4: Bone 44: < 325.5469f, 347.3438f, 336.4453f >
Frame 4: Bone 45: < 304.1016f, 0.0f, 0.0f >
Frame 5: Rotations/Translations: 0.0f 0.0f 0.0f 0.0f 267.0f 143.0f
Frame 5: Bone 0: < 7.03125f, 0.0f, 0.0f >
Frame 5: Bone 1: < 355.0781f, 0.0f, 0.0f >
Frame 5: Bone 2: < 0.0f, 0.0f, 0.0f >
Frame 5: Bone 3: < 31.64063f, 354.375f, 0.0f >
Frame 5: Bone 4: < 345.9375f, 4.921875f, 1.757813f >
Frame 5: Bone 5: < 312.1875f, 279.4922f, 97.73438f >
Frame 5: Bone 6: < 1.40625f, 244.6875f, 206.3672f >
Frame 5: Bone 7: < 350.1563f, 20.39063f, 346.6406f >
Frame 5: Bone 8: < 355.7813f, 348.0469f, 2.109375f >
Frame 5: Bone 9: < 309.0234f, 90.70313f, 262.6172f >
Frame 5: Bone 10: < 2.460938f, 116.0156f, 153.2813f >
Frame 5: Bone 11: < 349.4531f, 334.3359f, 14.76563f >
Frame 5: Bone 12: < 358.9453f, 355.7813f, 359.2969f >
Frame 5: Bone 13: < 6.679688f, 5.273438f, 1.757813f >
Frame 5: Bone 14: < 355.7813f, 0.0f, 0.0f >
Frame 5: Bone 15: < 353.6719f, 349.1016f, 335.3906f >
Frame 5: Bone 16: < 77.34375f, 206.3672f, 191.25f >
Frame 5: Bone 17: < 44.29688f, 21.09375f, 4.921875f >
Frame 5: Bone 18: < 282.6563f, 176.4844f, 183.8672f >
Frame 5: Bone 19: < 354.375f, 348.3984f, 17.22656f >
Frame 5: Bone 20: < 336.4453f, 0.3515625f, 358.9453f >
Frame 5: Bone 21: < 349.4531f, 9.140625f, 24.96094f >
Frame 5: Bone 22: < 85.78125f, 24.60938f, 36.91406f >
Frame 5: Bone 23: < 38.67188f, 339.9609f, 357.1875f >
Frame 5: Bone 24: < 272.8125f, 175.7813f, 184.5703f >
Frame 5: Bone 25: < 3.867188f, 359.2969f, 348.75f >
Frame 5: Bone 26: < 341.3672f, 359.6484f, 1.054688f >
Frame 5: Bone 27: < 29.17969f, 252.7734f, 172.6172f >
Frame 5: Bone 28: < 325.1953f, 325.8984f, 110.3906f >
Frame 5: Bone 29: < 68.90625f, 177.8906f, 177.8906f >
Frame 5: Bone 30: < 292.8516f, 180.0f, 180.0f >
Frame 5: Bone 31: < 341.0156f, 9.84375f, 16.875f >
Frame 5: Bone 32: < 318.1641f, 0.0f, 0.0f >
Frame 5: Bone 33: < 9.84375f, 180.0f, 180.0f >
Frame 5: Bone 34: < 22.5f, 7.734375f, 2.8125f >
Frame 5: Bone 35: < 0.703125f, 352.6172f, 0.0f >
Frame 5: Bone 36: < 3.867188f, 350.8594f, 359.2969f >
Frame 5: Bone 37: < 2.460938f, 358.2422f, 0.0f >
Frame 5: Bone 38: < 3.867188f, 8.085938f, 0.703125f >
Frame 5: Bone 39: < 9.140625f, 7.734375f, 1.40625f >
Frame 5: Bone 40: < 29.17969f, 107.2266f, 32.34375f >
Frame 5: Bone 41: < 36.21094f, 353.6719f, 72.42188f >
Frame 5: Bone 42: < 76.99219f, 1.054688f, 1.054688f >
Frame 5: Bone 43: < 271.4063f, 0.0f, 0.0f >
Frame 5: Bone 44: < 329.4141f, 348.3984f, 335.3906f >
Frame 5: Bone 45: < 304.4531f, 0.0f, 0.0f >
Frame 6: Rotations/Translations: 0.0f 0.0f 0.0f 0.0f 269.0f 144.0f
Frame 6: Bone 0: < 8.085938f, 0.0f, 0.0f >
Frame 6: Bone 1: < 352.9688f, 0.0f, 0.0f >
Frame 6: Bone 2: < 0.0f, 0.0f, 0.0f >
Frame 6: Bone 3: < 33.75f, 354.0234f, 359.6484f >
Frame 6: Bone 4: < 344.8828f, 4.921875f, 1.757813f >
Frame 6: Bone 5: < 312.1875f, 278.7891f, 99.14063f >
Frame 6: Bone 6: < 0.703125f, 244.3359f, 206.3672f >
Frame 6: Bone 7: < 354.375f, 17.92969f, 346.2891f >
Frame 6: Bone 8: < 2.460938f, 346.2891f, 0.703125f >
Frame 6: Bone 9: < 309.0234f, 91.75781f, 261.2109f >
Frame 6: Bone 10: < 2.109375f, 116.3672f, 153.2813f >
Frame 6: Bone 11: < 353.6719f, 336.0938f, 14.76563f >
Frame 6: Bone 12: < 3.515625f, 355.4297f, 358.9453f >
Frame 6: Bone 13: < 5.976563f, 5.625f, 1.757813f >
Frame 6: Bone 14: < 355.4297f, 0.0f, 0.0f >
Frame 6: Bone 15: < 354.0234f, 348.75f, 335.3906f >
Frame 6: Bone 16: < 77.34375f, 205.6641f, 190.1953f >
Frame 6: Bone 17: < 43.94531f, 21.09375f, 4.921875f >
Frame 6: Bone 18: < 281.25f, 176.1328f, 184.2188f >
Frame 6: Bone 19: < 353.3203f, 348.3984f, 17.22656f >
Frame 6: Bone 20: < 337.1484f, 0.3515625f, 358.9453f >
Frame 6: Bone 21: < 349.8047f, 9.492188f, 24.96094f >
Frame 6: Bone 22: < 85.78125f, 21.79688f, 34.45313f >
Frame 6: Bone 23: < 38.67188f, 339.9609f, 357.1875f >
Frame 6: Bone 24: < 271.0547f, 168.75f, 191.25f >
Frame 6: Bone 25: < 3.515625f, 358.9453f, 349.1016f >
Frame 6: Bone 26: < 340.6641f, 359.6484f, 1.054688f >
Frame 6: Bone 27: < 28.82813f, 252.4219f, 171.2109f >
Frame 6: Bone 28: < 325.1953f, 324.1406f, 111.4453f >
Frame 6: Bone 29: < 70.3125f, 177.8906f, 177.8906f >
Frame 6: Bone 30: < 291.4453f, 180.0f, 180.0f >
Frame 6: Bone 31: < 342.0703f, 9.492188f, 17.57813f >
Frame 6: Bone 32: < 317.1094f, 0.0f, 0.0f >
Frame 6: Bone 33: < 8.4375f, 180.0f, 180.0f >
Frame 6: Bone 34: < 25.66406f, 2.8125f, 1.40625f >
Frame 6: Bone 35: < 356.1328f, 354.7266f, 0.3515625f >
Frame 6: Bone 36: < 358.2422f, 351.9141f, 0.3515625f >
Frame 6: Bone 37: < 4.21875f, 2.460938f, 0.3515625f >
Frame 6: Bone 38: < 6.679688f, 8.085938f, 1.054688f >
Frame 6: Bone 39: < 11.25f, 8.789063f, 1.757813f >
Frame 6: Bone 40: < 28.82813f, 107.9297f, 33.75f >
Frame 6: Bone 41: < 36.5625f, 353.6719f, 72.42188f >
Frame 6: Bone 42: < 74.17969f, 0.703125f, 0.703125f >
Frame 6: Bone 43: < 270.7031f, 0.0f, 0.0f >
Frame 6: Bone 44: < 331.875f, 348.75f, 334.6875f >
Frame 6: Bone 45: < 304.1016f, 0.0f, 0.0f >
Frame 7: Rotations/Translations: 0.0f 0.0f 0.0f 0.0f 274.0f 134.0f
Frame 7: Bone 0: < 10.54688f, 0.0f, 0.0f >
Frame 7: Bone 1: < 349.4531f, 0.0f, 0.0f >
Frame 7: Bone 2: < 0.0f, 0.0f, 0.0f >
Frame 7: Bone 3: < 37.26563f, 355.0781f, 359.2969f >
Frame 7: Bone 4: < 343.125f, 3.867188f, 1.40625f >
Frame 7: Bone 5: < 311.4844f, 275.625f, 101.6016f >
Frame 7: Bone 6: < 358.9453f, 243.6328f, 206.3672f >
Frame 7: Bone 7: < 4.21875f, 13.71094f, 344.1797f >
Frame 7: Bone 8: < 6.328125f, 345.9375f, 0.0f >
Frame 7: Bone 9: < 309.375f, 92.8125f, 258.3984f >
Frame 7: Bone 10: < 1.40625f, 116.7188f, 153.2813f >
Frame 7: Bone 11: < 4.21875f, 339.6094f, 15.46875f >
Frame 7: Bone 12: < 4.921875f, 356.4844f, 358.5938f >
Frame 7: Bone 13: < 4.21875f, 4.21875f, 1.054688f >
Frame 7: Bone 14: < 357.5391f, 0.0f, 0.0f >
Frame 7: Bone 15: < 354.7266f, 348.3984f, 335.3906f >
Frame 7: Bone 16: < 75.9375f, 203.2031f, 187.7344f >
Frame 7: Bone 17: < 42.89063f, 20.74219f, 4.921875f >
Frame 7: Bone 18: < 277.3828f, 173.6719f, 186.3281f >
Frame 7: Bone 19: < 350.8594f, 349.1016f, 17.22656f >
Frame 7: Bone 20: < 335.7422f, 0.3515625f, 358.9453f >
Frame 7: Bone 21: < 350.5078f, 9.84375f, 24.96094f >
Frame 7: Bone 22: < 87.1875f, 35.50781f, 48.16406f >
Frame 7: Bone 23: < 38.67188f, 339.9609f, 357.1875f >
Frame 7: Bone 24: < 271.4063f, 8.085938f, 351.9141f >
Frame 7: Bone 25: < 0.3515625f, 358.9453f, 350.1563f >
Frame 7: Bone 26: < 340.3125f, 359.6484f, 1.054688f >
Frame 7: Bone 27: < 28.125f, 251.0156f, 168.75f >
Frame 7: Bone 28: < 324.1406f, 325.8984f, 109.6875f >
Frame 7: Bone 29: < 77.69531f, 176.4844f, 176.4844f >
Frame 7: Bone 30: < 289.3359f, 180.0f, 180.0f >
Frame 7: Bone 31: < 345.9375f, 8.789063f, 18.63281f >
Frame 7: Bone 32: < 314.6484f, 0.0f, 0.0f >
Frame 7: Bone 33: < 6.328125f, 180.0f, 180.0f >
Frame 7: Bone 34: < 27.07031f, 357.8906f, 358.9453f >
Frame 7: Bone 35: < 352.2656f, 357.5391f, 0.3515625f >
Frame 7: Bone 36: < 352.6172f, 353.3203f, 1.054688f >
Frame 7: Bone 37: < 5.625f, 5.976563f, 0.703125f >
Frame 7: Bone 38: < 8.789063f, 7.03125f, 1.054688f >
Frame 7: Bone 39: < 12.65625f, 9.140625f, 2.109375f >
Frame 7: Bone 40: < 28.125f, 108.9844f, 36.21094f >
Frame 7: Bone 41: < 37.26563f, 354.0234f, 72.42188f >
Frame 7: Bone 42: < 63.98438f, 0.3515625f, 0.703125f >
Frame 7: Bone 43: < 279.4922f, 0.0f, 0.0f >
Frame 7: Bone 44: < 332.9297f, 348.3984f, 335.0391f >
Frame 7: Bone 45: < 301.6406f, 0.0f, 0.0f >
Frame 8: Rotations/Translations: 0.0f 0.0f 0.0f 0.0f 281.0f 117.0f
Frame 8: Bone 0: < 13.35938f, 0.0f, 0.0f >
Frame 8: Bone 1: < 345.2344f, 0.0f, 0.0f >
Frame 8: Bone 2: < 0.0f, 0.0f, 0.0f >
Frame 8: Bone 3: < 42.1875f, 357.5391f, 359.2969f >
Frame 8: Bone 4: < 340.6641f, 1.757813f, 0.3515625f >
Frame 8: Bone 5: < 310.7813f, 270.7031f, 105.1172f >
Frame 8: Bone 6: < 358.2422f, 243.2813f, 206.3672f >
Frame 8: Bone 7: < 16.17188f, 9.140625f, 340.6641f >
Frame 8: Bone 8: < 2.8125f, 348.3984f, 0.703125f >
Frame 8: Bone 9: < 310.0781f, 93.51563f, 254.8828f >
Frame 8: Bone 10: < 0.3515625f, 117.0703f, 153.2813f >
Frame 8: Bone 11: < 17.22656f, 343.8281f, 17.57813f >
Frame 8: Bone 12: < 0.3515625f, 359.6484f, 359.2969f >
Frame 8: Bone 13: < 1.757813f, 2.109375f, 0.3515625f >
Frame 8: Bone 14: < 1.40625f, 0.0f, 0.0f >
Frame 8: Bone 15: < 355.4297f, 348.0469f, 335.3906f >
Frame 8: Bone 16: < 73.125f, 200.7422f, 184.9219f >
Frame 8: Bone 17: < 40.78125f, 20.03906f, 4.921875f >
Frame 8: Bone 18: < 272.1094f, 155.3906f, 204.6094f >
Frame 8: Bone 19: < 347.6953f, 350.5078f, 17.57813f >
Frame 8: Bone 20: < 332.5781f, 0.3515625f, 358.9453f >
Frame 8: Bone 21: < 351.5625f, 10.19531f, 24.60938f >
Frame 8: Bone 22: < 87.89063f, 107.5781f, 120.9375f >
Frame 8: Bone 23: < 38.67188f, 339.9609f, 357.1875f >
Frame 8: Bone 24: < 274.5703f, 2.8125f, 357.5391f >
Frame 8: Bone 25: < 354.7266f, 358.2422f, 351.5625f >
Frame 8: Bone 26: < 339.6094f, 359.6484f, 1.054688f >
Frame 8: Bone 27: < 27.07031f, 249.6094f, 165.5859f >
Frame 8: Bone 28: < 322.0313f, 331.1719f, 105.4688f >
Frame 8: Bone 29: < 88.94531f, 53.4375f, 53.4375f >
Frame 8: Bone 30: < 286.875f, 180.0f, 180.0f >
Frame 8: Bone 31: < 351.9141f, 8.4375f, 20.39063f >
Frame 8: Bone 32: < 311.4844f, 0.0f, 0.0f >
Frame 8: Bone 33: < 3.164063f, 180.0f, 180.0f >
Frame 8: Bone 34: < 26.71875f, 352.6172f, 356.8359f >
Frame 8: Bone 35: < 349.1016f, 0.703125f, 0.0f >
Frame 8: Bone 36: < 347.6953f, 355.7813f, 1.054688f >
Frame 8: Bone 37: < 6.328125f, 9.492188f, 1.054688f >
Frame 8: Bone 38: < 10.19531f, 5.273438f, 1.054688f >
Frame 8: Bone 39: < 12.65625f, 8.4375f, 1.757813f >
Frame 8: Bone 40: < 27.07031f, 110.3906f, 39.375f >
Frame 8: Bone 41: < 38.67188f, 355.0781f, 73.125f >
Frame 8: Bone 42: < 47.10938f, 0.3515625f, 0.3515625f >
Frame 8: Bone 43: < 297.0703f, 0.0f, 0.0f >
Frame 8: Bone 44: < 332.2266f, 346.9922f, 336.4453f >
Frame 8: Bone 45: < 297.0703f, 0.0f, 0.0f >
Frame 9: Rotations/Translations: 0.0f 0.0f 0.0f 0.0f 286.0f 103.0f
Frame 9: Bone 0: < 15.82031f, 0.0f, 0.0f >
Frame 9: Bone 1: < 342.4219f, 0.0f, 0.0f >
Frame 9: Bone 2: < 0.0f, 0.0f, 0.0f >
Frame 9: Bone 3: < 44.29688f, 0.0f, 0.0f >
Frame 9: Bone 4: < 339.6094f, 0.0f, 0.0f >
Frame 9: Bone 5: < 310.4297f, 267.1875f, 106.875f >
Frame 9: Bone 6: < 358.2422f, 243.2813f, 206.3672f >
Frame 9: Bone 7: < 22.5f, 8.4375f, 339.2578f >
Frame 9: Bone 8: < 355.4297f, 352.2656f, 1.757813f >
Frame 9: Bone 9: < 310.4297f, 92.8125f, 253.125f >
Frame 9: Bone 10: < 0.3515625f, 117.0703f, 153.2813f >
Frame 9: Bone 11: < 22.85156f, 345.9375f, 18.98438f >
Frame 9: Bone 12: < 352.9688f, 3.164063f, 359.2969f >
Frame 9: Bone 13: < 0.703125f, 0.0f, 0.0f >
Frame 9: Bone 14: < 3.515625f, 0.0f, 0.0f >
Frame 9: Bone 15: < 356.1328f, 347.6953f, 335.3906f >
Frame 9: Bone 16: < 71.01563f, 199.6875f, 183.8672f >
Frame 9: Bone 17: < 39.72656f, 19.6875f, 4.921875f >
Frame 9: Bone 18: < 272.1094f, 24.60938f, 335.3906f >
Frame 9: Bone 19: < 345.2344f, 351.5625f, 17.92969f >
Frame 9: Bone 20: < 330.4688f, 0.703125f, 358.9453f >
Frame 9: Bone 21: < 351.9141f, 10.54688f, 24.60938f >
Frame 9: Bone 22: < 86.48438f, 140.625f, 153.9844f >
Frame 9: Bone 23: < 39.375f, 339.6094f, 357.1875f >
Frame 9: Bone 24: < 275.625f, 2.109375f, 357.8906f >
Frame 9: Bone 25: < 350.8594f, 357.5391f, 352.6172f >
Frame 9: Bone 26: < 339.2578f, 359.6484f, 1.054688f >
Frame 9: Bone 27: < 26.01563f, 248.5547f, 163.125f >
Frame 9: Bone 28: < 320.625f, 335.7422f, 102.3047f >
Frame 9: Bone 29: < 79.80469f, 4.21875f, 4.570313f >
Frame 9: Bone 30: < 284.7656f, 180.0f, 180.0f >
Frame 9: Bone 31: < 355.0781f, 8.085938f, 21.09375f >
Frame 9: Bone 32: < 310.0781f, 0.0f, 0.0f >
Frame 9: Bone 33: < 1.054688f, 180.0f, 180.0f >
Frame 9: Bone 34: < 26.71875f, 348.3984f, 354.7266f >
Frame 9: Bone 35: < 346.6406f, 3.867188f, 359.2969f >
Frame 9: Bone 36: < 344.1797f, 358.5938f, 0.3515625f >
Frame 9: Bone 37: < 6.679688f, 11.60156f, 1.40625f >
Frame 9: Bone 38: < 10.54688f, 3.164063f, 0.703125f >
Frame 9: Bone 39: < 11.60156f, 7.03125f, 1.40625f >
Frame 9: Bone 40: < 26.01563f, 111.4453f, 41.83594f >
Frame 9: Bone 41: < 39.72656f, 356.1328f, 73.82813f >
Frame 9: Bone 42: < 34.10156f, 0.3515625f, 0.3515625f >
Frame 9: Bone 43: < 311.1328f, 0.0f, 0.0f >
Frame 9: Bone 44: < 331.5234f, 345.9375f, 337.5f >
Frame 9: Bone 45: < 293.5547f, 0.0f, 0.0f >
Frame 10: Rotations/Translations: 0.0f 0.0f 0.0f 0.0f 288.0f 96.0f
Frame 10: Bone 0: < 16.52344f, 0.0f, 0.0f >
Frame 10: Bone 1: < 342.4219f, 0.0f, 0.0f >
Frame 10: Bone 2: < 0.0f, 0.0f, 0.0f >
Frame 10: Bone 3: < 43.24219f, 2.109375f, 0.703125f >
Frame 10: Bone 4: < 340.3125f, 358.5938f, 0.0f >
Frame 10: Bone 5: < 310.4297f, 266.4844f, 106.1719f >
Frame 10: Bone 6: < 358.5938f, 243.6328f, 206.3672f >
Frame 10: Bone 7: < 18.98438f, 13.35938f, 341.7188f >
Frame 10: Bone 8: < 346.9922f, 355.7813f, 1.40625f >
Frame 10: Bone 9: < 310.4297f, 90.35156f, 254.1797f >
Frame 10: Bone 10: < 0.703125f, 117.0703f, 153.2813f >
Frame 10: Bone 11: < 17.92969f, 344.5313f, 17.92969f >
Frame 10: Bone 12: < 346.6406f, 6.679688f, 358.5938f >
Frame 10: Bone 13: < 1.40625f, 358.2422f, 0.0f >
Frame 10: Bone 14: < 3.164063f, 0.0f, 0.0f >
Frame 10: Bone 15: < 355.7813f, 348.0469f, 335.3906f >
Frame 10: Bone 16: < 69.96094f, 200.0391f, 183.8672f >
Frame 10: Bone 17: < 40.07813f, 19.6875f, 4.921875f >
Frame 10: Bone 18: < 272.1094f, 21.44531f, 338.5547f >
Frame 10: Bone 19: < 344.5313f, 351.9141f, 18.28125f >
Frame 10: Bone 20: < 329.0625f, 0.703125f, 358.9453f >
Frame 10: Bone 21: < 351.5625f, 10.19531f, 24.60938f >
Frame 10: Bone 22: < 85.78125f, 144.1406f, 157.8516f >
Frame 10: Bone 23: < 40.42969f, 339.6094f, 357.1875f >
Frame 10: Bone 24: < 274.5703f, 2.8125f, 357.5391f >
Frame 10: Bone 25: < 349.4531f, 357.1875f, 352.2656f >
Frame 10: Bone 26: < 339.6094f, 359.6484f, 1.054688f >
Frame 10: Bone 27: < 26.01563f, 248.2031f, 162.4219f >
Frame 10: Bone 28: < 320.2734f, 338.2031f, 100.5469f >
Frame 10: Bone 29: < 75.9375f, 3.164063f, 3.164063f >
Frame 10: Bone 30: < 283.0078f, 180.0f, 180.0f >
Frame 10: Bone 31: < 353.6719f, 7.734375f, 21.44531f >
Frame 10: Bone 32: < 310.7813f, 0.0f, 0.0f >
Frame 10: Bone 33: < 0.3515625f, 180.0f, 180.0f >
Frame 10: Bone 34: < 28.125f, 345.2344f, 352.9688f >
Frame 10: Bone 35: < 345.9375f, 6.328125f, 358.5938f >
Frame 10: Bone 36: < 341.7188f, 1.757813f, 359.6484f >
Frame 10: Bone 37: < 6.328125f, 12.65625f, 1.40625f >
Frame 10: Bone 38: < 9.84375f, 0.703125f, 0.0f >
Frame 10: Bone 39: < 9.140625f, 4.921875f, 0.703125f >
Frame 10: Bone 40: < 26.01563f, 111.7969f, 42.53906f >
Frame 10: Bone 41: < 40.07813f, 357.1875f, 74.17969f >
Frame 10: Bone 42: < 28.125f, 0.0f, 0.3515625f >
Frame 10: Bone 43: < 318.1641f, 0.0f, 0.0f >
Frame 10: Bone 44: < 331.5234f, 344.5313f, 338.5547f >
Frame 10: Bone 45: < 291.0938f, 0.0f, 0.0f >
Frame 11: Rotations/Translations: 0.0f 0.0f 0.0f 0.0f 289.0f 90.0f
Frame 11: Bone 0: < 16.875f, 0.0f, 0.0f >
Frame 11: Bone 1: < 343.4766f, 0.0f, 0.0f >
Frame 11: Bone 2: < 0.0f, 0.0f, 0.0f >
Frame 11: Bone 3: < 40.07813f, 4.21875f, 1.40625f >
Frame 11: Bone 4: < 341.7188f, 356.8359f, 359.6484f >
Frame 11: Bone 5: < 310.0781f, 266.4844f, 103.7109f >
Frame 11: Bone 6: < 359.2969f, 243.9844f, 206.3672f >
Frame 11: Bone 7: < 10.19531f, 21.09375f, 344.5313f >
Frame 11: Bone 8: < 337.8516f, 0.3515625f, 0.0f >
Frame 11: Bone 9: < 310.7813f, 86.83594f, 256.2891f >
Frame 11: Bone 10: < 1.40625f, 116.7188f, 153.2813f >
Frame 11: Bone 11: < 8.085938f, 341.7188f, 16.17188f >
Frame 11: Bone 12: < 339.9609f, 10.89844f, 356.4844f >
Frame 11: Bone 13: < 2.8125f, 356.4844f, 359.6484f >
Frame 11: Bone 14: < 1.757813f, 0.0f, 0.0f >
Frame 11: Bone 15: < 355.0781f, 348.0469f, 335.3906f >
Frame 11: Bone 16: < 69.60938f, 200.7422f, 184.5703f >
Frame 11: Bone 17: < 41.13281f, 20.39063f, 4.921875f >
Frame 11: Bone 18: < 271.4063f, 40.42969f, 319.5703f >
Frame 11: Bone 19: < 344.8828f, 351.9141f, 18.63281f >
Frame 11: Bone 20: < 328.0078f, 0.703125f, 358.9453f >
Frame 11: Bone 21: < 351.2109f, 9.84375f, 24.96094f >
Frame 11: Bone 22: < 85.07813f, 143.4375f, 156.7969f >
Frame 11: Bone 23: < 41.83594f, 339.6094f, 357.1875f >
Frame 11: Bone 24: < 272.1094f, 5.976563f, 354.375f >
Frame 11: Bone 25: < 349.4531f, 356.8359f, 351.2109f >
Frame 11: Bone 26: < 339.9609f, 359.6484f, 1.054688f >
Frame 11: Bone 27: < 25.66406f, 248.2031f, 162.0703f >
Frame 11: Bone 28: < 319.9219f, 339.9609f, 99.84375f >
Frame 11: Bone 29: < 73.82813f, 2.8125f, 2.8125f >
Frame 11: Bone 30: < 280.8984f, 180.0f, 180.0f >
Frame 11: Bone 31: < 349.8047f, 6.679688f, 21.44531f >
Frame 11: Bone 32: < 313.2422f, 0.0f, 0.0f >
Frame 11: Bone 33: < 0.0f, 180.0f, 180.0f >
Frame 11: Bone 34: < 28.82813f, 343.125f, 351.5625f >
Frame 11: Bone 35: < 346.2891f, 8.4375f, 357.8906f >
Frame 11: Bone 36: < 341.3672f, 4.570313f, 358.5938f >
Frame 11: Bone 37: < 5.273438f, 12.65625f, 1.054688f >
Frame 11: Bone 38: < 8.085938f, 358.2422f, 359.6484f >
Frame 11: Bone 39: < 5.976563f, 2.109375f, 0.3515625f >
Frame 11: Bone 40: < 25.66406f, 112.1484f, 42.89063f >
Frame 11: Bone 41: < 40.42969f, 358.2422f, 74.88281f >
Frame 11: Bone 42: < 24.25781f, 0.0f, 0.3515625f >
Frame 11: Bone 43: < 323.0859f, 0.0f, 0.0f >
Frame 11: Bone 44: < 331.5234f, 343.4766f, 339.6094f >
Frame 11: Bone 45: < 288.6328f, 0.0f, 0.0f >
Frame 12: Rotations/Translations: 0.0f 0.0f 0.0f 0.0f 288.0f 88.0f
Frame 12: Bone 0: < 16.52344f, 0.0f, 0.0f >
Frame 12: Bone 1: < 345.2344f, 0.0f, 0.0f >
Frame 12: Bone 2: < 0.0f, 0.0f, 0.0f >
Frame 12: Bone 3: < 36.5625f, 5.625f, 1.757813f >
Frame 12: Bone 4: < 343.4766f, 355.4297f, 359.6484f >
Frame 12: Bone 5: < 310.0781f, 267.1875f, 101.25f >
Frame 12: Bone 6: < 0.3515625f, 244.3359f, 206.3672f >
Frame 12: Bone 7: < 0.703125f, 28.125f, 345.5859f >
Frame 12: Bone 8: < 329.7656f, 4.570313f, 357.5391f >
Frame 12: Bone 9: < 310.7813f, 83.67188f, 259.1016f >
Frame 12: Bone 10: < 1.757813f, 116.3672f, 153.2813f >
Frame 12: Bone 11: < 357.8906f, 338.5547f, 15.11719f >
Frame 12: Bone 12: < 335.3906f, 15.11719f, 354.375f >
Frame 12: Bone 13: < 4.570313f, 355.0781f, 359.6484f >
Frame 12: Bone 14: < 0.0f, 0.0f, 0.0f >
Frame 12: Bone 15: < 354.375f, 348.3984f, 335.3906f >
Frame 12: Bone 16: < 69.60938f, 201.7969f, 185.2734f >
Frame 12: Bone 17: < 42.1875f, 20.74219f, 4.921875f >
Frame 12: Bone 18: < 271.0547f, 137.4609f, 222.5391f >
Frame 12: Bone 19: < 345.2344f, 351.9141f, 18.98438f >
Frame 12: Bone 20: < 326.9531f, 0.703125f, 358.9453f >
Frame 12: Bone 21: < 350.5078f, 9.492188f, 24.96094f >
Frame 12: Bone 22: < 85.07813f, 140.625f, 154.3359f >
Frame 12: Bone 23: < 42.89063f, 339.6094f, 356.8359f >
Frame 12: Bone 24: < 270.7031f, 164.5313f, 195.4688f >
Frame 12: Bone 25: < 349.8047f, 356.8359f, 349.8047f >
Frame 12: Bone 26: < 340.3125f, 359.6484f, 1.054688f >
Frame 12: Bone 27: < 25.66406f, 248.2031f, 162.4219f >
Frame 12: Bone 28: < 319.5703f, 341.0156f, 99.14063f >
Frame 12: Bone 29: < 73.47656f, 2.8125f, 2.8125f >
Frame 12: Bone 30: < 279.8438f, 180.0f, 180.0f >
Frame 12: Bone 31: < 345.9375f, 5.976563f, 21.09375f >
Frame 12: Bone 32: < 315.7031f, 0.0f, 0.0f >
Frame 12: Bone 33: < 0.0f, 180.0f, 180.0f >
Frame 12: Bone 34: < 29.53125f, 342.7734f, 351.5625f >
Frame 12: Bone 35: < 348.0469f, 9.84375f, 357.8906f >
Frame 12: Bone 36: < 342.7734f, 7.03125f, 357.8906f >
Frame 12: Bone 37: < 3.867188f, 11.60156f, 0.703125f >
Frame 12: Bone 38: < 5.625f, 355.7813f, 359.6484f >
Frame 12: Bone 39: < 2.109375f, 359.6484f, 0.0f >
Frame 12: Bone 40: < 25.66406f, 111.7969f, 42.53906f >
Frame 12: Bone 41: < 40.42969f, 358.9453f, 75.58594f >
Frame 12: Bone 42: < 23.20313f, 0.0f, 0.3515625f >
Frame 12: Bone 43: < 325.8984f, 0.0f, 0.0f >
Frame 12: Bone 44: < 330.8203f, 342.4219f, 340.6641f >
Frame 12: Bone 45: < 287.2266f, 0.0f, 0.0f >
Frame 13: Rotations/Translations: 0.0f 0.0f 0.0f 0.0f 286.0f 87.0f
Frame 13: Bone 0: < 15.82031f, 0.0f, 0.0f >
Frame 13: Bone 1: < 346.9922f, 0.0f, 0.0f >
Frame 13: Bone 2: < 0.0f, 0.0f, 0.0f >
Frame 13: Bone 3: < 33.39844f, 6.328125f, 1.40625f >
Frame 13: Bone 4: < 344.8828f, 354.7266f, 359.2969f >
Frame 13: Bone 5: < 310.0781f, 267.8906f, 99.14063f >
Frame 13: Bone 6: < 1.054688f, 244.6875f, 206.3672f >
Frame 13: Bone 7: < 354.375f, 32.34375f, 344.8828f >
Frame 13: Bone 8: < 325.8984f, 7.03125f, 355.4297f >
Frame 13: Bone 9: < 311.1328f, 81.5625f, 260.8594f >
Frame 13: Bone 10: < 2.109375f, 116.0156f, 153.2813f >
Frame 13: Bone 11: < 351.5625f, 336.7969f, 14.41406f >
Frame 13: Bone 12: < 333.6328f, 16.875f, 352.9688f >
Frame 13: Bone 13: < 5.976563f, 354.7266f, 359.2969f >
Frame 13: Bone 14: < 358.9453f, 0.0f, 0.0f >
Frame 13: Bone 15: < 354.0234f, 348.75f, 335.3906f >
Frame 13: Bone 16: < 69.60938f, 202.5f, 186.3281f >
Frame 13: Bone 17: < 42.89063f, 21.09375f, 4.921875f >
Frame 13: Bone 18: < 272.8125f, 163.8281f, 196.5234f >
Frame 13: Bone 19: < 346.2891f, 351.9141f, 19.33594f >
Frame 13: Bone 20: < 326.6016f, 0.703125f, 358.9453f >
Frame 13: Bone 21: < 349.8047f, 9.492188f, 24.96094f >
Frame 13: Bone 22: < 85.07813f, 138.1641f, 151.875f >
Frame 13: Bone 23: < 43.59375f, 339.6094f, 356.8359f >
Frame 13: Bone 24: < 272.8125f, 176.1328f, 184.2188f >
Frame 13: Bone 25: < 350.5078f, 356.8359f, 349.1016f >
Frame 13: Bone 26: < 340.6641f, 359.6484f, 1.054688f >
Frame 13: Bone 27: < 26.01563f, 248.5547f, 163.125f >
Frame 13: Bone 28: < 319.9219f, 342.4219f, 98.4375f >
Frame 13: Bone 29: < 74.53125f, 2.8125f, 2.8125f >
Frame 13: Bone 30: < 280.1953f, 180.0f, 180.0f >
Frame 13: Bone 31: < 343.125f, 5.625f, 20.74219f >
Frame 13: Bone 32: < 317.4609f, 0.0f, 0.0f >
Frame 13: Bone 33: < 1.054688f, 180.0f, 180.0f >
Frame 13: Bone 34: < 29.53125f, 344.5313f, 352.2656f >
Frame 13: Bone 35: < 350.8594f, 10.19531f, 358.5938f >
Frame 13: Bone 36: < 345.9375f, 8.789063f, 357.8906f >
Frame 13: Bone 37: < 2.109375f, 9.140625f, 0.3515625f >
Frame 13: Bone 38: < 2.8125f, 354.0234f, 359.6484f >
Frame 13: Bone 39: < 358.2422f, 356.8359f, 0.0f >
Frame 13: Bone 40: < 26.01563f, 111.4453f, 41.83594f >
Frame 13: Bone 41: < 40.07813f, 359.2969f, 75.9375f >
Frame 13: Bone 42: < 24.96094f, 0.0f, 0.3515625f >
Frame 13: Bone 43: < 326.6016f, 0.0f, 0.0f >
Frame 13: Bone 44: < 329.4141f, 341.7188f, 341.3672f >
Frame 13: Bone 45: < 287.2266f, 0.0f, 0.0f >
Frame 14: Rotations/Translations: 0.0f 0.0f 0.0f 0.0f 284.0f 89.0f
Frame 14: Bone 0: < 14.0625f, 0.0f, 0.0f >
Frame 14: Bone 1: < 349.8047f, 0.0f, 0.0f >
Frame 14: Bone 2: < 0.0f, 0.0f, 0.0f >
Frame 14: Bone 3: < 31.28906f, 5.976563f, 1.054688f >
Frame 14: Bone 4: < 345.9375f, 355.0781f, 359.2969f >
Frame 14: Bone 5: < 310.0781f, 269.6484f, 97.38281f >
Frame 14: Bone 6: < 1.40625f, 244.6875f, 206.3672f >
Frame 14: Bone 7: < 352.2656f, 33.39844f, 344.5313f >
Frame 14: Bone 8: < 326.25f, 7.03125f, 355.7813f >
Frame 14: Bone 9: < 311.1328f, 80.50781f, 262.2656f >
Frame 14: Bone 10: < 2.460938f, 116.0156f, 153.2813f >
Frame 14: Bone 11: < 350.1563f, 335.3906f, 14.41406f >
Frame 14: Bone 12: < 336.4453f, 15.46875f, 354.0234f >
Frame 14: Bone 13: < 6.679688f, 354.7266f, 359.2969f >
Frame 14: Bone 14: < 358.9453f, 0.0f, 0.0f >
Frame 14: Bone 15: < 353.6719f, 349.1016f, 335.3906f >
Frame 14: Bone 16: < 69.96094f, 203.2031f, 187.0313f >
Frame 14: Bone 17: < 43.24219f, 21.09375f, 4.921875f >
Frame 14: Bone 18: < 274.9219f, 170.5078f, 189.8438f >
Frame 14: Bone 19: < 347.6953f, 351.9141f, 19.33594f >
Frame 14: Bone 20: < 326.6016f, 0.703125f, 358.9453f >
Frame 14: Bone 21: < 349.4531f, 9.140625f, 24.96094f >
Frame 14: Bone 22: < 85.07813f, 135.3516f, 148.7109f >
Frame 14: Bone 23: < 43.59375f, 339.6094f, 356.8359f >
Frame 14: Bone 24: < 274.5703f, 177.5391f, 182.8125f >
Frame 14: Bone 25: < 351.5625f, 357.1875f, 348.75f >
Frame 14: Bone 26: < 341.3672f, 359.6484f, 1.054688f >
Frame 14: Bone 27: < 26.71875f, 249.2578f, 164.8828f >
Frame 14: Bone 28: < 320.2734f, 343.8281f, 97.73438f >
Frame 14: Bone 29: < 77.69531f, 3.515625f, 3.515625f >
Frame 14: Bone 30: < 282.6563f, 180.0f, 180.0f >
Frame 14: Bone 31: < 342.4219f, 5.976563f, 20.39063f >
Frame 14: Bone 32: < 318.1641f, 0.0f, 0.0f >
Frame 14: Bone 33: < 2.8125f, 180.0f, 180.0f >
Frame 14: Bone 34: < 29.17969f, 347.3438f, 353.6719f >
Frame 14: Bone 35: < 354.7266f, 9.140625f, 359.2969f >
Frame 14: Bone 36: < 350.5078f, 9.492188f, 358.5938f >
Frame 14: Bone 37: < 0.0f, 5.976563f, 0.0f >
Frame 14: Bone 38: < 359.6484f, 352.6172f, 0.0f >
Frame 14: Bone 39: < 354.375f, 354.375f, 0.703125f >
Frame 14: Bone 40: < 26.71875f, 110.7422f, 40.07813f >
Frame 14: Bone 41: < 39.375f, 359.2969f, 75.9375f >
Frame 14: Bone 42: < 29.88281f, 0.0f, 0.3515625f >
Frame 14: Bone 43: < 325.1953f, 0.0f, 0.0f >
Frame 14: Bone 44: < 326.6016f, 341.0156f, 342.4219f >
Frame 14: Bone 45: < 288.2813f, 0.0f, 0.0f >
Frame 15: Rotations/Translations: 0.0f 0.0f 0.0f 0.0f 280.0f 93.0f
Frame 15: Bone 0: < 11.60156f, 0.0f, 0.0f >
Frame 15: Bone 1: < 352.9688f, 0.0f, 0.0f >
Frame 15: Bone 2: < 0.0f, 0.0f, 0.0f >
Frame 15: Bone 3: < 29.17969f, 4.921875f, 0.703125f >
Frame 15: Bone 4: < 346.6406f, 355.7813f, 359.2969f >
Frame 15: Bone 5: < 310.0781f, 271.4063f, 95.97656f >
Frame 15: Bone 6: < 1.40625f, 244.6875f, 206.3672f >
Frame 15: Bone 7: < 351.9141f, 33.39844f, 344.5313f >
Frame 15: Bone 8: < 331.1719f, 5.273438f, 357.1875f >
Frame 15: Bone 9: < 311.1328f, 80.15625f, 264.0234f >
Frame 15: Bone 10: < 2.109375f, 116.3672f, 153.2813f >
Frame 15: Bone 11: < 350.5078f, 334.3359f, 14.76563f >
Frame 15: Bone 12: < 349.4531f, 12.65625f, 357.5391f >
Frame 15: Bone 13: < 7.734375f, 355.4297f, 359.2969f >
Frame 15: Bone 14: < 359.2969f, 0.0f, 0.0f >
Frame 15: Bone 15: < 352.9688f, 349.1016f, 335.3906f >
Frame 15: Bone 16: < 70.3125f, 204.2578f, 187.7344f >
Frame 15: Bone 17: < 43.59375f, 21.09375f, 4.921875f >
Frame 15: Bone 18: < 277.0313f, 173.6719f, 186.3281f >
Frame 15: Bone 19: < 349.8047f, 351.9141f, 19.6875f >
Frame 15: Bone 20: < 326.6016f, 0.703125f, 358.9453f >
Frame 15: Bone 21: < 349.1016f, 9.140625f, 24.96094f >
Frame 15: Bone 22: < 85.42969f, 131.4844f, 145.1953f >
Frame 15: Bone 23: < 43.24219f, 339.6094f, 356.8359f >
Frame 15: Bone 24: < 276.3281f, 178.2422f, 182.1094f >
Frame 15: Bone 25: < 352.6172f, 357.8906f, 348.3984f >
Frame 15: Bone 26: < 342.0703f, 359.6484f, 1.054688f >
Frame 15: Bone 27: < 27.42188f, 250.3125f, 167.3438f >
Frame 15: Bone 28: < 320.625f, 345.5859f, 97.03125f >
Frame 15: Bone 29: < 81.91406f, 5.625f, 5.625f >
Frame 15: Bone 30: < 286.1719f, 180.0f, 180.0f >
Frame 15: Bone 31: < 342.0703f, 7.03125f, 19.33594f >
Frame 15: Bone 32: < 319.2188f, 0.0f, 0.0f >
Frame 15: Bone 33: < 4.921875f, 180.0f, 180.0f >
Frame 15: Bone 34: < 28.82813f, 351.5625f, 356.1328f >
Frame 15: Bone 35: < 358.9453f, 7.734375f, 0.0f >
Frame 15: Bone 36: < 355.7813f, 9.492188f, 359.2969f >
Frame 15: Bone 37: < 357.8906f, 2.109375f, 0.0f >
Frame 15: Bone 38: < 356.4844f, 351.9141f, 0.703125f >
Frame 15: Bone 39: < 350.8594f, 352.6172f, 1.40625f >
Frame 15: Bone 40: < 27.42188f, 109.6875f, 37.61719f >
Frame 15: Bone 41: < 38.67188f, 358.9453f, 75.9375f >
Frame 15: Bone 42: < 37.26563f, 0.3515625f, 0.3515625f >
Frame 15: Bone 43: < 322.3828f, 0.0f, 0.0f >
Frame 15: Bone 44: < 322.7344f, 340.3125f, 343.4766f >
Frame 15: Bone 45: < 290.0391f, 0.0f, 0.0f >
Frame 16: Rotations/Translations: 0.0f 0.0f 0.0f 0.0f 277.0f 97.0f
Frame 16: Bone 0: < 9.140625f, 0.0f, 0.0f >
Frame 16: Bone 1: < 356.1328f, 0.0f, 0.0f >
Frame 16: Bone 2: < 0.0f, 0.0f, 0.0f >
Frame 16: Bone 3: < 27.07031f, 3.867188f, 0.3515625f >
Frame 16: Bone 4: < 347.6953f, 356.8359f, 359.2969f >
Frame 16: Bone 5: < 310.0781f, 273.5156f, 94.57031f >
Frame 16: Bone 6: < 1.054688f, 244.6875f, 206.3672f >
Frame 16: Bone 7: < 352.9688f, 31.99219f, 344.8828f >
Frame 16: Bone 8: < 349.1016f, 3.164063f, 0.0f >
Frame 16: Bone 9: < 311.4844f, 80.15625f, 265.4297f >
Frame 16: Bone 10: < 1.40625f, 116.3672f, 153.2813f >
Frame 16: Bone 11: < 352.9688f, 333.6328f, 15.11719f >
Frame 16: Bone 12: < 3.164063f, 9.84375f, 359.6484f >
Frame 16: Bone 13: < 8.789063f, 356.4844f, 359.2969f >
Frame 16: Bone 14: < 0.0f, 0.0f, 0.0f >
Frame 16: Bone 15: < 352.6172f, 349.4531f, 335.3906f >
Frame 16: Bone 16: < 70.66406f, 204.9609f, 188.4375f >
Frame 16: Bone 17: < 43.94531f, 21.44531f, 4.921875f >
Frame 16: Bone 18: < 279.4922f, 175.4297f, 184.9219f >
Frame 16: Bone 19: < 351.9141f, 351.9141f, 19.6875f >
Frame 16: Bone 20: < 326.9531f, 0.703125f, 358.9453f >
Frame 16: Bone 21: < 348.3984f, 8.789063f, 24.96094f >
Frame 16: Bone 22: < 85.42969f, 126.5625f, 140.2734f >
Frame 16: Bone 23: < 42.89063f, 339.6094f, 357.1875f >
Frame 16: Bone 24: < 277.7344f, 178.5938f, 181.7578f >
Frame 16: Bone 25: < 353.6719f, 358.5938f, 348.3984f >
Frame 16: Bone 26: < 342.7734f, 359.6484f, 1.054688f >
Frame 16: Bone 27: < 28.47656f, 251.7188f, 170.1563f >
Frame 16: Bone 28: < 321.3281f, 347.3438f, 96.32813f >
Frame 16: Bone 29: < 87.1875f, 15.11719f, 15.11719f >
Frame 16: Bone 30: < 290.3906f, 180.0f, 180.0f >
Frame 16: Bone 31: < 342.0703f, 8.085938f, 18.28125f >
Frame 16: Bone 32: < 319.5703f, 0.0f, 0.0f >
Frame 16: Bone 33: < 7.382813f, 180.0f, 180.0f >
Frame 16: Bone 34: < 27.77344f, 356.8359f, 358.5938f >
Frame 16: Bone 35: < 3.164063f, 5.625f, 0.3515625f >
Frame 16: Bone 36: < 1.40625f, 8.4375f, 0.3515625f >
Frame 16: Bone 37: < 356.1328f, 357.8906f, 0.3515625f >
Frame 16: Bone 38: < 353.6719f, 351.9141f, 1.054688f >
Frame 16: Bone 39: < 348.75f, 351.2109f, 1.757813f >
Frame 16: Bone 40: < 28.47656f, 108.2813f, 34.80469f >
Frame 16: Bone 41: < 37.61719f, 358.5938f, 75.58594f >
Frame 16: Bone 42: < 46.05469f, 0.3515625f, 0.3515625f >
Frame 16: Bone 43: < 318.5156f, 0.0f, 0.0f >
Frame 16: Bone 44: < 318.5156f, 339.9609f, 344.5313f >
Frame 16: Bone 45: < 292.5f, 0.0f, 0.0f >
Frame 17: Rotations/Translations: 0.0f 0.0f 0.0f 0.0f 273.0f 103.0f
Frame 17: Bone 0: < 6.679688f, 0.0f, 0.0f >
Frame 17: Bone 1: < 359.2969f, 0.0f, 0.0f >
Frame 17: Bone 2: < 0.0f, 0.0f, 0.0f >
Frame 17: Bone 3: < 25.66406f, 2.460938f, 0.3515625f >
Frame 17: Bone 4: < 348.3984f, 357.8906f, 359.6484f >
Frame 17: Bone 5: < 310.4297f, 275.625f, 93.51563f >
Frame 17: Bone 6: < 359.6484f, 243.9844f, 206.3672f >
Frame 17: Bone 7: < 355.4297f, 30.23438f, 345.2344f >
Frame 17: Bone 8: < 10.19531f, 1.40625f, 2.109375f >
Frame 17: Bone 9: < 311.1328f, 80.50781f, 266.4844f >
Frame 17: Bone 10: < 0.703125f, 117.0703f, 153.2813f >
Frame 17: Bone 11: < 355.7813f, 333.2813f, 15.11719f >
Frame 17: Bone 12: < 10.19531f, 7.382813f, 0.0f >
Frame 17: Bone 13: < 9.492188f, 357.8906f, 359.6484f >
Frame 17: Bone 14: < 0.703125f, 0.0f, 0.0f >
Frame 17: Bone 15: < 352.2656f, 349.4531f, 335.3906f >
Frame 17: Bone 16: < 71.01563f, 205.6641f, 189.1406f >
Frame 17: Bone 17: < 44.29688f, 21.44531f, 4.921875f >
Frame 17: Bone 18: < 281.9531f, 176.1328f, 183.8672f >
Frame 17: Bone 19: < 354.0234f, 351.5625f, 19.6875f >
Frame 17: Bone 20: < 327.3047f, 0.703125f, 358.9453f >
Frame 17: Bone 21: < 348.0469f, 8.4375f, 24.96094f >
Frame 17: Bone 22: < 85.78125f, 120.9375f, 134.2969f >
Frame 17: Bone 23: < 42.1875f, 339.6094f, 357.1875f >
Frame 17: Bone 24: < 278.7891f, 178.5938f, 181.4063f >
Frame 17: Bone 25: < 355.0781f, 359.2969f, 348.0469f >
Frame 17: Bone 26: < 343.125f, 359.6484f, 1.054688f >
Frame 17: Bone 27: < 29.17969f, 253.125f, 172.6172f >
Frame 17: Bone 28: < 322.0313f, 348.3984f, 95.97656f >
Frame 17: Bone 29: < 87.53906f, 161.3672f, 161.3672f >
Frame 17: Bone 30: < 294.6094f, 180.0f, 180.0f >
Frame 17: Bone 31: < 342.4219f, 9.140625f, 17.22656f >
Frame 17: Bone 32: < 319.9219f, 0.0f, 0.0f >
Frame 17: Bone 33: < 9.84375f, 180.0f, 180.0f >
Frame 17: Bone 34: < 26.01563f, 1.757813f, 0.703125f >
Frame 17: Bone 35: < 7.382813f, 2.8125f, 0.3515625f >
Frame 17: Bone 36: < 7.03125f, 6.679688f, 0.703125f >
Frame 17: Bone 37: < 354.7266f, 354.375f, 0.703125f >
Frame 17: Bone 38: < 351.5625f, 352.9688f, 1.054688f >
Frame 17: Bone 39: < 347.3438f, 350.8594f, 2.109375f >
Frame 17: Bone 40: < 29.17969f, 107.2266f, 32.34375f >
Frame 17: Bone 41: < 36.5625f, 357.8906f, 75.23438f >
Frame 17: Bone 42: < 54.84375f, 0.3515625f, 0.3515625f >
Frame 17: Bone 43: < 313.9453f, 0.0f, 0.0f >
Frame 17: Bone 44: < 315.0f, 339.2578f, 345.9375f >
Frame 17: Bone 45: < 295.3125f, 0.0f, 0.0f >
Frame 18: Rotations/Translations: 0.0f 0.0f 0.0f 0.0f 270.0f 108.0f
Frame 18: Bone 0: < 4.921875f, 0.0f, 0.0f >
Frame 18: Bone 1: < 1.757813f, 0.0f, 0.0f >
Frame 18: Bone 2: < 0.0f, 0.0f, 0.0f >
Frame 18: Bone 3: < 24.25781f, 1.054688f, 0.0f >
Frame 18: Bone 4: < 349.1016f, 358.9453f, 359.6484f >
Frame 18: Bone 5: < 310.7813f, 277.3828f, 92.8125f >
Frame 18: Bone 6: < 358.5938f, 243.6328f, 206.3672f >
Frame 18: Bone 7: < 357.8906f, 28.125f, 345.2344f >
Frame 18: Bone 8: < 18.63281f, 359.6484f, 1.757813f >
Frame 18: Bone 9: < 311.1328f, 80.85938f, 267.1875f >
Frame 18: Bone 10: < 0.3515625f, 117.0703f, 153.2813f >
Frame 18: Bone 11: < 357.8906f, 332.9297f, 15.11719f >
Frame 18: Bone 12: < 14.0625f, 4.570313f, 359.6484f >
Frame 18: Bone 13: < 9.84375f, 358.9453f, 359.6484f >
Frame 18: Bone 14: < 1.054688f, 0.0f, 0.0f >
Frame 18: Bone 15: < 351.9141f, 349.8047f, 335.3906f >
Frame 18: Bone 16: < 71.71875f, 206.3672f, 189.8438f >
Frame 18: Bone 17: < 44.29688f, 21.44531f, 4.921875f >
Frame 18: Bone 18: < 283.7109f, 176.8359f, 183.5156f >
Frame 18: Bone 19: < 355.7813f, 351.5625f, 19.33594f >
Frame 18: Bone 20: < 327.6563f, 0.703125f, 358.9453f >
Frame 18: Bone 21: < 348.0469f, 8.4375f, 24.96094f >
Frame 18: Bone 22: < 86.13281f, 114.2578f, 127.6172f >
Frame 18: Bone 23: < 41.83594f, 339.6094f, 357.1875f >
Frame 18: Bone 24: < 279.8438f, 178.9453f, 181.4063f >
Frame 18: Bone 25: < 356.4844f, 359.6484f, 348.3984f >
Frame 18: Bone 26: < 343.8281f, 359.6484f, 1.054688f >
Frame 18: Bone 27: < 29.53125f, 254.1797f, 174.7266f >
Frame 18: Bone 28: < 322.3828f, 348.75f, 95.97656f >
Frame 18: Bone 29: < 82.96875f, 173.6719f, 173.6719f >
Frame 18: Bone 30: < 298.125f, 180.0f, 180.0f >
Frame 18: Bone 31: < 342.4219f, 10.19531f, 16.52344f >
Frame 18: Bone 32: < 320.2734f, 0.0f, 0.0f >
Frame 18: Bone 33: < 11.95313f, 180.0f, 180.0f >
Frame 18: Bone 34: < 23.90625f, 6.679688f, 2.8125f >
Frame 18: Bone 35: < 10.54688f, 359.6484f, 0.0f >
Frame 18: Bone 36: < 11.95313f, 4.570313f, 1.054688f >
Frame 18: Bone 37: < 353.6719f, 350.8594f, 1.054688f >
Frame 18: Bone 38: < 350.1563f, 354.7266f, 1.054688f >
Frame 18: Bone 39: < 347.3438f, 351.5625f, 2.109375f >
Frame 18: Bone 40: < 29.53125f, 106.1719f, 30.23438f >
Frame 18: Bone 41: < 35.85938f, 357.5391f, 75.23438f >
Frame 18: Bone 42: < 62.22656f, 0.3515625f, 0.3515625f >
Frame 18: Bone 43: < 309.375f, 0.0f, 0.0f >
Frame 18: Bone 44: < 312.1875f, 339.2578f, 346.6406f >
Frame 18: Bone 45: < 297.4219f, 0.0f, 0.0f >
Frame 19: Rotations/Translations: 0.0f 0.0f 0.0f 0.0f 268.0f 113.0f
Frame 19: Bone 0: < 3.515625f, 0.0f, 0.0f >
Frame 19: Bone 1: < 3.164063f, 0.0f, 0.0f >
Frame 19: Bone 2: < 0.0f, 0.0f, 0.0f >
Frame 19: Bone 3: < 23.90625f, 0.0f, 0.0f >
Frame 19: Bone 4: < 349.1016f, 0.0f, 0.0f >
Frame 19: Bone 5: < 310.7813f, 278.4375f, 92.46094f >
Frame 19: Bone 6: < 358.2422f, 243.2813f, 206.3672f >
Frame 19: Bone 7: < 357.5391f, 27.07031f, 345.5859f >
Frame 19: Bone 8: < 19.6875f, 357.89

Qhimm

  • Founder
  • *
  • Posts: 1996
    • View Profile
    • Qhimm.com
Decent FF7 Model Viewer
« Reply #180 on: 2004-09-11 04:03:31 »
Guys... you might want to consider putting such a huge code block in a separate text file and linking to it, instead of including it in your post. This page of the topic alone is a near-300k download.

EDIT: Sigh, of course my post ended up on a new page... Right, the PREVIOUS page of the topic alone is a near-300k download.

L. Spiro

  • *
  • Posts: 797
    • View Profile
    • http://www.memoryhacking.com/index.php
Decent FF7 Model Viewer
« Reply #181 on: 2004-09-11 06:41:06 »
Believe me that is what I wanted to do.
But I do not have anywhere to put it.
I don’t have access to my own site.

Find me free web space and I would definitely put it there instead.

Plus we should really move this to a topic specifically for figuring out these files.


L. Spiro

mirex

  • *
  • Posts: 1645
    • View Profile
    • http://mirex.mypage.sk
Decent FF7 Model Viewer
« Reply #182 on: 2004-09-11 08:29:53 »
Oh yea that last post is HUGE. But its nice progress :)
L. Spiro: use me trashbin http://bin.mypage.sk, its web uploading interface

qwerty

  • *
  • Posts: 251
    • View Profile
Decent FF7 Model Viewer
« Reply #183 on: 2004-09-11 12:50:15 »
You could also use 250free.com. They give a fairly decent amount of space (250 MB) and bandwidth (250 Mbit).

Cyberman

  • *
  • Posts: 1572
    • View Profile
Decent FF7 Model Viewer
« Reply #184 on: 2004-09-12 05:08:27 »
Alright I'll post links instead of the images as well.  I have them set to expire quickly out of Mirex's trash bin though :)

Spiro you aren't coming across too coherently too me.

Code: [Select]
struct s_FF7AAanimHdr {
   unsigned long   rec_a;      //0
   unsigned long   rec_b;      //4
   unsigned long   block_len;   //8

   unsigned short   block_a;   //12
   unsigned short   real_data_len;   //14
   unsigned short   translat[3];   //16
   unsigned char   u1;            //22
} FF7AAanimHdr; //size = 23 bytes


Code: [Select]
struct s_FF7AAanimHdr {
   unsigned long   rec_a;      //0
   unsigned long   frames_1;      //4
   unsigned long   block_len;      //8

   unsigned short   frames_2;      //12
   unsigned short   real_data_len;   //14
   unsigned char   u1;      //16
} FF7AAanimHdr; //size = 17 bytes


All right .. why the moving of u1? is this the 'new' U1 value that is a certain number of rotations that are ignored?  Then the frame XYZ offset?  I'm not sure that this works right.  All the integers in the playstation version are little endian.  So this gives me better nasty and weird values.  do these new values work for you?  How do you discern the frame count per animation?

Cyb

L. Spiro

  • *
  • Posts: 797
    • View Profile
    • http://www.memoryhacking.com/index.php
Decent FF7 Model Viewer
« Reply #185 on: 2004-09-12 07:30:18 »
Actually I have found that the new u1 value does not actually depict the number of rotations to ignore, but it seems very close.  In Red XIII’s animation set, the values are as I showed, but if you do as I mentioned and skip 2 rotations, you get values that are VERY close to what they should be, but down the line they become more and more off.
It could be a key to some type of compression (and most likely is).

I removed the “unsigned short   translat[3];   //16” completely from the header because it is actually part of every frame.
And also, they actually come one byte later in the file than previously thought, decoded as I showed.
In other words, since they come one byte later, “u1” is actually the last byte of “translat[3]”, which is why I moved it to the front of “translat[3]”.
But after I moved it to the front I then removed “translat[3]” entirely.

As for the frame counts, they are in RAM (the same place I got all my data).  Red XIII’s and Barret’s first animations are posted and have 20 frames each.  I have checked others as well, but since “rec_b” and “block_a” are always the same I am unsure which one is actually depicting the frame count.

Most likely it is “block_a”, since that is the logical place to put the frame count.


If your values are already in little endian, you don’t need to translate them to little endian.  Just use them as they are and you should get the values I posted.


L. Spiro

Cyberman

  • *
  • Posts: 1572
    • View Profile
Decent FF7 Model Viewer
« Reply #186 on: 2004-09-13 17:05:12 »
Quote from: L. Spiro
Actually I have found that the new u1 value does not actually depict the number of rotations to ignore, but it seems very close.  In Red XIII’s animation set, the values are as I showed, but if you do as I mentioned and skip 2 rotations, you get values that are VERY close to what they should be, but down the line they become more and more off.
It could be a key to some type of compression (and most likely is).

I removed the “unsigned short   translat[3];   //16” completely from the header because it is actually part of every frame.
And also, they actually come one byte later in the file than previously thought, decoded as I showed.
In other words, since they come one byte later, “u1” is actually the last byte of “translat[3]”, which is why I moved it to the front of “translat[3]”.
But after I moved it to the front I then removed “translat[3]” entirely.

As for the frame counts, they are in RAM (the same place I got all my data).  Red XIII’s and Barret’s first animations are posted and have 20 frames each.  I have checked others as well, but since “rec_b” and “block_a” are always the same I am unsure which one is actually depicting the frame count.

Most likely it is “block_a”, since that is the logical place to put the frame count.


If your values are already in little endian, you don’t need to translate them to little endian.  Just use them as they are and you should get the values I posted.


L. Spiro

Spiro since I don't know which animation is Barettes normal animation, might it be possible for you to indicate which one this is? I have many possibilities and no way of knowing which one you are looking at (1 of 90 some odd animations). Guessing isn't too helpful in this case :D  I tend to use the first animation myself.

I am going to attempt to see if your data is matching mine and what's up.

And here are the results (text list), here is a marked up hexdump (A Big JPEG).
I likely have a misalignment however whats the length of your animation packet? Mine appears to be 879 bytes which can in no way store 20 frames of animation. The first frame matches yours quite nicely however.

Cyb - still puzzled.

sfx1999

  • *
  • Posts: 1142
    • View Profile
Decent FF7 Model Viewer
« Reply #187 on: 2004-09-13 21:21:16 »
Maybe the problem is not compression, but a different storage system for rotational information.

L. Spiro

  • *
  • Posts: 797
    • View Profile
    • http://www.memoryhacking.com/index.php
Decent FF7 Model Viewer
« Reply #188 on: 2004-09-14 04:54:12 »
Yes, mine is the first animation and your first frame matches it fine.
But remember, I got these animations from RAM and not the file.
When it comes to the file, I still don't know how to decode past the first frame, so that is all I can document.
Each frame DOES have a rotational and translational offset, but after the first frame it is stored differently.

So, keep in mind that all I post so far covers the first frame.

Also, about your translations, they are backwards.

You got 4862, which is hex “12 FE”
You need hex “FE 12” to get -494.

Since you say the PlayStation values may already be reversed, I don’t think you need to reverse them, but no matter what the case, the final result should be -494.


L. Spiro

halkun

  • Global moderator
  • *
  • Posts: 2097
  • NicoNico :)
    • View Profile
    • Q-Gears Homepage
Decent FF7 Model Viewer
« Reply #189 on: 2004-09-14 09:41:58 »
I remeber reading somewhere that PSX animation can be compressed. I somehow remember this being an issure with FF9 and MGS. In MGS's case it was an interview with So Toyota and how he was able to cram all those moving models around and have room left for the game.

Let us theroize about animation compression for a little bit.

What we know.
1) The system creates a series of distinct frames when it's loaded into memory.
2) The model has diffrent "sets" of animation that are used at differrent times. (Throwing, slashing, running)
3) As a file, the animation starts with a "keyframe" and then unknown data spews past it.

Ok, here's some rules about FF7 on the PSX.
1) Do not do a file access unless you absoluty have to. The PSX is not a fortune teller, It bearly has enough horsepower to keep the texture caches stright. Unneccasary loading/decompression of animation will cause a proformance hit. This would stand to reason that the animations will have to be in memory for the duration of the battle.

2) Only two animations are ever used in seqence (This makes sence later)

3) Animation is threaded round-robin via the Kernel.

4) If the animations are compressed, and you are only using two animations at at a time, and the keyframes are uncomresssed, It could stand to reason that the whole compressed file is in memory, and when you need a particular sequence, that portion is inflated.

5) It could also stand to reason that animations are cached.

So if I were a programmer, I would set up "slots" of animation data in memory. The first slot would always have the "standing" animation. (Let's call this animation the "root" animation")

If I were to issue a command in the battle menu, let's say "attack", I would want to have that animation feched, uncompressed, placed in the next availible slot, and then executed. After Attack, I will return to the root animation,  the attack animation data will still be cached in that slot.

If I do a "throw" it will overwrite that last animation.

Now here a neat trick I picked up reversing FF3 (The NES one)....

Do you ever notice that when you do a summon, that your characters dissappear? This isn't an asthetic thing. What the game is doing is flushing out *ALL* the character animimation, model, and texture  data to make room for the summon. This leaves the caches the only real link to quickly recreate the battlefield. In the case of FF3NES. There is only so much PPU ram. The characters had to be nuked to make way for the summon graphics. When I was playing with FF6, I noticed that it was deleting all the character graphic object data before a summon as well. In the PSX VRAM. All magic tecture caches, and the "eyeball pack" (Character textures) were deleted from there.

I would suggest you look for the compressed animation data file in memory, that may be your look up table to uncompressing the animation data into each appropoite cache.

Now about compression.

How does one compress animation? Well, it can't be mathmataclly intense, as that would lag the fetch sequence. If I was going to store only a keyframe of data, and then "garbage" after it, the "garbage" in question would only be the data I changed from the previous frame. The easiest way I can think of is to give each joint an ID  and then the updated data. You could use relitive repositioning, for example [right_leg: y=+3.34, y=-2.12, z=+6.09] (Which leads to smaller numbers in the data set) or explicet new cooridinates, or a mixture of both. But I doubt that last one.

Anyway that's some food for thought.  I might just be talking out my butt again. Heaven forbid I should know what I'm talking about ^_^

Cyberman

  • *
  • Posts: 1572
    • View Profile
Animation information and compression Par Duex
« Reply #190 on: 2004-09-14 19:46:04 »
L Spiro - That is why I said what you have doesn't entirely make sense, there is no reason for them to store anything in big endian since they store everything else in little endian.  It's an inconsistancy and thus quite suspect.

Hmm.. if I were to compress this data  I think I would use a modified LZS alogo to do it.
In LZS the first byte indicates literal stream data and compressed.
Perhaps it's compressed using something similiar only in this case the numbers included are just the ones that changed?

It's possible they used delta compression? This does limit the rate of change per frame. Maybe 1 signed byte per value? that would give 3 + 23 * 3 bytes or 72 bytes per frame.

In any case for Barret we have
The header is 5 bytes.. I know this is a FACT why?
It has nothing to do with what Spiro has done actually it's just raw data.
The first animation section is 884 bytes in Barret, it's LENGTH is 879 bytes though, this leaves 5 bytes for the header (tada).
The first KEY frame is 110 bytes in size because 6 bytes for the offsets 4.5 * 23 for the rotations.
This leaves 769 for 19 more frames or roughly 40 bytes per frame.

Examining RedXIII we have the following information.
total size is 1720 bytes and the length is 1713 (7 bytes differrence) F is 2 (that little byte that we've been so worried about!). The interesting thought is does this make the header longer (by 2 bytes?) hmmm
The translation and none of the rotation values match Spiro's
It says there are 20 frams though :)
Doing the math the first frame should be
6 + 4.5 * 47 or 218
That leaves 78 bytes per frame
So yes the data is compressed, but how.. is not obvious.  

Cyb

L. Spiro

  • *
  • Posts: 797
    • View Profile
    • http://www.memoryhacking.com/index.php
Memory Hacking Software
« Reply #191 on: 2004-09-18 20:40:38 »
I have been a busy bee.
2 or more years ago I decided to make a program for hacking RAM since GameHack wasn’t working on Windows® XP.

Until recently it has been a fairly simple project, but it has changed from a newbie—intermediate tool to a newbie—high-end tool.

Searches and things are still simple enough for GameShark® newbies to understand, but templates are much more complicated and take time to learn how to use to their fullest.

I recommend that you (all) get this before it expires (set to one week) from the bin.

Memory Hacking Software


So, here is what I have done.
This is the Template Editor.


As you can see, I created a very very basic template to describe Cloud’s animation set.

In RAM, only a few of his animations are loaded at a time.  I found this out (not to my surprise) while making the template.
Not only that, but between animations, sometimes there are 8 bytes of space, sometimes there are 16 bytes of space, and sometimes there is no space.
Most likely this has to do with the number of animations that AREN’T loaded.

Total, this set occupies 24,080 bytes of RAM, as shown by the Template Editor.

The frames that are loaded into RAM have 20, 20, 12, 10, 6, 6, 2, and 4 total frames.  I hardcoded these values into the template (as well as the number of bones Cloud has) but it is possible to set them to a value in RAM (instead of always being 20 until I change it, it will find the value in RAM and use that number to resize itself instead).  If I knew where the number of bones in Cloud’s body and the number of frames per animation were stored, I could link the template to those values in RAM instead, but I don’t, so I hardcoded them into the template.


The Hex Viewer shows all of this information to me in a very easy-to-read format which can be changed to suite your needs.


Because I can map the templates over RAM in real-time and see every value as I add them and modify them it is extremely easy to map objects in RAM.  This whole animation set took 10 minutes.
Because I defined the parameters of a valid XYZ coordinate to be a float from -360 to 360, the Hex Viewer automatically showed me where values in RAM were not meeting those parameters (shown by red) and I could see instantly that my templates were or where not aligned properly.

What is shown in the picture is the end of Cloud’s animation set.  The green line indicates the start of a new chunk.  Since Cloud’s animation ends shortly before a new chunk, most likely his is the last animation of the 3 characters in my battle party.  I have not verified this.

You will notice something strange about this picture.
Some of Cloud’s bones have -180.0f for rotations.
It seems it is possible for the bones to be rotated backwards, but why?
And how would they be stored in the file if they have a negative rotation?
Or is this some funky trick the Final Fantasy® VII engine does upon loading of the animations?  -180 is the same as 180, so what is the point?




You should be able to see already how useful the templates are.
Soon I will add the functionality of exporting.  Each data type will export as whatever you define and in any of multiple formats.
You will be able to create the final output format in the same way you use sprintf().

Currently it is possible to export that entire 24,080-byte chunk just by selecting it in the Hex Viewer and right-clicking, but when exporting a template you will have much more control over each individual data item.


This tool should help us finish off Final Fantasy® VII, and I am still working on it to make it better.
I really suggest using it.  As I mentioned, putting together that animation template and following all of Cloud’s animations took only 10 minutes and helped me gain understanding of the final format when loaded into RAM.
And you can use templates to describe any format.
In a template (let’s say A), you can assign pointers to other templates (B), and then attach that template (A) to a pointer in RAM.
When doing this, the template will automatically follow dynamic objects in RAM as they move around.  Animations are dynamic and are reallocated every time a new battle starts.
If I take the time to find the pointer to Cloud’s animation, I could attach this template to the pointer and not have to worry about finding his animation ever again.

One last word on templates.
I will also make the ability to wrap templates into libraries and send to other people.  Currently, it is very rare to get a template working on another computer, but when I have completed that step, it will be very easy for us to share our templates and help each other dig into this game.


Here is the actual software (again)!
Memory Hacking Software
Here is a tutorial on templates.
Template Tutorial
Here is the RAM dump (all in floats) of the actual area of Cloud’s animations.
Cloud’s Animations


L. Spiro

halkun

  • Global moderator
  • *
  • Posts: 2097
  • NicoNico :)
    • View Profile
    • Q-Gears Homepage
Decent FF7 Model Viewer
« Reply #192 on: 2004-09-18 22:06:21 »
That's really cool.

We however need the native format that the animation is stored in on the original media. I'm not keen on "ripping" data from a game and storing it for later use. (I.E. Let's make a game using cloud's animation. I have his animation data converted into XML we can include)

The problem is it's still a copy of the original data from the original media and a no-no to redistibute.

What you have done is nothing short of amazing though.....

Cyberman

  • *
  • Posts: 1572
    • View Profile
Decent FF7 Model Viewer
« Reply #193 on: 2004-09-19 03:24:11 »
I think it will help is break the animation format. I believe ALL of the animation data is compressed somehow, that is why REDXIII rotations are odd.  I believe it's time for me to start abusing my playstation debuging software.

Cyb

L. Spiro

  • *
  • Posts: 797
    • View Profile
    • http://www.memoryhacking.com/index.php
Decent FF7 Model Viewer
« Reply #194 on: 2004-09-19 04:11:20 »
Yes it is illegal to distribute a rip of the original and the original files.
It is not illegal for me to distribute a template library which you can use to see the animation formats as easily as I see them.

I think seeing the uncompressed format in RAM will help crack the compressed file format.

My point isn’t that we can use this to rip and then use the rips in our game(s)/tool(s).  I am definitely not suggesting that.  This is purely for help in decoding.

So, this program DOES allow ripping, but more usefully it allows very easy browsing of RAM.  Looking at RAM is not illegal, and even if it was, that doesn’t seem to stop anyone here.

Anyway, I spent two years on this and I am still spending more.  It helps a lot and I want to see it get used.


L. Spiro

L. Spiro

  • *
  • Posts: 797
    • View Profile
    • http://www.memoryhacking.com/index.php
Decent FF7 Model Viewer
« Reply #195 on: 2004-09-19 08:19:00 »
It seems fairly simple, at least to decompress the first frame of Red XIII’s animation.

It goes by 10 bits instead of 12.


It looks like this:

Code: [Select]
Bits from 0x1B * 360 / 1024

0000000000    0.0 RXOffset
0000000000    0.0 RYOffset
0000000000    0.0 RZOffset
0000001001    3.1640625
0000000000    0.0
0000000000    0.0
0000001001    3.1640625
0000000000    0.0
0000000000    0.0
0000000000    0.0
0000000000    0.0
0000000000    0.0
0001000101    24.2578125
1111111101    358.9453125
0000000000    0.0
1111100001    349.1015625
0000000011    1.0546875
0000000001    0.3515625
1101110101    311.1328125
1100011010    279.140625
0100000111
1111111011
1010110100
1001001011
1111101111
0001001101
1111010111
0000111110
1111110101
0000000011
1101110100
0011101011
1011111001
0000000001
0010001101
01 Etc.…


The rest of the first frame matches the values I found in RAM exactly.

It seems we will have heavy rewriting to do to get our engines to display these animations.

The “u1” that has caused us so much trouble is a compression key.  It can be either 0, 2, or 4, and determines whether the bitcounts are 12, 10, or 8 respectively.
Unfortunately I still can’t get past the first frame.
Using this method leaves the end at 0xCB and 4 bits.
According to RAM, the next translation is 0 266 124, which means 00 00, FE F6, 00 7C should be in RAM somewhere in that area.
But there is no FE F6.  No 00 00 either.


L. Spiro

mirex

  • *
  • Posts: 1645
    • View Profile
    • http://mirex.mypage.sk
Decent FF7 Model Viewer
« Reply #196 on: 2004-09-20 10:47:31 »
Quote
The “u1” that has caused us so much trouble is a compression key. It can be either 0, 2, or 4, and determines whether the bitcounts are 12, 10, or 8 respectively.

Like wowow ! I still dont get it how did you found that out ! Nice progress.

L. Spiro

  • *
  • Posts: 797
    • View Profile
    • http://www.memoryhacking.com/index.php
Decent FF7 Model Viewer
« Reply #197 on: 2004-09-20 11:49:25 »
Heh, that isn’t all.

The first frame is never compressed, which implies all frames after use relative offsets.
After I posted I went back to the hex to verify this, and indeed what I found verifies it to the nearest 80% probability.
I began by creating a table of Cloud’s first two correct frames and then a table of the amount by which each bone changes.
The first translational offset (by file) is -466 and the next correct frame is 461, which translates to the file to be -461.  The change is 5, and with his other two translations being 0 and 0, the three displacements together are 0, 5, 0.
So I went to rtda to the first byte after his first frame, and guess what I saw? 00 05 00.
I was just about to go deeper, into the rotations, when power went out.  I just got back today and just now have time to post, so here it is.

Anyway, from what I gathered before losing power, the rotations are stored as offsets from the first frame as well, but the bitcount is different.  It isn’t 12 or 8.  I was just doing the math to check what values it could be when I was forced to stop, so now I am going to go back into it.

I don’t think this is going to take much effort, at least if everything else works as it should.  And I didn’t verify the 0 5 0 combination on any other files yet (to test THEIR translational offsets for this pattern) but I had every intention of doing so until losing power.


Well, anyway, I got the clues before losing power, so, now it is time to put them together and solve this riddle.


L. Spiro

P. S. mirex, you should really start using MemHack.exe.  And you know, it is only going to get better from here (as I am still adding more and more to it).

L. Spiro

  • *
  • Posts: 797
    • View Profile
    • http://www.memoryhacking.com/index.php
Decent FF7 Model Viewer
« Reply #198 on: 2004-09-20 17:58:42 »
I have uploaded a new version of MemHack.exe (2.0.1.3).

Memory Hackong Software 2.0.1.3

This is because I have added a fairly helpful/important feature to it.
We can now share our templates with each other.

If anyone here maps out an area of RAM, whether it be the item list, Materia list, weapons, characters, monsters, animations, or just basic templates to help us all find information, he or she can post the template and then we can all be able to examine the RAM and either come up with solutions for solving whatever task is at hand more easily, or look over the template to see if it makes sense/describes the data accurately.

Sharing templates is similar to sharing your idea on how it “should” look, and when people put their ideas together, the final solution follows soon after.

It is true here that many things are already mapped, but in fact there are many things yet to be mapped (camera positions, anyone?).

I have not kept a tight list, but I know that animation files are still not fuly mapped, and I know that understanding how they appear in RAM is vital to unlocking them.
That is why I have made a basic (and somewhat newbie) template to describe an animation as it appears in RAM.
It can be found here.
If I had found the pointer to the animation data sets, I would have wrapped that template to the pointer and then just tell the user where the pointer is so he or she can slap this template to the pointer and let the template find the animation sets on its own.
But since I haven’t, I will have to instead describe how I find the animation sets each time.
It is very easy.
Basically, we already know that each character has 3 floats for the translational offset (0, 466, 0 for Cloud).  466 (in this case) is a fairly unique float number, so I do a float search for it.
It returns only about 12 results, and from there it is easy to check each one.
When you are viewing the list of returns, you can check each one manually, but if you right-click the address in the list it will open the RAM Watcher to that address.  You will see each of the 466’s, but only one of them is immediately followed by a float of 0.
That is the one that determines Cloud’s first frame of his first animation.
Go up 16 bytes and that is the actual start of that frame.
That is the address where you need to post this template.
Get to the Hex Viewer by hitting Alt-T, H.

Here is the other bad part of this template: I don’t know where the data is that determines how many bones and how many frames per animation, so I can’t make the template size itself to the animation.

If anyone else finds that information, please post an updated template.
Until then, you can adjust the template arrays to make it fit the animation you want, just as I have shown in my screenshot above.

Also, tomorrow I will update the .mhtl format to be able to accept additional text which will be displayed upon loading.  That way we can include installation instructions and general notes about the template, packed into the .mhtl file (this change will not affect existing .mhtl files).


I hope this template helps to visually conceive the data in RAM, and that that helps to see how the file becomes that data, and we can crack this code.
I also hope everyone starts using this.  It would be beneficial to the community as a whole, being able to share visual ideas of the data we seek.


L. Spiro

mirex

  • *
  • Posts: 1645
    • View Profile
    • http://mirex.mypage.sk
Decent FF7 Model Viewer
« Reply #199 on: 2004-09-21 09:12:40 »
Sorry im kinda busy right now ... also I dont have FF7 cd's here now ... so looks like hacking PC anims its on you L Spiro.