X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fvehicles%2Fracer.qc;h=777820e48c261c26f18cc8c9b093b42abfa71a85;hb=87d4a81433ca7dbd761782f9b4b235976c7cdae5;hp=7f7a73691d893fa35974f18c524df4174b9bb425;hpb=c3150ae55b03b230d3c9d55c2cbb2fb1d0e7b3a8;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/vehicles/racer.qc b/qcsrc/server/vehicles/racer.qc index 7f7a73691..777820e48 100644 --- a/qcsrc/server/vehicles/racer.qc +++ b/qcsrc/server/vehicles/racer.qc @@ -1,6 +1,5 @@ #define RACER_MIN '-120 -120 -40' #define RACER_MAX '120 120 40' -#define RACER_ENGINE "sound/vehicles/racer.wav" #ifdef SVQC void racer_exit(float eject); @@ -67,6 +66,10 @@ float autocvar_g_vehicle_racer_blowup_coredamage; float autocvar_g_vehicle_racer_blowup_edgedamage; float autocvar_g_vehicle_racer_blowup_forceintensity; +float autocvar_g_vehicle_racer_bouncefactor; +float autocvar_g_vehicle_racer_bouncestop; +vector autocvar_g_vehicle_racer_bouncepain; + var vector racer_force_from_tag(string tag_name, float spring_length, float max_power); void racer_align4point() @@ -256,13 +259,17 @@ float racer_frame() vector df; float ftmp; - player = self; - racer = self.vehicle; + if(intermission_running) + return 1; + player = self; + racer = self.vehicle; + self = racer; + player.BUTTON_ZOOM = player.BUTTON_CROUCH = 0; - - self = racer; - + + vehicles_painframe(); + if(racer.deadflag != DEAD_NO) { self = player; @@ -319,7 +326,7 @@ float racer_frame() { self.sounds = 1; self.sound_nexttime = time + 10.922667; //soundlength("vehicles/racer_move.wav"); - sound (self, CHAN_TRIGGER, "vehicles/racer_move.wav", VOL_VEHICLEENGINE, ATTN_NORM); + sound (self, CH_TRIGGER_SINGLE, "vehicles/racer_move.wav", VOL_VEHICLEENGINE, ATTN_NORM); } } else @@ -328,7 +335,7 @@ float racer_frame() { self.sounds = 0; self.sound_nexttime = time + 11.888604; //soundlength("vehicles/racer_idle.wav"); - sound (self, CHAN_TRIGGER, "vehicles/racer_idle.wav", VOL_VEHICLEENGINE, ATTN_NORM); + sound (self, CH_TRIGGER_SINGLE, "vehicles/racer_idle.wav", VOL_VEHICLEENGINE, ATTN_NORM); } } @@ -346,23 +353,22 @@ float racer_frame() { traceline(self.origin, self.origin - '0 0 256', MOVE_NORMAL, self); if(trace_fraction != 1.0) - pointparticles(particleeffectnum("smoke_small"), trace_endpos, '0 0 0', 1); + pointparticles(particleeffectnum("smoke_small"), trace_endpos, '0 0 0', 1); self.invincible_finished = time + 0.1 + (random() * 0.1); } - if(self.strength_finished < time) { //self.sounds = 2; self.strength_finished = time + 10.922667; //soundlength("vehicles/racer_boost.wav"); - sound (self, CHAN_PAIN, "vehicles/racer_boost.wav", VOL_VEHICLEENGINE, ATTN_NORM); + sound (self.tur_head, CH_TRIGGER_SINGLE, "vehicles/racer_boost.wav", VOL_VEHICLEENGINE, ATTN_NORM); } } else { self.strength_finished = 0; - sound (self, CHAN_PAIN, "misc/null.wav", VOL_VEHICLEENGINE, ATTN_NORM); + sound (self.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTN_NORM); } @@ -489,8 +495,8 @@ void racer_think() void racer_enter() { self.movetype = MOVETYPE_BOUNCE; - self.owner.vehicle_health = (self.vehicle_health / autocvar_g_vehicle_racer_health); - self.owner.vehicle_shield = (self.vehicle_shield / autocvar_g_vehicle_racer_shield); + self.owner.vehicle_health = (self.vehicle_health / autocvar_g_vehicle_racer_health) * 100; + self.owner.vehicle_shield = (self.vehicle_shield / autocvar_g_vehicle_racer_shield) * 100; if(self.owner.flagcarried) setorigin(self.owner.flagcarried, '-190 0 96'); @@ -503,7 +509,7 @@ void racer_exit(float eject) self.think = racer_think; self.nextthink = time; self.movetype = MOVETYPE_TOSS; - sound (self, CHAN_PAIN, "misc/null.wav", VOL_VEHICLEENGINE, ATTN_NORM); + sound (self.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTN_NORM); if not (self.owner) return; @@ -515,16 +521,24 @@ void racer_exit(float eject) spot = vehicles_findgoodexit(spot); setorigin(self.owner , spot); self.owner.velocity = (v_up + v_forward * 0.25) * 750; + self.owner.oldvelocity = self.owner.velocity; } else { + self.owner.velocity = normalize(self.velocity) * autocvar_sv_maxairspeed; + self.owner.oldvelocity = self.owner.velocity; spot = self.origin - v_forward * 200 + '0 0 64'; spot = vehicles_findgoodexit(spot); setorigin(self.owner , spot); } - + antilag_clear(self.owner); self.owner = world; } +void racer_impact() +{ + if(autocvar_g_vehicle_racer_bouncepain_x) + vehilces_impact(autocvar_g_vehicle_racer_bouncepain_x, autocvar_g_vehicle_racer_bouncepain_y, autocvar_g_vehicle_racer_bouncepain_z); +} void racer_spawn() { @@ -539,14 +553,15 @@ void racer_spawn() self.scale = 0.5; setsize(self, RACER_MIN * 0.5, RACER_MAX * 0.5); + self.bouncefactor = autocvar_g_vehicle_racer_bouncefactor; + self.bouncestop = autocvar_g_vehicle_racer_bouncestop; + self.vehicle_impact = racer_impact; + //self.destvec = autocvar_g_vehicle_racer_bouncepain; } void racer_blowup() { - sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); - pointparticles(particleeffectnum("explosion_big"), self.origin, '0 0 0', 1); - self.deadflag = DEAD_DEAD; self.vehicle_exit(VHEF_NORMAL); @@ -556,7 +571,6 @@ void racer_blowup() autocvar_g_vehicle_racer_blowup_forceintensity, DEATH_WAKIBLOWUP, world); - self.alpha = -1; self.nextthink = time + autocvar_g_vehicle_racer_respawntime; self.think = racer_spawn; self.movetype = MOVETYPE_NONE; @@ -573,7 +587,6 @@ void racer_blowup() void racer_deadtouch() { - dprint("Boink!\n"); self.avelocity_x *= 0.7; self.cnt -= 1; if(self.cnt <= 0) @@ -584,7 +597,6 @@ void racer_die() { self.health = 0; self.event_damage = SUB_Null; - self.iscreature = FALSE; self.solid = SOLID_CORPSE; self.takedamage = DAMAGE_NO; self.deadflag = DEAD_DYING; @@ -613,7 +625,7 @@ void racer_dinit() if not (vehicle_initialize( "Wakizashi", "models/vehicles/wakizashi.dpm", - "", + "null", // we need this so tur_head is networked and usable for sounds "models/vehicles/wakizashi_cockpit.dpm", "", "", "tag_viewport", HUD_WAKIZASHI, @@ -644,11 +656,11 @@ void racer_dinit() void spawnfunc_vehicle_racer() { + self.vehicle_flags |= VHF_DMGSHAKE; + self.vehicle_flags |= VHF_DMGROLL; - precache_sound ("weapons/laserimpact.wav"); precache_sound ("weapons/lasergun_fire.wav"); precache_sound ("weapons/rocket_fire.wav"); - precache_sound ("weapons/rocket_impact.wav"); precache_sound ("vehicles/racer_idle.wav"); precache_sound ("vehicles/racer_move.wav"); @@ -673,6 +685,10 @@ void spawnfunc_vehicle_racer() self.vehicle_flags |= VHF_HEALTHREGEN; self.think = racer_dinit; - self.nextthink = time + (autocvar_g_vehicles_delayspawn ? autocvar_g_vehicle_racer_respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter) : 0.5); + + if(g_assault) + self.nextthink = time + 0.5; + else + self.nextthink = time + (autocvar_g_vehicles_delayspawn ? autocvar_g_vehicle_racer_respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter) : 0.5); } #endif // SVQC