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; zFloor = 0;
if (xFloor < 1) if (xFloor < 1)
xFloor = 1; xFloor = 1;
else if (xFloor > r->ySize - 2) else if (xFloor > r->xSize - 2)
xFloor = r->ySize - 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) if (xFloor < 1)
xFloor = 1; xFloor = 1;
else if (xFloor > r->ySize - 2) else if (xFloor > r->xSize - 2)
xFloor = r->ySize - 2; xFloor = r->xSize - 2;
} }
else if (xFloor < 0) else if (xFloor < 0)
xFloor = 0; xFloor = 0;
else if (xFloor >= r->ySize) else if (xFloor >= r->xSize)
xFloor = r->ySize - 1; xFloor = r->xSize - 1;
floor = &r->floor[zFloor + xFloor * r->xSize]; floor = &r->floor[zFloor + xFloor * r->zSize];
roomIndex = floor->WallPortal; roomIndex = floor->WallPortal;
if (roomIndex != NO_ROOM) if (roomIndex != NO_ROOM)
{ {

View file

@ -2094,7 +2094,7 @@ void InitialiseItemBoxData()
{ {
for (const auto& mesh : r.mesh) 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()) if (index > r.floor.size())
continue; continue;

View file

@ -873,23 +873,23 @@ int GetWaterHeight(int x, int y, int z, short roomNumber)
zBlock = 0; zBlock = 0;
if (xBlock < 1) if (xBlock < 1)
xBlock = 1; xBlock = 1;
else if (xBlock > r->ySize - 2) else if (xBlock > r->xSize - 2)
xBlock = r->ySize - 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) if (xBlock < 1)
xBlock = 1; xBlock = 1;
else if (xBlock > r->ySize - 2) else if (xBlock > r->xSize - 2)
xBlock = r->ySize - 2; xBlock = r->xSize - 2;
} }
else if (xBlock < 0) else if (xBlock < 0)
xBlock = 0; xBlock = 0;
else if (xBlock >= r->ySize) else if (xBlock >= r->xSize)
xBlock = r->ySize - 1; xBlock = r->xSize - 1;
floor = &r->floor[zBlock + xBlock * r->xSize]; floor = &r->floor[zBlock + xBlock * r->zSize];
adjoiningRoom = floor->WallPortal; adjoiningRoom = floor->WallPortal;
if (adjoiningRoom != NO_ROOM) if (adjoiningRoom != NO_ROOM)

View file

@ -275,9 +275,9 @@ namespace TEN::Floordata
VectorInt2 GetRoomPosition(int roomNumber, int x, int z) VectorInt2 GetRoomPosition(int roomNumber, int x, int z)
{ {
const auto& room = g_Level.Rooms[roomNumber]; const auto& room = g_Level.Rooms[roomNumber];
const auto xRoom = (z - room.z) / SECTOR(1); const auto zRoom = (z - room.z) / SECTOR(1);
const auto yRoom = (x - room.x) / SECTOR(1); const auto xRoom = (x - room.x) / SECTOR(1);
auto pos = VectorInt2{xRoom, yRoom}; auto pos = VectorInt2{xRoom, zRoom};
if (pos.x < 0) if (pos.x < 0)
{ {
@ -292,9 +292,9 @@ namespace TEN::Floordata
{ {
pos.y = 0; 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; return pos;
@ -303,7 +303,7 @@ namespace TEN::Floordata
FLOOR_INFO& GetFloor(int roomNumber, const VectorInt2& pos) FLOOR_INFO& GetFloor(int roomNumber, const VectorInt2& pos)
{ {
auto& room = g_Level.Rooms[roomNumber]; 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) 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)); 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 // Run through all blocks enclosed in AABB
for (int x = 0; x < room->ySize; x++) for (int x = 0; x < room->xSize; x++)
for (int z = 0; z < room->xSize; z++) for (int z = 0; z < room->zSize; z++)
{ {
auto pX = room->x + (x * WALL_SIZE) + (WALL_SIZE / 2); auto pX = room->x + (x * WALL_SIZE) + (WALL_SIZE / 2);
auto pZ = room->z + (z * 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]; ROOM_INFO* r = &g_Level.Rooms[roomNumber];
if ((y > r->maxceiling) && (y < r->minfloor) if ((y > r->maxceiling) && (y < r->minfloor)
&& ((z > (r->z + 1024)) && (z < (r->z + ((r->xSize - 1) * 1024)))) && ((z > (r->z + 1024)) && (z < (r->z + ((r->zSize - 1) * 1024))))
&& ((x > (r->x + 1024)) && (x < (r->x + ((r->ySize - 1) * 1024))))) && ((x > (r->x + 1024)) && (x < (r->x + ((r->xSize - 1) * 1024)))))
{ {
IsRoomOutsideNo = roomNumber; IsRoomOutsideNo = roomNumber;
@ -155,7 +155,7 @@ FLOOR_INFO* GetSector(ROOM_INFO* r, int x, int z)
{ {
int sectorX = (x) / SECTOR(1); int sectorX = (x) / SECTOR(1);
int sectorZ = (z) / SECTOR(1); int sectorZ = (z) / SECTOR(1);
int index = sectorZ + sectorX * r->xSize; int index = sectorZ + sectorX * r->zSize;
if (index > r->floor.size()) if (index > r->floor.size())
{ {
return nullptr; return nullptr;

View file

@ -103,7 +103,7 @@ struct ROOM_INFO
std::vector<BUCKET> buckets; std::vector<BUCKET> buckets;
std::vector<ROOM_DOOR> doors; std::vector<ROOM_DOOR> doors;
int xSize; int xSize;
int ySize; int zSize;
std::vector<FLOOR_INFO> floor; std::vector<FLOOR_INFO> floor;
Vector3 ambient; Vector3 ambient;
std::vector<ROOM_LIGHT> lights; std::vector<ROOM_LIGHT> lights;

View file

@ -166,7 +166,7 @@ void KnightTemplarControl(short itemNumber)
ROOM_INFO* room = &g_Level.Rooms[item->roomNumber]; 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) if (currentFloor->Stopper)
{ {

View file

@ -79,8 +79,8 @@ namespace TEN::Entities::TR4
{ {
ROOM_INFO* room = &g_Level.Rooms[LaraItem->roomNumber]; ROOM_INFO* room = &g_Level.Rooms[LaraItem->roomNumber];
x = room->x + room->ySize * 1024 / 2 - item->pos.xPos; x = room->x + room->xSize * 1024 / 2 - item->pos.xPos;
z = room->z + room->xSize * 1024 / 2 - item->pos.zPos; z = room->z + room->zSize * 1024 / 2 - item->pos.zPos;
distance = SQUARE(x) + SQUARE(z); distance = SQUARE(x) + SQUARE(z);
dy = abs((distance / MAX_VISIBILITY_DISTANCE) - 768); dy = abs((distance / MAX_VISIBILITY_DISTANCE) - 768);

View file

@ -23,7 +23,7 @@ void SmashObject(short itemNumber)
{ {
ITEM_INFO* item = &g_Level.Items[itemNumber]; ITEM_INFO* item = &g_Level.Items[itemNumber];
ROOM_INFO* r = &g_Level.Rooms[item->roomNumber]; 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]; BOX_INFO* box = &g_Level.Boxes[r->floor[sector].Box];
if (box->flags & 0x8000) if (box->flags & 0x8000)

View file

@ -46,7 +46,7 @@ namespace TEN::Renderer
return (x >= r->x && x <= r->x + r->xSize * 1024.0f && return (x >= r->x && x <= r->x + r->xSize * 1024.0f &&
y >= r->maxceiling && y <= r->minfloor && 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() 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, Vector3 roomCentre = Vector3(room->x + room->xSize * WALL_SIZE / 2.0f,
(room->minfloor + room->maxceiling) / 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); Vector3 laraPosition = Vector3(Camera.pos.x, Camera.pos.y, Camera.pos.z);
m_rooms[node->To].Distance = (roomCentre - laraPosition).Length(); 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("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.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("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("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.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); 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]; RendererLight *light = m_dynamicLights[i];
Vector3 boxMin = Vector3(r->x - WALL_SIZE, -r->minfloor, r->z - WALL_SIZE); 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); Vector3 center = Vector3(light->Position.x, -light->Position.y, light->Position.z);
if (renderView.lightsToDraw.size() < NUM_LIGHTS_PER_BUFFER - 1 if (renderView.lightsToDraw.size() < NUM_LIGHTS_PER_BUFFER - 1

View file

@ -633,10 +633,12 @@ void ReadRooms()
room.doors.push_back(door); room.doors.push_back(door);
} }
room.zSize = ReadInt32();
room.xSize = ReadInt32(); room.xSize = ReadInt32();
room.ySize = ReadInt32();
room.floor.reserve(room.xSize * room.ySize); room.floor.reserve(room.zSize * room.xSize);
for (int j = 0; j < room.xSize * room.ySize; j++)
for (int j = 0; j < room.zSize * room.xSize; j++)
{ {
FLOOR_INFO floor; FLOOR_INFO floor;
@ -1323,7 +1325,7 @@ void BuildOutsideRoomsTable()
int rx = (r->x / 1024); int rx = (r->x / 1024);
int rz = (r->z / 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); OutsideRoomTable[x][z].push_back(i);
} }
} }