HolywoodJack

CodeNAme

Jul 2nd, 2022 (edited)
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.15 KB | None | 0 0
  1. import core.sys.windows.windows, core.sys.windows.dll;
  2. import std.concurrency : spawn, yield;
  3. import std.file : exists, isFile;
  4. import std.path : dirName;
  5. import core.runtime;
  6.  
  7. import llmo, inifiled;
  8.  
  9. __gshared HINSTANCE g_hinst;
  10.  
  11. extern (Windows) BOOL DllMain(HINSTANCE hInstance, ULONG ulReason, LPVOID)
  12. {
  13. g_hinst = hInstance;
  14. final switch (ulReason)
  15. {
  16. case DLL_PROCESS_ATTACH:
  17. Runtime.initialize();
  18. spawn({
  19. 0A8D: 0@ = read_memory 0xC8D4C0 size 4 virtual_protect false
  20. repeat
  21. wait 0
  22. until 0@ < 9
  23. 0AB1: call_scm_func @yield 0
  24. 0AB1: call_scm_func @init 0
  25. });
  26. dll_process_attach(hInstance, true);
  27. break;
  28. case DLL_PROCESS_DETACH:
  29. 0AB1: call_scm_func @uninit 0
  30. Runtime.terminate();
  31. dll_process_detach(hInstance, true);
  32. break;
  33. case DLL_THREAD_ATTACH:
  34. dll_thread_attach(true, true);
  35. break;
  36. case DLL_THREAD_DETACH:
  37. dll_thread_detach(true, true);
  38. break;
  39. }
  40. return true;
  41. }
  42.  
  43. /// Uninitialize plugin: restore original code
  44. :uninit
  45. // Enable background
  46. 0A8C: write_memory 0x57B7CC size 4 value 0x019C840F virtual_protect false
  47. 0A8C: write_memory 0x57B7D0 size 2 value 0 virtual_protect false
  48.  
  49. 0A8C: write_memory 0x57B9BB size 4 value 0x1AC1A0E8 virtual_protect false
  50. 0A8C: write_memory 0x57B9BF size 1 value 0 virtual_protect false
  51.  
  52. 0A8C: write_memory 0x576E14 size 1 value 0xFF virtual_protect false
  53. 0A8C: write_memory 0x576E29 size 1 value 0xFF virtual_protect false
  54. 0A8C: write_memory 0x57B9CA size 2 value 0x3674 virtual_protect false
  55.  
  56. // Enable background for map
  57. 0A8C: write_memory 0x57549D size 4 value 0x1B26BEE8 virtual_protect false
  58. 0A8C: write_memory 0x5754A1 size 1 value 0 virtual_protect false
  59.  
  60. 0A8C: write_memory 0x575458 size 4 value 0x1B26F2E8 virtual_protect false // 0x575469 in 1.00 Hoodlum
  61. 0A8C: write_memory 0x57545C size 1 value 0 virtual_protect false
  62.  
  63. // Disable render world
  64. 0A8C: write_memory 0x53E9B3 size 4 value 0x0160850F virtual_protect false
  65. 0A8C: write_memory 0x53E9B7 size 2 value 0 virtual_protect false
  66.  
  67. // Restore pause
  68. 0A8C: write_memory 0x561AF0 size 4 value 0xCB4905C6 virtual_protect false
  69. 0A8C: write_memory 0x561AF4 size 2 value 0x00B7 virtual_protect false
  70. 0A8C: write_memory 0x561AF6 size 1 value 1 virtual_protect false
  71.  
  72. // Remove hook
  73. 0A8C: write_memory 0x53E9F9 size 4 value 0x016CE2E8 virtual_protect false
  74. 0A8C: write_memory 0x53E9FD size 1 value 0 virtual_protect false
  75. 0AB2: cleo_return 0
  76.  
  77. /// Initialize plugin: set hacks and load settings
  78. :init
  79. // Disable background
  80. 0A8C: write_memory 0x57B7CC size 4 value 0x90909090 virtual_protect false
  81. 0A8C: write_memory 0x57B7D0 size 2 value 0x9090 virtual_protect false
  82.  
  83. 0A8C: write_memory 0x57B9BB size 4 value 0x90909090 virtual_protect false
  84. 0A8C: write_memory 0x57B9BF size 1 value 0x90 virtual_protect false
  85.  
  86. 0A8C: write_memory 0x576E14 size 1 value 0 virtual_protect false
  87. 0A8C: write_memory 0x576E29 size 1 value 0 virtual_protect false
  88. 0A8C: write_memory 0x57B9CA size 2 value 0xEB36 virtual_protect false // jmp 0057BA02
  89.  
  90. // Disable background for map
  91. 0AF0: 0@ = read_int_from_ini_file "cleo\TransparentMenu.ini" section "Map settings" key "map"
  92. if 0@ <> 0
  93. then
  94. 0A8C: write_memory 0x57549D size 4 value 0x90909090 virtual_protect false
  95. 0A8C: write_memory 0x5754A1 size 1 value 0x90 virtual_protect false
  96.  
  97. 0A8C: write_memory 0x575469 size 4 value 0x90909090 virtual_protect false
  98. 0A8C: write_memory 0x57546D size 5 value 0x90 virtual_protect false
  99. end
  100.  
  101. // Render world
  102. 0A8C: write_memory 0x53E9B3 size 2 value 0x4475 virtual_protect false // jne 0053E9F9
  103. 0A8C: write_memory 0x53E9B5 size 4 value 0x90909090 virtual_protect false
  104.  
  105. // No pause
  106. 0AF0: 0@ = read_int_from_ini_file "cleo\TransparentMenu.ini" section "Game settings" key "game"
  107. if 0@ == 0
  108. then
  109. 0A8C: write_memory 0x561AF0 size 4 value 0x90909090 virtual_protect false
  110. 0A8C: write_memory 0x561AF4 size 2 value 0x9090 virtual_protect false
  111. 0A8C: write_memory 0x561AF6 size 1 value 0x90 virtual_protect false
  112. end
  113.  
  114. // Hook render 2D stuff
  115. auto hook = callToNull;
  116. immutable hookCallerOffset = hook.length;
  117. hook ~= callToNull;
  118. hook ~= callReturn;
  119.  
  120. auto hookCaller = cast(ubyte*)(cast(size_t) hook.ptr + hookCallerOffset);
  121.  
  122. fixNull(hook.ptr, cast(void*) 0x5556E0);
  123. fixNull(hookCaller, &render2dStuff);
  124.  
  125. setMemoryProtection(hook.ptr, hook.length);
  126. simpleCallHook(0x53E9F9, cast(void*) hook.ptr, 5);
  127. 0AB2: cleo_return 0
  128.  
  129. /// Hook of Idle for enable/disable game function render2dstuff
  130. :render2dStuff
  131. // bak 2@ 3@
  132. // oldMenuId 4@
  133. // oldState 5@
  134. 0A8D: 0@ = read_memory 0xBA68A5 size 1 virtual_protect false // 0@ menuId
  135. 0A8D: 1@ = read_memory 0xBA67A4 size 1 virtual_protect false // 1@ immutable state
  136.  
  137. if 803B: NOT 1@ == 5@ // if (state != oldState) {}
  138. then
  139. if 1@ <> 0 // if (state) {}
  140. then
  141. // lockMouse();
  142. 0A8C: write_memory 0x53F44C size 4 value 0x9090D231 virtual_protect false // Lock X
  143. 0A8C: write_memory 0x53F453 size 4 value 0x9090C031 virtual_protect false // Lock Y
  144. else
  145. // unlockMouse();
  146. 0A8C: write_memory 0x53F44C size 4 value 0x0824548B virtual_protect false
  147. 0A8C: write_memory 0x53F453 size 4 value 0x0C24448B virtual_protect false
  148. end
  149. end
  150.  
  151. if and
  152. 003B: 0@ == 4@ // menuId == oldMenuId
  153. 003B: 1@ == 5@ // state == oldState
  154. then
  155. 0AB2: cleo_return 0
  156. end
  157.  
  158. 0A8D: 2@ = read_memory 0x53EB12 size 1 virtual_protect false // bak
  159. if and
  160. 0@ == 5
  161. 2@ <> 0x90
  162. then
  163. 0A8D: 2@ = read_memory 0x53EB12 size 4 virtual_protect false // bak
  164. 0A8D: 3@ = read_memory 0x53EB16 size 1 virtual_protect false // bak
  165. 0A8C: write_memory 0x53EB12 size 4 value 0x90909090 virtual_protect false
  166. 0A8C: write_memory 0x53EB16 size 1 value 0x90 virtual_protect false
  167. else
  168. if or
  169. 4@ == 5
  170. 1@ == 0
  171. then
  172. 0A8C: write_memory 0x53EB12 size 4 value 2@ virtual_protect false
  173. 0A8C: write_memory 0x53EB16 size 1 value 3@ virtual_protect false
  174. end
  175. end
  176.  
  177. 0085: 4@ = 0@
  178. 0085: 5@ = 1@
  179. 0AB2: cleo_return 0
Add Comment
Please, Sign In to add comment