diff --git a/AssetStudio/FileReader.cs b/AssetStudio/FileReader.cs index 9be4dcf..c7d03ec 100644 --- a/AssetStudio/FileReader.cs +++ b/AssetStudio/FileReader.cs @@ -154,6 +154,9 @@ namespace AssetStudio case GameType.FantasyOfWind: reader = DecryptFantasyOfWind(reader); break; + case GameType.ShiningNikki: + reader = ParseShiningNikki(reader); + break; } } if (reader.FileType == FileType.BundleFile && game.Type.IsBlockFile()) diff --git a/AssetStudio/GameManager.cs b/AssetStudio/GameManager.cs index f8cb44e..f69cb31 100644 --- a/AssetStudio/GameManager.cs +++ b/AssetStudio/GameManager.cs @@ -29,6 +29,7 @@ namespace AssetStudio Games.Add(index++, new Game(GameType.OPFP)); Games.Add(index++, new Game(GameType.AlchemyStars)); Games.Add(index++, new Game(GameType.FantasyOfWind)); + Games.Add(index++, new Game(GameType.ShiningNikki)); } public static Game GetGame(int index) { @@ -127,7 +128,8 @@ namespace AssetStudio EnsembleStars, OPFP, AlchemyStars, - FantasyOfWind + FantasyOfWind, + ShiningNikki } public static class GameTypes diff --git a/AssetStudio/ImportHelper.cs b/AssetStudio/ImportHelper.cs index 44ec32e..3a1323b 100644 --- a/AssetStudio/ImportHelper.cs +++ b/AssetStudio/ImportHelper.cs @@ -361,5 +361,20 @@ namespace AssetStudio return new FileReader(reader.FullPath, ms); } + + public static FileReader ParseShiningNikki(FileReader reader) + { + var data = reader.ReadBytes(0x1000); + var idx = data.Search("UnityFS"); + if (idx == -1) + { + reader.Position = 0; + return reader; + } + var stream = new BlockStream(reader.BaseStream, idx); + return new FileReader(reader.FullPath, stream); + } + return new FileReader(reader.FullPath, ms); + } } }