From e8bb80af26997bc4e0ed43e4b2cc2cd5596e25f4 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 22 Feb 2020 17:53:22 -0500 Subject: fix errors loading spouse room content packs in SMAPI 3.3 The new logic for loading map tilesheets incorrectly changed vanilla tilesheets like "townInterior" to "Maps/townInterior". While the game itself handled that, mods like Content Patcher which compared tilesheet paths would incorrectly decide that "townInterior" and "Maps/townInterior" were different files, and add a new tilesheet for it; that in turn would cause errors when patching spouse rooms, since it doesn't copy tilesheets. --- src/SMAPI/Framework/ContentManagers/ModContentManager.cs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'src/SMAPI/Framework/ContentManagers') diff --git a/src/SMAPI/Framework/ContentManagers/ModContentManager.cs b/src/SMAPI/Framework/ContentManagers/ModContentManager.cs index 7d274eb7..4ffe3acd 100644 --- a/src/SMAPI/Framework/ContentManagers/ModContentManager.cs +++ b/src/SMAPI/Framework/ContentManagers/ModContentManager.cs @@ -367,14 +367,23 @@ namespace StardewModdingAPI.Framework.ContentManagers } // get from game assets + // Map tilesheet keys shouldn't include the "Maps/" prefix (the game will add it automatically) or ".png" extension. { - string contentKey = Path.Combine("Maps", relativePath); - if (contentKey.EndsWith(".png")) + string contentKey = relativePath; + foreach (char separator in PathUtilities.PossiblePathSeparators) + { + if (contentKey.StartsWith($"Maps{separator}")) + { + contentKey = contentKey.Substring(5); + break; + } + } + if (contentKey.EndsWith(".png", StringComparison.InvariantCultureIgnoreCase)) contentKey = contentKey.Substring(0, contentKey.Length - 4); try { - this.GameContentManager.Load(contentKey, this.Language, useCache: true); // no need to bypass cache here, since we're not storing the asset + this.GameContentManager.Load(Path.Combine("Maps", contentKey), this.Language, useCache: true); // no need to bypass cache here, since we're not storing the asset assetName = contentKey; return true; } -- cgit