//assassin's creed syndicate load remover an autosplitter by TpRedNinja w/ DeathHound,AkiloGames, people from the speedrun development tool discord //Support for Ubisoft Connect //Support for Steam //[9188] 157683712 //SHA256: dee8d6e4eee0d749ed0f7dac49421231dad93fb05903b906913890ebcc2fa2ae hash id for ubisoft connect version state("ACS", "Ubisoft Connect") { int Loading: 0x073443F8, 0x388, 0x8, 0xF8, 0xBD8; // Detects if loading, 0 is not loading 1 is for loading int Endscreen: 0x0732CD70, 0x50, 0x3A0, 0x98; // Detects end mission sceen, 1 for end screen 0 for literally everything else int Cutscene: 0x715EBC0; // Detects cutscene value 0 in loading screen 1 no cutscene 2 for cutscene game and dlc is not a pointer just "ACS.exe" +(inserst address here) int Eviemain: 0x070E0BE8, 0x3C8, 0x980, 0x18, 0x38, 0x84, 0x330, 0x230; // Detects if your playing evie in the main game. 1 if false 2 if true. int Jacob: 0x070E0BE8, 0xD50, 0x18, 0x480, 0x38, 0x84, 0x390, 0x20; // Detects if your jacob. 0 if false 2 if true. int Character: 0x07155D78, 0xB20, 0xA0, 0x560, 0x140; // 6 for evie 7 when not in london 8 for jack 9 when not in london. } //[10848] 163323904 //SHA256: a2e6ca1504d172ca87f500d1d6cb1de97a2f6687f7ce77f661dce95e90c54e0e hash id for steam version state("ACS", "Steam") { int Loading:0x07154550, 0x904; // same as og but just in case if first one doesnt work int Endscreen: 0x07325DB0, 0x78, 0x3D0, 0x68; // 1 for endscreen showing 0 for not int Cutscene: 0x7154FE0; // same as ubi connect int Eviemain: 0x070D9A38, 0xD50, 0x2D0, 0x7C0, 0x38, 0x84, 0x108, 0x20; // same as ubi connect //int Eviebackup: 0x070D9A38, 0xD50, 0x300, 0x4A0, 0x38, 0x84, 0x3E0, 0x20; // same as ubi connect int Jacob: 0x07154AA8, 0x58, 0x6C8, 0x898, 0x78, 0x68, 0x30, 0x230; // same as ubi connect int Character: 0x071546C8, 0x18, 0x0, 0x308, 0x158; // same as ubi connect } startup { // to control when the timer starts for the main game settings.Add("base", false, "Main Game"); settings.Add("new_game", false, "New Game", "base"); settings.Add("loaded_save", false, "Loaded Game Save", "base"); settings.Add("levels", false, "Level runs", "base"); //Settings to differeniate between base game and the dlc along with if u want it to split settings.Add("ripper", false, "Jack the Ripper"); settings.Add("ripper_enabled", false, "Enabled", "ripper"); //Settings for Any% and 100% for the dlc settings.Add("Any%_DLC", false, "Any%", "ripper"); settings.Add("100%_DLC", false, "100%", "ripper"); //Settings to splits after missions where you play as jack settings.Add("ripper_1", false, "Jack mission 1", "ripper"); settings.Add("ripper_2", false, "Jack mission 2", "ripper"); settings.Add("ripper_3", false, "Jack mission 3", "ripper"); //Settings tooltips //Settings tooltips for the base game settings.SetToolTip("base", "Click this if you are speedrunning the base game"); settings.SetToolTip("new_game", "Enable this if you are starting a any% or 100% run from a new game with no save attached"); settings.SetToolTip("loaded_save", "Enable this if you are starting a any% or 100% run from a save where the first cutscene has fully played through"); settings.SetToolTip("levels", "Enable this if you are gonna speedrun individual levels"); //Settings tooltips for the DLC settings.SetToolTip("ripper", "Click this if you are speedrunning the dlc"); settings.SetToolTip("ripper_enabled", "Enable this if you want it to autostart the timer for the dlc"); settings.SetToolTip("Any%_DLC", "Enable this if you are doing a any% speedrun & using my any% splits"); settings.SetToolTip("100%_DLC", "Enable this if you are doing a 100% speedrun & using my 100% splits"); settings.SetToolTip("ripper_1", "Enable this if you want to split after the cutscene where jack stabs jacob in the eye"); settings.SetToolTip("ripper_2", "Enable this if you want to split after you finish the mission as jack after killing all liabilities"); settings.SetToolTip("ripper_3", "Enable this if you want to split after you finish the mission as jack after releasing the lunatics at lambeth asylum"); vars.completedsplits = new List(); } init { switch (modules.First().ModuleMemorySize) { //Detects which version of the game is being played default: version = "Ubisoft Connect"; break; case (163323904): version = "Steam"; break; } if (settings["Any%_DLC"]) { vars.Splits = new List { "The Atumn of Terror", "Nellie!", "Lady Oh Manor", "Mr Weaversbrooks", "Satinist", "The Ripper Orgins", "I am not a Monster!" }; } else if(settings["100%_DLC"]) { vars.Splits = new List { "The Autumn of Terror", "Nellie!", "Buck's Row Brothel", "Walk of shame", "Shameful Abuse", "Lady Oh Manor", "Mr. Weaversbrooks", "Satinist", "The Ripper Orgins", "Mitre Square Fight Club", "Saucy Jack", "David Jack-Emmings", "Jack's Lieutentant's 1", "From Hell", "Woody Shinnings", "Lost in the City", "Gracechurch Street Brothel", "Sweryn Klosowski", "Egptian Spoils", "Dear Boss", "John Pizer", "Lost Women", "Ludgate Hill Brothel", "Cock Lane Fight Club", "Opium Spoils", "Robert Donston Stephenson", "Jack's Lieutenant's 2", "I am not a Monster!" }; } //print(modules.First().ModuleMemorySize.ToString()); } update { //to debug shit //print("Completed splits: " + String.Join(",", vars.completedsplits)); //print("completedsplits: " + vars.completedsplits); //print("any%splits: " + vars.Splits); //print("Jack;" + " CurrentCharacter:" + current.Character + " OldCharacter:" + old.Character + " Cutscene:" + current.Cutscene + " Loading:" + current.Loading); } start { //starts when first skippable cutscene plays in dlc if(settings["ripper_enabled"]) { if(current.Cutscene == 2 && current.Character == 8) return true; } //starts when you gain control of jacob from a fresh save if(settings["new_game"]) { if(current.Loading == 0 && old.Loading == 0 && current.Jacob == 2 && current.Eviemain == 2) return true; } //starts when you gain control of jacob from loading a save past the first cutscene if(settings["loaded_save"]) { if(old.Loading == 1 && current.Loading == 0 && current.Jacob == 2 && current.Eviemain == 0 ) return true; } //starts when starting a level if(settings["levels"]) { return old.Cutscene == 0 && (current.Cutscene == 1 || current.Cutscene == 2); } } /*splits when end mission screen disappears note if you want it to split on after the jack missions please select the ripper_# as those will allow it to split after the mission ends as jack*/ split { //splits after end screen appears so when you are able to press "A" button or Spacebar if(current.Endscreen == 1 && old.Endscreen == 0) { vars.completedsplits.Add(vars.Splits[0]); vars.Splits.RemoveAt(0); return true; } //Splits after 1st jack mission-ie when the cutscene playing of jack stabbing jacob in the eye with a knife 😊 if(settings["ripper_1"]) { if(!vars.completedsplits.Contains("Jack 1") && current.Character == 6 && old.Character == 8 && current.Cutscene == 0 && current.Loading == 0) { vars.completedsplits.Add("Jack 1"); return true; } } //splits after 2nd jack mission-ie during the loading screen after you leave the docks as jack for any% if(settings["ripper_2"]) { if(!vars.completedsplits.Contains("Jack 2") && vars.completedsplits.Contains("Satinist") && current.Character == 7 && old.Character == 9 && current.Loading == 1 && old.Loading == 0) { vars.completedsplits.Add("Jack 2"); return true; } } //splits after 3rd jack mission-ie lambeth mission as jack for any% if(settings["ripper_3"]) { if(!vars.completedsplits.Contains("Jack 3") && (vars.completedsplits.Contains("The Ripper Orgins") || vars.completedsplits.Contains("Jack's Lieutentants 2")) && current.Character == 6 && old.Character == 7 && current.Loading == 0 && current.Cutscene == 0) { vars.completedsplits.Add("Jack 3"); return true; } } } isLoading { //pauses during loading screen and unpauses when out of loading screens note black screens do not count as loading return current.Loading == 1; } onReset { vars.completedsplits.Clear(); // Clear vars.Splits vars.Splits.Clear(); // Re-add each split individually to vars.Splits if it's empty & Any% settings is enabled if (vars.Splits.Count == 0 && settings["Any%_DLC"]) { vars.Splits.Add("The Atumn of Terror"); vars.Splits.Add("Nellie!"); vars.Splits.Add("Lady Oh Manor"); vars.Splits.Add("Mr Weaversbrooks"); vars.Splits.Add("Satinist"); vars.Splits.Add("The Ripper Orgins"); vars.Splits.Add("I am not a Monster!"); } // Re-add each split individually to vars.Splits if it's empty & 100% settings is enabled if (vars.Splits.Count == 0 && settings["100%_DLC"]) { vars.Splits.Add("The Autumn of Terror"); vars.Splits.Add("Nellie!"); vars.Splits.Add("Buck's Row Brothel"); vars.Splits.Add("Walk of shame"); vars.Splits.Add("Shameful Abuse"); vars.Splits.Add("Lady Oh Manor"); vars.Splits.Add("Mr. Weaversbrooks"); vars.Splits.Add("Satinist"); vars.Splits.Add("The Ripper Orgins"); vars.Splits.Add("Mitre Square Fight Club"); vars.Splits.Add("Saucy Jack"); vars.Splits.Add("David Jack-Emmings"); vars.Splits.Add("Jack's Lieutentant's 1"); vars.Splits.Add("From Hell"); vars.Splits.Add("Woody Shinnings"); vars.Splits.Add("Lost in the City"); vars.Splits.Add("Gracechurch Street Brothel"); vars.Splits.Add("Sweryn Klosowski"); vars.Splits.Add("Egptian Spoils"); vars.Splits.Add("Dear Boss"); vars.Splits.Add("John Pizer"); vars.Splits.Add("Lost Women"); vars.Splits.Add("Ludgate Hill Brothel"); vars.Splits.Add("Cock Lane Fight Club"); vars.Splits.Add("Opium Spoils"); vars.Splits.Add("Robert Donston Stephenson"); vars.Splits.Add("Jack's Lieutenant's 2"); vars.Splits.Add("I am not a Monster!"); } }