Guest User

Ranger-X onescript

a guest
Apr 24th, 2011
142
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- version 6 (2011-04-24)
  2. -- written by mz, with additions by Dammit, Truncated and TheRandomPie_IV
  3.  
  4. local address = {
  5.         ranger          = 0xFFC126,
  6.         exup            = 0xFFD6C8,
  7.         shot            = 0xFFCCA4,
  8.         enemy           = 0xFF7E04,
  9.         weapon_cooldown = 0xFFF00F,
  10.         boss_hp         = 0xFFF03D,
  11.         jetpack         = 0xFFCC8D,
  12.         curr_char       = 0xFFF01B,
  13.         boost_x         = 0xFFC139,
  14.         boost_y         = 0xFFC13D,
  15.         cam_pos_x       = 0xFFC094,
  16.         cam_pos_y       = 0xFFC090,
  17.         ranger_hb_pos_x = 0xFFD4A6,
  18.         ranger_hb_pos_y = 0xFFD4AA,
  19.         weapon_power    = 0xFFD6FC,
  20.         ranger_hp       = 0xFFD722,
  21.         ranger_inm      = 0xFFD726,
  22.         ranger_ghost    = 0xFFF034,
  23.         exup_hp         = 0xFFF016,
  24.         targets         = 0xFFE655,
  25.         rng             = 0xFFC118,
  26.  
  27.         -- not used
  28.         weapon          = 0xFFD6FB,
  29.         state           = 0xFFCC78
  30. }
  31. local offset = {
  32.         x           = 0x02,
  33.         sub_x       = 0x04,
  34.         y           = 0x06,
  35.         sub_y       = 0x08,
  36.         speed_x     = 0x0A,
  37.         sub_speed_x = 0x0C,
  38.         speed_y     = 0x0E,
  39.         sub_speed_y = 0x10,
  40.         inm         = 0x3C,
  41.         hp          = 0x3E
  42. }
  43. local value = {
  44.         ranger_hb_size  = 32,
  45.         shot_max_slots  = 32,
  46.         enemy_max_slots = 256,
  47.         slot_interval   = 0x40,
  48.         hb_transparency = 25,
  49.         inm_color       = "#FFFF00",
  50.         ghost_color     = "#FF8040",
  51.         deltaXdiff      = 0,
  52.         deltaXcur       = 0,
  53.         deltaXold       = 0,
  54.         deltaYdiff      = 0,
  55.         deltaYcur       = 0,
  56.         deltaYold       = 0,
  57.         bunnyhopMode    = 0
  58. }
  59. local draw = {
  60.         row0 = 184,
  61.         row1 = 192,
  62.         row2 = 200,
  63.         row3 = 208,
  64.         row4 = 216,
  65.         col0 = 84,
  66.         col1 = 108,
  67.         col2 = 138
  68. }
  69.  
  70. gui.register ( function()
  71.         GetGlobalValues()
  72.         ObjectInformation("shot",  "#FF0000", value.shot_max_slots)
  73.         ObjectInformation("enemy", "#00FF00", value.enemy_max_slots)
  74.         PlayerInformation("#FFFFFF")
  75.         LagCounterInformation()
  76.         MainInformation()
  77.         if value.bunnyhopMode == 1 then
  78.                 gui.text(177,220,"Bunnyhopping mode is ON", 'green')
  79.         end
  80.  
  81.     outs = string.format("%d,%d\n", memory.readword(address.exup+offset.x), memory.readword(address.exup+offset.y));
  82.  
  83.     if (gens.lagged() == false) then
  84.     --  x = io.open("D:\\Exupmove.csv", "a");
  85.     --  x:write(outs);
  86.     --  x:close()
  87.     end
  88.  
  89.  
  90.     Stage3Randomness()
  91. end)
  92.  
  93.  
  94. gens.registerafter(function()
  95.         Bunnyhopper()
  96.         LagCounter()
  97. end)
  98.  
  99.  
  100. function GetGlobalValues()
  101.         -- Camera Position
  102.         value.cam_pos_x = memory.readword(address.cam_pos_x)
  103.         value.cam_pos_y = memory.readword(address.cam_pos_y)
  104.  
  105.         -- Ranger
  106.         value.ranger_hp = memory.readword(address.ranger_hp)
  107.         value.ranger_pos_x = memory.readword(address.ranger+offset.x) + memory.readbyte(address.ranger+offset.sub_x) / 0x100
  108.         value.ranger_pos_y = memory.readword(address.ranger+offset.y) + memory.readbyte(address.ranger+offset.sub_y) / 0x100
  109.  
  110.         value.ranger_boost_x = memory.readbytesigned(address.boost_x)
  111.         value.ranger_boost_y = memory.readbytesigned(address.boost_y)
  112.  
  113.         value.ranger_rel_pos_x = value.ranger_pos_x-value.cam_pos_x
  114.         value.ranger_rel_pos_y = value.ranger_pos_y-value.cam_pos_y
  115.         value.ranger_sub_speed_x = memory.readbyte(address.ranger+offset.sub_speed_x) / 0x100
  116.         value.ranger_speed_x = memory.readwordsigned(address.ranger+offset.speed_x) + value.ranger_sub_speed_x
  117.         value.ranger_sub_speed_y = memory.readbyte(address.ranger+offset.sub_speed_y) / 0x100
  118.         value.ranger_speed_y = memory.readwordsigned(address.ranger+offset.speed_y) + value.ranger_sub_speed_y
  119.         value.ranger_hb_pos_x = memory.readword(address.ranger_hb_pos_x)
  120.         value.ranger_hb_pos_y = memory.readword(address.ranger_hb_pos_y)
  121.         value.ranger_hb_rel_pos_x = value.ranger_hb_pos_x-value.cam_pos_x
  122.         value.ranger_hb_rel_pos_y = value.ranger_hb_pos_y-value.cam_pos_y
  123.         value.ranger_inm = memory.readword(address.ranger_inm)
  124.         value.ranger_ghost = memory.readword(address.ranger_ghost)
  125.  
  126.         -- Ex-Up
  127.         value.exup_hp = memory.readword(address.exup_hp)
  128.         value.exup_pos_x = memory.readword(address.exup+offset.x)
  129.         value.exup_pos_y = memory.readword(address.exup+offset.y)
  130.         value.exup_rel_pos_x = value.exup_pos_x-value.cam_pos_x
  131.         value.exup_rel_pos_y = value.exup_pos_y-value.cam_pos_y
  132.         value.exup_sub_speed_x = memory.readbyte(address.exup+offset.sub_speed_x) / 0x100
  133.         value.exup_speed_x = memory.readwordsigned(address.exup+offset.speed_x) + value.exup_sub_speed_x
  134.         value.exup_sub_speed_y = memory.readbyte(address.exup+offset.sub_speed_y) / 0x100
  135.         value.exup_speed_y = memory.readwordsigned(address.exup+offset.speed_y) + value.exup_sub_speed_y
  136.         value.exup_hb_pos_x = value.exup_pos_x-16
  137.         value.exup_hb_pos_y = value.exup_pos_y
  138.         value.exup_hb_rel_pos_x = value.exup_hb_pos_x-value.cam_pos_x
  139.         value.exup_hb_rel_pos_y = value.exup_hb_pos_y-value.cam_pos_y
  140.  
  141.         -- Current Character
  142.         value.curr_char_byte = memory.readbyte(address.curr_char)
  143.         if value.curr_char_byte == 0 then
  144.                 value.curr_char_hp = value.ranger_hp
  145.                 value.curr_char_pos_x = value.ranger_pos_x
  146.                 value.curr_char_pos_y = value.ranger_pos_y
  147.                 value.curr_char_speed_x = value.ranger_speed_x
  148.                 value.curr_char_speed_y = value.ranger_speed_y
  149.         else
  150.                 value.curr_char_hp = value.exup_hp
  151.                 value.curr_char_pos_x = value.exup_pos_x
  152.                 value.curr_char_pos_y = value.exup_pos_y
  153.                 value.curr_char_speed_x = value.exup_speed_x
  154.                 value.curr_char_speed_y = value.exup_speed_y
  155.         end
  156.  
  157.         -- Other
  158.         value.weapon_cooldown = memory.readbyte(address.weapon_cooldown)
  159.         value.weapon_power = memory.readword(address.weapon_power)
  160.         value.jetpack = memory.readbyte(address.jetpack)
  161.         value.boss_hp = memory.readbyte(address.boss_hp)
  162.         value.targets = memory.readbyte(address.targets)
  163. end
  164.  
  165.  
  166. function MainInformation()
  167.         gui.text(255,  16, value.boss_hp)
  168.         gui.text( 51, 201, value.curr_char_hp .. "/62")
  169.         gui.text(draw.col1,draw.row0,"x","magenta")
  170.         gui.text(draw.col2,draw.row0,"y","magenta")
  171.         gui.text(draw.col0,draw.row1,"pos")
  172.         gui.text(draw.col0,draw.row2,"spd","yellow")
  173.         gui.text(draw.col0,draw.row3,"boost","red")
  174.         gui.text(draw.col0,draw.row4,"delta","cyan")
  175.         gui.text(draw.col1,draw.row1,string.format("%.2f",value.curr_char_pos_x))
  176.         gui.text(draw.col2,draw.row1,string.format("%.2f",value.curr_char_pos_y))
  177.         gui.text(draw.col1,draw.row2,value.curr_char_speed_x,"yellow")
  178.         gui.text(draw.col2,draw.row2,value.curr_char_speed_y,"yellow")
  179.         gui.text(draw.col1,draw.row3,value.ranger_boost_x,"red")
  180.         gui.text(draw.col2,draw.row3,value.ranger_boost_y,"red")
  181.         gui.text(162, 190, "Busy: " .. value.weapon_cooldown)
  182.         gui.text(235, 201, value.weapon_power .. "/3968")
  183.         gui.text(290, 203, value.jetpack)
  184. --      gui.text(146,  7, "Left: " .. value.targets) -- useless?
  185.     gui.text(146,  7, "Bird " .. memory.readwordsigned(0xFFC89A))
  186.         -- delta
  187.         if (gens.framecount()%2) == 0 then
  188.                 value.deltaXcur = value.curr_char_pos_x
  189.                 value.deltaXdiff = value.deltaXcur - value.deltaXold
  190.                 value.deltaYcur = value.curr_char_pos_y
  191.                 value.deltaYdiff = value.deltaYcur - value.deltaYold
  192.         end
  193.         gui.text(draw.col1,draw.row4,value.deltaXdiff,"cyan")
  194.         gui.text(draw.col2,draw.row4,value.deltaYdiff,"cyan")
  195.     gui.text(draw.col2,draw.row4,value.deltaYdiff,"cyan")
  196.         value.deltaXold = value.deltaXcur
  197.         value.deltaYold = value.deltaYcur
  198. end
  199.  
  200.  
  201. function GetObjectValues(obj_type,obj_value,slot_n)
  202.                 obj_value.slot_offset = slot_n * value.slot_interval
  203.                 obj_value.obj_id      = memory.readwordsigned(address[obj_type]+obj_value.slot_offset)
  204.                 obj_value.hp          = memory.readwordsigned(address[obj_type]+offset.hp+obj_value.slot_offset) --hp
  205. --              obj_value.hp          = string.format("%x",(address[obj_type]+obj_value.slot_offset)) -- show slot address
  206.                 obj_value.pos_x       = memory.readword(address[obj_type]+offset.x+obj_value.slot_offset)
  207.                 obj_value.pos_y       = memory.readword(address[obj_type]+offset.y+obj_value.slot_offset)
  208.                 obj_value.rel_pos_x   = obj_value.pos_x-value.cam_pos_x
  209.                 obj_value.rel_pos_y   = obj_value.pos_y-value.cam_pos_y
  210.                 obj_value.speed_x     = memory.readwordsigned(address[obj_type]+offset.speed_x+obj_value.slot_offset)
  211.                 obj_value.speed_y     = memory.readwordsigned(address[obj_type]+offset.speed_y+obj_value.slot_offset)
  212.                 obj_value.hb_size_x   = 16
  213.                 obj_value.hb_size_y   = 16
  214.                 obj_value.inm         = memory.readwordsigned(address[obj_type]+offset.inm+obj_value.slot_offset)
  215. end
  216.  
  217.  
  218. function ObjectInformation(obj_type,color,maxslots)
  219.         for slot_n = 0,maxslots do
  220.                 local obj_value = {}
  221.                 GetObjectValues(obj_type,obj_value,slot_n)
  222.  
  223.                 if obj_value.obj_id ~= 0 and
  224.                    --obj_value.hp > 0 and -- comment out this line to show all objects, including more enemy bullets
  225.                    obj_value.rel_pos_x > -20 and obj_value.rel_pos_x < 353 and
  226.                    obj_value.rel_pos_y > -12 and obj_value.rel_pos_y < 257 then
  227.  
  228.                         -- change color if hit
  229.                         if obj_value.inm > 0 then color_to_use = value.inm_color
  230.                         else color_to_use = color end
  231.  
  232.                         -- object hitbox
  233.                         gui.box(obj_value.rel_pos_x-(obj_value.hb_size_x/2),
  234.                                 obj_value.rel_pos_y-(obj_value.hb_size_y/2),
  235.                                 obj_value.rel_pos_x+(obj_value.hb_size_x/2),
  236.                                 obj_value.rel_pos_y+(obj_value.hb_size_y/2),
  237.                                 color_to_use .. value.hb_transparency)
  238.  
  239.                         -- object vector
  240.                         gui.line(obj_value.rel_pos_x,
  241.                                  obj_value.rel_pos_y,
  242.                                  obj_value.rel_pos_x+obj_value.speed_x,
  243.                                  obj_value.rel_pos_y+obj_value.speed_y,
  244.                                  color_to_use .. "FF")
  245.  
  246.                         -- object hp
  247.                         gui.text(obj_value.rel_pos_x,obj_value.rel_pos_y,obj_value.hp) --slot_n)
  248.  
  249.                 end -- if end
  250.  
  251.         end -- for end
  252. end
  253.  
  254.  
  255. function PlayerInformation(color)
  256.         if value.ranger_inm > 0 then color = value.inm_color end
  257.         if value.ranger_ghost > 0 then color = value.ghost_color end
  258.  
  259.         -- Ranger hitbox
  260.         gui.box(value.ranger_hb_rel_pos_x,
  261.                 value.ranger_hb_rel_pos_y,
  262.                 value.ranger_hb_rel_pos_x+value.ranger_hb_size,
  263.                 value.ranger_hb_rel_pos_y+value.ranger_hb_size,
  264.                 color .. value.hb_transparency)
  265.  
  266.         -- Ranger vector
  267.         gui.line(value.ranger_rel_pos_x,
  268.                  value.ranger_rel_pos_y,
  269.                  value.ranger_rel_pos_x+value.ranger_speed_x,
  270.                  value.ranger_rel_pos_y+value.ranger_speed_y,
  271.                  color)
  272.  
  273.         -- Ranger information
  274. --      gui.text(value.ranger_hb_rel_pos_x+2, value.ranger_hb_rel_pos_y+1, "X: "..value.ranger_pos_x)
  275. --      gui.text(value.ranger_hb_rel_pos_x+2, value.ranger_hb_rel_pos_y+1+8, "Y: "..value.ranger_pos_y)
  276. --      gui.text(value.ranger_hb_rel_pos_x+2, value.ranger_hb_rel_pos_y+1+16, "SX: "..value.ranger_speed_x)
  277. --      gui.text(value.ranger_hb_rel_pos_x+2, value.ranger_hb_rel_pos_y+1+24, "SY: "..value.ranger_speed_y)
  278.  
  279.         -- Exup hitbox
  280.         gui.box(value.exup_hb_rel_pos_x,
  281.                 value.exup_hb_rel_pos_y,
  282.                 value.exup_hb_rel_pos_x+value.ranger_hb_size,
  283.                 value.exup_hb_rel_pos_y+value.ranger_hb_size,
  284.                 color .. value.hb_transparency)
  285.  
  286.         -- Exup vector
  287.         gui.line(value.exup_rel_pos_x,
  288.                  value.exup_rel_pos_y+16,
  289.                  value.exup_rel_pos_x+value.exup_speed_x,
  290.                  value.exup_rel_pos_y+16+value.exup_speed_y,
  291.                  color)
  292.  
  293.         -- Ranger information
  294.         gui.text(value.exup_hb_rel_pos_x+2, value.exup_hb_rel_pos_y+1, "X: "..value.exup_pos_x)
  295.         gui.text(value.exup_hb_rel_pos_x+2, value.exup_hb_rel_pos_y+1+8, "Y: "..value.exup_pos_y)
  296.         gui.text(value.exup_hb_rel_pos_x+2, value.exup_hb_rel_pos_y+1+16, "SX: "..value.exup_speed_x)
  297.         gui.text(value.exup_hb_rel_pos_x+2, value.exup_hb_rel_pos_y+1+24, "SY: "..value.exup_speed_y)
  298. end
  299.  
  300.  
  301. -----------------
  302. -- Lag counter --
  303. -----------------
  304.  
  305. local waslagged = 0
  306. local lagCount = gens.lagcount()
  307. local lagColor = "#FFFFFF"
  308.  
  309. function LagCounter()
  310.         lagColor = "#FFFFFF"
  311.         if gens.lagged() then
  312.                 islagged = 1
  313.         else
  314.                 islagged = 0
  315.         end
  316.  
  317.     if (islagged == waslagged) then
  318.            lagCount = lagCount - 1 + 2*islagged
  319.            lagColor = "#00FF00"
  320.     end
  321.  
  322.         waslagged = islagged
  323. end
  324.  
  325. function LagCounterInformation()
  326.         gui.text(8,32,gens.framecount(),lagColor)
  327.         gui.text(8,40,lagCount,"#00FF00")
  328. end
  329.  
  330. input.registerhotkey(1, function()
  331.         lagCount = 0
  332.         gui.redraw()
  333. end)
  334.  
  335.  
  336. -----------------
  337. -- Bunnyhopper --
  338. -----------------
  339.  
  340. local skipNextFrame = 0
  341. local bunnyhop = 0
  342.  
  343. function GetFutureValues(future)
  344.         -- start setting up a portal in the present, so we can go back from the future if we need to
  345.         local bunnystate = savestate.create()
  346.         savestate.save(bunnystate)
  347.  
  348.         future.isLagged = 0
  349.         future.weAreLanding = 0
  350.  
  351.         -- go to the future and retrieve information
  352.         joypad.set(1, {right=true,down=true})
  353.         gens.emulateframeinvisible()
  354.         future.sx1 = memory.readwordsigned(address.ranger+offset.speed_x) + (memory.readbyte(address.ranger+offset.sub_speed_x) / 0x100)
  355.         future.sy1 = memory.readwordsigned(address.ranger+offset.speed_y) + (memory.readbyte(address.ranger+offset.sub_speed_y) / 0x100)
  356.  
  357.         -- if the future frame is lagged, we better prepare ourselves for it
  358.         if gens.lagged() then
  359.                 future.isLagged = 1
  360.                 if future.sx1 == 9 then
  361.                         skipNextFrame = 1
  362.                 end
  363.                 if future.sx1 == 0 and future.sy1 == 0 then
  364.                         bunnyhop = 1
  365.                 end
  366.         end
  367.  
  368.         -- go to the second future frame and retrieve even more information
  369.         joypad.set(1, {right=true,down=true})
  370.         gens.emulateframeinvisible()
  371.         future.sx2 = memory.readwordsigned(address.ranger+offset.speed_x) + (memory.readbyte(address.ranger+offset.sub_speed_x) / 0x100)
  372.         future.sy2 = memory.readwordsigned(address.ranger+offset.speed_y) + (memory.readbyte(address.ranger+offset.sub_speed_y) / 0x100)
  373.         if gens.lagged() and future.sx2 ~= 0 and future.sy2 == 0 and future.sy1 > 0 then
  374.                 future.weAreLanding = 1
  375.         end
  376.  
  377.         -- go to the third future frame and retrieve even more even more information
  378.         joypad.set(1, {right=true,down=true})
  379.         gens.emulateframeinvisible()
  380.         future.sx3 = memory.readwordsigned(address.ranger+offset.speed_x) + (memory.readbyte(address.ranger+offset.sub_speed_x) / 0x100)
  381.         future.sy3 = memory.readwordsigned(address.ranger+offset.speed_y) + (memory.readbyte(address.ranger+offset.sub_speed_y) / 0x100)
  382.         if not gens.lagged() and future.sx3 ~= 0 and future.sy3 == 0 and future.sy2 > 0 then
  383.                 future.weAreLanding = 1
  384.         end
  385.  
  386.         -- go back to the present while we're safe
  387.         savestate.load(bunnystate)
  388. end
  389.  
  390. function Bunnyhopper()
  391.         if value.bunnyhopMode ~= 1 then return end
  392.  
  393.         local input = {}
  394.         local future = {}
  395.  
  396.         GetFutureValues(future)
  397.  
  398.         if future.isLagged == 1 then -- don't set input for the next frame
  399.                 return
  400.         end
  401.  
  402.         -- x speed is 9, don't press right
  403.         if skipNextFrame == 1 then
  404.                 skipNextFrame = 0
  405.                 input.down = true
  406.                 joypad.set(1, input)
  407.                 return
  408.         end
  409.  
  410.         input.right = true
  411.         -- we're not landing at 8.5 speed, slow down the fall
  412.         if future.weAreLanding == 1 and (future.sx2 < 8.5 or future.sx3 < 8.5) then
  413.                 joypad.set(1, input)
  414.                 return
  415.         end
  416.         -- we have to hop here
  417.         if bunnyhop == 1 then
  418.                 input.up = true
  419.                 bunnyhop = 0
  420.         else
  421.                 -- if we're ducking, prepare to hop on the next frame
  422.                 if future.sx1 == 0 and future.sy1 == 0 then
  423.                         bunnyhop = 1
  424.                 end
  425.                 -- if we're not hopping or ducking, we're falling; then speed up the fall
  426.                 input.down = true
  427.         end
  428.         joypad.set(1, input)
  429. end
  430.  
  431. input.registerhotkey(2, function()
  432.         value.bunnyhopMode = math.abs(value.bunnyhopMode - 1)
  433.         bunnyhop = 0
  434.         Bunnyhopper()
  435.         gui.redraw()
  436. end)
  437.  
  438.  
  439. -----------------
  440. -- Save States --
  441. -----------------
  442.  
  443. savestate.registersave(function(slotnumber)
  444.         return waslagged,islagged,lagCount,lagColor,bunnyhop,skipNextFrame
  445. end)
  446.  
  447. savestate.registerload(function(slotnumber)
  448.         local a,b,c,d,e,f = savestate.loadscriptdata(slotnumber)
  449.         if a then
  450.                 waslagged = a
  451.                 islagged = b
  452.                 lagCount = c
  453.                 lagColor = d
  454.         end
  455.  
  456.         if e and f then
  457.                 bunnyhop = e
  458.                 skipNextFrame = f
  459.         end
  460.         Bunnyhopper()
  461. end)
  462.  
  463.  
  464. -------------------
  465. -- RNG Simulator --
  466. -------------------
  467.  
  468. function GetRandom()
  469. --      value.rng = memory.readlong(address.rng)
  470. --      value.rng = 0x7C705AEA
  471.  
  472.         regD1 = value.rng                                                                    -- MOVE.L  ($C118),D1
  473.         regD0 = regD1                                                                        -- MOVE.L  D1,D0
  474.         regD1 = SHIFT(regD1,-2)                                                              -- ASL.L   #2,D1
  475.         regD1 = regD1 + regD0                                                                -- ADD.L   D0,D1
  476.         regD1 = SHIFT(regD1,-3)                                                              -- ASL.L   #3,D1
  477.         regD1 = regD1 + regD0                                                                -- ADD.L   D0,D1
  478.         regD0 = OR(AND(regD1,0xFFFF),AND(regD0,0xFFFF0000))                                  -- MOVE.W  D1,D0
  479.         regD1 = OR(SHIFT(AND(regD1,0xFFFF),-16),AND(SHIFT(AND(regD1,0xFFFF0000),16),0xFFFF)) -- SWAP.W  D1
  480.         regD0 = OR(AND(regD0,0xFFFF0000),(AND(regD0+AND(regD1,0xFFFF),0xFFFF)))              -- ADD.W   D1,D0
  481.         regD1 = OR(AND(regD0,0xFFFF),AND(regD1,0xFFFF0000))                                  -- MOVE.W  D0,D1
  482.         regD1 = OR(SHIFT(AND(regD1,0xFFFF),-16),AND(SHIFT(AND(regD1,0xFFFF0000),16),0xFFFF)) -- SWAP.W  D1
  483.  
  484. --      gui.text(100,100,string.format("%X",regD0)..":"..string.format("%X",regD1),"red")
  485.         value.rng = regD1
  486.         return(regD0)
  487. end
  488.  
  489.  
  490. function Stage3Randomness()
  491.         local yinit,num2sub,rngtmp
  492.         local targetyi   = {336,416,336,416,416,400,336,336,432,416,336}
  493.         local targetaddy = {0xFF7F44,0xFF7F84,0xFF8044,0xFF8084,0xFF80C4,0xFF8A44,0xFF8D04,0xFF8D84,0xFF8E04,0xFF8E44,0xFF9744}
  494.         local targetslot = {5,6,9,10,11,49,60,62,64,65,101}
  495.         local numcolor   = { [0x400]="green", [0x800]="yellow", [0xC00]="orange" }
  496.         value.rng = memory.readlong(address.rng)
  497. --      value.rng = 0x583B78DA
  498. --      value.rng = 0x5BD9780A
  499.  
  500.         -- RNG advances 5 times after B2
  501.         for x=1,5 do
  502.                 GetRandom()
  503.         end
  504.  
  505.         -- subtract 1024*x to each target
  506.         for target=1,11 do
  507.                 if target == 11 then
  508.                         for x=1,38 do
  509.                                 GetRandom()
  510.                         end
  511.                 end
  512.                 currentYpos = memory.readwordsigned(address.enemy+offset.y+targetslot[target]*value.slot_interval)
  513.                 gui.text(33,30+8*target,currentYpos)
  514.                 rngtmp = GetRandom()
  515.                 num2sub = SHIFT(AND(rngtmp,7)+1,-8)*4
  516.                 color = "red"
  517.                 if num2sub < 0x1000 then color = numcolor[num2sub] end
  518.                 yinit = targetyi[target] - ( SHIFT(AND(rngtmp,7)+1,-8)*4 - 4 )
  519.                 gui.text(55,30+8*target,yinit,color)
  520.                 gui.text(100,30+8*target,string.format("%X",num2sub),color)
  521. --              print((targetaddy[target]-address.enemy)/0x40)
  522.         end
  523. end
RAW Paste Data