134 lines
5.2 KiB
C#
134 lines
5.2 KiB
C#
using GMAssetCompiler;
|
|
using System;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Windows.Forms;
|
|
|
|
namespace UmdGen
|
|
{
|
|
class UMDGEN
|
|
{
|
|
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, "\"");
|
|
WriteString(s, Value);
|
|
WriteString(s, "\"");
|
|
WriteString(s, "\n");
|
|
}
|
|
public static void WriteValueInt(Stream s, string Key, int Value)
|
|
{
|
|
WriteString(s, Key + "=");
|
|
WriteString(s, Value.ToString());
|
|
WriteString(s, "\n");
|
|
}
|
|
|
|
public static void WritePathStr(Stream s, string IsoPath, string PCPath, int Sector, long Size)
|
|
{
|
|
WriteString(s, "\"");
|
|
WriteString(s, IsoPath);
|
|
WriteString(s, "\", ");
|
|
WriteString(s, "\"");
|
|
WriteString(s, PCPath);
|
|
WriteString(s, "\", ");
|
|
WriteString(s, Sector.ToString());
|
|
WriteString(s, ", ");
|
|
WriteString(s, Size.ToString());
|
|
WriteString(s, ", ");
|
|
WriteString(s, "\n");
|
|
}
|
|
|
|
public static void CreateUfl(string UflFile, string InputDir)
|
|
{
|
|
FileStream fs = new FileStream(UflFile, FileMode.OpenOrCreate, FileAccess.ReadWrite);
|
|
fs.SetLength(0);
|
|
|
|
string[] FileList = Directory.GetFiles(InputDir, "*", SearchOption.AllDirectories);
|
|
int Sector = 52767;
|
|
foreach (string FileEntry in FileList)
|
|
{
|
|
long FileSize = new FileInfo(FileEntry).Length;
|
|
int SectorSize = (((int)FileSize - ((int)FileSize % 2048)) / 2048) + 1;
|
|
Console.WriteLine(Path.GetFileName(FileEntry) + " on sector: " + Sector.ToString());
|
|
string FilePath = FileEntry.Substring(InputDir.Length).Replace("\\", "/");
|
|
WritePathStr(fs, FilePath, FileEntry, Sector, FileSize);
|
|
Sector += SectorSize;
|
|
}
|
|
fs.Close();
|
|
}
|
|
public static void CreateUmi(string UmiFile)
|
|
{
|
|
FileStream fs = new FileStream(UmiFile, FileMode.OpenOrCreate, FileAccess.ReadWrite);
|
|
fs.SetLength(0);
|
|
|
|
string TitleId = Program.TitleID;
|
|
string Zone = TitleId.Substring(0, 4);
|
|
string Identifier = TitleId.Substring(4, 5);
|
|
string DiscId = Zone + "-" + Identifier;
|
|
|
|
WriteString(fs, "[SYS]\n");
|
|
WriteValueStr(fs, "VERSION", "1.00");
|
|
WriteValueStr(fs, "APPLICATION", "PSP GAME");
|
|
WriteValueStr(fs, "LAYER_STRUCT", "SINGLE");
|
|
WriteValueInt(fs, "FORCE16SECTOR", 0);
|
|
WriteValueInt(fs, "LAYER_TRP", 0);
|
|
WriteValueStr(fs, "FILE_LIST", Path.ChangeExtension(UmiFile, "ufl"));
|
|
WriteValueInt(fs, "BOOT", 0);
|
|
WriteValueInt(fs, "UPDATE", 1);
|
|
WriteValueInt(fs, "CRASH_BOOT_FILE", 1);
|
|
WriteString(fs, "[/SYS]\n\n");
|
|
|
|
|
|
WriteString(fs, "[MDI]\n");
|
|
WriteValueStr(fs, "DISCNAME", DiscId);
|
|
WriteValueStr(fs, "PRODUCER", "Chovy-GM");
|
|
WriteValueStr(fs, "COPYRIGHT", "CBPS");
|
|
WriteValueStr(fs, "REGION_CODE", "WW");
|
|
WriteString(fs, "[/MDI]\n\n");
|
|
|
|
WriteString(fs, "[VOL]\n");
|
|
WriteValueStr(fs, "VOLUME", "Chovy-GM");
|
|
WriteValueStr(fs, "PUBLISHER", "CBPS");
|
|
WriteValueStr(fs, "VOLUME SET", "");
|
|
WriteValueStr(fs, "DATA PREPARER", "Chovy-GM");
|
|
WriteString(fs, "[/VOL]\n\n");
|
|
fs.Close();
|
|
|
|
}
|
|
|
|
public static void CreateISO(string UmiFile, string OutputDir)
|
|
{
|
|
Process UmdGen = new Process();
|
|
//This would be too simple, sonys software is buggy af and doenst like being run
|
|
//powershell -c ^&"C:\Users\earsy\Programs\chovy-gm\umdgenc.exe" /g "UmiFile.umi" "C:\Users\earsy\Desktop\Output"
|
|
//UmdGen.StartInfo.FileName = Path.Combine(Application.StartupPath, "umdgenc.exe");
|
|
//UmdGen.StartInfo.Arguments = "/g \"" + Path.GetFileName(UmiFile) + "\" \"" + OutputDir + "\"";
|
|
UmdGen.StartInfo.FileName = Path.Combine(Application.StartupPath, "umdgenc.exe");
|
|
UmdGen.StartInfo.Arguments = "/g \"UmiFile.umi\" \"" + OutputDir + "\"";
|
|
UmdGen.StartInfo.WorkingDirectory = Path.GetDirectoryName(UmiFile);
|
|
UmdGen.StartInfo.CreateNoWindow = true;
|
|
UmdGen.StartInfo.UseShellExecute = false;
|
|
UmdGen.StartInfo.RedirectStandardOutput = true;
|
|
UmdGen.StartInfo.RedirectStandardError = true;
|
|
|
|
Console.WriteLine(UmdGen.StartInfo.FileName + " " + UmdGen.StartInfo.Arguments);
|
|
UmdGen.Start();
|
|
UmdGen.WaitForExit();
|
|
if (UmdGen.ExitCode != 0)
|
|
{
|
|
Console.WriteLine(UmdGen.StandardOutput.ReadToEnd() + UmdGen.StandardError.ReadToEnd());
|
|
return;
|
|
}
|
|
UmdGen.Dispose();
|
|
}
|
|
}
|
|
}
|