16 || !targ || this.
team != targ.team
19 ||
vdist(targ.origin -
this.origin, >,
this.target_range)
34 it.enemy.ammo =
min(it.enemy.ammo + it.shot_dmg, it.enemy.ammo_max);
35 vector fl_org = 0.5 * (it.enemy.absmin + it.enemy.absmax);
36 te_smallflash(fl_org);
40 it.tur_head.avelocity =
'0 250 0' * (it.ammo / it.ammo_max);
51 it.tur_head.scale = 0.75;
52 it.tur_head.avelocity =
'0 50 0';
64 PAR(_(
"The %s is a bit of a unique turret, instead helping out other turrets rather than directly attacking its targets. "
65 "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));
66 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_TRACK_NO
don't move head
const int TFL_FIRECHECK_DISTANCES
another range check
const int TFL_TARGETSELECT_TEAMCHECK
don't attack teammates
const int TFL_FIRECHECK_AMMO_OWN
own ammo needs to be larger than damage dealt
const int TFL_FIRECHECK_DEAD
don't attack dead targets (zombies?)
const int TFL_TARGETSELECT_RANGELIMITS
limit target selection range
const int TFL_FIRECHECK_AMMO_OTHER
target's ammo needs to be less than max
const int TFL_AMMO_ENERGY
uses power
const int TFL_AIM_NO
no aiming
const int TFL_AMMO_RECHARGE
regenerates ammo
const int TFL_TARGETSELECT_OWNTEAM
only attack teammates
const int TFL_SHOOT_HITALLVALID
loop through all valid targets
#define vdist(v, cmp, f)
Vector distance comparison, avoids sqrt()
float attack_finished_single[MAX_WEAPONSLOTS]