Advertisement
EliteAnax17

Untitled

Mar 24th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.99 KB | None | 0 0
  1. -- Gen5 RNG Script v1.1.3 --
  2. -- written by ProjectRevoTPP --
  3. -- based on MKDasher's scripts --
  4. -- v1.1 by dabomstew: added BW1 support and autodetect game --
  5. -- designed for DesMUmE v0.9.9+ --
  6.  
  7. -- DO NOT USE 32-BIT DESMUME WITH THIS SCRIPT, IT WONT WORK!--
  8.  
  9. module("mt19937", package.seeall)
  10.  
  11. -- CONFIG --
  12.  
  13. desired_seed = "0x8D1336586222F667"
  14. display_config = 1 -- 0 for lua window, 1 for gui text, anything else to not print
  15. game = -1 -- 0 for white2, 1 for black2, 2 for white1, 3 for black1, -1 for autodetect
  16.  
  17. ------------------------------------------
  18. -- main program below --
  19.  
  20. emu.reset() -- reset the game.
  21. emu.unpause()
  22.  
  23. print("Waiting 180 frames for injection window...")
  24.  
  25. function FramesAdvance(nframes)
  26. for frame = 1, nframes do
  27. emu.frameadvance()
  28. end
  29. end
  30.  
  31. FramesAdvance(180)
  32.  
  33. if game == -1 then
  34. arm9part1 = memory.readdword(0x2000024)
  35. arm9part2 = memory.readdword(0x2000028)
  36. if arm9part1 == 0x0221B2F0 and arm9part2 == 0x020AA9C4 then
  37. game = 3 -- black 1
  38. elseif arm9part1 == 0x0221B310 and arm9part2 == 0x020AA9E4 then
  39. game = 2 -- white 1
  40. elseif arm9part1 == 0x02204CC4 and arm9part2 == 0x0209E288 then
  41. game = 1 -- black 2
  42. elseif arm9part1 == 0x02204D04 and arm9part2 == 0x0209E2C8 then
  43. game = 0 -- white 2
  44. else
  45. print("Auto-Detect failed, ROM not open or non-English ROM open.")
  46. return
  47. end
  48. print("Auto-Detect game="..game)
  49. end
  50.  
  51. emu.reset() -- reset the game again.
  52. emu.unpause()
  53.  
  54. if game >= 2 then
  55. RNG_ADDR = 0x02216244-0x20*(game-2)
  56. IVRNG_ADDR = 0x02215374-0x20*(game-2)
  57. else
  58. RNG_ADDR = 0x021FFC58-0x20*game
  59. IVRNG_ADDR = 0x21FED68-0x20*game
  60. end
  61.  
  62. local UPPER_MASK = 0x80000000 -- most significant w-r bits
  63. local LOWER_MASK = 0x7fffffff -- least significant r bits
  64.  
  65. local mt = {} -- the array for the state vector
  66. local NUM = 624
  67. local M = 397
  68.  
  69. desired_seed_1 = string.sub(desired_seed, 0, 10) -- upper
  70. desired_seed_2 = "0x" .. string.sub(desired_seed, 11, 18) -- lower
  71.  
  72. function drawguitext(rng2, rng1, last_lag_frame_counter)
  73. gui.text(1,10,string.format("Current: %08X%08X",rng2,rng1))
  74. gui.text(1,20,string.format("Last Lag Frame: %i",last_lag_frame_counter))
  75. end
  76.  
  77. -- initializes mt[N] with a seed
  78. function randomseed(s)
  79. s = bit.band(s, 0xffffffff)
  80. mt[1] = s
  81. for i = 1, NUM - 1 do
  82. -- s = 1812433253 * (bit.bxor(s, bit.rshift(s, 30))) + i
  83. s = bit.bxor(s, bit.rshift(s, 30))
  84. local s_lo = bit.band(s, 0xffff)
  85. local s_hi = bit.rshift(s, 16)
  86. local s_lo2 = bit.band(1812433253 * s_lo, 0xffffffff)
  87. local s_hi2 = bit.band(1812433253 * s_hi, 0xffff)
  88. s = bit.bor(bit.lshift(bit.rshift(s_lo2, 16) + s_hi2, 16),
  89. bit.band(s_lo2, 0xffff))
  90. -- s = bit.band(s + i, 0xffffffff)
  91. local s_lim = -bit.tobit(s)
  92. -- assumes i<2^31
  93. if (s_lim > 0 and s_lim <= i) then
  94. s = i - s_lim
  95. else
  96. s = s + i
  97. end
  98. mt[i+1] = s
  99. -- See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier.
  100. -- In the previous versions, MSBs of the seed affect
  101. -- only MSBs of the array mt[].
  102. -- 2002/01/09 modified by Makoto Matsumoto
  103. end
  104. mti = NUM
  105. end
  106.  
  107. local mag01 = { 0, MATRIX_A } -- mag01[x] = x * MATRIX_A for x=0,1
  108.  
  109. function writemersennetable(seed)
  110. local N
  111. randomseed(seed)
  112.  
  113. print("Writing mersenne table...")
  114. for N = 1, 624 do
  115. memory.writedword(IVRNG_ADDR + (4 * (N - 1)), mt[N])
  116. N = N + 1
  117. end
  118. print("Write complete.")
  119.  
  120. end
  121.  
  122. -- begin program --
  123.  
  124. FramesAdvance(30) -- wait for the first seed update before forcing
  125.  
  126. last_known_rng_value_1 = 0; -- set initial local rng to 0
  127. last_known_rng_value_2 = 0; -- set initial local rng to 0
  128.  
  129. local rng1 = memory.readdword(RNG_ADDR)
  130. local rng2 = memory.readdword(RNG_ADDR + 4)
  131. print(string.format("Initial RNG seed: %08x%08x", rng2, rng1))
  132.  
  133. -- WARNING: does not support 32-bit! --
  134. -- write the forced seed and backup. --
  135. memory.writedword(RNG_ADDR, desired_seed_2)
  136. memory.writedword(RNG_ADDR + 4, desired_seed_1)
  137.  
  138. last_known_rng_value_1 = desired_seed_1
  139. last_known_rng_value_2 = desired_seed_2
  140. last_lag_frame_counter = 0;
  141.  
  142. local mtrng = memory.readdword(IVRNG_ADDR)
  143.  
  144. print(string.format("Initial IVRNG: %08x", mtrng))
  145. print("RNG seed to be injected is: ", desired_seed)
  146.  
  147. -- force mersenne table. --
  148. writemersennetable(desired_seed_1)
  149. mtrng = memory.readdword(IVRNG_ADDR)
  150. print(string.format("IVRNG After updating: %08x", mtrng))
  151. print(string.format("RNG seed injected: %08x%08x", desired_seed_1, desired_seed_2))
  152.  
  153. -- do main loop. --
  154. repeat
  155. local rng1 = memory.readdword(RNG_ADDR)
  156. local rng2 = memory.readdword(RNG_ADDR + 4)
  157.  
  158. if rng1 ~= last_known_rng_value_1 then
  159. if rng2 ~= last_known_rng_value_2 then
  160. if display_config == 0 then
  161. print(string.format("Current: %08x%08x", rng2, rng1))
  162. end
  163. last_known_rng_value_1 = rng1
  164. last_known_rng_value_2 = rng2
  165. end
  166. end
  167.  
  168. if display_config == 1 then
  169. drawguitext(rng2, rng1, last_lag_frame_counter)
  170. end
  171.  
  172. if emu.lagged() == true then
  173. last_lag_frame_counter = 0
  174. else
  175. last_lag_frame_counter = last_lag_frame_counter + 1
  176. end
  177.  
  178. emu.frameadvance()
  179. until false
  180.  
  181. gui.register(drawguitext)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement