r4304 - in trunk/data/qcsrc: client common server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Wed Sep 3 03:51:30 EDT 2008
Author: div0
Date: 2008-09-03 03:51:13 -0400 (Wed, 03 Sep 2008)
New Revision: 4304
Modified:
trunk/data/qcsrc/client/Main.qc
trunk/data/qcsrc/client/View.qc
trunk/data/qcsrc/common/util.qc
trunk/data/qcsrc/common/util.qh
trunk/data/qcsrc/server/cl_weapons.qc
trunk/data/qcsrc/server/cl_weaponsystem.qc
trunk/data/qcsrc/server/portals.qc
trunk/data/qcsrc/server/t_items.qc
trunk/data/qcsrc/server/t_teleporters.qc
trunk/data/qcsrc/server/w_porto.qc
trunk/data/qcsrc/server/w_uzi.qc
Log:
some weapon system fixes; allow infinite portals to work by anticipating the collision
Modified: trunk/data/qcsrc/client/Main.qc
===================================================================
--- trunk/data/qcsrc/client/Main.qc 2008-09-02 21:22:16 UTC (rev 4303)
+++ trunk/data/qcsrc/client/Main.qc 2008-09-03 07:51:13 UTC (rev 4304)
@@ -187,6 +187,7 @@
self.nextthink = time + 0.2;
}
+void Porto_Init();
void PostInit(void)
{
print(strcat("PostInit\n maxclients = ", ftos(maxclients), "\n"));
@@ -197,6 +198,8 @@
playerchecker.think = Playerchecker_Think;
playerchecker.nextthink = time + 0.2;
+ Porto_Init();
+
postinit = true;
}
Modified: trunk/data/qcsrc/client/View.qc
===================================================================
--- trunk/data/qcsrc/client/View.qc 2008-09-02 21:22:16 UTC (rev 4303)
+++ trunk/data/qcsrc/client/View.qc 2008-09-03 07:51:13 UTC (rev 4304)
@@ -1,5 +1,46 @@
-//include "main.qh"
+entity porto;
+void Porto_Draw()
+{
+ vector v0, v1, v2, dir, ang;
+ if(activeweapon != WEP_PORTO)
+ return;
+
+ dir = view_forward;
+ v0 = view_origin;
+ traceline(v0, v0 + 65536 * dir, TRUE, world);
+ if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
+ return;
+ v1 = trace_endpos;
+
+ dir = dir - 2 * (dir * trace_plane_normal) * trace_plane_normal; // mirror dir at trace_plane_normal
+
+ ang = vectoangles(trace_plane_normal, dir);
+ ang_x = -ang_x;
+ makevectors(ang);
+ if(!CheckWireframeBox(v1 - 48 * v_right - 48 * v_up + 16 * v_forward, 96 * v_right, 96 * v_up, 16 * v_forward))
+ return;
+
+ traceline(v1, v1 + 65536 * dir, TRUE, world);
+ if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
+ return;
+ v2 = trace_endpos;
+
+ ang = vectoangles(trace_plane_normal, -1 * dir);
+ ang_x = -ang_x;
+ makevectors(ang);
+ if(!CheckWireframeBox(v2 - 48 * v_right - 48 * v_up + 16 * v_forward, 96 * v_right, 96 * v_up, 16 * v_forward))
+ return;
+
+ Draw_CylindricLine(v1, v2, 4, "", 1, 0, '1 0 0', 0.5, DRAWFLAG_NORMAL);
+}
+void Porto_Init()
+{
+ porto = spawn();
+ porto.classname = "porto";
+ porto.draw = Porto_Draw;
+}
+
float drawtime;
float tan(float x)
Modified: trunk/data/qcsrc/common/util.qc
===================================================================
--- trunk/data/qcsrc/common/util.qc 2008-09-02 21:22:16 UTC (rev 4303)
+++ trunk/data/qcsrc/common/util.qc 2008-09-03 07:51:13 UTC (rev 4304)
@@ -615,3 +615,21 @@
}
}
+#ifndef MENUQC
+float CheckWireframeBox(vector v0, vector dvx, vector dvy, vector dvz)
+{
+ traceline(v0, v0 + dvx, TRUE, world); if(trace_fraction < 1) return 0;
+ traceline(v0, v0 + dvy, TRUE, world); if(trace_fraction < 1) return 0;
+ traceline(v0, v0 + dvz, TRUE, world); if(trace_fraction < 1) return 0;
+ traceline(v0 + dvx, v0 + dvx + dvy, TRUE, world); if(trace_fraction < 1) return 0;
+ traceline(v0 + dvx, v0 + dvx + dvz, TRUE, world); if(trace_fraction < 1) return 0;
+ traceline(v0 + dvy, v0 + dvy + dvx, TRUE, world); if(trace_fraction < 1) return 0;
+ traceline(v0 + dvy, v0 + dvy + dvz, TRUE, world); if(trace_fraction < 1) return 0;
+ traceline(v0 + dvz, v0 + dvz + dvx, TRUE, world); if(trace_fraction < 1) return 0;
+ traceline(v0 + dvz, v0 + dvz + dvy, TRUE, world); if(trace_fraction < 1) return 0;
+ traceline(v0 + dvx + dvy, v0 + dvx + dvy + dvz, TRUE, world); if(trace_fraction < 1) return 0;
+ traceline(v0 + dvx + dvz, v0 + dvx + dvy + dvz, TRUE, world); if(trace_fraction < 1) return 0;
+ traceline(v0 + dvy + dvz, v0 + dvx + dvy + dvz, TRUE, world); if(trace_fraction < 1) return 0;
+ return 1;
+}
+#endif
Modified: trunk/data/qcsrc/common/util.qh
===================================================================
--- trunk/data/qcsrc/common/util.qh 2008-09-02 21:22:16 UTC (rev 4303)
+++ trunk/data/qcsrc/common/util.qh 2008-09-03 07:51:13 UTC (rev 4304)
@@ -65,3 +65,7 @@
void compressShortVector_init();
vector decompressShortVector(float data);
float compressShortVector(vector vec);
+
+#ifndef MENUQC
+float CheckWireframeBox(vector v0, vector dvx, vector dvy, vector dvz);
+#endif
Modified: trunk/data/qcsrc/server/cl_weapons.qc
===================================================================
--- trunk/data/qcsrc/server/cl_weapons.qc 2008-09-02 21:22:16 UTC (rev 4303)
+++ trunk/data/qcsrc/server/cl_weapons.qc 2008-09-03 07:51:13 UTC (rev 4304)
@@ -3,10 +3,7 @@
{
if (self.weapon != imp)
if (client_hasweapon(self, imp, TRUE, TRUE))
- {
- self.cnt = self.weapon ? self.weapon : self.switchweapon;
- self.switchweapon = imp;
- }
+ W_SwitchWeapon_Force(self, imp);
};
float W_GetCycleWeapon(entity pl, string weaponorder, float dir, float complain)
@@ -157,7 +154,7 @@
// toss current weapon
void W_ThrowWeapon(vector velo, vector delta, float doreduce)
{
- local float w, ammo, wb;
+ local float w, ammo, wb, wa;
local entity wep, e;
local .float ammofield;
@@ -187,29 +184,45 @@
wep.velocity = velo; // e.velocity * 0.5 + v_forward * 750;
SUB_SetFade(wep, time + 20, 1);
- ammofield = Item_CounterField(W_AmmoItemCode(w));
- wb = W_WeaponBit(w);
- if(!(e.weapons & wb))
+ wa = W_AmmoItemCode(w);
+ if(wa == IT_SUPERWEAPON || wa == 0)
{
- remove(wep);
- goto leave;
+ wb = W_WeaponBit(w);
+ if(!(e.weapons & wb))
+ {
+ remove(wep);
+ goto leave;
+ }
+ Item_SpawnByWeaponCode(w);
+ if(startitem_failed)
+ goto leave;
+ if(e.weapons & wb)
+ if(e.health >= 1)
+ sprint(e, strcat("You dropped the ^2", wep.netname, "\n"));
}
- Item_SpawnByWeaponCode(w);
- if(startitem_failed)
+ else
{
- goto leave;
+ ammofield = Item_CounterField(wa);
+ wb = W_WeaponBit(w);
+ if(!(e.weapons & wb))
+ {
+ remove(wep);
+ goto leave;
+ }
+ Item_SpawnByWeaponCode(w);
+ if(startitem_failed)
+ goto leave;
+ if(doreduce)
+ {
+ ammo = min(e.ammofield, wep.ammofield);
+ wep.ammofield = ammo;
+ e.ammofield -= ammo;
+ }
+ if(e.weapons & wb)
+ if(e.health >= 1)
+ sprint(e, strcat("You dropped the ^2", wep.netname, " with ", ftos(wep.ammofield), " ammo", "\n"));
}
- if(doreduce)
- {
- ammo = min(e.ammofield, wep.ammofield);
- wep.ammofield = ammo;
- e.ammofield -= ammo;
- }
- if(e.weapons & wb)
- if(e.health >= 1)
- sprint(e, strcat("You dropped the ^2", wep.netname, " with ", ftos(wep.ammofield), " ammo", "\n"));
-
wep.owner = e;
setorigin(wep, wep.origin);
wep.nextthink = time + 0.5;
@@ -217,10 +230,8 @@
wep.classname = "droppedweapon";
wep.flags = wep.flags | FL_TOSSED;
e.weapons = e.weapons - (e.weapons & wb);
- e.switchweapon = w_getbestweapon(e);
wep.colormap = e.colormap;
- if (e.switchweapon != e.weapon)
- e.cnt = e.weapon;
+ W_SwitchWeapon_Force(e, w_getbestweapon(e));
:leave
self = e;
@@ -274,6 +285,9 @@
}
}
+ float wb;
+ wb = W_WeaponBit(self.weapon);
+
// call the think code which may fire the weapon
// and do so multiple times to resolve framerate dependency issues if the
// server framerate is very low and the weapon fire rate very high
@@ -282,7 +296,13 @@
while (c < 5)
{
c = c + 1;
- weapon_action(self.weapon, WR_THINK);
+ if(wb && self.weapons & wb == 0)
+ {
+ W_SwitchWeapon_Force(self, w_getbestweapon(self));
+ wb = 0;
+ }
+ if(wb)
+ weapon_action(self.weapon, WR_THINK);
if (time + frametime * 0.5 >= self.weapon_nextthink)
self.weapon_think();
}
@@ -415,14 +435,14 @@
void RegisterWeapons()
{
// %weaponaddpoint
- register_weapon(WEP_LASER, w_laser, 0, "laser", "laser", "Laser");
- register_weapon(WEP_SHOTGUN, w_shotgun, IT_SHELLS, "shotgun", "shotgun", "Shotgun");
- register_weapon(WEP_UZI, w_uzi, IT_NAILS, "uzi", "uzi", "Machine Gun");
- register_weapon(WEP_GRENADE_LAUNCHER, w_glauncher, IT_ROCKETS, "gl", "grenadelauncher", "Mortar");
- register_weapon(WEP_ELECTRO, w_electro, IT_CELLS, "electro", "electro", "Electro");
- register_weapon(WEP_CRYLINK, w_crylink, IT_CELLS, "crylink", "crylink", "Crylink");
- register_weapon(WEP_NEX, w_nex, IT_CELLS, "nex", "nex", "Nex");
- register_weapon(WEP_HAGAR, w_hagar, IT_ROCKETS, "hagar", "hagar", "Hagar");
- register_weapon(WEP_ROCKET_LAUNCHER, w_rlauncher, IT_ROCKETS, "rl", "rocketlauncher", "Rocket Launcher");
- register_weapon(WEP_PORTO, w_porto, IT_CELLS, "porto" , "porto", "Port-O-Launch");
+ register_weapon(WEP_LASER, w_laser, 0, "laser", "laser", "Laser");
+ register_weapon(WEP_SHOTGUN, w_shotgun, IT_SHELLS, "shotgun", "shotgun", "Shotgun");
+ register_weapon(WEP_UZI, w_uzi, IT_NAILS, "uzi", "uzi", "Machine Gun");
+ register_weapon(WEP_GRENADE_LAUNCHER, w_glauncher, IT_ROCKETS, "gl", "grenadelauncher", "Mortar");
+ register_weapon(WEP_ELECTRO, w_electro, IT_CELLS, "electro", "electro", "Electro");
+ register_weapon(WEP_CRYLINK, w_crylink, IT_CELLS, "crylink", "crylink", "Crylink");
+ register_weapon(WEP_NEX, w_nex, IT_CELLS, "nex", "nex", "Nex");
+ register_weapon(WEP_HAGAR, w_hagar, IT_ROCKETS, "hagar", "hagar", "Hagar");
+ register_weapon(WEP_ROCKET_LAUNCHER, w_rlauncher, IT_ROCKETS, "rl", "rocketlauncher", "Rocket Launcher");
+ register_weapon(WEP_PORTO, w_porto, IT_SUPERWEAPON, "porto" , "porto", "Port-O-Launch");
}
Modified: trunk/data/qcsrc/server/cl_weaponsystem.qc
===================================================================
--- trunk/data/qcsrc/server/cl_weaponsystem.qc 2008-09-02 21:22:16 UTC (rev 4303)
+++ trunk/data/qcsrc/server/cl_weaponsystem.qc 2008-09-03 07:51:13 UTC (rev 4304)
@@ -7,6 +7,12 @@
===========================================================================
*/
+void W_SwitchWeapon_Force(entity e, float w)
+{
+ e.cnt = e.weapon ? e.weapon : e.switchweapon;
+ e.switchweapon = w;
+}
+
.float antilag_debug;
// VorteX: static frame globals
@@ -410,9 +416,7 @@
if (!weapon_action(self.weapon, WR_CHECKAMMO1 + secondary))
{
- self.switchweapon = w_getbestweapon(self);
- if (self.switchweapon != self.weapon)
- self.cnt = self.weapon;
+ W_SwitchWeapon_Force(self, w_getbestweapon(self));
return FALSE;
}
Modified: trunk/data/qcsrc/server/portals.qc
===================================================================
--- trunk/data/qcsrc/server/portals.qc 2008-09-02 21:22:16 UTC (rev 4303)
+++ trunk/data/qcsrc/server/portals.qc 2008-09-03 07:51:13 UTC (rev 4304)
@@ -101,7 +101,7 @@
fixedmakevectors(teleporter.enemy.mangle);
safe = teleporter.enemy.portal_safe_origin; // a valid player origin
step = to + ((safe - to) * v_forward) * v_forward;
- tracebox(safe, PL_MIN, PL_MAX, step, MOVE_WORLDONLY, player);
+ tracebox(safe, PL_MIN, PL_MAX, step, MOVE_NOMONSTERS, player);
if(trace_startsolid)
{
bprint("'safe' teleport location is not safe!\n");
@@ -109,7 +109,7 @@
return;
}
safe = trace_endpos;
- tracebox(safe, PL_MIN, PL_MAX, to, MOVE_WORLDONLY, player);
+ tracebox(safe, PL_MIN, PL_MAX, to, MOVE_NOMONSTERS, player);
if(trace_startsolid)
error("trace_endpos in solid!");
to = trace_endpos;
@@ -124,11 +124,11 @@
ang = Portal_Transform_Multiply(transform, player.mangle);
}
- print("previous velocity: ", vtos(player.velocity), "\n");
- print("previous origin: ", vtos(player.origin), "\n");
- TeleportPlayer(teleporter, player, to, ang, Portal_Transform_Apply(transform, player.velocity));
- print("new velocity: ", vtos(player.velocity), "\n");
- print("new origin: ", vtos(player.origin), "\n");
+ TeleportPlayer(teleporter, player, to, ang, Portal_Transform_Apply(transform, player.velocity), teleporter.enemy.absmin, teleporter.enemy.absmax);
+
+ // reset fade counter
+ teleporter.portal_wants_to_vanish = 0;
+ teleporter.fade_time = time + 10;
}
float Portal_FindSafeOrigin(entity portal)
@@ -152,7 +152,11 @@
if(other.classname == "porto")
return;
if(time < self.portal_activatetime)
- return;
+ if(other == self.owner)
+ {
+ self.portal_activatetime = time + 0.1;
+ return;
+ }
fixedmakevectors(self.mangle);
if((other.origin - self.origin) * v_forward < 0)
return;
@@ -163,10 +167,6 @@
return;
}
Portal_TeleportPlayer(self, other);
-
- // reset fade counter
- self.portal_wants_to_vanish = 0;
- self.nextthink = time + 60;
}
void Portal_MakeBrokenPortal(entity portal)
@@ -208,14 +208,45 @@
destination.enemy = teleporter;
Portal_MakeInPortal(teleporter);
Portal_MakeOutPortal(destination);
- teleporter.nextthink = time + 60;
- destination.nextthink = time + 60;
+ teleporter.fade_time = time + 10;
+ destination.fade_time = time + 10;
teleporter.portal_wants_to_vanish = 0;
destination.portal_wants_to_vanish = 0;
}
-void Portal_Vanish()
+void Portal_Think()
{
+ entity e, o;
+ float m;
+
+ if(self.solid == SOLID_TRIGGER)
+ {
+ m = self.modelindex;
+ o = self.owner;
+ self.solid = SOLID_BBOX;
+ self.owner = world;
+ self.modelindex = 0;
+ FOR_EACH_PLAYER(e)
+ {
+ if(time < self.portal_activatetime)
+ if(e == o)
+ continue;
+ // if e would hit the portal in a frame...
+ // already teleport him
+ tracebox(e.origin, e.mins, e.maxs, e.origin + e.velocity * 3 * frametime, MOVE_NORMAL, e);
+ if(trace_ent == self)
+ Portal_TeleportPlayer(self, e);
+ }
+ self.solid = SOLID_TRIGGER;
+ self.owner = o;
+ self.modelindex = m;
+ }
+
+ self.nextthink = time;
+
+ if(time < self.fade_time)
+ return;
+
self.portal_wants_to_vanish = 1;
if(self.enemy)
@@ -237,31 +268,14 @@
self = portal;
if(self.enemy)
self.enemy.portal_wants_to_vanish = 1;
- Portal_Vanish();
+ Portal_Think();
self = oldself;
}
-float CheckWireframeBox(vector v0, vector dvx, vector dvy, vector dvz)
-{
- traceline(v0, v0 + dvx, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
- traceline(v0, v0 + dvy, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
- traceline(v0, v0 + dvz, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
- traceline(v0 + dvx, v0 + dvx + dvy, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
- traceline(v0 + dvx, v0 + dvx + dvz, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
- traceline(v0 + dvy, v0 + dvy + dvx, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
- traceline(v0 + dvy, v0 + dvy + dvz, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
- traceline(v0 + dvz, v0 + dvz + dvx, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
- traceline(v0 + dvz, v0 + dvz + dvy, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
- traceline(v0 + dvx + dvy, v0 + dvx + dvy + dvz, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
- traceline(v0 + dvx + dvz, v0 + dvx + dvy + dvz, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
- traceline(v0 + dvy + dvz, v0 + dvx + dvy + dvz, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
- return 1;
-}
-
entity Portal_Spawn(entity own, vector org, vector ang)
{
fixedmakevectors(ang);
- if(!CheckWireframeBox(org - 64 * v_right - 64 * v_up, 128 * v_right, 128 * v_up, 32 * v_forward))
+ if(!CheckWireframeBox(org - 48 * v_right - 48 * v_up + 16 * v_forward, 96 * v_right, 96 * v_up, 16 * v_forward))
return world;
entity portal;
@@ -272,8 +286,9 @@
portal.mangle = ang;
ang_x = -ang_x;
portal.angles = ang;
- portal.think = Portal_Vanish;
- portal.nextthink = time + 60;
+ portal.think = Portal_Think;
+ portal.nextthink = time;
+ portal.fade_time = time + 10;
portal.portal_activatetime = time + 0.1;
setmodel(portal, "models/portal.md3");
@@ -283,13 +298,16 @@
return world;
}
- setsize(portal, '-64 -64 -64', '64 64 64');
+ setsize(portal, '-48 -48 -48', '48 48 48');
return portal;
}
float Portal_SpawnInPortalAtTrace(entity own, vector dir, float portal_id_val)
{
+ if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
+ return 0;
+
if(trace_ent.classname == "player")
{
print("hit a player, adjusting...\n");
@@ -315,8 +333,6 @@
own.portal_out = world;
}
- print("Plane normal: ", vtos(trace_plane_normal), "\n");
- print("Portal angles: ", vtos(vectoangles(trace_plane_normal)), "\n");
own.portal_in = Portal_Spawn(own, trace_endpos + trace_plane_normal, fixedvectoangles2(trace_plane_normal, dir));
if(!own.portal_in)
return 0;
@@ -330,6 +346,9 @@
float Portal_SpawnOutPortalAtTrace(entity own, vector dir, float portal_id_val)
{
+ if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
+ return 0;
+
if(trace_ent.classname == "player")
{
print("hit a player, adjusting...\n");
@@ -350,15 +369,12 @@
own.portal_out = world;
}
- print("Plane normal: ", vtos(trace_plane_normal), "\n");
- print("Portal angles: ", vtos(vectoangles(trace_plane_normal)), "\n");
own.portal_out = Portal_Spawn(own, trace_endpos + trace_plane_normal, fixedvectoangles2(trace_plane_normal, -1 * dir));
if(!own.portal_out)
return 0;
own.portal_out.portal_id = portal_id_val;
Portal_Connect(own.portal_in, own.portal_out);
- print("Portal transform: ", vtos(own.portal_in.portal_transform), "\n");
return 1;
}
Modified: trunk/data/qcsrc/server/t_items.qc
===================================================================
--- trunk/data/qcsrc/server/t_items.qc 2008-09-02 21:22:16 UTC (rev 4303)
+++ trunk/data/qcsrc/server/t_items.qc 2008-09-03 07:51:13 UTC (rev 4304)
@@ -226,9 +226,7 @@
self = other;
if (_switchweapon)
- self.switchweapon = w_getbestweapon(self);
- if (self.switchweapon != self.weapon)
- self.cnt = self.weapon;
+ W_SwitchWeapon_Force(self, w_getbestweapon(self));
self = oldself;
@@ -548,7 +546,7 @@
var .float ammofield;
e = get_weaponinfo(wpn);
- if(e.items)
+ if(e.items && e.items != IT_SUPERWEAPON)
{
ammofield = Item_CounterField(e.items);
if(!self.ammofield)
Modified: trunk/data/qcsrc/server/t_teleporters.qc
===================================================================
--- trunk/data/qcsrc/server/t_teleporters.qc 2008-09-02 21:22:16 UTC (rev 4303)
+++ trunk/data/qcsrc/server/t_teleporters.qc 2008-09-03 07:51:13 UTC (rev 4304)
@@ -1,5 +1,5 @@
.entity pusher;
-void TeleportPlayer(entity teleporter, entity player, vector to, vector to_angles, vector to_velocity)
+void TeleportPlayer(entity teleporter, entity player, vector to, vector to_angles, vector to_velocity, vector telefragmin, vector telefragmax)
{
entity head;
entity oldself;
@@ -29,6 +29,12 @@
float deathradius;
deathmin = player.absmin;
deathmax = player.absmax;
+ if(deathmin_x > telefragmin_x) deathmin_x = telefragmin_x;
+ if(deathmin_y > telefragmin_y) deathmin_y = telefragmin_y;
+ if(deathmin_z > telefragmin_z) deathmin_z = telefragmin_z;
+ if(deathmax_x < telefragmax_x) deathmax_x = telefragmax_x;
+ if(deathmax_y < telefragmax_y) deathmax_y = telefragmax_y;
+ if(deathmax_z < telefragmax_z) deathmax_z = telefragmax_z;
deathradius = max(vlen(deathmin), vlen(deathmax));
for(head = findradius(player.origin, deathradius); head; head = head.chain)
if(head != player)
@@ -89,7 +95,7 @@
EXACTTRIGGER_TOUCH;
makevectors(self.enemy.mangle);
- TeleportPlayer(self, other, self.enemy.origin + '0 0 1' * (1 - other.mins_z - 24), self.enemy.mangle, v_forward * vlen(other.velocity));
+ TeleportPlayer(self, other, self.enemy.origin + '0 0 1' * (1 - other.mins_z - 24), self.enemy.mangle, v_forward * vlen(other.velocity), '0 0 0', '0 0 0');
if(self.enemy.target)
{
Modified: trunk/data/qcsrc/server/w_porto.qc
===================================================================
--- trunk/data/qcsrc/server/w_porto.qc 2008-09-02 21:22:16 UTC (rev 4303)
+++ trunk/data/qcsrc/server/w_porto.qc 2008-09-03 07:51:13 UTC (rev 4304)
@@ -7,16 +7,19 @@
void W_Porto_Touch1 (void)
{
- print(vtos(trace_plane_normal), "\n");
if(self.porto_grenade_id == 0)
{
self.porto_grenade_id = time;
if(!Portal_SpawnInPortalAtTrace(self.owner, self.velocity, self.porto_grenade_id))
+ {
+ self.porto_grenade_id = 0;
remove(self);
+ }
}
else
{
Portal_SpawnOutPortalAtTrace(self.owner, self.velocity, self.porto_grenade_id);
+ self.porto_grenade_id = 0;
remove(self);
}
}
@@ -26,7 +29,7 @@
local entity gren;
if (cvar("g_use_ammunition"))
- self.ammo_cells = self.ammo_cells - cvar("g_balance_porto_primary_ammo");
+ self.weapons = self.weapons - (self.weapons & WEPBIT_PORTO);
W_SetupShot (self, '0 0 0', FALSE, 4, "weapons/grenade_fire.wav");
//pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
@@ -92,10 +95,6 @@
}
else if (req == WR_SETUP)
weapon_setup(WEP_PORTO);
- else if (req == WR_CHECKAMMO1)
- return self.ammo_cells >= cvar("g_balance_porto_primary_ammo");
- else if (req == WR_CHECKAMMO2)
- return FALSE;
else if (req == WR_SUICIDEMESSAGE)
w_deathtypestring = "did the impossible";
else if (req == WR_KILLMESSAGE)
Modified: trunk/data/qcsrc/server/w_uzi.qc
===================================================================
--- trunk/data/qcsrc/server/w_uzi.qc 2008-09-02 21:22:16 UTC (rev 4303)
+++ trunk/data/qcsrc/server/w_uzi.qc 2008-09-03 07:51:13 UTC (rev 4304)
@@ -85,9 +85,7 @@
{
if (!weapon_action(self.weapon, WR_CHECKAMMO2))
{
- self.switchweapon = w_getbestweapon(self);
- if (self.switchweapon != self.weapon)
- self.cnt = self.weapon;
+ W_SwitchWeapon_Force(self, w_getbestweapon(self));
w_ready();
return;
}
More information about the nexuiz-commits
mailing list