1 enum
2 {
3     W_CLAW = 0, W_PISTOL, W_OFFSET, // end of unselectable weapon set
4     W_SWORD = W_OFFSET, W_SHOTGUN, W_SMG, W_FLAMER, W_PLASMA, W_ZAPPER, W_RIFLE, W_ITEM,
5     W_GRENADE = W_ITEM, W_MINE, W_ROCKET, W_ALL, // end of item weapon set
6     W_MELEE = W_ALL, W_MAX, W_LOADOUT = W_ITEM-W_OFFSET // if you add to this at all, check all arrays with W_MAX
7 };
8 #define isweap(a)           (a >= 0 && a < W_MAX)
9 
10 enum { W_F_NONE = 0, W_F_FORCED = 1<<0 };
11 enum {
12     W_C_SCALE = 1<<0, W_C_SCALEN = 1<<1, W_C_LIFE = 1<<2, W_C_LIFEN = 1<<3,
13     W_C_SPEED = 1<<4, W_C_SPEEDN = 1<<5, W_C_RAYS = 1<<6, W_C_ZOOM = 1<<7, W_C_KEEP = 1<<8,
14     W_C_ALL = W_C_SCALE|W_C_SCALEN|W_C_LIFE|W_C_LIFEN|W_C_SPEED|W_C_SPEEDN|W_C_RAYS|W_C_ZOOM|W_C_KEEP,
15     W_C_SS = W_C_SCALE|W_C_SPEED, W_C_SZ = W_C_SCALE|W_C_ZOOM|W_C_KEEP
16 };
17 enum {
18     W_N_STADD = 1<<0, W_N_GRADD = 1<<1, W_N_STIMM = 1<<2, W_N_GRIMM = 1<<3, W_N_SLIDE = 1<<4,
19     W_N_ADD = W_N_STADD|W_N_GRADD, W_N_IMM = W_N_STIMM|W_N_GRIMM,
20     W_N_ST = W_N_STADD|W_N_STIMM, W_N_GR = W_N_GRADD|W_N_GRIMM,
21     W_N_AI = W_N_STADD|W_N_GRADD|W_N_STIMM|W_N_GRIMM,
22     W_N_ALL = W_N_STADD|W_N_GRADD|W_N_STIMM|W_N_GRIMM|W_N_SLIDE
23 };
24 enum {
25     W_S_IDLE = 0, W_S_PRIMARY, W_S_SECONDARY, W_S_RELOAD, W_S_SWITCH, W_S_USE, W_S_POWER, W_S_ZOOM, W_S_WAIT, W_S_MAX,
26     W_S_EXCLUDE = (1<<W_S_IDLE)|(1<<W_S_POWER)|(1<<W_S_ZOOM)
27 };
28 
29 enum
30 {
31     S_W_PRIMARY = 0, S_W_SECONDARY,
32     S_W_POWER, S_W_POWER2, S_W_ZOOM,
33     S_W_SWITCH, S_W_RELOAD, S_W_NOTIFY,
34     S_W_EXPLODE, S_W_EXPLODE2,
35     S_W_DESTROY, S_W_DESTROY2,
36     S_W_IMPACT, S_W_IMPACT2,
37     S_W_EXTINGUISH, S_W_EXTINGUISH2,
38     S_W_TRANSIT, S_W_TRANSIT2,
39     S_W_BOUNCE, S_W_BOUNCE2,
40     S_W_OFFSET, S_W_USE = S_W_OFFSET, S_W_SPAWN,
41     S_W_MAX
42 };
43 
44 enum
45 {
46     S_WEAPONS   = S_GAME,
47     S_CLAW      = S_WEAPONS,
48     S_PISTOL    = S_CLAW+S_W_OFFSET,
49     S_SWORD     = S_PISTOL+S_W_OFFSET,
50     S_SHOTGUN   = S_SWORD+S_W_MAX,
51     S_SMG       = S_SHOTGUN+S_W_MAX,
52     S_FLAMER    = S_SMG+S_W_MAX,
53     S_PLASMA    = S_FLAMER+S_W_MAX,
54     S_ZAPPER    = S_PLASMA+S_W_MAX,
55     S_RIFLE     = S_ZAPPER+S_W_MAX,
56     S_GRENADE   = S_RIFLE+S_W_MAX,
57     S_MINE      = S_GRENADE+S_W_MAX,
58     S_ROCKET    = S_MINE+S_W_MAX,
59     S_MELEE     = S_ROCKET+S_W_MAX,
60     S_MAX       = S_MELEE+S_W_OFFSET
61 };
62 
63 enum
64 {
65     COLLIDE_TRACE = 1<<0, COLLIDE_PROJ = 1<<1, COLLIDE_OWNER = 1<<2,
66     IMPACT_GEOM = 1<<3, IMPACT_PLAYER = 1<<4, IMPACT_SHOTS = 1<<5,
67     BOUNCE_GEOM = 1<<6, BOUNCE_PLAYER = 1<<7, BOUNCE_SHOTS = 1<<8,
68     DRILL_GEOM = 1<<9, DRILL_PLAYER = 1<<10, DRILL_SHOTS = 1<<11,
69     STICK_GEOM = 1<<12, STICK_PLAYER = 1<<13, COLLIDE_HITSCAN = 1<<14,
70     COLLIDE_GEOM = IMPACT_GEOM|BOUNCE_GEOM,
71     COLLIDE_PLAYER = IMPACT_PLAYER|BOUNCE_PLAYER,
72     COLLIDE_SHOTS = IMPACT_SHOTS|BOUNCE_SHOTS,
73     COLLIDE_DYNENT = COLLIDE_PLAYER|COLLIDE_SHOTS,
74     COLLIDE_ALL = COLLIDE_TRACE|COLLIDE_PROJ|COLLIDE_OWNER|IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|BOUNCE_GEOM|BOUNCE_PLAYER|BOUNCE_SHOTS|DRILL_GEOM|DRILL_PLAYER|DRILL_SHOTS|STICK_GEOM|STICK_PLAYER|COLLIDE_HITSCAN
75 };
76 
77 enum
78 {
79     HIT_NONE = 0, HIT_ALT = 1<<0, HIT_LEGS = 1<<1, HIT_TORSO = 1<<2, HIT_WHIPLASH = 1<<3, HIT_HEAD = 1<<4,
80     HIT_WAVE = 1<<5, HIT_PROJ = 1<<6, HIT_EXPLODE = 1<<7, HIT_BURN = 1<<8, HIT_BLEED = 1<<9, HIT_SHOCK = 1<<10,
81     HIT_MATERIAL = 1<<11, HIT_SPAWN = 1<<12, HIT_LOST = 1<<13, HIT_KILL = 1<<14, HIT_FLAK = 1<<15, HIT_SPEC = 1<<16,
82     HIT_CLEAR = HIT_PROJ|HIT_EXPLODE|HIT_BURN|HIT_BLEED|HIT_MATERIAL|HIT_SPAWN|HIT_LOST,
83     HIT_SFLAGS = HIT_KILL
84 };
85 
86 enum { WR_BURN = 0, WR_BLEED, WR_SHOCK, WR_MAX, WR_ALL = (1<<WR_BURN)|(1<<WR_BLEED)|(1<<WR_SHOCK) };
87 
88 struct shotmsg { int id; ivec pos; };
89 struct hitmsg { int flags, proj, target, dist; ivec dir, vel; };
90 
91 #define hithead(x)       (x&HIT_WHIPLASH || x&HIT_HEAD)
92 #define hitdealt(x)      (x&HIT_BURN || x&HIT_BLEED || x&HIT_SHOCK || x&HIT_EXPLODE || x&HIT_PROJ || x&HIT_MATERIAL)
93 #define WR(x)            (1<<(WR_##x))
94 #define wr_burn(x,y)     (isweap(x) && (WF(WK(y), x, residual, WS(y))&WR(BURN)))
95 #define wr_burns(x,y)    (G(burntime) && hitdealt(y) && ((x == -1 && y&HIT_BURN) || wr_burn(x, y)))
96 #define wr_burning(x,y)  (G(burntime) && hitdealt(y) && ((x == -1 && y&HIT_MATERIAL && y&HIT_BURN) || wr_burn(x, y)))
97 #define wr_bleed(x,y)    (isweap(x) && (WF(WK(y), x, residual, WS(y))&WR(BLEED)))
98 #define wr_bleeds(x,y)   (G(bleedtime) && hitdealt(y) && ((x == -1 && y&HIT_BLEED) || wr_bleed(x, y)))
99 #define wr_bleeding(x,y) (G(bleedtime) && hitdealt(y) && ((x == -1 && y&HIT_MATERIAL && y&HIT_BLEED) || wr_bleed(x, y)))
100 #define wr_shock(x,y)    (isweap(x) && (WF(WK(y), x, residual, WS(y))&WR(SHOCK)))
101 #define wr_shocks(x,y)   (G(shocktime) && hitdealt(y) && ((x == -1 && y&HIT_SHOCK) || wr_shock(x, y)))
102 #define wr_shocking(x,y) (G(shocktime) && hitdealt(y) && ((x == -1 && y&HIT_MATERIAL && y&HIT_SHOCK) || wr_shock(x, y)))
103 #define WZ(x)            (W_MAX+(W_##x))
104 
105 #include "weapdef.h"
106 
107 WPSVAR(IDF_GAMEMOD, longname, // shown for weapon pickups and loadout menu
108     "claw-attack",
109     "sidearm-pistol",
110     "energy-sword",
111     "super-shotgun",
112     "submachine-gun",
113     "flame-thrower",
114     "plasma-inductor",
115     "electro-zapper",
116     "laser-rifle",
117     "frag-grenade",
118     "shock-mine",
119     "rocket-launcher",
120     "melee-attack"
121 );
122 
123 WPSVARM(IDF_GAMEMOD, desc,
124     "basic, horizontal claw slash, best used in conjunction with an impulse kick",
125     "long-range, low-damage bullets with a high rate of fire.",
126     "horizontal slice, low-damage, can be swung at short intervals, causes bleed residual damage.",
127     "fires a lot of pellets, causes mass destruction at short range, useless at long range.",
128     "rapid-fire bullets that bounce off walls and knock back the victim.",
129     "short-ranged rapid-fire flamethrower, causes burn residual damage.",
130     "fires plasma balls at a high rate with high damage, but relatively low accuracy and velocity.",
131     "a rapid-fire electric attack that hits almost instantly, great to finish off a wounded foe.",
132     "fires a non-charged laser shot that deals damage in a small area.",
133     "a simple explosion device, can be cooked to control detonation delay, causes burn residual damage",
134     "explodes and discharges electricity when someone comes too close, slowing them down greatly and causing shock residual damage.",
135     "a fast, highly explosive rocket with a large shockwave, causes burn residual damage.",
136     "use parkour and kick moves as melee attacks.",
137     // begin secondary
138     "slower and weaker claw attack that pulls you towards the enemy or performs low impulse cost wall grabs.",
139     "slower rate of fire than the primary attack, but does more damage.",
140     "a slower vertical slice with much more power, causes bleed residual damage.",
141     "shoots a slug that explodes and disintegrates into shavings, causes bleed residual damage.",
142     "long-range projectiles that stick to surfaces and players before exploding into fragments for additional damage.",
143     "a versatile air blast, can be used after jumping to travel great distances or to blast foes off their feet. extinguishes flame residual damage.",
144     "a charged, quickly-expanding ball of plasma that quickly sucks players in, causing great damage.",
145     "a rapid-fire electric discharge with multiple rays that will also cause shock residual damage and greatly slow down a foe.",
146     "a charged and focused laser shot with great precision and adjustable zoom, ideal for long range.",
147     "sticks to whatever it hits, but has a smaller area of effect than the primary mode, causes burn residual damage",
148     "emits an endless distance laser trap that detonates when tripped, in addition causing shock residual damage which can slow down a foe.",
149     "a guided rocket that moves significantly slower than the primary fire mode, causes burn residual damage.",
150     "use slide moves as melee attacks."
151 );
152 
153 WPSVAR(IDF_GAMEMOD,  name, // keep this incase longname is too long
154     "claw",     "pistol",   "sword",    "shotgun",  "smg",      "flamer",   "plasma",   "zapper",   "rifle",    "grenade",  "mine",     "rocket",   "melee"
155 );
156 
157 WPFVARM(IDF_GAMEMOD,  aidist, 0, FVAR_MAX,
158     16.0f,      512.0f,     48.0f,      64.0f,      512.0f,     64.0f,      512.0f,     512.f,      768.0f,     384.0f,     128.0f,     1024.0f,    16.0f,
159     16.0f,      256.0f,     48.0f,      128.0f,     128.0f,     64.0f,      64.0f,      512.f,      2048.0f,    256.0f,     128.0f,     512.0f,     16.0f
160 );
161 WPVARM(IDF_GAMEMOD,  aiskew, 0, VAR_MAX,
162     1,          2,          1,          3,          5,          3,          5,          3,          5,          1,          1,          5,          1,
163     1,          2,          1,          3,          5,          3,          5,          3,          5,          1,          1,          5,          1
164 );
165 WPVAR(IDF_GAMEMOD,  ammoadd, 1, VAR_MAX,
166     1,          10,         1,          2,          40,         50,         30,         48,         6,          1,          1,          1,          1
167 );
168 WPVAR(IDF_GAMEMOD,  ammomax, 1, VAR_MAX,
169     1,          10,          1,         8,          40,         50,         30,         48,         6,          2,          2,          1,          1
170 );
171 WPVARM(IDF_GAMEMOD,  ammosub, 0, VAR_MAX,
172     0,          1,          0,          1,          1,          1,          2,          1,          1,          1,          1,          1,          0,
173     0,          1,          0,          2,          4,          10,         30,         8,          1,          1,          1,          1,          0
174 );
175 WPFVARK(IDF_GAMEMOD,  blend, 0, 1,
176     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
177     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
178     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
179     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f
180 );
181 WPVARK(IDF_GAMEMOD,  collide, 0, COLLIDE_ALL,
182     IMPACT_GEOM|IMPACT_PLAYER|COLLIDE_TRACE|COLLIDE_HITSCAN,
183     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER|COLLIDE_TRACE,
184     BOUNCE_GEOM|IMPACT_PLAYER|COLLIDE_TRACE|IMPACT_SHOTS|COLLIDE_HITSCAN,
185     BOUNCE_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_TRACE|COLLIDE_OWNER|DRILL_GEOM,
186     BOUNCE_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_TRACE|COLLIDE_OWNER|DRILL_GEOM,
187     BOUNCE_GEOM|IMPACT_PLAYER|COLLIDE_OWNER,
188     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER,
189     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER|COLLIDE_TRACE,
190     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER|COLLIDE_TRACE|DRILL_GEOM,
191     BOUNCE_GEOM|BOUNCE_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER|COLLIDE_PROJ,
192     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER|STICK_GEOM|STICK_PLAYER|COLLIDE_PROJ,
193     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER|COLLIDE_PROJ,
194     IMPACT_PLAYER|COLLIDE_TRACE|COLLIDE_HITSCAN,
195 
196     IMPACT_GEOM|IMPACT_PLAYER|COLLIDE_TRACE|COLLIDE_HITSCAN,
197     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER|COLLIDE_TRACE,
198     BOUNCE_GEOM|IMPACT_PLAYER|COLLIDE_TRACE|IMPACT_SHOTS|COLLIDE_HITSCAN,
199     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_TRACE|COLLIDE_OWNER,
200     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_TRACE|COLLIDE_OWNER|STICK_GEOM|STICK_PLAYER,
201     BOUNCE_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER,
202     IMPACT_GEOM|IMPACT_SHOTS|COLLIDE_OWNER|STICK_GEOM,
203     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER|COLLIDE_TRACE|DRILL_PLAYER,
204     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER|COLLIDE_TRACE|DRILL_GEOM|DRILL_PLAYER,
205     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER|STICK_GEOM|STICK_PLAYER|COLLIDE_PROJ,
206     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER|STICK_GEOM|STICK_PLAYER|COLLIDE_PROJ,
207     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER|COLLIDE_PROJ,
208     IMPACT_PLAYER|COLLIDE_TRACE|COLLIDE_HITSCAN,
209 
210     IMPACT_PLAYER|COLLIDE_TRACE|COLLIDE_OWNER,
211     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_TRACE|COLLIDE_OWNER,
212     BOUNCE_GEOM|IMPACT_PLAYER|COLLIDE_TRACE|IMPACT_SHOTS|COLLIDE_OWNER,
213     BOUNCE_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_TRACE|COLLIDE_OWNER,
214     BOUNCE_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_TRACE|COLLIDE_OWNER,
215     BOUNCE_GEOM|IMPACT_PLAYER|COLLIDE_OWNER,
216     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER,
217     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER|COLLIDE_TRACE,
218     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER|COLLIDE_TRACE,
219     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER|COLLIDE_PROJ,
220     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER|STICK_GEOM|STICK_PLAYER|COLLIDE_PROJ,
221     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER|COLLIDE_PROJ,
222     IMPACT_PLAYER|COLLIDE_TRACE|COLLIDE_OWNER,
223 
224     IMPACT_PLAYER|COLLIDE_TRACE|COLLIDE_OWNER,
225     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_TRACE|COLLIDE_OWNER,
226     BOUNCE_GEOM|IMPACT_PLAYER|COLLIDE_TRACE|IMPACT_SHOTS|COLLIDE_OWNER,
227     BOUNCE_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_TRACE|COLLIDE_OWNER,
228     BOUNCE_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_TRACE|COLLIDE_OWNER,
229     BOUNCE_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER,
230     IMPACT_GEOM|IMPACT_SHOTS|COLLIDE_OWNER|STICK_GEOM|STICK_PLAYER,
231     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_TRACE|DRILL_PLAYER|COLLIDE_OWNER,
232     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_TRACE|DRILL_PLAYER|COLLIDE_OWNER,
233     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER|STICK_GEOM|STICK_PLAYER|COLLIDE_PROJ,
234     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER|STICK_GEOM|STICK_PLAYER|COLLIDE_PROJ,
235     IMPACT_GEOM|IMPACT_PLAYER|IMPACT_SHOTS|COLLIDE_OWNER|COLLIDE_PROJ,
236     IMPACT_PLAYER|COLLIDE_TRACE|COLLIDE_OWNER
237 );
238 WPVAR(IDF_GAMEMOD|IDF_HEX, colour, 0, 0xFFFFFF,
239     0x907020,   0xD0D0D0,   0x4040F0,   0xF0F020,   0xF05820,   0xF02020,   0x40F0C8,   0xC090F0,   0xA020F0,   0x40F000,   0x00F068,   0x803000,   0x606060
240 );
241 WPVARM(IDF_GAMEMOD,  cooked, 0, W_C_ALL,
242     0,          0,          0,          0,          0,          0,          0,          0,          0,          W_C_LIFEN,  0,          0,          0,
243     0,          0,          0,          0,          0,          0,          W_C_SS,     0,          W_C_SZ,     W_C_LIFEN,  0,          0,          0
244 );
245 WPVARM(IDF_GAMEMOD,  cooktime, 0, VAR_MAX,
246     0,          0,          0,          0,          0,          0,          0,          0,          0,          3000,       0,          0,          0,
247     0,          0,          0,          0,          0,          0,          2000,       0,          650,        3000,       0,          0,          0
248 );
249 WPVAR(IDF_GAMEMOD,  cookzoom, 0, VAR_MAX,
250     0,          0,          0,          0,          0,          0,          0,          0,          650,        0,          0,          0,          0
251 );
252 WPFVAR(IDF_GAMEMOD,  cookzoommin, 1, 150,
253     10,         10,         10,         10,         10,         10,         10,         10,         10,         10,         10,         10,         10
254 );
255 WPFVAR(IDF_GAMEMOD,  cookzoommax, 1, 150,
256     60,         60,         60,         60,         60,         60,         60,         60,         60,         60,         60,         60,         60
257 );
258 WPVARK(IDF_GAMEMOD,  damage, VAR_MIN, VAR_MAX,
259     25,         25,         30,         6,          16,         6,          18,         5,          33,         100,        100,        200,        30,
260     10,         35,         65,         6,          16,         10,         10,         12,         120,        100,        100,        200,        40,
261     25,         25,         30,         6,          16,         6,          18,         5,          10,         100,        100,        200,        30,
262     10,         35,         65,         6,          4,          10,         10,         12,         10,         100,        100,        200,        40
263 );
264 WPFVARK(IDF_GAMEMOD,  damagehead, FVAR_MIN, FVAR_MAX,
265     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
266     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       0.85f,      1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
267     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
268     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f
269 );
270 WPFVARK(IDF_GAMEMOD,  damagelegs, FVAR_MIN, FVAR_MAX,
271     0.3f,       0.3f,       0.3f,       0.3f,       0.3f,       0.3f,       0.3f,       0.3f,       0.3f,       0.3f,       0.3f,       0.3f,       0.3f,
272     0.5f,       0.3f,       0.5f,       0.3f,       0.3f,       1.0f,       0.3f,       0.3f,       0.3f,       0.3f,       0.3f,       0.3f,       0.5f,
273     0.35f,      0.35f,      0.35f,      0.35f,      0.35f,      0.35f,      0.35f,      0.35f,      0.3f,       0.3f,       0.35f,      0.35f,      0.35f,
274     0.5f,       0.35f,      0.5f,       0.35f,      0.35f,      0.35f,      0.35f,      0.35f,      0.35f,      0.3f,       0.35f,      0.35f,      0.5f
275 );
276 WPFVARK(IDF_GAMEMOD,  damageself, FVAR_MIN, FVAR_MAX,
277     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
278     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       0.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
279     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
280     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       0.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f
281 );
282 WPFVARK(IDF_GAMEMOD,  damageteam, FVAR_MIN, FVAR_MAX,
283     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
284     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       0.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
285     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
286     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       0.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f
287 );
288 WPFVARK(IDF_GAMEMOD,  damagetorso, FVAR_MIN, FVAR_MAX,
289     0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,
290     0.6f,       0.5f,       0.6f,       0.5f,       0.5f,       1.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.6f,
291     0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,
292     0.6f,       0.5f,       0.6f,       0.5f,       0.5f,       1.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.6f
293 );
294 WPFVARK(IDF_GAMEMOD,  damagepenalty, 0, 1,
295     1,          1,          1,          1,          1,          1,          1,          1,          1,          1,          0,          1,          1,
296     1,          1,          1,          1,          1,          1,          1,          1,          1,          1,          0,          1,          1,
297     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
298     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0
299 );
300 WPFVARK(IDF_GAMEMOD,  damagewhiplash, FVAR_MIN, FVAR_MAX,
301     0.8f,       0.8f,       0.8f,       0.8f,       0.8f,       0.65f,      0.6f,       0.6f,       0.6f,       0.6f,       0.6f,       0.6f,       0.8f,
302     0.8f,       0.8f,       0.8f,       0.8f,       0.8f,       0.75f,      0.6f,       0.6f,       0.6f,       0.6f,       0.6f,       0.6f,       0.8f,
303     0.8f,       0.8f,       0.8f,       0.8f,       0.8f,       0.65f,      0.6f,       0.6f,       0.6f,       0.6f,       0.6f,       0.6f,       0.8f,
304     0.8f,       0.8f,       0.8f,       0.8f,       0.8f,       0.75f,      0.6f,       0.6f,       0.6f,       0.6f,       0.6f,       0.6f,       0.8f
305 );
306 WPVARM(IDF_GAMEMOD,  delayattack, 1, VAR_MAX,
307     500,        130,        500,        750,        90,         90,         350,        90,         750,        750,        500,        1500,       500,
308     800,        200,        800,        1250,       350,        1250,       1800,       1800,       1250,       750,        500,        1500,       500
309 );
310 WPVAR(IDF_GAMEMOD,  delayreload, 0, VAR_MAX,
311     50,         1000,       50,         1000,       1200,       1700,       1700,       2000,       2500,       1000,       1500,       2500,       50
312 );
313 WPVAR(IDF_GAMEMOD,  disabled, 0, 1,
314     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0
315 );
316 WPVARK(IDF_GAMEMOD,  drill, 0, VAR_MAX,
317     0,          0,          0,          0,          2,          0,          0,          0,          2,          0,          0,          0,          0,
318     0,          0,          0,          0,          0,          0,          0,          0,          8,          0,          0,          0,          0,
319     0,          0,          0,          0,          2,          0,          0,          2,          2,          0,          0,          0,          0,
320     0,          0,          0,          0,          0,          0,          0,          8,          8,          0,          0,          0,          0
321 );
322 WPFVARK(IDF_GAMEMOD,  elasticity, 0, FVAR_MAX,
323     0.5f,       0.5f,       0.5f,       0.5f,       0.65f,      0.35f,      0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,
324     0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,
325     0.5f,       0.5f,       0.5f,       0.5f,       0.65f,      0.35f,      0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,
326     0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f,       0.5f
327 );
328 WPVARM(IDF_GAMEMOD,  escapedelay, 0, VAR_MAX,
329     200,        200,        200,        200,        200,        200,        200,        200,        200,        200,        200,        200,        200,
330     200,        200,        200,        200,        200,        200,        200,        200,        200,        200,        200,        200,        200
331 );
332 WPVARK(IDF_GAMEMOD|IDF_HEX, explcol, PC(LAST), 0xFFFFFF,
333     PC(FIRE),   PC(FIRE),   0x4040F0,   0xF0F020,   0xF05820,   PC(FIRE),   0x40F0C8,   PC(SHOCK),  0xA020F0,   PC(FIRE),   PC(SHOCK),  PC(FIRE),   PC(FIRE),
334     PC(FIRE),   PC(FIRE),   0x4040F0,   0xF0F020,   0xF05820,   0x808080,   0x40F0C8,   PC(SHOCK),  0xA020F0,   PC(FIRE),   PC(SHOCK),  PC(FIRE),   PC(FIRE),
335     PC(FIRE),   PC(FIRE),   0x4040F0,   0xF0F020,   0xF05820,   PC(FIRE),   0x40F0C8,   PC(SHOCK),  0xA020F0,   PC(FIRE),   PC(SHOCK),  PC(FIRE),   PC(FIRE),
336     PC(FIRE),   PC(FIRE),   0x4040F0,   0xF0F020,   0xF05820,   0x808080,   0x40F0C8,   PC(SHOCK),  0xA020F0,   PC(FIRE),   PC(SHOCK),  PC(FIRE),   PC(FIRE)
337 );
338 WPFVARK(IDF_GAMEMOD,  explode, 0, FVAR_MAX,
339     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       6.0f,       10.0f,      3.0f,       4.0f,       64.0f,      32.0f,      96.0f,      0.0f,
340     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       12.0f,      44.0f,      6.0f,       0.0f,       52.0f,      32.0f,      96.0f,      0.0f,
341     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       6.0f,       10.0f,      3.0f,       4.0f,       64.0f,      32.0f,      96.0f,      0.0f,
342     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       12.0f,      44.0f,      6.0f,       4.0f,       52.0f,      32.0f,      96.0f,      0.0f
343 );
344 WPVARK(IDF_GAMEMOD,  extinguish, 0, 7,
345     0,          2,          2,          2,          2,          3,          1,          1,          2,          2,          2,          2,          0,
346     0,          2,          2,          2,          2,          2,          0,          1,          2,          2,          2,          2,          0,
347     0,          2,          2,          2,          2,          3,          1,          1,          2,          2,          2,          2,          0,
348     0,          2,          2,          2,          2,          2,          0,          1,          2,          2,          2,          2,          0
349 );
350 WPVARK(IDF_GAMEMOD,  fade, 0, 3,
351     1,          1,          1,          1,          1,          1,          1,          1,          1,          1,          1,          1,          1,
352     1,          1,          1,          1,          1,          1,          1,          1,          1,          1,          1,          1,          1,
353     1,          1,          1,          1,          1,          1,          1,          1,          1,          1,          1,          1,          1,
354     1,          1,          1,          1,          1,          1,          1,          1,          1,          1,          1,          1,          1
355 );
356 WPFVARK(IDF_GAMEMOD,  fadeat, 0, FVAR_MAX,
357     4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,
358     4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,
359     4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,
360     4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f
361 );
362 WPFVARK(IDF_GAMEMOD,  fadecut, 0, FVAR_MAX,
363     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
364     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
365     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
366     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f
367 );
368 WPVARK(IDF_GAMEMOD,  fadetime, 0, VAR_MAX,
369     0,          0,          0,          0,          0,          40,         40,         0,          0,          0,          0,          0,          0,
370     0,          0,          0,          0,          0,          40,         40,         0,          0,          0,          0,          0,          0,
371     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
372     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0
373 );
374 WPFVARM(IDF_GAMEMOD,  fragjump, 0, 1,
375     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.5f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
376     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.5f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f
377 );
378 WPFVARM(IDF_GAMEMOD,  fragoffset, 0, FVAR_MAX,
379     4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       1.0f,       1.0f,       4.0f,       1.0f,       2.0f,       4.0f,
380     4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       4.0f,       1.0f,       1.0f,       4.0f,       1.0f,       2.0f,       4.0f
381 );
382 WPVARM(IDF_GAMEMOD,  fragrays, 1, MAXPARAMS,
383     5,          5,          5,          5,          5,          5,          5,          5,          5,          25,         30,         35,         5,
384     5,          5,          5,          24,         40,         5,          5,          5,          5,          25,         10,         35,         5
385 );
386 WPFVARM(IDF_GAMEMOD,  fragrel, FVAR_MIN, FVAR_MAX,
387     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       0.0f,       0.0f,       0.0f,       1.0f,
388     1.0f,       1.0f,       1.0f,       1.5f,       0.1f,       1.0f,       1.0f,       1.0f,       1.0f,       0.0f,       0.0f,       0.0f,       1.0f
389 );
390 WPFVARM(IDF_GAMEMOD,  fragscale, FVAR_NONZERO, FVAR_MAX,
391     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       0.5f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
392     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       0.5f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f
393 );
394 WPFVARM(IDF_GAMEMOD,  fragskew, 0, FVAR_MAX,
395     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       0.5f,       1.0f,       1.0f,
396     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       0.0f,       1.0f,       1.0f
397 );
398 WPVARM(IDF_GAMEMOD,  fragspeed, 0, VAR_MAX,
399     0,          0,          0,          0,          0,          200,        0,          0,          0,          250,        750,        400,        0,
400     0,          0,          0,          0,          350,        250,        0,          0,          0,          250,        7500,       400,        0
401 );
402 WPFVARM(IDF_GAMEMOD,  fragspeedmin, 0, FVAR_MAX,
403     50.0f,      50.0f,      50.0f,      50.0f,      50.0f,      1.0f,       50.0f,      50.0f,      50.0f,      50.0f,      50.0f,      50.0f,      50.0f,
404     50.0f,      50.0f,      50.0f,      50.0f,      50.0f,      1.0f,       50.0f,      50.0f,      50.0f,      50.0f,      50.0f,      50.0f,      50.0f
405 );
406 WPFVARM(IDF_GAMEMOD,  fragspeedmax, 0, FVAR_MAX,
407     0.0f,       0.0f,       0.0f,       0.0f,        0.0f,      0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
408     0.0f,       0.0f,       0.0f,       0.0f,        0.0f,      0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f
409 );
410 WPFVARM(IDF_GAMEMOD,  fragspread, 0, FVAR_MAX,
411     1.0f,       1.0f,       1.0f,       1.0f,       0.2f,       0.1f,       1.0f,       0.25f,      0.25f,      1.0f,       0.5f,       1.0f,       1.0f,
412     1.0f,       1.0f,       1.0f,       0.2f,       0.75f,      0.1f,       1.0f,       0.25f,      0.25f,      1.0f,       0.1f,       1.0f,       1.0f
413 );
414 WPVARM(IDF_GAMEMOD,  fragtime, 1, VAR_MAX,
415     500,        500,        500,        250,        500,        1000,       500,        500,        500,        1000,       1000,       1000,       500,
416     500,        500,        500,        2000,       1000,       3000,       500,        500,        500,        1000,       5000,       1000,       500
417 );
418 WPVARM(IDF_GAMEMOD,  fragtimedelay, 0, VAR_MAX,
419     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
420     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0
421 );
422 WPVARM(IDF_GAMEMOD,  fragtimeiter, 0, VAR_MAX,
423     0,          0,          0,          0,          0,          0,          0,          0,          0,          3,          5,          3,          0,
424     0,          0,          0,          0,          3,          0,          0,          0,          0,          3,          100,        3,          0
425 );
426 WPVARM(IDF_GAMEMOD,  fragweap, -1, W_MAX*2-1,
427     -1,         -1,         -1,         -1,         -1,         -1,         -1,         -1,         -1,         W_SHOTGUN,  W_ZAPPER,   W_SMG,      -1,
428     -1,         -1,         -1,         WZ(SHOTGUN),WZ(SMG),    -1,         -1,         -1,         -1,         W_SHOTGUN,  WZ(ZAPPER), W_SMG,      -1
429 );
430 WPFVAR(IDF_GAMEMOD,  frequency, 0, FVAR_MAX,
431     0.0f,       0.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       2.0f,       2.0f,       4.0f,       0.0f
432 );
433 WPVARM(IDF_GAMEMOD,  fullauto, 0, 1,
434     1,          0,          1,          0,          1,          1,          1,          1,          0,          0,          0,          0,          1,
435     1,          0,          1,          0,          1,          0,          0,          0,          0,          0,          0,          0,          1
436 );
437 WPVARK(IDF_GAMEMOD,  grab, 0, 3,
438     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
439     3,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
440     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
441     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0
442 );
443 WPVARK(IDF_GAMEMOD,  guided, 0, 6,
444     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
445     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          1,          0,
446     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
447     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          1,          0
448 );
449 WPVARK(IDF_GAMEMOD,  guideddelay, 0, VAR_MAX,
450     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
451     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          100,        0,
452     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
453     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          100,        0
454 );
455 WPFVARK(IDF_GAMEMOD,  headmin, 0, FVAR_MAX,
456     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       4.0f,       4.0f,       4.0f,       4.0f,       8.0f,       8.0f,       8.0f,       0.0f,
457     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       4.0f,       4.0f,       4.0f,       4.0f,       8.0f,       8.0f,       8.0f,       0.0f,
458     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       4.0f,       4.0f,       4.0f,       4.0f,       8.0f,       8.0f,       8.0f,       0.0f,
459     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       4.0f,       4.0f,       4.0f,       4.0f,       8.0f,       8.0f,       8.0f,       0.0f
460 );
461 WPFVARK(IDF_GAMEMOD,  hitpush, FVAR_MIN, FVAR_MAX,
462     50.0f,      20.0f,      25.0f,      10.0f,      25.0f,      5.0f,       10.0f,      10.0f,      25.0f,      60.0f,      0.0f,       125.0f,     50.0f,
463     100.0f,     20.0f,      50.0f,      15.0f,      10.0f,      25.0f,     -50.0f,      10.0f ,     50.0f,      60.0f,      0.0f,       125.0f,     100.0f,
464     50.0f,      20.0f,      25.0f,      10.0f,      25.0f,      5.0f,       10.0f,      10.0f,      10.0f,      60.0f,      0.0f,       125.0f,     50.0f,
465     100.0f,     20.0f,      50.0f,      15.0f,      10.0f,      25.0f,     -50.0f,      10.0f,      10.0f,      60.0f,      0.0f,       125.0f,     100.0f
466 );
467 WPFVARK(IDF_GAMEMOD,  hitvel, FVAR_MIN, FVAR_MAX,
468     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
469     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
470     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
471     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0
472 );
473 WPVARK(IDF_GAMEMOD,  interacts, 0, 3,
474     0,          1,          0,          1,          1,          1,          1,          1,          1,          3,          3,          1,          0,
475     0,          1,          0,          3,          3,          1,          1,          1,          1,          3,          3,          1,          0,
476     0,          1,          0,          1,          1,          1,          1,          1,          1,          3,          3,          1,          0,
477     0,          1,          0,          3,          3,          1,          1,          1,          1,          3,          3,          1,          0
478 );
479 WPFVARM(IDF_GAMEMOD,  kickpush, FVAR_MIN, FVAR_MAX,
480     0.0f,       4.0f,       -15.0f,     50.0f,      5.0f,       1.0f,       20.0f,      5.0f,       35.0f,      5.0f,       5.0f,       150.0f,     0.0f,
481     0.0f,       6.0f,       -30.0f,     75.0f,      25.0f,      50.0f,      150.0f,     50.0f,      50.0f,      5.0f,       5.0f,       150.0f,     0.0f
482 );
483 WPVAR(IDF_GAMEMOD,  laser, 0, 1,
484     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0
485 );
486 WPVARK(IDF_GAMEMOD|IDF_HEX, lightcol, PC(LAST), 0xFFFFFF,
487     0x907020,   0xD0D0D0,   0x4040F0,   0xF0F020,   0xF05820,   PC(FIRE),   0x40F0C8,   PC(SHOCK),  0xA020F0,   PC(FIRE),   0x00F068,   PC(FIRE),   0xEEEE22,
488     0x907020,   0xD0D0D0,   0x4040F0,   0xF0F020,   0xF05820,   0xF0F0F0,   0x40F0C8,   PC(SHOCK),  0xA020F0,   PC(FIRE),   0x00F068,   PC(FIRE),   0xEEEE22,
489     0x907020,   0xD0D0D0,   0x4040F0,   0xF0F020,   0xF05820,   PC(FIRE),   0x40F0C8,   PC(SHOCK),  0xA020F0,   PC(FIRE),   0x00F068,   PC(FIRE),   0xEEEE22,
490     0x907020,   0xD0D0D0,   0x4040F0,   0xF0F020,   0xF05820,   0xF0F0F0,   0x40F0C8,   PC(SHOCK),  0xA020F0,   PC(FIRE),   0x00F068,   PC(FIRE),   0xEEEE22
491 );
492 WPVAR(IDF_GAMEMOD,  lightpersist, 0, 15,
493     0,          0,          1,          0,          0,          1,          0,          1,          0,          8,          0,          6,          0
494 );
495 WPFVAR(IDF_GAMEMOD,  lightradius, 0, FVAR_MAX,
496     0,          8,          8,          8,          8,          8,          16,         4,          16,         16,         16,         16,         0
497 );
498 WPFVARK(IDF_GAMEMOD,  liquidcoast, 0, FVAR_MAX,
499     0.0f,       2.0f,       0.0f,       2.0f,       2.0f,       1.0f,       1.0f,       1.0f,       2.0f,       2.0f,       2.0f,       2.0f,       0.0f,
500     0.0f,       2.0f,       0.0f,       2.0f,       2.0f,       1.0f,       1.0f,       1.0f,       2.0f,       2.0f,       2.0f,       2.0f,       0.0f,
501     0.0f,       2.0f,       0.0f,       2.0f,       2.0f,       1.0f,       1.0f,       1.0f,       2.0f,       2.0f,       2.0f,       2.0f,       0.0f,
502     0.0f,       2.0f,       0.0f,       2.0f,       2.0f,       1.0f,       1.0f,       1.0f,       2.0f,       2.0f,       2.0f,       2.0f,       0.0f
503 );
504 WPVAR(IDF_GAMEMOD,  modes, -G_ALL, G_ALL,
505     0,          -G_SW,      -G_SW,      -G_SW,      -G_SW,      -G_SW,      -G_SW,      -G_SW,      -G_SW,      -G_SW,      -G_SW,      -G_SW,      0
506 );
507 WPVAR(IDF_GAMEMOD,  muts, -G_M_ALL, G_M_ALL,
508     0,          -G_M_SW,    -G_M_SW,    -G_M_SW,    -G_M_SW,    -G_M_SW,    -G_M_SW,    -G_M_SW,    -G_M_SW,    0,          -G_M_IM,    -G_M_DK,    0
509 );
510 WPSVARR(IDF_GAMEMOD,  obitsuicide,
511     "hit themself",
512     "ate a bullet",
513     "created too much torsional stress",
514     "tested the effectiveness of their own shrapnel",
515     "fell victim to their own crossfire",
516     "spontaneously combusted",
517     "was caught up in their own plasma-filled mayhem",
518     "tried to use themself as a circuit breaker",
519     "got a good shock",
520     "kicked it, kamikaze style",
521     "kicked it, kamikaze style",
522     "exploded with style",
523     "kicked themself"
524 );
525 WPSVARR(IDF_GAMEMOD,  obitobliterated,
526     "clawed and mauled",
527     "skewered",
528     "sliced in half",
529     "turned into little chunks",
530     "swiss-cheesed",
531     "barbequed",
532     "reduced to ooze",
533     "shocked relentlessly",
534     "given laser shock treatment",
535     "turned into shrapnel",
536     "turned into shrapnel",
537     "obliterated",
538     "given kung-fu lessons"
539 );
540 WPSVARR(IDF_GAMEMOD,  obitheadless,
541     "clawed and mauled",
542     "capped",
543     "sliced in half",
544     "scrambled",
545     "air conditioned",
546     "char-grilled",
547     "plasmafied",
548     "electrocuted",
549     "expertly sniped",
550     "blown to pieces",
551     "blown to pieces",
552     "exploded",
553     "given kung-fu lessons"
554 );
555 WPSVARK(IDF_GAMEMOD,  obituary,
556     "clawed",
557     "pierced",
558     "impaled",
559     "sprayed with buckshot",
560     "riddled with holes",
561     "char-grilled",
562     "plasmified",
563     "electrocuted",
564     "laser shocked",
565     "blown to pieces",
566     "blown to pieces",
567     "exploded",
568     "kicked",
569 
570     "clawed",
571     "pierced",
572     "impaled",
573     "filled with lead",
574     "spliced apart",
575     "snuffed out",
576     "shown the light",
577     "shocked into submission",
578     "given laser burn",
579     "blown to pieces",
580     "blown to pieces",
581     "exploded",
582     "kicked",
583 
584     "clawed and mauled",
585     "picked to pieces",
586     "melted in half",
587     "filled with shrapnel",
588     "air-conditioned",
589     "cooked alive",
590     "melted alive",
591     "turned into a lightning rod",
592     "shocked to pieces",
593     "turned into shrapnel",
594     "turned into shrapnel",
595     "obliterated",
596     "given kung-fu lessons",
597 
598     "clawed and mauled",
599     "picked to pieces",
600     "melted in half",
601     "filled with shrapnel",
602     "air-conditioned",
603     "cooked alive",
604     "melted alive",
605     "turned into a lightning rod",
606     "shocked to pieces",
607     "turned into shrapnel",
608     "turned into shrapnel",
609     "obliterated",
610     "given kung-fu lessons"
611 );
612 WPFVARK(IDF_GAMEMOD,  partblend, 0, 1,
613     1.0f,       0.3f,       1.0f,       1.0f,       1.0f,       0.8f,       0.8f,       1.0f,       1.0f,       1.0f,       0.75f,      1.0f,       1.0f,
614     1.0f,       0.6f,       1.0f,       1.0f,       1.0f,       0.15f,      1.0f,       1.0f,       1.0f,       1.0f,       0.75f,      1.0f,       1.0f,
615     1.0f,       0.3f,       1.0f,       1.0f,       1.0f,       0.8f,       0.8f,       1.0f,       1.0f,       1.0f,       0.75f,      1.0f,       1.0f,
616     1.0f,       0.6f,       1.0f,       1.0f,       1.0f,       0.15f,      1.0f,       1.0f,       1.0f,       1.0f,       0.75f,      1.0f,       1.0f
617 );
618 WPVARK(IDF_GAMEMOD|IDF_HEX, partcol, PC(LAST), 0xFFFFFF,
619     0x907020,   0xD0D0D0,   0x4040F0,   0xF0F020,   0xF05820,   PC(FIRE),   0x40F0C8,   PC(SHOCK),  0xA020F0,   PC(FIRE),   0x00F068,   PC(FIRE),   0xEEEE22,
620     0x907020,   0xD0D0D0,   0x4040F0,   0xF0F020,   0xF05820,   0xF0F0F0,   0x40F0C8,   PC(SHOCK),  0xA020F0,   PC(FIRE),   0x00F068,   PC(FIRE),   0xEEEE22,
621     0x907020,   0xD0D0D0,   0x4040F0,   0xF0F020,   0xF05820,   PC(FIRE),   0x40F0C8,   PC(SHOCK),  0xA020F0,   PC(FIRE),   0x00F068,   PC(FIRE),   0xEEEE22,
622     0x907020,   0xD0D0D0,   0x4040F0,   0xF0F020,   0xF05820,   0xF0F0F0,   0x40F0C8,   PC(SHOCK),  0xA020F0,   PC(FIRE),   0x00F068,   PC(FIRE),   0xEEEE22
623 );
624 WPVARK(IDF_GAMEMOD,  partfade, 1, VAR_MAX,
625     500,        250,        500,        250,        250,        200,        500,        100,        500,        500,        500,        750,        500,
626     500,        250,        500,        250,        250,        500,        500,        200,        950,        500,        500,        750,        500,
627     500,        250,        500,        250,        250,        200,        500,        250,        500,        500,        500,        750,        500,
628     500,        250,        500,        250,        250,        500,        500,        500,        750,        500,        500,        750,        500
629 );
630 WPFVARK(IDF_GAMEMOD,  partlen, 0, FVAR_MAX,
631     0.0f,       8.0f,       0.0f,       30.0f,      20.0f,      0.0f,       0.0f,       1024.f,     256.0f,     0.0f,       4.0f,       0.0f,       0.0f,
632     0.0f,       16.0f,      0.0f,       15.0f,      15.0f,      0.0f,       0.0f,       1024.f,     1024.0f,    0.0f,       4.0f,       0.0f,       0.0f,
633     0.0f,       8.0f,       0.0f,       7.5f,       7.5f,       0.0f,       0.0f,       1024.f,     256.0f,     0.0f,       4.0f,       0.0f,       0.0f,
634     0.0f,       16.0f,      0.0f,       7.5f,       7.5f,       0.0f,       0.0f,       1024.f,     512.0f,     0.0f,       4.0f,       0.0f,       0.0f
635 );
636 WPFVARK(IDF_GAMEMOD,  partsize, 0, FVAR_MAX,
637     1.0f,       0.125f,     1.0f,       0.75f,      0.6f,       6.0f,       8.0f,       2.0f,       1.5f,       1.0f,       2.0f,       2.0f,       0.5f,
638     2.0f,       0.25f,      1.25f,      0.45f,      0.4f,       12.0f,      28.0f,      3.0f,       3.0f,       1.0f,       2.0f,       2.0f,       1.0f,
639     1.0f,       0.125f,     1.0f,       0.45f,      0.4f,       6.0f,       8.0f,       3.0f,       1.5f,       1.0f,       2.0f,       2.0f,       0.5f,
640     2.0f,       0.25f,      1.25f,      0.45f,      0.4f,       12.0f,      28.0f,      5.0f,       3.0f,       1.0f,       2.0f,       2.0f,       1.0f
641 );
642 WPVARK(IDF_GAMEMOD,  parttype, 0, W_MAX-1,
643     W_CLAW,     W_PISTOL,   W_SWORD,    W_SHOTGUN,  W_SMG,      W_FLAMER,   W_PLASMA,   W_ZAPPER,   W_RIFLE,    W_GRENADE,  W_MINE,     W_ROCKET,   W_MELEE,
644     W_CLAW,     W_PISTOL,   W_SWORD,    W_SHOTGUN,  W_SMG,      W_FLAMER,   W_PLASMA,   W_ZAPPER,   W_RIFLE,    W_GRENADE,  W_MINE,     W_ROCKET,   W_MELEE,
645     W_CLAW,     W_PISTOL,   W_SWORD,    W_SHOTGUN,  W_SMG,      W_FLAMER,   W_PLASMA,   W_ZAPPER,   W_RIFLE,    W_GRENADE,  W_MINE,     W_ROCKET,   W_MELEE,
646     W_CLAW,     W_PISTOL,   W_SWORD,    W_SHOTGUN,  W_SMG,      W_FLAMER,   W_PLASMA,   W_ZAPPER,   W_RIFLE,    W_GRENADE,  W_MINE,     W_ROCKET,   W_MELEE
647 );
648 WPVARK(IDF_GAMEMOD,  proxdelay, 0, VAR_MAX,
649     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          3000,       0,          0,
650     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          1500000,    0,          0,
651     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          3000,       0,          0,
652     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          1500000,    0,          0
653 );
654 WPFVARK(IDF_GAMEMOD,  proxdist, 0, FVAR_MAX,
655     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       32.0f,      0.0f,       0.0f,
656     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       FVAR_MAX,   0.0f,       0.0f,
657     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       32.0f,      0.0f,       0.0f,
658     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       FVAR_MAX,   0.0f,       0.0f
659 );
660 WPVARK(IDF_GAMEMOD,  proxtime, 0, VAR_MAX,
661     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          100,        0,          0,
662     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
663     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          100,        0,          0,
664     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0
665 );
666 WPVARK(IDF_GAMEMOD,  proxtype, 0, 2,
667     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          1,          0,          0,
668     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          2,          0,          0,
669     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          1,          0,          0,
670     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          2,          0,          0
671 );
672 WPVARK(IDF_GAMEMOD,  radial, 0, VAR_MAX,
673     0,          0,          0,          0,          0,          50,         50,         0,          0,          0,          0,          0,          0,
674     0,          0,          0,          0,          0,          50,         100,        0,          0,          0,          0,          0,          0,
675     0,          0,          0,          0,          0,          50,         50,         0,          0,          0,          0,          0,          0,
676     0,          0,          0,          0,          0,          50,         100,        0,          0,          0,          0,          0,          0
677 );
678 WPFVARK(IDF_GAMEMOD,  radius, FVAR_NONZERO, FVAR_MAX,
679     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
680     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
681     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
682     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f
683 );
684 WPVARM(IDF_GAMEMOD,  rays, 0, MAXPARAMS,
685     1,          1,          1,          20,         1,          1,          1,          1,          1,          1,          1,          1,          1,
686     1,          1,          1,          1,          1,          1,          1,          6,          1,          1,          1,          1,          1
687 );
688 WPFVARK(IDF_GAMEMOD,  reflectivity, 0, FVAR_MAX,
689     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
690     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
691     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
692     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f
693 );
694 WPFVARM(IDF_GAMEMOD,  relativity, 0, FVAR_MAX,
695     0.0f,       0.05f,      0.0f,       0.15f,      0.15f,      0.95f,      0.15f,      0.0f,       0.5f,       0.75f,      0.5f,       0.0f,       0.0f,
696     0.0f,       0.05f,      0.0f,       0.35f,      0.25f,      0.15f,      0.15f,      0.0f,       0.1f,       0.75f,      0.5f,       0.0f,       0.0f
697 );
698 WPVARK(IDF_GAMEMOD,  residual, 0, WR_ALL,
699     0,          0,          WR(BLEED),  0,          0,          WR(BURN),   0,          0,          0,          WR(BURN),   WR(SHOCK),  WR(BURN),   0,
700     0,          0,          WR(BLEED),  WR(BLEED),  0,          0,          0,          WR(SHOCK),  0,          WR(BURN),   WR(SHOCK),  WR(BURN),   0,
701     0,          0,          WR(BLEED),  0,          0,          WR(BURN),   0,          0,          0,          WR(BURN),   WR(SHOCK),  WR(BURN),   0,
702     0,          0,          WR(BLEED),  WR(BLEED),  0,          0,          0,          WR(SHOCK),  0,          WR(BURN),   WR(SHOCK),  WR(BURN),   0
703 );
704 WPVARK(IDF_GAMEMOD, residualundo, 0, WR_ALL,
705     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
706     0,          0,          0,          0,          0,          WR(BURN),   0,          0,          0,          0,          0,          0,          0,
707     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
708     0,          0,          0,          0,          0,          WR(BURN),   0,          0,          0,          0,          0,          0,          0
709 );
710 WPVARM(IDF_GAMEMOD,  speed, 0, VAR_MAX,
711     0,          1500,       0,          1000,       2000,       400,        1250,       10000,      10000,      200,        100,        1000,       0,
712     0,          1000,       0,          250,        500,        750,        85,         50000,      100000,     200,        100,        250,        0
713 );
714 WPFVARK(IDF_GAMEMOD,  speeddelta, 0, FVAR_MAX,
715     10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,
716     10.0f,      10.0f,      10.0f,      10.0f,      1000.0f,    10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,
717     10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,
718     10.0f,      10.0f,      10.0f,      10.0f,      1000.0f,    10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f,      10.0f
719 );
720 WPVARM(IDF_GAMEMOD,  speedlimit, 0, VAR_MAX,
721     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
722     0,          0,          0,          0,          0,          0,          35,         0,          0,          0,          0,          0,          0
723 );
724 WPFVARK(IDF_GAMEMOD,  speedmin, 0, FVAR_MAX,
725     0.0f,       0.0f,       0.0f,       25.0f,      25.0f,      1.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
726     0.0f,       0.0f,       0.0f,       25.0f,      25.0f,      1.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
727     50.0f,      50.0f,      50.0f,      50.0f,      50.0f,      1.0f,       50.0f,      0.0f,       50.0f,      50.0f,      50.0f,      50.0f,      50.0f,
728     50.0f,      50.0f,      50.0f,      50.0f,      50.0f,      1.0f,       50.0f,      0.0f,       50.0f,      50.0f,      50.0f,      50.0f,      50.0f
729 );
730 WPFVARK(IDF_GAMEMOD,  speedmax, 0, FVAR_MAX,
731     0.0f,       0.0f,       0.0f,       0.0f,        0.0f,      0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
732     0.0f,       0.0f,       0.0f,       0.0f,        0.0f,      0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
733     0.0f,       0.0f,       0.0f,       0.0f,        0.0f,      0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
734     0.0f,       0.0f,       0.0f,       0.0f,        0.0f,      0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f
735 );
736 WPFVARM(IDF_GAMEMOD,  spread, 0, FVAR_MAX,
737     1.0f,       1.0f,       1.0f,       12.5f,      2.5f,       5.0f,       2.0f,       2.5f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
738     1.0f,       2.0f,       1.0f,       2.0f,       2.0f,       1.0f,       1.0f,       3.0f,       0.5f,       1.0f,       1.0f,       1.0f,       1.0f
739 );
740 WPFVARM(IDF_GAMEMOD,  spreadmax, 0, FVAR_MAX,
741     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
742     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f
743 );
744 WPFVARM(IDF_GAMEMOD,  spreadmin, 0, FVAR_MAX,
745     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
746     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f
747 );
748 WPFVARM(IDF_GAMEMOD,  spreadz, 0, FVAR_MAX,
749     1.0f,       2.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       2.0f,       0.0f,       0.0f,       0.0f,       0.0f,       1.0f,
750     1.0f,       2.0f,       1.0f,       4.0f,       2.0f,       1.0f,       1.0f,       1.0f,       0.0f,       0.0f,       0.0f,       0.0f,       1.0f
751 );
752 WPVARK(IDF_GAMEMOD,  stun, 0, W_N_ALL,
753     W_N_ADD,    W_N_ADD,    W_N_AI,     W_N_ADD,    W_N_ADD,    W_N_ADD,    W_N_ADD,    W_N_ADD,    W_N_ADD,    W_N_ADD,    W_N_ADD,    W_N_ADD,    W_N_ADD,
754     W_N_ADD,    W_N_ADD,    W_N_AI,     W_N_ADD,    W_N_ADD,    W_N_ALL,    W_N_ADD,    W_N_ADD,    W_N_ADD,    W_N_ADD,    W_N_ADD,    W_N_ADD,    W_N_ADD,
755     W_N_ADD,    W_N_ADD,    W_N_AI,     W_N_ADD,    W_N_ADD,    W_N_ADD,    W_N_AI,     W_N_ADD,    W_N_ADD,    W_N_ADD,    W_N_ADD,    W_N_ADD,    W_N_ADD,
756     W_N_ADD,    W_N_ADD,    W_N_AI,     W_N_ADD,    W_N_ADD,    W_N_ALL,    W_N_AI,     W_N_AI,     W_N_ADD,    W_N_ADD,    W_N_ADD,    W_N_ADD,    W_N_ADD
757 );
758 WPFVARK(IDF_GAMEMOD,  stunfall, 0, FVAR_MAX,
759     0.0f,       0.0f,       0.1f,       0.0f,       0.0f,       0.0f,       0.1f,       0.01f,      0.1f,       0.0f,       8.0f,       0.2f,       0.0f,
760     0.0f,       0.0f,       0.1f,       0.0f,       0.0f,       1.5f,       0.5f,       0.01f,      1.0f,       0.0f,       16.0f,      0.1f,       0.0f,
761     0.0f,       0.0f,       0.1f,       0.0f,       0.0f,       0.0f,       0.1f,       8.0f,       8.0f,       0.0f,       8.0f,       0.2f,       0.0f,
762     0.0f,       0.0f,       0.1f,       0.0f,       0.0f,       1.5f,       0.5f,       16.0f,      16.0f,      0.0f,       16.0f,      0.1f,       0.0f
763 );
764 WPFVARK(IDF_GAMEMOD,  stunscale, 0, FVAR_MAX,
765     0.5f,       0.25f,      2.0f,       0.25f,      0.5f,       0.0f,       0.2f,       0.5f,       0.75f,      2.0f,       8.0f,       16.0f,      0.5f,
766     1.0f,       0.25f,      4.0f,       0.35f,      1.0f,       0.15f,      0.5f,       0.5f,       2.0f,       2.0f,       16.0f,      8.0f,       1.0f,
767     0.5f,       0.25f,      2.0f,       0.25f,      0.5f,       0.0f,       0.2f,       8.0f,       8.0f,       2.0f,       8.0f,       16.0f,      0.5f,
768     1.0f,       0.25f,      4.0f,       0.35f,      1.0f,       0.15f,      0.5f,       16.0f,      16.0f,      2.0f,       16.0f,      8.0f,       1.0f
769 );
770 WPVARK(IDF_GAMEMOD,  stuntime, 0, VAR_MAX,
771     100,        25,         300,        75,         75,         0,          0,          500,        100,        200,        500,        750,        100,
772     200,        25,         500,        150,        150,        500,        200,        250,        250,        200,        750,        500,        200,
773     100,        25,         300,        75,         75,         0,          0,          500,        500,        200,        500,        750,        100,
774     200,        25,         500,        150,        150,        500,        200,        750,        750,        200,        750,        500,        200
775 );
776 WPVARK(IDF_GAMEMOD,  taper, 0, 6,
777     0,          0,          0,          2,          2,          2,          2,          0,          0,          0,          0,          0,          0,
778     0,          0,          0,          0,          0,          0,          2,          0,          0,          0,          0,          0,          0,
779     0,          0,          0,          2,          2,          2,          2,          0,          0,          0,          0,          0,          0,
780     0,          0,          0,          2,          2,          2,          2,          0,          0,          0,          0,          0,          0
781 );
782 WPFVARK(IDF_GAMEMOD,  taperin, 0, FVAR_MAX,
783     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.1f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
784     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.5f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
785     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
786     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f
787 );
788 WPFVARK(IDF_GAMEMOD,  taperout, 0, FVAR_MAX,
789     0.0f,       0.0f,       0.0f,       1.0f,       1.0f,       0.01f,      0.01f,      0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
790     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.5f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
791     0.0f,       0.0f,       0.0f,       1.0f,       1.0f,       0.01f,      0.01f,      0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
792     0.0f,       0.0f,       0.0f,       0.01f,      0.01f,      0.01f,      0.5f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f
793 );
794 WPFVARK(IDF_GAMEMOD,  tapermin, 0, 1,
795     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
796     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
797     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,
798     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       0.0f
799 );
800 WPFVARK(IDF_GAMEMOD,  tapermax, 0, 1,
801     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
802     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
803     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
804     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f
805 );
806 WPVARM(IDF_GAMEMOD,  time, 1, VAR_MAX,
807     100,        2000,       350,        250,        510,        200,        350,        100,        5000,       3000,       60000,      5000,       100,
808     350,        1000,       500,        700,        1000,       100,        3500,       100,        5000,       3000,       30000,      5000,       350
809 );
810 WPVARM(IDF_GAMEMOD,  timedelay, 0, VAR_MAX,
811     0,          0,          10,         0,          0,          0,          0,          0,          0,          175,        50,         0,          0,
812     0,          0,          10,         0,          0,          0,          75,         0,          0,          175,        50,         0,          0
813 );
814 WPVARM(IDF_GAMEMOD,  timeiter, 0, VAR_MAX,
815     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
816     0,          0,          0,          0,          0,          0,          0,          80,         0,          0,          0,          0,          0
817 );
818 WPVARK(IDF_GAMEMOD,  timestick, 0, VAR_MAX,
819     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
820     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
821     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
822     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0
823 );
824 WPFVARM(IDF_GAMEMOD,  trace, 0, FVAR_MAX,
825     4.0f,       1.0f,       1.5f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       4.0f,
826     4.0f,       1.0f,       1.5f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       4.0f
827 );
828 WPFVARK(IDF_GAMEMOD,  visfade, 0, 1,
829     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
830     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
831     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,
832     1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f,       1.0f
833 );
834 WPVARK(IDF_GAMEMOD,  vistime, 0, VAR_MAX,
835     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
836     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
837     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,
838     0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0,          0
839 );
840 WPFVARK(IDF_GAMEMOD,  wavepush, 0, FVAR_MAX,
841     1.5f,       1.5f,       1.5f,       1.5f,       1.5f,       0.0f,       1.5f,       2.5f,       2.5f,       2.0f,       2.0f,       3.0f,       1.5f,
842     1.5f,       1.5f,       1.5f,       1.5f,       1.5f,       3.0f,       2.5f,       2.5f,       1.5f,       2.0f,       2.0f,       3.0f,       1.5f,
843     1.5f,       1.5f,       1.5f,       1.5f,       1.5f,       0.0f,       1.5f,       1.5f,       1.5f,       2.0f,       2.0f,       3.0f,       1.5f,
844     1.5f,       1.5f,       1.5f,       1.5f,       1.5f,       3.0f,       2.5f,       2.5f,       2.5f,       2.0f,       2.0f,       3.0f,       1.5f
845 );
846 WPFVARK(IDF_GAMEMOD,  weight, FVAR_MIN, FVAR_MAX,
847     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       -25.0f,     0.0f,       0.0f,       0.0f,       75.0f,      150.0f,     0.0f,       0.0f,
848     0.0f,       0.0f,       0.0f,       250.0f,     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       75.0f,      150.0f,     0.0f,       0.0f,
849     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       -25.0f,     0.0f,       0.0f,       0.0f,       75.0f,      150.0f,     0.0f,       0.0f,
850     0.0f,       0.0f,       0.0f,       250.0f,     0.0f,       0.0f,       0.0f,       0.0f,       0.0f,       75.0f,      150.0f,     0.0f,       0.0f
851 );
852 
853 #define WRS(a,b,c,d)         ((a)*(m_dm_gladiator(c, d) ? G(gladiator##b##scale) : G(b##scale)*(m_sweaps(c, d) ? G(b##limited) : 1.f)))
854 #define WX(k,a,b,c,d,e,f)    (!m_insta(d, e) || (a) != W_RIFLE ? WRS(WF(k, a, b, c)*f, radial, d, e) : 0)
855 #define WSP(a,b,c,d,e)       (!m_insta(c, d) || (a) != W_RIFLE ? clamp(W2(a, spread, b)*(e), W2(a, spreadmin, b), W2(a, spreadmax, b) > 0 ? W2(a, spreadmax, b) : FVAR_MAX) : 0.f)
856 #define WSND(a,b)            (weaptype[a].sound+(b))
857 #define WSNDF(a,b)           (weaptype[a].sound+((b) ? S_W_SECONDARY : S_W_PRIMARY))
858 #define WSND2(a,b,c)         (weaptype[a].sound+((b) ? (c)+1 : (c)))
859 #define WUSE(a)              (a < W_ITEM ? W(a, ammomax) : W(a, ammoadd))
860 #define WHCOL(d,a,b,c)       (W2(a, b, c) >= 0 ? W2(a, b, c) : game::hexpulsecolour(d, clamp(INVPULSE(W2(a, b, c)), 0, int(PULSE_LAST)), 50))
861 #define WPCOL(d,a,b,c)       (W2(a, b, c) >= 0 ? vec::hexcolor(W2(a, b, c)) : game::pulsecolour(d, clamp(INVPULSE(W2(a, b, c)), 0, int(PULSE_LAST)), 50))
862 
863 struct weaptypes
864 {
865     int     anim,               sound,      espeed;
866     bool    muzzle,     eject,      tape;
867     float   thrown[2],              halo,       esize;
868     const char *name,   *item,                      *vwep, *hwep,                     *proj,                  *eprj;
869 };
870 #ifdef GAMESERVER
871 weaptypes weaptype[] =
872 {
873     {
874             ANIM_CLAW,         S_CLAW,    1,
875             true,       false,      true,
876             { 0, 0 },               14,         0,
877             "claw", "weapons/claw/item", "weapons/claw/vwep", "weapons/claw/hwep", "", ""
878     },
879     {
880             ANIM_PISTOL,        S_PISTOL,   10,
881             true,       true,       false,
882             { 0, 0 },               8,          0.35f,
883             "pistol", "weapons/pistol/item", "weapons/pistol/vwep", "weapons/pistol/hwep", "weapons/pistol/proj", "projectiles/cartridge"
884     },
885     {
886             ANIM_SWORD,         S_SWORD,    1,
887             true,       false,      true,
888             { 0, 0 },               14,         0,
889             "sword", "weapons/sword/item", "weapons/sword/vwep", "weapons/sword/hwep", "", ""
890     },
891     {
892             ANIM_SHOTGUN,       S_SHOTGUN,  10,
893             true,       true,       false,
894             { 0, 0 },               12,         0.45f,
895             "shotgun", "weapons/shotgun/item", "weapons/shotgun/vwep", "weapons/shotgun/hwep", "", "projectiles/shell"
896     },
897     {
898             ANIM_SMG,           S_SMG,      20,
899             true,       true,       false,
900             { 0, 0 },               10,         0.35f,
901             "smg", "weapons/smg/item", "weapons/smg/vwep", "weapons/smg/hwep", "", "projectiles/cartridge"
902     },
903     {
904             ANIM_FLAMER,        S_FLAMER,   1,
905             true,       true,       false,
906             { 0, 0 },               12,         0,
907             "flamer", "weapons/flamer/item", "weapons/flamer/vwep", "weapons/flamer/hwep", "", ""
908     },
909     {
910             ANIM_PLASMA,        S_PLASMA,   1,
911             true,       false,      false,
912             { 0, 0 },               8,         0,
913             "plasma", "weapons/plasma/item", "weapons/plasma/vwep", "weapons/plasma/hwep", "", ""
914     },
915     {
916             ANIM_ZAPPER,        S_ZAPPER,   1,
917             true,       false,      true,
918             { 0, 0 },               10,         0,
919             "zapper", "weapons/zapper/item", "weapons/zapper/vwep", "weapons/zapper/hwep", "", ""
920     },
921     {
922             ANIM_RIFLE,         S_RIFLE,    1,
923             true,       false,      false,
924             { 0, 0 },               12,         0,
925             "rifle", "weapons/rifle/item", "weapons/rifle/vwep", "weapons/rifle/hwep", "", ""
926     },
927     {
928             ANIM_GRENADE,       S_GRENADE,  1,
929             false,      false,      false,
930             { 0.0625f, 0.0625f },   6,          0,
931             "grenade", "weapons/grenade/item", "weapons/grenade/vwep", "weapons/grenade/hwep", "weapons/grenade/proj", ""
932     },
933     {
934             ANIM_MINE,          S_MINE,     1,
935             false,      false,      false,
936             { 0.0625f, 0.0625f },   6,          0,
937             "mine", "weapons/mine/item", "weapons/mine/vwep", "weapons/mine/hwep", "weapons/mine/proj", ""
938     },
939     {
940             ANIM_ROCKET,        S_ROCKET,   1,
941             true,      false,       false,
942             { 0, 0 },               10,          0,
943             "rocket", "weapons/rocket/item", "weapons/rocket/vwep", "weapons/rocket/hwep", "weapons/rocket/proj",  ""
944     },
945     {
946             0,                  S_MELEE,    1,
947             false,      false,      false,
948             { 0, 0 },               1,          0,
949             "melee",    "", "", "", "", ""
950     }
951 };
952 SVAR(0, weapname, "claw pistol sword shotgun smg flamer plasma zapper rifle grenade mine rocket melee");
953 VAR(0, weapidxclaw, 1, W_CLAW, -1);
954 VAR(0, weapidxpistol, 1, W_PISTOL, -1);
955 VAR(0, weapidxsword, 1, W_SWORD, -1);
956 VAR(0, weapidxshotgun, 1, W_SHOTGUN, -1);
957 VAR(0, weapidxsmg, 1, W_SMG, -1);
958 VAR(0, weapidxflamer, 1, W_FLAMER, -1);
959 VAR(0, weapidxplasma, 1, W_PLASMA, -1);
960 VAR(0, weapidxzapper, 1, W_ZAPPER, -1);
961 VAR(0, weapidxrifle, 1, W_RIFLE, -1);
962 VAR(0, weapidxgrenade, 1, W_GRENADE, -1);
963 VAR(0, weapidxmine, 1, W_MINE, -1);
964 VAR(0, weapidxrocket, 1, W_ROCKET, -1);
965 VAR(0, weapidxmelee, 1, W_MELEE, -1);
966 VAR(0, weapidxoffset, 1, W_OFFSET, -1);
967 VAR(0, weapidxitem, 1, W_ITEM, -1);
968 VAR(0, weapidxhidden, 1, W_ALL, -1);
969 VAR(0, weapidxloadout, 1, W_LOADOUT, -1);
970 VAR(0, weapidxnum, 1, W_MAX, -1);
971 #else
972 extern weaptypes weaptype[];
973 #endif
974