Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<OutputType>WinExe</OutputType>
<Version>1.5.0</Version>
<Version>1.5.1</Version>
</PropertyGroup>

<ItemGroup>
Expand Down
29 changes: 26 additions & 3 deletions src/War3App.MapAdapter/Extensions/GamePatchExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
58 changes: 57 additions & 1 deletion src/War3App.MapAdapter/Info/CampaignInfoExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using War3App.MapAdapter.Extensions;

using War3Net.Build.Common;
using War3Net.Build.Info;

namespace War3App.MapAdapter.Info
Expand All @@ -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)
{
Expand All @@ -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,
};
}
}
}
9 changes: 9 additions & 0 deletions src/War3App.MapAdapter/Info/DiagnosticRule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
16 changes: 12 additions & 4 deletions src/War3App.MapAdapter/Info/MapInfoExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,25 +61,31 @@ 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;
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;

case MapInfoFormatVersion.v26:
case MapInfoFormatVersion.v27:
case MapInfoFormatVersion.v28:
if (mapInfo.ScriptLanguage == ScriptLanguage.Lua)
{
throw new NotSupportedException("Cannot downgrade, because map is set to use Lua as script language.");
}

mapInfo.GameVersion = null;

mapInfo.FormatVersion = MapInfoFormatVersion.v25;
break;

case MapInfoFormatVersion.v23:
case MapInfoFormatVersion.v24:
case MapInfoFormatVersion.v25:
if (mapInfo.Players.Count > 12 || mapInfo.Forces.Count > 12)
{
Expand All @@ -104,6 +110,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,
Expand All @@ -113,6 +120,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;
Expand Down
2 changes: 1 addition & 1 deletion src/War3App.MapAdapter/War3App.MapAdapter.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

<ItemGroup>
<PackageReference Include="War3Api.Blizzard" Version="1.33.0" />
<PackageReference Include="War3Net.Build.Core" Version="5.7.1" />
<PackageReference Include="War3Net.Build.Core" Version="5.8.0" />
</ItemGroup>

</Project>
Loading