diff options
author | Piotr Kubaj <pkubaj@FreeBSD.org> | 2020-03-29 22:32:56 +0000 |
---|---|---|
committer | Piotr Kubaj <pkubaj@FreeBSD.org> | 2020-03-29 22:32:56 +0000 |
commit | 14b5cdfc26bc56d8037c7edee63435b29b17f354 (patch) | |
tree | ed0ea0c06c3dadbe8104c267f2945d44494f9875 /games/openrct2/files/patch-bigendian | |
parent | d21081468a14c79812376c86aaed86275543a577 (diff) | |
download | ports-14b5cdfc26bc56d8037c7edee63435b29b17f354.tar.gz ports-14b5cdfc26bc56d8037c7edee63435b29b17f354.zip |
games/openrct2: update to 0.2.5
Notes
Notes:
svn path=/head/; revision=529844
Diffstat (limited to 'games/openrct2/files/patch-bigendian')
-rw-r--r-- | games/openrct2/files/patch-bigendian | 707 |
1 files changed, 0 insertions, 707 deletions
diff --git a/games/openrct2/files/patch-bigendian b/games/openrct2/files/patch-bigendian deleted file mode 100644 index 5c30fdef22cc..000000000000 --- a/games/openrct2/files/patch-bigendian +++ /dev/null @@ -1,707 +0,0 @@ ---- src/openrct2-ui/input/KeyboardShortcuts.cpp.orig 2019-10-28 20:18:47 UTC -+++ src/openrct2-ui/input/KeyboardShortcuts.cpp -@@ -19,6 +19,7 @@ - #include <openrct2/core/Path.hpp> - #include <openrct2/core/String.hpp> - #include <openrct2/localisation/Localisation.h> -+#include <openrct2/util/Endian.h> - - using namespace OpenRCT2; - using namespace OpenRCT2::Input; -@@ -55,14 +56,14 @@ bool KeyboardShortcuts::Load() - if (File::Exists(path)) - { - auto fs = FileStream(path, FILE_MODE_OPEN); -- uint16_t version = fs.ReadValue<uint16_t>(); -+ uint16_t version = ORCT_SwapLEu16(fs.ReadValue<uint16_t>()); - if (version == KeyboardShortcuts::CURRENT_FILE_VERSION) - { - int32_t numShortcutsInFile = (fs.GetLength() - sizeof(uint16_t)) / sizeof(uint16_t); - int32_t numShortcutsToRead = std::min<int32_t>(SHORTCUT_COUNT, numShortcutsInFile); - for (int32_t i = 0; i < numShortcutsToRead; i++) - { -- _keys[i] = fs.ReadValue<uint16_t>(); -+ _keys[i] = ORCT_SwapLEu16(fs.ReadValue<uint16_t>()); - } - result = true; - } ---- src/openrct2/audio/Audio.cpp.orig 2019-10-28 20:18:47 UTC -+++ src/openrct2/audio/Audio.cpp -@@ -23,6 +23,7 @@ - #include "../peep/Peep.h" - #include "../ride/Ride.h" - #include "../ui/UiContext.h" -+#include "../util/Endian.h" - #include "../util/Util.h" - #include "AudioContext.h" - #include "AudioMixer.h" -@@ -344,7 +345,7 @@ void audio_init_ride_sounds_and_info() - try - { - auto fs = FileStream(path, FILE_MODE_OPEN); -- uint32_t head = fs.ReadValue<uint32_t>(); -+ uint32_t head = ORCT_SwapLEu32(fs.ReadValue<uint32_t>()); - if (head == 0x78787878) - { - rideMusicInfo.length = 0; ---- src/openrct2/common.h.orig 2019-10-28 20:18:47 UTC -+++ src/openrct2/common.h -@@ -71,6 +71,10 @@ const constexpr auto ror64 = ror<uint64_t>; - # define RCT2_ENDIANESS __ORDER_LITTLE_ENDIAN__ - # define LOBYTE(w) ((uint8_t)(w)) - # define HIBYTE(w) ((uint8_t)(((uint16_t)(w) >> 8) & 0xFF)) -+# else -+# define RCT2_ENDIANESS __ORDER_BIG_ENDIAN__ -+# define HIBYTE(w) ((uint8_t)(w)) -+# define LOBYTE(w) ((uint8_t)(((uint16_t)(w) >> 8) & 0xFF)) - # endif // __BYTE_ORDER__ - - # ifndef RCT2_ENDIANESS ---- src/openrct2/core/FileIndex.hpp.orig 2019-10-28 20:18:47 UTC -+++ src/openrct2/core/FileIndex.hpp -@@ -10,6 +10,7 @@ - #pragma once - - #include "../common.h" -+#include "../util/Endian.h" - #include "Console.hpp" - #include "File.h" - #include "FileScanner.h" -@@ -265,6 +266,14 @@ template<typename TItem> class FileIndex (private) - - // Read header, check if we need to re-scan - auto header = fs.ReadValue<FileIndexHeader>(); -+ header.HeaderSize = ORCT_SwapLEu32(header.HeaderSize); -+ header.MagicNumber = ORCT_SwapLEu32(header.MagicNumber); -+ header.LanguageId = ORCT_SwapLEu16(header.LanguageId); -+ header.NumItems = ORCT_SwapLEu32(header.NumItems); -+ header.Stats.TotalFiles = ORCT_SwapLEu32(header.Stats.TotalFiles); -+ header.Stats.TotalFileSize = ORCT_SwapLEu64(header.Stats.TotalFileSize); -+ header.Stats.FileDateModifiedChecksum = ORCT_SwapLEu32(header.Stats.FileDateModifiedChecksum); -+ header.Stats.PathChecksum = ORCT_SwapLEu32(header.Stats.PathChecksum); - if (header.HeaderSize == sizeof(FileIndexHeader) && header.MagicNumber == _magicNumber - && header.VersionA == FILE_INDEX_VERSION && header.VersionB == _version && header.LanguageId == language - && header.Stats.TotalFiles == stats.TotalFiles && header.Stats.TotalFileSize == stats.TotalFileSize ---- src/openrct2/drawing/Drawing.Sprite.cpp.orig 2019-10-28 20:18:47 UTC -+++ src/openrct2/drawing/Drawing.Sprite.cpp -@@ -16,6 +16,7 @@ - #include "../platform/platform.h" - #include "../sprites.h" - #include "../ui/UiContext.h" -+#include "../util/Endian.h" - #include "../util/Util.h" - #include "Drawing.h" - -@@ -238,6 +239,8 @@ bool gfx_load_g1(const IPlatformEnvironment& env) - auto path = Path::Combine(env.GetDirectoryPath(DIRBASE::RCT2, DIRID::DATA), "g1.dat"); - auto fs = FileStream(path, FILE_MODE_OPEN); - _g1.header = fs.ReadValue<rct_g1_header>(); -+ _g1.header.num_entries = ORCT_SwapLEu32(_g1.header.num_entries); -+ _g1.header.total_size = ORCT_SwapLEu32(_g1.header.total_size); - - log_verbose("g1.dat, number of entries: %u", _g1.header.num_entries); - -@@ -310,6 +313,8 @@ bool gfx_load_g2() - { - auto fs = FileStream(path, FILE_MODE_OPEN); - _g2.header = fs.ReadValue<rct_g1_header>(); -+ _g2.header.num_entries = ORCT_SwapLEu32(_g2.header.num_entries); -+ _g2.header.total_size = ORCT_SwapLEu32(_g2.header.total_size); - - // Read element headers - _g2.elements.resize(_g2.header.num_entries); ---- src/openrct2/object/BannerObject.cpp.orig 2019-10-28 20:18:47 UTC -+++ src/openrct2/object/BannerObject.cpp -@@ -14,6 +14,7 @@ - #include "../localisation/Language.h" - #include "../object/Object.h" - #include "../object/ObjectRepository.h" -+#include "../util/Endian.h" - #include "ObjectJsonHelpers.h" - #include "ObjectList.h" - -@@ -22,13 +23,14 @@ void BannerObject::ReadLegacy(IReadObjectContext* cont - stream->Seek(6, STREAM_SEEK_CURRENT); - _legacyType.banner.scrolling_mode = stream->ReadValue<uint8_t>(); - _legacyType.banner.flags = stream->ReadValue<uint8_t>(); -- _legacyType.banner.price = stream->ReadValue<int16_t>(); -+ _legacyType.banner.price = ORCT_SwapLEi16(stream->ReadValue<int16_t>()); - _legacyType.banner.scenery_tab_id = stream->ReadValue<uint8_t>(); - stream->Seek(1, STREAM_SEEK_CURRENT); - - GetStringTable().Read(context, stream, OBJ_STRING_ID_NAME); - - rct_object_entry sgEntry = stream->ReadValue<rct_object_entry>(); -+ sgEntry.flags = ORCT_SwapLEu32(sgEntry.flags); - SetPrimarySceneryGroup(&sgEntry); - - GetImageTable().Read(context, stream); ---- src/openrct2/object/FootpathItemObject.cpp.orig 2019-10-28 20:18:47 UTC -+++ src/openrct2/object/FootpathItemObject.cpp -@@ -15,6 +15,7 @@ - #include "../localisation/Localisation.h" - #include "../object/Object.h" - #include "../object/ObjectRepository.h" -+#include "../util/Endian.h" - #include "ObjectJsonHelpers.h" - #include "ObjectList.h" - -@@ -23,16 +24,17 @@ - void FootpathItemObject::ReadLegacy(IReadObjectContext* context, IStream* stream) - { - stream->Seek(6, STREAM_SEEK_CURRENT); -- _legacyType.path_bit.flags = stream->ReadValue<uint16_t>(); -+ _legacyType.path_bit.flags = ORCT_SwapLEu16(stream->ReadValue<uint16_t>()); - _legacyType.path_bit.draw_type = stream->ReadValue<uint8_t>(); - _legacyType.path_bit.tool_id = stream->ReadValue<uint8_t>(); -- _legacyType.path_bit.price = stream->ReadValue<int16_t>(); -+ _legacyType.path_bit.price = ORCT_SwapLEi16(stream->ReadValue<int16_t>()); - _legacyType.path_bit.scenery_tab_id = stream->ReadValue<uint8_t>(); - stream->Seek(1, STREAM_SEEK_CURRENT); - - GetStringTable().Read(context, stream, OBJ_STRING_ID_NAME); - - rct_object_entry sgEntry = stream->ReadValue<rct_object_entry>(); -+ sgEntry.flags = ORCT_SwapLEu32(sgEntry.flags); - SetPrimarySceneryGroup(&sgEntry); - - GetImageTable().Read(context, stream); ---- src/openrct2/object/ImageTable.cpp.orig 2019-10-28 20:18:47 UTC -+++ src/openrct2/object/ImageTable.cpp -@@ -11,6 +11,7 @@ - - #include "../OpenRCT2.h" - #include "../core/IStream.hpp" -+#include "../util/Endian.h" - #include "Object.h" - - #include <algorithm> -@@ -37,8 +38,8 @@ void ImageTable::Read(IReadObjectContext* context, ISt - - try - { -- uint32_t numImages = stream->ReadValue<uint32_t>(); -- uint32_t imageDataSize = stream->ReadValue<uint32_t>(); -+ uint32_t numImages = ORCT_SwapLEu32(stream->ReadValue<uint32_t>()); -+ uint32_t imageDataSize = ORCT_SwapLEu32(stream->ReadValue<uint32_t>()); - - uint64_t headerTableSize = numImages * 16; - uint64_t remainingBytes = stream->GetLength() - stream->GetPosition() - headerTableSize; -@@ -63,15 +64,15 @@ void ImageTable::Read(IReadObjectContext* context, ISt - { - rct_g1_element g1Element; - -- uintptr_t imageDataOffset = (uintptr_t)stream->ReadValue<uint32_t>(); -+ uintptr_t imageDataOffset = ORCT_SwapLEu32((uintptr_t)stream->ReadValue<uint32_t>()); - g1Element.offset = (uint8_t*)(imageDataBase + imageDataOffset); - -- g1Element.width = stream->ReadValue<int16_t>(); -- g1Element.height = stream->ReadValue<int16_t>(); -- g1Element.x_offset = stream->ReadValue<int16_t>(); -- g1Element.y_offset = stream->ReadValue<int16_t>(); -- g1Element.flags = stream->ReadValue<uint16_t>(); -- g1Element.zoomed_offset = stream->ReadValue<uint16_t>(); -+ g1Element.width = ORCT_SwapLEi16(stream->ReadValue<int16_t>()); -+ g1Element.height = ORCT_SwapLEi16(stream->ReadValue<int16_t>()); -+ g1Element.x_offset = ORCT_SwapLEi16(stream->ReadValue<int16_t>()); -+ g1Element.y_offset = ORCT_SwapLEi16(stream->ReadValue<int16_t>()); -+ g1Element.flags = ORCT_SwapLEu16(stream->ReadValue<uint16_t>()); -+ g1Element.zoomed_offset = ORCT_SwapLEu16(stream->ReadValue<uint16_t>()); - - newEntries.push_back(g1Element); - } ---- src/openrct2/object/LargeSceneryObject.cpp.orig 2019-10-28 20:18:47 UTC -+++ src/openrct2/object/LargeSceneryObject.cpp -@@ -16,6 +16,7 @@ - #include "../drawing/Drawing.h" - #include "../interface/Cursors.h" - #include "../localisation/Language.h" -+#include "../util/Endian.h" - #include "../world/Banner.h" - #include "../world/Location.hpp" - #include "ObjectJsonHelpers.h" -@@ -28,8 +29,8 @@ void LargeSceneryObject::ReadLegacy(IReadObjectContext - stream->Seek(6, STREAM_SEEK_CURRENT); - _legacyType.large_scenery.tool_id = stream->ReadValue<uint8_t>(); - _legacyType.large_scenery.flags = stream->ReadValue<uint8_t>(); -- _legacyType.large_scenery.price = stream->ReadValue<int16_t>(); -- _legacyType.large_scenery.removal_price = stream->ReadValue<int16_t>(); -+ _legacyType.large_scenery.price = ORCT_SwapLEi16(stream->ReadValue<int16_t>()); -+ _legacyType.large_scenery.removal_price = ORCT_SwapLEi16(stream->ReadValue<int16_t>()); - stream->Seek(5, STREAM_SEEK_CURRENT); - _legacyType.large_scenery.scenery_tab_id = 0xFF; - _legacyType.large_scenery.scrolling_mode = stream->ReadValue<uint8_t>(); -@@ -38,6 +39,7 @@ void LargeSceneryObject::ReadLegacy(IReadObjectContext - GetStringTable().Read(context, stream, OBJ_STRING_ID_NAME); - - rct_object_entry sgEntry = stream->ReadValue<rct_object_entry>(); -+ sgEntry.flags = ORCT_SwapLEu32(sgEntry.flags); - SetPrimarySceneryGroup(&sgEntry); - - if (_legacyType.large_scenery.flags & LARGE_SCENERY_FLAG_3D_TEXT) -@@ -112,10 +114,17 @@ void LargeSceneryObject::DrawPreview(rct_drawpixelinfo - std::vector<rct_large_scenery_tile> LargeSceneryObject::ReadTiles(IStream* stream) - { - auto tiles = std::vector<rct_large_scenery_tile>(); -+ // Note: no need to swap the value here... - while (stream->ReadValue<uint16_t>() != 0xFFFF) - { - stream->Seek(-2, STREAM_SEEK_CURRENT); -+ - auto tile = stream->ReadValue<rct_large_scenery_tile>(); -+ tile.x_offset = ORCT_SwapLEi16(tile.x_offset); -+ tile.y_offset = ORCT_SwapLEi16(tile.y_offset); -+ tile.z_offset = ORCT_SwapLEi16(tile.z_offset); -+ tile.z_clearance = ORCT_SwapLEi16(tile.z_clearance); -+ tile.flags = ORCT_SwapLEi16(tile.flags); - tiles.push_back(tile); - } - tiles.push_back({ -1, -1, -1, 255, 0xFFFF }); ---- src/openrct2/object/ObjectFactory.cpp.orig 2019-10-28 20:18:47 UTC -+++ src/openrct2/object/ObjectFactory.cpp -@@ -20,6 +20,7 @@ - #include "../core/String.hpp" - #include "../core/Zip.h" - #include "../rct12/SawyerChunkReader.h" -+#include "../util/Endian.h" - #include "BannerObject.h" - #include "EntranceObject.h" - #include "FootpathItemObject.h" ---- src/openrct2/object/ObjectRepository.cpp.orig 2019-10-28 20:18:47 UTC -+++ src/openrct2/object/ObjectRepository.cpp -@@ -29,6 +29,7 @@ - #include "../rct12/SawyerChunkReader.h" - #include "../rct12/SawyerChunkWriter.h" - #include "../scenario/ScenarioRepository.h" -+#include "../util/Endian.h" - #include "../util/SawyerCoding.h" - #include "../util/Util.h" - #include "Object.h" -@@ -161,6 +162,7 @@ class ObjectFileIndex final : public FileIndex<ObjectR - ObjectRepositoryItem item; - - item.ObjectEntry = stream->ReadValue<rct_object_entry>(); -+ item.ObjectEntry.flags = ORCT_SwapLEu32(item.ObjectEntry.flags); - item.Path = stream->ReadStdString(); - item.Name = stream->ReadStdString(); - auto sourceLength = stream->ReadValue<uint8_t>(); -@@ -186,11 +188,12 @@ class ObjectFileIndex final : public FileIndex<ObjectR - break; - case OBJECT_TYPE_SCENERY_GROUP: - { -- auto numEntries = stream->ReadValue<uint16_t>(); -+ auto numEntries = ORCT_SwapLEu16(stream->ReadValue<uint16_t>()); - item.SceneryGroupInfo.Entries = std::vector<rct_object_entry>(numEntries); - for (size_t i = 0; i < numEntries; i++) - { - item.SceneryGroupInfo.Entries[i] = stream->ReadValue<rct_object_entry>(); -+ item.SceneryGroupInfo.Entries[i].flags = ORCT_SwapLEu32(item.SceneryGroupInfo.Entries[i].flags); - } - break; - } -@@ -363,6 +366,7 @@ class ObjectRepository final : public IObjectRepositor - - // Check if we already have this object - rct_object_entry entry = stream->ReadValue<rct_object_entry>(); -+ entry.flags = ORCT_SwapLEu32(entry.flags); - if (FindObject(&entry) != nullptr) - { - chunkReader.SkipChunk(); -@@ -622,6 +626,7 @@ class ObjectRepository final : public IObjectRepositor - // Read object data from file - auto fs = FileStream(item->Path, FILE_MODE_OPEN); - auto fileEntry = fs.ReadValue<rct_object_entry>(); -+ fileEntry.flags = ORCT_SwapLEu32(fileEntry.flags); - if (!object_entry_compare(entry, &fileEntry)) - { - throw std::runtime_error("Header found in object file does not match object to pack."); ---- src/openrct2/object/RideObject.cpp.orig 2019-10-28 20:18:47 UTC -+++ src/openrct2/object/RideObject.cpp -@@ -23,6 +23,7 @@ - #include "../ride/RideGroupManager.h" - #include "../ride/ShopItem.h" - #include "../ride/Track.h" -+#include "../util/Endian.h" - #include "ObjectJsonHelpers.h" - #include "ObjectRepository.h" - -@@ -35,7 +36,7 @@ using namespace OpenRCT2; - void RideObject::ReadLegacy(IReadObjectContext* context, IStream* stream) - { - stream->Seek(8, STREAM_SEEK_CURRENT); -- _legacyType.flags = stream->ReadValue<uint32_t>(); -+ _legacyType.flags = ORCT_SwapLEu32(stream->ReadValue<uint32_t>()); - for (auto& rideType : _legacyType.ride_type) - { - rideType = stream->ReadValue<uint8_t>(); -@@ -60,7 +61,7 @@ void RideObject::ReadLegacy(IReadObjectContext* contex - _legacyType.intensity_multiplier = stream->ReadValue<int8_t>(); - _legacyType.nausea_multiplier = stream->ReadValue<int8_t>(); - _legacyType.max_height = stream->ReadValue<uint8_t>(); -- _legacyType.enabledTrackPieces = stream->ReadValue<uint64_t>(); -+ _legacyType.enabledTrackPieces = ORCT_SwapLEu64(stream->ReadValue<uint64_t>()); - _legacyType.category[0] = stream->ReadValue<uint8_t>(); - _legacyType.category[1] = stream->ReadValue<uint8_t>(); - _legacyType.shop_item = stream->ReadValue<uint8_t>(); -@@ -108,7 +109,7 @@ void RideObject::ReadLegacy(IReadObjectContext* contex - uint16_t numPeepLoadingPositions = stream->ReadValue<uint8_t>(); - if (numPeepLoadingPositions == 255) - { -- numPeepLoadingPositions = stream->ReadValue<uint16_t>(); -+ numPeepLoadingPositions = ORCT_SwapLEu16(stream->ReadValue<uint16_t>()); - } - - if (_legacyType.vehicles[i].flags & VEHICLE_ENTRY_FLAG_LOADING_WAYPOINTS) -@@ -130,7 +131,7 @@ void RideObject::ReadLegacy(IReadObjectContext* contex - entry[1].y = stream->ReadValue<int8_t>(); - entry[2].x = stream->ReadValue<int8_t>(); - entry[2].y = stream->ReadValue<int8_t>(); -- stream->ReadValue<uint16_t>(); // Skip blanks -+ stream->ReadValue<uint16_t>(); // Skip blanks, no need to swap endianess - - _peepLoadingWaypoints[i].push_back(entry); - } -@@ -426,19 +427,19 @@ void RideObject::SetRepositoryItem(ObjectRepositoryIte - void RideObject::ReadLegacyVehicle( - [[maybe_unused]] IReadObjectContext* context, IStream* stream, rct_ride_entry_vehicle* vehicle) - { -- vehicle->rotation_frame_mask = stream->ReadValue<uint16_t>(); -+ vehicle->rotation_frame_mask = ORCT_SwapLEu16(stream->ReadValue<uint16_t>()); - stream->Seek(2 * 1, STREAM_SEEK_CURRENT); -- vehicle->spacing = stream->ReadValue<uint32_t>(); -- vehicle->car_mass = stream->ReadValue<uint16_t>(); -+ vehicle->spacing = ORCT_SwapLEu32(stream->ReadValue<uint32_t>()); -+ vehicle->car_mass = ORCT_SwapLEu16(stream->ReadValue<uint16_t>()); - vehicle->tab_height = stream->ReadValue<int8_t>(); - vehicle->num_seats = stream->ReadValue<uint8_t>(); -- vehicle->sprite_flags = stream->ReadValue<uint16_t>(); -+ vehicle->sprite_flags = ORCT_SwapLEu16(stream->ReadValue<uint16_t>()); - vehicle->sprite_width = stream->ReadValue<uint8_t>(); - vehicle->sprite_height_negative = stream->ReadValue<uint8_t>(); - vehicle->sprite_height_positive = stream->ReadValue<uint8_t>(); - vehicle->animation = stream->ReadValue<uint8_t>(); -- vehicle->flags = stream->ReadValue<uint32_t>(); -- vehicle->base_num_frames = stream->ReadValue<uint16_t>(); -+ vehicle->flags = ORCT_SwapLEu32(stream->ReadValue<uint32_t>()); -+ vehicle->base_num_frames = ORCT_SwapLEu16(stream->ReadValue<uint16_t>()); - stream->Seek(15 * 4, STREAM_SEEK_CURRENT); - vehicle->no_seating_rows = stream->ReadValue<uint8_t>(); - vehicle->spinning_inertia = stream->ReadValue<uint8_t>(); ---- src/openrct2/object/SceneryGroupObject.cpp.orig 2019-10-28 20:18:47 UTC -+++ src/openrct2/object/SceneryGroupObject.cpp -@@ -18,6 +18,7 @@ - #include "../drawing/Drawing.h" - #include "../localisation/Language.h" - #include "../peep/Staff.h" -+#include "../util/Endian.h" - #include "ObjectJsonHelpers.h" - #include "ObjectManager.h" - #include "ObjectRepository.h" -@@ -34,7 +35,7 @@ void SceneryGroupObject::ReadLegacy(IReadObjectContext - _legacyType.pad_107 = stream->ReadValue<uint8_t>(); - _legacyType.priority = stream->ReadValue<uint8_t>(); - _legacyType.pad_109 = stream->ReadValue<uint8_t>(); -- _legacyType.entertainer_costumes = stream->ReadValue<uint32_t>(); -+ _legacyType.entertainer_costumes = ORCT_SwapLEu32(stream->ReadValue<uint32_t>()); - - GetStringTable().Read(context, stream, OBJ_STRING_ID_NAME); - _items = ReadItems(stream); -@@ -126,6 +127,7 @@ std::vector<rct_object_entry> SceneryGroupObject::Read - { - stream->Seek(-1, STREAM_SEEK_CURRENT); - auto entry = stream->ReadValue<rct_object_entry>(); -+ entry.flags = ORCT_SwapLEu32(entry.flags); - items.push_back(entry); - } - return items; ---- src/openrct2/object/SmallSceneryObject.cpp.orig 2019-10-28 20:18:47 UTC -+++ src/openrct2/object/SmallSceneryObject.cpp -@@ -17,6 +17,7 @@ - #include "../drawing/Drawing.h" - #include "../interface/Cursors.h" - #include "../localisation/Language.h" -+#include "../util/Endian.h" - #include "../world/Scenery.h" - #include "../world/SmallScenery.h" - #include "ObjectJsonHelpers.h" -@@ -26,20 +27,21 @@ - void SmallSceneryObject::ReadLegacy(IReadObjectContext* context, IStream* stream) - { - stream->Seek(6, STREAM_SEEK_CURRENT); -- _legacyType.small_scenery.flags = stream->ReadValue<uint32_t>(); -+ _legacyType.small_scenery.flags = ORCT_SwapLEu32(stream->ReadValue<uint32_t>()); - _legacyType.small_scenery.height = stream->ReadValue<uint8_t>(); - _legacyType.small_scenery.tool_id = stream->ReadValue<uint8_t>(); -- _legacyType.small_scenery.price = stream->ReadValue<int16_t>(); -- _legacyType.small_scenery.removal_price = stream->ReadValue<int16_t>(); -+ _legacyType.small_scenery.price = ORCT_SwapLEu16(stream->ReadValue<int16_t>()); -+ _legacyType.small_scenery.removal_price = ORCT_SwapLEu16(stream->ReadValue<int16_t>()); - stream->Seek(4, STREAM_SEEK_CURRENT); -- _legacyType.small_scenery.animation_delay = stream->ReadValue<uint16_t>(); -- _legacyType.small_scenery.animation_mask = stream->ReadValue<uint16_t>(); -- _legacyType.small_scenery.num_frames = stream->ReadValue<uint16_t>(); -+ _legacyType.small_scenery.animation_delay = ORCT_SwapLEu16(stream->ReadValue<uint16_t>()); -+ _legacyType.small_scenery.animation_mask = ORCT_SwapLEu16(stream->ReadValue<uint16_t>()); -+ _legacyType.small_scenery.num_frames = ORCT_SwapLEu16(stream->ReadValue<uint16_t>()); - _legacyType.small_scenery.scenery_tab_id = 0xFF; - - GetStringTable().Read(context, stream, OBJ_STRING_ID_NAME); - - rct_object_entry sgEntry = stream->ReadValue<rct_object_entry>(); -+ sgEntry.flags = ORCT_SwapLEu32(sgEntry.flags); - SetPrimarySceneryGroup(&sgEntry); - - if (scenery_small_entry_has_flag(&_legacyType, SMALL_SCENERY_FLAG_HAS_FRAME_OFFSETS)) ---- src/openrct2/object/WallObject.cpp.orig 2019-10-28 20:18:47 UTC -+++ src/openrct2/object/WallObject.cpp -@@ -14,6 +14,7 @@ - #include "../drawing/Drawing.h" - #include "../interface/Cursors.h" - #include "../localisation/Language.h" -+#include "../util/Endian.h" - #include "../world/Banner.h" - #include "ObjectJsonHelpers.h" - -@@ -24,13 +25,14 @@ void WallObject::ReadLegacy(IReadObjectContext* contex - _legacyType.wall.flags = stream->ReadValue<uint8_t>(); - _legacyType.wall.height = stream->ReadValue<uint8_t>(); - _legacyType.wall.flags2 = stream->ReadValue<uint8_t>(); -- _legacyType.wall.price = stream->ReadValue<uint16_t>(); -+ _legacyType.wall.price = ORCT_SwapLEu16(stream->ReadValue<uint16_t>()); - _legacyType.wall.scenery_tab_id = stream->ReadValue<uint8_t>(); - _legacyType.wall.scrolling_mode = stream->ReadValue<uint8_t>(); - - GetStringTable().Read(context, stream, OBJ_STRING_ID_NAME); - - rct_object_entry sgEntry = stream->ReadValue<rct_object_entry>(); -+ sgEntry.flags = ORCT_SwapLEu16(sgEntry.flags); - SetPrimarySceneryGroup(&sgEntry); - - GetImageTable().Read(context, stream); ---- src/openrct2/object/WaterObject.cpp.orig 2019-10-28 20:18:47 UTC -+++ src/openrct2/object/WaterObject.cpp -@@ -15,6 +15,7 @@ - #include "../core/IStream.hpp" - #include "../localisation/Language.h" - #include "../localisation/StringIds.h" -+#include "../util/Endian.h" - #include "ObjectJsonHelpers.h" - - #include <memory> -@@ -22,7 +23,7 @@ - void WaterObject::ReadLegacy(IReadObjectContext* context, IStream* stream) - { - stream->Seek(14, STREAM_SEEK_CURRENT); -- _legacyType.flags = stream->ReadValue<uint16_t>(); -+ _legacyType.flags = ORCT_SwapLEu16(stream->ReadValue<uint16_t>()); - - GetStringTable().Read(context, stream, OBJ_STRING_ID_NAME); - GetImageTable().Read(context, stream); ---- src/openrct2/rct12/SawyerChunkReader.cpp.orig 2019-10-28 20:18:47 UTC -+++ src/openrct2/rct12/SawyerChunkReader.cpp -@@ -10,6 +10,7 @@ - #include "SawyerChunkReader.h" - - #include "../core/IStream.hpp" -+#include "../util/Endian.h" - - // malloc is very slow for large allocations in MSVC debug builds as it allocates - // memory on a special debug heap and then initialises all the memory to 0xCC. -@@ -52,6 +53,7 @@ void SawyerChunkReader::SkipChunk() - try - { - auto header = _stream->ReadValue<sawyercoding_chunk_header>(); -+ header.length = ORCT_SwapLEu32(header.length); - _stream->Seek(header.length, STREAM_SEEK_CURRENT); - } - catch (const std::exception&) -@@ -68,6 +70,7 @@ std::shared_ptr<SawyerChunk> SawyerChunkReader::ReadCh - try - { - auto header = _stream->ReadValue<sawyercoding_chunk_header>(); -+ header.length = ORCT_SwapLEu32(header.length); - if (header.length >= MAX_UNCOMPRESSED_CHUNK_SIZE) - throw SawyerChunkException(EXCEPTION_MSG_CORRUPT_CHUNK_SIZE); - ---- src/openrct2/rct12/SawyerEncoding.cpp.orig 2019-10-28 20:18:47 UTC -+++ src/openrct2/rct12/SawyerEncoding.cpp -@@ -10,6 +10,7 @@ - #include "SawyerEncoding.h" - - #include "../core/IStream.hpp" -+#include "../util/Endian.h" - #include "RCT12.h" - - #include <algorithm> -@@ -45,7 +46,7 @@ namespace SawyerEncoding - } while (dataSize != 0); - - // Read file checksum -- uint32_t fileChecksum = stream->ReadValue<uint32_t>(); -+ uint32_t fileChecksum = ORCT_SwapLEu32(stream->ReadValue<uint32_t>()); - - // Rewind back to original position - stream->SetPosition(initialPosition); ---- src/openrct2/ride/TrackDesignRepository.cpp.orig 2019-10-28 20:18:47 UTC -+++ src/openrct2/ride/TrackDesignRepository.cpp -@@ -22,6 +22,7 @@ - #include "../localisation/LocalisationService.h" - #include "../object/ObjectRepository.h" - #include "../object/RideObject.h" -+#include "../util/Endian.h" - #include "RideGroupManager.h" - #include "TrackDesign.h" - -@@ -113,7 +114,7 @@ class TrackDesignFileIndex final : public FileIndex<Tr - item.Path = stream->ReadStdString(); - item.RideType = stream->ReadValue<uint8_t>(); - item.ObjectEntry = stream->ReadStdString(); -- item.Flags = stream->ReadValue<uint32_t>(); -+ item.Flags = ORCT_SwapLEu32(stream->ReadValue<uint32_t>()); - return item; - } - ---- src/openrct2/scenario/ScenarioRepository.cpp.orig 2019-10-28 20:18:47 UTC -+++ src/openrct2/scenario/ScenarioRepository.cpp -@@ -25,6 +25,7 @@ - #include "../localisation/LocalisationService.h" - #include "../platform/platform.h" - #include "../rct12/SawyerChunkReader.h" -+#include "../util/Endian.h" - #include "Scenario.h" - #include "ScenarioSources.h" - -@@ -182,17 +183,17 @@ class ScenarioFileIndex final : public FileIndex<scena - scenario_index_entry item; - - stream->Read(item.path, sizeof(item.path)); -- item.timestamp = stream->ReadValue<uint64_t>(); -+ item.timestamp = ORCT_SwapLEu64(stream->ReadValue<uint64_t>()); - - item.category = stream->ReadValue<uint8_t>(); - item.source_game = stream->ReadValue<uint8_t>(); -- item.source_index = stream->ReadValue<int16_t>(); -- item.sc_id = stream->ReadValue<uint16_t>(); -+ item.source_index = ORCT_SwapLEi16(stream->ReadValue<int16_t>()); -+ item.sc_id = ORCT_SwapLEu16(stream->ReadValue<uint16_t>()); - - item.objective_type = stream->ReadValue<uint8_t>(); - item.objective_arg_1 = stream->ReadValue<uint8_t>(); -- item.objective_arg_2 = stream->ReadValue<int32_t>(); -- item.objective_arg_3 = stream->ReadValue<int16_t>(); -+ item.objective_arg_2 = ORCT_SwapLEi32(stream->ReadValue<int32_t>()); -+ item.objective_arg_3 = ORCT_SwapLEi16(stream->ReadValue<int16_t>()); - item.highscore = nullptr; - - stream->Read(item.internal_name, sizeof(item.internal_name)); -@@ -587,7 +588,7 @@ class ScenarioRepository final : public IScenarioRepos - try - { - auto fs = FileStream(path, FILE_MODE_OPEN); -- uint32_t fileVersion = fs.ReadValue<uint32_t>(); -+ uint32_t fileVersion = ORCT_SwapLEu32(fs.ReadValue<uint32_t>()); - if (fileVersion != 1) - { - Console::Error::WriteLine("Invalid or incompatible highscores file."); -@@ -596,14 +597,14 @@ class ScenarioRepository final : public IScenarioRepos - - ClearHighscores(); - -- uint32_t numHighscores = fs.ReadValue<uint32_t>(); -+ uint32_t numHighscores = ORCT_SwapLEu32(fs.ReadValue<uint32_t>()); - for (uint32_t i = 0; i < numHighscores; i++) - { - scenario_highscore_entry* highscore = InsertHighscore(); - highscore->fileName = fs.ReadString(); - highscore->name = fs.ReadString(); -- highscore->company_value = fs.ReadValue<money32>(); -- highscore->timestamp = fs.ReadValue<datetime64>(); -+ highscore->company_value = ORCT_SwapLEi32(fs.ReadValue<money32>()); -+ highscore->timestamp = ORCT_SwapLEu64(fs.ReadValue<datetime64>()); - } - } - catch (const std::exception&) -@@ -647,6 +648,10 @@ class ScenarioRepository final : public IScenarioRepos - { - // Read legacy entry - auto scBasic = fs.ReadValue<rct_scores_entry>(); -+ scBasic.objectiveArg2 = ORCT_SwapLEi32(scBasic.objectiveArg2); -+ scBasic.objectiveArg3 = ORCT_SwapLEi16(scBasic.objectiveArg3); -+ scBasic.Flags = ORCT_SwapLEi32(scBasic.Flags); -+ scBasic.CompanyValue = ORCT_SwapLEi32(scBasic.CompanyValue); - - // Ignore non-completed scenarios - if (scBasic.Flags & SCENARIO_FLAGS_COMPLETED) ---- src/openrct2/util/Endian.h.orig 2019-10-29 22:14:34 UTC -+++ src/openrct2/util/Endian.h -@@ -0,0 +1,70 @@ -+#include <cstdint> -+ -+#pragma once -+ -+// Based on SDL2 -+ -+#if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__ -+ -+static inline uint16_t ORCT_Swapu16(uint16_t x) -+{ -+ return static_cast<uint16_t>((x << 8) | (x >> 8)); -+} -+ -+static inline uint32_t ORCT_Swapu32(uint32_t x) -+{ -+ return static_cast<uint32_t>(((x << 24) | ((x << 8) & 0x00FF0000) | ((x >> 8) & 0x0000FF00) | (x >> 24))); -+} -+ -+static inline uint64_t ORCT_Swapu64(uint64_t x) -+{ -+ uint32_t hi, lo; -+ -+ /* Separate into high and low 32-bit values and swap them */ -+ lo = static_cast<uint32_t>(x & 0xFFFFFFFF); -+ x >>= 32; -+ hi = static_cast<uint32_t>(x & 0xFFFFFFFF); -+ x = ORCT_Swapu32(lo); -+ x <<= 32; -+ x |= ORCT_Swapu32(hi); -+ return (x); -+} -+ -+static inline int16_t ORCT_Swapi16(int16_t x) -+{ -+ return static_cast<uint16_t>((x << 8) | (x >> 8)); -+} -+ -+static inline int32_t ORCT_Swapi32(int32_t x) -+{ -+ return static_cast<uint32_t>(((x << 24) | ((x << 8) & 0x00FF0000) | ((x >> 8) & 0x0000FF00) | (x >> 24))); -+} -+ -+static inline int64_t ORCT_Swapi64(int64_t x) -+{ -+ uint32_t hi, lo; -+ -+ /* Separate into high and low 32-bit values and swap them */ -+ lo = static_cast<uint32_t>(x & 0xFFFFFFFF); -+ x >>= 32; -+ hi = static_cast<uint32_t>(x & 0xFFFFFFFF); -+ x = ORCT_Swapu32(lo); -+ x <<= 32; -+ x |= ORCT_Swapu32(hi); -+ return (x); -+} -+ -+# define ORCT_SwapLEi16(X) ORCT_Swapi16(X) -+# define ORCT_SwapLEi32(X) ORCT_Swapi32(X) -+# define ORCT_SwapLEi64(X) ORCT_Swapi64(X) -+# define ORCT_SwapLEu16(X) ORCT_Swapu16(X) -+# define ORCT_SwapLEu32(X) ORCT_Swapu32(X) -+# define ORCT_SwapLEu64(X) ORCT_Swapu64(X) -+#else -+# define ORCT_SwapLEi16(X) (X) -+# define ORCT_SwapLEi32(X) (X) -+# define ORCT_SwapLEi64(X) (X) -+# define ORCT_SwapLEu16(X) (X) -+# define ORCT_SwapLEu32(X) (X) -+# define ORCT_SwapLEu64(X) (X) -+#endif |