]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/vehicles/unit/racer.qc
Turrets: cleanup
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / vehicles / unit / racer.qc
index 38b06c3b3a80dd72fe182366622bfb9d9c4397b7..3c0db885461bafbf9fb0cf29c364a462d21e187b 100644 (file)
@@ -1,5 +1,6 @@
 #ifndef VEHICLE_RACER
 #define VEHICLE_RACER
+
 #ifndef MENUQC
 int v_racer(int);
 #endif
@@ -19,13 +20,36 @@ REGISTER_VEHICLE_SIMPLE(
     this.vehicle_func = v_racer;
 #endif
 }
+
+#include "../../weapons/all.qh"
+
+CLASS(RacerAttack, PortoLaunch)
+/* flags     */ ATTRIB(RacerAttack, spawnflags, int, WEP_TYPE_OTHER);
+/* impulse   */ ATTRIB(RacerAttack, impulse, int, 3);
+/* refname   */ ATTRIB(RacerAttack, netname, string, "racercannon");
+/* wepname   */ ATTRIB(RacerAttack, message, string, _("Racer cannon"));
+ENDCLASS(RacerAttack)
+REGISTER_WEAPON(RACER, NEW(RacerAttack));
+
 #endif
 
 #ifdef IMPLEMENTATION
 #ifdef SVQC
-#include "../../effects.qh"
+#include "../../effects/effects.qh"
 #include "../../triggers/trigger/impulse.qh"
 
+void racer_fire_cannon(string tagname);
+METHOD(RacerAttack, wr_think, bool(entity thiswep)) {
+       SELFPARAM();
+       if (self.BUTTON_ATCK)
+       if (weapon_prepareattack(0, 0)) {
+               W_SetupShot_Dir(self, v_forward, false, 0, W_Sound("lasergun_fire"), CH_WEAPON_B, 0);
+               racer_fire_cannon("tag_fire1");
+               weapon_thinkf(WFRAME_FIRE1, WEP_CVAR(machinegun, sustained_refire), w_ready);
+       }
+       return true;
+}
+
 bool autocvar_g_vehicle_racer;
 
 float autocvar_g_vehicle_racer_speed_afterburn;
@@ -111,7 +135,7 @@ vector autocvar_g_vehicle_racer_bouncepain;
 var vector racer_force_from_tag(string tag_name, float spring_length, float max_power);
 
 void racer_align4point(float _delta)
-{
+{SELFPARAM();
        vector push_vector;
        float fl_push, fr_push, bl_push, br_push;
 
@@ -169,12 +193,12 @@ void racer_align4point(float _delta)
 }
 
 void racer_fire_cannon(string tagname)
-{
+{SELFPARAM();
        vector v;
        entity bolt;
 
        v = gettaginfo(self, gettagindex(self, tagname));
-       bolt = vehicles_projectile(EFFECT_RACER_MUZZLEFLASH.eent_eff_name, W_Sound("lasergun_fire"),
+       bolt = vehicles_projectile(EFFECT_RACER_MUZZLEFLASH.eent_eff_name, SND(LASERGUN_FIRE),
                                                   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);
@@ -186,7 +210,7 @@ void racer_fire_cannon(string tagname)
 }
 
 void racer_rocket_groundhugger()
-{
+{SELFPARAM();
        vector olddir, newdir;
        float oldvel, newvel;
 
@@ -238,7 +262,7 @@ void racer_rocket_groundhugger()
 }
 
 void racer_rocket_tracker()
-{
+{SELFPARAM();
        vector olddir, newdir;
        float oldvel, newvel;
 
@@ -290,9 +314,9 @@ void racer_rocket_tracker()
 }
 
 void racer_fire_rocket(string tagname, entity trg)
-{
+{SELFPARAM();
        vector v = gettaginfo(self, gettagindex(self, tagname));
-       entity rocket = vehicles_projectile(EFFECT_RACER_ROCKETLAUNCH.eent_eff_name, W_Sound("rocket_fire"),
+       entity rocket = vehicles_projectile(EFFECT_RACER_ROCKETLAUNCH.eent_eff_name, SND(ROCKET_FIRE),
                                                   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);
@@ -310,7 +334,7 @@ void racer_fire_rocket(string tagname, entity trg)
 }
 
 float racer_frame()
-{
+{SELFPARAM();
        entity player, racer;
        vector df;
        float ftmp;
@@ -324,7 +348,7 @@ float racer_frame()
 
        player  = self;
        racer   = self.vehicle;
-       self    = racer;
+       setself(racer);
 
        vehicles_painframe();
 
@@ -333,7 +357,7 @@ float racer_frame()
 
        if(racer.deadflag != DEAD_NO)
        {
-               self = player;
+               setself(player);
                player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
                return 1;
        }
@@ -385,7 +409,7 @@ float racer_frame()
                {
                        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);
+                       sound (self, CH_TRIGGER_SINGLE, SND_VEH_RACER_MOVE, VOL_VEHICLEENGINE, ATTEN_NORM);
                }
 #endif
        }
@@ -396,7 +420,7 @@ float racer_frame()
                {
                        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);
+                       sound (self, CH_TRIGGER_SINGLE, SND_VEH_RACER_IDLE, VOL_VEHICLEENGINE, ATTEN_NORM);
                }
        }
 #endif
@@ -435,14 +459,14 @@ float racer_frame()
                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);
+                       sound (racer.tur_head, CH_TRIGGER_SINGLE, SND_VEH_RACER_BOOST, VOL_VEHICLEENGINE, ATTEN_NORM);
                }
 #endif
        }
        else
        {
                racer.strength_finished = 0;
-               sound (racer.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+               sound (racer.tur_head, CH_TRIGGER_SINGLE, SND_Null, VOL_VEHICLEENGINE, ATTEN_NORM);
        }
 
        if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME)
@@ -545,12 +569,12 @@ float racer_frame()
        setorigin(player,racer.origin + '0 0 32');
        player.velocity = racer.velocity;
 
-       self = player;
+       setself(player);
        return 1;
 }
 
 void racer_think()
-{
+{SELFPARAM();
        self.nextthink = time;
 
        float pushdeltatime = time - self.lastpushtime;
@@ -579,17 +603,17 @@ void racer_think()
        self.angles_x *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * pushdeltatime);
        self.angles_z *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * pushdeltatime);
 
-       CSQCMODEL_AUTOUPDATE();
+       CSQCMODEL_AUTOUPDATE(self);
 }
 
 void racer_exit(float eject)
-{
+{SELFPARAM();
        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);
+       sound (self.tur_head, CH_TRIGGER_SINGLE, SND_Null, VOL_VEHICLEENGINE, ATTEN_NORM);
 
        if(!self.owner)
                return;
@@ -627,7 +651,7 @@ void racer_exit(float eject)
 }
 
 void racer_blowup()
-{
+{SELFPARAM();
        self.deadflag   = DEAD_DEAD;
        self.vehicle_exit(VHEF_NORMAL);
 
@@ -650,17 +674,17 @@ void racer_blowup()
 }
 
 void racer_blowup_think()
-{
+{SELFPARAM();
        self.nextthink = time;
 
        if(time >= self.delay)
                racer_blowup();
 
-       CSQCMODEL_AUTOUPDATE();
+       CSQCMODEL_AUTOUPDATE(self);
 }
 
 void racer_deadtouch()
-{
+{SELFPARAM();
        self.avelocity_x *= 0.7;
        self.cnt -= 1;
        if(self.cnt <= 0)
@@ -668,7 +692,7 @@ void racer_deadtouch()
 }
 
 void spawnfunc_vehicle_racer()
-{
+{SELFPARAM();
        if(!autocvar_g_vehicle_racer) { remove(self); return; }
        if(!vehicle_initialize(VEH_RACER, false)) { remove(self); return; }
 }
@@ -678,7 +702,7 @@ void spawnfunc_vehicle_racer()
 #ifdef CSQC
 #if 0
 void racer_draw()
-{
+{SELFPARAM();
        float pushdeltatime = time - self.lastpushtime;
        if (pushdeltatime > 0.15) pushdeltatime = 0;
        self.lastpushtime = time;
@@ -711,7 +735,7 @@ void racer_draw()
 #endif
 
 bool v_racer(int req)
-{
+{SELFPARAM();
        switch(req)
        {
                case VR_IMPACT:
@@ -856,20 +880,6 @@ bool v_racer(int req)
 
                case VR_PRECACHE:
                {
-               #ifdef SVQC
-                       precache_sound (W_Sound("lasergun_fire"));
-                       precache_sound (W_Sound("rocket_fire"));
-
-                       precache_sound ("vehicles/racer_idle.wav");
-                       precache_sound ("vehicles/racer_move.wav");
-                       precache_sound ("vehicles/racer_boost.wav");
-
-                       precache_model ("models/vhshield.md3");
-               #endif
-               #ifndef MENUQC
-                       precache_model ("models/vehicles/wakizashi.dpm");
-                       precache_model ("models/vehicles/wakizashi_cockpit.dpm");
-               #endif
                        return true;
                }
        }