]> de.git.xonotic.org Git - xonotic/darkplaces.git/blob - model_psk.h
fix a couple compatibility issues with Nehahra
[xonotic/darkplaces.git] / model_psk.h
1
2 #ifndef MODEL_PSK_H
3 #define MODEL_PSK_H
4
5 typedef struct pskchunk_s
6 {
7         // id is one of the following:
8         // .psk:
9         // ACTRHEAD (recordsize = 0, numrecords = 0)
10         // PNTS0000 (recordsize = 12, pskpnts_t)
11         // VTXW0000 (recordsize = 16, pskvtxw_t)
12         // FACE0000 (recordsize = 12, pskface_t)
13         // MATT0000 (recordsize = 88, pskmatt_t)
14         // REFSKELT (recordsize = 120, pskboneinfo_t)
15         // RAWWEIGHTS (recordsize = 12, pskrawweights_t)
16         // .psa:
17         // ANIMHEAD (recordsize = 0, numrecords = 0)
18         // BONENAMES (recordsize = 120, pskboneinfo_t)
19         // ANIMINFO (recordsize = 168, pskaniminfo_t)
20         // ANIMKEYS (recordsize = 32, pskanimkeys_t)
21         char id[20];
22         // in .psk always 0x1e83b9
23         // in .psa always 0x2e
24         int version;
25         int recordsize;
26         int numrecords;
27 }
28 pskchunk_t;
29
30 typedef struct pskpnts_s
31 {
32         float origin[3];
33 }
34 pskpnts_t;
35
36 typedef struct pskvtxw_s
37 {
38         unsigned short pntsindex; // index into PNTS0000 chunk
39         unsigned char unknown1[2]; // seems to be garbage
40         float texcoord[2];
41         unsigned char mattindex; // index into MATT0000 chunk
42         unsigned char unknown2; // always 0?
43         unsigned char unknown3[2]; // seems to be garbage
44 }
45 pskvtxw_t;
46
47 typedef struct pskface_s
48 {
49         unsigned short vtxwindex[3]; // triangle
50         unsigned char mattindex; // index into MATT0000 chunk
51         unsigned char unknown; // seems to be garbage
52         unsigned int group; // faces seem to be grouped, possibly for smoothing?
53 }
54 pskface_t;
55
56 typedef struct pskmatt_s
57 {
58         char name[64];
59         int unknown[6]; // observed 0 0 0 0 5 0
60 }
61 pskmatt_t;
62
63 typedef struct pskpose_s
64 {
65         float quat[4];
66         float origin[3];
67         float unknown; // probably a float, always seems to be 0
68         float size[3];
69 }
70 pskpose_t;
71
72 typedef struct pskboneinfo_s
73 {
74         char name[64];
75         int unknown1;
76         int numchildren;
77         int parent; // root bones have 0 here
78         pskpose_t basepose;
79 }
80 pskboneinfo_t;
81
82 typedef struct pskrawweights_s
83 {
84         float weight;
85         int pntsindex;
86         int boneindex;
87 }
88 pskrawweights_t;
89
90 typedef struct pskaniminfo_s
91 {
92         char name[64];
93         char group[64];
94         int numbones;
95         int unknown1;
96         int unknown2;
97         int unknown3;
98         float unknown4;
99         float playtime; // not really needed
100         float fps; // frames per second
101         int unknown5;
102         int firstframe;
103         int numframes;
104         // firstanimkeys = (firstframe + frameindex) * numbones
105 }
106 pskaniminfo_t;
107
108 typedef struct pskanimkeys_s
109 {
110         float origin[3];
111         float quat[4];
112         float frametime;
113 }
114 pskanimkeys_t;
115
116 #endif
117