mirror of
https://github.com/LostArtefacts/TRX.git
synced 2025-04-28 12:47:58 +03:00
tr1/objects: use new constructor-based setup
This commit is contained in:
parent
fe7ff97820
commit
d96840f68d
162 changed files with 1003 additions and 1421 deletions
|
@ -34,3 +34,9 @@ ANIM *Object_GetAnim(const OBJECT *obj, int32_t anim_idx);
|
|||
ANIM_BONE *Object_GetBone(const OBJECT *obj, int32_t bone_idx);
|
||||
|
||||
extern void Object_DrawMesh(int32_t mesh_idx, int32_t clip, bool interpolated);
|
||||
|
||||
#define REGISTER_OBJECT(object_id, setup_func_) \
|
||||
__attribute__((constructor)) static void M_RegisterObject##object_id(void) \
|
||||
{ \
|
||||
Object_Get(object_id)->setup_func = setup_func_; \
|
||||
}
|
||||
|
|
|
@ -43,13 +43,14 @@ typedef struct {
|
|||
} OBJECT_BOUNDS;
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
typedef struct OBJECT {
|
||||
int16_t mesh_count;
|
||||
int16_t mesh_idx;
|
||||
int32_t bone_idx;
|
||||
uint32_t frame_ofs;
|
||||
ANIM_FRAME *frame_base;
|
||||
|
||||
void (*setup_func)(struct OBJECT *obj);
|
||||
void (*initialise_func)(int16_t item_num);
|
||||
void (*control_func)(int16_t item_num);
|
||||
void (*draw_func)(const ITEM *item);
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/creatures/ape.h"
|
||||
|
||||
#include "game/creature.h"
|
||||
#include "game/items.h"
|
||||
#include "game/lara/common.h"
|
||||
|
@ -49,6 +47,8 @@ typedef enum {
|
|||
static BITE m_ApeBite = { 0, -19, 75, 15 };
|
||||
|
||||
static bool M_Vault(int16_t item_num, int16_t angle);
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(const int16_t item_num);
|
||||
|
||||
static bool M_Vault(int16_t item_num, int16_t angle)
|
||||
{
|
||||
|
@ -108,13 +108,13 @@ static bool M_Vault(int16_t item_num, int16_t angle)
|
|||
return true;
|
||||
}
|
||||
|
||||
void Ape_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = Creature_Initialise;
|
||||
obj->control_func = Ape_Control;
|
||||
obj->control_func = M_Control;
|
||||
obj->collision_func = Creature_Collision;
|
||||
obj->shadow_size = UNIT_SHADOW / 2;
|
||||
obj->hit_points = APE_HITPOINTS;
|
||||
|
@ -130,7 +130,7 @@ void Ape_Setup(OBJECT *obj)
|
|||
Object_GetBone(obj, 13)->rot_y = true;
|
||||
}
|
||||
|
||||
void Ape_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -263,3 +263,5 @@ void Ape_Control(int16_t item_num)
|
|||
Item_SwitchToAnim(item, APE_VAULT_ANIM, 0);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_APE, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Ape_Setup(OBJECT *obj);
|
||||
void Ape_Control(int16_t item_num);
|
|
@ -14,11 +14,16 @@
|
|||
static int32_t m_AnchorX = -1;
|
||||
static int32_t m_AnchorZ = -1;
|
||||
|
||||
void BaconLara_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Initialise(int16_t item_num);
|
||||
static void M_Control(int16_t item_num);
|
||||
static void M_Draw(const ITEM *item);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->initialise_func = BaconLara_Initialise;
|
||||
obj->control_func = BaconLara_Control;
|
||||
obj->draw_func = BaconLara_Draw;
|
||||
obj->initialise_func = M_Initialise;
|
||||
obj->control_func = M_Control;
|
||||
obj->draw_func = M_Draw;
|
||||
obj->collision_func = Creature_Collision;
|
||||
obj->hit_points = LARA_MAX_HITPOINTS;
|
||||
obj->shadow_size = (UNIT_SHADOW * 10) / 16;
|
||||
|
@ -28,7 +33,7 @@ void BaconLara_Setup(OBJECT *obj)
|
|||
obj->save_anim = 1;
|
||||
}
|
||||
|
||||
void BaconLara_Initialise(int16_t item_num)
|
||||
static void M_Initialise(const int16_t item_num)
|
||||
{
|
||||
const OBJECT *const lara_obj = Object_Get(O_LARA);
|
||||
OBJECT *const bacon_obj = Object_Get(O_BACON_LARA);
|
||||
|
@ -37,20 +42,7 @@ void BaconLara_Initialise(int16_t item_num)
|
|||
Item_Get(item_num)->data = nullptr;
|
||||
}
|
||||
|
||||
bool BaconLara_InitialiseAnchor(const int32_t room_index)
|
||||
{
|
||||
if (room_index >= Room_GetCount()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const ROOM *const room = Room_Get(room_index);
|
||||
m_AnchorX = room->pos.x + room->size.x * (WALL_L >> 1);
|
||||
m_AnchorZ = room->pos.z + room->size.z * (WALL_L >> 1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void BaconLara_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
if (m_AnchorX == -1) {
|
||||
return;
|
||||
|
@ -127,7 +119,7 @@ void BaconLara_Control(int16_t item_num)
|
|||
}
|
||||
}
|
||||
|
||||
void BaconLara_Draw(const ITEM *item)
|
||||
static void M_Draw(const ITEM *const item)
|
||||
{
|
||||
if (item->current_anim_state == LS_DEATH) {
|
||||
Object_DrawAnimatingItem(item);
|
||||
|
@ -147,3 +139,16 @@ void BaconLara_Draw(const ITEM *item)
|
|||
Lara_SetMesh(mesh, old_mesh_ptrs[mesh]);
|
||||
}
|
||||
}
|
||||
|
||||
bool BaconLara_InitialiseAnchor(const int32_t room_index)
|
||||
{
|
||||
if (room_index >= Room_GetCount()) {
|
||||
return false;
|
||||
}
|
||||
const ROOM *const room = Room_Get(room_index);
|
||||
m_AnchorX = room->pos.x + room->size.x * (WALL_L >> 1);
|
||||
m_AnchorZ = room->pos.z + room->size.z * (WALL_L >> 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_BACON_LARA, M_Setup)
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
#include <stdint.h>
|
||||
|
||||
void BaconLara_Setup(OBJECT *obj);
|
||||
void BaconLara_Initialise(int16_t item_num);
|
||||
bool BaconLara_InitialiseAnchor(int32_t room_index);
|
||||
void BaconLara_Control(int16_t item_num);
|
||||
void BaconLara_Draw(const ITEM *item);
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/creatures/baldy.h"
|
||||
|
||||
#include "game/creature.h"
|
||||
#include "game/items.h"
|
||||
#include "game/lot.h"
|
||||
|
@ -29,13 +27,17 @@ typedef enum {
|
|||
|
||||
static BITE m_BaldyGun = { -20, 440, 20, 9 };
|
||||
|
||||
void Baldy_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Initialise(int16_t item_num);
|
||||
static void M_Control(int16_t item_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = Baldy_Initialise;
|
||||
obj->control_func = Baldy_Control;
|
||||
obj->initialise_func = M_Initialise;
|
||||
obj->control_func = M_Control;
|
||||
obj->collision_func = Creature_Collision;
|
||||
obj->shadow_size = UNIT_SHADOW / 2;
|
||||
obj->hit_points = BALDY_HITPOINTS;
|
||||
|
@ -50,13 +52,13 @@ void Baldy_Setup(OBJECT *obj)
|
|||
Object_GetBone(obj, 0)->rot_y = true;
|
||||
}
|
||||
|
||||
void Baldy_Initialise(int16_t item_num)
|
||||
static void M_Initialise(const int16_t item_num)
|
||||
{
|
||||
Creature_Initialise(item_num);
|
||||
Item_Get(item_num)->current_anim_state = BALDY_STATE_RUN;
|
||||
}
|
||||
|
||||
void Baldy_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -159,3 +161,5 @@ void Baldy_Control(int16_t item_num)
|
|||
Creature_Head(item, head);
|
||||
Creature_Animate(item_num, angle, 0);
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_BALDY, M_Setup)
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Baldy_Setup(OBJECT *obj);
|
||||
void Baldy_Initialise(int16_t item_num);
|
||||
void Baldy_Control(int16_t item_num);
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/creatures/bat.h"
|
||||
|
||||
#include "game/creature.h"
|
||||
#include "game/items.h"
|
||||
#include "game/lara/common.h"
|
||||
|
@ -30,6 +28,9 @@ typedef enum {
|
|||
static BITE m_BatBite = { 0, 16, 45, 4 };
|
||||
|
||||
static void M_FixEmbeddedPosition(int16_t item_num);
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t item_num);
|
||||
static void M_Initialise(int16_t item_num);
|
||||
|
||||
static void M_FixEmbeddedPosition(int16_t item_num)
|
||||
{
|
||||
|
@ -65,13 +66,13 @@ static void M_FixEmbeddedPosition(int16_t item_num)
|
|||
}
|
||||
}
|
||||
|
||||
void Bat_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = Bat_Initialise;
|
||||
obj->control_func = Bat_Control;
|
||||
obj->initialise_func = M_Initialise;
|
||||
obj->control_func = M_Control;
|
||||
obj->collision_func = Creature_Collision;
|
||||
obj->shadow_size = UNIT_SHADOW / 2;
|
||||
obj->hit_points = BAT_HITPOINTS;
|
||||
|
@ -84,7 +85,7 @@ void Bat_Setup(OBJECT *obj)
|
|||
obj->save_flags = 1;
|
||||
}
|
||||
|
||||
void Bat_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -144,7 +145,7 @@ void Bat_Control(int16_t item_num)
|
|||
Creature_Animate(item_num, angle, 0);
|
||||
}
|
||||
|
||||
void Bat_Initialise(int16_t item_num)
|
||||
static void M_Initialise(const int16_t item_num)
|
||||
{
|
||||
Creature_Initialise(item_num);
|
||||
|
||||
|
@ -153,3 +154,5 @@ void Bat_Initialise(int16_t item_num)
|
|||
// by the height of their hanging animation.
|
||||
M_FixEmbeddedPosition(item_num);
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_BAT, M_Setup)
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Bat_Setup(OBJECT *obj);
|
||||
void Bat_Initialise(int16_t item_num);
|
||||
void Bat_Control(int16_t item_num);
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/creatures/bear.h"
|
||||
|
||||
#include "game/creature.h"
|
||||
#include "game/items.h"
|
||||
#include "game/lara/common.h"
|
||||
|
@ -47,13 +45,16 @@ typedef enum {
|
|||
|
||||
static BITE m_BearHeadBite = { 0, 96, 335, 14 };
|
||||
|
||||
void Bear_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t item_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = Creature_Initialise;
|
||||
obj->control_func = Bear_Control;
|
||||
obj->control_func = M_Control;
|
||||
obj->collision_func = Creature_Collision;
|
||||
obj->shadow_size = UNIT_SHADOW / 2;
|
||||
obj->hit_points = BEAR_HITPOINTS;
|
||||
|
@ -73,7 +74,7 @@ void Bear_Setup(OBJECT *obj)
|
|||
Object_GetBone(obj, 13)->rot_y = true;
|
||||
}
|
||||
|
||||
void Bear_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -246,3 +247,5 @@ void Bear_Control(int16_t item_num)
|
|||
Creature_Head(item, head);
|
||||
Creature_Animate(item_num, angle, 0);
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_BEAR, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Bear_Setup(OBJECT *obj);
|
||||
void Bear_Control(int16_t item_num);
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/creatures/centaur.h"
|
||||
|
||||
#include "game/creature.h"
|
||||
#include "game/effects.h"
|
||||
#include "game/items.h"
|
||||
|
@ -37,13 +35,16 @@ typedef enum {
|
|||
static BITE m_CentaurRocket = { 11, 415, 41, 13 };
|
||||
static BITE m_CentaurRear = { 50, 30, 0, 5 };
|
||||
|
||||
void Centaur_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t item_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = Creature_Initialise;
|
||||
obj->control_func = Centaur_Control;
|
||||
obj->control_func = M_Control;
|
||||
obj->collision_func = Creature_Collision;
|
||||
obj->shadow_size = UNIT_SHADOW / 3;
|
||||
obj->hit_points = CENTAUR_HITPOINTS;
|
||||
|
@ -60,7 +61,7 @@ void Centaur_Setup(OBJECT *obj)
|
|||
Object_GetBone(obj, 10)->rot_y = true;
|
||||
}
|
||||
|
||||
void Centaur_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -161,3 +162,5 @@ void Centaur_Control(int16_t item_num)
|
|||
item->status = IS_DEACTIVATED;
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_CENTAUR, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Centaur_Setup(OBJECT *obj);
|
||||
void Centaur_Control(int16_t item_num);
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/creatures/cowboy.h"
|
||||
|
||||
#include "game/creature.h"
|
||||
#include "game/effects.h"
|
||||
#include "game/items.h"
|
||||
|
@ -32,13 +30,16 @@ typedef enum {
|
|||
static BITE m_CowboyGun1 = { 1, 200, 41, 5 };
|
||||
static BITE m_CowboyGun2 = { -2, 200, 40, 8 };
|
||||
|
||||
void Cowboy_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t item_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = Creature_Initialise;
|
||||
obj->control_func = Cowboy_Control;
|
||||
obj->control_func = M_Control;
|
||||
obj->collision_func = Creature_Collision;
|
||||
obj->shadow_size = UNIT_SHADOW / 2;
|
||||
obj->hit_points = COWBOY_HITPOINTS;
|
||||
|
@ -53,7 +54,7 @@ void Cowboy_Setup(OBJECT *obj)
|
|||
Object_GetBone(obj, 0)->rot_y = true;
|
||||
}
|
||||
|
||||
void Cowboy_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -169,3 +170,5 @@ void Cowboy_Control(int16_t item_num)
|
|||
Creature_Head(item, head);
|
||||
Creature_Animate(item_num, angle, 0);
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_COWBOY, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Cowboy_Setup(OBJECT *obj);
|
||||
void Cowboy_Control(int16_t item_num);
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/creatures/crocodile.h"
|
||||
|
||||
#include "game/carrier.h"
|
||||
#include "game/creature.h"
|
||||
#include "game/items.h"
|
||||
|
@ -54,6 +52,11 @@ typedef enum {
|
|||
|
||||
static BITE m_CrocodileBite = { 5, -21, 467, 9 };
|
||||
|
||||
static void M_SetupCrocodile(OBJECT *obj);
|
||||
static void M_SetupAlligator(OBJECT *obj);
|
||||
static void M_ControlCrocodile(int16_t item_num);
|
||||
static void M_ControlAlligator(int16_t item_num);
|
||||
|
||||
static const HYBRID_INFO m_CrocodileInfo = {
|
||||
.land.id = O_CROCODILE,
|
||||
.land.active_anim = CROCODILE_STATE_EMPTY,
|
||||
|
@ -63,29 +66,45 @@ static const HYBRID_INFO m_CrocodileInfo = {
|
|||
.water.active_anim = ALLIGATOR_STATE_EMPTY,
|
||||
};
|
||||
|
||||
void Croc_Setup(OBJECT *obj)
|
||||
static void M_SetupBase(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = Creature_Initialise;
|
||||
obj->control_func = Croc_Control;
|
||||
obj->collision_func = Creature_Collision;
|
||||
obj->shadow_size = UNIT_SHADOW / 3;
|
||||
obj->hit_points = CROCODILE_HITPOINTS;
|
||||
obj->pivot_length = 600;
|
||||
obj->radius = CROCODILE_RADIUS;
|
||||
obj->smartness = CROCODILE_SMARTNESS;
|
||||
obj->intelligent = 1;
|
||||
obj->save_position = 1;
|
||||
obj->save_hitpoints = 1;
|
||||
obj->save_anim = 1;
|
||||
obj->save_flags = 1;
|
||||
|
||||
Object_GetBone(obj, 7)->rot_y = true;
|
||||
}
|
||||
|
||||
void Croc_Control(int16_t item_num)
|
||||
static void M_SetupCrocodile(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
M_SetupBase(obj);
|
||||
obj->control_func = M_ControlCrocodile;
|
||||
obj->hit_points = CROCODILE_HITPOINTS;
|
||||
obj->radius = CROCODILE_RADIUS;
|
||||
obj->smartness = CROCODILE_SMARTNESS;
|
||||
}
|
||||
|
||||
static void M_SetupAlligator(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
M_SetupBase(obj);
|
||||
obj->control_func = M_ControlAlligator;
|
||||
obj->hit_points = ALLIGATOR_HITPOINTS;
|
||||
obj->radius = ALLIGATOR_RADIUS;
|
||||
obj->smartness = ALLIGATOR_SMARTNESS;
|
||||
}
|
||||
|
||||
static void M_ControlCrocodile(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -202,29 +221,7 @@ void Croc_Control(int16_t item_num)
|
|||
}
|
||||
}
|
||||
|
||||
void Alligator_Setup(OBJECT *obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = Creature_Initialise;
|
||||
obj->control_func = Alligator_Control;
|
||||
obj->collision_func = Creature_Collision;
|
||||
obj->shadow_size = UNIT_SHADOW / 3;
|
||||
obj->hit_points = ALLIGATOR_HITPOINTS;
|
||||
obj->pivot_length = 600;
|
||||
obj->radius = ALLIGATOR_RADIUS;
|
||||
obj->smartness = ALLIGATOR_SMARTNESS;
|
||||
obj->intelligent = 1;
|
||||
obj->save_position = 1;
|
||||
obj->save_hitpoints = 1;
|
||||
obj->save_anim = 1;
|
||||
obj->save_flags = 1;
|
||||
|
||||
Object_GetBone(obj, 7)->rot_y = true;
|
||||
}
|
||||
|
||||
void Alligator_Control(int16_t item_num)
|
||||
static void M_ControlAlligator(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -332,3 +329,6 @@ void Alligator_Control(int16_t item_num)
|
|||
|
||||
Creature_Animate(item_num, angle, 0);
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_ALLIGATOR, M_SetupAlligator)
|
||||
REGISTER_OBJECT(O_CROCODILE, M_SetupCrocodile)
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Croc_Setup(OBJECT *obj);
|
||||
void Croc_Control(int16_t item_num);
|
||||
|
||||
void Alligator_Setup(OBJECT *obj);
|
||||
void Alligator_Control(int16_t item_num);
|
|
@ -1,17 +1,19 @@
|
|||
#include "game/objects/creatures/cutscene_player.h"
|
||||
|
||||
#include "game/camera.h"
|
||||
#include "game/items.h"
|
||||
#include "global/vars.h"
|
||||
|
||||
void CutscenePlayer_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Initialise(int16_t item_num);
|
||||
static void M_Control(int16_t item_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->initialise_func = CutscenePlayer_Initialise;
|
||||
obj->control_func = CutscenePlayer_Control;
|
||||
obj->initialise_func = M_Initialise;
|
||||
obj->control_func = M_Control;
|
||||
obj->hit_points = 1;
|
||||
}
|
||||
|
||||
void CutscenePlayer_Initialise(int16_t item_num)
|
||||
static void M_Initialise(const int16_t item_num)
|
||||
{
|
||||
Item_AddActive(item_num);
|
||||
|
||||
|
@ -25,7 +27,7 @@ void CutscenePlayer_Initialise(int16_t item_num)
|
|||
item->rot.y = 0;
|
||||
}
|
||||
|
||||
void CutscenePlayer_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
if (item->object_id != O_PLAYER_4) {
|
||||
|
@ -35,3 +37,8 @@ void CutscenePlayer_Control(int16_t item_num)
|
|||
}
|
||||
Item_Animate(item);
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_PLAYER_1, M_Setup)
|
||||
REGISTER_OBJECT(O_PLAYER_2, M_Setup)
|
||||
REGISTER_OBJECT(O_PLAYER_3, M_Setup)
|
||||
REGISTER_OBJECT(O_PLAYER_4, M_Setup)
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void CutscenePlayer_Setup(OBJECT *obj);
|
||||
void CutscenePlayer_Initialise(int16_t item_num);
|
||||
void CutscenePlayer_Control(int16_t item_num);
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/creatures/larson.h"
|
||||
|
||||
#include "game/creature.h"
|
||||
#include "game/items.h"
|
||||
#include "game/lot.h"
|
||||
|
@ -32,13 +30,16 @@ typedef enum {
|
|||
|
||||
static BITE m_LarsonGun = { -60, 170, 0, 14 };
|
||||
|
||||
void Larson_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t item_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = Creature_Initialise;
|
||||
obj->control_func = Larson_Control;
|
||||
obj->control_func = M_Control;
|
||||
obj->collision_func = Creature_Collision;
|
||||
obj->shadow_size = UNIT_SHADOW / 2;
|
||||
obj->hit_points = LARSON_HITPOINTS;
|
||||
|
@ -53,7 +54,7 @@ void Larson_Setup(OBJECT *obj)
|
|||
Object_GetBone(obj, 6)->rot_y = true;
|
||||
}
|
||||
|
||||
void Larson_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -173,3 +174,5 @@ void Larson_Control(int16_t item_num)
|
|||
|
||||
Creature_Animate(item_num, angle, 0);
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_LARSON, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Larson_Setup(OBJECT *obj);
|
||||
void Larson_Control(int16_t item_num);
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/creatures/lion.h"
|
||||
|
||||
#include "game/creature.h"
|
||||
#include "game/items.h"
|
||||
#include "game/lara/common.h"
|
||||
|
@ -45,10 +43,16 @@ typedef enum {
|
|||
|
||||
static BITE m_LionBite = { -2, -10, 132, 21 };
|
||||
|
||||
static void M_SetupBase(OBJECT *obj);
|
||||
static void M_SetupLion(OBJECT *obj);
|
||||
static void M_SetupLioness(OBJECT *obj);
|
||||
static void M_SetupPuma(OBJECT *obj);
|
||||
static void M_Control(int16_t item_num);
|
||||
|
||||
static void M_SetupBase(OBJECT *const obj)
|
||||
{
|
||||
obj->initialise_func = Creature_Initialise;
|
||||
obj->control_func = Lion_Control;
|
||||
obj->control_func = M_Control;
|
||||
obj->collision_func = Creature_Collision;
|
||||
obj->shadow_size = UNIT_SHADOW / 2;
|
||||
obj->pivot_length = 400;
|
||||
|
@ -61,7 +65,7 @@ static void M_SetupBase(OBJECT *const obj)
|
|||
Object_GetBone(obj, 19)->rot_y = true;
|
||||
}
|
||||
|
||||
void Lion_SetupLion(OBJECT *obj)
|
||||
static void M_SetupLion(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
|
@ -72,7 +76,7 @@ void Lion_SetupLion(OBJECT *obj)
|
|||
obj->smartness = LION_SMARTNESS;
|
||||
}
|
||||
|
||||
void Lion_SetupLioness(OBJECT *obj)
|
||||
static void M_SetupLioness(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
|
@ -83,7 +87,7 @@ void Lion_SetupLioness(OBJECT *obj)
|
|||
obj->smartness = LIONESS_SMARTNESS;
|
||||
}
|
||||
|
||||
void Lion_SetupPuma(OBJECT *obj)
|
||||
static void M_SetupPuma(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
|
@ -94,7 +98,7 @@ void Lion_SetupPuma(OBJECT *obj)
|
|||
obj->smartness = PUMA_SMARTNESS;
|
||||
}
|
||||
|
||||
void Lion_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -195,3 +199,7 @@ void Lion_Control(int16_t item_num)
|
|||
Creature_Head(item, head);
|
||||
Creature_Animate(item_num, angle, tilt);
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_LION, M_SetupLion)
|
||||
REGISTER_OBJECT(O_LIONESS, M_SetupLioness)
|
||||
REGISTER_OBJECT(O_PUMA, M_SetupPuma)
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Lion_SetupLion(OBJECT *obj);
|
||||
void Lion_SetupLioness(OBJECT *obj);
|
||||
void Lion_SetupPuma(OBJECT *obj);
|
||||
void Lion_Control(int16_t item_num);
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/creatures/mummy.h"
|
||||
|
||||
#include "game/carrier.h"
|
||||
#include "game/creature.h"
|
||||
#include "game/game.h"
|
||||
|
@ -21,13 +19,17 @@ typedef enum {
|
|||
MUMMY_STATE_DEATH = 2,
|
||||
} MUMMY_STATE;
|
||||
|
||||
void Mummy_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Initialise(int16_t item_num);
|
||||
static void M_Control(int16_t item_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = Mummy_Initialise;
|
||||
obj->control_func = Mummy_Control;
|
||||
obj->initialise_func = M_Initialise;
|
||||
obj->control_func = M_Control;
|
||||
obj->collision_func = Object_Collision;
|
||||
obj->hit_points = MUMMY_HITPOINTS;
|
||||
obj->save_flags = 1;
|
||||
|
@ -37,7 +39,7 @@ void Mummy_Setup(OBJECT *obj)
|
|||
Object_GetBone(obj, 2)->rot_y = true;
|
||||
}
|
||||
|
||||
void Mummy_Initialise(int16_t item_num)
|
||||
static void M_Initialise(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
item->touch_bits = 0;
|
||||
|
@ -46,7 +48,7 @@ void Mummy_Initialise(int16_t item_num)
|
|||
*(int16_t *)item->data = 0;
|
||||
}
|
||||
|
||||
void Mummy_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
int16_t head = 0;
|
||||
|
@ -78,3 +80,5 @@ void Mummy_Control(int16_t item_num)
|
|||
item->hit_points = DONT_TARGET;
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_MUMMY, M_Setup)
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Mummy_Setup(OBJECT *obj);
|
||||
void Mummy_Initialise(int16_t item_num);
|
||||
void Mummy_Control(int16_t item_num);
|
|
@ -59,18 +59,19 @@ static BITE m_WarriorBite = { -27, 98, 0, 10 };
|
|||
static BITE m_WarriorRocket = { 51, 213, 0, 14 };
|
||||
static BITE m_WarriorShard = { -35, 269, 0, 9 };
|
||||
|
||||
void Mutant_ToggleExplosions(bool enable)
|
||||
{
|
||||
m_EnableExplosions = enable;
|
||||
}
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Setup2(OBJECT *obj);
|
||||
static void M_Setup3(OBJECT *obj);
|
||||
static void M_Initialise2(int16_t item_num);
|
||||
static void M_Control(int16_t item_num);
|
||||
|
||||
void Mutant_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = Creature_Initialise;
|
||||
obj->control_func = Mutant_FlyerControl;
|
||||
obj->control_func = M_Control;
|
||||
obj->collision_func = Creature_Collision;
|
||||
obj->shadow_size = UNIT_SHADOW / 3;
|
||||
obj->hit_points = FLYER_HITPOINTS;
|
||||
|
@ -82,31 +83,38 @@ void Mutant_Setup(OBJECT *obj)
|
|||
obj->save_hitpoints = 1;
|
||||
obj->save_anim = 1;
|
||||
obj->save_flags = 1;
|
||||
|
||||
Object_GetBone(obj, 0)->rot_y = true;
|
||||
Object_GetBone(obj, 2)->rot_y = true;
|
||||
}
|
||||
|
||||
void Mutant_Setup2(OBJECT *obj)
|
||||
static void M_Setup2(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
*obj = *Object_Get(O_WARRIOR_1);
|
||||
obj->initialise_func = Mutant_Initialise2;
|
||||
obj->setup_func = M_Setup2;
|
||||
obj->initialise_func = M_Initialise2;
|
||||
obj->smartness = WARRIOR2_SMARTNESS;
|
||||
}
|
||||
|
||||
void Mutant_Setup3(OBJECT *obj)
|
||||
static void M_Setup3(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
*obj = *Object_Get(O_WARRIOR_1);
|
||||
obj->initialise_func = Mutant_Initialise2;
|
||||
obj->setup_func = M_Setup3;
|
||||
obj->initialise_func = M_Initialise2;
|
||||
}
|
||||
|
||||
void Mutant_FlyerControl(int16_t item_num)
|
||||
static void M_Initialise2(const int16_t item_num)
|
||||
{
|
||||
Creature_Initialise(item_num);
|
||||
Item_Get(item_num)->mesh_bits = 0xFFE07FFF;
|
||||
}
|
||||
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -359,8 +367,11 @@ void Mutant_FlyerControl(int16_t item_num)
|
|||
Creature_Animate(item_num, angle, 0);
|
||||
}
|
||||
|
||||
void Mutant_Initialise2(int16_t item_num)
|
||||
void Mutant_ToggleExplosions(bool enable)
|
||||
{
|
||||
Creature_Initialise(item_num);
|
||||
Item_Get(item_num)->mesh_bits = 0xFFE07FFF;
|
||||
m_EnableExplosions = enable;
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_WARRIOR_1, M_Setup)
|
||||
REGISTER_OBJECT(O_WARRIOR_2, M_Setup2)
|
||||
REGISTER_OBJECT(O_WARRIOR_3, M_Setup3)
|
||||
|
|
|
@ -1,12 +1,3 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Mutant_Setup(OBJECT *obj);
|
||||
void Mutant_Setup2(OBJECT *obj);
|
||||
void Mutant_Setup3(OBJECT *obj);
|
||||
|
||||
void Mutant_ToggleExplosions(bool enable);
|
||||
void Mutant_FlyerControl(int16_t item_num);
|
||||
|
||||
void Mutant_Initialise2(int16_t item_num);
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/creatures/natla.h"
|
||||
|
||||
#include "game/creature.h"
|
||||
#include "game/effects.h"
|
||||
#include "game/items.h"
|
||||
|
@ -44,14 +42,17 @@ typedef enum {
|
|||
|
||||
static BITE m_NatlaGun = { 5, 220, 7, 4 };
|
||||
|
||||
void Natla_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t item_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->collision_func = Creature_Collision;
|
||||
obj->initialise_func = Creature_Initialise;
|
||||
obj->control_func = Natla_Control;
|
||||
obj->control_func = M_Control;
|
||||
obj->shadow_size = UNIT_SHADOW / 2;
|
||||
obj->hit_points = NATLA_HITPOINTS;
|
||||
obj->radius = NATLA_RADIUS;
|
||||
|
@ -66,7 +67,7 @@ void Natla_Setup(OBJECT *obj)
|
|||
Object_GetBone(obj, 2)->rot_z = true;
|
||||
}
|
||||
|
||||
void Natla_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -323,3 +324,5 @@ void Natla_Control(int16_t item_num)
|
|||
|
||||
item->priv = (void *)(intptr_t)facing;
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_NATLA, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Natla_Setup(OBJECT *obj);
|
||||
void Natla_Control(int16_t item_num);
|
|
@ -41,13 +41,16 @@ static BITE m_PierreGun1 = { 60, 200, 0, 11 };
|
|||
static BITE m_PierreGun2 = { -57, 200, 0, 14 };
|
||||
static int16_t m_PierreItemNum = NO_ITEM;
|
||||
|
||||
void Pierre_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t item_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = Creature_Initialise;
|
||||
obj->control_func = Pierre_Control;
|
||||
obj->control_func = M_Control;
|
||||
obj->collision_func = Creature_Collision;
|
||||
obj->shadow_size = UNIT_SHADOW / 2;
|
||||
obj->hit_points = PIERRE_HITPOINTS;
|
||||
|
@ -62,7 +65,7 @@ void Pierre_Setup(OBJECT *obj)
|
|||
Object_GetBone(obj, 6)->rot_y = true;
|
||||
}
|
||||
|
||||
void Pierre_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -257,3 +260,5 @@ void Pierre_Reset(void)
|
|||
{
|
||||
m_PierreItemNum = NO_ITEM;
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_PIERRE, M_Setup)
|
||||
|
|
|
@ -1,7 +1,3 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Pierre_Setup(OBJECT *obj);
|
||||
void Pierre_Control(int16_t item_num);
|
||||
void Pierre_Reset(void);
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/creatures/pod.h"
|
||||
|
||||
#include "game/items.h"
|
||||
#include "game/lot.h"
|
||||
#include "game/objects/common.h"
|
||||
|
@ -16,19 +14,23 @@ typedef enum {
|
|||
POD_STATE_EXPLODE = 1,
|
||||
} POD_STATE;
|
||||
|
||||
void Pod_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Initialise(int16_t item_num);
|
||||
static void M_Control(int16_t item_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = Pod_Initialise;
|
||||
obj->control_func = Pod_Control;
|
||||
obj->initialise_func = M_Initialise;
|
||||
obj->control_func = M_Control;
|
||||
obj->collision_func = Object_Collision;
|
||||
obj->save_anim = 1;
|
||||
obj->save_flags = 1;
|
||||
}
|
||||
|
||||
void Pod_Initialise(int16_t item_num)
|
||||
static void M_Initialise(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -72,7 +74,7 @@ void Pod_Initialise(int16_t item_num)
|
|||
item->mesh_bits = 0xFF0001FF;
|
||||
}
|
||||
|
||||
void Pod_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -116,3 +118,6 @@ void Pod_Control(int16_t item_num)
|
|||
|
||||
Item_Animate(item);
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_PODS, M_Setup)
|
||||
REGISTER_OBJECT(O_BIG_POD, M_Setup)
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Pod_Setup(OBJECT *obj);
|
||||
void Pod_Initialise(int16_t item_num);
|
||||
void Pod_Control(int16_t item_num);
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/creatures/raptor.h"
|
||||
|
||||
#include "game/creature.h"
|
||||
#include "game/items.h"
|
||||
#include "game/lara/common.h"
|
||||
|
@ -40,13 +38,16 @@ typedef enum {
|
|||
|
||||
static BITE m_RaptorBite = { 0, 66, 318, 22 };
|
||||
|
||||
void Raptor_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t item_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = Creature_Initialise;
|
||||
obj->control_func = Raptor_Control;
|
||||
obj->control_func = M_Control;
|
||||
obj->collision_func = Creature_Collision;
|
||||
obj->shadow_size = UNIT_SHADOW / 2;
|
||||
obj->hit_points = RAPTOR_HITPOINTS;
|
||||
|
@ -62,7 +63,7 @@ void Raptor_Setup(OBJECT *obj)
|
|||
Object_GetBone(obj, 21)->rot_y = true;
|
||||
}
|
||||
|
||||
void Raptor_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -182,3 +183,5 @@ void Raptor_Control(int16_t item_num)
|
|||
Creature_Head(item, head);
|
||||
Creature_Animate(item_num, angle, tilt);
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_RAPTOR, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Raptor_Setup(OBJECT *obj);
|
||||
void Raptor_Control(int16_t item_num);
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/creatures/rat.h"
|
||||
|
||||
#include "game/carrier.h"
|
||||
#include "game/creature.h"
|
||||
#include "game/items.h"
|
||||
|
@ -48,6 +46,12 @@ typedef enum {
|
|||
|
||||
static BITE m_RatBite = { 0, -11, 108, 3 };
|
||||
|
||||
static void M_SetupBase(OBJECT *obj);
|
||||
static void M_SetupRat(OBJECT *obj);
|
||||
static void M_SetupVole(OBJECT *obj);
|
||||
static void M_ControlRat(int16_t item_num);
|
||||
static void M_ControlVole(int16_t item_num);
|
||||
|
||||
static const HYBRID_INFO m_RatInfo = {
|
||||
.land.id = O_RAT,
|
||||
.land.active_anim = RAT_STATE_EMPTY,
|
||||
|
@ -57,13 +61,9 @@ static const HYBRID_INFO m_RatInfo = {
|
|||
.water.active_anim = VOLE_STATE_EMPTY,
|
||||
};
|
||||
|
||||
void Rat_Setup(OBJECT *obj)
|
||||
static void M_SetupBase(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = Creature_Initialise;
|
||||
obj->control_func = Rat_Control;
|
||||
obj->collision_func = Creature_Collision;
|
||||
obj->shadow_size = UNIT_SHADOW / 2;
|
||||
obj->hit_points = RAT_HITPOINTS;
|
||||
|
@ -75,11 +75,28 @@ void Rat_Setup(OBJECT *obj)
|
|||
obj->save_hitpoints = 1;
|
||||
obj->save_anim = 1;
|
||||
obj->save_flags = 1;
|
||||
|
||||
Object_GetBone(obj, 1)->rot_y = true;
|
||||
}
|
||||
|
||||
void Rat_Control(int16_t item_num)
|
||||
static void M_SetupRat(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
M_SetupBase(obj);
|
||||
obj->control_func = M_ControlRat;
|
||||
}
|
||||
|
||||
static void M_SetupVole(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
M_SetupBase(obj);
|
||||
obj->control_func = M_ControlVole;
|
||||
}
|
||||
|
||||
static void M_ControlRat(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -168,29 +185,7 @@ void Rat_Control(int16_t item_num)
|
|||
Creature_Animate(item_num, angle, 0);
|
||||
}
|
||||
|
||||
void Vole_Setup(OBJECT *obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = Creature_Initialise;
|
||||
obj->control_func = Vole_Control;
|
||||
obj->collision_func = Creature_Collision;
|
||||
obj->shadow_size = UNIT_SHADOW / 2;
|
||||
obj->hit_points = RAT_HITPOINTS;
|
||||
obj->pivot_length = 200;
|
||||
obj->radius = RAT_RADIUS;
|
||||
obj->smartness = RAT_SMARTNESS;
|
||||
obj->intelligent = 1;
|
||||
obj->save_position = 1;
|
||||
obj->save_hitpoints = 1;
|
||||
obj->save_anim = 1;
|
||||
obj->save_flags = 1;
|
||||
|
||||
Object_GetBone(obj, 1)->rot_y = true;
|
||||
}
|
||||
|
||||
void Vole_Control(int16_t item_num)
|
||||
static void M_ControlVole(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -275,3 +270,6 @@ void Vole_Control(int16_t item_num)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_RAT, M_SetupRat)
|
||||
REGISTER_OBJECT(O_VOLE, M_SetupVole)
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Rat_Setup(OBJECT *obj);
|
||||
void Rat_Control(int16_t item_num);
|
||||
|
||||
void Vole_Setup(OBJECT *obj);
|
||||
void Vole_Control(int16_t item_num);
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/creatures/skate_kid.h"
|
||||
|
||||
#include "game/creature.h"
|
||||
#include "game/items.h"
|
||||
#include "game/lot.h"
|
||||
|
@ -39,14 +37,19 @@ typedef enum {
|
|||
static BITE m_KidGun1 = { 0, 150, 34, 7 };
|
||||
static BITE m_KidGun2 = { 0, 150, 37, 4 };
|
||||
|
||||
void SkateKid_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Initialise(int16_t item_num);
|
||||
static void M_Control(int16_t item_num);
|
||||
static void M_Draw(const ITEM *item);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = SkateKid_Initialise;
|
||||
obj->control_func = SkateKid_Control;
|
||||
obj->draw_func = SkateKid_Draw;
|
||||
obj->initialise_func = M_Initialise;
|
||||
obj->control_func = M_Control;
|
||||
obj->draw_func = M_Draw;
|
||||
obj->collision_func = Creature_Collision;
|
||||
obj->shadow_size = UNIT_SHADOW / 2;
|
||||
obj->hit_points = SKATE_KID_HITPOINTS;
|
||||
|
@ -67,13 +70,13 @@ void SkateKid_Setup(OBJECT *obj)
|
|||
}
|
||||
}
|
||||
|
||||
void SkateKid_Initialise(int16_t item_num)
|
||||
static void M_Initialise(const int16_t item_num)
|
||||
{
|
||||
Creature_Initialise(item_num);
|
||||
Item_Get(item_num)->current_anim_state = SKATE_KID_STATE_SKATE;
|
||||
}
|
||||
|
||||
void SkateKid_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -173,7 +176,7 @@ void SkateKid_Control(int16_t item_num)
|
|||
Creature_Animate(item_num, angle, 0);
|
||||
}
|
||||
|
||||
void SkateKid_Draw(const ITEM *const item)
|
||||
static void M_Draw(const ITEM *const item)
|
||||
{
|
||||
Object_DrawAnimatingItem(item);
|
||||
if (!Object_Get(O_SKATEBOARD)->loaded) {
|
||||
|
@ -189,3 +192,5 @@ void SkateKid_Draw(const ITEM *const item)
|
|||
((ITEM *)item)->object_id = O_SKATEKID;
|
||||
Item_SwitchToAnim((ITEM *)item, relative_anim, relative_frame);
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_SKATEKID, M_Setup)
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void SkateKid_Setup(OBJECT *obj);
|
||||
void SkateKid_Initialise(int16_t item_num);
|
||||
void SkateKid_Control(int16_t item_num);
|
||||
void SkateKid_Draw(const ITEM *item);
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/creatures/statue.h"
|
||||
|
||||
#include "game/items.h"
|
||||
#include "game/lot.h"
|
||||
#include "game/objects/common.h"
|
||||
|
@ -15,19 +13,23 @@
|
|||
#define CENTAUR_REARING_ANIM 7
|
||||
#define CENTAUR_REARING_FRAME 36
|
||||
|
||||
void Statue_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Initialise(int16_t item_num);
|
||||
static void M_Control(int16_t item_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = Statue_Initialise;
|
||||
obj->control_func = Statue_Control;
|
||||
obj->initialise_func = M_Initialise;
|
||||
obj->control_func = M_Control;
|
||||
obj->collision_func = Object_Collision;
|
||||
obj->save_anim = 1;
|
||||
obj->save_flags = 1;
|
||||
}
|
||||
|
||||
void Statue_Initialise(int16_t item_num)
|
||||
static void M_Initialise(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -54,7 +56,7 @@ void Statue_Initialise(int16_t item_num)
|
|||
*(int16_t *)item->data = centaur_item_num;
|
||||
}
|
||||
|
||||
void Statue_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
if (item->flags & IF_KILLED) {
|
||||
|
@ -81,3 +83,5 @@ void Statue_Control(int16_t item_num)
|
|||
Sound_Effect(SFX_ATLANTEAN_EXPLODE, ¢aur->pos, SPM_NORMAL);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_STATUE, M_Setup)
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Statue_Setup(OBJECT *obj);
|
||||
void Statue_Initialise(int16_t item_num);
|
||||
void Statue_Control(int16_t item_num);
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/creatures/torso.h"
|
||||
|
||||
#include "game/camera.h"
|
||||
#include "game/creature.h"
|
||||
#include "game/items.h"
|
||||
|
@ -51,13 +49,16 @@ typedef enum {
|
|||
TORSO_STATE_KILL = 11,
|
||||
} TORSO_STATE;
|
||||
|
||||
void Torso_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t item_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = Creature_Initialise;
|
||||
obj->control_func = Torso_Control;
|
||||
obj->control_func = M_Control;
|
||||
obj->collision_func = Creature_Collision;
|
||||
obj->shadow_size = UNIT_SHADOW / 3;
|
||||
obj->hit_points = TORSO_HITPOINTS;
|
||||
|
@ -72,7 +73,7 @@ void Torso_Setup(OBJECT *obj)
|
|||
Object_GetBone(obj, 1)->rot_y = true;
|
||||
}
|
||||
|
||||
void Torso_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -260,3 +261,5 @@ void Torso_Control(int16_t item_num)
|
|||
item->status = IS_DEACTIVATED;
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_TORSO, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Torso_Setup(OBJECT *obj);
|
||||
void Torso_Control(int16_t item_num);
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/creatures/trex.h"
|
||||
|
||||
#include "game/camera.h"
|
||||
#include "game/creature.h"
|
||||
#include "game/items.h"
|
||||
|
@ -40,15 +38,20 @@ typedef enum {
|
|||
TREX_STATE_KILL = 8,
|
||||
} TREX_STATE;
|
||||
|
||||
void TRex_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll);
|
||||
static void M_Control(int16_t item_num);
|
||||
static void M_KillLara(ITEM *item);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = Creature_Initialise;
|
||||
obj->control_func = TRex_Control;
|
||||
obj->control_func = M_Control;
|
||||
obj->draw_func = Object_DrawUnclippedItem;
|
||||
obj->collision_func = TRex_Collision;
|
||||
obj->collision_func = M_Collision;
|
||||
obj->shadow_size = UNIT_SHADOW / 2;
|
||||
obj->hit_points = TREX_HITPOINTS;
|
||||
obj->pivot_length = 2000;
|
||||
|
@ -64,7 +67,8 @@ void TRex_Setup(OBJECT *obj)
|
|||
Object_GetBone(obj, 11)->rot_y = true;
|
||||
}
|
||||
|
||||
void TRex_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll)
|
||||
static void M_Collision(
|
||||
const int16_t item_num, ITEM *const lara_item, COLL_INFO *const coll)
|
||||
{
|
||||
if (g_Config.gameplay.disable_trex_collision
|
||||
&& Item_Get(item_num)->hit_points <= 0) {
|
||||
|
@ -74,7 +78,7 @@ void TRex_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll)
|
|||
Creature_Collision(item_num, lara_item, coll);
|
||||
}
|
||||
|
||||
void TRex_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -166,7 +170,7 @@ void TRex_Control(int16_t item_num)
|
|||
if (item->touch_bits & TREX_TOUCH) {
|
||||
Lara_TakeDamage(TREX_BITE_DAMAGE, true);
|
||||
item->goal_anim_state = TREX_STATE_KILL;
|
||||
TRex_LaraDeath(item);
|
||||
M_KillLara(item);
|
||||
}
|
||||
item->required_anim_state = TREX_STATE_WALK;
|
||||
break;
|
||||
|
@ -179,7 +183,7 @@ void TRex_Control(int16_t item_num)
|
|||
item->collidable = 1;
|
||||
}
|
||||
|
||||
void TRex_LaraDeath(ITEM *item)
|
||||
static void M_KillLara(ITEM *const item)
|
||||
{
|
||||
item->goal_anim_state = TREX_STATE_KILL;
|
||||
if (g_LaraItem->room_num != item->room_num) {
|
||||
|
@ -207,3 +211,5 @@ void TRex_LaraDeath(ITEM *item)
|
|||
g_Camera.target_angle = 170 * DEG_1;
|
||||
g_Camera.target_elevation = -25 * DEG_1;
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_TREX, M_Setup)
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void TRex_Setup(OBJECT *obj);
|
||||
void TRex_Control(int16_t item_num);
|
||||
void TRex_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll);
|
||||
void TRex_LaraDeath(ITEM *item);
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/creatures/wolf.h"
|
||||
|
||||
#include "game/creature.h"
|
||||
#include "game/items.h"
|
||||
#include "game/lara/common.h"
|
||||
|
@ -47,13 +45,17 @@ typedef enum {
|
|||
|
||||
static BITE m_WolfJawBite = { 0, -14, 174, 6 };
|
||||
|
||||
void Wolf_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Initialise(int16_t item_num);
|
||||
static void M_Control(int16_t item_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
}
|
||||
obj->initialise_func = Wolf_Initialise;
|
||||
obj->control_func = Wolf_Control;
|
||||
obj->initialise_func = M_Initialise;
|
||||
obj->control_func = M_Control;
|
||||
obj->collision_func = Creature_Collision;
|
||||
obj->shadow_size = UNIT_SHADOW / 2;
|
||||
obj->hit_points = WOLF_HITPOINTS;
|
||||
|
@ -69,13 +71,13 @@ void Wolf_Setup(OBJECT *obj)
|
|||
Object_GetBone(obj, 2)->rot_y = true;
|
||||
}
|
||||
|
||||
void Wolf_Initialise(int16_t item_num)
|
||||
static void M_Initialise(const int16_t item_num)
|
||||
{
|
||||
Item_Get(item_num)->frame_num = WOLF_SLEEP_FRAME;
|
||||
Creature_Initialise(item_num);
|
||||
}
|
||||
|
||||
void Wolf_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -227,3 +229,5 @@ void Wolf_Control(int16_t item_num)
|
|||
Creature_Head(item, head);
|
||||
Creature_Animate(item_num, angle, tilt);
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_WOLF, M_Setup)
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Wolf_Setup(OBJECT *obj);
|
||||
void Wolf_Initialise(int16_t item_num);
|
||||
void Wolf_Control(int16_t item_num);
|
|
@ -1,17 +1,17 @@
|
|||
#include "game/objects/effects/blood.h"
|
||||
|
||||
#include "game/effects.h"
|
||||
#include "global/const.h"
|
||||
#include "global/vars.h"
|
||||
#include "game/objects/common.h"
|
||||
|
||||
#include <libtrx/game/math.h>
|
||||
|
||||
void Blood_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t effect_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->control_func = Blood_Control;
|
||||
obj->control_func = M_Control;
|
||||
}
|
||||
|
||||
void Blood_Control(int16_t effect_num)
|
||||
static void M_Control(const int16_t effect_num)
|
||||
{
|
||||
EFFECT *effect = Effect_Get(effect_num);
|
||||
effect->pos.x += (Math_Sin(effect->rot.y) * effect->speed) >> W2V_SHIFT;
|
||||
|
@ -25,3 +25,5 @@ void Blood_Control(int16_t effect_num)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_BLOOD_1, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Blood_Setup(OBJECT *obj);
|
||||
void Blood_Control(int16_t effect_num);
|
|
@ -1,22 +1,23 @@
|
|||
#include "game/objects/effects/body_part.h"
|
||||
|
||||
#include "game/effects.h"
|
||||
#include "game/lara/common.h"
|
||||
#include "game/objects/common.h"
|
||||
#include "game/room.h"
|
||||
#include "game/sound.h"
|
||||
#include "global/const.h"
|
||||
#include "global/vars.h"
|
||||
|
||||
#include <libtrx/game/math.h>
|
||||
|
||||
void BodyPart_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t effect_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->control_func = BodyPart_Control;
|
||||
obj->control_func = M_Control;
|
||||
obj->mesh_count = 0;
|
||||
obj->loaded = 1;
|
||||
}
|
||||
|
||||
void BodyPart_Control(int16_t effect_num)
|
||||
static void M_Control(const int16_t effect_num)
|
||||
{
|
||||
EFFECT *effect = Effect_Get(effect_num);
|
||||
effect->rot.x += 5 * DEG_1;
|
||||
|
@ -73,3 +74,5 @@ void BodyPart_Control(int16_t effect_num)
|
|||
Effect_NewRoom(effect_num, room_num);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_BODY_PART, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void BodyPart_Setup(OBJECT *obj);
|
||||
void BodyPart_Control(int16_t effect_num);
|
|
@ -1,18 +1,18 @@
|
|||
#include "game/objects/effects/bubble.h"
|
||||
|
||||
#include "game/effects.h"
|
||||
#include "game/room.h"
|
||||
#include "global/const.h"
|
||||
#include "global/vars.h"
|
||||
|
||||
#include <libtrx/game/math.h>
|
||||
|
||||
void Bubble_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t effect_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->control_func = Bubble_Control;
|
||||
obj->control_func = M_Control;
|
||||
}
|
||||
|
||||
void Bubble_Control(int16_t effect_num)
|
||||
static void M_Control(const int16_t effect_num)
|
||||
{
|
||||
EFFECT *effect = Effect_Get(effect_num);
|
||||
effect->rot.y += 9 * DEG_1;
|
||||
|
@ -42,3 +42,5 @@ void Bubble_Control(int16_t effect_num)
|
|||
effect->pos.y = y;
|
||||
effect->pos.z = z;
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_BUBBLES_1, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Bubble_Setup(OBJECT *obj);
|
||||
void Bubble_Control(int16_t effect_num);
|
|
@ -1,16 +1,16 @@
|
|||
#include "game/objects/effects/dart_effect.h"
|
||||
|
||||
#include "game/effects.h"
|
||||
#include "game/objects/common.h"
|
||||
#include "global/vars.h"
|
||||
|
||||
void DartEffect_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t effect_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->control_func = DartEffect_Control;
|
||||
obj->control_func = M_Control;
|
||||
obj->draw_func = Object_DrawSpriteItem;
|
||||
}
|
||||
|
||||
void DartEffect_Control(int16_t effect_num)
|
||||
static void M_Control(const int16_t effect_num)
|
||||
{
|
||||
EFFECT *effect = Effect_Get(effect_num);
|
||||
effect->counter++;
|
||||
|
@ -22,3 +22,5 @@ void DartEffect_Control(int16_t effect_num)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_DART_EFFECT, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void DartEffect_Setup(OBJECT *obj);
|
||||
void DartEffect_Control(int16_t effect_num);
|
|
@ -1,20 +1,20 @@
|
|||
#include "game/objects/effects/ember.h"
|
||||
|
||||
#include "game/effects.h"
|
||||
#include "game/lara/common.h"
|
||||
#include "game/room.h"
|
||||
#include "global/vars.h"
|
||||
|
||||
#include <libtrx/game/math.h>
|
||||
|
||||
#define EMBER_DAMAGE 10
|
||||
|
||||
void Ember_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t effect_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->control_func = Ember_Control;
|
||||
obj->control_func = M_Control;
|
||||
}
|
||||
|
||||
void Ember_Control(int16_t effect_num)
|
||||
static void M_Control(const int16_t effect_num)
|
||||
{
|
||||
EFFECT *effect = Effect_Get(effect_num);
|
||||
effect->pos.z += (effect->speed * Math_Cos(effect->rot.y)) >> W2V_SHIFT;
|
||||
|
@ -37,3 +37,5 @@ void Ember_Control(int16_t effect_num)
|
|||
Effect_NewRoom(effect_num, room_num);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_EMBER, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Ember_Setup(OBJECT *obj);
|
||||
void Ember_Control(int16_t effect_num);
|
|
@ -1,17 +1,18 @@
|
|||
#include "game/objects/effects/explosion.h"
|
||||
|
||||
#include "game/effects.h"
|
||||
#include "global/vars.h"
|
||||
|
||||
#include <libtrx/config.h>
|
||||
#include <libtrx/game/output.h>
|
||||
|
||||
void Explosion_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t effect_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->control_func = Explosion_Control;
|
||||
obj->control_func = M_Control;
|
||||
}
|
||||
|
||||
void Explosion_Control(int16_t effect_num)
|
||||
static void M_Control(const int16_t effect_num)
|
||||
{
|
||||
EFFECT *effect = Effect_Get(effect_num);
|
||||
const OBJECT *const obj = Object_Get(effect->object_id);
|
||||
|
@ -29,3 +30,5 @@ void Explosion_Control(int16_t effect_num)
|
|||
Output_AddDynamicLight(effect->pos, 12, 10);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_EXPLOSION_1, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Explosion_Setup(OBJECT *obj);
|
||||
void Explosion_Control(int16_t effect_num);
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/effects/flame.h"
|
||||
|
||||
#include "game/collide.h"
|
||||
#include "game/effects.h"
|
||||
#include "game/lara/common.h"
|
||||
|
@ -8,15 +6,18 @@
|
|||
#include "game/sound.h"
|
||||
#include "global/vars.h"
|
||||
|
||||
#define FLAME_ONFIRE_DAMAGE 5
|
||||
#define FLAME_TOONEAR_DAMAGE 3
|
||||
#define FLAME_ON_FIRE_DAMAGE 5
|
||||
#define FLAME_TOO_NEAR_DAMAGE 3
|
||||
|
||||
void Flame_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t effect_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->control_func = Flame_Control;
|
||||
obj->control_func = M_Control;
|
||||
}
|
||||
|
||||
void Flame_Control(int16_t effect_num)
|
||||
static void M_Control(const int16_t effect_num)
|
||||
{
|
||||
EFFECT *effect = Effect_Get(effect_num);
|
||||
|
||||
|
@ -57,7 +58,7 @@ void Flame_Control(int16_t effect_num)
|
|||
Effect_NewRoom(effect_num, g_LaraItem->room_num);
|
||||
}
|
||||
Sound_Effect(SFX_FIRE, &effect->pos, SPM_NORMAL);
|
||||
Lara_TakeDamage(FLAME_ONFIRE_DAMAGE, true);
|
||||
Lara_TakeDamage(FLAME_ON_FIRE_DAMAGE, true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -74,14 +75,14 @@ void Flame_Control(int16_t effect_num)
|
|||
int32_t z = g_LaraItem->pos.z - effect->pos.z;
|
||||
int32_t distance = SQUARE(x) + SQUARE(z);
|
||||
|
||||
Lara_TakeDamage(FLAME_TOONEAR_DAMAGE, true);
|
||||
Lara_TakeDamage(FLAME_TOO_NEAR_DAMAGE, true);
|
||||
|
||||
if (distance < SQUARE(300)) {
|
||||
effect->counter = 100;
|
||||
|
||||
effect_num = Effect_Create(g_LaraItem->room_num);
|
||||
if (effect_num != NO_EFFECT) {
|
||||
effect = Effect_Get(effect_num);
|
||||
const int16_t new_effect_num = Effect_Create(g_LaraItem->room_num);
|
||||
if (new_effect_num != NO_EFFECT) {
|
||||
effect = Effect_Get(new_effect_num);
|
||||
effect->frame_num = 0;
|
||||
effect->object_id = O_FLAME;
|
||||
effect->counter = -1;
|
||||
|
@ -89,3 +90,5 @@ void Flame_Control(int16_t effect_num)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_FLAME, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Flame_Setup(OBJECT *obj);
|
||||
void Flame_Control(int16_t effect_num);
|
|
@ -1,17 +1,19 @@
|
|||
#include "game/objects/effects/gunshot.h"
|
||||
|
||||
#include "game/effects.h"
|
||||
#include "game/objects/common.h"
|
||||
#include "game/random.h"
|
||||
|
||||
#include <libtrx/config.h>
|
||||
#include <libtrx/game/output.h>
|
||||
|
||||
void GunShot_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t effect_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->control_func = GunShot_Control;
|
||||
obj->control_func = M_Control;
|
||||
}
|
||||
|
||||
void GunShot_Control(int16_t effect_num)
|
||||
static void M_Control(const int16_t effect_num)
|
||||
{
|
||||
EFFECT *effect = Effect_Get(effect_num);
|
||||
effect->counter--;
|
||||
|
@ -24,3 +26,5 @@ void GunShot_Control(int16_t effect_num)
|
|||
Output_AddDynamicLight(effect->pos, 12, 11);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_GUN_FLASH, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void GunShot_Setup(OBJECT *obj);
|
||||
void GunShot_Control(int16_t effect_num);
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/effects/missile.h"
|
||||
|
||||
#include "game/effects.h"
|
||||
#include "game/items.h"
|
||||
#include "game/lara/common.h"
|
||||
|
@ -17,12 +15,15 @@
|
|||
#define ROCKET_RANGE_BASE WALL_L
|
||||
#define ROCKET_RANGE SQUARE(ROCKET_RANGE_BASE) // = 1048576
|
||||
|
||||
void Missile_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t effect_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->control_func = Missile_Control;
|
||||
obj->control_func = M_Control;
|
||||
}
|
||||
|
||||
void Missile_Control(int16_t effect_num)
|
||||
static void M_Control(const int16_t effect_num)
|
||||
{
|
||||
EFFECT *effect = Effect_Get(effect_num);
|
||||
|
||||
|
@ -94,3 +95,6 @@ void Missile_Control(int16_t effect_num)
|
|||
effect->speed = g_LaraItem->speed;
|
||||
effect->counter = 0;
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_MISSILE_2, M_Setup)
|
||||
REGISTER_OBJECT(O_MISSILE_3, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Missile_Setup(OBJECT *obj);
|
||||
void Missile_Control(int16_t effect_num);
|
|
@ -1,17 +1,18 @@
|
|||
#include "game/objects/effects/natla_gun.h"
|
||||
|
||||
#include "game/effects.h"
|
||||
#include "game/room.h"
|
||||
#include "global/vars.h"
|
||||
|
||||
#include <libtrx/game/math.h>
|
||||
|
||||
void NatlaGun_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t effect_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->control_func = NatlaGun_Control;
|
||||
obj->control_func = M_Control;
|
||||
}
|
||||
|
||||
void NatlaGun_Control(int16_t effect_num)
|
||||
static void M_Control(const int16_t effect_num)
|
||||
{
|
||||
EFFECT *effect = Effect_Get(effect_num);
|
||||
const OBJECT *const obj = Object_Get(effect->object_id);
|
||||
|
@ -38,9 +39,9 @@ void NatlaGun_Control(int16_t effect_num)
|
|||
return;
|
||||
}
|
||||
|
||||
effect_num = Effect_Create(room_num);
|
||||
if (effect_num != NO_EFFECT) {
|
||||
EFFECT *new_effect = Effect_Get(effect_num);
|
||||
const int16_t new_effect_num = Effect_Create(room_num);
|
||||
if (new_effect_num != NO_EFFECT) {
|
||||
EFFECT *new_effect = Effect_Get(new_effect_num);
|
||||
new_effect->pos.x = x;
|
||||
new_effect->pos.y = y;
|
||||
new_effect->pos.z = z;
|
||||
|
@ -51,3 +52,5 @@ void NatlaGun_Control(int16_t effect_num)
|
|||
new_effect->object_id = O_MISSILE_1;
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_MISSILE_1, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void NatlaGun_Setup(OBJECT *obj);
|
||||
void NatlaGun_Control(int16_t effect_num);
|
|
@ -1,7 +1,7 @@
|
|||
#include "game/objects/effects/pickup_aid.h"
|
||||
|
||||
#include "game/effects.h"
|
||||
#include "game/objects/common.h"
|
||||
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t effect_num);
|
||||
|
||||
static void M_Control(int16_t effect_num)
|
||||
|
@ -17,7 +17,9 @@ static void M_Control(int16_t effect_num)
|
|||
}
|
||||
}
|
||||
|
||||
void PickupAid_Setup(OBJECT *const obj)
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->control_func = M_Control;
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_PICKUP_AID, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void PickupAid_Setup(OBJECT *obj);
|
||||
void PickupAid_Spawn(const GAME_VECTOR *pos);
|
|
@ -1,13 +1,15 @@
|
|||
#include "game/objects/effects/ricochet.h"
|
||||
|
||||
#include "game/effects.h"
|
||||
#include "game/objects/common.h"
|
||||
|
||||
void Ricochet_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t effect_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->control_func = Ricochet_Control;
|
||||
obj->control_func = M_Control;
|
||||
}
|
||||
|
||||
void Ricochet_Control(int16_t effect_num)
|
||||
static void M_Control(const int16_t effect_num)
|
||||
{
|
||||
EFFECT *const effect = Effect_Get(effect_num);
|
||||
effect->counter--;
|
||||
|
@ -15,3 +17,5 @@ void Ricochet_Control(int16_t effect_num)
|
|||
Effect_Kill(effect_num);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_RICOCHET_1, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Ricochet_Setup(OBJECT *obj);
|
||||
void Ricochet_Control(int16_t effect_num);
|
|
@ -1,16 +1,17 @@
|
|||
#include "game/objects/effects/splash.h"
|
||||
|
||||
#include "game/effects.h"
|
||||
#include "game/objects/common.h"
|
||||
|
||||
#include <libtrx/game/math.h>
|
||||
|
||||
void Splash_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t effect_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->control_func = Splash_Control;
|
||||
obj->control_func = M_Control;
|
||||
}
|
||||
|
||||
void Splash_Control(int16_t effect_num)
|
||||
static void M_Control(const int16_t effect_num)
|
||||
{
|
||||
EFFECT *effect = Effect_Get(effect_num);
|
||||
const OBJECT *const obj = Object_Get(effect->object_id);
|
||||
|
@ -24,3 +25,5 @@ void Splash_Control(int16_t effect_num)
|
|||
effect->pos.x += (effect->speed * Math_Sin(effect->rot.y)) >> W2V_SHIFT;
|
||||
effect->pos.z += (effect->speed * Math_Cos(effect->rot.y)) >> W2V_SHIFT;
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_SPLASH_1, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Splash_Setup(OBJECT *obj);
|
||||
void Splash_Control(int16_t effect_num);
|
|
@ -7,12 +7,15 @@
|
|||
#include "global/const.h"
|
||||
#include "global/vars.h"
|
||||
|
||||
void Twinkle_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t effect_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->control_func = Twinkle_Control;
|
||||
obj->control_func = M_Control;
|
||||
}
|
||||
|
||||
void Twinkle_Control(int16_t effect_num)
|
||||
static void M_Control(const int16_t effect_num)
|
||||
{
|
||||
EFFECT *effect = Effect_Get(effect_num);
|
||||
effect->counter++;
|
||||
|
@ -25,7 +28,7 @@ void Twinkle_Control(int16_t effect_num)
|
|||
}
|
||||
}
|
||||
|
||||
void Twinkle_SparkleItem(ITEM *item, int mesh_mask)
|
||||
void Twinkle_SparkleItem(ITEM *const item, uint32_t mesh_mask)
|
||||
{
|
||||
SPHERE slist[34];
|
||||
GAME_VECTOR effect_pos;
|
||||
|
@ -45,3 +48,5 @@ void Twinkle_SparkleItem(ITEM *item, int mesh_mask)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_TWINKLE, M_Setup)
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
#include "game/items.h"
|
||||
|
||||
void Twinkle_Setup(OBJECT *obj);
|
||||
void Twinkle_Control(int16_t effect_num);
|
||||
void Twinkle_SparkleItem(ITEM *item, int mesh_mask);
|
||||
void Twinkle_SparkleItem(ITEM *item, uint32_t mesh_mask);
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/general/boat.h"
|
||||
|
||||
#include "game/items.h"
|
||||
|
||||
typedef enum {
|
||||
|
@ -9,15 +7,18 @@ typedef enum {
|
|||
BOAT_STATE_STOP = 3,
|
||||
} BOAT_STATE;
|
||||
|
||||
void Boat_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t effect_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->control_func = Boat_Control;
|
||||
obj->control_func = M_Control;
|
||||
obj->save_flags = 1;
|
||||
obj->save_anim = 1;
|
||||
obj->save_position = 1;
|
||||
}
|
||||
|
||||
void Boat_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -35,3 +36,5 @@ void Boat_Control(int16_t item_num)
|
|||
|
||||
Item_Animate(item);
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_BOAT, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Boat_Setup(OBJECT *obj);
|
||||
void Boat_Control(int16_t item_num);
|
|
@ -1,8 +1,6 @@
|
|||
#include "game/objects/general/bridge_common.h"
|
||||
|
||||
#include "game/items.h"
|
||||
#include "game/objects/general/cog.h"
|
||||
#include "game/objects/general/door.h"
|
||||
#include "game/room.h"
|
||||
#include "global/const.h"
|
||||
|
||||
|
|
|
@ -1,19 +1,13 @@
|
|||
#include "game/objects/general/bridge_flat.h"
|
||||
|
||||
#include "game/objects/general/bridge_common.h"
|
||||
|
||||
#include <libtrx/config.h>
|
||||
|
||||
static void M_Initialise(int16_t item_num);
|
||||
static int16_t M_GetFloorHeight(
|
||||
const ITEM *item, int32_t x, int32_t y, int32_t z, int16_t height);
|
||||
static int16_t M_GetCeilingHeight(
|
||||
const ITEM *item, int32_t x, int32_t y, int32_t z, int16_t height);
|
||||
|
||||
static void M_Initialise(const int16_t item_num)
|
||||
{
|
||||
Bridge_FixEmbeddedPosition(item_num);
|
||||
}
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Initialise(int16_t item_num);
|
||||
|
||||
static int16_t M_GetFloorHeight(
|
||||
const ITEM *item, const int32_t x, const int32_t y, const int32_t z,
|
||||
|
@ -55,9 +49,16 @@ static int16_t M_GetCeilingHeight(
|
|||
return item->pos.y + STEP_L;
|
||||
}
|
||||
|
||||
void BridgeFlat_Setup(OBJECT *const obj)
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->initialise_func = M_Initialise;
|
||||
obj->floor_height_func = M_GetFloorHeight;
|
||||
obj->ceiling_height_func = M_GetCeilingHeight;
|
||||
}
|
||||
|
||||
static void M_Initialise(const int16_t item_num)
|
||||
{
|
||||
Bridge_FixEmbeddedPosition(item_num);
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_BRIDGE_FLAT, M_Setup)
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void BridgeFlat_Setup(OBJECT *obj);
|
|
@ -1,19 +1,13 @@
|
|||
#include "game/objects/general/bridge_tilt1.h"
|
||||
|
||||
#include "game/objects/general/bridge_common.h"
|
||||
|
||||
#include <libtrx/config.h>
|
||||
|
||||
static void M_Initialise(int16_t item_num);
|
||||
static int16_t M_GetFloorHeight(
|
||||
const ITEM *item, int32_t x, int32_t y, int32_t z, int16_t height);
|
||||
static int16_t M_GetCeilingHeight(
|
||||
const ITEM *item, int32_t x, int32_t y, int32_t z, int16_t height);
|
||||
|
||||
static void M_Initialise(const int16_t item_num)
|
||||
{
|
||||
Bridge_FixEmbeddedPosition(item_num);
|
||||
}
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Initialise(int16_t item_num);
|
||||
|
||||
static int16_t M_GetFloorHeight(
|
||||
const ITEM *const item, const int32_t x, const int32_t y, const int32_t z,
|
||||
|
@ -59,9 +53,16 @@ static int16_t M_GetCeilingHeight(
|
|||
return offset_height + STEP_L;
|
||||
}
|
||||
|
||||
void BridgeTilt1_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->initialise_func = M_Initialise;
|
||||
obj->floor_height_func = M_GetFloorHeight;
|
||||
obj->ceiling_height_func = M_GetCeilingHeight;
|
||||
}
|
||||
|
||||
static void M_Initialise(const int16_t item_num)
|
||||
{
|
||||
Bridge_FixEmbeddedPosition(item_num);
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_BRIDGE_TILT_1, M_Setup)
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void BridgeTilt1_Setup(OBJECT *obj);
|
|
@ -1,18 +1,13 @@
|
|||
#include "game/objects/general/bridge_common.h"
|
||||
#include "game/objects/general/bridge_tilt1.h"
|
||||
|
||||
#include <libtrx/config.h>
|
||||
|
||||
static void M_Initialise(int16_t item_num);
|
||||
static int16_t M_GetFloorHeight(
|
||||
const ITEM *item, int32_t x, int32_t y, int32_t z, int16_t height);
|
||||
static int16_t M_GetCeilingHeight(
|
||||
const ITEM *item, int32_t x, int32_t y, int32_t z, int16_t height);
|
||||
|
||||
static void M_Initialise(const int16_t item_num)
|
||||
{
|
||||
Bridge_FixEmbeddedPosition(item_num);
|
||||
}
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Initialise(int16_t item_num);
|
||||
|
||||
int16_t M_GetFloorHeight(
|
||||
const ITEM *item, const int32_t x, const int32_t y, const int32_t z,
|
||||
|
@ -58,9 +53,16 @@ int16_t M_GetCeilingHeight(
|
|||
return offset_height + STEP_L;
|
||||
}
|
||||
|
||||
void BridgeTilt2_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->initialise_func = M_Initialise;
|
||||
obj->floor_height_func = M_GetFloorHeight;
|
||||
obj->ceiling_height_func = M_GetCeilingHeight;
|
||||
}
|
||||
|
||||
static void M_Initialise(const int16_t item_num)
|
||||
{
|
||||
Bridge_FixEmbeddedPosition(item_num);
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_BRIDGE_TILT_2, M_Setup)
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void BridgeTilt2_Setup(OBJECT *obj);
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/general/cabin.h"
|
||||
|
||||
#include "game/items.h"
|
||||
#include "game/objects/common.h"
|
||||
#include "game/room.h"
|
||||
|
@ -12,16 +10,19 @@ typedef enum {
|
|||
CABIN_STATE_FINISH = 4,
|
||||
} CABIN_STATE;
|
||||
|
||||
void Cabin_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t effect_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->control_func = Cabin_Control;
|
||||
obj->control_func = M_Control;
|
||||
obj->draw_func = Object_DrawUnclippedItem;
|
||||
obj->collision_func = Object_Collision;
|
||||
obj->save_anim = 1;
|
||||
obj->save_flags = 1;
|
||||
}
|
||||
|
||||
void Cabin_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
|
@ -48,3 +49,5 @@ void Cabin_Control(int16_t item_num)
|
|||
|
||||
Item_Animate(item);
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_PORTACABIN, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Cabin_Setup(OBJECT *obj);
|
||||
void Cabin_Control(int16_t item_num);
|
|
@ -1,8 +1,10 @@
|
|||
#include "game/objects/general/camera_target.h"
|
||||
|
||||
#include "game/objects/common.h"
|
||||
|
||||
void CameraTarget_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->draw_func = Object_DrawDummyItem;
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_CAMERA_TARGET, M_Setup)
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void CameraTarget_Setup(OBJECT *obj);
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/general/cog.h"
|
||||
|
||||
#include "game/items.h"
|
||||
#include "game/room.h"
|
||||
|
||||
|
@ -8,13 +6,16 @@ typedef enum {
|
|||
COG_STATE_ACTIVE = 1,
|
||||
} COG_STATE;
|
||||
|
||||
void Cog_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t effect_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->control_func = Cog_Control;
|
||||
obj->control_func = M_Control;
|
||||
obj->save_flags = 1;
|
||||
}
|
||||
|
||||
void Cog_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
if (Item_IsTriggerActive(item)) {
|
||||
|
@ -31,3 +32,7 @@ void Cog_Control(int16_t item_num)
|
|||
Item_NewRoom(item_num, room_num);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_COG_1, M_Setup)
|
||||
REGISTER_OBJECT(O_COG_2, M_Setup)
|
||||
REGISTER_OBJECT(O_COG_3, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Cog_Setup(OBJECT *obj);
|
||||
void Cog_Control(int16_t item_num);
|
|
@ -18,17 +18,20 @@ typedef struct {
|
|||
DOORPOS_DATA d2flip;
|
||||
} DOOR_DATA;
|
||||
|
||||
static bool M_LaraDoorCollision(const SECTOR *sector);
|
||||
static void M_Check(DOORPOS_DATA *d);
|
||||
static void M_Open(DOORPOS_DATA *d);
|
||||
static void M_Shut(DOORPOS_DATA *d);
|
||||
|
||||
static SECTOR *M_GetRoomRelSector(
|
||||
const ROOM *room, const ITEM *item, int32_t sector_dx, int32_t sector_dz);
|
||||
static void M_Initialise(
|
||||
static void M_InitialisePortal(
|
||||
const ROOM *room, const ITEM *item, int32_t sector_dx, int32_t sector_dz,
|
||||
DOORPOS_DATA *door_pos);
|
||||
|
||||
static bool M_LaraDoorCollision(const SECTOR *sector);
|
||||
static void M_Check(DOORPOS_DATA *d);
|
||||
static void M_Shut(DOORPOS_DATA *d);
|
||||
static void M_Open(DOORPOS_DATA *d);
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Initialise(int16_t item_num);
|
||||
static void M_Control(int16_t item_num);
|
||||
|
||||
static SECTOR *M_GetRoomRelSector(
|
||||
const ROOM *const room, const ITEM *item, const int32_t sector_dx,
|
||||
const int32_t sector_dz)
|
||||
|
@ -40,7 +43,7 @@ static SECTOR *M_GetRoomRelSector(
|
|||
return Room_GetUnitSector(room, sector.x, sector.z);
|
||||
}
|
||||
|
||||
static void M_Initialise(
|
||||
static void M_InitialisePortal(
|
||||
const ROOM *const room, const ITEM *const item, const int32_t sector_dx,
|
||||
const int32_t sector_dz, DOORPOS_DATA *const door_pos)
|
||||
{
|
||||
|
@ -125,17 +128,17 @@ static void M_Open(DOORPOS_DATA *const d)
|
|||
}
|
||||
}
|
||||
|
||||
void Door_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->initialise_func = Door_Initialise;
|
||||
obj->control_func = Door_Control;
|
||||
obj->initialise_func = M_Initialise;
|
||||
obj->control_func = M_Control;
|
||||
obj->draw_func = Object_DrawUnclippedItem;
|
||||
obj->collision_func = Door_Collision;
|
||||
obj->save_anim = 1;
|
||||
obj->save_flags = 1;
|
||||
}
|
||||
|
||||
void Door_Initialise(int16_t item_num)
|
||||
static void M_Initialise(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
DOOR_DATA *const door = GameBuf_Alloc(sizeof(DOOR_DATA), GBUF_ITEM_DATA);
|
||||
|
@ -155,13 +158,13 @@ void Door_Initialise(int16_t item_num)
|
|||
|
||||
int16_t room_num = item->room_num;
|
||||
const ROOM *room = Room_Get(room_num);
|
||||
M_Initialise(room, item, dx, dz, &door->d1);
|
||||
M_InitialisePortal(room, item, dx, dz, &door->d1);
|
||||
|
||||
if (room->flipped_room == -1) {
|
||||
door->d1flip.sector = nullptr;
|
||||
} else {
|
||||
room = Room_Get(room->flipped_room);
|
||||
M_Initialise(room, item, dx, dz, &door->d1flip);
|
||||
M_InitialisePortal(room, item, dx, dz, &door->d1flip);
|
||||
}
|
||||
|
||||
room_num = door->d1.sector->portal_room.wall;
|
||||
|
@ -175,12 +178,12 @@ void Door_Initialise(int16_t item_num)
|
|||
}
|
||||
|
||||
room = Room_Get(room_num);
|
||||
M_Initialise(room, item, 0, 0, &door->d2);
|
||||
M_InitialisePortal(room, item, 0, 0, &door->d2);
|
||||
if (room->flipped_room == -1) {
|
||||
door->d2flip.sector = nullptr;
|
||||
} else {
|
||||
room = Room_Get(room->flipped_room);
|
||||
M_Initialise(room, item, 0, 0, &door->d2flip);
|
||||
M_InitialisePortal(room, item, 0, 0, &door->d2flip);
|
||||
}
|
||||
|
||||
M_Shut(&door->d2);
|
||||
|
@ -191,7 +194,7 @@ void Door_Initialise(int16_t item_num)
|
|||
item->room_num = prev_room;
|
||||
}
|
||||
|
||||
void Door_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
DOOR_DATA *door = item->data;
|
||||
|
@ -226,14 +229,12 @@ void Door_Control(int16_t item_num)
|
|||
void Door_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
|
||||
if (!Lara_TestBoundsCollide(item, coll->radius)) {
|
||||
return;
|
||||
}
|
||||
if (!Collide_TestCollision(item, lara_item)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (coll->enable_baddie_push) {
|
||||
if (item->current_anim_state != item->goal_anim_state) {
|
||||
Lara_Push(item, coll, coll->enable_hit, true);
|
||||
|
@ -242,3 +243,12 @@ void Door_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_DOOR_TYPE_1, M_Setup)
|
||||
REGISTER_OBJECT(O_DOOR_TYPE_2, M_Setup)
|
||||
REGISTER_OBJECT(O_DOOR_TYPE_3, M_Setup)
|
||||
REGISTER_OBJECT(O_DOOR_TYPE_4, M_Setup)
|
||||
REGISTER_OBJECT(O_DOOR_TYPE_5, M_Setup)
|
||||
REGISTER_OBJECT(O_DOOR_TYPE_6, M_Setup)
|
||||
REGISTER_OBJECT(O_DOOR_TYPE_7, M_Setup)
|
||||
REGISTER_OBJECT(O_DOOR_TYPE_8, M_Setup)
|
||||
|
|
|
@ -7,7 +7,4 @@ typedef enum {
|
|||
DOOR_STATE_OPEN,
|
||||
} DOOR_STATE;
|
||||
|
||||
void Door_Setup(OBJECT *obj);
|
||||
void Door_Initialise(int16_t item_num);
|
||||
void Door_Control(int16_t item_num);
|
||||
void Door_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll);
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
#include "game/objects/general/drawbridge.h"
|
||||
|
||||
#include "game/items.h"
|
||||
#include "game/objects/general/door.h"
|
||||
#include "game/room.h"
|
||||
|
@ -102,7 +100,7 @@ static void M_Control(int16_t item_num)
|
|||
}
|
||||
}
|
||||
|
||||
void Drawbridge_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
if (!obj->loaded) {
|
||||
return;
|
||||
|
@ -114,3 +112,5 @@ void Drawbridge_Setup(OBJECT *obj)
|
|||
obj->save_flags = 1;
|
||||
obj->floor_height_func = M_GetFloorHeight;
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_DRAWBRIDGE, M_Setup)
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Drawbridge_Setup(OBJECT *obj);
|
|
@ -1,20 +1,20 @@
|
|||
#include "game/objects/general/earthquake.h"
|
||||
|
||||
#include "game/camera.h"
|
||||
#include "game/items.h"
|
||||
#include "game/objects/common.h"
|
||||
#include "game/random.h"
|
||||
#include "game/sound.h"
|
||||
#include "global/vars.h"
|
||||
|
||||
void Earthquake_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t effect_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->control_func = Earthquake_Control;
|
||||
obj->control_func = M_Control;
|
||||
obj->draw_func = Object_DrawDummyItem;
|
||||
obj->save_flags = 1;
|
||||
}
|
||||
|
||||
void Earthquake_Control(int16_t item_num)
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
if (Item_IsTriggerActive(item)) {
|
||||
|
@ -27,3 +27,5 @@ void Earthquake_Control(int16_t item_num)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_EARTHQUAKE, M_Setup)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "global/types.h"
|
||||
|
||||
void Earthquake_Setup(OBJECT *obj);
|
||||
void Earthquake_Control(int16_t item_num);
|
|
@ -24,6 +24,7 @@ static const OBJECT_BOUNDS m_KeyHoleBounds = {
|
|||
static void M_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll);
|
||||
static const OBJECT_BOUNDS *M_Bounds(void);
|
||||
static bool M_IsUsable(int16_t item_num);
|
||||
static void M_Setup(OBJECT *obj);
|
||||
|
||||
static void M_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll)
|
||||
{
|
||||
|
@ -69,7 +70,7 @@ static bool M_IsUsable(const int16_t item_num)
|
|||
return item->status == IS_INACTIVE;
|
||||
}
|
||||
|
||||
void KeyHole_Setup(OBJECT *obj)
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->collision_func = M_Collision;
|
||||
obj->save_flags = 1;
|
||||
|
@ -86,3 +87,8 @@ bool KeyHole_Trigger(int16_t item_num)
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_KEY_HOLE_1, M_Setup)
|
||||
REGISTER_OBJECT(O_KEY_HOLE_2, M_Setup)
|
||||
REGISTER_OBJECT(O_KEY_HOLE_3, M_Setup)
|
||||
REGISTER_OBJECT(O_KEY_HOLE_4, M_Setup)
|
||||
|
|
|
@ -4,5 +4,4 @@
|
|||
|
||||
extern XYZ_32 g_KeyHolePosition;
|
||||
|
||||
void KeyHole_Setup(OBJECT *obj);
|
||||
bool KeyHole_Trigger(int16_t item_num);
|
||||
|
|
|
@ -1,13 +1,40 @@
|
|||
#include "game/objects/general/moving_bar.h"
|
||||
|
||||
#include "game/items.h"
|
||||
#include "game/objects/common.h"
|
||||
#include "game/objects/general/cog.h"
|
||||
#include "game/room.h"
|
||||
|
||||
void MovingBar_Setup(OBJECT *obj)
|
||||
typedef enum {
|
||||
MOVING_BAR_STATE_INACTIVE = 0,
|
||||
MOVING_BAR_STATE_ACTIVE = 1,
|
||||
} MOVING_BAR_STATE;
|
||||
|
||||
static void M_Setup(OBJECT *obj);
|
||||
static void M_Control(int16_t effect_num);
|
||||
|
||||
static void M_Setup(OBJECT *const obj)
|
||||
{
|
||||
obj->control_func = Cog_Control;
|
||||
obj->control_func = M_Control;
|
||||
obj->collision_func = Object_Collision;
|
||||
obj->save_flags = 1;
|
||||
obj->save_anim = 1;
|
||||
obj->save_position = 1;
|
||||
}
|
||||
|
||||
static void M_Control(const int16_t item_num)
|
||||
{
|
||||
ITEM *const item = Item_Get(item_num);
|
||||
if (Item_IsTriggerActive(item)) {
|
||||
item->goal_anim_state = MOVING_BAR_STATE_ACTIVE;
|
||||
} else {
|
||||
item->goal_anim_state = MOVING_BAR_STATE_INACTIVE;
|
||||
}
|
||||
|
||||
Item_Animate(item);
|
||||
|
||||
int16_t room_num = item->room_num;
|
||||
Room_GetSector(item->pos.x, item->pos.y, item->pos.z, &room_num);
|
||||
if (room_num != item->room_num) {
|
||||
Item_NewRoom(item_num, room_num);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_OBJECT(O_MOVING_BAR, M_Setup)
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue