creature: move Creature_CheckBaddieOverlap to trx

This commit is contained in:
Marcin Kurczewski 2025-04-08 22:05:49 +02:00
parent c79f80486f
commit 7718406bbe
6 changed files with 33 additions and 62 deletions

View file

@ -462,6 +462,38 @@ void Creature_Neck(ITEM *const item, const int16_t required)
CLAMP(creature->neck_rotation, -M_HEAD_ARC, M_HEAD_ARC);
}
bool Creature_CheckBaddieOverlap(const int16_t item_num)
{
const ITEM *item = Item_Get(item_num);
const int32_t x = item->pos.x;
const int32_t y = item->pos.y;
const int32_t z = item->pos.z;
const int32_t radius = SQUARE(Object_Get(item->object_id)->radius);
int16_t link = Room_Get(item->room_num)->item_num;
while (link != NO_ITEM && link != item_num) {
item = Item_Get(link);
if (item != Lara_GetItem() && item->status == IS_ACTIVE
&& item->speed != 0) {
const XYZ_32 delta = {
item->pos.x - x,
item->pos.y - y,
item->pos.z - z,
};
const int32_t distance =
SQUARE(delta.x) + SQUARE(delta.y) + SQUARE(delta.z);
if (distance < radius) {
return true;
}
}
link = item->next_item;
}
return false;
}
void Creature_Collision(
const int16_t item_num, ITEM *const lara_item, COLL_INFO *const coll)
{

View file

@ -15,6 +15,7 @@ void Creature_Tilt(ITEM *item, int16_t angle);
void Creature_Head(ITEM *item, int16_t required);
void Creature_Neck(ITEM *item, int16_t required);
bool Creature_CheckBaddieOverlap(int16_t item_num);
void Creature_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll);
extern bool Creature_IsHostile(const ITEM *item);

View file

@ -18,38 +18,6 @@
#include <libtrx/game/math.h>
#include <libtrx/log.h>
bool Creature_CheckBaddieOverlap(int16_t item_num)
{
const ITEM *item = Item_Get(item_num);
int32_t x = item->pos.x;
int32_t y = item->pos.y;
int32_t z = item->pos.z;
const int32_t radius = SQUARE(Object_Get(item->object_id)->radius);
int16_t link = Room_Get(item->room_num)->item_num;
do {
item = Item_Get(link);
if (link == item_num) {
return false;
}
if (item != g_LaraItem && item->status == IS_ACTIVE
&& item->speed != 0) {
int32_t distance = SQUARE(item->pos.x - x) + SQUARE(item->pos.y - y)
+ SQUARE(item->pos.z - z);
if (distance < radius) {
return true;
}
}
link = item->next_item;
} while (link != NO_ITEM);
return false;
}
bool Creature_Animate(int16_t item_num, int16_t angle, int16_t tilt)
{
ITEM *const item = Item_Get(item_num);

View file

@ -9,7 +9,6 @@
#define CREATURE_SHOOT_RANGE SQUARE(WALL_L * 7) // = 51380224
#define CREATURE_MISS_CHANCE 0x2000
bool Creature_CheckBaddieOverlap(int16_t item_num);
bool Creature_CanTargetEnemy(ITEM *item, AI_INFO *info);
bool Creature_ShootAtLara(
ITEM *item, int32_t distance, BITE *gun, int16_t extra_rotation,

View file

@ -29,34 +29,6 @@
#define CREATURE_SHOOT_RANGE SQUARE(WALL_L * 8) // = 0x4000000 = 67108864
#define CREATURE_SHOOT_HIT_CHANCE 0x2000
int32_t Creature_CheckBaddieOverlap(const int16_t item_num)
{
const ITEM *item = Item_Get(item_num);
const int32_t x = item->pos.x;
const int32_t y = item->pos.y;
const int32_t z = item->pos.z;
const int32_t radius = SQUARE(Object_Get(item->object_id)->radius);
int16_t link = Room_Get(item->room_num)->item_num;
while (link != NO_ITEM && link != item_num) {
item = Item_Get(link);
if (item != g_LaraItem && item->status == IS_ACTIVE
&& item->speed != 0) {
const int32_t distance =
(SQUARE(item->pos.z - z) + SQUARE(item->pos.y - y)
+ SQUARE(item->pos.x - x));
if (distance < radius) {
return true;
}
}
link = item->next_item;
}
return false;
}
void Creature_Die(const int16_t item_num, const bool explode)
{
ITEM *const item = Item_Get(item_num);

View file

@ -4,7 +4,6 @@
#include <libtrx/game/creature.h>
int32_t Creature_CheckBaddieOverlap(int16_t item_num);
void Creature_Die(int16_t item_num, bool explode);
void Creature_Float(int16_t item_num);
void Creature_Underwater(ITEM *item, int32_t depth);