1
0
mirror of https://github.com/soarqin/DSP_Mods.git synced 2025-12-09 13:33:33 +08:00

WIP: CompressSave 1.2.0

This commit is contained in:
2022-11-20 16:36:02 +08:00
parent f4457c5fd2
commit aec98cda34
33 changed files with 714 additions and 334 deletions

View File

@@ -26,16 +26,24 @@ class PatchUILoadGame
if (code.opcode == OpCodes.Ldstr && code.OperandIs("#,##0"))
{
var iffalse = generator.DefineLabel();
var ifzstd = generator.DefineLabel();
var callLabel = generator.DefineLabel();
code.WithLabels(iffalse)
.operand = "(N)#,##0";
codes[i + 1].WithLabels(callLabel);
var IL = new List<CodeInstruction> {
new CodeInstruction(OpCodes.Ldloc_0),
new CodeInstruction(OpCodes.Ldfld, AccessTools.Field(typeof(CompressionGameSaveHeader),"IsCompressed")),
new CodeInstruction(OpCodes.Brfalse_S,iffalse),
new CodeInstruction(OpCodes.Ldfld, AccessTools.Field(typeof(CompressionGameSaveHeader),"CompressionType")),
new CodeInstruction(OpCodes.Ldc_I4_S, 0),
new CodeInstruction(OpCodes.Beq_S, iffalse),
new CodeInstruction(OpCodes.Ldloc_0),
new CodeInstruction(OpCodes.Ldfld, AccessTools.Field(typeof(CompressionGameSaveHeader),"CompressionType")),
new CodeInstruction(OpCodes.Ldc_I4_S, 2),
new CodeInstruction(OpCodes.Beq_S, ifzstd),
new CodeInstruction(OpCodes.Ldstr,"(LZ4)#,##0"),
new CodeInstruction(OpCodes.Br_S,callLabel),
new CodeInstruction(OpCodes.Ldstr,"(ZSTD)#,##0").WithLabels(ifzstd),
new CodeInstruction(OpCodes.Br_S,callLabel),
};
codes.InsertRange(i, IL);
break;
@@ -48,7 +56,7 @@ class PatchUILoadGame
[HarmonyPatch(typeof(UILoadGameWindow), "OnSelectedChange"), HarmonyPostfix]
static void OnSelectedChange(UILoadGameWindow __instance, UIButton ___loadButton, Text ___prop3Text)
{
bool compressedSave = (___prop3Text != null &&___prop3Text.text.Contains("LZ4")) || (___loadButton.button.interactable == false && SaveUtil.IsCompressedSave(__instance.selected?.saveName));
bool compressedSave = (___prop3Text != null && (___prop3Text.text.Contains("(LZ4)") || ___prop3Text.text.Contains("(ZSTD)"))) || (___loadButton.button.interactable == false && SaveUtil.SaveGetCompressType(__instance.selected?.saveName) != CompressionType.None);
if (decompressButton)
decompressButton.button.interactable = compressedSave;
}