diff --git a/NHSE.Core/Structures/GameFileDumper.cs b/NHSE.Core/Structures/GameFileDumper.cs
index 9481c57..3e1b99a 100644
--- a/NHSE.Core/Structures/GameFileDumper.cs
+++ b/NHSE.Core/Structures/GameFileDumper.cs
@@ -181,7 +181,7 @@ private static void Dump(this DesignPattern dp, string path, int index, bool ind
/// Patterns to load
/// Path to load from
/// Change origins of Patterns
- public static void Load(this DesignPattern[] patterns, string path, bool changeOrigins)
+ public static void Load(this DesignPattern[] patterns, string path, Personal player, bool changeOrigins)
{
if (patterns.Length == 0)
return;
@@ -197,7 +197,7 @@ public static void Load(this DesignPattern[] patterns, string path, bool changeO
var data = File.ReadAllBytes(f);
var p = new DesignPattern(data);
if (changeOrigins)
- p.ChangeOrigins(patterns[ctr], data);
+ p.ChangeOrigins(player, data);
patterns[ctr] = p;
if (++ctr >= patterns.Length)
break;
@@ -241,7 +241,7 @@ public static void Dump(this IReadOnlyList patterns, string pa
/// Path to load from
/// Change origins of Patterns
/// Sort the files by file name instead of depending on the Operating System's return order
- public static void Load(this DesignPatternPRO[] patterns, string path, bool changeOrigins, bool sortAlpha = true)
+ public static void Load(this DesignPatternPRO[] patterns, string path, Personal player, bool changeOrigins, bool sortAlpha = true)
{
if (patterns.Length == 0)
return;
@@ -259,7 +259,7 @@ public static void Load(this DesignPatternPRO[] patterns, string path, bool chan
var data = File.ReadAllBytes(f);
var p = new DesignPatternPRO(data);
if (changeOrigins)
- p.ChangeOrigins(patterns[ctr], data);
+ p.ChangeOrigins(player, data);
patterns[ctr] = p;
if (++ctr >= patterns.Length)
break;
diff --git a/NHSE.Sprites/Util/ImageUtil.cs b/NHSE.Sprites/Util/ImageUtil.cs
index 0b019ab..896e9be 100644
--- a/NHSE.Sprites/Util/ImageUtil.cs
+++ b/NHSE.Sprites/Util/ImageUtil.cs
@@ -65,6 +65,21 @@ public void SetBitmapData(Span data)
}
}
+ public static bool ContainsTransparentPixels(Bitmap image)
+ {
+ for (int y = 0; y < image.Height; ++y)
+ {
+ for (int x = 0; x < image.Width; ++x)
+ {
+ if (image.GetPixel(x, y).A < 255) // check alpha
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
public static Bitmap GetBitmap(ReadOnlySpan data, int width, int height, PixelFormat format = PixelFormat.Format32bppArgb)
{
var span = MemoryMarshal.Cast(data);
diff --git a/NHSE.WinForms/Subforms/Map/PatternEditor.cs b/NHSE.WinForms/Subforms/Map/PatternEditor.cs
index 0587f62..872a0ee 100644
--- a/NHSE.WinForms/Subforms/Map/PatternEditor.cs
+++ b/NHSE.WinForms/Subforms/Map/PatternEditor.cs
@@ -98,7 +98,22 @@ private void B_LoadDesign_Click(object sender, EventArgs e)
if (dir == null || !Directory.Exists(dir))
return;
var result = WinFormsUtil.Prompt(MessageBoxButtons.YesNoCancel, MessageStrings.MsgAskUpdateValues);
- Patterns.Load(fbd.SelectedPath, result == DialogResult.Yes);
+ Patterns.Load(fbd.SelectedPath, Player.Personal, result == DialogResult.Yes);
+ foreach(var p in Patterns)
+ {
+ if (p.UsageCompatibility is not (0xEE00 or 0xEE02)) // known valid values (00=non-transparent, 02=transparent)
+ {
+ using var image = p.GetImage();
+ if (ImageUtil.ContainsTransparentPixels(image))
+ {
+ p.UsageCompatibility = 0xEE02; // set to transparent
+ }
+ else
+ {
+ p.UsageCompatibility = 0xEE00; // reset to default value (non-transparent)
+ }
+ }
+ }
LoadPattern(Patterns[Index]);
RepopulateList(Index);
return;
@@ -138,7 +153,7 @@ private void B_LoadDesign_Click(object sender, EventArgs e)
if (d.UsageCompatibility is not (0xEE00 or 0xEE02)) // known valid values (00=non-transparent, 02=transparent)
{
using var image = d.GetImage();
- if (ContainsTransparentPixels(image))
+ if (ImageUtil.ContainsTransparentPixels(image))
{
d.UsageCompatibility = 0xEE02; // set to transparent
}
@@ -161,21 +176,6 @@ private void RepopulateList(int index)
LB_Items.SelectedIndex = index;
}
- public bool ContainsTransparentPixels(Bitmap image)
- {
- for (int y = 0; y < image.Height; ++y)
- {
- for (int x = 0; x < image.Width; ++x)
- {
- if (image.GetPixel(x, y).A < 255) // check alpha
- {
- return true;
- }
- }
- }
- return false;
- }
-
private void LoadPattern(DesignPattern designPattern)
{
PB_Pattern.Image = ImageUtil.ResizeImage(designPattern.GetImage(), DesignPattern.Width * scale, DesignPattern.Height * scale);
diff --git a/NHSE.WinForms/Subforms/Map/PatternEditorPRO.cs b/NHSE.WinForms/Subforms/Map/PatternEditorPRO.cs
index 74836d4..033d531 100644
--- a/NHSE.WinForms/Subforms/Map/PatternEditorPRO.cs
+++ b/NHSE.WinForms/Subforms/Map/PatternEditorPRO.cs
@@ -97,7 +97,12 @@ private void B_LoadDesign_Click(object sender, EventArgs e)
if (dir == null || !Directory.Exists(dir))
return;
var result = WinFormsUtil.Prompt(MessageBoxButtons.YesNoCancel, MessageStrings.MsgAskUpdateValues);
- Patterns.Load(fbd.SelectedPath, result == DialogResult.Yes);
+ Patterns.Load(fbd.SelectedPath, Player.Personal, result == DialogResult.Yes);
+ foreach(var p in Patterns)
+ {
+ if (p.UsageCompatibility is not (0xEE01 or 0xEE05)) // known valid values (01=pro, 05=default_unused)
+ p.UsageCompatibility = 0xEE01; // reset to default pro design
+ }
LoadPattern(Patterns[Index]);
RepopulateList(Index);
return;