OpenMoHAA 0.82.0
Loading...
Searching...
No Matches
tiki_shared.h
1/*
2===========================================================================
3Copyright (C) 2023 the OpenMoHAA team
4
5This file is part of OpenMoHAA source code.
6
7OpenMoHAA source code is free software; you can redistribute it
8and/or modify it under the terms of the GNU General Public License as
9published by the Free Software Foundation; either version 2 of the License,
10or (at your option) any later version.
11
12OpenMoHAA source code is distributed in the hope that it will be
13useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with OpenMoHAA source code; if not, write to the Free Software
19Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20===========================================================================
21*/
22
23// tiki_shared.h : Skeletor
24
25#pragma once
26
27#ifdef __cplusplus
28# include "../skeletor/skeletor_name_lists.h"
29#endif
30
31#include "../skeletor/skeletor_model_file_format.h"
32
33// animation flags
34#define TAF_RANDOM 0x1 // random
35#define TAF_NOREPEAT 0x2 // no loop
36#define TAF_DONTREPEAT (TAF_RANDOM | TAF_NOREPEAT) // don't repeat
37#define TAF_DEFAULT_ANGLES 0x8 // ?
38#define TAF_NOTIMECHECK 0x10 // don't check for timing
39#define TAF_DELTADRIVEN 0x20 // animation is based on skeletor animation's delta
40#define TAF_AUTOSTEPS 0x400 // footsteps for dogs
41#define TAF_AUTOSTEPS_RUNNING 0x800 // footsteps for dogs
42#define TAF_AUTOSTEPS_EQUIPMENT 0x1000
43
44// skeletor animation flags
45#define TAF_HASDELTA 0x40
46#define TAF_HASMORPH 0x80
47#define TAF_HASUPPER 0x100
48
49// tiki anim command frames
50#define TIKI_FRAME_LAST -5 // exec at last
51#define TIKI_FRAME_END -4 // exec at end
52#define TIKI_FRAME_ENTRY -3 // exec at entry
53#define TIKI_FRAME_EXIT -2 // exec at exit
54#define TIKI_FRAME_EVERY -1 // exec each frame
55#define TIKI_FRAME_FIRST 0 // exec at first frame
56#define TIKI_FRAME_MAXFRAMERATE 60
57
58#define TIKI_SKEL_LOD_INDEXES 10
59
60// skb skeletor
61#define TIKI_SKB_HEADER_IDENT (*(int *)"SKL ")
62#define TIKI_SKB_HEADER_VER_3 3
63#define TIKI_SKB_HEADER_VERSION 4
64
65// skd skeletor
66#define TIKI_SKD_HEADER_IDENT (*(int *)"SKMD")
67#define TIKI_SKD_HEADER_OLD_VERSION 5
68#define TIKI_SKD_HEADER_VERSION 6
69
70// skc skeletor animations
71#define TIKI_SKC_HEADER_IDENT (*(int *)"SKAN")
72#define TIKI_SKC_HEADER_OLD_VERSION 13
73#define TIKI_SKC_HEADER_VERSION 14
74
75// tiki limitations
76#define TIKI_MAX_BONES 100
77#define TIKI_MAX_VERTEXES 1000
78#define TIKI_MAX_TRIANGLES 2000
79#define TIKI_MAX_SKELCACHE 1024
80#define TIKI_MAX_COMMANDS 128
81
82#define TIKI_MAX_ENTITIES 2048
83#define TIKI_MAX_ENTITY_CACHE_PER_ENT 2
84#define TIKI_MAX_ENTITY_CACHE (TIKI_MAX_ENTITIES*TIKI_MAX_ENTITY_CACHE_PER_ENT)
85
86// tiki surface flags
87#define TIKI_SURF_SKIN1 (1 << 0)
88#define TIKI_SURF_SKIN2 (1 << 1)
89#define TIKI_SURF_SKIN3 (TIKI_SURF_SKIN1 | TIKI_SURF_SKIN2)
90#define TIKI_SURF_NODRAW (1 << 2)
91#define TIKI_SURF_CROSSFADE (1 << 6)
92#define TIKI_SURF_NODAMAGE (1 << 7)
93#define TIKI_SURF_NOMIPMAPS (1 << 8)
94#define TIKI_SURF_NOPICMIP (1 << 9)
95
96#define MAX_SKELMODELS 12
97#define MAX_TIKI_SHADER 4
98#define MAX_TIKI_ALIASES 4095
99#define MAX_GLOBAL_FROM_LOCAL 200
100
101#define MAX_LOD_CURVE_POINTS 5
102#define MAX_LOD_CURVE_CONSTS 4
103
104typedef struct AliasList_s AliasList_t;
105typedef struct AliasListNode_s AliasListNode_t;
106
107typedef struct tiki_singlecmd_s {
108 int num_args;
109 char **args;
110} tiki_singlecmd_t;
111
112typedef struct tiki_cmd_s {
113 int num_cmds;
114 tiki_singlecmd_t cmds[TIKI_MAX_COMMANDS];
115} tiki_cmd_t;
116
117#ifdef __cplusplus
118
119typedef class skelChannelList_s
120{
121public:
122 short int m_numChannels;
123
124private:
125 short int m_numLocalFromGlobal;
126 short int *m_chanLocalFromGlobal;
127
128public:
129 short int m_chanGlobalFromLocal[MAX_GLOBAL_FROM_LOCAL];
130
131 int NumChannels(void) const;
132 void ZeroChannels(void);
133 void PackChannels(void);
134 void InitChannels(void);
135 void CleanUpChannels();
136 int GlobalChannel(int localchannel) const;
137 int LocalChannel(int channel) const;
138 int GetLocalFromGlobal(int globalChannel) const;
139 void SetLocalFromGlobal(int channel, int localchannel);
140 qboolean HasChannel(ChannelNameTable *nameTable, const char *channelName) const;
141 qboolean HasChannel(int channel) const;
142 int AddChannel(int newGlobalChannelNum);
143 const char *ChannelName(ChannelNameTable *nameTable, int localChannelNum) const;
144} skelChannelList_c;
145
146#else
147
148typedef struct skelChannelList_s {
149 short int m_numChannels;
150 short int m_numLocalFromGlobal;
151 short int *m_chanLocalFromGlobal;
152 short int m_chanGlobalFromLocal[MAX_GLOBAL_FROM_LOCAL];
153} skelChannelList_c;
154
155#endif
156
157typedef struct dtikianim_s {
158 char *name;
159 int num_anims;
160 void *alias_list;
161 int num_client_initcmds;
162 struct dtikicmd_s *client_initcmds;
163 int num_server_initcmds;
164 struct dtikicmd_s *server_initcmds;
165 byte *modelData;
166 size_t modelDataSize;
167 vec3_t mins;
168 vec3_t maxs;
169 short int *m_aliases;
170 char *headmodels;
171 char *headskins;
172 qboolean bIsCharacter;
173 struct dtikianimdef_s *animdefs[1];
174} dtikianim_t;
175
176typedef struct dtiki_s {
177 char *name;
178 dtikianim_t *a;
179 void *skeletor;
180 int num_surfaces;
181 struct dtikisurface_s *surfaces;
182 float load_scale;
183 float lod_scale;
184 float lod_bias;
185 vec3_t light_offset;
186 vec3_t load_origin;
187 float radius;
188 skelChannelList_c m_boneList;
189 int numMeshes;
190 short int mesh[1];
191
192#ifdef __cplusplus
193 int GetBoneNumFromName(const char *name);
194 const char *GetBoneNameFromNum(int num) const;
195#endif
196} dtiki_t;
197
198typedef struct {
199 int ident;
200 int version;
201 char name[64];
202 int numSurfaces;
203 int numBones;
204 int ofsBones;
205 int ofsSurfaces;
206 int ofsEnd;
207 int lodIndex[TIKI_SKEL_LOD_INDEXES];
208 int numBoxes;
209 int ofsBoxes;
210 int numMorphTargets;
211 int ofsMorphTargets;
212 // Added in 2.0 (SKD version 6)
213 float scale;
215
216typedef struct {
217 short int parent;
218 short int boxIndex;
219 int flags;
220 char name[64];
222
223typedef struct {
224 int ident;
225 char name[64];
226 int numTriangles;
227 int numVerts;
228 int staticSurfProcessed;
229 int ofsTriangles;
230 int ofsVerts;
231 int ofsCollapse;
232 int ofsEnd;
233 int ofsCollapseIndex;
235
236typedef short int skelIndex_t;
237
238typedef struct skelSurfaceGame_s {
239 int ident;
240 char name[MAX_QPATH];
241 int numTriangles;
242 int numVerts;
243 vec4_t *pStaticXyz;
244 vec4_t *pStaticNormal;
245 vec2_t (*pStaticTexCoords)[2];
246 skelIndex_t *pTriangles;
247 struct skeletorVertex_s *pVerts;
248 skelIndex_t *pCollapse;
249 struct skelSurfaceGame_s *pNext;
250 skelIndex_t *pCollapseIndex;
251
252#ifdef __cplusplus
254#endif
255} skelSurfaceGame_t;
256
257typedef struct skelHeaderGame_s {
258 int version;
259 char name[64];
260 int numSurfaces;
261 int numBones;
262 struct boneData_s *pBones;
263 skelSurfaceGame_t *pSurfaces;
264 int lodIndex[TIKI_SKEL_LOD_INDEXES];
265 int numBoxes;
266 struct skelHitBox_s *pBoxes;
267 struct lodControl_s *pLOD;
268 int numMorphTargets;
269 char *pMorphTargets;
270 float scale;
271} skelHeaderGame_t;
272
273typedef struct boneData_s {
274 short int channel;
275 boneType_t boneType;
276 short int parent;
277 short int numChannels;
278 short int numRefs;
279 short int channelIndex[2];
280 short int refIndex[2];
281 vec3_t offset;
282 float length;
283 float weight;
284 float bendRatio;
285 float bendMax;
286 float spinRatio;
287} boneData_t;
288
289typedef struct tikiSurface_s {
290 int ident;
291 char name[64];
292 int numFrames;
293 int numVerts;
294 int minLod;
295 int numTriangles;
296 int ofsTriangles;
297 int ofsCollapseMap;
298 int ofsSt;
299 int ofsXyzNormals;
300 int ofsEnd;
301} tikiSurface_t;
302
303typedef struct dtikisurface_s {
304 char name[MAX_QPATH];
305 char shader[MAX_TIKI_SHADER][MAX_QPATH];
306 int hShader[MAX_TIKI_SHADER];
307 int numskins;
308 int flags;
309 float damage_multiplier;
310} dtikisurface_t;
311
312/*typedef struct tikiFrame_s {
313 vec3_t bounds[ 2 ];
314 vec3_t scale;
315 vec3_t offset;
316 vec3_t delta;
317 float radius;
318 float frametime;
319} tikiFrame_t;*/
320
321typedef struct tiki_tess_data_s {
322 int ident;
323 tikiSurface_t *newsurface;
324 tikiSurface_t *oldsurface;
325} tiki_tess_data_t;
326
327typedef struct skelWeight_s {
328 int boneIndex;
329 float boneWeight;
330 vec3_t offset;
331} skelWeight_t;
332
333typedef struct skelVertex_s {
334 vec3_t normal;
335 vec2_t texCoords;
336 int numWeights;
337 skelWeight_t weights[1];
338} skelVertex_t;
339
340typedef struct skeletorVertex_s {
341 vec3_t normal;
342 vec2_t texCoords;
343 int numWeights;
344 int numMorphs;
345} skeletorVertex_t;
346
347typedef struct skeletorVertexGame_s {
348 vec3_t normal;
349 vec2_t texCoords;
350 int numWeights;
351 int numMorphs;
352} skeletorVertexGame_t;
353
354typedef struct staticSurface_s {
355 int ident;
356 int ofsStaticData;
357 skelSurfaceGame_t *surface;
358 int meshNum;
359} staticSurface_t;
360
361typedef struct {
362 int morphIndex;
363 vec3_t offset;
365
366typedef struct dtikianimdef_s {
367 char alias[48];
368 float weight;
369 float blendtime;
370 int flags;
371 int num_client_cmds;
372 struct dtikicmd_s *client_cmds;
373 int num_server_cmds;
374 struct dtikicmd_s *server_cmds;
375} dtikianimdef_t;
376
377typedef struct {
378 short int shortQuat[4];
379 short int shortOffset[3];
380 short int pad;
381} skelBone_t;
382
383typedef struct {
384 vec3_t bounds[2];
385 float radius;
386 vec3_t delta;
387 skelBone_t bones[1];
389
390typedef struct {
391 int ident;
392 int version;
393 char name[64];
394 int type;
395 int numFrames;
396 int numbones;
397 float totaltime;
398 float frametime;
399 vec3_t totaldelta;
400 int ofsFrames;
402
403typedef struct {
404 float offset[4];
405 float matrix[3][4];
407
408typedef struct {
409 float pos;
410 float val;
412
413typedef struct {
414 float base;
415 float scale;
416 float cutoff;
418
419typedef struct lodControl_s {
420 float minMetric;
421 float maxMetric;
422 lodCurvePoint_t curve[MAX_LOD_CURVE_POINTS];
423 lodCurvePointConstants_t consts[MAX_LOD_CURVE_CONSTS];
424} lodControl_t;
425
426typedef struct {
427 char path[96];
428 skelHeaderGame_t *skel;
429 size_t size;
430 int numuses;
432
433typedef int skeletorMorphCache_t;
Definition alias.h:40
Definition alias.h:63
Definition skeletor_name_lists.h:71
Definition tiki_shared.h:273
Definition tiki_shared.h:176
Definition tiki_shared.h:157
Definition tiki_shared.h:366
Definition tiki.h:87
Definition tiki_shared.h:303
Definition tiki_shared.h:419
Definition tiki_shared.h:413
Definition tiki_shared.h:408
Definition tiki_shared.h:390
Definition tiki_shared.h:403
Definition tiki_shared.h:216
Definition tiki_shared.h:377
Definition tiki_shared.h:148
Definition tiki_shared.h:383
Definition tiki_shared.h:257
Definition tiki_shared.h:198
Definition skeletor_model_file_format.h:60
Definition tiki_shared.h:238
Definition tiki_shared.h:223
Definition tiki_shared.h:333
Definition tiki_shared.h:327
Definition tiki_shared.h:426
Definition tiki_shared.h:361
Definition tiki_shared.h:347
Definition tiki_shared.h:340
Definition tiki_shared.h:354
Definition tiki_shared.h:289
Definition tiki_shared.h:112
Definition tiki_shared.h:107
Definition tiki_shared.h:321