]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Make vehicles smoke and shake when heavely damaged
authorJakob MG <jakob_mg@hotmail.com>
Sun, 12 Jun 2011 23:17:08 +0000 (01:17 +0200)
committerJakob MG <jakob_mg@hotmail.com>
Sun, 12 Jun 2011 23:17:08 +0000 (01:17 +0200)
qcsrc/server/vehicles/racer.qc
qcsrc/server/vehicles/raptor.qc
qcsrc/server/vehicles/spiderbot.qc
qcsrc/server/vehicles/vehicles.qc
qcsrc/server/vehicles/vehicles_def.qh

index 7f7a73691d893fa35974f18c524df4174b9bb425..a24c1a43f32d8a4a53c57cb6db7105130c594b25 100644 (file)
@@ -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");
index c195332eb2ed02284087f4f2ea0acd715cc8bc63..947fc639b3e6c373d854391c7f432ad5bfe727e4 100644 (file)
@@ -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;
 
index 488b6121f36704d76ec9d9caf69a6643d5101422..1851caaf6bfab8643b917d053e262970ec1c2f5d 100644 (file)
@@ -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");
index 706affcbb604dbac9a893c00318e440af67a051b..134fba37daf17ab57542c7dd369bedd670023fad 100644 (file)
@@ -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();
index ad0e56c6bd2cf3ba4c221c49e284145552834175..dcb1854f368b45803f828bab8a12bfa0e73e86c0 100644 (file)
@@ -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;