]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/vehicles/vehicle/racer.qc
Merge branch 'terencehill/menu_optimization' into 'master'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / vehicles / vehicle / racer.qc
index 38c6844d49415a1e7ded8d85823baf13c432cbfc..848fa2ff78fc953af82da7f8577f15efe9041165 100644 (file)
@@ -7,6 +7,8 @@ CLASS(Racer, Vehicle)
 /* spawnflags */ ATTRIB(Racer, spawnflags, int, VHF_DMGSHAKE | VHF_DMGROLL);
 /* mins       */ ATTRIB(Racer, mins, vector, '-120 -120 -40' * 0.5);
 /* maxs       */ ATTRIB(Racer, maxs, vector, '120 120 40' * 0.5);
+/* view offset*/ ATTRIB(Racer, view_ofs, vector, '0 0 50');
+/* view dist  */ ATTRIB(Racer, height, float, 200);
 /* model         */ ATTRIB(Racer, mdl, string, "models/vehicles/wakizashi.dpm");
 /* model         */ ATTRIB(Racer, model, string, "models/vehicles/wakizashi.dpm");
 /* head_model */ ATTRIB(Racer, head_model, string, "null");
@@ -27,8 +29,7 @@ REGISTER_VEHICLE(RACER, NEW(Racer));
 #include "racer_weapon.qc"
 
 #ifdef SVQC
-#include "../../effects/effects.qh"
-#include "../../triggers/trigger/impulse.qh"
+#include <common/triggers/trigger/impulse.qh>
 
 bool autocvar_g_vehicle_racer;
 
@@ -94,48 +95,48 @@ vector autocvar_g_vehicle_racer_bouncepain;
 
 .float racer_watertime;
 
-var vector racer_force_from_tag(string tag_name, float spring_length, float max_power);
+var vector racer_force_from_tag(entity this, string tag_name, float spring_length, float max_power);
 
-void racer_align4point(float _delta)
-{SELFPARAM();
+void racer_align4point(entity this, 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);
+       push_vector  = racer_force_from_tag(this, "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);
+       //vehicles_sweap_collision(force_fromtag_origin, this.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);
+       push_vector += racer_force_from_tag(this, "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);
+       //vehicles_sweap_collision(force_fromtag_origin, this.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);
+       push_vector += racer_force_from_tag(this, "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);
+       //vehicles_sweap_collision(force_fromtag_origin, this.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);
+       push_vector += racer_force_from_tag(this, "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);
+       //vehicles_sweap_collision(force_fromtag_origin, this.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier);
 
-       self.velocity += push_vector * _delta;
+       this.velocity += push_vector * _delta;
 
        float uforce = autocvar_g_vehicle_racer_upforcedamper;
 
-       int cont = pointcontents(self.origin - '0 0 64');
+       int cont = pointcontents(this.origin - '0 0 64');
        if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME)
        {
                uforce = autocvar_g_vehicle_racer_water_upforcedamper;
 
-               if(self.owner.BUTTON_CROUCH && time < self.air_finished)
-                       self.velocity_z += 30;
+               if(this.owner.BUTTON_CROUCH && time < this.air_finished)
+                       this.velocity_z += 30;
                else
-                       self.velocity_z += 200;
+                       this.velocity_z += 200;
        }
 
 
        // Anti ocilation
-       if(self.velocity_z > 0)
-               self.velocity_z *= 1 - uforce * _delta;
+       if(this.velocity_z > 0)
+               this.velocity_z *= 1 - uforce * _delta;
 
        push_vector_x =  (fl_push - bl_push);
        push_vector_x += (fr_push - br_push);
@@ -146,19 +147,19 @@ void racer_align4point(float _delta)
        push_vector_z *= 360;
 
        // Apply angle diffrance
-       self.angles_z += push_vector_z * _delta;
-       self.angles_x += push_vector_x * _delta;
+       this.angles_z += push_vector_z * _delta;
+       this.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);
+       this.angles_x *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * _delta);
+       this.angles_z *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * _delta);
 }
 
-void racer_fire_rocket_aim(string tagname, entity trg)
+void racer_fire_rocket_aim(entity player, string tagname, entity trg)
 {
-       SELFPARAM();
-       vector v = gettaginfo(self, gettagindex(self, tagname));
-       racer_fire_rocket(v, v_forward, trg);
+       entity racer = player.vehicle;
+       vector v = gettaginfo(racer, gettagindex(racer, tagname));
+       racer_fire_rocket(player, v, v_forward, trg);
 }
 
 float racer_frame()
@@ -178,19 +179,19 @@ float racer_frame()
        racer   = self.vehicle;
        setself(racer);
 
-       vehicles_painframe();
+       vehicles_frame(racer, player);
 
        if(pointcontents(racer.origin) != CONTENT_WATER)
                racer.air_finished = time + autocvar_g_vehicle_racer_water_time;
 
-       if(racer.deadflag != DEAD_NO)
+       if(IS_DEAD(racer))
        {
                setself(player);
                player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
                return 1;
        }
 
-       racer_align4point(PHYS_INPUT_TIMELENGTH);
+       racer_align4point(self, PHYS_INPUT_TIMELENGTH);
 
        player.BUTTON_ZOOM = player.BUTTON_CROUCH = 0;
 
@@ -219,7 +220,7 @@ float racer_frame()
        //racer.velocity_z = ftmp;
 
        int cont = pointcontents(racer.origin);
-       if(vlen(player.movement) != 0)
+       if(player.movement)
        {
                if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME)
                {
@@ -258,7 +259,7 @@ float racer_frame()
        {
 #ifdef SVQC
                if(time - racer.wait > 0.2)
-                       pointparticles(particleeffectnum(EFFECT_RACER_BOOSTER), self.origin - v_forward * 32, v_forward  * vlen(self.velocity), 1);
+                       pointparticles(EFFECT_RACER_BOOSTER, self.origin - v_forward * 32, v_forward  * vlen(self.velocity), 1);
 #endif
 
                racer.wait = time;
@@ -279,7 +280,7 @@ float racer_frame()
                {
                        traceline(racer.origin, racer.origin - '0 0 256', MOVE_NORMAL, self);
                        if(trace_fraction != 1.0)
-                               pointparticles(particleeffectnum(EFFECT_SMOKE_SMALL), trace_endpos, '0 0 0', 1);
+                               pointparticles(EFFECT_SMOKE_SMALL, trace_endpos, '0 0 0', 1);
 
                        racer.invincible_finished = time + 0.1 + (random() * 0.1);
                }
@@ -322,12 +323,13 @@ float racer_frame()
                // Fix z-aim (for chase mode)
                crosshair_trace(player);
                w_shotdir.z = normalize(trace_endpos - org).z * 0.5;
-               wep1.wr_think(wep1, self, true, false);
+               .entity weaponentity = weaponentities[0];
+               wep1.wr_think(wep1, self, weaponentity, 1);
        }
 
        if(autocvar_g_vehicle_racer_rocket_locktarget)
        {
-               vehicles_locktarget((1 / autocvar_g_vehicle_racer_rocket_locking_time) * frametime,
+               vehicles_locktarget(self, (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);
 
@@ -351,12 +353,12 @@ float racer_frame()
 
                if(racer.misc_bulletcounter == 1)
                {
-                       racer_fire_rocket_aim("tag_rocket_r", (racer.lock_strength == 1 && racer.lock_target) ? racer.lock_target : world);
+                       racer_fire_rocket_aim(player, "tag_rocket_r", (racer.lock_strength == 1 && racer.lock_target) ? racer.lock_target : world);
                        player.vehicle_ammo2 = 50;
                }
                else if(racer.misc_bulletcounter == 2)
                {
-                       racer_fire_rocket_aim("tag_rocket_l", (racer.lock_strength == 1 && racer.lock_target) ? racer.lock_target : world);
+                       racer_fire_rocket_aim(player, "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;
@@ -452,7 +454,7 @@ void racer_exit(float eject)
        }
        else
        {
-               if(vlen(self.velocity) > 2 * autocvar_sv_maxairspeed)
+               if(vdist(self.velocity, >, 2 * autocvar_sv_maxairspeed))
                {
                        self.owner.velocity = normalize(self.velocity) * autocvar_sv_maxairspeed * 2;
                        self.owner.velocity_z += 200;
@@ -482,7 +484,7 @@ void racer_blowup()
                                        autocvar_g_vehicle_racer_blowup_edgedamage,
                                        autocvar_g_vehicle_racer_blowup_radius, world, world,
                                        autocvar_g_vehicle_racer_blowup_forceintensity,
-                                       DEATH_VH_WAKI_DEATH, world);
+                                       DEATH_VH_WAKI_DEATH.m_id, world);
 
        self.nextthink  = time + autocvar_g_vehicle_racer_respawntime;
        self.think        = vehicles_spawn;
@@ -532,17 +534,17 @@ void racer_draw()
        self.lastpushtime = time;
        if(!pushdeltatime) return;
 
-       tracebox(self.move_origin, self.mins, self.maxs, self.move_origin - ('0 0 1' * getstatf(STAT_VEH_RACER_SPRINGLENGTH)), MOVE_NOMONSTERS, self);
+       tracebox(self.move_origin, self.mins, self.maxs, self.move_origin - ('0 0 1' * STAT(VEH_RACER_SPRINGLENGTH)), MOVE_NOMONSTERS, self);
 
-       vector df = self.move_velocity * -getstatf(STAT_VEH_RACER_FRICTION);
-       df_z += (1 - trace_fraction) * getstatf(STAT_VEH_RACER_HOVERPOWER) + sin(time * 2) * (getstatf(STAT_VEH_RACER_SPRINGLENGTH) * 2);
+       vector df = self.move_velocity * -STAT(VEH_RACER_FRICTION);
+       df_z += (1 - trace_fraction) * STAT(VEH_RACER_HOVERPOWER) + sin(time * 2) * (STAT(VEH_RACER_SPRINGLENGTH) * 2);
 
-       float forced = getstatf(STAT_VEH_RACER_UPFORCEDAMPER);
+       float forced = STAT(VEH_RACER_UPFORCEDAMPER);
 
        int cont = pointcontents(self.move_origin - '0 0 64');
        if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME)
        {
-               forced = getstatf(STAT_VEH_RACER_WATER_UPFORCEDAMPER);
+               forced = STAT(VEH_RACER_WATER_UPFORCEDAMPER);
                self.move_velocity_z += 200;
        }
 
@@ -550,15 +552,15 @@ void racer_draw()
        if(self.move_velocity_z > 0)
                self.move_velocity_z *= 1 - forced * pushdeltatime;
 
-       self.move_angles_x *= 1 - (getstatf(STAT_VEH_RACER_ANGLESTABILIZER) * pushdeltatime);
-       self.move_angles_z *= 1 - (getstatf(STAT_VEH_RACER_ANGLESTABILIZER) * pushdeltatime);
+       self.move_angles_x *= 1 - (STAT(VEH_RACER_ANGLESTABILIZER) * pushdeltatime);
+       self.move_angles_z *= 1 - (STAT(VEH_RACER_ANGLESTABILIZER) * pushdeltatime);
 
        Movetype_Physics_MatchServer(false);
 }
 #endif
 #endif
 
-               METHOD(Racer, vr_impact, void(Racer thisveh))
+               METHOD(Racer, vr_impact, void(Racer thisveh, entity instance))
                {
                #ifdef SVQC
                        if(autocvar_g_vehicle_racer_bouncepain)
@@ -566,7 +568,7 @@ void racer_draw()
                #endif
                }
 
-               METHOD(Racer, vr_enter, void(Racer thisveh))
+               METHOD(Racer, vr_enter, void(Racer thisveh, entity instance))
                {
                #ifdef SVQC
                        self.movetype = MOVETYPE_BOUNCE;
@@ -581,7 +583,7 @@ void racer_draw()
                #endif
                }
 
-               METHOD(Racer, vr_spawn, void(Racer thisveh))
+               METHOD(Racer, vr_spawn, void(Racer thisveh, entity instance))
                {
                #ifdef SVQC
                        if(self.scale != 0.5)
@@ -619,7 +621,7 @@ void racer_draw()
                #endif
                }
 
-               METHOD(Racer, vr_death, void(Racer thisveh))
+               METHOD(Racer, vr_death, void(Racer thisveh, entity instance))
                {
                #ifdef SVQC
                        self.SendEntity         = func_null; // stop networking this racer (for now)
@@ -662,7 +664,7 @@ void racer_draw()
                        Vehicles_drawCrosshair(vCROSS_GUIDE);
                }
 #endif
-               METHOD(Racer, vr_setup, void(Racer thisveh))
+               METHOD(Racer, vr_setup, void(Racer thisveh, entity instance))
                {
                #ifdef SVQC
                        self.vehicle_exit = racer_exit;