Fix export

This commit is contained in:
duncanspumpkin 2021-05-30 09:09:47 +01:00
parent 81d7c3f02b
commit c9777535d6
4 changed files with 16 additions and 12 deletions

View File

@ -1248,7 +1248,7 @@ static int32_t cc_remove_park_fences(InteractiveConsole& console, [[maybe_unused
static int32_t cc_show_limits(InteractiveConsole& console, [[maybe_unused]] const arguments_t& argv) static int32_t cc_show_limits(InteractiveConsole& console, [[maybe_unused]] const arguments_t& argv)
{ {
const auto& tileElements = GetTileElements(); const auto& tileElements = GetTileElements();
int32_t tileElementCount = tileElements.size(); const auto tileElementCount = tileElements.size();
int32_t rideCount = ride_get_count(); int32_t rideCount = ride_get_count();
int32_t spriteCount = 0; int32_t spriteCount = 0;
@ -1270,7 +1270,7 @@ static int32_t cc_show_limits(InteractiveConsole& console, [[maybe_unused]] cons
} }
console.WriteFormatLine("Sprites: %d/%d", spriteCount, MAX_ENTITIES); console.WriteFormatLine("Sprites: %d/%d", spriteCount, MAX_ENTITIES);
console.WriteFormatLine("Map Elements: %d/%d", tileElementCount, MAX_TILE_ELEMENTS); console.WriteFormatLine("Map Elements: %zu/%d", tileElementCount, MAX_TILE_ELEMENTS);
console.WriteFormatLine("Banners: %d/%zu", bannerCount, MAX_BANNERS); console.WriteFormatLine("Banners: %d/%zu", bannerCount, MAX_BANNERS);
console.WriteFormatLine("Rides: %d/%d", rideCount, MAX_RIDES); console.WriteFormatLine("Rides: %d/%d", rideCount, MAX_RIDES);
console.WriteFormatLine("Staff: %d/%d", staffCount, STAFF_MAX_COUNT); console.WriteFormatLine("Staff: %d/%d", staffCount, STAFF_MAX_COUNT);

View File

@ -194,8 +194,7 @@ void S6Exporter::Export()
_s6.scenario_srand_0 = state.s0; _s6.scenario_srand_0 = state.s0;
_s6.scenario_srand_1 = state.s1; _s6.scenario_srand_1 = state.s1;
// Map elements must be reorganised prior to saving otherwise save may be invalid ReorganiseTileElements();
map_reorganise_elements();
ExportTileElements(); ExportTileElements();
ExportEntities(); ExportEntities();
ExportParkName(); ExportParkName();
@ -419,8 +418,8 @@ void S6Exporter::Export()
// pad_13CE730 // pad_13CE730
// rct1_scenario_flags // rct1_scenario_flags
_s6.wide_path_tile_loop_x = gWidePathTileLoopX; _s6.wide_path_tile_loop_x = gWidePathTileLoopPosition.x;
_s6.wide_path_tile_loop_y = gWidePathTileLoopY; _s6.wide_path_tile_loop_y = gWidePathTileLoopPosition.y;
// pad_13CE778 // pad_13CE778
String::Set(_s6.scenario_filename, sizeof(_s6.scenario_filename), gScenarioFileName); String::Set(_s6.scenario_filename, sizeof(_s6.scenario_filename), gScenarioFileName);
@ -1580,10 +1579,16 @@ void S6Exporter::ExportMapAnimations()
void S6Exporter::ExportTileElements() void S6Exporter::ExportTileElements()
{ {
const auto& tileElements = GetTileElements();
for (uint32_t index = 0; index < RCT2_MAX_TILE_ELEMENTS; index++) for (uint32_t index = 0; index < RCT2_MAX_TILE_ELEMENTS; index++)
{ {
auto src = &gTileElements[index];
auto dst = &_s6.tile_elements[index]; auto dst = &_s6.tile_elements[index];
if (index >= tileElements.size())
{
dst = {};
continue;
}
auto src = &tileElements[index];
if (src->base_height == MAX_ELEMENT_HEIGHT) if (src->base_height == MAX_ELEMENT_HEIGHT)
{ {
std::memcpy(dst, src, sizeof(*dst)); std::memcpy(dst, src, sizeof(*dst));
@ -1598,10 +1603,10 @@ void S6Exporter::ExportTileElements()
ExportTileElement(dst, src); ExportTileElement(dst, src);
} }
} }
_s6.next_free_tile_element_pointer_index = gNextFreeTileElementPointerIndex; _s6.next_free_tile_element_pointer_index = static_cast<uint32_t>(tileElements.size());
} }
void S6Exporter::ExportTileElement(RCT12TileElement* dst, TileElement* src) void S6Exporter::ExportTileElement(RCT12TileElement* dst, const TileElement* src)
{ {
// Todo: allow for changing definition of OpenRCT2 tile element types - replace with a map // Todo: allow for changing definition of OpenRCT2 tile element types - replace with a map
uint8_t tileElementType = src->GetType(); uint8_t tileElementType = src->GetType();
@ -1852,7 +1857,6 @@ int32_t scenario_save(const utf8* path, int32_t flags)
window_close_construction_windows(); window_close_construction_windows();
} }
map_reorganise_elements();
viewport_set_saved_view(); viewport_set_saved_view();
bool result = false; bool result = false;

View File

@ -73,7 +73,7 @@ private:
void ExportMapAnimations(); void ExportMapAnimations();
void ExportTileElements(); void ExportTileElements();
void ExportTileElement(RCT12TileElement* dst, TileElement* src); void ExportTileElement(RCT12TileElement* dst, const TileElement* src);
std::optional<uint16_t> AllocateUserString(std::string_view value); std::optional<uint16_t> AllocateUserString(std::string_view value);
void ExportUserStrings(); void ExportUserStrings();

View File

@ -1004,7 +1004,7 @@ void tile_element_remove(TileElement* tileElement)
(tileElement - 1)->SetLastForTile(true); (tileElement - 1)->SetLastForTile(true);
tileElement->base_height = MAX_ELEMENT_HEIGHT; tileElement->base_height = MAX_ELEMENT_HEIGHT;
if ((tileElement + 1) == &_tileElements[_tileElements.size()]) if (tileElement == &_tileElements.back())
{ {
_tileElements.pop_back(); _tileElements.pop_back();
} }