]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Remove if not & fix waypoint sprite
authorMario <mario.mario@y7mail.com>
Mon, 18 Nov 2013 18:43:14 +0000 (05:43 +1100)
committerMario <mario.mario@y7mail.com>
Mon, 18 Nov 2013 18:43:14 +0000 (05:43 +1100)
12 files changed:
qcsrc/client/waypointsprites.qc
qcsrc/common/vehicles/cl_vehicles.qc
qcsrc/common/vehicles/sv_vehicles.qc
qcsrc/common/vehicles/unit/bumblebee.qc
qcsrc/common/vehicles/unit/racer.qc
qcsrc/common/vehicles/unit/raptor.qc
qcsrc/common/vehicles/unit/spiderbot.qc
qcsrc/server/cl_client.qc
qcsrc/server/vehicles/racer.qc [deleted file]
qcsrc/server/vehicles/raptor.qc [deleted file]
qcsrc/server/vehicles/spiderbot.qc [deleted file]
qcsrc/server/vehicles/vehicles.qc [deleted file]

index a3e856d1438197df091be171493946c75273a1c5..f8c82377c7a7de03446fb4d6b3166702162dc7e6 100644 (file)
@@ -319,6 +319,7 @@ string spritelookuptext(string s)
                case "freezetag_frozen": return _("Frozen!");
                case "tagged-target": return _("Tagged");
                case "vehicle": return _("Vehicle");
+               case "intruder": return _("Intruder!");
                default: return s;
        }
 }
index e0d1a619f0a3f6931c5fc28f2b0d060ed4dc6842..30b115095b05300ccaf0347003bc52e61418b9fd 100644 (file)
@@ -39,7 +39,7 @@ float weapon2mode;
 
 void vehicle_alarm(entity e, float ch, string s0und)
 {
-       if not(autocvar_cl_vehicles_alarm)
+       if(!autocvar_cl_vehicles_alarm)
                return;
 
        sound(e, ch, s0und, VOL_BASEVOICE, ATTEN_NONE);
@@ -51,7 +51,7 @@ void AuxiliaryXhair_Draw2D()
 
        psize = self.axh_scale * draw_getimagesize(self.axh_image);
        loc = project_3d_to_2d(self.move_origin) - 0.5 * psize;
-       if not (loc_z < 0 || loc_x < 0 || loc_y < 0 || loc_x > vid_conwidth || loc_y > vid_conheight)
+       if(!(loc_z < 0 || loc_x < 0 || loc_y < 0 || loc_x > vid_conwidth || loc_y > vid_conheight))
        {
                loc_z = 0;
                psize_z = 0;
index b3a324695bdbea79df3820dc6b66ddbee262ea82..15dc05e2ebd31177198defec03a2ae7fcf72bf05 100644 (file)
@@ -23,7 +23,7 @@ float SendAuxiliaryXhair(entity to, float sf)
 
 void UpdateAuxiliaryXhair(entity own, vector loc, vector clr, float axh_id)
 {
-       if not(IS_REAL_CLIENT(own))
+       if(!IS_REAL_CLIENT(own))
                return;
 
        entity axh;
@@ -48,7 +48,7 @@ void UpdateAuxiliaryXhair(entity own, vector loc, vector clr, float axh_id)
 
 void CSQCVehicleSetup(entity own, float vehicle_id)
 {
-       if not(IS_REAL_CLIENT(own))
+       if(!IS_REAL_CLIENT(own))
                return;
 
        msg_entity = own;
@@ -105,9 +105,9 @@ void vehicles_locktarget(float incr, float decr, float _lock_time)
                if(trace_ent.deadflag != DEAD_NO)
                        trace_ent = world;
 
-               if not (trace_ent.vehicle_flags & VHF_ISVEHICLE ||
+               if(!(trace_ent.vehicle_flags & VHF_ISVEHICLE ||
                                trace_ent.turrcaps_flags & TFL_TURRCAPS_ISTURRET ||
-                               trace_ent.takedamage == DAMAGE_TARGETDRONE)
+                               trace_ent.takedamage == DAMAGE_TARGETDRONE))
                        trace_ent = world;
        }
 
@@ -325,7 +325,7 @@ float vehicle_addplayerslot(        entity _owner,
                                                                float() _framefunc,
                                                                void(float) _exitfunc)
 {
-       if not (_owner.vehicle_flags & VHF_MULTISLOT)
+       if(!(_owner.vehicle_flags & VHF_MULTISLOT))
                _owner.vehicle_flags |= VHF_MULTISLOT;
 
        _slot.PlayerPhysplug = _framefunc;
@@ -834,7 +834,7 @@ void vehicles_exit(float eject)
 
        _vehicle.tur_head.nodrawtoclient = world;
 
-       if not(teamplay)
+       if(!teamplay)
                _vehicle.team = 0;
 
        Kill_Notification(NOTIF_ONE, _player, MSG_CENTER_CPID, CPID_VEHICLES);
@@ -902,7 +902,7 @@ void vehicles_enter(entity pl, entity veh)
        else
                return;
 
-       if not(IS_PLAYER(pl))
+       if(!IS_PLAYER(pl))
                return;
 
        if(veh.phase > time)
@@ -1077,7 +1077,7 @@ void vehicles_spawn()
 
 float vehicle_initialize(float vehicle_id, float nodrop)
 {
-       if not(autocvar_g_vehicles)
+       if(!autocvar_g_vehicles)
                return FALSE;
 
        entity veh = get_vehicleinfo(vehicle_id);
@@ -1085,7 +1085,7 @@ float vehicle_initialize(float vehicle_id, float nodrop)
        if(self.targetname)
        {
                self.vehicle_controller = find(world, target, self.targetname);
-               if not(self.vehicle_controller)
+               if(!self.vehicle_controller)
                {
                        bprint("^1WARNING: ^7Vehicle with invalid .targetname\n");
                }
@@ -1157,7 +1157,7 @@ float vehicle_initialize(float vehicle_id, float nodrop)
 
        setsize(self, veh.mins, veh.maxs);
 
-       if not(nodrop)
+       if(!nodrop)
        {
                setorigin(self, self.origin);
                tracebox(self.origin + '0 0 100', veh.mins, veh.maxs, self.origin - '0 0 10000', MOVE_WORLDONLY, self);
index 747f3fa42ec04ad7f52cb62a2f6e0954191bd54f..8794ba2b60aae0b524f1b8fda3b4bbace3ad9e2d 100644 (file)
@@ -717,8 +717,8 @@ float bumble_raygun_send(entity to, float sf)
 
 void spawnfunc_vehicle_bumblebee()
 {
-       if not(autocvar_g_vehicle_bumblebee) { remove(self); return; }
-       if not(vehicle_initialize(VEH_BUMBLEBEE, FALSE)) { remove(self); return; }
+       if(!autocvar_g_vehicle_bumblebee) { remove(self); return; }
+       if(!vehicle_initialize(VEH_BUMBLEBEE, FALSE)) { remove(self); return; }
 }
 
 float v_bumblebee(float req)
@@ -842,7 +842,7 @@ float v_bumblebee(float req)
                }
                case VR_SPAWN:
                {
-                       if not(self.gun1)
+                       if(!self.gun1)
                        {
                                // for some reason, autosizing of the shield entity refuses to work for this one so set it up in advance.
                                self.vehicle_shieldent = spawn();
index 66d2d80481ea6bfecab6bb70bbbe863d83561a17..042e77e15e64519a1e98ffaae4bc4b56e1c8f2aa 100644 (file)
@@ -162,7 +162,7 @@ void racer_rocket_groundhugger()
                return;
        }
 
-       if not (self.realowner.vehicle)
+       if(!self.realowner.vehicle)
        {
                UpdateCSQCProjectile(self);
                return;
@@ -210,7 +210,7 @@ void racer_rocket_tracker()
                return;
        }
 
-       if not (self.realowner.vehicle)
+       if(!self.realowner.vehicle)
        {
                UpdateCSQCProjectile(self);
                return;
@@ -492,7 +492,7 @@ void racer_exit(float eject)
        self.movetype   = MOVETYPE_BOUNCE;
        sound (self.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
 
-       if not (self.owner)
+       if(!self.owner)
                return;
 
        makevectors(self.angles);
@@ -560,8 +560,8 @@ void racer_deadtouch()
 
 void spawnfunc_vehicle_racer()
 {
-       if not(autocvar_g_vehicle_racer) { remove(self); return; }
-       if not(vehicle_initialize(VEH_RACER, TRUE)) { remove(self); return; }
+       if(!autocvar_g_vehicle_racer) { remove(self); return; }
+       if(!vehicle_initialize(VEH_RACER, TRUE)) { remove(self); return; }
 }
 
 float v_racer(float req)
index c9eefa6e00847eb222fabfd837a9c6752bc03212..b82bb56cfaa74af6174f291d60c7c62c577e1d9b 100644 (file)
@@ -232,7 +232,7 @@ void raptor_exit(float eject)
                self.nextthink  = time;
        }
 
-       if not (self.owner)
+       if(!self.owner)
                return;
 
        makevectors(self.angles);
@@ -744,8 +744,8 @@ float raptor_impulse(float _imp)
 
 void spawnfunc_vehicle_raptor()
 {
-       if not(autocvar_g_vehicle_raptor) { remove(self); return; }
-       if not(vehicle_initialize(VEH_RAPTOR, FALSE)) { remove(self); return; }
+       if(!autocvar_g_vehicle_raptor) { remove(self); return; }
+       if(!vehicle_initialize(VEH_RAPTOR, FALSE)) { remove(self); return; }
 }
 
 float v_raptor(float req)
@@ -808,7 +808,7 @@ float v_raptor(float req)
                }
                case VR_SPAWN:
                {
-                       if not(self.gun1)
+                       if(!self.gun1)
                        {
                                entity spinner;
                                vector ofs;
@@ -1101,7 +1101,7 @@ float v_raptor(float req)
                                        setorigin(dropmark, trace_endpos);
                                        picsize = draw_getimagesize(raptor_drop) * 0.2;
 
-                                       if not (where_z < 0 || where_x < 0 || where_y < 0 || where_x > vid_conwidth || where_y > vid_conheight)
+                                       if(!(where_z < 0 || where_x < 0 || where_y < 0 || where_x > vid_conwidth || where_y > vid_conheight))
                                        {
                                                where_x -= picsize_x * 0.5;
                                                where_y -= picsize_y * 0.5;
@@ -1118,7 +1118,7 @@ float v_raptor(float req)
                                                where = project_3d_to_2d(dropmark.origin);
                                                picsize = draw_getimagesize(raptor_drop) * 0.25;
 
-                                               if not (where_z < 0 || where_x < 0 || where_y < 0 || where_x > vid_conwidth || where_y > vid_conheight)
+                                               if(!(where_z < 0 || where_x < 0 || where_y < 0 || where_x > vid_conwidth || where_y > vid_conheight))
                                                {
                                                        where_x -= picsize_x * 0.5;
                                                        where_y -= picsize_y * 0.5;
index 5e01cd53e1f39c12bede30c21df501e55695dd01..da3517651806a4a4831f7a2b509a78d43634a833 100644 (file)
@@ -103,7 +103,7 @@ void spiderbot_rocket_guided()
 
        self.nextthink  = time;
 
-       if not (self.realowner.vehicle)
+       if(!self.realowner.vehicle)
                self.think = spiderbot_rocket_unguided;
 
        crosshair_trace(self.realowner);
@@ -121,7 +121,7 @@ void spiderbot_guide_release()
 {
        entity rkt;
        rkt = findchainentity(realowner, self.owner);
-       if not (rkt)
+       if(!rkt)
                return;
 
        crosshair_trace(self.owner);
@@ -247,10 +247,9 @@ void spiderbot_rocket_do()
                self.wait = 0;
        }
 
-       if (self.wait != -10)
-               if not (self.owner.BUTTON_ATCK2)
-                       return;
-
+       if(self.wait != -10)
+       if(!self.owner.BUTTON_ATCK2)
+               return;
 
        v = gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire"));
 
@@ -576,7 +575,7 @@ void spiderbot_exit(float eject)
        self.frame = 5;
        self.movetype = MOVETYPE_WALK;
 
-       if not(self.owner)
+       if(!self.owner)
                return;
 
        makevectors(self.angles);
@@ -739,8 +738,8 @@ float spiderbot_impulse(float _imp)
 
 void spawnfunc_vehicle_spiderbot()
 {
-       if not(autocvar_g_vehicle_spiderbot) { remove(self); return; }
-       if not(vehicle_initialize(VEH_SPIDERBOT, FALSE)) { remove(self); return; }
+       if(!autocvar_g_vehicle_spiderbot) { remove(self); return; }
+       if(!vehicle_initialize(VEH_SPIDERBOT, FALSE)) { remove(self); return; }
 }
 
 float v_spiderbot(float req)
@@ -797,7 +796,7 @@ float v_spiderbot(float req)
                }
                case VR_SPAWN:
                {
-                       if not(self.gun1)
+                       if(!self.gun1)
                        {
                                self.vehicles_impulse = spiderbot_impulse;
                                self.gun1 = spawn();
index 0a95f7a365c908159daa85a7abc41b2e04f36b4e..34f09173bf6d6e53a67806e47da3cc860c8c6aba 100644 (file)
@@ -2150,7 +2150,7 @@ void PlayerUseKey()
        }
        else if(autocvar_g_vehicles_enter)
        {
-               if not(self.freezetag_frozen)
+               if(!self.freezetag_frozen)
                if(self.deadflag == DEAD_NO)
                {
                        entity head, closest_target = world;
@@ -2160,7 +2160,7 @@ void PlayerUseKey()
                        {
                                if(head.vehicle_flags & VHF_ISVEHICLE)
                                if(head.deadflag == DEAD_NO)
-                               if not(head.owner)
+                               if(!head.owner)
                                {
                                        if(closest_target)
                                        {
@@ -2274,15 +2274,15 @@ void PlayerPreThink (void)
        if(autocvar_g_vehicles_enter)
        if(time > self.last_vehiclecheck)
        if(IS_PLAYER(self))
-       if not(self.freezetag_frozen)
-       if not(self.vehicle)
+       if(!self.freezetag_frozen)
+       if(!self.vehicle)
        if(self.deadflag == DEAD_NO)
        {
                entity veh;
                for(veh = world; (veh = findflags(veh, vehicle_flags, VHF_ISVEHICLE)); )
                if(vlen(veh.origin - self.origin) < autocvar_g_vehicles_enter_radius)
                if(veh.deadflag == DEAD_NO)
-               if not(veh.owner)
+               if(!veh.owner)
                if(!veh.team || SAME_TEAM(self, veh))
                        Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_VEHICLE_ENTER);
                else if(autocvar_g_vehicles_steal)
diff --git a/qcsrc/server/vehicles/racer.qc b/qcsrc/server/vehicles/racer.qc
deleted file mode 100644 (file)
index ff54539..0000000
+++ /dev/null
@@ -1,690 +0,0 @@
-#define RACER_MIN '-120 -120 -40'
-#define RACER_MAX '120 120 40'
-
-#ifdef SVQC
-void racer_exit(float eject);
-void racer_enter();
-
-// Auto cvars
-float autocvar_g_vehicle_racer;
-
-float autocvar_g_vehicle_racer_speed_afterburn;
-float autocvar_g_vehicle_racer_afterburn_cost;
-
-float autocvar_g_vehicle_racer_anglestabilizer;
-float autocvar_g_vehicle_racer_downforce;
-
-float autocvar_g_vehicle_racer_speed_forward;
-float autocvar_g_vehicle_racer_speed_strafe;
-float autocvar_g_vehicle_racer_springlength;
-float autocvar_g_vehicle_racer_upforcedamper;
-float autocvar_g_vehicle_racer_friction;
-
-float autocvar_g_vehicle_racer_hovertype;
-float autocvar_g_vehicle_racer_hoverpower;
-
-float autocvar_g_vehicle_racer_turnroll;
-float autocvar_g_vehicle_racer_turnspeed;
-float autocvar_g_vehicle_racer_pitchspeed;
-
-float autocvar_g_vehicle_racer_energy;
-float autocvar_g_vehicle_racer_energy_regen;
-float autocvar_g_vehicle_racer_energy_regen_pause;
-
-float autocvar_g_vehicle_racer_health;
-float autocvar_g_vehicle_racer_health_regen;
-float autocvar_g_vehicle_racer_health_regen_pause;
-
-float autocvar_g_vehicle_racer_shield;
-float autocvar_g_vehicle_racer_shield_regen;
-float autocvar_g_vehicle_racer_shield_regen_pause;
-
-float autocvar_g_vehicle_racer_cannon_cost;
-float autocvar_g_vehicle_racer_cannon_damage;
-float autocvar_g_vehicle_racer_cannon_radius;
-float autocvar_g_vehicle_racer_cannon_refire;
-float autocvar_g_vehicle_racer_cannon_speed;
-float autocvar_g_vehicle_racer_cannon_spread;
-float autocvar_g_vehicle_racer_cannon_force;
-
-float autocvar_g_vehicle_racer_rocket_accel;
-float autocvar_g_vehicle_racer_rocket_damage;
-float autocvar_g_vehicle_racer_rocket_radius;
-float autocvar_g_vehicle_racer_rocket_force;
-float autocvar_g_vehicle_racer_rocket_refire;
-float autocvar_g_vehicle_racer_rocket_speed;
-float autocvar_g_vehicle_racer_rocket_turnrate;
-
-float autocvar_g_vehicle_racer_rocket_locktarget;
-float autocvar_g_vehicle_racer_rocket_locking_time;
-float autocvar_g_vehicle_racer_rocket_locking_releasetime;
-float autocvar_g_vehicle_racer_rocket_locked_time;
-float autocvar_g_vehicle_racer_rocket_locked_maxangle;
-float autocvar_g_vehicle_racer_rocket_climbspeed;
-
-float autocvar_g_vehicle_racer_respawntime;
-
-float autocvar_g_vehicle_racer_blowup_radius;
-float autocvar_g_vehicle_racer_blowup_coredamage;
-float autocvar_g_vehicle_racer_blowup_edgedamage;
-float autocvar_g_vehicle_racer_blowup_forceintensity;
-
-float autocvar_g_vehicle_racer_bouncefactor;
-float autocvar_g_vehicle_racer_bouncestop;
-vector autocvar_g_vehicle_racer_bouncepain;
-
-var vector racer_force_from_tag(string tag_name, float spring_length, float max_power);
-void racer_spawn_default();
-
-void racer_align4point(float _delta)
-{
-    vector push_vector;
-    float fl_push, fr_push, bl_push, br_push;
-
-    push_vector  = racer_force_from_tag("tag_engine_fr", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
-    fr_push      = force_fromtag_normpower;
-    //vehicles_sweap_collision(force_fromtag_origin, self.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier);
-
-    push_vector += racer_force_from_tag("tag_engine_fl", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
-    fl_push      = force_fromtag_normpower;
-    //vehicles_sweap_collision(force_fromtag_origin, self.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier);
-
-    push_vector += racer_force_from_tag("tag_engine_br", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
-    br_push      = force_fromtag_normpower;
-    //vehicles_sweap_collision(force_fromtag_origin, self.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier);
-
-    push_vector += racer_force_from_tag("tag_engine_bl", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
-    bl_push      = force_fromtag_normpower;
-    //vehicles_sweap_collision(force_fromtag_origin, self.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier);
-
-   self.velocity += push_vector * _delta;
-
-    // Anti ocilation
-    if(self.velocity_z > 0)
-        self.velocity_z *= 1 - autocvar_g_vehicle_racer_upforcedamper * _delta;
-
-    push_vector_x =  (fl_push - bl_push);
-    push_vector_x += (fr_push - br_push);
-    push_vector_x *= 360;
-
-    push_vector_z = (fr_push - fl_push);
-    push_vector_z += (br_push - bl_push);
-    push_vector_z *= 360;
-
-    // Apply angle diffrance
-    self.angles_z += push_vector_z * _delta;
-    self.angles_x += push_vector_x * _delta;
-
-    // Apply stabilizer
-    self.angles_x *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * _delta);
-    self.angles_z *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * _delta);
-}
-
-void racer_fire_cannon(string tagname)
-{
-    vector v;
-    entity bolt;
-
-    v = gettaginfo(self, gettagindex(self, tagname));
-    bolt = vehicles_projectile("wakizashi_gun_muzzleflash", "weapons/lasergun_fire.wav",
-                           v, normalize(v_forward + randomvec() * autocvar_g_vehicle_racer_cannon_spread) * autocvar_g_vehicle_racer_cannon_speed,
-                           autocvar_g_vehicle_racer_cannon_damage, autocvar_g_vehicle_racer_cannon_radius, autocvar_g_vehicle_racer_cannon_force,  0,
-                           DEATH_VH_WAKI_GUN, PROJECTILE_WAKICANNON, 0, TRUE, TRUE, self.owner);
-
-       // Fix z-aim (for chase mode)
-    v = normalize(trace_endpos - bolt.origin);
-    v_forward_z = v_z * 0.5;
-    bolt.velocity = v_forward * autocvar_g_vehicle_racer_cannon_speed;
-}
-
-void racer_rocket_groundhugger()
-{
-    vector olddir, newdir;
-    float oldvel, newvel;
-
-    self.nextthink  = time;
-
-    if(self.owner.deadflag != DEAD_NO || self.cnt < time)
-    {
-        self.use();
-        return;
-    }
-
-    if (!self.realowner.vehicle)
-    {
-        UpdateCSQCProjectile(self);
-        return;
-    }
-
-    olddir = normalize(self.velocity);
-    oldvel = vlen(self.velocity);
-    newvel = oldvel + self.lip;
-
-    tracebox(self.origin, self.mins, self.maxs, self.origin + olddir * 64, MOVE_WORLDONLY,self);
-    if(trace_fraction <= 0.5)
-    {
-        // Hitting somethign soon, just speed ahead
-        self.velocity = olddir * newvel;
-        UpdateCSQCProjectile(self);
-        return;
-    }
-
-    traceline(trace_endpos, trace_endpos - '0 0 64', MOVE_NORMAL, self);
-    if(trace_fraction != 1.0)
-    {
-        newdir = normalize(trace_endpos + '0 0 64' - self.origin) * autocvar_g_vehicle_racer_rocket_turnrate;
-        self.velocity = normalize(olddir + newdir) * newvel;
-    }
-    else
-    {
-        self.velocity = olddir * newvel;
-        self.velocity_z -= 1600 * sys_frametime; // 2x grav looks better for this one
-    }
-
-    UpdateCSQCProjectile(self);
-    return;
-}
-
-void racer_rocket_tracker()
-{
-    vector olddir, newdir;
-    float oldvel, newvel;
-
-    self.nextthink  = time;
-
-    if (self.owner.deadflag != DEAD_NO || self.cnt < time)
-    {
-        self.use();
-        return;
-    }
-
-    if (!self.realowner.vehicle)
-    {
-        UpdateCSQCProjectile(self);
-        return;
-    }
-
-    olddir = normalize(self.velocity);
-    oldvel = vlen(self.velocity);
-    newvel = oldvel + self.lip;
-    makevectors(vectoangles(olddir));
-
-       float time_to_impact = min(vlen(self.enemy.origin - self.origin) / vlen(self.velocity), 1);
-       vector predicted_origin = self.enemy.origin + self.enemy.velocity * time_to_impact;
-
-    traceline(self.origin, self.origin + v_forward * 64 - '0 0 32', MOVE_NORMAL, self);
-    newdir = normalize(predicted_origin - self.origin);
-
-    //vector
-       float height_diff = predicted_origin_z - self.origin_z;
-
-    if(vlen(newdir - v_forward) > autocvar_g_vehicle_racer_rocket_locked_maxangle)
-    {
-        //bprint("Target lost!\n");
-        //dprint("OF:", ftos(vlen(newdir - v_forward)), "\n");
-        self.think = racer_rocket_groundhugger;
-        return;
-    }
-
-    if(trace_fraction != 1.0 && trace_ent != self.enemy)
-        newdir_z += 16 * sys_frametime;
-
-    self.velocity = normalize(olddir + newdir * autocvar_g_vehicle_racer_rocket_turnrate) * newvel;
-    self.velocity_z -= 800 * sys_frametime;
-    self.velocity_z += max(height_diff, autocvar_g_vehicle_racer_rocket_climbspeed) * sys_frametime ;
-
-    UpdateCSQCProjectile(self);
-    return;
-}
-
-void racer_fire_rocket(string tagname, entity trg)
-{
-    vector v = gettaginfo(self, gettagindex(self, tagname));
-    entity rocket = rocket = vehicles_projectile("wakizashi_rocket_launch", "weapons/rocket_fire.wav",
-                           v, v_forward * autocvar_g_vehicle_racer_rocket_speed,
-                           autocvar_g_vehicle_racer_rocket_damage, autocvar_g_vehicle_racer_rocket_radius, autocvar_g_vehicle_racer_rocket_force, 3,
-                           DEATH_VH_WAKI_ROCKET, PROJECTILE_WAKIROCKET, 20, FALSE, FALSE, self.owner);
-
-    rocket.lip              = autocvar_g_vehicle_racer_rocket_accel * sys_frametime;
-    rocket.wait             = autocvar_g_vehicle_racer_rocket_turnrate;
-    rocket.nextthink        = time;
-    rocket.enemy            = trg;
-    rocket.cnt              = time + 15;
-
-    if(trg)
-        rocket.think            = racer_rocket_tracker;
-    else
-        rocket.think            = racer_rocket_groundhugger;
-}
-
-float racer_frame()
-{
-    entity player, racer;
-    vector df;
-    float ftmp;
-
-       if(intermission_running)
-               return 1;
-
-    player  = self;
-    racer   = self.vehicle;
-    self    = racer;
-
-    player.BUTTON_ZOOM = player.BUTTON_CROUCH = 0;
-
-    vehicles_painframe();
-
-    if(racer.deadflag != DEAD_NO)
-    {
-        self = player;
-        player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
-        return 1;
-    }
-
-    racer_align4point(frametime);
-
-    crosshair_trace(player);
-
-    racer.angles_x *= -1;
-
-    // Yaw
-    ftmp = autocvar_g_vehicle_racer_turnspeed * frametime;
-    ftmp = bound(-ftmp, shortangle_f(player.v_angle_y - racer.angles_y, racer.angles_y), ftmp);
-    racer.angles_y = anglemods(racer.angles_y + ftmp);
-
-    // Roll
-    racer.angles_z += -ftmp * autocvar_g_vehicle_racer_turnroll * frametime;
-
-    // Pitch
-    ftmp = autocvar_g_vehicle_racer_pitchspeed  * frametime;
-    ftmp = bound(-ftmp, shortangle_f(player.v_angle_x - racer.angles_x, racer.angles_x), ftmp);
-    racer.angles_x = bound(-30, anglemods(racer.angles_x + ftmp), 30);
-
-    makevectors(racer.angles);
-    racer.angles_x *= -1;
-
-    //ftmp = racer.velocity_z;
-    df = racer.velocity * -autocvar_g_vehicle_racer_friction;
-    //racer.velocity_z = ftmp;
-
-    if(vlen(player.movement) != 0)
-    {
-        if(player.movement_x)
-            df += v_forward * ((player.movement_x > 0) ? autocvar_g_vehicle_racer_speed_forward : -autocvar_g_vehicle_racer_speed_forward);
-
-        if(player.movement_y)
-            df += v_right * ((player.movement_y > 0) ? autocvar_g_vehicle_racer_speed_strafe : -autocvar_g_vehicle_racer_speed_strafe);
-
-        if(self.sound_nexttime < time || self.sounds != 1)
-        {
-            self.sounds = 1;
-            self.sound_nexttime = time + 10.922667; //soundlength("vehicles/racer_move.wav");
-            sound (self, CH_TRIGGER_SINGLE, "vehicles/racer_move.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
-        }
-    }
-    else
-    {
-        if(self.sound_nexttime < time || self.sounds != 0)
-        {
-            self.sounds = 0;
-            self.sound_nexttime = time + 11.888604; //soundlength("vehicles/racer_idle.wav");
-            sound (self, CH_TRIGGER_SINGLE, "vehicles/racer_idle.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
-        }
-    }
-
-    // Afterburn
-    if (player.BUTTON_JUMP && racer.vehicle_energy >= (autocvar_g_vehicle_racer_afterburn_cost * frametime))
-    {
-        if(time - racer.wait > 0.2)
-            pointparticles(particleeffectnum("wakizashi_booster_smoke"), self.origin - v_forward * 32, v_forward  * vlen(self.velocity), 1);
-
-        racer.wait = time;
-        racer.vehicle_energy -= autocvar_g_vehicle_racer_afterburn_cost * frametime;
-        df += (v_forward * autocvar_g_vehicle_racer_speed_afterburn);
-
-        if(racer.invincible_finished < time)
-        {
-            traceline(racer.origin, racer.origin - '0 0 256', MOVE_NORMAL, self);
-            if(trace_fraction != 1.0)
-                pointparticles(particleeffectnum("smoke_small"), trace_endpos, '0 0 0', 1);
-
-            racer.invincible_finished = time + 0.1 + (random() * 0.1);
-        }
-
-        if(racer.strength_finished < time)
-        {
-            racer.strength_finished = time + 10.922667; //soundlength("vehicles/racer_boost.wav");
-            sound (racer.tur_head, CH_TRIGGER_SINGLE, "vehicles/racer_boost.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
-        }
-    }
-    else
-    {
-        racer.strength_finished = 0;
-        sound (racer.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
-    }
-
-       df -= v_up * (vlen(racer.velocity) * autocvar_g_vehicle_racer_downforce);
-    player.movement = racer.velocity += df * frametime;
-
-    if(player.BUTTON_ATCK)
-    if(time > racer.attack_finished_single)
-    if(racer.vehicle_energy >= autocvar_g_vehicle_racer_cannon_cost)
-    {
-        racer.vehicle_energy -= autocvar_g_vehicle_racer_cannon_cost;
-        racer.wait = time;
-
-        crosshair_trace(player);
-        if(racer.cnt)
-        {
-            racer_fire_cannon("tag_fire1");
-            racer.cnt = 0;
-        }
-        else
-        {
-            racer_fire_cannon("tag_fire2");
-            racer.cnt = 1;
-        }
-        racer.attack_finished_single = time + autocvar_g_vehicle_racer_cannon_refire;
-    }
-
-    if(autocvar_g_vehicle_racer_rocket_locktarget)
-    {
-        vehicles_locktarget((1 / autocvar_g_vehicle_racer_rocket_locking_time) * frametime,
-                         (1 / autocvar_g_vehicle_racer_rocket_locking_releasetime) * frametime,
-                         autocvar_g_vehicle_racer_rocket_locked_time);
-
-        if(self.lock_target)
-        {
-            if(racer.lock_strength == 1)
-                UpdateAuxiliaryXhair(player, real_origin(self.lock_target), '1 0 0', 0);
-            else if(self.lock_strength > 0.5)
-                UpdateAuxiliaryXhair(player, real_origin(self.lock_target), '0 1 0', 0);
-            else if(self.lock_strength < 0.5)
-                UpdateAuxiliaryXhair(player, real_origin(self.lock_target), '0 0 1', 0);
-        }
-    }
-
-    if(time > racer.delay)
-    if(player.BUTTON_ATCK2)
-    {
-        racer.misc_bulletcounter += 1;
-        racer.delay = time + 0.3;
-
-        if(racer.misc_bulletcounter == 1)
-            racer_fire_rocket("tag_rocket_r", (racer.lock_strength == 1 && racer.lock_target) ? racer.lock_target : world);
-        else if(racer.misc_bulletcounter == 2)
-        {
-            racer_fire_rocket("tag_rocket_l", (racer.lock_strength == 1 && racer.lock_target) ? racer.lock_target : world);
-            racer.lock_strength  = 0;
-            racer.lock_target    = world;
-            racer.misc_bulletcounter = 0;
-
-            racer.delay = time + autocvar_g_vehicle_racer_rocket_refire;
-            racer.lip = time;
-        }
-    }
-    player.vehicle_reload1 = bound(0, 100 * ((time - racer.lip) / (racer.delay - racer.lip)), 100);
-
-    if(racer.vehicle_flags  & VHF_SHIELDREGEN)
-        vehicles_regen(racer.dmg_time, vehicle_shield, autocvar_g_vehicle_racer_shield, autocvar_g_vehicle_racer_shield_regen_pause, autocvar_g_vehicle_racer_shield_regen, frametime, TRUE);
-
-    if(racer.vehicle_flags  & VHF_HEALTHREGEN)
-        vehicles_regen(racer.dmg_time, vehicle_health, autocvar_g_vehicle_racer_health, autocvar_g_vehicle_racer_health_regen_pause, autocvar_g_vehicle_racer_health_regen, frametime, FALSE);
-
-    if(racer.vehicle_flags  & VHF_ENERGYREGEN)
-        vehicles_regen(racer.wait, vehicle_energy, autocvar_g_vehicle_racer_energy, autocvar_g_vehicle_racer_energy_regen_pause, autocvar_g_vehicle_racer_energy_regen, frametime, FALSE);
-
-
-    VEHICLE_UPDATE_PLAYER(player, health, racer);
-    VEHICLE_UPDATE_PLAYER(player, energy, racer);
-
-    if(racer.vehicle_flags & VHF_HASSHIELD)
-        VEHICLE_UPDATE_PLAYER(player, shield, racer);
-
-    player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
-    setorigin(player,racer.origin + '0 0 32');
-    player.velocity = racer.velocity;
-
-    self = player;
-    return 1;
-}
-
-void racer_think()
-{
-    self.nextthink = time;
-
-    float pushdeltatime = time - self.lastpushtime;
-    if (pushdeltatime > 0.15) pushdeltatime = 0;
-    self.lastpushtime = time;
-    if(!pushdeltatime) return;
-
-    tracebox(self.origin, self.mins, self.maxs, self.origin - ('0 0 1' * autocvar_g_vehicle_racer_springlength), MOVE_NORMAL, self);
-
-    vector df = self.velocity * -autocvar_g_vehicle_racer_friction;
-       df_z += (1 - trace_fraction) * autocvar_g_vehicle_racer_hoverpower + sin(time * 2) * (autocvar_g_vehicle_racer_springlength * 2);
-
-       self.velocity += df * pushdeltatime;
-    if(self.velocity_z > 0)
-        self.velocity_z *= 1 - autocvar_g_vehicle_racer_upforcedamper * pushdeltatime;
-
-    self.angles_x *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * pushdeltatime);
-    self.angles_z *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * pushdeltatime);
-}
-
-void racer_enter()
-{
-    self.movetype = MOVETYPE_BOUNCE;
-    self.owner.vehicle_health = (self.vehicle_health / autocvar_g_vehicle_racer_health)  * 100;
-    self.owner.vehicle_shield = (self.vehicle_shield / autocvar_g_vehicle_racer_shield)  * 100;
-
-    if(self.owner.flagcarried)
-       setorigin(self.owner.flagcarried, '-190 0 96');
-
-       //targetdrone_spawn(self.origin + '0 0 512' + randomvec() * 256, 1);
-}
-
-void racer_exit(float eject)
-{
-    vector spot;
-
-    self.think      = racer_think;
-    self.nextthink  = time;
-    self.movetype   = MOVETYPE_BOUNCE;
-    sound (self.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
-
-    if (!self.owner)
-        return;
-
-       makevectors(self.angles);
-       if(eject)
-       {
-           spot = self.origin + v_forward * 100 + '0 0 64';
-           spot = vehicles_findgoodexit(spot);
-           setorigin(self.owner , spot);
-           self.owner.velocity = (v_up + v_forward * 0.25) * 750;
-           self.owner.oldvelocity = self.owner.velocity;
-       }
-       else
-       {
-               if(vlen(self.velocity) > 2 * autocvar_sv_maxairspeed)
-               {
-                       self.owner.velocity = normalize(self.velocity) * autocvar_sv_maxairspeed * 2;
-                       self.owner.velocity_z += 200;
-                       spot = self.origin + v_forward * 32 + '0 0 32';
-                       spot = vehicles_findgoodexit(spot);
-               }
-               else
-               {
-                       self.owner.velocity = self.velocity * 0.5;
-                       self.owner.velocity_z += 10;
-                       spot = self.origin - v_forward * 200 + '0 0 32';
-                       spot = vehicles_findgoodexit(spot);
-               }
-           self.owner.oldvelocity = self.owner.velocity;
-           setorigin(self.owner , spot);
-       }
-       antilag_clear(self.owner);
-    self.owner = world;
-}
-
-void racer_impact()
-{
-    if(autocvar_g_vehicle_racer_bouncepain_x)
-        vehilces_impact(autocvar_g_vehicle_racer_bouncepain_x, autocvar_g_vehicle_racer_bouncepain_y, autocvar_g_vehicle_racer_bouncepain_z);
-}
-
-void racer_blowup()
-{
-    self.deadflag    = DEAD_DEAD;
-    self.vehicle_exit(VHEF_NORMAL);
-
-    RadiusDamage (self, self.enemy, autocvar_g_vehicle_racer_blowup_coredamage,
-                                       autocvar_g_vehicle_racer_blowup_edgedamage,
-                                       autocvar_g_vehicle_racer_blowup_radius, world,
-                                       autocvar_g_vehicle_racer_blowup_forceintensity,
-                                       DEATH_VH_WAKI_DEATH, world);
-
-    self.nextthink  = time + autocvar_g_vehicle_racer_respawntime;
-    self.think      = racer_spawn_default;
-    self.movetype   = MOVETYPE_NONE;
-    self.effects    = EF_NODRAW;
-
-    self.colormod  = '0 0 0';
-    self.avelocity = '0 0 0';
-    self.velocity  = '0 0 0';
-
-    setorigin(self, self.pos1);
-}
-
-void racer_deadtouch()
-{
-    self.avelocity_x *= 0.7;
-    self.cnt -= 1;
-    if(self.cnt <= 0)
-        racer_blowup();
-}
-
-void racer_die()
-{
-    self.health       = 0;
-    self.event_damage = func_null;
-    self.solid        = SOLID_CORPSE;
-    self.takedamage   = DAMAGE_NO;
-    self.deadflag     = DEAD_DYING;
-    self.movetype     = MOVETYPE_BOUNCE;
-    self.wait         = time;
-    self.cnt          = 1 + random() * 2;
-    self.touch        = racer_deadtouch;
-
-    pointparticles(particleeffectnum("explosion_medium"), self.origin, '0 0 0', 1);
-
-    if(random() < 0.5)
-        self.avelocity_z  = 32;
-    else
-        self.avelocity_z  = -32;
-
-    self.avelocity_x = -vlen(self.velocity) * 0.2;
-    self.velocity   += '0 0 700';
-    self.colormod    = '-0.5 -0.5 -0.5';
-
-       self.think     = racer_blowup;
-       self.nextthink = 2 + time + random() * 3;
-}
-void racer_spawn(float _spawnflag)
-{
-    if(self.scale != 0.5)
-    {
-        if(autocvar_g_vehicle_racer_hovertype != 0)
-            racer_force_from_tag = vehicles_force_fromtag_maglev;
-        else
-            racer_force_from_tag = vehicles_force_fromtag_hover;
-
-        // FIXME: this be hakkz, fix the models insted (scale body, add tag_viewport to the hudmodel).
-        self.scale = 0.5;
-        setattachment(self.vehicle_hudmodel, self, "");
-        setattachment(self.vehicle_viewport, self, "tag_viewport");
-
-        self.mass               = 900;
-    }
-
-    self.think          = racer_think;
-    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);
-    self.bouncefactor = autocvar_g_vehicle_racer_bouncefactor;
-    self.bouncestop = autocvar_g_vehicle_racer_bouncestop;
-    self.vehicle_impact = racer_impact;
-    self.damageforcescale = 0.5;
-    //self.destvec = autocvar_g_vehicle_racer_bouncepain;
-}
-void racer_spawn_default()
-{
-       racer_spawn(0);
-}
-
-
-
-void spawnfunc_vehicle_racer()
-{
-    if(!autocvar_g_vehicle_racer)
-    {
-        remove(self);
-        return;
-    }
-
-    self.vehicle_flags |= VHF_DMGSHAKE;
-    self.vehicle_flags |= VHF_DMGROLL;
-
-    precache_sound ("weapons/lasergun_fire.wav");
-    precache_sound ("weapons/rocket_fire.wav");
-
-    precache_sound ("vehicles/racer_idle.wav");
-    precache_sound ("vehicles/racer_move.wav");
-    precache_sound ("vehicles/racer_boost.wav");
-
-    precache_model ("models/vhshield.md3");
-    precache_model ("models/vehicles/wakizashi.dpm");
-    precache_model ("models/vehicles/wakizashi_cockpit.dpm");
-
-    if(autocvar_g_vehicle_racer_energy)
-        if(autocvar_g_vehicle_racer_energy_regen)
-            self.vehicle_flags |= VHF_ENERGYREGEN;
-
-    if(autocvar_g_vehicle_racer_shield)
-        self.vehicle_flags |= VHF_HASSHIELD;
-
-    if(autocvar_g_vehicle_racer_shield_regen)
-        self.vehicle_flags |= VHF_SHIELDREGEN;
-
-    if(autocvar_g_vehicle_racer_health_regen)
-        self.vehicle_flags |= VHF_HEALTHREGEN;
-
-    if(!vehicle_initialize(
-             "Wakizashi",
-             "models/vehicles/wakizashi.dpm",
-             "null", // we need this so tur_head is networked and usable for sounds
-             "models/vehicles/wakizashi_cockpit.dpm",
-             "", "", "tag_viewport",
-             HUD_WAKIZASHI,
-             0.5 * RACER_MIN, 0.5 * RACER_MAX,
-             FALSE,
-             racer_spawn, autocvar_g_vehicle_racer_respawntime,
-             racer_frame,
-             racer_enter, racer_exit,
-             racer_die,   racer_think,
-             TRUE,
-             autocvar_g_vehicle_racer_health,
-             autocvar_g_vehicle_racer_shield))
-    {
-        remove(self);
-        return;
-    }
-}
-#endif // SVQC
diff --git a/qcsrc/server/vehicles/raptor.qc b/qcsrc/server/vehicles/raptor.qc
deleted file mode 100644 (file)
index 58a640e..0000000
+++ /dev/null
@@ -1,940 +0,0 @@
-#define RSM_FIRST 0
-#define RSM_BOMB 0
-#define RSM_FLARE 1
-#define RSM_LAST 1
-
-#define RAPTOR_MIN '-80 -80 0'
-#define RAPTOR_MAX '80 80 70'
-
-#ifdef SVQC
-float autocvar_g_vehicle_raptor;
-
-float autocvar_g_vehicle_raptor_respawntime;
-float autocvar_g_vehicle_raptor_takeofftime;
-
-float autocvar_g_vehicle_raptor_movestyle;
-float autocvar_g_vehicle_raptor_turnspeed;
-float autocvar_g_vehicle_raptor_pitchspeed;
-float autocvar_g_vehicle_raptor_pitchlimit;
-
-float autocvar_g_vehicle_raptor_speed_forward;
-float autocvar_g_vehicle_raptor_speed_strafe;
-float autocvar_g_vehicle_raptor_speed_up;
-float autocvar_g_vehicle_raptor_speed_down;
-float autocvar_g_vehicle_raptor_friction;
-
-float autocvar_g_vehicle_raptor_bomblets;
-float autocvar_g_vehicle_raptor_bomblet_alt;
-float autocvar_g_vehicle_raptor_bomblet_time;
-float autocvar_g_vehicle_raptor_bomblet_damage;
-float autocvar_g_vehicle_raptor_bomblet_spread;
-float autocvar_g_vehicle_raptor_bomblet_edgedamage;
-float autocvar_g_vehicle_raptor_bomblet_radius;
-float autocvar_g_vehicle_raptor_bomblet_force;
-float autocvar_g_vehicle_raptor_bomblet_explode_delay;
-float autocvar_g_vehicle_raptor_bombs_refire;
-
-float autocvar_g_vehicle_raptor_flare_refire;
-float autocvar_g_vehicle_raptor_flare_lifetime;
-float autocvar_g_vehicle_raptor_flare_chase;
-float autocvar_g_vehicle_raptor_flare_range;
-
-float autocvar_g_vehicle_raptor_cannon_turnspeed;
-float autocvar_g_vehicle_raptor_cannon_turnlimit;
-float autocvar_g_vehicle_raptor_cannon_pitchlimit_up;
-float autocvar_g_vehicle_raptor_cannon_pitchlimit_down;
-
-float autocvar_g_vehicle_raptor_cannon_locktarget;
-float autocvar_g_vehicle_raptor_cannon_locking_time;
-float autocvar_g_vehicle_raptor_cannon_locking_releasetime;
-float autocvar_g_vehicle_raptor_cannon_locked_time;
-float autocvar_g_vehicle_raptor_cannon_predicttarget;
-
-float autocvar_g_vehicle_raptor_cannon_cost;
-float autocvar_g_vehicle_raptor_cannon_damage;
-float autocvar_g_vehicle_raptor_cannon_radius;
-float autocvar_g_vehicle_raptor_cannon_refire;
-float autocvar_g_vehicle_raptor_cannon_speed;
-float autocvar_g_vehicle_raptor_cannon_spread;
-float autocvar_g_vehicle_raptor_cannon_force;
-
-float autocvar_g_vehicle_raptor_energy;
-float autocvar_g_vehicle_raptor_energy_regen;
-float autocvar_g_vehicle_raptor_energy_regen_pause;
-
-float autocvar_g_vehicle_raptor_health;
-float autocvar_g_vehicle_raptor_health_regen;
-float autocvar_g_vehicle_raptor_health_regen_pause;
-
-float autocvar_g_vehicle_raptor_shield;
-float autocvar_g_vehicle_raptor_shield_regen;
-float autocvar_g_vehicle_raptor_shield_regen_pause;
-
-float autocvar_g_vehicle_raptor_bouncefactor;
-float autocvar_g_vehicle_raptor_bouncestop;
-vector autocvar_g_vehicle_raptor_bouncepain;
-
-void raptor_spawn(float);
-float raptor_frame();
-float raptor_takeoff();
-
-.entity bomb1;
-.entity bomb2;
-
-float raptor_altitude(float amax)
-{
-       tracebox(self.origin, self.mins, self.maxs, self.origin - ('0 0 1' * amax), MOVE_WORLDONLY, self);
-    return vlen(self.origin - trace_endpos);
-}
-
-
-void raptor_bomblet_boom()
-{
-    RadiusDamage (self, self.realowner, autocvar_g_vehicle_raptor_bomblet_damage,
-                                    autocvar_g_vehicle_raptor_bomblet_edgedamage,
-                                    autocvar_g_vehicle_raptor_bomblet_radius, world,
-                                    autocvar_g_vehicle_raptor_bomblet_force, DEATH_VH_RAPT_BOMB, world);
-    remove(self);
-}
-
-void raptor_bomblet_touch()
-{
-    if(other == self.owner)
-        return;
-
-    PROJECTILE_TOUCH;
-    self.think = raptor_bomblet_boom;
-    self.nextthink = time + random() * autocvar_g_vehicle_raptor_bomblet_explode_delay;
-}
-
-void raptor_bomb_burst()
-{
-    if(self.cnt > time)
-    if(autocvar_g_vehicle_raptor_bomblet_alt)
-    {
-        self.nextthink = time;
-        traceline(self.origin, self.origin + (normalize(self.velocity) * autocvar_g_vehicle_raptor_bomblet_alt), MOVE_NORMAL, self);
-        if((trace_fraction == 1.0) || (vlen(self.origin - self.owner.origin) < autocvar_g_vehicle_raptor_bomblet_radius))
-        {
-            UpdateCSQCProjectile(self);
-            return;
-        }
-    }
-
-    entity bomblet;
-    float i;
-
-    Damage_DamageInfo(self.origin, 0, 0, 0, '0 0 0', DEATH_VH_RAPT_FRAGMENT, 0, self);
-
-    for(i = 0; i < autocvar_g_vehicle_raptor_bomblets; ++i)
-    {
-        bomblet = spawn();
-        setorigin(bomblet, self.origin);
-
-        bomblet.movetype    = MOVETYPE_TOSS;
-        bomblet.touch       = raptor_bomblet_touch;
-        bomblet.think       = raptor_bomblet_boom;
-        bomblet.nextthink   = time + 5;
-        bomblet.owner       = self.owner;
-        bomblet.realowner   = self.realowner;
-        bomblet.velocity    = normalize(normalize(self.velocity) + (randomvec() * autocvar_g_vehicle_raptor_bomblet_spread)) * vlen(self.velocity);
-
-        PROJECTILE_MAKETRIGGER(bomblet);
-        CSQCProjectile(bomblet, TRUE, PROJECTILE_RAPTORBOMBLET, TRUE);
-    }
-
-    remove(self);
-}
-
-void raptor_bombdrop()
-{
-    entity bomb_1, bomb_2;
-
-    bomb_1 = spawn();
-    bomb_2 = spawn();
-
-    setorigin(bomb_1, gettaginfo(self, gettagindex(self, "bombmount_left")));
-    setorigin(bomb_2, gettaginfo(self, gettagindex(self, "bombmount_right")));
-
-    bomb_1.movetype     = bomb_2.movetype   = MOVETYPE_BOUNCE;
-    bomb_1.velocity     = bomb_2.velocity   = self.velocity;
-    bomb_1.touch        = bomb_2.touch      = raptor_bomb_burst;
-    bomb_1.think        = bomb_2.think      = raptor_bomb_burst;
-    bomb_1.cnt          = bomb_2.cnt        = time + 10;
-
-    if(autocvar_g_vehicle_raptor_bomblet_alt)
-        bomb_1.nextthink = bomb_2.nextthink  = time;
-    else
-        bomb_1.nextthink = bomb_2.nextthink  = time + autocvar_g_vehicle_raptor_bomblet_time;
-
-    bomb_1.owner     = bomb_2.owner      = self;
-    bomb_1.realowner = bomb_2.realowner  = self.owner;
-    bomb_1.solid     = bomb_2.solid      = SOLID_BBOX;
-    bomb_1.gravity   = bomb_2.gravity    = 1;
-
-    PROJECTILE_MAKETRIGGER(bomb_1);
-    PROJECTILE_MAKETRIGGER(bomb_2);
-
-    CSQCProjectile(bomb_1, TRUE, PROJECTILE_RAPTORBOMB, TRUE);
-    CSQCProjectile(bomb_2, TRUE, PROJECTILE_RAPTORBOMB, TRUE);
-}
-
-
-void raptor_fire_cannon(entity gun, string tagname)
-{
-    vehicles_projectile("raptor_cannon_muzzleflash", "weapons/lasergun_fire.wav",
-                           gettaginfo(gun, gettagindex(gun, tagname)), normalize(v_forward + randomvec() * autocvar_g_vehicle_raptor_cannon_spread) * autocvar_g_vehicle_raptor_cannon_speed,
-                           autocvar_g_vehicle_raptor_cannon_damage, autocvar_g_vehicle_raptor_cannon_radius, autocvar_g_vehicle_raptor_cannon_force,  0,
-                           DEATH_VH_RAPT_CANNON, PROJECTILE_RAPTORCANNON, 0, TRUE, TRUE, self.owner);
-}
-
-void raptor_think()
-{
-}
-
-void raptor_enter()
-{
-    self.vehicle_weapon2mode = RSM_BOMB;
-    self.owner.PlayerPhysplug = raptor_takeoff;
-    self.movetype       = MOVETYPE_BOUNCEMISSILE;
-    self.solid          = SOLID_SLIDEBOX;
-    self.owner.vehicle_health = (self.vehicle_health / autocvar_g_vehicle_raptor_health) * 100;
-    self.owner.vehicle_shield = (self.vehicle_shield / autocvar_g_vehicle_raptor_shield) * 100;
-    self.velocity_z = 1; // Nudge upwards to takeoff sequense can work.
-    self.tur_head.exteriormodeltoclient = self.owner;
-
-    self.delay = time + autocvar_g_vehicle_raptor_bombs_refire;
-    self.lip   = time;
-
-    if(self.owner.flagcarried)
-       setorigin(self.owner.flagcarried, '-20 0 96');
-
-    CSQCVehicleSetup(self.owner, 0);
-}
-
-void raptor_land()
-{
-    float hgt;
-
-    hgt = raptor_altitude(512);
-    self.velocity = (self.velocity * 0.9) + ('0 0 -1800' * (hgt / 256) * sys_frametime);
-    self.angles_x *= 0.95;
-    self.angles_z *= 0.95;
-
-    if(hgt < 128)
-    if(hgt > 0)
-        self.frame = (hgt / 128) * 25;
-
-    self.bomb1.gun1.avelocity_y = 90 + ((self.frame / 25) * 2000);
-    self.bomb1.gun2.avelocity_y = -self.bomb1.gun1.avelocity_y;
-
-    if(hgt < 16)
-    {
-        self.movetype = MOVETYPE_TOSS;
-        self.think    = raptor_think;
-        self.frame    = 0;
-    }
-
-    self.nextthink  = time;
-}
-
-void raptor_exit(float eject)
-{
-    vector spot;
-    self.tur_head.exteriormodeltoclient = world;
-
-    if(self.deadflag == DEAD_NO)
-    {
-        self.think      = raptor_land;
-        self.nextthink  = time;
-    }
-
-    if (!self.owner)
-        return;
-
-       makevectors(self.angles);
-       if(eject)
-       {
-           spot = self.origin + v_forward * 100 + '0 0 64';
-           spot = vehicles_findgoodexit(spot);
-           setorigin(self.owner , spot);
-           self.owner.velocity = (v_up + v_forward * 0.25) * 750;
-           self.owner.oldvelocity = self.owner.velocity;
-       }
-       else
-       {
-               if(vlen(self.velocity) > 2 * autocvar_sv_maxairspeed)
-               {
-                       self.owner.velocity = normalize(self.velocity) * autocvar_sv_maxairspeed * 2;
-                       self.owner.velocity_z += 200;
-                       spot = self.origin + v_forward * 32 + '0 0 64';
-                       spot = vehicles_findgoodexit(spot);
-               }
-               else
-               {
-                       self.owner.velocity = self.velocity * 0.5;
-                       self.owner.velocity_z += 10;
-                       spot = self.origin - v_forward * 200 + '0 0 64';
-                       spot = vehicles_findgoodexit(spot);
-               }
-           self.owner.oldvelocity = self.owner.velocity;
-           setorigin(self.owner , spot);
-       }
-
-       antilag_clear(self.owner);
-    self.owner = world;
-}
-
-float raptor_takeoff()
-{
-    entity player, raptor;
-
-    player = self;
-    raptor = self.vehicle;
-    self   = raptor;
-    if(self.sound_nexttime < time)
-    {
-        self.sound_nexttime = time + 7.955812; //soundlength("vehicles/raptor_fly.wav");
-        sound (self, CH_TRIGGER_SINGLE, "vehicles/raptor_speed.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
-    }
-
-    // Takeoff sequense
-    if(raptor.frame < 25)
-    {
-        raptor.frame += 25 / (autocvar_g_vehicle_raptor_takeofftime / sys_frametime);
-        raptor.velocity_z = min(raptor.velocity_z * 1.5, 256);
-        self.bomb1.gun1.avelocity_y = 90 + ((raptor.frame / 25) * 25000);
-        self.bomb1.gun2.avelocity_y = -self.bomb1.gun1.avelocity_y;
-        player.BUTTON_ATCK = player.BUTTON_ATCK2 = player.BUTTON_CROUCH = 0;
-
-        setorigin(player, raptor.origin + '0 0 32');
-    }
-    else
-        player.PlayerPhysplug = raptor_frame;
-
-    if(self.vehicle_flags  & VHF_SHIELDREGEN)
-        vehicles_regen(raptor.dmg_time, vehicle_shield, autocvar_g_vehicle_raptor_shield, autocvar_g_vehicle_raptor_shield_regen_pause, autocvar_g_vehicle_raptor_shield_regen, frametime, TRUE);
-
-    if(self.vehicle_flags  & VHF_HEALTHREGEN)
-        vehicles_regen(raptor.dmg_time, vehicle_health, autocvar_g_vehicle_raptor_health, autocvar_g_vehicle_raptor_health_regen_pause, autocvar_g_vehicle_raptor_health_regen, frametime, FALSE);
-
-    if(self.vehicle_flags  & VHF_ENERGYREGEN)
-        vehicles_regen(raptor.cnt, vehicle_energy, autocvar_g_vehicle_raptor_energy, autocvar_g_vehicle_raptor_energy_regen_pause, autocvar_g_vehicle_raptor_energy_regen, frametime, FALSE);
-
-
-    raptor.bomb1.alpha = raptor.bomb2.alpha = (time - raptor.lip) / (raptor.delay - raptor.lip);
-    player.vehicle_reload2 = bound(0, raptor.bomb1.alpha * 100, 100);
-
-    VEHICLE_UPDATE_PLAYER(player, health, raptor);
-    VEHICLE_UPDATE_PLAYER(player, energy, raptor);
-    if(self.vehicle_flags & VHF_HASSHIELD)
-        VEHICLE_UPDATE_PLAYER(player, shield, raptor);
-
-    player.BUTTON_ATCK = player.BUTTON_ATCK2 = player.BUTTON_CROUCH = 0;
-    self = player;
-    return 1;
-}
-
-void raptor_flare_touch()
-{
-    remove(self);
-}
-
-void raptor_flare_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
-{
-    self.health -= damage;
-    if(self.health <= 0)
-        remove(self);
-}
-
-void raptor_flare_think()
-{
-    self.nextthink = time + 0.1;
-    entity _missile = findchainentity(enemy, self.owner);
-    while(_missile)
-    {
-        if(_missile.flags & FL_PROJECTILE)
-        if(vlen(self.origin - _missile.origin) < autocvar_g_vehicle_raptor_flare_range)
-        if(random() > autocvar_g_vehicle_raptor_flare_chase)
-            _missile.enemy = self;
-        _missile = _missile.chain;
-    }
-
-    if(self.tur_impacttime < time)
-        remove(self);
-}
-
-float raptor_frame()
-{
-    entity player, raptor;
-    float ftmp = 0;
-    vector df;
-
-       if(intermission_running)
-               return 1;
-
-    player = self;
-    raptor = self.vehicle;
-    self   = raptor;
-    vehicles_painframe();
-    /*
-    ftmp = vlen(self.velocity);
-    if(ftmp > autocvar_g_vehicle_raptor_speed_forward)
-        ftmp = 1;
-    else
-        ftmp = ftmp / autocvar_g_vehicle_raptor_speed_forward;
-    */
-
-    if(self.sound_nexttime < time)
-    {
-        self.sound_nexttime = time + 7.955812;
-        //sound (self.tur_head, CH_TRIGGER_SINGLE, "vehicles/raptor_fly.wav", 1 - ftmp,   ATTEN_NORM );
-        sound (self, CH_TRIGGER_SINGLE, "vehicles/raptor_speed.wav", 1, ATTEN_NORM);
-        self.wait = ftmp;
-    }
-    /*
-    else if(fabs(ftmp - self.wait) > 0.2)
-    {
-        sound (self.tur_head, CH_TRIGGER_SINGLE, "", 1 - ftmp,   ATTEN_NORM );
-        sound (self, CH_TRIGGER_SINGLE, "", ftmp, ATTEN_NORM);
-        self.wait = ftmp;
-    }
-    */
-
-    if(raptor.deadflag != DEAD_NO)
-    {
-        self = player;
-        player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
-        return 1;
-    }
-    crosshair_trace(player);
-
-    vector vang;
-    vang = raptor.angles;
-    df = vectoangles(normalize(trace_endpos - self.origin + '0 0 32'));
-    vang_x *= -1;
-    df_x *= -1;
-    if(df_x > 180)  df_x -= 360;
-    if(df_x < -180) df_x += 360;
-    if(df_y > 180)  df_y -= 360;
-    if(df_y < -180) df_y += 360;
-
-    ftmp = shortangle_f(player.v_angle_y - vang_y, vang_y);
-    if(ftmp > 180)  ftmp -= 360; if(ftmp < -180) ftmp += 360;
-    raptor.avelocity_y = bound(-autocvar_g_vehicle_raptor_turnspeed, ftmp + raptor.avelocity_y * 0.9, autocvar_g_vehicle_raptor_turnspeed);
-
-    // Pitch
-    ftmp = 0;
-    if(player.movement_x > 0 && vang_x < autocvar_g_vehicle_raptor_pitchlimit) ftmp = 5;
-    else if(player.movement_x < 0 && vang_x > -autocvar_g_vehicle_raptor_pitchlimit) ftmp = -20;
-
-    df_x = bound(-autocvar_g_vehicle_raptor_pitchlimit, df_x , autocvar_g_vehicle_raptor_pitchlimit);
-    ftmp = vang_x - bound(-autocvar_g_vehicle_raptor_pitchlimit, df_x + ftmp, autocvar_g_vehicle_raptor_pitchlimit);
-    raptor.avelocity_x = bound(-autocvar_g_vehicle_raptor_pitchspeed, ftmp + raptor.avelocity_x * 0.9, autocvar_g_vehicle_raptor_pitchspeed);
-
-    raptor.angles_x = anglemods(raptor.angles_x);
-    raptor.angles_y = anglemods(raptor.angles_y);
-    raptor.angles_z = anglemods(raptor.angles_z);
-
-    if(autocvar_g_vehicle_raptor_movestyle == 1)
-        makevectors('0 1 0' * raptor.angles_y);
-    else
-        makevectors(player.v_angle);
-
-    df = raptor.velocity * -autocvar_g_vehicle_raptor_friction;
-
-    if(player.movement_x != 0)
-    {
-        if(player.movement_x > 0)
-            df += v_forward  * autocvar_g_vehicle_raptor_speed_forward;
-        else if(player.movement_x < 0)
-            df -= v_forward  * autocvar_g_vehicle_raptor_speed_forward;
-    }
-
-    if(player.movement_y != 0)
-    {
-        if(player.movement_y < 0)
-            df -= v_right * autocvar_g_vehicle_raptor_speed_strafe;
-        else if(player.movement_y > 0)
-            df += v_right * autocvar_g_vehicle_raptor_speed_strafe;
-
-        raptor.angles_z = bound(-30,raptor.angles_z + (player.movement_y / autocvar_g_vehicle_raptor_speed_strafe),30);
-    }
-    else
-    {
-        raptor.angles_z *= 0.95;
-        if(raptor.angles_z >= -1 && raptor.angles_z <= -1)
-            raptor.angles_z = 0;
-    }
-
-    if(player.BUTTON_CROUCH)
-        df -=   v_up * autocvar_g_vehicle_raptor_speed_down;
-    else if (player.BUTTON_JUMP)
-        df +=  v_up * autocvar_g_vehicle_raptor_speed_up;
-
-    raptor.velocity  += df * frametime;
-    player.velocity = player.movement  = raptor.velocity;
-    setorigin(player, raptor.origin + '0 0 32');
-
-    vector vf, ad;
-    // Target lock & predict
-    if(autocvar_g_vehicle_raptor_cannon_locktarget == 2)
-    {
-        if(raptor.gun1.lock_time < time || raptor.gun1.enemy.deadflag)
-            raptor.gun1.enemy = world;
-
-        if(trace_ent)
-        if(trace_ent.movetype)
-        if(trace_ent.takedamage)
-        if(!trace_ent.deadflag)
-        {
-            if(teamplay)
-            {
-                if(trace_ent.team != player.team)
-                {
-                    raptor.gun1.enemy = trace_ent;
-                    raptor.gun1.lock_time = time + 5;
-                }
-            }
-            else
-            {
-                raptor.gun1.enemy = trace_ent;
-                raptor.gun1.lock_time = time + 0.5;
-            }
-        }
-
-        if(raptor.gun1.enemy)
-        {
-            float i, distance, impact_time;
-
-            vf = real_origin(raptor.gun1.enemy);
-            UpdateAuxiliaryXhair(player, vf, '1 0 0', 1);
-            vector _vel = raptor.gun1.enemy.velocity;
-            if(raptor.gun1.enemy.movetype == MOVETYPE_WALK)
-                _vel_z *= 0.1;
-
-            if(autocvar_g_vehicle_raptor_cannon_predicttarget)
-            {
-                ad = vf;
-                for(i = 0; i < 4; ++i)
-                {
-                    distance = vlen(ad - player.origin);
-                    impact_time = distance / autocvar_g_vehicle_raptor_cannon_speed;
-                    ad = vf + _vel * impact_time;
-                }
-                trace_endpos = ad;
-            }
-            else
-                trace_endpos = vf;
-        }
-    }
-    else if(autocvar_g_vehicle_raptor_cannon_locktarget == 1)
-    {
-
-        vehicles_locktarget((1 / autocvar_g_vehicle_raptor_cannon_locking_time) * frametime,
-                             (1 / autocvar_g_vehicle_raptor_cannon_locking_releasetime) * frametime,
-                             autocvar_g_vehicle_raptor_cannon_locked_time);
-
-        if(self.lock_target != world)
-        if(autocvar_g_vehicle_raptor_cannon_predicttarget)
-        if(self.lock_strength == 1)
-        {
-            float i, distance, impact_time;
-
-            vf = real_origin(raptor.lock_target);
-            ad = vf;
-            for(i = 0; i < 4; ++i)
-            {
-                distance = vlen(ad - raptor.origin);
-                impact_time = distance / autocvar_g_vehicle_raptor_cannon_speed;
-                ad = vf + raptor.lock_target.velocity * impact_time;
-            }
-            trace_endpos = ad;
-        }
-
-        if(self.lock_target)
-        {
-            if(raptor.lock_strength == 1)
-                UpdateAuxiliaryXhair(player, real_origin(raptor.lock_target), '1 0 0', 1);
-            else if(self.lock_strength > 0.5)
-                UpdateAuxiliaryXhair(player, real_origin(raptor.lock_target), '0 1 0', 1);
-            else if(self.lock_strength < 0.5)
-                UpdateAuxiliaryXhair(player, real_origin(raptor.lock_target), '0 0 1', 1);
-        }
-    }
-
-
-    vehicle_aimturret(raptor, trace_endpos, raptor.gun1, "fire1",
-                          autocvar_g_vehicle_raptor_cannon_pitchlimit_down * -1,  autocvar_g_vehicle_raptor_cannon_pitchlimit_up,
-                          autocvar_g_vehicle_raptor_cannon_turnlimit * -1,  autocvar_g_vehicle_raptor_cannon_turnlimit,  autocvar_g_vehicle_raptor_cannon_turnspeed);
-
-    vehicle_aimturret(raptor, trace_endpos, raptor.gun2, "fire1",
-                          autocvar_g_vehicle_raptor_cannon_pitchlimit_down * -1,  autocvar_g_vehicle_raptor_cannon_pitchlimit_up,
-                          autocvar_g_vehicle_raptor_cannon_turnlimit * -1,  autocvar_g_vehicle_raptor_cannon_turnlimit,  autocvar_g_vehicle_raptor_cannon_turnspeed);
-
-    /*
-    ad = ad * 0.5;
-    v_forward = vf * 0.5;
-    traceline(ad, ad + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, raptor);
-    UpdateAuxiliaryXhair(player, trace_endpos, '0 1 0', 0);
-    */
-
-    if(player.BUTTON_ATCK)
-    if(raptor.attack_finished_single <= time)
-    if(raptor.vehicle_energy > autocvar_g_vehicle_raptor_cannon_cost)
-    {
-        raptor.misc_bulletcounter += 1;
-        raptor.attack_finished_single = time + autocvar_g_vehicle_raptor_cannon_refire;
-        if(raptor.misc_bulletcounter <= 2)
-            raptor_fire_cannon(self.gun1, "fire1");
-        else if(raptor.misc_bulletcounter == 3)
-            raptor_fire_cannon(self.gun2, "fire1");
-        else
-        {
-            raptor.attack_finished_single = time + autocvar_g_vehicle_raptor_cannon_refire * 2;
-            raptor_fire_cannon(self.gun2, "fire1");
-            raptor.misc_bulletcounter = 0;
-        }
-        raptor.vehicle_energy -= autocvar_g_vehicle_raptor_cannon_cost;
-        self.cnt = time;
-    }
-
-    if(self.vehicle_flags  & VHF_SHIELDREGEN)
-        vehicles_regen(raptor.dmg_time, vehicle_shield, autocvar_g_vehicle_raptor_shield, autocvar_g_vehicle_raptor_shield_regen_pause, autocvar_g_vehicle_raptor_shield_regen, frametime, TRUE);
-
-    if(self.vehicle_flags  & VHF_HEALTHREGEN)
-        vehicles_regen(raptor.dmg_time, vehicle_health, autocvar_g_vehicle_raptor_health, autocvar_g_vehicle_raptor_health_regen_pause, autocvar_g_vehicle_raptor_health_regen, frametime, FALSE);
-
-    if(self.vehicle_flags  & VHF_ENERGYREGEN)
-        vehicles_regen(raptor.cnt, vehicle_energy, autocvar_g_vehicle_raptor_energy, autocvar_g_vehicle_raptor_energy_regen_pause, autocvar_g_vehicle_raptor_energy_regen, frametime, FALSE);
-
-    if(raptor.vehicle_weapon2mode == RSM_BOMB)
-    {
-        if(time > raptor.lip + autocvar_g_vehicle_raptor_bombs_refire)
-        if(player.BUTTON_ATCK2)
-        {
-            raptor_bombdrop();
-            raptor.delay = time + autocvar_g_vehicle_raptor_bombs_refire;
-            raptor.lip   = time;
-        }
-    }
-    else
-    {
-        if(time > raptor.lip + autocvar_g_vehicle_raptor_flare_refire)
-        if(player.BUTTON_ATCK2)
-        {
-            float i;
-            entity _flare;
-
-            for(i = 0; i < 3; ++i)
-            {
-            _flare = spawn();
-            setmodel(_flare, "models/runematch/rune.mdl");
-            _flare.effects = EF_LOWPRECISION | EF_FLAME;
-            _flare.scale = 0.5;
-            setorigin(_flare, self.origin - '0 0 16');
-            _flare.movetype = MOVETYPE_TOSS;
-            _flare.gravity = 0.15;
-            _flare.velocity = 0.25 * raptor.velocity + (v_forward + randomvec() * 0.25)* -500;
-            _flare.think = raptor_flare_think;
-            _flare.nextthink = time;
-            _flare.owner = raptor;
-            _flare.solid = SOLID_CORPSE;
-            _flare.takedamage = DAMAGE_YES;
-            _flare.event_damage = raptor_flare_damage;
-            _flare.health = 20;
-            _flare.tur_impacttime = time + autocvar_g_vehicle_raptor_flare_lifetime;
-            _flare.touch = raptor_flare_touch;
-            }
-            raptor.delay = time + autocvar_g_vehicle_raptor_flare_refire;
-            raptor.lip   = time;
-        }
-    }
-
-    raptor.bomb1.alpha = raptor.bomb2.alpha = (time - raptor.lip) / (raptor.delay - raptor.lip);
-    player.vehicle_reload2 = bound(0, raptor.bomb1.alpha * 100, 100);
-
-    if(self.bomb1.cnt < time)
-    {
-        entity _missile = findchainentity(enemy, raptor);
-        float _incomming = 0;
-        while(_missile)
-        {
-            if(_missile.flags & FL_PROJECTILE)
-            if(MISSILE_IS_TRACKING(_missile))
-            if(vlen(self.origin - _missile.origin) < 2 * autocvar_g_vehicle_raptor_flare_range)
-                ++_incomming;
-
-            _missile = _missile.chain;
-        }
-
-        if(_incomming)
-            sound(self, CH_PAIN_SINGLE, "vehicles/missile_alarm.wav", VOL_BASE, ATTEN_NONE);
-
-        self.bomb1.cnt = time + 1;
-    }
-
-
-    VEHICLE_UPDATE_PLAYER(player, health, raptor);
-    VEHICLE_UPDATE_PLAYER(player, energy, raptor);
-    if(self.vehicle_flags & VHF_HASSHIELD)
-        VEHICLE_UPDATE_PLAYER(player, shield, raptor);
-
-    player.BUTTON_ATCK = player.BUTTON_ATCK2 = player.BUTTON_CROUCH = 0;
-
-    self = player;
-    return 1;
-}
-
-void raptor_blowup()
-{
-    self.deadflag    = DEAD_DEAD;
-    self.vehicle_exit(VHEF_NORMAL);
-    RadiusDamage (self, self.enemy, 250, 15, 250, world, 250, DEATH_VH_RAPT_DEATH, world);
-
-    self.alpha          = -1;
-    self.movetype       = MOVETYPE_NONE;
-    self.effects        = EF_NODRAW;
-    self.colormod       = '0 0 0';
-    self.avelocity      = '0 0 0';
-    self.velocity       = '0 0 0';
-
-    setorigin(self, self.pos1);
-    self.touch = func_null;
-    self.nextthink = 0;
-}
-
-void raptor_diethink()
-{
-       if(time >= self.wait)
-               self.think = raptor_blowup;
-
-    if(random() < 0.1)
-    {
-        sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
-        pointparticles(particleeffectnum("explosion_small"), randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
-    }
-    self.nextthink = time + 0.1;
-}
-
-void raptor_die()
-{
-    self.health       = 0;
-    self.event_damage = func_null;
-    self.solid        = SOLID_CORPSE;
-    self.takedamage   = DAMAGE_NO;
-    self.deadflag     = DEAD_DYING;
-    self.movetype     = MOVETYPE_BOUNCE;
-    self.think        = raptor_diethink;
-    self.nextthink    = time;
-    self.wait            = time + 5 + (random() * 5);
-
-    pointparticles(particleeffectnum("explosion_medium"), findbetterlocation (self.origin, 16), '0 0 0', 1);
-
-    self.velocity_z += 600;
-
-    self.avelocity = '0 0.5 1' * (random() * 400);
-    self.avelocity -= '0 0.5 1' * (random() * 400);
-
-    self.colormod = '-0.5 -0.5 -0.5';
-       self.touch     = raptor_blowup;
-}
-
-void raptor_impact()
-{
-    if(autocvar_g_vehicle_raptor_bouncepain_x)
-        vehilces_impact(autocvar_g_vehicle_raptor_bouncepain_x, autocvar_g_vehicle_raptor_bouncepain_y, autocvar_g_vehicle_raptor_bouncepain_z);
-}
-
-// If we dont do this ever now and then, the raptors rotors
-// stop working, presumably due to angle overflow. cute.
-void raptor_rotor_anglefix()
-{
-    self.gun1.angles_y = anglemods(self.gun1.angles_y);
-    self.gun2.angles_y = anglemods(self.gun2.angles_y);
-    self.nextthink = time + 15;
-}
-
-float raptor_impulse(float _imp)
-{
-    switch(_imp)
-    {
-        case 10:
-        case 15:
-        case 18:
-            self.vehicle.vehicle_weapon2mode += 1;
-            if(self.vehicle.vehicle_weapon2mode > RSM_LAST)
-                self.vehicle.vehicle_weapon2mode = RSM_FIRST;
-
-            CSQCVehicleSetup(self, 0);
-            return TRUE;
-        case 12:
-        case 16:
-        case 19:
-            self.vehicle.vehicle_weapon2mode -= 1;
-            if(self.vehicle.vehicle_weapon2mode < RSM_FIRST)
-                self.vehicle.vehicle_weapon2mode = RSM_LAST;
-
-            CSQCVehicleSetup(self, 0);
-            return TRUE;
-
-        /*
-        case 17: // toss gun, could be used to exit?
-            break;
-        case 20: // Manual minigun reload?
-            break;
-        */
-    }
-    return FALSE;
-}
-
-void raptor_spawn(float _f)
-{
-    if(!self.gun1)
-    {
-        entity spinner;
-        vector ofs;
-
-        //FIXME: Camera is in a bad place in HUD model.
-        //setorigin(self.vehicle_viewport, '25 0 5');
-
-        self.vehicles_impusle   = raptor_impulse;
-
-        self.frame = 0;
-
-        self.bomb1 = spawn();
-        self.bomb2 = spawn();
-        self.gun1  = spawn();
-        self.gun2  = spawn();
-
-        setmodel(self.bomb1,"models/vehicles/clusterbomb_folded.md3");
-        setmodel(self.bomb2,"models/vehicles/clusterbomb_folded.md3");
-        setmodel(self.gun1, "models/vehicles/raptor_gun.dpm");
-        setmodel(self.gun2, "models/vehicles/raptor_gun.dpm");
-        setmodel(self.tur_head, "models/vehicles/raptor_body.dpm");
-
-        setattachment(self.bomb1, self, "bombmount_left");
-        setattachment(self.bomb2, self, "bombmount_right");
-        setattachment(self.tur_head, self,"root");
-
-        // FIXMODEL Guns mounts to angled bones
-        self.bomb1.angles = self.angles;
-        self.angles = '0 0 0';
-        // This messes up gun-aim, so work arround it.
-        //setattachment(self.gun1, self, "gunmount_left");
-        ofs = gettaginfo(self, gettagindex(self, "gunmount_left"));
-        ofs -= self.origin;
-        setattachment(self.gun1, self, "");
-        setorigin(self.gun1, ofs);
-
-        //setattachment(self.gun2, self, "gunmount_right");
-        ofs = gettaginfo(self, gettagindex(self, "gunmount_right"));
-        ofs -= self.origin;
-        setattachment(self.gun2, self, "");
-        setorigin(self.gun2, ofs);
-
-        self.angles = self.bomb1.angles;
-        self.bomb1.angles = '0 0 0';
-
-        spinner = spawn();
-        spinner.owner = self;
-        setmodel(spinner,"models/vehicles/spinner.dpm");
-        setattachment(spinner, self, "engine_left");
-        spinner.movetype = MOVETYPE_NOCLIP;
-        spinner.avelocity = '0 90 0';
-        self.bomb1.gun1 = spinner;
-
-        spinner = spawn();
-        spinner.owner = self;
-        setmodel(spinner,"models/vehicles/spinner.dpm");
-        setattachment(spinner, self, "engine_right");
-        spinner.movetype = MOVETYPE_NOCLIP;
-        spinner.avelocity = '0 -90 0';
-        self.bomb1.gun2 = spinner;
-
-        // Sigh.
-        self.bomb1.think = raptor_rotor_anglefix;
-        self.bomb1.nextthink = time;
-
-        self.mass               = 1 ;
-    }
-
-
-    self.frame          = 0;
-    self.vehicle_health = autocvar_g_vehicle_raptor_health;
-    self.vehicle_shield = autocvar_g_vehicle_raptor_shield;
-    self.movetype       = MOVETYPE_TOSS;
-    self.solid          = SOLID_SLIDEBOX;
-    self.vehicle_energy = 1;
-
-    self.bomb1.gun1.avelocity_y = 90;
-    self.bomb1.gun2.avelocity_y = -90;
-
-    setsize(self, RAPTOR_MIN, RAPTOR_MAX );
-    self.delay = time;
-
-    self.bouncefactor = autocvar_g_vehicle_raptor_bouncefactor;
-    self.bouncestop = autocvar_g_vehicle_raptor_bouncestop;
-    self.vehicle_impact = raptor_impact;
-    self.damageforcescale = 0.25;
-}
-
-void spawnfunc_vehicle_raptor()
-{
-    if(!autocvar_g_vehicle_raptor)
-    {
-        remove(self);
-        return;
-    }
-
-    self.vehicle_flags |= VHF_DMGSHAKE;
-    self.vehicle_flags |= VHF_DMGROLL;
-
-    if(autocvar_g_vehicle_raptor_shield)
-        self.vehicle_flags |= VHF_HASSHIELD;
-
-    if(autocvar_g_vehicle_raptor_shield_regen)
-        self.vehicle_flags |= VHF_SHIELDREGEN;
-
-    if(autocvar_g_vehicle_raptor_health_regen)
-        self.vehicle_flags |= VHF_HEALTHREGEN;
-
-    if(autocvar_g_vehicle_raptor_energy_regen)
-        self.vehicle_flags |= VHF_ENERGYREGEN;
-
-    precache_model ("models/vehicles/raptor.dpm");
-    precache_model ("models/vehicles/raptor_gun.dpm");
-    precache_model ("models/vehicles/spinner.dpm");
-    precache_model ("models/vehicles/raptor_cockpit.dpm");
-    //precache_model ("models/vehicles/clusterbomb.md3");
-    precache_model ("models/vehicles/clusterbomb_folded.md3");
-    precache_model ("models/vehicles/raptor_body.dpm");
-
-    precache_sound ("vehicles/raptor_fly.wav");
-    precache_sound ("vehicles/raptor_speed.wav");
-    precache_sound ("vehicles/missile_alarm.wav");
-
-    if(!vehicle_initialize(
-             "Raptor",
-             "models/vehicles/raptor.dpm",
-             "",
-             "models/vehicles/raptor_cockpit.dpm",
-             "", "tag_hud", "tag_camera",
-             HUD_RAPTOR,
-             RAPTOR_MIN, RAPTOR_MAX,
-             FALSE,
-             raptor_spawn, autocvar_g_vehicle_raptor_respawntime,
-             raptor_frame,
-             raptor_enter, raptor_exit,
-             raptor_die,   raptor_think,
-             FALSE,
-             autocvar_g_vehicle_raptor_health,
-             autocvar_g_vehicle_raptor_shield))
-    {
-        remove(self);
-        return;
-    }
-
-
-}
-#endif // SVQC
diff --git a/qcsrc/server/vehicles/spiderbot.qc b/qcsrc/server/vehicles/spiderbot.qc
deleted file mode 100644 (file)
index bdbcb82..0000000
+++ /dev/null
@@ -1,879 +0,0 @@
-const vector SPIDERBOT_MIN = '-75 -75 10';
-const vector SPIDERBOT_MAX  = '75 75 125';
-
-#ifdef SVQC
-float autocvar_g_vehicle_spiderbot;
-
-float autocvar_g_vehicle_spiderbot_respawntime;
-
-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_turnspeed_strafe;
-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_tiltlimit;
-
-float autocvar_g_vehicle_spiderbot_head_pitchlimit_down;
-float autocvar_g_vehicle_spiderbot_head_pitchlimit_up;
-float autocvar_g_vehicle_spiderbot_head_turnlimit;
-float autocvar_g_vehicle_spiderbot_head_turnspeed;
-
-//float autocvar_g_vehicle_spiderbot_energy;
-//float autocvar_g_vehicle_spiderbot_energy_regen;
-//float autocvar_g_vehicle_spiderbot_energy_regen_pause;
-
-float autocvar_g_vehicle_spiderbot_health;
-float autocvar_g_vehicle_spiderbot_health_regen;
-float autocvar_g_vehicle_spiderbot_health_regen_pause;
-
-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_damage;
-float autocvar_g_vehicle_spiderbot_minigun_refire;
-float autocvar_g_vehicle_spiderbot_minigun_spread;
-float autocvar_g_vehicle_spiderbot_minigun_ammo_cost;
-float autocvar_g_vehicle_spiderbot_minigun_ammo_max;
-float autocvar_g_vehicle_spiderbot_minigun_ammo_regen;
-float autocvar_g_vehicle_spiderbot_minigun_ammo_regen_pause;
-float autocvar_g_vehicle_spiderbot_minigun_force;
-float autocvar_g_vehicle_spiderbot_minigun_speed;
-float autocvar_g_vehicle_spiderbot_minigun_bulletconstant;
-
-float autocvar_g_vehicle_spiderbot_rocket_damage;
-float autocvar_g_vehicle_spiderbot_rocket_force;
-float autocvar_g_vehicle_spiderbot_rocket_radius;
-float autocvar_g_vehicle_spiderbot_rocket_speed;
-float autocvar_g_vehicle_spiderbot_rocket_spread;
-float autocvar_g_vehicle_spiderbot_rocket_refire;
-float autocvar_g_vehicle_spiderbot_rocket_refire2;
-float autocvar_g_vehicle_spiderbot_rocket_reload;
-float autocvar_g_vehicle_spiderbot_rocket_health;
-float autocvar_g_vehicle_spiderbot_rocket_noise;
-float autocvar_g_vehicle_spiderbot_rocket_turnrate;
-float autocvar_g_vehicle_spiderbot_rocket_lifetime;
-
-vector autocvar_g_vehicle_spiderbot_bouncepain;
-
-
-void spiderbot_exit(float eject);
-void spiderbot_enter();
-void spiderbot_spawn(float);
-#define SBRM_FIRST 0
-#define SBRM_VOLLY 0
-#define SBRM_GUIDE 1
-#define SBRM_ARTILLERY 2
-#define SBRM_LAST 2
-
-void spiderbot_rocket_artillery()
-{
-    self.nextthink  = time;
-    UpdateCSQCProjectile(self);
-}
-
-void spiderbot_rocket_unguided()
-{
-    vector newdir, olddir;
-
-    self.nextthink  = time;
-
-    olddir = normalize(self.velocity);
-    newdir = normalize(self.pos1 - self.origin) + randomvec() * autocvar_g_vehicle_spiderbot_rocket_noise;
-    self.velocity = normalize(olddir + newdir * autocvar_g_vehicle_spiderbot_rocket_turnrate) * autocvar_g_vehicle_spiderbot_rocket_speed;
-
-    UpdateCSQCProjectile(self);
-
-    if (self.owner.deadflag != DEAD_NO || self.cnt < time || vlen(self.pos1 - self.origin) < 16)
-        self.use();
-}
-
-void spiderbot_rocket_guided()
-{
-    vector newdir, olddir;
-
-    self.nextthink  = time;
-
-    if (!self.realowner.vehicle)
-        self.think = spiderbot_rocket_unguided;
-
-    crosshair_trace(self.realowner);
-    olddir = normalize(self.velocity);
-    newdir = normalize(trace_endpos - self.origin) + randomvec() * autocvar_g_vehicle_spiderbot_rocket_noise;
-    self.velocity = normalize(olddir + newdir * autocvar_g_vehicle_spiderbot_rocket_turnrate) * autocvar_g_vehicle_spiderbot_rocket_speed;
-
-    UpdateCSQCProjectile(self);
-
-    if (self.owner.deadflag != DEAD_NO || self.cnt < time)
-        self.use();
-}
-
-void spiderbot_guide_release()
-{
-    entity rkt;
-    rkt = findchainentity(realowner, self.owner);
-    if (!rkt)
-        return;
-
-    crosshair_trace(self.owner);
-    while(rkt)
-    {
-        if(rkt.think == spiderbot_rocket_guided)
-        {
-            rkt.pos1 = trace_endpos;
-            rkt.think = spiderbot_rocket_unguided;
-        }
-        rkt = rkt.chain;
-    }
-}
-
-float spiberbot_calcartillery_flighttime;
-vector spiberbot_calcartillery(vector org, vector tgt, float ht)
-{
-       float grav, sdist, zdist, vs, vz, jumpheight;
-       vector sdir;
-
-       grav  = autocvar_sv_gravity;
-       zdist = tgt_z - org_z;
-       sdist = vlen(tgt - org - zdist * '0 0 1');
-       sdir  = normalize(tgt - org - zdist * '0 0 1');
-
-       // how high do we need to go?
-       jumpheight = fabs(ht);
-       if(zdist > 0)
-               jumpheight = jumpheight + zdist;
-
-       // push so high...
-       vz = sqrt(2 * grav * jumpheight); // NOTE: sqrt(positive)!
-
-       // we start with downwards velocity only if it's a downjump and the jump apex should be outside the jump!
-       if(ht < 0)
-               if(zdist < 0)
-                       vz = -vz;
-
-       vector solution;
-       solution = solve_quadratic(0.5 * grav, -vz, zdist); // equation "z(ti) = zdist"
-       // ALWAYS solvable because jumpheight >= zdist
-       if(!solution_z)
-               solution_y = solution_x; // just in case it is not solvable due to roundoff errors, assume two equal solutions at their center (this is mainly for the usual case with ht == 0)
-       if(zdist == 0)
-               solution_x = solution_y; // solution_x is 0 in this case, so don't use it, but rather use solution_y (which will be sqrt(0.5 * jumpheight / grav), actually)
-
-       if(zdist < 0)
-       {
-               // down-jump
-               if(ht < 0)
-               {
-                       // almost straight line type
-                       // jump apex is before the jump
-                       // we must take the larger one
-                       spiberbot_calcartillery_flighttime = solution_y;
-               }
-               else
-               {
-                       // regular jump
-                       // jump apex is during the jump
-                       // we must take the larger one too
-                       spiberbot_calcartillery_flighttime = solution_y;
-               }
-       }
-       else
-       {
-               // up-jump
-               if(ht < 0)
-               {
-                       // almost straight line type
-                       // jump apex is after the jump
-                       // we must take the smaller one
-                       spiberbot_calcartillery_flighttime = solution_x;
-               }
-               else
-               {
-                       // regular jump
-                       // jump apex is during the jump
-                       // we must take the larger one
-                       spiberbot_calcartillery_flighttime = solution_y;
-               }
-       }
-       vs = sdist / spiberbot_calcartillery_flighttime;
-
-       // finally calculate the velocity
-       return sdir * vs + '0 0 1' * vz;
-}
-
-void spiderbot_rocket_do()
-{
-
-    vector v;
-    entity rocket = world;
-
-    if (self.wait != -10)
-    {
-        if (self.owner.BUTTON_ATCK2 && self.vehicle_weapon2mode == SBRM_GUIDE)
-        {
-            if (self.wait == 1)
-            if (self.tur_head.frame == 9 || self.tur_head.frame == 1)
-            {
-                if(self.gun2.cnt < time && self.tur_head.frame == 9)
-                    self.tur_head.frame = 1;
-
-                return;
-            }
-            self.wait = 1;
-        }
-        else
-        {
-            if(self.wait)
-                spiderbot_guide_release();
-
-            self.wait = 0;
-        }
-    }
-
-    if(self.gun2.cnt > time)
-        return;
-
-    if (self.tur_head.frame >= 9)
-    {
-        self.tur_head.frame = 1;
-        self.wait = 0;
-    }
-
-    if (self.wait != -10)
-        if (!self.owner.BUTTON_ATCK2)
-            return;
-
-
-    v = gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire"));
-
-    switch(self.vehicle_weapon2mode)
-    {
-        case SBRM_VOLLY:
-            rocket = vehicles_projectile("spiderbot_rocket_launch", "weapons/rocket_fire.wav",
-                                   v, normalize(randomvec() * autocvar_g_vehicle_spiderbot_rocket_spread + v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed,
-                                   autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1,
-                                   DEATH_VH_SPID_ROCKET, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health, FALSE, TRUE, self.owner);
-            crosshair_trace(self.owner);
-            float _dist = (random() * autocvar_g_vehicle_spiderbot_rocket_radius) + vlen(v - trace_endpos);
-            _dist -= (random() * autocvar_g_vehicle_spiderbot_rocket_radius) ;
-            rocket.nextthink  = time + (_dist / autocvar_g_vehicle_spiderbot_rocket_speed);
-            rocket.think     = vehicles_projectile_explode;
-
-            if(self.owner.BUTTON_ATCK2 && self.tur_head.frame == 1)
-                self.wait = -10;
-            break;
-        case SBRM_GUIDE:
-            rocket = vehicles_projectile("spiderbot_rocket_launch", "weapons/rocket_fire.wav",
-                                   v, normalize(v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed,
-                                   autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1,
-                                   DEATH_VH_SPID_ROCKET, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health, FALSE, FALSE, self.owner);
-            crosshair_trace(self.owner);
-            rocket.pos1       = trace_endpos;
-            rocket.nextthink  = time;
-            rocket.think      = spiderbot_rocket_guided;
-
-
-        break;
-        case SBRM_ARTILLERY:
-            rocket = vehicles_projectile("spiderbot_rocket_launch", "weapons/rocket_fire.wav",
-                                   v, normalize(v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed,
-                                   autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1,
-                                   DEATH_VH_SPID_ROCKET, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health, FALSE, TRUE, self.owner);
-
-            crosshair_trace(self.owner);
-
-            rocket.pos1       = trace_endpos + randomvec() * (0.75 * autocvar_g_vehicle_spiderbot_rocket_radius);
-            rocket.pos1_z       = trace_endpos_z;
-
-            traceline(v, v + '0 0 1' * MAX_SHOT_DISTANCE, MOVE_WORLDONLY, self);
-            float h1 = 0.75 * vlen(v - trace_endpos);
-
-            //v = trace_endpos;
-            traceline(v , rocket.pos1 + '0 0 1' * MAX_SHOT_DISTANCE, MOVE_WORLDONLY, self);
-            float h2 = 0.75 * vlen(rocket.pos1 - v);
-
-            rocket.velocity  = spiberbot_calcartillery(v, rocket.pos1, ((h1 < h2) ? h1 : h2));
-            rocket.movetype  = MOVETYPE_TOSS;
-            rocket.gravity   = 1;
-            //rocket.think     = spiderbot_rocket_artillery;
-        break;
-    }
-    rocket.classname  = "spiderbot_rocket";
-
-    rocket.cnt = time + autocvar_g_vehicle_spiderbot_rocket_lifetime;
-
-    self.tur_head.frame += 1;
-    if (self.tur_head.frame == 9)
-        self.attack_finished_single = autocvar_g_vehicle_spiderbot_rocket_reload;
-    else
-        self.attack_finished_single = ((self.vehicle_weapon2mode ==  SBRM_VOLLY) ? autocvar_g_vehicle_spiderbot_rocket_refire2 : autocvar_g_vehicle_spiderbot_rocket_refire);
-
-    self.gun2.cnt = time + self.attack_finished_single;
-}
-
-float spiderbot_aiframe()
-{
-    return FALSE;
-}
-
-float spiderbot_frame()
-{
-    vector ad, vf;
-    entity player, spider;
-    float ftmp;
-
-       if(intermission_running)
-               return 1;
-
-    player = self;
-    spider = self.vehicle;
-    self   = spider;
-
-    vehicles_painframe();
-
-    player.BUTTON_ZOOM      = 0;
-    player.BUTTON_CROUCH    = 0;
-    player.switchweapon     = 0;
-
-
-#if 1 // 0 to enable per-gun impact aux crosshairs
-    // Avarage gun impact point's -> aux cross
-    ad = gettaginfo(spider.tur_head, gettagindex(spider.tur_head, "tag_hardpoint01"));
-    vf = v_forward;
-    ad += gettaginfo(spider.tur_head, gettagindex(spider.tur_head, "tag_hardpoint02"));
-    vf += v_forward;
-    ad = ad * 0.5;
-    v_forward = vf * 0.5;
-    traceline(ad, ad + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, spider);
-    UpdateAuxiliaryXhair(player, trace_endpos, ('1 0 0' * player.vehicle_reload1) + ('0 1 0' * (1 - player.vehicle_reload1)), 0);
-#else
-    ad = gettaginfo(spider.gun1, gettagindex(spider.gun1, "barrels"));
-    traceline(ad, ad + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, spider);
-    UpdateAuxiliaryXhair(player, trace_endpos, ('1 0 0' * player.vehicle_reload1) + ('0 1 0' * (1 - player.vehicle_reload1)), 0);
-    vf = ad;
-    ad = gettaginfo(spider.gun2, gettagindex(spider.gun2, "barrels"));
-    traceline(ad, ad + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, spider);
-    UpdateAuxiliaryXhair(player, trace_endpos, ('1 0 0' * player.vehicle_reload1) + ('0 1 0' * (1 - player.vehicle_reload1)), 1);
-    ad = 0.5 * (ad + vf);
-#endif
-
-    crosshair_trace(player);
-    ad = vectoangles(normalize(trace_endpos - ad));
-    ad = AnglesTransform_ToAngles(AnglesTransform_LeftDivide(AnglesTransform_FromAngles(spider.angles), AnglesTransform_FromAngles(ad))) - spider.tur_head.angles;
-    ad = AnglesTransform_Normalize(ad, TRUE);
-    //UpdateAuxiliaryXhair(player, trace_endpos, ('1 0 0' * player.vehicle_reload2) + ('0 1 0' * (1 - player.vehicle_reload2)), 2);
-
-    // Rotate head
-    ftmp = autocvar_g_vehicle_spiderbot_head_turnspeed * sys_frametime;
-    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_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);
-
-
-    //fixedmakevectors(spider.angles);
-    makevectors(spider.angles + '-2 0 0' * spider.angles_x);
-
-    movelib_groundalign4point(autocvar_g_vehicle_spiderbot_springlength, autocvar_g_vehicle_spiderbot_springup, autocvar_g_vehicle_spiderbot_springblend, autocvar_g_vehicle_spiderbot_tiltlimit);
-
-    if(spider.flags & FL_ONGROUND)
-    {
-        if(spider.frame == 4 && self.tur_head.wait != 0)
-        {
-            sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_land.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
-            spider.frame = 5;
-        }
-
-        if(player.BUTTON_JUMP && self.tur_head.wait < time)
-        {
-            sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_jump.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
-            //dprint("spiderbot_jump:", ftos(soundlength("vehicles/spiderbot_jump.wav")), "\n");
-            self.delay = 0;
-
-            self.tur_head.wait = time + 2;
-            player.BUTTON_JUMP = 0;
-            spider.velocity   = v_forward * 700 + v_up * 600;
-            spider.frame = 4;
-        }
-        else
-        {
-            if(vlen(player.movement) == 0)
-            {
-                if(self.sound_nexttime < time || self.delay != 3)
-                {
-                    self.delay = 3;
-                    self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_idle.wav");
-                    //dprint("spiderbot_idle:", ftos(soundlength("vehicles/spiderbot_idle.wav")), "\n");
-                    sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_idle.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
-                }
-                movelib_beak_simple(autocvar_g_vehicle_spiderbot_speed_stop);
-                spider.frame = 5;
-            }
-            else
-            {
-                // Turn Body
-                if(player.movement_x == 0 && player.movement_y != 0)
-                    ftmp = autocvar_g_vehicle_spiderbot_turnspeed_strafe * sys_frametime;
-                else
-                    ftmp = autocvar_g_vehicle_spiderbot_turnspeed * sys_frametime;
-
-                ftmp = bound(-ftmp, spider.tur_head.angles_y, ftmp);
-                spider.angles_y = anglemods(spider.angles_y + ftmp);
-                spider.tur_head.angles_y -= ftmp;
-
-                if(player.movement_x != 0)
-                {
-                    if(player.movement_x > 0)
-                    {
-                        player.movement_x = 1;
-                        spider.frame = 0;
-                    }
-                    else if(player.movement_x < 0)
-                    {
-                        player.movement_x = -1;
-                        spider.frame = 1;
-                    }
-                    player.movement_y = 0;
-                    movelib_move_simple(normalize(v_forward * player.movement_x),autocvar_g_vehicle_spiderbot_speed_walk,autocvar_g_vehicle_spiderbot_movement_inertia);
-
-                    if(self.sound_nexttime < time || self.delay != 1)
-                    {
-                        self.delay = 1;
-                        self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_walk.wav");
-                        sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_walk.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
-                        //dprint("spiderbot_walk:", ftos(soundlength("vehicles/spiderbot_walk.wav")), "\n");
-                    }
-                }
-                else if(player.movement_y != 0)
-                {
-                    if(player.movement_y < 0)
-                    {
-                        player.movement_y = -1;
-                        spider.frame = 2;
-                    }
-                    else if(player.movement_y > 0)
-                    {
-                        player.movement_y = 1;
-                        spider.frame = 3;
-                    }
-                    movelib_move_simple(normalize(v_right * player.movement_y),autocvar_g_vehicle_spiderbot_speed_strafe,autocvar_g_vehicle_spiderbot_movement_inertia);
-                    if(self.sound_nexttime < time || self.delay != 2)
-                    {
-                        self.delay = 2;
-                        self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_strafe.wav");
-                        sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_strafe.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
-                        //dprint("spiderbot_strafe:", ftos(soundlength("vehicles/spiderbot_strafe.wav")), "\n");
-                    }
-                }
-            }
-        }
-    }
-
-    self.angles_x = bound(-autocvar_g_vehicle_spiderbot_tiltlimit, self.angles_x, autocvar_g_vehicle_spiderbot_tiltlimit);
-    self.angles_z = bound(-autocvar_g_vehicle_spiderbot_tiltlimit, self.angles_z, autocvar_g_vehicle_spiderbot_tiltlimit);
-
-    if(player.BUTTON_ATCK)
-    {
-        spider.cnt = time;
-        if(spider.vehicle_ammo1 >= autocvar_g_vehicle_spiderbot_minigun_ammo_cost && spider.tur_head.attack_finished_single <= time)
-        {
-            entity gun;
-            vector v;
-            spider.misc_bulletcounter += 1;
-
-            self = player;
-
-            mod(spider.misc_bulletcounter, 2) ? gun = spider.gun1 : gun = spider.gun2;
-            v = gettaginfo(gun, gettagindex(gun, "barrels"));
-            v_forward = normalize(v_forward);
-            v += v_forward * 50;
-
-//void fireBallisticBullet(vector start, vector dir, float spread, float pSpeed, float lifetime, float damage, float force, float dtype, float tracereffects, float bulletconstant)
-
-            fireBallisticBullet(v, v_forward, autocvar_g_vehicle_spiderbot_minigun_spread, autocvar_g_vehicle_spiderbot_minigun_speed,
-                                5, autocvar_g_vehicle_spiderbot_minigun_damage, autocvar_g_vehicle_spiderbot_minigun_force, DEATH_VH_SPID_MINIGUN, 0, autocvar_g_vehicle_spiderbot_minigun_bulletconstant);
-
-            endFireBallisticBullet();
-
-//            fireBullet (v, v_forward, autocvar_g_vehicle_spiderbot_minigun_spread, autocvar_g_vehicle_spiderbot_minigun_damage,
-//                autocvar_g_vehicle_spiderbot_minigun_spread, DEATH_VH_SPID_MINIGUN, 0);
-
-            sound (gun, CH_WEAPON_A, "weapons/uzi_fire.wav", VOL_BASE, ATTEN_NORM);
-            //trailparticles(self, particleeffectnum("spiderbot_minigun_trail"), v, trace_endpos);
-            pointparticles(particleeffectnum("spiderbot_minigun_muzzleflash"), v, v_forward * 2500, 1);
-
-            self = spider;
-
-            spider.vehicle_ammo1 -= autocvar_g_vehicle_spiderbot_minigun_ammo_cost;
-            spider.tur_head.attack_finished_single = time + autocvar_g_vehicle_spiderbot_minigun_refire;
-            player.vehicle_ammo1 = (spider.vehicle_ammo1 / autocvar_g_vehicle_spiderbot_minigun_ammo_max) * 100;
-            spider.gun1.angles_z += 45;
-            spider.gun2.angles_z -= 45;
-            if(spider.gun1.angles_z >= 360)
-            {
-                spider.gun1.angles_z = 0;
-                spider.gun2.angles_z = 0;
-            }
-        }
-    }
-    else
-        vehicles_regen(spider.cnt, vehicle_ammo1, autocvar_g_vehicle_spiderbot_minigun_ammo_max,
-                                           autocvar_g_vehicle_spiderbot_minigun_ammo_regen_pause,
-                                           autocvar_g_vehicle_spiderbot_minigun_ammo_regen, frametime, FALSE);
-
-
-    spiderbot_rocket_do();
-
-    if(self.vehicle_flags  & VHF_SHIELDREGEN)
-        vehicles_regen(spider.dmg_time, vehicle_shield, autocvar_g_vehicle_spiderbot_shield, autocvar_g_vehicle_spiderbot_shield_regen_pause, autocvar_g_vehicle_spiderbot_shield_regen, frametime, TRUE);
-
-    if(self.vehicle_flags  & VHF_HEALTHREGEN)
-        vehicles_regen(spider.dmg_time, vehicle_health, autocvar_g_vehicle_spiderbot_health, autocvar_g_vehicle_spiderbot_health_regen_pause, autocvar_g_vehicle_spiderbot_health_regen, frametime, FALSE);
-
-    player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
-    player.vehicle_ammo2 = spider.tur_head.frame;
-
-    if(spider.gun2.cnt <= time)
-        player.vehicle_reload2 = 100;
-    else
-        player.vehicle_reload2 = 100 - ((spider.gun2.cnt - time) / spider.attack_finished_single) * 100;
-
-    setorigin(player, spider.origin + '0 0 1' * SPIDERBOT_MAX_z);
-    player.velocity = spider.velocity;
-
-    VEHICLE_UPDATE_PLAYER(player, health, spiderbot);
-
-    if(self.vehicle_flags & VHF_HASSHIELD)
-        VEHICLE_UPDATE_PLAYER(player, shield, spiderbot);
-
-    self = player;
-    return 1;
-}
-void spiderbot_think()
-{
-    if(self.flags & FL_ONGROUND)
-        movelib_beak_simple(autocvar_g_vehicle_spiderbot_speed_stop);
-
-    self.nextthink = time;
-}
-
-void spiderbot_enter()
-{
-    self.vehicle_weapon2mode = SBRM_GUIDE;
-    self.movetype   = MOVETYPE_WALK;
-    CSQCVehicleSetup(self.owner, 0);
-    self.owner.vehicle_health = (self.vehicle_health / autocvar_g_vehicle_spiderbot_health) * 100;
-    self.owner.vehicle_shield = (self.vehicle_shield / autocvar_g_vehicle_spiderbot_shield) * 100;
-
-    if(self.owner.flagcarried)
-    {
-        setattachment(self.owner.flagcarried, self.tur_head, "");
-        setorigin(self.owner.flagcarried, '-20 0 120');
-    }
-}
-
-void spiderbot_exit(float eject)
-{
-    entity e;
-    vector spot;
-
-    e = findchain(classname,"spiderbot_rocket");
-    while(e)
-    {
-        if(e.owner == self.owner)
-        {
-            e.realowner = self.owner;
-            e.owner = world;
-        }
-        e = e.chain;
-    }
-
-    //self.velocity   = '0 0 0';
-    self.think      = spiderbot_think;
-    self.nextthink  = time;
-    self.frame      = 5;
-    self.movetype   = MOVETYPE_WALK;
-
-    if (!self.owner)
-        return;
-
-       makevectors(self.angles);
-       if(eject)
-       {
-           spot = self.origin + v_forward * 100 + '0 0 64';
-           spot = vehicles_findgoodexit(spot);
-           setorigin(self.owner , spot);
-           self.owner.velocity = (v_up + v_forward * 0.25) * 750;
-           self.owner.oldvelocity = self.owner.velocity;
-       }
-       else
-       {
-               if(vlen(self.velocity) > autocvar_g_vehicle_spiderbot_speed_strafe)
-               {
-                       self.owner.velocity = normalize(self.velocity) * vlen(self.velocity);
-                       self.owner.velocity_z += 200;
-                       spot = self.origin + v_forward * 128 + '0 0 64';
-                       spot = vehicles_findgoodexit(spot);
-               }
-               else
-               {
-                       self.owner.velocity = self.velocity * 0.5;
-                       self.owner.velocity_z += 10;
-                       spot = self.origin + v_forward * 256 + '0 0 64';
-                       spot = vehicles_findgoodexit(spot);
-               }
-           self.owner.oldvelocity = self.owner.velocity;
-           setorigin(self.owner , spot);
-       }
-
-       antilag_clear(self.owner);
-    self.owner = world;
-}
-
-void spider_impact()
-{
-    if(autocvar_g_vehicle_spiderbot_bouncepain_x)
-        vehilces_impact(autocvar_g_vehicle_spiderbot_bouncepain_x, autocvar_g_vehicle_spiderbot_bouncepain_y, autocvar_g_vehicle_spiderbot_bouncepain_z);
-}
-
-void spiderbot_headfade()
-{
-       self.think = spiderbot_headfade;
-       self.nextthink = self.fade_time;
-       self.alpha = 1 - (time - self.fade_time) * self.fade_rate;
-
-    if(self.cnt < time || self.alpha < 0.1)
-    {
-        if(self.alpha > 0.1)
-        {
-            sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
-            pointparticles(particleeffectnum("explosion_big"), self.origin + '0 0 100', '0 0 0', 1);
-        }
-        remove(self);
-    }
-}
-
-void spiderbot_blowup()
-{
-    if(self.cnt > time)
-    {
-        if(random() < 0.1)
-        {
-            sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
-            pointparticles(particleeffectnum("explosion_small"), randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
-        }
-        self.nextthink = time + 0.1;
-        return;
-    }
-
-    entity h, g1, g2, b;
-    b = spawn();
-    h = spawn();
-    g1 = spawn();
-    g2 = spawn();
-
-    setmodel(b,  "models/vehicles/spiderbot.dpm");
-    setmodel(h,  "models/vehicles/spiderbot_top.dpm");
-    setmodel(g1, "models/vehicles/spiderbot_barrels.dpm");
-    setmodel(g2, "models/vehicles/spiderbot_barrels.dpm");
-
-    setorigin(b, self.origin);
-    b.frame         = 11;
-    b.angles        = self.angles;
-    setsize(b, self.mins, self.maxs);
-
-    setorigin(h, gettaginfo(self, gettagindex(self, "tag_head")));
-    h.movetype      = MOVETYPE_BOUNCE;
-    h.solid         = SOLID_BBOX;
-    h.velocity      = v_up * (500 + random() * 500) + randomvec() * 128;
-    h.modelflags    = MF_ROCKET;
-    h.effects       = EF_FLAME | EF_LOWPRECISION;
-    h.avelocity     = randomvec() * 360;
-
-    h.alpha         = 1;
-    h.cnt           = time + (3.5 * random());
-    h.fade_rate     = 1 / min(autocvar_g_vehicle_spiderbot_respawntime, 10);
-    h.fade_time     = time;
-    h.think         = spiderbot_headfade;
-    h.nextthink     = time;
-
-    setorigin(g1, gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_hardpoint01")));
-    g1.movetype     = MOVETYPE_TOSS;
-    g1.solid        = SOLID_CORPSE;
-    g1.velocity     = v_forward * 700 + (randomvec() * 32);
-    g1.avelocity    = randomvec() * 180;
-
-    setorigin(g2, gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_hardpoint02")));
-    g2.movetype     = MOVETYPE_TOSS;
-    g2.solid        = SOLID_CORPSE;
-    g2.velocity     = v_forward * 700 + (randomvec() * 32);
-    g2.avelocity    = randomvec() * 180;
-
-    h.colormod = b.colormod = g1.colormod = g2.colormod = '-2 -2 -2';
-
-    SUB_SetFade(b,  time + 5, min(autocvar_g_vehicle_spiderbot_respawntime, 1));
-    //SUB_SetFade(h,  time, min(autocvar_g_vehicle_spiderbot_respawntime, 10));
-    SUB_SetFade(g1, time, min(autocvar_g_vehicle_spiderbot_respawntime, 10));
-    SUB_SetFade(g2, time, min(autocvar_g_vehicle_spiderbot_respawntime, 10));
-
-    RadiusDamage (self, self.enemy, 250, 15, 250, world, 250, DEATH_VH_SPID_DEATH, world);
-
-    self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = -1;
-    self.movetype   = MOVETYPE_NONE;
-    self.deadflag   = DEAD_DEAD;
-    self.solid      = SOLID_NOT;
-    self.tur_head.effects  &=  ~EF_FLAME;
-    self.vehicle_hudmodel.viewmodelforclient = self;
-}
-
-void spiderbot_die()
-{
-    self.health             = 0;
-    self.event_damage       = func_null;
-    self.takedamage         = DAMAGE_NO;
-    self.touch              = func_null;
-    self.cnt                = 3.4 + time + random() * 2;
-    self.think              = spiderbot_blowup;
-    self.nextthink          = time;
-    self.deadflag           = DEAD_DYING;
-       self.frame              = 5;
-       self.tur_head.effects  |= EF_FLAME;
-       self.colormod           = self.tur_head.colormod = '-1 -1 -1';
-       self.frame              = 10;
-       self.movetype           = MOVETYPE_TOSS;
-}
-
-float spiderbot_impulse(float _imp)
-{
-    switch(_imp)
-    {
-        case 10:
-        case 15:
-        case 18:
-            self.vehicle.vehicle_weapon2mode += 1;
-            if(self.vehicle.vehicle_weapon2mode > SBRM_LAST)
-                self.vehicle.vehicle_weapon2mode = SBRM_FIRST;
-
-            //centerprint(self, strcat("Rocket mode is ", ftos(self.vehicle.vehicle_weapon2mode)));
-            CSQCVehicleSetup(self, 0);
-            return TRUE;
-        case 12:
-        case 16:
-        case 19:
-            self.vehicle.vehicle_weapon2mode -= 1;
-            if(self.vehicle.vehicle_weapon2mode < SBRM_FIRST)
-                self.vehicle.vehicle_weapon2mode = SBRM_LAST;
-
-            //centerprint(self, strcat("Rocket mode is ", ftos(self.vehicle.vehicle_weapon2mode)));
-            CSQCVehicleSetup(self, 0);
-            return TRUE;
-
-        /*
-        case 17: // toss gun, could be used to exit?
-            break;
-        case 20: // Manual minigun reload?
-            break;
-        */
-    }
-    return FALSE;
-}
-
-void spiderbot_spawn(float _f)
-{
-    if(!self.gun1)
-    {
-        self.vehicles_impusle   = spiderbot_impulse;
-        self.gun1               = spawn();
-        self.gun2               = spawn();
-        setmodel(self.gun1, "models/vehicles/spiderbot_barrels.dpm");
-        setmodel(self.gun2, "models/vehicles/spiderbot_barrels.dpm");
-        setattachment(self.gun1, self.tur_head, "tag_hardpoint01");
-        setattachment(self.gun2, self.tur_head, "tag_hardpoint02");
-        self.gravity            = 2;
-        self.mass               = 5000;
-    }
-
-    self.frame              = 5;
-    self.tur_head.frame     = 1;
-    self.think              = spiderbot_think;
-    self.nextthink          = time;
-    self.vehicle_health     = autocvar_g_vehicle_spiderbot_health;
-    self.vehicle_shield     = autocvar_g_vehicle_spiderbot_shield;
-    self.movetype           = MOVETYPE_WALK;
-    self.solid              = SOLID_SLIDEBOX;
-    self.alpha              = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = 1;
-    self.tur_head.angles    = '0 0 0';
-
-    setorigin(self, self.pos1 + '0 0 128');
-    self.angles = self.pos2;
-    self.vehicle_impact = spider_impact;
-    self.damageforcescale = 0.03;
-}
-
-void spawnfunc_vehicle_spiderbot()
-{
-    if(!autocvar_g_vehicle_spiderbot)
-    {
-        remove(self);
-        return;
-    }
-
-    self.vehicle_flags |= VHF_DMGSHAKE;
-    //self.vehicle_flags |= VHF_DMGROLL;
-    //self.vehicle_flags |= VHF_DMGHEADROLL;
-
-    precache_model ( "models/vhshield.md3");
-    precache_model ( "models/vehicles/spiderbot.dpm");
-    precache_model ( "models/vehicles/spiderbot_top.dpm");
-    precache_model ( "models/vehicles/spiderbot_barrels.dpm");
-    precache_model ( "models/vehicles/spiderbot_cockpit.dpm");
-    precache_model ( "models/uziflash.md3");
-
-    precache_sound ( "weapons/uzi_fire.wav" );
-    precache_sound ( "weapons/rocket_impact.wav");
-
-    precache_sound ( "vehicles/spiderbot_die.wav");
-    precache_sound ( "vehicles/spiderbot_idle.wav");
-    precache_sound ( "vehicles/spiderbot_jump.wav");
-    precache_sound ( "vehicles/spiderbot_strafe.wav");
-    precache_sound ( "vehicles/spiderbot_walk.wav");
-    precache_sound ( "vehicles/spiderbot_land.wav");
-
-    if(autocvar_g_vehicle_spiderbot_shield)
-        self.vehicle_flags |= VHF_HASSHIELD;
-
-    if(autocvar_g_vehicle_spiderbot_shield_regen)
-        self.vehicle_flags |= VHF_SHIELDREGEN;
-
-    if(autocvar_g_vehicle_spiderbot_health_regen)
-        self.vehicle_flags |= VHF_HEALTHREGEN;
-
-    if(!vehicle_initialize(
-             "Spiderbot",
-             "models/vehicles/spiderbot.dpm",
-             "models/vehicles/spiderbot_top.dpm",
-             "models/vehicles/spiderbot_cockpit.dpm",
-             "tag_head", "tag_hud", "",
-             HUD_SPIDERBOT,
-             SPIDERBOT_MIN, SPIDERBOT_MAX,
-             FALSE,
-             spiderbot_spawn, autocvar_g_vehicle_spiderbot_respawntime,
-             spiderbot_frame,
-             spiderbot_enter, spiderbot_exit,
-             spiderbot_die,   spiderbot_think,
-             FALSE,
-             autocvar_g_vehicle_spiderbot_health,
-             autocvar_g_vehicle_spiderbot_shield))
-    {
-        remove(self);
-        return;
-    }
-}
-#endif // SVQC
diff --git a/qcsrc/server/vehicles/vehicles.qc b/qcsrc/server/vehicles/vehicles.qc
deleted file mode 100644 (file)
index 1e5537a..0000000
+++ /dev/null
@@ -1,1416 +0,0 @@
-float autocvar_g_vehicles_crush_dmg;
-float autocvar_g_vehicles_crush_force;
-float autocvar_g_vehicles_delayspawn;
-float autocvar_g_vehicles_delayspawn_jitter;
-
-var float autocvar_g_vehicles_nex_damagerate = 0.5;
-var float autocvar_g_vehicles_uzi_damagerate = 0.5;
-var float autocvar_g_vehicles_rifle_damagerate = 0.75;
-var float autocvar_g_vehicles_minstanex_damagerate = 0.001;
-var float autocvar_g_vehicles_tag_damagerate = 5;
-
-float autocvar_g_vehicles;
-
-void vehicles_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force);
-void vehicles_return();
-void vehicles_enter();
-void vehicles_touch();
-void vehicles_reset_colors();
-void vehicles_clearrturn();
-void vehicles_setreturn();
-
-
-/** AuxiliaryXhair*
-    Send additional points of interest to be drawn, to vehicle owner
-**/
-const float MAX_AXH = 4;
-.entity AuxiliaryXhair[MAX_AXH];
-
-float SendAuxiliaryXhair(entity to, float sf)
-{
-
-       WriteByte(MSG_ENTITY, ENT_CLIENT_AUXILIARYXHAIR);
-
-       WriteByte(MSG_ENTITY, self.cnt);
-
-       WriteCoord(MSG_ENTITY, self.origin_x);
-       WriteCoord(MSG_ENTITY, self.origin_y);
-       WriteCoord(MSG_ENTITY, self.origin_z);
-
-    WriteByte(MSG_ENTITY, rint(self.colormod_x * 255));
-    WriteByte(MSG_ENTITY, rint(self.colormod_y * 255));
-    WriteByte(MSG_ENTITY, rint(self.colormod_z * 255));
-
-    return TRUE;
-}
-
-void UpdateAuxiliaryXhair(entity own, vector loc, vector clr, float axh_id)
-{
-    if (!IS_REAL_CLIENT(own))
-        return;
-
-    entity axh;
-
-    axh_id = bound(0, axh_id, MAX_AXH);
-    axh = own.(AuxiliaryXhair[axh_id]);
-
-    if(axh == world || wasfreed(axh))  // MADNESS? THIS IS QQQQCCCCCCCCC (wasfreed, why do you exsist?)
-    {
-        axh                     = spawn();
-        axh.cnt                 = axh_id;
-        axh.drawonlytoclient    = own;
-        axh.owner               = own;
-        Net_LinkEntity(axh, FALSE, 0, SendAuxiliaryXhair);
-    }
-
-    setorigin(axh, loc);
-    axh.colormod            = clr;
-    axh.SendFlags           = 0x01;
-    own.(AuxiliaryXhair[axh_id]) = axh;
-}
-
-/*
-// SVC_TEMPENTITY based, horrible with even 50 ping. hm.
-// WriteByte(MSG_ONE, SVC_TEMPENTITY) uses reliable messagess, never use for thinsg that need continous updates.
-void SendAuxiliaryXhair2(entity own, vector loc, vector clr, float axh_id)
-{
-       msgexntity = own;
-
-       WriteByte(MSG_ONE, SVC_TEMPENTITY);
-       WriteByte(MSG_ONE, TE_CSQC_AUXILIARYXHAIR);
-
-       WriteByte(MSG_ONE, axh_id);
-
-       WriteCoord(MSG_ONE, loc_x);
-       WriteCoord(MSG_ONE, loc_y);
-       WriteCoord(MSG_ONE, loc_z);
-
-    WriteByte(MSG_ONE, rint(clr_x * 255));
-    WriteByte(MSG_ONE, rint(clr_y * 255));
-    WriteByte(MSG_ONE, rint(clr_z * 255));
-
-}
-*/
-// End AuxiliaryXhair
-
-/**
-    Notifies the client that he enterd a vehicle, and sends
-    realavent data.
-
-    only sends vehicle_id atm (wich is a HUD_* constant, ex. HUD_SPIDERBOT)
-**/
-void CSQCVehicleSetup(entity own, float vehicle_id)
-{
-    if (!IS_REAL_CLIENT(own))
-        return;
-
-       msg_entity = own;
-
-       WriteByte(MSG_ONE, SVC_TEMPENTITY);
-       WriteByte(MSG_ONE, TE_CSQC_VEHICLESETUP);
-       if(vehicle_id != 0)
-           WriteByte(MSG_ONE, vehicle_id);
-       else
-        WriteByte(MSG_ONE, 1 + own.vehicle.vehicle_weapon2mode + HUD_VEHICLE_LAST);
-}
-
-/** vehicles_locktarget
-
-    Generic target locking.
-
-    Figure out if what target is "locked" (if any), for missile tracking as such.
-
-    after calling, "if(self.lock_target != world && self.lock_strength == 1)" mean
-    you have a locked in target.
-
-    Exspects a crosshair_trace() or equivalent to be
-    dont before calling.
-
-**/
-.entity lock_target;
-.float  lock_strength;
-.float  lock_time;
-.float  lock_soundtime;
-const float    DAMAGE_TARGETDRONE = 10;
-
-vector targetdrone_getnewspot()
-{
-
-       vector spot;
-       float i;
-       for(i = 0; i < 100; ++i)
-       {
-               spot = self.origin + randomvec() * 1024;
-               tracebox(spot, self.mins, self.maxs, spot, MOVE_NORMAL, self);
-               if(trace_fraction == 1.0 && trace_startsolid == 0 && trace_allsolid == 0)
-                       return spot;
-       }
-       return self.origin;
-}
-
-#if 0
-void targetdrone_think();
-void targetdrone_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force);
-void targetdrone_renwe()
-{
-       self.think = targetdrone_think;
-       self.nextthink = time + 0.1;
-       setorigin(self, targetdrone_getnewspot());
-       self.health = 200;
-       self.takedamage = DAMAGE_TARGETDRONE;
-       self.event_damage = targetdrone_damage;
-       self.solid = SOLID_BBOX;
-       setmodel(self, "models/runematch/rune.mdl");
-       self.effects = EF_LOWPRECISION;
-       self.scale = 10;
-       self.movetype = MOVETYPE_BOUNCEMISSILE;
-       setsize(self, '-100 -100 -100', '100 100 100');
-
-}
-void targetdrone_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
-{
-       self.health -= damage;
-       if(self.health <= 0)
-       {
-               pointparticles(particleeffectnum("explosion_medium"), self.origin, '0 0 0', 1);
-
-               if(!self.cnt)
-                       remove(self);
-               else
-               {
-                       self.think = targetdrone_renwe;
-                       self.nextthink = time + 1 + random() * 2;
-                       self.solid = SOLID_NOT;
-                       setmodel(self, "");
-               }
-       }
-}
-entity targetdrone_getfear()
-{
-       entity fear;
-       float i;
-
-       for(i = 64; i <= 1024; i += 64)
-       {
-               fear = findradius(self.origin, i);
-               while(fear)
-               {
-                       if(fear.bot_dodge)
-                               return fear;
-
-                       fear = fear.chain;
-               }
-       }
-
-       return world;
-}
-void targetdrone_think()
-{
-       self.nextthink = time + 0.1;
-
-       if(self.wp00)
-       if(self.wp00.deadflag != DEAD_NO)
-               self.wp00 = targetdrone_getfear();
-
-       if(!self.wp00)
-               self.wp00 = targetdrone_getfear();
-
-       vector newdir;
-
-       if(self.wp00)
-               newdir = steerlib_push(self.wp00.origin) + randomvec() * 0.75;
-       else
-               newdir = randomvec() * 0.75;
-
-       newdir = newdir * 0.5 + normalize(self.velocity) * 0.5;
-
-       if(self.wp00)
-               self.velocity = normalize(newdir) * (500 + (1024 / min(vlen(self.wp00.origin - self.origin), 1024)) * 700);
-       else
-               self.velocity = normalize(newdir) * 750;
-
-       tracebox(self.origin, self.mins, self.maxs, self.origin + self.velocity * 2, MOVE_NORMAL, self);
-       if(trace_fraction != 1.0)
-               self.velocity = self.velocity * -1;
-
-       //normalize((normalize(self.velocity) * 0.5 + newdir * 0.5)) * 750;
-}
-
-void targetdrone_spawn(vector _where, float _autorenew)
-{
-       entity drone = spawn();
-       setorigin(drone, _where);
-       drone.think = targetdrone_renwe;
-       drone.nextthink = time + 0.1;
-       drone.cnt = _autorenew;
-}
-#endif
-
-void vehicles_locktarget(float incr, float decr, float _lock_time)
-{
-    if(self.lock_target && self.lock_target.deadflag != DEAD_NO)
-    {
-        self.lock_target    = world;
-        self.lock_strength  = 0;
-        self.lock_time      = 0;
-    }
-
-    if(self.lock_time > time)
-    {
-        if(self.lock_target)
-        if(self.lock_soundtime < time)
-        {
-            self.lock_soundtime = time + 0.5;
-            play2(self.owner, "vehicles/locked.wav");
-        }
-
-        return;
-    }
-
-    if(trace_ent != world)
-    {
-        if(teamplay && trace_ent.team == self.team)
-            trace_ent = world;
-
-        if(trace_ent.deadflag != DEAD_NO)
-            trace_ent = world;
-
-        if(!trace_ent.vehicle_flags & VHF_ISVEHICLE ||
-                               trace_ent.turrcaps_flags & TFL_TURRCAPS_ISTURRET ||
-                               trace_ent.takedamage == DAMAGE_TARGETDRONE)
-            trace_ent = world;
-    }
-
-    if(self.lock_target == world && trace_ent != world)
-        self.lock_target = trace_ent;
-
-    if(self.lock_target && trace_ent == self.lock_target)
-    {
-        if(self.lock_strength != 1 && self.lock_strength + incr >= 1)
-        {
-            play2(self.owner, "vehicles/lock.wav");
-            self.lock_soundtime = time + 0.8;
-        }
-        else if (self.lock_strength != 1 && self.lock_soundtime < time)
-        {
-            play2(self.owner, "vehicles/locking.wav");
-            self.lock_soundtime = time + 0.3;
-        }
-
-    }
-
-    // Have a locking target
-    // Trace hit current target
-    if(trace_ent == self.lock_target && trace_ent != world)
-    {
-        self.lock_strength = min(self.lock_strength + incr, 1);
-        if(self.lock_strength == 1)
-            self.lock_time = time + _lock_time;
-    }
-    else
-    {
-        if(trace_ent)
-            self.lock_strength = max(self.lock_strength - decr * 2, 0);
-        else
-            self.lock_strength = max(self.lock_strength - decr, 0);
-
-        if(self.lock_strength == 0)
-            self.lock_target = world;
-    }
-}
-
-#define VEHICLE_UPDATE_PLAYER(ply,fld,vhname) \
-ply.vehicle_##fld = (self.vehicle_##fld / autocvar_g_vehicle_##vhname##_##fld) * 100
-
-#define vehicles_sweap_collision(orig,vel,dt,acm,mult) \
-traceline(orig, orig + vel * dt, MOVE_NORMAL, self); \
-if(trace_fraction != 1) \
-    acm += normalize(self.origin - trace_endpos) * (vlen(vel) * mult)
-
-// Hover movement support
-float  force_fromtag_power;
-float  force_fromtag_normpower;
-vector force_fromtag_origin;
-vector vehicles_force_fromtag_hover(string tag_name, float spring_length, float max_power)
-{
-    force_fromtag_origin = gettaginfo(self, gettagindex(self, tag_name));
-    v_forward  = normalize(v_forward) * -1;
-    traceline(force_fromtag_origin, force_fromtag_origin - (v_forward  * spring_length), MOVE_NORMAL, self);
-
-    force_fromtag_power = (1 - trace_fraction) * max_power;
-    force_fromtag_normpower = force_fromtag_power / max_power;
-
-    return v_forward  * force_fromtag_power;
-}
-
-// Experimental hovermode wich uses attraction/repulstion from surface insted of gravity/repulsion
-// Can possibly be use to move abt any surface (inclusing walls/celings)
-vector vehicles_force_fromtag_maglev(string tag_name, float spring_length, float max_power)
-{
-
-    force_fromtag_origin = gettaginfo(self, gettagindex(self, tag_name));
-    v_forward  = normalize(v_forward) * -1;
-    traceline(force_fromtag_origin, force_fromtag_origin - (v_forward  * spring_length), MOVE_NORMAL, self);
-
-    // TODO - this may NOT be compatible with wall/celing movement, unhardcode 0.25 (engine count multiplier)
-    if(trace_fraction == 1.0)
-    {
-        force_fromtag_normpower = -0.25;
-        return '0 0 -200';
-    }
-
-    force_fromtag_power = ((1 - trace_fraction) - trace_fraction) * max_power;
-    force_fromtag_normpower = force_fromtag_power / max_power;
-
-    return v_forward  * force_fromtag_power;
-}
-
-// Generic vehile projectile system
-void vehicles_projectile_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
-{
-    // Ignore damage from oterh projectiles from my owner (dont mess up volly's)
-    if(inflictor.owner == self.owner)
-        return;
-
-    self.health -= damage;
-    self.velocity += force;
-    if(self.health < 1)
-    {
-        self.takedamage = DAMAGE_NO;
-        self.event_damage = func_null;
-        self.think = self.use;
-        self.nextthink = time;
-    }
-}
-
-void vehicles_projectile_explode()
-{
-    if(self.owner && other != world)
-    {
-        if(other == self.owner.vehicle)
-            return;
-
-        if(other == self.owner.vehicle.tur_head)
-            return;
-    }
-
-       PROJECTILE_TOUCH;
-
-       self.event_damage = func_null;
-    RadiusDamage (self, self.realowner, self.shot_dmg, 0, self.shot_radius, self, self.shot_force, self.totalfrags, other);
-
-    remove (self);
-}
-
-entity vehicles_projectile(string _mzlfx, string _mzlsound,
-                           vector _org, vector _vel,
-                           float _dmg, float _radi, float _force,  float _size,
-                           float _deahtype, float _projtype, float _health,
-                           float _cull, float _clianim, entity _owner)
-{
-    entity proj;
-
-    proj = spawn();
-
-    PROJECTILE_MAKETRIGGER(proj);
-    setorigin(proj, _org);
-
-    proj.shot_dmg         = _dmg;
-    proj.shot_radius      = _radi;
-    proj.shot_force       = _force;
-    proj.totalfrags       = _deahtype;
-    proj.solid            = SOLID_BBOX;
-    proj.movetype         = MOVETYPE_FLYMISSILE;
-    proj.flags            = FL_PROJECTILE;
-    proj.bot_dodge        = TRUE;
-    proj.bot_dodgerating  = _dmg;
-    proj.velocity         = _vel;
-    proj.touch            = vehicles_projectile_explode;
-    proj.use              = vehicles_projectile_explode;
-    proj.owner            = self;
-    proj.realowner        = _owner;
-    proj.think            = SUB_Remove;
-    proj.nextthink        = time + 30;
-
-    if(_health)
-    {
-        proj.takedamage       = DAMAGE_AIM;
-        proj.event_damage     = vehicles_projectile_damage;
-        proj.health           = _health;
-    }
-    else
-        proj.flags           = FL_PROJECTILE | FL_NOTARGET;
-
-    if(_mzlsound)
-        sound (self, CH_WEAPON_A, _mzlsound, VOL_BASE, ATTEN_NORM);
-
-    if(_mzlfx)
-        pointparticles(particleeffectnum(_mzlfx), proj.origin, proj.velocity, 1);
-
-
-    setsize (proj, '-1 -1 -1' * _size, '1 1 1' * _size);
-
-    CSQCProjectile(proj, _clianim, _projtype, _cull);
-
-    return proj;
-}
-// End generic vehile projectile system
-
-/** vehicles_spawn
-    Exetuted for all vehicles on (re)spawn.
-    Sets defaults for newly spawned units.
-**/
-void vehicles_spawn()
-{
-    dprint("Spawning vehicle: ", self.netname, "\n");
-
-    // De-own & reset
-    self.vehicle_hudmodel.viewmodelforclient = self;
-
-    self.owner              = world;
-    self.touch              = vehicles_touch;
-    self.event_damage       = vehicles_damage;
-    self.iscreature         = TRUE;
-    self.teleportable       = FALSE; // no teleporting for vehicles, too buggy
-    self.damagedbycontents     = TRUE;
-    self.movetype           = MOVETYPE_WALK;
-    self.solid              = SOLID_SLIDEBOX;
-    self.takedamage         = DAMAGE_AIM;
-       self.deadflag           = DEAD_NO;
-    self.bot_attack         = TRUE;
-    self.flags              = FL_NOTARGET;
-    self.avelocity          = '0 0 0';
-    self.velocity           = '0 0 0';
-
-    // Reset locking
-    self.lock_strength      = 0;
-    self.lock_target        = world;
-    self.misc_bulletcounter = 0;
-
-    // Return to spawn
-    self.angles             = self.pos2;
-    setorigin(self, self.pos1 + '0 0 0');
-    // Show it
-    pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
-
-    if(self.vehicle_controller)
-        self.team = self.vehicle_controller.team;
-
-    vehicles_reset_colors();
-    self.vehicle_spawn(VHSF_NORMAL);
-}
-
-// Better way of determening whats crushable needed! (fl_crushable?)
-float vehicles_crushable(entity e)
-{
-    if(IS_PLAYER(e))
-        return TRUE;
-
-    if(e.flags & FL_MONSTER)
-        return TRUE;
-
-    return FALSE;
-}
-
-void vehilces_impact(float _minspeed, float _speedfac, float _maxpain)
-{
-    if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-        return;
-
-    if(self.play_time < time)
-    {
-        float wc = vlen(self.velocity - self.oldvelocity);
-        //dprint("oldvel: ", vtos(self.oldvelocity), "\n");
-        //dprint("vel: ", vtos(self.velocity), "\n");
-        if(_minspeed < wc)
-        {
-            float take = min(_speedfac * wc, _maxpain);
-            Damage (self, world, world, take, DEATH_FALL, self.origin, '0 0 0');
-            self.play_time = time + 0.25;
-
-            //dprint("wc: ", ftos(wc), "\n");
-            //dprint("take: ", ftos(take), "\n");
-        }
-    }
-}
-
-.void() vehicle_impact;
-void vehicles_touch()
-{
-       if(MUTATOR_CALLHOOK(VehicleTouch))
-               return;
-
-    // Vehicle currently in use
-    if(self.owner)
-    {
-        if(other != world)
-        if(vehicles_crushable(other))
-        {
-            if(vlen(self.velocity) != 0)
-                Damage(other, self, self.owner, autocvar_g_vehicles_crush_dmg, DEATH_VH_CRUSH, '0 0 0', normalize(other.origin - self.origin) * autocvar_g_vehicles_crush_force);
-
-            return; // Dont do selfdamage when hitting "soft targets".
-        }
-
-        if(self.play_time < time)
-        if(self.vehicle_impact)
-            self.vehicle_impact();
-
-        return;
-    }
-
-    if (!IS_PLAYER(other))
-        return;
-
-    if(other.deadflag != DEAD_NO)
-        return;
-
-    if(other.vehicle != world)
-        return;
-
-    vehicles_enter();
-}
-var float autocvar_g_vehicles_allow_bots = 0;
-void vehicles_enter()
-{
-   // Remove this when bots know how to use vehicles
-
-    if (IS_BOT_CLIENT(other))
-        if (autocvar_g_vehicles_allow_bots)
-            dprint("Bot enters vehicle\n"); // This is where we need to disconnect (some, all?) normal bot AI and hand over to vehicle's _aiframe()
-        else
-            return;
-
-    if(self.phase > time)
-        return;
-
-    if(teamplay)
-    if(self.team)
-    if(self.team != other.team)
-        return;
-
-    RemoveGrapplingHook(other);
-
-    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;
-
-    // .viewmodelforclient works better.
-    //self.vehicle_hudmodel.drawonlytoclient = self.owner;
-
-    self.vehicle_hudmodel.viewmodelforclient = self.owner;
-
-    self.event_damage         = vehicles_damage;
-    self.nextthink            = 0;
-    self.owner.angles         = self.angles;
-    self.owner.takedamage     = DAMAGE_NO;
-    self.owner.solid          = SOLID_NOT;
-    self.owner.movetype       = MOVETYPE_NOCLIP;
-    self.owner.alpha          = -1;
-    self.owner.vehicle        = self;
-    self.owner.event_damage   = func_null;
-    self.owner.view_ofs       = '0 0 0';
-    self.colormap             = self.owner.colormap;
-    if(self.tur_head)
-        self.tur_head.colormap    = self.owner.colormap;
-
-    self.owner.hud            = self.hud;
-    self.owner.PlayerPhysplug = self.PlayerPhysplug;
-
-    self.owner.vehicle_ammo1    = self.vehicle_ammo1;
-    self.owner.vehicle_ammo2    = self.vehicle_ammo2;
-    self.owner.vehicle_reload1  = self.vehicle_reload1;
-    self.owner.vehicle_reload2  = self.vehicle_reload2;
-
-    // Cant do this, hides attached objects too.
-    //self.exteriormodeltoclient = self.owner;
-    //self.tur_head.exteriormodeltoclient = self.owner;
-
-    other.flags &= ~FL_ONGROUND;
-    self.flags  &= ~FL_ONGROUND;
-
-    self.team                 = self.owner.team;
-    self.flags               -= FL_NOTARGET;
-
-    if (IS_REAL_CLIENT(other))
-    {
-        msg_entity = other;
-        WriteByte (MSG_ONE, SVC_SETVIEWPORT);
-        WriteEntity(MSG_ONE, self.vehicle_viewport);
-
-        WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
-        if(self.tur_head)
-        {
-            WriteAngle(MSG_ONE, self.tur_head.angles_x + self.angles_x); // tilt
-            WriteAngle(MSG_ONE, self.tur_head.angles_y + self.angles_y); // yaw
-            WriteAngle(MSG_ONE, 0);                                      // roll
-        }
-        else
-        {
-            WriteAngle(MSG_ONE,  self.angles_x * -1); // tilt
-            WriteAngle(MSG_ONE,  self.angles_y);      // yaw
-            WriteAngle(MSG_ONE,  0);                  // roll
-        }
-    }
-
-    vehicles_clearrturn();
-
-    CSQCVehicleSetup(self.owner, self.hud);
-
-    vh_player = other;
-    vh_vehicle = self;
-    MUTATOR_CALLHOOK(VehicleEnter);
-    other = vh_player;
-    self = vh_vehicle;
-
-    self.vehicle_enter();
-    antilag_clear(other);
-}
-
-/** vehicles_findgoodexit
-    Locates a valid location for the player to exit the vehicle.
-    Will first try prefer_spot, then up 100 random spots arround the vehicle
-    wich are in direct line of sight and empty enougth to hold a players bbox
-**/
-vector vehicles_findgoodexit(vector prefer_spot)
-{
-    //vector exitspot;
-    float mysize;
-
-    tracebox(self.origin + '0 0 32', PL_MIN, PL_MAX, prefer_spot, MOVE_NORMAL, self.owner);
-    if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
-        return prefer_spot;
-
-    mysize = 1.5 * vlen(self.maxs - self.mins);
-    float i;
-    vector v, v2;
-    v2 = 0.5 * (self.absmin + self.absmax);
-    for(i = 0; i < 100; ++i)
-    {
-        v = randomvec();
-        v_z = 0;
-        v = v2 + normalize(v) * mysize;
-        tracebox(v2, PL_MIN, PL_MAX, v, MOVE_NORMAL, self.owner);
-        if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
-            return v;
-    }
-
-    /*
-    exitspot = (self.origin + '0 0 48') + v_forward * mysize;
-    tracebox(self.origin + '0 0 32', PL_MIN, PL_MAX, exitspot, MOVE_NORMAL, self.owner);
-    if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
-        return exitspot;
-
-    exitspot = (self.origin + '0 0 48') - v_forward * mysize;
-    tracebox(self.origin + '0 0 32', PL_MIN, PL_MAX, exitspot, MOVE_NORMAL, self.owner);
-    if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
-        return exitspot;
-
-    exitspot = (self.origin + '0 0 48') + v_right * mysize;
-    tracebox(self.origin + '0 0 32', PL_MIN, PL_MAX, exitspot, MOVE_NORMAL, self.owner);
-    if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
-        return exitspot;
-
-    exitspot = (self.origin + '0 0 48') - v_right * mysize;
-    tracebox(self.origin + '0 0 32', PL_MIN, PL_MAX, exitspot, MOVE_NORMAL, self.owner);
-    if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
-        return exitspot;
-    */
-
-    return self.origin;
-}
-
-/** vehicles_exit
-    Standarrd vehicle release fucntion.
-    custom code goes in self.vehicle_exit
-**/
-float vehicles_exit_running;
-void vehicles_exit(float eject)
-{
-    entity _vehicle;
-    entity _player;
-    entity _oldself = self;
-
-    if(vehicles_exit_running)
-    {
-        dprint("^1vehicles_exit allready running! this is not good..\n");
-        return;
-    }
-
-    vehicles_exit_running = TRUE;
-    if(IS_CLIENT(self))
-    {
-        _vehicle = self.vehicle;
-
-        if (_vehicle.vehicle_flags & VHF_PLAYERSLOT)
-        {
-            _vehicle.vehicle_exit(eject);
-            self = _oldself;
-            vehicles_exit_running = FALSE;
-            return;
-        }
-    }
-    else
-        _vehicle = self;
-
-    _player = _vehicle.owner;
-
-    self = _vehicle;
-
-    if (_player)
-    {
-        if (IS_REAL_CLIENT(_player))
-        {
-            msg_entity = _player;
-            WriteByte (MSG_ONE, SVC_SETVIEWPORT);
-            WriteEntity( MSG_ONE, _player);
-
-            WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
-            WriteAngle(MSG_ONE, 0);
-            WriteAngle(MSG_ONE, _vehicle.angles_y);
-            WriteAngle(MSG_ONE, 0);
-        }
-
-        setsize(_player, PL_MIN,PL_MAX);
-
-        _player.takedamage     = DAMAGE_AIM;
-        _player.solid          = SOLID_SLIDEBOX;
-        _player.movetype       = MOVETYPE_WALK;
-        _player.effects        &= ~EF_NODRAW;
-        _player.alpha          = 1;
-        _player.PlayerPhysplug = func_null;
-        _player.vehicle        = world;
-        _player.view_ofs       = PL_VIEW_OFS;
-        _player.event_damage   = PlayerDamage;
-        _player.hud            = HUD_NORMAL;
-        _player.switchweapon   = _vehicle.switchweapon;
-
-        CSQCVehicleSetup(_player, HUD_NORMAL);
-    }
-    _vehicle.flags |= FL_NOTARGET;
-
-    if(_vehicle.deadflag == DEAD_NO)
-        _vehicle.avelocity          = '0 0 0';
-
-    _vehicle.tur_head.nodrawtoclient             = world;
-
-    if(!teamplay)
-        _vehicle.team = 0;
-
-    vh_player = _player;
-    vh_vehicle = _vehicle;
-    MUTATOR_CALLHOOK(VehicleExit);
-    _player = vh_player;
-    _vehicle = vh_vehicle;
-
-    _vehicle.team = _vehicle.tur_head.team;
-
-    sound (_vehicle, CH_TRIGGER_SINGLE, "misc/null.wav", 1, ATTEN_NORM);
-    _vehicle.vehicle_hudmodel.viewmodelforclient = _vehicle;
-    _vehicle.phase = time + 1;
-
-    _vehicle.vehicle_exit(eject);
-
-    vehicles_setreturn();
-    vehicles_reset_colors();
-    _vehicle.owner = world;
-    self = _oldself;
-
-    vehicles_exit_running = FALSE;
-}
-
-
-void vehicles_regen(float timer, .float regen_field, float field_max, float rpause, float regen, float delta_time, float _healthscale)
-{
-    if(self.regen_field < field_max)
-    if(timer + rpause < time)
-    {
-        if(_healthscale)
-            regen = regen * (self.vehicle_health / self.tur_health);
-
-        self.regen_field = min(self.regen_field + regen * delta_time, field_max);
-
-        if(self.owner)
-            self.owner.regen_field = (self.regen_field / field_max) * 100;
-    }
-}
-
-void shieldhit_think()
-{
-    self.alpha -= 0.1;
-    if (self.alpha <= 0)
-    {
-        //setmodel(self, "");
-        self.alpha = -1;
-        self.effects |= EF_NODRAW;
-    }
-    else
-    {
-        self.nextthink = time + 0.1;
-    }
-}
-
-void vehicles_painframe()
-{
-    if(self.owner.vehicle_health <= 50)
-    if(self.pain_frame < time)
-    {
-        float _ftmp;
-        _ftmp = self.owner.vehicle_health / 50;
-        self.pain_frame = time + 0.1 + (random() * 0.5 * _ftmp);
-        pointparticles(particleeffectnum("smoke_small"), (self.origin + (randomvec() * 80)), '0 0 0', 1);
-
-        if(self.vehicle_flags & VHF_DMGSHAKE)
-            self.velocity += randomvec() * 30;
-
-        if(self.vehicle_flags & VHF_DMGROLL)
-            if(self.vehicle_flags & VHF_DMGHEADROLL)
-                self.tur_head.angles += randomvec();
-            else
-                self.angles += randomvec();
-
-    }
-}
-
-void vehicles_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
-{
-    self.dmg_time = time;
-
-    if(DEATH_ISWEAPON(deathtype, WEP_NEX))
-        damage *= autocvar_g_vehicles_nex_damagerate;
-
-    if(DEATH_ISWEAPON(deathtype, WEP_UZI))
-        damage *= autocvar_g_vehicles_uzi_damagerate;
-
-    if(DEATH_ISWEAPON(deathtype, WEP_RIFLE))
-        damage *= autocvar_g_vehicles_rifle_damagerate;
-
-    if(DEATH_ISWEAPON(deathtype, WEP_MINSTANEX))
-        damage *= autocvar_g_vehicles_minstanex_damagerate;
-
-    if(DEATH_ISWEAPON(deathtype, WEP_SEEKER))
-        damage *= autocvar_g_vehicles_tag_damagerate;
-
-    self.enemy = attacker;
-
-    if((self.vehicle_flags & VHF_HASSHIELD) && (self.vehicle_shield > 0))
-    {
-        if (wasfreed(self.vehicle_shieldent) || self.vehicle_shieldent == world)
-        {
-            self.vehicle_shieldent = spawn();
-            self.vehicle_shieldent.effects = EF_LOWPRECISION;
-
-            setmodel(self.vehicle_shieldent, "models/vhshield.md3");
-            setattachment(self.vehicle_shieldent, self, "");
-            setorigin(self.vehicle_shieldent, real_origin(self) - self.origin);
-            self.vehicle_shieldent.scale       = 256 / vlen(self.maxs - self.mins);
-            self.vehicle_shieldent.think       = shieldhit_think;
-        }
-
-        self.vehicle_shieldent.colormod    = '1 1 1';
-        self.vehicle_shieldent.alpha       = 0.45;
-        self.vehicle_shieldent.angles      = vectoangles(normalize(hitloc - (self.origin + self.vehicle_shieldent.origin))) - self.angles;
-        self.vehicle_shieldent.nextthink   = time;
-        self.vehicle_shieldent.effects &= ~EF_NODRAW;
-
-        self.vehicle_shield -= damage;
-
-        if(self.vehicle_shield < 0)
-        {
-            self.vehicle_health            -= fabs(self.vehicle_shield);
-            self.vehicle_shieldent.colormod = '2 0 0';
-            self.vehicle_shield             = 0;
-            self.vehicle_shieldent.alpha    = 0.75;
-
-               if(sound_allowed(MSG_BROADCAST, attacker))
-                spamsound (self, CH_PAIN, "onslaught/ons_hit2.wav", VOL_BASE, ATTEN_NORM);   // FIXME: PLACEHOLDER
-        }
-        else
-               if(sound_allowed(MSG_BROADCAST, attacker))
-                spamsound (self, CH_PAIN, "onslaught/electricity_explode.wav", VOL_BASE, ATTEN_NORM);  // FIXME: PLACEHOLDER
-
-    }
-    else
-    {
-        self.vehicle_health -= damage;
-
-        if(sound_allowed(MSG_BROADCAST, attacker))
-            spamsound (self, CH_PAIN, "onslaught/ons_hit2.wav", VOL_BASE, ATTEN_NORM);  // FIXME: PLACEHOLDER
-    }
-
-       if(self.damageforcescale < 1 && self.damageforcescale > 0)
-               self.velocity += force * self.damageforcescale;
-       else
-               self.velocity += force;
-
-    if(self.vehicle_health <= 0)
-    {
-        if(self.owner)
-            if(self.vehicle_flags & VHF_DEATHEJECT)
-                vehicles_exit(VHEF_EJECT);
-            else
-                vehicles_exit(VHEF_RELESE);
-
-
-        antilag_clear(self);
-
-        self.vehicle_die();
-        vehicles_setreturn();
-    }
-}
-
-void vehicles_clearrturn()
-{
-    entity ret;
-    // Remove "return helper", if any.
-    ret = findchain(classname, "vehicle_return");
-    while(ret)
-    {
-        if(ret.wp00 == self)
-        {
-            ret.classname   = "";
-            ret.think       = SUB_Remove;
-            ret.nextthink   = time + 0.1;
-
-            if(ret.waypointsprite_attached)
-                WaypointSprite_Kill(ret.waypointsprite_attached);
-
-            return;
-        }
-        ret = ret.chain;
-    }
-}
-
-void vehicles_return()
-{
-    pointparticles(particleeffectnum("teleport"), self.wp00.origin + '0 0 64', '0 0 0', 1);
-
-    self.wp00.think     = vehicles_spawn;
-    self.wp00.nextthink = time;
-
-    if(self.waypointsprite_attached)
-        WaypointSprite_Kill(self.waypointsprite_attached);
-
-    remove(self);
-}
-
-void vehicles_showwp_goaway()
-{
-    if(self.waypointsprite_attached)
-        WaypointSprite_Kill(self.waypointsprite_attached);
-
-    remove(self);
-
-}
-
-void vehicles_showwp()
-{
-    entity oldself = world;
-    vector rgb;
-
-    if(self.cnt)
-    {
-        self.think      = vehicles_return;
-        self.nextthink  = self.cnt;
-    }
-    else
-    {
-        self.think      = vehicles_return;
-        self.nextthink  = time +1;
-
-        oldself = self;
-        self = spawn();
-        setmodel(self, "null");
-        self.team = oldself.wp00.team;
-        self.wp00 = oldself.wp00;
-        setorigin(self, oldself.wp00.pos1);
-
-        self.nextthink = time + 5;
-        self.think = vehicles_showwp_goaway;
-    }
-
-    if(teamplay && self.team)
-           rgb = Team_ColorRGB(self.team);
-    else
-           rgb = '1 1 1';
-    WaypointSprite_Spawn("vehicle", 0, 0, self, '0 0 64', world, 0, self, waypointsprite_attached, TRUE, RADARICON_POWERUP, rgb);
-    if(self.waypointsprite_attached)
-    {
-        WaypointSprite_UpdateRule(self.waypointsprite_attached, self.wp00.team, SPRITERULE_DEFAULT);
-        if(oldself == world)
-            WaypointSprite_UpdateBuildFinished(self.waypointsprite_attached, self.nextthink);
-        WaypointSprite_Ping(self.waypointsprite_attached);
-    }
-
-    if(oldself != world)
-        self = oldself;
-}
-
-void vehicles_setreturn()
-{
-    entity ret;
-
-    vehicles_clearrturn();
-
-    ret = spawn();
-    ret.classname   = "vehicle_return";
-    ret.wp00       = self;
-    ret.team        = self.team;
-    ret.think       = vehicles_showwp;
-
-    if(self.deadflag != DEAD_NO)
-    {
-        ret.cnt         = time + self.vehicle_respawntime;
-        ret.nextthink   = min(time + self.vehicle_respawntime, time + self.vehicle_respawntime - 5);
-    }
-    else
-    {
-        ret.nextthink   = min(time + self.vehicle_respawntime, time + self.vehicle_respawntime - 1);
-    }
-
-    setmodel(ret, "null");
-    setorigin(ret, self.pos1 + '0 0 96');
-
-}
-
-void vehicles_reset_colors()
-{
-    entity e;
-    float _effects = 0, _colormap;
-    vector _glowmod, _colormod;
-
-    if(autocvar_g_nodepthtestplayers)
-        _effects |= EF_NODEPTHTEST;
-
-    if(autocvar_g_fullbrightplayers)
-        _effects |= EF_FULLBRIGHT;
-
-    if(self.team)
-        _colormap = 1024 + (self.team - 1) * 17;
-    else
-        _colormap = 1024;
-
-    _glowmod  = '0 0 0';
-    _colormod = '0 0 0';
-
-    // Find all ents attacked to main model and setup effects, colormod etc.
-    e = findchainentity(tag_entity, self);
-    while(e)
-    {
-        if(e != self.vehicle_shieldent)
-        {
-            e.effects   = _effects; //  | EF_LOWPRECISION;
-            e.colormod  = _colormod;
-            e.colormap  = _colormap;
-            e.alpha     = 1;
-        }
-        e = e.chain;
-    }
-
-    self.vehicle_hudmodel.effects  = self.effects  = _effects; // | EF_LOWPRECISION;
-    self.vehicle_hudmodel.colormod = self.colormod = _colormod;
-    self.vehicle_hudmodel.colormap = self.colormap = _colormap;
-    self.vehicle_viewport.effects = (EF_ADDITIVE | EF_DOUBLESIDED | EF_FULLBRIGHT | EF_NODEPTHTEST | EF_NOGUNBOB | EF_NOSHADOW | EF_LOWPRECISION | EF_SELECTABLE | EF_TELEPORT_BIT);
-
-    self.alpha     = 1;
-    self.avelocity = '0 0 0';
-    self.velocity  = '0 0 0';
-    self.effects   = _effects;
-}
-
-void vehicle_use()
-{
-    dprint("vehicle ",self.netname, " used by ", activator.classname, "\n");
-
-    self.tur_head.team = activator.team;
-
-    if(self.tur_head.team == 0)
-        self.active = ACTIVE_NOT;
-    else
-        self.active = ACTIVE_ACTIVE;
-
-    if(self.active == ACTIVE_ACTIVE && self.deadflag == DEAD_NO)
-    {
-        dprint("^3Eat shit yall!\n");
-        vehicles_setreturn();
-        vehicles_reset_colors();
-    }
-    else if(self.active == ACTIVE_NOT && self.deadflag != DEAD_NO)
-    {
-
-    }
-}
-
-float vehicle_addplayerslot(    entity _owner,
-                                entity _slot,
-                                float _hud,
-                                string _hud_model,
-                                float() _framefunc,
-                                void(float) _exitfunc)
-{
-    if (!(_owner.vehicle_flags & VHF_MULTISLOT))
-        _owner.vehicle_flags |= VHF_MULTISLOT;
-
-    _slot.PlayerPhysplug = _framefunc;
-    _slot.vehicle_exit = _exitfunc;
-    _slot.hud = _hud;
-    _slot.vehicle_flags = VHF_PLAYERSLOT;
-    _slot.vehicle_viewport = spawn();
-    _slot.vehicle_hudmodel = spawn();
-    _slot.vehicle_hudmodel.viewmodelforclient = _slot;
-    _slot.vehicle_viewport.effects = (EF_ADDITIVE | EF_DOUBLESIDED | EF_FULLBRIGHT | EF_NODEPTHTEST | EF_NOGUNBOB | EF_NOSHADOW | EF_LOWPRECISION | EF_SELECTABLE | EF_TELEPORT_BIT);
-
-    setmodel(_slot.vehicle_hudmodel, _hud_model);
-    setmodel(_slot.vehicle_viewport, "null");
-
-    setattachment(_slot.vehicle_hudmodel, _slot, "");
-    setattachment(_slot.vehicle_viewport, _slot.vehicle_hudmodel, "");
-
-    return TRUE;
-}
-
-float vehicle_initialize(string  net_name,
-                         string  bodymodel,
-                         string  topmodel,
-                         string  hudmodel,
-                         string  toptag,
-                         string  hudtag,
-                         string  viewtag,
-                         float   vhud,
-                         vector  min_s,
-                         vector  max_s,
-                         float   nodrop,
-                         void(float _spawnflag)  spawnproc,
-                         float   _respawntime,
-                         float() physproc,
-                         void()  enterproc,
-                         void(float extflag) exitfunc,
-                         void() dieproc,
-                         void() thinkproc,
-                         float  use_csqc,
-                         float _max_health,
-                         float _max_shield)
-{
-       if(!autocvar_g_vehicles)
-               return FALSE;
-
-    if(self.targetname)
-    {
-        self.vehicle_controller = find(world, target, self.targetname);
-        if(!self.vehicle_controller)
-        {
-            bprint("^1WARNING: ^7Vehicle with invalid .targetname\n");
-        }
-        else
-        {
-            self.team = self.vehicle_controller.team;
-            self.use = vehicle_use;
-
-            if(teamplay)
-            {
-                if(self.vehicle_controller.team == 0)
-                    self.active = ACTIVE_NOT;
-                else
-                    self.active = ACTIVE_ACTIVE;
-            }
-        }
-    }
-
-    precache_sound("onslaught/ons_hit2.wav");
-    precache_sound("onslaught/electricity_explode.wav");
-
-
-    addstat(STAT_HUD, AS_INT,  hud);
-       addstat(STAT_VEHICLESTAT_HEALTH,  AS_INT, vehicle_health);
-       addstat(STAT_VEHICLESTAT_SHIELD,  AS_INT, vehicle_shield);
-       addstat(STAT_VEHICLESTAT_ENERGY,  AS_INT, vehicle_energy);
-
-       addstat(STAT_VEHICLESTAT_AMMO1,   AS_INT, vehicle_ammo1);
-       addstat(STAT_VEHICLESTAT_RELOAD1, AS_INT, vehicle_reload1);
-
-       addstat(STAT_VEHICLESTAT_AMMO2,   AS_INT, vehicle_ammo2);
-       addstat(STAT_VEHICLESTAT_RELOAD2, AS_INT, vehicle_reload2);
-
-    if(bodymodel == "")
-        error("vehicles: missing bodymodel!");
-
-    if(hudmodel == "")
-        error("vehicles: missing hudmodel!");
-
-    if(net_name == "")
-        self.netname = self.classname;
-    else
-        self.netname = net_name;
-
-    if(self.team && !teamplay)
-        self.team = 0;
-
-    self.vehicle_flags |= VHF_ISVEHICLE;
-
-    setmodel(self, bodymodel);
-
-    self.vehicle_viewport   = spawn();
-    self.vehicle_hudmodel   = spawn();
-    self.tur_head           = spawn();
-    self.tur_head.owner     = self;
-    self.takedamage         = DAMAGE_AIM;
-    self.bot_attack         = TRUE;
-    self.iscreature         = TRUE;
-    self.teleportable       = FALSE; // no teleporting for vehicles, too buggy
-    self.damagedbycontents     = TRUE;
-    self.hud                = vhud;
-    self.tur_health          = _max_health;
-    self.tur_head.tur_health = _max_shield;
-    self.vehicle_die         = dieproc;
-    self.vehicle_exit        = exitfunc;
-    self.vehicle_enter       = enterproc;
-    self.PlayerPhysplug      = physproc;
-    self.event_damage        = func_null;
-    self.touch               = vehicles_touch;
-    self.think               = vehicles_spawn;
-    self.nextthink           = time;
-    self.vehicle_respawntime = _respawntime;
-    self.vehicle_spawn       = spawnproc;
-    self.effects             = EF_NODRAW;
-       self.dphitcontentsmask   = DPCONTENTS_BODY | DPCONTENTS_SOLID;
-    if(!autocvar_g_vehicles_delayspawn)
-        self.nextthink = time + game_starttime;
-    else
-        self.nextthink = time + _respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter);
-
-       if(autocvar_g_playerclip_collisions)
-               self.dphitcontentsmask |= DPCONTENTS_PLAYERCLIP;
-
-    if(autocvar_g_nodepthtestplayers)
-        self.effects = self.effects | EF_NODEPTHTEST;
-
-    if(autocvar_g_fullbrightplayers)
-        self.effects = self.effects | EF_FULLBRIGHT;
-
-    setmodel(self.vehicle_hudmodel, hudmodel);
-    setmodel(self.vehicle_viewport, "null");
-
-    if(topmodel != "")
-    {
-        setmodel(self.tur_head, topmodel);
-        setattachment(self.tur_head, self, toptag);
-        setattachment(self.vehicle_hudmodel, self.tur_head, hudtag);
-        setattachment(self.vehicle_viewport, self.vehicle_hudmodel, viewtag);
-    }
-    else
-    {
-        setattachment(self.tur_head, self, "");
-        setattachment(self.vehicle_hudmodel, self, hudtag);
-        setattachment(self.vehicle_viewport, self.vehicle_hudmodel, viewtag);
-    }
-
-    setsize(self, min_s, max_s);
-    if (!nodrop)
-    {
-        setorigin(self, self.origin);
-        tracebox(self.origin + '0 0 100', min_s, max_s, self.origin - '0 0 10000', MOVE_WORLDONLY, self);
-        setorigin(self, trace_endpos);
-    }
-
-    self.pos1 = self.origin;
-    self.pos2 = self.angles;
-    self.tur_head.team = self.team;
-
-       if(MUTATOR_CALLHOOK(VehicleSpawn))
-               return FALSE;
-
-    return TRUE;
-}
-
-vector vehicle_aimturret(entity _vehic, vector _target, entity _turrret, string _tagname,
-                         float _pichlimit_min, float _pichlimit_max,
-                         float _rotlimit_min, float _rotlimit_max, float _aimspeed)
-{
-    vector vtmp, vtag;
-    float ftmp;
-    vtag = gettaginfo(_turrret, gettagindex(_turrret, _tagname));
-    vtmp = vectoangles(normalize(_target - vtag));
-    vtmp = AnglesTransform_ToAngles(AnglesTransform_LeftDivide(AnglesTransform_FromAngles(_vehic.angles), AnglesTransform_FromAngles(vtmp))) - _turrret.angles;
-    vtmp = AnglesTransform_Normalize(vtmp, TRUE);
-    ftmp = _aimspeed * frametime;
-    vtmp_y = bound(-ftmp, vtmp_y, ftmp);
-    vtmp_x = bound(-ftmp, vtmp_x, ftmp);
-    _turrret.angles_y = bound(_rotlimit_min, _turrret.angles_y + vtmp_y, _rotlimit_max);
-    _turrret.angles_x = bound(_pichlimit_min, _turrret.angles_x + vtmp_x, _pichlimit_max);
-    return vtag;
-}
-
-void vehicles_gib_explode()
-{
-       sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
-       pointparticles(particleeffectnum("explosion_small"), randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
-       remove(self);
-}
-
-void vehicles_gib_think()
-{
-       self.alpha -= 0.1;
-       if(self.cnt >= time)
-               remove(self);
-       else
-               self.nextthink = time + 0.1;
-}
-
-entity vehicle_tossgib(entity _template, vector _vel, string _tag, float _burn, float _explode, float _maxtime, vector _rot)
-{
-       entity _gib = spawn();
-       setmodel(_gib, _template.model);
-       setorigin(_gib, gettaginfo(self, gettagindex(self, _tag)));
-       _gib.velocity = _vel;
-       _gib.movetype = MOVETYPE_TOSS;
-       _gib.solid = SOLID_CORPSE;
-       _gib.colormod = '-0.5 -0.5 -0.5';
-       _gib.effects = EF_LOWPRECISION;
-       _gib.avelocity = _rot;
-
-       if(_burn)
-               _gib.effects |= EF_FLAME;
-
-       if(_explode)
-       {
-               _gib.think = vehicles_gib_explode;
-               _gib.nextthink = time + random() * _explode;
-               _gib.touch = vehicles_gib_explode;
-       }
-       else
-       {
-               _gib.cnt = time + _maxtime;
-               _gib.think = vehicles_gib_think;
-               _gib.nextthink = time + _maxtime - 1;
-               _gib.alpha = 1;
-       }
-       return _gib;
-}
-
-/*
-vector predict_target(entity _targ, vector _from, float _shot_speed)
-{
-    float i;                // loop
-    float _distance;        // How far to target
-    float _impact_time;     // How long untill projectile impacts
-    vector _predict_pos;    // Predicted enemy location
-    vector _original_origin;// Where target is before predicted
-
-     _original_origin = real_origin(_targ); // Typicaly center of target BBOX
-
-    _predict_pos = _original_origin;
-    for(i = 0; i < 4; ++i)  // Loop a few times to increase prediction accuracy (increase loop count if accuracy is to low)
-    {
-        _distance = vlen(_predict_pos - _from); // Get distance to previos predicted location
-        _impact_time = _distance / _shot_speed; // Calculate impact time
-        _predict_pos = _original_origin + _targ.velocity * _impact_time; // Calculate new predicted location
-    }
-
-    return _predict_pos;
-}
-*/