From 8b183bd3dabe48e017a6d46e3f78bafbed6dba9e Mon Sep 17 00:00:00 2001 From: InvoxiPlayGames Date: Fri, 31 Oct 2025 14:49:48 +0000 Subject: [PATCH] fix: nested directories in sce_sys are now counted as entries --- LibOrbisPkg/PFS/PFSBuilder.cs | 17 ++++++++++++++++- LibOrbisPkg/PKG/PkgBuilder.cs | 10 ++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/LibOrbisPkg/PFS/PFSBuilder.cs b/LibOrbisPkg/PFS/PFSBuilder.cs index 1eacced..6579689 100644 --- a/LibOrbisPkg/PFS/PFSBuilder.cs +++ b/LibOrbisPkg/PFS/PFSBuilder.cs @@ -97,7 +97,22 @@ void Setup() Log("Setting up filesystem structure..."); allDirs = properties.root.GetAllChildrenDirs(); - allFiles = properties.root.GetAllChildrenFiles().Where(f => f.Parent?.name != "sce_sys" || !PKG.EntryNames.NameToId.ContainsKey(f.name)).ToList(); + allFiles = properties.root.GetAllChildrenFiles().Where((f) => { + bool is_sce_sys = false; + var name = f.name; + var parent = f.Parent; + while (parent != null && parent != properties.root) + { + if (parent.Parent == properties.root && parent.name == "sce_sys") + { + is_sce_sys = true; + break; + } + name = parent.name + "/" + name; + parent = parent.Parent; + } + return !is_sce_sys || !PKG.EntryNames.NameToId.ContainsKey(name); + }).ToList(); allNodes = new List(allDirs.OrderBy(d => d.FullPath()).ToList()); allNodes.AddRange(allFiles); diff --git a/LibOrbisPkg/PKG/PkgBuilder.cs b/LibOrbisPkg/PKG/PkgBuilder.cs index e6bd02c..f57f354 100644 --- a/LibOrbisPkg/PKG/PkgBuilder.cs +++ b/LibOrbisPkg/PKG/PkgBuilder.cs @@ -376,10 +376,16 @@ public void BuildPkg(long pfsSize) pkg.ParamSfo, pkg.PsReservedDat }); - foreach(var file in project.RootDir.Dirs.Where(f => f.name == "sce_sys").First().Files.Where(f => EntryNames.NameToId.ContainsKey(f.name))) + foreach(var file in project.RootDir.Dirs.Where(f => f.name == "sce_sys").First().GetAllChildrenFiles()) { var name = file.name; - if (name == "param.sfo") continue; + var parent = file.Parent; + while (parent != null && parent != project.RootDir && parent.name != "sce_sys") + { + name = parent.name + "/" + name; + parent = parent.Parent; + } + if (!EntryNames.NameToId.ContainsKey(name) || name == "param.sfo") continue; var entry = new FileEntry(EntryNames.NameToId[name], file.Write, (uint)file.Size); pkg.Entries.Add(entry); }