static void Main(string[] args) { CatUtils.McPath = "mc_en.exe"; //List<SceneInfo> sceneInfos = new List<SceneInfo>(); Dictionary <SceneInfo, List <ISceneLine> > sceneNewLines = new Dictionary <SceneInfo, List <ISceneLine> >(); Dictionary <string, List <Message> > groupMessages = new Dictionary <string, List <Message> >(); HashSet <KifintArchive> archivesWithScenes = new HashSet <KifintArchive>(); //VCodes vcodes = VCodes.Load(@"C:\Programs\Games\Frontwing\Labyrinth of Grisaia - Copy (2)\Grisaia2.bin.bak"); //Message.Builder b = new Message.Builder(null); //var msssg = b.Build(); //KifintArchive sceneArchive = KifintArchive.LoadArchive(@"C:\Programs\Games\Frontwing\Labyrinth of Grisaia - Copy (2)\scene.int", vcodes.VCode2); string grisaiaDir = @"C:\Programs\Games\Frontwing\The Fruit of Grisaia"; string grisaiaExe = @"Grisaia.exe"; VCodes vcodes = VCodes.Load(Path.Combine(grisaiaDir, grisaiaExe)); KifintLookup sceneLookup = KifintArchive.LoadLookup(KifintType.Scene, grisaiaDir, vcodes.VCode2); KifintLookup updateLookup = KifintArchive.LoadLookup(KifintType.Update, grisaiaDir, vcodes.VCode2); Directory.CreateDirectory(TmpDir); bool restored = false; var allArchives = sceneLookup.Kifints.Concat(updateLookup.Kifints); foreach (KifintArchive archive in allArchives) { string backup = $"{archive.FilePath}.bak"; if (File.Exists(backup)) { File.Copy(backup, archive.FilePath, true); restored = true; } else { File.Copy(archive.FilePath, backup); } } if (restored) { sceneLookup = KifintArchive.LoadLookup(KifintType.Scene, grisaiaDir, vcodes.VCode2); updateLookup = KifintArchive.LoadLookup(KifintType.Update, grisaiaDir, vcodes.VCode2); } var sceneInfos = GetSceneInfos(sceneLookup, updateLookup); archivesWithScenes = new HashSet <KifintArchive>(sceneInfos.Select(s => s.Entry.Archive)); foreach (KifintArchive archive in archivesWithScenes) { string archiveDir = GetArchiveDir(archive); //Directory.CreateDirectory(archiveDir); Directory.CreateDirectory(GetArchiveCompileDir(archive)); foreach (var entry in archive) { entry.ExtractToDirectory(archiveDir); } } foreach (var sceneInfo in sceneInfos) { sceneNewLines.Add(sceneInfo, sceneInfo.Script.Lines.ToList()); foreach (Message msg in sceneInfo.Messages) { if (!groupMessages.TryGetValue(msg.GroupId, out var group)) { group = new List <Message>(); groupMessages.Add(msg.GroupId, group); } group.Add(msg); } } /*using (KifintStream kifintStream = new KifintStream()) { * foreach (KifintEntry entry in sceneArchive) { * SceneScript sceneScript = entry.ExtractScene(kifintStream); * sceneNewLines.Add(sceneScript, sceneScript.Lines.ToList()); * SceneInfo sceneInfo = new SceneInfo(sceneScript); * sceneInfos.Add(sceneScript, sceneInfo); * foreach (Message msg in sceneInfo.Messages) { * if (!groupMessages.TryGetValue(msg.GroupId, out var group)) { * group = new List<Message>(); * groupMessages.Add(msg.GroupId, group); * } * group.Add(msg); * } * } * }*/ string ToVoiceId(SoundPlayCommand cmd) { string snd = cmd.Sound; int index = snd.IndexOf('_'); if (index != -1) { return(snd.Substring(0, index).ToLower()); } return(string.Empty); } //string sceneDir2 = @"C:\Programs\Games\Frontwing\Labyrinth of Grisaia - Copy (2)\scene"; Random rng = new Random(); foreach (var groupPair in groupMessages) { string groupId = groupPair.Key; var messages = groupPair.Value.ToList(); var messageSpots = groupPair.Value.ToList(); while (messages.Count != 0) { var msg = messages[messages.Count - 1]; int spotIndex = rng.Next(messageSpots.Count); var spot = messageSpots[spotIndex]; messages.RemoveAt(messages.Count - 1); messageSpots.RemoveAt(spotIndex); var newSceneLines = sceneNewLines[spot.Script]; int index; for (int i = spot.Messages.Count - 1; i > 0; i--) { newSceneLines.Remove(spot.Messages[i]); } index = newSceneLines.IndexOf(spot.Messages[0]); newSceneLines.RemoveAt(index); newSceneLines.Insert(index, msg.CreateMessage()); if (!msg.IsMonologue) { for (int i = spot.Names.Count - 1; i > 0; i--) { newSceneLines.Remove(spot.Names[i]); } index = newSceneLines.IndexOf(spot.Names[0]); newSceneLines.RemoveAt(index); newSceneLines.Insert(index, msg.CreateName()); } var voices = msg.CreateVoices().ToList(); for (int i = 0; i < spot.Voices.Count; i++) { //newSceneLines.Remove(spot.Voices[i]); string id = ToVoiceId(spot.Voices[i]); var voice = voices.Find(v => ToVoiceId(v) == id); if (voice == null) { throw new Exception(); } voices.Remove(voice); index = newSceneLines.IndexOf(spot.Voices[i]); newSceneLines.RemoveAt(index); newSceneLines.Insert(index, voice); } } } foreach (var scenePair in sceneNewLines) { SaveSceneTxt(scenePair); /*string fileName = scenePair.Key.FileName; * var newSceneLines = scenePair.Value; * SceneScript newScene = new SceneScript(fileName, newSceneLines); * string decompiled = newScene.Decompile(); * File.WriteAllText(Path.Combine(sceneDir2, Path.ChangeExtension(fileName, ".txt")), decompiled, CatUtils.ShiftJIS);*/ //newScene.DecompileToFile(); } foreach (KifintArchive archive in archivesWithScenes) { string archiveDir = GetArchiveDir(archive); string compileDir = GetArchiveCompileDir(archive); CatUtils.CompileSceneFiles(Path.Combine(compileDir, "*.txt"), archiveDir); Directory.Delete(compileDir, true); ProcessStartInfo startInfo = new ProcessStartInfo { FileName = "MakeInt.exe", Arguments = $"\"{Path.Combine(grisaiaDir, archive.FileName)}\" \"{Path.Combine(archiveDir, "*")}\"" }; using (Process p = Process.Start(startInfo)) { p.WaitForExit(); if (p.ExitCode != 0) { throw new Exception($"{archive.FileName} {p.ExitCode}"); } } /*string backup = $"{archive.FilePath}.bak"; * if (File.Exists(backup)) * File.Copy(backup, archive.FilePath, true); * string archiveDir = GetArchiveDir(archive); * Directory.CreateDirectory(archiveDir); * if (archive.ArchiveType != KifintType.Update) { * foreach (var entry in archive) { * if (updateLookup.ContainsKey(entry.FileName)) * continue; * //entry.ExtractToDirectory(archiveDir); * } * }*/ } Environment.Exit(0); /*string sceneDir = @"C:\Programs\Games\Frontwing\Labyrinth of Grisaia - Copy (2)\scene"; * string sceneName = "ama_005.cst"; * string sceneBackup = $"{sceneName}.bak"; * //string sceneFile = Path.Combine(sceneDir, "ama_005.cst"); * SceneScript script = SceneScript.Extract(Path.Combine(sceneDir, sceneBackup)); * List<ISceneLine> lines = new List<ISceneLine>(); * List<ISceneLine> newLines = new List<ISceneLine>(); * lines.AddRange(script.Lines); * newLines.AddRange(script.Lines); * * //List<CharacterMessage> messages = new List<CharacterMessage>(); * Dictionary<string, List<CharacterMessage>> idMessages = new Dictionary<string, List<CharacterMessage>>(); * CharacterMessage currentMessage = null; * SceneName currentName = null; * SceneMessage currentMsg = null; * SoundPlayCommand currentVoice = null; * * void AddIdMessage(CharacterMessage message) { * if (!idMessages.TryGetValue(message.GroupId, out var group)) { * group = new List<CharacterMessage>(); * idMessages.Add(message.GroupId, group); * } * group.Add(message); * //messages.Add(currentMessage); * } * * for (int i = lines.Count - 1; i >= 0; i--) { * ISceneLine line = lines[i]; * if (line.Type == SceneLineType.Input || line.Type == SceneLineType.Page) { * if (currentMessage != null && currentMessage.HasMessage) { * currentMessage.Finish(currentName, currentMsg, currentVoice); * AddIdMessage(currentMessage); * currentMsg = null; * currentName = null; * currentVoice = null; * } * currentMessage = new CharacterMessage(line); * } * else if (currentMessage == null) { * continue; * } * switch (line) { * case SceneMessage msg: * if (currentMsg != null) * newLines.Remove(currentMsg); * currentMessage.PrependMessage(msg); * currentMsg = msg; * break; * case SceneName name: * if (currentName != null) * newLines.Remove(currentName); * currentMessage.PrependName(name); * currentName = name; * break; * case ISceneCommand cmd: * if (line is SoundPlayCommand voice && voice.SoundType == SoundType.Pcm) { * if (currentVoice != null) * newLines.Remove(currentVoice); * currentMessage.AddVoiceCommand(voice); * currentVoice = voice; * } * else if (line is ConditionCommand condition) { * if (condition.Command is SoundPlayCommand play2) * Console.WriteLine(condition.Content); * } * break; * } * } * Random random = new Random(); * foreach (var groupPair in idMessages) { * string id = groupPair.Key; * var messages = groupPair.Value.ToList(); * var messageSpots = groupPair.Value.ToList(); * while (messages.Count != 0) { * var msg = messages[messages.Count - 1]; * int spotIndex = random.Next(messageSpots.Count); * var spot = messageSpots[spotIndex]; * messages.RemoveAt(messages.Count - 1); * messageSpots.RemoveAt(spotIndex); * int index = newLines.IndexOf(spot.NameLine); * if (index != -1) { * newLines.RemoveAt(index); * newLines.Insert(index, new SceneName(msg.NameContent)); * } * index = newLines.IndexOf(spot.MessageLine); * if (index != -1) { * newLines.RemoveAt(index); * newLines.Insert(index, new SceneMessage(msg.MessageContent)); * } * index = newLines.IndexOf(spot.VoiceLine); * if (index != -1) { * newLines.RemoveAt(index); * foreach (var voice in msg.VoiceCommands) * newLines.Insert(index++, new SoundPlayCommand(voice.Content)); * } * } * } * CatUtils.McPath = Path.Combine(AppContext.BaseDirectory, "mc_en.exe"); * SceneScript newScript = new SceneScript(sceneName, newLines); * int result = CatUtils.CompileSceneScript(newScript.Decompile(), sceneDir); * Console.WriteLine(result); * Console.ReadLine();*/ }
static void Main(string[] args) { CS2Patcher cs2Patch = new CS2Patcher { InstallDir = @"C:\Programs\Games\Frontwing\Eden of Grisaia - Copy (2)", }; Console.WriteLine(cs2Patch.Patch()); Console.WriteLine("FINISHED"); Console.ReadLine(); /*Stopwatch buf1w = new Stopwatch(); * Stopwatch buf2w = new Stopwatch(); * const int maxSize = 64 * 64 * 2; * IntPtr src = Marshal.AllocHGlobal(maxSize); * IntPtr dst = Marshal.AllocHGlobal(maxSize); * for (int i = 1; i <= 64; i++) { * int size = i * i; * * for (int j = 0; j < 10000; j++) { * Buffer.MemoryCopy(src.ToPointer(), dst.ToPointer(), size, size); * Buffer451.MemoryCopy(src.ToPointer(), dst.ToPointer(), size, size); * } * } * for (int i = 1; i <= 64; i++) { * int size = i * i; * * for (int j = 0; j < 100000; j++) { * buf1w.Start(); * Buffer.MemoryCopy(src.ToPointer(), dst.ToPointer(), size, size); * buf1w.Stop(); * buf2w.Start(); * Buffer451.MemoryCopy(src.ToPointer(), dst.ToPointer(), size, size); * buf2w.Stop(); * } * } * Marshal.FreeHGlobal(src); * Marshal.FreeHGlobal(dst); * Console.WriteLine(buf1w.ElapsedMilliseconds); * Console.WriteLine(buf2w.ElapsedMilliseconds); * byte[] src2 = new byte[maxSize]; * byte[] dst2 = new byte[maxSize]; * buf1w.Restart(); * buf2w.Restart(); * for (int i = 1; i <= 64; i++) { * int size = i * i; * * for (int j = 0; j < 10000; j++) { * Buffer.BlockCopy(src2, 0, dst2, 0, size); * Array.Copy(src2, 0, dst2, 0, size); * } * } * for (int i = 1; i <= 64; i++) { * int size = i * i; * * for (int j = 0; j < 500000; j++) { * buf1w.Start(); * Buffer.BlockCopy(src2, 0, dst2, 0, size); * buf1w.Stop(); * buf2w.Start(); * Array.Copy(src2, 0, dst2, 0, size); * buf2w.Stop(); * } * } * Console.WriteLine(buf1w.ElapsedMilliseconds); * Console.WriteLine(buf2w.ElapsedMilliseconds); * Console.ReadLine();*/ JsonTest jtest = new JsonTest(""); jtest.A = 100; jtest.B = 200; string json = JsonConvert.SerializeObject(jtest, Formatting.Indented); JsonTest jtest2 = JsonConvert.DeserializeObject <JsonTest>(json); string rawPath = @"C:\Users\Onii-chan\Pictures\Sprites\Grisaia\Cs2\Raw2"; string hg3Path = @"C:\Users\Onii-chan\Pictures\Sprites\Grisaia\Cs2\Hg3"; string outputPath = @"C:\Users\Onii-chan\Pictures\Sprites\Grisaia\Cs2\Output2"; string outputPath2 = @"C:\Users\Onii-chan\Pictures\Sprites\Grisaia\Cs2\Output3"; string outputExpandPath = @"C:\Users\Onii-chan\Pictures\Sprites\Grisaia\Cs2\OutputExpand"; string output1 = "hg3-1"; string output2 = "hg3-2"; Directory.CreateDirectory(output1); Directory.CreateDirectory(output2); int hg3Index = 0; Console.Write($"\r{hg3Index}"); //HgxImage.Extract(@"C:\Programs\Tools\CatSystem2_v401\tool\img_flipped.hg3"); var hg3Cs2Files = Directory.EnumerateFiles(rawPath, "*.hg3"); //.SkipWhile(s => !s.EndsWith("click.hg3")); Stopwatch hwatch = new Stopwatch(); Stopwatch hwatch2 = new Stopwatch(); /*foreach (string file in hg3Cs2Files) { * Console.Write($"\r{hg3Index++}"); * hwatch.Start(); * HgxImage hg3Image = HgxImage.ExtractImages(file, outputPath, HgxOptions.None); * hwatch.Stop(); * hwatch2.Start(); * using (var stream = File.OpenRead(file)) { * HgxImage hg3Image2 = HgxImage.Extract(stream, file); * hg3Image2.ExtractImages(stream, outputPath2, HgxOptions.None); * } * hwatch2.Stop(); * //hg3Image = HgxImage.ExtractImages(file, outputExpandPath, HgxOptions.Expand); * //hg3Image.SaveJsonToDirectory(hg3Path); * }*/ Console.WriteLine($"\r{hg3Index}"); Console.WriteLine(hwatch.ElapsedMilliseconds); hwatch.Reset(); Console.WriteLine(hwatch2.ElapsedMilliseconds); hwatch2.Reset(); string grisaiaInstallDir = @"C:\Programs\Games\Frontwing\The Fruit of Grisaia"; string grisaiaExe = Path.Combine(grisaiaInstallDir, "Grisaia.exe"); string grisaiaConfigInt = Path.Combine(grisaiaInstallDir, "config.int"); VCodes grisaiaVCodes = VCodes.Load(grisaiaExe); KifintLookup lookup = KifintArchive.LoadLookup(KifintType.Image, grisaiaInstallDir, grisaiaVCodes.VCode2); CatDebug.SpeedTestHgx = true; using (KifintStream kifintStream = new KifintStream()) { lookup["sys_mwnd03.hg3"].ExtractToFile("sys_mwnd03.hg3"); hg3Index = 0; int top = Console.CursorTop; Console.CursorVisible = false; /*Console.WriteLine($"\r{hg3Index}"); * Console.WriteLine(hwatch.ElapsedMilliseconds); hwatch.Reset(); * Console.WriteLine(hwatch2.ElapsedMilliseconds); hwatch2.Reset();*/ foreach (KifintEntry entry in lookup) { if (entry.Extension != ".hg3") { continue; } hwatch.Start(); HgxImage hg3Image = entry.ExtractHgxAndImages(kifintStream, output1, HgxOptions.None); hwatch.Stop(); hwatch2.Start(); using (var stream = entry.ExtractToStream(kifintStream)) { HgxImage hg3Image2 = entry.ExtractHgx(kifintStream); hg3Image2.ExtractImages(stream, output2, HgxOptions.None); } hwatch2.Stop(); //if (hg3Index % 25 == 0) { Console.WriteLine($"\r{hg3Index++}"); Console.WriteLine(hwatch.ElapsedMilliseconds); Console.Write(hwatch2.ElapsedMilliseconds); Console.CursorTop = top; /*} * else { * Console.Write($"\r{hg3Index++}"); * }*/ } Console.CursorVisible = true; } Console.WriteLine($"\r{hg3Index}"); Console.WriteLine(hwatch.ElapsedMilliseconds); hwatch.Reset(); Console.WriteLine(hwatch2.ElapsedMilliseconds); hwatch2.Reset(); Console.WriteLine("FINISHED"); Console.ReadLine(); var screen = FesScreen.Extract(@"C:\Users\Onii-chan\Source\C#\TriggersTools\CatSystem2\samples\CatTesting\bin\Debug\fcgview.fes"); var screen2 = FesScreen.Extract(@"C:\Programs\Tools\CatSystem2_v401\system\fes\cgview.fes"); //SceneScript.DecompileToFile(@) string vc2 = string.Empty; Stopwatch watchNative = new Stopwatch(); Stopwatch watchManaged = new Stopwatch(); Stopwatch watchManaged2 = new Stopwatch(); VCodes vcodes = VCodes.Load(@"C:\Programs\Games\Frontwing\Labyrinth of Grisaia - Copy (2)\Grisaia2.bin.bak"); /*using (var stream = File.OpenRead("config.fes")) { * byte[] dat = new byte[20]; * stream.Position = stream.Length - 1; * BinaryReader reader = new BinaryReader(stream); * Console.WriteLine(stream.Read(dat, 0, dat.Length)); * Console.WriteLine(stream.Read(dat, 0, dat.Length)); * stream.Position = stream.Length - 1; * reader.ReadUInt16(); * Console.ReadLine(); * }*/ vc2 = vcodes.VCode2; /*for (int i = 0; i < 100000; i++) { * CatDebug.NativeBlowfish = true; * watchNative.Start(); * vc2 = vcodes.VCode2; * watchNative.Stop(); * CatDebug.NativeBlowfish = false; * CatDebug.ManagedBlowfishRound = true; * watchManaged.Start(); * vc2 = vcodes.VCode2; * watchManaged.Stop(); * CatDebug.ManagedBlowfishRound = false; * watchManaged2.Start(); * vc2 = vcodes.VCode2; * watchManaged2.Stop(); * } * Console.WriteLine(watchNative.ElapsedMilliseconds); * Console.WriteLine(watchManaged.ElapsedMilliseconds); * Console.WriteLine(watchManaged2.ElapsedMilliseconds);*/ string kajitsuDir = @"C:\Programs\Games\Frontwing\The Fruit of Grisaia"; string kajitsuExe = "Grisaia.exe"; VCodes kajitsoVCodes = VCodes.Load(Path.Combine(kajitsuDir, kajitsuExe)); string hg3Key = "bg15n_d.hg3"; KifintLookup images = KifintArchive.LoadLookup(KifintType.Image, kajitsuDir, kajitsoVCodes.VCode2); Stopwatch watch1 = new Stopwatch(); Stopwatch watch2 = new Stopwatch(); Directory.CreateDirectory("hg3"); CatDebug.SpeedTestHgx = true; CatDebug.NativeBlowfish = true; //var entr = images[hg3Key]; Stopwatch w1 = new Stopwatch(); Stopwatch w2 = new Stopwatch(); using (KifintStream kifintStream = new KifintStream()) { int index = 0; foreach (var entry in images.Take(25)) { //if (entry.Length < 100000) // continue; if (entry.Extension != ".hg3") { continue; } //if (entry.FileNameWithoutExtension != "yum011a") // continue; //if (index % 25 == 0) // Console.Write($"\r{index}"); //index++; //int loops = 1;// Math.Max(Math.Min(2000, 5 * 26000000 / entry.Length), 5); //Console.WriteLine($"{entry} Loops={loops}"); CatDebug.StreamExtract = false; //w1.Start(); //for (int i = 0; i < loops; i++) entry.ExtractHgxAndImages(kifintStream, "hg3", HgxOptions.None); //.CopyTo(Stream.Null); //w1.Stop(); //Console.WriteLine($"Extract: {w.ElapsedMilliseconds}ms"); CatDebug.StreamExtract = true; //w2.Start(); //for (int i = 0; i < loops; i++) entry.ExtractHgxAndImages(kifintStream, "hg3", HgxOptions.None); //.CopyTo(Stream.Null); //w2.Stop(); //Console.WriteLine($" Stream: {w.ElapsedMilliseconds}ms"); //Console.WriteLine(); //Thread.Sleep(1000); } foreach (var entry in images) { //if (entry.Length < 100000) // continue; if (entry.Extension != ".hg3") { continue; } //if (entry.FileNameWithoutExtension != "yum011a") // continue; if (index % 25 == 0) { Console.Write($"\r{index}"); } index++; int loops = 1; // Math.Max(Math.Min(2000, 5 * 26000000 / entry.Length), 5); //Console.WriteLine($"{entry} Loops={loops}"); CatDebug.StreamExtract = false; w1.Start(); //for (int i = 0; i < loops; i++) entry.ExtractHgxAndImages(kifintStream, "hg3", HgxOptions.None); //.CopyTo(Stream.Null); w1.Stop(); //Console.WriteLine($"Extract: {w.ElapsedMilliseconds}ms"); CatDebug.StreamExtract = true; w2.Start(); //for (int i = 0; i < loops; i++) entry.ExtractHgxAndImages(kifintStream, "hg3", HgxOptions.None); //.CopyTo(Stream.Null); w2.Stop(); //Console.WriteLine($" Stream: {w.ElapsedMilliseconds}ms"); //Console.WriteLine(); //Thread.Sleep(1000); } Console.WriteLine($"\r{index}"); Console.WriteLine($"Extract: {w1.ElapsedMilliseconds}ms"); Console.WriteLine($" Stream: {w2.ElapsedMilliseconds}ms"); } /*for (int j = 0; j < 4; j++) { * CatDebug.ManagedBlowfishRound = true; * watch1.Reset(); * watch2.Reset(); * for (int i = 0; i < 6; i++) { * watch1.Start(); * imageLookup[hg3Key].ExtractHg3AndImages("hg3", HgxOptions.None); * watch1.Stop(); * watch2.Start(); * using (var stream = KifintArchive.ExtractToStream(new KifintStream(), imageLookup[hg3Key])) * HgxImage.ExtractImages(stream, hg3Key, "hg3", HgxOptions.None); * watch2.Stop(); * } * Console.WriteLine(watch1.ElapsedMilliseconds); * Console.WriteLine(watch2.ElapsedMilliseconds); * CatDebug.ManagedBlowfishRound = false; * watch1.Reset(); * watch2.Reset(); * for (int i = 0; i < 6; i++) { * watch1.Start(); * imageLookup[hg3Key].ExtractHg3AndImages("hg3", HgxOptions.None); * watch1.Stop(); * watch2.Start(); * using (var stream = KifintArchive.ExtractToStream(new KifintStream(), imageLookup[hg3Key])) * HgxImage.ExtractImages(stream, hg3Key, "hg3", HgxOptions.None); * watch2.Stop(); * } * Console.WriteLine(watch1.ElapsedMilliseconds); * Console.WriteLine(watch2.ElapsedMilliseconds); * }*/ images = null; Console.ReadLine(); using (KifintStream kifintStream = new KifintStream()) { KifintLookup movies; //CatDebug.NativeBlowfish = true; CatDebug.ManagedBlowfishRound = true; movies = KifintArchive.LoadLookup(KifintType.Movie, @"C:\Programs\Games\Frontwing\Labyrinth of Grisaia", vc2); GC.Collect(); watchNative.Restart(); foreach (KifintEntry movie in movies) { //movie.ExtractToFile(kifintStream, "mov.mpg"); movie.ExtractToBytes(kifintStream); } Console.WriteLine(watchNative.ElapsedMilliseconds); //CatDebug.NativeBlowfish = true; CatDebug.ManagedBlowfishRound = false; movies = KifintArchive.LoadLookup(KifintType.Movie, @"C:\Programs\Games\Frontwing\Labyrinth of Grisaia", vc2); GC.Collect(); watchNative.Restart(); foreach (KifintEntry movie in movies) { //movie.ExtractToFile(kifintStream, "mov.mpg"); movie.ExtractToBytes(kifintStream); } Console.WriteLine(watchNative.ElapsedMilliseconds); //CatDebug.NativeBlowfish = false; CatDebug.ManagedBlowfishRound = false; movies = KifintArchive.LoadLookup(KifintType.Movie, @"C:\Programs\Games\Frontwing\Labyrinth of Grisaia", vc2); GC.Collect(); watchManaged.Restart(); foreach (KifintEntry movie in movies) { //movie.ExtractToFile(kifintStream, "mov.mpg"); movie.ExtractToBytes(kifintStream); } Console.WriteLine(watchManaged.ElapsedMilliseconds); /*CatDebug.NativeBlowfish = true; * movies = KifintArchive.LoadLookup(KifintType.Movie, @"C:\Programs\Games\Frontwing\Labyrinth of Grisaia", vc2); * GC.Collect(); * watchNative.Restart(); * foreach (KifintEntry movie in movies) { * using (var fs = File.Create("mov.mpg")) * KifintArchive.ExtractToStream(kifintStream, movie, fs); * } * Console.WriteLine(watchNative.ElapsedMilliseconds); * * CatDebug.NativeBlowfish = false; * movies = KifintArchive.LoadLookup(KifintType.Movie, @"C:\Programs\Games\Frontwing\Labyrinth of Grisaia", vc2); * GC.Collect(); * watchManaged.Restart(); * foreach (KifintEntry movie in movies) { * using (var fs = File.Create("mov.mpg")) * KifintArchive.ExtractToStream(kifintStream, movie, fs); * } * Console.WriteLine(watchManaged.ElapsedMilliseconds); * GC.Collect();*/ } GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); Console.WriteLine("FINISHED"); Console.ReadLine(); Random random = new Random(); const int rngLength = 1024 * 64; byte[] rngBytesOrigin = new byte[rngLength]; byte[] rngBytes = new byte[rngLength]; byte[] rngUints = new byte[rngLength]; byte[] rngBytesAdd = new byte[rngLength]; random.NextBytes(rngBytesOrigin); random.NextBytes(rngBytesAdd); Buffer.BlockCopy(rngBytesOrigin, 0, rngBytes, 0, rngLength); Buffer.BlockCopy(rngBytesOrigin, 0, rngUints, 0, rngLength); unchecked { unsafe { fixed(byte *pRngBytesAdd = rngBytesAdd) fixed(byte *pRngBytes = rngUints) { uint *pRngUintsAdd = (uint *)pRngBytesAdd; uint *pRngUints = (uint *)pRngBytes; for (int i = 0; i < rngLength / 4; i++) { pRngUints[i] += pRngUintsAdd[i]; } /*for (int i = 0; i < rngLength; i++) { * pRngBytes[i] += pRngBytesAdd[i]; * }*/ } for (int i = 0; i < rngLength; i++) { rngBytes[i] += rngBytesAdd[i]; } } } /*for (int i = 0; i < rngLength; i++) { * if (rngBytes[i] != rngUints[i]) * Console.WriteLine(i); * }*/ bool isEqual = rngBytes.SequenceEqual(rngUints); /*string vcode22 = VCodes.FindVCode2(@"C:\Programs\Games\Frontwing\Labyrinth of Grisaia - Copy (2)\Grisaia2.bin.bak"); * Kifint.DecryptLookup(KifintType.Image, @"C:\Programs\Games\Frontwing\Labyrinth of Grisaia", vcode22); * Kifint.DecryptLookup(KifintType.Image, @"C:\Programs\Games\Frontwing\Labyrinth of Grisaia", vcode22, csBlowfish: true); * var ll = Kifint.DecryptLookup(KifintType.Image, @"C:\Programs\Games\Frontwing\Labyrinth of Grisaia", vcode22); * var lll = Kifint.DecryptLookup(KifintType.Image, @"C:\Programs\Games\Frontwing\Labyrinth of Grisaia", vcode22, csBlowfish: true); * for (int i = 0; i < ll.Count; i++) { * * }*/ Directory.CreateDirectory("img2"); Directory.CreateDirectory("imgv"); Directory.CreateDirectory("imgnv"); HgxImage.ExtractImages("sys_flipped.hg3", "imgv", HgxOptions.Flip).SaveJsonToDirectory("imgv"); HgxImage.ExtractImages("sys_flipped.hg3", "imgnv", HgxOptions.None).SaveJsonToDirectory("imgnv"); //HgxImage.ExtractImages("img_flipped.hg3", "img2", HgxOptions.None).SaveJsonToDirectory("img2"); //HgxImage.ExtractImages("img_notflipped.hg3", "img2", HgxOptions.None).SaveJsonToDirectory("img2"); Console.ReadLine(); Directory.CreateDirectory("img"); IEnumerable <string> hg3Files = Directory.GetFiles(@"C:\Programs\Games\Frontwing\Labyrinth of Grisaia - Copy (2)\image", "*.hg3"); //hg3Files = hg3Files.Take(100); int take = 100; try { foreach (string hg3File in hg3Files.Take(10)) { HgxImage.ExtractImages(hg3File, "img", HgxOptions.None); } /*Stopwatch hg3Watch = HgxImage.ProcessImageWatch; hg3Watch.Reset(); * for (int i = 0; i < 10; i++) { * foreach (string hg3File in hg3Files.Take(take)) * HgxImage.ExtractImages(hg3File, "img", false); * Console.WriteLine(hg3Watch.ElapsedMilliseconds); hg3Watch.Reset(); * }*/ } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(ex); } Console.ReadLine(); Environment.Exit(0); HgxImage.ExtractImages(@"C:\Programs\Tools\CatSystem2_v401\tool\img_test2.hg3", ".", HgxOptions.None); //StringsScraper.BinaryScrape("cs2_open.exe", "strings/null/cs2", 0x5B6458, 0x5B7558); Console.ReadLine(); //StringsScraper.BinarySearch("cs2_open.exe", "page"); //foreach (string file in Directory.GetFiles(@"C:\Programs\Tools\CatSystem2_v401\system\scene", "*.cst")) { foreach (string file in Directory.GetFiles(@"C:\Programs\Games\Frontwing\Labyrinth of Grisaia - Copy (2)\scene", "*.cst")) { CstScene scene2 = CstScene.Extract(file); foreach (ISceneLine line in scene2) { if (line.Type == SceneLineType.Page) { Console.WriteLine(file); } } } Console.Write("FINISHED"); Console.ReadLine(); /*using (FileStream fp = File.OpenRead("mc.exe")) { * BinaryReader reader = new BinaryReader(fp); * while (!fp.IsEndOfStream()) { * ushort type = reader.ReadUInt16(); * if (type == 0x0301) { * Console.WriteLine($"{fp.Position:X8}"); * } * } * }*/ //byte[] data = File.ReadAllBytes("mc.exe"); //for (int i = 0; i <) //StringsScraper.BinarySearch("mc.exe", "page"); CstScene scene = CstScene.Extract(@"C:\Programs\Games\Frontwing\Labyrinth of Grisaia - Copy (2)\scene\ama_006.cst"); foreach (ISceneLine line in scene) { if (line.Type == SceneLineType.Command) { var command = (ISceneCommand)line; } } //var h = LoadLibrary(@"C:\Users\Onii-chan\AppData\Local\Temp\TriggersToolsGames\CatSystem2\asmodean.dll"); //Embedded var hg3 = HgxImage.ExtractImages(@"C:\Programs\Tools\CatSystem2_v401\system\image\sys_confirm.hg3", ".", HgxOptions.None); grisaiaInstallDir = @"C:\Programs\Games\Frontwing\Labyrinth of Grisaia - Copy (2)"; grisaiaExe = Path.Combine(grisaiaInstallDir, "Grisaia2.bin.bak"); grisaiaConfigInt = Path.Combine(grisaiaInstallDir, "config.int"); grisaiaVCodes = VCodes.Load(grisaiaExe); //KifintLookup lookup = Kifint.DecryptLookup(KifintType.Config, grisaiaInstallDir, grisaiaVCodes.VCode2); //lookup["startup.xml"].ExtractToFile("startup2.xml"); /*File.Copy("startup2.xml", "startup.xml", true); * var patcher = new ResolveXmlCommentErrorsPatch("startup.xml"); * var patcher2 = new CS2XmlDebugPatch("startup.xml", true, "TriggersTools.CatSystem2.Patcher.Resources.CS2"); * patcher.Patch(); * patcher2.Patch(); * Console.WriteLine("FINISHED"); * Console.ReadLine(); * for (int i = 0; i < 10; i++) { * Stopwatch swatch = Stopwatch.StartNew(); * //var vcodes = VCodes.Load(@"C:\Programs\Games\Frontwing\Labyrinth of Grisaia - Copy (2)\Grisaia2.bin"); * string exeFile = CatUtils.FindCatExecutable(@"C:\Programs\Games\Frontwing\Labyrinth of Grisaia - Copy (2)"); * Console.WriteLine(swatch.ElapsedMilliseconds); * Console.WriteLine(exeFile ?? string.Empty); * } * Console.ReadLine();*/ //vcodes.Save(@"C:\Programs\Games\Frontwing\Labyrinth of Grisaia - Copy (2)\Grisaia2.bin"); //File.WriteAllText("vcodes.json", JsonConvert.SerializeObject(vcodes, Formatting.Indented)); //vcodes.KeyCode = vcodes.KeyCode; //vcodes.KeyCode = new byte[4] { 0x1, 0x1, 0x1, 0x1 }; Console.Beep(); Console.ReadLine(); using (var ms = new MemoryStream()) { BinaryReader reader = new BinaryReader(ms); BinaryWriter writer = new BinaryWriter(ms); writer.Write(1); ms.Position = 0; byte[] buffer = reader.ReadBytes(4); int[] ints = new int[1]; Buffer.BlockCopy(buffer, 0, ints, 0, 4); Console.WriteLine(ints[0]); } //ushort us = 1; byte[] bs = { 1, 0 }; byte[] decompressedA; //byte[] decompressedB; //344AC //@"C:\Programs\Tools\CatSystem2_v401\psds\BA01_1.hg2" Directory.CreateDirectory("hg3"); HgxImage.Extract(@"C:\Programs\Tools\CatSystem2_v401\tool\img_test2.hg3"); HgxImage.Extract(@"C:\Programs\Tools\CatSystem2_v401\psds\sys_confirm.hg2"); var hg3Img = HgxImage.ExtractImages(@"C:\Programs\Tools\CatSystem2_v401\psds\BA01_1.hg3", "hg3", HgxOptions.None); hg3Img.SaveJsonToDirectory("hg3"); Console.OutputEncoding = CatUtils.ShiftJIS; /*ZTPatcher zt2 = new ZTPatcher { * InstallDir = ".", * }; * zt2.Patch(); * WGCPatcher wgc2 = new WGCPatcher { * InstallDir = ".", * }; * wgc2.Patch();*/ Console.ReadLine(); string[] lines = File.ReadAllLines("strings/wgc/binary.txt"); //StringsScraper.BinaryValidate(lines); Console.ReadLine(); lines = File.ReadAllLines("strings/zt/binary.txt"); //StringsScraper.BinaryValidate(lines); Console.ReadLine(); //StringsScraper.BinarySearch("WGC.exe", "img_jpg");//256C28, 256C8C Console.ReadLine(); /*BinaryRange[] rangess = { * new BinaryRange(0x211DD4, 0x211DEC), * new BinaryRange(0x211E54, 0x211FA8), * new BinaryRange(0x212078, 0x212138), * new BinaryRange(0x212154, 0x2121A0), * new BinaryRange(0x2122F0, 0x212204), * new BinaryRange(0x212304, 0x2123C4), * new BinaryRange(0x2123D8, 0x2123F4), * new BinaryRange(0x21C300, 0x21C31C), * * new BinaryRange(0x25BAF8, 0x25BD20), * new BinaryRange(0x25BD60, 0x25BD90), * new BinaryRange(0x25BDD0, 0x25BDF4), * new BinaryRange(0x25BE90, 0x25BFC0), * new BinaryRange(0x25C00C, 0x25C118), * }; * StringsScraper.BinaryScrape("WGC.exe", "strings/wgc", rangess); //2120A0 * * Console.ReadLine(); * StringsScraper.BinaryScrape("ztpack.exe", "strings/zt", 0x344AC, 0x345F8);*/ Console.ReadLine(); /*var resInfo = new ResourceInfo("cs2_open_en.exe"); * File.Copy("cs2_open_en.exe", "cs2_open_en2.exe", true); * Thread.Sleep(400); * resInfo.Save("cs2_open_en2.exe"); * var menuRes = new MenuResource("cs2_open.exe", 105, 1041); * var dialogRes = new DialogResource("cs2_open.exe", 201, 1041); * var menu = (MenuTemplate) menuRes.Template; * var dialog = (DialogExTemplate) dialogRes.Template; * dialog.Caption = "Hello World!"; * dialog.Controls[0].CaptionId = "OK WORLD!"; * dialog.Controls[1].HelpId = 25; * menu.MenuItems[0].MenuString = "Hello World!"; * menu.MenuItems.Add(new MenuTemplateItemPopup { * MenuString = "Popup", * MenuItems = { * new MenuTemplateItemCommand { * IsSeparator = true, * }, * new MenuTemplateItemCommand { * MenuString = "Do Nothing", * MenuId = 2555, * }, * }, * }); * //IntPtr ptr = Marshal.StringToHGlobalUni(null); * //File.Copy("cs2_open.exe", "cs2_open2.exe", true); * Thread.Sleep(400); * Resource.SaveTo("cs2_open_en2.exe", new Resource[] { menuRes, dialogRes });*/ /*CS2Patcher cs2Patcher = new CS2Patcher { * InstallDir = ".", * }; * Console.WriteLine(cs2Patcher.Patch()); * Console.WriteLine("FINISHED"); * WGCPatcher wgc = new WGCPatcher { * InstallDir = ".", * }; * Console.WriteLine(wgc.Patch()); * Console.WriteLine("FINISHED"); * Console.ReadLine();*/ //ResourceInfo reInfo = new ResourceInfo(); //reInfo.Load(@"C:\Programs\Games\Frontwing\Labyrinth of Grisaia - Copy (2)\Grisaia2.bin.bak"); //Console.Write(""); /*PsDotNet * /*using (var s = File.OpenRead(@"C:\Programs\Tools\CatSystem2_v401\psds\CS2用_キャラクター立ち絵2.psd")) { * BinaryReverseReader2 reader = new BinaryReverseReader2(s); * while (!s.IsEndOfStream()) { * int sh = reader.ReadInt32(); * if (sh == 930) * Console.WriteLine($"{s.Position:X8}"); * } * }*/ /* Console.OutputEncoding = CatUtils.ShiftJIS; * Document psd = new Document(@"C:\Programs\Tools\CatSystem2_v401\psds\CS2用_キャラクター立ち絵.psd"); * psd.SaveXml("psd.xml", false); * foreach (var layer in psd.Layers) { * Console.WriteLine(layer.Name); * }*/ //Document psd2 = new Document(@"C:\Programs\Tools\CatSystem2_v401\tool\img_test.psd"); //psd2.SaveXml("psd.xml", false); //Document psd2 = new Document(@"C:\Programs\Tools\CatSystem2_v401\tool\img_test.psd"); //StringsScraper.BinarySearch("WGC.exe", "選択されたファイルをリストから"); //StringsScraper.BinaryScrape("WGC.exe", "strings/wgc", 0x211000, 0x212F00); //StringsScraper.BinaryScrape("WGC.exe", "strings/wgc", 0x256000, 0x1000000); //StringsScraper.BinarySearch("WGC.exe", "mode");//21220C //212298 //string vcode = VCodes.FindVCode(@"C:\Programs\Games\Frontwing\Labyrinth of Grisaia - Copy (2)\Grisaia2.bin.bak"); string vcode2 = VCodes.FindVCode2(@"C:\Programs\Games\Frontwing\Labyrinth of Grisaia - Copy (2)\Grisaia2.bin.bak"); var hg = HgxImage.ExtractImages(@"C:\Programs\Tools\CatSystem2_v401\tool\img_test2.hg3", ".", HgxOptions.None); hg = HgxImage.Extract(@"C:\Programs\Tools\CatSystem2_v401\system\image\sys_confirm.hg3"); //int iiii = int.Parse("FFFFFFFF", NumberStyles.HexNumber); hg = HgxImage.Extract(@"C:\Programs\Games\Frontwing\Labyrinth of Grisaia - Copy (2)\image\Tmic1cs_6.hg3"); byte[] zt = File.ReadAllBytes("zt.zt"); /*using (var ms = new MemoryStream()) { * BinaryWriter writer = new BinaryWriter(ms); * writer.Write(zt.Take(0x110).ToArray()); * writer.Write(zt.Skip(0x110).Take(0x194 - 0x110).ToArray()); * ms.Position = 0; * writer.Write(405); * writer.Write(0); * writer.Write() * ms.Position = 404; * writer.Write((byte) 0); * writer.Write(zt.Skip(404).ToArray()); * //ms.Position = 0x110; * //writer.Write(123233); * zt = ms.ToArray(); * }*/ //File.WriteAllBytes("zt2.zt", zt); var ztpackage = ZtPackage.ExtractFiles("zt.zt", "ztout"); Environment.Exit(0); /*using (FileStream fs = File.Create("out.zt")) { * long offset = 0x100000194; * BinaryWriter writer = new BinaryWriter(fs); * writer.Write(zt.Take(0x194).ToArray()); * fs.Position = offset; * writer.Write(zt.Skip(0x194).ToArray()); * }*/ //StringsScraper.BinaryValidate(File.ReadAllLines("strings/cs2/binary_5.txt")); /*CS2Patcher cs2 = new CS2Patcher { * InstallDir = ".", * }; * //Console.WriteLine(cs2.Patch("cs2_open.exe", "cs2_open_en.exe")); * Console.WriteLine(cs2.Patch()); * Console.WriteLine("FINISHED"); * Console.ReadLine();*/ /*using (StreamWriter writer = File.CreateText("ranges_out.txt")) { * List<int> starts = new List<int>(); * List<int> ends = new List<int>(); * Regex regex = new Regex(@"\t\t// 0x(?'start'[A-Fa-f0-9]+), 0x(?'end'[A-Fa-f0-9]+)"); * foreach (string line in File.ReadAllLines("ranges.txt")) { * Match match = regex.Match(line); * if (match.Success) { * starts.Add(int.Parse(match.Groups["start"].Value, NumberStyles.HexNumber)); * ends.Add(int.Parse(match.Groups["end"].Value, NumberStyles.HexNumber)); * if (starts.Last() >= ends.Last()) * throw new Exception(); * } * } * for (int i = 0; i < starts.Count; i++) { * int start1 = starts[i]; * int end1 = ends[i]; * if (start1 >= end1) * throw new Exception(); * for (int j = 0; j < starts.Count; j++) { * if (i == j) * continue; * int start2 = starts[j]; * int end2 = ends[j]; * if (start1 >= start2 && start1 <= end2) * throw new Exception(); * if (end1 >= start2 && end1 <= end2) * throw new Exception(); * } * } * starts.Sort(); * ends.Sort(); * for (int i = 0; i < starts.Count; i++) { * * int start = starts[i]; * int end = ends[i]; * writer.WriteLine($"new BinaryRange(0x{start:X6}, 0x{end:X6}),"); * } * writer.Flush(); * } * Console.WriteLine("FINISHED"); * Console.ReadLine(); * CS2Patcher cs2 = new CS2Patcher { * Executable = "cs2_open.exe", * }; * Console.WriteLine(cs2.Patch()); * Console.WriteLine("FINISHED"); * Console.ReadLine();*/ /*var ranges = new BinaryRange[] { * new BinaryRange(0x58CFA0, 0x58CFC0), * new BinaryRange(0x590960, 0x590B7C), * new BinaryRange(0x590C14, 0x590C38), * new BinaryRange(0x590CA0, 0x590D9C), * new BinaryRange(0x590E14, 0x591120), * new BinaryRange(0x591160, 0x5911BC), * new BinaryRange(0x5911FC, 0x59122C), * new BinaryRange(0x59126C, 0x59144C), * new BinaryRange(0x5914F4, 0x59158C), * new BinaryRange(0x5915E8, 0x59164C), * new BinaryRange(0x5917B0, 0x5917E8), * new BinaryRange(0x591864, 0x591890), * new BinaryRange(0x591944, 0x5919CC), * new BinaryRange(0x5919F0, 0x591AE0), * new BinaryRange(0x591B04, 0x591BA0), * new BinaryRange(0x591BD4, 0x591C64), * new BinaryRange(0x591C88, 0x591D18), * new BinaryRange(0x591D3C, 0x591DD0), * new BinaryRange(0x591FD8, 0x592000), * new BinaryRange(0x5920E8, 0x59211C), * new BinaryRange(0x59259C, 0x59263C), * new BinaryRange(0x5962C4, 0x596334), * new BinaryRange(0x596368, 0x596388), * new BinaryRange(0x5963B8, 0x59645C), * new BinaryRange(0x596638, 0x5967A4), * new BinaryRange(0x596970, 0x596C44), * new BinaryRange(0x596F9C, 0x597334), * new BinaryRange(0x597380, 0x59754C), * new BinaryRange(0x59797C, 0x597AF8), * new BinaryRange(0x597C20, 0x597D84), * new BinaryRange(0x597DB0, 0x597E10), * new BinaryRange(0x597E78, 0x597FB4), * new BinaryRange(0x597FC8, 0x5980EC), * new BinaryRange(0x598130, 0x5981C0), * new BinaryRange(0x598270, 0x598328), * new BinaryRange(0x598370, 0x5988B4), * new BinaryRange(0x598988, 0x598B14), * new BinaryRange(0x598BA8, 0x598C04), * new BinaryRange(0x598DEC, 0x598F20), * new BinaryRange(0x598F34, 0x5990CC), * new BinaryRange(0x599204, 0x599220), * new BinaryRange(0x5992AC, 0x599384), * new BinaryRange(0x5993E0, 0x599470), * new BinaryRange(0x599500, 0x5997C0), * new BinaryRange(0x5AFC20, 0x5AFC48), * new BinaryRange(0x5AFD00, 0x5AFE24), * new BinaryRange(0x5B02EC, 0x5B03D0), * new BinaryRange(0x5B0814, 0x5B0880), * new BinaryRange(0x5B0A48, 0x5B0AAC), * new BinaryRange(0x5B25E8, 0x5B27D0), * new BinaryRange(0x5B2844, 0x5B28DC), * new BinaryRange(0x5B2BC8, 0x5B2BD8), * new BinaryRange(0x5B3480, 0x5B34B8), * new BinaryRange(0x5B3578, 0x5B35B4), * new BinaryRange(0x5B4324, 0x5B4420), * new BinaryRange(0x5B4518, 0x5B4534), * new BinaryRange(0x5B464C, 0x5B4850), * new BinaryRange(0x5B4FB4, 0x5B50D4), * };*/ /*Console.OutputEncoding = CatUtils.ShiftJIS; * StringsScraper.ResourceScrape("cs2_open.exe", "strings/cs2"); * Console.WriteLine("FINISHED"); * Console.ReadLine();*/ //StringsScraper.BinaryScrape("cs2_open.exe", "strings/cs2", ranges); Console.WriteLine("FINISHED"); Console.ReadLine(); //StringsScraper.BinarySearch("cs2_open.exe", "--全て表示--");//596368 //StringsScraper.BinaryScrape("cs2_open.exe", "strings/cs2", 0x596368, 0x596388); // 0x5990E0, 0x5990E4 (?) // 0x599500, 0x5997C0 // 0x5993E0, 0x599470 // 0x5992AC, 0x599384 // 0x599204, 0x599220 // 0x598F34, 0x5990CC // 0x598DEC, 0x598F20 // 0x598BA8, 0x598C04 // 0x598988, 0x598B14 // 0x598370, 0x5988B4 // 0x598270, 0x598328 // 0x598130, 0x5981C0 // 0x597FC8, 0x5980EC // 0x597E78, 0x597FB4 // 0x597DB0, 0x597E10 // 0x597C20, 0x597D84 // 0x59797C, 0x597AF8 // 0x597380, 0x59754C // 0x596F9C, 0x597334 // 0x596970, 0x596C44 // 0x596638, 0x5967A4 // 0x5963B8, 0x59645C // 0x596368, 0x596388 // 0x5962C4, 0x596334 // 0x59259C, 0x59263C // 0x5920E8, 0x59211C // 0x591FD8, 0x592000 // 0x591D3C, 0x591DD0 // 0x591C88, 0x591D18 // 0x591BD4, 0x591C64 // 0x591B04, 0x591BA0 // 0x5919F0, 0x591AE0 // 0x591944, 0x5919CC // 0x591864, 0x591890 // 0x5917B0, 0x5917E8 // 0x5915E8, 0x59164C // 0x5914F4, 0x59158C // 0x59126C, 0x59144C // 0x5911FC, 0x59122C // 0x591160, 0x5911BC // 0x590E14, 0x591120 // 0x590CA0, 0x590D9C // 0x590C14, 0x590C38 // 0x590960, 0x590B7C // 0x58CFA0, 0x58CFC0 // 0x5B4FB4, 0x5B50D4 // 0x5B464C, 0x5B4850 // 0x5B4518, 0x5B4534 // 0x5B4324, 0x5B4420 // 0x5B3578, 0x5B35B4 // 0x5B3480, 0x5B34B8 // 0x5B2BC8, 0x5B2BD8 // 0x5B2844, 0x5B28DC // 0x5B25E8, 0x5B27D0 // 0x5B0A48, 0x5B0AAC // 0x5B0814, 0x5B0880 // 0x5B02EC, 0x5B03D0 // 0x5AFD00, 0x5AFE24 // 0x5AFC20, 0x5AFC48 // 0x, 0x // 0x, 0x // 0x, 0x // 0x, 0x // 0x, 0x // 0x, 0x // 0x, 0x // 0x, 0x // 0x, 0x // 0x, 0x // 0x, 0x // 0x, 0x // 0x, 0x // 0x, 0x Console.WriteLine("FINISHED"); Console.ReadLine(); /*StringsScraper.BinaryScrape("mc.exe", "strings/mc", 0x1AEE8, 0x1B1F4); * Console.Read(); * Environment.Exit(0);*/ //StringsScraper.BinarySearch("fes.exe", "画面スクリプト(fes)コンバータ fes.exe\n"); //StringsScraper.BinaryScrape("fes.exe", "strings/fes", 0x3D828, 0x3DC68); //Console.Beep(); //Console.ReadLine(); /*ACPatcher ac = new ACPatcher { * InstallDir = ".", * }; * Console.WriteLine(ac.Patch()); * //Console.ReadLine(); * //Console.Clear(); * MCPatcher mc = new MCPatcher { * InstallDir = ".", * }; * Console.WriteLine(mc.Patch()); * //Console.ReadLine(); * //Console.Clear(); * FESPatcher fes = new FESPatcher { * InstallDir = ".", * }; * Console.WriteLine(fes.Patch());*/ //WGCPatcher wgc = new WGCPatcher { // InstallDir = ".", //}; //Console.WriteLine(wgc.Patch()); Console.ReadLine(); }