5 #include <lib/warpzone/util_server.qh>
6 #include <common/weapons/_all.qh>
7 #include <common/weapons/_all.qh>
8 #include <common/stats.qh>
9 #include <common/deathtypes/all.qh>
14 * Adds spawnfunc_trigger_swamp and support routines for nexuiz 1.2.1+ and xonotic
15 * Author tZork (Jakob MG)
21 void swamp_think(entity this)
23 // set myself as current swampslug where possible
24 IL_EACH(g_swamped, it.swampslug == this,
27 IL_REMOVE(g_swamped, it);
30 if(this.active == ACTIVE_ACTIVE)
32 FOREACH_ENTITY_RADIUS((this.absmin + this.absmax) * 0.5, vlen(this.absmax - this.absmin) * 0.5 + 1, it.swampslug.active == ACTIVE_NOT && IS_PLAYER(it) && !IS_DEAD(it),
34 vector emin = it.absmin;
35 vector emax = it.absmax;
36 if(this.solid == SOLID_BSP)
41 if(boxesoverlap(emin, emax, this.absmin, this.absmax)) // quick
42 if(WarpZoneLib_BoxTouchesBrush(emin, emax, this, it)) // accurate
45 IL_PUSH(g_swamped, it);
50 IL_EACH(g_swamped, it.swampslug == this,
52 if(time > it.swamp_interval)
54 Damage (it, this, this, this.dmg, DEATH_SWAMP.m_id, DMG_NOWEP, it.origin, '0 0 0');
55 it.swamp_interval = time + this.swamp_interval;
60 this.nextthink = time;
63 /*QUAKED spawnfunc_trigger_swamp (.5 .5 .5) ?
64 Players in the swamp will be
65 slowed down and damaged over time
67 spawnfunc(trigger_swamp)
71 this.active = ACTIVE_ACTIVE;
73 setthink(this, swamp_think);
74 this.nextthink = time;
76 // Setup default keys, if missing
79 if(!this.swamp_interval)
80 this.swamp_interval = 1;
81 if(!this.swamp_slowdown)
82 this.swamp_slowdown = 0.5;