mirror of
https://github.com/LostArtefacts/TRX.git
synced 2025-04-28 20:58:07 +03:00
creature: move Creature_Kill to trx
This commit is contained in:
parent
81c570a61c
commit
d4da3f874e
9 changed files with 49 additions and 41 deletions
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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(
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue