X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fvehicles%2Fracer.qc;h=fa188bbb1da4e19dabdc535e37335b5a229949d9;hb=da0466955e8df540625b5db7e99df08d0af26e58;hp=7fefdeb366f334b4140ef92d7f703301e1dfabe8;hpb=8efe68106722fd143f10c172c71be6e869ff5b21;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/vehicles/racer.qc b/qcsrc/server/vehicles/racer.qc index 7fefdeb36..fa188bbb1 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,20 +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; - - if(player.BUTTON_USE) - { - vehicles_exit(VHEF_NORMAL); - self = player; - return 0; - } - + + vehicles_painframe(); + if(racer.deadflag != DEAD_NO) { self = player; @@ -326,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 @@ -335,28 +335,40 @@ 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); } } // Afterburn if (player.BUTTON_JUMP && racer.vehicle_energy >= (autocvar_g_vehicle_racer_afterburn_cost * frametime)) { + if(time - racer.wait > 0.2) + pointparticles(particleeffectnum("wakizashi_booster_smoke"), self.origin, '0 0 0', 1); + racer.wait = time; racer.vehicle_energy -= autocvar_g_vehicle_racer_afterburn_cost * frametime; df += (v_forward * autocvar_g_vehicle_racer_speed_afterburn); + if(self.invincible_finished < time) + { + 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); + + 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); } @@ -483,8 +495,11 @@ 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'); } void racer_exit(float eject) @@ -494,7 +509,8 @@ void racer_exit(float eject) self.think = racer_think; self.nextthink = time; self.movetype = MOVETYPE_TOSS; - + sound (self.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTN_NORM); + if not (self.owner) return; @@ -515,6 +531,11 @@ void racer_exit(float eject) 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() { @@ -529,14 +550,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); @@ -546,7 +568,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; @@ -563,7 +584,6 @@ void racer_blowup() void racer_deadtouch() { - dprint("Boink!\n"); self.avelocity_x *= 0.7; self.cnt -= 1; if(self.cnt <= 0) @@ -574,7 +594,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; @@ -603,7 +622,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, @@ -634,11 +653,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"); @@ -663,6 +682,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