diff --git a/src/controller.h b/src/controller.h index 4b98a17..b8338ce 100644 --- a/src/controller.h +++ b/src/controller.h @@ -258,8 +258,10 @@ struct Controller { TR::Room::Sector *sAbove = &s; while (sAbove->roomAbove != TR::NO_ROOM) sAbove = &level->getSector(sAbove->roomAbove, x, z, dx, dz); if (sAbove != sBelow) { - info.ceiling = float(256 * sAbove->ceiling); - parseFloorData(info, sAbove->floorIndex, dx, dz); + TR::Level::FloorInfo tmpInfo; + tmpInfo.ceiling = float(256 * sAbove->ceiling); + parseFloorData(tmpInfo, sAbove->floorIndex, dx, dz); + info.ceiling = tmpInfo.ceiling; } } else { int tmp = info.roomNext; diff --git a/src/lara.h b/src/lara.h index 9b496ff..bcf6e78 100644 --- a/src/lara.h +++ b/src/lara.h @@ -3438,7 +3438,7 @@ struct Lara : Character { } else { // fast distance check for object if (e.type != TR::Entity::HAMMER_HANDLE && e.type != TR::Entity::HAMMER_BLOCK && e.type != TR::Entity::SCION_HOLDER) - if (fabsf(pos.x - controller->pos.x) > 1024 || fabsf(pos.z - controller->pos.z) > 1024 || fabsf(pos.y - controller->pos.y) > 2048) continue; + if (fabsf(pos.x - controller->pos.x) > 2048 || fabsf(pos.z - controller->pos.z) > 2048 || fabsf(pos.y - controller->pos.y) > 2048) continue; } vec3 dir = pos - vec3(0.0f, 128.0f, 0.0f) - controller->pos; diff --git a/src/mesh.h b/src/mesh.h index 0c12d36..2605df1 100644 --- a/src/mesh.h +++ b/src/mesh.h @@ -715,6 +715,8 @@ struct MeshBuilder { for (int z = 0; z < room.zSectors; z++) for (int x = 0; x < room.xSectors; x++) { TR::Room::Sector &s = room.sectors[x * room.zSectors + z]; + if (level->getNextRoom(&s) != TR::NO_ROOM) + continue; if (s.ceiling != TR::NO_FLOOR) value = min( value, s.ceiling * 256 ); if (s.roomAbove != TR::NO_ROOM)