diff --git a/src/openrct2/rct2/T6Exporter.cpp b/src/openrct2/rct2/T6Exporter.cpp index 3390c227b2..7e30eba565 100644 --- a/src/openrct2/rct2/T6Exporter.cpp +++ b/src/openrct2/rct2/T6Exporter.cpp @@ -33,8 +33,16 @@ T6Exporter::T6Exporter(TrackDesign* trackDesign) bool T6Exporter::SaveTrack(const utf8* path) { - auto fs = FileStream(path, FILE_MODE_WRITE); - return SaveTrack(&fs); + try + { + auto fs = FileStream(path, FILE_MODE_WRITE); + return SaveTrack(&fs); + } + catch (const std::exception& e) + { + log_error("Unable to save track design: %s", e.what()); + return false; + } } bool T6Exporter::SaveTrack(IStream* stream) diff --git a/src/openrct2/ride/TrackDesign.cpp b/src/openrct2/ride/TrackDesign.cpp index 2a690c1365..94acdb97f7 100644 --- a/src/openrct2/ride/TrackDesign.cpp +++ b/src/openrct2/ride/TrackDesign.cpp @@ -1648,6 +1648,11 @@ static bool track_design_place_ride(TrackDesign* td6, int16_t x, int16_t y, int1 TileElement* tile_element = map_get_first_element_at(tile.x >> 5, tile.y >> 5); z = gTrackPreviewOrigin.z / 8; z += (entrance.z == (int8_t)(uint8_t)0x80) ? -1 : entrance.z; + if (tile_element == nullptr) + { + _trackDesignPlaceCost = MONEY32_UNDEFINED; + return false; + } do {