Skip to content

Commit e43586d

Browse files
author
David Khristepher Santos
committed
Update default SFO entries
Don't write empty entries to PARAM.SFO
1 parent 8036dd4 commit e43586d

File tree

7 files changed

+117
-35
lines changed

7 files changed

+117
-35
lines changed

PSXPackagerGUI/Pages/SinglePage.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<converters:IsoInformationConverter x:Key="IsoInformationConverter"></converters:IsoInformationConverter>
1919
<converters:BooleanVisibilityConverter x:Key="VisibilityConverter"></converters:BooleanVisibilityConverter>
2020
<ContextMenu x:Key="DiscButtonContextMenu">
21-
<MenuItem Header="Load ISO" x:Name="LoadISO" Click="LoadISO_OnClick" />
21+
<MenuItem Header="Load Disc Image" x:Name="LoadISO" Click="LoadISO_OnClick" />
2222
<MenuItem Header="Save As..." x:Name="SaveImage" Click="SaveImage_OnClick" />
2323
</ContextMenu>
2424
<ContextMenu x:Key="ResourceButtonContextMenu">

PSXPackagerGUI/Pages/SinglePage.xaml.cs

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,13 @@
99
using System.Threading.Tasks;
1010
using System.Windows;
1111
using System.Windows.Controls;
12-
using System.Windows.Media.Imaging;
1312
using Popstation;
1413
using Popstation.Database;
1514
using Popstation.Pbp;
1615
using PSXPackager.Common;
1716
using PSXPackager.Common.Cue;
1817
using PSXPackager.Common.Notification;
1918
using PSXPackagerGUI.Common;
20-
using PSXPackagerGUI.Controls;
2119
using PSXPackagerGUI.Models;
2220
using PSXPackagerGUI.Models.Resource;
2321
using SFOEntry = PSXPackagerGUI.Models.SFOEntry;
@@ -155,9 +153,9 @@ private void ResetModel()
155153
new() { Key = SFOKeys.CATEGORY, Value = SFOValues.PS1Category, EntryType = SFOEntryType.STR, IsEditable = false },
156154
new() { Key = SFOKeys.DISC_ID, Value = "", EntryType = SFOEntryType.STR,IsEditable = true },
157155
new() { Key = SFOKeys.DISC_VERSION, Value = "1.00", EntryType = SFOEntryType.STR, IsEditable = true },
158-
new() { Key = SFOKeys.LICENSE, Value = SFOValues.License, EntryType = SFOEntryType.STR,IsEditable = true },
159-
new() { Key = SFOKeys.PARENTAL_LEVEL, Value = 0x01 , EntryType = SFOEntryType.NUM, IsEditable = false },
160-
new() { Key = SFOKeys.PSP_SYSTEM_VER, Value = "3.01", EntryType = SFOEntryType.STR,IsEditable = true },
156+
new() { Key = SFOKeys.LICENSE, Value = SFOValues.License, EntryType = SFOEntryType.STR,IsEditable = true },
157+
new() { Key = SFOKeys.PARENTAL_LEVEL, Value = SFOValues.ParentalLevel, EntryType = SFOEntryType.NUM, IsEditable = false },
158+
new() { Key = SFOKeys.PSP_SYSTEM_VER, Value = SFOValues.PSPSystemVersion, EntryType = SFOEntryType.STR,IsEditable = true },
161159
new() { Key = SFOKeys.REGION, Value = 0x8000, EntryType = SFOEntryType.NUM, IsEditable = true },
162160
new() { Key = SFOKeys.TITLE, Value = "", EntryType = SFOEntryType.STR, IsEditable = true },
163161
};
@@ -403,7 +401,7 @@ private void Remove(Disc disc)
403401
Model.Discs[disc.Index] = Disc.EmptyDisc(disc.Index);
404402
Model.IsDirty = true;
405403
}
406-
404+
407405
private DiscInfo GetDiscInfo(Disc disc)
408406
{
409407
//var game = _gameDb.GetEntryByGameID(disc.GameID);
@@ -529,31 +527,34 @@ public void Save(bool pspMode = false)
529527
expectedIndex++;
530528
}
531529

532-
var filename = "";
530+
string? filename = null;
533531

534532
var gameId = Model.Discs.First().GameID;
535533

536534
if (pspMode)
537535
{
538536
var ebootPath = Path.Combine(gameId, "EBOOT.PBP");
539537

540-
MessageBox.Show(Window, $"Select the folder to save {ebootPath}", "Save for PSP",
538+
MessageBox.Show(Window, $"Select the GAME folder to save {ebootPath}", "Save for PSP",
541539
MessageBoxButton.OK, MessageBoxImage.Information);
542540

543541
var selectFolderDialog = new Ookii.Dialogs.Wpf.VistaFolderBrowserDialog();
544542

545-
selectFolderDialog.ShowDialog();
546-
547-
filename = Path.Combine(selectFolderDialog.SelectedPath, ebootPath);
543+
var dialogResult = selectFolderDialog.ShowDialog();
548544

549-
if (File.Exists(filename))
545+
if (dialogResult is true)
550546
{
551-
var result = MessageBox.Show(Window, $"The file {filename} exists! Overwrite?", "Save for PSP", MessageBoxButton.YesNo, MessageBoxImage.Warning,
552-
MessageBoxResult.No);
547+
filename = Path.Combine(selectFolderDialog.SelectedPath, ebootPath);
553548

554-
if (result == MessageBoxResult.No)
549+
if (File.Exists(filename))
555550
{
556-
return;
551+
var result = MessageBox.Show(Window, $"The file {filename} exists! Overwrite?", "Save for PSP", MessageBoxButton.YesNo, MessageBoxImage.Warning,
552+
MessageBoxResult.No);
553+
554+
if (result == MessageBoxResult.No)
555+
{
556+
return;
557+
}
557558
}
558559
}
559560
}
@@ -563,12 +564,13 @@ public void Save(bool pspMode = false)
563564
saveFileDialog.AddExtension = true;
564565
saveFileDialog.DefaultExt = ".pbp";
565566
saveFileDialog.Filter = "EBOOT files|*.pbp|All files|*.*";
566-
saveFileDialog.ShowDialog();
567-
filename = saveFileDialog.FileName;
567+
var dialogResult = saveFileDialog.ShowDialog();
568+
if (dialogResult is true)
569+
{
570+
filename = saveFileDialog.FileName;
571+
}
568572
}
569573

570-
571-
572574
if (!string.IsNullOrEmpty(filename))
573575
{
574576
var disc1 = Model.Discs[0];
@@ -946,8 +948,8 @@ private void LoadISO_OnClick(object sender, RoutedEventArgs e)
946948
new() { Key = SFOKeys.DISC_ID, Value = gameId, IsEditable = true },
947949
new() { Key = SFOKeys.DISC_VERSION, Value = "1.00", IsEditable = true },
948950
new() { Key = SFOKeys.LICENSE, Value = SFOValues.License, IsEditable = true },
949-
new() { Key = SFOKeys.PARENTAL_LEVEL, Value = 0x01 , IsEditable = true },
950-
new() { Key = SFOKeys.PSP_SYSTEM_VER, Value = "3.01", IsEditable = true },
951+
new() { Key = SFOKeys.PARENTAL_LEVEL, Value = SFOValues.ParentalLevel, IsEditable = true },
952+
new() { Key = SFOKeys.PSP_SYSTEM_VER, Value = SFOValues.PSPSystemVersion, IsEditable = true },
951953
new() { Key = SFOKeys.REGION, Value = 0x8000, IsEditable = true },
952954
new() { Key = SFOKeys.TITLE, Value = disc.SaveTitle, IsEditable = true },
953955
};
@@ -1109,8 +1111,8 @@ private void ResetSFO_Click(object sender, RoutedEventArgs e)
11091111
new() { Key = SFOKeys.DISC_ID, Value = gameId, IsEditable = true },
11101112
new() { Key = SFOKeys.DISC_VERSION, Value = "1.00", IsEditable = true },
11111113
new() { Key = SFOKeys.LICENSE, Value = SFOValues.License, IsEditable = true },
1112-
new() { Key = SFOKeys.PARENTAL_LEVEL, Value = 0x01 , IsEditable = true },
1113-
new() { Key = SFOKeys.PSP_SYSTEM_VER, Value = "3.01", IsEditable = true },
1114+
new() { Key = SFOKeys.PARENTAL_LEVEL, Value = SFOValues.ParentalLevel, IsEditable = true },
1115+
new() { Key = SFOKeys.PSP_SYSTEM_VER, Value = SFOValues.PSPSystemVersion, IsEditable = true },
11141116
new() { Key = SFOKeys.REGION, Value = 0x8000, IsEditable = true },
11151117
new() { Key = SFOKeys.TITLE, Value = game.MainGameTitle, IsEditable = true },
11161118
};
@@ -1124,8 +1126,8 @@ private void ResetSFO_Click(object sender, RoutedEventArgs e)
11241126
new() { Key = SFOKeys.DISC_ID, Value = "", IsEditable = true },
11251127
new() { Key = SFOKeys.DISC_VERSION, Value = "1.00", IsEditable = true },
11261128
new() { Key = SFOKeys.LICENSE, Value = SFOValues.License, IsEditable = true },
1127-
new() { Key = SFOKeys.PARENTAL_LEVEL, Value = 0x01 , IsEditable = true },
1128-
new() { Key = SFOKeys.PSP_SYSTEM_VER, Value = "3.01", IsEditable = true },
1129+
new() { Key = SFOKeys.PARENTAL_LEVEL, Value = SFOValues.ParentalLevel , IsEditable = true },
1130+
new() { Key = SFOKeys.PSP_SYSTEM_VER, Value = SFOValues.PSPSystemVersion, IsEditable = true },
11291131
new() { Key = SFOKeys.REGION, Value = 0x8000, IsEditable = true },
11301132
new() { Key = SFOKeys.TITLE, Value = "", IsEditable = true },
11311133
};

PSXPackagerGUI/Templates/Icon.xml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3+
<Width>80</Width>
4+
<Height>80</Height>
5+
<ImageLayer>
6+
<X>0</X>
7+
<Y>0</Y>
8+
<Width>80</Width>
9+
<Height>80</Height>
10+
<OriginalWidth>80</OriginalWidth>
11+
<OriginalHeight>80</OriginalHeight>
12+
<SourceUri>overlay.png</SourceUri>
13+
</ImageLayer>
14+
</Resource>
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3+
<ResourceType>SFO</ResourceType>
4+
<Width>310</Width>
5+
<Height>180</Height>
6+
<ImageLayer>
7+
<X>0</X>
8+
<Y>0</Y>
9+
<Width>310</Width>
10+
<Height>180</Height>
11+
<OriginalWidth>310</OriginalWidth>
12+
<OriginalHeight>180</OriginalHeight>
13+
<SourceUri>PIC0.png</SourceUri>
14+
</ImageLayer>
15+
<ImageLayer>
16+
<X>15.199999999999818</X>
17+
<Y>107.99999999999989</Y>
18+
<Width>124</Width>
19+
<Height>59</Height>
20+
<OriginalWidth>124</OriginalWidth>
21+
<OriginalHeight>59</OriginalHeight>
22+
<SourceUri>E.png</SourceUri>
23+
</ImageLayer>
24+
<ImageLayer>
25+
<X>230.39999999999986</X>
26+
<Y>107.20000000000016</Y>
27+
<Width>68</Width>
28+
<Height>61</Height>
29+
<OriginalWidth>68</OriginalWidth>
30+
<OriginalHeight>61</OriginalHeight>
31+
<SourceUri>PS3PSP.png</SourceUri>
32+
</ImageLayer>
33+
<TextLayer>
34+
<X>12.799999999999727</X>
35+
<Y>8.799999999999898</Y>
36+
<Width>110</Width>
37+
<Height>24</Height>
38+
<OriginalWidth>290</OriginalWidth>
39+
<OriginalHeight>180</OriginalHeight>
40+
<Text>Sample Text</Text>
41+
<FontFamily>NewRodin Pro DB</FontFamily>
42+
<FontSize>20</FontSize>
43+
<Color>#FFFFFFFF</Color>
44+
<DropShadow>true</DropShadow>
45+
</TextLayer>
46+
<TextLayer>
47+
<X>16.799999999999727</X>
48+
<Y>47.200000000000045</Y>
49+
<Width>89</Width>
50+
<Height>19</Height>
51+
<OriginalWidth>290</OriginalWidth>
52+
<OriginalHeight>180</OriginalHeight>
53+
<Text>Sample Text</Text>
54+
<FontFamily>NewRodin Pro DB</FontFamily>
55+
<FontSize>16</FontSize>
56+
<Color>#FFFFFFFF</Color>
57+
<DropShadow>true</DropShadow>
58+
</TextLayer>
59+
</Resource>

Popstation/Pbp/PbpWriter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -483,8 +483,8 @@ private SFOData BuildDefaultSFO()
483483
sfoBuilder.AddEntry(SFOKeys.DISC_ID, convertInfo.MainGameID);
484484
sfoBuilder.AddEntry(SFOKeys.DISC_VERSION, "1.00");
485485
sfoBuilder.AddEntry(SFOKeys.LICENSE, SFOValues.License);
486-
sfoBuilder.AddEntry(SFOKeys.PARENTAL_LEVEL, 0x01);
487-
sfoBuilder.AddEntry(SFOKeys.PSP_SYSTEM_VER, "3.01");
486+
sfoBuilder.AddEntry(SFOKeys.PARENTAL_LEVEL, SFOValues.ParentalLevel);
487+
sfoBuilder.AddEntry(SFOKeys.PSP_SYSTEM_VER, SFOValues.PSPSystemVersion);
488488
sfoBuilder.AddEntry(SFOKeys.REGION, 0x8000);
489489
sfoBuilder.AddEntry(SFOKeys.TITLE, convertInfo.MainGameTitle);
490490

Popstation/Pbp/SFOBuilder.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System;
1+
using SharpCompress.Common;
2+
using System;
23
using System.Collections.Generic;
34
using System.Linq;
45

@@ -29,10 +30,12 @@ public SFOData Build()
2930
sfo.Version = 0x00000101;
3031
sfo.Entries = new List<SFODir>();
3132

33+
var validEntries = _entries.Where(entry => entry.Value != null && (entry.Value is string s && s.Trim().Length > 0) || (entry.Value is int)).ToList();
34+
3235
var headerSize = 20;
33-
var indexTableSize = _entries.Count * 16;
36+
var indexTableSize = validEntries.Count * 16;
3437

35-
var keyTableSize = _entries.Sum(x => x.Key.Length + 1);
38+
var keyTableSize = validEntries.Sum(x => x.Key.Length + 1);
3639

3740
if (keyTableSize % 4 != 0)
3841
{
@@ -46,14 +49,16 @@ public SFOData Build()
4649
ushort keyOffset = 0;
4750
uint dataOffset = 0;
4851

49-
foreach (var entry in _entries)
52+
foreach (var entry in validEntries)
5053
{
54+
55+
5156
var entryLength = GetEntryLength(entry.Key, entry.Value);
5257
var maxLength = GetMaxLength(entry.Key);
5358

5459
if (entryLength > maxLength)
5560
{
56-
throw new Exception("Value for {entry.Key} exceeds maximum allowed length");
61+
throw new Exception($"Value for {entry.Key} exceeds maximum allowed length");
5762
}
5863

5964
sfo.Entries.Add(new SFODir()

Popstation/Pbp/SFOValues.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
public class SFOValues
44
{
55
public const string PS1Category = "ME";
6-
public const string License = "Copyright(C) Sony Computer Entertainment America Inc.";
6+
public const string License = "Library programs Copyright(C) Sony ComputerEntertainment Inc.";
7+
public const string PSPSystemVersion = "3.71";
8+
public static int ParentalLevel = 0x1;
79
}
810
}

0 commit comments

Comments
 (0)