mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-05-09 03:58:19 +03:00
Fix #344
This commit is contained in:
parent
0ecd17e7e4
commit
282927ffda
13 changed files with 45 additions and 43 deletions
|
@ -120,23 +120,23 @@ int GetWaterDepth(int x, int y, int z, short roomNumber)
|
|||
zFloor = 0;
|
||||
if (xFloor < 1)
|
||||
xFloor = 1;
|
||||
else if (xFloor > r->ySize - 2)
|
||||
xFloor = r->ySize - 2;
|
||||
else if (xFloor > r->xSize - 2)
|
||||
xFloor = r->xSize - 2;
|
||||
}
|
||||
else if (zFloor >= r->xSize - 1)
|
||||
else if (zFloor >= r->zSize - 1)
|
||||
{
|
||||
zFloor = r->xSize - 1;
|
||||
zFloor = r->zSize - 1;
|
||||
if (xFloor < 1)
|
||||
xFloor = 1;
|
||||
else if (xFloor > r->ySize - 2)
|
||||
xFloor = r->ySize - 2;
|
||||
else if (xFloor > r->xSize - 2)
|
||||
xFloor = r->xSize - 2;
|
||||
}
|
||||
else if (xFloor < 0)
|
||||
xFloor = 0;
|
||||
else if (xFloor >= r->ySize)
|
||||
xFloor = r->ySize - 1;
|
||||
else if (xFloor >= r->xSize)
|
||||
xFloor = r->xSize - 1;
|
||||
|
||||
floor = &r->floor[zFloor + xFloor * r->xSize];
|
||||
floor = &r->floor[zFloor + xFloor * r->zSize];
|
||||
roomIndex = floor->WallPortal;
|
||||
if (roomIndex != NO_ROOM)
|
||||
{
|
||||
|
|
|
@ -2094,7 +2094,7 @@ void InitialiseItemBoxData()
|
|||
{
|
||||
for (const auto& mesh : r.mesh)
|
||||
{
|
||||
long index = ((mesh.pos.zPos - r.z) / 1024) + r.xSize * ((mesh.pos.xPos - r.x) / 1024);
|
||||
long index = ((mesh.pos.zPos - r.z) / 1024) + r.zSize * ((mesh.pos.xPos - r.x) / 1024);
|
||||
|
||||
if (index > r.floor.size())
|
||||
continue;
|
||||
|
|
|
@ -873,23 +873,23 @@ int GetWaterHeight(int x, int y, int z, short roomNumber)
|
|||
zBlock = 0;
|
||||
if (xBlock < 1)
|
||||
xBlock = 1;
|
||||
else if (xBlock > r->ySize - 2)
|
||||
xBlock = r->ySize - 2;
|
||||
else if (xBlock > r->xSize - 2)
|
||||
xBlock = r->xSize - 2;
|
||||
}
|
||||
else if (zBlock >= r->xSize - 1)
|
||||
else if (zBlock >= r->zSize - 1)
|
||||
{
|
||||
zBlock = r->xSize - 1;
|
||||
zBlock = r->zSize - 1;
|
||||
if (xBlock < 1)
|
||||
xBlock = 1;
|
||||
else if (xBlock > r->ySize - 2)
|
||||
xBlock = r->ySize - 2;
|
||||
else if (xBlock > r->xSize - 2)
|
||||
xBlock = r->xSize - 2;
|
||||
}
|
||||
else if (xBlock < 0)
|
||||
xBlock = 0;
|
||||
else if (xBlock >= r->ySize)
|
||||
xBlock = r->ySize - 1;
|
||||
else if (xBlock >= r->xSize)
|
||||
xBlock = r->xSize - 1;
|
||||
|
||||
floor = &r->floor[zBlock + xBlock * r->xSize];
|
||||
floor = &r->floor[zBlock + xBlock * r->zSize];
|
||||
adjoiningRoom = floor->WallPortal;
|
||||
|
||||
if (adjoiningRoom != NO_ROOM)
|
||||
|
|
|
@ -275,9 +275,9 @@ namespace TEN::Floordata
|
|||
VectorInt2 GetRoomPosition(int roomNumber, int x, int z)
|
||||
{
|
||||
const auto& room = g_Level.Rooms[roomNumber];
|
||||
const auto xRoom = (z - room.z) / SECTOR(1);
|
||||
const auto yRoom = (x - room.x) / SECTOR(1);
|
||||
auto pos = VectorInt2{xRoom, yRoom};
|
||||
const auto zRoom = (z - room.z) / SECTOR(1);
|
||||
const auto xRoom = (x - room.x) / SECTOR(1);
|
||||
auto pos = VectorInt2{xRoom, zRoom};
|
||||
|
||||
if (pos.x < 0)
|
||||
{
|
||||
|
@ -292,9 +292,9 @@ namespace TEN::Floordata
|
|||
{
|
||||
pos.y = 0;
|
||||
}
|
||||
else if (pos.y > room.ySize - 1)
|
||||
else if (pos.y > room.zSize - 1)
|
||||
{
|
||||
pos.y = room.ySize - 1;
|
||||
pos.y = room.zSize - 1;
|
||||
}
|
||||
|
||||
return pos;
|
||||
|
@ -303,7 +303,7 @@ namespace TEN::Floordata
|
|||
FLOOR_INFO& GetFloor(int roomNumber, const VectorInt2& pos)
|
||||
{
|
||||
auto& room = g_Level.Rooms[roomNumber];
|
||||
return room.floor[room.xSize * pos.y + pos.x];
|
||||
return room.floor[room.zSize * pos.x + pos.y];
|
||||
}
|
||||
|
||||
FLOOR_INFO& GetFloor(int roomNumber, int x, int z)
|
||||
|
@ -787,8 +787,8 @@ namespace TEN::Floordata
|
|||
auto maxZ = ceil((std::max(std::max(std::max(corners[0].z, corners[1].z), corners[4].z), corners[5].z) - room->z) / SECTOR(1));
|
||||
|
||||
// Run through all blocks enclosed in AABB
|
||||
for (int x = 0; x < room->ySize; x++)
|
||||
for (int z = 0; z < room->xSize; z++)
|
||||
for (int x = 0; x < room->xSize; x++)
|
||||
for (int z = 0; z < room->zSize; z++)
|
||||
{
|
||||
auto pX = room->x + (x * WALL_SIZE) + (WALL_SIZE / 2);
|
||||
auto pZ = room->z + (z * WALL_SIZE) + (WALL_SIZE / 2);
|
||||
|
|
|
@ -131,8 +131,8 @@ int IsRoomOutside(int x, int y, int z)
|
|||
ROOM_INFO* r = &g_Level.Rooms[roomNumber];
|
||||
|
||||
if ((y > r->maxceiling) && (y < r->minfloor)
|
||||
&& ((z > (r->z + 1024)) && (z < (r->z + ((r->xSize - 1) * 1024))))
|
||||
&& ((x > (r->x + 1024)) && (x < (r->x + ((r->ySize - 1) * 1024)))))
|
||||
&& ((z > (r->z + 1024)) && (z < (r->z + ((r->zSize - 1) * 1024))))
|
||||
&& ((x > (r->x + 1024)) && (x < (r->x + ((r->xSize - 1) * 1024)))))
|
||||
{
|
||||
IsRoomOutsideNo = roomNumber;
|
||||
|
||||
|
@ -155,7 +155,7 @@ FLOOR_INFO* GetSector(ROOM_INFO* r, int x, int z)
|
|||
{
|
||||
int sectorX = (x) / SECTOR(1);
|
||||
int sectorZ = (z) / SECTOR(1);
|
||||
int index = sectorZ + sectorX * r->xSize;
|
||||
int index = sectorZ + sectorX * r->zSize;
|
||||
if (index > r->floor.size())
|
||||
{
|
||||
return nullptr;
|
||||
|
|
|
@ -103,7 +103,7 @@ struct ROOM_INFO
|
|||
std::vector<BUCKET> buckets;
|
||||
std::vector<ROOM_DOOR> doors;
|
||||
int xSize;
|
||||
int ySize;
|
||||
int zSize;
|
||||
std::vector<FLOOR_INFO> floor;
|
||||
Vector3 ambient;
|
||||
std::vector<ROOM_LIGHT> lights;
|
||||
|
|
|
@ -166,7 +166,7 @@ void KnightTemplarControl(short itemNumber)
|
|||
|
||||
ROOM_INFO* room = &g_Level.Rooms[item->roomNumber];
|
||||
|
||||
FLOOR_INFO* currentFloor = &room->floor[(pos.z - room->z) / SECTOR(1) + (pos.z - room->x) / SECTOR(1) * room->xSize];
|
||||
FLOOR_INFO* currentFloor = &room->floor[(pos.z - room->z) / SECTOR(1) + (pos.z - room->x) / SECTOR(1) * room->zSize];
|
||||
|
||||
if (currentFloor->Stopper)
|
||||
{
|
||||
|
|
|
@ -79,8 +79,8 @@ namespace TEN::Entities::TR4
|
|||
{
|
||||
ROOM_INFO* room = &g_Level.Rooms[LaraItem->roomNumber];
|
||||
|
||||
x = room->x + room->ySize * 1024 / 2 - item->pos.xPos;
|
||||
z = room->z + room->xSize * 1024 / 2 - item->pos.zPos;
|
||||
x = room->x + room->xSize * 1024 / 2 - item->pos.xPos;
|
||||
z = room->z + room->zSize * 1024 / 2 - item->pos.zPos;
|
||||
|
||||
distance = SQUARE(x) + SQUARE(z);
|
||||
dy = abs((distance / MAX_VISIBILITY_DISTANCE) - 768);
|
||||
|
|
|
@ -23,7 +23,7 @@ void SmashObject(short itemNumber)
|
|||
{
|
||||
ITEM_INFO* item = &g_Level.Items[itemNumber];
|
||||
ROOM_INFO* r = &g_Level.Rooms[item->roomNumber];
|
||||
int sector = ((item->pos.zPos - r->z) / 1024) + r->xSize * ((item->pos.xPos - r->x) / 1024);
|
||||
int sector = ((item->pos.zPos - r->z) / 1024) + r->zSize * ((item->pos.xPos - r->x) / 1024);
|
||||
|
||||
BOX_INFO* box = &g_Level.Boxes[r->floor[sector].Box];
|
||||
if (box->flags & 0x8000)
|
||||
|
|
|
@ -46,7 +46,7 @@ namespace TEN::Renderer
|
|||
|
||||
return (x >= r->x && x <= r->x + r->xSize * 1024.0f &&
|
||||
y >= r->maxceiling && y <= r->minfloor &&
|
||||
z >= r->z && z <= r->z + r->ySize * 1024.0f);
|
||||
z >= r->z && z <= r->z + r->zSize * 1024.0f);
|
||||
}
|
||||
|
||||
std::vector<TEN::Renderer::RendererVideoAdapter>* Renderer11::getAdapters()
|
||||
|
@ -655,7 +655,7 @@ namespace TEN::Renderer
|
|||
|
||||
Vector3 roomCentre = Vector3(room->x + room->xSize * WALL_SIZE / 2.0f,
|
||||
(room->minfloor + room->maxceiling) / 2.0f,
|
||||
room->z + room->ySize * WALL_SIZE / 2.0f);
|
||||
room->z + room->zSize * WALL_SIZE / 2.0f);
|
||||
Vector3 laraPosition = Vector3(Camera.pos.x, Camera.pos.y, Camera.pos.z);
|
||||
|
||||
m_rooms[node->To].Distance = (roomCentre - laraPosition).Length();
|
||||
|
|
|
@ -2099,7 +2099,7 @@ namespace TEN::Renderer
|
|||
printDebugMessage("LaraItem.boxNumber: %d",/* canJump: %d, canLongJump: %d, canMonkey: %d,*/ LaraItem->boxNumber);
|
||||
printDebugMessage("Lara.pos: %d %d %d", LaraItem->pos.xPos, LaraItem->pos.yPos, LaraItem->pos.zPos);
|
||||
printDebugMessage("Lara.rot: %d %d %d", LaraItem->pos.xRot, LaraItem->pos.yRot, LaraItem->pos.zRot);
|
||||
printDebugMessage("Room: %d %d %d %d", r->x, r->z, r->x + r->xSize * WALL_SIZE, r->z + r->ySize * WALL_SIZE);
|
||||
printDebugMessage("Room: %d %d %d %d", r->x, r->z, r->x + r->xSize * WALL_SIZE, r->z + r->zSize * WALL_SIZE);
|
||||
printDebugMessage("Room.y, minFloor, maxCeiling: %d %d %d ", r->y, r->minfloor, r->maxceiling);
|
||||
printDebugMessage("Camera.pos: %d %d %d", Camera.pos.x, Camera.pos.y, Camera.pos.z);
|
||||
printDebugMessage("Camera.target: %d %d %d", Camera.target.x, Camera.target.y, Camera.target.z);
|
||||
|
|
|
@ -339,7 +339,7 @@ namespace TEN::Renderer
|
|||
RendererLight *light = m_dynamicLights[i];
|
||||
|
||||
Vector3 boxMin = Vector3(r->x - WALL_SIZE, -r->minfloor, r->z - WALL_SIZE);
|
||||
Vector3 boxMax = Vector3(r->x + r->xSize * WALL_SIZE, -r->maxceiling, r->z + r->ySize * WALL_SIZE);
|
||||
Vector3 boxMax = Vector3(r->x + r->xSize * WALL_SIZE, -r->maxceiling, r->z + r->zSize * WALL_SIZE);
|
||||
Vector3 center = Vector3(light->Position.x, -light->Position.y, light->Position.z);
|
||||
|
||||
if (renderView.lightsToDraw.size() < NUM_LIGHTS_PER_BUFFER - 1
|
||||
|
|
|
@ -633,10 +633,12 @@ void ReadRooms()
|
|||
room.doors.push_back(door);
|
||||
}
|
||||
|
||||
room.zSize = ReadInt32();
|
||||
room.xSize = ReadInt32();
|
||||
room.ySize = ReadInt32();
|
||||
room.floor.reserve(room.xSize * room.ySize);
|
||||
for (int j = 0; j < room.xSize * room.ySize; j++)
|
||||
|
||||
room.floor.reserve(room.zSize * room.xSize);
|
||||
|
||||
for (int j = 0; j < room.zSize * room.xSize; j++)
|
||||
{
|
||||
FLOOR_INFO floor;
|
||||
|
||||
|
@ -1323,7 +1325,7 @@ void BuildOutsideRoomsTable()
|
|||
int rx = (r->x / 1024);
|
||||
int rz = (r->z / 1024);
|
||||
|
||||
if (x >= rx + 1 && z >= rz + 1 && x <= (rx + r->ySize - 2) && z <= (rz + r->xSize - 2))
|
||||
if (x >= rx + 1 && z >= rz + 1 && x <= (rx + r->xSize - 2) && z <= (rz + r->zSize - 2))
|
||||
OutsideRoomTable[x][z].push_back(i);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue