1 enum
2 {
3     G_DEMO = 0, G_EDITMODE, G_DEATHMATCH, G_CAPTURE, G_DEFEND, G_BOMBER, G_RACE, G_MAX,
4     G_START = G_EDITMODE, G_PLAY = G_DEATHMATCH,
5     G_RAND = G_BOMBER-G_DEATHMATCH+1, G_COUNT = G_MAX-G_PLAY,
6     G_NEVER = (1<<G_DEMO)|(1<<G_EDITMODE),
7     G_LIMIT = (1<<G_DEATHMATCH)|(1<<G_CAPTURE)|(1<<G_DEFEND)|(1<<G_BOMBER),
8     G_ALL = (1<<G_DEMO)|(1<<G_EDITMODE)|(1<<G_DEATHMATCH)|(1<<G_CAPTURE)|(1<<G_DEFEND)|(1<<G_BOMBER)|(1<<G_RACE),
9     G_SW = (1<<G_RACE),
10 };
11 enum
12 {
13     G_M_MULTI = 0, G_M_FFA, G_M_COOP, G_M_INSTA, G_M_MEDIEVAL, G_M_KABOOM, G_M_DUEL, G_M_SURVIVOR,
14     G_M_CLASSIC, G_M_ONSLAUGHT, G_M_FREESTYLE, G_M_VAMPIRE, G_M_RESIZE, G_M_HARD, G_M_BASIC,
15     G_M_GSP, G_M_GSP1 = G_M_GSP, G_M_GSP2, G_M_GSP3, G_M_NUM,
16     G_M_GSN = G_M_NUM-G_M_GSP,
17     G_M_ALL = (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
18     G_M_FILTER = (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
19     G_M_ROTATE = (1<<G_M_FFA)|(1<<G_M_CLASSIC),
20     G_M_SW = (1<<G_M_INSTA)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM),
21     G_M_DK = (1<<G_M_DUEL)|(1<<G_M_SURVIVOR),
22     G_M_IM = (1<<G_M_INSTA)|(1<<G_M_MEDIEVAL),
23 };
24 enum { G_F_GSP = 0, G_F_NUM };
25 
26 enum { G_S_WAITING = 0, G_S_GETMAP, G_S_SENDMAP, G_S_READYING, G_S_GAMEINFO, G_S_PLAYING, G_S_OVERTIME, G_S_INTERMISSION, G_S_VOTING, G_S_MAX };
27 #ifdef GAMESERVER
28 const char *gamestates[3][G_S_MAX] = {
29     { "waiting", "getmap", "sendmap", "readying", "gameinfo", "playing", "overtime", "intermission", "voting" },
30     { "waiting to start", "server getting map", "server sending map", "waiting for ready players", "waiting for game information", "playing", "overtime", "intermission", "voting in progress" },
31     { "Waiting to start", "Server getting map", "Server sending map", "Waiting for ready players", "Waiting for game information", "Playing", "Overtime", "Intermission", "Voting in progress" }
32 };
33 #else
34 extern const char *gamestates[3][G_S_MAX];
35 #endif
36 #define gs_waiting(a) (a >= G_S_WAITING && a <= G_S_GAMEINFO)
37 #define gs_playing(a) (a >= G_S_PLAYING && a <= G_S_OVERTIME)
38 #define gs_intermission(a) (a >= G_S_INTERMISSION && a <= G_S_VOTING)
39 
40 struct gametypes
41 {
42     int type, flags, implied, mutators[G_M_GSN+1];
43     const char *name, *sname, *gsp[G_M_GSN], *desc, *gsd[G_M_GSN];
44 };
45 struct mutstypes
46 {
47     int type, implied, mutators;
48     const char *name, *desc;
49 };
50 #ifdef GAMESERVER
51 gametypes gametype[] = {
52     {
53         G_DEMO, 0, 0, { 0, 0, 0, 0 },
54         "demo", "demo", { "", "", "" },
55         "play back previously recorded games", { "", "", "" },
56     },
57     {
58         G_EDITMODE, 0, (1<<G_M_FFA)|(1<<G_M_CLASSIC),
59         {
60             (1<<G_M_FFA)|(1<<G_M_CLASSIC)|(1<<G_M_FREESTYLE),
61             0, 0, 0
62         },
63         "editing", "editing", { "", "", "" },
64         "create and edit existing maps", { "", "", "" },
65     },
66     {
67         G_DEATHMATCH, 0, 0,
68         {
69             (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2),
70             (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1),
71             (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_CLASSIC)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP2),
72             0
73         },
74         "deathmatch", "dm", { "gladiator", "oldschool", "" },
75         "shoot to kill and increase score by fragging", { "fight in a confined area with increased pushback from damage", "secure the most number of frags instead of points", "" },
76     },
77     {
78         G_CAPTURE, 0, 0,
79         {
80             (1<<G_M_MULTI)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
81             (1<<G_M_MULTI)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1),
82             (1<<G_M_MULTI)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP2),
83             (1<<G_M_MULTI)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP3)
84         },
85         "capture-the-flag", "capture", { "quick", "defend", "protect" },
86         "take the enemy flag and return it to the base to score", { "dropped flags instantly return to base", "dropped flags must be defended until they reset", "protect the flag and hold the enemy flag to score" },
87     },
88     {
89         G_DEFEND, 0, 0,
90         {
91             (1<<G_M_MULTI)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_CLASSIC)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2),
92             (1<<G_M_MULTI)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_CLASSIC)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2),
93             (1<<G_M_MULTI)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_CLASSIC)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2),
94             0
95         },
96         "defend-and-control", "defend", { "quick", "king", "" },
97         "defend control points to score", { "control points secure quicker than normal", "remain king of the hill to score", ""},
98     },
99     {
100         G_BOMBER, (1<<G_F_GSP), 0,
101         {
102             (1<<G_M_MULTI)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
103             (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_CLASSIC)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1),
104             (1<<G_M_MULTI)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
105             (1<<G_M_MULTI)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_CLASSIC)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP2)|(1<<G_M_GSP3)
106         },
107         "bomber-ball", "bomber", { "hold", "basket", "attack" },
108         "carry the bomb into the enemy goal to score", { "hold the bomb as long as possible to score", "throw the bomb into the enemy goal to score", "teams take turns attacking and defending" },
109     },
110     {
111         G_RACE, (1<<G_F_GSP), 0,
112         {
113             (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
114             (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
115             (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_ONSLAUGHT)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
116             (1<<G_M_MULTI)|(1<<G_M_INSTA)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3)
117         },
118         "race", "race", { "timed", "endurance", "gauntlet" },
119         "compete for the most number of laps", { "compete for the fastest time completing a lap", "impulse meter does not reset at all", "teams take turns running the gauntlet" },
120     }
121 };
122 mutstypes mutstype[] = {
123     {
124         G_M_MULTI, (1<<G_M_MULTI),
125         (1<<G_M_MULTI)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
126         "multi", "four teams battle to determine the winning side"
127     },
128     {
129         G_M_FFA, (1<<G_M_FFA),
130         (1<<G_M_FFA)|(1<<G_M_INSTA)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
131         "ffa", "every player for themselves"
132     },
133     {
134         G_M_COOP, (1<<G_M_COOP),
135         (1<<G_M_MULTI)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
136         "coop", "players versus drones"
137     },
138     {
139         G_M_INSTA, (1<<G_M_INSTA),
140         (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_FREESTYLE)|(1<<G_M_RESIZE)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
141         "instagib", "one hit kills instantly"
142     },
143     {
144         G_M_MEDIEVAL, (1<<G_M_MEDIEVAL),
145         (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_MEDIEVAL)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
146         "medieval", "players spawn only with swords"
147     },
148     {
149         G_M_KABOOM,  (1<<G_M_KABOOM),
150         (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
151         "kaboom", "players spawn with explosives only"
152     },
153     {
154         G_M_DUEL, (1<<G_M_DUEL),
155         (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_DUEL)|(1<<G_M_CLASSIC)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
156         "duel", "one on one battles to determine the winner"
157     },
158     {
159         G_M_SURVIVOR, (1<<G_M_SURVIVOR),
160         (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
161         "survivor", "players battle to determine the winner"
162     },
163     {
164         G_M_CLASSIC,    (1<<G_M_CLASSIC),
165         (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
166         "classic", "weapons must be collected from spawns in the arena"
167     },
168     {
169         G_M_ONSLAUGHT, (1<<G_M_ONSLAUGHT),
170         (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
171         "onslaught", "waves of enemies fill the battle arena"
172     },
173     {
174         G_M_FREESTYLE, (1<<G_M_FREESTYLE),
175         (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
176         "freestyle", "players can parkour without limits"
177     },
178     {
179         G_M_VAMPIRE, (1<<G_M_VAMPIRE),
180         (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
181         "vampire", "deal damage to regenerate health"
182     },
183     {
184         G_M_RESIZE, (1<<G_M_RESIZE),
185         (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
186         "resize", "players change size depending on their health"
187     },
188     {
189         G_M_HARD, (1<<G_M_HARD),
190         (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
191         "hard", "no health regeneration, no radar"
192     },
193     {
194         G_M_BASIC, (1<<G_M_BASIC),
195         (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
196         "basic", "players only have the basic weapons that they spawn with"
197     },
198     {
199         G_M_GSP1, (1<<G_M_GSP1),
200         (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
201         "gsp1", ""
202     },
203     {
204         G_M_GSP2, (1<<G_M_GSP2),
205         (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
206         "gsp2", ""
207     },
208     {
209         G_M_GSP3, (1<<G_M_GSP3),
210         (1<<G_M_MULTI)|(1<<G_M_FFA)|(1<<G_M_COOP)|(1<<G_M_INSTA)|(1<<G_M_MEDIEVAL)|(1<<G_M_KABOOM)|(1<<G_M_DUEL)|(1<<G_M_SURVIVOR)|(1<<G_M_CLASSIC)|(1<<G_M_ONSLAUGHT)|(1<<G_M_FREESTYLE)|(1<<G_M_VAMPIRE)|(1<<G_M_RESIZE)|(1<<G_M_HARD)|(1<<G_M_BASIC)|(1<<G_M_GSP1)|(1<<G_M_GSP2)|(1<<G_M_GSP3),
211         "gsp3", ""
212     },
213 };
214 #else
215 extern gametypes gametype[];
216 extern mutstypes mutstype[];
217 #endif
218 
219 #define m_game(a)           (a > -1 && a < G_MAX)
220 #define m_check(a,b,c,d)    ((!a || (a < 0 ? !((0-a)&(1<<(c-G_PLAY))) : a&(1<<(c-G_PLAY)))) && (!b || (b < 0 ? !((0-b)&d) : b&d)))
221 #define m_local(a)          (a == G_DEMO)
222 
223 #define m_demo(a)           (a == G_DEMO)
224 #define m_edit(a)           (a == G_EDITMODE)
225 #define m_dm(a)             (a == G_DEATHMATCH)
226 #define m_capture(a)        (a == G_CAPTURE)
227 #define m_defend(a)         (a == G_DEFEND)
228 #define m_bomber(a)         (a == G_BOMBER)
229 #define m_race(a)           (a == G_RACE)
230 
231 #define m_play(a)           (a >= G_PLAY)
232 #define m_affinity(a)       (m_capture(a) || m_defend(a) || m_bomber(a))
233 
234 #define m_multi(a,b)        ((b&(1<<G_M_MULTI)) || (gametype[a].implied&(1<<G_M_MULTI)))
235 #define m_ffa(a,b)          ((b&(1<<G_M_FFA)) || (gametype[a].implied&(1<<G_M_FFA)))
236 #define m_coop(a,b)         ((b&(1<<G_M_COOP)) || (gametype[a].implied&(1<<G_M_COOP)))
237 #define m_insta(a,b)        ((b&(1<<G_M_INSTA)) || (gametype[a].implied&(1<<G_M_INSTA)))
238 #define m_medieval(a,b)     ((b&(1<<G_M_MEDIEVAL)) || (gametype[a].implied&(1<<G_M_MEDIEVAL)))
239 #define m_kaboom(a,b)       ((b&(1<<G_M_KABOOM)) || (gametype[a].implied&(1<<G_M_KABOOM)))
240 #define m_duel(a,b)         ((b&(1<<G_M_DUEL)) || (gametype[a].implied&(1<<G_M_DUEL)))
241 #define m_survivor(a,b)     ((b&(1<<G_M_SURVIVOR)) || (gametype[a].implied&(1<<G_M_SURVIVOR)))
242 #define m_classic(a,b)      ((b&(1<<G_M_CLASSIC)) || (gametype[a].implied&(1<<G_M_CLASSIC)))
243 #define m_onslaught(a,b)    ((b&(1<<G_M_ONSLAUGHT)) || (gametype[a].implied&(1<<G_M_ONSLAUGHT)))
244 #define m_freestyle(a,b)    ((b&(1<<G_M_FREESTYLE)) || (gametype[a].implied&(1<<G_M_FREESTYLE)))
245 #define m_vampire(a,b)      ((b&(1<<G_M_VAMPIRE)) || (gametype[a].implied&(1<<G_M_VAMPIRE)))
246 #define m_resize(a,b)       ((b&(1<<G_M_RESIZE)) || (gametype[a].implied&(1<<G_M_RESIZE)))
247 #define m_hard(a,b)         ((b&(1<<G_M_HARD)) || (gametype[a].implied&(1<<G_M_HARD)))
248 #define m_basic(a,b)        ((b&(1<<G_M_BASIC)) || (gametype[a].implied&(1<<G_M_BASIC)))
249 
250 #define m_gsp1(a,b)         ((b&(1<<G_M_GSP1)) || (gametype[a].implied&(1<<G_M_GSP1)))
251 #define m_gsp2(a,b)         ((b&(1<<G_M_GSP2)) || (gametype[a].implied&(1<<G_M_GSP2)))
252 #define m_gsp3(a,b)         ((b&(1<<G_M_GSP3)) || (gametype[a].implied&(1<<G_M_GSP3)))
253 #define m_gsp(a,b)          (m_gsp1(a,b) || m_gsp2(a,b) || m_gsp3(a,b))
254 
255 #define m_dm_gladiator(a,b) (m_dm(a) && m_gsp1(a, b))
256 #define m_dm_oldschool(a,b) (m_dm(a) && m_gsp2(a, b))
257 
258 #define m_ctf_quick(a,b)    (m_capture(a) && m_gsp1(a, b))
259 #define m_ctf_defend(a,b)   (m_capture(a) && m_gsp2(a, b))
260 #define m_ctf_protect(a,b)  (m_capture(a) && m_gsp3(a, b))
261 
262 #define m_dac_quick(a,b)    (m_defend(a) && m_gsp1(a, b))
263 #define m_dac_king(a,b)     (m_defend(a) && m_gsp2(a, b))
264 
265 #define m_bb_hold(a,b)      (m_bomber(a) && m_gsp1(a, b))
266 #define m_bb_basket(a,b)    (m_bomber(a) && m_gsp2(a, b))
267 #define m_bb_attack(a,b)    (m_bomber(a) && m_gsp3(a, b))
268 
269 #define m_ra_timed(a,b)     (m_race(a) && m_gsp1(a, b))
270 #define m_ra_endurance(a,b) (m_race(a) && m_gsp2(a, b))
271 #define m_ra_gauntlet(a,b)  (m_race(a) && m_gsp3(a, b))
272 
273 #define m_team(a,b)         (m_multi(a, b) || !m_ffa(a, b))
274 #define m_sweaps(a,b)       (m_dm_gladiator(a, b) || (m_race(a) && !m_ra_gauntlet(a, b)) || m_insta(a, b) || m_medieval(a, b) || m_kaboom(a, b))
275 #define m_loadout(a,b)      (!m_classic(a, b) && !m_sweaps(a, b))
276 #define m_duke(a,b)         (m_duel(a, b) || m_survivor(a, b))
277 #define m_regen(a,b)        (!m_hard(a,b) && (!m_duke(a, b) || DSG(a, b, regen)) && !m_insta(a, b))
278 #define m_ghost(a,b)        (m_race(a) && !m_ra_gauntlet(a, b))
279 #define m_bots(a)           (m_play(a) && !m_race(a))
280 #define m_botbal(a,b)       (m_duel(a, b) ? G(botbalanceduel) : (m_survivor(a, b) ? G(botbalancesurvivor) : G(botbalance)))
281 #define m_laptime(a,b)      (m_ra_timed(a, b))
282 #define m_impulsemeter(a,b) (m_ra_endurance(a, b) || !m_freestyle(a, b))
283 #define m_nopoints(a,b)     (m_duke(a, b) || m_bb_hold(a, b) || m_race(a))
284 #define m_points(a,b)       (!m_nopoints(a, b))
285 #define m_usetotals(a,b)    (!m_race(a))
286 
287 #define m_weapon(at,a,b)    (m_medieval(a, b) ? AA(at, weaponmedieval) : (m_kaboom(a, b) ? AA(at, weaponkaboom) : (m_insta(a, b) ? AA(at, weaponinsta) : (m_race(a) && !m_ra_gauntlet(a, b) ? AA(at, weaponrace) : (m_dm_gladiator(a, b) ? AA(at, weapongladiator) : AA(at, weaponspawn))))))
288 #define m_delay(at,a,b,c)   ((m_play(a) || at >= A_ENEMY) && !m_duke(a,b) ? int((m_race(a) ? (!m_ra_gauntlet(a, b) || c == T_ALPHA ? AA(at, spawndelayrace) : AA(at, spawndelaygauntlet)) : (m_bomber(a) ? AA(at, spawndelaybomber) : (m_defend(a) ? AA(at, spawndelaydefend) : (m_capture(a) ? AA(at, spawndelaycapture) : AA(at, spawndelay)))))*(m_insta(a, b) ? AA(at, spawndelayinstascale) : 1.f)) : 0)
289 #define m_protect(a,b)      (m_duke(a,b) ? DSG(a, b, protect) : (m_insta(a, b) ? G(instaprotect) : G(spawnprotect)))
290 #define m_health(a,b,c)     (m_insta(a,b) ? 1 : AA(c, health))
291 #define m_maxhealth(a,b,c)  (int(m_health(a, b, c)*(m_vampire(a,b) ? G(maxhealthvampire) : G(maxhealth))))
292 #define m_swapteam(a,b)     (m_team(a, b) && (!m_race(a) || m_ra_gauntlet(a, b)) && m_play(a) && (G(teambalanceduel) || !m_duel(a, b)) && !m_coop(gamemode, mutators) && G(teambalance) >= 3 && G(teambalanceswap))
293 #define m_balteam(a,b,c)    (m_team(a, b) && (!m_race(a) || m_ra_gauntlet(a, b)) && m_play(a) && (G(teambalanceduel) || !m_duel(a, b)) && !m_coop(gamemode, mutators) && G(teambalance) >= c)
294 #define m_forcebal(a,b)     (m_bb_attack(a, b) || m_ra_gauntlet(a, b))
295 #define m_balance(a,b,c)    (m_team(a, b) && (!m_race(a) || m_ra_gauntlet(a, b)) && m_play(a) && (m_forcebal(a, b) || ((G(balanceduke) || !m_duke(a, b)) && ((G(balancemaps) >= 0 ? G(balancemaps) : G(mapbalance)) >= (m_affinity(a) ? 1 : (c ? 2 : 3))))))
296 #define m_balreset(a,b)     (G(balancereset) && (G(balancereset) == 2 || m_capture(a) || m_bomber(a) || m_race(a) || m_duke(a, b)))
297 
298 #define w_carry(w1,w2)      (isweap(w1) && w1 != W_CLAW && w1 < W_ALL && (!isweap(w2) || (w1 != w2 && (w2 != W_GRENADE || w1 != W_MINE))) && (w1 == W_ROCKET || (w1 >= W_OFFSET && w1 < W_ITEM)))
299 #define w_reload(w1,w2)     (isweap(w1) && (w1 >= W_ALL || (w1 >= W_OFFSET && w1 < W_ITEM) || (isweap(w2) && (w1 == w2 || (w2 == W_GRENADE && w1 == W_MINE)))))
300 #define w_item(w1,w2)       (isweap(w1) && (w1 >= W_OFFSET && w1 < W_ALL && (!isweap(w2) || (w1 != w2 && (w2 != W_GRENADE || w1 != W_MINE)))))
301 #define w_attr(a,b,t,w1,w2) (t != WEAPON || m_edit(a) ? w1 : (w1 != w2 ? (!m_classic(a, b) ? (w1 >= W_ITEM ? w1 : -1) : (w1 >= W_OFFSET && w1 < W_ALL ? w1 : -1)) : (w1 != W_GRENADE ? W_GRENADE : W_MINE)))
302 #define w_spawn(weap)       int(ceilf(G(itemspawntime)*W(weap, frequency)))
303 
304 #define m_mmvar(a,b,c)      (m_dm(a) ? \
305                                 (m_duel(a, b) ? G(c##duel) : \
306                                     (m_survivor(a, b) ? G(c##survivor) : \
307                                         (m_dm_gladiator(a, b) ? G(c##gladiator) : G(c)) \
308                                     ) \
309                                 ) : \
310                                 (m_capture(a) ? G(c##capture) : \
311                                     (m_defend(a) ? \
312                                         (m_dac_king(a, b) ? G(c##defendking) : G(c##defend)) : \
313                                         (m_bomber(a) ? (m_bb_hold(a, b) ? G(c##bomberhold) : G(c##bomber)) : \
314                                             (m_race(a) ? \
315                                                 (m_ra_timed(a, b) ? G(c##racetimed) : \
316                                                     (m_ra_gauntlet(a, b) ? G(c##racegauntlet) : G(c##race)) \
317                                                 ) : 0 \
318                                             ) \
319                                         ) \
320                                     ) \
321                                 ) \
322                             )
323 
324 #define MMVAR(f,a,b,c,w01,w02,w03,w04,w05,w06,w07,w08,w09,w10,w11,w12) \
325     GVAR(f, a, b, w01, c); \
326     GVAR(f, a##duel, b, w02, c); \
327     GVAR(f, a##survivor, b, w03, c); \
328     GVAR(f, a##gladiator, b, w04, c); \
329     GVAR(f, a##capture, b, w05, c); \
330     GVAR(f, a##defend, b, w06, c); \
331     GVAR(f, a##defendking, b, w07, c); \
332     GVAR(f, a##bomber, b, w08, c); \
333     GVAR(f, a##bomberhold, b, w09, c); \
334     GVAR(f, a##race, b, w10, c); \
335     GVAR(f, a##racetimed, b, w11, c); \
336     GVAR(f, a##racegauntlet, b, w12, c);
337 
338 #define DSG(a,b,x)          (m_duel(a, b) ? G(duel##x) : G(survivor##x))
339 #define GL(a,b,x)           (m_dm_gladiator(a, b) ? gladiator##x : x)
340 
341 #define mapshrink(a,b,c,d) if((a) && (b) && (c) && *(c)) \
342 { \
343     char *p = shrinklist(b, c, 1, d); \
344     if(p) \
345     { \
346         DELETEA(b); \
347         b = p; \
348     } \
349 }
350 #define mapcull(a,b,c,d,e,f) \
351 { \
352     mapshrink(m_multi(b, c) && (m_capture(b) || (m_bomber(b) && !m_bb_hold(b, c))), a, G(multimaps), false) \
353     mapshrink(m_duel(b, c), a, G(duelmaps), false) \
354     if((d) > 0 && (e) >= 2 && m_play(b) && !m_duel(b, c)) \
355     { \
356         mapshrink(G(smallmapmax) && (d) <= G(smallmapmax), a, G(smallmaps), false) \
357         else mapshrink(G(mediummapmax) && (d) <= G(mediummapmax), a, G(mediummaps), false) \
358         else mapshrink(G(mediummapmax) && (d) > G(mediummapmax), a, G(largemaps), false) \
359     } \
360     mapshrink(!(f), a, G(previousmaps), true) \
361 }
362 #define maplist(a,b,c,d,e,f) \
363 { \
364     if(m_capture(b)) a = newstring(G(capturemaps)); \
365     else if(m_defend(b)) a = newstring(m_dac_king(b, c) ? G(kingmaps) : G(defendmaps)); \
366     else if(m_bomber(b)) a = newstring(m_bb_hold(b, c) ? G(holdmaps) : G(bombermaps)); \
367     else if(m_race(b)) a = newstring(G(racemaps)); \
368     else if(m_dm(b)) a = newstring(m_dm_gladiator(b, c) ? G(gladiatormaps) : G(mainmaps)); \
369     else a = newstring(G(allowmaps)); \
370     if(e) mapcull(a, b, c, d, e, f) \
371     else mapshrink(!(f), a, G(previousmaps), true) \
372 }
373 #ifdef GAMESERVER
374 SVAR(0, gamestatename, "waiting getmap sendmap readying gameinfo playing overtime intermission voting");
375 VAR(0, gamestatewaiting, 1, G_S_WAITING, -1);
376 VAR(0, gamestategetmap, 1, G_S_GETMAP, -1);
377 VAR(0, gamestatesendmap, 1, G_S_SENDMAP, -1);
378 VAR(0, gamestatereadying, 1, G_S_READYING, -1);
379 VAR(0, gamestategameinfo, 1, G_S_GAMEINFO, -1);
380 VAR(0, gamestateplaying, 1, G_S_PLAYING, -1);
381 VAR(0, gamestateovertime, 1, G_S_OVERTIME, -1);
382 VAR(0, gamestateintermission, 1, G_S_INTERMISSION, -1);
383 VAR(0, gamestatevoting, 1, G_S_VOTING, -1);
384 VAR(0, gamestatenum, 1, G_S_MAX, -1);
385 SVAR(0, modename, "demo editing deathmatch capture-the-flag defend-and-control bomber-ball race");
386 SVAR(0, modeidxname, "demo editing deathmatch capture defend bomber race");
387 VAR(0, modeidxdemo, 1, G_DEMO, -1);
388 VAR(0, modeidxediting, 1, G_EDITMODE, -1);
389 VAR(0, modeidxdeathmatch, 1, G_DEATHMATCH, -1);
390 VAR(0, modeidxcapture, 1, G_CAPTURE, -1);
391 VAR(0, modeidxdefend, 1, G_DEFEND, -1);
392 VAR(0, modeidxbomber, 1, G_BOMBER, -1);
393 VAR(0, modeidxrace, 1, G_RACE, -1);
394 VAR(0, modeidxstart, 1, G_START, -1);
395 VAR(0, modeidxplay, 1, G_PLAY, -1);
396 VAR(0, modeidxrand, 1, G_RAND, -1);
397 VAR(0, modeidxnever, 1, G_NEVER, -1);
398 VAR(0, modeidxlimit, 1, G_LIMIT, -1);
399 VAR(0, modeidxnum, 1, G_MAX, -1);
400 VAR(0, modebitdemo, 1, (1<<G_DEMO), -1);
401 VAR(0, modebitediting, 1, (1<<G_EDITMODE), -1);
402 VAR(0, modebitdeathmatch, 1, (1<<G_DEATHMATCH), -1);
403 VAR(0, modebitcapture, 1, (1<<G_CAPTURE), -1);
404 VAR(0, modebitdefend, 1, (1<<G_DEFEND), -1);
405 VAR(0, modebitbomber, 1, (1<<G_BOMBER), -1);
406 VAR(0, modebitrace, 1, (1<<G_RACE), -1);
407 VAR(0, modebitall, 1, G_ALL, -1);
408 SVAR(0, mutsname, "multi ffa coop instagib medieval kaboom duel survivor classic onslaught freestyle vampire resize hard basic");
409 SVAR(0, mutsidxname, "multi ffa coop instagib medieval kaboom duel survivor classic onslaught freestyle vampire resize hard basic");
410 VAR(0, mutsidxmulti, 1, G_M_MULTI, -1);
411 VAR(0, mutsidxffa, 1, G_M_FFA, -1);
412 VAR(0, mutsidxcoop, 1, G_M_COOP, -1);
413 VAR(0, mutsidxinstagib, 1, G_M_INSTA, -1);
414 VAR(0, mutsidxmedieval, 1, G_M_MEDIEVAL, -1);
415 VAR(0, mutsidxkaboom, 1, G_M_KABOOM, -1);
416 VAR(0, mutsidxduel, 1, G_M_DUEL, -1);
417 VAR(0, mutsidxsurvivor, 1, G_M_SURVIVOR, -1);
418 VAR(0, mutsidxclassic, 1, G_M_CLASSIC, -1);
419 VAR(0, mutsidxonslaught, 1, G_M_ONSLAUGHT, -1);
420 VAR(0, mutsidxfreestyle, 1, G_M_FREESTYLE, -1);
421 VAR(0, mutsidxvampire, 1, G_M_VAMPIRE, -1);
422 VAR(0, mutsidxresize, 1, G_M_RESIZE, -1);
423 VAR(0, mutsidxhard, 1, G_M_HARD, -1);
424 VAR(0, mutsidxbasic, 1, G_M_BASIC, -1);
425 VAR(0, mutsidxgsp1, 1, G_M_GSP1, -1);
426 VAR(0, mutsidxgsp2, 1, G_M_GSP2, -1);
427 VAR(0, mutsidxgsp3, 1, G_M_GSP3, -1);
428 VAR(0, mutsidxgsn, 1, G_M_GSN, -1);
429 VAR(0, mutsidxgsp, 1, G_M_GSP, -1);
430 VAR(0, mutsidxnum, 1, G_M_NUM, -1);
431 VAR(0, mutsbitmulti, 1, (1<<G_M_MULTI), -1);
432 VAR(0, mutsbitffa, 1, (1<<G_M_FFA), -1);
433 VAR(0, mutsbitcoop, 1, (1<<G_M_COOP), -1);
434 VAR(0, mutsbitinstagib, 1, (1<<G_M_INSTA), -1);
435 VAR(0, mutsbitmedieval, 1, (1<<G_M_MEDIEVAL), -1);
436 VAR(0, mutsbitkaboom, 1, (1<<G_M_KABOOM), -1);
437 VAR(0, mutsbitduel, 1, (1<<G_M_DUEL), -1);
438 VAR(0, mutsbitsurvivor, 1, (1<<G_M_SURVIVOR), -1);
439 VAR(0, mutsbitclassic, 1, (1<<G_M_CLASSIC), -1);
440 VAR(0, mutsbitonslaught, 1, (1<<G_M_ONSLAUGHT), -1);
441 VAR(0, mutsbitfreestyle, 1, (1<<G_M_FREESTYLE), -1);
442 VAR(0, mutsbitvampire, 1, (1<<G_M_VAMPIRE), -1);
443 VAR(0, mutsbitresize, 1, (1<<G_M_RESIZE), -1);
444 VAR(0, mutsbithard, 1, (1<<G_M_HARD), -1);
445 VAR(0, mutsbitbasic, 1, (1<<G_M_BASIC), -1);
446 VAR(0, mutsbitgsp1, 1, (1<<G_M_GSP1), -1);
447 VAR(0, mutsbitgsp2, 1, (1<<G_M_GSP2), -1);
448 VAR(0, mutsbitgsp3, 1, (1<<G_M_GSP3), -1);
449 VAR(0, mutsbitall, 1, G_M_ALL, -1);
450 #endif
451