X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fvehicles%2Fvehicle%2Fracer.qc;h=adffbfce002414ebbac5ab7bffea06cb5d5592d4;hb=HEAD;hp=ff124d0b496bf42effdc92c167d0a052716b6ad6;hpb=07a09abd9a97bbd7939e38bea4841e7d5e88dcce;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/vehicles/vehicle/racer.qc b/qcsrc/common/vehicles/vehicle/racer.qc index ff124d0b4..adffbfce0 100644 --- a/qcsrc/common/vehicles/vehicle/racer.qc +++ b/qcsrc/common/vehicles/vehicle/racer.qc @@ -1,10 +1,13 @@ #include "racer.qh" +#if defined(SVQC) + #include + #include +#endif + #ifdef GAMEQC #ifdef SVQC -#include - 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,7 @@ 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) { @@ -287,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 @@ -324,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)) { @@ -371,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;