diff --git a/NetMFAPatcher/DotNetCTFDumper.csproj b/NetMFAPatcher/DotNetCTFDumper.csproj
index 9e5fc72..b3ab08f 100644
--- a/NetMFAPatcher/DotNetCTFDumper.csproj
+++ b/NetMFAPatcher/DotNetCTFDumper.csproj
@@ -88,40 +88,41 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
diff --git a/NetMFAPatcher/MMFParser/ChunkLoaders/ObjectNames.cs b/NetMFAPatcher/MMFParser/ChunkLoaders/ObjectNames.cs
new file mode 100644
index 0000000..6eda0d8
--- /dev/null
+++ b/NetMFAPatcher/MMFParser/ChunkLoaders/ObjectNames.cs
@@ -0,0 +1,34 @@
+using NetMFAPatcher.chunkloaders;
+using NetMFAPatcher.Utils;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using static NetMFAPatcher.MMFParser.Data.ChunkList;
+
+namespace NetMFAPatcher.mmfparser.chunkloaders
+{
+ class ObjectNames : ChunkLoader//Fucking trash
+ {
+ public override void Print(bool ext)
+ {
+
+ }
+
+ public override void Read()
+ {
+ var start = reader.Tell();
+ var endpos = start + chunk.size;
+ while(true)
+ {
+ if (reader.Tell() >= endpos+4) break;
+
+ Console.WriteLine(reader.ReadWideString());
+ }
+
+ }
+ public ObjectNames(ByteIO reader) : base(reader) { }
+ public ObjectNames(Chunk chunk) : base(chunk) { }
+ }
+}
diff --git a/NetMFAPatcher/mmfparser/ChunkList.cs b/NetMFAPatcher/MMFParser/Data/ChunkList.cs
similarity index 75%
rename from NetMFAPatcher/mmfparser/ChunkList.cs
rename to NetMFAPatcher/MMFParser/Data/ChunkList.cs
index 14414e1..0a7253a 100644
--- a/NetMFAPatcher/mmfparser/ChunkList.cs
+++ b/NetMFAPatcher/MMFParser/Data/ChunkList.cs
@@ -1,4 +1,5 @@
using NetMFAPatcher.chunkloaders;
+using NetMFAPatcher.mmfparser.chunkloaders;
using NetMFAPatcher.utils;
using NetMFAPatcher.Utils;
using System;
@@ -6,12 +7,12 @@ using System.Collections.Generic;
using System.IO;
using static NetMFAPatcher.mmfparser.Constants;
-namespace NetMFAPatcher.mmfparser
+namespace NetMFAPatcher.MMFParser.Data
{
public class ChunkList
{
public List chunks = new List();
- public bool verbose = true;
+ public bool verbose = false;
public void Read(ByteIO exeReader)
{
@@ -26,8 +27,17 @@ namespace NetMFAPatcher.mmfparser
{
if (chunk.loader.verbose)
{
- chunk.loader.Print();
+ chunk.loader.Print(Program.LogAll);
}
+ }
+ if (chunk.verbose)
+ {
+ chunk.Print(Program.LogAll);
+ if(Program.LogAll) Console.ReadKey();
+
+
+
+
}
chunks.Add(chunk);
@@ -35,15 +45,12 @@ namespace NetMFAPatcher.mmfparser
{
chunk.BuildKey();
}
- if (chunk.id == 13108)
- {
-
- }
+
if (chunk.id == 32639) break; //LAST chunkID
}
- Logger.Log(verbose ? $" Total Chunks Count: {chunks.Count}":"ChunkList Done", true, ConsoleColor.Blue);
+ //Logger.Log(verbose ? $" Total Chunks Count: {chunks.Count}":"ChunkList Done", true, ConsoleColor.Blue);
}
public class Chunk
@@ -56,9 +63,9 @@ namespace NetMFAPatcher.mmfparser
public ChunkLoader loader;
public byte[] chunk_data;
public ChunkFlags flag;
- int size = 0;
- int decompressed_size = 0;
- bool verbose = true;
+ public int size = 0;
+ public int decompressed_size = 0;
+ public bool verbose = false;
public Chunk(int Actualuid, ChunkList actual_chunk_list)
{
@@ -86,7 +93,6 @@ namespace NetMFAPatcher.mmfparser
chunk_data = Decryption.DecodeChunk(exeReader.ReadBytes(size),size,54);
break;
case ChunkFlags.CompressedAndEncrypyed:
- //exeReader.ReadBytes(size);
chunk_data = Decryption.DecodeMode3(exeReader.ReadBytes(size), size,id, 54);
break;
case ChunkFlags.Compressed:
@@ -103,12 +109,13 @@ namespace NetMFAPatcher.mmfparser
string path = $"{Program.DumpPath}\\CHUNKS\\{name}.chunk";
File.WriteAllBytes(path, chunk_data);
}
- if(verbose)
+ int tempId=0;
+ int.TryParse(name,out tempId);
+ if(tempId==id)
{
- //Print(false);
-
+ chunk_data.Log(true, "X2");
}
-
+
}
public void Print(bool extented)
@@ -122,6 +129,7 @@ namespace NetMFAPatcher.mmfparser
Logger.Log($" Size: {size} B", true, ConsoleColor.DarkCyan);
Logger.Log($" Decompressed Size: {decompressed_size} B", true, ConsoleColor.DarkCyan);
Logger.Log("---------------------------------------------", true, ConsoleColor.DarkCyan);
+
}
else
@@ -136,13 +144,28 @@ namespace NetMFAPatcher.mmfparser
}
public void BuildKey()
{
- string title = "";
+ string title = "Five Nights at Candy's 3";
string copyright = "";
- string project = "";
- title = "Sister Location";//chunk_list.get_chunk().value;
- copyright = "Scott Cawthon";//chunk_list.get_chunk().value;
- project = @"C:\Users\Scott\Desktop\FNAF 5\FNaF 5-157.mfa";//chunk_list.get_chunk().value;
- Decryption.MakeKey(title,copyright,project,54);
+ string project = @"C:\Users\Emil\Desktop\Five Nights at Candy's 3\Five Nights At Candy's 3.mfa";
+
+ var titleChunk = chunk_list.get_chunk();
+ if (titleChunk != null) title = titleChunk.value;
+
+
+
+ var copyrightChunk = chunk_list.get_chunk();
+ if (copyrightChunk != null) copyright = copyrightChunk.value;
+ var projectChunk = chunk_list.get_chunk();
+ if (projectChunk != null) project = projectChunk.value;
+ if (Program.game_data.product_build > 284)
+ {
+ Decryption.MakeKey(title, copyright, project, 54);
+ }
+ else
+ {
+ Decryption.MakeKey(project, title, copyright, 54);
+ }
+
Logger.Log("New Key!");
@@ -184,6 +207,9 @@ namespace NetMFAPatcher.mmfparser
case 8752:
loader = new AppDoc(chunk);
break;
+ case 8745://
+ loader = new FrameItems(chunk);
+ break;
case 8757:
loader = new AppIcon(chunk);
break;
@@ -205,12 +231,25 @@ namespace NetMFAPatcher.mmfparser
case 13108:
loader = new FrameHeader(chunk);
break;
+ case 13112:
+ loader = new ObjectInstances(chunk);
+ break;
case 26214:
loader = new ImageBank(chunk);
break;
case 26216:
loader = new SoundBank(chunk);
break;
+ case 17477:
+ loader = new ObjectName(chunk);
+ break;
+ case 17476:
+ loader = new ObjectHeader(chunk);
+ break;
+ case 8788:
+ loader = new ObjectNames(chunk);
+ break;
+
}
if (loader != null)
@@ -236,5 +275,10 @@ namespace NetMFAPatcher.mmfparser
return null; //I hope this wont happen
}
+ public T get_loader(ChunkLoader loader) where T : ChunkLoader
+ {
+
+ return (T)loader;
+ }
}
}
\ No newline at end of file
diff --git a/NetMFAPatcher/mmfparser/DataLoader.cs b/NetMFAPatcher/MMFParser/Data/DataLoader.cs
similarity index 92%
rename from NetMFAPatcher/mmfparser/DataLoader.cs
rename to NetMFAPatcher/MMFParser/Data/DataLoader.cs
index ebb81f4..3fbefd0 100644
--- a/NetMFAPatcher/mmfparser/DataLoader.cs
+++ b/NetMFAPatcher/MMFParser/Data/DataLoader.cs
@@ -4,7 +4,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
-using static NetMFAPatcher.mmfparser.ChunkList;
+using static NetMFAPatcher.MMFParser.Data.ChunkList;
namespace mmfparser
{
diff --git a/NetMFAPatcher/mmfparser/GameData.cs b/NetMFAPatcher/MMFParser/Data/GameData.cs
similarity index 94%
rename from NetMFAPatcher/mmfparser/GameData.cs
rename to NetMFAPatcher/MMFParser/Data/GameData.cs
index 1af5a1a..ccb4310 100644
--- a/NetMFAPatcher/mmfparser/GameData.cs
+++ b/NetMFAPatcher/MMFParser/Data/GameData.cs
@@ -1,4 +1,5 @@
using NetMFAPatcher.chunkloaders;
+using NetMFAPatcher.mmfparser;
using NetMFAPatcher.Utils;
using System;
using System.Collections.Generic;
@@ -7,7 +8,7 @@ using System.Text;
using System.Threading.Tasks;
using static NetMFAPatcher.mmfparser.Constants;
-namespace NetMFAPatcher.mmfparser
+namespace NetMFAPatcher.MMFParser.Data
{
public class GameData
{
@@ -38,7 +39,7 @@ namespace NetMFAPatcher.mmfparser
Print();
Logger.Log("Press any key to continue",true,ConsoleColor.Magenta);
- Console.ReadKey();
+ //Console.ReadKey();
gameChunks = new ChunkList();
gameChunks.Read(exeReader);
diff --git a/NetMFAPatcher/mmfparser/MFA.cs b/NetMFAPatcher/MMFParser/Data/MFA.cs
similarity index 95%
rename from NetMFAPatcher/mmfparser/MFA.cs
rename to NetMFAPatcher/MMFParser/Data/MFA.cs
index 14b9495..ebeab39 100644
--- a/NetMFAPatcher/mmfparser/MFA.cs
+++ b/NetMFAPatcher/MMFParser/Data/MFA.cs
@@ -59,6 +59,7 @@ namespace NetMFAPatcher.mfa
description = reader.ReadAscii(reader.ReadInt32());
path = reader.ReadAscii(reader.ReadInt32());
stamp = reader.ReadBytes(reader.ReadInt32());
+ Console.WriteLine(path);
@@ -85,9 +86,15 @@ namespace NetMFAPatcher.mfa
}
var music = new MusicBank(reader);
music.Read();
- //Images&Icons are not implemented
- reader.Seek(1191182);//hardcoded offset
+ //if (reader.ReadAscii(4) != "AGMI")
+ //{
+ // throw new Exception("Invalid Icon Bank");
+ //}
+ //var icons = new AGMIBank(reader);
+ //icons.Read();
+
+ reader.Seek(17710);//hardcoded offset
reader.ReadInt32();//checkDefault
author = reader.ReadAscii(reader.ReadInt32());
diff --git a/NetMFAPatcher/mmfparser/PackData.cs b/NetMFAPatcher/MMFParser/Data/PackData.cs
similarity index 98%
rename from NetMFAPatcher/mmfparser/PackData.cs
rename to NetMFAPatcher/MMFParser/Data/PackData.cs
index 811024f..b739492 100644
--- a/NetMFAPatcher/mmfparser/PackData.cs
+++ b/NetMFAPatcher/MMFParser/Data/PackData.cs
@@ -8,7 +8,7 @@ using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
-namespace NetMFAPatcher.mmfparser
+namespace NetMFAPatcher.MMFParser.Data
{
public class PackData
{
diff --git a/NetMFAPatcher/Program.cs b/NetMFAPatcher/Program.cs
index 083a91e..27a11c0 100644
--- a/NetMFAPatcher/Program.cs
+++ b/NetMFAPatcher/Program.cs
@@ -7,6 +7,7 @@ using System.Collections;
using NetMFAPatcher.mfa;
using NetMFAPatcher.utils;
using System.Runtime.InteropServices;
+using NetMFAPatcher.MMFParser.Data;
namespace NetMFAPatcher
{
@@ -26,6 +27,8 @@ namespace NetMFAPatcher
public static bool DumpSounds = false;
public static bool verbose;
+ public static bool LogAll=false;
+
[STAThread]
static void Main(string[] args)
@@ -43,7 +46,7 @@ namespace NetMFAPatcher
{
- ByteIO mfaReader = new ByteIO(@"E:\DotNetCTF\Tests\mmftest.mfa", FileMode.Open);
+ ByteIO mfaReader = new ByteIO(@"E:\anaconda-mode3\Application.mfa", FileMode.Open);
var mfa = new MFA(mfaReader);
mfa.Read();
diff --git a/NetMFAPatcher/Utils/Decryption.cs b/NetMFAPatcher/Utils/Decryption.cs
index 97faf19..c147269 100644
--- a/NetMFAPatcher/Utils/Decryption.cs
+++ b/NetMFAPatcher/Utils/Decryption.cs
@@ -11,40 +11,39 @@ namespace NetMFAPatcher.utils
class Decryption
{
public static byte[] key;
+ public static string storedName;
+ public static string storedCopyright;
+ public static string storedPath;
public static void MakeKey(string STitle, string SCopyright,string SProject, byte MagicChar)
{
+ storedName = STitle;
+ storedCopyright = SCopyright;
+ storedPath = SProject;
byte[] nameBytes = Encoding.ASCII.GetBytes(STitle);
- var name = Marshal.AllocHGlobal(STitle.Length);
+ var name = Marshal.StringToHGlobalAnsi(STitle);//Marshal.AllocHGlobal(STitle.Length);
Marshal.Copy(nameBytes, 0, name, STitle.Length);
byte[] copyrightBytes = Encoding.ASCII.GetBytes(SCopyright);
- var copyright = Marshal.AllocHGlobal(SCopyright.Length);
+ var copyright = Marshal.StringToHGlobalAnsi(SCopyright);
Marshal.Copy(copyrightBytes, 0, copyright, SCopyright.Length);
- byte[] filenameBytes = Encoding.ASCII.GetBytes(SProject);
- var pathfilename = Marshal.AllocHGlobal(SProject.Length);
+ byte[] filenameBytes = Encoding.ASCII.GetBytes(SProject);
+ var pathfilename = Marshal.StringToHGlobalAnsi(SProject);
Marshal.Copy(filenameBytes, 0, pathfilename, SProject.Length);
var ptr = Decryption.make_key(name, copyright, pathfilename, MagicChar);
byte[] Key = new byte[257];
- Marshal.Copy(ptr, Key, 0, 257);
+ Marshal.Copy(ptr, Key, 0, 256);
Marshal.FreeHGlobal(name);
Marshal.FreeHGlobal(copyright);
Marshal.FreeHGlobal(pathfilename);
key = Key;
- //some hardcoded checks for SL
+ //key.Log(true, "X2");
- if (Console.ReadKey().Key==ConsoleKey.N)
- {
- if(key[73] == 0xB2)
- {
- return;
- }
- MakeKey("Sister Location", "Scott Cawthon", @"C:\Users\Scott\Desktop\FNAF 5\FNaF 5-157.mfa", 54);
- }
+
}
@@ -54,7 +53,10 @@ namespace NetMFAPatcher.utils
var DecompressedSize = reader.ReadUInt32();
var chunkData = reader.ReadBytes((int)reader.Size());
- chunkData[0] ^= (byte)(((byte)ChunkID & 0xFF) ^ ((byte)ChunkID >> 0x8));
+ if (ChunkID % 2 != 0)
+ {
+ chunkData[0] ^= (byte)(((byte)ChunkID & 0xFF) ^ ((byte)ChunkID >> 0x8));
+ }
var data = new ByteIO(DecodeChunk(chunkData,ChunkSize,MagicChar));
var compressed_size = data.ReadUInt32();
@@ -62,13 +64,11 @@ namespace NetMFAPatcher.utils
}
public static byte[] DecodeChunk(byte[] ChunkData, int ChunkSize,byte MagicChar)
{
- //Console.WriteLine("Decoding: "+ChunkData.Log(false,"X2"));
IntPtr InputChunkPtr = Marshal.AllocHGlobal(ChunkSize);
Marshal.Copy(ChunkData, 0, InputChunkPtr, ChunkSize-4);
var OutputChunkPtr = decode_chunk(InputChunkPtr, ChunkSize, MagicChar);
byte[] DecodedChunk = new byte[ChunkSize];
Marshal.Copy(OutputChunkPtr, DecodedChunk,0,ChunkSize);
- //Console.WriteLine("Result: " + DecodedChunk.Log(false, "X2"));
return DecodedChunk;
diff --git a/NetMFAPatcher/Utils/Helper.cs b/NetMFAPatcher/Utils/Helper.cs
index 289c844..e2d7930 100644
--- a/NetMFAPatcher/Utils/Helper.cs
+++ b/NetMFAPatcher/Utils/Helper.cs
@@ -1,4 +1,5 @@
-using System;
+using NetMFAPatcher.chunkloaders;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -9,21 +10,7 @@ namespace NetMFAPatcher
{
static class Helper
{
- public static byte[] ToBytes(this string str)
- {
- return Encoding.ASCII.GetBytes(str);
-
-
- }
- public static int getPadding(int width, int pad=2)
- {
- int num = pad - width * 3 % pad;
- if(num==pad)
- {
- num = 0;
- }
- return (int)Math.Ceiling((double)((float)num/3f));
- }
+
public static string CleanInput(string strIn)
{
try
@@ -37,18 +24,7 @@ namespace NetMFAPatcher
return String.Empty;
}
}
- public static string GetString(this byte[] bytes)
- {
- string str = "";
- for (int i = 0; i < bytes.Length; i++)
- {
- str += Convert.ToChar(bytes[i]);
-
- }
- return str;
-
-
- }
+
public static string Log(this byte[] bytes, bool log = true, string format = "")
{
string Temp = String.Empty;
@@ -76,6 +52,7 @@ namespace NetMFAPatcher
}
+
}
}
diff --git a/NetMFAPatcher/Utils/ImageHelper.cs b/NetMFAPatcher/Utils/ImageHelper.cs
index e379a09..6134a28 100644
--- a/NetMFAPatcher/Utils/ImageHelper.cs
+++ b/NetMFAPatcher/Utils/ImageHelper.cs
@@ -30,5 +30,14 @@ namespace NetMFAPatcher.utils
return Color.FromArgb((int)b, (int)g, (int)r);
}
+ public static int getPadding(int width, int pad = 2)
+ {
+ int num = pad - width * 3 % pad;
+ if (num == pad)
+ {
+ num = 0;
+ }
+ return (int)Math.Ceiling((double)((float)num / 3f));
+ }
}
}
diff --git a/NetMFAPatcher/mmfparser/Constants.cs b/NetMFAPatcher/mmfparser/Constants.cs
index 6d951e8..6d43ebb 100644
--- a/NetMFAPatcher/mmfparser/Constants.cs
+++ b/NetMFAPatcher/mmfparser/Constants.cs
@@ -94,16 +94,6 @@ namespace NetMFAPatcher.mmfparser
Sounds=26216,
Musics=26217,
Last=32639
-
-
-
-
-
-
-
-
-
-
}
}
}
diff --git a/NetMFAPatcher/mmfparser/chunkloaders/AppHeader.cs b/NetMFAPatcher/mmfparser/chunkloaders/AppHeader.cs
index 78c5ebf..e668787 100644
--- a/NetMFAPatcher/mmfparser/chunkloaders/AppHeader.cs
+++ b/NetMFAPatcher/mmfparser/chunkloaders/AppHeader.cs
@@ -5,6 +5,8 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NetMFAPatcher.mmfparser;
+using NetMFAPatcher.mmfparser.mfaloaders;
+using static NetMFAPatcher.MMFParser.Data.ChunkList;
namespace NetMFAPatcher.chunkloaders
{
@@ -32,7 +34,7 @@ namespace NetMFAPatcher.chunkloaders
initialLives = (int) (reader.ReadUInt32() ^ 0xffffffff);
var controls = new Controls(reader);
controls.Read();
- controls.Print();
+ controls.Print(false);
var borderColor = reader.ReadBytes(4);
numberOfFrames = reader.ReadInt32();
@@ -40,7 +42,7 @@ namespace NetMFAPatcher.chunkloaders
var windowsMenuIndex = reader.ReadSByte();
}
- public override void Print()
+ public override void Print(bool ext)
{
Logger.Log($"ScreenRes: {windowWidth}x{windowHeight}", true, ConsoleColor.DarkMagenta);
Logger.Log($"Score: {initialScore}, Lives: {initialLives}", true, ConsoleColor.DarkMagenta);
@@ -53,7 +55,7 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public AppHeader(ChunkList.Chunk chunk) : base(chunk)
+ public AppHeader(Chunk chunk) : base(chunk)
{
}
}
@@ -82,7 +84,7 @@ namespace NetMFAPatcher.chunkloaders
}
}
- public override void Print()
+ public override void Print(bool ext)
{
Logger.Log("Controls: ",true,ConsoleColor.Yellow);
foreach (var item in items)
diff --git a/NetMFAPatcher/mmfparser/chunkloaders/AppMenu.cs b/NetMFAPatcher/mmfparser/chunkloaders/AppMenu.cs
index d0535e1..914f9c5 100644
--- a/NetMFAPatcher/mmfparser/chunkloaders/AppMenu.cs
+++ b/NetMFAPatcher/mmfparser/chunkloaders/AppMenu.cs
@@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using static NetMFAPatcher.MMFParser.Data.ChunkList;
namespace NetMFAPatcher.mmfparser.chunkloaders
{
@@ -16,12 +17,12 @@ namespace NetMFAPatcher.mmfparser.chunkloaders
{
}
- public AppMenu(ChunkList.Chunk chunk) : base(chunk)
+ public AppMenu(Chunk chunk) : base(chunk)
{
}
- public override void Print()
+ public override void Print(bool ext)
{
- throw new NotImplementedException();
+
}
public override void Read()
@@ -87,10 +88,10 @@ namespace NetMFAPatcher.mmfparser.chunkloaders
{
}
- public AppMenuItem(ChunkList.Chunk chunk) : base(chunk)
+ public AppMenuItem(Chunk chunk) : base(chunk)
{
}
- public override void Print()
+ public override void Print(bool ext)
{
throw new NotImplementedException();
}
diff --git a/NetMFAPatcher/mmfparser/chunkloaders/ChunkLoader.cs b/NetMFAPatcher/mmfparser/chunkloaders/ChunkLoader.cs
index 7bf7478..31cca94 100644
--- a/NetMFAPatcher/mmfparser/chunkloaders/ChunkLoader.cs
+++ b/NetMFAPatcher/mmfparser/chunkloaders/ChunkLoader.cs
@@ -5,7 +5,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
-using static NetMFAPatcher.mmfparser.ChunkList;
+using static NetMFAPatcher.MMFParser.Data.ChunkList;
namespace NetMFAPatcher.chunkloaders
{
@@ -29,6 +29,6 @@ namespace NetMFAPatcher.chunkloaders
public abstract void Read();
- public abstract void Print();
+ public abstract void Print(bool ext);
}
}
\ No newline at end of file
diff --git a/NetMFAPatcher/mmfparser/chunkloaders/Frame.cs b/NetMFAPatcher/mmfparser/chunkloaders/Frame.cs
index 1ecf0ce..507f7bc 100644
--- a/NetMFAPatcher/mmfparser/chunkloaders/Frame.cs
+++ b/NetMFAPatcher/mmfparser/chunkloaders/Frame.cs
@@ -1,4 +1,5 @@
using NetMFAPatcher.mmfparser;
+using NetMFAPatcher.MMFParser.Data;
using NetMFAPatcher.Utils;
using System;
using System.Collections.Generic;
@@ -40,17 +41,19 @@ namespace NetMFAPatcher.chunkloaders
public int height;
public byte[] background;
public int flags;
+ public int CountOfObjs;
int top;
int bottom;
int left;
int right;
- public override void Print()
+ public override void Print(bool ext)
{
Logger.Log($"Frame: {name}", true, ConsoleColor.Green);
Logger.Log($" Password: {(password!=null ? password : "None")}", true, ConsoleColor.Green);
Logger.Log($" Size: {width}x{height}", true, ConsoleColor.Green);
+ Logger.Log($" Objects: {CountOfObjs}", true, ConsoleColor.Green);
Logger.Log($"-------------------------", true, ConsoleColor.Green);
}
@@ -77,6 +80,12 @@ namespace NetMFAPatcher.chunkloaders
height = header.height;
background = header.background;
flags = header.flags;
+ var objects = chunks.get_chunk();
+ if(objects!=null)
+ {
+ CountOfObjs = objects.CountOfObjects;
+
+ }
@@ -85,9 +94,9 @@ namespace NetMFAPatcher.chunkloaders
foreach (var item in chunks.chunks)
{
- Directory.CreateDirectory($"{Program.DumpPath}\\CHUNKS\\FRAMES\\{this.name}");
- string path = $"{Program.DumpPath}\\CHUNKS\\FRAMES\\{this.name}\\{chunk.name}.chunk";
- File.WriteAllBytes(path, item.chunk_data);
+ //Directory.CreateDirectory($"{Program.DumpPath}\\CHUNKS\\FRAMES\\{this.name}");
+ //string path = $"{Program.DumpPath}\\CHUNKS\\FRAMES\\{this.name}\\{chunk.name}.chunk";
+ //File.WriteAllBytes(path, item.chunk_data);
}
@@ -119,7 +128,7 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public override void Print()
+ public override void Print(bool ext)
{
}
@@ -137,8 +146,9 @@ namespace NetMFAPatcher.chunkloaders
}
class ObjectInstances : ChunkLoader
{
- public int width;
- public int height;
+
+ public int CountOfObjects;
+ public List items = new List();
public ObjectInstances(ByteIO reader) : base(reader)
{
@@ -148,13 +158,22 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public override void Print()
+ public override void Print(bool ext)
{
}
public override void Read()
- {
+ {
+ return;
+ CountOfObjects = (int)reader.ReadUInt32();
+ for (int i = 0; i < CountOfObjects; i++)
+ {
+ var item = new ObjectInstances(reader);
+ item.Read();
+ items.Add(item);
+ }
+
diff --git a/NetMFAPatcher/mmfparser/chunkloaders/FrameItems.cs b/NetMFAPatcher/mmfparser/chunkloaders/FrameItems.cs
index 67d10b6..d328ee2 100644
--- a/NetMFAPatcher/mmfparser/chunkloaders/FrameItems.cs
+++ b/NetMFAPatcher/mmfparser/chunkloaders/FrameItems.cs
@@ -5,21 +5,36 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using static NetMFAPatcher.MMFParser.Data.ChunkList;
namespace NetMFAPatcher.mmfparser.chunkloaders
{
class FrameItems : ChunkLoader
{
- public FrameItems(ChunkList.Chunk chunk) : base(chunk) { }
+ public Dictionary itemDict = new Dictionary();
+ public List names = new List();
+ public FrameItems(Chunk chunk) : base(chunk) { }
public FrameItems(ByteIO reader) : base(reader) { }
- public override void Print()
+ public override void Print(bool ext)
{
-
+
}
public override void Read()
{
+ Console.WriteLine("Reading FrameItems");
+ var count = reader.ReadInt32();
+ for (int i = 0; i < count; i++)
+ {
+ var item = new ObjectInfo(reader);
+ item.verbose = false;
+ item.Read();
+ itemDict.Add(item.handle, item);
+ names.Add(item.name);
+ Logger.Log($"Found FrameItem: '{item.name}' with handle ({item.handle})", true, ConsoleColor.Magenta);
+ }
+
}
}
}
diff --git a/NetMFAPatcher/mmfparser/chunkloaders/ObjectInfo.cs b/NetMFAPatcher/mmfparser/chunkloaders/ObjectInfo.cs
index 3941eba..3582cc7 100644
--- a/NetMFAPatcher/mmfparser/chunkloaders/ObjectInfo.cs
+++ b/NetMFAPatcher/mmfparser/chunkloaders/ObjectInfo.cs
@@ -1,24 +1,106 @@
using NetMFAPatcher.chunkloaders;
+using NetMFAPatcher.MMFParser.Data;
+using NetMFAPatcher.utils;
using NetMFAPatcher.Utils;
-using System;
using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using static NetMFAPatcher.MMFParser.Data.ChunkList;
namespace NetMFAPatcher.mmfparser.chunkloaders
{
class ObjectInfo : ChunkLoader
{
- public ObjectInfo(ChunkList.Chunk chunk) : base(chunk) { }
+ public List chunks = new List();
+ public int properties = 0;
+ public string name = "ERROR";
+ public int handle;
+ public int objectType;
+ public int flags;
+ public bool transparent;
+ public bool antialias;
+ public int inkEffect;
+ public int inkEffectValue;
+ public int shaderId;
+ public int items;
+ public ObjectInfo(Chunk chunk) : base(chunk) { }
public ObjectInfo(ByteIO reader) : base(reader) { }
- public override void Print()
+ public override void Print(bool ext)
{
}
public override void Read()
{
+ var infoChunks = new ChunkList();
+ infoChunks.verbose = false;
+ infoChunks.Read(reader);
+
+ foreach (var chunk in infoChunks.chunks)
+ {
+ chunk.verbose = false;
+ var loader = chunk.loader;
+ if(loader is ObjectName)
+ {
+ var actualLoader = infoChunks.get_loader(loader);
+ name = actualLoader.value;
+
+ }
+ else if(loader is ObjectHeader)
+ {
+ var actualLoader = infoChunks.get_loader(loader);
+ handle = actualLoader.handle;
+ objectType = actualLoader.objectType;
+ flags = actualLoader.flags;
+ var inkEffect = actualLoader.inkEffect;
+ transparent = ByteFlag.getFlag(inkEffect, 28);
+ antialias = ByteFlag.getFlag(inkEffect, 29);
+
+
+ }
+
+
+
+ }
+
+ }
+ }
+ class ObjectName : StringChunk
+ {
+ public ObjectName(ByteIO reader) : base(reader)
+ {
+ }
+
+ public ObjectName(Chunk chunk) : base(chunk)
+ {
+ }
+ }
+ class ObjectHeader : ChunkLoader
+ {
+ public int handle;
+ public int objectType;
+ public int flags;
+ public int inkEffect;
+ public int inkEffectParameter;
+ public ObjectHeader(ByteIO reader) : base(reader)
+ {
+ }
+
+ public ObjectHeader(Chunk chunk) : base(chunk)
+ {
+ }
+
+ public override void Print(bool ext)
+ {
+
+ }
+
+ public override void Read()
+ {
+ handle = reader.ReadInt16();
+ objectType = reader.ReadInt16();
+ flags = reader.ReadUInt16();
+ var reserved = reader.ReadInt16();
+ inkEffect = (int)reader.ReadUInt32();
+ inkEffectParameter = (int)reader.ReadUInt32();
}
}
diff --git a/NetMFAPatcher/mmfparser/chunkloaders/StringChunk.cs b/NetMFAPatcher/mmfparser/chunkloaders/StringChunk.cs
index 2430dee..c92f726 100644
--- a/NetMFAPatcher/mmfparser/chunkloaders/StringChunk.cs
+++ b/NetMFAPatcher/mmfparser/chunkloaders/StringChunk.cs
@@ -5,6 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NetMFAPatcher.mmfparser;
+using static NetMFAPatcher.MMFParser.Data.ChunkList;
namespace NetMFAPatcher.chunkloaders
{
@@ -19,7 +20,7 @@ namespace NetMFAPatcher.chunkloaders
value = reader.ReadWideString();
}
- public override void Print()
+ public override void Print(bool ext)
{
//Logger.Log($"{chunk.name} contains: {value}\n",true,ConsoleColor.DarkCyan);
}
@@ -29,7 +30,7 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public StringChunk(ChunkList.Chunk chunk) : base(chunk)
+ public StringChunk(Chunk chunk) : base(chunk)
{
}
}
@@ -40,7 +41,7 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public AppName(ChunkList.Chunk chunk) : base(chunk)
+ public AppName(Chunk chunk) : base(chunk)
{
}
}
@@ -51,7 +52,7 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public AppAuthor(ChunkList.Chunk chunk) : base(chunk)
+ public AppAuthor(Chunk chunk) : base(chunk)
{
}
}
@@ -62,7 +63,7 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public ExtPath(ChunkList.Chunk chunk) : base(chunk)
+ public ExtPath(Chunk chunk) : base(chunk)
{
}
}
@@ -73,7 +74,7 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public EditorFilename(ChunkList.Chunk chunk) : base(chunk)
+ public EditorFilename(Chunk chunk) : base(chunk)
{
}
}
@@ -84,7 +85,7 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public TargetFilename(ChunkList.Chunk chunk) : base(chunk)
+ public TargetFilename(Chunk chunk) : base(chunk)
{
}
}
@@ -95,7 +96,7 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public AppDoc(ChunkList.Chunk chunk) : base(chunk)
+ public AppDoc(Chunk chunk) : base(chunk)
{
}
}
@@ -106,7 +107,7 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public AboutText(ChunkList.Chunk chunk) : base(chunk)
+ public AboutText(Chunk chunk) : base(chunk)
{
}
}
@@ -117,7 +118,7 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public Copyright(ChunkList.Chunk chunk) : base(chunk)
+ public Copyright(Chunk chunk) : base(chunk)
{
}
}
@@ -128,7 +129,7 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public DemoFilePath(ChunkList.Chunk chunk) : base(chunk)
+ public DemoFilePath(Chunk chunk) : base(chunk)
{
}
}
diff --git a/NetMFAPatcher/mmfparser/chunkloaders/banks/DebugImageBank.cs b/NetMFAPatcher/mmfparser/chunkloaders/banks/DebugImageBank.cs
index dc41151..69f3d0f 100644
--- a/NetMFAPatcher/mmfparser/chunkloaders/banks/DebugImageBank.cs
+++ b/NetMFAPatcher/mmfparser/chunkloaders/banks/DebugImageBank.cs
@@ -10,6 +10,7 @@ using System.Linq;
using System.Numerics;
using System.Text;
using System.Threading.Tasks;
+using static NetMFAPatcher.MMFParser.Data.ChunkList;
namespace NetMFAPatcher.chunkloaders
{
@@ -20,10 +21,10 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public DebugImageBank(ChunkList.Chunk chunk) : base(chunk)
+ public DebugImageBank(Chunk chunk) : base(chunk)
{
}
- public override void Print()
+ public override void Print(bool ext)
{
}
@@ -113,7 +114,7 @@ namespace NetMFAPatcher.chunkloaders
var colorSize = 3;
Bitmap bitmap = new Bitmap((int)num2, (int)num3);
Color[,] array = new Color[(int)num2, (int)num3];
- int num4 = Helper.getPadding((int)num2, 2);
+ int num4 = ImageHelper.getPadding((int)num2, 2);
int num5 = 0;
for (int i = 0; i < (int)num3; i++)
{
@@ -176,7 +177,7 @@ namespace NetMFAPatcher.chunkloaders
- public override void Print()
+ public override void Print(bool ext)
{
}
@@ -184,7 +185,7 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public DebugImageItem(ChunkList.Chunk chunk) : base(chunk)
+ public DebugImageItem(Chunk chunk) : base(chunk)
{
}
diff --git a/NetMFAPatcher/mmfparser/chunkloaders/banks/FontBank.cs b/NetMFAPatcher/mmfparser/chunkloaders/banks/FontBank.cs
index ff06a91..0fb9acf 100644
--- a/NetMFAPatcher/mmfparser/chunkloaders/banks/FontBank.cs
+++ b/NetMFAPatcher/mmfparser/chunkloaders/banks/FontBank.cs
@@ -6,13 +6,14 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using static NetMFAPatcher.MMFParser.Data.ChunkList;
namespace NetMFAPatcher.chunkloaders
{
class FontBank : ChunkLoader
{
int numberOfItems;
- public override void Print()
+ public override void Print(bool ext)
{
Logger.Log($"FontCount:{numberOfItems.ToString()}");
}
@@ -30,7 +31,7 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public FontBank(ChunkList.Chunk chunk) : base(chunk)
+ public FontBank(Chunk chunk) : base(chunk)
{
}
}
diff --git a/NetMFAPatcher/mmfparser/chunkloaders/banks/ImageBank.cs b/NetMFAPatcher/mmfparser/chunkloaders/banks/ImageBank.cs
index 385855d..bdc1b0f 100644
--- a/NetMFAPatcher/mmfparser/chunkloaders/banks/ImageBank.cs
+++ b/NetMFAPatcher/mmfparser/chunkloaders/banks/ImageBank.cs
@@ -10,6 +10,7 @@ using System.Linq;
using System.Numerics;
using System.Text;
using System.Threading.Tasks;
+using static NetMFAPatcher.MMFParser.Data.ChunkList;
namespace NetMFAPatcher.chunkloaders
{
@@ -20,10 +21,10 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public ImageBank(ChunkList.Chunk chunk) : base(chunk)
+ public ImageBank(Chunk chunk) : base(chunk)
{
}
- public override void Print()
+ public override void Print(bool ext)
{
}
@@ -205,7 +206,7 @@ namespace NetMFAPatcher.chunkloaders
{
Bitmap bitmap = new Bitmap((int)width, (int)height);
Color[,] array = new Color[(int)width, (int)height];
- int num4 = Helper.getPadding((int)width, 2);
+ int num4 = ImageHelper.getPadding((int)width, 2);
int num5 = 0;
using (ByteIO binaryReader = image_data)
{
@@ -264,7 +265,7 @@ namespace NetMFAPatcher.chunkloaders
- public override void Print()
+ public override void Print(bool ext)
{
}
@@ -272,7 +273,7 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public ImageItem(ChunkList.Chunk chunk) : base(chunk)
+ public ImageItem(Chunk chunk) : base(chunk)
{
}
}
diff --git a/NetMFAPatcher/mmfparser/chunkloaders/banks/MusicBank.cs b/NetMFAPatcher/mmfparser/chunkloaders/banks/MusicBank.cs
index 2914d54..783e77d 100644
--- a/NetMFAPatcher/mmfparser/chunkloaders/banks/MusicBank.cs
+++ b/NetMFAPatcher/mmfparser/chunkloaders/banks/MusicBank.cs
@@ -6,6 +6,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NetMFAPatcher.mmfparser;
+using static NetMFAPatcher.MMFParser.Data.ChunkList;
namespace NetMFAPatcher.chunkloaders
{
@@ -15,7 +16,7 @@ namespace NetMFAPatcher.chunkloaders
public int references = 0;
public List items;
- public override void Print()
+ public override void Print(bool ext)
{
}
@@ -36,7 +37,7 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public MusicBank(ChunkList.Chunk chunk) : base(chunk)
+ public MusicBank(Chunk chunk) : base(chunk)
{
}
}
@@ -47,7 +48,7 @@ namespace NetMFAPatcher.chunkloaders
public string name = "ERROR";
public byte[] data;
- public override void Print()
+ public override void Print(bool ext)
{
}
@@ -59,7 +60,7 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public MusicFile(ChunkList.Chunk chunk) : base(chunk)
+ public MusicFile(Chunk chunk) : base(chunk)
{
}
}
diff --git a/NetMFAPatcher/mmfparser/chunkloaders/banks/SoundBank.cs b/NetMFAPatcher/mmfparser/chunkloaders/banks/SoundBank.cs
index 998b250..4c2242d 100644
--- a/NetMFAPatcher/mmfparser/chunkloaders/banks/SoundBank.cs
+++ b/NetMFAPatcher/mmfparser/chunkloaders/banks/SoundBank.cs
@@ -6,6 +6,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NetMFAPatcher.mmfparser;
+using static NetMFAPatcher.MMFParser.Data.ChunkList;
namespace NetMFAPatcher.chunkloaders
{
@@ -16,7 +17,7 @@ namespace NetMFAPatcher.chunkloaders
public List items;
public bool isCompressed = true;
- public override void Print()
+ public override void Print(bool ext)
{
}
@@ -39,7 +40,7 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public SoundBank(ChunkList.Chunk chunk) : base(chunk)
+ public SoundBank(Chunk chunk) : base(chunk)
{
}
}
@@ -50,7 +51,7 @@ namespace NetMFAPatcher.chunkloaders
public string name = "ERROR";
public byte[] data;
- public override void Print()
+ public override void Print(bool ext)
{
}
@@ -62,7 +63,7 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public SoundBase(ChunkList.Chunk chunk) : base(chunk)
+ public SoundBase(Chunk chunk) : base(chunk)
{
}
}
@@ -118,7 +119,7 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public SoundItem(ChunkList.Chunk chunk) : base(chunk)
+ public SoundItem(Chunk chunk) : base(chunk)
{
}
}
diff --git a/NetMFAPatcher/mmfparser/chunkloaders/yves.cs b/NetMFAPatcher/mmfparser/chunkloaders/yves.cs
index 4240ee9..6dc736f 100644
--- a/NetMFAPatcher/mmfparser/chunkloaders/yves.cs
+++ b/NetMFAPatcher/mmfparser/chunkloaders/yves.cs
@@ -8,6 +8,7 @@ using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using static NetMFAPatcher.MMFParser.Data.ChunkList;
namespace NetMFAPatcher.chunkloaders
{
@@ -20,12 +21,13 @@ namespace NetMFAPatcher.chunkloaders
{
}
- public AppIcon(ChunkList.Chunk chunk) : base(chunk)
+ public AppIcon(Chunk chunk) : base(chunk)
{
}
public override void Read()
{
+ return;
Logger.Log("dumpingIcon");
reader.ReadBytes(reader.ReadInt32() - 4);
List color_indexes = new List();
@@ -65,7 +67,7 @@ namespace NetMFAPatcher.chunkloaders
}
- public override void Print()
+ public override void Print(bool ext)
{
}
diff --git a/NetMFAPatcher/mmfparser/mfaloaders/ImageBank.cs b/NetMFAPatcher/mmfparser/mfaloaders/ImageBank.cs
index c4b9778..547e8d1 100644
--- a/NetMFAPatcher/mmfparser/mfaloaders/ImageBank.cs
+++ b/NetMFAPatcher/mmfparser/mfaloaders/ImageBank.cs
@@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using static NetMFAPatcher.MMFParser.Data.ChunkList;
namespace mmfparser.mfaloaders
{
@@ -36,9 +37,12 @@ namespace mmfparser.mfaloaders
Logger.Log($"Number of image items: {count.ToString()}");
for (int i = 0; i < count; i++)
{
+ Console.WriteLine("READING IMAGE: " + reader.Tell());
var item = new ImageItem(reader);
item.Read();
+
+
}
@@ -48,7 +52,7 @@ namespace mmfparser.mfaloaders
{
}
- public AGMIBank(ChunkList.Chunk chunk) : base(chunk)
+ public AGMIBank(Chunk chunk) : base(chunk)
{
}
}