From b4e7750852b66118e6b63c601b442768d08a599c Mon Sep 17 00:00:00 2001 From: div0 Date: Sat, 27 Sep 2008 11:57:04 +0000 Subject: [PATCH] portals fix (thanks, Master) git-svn-id: svn://svn.icculus.org/nexuiz/trunk@4524 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/portals.qc | 16 ++++++++++------ data/qcsrc/server/t_teleporters.qc | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/data/qcsrc/server/portals.qc b/data/qcsrc/server/portals.qc index b98bf4173..f5bb96037 100644 --- a/data/qcsrc/server/portals.qc +++ b/data/qcsrc/server/portals.qc @@ -1,3 +1,6 @@ +#define SAFENUDGE '1 1 1' +#define SAFERNUDGE '8 8 8' + .vector portal_transform; .vector portal_safe_origin; .float portal_wants_to_vanish; @@ -114,18 +117,19 @@ float Portal_TeleportPlayer(entity teleporter, entity player) safe = teleporter.enemy.portal_safe_origin; // a valid player origin step = to + ((safe - to) * v_forward) * v_forward; - tracebox(safe, player.mins - '1 1 1', player.maxs + '1 1 1', step, MOVE_NOMONSTERS, player); + tracebox(safe, player.mins - SAFENUDGE, player.maxs + SAFENUDGE, step, MOVE_NOMONSTERS, player); if(trace_startsolid) { print("'safe' teleport location is not safe!\n"); // FAIL TODO why does this happen? return 0; } - safe = trace_endpos; - tracebox(safe, player.mins - '1 1 1', player.maxs + '1 1 1', to, MOVE_NOMONSTERS, player); + safe = trace_endpos + normalize(safe - trace_endpos) * 0; + tracebox(safe, player.mins - SAFENUDGE, player.maxs + SAFENUDGE, to, MOVE_NOMONSTERS, player); if(trace_startsolid) error("trace_endpos in solid!"); - to = trace_endpos; + to = trace_endpos + normalize(safe - trace_endpos) * 0; + //print(vtos(to), "\n"); // ang_x stuff works around weird quake angles if(player.classname == "player") @@ -204,8 +208,8 @@ float Portal_FindSafeOrigin(entity portal) { vector o; o = portal.origin; - portal.mins = PL_MIN - '8 8 8'; - portal.maxs = PL_MAX + '8 8 8'; + portal.mins = PL_MIN - SAFERNUDGE; + portal.maxs = PL_MAX + SAFERNUDGE; fixedmakevectors(portal.angles); portal.origin += 16 * v_forward; if(!move_out_of_solid(portal)) diff --git a/data/qcsrc/server/t_teleporters.qc b/data/qcsrc/server/t_teleporters.qc index ea0c0280a..499f5b81e 100644 --- a/data/qcsrc/server/t_teleporters.qc +++ b/data/qcsrc/server/t_teleporters.qc @@ -18,7 +18,7 @@ void TeleportPlayer(entity teleporter, entity player, vector to, vector to_angle // Relocate the player // assuming to allows PL_MIN to PL_MAX box and some more - setorigin (player, to + '0 0 1' * (1 - player.mins_z - 24)); + setorigin (player, to); player.angles = to_angles; player.fixangle = TRUE; player.velocity = to_velocity; -- 2.39.2