tr2/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-19 19:20:16 +01:00
parent f7920074db
commit 9ec44fd85c
229 changed files with 1757 additions and 2461 deletions

View file

@ -2,6 +2,7 @@
#include "game/camera.h" #include "game/camera.h"
#include "game/collide.h" #include "game/collide.h"
#include "game/cutscene.h"
#include "game/game_flow.h" #include "game/game_flow.h"
#include "game/items.h" #include "game/items.h"
#include "game/lara/control.h" #include "game/lara/control.h"
@ -32,42 +33,14 @@ typedef enum {
LA_VEHICLE_HIT_BACK = 14, LA_VEHICLE_HIT_BACK = 14,
} LARA_ANIM_VEHICLE; } LARA_ANIM_VEHICLE;
static CAMERA_INFO m_LocalCamera = {};
void CutscenePlayer_Control(const int16_t item_num)
{
ITEM *const item = Item_Get(item_num);
item->rot.y = m_LocalCamera.target_angle;
item->pos.x = m_LocalCamera.pos.pos.x;
item->pos.y = m_LocalCamera.pos.pos.y;
item->pos.z = m_LocalCamera.pos.pos.z;
XYZ_32 pos = {};
Collide_GetJointAbsPosition(item, &pos, 0);
const int16_t room_num = Room_FindByPos(pos.x, pos.y, pos.z);
if (room_num != NO_ROOM_NEG && item->room_num != room_num) {
Item_NewRoom(item_num, room_num);
}
if (item->dynamic_light && item->status != IS_INVISIBLE) {
pos.x = 0;
pos.y = 0;
pos.z = 0;
Collide_GetJointAbsPosition(item, &pos, 0);
Output_AddDynamicLight(pos, 12, 11);
}
Item_Animate(item);
}
void Lara_Control_Cutscene(const int16_t item_num) void Lara_Control_Cutscene(const int16_t item_num)
{ {
ITEM *const item = Item_Get(item_num); ITEM *const item = Item_Get(item_num);
item->rot.y = m_LocalCamera.target_angle; CAMERA_INFO *const camera = Cutscene_GetCamera();
item->pos.x = m_LocalCamera.pos.pos.x; item->rot.y = camera->target_angle;
item->pos.y = m_LocalCamera.pos.pos.y; item->pos.x = camera->pos.pos.x;
item->pos.z = m_LocalCamera.pos.pos.z; item->pos.y = camera->pos.pos.y;
item->pos.z = camera->pos.pos.z;
XYZ_32 pos = {}; XYZ_32 pos = {};
Collide_GetJointAbsPosition(item, &pos, 0); Collide_GetJointAbsPosition(item, &pos, 0);
@ -88,11 +61,12 @@ void CutscenePlayer1_Initialise(const int16_t item_num)
Item_AddActive(item_num); Item_AddActive(item_num);
ITEM *const item = Item_Get(item_num); ITEM *const item = Item_Get(item_num);
m_LocalCamera.pos.pos.x = item->pos.x; CAMERA_INFO *const camera = Cutscene_GetCamera();
m_LocalCamera.pos.pos.y = item->pos.y; camera->pos.pos.x = item->pos.x;
m_LocalCamera.pos.pos.z = item->pos.z; camera->pos.pos.y = item->pos.y;
m_LocalCamera.target_angle = Camera_GetCineData()->position.target_angle; camera->pos.pos.z = item->pos.z;
m_LocalCamera.pos.room_num = item->room_num; camera->target_angle = Camera_GetCineData()->position.target_angle;
camera->pos.room_num = item->room_num;
item->rot.y = 0; item->rot.y = 0;
item->dynamic_light = 0; item->dynamic_light = 0;
@ -104,14 +78,6 @@ void CutscenePlayer1_Initialise(const int16_t item_num)
g_Lara.hit_direction = -1; g_Lara.hit_direction = -1;
} }
void CutscenePlayerGen_Initialise(const int16_t item_num)
{
Item_AddActive(item_num);
ITEM *const item = Item_Get(item_num);
item->rot.y = 0;
item->dynamic_light = 0;
}
int32_t Misc_Move3DPosTo3DPos( int32_t Misc_Move3DPosTo3DPos(
PHD_3DPOS *const src_pos, const PHD_3DPOS *const dst_pos, PHD_3DPOS *const src_pos, const PHD_3DPOS *const dst_pos,
const int32_t velocity, const int16_t ang_add) const int32_t velocity, const int16_t ang_add)

View file

@ -10,10 +10,8 @@
// within the decomp/ directory which are scheduled for extensive refactoring. // within the decomp/ directory which are scheduled for extensive refactoring.
void Game_SetCutsceneTrack(int32_t track); void Game_SetCutsceneTrack(int32_t track);
void CutscenePlayer_Control(int16_t item_num);
void Lara_Control_Cutscene(int16_t item_num); void Lara_Control_Cutscene(int16_t item_num);
void CutscenePlayer1_Initialise(int16_t item_num); void CutscenePlayer1_Initialise(int16_t item_num);
void CutscenePlayerGen_Initialise(int16_t item_num);
int32_t Misc_Move3DPosTo3DPos( int32_t Misc_Move3DPosTo3DPos(
PHD_3DPOS *src_pos, const PHD_3DPOS *dst_pos, int32_t velocity, PHD_3DPOS *src_pos, const PHD_3DPOS *dst_pos, int32_t velocity,
int16_t ang_add); int16_t ang_add);

View file

@ -12,9 +12,6 @@
#include "game/lot.h" #include "game/lot.h"
#include "game/objects/creatures/dragon.h" #include "game/objects/creatures/dragon.h"
#include "game/objects/general/lift.h" #include "game/objects/general/lift.h"
#include "game/objects/general/movable_block.h"
#include "game/objects/general/pickup.h"
#include "game/objects/general/puzzle_hole.h"
#include "game/objects/vars.h" #include "game/objects/vars.h"
#include "game/requester.h" #include "game/requester.h"
#include "game/room.h" #include "game/room.h"

View file

@ -19,6 +19,8 @@
#include <libtrx/debug.h> #include <libtrx/debug.h>
#include <libtrx/utils.h> #include <libtrx/utils.h>
static CAMERA_INFO m_LocalCamera = {};
static void M_FixAudioDrift(void); static void M_FixAudioDrift(void);
static void M_FixAudioDrift(void) static void M_FixAudioDrift(void)
@ -98,3 +100,8 @@ void Cutscene_Draw(void)
Room_DrawAllRooms(g_Camera.pos.room_num); Room_DrawAllRooms(g_Camera.pos.room_num);
Output_DrawPolyList(); Output_DrawPolyList();
} }
CAMERA_INFO *Cutscene_GetCamera(void)
{
return &m_LocalCamera;
}

View file

@ -1,3 +1,7 @@
#pragma once #pragma once
#include "global/types.h"
#include <libtrx/game/cutscene.h> #include <libtrx/game/cutscene.h>
CAMERA_INFO *Cutscene_GetCamera(void);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/bandit_1.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/objects/common.h" #include "game/objects/common.h"
#include "game/objects/creatures/bandit_common.h" #include "game/objects/creatures/bandit_common.h"
@ -49,14 +47,16 @@ static const BITE m_Bandit1Gun = {
.mesh_num = 17, .mesh_num = 17,
}; };
void Bandit1_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t item_num);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_BANDIT_1);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = Bandit1_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = BANDIT_1_HITPOINTS; obj->hit_points = BANDIT_1_HITPOINTS;
@ -74,7 +74,7 @@ void Bandit1_Setup(void)
Object_GetBone(obj, 8)->rot_y = true; Object_GetBone(obj, 8)->rot_y = true;
} }
void Bandit1_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -209,3 +209,5 @@ void Bandit1_Control(const int16_t item_num)
Creature_Neck(item, neck); Creature_Neck(item, neck);
Creature_Animate(item_num, angle, 0); Creature_Animate(item_num, angle, 0);
} }
REGISTER_OBJECT(O_BANDIT_1, M_Setup)

View file

@ -1,6 +0,0 @@
#pragma once
#include <stdint.h>
void Bandit1_Setup(void);
void Bandit1_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/bandit_2.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/objects/common.h" #include "game/objects/common.h"
#include "game/objects/creatures/bandit_common.h" #include "game/objects/creatures/bandit_common.h"
@ -49,14 +47,17 @@ static const BITE m_Bandit2Gun = {
.mesh_num = 17, .mesh_num = 17,
}; };
void Bandit2_Setup(void) static void M_Setup2A(OBJECT *obj);
static void M_Setup2B(OBJECT *obj);
static void M_Control(int16_t item_num);
static void M_Setup2A(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_BANDIT_2);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = Bandit2_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = BANDIT_2_HITPOINTS; obj->hit_points = BANDIT_2_HITPOINTS;
@ -74,9 +75,8 @@ void Bandit2_Setup(void)
Object_GetBone(obj, 8)->rot_y = true; Object_GetBone(obj, 8)->rot_y = true;
} }
void Bandit2B_Setup(void) static void M_Setup2B(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_BANDIT_2B);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
@ -86,7 +86,7 @@ void Bandit2B_Setup(void)
obj->anim_idx = ref_obj->anim_idx; obj->anim_idx = ref_obj->anim_idx;
obj->frame_base = ref_obj->frame_base; obj->frame_base = ref_obj->frame_base;
obj->control_func = Bandit2_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = BANDIT_2_HITPOINTS; obj->hit_points = BANDIT_2_HITPOINTS;
@ -104,7 +104,7 @@ void Bandit2B_Setup(void)
Object_GetBone(obj, 8)->rot_y = true; Object_GetBone(obj, 8)->rot_y = true;
} }
void Bandit2_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -278,3 +278,6 @@ void Bandit2_Control(const int16_t item_num)
Creature_Neck(item, neck); Creature_Neck(item, neck);
Creature_Animate(item_num, angle, 0); Creature_Animate(item_num, angle, 0);
} }
REGISTER_OBJECT(O_BANDIT_2, M_Setup2A)
REGISTER_OBJECT(O_BANDIT_2B, M_Setup2B)

View file

@ -1,7 +0,0 @@
#pragma once
#include <stdint.h>
void Bandit2_Setup(void);
void Bandit2B_Setup(void);
void Bandit2_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/barracuda.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/lara/control.h" #include "game/lara/control.h"
#include "game/objects/common.h" #include "game/objects/common.h"
@ -40,14 +38,16 @@ static const BITE m_BarracudaBite = {
.mesh_num = 7, .mesh_num = 7,
}; };
void Barracuda_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t item_num);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_BARRACUDA);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = Barracuda_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = BARRACUDA_HITPOINTS; obj->hit_points = BARRACUDA_HITPOINTS;
@ -64,7 +64,7 @@ void Barracuda_Setup(void)
Object_GetBone(obj, 6)->rot_y = true; Object_GetBone(obj, 6)->rot_y = true;
} }
void Barracuda_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -149,3 +149,5 @@ void Barracuda_Control(const int16_t item_num)
Creature_Float(item_num); Creature_Float(item_num);
} }
} }
REGISTER_OBJECT(O_BARRACUDA, M_Setup)

View file

@ -1,6 +0,0 @@
#pragma once
#include <stdint.h>
void Barracuda_Setup(void);
void Barracuda_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/bartoli.h"
#include "game/camera.h" #include "game/camera.h"
#include "game/items.h" #include "game/items.h"
#include "game/lot.h" #include "game/lot.h"
@ -15,6 +13,9 @@
static void M_CreateBoom(GAME_OBJECT_ID obj_id, const ITEM *origin_item); static void M_CreateBoom(GAME_OBJECT_ID obj_id, const ITEM *origin_item);
static void M_ConvertBartoliToDragon(const int16_t item_num); static void M_ConvertBartoliToDragon(const int16_t item_num);
static bool M_CheckLaraProximity(const ITEM *origin_item); static bool M_CheckLaraProximity(const ITEM *origin_item);
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_CreateBoom( static void M_CreateBoom(
const GAME_OBJECT_ID obj_id, const ITEM *const origin_item) const GAME_OBJECT_ID obj_id, const ITEM *const origin_item)
@ -63,21 +64,20 @@ static bool M_CheckLaraProximity(const ITEM *const origin_item)
return dx < BARTOLI_RANGE && dz < BARTOLI_RANGE; return dx < BARTOLI_RANGE && dz < BARTOLI_RANGE;
} }
void Bartoli_Setup(void) static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_BARTOLI);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->initialise_func = Bartoli_Initialise; obj->initialise_func = M_Initialise;
obj->control_func = Bartoli_Control; obj->control_func = M_Control;
obj->save_flags = 1; obj->save_flags = 1;
obj->save_anim = 1; obj->save_anim = 1;
} }
void Bartoli_Initialise(const int16_t item_num) static void M_Initialise(const int16_t item_num)
{ {
ITEM *const item = Item_Get(item_num); ITEM *const item = Item_Get(item_num);
item->pos.x -= 2 * STEP_L; item->pos.x -= 2 * STEP_L;
@ -115,7 +115,7 @@ void Bartoli_Initialise(const int16_t item_num)
item->data = (void *)(intptr_t)item_dragon_back_num; item->data = (void *)(intptr_t)item_dragon_back_num;
} }
void Bartoli_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
ITEM *const item = Item_Get(item_num); ITEM *const item = Item_Get(item_num);
@ -144,3 +144,5 @@ void Bartoli_Control(const int16_t item_num)
M_ConvertBartoliToDragon(item_num); M_ConvertBartoliToDragon(item_num);
} }
} }
REGISTER_OBJECT(O_BARTOLI, M_Setup)

View file

@ -1,8 +0,0 @@
#pragma once
#include <stdint.h>
void Bartoli_Setup(void);
void Bartoli_Initialise(int16_t item_num);
void Bartoli_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/big_eel.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/items.h" #include "game/items.h"
#include "game/lara/control.h" #include "game/lara/control.h"
@ -41,14 +39,16 @@ static const BITE m_BigEelBite = {
.mesh_num = 7, .mesh_num = 7,
}; };
void BigEel_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t item_num);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_BIG_EEL);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = BigEel_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = BIG_EEL_HITPOINTS; obj->hit_points = BIG_EEL_HITPOINTS;
@ -58,7 +58,7 @@ void BigEel_Setup(void)
obj->save_anim = 1; obj->save_anim = 1;
} }
void BigEel_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
ITEM *const item = Item_Get(item_num); ITEM *const item = Item_Get(item_num);
const ITEM *const lara_item = Lara_GetItem(); const ITEM *const lara_item = Lara_GetItem();
@ -111,3 +111,5 @@ void BigEel_Control(const int16_t item_num)
Item_Animate(item); Item_Animate(item);
} }
REGISTER_OBJECT(O_BIG_EEL, M_Setup)

View file

@ -1,6 +0,0 @@
#pragma once
#include <stdint.h>
void BigEel_Setup(void);
void BigEel_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/big_spider.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/lara/control.h" #include "game/lara/control.h"
#include "game/objects/common.h" #include "game/objects/common.h"
@ -35,14 +33,16 @@ static const BITE m_SpiderBite = {
.mesh_num = 1, .mesh_num = 1,
}; };
void BigSpider_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t item_num);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_BIG_SPIDER);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = BigSpider_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = BIG_SPIDER_HITPOINTS; obj->hit_points = BIG_SPIDER_HITPOINTS;
@ -56,7 +56,7 @@ void BigSpider_Setup(void)
obj->save_anim = 1; obj->save_anim = 1;
} }
void BigSpider_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -131,3 +131,5 @@ void BigSpider_Control(const int16_t item_num)
Creature_Animate(item_num, angle, tilt); Creature_Animate(item_num, angle, tilt);
} }
REGISTER_OBJECT(O_BIG_SPIDER, M_Setup)

View file

@ -1,6 +0,0 @@
#pragma once
#include <stdint.h>
void BigSpider_Setup(void);
void BigSpider_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/bird.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/spawn.h" #include "game/spawn.h"
#include "global/const.h" #include "global/const.h"
@ -39,15 +37,18 @@ static const BITE m_CrowBite = {
.mesh_num = 14, .mesh_num = 14,
}; };
void Bird_SetupEagle(void) 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_SetupEagle(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_EAGLE);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->initialise_func = Bird_Initialise; obj->initialise_func = M_Initialise;
obj->control_func = Bird_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = EAGLE_HITPOINTS; obj->hit_points = EAGLE_HITPOINTS;
@ -62,15 +63,14 @@ void Bird_SetupEagle(void)
obj->save_anim = 1; obj->save_anim = 1;
} }
void Bird_SetupCrow(void) static void M_SetupCrow(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_CROW);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->initialise_func = Bird_Initialise; obj->initialise_func = M_Initialise;
obj->control_func = Bird_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = CROW_HITPOINTS; obj->hit_points = CROW_HITPOINTS;
@ -85,7 +85,7 @@ void Bird_SetupCrow(void)
obj->save_anim = 1; obj->save_anim = 1;
} }
void Bird_Initialise(const int16_t item_num) static void M_Initialise(const int16_t item_num)
{ {
Creature_Initialise(item_num); Creature_Initialise(item_num);
ITEM *const item = Item_Get(item_num); ITEM *const item = Item_Get(item_num);
@ -100,7 +100,7 @@ void Bird_Initialise(const int16_t item_num)
} }
} }
void Bird_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -198,3 +198,6 @@ void Bird_Control(const int16_t item_num)
Creature_Animate(item_num, angle, 0); Creature_Animate(item_num, angle, 0);
} }
REGISTER_OBJECT(O_EAGLE, M_SetupEagle)
REGISTER_OBJECT(O_CROW, M_SetupCrow)

View file

@ -1,9 +0,0 @@
#pragma once
#include <stdint.h>
void Bird_SetupEagle(void);
void Bird_SetupCrow(void);
void Bird_Initialise(int16_t item_num);
void Bird_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/bird_guardian.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/lara/control.h" #include "game/lara/control.h"
#include "game/objects/common.h" #include "game/objects/common.h"
@ -53,14 +51,16 @@ static const BITE m_BirdGuardianBiteR = {
.mesh_num = 22, .mesh_num = 22,
}; };
void BirdGuardian_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t item_num);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_BIRD_GUARDIAN);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = BirdGuardian_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = BIRD_GUARDIAN_HITPOINTS; obj->hit_points = BIRD_GUARDIAN_HITPOINTS;
@ -75,7 +75,7 @@ void BirdGuardian_Setup(void)
Object_GetBone(obj, 14)->rot_y = true; Object_GetBone(obj, 14)->rot_y = true;
} }
void BirdGuardian_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -201,3 +201,5 @@ void BirdGuardian_Control(const int16_t item_num)
Creature_Head(item, head); Creature_Head(item, head);
Creature_Animate(item_num, angle, 0); Creature_Animate(item_num, angle, 0);
} }
REGISTER_OBJECT(O_BIRD_GUARDIAN, M_Setup)

View file

@ -1,6 +0,0 @@
#pragma once
#include <stdint.h>
void BirdGuardian_Setup(void);
void BirdGuardian_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/cultist_1.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/objects/creatures/cultist_common.h" #include "game/objects/creatures/cultist_common.h"
#include "game/random.h" #include "game/random.h"
@ -47,15 +45,20 @@ static const BITE m_Cultist1Gun = {
.mesh_num = 10, .mesh_num = 10,
}; };
void Cultist1_Setup(void) static void M_Setup1(OBJECT *obj);
static void M_Setup1A(OBJECT *obj);
static void M_Setup1B(OBJECT *obj);
static void M_Initialise(int16_t item_num);
static void M_Control(int16_t item_num);
static void M_Setup1(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_CULT_1);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->initialise_func = Cultist1_Initialise; obj->initialise_func = M_Initialise;
obj->control_func = Cultist1_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = CULTIST_1_HITPOINTS; obj->hit_points = CULTIST_1_HITPOINTS;
@ -72,9 +75,8 @@ void Cultist1_Setup(void)
Object_GetBone(obj, 0)->rot_y = true; Object_GetBone(obj, 0)->rot_y = true;
} }
void Cultist1A_Setup(void) static void M_Setup1A(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_CULT_1A);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
@ -84,8 +86,8 @@ void Cultist1A_Setup(void)
obj->frame_base = cult_1_obj->frame_base; obj->frame_base = cult_1_obj->frame_base;
obj->anim_idx = cult_1_obj->anim_idx; obj->anim_idx = cult_1_obj->anim_idx;
obj->initialise_func = Cultist1_Initialise; obj->initialise_func = M_Initialise;
obj->control_func = Cultist1_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = CULTIST_1_HITPOINTS; obj->hit_points = CULTIST_1_HITPOINTS;
@ -102,9 +104,8 @@ void Cultist1A_Setup(void)
Object_GetBone(obj, 0)->rot_y = true; Object_GetBone(obj, 0)->rot_y = true;
} }
void Cultist1B_Setup(void) static void M_Setup1B(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_CULT_1B);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
@ -114,8 +115,8 @@ void Cultist1B_Setup(void)
obj->frame_base = cult_1_obj->frame_base; obj->frame_base = cult_1_obj->frame_base;
obj->anim_idx = cult_1_obj->anim_idx; obj->anim_idx = cult_1_obj->anim_idx;
obj->initialise_func = Cultist1_Initialise; obj->initialise_func = M_Initialise;
obj->control_func = Cultist1_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = CULTIST_1_HITPOINTS; obj->hit_points = CULTIST_1_HITPOINTS;
@ -132,7 +133,7 @@ void Cultist1B_Setup(void)
Object_GetBone(obj, 0)->rot_y = true; Object_GetBone(obj, 0)->rot_y = true;
} }
void Cultist1_Initialise(const int16_t item_num) static void M_Initialise(const int16_t item_num)
{ {
ITEM *const item = Item_Get(item_num); ITEM *const item = Item_Get(item_num);
if (Random_GetControl() < 0x4000) { if (Random_GetControl() < 0x4000) {
@ -143,7 +144,7 @@ void Cultist1_Initialise(const int16_t item_num)
} }
} }
void Cultist1_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -309,3 +310,7 @@ void Cultist1_Control(const int16_t item_num)
Creature_Head(item, head); Creature_Head(item, head);
Creature_Animate(item_num, angle, 0); Creature_Animate(item_num, angle, 0);
} }
REGISTER_OBJECT(O_CULT_1, M_Setup1)
REGISTER_OBJECT(O_CULT_1A, M_Setup1A)
REGISTER_OBJECT(O_CULT_1B, M_Setup1B)

View file

@ -1,10 +0,0 @@
#pragma once
#include <stdint.h>
void Cultist1_Setup(void);
void Cultist1A_Setup(void);
void Cultist1B_Setup(void);
void Cultist1_Initialise(int16_t item_num);
void Cultist1_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/cultist_2.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/objects/creatures/cultist_common.h" #include "game/objects/creatures/cultist_common.h"
#include "game/random.h" #include "game/random.h"
@ -47,14 +45,16 @@ static const BITE m_Cultist2RightHand = {
.mesh_num = 8, .mesh_num = 8,
}; };
void Cultist2_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t item_num);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_CULT_2);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = Cultist2_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = CULTIST_2_HITPOINTS; obj->hit_points = CULTIST_2_HITPOINTS;
@ -72,7 +72,7 @@ void Cultist2_Setup(void)
Object_GetBone(obj, 8)->rot_y = true; Object_GetBone(obj, 8)->rot_y = true;
} }
void Cultist2_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -244,3 +244,5 @@ void Cultist2_Control(const int16_t item_num)
Creature_Head(item, head); Creature_Head(item, head);
Creature_Animate(item_num, angle, 0); Creature_Animate(item_num, angle, 0);
} }
REGISTER_OBJECT(O_CULT_2, M_Setup)

View file

@ -1,6 +0,0 @@
#pragma once
#include <stdint.h>
void Cultist2_Setup(void);
void Cultist2_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/cultist_3.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/objects/creatures/cultist_common.h" #include "game/objects/creatures/cultist_common.h"
#include "game/spawn.h" #include "game/spawn.h"
@ -50,15 +48,18 @@ static const BITE m_Cultist3RightGun = {
.mesh_num = 10, .mesh_num = 10,
}; };
void Cultist3_Setup(void) 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)
{ {
OBJECT *const obj = Object_Get(O_CULT_3);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->initialise_func = Cultist3_Initialise; obj->initialise_func = M_Initialise;
obj->control_func = Cultist3_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = CULTIST_3_HITPOINTS; obj->hit_points = CULTIST_3_HITPOINTS;
@ -73,7 +74,7 @@ void Cultist3_Setup(void)
obj->save_anim = 1; obj->save_anim = 1;
} }
void Cultist3_Initialise(const int16_t item_num) static void M_Initialise(const int16_t item_num)
{ {
Creature_Initialise(item_num); Creature_Initialise(item_num);
ITEM *const item = Item_Get(item_num); ITEM *const item = Item_Get(item_num);
@ -82,7 +83,7 @@ void Cultist3_Initialise(const int16_t item_num)
item->current_anim_state = CULTIST_3_STATE_WAIT; item->current_anim_state = CULTIST_3_STATE_WAIT;
} }
void Cultist3_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -294,3 +295,5 @@ void Cultist3_Control(const int16_t item_num)
Creature_Animate(item_num, angle, 0); Creature_Animate(item_num, angle, 0);
} }
REGISTER_OBJECT(O_CULT_3, M_Setup)

View file

@ -1,7 +0,0 @@
#pragma once
#include <stdint.h>
void Cultist3_Setup(void);
void Cultist3_Initialise(int16_t item_num);
void Cultist3_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/diver.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/effects.h" #include "game/effects.h"
#include "game/los.h" #include "game/los.h"
@ -38,7 +36,15 @@ static const BITE m_DiverBite = {
.mesh_num = 18, .mesh_num = 18,
}; };
int32_t Diver_GetWaterSurface( static int32_t M_GetWaterSurface(
int32_t x, int32_t y, int32_t z, int16_t room_num);
static int16_t M_SpawnHarpoon(
int32_t x, int32_t y, int32_t z, int16_t speed, int16_t y_rot,
int16_t room_num);
static void M_Setup(OBJECT *obj);
static void M_Control(int16_t item_num);
static int32_t M_GetWaterSurface(
const int32_t x, const int32_t y, const int32_t z, const int16_t room_num) const int32_t x, const int32_t y, const int32_t z, const int16_t room_num)
{ {
const ROOM *room = Room_Get(room_num); const ROOM *room = Room_Get(room_num);
@ -64,14 +70,37 @@ int32_t Diver_GetWaterSurface(
return NO_HEIGHT; return NO_HEIGHT;
} }
void Diver_Setup(void) static int16_t M_SpawnHarpoon(
const int32_t x, const int32_t y, const int32_t z, const int16_t speed,
const int16_t y_rot, const int16_t room_num)
{
const int16_t effect_num = Effect_Create(room_num);
if (effect_num != NO_EFFECT) {
EFFECT *const effect = Effect_Get(effect_num);
effect->pos.x = x;
effect->pos.y = y;
effect->pos.z = z;
effect->room_num = room_num;
effect->rot.x = 0;
effect->rot.y = y_rot;
effect->rot.z = 0;
effect->speed = DIVER_HARPOON_SPEED;
effect->fall_speed = 0;
effect->frame_num = 0;
effect->object_id = O_MISSILE_HARPOON;
effect->shade = 3584;
Missile_ShootAtLara(effect);
}
return effect_num;
}
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_DIVER);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = Diver_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = DIVER_HITPOINTS; obj->hit_points = DIVER_HITPOINTS;
@ -89,7 +118,7 @@ void Diver_Setup(void)
Object_GetBone(obj, 14)->rot_z = true; Object_GetBone(obj, 14)->rot_z = true;
} }
void Diver_Control(int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -157,8 +186,7 @@ void Diver_Control(int16_t item_num)
int16_t neck = 0; int16_t neck = 0;
int16_t angle = Creature_Turn(item, creature->maximum_turn); int16_t angle = Creature_Turn(item, creature->maximum_turn);
int32_t water_level = int32_t water_level =
Diver_GetWaterSurface( M_GetWaterSurface(item->pos.x, item->pos.y, item->pos.z, item->room_num)
item->pos.x, item->pos.y, item->pos.z, item->room_num)
+ 512; + 512;
switch (item->current_anim_state) { switch (item->current_anim_state) {
@ -192,7 +220,7 @@ void Diver_Control(int16_t item_num)
neck = -info.angle; neck = -info.angle;
} }
if (!creature->flags) { if (!creature->flags) {
Creature_Effect(item, &m_DiverBite, Diver_Harpoon); Creature_Effect(item, &m_DiverBite, M_SpawnHarpoon);
creature->flags = 1; creature->flags = 1;
} }
break; break;
@ -202,7 +230,7 @@ void Diver_Control(int16_t item_num)
head = info.angle; head = info.angle;
} }
if (!creature->flags) { if (!creature->flags) {
Creature_Effect(item, &m_DiverBite, Diver_Harpoon); Creature_Effect(item, &m_DiverBite, M_SpawnHarpoon);
creature->flags = 1; creature->flags = 1;
} }
break; break;
@ -256,26 +284,4 @@ void Diver_Control(int16_t item_num)
} }
} }
int16_t Diver_Harpoon( REGISTER_OBJECT(O_DIVER, M_Setup)
const int32_t x, const int32_t y, const int32_t z, const int16_t speed,
const int16_t y_rot, const int16_t room_num)
{
const int16_t effect_num = Effect_Create(room_num);
if (effect_num != NO_EFFECT) {
EFFECT *const effect = Effect_Get(effect_num);
effect->pos.x = x;
effect->pos.y = y;
effect->pos.z = z;
effect->room_num = room_num;
effect->rot.x = 0;
effect->rot.y = y_rot;
effect->rot.z = 0;
effect->speed = DIVER_HARPOON_SPEED;
effect->fall_speed = 0;
effect->frame_num = 0;
effect->object_id = O_MISSILE_HARPOON;
effect->shade = 3584;
Missile_ShootAtLara(effect);
}
return effect_num;
}

View file

@ -1,14 +0,0 @@
#pragma once
#include <stdint.h>
int32_t Diver_GetWaterSurface(
int32_t x, int32_t y, int32_t z, int16_t room_num);
void Diver_Setup(void);
void Diver_Control(int16_t item_num);
int16_t Diver_Harpoon(
int32_t x, int32_t y, int32_t z, int16_t speed, int16_t y_rot,
int16_t room_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/dog.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/lara/control.h" #include "game/lara/control.h"
#include "game/objects/common.h" #include "game/objects/common.h"
@ -56,14 +54,16 @@ static const BITE m_DogBite = {
.mesh_num = 20, .mesh_num = 20,
}; };
void Dog_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t item_num);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_DOG);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = Dog_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = DOG_HITPOINTS; obj->hit_points = DOG_HITPOINTS;
@ -80,7 +80,7 @@ void Dog_Setup(void)
Object_GetBone(obj, 19)->rot_y = true; Object_GetBone(obj, 19)->rot_y = true;
} }
void Dog_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -230,3 +230,5 @@ void Dog_Control(const int16_t item_num)
Creature_Head(item, head); Creature_Head(item, head);
Creature_Animate(item_num, angle, tilt); Creature_Animate(item_num, angle, tilt);
} }
REGISTER_OBJECT(O_DOG, M_Setup)

View file

@ -1,6 +0,0 @@
#pragma once
#include <stdint.h>
void Dog_Setup(void);
void Dog_Control(int16_t item_num);

View file

@ -69,8 +69,12 @@ static const BITE m_DragonMouth = {
}; };
static void M_MarkDragonDead(const ITEM *dragon_back_item); static void M_MarkDragonDead(const ITEM *dragon_back_item);
static void M_PullDagger(ITEM *lara_item, ITEM *dragon_back_item);
static void M_PushLaraAway(ITEM *lara_item, ITEM *dragon_item, int32_t shift); static void M_PushLaraAway(ITEM *lara_item, ITEM *dragon_item, int32_t shift);
static void M_PullDagger(ITEM *lara_item, ITEM *dragon_back_item);
static void M_SetupFront(OBJECT *obj);
static void M_SetupBack(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_MarkDragonDead(const ITEM *const dragon_back_item) static void M_MarkDragonDead(const ITEM *const dragon_back_item)
{ {
@ -123,16 +127,15 @@ static void M_PullDagger(ITEM *const lara_item, ITEM *const dragon_back_item)
M_MarkDragonDead(dragon_back_item); M_MarkDragonDead(dragon_back_item);
} }
void Dragon_SetupFront(void) static void M_SetupFront(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_DRAGON_FRONT);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
ASSERT(Object_Get(O_DRAGON_BACK)->loaded); ASSERT(Object_Get(O_DRAGON_BACK)->loaded);
obj->control_func = Dragon_Control; obj->control_func = M_Control;
obj->collision_func = Dragon_Collision; obj->collision_func = M_Collision;
obj->hit_points = DRAGON_HITPOINTS; obj->hit_points = DRAGON_HITPOINTS;
obj->radius = DRAGON_RADIUS; obj->radius = DRAGON_RADIUS;
@ -147,15 +150,14 @@ void Dragon_SetupFront(void)
Object_GetBone(obj, 10)->rot_z = true; Object_GetBone(obj, 10)->rot_z = true;
} }
void Dragon_SetupBack(void) static void M_SetupBack(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_DRAGON_BACK);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = Dragon_Control; obj->control_func = M_Control;
obj->collision_func = Dragon_Collision; obj->collision_func = M_Collision;
obj->radius = DRAGON_RADIUS; obj->radius = DRAGON_RADIUS;
@ -164,7 +166,7 @@ void Dragon_SetupBack(void)
obj->save_anim = 1; obj->save_anim = 1;
} }
void Dragon_Collision( static void M_Collision(
const int16_t item_num, ITEM *const lara_item, COLL_INFO *const coll) const int16_t item_num, ITEM *const lara_item, COLL_INFO *const coll)
{ {
ITEM *const item = Item_Get(item_num); ITEM *const item = Item_Get(item_num);
@ -244,7 +246,7 @@ void Dragon_Bones(const int16_t item_num)
bone_front->mesh_bits = ~0xC00000u; bone_front->mesh_bits = ~0xC00000u;
} }
void Dragon_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
const int16_t dragon_back_item_num = item_num; const int16_t dragon_back_item_num = item_num;
ITEM *const dragon_back_item = Item_Get(item_num); ITEM *const dragon_back_item = Item_Get(item_num);
@ -457,3 +459,6 @@ void Dragon_Control(const int16_t item_num)
Item_NewRoom(dragon_back_item_num, dragon_front_item->room_num); Item_NewRoom(dragon_back_item_num, dragon_front_item->room_num);
} }
} }
REGISTER_OBJECT(O_DRAGON_FRONT, M_SetupFront)
REGISTER_OBJECT(O_DRAGON_BACK, M_SetupBack)

View file

@ -1,13 +1,5 @@
#pragma once #pragma once
#include "game/items.h" #include <stdint.h>
#include "global/types.h"
void Dragon_SetupFront(void);
void Dragon_SetupBack(void);
void Dragon_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll);
void Dragon_Bones(int16_t item_num); void Dragon_Bones(int16_t item_num);
void Dragon_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/eel.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/items.h" #include "game/items.h"
#include "game/lara/control.h" #include "game/lara/control.h"
@ -41,14 +39,16 @@ static const BITE m_EelBite = {
.mesh_num = 7, .mesh_num = 7,
}; };
void Eel_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t item_num);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_EEL);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = Eel_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = EEL_HITPOINTS; obj->hit_points = EEL_HITPOINTS;
@ -58,7 +58,7 @@ void Eel_Setup(void)
obj->save_anim = 1; obj->save_anim = 1;
} }
void Eel_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
ITEM *const item = Item_Get(item_num); ITEM *const item = Item_Get(item_num);
@ -115,3 +115,5 @@ void Eel_Control(const int16_t item_num)
item->data = (void *)(intptr_t)pos; item->data = (void *)(intptr_t)pos;
Item_Animate(item); Item_Animate(item);
} }
REGISTER_OBJECT(O_EEL, M_Setup)

View file

@ -1,6 +0,0 @@
#pragma once
#include <stdint.h>
void Eel_Setup(void);
void Eel_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/jelly.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/items.h" #include "game/items.h"
#include "game/lara/control.h" #include "game/lara/control.h"
@ -24,14 +22,16 @@ typedef enum {
// clang-format on // clang-format on
} JELLY_STATE; } JELLY_STATE;
void Jelly_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t item_num);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_JELLY);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = Jelly_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = JELLY_HITPOINTS; obj->hit_points = JELLY_HITPOINTS;
@ -45,7 +45,7 @@ void Jelly_Setup(void)
obj->save_anim = 1; obj->save_anim = 1;
} }
void Jelly_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -90,3 +90,5 @@ void Jelly_Control(const int16_t item_num)
Creature_Underwater(item, 0); Creature_Underwater(item, 0);
} }
} }
REGISTER_OBJECT(O_JELLY, M_Setup)

View file

@ -1,6 +0,0 @@
#pragma once
#include <stdint.h>
void Jelly_Setup(void);
void Jelly_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/monk.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/lara/control.h" #include "game/lara/control.h"
#include "game/objects/common.h" #include "game/objects/common.h"
@ -53,54 +51,47 @@ static const BITE m_MonkHit = {
.mesh_num = 14, .mesh_num = 14,
}; };
void Monk1_Setup(void) static void M_SetupBase(OBJECT *obj);
{ static void M_Setup1(OBJECT *obj);
OBJECT *const obj = Object_Get(O_MONK_1); static void M_Setup2(OBJECT *obj);
if (!obj->loaded) { static void M_Control(int16_t item_num);
return;
}
obj->control_func = Monk_Control; static void M_SetupBase(OBJECT *const obj)
{
obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = MONK_HITPOINTS; obj->hit_points = MONK_HITPOINTS;
obj->radius = MONK_RADIUS; obj->radius = MONK_RADIUS;
obj->shadow_size = UNIT_SHADOW / 2; obj->shadow_size = UNIT_SHADOW / 2;
obj->intelligent = 1;
obj->save_position = 1;
obj->save_hitpoints = 1;
obj->save_flags = 1;
obj->save_anim = 1;
Object_GetBone(obj, 6)->rot_y = true;
}
static void M_Setup1(OBJECT *const obj)
{
if (!obj->loaded) {
return;
}
M_SetupBase(obj);
obj->pivot_length = 0; obj->pivot_length = 0;
obj->intelligent = 1;
obj->save_position = 1;
obj->save_hitpoints = 1;
obj->save_flags = 1;
obj->save_anim = 1;
Object_GetBone(obj, 6)->rot_y = true;
} }
void Monk2_Setup(void) static void M_Setup2(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_MONK_2);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
M_SetupBase(obj);
obj->control_func = Monk_Control;
obj->collision_func = Creature_Collision;
obj->hit_points = MONK_HITPOINTS;
obj->radius = MONK_RADIUS;
obj->shadow_size = UNIT_SHADOW / 2;
obj->intelligent = 1;
obj->save_position = 1;
obj->save_hitpoints = 1;
obj->save_flags = 1;
obj->save_anim = 1;
Object_GetBone(obj, 6)->rot_y = true;
} }
void Monk_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -267,3 +258,6 @@ void Monk_Control(const int16_t item_num)
Creature_Head(item, head); Creature_Head(item, head);
Creature_Animate(item_num, angle, 0); Creature_Animate(item_num, angle, 0);
} }
REGISTER_OBJECT(O_MONK_1, M_Setup1)
REGISTER_OBJECT(O_MONK_2, M_Setup2)

View file

@ -1,7 +0,0 @@
#pragma once
#include <stdint.h>
void Monk1_Setup(void);
void Monk2_Setup(void);
void Monk_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/mouse.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/lara/control.h" #include "game/lara/control.h"
#include "game/objects/common.h" #include "game/objects/common.h"
@ -42,14 +40,16 @@ static const BITE m_MouseBite = {
.mesh_num = 2, .mesh_num = 2,
}; };
void Mouse_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t item_num);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_MOUSE);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = Mouse_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = MOUSE_HITPOINTS; obj->hit_points = MOUSE_HITPOINTS;
@ -66,7 +66,7 @@ void Mouse_Setup(void)
Object_GetBone(obj, 3)->rot_y = true; Object_GetBone(obj, 3)->rot_y = true;
} }
void Mouse_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -158,3 +158,5 @@ void Mouse_Control(const int16_t item_num)
Creature_Head(item, head); Creature_Head(item, head);
Creature_Animate(item_num, angle, 0); Creature_Animate(item_num, angle, 0);
} }
REGISTER_OBJECT(O_MOUSE, M_Setup)

View file

@ -1,6 +0,0 @@
#pragma once
#include <stdint.h>
void Mouse_Setup(void);
void Mouse_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/shark.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/items.h" #include "game/items.h"
#include "game/lara/control.h" #include "game/lara/control.h"
@ -48,14 +46,16 @@ static const BITE m_SharkBite = {
.mesh_num = 12, .mesh_num = 12,
}; };
void Shark_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t item_num);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_SHARK);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = Shark_Control; obj->control_func = M_Control;
obj->draw_func = Object_DrawUnclippedItem; obj->draw_func = Object_DrawUnclippedItem;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
@ -73,7 +73,7 @@ void Shark_Setup(void)
Object_GetBone(obj, 9)->rot_y = true; Object_GetBone(obj, 9)->rot_y = true;
} }
void Shark_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -170,3 +170,5 @@ void Shark_Control(const int16_t item_num)
} }
} }
} }
REGISTER_OBJECT(O_SHARK, M_Setup)

View file

@ -1,6 +0,0 @@
#pragma once
#include <stdint.h>
void Shark_Setup(void);
void Shark_Control(int16_t item_num);

View file

@ -37,6 +37,9 @@ static void M_KillDriver(ITEM *driver_item);
static void M_MakeMountable(ITEM *skidoo_item); static void M_MakeMountable(ITEM *skidoo_item);
static void M_ControlDead(ITEM *driver_item, ITEM *skidoo_item); static void M_ControlDead(ITEM *driver_item, ITEM *skidoo_item);
static int16_t M_ControlAlive(ITEM *driver_item, ITEM *skidoo_item); static int16_t M_ControlAlive(ITEM *driver_item, ITEM *skidoo_item);
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_KillDriver(ITEM *const driver_item) static void M_KillDriver(ITEM *const driver_item)
{ {
@ -165,15 +168,14 @@ static int16_t M_ControlAlive(ITEM *const driver_item, ITEM *const skidoo_item)
return angle; return angle;
} }
void SkidooDriver_Setup(void) static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_SKIDOO_DRIVER);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->initialise_func = SkidooDriver_Initialise; obj->initialise_func = M_Initialise;
obj->control_func = SkidooDriver_Control; obj->control_func = M_Control;
obj->hit_points = 1; obj->hit_points = 1;
@ -182,7 +184,7 @@ void SkidooDriver_Setup(void)
obj->save_anim = 1; obj->save_anim = 1;
} }
void SkidooDriver_Initialise(const int16_t item_num) static void M_Initialise(const int16_t item_num)
{ {
ITEM *const skidoo_driver = Item_Get(item_num); ITEM *const skidoo_driver = Item_Get(item_num);
@ -203,7 +205,7 @@ void SkidooDriver_Initialise(const int16_t item_num)
skidoo_driver->data = (void *)(intptr_t)skidoo_item_num; skidoo_driver->data = (void *)(intptr_t)skidoo_item_num;
} }
void SkidooDriver_Control(const int16_t driver_item_num) static void M_Control(const int16_t driver_item_num)
{ {
ITEM *const driver_item = Item_Get(driver_item_num); ITEM *const driver_item = Item_Get(driver_item_num);
@ -260,3 +262,5 @@ void SkidooDriver_Control(const int16_t driver_item_num)
Item_SwitchToAnim(driver_item, anim_num, frame_num); Item_SwitchToAnim(driver_item, anim_num, frame_num);
} }
} }
REGISTER_OBJECT(O_SKIDOO_DRIVER, M_Setup)

View file

@ -1,9 +1,3 @@
#pragma once #pragma once
#include <stdint.h>
#define SKIDOO_DRIVER_HITPOINTS 100 #define SKIDOO_DRIVER_HITPOINTS 100
void SkidooDriver_Setup(void);
void SkidooDriver_Initialise(int16_t item_num);
void SkidooDriver_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/spider.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/items.h" #include "game/items.h"
#include "game/lara/control.h" #include "game/lara/control.h"
@ -44,28 +42,11 @@ static const BITE m_SpiderBite = {
.mesh_num = 1, .mesh_num = 1,
}; };
void Spider_Setup(void) static void M_Leap(int16_t item_num, int16_t angle);
{ static void M_Setup(OBJECT *obj);
OBJECT *const obj = Object_Get(O_SPIDER); static void M_Control(int16_t item_num);
if (!obj->loaded) {
return;
}
obj->control_func = Spider_Control; static void M_Leap(const int16_t item_num, const int16_t angle)
obj->collision_func = Creature_Collision;
obj->hit_points = SPIDER_HITPOINTS;
obj->radius = SPIDER_RADIUS;
obj->shadow_size = UNIT_SHADOW / 2;
obj->intelligent = 1;
obj->save_position = 1;
obj->save_hitpoints = 1;
obj->save_flags = 1;
obj->save_anim = 1;
}
void Spider_Leap(const int16_t item_num, const int16_t angle)
{ {
ITEM *const item = Item_Get(item_num); ITEM *const item = Item_Get(item_num);
const XYZ_32 old_pos = item->pos; const XYZ_32 old_pos = item->pos;
@ -85,7 +66,27 @@ void Spider_Leap(const int16_t item_num, const int16_t angle)
Creature_Animate(item_num, angle, 0); Creature_Animate(item_num, angle, 0);
} }
void Spider_Control(const int16_t item_num) static void M_Setup(OBJECT *const obj)
{
if (!obj->loaded) {
return;
}
obj->control_func = M_Control;
obj->collision_func = Creature_Collision;
obj->hit_points = SPIDER_HITPOINTS;
obj->radius = SPIDER_RADIUS;
obj->shadow_size = UNIT_SHADOW / 2;
obj->intelligent = 1;
obj->save_position = 1;
obj->save_hitpoints = 1;
obj->save_flags = 1;
obj->save_anim = 1;
}
static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -168,5 +169,7 @@ void Spider_Control(const int16_t item_num)
return; return;
} }
Spider_Leap(item_num, angle); M_Leap(item_num, angle);
} }
REGISTER_OBJECT(O_SPIDER, M_Setup)

View file

@ -1,7 +0,0 @@
#pragma once
#include <stdint.h>
void Spider_Setup(void);
void Spider_Leap(int16_t item_num, int16_t angle);
void Spider_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/tiger.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/lara/control.h" #include "game/lara/control.h"
#include "game/objects/common.h" #include "game/objects/common.h"
@ -47,14 +45,16 @@ static const BITE m_TigerBite = {
.mesh_num = 26, .mesh_num = 26,
}; };
void Tiger_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t item_num);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_TIGER);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = Tiger_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = TIGER_HITPOINTS; obj->hit_points = TIGER_HITPOINTS;
@ -71,7 +71,7 @@ void Tiger_Setup(void)
Object_GetBone(obj, 21)->rot_y = true; Object_GetBone(obj, 21)->rot_y = true;
} }
void Tiger_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -180,3 +180,5 @@ void Tiger_Control(const int16_t item_num)
Creature_Head(item, head); Creature_Head(item, head);
Creature_Animate(item_num, angle, tilt); Creature_Animate(item_num, angle, tilt);
} }
REGISTER_OBJECT(O_TIGER, M_Setup)

View file

@ -1,6 +0,0 @@
#pragma once
#include <stdint.h>
void Tiger_Setup(void);
void Tiger_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/trex.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/lara/control.h" #include "game/lara/control.h"
#include "game/objects/common.h" #include "game/objects/common.h"
@ -42,14 +40,16 @@ typedef enum {
TREX_ANIM_KILL = 11, TREX_ANIM_KILL = 11,
} TREX_ANIM; } TREX_ANIM;
void TRex_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t item_num);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_DINO);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = TRex_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = TREX_HITPOINTS; obj->hit_points = TREX_HITPOINTS;
@ -67,7 +67,7 @@ void TRex_Setup(void)
Object_GetBone(obj, 11)->rot_y = true; Object_GetBone(obj, 11)->rot_y = true;
} }
void TRex_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -168,3 +168,5 @@ void TRex_Control(const int16_t item_num)
Creature_Animate(item_num, angle, tilt); Creature_Animate(item_num, angle, tilt);
} }
REGISTER_OBJECT(O_DINO, M_Setup)

View file

@ -1,6 +0,0 @@
#pragma once
#include <stdint.h>
void TRex_Setup(void);
void TRex_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/winston.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/objects/common.h" #include "game/objects/common.h"
#include "game/random.h" #include "game/random.h"
@ -23,14 +21,16 @@ typedef enum {
// clang-format on // clang-format on
} WINSTON_STATE; } WINSTON_STATE;
void Winston_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t item_num);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_WINSTON);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = Winston_Control; obj->control_func = M_Control;
obj->collision_func = Object_Collision; obj->collision_func = Object_Collision;
obj->hit_points = DONT_TARGET; obj->hit_points = DONT_TARGET;
@ -43,7 +43,7 @@ void Winston_Setup(void)
obj->save_anim = 1; obj->save_anim = 1;
} }
void Winston_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -91,3 +91,5 @@ void Winston_Control(const int16_t item_num)
Creature_Animate(item_num, angle, 0); Creature_Animate(item_num, angle, 0);
} }
REGISTER_OBJECT(O_WINSTON, M_Setup)

View file

@ -1,6 +0,0 @@
#pragma once
#include <stdint.h>
void Winston_Setup(void);
void Winston_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/worker_1.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/objects/common.h" #include "game/objects/common.h"
#include "game/objects/creatures/worker_common.h" #include "game/objects/creatures/worker_common.h"
@ -44,14 +42,16 @@ static const BITE m_Worker1Gun = {
.mesh_num = 9, .mesh_num = 9,
}; };
void Worker1_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t item_num);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_WORKER_1);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = Worker1_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = WORKER_1_HITPOINTS; obj->hit_points = WORKER_1_HITPOINTS;
@ -69,7 +69,7 @@ void Worker1_Setup(void)
Object_GetBone(obj, 13)->rot_y = true; Object_GetBone(obj, 13)->rot_y = true;
} }
void Worker1_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -226,3 +226,5 @@ void Worker1_Control(const int16_t item_num)
Creature_Neck(item, neck); Creature_Neck(item, neck);
Creature_Animate(item_num, angle, 0); Creature_Animate(item_num, angle, 0);
} }
REGISTER_OBJECT(O_WORKER_1, M_Setup)

View file

@ -1,6 +0,0 @@
#pragma once
#include <stdint.h>
void Worker1_Setup(void);
void Worker1_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/worker_2.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/objects/common.h" #include "game/objects/common.h"
#include "game/objects/creatures/worker_common.h" #include "game/objects/creatures/worker_common.h"
@ -49,6 +47,9 @@ static const BITE m_Worker2Gun = {
static void M_ShootAtLara( static void M_ShootAtLara(
ITEM *item, CREATURE *creature, const AI_INFO *info, int16_t head); ITEM *item, CREATURE *creature, const AI_INFO *info, int16_t head);
static void M_Setup(OBJECT *obj);
static void M_Setup5(OBJECT *obj);
static void M_Control(int16_t item_num);
static void M_ShootAtLara( static void M_ShootAtLara(
ITEM *const item, CREATURE *const creature, const AI_INFO *const info, ITEM *const item, CREATURE *const creature, const AI_INFO *const info,
@ -67,14 +68,13 @@ static void M_ShootAtLara(
} }
} }
void Worker2_Setup(void) static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_WORKER_2);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = Worker2_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = WORKER_2_HITPOINTS; obj->hit_points = WORKER_2_HITPOINTS;
@ -92,14 +92,13 @@ void Worker2_Setup(void)
Object_GetBone(obj, 13)->rot_y = true; Object_GetBone(obj, 13)->rot_y = true;
} }
void Worker5_Setup(void) static void M_Setup5(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_WORKER_5);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = Worker2_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = WORKER_5_HITPOINTS; obj->hit_points = WORKER_5_HITPOINTS;
@ -117,7 +116,7 @@ void Worker5_Setup(void)
Object_GetBone(obj, 13)->rot_y = true; Object_GetBone(obj, 13)->rot_y = true;
} }
void Worker2_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -279,3 +278,6 @@ void Worker2_Control(const int16_t item_num)
Creature_Neck(item, neck); Creature_Neck(item, neck);
Creature_Animate(item_num, angle, 0); Creature_Animate(item_num, angle, 0);
} }
REGISTER_OBJECT(O_WORKER_2, M_Setup)
REGISTER_OBJECT(O_WORKER_5, M_Setup5)

View file

@ -1,8 +0,0 @@
#pragma once
#include <stdint.h>
void Worker2_Setup(void);
void Worker5_Setup(void);
void Worker2_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/worker_3.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/lara/control.h" #include "game/lara/control.h"
#include "game/objects/common.h" #include "game/objects/common.h"
@ -65,57 +63,51 @@ static const BITE m_Worker3Hit = {
.mesh_num = 10, .mesh_num = 10,
}; };
void Worker3_Setup(void) static void M_SetupBase(OBJECT *obj);
static void M_Setup3(OBJECT *obj);
static void M_Setup4(OBJECT *obj);
static void M_Control(int16_t item_num);
static void M_SetupBase(OBJECT *const obj)
{
obj->control_func = M_Control;
obj->collision_func = Creature_Collision;
obj->radius = WORKER_RADIUS;
obj->shadow_size = UNIT_SHADOW / 2;
obj->pivot_length = 0;
obj->intelligent = 1;
obj->save_position = 1;
obj->save_hitpoints = 1;
obj->save_flags = 1;
obj->save_anim = 1;
Object_GetBone(obj, 0)->rot_y = true;
Object_GetBone(obj, 4)->rot_y = true;
}
static void M_Setup3(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_WORKER_3);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = Worker3_Control; M_SetupBase(obj);
obj->collision_func = Creature_Collision;
obj->hit_points = WORKER_3_HITPOINTS; obj->hit_points = WORKER_3_HITPOINTS;
obj->radius = WORKER_RADIUS;
obj->shadow_size = UNIT_SHADOW / 2;
obj->pivot_length = 0;
obj->intelligent = 1;
obj->save_position = 1;
obj->save_hitpoints = 1;
obj->save_flags = 1;
obj->save_anim = 1;
Object_GetBone(obj, 0)->rot_y = true;
Object_GetBone(obj, 4)->rot_y = true;
} }
void Worker4_Setup(void) static void M_Setup4(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_WORKER_4);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = Worker3_Control; M_SetupBase(obj);
obj->collision_func = Creature_Collision;
obj->hit_points = WORKER_4_HITPOINTS; obj->hit_points = WORKER_4_HITPOINTS;
obj->radius = WORKER_RADIUS;
obj->shadow_size = UNIT_SHADOW / 2;
obj->pivot_length = 0;
obj->intelligent = 1;
obj->save_position = 1;
obj->save_hitpoints = 1;
obj->save_flags = 1;
obj->save_anim = 1;
Object_GetBone(obj, 0)->rot_y = true;
Object_GetBone(obj, 4)->rot_y = true;
} }
void Worker3_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -337,3 +329,6 @@ void Worker3_Control(const int16_t item_num)
} }
} }
} }
REGISTER_OBJECT(O_WORKER_3, M_Setup3)
REGISTER_OBJECT(O_WORKER_4, M_Setup4)

View file

@ -1,7 +0,0 @@
#pragma once
#include <stdint.h>
void Worker3_Setup(void);
void Worker4_Setup(void);
void Worker3_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/xian_knight.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/effects.h" #include "game/effects.h"
#include "game/items.h" #include "game/items.h"
@ -51,6 +49,9 @@ static const BITE m_XianKnightSword = {
}; };
static void M_Initialise(int16_t item_num); static void M_Initialise(int16_t item_num);
static void M_SparkleTrail(const ITEM *item);
static void M_Setup(OBJECT *obj);
static void M_Control(int16_t item_num);
static void M_Initialise(const int16_t item_num) static void M_Initialise(const int16_t item_num)
{ {
@ -59,7 +60,7 @@ static void M_Initialise(const int16_t item_num)
item->mesh_bits = 0; item->mesh_bits = 0;
} }
void XianKnight_SparkleTrail(const ITEM *const item) static void M_SparkleTrail(const ITEM *const item)
{ {
const int16_t effect_num = Effect_Create(item->room_num); const int16_t effect_num = Effect_Create(item->room_num);
if (effect_num != NO_EFFECT) { if (effect_num != NO_EFFECT) {
@ -75,9 +76,8 @@ void XianKnight_SparkleTrail(const ITEM *const item)
Sound_Effect(SFX_WARRIOR_HOVER, &item->pos, SPM_NORMAL); Sound_Effect(SFX_WARRIOR_HOVER, &item->pos, SPM_NORMAL);
} }
void XianKnight_Setup(void) static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_XIAN_KNIGHT);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
@ -86,7 +86,7 @@ void XianKnight_Setup(void)
obj->initialise_func = M_Initialise; obj->initialise_func = M_Initialise;
obj->draw_func = XianWarrior_Draw; obj->draw_func = XianWarrior_Draw;
obj->control_func = XianKnight_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = XIAN_KNIGHT_HITPOINTS; obj->hit_points = XIAN_KNIGHT_HITPOINTS;
@ -104,7 +104,7 @@ void XianKnight_Setup(void)
Object_GetBone(obj, 16)->rot_y = true; Object_GetBone(obj, 16)->rot_y = true;
} }
void XianKnight_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -204,7 +204,7 @@ void XianKnight_Control(const int16_t item_num)
if (info.ahead != 0) { if (info.ahead != 0) {
neck = info.angle; neck = info.angle;
} }
XianKnight_SparkleTrail(item); M_SparkleTrail(item);
if (creature->lot.fly == 0) { if (creature->lot.fly == 0) {
item->goal_anim_state = XIAN_KNIGHT_STATE_STOP; item->goal_anim_state = XIAN_KNIGHT_STATE_STOP;
} }
@ -269,3 +269,5 @@ void XianKnight_Control(const int16_t item_num)
Creature_Neck(item, neck); Creature_Neck(item, neck);
Creature_Animate(item_num, angle, 0); Creature_Animate(item_num, angle, 0);
} }
REGISTER_OBJECT(O_XIAN_KNIGHT, M_Setup)

View file

@ -1,7 +0,0 @@
#pragma once
#include "global/types.h"
void XianKnight_Setup(void);
void XianKnight_SparkleTrail(const ITEM *item);
void XianKnight_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/xian_spearman.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/items.h" #include "game/items.h"
#include "game/lara/control.h" #include "game/lara/control.h"
@ -80,47 +78,12 @@ static const BITE m_XianSpearmanRightSpear = {
.mesh_num = 18, .mesh_num = 18,
}; };
static void M_DoDamage(const ITEM *item, CREATURE *creature, int32_t damage);
static void M_Setup(OBJECT *obj);
static void M_Initialise(int16_t item_num); static void M_Initialise(int16_t item_num);
static void M_Control(int16_t item_num);
static void M_Initialise(const int16_t item_num) static void M_DoDamage(
{
ITEM *const item = Item_Get(item_num);
Item_SwitchToAnim(item, XIAN_SPEARMAN_ANIM_START, 0);
item->goal_anim_state = XIAN_SPEARMAN_STATE_START;
item->current_anim_state = XIAN_SPEARMAN_STATE_START;
item->status = IS_INACTIVE;
item->mesh_bits = 0;
}
void XianSpearman_Setup(void)
{
OBJECT *const obj = Object_Get(O_XIAN_SPEARMAN);
if (!obj->loaded) {
return;
}
ASSERT(Object_Get(O_XIAN_SPEARMAN_STATUE)->loaded);
obj->initialise_func = M_Initialise;
obj->draw_func = XianWarrior_Draw;
obj->control_func = XianSpearman_Control;
obj->collision_func = Creature_Collision;
obj->hit_points = XIAN_SPEARMAN_HITPOINTS;
obj->radius = XIAN_SPEARMAN_RADIUS;
obj->shadow_size = UNIT_SHADOW / 2;
obj->pivot_length = 0;
obj->intelligent = 1;
obj->save_position = 1;
obj->save_hitpoints = 1;
obj->save_flags = 1;
obj->save_anim = 1;
Object_GetBone(obj, 6)->rot_y = true;
Object_GetBone(obj, 12)->rot_y = true;
}
void XianSpearman_DoDamage(
const ITEM *const item, CREATURE *const creature, const int32_t damage) const ITEM *const item, CREATURE *const creature, const int32_t damage)
{ {
if ((creature->flags & 1) == 0 if ((creature->flags & 1) == 0
@ -140,7 +103,44 @@ void XianSpearman_DoDamage(
} }
} }
void XianSpearman_Control(const int16_t item_num) static void M_Setup(OBJECT *const obj)
{
if (!obj->loaded) {
return;
}
ASSERT(Object_Get(O_XIAN_SPEARMAN_STATUE)->loaded);
obj->initialise_func = M_Initialise;
obj->draw_func = XianWarrior_Draw;
obj->control_func = M_Control;
obj->collision_func = Creature_Collision;
obj->hit_points = XIAN_SPEARMAN_HITPOINTS;
obj->radius = XIAN_SPEARMAN_RADIUS;
obj->shadow_size = UNIT_SHADOW / 2;
obj->pivot_length = 0;
obj->intelligent = 1;
obj->save_position = 1;
obj->save_hitpoints = 1;
obj->save_flags = 1;
obj->save_anim = 1;
Object_GetBone(obj, 6)->rot_y = true;
Object_GetBone(obj, 12)->rot_y = true;
}
static void M_Initialise(const int16_t item_num)
{
ITEM *const item = Item_Get(item_num);
Item_SwitchToAnim(item, XIAN_SPEARMAN_ANIM_START, 0);
item->goal_anim_state = XIAN_SPEARMAN_STATE_START;
item->current_anim_state = XIAN_SPEARMAN_STATE_START;
item->status = IS_INACTIVE;
item->mesh_bits = 0;
}
static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -349,7 +349,7 @@ void XianSpearman_Control(const int16_t item_num)
break; break;
case XIAN_SPEARMAN_STATE_HIT_1: case XIAN_SPEARMAN_STATE_HIT_1:
XianSpearman_DoDamage(item, creature, XIAN_SPEARMAN_HIT_1_DAMAGE); M_DoDamage(item, creature, XIAN_SPEARMAN_HIT_1_DAMAGE);
break; break;
case XIAN_SPEARMAN_STATE_HIT_2: case XIAN_SPEARMAN_STATE_HIT_2:
@ -358,7 +358,7 @@ void XianSpearman_Control(const int16_t item_num)
if (info.ahead != 0) { if (info.ahead != 0) {
head = info.angle; head = info.angle;
} }
XianSpearman_DoDamage(item, creature, XIAN_SPEARMAN_HIT_2_DAMAGE); M_DoDamage(item, creature, XIAN_SPEARMAN_HIT_2_DAMAGE);
if (info.ahead != 0 && info.distance < XIAN_ATTACK_1_RANGE) { if (info.ahead != 0 && info.distance < XIAN_ATTACK_1_RANGE) {
const int32_t random = Random_GetControl(); const int32_t random = Random_GetControl();
if (random < 0x4000) { if (random < 0x4000) {
@ -375,7 +375,7 @@ void XianSpearman_Control(const int16_t item_num)
if (info.ahead != 0) { if (info.ahead != 0) {
head = info.angle; head = info.angle;
} }
XianSpearman_DoDamage(item, creature, XIAN_SPEARMAN_HIT_5_DAMAGE); M_DoDamage(item, creature, XIAN_SPEARMAN_HIT_5_DAMAGE);
if (info.ahead != 0 && info.distance < XIAN_ATTACK_1_RANGE) { if (info.ahead != 0 && info.distance < XIAN_ATTACK_1_RANGE) {
item->goal_anim_state = XIAN_SPEARMAN_STATE_STOP; item->goal_anim_state = XIAN_SPEARMAN_STATE_STOP;
} else { } else {
@ -387,7 +387,7 @@ void XianSpearman_Control(const int16_t item_num)
if (info.ahead != 0) { if (info.ahead != 0) {
head = info.angle; head = info.angle;
} }
XianSpearman_DoDamage(item, creature, XIAN_SPEARMAN_HIT_6_DAMAGE); M_DoDamage(item, creature, XIAN_SPEARMAN_HIT_6_DAMAGE);
if (info.ahead != 0 && info.distance < XIAN_ATTACK_1_RANGE) { if (info.ahead != 0 && info.distance < XIAN_ATTACK_1_RANGE) {
const int32_t random = Random_GetControl(); const int32_t random = Random_GetControl();
if (random < 0x4000) { if (random < 0x4000) {
@ -418,3 +418,5 @@ void XianSpearman_Control(const int16_t item_num)
Creature_Neck(item, neck); Creature_Neck(item, neck);
Creature_Animate(item_num, angle, 0); Creature_Animate(item_num, angle, 0);
} }
REGISTER_OBJECT(O_XIAN_SPEARMAN, M_Setup)

View file

@ -1,8 +0,0 @@
#pragma once
#include "global/types.h"
void XianSpearman_Setup(void);
void XianSpearman_DoDamage(
const ITEM *item, CREATURE *creature, int32_t damage);
void XianSpearman_Control(int16_t item_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/creatures/yeti.h"
#include "game/creature.h" #include "game/creature.h"
#include "game/lara/control.h" #include "game/lara/control.h"
#include "game/objects/common.h" #include "game/objects/common.h"
@ -70,14 +68,16 @@ static const BITE m_YetiBiteR = {
.mesh_num = 10, .mesh_num = 10,
}; };
void Yeti_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t item_num);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_YETI);
if (!obj->loaded) { if (!obj->loaded) {
return; return;
} }
obj->control_func = Yeti_Control; obj->control_func = M_Control;
obj->collision_func = Creature_Collision; obj->collision_func = Creature_Collision;
obj->hit_points = YETI_HITPOINTS; obj->hit_points = YETI_HITPOINTS;
@ -95,7 +95,7 @@ void Yeti_Setup(void)
Object_GetBone(obj, 14)->rot_y = true; Object_GetBone(obj, 14)->rot_y = true;
} }
void Yeti_Control(const int16_t item_num) static void M_Control(const int16_t item_num)
{ {
if (!Creature_Activate(item_num)) { if (!Creature_Activate(item_num)) {
return; return;
@ -320,3 +320,5 @@ void Yeti_Control(const int16_t item_num)
} }
} }
} }
REGISTER_OBJECT(O_YETI, M_Setup)

View file

@ -1,6 +0,0 @@
#pragma once
#include <stdint.h>
void Yeti_Setup(void);
void Yeti_Control(int16_t item_num);

View file

@ -1,12 +1,19 @@
#include "game/objects/effects/blood.h"
#include "game/effects.h" #include "game/effects.h"
#include "game/objects/common.h" #include "game/objects/common.h"
#include "global/vars.h" #include "global/vars.h"
#include <libtrx/game/math.h> #include <libtrx/game/math.h>
void Blood_Control(const int16_t effect_num) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t effect_num);
static void M_Setup(OBJECT *const obj)
{
obj->control_func = M_Control;
obj->semi_transparent = 1;
}
static void M_Control(const int16_t effect_num)
{ {
EFFECT *const effect = Effect_Get(effect_num); EFFECT *const effect = Effect_Get(effect_num);
const OBJECT *const obj = Object_Get(effect->object_id); const OBJECT *const obj = Object_Get(effect->object_id);
@ -22,9 +29,4 @@ void Blood_Control(const int16_t effect_num)
} }
} }
void Blood_Setup(void) REGISTER_OBJECT(O_BLOOD, M_Setup)
{
OBJECT *const obj = Object_Get(O_BLOOD);
obj->control_func = Blood_Control;
obj->semi_transparent = 1;
}

View file

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

View file

@ -1,5 +1,3 @@
#include "game/objects/effects/body_part.h"
#include "game/effects.h" #include "game/effects.h"
#include "game/lara/control.h" #include "game/lara/control.h"
#include "game/lara/misc.h" #include "game/lara/misc.h"
@ -10,15 +8,17 @@
#include <libtrx/game/math.h> #include <libtrx/game/math.h>
void BodyPart_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t effect_num);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_BODY_PART); obj->control_func = M_Control;
obj->control_func = BodyPart_Control;
obj->loaded = 1; obj->loaded = 1;
obj->mesh_count = 0; obj->mesh_count = 0;
} }
void BodyPart_Control(const int16_t effect_num) static void M_Control(const int16_t effect_num)
{ {
EFFECT *const effect = Effect_Get(effect_num); EFFECT *const effect = Effect_Get(effect_num);
effect->rot.x += 5 * DEG_1; effect->rot.x += 5 * DEG_1;
@ -91,3 +91,5 @@ void BodyPart_Control(const int16_t effect_num)
Effect_NewRoom(effect_num, room_num); Effect_NewRoom(effect_num, room_num);
} }
} }
REGISTER_OBJECT(O_BODY_PART, M_Setup)

View file

@ -1,7 +0,0 @@
#pragma once
#include "global/types.h"
void BodyPart_Setup(void);
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/effects.h"
#include "game/room.h" #include "game/room.h"
#include "global/vars.h" #include "global/vars.h"
#include <libtrx/game/math.h> #include <libtrx/game/math.h>
void Bubble_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t effect_num);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_BUBBLE); obj->control_func = M_Control;
obj->control_func = Bubble_Control;
} }
void Bubble_Control(const int16_t effect_num) static void M_Control(const int16_t effect_num)
{ {
EFFECT *const effect = Effect_Get(effect_num); EFFECT *const effect = Effect_Get(effect_num);
effect->rot.y += 9 * DEG_1; effect->rot.y += 9 * DEG_1;
@ -44,3 +44,5 @@ void Bubble_Control(const int16_t effect_num)
effect->pos.y = y; effect->pos.y = y;
effect->pos.z = z; effect->pos.z = z;
} }
REGISTER_OBJECT(O_BUBBLE, M_Setup)

View file

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

View file

@ -1,10 +1,18 @@
#include "game/objects/effects/dart_effect.h"
#include "game/effects.h" #include "game/effects.h"
#include "game/objects/common.h" #include "game/objects/common.h"
#include "global/vars.h" #include "global/vars.h"
void DartEffect_Control(int16_t effect_num) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t effect_num);
static void M_Setup(OBJECT *const obj)
{
obj->control_func = M_Control;
obj->draw_func = Object_DrawSpriteItem;
obj->semi_transparent = 1;
}
static void M_Control(const int16_t effect_num)
{ {
EFFECT *const effect = Effect_Get(effect_num); EFFECT *const effect = Effect_Get(effect_num);
const OBJECT *const obj = Object_Get(effect->object_id); const OBJECT *const obj = Object_Get(effect->object_id);
@ -19,10 +27,4 @@ void DartEffect_Control(int16_t effect_num)
} }
} }
void DartEffect_Setup(void) REGISTER_OBJECT(O_DART_EFFECT, M_Setup)
{
OBJECT *const obj = Object_Get(O_DART_EFFECT);
obj->control_func = DartEffect_Control;
obj->draw_func = Object_DrawSpriteItem;
obj->semi_transparent = 1;
}

View file

@ -1,6 +0,0 @@
#pragma once
#include <stdint.h>
void DartEffect_Setup(void);
void DartEffect_Control(int16_t effect_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/effects/ember.h"
#include "game/effects.h" #include "game/effects.h"
#include "game/lara/control.h" #include "game/lara/control.h"
#include "game/lara/misc.h" #include "game/lara/misc.h"
@ -8,7 +6,16 @@
#include <libtrx/game/math.h> #include <libtrx/game/math.h>
void Ember_Control(const int16_t effect_num) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t effect_num);
static void M_Setup(OBJECT *const obj)
{
obj->control_func = M_Control;
obj->semi_transparent = 1;
}
static void M_Control(const int16_t effect_num)
{ {
EFFECT *const effect = Effect_Get(effect_num); EFFECT *const effect = Effect_Get(effect_num);
effect->fall_speed += GRAVITY; effect->fall_speed += GRAVITY;
@ -34,9 +41,4 @@ void Ember_Control(const int16_t effect_num)
} }
} }
void Ember_Setup(void) REGISTER_OBJECT(O_EMBER, M_Setup)
{
OBJECT *const obj = Object_Get(O_EMBER);
obj->control_func = Ember_Control;
obj->semi_transparent = 1;
}

View file

@ -1,6 +0,0 @@
#pragma once
#include <stdint.h>
void Ember_Control(int16_t effect_num);
void Ember_Setup(void);

View file

@ -1,5 +1,3 @@
#include "game/objects/effects/explosion.h"
#include "game/effects.h" #include "game/effects.h"
#include "game/objects/common.h" #include "game/objects/common.h"
#include "game/output.h" #include "game/output.h"
@ -7,7 +5,16 @@
#include <libtrx/config.h> #include <libtrx/config.h>
void Explosion_Control(const int16_t effect_num) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t effect_num);
static void M_Setup(OBJECT *const obj)
{
obj->control_func = M_Control;
obj->semi_transparent = 1;
}
static void M_Control(const int16_t effect_num)
{ {
EFFECT *const effect = Effect_Get(effect_num); EFFECT *const effect = Effect_Get(effect_num);
const OBJECT *const obj = Object_Get(effect->object_id); const OBJECT *const obj = Object_Get(effect->object_id);
@ -26,9 +33,4 @@ void Explosion_Control(const int16_t effect_num)
} }
} }
void Explosion_Setup(void) REGISTER_OBJECT(O_EXPLOSION, M_Setup)
{
OBJECT *const obj = Object_Get(O_EXPLOSION);
obj->control_func = Explosion_Control;
obj->semi_transparent = 1;
}

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Explosion_Setup(void);
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/collide.h"
#include "game/effects.h" #include "game/effects.h"
#include "game/lara/control.h" #include "game/lara/control.h"
@ -11,7 +9,15 @@
#include <libtrx/utils.h> #include <libtrx/utils.h>
void Flame_Control(const int16_t effect_num) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t effect_num);
static void M_Setup(OBJECT *const obj)
{
obj->control_func = M_Control;
obj->semi_transparent = 1;
}
static void M_Control(const int16_t effect_num)
{ {
EFFECT *const effect = Effect_Get(effect_num); EFFECT *const effect = Effect_Get(effect_num);
@ -65,9 +71,4 @@ void Flame_Control(const int16_t effect_num)
} }
} }
void Flame_Setup(void) REGISTER_OBJECT(O_FLAME, M_Setup)
{
OBJECT *const obj = Object_Get(O_FLAME);
obj->control_func = Flame_Control;
obj->semi_transparent = 1;
}

View file

@ -1,6 +0,0 @@
#pragma once
#include <stdint.h>
void Flame_Control(int16_t effect_num);
void Flame_Setup(void);

View file

@ -1,9 +1,15 @@
#include "game/objects/effects/glow.h"
#include "game/effects.h" #include "game/effects.h"
#include "global/vars.h" #include "global/vars.h"
void Glow_Control(const int16_t effect_num) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t effect_num);
static void M_Setup(OBJECT *const obj)
{
obj->control_func = M_Control;
}
static void M_Control(const int16_t effect_num)
{ {
EFFECT *const effect = Effect_Get(effect_num); EFFECT *const effect = Effect_Get(effect_num);
@ -17,8 +23,4 @@ void Glow_Control(const int16_t effect_num)
effect->frame_num += effect->fall_speed; effect->frame_num += effect->fall_speed;
} }
void Glow_Setup(void) REGISTER_OBJECT(O_GLOW, M_Setup)
{
OBJECT *const obj = Object_Get(O_GLOW);
obj->control_func = Glow_Control;
}

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Glow_Setup(void);
void Glow_Control(int16_t effect_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/effects/gun_flash.h"
#include "game/effects.h" #include "game/effects.h"
#include "game/output.h" #include "game/output.h"
#include "game/random.h" #include "game/random.h"
@ -7,7 +5,15 @@
#include <libtrx/config.h> #include <libtrx/config.h>
void GunFlash_Control(const int16_t effect_num) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t effect_num);
static void M_Setup(OBJECT *const obj)
{
obj->control_func = M_Control;
}
static void M_Control(const int16_t effect_num)
{ {
EFFECT *const effect = Effect_Get(effect_num); EFFECT *const effect = Effect_Get(effect_num);
@ -23,8 +29,4 @@ void GunFlash_Control(const int16_t effect_num)
} }
} }
void GunFlash_Setup(void) REGISTER_OBJECT(O_GUN_FLASH, M_Setup)
{
OBJECT *const obj = Object_Get(O_GUN_FLASH);
obj->control_func = GunFlash_Control;
}

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void GunFlash_Setup(void);
void GunFlash_Control(int16_t effect_num);

View file

@ -1,12 +1,19 @@
#include "game/objects/effects/hot_liquid.h"
#include "game/effects.h" #include "game/effects.h"
#include "game/random.h" #include "game/random.h"
#include "game/room.h" #include "game/room.h"
#include "game/sound.h" #include "game/sound.h"
#include "global/vars.h" #include "global/vars.h"
void HotLiquid_Control(const int16_t effect_num) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t effect_num);
static void M_Setup(OBJECT *const obj)
{
obj->control_func = M_Control;
obj->semi_transparent = 1;
}
static void M_Control(const int16_t effect_num)
{ {
EFFECT *const effect = Effect_Get(effect_num); EFFECT *const effect = Effect_Get(effect_num);
OBJECT *const obj = Object_Get(O_HOT_LIQUID); OBJECT *const obj = Object_Get(O_HOT_LIQUID);
@ -41,9 +48,4 @@ void HotLiquid_Control(const int16_t effect_num)
Sound_Effect(SFX_BOWL_POUR, &effect->pos, SPM_NORMAL); Sound_Effect(SFX_BOWL_POUR, &effect->pos, SPM_NORMAL);
} }
void HotLiquid_Setup(void) REGISTER_OBJECT(O_HOT_LIQUID, M_Setup)
{
OBJECT *const obj = Object_Get(O_HOT_LIQUID);
obj->control_func = HotLiquid_Control;
obj->semi_transparent = 1;
}

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void HotLiquid_Setup(void);
void HotLiquid_Control(int16_t effect_num);

View file

@ -1,11 +1,12 @@
#include "game/objects/effects/missile_flame.h"
#include "game/objects/common.h" #include "game/objects/common.h"
#include "game/objects/effects/missile_common.h" #include "game/objects/effects/missile_common.h"
void MissileFlame_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_MISSILE_FLAME);
obj->control_func = Missile_Control; obj->control_func = Missile_Control;
obj->semi_transparent = 1; obj->semi_transparent = 1;
} }
REGISTER_OBJECT(O_MISSILE_FLAME, M_Setup)

View file

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

View file

@ -1,11 +1,12 @@
#include "game/objects/effects/missile_harpoon.h"
#include "game/objects/common.h" #include "game/objects/common.h"
#include "game/objects/effects/missile_common.h" #include "game/objects/effects/missile_common.h"
void MissileHarpoon_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_MISSILE_HARPOON);
obj->control_func = Missile_Control; obj->control_func = Missile_Control;
obj->save_position = 1; obj->save_position = 1;
} }
REGISTER_OBJECT(O_MISSILE_HARPOON, M_Setup)

View file

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

View file

@ -1,11 +1,12 @@
#include "game/objects/effects/missile_knife.h"
#include "game/objects/common.h" #include "game/objects/common.h"
#include "game/objects/effects/missile_common.h" #include "game/objects/effects/missile_common.h"
void MissileSpawn_Knife_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_MISSILE_KNIFE);
obj->control_func = Missile_Control; obj->control_func = Missile_Control;
obj->save_position = 1; obj->save_position = 1;
} }
REGISTER_OBJECT(O_MISSILE_KNIFE, M_Setup)

View file

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

View file

@ -1,9 +1,15 @@
#include "game/objects/effects/ricochet.h"
#include "game/effects.h" #include "game/effects.h"
#include "global/vars.h" #include "global/vars.h"
void Spawn_Ricochet_Control(const int16_t effect_num) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t effect_num);
static void M_Setup(OBJECT *const obj)
{
obj->control_func = M_Control;
}
static void M_Control(const int16_t effect_num)
{ {
EFFECT *const effect = Effect_Get(effect_num); EFFECT *const effect = Effect_Get(effect_num);
effect->counter--; effect->counter--;
@ -12,8 +18,4 @@ void Spawn_Ricochet_Control(const int16_t effect_num)
} }
} }
void Spawn_Ricochet_Setup(void) REGISTER_OBJECT(O_RICOCHET, M_Setup)
{
OBJECT *const obj = Object_Get(O_RICOCHET);
obj->control_func = Spawn_Ricochet_Control;
}

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Spawn_Ricochet_Setup(void);
void Spawn_Ricochet_Control(int16_t effect_num);

View file

@ -1,11 +1,17 @@
#include "game/objects/effects/snow_sprite.h"
#include "game/effects.h" #include "game/effects.h"
#include "global/vars.h" #include "global/vars.h"
#include <libtrx/game/math.h> #include <libtrx/game/math.h>
void SnowSprite_Control(const int16_t effect_num) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t effect_num);
static void M_Setup(OBJECT *const obj)
{
obj->control_func = M_Control;
}
static void M_Control(const int16_t effect_num)
{ {
EFFECT *const effect = Effect_Get(effect_num); EFFECT *const effect = Effect_Get(effect_num);
const OBJECT *const obj = Object_Get(effect->object_id); const OBJECT *const obj = Object_Get(effect->object_id);
@ -24,8 +30,4 @@ void SnowSprite_Control(const int16_t effect_num)
} }
} }
void SnowSprite_Setup(void) REGISTER_OBJECT(O_SNOW_SPRITE, M_Setup)
{
OBJECT *const obj = Object_Get(O_SNOW_SPRITE);
obj->control_func = SnowSprite_Control;
}

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void SnowSprite_Setup(void);
void SnowSprite_Control(int16_t effect_num);

View file

@ -1,19 +1,19 @@
#include "game/objects/effects/splash.h"
#include "game/effects.h" #include "game/effects.h"
#include "game/objects/common.h" #include "game/objects/common.h"
#include "global/vars.h" #include "global/vars.h"
#include <libtrx/game/math.h> #include <libtrx/game/math.h>
void Spawn_Splash_Setup(void) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t effect_num);
static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_SPLASH); obj->control_func = M_Control;
obj->control_func = Spawn_Splash_Control;
obj->semi_transparent = 1; obj->semi_transparent = 1;
} }
void Spawn_Splash_Control(const int16_t effect_num) static void M_Control(const int16_t effect_num)
{ {
EFFECT *const effect = Effect_Get(effect_num); EFFECT *const effect = Effect_Get(effect_num);
const OBJECT *const obj = Object_Get(effect->object_id); const OBJECT *const obj = Object_Get(effect->object_id);
@ -27,3 +27,5 @@ void Spawn_Splash_Control(const int16_t effect_num)
effect->pos.x += (effect->speed * Math_Sin(effect->rot.y)) >> W2V_SHIFT; effect->pos.x += (effect->speed * Math_Sin(effect->rot.y)) >> W2V_SHIFT;
effect->pos.z += (effect->speed * Math_Cos(effect->rot.y)) >> W2V_SHIFT; effect->pos.z += (effect->speed * Math_Cos(effect->rot.y)) >> W2V_SHIFT;
} }
REGISTER_OBJECT(O_SPLASH, M_Setup)

View file

@ -1,6 +0,0 @@
#pragma once
#include "global/types.h"
void Spawn_Splash_Setup(void);
void Spawn_Splash_Control(int16_t effect_num);

View file

@ -1,5 +1,3 @@
#include "game/objects/effects/twinkle.h"
#include "game/effects.h" #include "game/effects.h"
#include "game/items.h" #include "game/items.h"
#include "global/vars.h" #include "global/vars.h"
@ -12,6 +10,8 @@
static XYZ_32 M_GetTargetPos(const ITEM *item); static XYZ_32 M_GetTargetPos(const ITEM *item);
static void M_NudgeTowardsItem(EFFECT *effect, const XYZ_32 *target_pos); static void M_NudgeTowardsItem(EFFECT *effect, const XYZ_32 *target_pos);
static bool M_ShouldDisappear(const EFFECT *effect, const XYZ_32 *target_pos); static bool M_ShouldDisappear(const EFFECT *effect, const XYZ_32 *target_pos);
static void M_Setup(OBJECT *obj);
static void M_Control(int16_t effect_num);
static XYZ_32 M_GetTargetPos(const ITEM *const item) static XYZ_32 M_GetTargetPos(const ITEM *const item)
{ {
@ -45,13 +45,12 @@ static bool M_ShouldDisappear(
return dx < DISAPPEAR_RANGE && dy < DISAPPEAR_RANGE && dz < DISAPPEAR_RANGE; return dx < DISAPPEAR_RANGE && dy < DISAPPEAR_RANGE && dz < DISAPPEAR_RANGE;
} }
void Twinkle_Setup(void) static void M_Setup(OBJECT *const obj)
{ {
OBJECT *const obj = Object_Get(O_TWINKLE); obj->control_func = M_Control;
obj->control_func = Twinkle_Control;
} }
void Twinkle_Control(const int16_t effect_num) static void M_Control(const int16_t effect_num)
{ {
EFFECT *const effect = Effect_Get(effect_num); EFFECT *const effect = Effect_Get(effect_num);
effect->frame_num--; effect->frame_num--;
@ -74,3 +73,5 @@ void Twinkle_Control(const int16_t effect_num)
Effect_Kill(effect_num); Effect_Kill(effect_num);
} }
} }
REGISTER_OBJECT(O_TWINKLE, M_Setup)

View file

@ -1,7 +0,0 @@
#pragma once
#include <stdint.h>
void Twinkle_Setup(void);
void Twinkle_Control(int16_t effect_num);

View file

@ -1,11 +1,18 @@
#include "game/objects/effects/water_sprite.h"
#include "game/effects.h" #include "game/effects.h"
#include "global/vars.h" #include "global/vars.h"
#include <libtrx/game/math.h> #include <libtrx/game/math.h>
void WaterSprite_Control(const int16_t effect_num) static void M_Setup(OBJECT *obj);
static void M_Control(int16_t effect_num);
static void M_Setup(OBJECT *const obj)
{
obj->control_func = M_Control;
obj->semi_transparent = 1;
}
static void M_Control(const int16_t effect_num)
{ {
EFFECT *const effect = Effect_Get(effect_num); EFFECT *const effect = Effect_Get(effect_num);
const OBJECT *const obj = Object_Get(effect->object_id); const OBJECT *const obj = Object_Get(effect->object_id);
@ -31,9 +38,4 @@ void WaterSprite_Control(const int16_t effect_num)
} }
} }
void WaterSprite_Setup(void) REGISTER_OBJECT(O_WATER_SPRITE, M_Setup)
{
OBJECT *const obj = Object_Get(O_WATER_SPRITE);
obj->control_func = WaterSprite_Control;
obj->semi_transparent = 1;
}

Some files were not shown because too many files have changed in this diff Show more