diff --git a/src/camera.c b/src/camera.c index 6620c3ac0..434ad25c2 100644 --- a/src/camera.c +++ b/src/camera.c @@ -1134,8 +1134,8 @@ void func_8001EE98(Player* player, Camera* camera, s8 index) { func_8001E8E8(camera, player, index); break; } - //freecam(camera, player, index); // Runs func_8001E45C when freecam is disabled - func_8001E45C(camera, player, index); + freecam(camera, player, index); // Runs func_8001E45C when freecam is disabled + //func_8001E45C(camera, player, index); break; case 8: func_8001E0C4(camera, player, index); diff --git a/src/enhancements/freecam/freecam.cpp b/src/enhancements/freecam/freecam.cpp index 4efc5fcfb..36059c960 100644 --- a/src/enhancements/freecam/freecam.cpp +++ b/src/enhancements/freecam/freecam.cpp @@ -86,7 +86,9 @@ void freecam(Camera* camera, Player* player, s8 index) { if (enabled && (player == gPlayerOne)) { freecam_loop(camera, player, index); } else { - func_8001EE98(gPlayerOneCopy, camera, index); + func_8001E45C(camera, player, index); + // Required if freecam were to use its own camera instead of borrowing the player camera + //func_8001EE98(gPlayerOneCopy, camera, index); } } diff --git a/src/main.c b/src/main.c index c3f6f27d7..7b28393d1 100644 --- a/src/main.c +++ b/src/main.c @@ -637,6 +637,12 @@ void game_init_clear_framebuffer(void) { clear_framebuffer(0); } +//! @deprecated +// This function was made to tick the game logic at native 60 fps. +// However, many game objects are not in that special tick loop and run at native 30fps. +// Thus adding `if (gTickVisuals) { // stuff here }` would prevent double speed and allow ticking visuals once every 30 fps. +// This does not however, create extra interpolated frames. Whereas a possible solution, it is not the best solution. +// This function should be cleaned up and removed, since frame interpolation now exists. void calculate_updaterate(void) { static u32 prevtime = 0; static u32 remainder = 0; @@ -695,6 +701,7 @@ void calculate_updaterate(void) { visualsAccumulator += total; // Increment for each frame if (visualsAccumulator >= visualsUpdateInterval) { // Check if it's time to update visuals visualsAccumulator -= visualsUpdateInterval; + // gTickVisuals <-- Goes here to use the native 60fps system } gTickVisuals = 1; // Perform visual update } @@ -759,13 +766,18 @@ void process_game_tick(void) { func_800382DC(); } + + // tick camera // This looks like it should be in the switch. // But it needs to be here for player 1 to work in all modes. - if (CVarGetInteger("gFreecam", 0) == true) { - freecam(gFreecamCamera, gPlayerOneCopy, 0); - } else { - func_8001EE98(gPlayerOneCopy, camera1, 0); - } + func_8001EE98(gPlayerOneCopy, camera1, 0); + // Required if freecam was to have a new camera + //if (CVarGetInteger("gFreecam", 0) == true) { + // freecam(gFreecamCamera, gPlayerOneCopy, 0); + //} else { + + //func_8001EE98(gPlayerOneCopy, camera1, 0); + //} // Editor requires this so the camera keeps moving while the game is paused. if (gIsEditorPaused == true) { diff --git a/src/racing/skybox_and_splitscreen.c b/src/racing/skybox_and_splitscreen.c index edbe545c8..eecac8375 100644 --- a/src/racing/skybox_and_splitscreen.c +++ b/src/racing/skybox_and_splitscreen.c @@ -761,10 +761,11 @@ void setup_camera(Camera* camera, s32 playerId, s32 cameraId, struct UnkStruct_8 Mat4 matrix; u16 perspNorm; - if (CVarGetInteger("gFreecam", 0) == true) { - freecam_render_setup(gFreecamCamera); - return; - } + // This allows freecam to create a new separate camera + // if (CVarGetInteger("gFreecam", 0) == true) { + // freecam_render_setup(gFreecamCamera); + // return; + // } // Setup perspective (camera movement) FrameInterpolation_RecordOpenChild("camera", @@ -848,13 +849,14 @@ void render_screens(s32 mode, s32 cameraId, s32 playerId) { struct UnkStruct_800DC5EC* screen = &D_8015F480[screenId]; Camera* camera; - if (CVarGetInteger("gFreecam", 0) == true) { - camera = &gFreecamCamera; - cameraId = 4; - } else { + // Required for freecam to have its own camera + //if (CVarGetInteger("gFreecam", 0) == true) { + // camera = &gFreecamCamera; + // cameraId = 4; + //} else { camera = &cameras[cameraId]; - } - + //} + if (screenMode == SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL) { gSPSetGeometryMode(gDisplayListHead++, G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH); } diff --git a/src/spawn_players.c b/src/spawn_players.c index 96b6dcd2e..f633f550d 100644 --- a/src/spawn_players.c +++ b/src/spawn_players.c @@ -1290,8 +1290,8 @@ void func_8003D080(void) { } } - // Init free cam - freecam_init(player->pos[0], player->pos[1], player->pos[2], player->rotation[1], 1, 4); + // Init freecam + //freecam_init(player->pos[0], player->pos[1], player->pos[2], player->rotation[1], 1, 4); switch (gActiveScreenMode) { case SCREEN_MODE_1P: