Skip to content
View in the app

A better way to browse. Learn more.

ResHax

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Help us keep the site running.

Help with parsing old FPS skeleton file

Featured Replies

Solved by Bigchillghost

  • 3 weeks later...
  • Author
  • Localization

bonept.thumb.png.b120090e86a742e133a423297173790a.png

Unbelievable. After skipping the first skeleton, I can assemble the model's skeleton, but only the coordinates and scaling can be confirmed—I still haven’t figured out where the skeleton's rotation data is stored.

  • Author
  • Localization

bonept2.png.18184faa0be12e1c2b5ce29ea6273c42.png

The skeleton doesn't look symmetrical at all, so I must have overlooked something. This result isn't correct.

  • Author
  • Localization

bonepte2.png.74e6b09039938fd3561a6f8c698e1e4e.png

It's more convenient to parse the data starting from address 0x70 rather than 0x0. The sequence 00 00 80 3F in each row is presumably for alignment... And 02 00 represents the ID of the current bone, while 01 indicates the number of child bones for the current bone.

The last two rows are most likely related to rotation.

  • Supporter

Hey, how did you solve the hierarchy? Couldn't make much sense of it, after 0x70, first column/3rd column: boneID/parentID?

0 / 4

3 / 5

4 / 6

5 / -1

...

after 0x770

10 / -1

15 / 19

18 / 20

19 / 21

20 / -1

...

officer hierarchy.png

Quote

The last two rows are most likely related to rotation.

edit: doesn't look like quaternions. Nor like a 3x4 rot matrix?

Could be angle values becuase theu look similar for the symmetrical positiosn, example:

pos and rot (angle) values

pos 7.888271 -11.993073 -0.003784     rot -7.459514 -39.057381 -11.395376
pos  -7.888271 -11.993073 -0.003784    rot -7.459514 -39.057381 -8.185821

Checking positions, same as you got? (no 30 and 32 look symmetrical, so that all could be position values)

Quote

Fst pos at #b0:
0 0.000000 7.039398 -0.061660 0.0 0.0 0.0 0.0
1 7.888271 -11.993073 -0.003784 0.0 0.0 0.0 0.0
2 -7.888271 -11.993073 -0.003784 0.0 0.0 0.0 0.0
3 0.461430 -39.049759 2.304581 0.0 0.0 0.0 0.0
4 0.516119 -41.002617 0.593496 0.0 0.0 0.0 0.0
5 0.653238 -7.066607 -10.521611 0.0 0.0 0.0 0.0
6 0.461430 -39.049759 -2.304581 0.0 0.0 0.0 0.0
7 0.516119 -41.002617 -0.593496 0.0 0.0 0.0 0.0
8 0.653239 -7.066603 10.521611 0.0 0.0 0.0 0.0
9 0.000000 10.215401 -0.419000 0.0 0.0 0.0 0.0
10 0.000000 17.255096 11.412520 0.0 0.0 0.0 0.0
11 -0.000001 30.748596 -2.612966 0.0 0.0 0.0 0.0
12 0.000000 18.727859 14.236400 0.0 0.0 0.0 0.0

13 -4.500002 23.956985 -3.919338 0.0 0.0 0.0 0.0
14 4.500002 23.956985 -3.919338 0.0 0.0 0.0 0.0

15 4.500000 15.357101 -2.000000 0.0 0.0 0.0 0.0
16 -4.500000 15.357101 -2.000000 0.0 0.0 0.0 0.0

17 14.047329 -3.451263 0.415462 0.0 0.0 0.0 0.0
18 0.000094 -0.000091 0.000001 0.0 0.0 0.0 0.0
19 1.172013 -25.999823 -0.455996 0.0 0.0 0.0 0.0
20 0.703707 -21.412161 0.167996 0.0 0.0 0.0 0.0
21 14.047329 -3.451263 -0.415465 0.0 0.0 0.0 0.0
22 0.000096 -0.000090 -0.000001 0.0 0.0 0.0 0.0
23 1.171838 -25.999798 0.455999 0.0 0.0 0.0 0.0
24 0.703773 -21.412035 -0.167976 0.0 0.0 0.0 0.0
25 0.000001 4.296509 1.235526 0.0 0.0 0.0 0.0
26 0.000000 102.388100 0.000000 0.0 0.0 0.0 0.0
27 0.000000 7.039398 -0.061660 0.0 0.0 0.0 0.0

28 7.888271 -11.993073 -0.003784 0.0 0.0 0.0 0.0
29 -7.888271 -11.993073 -0.003784 0.0 0.0 0.0 0.0

30 0.461430 -39.049759 2.304581 0.0 0.0 0.0 0.0

31 0.516119 -41.002621 0.593496 0.0 0.0 0.0 0.0

32 0.461430 -39.049759 -2.304581 0.0 0.0 0.0 0.0

33 0.516119 -41.002621 -0.593496 0.0 0.0 0.0 0.0

34 0.000000 10.215401 -0.419000 0.0 0.0 0.0 0.0
35 -0.000001 30.748810 -2.612966 0.0 0.0 0.0 0.0
36 -4.500002 23.956985 -3.919338 0.0 0.0 0.0 0.0
37 4.500002 23.956985 -3.919338 0.0 0.0 0.0 0.0
38 14.047329 -3.451050 0.415463 0.0 0.0 0.0 0.0
39 -0.000028 -0.000036 0.000001 0.0 0.0 0.0 0.0
40 1.172015 -26.000015 -0.456000 0.0 0.0 0.0 0.0
41 0.703728 -21.411926 0.167991 0.0 0.0 0.0 0.0
42 14.047329 -3.451050 -0.415466 0.0 0.0 0.0 0.0
43 -0.000033 -0.000033 -0.000001 0.0 0.0 0.0 0.0
44 1.172001 -26.000053 0.455998 0.0 0.0 0.0 0.0
45 0.703772 -21.411926 -0.167971 0.0 0.0 0.0 0.0
46 0.000000 4.296494 1.235514 0.0 0.0 0.0 0.0
47 0.000000 0.000000 0.000000 0.0 0.0 0.0 0.0
#   1570:

 

Edited by shak-otay

  • Author
  • Localization

FF stands for no parent level; if the parent level is 00, it means the skeleton ID of the parent level is 01.

and,FF FF 00 00 00 00 is fixed structure

 

bonepte4.png.19b1aa70264ecd793ba6573b6bc6c097.png

There are a total of 87 skeletons in total, and I can't find any rotation data for them. They should all be in a T-pose.

  • Author
  • Localization

Maybe it's nothing all that complicated. It’s just something we’ve overlooked. After testing, it’s definitely not a 3×4 matrix, nor a quaternion. The weird part is the rotation data... No matter how I set it up, the skeleton rotation always ends up wrong.😅

  • Localization
  • Solution

What's so hard about it?🙃

(using ASH)

params.thumb.png.85f61db50747c3f88352578fbd9d387e.png

skel.png.2e5e95170beb7673218efc6aa82965ff.png

 

Remember to toggle the "Allow Custom Variables" switch from the Options menu.

Edited by Bigchillghost

  • Author
  • Localization

TY! I can't believe it. I'd planned to delve deeper into figuring out the structure of this file next week, and you've really helped me out. Thanks a lot!

  • Author
  • Localization
On 5/12/2026 at 12:46 AM, Bigchillghost said:

What's so hard about it?🙃
这有什么难的?🙃

(using ASH)   (使用 ASH

params.thumb.png.85f61db50747c3f88352578fbd9d387e.png

skel.png.2e5e95170beb7673218efc6aa82965ff.png

 

Remember to toggle the "Allow Custom Variables" switch from the Options menu.
记得在选项菜单中切换“允许自定义变量”开关。

Wow, after testing it myself, I find it really amazing. How does it do this? Why is it able to automatically identify its own bone IDs and find parent‑level IDs? How can this be analyzed with just a short piece of code? How does it recognize the hierarchy of the bone tree? Could you explain this to me?

  • Supporter

Afaik the "text-based C-like struct definition interface" must be filled by someone who knows the format details, here "short parentIndex" for example.

edit: what can be done automatically is the weighting (in tool ARC) I assume.

Edited by shak-otay

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.