]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/server/tturrets/units/unit_tessla.qc
renamed src files. to much turrets/turret_something/tturret... ;)
[divverent/nexuiz.git] / data / qcsrc / server / tturrets / units / 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_single > 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_single = time + self.shot_refire;\r
74     self.ammo = self.ammo - self.shot_dmg;\r
75     for (i = 0;i < 10;i = i + 1)\r
76     {\r
77         d *= 0.5;\r
78         r *= 0.75;\r
79         t = toast(t,r,d);\r
80         if (t == world) break;\r
81     }\r
82 \r
83     e = findchainfloat(toasted, 1);\r
84     while (e)\r
85     {\r
86         e.toasted = 0;\r
87         e = e.chain;\r
88     }\r
89 }\r
90 \r
91 void turret_tesla_postthink()\r
92 {\r
93     turret_tesla_fire();\r
94 \r
95     self.tur_head.frame = self.tur_head.frame + 1;\r
96 \r
97     if (self.tur_head.frame >= 11)\r
98         self.tur_head.frame = 0;\r
99 \r
100     if (self.tur_head.avelocity == '0 0 0')\r
101         self.tur_head.avelocity = '0 35 0';\r
102 }\r
103 \r
104 \r
105 void turret_tesla_dinit()\r
106 {\r
107     if (self.netname == "")      self.netname     = "Tesla Coil";\r
108 \r
109     self.turrcaps_flags = TFL_TURRCAPS_HITSCAN | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MISSILEKILL;\r
110     self.target_select_flags = TFL_TARGETSELECT_NO;\r
111     self.firecheck_flags = TFL_FIRECHECK_REFIRE;\r
112     self.shoot_flags = TFL_SHOOT_CUSTOM;\r
113     self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;\r
114     self.aim_flags = TFL_AIM_NO;\r
115     self.track_flags = TFL_TRACK_NO;\r
116 \r
117     if (turret_stdproc_init("tesla_std") == 0)\r
118     {\r
119         remove(self);\r
120         return;\r
121     }\r
122 \r
123     setmodel(self,"models/turrets/tesla_base.md3");\r
124     setmodel(self.tur_head,"models/turrets/tesla_head.md3");\r
125 \r
126     self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |\r
127                                  TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;\r
128 \r
129     if (!turret_tag_setup(0))\r
130         dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");\r
131 \r
132     self.turret_firefunc = turret_stdproc_nothing;\r
133     self.turret_postthink = turret_tesla_postthink;\r
134 }\r
135 \r
136 /*QUAKED turret_tesla (0 .5 .8) ?\r
137 */\r
138 void spawnfunc_turret_tesla()\r
139 {\r
140     //precache_model ("models/turrets/tesla_head.md3");\r
141     //precache_model ("models/turrets/tesla_base.md3");\r
142 \r
143 \r
144     self.think = turret_tesla_dinit;\r
145     self.nextthink = time + 0.5;\r
146 }\r
147 \r