r3568 - trunk/data/qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Wed Apr 2 07:16:35 EDT 2008
Author: lordhavoc
Date: 2008-04-02 07:16:33 -0400 (Wed, 02 Apr 2008)
New Revision: 3568
Modified:
trunk/data/qcsrc/server/w_crylink.qc
Log:
overhauled crylink primary, now the first 4 pellets conform to a pattern
implemented bouncing crylink shots (not used if the cvar is 0, so this
works even if it's not defined)
Modified: trunk/data/qcsrc/server/w_crylink.qc
===================================================================
--- trunk/data/qcsrc/server/w_crylink.qc 2008-04-02 11:01:31 UTC (rev 3567)
+++ trunk/data/qcsrc/server/w_crylink.qc 2008-04-02 11:16:33 UTC (rev 3568)
@@ -3,6 +3,15 @@
const vector proj_color = '1 1 1';
.entity realowner;
+
+void W_Crylink_Think (void)
+{
+ self.nextthink = self.count;
+ self.angles = vectoangles(self.velocity);
+ if (time >= self.count)
+ remove(self);
+}
+
void W_Crylink_Touch (void)
{
if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
@@ -10,9 +19,17 @@
remove(self);
return;
}
+ pointparticles(particleeffectnum("crylink_impact"), self.origin, '0 0 0', 1);
RadiusDamage (self, self.realowner, cvar("g_balance_crylink_primary_damage"), cvar("g_balance_crylink_primary_edgedamage"), cvar("g_balance_crylink_primary_radius"), world, cvar("g_balance_crylink_primary_force"), IT_CRYLINK);
- pointparticles(particleeffectnum("crylink_impact"), self.origin, '0 0 0', 1);
- remove (self);
+ if (self.cnt <= 0 || other.takedamage != DAMAGE_NO)
+ {
+ remove (self);
+ return;
+ }
+ self.cnt = self.cnt - 1;
+ self.angles = vectoangles(self.velocity);
+ self.nextthink = time;
+ self.owner = world;
}
void W_Crylink_Touch2 (void)
@@ -22,15 +39,24 @@
remove(self);
return;
}
+ pointparticles(particleeffectnum("crylink_impact"), self.origin, '0 0 0', 1);
RadiusDamage (self, self.realowner, cvar("g_balance_crylink_secondary_damage"), cvar("g_balance_crylink_secondary_edgedamage"), cvar("g_balance_crylink_secondary_radius"), world, cvar("g_balance_crylink_secondary_force"), IT_CRYLINK);
- pointparticles(particleeffectnum("crylink_impact"), self.origin, '0 0 0', 1);
- remove (self);
+ if (self.cnt <= 0 || other.takedamage != DAMAGE_NO)
+ {
+ remove (self);
+ return;
+ }
+ self.cnt = self.cnt - 1;
+ self.angles = vectoangles(self.velocity);
+ self.nextthink = time;
+ self.owner = world;
}
void W_Crylink_Attack (void)
{
local float counter, shots;
local entity proj;
+ local vector s;
if (cvar("g_use_ammunition"))
self.ammo_cells = self.ammo_cells - cvar("g_balance_crylink_primary_ammo");
@@ -47,19 +73,34 @@
proj.bot_dodge = TRUE;
proj.bot_dodgerating = cvar("g_balance_crylink_primary_damage");
- proj.movetype = MOVETYPE_BOUNCE;
+ proj.movetype = MOVETYPE_BOUNCEMISSILE;
proj.solid = SOLID_BBOX;
- proj.gravity = 0.001;
+ //proj.gravity = 0.001;
setmodel (proj, "models/plasmatrail.mdl"); // precision set below
setsize (proj, '0 0 0', '0 0 0');
setorigin (proj, w_shotorg);
- proj.velocity = (w_shotdir + randomvec() * cvar("g_balance_crylink_primary_spread")) * cvar("g_balance_crylink_primary_speed");
+ s = '0 0 0';
+ if (counter == 0)
+ s = '0 0 0';
+ else if (counter == 1)
+ s = '0 0 1';
+ else if (counter == 2)
+ s = '0 -0.71 -0.71';
+ else if (counter == 3)
+ s = '0 0.71 -0.71';
+ else
+ s = randomvec();
+ s = s * cvar("g_balance_crylink_primary_spread");
+ proj.velocity = (w_shotdir + v_right * s_y + v_up * s_z) * cvar("g_balance_crylink_primary_speed");
+// proj.velocity = (w_shotdir + randomvec() * cvar("g_balance_crylink_primary_spread")) * cvar("g_balance_crylink_primary_speed");
W_SetupProjectileVelocity(proj);
proj.touch = W_Crylink_Touch;
- proj.think = SUB_Remove;
- proj.nextthink = time + cvar("g_balance_crylink_primary_lifetime");
+ proj.count = time + cvar("g_balance_crylink_primary_lifetime");
+ proj.think = W_Crylink_Think;
+ proj.nextthink = proj.count;
+ proj.cnt = cvar("g_balance_crylink_primary_bounces");
proj.angles = vectoangles (proj.velocity);
@@ -92,9 +133,9 @@
proj.bot_dodge = TRUE;
proj.bot_dodgerating = cvar("g_balance_crylink_secondary_damage");
- proj.movetype = MOVETYPE_BOUNCE;
+ proj.movetype = MOVETYPE_BOUNCEMISSILE;
proj.solid = SOLID_BBOX;
- proj.gravity = 0.001;
+ //proj.gravity = 0.001;
setmodel (proj, "models/plasmatrail.mdl"); // precision set below
setsize (proj, '0 0 0', '0 0 0');
@@ -103,8 +144,10 @@
proj.velocity = (w_shotdir + (((counter + 0.5) / shots) * 2 - 1) * v_right * cvar("g_balance_crylink_secondary_spread")) * cvar("g_balance_crylink_secondary_speed");
W_SetupProjectileVelocity(proj);
proj.touch = W_Crylink_Touch2;
- proj.think = SUB_Remove;
- proj.nextthink = time + cvar("g_balance_crylink_secondary_lifetime");
+ proj.count = time + cvar("g_balance_crylink_primary_lifetime");
+ proj.think = W_Crylink_Think;
+ proj.nextthink = proj.count;
+ proj.cnt = cvar("g_balance_crylink_secondary_bounces");
proj.angles = vectoangles (proj.velocity);
More information about the nexuiz-commits
mailing list