From e30b9e9e89f9beb1d1d44cc0c9f7af06cbcc366a Mon Sep 17 00:00:00 2001 From: VaDiM Date: Wed, 8 Nov 2023 13:57:57 +0300 Subject: [PATCH] Fix bug with some avg sprites - Changed face sprite detection method. We can't rely on the "IsWholeBody" flag --- .../Components/Arknights/AvgSprite.cs | 19 ++++++++++--------- .../Components/Arknights/AvgSprite.cs | 19 ++++++++++--------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/AssetStudioCLI/Components/Arknights/AvgSprite.cs b/AssetStudioCLI/Components/Arknights/AvgSprite.cs index 65d1dcc..3f8c469 100644 --- a/AssetStudioCLI/Components/Arknights/AvgSprite.cs +++ b/AssetStudioCLI/Components/Arknights/AvgSprite.cs @@ -93,17 +93,19 @@ namespace Arknights Alias = curSpriteData.Alias; IsWholeBodySprite = curSpriteData.IsWholeBody; - if (spriteHubData.FaceSize.X > 0 && spriteHubData.FaceSize.Y > 0) + if (spriteHubData.FaceSize.X > 0 && spriteHubData.FaceSize.Y > 0) //If face data exist { var fullTexSpriteData = spriteHubData.Sprites.Last(); //Last sprite item in the list usually contains PathID of Sprite with full texture - if (IsWholeBodySprite || curSpriteData.Equals(fullTexSpriteData)) + + var curSprite = (Sprite)assetItem.Asset; + IsFaceSprite = curSprite.m_Rect.width <= 256 && curSprite.m_Rect.height <= 256 && curSprite.m_PathID != fullTexSpriteData.Sprite.m_PathID; + + var curSpriteAlphaID = curSpriteData.AlphaTex.m_PathID; + var curSpriteAlphaTex = (Texture2D)Studio.loadedAssetsList.Find(x => x.m_PathID == curSpriteAlphaID)?.Asset; + if (curSpriteAlphaTex != null) { - fullTexSpriteData = curSpriteData; - } - else - { - var faceAlphaID = curSpriteData.AlphaTex.m_PathID; - FaceSpriteAlphaTexture = (Texture2D)Studio.loadedAssetsList.Find(x => x.m_PathID == faceAlphaID)?.Asset; + FaceSpriteAlphaTexture = IsFaceSprite ? curSpriteAlphaTex : null; + fullTexSpriteData = IsFaceSprite ? fullTexSpriteData : curSpriteData; } var fullTexSpriteID = fullTexSpriteData.Sprite.m_PathID; var fullTexAlphaID = fullTexSpriteData.AlphaTex.m_PathID; @@ -113,7 +115,6 @@ namespace Arknights FullAlphaTexture = (Texture2D)Studio.loadedAssetsList.Find(x => x.m_PathID == fullTexAlphaID)?.Asset; FacePos = new Point((int)Math.Round(spriteHubData.FacePos.X), (int)Math.Round(spriteHubData.FacePos.Y)); FaceSize = new Size((int)Math.Round(spriteHubData.FaceSize.X), (int)Math.Round(spriteHubData.FaceSize.Y)); - IsFaceSprite = assetItem.m_PathID != fullTexSpriteID; } else { diff --git a/AssetStudioGUI/Components/Arknights/AvgSprite.cs b/AssetStudioGUI/Components/Arknights/AvgSprite.cs index f805019..1a59325 100644 --- a/AssetStudioGUI/Components/Arknights/AvgSprite.cs +++ b/AssetStudioGUI/Components/Arknights/AvgSprite.cs @@ -93,17 +93,19 @@ namespace Arknights Alias = curSpriteData.Alias; IsWholeBodySprite = curSpriteData.IsWholeBody; - if (spriteHubData.FaceSize.X > 0 && spriteHubData.FaceSize.Y > 0) + if (spriteHubData.FaceSize.X > 0 && spriteHubData.FaceSize.Y > 0) //If face data exist { var fullTexSpriteData = spriteHubData.Sprites.Last(); //Last sprite item in the list usually contains PathID of Sprite with full texture - if (IsWholeBodySprite || curSpriteData.Equals(fullTexSpriteData)) + + var curSprite = (Sprite)assetItem.Asset; + IsFaceSprite = curSprite.m_Rect.width <= 256 && curSprite.m_Rect.height <= 256 && curSprite.m_PathID != fullTexSpriteData.Sprite.m_PathID; + + var curSpriteAlphaID = curSpriteData.AlphaTex.m_PathID; + var curSpriteAlphaTex = (Texture2D)Studio.exportableAssets.Find(x => x.m_PathID == curSpriteAlphaID)?.Asset; + if (curSpriteAlphaTex != null) { - fullTexSpriteData = curSpriteData; - } - else - { - var faceAlphaID = curSpriteData.AlphaTex.m_PathID; - FaceSpriteAlphaTexture = (Texture2D)Studio.exportableAssets.Find(x => x.m_PathID == faceAlphaID)?.Asset; + FaceSpriteAlphaTexture = IsFaceSprite ? curSpriteAlphaTex : null; + fullTexSpriteData = IsFaceSprite ? fullTexSpriteData : curSpriteData; } var fullTexSpriteID = fullTexSpriteData.Sprite.m_PathID; var fullTexAlphaID = fullTexSpriteData.AlphaTex.m_PathID; @@ -113,7 +115,6 @@ namespace Arknights FullAlphaTexture = (Texture2D)Studio.exportableAssets.Find(x => x.m_PathID == fullTexAlphaID)?.Asset; FacePos = new Point((int)Math.Round(spriteHubData.FacePos.X), (int)Math.Round(spriteHubData.FacePos.Y)); FaceSize = new Size((int)Math.Round(spriteHubData.FaceSize.X), (int)Math.Round(spriteHubData.FaceSize.Y)); - IsFaceSprite = assetItem.m_PathID != fullTexSpriteID; } else {