1 #define ewheel_amin_stop 0
2 #define ewheel_amin_fwd_slow 1
3 #define ewheel_amin_fwd_fast 2
4 #define ewheel_amin_bck_slow 3
5 #define ewheel_amin_bck_fast 4
12 for (i = 0; i < 1; ++i)
14 turret_do_updates(self);
16 _mis = turret_projectile("weapons/lasergun_fire.wav", 1, 0, DEATH_TURRET_EWHEEL, PROJECTILE_LASER, TRUE, TRUE);
17 _mis.missile_flags = MIF_SPLASH;
19 pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
21 self.tur_head.frame += 2;
23 if (self.tur_head.frame > 3)
24 self.tur_head.frame = 0;
28 //#define EWHEEL_FANCYPATH
29 void ewheel_move_path()
31 #ifdef EWHEEL_FANCYPATH
32 // Are we close enougth to a path node to switch to the next?
33 if (vlen(self.origin - self.pathcurrent.origin) < 64)
34 if (self.pathcurrent.path_next == world)
36 // Path endpoint reached
37 pathlib_deletepath(self.pathcurrent.owner);
38 self.pathcurrent = world;
42 if (self.pathgoal.use)
45 if (self.pathgoal.enemy)
47 self.pathcurrent = pathlib_astar(self.pathgoal.origin,self.pathgoal.enemy.origin);
48 self.pathgoal = self.pathgoal.enemy;
52 self.pathgoal = world;
55 self.pathcurrent = self.pathcurrent.path_next;
58 if (vlen(self.origin - self.pathcurrent.origin) < 64)
59 self.pathcurrent = self.pathcurrent.enemy;
65 self.moveto = self.pathcurrent.origin;
66 self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95);
68 movelib_move_simple(v_forward, autocvar_g_turrets_unit_ewheel_speed_fast, 0.4);
72 void ewheel_move_enemy()
77 self.steerto = steerlib_arrive(self.enemy.origin,self.target_range_optimal);
79 //self.steerto = steerlib_standoff(self.enemy.origin,self.target_range_optimal);
80 //self.steerto = steerlib_beamsteer(self.steerto,1024,64,68,256);
81 self.moveto = self.origin + self.steerto * 128;
83 if (self.tur_dist_enemy > self.target_range_optimal)
85 if ( self.tur_head.spawnshieldtime < 1 )
87 newframe = ewheel_amin_fwd_fast;
88 movelib_move_simple(v_forward, autocvar_g_turrets_unit_ewheel_speed_fast, 0.4);
90 else if (self.tur_head.spawnshieldtime < 2)
93 newframe = ewheel_amin_fwd_slow;
94 movelib_move_simple(v_forward, autocvar_g_turrets_unit_ewheel_speed_slow, 0.4);
98 newframe = ewheel_amin_fwd_slow;
99 movelib_move_simple(v_forward, autocvar_g_turrets_unit_ewheel_speed_slower, 0.4);
102 else if (self.tur_dist_enemy < self.target_range_optimal * 0.5)
104 newframe = ewheel_amin_bck_slow;
105 movelib_move_simple(v_forward * -1, autocvar_g_turrets_unit_ewheel_speed_slow, 0.4);
109 newframe = ewheel_amin_stop;
110 movelib_beak_simple(autocvar_g_turrets_unit_ewheel_speed_stop);
113 turrets_setframe(newframe , FALSE);
115 /*if(self.frame != newframe)
117 self.frame = newframe;
118 self.SendFlags |= TNSF_ANIM;
119 self.anim_start_time = time;
124 void ewheel_move_idle()
128 self.SendFlags |= TNSF_ANIM;
129 self.anim_start_time = time;
133 if (vlen(self.velocity))
134 movelib_beak_simple(autocvar_g_turrets_unit_ewheel_speed_stop);
137 void ewheel_postthink()
140 vector wish_angle, real_angle;
142 vz = self.velocity_z;
144 self.angles_x = anglemods(self.angles_x);
145 self.angles_y = anglemods(self.angles_y);
147 fixedmakevectors(self.angles);
149 wish_angle = normalize(self.steerto);
150 wish_angle = vectoangles(wish_angle);
151 real_angle = wish_angle - self.angles;
152 real_angle = shortangle_vxy(real_angle, self.tur_head.angles);
154 self.tur_head.spawnshieldtime = fabs(real_angle_y);
155 real_angle_y = bound(-self.tur_head.aim_speed, real_angle_y, self.tur_head.aim_speed);
156 self.angles_y = (self.angles_y + real_angle_y);
160 else if(self.pathcurrent)
166 self.velocity_z = vz;
168 if(vlen(self.velocity))
169 self.SendFlags |= TNSF_MOVE;
172 void ewheel_respawnhook()
176 // Respawn is called & first spawn to, to set team. need to make sure we do not move the initial spawn.
177 if(self.movetype != MOVETYPE_WALK)
180 self.velocity = '0 0 0';
183 setorigin(self, self.pos1);
185 if (self.target != "")
187 e = find(world,targetname,self.target);
190 dprint("Initital waypoint for ewheel does NOT exsist, fix your map!\n");
194 if (e.classname != "turret_checkpoint")
195 dprint("Warning: not a turrret path\n");
199 #ifdef EWHEEL_FANCYPATH
200 self.pathcurrent = WALKER_PATH(self.origin,e.origin);
203 self.pathcurrent = e;
209 void ewheel_diehook()
211 self.velocity = '0 0 0';
213 #ifdef EWHEEL_FANCYPATH
214 if (self.pathcurrent)
215 pathlib_deletepath(self.pathcurrent.owner);
217 self.pathcurrent = world;
220 void turret_ewheel_dinit()
224 if (self.netname == "")
225 self.netname = "eWheel Turret";
227 if (self.target != "")
229 e = find(world,targetname,self.target);
232 bprint("Warning! initital waypoint for ewheel does NOT exsist!\n");
236 if (e.classname != "turret_checkpoint")
237 dprint("Warning: not a turrret path\n");
239 self.goalcurrent = e;
242 self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
243 self.turrcaps_flags = TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MOVE | TFL_TURRCAPS_ROAM ;
244 self.turret_respawnhook = ewheel_respawnhook;
246 self.turret_diehook = ewheel_diehook;
248 if (turret_stdproc_init("ewheel_std", "models/turrets/ewheel-base2.md3", "models/turrets/ewheel-gun1.md3", TID_EWHEEL) == 0)
255 self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
256 self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
257 self.iscreature = TRUE;
258 self.damagedbycontents = TRUE;
259 self.movetype = MOVETYPE_WALK;
260 self.solid = SOLID_SLIDEBOX;
261 self.takedamage = DAMAGE_AIM;
262 self.idle_aim = '0 0 0';
263 self.pos1 = self.origin;
265 setsize(self, '-32 -32 0', '32 32 48');
268 self.turret_firefunc = ewheel_attack;
269 self.turret_postthink = ewheel_postthink;
270 self.tur_head.frame = 1;
272 // Convert from dgr / sec to dgr / tic
273 self.tur_head.aim_speed = autocvar_g_turrets_unit_ewheel_turnrate;
274 self.tur_head.aim_speed = self.tur_head.aim_speed / (1 / self.ticrate);
276 //setorigin(self,self.origin + '0 0 128');
277 if (self.target != "")
279 e = find(world,targetname,self.target);
282 dprint("Initital waypoint for ewheel does NOT exsist, fix your map!\n");
286 if (e.classname != "turret_checkpoint")
287 dprint("Warning: not a turrret path\n");
290 #ifdef EWHEEL_FANCYPATH
291 self.pathcurrent = WALKER_PATH(self.origin, e.origin);
294 self.pathcurrent = e;
300 void spawnfunc_turret_ewheel()
302 g_turrets_common_precash();
304 precache_model ("models/turrets/ewheel-base2.md3");
305 precache_model ("models/turrets/ewheel-gun1.md3");
307 self.think = turret_ewheel_dinit;
308 self.nextthink = time + 0.5;