From d4cf3edfc7c7613b8199fe445637c95f40188540 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 4 Apr 2020 14:14:16 -0400 Subject: [PATCH] Use default tileset for invalid tilesets, fix segfault caused by loadMapLayout --- src/project.cpp | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/project.cpp b/src/project.cpp index f0862c5a..fa6cf593 100644 --- a/src/project.cpp +++ b/src/project.cpp @@ -453,9 +453,14 @@ bool Project::loadMapLayout(Map* map) { return false; } - return loadMapTilesets(map) - && loadBlockdata(map) - && loadMapBorder(map); + // Force these to run even if one fails + bool loadedTilesets = loadMapTilesets(map); + bool loadedBlockdata = loadBlockdata(map); + bool loadedBorder = loadMapBorder(map); + + return loadedTilesets + && loadedBlockdata + && loadedBorder; } bool Project::readMapLayouts() { @@ -625,8 +630,8 @@ void Project::setNewMapLayout(Map* map) { layout->border_height = DEFAULT_BORDER_HEIGHT; layout->border_path = QString("data/layouts/%1/border.bin").arg(map->name); layout->blockdata_path = QString("data/layouts/%1/map.bin").arg(map->name); - layout->tileset_primary_label = "gTileset_General"; - layout->tileset_secondary_label = "gTileset_Petalburg"; + layout->tileset_primary_label = tilesetLabels["primary"].at(0); + layout->tileset_secondary_label = tilesetLabels["secondary"].at(0); map->layout = layout; map->layoutId = layout->id; @@ -1045,14 +1050,24 @@ bool Project::loadMapTilesets(Map* map) { map->layout->tileset_primary = getTileset(map->layout->tileset_primary_label); if (!map->layout->tileset_primary) { - logError(QString("Map layout %1 has invalid primary tileset '%2'").arg(map->layout->id).arg(map->layout->tileset_primary_label)); - return false; + logWarn(QString("Map layout %1 has invalid primary tileset '%2'. Using default '%3'").arg(map->layout->id).arg(map->layout->tileset_primary_label).arg(tilesetLabels["primary"].at(0))); + map->layout->tileset_primary_label = tilesetLabels["primary"].at(0); + map->layout->tileset_primary = getTileset(map->layout->tileset_primary_label); + if (!map->layout->tileset_primary) { + logError(QString("Failed to set default primary tileset.")); + return false; + } } map->layout->tileset_secondary = getTileset(map->layout->tileset_secondary_label); if (!map->layout->tileset_secondary) { - logError(QString("Map layout %1 has invalid secondary tileset '%2'").arg(map->layout->id).arg(map->layout->tileset_secondary_label)); - return false; + logWarn(QString("Map layout %1 has invalid secondary tileset '%2'. Using default '%3'").arg(map->layout->id).arg(map->layout->tileset_secondary_label).arg(tilesetLabels["secondary"].at(0))); + map->layout->tileset_secondary_label = tilesetLabels["secondary"].at(0); + map->layout->tileset_secondary = getTileset(map->layout->tileset_secondary_label); + if (!map->layout->tileset_secondary) { + logError(QString("Failed to set default secondary tileset.")); + return false; + } } return true; }