[nexuiz-commits] r6238 - in branches/nexuiz-2.0: . data/qcsrc/server data/scripts

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri Mar 20 12:52:06 EDT 2009


Author: div0
Date: 2009-03-20 12:52:05 -0400 (Fri, 20 Mar 2009)
New Revision: 6238

Modified:
   branches/nexuiz-2.0/.patchsets
   branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc
   branches/nexuiz-2.0/data/qcsrc/server/constants.qh
   branches/nexuiz-2.0/data/qcsrc/server/defs.qh
   branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
   branches/nexuiz-2.0/data/qcsrc/server/target_spawn.qc
   branches/nexuiz-2.0/data/scripts/entities.def
Log:
r6223 | div0 | 2009-03-19 15:20:03 +0100 (Thu, 19 Mar 2009) | 3 lines
weapon system: fix "" errors
dragcursor: fix dragging already attached entities
r6224 | div0 | 2009-03-19 15:23:43 +0100 (Thu, 19 Mar 2009) | 2 lines
block movetype while dragging
r6225 | div0 | 2009-03-19 15:24:39 +0100 (Thu, 19 Mar 2009) | 2 lines
let stuff unset onground after being dragged
r6226 | div0 | 2009-03-19 15:30:01 +0100 (Thu, 19 Mar 2009) | 2 lines
actualyl, let's not reset FL_ONGROUND after dragging stuff, as items floating in air are more fun
r6227 | div0 | 2009-03-20 10:39:51 +0100 (Fri, 20 Mar 2009) | 2 lines
target_spawn: allow cloning from other ents
r6228 | div0 | 2009-03-20 10:41:28 +0100 (Fri, 20 Mar 2009) | 2 lines
document this change
r6229 | div0 | 2009-03-20 13:25:06 +0100 (Fri, 20 Mar 2009) | 2 lines
entity dragging: make it more gravity gun-like
r6230 | div0 | 2009-03-20 13:41:49 +0100 (Fri, 20 Mar 2009) | 2 lines
prevent bugs with dragging a player while he dies
r6231 | div0 | 2009-03-20 13:52:41 +0100 (Fri, 20 Mar 2009) | 2 lines
use the same tag scale workaround for misc_follow attaching
r6232 | div0 | 2009-03-20 14:15:51 +0100 (Fri, 20 Mar 2009) | 2 lines
fix spawning from spectator mode (no longer cause a jump there)
r6233 | div0 | 2009-03-20 14:42:57 +0100 (Fri, 20 Mar 2009) | 2 lines
don't change angles of submodel
r6234 | div0 | 2009-03-20 14:50:05 +0100 (Fri, 20 Mar 2009) | 2 lines
dragging: that bounce is annoying :P
r6235 | div0 | 2009-03-20 14:53:40 +0100 (Fri, 20 Mar 2009) | 2 lines
clear onground while dragging
r6236 | div0 | 2009-03-20 14:58:10 +0100 (Fri, 20 Mar 2009) | 2 lines
use the walk movetype instead, hope it's better


Modified: branches/nexuiz-2.0/.patchsets
===================================================================
--- branches/nexuiz-2.0/.patchsets	2009-03-20 16:49:18 UTC (rev 6237)
+++ branches/nexuiz-2.0/.patchsets	2009-03-20 16:52:05 UTC (rev 6238)
@@ -1,2 +1,2 @@
 master = svn://svn.icculus.org/nexuiz/trunk
-revisions_applied = 1-6039,6044-6220
+revisions_applied = 1-6039,6044-6220,6223-6236

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2009-03-20 16:49:18 UTC (rev 6237)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2009-03-20 16:52:05 UTC (rev 6238)
@@ -2026,8 +2026,7 @@
 		if (self.BUTTON_JUMP && !self.version_mismatch) {
 			self.welcomemessage_time = 0;
 			self.flags &~= FL_JUMPRELEASED;
-			LeaveSpectatorMode();
-			return;
+			self.flags |= FL_SPAWNING;
 		} else if(self.BUTTON_ATCK && !self.version_mismatch) {
 			self.welcomemessage_time = 0;
 			self.flags &~= FL_JUMPRELEASED;
@@ -2038,6 +2037,12 @@
 	} else {
 		if (!(self.BUTTON_ATCK || self.BUTTON_JUMP)) {
 			self.flags |= FL_JUMPRELEASED;
+			if(self.flags & FL_SPAWNING)
+			{
+				self.flags &~= FL_SPAWNING;
+				LeaveSpectatorMode();
+				return;
+			}
 		}
 	}
 	PrintWelcomeMessage(self);
@@ -2049,8 +2054,7 @@
 		if (self.BUTTON_JUMP && !self.version_mismatch) {
 			self.welcomemessage_time = 0;
 			self.flags &~= FL_JUMPRELEASED;
-			LeaveSpectatorMode();
-			return;
+			self.flags |= FL_SPAWNING;
 		} else if(self.BUTTON_ATCK) {
 			self.welcomemessage_time = 0;
 			self.flags &~= FL_JUMPRELEASED;
@@ -2072,6 +2076,12 @@
 	} else {
 		if (!(self.BUTTON_ATCK || self.BUTTON_ATCK2)) {
 			self.flags |= FL_JUMPRELEASED;
+			if(self.flags & FL_SPAWNING)
+			{
+				self.flags &~= FL_SPAWNING;
+				LeaveSpectatorMode();
+				return;
+			}
 		}
 	}
 	PrintWelcomeMessage(self);
@@ -2379,20 +2389,180 @@
 	target_voicescript_next(self);
 }
 
-void DragCursor_Think()
+// on dragger:
+.entity dragentity;
+.float draggravity;
+.float dragspeed; // speed of mouse wheel action
+.float dragdistance; // distance of dragentity's draglocalvector from view_ofs
+.vector draglocalvector; // local attachment vector of the dragentity
+.float draglocalangle;
+// on draggee:
+.entity draggedby;
+.float dragmovetype;
+void Drag_Begin(entity dragger, entity draggee, vector touchpoint)
 {
-	self.model = self.owner.dragentity.model;
-	self.modelindex = self.owner.dragentity.modelindex;
-	self.origin = self.owner.dragentity.origin;
-	self.angles = self.owner.dragentity.angles;
-	self.tag_entity = self.owner.dragentity.tag_entity;
-	self.tag_index = self.owner.dragentity.tag_index;
-	self.scale = self.owner.dragentity.scale;
-	detach_sameorigin(self);
+	float tagscale;
 
-	self.nextthink = time;
+	draggee.dragmovetype = draggee.movetype;
+	draggee.draggravity = draggee.gravity;
+	draggee.movetype = MOVETYPE_WALK;
+	draggee.gravity = 0.00001;
+	draggee.flags &~= FL_ONGROUND;
+	draggee.draggedby = dragger;
+
+	dragger.dragentity = draggee;
+
+	dragger.dragdistance = vlen(touchpoint - dragger.origin - dragger.view_ofs);
+	dragger.draglocalangle = draggee.angles_y - dragger.v_angle_y;
+	touchpoint = touchpoint - gettaginfo(draggee, 0);
+	tagscale = pow(vlen(v_forward), -2);
+	dragger.draglocalvector_x = touchpoint * v_forward * tagscale;
+	dragger.draglocalvector_y = touchpoint * v_right * tagscale;
+	dragger.draglocalvector_z = touchpoint * v_up * tagscale;
+
+	dragger.dragspeed = 64;
 }
 
+void Drag_Finish(entity dragger)
+{
+	entity draggee;
+	draggee = dragger.dragentity;
+	if(dragger)
+		dragger.dragentity = world;
+	draggee.draggedby = world;
+	draggee.movetype = draggee.dragmovetype;
+	draggee.gravity = draggee.draggravity;
+
+	switch(draggee.movetype)
+	{
+		case MOVETYPE_TOSS:
+		case MOVETYPE_WALK:
+		case MOVETYPE_STEP:
+		case MOVETYPE_FLYMISSILE:
+		case MOVETYPE_BOUNCE:
+		case MOVETYPE_BOUNCEMISSILE:
+			break;
+		default:
+			draggee.velocity = '0 0 0';
+			break;
+	}
+
+	if((draggee.flags & FL_ITEM) && (vlen(draggee.velocity) < 32))
+	{
+		draggee.velocity = '0 0 0';
+		draggee.flags |= FL_ONGROUND; // floating items are FUN
+	}
+}
+
+float Drag_IsDraggable(entity draggee)
+{
+	// TODO add more checks for bad stuff here
+	if(draggee.classname == "func_bobbing")
+		return FALSE;
+	if(draggee.classname == "door") // FIXME find out why these must be excluded, or work around the problem (trying to drag these causes like 4 fps)
+		return FALSE;
+	if(draggee.classname == "plat")
+		return FALSE;
+	if(draggee.classname == "func_button")
+		return FALSE;
+	if(draggee.model == "")
+		return FALSE;
+	if(draggee.classname == "spectator")
+		return FALSE;
+	if(draggee.classname == "observer")
+		return FALSE;
+	if(draggee.classname == "exteriorweaponentity")
+		return FALSE;
+
+	return TRUE;
+}
+
+float Drag_MayChangeAngles(entity draggee)
+{
+	// TODO add more checks for bad stuff here
+	if(substring(draggee.model, 0, 1) == "*")
+		return FALSE;
+	return TRUE;
+}
+
+void Drag_MoveForward(entity dragger)
+{
+	dragger.dragdistance += dragger.dragspeed;
+}
+
+void Drag_SetSpeed(entity dragger, float s)
+{
+	dragger.dragspeed = pow(2, s);
+}
+
+void Drag_MoveBackward(entity dragger)
+{
+	dragger.dragdistance = max(0, dragger.dragdistance - dragger.dragspeed);
+}
+
+void Drag_Update(entity dragger)
+{
+	vector curorigin, neworigin, goodvelocity;
+	float f;
+	entity draggee;
+
+	draggee = dragger.dragentity;
+	draggee.flags &~= FL_ONGROUND;
+
+	curorigin = gettaginfo(draggee, 0);
+	curorigin = curorigin + v_forward * dragger.draglocalvector_x + v_right * dragger.draglocalvector_y + v_up * dragger.draglocalvector_z;
+	makevectors(dragger.v_angle);
+	neworigin = dragger.origin + dragger.view_ofs + v_forward * dragger.dragdistance;
+	goodvelocity = (neworigin - curorigin) * (1 / frametime);
+
+	while(draggee.angles_y - dragger.v_angle_y - dragger.draglocalangle > 180)
+		dragger.draglocalangle += 360;
+	while(draggee.angles_y - dragger.v_angle_y - dragger.draglocalangle <= -180)
+		dragger.draglocalangle -= 360;
+
+	f = min(frametime * 10, 1);
+	draggee.velocity = draggee.velocity * (1 - f) + goodvelocity * f;
+
+	if(Drag_MayChangeAngles(draggee))
+		draggee.angles_y = draggee.angles_y * (1 - f) + (dragger.v_angle_y + dragger.draglocalangle) * f;
+	
+	draggee.ltime = max(servertime + serverframetime, draggee.ltime); // fixes func_train breakage
+
+	te_lightning1(dragger, dragger.origin + dragger.view_ofs, curorigin);
+}
+
+float Drag_CanDrag(entity dragger)
+{
+	return (dragger.deadflag == DEAD_NO) || (dragger.classname == "player");
+}
+
+float Drag_IsDragging(entity dragger)
+{
+	if(!dragger.dragentity)
+		return FALSE;
+	if(wasfreed(dragger.dragentity) || dragger.dragentity.draggedby != dragger)
+	{
+		dragger.dragentity = world;
+		return FALSE;
+	}
+	if(!Drag_CanDrag(dragger) || !Drag_IsDraggable(dragger.dragentity))
+	{
+		Drag_Finish(dragger);
+		return FALSE;
+	}
+	return TRUE;
+}
+
+void Drag_MoveDrag(entity from, entity to)
+{
+	if(from.draggedby)
+	{
+		to.draggedby = from.draggedby;
+		to.draggedby.dragentity = to;
+		from.draggedby = world;
+	}
+}
+
 /*
 =============
 PlayerPostThink
@@ -2440,58 +2610,48 @@
 	}
 
 	if(sv_cheats)
-		if(self.BUTTON_DRAG)
-			if(!self.dragentity)
-				if(self.cursor_trace_ent)
-					if(!self.cursor_trace_ent.tag_index)
-					{
-						self.dragentity = self.cursor_trace_ent;
-						self.dragcursor = spawn();
-						self.dragcursor.owner = self;
-						self.dragcursor.think = DragCursor_Think;
-						self.dragcursor.nextthink = time;
-						self.dragcursor.exteriormodeltoclient = self;
-						attach_sameorigin(self.dragentity, self.weaponentity, "");
-						self.dragentity.effects |= EF_FLAME;
-					}
+		if(Drag_CanDrag(self))
+			if(self.BUTTON_DRAG)
+				if(!self.dragentity)
+					if(self.cursor_trace_ent)
+						if(Drag_IsDraggable(self.cursor_trace_ent))
+						{
+							if(self.cursor_trace_ent.draggedby)
+								Drag_Finish(self.cursor_trace_ent.draggedby);
+							if(self.cursor_trace_ent.tag_entity)
+								detach_sameorigin(self.cursor_trace_ent);
+							Drag_Begin(self, self.cursor_trace_ent, self.cursor_trace_endpos);
+						}
 	
-	if(self.dragentity)
+	if(Drag_IsDragging(self))
 	{
 		if(self.BUTTON_DRAG)
 		{
-			float f;
-			if(self.dragspeed == 0)
-				self.dragspeed = 32;
 			if(self.impulse == 10 || self.impulse == 15 || self.impulse == 18)
 			{
-				f = 1 + self.dragspeed / vlen(self.dragentity.origin);
-				self.dragentity.origin = self.dragentity.origin * f;
+				Drag_MoveForward(self);
 				self.impulse = 0;
 			}
 			else if(self.impulse == 12 || self.impulse == 16 || self.impulse == 19)
 			{
-				f = max(0.5, 1 - self.dragspeed / vlen(self.dragentity.origin));
-				self.dragentity.origin = self.dragentity.origin * f;
+				Drag_MoveBackward(self);
 				self.impulse = 0;
 			}
 			else if(self.impulse >= 1 && self.impulse <= 9)
 			{
-				self.dragspeed = pow(2, self.impulse);
-				self.impulse = 0;
+				Drag_SetSpeed(self, self.impulse - 1);
 			}
 			else if(self.impulse == 14)
 			{
-				self.dragspeed = pow(2, 10);
-				self.impulse = 0;
+				Drag_SetSpeed(self, 9);
 			}
+
+			if(frametime)
+				Drag_Update(self);
 		}
 		else
 		{
-			self.dragentity.effects &~= EF_FLAME;
-			detach_sameorigin(self.dragentity);
-			self.dragentity = world;
-			remove(self.dragcursor);
-			self.dragcursor = world;
+			Drag_Finish(self);
 		}
 	}
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc	2009-03-20 16:49:18 UTC (rev 6237)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc	2009-03-20 16:52:05 UTC (rev 6238)
@@ -62,6 +62,9 @@
 	setsize(self, oldself.mins, oldself.maxs);
 	self.oldorigin = oldself.origin;
 	self.reset = SUB_Remove;
+
+	Drag_MoveDrag(oldself, self);
+
 	self = oldself;
 }
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc	2009-03-20 16:49:18 UTC (rev 6237)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc	2009-03-20 16:52:05 UTC (rev 6238)
@@ -346,8 +346,18 @@
 				self.weaponentity.model = "";
 			setmodel(self, strcat("models/weapons/v_", self.owner.weaponname, ".md3")); // precision set below
 			v_shot_idx = gettagindex(self, "shot"); // used later
-			if(!qcweaponanimation)
+
+			if(qcweaponanimation)
 			{
+				self.angles = '0 0 0';
+				makevectors(self.angles_x * '-1 0 0' + self.angles_y * '0 1 0' + self.angles_z * '0 0 1');
+				self.movedir = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+				self.movedir_x += 32;
+				self.spawnorigin = self.movedir;
+				// oldorigin - not calculated here
+			}
+			else
+			{
 				setmodel(self, strcat("models/weapons/h_", self.owner.weaponname, ".dpm")); // precision set below
 				animfilename = strcat("models/weapons/h_", self.owner.weaponname, ".dpm.animinfo");
 				animfile = fopen(animfilename, FILE_READ);
@@ -383,78 +393,73 @@
 						remove(self.weaponentity);
 					self.weaponentity = world;
 				}
-			}
-		}
-		else
-		{
-			self.model = "";
-			if(self.weaponentity)
-				remove(self.weaponentity);
-			self.weaponentity = world;
-		}
 
-		if(qcweaponanimation)
-		{
-			self.angles = '0 0 0';
-			makevectors(self.angles_x * '-1 0 0' + self.angles_y * '0 1 0' + self.angles_z * '0 0 1');
-			self.movedir = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
-			self.movedir_x += 32;
-			self.spawnorigin = self.movedir;
-			// oldorigin - not calculated here
-		}
-		else
-		{
-			self.origin = '0 0 0';
-			self.angles = '0 0 0';
-			self.frame = 0;
-			self.viewmodelforclient = world;
+				self.origin = '0 0 0';
+				self.angles = '0 0 0';
+				self.frame = 0;
+				self.viewmodelforclient = world;
 
-			float idx;
-			idx = gettagindex(self, "shot");
-			if(idx)
-			{
-				self.movedir = gettaginfo(self, idx);
-			}
-			else
-			{
-				print("WARNING: weapon model ", self.model, " does not support the 'shot' tag, will display shots TOTALLY wrong\n");
-				self.movedir = '0 0 0';
-			}
+				float idx;
+				idx = gettagindex(self, "shot");
+				if(idx)
+				{
+					self.movedir = gettaginfo(self, idx);
+				}
+				else
+				{
+					print("WARNING: weapon model ", self.model, " does not support the 'shot' tag, will display shots TOTALLY wrong\n");
+					self.movedir = '0 0 0';
+				}
 
-			idx = gettagindex(self, "shell");
-			if(idx)
-			{
-				self.spawnorigin = gettaginfo(self, idx);
-			}
-			else
-			{
-				print("WARNING: weapon model ", self.model, " does not support the 'shell' tag, will display casings wrong\n");
-				self.spawnorigin = self.movedir;
-			}
-
-			if(v_shot_idx)
-			{
-				self.oldorigin = '0 0 0';
-			}
-			else
-			{
-				if(self.weaponentity)
-					idx = gettagindex(self, "weapon");
-				else
-					idx = gettagindex(self, "handle");
+				idx = gettagindex(self, "shell");
 				if(idx)
 				{
-					self.oldorigin = self.movedir - gettaginfo(self, idx);
+					self.spawnorigin = gettaginfo(self, idx);
 				}
 				else
 				{
-					print("WARNING: weapon model ", self.model, " does not support the 'handle' tag and neither does the v_ model support the 'shot' tag, will display muzzle flashes TOTALLY wrong\n");
-					self.oldorigin = '0 0 0'; // there is no way to recover from this
+					print("WARNING: weapon model ", self.model, " does not support the 'shell' tag, will display casings wrong\n");
+					self.spawnorigin = self.movedir;
 				}
+
+				if(v_shot_idx)
+				{
+					self.oldorigin = '0 0 0';
+				}
+				else
+				{
+					if(self.weaponentity)
+						idx = gettagindex(self, "weapon");
+					else
+						idx = gettagindex(self, "handle");
+					if(idx)
+					{
+						self.oldorigin = self.movedir - gettaginfo(self, idx);
+					}
+					else
+					{
+						print("WARNING: weapon model ", self.model, " does not support the 'handle' tag and neither does the v_ model support the 'shot' tag, will display muzzle flashes TOTALLY wrong\n");
+						self.oldorigin = '0 0 0'; // there is no way to recover from this
+					}
+				}
+
+				self.viewmodelforclient = self.owner;
 			}
-
-			self.viewmodelforclient = self.owner;
 		}
+		else
+		{
+			self.model = "";
+			if(self.weaponentity)
+				remove(self.weaponentity);
+			self.weaponentity = world;
+			self.movedir = '0 0 0';
+			self.spawnorigin = '0 0 0';
+			self.oldorigin = '0 0 0';
+			self.anim_fire1  = '0 1 0.01';
+			self.anim_fire2  = '0 1 0.01';
+			self.anim_idle   = '0 1 0.01';
+			self.anim_reload = '0 1 0.01';
+		}
 
 		self.view_ofs = '0 0 0';
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/constants.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/constants.qh	2009-03-20 16:49:18 UTC (rev 6237)
+++ branches/nexuiz-2.0/data/qcsrc/server/constants.qh	2009-03-20 16:52:05 UTC (rev 6238)
@@ -21,6 +21,7 @@
 float	FL_PROJECTILE				= 32768;
 float	FL_TOSSED				= 65536;
 float   FL_NO_WEAPON_STAY       = 131072;
+float   FL_SPAWNING       = 262144;
 
 float	MOVETYPE_NONE				= 0;
 float	MOVETYPE_ANGLENOCLIP			= 1;

Modified: branches/nexuiz-2.0/data/qcsrc/server/defs.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/defs.qh	2009-03-20 16:49:18 UTC (rev 6237)
+++ branches/nexuiz-2.0/data/qcsrc/server/defs.qh	2009-03-20 16:52:05 UTC (rev 6238)
@@ -553,6 +553,4 @@
 
 float servertime, serverprevtime, serverframetime;
 
-.entity dragentity;
-.float dragspeed;
-.entity dragcursor;
+void Drag_MoveDrag(entity from, entity to);

Modified: branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc	2009-03-20 16:49:18 UTC (rev 6237)
+++ branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc	2009-03-20 16:52:05 UTC (rev 6238)
@@ -2054,14 +2054,16 @@
 {
 	vector org, t_forward, t_left, t_up, e_forward, e_up;
 	vector org0, ang0;
+	float tagscale;
 
 	ang0 = e.angles;
 	org0 = e.origin;
 
 	org = e.origin - gettaginfo(to, gettagindex(to, tag));
-	t_forward = v_forward;
-	t_left = v_right * -1;
-	t_up = v_up;
+	tagscale = pow(vlen(v_forward), -2); // undo a scale on the tag
+	t_forward = v_forward * tagscale;
+	t_left = v_right * -tagscale;
+	t_up = v_up * tagscale;
 
 	e.origin_x = org * t_forward;
 	e.origin_y = org * t_left;

Modified: branches/nexuiz-2.0/data/qcsrc/server/target_spawn.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/target_spawn.qc	2009-03-20 16:49:18 UTC (rev 6237)
+++ branches/nexuiz-2.0/data/qcsrc/server/target_spawn.qc	2009-03-20 16:52:05 UTC (rev 6238)
@@ -30,10 +30,16 @@
 	vector data, data2;
 	entity oldself;
 	entity oldactivator;
+	entity kt, t2, t3, t4;
 
 	n = tokenize_sane(self.message);
 	self.target_spawn_activator = activator;
 
+	kt = find(world, targetname, self.killtarget);
+	t2 = find(world, targetname, self.target2);
+	t3 = find(world, targetname, self.target3);
+	t4 = find(world, targetname, self.target4);
+
 	for(i = 0; i < n-1; i += 2)
 	{
 		key = argv(i);
@@ -111,6 +117,26 @@
 					valueent = e;
 					value = "";
 				}
+				else if(value == "killtarget")
+				{
+					valueent = kt;
+					value = "";
+				}
+				else if(value == "target2")
+				{
+					valueent = t2;
+					value = "";
+				}
+				else if(value == "target3")
+				{
+					valueent = t3;
+					value = "";
+				}
+				else if(value == "target4")
+				{
+					valueent = t4;
+					value = "";
+				}
 				else if(value == "time")
 				{
 					valueent = world;

Modified: branches/nexuiz-2.0/data/scripts/entities.def
===================================================================
--- branches/nexuiz-2.0/data/scripts/entities.def	2009-03-20 16:49:18 UTC (rev 6237)
+++ branches/nexuiz-2.0/data/scripts/entities.def	2009-03-20 16:52:05 UTC (rev 6238)
@@ -1255,7 +1255,7 @@
 $E.field
 $E.field+offset
 $E.field+offset+randomoffset
-where "E" can be self, activator, target (the entity being created/modified) and pusher.
+where "E" can be self, activator, target (the entity being created/modified), killtarget, target2, target3, target4 and pusher.
 Example is a Mario-style question mark block which could throw a new weapon_nex when activated like this:
 {
 "classname" "func_button"
@@ -1277,6 +1277,10 @@
 message: entity field list
 target: when set, target_spawn edits entities, instead of creating new ones
 count: make sure no more than count entities have been created by this (refuse to spawn new ones if exceeded)
+killtarget: reference entity (can be used as $killtarget)
+target2: reference entity (can be used as $target2)
+target3: reference entity (can be used as $target3)
+target4: reference entity (can be used as $target4)
 -------- SPAWNFLAGS --------
 ONLOAD: create a first entity on map load
 */



More information about the nexuiz-commits mailing list