]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/server/tturrets/units/turret_unit_tessla.qc
CTF!
[divverent/nexuiz.git] / data / qcsrc / server / tturrets / units / turret_unit_tessla.qc
1 void spawnfunc_turret_tesla();\r
2 void turret_tesla_dinit();\r
3 void turret_tesla_fire();\r
4 \r
5 .float toasted;\r
6 entity toast(entity from, float range, float damage)\r
7 {\r
8     entity e;\r
9     entity etarget;\r
10     float d,dd;\r
11 \r
12     dd = range + 1;\r
13 \r
14     e = findradius(from.origin,range);\r
15     while (e)\r
16     {\r
17         if((e.toasted != 1) && (e != from))\r
18         if (turret_validate_target(self,e,self.target_validate_flags) > 0)\r
19         {\r
20 \r
21             traceline(from.origin,e.origin,0,from);\r
22             if(trace_fraction > 0.9)\r
23             {\r
24                 d = vlen(e.origin - from.origin);\r
25                 if(d < dd)\r
26                 {\r
27                     dd = d;\r
28                     etarget = e;\r
29                 }\r
30             }\r
31         }\r
32         e = e.chain;\r
33     }\r
34 \r
35     if(etarget)\r
36     {\r
37         te_smallflash(etarget.origin);\r
38         te_lightning1(world,from.origin,etarget.origin);\r
39         Damage(etarget,self,self,damage,DEATH_TURRET,etarget.origin,'0 0 0');\r
40         etarget.toasted = 1;\r
41     }\r
42 \r
43     return etarget;\r
44 }\r
45 \r
46 void turret_tesla_fire()\r
47 {\r
48     entity e,t;\r
49     float d,r,i;\r
50 \r
51     if(cvar("g_turrets_nofire") != 0)\r
52         return;\r
53 \r
54     if(self.attack_finished > time) return;\r
55 \r
56     d = self.shot_dmg;\r
57     r = self.target_range;\r
58     e = spawn();\r
59     setorigin(e,self.origin + self.tur_shotorg);\r
60 \r
61 \r
62     self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |\r
63                                  TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;\r
64 \r
65     t = toast(e,r,d);\r
66     remove(e);\r
67 \r
68     if(t == world) return;\r
69 \r
70     self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |\r
71                                  TFL_TARGETSELECT_TEAMCHECK;\r
72 \r
73     self.attack_finished = time + self.shot_refire;\r
74     self.ammo = self.ammo - self.shot_dmg;\r
75     for(i = 0;i < 10;i++)\r
76     {\r
77         d *= 0.5; r *= 0.75;\r
78         t = toast(t,r,d);\r
79         if(t == world) break;\r
80     }\r
81 \r
82     e = findchainfloat(toasted, 1);\r
83     while(e)\r
84     {\r
85         e.toasted = 0;\r
86         e = e.chain;\r
87     }\r
88 }\r
89 \r
90 void turret_tesla_postthink()\r
91 {\r
92     turret_tesla_fire();\r
93 \r
94     self.tur_head.frame = self.tur_head.frame + 1;\r
95 \r
96     if(self.tur_head.frame >= 11)\r
97         self.tur_head.frame = 0;\r
98 \r
99     if(self.tur_head.avelocity == '0 0 0')\r
100         self.tur_head.avelocity = '0 35 0';\r
101 }\r
102 \r
103 \r
104 void turret_tesla_dinit()\r
105 {\r
106     if (self.netname == "")      self.netname     = "Tesla Coil";\r
107 \r
108     self.turrcaps_flags = TFL_TURRCAPS_HITSCAN | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MISSILEKILL;\r
109     self.target_select_flags = TFL_TARGETSELECT_NO;\r
110     self.firecheck_flags = TFL_FIRECHECK_REFIRE;\r
111     self.shoot_flags = TFL_SHOOT_CUSTOM;\r
112     self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;\r
113     self.aim_flags = TFL_AIM_NO;\r
114     self.track_flags = TFL_TRACK_NO;\r
115 \r
116     precache_model ("models/turrets/tesla_head.md3");\r
117     precache_model ("models/turrets/tesla_base.md3");\r
118 \r
119     if (turret_stdproc_init("tesla_std") == 0)\r
120     {\r
121         remove(self);\r
122         return;\r
123     }\r
124 \r
125     self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |\r
126                                  TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;\r
127 \r
128 \r
129     setmodel(self,"models/turrets/tesla_base.md3");\r
130     setmodel(self.tur_head,"models/turrets/tesla_head.md3");\r
131 \r
132     if(!turret_tag_setup(0))\r
133         dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");\r
134 \r
135     self.turret_firefunc = turret_stdproc_nothing;\r
136     self.turret_postthink = turret_tesla_postthink;\r
137 }\r
138 \r
139 /*QUAKED turret_tesla (0 .5 .8) ?\r
140 */\r
141 void spawnfunc_turret_tesla()\r
142 {\r
143     // return;\r
144     self.think = turret_tesla_dinit;\r
145     self.nextthink = time + 0.5;\r
146 }\r
147 \r