diff --git a/NetMFAPatcher/DotNetCTFDumper.csproj b/NetMFAPatcher/DotNetCTFDumper.csproj index 24959ec..79be9d8 100644 --- a/NetMFAPatcher/DotNetCTFDumper.csproj +++ b/NetMFAPatcher/DotNetCTFDumper.csproj @@ -217,6 +217,8 @@ + + diff --git a/NetMFAPatcher/MMFParser/EXE/ChunkList.cs b/NetMFAPatcher/MMFParser/EXE/ChunkList.cs index fa1af50..283210f 100644 --- a/NetMFAPatcher/MMFParser/EXE/ChunkList.cs +++ b/NetMFAPatcher/MMFParser/EXE/ChunkList.cs @@ -226,9 +226,15 @@ namespace DotNetCTFDumper.MMFParser.EXE case 13108: loader = new FrameHeader(chunk); break; + case 13111: + loader = new FramePalette(chunk); + break; case 13112: loader = new ObjectInstances(chunk); break; + case 13121: + loader = new Layers(chunk); + break; case 26214: loader = new ImageBank(chunk); break; diff --git a/NetMFAPatcher/MMFParser/EXE/Loaders/Events/Events.cs b/NetMFAPatcher/MMFParser/EXE/Loaders/Events/Events.cs index bab1ff2..500967b 100644 --- a/NetMFAPatcher/MMFParser/EXE/Loaders/Events/Events.cs +++ b/NetMFAPatcher/MMFParser/EXE/Loaders/Events/Events.cs @@ -201,8 +201,8 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Events public void Write(ByteWriter Writer) { ByteWriter newWriter = new ByteWriter(new MemoryStream()); - newWriter.WriteInt8((byte) Conditions.Count); - newWriter.WriteInt8((byte) Actions.Count); + newWriter.WriteUInt8( (sbyte) Conditions.Count); + newWriter.WriteUInt8((sbyte) Actions.Count); newWriter.WriteUInt16(Flags); if (Settings.Build >= 284) { diff --git a/NetMFAPatcher/MMFParser/EXE/Loaders/Frame.cs b/NetMFAPatcher/MMFParser/EXE/Loaders/Frame.cs index 2771409..8cfe83a 100644 --- a/NetMFAPatcher/MMFParser/EXE/Loaders/Frame.cs +++ b/NetMFAPatcher/MMFParser/EXE/Loaders/Frame.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Drawing; +using System.Drawing.Imaging; using DotNetCTFDumper.Utils; namespace DotNetCTFDumper.MMFParser.EXE.Loaders @@ -43,6 +44,9 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders public ChunkList Chunks; public FrameHeader Header; public ObjectInstances Objects; + public Layers Layers; + public Events.Events Events; + public FramePalette Palette; public override void Print(bool ext) @@ -85,8 +89,22 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders { this.Password = password.Value; } - - + + var layers = Chunks.GetChunk(); + if (layers != null) + { + Layers = layers; + } + var events = Chunks.GetChunk(); + if (events != null) + { + Events = events; + } + var palette = Chunks.GetChunk(); + if (palette != null) + { + Palette = palette; + } Header = Chunks.GetChunk(); Width = Header.Width; Height = Header.Height; @@ -98,6 +116,8 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders CountOfObjs = Objects.CountOfObjects; } + + @@ -283,8 +303,51 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders } } - class Layer : ChunkLoader + public class Layers : ChunkLoader { + public List Items; + + public Layers(ByteReader reader) : base(reader) + { + } + + public Layers(ChunkList.Chunk chunk) : base(chunk) + { + } + + public override void Read() + { + Items = new List(); + var count = Reader.ReadUInt32(); + for (int i = 0; i < count; i++) + { + Layer item = new Layer(Reader); + item.Read(); + Items.Add(item); + } + + } + + public override void Print(bool ext) + { + throw new NotImplementedException(); + } + + public override string[] GetReadableData() + { + throw new NotImplementedException(); + } + } + + public class Layer : ChunkLoader + { + public string Name; + public uint Flags; + public float XCoeff; + public float YCoeff; + public int NumberOfBackgrounds; + public int BackgroudIndex; + public Layer(ByteReader reader) : base(reader) { } @@ -295,7 +358,45 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders public override void Read() { - + Flags = Reader.ReadUInt32(); + XCoeff = Reader.ReadSingle(); + YCoeff = Reader.ReadSingle(); + NumberOfBackgrounds = Reader.ReadInt32(); + BackgroudIndex = Reader.ReadInt32(); + Name = Reader.ReadWideString(); + Console.WriteLine(Name); + } + + public override void Print(bool ext) + { + throw new NotImplementedException(); + } + + public override string[] GetReadableData() + { + throw new NotImplementedException(); + } + } + + public class FramePalette : ChunkLoader + { + public List Items; + + public FramePalette(ByteReader reader) : base(reader) + { + } + + public FramePalette(ChunkList.Chunk chunk) : base(chunk) + { + } + + public override void Read() + { + Items = new List(); + for (int i = 0; i < 256; i++) + { + Items.Add(Reader.ReadColor()); + } } public override void Print(bool ext) diff --git a/NetMFAPatcher/MMFParser/MFA/Decompiling/MFAGenerator.cs b/NetMFAPatcher/MMFParser/MFA/Decompiling/MFAGenerator.cs index 52dd6d8..e6a3a16 100644 --- a/NetMFAPatcher/MMFParser/MFA/Decompiling/MFAGenerator.cs +++ b/NetMFAPatcher/MMFParser/MFA/Decompiling/MFAGenerator.cs @@ -38,6 +38,7 @@ namespace DotNetCTFDumper.MMFParser.Decompiling //Add modifications + var mfaWriter = new ByteWriter("outTest.mfa", FileMode.Create); template.Write(mfaWriter); } diff --git a/NetMFAPatcher/MMFParser/MFA/Decompiling/PAME2MFA.cs b/NetMFAPatcher/MMFParser/MFA/Decompiling/PAME2MFA.cs index 65558ba..b412d87 100644 --- a/NetMFAPatcher/MMFParser/MFA/Decompiling/PAME2MFA.cs +++ b/NetMFAPatcher/MMFParser/MFA/Decompiling/PAME2MFA.cs @@ -1,5 +1,12 @@  +using System; +using System.Collections.Generic; +using System.Linq; using DotNetCTFDumper.MMFParser.EXE; +using DotNetCTFDumper.MMFParser.MFA.Loaders; +using DotNetCTFDumper.Utils; +using Frame = DotNetCTFDumper.MMFParser.EXE.Loaders.Frame; +using Layer = DotNetCTFDumper.MMFParser.MFA.Loaders.Layer; namespace DotNetCTFDumper.MMFParser.Decompiling { @@ -10,13 +17,14 @@ namespace DotNetCTFDumper.MMFParser.Decompiling //mfa.MfaBuild = 4; //mfa.Product = (int) game.ProductVersion; - mfa.BuildVersion = 283; + //mfa.BuildVersion = 283; mfa.Name = game.Name; + mfa.LangId = 0; mfa.Description = $"Decompiled with {Settings.DumperVersion}"; mfa.Path = game.EditorFilename; - return; + //mfa.Stamp = wtf; - if (game.Fonts != null) mfa.Fonts = game.Fonts; + /*if (game.Fonts != null) mfa.Fonts = game.Fonts; mfa.Sounds = game.Sounds; foreach (var item in mfa.Sounds.Items) @@ -29,8 +37,8 @@ namespace DotNetCTFDumper.MMFParser.Decompiling { mfa.Images.Items[key].Debug = true; } - - mfa.Author = game.Author; + */ + mfa.Author = game.Author!=null? game.Author:"Kostya"; mfa.Copyright = game.Copyright; mfa.Company = "CTFAN Team"; mfa.Version = ""; @@ -54,7 +62,44 @@ namespace DotNetCTFDumper.MMFParser.Decompiling mfa.Aboutbox = game.AboutText?.Length > 0 ? game?.AboutText : "This game was decompiled with " + Settings.DumperVersion; - + mfa.Frames.Clear(); + foreach (Frame gameFrame in game.Frames) + { + MFA.Loaders.Frame mfaFrame = new MFA.Loaders.Frame(null); + mfaFrame.Handle = game.Frames.IndexOf(gameFrame); + mfaFrame.Name = gameFrame.Name; + mfaFrame.SizeX = gameFrame.Width; + mfaFrame.SizeY = gameFrame.Height; + mfaFrame.Background = gameFrame.Background; + //TODO: Transitions + //TODO: Flags + mfaFrame.MaxObjects = gameFrame.Events?.MaxObjects ?? 1337; + mfaFrame.Password = gameFrame?.Password ?? ""; + mfaFrame.LastViewedX = 320; + mfaFrame.LastViewedY = 240; + mfaFrame.Palette = gameFrame.Palette.Items; + mfaFrame.StampHandle = 12; + mfaFrame.ActiveLayer = 0; + mfaFrame.Layers = new List(); + mfaFrame.Layers.Add(new Layer(null){Name = "New Layer"}); + + /*foreach (EXE.Loaders.Layer gameLayer in gameFrame.Layers.Items) + { + Layer mfaLayer = new Layer(null); + mfaLayer.Name = gameLayer.Name; + mfaLayer.Flags = (int) gameLayer.Flags; + //TODO: Flags + mfaLayer.XCoefficient = gameLayer.XCoeff; + mfaLayer.YCoefficient = gameLayer.YCoeff; + mfaFrame.Layers.Add(mfaLayer); + }*/ + mfaFrame.Events = MFA.MFA.emptyEvents; + mfaFrame.Chunks = MFA.MFA.emptyFrameChunks; + + mfa.Frames.Add(mfaFrame); + + } + } } diff --git a/NetMFAPatcher/MMFParser/MFA/Loaders/Events.cs b/NetMFAPatcher/MMFParser/MFA/Loaders/Events.cs index bf0480c..bb37b44 100644 --- a/NetMFAPatcher/MMFParser/MFA/Loaders/Events.cs +++ b/NetMFAPatcher/MMFParser/MFA/Loaders/Events.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; +using System.Security.AccessControl; using System.Text; using DotNetCTFDumper.MMFParser.EXE; using DotNetCTFDumper.MMFParser.EXE.Loaders.Events; @@ -41,6 +42,7 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders public uint EventLine; public uint EventLineY; public byte[] Saved; + public int EditorDataUnk; public Events(ByteReader reader) : base(reader) { @@ -52,8 +54,7 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders public override void Read() { - Saved = Reader.ReadBytes(92); - return; + Version = Reader.ReadUInt16(); FrameType = Reader.ReadUInt16(); Items = new List(); @@ -109,7 +110,7 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders } else if (name == EventEditorData) { - Reader.Skip(4); + EditorDataUnk = Reader.ReadInt32(); ConditionWidth = Reader.ReadUInt16(); ObjectHeight = Reader.ReadUInt16(); Reader.Skip(12); @@ -178,91 +179,130 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders public override void Write(ByteWriter Writer) { - Writer.WriteBytes(Saved); - return; - Writer.WriteUInt16(Version); - Writer.WriteInt16((short) FrameType); - Writer.WriteBytes(new byte[]{0x04,0x04,0x00,0x00}); - if (Items != null) - { - Writer.WriteAscii(EventData); - - ByteWriter newWriter = new ByteWriter(new MemoryStream()); - foreach (EventGroup eventGroup in Items) - { - eventGroup.Write(newWriter); - } - Writer.WriteWriter(newWriter); - } - - if (Comments != null) + //Writer.WriteBytes(Saved); + //return; + using (ByteWriter debug = new ByteWriter(new MemoryStream())) { - Writer.WriteAscii(CommentData); - foreach (Comment comment in Comments) - { - comment.Write(Writer); - } - } - if (Objects != null) - { - Writer.WriteAscii(ObjectData); - Writer.WriteUInt32((uint) Objects.Count); - foreach (EventObject eventObject in Objects) + //Writer = new ByteWriter(new MemoryStream()); + Writer.WriteUInt16(Version); + Writer.WriteInt16((short) FrameType); + + //Writer.WriteBytes(new byte[] {0x04, 0x04, 0x00, 0x00}); + // if (Items != null) + // { + // Console.WriteLine("Writing EventData"); + // Writer.WriteAscii(EventData); + // + // ByteWriter newWriter = new ByteWriter(new MemoryStream()); + // foreach (EventGroup eventGroup in Items) + // { + // eventGroup.Write(newWriter); + // } + // + // Writer.WriteWriter(newWriter); + // } + // if (Objects != null) + // { + // Console.WriteLine("Writing EventObjects"); + // Writer.WriteAscii(ObjectData); + // Writer.WriteUInt32((uint) Objects.Count); + // foreach (EventObject eventObject in Objects) + // { + // eventObject.Write(Writer); + // } + // } + if (ObjectTypes != null) { - eventObject.Write(Writer); - } - } - Writer.WriteAscii(EventEditorData); - Writer.Skip(4+2*2+4*3); - if (ObjectTypes != null) - { - Writer.WriteAscii(ObjectListData); - Writer.WriteInt16(-1); - Writer.WriteInt16((short) ObjectTypes.Count); - foreach (ushort objectType in ObjectTypes) - { - Writer.WriteUInt16(objectType); - } - foreach (ushort objectHandle in ObjectHandles) - { - Writer.WriteUInt16(objectHandle); + Console.WriteLine("Writing ObjectTypes"); + Writer.WriteAscii(ObjectListData); + Writer.WriteInt16(-1); + Writer.WriteInt16((short) ObjectTypes.Count); + foreach (ushort objectType in ObjectTypes) + { + Writer.WriteUInt16(objectType); + } + + foreach (ushort objectHandle in ObjectHandles) + { + Writer.WriteUInt16(objectHandle); + } + + foreach (ushort objectFlag in ObjectFlags) + { + Writer.WriteUInt16(objectFlag); + } + + Writer.WriteUInt16((ushort) Folders.Count); + foreach (string folder in Folders) + { + Writer.AutoWriteUnicode(folder); + } } - foreach (ushort objectFlag in ObjectFlags) + if (X != 0) { - Writer.WriteUInt16(objectFlag); + Console.WriteLine("Writing X"); + Writer.WriteAscii(EditorPositionData); + Writer.WriteInt16(1); + Writer.WriteInt32((int) X); + Writer.WriteInt32((int) Y); + Writer.WriteUInt32(CaretType); + Writer.WriteUInt32(CaretX); + Writer.WriteUInt32(CaretY); } - Writer.WriteUInt16((ushort) Folders.Count); - foreach (string folder in Folders) + if (LineY != 0) { - Writer.AutoWriteUnicode(folder); + Console.WriteLine("Writing LineY"); + Writer.WriteAscii(EditorLineData); + Writer.WriteInt16(1); + Writer.WriteUInt32(LineY); + Writer.WriteUInt32(LineItemType); + Writer.WriteUInt32(EventLine); + Writer.WriteUInt32(EventLineY); } + Console.WriteLine("Writing EventEditorData"); + Writer.WriteAscii(EventEditorData); + Writer.WriteInt32(EditorDataUnk); + Writer.WriteInt16((short) ConditionWidth); + Writer.WriteInt16((short) ObjectHeight); + Writer.Skip(12); - } + + //Writer.Skip((4 + 2 * 2 + 4 * 3)-4); + + Writer.WriteAscii(EventEnd); + + + //TODO: Fix commented part + // + + // + // if (Comments != null) + // { + // Console.WriteLine("Writing Comments"); + // Writer.WriteAscii(CommentData); + // foreach (Comment comment in Comments) + // { + // comment.Write(Writer); + // } + // } - if (X != 0) - { - Writer.WriteAscii(EditorPositionData); - Writer.WriteInt16(1); - Writer.WriteInt32((int) X); - Writer.WriteInt32((int) Y); - Writer.WriteUInt32(CaretType); - Writer.WriteUInt32(CaretX); - Writer.WriteUInt32(CaretY); - } + - if (LineY != 0) - { - Writer.WriteAscii(EditorLineData); - Writer.WriteInt16(1); - Writer.WriteUInt32(LineY); - Writer.WriteUInt32(LineItemType); - Writer.WriteUInt32(EventLine); - Writer.WriteUInt32(EventLineY); + + + + + + + + + var data = ((MemoryStream) Writer.BaseStream).GetBuffer(); + Array.Resize(ref data,(int) Writer.Size()); + File.WriteAllBytes("MyEvents.bin",data); } - Writer.WriteAscii(EventEnd); - - + + diff --git a/NetMFAPatcher/MMFParser/MFA/Loaders/Frame.cs b/NetMFAPatcher/MMFParser/MFA/Loaders/Frame.cs index 7d48227..57fa654 100644 --- a/NetMFAPatcher/MMFParser/MFA/Loaders/Frame.cs +++ b/NetMFAPatcher/MMFParser/MFA/Loaders/Frame.cs @@ -13,12 +13,12 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders public int SizeY; public Color Background; public int MaxObjects; - public List Items; + public List Items=new List(); public int Handle; public int LastViewedX; public int LastViewedY; - public List Folders; - public List Instances; + public List Folders=new List(); + public List Instances=new List(); public uint Flags; public string Password; public List Palette; @@ -32,6 +32,8 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders { } + + public override void Write(ByteWriter Writer) { @@ -74,14 +76,17 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders { item.Write(Writer); } - Writer.WriteInt32(Instances.Count); - foreach (var item in Instances) + + if (Instances != null) { - item.Write(Writer); + Writer.WriteInt32(Instances.Count); + foreach (var item in Instances) + { + item.Write(Writer); + } } - Console.WriteLine("BeforeEventsPos: "+Writer.Tell()); + Events.Write(Writer); - Console.WriteLine("AfterEventsPos: "+Writer.Tell()); Chunks.Write(Writer); @@ -151,21 +156,25 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders } Instances = new List(); - var instancesCount = 0;//Reader.ReadInt32(); + var instancesCount = Reader.ReadInt32(); for (int i = 0; i < instancesCount; i++) { var inst = new FrameInstance(Reader); - //inst.Read(); + inst.Read(); Instances.Add(inst); } Events = new Events(Reader); + Console.WriteLine("BeforeEventsPos: "+Reader.Tell()); Events.Read(); + Console.WriteLine("AfterEventsPos: "+Reader.Tell()); Chunks = new ChunkList(Reader); Chunks.Read(); - + MFA.emptyEvents = Events; + MFA.emptyFrameChunks = Chunks; + + - } diff --git a/NetMFAPatcher/MMFParser/MFA/Loaders/ImageBank.cs b/NetMFAPatcher/MMFParser/MFA/Loaders/ImageBank.cs index c7ce198..31c2b7c 100644 --- a/NetMFAPatcher/MMFParser/MFA/Loaders/ImageBank.cs +++ b/NetMFAPatcher/MMFParser/MFA/Loaders/ImageBank.cs @@ -14,7 +14,7 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders private int PaletteVersion; private int PaletteEntries; public Dictionary Items = new Dictionary(); - private List Palette; + public List Palette; public override void Print() { diff --git a/NetMFAPatcher/MMFParser/MFA/MFA.cs b/NetMFAPatcher/MMFParser/MFA/MFA.cs index 5a35a9d..87bfdd6 100644 --- a/NetMFAPatcher/MMFParser/MFA/MFA.cs +++ b/NetMFAPatcher/MMFParser/MFA/MFA.cs @@ -115,6 +115,9 @@ namespace DotNetCTFDumper.MMFParser.MFA public List Frames; public ChunkList Chunks; + public static Events emptyEvents; + public static ChunkList emptyFrameChunks; + public override void Print() { @@ -162,7 +165,7 @@ namespace DotNetCTFDumper.MMFParser.MFA Writer.AutoWriteUnicode(Version); Writer.WriteInt32(WindowX); Writer.WriteInt32(WindowY); - Writer.WriteColor(Color.White); + Writer.WriteColor(Color.FromArgb(0,255,255,255)); Writer.WriteInt32((int) DisplayFlags.flag); Writer.WriteInt32((int) GraphicFlags.flag); Writer.AutoWriteUnicode(HelpFile); diff --git a/NetMFAPatcher/PluginAPI/IPlugin.cs b/NetMFAPatcher/PluginAPI/IPlugin.cs new file mode 100644 index 0000000..788089b --- /dev/null +++ b/NetMFAPatcher/PluginAPI/IPlugin.cs @@ -0,0 +1,8 @@ +namespace DotNetCTFDumper.PluginAPI +{ + public interface IPlugin + { + + + } +} \ No newline at end of file diff --git a/NetMFAPatcher/PluginAPI/PluginAPI.cs b/NetMFAPatcher/PluginAPI/PluginAPI.cs new file mode 100644 index 0000000..36baa70 --- /dev/null +++ b/NetMFAPatcher/PluginAPI/PluginAPI.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using DotNetCTFDumper.MMFParser.EXE.Loaders; +using DotNetCTFDumper.MMFParser.MFA; +using DotNetCTFDumper.MMFParser.MFA.Loaders; +using Frame = DotNetCTFDumper.MMFParser.MFA.Loaders.Frame; +using Layer = DotNetCTFDumper.MMFParser.MFA.Loaders.Layer; + +namespace DotNetCTFDumper.PluginAPI +{ + public class PluginAPI + { + public static Frame GetEmptyFrame(List palette,int handle=0,int x=640,int y=480,string name="New Frame") + { + var frame = new Frame(null) + { + Handle = 0, + Name = name, + Password = "", + SizeX = x, + SizeY = y, + Background = Color.Green, + Flags = 260, + Palette = palette, + Layers = new List(), + Folders = new List(), + Items = new List(), + Events = MFA.emptyEvents, + Chunks = MFA.emptyFrameChunks + + }; + //frame.Instances = template.Frames[0].Instances; + var testLayer = new Layer(null) {Name = "New Super Layer"}; + frame.Layers.Add(testLayer); + + + + + return frame; + + } + + } +} \ No newline at end of file diff --git a/NetMFAPatcher/Program.cs b/NetMFAPatcher/Program.cs index 791063b..b1b7608 100644 --- a/NetMFAPatcher/Program.cs +++ b/NetMFAPatcher/Program.cs @@ -24,8 +24,8 @@ namespace DotNetCTFDumper var handle = Helper.GetConsoleWindow(); Helper.ShowWindow(handle, Helper.SW_HIDE); InitNativeLibrary(); - MFAGenerator.ReadTestMFA(); - Environment.Exit(0); + //MFAGenerator.ReadTestMFA(); + //Environment.Exit(0); var path = ""; var verbose = false; diff --git a/NetMFAPatcher/Utils/BitDict.cs b/NetMFAPatcher/Utils/BitDict.cs index a458e91..fc091ff 100644 --- a/NetMFAPatcher/Utils/BitDict.cs +++ b/NetMFAPatcher/Utils/BitDict.cs @@ -30,6 +30,7 @@ namespace DotNetCTFDumper.Utils return false; } + public static string ToDebugString(IDictionary dictionary) { diff --git a/NetMFAPatcher/Utils/ByteReader.cs b/NetMFAPatcher/Utils/ByteReader.cs index 02d4e78..dd9724e 100644 --- a/NetMFAPatcher/Utils/ByteReader.cs +++ b/NetMFAPatcher/Utils/ByteReader.cs @@ -129,9 +129,9 @@ namespace DotNetCTFDumper.Utils var r = ReadByte(); var g = ReadByte(); var b = ReadByte(); - Skip(1); + var a = ReadByte(); - return Color.FromArgb(r, g, b); + return Color.FromArgb(a,r, g, b); } diff --git a/NetMFAPatcher/Utils/ByteWriter.cs b/NetMFAPatcher/Utils/ByteWriter.cs index 3f94043..27d4d08 100644 --- a/NetMFAPatcher/Utils/ByteWriter.cs +++ b/NetMFAPatcher/Utils/ByteWriter.cs @@ -98,7 +98,7 @@ namespace DotNetCTFDumper.Utils WriteInt8(color.R); WriteInt8(color.G); WriteInt8(color.B); - WriteInt8(0); + WriteInt8(color.A); } public void WriteWriter(ByteWriter toWrite)