Beta MFA Writing

master
1987kostya 4 years ago
parent 473591e4ad
commit f53d3a5292

@ -292,11 +292,13 @@ namespace CTFAK.MMFParser.EXE
loader = new GlobalStrings(chunk);
break;
case 13117:
// loader = new Events(chunk);
loader = new Events(chunk);
break;
}
loader?.Read();
chunk.ChunkData = null;
chunk.RawData = null;
return loader;
}

@ -13,6 +13,37 @@ namespace CTFAK.MMFParser.MFA.Loaders
public List<MFAChunk> Items = new List<MFAChunk>();
public bool Log=false;
public T GetChunk<T>() where T : MFAChunkLoader
{
foreach (MFAChunk chunk in Items)
{
if (chunk.Loader.GetType() == typeof(T))
{
return (T) chunk.Loader;
}
}
return null;
}
public bool ContainsChunk<T>() where T : MFAChunkLoader
{
foreach (MFAChunk chunk in Items)
{
if (chunk.Loader.GetType() == typeof(T))
{
return true;
}
}
return false;
}
public MFAChunk NewChunk<T>() where T : MFAChunkLoader, new()
{
var newChunk = new MFAChunk(null);
newChunk.Id = 33;
newChunk.Loader = new T();
return newChunk;
}
public override void Write(ByteWriter Writer)
{
foreach (MFAChunk chunk in Items)
@ -20,8 +51,6 @@ namespace CTFAK.MMFParser.MFA.Loaders
chunk.Write(Writer);
}
Writer.WriteInt8(0);
return;
}
@ -32,10 +61,10 @@ namespace CTFAK.MMFParser.MFA.Loaders
public override void Read()
{
var start = Reader.Tell();
var start = base.Reader.Tell();
while(true)
{
var newChunk = new MFAChunk(Reader);
var newChunk = new MFAChunk(base.Reader);
newChunk.Read();
if(Log)Logger.Log("ChunkID: "+newChunk.Id);
if(newChunk.Id==0) break;
@ -45,9 +74,9 @@ namespace CTFAK.MMFParser.MFA.Loaders
}
var size = Reader.Tell() - start;
Reader.Seek(start);
Saved = Reader.ReadBytes((int) size);
var size = base.Reader.Tell() - start;
base.Reader.Seek(start);
Saved = base.Reader.ReadBytes((int) size);
}
@ -118,6 +147,9 @@ namespace CTFAK.MMFParser.MFA.Loaders
public int Right;
public int Bottom;
public FrameVirtualRect(ByteReader reader) : base(reader){}
public override void Read()
{
Left = Reader.ReadInt32();

@ -115,14 +115,6 @@ namespace CTFAK.MMFParser.MFA.Loaders
Events.Write(Writer);
for (int i = 0; i < Layers.Count-1; i++)
{
Writer.WriteUInt32(Layers[i].Unk1);
Writer.WriteUInt32(Layers[i].Unk2);
Writer.WriteUInt32(Layers[i].Unk3);
Logger.Log($"{Layers[i].Unk1}-{Layers[i].Unk2}-{Layers[i].Unk3}");
}
Chunks.Write(Writer);
}
@ -207,12 +199,7 @@ namespace CTFAK.MMFParser.MFA.Loaders
Events = new Events(Reader);
Events.Read();
for (int i=0;i<Layers.Count-1;i++)
{
Layers[i].Unk1=Reader.ReadUInt32();
Layers[i].Unk2=Reader.ReadUInt32();
Layers[i].Unk3=Reader.ReadUInt32();
}
Chunks = new ChunkList(Reader);
Chunks.Log = true;

@ -105,19 +105,27 @@ namespace CTFAK.MMFParser.Translation
foreach (Frame frame in game.Frames)
{
if(frame.Palette==null|| frame.Events==null|| frame.Objects==null) continue;
Message("Translating frame: " + frame.Name);
var newFrame = new MFA.Loaders.Frame(null);
newFrame.Chunks = new ChunkList(null);//MFA.MFA.emptyFrameChunks;
newFrame.Handle = game.Frames.IndexOf(frame);
newFrame.Name = frame.Name;
newFrame.SizeX = frame.Width;
newFrame.SizeY = frame.Height;
// var newRectLoader = newFrame.Chunks.GetChunk<FrameVirtualRect>();
// newRectLoader.Right = frame.Width;
// newRectLoader.Bottom = frame.Height;
newFrame.Background = frame.Background;
newFrame.FadeIn = null;
newFrame.FadeOut = null;
// newFrame.UnkString = " ";
var mfaFlags = newFrame.Flags;
var originalFlags = frame.Flags;
mfaFlags["GrabDesktop"] = originalFlags["GrabDesktop"];
mfaFlags["KeepDisplay"] = originalFlags["KeepDisplay"];
mfaFlags["BackgroundCollisions"] = originalFlags["TotalCollisionMask"];
@ -152,12 +160,12 @@ namespace CTFAK.MMFParser.Translation
newLayer.RGBCoeff = Color.FromArgb(255,0,0,255);
newFrame.Layers.Add(newLayer);
break;
// break;
//
}
Message("Translating frame: " + newFrame.Name);
var newFrameItems = new List<FrameItem>();
var newInstances = new List<FrameInstance>();
if (frame.Objects != null)
@ -181,7 +189,7 @@ namespace CTFAK.MMFParser.Translation
newInstance.ParentType = (uint) instance.ParentType;
newInstance.ItemHandle = (uint) (instance.ObjectInfo);
newInstance.ParentHandle = (uint) instance.ParentHandle;
newInstance.Layer = 0;//(uint) (instance.Layer);
newInstance.Layer = (uint) (instance.Layer);
newInstances.Add(newInstance);
// Logger.Log($"{instance.FrameItem.Name} - {i}");
@ -203,7 +211,7 @@ namespace CTFAK.MMFParser.Translation
}
if (frame.Events != null)
// if (frame.Events != null)
{
newFrame.Events = new Events((ByteReader) null); //MFA.MFA.emptyEvents;
newFrame.Events.Items = new List<EventGroup>();
@ -261,12 +269,11 @@ namespace CTFAK.MMFParser.Translation
}
}*/
newFrame.Events.Items.Add(item);
}
}
}
newFrame.Chunks = new ChunkList(null);
mfa.Frames.Add(newFrame);

@ -48,21 +48,18 @@ namespace CTFAK
Settings.UseGUI = true;
if (args.Length > 0)
{
MyForm = new MainForm(Color.FromName(args[0]));
}
if (args.Length > 1)
{
if (args[1].EndsWith(".exe"))
if (args[0].EndsWith(".exe"))
{
ReadFile(args[1],true,false,true);
ReadFile(args[0],true,false,true);
MFAGenerator.BuildMFA();
Environment.Exit(0);
}
else
{
var reader = new ByteReader(new FileStream(args[1],FileMode.Open));
var reader = new ByteReader(new FileStream(args[0],FileMode.Open));
CleanData = new GameData();
CleanData.Read(reader);
}

Loading…
Cancel
Save