Guest User

Untitled

a guest
Jul 16th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.80 KB | None | 0 0
  1. state("portal2")
  2. {
  3. // Portal 2 (7054)
  4. // SourceAutoRecord (1.7)
  5. // made by NeKz
  6. }
  7.  
  8. startup
  9. {
  10. vars.SAR = new MemoryWatcherList();
  11. vars.GetTimer = (Func<Process, bool>)((proc) =>
  12. {
  13. // Speedrun::timer
  14. var TimerTarget = new SigScanTarget(0,
  15. "53 41 52 5F 54 49 4D 45 52 5F 53 54 41 52 54 00", // char start[16]
  16. "?? ?? ?? ??", // int session
  17. "?? ?? ?? ??", // int base
  18. "?? ?? ?? ??", // int total
  19. "?? ?? ?? ??", // int prevTotal
  20. "?? ?? ?? ??", // char* map
  21. "?? ?? ?? ??", // float ipt
  22. "?? ?? ?? ??", // Speedrun::TimerAction action
  23. "?? ?? ?? ??", // Speedrun::TimerState state
  24. "?? ?? ?? ??", // std::unique_ptr<Speedrun::TimerResult> result
  25. "?? ?? ?? ??", // std::unique_ptr<Speedrun::TimerResult> pb
  26. "53 41 52 5F 54 49 4D 45 52 5F 45 4E 44 00"); // char end[14]
  27.  
  28. var TimerAddr = IntPtr.Zero;
  29. foreach (var page in proc.MemoryPages(true)) {
  30. var Scanner = new SignatureScanner(proc, page.BaseAddress, (int)page.RegionSize);
  31. TimerAddr = Scanner.Scan(TimerTarget);
  32.  
  33. if (TimerAddr != IntPtr.Zero)
  34. break;
  35. }
  36.  
  37. if (TimerAddr != IntPtr.Zero)
  38. {
  39. print("[ASL] timer = 0x" + TimerAddr.ToString("X"));
  40. vars.Total = new MemoryWatcher<int>(TimerAddr + 24);
  41. vars.Ipt = new MemoryWatcher<float>(TimerAddr + 36);
  42. vars.Action = new MemoryWatcher<int>(TimerAddr + 40);
  43. vars.State = new MemoryWatcher<int>(TimerAddr + 44);
  44.  
  45. vars.SAR.Clear();
  46. vars.SAR.AddRange(new MemoryWatcher[]
  47. {
  48. vars.Total,
  49. vars.Ipt,
  50. vars.Action,
  51. vars.State
  52. });
  53. vars.SAR.UpdateAll(proc);
  54.  
  55. print("[ASL] timer->ipt = " + vars.Ipt.Current.ToString());
  56. return true;
  57. }
  58.  
  59. print("[ASL] Memory scan failed!");
  60. return false;
  61. });
  62.  
  63. // Speedrun::TimerAction
  64. vars.TimerActions = new Dictionary<string, int>()
  65. {
  66. { "Unknown", 0 },
  67. { "Start", 1 },
  68. { "Restart", 2 },
  69. { "Split", 3 },
  70. { "End", 4 }
  71. };
  72. // Speedrun::TimerState
  73. vars.TimerStates = new Dictionary<string, int>()
  74. {
  75. { "NotRunning", 0 },
  76. { "Running", 1 },
  77. { "Paused", 2 }
  78. };
  79.  
  80. vars.TimerAction = (Func<string, int>)((key) =>
  81. {
  82. return (vars.TimerActions as Dictionary<string, int>)
  83. .First(x => x.Key == key).Value;
  84. });
  85. vars.TimerState = (Func<string, int>)((key) =>
  86. {
  87. return (vars.TimerStates as Dictionary<string, int>)
  88. .First(x => x.Key == key).Value;
  89. });
  90. }
  91.  
  92. init
  93. {
  94. vars.Init = false;
  95. }
  96.  
  97. update
  98. {
  99. if (vars.Init)
  100. {
  101. timer.IsGameTimePaused = true;
  102.  
  103. vars.SAR.UpdateAll(game);
  104.  
  105. if (vars.Action.Changed) print("[ASL] timer->action = TimerAction::" + (vars.TimerActions as Dictionary<string, int>).First(x => x.Value == vars.Action.Current).Key);
  106. if (vars.State.Changed) print("[ASL] timer->state = TimerState::" + (vars.TimerStates as Dictionary<string, int>).First(x => x.Value == vars.State.Current).Key);
  107. }
  108. else
  109. {
  110. if (modules.FirstOrDefault(m => m.ModuleName == "sar.dll") != null)
  111. vars.Init = vars.GetTimer(game);
  112. }
  113.  
  114. return vars.Init;
  115. }
  116.  
  117. gameTime
  118. {
  119. return TimeSpan.FromSeconds(vars.Total.Current * vars.Ipt.Current);
  120. }
  121.  
  122. start
  123. {
  124. return vars.Action.Changed
  125. && (vars.Action.Current == vars.TimerAction("Start") || vars.Action.Current == vars.TimerAction("Restart"));
  126. }
  127.  
  128. split
  129. {
  130. return vars.Action.Changed
  131. && (vars.Action.Current == vars.TimerAction("Split") || vars.Action.Current == vars.TimerAction("End"));
  132. }
Add Comment
Please, Sign In to add comment