This commit is contained in:
Lwmte 2021-11-08 17:28:04 +03:00
parent 0ecd17e7e4
commit 282927ffda
13 changed files with 45 additions and 43 deletions

View file

@ -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)
{

View file

@ -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;

View file

@ -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)

View file

@ -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);

View file

@ -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;

View file

@ -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;

View file

@ -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)
{

View file

@ -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);

View file

@ -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)

View file

@ -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();

View file

@ -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);

View file

@ -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

View file

@ -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);
}
}