2 float autocvar_g_touchexplode_radius;
3 float autocvar_g_touchexplode_damage;
4 float autocvar_g_touchexplode_edgedamage;
5 float autocvar_g_touchexplode_force;
7 REGISTER_MUTATOR(touchexplode, cvar("g_touchexplode"));
9 .float touchexplode_time;
11 void PlayerTouchExplode(entity p1, entity p2)
13 vector org = (p1.origin + p2.origin) * 0.5;
14 org.z += (p1.mins.z + p2.mins.z) * 0.5;
16 sound(self, CH_TRIGGER, SND_GRENADE_IMPACT, VOL_BASE, ATTEN_NORM);
17 Send_Effect(EFFECT_EXPLOSION_SMALL, org, '0 0 0', 1);
21 RadiusDamage(e, world, autocvar_g_touchexplode_damage, autocvar_g_touchexplode_edgedamage, autocvar_g_touchexplode_radius, world, world, autocvar_g_touchexplode_force, DEATH_TOUCHEXPLODE.m_id, world);
25 MUTATOR_HOOKFUNCTION(touchexplode, PlayerPreThink)
27 if(time > self.touchexplode_time)
31 if(self.deadflag == DEAD_NO)
32 if (!IS_INDEPENDENT_PLAYER(self))
33 FOR_EACH_PLAYER(other) if(self != other)
35 if(time > other.touchexplode_time)
37 if(other.deadflag == DEAD_NO)
38 if (!IS_INDEPENDENT_PLAYER(other))
39 if(boxesoverlap(self.absmin, self.absmax, other.absmin, other.absmax))
41 PlayerTouchExplode(self, other);
42 self.touchexplode_time = other.touchexplode_time = time + 0.2;