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