Fixed writing of file

master
REDxEYE 4 years ago
parent b27d8eea5a
commit f208257c0a

@ -156,7 +156,7 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks
{ {
Handle = Reader.ReadInt32() - 1; Handle = Reader.ReadInt32() - 1;
Position = (int) Reader.Tell(); Position = (int) Reader.Tell();
Preload(); Load();
} }
public override void Print(bool ext) public override void Print(bool ext)

@ -172,7 +172,7 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders
EventLineY = Reader.ReadUInt32(); EventLineY = Reader.ReadUInt32();
} }
else if (name == EventEnd) break; else if (name == EventEnd) break;
//else throw new NotImplementedException("Fuck Something Broken"); else throw new NotImplementedException("Fuck Something is Broken");
} }
} }

@ -13,12 +13,13 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders
public int SizeY; public int SizeY;
public Color Background; public Color Background;
public int MaxObjects; public int MaxObjects;
public List<FrameItem> Items=new List<FrameItem>(); public List<FrameItem> Items = new List<FrameItem>();
public int Handle; public int Handle;
public int LastViewedX; public int LastViewedX;
public int LastViewedY; public int LastViewedY;
public List<ItemFolder> Folders=new List<ItemFolder>(); public List<ItemFolder> Folders = new List<ItemFolder>();
public List<FrameInstance> Instances=new List<FrameInstance>(); public List<FrameInstance> Instances = new List<FrameInstance>();
public List<byte[]> UnkBlocks = new List<byte[]>();
public BitDict Flags = new BitDict(new string[] public BitDict Flags = new BitDict(new string[]
{ {
@ -36,6 +37,7 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders
}); });
public string Password; public string Password;
public string UnkString;
public List<Color> Palette; public List<Color> Palette;
public int StampHandle; public int StampHandle;
public int ActiveLayer; public int ActiveLayer;
@ -49,8 +51,6 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders
{ {
} }
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
@ -62,7 +62,7 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders
Writer.WriteUInt32(Flags.flag); Writer.WriteUInt32(Flags.flag);
Writer.WriteInt32(MaxObjects); Writer.WriteInt32(MaxObjects);
Writer.AutoWriteUnicode(Password); Writer.AutoWriteUnicode(Password);
Writer.WriteInt32(0); Writer.AutoWriteUnicode(UnkString);
Writer.WriteInt32(LastViewedX); Writer.WriteInt32(LastViewedX);
Writer.WriteInt32(LastViewedY); Writer.WriteInt32(LastViewedY);
Writer.WriteInt32(Palette.Count); Writer.WriteInt32(Palette.Count);
@ -78,12 +78,14 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders
{ {
layer.Write(Writer); layer.Write(Writer);
} }
if (FadeIn != null) if (FadeIn != null)
{ {
Writer.WriteInt8(1); Writer.WriteInt8(1);
FadeIn.Write(Writer); FadeIn.Write(Writer);
} }
else Writer.Skip(1); else Writer.Skip(1);
if (FadeOut != null) if (FadeOut != null)
{ {
Writer.WriteInt8(1); Writer.WriteInt8(1);
@ -91,7 +93,7 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders
} }
else Writer.Skip(1); else Writer.Skip(1);
//Writer.Skip(2); //Writer.Skip(2);
Writer.WriteInt32(Items.Count); Writer.WriteInt32(Items.Count);
foreach (var item in Items) foreach (var item in Items)
@ -109,6 +111,7 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders
foreach (var item in Instances) foreach (var item in Instances)
{ {
item.Write(Writer); item.Write(Writer);
}
if (Instances != null) if (Instances != null)
{ {
@ -119,6 +122,15 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders
} }
} }
if (UnkBlocks != null)
{
Writer.WriteInt32(UnkBlocks.Count);
foreach (var item in UnkBlocks)
{
Writer.WriteBytes(item);
}
}
Events.Write(Writer); Events.Write(Writer);
Chunks.Write(Writer); Chunks.Write(Writer);
} }
@ -140,7 +152,7 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders
MaxObjects = Reader.ReadInt32(); MaxObjects = Reader.ReadInt32();
Password = Helper.AutoReadUnicode(Reader); Password = Helper.AutoReadUnicode(Reader);
Reader.Skip(4); UnkString = Helper.AutoReadUnicode(Reader);
LastViewedX = Reader.ReadInt32(); LastViewedX = Reader.ReadInt32();
LastViewedY = Reader.ReadInt32(); LastViewedY = Reader.ReadInt32();
@ -151,6 +163,7 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders
{ {
Palette.Add(Reader.ReadColor()); Palette.Add(Reader.ReadColor());
} }
StampHandle = Reader.ReadInt32(); StampHandle = Reader.ReadInt32();
ActiveLayer = Reader.ReadInt32(); ActiveLayer = Reader.ReadInt32();
int layersCount = Reader.ReadInt32(); int layersCount = Reader.ReadInt32();
@ -160,7 +173,6 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders
var layer = new Layer(Reader); var layer = new Layer(Reader);
layer.Read(); layer.Read();
Layers.Add(layer); Layers.Add(layer);
} }
if (Reader.ReadByte() == 1) if (Reader.ReadByte() == 1)
@ -168,12 +180,13 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders
FadeIn = new Transition(Reader); FadeIn = new Transition(Reader);
FadeIn.Read(); FadeIn.Read();
} }
if (Reader.ReadByte() == 1) if (Reader.ReadByte() == 1)
{ {
FadeOut = new Transition(Reader); FadeOut = new Transition(Reader);
FadeOut.Read(); FadeOut.Read();
} }
Items = new List<FrameItem>(); Items = new List<FrameItem>();
var frameItemsCount = Reader.ReadInt32(); var frameItemsCount = Reader.ReadInt32();
for (int i = 0; i < frameItemsCount; i++) for (int i = 0; i < frameItemsCount; i++)
@ -201,21 +214,21 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders
inst.Read(); inst.Read();
Instances.Add(inst); Instances.Add(inst);
} }
Reader.Skip(96);
var unkCount = Reader.ReadInt32();
for (int i = 0; i < unkCount; i++)
{
UnkBlocks.Add(Reader.ReadBytes(32));
}
Events = new Events(Reader); Events = new Events(Reader);
Console.WriteLine("BeforeEventsPos: "+Reader.Tell()); Console.WriteLine("BeforeEventsPos: " + Reader.Tell());
Events.Read(); Events.Read();
Console.WriteLine("AfterEventsPos: "+Reader.Tell()); Console.WriteLine("AfterEventsPos: " + Reader.Tell());
Chunks = new ChunkList(Reader); Chunks = new ChunkList(Reader);
Chunks.Read(); Chunks.Read();
MFA.emptyEvents = Events; MFA.emptyEvents = Events;
MFA.emptyFrameChunks = Chunks; MFA.emptyFrameChunks = Chunks;
} }
} }
} }

@ -50,15 +50,15 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders.mfachunks
public byte MovingAtStart; public byte MovingAtStart;
public int DirectionAtStart; public int DirectionAtStart;
public int DataSize; public int DataSize;
public byte[] extData;
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
Writer.WriteUnicode(Name); Writer.AutoWriteUnicode(Name);
Writer.WriteUnicode(Extension); Writer.AutoWriteUnicode(Extension);
Writer.WriteUInt32((uint) Identifier); Writer.WriteUInt32((uint) Identifier);
Writer.WriteInt32(DataSize); Writer.WriteInt32(DataSize);
var newWriter = new ByteWriter(new MemoryStream()); var newWriter = new ByteWriter(new MemoryStream());
if (Extension == null) if (Extension.Length==0)
{ {
newWriter.WriteInt16(Player); newWriter.WriteInt16(Player);
@ -66,8 +66,8 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders.mfachunks
newWriter.WriteInt8(MovingAtStart); newWriter.WriteInt8(MovingAtStart);
newWriter.Skip(3); newWriter.Skip(3);
newWriter.WriteInt32(DirectionAtStart); newWriter.WriteInt32(DirectionAtStart);
newWriter.WriteBytes(extData);
} }
//Loader.write(newWriter)
Writer.WriteWriter(newWriter); Writer.WriteWriter(newWriter);
@ -86,7 +86,7 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders.mfachunks
DataSize = (int) Reader.ReadUInt32(); DataSize = (int) Reader.ReadUInt32();
if(Extension.Length>0) if(Extension.Length>0)
{ {
var newReader = new ByteReader(Reader.ReadBytes(DataSize)); extData = Reader.ReadBytes(DataSize);
} }
@ -97,7 +97,7 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders.mfachunks
MovingAtStart = Reader.ReadByte(); MovingAtStart = Reader.ReadByte();
Reader.Skip(3); Reader.Skip(3);
DirectionAtStart = Reader.ReadInt32(); DirectionAtStart = Reader.ReadInt32();
var newReader = new ByteReader(Reader.ReadBytes(DataSize - 12)); extData = Reader.ReadBytes(DataSize-12);
//ONLY STATIC MOVEMENT IS SUPPORTED RN //ONLY STATIC MOVEMENT IS SUPPORTED RN
//TODO:Movement Types //TODO:Movement Types
//implement types, but i am tired, fuck this shit //implement types, but i am tired, fuck this shit

@ -90,7 +90,7 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders.mfachunks
Movements.Read(); Movements.Read();
Behaviours = new Behaviours(Reader); Behaviours = new Behaviours(Reader);
Behaviours.Read(); Behaviours.Read();
//Reader.Skip(56);//TODO: Help Reader.Skip(2);//TODO: Help
Print(); Print();

@ -7,8 +7,8 @@ namespace DotNetCTFDumper.MMFParser.Translation
{ {
public static class MFAGenerator public static class MFAGenerator
{ {
//public static readonly string TemplatePath = @"C:\Users\MED45\Downloads\testNoFrames.mfa"; public static readonly string TemplatePath = @"C:\Users\MED45\Downloads\OneObjOneFrame.mfa";
public static readonly string TemplatePath = @"C:\Users\ivani\Desktop\CTFResearch\testNoFrames.mfa"; // public static readonly string TemplatePath = @"C:\Users\ivani\Desktop\CTFResearch\OneObjOneFrame.mfa";
public static MFA.MFA BuildMFA() public static MFA.MFA BuildMFA()
{ {
@ -27,21 +27,22 @@ namespace DotNetCTFDumper.MMFParser.Translation
template.Write(mfaWriter); //Writing new MFA template.Write(mfaWriter); //Writing new MFA
mfaWriter.Dispose(); mfaWriter.Dispose();
return template; return template;
Logger.Log("MFA Done",true,ConsoleColor.Yellow); Logger.Log("MFA Done", true, ConsoleColor.Yellow);
} }
public static void ReadTestMFA() public static void ReadTestMFA()
{ {
var mfaReader = new ByteReader(@"C:\Users\ivani\Desktop\CTFResearch\ObjTEST.mfa", FileMode.Open); var output_path = Path.Combine(Path.GetDirectoryName(TemplatePath), "decompiled.mfa");
var mfaReader = new ByteReader(TemplatePath, FileMode.Open);
var template = new MFA.MFA(mfaReader); var template = new MFA.MFA(mfaReader);
Settings.DoMFA = true; Settings.DoMFA = true;
template.Read(); template.Read();
//Add modifications //Add modifications
var mfaWriter = new ByteWriter("outTest.mfa", FileMode.Create);
var mfaWriter = new ByteWriter(output_path, FileMode.Create);
template.Write(mfaWriter); template.Write(mfaWriter);
} }
} }

@ -12,7 +12,8 @@ namespace DotNetCTFDumper.PluginAPI
{ {
public class PluginAPI public class PluginAPI
{ {
public static Frame GetEmptyFrame(List<Color> palette,int handle=0,int x=640,int y=480,string name="New Frame") public static Frame GetEmptyFrame(List<Color> palette, int handle = 0, int x = 640, int y = 480,
string name = "New Frame")
{ {
var frame = new Frame(null) var frame = new Frame(null)
{ {
@ -22,25 +23,20 @@ namespace DotNetCTFDumper.PluginAPI
SizeX = x, SizeX = x,
SizeY = y, SizeY = y,
Background = Color.Green, Background = Color.Green,
Flags = 260,
Palette = palette, Palette = palette,
Layers = new List<Layer>(), Layers = new List<Layer>(),
Folders = new List<ItemFolder>(), Folders = new List<ItemFolder>(),
Items = new List<FrameItem>(), Items = new List<FrameItem>(),
Events = MFA.emptyEvents, Events = MFA.emptyEvents,
Chunks = MFA.emptyFrameChunks Chunks = MFA.emptyFrameChunks
}; };
frame.Flags.flag = 260;
//frame.Instances = template.Frames[0].Instances; //frame.Instances = template.Frames[0].Instances;
var testLayer = new Layer(null) {Name = "New Super Layer"}; var testLayer = new Layer(null) {Name = "New Super Layer"};
frame.Layers.Add(testLayer); frame.Layers.Add(testLayer);
return frame;
return frame;
} }
} }
} }

@ -22,8 +22,8 @@ namespace DotNetCTFDumper
var handle = Helper.GetConsoleWindow(); var handle = Helper.GetConsoleWindow();
Helper.ShowWindow(handle, Helper.SW_HIDE); Helper.ShowWindow(handle, Helper.SW_HIDE);
InitNativeLibrary(); InitNativeLibrary();
// MFAGenerator.ReadTestMFA(); MFAGenerator.ReadTestMFA();
// Environment.Exit(0); Environment.Exit(0);
var path = ""; var path = "";
var verbose = false; var verbose = false;

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
@ -52,6 +53,7 @@ namespace DotNetCTFDumper.Utils
return temp; return temp;
} }
public static string FirstCharToUpper(this string input) public static string FirstCharToUpper(this string input)
{ {
switch (input) switch (input)
@ -65,7 +67,8 @@ namespace DotNetCTFDumper.Utils
public static string AutoReadUnicode(this ByteReader reader) public static string AutoReadUnicode(this ByteReader reader)
{ {
var len = reader.ReadInt16(); var len = reader.ReadInt16();
reader.Skip(2); short check = reader.ReadInt16();
Debug.Assert(check == -32768);
return reader.ReadWideString(len); return reader.ReadWideString(len);
} }
@ -74,9 +77,9 @@ namespace DotNetCTFDumper.Utils
writer.WriteInt16((short) value.Length); writer.WriteInt16((short) value.Length);
writer.Skip(1); writer.Skip(1);
writer.WriteInt8(0x80); writer.WriteInt8(0x80);
writer.WriteUnicode(value,false); writer.WriteUnicode(value, false);
} }
public static DataLoader LoadParameter(int code, ByteReader reader) public static DataLoader LoadParameter(int code, ByteReader reader)
{ {
DataLoader item = null; DataLoader item = null;
@ -189,7 +192,6 @@ namespace DotNetCTFDumper.Utils
} }
} }
private const long OneKb = 1024; private const long OneKb = 1024;
private const long OneMb = OneKb * 1024; private const long OneMb = OneKb * 1024;
@ -287,9 +289,8 @@ namespace DotNetCTFDumper.Utils
// Step 3: return the new array. // Step 3: return the new array.
return result; return result;
} }
} }
public static class StringExtensionMethods public static class StringExtensionMethods
{ {
public static string ReplaceFirst(this string text, string search, string replace) public static string ReplaceFirst(this string text, string search, string replace)
@ -299,6 +300,7 @@ namespace DotNetCTFDumper.Utils
{ {
return text; return text;
} }
return text.Substring(0, pos) + replace + text.Substring(pos + search.Length); return text.Substring(0, pos) + replace + text.Substring(pos + search.Length);
} }
} }

Loading…
Cancel
Save