1 #include "sv_touchexplode.qh"
3 string autocvar_g_touchexplode;
4 float autocvar_g_touchexplode_radius;
5 float autocvar_g_touchexplode_damage;
6 float autocvar_g_touchexplode_edgedamage;
7 float autocvar_g_touchexplode_force;
9 REGISTER_MUTATOR(touchexplode, expr_evaluate(autocvar_g_touchexplode));
11 .float touchexplode_time;
13 void PlayerTouchExplode(entity p1, entity p2)
15 vector org = (p1.origin + p2.origin) * 0.5;
16 org.z += (p1.mins.z + p2.mins.z) * 0.5;
18 sound(p1, CH_TRIGGER, SND_GRENADE_IMPACT, VOL_BASE, ATTEN_NORM);
19 Send_Effect(EFFECT_EXPLOSION_SMALL, org, '0 0 0', 1);
23 RadiusDamage(e, NULL, autocvar_g_touchexplode_damage, autocvar_g_touchexplode_edgedamage, autocvar_g_touchexplode_radius, NULL, NULL, autocvar_g_touchexplode_force, DEATH_TOUCHEXPLODE.m_id, DMG_NOWEP, NULL);
27 MUTATOR_HOOKFUNCTION(touchexplode, PlayerPreThink)
29 entity player = M_ARGV(0, entity);
31 if(time > player.touchexplode_time)
33 if(!STAT(FROZEN, player))
36 if(!IS_INDEPENDENT_PLAYER(player))
37 FOREACH_CLIENT(IS_PLAYER(it) && it != player, {
38 if(time > it.touchexplode_time)
41 if (!IS_INDEPENDENT_PLAYER(it))
42 if(boxesoverlap(player.absmin, player.absmax, it.absmin, it.absmax))
44 PlayerTouchExplode(player, it);
45 player.touchexplode_time = it.touchexplode_time = time + 0.2;