From 0bc302f178565052149528933a4b775484c86a58 Mon Sep 17 00:00:00 2001 From: Drake53 <49623303+Drake53@users.noreply.github.com> Date: Sat, 27 Sep 2025 11:51:02 +0200 Subject: [PATCH 1/3] Update War3Net.Build.Core to v5.8.2 --- 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 6c809ab..2bd46db 100644 --- a/src/War3App.MapAdapter/War3App.MapAdapter.csproj +++ b/src/War3App.MapAdapter/War3App.MapAdapter.csproj @@ -10,7 +10,7 @@ - + From 2b2e6fae5a6c22d3456b071c9cf552f7ed695df2 Mon Sep 17 00:00:00 2001 From: Drake53 <49623303+Drake53@users.noreply.github.com> Date: Sat, 27 Sep 2025 11:52:21 +0200 Subject: [PATCH 2/3] Update map adapter to v1.6.0 --- .../War3App.MapAdapter.EtoForms.Gtk.csproj | 2 +- .../War3App.MapAdapter.EtoForms.csproj | 2 +- .../War3App.MapAdapter.WinForms.csproj | 2 +- src/War3App.MapAdapter/War3App.MapAdapter.csproj | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/War3App.MapAdapter.EtoForms.Gtk/War3App.MapAdapter.EtoForms.Gtk.csproj b/src/War3App.MapAdapter.EtoForms.Gtk/War3App.MapAdapter.EtoForms.Gtk.csproj index 59b22b2..d50744d 100644 --- a/src/War3App.MapAdapter.EtoForms.Gtk/War3App.MapAdapter.EtoForms.Gtk.csproj +++ b/src/War3App.MapAdapter.EtoForms.Gtk/War3App.MapAdapter.EtoForms.Gtk.csproj @@ -5,7 +5,7 @@ 9.0 enable WinExe - 1.5.2 + 1.6.0 diff --git a/src/War3App.MapAdapter.EtoForms/War3App.MapAdapter.EtoForms.csproj b/src/War3App.MapAdapter.EtoForms/War3App.MapAdapter.EtoForms.csproj index 7e01b83..11dfcc5 100644 --- a/src/War3App.MapAdapter.EtoForms/War3App.MapAdapter.EtoForms.csproj +++ b/src/War3App.MapAdapter.EtoForms/War3App.MapAdapter.EtoForms.csproj @@ -4,7 +4,7 @@ net6.0 9.0 enable - 1.5.2 + 1.6.0 diff --git a/src/War3App.MapAdapter.WinForms/War3App.MapAdapter.WinForms.csproj b/src/War3App.MapAdapter.WinForms/War3App.MapAdapter.WinForms.csproj index b6f5c4a..716b4d7 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.2 + 1.6.0 diff --git a/src/War3App.MapAdapter/War3App.MapAdapter.csproj b/src/War3App.MapAdapter/War3App.MapAdapter.csproj index 2bd46db..f16fe51 100644 --- a/src/War3App.MapAdapter/War3App.MapAdapter.csproj +++ b/src/War3App.MapAdapter/War3App.MapAdapter.csproj @@ -4,7 +4,7 @@ net6.0 9.0 enable - 1.5.2 + 1.6.0 From e41b274fdacf85e03244bdcdf69f0ae5dc9d261f Mon Sep 17 00:00:00 2001 From: Drake53 <49623303+Drake53@users.noreply.github.com> Date: Sat, 27 Sep 2025 12:00:12 +0200 Subject: [PATCH 3/3] Support adapting war3map.w3e from v12 to v11 --- .../Environment/MapEnvironmentAdapter.cs | 20 +++++- .../Environment/MapEnvironmentExtensions.cs | 62 +++++++++++++++++++ 2 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 src/War3App.MapAdapter/Environment/MapEnvironmentExtensions.cs diff --git a/src/War3App.MapAdapter/Environment/MapEnvironmentAdapter.cs b/src/War3App.MapAdapter/Environment/MapEnvironmentAdapter.cs index abe038c..99f82a8 100644 --- a/src/War3App.MapAdapter/Environment/MapEnvironmentAdapter.cs +++ b/src/War3App.MapAdapter/Environment/MapEnvironmentAdapter.cs @@ -6,6 +6,7 @@ using War3Net.Build.Common; using War3Net.Build.Environment; using War3Net.Build.Extensions; +using War3Net.Common.Providers; namespace War3App.MapAdapter.Environment { @@ -40,7 +41,24 @@ public AdaptResult AdaptFile(Stream stream, AdaptFileContext context) return context.ReportParseError(e); } - return MapFileStatus.Compatible; + if (!mapEnvironment.Adapt(context, out var status)) + { + return status; + } + + try + { + var memoryStream = new MemoryStream(); + + using var writer = new BinaryWriter(memoryStream, UTF8EncodingProvider.StrictUTF8, true); + writer.Write(mapEnvironment); + + return AdaptResult.Create(memoryStream, status); + } + catch (Exception e) + { + return context.ReportSerializeError(e); + } } public string SerializeFileToJson(Stream stream, GamePatch gamePatch, JsonSerializerOptions options) diff --git a/src/War3App.MapAdapter/Environment/MapEnvironmentExtensions.cs b/src/War3App.MapAdapter/Environment/MapEnvironmentExtensions.cs new file mode 100644 index 0000000..dd3dbc7 --- /dev/null +++ b/src/War3App.MapAdapter/Environment/MapEnvironmentExtensions.cs @@ -0,0 +1,62 @@ +using War3Net.Build.Common; +using War3Net.Build.Environment; + +namespace War3App.MapAdapter.Environment +{ + public static class MapEnvironmentExtensions + { + public static bool Adapt(this MapEnvironment mapEnvironment, AdaptFileContext context, out MapFileStatus status) + { + if (mapEnvironment.GetMinimumPatch() <= context.TargetPatch.Patch) + { + status = MapFileStatus.Compatible; + return false; + } + + status = mapEnvironment.TryDowngrade(context.TargetPatch.Patch) + ? MapFileStatus.Compatible + : MapFileStatus.Incompatible; + + return status == MapFileStatus.Compatible; + } + + public static bool TryDowngrade(this MapEnvironment mapEnvironment, GamePatch targetPatch) + { + try + { + while (mapEnvironment.GetMinimumPatch() > targetPatch) + { + mapEnvironment.DowngradeOnce(); + } + + return true; + } + catch + { + throw; + } + } + + public static void DowngradeOnce(this MapEnvironment mapEnvironment) + { + switch (mapEnvironment.FormatVersion) + { + case MapEnvironmentFormatVersion.v12: + mapEnvironment.FormatVersion = MapEnvironmentFormatVersion.v11; + break; + + default: + break; + } + } + + public static GamePatch GetMinimumPatch(this MapEnvironment mapEnvironment) + { + return mapEnvironment.FormatVersion switch + { + MapEnvironmentFormatVersion.v11 => GamePatch.v1_00, + MapEnvironmentFormatVersion.v12 => GamePatch.v2_0_3, + }; + } + } +} \ No newline at end of file