GunGraveGore.asl 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // Massive massive thanks to Micrologist for teaching me to find the sigscans for UE4!
  2. state("GunGraveGore-WinGDK-Shipping", "Xbox Game Pass 1.0")
  3. {
  4. }
  5. state("GunGraveGore-Win64-Shipping", "Steam 1.0")
  6. {
  7. }
  8. init
  9. {
  10. vars.doneMaps = new List<string>();
  11. switch (modules.First().ModuleMemorySize)
  12. {
  13. case 89198592:
  14. version = "Xbox Game Pass 1.0";
  15. break;
  16. case 89116672 :
  17. version = "steam 1.0";
  18. break;
  19. default:
  20. version = "";
  21. break;
  22. }
  23. vars.GetStaticPointerFromSig = (Func<string, int, IntPtr>) ( (signature, instructionOffset) => {
  24. var scanner = new SignatureScanner(game, modules.First().BaseAddress, (int)modules.First().ModuleMemorySize);
  25. var pattern = new SigScanTarget(signature);
  26. var location = scanner.Scan(pattern);
  27. if (location == IntPtr.Zero) return IntPtr.Zero;
  28. int offset = game.ReadValue<int>((IntPtr)location + instructionOffset);
  29. return (IntPtr)location + offset + instructionOffset + 0x4;
  30. });
  31. vars.Loading = vars.GetStaticPointerFromSig("48 89 3d ?? ?? ?? ?? 48 89 3d ?? ?? ?? ?? 89 3d ?? ?? ?? ?? c7 05 ?? ?? ?? ?? ?? ?? ?? ?? c7 05 ?? ?? ?? ?? ?? ?? ?? ?? 89 3d ?? ?? ?? ?? 48 89 3d ?? ?? ?? ?? 89 3d ?? ?? ?? ?? 40", 0x3);
  32. vars.GameEngine = vars.GetStaticPointerFromSig("48 89 05 ?? ?? ?? ?? 48 85 c9 74 ?? e8 ?? ?? ?? ?? 48 8d 4d", 0x3);
  33. vars.CutsceneP = vars.GetStaticPointerFromSig("f0 0f c1 05 ?? ?? ?? ?? ff c0 83 f8 ?? 75 ?? 48 8b 05", 0x4);
  34. if (vars.Loading == IntPtr.Zero || vars.GameEngine == IntPtr.Zero || vars.CutsceneP == IntPtr.Zero)
  35. {
  36. throw new Exception("Loading/GameEngine not initialized - trying again");
  37. }
  38. vars.watchers = new MemoryWatcherList
  39. {
  40. new StringWatcher(new DeepPointer(vars.GameEngine, 0x8B0, 0x0), 100) { Name = "CurMap"},
  41. new MemoryWatcher<byte>(new DeepPointer(vars.Loading - 0x3)) { Name = "Loader"},
  42. new MemoryWatcher<byte>(new DeepPointer(vars.CutsceneP)) { Name = "CurCutscene"},
  43. };
  44. }
  45. update
  46. {
  47. vars.watchers.UpdateAll(game);
  48. current.CurMap = vars.watchers["CurMap"].Current;
  49. current.loading = vars.watchers["Loader"].Current;
  50. current.CurCutscene = vars.watchers["CurCutscene"].Current;
  51. // print(vars.watchers["CurCutscene"].Current.ToString());
  52. }
  53. start
  54. {
  55. return ((!current.CurMap.Contains("TitleLevel")) && (current.loading == 0) && (current.CurCutscene == 0));
  56. }
  57. split
  58. {
  59. if ((current.CurMap != old.CurMap) && (!vars.doneMaps.Contains(current.CurMap)) && (!current.CurMap.Contains("TitleLevel")))
  60. {
  61. vars.doneMaps.Add(current.CurMap);
  62. return true;
  63. }
  64. }
  65. isLoading
  66. {
  67. return ((current.loading != 0) || (current.CurCutscene == 1));
  68. }
  69. onReset
  70. {
  71. vars.doneMaps.Clear();
  72. }