17 || (this.
ammo < this.shot_dmg)
18 || (targ.ammo >= targ.ammo_max)
19 || (
vdist(targ.origin -
this.origin, >,
this.target_range))
20 || (
this.team != targ.team)
31 it.enemy.ammo =
min(it.enemy.ammo + it.shot_dmg,it.enemy.ammo_max);
32 vector fl_org = 0.5 * (it.enemy.absmin + it.enemy.absmax);
33 te_smallflash(fl_org);
37 it.tur_head.avelocity =
'0 250 0' * (it.ammo / it.ammo_max);
48 it.tur_head.scale = 0.75;
49 it.tur_head.avelocity =
'0 50 0';
61 PAR(_(
"The %s is a bit of a unique turret, instead helping out other turrets rather than directly attacking its targets. "
62 "It has no weapon of its own, and instead works by generating power for nearby turrets, so that they can attack their shared targets more often."),
COLORED_NAME(
this));
63 PAR(_(
"This is the only turret that doesn't directly attack its targets."));
#define MUTATOR_CALLHOOK(id,...)
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
#define COLORED_NAME(this)
bool turret_fusionreactor_firecheck(entity this)
#define METHOD(cname, name, prototype)
@ MUT_FUSREAC_TARG_INVALID
#define PAR(...)
Adds an individually translatable paragraph to PAGE_TEXT without having to deal with strcat and sprin...
bool turret_initialize(entity this, Turret tur)
const int TFL_FIRECHECK_DISTANCES
const int TFL_TARGETSELECT_TEAMCHECK
const int TFL_FIRECHECK_AMMO_OWN
const int TFL_FIRECHECK_DEAD
const int TFL_TARGETSELECT_RANGELIMITS
const int TFL_FIRECHECK_AMMO_OTHER
const int TFL_AMMO_ENERGY
const int TFL_AMMO_RECHARGE
const int TFL_TARGETSELECT_OWNTEAM
const int TFL_SHOOT_HITALLVALID
#define vdist(v, cmp, f)
Vector distance comparison, avoids sqrt()
float attack_finished_single[MAX_WEAPONSLOTS]