[nexuiz-commits] r6748 - in trunk/data: qcsrc/server sound/onslaught

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Thu May 21 13:41:12 EDT 2009


Author: morphed
Date: 2009-05-21 13:41:12 -0400 (Thu, 21 May 2009)
New Revision: 6748

Added:
   trunk/data/sound/onslaught/electricity_explode.ogg
Modified:
   trunk/data/qcsrc/server/mode_onslaught.qc
Log:
forgotten onslaught code found in shaolin temple

Modified: trunk/data/qcsrc/server/mode_onslaught.qc
===================================================================
--- trunk/data/qcsrc/server/mode_onslaught.qc	2009-05-20 23:39:04 UTC (rev 6747)
+++ trunk/data/qcsrc/server/mode_onslaught.qc	2009-05-21 17:41:12 UTC (rev 6748)
@@ -17,47 +17,87 @@
 
 .string model1, model2, model3;
 
+
+void onslaught_generator_boom_think()
+{
+	self.nextthink = time;
+	if(self.frame>14)
+	{
+		self.think = SUB_Remove;
+		return;
+	}
+	self.frame +=1;
+};
+
+void onslaught_generator_boom_spawn(vector org, float fscale)
+{
+	entity e;
+	e = spawn();
+	setmodel(e, "models/onslaught/boom.md3");
+	setorigin(e,org);
+
+	e.scale = fscale;
+	setsize(e, e.mins * e.scale, e.maxs * e.scale);
+	e.angles = randomvec() * 360;
+
+	e.effects = EF_NOSHADOW;
+
+	e.think = onslaught_generator_boom_think;
+	e.nextthink = time;
+};
+
 void ons_gib_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
 {
     self.velocity += vforce;
 }
 
+.float giblifetime;
+void ons_trowgib_think()
+{
+		local vector org;
+
+		self.nextthink = time;
+		if(self.count>self.giblifetime)
+		{
+			self.think = SUB_Remove;
+			return;
+		}
+		if(self.count>self.giblifetime-10) self.alpha -= 0.1;
+		org = self.origin + '-20 -20 -20';
+		org = randompos(org, self.origin + '20 20 20');
+		onslaught_generator_boom_spawn(org, random()*0.5+0.3);	
+		self.count +=1;
+};
+
 void ons_trowgib(
     vector v_from, vector v_to, vector v_colormod,
     string smodel,
     float f_lifetime, float f_fadetime, float b_burn)
 {
     local entity gib;
-    local entity burn;
+	
+	gib = spawn();
 
-    gib = spawn();
-
-    gib.classname = "turret_gib";
     setmodel(gib,smodel);
     setorigin(gib,v_from);
-    SUB_SetFade(gib,time + f_lifetime,2);
-
     gib.solid              = SOLID_BBOX;
-
     gib.movetype           = MOVETYPE_BOUNCE;
     gib.takedamage         = DAMAGE_YES;
     gib.event_damage       = ons_gib_damage;
     gib.health             = -1;
-    gib.effects            = EF_LOWPRECISION;
-    gib.flags              = FL_NOTARGET;
-    gib.colormod           = v_colormod;
+	gib.effects            = EF_LOWPRECISION;
+	gib.flags              = FL_NOTARGET;
     gib.velocity           = v_to;
+	gib.giblifetime		   = f_lifetime;
+  if (b_burn)
+	{
+		gib.think = ons_trowgib_think;
+		gib.nextthink = time;
+	}
+  else SUB_SetFade(gib,time + f_lifetime,2);
+  
+};
 
-    if (b_burn)
-    {
-        burn = spawn();
-        burn.effects        = EF_LOWPRECISION;//|EF_FLAME;
-        setattachment(burn,gib,"");
-        setorigin(burn,(gib.mins + gib.maxs) * 0.5);
-        SUB_SetFade(burn,time + (f_lifetime * 0.5) ,2);
-    }
-}
-
 void onslaught_updatelinks()
 {
 	local entity l, links;
@@ -378,12 +418,13 @@
 		d = d * self.max_health / 300;
 		Damage(self, self, self, d, DEATH_HURTTRIGGER, self.origin, '0 0 0');
 	}
+
 };
 
 void onslaught_generator_ring_think()
 {
 	self.nextthink = time;
-	if(self.count>20)
+	if(self.count>24)
 	{
 		self.think = SUB_Remove;
 		return;
@@ -392,10 +433,10 @@
 	self.scale = self.count * 4;
 	setsize(self, self.mins * self.scale, self.maxs * self.scale);
 
-	self.frame = self.count * 4;
+	self.frame = self.count;
 
 	self.count +=1;
-	self.alpha = 0.3;
+	self.alpha = 0.1;
 };
 
 void onslaught_generator_ring_spawn(vector org)
@@ -411,24 +452,53 @@
 	e.think = onslaught_generator_ring_think;
 	e.nextthink = time;
 };
+void onslaught_generator_ray_think()
+{
+	self.nextthink = time;
+	if(self.count>10)
+	{
+		self.think = SUB_Remove;
+		return;
+	}
 
+	if(self.count>5)
+		self.alpha -= 0.1;
+	else
+		self.alpha += 0.1;
+	self.scale += 0.2;
+	self.count +=1;
+};
+
+void onslaught_generator_ray_spawn(vector org)
+{
+	entity e;
+	e = spawn();
+	setmodel(e, "models/onslaught/ons_ray.md3");
+	setorigin(e,org);
+	e.angles = randomvec() * 360;
+	e.alpha = 0;
+	e.scale = random()*5+8;
+	e.think = onslaught_generator_ray_think;
+	e.nextthink = time;
+};
+
 void onslaught_generator_shockwave_think()
 {
 	self.nextthink = time;
-	if(self.count>20)
+	if(self.count>25)
 	{
 		self.think = SUB_Remove;
 		return;
 	}
 
-	if(self.count>10)
+	if(self.count>15)
 		self.alpha -= 0.1;
 	else
 		self.alpha = 1;
 
 	self.scale = self.count * 4;
 	setsize(self, self.mins * self.scale, self.maxs * self.scale);
-	self.frame = self.count * 4;
+	self.frame = self.count;
 
 	self.count +=1;
 };
@@ -442,46 +512,49 @@
 
 	e.alpha = 0;
 	e.frame = 0;
+	e.count = 0;
+	
 
 	e.think = onslaught_generator_shockwave_think;
 	e.nextthink = time;
 };
 
-void onslaught_generator_boom_think()
+void gendmg_think()
 {
-	self.nextthink = time;
-	if(self.frame==15)
+		if(self.owner.health < 0)
 	{
 		self.think = SUB_Remove;
 		return;
 	}
-
-	if(self.frame>11)
-		self.alpha -= 0.3;
-
-	self.frame +=1;
+	self.nextthink = time+0.1;
+	// damaged fx
+	if(random()<(cvar("g_onslaught_gen_health")-self.owner.health)/cvar("g_onslaught_gen_health")-0.1)
+	{
+	if(random()<0.01)
+	{
+		pointparticles(particleeffectnum("electro_ballexplode"), randompos(self.origin+ '50 50 50', self.origin - '50 50 20'), '0 0 0', 1);
+		sound(self, CHAN_TRIGGER, "onslaught/electricity_explode.ogg", VOL_BASE, ATTN_NORM);
+	}
+	else
+		pointparticles(particleeffectnum("torch_small"), randompos(self.origin+ '60 60 60', self.origin - '60 60 20'), '0 0 0', 1);
+	}
 };
 
-void onslaught_generator_boom_spawn(vector org, float fscale)
+void spawn_gendmg(entity gd_owner)
 {
 	entity e;
 	e = spawn();
-	setmodel(e, "models/onslaught/boom.md3");
-	setorigin(e,org);
-
-	e.scale = fscale;
-	setsize(e, e.mins * e.scale, e.maxs * e.scale);
-
-	e.effects = EF_NOSHADOW;
-
-	e.think = onslaught_generator_boom_think;
-	e.nextthink = time;
+	e.owner = gd_owner;
+	e.health = self.owner.health;
+	setorigin(e,gd_owner.origin);
+	e.think = gendmg_think;
+	e.nextthink = time+1;
 };
 
 void onslaught_generator_deaththink()
 {
 	local vector org;
-	local float i, scale;
+	local float i;
 
 	if not (self.count)
 		self.count = 40;
@@ -494,25 +567,25 @@
 	}
 
 	// Throw some gibs
-	if(random()<0.2)
+	if(random()<0.3)
 	{
 		i = random();
 		if(i<0.3)
-			ons_trowgib(self.origin, (100 * randomvec() - '1 1 1') * 25,'1 1 1',"models/onslaught/gen_gib1.md3",20,1,0);
+			ons_trowgib(self.origin + '0 0 40', (100 * randomvec() - '1 1 1') * 11 + '0 0 20','1 1 1',"models/onslaught/gen_gib1.md3",25,1,1);
 		else if(i>0.7)
-			ons_trowgib(self.origin, (100 * randomvec() - '1 1 1') * 25,'1 1 1',"models/onslaught/gen_gib2.md3",20,1,0);
+			ons_trowgib(self.origin + '0 0 40', (100 * randomvec() - '1 1 1') * 12 + '0 0 20','1 1 1',"models/onslaught/gen_gib2.md3",20,1,1);
 		else
-			ons_trowgib(self.origin, (100 * randomvec() - '1 1 1') * 25,'1 1 1',"models/onslaught/gen_gib3.md3",20,1,0);
+			ons_trowgib(self.origin + '0 0 40', (100 * randomvec() - '1 1 1') * 13 + '0 0 20','1 1 1',"models/onslaught/gen_gib3.md3",15,1,1);
 	}
 
 	// Spawn fire balls
 	for(i=0;i<6;++i)
 	{
-		org = self.origin + self.mins;
+		org = self.origin - '20 20 20' * i*1.5;
 		org_z = self.origin_z - 20;
-		org = randompos(org, self.origin + self.maxs + '0 0 20');
+		org = randompos(org, self.origin + '20 20 20' * i*1.5 + '0 0 20');
 
-		onslaught_generator_boom_spawn(org, 1);
+		onslaught_generator_boom_spawn(org, (6-i)/5+0.3);
 	}
 
 	// Short explosion sound + small explosion
@@ -525,6 +598,12 @@
 	// Particles
 	org = randompos(self.origin + self.mins + '8 8 8', self.origin + self.maxs + '-8 -8 -8');
 	pointparticles(particleeffectnum("onslaught_generator_smallexplosion"), org, '0 0 0', 1);
+	
+	// rays
+	if(random() > 0.25 )
+	{
+		onslaught_generator_ray_spawn(self.origin);
+	}
 
 	// Final explosion
 	if(self.count==1)
@@ -543,6 +622,7 @@
 
 void onslaught_generator_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
 {
+	local float i;
 	if (damage <= 0)
 		return;
 	if (attacker != self)
@@ -560,7 +640,7 @@
 		}
 		if (time > self.pain_finished)
 		{
-			self.pain_finished = time + 5;
+			self.pain_finished = time + 10;
 			bprint(ColoredTeamName(self.team), " generator under attack!\n");
 			play2team(self.team, "onslaught/generator_underattack.wav");
 		}
@@ -619,6 +699,35 @@
 		setmodel(self, "models/onslaught/generator_dmg9.md3");
 	if(self.health <= 0)
 		setmodel(self, "models/onslaught/generator_dead.md3");
+		
+	// Throw some flaming gibs on damage, more damage = more chance for gib
+	if(random()<damage/220)
+	{
+		sound(self, CHAN_TRIGGER, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+		i = random();
+		if(i<0.3)
+			ons_trowgib(hitloc,(force * -1) + '0 0 40','1 1 1',"models/onslaught/gen_gib1.md3",7,1,1);
+		else if(i>0.7)
+			ons_trowgib(hitloc,(force * -1)+ '0 0 40','1 1 1',"models/onslaught/gen_gib2.md3",6,1,1);
+		else
+			ons_trowgib(hitloc,(force * -1)+ '0 0 40','1 1 1',"models/onslaught/gen_gib3.md3",5,1,1);
+	}
+	else
+	{
+	// particles on every hit
+	pointparticles(particleeffectnum("sparks"),hitloc,force*-1, 1);
+	
+	//sound on every hit
+	if (random()<0.5)
+	sound(self, CHAN_TRIGGER, "onslaught/ons_hit1.wav", VOL_BASE, ATTN_NORM);
+	else
+	sound(self, CHAN_TRIGGER, "onslaught/ons_hit2.wav", VOL_BASE, ATTN_NORM);
+	}
+	
+	//throw some gibs on damage
+	if(random()<damage/200+0.2)
+		if(random()<0.5)
+			ons_trowgib(hitloc,randomvec()*360,'1 1 1',"models/onslaught/gen_gib1.md3",1,1,0);
 };
 
 // update links after a delay
@@ -813,20 +922,24 @@
 	precache_model("models/onslaught/gen_gib1.md3");
 	precache_model("models/onslaught/gen_gib2.md3");
 	precache_model("models/onslaught/gen_gib3.md3");
+	precache_model("models/onslaught/ons_ray.md3");
 	precache_sound("onslaught/generator_decay.wav");
 	precache_sound("weapons/grenade_impact.wav");
 	precache_sound("weapons/rocket_impact.wav");
 	precache_sound("onslaught/generator_underattack.wav");
 	precache_sound("onslaught/shockwave.wav");
+	precache_sound("onslaught/ons_hit1.wav");
+	precache_sound("onslaught/ons_hit2.wav");
+	precache_sound("onslaught/electricity_explode.ogg");
 	if (!self.team)
 		objerror("team must be set");
 	self.team_saved = self.team;
 	self.colormap = 1024 + (self.team - 1) * 17;
-	self.solid = SOLID_BSP;
+	self.solid = SOLID_BBOX;
 	self.movetype = MOVETYPE_NONE;
 	self.lasthealth = self.max_health = self.health = cvar("g_onslaught_gen_health");
 	setmodel(self, "models/onslaught/generator.md3");
-	//setsize(self, '-32 -32 -24', '32 32 64');
+	setsize(self, '-52 -52 -14', '52 52 75');
 	setorigin(self, self.origin);
 	self.takedamage = DAMAGE_AIM;
 	self.bot_attack = TRUE;
@@ -834,6 +947,8 @@
 	self.iscaptured = TRUE;
 	self.islinked = TRUE;
 	self.isshielded = TRUE;
+	// helper entity that create fx when generator is damaged
+	spawn_gendmg(self);
 	// spawn shield model which indicates whether this can be damaged
 	self.enemy = e = spawn();
 	e.classname = "onslaught_generator_shield";
@@ -853,7 +968,7 @@
 	WaypointSprite_UpdateRule(self.sprite, COLOR_TEAM2, SPRITERULE_TEAMPLAY);
 
 	onslaught_updatelinks();
-
+	
 	self.reset = onslaught_generator_reset;
 };
 
@@ -880,7 +995,7 @@
 	if (attacker.classname == "player")
 	{
 		play2team(self.team, "onslaught/controlpoint_underattack.wav");
-		self.pain_finished = time + 5;
+		self.pain_finished = time + 10;
 	}
 	self.health = self.health - damage;
 	self.pain_finished = time + 1;
@@ -888,21 +1003,29 @@
 	self.cp_bob_dmg_z = (2 * random() - 1) * 15;
 	// colormod flash when shot
 	self.colormod = '2 2 2';
+		// particles on every hit
+	pointparticles(particleeffectnum("sparks"),hitloc,force*-1, 1);
+	//sound on every hit
+	if (random()<0.5)
+		sound(self, CHAN_TRIGGER, "onslaught/ons_hit1.wav", VOL_BASE+0.3, ATTN_NORM);
+	else
+		sound(self, CHAN_TRIGGER, "onslaught/ons_hit2.wav", VOL_BASE+0.3, ATTN_NORM);
+
 	if (self.health < 0)
 	{
 		sound(self, CHAN_TRIGGER, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM);
-		pointparticles(particleeffectnum("onslaught_controlpoint_explosion"), self.origin, '0 0 0', 1);
+		pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
 		{
 			string t;
 			t = ColoredTeamName(attacker.team);
 			bprint(ColoredTeamName(self.team), " ", self.message, " control point destroyed by ", t, "\n");
-			ons_trowgib(self.origin, (2 * randomvec() - '1 1 1') * 25,'1 1 1',"models/onslaught/controlpoint_icon_gib1.md3",5,1,1);
-			ons_trowgib(self.origin, (2 * randomvec() - '1 1 1') * 45,'1 1 1',"models/onslaught/controlpoint_icon_gib2.md3",5,1,1);
-			ons_trowgib(self.origin, (2 * randomvec() - '1 1 1') * 45,'1 1 1',"models/onslaught/controlpoint_icon_gib2.md3",5,1,1);
-			ons_trowgib(self.origin, (2 * randomvec() - '1 1 1') * 75,'1 1 1',"models/onslaught/controlpoint_icon_gib4.md3",5,1,1);
-			ons_trowgib(self.origin, (2 * randomvec() - '1 1 1') * 75,'1 1 1',"models/onslaught/controlpoint_icon_gib4.md3",5,1,1);
-			ons_trowgib(self.origin, (2 * randomvec() - '1 1 1') * 75,'1 1 1',"models/onslaught/controlpoint_icon_gib4.md3",5,1,1);
-			ons_trowgib(self.origin, (2 * randomvec() - '1 1 1') * 75,'1 1 1',"models/onslaught/controlpoint_icon_gib4.md3",5,1,1);
+			ons_trowgib(self.origin, (2 * randomvec() - '1 1 1') * 25,'1 1 1',"models/onslaught/controlpoint_icon_gib1.md3",5,1,0);
+			ons_trowgib(self.origin, (2 * randomvec() - '1 1 1') * 45,'1 1 1',"models/onslaught/controlpoint_icon_gib2.md3",5,1,0);
+			ons_trowgib(self.origin, (2 * randomvec() - '1 1 1') * 45,'1 1 1',"models/onslaught/controlpoint_icon_gib2.md3",5,1,0);
+			ons_trowgib(self.origin, (2 * randomvec() - '1 1 1') * 75,'1 1 1',"models/onslaught/controlpoint_icon_gib4.md3",5,1,0);
+			ons_trowgib(self.origin, (2 * randomvec() - '1 1 1') * 75,'1 1 1',"models/onslaught/controlpoint_icon_gib4.md3",5,1,0);
+			ons_trowgib(self.origin, (2 * randomvec() - '1 1 1') * 75,'1 1 1',"models/onslaught/controlpoint_icon_gib4.md3",5,1,0);
+			ons_trowgib(self.origin, (2 * randomvec() - '1 1 1') * 75,'1 1 1',"models/onslaught/controlpoint_icon_gib4.md3",5,1,0);
 		}
 		self.owner.goalentity = world;
 		self.owner.islinked = FALSE;
@@ -917,6 +1040,7 @@
 		activator = self;
 		SUB_UseTargets ();
 		self = oself;
+		
 
 		self.owner.waslinked = self.owner.islinked;
 		if(self.owner.model != "models/onslaught/controlpoint_pad.md3")
@@ -994,6 +1118,17 @@
 	else
 		self.cp_bob_dmg_z = 0;
 	self.origin = self.cp_origin + self.cp_bob_origin + self.cp_bob_dmg;
+	
+	// damaged fx
+	if(random()<(cvar("g_onslaught_cp_health")-self.health)/cvar("g_onslaught_cp_health")-0.4)
+	{
+	pointparticles(particleeffectnum("electricity_sparks"), randompos(self.origin+ '10 10 20', self.origin - '10 10 20'), '0 0 0', 1);
+	if(random()>0.8)
+	sound(self, CHAN_PAIN, "onslaught/ons_spark1.wav", VOL_BASE, ATTN_NORM);
+	else if (random()>0.5)
+	sound(self, CHAN_PAIN, "onslaught/ons_spark2.wav", VOL_BASE, ATTN_NORM);
+	}
+		
 };
 
 void onslaught_controlpoint_icon_buildthink()
@@ -1035,8 +1170,14 @@
 	self.colormod = '1 1 1' * (2 - bound(0, (self.pain_finished - time) / 10, 1));
 	if(self.owner.model != "models/onslaught/controlpoint_pad2.md3")
 		setmodel(self.owner, "models/onslaught/controlpoint_pad2.md3");
+		
+	if(random()<((self.max_health-self.health)/self.max_health)-0.1)
+		pointparticles(particleeffectnum("rage"), randompos(self.origin+ '10 10 10', self.origin - '10 10 10'), '0 0 -1', 1);
 };
 
+
+
+
 void onslaught_controlpoint_touch()
 {
 	local entity e;
@@ -1126,7 +1267,9 @@
 	precache_sound("weapons/grenade_impact.wav");
 	precache_sound("onslaught/damageblockedbyshield.wav");
 	precache_sound("onslaught/controlpoint_underattack.wav");
-	self.solid = SOLID_BSP;
+	precache_sound("onslaught/ons_spark1.wav");
+	precache_sound("onslaught/ons_spark2.wav");
+	self.solid = SOLID_BBOX;
 	self.movetype = MOVETYPE_NONE;
 	setmodel(self, "models/onslaught/controlpoint_pad.md3");
 	//setsize(self, '-32 -32 0', '32 32 8');
@@ -1232,7 +1375,6 @@
 	if (!self.enemy)
 		objerror("can not find target2\n");
 	dprint(etos(self.goalentity), " linked with ", etos(self.enemy), "\n");
-
 	self.SendFlags |= 3;
 	self.think = onslaught_link_checkupdate;
 	self.nextthink = time;
@@ -1258,4 +1400,4 @@
 		objerror("target and target2 must be set\n");
 	InitializeEntity(self, onslaught_link_delayed, INITPRIO_FINDTARGET);
 	Net_LinkEntity(self, FALSE, 0, onslaught_link_send);
-};
+};
\ No newline at end of file

Added: trunk/data/sound/onslaught/electricity_explode.ogg
===================================================================
(Binary files differ)


Property changes on: trunk/data/sound/onslaught/electricity_explode.ogg
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream



More information about the nexuiz-commits mailing list