319 lines
9.9 KiB
C#
319 lines
9.9 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using static System.Windows.Forms.ListBox;
|
|
|
|
namespace RMDEC
|
|
{
|
|
public partial class MVProjectToolset : Form
|
|
{
|
|
public MVProject mvProject;
|
|
public MVProjectToolset(MVProject proj)
|
|
{
|
|
mvProject = proj;
|
|
InitializeComponent();
|
|
}
|
|
|
|
private List<string> encFileList = new List<string>();
|
|
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(() =>
|
|
{
|
|
|
|
List<string> pngList = new List<string>();
|
|
List<string> oggList = new List<string>();
|
|
List<string> M4AList = new List<string>();
|
|
|
|
foreach (string file in Directory.EnumerateFiles(mvProject.FilePath, "*", SearchOption.AllDirectories))
|
|
{
|
|
|
|
|
|
string fileExtension = Path.GetExtension(file);
|
|
|
|
switch (fileExtension)
|
|
{
|
|
case ".rpgmvp":
|
|
pngList.Add(file);
|
|
break;
|
|
case ".rpgmvo":
|
|
oggList.Add(file);
|
|
break;
|
|
case ".rpgmvm":
|
|
M4AList.Add(file);
|
|
break;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
//add PNG
|
|
foreach (string png in pngList)
|
|
{
|
|
string relativeName = png.Remove(0, mvProject.FilePath.Length+1);
|
|
Invoke((Action)delegate
|
|
{
|
|
encryptedFileList.Items.Add("[PNG] " + relativeName);
|
|
});
|
|
encFileList.Add(png);
|
|
}
|
|
|
|
//add OGG
|
|
foreach (string ogg in oggList)
|
|
{
|
|
string relativeName = ogg.Remove(0, mvProject.FilePath.Length+1);
|
|
Invoke((Action)delegate
|
|
{
|
|
encryptedFileList.Items.Add("[OGG] " + relativeName);
|
|
});
|
|
encFileList.Add(ogg);
|
|
}
|
|
|
|
//add M4A
|
|
foreach (string M4A in M4AList)
|
|
{
|
|
string relativeName = M4A.Remove(0, mvProject.FilePath.Length+1);
|
|
Invoke((Action)delegate
|
|
{
|
|
encryptedFileList.Items.Add("[M4A] " + relativeName);
|
|
});
|
|
encFileList.Add(M4A);
|
|
}
|
|
|
|
Invoke((Action)delegate
|
|
{
|
|
encryptedIndexingComplete = 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(mvProject.FilePath, "*", SearchOption.AllDirectories))
|
|
{
|
|
|
|
string fileExtension = Path.GetExtension(file);
|
|
|
|
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, mvProject.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, mvProject.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, mvProject.FilePath.Length+1);
|
|
Invoke((Action)delegate
|
|
{
|
|
decryptedFileList.Items.Add("[M4A] " + relativeName);
|
|
});
|
|
decFileList.Add(M4A);
|
|
}
|
|
|
|
Invoke((Action)delegate
|
|
{
|
|
unencryptedIndexingComplete = true;
|
|
onIndexThreadComplete();
|
|
});
|
|
});
|
|
indexUnencryptedFilesThread.Start();
|
|
|
|
|
|
}
|
|
private void MVProjectToolset_Load(object sender, EventArgs e)
|
|
{
|
|
this.Text = "RMDec - RPG Maker MV - " + mvProject.GameTitle + " - " + mvProject.FilePath;
|
|
indexFiles();
|
|
}
|
|
|
|
private void encryptSelected_Click(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void decryptSelected_Click(object sender, EventArgs e)
|
|
{
|
|
SelectedIndexCollection itemList = encryptedFileList.SelectedIndices;
|
|
int itemCount = itemList.Count;
|
|
|
|
if (itemCount < 1)
|
|
{
|
|
return;
|
|
}
|
|
|
|
int[] selectedIndexes = new int[itemCount];
|
|
int item = 0;
|
|
|
|
itemList.CopyTo(selectedIndexes, 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 = "Decrypting " + i.ToString() + "/" + total.ToString();
|
|
});
|
|
|
|
|
|
|
|
string encryptedFile = encFileList[item];
|
|
string extension = Path.GetExtension(encryptedFile);
|
|
string newExtension = "";
|
|
|
|
switch (extension)
|
|
{
|
|
case ".rpgmvp":
|
|
newExtension = ".png";
|
|
break;
|
|
case ".rpgmvo":
|
|
newExtension = "ogg";
|
|
break;
|
|
case ".rpgmvm":
|
|
newExtension = ".m4a";
|
|
break;
|
|
|
|
}
|
|
|
|
string decryptedFile = Path.ChangeExtension(encryptedFile, newExtension);
|
|
|
|
FileStream Encrypted = File.OpenRead(encryptedFile);
|
|
FileStream Decrypted = File.OpenWrite(decryptedFile);
|
|
|
|
mvProject.DecryptFile(Encrypted, Decrypted);
|
|
|
|
Encrypted.Close();
|
|
Decrypted.Close();
|
|
|
|
File.Delete(encryptedFile);
|
|
|
|
Invoke((Action)delegate
|
|
{
|
|
string entry = encryptedFileList.Items[item].ToString();
|
|
string decryptedEntry = Path.ChangeExtension(entry, newExtension);
|
|
decryptedFileList.Items.Add(decryptedEntry);
|
|
decFileList.Add(decryptedFile);
|
|
|
|
encryptedFileList.Items.Remove(entry);
|
|
encFileList.RemoveAt(item);
|
|
|
|
processingBar.Value = i;
|
|
});
|
|
|
|
i++;
|
|
} while (itemCount > 1);
|
|
|
|
Invoke((Action)delegate
|
|
{
|
|
encryptSelected.Enabled = true;
|
|
decryptSelected.Enabled = true;
|
|
processingText.BackColor = Color.Green;
|
|
processingText.Text = "Decrypted " + total.ToString() + " files!";
|
|
});
|
|
});
|
|
|
|
|
|
|
|
decryptFilesThread.Start();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
}
|