GayMaker-Studio/GayMaker-Studio/GayMakerStudio.cs

774 lines
33 KiB
C#

using LibOrbisPkg.GP4;
using LibOrbisPkg.PKG;
using System;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Net;
using System.Net.Cache;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.Xml;
namespace GayMaker_Studio
{
public partial class GayMakerStudio : Form
{
public String CurrentVerison = "1.1";
bool HasShaders = false;
public GayMakerStudio()
{
//Bypass Windows DPI Scaling
Font = new Font(Font.Name, 8.25f * 96f / CreateGraphics().DpiX, Font.Style, Font.Unit, Font.GdiCharSet, Font.GdiVerticalFont);
InitializeComponent();
}
public String GetProjectPath() //For GlobalGameSettings
{
return projectPath.Text;
}
private bool isValidContentId(string contentId)
{
if(contentId.Length == 36)
if (Char.IsLetter(contentId[0]))
if (Char.IsUpper(contentId[0]))
if (Char.IsLetter(contentId[1]))
if (Char.IsUpper(contentId[1]))
if (Char.IsNumber(contentId[2]))
if (Char.IsNumber(contentId[3]))
if (Char.IsNumber(contentId[4]))
if (Char.IsNumber(contentId[5]))
if (contentId[6] == '-')
if (Char.IsLetter(contentId[7]))
if (Char.IsUpper(contentId[7]))
if (Char.IsLetter(contentId[8]))
if (Char.IsUpper(contentId[8]))
if (Char.IsLetter(contentId[9]))
if (Char.IsUpper(contentId[9]))
if (Char.IsLetter(contentId[10]))
if (Char.IsUpper(contentId[10]))
if (Char.IsNumber(contentId[11]))
if (Char.IsNumber(contentId[12]))
if (Char.IsNumber(contentId[13]))
if (Char.IsNumber(contentId[14]))
if (Char.IsNumber(contentId[15]))
if (contentId[16] == '_')
if (Char.IsNumber(contentId[17]))
if (Char.IsNumber(contentId[18]))
if (contentId[19] == '-')
if ((Char.IsNumber(contentId[20])) || (Char.IsLetter(contentId[20]) && Char.IsUpper(contentId[20])))
if ((Char.IsNumber(contentId[21])) || (Char.IsLetter(contentId[21]) && Char.IsUpper(contentId[21])))
if ((Char.IsNumber(contentId[22])) || (Char.IsLetter(contentId[22]) && Char.IsUpper(contentId[22])))
if ((Char.IsNumber(contentId[23])) || (Char.IsLetter(contentId[23]) && Char.IsUpper(contentId[23])))
if ((Char.IsNumber(contentId[24])) || (Char.IsLetter(contentId[24]) && Char.IsUpper(contentId[24])))
if ((Char.IsNumber(contentId[25])) || (Char.IsLetter(contentId[25]) && Char.IsUpper(contentId[25])))
if ((Char.IsNumber(contentId[26])) || (Char.IsLetter(contentId[26]) && Char.IsUpper(contentId[26])))
if ((Char.IsNumber(contentId[27])) || (Char.IsLetter(contentId[27]) && Char.IsUpper(contentId[27])))
if ((Char.IsNumber(contentId[28])) || (Char.IsLetter(contentId[28]) && Char.IsUpper(contentId[28])))
if ((Char.IsNumber(contentId[29])) || (Char.IsLetter(contentId[29]) && Char.IsUpper(contentId[29])))
if ((Char.IsNumber(contentId[30])) || (Char.IsLetter(contentId[30]) && Char.IsUpper(contentId[30])))
if ((Char.IsNumber(contentId[31])) || (Char.IsLetter(contentId[31]) && Char.IsUpper(contentId[31])))
if ((Char.IsNumber(contentId[32])) || (Char.IsLetter(contentId[32]) && Char.IsUpper(contentId[32])))
if ((Char.IsNumber(contentId[33])) || (Char.IsLetter(contentId[33]) && Char.IsUpper(contentId[33])))
if ((Char.IsNumber(contentId[34])) || (Char.IsLetter(contentId[34]) && Char.IsUpper(contentId[34])))
if ((Char.IsNumber(contentId[35])) || (Char.IsLetter(contentId[35]) && Char.IsUpper(contentId[35])))
return true;
return false;
}
private bool canMakePkg()
{
if (File.Exists(projectPath.Text))
if (isValidContentId(contentID.Text))
return true;
return false;
}
private void reloadIcons()
{
IconPreview.BackgroundImage.Dispose();
IconPreview2.BackgroundImage.Dispose();
StartupPreview.BackgroundImage.Dispose();
Image IBG = new Bitmap(iconPath.Text);
IconPreview.BackgroundImage = IBG;
IconPreview2.BackgroundImage = IBG;
Image PBG = new Bitmap(picPath.Text);
StartupPreview.BackgroundImage = PBG;
}
private void GayMakerStudio_FormClosing(object sender, FormClosingEventArgs e)
{
try
{
Microsoft.Win32.RegistryKey key;
key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"Software\GayMakerStudio");
key.SetValue("project", projectPath.Text);
key.SetValue("icon0", iconPath.Text);
key.SetValue("pic1", picPath.Text);
key.SetValue("title", titleName.Text);
key.SetValue("contentID", contentID.Text);
key.SetValue("version", VersionSelect.SelectedIndex);
key.Close();
}
catch (Exception)
{
MessageBox.Show("Failed to save settings to registry.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void CheckForUpdates()
{
WebClient wc = new WebClient();
wc.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
String UpdateString = wc.DownloadString("https://bitbucket.org/SilicaAndPina/gaymaker-studio/raw/master/latest.md");
String[] Data = UpdateString.Split('~');
if (Data[0] != CurrentVerison)
{
DialogResult yesOrNo = MessageBox.Show("An update to GayMaker: Studio was found, Version: " + Data[0] + "\nWant to download it?\n\nThis system software update improves system performance.", "UPDATE FOUND!", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (yesOrNo == DialogResult.Yes)
{
DownloadingUpdate updateForm = new DownloadingUpdate();
this.Hide();
updateForm.ShowDialog();
this.Close();
this.Dispose();
}
}
}
private void GayMakerStudio_Load(object sender, EventArgs e)
{
this.Text += CurrentVerison;
ReloadVersions();
String OldEXEPath = Path.ChangeExtension(Assembly.GetExecutingAssembly().Location,".old");
if(File.Exists(OldEXEPath))
{
File.Delete(OldEXEPath);
}
try
{
CheckForUpdates();
}
catch (Exception) { };
try
{
Microsoft.Win32.RegistryKey key;
key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"Software\GayMakerStudio");
projectPath.Text = key.GetValue("project").ToString();
iconPath.Text = key.GetValue("icon0").ToString();
picPath.Text = key.GetValue("pic1").ToString();
titleName.Text = key.GetValue("title").ToString();
contentID.Text = key.GetValue("contentID").ToString();
int VerIndex = 0;
int.TryParse(key.GetValue("version").ToString(), out VerIndex);
VersionSelect.SelectedIndex = VerIndex;
homeScreen.Checked = true;
startupScreen.Checked = false;
homePreview.Visible = true;
StartupPreview.Visible = false;
key.Close();
reloadIcons();
}
catch (Exception) { };
if (!File.Exists(iconPath.Text))
{
iconPath.Text = "img\\icon0.png";
}
if (!File.Exists(picPath.Text))
{
picPath.Text = "img\\pic1.png";
}
if (!File.Exists(projectPath.Text))
{
projectPath.Text = "(none)";
}
else
{
GlobalGameSettings.Enabled = true;
}
CreatePKG.Enabled = canMakePkg();
}
private void titleName_TextChanged(object sender, EventArgs e)
{
homeScreen.Checked = true;
Title.Text = titleName.Text;
}
private void homeScreen_CheckedChanged(object sender, EventArgs e)
{
homePreview.Visible = true;
StartupPreview.Visible = false;
}
private void startupScreen_CheckedChanged(object sender, EventArgs e)
{
homePreview.Visible = false ;
StartupPreview.Visible = true;
}
private void contentID_TextChanged(object sender, EventArgs e)
{
if(isValidContentId(contentID.Text))
{
titleID.Text = contentID.Text.Substring(7, 9);
}
else
{
titleID.Text = "(INVALID)";
}
CreatePKG.Enabled = canMakePkg();
}
private void browseProject_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "GameMaker Studio Project Files|*.project.gmx;*.yyp|GameMaker Studio 1.x Project Files|*.project.gmx|GameMaker Studio 2.x Project Files|*.yyp";
openFileDialog1.Title = "Select a GameMaker Studio Project File";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
titleName.Text = "GameMaker: Studio";
iconPath.Text = "img\\icon0.png";
picPath.Text = "img\\pic1.png";
contentID.Text = "IV0000-GMSP00001_00-GAMEMAKERSTUDIO0";
projectPath.Text = openFileDialog1.FileName;
CreatePKG.Enabled = true;
GlobalGameSettings.Enabled = true;
reloadIcons();
}
}
private void browseIcon_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "Portable Network Graphics|*.PNG";
openFileDialog1.Title = "Select a PNG File";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
Image img = new Bitmap(openFileDialog1.FileName);
if (img.Height == 512 && img.Width == 512)
{
IconPreview.BackgroundImage.Dispose();
IconPreview2.BackgroundImage.Dispose();
IconPreview.BackgroundImage = img;
IconPreview2.BackgroundImage = img;
homeScreen.Checked = true;
iconPath.Text = openFileDialog1.FileName;
}
else
{
img.Dispose(); //fix issue #2
MessageBox.Show("Image is not 512x512!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void browsePic_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "Portable Network Graphics|*.PNG";
openFileDialog1.Title = "Select a PNG File";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
Image img = new Bitmap(openFileDialog1.FileName);
if (img.Height == 1080 && img.Width == 1920)
{
StartupPreview.BackgroundImage.Dispose();
StartupPreview.BackgroundImage = img;
startupScreen.Checked = true;
picPath.Text = openFileDialog1.FileName;
}
else
{
img.Dispose(); //fix issue #2
MessageBox.Show("Image is not 1920x1080 !", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void IconPreview_Click(object sender, EventArgs e)
{
startupScreen.Checked = true;
}
private void GlobalGameSettings_MouseEnter(object sender, EventArgs e)
{
GlobalGameSettings.ForeColor = Color.Blue;
GlobalGameSettings.Font = new Font(label1.Font.Name, label1.Font.SizeInPoints, FontStyle.Underline);
this.Cursor = Cursors.Hand;
}
private void GlobalGameSettings_MouseLeave(object sender, EventArgs e)
{
GlobalGameSettings.ForeColor = Color.Black;
GlobalGameSettings.Font = new Font(label1.Font.Name, label1.Font.SizeInPoints, FontStyle.Regular);
this.Cursor = Cursors.Arrow;
}
private void GlobalGameSettings_DoubleClick(object sender, EventArgs e)
{
GameSettings GlobalGames = new GameSettings();
GlobalGames.ShowDialog();
}
private void CopyDir(string source, string target)
{
GmacOut.AppendText("Copying Directory:\n \"" + source + "\"\n-> \"" + target + "\"\n");
if (!Directory.Exists(target)) Directory.CreateDirectory(target);
string[] sysEntries = Directory.GetFileSystemEntries(source);
foreach (string sysEntry in sysEntries)
{
string fileName = Path.GetFileName(sysEntry);
string targetPath = Path.Combine(target, fileName);
if (Directory.Exists(sysEntry))
CopyDir(sysEntry, targetPath);
else
{
GmacOut.AppendText("Copying \"" + fileName + "\"\n");
File.Copy(sysEntry, targetPath, true);
}
}
}
private void Make24Bit(string Src, string Dst)
{
GmacOut.AppendText("Making " + Src + " 24 bit color depth!");
Bitmap orig = new Bitmap(Src);
if ((orig.PixelFormat != PixelFormat.Format24bppRgb))
{
Bitmap clone = orig.Clone(new Rectangle(0, 0, orig.Width, orig.Height), PixelFormat.Format24bppRgb);
clone.Save(@Dst);
clone.Dispose();
GmacOut.AppendText(" Done!\n");
}
else
{
GmacOut.AppendText(" No need!\n");
File.Copy(Src, Dst);
}
orig.Dispose();
}
private bool CompileProject(string Src, string Dst)
{
string GMVer = VersionSelect.SelectedItem.ToString();
String TexturePageSize = "1028";
if (GMVer.StartsWith("1."))
{
XmlDocument DefaultConfig = new XmlDocument();
DefaultConfig.Load(Path.GetDirectoryName(projectPath.Text) + "\\Configs\\Default.config.gmx");
TexturePageSize = DefaultConfig.GetElementsByTagName("option_ps4_texture_page")[0].InnerText;
}
string versionBit = GMVer.Split('.')[2];
if(GMVer.StartsWith("2."))
{
GmacOut.AppendText("Creating license.plist...\n");
String LicenseFile = GMLicense.LicenseFormat.CreateLicense("ps4", GMLicense.Keys.GetPrivateKey());
if (!Directory.Exists(Dst+"\\GameMakerLicense"))
{
Directory.CreateDirectory(Dst + "\\GameMakerLicense");
}
File.WriteAllText(Dst + "\\GameMakerLicense\\licence.plist",LicenseFile);
GmacOut.AppendText("Written license file to: " + Dst + "\\GameMakerLicense\\license.plist\n");
}
string args;
if (HasShaders && GMVer.StartsWith("1."))
{
args = "/c /m=ps4 /config=\"Default\" /tgt=4294967296 /obob=True /obpp=False /obru=True /obes=False /i=3 /j=4 /cvm /tp=" + TexturePageSize + " /mv=1 /iv=0 /rv=0 /bv=" + versionBit + " /sh=False /ps4sdk=\"" + Directory.GetCurrentDirectory() + "\\ps4sdk\" /gn=\"" + titleName.Text + "\" /o=\"" + Dst + "\" \"" + Src + "\"";
}
else if(GMVer.StartsWith("1."))
{
args = "/c /m=ps4 /config=\"Default\" /tgt=4294967296 /obob=True /obpp=False /obru=True /obes=False /i=3 /j=4 /cvm /tp=" + TexturePageSize + " /mv=1 /iv=0 /rv=0 /bv=" + versionBit + " /sh=False /gn=\"" + titleName.Text + "\" /o=\"" + Dst + "\" \"" + Src + "\"";
}
else if(HasShaders && GMVer.StartsWith("2."))
{
args = "/c /zpex /zpuf=\""+Dst + "\\GameMakerLicense\" /baseproject=\"" +Directory.GetCurrentDirectory()+"\\versions\\"+GMVer+ "\\BaseProject\\BaseProject.yyp\" /m=PS4 /config=\"default\" /tgt=4294967296 /obob=True /obpp=False /obru=True /obes=False /i=3 /j=4 /cvm /mv=1 /iv=0 /rv=0 /bv=0 /sh=False /ps4sdk=\"" + Directory.GetCurrentDirectory() + "\\ps4sdk\" /gn=\"" + titleName.Text + "\" /o=\"" + Dst + "\" \"" + Src + "\"";
}
else
{
args = "/c /zpex /zpuf=\"" + Dst + "\\GameMakerLicense\" /baseproject=\"" + Directory.GetCurrentDirectory() + "\\versions\\" + GMVer + "\\BaseProject\\BaseProject.yyp\" /m=PS4 /config=\"default\" /tgt=4294967296 /obob=True /obpp=False /obru=True /obes=False /i=3 /j=4 /cvm /mv=1 /iv=0 /rv=0 /bv=0 /sh=False /gn=\"" + titleName.Text + "\" /o=\"" + Dst + "\" \"" + Src + "\"";
}
GmacOut.AppendText("-- GMASSETCOMPILER BEGIN --\n");
GmacOut.AppendText("GMAssetCompiler.exe " + args + "\n");
Process gmac = new Process();
if (GMVer == "1.4.9999")
{
gmac.StartInfo.FileName = "GMAssetCompiler.exe";
}
else
{
gmac.StartInfo.FileName = "versions\\" + GMVer + "\\GMAssetCompiler.exe";
gmac.StartInfo.WorkingDirectory = "versions\\" + GMVer;
}
gmac.StartInfo.Arguments = args;
gmac.StartInfo.UseShellExecute = false;
gmac.StartInfo.CreateNoWindow = true;
gmac.StartInfo.RedirectStandardOutput = true;
gmac.StartInfo.RedirectStandardError = true;
gmac.ErrorDataReceived += new DataReceivedEventHandler(gmacWrite);
gmac.OutputDataReceived += new DataReceivedEventHandler(gmacWrite);
GMAC.GetPermissionToExecute();
gmac.Start();
gmac.BeginOutputReadLine();
gmac.BeginErrorReadLine();
while (!gmac.HasExited)
{
Application.DoEvents();
}
if (gmac.ExitCode != 0)
{
MessageBox.Show("GMAssetCompiler.exe Error Code: " + gmac.ExitCode.ToString(), "GMAC Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
Directory.Delete(Dst, true);
return false;
}
gmac.Dispose();
GmacOut.AppendText("-- GMASSETCOMPILER FINISHED! --\n");
if (GMVer.StartsWith("2."))
{
GmacOut.AppendText("Removing license.plist...");
File.Delete(Dst + "\\GameMakerLicense\\license.plist");
Directory.Delete(Dst + "\\GameMakerLicense", true);
GmacOut.AppendText("OK!\n");
}
GmacOut.AppendText("Renaming to game.win...");
foreach (String file in Directory.GetFiles(Dst))
{
if (file.EndsWith(".win"))
{
File.Move(file, Dst + "\\game.win");
}
if (file.EndsWith(".yydebug"))
{
File.Delete(file);
}
}
GmacOut.AppendText("OK!\n");
return true;
}
void gmacWrite(object sender, DataReceivedEventArgs e)
{
Trace.WriteLine(e.Data);
this.BeginInvoke(new MethodInvoker(() =>
{
GmacOut.AppendText(e.Data + "\n");
}));
}
private void AddFile(Gp4Project proj, string targetPath, string origPath)
{
var f = origPath;
var fileEntry = new Gp4File
{
OrigPath = f,
TargetPath = targetPath + Path.GetFileName(origPath)
};
proj.files.Items.Add(fileEntry);
}
private void AddFileTree(Gp4Project proj, Dir parent, string path)
{
var newDir = proj.AddDir(parent, Path.GetFileName(path));
foreach (var d in Directory.EnumerateDirectories(path))
{
AddFileTree(proj, newDir, d);
}
var targetPath = newDir.Path;
foreach (var f in Directory.EnumerateFiles(path))
{
AddFile(proj, targetPath, f);
}
}
private void CreatePKG_Click(object sender, EventArgs e)
{
string GMVer = VersionSelect.SelectedItem.ToString();
if(Path.GetExtension(projectPath.Text).ToLower() == ".yyp" && GMVer.StartsWith("1."))
{
MessageBox.Show("Cannot build GMS2 Project using GMS1.4", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
else if(Path.GetExtension(projectPath.Text).ToLower() == ".gmx" && GMVer.StartsWith("2."))
{
MessageBox.Show("Cannot build GMS1.4 Project using GMS2", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
string tempdir = "";
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "PS4 Packages|*.PKG";
saveFileDialog1.Title = "Save PKG File";
saveFileDialog1.FileName = contentID.Text;
CreatePKG.Enabled = false;
if(GMVer.StartsWith("1."))
HasShaders = File.ReadAllText(projectPath.Text).Contains("</shaders>"); //Too lazy to parse XML properly.
else if(GMVer.StartsWith("2."))
HasShaders = File.ReadAllText(projectPath.Text).Contains("GMShader"); //Too lazy to parse XML properly.
if (HasShaders)
{
if (!Directory.Exists(@"ps4sdk"))
{
DialogResult msgResult = MessageBox.Show("It's been detected that you are using Shaders in your GM Project\nHowever no copy of the PS4 Shader Compiler (orbis-wave-psslc.exe) was found.\nBrowse to orbis-wave-psslc.exe?", "Shader Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);
if (msgResult == DialogResult.Yes)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "orbis-wave-psslc.exe|orbis-wave-psslc.exe";
openFileDialog.Title = "Browse to PS4 Shader Compiler.";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
if (!Directory.Exists(@"ps4sdk"))
{
GmacOut.AppendText("Creating PS4SDK Directory Structure\n");
Directory.CreateDirectory("ps4sdk");
Directory.CreateDirectory("ps4sdk/host_tools");
Directory.CreateDirectory("ps4sdk/host_tools/bin");
}
File.Copy(openFileDialog.FileName, @"ps4sdk/host_tools/bin/orbis-wave-psslc.exe");
}
else
{
CreatePKG.Enabled = true;
return;
}
}
else
{
CreatePKG.Enabled = true;
return;
}
}
}
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
tempdir = Path.GetDirectoryName(saveFileDialog1.FileName) + "\\_temp";
if (Directory.Exists(tempdir))
{
Directory.Delete(tempdir, true);
}
Directory.CreateDirectory(tempdir);
if (GMVer == "1.4.9999")
{
CopyDir(@"Runner", tempdir);
}
else
{
CopyDir("versions\\" + GMVer + "\\Runner", tempdir);
}
Make24Bit(iconPath.Text, tempdir + "\\sce_sys\\icon0.png");
Make24Bit(picPath.Text, tempdir + "\\sce_sys\\pic1.png");
if (!CompileProject(projectPath.Text, tempdir + "\\games"))
{
Directory.Delete(tempdir, true);
CreatePKG.Enabled = true;
return;
}
}
else
{
CreatePKG.Enabled = true;
return;
}
FileStream fd = File.Open(tempdir + "\\sce_sys\\param.sfo", FileMode.OpenOrCreate, FileAccess.ReadWrite);
GmacOut.AppendText("Writing " + titleName.Text + " to TITLE of param.sfo\n");
fd.Seek(0x350, SeekOrigin.Begin);
foreach (Byte by in ASCIIEncoding.ASCII.GetBytes(titleName.Text))
{
fd.WriteByte(by);
}
GmacOut.AppendText("Writing " + titleID.Text + " to TITLE_ID of param.sfo\n");
fd.Seek(0x3D0, SeekOrigin.Begin);
foreach (Byte by in ASCIIEncoding.ASCII.GetBytes(titleID.Text))
{
fd.WriteByte(by);
}
GmacOut.AppendText("Writing " + contentID.Text + " to CONTENT_ID of param.sfo!\n");
fd.Seek(0x284, SeekOrigin.Begin);
foreach (Byte by in ASCIIEncoding.ASCII.GetBytes(contentID.Text))
{
fd.WriteByte(by);
}
fd.Close();
GmacOut.AppendText("Creating GP4 ...");
Gp4Project proj = Gp4Project.Create(VolumeType.pkg_ps4_app);
Dir root = null;
foreach (var file in Directory.GetFileSystemEntries(tempdir))
{
if (File.Exists(file))
{
AddFile(proj, "", file);
}
else if (Directory.Exists(file))
{
AddFileTree(proj, root, file);
}
}
proj.volume.Package.ContentId = contentID.Text;
proj.volume.Package.Passcode = "00000000000000000000000000000000";
GmacOut.AppendText("OK!\n");
if (File.Exists(saveFileDialog1.FileName))
{
File.Delete(saveFileDialog1.FileName);
}
GmacOut.AppendText("Building PKG ...");
Thread thr = new Thread(() =>
{
PkgBuilder pkg = new PkgBuilder(PkgProperties.FromGp4(proj, ""));
pkg.Write(saveFileDialog1.FileName);
});
thr.Start();
while (thr.IsAlive)
{
Application.DoEvents();
}
GmacOut.AppendText("OK!\n");
GmacOut.AppendText("Deleting " + tempdir + " ...");
Directory.Delete(tempdir, true);
GmacOut.AppendText("OK!\n");
GmacOut.AppendText("Done!\n");
CreatePKG.Enabled = true;
MessageBox.Show("PKG Created!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
public void ReloadVersions()
{
VersionSelect.Items.Clear();
VersionSelect.Items.Add("1.4.9999");
try
{
foreach (String version in Directory.GetDirectories(@"versions"))
{
VersionSelect.Items.Add(Path.GetFileName(version));
}
}
catch (Exception) { };
VersionSelect.Items.Add("Manager");
VersionSelect.SelectedIndex = 0;
}
private void VersionSelect_SelectedIndexChanged(object sender, EventArgs e)
{
//1.4.9999 comes built in
if(VersionSelect.Text.StartsWith("1."))
{
GameSettings.Enabled = true;
}
else
{
GlobalGameSettings.Enabled = false;
}
if (VersionSelect.SelectedItem.ToString() == "Manager")
{
VersionSelect.SelectedIndex -= 1;
this.Enabled = false;
VersionManager VM = new VersionManager();
VM.Show();
VM.FormClosing += VM_FormClosing;
}
}
private void VM_FormClosing(object sender, FormClosingEventArgs e)
{
this.Enabled = true;
ReloadVersions();
this.Focus();
}
}
}