[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