1 #include "../../csqceffects.qh"
3 void spawnfunc_turret_tesla();
4 void turret_tesla_dinit();
5 void turret_tesla_fire();
7 entity toast(entity from, float range, float damage)
10 entity etarget = world;
16 e = findradius(from.origin,range);
19 if ((e.railgunhit != 1) && (e != from))
21 r = turret_validate_target(self,e,self.target_validate_flags);
24 traceline(from.origin,0.5 * (e.absmin + e.absmax),MOVE_WORLDONLY,from);
25 if (trace_fraction == 1.0)
27 d = vlen(e.origin - from.origin);
41 te_csqc_lightningarc(from.origin,etarget.origin);
42 Damage(etarget, self, self, damage, DEATH_TURRET_TESLA, etarget.origin, '0 0 0');
43 etarget.railgunhit = 1;
49 float turret_tesla_firecheck()
51 // g_turrets_targetscan_maxdelay forces a target re-scan at least this often
52 float do_target_scan = 0;
54 if((self.target_select_time + autocvar_g_turrets_targetscan_maxdelay) < time)
57 // Old target (if any) invalid?
58 if(self.target_validate_time < time)
59 if (turret_validate_target(self, self.enemy, self.target_validate_flags) <= 0)
62 self.target_validate_time = time + 0.5;
66 // But never more often then g_turrets_targetscan_mindelay!
67 if (self.target_select_time + autocvar_g_turrets_targetscan_mindelay > time)
72 self.enemy = turret_select_target();
73 self.target_select_time = time;
76 if (!turret_stdproc_firecheck())
86 void turret_tesla_fire()
92 r = self.target_range;
94 setorigin(e,self.tur_shotorg);
96 self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
101 if (t == world) return;
103 self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES | TFL_TARGETSELECT_TEAMCHECK;
105 self.attack_finished_single = time + self.shot_refire;
106 for (i = 0; i < 10; ++i)
111 if (t == world) break;
115 e = findchainfloat(railgunhit, 1);
123 void turret_tesla_postthink()
127 self.tur_head.avelocity = '0 0 0';
131 if(self.ammo < self.shot_dmg)
133 self.tur_head.avelocity = '0 45 0' * (self.ammo / self.shot_dmg);
137 self.tur_head.avelocity = '0 180 0' * (self.ammo / self.shot_dmg);
139 if(self.attack_finished_single > time)
143 f = (self.ammo / self.ammo_max);
147 te_csqc_lightningarc(self.tur_shotorg,self.tur_shotorg + (randomvec() * 350));
152 void turret_tesla_dinit()
154 if (self.netname == "") self.netname = "Tesla Coil";
156 self.turrcaps_flags = TFL_TURRCAPS_HITSCAN | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MISSILEKILL;
158 self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
159 TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
161 self.firecheck_flags = TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_OWM_AMMO;
162 self.shoot_flags = TFL_SHOOT_CUSTOM;
163 self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
164 self.aim_flags = TFL_AIM_NO;
165 self.track_flags = TFL_TRACK_NO;
167 if (turret_stdproc_init("tesla_std", "models/turrets/tesla_base.md3", "models/turrets/tesla_head.md3", TID_TESLA) == 0)
172 setsize(self,'-60 -60 0','60 60 128');
174 self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
175 TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
177 self.turret_firefunc = turret_tesla_fire;
178 self.turret_postthink = turret_tesla_postthink;
179 self.turret_firecheckfunc = turret_tesla_firecheck;
182 /*QUAKED turret_tesla (0 .5 .8) ?
184 void spawnfunc_turret_tesla()
186 precache_model ("models/turrets/tesla_head.md3");
187 precache_model ("models/turrets/tesla_base.md3");
190 self.think = turret_tesla_dinit;
191 self.nextthink = time + 0.5;