]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/vehicles/vehicle/racer.qc
Transifex autosync
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / vehicles / vehicle / racer.qc
index b3cac72e5c8d8dddad0a0e72ae103ccf23d3fdf8..adffbfce002414ebbac5ab7bffea06cb5d5592d4 100644 (file)
@@ -1,10 +1,13 @@
 #include "racer.qh"
 
+#if defined(SVQC)
+       #include <common/gamemodes/gamemode/ctf/sv_ctf.qh>
+       #include <common/mapobjects/trigger/impulse.qh>
+#endif
+
 #ifdef GAMEQC
 
 #ifdef SVQC
-#include <common/mapobjects/trigger/impulse.qh>
-
 bool autocvar_g_vehicle_racer = true;
 
 float autocvar_g_vehicle_racer_thinkrate = 0.05; // TODO: any higher causes it to sink in liquids
@@ -78,6 +81,7 @@ float autocvar_g_vehicle_racer_bouncestop = 0;
 vector autocvar_g_vehicle_racer_bouncepain = '200 0.15 150';
 
 .float racer_watertime;
+.float racer_air_finished; // TODO: use a standard air meter for entities
 
 var .vector(entity this, string tag_name, float spring_length, float max_power) racer_force_from_tag;
 
@@ -111,7 +115,7 @@ void racer_align4point(entity this, entity player, float _delta)
        {
                uforce = autocvar_g_vehicle_racer_water_upforcedamper;
 
-               if(PHYS_INPUT_BUTTON_CROUCH(player) && time < this.air_finished)
+               if(PHYS_INPUT_BUTTON_CROUCH(player) && time < this.racer_air_finished)
                        this.velocity_z += 30;
                else
                        this.velocity_z += 200;
@@ -142,7 +146,7 @@ void racer_align4point(entity this, entity player, float _delta)
 void racer_fire_rocket_aim(entity this, entity player, string tagname, entity trg)
 {
        vector v = gettaginfo(this, gettagindex(this, tagname));
-       racer_fire_rocket(player, v, v_forward, trg);
+       racer_fire_rocket(this, player, v, v_forward, trg);
 }
 
 bool racer_frame(entity this, float dt)
@@ -151,6 +155,7 @@ bool racer_frame(entity this, float dt)
        entity vehic = player.vehicle;
        return = true;
 
+#ifdef SVQC
        if(game_stopped)
        {
                vehic.solid = SOLID_NOT;
@@ -158,24 +163,29 @@ bool racer_frame(entity this, float dt)
                set_movetype(vehic, MOVETYPE_NONE);
                return;
        }
+#endif
 
        vehicles_frame(vehic, player);
 
        int cont = Mod_Q1BSP_SuperContentsFromNativeContents(pointcontents(vehic.origin));
        if(!(cont & DPCONTENTS_WATER))
-               vehic.air_finished = 0;
-       else if (!vehic.air_finished)
-               vehic.air_finished = time + autocvar_g_vehicle_racer_water_time;
+               vehic.racer_air_finished = 0;
+       else if (!vehic.racer_air_finished)
+               vehic.racer_air_finished = time + autocvar_g_vehicle_racer_water_time;
 
+#ifdef SVQC
        if(IS_DEAD(vehic))
        {
                PHYS_INPUT_BUTTON_ATCK(player) = PHYS_INPUT_BUTTON_ATCK2(player) = false;
                return;
        }
+#endif
 
        racer_align4point(vehic, player, dt);
 
+#ifdef SVQC
        PHYS_INPUT_BUTTON_ZOOM(player) = PHYS_INPUT_BUTTON_CROUCH(player) = false;
+#endif
 
        vehic.angles_x *= -1;
 
@@ -199,17 +209,17 @@ bool racer_frame(entity this, float dt)
        vector df = vehic.velocity * -autocvar_g_vehicle_racer_friction;
        //vehic.velocity_z = ftmp;
 
-       if(CS(player).movement)
+       if(PHYS_CS(player).movement)
        {
                if(cont & DPCONTENTS_LIQUIDSMASK)
                {
-                       if(CS(player).movement_x) { df += v_forward * ((CS(player).movement_x > 0) ? autocvar_g_vehicle_racer_water_speed_forward : -autocvar_g_vehicle_racer_water_speed_forward); }
-                       if(CS(player).movement_y) { df += v_right * ((CS(player).movement_y > 0) ? autocvar_g_vehicle_racer_water_speed_strafe : -autocvar_g_vehicle_racer_water_speed_strafe); }
+                       if(PHYS_CS(player).movement_x) { df += v_forward * ((PHYS_CS(player).movement_x > 0) ? autocvar_g_vehicle_racer_water_speed_forward : -autocvar_g_vehicle_racer_water_speed_forward); }
+                       if(PHYS_CS(player).movement_y) { df += v_right * ((PHYS_CS(player).movement_y > 0) ? autocvar_g_vehicle_racer_water_speed_strafe : -autocvar_g_vehicle_racer_water_speed_strafe); }
                }
                else
                {
-                       if(CS(player).movement_x) { df += v_forward * ((CS(player).movement_x > 0) ? autocvar_g_vehicle_racer_speed_forward : -autocvar_g_vehicle_racer_speed_forward); }
-                       if(CS(player).movement_y) { df += v_right * ((CS(player).movement_y > 0) ? autocvar_g_vehicle_racer_speed_strafe : -autocvar_g_vehicle_racer_speed_strafe); }
+                       if(PHYS_CS(player).movement_x) { df += v_forward * ((PHYS_CS(player).movement_x > 0) ? autocvar_g_vehicle_racer_speed_forward : -autocvar_g_vehicle_racer_speed_forward); }
+                       if(PHYS_CS(player).movement_y) { df += v_right * ((PHYS_CS(player).movement_y > 0) ? autocvar_g_vehicle_racer_speed_strafe : -autocvar_g_vehicle_racer_speed_strafe); }
                }
 
 #ifdef SVQC
@@ -255,6 +265,8 @@ bool racer_frame(entity this, float dt)
                }
 
 #ifdef SVQC
+               // TODO: move these to the client side where they belong
+               // NOTE: reusing .invincible_finished here as delay counter for the smoke effect
                if(vehic.invincible_finished < time)
                {
                        traceline(vehic.origin, vehic.origin - '0 0 256', MOVE_NORMAL, vehic);
@@ -264,6 +276,7 @@ bool racer_frame(entity this, float dt)
                        vehic.invincible_finished = time + 0.1 + (random() * 0.1);
                }
 
+               // NOTE: reusing .strength_finished here as a sound delay counter
                if(vehic.strength_finished < time)
                {
                        vehic.strength_finished = time + 10.922667; //soundlength("vehicles/racer_boost.wav");
@@ -285,7 +298,7 @@ bool racer_frame(entity this, float dt)
                dforce = autocvar_g_vehicle_racer_water_downforce;
 
        df -= v_up * (vlen(vehic.velocity) * dforce);
-       CS(player).movement = vehic.velocity += df * dt;
+       PHYS_CS(player).movement = vehic.velocity += df * dt;
 
 #ifdef SVQC
 
@@ -322,7 +335,7 @@ bool racer_frame(entity this, float dt)
                }
        }
 
-       if(!weaponLocked(player))
+       if (!weaponLocked(player) && !weaponUseForbidden(player))
        if(time > vehic.delay)
        if(PHYS_INPUT_BUTTON_ATCK2(player))
        {
@@ -369,10 +382,14 @@ bool racer_frame(entity this, float dt)
 #endif
 
        setorigin(player, vehic.origin + '0 0 32');
+#ifdef SVQC
        player.oldorigin = player.origin; // negate fall damage
+#endif
        player.velocity = vehic.velocity;
 }
+#endif
 
+#ifdef SVQC
 void racer_think(entity this)
 {
        float dt = autocvar_g_vehicle_racer_thinkrate;