Beta MFA Writing

master
1987kostya 4 years ago
parent 473591e4ad
commit f53d3a5292

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

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

@ -115,14 +115,6 @@ namespace CTFAK.MMFParser.MFA.Loaders
Events.Write(Writer); 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); Chunks.Write(Writer);
} }
@ -207,12 +199,7 @@ namespace CTFAK.MMFParser.MFA.Loaders
Events = new Events(Reader); Events = new Events(Reader);
Events.Read(); 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 = new ChunkList(Reader);
Chunks.Log = true; Chunks.Log = true;

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

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

Loading…
Cancel
Save