From 42dc19bb394d7ec44542295fe76e51be7b01c464 Mon Sep 17 00:00:00 2001 From: XProger Date: Wed, 10 May 2017 02:34:59 +0300 Subject: [PATCH] #14 path blocking by doors --- src/cache.h | 3 +++ src/format.h | 2 ++ src/trigger.h | 9 +++++++++ 3 files changed, 14 insertions(+) diff --git a/src/cache.h b/src/cache.h index 0d0aa89..8cc94d0 100644 --- a/src/cache.h +++ b/src/cache.h @@ -859,6 +859,9 @@ struct ZoneCache { // has same zone if (zones[index] != zone) continue; + // check blocking (doors) + if (level->boxes[index].overlap.block) + continue; // check for height difference int d = level->boxes[index].floor - b.floor; if (d > ascend || d < descend) diff --git a/src/format.h b/src/format.h index 39ff428..b10efcc 100644 --- a/src/format.h +++ b/src/format.h @@ -840,6 +840,7 @@ namespace TR { int floor, ceiling; int slantX, slantZ; int floorIndex; + int boxIndex; int kill; int trigCmdCount; Trigger trigger; @@ -1617,6 +1618,7 @@ namespace TR { info.roomBelow = s.roomBelow; info.roomAbove = s.roomAbove; info.floorIndex = s.floorIndex; + info.boxIndex = s.boxIndex; info.kill = 0; info.trigger = Trigger::ACTIVATE; info.trigCmdCount = 0; diff --git a/src/trigger.h b/src/trigger.h index 984958f..112fdf0 100644 --- a/src/trigger.h +++ b/src/trigger.h @@ -215,6 +215,7 @@ struct MovingBlock : Trigger { struct Door : Trigger { int8 *floor[2], orig[2]; + uint16 box; Door(IGame *game, int entity) : Trigger(game, entity, true) { TR::Entity &e = getEntity(); @@ -222,6 +223,8 @@ struct Door : Trigger { vec3 p = pos - getDir() * 1024.0f; level->getFloorInfo(e.room, (int)p.x, (int)p.y, (int)p.z, info); + box = info.boxIndex; + int dx, dz; TR::Room::Sector *s = &level->getSector(e.room, (int)p.x, (int)p.z, dx, dz); @@ -244,6 +247,12 @@ struct Door : Trigger { } else v[0] = v[1] = TR::FLOOR_BLOCK; + if (box != 0xFFFF) { + TR::Box &b = level->boxes[box]; + if (b.overlap.blockable) + b.overlap.block = !getEntity().flags.active; + } + if (floor[0]) *floor[0] = v[0]; if (floor[1]) *floor[1] = v[1]; }