Started working on MFA writing

master
1987kostya 4 years ago
parent c7797acc0a
commit 1f58fb0e05

@ -190,7 +190,9 @@
<Compile Include="MMFParser\Decompiling\PAME2MFA.cs" /> <Compile Include="MMFParser\Decompiling\PAME2MFA.cs" />
<Compile Include="MMFParser\MFALoaders\ChunkList.cs" /> <Compile Include="MMFParser\MFALoaders\ChunkList.cs" />
<Compile Include="MMFParser\MFALoaders\Frame.cs" /> <Compile Include="MMFParser\MFALoaders\Frame.cs" />
<Compile Include="MMFParser\MFALoaders\FrameInstance.cs" />
<Compile Include="MMFParser\MFALoaders\FrameItem.cs" /> <Compile Include="MMFParser\MFALoaders\FrameItem.cs" />
<Compile Include="MMFParser\MFALoaders\ItemFolder.cs" />
<Compile Include="MMFParser\MFALoaders\Layer.cs" /> <Compile Include="MMFParser\MFALoaders\Layer.cs" />
<Compile Include="MMFParser\MFALoaders\mfachunks\Active.cs" /> <Compile Include="MMFParser\MFALoaders\mfachunks\Active.cs" />
<Compile Include="MMFParser\MFALoaders\mfachunks\AnimationObject.cs" /> <Compile Include="MMFParser\MFALoaders\mfachunks\AnimationObject.cs" />

@ -18,6 +18,11 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events
public int ObjectInfoList; public int ObjectInfoList;
public List<Parameter> Items = new List<Parameter>(); public List<Parameter> Items = new List<Parameter>();
public Condition(ByteReader reader) : base(reader) { } public Condition(ByteReader reader) : base(reader) { }
public override void Write(ByteWriter Writer)
{
throw new NotImplementedException();
}
public override void Print() public override void Print()
{ {
throw new NotImplementedException(); throw new NotImplementedException();
@ -65,6 +70,11 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events
public int ObjectInfoList; public int ObjectInfoList;
public List<Parameter> Items = new List<Parameter>(); public List<Parameter> Items = new List<Parameter>();
public Action(ByteReader reader) : base(reader) { } public Action(ByteReader reader) : base(reader) { }
public override void Write(ByteWriter Writer)
{
throw new NotImplementedException();
}
public override void Print( ) public override void Print( )
{ {
throw new NotImplementedException(); throw new NotImplementedException();
@ -106,6 +116,11 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events
public Parameter(ByteReader reader) : base(reader) { } public Parameter(ByteReader reader) : base(reader) { }
public override void Write(ByteWriter Writer)
{
throw new NotImplementedException();
}
public override void Print() public override void Print()
{ {
throw new NotImplementedException(); throw new NotImplementedException();

@ -11,6 +11,11 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events.Expressions
public int ObjectInfo; public int ObjectInfo;
public int ObjectInfoList; public int ObjectInfoList;
public Expression(ByteReader reader) : base(reader) { } public Expression(ByteReader reader) : base(reader) { }
public override void Write(ByteWriter Writer)
{
throw new NotImplementedException();
}
public override void Print() public override void Print()
{ {
throw new NotImplementedException(); throw new NotImplementedException();

@ -9,6 +9,11 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events.Parameters
public ParameterCommon(ByteReader reader) : base(reader) { } public ParameterCommon(ByteReader reader) : base(reader) { }
public override void Write(ByteWriter Writer)
{
throw new NotImplementedException();
}
public override void Print() public override void Print()
{ {
throw new NotImplementedException(); throw new NotImplementedException();

@ -20,7 +20,7 @@ namespace DotNetCTFDumper.MMFParser.Data
} }
public abstract void Read(); public abstract void Read();
//public abstract void Write(); public abstract void Write(ByteWriter Writer);
public abstract void Print(); public abstract void Print();

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.IO;
using DotNetCTFDumper.MMFParser.ChunkLoaders; using DotNetCTFDumper.MMFParser.ChunkLoaders;
using DotNetCTFDumper.MMFParser.ChunkLoaders.Banks; using DotNetCTFDumper.MMFParser.ChunkLoaders.Banks;
using DotNetCTFDumper.MMFParser.MFALoaders; using DotNetCTFDumper.MMFParser.MFALoaders;
@ -106,6 +107,8 @@ namespace DotNetCTFDumper.MMFParser.Data
public List<Frame> Frames; public List<Frame> Frames;
public override void Print() public override void Print()
{ {
//Logger.Log($"MFA Product:{product}"); //Logger.Log($"MFA Product:{product}");
@ -113,113 +116,67 @@ namespace DotNetCTFDumper.MMFParser.Data
//Logger.Log($"MFA Product:{buildVersion}"); //Logger.Log($"MFA Product:{buildVersion}");
} }
public void Write(ByteWriter writer) public override void Write(ByteWriter Writer)
{ {
writer.WriteAscii("MFU2"); Writer.WriteAscii("MFU2");
writer.WriteInt32(MfaBuild); Writer.WriteInt32(MfaBuild);
writer.WriteInt32(Product); Writer.WriteInt32(Product);
writer.WriteInt32(BuildVersion); Writer.WriteInt32(BuildVersion);
writer.WriteInt32(LangId); Writer.WriteInt32(LangId);
writer.AutoWriteUnicode(Name); Writer.AutoWriteUnicode(Name);
writer.AutoWriteUnicode(Description); Writer.AutoWriteUnicode(Description);
writer.AutoWriteUnicode(Path); Writer.AutoWriteUnicode(Path);
writer.WriteUInt32((uint)Stamp.Length); Writer.WriteUInt32((uint)Stamp.Length);
writer.WriteBytes(Stamp); Writer.WriteBytes(Stamp);
writer.WriteAscii(FontBankId); Writer.WriteAscii(FontBankId);
Fonts.Write(writer); Fonts.Write(Writer);
writer.WriteAscii(SoundBankId); Writer.WriteAscii(SoundBankId);
Sounds.Write(writer); Sounds.Write(Writer);
writer.WriteAscii(MusicBankId); Writer.WriteAscii(MusicBankId);
//music.Write();//cum cum cum cum cum cum cum cum //music.Write();
writer.WriteInt32(0);//someone is using musics lol? Writer.WriteInt32(0);//someone is using musics lol?
//TODO: Do music //TODO: Do music
//I am not an asshole lol
writer.WriteAscii(ImageBankId);
Icons.Write(writer);
writer.WriteAscii(ImageBankId);
Images.Write(writer);
writer.AutoWriteUnicode(Name); Writer.WriteAscii(ImageBankId);
writer.AutoWriteUnicode(Author); Icons.Write(Writer);
writer.AutoWriteUnicode(Description);
writer.AutoWriteUnicode(Copyright);
writer.AutoWriteUnicode(Company);
writer.AutoWriteUnicode(Version);
writer.WriteInt32(WindowX);
writer.WriteInt32(WindowY);
writer.WriteColor(Color.White);
writer.WriteInt32((int) DisplayFlags.flag);
writer.WriteInt32((int) GraphicFlags.flag);
writer.WriteUInt32((uint) InitialScore);
writer.WriteUInt32((uint) InitialLifes);
writer.WriteInt32(FrameRate);
writer.WriteInt32(BuildType);
writer.AutoWriteUnicode(BuildPath);
writer.WriteInt32(0);
writer.AutoWriteUnicode(CommandLine);
writer.AutoWriteUnicode(Aboutbox);
writer.WriteInt32(0);//anaconda
writer.WriteInt32(0);//binary files are not supported because i am lazy asshole
Controls.Write(writer); Writer.WriteAscii(ImageBankId);
Images.Write(Writer);
//Menu = null; //TODO:Menu Writer.AutoWriteUnicode(Name);
Writer.AutoWriteUnicode(Author);
Writer.AutoWriteUnicode(Description);
Writer.AutoWriteUnicode(Copyright);
Writer.AutoWriteUnicode(Company);
Writer.AutoWriteUnicode(Version);
Writer.WriteInt32(WindowX);
Writer.WriteInt32(WindowY);
Writer.WriteColor(Color.White);
Writer.WriteInt32((int) DisplayFlags.flag);
Writer.WriteInt32((int) GraphicFlags.flag);
Writer.WriteUInt32((uint) InitialScore);
Writer.WriteUInt32((uint) InitialLifes);
Writer.WriteInt32(FrameRate);
Writer.WriteInt32(BuildType);
Writer.AutoWriteUnicode(BuildPath);
Writer.AutoWriteUnicode(CommandLine);
Writer.AutoWriteUnicode(Aboutbox);
Menu = null; //TODO:Menu
if (Menu != null) if (Menu != null)
{ {
byte[] menuData = new byte[1]; //Menu.Generate; byte[] menuData = new byte[1]; //Menu.Generate;
writer.WriteInt32(menuData.Length); Writer.WriteInt32(menuData.Length);
writer.WriteBytes(menuData); Writer.WriteBytes(menuData);
} }
else else
{ {
writer.WriteInt32(0); Writer.WriteInt32(0);
}
return;
writer.WriteInt32(windowMenuIndex);
writer.WriteInt32(menuImages.Length);
foreach (var item in menuImages)
{
writer.WriteInt32(item);
}
GlobalValues.Write(writer);
GlobalStrings.Write(writer);
writer.WriteInt32(GlobalEvents.Length);
writer.WriteBytes(GlobalEvents);
writer.WriteInt32(GraphicMode);
writer.WriteInt32(IconImages.Count);
foreach (var item in IconImages)
{
writer.WriteInt32(item);
} }
//Qualifiers
writer.WriteInt32(CustomQuals.Count);
foreach (var item in CustomQuals)
{
writer.AutoWriteUnicode(item.Item1);
writer.WriteInt32(item.Item2);
}
//Extensions
foreach (var item in Extensions)
{
writer.WriteInt32(item.Item1);
writer.AutoWriteUnicode(item.Item2);
writer.AutoWriteUnicode(item.Item3);
writer.WriteInt32(item.Item4);
writer.WriteBytes(item.Item5);
}
writer.WriteInt32(Frames.Count);
var startPosition = writer.Tell() + 4 * Frames.Count + 4;
//help
//how to implement write writer
@ -234,6 +191,9 @@ namespace DotNetCTFDumper.MMFParser.Data
} }
public override void Read() public override void Read()

@ -6,7 +6,7 @@ namespace DotNetCTFDumper.MMFParser.Decompiling
{ {
public static class MFAGenerator public static class MFAGenerator
{ {
public static readonly string TemplatePath = @"C:\Users\ivani\Desktop\CTFResearch\testreader.mfa"; public static readonly string TemplatePath = @"C:\Users\ivani\Desktop\CTFResearch\testNoFrames.mfa";
public static void BuildMFA() public static void BuildMFA()
{ {

@ -0,0 +1,55 @@
using DotNetCTFDumper.MMFParser.Data;
using DotNetCTFDumper.Utils;
namespace DotNetCTFDumper.MMFParser.MFALoaders
{
public class FrameInstance:DataLoader
{
public int X;
public int Y;
public uint Layer;
public int Handle;
public uint Flags;
public uint ParentType;
public uint ParentHandle;
public uint ItemHandle;
public FrameInstance(ByteReader reader) : base(reader)
{
}
public FrameInstance(Data.ChunkList.Chunk chunk) : base(chunk)
{
}
public override void Read()
{
X = Reader.ReadInt32();
Y = Reader.ReadInt32();
Layer = Reader.ReadUInt32();
Handle = Reader.ReadInt32();
Flags = Reader.ReadUInt32();
ParentType = Reader.ReadUInt32();
ItemHandle = Reader.ReadUInt32();
ParentHandle = Reader.ReadUInt32();
}
public override void Write(ByteWriter Writer)
{
Writer.WriteInt32(X);
Writer.WriteInt32(Y);
Writer.WriteUInt32(Layer);
Writer.WriteInt32(Handle);
Writer.WriteUInt32(Flags);
Writer.WriteUInt32(ParentType);
Writer.WriteUInt32(ItemHandle);
Writer.WriteUInt32(ParentHandle);
}
public override void Print()
{
throw new System.NotImplementedException();
}
}
}

@ -0,0 +1,66 @@
using System.Collections.Generic;
using DotNetCTFDumper.MMFParser.Data;
using DotNetCTFDumper.Utils;
namespace DotNetCTFDumper.MMFParser.MFALoaders
{
public class ItemFolder:DataLoader
{
public List<uint> Items;
public string Name;
public ItemFolder(ByteReader reader) : base(reader)
{
}
public ItemFolder(Data.ChunkList.Chunk chunk) : base(chunk)
{
}
public override void Read()
{
var value = Reader.ReadUInt32();
if (value == 0x70000004)
{
Name = Helper.AutoReadUnicode(Reader);
Items = new List<uint>();
var count = Reader.ReadUInt32();
for (int i = 0; i < count; i++)
{
Items.Add(Reader.ReadUInt32());
}
}
else
{
Name = "";
Items = new List<uint>();
}
}
public override void Write(ByteWriter Writer)
{
if (Name.Length == 0)
{
Writer.WriteUInt32(0x70000005);
}
else
{
Writer.WriteUInt32(0x70000004);
Writer.AutoWriteUnicode(Name);
Writer.WriteInt32(Items.Count);
}
foreach (var item in Items)
{
Writer.WriteUInt32(item);
}
}
public override void Print()
{
throw new System.NotImplementedException();
}
}
}

@ -65,7 +65,7 @@ namespace DotNetCTFDumper.Utils
public void WriteUInt16(ushort value) => Write(value); public void WriteUInt16(ushort value) => Write(value);
public void WriteUInt32(uint value) => Write(value); public void WriteUInt32(uint value) => Write(value);
public void WriteUInt64(ulong value) => Write(value); public void WriteUInt64(ulong value) => Write(value);
public void WriteSingle(float value) => Write(value);
public void WriteBytes(byte[] value) => Write(value); public void WriteBytes(byte[] value) => Write(value);

@ -63,10 +63,11 @@ namespace DotNetCTFDumper.Utils
public static void AutoWriteUnicode(this ByteWriter writer, string value) public static void AutoWriteUnicode(this ByteWriter writer, string value)
{ {
writer.WriteInt16((short) value.Length); writer.WriteInt16((short) value.Length);
writer.Skip(2); writer.Skip(1);
writer.WriteInt8(0x80);
writer.WriteUnicode(value); writer.WriteUnicode(value);
} }
public static DataLoader LoadParameter(int code, ByteReader reader) public static DataLoader LoadParameter(int code, ByteReader reader)
{ {
DataLoader item = null; DataLoader item = null;

@ -47,7 +47,7 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Banks
} }
public override void Read() public override void Read()
{ {
Reader.Seek(0); //Reset the reader to avoid bugs when dumping more than once if (!Settings.DoMFA)Reader.Seek(0);//Reset the reader to avoid bugs when dumping more than once
Images = new Dictionary<int, ImageItem>(); Images = new Dictionary<int, ImageItem>();
@ -300,7 +300,7 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Banks
chunk.WriteInt16((short) ActionY); chunk.WriteInt16((short) ActionY);
chunk.WriteBytes(_transparent); chunk.WriteBytes(_transparent);
chunk.WriteBytes(rawImg); chunk.WriteBytes(_colorArray);
if(Flags["Alpha"])chunk.WriteBytes(rawAlpha); if(Flags["Alpha"])chunk.WriteBytes(rawAlpha);
writer.WriteInt32(Handle); writer.WriteInt32(Handle);

@ -35,7 +35,7 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Banks
{ {
//Someone is using this lol? //Someone is using this lol?
//Actually,yes //Actually,yes
Reader.Seek(0); if (!Settings.DoMFA)Reader.Seek(0);//Reset the reader to avoid bugs when dumping more than once
Items = new List<MusicFile>(); Items = new List<MusicFile>();
NumOfItems = Reader.ReadInt32(); NumOfItems = Reader.ReadInt32();
if (!Settings.DumpMusic) return; if (!Settings.DumpMusic) return;

@ -37,8 +37,11 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Banks
public override void Read() public override void Read()
{ {
//Implementing for standalone-only because of my lazyness //Implementing for standalone-only because of my lazyness
if (!Settings.DoMFA)Reader.Seek(0);//Reset the reader to avoid bugs when dumping more than once
Reader.Seek(0);//Reset the reader to avoid bugs when dumping more than once
Items = new List<SoundItem>(); Items = new List<SoundItem>();
NumOfItems = Reader.ReadInt32(); NumOfItems = Reader.ReadInt32();
Logger.Log("Found " + NumOfItems + " sounds"); Logger.Log("Found " + NumOfItems + " sounds");

@ -8,6 +8,12 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders
class ChunkList : DataLoader//This is used for MFA reading/writing class ChunkList : DataLoader//This is used for MFA reading/writing
{ {
List<DataLoader> _items = new List<DataLoader>(); List<DataLoader> _items = new List<DataLoader>();
public override void Write(ByteWriter Writer)
{
throw new NotImplementedException();
}
public override void Print() public override void Print()
{ {
throw new NotImplementedException(); throw new NotImplementedException();
@ -20,7 +26,8 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders
{ {
var id = Reader.ReadByte(); var id = Reader.ReadByte();
if(id==0) break; if(id==0) break;
Console.WriteLine("ChunkFound:"+id); var data = new ByteReader(Reader.ReadBytes((int) Reader.ReadUInt32()));

@ -31,7 +31,7 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders
} }
} }
public void Write(ByteWriter writer) public override void Write(ByteWriter writer)
{ {
writer.WriteInt32(Items.Count); writer.WriteInt32(Items.Count);
foreach (var item in Items) foreach (var item in Items)
@ -85,7 +85,7 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders
} }
} }
public void Write(ByteWriter writer) public override void Write(ByteWriter writer)
{ {
writer.WriteInt32(ControlType); writer.WriteInt32(ControlType);
writer.WriteUInt32(16); writer.WriteUInt32(16);

@ -13,12 +13,70 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders
public int SizeY; public int SizeY;
public Color Background; public Color Background;
public int MaxObjects; public int MaxObjects;
public List<FrameItem> Items;
public int Handle;
public int LastViewedX;
public int LastViewedY;
public List<ItemFolder> Folders;
public List<FrameInstance> Instances;
public uint Flags;
public string Password;
public List<Color> Palette;
public int StampHandle;
public int ActiveLayer;
public List<Layer> Layers;
public Frame(ByteReader reader) : base(reader) public Frame(ByteReader reader) : base(reader)
{ {
} }
public override void Write(ByteWriter Writer)
{
Writer.WriteInt32(Handle);
Writer.AutoWriteUnicode(Name);
Writer.WriteInt32(SizeX);
Writer.WriteInt32(SizeY);
Writer.WriteColor(Background);
Writer.WriteUInt32(Flags);
Writer.WriteInt32(MaxObjects);
Writer.AutoWriteUnicode(Password);
Writer.WriteInt32(0);
Writer.WriteInt32(LastViewedX);
Writer.WriteInt32(LastViewedY);
Writer.WriteInt32(Palette.Count);
foreach (var item in Palette)
{
Writer.WriteColor(item);
}
Writer.WriteInt32(StampHandle);
Writer.WriteInt32(ActiveLayer);
Writer.WriteInt32(Layers.Count);
foreach (var layer in Layers)
{
layer.Write(Writer);
}
//TODO: Do transitions
Writer.WriteInt8(0);
foreach (var item in Items)
{
item.Write(Writer);
}
foreach (var item in Folders)
{
item.Write(Writer);
}
foreach (var item in Instances)
{
item.Write(Writer);
}
}
public override void Print() public override void Print()
{ {
throw new NotImplementedException(); throw new NotImplementedException();
@ -26,63 +84,68 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders
public override void Read() public override void Read()
{ {
var handle = Reader.ReadInt32(); Handle = Reader.ReadInt32();
Name = Helper.AutoReadUnicode(Reader); Name = Helper.AutoReadUnicode(Reader);
Console.WriteLine(Name); Console.WriteLine(Name);
SizeX = Reader.ReadInt32(); SizeX = Reader.ReadInt32();
SizeY = Reader.ReadInt32(); SizeY = Reader.ReadInt32();
var background = Reader.ReadColor(); Background = Reader.ReadColor();
var flags = Reader.ReadInt32(); Flags = Reader.ReadUInt32();
MaxObjects = Reader.ReadInt32(); MaxObjects = Reader.ReadInt32();
var password = Helper.AutoReadUnicode(Reader); Password = Helper.AutoReadUnicode(Reader);
Reader.Skip(4); Reader.Skip(4);
var lastViewedX = Reader.ReadInt32(); LastViewedX = Reader.ReadInt32();
var lastViewedY = Reader.ReadInt32(); LastViewedY = Reader.ReadInt32();
var paletteNum = Reader.ReadInt32(); var paletteNum = Reader.ReadInt32();
List<Color> palette = new List<Color>(); Palette = new List<Color>();
for (int i = 0; i < paletteNum; i++) for (int i = 0; i < paletteNum; i++)
{ {
palette.Add(Reader.ReadColor()); Palette.Add(Reader.ReadColor());
} }
var stampHandle = Reader.ReadInt32(); StampHandle = Reader.ReadInt32();
var activeLayer = Reader.ReadInt32(); ActiveLayer = Reader.ReadInt32();
var layersCunt = Reader.ReadInt32(); var layersCunt = Reader.ReadInt32();
var layers = new List<Layer>(); Layers = new List<Layer>();
for (int i = 0; i < layersCunt; i++) for (int i = 0; i < layersCunt; i++)
{ {
var layer = new Layer(Reader); var layer = new Layer(Reader);
layer.Read(); layer.Read();
layers.Add(layer); Layers.Add(layer);
} }
//fadein //fadein
//fadeout //fadeout
Reader.Skip(2); Reader.Skip(2);
var frameitems = 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++)
{ {
var frameitem = new FrameItem(Reader); var frameitem = new FrameItem(Reader);
frameitem.Read(); frameitem.Read();
frameitems.Add(frameitem); Items.Add(frameitem);
Console.WriteLine("Frameitem:"+frameitem.Name); Console.WriteLine("Frameitem:"+frameitem.Name);
//break;
} }
Folders = new List<ItemFolder>();
var folderCount = Reader.ReadInt32();
for (int i = 0; i < frameitemsCount; i++)
//ПРОЧИТАЙ ЭТО {
//вжух и весь код для фрейма готов var folder = new ItemFolder(Reader);
//блин не сработало folder.Read();
//я задолбался, завтра доделаю Folders.Add(folder);
//короче я из будущего, тут надо с циклами аккуратно работать, надо создавать переменную для размера }
//тип var frameCount = reader.ReadInt32();
//for(int i=0;i<frameCount;i++), иначе смещения уплывут и будет жопа жопная Instances = new List<FrameInstance>();
var instancesCount = 0;//Reader.ReadInt32();
for (int i = 0; i < instancesCount; i++)
{
var inst = new FrameInstance(Reader);
//inst.Read();
Instances.Add(inst);
}
@ -90,10 +153,7 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders
} }
public void Write(ByteWriter Writer)
{
}
} }

@ -10,13 +10,25 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders
public int ObjectType; public int ObjectType;
public int Handle; public int Handle;
public string Name; public string Name;
public bool Transparent; public int Transparent;
public int InkEffect; public int InkEffect;
public int InkEffectParameter; public int InkEffectParameter;
public int AntiAliasing; public int AntiAliasing;
public int Flags; public int Flags;
public int IconType; public int IconType;
public override void Write(ByteWriter Writer)
{
Writer.WriteInt32(this.ObjectType);
Writer.WriteInt32(Handle);
Writer.AutoWriteUnicode(Name);
Writer.WriteInt32(Transparent);
Writer.WriteInt32(InkEffect);
Writer.WriteInt32(InkEffectParameter);
}
public override void Print() public override void Print()
{ {
Console.WriteLine($"Name: {Name}"); Console.WriteLine($"Name: {Name}");
@ -27,7 +39,7 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders
ObjectType = Reader.ReadInt32(); ObjectType = Reader.ReadInt32();
Handle = Reader.ReadInt32(); Handle = Reader.ReadInt32();
Name = Helper.AutoReadUnicode(Reader); Name = Helper.AutoReadUnicode(Reader);
var transparent1 = Reader.ReadInt32(); Transparent = Reader.ReadInt32();
InkEffect = Reader.ReadInt32(); InkEffect = Reader.ReadInt32();
InkEffectParameter = Reader.ReadInt32(); InkEffectParameter = Reader.ReadInt32();
@ -47,18 +59,15 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders
chunks.Read(); chunks.Read();
if(ObjectType>=32)//extension base if(ObjectType>=32)//extension base
{ {
//swallow some cum //TODO: Nonactives
} }
else else
{ {
var loader = new Active(Reader); var loader = new Active(Reader);
loader.Read(); loader.Read();
} }
Print();

@ -46,7 +46,7 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders
var item = new ImageItem(Reader); var item = new ImageItem(Reader);
item.Debug = true; item.Debug = true;
item.Read(); item.Read();
item.Save($"{Settings.ImagePath}\\{i}.png"); //item.Save($"{Settings.ImagePath}\\{i}.png");
Items.Add(item.Handle,item); Items.Add(item.Handle,item);
} }
@ -55,7 +55,7 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders
public void Write(ByteWriter writer) public override void Write(ByteWriter writer)
{ {
writer.WriteInt32(GraphicMode); writer.WriteInt32(GraphicMode);
writer.WriteInt16((short) PaletteVersion); writer.WriteInt16((short) PaletteVersion);
@ -64,10 +64,11 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders
{ {
writer.WriteColor(Palette[i]); writer.WriteColor(Palette[i]);
} }
writer.WriteInt32(Items.Count);
writer.WriteInt32(0);//(Items.Count);
foreach (var key in Items.Keys) foreach (var key in Items.Keys)
{ {
Items[key].Write(writer); //Items[key].Write(writer);
} }
} }
public AgmiBank(ByteReader reader) : base(reader) public AgmiBank(ByteReader reader) : base(reader)

@ -4,7 +4,7 @@ using DotNetCTFDumper.Utils;
namespace DotNetCTFDumper.MMFParser.MFALoaders namespace DotNetCTFDumper.MMFParser.MFALoaders
{ {
class Layer : DataLoader public class Layer : DataLoader
{ {
public string Name="ERROR"; public string Name="ERROR";
public float XCoefficient; public float XCoefficient;
@ -12,6 +12,14 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders
public int Flags; public int Flags;
public override void Write(ByteWriter Writer)
{
Helper.AutoWriteUnicode(Writer,Name);
Writer.WriteInt32(Flags);
Writer.WriteSingle(XCoefficient);
Writer.WriteSingle(YCoefficient);
}
public override void Print() public override void Print()
{ {
throw new NotImplementedException(); throw new NotImplementedException();

@ -29,7 +29,7 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders
} }
} }
public void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
Writer.WriteInt32(Items.Count); Writer.WriteInt32(Items.Count);
foreach (var item in Items) foreach (var item in Items)
@ -72,7 +72,7 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders
} }
} }
public void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
Writer.AutoWriteUnicode(Name); Writer.AutoWriteUnicode(Name);
if (Value is string) if (Value is string)

@ -29,6 +29,11 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders.mfachunks
class Animation : DataLoader class Animation : DataLoader
{ {
public string Name = "Animation-UNKNOWN"; public string Name = "Animation-UNKNOWN";
public override void Write(ByteWriter Writer)
{
throw new NotImplementedException();
}
public override void Print() public override void Print()
{ {
Logger.Log($" Found animation: {Name} "); Logger.Log($" Found animation: {Name} ");
@ -54,6 +59,11 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders.mfachunks
class AnimationDirection : DataLoader class AnimationDirection : DataLoader
{ {
public string Name = "Animation-UNKNOWN"; public string Name = "Animation-UNKNOWN";
public override void Write(ByteWriter Writer)
{
throw new NotImplementedException();
}
public override void Print() public override void Print()
{ {
throw new NotImplementedException(); throw new NotImplementedException();

@ -8,6 +8,11 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders.mfachunks
class Behaviours : DataLoader class Behaviours : DataLoader
{ {
List<Behaviour> _items = new List<Behaviour>(); List<Behaviour> _items = new List<Behaviour>();
public override void Write(ByteWriter Writer)
{
throw new NotImplementedException();
}
public override void Print() public override void Print()
{ {
throw new NotImplementedException(); throw new NotImplementedException();
@ -29,6 +34,11 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders.mfachunks
{ {
public string Name = "ERROR"; public string Name = "ERROR";
public ByteReader Data; public ByteReader Data;
public override void Write(ByteWriter Writer)
{
throw new NotImplementedException();
}
public override void Print() public override void Print()
{ {
throw new NotImplementedException(); throw new NotImplementedException();

@ -8,6 +8,11 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders.mfachunks
class Movements : DataLoader class Movements : DataLoader
{ {
public List<Movement> Items = new List<Movement>(); public List<Movement> Items = new List<Movement>();
public override void Write(ByteWriter Writer)
{
throw new NotImplementedException();
}
public override void Print() public override void Print()
{ {
throw new NotImplementedException(); throw new NotImplementedException();
@ -32,6 +37,11 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders.mfachunks
{ {
public string Name="ERROR"; public string Name="ERROR";
public override void Write(ByteWriter Writer)
{
throw new NotImplementedException();
}
public override void Print() public override void Print()
{ {
throw new NotImplementedException(); throw new NotImplementedException();

@ -15,7 +15,12 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders.mfachunks
public ValueList Strings; public ValueList Strings;
public Movements Movements; public Movements Movements;
public Behaviours Behaviours; public Behaviours Behaviours;
public override void Write(ByteWriter Writer)
{
throw new System.NotImplementedException();
}
public override void Print() public override void Print()
{ {
Logger.Log("Object Loader: "); Logger.Log("Object Loader: ");

Loading…
Cancel
Save