From cb1c38a7b08ab0f47c7f786ad818e59cc52d298e Mon Sep 17 00:00:00 2001 From: XProger Date: Mon, 15 May 2017 00:39:39 +0300 Subject: [PATCH 1/2] #65 fix --- src/trigger.h | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/src/trigger.h b/src/trigger.h index 33900c9..75db608 100644 --- a/src/trigger.h +++ b/src/trigger.h @@ -155,12 +155,37 @@ struct Block : Controller { bool doMove(bool push) { // check floor height of next floor - vec3 dir = getDir() * (push ? 1024.0f : -2048.0f); + vec3 dir = getDir() * (push ? 1024.0f : -1024.0f); TR::Entity &e = getEntity(); TR::Level::FloorInfo info; - level->getFloorInfo(e.room, e.x + (int)dir.x, e.y, e.z + (int)dir.z, info); - if ((info.slantX | info.slantZ) || info.floor != e.y) - return false; + + int px = e.x + (int)dir.x; + int pz = e.z + (int)dir.z; + level->getFloorInfo(e.room, px, e.y, pz, info); + + if ((info.slantX | info.slantZ) || info.floor != e.y || info.floor - info.ceiling < 1024) + return false; + + // check for trapdoor + px /= 1024; + pz /= 1024; + for (int i = 0; i < info.trigCmdCount; i++) + if (info.trigCmd[i].action == TR::Action::ACTIVATE) { + TR::Entity &obj = level->entities[info.trigCmd[i].args]; + if ((obj.type == TR::Entity::TRAP_DOOR_1 || obj.type == TR::Entity::TRAP_DOOR_2) && px == obj.x / 1024 && pz == obj.z / 1024) + return false; + } + + // check Laras destination position + if (!push) { + dir = getDir() * (-2048.0f); + px = e.x + (int)dir.x; + pz = e.z + (int)dir.z; + level->getFloorInfo(e.room, px, e.y, pz, info); + if ((info.slantX | info.slantZ) || info.floor != e.y || info.floor - info.ceiling < 1024) + return false; + } + if (!animation.setState(push ? STATE_PUSH : STATE_PULL)) return false; updateFloor(false); From 95b1b3ce8da64e3c06d5b356ac4e1564b9d24550 Mon Sep 17 00:00:00 2001 From: XProger Date: Mon, 15 May 2017 00:59:22 +0300 Subject: [PATCH 2/2] #66 fix (related to #41, solved in #57) --- src/collision.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/collision.h b/src/collision.h index de61eda..e2d5535 100644 --- a/src/collision.h +++ b/src/collision.h @@ -67,7 +67,7 @@ struct Collision { } else return; - pos += vec3(d.x, -velocity.y, d.y); + pos += vec3(d.x, 0.0f, d.y); } inline bool checkHeight(TR::Level *level, int roomIndex, const vec3 &pos, const vec2 &offset, int height, int maxAscent, int maxDescent, Side side) {