From d8b704ef7d3a7a7cb82eec9abe87f4777488fd07 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Sat, 17 Mar 2018 02:05:36 -0400 Subject: [PATCH 1/3] Adjust z offset down --- zone/mob_ai.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/mob_ai.cpp b/zone/mob_ai.cpp index 8f42ce438..624f07f7f 100644 --- a/zone/mob_ai.cpp +++ b/zone/mob_ai.cpp @@ -957,7 +957,7 @@ void Mob::ProcessForcedMovement() // this flag won't be set if the mob can't be pushed (rooted etc) if (AI_movement_timer->Check()) { bool bPassed = true; - auto z_off = GetZOffset(); + auto z_off = GetZOffset() / 2.0f; glm::vec3 normal; // no zone map = fucked From 0643bf97836aaec6b744dc980b89377da003d773 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Sat, 17 Mar 2018 13:43:27 -0400 Subject: [PATCH 2/3] Remove z offset mod in push, wasn't needed --- zone/mob_ai.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/zone/mob_ai.cpp b/zone/mob_ai.cpp index 624f07f7f..d40f3ab9a 100644 --- a/zone/mob_ai.cpp +++ b/zone/mob_ai.cpp @@ -957,7 +957,6 @@ void Mob::ProcessForcedMovement() // this flag won't be set if the mob can't be pushed (rooted etc) if (AI_movement_timer->Check()) { bool bPassed = true; - auto z_off = GetZOffset() / 2.0f; glm::vec3 normal; // no zone map = fucked @@ -965,42 +964,42 @@ void Mob::ProcessForcedMovement() // in front m_CollisionBox[0].x = m_Position.x + 3.0f * g_Math.FastSin(0.0f); m_CollisionBox[0].y = m_Position.y + 3.0f * g_Math.FastCos(0.0f); - m_CollisionBox[0].z = m_Position.z + z_off; + m_CollisionBox[0].z = m_Position.z; // 45 right front m_CollisionBox[1].x = m_Position.x + 3.0f * g_Math.FastSin(64.0f); m_CollisionBox[1].y = m_Position.y + 3.0f * g_Math.FastCos(64.0f); - m_CollisionBox[1].z = m_Position.z + z_off; + m_CollisionBox[1].z = m_Position.z; // to right m_CollisionBox[2].x = m_Position.x + 3.0f * g_Math.FastSin(128.0f); m_CollisionBox[2].y = m_Position.y + 3.0f * g_Math.FastCos(128.0f); - m_CollisionBox[2].z = m_Position.z + z_off; + m_CollisionBox[2].z = m_Position.z; // 45 right back m_CollisionBox[3].x = m_Position.x + 3.0f * g_Math.FastSin(192.0f); m_CollisionBox[3].y = m_Position.y + 3.0f * g_Math.FastCos(192.0f); - m_CollisionBox[3].z = m_Position.z + z_off; + m_CollisionBox[3].z = m_Position.z; // behind m_CollisionBox[4].x = m_Position.x + 3.0f * g_Math.FastSin(256.0f); m_CollisionBox[4].y = m_Position.y + 3.0f * g_Math.FastCos(256.0f); - m_CollisionBox[4].z = m_Position.z + z_off; + m_CollisionBox[4].z = m_Position.z; // 45 left back m_CollisionBox[5].x = m_Position.x + 3.0f * g_Math.FastSin(320.0f); m_CollisionBox[5].y = m_Position.y + 3.0f * g_Math.FastCos(320.0f); - m_CollisionBox[5].z = m_Position.z + z_off; + m_CollisionBox[5].z = m_Position.z; // to left m_CollisionBox[6].x = m_Position.x + 3.0f * g_Math.FastSin(384.0f); m_CollisionBox[6].y = m_Position.y + 3.0f * g_Math.FastCos(384.0f); - m_CollisionBox[6].z = m_Position.z + z_off; + m_CollisionBox[6].z = m_Position.z; // 45 left front m_CollisionBox[7].x = m_Position.x + 3.0f * g_Math.FastSin(448.0f); m_CollisionBox[7].y = m_Position.y + 3.0f * g_Math.FastCos(448.0f); - m_CollisionBox[7].z = m_Position.z + z_off; + m_CollisionBox[7].z = m_Position.z; // collision happened, need to move along the wall float distance = 0.0f, shortest = std::numeric_limits::infinity(); From c29bdd4b1def801614b366c773299431ed553547 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Sat, 17 Mar 2018 14:29:11 -0400 Subject: [PATCH 3/3] Add a sanity check to prevent mobs climbing steep walls Ex. in OMM's room in anguish --- zone/mob_ai.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/zone/mob_ai.cpp b/zone/mob_ai.cpp index d40f3ab9a..134beee0a 100644 --- a/zone/mob_ai.cpp +++ b/zone/mob_ai.cpp @@ -1023,6 +1023,8 @@ void Mob::ProcessForcedMovement() pLastChange = Timer::GetCurrentTime(); FixZ(); // so we teleport to the ground locally, we want the client to interpolate falling etc } else if (--ForcedMovement) { + if (normal.z < -0.15f) // prevent too much wall climbing. ex. OMM's room in anguish + normal.z = 0.0f; auto proj = glm::proj(static_cast(m_Delta), normal); m_Delta.x -= proj.x; m_Delta.y -= proj.y;