2020-05-27 09:21:20 +02:00
|
|
|
#include "framework.h"
|
2019-12-15 19:07:38 +01:00
|
|
|
#include "misc.h"
|
2020-05-27 09:21:20 +02:00
|
|
|
#include "setup.h"
|
|
|
|
#include "level.h"
|
2020-06-05 14:01:22 +02:00
|
|
|
#include "lara.h"
|
|
|
|
#include "draw.h"
|
2021-08-29 10:04:49 +02:00
|
|
|
#include "creature_info.h"
|
2020-06-20 23:39:08 +02:00
|
|
|
using std::vector;
|
2019-12-15 19:07:38 +01:00
|
|
|
short GF(short animIndex, short frameToStart)
|
|
|
|
{
|
2020-07-21 09:56:47 +02:00
|
|
|
return g_Level.Anims[animIndex].frameBase + frameToStart;
|
2019-12-15 19:07:38 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
short GF2(short objectID, short animIndex, short frameToStart)
|
|
|
|
{
|
2020-07-21 09:56:47 +02:00
|
|
|
return g_Level.Anims[Objects[objectID].animIndex + animIndex].frameBase + frameToStart;
|
2019-12-15 19:07:38 +01:00
|
|
|
}
|
|
|
|
|
2020-05-19 19:01:11 +02:00
|
|
|
CREATURE_INFO* GetCreatureInfo(ITEM_INFO* item)
|
|
|
|
{
|
|
|
|
return (CREATURE_INFO*)item->data;
|
|
|
|
}
|
|
|
|
|
2020-06-10 21:38:25 +02:00
|
|
|
void TargetNearestEntity(ITEM_INFO* item, CREATURE_INFO* creature)
|
|
|
|
{
|
|
|
|
ITEM_INFO* target;
|
|
|
|
int bestdistance;
|
|
|
|
int distance;
|
|
|
|
int x, z;
|
|
|
|
|
|
|
|
bestdistance = MAXINT;
|
2020-07-21 09:56:47 +02:00
|
|
|
for (int i = 0; i < g_Level.NumItems; i++)
|
2020-06-10 21:38:25 +02:00
|
|
|
{
|
2020-07-21 09:56:47 +02:00
|
|
|
target = &g_Level.Items[i];
|
2020-06-10 21:38:25 +02:00
|
|
|
if (target != nullptr)
|
|
|
|
{
|
|
|
|
if (target != item && target->hitPoints > 0 && target->status != ITEM_INVISIBLE)
|
|
|
|
{
|
|
|
|
x = target->pos.xPos - item->pos.xPos;
|
|
|
|
z = target->pos.zPos - item->pos.zPos;
|
|
|
|
distance = SQUARE(z) + SQUARE(x);
|
|
|
|
if (distance < bestdistance)
|
|
|
|
{
|
|
|
|
creature->enemy = target;
|
|
|
|
bestdistance = distance;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-12-17 17:37:53 +01:00
|
|
|
void GetRoomList(short roomNumber, short* roomArray, short* numRooms)
|
2019-12-15 19:07:38 +01:00
|
|
|
{
|
2020-06-26 07:06:18 +02:00
|
|
|
short numDoors, * door, adjoiningRoom;
|
2019-12-17 17:37:53 +01:00
|
|
|
int i, j;
|
|
|
|
bool adjoiningRoomFound;
|
|
|
|
|
|
|
|
roomArray[0] = roomNumber;
|
2020-08-09 17:18:21 +02:00
|
|
|
*numRooms = 1;
|
|
|
|
|
2020-07-21 09:56:47 +02:00
|
|
|
ROOM_INFO* room = &g_Level.Rooms[roomNumber];
|
2020-06-26 07:06:18 +02:00
|
|
|
|
|
|
|
for (i = 0; i < room->doors.size(); i++)
|
2019-12-17 17:37:53 +01:00
|
|
|
{
|
2020-06-26 07:06:18 +02:00
|
|
|
adjoiningRoom = room->doors[i].room;
|
|
|
|
adjoiningRoomFound = false;
|
2019-12-17 17:37:53 +01:00
|
|
|
|
2020-06-26 07:06:18 +02:00
|
|
|
for (j = 0; j < *numRooms; j++)
|
2019-12-17 17:37:53 +01:00
|
|
|
{
|
2020-06-26 07:06:18 +02:00
|
|
|
if (roomArray[i] == adjoiningRoom)
|
2019-12-17 17:37:53 +01:00
|
|
|
{
|
2020-06-26 07:06:18 +02:00
|
|
|
adjoiningRoomFound = true;
|
|
|
|
break;
|
2019-12-17 17:37:53 +01:00
|
|
|
}
|
|
|
|
}
|
2020-06-26 07:06:18 +02:00
|
|
|
|
|
|
|
if (!adjoiningRoomFound)
|
2020-08-09 17:18:21 +02:00
|
|
|
{
|
|
|
|
roomArray[*numRooms] = adjoiningRoom;
|
|
|
|
*numRooms = *numRooms + 1;
|
|
|
|
}
|
2019-12-17 17:37:53 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void GetRoomList(short roomNumber, vector<short>* destRoomList)
|
|
|
|
{
|
|
|
|
vector<short> roomList;
|
2020-06-26 07:06:18 +02:00
|
|
|
short adjoiningRoom;
|
2019-12-17 17:37:53 +01:00
|
|
|
int i, j;
|
|
|
|
bool adjoiningRoomFound;
|
|
|
|
|
|
|
|
roomList.push_back(roomNumber);
|
2020-07-21 09:56:47 +02:00
|
|
|
ROOM_INFO* room = &g_Level.Rooms[roomNumber];
|
2020-06-26 07:06:18 +02:00
|
|
|
|
|
|
|
for (i = 0; i < room->doors.size(); i++)
|
2019-12-17 17:37:53 +01:00
|
|
|
{
|
2020-06-26 07:06:18 +02:00
|
|
|
adjoiningRoom = room->doors[i].room;
|
|
|
|
adjoiningRoomFound = false;
|
2019-12-17 17:37:53 +01:00
|
|
|
|
2020-06-26 07:06:18 +02:00
|
|
|
for (j = 0; j < roomList.size(); j++)
|
2019-12-17 17:37:53 +01:00
|
|
|
{
|
2020-06-26 07:06:18 +02:00
|
|
|
if (roomList[i] == adjoiningRoom)
|
2019-12-17 17:37:53 +01:00
|
|
|
{
|
2020-06-26 07:06:18 +02:00
|
|
|
adjoiningRoomFound = true;
|
|
|
|
break;
|
2019-12-17 17:37:53 +01:00
|
|
|
}
|
2020-06-26 07:06:18 +02:00
|
|
|
}
|
2019-12-17 17:37:53 +01:00
|
|
|
|
2020-06-26 07:06:18 +02:00
|
|
|
if (!adjoiningRoomFound)
|
|
|
|
roomList.push_back(adjoiningRoom);
|
2019-12-17 17:37:53 +01:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
*destRoomList = roomList;
|
2019-12-16 19:04:28 +01:00
|
|
|
}
|