From 8d2a27656a76f1ccc7e36d3c52c3358ee123caec Mon Sep 17 00:00:00 2001 From: Drake53 <49623303+Drake53@users.noreply.github.com> Date: Sat, 6 Sep 2025 13:20:51 +0200 Subject: [PATCH 1/6] Update package version. --- src/War3App.MapAdapter/War3App.MapAdapter.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/War3App.MapAdapter/War3App.MapAdapter.csproj b/src/War3App.MapAdapter/War3App.MapAdapter.csproj index f0ea7b5..940fe0c 100644 --- a/src/War3App.MapAdapter/War3App.MapAdapter.csproj +++ b/src/War3App.MapAdapter/War3App.MapAdapter.csproj @@ -8,7 +8,7 @@ - + From 32f56b2804e82c478501dd0c678e9231370752bc Mon Sep 17 00:00:00 2001 From: Drake53 <49623303+Drake53@users.noreply.github.com> Date: Sat, 6 Sep 2025 13:32:50 +0200 Subject: [PATCH 2/6] Support downgrading .w3i v33 --- src/War3App.MapAdapter/Info/MapInfoExtensions.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/War3App.MapAdapter/Info/MapInfoExtensions.cs b/src/War3App.MapAdapter/Info/MapInfoExtensions.cs index 2f33ea1..c55f721 100644 --- a/src/War3App.MapAdapter/Info/MapInfoExtensions.cs +++ b/src/War3App.MapAdapter/Info/MapInfoExtensions.cs @@ -61,11 +61,13 @@ public static void DowngradeOnce(this MapInfo mapInfo) { switch (mapInfo.FormatVersion) { + case MapInfoFormatVersion.v33: + mapInfo.MapFlags &= ~(MapFlags.DisableDenyIcon | MapFlags.ForceDefaultCameraZoom | MapFlags.ForceMaxCameraZoom | MapFlags.ForceMinCameraZoom); + mapInfo.FormatVersion = MapInfoFormatVersion.v31; + break; + case MapInfoFormatVersion.v31: mapInfo.MapFlags &= ~(MapFlags.AccurateProbabilityForCalculations | MapFlags.CustomAbilitySkin); - mapInfo.EditorVersion = EditorVersion.v6072; - mapInfo.GameVersion = new Version(1, 31, 1, 12173); - mapInfo.FormatVersion = MapInfoFormatVersion.v28; break; @@ -76,7 +78,6 @@ public static void DowngradeOnce(this MapInfo mapInfo) } mapInfo.GameVersion = null; - mapInfo.FormatVersion = MapInfoFormatVersion.v25; break; @@ -104,6 +105,7 @@ public static GamePatch GetMinimumPatch(this MapInfo mapInfo) MapInfoFormatVersion.v25 => GamePatch.v1_07, MapInfoFormatVersion.v28 => GamePatch.v1_31_0, MapInfoFormatVersion.v31 => GamePatch.v1_32_0, + MapInfoFormatVersion.v33 => GamePatch.v2_0_3, MapInfoFormatVersion.v8 => GamePatch.v1_00, MapInfoFormatVersion.v10 => GamePatch.v1_00, @@ -113,6 +115,7 @@ public static GamePatch GetMinimumPatch(this MapInfo mapInfo) MapInfoFormatVersion.v24 => GamePatch.v1_07, MapInfoFormatVersion.v26 => GamePatch.v1_31_0, MapInfoFormatVersion.v27 => GamePatch.v1_31_0, + MapInfoFormatVersion.v32 => GamePatch.v2_0_3, }; return minimumBySlotCounts > minimumByFormatVersion ? minimumBySlotCounts : minimumByFormatVersion; From d8a93e354630ce3d67f7bace31de93e3c42857e5 Mon Sep 17 00:00:00 2001 From: Drake53 <49623303+Drake53@users.noreply.github.com> Date: Sat, 6 Sep 2025 13:35:07 +0200 Subject: [PATCH 3/6] Support downgrading .w3i versions that were not used in retail builds. --- src/War3App.MapAdapter/Info/MapInfoExtensions.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/War3App.MapAdapter/Info/MapInfoExtensions.cs b/src/War3App.MapAdapter/Info/MapInfoExtensions.cs index c55f721..d383a93 100644 --- a/src/War3App.MapAdapter/Info/MapInfoExtensions.cs +++ b/src/War3App.MapAdapter/Info/MapInfoExtensions.cs @@ -61,6 +61,7 @@ public static void DowngradeOnce(this MapInfo mapInfo) { switch (mapInfo.FormatVersion) { + case MapInfoFormatVersion.v32: case MapInfoFormatVersion.v33: mapInfo.MapFlags &= ~(MapFlags.DisableDenyIcon | MapFlags.ForceDefaultCameraZoom | MapFlags.ForceMaxCameraZoom | MapFlags.ForceMinCameraZoom); mapInfo.FormatVersion = MapInfoFormatVersion.v31; @@ -71,6 +72,8 @@ public static void DowngradeOnce(this MapInfo mapInfo) mapInfo.FormatVersion = MapInfoFormatVersion.v28; break; + case MapInfoFormatVersion.v26: + case MapInfoFormatVersion.v27: case MapInfoFormatVersion.v28: if (mapInfo.ScriptLanguage == ScriptLanguage.Lua) { @@ -81,6 +84,8 @@ public static void DowngradeOnce(this MapInfo mapInfo) mapInfo.FormatVersion = MapInfoFormatVersion.v25; break; + case MapInfoFormatVersion.v23: + case MapInfoFormatVersion.v24: case MapInfoFormatVersion.v25: if (mapInfo.Players.Count > 12 || mapInfo.Forces.Count > 12) { From 7afecfbe572297cf095f9b7f10410ae62d41e235 Mon Sep 17 00:00:00 2001 From: Drake53 <49623303+Drake53@users.noreply.github.com> Date: Sat, 6 Sep 2025 13:49:19 +0200 Subject: [PATCH 4/6] Support downgrading .w3f files. --- .../Info/CampaignInfoExtensions.cs | 58 ++++++++++++++++++- src/War3App.MapAdapter/Info/DiagnosticRule.cs | 9 +++ 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/src/War3App.MapAdapter/Info/CampaignInfoExtensions.cs b/src/War3App.MapAdapter/Info/CampaignInfoExtensions.cs index be88c89..3fe88ab 100644 --- a/src/War3App.MapAdapter/Info/CampaignInfoExtensions.cs +++ b/src/War3App.MapAdapter/Info/CampaignInfoExtensions.cs @@ -1,5 +1,6 @@ using War3App.MapAdapter.Extensions; +using War3Net.Build.Common; using War3Net.Build.Info; namespace War3App.MapAdapter.Info @@ -8,8 +9,23 @@ public static class CampaignInfoExtensions { public static bool Adapt(this CampaignInfo campaignInfo, AdaptFileContext context, out MapFileStatus status) { - status = MapFileStatus.Compatible; + var modified = campaignInfo.ModifyEditorVersion(context); + if (campaignInfo.GetMinimumPatch() <= context.TargetPatch.Patch) + { + status = MapFileStatus.Compatible; + return modified; + } + + status = campaignInfo.TryDowngrade(context.TargetPatch.Patch) + ? MapFileStatus.Compatible + : MapFileStatus.Incompatible; + + return status == MapFileStatus.Compatible; + } + + public static bool ModifyEditorVersion(this CampaignInfo campaignInfo, AdaptFileContext context) + { var targetPatchEditorVersion = context.TargetPatch.Patch.GetEditorVersion(); if (campaignInfo.EditorVersion == targetPatchEditorVersion) { @@ -19,5 +35,45 @@ public static bool Adapt(this CampaignInfo campaignInfo, AdaptFileContext contex campaignInfo.EditorVersion = targetPatchEditorVersion; return true; } + + public static bool TryDowngrade(this CampaignInfo campaignInfo, GamePatch targetPatch) + { + try + { + while (campaignInfo.GetMinimumPatch() > targetPatch) + { + campaignInfo.DowngradeOnce(); + } + + return true; + } + catch + { + throw; + } + } + + public static void DowngradeOnce(this CampaignInfo campaignInfo) + { + switch (campaignInfo.FormatVersion) + { + case CampaignInfoFormatVersion.v2: + campaignInfo.BackgroundVersion = CampaignBackgroundVersion.Default; + campaignInfo.FormatVersion = CampaignInfoFormatVersion.v1; + break; + + default: + break; + } + } + + public static GamePatch GetMinimumPatch(this CampaignInfo campaignInfo) + { + return campaignInfo.FormatVersion switch + { + CampaignInfoFormatVersion.v1 => GamePatch.v1_00, + CampaignInfoFormatVersion.v2 => GamePatch.v2_0_3, + }; + } } } \ No newline at end of file diff --git a/src/War3App.MapAdapter/Info/DiagnosticRule.cs b/src/War3App.MapAdapter/Info/DiagnosticRule.cs index c5c977d..d950974 100644 --- a/src/War3App.MapAdapter/Info/DiagnosticRule.cs +++ b/src/War3App.MapAdapter/Info/DiagnosticRule.cs @@ -2,6 +2,15 @@ { public static partial class DiagnosticRule { + public static class CampaignInfo + { + public static readonly DiagnosticDescriptor NotSupported = new() + { + Severity = DiagnosticSeverity.Error, + Description = "The file format version {0} is not supported before {1}.", + }; + } + public static class MapInfo { public static readonly DiagnosticDescriptor NotSupported = new() From 55166241816793be76d04bb8bbf234b475c9bfa7 Mon Sep 17 00:00:00 2001 From: Drake53 <49623303+Drake53@users.noreply.github.com> Date: Sat, 6 Sep 2025 13:54:01 +0200 Subject: [PATCH 5/6] Update GamePatchExtensions --- .../Extensions/GamePatchExtensions.cs | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/War3App.MapAdapter/Extensions/GamePatchExtensions.cs b/src/War3App.MapAdapter/Extensions/GamePatchExtensions.cs index 1660ed4..5861aa9 100644 --- a/src/War3App.MapAdapter/Extensions/GamePatchExtensions.cs +++ b/src/War3App.MapAdapter/Extensions/GamePatchExtensions.cs @@ -124,19 +124,42 @@ public static int GetEditorVersion(this GamePatch gamePatch) case GamePatch.v1_32_2: return 6106; - // TODO case GamePatch.v1_32_3: + return 6108; + case GamePatch.v1_32_4: case GamePatch.v1_32_5: + return 6109; + case GamePatch.v1_32_6: case GamePatch.v1_32_7: + return 6110; + case GamePatch.v1_32_8: + return 6111; + case GamePatch.v1_32_9: + return 6112; + case GamePatch.v1_32_10: - return 6106; + case GamePatch.v1_33_0: + case GamePatch.v1_34_0: + return 6114; + + case GamePatch.v1_35_0: + case GamePatch.v1_35_0a: + case GamePatch.v1_36_1: + case GamePatch.v1_36_2: + case GamePatch.v2_0_0: + case GamePatch.v2_0_1: + case GamePatch.v2_0_2: + return 6115; + + case GamePatch.v2_0_3: + return 6116; default: throw new NotSupportedException(); - }; + } } public static string PrettyPrint(this GamePatch gamePatch) From 62d0f652c0e477a60998197db1a422a14140ae29 Mon Sep 17 00:00:00 2001 From: Drake53 <49623303+Drake53@users.noreply.github.com> Date: Sat, 6 Sep 2025 13:55:13 +0200 Subject: [PATCH 6/6] Update version --- .../War3App.MapAdapter.WinForms.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/War3App.MapAdapter.WinForms/War3App.MapAdapter.WinForms.csproj b/src/War3App.MapAdapter.WinForms/War3App.MapAdapter.WinForms.csproj index e373511..53a153c 100644 --- a/src/War3App.MapAdapter.WinForms/War3App.MapAdapter.WinForms.csproj +++ b/src/War3App.MapAdapter.WinForms/War3App.MapAdapter.WinForms.csproj @@ -7,7 +7,7 @@ enable true WinExe - 1.5.0 + 1.5.1