From b7c4ed37aa0a97f287c3df9b8b88b8e6e11f9c1e Mon Sep 17 00:00:00 2001 From: Jakob MG Date: Mon, 13 Jun 2011 01:17:08 +0200 Subject: [PATCH] Make vehicles smoke and shake when heavely damaged --- qcsrc/server/vehicles/racer.qc | 18 ++++++++++-------- qcsrc/server/vehicles/raptor.qc | 8 ++++++-- qcsrc/server/vehicles/spiderbot.qc | 6 ++++++ qcsrc/server/vehicles/vehicles.qc | 26 +++++++++++++++++++++++++- qcsrc/server/vehicles/vehicles_def.qh | 3 +++ 5 files changed, 50 insertions(+), 11 deletions(-) diff --git a/qcsrc/server/vehicles/racer.qc b/qcsrc/server/vehicles/racer.qc index 7f7a73691..a24c1a43f 100644 --- a/qcsrc/server/vehicles/racer.qc +++ b/qcsrc/server/vehicles/racer.qc @@ -256,13 +256,14 @@ float racer_frame() vector df; float ftmp; - player = self; - racer = self.vehicle; - + 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; @@ -346,11 +347,10 @@ 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) { @@ -644,6 +644,8 @@ 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"); diff --git a/qcsrc/server/vehicles/raptor.qc b/qcsrc/server/vehicles/raptor.qc index c195332eb..947fc639b 100644 --- a/qcsrc/server/vehicles/raptor.qc +++ b/qcsrc/server/vehicles/raptor.qc @@ -320,7 +320,8 @@ float raptor_frame() player = self; raptor = self.vehicle; self = raptor; - + + vehicles_painframe(); /* ftmp = vlen(self.velocity); if(ftmp > autocvar_g_vehicle_raptor_speed_forward) @@ -735,7 +736,10 @@ void raptor_dinit() void spawnfunc_vehicle_raptor() { vehicles_configcheck("vehicle_raptor.cfg", autocvar_g_vehicle_raptor_health); - + + self.vehicle_flags |= VHF_DMGSHAKE; + self.vehicle_flags |= VHF_DMGROLL; + if(autocvar_g_vehicle_raptor_shield) self.vehicle_flags |= VHF_HASSHIELD; diff --git a/qcsrc/server/vehicles/spiderbot.qc b/qcsrc/server/vehicles/spiderbot.qc index 488b6121f..1851caaf6 100644 --- a/qcsrc/server/vehicles/spiderbot.qc +++ b/qcsrc/server/vehicles/spiderbot.qc @@ -179,6 +179,8 @@ float spiderbot_frame() spider = self.vehicle; self = spider; + vehicles_painframe(); + player.BUTTON_ZOOM = 0; player.BUTTON_CROUCH = 0; player.switchweapon = 0; @@ -628,6 +630,10 @@ void vewhicle_spiderbot_dinit() void spawnfunc_vehicle_spiderbot() { + self.vehicle_flags |= VHF_DMGSHAKE; + //self.vehicle_flags |= VHF_DMGROLL; + //self.vehicle_flags |= VHF_DMGHEADROLL; + precache_model ( "models/vhshield.md3"); precache_model ( "models/vehicles/spiderbot.dpm"); precache_model ( "models/vehicles/spiderbot_top.dpm"); diff --git a/qcsrc/server/vehicles/vehicles.qc b/qcsrc/server/vehicles/vehicles.qc index 706affcbb..134fba37d 100644 --- a/qcsrc/server/vehicles/vehicles.qc +++ b/qcsrc/server/vehicles/vehicles.qc @@ -663,6 +663,30 @@ void shieldhit_think() } } +void vehicles_painframe() +{ +//.float pain_finished; //Added by Supajoe + + if(self.owner.vehicle_health <= 50) + if(self.pain_frame < time) + { + float _ftmp; + _ftmp = self.owner.vehicle_health / 50; + self.pain_frame = time + 0.1 + (random() * 0.5 * _ftmp); + pointparticles(particleeffectnum("smoke_small"), (self.origin + (randomvec() * 80)), '0 0 0', 1); + + if(self.vehicle_flags & VHF_DMGSHAKE) + self.velocity += randomvec() * 30; + + if(self.vehicle_flags & VHF_DMGROLL) + if(self.vehicle_flags & VHF_DMGHEADROLL) + self.tur_head.angles += randomvec(); + else + self.angles += randomvec(); + + } +} + void vehicles_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force) { self.dmg_time = time; @@ -933,7 +957,7 @@ float vehicle_initialize(string net_name, self.team = 0; self.vehicle_flags |= VHF_ISVEHICLE; - + setmodel(self, bodymodel); self.vehicle_viewport = spawn(); diff --git a/qcsrc/server/vehicles/vehicles_def.qh b/qcsrc/server/vehicles/vehicles_def.qh index ad0e56c6b..dcb1854f3 100644 --- a/qcsrc/server/vehicles/vehicles_def.qh +++ b/qcsrc/server/vehicles/vehicles_def.qh @@ -14,6 +14,9 @@ float VHF_DEATHEJECT = 64; /// Vehicle ejects pilot upon fatal damage float VHF_MOVE_GROUND = 128; /// Vehicle moves on gound float VHF_MOVE_HOVER = 256; /// Vehicle hover close to gound float VHF_MOVE_FLY = 512; /// Vehicle is airborn +float VHF_DMGSHAKE = 1024; +float VHF_DMGROLL = 2048; +float VHF_DMGHEADROLL = 4096; .entity gun1; .entity gun2; -- 2.39.2