From 3f004f74d17d97373a4136657a12c317174049a6 Mon Sep 17 00:00:00 2001 From: VaDiM Date: Wed, 13 Mar 2024 22:28:16 +0300 Subject: [PATCH] Add option to disable asset loading via typetree --- AssetStudio/AssetsManager.cs | 19 +++++---- AssetStudioCLI/Options/CLIOptions.cs | 35 +++++++++++----- AssetStudioCLI/Studio.cs | 1 + AssetStudioGUI/AssetStudioGUIForm.Designer.cs | 41 ++++++++++++------- AssetStudioGUI/AssetStudioGUIForm.cs | 5 +++ 5 files changed, 67 insertions(+), 34 deletions(-) diff --git a/AssetStudio/AssetsManager.cs b/AssetStudio/AssetsManager.cs index 089a29d..9668c0b 100644 --- a/AssetStudio/AssetsManager.cs +++ b/AssetStudio/AssetsManager.cs @@ -12,6 +12,7 @@ namespace AssetStudio { public string SpecifyUnityVersion; public bool ZstdEnabled = true; + public bool LoadingViaTypeTreeEnabled = true; public List assetsFileList = new List(); private HashSet filteredAssetTypesList = new HashSet(); @@ -502,9 +503,9 @@ namespace AssetStudio obj = new Animation(objectReader); break; case ClassIDType.AnimationClip: - obj = objectReader.serializedType?.m_Type == null - ? new AnimationClip(objectReader) - : new AnimationClip(objectReader, TypeTreeHelper.ReadType(objectReader.serializedType.m_Type, objectReader)); + obj = objectReader.serializedType?.m_Type != null && LoadingViaTypeTreeEnabled + ? new AnimationClip(objectReader, TypeTreeHelper.ReadType(objectReader.serializedType.m_Type, objectReader)) + : new AnimationClip(objectReader); break; case ClassIDType.Animator: obj = new Animator(objectReader); @@ -577,14 +578,14 @@ namespace AssetStudio obj = new TextAsset(objectReader); break; case ClassIDType.Texture2D: - obj = objectReader.serializedType?.m_Type == null - ? new Texture2D(objectReader) - : new Texture2D(objectReader, TypeTreeHelper.ReadType(objectReader.serializedType.m_Type, objectReader)); + obj = objectReader.serializedType?.m_Type != null && LoadingViaTypeTreeEnabled + ? new Texture2D(objectReader, TypeTreeHelper.ReadType(objectReader.serializedType.m_Type, objectReader)) + : new Texture2D(objectReader); break; case ClassIDType.Texture2DArray: - obj = objectReader.serializedType?.m_Type == null - ? new Texture2DArray(objectReader) - : new Texture2DArray(objectReader, TypeTreeHelper.ReadType(objectReader.serializedType.m_Type, objectReader)); + obj = objectReader.serializedType?.m_Type != null && LoadingViaTypeTreeEnabled + ? new Texture2DArray(objectReader, TypeTreeHelper.ReadType(objectReader.serializedType.m_Type, objectReader)) + : new Texture2DArray(objectReader); break; case ClassIDType.Transform: obj = new Transform(objectReader); diff --git a/AssetStudioCLI/Options/CLIOptions.cs b/AssetStudioCLI/Options/CLIOptions.cs index bd60c1f..5de18bb 100644 --- a/AssetStudioCLI/Options/CLIOptions.cs +++ b/AssetStudioCLI/Options/CLIOptions.cs @@ -116,6 +116,7 @@ namespace AssetStudioCLI.Options public static Option o_assemblyPath; public static Option o_unityVersion; public static Option f_notRestoreExtensionName; + public static Option f_avoidLoadingViaTypetree; public static Option f_loadAllAssets; static CLIOptions() @@ -431,6 +432,15 @@ namespace AssetStudioCLI.Options optionHelpGroup: HelpGroups.Advanced, isFlag: true ); + f_avoidLoadingViaTypetree = new GroupedOption + ( + optionDefaultValue: false, + optionName: "--avoid-typetree-loading", + optionDescription: "(Flag) If specified, AssetStudio will not try to load assets using their type tree\n", + optionExample: "", + optionHelpGroup: HelpGroups.Advanced, + isFlag: true + ); f_loadAllAssets = new GroupedOption ( optionDefaultValue: false, @@ -553,10 +563,24 @@ namespace AssetStudioCLI.Options switch(flag) { + case "--l2d-force-bezier": + if (o_workMode.Value != WorkMode.ExportLive2D) + { + Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{flag.Color(brightYellow)}] flag. This flag is not suitable for the current working mode [{o_workMode.Value}].\n"); + ShowOptionDescription(o_workMode); + return; + } + f_l2dForceBezier.Value = true; + resplittedArgs.RemoveAt(i); + break; case "--not-restore-extension": f_notRestoreExtensionName.Value = true; resplittedArgs.RemoveAt(i); break; + case "--avoid-typetree-loading": + f_avoidLoadingViaTypetree.Value = true; + resplittedArgs.RemoveAt(i); + break; case "--load-all": switch (o_workMode.Value) { @@ -572,16 +596,6 @@ namespace AssetStudioCLI.Options return; } break; - case "--l2d-force-bezier": - if (o_workMode.Value != WorkMode.ExportLive2D) - { - Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{flag.Color(brightYellow)}] flag. This flag is not suitable for the current working mode [{o_workMode.Value}].\n"); - ShowOptionDescription(o_workMode); - return; - } - f_l2dForceBezier.Value = true; - resplittedArgs.RemoveAt(i); - break; } } #endregion @@ -1083,6 +1097,7 @@ namespace AssetStudioCLI.Options { sb.AppendLine($"# Custom Compression Type: {o_customCompressionType}"); } + sb.AppendLine($"# Load Assets via Typetree: {!f_avoidLoadingViaTypetree.Value}"); sb.AppendLine($"# Input Path: \"{inputPath}\""); switch (o_workMode.Value) { diff --git a/AssetStudioCLI/Studio.cs b/AssetStudioCLI/Studio.cs index 1ff5b50..66f84f0 100644 --- a/AssetStudioCLI/Studio.cs +++ b/AssetStudioCLI/Studio.cs @@ -35,6 +35,7 @@ namespace AssetStudioCLI var isLoaded = false; assetsManager.SpecifyUnityVersion = CLIOptions.o_unityVersion.Value; assetsManager.ZstdEnabled = CLIOptions.o_customCompressionType.Value == CustomCompressionType.Zstd; + assetsManager.LoadingViaTypeTreeEnabled = !CLIOptions.f_avoidLoadingViaTypetree.Value; if (!CLIOptions.f_loadAllAssets.Value) { assetsManager.SetAssetFilter(CLIOptions.o_exportAssetTypes.Value); diff --git a/AssetStudioGUI/AssetStudioGUIForm.Designer.cs b/AssetStudioGUI/AssetStudioGUIForm.Designer.cs index 5a3fb77..9403b8d 100644 --- a/AssetStudioGUI/AssetStudioGUIForm.Designer.cs +++ b/AssetStudioGUI/AssetStudioGUIForm.Designer.cs @@ -88,11 +88,13 @@ this.showConsoleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem15 = new System.Windows.Forms.ToolStripMenuItem(); this.writeLogToFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.disableAssetLoadingViaTypetreeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.exportClassStructuresMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); this.tabControl1 = new System.Windows.Forms.TabControl(); this.tabPage1 = new System.Windows.Forms.TabPage(); + this.sceneTreeView = new AssetStudioGUI.GOHierarchy(); this.treeSearch = new System.Windows.Forms.TextBox(); this.tabPage2 = new System.Windows.Forms.TabPage(); this.assetListView = new System.Windows.Forms.ListView(); @@ -155,7 +157,6 @@ this.exportL2DWithClipsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.goToSceneHierarchyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.showOriginalFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.sceneTreeView = new AssetStudioGUI.GOHierarchy(); this.menuStrip1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); this.splitContainer1.Panel1.SuspendLayout(); @@ -314,7 +315,7 @@ this.customCompressionZstdToolStripMenuItem.CheckOnClick = true; this.customCompressionZstdToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this.customCompressionZstdToolStripMenuItem.Name = "customCompressionZstdToolStripMenuItem"; - this.customCompressionZstdToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.customCompressionZstdToolStripMenuItem.Size = new System.Drawing.Size(130, 22); this.customCompressionZstdToolStripMenuItem.Text = "Zstd"; this.customCompressionZstdToolStripMenuItem.ToolTipText = "If selected, Zstd-decompression will be used for assets with custom compression t" + "ype"; @@ -324,7 +325,7 @@ // this.customCompressionLZ4ToolStripMenuItem.CheckOnClick = true; this.customCompressionLZ4ToolStripMenuItem.Name = "customCompressionLZ4ToolStripMenuItem"; - this.customCompressionLZ4ToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.customCompressionLZ4ToolStripMenuItem.Size = new System.Drawing.Size(130, 22); this.customCompressionLZ4ToolStripMenuItem.Text = "Lz4/Lz4HC"; this.customCompressionLZ4ToolStripMenuItem.ToolTipText = "If selected, Lz4-decompression will be used for assets with custom compression ty" + "pe"; @@ -637,6 +638,7 @@ this.showConsoleToolStripMenuItem, this.toolStripMenuItem15, this.writeLogToFileToolStripMenuItem, + this.disableAssetLoadingViaTypetreeToolStripMenuItem, this.exportClassStructuresMenuItem}); this.debugMenuItem.Name = "debugMenuItem"; this.debugMenuItem.Size = new System.Drawing.Size(54, 20); @@ -668,6 +670,14 @@ this.writeLogToFileToolStripMenuItem.Text = "Write log to file"; this.writeLogToFileToolStripMenuItem.CheckedChanged += new System.EventHandler(this.writeLogToFileToolStripMenuItem_CheckedChanged); // + // disableAssetLoadingViaTypetreeToolStripMenuItem + // + this.disableAssetLoadingViaTypetreeToolStripMenuItem.CheckOnClick = true; + this.disableAssetLoadingViaTypetreeToolStripMenuItem.Name = "disableAssetLoadingViaTypetreeToolStripMenuItem"; + this.disableAssetLoadingViaTypetreeToolStripMenuItem.Size = new System.Drawing.Size(288, 22); + this.disableAssetLoadingViaTypetreeToolStripMenuItem.Text = "Disable asset loading via typetree"; + this.disableAssetLoadingViaTypetreeToolStripMenuItem.Click += new System.EventHandler(this.disableAssetLoadingViaTypetreeToolStripMenuItem_Click); + // // exportClassStructuresMenuItem // this.exportClassStructuresMenuItem.Name = "exportClassStructuresMenuItem"; @@ -731,6 +741,18 @@ this.tabPage1.Text = "Scene Hierarchy"; this.tabPage1.UseVisualStyleBackColor = true; // + // sceneTreeView + // + this.sceneTreeView.CheckBoxes = true; + this.sceneTreeView.Dock = System.Windows.Forms.DockStyle.Fill; + this.sceneTreeView.HideSelection = false; + this.sceneTreeView.Location = new System.Drawing.Point(0, 20); + this.sceneTreeView.Name = "sceneTreeView"; + this.sceneTreeView.Size = new System.Drawing.Size(472, 587); + this.sceneTreeView.TabIndex = 1; + this.sceneTreeView.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.sceneTreeView_AfterCheck); + this.sceneTreeView.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.sceneTreeView_NodeMouseClick); + // // treeSearch // this.treeSearch.Dock = System.Windows.Forms.DockStyle.Top; @@ -1386,18 +1408,6 @@ this.showOriginalFileToolStripMenuItem.Visible = false; this.showOriginalFileToolStripMenuItem.Click += new System.EventHandler(this.showOriginalFileToolStripMenuItem_Click); // - // sceneTreeView - // - this.sceneTreeView.CheckBoxes = true; - this.sceneTreeView.Dock = System.Windows.Forms.DockStyle.Fill; - this.sceneTreeView.HideSelection = false; - this.sceneTreeView.Location = new System.Drawing.Point(0, 20); - this.sceneTreeView.Name = "sceneTreeView"; - this.sceneTreeView.Size = new System.Drawing.Size(472, 587); - this.sceneTreeView.TabIndex = 1; - this.sceneTreeView.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.sceneTreeView_AfterCheck); - this.sceneTreeView.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.sceneTreeView_NodeMouseClick); - // // AssetStudioGUIForm // this.AllowDrop = true; @@ -1576,6 +1586,7 @@ private System.Windows.Forms.ToolStripMenuItem customCompressionTypeToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem customCompressionZstdToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem customCompressionLZ4ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem disableAssetLoadingViaTypetreeToolStripMenuItem; } } diff --git a/AssetStudioGUI/AssetStudioGUIForm.cs b/AssetStudioGUI/AssetStudioGUIForm.cs index e1eed29..635d35e 100644 --- a/AssetStudioGUI/AssetStudioGUIForm.cs +++ b/AssetStudioGUI/AssetStudioGUIForm.cs @@ -2281,6 +2281,11 @@ namespace AssetStudioGUI assetsManager.ZstdEnabled = customCompressionZstdToolStripMenuItem.Checked; } + private void disableAssetLoadingViaTypetreeToolStripMenuItem_Click(object sender, EventArgs e) + { + assetsManager.LoadingViaTypeTreeEnabled = !disableAssetLoadingViaTypetreeToolStripMenuItem.Checked; + } + #region FMOD private void FMODinit() {