A_Plague_Tale_Requiem.asl 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. // A Plague Tale: Requiem Load Remover & Autosplitter Version 1.4.0 19/03/2023
  2. // Supports Load Remover IGT
  3. // Supports full chapter splits for full game & IL's
  4. // Splits for campaigns can be obtained from
  5. // Script & Steam Pointers by TheDementedSalad
  6. // Xbox Pointers by KunoDemetries
  7. // GoG Pointers by Kanemzi
  8. state("APlagueTaleRequiem_x64", "Steam 1.0")
  9. {
  10. bool Paused : 0x237CD80, 0x70; // 0 when unpaused, 1 when paused
  11. bool Crafting : 0x285A1D8, 0x638, 0x1B8, 0xE8, 0x30; // 128 cutscene, 160 no cutscene
  12. byte Cutscene : 0x2367940, 0x288; // 1 in crafting tabs/codex 0 elsewhere
  13. short isLoading : 0x285A1D8, 0x4F0; // 128 when loading, 256 in game
  14. float X : 0x237CD78, 0x378, 0xA190; // -8 base address of Paused
  15. float Y : 0x237CD78, 0x378, 0xA194; // ''
  16. float Z : 0x237CD78, 0x378, 0xA198; // ''
  17. 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
  18. string128 Menu : 0x235348A; // Type in all caps MENU as a string then go into a level, one that changes is correct
  19. }
  20. state("APlagueTaleRequiem_x64", "Steam 1.3")
  21. {
  22. bool Paused : 0x23932B0, 0x70;
  23. bool Crafting : 0x2871118, 0x638, 0x1B8, 0xE8, 0x30;
  24. byte Cutscene : 0x237DD90, 0x288;
  25. short isLoading : 0x2871118, 0x4F0;
  26. float X : 0x23932A8, 0x378, 0xA190;
  27. float Y : 0x23932A8, 0x378, 0xA194;
  28. float Z : 0x23932A8, 0x378, 0xA198;
  29. string128 Chapter : 0x237D2D8, 0x708, 0x2E8, 0x750, 0x0;
  30. string128 Menu : 0x236980A;
  31. }
  32. state("APlagueTaleRequiem_x64", "Steam 1.4")
  33. {
  34. bool Paused : 0x2393BF0, 0x70;
  35. bool Crafting : 0x2871B18, 0x638, 0x1B8, 0xE8, 0x30;
  36. byte Cutscene : 0x237E620, 0x288;
  37. short isLoading : 0x2871B18, 0x4F0;
  38. float X : 0x2393BE8, 0x378, 0xA170;
  39. float Y : 0x2393BE8, 0x378, 0xA174;
  40. float Z : 0x2393BE8, 0x378, 0xA178;
  41. string128 Chapter : 0x237DB68, 0x708, 0x2E8, 0x750, 0x0;
  42. string128 Menu : 0x236A08A;
  43. }
  44. state("APlagueTaleRequiem_x64", "Steam 1.5")
  45. {
  46. bool Paused : 0x23B6E30, 0x70;
  47. bool Crafting : 0x27B2A08, 0x638, 0x1B8, 0xE8, 0x30;
  48. byte Cutscene : 0x23A1760, 0x288;
  49. short isLoading : 0x27B2A08, 0x4F0;
  50. float X : 0x23B6E28, 0x378, 0xA170;
  51. float Y : 0x23B6E28, 0x378, 0xA174;
  52. float Z : 0x23B6E28, 0x378, 0xA178;
  53. string128 Chapter : 0x23A0CA8, 0x708, 0x2E8, 0x750, 0x0;
  54. string128 Menu : 0x238C87A;
  55. }
  56. state("APT2_WinStore.x64.Submission", "Xbox 1.0")
  57. {
  58. bool Paused : 0x23A63C0, 0x70;
  59. bool Crafting : 0x2883978, 0x638, 0x1B8, 0xE8, 0x30;
  60. byte Cutscene : 0x23A6388, 0x1080;
  61. short isLoading : 0x2883978, 0x4F0;
  62. float X : 0x23A63B8, 0x378, 0xA190;
  63. float Y : 0x23A63B8, 0x378, 0xA194;
  64. float Z : 0x23A63B8, 0x378, 0xA198;
  65. string128 Chapter : 0x23904C8, 0x708, 0x2E8, 0x750, 0x0;
  66. string128 Menu : 0x237CACA;
  67. }
  68. state("APT2_WinStore.x64.Submission", "Xbox 1.3")
  69. {
  70. bool Paused : 0x23BC8F0, 0x70; // fixed
  71. bool Crafting : 0x289A8B8, 0x638, 0x1B8, 0xE8, 0x30;
  72. byte Cutscene : 0x23A73D0, 0x288; // 128 cutscene, 160 no cutscene
  73. short isLoading : 0x289A8B8, 0x4F0; // 297A0
  74. float X : 0x23BC8E8, 0x378, 0xA190; //fixed
  75. float Y : 0x23BC8E8, 0x378, 0xA194; // fixed
  76. float Z : 0x23BC8E8, 0x378, 0xA198; // Fixed
  77. string128 Chapter : 0x23A6918, 0x708, 0x2E8, 0x750, 0x0; //fixed
  78. string128 Menu : 0x2392E4A; //29640
  79. }
  80. state("APlagueTaleRequiem_x64", "GoG 1.0")
  81. {
  82. bool Paused : 0x2368560, 0x70;
  83. bool Crafting : 0x28454F8, 0x638, 0x1B8, 0xE8, 0x30;
  84. byte Cutscene : 0x2353120, 0x288;
  85. short isLoading : 0x28454F8, 0x4F0;
  86. float X : 0x2368558, 0x378, 0xA190;
  87. float Y : 0x2368558, 0x378, 0xA194;
  88. float Z : 0x2368558, 0x378, 0xA198;
  89. string128 Chapter : 0x2352688, 0x708, 0x2E8, 0x750, 0x0;
  90. string128 Menu : 0x233EC6A;
  91. }
  92. state("APlagueTaleRequiem_x64", "GoG 1.3")
  93. {
  94. bool Paused : 0x237DAB0, 0x70;
  95. byte Cutscene : 0x2368590, 0x288;
  96. bool Crafting : 0x285B488, 0x638, 0x1B8, 0xE8, 0x30;
  97. short isLoading : 0x285B488, 0x4F0;
  98. float X : 0x237DAA8, 0x378, 0xA190;
  99. float Y : 0x237DAA8, 0x378, 0xA194;
  100. float Z : 0x237DAA8, 0x378, 0xA198;
  101. string128 Chapter : 0x2367AD8, 0x708, 0x2E8, 0x750, 0x0;
  102. string128 Menu : 0x235400A;
  103. }
  104. state("APlagueTaleRequiem_x64", "GoG 1.4")
  105. {
  106. bool Paused : 0x237E3F0, 0x70;
  107. bool Crafting : 0x285BE88, 0x638, 0x1B8, 0xE8, 0x30;
  108. byte Cutscene : 0x2368E20, 0x288;
  109. short isLoading : 0x285BE88, 0x4F0;
  110. float X : 0x237E3E8, 0x378, 0xA170;
  111. float Y : 0x237E3E8, 0x378, 0xA174;
  112. float Z : 0x237E3E8, 0x378, 0xA178;
  113. string128 Chapter : 0x2368368, 0x708, 0x2E8, 0x750, 0x0;
  114. string128 Menu : 0x235488A;
  115. }
  116. state("APlagueTaleRequiem_x64", "GoG 1.5")
  117. {
  118. bool Paused : 0x23A3630, 0x70;
  119. bool Crafting : 0x279ED98, 0x638, 0x1B8, 0xE8, 0x30;
  120. byte Cutscene : 0x238DF60, 0x288;
  121. short isLoading : 0x279ED98, 0x4F0;
  122. float X : 0x23A3628, 0x378, 0xA170;
  123. float Y : 0x23A3628, 0x378, 0xA174;
  124. float Z : 0x23A3628, 0x378, 0xA178;
  125. string128 Chapter : 0x238D4A8, 0x708, 0x2E8, 0x750, 0x0;
  126. string128 Menu : 0x237907A;
  127. }
  128. startup
  129. {
  130. Assembly.Load(File.ReadAllBytes("Components/asl-help")).CreateInstance("Basic");
  131. if (timer.CurrentTimingMethod == TimingMethod.RealTime){ // stolen from dude simulator 3, basically asks the runner to set their livesplit to game time
  132. var timingMessage = MessageBox.Show (
  133. "This game uses Time without Loads (Game Time) as the main timing method.\n"+
  134. "LiveSplit is currently set to show Real Time (RTA).\n"+
  135. "Would you like to set the timing method to Game Time? This will make verification easier",
  136. "LiveSplit | A Plague Tale: Requiem",
  137. MessageBoxButtons.YesNo,MessageBoxIcon.Question);
  138. if (timingMessage == DialogResult.Yes){
  139. timer.CurrentTimingMethod = TimingMethod.GameTime;
  140. }
  141. }
  142. }
  143. init
  144. {
  145. string md5 = "";
  146. try {
  147. md5 = (string)vars.Helper.GetMD5Hash();
  148. } catch {
  149. // Failed to open file for MD5 computation.
  150. }
  151. switch (md5) {
  152. // Latest Steam updates that share same MemorySize
  153. case "1AE94C299EBF70F6BA077489EEE2AE39":
  154. version = "Steam 1.4";
  155. break;
  156. default:
  157. // No version found with hash, fallback to memorySize
  158. switch ((int)vars.Helper.GetMemorySize()) {
  159. case (44359680):
  160. version = "Steam 1.0";
  161. break;
  162. case (44457984):
  163. version = "Steam 1.3";
  164. break;
  165. case (43679744):
  166. version = "Steam 1.5";
  167. break;
  168. case (44335104):
  169. version = "Xbox 1.0";
  170. break;
  171. case (44433408):
  172. version = "Xbox 1.3";
  173. break;
  174. case (44064768):
  175. version = "GoG 1.0";
  176. break;
  177. case (44154880):
  178. version = "GoG 1.3";
  179. break;
  180. case (44158976):
  181. version = "GoG 1.4";
  182. break;
  183. case (43384832):
  184. version = "GoG 1.5";
  185. break;
  186. }
  187. break;
  188. }
  189. }
  190. update
  191. {
  192. // Uncomment debug information in the event of an update.
  193. //print(modules.First().ModuleMemorySize.ToString());
  194. }
  195. start
  196. {
  197. return current.Menu != "MENU" && current.Cutscene == 160 && current.isLoading == 256;
  198. }
  199. split
  200. {
  201. if(current.Chapter != old.Chapter && old.Menu != "MENU" ||
  202. current.X > -259 && current.X < -248f && current.Y > -18f && current.Y < -11f && current.Z > 102f && current.Z < 113f && current.Cutscene == 128 && old.Cutscene == 160){
  203. return true;
  204. }
  205. }
  206. isLoading
  207. {
  208. return current.Paused || current.Cutscene == 128 && !current.Crafting || current.Menu == "MENU" || current.isLoading == 128;
  209. }