diff --git a/src/openrct2/libopenrct2.vcxproj b/src/openrct2/libopenrct2.vcxproj
index 68ce4d22c7..b139283bf4 100644
--- a/src/openrct2/libopenrct2.vcxproj
+++ b/src/openrct2/libopenrct2.vcxproj
@@ -851,6 +851,7 @@
+
diff --git a/src/openrct2/ride/CarEntry.cpp b/src/openrct2/ride/CarEntry.cpp
new file mode 100644
index 0000000000..670b192335
--- /dev/null
+++ b/src/openrct2/ride/CarEntry.cpp
@@ -0,0 +1,40 @@
+/*****************************************************************************
+ * Copyright (c) 2014-2023 OpenRCT2 developers
+ *
+ * For a complete list of all authors, please refer to contributors.md
+ * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
+ *
+ * OpenRCT2 is licensed under the GNU General Public License version 3.
+ *****************************************************************************/
+
+#include "CarEntry.h"
+
+#include "../entity/Yaw.hpp"
+
+#include
+
+uint32_t CarEntry::NumRotationSprites(SpriteGroupType spriteGroup) const
+{
+ return NumSpritesPrecision(SpriteGroups[static_cast(spriteGroup)].spritePrecision);
+}
+
+int32_t CarEntry::SpriteByYaw(int32_t yaw, SpriteGroupType spriteGroup) const
+{
+ return YawToPrecision(yaw, SpriteGroups[static_cast(spriteGroup)].spritePrecision);
+}
+
+bool CarEntry::GroupEnabled(SpriteGroupType spriteGroup) const
+{
+ return SpriteGroups[static_cast(spriteGroup)].Enabled();
+}
+
+uint32_t CarEntry::GroupImageId(SpriteGroupType spriteGroup) const
+{
+ return SpriteGroups[static_cast(spriteGroup)].imageId;
+}
+
+uint32_t CarEntry::SpriteOffset(SpriteGroupType spriteGroup, int32_t imageDirection, uint8_t rankIndex) const
+{
+ return ((SpriteByYaw(imageDirection, spriteGroup) + NumRotationSprites(spriteGroup) * rankIndex) * base_num_frames)
+ + GroupImageId(spriteGroup);
+}
diff --git a/src/openrct2/ride/VehiclePaint.cpp b/src/openrct2/ride/VehiclePaint.cpp
index ce1e53e1a6..c4755ae720 100644
--- a/src/openrct2/ride/VehiclePaint.cpp
+++ b/src/openrct2/ride/VehiclePaint.cpp
@@ -3741,29 +3741,3 @@ void Vehicle::Paint(PaintSession& session, int32_t imageDirection) const
break;
}
}
-
-uint32_t CarEntry::NumRotationSprites(SpriteGroupType spriteGroup) const
-{
- return NumSpritesPrecision(SpriteGroups[static_cast(spriteGroup)].spritePrecision);
-}
-
-int32_t CarEntry::SpriteByYaw(int32_t yaw, SpriteGroupType spriteGroup) const
-{
- return YawToPrecision(yaw, SpriteGroups[static_cast(spriteGroup)].spritePrecision);
-}
-
-bool CarEntry::GroupEnabled(SpriteGroupType spriteGroup) const
-{
- return SpriteGroups[static_cast(spriteGroup)].Enabled();
-}
-
-uint32_t CarEntry::GroupImageId(SpriteGroupType spriteGroup) const
-{
- return SpriteGroups[static_cast(spriteGroup)].imageId;
-}
-
-uint32_t CarEntry::SpriteOffset(SpriteGroupType spriteGroup, int32_t imageDirection, uint8_t rankIndex) const
-{
- return ((SpriteByYaw(imageDirection, spriteGroup) + NumRotationSprites(spriteGroup) * rankIndex) * base_num_frames)
- + GroupImageId(spriteGroup);
-}