diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index 17b373cde1..4b8d941f7d 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -1516,6 +1516,15 @@ namespace OpenRCT2::RCT1 AppendRequiredObjects(result, ObjectType::FootpathRailings, _footpathRailingsEntries); AppendRequiredObjects(result, ObjectType::PeepNames, std::vector({ "rct2.peep_names.original" })); RCT12AddDefaultObjects(result); + + // Normalise the name to make the scenario as recognisable as possible + auto normalisedName = ScenarioSources::NormaliseName(_s4.ScenarioName); + + // Infer what scenario text object to use, if any + SourceDescriptor desc; + if (ScenarioSources::TryGetByName(normalisedName.c_str(), &desc) && desc.textObjectId != nullptr) + AppendRequiredObjects(result, ObjectType::ScenarioText, std::vector({ desc.textObjectId })); + return result; } diff --git a/src/openrct2/rct2/S6Importer.cpp b/src/openrct2/rct2/S6Importer.cpp index e70d48d58c..48784211a9 100644 --- a/src/openrct2/rct2/S6Importer.cpp +++ b/src/openrct2/rct2/S6Importer.cpp @@ -1883,6 +1883,15 @@ namespace OpenRCT2::RCT2 AppendRequiredObjects(objectList, ObjectType::TerrainEdge, _terrainEdgeEntries); AppendRequiredObjects(objectList, ObjectType::PeepNames, std::vector({ "rct2.peep_names.original" })); RCT12AddDefaultObjects(objectList); + + // Normalise the name to make the scenario as recognisable as possible + auto normalisedName = ScenarioSources::NormaliseName(_s6.Info.Name); + + // Infer what scenario text object to use, if any + SourceDescriptor desc; + if (ScenarioSources::TryGetByName(normalisedName.c_str(), &desc) && desc.textObjectId != nullptr) + AppendRequiredObjects(objectList, ObjectType::ScenarioText, std::vector({ desc.textObjectId })); + return objectList; } }; diff --git a/src/openrct2/scenario/Scenario.cpp b/src/openrct2/scenario/Scenario.cpp index d07bcdbc49..575811d918 100644 --- a/src/openrct2/scenario/Scenario.cpp +++ b/src/openrct2/scenario/Scenario.cpp @@ -109,7 +109,7 @@ void ScenarioReset(GameState_t& gameState) gameState.Cash = gameState.InitialCash; auto& objManager = GetContext()->GetObjectManager(); - if (auto* object = objManager.GetLoadedObject(ObjectType::ScenarioText, 0)) + if (auto* object = objManager.GetLoadedObject(ObjectType::ScenarioText, 0); object != nullptr) { auto* textObject = reinterpret_cast(object);