Skip to content

Commit

Permalink
Added support for Chain Loader Mod
Browse files Browse the repository at this point in the history
  • Loading branch information
VelouriasMoon committed Feb 13, 2023
1 parent a3d6568 commit cef4c74
Show file tree
Hide file tree
Showing 6 changed files with 107 additions and 33 deletions.
44 changes: 18 additions & 26 deletions Ishtar/Form1.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
using QueenIO.Structs;
using Ishtar.IO;
using System.Threading;
using QueenIO.Mods;

namespace Ishtar
{
Expand All @@ -26,16 +27,16 @@ public Form1()
InitializeComponent();
if (File.Exists("Settings.json"))
{
Settings.Read("Settings.json");
TB_ModsPath.Text = settings.Mods_Path;
Global.Settings.Read("Settings.json");
TB_ModsPath.Text = Global.settings.Mods_Path;
}
else
settings = new Settings();
Global.settings = new Global.Settings();
#if DEBUG
button1.Visible = true;
#endif
}
static Settings settings;

private volatile int threads;

private void MakeTables(object sender, EventArgs e)
Expand Down Expand Up @@ -104,6 +105,14 @@ private void MakeTables(object sender, EventArgs e)
string json = JsonConvert.SerializeObject(data);
File.WriteAllText($"Output\\{Path.GetFileNameWithoutExtension(file)}.json", json);
}
else if (file.Contains("DT_SpawnerList"))
{
Relic relic = Blood.Open(file);
ModControlFrameworkListData data = new ModControlFrameworkListData();
data.Read(relic.GetDataTable());
string json = JsonConvert.SerializeObject(data);
File.WriteAllText($"Output\\{Path.GetFileNameWithoutExtension(file)}.json", json);
}
else
{
Relic relic = Blood.Open(file);
Expand All @@ -128,30 +137,13 @@ private void B_GetModsPath_Click(object sender, EventArgs e)
if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
{
TB_ModsPath.Text = dialog.FileName;
settings.Mods_Path = dialog.FileName;
Settings.Save();
Global.settings.Mods_Path = dialog.FileName;
Global.Settings.Save();
}
}
}

class Settings
{
public string Mods_Path { get; set; }

public static void Read(string infile)
{
string json = File.ReadAllText(infile);
settings = JsonConvert.DeserializeObject<Settings>(json);
}

public static void Save()
{
string json = JsonConvert.SerializeObject(settings);
if (File.Exists("Settings.json"))
File.Delete("Settings.json");
File.WriteAllText("Settings.json", json);
}
}


private void Merge_Tables_Click(object sender, EventArgs e)
{
Expand All @@ -175,8 +167,8 @@ private void Merge()
string[] MergableFiles = Directory.GetFiles("Tables", "*.json");
Helpers.Log("richTextBox1", $"Found {paks.Length} pak files");
Helpers.Log("richTextBox1", $"Found {MergableFiles.Length} base tables for mergeing");
if (Directory.Exists("Merged"))
Directory.Delete("Merged", true);
//if (Directory.Exists("Merged"))
// Directory.Delete("Merged", true);
if (Directory.Exists("ZZZZZ-MergePatch"))
Directory.Delete("ZZZZZ-MergePatch", true);
Helpers.LogClear("richTextBox1");
Expand Down
22 changes: 19 additions & 3 deletions Ishtar/IO/Helpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Net.WebRequestMethods;

namespace Ishtar.IO
{
internal class Helpers
public class Helpers
{
internal static string[] ListPak(string infile)
public static string[] ListPak(string infile)
{
string[] list;
using (Process process = new Process())
Expand Down Expand Up @@ -40,7 +41,7 @@ internal static string[] ListPak(string infile)
return result.ToArray();
}

internal static void ExtractPak(string infile, string outpath = "Temp")
public static void ExtractPak(string infile, string outpath = "Temp")
{
using (Process process = new Process())
{
Expand Down Expand Up @@ -75,5 +76,20 @@ public static void LogClear(string richTextBox)
else
RTB.Clear();
}

public static string HashFile(byte[] infile)
{
using (var md5 = System.Security.Cryptography.MD5.Create())
{
var hash = md5.ComputeHash(infile);
string s = BitConverter.ToString(hash).Replace("-", "");
return s;
}
}

public static string HashString(string s)
{
return HashFile(Encoding.UTF8.GetBytes(s));
}
}
}
40 changes: 37 additions & 3 deletions Ishtar/IO/Merger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,11 @@
using QueenIO;
using QueenIO.Tables;
using QueenIO.Structs;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using QueenIO.Mods;

namespace Ishtar.IO
{
Expand All @@ -31,6 +29,7 @@ public enum types
Mask,
Visibility,
Common,
Mod,
}
}

Expand All @@ -39,6 +38,7 @@ public enum types

public static void ListMergeablePaks(string[] infiles, string[] Tables)
{
Global.settings.Paks.Clear();
Helpers.Log("richTextBox1", $"Checking Paks for mergeable files...");
Parallel.ForEach(infiles, pak =>
{
Expand All @@ -48,11 +48,13 @@ public static void ListMergeablePaks(string[] infiles, string[] Tables)
bool added = LoggedPaks.TryAdd(Path.GetFileNameWithoutExtension(pak), pak);
if (added)
{
Global.settings.Paks.Add(Helpers.HashFile(File.ReadAllBytes(pak)), Path.GetFileName(pak));
//Helpers.Log("richTextBox1", $"Meragable files found in {Path.GetFileNameWithoutExtension(pak)}");
}
}
});
Helpers.Log("richTextBox1", $"Found {LoggedPaks.Count} paks for merging");
Global.Settings.Save();
}


Expand Down Expand Up @@ -151,6 +153,16 @@ public static void Merge(string[] infiles, string[] Tables, bool PartialMerge =
}
Visibility((InnerPartsVisibilityByOuter)MergeFiles[name].Table, (InnerPartsVisibilityByOuter)MergeFiles[name].VanillaTable, relic, PartialMerge);
}
else if (tbl.Contains("DT_SpawnerList"))
{
if (!MergeFiles.ContainsKey(name))
{
ModControlFrameworkListData data = JsonConvert.DeserializeObject<ModControlFrameworkListData>(File.ReadAllText(tbl));
ModControlFrameworkListData vanilla = JsonConvert.DeserializeObject<ModControlFrameworkListData>(File.ReadAllText(tbl));
MergeFiles.TryAdd(name, new MergeFile() { Path = outpath, relic = relic, Table = data, VanillaTable = vanilla, Type = (MergeFile.types)7 });
}
ModControl((ModControlFrameworkListData)MergeFiles[name].Table, (ModControlFrameworkListData)MergeFiles[name].VanillaTable, relic, PartialMerge);
}
else
{
if (!MergeFiles.ContainsKey(name))
Expand Down Expand Up @@ -202,6 +214,10 @@ private static void Export()
case MergeFile.types.Common:
file.relic.WriteDataTable(((BasicCustomizationListData)file.Table).Make());
break;
case MergeFile.types.Mod:
file.relic.WriteDataTable(((ModControlFrameworkListData)file.Table).Make());
file.Path = $"ZZZZZ-MergePatch\\CodeVein\\Content\\Characters\\Blueprints\\Player\\Core\\ModControlFramework\\{Path.GetFileName(file.Path)}";
break;
default:
return;
}
Expand Down Expand Up @@ -338,5 +354,23 @@ private static void Common(BasicCustomizationListData basicCustomizationListData
}
}
}

private static void ModControl(ModControlFrameworkListData modControlFrameworkListData, ModControlFrameworkListData Vanilla, Relic relic, bool PartialMerge = false)
{
ModControlFrameworkListData modControlFrameworkListData1 = new ModControlFrameworkListData();
modControlFrameworkListData1.Read(relic.GetDataTable());
foreach(var modcontrol in modControlFrameworkListData1.SpawnerList)
{
ModControlFrameworkData mod = modControlFrameworkListData.SpawnerList.FirstOrDefault(x => x.Name == modcontrol.Name);
ModControlFrameworkData mod2 = Vanilla.SpawnerList.FirstOrDefault(x => x.Name == modcontrol.Name);
if (!modControlFrameworkListData.SpawnerList.Contains(mod))
modControlFrameworkListData.SpawnerList.Add(modcontrol);
else if (!PartialMerge && !mod.Equals(modcontrol) && !mod2.Equals(modcontrol))
{
int i = modControlFrameworkListData.SpawnerList.IndexOf(mod);
modControlFrameworkListData.SpawnerList[i] = modcontrol;
}
}
}
}
}
3 changes: 3 additions & 0 deletions Ishtar/Ishtar.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,9 @@
<None Include="Tables\DT_OuterMaskList_Male.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="Tables\DT_SpawnerList.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
Expand Down
30 changes: 29 additions & 1 deletion Ishtar/Program.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
using System;
using Ishtar.Properties;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
Expand All @@ -19,4 +22,29 @@ static void Main()
Application.Run(new Form1());
}
}

public static class Global
{
public static Settings settings;

public class Settings
{
public string Mods_Path { get; set; }
public Dictionary<string, string> Paks { get; set; } = new Dictionary<string, string>();

public static void Read(string infile)
{
string json = File.ReadAllText(infile);
settings = JsonConvert.DeserializeObject<Settings>(json);
}

public static void Save()
{
string json = JsonConvert.SerializeObject(settings);
if (File.Exists("Settings.json"))
File.Delete("Settings.json");
File.WriteAllText("Settings.json", json);
}
}
}
}
1 change: 1 addition & 0 deletions Ishtar/Tables/DT_SpawnerList.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"SpawnerList":[{"Name":"Debug","StructType":"STR_Spawners","Key":{"Name":"Key_2_5889D6384413CE94CB77A8A04D9557F5","StructType":"Key","KeyName":"Backslash"},"Spawner":"/Game/Characters/Blueprints/Player/Core/ModControlFramework/Spawner/BP_Spawner_Debug.BP_Spawner_Debug_C"}]}

0 comments on commit cef4c74

Please sign in to comment.