diff --git a/src/game/camera.c b/src/game/camera.c index f8cf1b460..e15e82643 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -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; diff --git a/src/pc/lua/smlua_cobject.c b/src/pc/lua/smlua_cobject.c index f8b6a0a32..fac9b1c5b 100644 --- a/src/pc/lua/smlua_cobject.c +++ b/src/pc/lua/smlua_cobject.c @@ -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) { diff --git a/src/pc/lua/smlua_cobject.h b/src/pc/lua/smlua_cobject.h index 717240798..8e1ba9aec 100644 --- a/src/pc/lua/smlua_cobject.h +++ b/src/pc/lua/smlua_cobject.h @@ -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); diff --git a/src/pc/lua/smlua_utils.c b/src/pc/lua/smlua_utils.c index 94bbb7dc7..8b740bb64 100644 --- a/src/pc/lua/smlua_utils.c +++ b/src/pc/lua/smlua_utils.c @@ -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) { diff --git a/src/pc/lua/smlua_utils.h b/src/pc/lua/smlua_utils.h index 15080fb67..09b60797f 100644 --- a/src/pc/lua/smlua_utils.h +++ b/src/pc/lua/smlua_utils.h @@ -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);