update gCamera as the pointer is updated

This commit is contained in:
Isaac0-dev 2025-03-28 14:51:28 +10:00
parent 8feea0111e
commit d07e31de49
5 changed files with 21 additions and 8 deletions

View file

@ -534,6 +534,11 @@ void skip_camera_interpolation(void) {
gCamSkipInterp = 1;
}
static void set_gcamera(struct Camera *c) {
gCamera = c;
gCameraCObject->pointer = c;
}
/**
* Starts a camera shake triggered by an interaction
*/
@ -3170,7 +3175,7 @@ void update_camera(struct Camera *c) {
if (!c) { return; }
UNUSED u8 unused[24];
gCamera = c;
set_gcamera(c);
update_camera_hud_status(c);
if ((gOverrideFreezeCamera || get_first_person_enabled()) && !gDjuiInMainMenu) {
@ -3412,7 +3417,7 @@ void soft_reset_camera(struct Camera* c) {
*/
void reset_camera(struct Camera *c) {
if (!c) { return; }
gCamera = c;
set_gcamera(c);
gCameraMovementFlags = 0;
s2ndRotateFlags = 0;
sStatusFlags = 0;
@ -12205,7 +12210,7 @@ void romhack_camera_init_settings(void) {
} else if (configEnableRomhackCamera == RCE_ON) {
override = configRomhackCameraBowserFights ? RCO_ALL_INCLUDING_VANILLA : RCO_ALL_VANILLA_EXCEPT_BOWSER;
}
gRomhackCameraSettings.enable = override;
gCameraUseCourseSpecificSettings = (override == RCO_DISABLE && dynos_level_is_vanilla_level(gCurrLevelNum));
gRomhackCameraSettings.collisions = configRomhackCameraHasCollision;

View file

@ -23,6 +23,8 @@ int gSmLuaCPointers = 0;
int gSmLuaCObjectMetatable = 0;
int gSmLuaCPointerMetatable = 0;
CObject *gCameraCObject = NULL;
struct LuaObjectField* smlua_get_object_field_from_ot(struct LuaObjectTable* ot, const char* key) {
// binary search
s32 min = 0;
@ -775,7 +777,7 @@ void smlua_cobject_init_globals(void) {
EXPOSE_GLOBAL(LOT_NAMETAGSSETTINGS, gNametagsSettings);
EXPOSE_GLOBAL_PTR(LOT_CAMERA, gCamera);
gCameraCObject = smlua_push_object(L, LOT_CAMERA, gCamera, NULL); lua_setglobal(L, "gCamera");
}
void smlua_cobject_init_per_file_globals(const char* path) {

View file

@ -74,6 +74,8 @@ extern int gSmLuaCPointers;
extern int gSmLuaCObjectMetatable;
extern int gSmLuaCPointerMetatable;
extern CObject *gCameraCObject;
bool smlua_valid_lot(u16 lot);
bool smlua_valid_lvt(u16 lvt);
const char *smlua_get_lvt_name(u16 lvt);

View file

@ -346,7 +346,7 @@ bool packet_read_lnt(struct Packet* p, struct LSTNetworkType* lnt) {
///////////////////////////////////////////////////////////////////////////////////////////
void smlua_push_object(lua_State* L, u16 lot, void* p, void *extraInfo) {
CObject *smlua_push_object(lua_State* L, u16 lot, void* p, void *extraInfo) {
if (p == NULL) {
lua_pushnil(L);
return;
@ -379,9 +379,11 @@ void smlua_push_object(lua_State* L, u16 lot, void* p, void *extraInfo) {
lua_remove(L, -2); // Remove gSmLuaCObjects table
LUA_STACK_CHECK_END();
return cobject;
}
void smlua_push_pointer(lua_State* L, u16 lvt, void* p, void *extraInfo) {
CPointer *smlua_push_pointer(lua_State* L, u16 lvt, void* p, void *extraInfo) {
if (p == NULL) {
lua_pushnil(L);
return;
@ -413,6 +415,8 @@ void smlua_push_pointer(lua_State* L, u16 lvt, void* p, void *extraInfo) {
lua_settable(L, -4);
lua_remove(L, -2); // Remove gSmLuaCPointers table
LUA_STACK_CHECK_END();
return cpointer;
}
void smlua_push_integer_field(int index, const char* name, lua_Integer val) {

View file

@ -28,8 +28,8 @@ struct LSTNetworkType smlua_to_lnt(lua_State* L, int index);
bool packet_write_lnt(struct Packet* p, struct LSTNetworkType* lnt);
bool packet_read_lnt(struct Packet* p, struct LSTNetworkType* lnt);
void smlua_push_object(lua_State* L, u16 lot, void* p, void *extraInfo);
void smlua_push_pointer(lua_State* L, u16 lvt, void* p, void *extraInfo);
CObject *smlua_push_object(lua_State* L, u16 lot, void* p, void *extraInfo);
CPointer *smlua_push_pointer(lua_State* L, u16 lvt, void* p, void *extraInfo);
void smlua_push_integer_field(int index, const char* name, lua_Integer val);
void smlua_push_number_field(int index, const char* name, lua_Number val);
void smlua_push_string_field(int index, const char* name, const char* val);