From 7426a3cf2e1eedb3c059437ffdf3689d717650dc Mon Sep 17 00:00:00 2001 From: Jakob MG Date: Fri, 1 Apr 2011 18:49:00 +0200 Subject: [PATCH] Make a common vehicles_spawn to handle bulk stuff / reduce code duplication. Make raptor steer/aim by angular velocity (smoother, compatibel with ode). Make raptor & spiderbut use a combination of v_angle and crosshait_trace for accurate aim regardless of chase or not --- qcsrc/server/vehicles/racer.qc | 2 ++ qcsrc/server/vehicles/raptor.qc | 21 +++--------- qcsrc/server/vehicles/spiderbot.qc | 55 ++++++++++++++---------------- qcsrc/server/vehicles/vehicles.qc | 45 +++++++++++++----------- qcsrc/server/vehicles/vehicles.qh | 2 +- 5 files changed, 59 insertions(+), 66 deletions(-) diff --git a/qcsrc/server/vehicles/racer.qc b/qcsrc/server/vehicles/racer.qc index 81fbea5f4..d0a416586 100644 --- a/qcsrc/server/vehicles/racer.qc +++ b/qcsrc/server/vehicles/racer.qc @@ -568,10 +568,12 @@ void racer_spawn() self.nextthink = time; self.vehicle_health = autocvar_g_vehicle_racer_health; self.vehicle_shield = autocvar_g_vehicle_racer_shield; + self.movetype = MOVETYPE_TOSS; self.solid = SOLID_SLIDEBOX; self.delay = time; self.scale = 0.5; + setsize(self, RACER_MIN * 0.5, RACER_MAX * 0.5); } diff --git a/qcsrc/server/vehicles/raptor.qc b/qcsrc/server/vehicles/raptor.qc index cf5028bc4..a0fc30a99 100644 --- a/qcsrc/server/vehicles/raptor.qc +++ b/qcsrc/server/vehicles/raptor.qc @@ -613,8 +613,8 @@ void raptor_die() self.colormod = '-0.5 -0.5 -0.5'; self.touch = raptor_blowup; - self.think = raptor_spawn; - self.nextthink = time + autocvar_g_vehicle_raptor_respawntime; + //self.think = raptor_spawn; + //self.nextthink = time + autocvar_g_vehicle_raptor_respawntime; } void raptor_spawn() @@ -622,31 +622,18 @@ void raptor_spawn() self.flags = FL_NOTARGET; self.effects = 0; + self.frame = 0; self.vehicle_health = autocvar_g_vehicle_raptor_health; self.vehicle_shield = autocvar_g_vehicle_raptor_shield; - self.event_damage = vehicles_damage; - self.touch = vehicles_touch; - self.iscreature = TRUE; - self.movetype = MOVETYPE_FLY; + self.movetype = MOVETYPE_TOSS; self.solid = SOLID_BBOX; - self.takedamage = DAMAGE_AIM; - self.deadflag = DEAD_NO; - self.bot_attack = TRUE; self.vehicle_energy = 1; - self.vehicle_hudmodel.viewmodelforclient = self; self.bomb1.gun1.avelocity_y = 90; self.bomb1.gun2.avelocity_y = -90; - self.frame = 0; - - setorigin(self, self.pos1); - self.angles = self.pos2; setsize(self, RAPTOR_MIN, RAPTOR_MAX ); - pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1); self.delay = time; - - vehicles_reset_colors(); } void raptor_dinit() diff --git a/qcsrc/server/vehicles/spiderbot.qc b/qcsrc/server/vehicles/spiderbot.qc index c1b78790d..090b53149 100644 --- a/qcsrc/server/vehicles/spiderbot.qc +++ b/qcsrc/server/vehicles/spiderbot.qc @@ -3,8 +3,18 @@ const vector SPIDERBOT_MAX = '75 75 110'; float autocvar_g_vehicle_spiderbot_respawntime; -float autocvar_g_vehicle_spiderbot_crush_dmg; -float autocvar_g_vehicle_spiderbot_crush_force; +//float autocvar_g_vehicle_spiderbot_crush_dmg; +//float autocvar_g_vehicle_spiderbot_crush_force; + +float autocvar_g_vehicle_spiderbot_speed_stop; +float autocvar_g_vehicle_spiderbot_speed_strafe; +float autocvar_g_vehicle_spiderbot_speed_walk; +float autocvar_g_vehicle_spiderbot_turnspeed; +float autocvar_g_vehicle_spiderbot_movement_inertia; + +float autocvar_g_vehicle_spiderbot_springlength; +float autocvar_g_vehicle_spiderbot_springup; +float autocvar_g_vehicle_spiderbot_springblend; float autocvar_g_vehicle_spiderbot_head_pitchlimit_down; float autocvar_g_vehicle_spiderbot_head_pitchlimit_up; @@ -24,12 +34,11 @@ float autocvar_g_vehicle_spiderbot_shield; float autocvar_g_vehicle_spiderbot_shield_regen; float autocvar_g_vehicle_spiderbot_shield_regen_pause; -float autocvar_g_vehicle_spiderbot_minigun_cooldown; float autocvar_g_vehicle_spiderbot_minigun_damage; -float autocvar_g_vehicle_spiderbot_minigun_heat; float autocvar_g_vehicle_spiderbot_minigun_refire; float autocvar_g_vehicle_spiderbot_minigun_spread; -float autocvar_g_vehicle_spiderbot_movement_inertia; +float autocvar_g_vehicle_spiderbot_minigun_cooldown; +float autocvar_g_vehicle_spiderbot_minigun_heat; float autocvar_g_vehicle_spiderbot_rocket_damage; float autocvar_g_vehicle_spiderbot_rocket_edgedamage; @@ -43,16 +52,6 @@ float autocvar_g_vehicle_spiderbot_rocket_reload; float autocvar_g_vehicle_spiderbot_rocket_speed; float autocvar_g_vehicle_spiderbot_rocket_turnrate; -float autocvar_g_vehicle_spiderbot_shield; -float autocvar_g_vehicle_spiderbot_speed_stop; -float autocvar_g_vehicle_spiderbot_speed_strafe; -float autocvar_g_vehicle_spiderbot_speed_walk; -float autocvar_g_vehicle_spiderbot_turnspeed; - - -float autocvar_g_vehicle_spiderbot_springlength; -float autocvar_g_vehicle_spiderbot_springup; -float autocvar_g_vehicle_spiderbot_springblend; void spiderbot_exit(float eject); void spiderbot_enter(); @@ -378,11 +377,19 @@ float spiderbot_frame() ad_y = bound(-ftmp, ad_y, ftmp); spider.tur_head.angles_y = bound(autocvar_g_vehicle_spiderbot_head_turnlimit * -1, spider.tur_head.angles_y + ad_y, autocvar_g_vehicle_spiderbot_head_turnlimit); + // Pitch head + ad = vectoangles(normalize(trace_endpos - gettaginfo(spider.tur_head,gettagindex(spider.tur_head,"tag_hud")))) - (spider.tur_head.angles + spider.angles); + if(ad_x > 180) ad_x -= 360; + if(ad_x < -180) ad_x += 360; + + ftmp = autocvar_g_vehicle_spiderbot_head_pitchspeed * sys_frametime; ad_x = bound(ftmp * -1, ad_x, ftmp); spider.tur_head.angles_x = bound(autocvar_g_vehicle_spiderbot_head_pitchlimit_down, spider.tur_head.angles_x + ad_x, autocvar_g_vehicle_spiderbot_head_pitchlimit_up); + + // Turn Body ftmp = autocvar_g_vehicle_spiderbot_turnspeed * sys_frametime; ftmp = bound(-ftmp, spider.tur_head.angles_y, ftmp); @@ -608,29 +615,18 @@ float spiderbot_crushable(entity e) void spiderbot_spawn() { self.frame = 5; + self.tur_head.frame = 1; self.think = spiderbot_think; self.nextthink = time; - self.owner = world; self.vehicle_health = autocvar_g_vehicle_spiderbot_health; self.vehicle_shield = autocvar_g_vehicle_spiderbot_shield; - self.event_damage = vehicles_damage; - self.iscreature = TRUE; self.movetype = MOVETYPE_WALK; self.solid = SOLID_SLIDEBOX; - self.takedamage = DAMAGE_AIM; - self.touch = vehicles_touch; self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = 1; self.tur_head.angles = '0 0 0'; - self.deadflag = DEAD_NO; - self.bot_attack = TRUE; - self.flags |= FL_NOTARGET; - self.tur_head.frame = 1; - self.vehicle_hudmodel.viewmodelforclient = self; setorigin(self, self.pos1 + '0 0 128'); self.angles = self.pos2; - - vehicles_reset_colors(); } void spiderbot_headfade() @@ -708,14 +704,15 @@ void spiderbot_blowup() RadiusDamage (self, self, 250, 15, 250, world, 250, DEATH_SBBLOWUP, world); self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = -1; - self.nextthink = time + autocvar_g_vehicle_spiderbot_respawntime; - self.think = spiderbot_spawn; self.movetype = MOVETYPE_NONE; self.deadflag = DEAD_DEAD; self.solid = SOLID_NOT; self.tur_head.effects &~= EF_FLAME; self.vehicle_hudmodel.viewmodelforclient = self; + //self.nextthink = time + autocvar_g_vehicle_spiderbot_respawntime; + //self.think = spiderbot_spawn; + //setorigin(self, self.tur_aimpos); } diff --git a/qcsrc/server/vehicles/vehicles.qc b/qcsrc/server/vehicles/vehicles.qc index d27c21043..14957cf93 100644 --- a/qcsrc/server/vehicles/vehicles.qc +++ b/qcsrc/server/vehicles/vehicles.qc @@ -7,7 +7,7 @@ void vehicles_enter(); void vehicles_touch(); void vehicles_reset_colors(); void vehicles_clearrturn(); -void vehicles_setreturn(float retime, void() respawn_proc); +void vehicles_setreturn(); #define MAX_AXH 4 @@ -180,14 +180,15 @@ vector vehicles_force_fromtag_maglev(string tag_name, float spring_length, float void vehicles_spawn() { dprint("Spawning vehicle: ", self.netname, "\n"); + self.vehicle_hudmodel.viewmodelforclient = self; self.owner = world; + self.touch = vehicles_touch; self.event_damage = vehicles_damage; self.iscreature = TRUE; self.movetype = MOVETYPE_WALK; self.solid = SOLID_SLIDEBOX; self.takedamage = DAMAGE_AIM; - self.touch = vehicles_touch; self.deadflag = DEAD_NO; self.bot_attack = TRUE; self.flags = FL_NOTARGET; @@ -268,6 +269,12 @@ void vehicles_enter() if(self.team != other.team) return; + self.vehicle_ammo1 = 0; + self.vehicle_ammo2 = 0; + self.vehicle_reload1 = 0; + self.vehicle_reload2 = 0; + self.vehicle_energy = 0; + self.owner = other; self.switchweapon = other.switchweapon; @@ -358,7 +365,7 @@ void vehicles_exit(float eject) self.vehicle_hudmodel.viewmodelforclient = self; self.tur_head.nodrawtoclient = self; - vehicles_setreturn(self.vehicle_respawntime, self.vehicle_spawn); + vehicles_setreturn(); self.phase = time + 1; @@ -366,7 +373,6 @@ void vehicles_exit(float eject) self.team = 0; self.vehicle_exit(eject); - self.owner = world; } @@ -445,14 +451,17 @@ void vehicles_damage(entity inflictor, entity attacker, float damage, float deat vehicles_exit(VHEF_RELESE); self.vehicle_die(); + vehicles_setreturn(); } } void vehicles_return() { pointparticles(particleeffectnum("teleport"), self.enemy.origin + '0 0 64', '0 0 0', 1); - self.enemy.think = self.use; // This is the vehicles respwn procedure + + self.enemy.think = vehicles_spawn; self.enemy.nextthink = time; + remove(self); } @@ -465,29 +474,27 @@ void vehicles_clearrturn() { if(ret.enemy == self) { - ret.think = SUB_Remove; - ret.nextthink = time + 0.1; + ret.classname = ""; + ret.think = SUB_Remove; + ret.nextthink = time + 0.1; return; } + ret = ret.chain; } } -void vehicles_setreturn(float retime, void() respawn_proc) +void vehicles_setreturn() { + entity ret; + vehicles_clearrturn(); - if (self.deadflag == DEAD_NO) - { - entity ret; - - ret = spawn(); - ret.classname = "vehicle_return"; - ret.enemy = self; - ret.think = vehicles_return; - ret.nextthink = time + retime; - ret.use = respawn_proc; - } + ret = spawn(); + ret.classname = "vehicle_return"; + ret.enemy = self; + ret.think = vehicles_return; + ret.nextthink = time + self.vehicle_respawntime; } float vehicles_customizeentityforclient() diff --git a/qcsrc/server/vehicles/vehicles.qh b/qcsrc/server/vehicles/vehicles.qh index c9a5575da..6d64a3d29 100644 --- a/qcsrc/server/vehicles/vehicles.qh +++ b/qcsrc/server/vehicles/vehicles.qh @@ -1,5 +1,5 @@ #ifdef VEHICLES_ENABLED -#include "collision.qc" +//#include "collision.qc" #include "vehicles.qc" #include "racer.qc" #include "spiderbot.qc" -- 2.39.2