123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- // A Plague Tale: Requiem Load Remover & Autosplitter Version 1.4.0 19/03/2023
- // Supports Load Remover IGT
- // Supports full chapter splits for full game & IL's
- // Splits for campaigns can be obtained from
- // Script & Steam Pointers by TheDementedSalad
- // Xbox Pointers by KunoDemetries
- // GoG Pointers by Kanemzi
- state("APlagueTaleRequiem_x64", "Steam 1.0")
- {
- bool Paused : 0x237CD80, 0x70; // 0 when unpaused, 1 when paused
- bool Crafting : 0x285A1D8, 0x638, 0x1B8, 0xE8, 0x30; // 128 cutscene, 160 no cutscene
- byte Cutscene : 0x2367940, 0x288; // 1 in crafting tabs/codex 0 elsewhere
- short isLoading : 0x285A1D8, 0x4F0; // 128 when loading, 256 in game
- float X : 0x237CD78, 0x378, 0xA190; // -8 base address of Paused
- float Y : 0x237CD78, 0x378, 0xA194; // ''
- float Z : 0x237CD78, 0x378, 0xA198; // ''
- string128 Chapter : 0x2366E88, 0x708, 0x2E8, 0x750, 0x0; // Go to the end of chapter 3, type in III - A Burden of Blood, correct address is top one of 2 that will change to IV - Protector's Duty, normal string
- string128 Menu : 0x235348A; // Type in all caps MENU as a string then go into a level, one that changes is correct
- }
- state("APlagueTaleRequiem_x64", "Steam 1.3")
- {
- bool Paused : 0x23932B0, 0x70;
- bool Crafting : 0x2871118, 0x638, 0x1B8, 0xE8, 0x30;
- byte Cutscene : 0x237DD90, 0x288;
- short isLoading : 0x2871118, 0x4F0;
- float X : 0x23932A8, 0x378, 0xA190;
- float Y : 0x23932A8, 0x378, 0xA194;
- float Z : 0x23932A8, 0x378, 0xA198;
- string128 Chapter : 0x237D2D8, 0x708, 0x2E8, 0x750, 0x0;
- string128 Menu : 0x236980A;
- }
- state("APlagueTaleRequiem_x64", "Steam 1.4")
- {
- bool Paused : 0x2393BF0, 0x70;
- bool Crafting : 0x2871B18, 0x638, 0x1B8, 0xE8, 0x30;
- byte Cutscene : 0x237E620, 0x288;
- short isLoading : 0x2871B18, 0x4F0;
- float X : 0x2393BE8, 0x378, 0xA170;
- float Y : 0x2393BE8, 0x378, 0xA174;
- float Z : 0x2393BE8, 0x378, 0xA178;
- string128 Chapter : 0x237DB68, 0x708, 0x2E8, 0x750, 0x0;
- string128 Menu : 0x236A08A;
- }
- state("APlagueTaleRequiem_x64", "Steam 1.5")
- {
- bool Paused : 0x23B6E30, 0x70;
- bool Crafting : 0x27B2A08, 0x638, 0x1B8, 0xE8, 0x30;
- byte Cutscene : 0x23A1760, 0x288;
- short isLoading : 0x27B2A08, 0x4F0;
- float X : 0x23B6E28, 0x378, 0xA170;
- float Y : 0x23B6E28, 0x378, 0xA174;
- float Z : 0x23B6E28, 0x378, 0xA178;
- string128 Chapter : 0x23A0CA8, 0x708, 0x2E8, 0x750, 0x0;
- string128 Menu : 0x238C87A;
- }
- state("APT2_WinStore.x64.Submission", "Xbox 1.0")
- {
- bool Paused : 0x23A63C0, 0x70;
- bool Crafting : 0x2883978, 0x638, 0x1B8, 0xE8, 0x30;
- byte Cutscene : 0x23A6388, 0x1080;
- short isLoading : 0x2883978, 0x4F0;
- float X : 0x23A63B8, 0x378, 0xA190;
- float Y : 0x23A63B8, 0x378, 0xA194;
- float Z : 0x23A63B8, 0x378, 0xA198;
- string128 Chapter : 0x23904C8, 0x708, 0x2E8, 0x750, 0x0;
- string128 Menu : 0x237CACA;
- }
- state("APT2_WinStore.x64.Submission", "Xbox 1.3")
- {
- bool Paused : 0x23BC8F0, 0x70; // fixed
- bool Crafting : 0x289A8B8, 0x638, 0x1B8, 0xE8, 0x30;
- byte Cutscene : 0x23A73D0, 0x288; // 128 cutscene, 160 no cutscene
- short isLoading : 0x289A8B8, 0x4F0; // 297A0
- float X : 0x23BC8E8, 0x378, 0xA190; //fixed
- float Y : 0x23BC8E8, 0x378, 0xA194; // fixed
- float Z : 0x23BC8E8, 0x378, 0xA198; // Fixed
- string128 Chapter : 0x23A6918, 0x708, 0x2E8, 0x750, 0x0; //fixed
- string128 Menu : 0x2392E4A; //29640
- }
- state("APlagueTaleRequiem_x64", "GoG 1.0")
- {
- bool Paused : 0x2368560, 0x70;
- bool Crafting : 0x28454F8, 0x638, 0x1B8, 0xE8, 0x30;
- byte Cutscene : 0x2353120, 0x288;
- short isLoading : 0x28454F8, 0x4F0;
- float X : 0x2368558, 0x378, 0xA190;
- float Y : 0x2368558, 0x378, 0xA194;
- float Z : 0x2368558, 0x378, 0xA198;
- string128 Chapter : 0x2352688, 0x708, 0x2E8, 0x750, 0x0;
- string128 Menu : 0x233EC6A;
- }
- state("APlagueTaleRequiem_x64", "GoG 1.3")
- {
- bool Paused : 0x237DAB0, 0x70;
- byte Cutscene : 0x2368590, 0x288;
- bool Crafting : 0x285B488, 0x638, 0x1B8, 0xE8, 0x30;
- short isLoading : 0x285B488, 0x4F0;
- float X : 0x237DAA8, 0x378, 0xA190;
- float Y : 0x237DAA8, 0x378, 0xA194;
- float Z : 0x237DAA8, 0x378, 0xA198;
- string128 Chapter : 0x2367AD8, 0x708, 0x2E8, 0x750, 0x0;
- string128 Menu : 0x235400A;
- }
- state("APlagueTaleRequiem_x64", "GoG 1.4")
- {
- bool Paused : 0x237E3F0, 0x70;
- bool Crafting : 0x285BE88, 0x638, 0x1B8, 0xE8, 0x30;
- byte Cutscene : 0x2368E20, 0x288;
- short isLoading : 0x285BE88, 0x4F0;
- float X : 0x237E3E8, 0x378, 0xA170;
- float Y : 0x237E3E8, 0x378, 0xA174;
- float Z : 0x237E3E8, 0x378, 0xA178;
- string128 Chapter : 0x2368368, 0x708, 0x2E8, 0x750, 0x0;
- string128 Menu : 0x235488A;
- }
- state("APlagueTaleRequiem_x64", "GoG 1.5")
- {
- bool Paused : 0x23A3630, 0x70;
- bool Crafting : 0x279ED98, 0x638, 0x1B8, 0xE8, 0x30;
- byte Cutscene : 0x238DF60, 0x288;
- short isLoading : 0x279ED98, 0x4F0;
- float X : 0x23A3628, 0x378, 0xA170;
- float Y : 0x23A3628, 0x378, 0xA174;
- float Z : 0x23A3628, 0x378, 0xA178;
- string128 Chapter : 0x238D4A8, 0x708, 0x2E8, 0x750, 0x0;
- string128 Menu : 0x237907A;
- }
- startup
- {
- Assembly.Load(File.ReadAllBytes("Components/asl-help")).CreateInstance("Basic");
-
- if (timer.CurrentTimingMethod == TimingMethod.RealTime){ // stolen from dude simulator 3, basically asks the runner to set their livesplit to game time
- var timingMessage = MessageBox.Show (
- "This game uses Time without Loads (Game Time) as the main timing method.\n"+
- "LiveSplit is currently set to show Real Time (RTA).\n"+
- "Would you like to set the timing method to Game Time? This will make verification easier",
- "LiveSplit | A Plague Tale: Requiem",
- MessageBoxButtons.YesNo,MessageBoxIcon.Question);
-
- if (timingMessage == DialogResult.Yes){
- timer.CurrentTimingMethod = TimingMethod.GameTime;
- }
- }
- }
- init
- {
- string md5 = "";
- try {
- md5 = (string)vars.Helper.GetMD5Hash();
- } catch {
- // Failed to open file for MD5 computation.
- }
- switch (md5) {
- // Latest Steam updates that share same MemorySize
- case "1AE94C299EBF70F6BA077489EEE2AE39":
- version = "Steam 1.4";
- break;
- default:
- // No version found with hash, fallback to memorySize
- switch ((int)vars.Helper.GetMemorySize()) {
- case (44359680):
- version = "Steam 1.0";
- break;
- case (44457984):
- version = "Steam 1.3";
- break;
- case (43679744):
- version = "Steam 1.5";
- break;
- case (44335104):
- version = "Xbox 1.0";
- break;
- case (44433408):
- version = "Xbox 1.3";
- break;
- case (44064768):
- version = "GoG 1.0";
- break;
- case (44154880):
- version = "GoG 1.3";
- break;
- case (44158976):
- version = "GoG 1.4";
- break;
- case (43384832):
- version = "GoG 1.5";
- break;
- }
- break;
- }
- }
- update
- {
- // Uncomment debug information in the event of an update.
- //print(modules.First().ModuleMemorySize.ToString());
-
- }
- start
- {
- return current.Menu != "MENU" && current.Cutscene == 160 && current.isLoading == 256;
- }
- split
- {
- if(current.Chapter != old.Chapter && old.Menu != "MENU" ||
- current.X > -259 && current.X < -248f && current.Y > -18f && current.Y < -11f && current.Z > 102f && current.Z < 113f && current.Cutscene == 128 && old.Cutscene == 160){
- return true;
- }
- }
- isLoading
- {
- return current.Paused || current.Cutscene == 128 && !current.Crafting || current.Menu == "MENU" || current.isLoading == 128;
- }
|