Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
swamp.qc
Go to the documentation of this file.
1#include "swamp.qh"
2#if defined(CSQC)
3#elif defined(MENUQC)
4#elif defined(SVQC)
8 #include <common/stats.qh>
10#endif
11
12/*
13* t_swamp.c
14* Adds spawnfunc_trigger_swamp and support routines for nexuiz 1.2.1+ and xonotic
15* Author tZork (Jakob MG)
16* jakob@games43.se
17* 2005 11 29
18*/
19
20#ifdef SVQC
22{
23 // set myself as current swampslug where possible
24 IL_EACH(g_swamped, it.swampslug == this,
25 {
26 it.swampslug = NULL;
27 IL_REMOVE(g_swamped, it);
28 });
29
30 if(this.active == ACTIVE_ACTIVE)
31 {
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),
33 {
34 if (WarpZoneLib_ExactTrigger_Touch(this, it, false))
35 {
36 if(!it.swampslug)
37 IL_PUSH(g_swamped, it);
38 it.swampslug = this;
39 }
40 });
41
42 IL_EACH(g_swamped, it.swampslug == this,
43 {
44 if(time > it.swamp_interval)
45 {
46 Damage (it, this, this, this.dmg, DEATH_SWAMP.m_id, DMG_NOWEP, it.origin, '0 0 0');
47 it.swamp_interval = time + this.swamp_interval;
48 }
49 });
50 }
51
52 this.nextthink = time;
53}
54
55/*QUAKED spawnfunc_trigger_swamp (.5 .5 .5) ?
56Players in the swamp will be
57slowed down and damaged over time
58*/
59spawnfunc(trigger_swamp)
60{
61 // Init stuff
63 this.active = ACTIVE_ACTIVE;
64 setthink(this, swamp_think);
65 this.nextthink = time;
66
67 // Setup default keys, if missing
68 if(!this.dmg)
69 this.dmg = 5;
70 if(!this.swamp_interval)
71 this.swamp_interval = 1;
72 if(!this.swamp_slowdown)
73 this.swamp_slowdown = 0.5;
74}
75#endif
float dmg
Definition breakable.qc:12
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
#define IS_DEAD(s)
Definition player.qh:245
#define IS_PLAYER(s)
Definition player.qh:243
float time
float nextthink
vector absmax
vector absmin
const int ACTIVE_NOT
Definition defs.qh:36
int active
Definition defs.qh:34
const int ACTIVE_ACTIVE
Definition defs.qh:37
ERASEABLE entity IL_PUSH(IntrusiveList this, entity it)
Push to tail.
#define IL_EACH(this, cond, body)
#define FOREACH_ENTITY_RADIUS(org, dist, cond, body)
Definition iter.qh:160
bool WarpZoneLib_ExactTrigger_Touch(entity this, entity toucher, bool touchfunc)
Definition common.qc:815
#define EXACTTRIGGER_INIT
Definition common.qh:116
float vlen(vector v)
#define setthink(e, f)
#define spawnfunc(id)
Definition spawnfunc.qh:96
void swamp_think(entity this)
Definition swamp.qc:21
float swamp_slowdown
Definition swamp.qh:10
float swamp_interval
Definition swamp.qh:9
IntrusiveList g_swamped
Definition swamp.qh:4