Advertisement
r57shell

Aero the Acro-bat 2 for TAS

May 27th, 2018
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.80 KB | None | 0 0
  1. -- script for Aero the Acro-Bat 2
  2. -- by r57shell
  3.  
  4. local scroll_x = 0
  5. local scroll_y = 0
  6.  
  7. function draw_trig(base)
  8.     if base ~= 0xFFFFFF then
  9.         if memory.readwordunsigned(base) <= 0x8000 then
  10.             local posx = memory.readwordunsigned(base+2)
  11.             local posy = memory.readwordunsigned(base+4)
  12.             local posxa = AND(posx,0xFFE0)
  13.             if posx ~= posxa then
  14.                 posx()
  15.             end
  16.             local posya = AND(posy,0xFFE0)
  17.             local x1 = AND(posxa+scroll_x-0x180,0xFFFF)+320/2
  18.             if x1 >= 0x8000 then
  19.                 x1 = -(0x10000-x1)
  20.             end
  21.             local x2 = x1+0x1F
  22.             local x3 = AND(posxa+scroll_x+0x40,0xFFFF)+320/2
  23.             if x3 >= 0x8000 then
  24.                 x3 = -(0x10000-x3)
  25.             end
  26.             local x4 = x3+0x1F
  27.             local y1 = AND(posya-scroll_y-0x120,0xFFFF)+224/2
  28.             if posy ~= posya then
  29.                 y1 = y1+0x20
  30.             end
  31.             if y1 >= 0x8000 then
  32.                 y1 = -(0x10000-y1)
  33.             end
  34.             local y2 = y1+0x160+0x1F
  35.             if posy ~= posya then
  36.                 y2 = y2-0x20
  37.             end
  38.             gui.box(x1,y1,x2,y2,"#00ff0000")
  39.             gui.box(x3,y1,x4,y2,"#ff000000")
  40.         end
  41.         draw_trig(memory.readwordunsigned(base+6)+0xFF0000)
  42.         draw_trig(memory.readwordunsigned(base+8)+0xFF0000)
  43.     end
  44. end
  45.  
  46. function draw_yet(base)
  47.     if base ~= 0xFFFFFF then
  48.         if memory.readwordunsigned(base) <= 0x8000 then
  49.             local posx = memory.readwordunsigned(base+2)
  50.             local posy = memory.readwordunsigned(base+4)
  51.             local posxa = AND(posx,0xFFE0)
  52.             local posya = AND(posy,0xFFF0)
  53.             if posx ~= posxa then
  54.                 posx()
  55.             end
  56.             if posy ~= posya then
  57.                 posx()
  58.             end
  59.             local x1 = AND(posxa+scroll_x-0x180,0xFFFF)+320/2
  60.             if x1 >= 0x8000 then
  61.                 x1 = -(0x10000-x1)
  62.             end
  63.             local x2 = x1+0x180+0x40+0x1F
  64.             local y1 = AND(posy-scroll_y+0x40,0xFFFF)+224/2
  65.             if y1 >= 0x8000 then
  66.                 y1 = -(0x10000-y1)
  67.             end
  68.             local y2 = y1+0xF
  69.             local y3 = AND(posy-scroll_y-0x120,0xFFFF)+224/2
  70.             if y3 >= 0x8000 then
  71.                 y3 = -(0x10000-y3)
  72.             end
  73.             local y4 = y3+0xF
  74.             gui.box(x1,y1,x2,y2,"#00ff0000")
  75.             gui.box(x1,y3,x2,y4,"#ff000000")
  76.         end
  77.         draw_yet(memory.readwordunsigned(base+10)+0xFF0000)
  78.         draw_yet(memory.readwordunsigned(base+12)+0xFF0000)
  79.     end
  80. end
  81.  
  82. function draw_enemy(base)
  83.     local x = memory.readwordunsigned(base+8)
  84.     local y = memory.readwordunsigned(base+12)
  85.     local x1 = x-1
  86.     local x2 = x+1
  87.     local y1 = y-1
  88.     local y2 = y+1
  89.     if memory.readword(base+0x14) >= 0 then
  90.         local bbox = memory.readlongunsigned(base+0x38)
  91.         x1 = x+memory.readword(bbox+0)
  92.         x2 = x1+memory.readword(bbox+2)-1
  93.         y1 = y+memory.readword(bbox+4)
  94.         y2 = y1+memory.readword(bbox+6)-1
  95.     end
  96.     gui.box(x1-AND(-scroll_x,0xFFFF), y1-scroll_y, x2-AND(-scroll_x,0xFFFF)+2, y2-scroll_y+2,"#ff000000")
  97. end
  98.  
  99. function draw_enemies()
  100.     local base = memory.readwordunsigned(0xFF3662)+0xFF0000
  101.     while base ~= 0xFFFFFF do
  102.         draw_enemy(base)
  103.         base = memory.readwordunsigned(base+2)+0xFF0000
  104.     end
  105. end
  106.  
  107. function draw_bullet(base)
  108.     local x = memory.readwordunsigned(base+0x1C)
  109.     local y = memory.readwordunsigned(base+0x20)
  110.     local x1 = x
  111.     local x2 = x+12
  112.     local y1 = y
  113.     local y2 = y+12
  114.     gui.box(x1-AND(-scroll_x,0xFFFF), y1-scroll_y, x2-AND(-scroll_x,0xFFFF)+2, y2-scroll_y+2,"#ff000000")
  115. end
  116.  
  117. function draw_bullets()
  118.     local base = memory.readwordunsigned(0xFF3BDA)+0xFF0000
  119.     while base ~= 0xFFFFFF do
  120.         draw_bullet(base)
  121.         base = memory.readwordunsigned(base+2)+0xFF0000
  122.     end
  123. end
  124.  
  125. function draw_aero()
  126.     local state = memory.readword(0xFF3688)
  127.     local dir = memory.readword(0xFF368A)
  128.     local x = memory.readwordunsigned(0xFF0176)
  129.     local y = memory.readwordunsigned(0xFF017A)
  130.     local x1 = x-12
  131.     local x2 = x
  132.     local y1 = y
  133.     local y2 = y+12
  134.     if state == 2 or state == 3 then
  135.         x1 = x-16-dir
  136.         x2 = x1+32
  137.         y1 = y+0x18
  138.         y2 = y1+16
  139.     end
  140.     if state == 1 then
  141.         x1 = x-16-dir
  142.         x2 = x1+32
  143.         y1 = y+4
  144.         y2 = y1+16
  145.     end
  146.     gui.box(x1-AND(-scroll_x,0xFFFF), y1-scroll_y, x2-AND(-scroll_x,0xFFFF)+2, y2-scroll_y+2,"#00ffff00")
  147.     gui.box(x-1-AND(-scroll_x,0xFFFF), y+9-1-scroll_y, x+1-AND(-scroll_x,0xFFFF), y+9+1-scroll_y,"#00ffff00")
  148. end
  149.  
  150. function draw_cell(px, py, val)
  151.     if val ~= 0 and AND(val,0x1000) ~= 0 then
  152.         local color = "#00ffff00"
  153.         local v2 = AND(val, 0x1FF)
  154.         local tt = memory.readbyte(0xFFFB9C+v2)
  155.         local cc = "#00CC00AA"
  156.         local v3 = memory.readbyteunsigned(0xFFF99C+v2)
  157.         local offs = memory.readlongunsigned(0xFFD9D8)
  158.         local mask = memory.readwordunsigned(offs+32*v3)
  159.         local j = 1
  160.         if memory.readlong(0x97F6+tt*4) == 0xB238 then
  161.             cc = "#00ffffaa"
  162.         end
  163.         for k = 0, 15 do
  164.             mask = memory.readwordunsigned(offs+32*v3+k*2)
  165.             if mask == 0 then
  166.             elseif mask == 0xFFFF then
  167.                 gui.drawline(px+k,py+0,px+k,py+15,cc)
  168.                 color = nil
  169.             else
  170.                 j = 1
  171.                 for i = 0, 15 do
  172.                     if AND(mask, j) ~= 0 then
  173.                         gui.setpixel(px+k,py+15-i, cc)
  174.                     end
  175.                     j = j * 2
  176.                 end
  177.                 color = nil
  178.             end
  179.         end
  180.         if tt == 0x49 or tt == 0x1D then
  181.             color = "#FF0000AA"
  182.         end
  183.         if color then
  184.             gui.box(px, py, px+15, py+15, color)
  185.         end
  186.     end
  187. end
  188.  
  189. function draw_cells()
  190.     local mw = memory.readwordunsigned(0xFFCE56)
  191.     local sx = AND(-scroll_x,0xFFFF)
  192.     for x = AND(-scroll_x,0xFFE0),AND(-scroll_x,0xFFE0)+10*32,32 do
  193.         for y = AND(scroll_y,0xFFE0),AND(scroll_y,0xFFE0)+10*32,32 do
  194.             local px = x - sx
  195.             local py = y - scroll_y
  196.             local idx = memory.readwordunsigned(0xFF5900+(x/16)+(y/32)*mw)
  197.             local addr = 0xFFA400 + AND(idx,0x3FF)*8
  198.             draw_cell(px,    py,      memory.readword(addr))
  199.             draw_cell(px+16, py,      memory.readword(addr+2))
  200.             draw_cell(px,    py + 16, memory.readword(addr+4))
  201.             draw_cell(px+16, py + 16, memory.readword(addr+6))
  202.         end
  203.     end
  204. end
  205.  
  206. gui.register(function ()
  207.     gui.box(320/2-1,224/2-1,320/2+1,224/2+1,"#ff000000")
  208.     scroll_x = memory.readwordunsigned(0xFFD114)
  209.     scroll_y = memory.readwordunsigned(0xFFD074)
  210.     draw_trig(memory.readwordunsigned(0xFFCB02)+0xFF0000)
  211.     draw_yet(memory.readwordunsigned(0xFFCB04)+0xFF0000)
  212.     draw_enemies()
  213.     draw_bullets()
  214.     draw_aero()
  215.     draw_cells()
  216. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement