1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-15 11:03:00 +01:00

Translate SV6 object offsets to OpenRCT2 ones (#10881)

This commit is contained in:
Michael Steenbeek
2020-03-05 22:14:50 +01:00
committed by GitHub
parent ae3ca0b2b0
commit f7151317b4
3 changed files with 68 additions and 7 deletions

View File

@@ -41,6 +41,5 @@ constexpr const uint16_t OBJECT_ENTRY_COUNT =
MAX_WATER_OBJECTS +
MAX_SCENARIO_TEXT_OBJECTS;
// clang-format on
static_assert(OBJECT_ENTRY_COUNT == 721);
#define DAT_NAME_LENGTH 8

View File

@@ -7,8 +7,7 @@
* OpenRCT2 is licensed under the GNU General Public License version 3.
*****************************************************************************/
#ifndef _RCT2_H_
#define _RCT2_H_
#pragma once
#include "../common.h"
#include "../object/Object.h"
@@ -34,7 +33,49 @@
#define RCT2_MAX_RESEARCHED_SCENERY_ITEM_QUADS 56
#define RCT2_MAX_RESEARCHED_SCENERY_ITEMS (RCT2_MAX_RESEARCHED_SCENERY_ITEM_QUADS * 32) // There are 32 bits per quad.
constexpr const uint16_t RCT2_OBJECT_ENTRY_COUNT = 721;
constexpr const uint8_t RCT2_MAX_RIDE_OBJECTS = 128;
constexpr const uint8_t RCT2_MAX_SMALL_SCENERY_OBJECTS = 252;
constexpr const uint8_t RCT2_MAX_LARGE_SCENERY_OBJECTS = 128;
constexpr const uint8_t RCT2_MAX_WALL_SCENERY_OBJECTS = 128;
constexpr const uint8_t RCT2_MAX_BANNER_OBJECTS = 32;
constexpr const uint8_t RCT2_MAX_PATH_OBJECTS = 16;
constexpr const uint8_t RCT2_MAX_PATH_ADDITION_OBJECTS = 15;
constexpr const uint8_t RCT2_MAX_SCENERY_GROUP_OBJECTS = 19;
constexpr const uint8_t RCT2_MAX_PARK_ENTRANCE_OBJECTS = 1;
constexpr const uint8_t RCT2_MAX_WATER_OBJECTS = 1;
constexpr const uint8_t RCT2_MAX_SCENARIO_TEXT_OBJECTS = 1;
// clang-format off
constexpr const uint16_t RCT2_OBJECT_ENTRY_COUNT =
RCT2_MAX_RIDE_OBJECTS +
RCT2_MAX_SMALL_SCENERY_OBJECTS +
RCT2_MAX_LARGE_SCENERY_OBJECTS +
RCT2_MAX_WALL_SCENERY_OBJECTS +
RCT2_MAX_BANNER_OBJECTS +
RCT2_MAX_PATH_OBJECTS +
RCT2_MAX_PATH_ADDITION_OBJECTS +
RCT2_MAX_SCENERY_GROUP_OBJECTS +
RCT2_MAX_PARK_ENTRANCE_OBJECTS +
RCT2_MAX_WATER_OBJECTS +
RCT2_MAX_SCENARIO_TEXT_OBJECTS;
// clang-format on
static_assert(RCT2_OBJECT_ENTRY_COUNT == 721);
// clang-format off
constexpr const int32_t rct2_object_entry_group_counts[] = {
RCT2_MAX_RIDE_OBJECTS,
RCT2_MAX_SMALL_SCENERY_OBJECTS,
RCT2_MAX_LARGE_SCENERY_OBJECTS,
RCT2_MAX_WALL_SCENERY_OBJECTS,
RCT2_MAX_BANNER_OBJECTS,
RCT2_MAX_PATH_OBJECTS,
RCT2_MAX_PATH_ADDITION_OBJECTS,
RCT2_MAX_SCENERY_GROUP_OBJECTS,
RCT2_MAX_PARK_ENTRANCE_OBJECTS,
RCT2_MAX_WATER_OBJECTS,
RCT2_MAX_SCENARIO_TEXT_OBJECTS,
};
// clang-format on
struct rct2_install_info
{
@@ -715,5 +756,3 @@ struct RCT2RideRatingCalculationData
assert_struct_size(RCT2RideRatingCalculationData, 76);
#pragma pack(pop)
#endif

View File

@@ -35,6 +35,7 @@
#include "../peep/Staff.h"
#include "../rct12/SawyerChunkReader.h"
#include "../rct12/SawyerEncoding.h"
#include "../rct2/RCT2.h"
#include "../ride/Ride.h"
#include "../ride/RideRatings.h"
#include "../ride/ShopItem.h"
@@ -170,7 +171,7 @@ public:
_s6Path = path;
return ParkLoadResult(std::vector<rct_object_entry>(std::begin(_s6.objects), std::end(_s6.objects)));
return ParkLoadResult(GetRequiredObjects());
}
bool GetDetails(scenario_index_entry* dst) override
@@ -1620,6 +1621,28 @@ public:
auto withoutFormatCodes = RCT12::RemoveFormatCodes(originalStringView);
return rct2_to_utf8(withoutFormatCodes, RCT2_LANGUAGE_ID_ENGLISH_UK);
}
std::vector<rct_object_entry> GetRequiredObjects()
{
std::vector<rct_object_entry> result;
rct_object_entry nullEntry = {};
std::memset(&nullEntry, 0xFF, sizeof(nullEntry));
int objectIt = 0;
for (int16_t objectType = OBJECT_TYPE_RIDE; objectType <= OBJECT_TYPE_WATER; objectType++)
{
for (int16_t i = 0; i < rct2_object_entry_group_counts[objectType]; i++, objectIt++)
{
result.push_back(_s6.objects[objectIt]);
}
for (int16_t i = rct2_object_entry_group_counts[objectType]; i < object_entry_group_counts[objectType]; i++)
{
result.push_back(nullEntry);
}
}
return result;
}
};
std::unique_ptr<IParkImporter> ParkImporter::CreateS6(IObjectRepository& objectRepository)