diff --git a/docs/release-notes.md b/docs/release-notes.md
index 554b9518..6e531dbd 100644
--- a/docs/release-notes.md
+++ b/docs/release-notes.md
@@ -12,6 +12,7 @@
* Added heuristic compatibility rewrites, which fix some mods previously incompatible with Android or newer game versions.
* Tweaked the rules for showing update alerts (see _for SMAPI developers_ below for details).
* Fixed crossplatform compatibility for mods which use the `[HarmonyPatch(type)]` attribute (thanks to spacechase0!).
+ * Fixed map tile rotation broken when you return to the title screen and reload a save.
* Fixed broken URL in update alerts for unofficial versions.
* Fixed rare error when a mod adds/removes event handlers asynchronously.
* Fixed rare issue where the console showed incorrect colors when mods wrote to it asynchronously.
diff --git a/src/SMAPI.Toolkit/SemanticVersion.cs b/src/SMAPI.Toolkit/SemanticVersion.cs
index 1a76bec3..0f341665 100644
--- a/src/SMAPI.Toolkit/SemanticVersion.cs
+++ b/src/SMAPI.Toolkit/SemanticVersion.cs
@@ -25,22 +25,22 @@ namespace StardewModdingAPI.Toolkit
/*********
** Accessors
*********/
- /// The major version incremented for major API changes.
+ ///
public int MajorVersion { get; }
- /// The minor version incremented for backwards-compatible changes.
+ ///
public int MinorVersion { get; }
- /// The patch version for backwards-compatible bug fixes.
+ ///
public int PatchVersion { get; }
/// The platform release. This is a non-standard semver extension used by Stardew Valley on ported platforms to represent platform-specific patches to a ported version, represented as a fourth number in the version string.
public int PlatformRelease { get; }
- /// An optional prerelease tag.
+ ///
public string PrereleaseTag { get; }
- /// Optional build metadata. This is ignored when determining version precedence.
+ ///
public string BuildMetadata { get; }
@@ -103,9 +103,7 @@ namespace StardewModdingAPI.Toolkit
this.AssertValid();
}
- /// Get an integer indicating whether this version precedes (less than 0), supersedes (more than 0), or is equivalent to (0) the specified version.
- /// The version to compare with this instance.
- /// The value is null.
+ ///
public int CompareTo(ISemanticVersion other)
{
if (other == null)
@@ -113,68 +111,55 @@ namespace StardewModdingAPI.Toolkit
return this.CompareTo(other.MajorVersion, other.MinorVersion, other.PatchVersion, (other as SemanticVersion)?.PlatformRelease ?? 0, other.PrereleaseTag);
}
- /// Indicates whether the current object is equal to another object of the same type.
- /// true if the current object is equal to the parameter; otherwise, false.
- /// An object to compare with this object.
+ ///
public bool Equals(ISemanticVersion other)
{
return other != null && this.CompareTo(other) == 0;
}
- /// Whether this is a prerelease version.
+ ///
public bool IsPrerelease()
{
return !string.IsNullOrWhiteSpace(this.PrereleaseTag);
}
- /// Get whether this version is older than the specified version.
- /// The version to compare with this instance.
+ ///
public bool IsOlderThan(ISemanticVersion other)
{
return this.CompareTo(other) < 0;
}
- /// Get whether this version is older than the specified version.
- /// The version to compare with this instance.
- /// The specified version is not a valid semantic version.
+ ///
public bool IsOlderThan(string other)
{
return this.IsOlderThan(new SemanticVersion(other, allowNonStandard: true));
}
- /// Get whether this version is newer than the specified version.
- /// The version to compare with this instance.
+ ///
public bool IsNewerThan(ISemanticVersion other)
{
return this.CompareTo(other) > 0;
}
- /// Get whether this version is newer than the specified version.
- /// The version to compare with this instance.
- /// The specified version is not a valid semantic version.
+ ///
public bool IsNewerThan(string other)
{
return this.IsNewerThan(new SemanticVersion(other, allowNonStandard: true));
}
- /// Get whether this version is between two specified versions (inclusively).
- /// The minimum version.
- /// The maximum version.
+ ///
public bool IsBetween(ISemanticVersion min, ISemanticVersion max)
{
return this.CompareTo(min) >= 0 && this.CompareTo(max) <= 0;
}
- /// Get whether this version is between two specified versions (inclusively).
- /// The minimum version.
- /// The maximum version.
- /// One of the specified versions is not a valid semantic version.
+ ///
public bool IsBetween(string min, string max)
{
return this.IsBetween(new SemanticVersion(min, allowNonStandard: true), new SemanticVersion(max, allowNonStandard: true));
}
- /// Get a string representation of the version.
+ ///
public override string ToString()
{
string version = $"{this.MajorVersion}.{this.MinorVersion}.{this.PatchVersion}";
@@ -187,7 +172,7 @@ namespace StardewModdingAPI.Toolkit
return version;
}
- /// Whether the version uses non-standard extensions, like four-part game versions on some platforms.
+ ///
public bool IsNonStandard()
{
return this.PlatformRelease != 0;
diff --git a/src/SMAPI/Framework/Content/AssetData.cs b/src/SMAPI/Framework/Content/AssetData.cs
index cacc6078..5c90d83b 100644
--- a/src/SMAPI/Framework/Content/AssetData.cs
+++ b/src/SMAPI/Framework/Content/AssetData.cs
@@ -16,7 +16,7 @@ namespace StardewModdingAPI.Framework.Content
/*********
** Accessors
*********/
- /// The content data being read.
+ ///
public TValue Data { get; protected set; }
@@ -36,10 +36,7 @@ namespace StardewModdingAPI.Framework.Content
this.OnDataReplaced = onDataReplaced;
}
- /// Replace the entire content value with the given value. This is generally not recommended, since it may break compatibility with other mods or different versions of the game.
- /// The new content value.
- /// The is null.
- /// The 's type is not compatible with the loaded asset's type.
+ ///
public void ReplaceWith(TValue value)
{
if (value == null)
diff --git a/src/SMAPI/Framework/Content/AssetDataForImage.cs b/src/SMAPI/Framework/Content/AssetDataForImage.cs
index 44a97136..5f91610e 100644
--- a/src/SMAPI/Framework/Content/AssetDataForImage.cs
+++ b/src/SMAPI/Framework/Content/AssetDataForImage.cs
@@ -28,13 +28,7 @@ namespace StardewModdingAPI.Framework.Content
public AssetDataForImage(string locale, string assetName, Texture2D data, Func getNormalizedPath, Action onDataReplaced)
: base(locale, assetName, data, getNormalizedPath, onDataReplaced) { }
- /// Overwrite part of the image.
- /// The image to patch into the content.
- /// The part of the to copy (or null to take the whole texture). This must be within the bounds of the texture.
- /// The part of the content to patch (or null to patch the whole texture). The original content within this area will be erased. This must be within the bounds of the existing spritesheet.
- /// Indicates how an image should be patched.
- /// One of the arguments is null.
- /// The is outside the bounds of the spritesheet.
+ ///
public void PatchImage(Texture2D source, Rectangle? sourceArea = null, Rectangle? targetArea = null, PatchMode patchMode = PatchMode.Replace)
{
// get texture
@@ -104,10 +98,7 @@ namespace StardewModdingAPI.Framework.Content
target.SetData(0, targetArea, sourceData, 0, pixelCount);
}
- /// Extend the image if needed to fit the given size. Note that this is an expensive operation, creates a new texture instance, and that extending a spritesheet horizontally may cause game errors or bugs.
- /// The minimum texture width.
- /// The minimum texture height.
- /// Whether the texture was resized.
+ ///
public bool ExtendImage(int minWidth, int minHeight)
{
if (this.Data.Width >= minWidth && this.Data.Height >= minHeight)
diff --git a/src/SMAPI/Framework/Content/AssetDataForMap.cs b/src/SMAPI/Framework/Content/AssetDataForMap.cs
index dee5b034..e80c6e53 100644
--- a/src/SMAPI/Framework/Content/AssetDataForMap.cs
+++ b/src/SMAPI/Framework/Content/AssetDataForMap.cs
@@ -24,10 +24,7 @@ namespace StardewModdingAPI.Framework.Content
public AssetDataForMap(string locale, string assetName, Map data, Func getNormalizedPath, Action