From a5f4315437d2f8c0c0ec8171c84af4b384effffd Mon Sep 17 00:00:00 2001
From: Spoike <acceptthis@users.sourceforge.net>
Date: Wed, 17 Nov 2004 17:40:05 +0000
Subject: [PATCH] hexen2 angle fixes... reminds me... I should look at
 hipnotics rotating stuff some time... If only I HAD hipnotic. Can someone
 test and tell me if I got rotating pitches correct?

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@439 fc73d0e0-1445-4013-8a0c-d673dee63da5
---
 engine/server/world.c | 32 ++++++++++++++++++++++++--------
 1 file changed, 24 insertions(+), 8 deletions(-)

diff --git a/engine/server/world.c b/engine/server/world.c
index af598ccaa..c93c80fa9 100644
--- a/engine/server/world.c
+++ b/engine/server/world.c
@@ -529,7 +529,7 @@ void SV_LinkEdict (edict_t *ent, qboolean touch_triggers)
 		return;
 
 // set the abs box
-/*	if (ent->v.solid == SOLID_BSP && 
+	if (ent->v.solid == SOLID_BSP && 
 	(ent->v.angles[0] || ent->v.angles[1] || ent->v.angles[2]) )
 	{	// expand for rotation
 		int			i;
@@ -539,7 +539,14 @@ void SV_LinkEdict (edict_t *ent, qboolean touch_triggers)
 		
 		//we need to link to the correct leaves
 
-		AngleVectors(ent->v.angles, f,r,u);
+		if (progstype == PROG_H2)
+		{
+			ent->v.angles[0]*=-1;
+			AngleVectors(ent->v.angles, f,r,u);
+			ent->v.angles[0]*=-1;
+		}
+		else
+			AngleVectors(ent->v.angles, f,r,u);
 
 		mn[0] = DotProduct(ent->v.mins, f);
 		mn[1] = -DotProduct(ent->v.mins, r);
@@ -552,17 +559,17 @@ void SV_LinkEdict (edict_t *ent, qboolean touch_triggers)
 		{
 			if (mn[i] < mx[i])
 			{
-				ent->v.absmin[i] = ent->v.origin[i]+mn[i];
-				ent->v.absmax[i] = ent->v.origin[i]+mx[i];
+				ent->v.absmin[i] = ent->v.origin[i]+mn[i]-0.1;
+				ent->v.absmax[i] = ent->v.origin[i]+mx[i]+0.1;
 			}
 			else
 			{	//box went inside out
-				ent->v.absmin[i] = ent->v.origin[i]+mx[i];
-				ent->v.absmax[i] = ent->v.origin[i]+mn[i];
+				ent->v.absmin[i] = ent->v.origin[i]+mx[i]-0.1;
+				ent->v.absmax[i] = ent->v.origin[i]+mn[i]+0.1;
 			}
 		}
 	}
-	else*/
+	else
 	{
 		VectorAdd (ent->v.origin, ent->v.mins, ent->v.absmin);	
 		VectorAdd (ent->v.origin, ent->v.maxs, ent->v.absmax);
@@ -1139,7 +1146,16 @@ trace_t SV_ClipMoveToEntity (edict_t *ent, vec3_t start, vec3_t mins, vec3_t max
 	VectorSubtract (end, offset, end_l);
 
 // trace a line through the apropriate clipping hull
-	TransformedHullCheck(hull, start_l, end_l, &trace, ent->v.angles);
+	if (progstype == PROG_H2 && ent->v.solid == SOLID_BSP)
+	{
+		ent->v.angles[0]*=-1;
+		TransformedHullCheck(hull, start_l, end_l, &trace, ent->v.angles);
+		ent->v.angles[0]*=-1;
+	}
+	else
+	{
+		TransformedHullCheck(hull, start_l, end_l, &trace, ent->v.angles);
+	}
 
 // fix trace up by the offset
 	if (trace.fraction != 1)