diff --git a/AssetStudio/BundleFile.cs b/AssetStudio/BundleFile.cs index bc72902..0929b53 100644 --- a/AssetStudio/BundleFile.cs +++ b/AssetStudio/BundleFile.cs @@ -628,6 +628,10 @@ namespace AssetStudio { FairGuardUtils.Decrypt(compressedBytesSpan); } + if (Game.Type.IsWangYue() && i == 0 && compressedBytesSpan[..32].Count((byte)0xa6) > 5) + { + FairGuardUtils.Decrypt(compressedBytesSpan); + } if (Game.Type.IsOPFP()) { OPFPUtils.Decrypt(compressedBytesSpan, reader.FullPath); @@ -646,7 +650,7 @@ namespace AssetStudio } break; } - case CompressionType.Lz4Inv when Game.Type.IsArknightsEndfield(): + case CompressionType.Lz4Inv when (Game.Type.IsArknightsEndfield() || Game.Type.IsWangYue()): { var compressedSize = (int)blockInfo.compressedSize; var uncompressedSize = (int)blockInfo.uncompressedSize; diff --git a/AssetStudio/Classes/AnimationClip.cs b/AssetStudio/Classes/AnimationClip.cs index 6eb4631..93100d3 100644 --- a/AssetStudio/Classes/AnimationClip.cs +++ b/AssetStudio/Classes/AnimationClip.cs @@ -1148,7 +1148,7 @@ namespace AssetStudio m_nEulerCurves = reader.ReadUInt32(); m_nScaleCurves = reader.ReadUInt32(); } - else if (reader.Game.Type.IsExAstris()) + else if (reader.Game.Type.IsExAstris() || reader.Game.Type.IsWangYue()) { m_nPositionCurves = reader.ReadUInt32(); m_nRotationCurves = reader.ReadUInt32(); @@ -1316,7 +1316,7 @@ namespace AssetStudio { var version = reader.version; m_StreamedClip = new StreamedClip(reader); - if (reader.Game.Type.IsArknightsEndfield() || reader.Game.Type.IsExAstris()) + if (reader.Game.Type.IsArknightsEndfield() || reader.Game.Type.IsWangYue() || reader.Game.Type.IsExAstris()) { m_DenseClip = new ACLDenseClip(reader); } @@ -1931,7 +1931,7 @@ namespace AssetStudio m_SampleRate = reader.ReadSingle(); m_WrapMode = reader.ReadInt32(); - if (reader.Game.Type.IsArknightsEndfield()) + if (reader.Game.Type.IsArknightsEndfield() || reader.Game.Type.IsWangYue()) { var m_aclType = reader.ReadInt32(); } diff --git a/AssetStudio/GameManager.cs b/AssetStudio/GameManager.cs index bf595be..4d0f000 100644 --- a/AssetStudio/GameManager.cs +++ b/AssetStudio/GameManager.cs @@ -43,6 +43,7 @@ namespace AssetStudio Games.Add(index++, new Game(GameType.GirlsFrontline)); Games.Add(index++, new Game(GameType.Reverse1999)); Games.Add(index++, new Game(GameType.ArknightsEndfield)); + Games.Add(index++, new Game(GameType.WangYue)); Games.Add(index++, new Game(GameType.JJKPhantomParade)); Games.Add(index++, new Game(GameType.MuvLuvDimensions)); Games.Add(index++, new Game(GameType.PartyAnimals)); @@ -171,6 +172,7 @@ namespace AssetStudio SchoolGirlStrikers, ExAstris, PerpetualNovelty, + WangYue, } public static class GameTypes @@ -194,6 +196,7 @@ namespace AssetStudio public static bool IsOPFP(this GameType type) => type == GameType.OPFP; public static bool IsNetEase(this GameType type) => type == GameType.NetEase; public static bool IsArknightsEndfield(this GameType type) => type == GameType.ArknightsEndfield; + public static bool IsWangYue(this GameType type) => type == GameType.WangYue; public static bool IsLoveAndDeepspace(this GameType type) => type == GameType.LoveAndDeepspace; public static bool IsExAstris(this GameType type) => type == GameType.ExAstris; public static bool IsPerpetualNovelty(this GameType type) => type == GameType.PerpetualNovelty; @@ -223,7 +226,7 @@ namespace AssetStudio public static bool IsBlockFile(this GameType type) => type switch { - GameType.BH3 or GameType.BH3Pre or GameType.SR or GameType.GI_Pack or GameType.TOT or GameType.ArknightsEndfield => true, + GameType.BH3 or GameType.BH3Pre or GameType.SR or GameType.GI_Pack or GameType.TOT or GameType.WangYue or GameType.ArknightsEndfield => true, _ => false, };