diff --git a/AssetStudioGUI/App.config b/AssetStudioGUI/App.config index bc029f7..1d7718b 100644 --- a/AssetStudioGUI/App.config +++ b/AssetStudioGUI/App.config @@ -97,6 +97,9 @@ True + + False + \ No newline at end of file diff --git a/AssetStudioGUI/AssetStudioGUIForm.Designer.cs b/AssetStudioGUI/AssetStudioGUIForm.Designer.cs index 8353ce1..f8c5d28 100644 --- a/AssetStudioGUI/AssetStudioGUIForm.Designer.cs +++ b/AssetStudioGUI/AssetStudioGUIForm.Designer.cs @@ -44,9 +44,10 @@ namespace AssetStudioGUI this.abortStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.displayAll = new System.Windows.Forms.ToolStripMenuItem(); - this.enableResolveDependencies = new System.Windows.Forms.ToolStripMenuItem(); this.enablePreview = new System.Windows.Forms.ToolStripMenuItem(); this.displayInfo = new System.Windows.Forms.ToolStripMenuItem(); + this.enableResolveDependencies = new System.Windows.Forms.ToolStripMenuItem(); + this.skipContainer = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem14 = new System.Windows.Forms.ToolStripMenuItem(); this.specifyUnityVersion = new System.Windows.Forms.ToolStripTextBox(); this.toolStripMenuItem18 = new System.Windows.Forms.ToolStripMenuItem(); @@ -263,9 +264,10 @@ namespace AssetStudioGUI // this.optionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.displayAll, - this.enableResolveDependencies, this.enablePreview, this.displayInfo, + this.enableResolveDependencies, + this.skipContainer, this.toolStripMenuItem14, this.toolStripMenuItem18, this.toolStripMenuItem19, @@ -285,18 +287,6 @@ namespace AssetStudioGUI "t the RAW file."; this.displayAll.CheckedChanged += new System.EventHandler(this.displayAll_CheckedChanged); // - // enableResolveDependencies - // - this.enableResolveDependencies.Checked = true; - this.enableResolveDependencies.CheckOnClick = true; - this.enableResolveDependencies.CheckState = System.Windows.Forms.CheckState.Checked; - this.enableResolveDependencies.Name = "enableResolveDependencies"; - this.enableResolveDependencies.Size = new System.Drawing.Size(225, 22); - this.enableResolveDependencies.Text = "Enable resolve dependencies"; - this.enableResolveDependencies.ToolTipText = "Toggle the behaviour of loading assets.\nDisable to load file(s) without its depen" + - "dencies."; - this.enableResolveDependencies.CheckedChanged += new System.EventHandler(this.enableResolveDependencies_CheckedChanged); - // // enablePreview // this.enablePreview.Checked = true; @@ -321,6 +311,28 @@ namespace AssetStudioGUI "t, audio bitrate, etc."; this.displayInfo.CheckedChanged += new System.EventHandler(this.displayAssetInfo_Check); // + // enableResolveDependencies + // + this.enableResolveDependencies.Checked = true; + this.enableResolveDependencies.CheckOnClick = true; + this.enableResolveDependencies.CheckState = System.Windows.Forms.CheckState.Checked; + this.enableResolveDependencies.Name = "enableResolveDependencies"; + this.enableResolveDependencies.Size = new System.Drawing.Size(225, 22); + this.enableResolveDependencies.Text = "Enable resolve dependencies"; + this.enableResolveDependencies.ToolTipText = "Toggle the behaviour of loading assets.\nDisable to load file(s) without its depen" + + "dencies."; + this.enableResolveDependencies.CheckedChanged += new System.EventHandler(this.enableResolveDependencies_CheckedChanged); + // + // skipContainer + // + this.skipContainer.CheckOnClick = true; + this.skipContainer.Name = "skipContainer"; + this.skipContainer.Size = new System.Drawing.Size(225, 22); + this.skipContainer.Text = "Skip container recovery"; + this.skipContainer.ToolTipText = "Skips the container recovery step.\nImproves loading when dealing with a large num" + + "ber of files."; + this.skipContainer.CheckedChanged += new System.EventHandler(this.skipContainer_CheckedChanged); + // // toolStripMenuItem14 // this.toolStripMenuItem14.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -533,21 +545,21 @@ namespace AssetStudioGUI // toolStripMenuItem7 // this.toolStripMenuItem7.Name = "toolStripMenuItem7"; - this.toolStripMenuItem7.Size = new System.Drawing.Size(180, 22); + this.toolStripMenuItem7.Size = new System.Drawing.Size(152, 22); this.toolStripMenuItem7.Text = "All assets"; this.toolStripMenuItem7.Click += new System.EventHandler(this.toolStripMenuItem7_Click); // // toolStripMenuItem8 // this.toolStripMenuItem8.Name = "toolStripMenuItem8"; - this.toolStripMenuItem8.Size = new System.Drawing.Size(180, 22); + this.toolStripMenuItem8.Size = new System.Drawing.Size(152, 22); this.toolStripMenuItem8.Text = "Selected assets"; this.toolStripMenuItem8.Click += new System.EventHandler(this.toolStripMenuItem8_Click); // // toolStripMenuItem9 // this.toolStripMenuItem9.Name = "toolStripMenuItem9"; - this.toolStripMenuItem9.Size = new System.Drawing.Size(180, 22); + this.toolStripMenuItem9.Size = new System.Drawing.Size(152, 22); this.toolStripMenuItem9.Text = "Filtered assets"; this.toolStripMenuItem9.Click += new System.EventHandler(this.toolStripMenuItem9_Click); // @@ -564,21 +576,21 @@ namespace AssetStudioGUI // toolStripMenuItem17 // this.toolStripMenuItem17.Name = "toolStripMenuItem17"; - this.toolStripMenuItem17.Size = new System.Drawing.Size(180, 22); + this.toolStripMenuItem17.Size = new System.Drawing.Size(152, 22); this.toolStripMenuItem17.Text = "All assets"; this.toolStripMenuItem17.Click += new System.EventHandler(this.toolStripMenuItem17_Click); // // toolStripMenuItem24 // this.toolStripMenuItem24.Name = "toolStripMenuItem24"; - this.toolStripMenuItem24.Size = new System.Drawing.Size(180, 22); + this.toolStripMenuItem24.Size = new System.Drawing.Size(152, 22); this.toolStripMenuItem24.Text = "Selected assets"; this.toolStripMenuItem24.Click += new System.EventHandler(this.toolStripMenuItem24_Click); // // toolStripMenuItem25 // this.toolStripMenuItem25.Name = "toolStripMenuItem25"; - this.toolStripMenuItem25.Size = new System.Drawing.Size(180, 22); + this.toolStripMenuItem25.Size = new System.Drawing.Size(152, 22); this.toolStripMenuItem25.Text = "Filtered assets"; this.toolStripMenuItem25.Click += new System.EventHandler(this.toolStripMenuItem25_Click); // @@ -632,7 +644,7 @@ namespace AssetStudioGUI this.allToolStripMenuItem.CheckOnClick = true; this.allToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this.allToolStripMenuItem.Name = "allToolStripMenuItem"; - this.allToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.allToolStripMenuItem.Size = new System.Drawing.Size(88, 22); this.allToolStripMenuItem.Text = "All"; this.allToolStripMenuItem.Click += new System.EventHandler(this.typeToolStripMenuItem_Click); // @@ -1486,6 +1498,7 @@ namespace AssetStudioGUI private System.Windows.Forms.ToolStripMenuItem clearConsoleToolStripMenuItem; private System.Windows.Forms.ToolStripTextBox assetMapNameTextBox; private System.Windows.Forms.ToolStripComboBox assetMapTypeComboBox; + private System.Windows.Forms.ToolStripMenuItem skipContainer; } } diff --git a/AssetStudioGUI/AssetStudioGUIForm.cs b/AssetStudioGUI/AssetStudioGUIForm.cs index 70f64c6..b54555d 100644 --- a/AssetStudioGUI/AssetStudioGUIForm.cs +++ b/AssetStudioGUI/AssetStudioGUIForm.cs @@ -108,6 +108,7 @@ namespace AssetStudioGUI displayInfo.Checked = Properties.Settings.Default.displayInfo; enablePreview.Checked = Properties.Settings.Default.enablePreview; enableResolveDependencies.Checked = Properties.Settings.Default.enableResolveDependencies; + skipContainer.Checked = Properties.Settings.Default.skipContainer; assetsManager.ResolveDependencies = enableResolveDependencies.Checked; Renderer.Skipped = Properties.Settings.Default.skipRenderer; MiHoYoBinData.Exportable = Properties.Settings.Default.exportMiHoYoBinData; @@ -502,6 +503,13 @@ namespace AssetStudioGUI assetsManager.ResolveDependencies = enableResolveDependencies.Checked; } + private void skipContainer_CheckedChanged(object sender, EventArgs e) + { + Properties.Settings.Default.skipContainer = skipContainer.Checked; + Properties.Settings.Default.Save(); + + SkipContainer = enableResolveDependencies.Checked; + } private void displayAssetInfo_Check(object sender, EventArgs e) { if (displayInfo.Checked && assetInfoLabel.Text != null) @@ -1729,6 +1737,11 @@ namespace AssetStudioGUI { return; } + if (skipContainer.Checked) + { + Logger.Info("Skip container is enabled, aborting..."); + return; + } optionsToolStripMenuItem.DropDown.Visible = false; var version = specifyAIVersion.SelectedItem.ToString(); @@ -1965,6 +1978,11 @@ namespace AssetStudioGUI private async void loadAIToolStripMenuItem_Click(object sender, EventArgs e) { + if (skipContainer.Checked) + { + Logger.Info("Skip container is enabled, aborting..."); + return; + } miscToolStripMenuItem.DropDown.Visible = false; var openFileDialog = new OpenFileDialog() { Multiselect = false, Filter = "Asset Index JSON File|*.json" }; diff --git a/AssetStudioGUI/AssetStudioGUIForm.resx b/AssetStudioGUI/AssetStudioGUIForm.resx index ee3dd05..3d8c540 100644 --- a/AssetStudioGUI/AssetStudioGUIForm.resx +++ b/AssetStudioGUI/AssetStudioGUIForm.resx @@ -60,9 +60,6 @@ 312, 17 - - 432, 17 - abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWYZ 1234567890.:,;'\"(!?)+-*/= @@ -81,6 +78,9 @@ The quick brown fox jumps over the lazy dog. 1234567890 The quick brown fox jumps over the lazy dog. 1234567890 + + 432, 17 + 553, 17 diff --git a/AssetStudioGUI/Properties/Settings.Designer.cs b/AssetStudioGUI/Properties/Settings.Designer.cs index 878e29e..6e8a8d6 100644 --- a/AssetStudioGUI/Properties/Settings.Designer.cs +++ b/AssetStudioGUI/Properties/Settings.Designer.cs @@ -394,5 +394,17 @@ namespace AssetStudioGUI.Properties { this["collectAnimations"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool skipContainer { + get { + return ((bool)(this["skipContainer"])); + } + set { + this["skipContainer"] = value; + } + } } } diff --git a/AssetStudioGUI/Properties/Settings.settings b/AssetStudioGUI/Properties/Settings.settings index 3cbd6aa..799a87b 100644 --- a/AssetStudioGUI/Properties/Settings.settings +++ b/AssetStudioGUI/Properties/Settings.settings @@ -95,5 +95,8 @@ True + + False + \ No newline at end of file diff --git a/AssetStudioGUI/Studio.cs b/AssetStudioGUI/Studio.cs index 73f1f41..fae5e2b 100644 --- a/AssetStudioGUI/Studio.cs +++ b/AssetStudioGUI/Studio.cs @@ -32,6 +32,7 @@ namespace AssetStudioGUI internal static class Studio { public static Game Game; + public static bool SkipContainer = false; public static AssetsManager assetsManager = new AssetsManager(); public static AssemblyLoader assemblyLoader = new AssemblyLoader(); public static List exportableAssets = new List(); @@ -316,14 +317,17 @@ namespace AssetStudioGUI productName = m_PlayerSettings.productName; break; case AssetBundle m_AssetBundle: - foreach (var m_Container in m_AssetBundle.m_Container) + if (!SkipContainer) { - var preloadIndex = m_Container.Value.preloadIndex; - var preloadSize = m_Container.Value.preloadSize; - var preloadEnd = preloadIndex + preloadSize; - for (int k = preloadIndex; k < preloadEnd; k++) + foreach (var m_Container in m_AssetBundle.m_Container) { - containers.Add((m_AssetBundle.m_PreloadTable[k], m_Container.Key)); + var preloadIndex = m_Container.Value.preloadIndex; + var preloadSize = m_Container.Value.preloadSize; + var preloadEnd = preloadIndex + preloadSize; + for (int k = preloadIndex; k < preloadEnd; k++) + { + containers.Add((m_AssetBundle.m_PreloadTable[k], m_Container.Key)); + } } } assetItem.Text = m_AssetBundle.m_Name; @@ -372,24 +376,25 @@ namespace AssetStudioGUI else assetItem.Text = $"BinFile #{assetItem.m_PathID}"; } } - foreach ((var pptr, var container) in containers) + if (!SkipContainer) { - if (pptr.TryGet(out var obj)) + foreach ((var pptr, var container) in containers) { - objectAssetItemDic[obj].Container = container; + if (pptr.TryGet(out var obj)) + { + objectAssetItemDic[obj].Container = container; + } + } + containers.Clear(); + if (Game.Type.IsGISubGroup()) + { + UpdateContainers(); } } - - if (Game.Type.IsGISubGroup()) - { - UpdateContainers(); - } - foreach (var tmp in exportableAssets) { tmp.SetSubItems(); } - containers.Clear(); visibleAssets = exportableAssets;