GayMaker/GayMaker/GayMaker.cs

1065 lines
41 KiB
C#

//IDC that my code is shit:
#pragma warning disable IDE1006
#pragma warning disable IDE0017
using GayMaker.Properties;
using System;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.IO.Compression;
using System.Net;
using System.Net.Cache;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Xml;
namespace GayMaker
{
public partial class GayMaker : Form
{
public String CurrentVersion = "1.7.7";
private string stderr = "";
private bool HasShaders = false;
private bool isLoading = false;
public string ReadSetting(string Setting)
{
string Value = "";
try
{
Microsoft.Win32.RegistryKey key;
key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"Software\GayMaker");
Value = key.GetValue(Setting).ToString();
key.Close();
}
catch (Exception) { return "invalid"; }
return Value;
}
private void EE1_Click(object sender, EventArgs e)
{
MessageBox.Show("Created in 26/01/2019 by SilicaAndPina\nI like to see cute girls die!\n\nCongratulations! you found the easter egg in my software\nI wonder how long before it gets found?\nTweet #GAYMAKER for bragging rights!","Cute Girls Dying");
Process.Start("https://www.youtube.com/watch?v=dQw4w9WgXcQ");
}
public bool CheckSetting(string Setting)
{
try
{
Microsoft.Win32.RegistryKey key;
key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"Software\GayMaker");
if (!ReadBoolean(key.GetValue(Setting).ToString()))
{
key.Close();
return true;
}
else
{
key.Close();
return false;
}
}
catch (Exception)
{
return false;
}
}
public GayMaker()
{
//Bypass Windows DPI Scaling (See issue #8 to see why its important)
Font = new Font(Font.Name, 8.25f * 96f / CreateGraphics().DpiX, Font.Style, Font.Unit, Font.GdiCharSet, Font.GdiVerticalFont);
InitializeComponent();
GlobalGameSettings.Enabled = false;
}
public void reloadVersions()
{
GMVersion.Items.Clear();
GMVersion.Items.Add("1.4.9999");
try
{
foreach (String version in Directory.GetDirectories(@"versions"))
{
GMVersion.Items.Add(Path.GetFileName(version));
}
}
catch (Exception) { };
GMVersion.Items.Add("Manager");
GMVersion.SelectedIndex = 0;
}
public bool ReadBoolean(string Bool)
{
if(Bool == "True")
{
return true;
}
else
{
return false;
}
}
public void ReloadIcons()
{
GateBG.BackgroundImage.Dispose();
LABackground.BackgroundImage.Dispose();
IconBG.BackgroundImage.Dispose();
Running.BackgroundImage.Dispose();
Image LABG = new Bitmap(BgPath.Text);
LABackground.BackgroundImage = LABG;
Image GBG = new Bitmap(GatePath.Text);
GateBG.BackgroundImage = GBG;
Image IBG = new Bitmap(IconPath.Text);
IconBG.BackgroundImage = IBG;
Image PBG = new Bitmap(PicPath.Text);
Running.BackgroundImage = PBG;
}
public String GetProjectPath() //For GlobalGameSettings
{
return ProjectPath.Text;
}
private void CheckForUpdates()
{
if(CheckSetting("CheckForUpdates"))
{
return;
}
WebClient wc = new WebClient();
wc.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
String UpdateString = wc.DownloadString("https://raw.githubusercontent.com/KuromeSan/GayMaker/master/latest.md");
String[] Data = UpdateString.Split('~');
if (Data[0] != CurrentVersion)
{
DialogResult yesOrNo = MessageBox.Show("An update to GayMaker 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)
{
Update updateForm = new Update();
this.Hide();
updateForm.ShowDialog();
this.Close();
this.Dispose();
}
}
}
private void CopyDir(string source, string target)
{
GmacOut.AppendText("Copying Directory: \"" + source + "\" -> \"" + target + "\"\r\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 + "\" -> \""+targetPath+"\"\r\n");
File.Copy(sysEntry, targetPath, true);
}
}
}
private void Make8Bit(string Src, string Dst)
{
GmacOut.AppendText("Making " + Src + " 8 bit color depth!");
Bitmap orig = new Bitmap(Src);
if ((orig.PixelFormat != PixelFormat.Format8bppIndexed) || (!CheckSetting("IndexedColor")))
{
Bitmap clone = orig.Clone(new Rectangle(0, 0, orig.Width, orig.Height), PixelFormat.Format8bppIndexed);
clone.Save(@Dst);
clone.Dispose();
GmacOut.AppendText(" Done!\r\n");
}
else
{
GmacOut.AppendText(" No need!\r\n");
File.Copy(Src, Dst);
}
orig.Dispose();
}
private bool CompileProject(string Src, string Dst, bool YYC=false)
{
string GMVer = GMVersion.SelectedItem.ToString();
XmlDocument DefaultConfig = new XmlDocument();
DefaultConfig.Load(Path.GetDirectoryName(ProjectPath.Text) + "\\Configs\\Default.config.gmx");
XmlNode TP = DefaultConfig.GetElementsByTagName("option_psvita_texture_page")[0]; // Issue #5 Fixed!
XmlNode SH = DefaultConfig.GetElementsByTagName("option_shortcircuit")[0];
String versionBit = GMVer.Split('.')[2];
string args;
if(HasShaders && !YYC)
{
args = "/c /m=psvita /config=\"Default\" /tgt=2147483648 /obob=True /obpp=False /obru=True /obes=False /i=3 /cvm /tp="+TP.InnerText+" /mv=1 /iv=0 /rv=0 /bv="+ versionBit +" /sh=" + SH.InnerText +" /psvitasdk=\""+Directory.GetCurrentDirectory()+"\\psvitasdk\" /gn=\"" + AppName.Text + "\" /o=\"" + Dst + "\" \"" + Src + "\"";
}
else
{
args = "/c /m=psvita /config=\"Default\" /tgt=2147483648 /obob=True /obpp=False /obru=True /obes=False /i=3 /cvm /tp="+TP.InnerText+ " /mv=1 /iv=0 /rv=0 /bv=" + versionBit +" /sh=" + SH.InnerText +" / gn=\"" + AppName.Text + "\" /o=\"" + Dst + "\" \"" + Src + "\"";
}
if(YYC)
{
string YYCDIR = "";
if(GMVer == "1.4.9999")
{
YYCDIR = Directory.GetCurrentDirectory() + "\\YYC";
}
else
{
YYCDIR = Directory.GetCurrentDirectory() + "\\versions\\" + GMVer + "\\YYC";
}
if(!Directory.Exists(YYCDIR))
{
MessageBox.Show("YYC Files NOT downloaded for Version " + GMVer + " Please re-download it in Version Manager.");
this.Enabled = false;
versionManager VM = new versionManager();
VM.ShowDialog();
return false;
}
args = "/c /m=llvm-psvita /llvmSource=\"" + YYCDIR + "\" /config=\"Default\" /tgt=2147483648 /obob=True /obpp=False /obru=True /obes=False /i=3 /j=4 /tp=" + TP.InnerText + " /psvitasdk=\"" + ReadSetting("SDKPath") + "\" /mv=1 /iv=0 /rv=0 /bv=" + versionBit + " /gn=\"" + AppName.Text + "\" /cd=\"" + Path.GetDirectoryName(Dst) + "/YYCCache\" /o=\"" + Dst + "\" \"" + Src + "\" ";
}
GmacOut.AppendText("-- GMASSETCOMPILER BEGIN --\r\n");
GmacOut.AppendText("GMAssetCompiler.exe "+args+"\r\n");
Process gmac = new Process();
if (GMVer == "1.4.9999")
{
gmac.StartInfo.FileName = AppDomain.CurrentDomain.BaseDirectory + "GMAssetCompiler.exe";
gmac.StartInfo.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory;
}
else
{
gmac.StartInfo.FileName = AppDomain.CurrentDomain.BaseDirectory +"versions\\" + GMVer + "\\GMAssetCompiler.exe";
gmac.StartInfo.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory + "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(gmacError);
gmac.OutputDataReceived += new DataReceivedEventHandler(gmacWrite);
GMAC.GetPermissionToExecute(); //Resolve issue #7
gmac.Start();
gmac.BeginOutputReadLine();
gmac.BeginErrorReadLine();
while(!gmac.HasExited)
{
Application.DoEvents();
}
if (gmac.ExitCode != 0)
{
MessageBox.Show("GMAssetCompiler.exe Returned Error Code: " + gmac.ExitCode.ToString()+"\n\n"+stderr,"GMAC Error",MessageBoxButtons.OK, MessageBoxIcon.Error);
stderr = "";
Directory.Delete(Dst, true);
return false;
}
gmac.Dispose();
GmacOut.AppendText("-- GMASSETCOMPILER FINISHED! --\r\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!\r\n");
return true;
}
void gmacWrite(object sender, DataReceivedEventArgs e)
{
this.BeginInvoke(new MethodInvoker(() =>
{
if(e.Data != null)
if (e.Data.ToString().ToLower().Contains("error"))
stderr += e.Data + "\r\n";
GmacOut.AppendText(e.Data+"\r\n");
}));
}
void gmacError(object sender, DataReceivedEventArgs e)
{
this.BeginInvoke(new MethodInvoker(() =>
{
stderr += e.Data + "\r\n";
GmacOut.AppendText(e.Data + "\r\n");
}));
}
private void AppName_TextChanged(object sender, EventArgs e)
{
if(AppName.TextLength == 0)
{
CreateVPK.Enabled = false;
}
else
{
CreateVPK.Enabled = true;
}
ShortNamePreview.Text = AppName.Text;
selectedHome.Checked = true;
}
private void selectedHome_CheckedChanged(object sender, EventArgs e)
{
HomePage.Visible = true;
LiveArea.Visible = false;
Running.Visible = false;
}
private void selectedLive_CheckedChanged(object sender, EventArgs e)
{
HomePage.Visible = false;
LiveArea.Visible = true;
Running.Visible = false;
}
private void SelectedRun_CheckedChanged(object sender, EventArgs e)
{
HomePage.Visible = false;
LiveArea.Visible = false;
Running.Visible = true;
}
private void GdbCategory_CheckedChanged(object sender, EventArgs e)
{
HomePage.Visible = false;
LiveArea.Visible = true;
Running.Visible = false;
selectedLive.Checked = true;
if (GdbCategory.Checked)
{
SFZ.Hide();
}
else
{
SFZ.Show();
}
}
private void LeftGate_CheckedChanged(object sender, EventArgs e)
{
HomePage.Visible = false;
LiveArea.Visible = true;
Running.Visible = false;
selectedLive.Checked = true;
if(LeftGate.Checked)
{
GateBG.Location = new Point(574,194);
}
else
{
GateBG.Location = new Point(333, 194);
}
}
private void GayMaker_Load(object sender, EventArgs e)
{
isLoading = true;
Environment.SetEnvironmentVariable("SCE_PSP2_SDK_DIR",ReadSetting("SdkPath"));
Location = new Point((Screen.PrimaryScreen.WorkingArea.Width - this.Width) / 2, (Screen.PrimaryScreen.WorkingArea.Height - this.Height) / 2); //Center Screen
SFZ.Parent = LABackground;
SFZ.Location = new Point(267, 0);
String EXEPath = Assembly.GetExecutingAssembly().Location;
GMVersion.SelectedIndex = 0;
DownloadMoreRAM.SelectedIndex = 0;
if (File.Exists(Path.ChangeExtension(EXEPath, "old")))
{
File.Delete(Path.ChangeExtension(EXEPath, ".old"));
}
this.Text += CurrentVersion;
try
{
CheckForUpdates();
}
catch(Exception){ };
reloadVersions();
try //Lazily fix issue #4
{
if (CheckSetting("SaveLast"))
{
throw new Exception("SaveLastDisabled");
}
Microsoft.Win32.RegistryKey key;
key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"Software\GayMaker");
ProjectPath.Text = key.GetValue("project").ToString();
IconPath.Text = key.GetValue("icon0").ToString();
BgPath.Text = key.GetValue("bg0").ToString();
GatePath.Text = key.GetValue("gate0").ToString();
PicPath.Text = key.GetValue("pic0").ToString();
AppName.Text = key.GetValue("title").ToString();
TitleIdBox.Text = key.GetValue("titleid").ToString();
GdbCategory.Checked = ReadBoolean(key.GetValue("gdb").ToString());
LeftGate.Checked = ReadBoolean(key.GetValue("leftgate").ToString());
YYCEnabled.Checked = ReadBoolean(key.GetValue("useYYC").ToString());
GMVersion.SelectedIndex = int.Parse(key.GetValue("lastVersion").ToString());
DownloadMoreRAM.SelectedIndex = int.Parse(key.GetValue("downloadMoreRAM").ToString());
selectedHome.Checked = true;
HomePage.Visible = true;
LiveArea.Visible = false;
Running.Visible = false;
key.Close();
}
catch (Exception){ };
if(!File.Exists(ProjectPath.Text))
{
ProjectPath.Text = "(none)";
}
else
{
GlobalGameSettings.Enabled = true; // Fix issue #4
if (TitleIdBox.TextLength != TitleIdBox.MaxLength)
{
CreateVPK.Enabled = false;
}
else
{
CreateVPK.Enabled = true;
}
}
if (!File.Exists(BgPath.Text))
{
BgPath.Text = "img\\bg0.png";
}
if (!File.Exists(GatePath.Text))
{
GatePath.Text = "img\\startup.png";
}
if (!File.Exists(IconPath.Text))
{
IconPath.Text = "img\\icon0.png";
}
if (!File.Exists(PicPath.Text))
{
PicPath.Text = "img\\pic0.png";
}
if (!File.Exists(ProjectPath.Text))
{
ProjectPath.Text = "(none)";
}
ReloadIcons();
isLoading = false;
}
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 == 128 && img.Width == 128)
{
IconBG.BackgroundImage.Dispose();
IconBG.BackgroundImage = img;
selectedHome.Checked = true;
IconPath.Text = openFileDialog1.FileName;
}
else
{
img.Dispose(); //fix issue #2
MessageBox.Show("Image is not 128x128!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void BrowsePath_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 == 500 && img.Width == 840)
{
LABackground.BackgroundImage.Dispose();
LABackground.BackgroundImage = img;
selectedLive.Checked = true;
BgPath.Text = openFileDialog1.FileName;
}
else
{
img.Dispose(); //fix issue #2
MessageBox.Show("Image is not 840x500!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void BrowseGate_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 == 158 && img.Width == 280)
{
GateBG.BackgroundImage.Dispose();
GateBG.BackgroundImage = img;
selectedLive.Checked = true;
GatePath.Text = openFileDialog1.FileName;
}
else
{
img.Dispose(); //fix issue #2
MessageBox.Show("Image is not 280x158!", "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 == 544 && img.Width == 960)
{
Running.BackgroundImage.Dispose();
Running.BackgroundImage = img;
SelectedRun.Checked = true;
PicPath.Text = openFileDialog1.FileName;
}
else
{
img.Dispose(); //fix issue #2
MessageBox.Show("Image is not 960x544 !", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void TitleIdBox_TextChanged(object sender, EventArgs e)
{
int i = TitleIdBox.SelectionStart;
TitleIdBox.Text = TitleIdBox.Text.ToUpper();
Regex rgx = new Regex("[^A-Z0-9]");
TitleIdBox.Text = rgx.Replace(TitleIdBox.Text, "");
TitleIdBox.SelectionStart = i;
if(TitleIdBox.TextLength != TitleIdBox.MaxLength)
{
CreateVPK.Enabled = false;
}
else
{
CreateVPK.Enabled = true;
}
}
private void BrowseProject_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "GameMaker Project Files|*.project.gmx";
openFileDialog1.Title = "Select a GMX File";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
BgPath.Text = "img\\bg0.png";
GatePath.Text = "img\\startup.png";
IconPath.Text = "img\\icon0.png";
PicPath.Text = "img\\pic0.png";
TitleIdBox.Text = "GMSV00001";
AppName.Text = "GM:S";
DownloadMoreRAM.SelectedIndex = 0;
GMVersion.SelectedIndex = 0;
ReloadIcons();
LeftGate.Checked = false;
GdbCategory.Checked = false;
ProjectPath.Text = openFileDialog1.FileName;
CreateVPK.Enabled = true;
GlobalGameSettings.Enabled = true;
}
}
private void CreateVPK_Click(object sender, EventArgs e)
{
string tempdir = "";
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "Vita Packages|*.VPK";
saveFileDialog1.Title = "Save VPK File";
if (YYCEnabled.Checked)
{
string SDKPath = ReadSetting("SDKPath");
string VCVars = ReadSetting("VCVarsPath");
if(SDKPath == "invalid")
{
MessageBox.Show("SDK Not Defined!", "SDK Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
Prefs_Click(null, null);
return;
}
if (VCVars == "invalid")
{
MessageBox.Show("vcvars32.bat Not Defined!", "VCVars Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
Prefs_Click(null, null);
return;
}
if (!Directory.Exists(SDKPath))
{
MessageBox.Show("SDK Directory: " + SDKPath + " Doesnt exist!", "SDK Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
Prefs_Click(null, null);
return;
}
if (!File.Exists(VCVars))
{
MessageBox.Show("Directory: " + VCVars + " Doesnt exist!", "VCVars Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
Prefs_Click(null, null);
return;
}
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
string GMVer = GMVersion.SelectedItem.ToString();
tempdir = Path.GetDirectoryName(saveFileDialog1.FileName) + "\\_temp";
if (Directory.Exists(tempdir))
{
GmacOut.AppendText("Deleting _temp\r\n");
Directory.Delete(tempdir, true);
}
Directory.CreateDirectory(tempdir);
if (GMVer == "1.4.9999")
{
CopyDir(@"Runner", tempdir);
}
else
{
CopyDir("versions\\" + GMVer + "\\Runner", tempdir);
}
Make8Bit(IconPath.Text, tempdir + "\\sce_sys\\icon0.png");
Make8Bit(PicPath.Text, tempdir + "\\sce_sys\\pic0.png");
Make8Bit(BgPath.Text, tempdir + "\\sce_sys\\livearea\\contents\\bg0.png");
Make8Bit(GatePath.Text, tempdir + "\\sce_sys\\livearea\\contents\\startup.png");
if (!CompileProject(ProjectPath.Text, tempdir + "\\games", true))
{
Directory.Delete(tempdir, true);
CreateVPK.Enabled = true;
return;
}
Regex rgx = new Regex("[^a-zA-Z0-9-]");
string AppNameSln = rgx.Replace(AppName.Text, "_");
string ProjectName = Path.GetFileNameWithoutExtension(Path.GetFileNameWithoutExtension(ProjectPath.Text));
string args = "/c \"\"" + ReadSetting("VCVarsPath") + "\" && " + Path.GetPathRoot(tempdir).Replace("\\", "") + " && cd \"" + tempdir + "\\YYCCache\\" + ProjectName + "\\Default\\Scripts\\PSVitaSolution\" && msbuild /m:%NUMBER_OF_PROCESSORS% \"" + AppNameSln + ".sln\" /p:Configuration=Release /t:build /verbosity:minimal\"";
GmacOut.AppendText("cmd.exe " + args);
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.Arguments = args;
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.RedirectStandardError = true;
cmd.ErrorDataReceived += new DataReceivedEventHandler(gmacError);
cmd.OutputDataReceived += new DataReceivedEventHandler(gmacWrite);
cmd.Start();
cmd.BeginOutputReadLine();
cmd.BeginErrorReadLine();
while (!cmd.HasExited)
{
Application.DoEvents();
}
if (cmd.ExitCode != 0)
{
try
{
cmd.CancelErrorRead();
cmd.CancelOutputRead();
}
catch (Exception) { };
MessageBox.Show("Compilation Error: "+cmd.ExitCode+"\n\n"+stderr, "Compile Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
stderr = "";
Directory.Delete(tempdir, true);
CreateVPK.Enabled = true;
return;
}
cmd.Dispose();
GmacOut.AppendText("Locating SELF\r\n");
foreach(string fn in Directory.GetFiles(tempdir + "\\YYCCache\\" + ProjectName + "\\Default\\Scripts\\PSVitaSolution\\PSVita_Release"))
{
if (Path.GetExtension(fn) == ".self")
{
GmacOut.AppendText("Moving " + fn + " to " + tempdir + "\\eboot.bin\r\n");
File.Delete(tempdir + "\\eboot.bin");
File.Move(fn, tempdir + "\\eboot.bin");
break;
}
}
Directory.Delete(tempdir + "\\YYCCache", true);
}
else
{
CreateVPK.Enabled = true;
return;
}
}
else
{
CreateVPK.Enabled = false;
HasShaders = File.ReadAllText(ProjectPath.Text).Contains("</shaders>"); //Too lazy to parse XML properly.
if (HasShaders)
{
if (!Directory.Exists(@"psvitasdk"))
{
DialogResult msgResult = MessageBox.Show("It's been detected that you are using Shaders in your GM Project\nHowever no copy of the Vita Shader Compiler (psp2cgc.exe) was found.\nBrowse to psp2cgc.exe?", "Shader Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);
if (msgResult == DialogResult.Yes)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "psp2cgc.exe|psp2cgc.exe";
openFileDialog.Title = "Browse to Vita Shader Compiler.";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
if (!Directory.Exists(@"psvitasdk"))
{
GmacOut.AppendText("Creating PSP2SDK Directory Structure\r\n");
Directory.CreateDirectory("psvitasdk");
Directory.CreateDirectory("psvitasdk/host_tools");
Directory.CreateDirectory("psvitasdk/host_tools/bin");
}
File.Copy(openFileDialog.FileName, @"psvitasdk/host_tools/bin/psp2cgc.exe");
}
else
{
CreateVPK.Enabled = true;
return;
}
}
else
{
CreateVPK.Enabled = true;
return;
}
}
}
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
string GMVer = GMVersion.SelectedItem.ToString();
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);
}
Make8Bit(IconPath.Text, tempdir + "\\sce_sys\\icon0.png");
Make8Bit(PicPath.Text, tempdir + "\\sce_sys\\pic0.png");
Make8Bit(BgPath.Text, tempdir + "\\sce_sys\\livearea\\contents\\bg0.png");
Make8Bit(GatePath.Text, tempdir + "\\sce_sys\\livearea\\contents\\startup.png");
if(!CompileProject(ProjectPath.Text, tempdir + "\\games"))
{
Directory.Delete(tempdir, true);
CreateVPK.Enabled = true;
return;
}
}
else
{
CreateVPK.Enabled = true;
return;
}
}
FileStream fd = File.Open(tempdir + "\\sce_sys\\param.sfo", FileMode.OpenOrCreate, FileAccess.ReadWrite);
GmacOut.AppendText("Writing " + AppName.Text + " to TITLE of param.sfo\r\n");
fd.Seek(0x2C8, SeekOrigin.Begin);
foreach (Byte by in ASCIIEncoding.ASCII.GetBytes(AppName.Text))
{
fd.WriteByte(by);
}
fd.Seek(0x2FC, SeekOrigin.Begin);
foreach (Byte by in ASCIIEncoding.ASCII.GetBytes(AppName.Text))
{
fd.WriteByte(by);
}
if (GdbCategory.Checked)
{
GmacOut.AppendText("Writing gdb to CATEGORY of param.sfo\n");
fd.Seek(0x266, SeekOrigin.Begin);
fd.WriteByte(0x62); //ASCII 'b'
}
GmacOut.AppendText("Writing " + TitleIdBox.Text + " to TITLE_ID of param.sfo\r\n");
fd.Seek(0x37C, SeekOrigin.Begin);
foreach (Byte by in ASCIIEncoding.ASCII.GetBytes(TitleIdBox.Text))
{
fd.WriteByte(by);
}
GmacOut.AppendText("Writing " + (DownloadMoreRAM.SelectedIndex * 4).ToString() + " to ATTRIBUTE2 of param.sfo!\n");
fd.Seek(0x23C, SeekOrigin.Begin);
fd.WriteByte(Convert.ToByte(DownloadMoreRAM.SelectedIndex * 4));
fd.Close();
if (LeftGate.Checked)
{
GmacOut.AppendText("Writing #LeftGate template.xml\r\n");
File.WriteAllText(tempdir + "\\sce_sys\\livearea\\contents\\template.xml", Properties.Resources.gdbTemplate);
}
GmacOut.AppendText("Creating VPK ...");
if (File.Exists(saveFileDialog1.FileName)) //Fix Issue #1
{
File.Delete(saveFileDialog1.FileName);
}
ZipFile.CreateFromDirectory(tempdir, saveFileDialog1.FileName);
GmacOut.AppendText("OK\r\n");
GmacOut.AppendText("Deleting " + tempdir + " ...");
Directory.Delete(tempdir, true);
GmacOut.AppendText("OK!\r\n");
GmacOut.AppendText("Done!\r\n");
CreateVPK.Enabled = true;
MessageBox.Show("VPK Created!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void GlobalGameSettings_Enter(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_Leave(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)
{
GlobalGameSettings GlobalGames = new GlobalGameSettings();
GlobalGames.ShowDialog();
}
private void Logo_DoubleClick(object sender, EventArgs e)
{
try
{
string appdata = Environment.GetEnvironmentVariable("appdata");
if (!File.ReadAllText(appdata + "\\GameMaker-Studio\\fnames").Contains("// PlayStation Vita specific"))
{
DialogResult MSG = MessageBox.Show("Do you want to install PSVita Specific functions into\nGameMaker:Studio?", "Install vita functions?", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);
if (MSG == DialogResult.Yes)
{
GmacOut.AppendText("Adding vita functions to (global) fnames file...\r\n");
File.AppendAllText(appdata + "\\GameMaker-Studio\\fnames", Resources.fnames);
MessageBox.Show("PSVita Specific functions have been added to:\n%appdata%\\GameMaker-Studio\\fnames", "Installed", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
{
MessageBox.Show("PSVita Specific functions allready installed!", "Installed Allready", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
finally{}
}
private void GayMaker_FormClosing(object sender, FormClosingEventArgs e)
{
if(CheckSetting("SaveLast"))
{
return;
}
try
{
Microsoft.Win32.RegistryKey key;
key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"Software\GayMaker");
key.SetValue("project", ProjectPath.Text);
key.SetValue("icon0", IconPath.Text);
key.SetValue("bg0", BgPath.Text);
key.SetValue("gate0", GatePath.Text);
key.SetValue("pic0", PicPath.Text);
key.SetValue("title", AppName.Text);
key.SetValue("titleid", TitleIdBox.Text);
key.SetValue("gdb", GdbCategory.Checked);
key.SetValue("leftgate", LeftGate.Checked);
key.SetValue("useYYC", YYCEnabled.Checked);
key.SetValue("lastVersion", GMVersion.SelectedIndex);
key.SetValue("downloadMoreRAM", DownloadMoreRAM.SelectedIndex);
key.Close();
}
catch(Exception)
{
MessageBox.Show("Failed to save settings to registry.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void GMVersion_SelectedIndexChanged(object sender, EventArgs e)
{
//1.4.9999 comes built in
if (GMVersion.SelectedItem.ToString() == "Manager")
{
GMVersion.SelectedIndex -= 1;
this.Enabled = false;
versionManager VM = new versionManager();
VM.ShowDialog();
}
}
private void IconBG_Click(object sender, EventArgs e)
{
selectedLive.Checked = true;
}
private void GateBG_Click(object sender, EventArgs e)
{
SelectedRun.Checked = true;
}
private void Prefs_Click(object sender, EventArgs e)
{
Preferences PrefsForm = new Preferences();
PrefsForm.ShowDialog();
}
private void Prefs_MouseEnter(object sender, EventArgs e)
{
Prefs.ForeColor = Color.Blue;
Prefs.Font = new Font(label1.Font.Name, label1.Font.SizeInPoints, FontStyle.Underline);
this.Cursor = Cursors.Hand;
}
private void Prefs_MouseLeave(object sender, EventArgs e)
{
Prefs.ForeColor = Color.Black;
Prefs.Font = new Font(label1.Font.Name, label1.Font.SizeInPoints, FontStyle.Regular);
this.Cursor = Cursors.Arrow;
}
private void YYCEnabled_CheckedChanged(object sender, EventArgs e)
{
if (YYCEnabled.Checked && !isLoading)
{
DialogResult dr = MessageBox.Show("YYC requires you to have:\n- Visual Studio 2015\n- SCE SDK (Version 03.550-3.570)\n- Visual Studio Intergrations for VS2015\n- Razor for VS2015\n(Dont ask me for links)\n\nAllready installed in your PC\nAnd ENSURE GayMaker is pointing to them in the Preferences Page\nEnable YYC?", "YYC Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk);
if (dr == DialogResult.Yes)
{
YYCEnabled.Checked = true;
}
else
{
YYCEnabled.Checked = false;
}
}
}
}
}