This commit is contained in:
MLChinoo
2025-09-26 13:06:05 +08:00
parent 6375248d60
commit 3277a234d4
2 changed files with 28 additions and 25 deletions

View File

Binary file not shown.

View File

@@ -18,13 +18,7 @@ namespace SchemeTool
{ {
GameRes.FormatCatalog.Instance.DeserializeScheme(stream); GameRes.FormatCatalog.Instance.DeserializeScheme(stream);
} }
#if false
using (Stream stream = File.Create(".\\GameData\\Formats.json"))
{
GameRes.FormatCatalog.Instance.SerializeSchemeJson(stream);
return;
}
#endif
GameRes.Formats.KiriKiri.Xp3Opener format = GameRes.FormatCatalog.Instance.ArcFormats GameRes.Formats.KiriKiri.Xp3Opener format = GameRes.FormatCatalog.Instance.ArcFormats
.FirstOrDefault(a => a is GameRes.Formats.KiriKiri.Xp3Opener) as GameRes.Formats.KiriKiri.Xp3Opener; .FirstOrDefault(a => a is GameRes.Formats.KiriKiri.Xp3Opener) as GameRes.Formats.KiriKiri.Xp3Opener;
@@ -34,38 +28,47 @@ namespace SchemeTool
// Add scheme information here // Add scheme information here
#if true #if true
byte[] cb = File.ReadAllBytes(@"MEM_10014628_00001000.mem"); byte[] cb = File.ReadAllBytes(@"C:\Users\MLChinoo\Desktop\limelight_lj\control_block.bin");
var cb2 = MemoryMarshal.Cast<byte, uint>(cb); var cb2 = MemoryMarshal.Cast<byte, uint>(cb);
for (int i = 0; i < cb2.Length; i++) for (int i = 0; i < cb2.Length; i++)
cb2[i] = ~cb2[i]; cb2[i] = ~cb2[i];
var cs = new GameRes.Formats.KiriKiri.CxScheme var cs = new GameRes.Formats.KiriKiri.CxScheme
{ {
Mask = 0x000, Mask = 0x2e2,
Offset = 0x000, Offset = 0x283,
PrologOrder = new byte[] { 0, 1, 2 }, PrologOrder = new byte[] { 1, 0, 2 },
OddBranchOrder = new byte[] { 0, 1, 2, 3, 4, 5 }, OddBranchOrder = new byte[] { 1, 2, 4, 3, 0, 5 },
EvenBranchOrder = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 }, EvenBranchOrder = new byte[] { 2, 5, 0, 7, 6, 1, 3, 4 },
ControlBlock = cb2.ToArray() ControlBlock = cb2.ToArray()
}; };
var crypt = new GameRes.Formats.KiriKiri.HxCrypt(cs); var crypt = new GameRes.Formats.KiriKiri.HxCrypt(cs);
crypt.RandomType = 0; crypt.RandomType = 0;
crypt.FilterKey = 0x0000000000000000; crypt.FilterKey = 0xb5a900b497d99000;
crypt.NamesFile = "HxNames.lst"; crypt.NamesFile = "HxNames.lst";
var keyA1 = SoapHexBinary.Parse("0000000000000000000000000000000000000000000000000000000000000000").Value; var key1 = SoapHexBinary.Parse("90731d0f07858de0c5553c10035d174003d400e7d7ccaa76ba4ca078bcc6cc78").Value;
var keyA2 = SoapHexBinary.Parse("00000000000000000000000000000000").Value; var key2 = SoapHexBinary.Parse("092063cd25d03538a83e10e9ef5d1609").Value;
var keyB1 = SoapHexBinary.Parse("0000000000000000000000000000000000000000000000000000000000000000").Value;
var keyB2 = SoapHexBinary.Parse("00000000000000000000000000000000").Value;
crypt.IndexKeyDict = new Dictionary<string, GameRes.Formats.KiriKiri.HxIndexKey>() crypt.IndexKeyDict = new Dictionary<string, GameRes.Formats.KiriKiri.HxIndexKey>()
{ {
{ "data.xp3", new GameRes.Formats.KiriKiri.HxIndexKey { Key1 = keyA1, Key2 = keyA2 } }, { "data.xp3", new GameRes.Formats.KiriKiri.HxIndexKey { Key1 = key1, Key2 = key2 } },
{ "update.xp3", new GameRes.Formats.KiriKiri.HxIndexKey { Key1 = keyB1, Key2 = keyB2 } }, { "bgimage.xp3", new GameRes.Formats.KiriKiri.HxIndexKey { Key1 = key1, Key2 = key2 } },
{ "bgm.xp3", new GameRes.Formats.KiriKiri.HxIndexKey { Key1 = key1, Key2 = key2 } },
{ "evimage.xp3", new GameRes.Formats.KiriKiri.HxIndexKey { Key1 = key1, Key2 = key2 } },
{ "evimage2.xp3", new GameRes.Formats.KiriKiri.HxIndexKey { Key1 = key1, Key2 = key2 } },
{ "fgimage.xp3", new GameRes.Formats.KiriKiri.HxIndexKey { Key1 = key1, Key2 = key2 } },
{ "image.xp3", new GameRes.Formats.KiriKiri.HxIndexKey { Key1 = key1, Key2 = key2 } },
{ "patch.xp3", new GameRes.Formats.KiriKiri.HxIndexKey { Key1 = key1, Key2 = key2 } },
{ "scn.xp3", new GameRes.Formats.KiriKiri.HxIndexKey { Key1 = key1, Key2 = key2 } },
{ "uipsd.xp3", new GameRes.Formats.KiriKiri.HxIndexKey { Key1 = key1, Key2 = key2 } },
{ "video.xp3", new GameRes.Formats.KiriKiri.HxIndexKey { Key1 = key1, Key2 = key2 } },
{ "voice.xp3", new GameRes.Formats.KiriKiri.HxIndexKey { Key1 = key1, Key2 = key2 } },
{ "voice2.xp3", new GameRes.Formats.KiriKiri.HxIndexKey { Key1 = key1, Key2 = key2 } }
}; };
#else #else
GameRes.Formats.KiriKiri.ICrypt crypt = new GameRes.Formats.KiriKiri.XorCrypt(0x00); GameRes.Formats.KiriKiri.ICrypt crypt = new GameRes.Formats.KiriKiri.XorCrypt(0x00);
#endif #endif
// scheme.KnownSchemes.Add("game title", crypt); scheme.KnownSchemes.Add("Limelight Lemonade Jam", crypt);
} }
var gameMap = typeof(GameRes.FormatCatalog).GetField("m_game_map", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic) var gameMap = typeof(GameRes.FormatCatalog).GetField("m_game_map", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
@@ -74,7 +77,7 @@ namespace SchemeTool
if (gameMap != null) if (gameMap != null)
{ {
// Add file name here // Add file name here
// gameMap.Add("game.exe", "game title"); // gameMap.Add("SabbatOfTheWitch.exe", "Sabbat of the Witch [Steam]");
} }
// Save database // Save database