diff --git a/DumpTool/DumpAllMeshPropsCommand.cs b/DumpTool/DumpAllMeshPropsCommand.cs index 7c6ccb2..46b7500 100644 --- a/DumpTool/DumpAllMeshPropsCommand.cs +++ b/DumpTool/DumpAllMeshPropsCommand.cs @@ -23,8 +23,7 @@ public static void Run(DumpAllMeshPropsCommand args) { var db = new LiteDatabase(args.IndexFilename); - foreach (var entry in forge.Entries) - DumpMeshPropsCommand.ProcessFlatArchive(db, forge, entry, Environment.CurrentDirectory, Path.GetDirectoryName(args.ForgeFilename)); + foreach (var entry in forge.Entries) DumpMeshPropsCommand.ProcessFlatArchive(db, forge, entry, Environment.CurrentDirectory, Path.GetDirectoryName(args.ForgeFilename)); } catch (Exception e) { diff --git a/DumpTool/DumpMeshPropsCommand.cs b/DumpTool/DumpMeshPropsCommand.cs index f893d14..5d7563c 100644 --- a/DumpTool/DumpMeshPropsCommand.cs +++ b/DumpTool/DumpMeshPropsCommand.cs @@ -46,7 +46,7 @@ public static void Run(DumpMeshPropsCommand args) public static void ProcessFlatArchive(ILiteDatabase db, Forge forge, Entry entry, string rootOutputDir, string rootForgeDir) { var container = forge.GetContainer(entry.Uid); - if (container is not ForgeAsset forgeAsset) throw new InvalidDataException("Container is not asset"); + if (container is not ForgeAsset forgeAsset) return; var assetStream = forgeAsset.GetDataStream(forge); var arc = FlatArchive.Read(assetStream); @@ -64,7 +64,14 @@ public static void ProcessFlatArchive(ILiteDatabase db, Forge forge, Entry entry var outputDir = Path.Combine(rootOutputDir, $"model_flatarchive_id{entry.Uid}", $"{(Magic) meshProp.Meta.Magic}_{meshProp.Meta.Uid}"); Directory.CreateDirectory(outputDir); - DumpHelper.DumpNonContainerChildren(outputDir, assetStream, arc, meshProp, unresolvedExterns); + try + { + DumpHelper.DumpNonContainerChildren(outputDir, assetStream, arc, meshProp, unresolvedExterns); + } + catch + { + continue; + } var resolvedExterns = new Dictionary>(); diff --git a/DumpTool/FindAllMeshPropsCommand.cs b/DumpTool/FindAllMeshPropsCommand.cs index 11dc128..d764bfa 100644 --- a/DumpTool/FindAllMeshPropsCommand.cs +++ b/DumpTool/FindAllMeshPropsCommand.cs @@ -20,17 +20,17 @@ public class FindAllMeshPropsCommand public static void Run(FindAllMeshPropsCommand args) { - try - { - var forge = Program.GetForge(args.ForgeFilename); - foreach (var entry in forge.Entries) + var forge = Program.GetForge(args.ForgeFilename); + foreach (var entry in forge.Entries) + try + { if (SearchFlatArchive(forge, entry, args.Uid)) Console.WriteLine(entry.Uid); - } - catch (Exception e) - { - Console.Error.WriteLine($"Error while dumping: {e}"); - } + } + catch (Exception e) + { + Console.Error.WriteLine($"Error while dumping: {e}"); + } } public static bool SearchFlatArchive(Forge forge, Entry entry, ulong uid) @@ -46,14 +46,7 @@ public static bool SearchFlatArchive(Forge forge, Entry entry, ulong uid) { var unresolvedExterns = new List(); - try - { - DumpHelper.SearchNonContainerChildren(assetStream, arc, meshProp, unresolvedExterns); - } - catch (NotSupportedException) - { - continue; - } + DumpHelper.SearchNonContainerChildren(assetStream, arc, meshProp, unresolvedExterns); if (unresolvedExterns.Contains(uid)) return true; diff --git a/RainbowForge/Dump/DumpHelper.cs b/RainbowForge/Dump/DumpHelper.cs index bb797ee..d38af0c 100644 --- a/RainbowForge/Dump/DumpHelper.cs +++ b/RainbowForge/Dump/DumpHelper.cs @@ -172,13 +172,21 @@ void TryRecurseChildren(string dir, ulong uid) { case Magic.Shader: { - var shader = Shader.Read(assetStream); - var pathVert = Path.Combine(rootDir, $"{entry.Meta.Uid}_vert.hlsl"); - var pathExtra = Path.Combine(rootDir, $"{entry.Meta.Uid}_extra.hlsl"); + try + { + var shader = Shader.Read(assetStream); + var pathVert = Path.Combine(rootDir, $"{entry.Meta.Uid}_vert.hlsl"); + var pathExtra = Path.Combine(rootDir, $"{entry.Meta.Uid}_extra.hlsl"); + + Directory.CreateDirectory(rootDir); + File.WriteAllText(pathVert, shader.Vert); + File.WriteAllText(pathExtra, shader.ExtraFunctions); + } + catch (Exception e) + { + // ignored + } - Directory.CreateDirectory(rootDir); - File.WriteAllText(pathVert, shader.Vert); - File.WriteAllText(pathExtra, shader.ExtraFunctions); break; } case Magic.MaterialContainer: