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