2020-01-13 15:31:44 +00:00
//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
{
2021-12-14 00:50:58 +00:00
public String CurrentVersion = "1.7.7" ;
2020-01-13 15:31:44 +00:00
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 )
{
2020-03-15 10:13:03 +00:00
GmacOut . AppendText ( "Copying Directory: \"" + source + "\" -> \"" + target + "\"\r\n" ) ;
2020-01-13 15:31:44 +00:00
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
{
2020-03-15 10:13:03 +00:00
GmacOut . AppendText ( "Copying \"" + fileName + "\" -> \"" + targetPath + "\"\r\n" ) ;
2020-01-13 15:31:44 +00:00
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 ( ) ;
2020-03-15 10:13:03 +00:00
GmacOut . AppendText ( " Done!\r\n" ) ;
2020-01-13 15:31:44 +00:00
}
else
{
2020-03-15 10:13:03 +00:00
GmacOut . AppendText ( " No need!\r\n" ) ;
2020-01-13 15:31:44 +00:00
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 )
{
2021-12-14 00:40:21 +00:00
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 + "\"" ;
2020-01-13 15:31:44 +00:00
}
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 + "\" " ;
}
2020-03-15 10:13:03 +00:00
GmacOut . AppendText ( "-- GMASSETCOMPILER BEGIN --\r\n" ) ;
GmacOut . AppendText ( "GMAssetCompiler.exe " + args + "\r\n" ) ;
2020-01-13 15:31:44 +00:00
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 ( ) ;
2020-03-15 10:13:03 +00:00
GmacOut . AppendText ( "-- GMASSETCOMPILER FINISHED! --\r\n" ) ;
2020-01-13 15:31:44 +00:00
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 ) ;
}
}
2020-03-15 10:13:03 +00:00
GmacOut . AppendText ( "OK!\r\n" ) ;
2020-01-13 15:31:44 +00:00
return true ;
}
void gmacWrite ( object sender , DataReceivedEventArgs e )
{
this . BeginInvoke ( new MethodInvoker ( ( ) = >
{
if ( e . Data ! = null )
if ( e . Data . ToString ( ) . ToLower ( ) . Contains ( "error" ) )
2020-03-15 10:13:03 +00:00
stderr + = e . Data + "\r\n" ;
GmacOut . AppendText ( e . Data + "\r\n" ) ;
2020-01-13 15:31:44 +00:00
} ) ) ;
}
void gmacError ( object sender , DataReceivedEventArgs e )
{
this . BeginInvoke ( new MethodInvoker ( ( ) = >
{
2020-03-15 10:13:03 +00:00
stderr + = e . Data + "\r\n" ;
GmacOut . AppendText ( e . Data + "\r\n" ) ;
2020-01-13 15:31:44 +00:00
} ) ) ;
}
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 ;
2020-03-15 10:13:03 +00:00
2020-01-13 15:31:44 +00:00
TitleIdBox . Text = TitleIdBox . Text . ToUpper ( ) ;
2020-03-15 10:13:03 +00:00
Regex rgx = new Regex ( "[^A-Z0-9]" ) ;
TitleIdBox . Text = rgx . Replace ( TitleIdBox . Text , "" ) ;
2020-01-13 15:31:44 +00:00
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 ) )
{
2020-03-15 10:13:03 +00:00
GmacOut . AppendText ( "Deleting _temp\r\n" ) ;
2020-01-13 15:31:44 +00:00
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 ( ) ;
2020-03-15 10:13:03 +00:00
GmacOut . AppendText ( "Locating SELF\r\n" ) ;
2020-01-13 15:31:44 +00:00
foreach ( string fn in Directory . GetFiles ( tempdir + "\\YYCCache\\" + ProjectName + "\\Default\\Scripts\\PSVitaSolution\\PSVita_Release" ) )
{
if ( Path . GetExtension ( fn ) = = ".self" )
{
2020-03-15 10:13:03 +00:00
GmacOut . AppendText ( "Moving " + fn + " to " + tempdir + "\\eboot.bin\r\n" ) ;
2020-01-13 15:31:44 +00:00
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" ) )
{
2020-03-15 10:13:03 +00:00
GmacOut . AppendText ( "Creating PSP2SDK Directory Structure\r\n" ) ;
2020-01-13 15:31:44 +00:00
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 ) ;
2020-03-15 10:13:03 +00:00
GmacOut . AppendText ( "Writing " + AppName . Text + " to TITLE of param.sfo\r\n" ) ;
2020-01-13 15:31:44 +00:00
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'
}
2020-03-15 10:13:03 +00:00
GmacOut . AppendText ( "Writing " + TitleIdBox . Text + " to TITLE_ID of param.sfo\r\n" ) ;
2020-01-13 15:31:44 +00:00
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 )
{
2020-03-15 10:13:03 +00:00
GmacOut . AppendText ( "Writing #LeftGate template.xml\r\n" ) ;
2020-01-13 15:31:44 +00:00
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 ) ;
2020-03-15 10:13:03 +00:00
GmacOut . AppendText ( "OK\r\n" ) ;
2020-01-13 15:31:44 +00:00
GmacOut . AppendText ( "Deleting " + tempdir + " ..." ) ;
Directory . Delete ( tempdir , true ) ;
2020-03-15 10:13:03 +00:00
GmacOut . AppendText ( "OK!\r\n" ) ;
2020-01-13 15:31:44 +00:00
2020-03-15 10:13:03 +00:00
GmacOut . AppendText ( "Done!\r\n" ) ;
2020-01-13 15:31:44 +00:00
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 )
{
2020-03-15 10:13:03 +00:00
GmacOut . AppendText ( "Adding vita functions to (global) fnames file...\r\n" ) ;
2020-01-13 15:31:44 +00:00
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 ;
}
}
}
}
}