creature: move Creature_Kill to trx

This commit is contained in:
Marcin Kurczewski 2025-04-08 23:11:10 +02:00
parent 81c570a61c
commit d4da3f874e
9 changed files with 49 additions and 41 deletions

View file

@ -1,3 +1,4 @@
#include "game/camera/vars.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/lara/common.h" #include "game/lara/common.h"
#include "game/los.h" #include "game/los.h"
@ -856,6 +857,47 @@ bool Creature_Animate(
return true; return true;
} }
void Creature_SpecialKill(
ITEM *const item, const int32_t kill_anim, const int32_t kill_state,
const int32_t lara_kill_state)
{
LARA_INFO *const lara = Lara_GetLaraInfo();
ITEM *const lara_item = Lara_GetItem();
Item_SwitchToAnim(item, kill_anim, 0);
item->current_anim_state = kill_state;
#if TR_VERSION == 2
Item_SwitchToObjAnim(lara_item, LA_EXTRA_BREATH, 0, O_LARA_EXTRA);
lara_item->current_anim_state = LA_EXTRA_BREATH;
#endif
lara_item->goal_anim_state = lara_kill_state;
lara_item->pos = item->pos;
lara_item->rot = item->rot;
lara_item->fall_speed = 0;
lara_item->gravity = 0;
lara_item->speed = 0;
int16_t room_num = item->room_num;
if (room_num != lara_item->room_num) {
Item_NewRoom(lara->item_num, room_num);
}
Item_Animate(lara_item);
lara_item->goal_anim_state = lara_kill_state;
lara_item->current_anim_state = lara_kill_state;
#if TR_VERSION == 2
lara->extra_anim = 1;
#endif
lara->gun_status = LGS_HANDS_BUSY;
lara->gun_type = LGT_UNARMED;
lara->hit_direction = -1;
lara->air = -1;
g_Camera.pos.room_num = lara_item->room_num;
}
void Creature_Die(const int16_t item_num, const bool explode) void Creature_Die(const int16_t item_num, const bool explode)
{ {
ITEM *const item = Item_Get(item_num); ITEM *const item = Item_Get(item_num);

View file

@ -23,6 +23,8 @@ bool Creature_CheckBaddieOverlap(int16_t item_num);
void Creature_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll); void Creature_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll);
bool Creature_Animate(int16_t item_num, int16_t angle, int16_t tilt); bool Creature_Animate(int16_t item_num, int16_t angle, int16_t tilt);
void Creature_SpecialKill(
ITEM *item, int32_t kill_anim, int32_t kill_state, int32_t lara_kill_state);
void Creature_Die(int16_t item_num, bool explode); void Creature_Die(int16_t item_num, bool explode);
int32_t Creature_Vault( int32_t Creature_Vault(
int16_t item_num, int16_t angle, int32_t vault, int32_t shift); int16_t item_num, int16_t angle, int32_t vault, int32_t shift);

View file

@ -25,40 +25,6 @@
#define M_SHOOT_TARGETING_SPEED 300 #define M_SHOOT_TARGETING_SPEED 300
#define M_SHOOT_HIT_CHANCE 0x2000 #define M_SHOOT_HIT_CHANCE 0x2000
void Creature_Kill(
ITEM *const item, const int32_t kill_anim, const int32_t kill_state,
const int32_t lara_kill_state)
{
Item_SwitchToAnim(item, kill_anim, 0);
item->current_anim_state = kill_state;
Item_SwitchToObjAnim(g_LaraItem, LA_EXTRA_BREATH, 0, O_LARA_EXTRA);
g_LaraItem->current_anim_state = LA_EXTRA_BREATH;
g_LaraItem->goal_anim_state = lara_kill_state;
g_LaraItem->pos = item->pos;
g_LaraItem->rot = item->rot;
g_LaraItem->fall_speed = 0;
g_LaraItem->gravity = 0;
g_LaraItem->speed = 0;
int16_t room_num = item->room_num;
if (room_num != g_LaraItem->room_num) {
Item_NewRoom(g_Lara.item_num, room_num);
}
Item_Animate(g_LaraItem);
g_LaraItem->goal_anim_state = lara_kill_state;
g_LaraItem->current_anim_state = lara_kill_state;
g_Lara.extra_anim = 1;
g_Lara.gun_status = LGS_HANDS_BUSY;
g_Lara.gun_type = LGT_UNARMED;
g_Lara.hit_direction = -1;
g_Lara.air = -1;
g_Camera.pos.room_num = g_LaraItem->room_num;
}
void Creature_GetBaddieTarget(const int16_t item_num, const bool goody) void Creature_GetBaddieTarget(const int16_t item_num, const bool goody)
{ {
ITEM *const item = Item_Get(item_num); ITEM *const item = Item_Get(item_num);

View file

@ -4,8 +4,6 @@
#include <libtrx/game/creature.h> #include <libtrx/game/creature.h>
void Creature_Kill(
ITEM *item, int32_t kill_anim, int32_t kill_state, int32_t lara_kill_state);
void Creature_GetBaddieTarget(int16_t item_num, bool goody); void Creature_GetBaddieTarget(int16_t item_num, bool goody);
bool Creature_IsAlly(const ITEM *item); bool Creature_IsAlly(const ITEM *item);
int32_t Creature_ShootAtLara( int32_t Creature_ShootAtLara(

View file

@ -159,7 +159,7 @@ static void M_Control(const int16_t item_num)
} }
if (lara_alive && g_LaraItem->hit_points <= 0) { if (lara_alive && g_LaraItem->hit_points <= 0) {
Creature_Kill( Creature_SpecialKill(
item, SHARK_ANIM_KILL, SHARK_STATE_KILL, LA_EXTRA_SHARK_KILL); item, SHARK_ANIM_KILL, SHARK_STATE_KILL, LA_EXTRA_SHARK_KILL);
} else if (item->current_anim_state == SHARK_STATE_KILL) { } else if (item->current_anim_state == SHARK_STATE_KILL) {
Item_Animate(item); Item_Animate(item);

View file

@ -147,7 +147,7 @@ static void M_Control(const int16_t item_num)
case TREX_STATE_ATTACK_2: case TREX_STATE_ATTACK_2:
if ((item->touch_bits & TREX_TOUCH_BITS) != 0) { if ((item->touch_bits & TREX_TOUCH_BITS) != 0) {
Lara_TakeDamage(TREX_BITE_DAMAGE, true); Lara_TakeDamage(TREX_BITE_DAMAGE, true);
Creature_Kill( Creature_SpecialKill(
item, TREX_ANIM_KILL, TREX_STATE_KILL, LA_EXTRA_TREX_KILL); item, TREX_ANIM_KILL, TREX_STATE_KILL, LA_EXTRA_TREX_KILL);
return; return;
} }

View file

@ -409,7 +409,7 @@ static void M_Control(const int16_t item_num)
} }
if (lara_alive && g_LaraItem->hit_points <= 0) { if (lara_alive && g_LaraItem->hit_points <= 0) {
Creature_Kill( Creature_SpecialKill(
item, XIAN_SPEARMAN_ANIM_KILL, XIAN_SPEARMAN_STATE_KILL, item, XIAN_SPEARMAN_ANIM_KILL, XIAN_SPEARMAN_STATE_KILL,
LA_EXTRA_YETI_KILL); LA_EXTRA_YETI_KILL);
return; return;

View file

@ -284,7 +284,7 @@ static void M_Control(const int16_t item_num)
} }
if (lara_alive && g_LaraItem->hit_points <= 0) { if (lara_alive && g_LaraItem->hit_points <= 0) {
Creature_Kill( Creature_SpecialKill(
item, YETI_ANIM_KILL, YETI_STATE_KILL, LA_EXTRA_YETI_KILL); item, YETI_ANIM_KILL, YETI_STATE_KILL, LA_EXTRA_YETI_KILL);
return; return;
} }

View file

@ -78,7 +78,7 @@ static void M_PrepareCutscene(const int16_t item_num)
g_Lara.water_status = LWS_ABOVE_WATER; g_Lara.water_status = LWS_ABOVE_WATER;
ITEM *const item = Item_Get(item_num); ITEM *const item = Item_Get(item_num);
Creature_Kill(item, 0, 0, LA_EXTRA_FINAL_ANIM); Creature_SpecialKill(item, 0, 0, LA_EXTRA_FINAL_ANIM);
Camera_InvokeCinematic(item, 428, 0); Camera_InvokeCinematic(item, 428, 0);
} }