Xonotic
flac_weapon.qc
Go to the documentation of this file.
1 #include "flac_weapon.qh"
2 
3 #ifdef SVQC
4 
5 void turret_flac_projectile_think_explode(entity this);
6 SOUND(FlacAttack_FIRE, W_Sound("electro_fire"));
7 METHOD(FlacAttack, wr_think, void(entity thiswep, entity actor, .entity weaponentity, int fire)) {
8  bool isPlayer = IS_PLAYER(actor);
9  if (fire & 1)
10  if (!isPlayer || weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR_PRI(electro, refire))) {
11  if (isPlayer) {
12  turret_initparams(actor);
13  W_SetupShot_Dir(actor, weaponentity, v_forward, false, 0, SND_FlacAttack_FIRE, CH_WEAPON_B, 0, DEATH_TURRET_FLAC.m_id);
14  actor.tur_shotdir_updated = w_shotdir;
15  actor.tur_shotorg = w_shotorg;
16  actor.tur_head = actor;
17  actor.tur_impacttime = 10;
18  weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(electro, animtime), w_ready);
19  }
20 
21  turret_tag_fire_update(actor);
22 
23  entity proj = turret_projectile(actor, SND_HAGAR_FIRE, 5, 0, DEATH_TURRET_FLAC.m_id, PROJECTILE_HAGAR, true, true);
24  proj.missile_flags = MIF_SPLASH | MIF_PROXY;
25  setthink(proj, turret_flac_projectile_think_explode);
26  proj.nextthink = time + actor.tur_impacttime + (random() * 0.01 - random() * 0.01);
27  Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, actor.tur_shotorg, actor.tur_shotdir_updated * 1000, 1);
28 
29  if (!isPlayer) {
30  actor.tur_head.frame = actor.tur_head.frame + 1;
31  if (actor.tur_head.frame >= 4)
32  actor.tur_head.frame = 0;
33  }
34  }
35 }
36 
37 void turret_flac_projectile_think_explode(entity this)
38 {
39  if(this.enemy != NULL)
40  if(vdist(this.origin - this.enemy.origin, <, this.owner.shot_radius * 3))
41  setorigin(this, this.enemy.origin + randomvec() * this.owner.shot_radius);
42 
43 #ifdef TURRET_DEBUG
44  float d = RadiusDamage (this, this.owner, this.owner.shot_dmg, this.owner.shot_dmg, this.owner.shot_radius, this, NULL, this.owner.shot_force, this.projectiledeathtype, DMG_NOWEP, NULL);
45  this.owner.tur_debug_dmg_t_h = this.owner.tur_debug_dmg_t_h + d;
46  this.owner.tur_debug_dmg_t_f = this.owner.tur_debug_dmg_t_f + this.owner.shot_dmg;
47 #else
48  RadiusDamage (this, this.realowner, this.owner.shot_dmg, this.owner.shot_dmg, this.owner.shot_radius, this, NULL, this.owner.shot_force, this.projectiledeathtype, DMG_NOWEP, NULL);
49 #endif
50  delete(this);
51 }
52 
53 #endif
#define WEP_CVAR_PRI(wepname, name)
Definition: all.qh:300
vector w_shotorg
Definition: tracing.qh:18
const int MIF_SPLASH
Definition: common.qh:34
entity() spawn
void w_ready(Weapon thiswep, entity actor,.entity weaponentity, int fire)
vector w_shotdir
Definition: tracing.qh:19
origin
Definition: ent_cs.qc:114
string W_Sound(string w_snd)
Definition: all.qc:281
#define METHOD(cname, name, prototype)
Definition: oo.qh:257
const int PROJECTILE_HAGAR
Definition: projectiles.qh:18
#define DMG_NOWEP
Definition: damage.qh:126
entity owner
Definition: main.qh:73
entity enemy
Definition: sv_ctf.qh:143
bool weapon_prepareattack(Weapon thiswep, entity actor,.entity weaponentity, bool secondary, float attacktime)
#define NULL
Definition: post.qh:17
entity turret_projectile(entity actor, Sound _snd, float _size, float _health, float _death, float _proj_type, float _cull, float _cli_anim)
#define W_SetupShot_Dir(ent, wepent, s_forward, antilag, recoil, snd, chan, maxdamage, deathtype)
Definition: tracing.qh:31
#define vdist(v, cmp, f)
Vector distance comparison, avoids sqrt()
Definition: vector.qh:8
void weapon_thinkf(entity actor,.entity weaponentity, WFRAME fr, float t, void(Weapon thiswep, entity actor,.entity weaponentity, int fire) func)
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:1057
entity realowner
Definition: common.qh:25
setorigin(ent, v)
#define setthink(e, f)
#define SOUND(name, path)
Definition: all.qh:30
float time
Definition: csprogsdefs.qc:16
const int CH_WEAPON_B
Definition: sound.qh:8
const int MIF_PROXY
Definition: common.qh:36
#define IS_PLAYER(v)
Definition: utils.qh:9
vector v_forward
Definition: csprogsdefs.qc:31