r6111 - trunk/data/qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Thu Mar 12 02:52:05 EDT 2009
Author: lordhavoc
Date: 2009-03-12 02:52:05 -0400 (Thu, 12 Mar 2009)
New Revision: 6111
Modified:
trunk/data/qcsrc/server/cl_client.qc
trunk/data/qcsrc/server/cl_weaponsystem.qc
trunk/data/qcsrc/server/g_world.qc
trunk/data/qcsrc/server/w_rocketlauncher.qc
trunk/data/qcsrc/server/w_shotgun.qc
trunk/data/qcsrc/server/w_uzi.qc
Log:
fixed muzzleflashes with sv_qcweaponanimation mode
implemented support for models/weapons/h_name.dpm (and .animinfo)
Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc 2009-03-12 05:21:34 UTC (rev 6110)
+++ trunk/data/qcsrc/server/cl_client.qc 2009-03-12 06:52:05 UTC (rev 6111)
@@ -556,6 +556,7 @@
self.weapon = 0;
self.weaponmodel = "";
self.weaponentity = world;
+ self.exteriorweaponentity = world;
self.killcount = -666;
self.velocity = '0 0 0';
self.avelocity = '0 0 0';
Modified: trunk/data/qcsrc/server/cl_weaponsystem.qc
===================================================================
--- trunk/data/qcsrc/server/cl_weaponsystem.qc 2009-03-12 05:21:34 UTC (rev 6110)
+++ trunk/data/qcsrc/server/cl_weaponsystem.qc 2009-03-12 06:52:05 UTC (rev 6111)
@@ -280,12 +280,16 @@
self.frame = self.anim_idle_x;
if (self.owner.weaponentity != self)
{
+ if (self.weaponentity)
+ remove(self.weaponentity);
remove(self);
return;
}
if (self.owner.deadflag != DEAD_NO)
{
self.model = "";
+ if (self.weaponentity)
+ self.weaponentity.model = "";
return;
}
if (self.cnt != self.owner.weapon || self.dmg != self.owner.modelindex || self.deadflag != self.owner.deadflag)
@@ -298,14 +302,32 @@
float animfile;
if (self.owner.weaponname != "")
{
+ // if there is a child entity, hide it until we're sure we use it
+ if (self.weaponentity)
+ self.weaponentity.model = "";
if (qcweaponanimation)
setmodel(self, strcat("models/weapons/v_", self.owner.weaponname, ".md3")); // precision set below
else
{
- animfilename = strcat("models/weapons/w_", self.owner.weaponname, ".dpm.animinfo");
+ animfilename = strcat("models/weapons/h_", self.owner.weaponname, ".dpm.animinfo");
animfile = fopen(animfilename, FILE_READ);
if (animfile >= 0)
{
+ if (!self.weaponentity)
+ self.weaponentity = spawn();
+ setmodel(self, strcat("models/weapons/h_", self.owner.weaponname, ".dpm")); // precision set below
+ setmodel(self.weaponentity, strcat("models/weapons/v_", self.owner.weaponname, ".md3")); // precision does not matter
+ setattachment(self.weaponentity, self, "weapon");
+ }
+ else
+ {
+ animfilename = strcat("models/weapons/w_", self.owner.weaponname, ".dpm.animinfo");
+ animfile = fopen(animfilename, FILE_READ);
+ if (animfile >= 0)
+ setmodel(self, strcat("models/weapons/w_", self.owner.weaponname, ".dpm")); // precision set below
+ }
+ if (animfile >= 0)
+ {
animparseerror = FALSE;
self.anim_fire1 = animparseline(animfile);
self.anim_fire2 = animparseline(animfile);
@@ -314,7 +336,6 @@
fclose(animfile);
if (animparseerror)
print("Parse error in ", animfilename, ", some player animations are broken\n");
- setmodel(self, strcat("models/weapons/w_", self.owner.weaponname, ".dpm")); // precision set below
}
else
{
@@ -340,7 +361,9 @@
e.modelindex = self.modelindex;
float idx;
vector v;
- idx = gettagindex(e, "bone02");
+ idx = gettagindex(e, "shot");
+ if (!idx)
+ idx = gettagindex(e, "bone02");
if(idx)
{
v = gettaginfo(e, idx);
@@ -366,6 +389,12 @@
self.alpha = 1;
self.colormap = self.owner.colormap;
+ if (self.weaponentity)
+ {
+ self.weaponentity.effects = self.effects & EF_ADDITIVE;
+ self.weaponentity.alpha = self.alpha;
+ self.weaponentity.colormap = self.colormap;
+ }
self.angles = '0 0 0';
local float f;
@@ -567,7 +596,6 @@
self.weaponentity.classname = "weaponentity";
self.weaponentity.solid = SOLID_NOT;
self.weaponentity.owner = self;
- self.weaponentity.weaponentity = self.weaponentity;
setmodel(self.weaponentity, ""); // precision set when changed
self.weaponentity.origin = '0 0 0';
self.weaponentity.angles = '0 0 0';
Modified: trunk/data/qcsrc/server/g_world.qc
===================================================================
--- trunk/data/qcsrc/server/g_world.qc 2009-03-12 05:21:34 UTC (rev 6110)
+++ trunk/data/qcsrc/server/g_world.qc 2009-03-12 06:52:05 UTC (rev 6111)
@@ -1243,7 +1243,11 @@
e.movetype = MOVETYPE_NONE;
e.takedamage = DAMAGE_NO;
if(e.weaponentity)
+ {
e.weaponentity.effects = EF_NODRAW;
+ if (e.weaponentity.weaponentity)
+ e.weaponentity.weaponentity.effects = EF_NODRAW;
+ }
if(clienttype(e) == CLIENTTYPE_REAL)
{
stuffcmd(e, "\nscr_printspeed 1000000\n");
Modified: trunk/data/qcsrc/server/w_rocketlauncher.qc
===================================================================
--- trunk/data/qcsrc/server/w_rocketlauncher.qc 2009-03-12 05:21:34 UTC (rev 6110)
+++ trunk/data/qcsrc/server/w_rocketlauncher.qc 2009-03-12 06:52:05 UTC (rev 6111)
@@ -246,7 +246,15 @@
flash.customizeentityforclient = CL_Weaponentity_CustomizeEntityForClient;
setorigin (flash, '5 0 0');
setmodel (flash, "models/flash.md3"); // precision set below
- setattachment(flash, self.weaponentity, "bone02");
+ if (gettagindex(self.weaponentity, "shot"))
+ setattachment(flash, self.weaponentity, "shot");
+ else if (gettagindex(self.weaponentity, "bone02"))
+ setattachment(flash, self.weaponentity, "bone02");
+ else
+ {
+ setorigin(flash, '27 0 5');
+ setattachment(flash, self.weaponentity, "");
+ }
SUB_SetFade (flash, time, 0.1);
// muzzle flash for 3rd person view
Modified: trunk/data/qcsrc/server/w_shotgun.qc
===================================================================
--- trunk/data/qcsrc/server/w_shotgun.qc 2009-03-12 05:21:34 UTC (rev 6110)
+++ trunk/data/qcsrc/server/w_shotgun.qc 2009-03-12 06:52:05 UTC (rev 6111)
@@ -33,7 +33,15 @@
flash = spawn();
setorigin(flash, '5 0 0');
setmodel(flash, "models/uziflash.md3"); // precision set below
- setattachment(flash, self.weaponentity, "bone02");
+ if (gettagindex(self.weaponentity, "shot"))
+ setattachment(flash, self.weaponentity, "shot");
+ else if (gettagindex(self.weaponentity, "bone02"))
+ setattachment(flash, self.weaponentity, "bone02");
+ else
+ {
+ setorigin(flash, '48 0 5');
+ setattachment(flash, self.weaponentity, "");
+ }
flash.owner = self;
flash.viewmodelforclient = self;
flash.customizeentityforclient = CL_Weaponentity_CustomizeEntityForClient;
@@ -78,7 +86,15 @@
flash = spawn();
setorigin(flash, '53 5 0');
setmodel(flash, "models/uziflash.md3"); // precision set below
- setattachment(flash, self.weaponentity, "bone01");
+ if (gettagindex(self.weaponentity, "shot"))
+ setattachment(flash, self.weaponentity, "shot");
+ else if (gettagindex(self.weaponentity, "bone01"))
+ setattachment(flash, self.weaponentity, "bone01");
+ else
+ {
+ setorigin(flash, '48 0 5');
+ setattachment(flash, self.weaponentity, "");
+ }
flash.owner = self;
flash.viewmodelforclient = self;
flash.customizeentityforclient = CL_Weaponentity_CustomizeEntityForClient;
Modified: trunk/data/qcsrc/server/w_uzi.qc
===================================================================
--- trunk/data/qcsrc/server/w_uzi.qc 2009-03-12 05:21:34 UTC (rev 6110)
+++ trunk/data/qcsrc/server/w_uzi.qc 2009-03-12 06:52:05 UTC (rev 6111)
@@ -44,7 +44,15 @@
flash = spawn();
setorigin(flash, '5 0 0');
setmodel(flash, "models/uziflash.md3"); // precision set below
- setattachment(flash, self.weaponentity, "bone02");
+ if (gettagindex(self.weaponentity, "shot"))
+ setattachment(flash, self.weaponentity, "shot");
+ else if (gettagindex(self.weaponentity, "bone02"))
+ setattachment(flash, self.weaponentity, "bone02");
+ else
+ {
+ setorigin(flash, '48 0 5');
+ setattachment(flash, self.weaponentity, "");
+ }
flash.owner = self;
flash.viewmodelforclient = self;
flash.customizeentityforclient = CL_Weaponentity_CustomizeEntityForClient;
More information about the nexuiz-commits
mailing list