]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Make racer hover on lava and slime
authorMario <zacjardine@y7mail.com>
Wed, 4 Mar 2015 05:34:57 +0000 (16:34 +1100)
committerMario <zacjardine@y7mail.com>
Wed, 4 Mar 2015 05:34:57 +0000 (16:34 +1100)
qcsrc/common/vehicles/unit/racer.qc
qcsrc/common/vehicles/unit/yugo.qc

index 169d70b6491a02176ad097a47abe9849be4192b9..fa9b6c60a3feb30941d690dae578f6fbc9bb6454 100644 (file)
@@ -26,6 +26,8 @@ float autocvar_g_vehicle_racer_waterburn_speed;
 float autocvar_g_vehicle_racer_water_speed_forward;
 float autocvar_g_vehicle_racer_water_speed_strafe;
 
+float autocvar_g_vehicle_racer_pitchlimit = 30;
+
 float autocvar_g_vehicle_racer_water_downforce = 0.03;
 float autocvar_g_vehicle_racer_water_upforcedamper = 15;
 
@@ -122,7 +124,8 @@ void racer_align4point(float _delta)
 
        float uforce = autocvar_g_vehicle_racer_upforcedamper;
        
-       if(pointcontents(self.origin - '0 0 64') == CONTENT_WATER)
+       int cont = pointcontents(self.origin - '0 0 64');
+       if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME)
        {
                uforce = autocvar_g_vehicle_racer_water_upforcedamper;
 
@@ -215,7 +218,8 @@ void racer_rocket_groundhugger()
                self.velocity_z -= 1600 * sys_frametime; // 2x grav looks better for this one
        }
        
-       if(pointcontents(self.origin - '0 0 32') == CONTENT_WATER)
+       int cont = pointcontents(self.origin - '0 0 32');
+       if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME)
                self.velocity_z += 200;
 
        UpdateCSQCProjectile(self);
@@ -342,7 +346,7 @@ float racer_frame()
        // 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);
+       racer.angles_x = bound(-autocvar_g_vehicle_racer_pitchlimit, anglemods(racer.angles_x + ftmp), autocvar_g_vehicle_racer_pitchlimit);
 
        makevectors(racer.angles);
        racer.angles_x *= -1;
@@ -351,9 +355,10 @@ float racer_frame()
        df = racer.velocity * -autocvar_g_vehicle_racer_friction;
        //racer.velocity_z = ftmp;
 
+       int cont = pointcontents(racer.origin);
        if(vlen(player.movement) != 0)
        {
-               if(pointcontents(racer.origin) == CONTENT_WATER)
+               if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME)
                {
                        if(player.movement_x) { df += v_forward * ((player.movement_x > 0) ? autocvar_g_vehicle_racer_water_speed_forward : -autocvar_g_vehicle_racer_water_speed_forward); }
                        if(player.movement_y) { df += v_right * ((player.movement_y > 0) ? autocvar_g_vehicle_racer_water_speed_strafe : -autocvar_g_vehicle_racer_water_speed_strafe); }
@@ -389,7 +394,7 @@ float racer_frame()
 
                racer.wait = time;
 
-               if(pointcontents(racer.origin) == CONTENT_WATER)
+               if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME)
                {
                        racer.vehicle_energy -= autocvar_g_vehicle_racer_waterburn_cost * frametime;
                        df += (v_forward * autocvar_g_vehicle_racer_waterburn_speed);
@@ -421,7 +426,7 @@ float racer_frame()
                sound (racer.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
        }
 
-       if(pointcontents(racer.origin) == CONTENT_WATER)
+       if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME)
                racer.racer_watertime = time;
 
        float dforce = autocvar_g_vehicle_racer_downforce;
@@ -532,7 +537,8 @@ void racer_think()
 
        float forced = autocvar_g_vehicle_racer_upforcedamper;
 
-       if(pointcontents(self.origin - '0 0 64') == CONTENT_WATER)
+       int cont = pointcontents(self.origin - '0 0 64');
+       if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME)
        {
                forced = autocvar_g_vehicle_racer_water_upforcedamper;
                self.velocity_z += 200;
index 634b37096bf12b692eb5d030b14d33fc457dd4f0..209b0e1bc0eeabe8c267e069e22423b11a7772b9 100644 (file)
@@ -89,7 +89,8 @@ void yugo_align4point(float _delta)
 
    self.velocity += push_vector * _delta;
    
-   if(pointcontents(self.origin - '0 0 64') == CONTENT_WATER)
+       int cont = pointcontents(self.origin - '0 0 64');
+       if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME)
                self.velocity_z += 200;
 
        // Anti ocilation
@@ -288,7 +289,8 @@ void yugo_think()
        vector df = self.velocity * -autocvar_g_vehicle_yugo_friction;
        df_z += (1 - trace_fraction) * ((self.owner) ? autocvar_g_vehicle_yugo_hoverpower : autocvar_g_vehicle_yugo_hoverpower_idle) + sin(time * 2) * (autocvar_g_vehicle_yugo_springlength * 2);
 
-       if(pointcontents(self.origin - '0 0 64') == CONTENT_WATER)
+       int cont = pointcontents(self.origin - '0 0 64');
+       if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME)
                self.velocity_z += 200;
 
        self.velocity += df * pushdeltatime;