Skip to content

Commit

Permalink
camera: create in-game cinematic invoker utility
Browse files Browse the repository at this point in the history
This introduces a utility function for invoking an in-game cinematic to
reduce some code repetition.
  • Loading branch information
lahm86 committed Feb 1, 2025
1 parent 3bdb51b commit 7a2ab3f
Show file tree
Hide file tree
Showing 8 changed files with 20 additions and 30 deletions.
11 changes: 11 additions & 0 deletions src/libtrx/game/camera/cinematic.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "game/camera/types.h"
#include "game/camera/vars.h"
#include "game/game_buf.h"

static CINE_FRAME *m_CineFrames = NULL;
Expand Down Expand Up @@ -30,3 +31,13 @@ CINE_DATA *Camera_GetCineData(void)
{
return &m_CineData;
}

void Camera_InvokeCinematic(
const ITEM *const item, const int32_t frame_idx, const int16_t extra_y_rot)
{
g_Camera.type = CAM_CINEMATIC;
m_CineData.frame_idx = frame_idx;
m_CineData.position.pos = item->pos;
m_CineData.position.rot = item->rot;
m_CineData.position.rot.y += extra_y_rot;
}
3 changes: 3 additions & 0 deletions src/libtrx/include/libtrx/game/camera/cinematic.h
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
#pragma once

#include "../items/types.h"
#include "./types.h"

void Camera_InitialiseCineFrames(int32_t num_frames);
CINE_FRAME *Camera_GetCineFrame(int32_t frame_idx);
CINE_FRAME *Camera_GetCurrentCineFrame(void);
CINE_DATA *Camera_GetCineData(void);
void Camera_InvokeCinematic(
const ITEM *item, int32_t frame_idx, int16_t extra_y_rot);
6 changes: 1 addition & 5 deletions src/tr1/game/objects/general/scion1.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,7 @@ void Scion1_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll)
Item_SwitchToObjAnim(
lara_item, EXTRA_ANIM_PEDESTAL_SCION, 0, O_LARA_EXTRA);
g_Lara.gun_status = LGS_HANDS_BUSY;
g_Camera.type = CAM_CINEMATIC;
CINE_DATA *const cine_data = Camera_GetCineData();
cine_data->frame_idx = 0;
cine_data->position.pos = lara_item->pos;
cine_data->position.rot.y = lara_item->rot.y;
Camera_InvokeCinematic(lara_item, 0, 0);
}
cleanup:
item->rot.x = rotx;
Expand Down
6 changes: 1 addition & 5 deletions src/tr1/game/objects/general/scion4.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,7 @@ void Scion4_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll)
Item_SwitchToObjAnim(
lara_item, EXTRA_ANIM_HOLDER_SCION, 0, O_LARA_EXTRA);
g_Lara.gun_status = LGS_HANDS_BUSY;
g_Camera.type = CAM_CINEMATIC;
CINE_DATA *const cine_data = Camera_GetCineData();
cine_data->frame_idx = 0;
cine_data->position.pos = lara_item->pos;
cine_data->position.rot.y = lara_item->rot.y - DEG_90;
Camera_InvokeCinematic(lara_item, 0, -DEG_90);
}
cleanup:
item->rot.x = rotx;
Expand Down
6 changes: 1 addition & 5 deletions src/tr1/game/objects/traps/midas_touch.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,7 @@ void MidasTouch_Collision(int16_t item_num, ITEM *lara_item, COLL_INFO *coll)
g_Lara.air = -1;
g_Lara.gun_status = LGS_HANDS_BUSY;
g_Lara.gun_type = LGT_UNARMED;
g_Camera.type = CAM_CINEMATIC;
CINE_DATA *const cine_data = Camera_GetCineData();
cine_data->frame_idx = 0;
cine_data->position.pos = lara_item->pos;
cine_data->position.rot.y = lara_item->rot.y;
Camera_InvokeCinematic(lara_item, 0, 0);
return;
}

Expand Down
6 changes: 1 addition & 5 deletions src/tr2/game/lara/control.c
Original file line number Diff line number Diff line change
Expand Up @@ -824,11 +824,7 @@ void Lara_Initialise(const GF_LEVEL *const level)
item->goal_anim_state = g_GF_LaraStartAnim;
Lara_Animate(item);
g_Lara.extra_anim = 1;
g_Camera.type = CAM_CINEMATIC;
CINE_DATA *const cine_data = Camera_GetCineData();
cine_data->frame_idx = 0;
cine_data->position.pos = item->pos;
cine_data->position.rot = item->rot;
Camera_InvokeCinematic(item, 0, 0);
} else if ((g_Rooms[item->room_num].flags & RF_UNDERWATER)) {
g_Lara.water_status = LWS_UNDERWATER;
item->fall_speed = 0;
Expand Down
6 changes: 1 addition & 5 deletions src/tr2/game/objects/creatures/dragon.c
Original file line number Diff line number Diff line change
Expand Up @@ -118,11 +118,7 @@ static void M_PullDagger(ITEM *const lara_item, ITEM *const dragon_back_item)

Lara_SwapSingleMesh(LM_HAND_R, O_LARA_EXTRA);

g_Camera.type = CAM_CINEMATIC;
CINE_DATA *const cine_data = Camera_GetCineData();
cine_data->frame_idx = 0;
cine_data->position.pos = lara_item->pos;
cine_data->position.rot = lara_item->rot;
Camera_InvokeCinematic(lara_item, 0, 0);

M_MarkDragonDead(dragon_back_item);
}
Expand Down
6 changes: 1 addition & 5 deletions src/tr2/game/objects/general/final_level_counter.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,7 @@ static void M_PrepareCutscene(const int16_t item_num)
ITEM *const item = &g_Items[item_num];
Creature_Kill(item, 0, 0, LA_EXTRA_FINAL_ANIM);

g_Camera.type = CAM_CINEMATIC;
CINE_DATA *const cine_data = Camera_GetCineData();
cine_data->frame_idx = 428;
cine_data->position.pos = item->pos;
cine_data->position.rot = item->rot;
Camera_InvokeCinematic(item, 428, 0);
}

void FinalLevelCounter_Setup(void)
Expand Down

0 comments on commit 7a2ab3f

Please sign in to comment.