diff --git a/.gitignore b/.gitignore index 1cf40e5d3..5aca5ac34 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ packages/ *.wav *.trc *.str +*.ten diff --git a/TombEngine.sln b/TombEngine.sln index ef5618889..bc458143a 100644 --- a/TombEngine.sln +++ b/TombEngine.sln @@ -14,6 +14,7 @@ Global EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x64.ActiveCfg = Debug|Win32 + {15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x64.Build.0 = Debug|Win32 {15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x86.ActiveCfg = Debug|Win32 {15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x86.Build.0 = Debug|Win32 {15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Release|x64.ActiveCfg = Release|Win32 diff --git a/TombEngine/Game/Lara/lara_objects.cpp b/TombEngine/Game/Lara/lara_objects.cpp index abbcb89ed..4c1afb7be 100644 --- a/TombEngine/Game/Lara/lara_objects.cpp +++ b/TombEngine/Game/Lara/lara_objects.cpp @@ -171,7 +171,6 @@ void lara_as_pushable_push(ItemInfo* item, CollisionInfo* coll) Camera.targetAngle = ANGLE(35.0f); Camera.targetElevation = -ANGLE(25.0f); Camera.flags = CF_FOLLOW_CENTER; - Camera.laraNode = LM_TORSO; } // State: LS_PUSHABLE_PULL (37) @@ -186,7 +185,6 @@ void lara_as_pushable_pull(ItemInfo* item, CollisionInfo* coll) Camera.targetAngle = ANGLE(35.0f); Camera.targetElevation = -ANGLE(25.0f); Camera.flags = CF_FOLLOW_CENTER; - Camera.laraNode = LM_TORSO; } // State: LS_PUSHABLE_GRAB (38) diff --git a/TombEngine/Game/Lara/lara_overhang.cpp b/TombEngine/Game/Lara/lara_overhang.cpp index 87176edf2..6919180fc 100644 --- a/TombEngine/Game/Lara/lara_overhang.cpp +++ b/TombEngine/Game/Lara/lara_overhang.cpp @@ -445,7 +445,7 @@ void lara_as_slopeclimb(ItemInfo* item, CollisionInfo* coll) else item->Pose.Orientation.x++; - Camera.flags = 1; + Camera.flags = CF_FOLLOW_CENTER; if (Camera.type != CameraType::Chase) return; @@ -464,7 +464,7 @@ void lara_as_slopefall(ItemInfo* item, CollisionInfo* coll) else item->Pose.Orientation.x++; - Camera.flags = 1; + Camera.flags = CF_FOLLOW_CENTER; if (Camera.type != CameraType::Chase) return; @@ -629,7 +629,7 @@ void lara_as_slopeclimbup(ItemInfo* item, CollisionInfo* coll) else item->Pose.Orientation.x++; - Camera.flags = 1; + Camera.flags = CF_FOLLOW_CENTER; if (Camera.type != CameraType::Chase) return; // If camera mode isn't chase (0) then don't change camera angles. @@ -660,7 +660,7 @@ void lara_as_slopeclimbdown(ItemInfo* item, CollisionInfo* coll) else item->Pose.Orientation.x++; - Camera.flags = 1; + Camera.flags = CF_FOLLOW_CENTER; if (Camera.type != CameraType::Chase) return; @@ -695,7 +695,7 @@ void lara_as_sclimbstart(ItemInfo* item, CollisionInfo* coll) if (frac > 1.0f) frac = 1.0f; - Camera.flags = 1; + Camera.flags = CF_FOLLOW_CENTER; int distance = TestLaraWall(item, 0, SECTOR(1.5f), 0) ? SECTOR(1) : CLICK(6.5f); @@ -717,7 +717,7 @@ void lara_as_sclimbstart(ItemInfo* item, CollisionInfo* coll) } else// if (item->animNumber == LA_OVERHANG_MONKEY_SLOPE_CONCAVE) { - //Camera.flags = 1; + //Camera.flags = CF_FOLLOW_CENTER; Camera.targetElevation = -ANGLE(11.25f); Camera.targetDistance = CLICK(6.5f); Camera.speed = 15; @@ -736,7 +736,7 @@ void lara_as_sclimbstop(ItemInfo* item, CollisionInfo* coll) // Following camera effect during the slope to underlying monkey transition. if (item->Animation.AnimNumber == LA_OVERHANG_SLOPE_MONKEY_CONVEX) { - Camera.flags = 1; + Camera.flags = CF_FOLLOW_CENTER; Camera.targetDistance = CLICK(6.5f); Camera.targetElevation = ANGLE(11.25f); Camera.targetspeed = 15; @@ -751,7 +751,7 @@ void lara_as_sclimbstop(ItemInfo* item, CollisionInfo* coll) if (frac > 1.0f) frac = 1.0f; - Camera.flags = 1; + Camera.flags = CF_FOLLOW_CENTER; if (item->Animation.FrameNumber < g_Level.Anims[item->Animation.AnimNumber].frameEnd) { diff --git a/TombEngine/Game/camera.cpp b/TombEngine/Game/camera.cpp index 96ae6bc16..38f49ec7d 100644 --- a/TombEngine/Game/camera.cpp +++ b/TombEngine/Game/camera.cpp @@ -142,7 +142,7 @@ void InitialiseCamera() Camera.numberFrames = 1; Camera.type = CameraType::Chase; Camera.speed = 1; - Camera.flags = CF_FOLLOW_CENTER; + Camera.flags = CF_NONE; Camera.bounce = 0; Camera.number = -1; Camera.fixedCamera = false; @@ -1544,20 +1544,24 @@ void CalculateCamera() Camera.target.roomNumber = item->RoomNumber; Camera.target.y = y; - auto shift = (bounds->X1 + bounds->X2 + bounds->Z1 + bounds->Z2) / 4; - x = item->Pose.Position.x + shift * phd_sin(item->Pose.Orientation.y); - z = item->Pose.Position.z + shift * phd_cos(item->Pose.Orientation.y); + x = item->Pose.Position.x; + z = item->Pose.Position.z; + + if (Camera.flags == CF_FOLLOW_CENTER) //Troye Aug. 7th 2022 + { + auto shift = (bounds->Z1 + bounds->Z2) / 2; + x += shift * phd_sin(item->Pose.Orientation.y); + z += shift * phd_cos(item->Pose.Orientation.y); + } Camera.target.x = x; Camera.target.z = z; - if (item->ObjectNumber == ID_LARA) - { + // CF_FOLLOW_CENTER sets target on the item, ConfirmCameraTargetPos overrides this target, + // hence the flag check. Troye Aug. 7th 2022 + + if (item->IsLara() && Camera.flags != CF_FOLLOW_CENTER) ConfirmCameraTargetPos(); - x = Camera.target.x; - y = Camera.target.y; - z = Camera.target.z; - } if (fixedCamera == Camera.fixedCamera) { @@ -2125,4 +2129,4 @@ void HandleOptics() ResetLaraFlex(LaraItem); TrInput &= ~IN_LOOK; -} \ No newline at end of file +} diff --git a/TombEngine/Game/camera.h b/TombEngine/Game/camera.h index 0885b0b43..68eaa6578 100644 --- a/TombEngine/Game/camera.h +++ b/TombEngine/Game/camera.h @@ -43,6 +43,7 @@ struct CAMERA_INFO enum CAMERA_FLAGS { + CF_NONE = 0, CF_FOLLOW_CENTER = 1, CF_NO_CHUNKY = 2, CF_CHASE_OBJECT = 3, diff --git a/TombEngine/Objects/TR3/Entity/tr3_trex.cpp b/TombEngine/Objects/TR3/Entity/tr3_trex.cpp index 6c4fa0a14..81e429469 100644 --- a/TombEngine/Objects/TR3/Entity/tr3_trex.cpp +++ b/TombEngine/Objects/TR3/Entity/tr3_trex.cpp @@ -69,7 +69,7 @@ namespace TEN::Entities::TR3 Lara.Control.HandStatus = HandStatus::Busy; Lara.Control.Weapon.GunType = LaraWeaponType::None; - Camera.flags = 1; + Camera.flags = CF_FOLLOW_CENTER; Camera.targetAngle = ANGLE(170.0f); Camera.targetElevation = -ANGLE(25.0f); }