]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/server/tturrets/units/unit_ewheel.qc
fixed those two x++ warnings
[divverent/nexuiz.git] / data / qcsrc / server / tturrets / units / unit_ewheel.qc
1 void turret_ewheel_projectile_explode()\r
2 {\r
3     vector org2;\r
4 \r
5     org2 = findbetterlocation (self.origin, 8);\r
6     pointparticles(particleeffectnum("laser_impact"), org2, trace_plane_normal * 1000, 1);\r
7 \r
8 #ifdef TURRET_DEBUG\r
9     float d;\r
10 \r
11     d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);\r
12     self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;\r
13     self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;\r
14 #else\r
15     RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);\r
16 #endif\r
17     sound (self, CHAN_PROJECTILE, "weapons/electro_impact.wav", 1, ATTN_NORM);\r
18 \r
19     remove (self);\r
20 }\r
21 \r
22 \r
23 void ewheel_attack()\r
24 {\r
25     entity proj;\r
26     vector v;\r
27     float f,i;\r
28 \r
29     for(i=0;i<2;++i)\r
30     {\r
31         f = gettagindex(self.tur_head,"tag_fire");\r
32         v = gettaginfo(self.tur_head,f);\r
33         v_y = v_y * -1;\r
34         self.tur_shotorg = v;\r
35         turret_do_updates(self);\r
36 \r
37         sound (self, CHAN_WEAPON, "weapons/lasergun_fire.wav", 1, ATTN_NORM);\r
38         pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg_updated, self.tur_shotdir_updated * 1000, 1);\r
39 \r
40         proj                    = spawn ();\r
41         setorigin(proj, self.tur_shotorg_updated);\r
42         setsize(proj, '-0.5 -0.5 -0.5', '0.5 0.5 0.5');\r
43         setmodel(proj, "models/laser.mdl"); // precision set above\r
44         proj.classname       = "ewheel bolt";\r
45         proj.owner           = self;\r
46         proj.bot_dodge       = FALSE;\r
47         proj.bot_dodgerating = self.shot_dmg;\r
48         proj.think           = turret_ewheel_projectile_explode;\r
49         proj.nextthink       = time + 9;\r
50         proj.solid           = SOLID_BBOX;\r
51         proj.movetype        = MOVETYPE_FLYMISSILE;\r
52         proj.velocity        = (self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;\r
53         proj.angles          = vectoangles(proj.velocity);\r
54         proj.touch           = turret_ewheel_projectile_explode;\r
55         proj.effects         = EF_LOWPRECISION |  EF_BRIGHTFIELD;\r
56         proj.enemy           = self.enemy;\r
57         proj.flags           = FL_PROJECTILE | FL_NOTARGET;\r
58 \r
59         self.tur_head.frame += 1;\r
60 \r
61         if (self.tur_head.frame > 3)\r
62         self.tur_head.frame = 0;\r
63         }\r
64 \r
65 }\r
66 \r
67 void ewheel_postthink()\r
68 {\r
69     vector wish_angle,real_angle;\r
70     float turn_limit;\r
71 \r
72     if (!self.enemy)\r
73     {\r
74         self.velocity = '0 0 0';\r
75         return;\r
76     }\r
77 \r
78     wish_angle = normalize(self.enemy.origin - self.origin);\r
79     wish_angle = vectoangles(wish_angle);\r
80     real_angle = wish_angle - self.angles;\r
81 \r
82     if (real_angle_y < 0) real_angle_y += 360;\r
83     if (real_angle_y > 180) real_angle_y -= 360;\r
84 \r
85     turn_limit = cvar("g_turrets_unit_ewheel_turnrate");\r
86     // Convert from dgr/sec to dgr/tic\r
87     turn_limit  = turn_limit / (1 / self.ticrate);\r
88     real_angle_y = bound(turn_limit * -1,real_angle_y,turn_limit);\r
89     self.angles_y = self.angles_y + real_angle_y;\r
90     self.angles_z = bound(-10,real_angle_y * -1,10);\r
91 \r
92     if(self.frame > 40)\r
93         self.frame = 1;\r
94 \r
95     self.angles_z = 0;\r
96     if(self.tur_dist_enemy > self.target_range_optimal)\r
97     {\r
98         self.angles_z = bound(-15,real_angle_y * -1,15);\r
99         makevectors(self.angles);\r
100         self.velocity = v_forward * 250;\r
101         self.frame += 2;\r
102         return;\r
103     }\r
104 \r
105     self.velocity = '0 0 0';\r
106 \r
107 \r
108 }\r
109 \r
110 void ewheel_respawnhook()\r
111 {\r
112 \r
113 \r
114     setorigin(self,self.pos1);\r
115 \r
116     //self.angles = self.wkr_spawn.angles;\r
117 \r
118 }\r
119 \r
120 void ewheel_diehook()\r
121 {\r
122 }\r
123 \r
124 void turret_ewheel_dinit()\r
125 {\r
126     entity e;\r
127 \r
128     if (self.netname == "")      self.netname     = "Ewheel Turret";\r
129 \r
130     // self.ticrate = 0.05;\r
131 \r
132     if (self.target != "")\r
133     {\r
134         e = find(world,targetname,self.target);\r
135         if (!e)\r
136         {\r
137             bprint("Warning! initital waypoint for ewheel does NOT exsist!\n");\r
138             self.target = "";\r
139         }\r
140 \r
141         if (e.classname != "turret_checkpoint")\r
142             dprint("Warning: not a turrret path\n");\r
143         else\r
144             self.goalcurrent = e;\r
145     }\r
146 \r
147     self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;\r
148     self.turrcaps_flags = TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MOVE | TFL_TURRCAPS_ROAM | TFL_TURRCAPS_LINKED;\r
149     self.aim_flags = TFL_AIM_SIMPLE;// TFL_AIM_LEAD | TFL_AIM_ZEASE;\r
150 \r
151     self.turret_respawnhook = ewheel_respawnhook;\r
152     self.turret_diehook = ewheel_diehook;\r
153 \r
154     self.ticrate = 0.05;\r
155     if (turret_stdproc_init("ewheel_std") == 0)\r
156     {\r
157         remove(self);\r
158         return;\r
159     }\r
160 \r
161     self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;\r
162     self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;\r
163     self.damage_flags |= RFL_DMG_DEATH_NOGIBS;\r
164 \r
165     //self.flags      = FL_CLIENT;\r
166     self.iscreature = TRUE;\r
167     self.movetype   = MOVETYPE_WALK;\r
168     self.solid      = SOLID_SLIDEBOX;\r
169     self.takedamage = DAMAGE_AIM;\r
170 \r
171     setmodel(self,"models/turrets/ewheel-base.md3");\r
172     setmodel(self.tur_head,"models/turrets/ewheel-gun1.md3");\r
173 \r
174     setattachment(self.tur_head,self,"tag_head");\r
175 \r
176     self.pos1 = self.origin;\r
177 \r
178     vector v;\r
179     float f;\r
180     f = gettagindex(self.tur_head,"tag_fire");\r
181     v = gettaginfo(self.tur_head,f);\r
182     v_y = v_y * -1;\r
183 \r
184     //setsize(self,WALKER_MIN,WALKER_MAX);\r
185     //setsize(self,'-70 -70 0','70 70 55');\r
186 \r
187     self.tur_shotorg = v;\r
188     self.tur_aimorg  = v;\r
189 \r
190     self.tur_aimorg_x = 0;\r
191     self.tur_aimorg_y = 0;\r
192     self.tur_aimorg_z = 25;\r
193 \r
194     self.idle_aim = '0 0 0';\r
195 \r
196     // Our fire routine\r
197     self.turret_firefunc  = ewheel_attack;\r
198     self.turret_postthink = ewheel_postthink;\r
199     self.tur_head.frame = 1;\r
200 }\r
201 \r
202 \r
203 void spawnfunc_turret_ewheel()\r
204 {\r
205     precache_model ("models/turrets/ewheel-base.md3");\r
206     precache_model ("models/turrets/ewheel-gun1.md3");\r
207 \r
208     self.think = turret_ewheel_dinit;\r
209     self.nextthink = time + 0.5;\r
210 }\r