diff options
| author | MegaMech <7255464+MegaMech@users.noreply.github.com> | 2025-05-21 21:02:32 -0600 |
|---|---|---|
| committer | MegaMech <7255464+MegaMech@users.noreply.github.com> | 2025-05-21 21:02:32 -0600 |
| commit | 756a05ad4d180f63b49f7db57891b8e7569a8328 (patch) | |
| tree | 5dbd56a79436f31e4110fcf63cf120ddf5eaf048 | |
| parent | c10361ea799c5e4ad3c00ebfe0c4d5aba2670dc1 (diff) | |
Fix multiplayer cameras
| -rw-r--r-- | src/main.c | 23 | ||||
| -rw-r--r-- | src/racing/skybox_and_splitscreen.c | 2 | ||||
| -rw-r--r-- | src/spawn_players.c | 6 |
3 files changed, 17 insertions, 14 deletions
diff --git a/src/main.c b/src/main.c index cd8b4f677..c3f6f27d7 100644 --- a/src/main.c +++ b/src/main.c @@ -759,18 +759,21 @@ void process_game_tick(void) { func_800382DC(); } + // 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); + } + + // Editor requires this so the camera keeps moving while the game is paused. + if (gIsEditorPaused == true) { + return; + } + switch(gActiveScreenMode) { case SCREEN_MODE_1P: - 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) { - return; - } func_80028F70(); break; case SCREEN_MODE_2P_SPLITSCREEN_VERTICAL: diff --git a/src/racing/skybox_and_splitscreen.c b/src/racing/skybox_and_splitscreen.c index 820d83ecb..9a31c378a 100644 --- a/src/racing/skybox_and_splitscreen.c +++ b/src/racing/skybox_and_splitscreen.c @@ -767,7 +767,7 @@ void setup_camera(Camera* camera, s32 playerId, s32 cameraId, struct UnkStruct_8 } // Setup perspective (camera movement) - FrameInterpolation_RecordOpenChild("camera", FrameInterpolation_GetCameraEpoch()); + FrameInterpolation_RecordOpenChild("camera", (FrameInterpolation_GetCameraEpoch() | (((playerId | cameraId) << 8)))); guPerspective(&gGfxPool->mtxPersp[cameraId], &perspNorm, gCameraZoom[cameraId], gScreenAspect, CM_GetProps()->NearPersp, CM_GetProps()->FarPersp, 1.0f); gSPPerspNormalize(gDisplayListHead++, perspNorm); diff --git a/src/spawn_players.c b/src/spawn_players.c index 569042ca6..92185f3d9 100644 --- a/src/spawn_players.c +++ b/src/spawn_players.c @@ -1195,9 +1195,6 @@ void func_8003D080(void) { func_8003C0F0(); } - // Init free cam - freecam_init(player->pos[0], player->pos[1], player->pos[2], player->rotation[1], 1, 4); - if (!gDemoMode) { switch (gActiveScreenMode) { case SCREEN_MODE_1P: @@ -1293,6 +1290,9 @@ void func_8003D080(void) { } } + // Init free cam + freecam_init(player->pos[0], player->pos[1], player->pos[2], player->rotation[1], 1, 4); + switch (gActiveScreenMode) { case SCREEN_MODE_1P: func_8003CD98(gPlayerOneCopy, camera1, 0, 0); // sic |
