4 #include "tesla_weapon.qc"
6 CLASS(TeslaCoil, Turret)
7 /* spawnflags */ ATTRIB(TeslaCoil, spawnflags, int, TUR_FLAG_HITSCAN | TUR_FLAG_PLAYER | TUR_FLAG_MISSILE);
8 /* mins */ ATTRIB(TeslaCoil, mins, vector, '-60 -60 0');
9 /* maxs */ ATTRIB(TeslaCoil, maxs, vector, '60 60 128');
10 /* modelname */ ATTRIB(TeslaCoil, mdl, string, "tesla_base.md3");
11 /* model */ ATTRIB(TeslaCoil, model, string, strzone(strcat("models/turrets/", this.mdl)));
12 /* head_model */ ATTRIB(TeslaCoil, head_model, string, strzone(strcat("models/turrets/", "tesla_head.md3")));
13 /* netname */ ATTRIB(TeslaCoil, netname, string, "tesla");
14 /* fullname */ ATTRIB(TeslaCoil, turret_name, string, _("Tesla Coil"));
15 ATTRIB(TeslaCoil, m_weapon, Weapon, WEP_TESLA);
17 REGISTER_TURRET(TESLA, NEW(TeslaCoil));
23 #include "tesla_weapon.qc"
27 spawnfunc(turret_tesla) { if (!turret_initialize(TUR_TESLA)) remove(self); }
29 METHOD(TeslaCoil, tr_think, void(TeslaCoil thistur))
33 self.tur_head.avelocity = '0 0 0';
37 if(self.ammo < self.shot_dmg)
39 self.tur_head.avelocity = '0 45 0' * (self.ammo / self.shot_dmg);
43 self.tur_head.avelocity = '0 180 0' * (self.ammo / self.shot_dmg);
45 if(self.attack_finished_single > time)
49 f = (self.ammo / self.ammo_max);
53 te_csqc_lightningarc(self.tur_shotorg,self.tur_shotorg + (randomvec() * 350));
57 float turret_tesla_firecheck();
58 METHOD(TeslaCoil, tr_setup, void(TeslaCoil this, entity it))
60 it.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
61 TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK;
63 it.turret_firecheckfunc = turret_tesla_firecheck;
64 it.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
65 TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK;
67 it.firecheck_flags = TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_AMMO_OWN;
68 it.shoot_flags = TFL_SHOOT_CUSTOM;
69 it.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIEVE;
70 it.aim_flags = TFL_AIM_NO;
71 it.track_flags = TFL_TRACK_NO;
74 float turret_tesla_firecheck()
76 // g_turrets_targetscan_maxdelay forces a target re-scan at least this often
77 float do_target_scan = 0;
79 if((self.target_select_time + autocvar_g_turrets_targetscan_maxdelay) < time)
82 // Old target (if any) invalid?
83 if(self.target_validate_time < time)
84 if (turret_validate_target(self, self.enemy, self.target_validate_flags) <= 0)
87 self.target_validate_time = time + 0.5;
91 // But never more often then g_turrets_targetscan_mindelay!
92 if (self.target_select_time + autocvar_g_turrets_targetscan_mindelay > time)
97 self.enemy = turret_select_target();
98 self.target_select_time = time;
101 if(!turret_firecheck())