]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/vehicles/unit/raptor.qc
Replace all direct assignments to self with setself(e)
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / vehicles / unit / raptor.qc
index e74d669f58897ecc57b287405c948ab4ab76b06a..263da161f0d197ce6d1bfaf8c9481d220613336c 100644 (file)
@@ -1,7 +1,11 @@
-#ifdef REGISTER_VEHICLE
-REGISTER_VEHICLE(
+#ifndef VEHICLE_RAPTOR
+#define VEHICLE_RAPTOR
+#include "raptor.qh"
+#ifndef MENUQC
+int v_raptor(int);
+#endif
+REGISTER_VEHICLE_SIMPLE(
 /* VEH_##id   */ RAPTOR,
-/* function   */ v_raptor,
 /* spawnflags */ VHF_DMGSHAKE | VHF_DMGROLL,
 /* mins,maxs  */ '-80 -80 0', '80 80 70',
 /* model         */ "models/vehicles/raptor.dpm",
@@ -10,16 +14,18 @@ REGISTER_VEHICLE(
 /* tags                  */ "", "tag_hud", "tag_camera",
 /* netname       */ "raptor",
 /* fullname   */ _("Raptor")
-);
-#else
+) {
+    this.m_icon = "vehicle_raptor";
+#ifndef MENUQC
+    this.vehicle_func = v_raptor;
+#endif
+}
+#endif
 
-const float RSM_FIRST = 1;
-const float RSM_BOMB = 1;
-const float RSM_FLARE = 2;
-const float RSM_LAST = 2;
+#ifdef IMPLEMENTATION
 
 #ifdef SVQC
-float autocvar_g_vehicle_raptor;
+bool autocvar_g_vehicle_raptor;
 
 float autocvar_g_vehicle_raptor_respawntime;
 float autocvar_g_vehicle_raptor_takeofftime;
@@ -90,22 +96,22 @@ vector autocvar_g_vehicle_raptor_bouncepain;
 .entity bomb2;
 
 float raptor_altitude(float amax)
-{
+{SELFPARAM();
        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()
-{
+{SELFPARAM();
        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_radius, world, world,
                                                                        autocvar_g_vehicle_raptor_bomblet_force, DEATH_VH_RAPT_BOMB, world);
        remove(self);
 }
 
 void raptor_bomblet_touch()
-{
+{SELFPARAM();
        if(other == self.owner)
                return;
 
@@ -115,7 +121,7 @@ void raptor_bomblet_touch()
 }
 
 void raptor_bomb_burst()
-{
+{SELFPARAM();
        if(self.cnt > time)
        if(autocvar_g_vehicle_raptor_bomblet_alt)
        {
@@ -147,14 +153,14 @@ void raptor_bomb_burst()
                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);
+               CSQCProjectile(bomblet, true, PROJECTILE_RAPTORBOMBLET, true);
        }
 
        remove(self);
 }
 
 void raptor_bombdrop()
-{
+{SELFPARAM();
        entity bomb_1, bomb_2;
 
        bomb_1 = spawn();
@@ -182,21 +188,21 @@ void raptor_bombdrop()
        PROJECTILE_MAKETRIGGER(bomb_1);
        PROJECTILE_MAKETRIGGER(bomb_2);
 
-       CSQCProjectile(bomb_1, TRUE, PROJECTILE_RAPTORBOMB, TRUE);
-       CSQCProjectile(bomb_2, TRUE, PROJECTILE_RAPTORBOMB, TRUE);
+       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",
+{SELFPARAM();
+       vehicles_projectile(EFFECT_RAPTOR_MUZZLEFLASH.eent_eff_name, W_Sound("lasergun_fire"),
                                                   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);
+                                                  DEATH_VH_RAPT_CANNON, PROJECTILE_RAPTORCANNON, 0, true, true, self.owner);
 }
 
 void raptor_land()
-{
+{SELFPARAM();
        float hgt;
 
        hgt = raptor_altitude(512);
@@ -219,12 +225,12 @@ void raptor_land()
        }
 
        self.nextthink  = time;
-       
-       CSQCMODEL_AUTOUPDATE();
+
+       CSQCMODEL_AUTOUPDATE(self);
 }
 
 void raptor_exit(float eject)
-{
+{SELFPARAM();
        vector spot;
        self.tur_head.exteriormodeltoclient = world;
 
@@ -271,19 +277,19 @@ void raptor_exit(float eject)
 }
 
 void raptor_flare_touch()
-{
+{SELFPARAM();
        remove(self);
 }
 
-void raptor_flare_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
-{
+void raptor_flare_damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force)
+{SELFPARAM();
        self.health -= damage;
        if(self.health <= 0)
                remove(self);
 }
 
 void raptor_flare_think()
-{
+{SELFPARAM();
        self.nextthink = time + 0.1;
        entity _missile = findchainentity(enemy, self.owner);
        while(_missile)
@@ -300,7 +306,7 @@ void raptor_flare_think()
 }
 
 float raptor_frame()
-{
+{SELFPARAM();
        entity player, raptor;
        float ftmp = 0;
        vector df;
@@ -308,13 +314,14 @@ float raptor_frame()
        if(intermission_running)
        {
                self.vehicle.velocity = '0 0 0';
+               self.vehicle.avelocity = '0 0 0';
                return 1;
        }
 
        player = self;
        raptor = self.vehicle;
-       self   = raptor;
-       
+       setself(raptor);
+
        vehicles_painframe();
        /*
        ftmp = vlen(self.velocity);
@@ -342,12 +349,24 @@ float raptor_frame()
 
        if(raptor.deadflag != DEAD_NO)
        {
-               self = player;
+               setself(player);
                player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
                return 1;
        }
        crosshair_trace(player);
 
+       //if(time - self.lastteleporttime < 1)
+       //{
+               if(raptor.angles_z > 50 || raptor.angles_z < -50)
+               {
+                       if(player.BUTTON_JUMP)
+                       {
+                               player.BUTTON_CROUCH = true;
+                               player.BUTTON_JUMP = false;
+                       }
+               }
+       //}
+
        vector vang;
        vang = raptor.angles;
        df = vectoangles(normalize(trace_endpos - self.origin + '0 0 32'));
@@ -539,13 +558,13 @@ float 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);
+               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);
+               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);
+               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(!forbidWeaponUse(player))
        if(raptor.vehicle_weapon2mode == RSM_BOMB)
@@ -593,6 +612,7 @@ float raptor_frame()
 
        raptor.bomb1.alpha = raptor.bomb2.alpha = (time - raptor.lip) / (raptor.delay - raptor.lip);
        player.vehicle_reload2 = bound(0, raptor.bomb1.alpha * 100, 100);
+       player.vehicle_ammo2 = (player.vehicle_reload2 == 100) ? 100 : 0;
 
        if(self.bomb1.cnt < time)
        {
@@ -622,22 +642,22 @@ float raptor_frame()
 
        player.BUTTON_ATCK = player.BUTTON_ATCK2 = player.BUTTON_CROUCH = 0;
 
-       self = player;
+       setself(player);
        return 1;
 }
 
 float raptor_takeoff()
-{
+{SELFPARAM();
        entity player, raptor;
 
        player = self;
        raptor = self.vehicle;
-       self   = raptor;
-       
+       setself(raptor);
+
        self.nextthink = time;
-       CSQCMODEL_AUTOUPDATE();
+       CSQCMODEL_AUTOUPDATE(self);
        self.nextthink = 0; // will this work?
-       
+
        if(self.sound_nexttime < time)
        {
                self.sound_nexttime = time + 7.955812; //soundlength("vehicles/raptor_fly.wav");
@@ -659,17 +679,18 @@ float raptor_takeoff()
                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);
+               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);
+               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);
+               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);
+       player.vehicle_ammo2 = (player.vehicle_reload2 == 100) ? 100 : 0;
 
        VEHICLE_UPDATE_PLAYER(player, health, raptor);
        VEHICLE_UPDATE_PLAYER(player, energy, raptor);
@@ -677,15 +698,15 @@ float raptor_takeoff()
                VEHICLE_UPDATE_PLAYER(player, shield, raptor);
 
        player.BUTTON_ATCK = player.BUTTON_ATCK2 = player.BUTTON_CROUCH = 0;
-       self = player;
+       setself(player);
        return 1;
 }
 
 void raptor_blowup()
-{
+{SELFPARAM();
        self.deadflag   = DEAD_DEAD;
        self.vehicle_exit(VHEF_NORMAL);
-       RadiusDamage (self, self.enemy, 250, 15, 250, world, 250, DEATH_VH_RAPT_DEATH, world);
+       RadiusDamage (self, self.enemy, 250, 15, 250, world, world, 250, DEATH_VH_RAPT_DEATH, world);
 
        self.alpha                = -1;
        self.movetype      = MOVETYPE_NONE;
@@ -700,33 +721,44 @@ void raptor_blowup()
 }
 
 void raptor_diethink()
-{
+{SELFPARAM();
        if(time >= self.wait)
                self.think = raptor_blowup;
 
        if(random() < 0.05)
        {
-               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);
+               sound (self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
+               Send_Effect(EFFECT_EXPLOSION_SMALL, randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
        }
        self.nextthink = time;
-       
-       CSQCMODEL_AUTOUPDATE();
+
+       CSQCMODEL_AUTOUPDATE(self);
 }
 
 // If we dont do this ever now and then, the raptors rotors
 // stop working, presumably due to angle overflow. cute.
 void raptor_rotor_anglefix()
-{
+{SELFPARAM();
        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)
-{
+{SELFPARAM();
        switch(_imp)
        {
+               case 1:
+               case 230:
+                       self.vehicle.vehicle_weapon2mode = RSM_BOMB;
+                       CSQCVehicleSetup(self, 0);
+                       return true;
+               case 2:
+               case 231:
+                       self.vehicle.vehicle_weapon2mode = RSM_FLARE;
+                       CSQCVehicleSetup(self, 0);
+                       return true;
+
                case 10:
                case 15:
                case 18:
@@ -735,7 +767,8 @@ float raptor_impulse(float _imp)
                                self.vehicle.vehicle_weapon2mode = RSM_FIRST;
 
                        CSQCVehicleSetup(self, 0);
-                       return TRUE;
+                       return true;
+               case 11:
                case 12:
                case 16:
                case 19:
@@ -744,7 +777,7 @@ float raptor_impulse(float _imp)
                                self.vehicle.vehicle_weapon2mode = RSM_LAST;
 
                        CSQCVehicleSetup(self, 0);
-                       return TRUE;
+                       return true;
 
                /*
                case 17: // toss gun, could be used to exit?
@@ -753,25 +786,25 @@ float raptor_impulse(float _imp)
                        break;
                */
        }
-       return FALSE;
+       return false;
 }
 
 void spawnfunc_vehicle_raptor()
-{
+{SELFPARAM();
        if(!autocvar_g_vehicle_raptor) { remove(self); return; }
-       if(!vehicle_initialize(VEH_RAPTOR, FALSE)) { remove(self); return; }
+       if(!vehicle_initialize(VEH_RAPTOR, false)) { remove(self); return; }
 }
 
 float v_raptor(float req)
-{
+{SELFPARAM();
        switch(req)
        {
                case VR_IMPACT:
                {
                        if(autocvar_g_vehicle_raptor_bouncepain)
                                vehicles_impact(autocvar_g_vehicle_raptor_bouncepain_x, autocvar_g_vehicle_raptor_bouncepain_y, autocvar_g_vehicle_raptor_bouncepain_z);
-                               
-                       return TRUE;
+
+                       return true;
                }
                case VR_ENTER:
                {
@@ -791,11 +824,11 @@ float v_raptor(float req)
                           setorigin(self.owner.flagcarried, '-20 0 96');
 
                        CSQCVehicleSetup(self.owner, 0);
-                       return TRUE;
+                       return true;
                }
                case VR_THINK:
                {
-                       return TRUE;
+                       return true;
                }
                case VR_DEATH:
                {
@@ -809,7 +842,7 @@ float v_raptor(float req)
                        self.nextthink                  = time;
                        self.wait                               = time + 5 + (random() * 5);
 
-                       pointparticles(particleeffectnum("explosion_medium"), findbetterlocation (self.origin, 16), '0 0 0', 1);
+                       Send_Effect(EFFECT_EXPLOSION_MEDIUM, findbetterlocation (self.origin, 16), '0 0 0', 1);
 
                        self.velocity_z += 600;
 
@@ -818,7 +851,7 @@ float v_raptor(float req)
 
                        self.colormod = '-0.5 -0.5 -0.5';
                        self.touch = raptor_blowup;
-                       return TRUE;
+                       return true;
                }
                case VR_SPAWN:
                {
@@ -897,12 +930,12 @@ float v_raptor(float req)
                        self.movetype      = MOVETYPE_TOSS;
                        self.solid                = SOLID_SLIDEBOX;
                        self.vehicle_energy = 1;
-                       
+
                        self.PlayerPhysplug = raptor_frame;
 
                        self.bomb1.gun1.avelocity_y = 90;
                        self.bomb1.gun2.avelocity_y = -90;
-                       
+
                        self.delay = time;
 
                        self.bouncefactor = autocvar_g_vehicle_raptor_bouncefactor;
@@ -910,7 +943,7 @@ float v_raptor(float req)
                        self.damageforcescale = 0.25;
                        self.vehicle_health = autocvar_g_vehicle_raptor_health;
                        self.vehicle_shield = autocvar_g_vehicle_raptor_shield;
-                       return TRUE;
+                       return true;
                }
                case VR_SETUP:
                {
@@ -925,14 +958,14 @@ float v_raptor(float req)
 
                        if(autocvar_g_vehicle_raptor_energy_regen)
                                self.vehicle_flags |= VHF_ENERGYREGEN;
-                               
+
                        self.vehicle_exit = raptor_exit;
                        self.respawntime = autocvar_g_vehicle_raptor_respawntime;
                        self.vehicle_health = autocvar_g_vehicle_raptor_health;
                        self.vehicle_shield = autocvar_g_vehicle_raptor_shield;
                        self.max_health = self.vehicle_health;
-                               
-                       return TRUE;
+
+                       return true;
                }
                case VR_PRECACHE:
                {
@@ -946,238 +979,94 @@ float v_raptor(float req)
                        precache_sound ("vehicles/raptor_fly.wav");
                        precache_sound ("vehicles/raptor_speed.wav");
                        precache_sound ("vehicles/missile_alarm.wav");
-               
-                       return TRUE;
+
+                       return true;
                }
        }
 
-       return TRUE;
+       return true;
 }
 
 #endif // SVQC
 #ifdef CSQC
-#define raptor_ico  "gfx/vehicles/raptor.tga"
-#define raptor_gun  "gfx/vehicles/raptor_guns.tga"
-#define raptor_bomb "gfx/vehicles/raptor_bombs.tga"
-#define raptor_drop "gfx/vehicles/axh-dropcross.tga"
 
-float v_raptor(float req)
-{
-       switch(req)
-       {
-               case VR_HUD:
-               {
-                       if(autocvar_r_letterbox)
-                               return TRUE;
-
-                       vector picsize, hudloc = '0 0 0', pic2size, picloc;
-                       string raptor_xhair;
-
-                       // Fetch health & ammo stats
-                       HUD_GETVEHICLESTATS
-
-                       picsize = draw_getimagesize(hud_bg) * autocvar_cl_vehicles_hudscale;
-                       hudloc_y = vid_conheight - picsize_y;
-                       hudloc_x = vid_conwidth * 0.5 - picsize_x * 0.5;
+void RaptorCBShellfragDraw()
+{SELFPARAM();
+       if(wasfreed(self))
+               return;
 
-                       drawpic(hudloc, hud_bg, picsize, '1 1 1', autocvar_cl_vehicles_hudalpha, DRAWFLAG_NORMAL);
+       Movetype_Physics_MatchTicrate(autocvar_cl_gibs_ticrate, autocvar_cl_gibs_sloppy);
+       self.move_avelocity += randomvec() * 15;
+       self.renderflags = 0;
 
-                       ammo1   *= 0.01;
-                       ammo2   *= 0.01;
-                       shield  *= 0.01;
-                       vh_health  *= 0.01;
-                       energy  *= 0.01;
-                       reload1 = reload2 * 0.01;
-                       //reload2 *= 0.01;
+       if(self.cnt < time)
+               self.alpha = bound(0, self.nextthink - time, 1);
 
-                       pic2size = draw_getimagesize(raptor_ico) * (autocvar_cl_vehicles_hudscale * 0.8);
-                       picloc = picsize * 0.5 - pic2size * 0.5;
-                       if(vh_health < 0.25)
-                               drawpic(hudloc + picloc, raptor_ico, pic2size,  '1 0 0' + '0 1 1' * sin(time * 8),  1, DRAWFLAG_NORMAL);
-                       else
-                               drawpic(hudloc + picloc, raptor_ico, pic2size,  '1 1 1' * vh_health  + '1 0 0' * (1 - vh_health),  1, DRAWFLAG_NORMAL);
-                       drawpic(hudloc + picloc, raptor_bomb, pic2size,  '1 1 1' * reload1 + '1 0 0' * (1 - reload1), 1, DRAWFLAG_NORMAL);
-                       drawpic(hudloc + picloc, raptor_gun, pic2size, '1 1 1' * energy   + '1 0 0' * (1 - energy),   1, DRAWFLAG_NORMAL);
-                       drawpic(hudloc + picloc, hud_sh, pic2size,  '1 1 1', shield, DRAWFLAG_NORMAL);
-
-               // Health bar
-                       picsize = draw_getimagesize(hud_hp_bar) * autocvar_cl_vehicles_hudscale;
-                       picloc = '69 69 0' * autocvar_cl_vehicles_hudscale;
-                       drawsetcliparea(hudloc_x + picloc_x + (picsize_x * (1 - vh_health)), 0, vid_conwidth, vid_conheight);
-                       drawpic(hudloc + picloc, hud_hp_bar, picsize, '1 1 1', 1 , DRAWFLAG_NORMAL);
-                       drawresetcliparea();
-               // ..  and icon
-                       picsize = draw_getimagesize(hud_hp_ico) * autocvar_cl_vehicles_hudscale;
-                       picloc = '37 65 0' * autocvar_cl_vehicles_hudscale;
-                       if(vh_health < 0.25)
-                       {
-                               if(alarm1time < time)
-                               {
-                                       alarm1time = time + 2;
-                                       vehicle_alarm(self, CH_PAIN_SINGLE, "vehicles/alarm.wav");
-                               }
-
-                               drawpic(hudloc + picloc, hud_hp_ico, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
-                       }
-                       else
-                       {
-                               drawpic(hudloc + picloc, hud_hp_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
-                               if(alarm1time)
-                               {
-                                       vehicle_alarm(self, CH_PAIN_SINGLE, "misc/null.wav");
-                                       alarm1time = 0;
-                               }
-                       }
-
-               // Shield bar
-                       picsize = draw_getimagesize(hud_sh_bar) * autocvar_cl_vehicles_hudscale;
-                       picloc = '69 140 0' * autocvar_cl_vehicles_hudscale;
-                       drawsetcliparea(hudloc_x + picloc_x + (picsize_x * (1 - shield)), 0, vid_conwidth, vid_conheight);
-                       drawpic(hudloc + picloc, hud_sh_bar, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
-                       drawresetcliparea();
-               // ..  and icon
-                       picloc = '40 136 0' * autocvar_cl_vehicles_hudscale;
-                       picsize = draw_getimagesize(hud_sh_ico) * autocvar_cl_vehicles_hudscale;
-                       if(shield < 0.25)
-                       {
-                               if(alarm2time < time)
-                               {
-                                       alarm2time = time + 1;
-                                       vehicle_alarm(self, CH_TRIGGER_SINGLE, "vehicles/alarm_shield.wav");
-                               }
-                               drawpic(hudloc + picloc, hud_sh_ico, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
-                       }
-                       else
-                       {
-                               drawpic(hudloc + picloc, hud_sh_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
-                               if(alarm2time)
-                               {
-                                       vehicle_alarm(self, CH_TRIGGER_SINGLE, "misc/null.wav");
-                                       alarm2time = 0;
-                               }
-                       }
+       if(self.alpha < ALPHA_MIN_VISIBLE)
+               remove(self);
+}
 
-               // Gun bar
-                       picsize = draw_getimagesize(hud_ammo1_bar) * autocvar_cl_vehicles_hudscale;
-                       picloc = '450 69 0' * autocvar_cl_vehicles_hudscale;
-                       drawsetcliparea(hudloc_x + picloc_x, picloc_y, picsize_x * energy, vid_conheight);
-                       drawpic(hudloc + picloc, hud_ammo1_bar, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
-                       drawresetcliparea();
-               // ..  and icon
-                       picsize = draw_getimagesize(hud_ammo1_ico) * autocvar_cl_vehicles_hudscale;
-                       picloc = '664 60 0' * autocvar_cl_vehicles_hudscale;
-                       if(energy < 0.2)
-                               drawpic(hudloc + picloc, hud_ammo1_ico, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
-                       else
-                               drawpic(hudloc + picloc, hud_ammo1_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
-
-               // Bomb bar
-                       picsize = draw_getimagesize(hud_ammo2_bar) * autocvar_cl_vehicles_hudscale;
-                       picloc = '450 140 0' * autocvar_cl_vehicles_hudscale;
-                       drawsetcliparea(hudloc_x + picloc_x, hudloc_y + picloc_y, picsize_x * reload1, vid_conheight);
-                       drawpic(hudloc + picloc, hud_ammo2_bar, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
-                       drawresetcliparea();
-               // ..  and icon
-                       pic2size = draw_getimagesize(hud_ammo2_ico) * autocvar_cl_vehicles_hudscale;
-                       picloc = '664 130 0' * autocvar_cl_vehicles_hudscale;
-                       if(reload1 != 1)
-                               drawpic(hudloc + picloc, hud_ammo2_ico, pic2size, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
-                       else
-                               drawpic(hudloc + picloc, hud_ammo2_ico, pic2size, '1 1 1', 1, DRAWFLAG_NORMAL);
+void RaptorCBShellfragToss(vector _org, vector _vel, vector _ang)
+{SELFPARAM();
+       entity sfrag;
 
-                       if(getstati(STAT_VEHICLESTAT_W2MODE) == RSM_FLARE)
-                       {
-                               raptor_xhair =  "gfx/vehicles/axh-bracket.tga";
-                       }
-                       else
-                       {
-                               raptor_xhair =  "gfx/vehicles/axh-ring.tga";
+       sfrag = spawn();
+       setmodel(sfrag, "models/vehicles/clusterbomb_fragment.md3");
+       setorigin(sfrag, _org);
 
-                               // Bombing crosshair
-                               if(!dropmark)
-                               {
-                                       dropmark = spawn();
-                                       dropmark.owner = self;
-                                       dropmark.gravity = 1;
-                               }
+       sfrag.move_movetype = MOVETYPE_BOUNCE;
+       sfrag.gravity = 0.15;
+       sfrag.solid = SOLID_CORPSE;
 
-                               if(reload2 == 100)
-                               {
-                                       vector where;
+       sfrag.draw = RaptorCBShellfragDraw;
 
-                                       setorigin(dropmark, pmove_org);
-                                       dropmark.velocity = pmove_vel;
-                                       tracetoss(dropmark, self);
+       sfrag.move_origin = sfrag.origin = _org;
+       sfrag.move_velocity = _vel;
+       sfrag.move_avelocity = prandomvec() * vlen(sfrag.move_velocity);
+       sfrag.angles = self.move_angles = _ang;
 
-                                       where = project_3d_to_2d(trace_endpos);
+       sfrag.move_time = time;
+       sfrag.damageforcescale = 4;
 
-                                       setorigin(dropmark, trace_endpos);
-                                       picsize = draw_getimagesize(raptor_drop) * 0.2;
+       sfrag.nextthink = time + 3;
+       sfrag.cnt = time + 2;
+       sfrag.alpha = 1;
+       sfrag.drawmask = MASK_NORMAL;
+}
 
-                                       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;
-                                               where_z = 0;
-                                               drawpic(where, raptor_drop, picsize, '0 2 0', 1, DRAWFLAG_ADDITIVE);
-                                       }
-                                       dropmark.cnt = time + 5;
-                               }
-                               else
-                               {
-                                       vector where;
-                                       if(dropmark.cnt > time)
-                                       {
-                                               where = project_3d_to_2d(dropmark.origin);
-                                               picsize = draw_getimagesize(raptor_drop) * 0.25;
-
-                                               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;
-                                                       where_z = 0;
-                                                       drawpic(where, raptor_drop, picsize, '2 0 0', 1, DRAWFLAG_ADDITIVE);
-                                               }
-                                       }
-                               }
-                       }
+float v_raptor(float req)
+{
+       switch(req)
+       {
+               case VR_HUD:
+               {
+                       string crosshair;
 
-                       if (scoreboard_showscores)
-                               HUD_DrawScoreboard();
-                       else
+                       switch(weapon2mode)
                        {
-                               picsize = draw_getimagesize(raptor_xhair);
-                               picsize_x *= 0.5;
-                               picsize_y *= 0.5;
-
-                               drawpic('0.5 0 0' * (vid_conwidth - picsize_x) + '0 0.5 0' * (vid_conheight - picsize_y), raptor_xhair, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+                               case RSM_FLARE: crosshair = vCROSS_RAIN;  break;
+                               case RSM_BOMB:  crosshair = vCROSS_BURST; break;
+                               default:        crosshair = vCROSS_BURST;
                        }
-                       
-                       return TRUE;
+
+                       Vehicles_drawHUD(VEH_RAPTOR.m_icon, "vehicle_raptor_weapon1", "vehicle_raptor_weapon2",
+                                                        "vehicle_icon_ammo1", autocvar_hud_progressbar_vehicles_ammo1_color,
+                                                        "vehicle_icon_ammo2", autocvar_hud_progressbar_vehicles_ammo2_color,
+                                                        crosshair);
+                       return true;
                }
                case VR_SETUP:
                {
-                       AuxiliaryXhair[0].axh_image   = "gfx/vehicles/axh-special2.tga";
-                       AuxiliaryXhair[0].axh_scale   = 0.5;
-                       
-                       AuxiliaryXhair[1].axh_image = "gfx/vehicles/axh-bracket.tga";
-                       AuxiliaryXhair[1].axh_scale = 0.25;
-                       return TRUE;
+                       AuxiliaryXhair[1].axh_image = vCROSS_LOCK;
+                       return true;
                }
                case VR_PRECACHE:
                {
-                       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_folded.md3");
-                       precache_model ("models/vehicles/raptor_body.dpm");
-                       
-                       return TRUE;
+                       return true;
                }
        }
 
-       return TRUE;
+       return true;
 }
 
 #endif // CSQC