tr1/objects: use new constructor-based setup
Some checks are pending
Run code linters / Run code linters (push) Waiting to run
Publish a pre-release / Build TR1 (push) Has been skipped
Publish a pre-release / Build TR2 (push) Has been skipped
Publish a pre-release / Create a prerelease (push) Has been skipped

This commit is contained in:
Marcin Kurczewski 2025-02-17 23:50:10 +01:00
parent fe7ff97820
commit d96840f68d
162 changed files with 1003 additions and 1421 deletions

View file

@ -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_; \
}

View file

@ -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);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Ape_Setup(OBJECT *obj);
void Ape_Control(int16_t item_num);

View file

@ -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)

View file

@ -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);

View file

@ -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)

View file

@ -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);

View file

@ -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)

View file

@ -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);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Bear_Setup(OBJECT *obj);
void Bear_Control(int16_t item_num);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Centaur_Setup(OBJECT *obj);
void Centaur_Control(int16_t item_num);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Cowboy_Setup(OBJECT *obj);
void Cowboy_Control(int16_t item_num);

View file

@ -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)

View file

@ -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);

View file

@ -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)

View file

@ -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);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Larson_Setup(OBJECT *obj);
void Larson_Control(int16_t item_num);

View file

@ -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)

View file

@ -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);

View file

@ -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)

View file

@ -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);

View file

@ -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)

View file

@ -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);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Natla_Setup(OBJECT *obj);
void Natla_Control(int16_t item_num);

View file

@ -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)

View file

@ -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);

View file

@ -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)

View file

@ -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);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Raptor_Setup(OBJECT *obj);
void Raptor_Control(int16_t item_num);

View file

@ -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)

View file

@ -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);

View file

@ -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)

View file

@ -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);

View file

@ -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, &centaur->pos, SPM_NORMAL);
}
}
REGISTER_OBJECT(O_STATUE, M_Setup)

View file

@ -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);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Torso_Setup(OBJECT *obj);
void Torso_Control(int16_t item_num);

View file

@ -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)

View file

@ -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);

View file

@ -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)

View file

@ -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);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Blood_Setup(OBJECT *obj);
void Blood_Control(int16_t effect_num);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void BodyPart_Setup(OBJECT *obj);
void BodyPart_Control(int16_t effect_num);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Bubble_Setup(OBJECT *obj);
void Bubble_Control(int16_t effect_num);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void DartEffect_Setup(OBJECT *obj);
void DartEffect_Control(int16_t effect_num);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Ember_Setup(OBJECT *obj);
void Ember_Control(int16_t effect_num);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Explosion_Setup(OBJECT *obj);
void Explosion_Control(int16_t effect_num);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Flame_Setup(OBJECT *obj);
void Flame_Control(int16_t effect_num);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void GunShot_Setup(OBJECT *obj);
void GunShot_Control(int16_t effect_num);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Missile_Setup(OBJECT *obj);
void Missile_Control(int16_t effect_num);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void NatlaGun_Setup(OBJECT *obj);
void NatlaGun_Control(int16_t effect_num);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void PickupAid_Setup(OBJECT *obj);
void PickupAid_Spawn(const GAME_VECTOR *pos);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Ricochet_Setup(OBJECT *obj);
void Ricochet_Control(int16_t effect_num);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Splash_Setup(OBJECT *obj);
void Splash_Control(int16_t effect_num);

View file

@ -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)

View file

@ -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);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Boat_Setup(OBJECT *obj);
void Boat_Control(int16_t item_num);

View file

@ -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"

View file

@ -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)

View file

@ -1,5 +0,0 @@
#pragma once
#include "global/types.h"
void BridgeFlat_Setup(OBJECT *obj);

View file

@ -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)

View file

@ -1,5 +0,0 @@
#pragma once
#include "global/types.h"
void BridgeTilt1_Setup(OBJECT *obj);

View file

@ -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)

View file

@ -1,5 +0,0 @@
#pragma once
#include "global/types.h"
void BridgeTilt2_Setup(OBJECT *obj);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Cabin_Setup(OBJECT *obj);
void Cabin_Control(int16_t item_num);

View file

@ -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)

View file

@ -1,5 +0,0 @@
#pragma once
#include "global/types.h"
void CameraTarget_Setup(OBJECT *obj);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Cog_Setup(OBJECT *obj);
void Cog_Control(int16_t item_num);

View file

@ -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)

View file

@ -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);

View file

@ -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)

View file

@ -1,5 +0,0 @@
#pragma once
#include "global/types.h"
void Drawbridge_Setup(OBJECT *obj);

View file

@ -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)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Earthquake_Setup(OBJECT *obj);
void Earthquake_Control(int16_t item_num);

View file

@ -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)

View file

@ -4,5 +4,4 @@
extern XYZ_32 g_KeyHolePosition;
void KeyHole_Setup(OBJECT *obj);
bool KeyHole_Trigger(int16_t item_num);

View file

@ -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