]> git.xonotic.org Git - xonotic/xonotic.wiki.git/blob - modeldecompile-tool.md
Update Compiling: add libtool dependency
[xonotic/xonotic.wiki.git] / modeldecompile-tool.md
1 `modeldecompile` is a powerful command that decompiles any model format (DPM, MDL, IQM, MD3, BSP, etc...) to OBJ. It's available in any Darkplaces game including Xonotic and can decompile any model (weapon, player or any object/entity) present in the game filesystem (in the game installation directory and in the `data` directory inside [your user directory](http://www.xonotic.org/faq/#config).
2
3 Usage example: `modeldecompile models/weapons/v_crylink.md3`
4
5 It decompiles the mesh and the animations of a model in one action (the animations aren't distributed per actions).
6
7 An example of a .framegroups file from a player model (`okrobot1.dpm.framegroups`):
8
9 ```
10 1 41 30 0 // okrobot1 die1
11 67 56 30 0 // okrobot1 die2
12 133 11 15 1 // okrobot1 draw
13 144 6 10 1 // okrobot1 duck
14 150 17 15 1 // okrobot1 duckwalk
15 167 31 40 0 // okrobot1 duckjump
16 198 1 10 1 // okrobot1 duckidle
17 199 101 15 1 // okrobot1 idle
18 300 17 20 1 // okrobot1 jump
19 317 6 10 0 // okrobot1 pain1
20 323 6 10 0 // okrobot1 pain2
21 329 6 30 0 // okrobot1 shoot
22 335 17 15 1 // okrobot1 taunt
23 352 17 30 1 // okrobot1 run
24 369 17 30 1 // okrobot1 runbackwards
25 386 17 30 1 // okrobot1 strafeleft
26 403 17 30 1 // okrobot1 straferight
27 41 1 10 0 // okrobot4 dead1
28 122 1 10 0 // okrobot4 dead2
29 424 17 30 1 // okrobot1 forwardright
30 441 17 30 1 // okrobot1 forwardleft
31 458 17 30 1 // okrobot1 backright
32 475 17 30 1 // okrobot1 backleft
33 492 21 15 1 // okrobot1 melee
34 ```
35
36 The hacky way to obtain all animations of a model is setting the last keyframe in an exaggerated value (don't care if the fps have that value or aren't loopable) of the .framegroups file, the file must contain ONLY **one line**:
37
38 ```
39 1 9999 30 0 // LegendGuard's legendary method
40 ```
41
42 What that legendary method does is setting the initial keyframe to `1` and `9999` the last keyframe, we can know `9999` doesn't exist but reaches into a limit. (ignore `30` (means fps) and `0` (means nonloop, if `1` means loopable)).
43 In the game, execute `modeldecompile any_model.dpm` (any_model.iqm, any_model.md3, any_model.mdl, ...).
44
45 <img src="uploads/6140abcafb7b60cb154b43ce5e835105/image.png" alt="model_decompile_okrobot1_xon" width=760 />
46 <br/>
47
48 After that, go to the data directory where the files were decompiled.
49 Use the SMD files to import into [Blender](https://www.blender.org/) using [Blender Source Tools](http://steamreview.org/BlenderSourceTools/) addon.
50
51 First, import the mesh (`ref1.smd`) with the Bone Append Mode set to "Make New Armature" and "Import Animations" option disabled. <br/>
52 After, select the armature of the imported model (orange highlighted) and import other SMD file (`groupified_0_anim.smd`), before that, set the Bone Append Mode to "Validate Against Target" and enable "Import Animations" option. The animations in one action are applied to the armature.
53
54 Result (video): https://streamable.com/1egthv 
55
56 The actions can be created with the imported one to separate the keyframes of every animation.