]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - tools/quake2/qdata_heretic2/qcommon/skeletons.h
transfer from internal tree r5311 branches/1.4-gpl
[xonotic/netradiant.git] / tools / quake2 / qdata_heretic2 / qcommon / skeletons.h
1 /*\r
2 Copyright (C) 1999-2007 id Software, Inc. and contributors.\r
3 For a list of contributors, see the accompanying CONTRIBUTORS file.\r
4 \r
5 This file is part of GtkRadiant.\r
6 \r
7 GtkRadiant is free software; you can redistribute it and/or modify\r
8 it under the terms of the GNU General Public License as published by\r
9 the Free Software Foundation; either version 2 of the License, or\r
10 (at your option) any later version.\r
11 \r
12 GtkRadiant is distributed in the hope that it will be useful,\r
13 but WITHOUT ANY WARRANTY; without even the implied warranty of\r
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
15 GNU General Public License for more details.\r
16 \r
17 You should have received a copy of the GNU General Public License\r
18 along with GtkRadiant; if not, write to the Free Software\r
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\r
20 */\r
21 \r
22 #include <stdlib.h> // for size_t\r
23 #include "arrayedlist.h"\r
24 \r
25 #define JN_YAW_CHANGED          0x00000001\r
26 #define JN_PITCH_CHANGED        0x00000002\r
27 #define JN_ROLL_CHANGED         0x00000004\r
28 \r
29 // Skeleton types\r
30 enum {\r
31         SKEL_NULL = -1,\r
32         SKEL_RAVEN = 0,\r
33         SKEL_BOX,\r
34         SKEL_BEETLE,\r
35         SKEL_ELFLORD,\r
36         SKEL_PLAGUE_ELF,\r
37         SKEL_CORVUS,\r
38         NUM_SKELETONS\r
39 };\r
40 \r
41 // Raven Skeletal joints\r
42 enum {\r
43         RAVEN_LOWERBACK = 0,\r
44         RAVEN_UPPERBACK,\r
45         RAVEN_HEAD,\r
46         NUM_JOINTS_RAVEN\r
47 };\r
48 \r
49 // Box Skeletal joints\r
50 enum {\r
51         BOX_CENTER = 0,\r
52         NUM_JOINTS_BOX\r
53 };\r
54 \r
55 // Beetle Skeletal joints\r
56 enum {\r
57         BEETLE_NECK = 0,\r
58         BEETLE_HEAD,\r
59         NUM_JOINTS_BEETLE\r
60 };\r
61 \r
62 // Elflord Skeletal joints\r
63 enum {\r
64         ELFLORD_,\r
65         ELFLORD__,\r
66         NUM_JOINTS_ELFLORD\r
67 };\r
68 \r
69 // Plague Elf Skeletal joints\r
70 enum {\r
71         PLAGUE_ELF_LOWERBACK,\r
72         PLAGUE_ELF_UPPERBACK,\r
73         PLAGUE_ELF_HEAD,\r
74         NUM_JOINTS_PLAGUE_ELF\r
75 };\r
76 \r
77 // Corvus Skeletal joints\r
78 enum {\r
79         CORVUS_LOWERBACK,\r
80         CORVUS_UPPERBACK,\r
81         CORVUS_HEAD,\r
82         NUM_JOINTS_CORVUS\r
83 };\r
84 \r
85 #define NO_SWAP_FRAME -1\r
86 #define NULL_ROOT_JOINT -1\r
87 \r
88 #define MAX_ARRAYED_SKELETAL_JOINTS 255 // has max of 65,535 (if this remains at 255, net code can be changed to reflect)\r
89 #define MAX_ARRAYED_JOINT_NODES (MAX_ARRAYED_SKELETAL_JOINTS - 1)\r
90 \r
91 #define MAX_JOINTS_PER_SKELETON 8       // arbitrary small number\r
92 #define MAX_JOINT_NODES_PER_SKELETON (MAX_JOINTS_PER_SKELETON - 1)\r
93 \r
94 extern char *skeletonRootNames[];\r
95 extern int skeletonRNameOffsets[];\r
96 extern char *skeletonJointNames[];\r
97 extern int skeletonNameOffsets[];\r
98 extern int numJointsInSkeleton[];\r
99 extern char *skeletonEffectorNames[];\r
100 extern int skeletonENameOffsets[];\r
101 extern int numNodesInSkeleton[];\r
102 \r
103 typedef void (*CreateSkeleton_t)(void *skeletalJoints, size_t jointSize, struct ArrayedListNode_s *jointNodes, int rootIndex);\r
104 \r
105 extern CreateSkeleton_t SkeletonCreators[NUM_SKELETONS];\r
106 \r
107 \r