Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
sv_touchexplode.qc
Go to the documentation of this file.
1#include "sv_touchexplode.qh"
2
8
9SOUND(TOUCHEXPLODE, W_Sound("grenade_impact"));
10
12
14
16{
17 vector org = (p1.origin + p2.origin) * 0.5;
18 org.z += (p1.mins.z + p2.mins.z) * 0.5;
19
20 sound(p1, CH_TRIGGER, SND_TOUCHEXPLODE, VOL_BASE, ATTEN_NORM);
21 Send_Effect(EFFECT_EXPLOSION_SMALL, org, '0 0 0', 1);
22
23 entity e = spawn();
24 setorigin(e, org);
26 delete(e);
27}
28
30{
31 entity player = M_ARGV(0, entity);
32
33 if(time > player.touchexplode_time && !game_stopped && !IS_DEAD(player) && IS_PLAYER(player) && !STAT(FROZEN, player) && !IS_INDEPENDENT_PLAYER(player))
34 {
35 FOREACH_CLIENT(IS_PLAYER(it) && it != player, {
36 if(time > it.touchexplode_time && !STAT(FROZEN, it) && !IS_DEAD(it) && !IS_INDEPENDENT_PLAYER(it))
37 if(boxesoverlap(player.absmin, player.absmax, it.absmin, it.absmax))
38 {
39 PlayerTouchExplode(player, it);
40 player.touchexplode_time = it.touchexplode_time = time + 0.2;
41 }
42 });
43 }
44}
#define REGISTER_MUTATOR(...)
Definition base.qh:295
#define MUTATOR_HOOKFUNCTION(...)
Definition base.qh:335
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
#define M_ARGV(x, type)
Definition events.qh:17
#define IS_DEAD(s)
Definition player.qh:245
#define IS_PLAYER(s)
Definition player.qh:243
float game_stopped
Definition stats.qh:81
float time
#define spawn
ERASEABLE bool expr_evaluate(string s)
Evaluate an expression of the form: [+ | -]?
Definition cvar.qh:48
float RadiusDamage(entity inflictor, entity attacker, float coredamage, float edgedamage, float rad, entity cantbe, entity mustbe, float forceintensity, int deathtype,.entity weaponentity, entity directhitentity)
Definition damage.qc:981
#define DMG_NOWEP
Definition damage.qh:104
void Send_Effect(entity eff, vector eff_loc, vector eff_vel, int eff_cnt)
Definition all.qc:124
#define PlayerPreThink
Definition _all.inc:254
#define STAT(...)
Definition stats.qh:82
#define NULL
Definition post.qh:14
vector
Definition self.qh:92
vector org
Definition self.qh:92
#define IS_INDEPENDENT_PLAYER(e)
Definition client.qh:312
const int CH_TRIGGER
Definition sound.qh:12
const float VOL_BASE
Definition sound.qh:36
const float ATTEN_NORM
Definition sound.qh:30
#define sound(e, c, s, v, a)
Definition sound.qh:52
string W_Sound(string w_snd)
Definition all.qc:225
#define SOUND(name, path)
Definition all.qh:30
float touchexplode_time
float autocvar_g_touchexplode_radius
void PlayerTouchExplode(entity p1, entity p2)
float autocvar_g_touchexplode_force
float autocvar_g_touchexplode_edgedamage
float autocvar_g_touchexplode_damage
string autocvar_g_touchexplode
#define FOREACH_CLIENT(cond, body)
Definition utils.qh:50
ERASEABLE float boxesoverlap(vector m1, vector m2, vector m3, vector m4)
requires that m2>m1 in all coordinates, and that m4>m3
Definition vector.qh:73