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;
Position = (int) Reader.Tell();
Preload();
Load();
}
public override void Print(bool ext)

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

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

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

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

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

@ -22,8 +22,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;

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

Loading…
Cancel
Save