You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
4.4 KiB
C#
118 lines
4.4 KiB
C#
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Windows.Forms;
|
|
using CTFAK.MMFParser.EXE;
|
|
using CTFAK.MMFParser.EXE.Loaders;
|
|
using CTFAK.MMFParser.EXE.Loaders.Banks;
|
|
using CTFAK.MMFParser.MFA.Loaders;
|
|
using CTFAK.Utils;
|
|
using ChunkList = CTFAK.MMFParser.MFA.Loaders.ChunkList;
|
|
using Frame = CTFAK.MMFParser.MFA.Loaders.Frame;
|
|
using Layer = CTFAK.MMFParser.MFA.Loaders.Layer;
|
|
|
|
namespace CTFAK.MMFParser.Translation
|
|
{
|
|
public static class MFAGenerator
|
|
{
|
|
|
|
public const string TemplatePath = @"template.mfa";
|
|
public const string TemplateLink = @"https://github.com/CTFAK/CTFAK/raw/master/Dependencies/template.mfa";
|
|
|
|
|
|
public static MFA.MFA BuildMFA()
|
|
{
|
|
ByteReader mfaReader;
|
|
if (!File.Exists(TemplatePath))
|
|
{
|
|
var dlg = MessageBox.Show("Template MFA not found\nUse github version?", "Error",MessageBoxButtons.YesNo);
|
|
if (dlg == DialogResult.No)
|
|
{
|
|
Logger.Log("MFA Generation Error");
|
|
return null;
|
|
}
|
|
|
|
else if (dlg == DialogResult.Yes)
|
|
{
|
|
using (var wc = new WebClient())
|
|
{
|
|
Logger.Log("Donwloading MFA from "+TemplateLink);
|
|
mfaReader=new ByteReader(wc.DownloadData(TemplateLink));
|
|
}
|
|
}
|
|
else return null;
|
|
}
|
|
else mfaReader = new ByteReader(TemplatePath, FileMode.Open);
|
|
Logger.Log("Loading images");
|
|
if(Program.CleanData.GameChunks.GetChunk<ImageBank>()!=null)Program.CleanData.GameChunks.GetChunk<ImageBank>().PreloadOnly = false;
|
|
// Exe.Instance.GameData.GameChunks.GetChunk<ImageBank>().Read(true,false);
|
|
// Exe.Instance.GameData.GameChunks.GetChunk<SoundBank>().Read();
|
|
|
|
Settings.DoMFA = true;
|
|
|
|
var template = new MFA.MFA(mfaReader);
|
|
Pame2Mfa.Message("Loading Template");
|
|
template.Read(); //Loading template
|
|
Pame2Mfa.Message("Translating...");
|
|
Pame2Mfa.Translate(ref template, Program.CleanData); //Translation
|
|
|
|
var mfaWriter =
|
|
new ByteWriter(
|
|
Program.CleanData.GameChunks.GetChunk<AppName>().Value.Length > 0 ? $"{Settings.DumpPath}\\{Path.GetFileNameWithoutExtension(Program.CleanData.GameChunks.GetChunk<EditorFilename>().Value)}.mfa" : "out.mfa",
|
|
FileMode.Create); //New writer for new MFA
|
|
Pame2Mfa.Message("");
|
|
Pame2Mfa.Message("Writing MFA");
|
|
template.Write(mfaWriter); //Writing new MFA
|
|
mfaWriter.Dispose();
|
|
Pame2Mfa.Message("Writing is finished!");
|
|
return template;
|
|
|
|
}
|
|
|
|
public static void ReadTestMFA()
|
|
{
|
|
var outputPath = 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(outputPath, FileMode.Create);
|
|
template.Write(mfaWriter);
|
|
}public static void WriteTestMFA()
|
|
{
|
|
var outputPath = Path.Combine(Path.GetDirectoryName(TemplatePath), "patchNew.mfa");
|
|
var mfaReader = new ByteReader(TemplatePath, FileMode.Open);
|
|
var template = new MFA.MFA(mfaReader);
|
|
Settings.DoMFA = true;
|
|
template.Read();
|
|
var refer = template.Frames.FirstOrDefault();
|
|
// template.Frames.Clear();
|
|
|
|
for (int i = 0; i < 25; i++)
|
|
{
|
|
var frame = refer;
|
|
frame.Handle = i;
|
|
frame.Name = "Frame " + i;
|
|
|
|
frame.Chunks = new ChunkList(null);
|
|
frame.Events = MFA.MFA.emptyEvents;
|
|
frame.Palette = refer.Palette;
|
|
// frame.Layers.Add(new Layer(null)
|
|
// {
|
|
// Name="Layer"
|
|
// });
|
|
template.Frames.Add(frame);
|
|
|
|
}
|
|
//Add modifications
|
|
|
|
|
|
var mfaWriter = new ByteWriter(outputPath, FileMode.Create);
|
|
template.Write(mfaWriter);
|
|
}
|
|
}
|
|
} |