Advertisement
Dessyreqt

PJBoy's Super Metroid Hitbox Script (modified by me)

Sep 21st, 2013
427
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 26.71 KB | None | 0 0
  1. DebugFlag = 0
  2. DoorListFlag = 1
  3. TASFlag = 0
  4. HAdjust = 0
  5. VAdjust = 0
  6. LockToScreen = true
  7. ShowEnemies = true
  8. doorList = {}
  9.  
  10. doors = {[0x88FE]=true, [0x890A]=true, [0x8916]=true, [0x8922]=true, [0x892E]=true, [0x893A]=true, [0x8946]=true, [0x8952]=true, [0x895E]=true, [0x896A]=true, [0x8976]=true, [0x8982]=true, [0x898E]=true, [0x899A]=true, [0x89A6]=true, [0x89B2]=true, [0x89BE]=true, [0x89CA]=true, [0x89D6]=true, [0x89E2]=true, [0x89EE]=true, [0x89FA]=true, [0x8A06]=true, [0x8A12]=true, [0x8A1E]=true, [0x8A2A]=true, [0x8A36]=true, [0x8A42]=true, [0x8A4E]=true, [0x8A5A]=true, [0x8A66]=true, [0x8A72]=true, [0x8A7E]=true, [0x8A8A]=true, [0x8A96]=true, [0x8AA2]=true, [0x8AAE]=true, [0x8ABA]=true, [0x8AC6]=true, [0x8AD2]=true, [0x8ADE]=true, [0x8AEA]=true, [0x8AF6]=true, [0x8B02]=true, [0x8B0E]=true, [0x8B1A]=true, [0x8B26]=true, [0x8B32]=true, [0x8B3E]=true, [0x8B4A]=true, [0x8B56]=true, [0x8B62]=true, [0x8B6E]=true, [0x8B7A]=true, [0x8B86]=true, [0x8B92]=true, [0x8B9E]=true, [0x8BAA]=true, [0x8BB6]=true, [0x8BC2]=true, [0x8BCE]=true, [0x8BDA]=true, [0x8BE6]=true, [0x8BF2]=true, [0x8BFE]=true, [0x8C0A]=true, [0x8C16]=true, [0x8C22]=true, [0x8C2E]=true, [0x8C3A]=true, [0x8C46]=true, [0x8C52]=true, [0x8C5E]=true, [0x8C6A]=true, [0x8C76]=true, [0x8C82]=true, [0x8C8E]=true, [0x8C9A]=true, [0x8CA6]=true, [0x8CB2]=true, [0x8CBE]=true, [0x8CCA]=true, [0x8CD6]=true, [0x8CE2]=true, [0x8CEE]=true, [0x8CFA]=true, [0x8D06]=true, [0x8D12]=true, [0x8D1E]=true, [0x8D2A]=true, [0x8D36]=true, [0x8D42]=true, [0x8D4E]=true, [0x8D5A]=true, [0x8D66]=true, [0x8D72]=true, [0x8D7E]=true, [0x8D8A]=true, [0x8D96]=true, [0x8DA2]=true, [0x8DAE]=true, [0x8DBA]=true, [0x8DC6]=true, [0x8DD2]=true, [0x8DDE]=true, [0x8DEA]=true, [0x8DF6]=true, [0x8E02]=true, [0x8E0E]=true, [0x8E1A]=true, [0x8E26]=true, [0x8E32]=true, [0x8E3E]=true, [0x8E4A]=true, [0x8E56]=true, [0x8E62]=true, [0x8E6E]=true, [0x8E7A]=true, [0x8E86]=true, [0x8E92]=true, [0x8E9E]=true, [0x8EAA]=true, [0x8EB6]=true, [0x8EC2]=true, [0x8ECE]=true, [0x8EDA]=true, [0x8EE6]=true, [0x8EF2]=true, [0x8EFE]=true, [0x8F0A]=true, [0x8F16]=true, [0x8F22]=true, [0x8F2E]=true, [0x8F3A]=true, [0x8F46]=true, [0x8F52]=true, [0x8F5E]=true, [0x8F6A]=true, [0x8F76]=true, [0x8F82]=true, [0x8F8E]=true, [0x8F9A]=true, [0x8FA6]=true, [0x8FB2]=true, [0x8FBE]=true, [0x8FCA]=true, [0x8FD6]=true, [0x8FE2]=true, [0x8FEE]=true, [0x8FFA]=true, [0x9006]=true, [0x9012]=true, [0x901E]=true, [0x902A]=true, [0x9036]=true, [0x9042]=true, [0x904E]=true, [0x905A]=true, [0x9066]=true, [0x9072]=true, [0x907E]=true, [0x908A]=true, [0x9096]=true, [0x90A2]=true, [0x90AE]=true, [0x90BA]=true, [0x90C6]=true, [0x90D2]=true, [0x90DE]=true, [0x90EA]=true, [0x90F6]=true, [0x9102]=true, [0x910E]=true, [0x911A]=true, [0x9126]=true, [0x9132]=true, [0x913E]=true, [0x914A]=true, [0x9156]=true, [0x9162]=true, [0x916E]=true, [0x917A]=true, [0x9186]=true, [0x9192]=true, [0x919E]=true, [0x91AA]=true, [0x91B6]=true, [0x91C2]=true, [0x91CE]=true, [0x91DA]=true, [0x91E6]=true, [0x91F2]=true, [0x91FE]=true, [0x920A]=true, [0x9216]=true, [0x9222]=true, [0x922E]=true, [0x923A]=true, [0x9246]=true, [0x9252]=true, [0x925E]=true, [0x926A]=true, [0x9276]=true, [0x9282]=true, [0x928E]=true, [0x929A]=true, [0x92A6]=true, [0x92B2]=true, [0x92BE]=true, [0x92CA]=true, [0x92D6]=true, [0x92E2]=true, [0x92EE]=true, [0x92FA]=true, [0x9306]=true, [0x9312]=true, [0x931E]=true, [0x932A]=true, [0x9336]=true, [0x9342]=true, [0x934E]=true, [0x935A]=true, [0x9366]=true, [0x9372]=true, [0x937E]=true, [0x938A]=true, [0x9396]=true, [0x93A2]=true, [0x93AE]=true, [0x93BA]=true, [0x93C6]=true, [0x93D2]=true, [0x93DE]=true, [0x93EA]=true, [0x93F6]=true, [0x9402]=true, [0x940E]=true, [0x941A]=true, [0x9426]=true, [0x9432]=true, [0x943E]=true, [0x944A]=true, [0x9456]=true, [0x9462]=true, [0x946E]=true, [0x947A]=true, [0x9486]=true, [0x9492]=true, [0x949E]=true, [0x94AA]=true, [0x94B6]=true, [0x94C2]=true, [0x94CE]=true, [0x94DA]=true, [0x94E6]=true, [0x94F2]=true, [0x94FE]=true, [0x950A]=true, [0x9516]=true, [0x9522]=true, [0x952E]=true, [0x953A]=true, [0x9546]=true, [0x9552]=true, [0x955E]=true, [0x956A]=true, [0x9576]=true, [0x9582]=true, [0x958E]=true, [0x959A]=true, [0x95A6]=true, [0x95B2]=true, [0x95BE]=true, [0x95CA]=true, [0x95D6]=true, [0x95E2]=true, [0x95EE]=true, [0x95FA]=true, [0x9606]=true, [0x9612]=true, [0x961E]=true, [0x962A]=true, [0x9636]=true, [0x9642]=true, [0x964E]=true, [0x965A]=true, [0x9666]=true, [0x9672]=true, [0x967E]=true, [0x968A]=true, [0x9696]=true, [0x96A2]=true, [0x96AE]=true, [0x96BA]=true, [0x96C6]=true, [0x96D2]=true, [0x96DE]=true, [0x96EA]=true, [0x96F6]=true, [0x9702]=true, [0x970E]=true, [0x971A]=true, [0x9726]=true, [0x9732]=true, [0x973E]=true, [0x974A]=true, [0x9756]=true, [0x9762]=true, [0x976E]=true, [0x977A]=true, [0x9786]=true, [0x9792]=true, [0x979E]=true, [0x97AA]=true, [0x97B6]=true, [0x97C2]=true, [0x97CE]=true, [0x97DA]=true, [0x97E6]=true, [0x97F2]=true, [0x97FE]=true, [0x980A]=true, [0x9816]=true, [0x9822]=true, [0x982E]=true, [0x983A]=true, [0x9846]=true, [0x9852]=true, [0x985E]=true, [0x986A]=true, [0x9876]=true, [0x9882]=true, [0x988E]=true, [0x989A]=true, [0x98A6]=true, [0x98B2]=true, [0x98BE]=true, [0x98CA]=true, [0x98D6]=true, [0x98E2]=true, [0x98EE]=true, [0x98FA]=true, [0x9906]=true, [0x9912]=true, [0x991E]=true, [0x992A]=true, [0x9936]=true, [0x9942]=true, [0x994E]=true, [0x995A]=true, [0x9966]=true, [0x9972]=true, [0x997E]=true, [0x998A]=true, [0x9996]=true, [0x99A2]=true, [0x99AE]=true, [0x99BA]=true, [0x99C6]=true, [0x99D2]=true, [0x99DE]=true, [0x99EA]=true, [0x99F6]=true, [0x9A02]=true, [0x9A0E]=true, [0x9A1A]=true, [0x9A26]=true, [0x9A32]=true, [0x9A3E]=true, [0x9A4A]=true, [0x9A56]=true, [0x9A62]=true, [0x9A6E]=true, [0x9A7A]=true, [0x9A86]=true, [0x9A92]=true, [0x9A9E]=true, [0x9AAA]=true, [0x9AB6]=true, [0xA18C]=true, [0xA198]=true, [0xA1A4]=true, [0xA1B0]=true, [0xA1BC]=true, [0xA1C8]=true, [0xA1D4]=true, [0xA1E0]=true, [0xA1EC]=true, [0xA1F8]=true, [0xA204]=true, [0xA210]=true, [0xA21C]=true, [0xA228]=true, [0xA234]=true, [0xA240]=true, [0xA24C]=true, [0xA258]=true, [0xA264]=true, [0xA270]=true, [0xA27C]=true, [0xA288]=true, [0xA294]=true, [0xA2A0]=true, [0xA2AC]=true, [0xA2B8]=true, [0xA2C4]=true, [0xA2D0]=true, [0xA2DC]=true, [0xA2E8]=true, [0xA2F4]=true, [0xA300]=true, [0xA30C]=true, [0xA318]=true, [0xA324]=true, [0xA330]=true, [0xA33C]=true, [0xA348]=true, [0xA354]=true, [0xA360]=true, [0xA36C]=true, [0xA378]=true, [0xA384]=true, [0xA390]=true, [0xA39C]=true, [0xA3A8]=true, [0xA3B4]=true, [0xA3C0]=true, [0xA3CC]=true, [0xA3D8]=true, [0xA3E4]=true, [0xA3F0]=true, [0xA3FC]=true, [0xA408]=true, [0xA414]=true, [0xA420]=true, [0xA42C]=true, [0xA438]=true, [0xA444]=true, [0xA450]=true, [0xA45C]=true, [0xA468]=true, [0xA474]=true, [0xA480]=true, [0xA48C]=true, [0xA498]=true, [0xA4A4]=true, [0xA4B0]=true, [0xA4BC]=true, [0xA4C8]=true, [0xA4D4]=true, [0xA4E0]=true, [0xA4EC]=true, [0xA4F8]=true, [0xA504]=true, [0xA510]=true, [0xA51C]=true, [0xA528]=true, [0xA534]=true, [0xA540]=true, [0xA54C]=true, [0xA558]=true, [0xA564]=true, [0xA570]=true, [0xA57C]=true, [0xA588]=true, [0xA594]=true, [0xA5A0]=true, [0xA5AC]=true, [0xA5B8]=true, [0xA5C4]=true, [0xA5D0]=true, [0xA5DC]=true, [0xA5E8]=true, [0xA5F4]=true, [0xA600]=true, [0xA60C]=true, [0xA618]=true, [0xA624]=true, [0xA630]=true, [0xA63C]=true, [0xA648]=true, [0xA654]=true, [0xA660]=true, [0xA66C]=true, [0xA678]=true, [0xA684]=true, [0xA690]=true, [0xA69C]=true, [0xA6A8]=true, [0xA6B4]=true, [0xA6C0]=true, [0xA6CC]=true, [0xA6D8]=true, [0xA6E4]=true, [0xA6F0]=true, [0xA6FC]=true, [0xA708]=true, [0xA714]=true, [0xA720]=true, [0xA72C]=true, [0xA738]=true, [0xA744]=true, [0xA750]=true, [0xA75C]=true, [0xA768]=true, [0xA774]=true, [0xA780]=true, [0xA78C]=true, [0xA798]=true, [0xA7A4]=true, [0xA7B0]=true, [0xA7BC]=true, [0xA7C8]=true, [0xA7D4]=true, [0xA7E0]=true, [0xA7EC]=true, [0xA7F8]=true, [0xA810]=true, [0xA828]=true, [0xA834]=true, [0xA840]=true, [0xA84C]=true, [0xA858]=true, [0xA864]=true, [0xA870]=true, [0xA87C]=true, [0xA888]=true, [0xA894]=true, [0xA8A0]=true, [0xA8AC]=true, [0xA8B8]=true, [0xA8C4]=true, [0xA8D0]=true, [0xA8DC]=true, [0xA8E8]=true, [0xA8F4]=true, [0xA900]=true, [0xA90C]=true, [0xA918]=true, [0xA924]=true, [0xA930]=true, [0xA93C]=true, [0xA948]=true, [0xA954]=true, [0xA960]=true, [0xA96C]=true, [0xA978]=true, [0xA984]=true, [0xA990]=true, [0xA99C]=true, [0xA9A8]=true, [0xA9B4]=true, [0xA9C0]=true, [0xA9CC]=true, [0xA9D8]=true, [0xA9E4]=true, [0xA9F0]=true, [0xA9FC]=true, [0xAA08]=true, [0xAA14]=true, [0xAA20]=true, [0xAA2C]=true, [0xAA38]=true, [0xAA44]=true, [0xAA50]=true, [0xAA5C]=true, [0xAA68]=true, [0xAA74]=true, [0xAA80]=true, [0xAA8C]=true, [0xAA98]=true, [0xAAA4]=true, [0xAAB0]=true, [0xAABC]=true, [0xAAC8]=true, [0xAAD4]=true, [0xAAE0]=true, [0xAAEC]=true, [0xAAF8]=true, [0xAB04]=true, [0xAB10]=true, [0xAB1C]=true, [0xAB28]=true, [0xAB34]=true, [0xAB40]=true, [0xAB4C]=true, [0xAB58]=true, [0xAB64]=true, [0xAB70]=true, [0xAB7C]=true, [0xAB88]=true, [0xAB94]=true, [0xABA0]=true, [0xABAC]=true, [0xABB8]=true, [0xABC4]=true, [0xABCF]=true, [0xABDA]=true, [0xABE5]=true}
  11. slope = {
  12.     [0x00] = function ()
  13.         gui.box(TileX, TileY+8*VFlip, TileX+15*HFlip, TileY+15*VFlip, "clear", "green")
  14.     end,
  15.     [0x01] = function ()
  16.         gui.box(TileX+8*HFlip, TileY, TileX+15*HFlip, TileY+15*VFlip, "clear", "green")
  17.     end,
  18.     [0x02] = function ()
  19.         gui.box(TileX+8*HFlip, TileY+8*VFlip, TileX+15*HFlip, TileY+15*VFlip, "clear", "green")
  20.     end,
  21.     [0x03] = function ()
  22.         gui.line(TileX+8*HFlip, TileY, TileX+15*HFlip, TileY, "green")
  23.         gui.line(TileX+8*HFlip, TileY, TileX+8*HFlip, TileY+7*VFlip, "green")
  24.         gui.line(TileX+15*HFlip, TileY, TileX+15*HFlip, TileY+15*VFlip, "green")
  25.         gui.line(TileX, TileY+8*VFlip, TileX+7*HFlip, TileY+8*VFlip, "green")
  26.         gui.line(TileX, TileY+8*VFlip, TileX, TileY+15*VFlip, "green")
  27.         gui.line(TileX, TileY+15*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  28.     end,
  29.     [0x05] = function ()
  30.         gui.line(TileX, TileY+15*VFlip, TileX+7*HFlip, TileY+8*VFlip, "green")
  31.         gui.line(TileX+8*HFlip, TileY+8*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  32.         gui.line(TileX, TileY+15*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  33.     end,
  34.     [0x06] = function ()
  35.         gui.line(TileX, TileY+15*VFlip, TileX+7*HFlip, TileY, "green")
  36.         gui.line(TileX+8*HFlip, TileY, TileX+15*HFlip, TileY+15*VFlip, "green")
  37.         gui.line(TileX, TileY+15*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  38.     end,
  39.     [0x07] = function ()
  40.         gui.box(TileX, TileY+8*VFlip, TileX+15*HFlip, TileY+15*VFlip, "clear", "green")
  41.     end,
  42.     [0x0E] = function ()
  43.         gui.line(TileX, TileY+13*VFlip, TileX+13*HFlip, TileY, "green")
  44.         gui.line(TileX, TileY+13*VFlip, TileX, TileY+15*VFlip, "green")
  45.         gui.line(TileX+13*HFlip, TileY, TileX+15*HFlip, TileY, "green")
  46.         gui.line(TileX+15*HFlip, TileY, TileX+15*HFlip, TileY+15*VFlip, "green")
  47.         gui.line(TileX, TileY+15*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  48.     end,
  49.     [0x0F] = function ()
  50.         gui.line(TileX, TileY+15*VFlip, TileX+5*HFlip, TileY+14*VFlip, "green")
  51.         gui.line(TileX+6*HFlip, TileY+13*VFlip, TileX+9*HFlip, TileY+12*VFlip, "green")
  52.         gui.line(TileX+10*HFlip, TileY+11*VFlip, TileX+11*HFlip, TileY+10*VFlip, "green")
  53.         gui.line(TileX+12*HFlip, TileY+9*VFlip, TileX+13*HFlip, TileY+6*VFlip, "green")
  54.         gui.line(TileX+14*HFlip, TileY+5*VFlip, TileX+15*HFlip, TileY, "green")
  55.         gui.line(TileX+15*HFlip, TileY, TileX+15*HFlip, TileY+15*VFlip, "green")
  56.         gui.line(TileX, TileY+15*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  57.     end,
  58.     [0x12] = function ()
  59.         gui.line(TileX, TileY+15*VFlip, TileX+15*HFlip, TileY, "green")
  60.         gui.line(TileX+15*HFlip, TileY, TileX+15*HFlip, TileY+15*VFlip, "green")
  61.         gui.line(TileX, TileY+15*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  62.     end,
  63.     [0x13] = function ()
  64.         gui.box(TileX, TileY, TileX+15*HFlip, TileY+15*VFlip, "clear", "green")
  65.     end,
  66.     [0x14] = function ()
  67.         gui.line(TileX+8*HFlip, TileY+15*VFlip, TileX+15*HFlip, TileY+8*VFlip, "green")
  68.         gui.line(TileX+15*HFlip, TileY+8*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  69.         gui.line(TileX+8*HFlip, TileY+15*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  70.     end,
  71.     [0x15] = function ()
  72.         gui.line(TileX+8*HFlip, TileY, TileX+15*HFlip, TileY, "green")
  73.         gui.line(TileX+15*HFlip, TileY, TileX+15*HFlip, TileY+15*VFlip, "green")
  74.         gui.line(TileX, TileY+7*VFlip, TileX+7*HFlip, TileY, "green")
  75.         gui.line(TileX, TileY+8*VFlip, TileX, TileY+15*VFlip, "green")
  76.         gui.line(TileX, TileY+15*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  77.     end,
  78.     [0x16] = function ()
  79.         gui.line(TileX, TileY+15*VFlip, TileX+15*HFlip, TileY+8*VFlip, "green")
  80.         gui.line(TileX+15*HFlip, TileY+8*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  81.         gui.line(TileX, TileY+15*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  82.     end,
  83.     [0x17] = function ()
  84.         gui.line(TileX, TileY+7*VFlip, TileX+15*HFlip, TileY, "green")
  85.         gui.line(TileX, TileY+8*VFlip, TileX, TileY+15*VFlip, "green")
  86.         gui.line(TileX+15*HFlip, TileY, TileX+15*HFlip, TileY+15*VFlip, "green")
  87.         gui.line(TileX, TileY+15*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  88.     end,
  89.     [0x18] = function ()
  90.         gui.line(TileX, TileY+15*VFlip, TileX+15*HFlip, TileY+11*VFlip, "green")
  91.         gui.line(TileX+15*HFlip, TileY+11*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  92.         gui.line(TileX, TileY+15*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  93.     end,
  94.     [0x19] = function ()
  95.         gui.line(TileX, TileY+10*VFlip, TileX+15*HFlip, TileY+5*VFlip, "green")
  96.         gui.line(TileX, TileY+10*VFlip, TileX, TileY+15*VFlip, "green")
  97.         gui.line(TileX+15*HFlip, TileY+5*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  98.         gui.line(TileX, TileY+15*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  99.     end,
  100.     [0x1A] = function ()
  101.         gui.line(TileX, TileY+4*VFlip, TileX+15*HFlip, TileY, "green")
  102.         gui.line(TileX, TileY+4*VFlip, TileX, TileY+15*VFlip, "green")
  103.         gui.line(TileX+15*HFlip, TileY, TileX+15*HFlip, TileY+15*VFlip, "green")
  104.         gui.line(TileX, TileY+15*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  105.     end,
  106.     [0x1B] = function ()
  107.         gui.line(TileX+8*HFlip, TileY+15*VFlip, TileX+15*HFlip, TileY, "green")
  108.         gui.line(TileX+15*HFlip, TileY, TileX+15*HFlip, TileY+15*VFlip, "green")
  109.         gui.line(TileX+8*HFlip, TileY+15*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  110.     end,
  111.     [0x1C] = function ()
  112.         gui.line(TileX, TileY+15*VFlip, TileX+7*HFlip, TileY, "green")
  113.         gui.line(TileX+8*HFlip, TileY, TileX+15*HFlip, TileY, "green")
  114.         gui.line(TileX+15*HFlip, TileY, TileX+15*HFlip, TileY+15*VFlip, "green")
  115.         gui.line(TileX, TileY+15*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  116.     end,
  117.     [0x1D] = function ()
  118.         gui.line(TileX+10*HFlip, TileY+15*VFlip, TileX+15*HFlip, TileY, "green")
  119.         gui.line(TileX+15*HFlip, TileY, TileX+15*HFlip, TileY+15*VFlip, "green")
  120.         gui.line(TileX+10*HFlip, TileY+15*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  121.     end,
  122.     [0x1E] = function ()
  123.         gui.line(TileX+5*HFlip, TileY+15*VFlip, TileX+10*HFlip, TileY, "green")
  124.         gui.line(TileX+10*HFlip, TileY, TileX+15*HFlip, TileY, "green")
  125.         gui.line(TileX+15*HFlip, TileY, TileX+15*HFlip, TileY+15*VFlip, "green")
  126.         gui.line(TileX+5*HFlip, TileY+15*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  127.     end,
  128.     [0x1F] = function ()
  129.         gui.line(TileX, TileY+15*VFlip, TileX+5*HFlip, TileY, "green")
  130.         gui.line(TileX+5*HFlip, TileY, TileX+15*HFlip, TileY, "green")
  131.         gui.line(TileX+15*HFlip, TileY, TileX+15*HFlip, TileY+15*VFlip, "green")
  132.         gui.line(TileX, TileY+15*VFlip, TileX+15*HFlip, TileY+15*VFlip, "green")
  133.     end
  134. }
  135. outline = {
  136.     [0x00] = function ()
  137.     end, -- Air
  138.     [0x01] = function ()
  139.         local b = memory.readbyte(BTS)
  140.         if AND(b, 0x40) ~= 0 then
  141.             TileX = TileX+15
  142.             HFlip = -1
  143.         else
  144.             HFlip = 1
  145.         end
  146.         -- Inverts the horizontal co-ordinates of the lines
  147.         if AND(b, 0x80) ~= 0 then
  148.             TileY = TileY+15
  149.             VFlip = -1
  150.         else
  151.             VFlip = 1
  152.         end
  153.         -- Inverts the vertical co-ordinates of the lines
  154.         slopefunction = slope[AND(memory.readbyte(BTS), 0x1F)] or function () gui.box(TileX, TileY, TileX+15*HFlip, TileY+15*VFlip, "clear", "purple") end
  155.         slopefunction()
  156.     end, -- Slope
  157.     [0x02] = function ()
  158.     end, -- Air, tricks X-ray
  159.     [0x03] = function ()
  160.         gui.box(TileX, TileY, TileX+15, TileY+15, "clear", "blue")
  161.     end, -- Treadmill
  162.     [0x05] = function ()
  163.         stack = stack + 1
  164.         local b = memory.readbytesigned(BTS)
  165.         if stack < 16 and (b ~= 0) then
  166.             BTS = BTS + b
  167.             Clip = Clip + SHIFT(b, -1)
  168.             outlinefunction = outline[SHIFT(memory.readshort(Clip), 12)] or function() gui.box(TileX, TileY, TileX+15, TileY+15, "clear", "purple") end
  169.             outlinefunction()
  170.         else
  171.             gui.box(TileX, TileY, TileX+15, TileY+15, "clear", "purple")
  172.         end
  173.     end, -- Horizontal extend
  174.     [0x08] = function ()
  175.         gui.box(TileX, TileY, TileX+15, TileY+15, "clear", "red")
  176.     end, -- Normal block
  177.     [0x09] = function ()
  178.         door = memory.readshort(0x8F0000 + memory.readshort(0x7E07B5) + 2*AND(memory.readbyte(BTS), 0x7F))
  179.         if door == 0x0000 then
  180.             gui.box(TileX, TileY, TileX+15, TileY+15, "clear", "red")
  181.         elseif doors[door] then
  182.             gui.box(TileX, TileY, TileX+15, TileY+15, "clear", "cyan")
  183.             gui.text(TileX+4, TileY+8, string.format("%02X",memory.readbyte(BTS)), "orange")
  184.         else
  185.             gui.box(TileX, TileY, TileX+15, TileY+15, "clear", "yellow")
  186.         end
  187.     end, -- Transition block
  188.     [0x0A] = function ()
  189.         gui.box(TileX, TileY, TileX+15, TileY+15, "clear", "blue")
  190.     end, -- Spike block
  191.     [0x0B] = function ()
  192.         gui.box(TileX, TileY, TileX+15, TileY+15, "clear", "blue")
  193.     end, -- Crumble block
  194.     [0x0C] = function ()
  195.         local b = memory.readbyte(BTS)
  196.         if b >= 0x40 and b <= 0x43 then
  197.             gui.box(TileX, TileY, TileX+15, TileY+15, "clear", "orange")
  198.         else
  199.             gui.box(TileX, TileY, TileX+15, TileY+15, "clear", "blue")
  200.         end
  201.     -- makes doors orange
  202.     end, -- Shot block
  203.     [0x0D] = function ()
  204.         stack = stack + 1
  205.         local b = memory.readbytesigned(BTS)
  206.         if stack < 16 and (b ~= 0) then
  207.             BTS = BTS + b*width
  208.             Clip = Clip + SHIFT(b*width, -1)
  209.             outlinefunction = outline[SHIFT(memory.readshort(Clip), 12)] or function() gui.box(TileX, TileY, TileX+15, TileY+15, "clear", "purple") end
  210.             outlinefunction()
  211.         else
  212.             gui.box(TileX, TileY, TileX+15, TileY+15, "clear", "purple")
  213.         end
  214.     end, -- Vertical extend
  215.     [0x0E] = function ()
  216.         gui.box(TileX, TileY, TileX+15, TileY+15, "clear", "blue")
  217.     end, -- Grapple block
  218.     [0x0F] = function ()
  219.         gui.box(TileX, TileY, TileX+15, TileY+15, "clear", "blue")
  220.     end -- Bomb block
  221. }
  222.  
  223. for i=0,0x7F do
  224.     doorList[i] = 0
  225. end
  226.  
  227. while true do
  228. if memory.readbyte(0x7E0998) == 0x08 then
  229.     local samusX, samusY = memory.readshort(0x7E0AF6), memory.readshort(0x7E0AFA)
  230.  
  231.     local cameraX, cameraY = AND(samusX-128+HAdjust, 0xFFFF), AND(samusY-112+VAdjust, 0xFFFF)
  232.     if LockToScreen then
  233.         cameraX = memory.readword(0x7E0911)
  234.         cameraY = memory.readword(0x7E0915)
  235.     end
  236.    
  237.     -- these are the co-ordinates of the top-left of the screen
  238.     if cameraX >= 10000 then
  239.         cameraX = cameraX-65535
  240.     end
  241.  
  242.     if cameraY >= 10000 then
  243.         cameraY = cameraY-65535
  244.     end
  245.     -- This is meant to fix the attrocious lag when you reach the side of the screen (fixed by lioran) 
  246.     width = memory.readshort(0x7E07A5)
  247.     -- this is how wide the room is in blocks
  248.     gui.line(256-AND(cameraX, 0x00FF), 0, 256-AND(cameraX, 0x00FF), 223, "#FFFFFF")
  249.     gui.line(0, 256-AND(cameraY, 0x00FF), 255, 256-AND(cameraY, 0x00FF), "#FFFFFF")
  250.     for y=0,14 do
  251.         for x=0,16 do
  252.             stack = 0
  253.             -- for when garbage data causes extend blocks that make infinate loops
  254.             TileX, TileY = x*16 - AND(cameraX, 0x000F), y*16 - AND(cameraY, 0x000F)
  255.             -- this if for pixel-aligning the grid, because the screen doesn't just scroll per block!
  256.             a = SHIFT(AND(cameraX+x*16, 0xFFFF), 4) + AND(SHIFT(AND(cameraY+y*16, 0xFFF), 4)*width, 0xFFFF)
  257.             -- get block's tile number
  258.             BTS = 0x7F0000 + AND(0x6402+a, 0xFFFF)
  259.             -- BTS of block
  260.             Clip = 0x7F0000 + AND(0x0002+a*2, 0xFFFF)
  261.             -- clipdata of block
  262.             if DebugFlag ~= 0 then
  263.                 gui.text(TileX+4, TileY, string.format("%02X",SHIFT(memory.readshort(Clip), 12)), "red")
  264.                 --gui.text(TileX+4, TileY+4, string.format("%02X",AND(memory.readshort(Clip), 0x00FF)), "red")
  265.                 gui.text(TileX+4, TileY+8, string.format("%02X",memory.readbyte(BTS)), "orange")
  266.             end
  267.             outlinefunction = outline[SHIFT(memory.readshort(Clip), 12)] or function() gui.box(TileX, TileY, TileX+15, TileY+15, "clear", "purple") end
  268.             outlinefunction()
  269.             -- that's for the block's clipdata nibble
  270.         end
  271.     end
  272.    
  273.  
  274.     do
  275.         local cX = SHIFT(cameraX, 4)
  276.         local cY = SHIFT(AND(cameraY, 0xFFF), 4)
  277.         local clip = 0x7F0000 + AND(2 + (cX + cY*width)*2, 0xFFFF)
  278.         local clipend = 0x7F0002 + 0x1FE*width+0x1FFE
  279.         local btsend = 0x7F6402 + width*memory.readshort(0x7E07A7)
  280.         gui.text(100, 200, "Room ID: " .. memory.readword(0x7e079c))
  281.         --gui.text(0, 0, string.format("cameraX: %03X\ncameraY: %03X\nClip: %X\nClip end: %X\nBTS end: %X", cX, cY, clip, clipend, btsend), "#00FFFF")
  282.         if DoorListFlag ~= 0 then
  283.             doorOut = memory.readshort(0x7E07B5)
  284.             for i=0,SHIFT(clipend-0x7F0002, 1) do
  285.                 if AND(memory.readbyte(0x7F0000 + AND(3+i*2, 0xFFFF)), 0xF0) == 0x90 then
  286.                     bts = AND(memory.readbyte(0x7F0000 + AND(0x6402+i, 0xFFFF)), 0x7F)
  287.                     if doors[memory.readshort(0x8F0000 + doorOut + 2*bts)] then
  288.                         doorList[bts] = doorList[bts]+1
  289.                     end
  290.                 end
  291.             end
  292.             DoorListFlag = 0
  293.         end
  294.         y = 216
  295.         for j=0,0x7F do
  296.             i=0x7F-j
  297.             if doorList[i] ~= 0 then
  298.                 gui.text(0, y, string.format("%02Xx%i", i, doorList[i]), "#00FFFF")
  299.                 y = y-8
  300.             end
  301.         end
  302.     end
  303.  
  304.     if ShowEnemies then
  305.         for i=0,31 do
  306.             local enemyX, enemyY = memory.readshort(0x7E0F7A + i*64), memory.readshort(0x7E0F7E + i*64)
  307.             local eradiusX, eradiusY = memory.readshortsigned(0x7E0F82 + i*64), memory.readshortsigned(0x7E0F84 + i*64)
  308.             local topleft = {enemyX - cameraX - eradiusX, enemyY - cameraY - eradiusY}
  309.             local bottomright = {enemyX - cameraX + eradiusX, enemyY - cameraY + eradiusY}
  310.             gui.box(enemyX - cameraX - eradiusX, enemyY - cameraY - eradiusY, enemyX - cameraX + eradiusX, enemyY - cameraY + eradiusY, "clear", "#808080")
  311.             -- draw enemy hitbox
  312.             local enemyhealth = memory.readshort(0x7E0F8C + i*64)
  313.             local enemyspawnhealth = memory.readshort(0xA00004 + memory.readshort(0x7E0F78 + i*64))
  314.             if enemyspawnhealth ~= 0 then
  315.                 gui.text(topleft[1], topleft[2]-16, enemyhealth .. "/" .. enemyspawnhealth, "#808080")
  316.                 -- show enemy health
  317.                 if enemyhealth ~= 0 then
  318.                     gui.box(topleft[1], topleft[2]-8, topleft[1] + enemyhealth/enemyspawnhealth*32, topleft[2]-5, "#606060")
  319.                     gui.box(topleft[1], topleft[2]-8, topleft[1] + 32, topleft[2]-5, "clear", "#808080")
  320.                     -- draw enemy health bar
  321.                 end
  322.             end
  323.         end
  324.     end
  325.  
  326.     for i=0,9 do
  327.         local projectileX, projectileY = memory.readshort(0x7E0B64 + i*2), memory.readshort(0x7E0B78 + i*2)
  328.         local pradiusX, pradiusY = memory.readshortsigned(0x7E0BB4 + i*2), memory.readshortsigned(0x7E0BC8 + i*2)
  329.         local topleft = {projectileX - cameraX - pradiusX, projectileY - cameraY - pradiusY}
  330.         local bottomright = {projectileX - cameraX + pradiusX, projectileY - cameraY + pradiusY}
  331.         gui.box(topleft[1],topleft[2], bottomright[1],bottomright[2], "clear", "#FFFF80")
  332.         -- draw projectile hitbox
  333.  
  334.         gui.text(topleft[1], topleft[2]-8, memory.readshort(0x7E0C2C + i*2), "#FFFF80")
  335.         -- show projectile damage
  336.         if i >= 5 then
  337.             gui.text(topleft[1], topleft[2]-16, memory.readbyte(0x7E0C7C + i*2), "#FFFF80")
  338.         end
  339.         -- show bomb timer
  340.     end
  341.  
  342.     do
  343.         local radiusX, radiusY = memory.readshortsigned(0x7E0AFE), memory.readshortsigned(0x7E0B00)
  344.         local topleft = {128 - radiusX, 112 - radiusY}
  345.         local bottomright = {128 + radiusX, 112 + radiusY}
  346.        
  347.         if LockToScreen then
  348.             screenX = samusX - cameraX
  349.             screenY = samusY - cameraY
  350.             topleft = {screenX, screenY}
  351.             bottomright = {screenX, screenY}
  352.             topleft = {screenX - radiusX, screenY - radiusY}
  353.             bottomright = {screenX + radiusX, screenY + radiusY}
  354.         end
  355.        
  356.         gui.box(topleft[1],topleft[2], bottomright[1],bottomright[2], "clear", "#80FFFF")
  357.         -- draw Samus' hitbox
  358.  
  359.         local cooldown = memory.readshort(0x7E0CCC)
  360.         if cooldown ~= 0 then
  361.             gui.text(bottomright[1], (topleft[2]+bottomright[2])/2-16, cooldown, "green")
  362.         end
  363.         -- show current cooldown time
  364.         local charge = memory.readshort(0x7E0CD0)
  365.         if charge ~= 0 then
  366.             gui.text(bottomright[1], (topleft[2]+bottomright[2])/2-8, charge, "green")
  367.         end
  368.         -- show current beam charge
  369.         local recoil, invincibility = memory.readshort(0x7E18AA), memory.readshort(0x7E18A8)
  370.         if recoil ~= 0 then
  371.             gui.text(bottomright[1], (topleft[2]+bottomright[2])/2, recoil, "cyan")
  372.         elseif invincibility ~= 0 then
  373.             gui.text(bottomright[1], (topleft[2]+bottomright[2])/2, invincibility, "cyan")
  374.         end
  375.         -- show recoil/invincibility
  376.         local shine = memory.readbyte(0x7E0A68)
  377.         if shine ~= 0 then
  378.             gui.text(bottomright[1], (topleft[2]+bottomright[2])/2+8, shine, "cyan")
  379.         end
  380.        
  381.         if TASFlag ~= 0 then
  382.             gui.text(topleft[1], topleft[2]-16, string.format("%X.%04X", memory.readshort(0x7E0B42), memory.readshort(0x7E0B44)), "#00FFFF")
  383.             -- show horizontal speed
  384.             gui.text(topleft[1], topleft[2]-8, string.format("%X.%04X", memory.readshort(0x7E0B46), memory.readshort(0x7E0B48)), "#00FFFF")
  385.             -- show horizontal momentum
  386.             gui.text(topleft[1], bottomright[2], string.format("%X.%04X", memory.readshort(0x7E0B2E), memory.readshort(0x7E0B2C)), "#00FFFF")
  387.             -- show vertical speed
  388.             gui.text(topleft[1], bottomright[2]+8, memory.readbyte(0x7E0B3F), "#00FFFF")
  389.             -- show speed booster level
  390.         end
  391.     end
  392.     if TASFlag ~= 0 then
  393.         gui.text(216, 0, string.format("%d:%d:%d.%d", memory.readshort(0x7E09E0), memory.readshort(0x7E09DE), memory.readshort(0x7E09DC), memory.readshort(0x7E09DA)), "#FFFFFF")
  394.         -- show in-game time
  395.     end
  396. else
  397.     for i=0,0x7F do
  398.         doorList[i] = 0
  399.     end
  400.    
  401.     DoorListFlag = 1
  402. end
  403.     snes9x.frameadvance()
  404. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement