// Last updated for Softimer version 1.0rc11 state ("MirrorsEdge", "Steam / GOG") //Taken from Toyro's Chapter Autosplitter { float IGT : 0x01B73F1C, 0xCC, 0x1CC, 0x698; string50 level : 0x01BF8B20, 0x3CC, 0x0; //TdMainMenu > tutorial_p > Edge_p string50 chkpt : 0x01C55EA8, 0x74, 0x0, 0x3c, 0x0; // ?? > start > Edge_Start int progAny : 0x01BF8B20, 0x2C8, 0xDC, 0x6AC; int prog69 : 0x01C553D0, 0xCC, 0x70, 0x6B0; } state ("MirrorsEdge", "Origin") { float IGT : 0x01C6E50C, 0xCC, 0x1CC, 0x698; string50 level : 0x01C11BE0, 0x330, 0x0; string50 chkpt : 0x01C6EFE0, 0x134, 0xBC, 0x0, 0x3C, 0x0; int progAny : 0x01B7C39C, 0xCC, 0x70, 0x6AC; int prog69 : 0x01B7C39C, 0xCC, 0x1D4, 0x70, 0x6B0; } state ("MirrorsEdge", "Reloaded") { float IGT : 0x01C6E50C, 0xCC, 0x1CC, 0x698; string50 level : 0x01C6EFE0, 0x170, 0x1DC, 0x1E8, 0x3C, 0x528, 0x3CC, 0x0; string50 chkpt : 0x01C6EFE0, 0x134, 0xBC, 0x0, 0x3C, 0x0; int progAny : 0x01C14C14, 0x74, 0x338, 0x570; int prog69 : 0x01C6EFE0, 0x3C, 0x58, 0x70, 0x0, 0x338, 0x5E0; } state ("MirrorsEdge", "Origin DLC") // this version sucks and i can't add support for it. pls contribute { float IGT : 0x01BB166C, 0x0, 0x18, 0x48, 0x28, 0x114; string50 level : 0x01C18C94, 0x330, 0x0; string50 chkpt : 0x01C76108, 0x74, 0x0, 0x3C, 0x0; } init { switch (modules.First().ModuleMemorySize) { case 32976896: case 32632832: version = "Steam / GOG"; break; case 42889216: version = "Origin"; break; case 60298504: case 42876928: version = "Reloaded"; break; case 43794432: version = "Origin DLC"; break; default: //MessageBox.Show("Memory Size: " + modules.First().ModuleMemorySize.ToString(), "Unknown Version Detected!"); version = "Unknown"; break; } } startup { vars.mm = "TdMainMenu"; vars.tut = "tutorial_p"; vars.splitHistory = new List(); vars.levels = new Dictionary(StringComparer.OrdinalIgnoreCase) { {"TdMainMenu", 1}, {"Edge_p", 2}, {"Escape_p", 3}, {"Stormdrain_p", 4}, {"Cranes_p", 5}, {"subway_p", 6}, {"mall_p", 7}, {"factory_p", 8}, {"Boat_p", 9}, {"Convoy_p", 10}, {"Scraper_p", 11} }; vars.end = "Scraper_p"; settings.Add("69", false, "69 Stars autosplitter, splits on final checkpoint"); settings.Add("sd", true, "Optional Split at Stormdrains Exit Button"); } split { if (current.chkpt == "End_game" && current.progAny == 987654321 && old.progAny != current.progAny) return true; if (settings["sd"] && current.level == "Stormdrain_p" && current.chkpt == "bottons" && old.chkpt != current.chkpt) return true; if (settings["69"] && current.prog69 == old.prog69 + 1 && old.prog69 != null && !vars.splitHistory.Contains(current.prog69)) { vars.splitHistory.Add(current.prog69); print("splitHistory: " + string.Join(", ", vars.splitHistory)); return true; } if (current.level != vars.mm || old.level != vars.mm) { return (vars.levels.ContainsKey(current.level) && vars.levels.ContainsKey(old.level) && vars.levels[current.level] == vars.levels[old.level] + 1); } } start { if (current.level == "tutorial_p" && current.chkpt == "start" && current.IGT > 0) return true; if (settings["69"] && current.level == "tt_TutorialA01_p" && old.IGT == 0 && current.IGT > 0) return true; } reset { if (current.level == "tutorial_p" && current.chkpt == null && current.IGT == 0) return true; //if (settings["69"] && current.level == "tt_TutorialA01_p" && current.prog69 == 0 && old.prog69 != current.prog69) return true; } onReset { if (settings["69"]) { vars.splitHistory.Clear(); print("splitHistory cleared"); } } gameTime { if (current.IGT > 0 && current.IGT != old.IGT) { timer.SetGameTime(TimeSpan.FromSeconds(current.IGT)); timer.IsGameTimePaused = true; } }