]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge remote-tracking branch 'origin/master' into samual/spawn_weapons
authorSamual Lenks <samual@xonotic.org>
Fri, 17 Aug 2012 16:55:09 +0000 (12:55 -0400)
committerSamual Lenks <samual@xonotic.org>
Fri, 17 Aug 2012 16:55:09 +0000 (12:55 -0400)
Conflicts:
qcsrc/common/constants.qh
qcsrc/server/vehicles/bumblebee.qc

12 files changed:
1  2 
qcsrc/client/Main.qc
qcsrc/common/constants.qh
qcsrc/server/cl_client.qc
qcsrc/server/g_damage.qc
qcsrc/server/g_world.qc
qcsrc/server/miscfunctions.qc
qcsrc/server/progs.src
qcsrc/server/vehicles/bumblebee.qc
qcsrc/server/vehicles/racer.qc
qcsrc/server/vehicles/raptor.qc
qcsrc/server/vehicles/spiderbot.qc
qcsrc/server/vehicles/vehicles.qc

Simple merge
index a4d54fb585d2e8b8fa1e5b2e270a53aeebb4ec82,9717905b6e0f61c5d8a863a0467b9ae4826446eb..903ece9a522fad9ef337aa4f096908c4ad22e703
@@@ -93,11 -92,13 +93,13 @@@ const float ENT_CLIENT_WARPZONE_CAMERA 
  const float ENT_CLIENT_TRIGGER_MUSIC = 26;
  const float ENT_CLIENT_HOOK = 27;
  const float ENT_CLIENT_LGBEAM = 28;
 -const float ENT_CLIENT_GAUNTLET = 29;
 -const float ENT_CLIENT_ACCURACY = 30;
 -const float ENT_CLIENT_SHOWNAMES = 31;
 -const float ENT_CLIENT_WARPZONE_TELEPORTED = 32;
 -const float ENT_CLIENT_MODEL = 33;
 -const float ENT_CLIENT_ITEM = 34;
 -const float ENT_CLIENT_BUMBLE_RAYGUN = 35;
 +const float ENT_CLIENT_ACCURACY = 29;
 +const float ENT_CLIENT_SHOWNAMES = 30;
 +const float ENT_CLIENT_WARPZONE_TELEPORTED = 31;
 +const float ENT_CLIENT_MODEL = 32;
 +const float ENT_CLIENT_ITEM = 33;
++const float ENT_CLIENT_BUMBLE_RAYGUN = 34;
++
  
  const float ENT_CLIENT_TURRET = 40;
  const float ENT_CLIENT_AUXILIARYXHAIR = 50;
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 94b19431b101f1a65a2f90a7f563d174d22a4a3f,fc661625e6620909dc3f12896d8c379786597ade..6dfcc8037dfb622c7e0df97185cc4e3ce08bfd0a
@@@ -502,94 -769,156 +769,155 @@@ void bumb_diethink(
  
  void bumb_die()
  {
-     self.deadflag    = DEAD_DEAD;
-     self.vehicle_exit(VHEF_NORMAL);
-     
-     self.health       = 0;
-     self.event_damage = SUB_Null;
-     self.solid        = SOLID_CORPSE;
-     self.takedamage   = DAMAGE_NO;
-     self.deadflag     = DEAD_DYING;
-     self.movetype     = MOVETYPE_BOUNCE;
-     
-     RadiusDamage (self, self.enemy, autocvar_g_vehicle_bumblebee_blowup_coredamage,
-                                       autocvar_g_vehicle_bumblebee_blowup_edgedamage,
-                                       autocvar_g_vehicle_bumblebee_blowup_radius, world, world,
-                                       autocvar_g_vehicle_bumblebee_blowup_forceintensity,
-                                       DEATH_WAKIBLOWUP, world);
-     pointparticles(particleeffectnum("rocket_explode"), findbetterlocation (self.origin, 16), '0 0 0', 1);
+       entity oldself = self;
+       
+       // Hide beam
+       self.gun3.enemy.effects |= EF_NODRAW;
+       
+       if(self.gunner1)
+       {
+               self = self.gunner1;
+               oldself.gun1.vehicle_exit(VHEF_EJECT);
+               self = oldself;
+       }
+       if(self.gunner2)
+       {
+               self = self.gunner2;
+               oldself.gun2.vehicle_exit(VHEF_EJECT);
+               self = oldself;
+       }
+       self.vehicle_exit(VHEF_EJECT);
+       fixedmakevectors(self.angles);
+       vehicle_tossgib(self.gun1, self.velocity + v_right * 300 + v_up * 100 + randomvec() * 200, "cannon_right", rint(random()), rint(random()), 6, randomvec() * 200);
+       vehicle_tossgib(self.gun2, self.velocity + v_right * -300 + v_up * 100 + randomvec() * 200, "cannon_left", rint(random()), rint(random()), 6, randomvec() * 200);
+       vehicle_tossgib(self.gun3, self.velocity + v_forward * 300 + v_up * -100 + randomvec() * 200, "raygun", rint(random()), rint(random()), 6, randomvec() * 300);
+       entity _body = vehicle_tossgib(self, self.velocity + randomvec() * 200, "", rint(random()), rint(random()), 6, randomvec() * 100);
+       if(random() > 0.5)
+               _body.touch = bumb_blowup;
+       else
+               _body.touch = SUB_Null;
+               
+       _body.think = bumb_diethink;
+       _body.nextthink = time;
+       _body.wait = time + 2 + (random() * 8);
+       _body.owner = self;
+       _body.enemy = self.enemy;
+       
+       pointparticles(particleeffectnum("explosion_medium"), findbetterlocation(self.origin, 16), '0 0 0', 1);
+       
+       self.health                     = 0;
+       self.event_damage       = SUB_Null;
+       self.solid                      = SOLID_CORPSE;
+       self.takedamage         = DAMAGE_NO;
+       self.deadflag           = DEAD_DYING;
+       self.movetype           = MOVETYPE_NONE;
+       self.effects            = EF_NODRAW;
+       self.colormod           = '0 0 0';
+       self.avelocity          = '0 0 0';
+       self.velocity           = '0 0 0';
+       self.touch                      = SUB_Null;
+       self.nextthink          = 0;
+       setorigin(self, self.pos1);
 -
  }
  
- void bumb_dinit()
+ void bumb_impact()
  {
-     /*
-     if(!teamplay)
-     {
-         remove(self);
-         return;        
-     }
-     */
-     
-     if not (vehicle_initialize(
-              "Bumblebee", "models/vehicles/bumblebee_body.dpm",
-              "", "models/vehicles/spiderbot_cockpit.dpm", "", "", "tag_viewport",
-              HUD_BUMBLEBEE, BUMB_MIN, BUMB_MAX, FALSE,
-              bumb_spawn, autocvar_g_vehicle_bumblebee_respawntime,
-              bumb_pilot_frame, bumb_enter, bumb_exit,
-              bumb_die, bumb_think, FALSE, autocvar_g_vehicle_bumblebee_health))
-     {
-         remove(self);
-         return;
-     }
+     if(autocvar_g_vehicle_bumblebee_bouncepain_x)
+         vehilces_impact(autocvar_g_vehicle_bumblebee_bouncepain_x, 
+                                               autocvar_g_vehicle_bumblebee_bouncepain_y, 
+                                               autocvar_g_vehicle_bumblebee_bouncepain_z);
+ }
  
-     self.vehicle_shieldent = spawn();
-     self.vehicle_shieldent.effects = EF_LOWPRECISION;
-     setmodel(self.vehicle_shieldent, "models/vhshield.md3");
-     setattachment(self.vehicle_shieldent, self, "");
-     setorigin(self.vehicle_shieldent, real_origin(self) - self.origin);
-     self.vehicle_shieldent.scale       = 512 / vlen(self.maxs - self.mins);
-     self.vehicle_shieldent.think       = shieldhit_think;
-     self.vehicle_shieldent.alpha = -1;
-     
-        
-     self.gun1 = spawn();
-     self.gun2 = spawn();
-     self.gun3 = spawn();
-     self.vehicle_flags |= VHF_MULTISLOT;
-     self.gun1.owner = self;
-     self.gun2.owner = self;
-     self.gun3.owner = self;
-     
-     setmodel(self.gun1, "models/vehicles/bumblebee_plasma_right.dpm");
-     setmodel(self.gun2, "models/vehicles/bumblebee_plasma_left.dpm");
-     setmodel(self.gun3, "models/vehicles/bumblebee_ray.dpm");
-     setattachment(self.gun1, self, "cannon_right");
-     setattachment(self.gun2, self, "cannon_left");
-     setattachment(self.gun3, self, "raygun");
-     vehicle_addplayerslot(self, self.gun1, HUD_RAPTOR, "models/vehicles/wakizashi_cockpit.dpm", bumb_gunner_frame, bumb_gunner_exit);
-     vehicle_addplayerslot(self, self.gun2, HUD_RAPTOR, "models/vehicles/wakizashi_cockpit.dpm", bumb_gunner_frame, bumb_gunner_exit);
-     
-     //fixme-model
-     setorigin(self.gun1.vehicle_hudmodel, '90 -27 -23');
-     setorigin(self.gun1.vehicle_viewport, '-85 0 50');
-     
-     setorigin(self.gun2.vehicle_hudmodel, '90 27 -23');
-     setorigin(self.gun2.vehicle_viewport, '-85 0 50');
-     self.scale = 1.5;
-     /*
-     float i;
-     for(i=1; gettaginfo(self.gun1, i), gettaginfo_name; ++i)
-     {
-         
-         dprint(" ------- ^1gettaginfo_name^2(",ftos(i),") ^3=", gettaginfo_name, "\n");
-     }
-     */    
+ void bumb_spawn(float _f)
+ {
+       /*
+       float i;
+       for(i=1; gettaginfo(self.gun1, i), gettaginfo_name; ++i)
+       {
+           dprint(" ------- ^1gettaginfo_name^2(",ftos(i),") ^3=", gettaginfo_name, "\n");
+       }
+       */
+       if(!self.gun1)
+       {
+               // for some reason, autosizing of the shiled entity refuses to work for this one so set it up in advance.
+               self.vehicle_shieldent = spawn();
+               self.vehicle_shieldent.effects = EF_LOWPRECISION;
+               setmodel(self.vehicle_shieldent, "models/vhshield.md3");
+               setattachment(self.vehicle_shieldent, self, "");
+               setorigin(self.vehicle_shieldent, real_origin(self) - self.origin);
+               self.vehicle_shieldent.scale       = 512 / vlen(self.maxs - self.mins);
+               self.vehicle_shieldent.think       = shieldhit_think;
+               self.vehicle_shieldent.alpha = -1;
+               self.vehicle_shieldent.effects = EF_LOWPRECISION | EF_NODRAW;
+               self.gun1 = spawn();
+               self.gun2 = spawn();
+               self.gun3 = spawn();
+               self.vehicle_flags |= VHF_MULTISLOT;
+               self.gun1.owner = self;
+               self.gun2.owner = self;
+               self.gun3.owner = self;
+               setmodel(self.gun1, "models/vehicles/bumblebee_plasma_right.dpm");
+               setmodel(self.gun2, "models/vehicles/bumblebee_plasma_left.dpm");
+               setmodel(self.gun3, "models/vehicles/bumblebee_ray.dpm");
+               setattachment(self.gun1, self, "cannon_right");
+               setattachment(self.gun2, self, "cannon_left");
+               // Angled bones are no fun, messes up gun-aim; so work arround it.
+               self.gun3.pos1 = self.angles;
+               self.angles = '0 0 0';
+               vector ofs = gettaginfo(self, gettagindex(self, "raygun"));
+               ofs -= self.origin;
+               setattachment(self.gun3, self, "");
+               setorigin(self.gun3, ofs);
+               self.angles = self.gun3.pos1;
+               vehicle_addplayerslot(self, self.gun1, HUD_BUMBLEBEE_GUN, "models/vehicles/wakizashi_cockpit.dpm", bumb_gunner_frame, bumb_gunner_exit);
+               vehicle_addplayerslot(self, self.gun2, HUD_BUMBLEBEE_GUN, "models/vehicles/wakizashi_cockpit.dpm", bumb_gunner_frame, bumb_gunner_exit);
+               setorigin(self.vehicle_hudmodel, '50 0 -5');    // Move cockpit forward - down.
+               setorigin(self.vehicle_viewport, '5 0 2');    // Move camera forward up
+               //fixme-model-bones
+               setorigin(self.gun1.vehicle_hudmodel, '90 -27 -23');
+               setorigin(self.gun1.vehicle_viewport, '-85 0 50');
+               //fixme-model-bones
+               setorigin(self.gun2.vehicle_hudmodel, '90 27 -23');
+               setorigin(self.gun2.vehicle_viewport, '-85 0 50');
+               self.scale = 1.5;
+               
+               // Raygun beam
+               if(self.gun3.enemy == world)
+               {                       
+                       self.gun3.enemy = spawn();
+                       Net_LinkEntity(self.gun3.enemy, TRUE, 0, bumble_raygun_send);
+                       self.gun3.enemy.SendFlags = BRG_SETUP;                  
+                       self.gun3.enemy.cnt = autocvar_g_vehicle_bumblebee_raygun;                      
+                       self.gun3.enemy.effects = EF_NODRAW | EF_LOWPRECISION;
+               }
+       }
+       self.vehicle_health = autocvar_g_vehicle_bumblebee_health;
+       self.vehicle_shield = autocvar_g_vehicle_bumblebee_shield;
+       self.solid          = SOLID_BBOX;
+       //self.movetype         = MOVETYPE_BOUNCEMISSILE;
+       self.movetype           = MOVETYPE_TOSS;
+       self.vehicle_impact = bumb_impact;
+       self.damageforcescale = 0.025;
+       
+       setorigin(self, self.origin + '0 0 25');
  }
  
  void spawnfunc_vehicle_bumblebee()
Simple merge
Simple merge
Simple merge
index 61471058e851ffd735926cd9e811e1a7fd172a79,f66c2b925278575cb08235a72394a572aab208de..3dcf0fc2f92046b701c37133f21952d734aa9a59
@@@ -1308,5 -1338,76 +1338,76 @@@ vector vehicle_aimturret(entity _vehic
      vtmp_y = bound(-ftmp, vtmp_y, ftmp);
      vtmp_x = bound(-ftmp, vtmp_x, ftmp);
      _turrret.angles_y = bound(_rotlimit_min, _turrret.angles_y + vtmp_y, _rotlimit_max);    
-     _turrret.angles_x = bound(_pichlimit_min, _turrret.angles_x + vtmp_x, _pichlimit_max);    
+     _turrret.angles_x = bound(_pichlimit_min, _turrret.angles_x + vtmp_x, _pichlimit_max);
+     return vtag;
+ }
+ void vehicles_gib_explode()
+ {
+       sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+       pointparticles(particleeffectnum("explosion_small"), randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
+       remove(self);
+ }
+ void vehicles_gib_think()
+ {
+       self.alpha -= 0.1;
+       if(self.cnt >= time)
+               remove(self);
+       else
+               self.nextthink = time + 0.1;
  }
 -*/
+ entity vehicle_tossgib(entity _template, vector _vel, string _tag, float _burn, float _explode, float _maxtime, vector _rot)
+ {
+       entity _gib = spawn();
+       setmodel(_gib, _template.model);
+       setorigin(_gib, gettaginfo(self, gettagindex(self, _tag)));
+       _gib.velocity = _vel;
+       _gib.movetype = MOVETYPE_TOSS;
+       _gib.solid = SOLID_CORPSE;
+       _gib.colormod = '-0.5 -0.5 -0.5';
+       _gib.effects = EF_LOWPRECISION; 
+       _gib.avelocity = _rot;
+       
+       if(_burn)
+               _gib.effects |= EF_FLAME;
+       
+       if(_explode)
+       {
+               _gib.think = vehicles_gib_explode; 
+               _gib.nextthink = time + random() * _explode;
+               _gib.touch = vehicles_gib_explode;
+       }
+       else
+       {
+               _gib.cnt = time + _maxtime;
+               _gib.think = vehicles_gib_think; 
+               _gib.nextthink = time + _maxtime - 1;           
+               _gib.alpha = 1;
+       }
+       return _gib;
+ }
+ /*
+ vector predict_target(entity _targ, vector _from, float _shot_speed)
+ {
+     float i;                // loop
+     float _distance;        // How far to target
+     float _impact_time;     // How long untill projectile impacts
+     vector _predict_pos;    // Predicted enemy location
+     vector _original_origin;// Where target is before predicted
+      _original_origin = real_origin(_targ); // Typicaly center of target BBOX
+     _predict_pos = _original_origin;
+     for(i = 0; i < 4; ++i)  // Loop a few times to increase prediction accuracy (increase loop count if accuracy is to low)
+     {
+         _distance = vlen(_predict_pos - _from); // Get distance to previos predicted location
+         _impact_time = _distance / _shot_speed; // Calculate impact time
+         _predict_pos = _original_origin + _targ.velocity * _impact_time; // Calculate new predicted location
+     }
+     return _predict_pos;
+ }
++*/