mirror of
https://github.com/HarbourMasters/SpaghettiKart
synced 2026-07-07 14:13:58 -04:00
Fix freecam camera
This commit is contained in:
+2
-2
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+17
-5
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
+2
-2
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user