diff --git a/FModel/Forms/AESManager.Designer.cs b/FModel/Forms/AESManager.Designer.cs
index 7e7caf11..a2451f53 100644
--- a/FModel/Forms/AESManager.Designer.cs
+++ b/FModel/Forms/AESManager.Designer.cs
@@ -73,7 +73,7 @@
//
this.OKButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.OKButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.OKButton.Location = new System.Drawing.Point(480, 249);
+ this.OKButton.Location = new System.Drawing.Point(480, 292);
this.OKButton.Name = "OKButton";
this.OKButton.Size = new System.Drawing.Size(97, 21);
this.OKButton.TabIndex = 16;
@@ -83,12 +83,13 @@
//
// groupBox1
//
- this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBox1.Controls.Add(this.panel1);
this.groupBox1.Location = new System.Drawing.Point(12, 67);
this.groupBox1.Name = "groupBox1";
- this.groupBox1.Size = new System.Drawing.Size(565, 176);
+ this.groupBox1.Size = new System.Drawing.Size(565, 219);
this.groupBox1.TabIndex = 17;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Dynamic Keys:";
@@ -99,14 +100,14 @@
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(3, 16);
this.panel1.Name = "panel1";
- this.panel1.Size = new System.Drawing.Size(559, 157);
+ this.panel1.Size = new System.Drawing.Size(559, 200);
this.panel1.TabIndex = 0;
//
// AESManager
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(589, 282);
+ this.ClientSize = new System.Drawing.Size(589, 325);
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.OKButton);
this.Controls.Add(this.groupBox3);
diff --git a/FModel/Forms/About.Designer.cs b/FModel/Forms/About.Designer.cs
index ccbd4b68..bc37b556 100644
--- a/FModel/Forms/About.Designer.cs
+++ b/FModel/Forms/About.Designer.cs
@@ -48,7 +48,7 @@
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
- //
+ //
// linkLabel1
//
this.linkLabel1.AutoSize = true;
@@ -77,7 +77,8 @@
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(360, 40);
this.label1.TabIndex = 3;
- this.label1.Text = "FModel is a Fortnite .PAK file explorer built in C#\r\nIf you find this project useful, feel free to give it a star on GitHub\r\n⊂(◕‿◕)つ";
+ this.label1.Text = "FModel is a Fortnite .PAK file explorer built in C#\r\nIf you find this project use" +
+ "ful, feel free to give it a star on GitHub\r\n⊂(◕‿◕)つ";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label2
@@ -109,9 +110,9 @@
this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label4.Location = new System.Drawing.Point(53, 124);
this.label4.Name = "label4";
- this.label4.Size = new System.Drawing.Size(71, 12);
+ this.label4.Size = new System.Drawing.Size(277, 13);
this.label4.TabIndex = 11;
- this.label4.Text = "• Asval • Waddlesworth • AyeTSG • FireMonkey";
+ this.label4.Text = "• Asval • Waddlesworth • AyeTSG • FireMonkey • Maiky M";
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// About
diff --git a/FModel/MainWindow.Designer.cs b/FModel/MainWindow.Designer.cs
index 70442654..07952a28 100644
--- a/FModel/MainWindow.Designer.cs
+++ b/FModel/MainWindow.Designer.cs
@@ -70,6 +70,7 @@
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
this.backgroundWorker2 = new System.ComponentModel.BackgroundWorker();
+ this.copySelectedFilePathToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.statusStrip1.SuspendLayout();
this.menuStrip1.SuspendLayout();
this.panel1.SuspendLayout();
@@ -146,26 +147,26 @@
// loadOneToolStripMenuItem
//
this.loadOneToolStripMenuItem.Name = "loadOneToolStripMenuItem";
- this.loadOneToolStripMenuItem.Size = new System.Drawing.Size(162, 22);
+ this.loadOneToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.loadOneToolStripMenuItem.Text = "Load One PAK";
this.loadOneToolStripMenuItem.DropDownItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.loadOneToolStripMenuItem_DropDownItemClicked);
//
// loadAllToolStripMenuItem
//
this.loadAllToolStripMenuItem.Name = "loadAllToolStripMenuItem";
- this.loadAllToolStripMenuItem.Size = new System.Drawing.Size(162, 22);
+ this.loadAllToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.loadAllToolStripMenuItem.Text = "Load All PAKs";
this.loadAllToolStripMenuItem.Click += new System.EventHandler(this.loadAllToolStripMenuItem_Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
- this.toolStripSeparator1.Size = new System.Drawing.Size(159, 6);
+ this.toolStripSeparator1.Size = new System.Drawing.Size(177, 6);
//
// backupPAKsToolStripMenuItem
//
this.backupPAKsToolStripMenuItem.Name = "backupPAKsToolStripMenuItem";
- this.backupPAKsToolStripMenuItem.Size = new System.Drawing.Size(162, 22);
+ this.backupPAKsToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.backupPAKsToolStripMenuItem.Text = "Backup PAKs";
this.backupPAKsToolStripMenuItem.Click += new System.EventHandler(this.backupPAKsToolStripMenuItem_Click);
//
@@ -173,7 +174,7 @@
//
this.differenceModeToolStripMenuItem.CheckOnClick = true;
this.differenceModeToolStripMenuItem.Name = "differenceModeToolStripMenuItem";
- this.differenceModeToolStripMenuItem.Size = new System.Drawing.Size(162, 22);
+ this.differenceModeToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.differenceModeToolStripMenuItem.Text = "Difference Mode";
this.differenceModeToolStripMenuItem.CheckedChanged += new System.EventHandler(this.differenceModeToolStripMenuItem_CheckedChanged);
//
@@ -182,27 +183,29 @@
this.updateModeToolStripMenuItem.CheckOnClick = true;
this.updateModeToolStripMenuItem.Enabled = false;
this.updateModeToolStripMenuItem.Name = "updateModeToolStripMenuItem";
- this.updateModeToolStripMenuItem.Size = new System.Drawing.Size(162, 22);
+ this.updateModeToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.updateModeToolStripMenuItem.Text = "Update Mode";
this.updateModeToolStripMenuItem.CheckedChanged += new System.EventHandler(this.updateModeToolStripMenuItem_CheckedChanged);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
- this.toolStripSeparator2.Size = new System.Drawing.Size(159, 6);
+ this.toolStripSeparator2.Size = new System.Drawing.Size(177, 6);
//
// settingsToolStripMenuItem
//
this.settingsToolStripMenuItem.Image = global::FModel.Properties.Resources.properties_16xLG;
this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem";
- this.settingsToolStripMenuItem.Size = new System.Drawing.Size(162, 22);
+ this.settingsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4)));
+ this.settingsToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.settingsToolStripMenuItem.Text = "Settings";
this.settingsToolStripMenuItem.Click += new System.EventHandler(this.settingsToolStripMenuItem_Click);
//
// filesToolStripMenuItem
//
this.filesToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.searchToolStripMenuItem});
+ this.searchToolStripMenuItem,
+ this.copySelectedFilePathToolStripMenuItem});
this.filesToolStripMenuItem.Name = "filesToolStripMenuItem";
this.filesToolStripMenuItem.Size = new System.Drawing.Size(42, 20);
this.filesToolStripMenuItem.Text = "Files";
@@ -210,7 +213,8 @@
// searchToolStripMenuItem
//
this.searchToolStripMenuItem.Name = "searchToolStripMenuItem";
- this.searchToolStripMenuItem.Size = new System.Drawing.Size(109, 22);
+ this.searchToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F1;
+ this.searchToolStripMenuItem.Size = new System.Drawing.Size(216, 22);
this.searchToolStripMenuItem.Text = "Search";
this.searchToolStripMenuItem.Click += new System.EventHandler(this.searchToolStripMenuItem_Click);
//
@@ -228,7 +232,7 @@
// saveImageToolStripMenuItem
//
this.saveImageToolStripMenuItem.Name = "saveImageToolStripMenuItem";
- this.saveImageToolStripMenuItem.Size = new System.Drawing.Size(168, 22);
+ this.saveImageToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.saveImageToolStripMenuItem.Text = "Save Image";
this.saveImageToolStripMenuItem.Click += new System.EventHandler(this.saveImageToolStripMenuItem_Click);
//
@@ -236,18 +240,18 @@
//
this.autoSaveImagesToolStripMenuItem.CheckOnClick = true;
this.autoSaveImagesToolStripMenuItem.Name = "autoSaveImagesToolStripMenuItem";
- this.autoSaveImagesToolStripMenuItem.Size = new System.Drawing.Size(168, 22);
+ this.autoSaveImagesToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.autoSaveImagesToolStripMenuItem.Text = "Auto Save Images";
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
- this.toolStripSeparator3.Size = new System.Drawing.Size(165, 6);
+ this.toolStripSeparator3.Size = new System.Drawing.Size(177, 6);
//
// mergeImagesToolStripMenuItem
//
this.mergeImagesToolStripMenuItem.Name = "mergeImagesToolStripMenuItem";
- this.mergeImagesToolStripMenuItem.Size = new System.Drawing.Size(168, 22);
+ this.mergeImagesToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.mergeImagesToolStripMenuItem.Text = "Merge Images";
this.mergeImagesToolStripMenuItem.Click += new System.EventHandler(this.mergeImagesToolStripMenuItem_Click);
//
@@ -460,6 +464,14 @@
this.backgroundWorker2.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker2_DoWork);
this.backgroundWorker2.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker2_RunWorkerCompleted);
//
+ // copySelectedFilePathToolStripMenuItem
+ //
+ this.copySelectedFilePathToolStripMenuItem.Name = "copySelectedFilePathToolStripMenuItem";
+ this.copySelectedFilePathToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F2;
+ this.copySelectedFilePathToolStripMenuItem.Size = new System.Drawing.Size(216, 22);
+ this.copySelectedFilePathToolStripMenuItem.Text = "Copy Selected File Path";
+ this.copySelectedFilePathToolStripMenuItem.Click += new System.EventHandler(this.CopySelectedFilePathToolStripMenuItem_Click);
+ //
// MainWindow
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -533,6 +545,7 @@
private System.Windows.Forms.ToolStripMenuItem filesToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem searchToolStripMenuItem;
private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.ToolStripMenuItem copySelectedFilePathToolStripMenuItem;
}
}
diff --git a/FModel/MainWindow.cs b/FModel/MainWindow.cs
index 77772cc8..ce654f99 100644
--- a/FModel/MainWindow.cs
+++ b/FModel/MainWindow.cs
@@ -1545,5 +1545,25 @@ namespace FModel
ImagesMerger.AskMergeImages();
}
#endregion
+
+ private void CopySelectedFilePathToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ if (listBox1.SelectedItem != null)
+ {
+ string treeviewPath = treeView1.SelectedNode.FullPath;
+ if (treeviewPath.StartsWith("..\\")) { treeviewPath = treeviewPath.Substring(3); } //if loading all paks
+
+ string path = treeviewPath + "\\" + listBox1.SelectedItem;
+ if (!path.Contains(".")) //if file uasset/uexp/ubulk
+ {
+ Clipboard.SetText(path.Replace("\\", "/") + ".uasset");
+ }
+ else
+ {
+ Clipboard.SetText(path.Replace("\\", "/"));
+ }
+ AppendText("Copied!", Color.Green, true);
+ }
+ }
}
}
diff --git a/FModel/MainWindow.resx b/FModel/MainWindow.resx
index 0b178330..dd0273af 100644
--- a/FModel/MainWindow.resx
+++ b/FModel/MainWindow.resx
@@ -131,7 +131,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABa
- CAAAAk1TRnQBSQFMAgEBAgEAASgBAQEoAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+ CAAAAk1TRnQBSQFMAgEBAgEAATABAQEwAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
diff --git a/FModel/Methods/AESManager/DynamicKeysManager.cs b/FModel/Methods/AESManager/DynamicKeysManager.cs
index db2773f9..4d7968f8 100644
--- a/FModel/Methods/AESManager/DynamicKeysManager.cs
+++ b/FModel/Methods/AESManager/DynamicKeysManager.cs
@@ -39,6 +39,7 @@ namespace FModel
}
AESEntries = outputList;
}
+ else { throw new Exception("Fail to locate AESManager.xml"); }
}
}
}
diff --git a/FModel/Methods/BackPAKs/DynamicPAKs.cs b/FModel/Methods/BackPAKs/DynamicPAKs.cs
index c6f296b0..58674b90 100644
--- a/FModel/Methods/BackPAKs/DynamicPAKs.cs
+++ b/FModel/Methods/BackPAKs/DynamicPAKs.cs
@@ -36,7 +36,7 @@ namespace FModel
}
catch (Exception ex)
{
- Console.WriteLine(ex.Message);
+ throw new Exception(ex.Message);
}
return content;
}
diff --git a/FModel/Methods/IconGenerator/Translations/AssetNameMap.cs b/FModel/Methods/IconGenerator/Translations/AssetNameMap.cs
index 566f735c..b1504326 100644
--- a/FModel/Methods/IconGenerator/Translations/AssetNameMap.cs
+++ b/FModel/Methods/IconGenerator/Translations/AssetNameMap.cs
@@ -62,7 +62,8 @@ namespace FModel
{
int index = listBeforeData.IndexOf(str);
- //Console.WriteLine("DName: " + listBeforeData[index - 3]);
+ Console.WriteLine("DName: " + listBeforeData[index - 3]);
+ Console.WriteLine("Description: " + listBeforeData[index - 1]);
myNamespacesList.Add(listBeforeData[index - 3]);
myNamespacesList.Add(listBeforeData[index - 1]);
@@ -83,7 +84,7 @@ namespace FModel
reader.ReadBytes(24);
int AssetLength = reader.ReadInt32();
- Console.WriteLine(AssetLength);
+ //Console.WriteLine(AssetLength);
reader.ReadBytes(13);
int NamespaceCount = reader.ReadInt32();
diff --git a/FModel/Methods/JohnWick/JohnWick.cs b/FModel/Methods/JohnWick/JohnWick.cs
index 67e6ac3f..95635c79 100644
--- a/FModel/Methods/JohnWick/JohnWick.cs
+++ b/FModel/Methods/JohnWick/JohnWick.cs
@@ -99,9 +99,16 @@ namespace FModel
}
currentPakToCheck = currentPak;
- /*if (File.Exists(AssetPath.Substring(0, AssetPath.LastIndexOf(".")) + ".uasset")) //TEST
+ /*if (AssetPath.Contains("Athena\\Items\\") && File.Exists(AssetPath.Substring(0, AssetPath.LastIndexOf(".")) + ".uexp")) //TEST
{
- AssetNameMap.getNameMap(AssetPath.Substring(0, AssetPath.LastIndexOf(".")) + ".uasset");
+ try
+ {
+ AssetNameMap.searchStringsInUexp(AssetPath.Substring(0, AssetPath.LastIndexOf(".")) + ".uexp");
+ }
+ catch (Exception ex)
+ {
+ throw new Exception(ex.Message);
+ }
}*/
return AssetPath;
diff --git a/FModel/Methods/Serializer/LocRes/LocResSerializer.cs b/FModel/Methods/Serializer/LocRes/LocResSerializer.cs
index 12781937..fb45e03a 100644
--- a/FModel/Methods/Serializer/LocRes/LocResSerializer.cs
+++ b/FModel/Methods/Serializer/LocRes/LocResSerializer.cs
@@ -1,6 +1,8 @@
using Newtonsoft.Json;
+using System;
using System.Collections.Generic;
using System.IO;
+using System.Linq;
using System.Text;
namespace FModel
@@ -12,6 +14,7 @@ namespace FModel
* */
static class LocResSerializer
{
+ private static byte[] LocResMagic = { 0x0E, 0x14, 0x74, 0x75, 0x67, 0x4A, 0x03, 0xFC, 0x4A, 0x15, 0x90, 0x9D, 0xC3, 0x37, 0x7F, 0x1B };
private static long LocalizedStringArrayOffset { get; set; }
private static string[] LocalizedStringArray { get; set; }
private static string NamespacesString { get; set; }
@@ -28,36 +31,42 @@ namespace FModel
using (BinaryReader reader = new BinaryReader(File.Open(filepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), Encoding.GetEncoding(1252)))
{
byte[] MagicNumber = reader.ReadBytes(16);
-
- byte VersionNumber = reader.ReadByte();
-
- LocalizedStringArrayOffset = reader.ReadInt64();
- if (LocalizedStringArrayOffset != -1)
+ if (MagicNumber.SequenceEqual(LocResMagic))
{
- long CurrentFileOffset = reader.BaseStream.Position;
-
- reader.BaseStream.Seek(LocalizedStringArrayOffset, SeekOrigin.Begin);
- int arrayLength = reader.ReadInt32();
-
- reader.BaseStream.Seek(LocalizedStringArrayOffset, SeekOrigin.Begin);
-
- LocalizedStringArray = new string[arrayLength];
- for (int i = 0; i < LocalizedStringArray.Length; i++)
+ byte VersionNumber = reader.ReadByte();
+ if (VersionNumber == 2) //optimized
{
- LocalizedStringArray[i] = AssetReader.readCleanString(reader);
- }
-
- reader.BaseStream.Seek(CurrentFileOffset, SeekOrigin.Begin);
-
- uint NamespaceCount = reader.ReadUInt32();
- reader.ReadBytes(17);
-
- for (uint i = 0; i < NamespaceCount; i++)
- {
- reader.ReadInt32();
- readNamespaces(reader);
+ LocalizedStringArrayOffset = reader.ReadInt64();
+ if (LocalizedStringArrayOffset != -1)
+ {
+ long CurrentFileOffset = reader.BaseStream.Position;
+
+ reader.BaseStream.Seek(LocalizedStringArrayOffset, SeekOrigin.Begin);
+ int arrayLength = reader.ReadInt32();
+
+ reader.BaseStream.Seek(LocalizedStringArrayOffset, SeekOrigin.Begin);
+
+ LocalizedStringArray = new string[arrayLength];
+ for (int i = 0; i < LocalizedStringArray.Length; i++)
+ {
+ LocalizedStringArray[i] = AssetReader.readCleanString(reader);
+ }
+
+ reader.BaseStream.Seek(CurrentFileOffset, SeekOrigin.Begin);
+
+ uint NamespaceCount = reader.ReadUInt32();
+ reader.ReadBytes(17);
+
+ for (uint i = 0; i < NamespaceCount; i++)
+ {
+ reader.ReadInt32();
+ readNamespaces(reader);
+ }
+ }
}
+ else { throw new Exception("Unsupported LocRes version."); }
}
+ else { throw new Exception("Wrong LocResMagic number."); }
}
return JsonConvert.SerializeObject(LocResDict, Formatting.Indented);
diff --git a/README.md b/README.md
index d19e0ea8..0fcd053d 100644
--- a/README.md
+++ b/README.md
@@ -74,10 +74,10 @@ Also if you find this project useful, feel free to give it a :star: thank you :k
- [Find & Replace for ScintillaNET](https://www.nuget.org/packages/snt.ScintillaNet.FindReplaceDialog/)
- [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json)
### Contributors
-| **Waddlesworth** | **AyeTSG** | **FireMonkey** |
-| :---: | :---: | :---: |
-| [](https://github.com/SirWaddles) | [](https://github.com/AyeTSG) | [](https://github.com/ItsFireMonkey) |
-| `https://github.com/SirWaddles` | `https://twitter.com/AyeTSG` | `https://twitter.com/FireMonkeyFN` |
+| **Waddlesworth** | **AyeTSG** | **FireMonkey** | **Maiky M** |
+| :---: | :---: | :---: | :---: |
+| [](https://github.com/SirWaddles) | [](https://github.com/AyeTSG) | [](https://github.com/ItsFireMonkey) | [](https://github.com/MaikyM) |
+| `https://github.com/SirWaddles` | `https://twitter.com/AyeTSG` | `https://twitter.com/FireMonkeyFN` |`https://twitter.com/Mikey_Bad05` |
### Why FModel
This project is mainly based on what [UModel](https://github.com/gildor2/UModel) can do, in a personalized way, in case UModel doesn't work, as a temporary rescue solution.
I'd highly suggest you to use [UModel](https://github.com/gildor2/UModel) instead if you wanna use something made professionnaly.