diff --git a/DRLoadless.asl b/DRLoadless.asl index a35dae0..857db2f 100644 --- a/DRLoadless.asl +++ b/DRLoadless.asl @@ -89,10 +89,10 @@ startup // Case 2 settings.Add("case2", false, "Case 2 Splits", "72Hour"); settings.Add("case2.1", false, "Case 2-1", "case2"); - settings.Add("case2Steven", false, "Steven", "case2"); - settings.Add("case2FirstAid", false, "First Aid", "case2"); settings.Add("case2.2", false, "Case 2-2", "case2"); settings.Add("case2.3", false, "Case 2-3", "case2"); + settings.Add("case2Steven", false, "Steven", "case2"); + settings.Add("case2FirstAid", false, "First Aid", "case2"); settings.Add("case2Transitions", false, "Room Transitions", "case2"); settings.Add("case2SR->RT", false, "Security Room->Rooftop", "case2Transitions"); // first time settings.Add("case2RT->WH", false, "Rooftop->Warehouse", "case2Transitions"); // first time @@ -157,7 +157,6 @@ startup { settings.Add("case7Bomb" + i.ToString(), false, "Bomb #" + i.ToString(), "case7"); } - settings.Add("Carlito3", false, "Carlito 3", "case7"); settings.Add("case7.2", false, "Case 7-2", "case7"); settings.Add("case7Transitions", false, "Room Transitions", "case7"); settings.Add("case7SR->RT", false, "Security Room->Rooftop", "case7Transitions"); @@ -259,9 +258,10 @@ startup settings.Add("psychoSean", false, "Sean", "psycho"); settings.Add("psychoPaul", false, "Paul", "psycho"); settings.Add("psychoKent3", false, "Kent Third Encounter", "psycho"); + settings.Add("Carlito3", false, "Carlito 3", "psycho"); settings.Add("survivor", false, "SurvivorSkip", "splits"); - settings.Add("GroupSaved", false, "Split on group saved", "survivor"); + settings.Add("GroupSaved", false, "Split on Group Saved", "survivor"); settings.Add("survivorEscape", false, "Ending B", "survivor"); settings.Add("MRSplits", false, "Mutinies & Requests", "splits"); @@ -272,8 +272,6 @@ startup settings.Add("PPresent", false, "Paul's Present", "MRSplits"); settings.Add("CRequest", false, "Cheryl's Request", "MRSplits"); - - // Max Level settings.Add("maxLevel", false, "Max Level", "splits"); for (int level = 5; level <= 50; level += 5) @@ -296,11 +294,13 @@ startup settings.Add("willametteGenocider", false, "Willamette Genocider", "splits"); settings.Add("wgSurvivors", false, "Survivors death", "willametteGenocider"); + settings.Add("EndingF", false, "Ending F", "willametteGenocider"); // Otis Transceiver Calls - settings.Add("Otis", false, "Otis Transmissions", "splits"); - settings.Add("Otis1", false, "Split on every Otis Transmission picked up", "Otis"); + settings.Add("Transmission", false, "Otis Transmissions", "splits"); + settings.Add("Otis", false, "Split on every Otis Transmission picked up", "Transmission"); + settings.Add("100Bool", false, "100% Overtime Toggle", "splits"); #endregion } @@ -310,20 +310,31 @@ string MD5Hash; using (var md5 = System.Security.Cryptography.MD5.Create()) using (var s = File.Open(modules.First().FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) MD5Hash = md5.ComputeHash(s).Select(x => x.ToString("X2")).Aggregate((a, b) => a + b); + print("Hash is: " + MD5Hash); + vars.NPCPtr = 0x1946660; + vars.PhotoPtr = 0x1CF3128; + switch (MD5Hash) { case "0017200B07F7721FBA8624A028D24F60": version = "JPN"; + vars.NPCPtr = 0x1946678; + vars.PhotoPtr = 0x1CF3170; break; - default: + case "015AEC72A70696A7F8F0AE57FFEE727F": version = "ENG"; break; + + default: + version = "Unknown"; + break; } + print("Version is: " + version); - vars.ResetCounter = 0; + // Pending splits (for PP collector mostly) vars.PendingSplits = 0; @@ -333,6 +344,14 @@ string MD5Hash; // Keep track of hit splits vars.Splits = new HashSet(); + vars.Overtime2 = new List + { + "otQueens", + "otSupplyHideout", + "otTunnel", + "otTank", + }; + // For splitting when hitting a cutscene vars.Cutscenes = new Dictionary { @@ -343,6 +362,7 @@ string MD5Hash; {26, "case4IsabelaStart"}, {31, "case5Zombie"}, {38, "Carlito3"}, + {40, "EndingF"}, {53, "endingA"}, {70, "psychoKent3"}, {71, "psychoCliff"}, @@ -488,26 +508,17 @@ string MD5Hash; // Add Watchers for NPC Statues vars.NPCStates = new MemoryWatcherList(); - - int NPCPtr; - if (version == "ENG") - { - NPCPtr = 0x1946660; - } - else - { - NPCPtr = 0x1946678; - } for (int i = 0; i < 51; ++i) { - var statePtr = new DeepPointer("DeadRising.exe", NPCPtr, 0x58, 0x8 * i, 0x44); + var statePtr = new DeepPointer("DeadRising.exe", vars.NPCPtr, 0x58, 0x8 * i, 0x44); var watcher = new MemoryWatcher(statePtr) { Name = i.ToString() }; + watcher.FailAction = MemoryWatcher.ReadFailAction.SetZeroOrNull; vars.NPCStates.Add(watcher); } - // Add Watchers for Transmissions, Will work for Japanese + // Add Watchers for Transmissions vars.Transmissions = new MemoryWatcherList(); for (int i = 0; i < 11; ++i) @@ -525,7 +536,7 @@ string MD5Hash; for (int i = 0; i < 51; ++i) { - var healthPtr = new DeepPointer("DeadRising.exe", NPCPtr, 0x58, 0x8 * i, 0x18); + var healthPtr = new DeepPointer("DeadRising.exe", vars.NPCPtr, 0x58, 0x8 * i, 0x18); var watcher = new MemoryWatcher(healthPtr) { Name = i.ToString() }; vars.NPCHealth.Add(watcher); @@ -570,16 +581,6 @@ start vars.DeadSurvivors.Clear(); } - int PhotoPtr; - if (version == "ENG") - { - PhotoPtr = 0x1CF3128; - } - else - { - PhotoPtr = 0x1CF3170; - } - // Load the PP Stickers watchers if (settings["ppStickers"] && !vars.PPStickersLoaded) { @@ -588,7 +589,7 @@ start for (int i = 0; i < 100; ++i) { - var ppStickerPtr = new DeepPointer("DeadRising.exe", PhotoPtr, 0x40, 0x6E8 + (0x4 * i)); + var ppStickerPtr = new DeepPointer("DeadRising.exe", vars.PhotoPtr, 0x40, 0x6E8 + (0x4 * i)); var watcher = new MemoryWatcher(ppStickerPtr) { Name = i.ToString() }; vars.PPStickersCount += ppStickerPtr.Deref(game); @@ -629,7 +630,7 @@ split // Splitting when hitting cutscenes if (current.CutsceneId != old.CutsceneId) { - if (vars.Cutscenes.ContainsKey(current.CutsceneId) && !vars.Splits.Contains(vars.Cutscenes[current.CutsceneId])) + if (vars.Cutscenes.ContainsKey(current.CutsceneId) && (vars.Overtime2.Contains(vars.Cutscenes[current.CutsceneId]) && settings["100Bool"] || !vars.Splits.Contains(vars.Cutscenes[current.CutsceneId]))) { vars.Splits.Add(vars.Cutscenes[current.CutsceneId]); return settings[vars.Cutscenes[current.CutsceneId]]; @@ -701,10 +702,6 @@ split { return settings["otBrock"]; } - if (current.CutsceneId == 134 && old.CutsceneId != 134) - { - vars.ResetCounter += 1; - } } // Willamette Genocider Case 1-4 @@ -732,16 +729,7 @@ split if (game != null) { - int NPCPtr; - if (version == "ENG") - { - NPCPtr = 0x1946660; - } - else - { - NPCPtr = 0x1946678; - } - string npcName = new DeepPointer("DeadRising.exe", NPCPtr, 0x58, 0x8 * i, 0x8, 0x8).DerefString(game, 6); + string npcName = new DeepPointer("DeadRising.exe", vars.NPCPtr, 0x58, 0x8 * i, 0x8, 0x8).DerefString(game, 6); if (!string.IsNullOrEmpty(npcName) && !string.IsNullOrEmpty(npcName.Trim()) && npcName.Trim()[0] == 'u') { @@ -797,38 +785,6 @@ split } } - // Survivors - if (settings["survivor"]) - { - bool EmptyParty = true; - vars.NPCStates.UpdateAll(game); - foreach (var watcher in vars.NPCStates) - { - if (watcher.Current == 2) - { - EmptyParty = false; - } - } - - foreach (var watcher in vars.NPCStates) - { - if (settings["GroupSaved"] && watcher.Changed && watcher.Current == 4 && watcher.Old != 11 && EmptyParty) - { - int i = int.Parse(watcher.Name); - int NPCPtr; - if (version == "ENG") - { - NPCPtr = 0x1946660; - } - else - { - NPCPtr = 0x1946678; - } - string npcName = new DeepPointer("DeadRising.exe", NPCPtr, 0x58, 0x8 * i, 0x8, 0x8).DerefString(game, 6); - return vars.Survivors.Contains(npcName); - } - } - } // Mutinies & Requests if (settings["MRSplits"]) { @@ -914,16 +870,40 @@ split } // Otis Transmissions - if (settings["Otis1"]) + if (settings["Otis"] && !current.IsLoading) { vars.Transmissions.UpdateAll(game); + foreach (var watcher in vars.Transmissions) { - if (watcher.Changed && watcher.Current > watcher.Old && !current.IsLoading) + if (watcher.Changed && watcher.Current > watcher.Old) { - vars.Splits.Add("Otis1"); - return settings["Otis1"]; + return settings["Otis"]; } } } -} \ No newline at end of file + + // Survivors (Keep this the bottom most check because of the return false) + if (settings["GroupSaved"] && !current.IsLoading) + { + bool SplitPending = false; + + vars.NPCStates.UpdateAll(game); + + foreach (var watcher in vars.NPCStates) + { + if (watcher.Current == 2) + { + return false; + } + if (watcher.Changed && watcher.Current == 4 && watcher.Old != 11) + { + SplitPending = true; + } + } + return SplitPending; + } +} + + +