rmdec/RMDEC/VXAProjectToolset.cs

521 lines
16 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Threading;
using System.Windows.Forms;
using static System.Windows.Forms.ListBox;
namespace RMDEC
{
public partial class vxaProjectToolset : Form
{
public VXAProject vxProject;
public vxaProjectToolset(VXAProject proj)
{
vxProject = proj;
InitializeComponent();
}
private List<string> decFileList = new List<string>();
private bool encryptedIndexingComplete = false;
private bool unencryptedIndexingComplete = false;
private void onIndexThreadComplete()
{
if(encryptedIndexingComplete && unencryptedIndexingComplete)
{
processingText.Text = "Waiting";
processingText.BackColor = Color.Red;
decryptSelected.Enabled = true;
encryptSelected.Enabled = true;
makeMV.Enabled = true;
unmakeMV.Enabled = true;
processingBar.Style = ProgressBarStyle.Continuous;
this.Cursor = Cursors.Arrow;
}
}
private void indexFiles()
{
processingText.Text = "Indexing";
processingText.BackColor = Color.Yellow;
processingBar.Style = ProgressBarStyle.Marquee;
this.Cursor = Cursors.WaitCursor;
//Index Encrypted Files
Thread indexEncryptedFilesThread = new Thread(() =>
{
vxProject.PopulateFileList();
foreach (string file in vxProject.FileList)
{
string fileExtension = Path.GetExtension(file);
Invoke((Action)delegate
{
encryptedFileList.Items.Add("[" + fileExtension.ToUpper().TrimStart('.') + "] " + file);
});
}
Invoke((Action)delegate
{
encryptedIndexingComplete = true;
unencryptedIndexingComplete = true;
onIndexThreadComplete();
});
});
indexEncryptedFilesThread.Start();
/*Index Unencrypted Files
Thread indexUnencryptedFilesThread = new Thread(() =>
{
List<string> pngList = new List<string>();
List<string> oggList = new List<string>();
List<string> m4aList = new List<string>();
foreach (string file in Directory.EnumerateFiles(vxProject.FilePath, "*", SearchOption.AllDirectories))
{
string relativeName = file.Remove(0, vxProject.FilePath.Length + 1);
string fileExtension = Path.GetExtension(file).ToLower();
if(blacklistedFiles.Contains(relativeName))
{
continue;
}
switch (fileExtension)
{
case ".png":
pngList.Add(file);
break;
case ".ogg":
oggList.Add(file);
break;
case ".m4a":
m4aList.Add(file);
break;
}
}
//add PNG
foreach (string png in pngList)
{
string relativeName = png.Remove(0, vxProject.FilePath.Length+1);
Invoke((Action)delegate
{
decryptedFileList.Items.Add("[PNG] " + relativeName);
});
decFileList.Add(png);
}
//add OGG
foreach (string ogg in oggList)
{
string relativeName = ogg.Remove(0, vxProject.FilePath.Length+1);
Invoke((Action)delegate
{
decryptedFileList.Items.Add("[OGG] " + relativeName);
});
decFileList.Add(ogg);
}
//add M4A
foreach (string m4a in m4aList)
{
string relativeName = m4a.Remove(0, vxProject.FilePath.Length+1);
Invoke((Action)delegate
{
decryptedFileList.Items.Add("[M4A] " + relativeName);
});
decFileList.Add(m4a);
}
Invoke((Action)delegate
{
unencryptedImageCount = pngList.Count;
unencryptedMusicCount = oggList.Count + m4aList.Count;
unencryptedIndexingComplete = true;
onIndexThreadComplete();
});
});
indexUnencryptedFilesThread.Start();
*/
}
private void VXAProjectToolset_Load(object sender, EventArgs e)
{
updateTitle();
indexFiles();
}
private void updateTitle()
{
this.Text = "RMDec - [RMVXA] " + vxProject.GameTitle + " - " + vxProject.FilePath;
}
private void encryptSelected_Click(object sender, EventArgs e)
{
/* SelectedIndexCollection itemList = decryptedFileList.SelectedIndices;
int itemCount = itemList.Count;
if (itemCount < 1)
{
return;
}
int item = 0;
processingBar.Style = ProgressBarStyle.Continuous;
processingBar.Maximum = itemCount;
processingText.BackColor = Color.Yellow;
encryptSelected.Enabled = false;
decryptSelected.Enabled = false;
Thread decryptFilesThread = new Thread(() =>
{
int i = 1;
int total = itemCount;
do
{
Invoke((Action)delegate
{
itemCount = itemList.Count;
item = itemList[0];
processingText.Text = "Encrypting " + i.ToString() + "/" + total.ToString();
});
string decryptedFile = decFileList[item];
string newExtension = encodeFileExtension(decryptedFile);
string encryptedFile = Path.ChangeExtension(decryptedFile, newExtension);
FileStream Decrypted = File.OpenRead(decryptedFile);
FileStream Encrypted = File.OpenWrite(encryptedFile);
vxProject.EncryptFile(Decrypted, Encrypted);
Encrypted.Close();
Decrypted.Close();
File.Delete(decryptedFile);
Invoke((Action)delegate
{
string entry = decryptedFileList.Items[item].ToString();
string encryptedEntry = Path.ChangeExtension(entry, newExtension);
encryptedFileList.Items.Add(encryptedEntry);
encFileList.Add(encryptedFile);
decryptedFileList.Items.RemoveAt(item);
decFileList.RemoveAt(item);
processingBar.Value = i;
});
i++;
} while (itemCount > 1);
Invoke((Action)delegate
{
encryptSelected.Enabled = true;
decryptSelected.Enabled = true;
processingText.BackColor = Color.Green;
processingText.Text = "Encrypted " + total.ToString() + " files!";
});
});
decryptFilesThread.Start();
*/
}
private void decryptSelected_Click(object sender, EventArgs e)
{
SelectedIndexCollection itemList = encryptedFileList.SelectedIndices;
int itemCount = itemList.Count;
if (itemCount < 1)
{
return;
}
int item = 0;
processingBar.Style = ProgressBarStyle.Continuous;
processingBar.Maximum = itemCount;
processingText.BackColor = Color.Yellow;
encryptSelected.Enabled = false;
decryptSelected.Enabled = false;
makeMV.Enabled = false;
unmakeMV.Enabled = false;
Thread decryptFilesThread = new Thread(() =>
{
int i = 1;
int total = itemCount;
do
{
Invoke((Action)delegate
{
itemCount = itemList.Count;
item = itemList[0];
processingText.Text = "Decrypting " + i.ToString() + "/" + total.ToString();
});
string fileName = (Path.Combine(vxProject.FilePath, vxProject.FileList[item]));
Directory.CreateDirectory(Path.GetDirectoryName(fileName));
FileStream Decrypted = File.OpenWrite(fileName);
vxProject.DecryptFile(item, Decrypted);
Decrypted.Close();
Invoke((Action)delegate
{
string entry = encryptedFileList.Items[item].ToString();
string decryptedEntry = entry;
decryptedFileList.Items.Add(decryptedEntry);
encryptedFileList.Items.RemoveAt(item);
vxProject.FileList.RemoveAt(item);
processingBar.Value = i;
});
i++;
} while (itemCount > 1);
Invoke((Action)delegate
{
encryptSelected.Enabled = true;
decryptSelected.Enabled = true;
makeMV.Enabled = true;
unmakeMV.Enabled = true;
processingText.BackColor = Color.Green;
processingText.Text = "Decrypted " + total.ToString() + " files!";
});
});
decryptFilesThread.Start();
}
private void onMakeMvComplete()
{
string rpgProject = Path.Combine(vxProject.FilePath, "Game.rvproj2");
File.WriteAllText(rpgProject, "RPGVXAce 1.00");
processingText.BackColor = Color.Green;
processingText.Text = "Game Un-Deployed!";
encryptSelected.Enabled = true;
decryptSelected.Enabled = true;
makeMV.Enabled = true;
unmakeMV.Enabled = true;
Process.Start(vxProject.FilePath);
}
private void makeMV_Click(object sender, EventArgs e)
{
int itemCount = vxProject.FileList.Count;
//Decrypt Everything
if (itemCount > 0)
{
processingBar.Style = ProgressBarStyle.Continuous;
processingBar.Maximum = itemCount;
processingText.BackColor = Color.Yellow;
encryptSelected.Enabled = false;
decryptSelected.Enabled = false;
makeMV.Enabled = false;
unmakeMV.Enabled = false;
Thread decryptFilesThread = new Thread(() =>
{
for (int i = 0; i < itemCount; i++)
{
Invoke((Action)delegate
{
processingText.Text = "Decrypting " + i.ToString() + "/" + itemCount.ToString();
});
string fileName = (Path.Combine(vxProject.FilePath, vxProject.FileList[0]));
Directory.CreateDirectory(Path.GetDirectoryName(fileName));
FileStream Decrypted = File.OpenWrite(fileName);
vxProject.DecryptFile(0, Decrypted);
Decrypted.Close();
Invoke((Action)delegate
{
string entry = encryptedFileList.Items[0].ToString();
string decryptedEntry = entry;
decryptedFileList.Items.Add(decryptedEntry);
decFileList.Add(fileName);
encryptedFileList.Items.RemoveAt(0);
vxProject.FileList.RemoveAt(0);
processingBar.Value = i;
});
}
Invoke((Action)delegate
{
onMakeMvComplete();
});
});
decryptFilesThread.Start();
}
else
{
onMakeMvComplete();
}
}
private void onUnMakeMvComplete()
{
string rpgProject = Path.Combine(vxProject.FilePath, "Game.rpgproject");
if(File.Exists(rpgProject))
{
File.Delete(rpgProject);
}
processingText.BackColor = Color.Green;
processingText.Text = "Game Deployed!";
encryptSelected.Enabled = true;
decryptSelected.Enabled = true;
makeMV.Enabled = true;
unmakeMV.Enabled = true;
}
private void unmakeMV_Click(object sender, EventArgs e)
{
/* int itemCount = decFileList.Count;
//Encrypt Everything
if (itemCount > 0)
{
processingBar.Style = ProgressBarStyle.Continuous;
processingBar.Maximum = itemCount;
processingText.BackColor = Color.Yellow;
encryptSelected.Enabled = false;
decryptSelected.Enabled = false;
makeMV.Enabled = false;
unmakeMV.Enabled = false;
Thread encryptFilesThread = new Thread(() =>
{
for (int i = 0; i < itemCount; i++)
{
Invoke((Action)delegate
{
processingText.Text = "Encrypting " + i.ToString() + "/" + itemCount.ToString();
});
string decryptedFile = decFileList[0];
string newExtension = encodeFileExtension(decryptedFile);
string encryptedFile = Path.ChangeExtension(decryptedFile, newExtension);
FileStream Encrypted = File.OpenWrite(encryptedFile);
FileStream Decrypted = File.OpenRead(decryptedFile);
vxProject.EncryptFile(Decrypted,Encrypted);
Encrypted.Close();
Decrypted.Close();
File.Delete(decryptedFile);
Invoke((Action)delegate
{
string entry = decryptedFileList.Items[0].ToString();
string encryptedEntry = Path.ChangeExtension(entry, newExtension);
encryptedFileList.Items.Add(encryptedEntry);
encFileList.Add(encryptedFile);
decryptedFileList.Items.RemoveAt(0);
decFileList.RemoveAt(0);
processingBar.Value = i;
});
}
Invoke((Action)delegate
{
onUnMakeMvComplete();
});
});
encryptFilesThread.Start();
}
else
{
onUnMakeMvComplete();
}
*/
}
}
}