[nexuiz-commits] r6743 - trunk/data/qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Mon May 18 13:33:30 EDT 2009
Author: mand1nga
Date: 2009-05-18 13:33:30 -0400 (Mon, 18 May 2009)
New Revision: 6743
Modified:
trunk/data/qcsrc/server/mode_onslaught.qc
Log:
New generator explosion for Onslaught
Modified: trunk/data/qcsrc/server/mode_onslaught.qc
===================================================================
--- trunk/data/qcsrc/server/mode_onslaught.qc 2009-05-18 17:30:04 UTC (rev 6742)
+++ trunk/data/qcsrc/server/mode_onslaught.qc 2009-05-18 17:33:30 UTC (rev 6743)
@@ -380,23 +380,165 @@
}
};
+void onslaught_generator_ring_think()
+{
+ self.nextthink = time;
+ if(self.count>20)
+ {
+ self.think = SUB_Remove;
+ return;
+ }
+
+ self.scale = self.count * 4;
+ setsize(self, self.mins * self.scale, self.maxs * self.scale);
+
+ self.frame = self.count * 4;
+
+ self.count +=1;
+ self.alpha = 0.3;
+};
+
+void onslaught_generator_ring_spawn(vector org)
+{
+ entity e;
+ e = spawn();
+ setmodel(e, "models/onslaught/shockwavetransring.md3");
+ setorigin(e,org);
+
+ e.count = 1;
+ e.alpha = 0;
+
+ e.think = onslaught_generator_ring_think;
+ e.nextthink = time;
+};
+
+void onslaught_generator_shockwave_think()
+{
+ self.nextthink = time;
+ if(self.count>20)
+ {
+ self.think = SUB_Remove;
+ return;
+ }
+
+ if(self.count>10)
+ 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.count +=1;
+};
+
+void onslaught_generator_shockwave_spawn(vector org)
+{
+ entity e;
+ e = spawn();
+ setmodel(e, "models/onslaught/shockwave.md3");
+ setorigin(e,org);
+
+ e.alpha = 0;
+ e.frame = 0;
+
+ e.think = onslaught_generator_shockwave_think;
+ e.nextthink = time;
+};
+
+void onslaught_generator_boom_think()
+{
+ self.nextthink = time;
+ if(self.frame==15)
+ {
+ self.think = SUB_Remove;
+ return;
+ }
+
+ if(self.frame>11)
+ self.alpha -= 0.3;
+
+ 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);
+
+ self.scale = fscale;
+ setsize(self, self.mins * self.scale, self.maxs * self.scale);
+
+ e.effects = EF_NOSHADOW;
+
+ e.think = onslaught_generator_boom_think;
+ e.nextthink = time;
+};
+
void onslaught_generator_deaththink()
{
local vector org;
- if (self.count > 0)
+ local float i, scale;
+
+ if not (self.count)
+ self.count = 40;
+
+ // White shockwave
+ if(self.count==40||self.count==20)
{
- self.nextthink = time + 0.1;
- self.count = self.count - 1;
- 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);
+ onslaught_generator_ring_spawn(self.origin);
+ sound(self, CHAN_TRIGGER, "onslaught/shockwave.wav", VOL_BASE, ATTN_NORM);
+ }
+
+ // Throw some gibs
+ if(random()<0.2)
+ {
+ 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);
+ 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);
+ else
+ ons_trowgib(self.origin, (100 * randomvec() - '1 1 1') * 25,'1 1 1',"models/onslaught/gen_gib3.md3",20,1,0);
+ }
+
+ // Spawn fire balls
+ for(i=0;i<6;++i)
+ {
+ org = self.origin + self.mins;
+ org_z = self.origin_z - 20;
+ org = randompos(org, self.origin + self.maxs + '0 0 20');
+
+ onslaught_generator_boom_spawn(org, 1);
+ }
+
+ // Short explosion sound + small explosion
+ if(random()<0.25)
+ {
+ te_explosion(self.origin);
sound(self, CHAN_TRIGGER, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM);
}
- else
+
+ // 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);
+
+ // Final explosion
+ if(self.count==1)
{
org = self.origin;
+ te_explosion(org);
+ onslaught_generator_shockwave_spawn(org);
pointparticles(particleeffectnum("onslaught_generator_finalexplosion"), org, '0 0 0', 1);
sound(self, CHAN_TRIGGER, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
}
+ else
+ self.nextthink = time;
+
+ self.count = self.count - 1;
};
void onslaught_generator_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
@@ -451,7 +593,7 @@
self.isshielded = FALSE;
self.takedamage = DAMAGE_NO; // can't be hurt anymore
self.event_damage = SUB_Null; // won't do anything if hurt
- self.count = 30; // 30 explosions
+ self.count = 0; // reset counter
self.think = onslaught_generator_deaththink; // explosion sequence
self.nextthink = time; // start exploding immediately
self.think(); // do the first explosion now
@@ -665,10 +807,17 @@
precache_model("models/onslaught/generator_dmg8.md3");
precache_model("models/onslaught/generator_dmg9.md3");
precache_model("models/onslaught/generator_dead.md3");
+ precache_model("models/onslaught/boom.md3");
+ precache_model("models/onslaught/shockwave.md3");
+ precache_model("models/onslaught/shockwavetransring.md3");
+ precache_model("models/onslaught/gen_gib1.md3");
+ precache_model("models/onslaught/gen_gib2.md3");
+ precache_model("models/onslaught/gen_gib3.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");
if (!self.team)
objerror("team must be set");
self.team_saved = self.team;
@@ -937,7 +1086,7 @@
self.enemy.colormap = self.colormap;
self.think = self.enemy.think = SUB_Null;
self.nextthink = 0; // don't like SUB_Null :P
-
+
onslaught_updatelinks();
activator = self;
More information about the nexuiz-commits
mailing list