/* mins */ ATTRIB(WalkerTurret, mins, vector, '-70 -70 0');
/* maxs */ ATTRIB(WalkerTurret, maxs, vector, '70 70 95');
/* modelname */ ATTRIB(WalkerTurret, mdl, string, "walker_body.md3");
-/* model */ ATTRIB(WalkerTurret, model, string, strzone(strcat("models/turrets/", this.mdl)));
-/* head_model */ ATTRIB(WalkerTurret, head_model, string, strzone(strcat("models/turrets/", "walker_head_minigun.md3")));
+/* model */ ATTRIB_STRZONE(WalkerTurret, model, string, strcat("models/turrets/", this.mdl));
+/* head_model */ ATTRIB_STRZONE(WalkerTurret, head_model, string, strcat("models/turrets/", "walker_head_minigun.md3"));
/* netname */ ATTRIB(WalkerTurret, netname, string, "walker");
/* fullname */ ATTRIB(WalkerTurret, turret_name, string, _("Walker Turret"));
ATTRIB(WalkerTurret, m_weapon, Weapon, WEP_WALKER);
{
if (turret_validate_target(self, e, self.target_validate_flags))
if (e != self && e.owner != self)
- Damage(e, self, self, (autocvar_g_turrets_unit_walker_melee_damage), DEATH_TURRET_WALK_MELEE, '0 0 0', v_forward * (autocvar_g_turrets_unit_walker_melee_force));
+ Damage(e, self, self, (autocvar_g_turrets_unit_walker_melee_damage), DEATH_TURRET_WALK_MELEE.m_id, '0 0 0', v_forward * (autocvar_g_turrets_unit_walker_melee_force));
e = e.chain;
}
}
void walker_rocket_explode()
{SELFPARAM();
- RadiusDamage (self, self.owner, (autocvar_g_turrets_unit_walker_rocket_damage), 0, (autocvar_g_turrets_unit_walker_rocket_radius), self, world, (autocvar_g_turrets_unit_walker_rocket_force), DEATH_TURRET_WALK_ROCKET, world);
+ RadiusDamage (self, self.owner, (autocvar_g_turrets_unit_walker_rocket_damage), 0, (autocvar_g_turrets_unit_walker_rocket_radius), self, world, (autocvar_g_turrets_unit_walker_rocket_force), DEATH_TURRET_WALK_ROCKET.m_id, world);
remove (self);
}
-void walker_rocket_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
-{SELFPARAM();
- self.health = self.health - damage;
- self.velocity = self.velocity + vforce;
+void walker_rocket_damage(entity this, entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
+{
+ this.health = this.health - damage;
+ this.velocity = this.velocity + vforce;
- if (self.health <= 0)
- W_PrepareExplosionByDamage(self.owner, walker_rocket_explode);
+ if (this.health <= 0)
+ WITH(entity, self, this, W_PrepareExplosionByDamage(this.owner, walker_rocket_explode));
}
-#define WALKER_ROCKET_MOVE movelib_move_simple(newdir, (autocvar_g_turrets_unit_walker_rocket_speed), (autocvar_g_turrets_unit_walker_rocket_turnrate)); UpdateCSQCProjectile(self)
+#define WALKER_ROCKET_MOVE movelib_move_simple(self, newdir, (autocvar_g_turrets_unit_walker_rocket_speed), (autocvar_g_turrets_unit_walker_rocket_turnrate)); UpdateCSQCProjectile(self)
void walker_rocket_loop();
void walker_rocket_think()
{SELFPARAM();
m_speed = vlen(self.velocity);
// Enemy dead? just keep on the current heading then.
- if (self.enemy == world || self.enemy.deadflag != DEAD_NO)
+ if (self.enemy == world || IS_DEAD(self.enemy))
self.enemy = world;
if (self.enemy)
return;
}
- if (vlen(self.origin - self.tur_shotorg) < 100 )
+ if(vdist(self.origin - self.tur_shotorg, <, 100))
{
self.think = walker_rocket_think;
return;
return;
}
- if (vlen(self.origin - self.tur_shotorg) < 100 )
+ if(vdist(self.origin - self.tur_shotorg, <, 100))
{
self.tur_shotorg = self.origin - '0 0 200';
self.think = walker_rocket_loop3;
te_explosion (org);
- rocket = spawn ();
+ rocket = new(walker_rocket);
setorigin(rocket, org);
sound (self, CH_WEAPON_A, SND_HAGAR_FIRE, VOL_BASE, ATTEN_NORM);
setsize (rocket, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
- rocket.classname = "walker_rocket";
rocket.owner = self;
rocket.bot_dodge = true;
rocket.bot_dodgerating = 50;
}
self.moveto = _target;
- self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95);
+ self.steerto = steerlib_attract2(self, self.moveto, 0.5, 500, 0.95);
if(self.enemy)
{
{SELFPARAM();
#ifdef WALKER_FANCYPATHING
// Are we close enougth to a path node to switch to the next?
- if (vlen(self.origin - self.pathcurrent.origin) < 64)
+ if(vdist(self.origin - self.pathcurrent.origin, <, 64))
if (self.pathcurrent.path_next == world)
{
// Path endpoint reached
self.pathcurrent = self.pathcurrent.path_next;
self.moveto = self.pathcurrent.origin;
- self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95);
+ self.steerto = steerlib_attract2(self, self.moveto,0.5,500,0.95);
walker_move_to(self.moveto, 0);
#else
- if (vlen(self.origin - self.pathcurrent.origin) < 64)
+ if(vdist(self.origin - self.pathcurrent.origin, <, 64))
self.pathcurrent = self.pathcurrent.enemy;
if(!self.pathcurrent)
return;
self.moveto = self.pathcurrent.origin;
- self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95);
+ self.steerto = steerlib_attract2(self, self.moveto, 0.5, 500, 0.95);
walker_move_to(self.moveto, 0);
#endif
}
spawnfunc(turret_walker) { if(!turret_initialize(TUR_WALKER)) remove(self); }
- METHOD(WalkerTurret, tr_think, void(WalkerTurret thistur))
+ METHOD(WalkerTurret, tr_think, void(WalkerTurret thistur, entity it))
{
fixedmakevectors(self.angles);
{
if(self.enemy_last_time != 0)
{
- if(vlen(self.origin - self.enemy_last_loc) < 128 || time - self.enemy_last_time > 10)
+ if(vdist(self.origin - self.enemy_last_loc, <, 128) || time - self.enemy_last_time > 10)
self.enemy_last_time = 0;
else
walker_move_to(self.enemy_last_loc, 0);
if (fabs(wish_angle_y) < 15)
{
self.moveto = self.enemy.origin;
- self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95);
+ self.steerto = steerlib_attract2(self, self.moveto, 0.5, 500, 0.95);
self.animflag = ANIM_MELEE;
}
}
- else if (self.tur_head.attack_finished_single < time)
+ else if (self.tur_head.attack_finished_single[0] < time)
{
if(self.tur_head.shot_volly)
{
self.tur_head.shot_volly = self.tur_head.shot_volly -1;
if(self.tur_head.shot_volly == 0)
- self.tur_head.attack_finished_single = time + (autocvar_g_turrets_unit_walker_rocket_refire);
+ self.tur_head.attack_finished_single[0] = time + (autocvar_g_turrets_unit_walker_rocket_refire);
else
- self.tur_head.attack_finished_single = time + 0.2;
+ self.tur_head.attack_finished_single[0] = time + 0.2;
if(self.tur_head.shot_volly > 1)
walker_fire_rocket(gettaginfo(self, gettagindex(self, "tag_rocket01")));
switch (self.animflag)
{
case ANIM_NO:
- movelib_beak_simple((autocvar_g_turrets_unit_walker_speed_stop));
+ movelib_brake_simple(self, (autocvar_g_turrets_unit_walker_speed_stop));
break;
case ANIM_TURN:
turny = (autocvar_g_turrets_unit_walker_turn);
- movelib_beak_simple((autocvar_g_turrets_unit_walker_speed_stop));
+ movelib_brake_simple(self, (autocvar_g_turrets_unit_walker_speed_stop));
break;
case ANIM_WALK:
turny = (autocvar_g_turrets_unit_walker_turn_walk);
- movelib_move_simple(v_forward, (autocvar_g_turrets_unit_walker_speed_walk), 0.6);
+ movelib_move_simple(self, v_forward, (autocvar_g_turrets_unit_walker_speed_walk), 0.6);
break;
case ANIM_RUN:
turny = (autocvar_g_turrets_unit_walker_turn_run);
- movelib_move_simple(v_forward, (autocvar_g_turrets_unit_walker_speed_run), 0.6);
+ movelib_move_simple(self, v_forward, (autocvar_g_turrets_unit_walker_speed_run), 0.6);
break;
case ANIM_STRAFE_L:
turny = (autocvar_g_turrets_unit_walker_turn_strafe);
- movelib_move_simple(v_right * -1, (autocvar_g_turrets_unit_walker_speed_walk), 0.8);
+ movelib_move_simple(self, v_right * -1, (autocvar_g_turrets_unit_walker_speed_walk), 0.8);
break;
case ANIM_STRAFE_R:
turny = (autocvar_g_turrets_unit_walker_turn_strafe);
- movelib_move_simple(v_right, (autocvar_g_turrets_unit_walker_speed_walk), 0.8);
+ movelib_move_simple(self, v_right, (autocvar_g_turrets_unit_walker_speed_walk), 0.8);
break;
case ANIM_JUMP:
case ANIM_PAIN:
if(self.frame != ANIM_PAIN)
- defer(0.25, walker_setnoanim);
+ defer(self, 0.25, walker_setnoanim);
break;
case ANIM_MELEE:
if(self.frame != ANIM_MELEE)
{
- defer(0.41, walker_setnoanim);
- defer(0.21, walker_melee_do_dmg);
+ defer(self, 0.41, walker_setnoanim);
+ defer(self, 0.21, walker_melee_do_dmg);
}
- movelib_beak_simple((autocvar_g_turrets_unit_walker_speed_stop));
+ movelib_brake_simple(self, (autocvar_g_turrets_unit_walker_speed_stop));
break;
case ANIM_SWIM:
turnx = (autocvar_g_turrets_unit_walker_turn_swim);
self.angles_x += bound(-10, shortangle_f(real_angle_x, self.angles_x), 10);
- movelib_move_simple(v_forward, (autocvar_g_turrets_unit_walker_speed_swim), 0.3);
+ movelib_move_simple(self, v_forward, (autocvar_g_turrets_unit_walker_speed_swim), 0.3);
vz = self.velocity_z + sin(time * 4) * 8;
break;
case ANIM_ROAM:
turny = (autocvar_g_turrets_unit_walker_turn_walk);
- movelib_move_simple(v_forward ,(autocvar_g_turrets_unit_walker_speed_roam), 0.5);
+ movelib_move_simple(self, v_forward ,(autocvar_g_turrets_unit_walker_speed_roam), 0.5);
break;
}
#endif // SVQC
#ifdef CSQC
-#include "../../../client/movelib.qh"
+#include <common/physics/movelib.qh>
-void walker_draw()
-{SELFPARAM();
+void walker_draw(entity this)
+{
float dt;
- dt = time - self.move_time;
- self.move_time = time;
+ dt = time - this.move_time;
+ this.move_time = time;
if(dt <= 0)
return;
- fixedmakevectors(self.angles);
+ fixedmakevectors(this.angles);
movelib_groundalign4point(300, 100, 0.25, 45);
- setorigin(self, self.origin + self.velocity * dt);
- self.tur_head.angles += dt * self.tur_head.move_avelocity;
- self.angles_y = self.move_angles_y;
+ setorigin(this, this.origin + this.velocity * dt);
+ this.tur_head.angles += dt * this.tur_head.move_avelocity;
+ this.angles_y = this.move_angles_y;
- if (self.health < 127)
+ if (this.health < 127)
if(random() < 0.15)
- te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);
+ te_spark(this.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);
}
METHOD(WalkerTurret, tr_setup, void(WalkerTurret this, entity it))