Jump to content

Crimson Skies: High Road to Revenge (DirectX *.x)


Recommended Posts

Crimson Skies: High Road to Revenge uses some version of DirectX .x in binary which has been presumably compressed.

This was previously nearly cracked, but not completely, on Xentax many years ago...completely lost now.

The 2001 prototype uses the uncompressed version of the .x format, which also isn't yet reversed... I've included both 2001 prototype and 2003 .x formats in hopes they can be understood. The 2001 version is prefixed as such, and contains the original source (maya binary) that the .x was presumably compiled from - in hopes it could be used for referencing how the .x should look. My hopes are the 2001 .x can be used to help further refine the 2003 .x reversing, and make sure it's more accurate

As a side note the AirplaneHR_Devastator comes from a pre-release build. It's possible there's still some differences from the retail .x format, though unlikely, given the time between the build and release.

AirplaneHR_Devastator.7z

Edited by notameowcelot
Link to comment
Share on other sites

Checked for one sub mesh only.  2001-devastator obj file (File/SaveAs mesh) might need face culling (F4 in Noesis).

The AirplaneHR (2nd picture) requires more fiddling.

2001-devastator.png

AirplaneHR.png

Edited by shak-otay
Link to comment
Share on other sites

On 4/4/2024 at 11:26 PM, shak-otay said:

Checked for one sub mesh only.  2001-devastator obj file (File/SaveAs mesh) might need face culling (F4 in Noesis).

The AirplaneHR (2nd picture) requires more fiddling.

2001-devastator.png

AirplaneHR.png

Not sure what's going on there. Bad normals maybe? The source .mb doesn't have anything like that.

If it helps, I've converted it to .fbx so you can load it up in Blender to preview. There's no source file for the 2003 devastator that I'm aware of, unfortunately.

devastator.7z

Link to comment
Share on other sites

6 hours ago, shak-otay said:

How did you get it as .fbx?

And if you have why should we trick around with .x?

(When trying MeshConvert from the DirectX SDK with 2001-devastator.x it says: "can't load",)

It's from the .mb I attached in the original upload - maya binary file. The developers left some sources files in the original 2001 prototype, which obviously are missing from the retail 2003 version. This is also one of the only ones present, unfortunately. The retail .x files still need to be reverse engineered as a result.

Link to comment
Share on other sites

1 hour ago, shak-otay said:

You'll need a script to get all the 50 parts of 2001-Devastator.x file.

Backface culling enabled in blender after .obj import. But that's not sufficient.

 

2001-Devastator-part2.png

Would it be possible to treat these as submeshes? Seems that's what it's supposed to be, when in the .mb especially

Link to comment
Share on other sites

When I wrote "parts" I meant "sub meshes". Or what do you mean exactly? (Maybe there's a hierarchy, didn't check that.)

Btw, here's the part that I named "2nd". One of the 49 (?) parts at least.

2001-Devastator-part2_.png

Edited by shak-otay
Link to comment
Share on other sites

Posted (edited)
24 minutes ago, shak-otay said:

When I wrote "parts" I meant "sub meshes". Or what do you mean exactly? (Maybe there's a hierarchy, didn't check that.)

Btw, here's the part that I named "2nd". One of the 49 (?) parts at least.

2001-Devastator-part2_.png

Looks like, if we're going by the .x internal stuff, the individual submeshes retain their names. These appear after 'Frame' in the .x files, and before 'FrameTransformMatrix'. Doesn't seem like there's a hierarchy. For example 'prop_fast_1' and 'gun_1' are the names for relevant submeshes. The .mb and exported .fbx corroborate this as well. I'm not sure if it's rigged, but it doesn't look like it has any sort of armature or skeleton.

Edited by notameowcelot
Link to comment
Share on other sites

The 2001 one.

vertex start= Address +6 , vertex count
   1a6 304  tip of hull
  3097 1150 hull
  dcee 326  cockpit
 10ee9 24
 1142c 160  wing
 12d98 24
 132d9 58
 13d22 80
 14aa5 160  wing
 16412 26
 169a3 76
 17698 26
 17c27 24
 1816a 160
 19ad3 58
 1a51c 80
 1b29d 76
 1bf91 24
 1c4d7 4
 1c70d 4
 1c941 48
 1d225 48
 1db05 326 cockpit
 20d00 216 propeller
 22f55 216
 2513b 98
 26151 98
 27167 98
 2817d 98
 29193 98
 2a1a9 98
 2b1bf 98
 2c1d5 98
 2d1f0 160
 2eb5c 36
 2f290 36
 2f9bf 48
 30274 128 pilot's head?
 31711 118
 32a2e 24
 32f5e 4
 33196 4
 333ce 4
 33606 4
 33838 4
 33a6a 4
 33c9c 4
 33ece 4
 34100 4
 34332 4
 34564 4
 

Edited by shak-otay
Link to comment
Share on other sites

last number in each line: vertex count
 0. 23c 1401, rocket_launcher.tga, 4
 1. 38a 1401, rocket_launcher.tga, 16
 2. 6d6 1401, rocket_launcher.tga, 16
 3. a22 1401, rocket_launcher.tga, 16
 4. d6e 1401, rocket_launcher.tga, 34
 5. 1367 1401, rocket_launcher.tga, 24
 6. 17fc 1401, rocket_launcher.tga, 36
 7. 1e33 1401, rocket_launcher.tga, 38
 8. 24ee 1401, rocket_launcher.tga, 20
 9. 289b 1401, rocket_launcher.tga, 21
 10. 2d5e 1401, rocket_launcher.tga, 21
 11. 32eb 1401, rocket_launcher.tga, 144
 12. 4af7 1401, rocket_launcher.tga, 8
 13. 4cec 1401, rocket_launcher.tga, 8
 14. 4f40 1401, rocket_launcher.tga, 28
 15. 54e2 1401, rocket_launcher.tga, 64
 16. 5f90 1401, rocket_launcher.tga, 28
 17. 64cb 1401, rocket_launcher.tga, 20
 18. 694a 1801, devastator_landgear.tga, 20
 19. 6d1c 1801, devastator_landgear.tga, 14
 20. 7007 1801, devastator_landgear.tga, 14
 21. 72f1 1801, devastator_landgear.tga, 44
 22. 7aa9 1801, devastator_landgear.tga, 64
 23. 86b7 1801, devastator_landgear.tga, 20
 24. 8a87 1801, devastator_landgear.tga, 14
 25. 8d70 1801, devastator_landgear.tga, 14
 26. 9058 1801, devastator_landgear.tga, 44
 27. 9800 1801, devastator_landgear.tga, 64
 28. a3e7 1801, devastator_landgear.tga, 20
 29. a79c 1801, devastator_landgear.tga, 20
 30. ab6b 1801, devastator_landgear.tga, 14
 31. ae53 1801, devastator_landgear.tga, 14
 32. b13a 1801, devastator_landgear.tga, 44
 33. b8e1 1801, devastator_landgear.tga, 64
 34. c463 f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 20
 35. cc3f f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 20
 36. d418 f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 38
 37. e28b f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 38
 38. f102 f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 18
 39. f83d f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 18
 40. ff5a 1401, Prop_devastator.tga, 117
 41. 11561 1401, Prop_devastator.tga, 117
 42. 12b67 f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 28
 43. 135ff f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 28
 44. 14091 1401, Prop_devastator.tga, 43
 45. 1491e f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 18
 46. 1504f f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 18
 47. 15780 f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 18
 48. 15eb1 f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 18
 49. 165e2 f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 18
 50. 16d13 f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 18
 51. 17444 f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 18
 52. 17b75 f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 18
 53. 182a8 f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 12
 54. 187a3 f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 15
 55. 18da0 f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 12
 56. 1929b f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 15
 57. 1b84b f0f, devastator.tga, 19 - Airplane_dmg_2.tga, 19 - Airplane_dmg_3.tga, 17 - devastator~n.tga, 1104
 58. 34749 1701, devastator_spinner.tga, 65
 59. 35396 1101, devastatorHR.tga, 200
 60. 37faf 1601, devastatorHR_Cage.tga, 971
 61. 4134b 1701, Devastator_cockpit.tga, 675
 62. 47896 1803, Devastator_Seatback.tga, 15 - SH_grime01.tga, 120
 63. 48b41 1611, aagun_player_flak.tga, 24 - aagun_player_flak~a.tga, 204
 64. 4aaa1 1401, Prop_devastator.tga, 43
 

AirplaneHR.png

Link to comment
Share on other sites

On 4/7/2024 at 1:35 PM, shak-otay said:

(When trying MeshConvert from the DirectX SDK with 2001-devastator.x it says: "can't load",)

fmt_DirectX.zip << using my DirectX plugin for Noesis, (which I shared on xentax), it also gave the error "ImportError: Normal face count does not match vertex face count.", just by commenting out the errorб its opens it. but there seems to be a lack of polygons on the wings. xD

EDIT: ah, I think I see the problem. there are polygons with more than 4 indexes

EDIT2: I modified xfile_fmt.py specifically for *.x (2001) files of this game

Без имени-1.png

Edited by Durik256
  • Thanks 1
Link to comment
Share on other sites

3 hours ago, Durik256 said:

fmt_DirectX.zip << using my DirectX plugin for Noesis, (which I shared on xentax), it also gave the error "ImportError: Normal face count does not match vertex face count.", just by commenting out the errorб its opens it. but there seems to be a lack of polygons on the wings. xD

EDIT: ah, I think I see the problem. there are polygons with more than 4 indexes

EDIT2: I modified xfile_fmt.py specifically for *.x (2001) files of this game

Без имени-1.png

awesome! is there any chance you could investigate the 2003 version? as that is the most recent (retail) version of the game which I do need files from. I'll send some more samples if needed

 

also testing the modified xfile fmt you sent doesn't seem to work..gives that importerror you described before 😞

Edited by notameowcelot
Link to comment
Share on other sites

15 minutes ago, notameowcelot said:

also testing the modified xfile fmt you sent doesn't seem to work..gives that importerror you described before 😞

because you should comment out this line that gives the error. (line 362, 363, 364 inside xfile_parser.py) (this is also described in the message)

or replace to 'print'

        if numFaces != len(mesh.posFaces):
            print("Normal face count does not match vertex face count.")

 

Link to comment
Share on other sites

Just now, Durik256 said:

because you should comment out this line that gives the error. (line 362, 363, 364 inside xfile_parser.py) (this is also described in the message)

or replace to 'print'

        if numFaces != len(mesh.posFaces):
            print("Normal face count does not match vertex face count.")

 

oh yep! just figured that out, my bad

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...