r5576 - in trunk/data/qcsrc: client common server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Fri Jan 16 14:59:05 EST 2009
Author: div0
Date: 2009-01-16 14:59:00 -0500 (Fri, 16 Jan 2009)
New Revision: 5576
Modified:
trunk/data/qcsrc/client/movetypes.qc
trunk/data/qcsrc/client/movetypes.qh
trunk/data/qcsrc/client/projectile.qc
trunk/data/qcsrc/common/constants.qh
trunk/data/qcsrc/server/csqcprojectile.qc
trunk/data/qcsrc/server/w_common.qc
trunk/data/qcsrc/server/w_crylink.qc
trunk/data/qcsrc/server/w_electro.qc
trunk/data/qcsrc/server/w_grenadelauncher.qc
Log:
the next batch of weapons using the new projectile code: grenade launcher, electro, crylink, mg, sg, camping rifle
Modified: trunk/data/qcsrc/client/movetypes.qc
===================================================================
--- trunk/data/qcsrc/client/movetypes.qc 2009-01-16 18:43:50 UTC (rev 5575)
+++ trunk/data/qcsrc/client/movetypes.qc 2009-01-16 19:59:00 UTC (rev 5576)
@@ -17,6 +17,12 @@
void _Movetype_Impact(entity oth) // SV_Impact
{
+ if(self.move_moveflags & MOVEFLAG_STOPONIMPACT)
+ {
+ // don't CLIP the velocity, but stop ENTIRELY
+ self.velocity = '0 0 0';
+ self.avelocity = '0 0 0';
+ }
}
void _Movetype_LinkEdict(float touch_triggers) // SV_LinkEdict
Modified: trunk/data/qcsrc/client/movetypes.qh
===================================================================
--- trunk/data/qcsrc/client/movetypes.qh 2009-01-16 18:43:50 UTC (rev 5575)
+++ trunk/data/qcsrc/client/movetypes.qh 2009-01-16 19:59:00 UTC (rev 5576)
@@ -5,6 +5,7 @@
.vector move_angles;
.vector move_velocity;
.vector move_avelocity;
+.float move_moveflags;
void Movetype_Physics(float matchserver);
@@ -24,3 +25,5 @@
float MOVETYPE_FAKEPUSH = 13;
float FL_ONGROUND = 512;
+
+float MOVEFLAG_STOPONIMPACT = 1;
Modified: trunk/data/qcsrc/client/projectile.qc
===================================================================
--- trunk/data/qcsrc/client/projectile.qc 2009-01-16 18:43:50 UTC (rev 5575)
+++ trunk/data/qcsrc/client/projectile.qc 2009-01-16 19:59:00 UTC (rev 5576)
@@ -21,14 +21,25 @@
switch(self.cnt)
{
- case PROJECTILE_ELECTRO:
- break; // electro uses no trail
case PROJECTILE_ROCKET:
- trailparticles(self, particleeffectnum("TR_ROCKET"), oldorg, self.origin); // rocket
+ trailparticles(self, particleeffectnum("TR_ROCKET"), oldorg, self.origin);
break;
case PROJECTILE_TAG:
- trailparticles(self, particleeffectnum("TR_VORESPIKE"), oldorg, self.origin); // seeker
+ trailparticles(self, particleeffectnum("TR_VORESPIKE"), oldorg, self.origin);
break;
+ case PROJECTILE_ELECTRO_BEAM:
+ trailparticles(self, particleeffectnum("TR_NEXUIZPLASMA"), oldorg, self.origin);
+ break;
+ case PROJECTILE_GRENADE:
+ trailparticles(self, particleeffectnum("TR_KNIGHTSPIKE"), oldorg, self.origin);
+ if(!(self.move_flags & FL_ONGROUND))
+ self.angles -= '750 0 0' * time;
+ break;
+ case PROJECTILE_GRENADE_BOUNCING:
+ trailparticles(self, particleeffectnum("TR_KNIGHTSPIKE"), oldorg, self.origin);
+ if(!(self.move_flags & FL_ONGROUND))
+ self.angles += '100 150 100' * time;
+ break;
default:
break;
}
@@ -106,20 +117,19 @@
if(f & 2)
{
self.modelindex = ReadShort();
+
if(f & 0x40)
- {
self.scale = ReadByte() / 16.0;
- self.effects = ReadShort();
- self.effects |= 65536 * ReadByte();
- }
else
- {
self.scale = 1;
- self.effects = 0;
- }
- self.cnt = ReadShort();
+ self.cnt = ReadByte();
+ self.mins = '0 0 0';
+ self.maxs = '0 0 0';
+ self.move_movetype = MOVETYPE_TOSS;
+ self.move_moveflags = MOVEFLAG_STOPONIMPACT;
+
switch(self.cnt)
{
case PROJECTILE_ELECTRO:
@@ -128,24 +138,30 @@
self.mins = '0 0 -3';
self.maxs = '0 0 -3';
self.move_movetype = MOVETYPE_BOUNCE;
+ self.move_moveflags = 0;
break;
case PROJECTILE_ROCKET:
loopsound(self, CHAN_PAIN, "weapons/rocket_fly.wav", VOL_BASE, ATTN_NORM);
self.mins = '-3 -3 -3';
self.maxs = '3 3 3';
- self.move_movetype = MOVETYPE_TOSS;
break;
case PROJECTILE_TAG:
loopsound(self, CHAN_PAIN, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTN_NORM);
self.mins = '-2 -2 -2';
self.maxs = '2 2 2';
- self.move_movetype = MOVETYPE_TOSS;
break;
- default:
+ case PROJECTILE_GRENADE:
self.mins = '0 0 0';
self.maxs = '0 0 0';
- self.move_movetype = MOVETYPE_TOSS;
break;
+ case PROJECTILE_GRENADE_BOUNCING:
+ self.mins = '0 0 -3';
+ self.maxs = '0 0 -3';
+ self.move_movetype = MOVETYPE_BOUNCE;
+ self.move_moveflags = 0;
+ break;
+ default:
+ break;
}
}
Modified: trunk/data/qcsrc/common/constants.qh
===================================================================
--- trunk/data/qcsrc/common/constants.qh 2009-01-16 18:43:50 UTC (rev 5575)
+++ trunk/data/qcsrc/common/constants.qh 2009-01-16 19:59:00 UTC (rev 5576)
@@ -357,3 +357,8 @@
float PROJECTILE_ELECTRO = 1;
float PROJECTILE_ROCKET = 2;
float PROJECTILE_TAG = 3;
+float PROJECTILE_BULLET = 4;
+float PROJECTILE_CRYLINK = 5;
+float PROJECTILE_ELECTRO_BEAM = 6;
+float PROJECTILE_GRENADE = 7;
+float PROJECTILE_GRENADE_BOUNCING = 8;
Modified: trunk/data/qcsrc/server/csqcprojectile.qc
===================================================================
--- trunk/data/qcsrc/server/csqcprojectile.qc 2009-01-16 18:43:50 UTC (rev 5575)
+++ trunk/data/qcsrc/server/csqcprojectile.qc 2009-01-16 19:59:00 UTC (rev 5576)
@@ -7,7 +7,7 @@
if(self.csqcprojectile_clientanimate)
sf |= 0x80; // client animated, not interpolated
- if((self.scale != 0 && self.scale != 1) || self.effects != 0)
+ if(self.scale != 0 && self.scale != 1)
sf |= 0x40; // scale used
WriteByte(MSG_ENTITY, ENT_CLIENT_PROJECTILE);
@@ -32,12 +32,8 @@
{
WriteShort(MSG_ENTITY, self.modelindex);
if(sf & 0x40)
- {
WriteByte(MSG_ENTITY, bound(0, self.scale / 16.0, 255));
- WriteShort(MSG_ENTITY, self.effects & 65535);
- WriteByte(MSG_ENTITY, floor(self.effects / 65536));
- }
- WriteShort(MSG_ENTITY, self.csqcprojectile_type);
+ WriteByte(MSG_ENTITY, self.csqcprojectile_type);
}
return 1;
Modified: trunk/data/qcsrc/server/w_common.qc
===================================================================
--- trunk/data/qcsrc/server/w_common.qc 2009-01-16 18:43:50 UTC (rev 5575)
+++ trunk/data/qcsrc/server/w_common.qc 2009-01-16 19:59:00 UTC (rev 5576)
@@ -170,6 +170,8 @@
pointparticles(particleeffectnum("shotgun_impact"), self.origin, normalize(self.velocity) * 1000, 1);
else
pointparticles(particleeffectnum("machinegun_impact"), self.origin, normalize(self.velocity) * 1000, 1);
+
+ UpdateCSQCProjectile(self);
}
// a fake logarithm function
@@ -291,6 +293,8 @@
proj.projectiledeathtype = dtype;
proj.oldvelocity = proj.velocity;
+
+ CSQCProjectile(proj, TRUE, PROJECTILE_BULLET);
}
void fireBullet (vector start, vector dir, float spread, float damage, float force, float dtype, float tracer)
Modified: trunk/data/qcsrc/server/w_crylink.qc
===================================================================
--- trunk/data/qcsrc/server/w_crylink.qc 2009-01-16 18:43:50 UTC (rev 5575)
+++ trunk/data/qcsrc/server/w_crylink.qc 2009-01-16 19:59:00 UTC (rev 5576)
@@ -1,5 +1,4 @@
.float gravity;
-const vector proj_color = '1 1 1';
.entity realowner;
@@ -28,6 +27,8 @@
self.owner = world;
self.projectiledeathtype |= HITTYPE_BOUNCE;
//self.scale = 1 + self.cnt;
+
+ UpdateCSQCProjectile(self);
}
void W_Crylink_Touch2 (void)
@@ -55,6 +56,8 @@
self.owner = world;
self.projectiledeathtype |= HITTYPE_BOUNCE;
// self.scale = 1 + 1 * self.cnt;
+
+ UpdateCSQCProjectile(self);
}
void W_Crylink_Attack (void)
@@ -121,7 +124,9 @@
proj.effects = EF_LOWPRECISION;
proj.flags = FL_PROJECTILE;
- proj.colormod = proj_color;
+
+ CSQCProjectile(proj, TRUE, PROJECTILE_CRYLINK);
+
counter = counter + 1;
}
}
@@ -171,7 +176,9 @@
proj.effects = EF_LOWPRECISION;
proj.flags = FL_PROJECTILE;
- proj.colormod = proj_color;
+
+ CSQCProjectile(proj, TRUE, PROJECTILE_CRYLINK);
+
counter = counter + 1;
}
}
Modified: trunk/data/qcsrc/server/w_electro.qc
===================================================================
--- trunk/data/qcsrc/server/w_electro.qc 2009-01-16 18:43:50 UTC (rev 5575)
+++ trunk/data/qcsrc/server/w_electro.qc 2009-01-16 19:59:00 UTC (rev 5576)
@@ -116,6 +116,8 @@
//sound (proj, CHAN_PAIN, "weapons/electro_fly.wav", VOL_BASE, ATTN_NORM);
//sounds bad
+
+ CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO_BEAM);
}
void W_Electro_Attack2()
Modified: trunk/data/qcsrc/server/w_grenadelauncher.qc
===================================================================
--- trunk/data/qcsrc/server/w_grenadelauncher.qc 2009-01-16 18:43:50 UTC (rev 5575)
+++ trunk/data/qcsrc/server/w_grenadelauncher.qc 2009-01-16 19:59:00 UTC (rev 5576)
@@ -67,6 +67,9 @@
sound (self, CHAN_PROJECTILE, "weapons/grenade_bounce6.wav", VOL_BASE, ATTN_NORM);
self.projectiledeathtype |= HITTYPE_BOUNCE;
}
+
+ if(trace_ent && trace_ent.solid > SOLID_TRIGGER) // CSQC doesn't know about these entities well enough
+ UpdateCSQCProjectile(self);
}
void W_Grenade_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
@@ -109,10 +112,11 @@
gren.touch = W_Grenade_Touch1;
gren.velocity = w_shotdir * cvar("g_balance_grenadelauncher_primary_speed") + v_up * cvar("g_balance_grenadelauncher_primary_speed_up");
W_SetupProjectileVelocity(gren);
- gren.avelocity_x = random () * -500 - 500;
gren.angles = vectoangles (gren.velocity);
gren.flags = FL_PROJECTILE;
+
+ CSQCProjectile(gren, TRUE, PROJECTILE_GRENADE);
}
void W_Grenade_Attack2 (void)
@@ -150,10 +154,11 @@
gren.event_damage = W_Grenade_Damage;
gren.velocity = w_shotdir * cvar("g_balance_grenadelauncher_secondary_speed") + v_up * cvar("g_balance_grenadelauncher_secondary_speed_up");
W_SetupProjectileVelocity(gren);
- gren.avelocity = '100 150 100';
gren.angles = vectoangles (gren.velocity);
gren.flags = FL_PROJECTILE;
+
+ CSQCProjectile(gren, TRUE, PROJECTILE_GRENADE_BOUNCING);
}
void spawnfunc_weapon_grenadelauncher (void)
More information about the nexuiz-commits
mailing list