This repository has been archived on 2024-04-07. You can view files and clone it, but cannot push or open issues or pull requests.
chovy-gm/ChovyUI.cs

352 lines
13 KiB
C#

using GMAssetCompiler;
using System;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace ChovyUI
{
public partial class ChovyUI : Form
{
bool wasClicked = false;
public ChovyUI()
{
InitializeComponent();
IconPath.Text = Path.Combine(Application.StartupPath, "IMG", "ICON0.PNG");
PicPath.Text = Path.Combine(Application.StartupPath, "IMG", "PIC0.PNG");
try
{
Microsoft.Win32.RegistryKey key;
key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"Software\CHOVYProject\Chovy-GM");
TitleId.Text = key.GetValue("TITLEID", TitleId.Text).ToString();
Title.Text = key.GetValue("TITLE", Title.Text).ToString();
GMPath.Text = key.GetValue("GMEXE", GMPath.Text).ToString();
IconPath.Text = key.GetValue("ICONPATH", IconPath.Text).ToString();
PicPath.Text = key.GetValue("PICPATH", PicPath.Text).ToString();
LBumper.Text = key.GetValue("SCE_CTRL_L", LBumper.Text.ToUpper()).ToString();
RBumper.Text = key.GetValue("SCE_CTRL_R", RBumper.Text.ToUpper()).ToString();
LeftDPAD.Text = key.GetValue("SCE_CTRL_LEFT", LeftDPAD.Text.ToUpper()).ToString();
RightDPAD.Text = key.GetValue("SCE_CTRL_RIGHT", RightDPAD.Text.ToUpper()).ToString();
UpDPAD.Text = key.GetValue("SCE_CTRL_UP", UpDPAD.Text.ToUpper()).ToString();
DownDPAD.Text = key.GetValue("SCE_CTRL_DOWN", DownDPAD.Text.ToUpper()).ToString();
CircleButton.Text = key.GetValue("SCE_CTRL_CIRCLE", CircleButton.Text.ToUpper()).ToString();
CrossButton.Text = key.GetValue("SCE_CTRL_CROSS", CrossButton.Text.ToUpper()).ToString();
SquareButton.Text = key.GetValue("SCE_CTRL_SQUARE", SquareButton.Text.ToUpper()).ToString();
TriangleButton.Text = key.GetValue("SCE_CTRL_TRIANGLE", TriangleButton.Text.ToUpper()).ToString();
SelectButton.Text = key.GetValue("SCE_CTRL_SELECT", SelectButton.Text.ToUpper()).ToString();
StartButton.Text = key.GetValue("SCE_CTRL_START", StartButton.Text.ToUpper()).ToString();
string Runner = key.GetValue("RUNNER", "KAROSHI").ToString();
if(Runner == "GREENTECHPLUS")
{
GreenTechPlus.Checked = true;
Karoshi.Checked = false;
}
else
{
GreenTechPlus.Checked = false;
Karoshi.Checked = true;
}
key.Close();
}
catch (Exception) { };
Check();
}
private void BrowseIcon_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "PNG files (*.png)|*.png;";
openFileDialog.FilterIndex = 1;
openFileDialog.RestoreDirectory = true;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
IconPath.Text = openFileDialog.FileName;
}
}
private void BrowsePic_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "PNG files (*.png)|*.png;";
openFileDialog.FilterIndex = 1;
openFileDialog.RestoreDirectory = true;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
PicPath.Text = openFileDialog.FileName;
}
}
private void Browse_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "GameMaker 8/8.1 Executable files (*.exe)|*.exe;";
openFileDialog.FilterIndex = 1;
openFileDialog.RestoreDirectory = true;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
GMPath.Text = openFileDialog.FileName;
}
}
public static void CopyDirTree(string SourcePath, string DestinationPath)
{
//Now Create all of the directories
foreach (string dirPath in Directory.GetDirectories(SourcePath, "*",
SearchOption.AllDirectories))
Directory.CreateDirectory(dirPath.Replace(SourcePath, DestinationPath));
//Copy all the files & Replaces any files with the same name
foreach (string newPath in Directory.GetFiles(SourcePath, "*.*",
SearchOption.AllDirectories))
File.Copy(newPath, newPath.Replace(SourcePath, DestinationPath), true);
}
public static void WriteString(Stream s, string Str)
{
char[] carr = Str.ToCharArray();
foreach (char c in carr)
{
s.WriteByte((byte)c);
}
}
public static void WriteValueStr(Stream s, string Key, string Value)
{
WriteString(s, Key + " = ");
WriteString(s, Value);
WriteString(s, "\r\n");
}
private void BuildISO_Click(object sender, EventArgs e)
{
wasClicked = true;
Program.OutputDir = Path.GetDirectoryName(GMPath.Text);
String InputFolder = Path.Combine(Program.OutputDir, "_iso_temp");
if (Directory.Exists(InputFolder))
{
Directory.Delete(InputFolder, true);
}
CopyDirTree(Path.Combine(Application.StartupPath, "RUNNER"), InputFolder);
if(GreenTechPlus.Checked)
{
File.Delete(Path.Combine(InputFolder, "PSP_GAME", "SYSDIR", "KAROSHI.BIN"));
File.Move(Path.Combine(InputFolder, "PSP_GAME", "SYSDIR", "GREENTECHPLUS.BIN"), Path.Combine(InputFolder, "PSP_GAME", "SYSDIR", "EBOOT.BIN"));
}
else
{
File.Delete(Path.Combine(InputFolder, "PSP_GAME", "SYSDIR", "GREENTECHPLUS.BIN"));
File.Move(Path.Combine(InputFolder, "PSP_GAME", "SYSDIR", "KAROSHI.BIN"), Path.Combine(InputFolder, "PSP_GAME", "SYSDIR", "EBOOT.BIN"));
}
//Write to PARAM.SFO:
FileStream sfo = new FileStream(Path.Combine(InputFolder, "PSP_GAME", "PARAM.SFO"),FileMode.OpenOrCreate,FileAccess.ReadWrite);
sfo.Seek(0x128, SeekOrigin.Begin);
WriteString(sfo, TitleId.Text);
sfo.Seek(0x158, SeekOrigin.Begin);
WriteString(sfo, Title.Text);
sfo.Close();
//Copy icon and pic0:
File.Copy(IconPath.Text, Path.Combine(InputFolder, "PSP_GAME", "ICON0.PNG"), true);
File.Copy(PicPath.Text, Path.Combine(InputFolder, "PSP_GAME", "PIC0.PNG"), true);
File.Copy(PicPath.Text, Path.Combine(InputFolder, "PSP_GAME", "USRDIR", "games","ICON0.PNG"), true);
//Write game.ini
FileStream ini = new FileStream(Path.Combine(InputFolder, "PSP_GAME", "USRDIR","games","game.ini"), FileMode.OpenOrCreate, FileAccess.ReadWrite);
ini.SetLength(0);
WriteString(ini, "[PSP_LOADSAVE]\r\n");
WriteValueStr(ini, "ICON","games /ICON0.PNG");
WriteValueStr(ini, "TITLEID", TitleId.Text);
WriteValueStr(ini, "SHORT_NAME", Title.Text);
WriteValueStr(ini, "DESC_NAME", Title.Text+ " save game.");
WriteValueStr(ini, "PARENTAL_LEVEL", "0");
WriteString(ini, "[PSP_IO]\r\n");
WriteValueStr(ini, "SCE_CTRL_L", LBumper.Text.ToUpper());
WriteValueStr(ini, "SCE_CTRL_R", RBumper.Text.ToUpper());
WriteValueStr(ini, "SCE_CTRL_LEFT", LeftDPAD.Text.ToUpper());
WriteValueStr(ini, "SCE_CTRL_RIGHT", RightDPAD.Text.ToUpper());
WriteValueStr(ini, "SCE_CTRL_UP", UpDPAD.Text.ToUpper());
WriteValueStr(ini, "SCE_CTRL_DOWN", DownDPAD.Text.ToUpper());
WriteValueStr(ini, "SCE_CTRL_CIRCLE", CircleButton.Text.ToUpper());
WriteValueStr(ini, "SCE_CTRL_CROSS", CrossButton.Text.ToUpper());
WriteValueStr(ini, "SCE_CTRL_SQUARE", SquareButton.Text.ToUpper());
WriteValueStr(ini, "SCE_CTRL_TRIANGLE", TriangleButton.Text.ToUpper());
WriteValueStr(ini, "SCE_CTRL_SELECT", SelectButton.Text.ToUpper());
WriteValueStr(ini, "SCE_CTRL_START", StartButton.Text.ToUpper());
ini.Close();
this.Close();
}
public string GetGMPath()
{
return GMPath.Text;
}
public string GetTitleID()
{
return TitleId.Text;
}
public bool WasClicked()
{
return wasClicked;
}
public void Check()
{
if (File.Exists(GMPath.Text))
{
BuildISO.Enabled = true;
}
else
{
BuildISO.Enabled = false;
return;
}
if (File.Exists(IconPath.Text))
{
BuildISO.Enabled = false;
try
{
Bitmap bmp = new Bitmap(IconPath.Text);
if(bmp.Width != 144 || bmp.Height != 80)
{
return;
}
}
catch(Exception)
{
return;
}
BuildISO.Enabled = true;
}
else
{
BuildISO.Enabled = false;
return;
}
if (File.Exists(PicPath.Text))
{
BuildISO.Enabled = true;
}
else
{
BuildISO.Enabled = false;
return;
}
BuildISO.Enabled = false;
if (TitleId.Text.Length == 9)
{
char[] TitleArray = TitleId.Text.ToArray();
for (int i = 0; i < 4; i++)
{
if (!Char.IsLetter(TitleArray[i]))
{
return;
}
}
for (int i = 4; i < 9; i++)
{
if (!Char.IsNumber(TitleArray[i]))
{
return;
}
}
BuildISO.Enabled = true;
}
}
private void GMPath_TextChanged(object sender, EventArgs e)
{
Check();
}
private void IconPath_TextChanged(object sender, EventArgs e)
{
Check();
}
private void PicPath_TextChanged(object sender, EventArgs e)
{
Check();
}
private void TitleId_TextChanged(object sender, EventArgs e)
{
int Cursor = TitleId.SelectionStart;
TitleId.Text = TitleId.Text.ToUpper();
TitleId.SelectionStart = Cursor;
Check();
}
private void ChovyUI_FormClosing(object sender, FormClosingEventArgs e)
{
try
{
Microsoft.Win32.RegistryKey key;
key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"Software\CHOVYProject\Chovy-GM");
key.SetValue("TITLEID", TitleId.Text);
key.SetValue("TITLE", Title.Text);
key.SetValue("GMEXE", GMPath.Text);
key.SetValue("ICONPATH", IconPath.Text);
key.SetValue("PICPATH", PicPath.Text);
key.SetValue("SCE_CTRL_L", LBumper.Text.ToUpper());
key.SetValue("SCE_CTRL_R", RBumper.Text.ToUpper());
key.SetValue("SCE_CTRL_LEFT", LeftDPAD.Text.ToUpper());
key.SetValue("SCE_CTRL_RIGHT", RightDPAD.Text.ToUpper());
key.SetValue("SCE_CTRL_UP", UpDPAD.Text.ToUpper());
key.SetValue("SCE_CTRL_DOWN", DownDPAD.Text.ToUpper());
key.SetValue("SCE_CTRL_CIRCLE", CircleButton.Text.ToUpper());
key.SetValue("SCE_CTRL_CROSS", CrossButton.Text.ToUpper());
key.SetValue("SCE_CTRL_SQUARE", SquareButton.Text.ToUpper());
key.SetValue("SCE_CTRL_TRIANGLE", TriangleButton.Text.ToUpper());
key.SetValue("SCE_CTRL_SELECT", SelectButton.Text.ToUpper());
key.SetValue("SCE_CTRL_START", StartButton.Text.ToUpper());
if(GreenTechPlus.Checked)
{
key.SetValue("RUNNER", "GREENTECHPLUS");
}
else
{
key.SetValue("RUNNER", "KAROSHI");
}
key.Close();
}
catch (Exception)
{
MessageBox.Show("Failed to save settings to registry.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}