Advertisement
Guest User

Untitled

a guest
Dec 1st, 2018
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 30.91 KB | None | 0 0
  1. local SCALE = client.getwindowsize()
  2.  
  3. local TILE_ADDR = 0x00A0
  4.  
  5. -- drawing
  6. local CANVAS_WIDTH = 800
  7. local CANVAS_HEIGHT = 450
  8.  
  9. local ROOM_SIZE = 12
  10. local ROOM_GAP = 0
  11. local TILE_SIZE = ROOM_SIZE * 2 + ROOM_GAP * 1
  12.  
  13. local X_OFFSET = 6
  14. local Y_OFFSET = 50
  15.  
  16. local draw_POS = {
  17.     [1] = { x = 0, y = 0 },
  18.     [2] = { x = 1, y = 0 },
  19.     [3] = { x = 0, y = 1 },
  20.     [4] = { x = 1, y = 1 }
  21. }
  22.  
  23. -- colors
  24.  
  25. local HM = 0xC0B8A8 -- houses
  26. local HC = 0xA89868 -- hyrule castle
  27. local AT = HC -- aga's tower
  28. local EX = 0x706890 -- escape
  29. local SY = 0x204020 -- sanctuary
  30. local CV = 0x684830 -- caves
  31.  
  32. local EP = 0x80A870 -- eastern palace
  33. local DP = 0x807838 -- desert palace
  34. local TH = 0x987870 -- tower of hera
  35.  
  36. local PD = 0x909090 -- palace of darkness
  37. local SP = 0x7890F8 -- swamp palace
  38. local SW = 0x605030 -- skull woods
  39. local TT = 0x787888 -- thieves town
  40. local IP = 0xA8E0E8 -- ice palace
  41. local MM = 0x408068 -- misery mire
  42. local TR = 0x583028 -- turtle rock
  43. local GT = 0xA09058 -- ganon's tower
  44.  
  45. local GE = 0x984848 -- empty gt TILEs
  46. local EM = 0x606060 -- empty TILEs
  47.  
  48. local COMPLETE = 0xFFFF0000
  49. local VISITED = 0xFFFFFF00
  50. local UNVISITED = 0xFFAAAAAA
  51. local CURRENT = 0xFF00FFFF
  52.  
  53. local BLACK = 0xFF000000
  54. local WHITE = 0xFFFFFFFF
  55.  
  56. local OPAQUE = 0xFF000000
  57. local TRANS = 0x99000000
  58.  
  59. local COLL = 0xFF505050
  60. local SEMI = 0xFF000000
  61. local CHEST = 0xFFDEB429
  62.  
  63. local MINIMAP_X = 266
  64. local MINIMAP_Y = 5
  65. local MINIMAP_SCALE = 3
  66.  
  67. local function get_color(color, opacity)
  68.     return bit.bor(color, opacity)
  69. end -- end get_color
  70.  
  71. -- room number from quadrant variables
  72. local R1, R2, R3, R4 = 1, 2, 3, 4
  73.  
  74. local TILES_TO_VALS = {
  75.     ['RX'] = {
  76.         R1 = { A9 = 0x00, AA = 0x00 },
  77.         R2 = { A9 = 0x01, AA = 0x00 },
  78.         R3 = { A9 = 0x00, AA = 0x02 },
  79.         R4 = { A9 = 0x01, AA = 0x02 }
  80.     },
  81.  
  82.     ['A9AA'] = {
  83.             [0x00] = {
  84.                 [0x00] = R1,
  85.                 [0x02] = R3
  86.             },
  87.             [0x01] = {
  88.                 [0x00] = R2,
  89.                 [0x02] = R4
  90.         }
  91.     }
  92. }
  93.  
  94. local function stop_running()
  95.     running = false
  96. end -- stop_running
  97.  
  98. local function end_thing()
  99.     --the_canvas.clear()
  100.     client.SetGameExtraPadding(0, 0, 0, 0)
  101.     stop_running()
  102. end -- end_thing
  103.  
  104. local function initialize()
  105.     running = true
  106.  
  107.     memory.usememorydomain("WRAM")
  108.     client.SetGameExtraPadding(0, 0, 230, 0)
  109.     the_canvas = gui
  110.  
  111.     event.onexit(end_thing)
  112. end -- end initialize
  113.  
  114. --[==[
  115. Format:
  116.     [0x##] = {          -- room id
  117.         c = XX          -- color
  118.         p = AABA        -- room pattern
  119.         r = { p }       -- pattern as table
  120.         v = 0100        -- rooms reachable without glitches
  121.         x = { v }       -- reachability as table; no dupes
  122.     }
  123. ]==]
  124.  
  125. local TILE_DATA = {
  126.     [0x00] = { c = GT, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  127.     [0x01] = { c = HC, p = 'AABB', r = { 'A', 'A', 'B', 'B' } },
  128.     [0x02] = { c = SY, p = 'AABB', r = { 'A', 'A', 'B', 'B' } },
  129.     [0x03] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  130.     [0x04] = { c = TR, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  131.     [0x05] = { c = EM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  132.     [0x06] = { c = SP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  133.     [0x07] = { c = TH, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  134.     [0x08] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  135.     [0x09] = { c = PD, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  136.     [0x0A] = { c = PD, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  137.     [0x0B] = { c = PD, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  138.     [0x0C] = { c = GT, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  139.     [0x0D] = { c = GT, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  140.     [0x0E] = { c = IP, p = 'AABC', r = { 'A', 'A', 'B', 'C' } },
  141.     [0x0F] = { c = EM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  142.  
  143.     [0x10] = { c = GT, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  144.     [0x11] = { c = EX, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  145.     [0x12] = { c = SY, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  146.     [0x13] = { c = TR, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  147.     [0x14] = { c = TR, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  148.     [0x15] = { c = TR, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  149.     [0x16] = { c = SP, p = 'ABCC', r = { 'A', 'B', 'C', 'C' } },
  150.     [0x17] = { c = TH, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  151.     [0x18] = { c = CV, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  152.     [0x19] = { c = PD, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  153.     [0x1A] = { c = PD, p = 'ABAC', r = { 'A', 'B', 'A', 'C' } },
  154.     [0x1B] = { c = PD, p = 'AABC', r = { 'A', 'A', 'B', 'C' } },
  155.     [0x1C] = { c = GT, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  156.     [0x1D] = { c = GT, p = 'AABB', r = { 'A', 'A', 'B', 'B' } },
  157.     [0x1E] = { c = IP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  158.     [0x1F] = { c = IP, p = 'AABC', r = { 'A', 'A', 'B', 'C' } },
  159.  
  160.     [0x20] = { c = AT, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  161.     [0x21] = { c = EX, p = 'AABB', r = { 'A', 'A', 'B', 'B' } },
  162.     [0x22] = { c = EX, p = 'AABB', r = { 'A', 'A', 'B', 'B' } },
  163.     [0x23] = { c = TR, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  164.     [0x24] = { c = TR, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  165.     [0x25] = { c = EM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  166.     [0x26] = { c = SP, p = 'ABCC', r = { 'A', 'B', 'C', 'C' } },
  167.     [0x27] = { c = TH, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  168.     [0x28] = { c = SP, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  169.     [0x29] = { c = SW, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  170.     [0x2A] = { c = PD, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  171.     [0x2B] = { c = PD, p = 'ABAC', r = { 'A', 'B', 'A', 'C' } },
  172.     [0x2C] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  173.     [0x2D] = { c = IP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  174.     [0x2E] = { c = IP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  175.     [0x2F] = { c = CV, p = 'ABCC', r = { 'A', 'B', 'C', 'C' } },
  176.  
  177.     [0x30] = { c = AT, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  178.     [0x31] = { c = TH, p = 'AABC', r = { 'A', 'A', 'B', 'C' } },
  179.     [0x32] = { c = EX, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  180.     [0x33] = { c = DP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  181.     [0x34] = { c = SP, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  182.     [0x35] = { c = SP, p = 'AABB', r = { 'A', 'A', 'B', 'B' } },
  183.     [0x36] = { c = SP, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  184.     [0x37] = { c = SP, p = 'AABB', r = { 'A', 'A', 'B', 'B' } },
  185.     [0x38] = { c = SP, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  186.     [0x39] = { c = SW, p = 'AABC', r = { 'A', 'A', 'B', 'C' } },
  187.     [0x3A] = { c = PD, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  188.     [0x3B] = { c = PD, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  189.     [0x3C] = { c = CV, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  190.     [0x3D] = { c = GT, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  191.     [0x3E] = { c = IP, p = 'ABCC', r = { 'A', 'B', 'C', 'C' } },
  192.     [0x3F] = { c = IP, p = 'AABC', r = { 'A', 'A', 'B', 'C' } },
  193.  
  194.     [0x40] = { c = AT, p = 'ABAC', r = { 'A', 'B', 'A', 'C' } },
  195.     [0x41] = { c = HC, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  196.     [0x42] = { c = EX, p = 'AABB', r = { 'A', 'A', 'B', 'B' } },
  197.     [0x43] = { c = DP, p = 'AABC', r = { 'A', 'A', 'B', 'C' } },
  198.     [0x44] = { c = TT, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  199.     [0x45] = { c = TT, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  200.     [0x46] = { c = SP, p = 'AABB', r = { 'A', 'A', 'B', 'B' } },
  201.     [0x47] = { c = EM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  202.     [0x48] = { c = EM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  203.     [0x49] = { c = SW, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  204.     [0x4A] = { c = PD, p = 'AABB', r = { 'A', 'A', 'B', 'B' } },
  205.     [0x4B] = { c = PD, p = 'ABCC', r = { 'A', 'B', 'C', 'C' } },
  206.     [0x4C] = { c = GT, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  207.     [0x4D] = { c = GT, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  208.     [0x4E] = { c = IP, p = 'ABCC', r = { 'A', 'B', 'C', 'C' } },
  209.     [0x4F] = { c = IP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  210.  
  211.     [0x50] = { c = HC, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  212.     [0x51] = { c = HC, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  213.     [0x52] = { c = HC, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  214.     [0x53] = { c = DP, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  215.     [0x54] = { c = SP, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  216.     [0x55] = { c = EX, p = 'AABB', r = { 'A', 'A', 'B', 'B' } },
  217.     [0x56] = { c = SW, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  218.     [0x57] = { c = SW, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  219.     [0x58] = { c = SW, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  220.     [0x59] = { c = SW, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  221.     [0x5A] = { c = PD, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  222.     [0x5B] = { c = GT, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  223.     [0x5C] = { c = GT, p = 'AABC', r = { 'A', 'A', 'B', 'C' } },
  224.     [0x5D] = { c = GT, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  225.     [0x5E] = { c = IP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  226.     [0x5F] = { c = IP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  227.  
  228.     [0x60] = { c = HC, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  229.     [0x61] = { c = HC, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  230.     [0x62] = { c = HC, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  231.     [0x63] = { c = DP, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  232.     [0x64] = { c = TT, p = 'AABC', r = { 'A', 'A', 'B', 'C' } },
  233.     [0x65] = { c = TT, p = 'AABC', r = { 'A', 'A', 'B', 'C' } },
  234.     [0x66] = { c = SP, p = 'ABCC', r = { 'A', 'B', 'C', 'C' } },
  235.     [0x67] = { c = SW, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  236.     [0x68] = { c = SW, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  237.     [0x69] = { c = EM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  238.     [0x6A] = { c = PD, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  239.     [0x6B] = { c = GT, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  240.     [0x6C] = { c = GT, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  241.     [0x6D] = { c = GT, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  242.     [0x6E] = { c = IP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  243.     [0x6F] = { c = EM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  244.  
  245.     [0x70] = { c = EX, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  246.     [0x71] = { c = EX, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  247.     [0x72] = { c = EX, p = 'AABB', r = { 'A', 'A', 'B', 'B' } },
  248.     [0x73] = { c = DP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  249.     [0x74] = { c = DP, p = 'AABB', r = { 'A', 'A', 'B', 'B' } },
  250.     [0x75] = { c = DP, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  251.     [0x76] = { c = SP, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  252.     [0x77] = { c = TH, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  253.     [0x78] = { c = GE, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  254.     [0x79] = { c = GE, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  255.     [0x7A] = { c = GE, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  256.     [0x7B] = { c = GT, p = 'AABC', r = { 'A', 'A', 'B', 'C' } },
  257.     [0x7C] = { c = GT, p = 'ABAC', r = { 'A', 'B', 'A', 'C' } },
  258.     [0x7D] = { c = GT, p = 'AABC', r = { 'A', 'A', 'B', 'C' } },
  259.     [0x7E] = { c = IP, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  260.     [0x7F] = { c = IP, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  261.  
  262.     [0x80] = { c = EX, p = 'AABB', r = { 'A', 'A', 'B', 'B' } },
  263.     [0x81] = { c = EX, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  264.     [0x82] = { c = EX, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  265.     [0x83] = { c = DP, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  266.     [0x84] = { c = DP, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  267.     [0x85] = { c = DP, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  268.     [0x86] = { c = EM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  269.     [0x87] = { c = TH, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  270.     [0x88] = { c = EM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  271.     [0x89] = { c = EP, p = 'AABB', r = { 'A', 'A', 'B', 'B' } },
  272.     [0x8A] = { c = GE, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  273.     [0x8B] = { c = GT, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  274.     [0x8C] = { c = GT, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  275.     [0x8D] = { c = GT, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  276.     [0x8E] = { c = IP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  277.     [0x8F] = { c = EM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  278.  
  279.     [0x90] = { c = MM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  280.     [0x91] = { c = MM, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  281.     [0x92] = { c = MM, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  282.     [0x93] = { c = MM, p = 'AABC', r = { 'A', 'A', 'B', 'C' } },
  283.     [0x94] = { c = GE, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  284.     [0x95] = { c = GT, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  285.     [0x96] = { c = GT, p = 'ABAC', r = { 'A', 'B', 'A', 'C' } },
  286.     [0x97] = { c = MM, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  287.     [0x98] = { c = MM, p = 'AABB', r = { 'A', 'A', 'B', 'B' } },
  288.     [0x99] = { c = EP, p = 'ABCC', r = { 'A', 'B', 'C', 'C' } },
  289.     [0x9A] = { c = GE, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  290.     [0x9B] = { c = GT, p = 'ABCC', r = { 'A', 'B', 'C', 'C' } },
  291.     [0x9C] = { c = GT, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  292.     [0x9D] = { c = GT, p = 'ABCC', r = { 'A', 'B', 'C', 'C' } },
  293.     [0x9E] = { c = IP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  294.     [0x9F] = { c = IP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  295.  
  296.     [0xA0] = { c = MM, p = 'ABCC', r = { 'A', 'B', 'C', 'C' } },
  297.     [0xA1] = { c = MM, p = 'AABA', r = { 'A', 'A', 'B', 'A' } },
  298.     [0xA2] = { c = MM, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  299.     [0xA3] = { c = MM, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  300.     [0xA4] = { c = TR, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  301.     [0xA5] = { c = GT, p = 'ABCC', r = { 'A', 'B', 'C', 'C' } },
  302.     [0xA6] = { c = GT, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  303.     [0xA7] = { c = TH, p = 'ABCC', r = { 'A', 'B', 'C', 'C' } },
  304.     [0xA8] = { c = EP, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  305.     [0xA9] = { c = EP, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  306.     [0xAA] = { c = EP, p = 'ABAC', r = { 'A', 'B', 'A', 'C' } },
  307.     [0xAB] = { c = TT, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  308.     [0xAC] = { c = TT, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  309.     [0xAD] = { c = IP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  310.     [0xAE] = { c = IP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  311.     [0xAF] = { c = IP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  312.  
  313.     [0xB0] = { c = AT, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  314.     [0xB1] = { c = MM, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  315.     [0xB2] = { c = MM, p = 'AABC', r = { 'A', 'A', 'B', 'C' } },
  316.     [0xB3] = { c = MM, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  317.     [0xB4] = { c = TR, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  318.     [0xB5] = { c = TR, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  319.     [0xB6] = { c = TR, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  320.     [0xB7] = { c = TR, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  321.     [0xB8] = { c = EP, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  322.     [0xB9] = { c = EP, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  323.     [0xBA] = { c = EP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  324.     [0xBB] = { c = TT, p = 'ABAC', r = { 'A', 'B', 'A', 'C' } },
  325.     [0xBC] = { c = TT, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  326.     [0xBD] = { c = IP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  327.     [0xBE] = { c = IP, p = 'ABAC', r = { 'A', 'B', 'A', 'C' } },
  328.     [0xBF] = { c = IP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  329.  
  330.     [0xC0] = { c = AT, p = 'ABAC', r = { 'A', 'B', 'A', 'C' } },
  331.     [0xC1] = { c = MM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  332.     [0xC2] = { c = MM, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  333.     [0xC3] = { c = MM, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  334.     [0xC4] = { c = TR, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  335.     [0xC5] = { c = TR, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  336.     [0xC6] = { c = TR, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  337.     [0xC7] = { c = TR, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  338.     [0xC8] = { c = EP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  339.     [0xC9] = { c = EP, p = 'AABB', r = { 'A', 'A', 'B', 'B' } },
  340.     [0xCA] = { c = EM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  341.     [0xCB] = { c = TT, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  342.     [0xCC] = { c = TT, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  343.     [0xCD] = { c = IP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  344.     [0xCE] = { c = IP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  345.     [0xCF] = { c = EM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  346.  
  347.     [0xD0] = { c = AT, p = 'ABAC', r = { 'A', 'B', 'A', 'C' } },
  348.     [0xD1] = { c = MM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  349.     [0xD2] = { c = MM, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  350.     [0xD3] = { c = EM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  351.     [0xD4] = { c = EM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  352.     [0xD5] = { c = TR, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  353.     [0xD6] = { c = TR, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  354.     [0xD7] = { c = EM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  355.     [0xD8] = { c = EP, p = 'ABAC', r = { 'A', 'B', 'A', 'C' } },
  356.     [0xD9] = { c = EP, p = 'AABC', r = { 'A', 'A', 'B', 'C' } },
  357.     [0xDA] = { c = EP, p = 'AABC', r = { 'A', 'A', 'B', 'C' } },
  358.     [0xDB] = { c = TT, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  359.     [0xDC] = { c = TT, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  360.     [0xDD] = { c = IP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  361.     [0xDE] = { c = IP, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  362.     [0xDF] = { c = CV, p = 'ABCC', r = { 'A', 'B', 'C', 'C' } },
  363.  
  364.     [0xE0] = { c = AT, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  365.     [0xE1] = { c = CV, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  366.     [0xE2] = { c = CV, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  367.     [0xE3] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  368.     [0xE4] = { c = CV, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  369.     [0xE5] = { c = CV, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  370.     [0xE6] = { c = CV, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  371.     [0xE7] = { c = CV, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  372.     [0xE8] = { c = CV, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  373.     [0xE9] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  374.     [0xEA] = { c = CV, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  375.     [0xEB] = { c = CV, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  376.     [0xEC] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  377.     [0xED] = { c = CV, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  378.     [0xEE] = { c = CV, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  379.     [0xEF] = { c = CV, p = 'ABCC', r = { 'A', 'B', 'C', 'C' } },
  380.  
  381.     [0xF0] = { c = CV, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  382.     [0xF1] = { c = CV, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  383.     [0xF2] = { c = HM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  384.     [0xF3] = { c = HM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  385.     [0xF4] = { c = HM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  386.     [0xF5] = { c = HM, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  387.     [0xF6] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  388.     [0xF7] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  389.     [0xF8] = { c = CV, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  390.     [0xF9] = { c = CV, p = 'ABBB', r = { 'A', 'B', 'B', 'B' } },
  391.     [0xFA] = { c = CV, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  392.     [0xFB] = { c = CV, p = 'ABBB', r = { 'A', 'B', 'B', 'B' } },
  393.     [0xFC] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  394.     [0xFD] = { c = CV, p = 'ABAA', r = { 'A', 'B', 'A', 'A' } },
  395.     [0xFE] = { c = CV, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  396.     [0xFF] = { c = CV, p = 'ABCC', r = { 'A', 'B', 'C', 'C' } },
  397.  
  398.     -- underworld 2
  399.     [0x0100] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  400.     [0x0101] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  401.     [0x0102] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  402.     [0x0103] = { c = CV, p = 'ABAC', r = { 'A', 'B', 'A', 'C' } },
  403.     [0x0104] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  404.     [0x0105] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  405.     [0x0106] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  406.     [0x0107] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  407.     [0x0108] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  408.     [0x0109] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  409.     [0x010A] = { c = CV, p = 'ABAC', r = { 'A', 'B', 'A', 'C' } },
  410.     [0x010B] = { c = CV, p = 'AABB', r = { 'A', 'A', 'B', 'B' } },
  411.     [0x010C] = { c = CV, p = 'ABCB', r = { 'A', 'B', 'C', 'B' } },
  412.     [0x010D] = { c = CV, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  413.     [0x010E] = { c = CV, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  414.     [0x010F] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  415.  
  416.     [0x0110] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  417.     [0x0111] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  418.     [0x0112] = { c = CV, p = 'ABAC', r = { 'A', 'B', 'A', 'C' } },
  419.     [0x0113] = { c = CV, p = 'ABAB', r = { 'A', 'B', 'A', 'B' } },
  420.     [0x0114] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  421.     [0x0115] = { c = CV, p = 'ABAC', r = { 'A', 'B', 'A', 'C' } },
  422.     [0x0116] = { c = CV, p = 'AABC', r = { 'A', 'A', 'B', 'C' } },
  423.     [0x0117] = { c = CV, p = 'AAAA', r = { 'A', 'A', 'A', 'A' } },
  424.     [0x0118] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  425.     [0x0119] = { c = CV, p = 'AABB', r = { 'A', 'A', 'B', 'B' } },
  426.     [0x011A] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  427.     [0x011B] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  428.     [0x011C] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  429.     [0x011D] = { c = CV, p = 'AABB', r = { 'A', 'A', 'B', 'B' } },
  430.     [0x011E] = { c = CV, p = 'ABAC', r = { 'A', 'B', 'A', 'C' } },
  431.     [0x011F] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  432.  
  433.     [0x0120] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  434.     [0x0121] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  435.     [0x0122] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  436.     [0x0123] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  437.     [0x0124] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  438.     [0x0125] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  439.     [0x0126] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  440.     [0x0127] = { c = CV, p = 'ABCD', r = { 'A', 'B', 'C', 'D' } },
  441. }
  442.  
  443. -- room tracking
  444. local prev = nil
  445. local prev_quad = nil
  446. local check_map = false
  447.  
  448. -- drawing
  449. local function draw_tile(tile, quad_id)
  450.     if tile == nil then return end
  451.  
  452.     local x = (bit.band(tile, 0x0F) * TILE_SIZE + 1) + X_OFFSET
  453.     local y = ((bit.band(tile, 0xF0) / 16) * TILE_SIZE + 1) + Y_OFFSET
  454.  
  455.     the_canvas.drawRectangle(x, y, TILE_SIZE, TILE_SIZE, BLACK, BLACK) -- clear only this section
  456.  
  457.     local d = TILE_DATA[tile]
  458.     local r = d.r
  459.  
  460.     local room_completion_colors = { 0, 0, 0, 0 }
  461.  
  462.     for i=1, 4 do
  463.         room_completion_colors[i] =
  464.             quad_id == TILE_DATA[tile].r[i] and CURRENT
  465.                 or UNVISITED and OPAQUE or TRANS
  466.         the_canvas.drawRectangle(
  467.                 x + (ROOM_SIZE) * draw_POS[i].x,
  468.                 y + (ROOM_SIZE) * draw_POS[i].y,
  469.                 ROOM_SIZE,
  470.                 ROOM_SIZE,
  471.                 nil,
  472.                 room_completion_colors[i]
  473.             )
  474.         if TILE_DATA[tile].x[r[i]] == 0 then
  475.             --[[the_canvas.drawText(
  476.                 x + (ROOM_SIZE) * draw_POS[i].x + 1,
  477.                 y + (ROOM_SIZE) * draw_POS[i].y - 1,
  478.                 "X",
  479.                 0x55FFFFFF,
  480.                 0
  481.             )]]
  482.         end
  483.     end
  484.  
  485.     local C0
  486.  
  487.     if quad_id then
  488.         C0 = CURRENT
  489.     else
  490.         C0 = UNVISITED
  491.     end
  492.  
  493.     -- vertical separators
  494.     local C1 = r[1] == r[2] and room_completion_colors[1] or C0
  495.     local C2 = r[3] == r[4] and room_completion_colors[3] or C0
  496.  
  497.     the_canvas.drawLine(x + ROOM_SIZE + ROOM_GAP, y + ROOM_GAP,
  498.                             x + ROOM_SIZE + ROOM_GAP, y + ROOM_SIZE,
  499.                             C1)
  500.  
  501.     the_canvas.drawLine(x + ROOM_GAP + ROOM_SIZE, y + ROOM_GAP + ROOM_GAP + ROOM_SIZE,
  502.                             x + ROOM_GAP + ROOM_SIZE, y + ROOM_SIZE + ROOM_SIZE,
  503.                             C2)
  504.  
  505.     -- horizontal separators
  506.     local C3 = r[1] == r[3] and room_completion_colors[1] or C0
  507.     local C4 = r[2] == r[4] and room_completion_colors[2] or C0
  508.  
  509.     the_canvas.drawLine(x + ROOM_GAP + ROOM_GAP, y + ROOM_GAP + ROOM_SIZE,
  510.                             x + ROOM_SIZE, y + ROOM_GAP + ROOM_SIZE,
  511.                             C3)
  512.  
  513.     the_canvas.drawLine(x + ROOM_GAP + ROOM_GAP + ROOM_SIZE, y + ROOM_GAP + ROOM_SIZE,
  514.                             x + ROOM_SIZE + ROOM_SIZE, y + ROOM_GAP + ROOM_SIZE,
  515.                             C4)
  516.  
  517.     local C5 = d.p == 'AAAA' and C1 or C0
  518.  
  519.     the_canvas.drawPixel(x + ROOM_GAP + ROOM_SIZE, y + ROOM_GAP + ROOM_SIZE, BLACK)
  520.     the_canvas.drawPixel(x + ROOM_GAP + ROOM_SIZE, y + ROOM_GAP + ROOM_SIZE, C5)
  521.  
  522.     the_canvas.drawRectangle(x, y, TILE_SIZE, TILE_SIZE, C0, nil)
  523. end -- end draw_tile
  524.  
  525. local function draw_all()
  526.     the_canvas.Clear(BLACK)
  527.     for i=0, 0x0127 do
  528.         draw_tile(i)
  529.     end
  530.  
  531.     --the_canvas.refresh()
  532. end -- end draw_all
  533.  
  534. local collision_map = {
  535.     [0x01] = COLL,
  536.     [0x02] = 0xFF707070, -- rails
  537.     [0x03] = COLL,
  538.     [0x04] = COLL,
  539.     [0x0B] = COLL,
  540.     [0x26] = COLL,
  541.     [0x27] = COLL,
  542.     [0x43] = COLL,
  543.     [0x44] = 0xFFEEEEEE, -- spike
  544.     [0x46] = COLL,
  545.     [0x50] = COLL,
  546.     [0x51] = COLL,
  547.     [0x52] = COLL,
  548.     [0x53] = COLL,
  549.     [0x54] = COLL,
  550.     [0x55] = COLL,
  551.     [0x56] = COLL,
  552.     [0x57] = COLL,
  553.     [0x6C] = COLL,
  554.     [0x6D] = COLL,
  555.     [0x6E] = COLL,
  556.     [0x6F] = COLL,
  557.     [0x70] = 0xFF7B4A4A,
  558.     [0x71] = 0xFF7B4A4A,
  559.     [0x72] = 0xFF7B4A4A,
  560.     [0x73] = 0xFF7B4A4A,
  561.     [0x74] = 0xFF7B4A4A,
  562.     [0x75] = 0xFF7B4A4A,
  563.     [0x76] = 0xFF7B4A4A,
  564.     [0x77] = 0xFF7B4A4A,
  565.     [0x78] = 0xFF7B4A4A,
  566.     [0x79] = 0xFF7B4A4A,
  567.     [0x7A] = COLL,
  568.     [0x7B] = COLL,
  569.     [0x7C] = COLL,
  570.     [0x7D] = COLL,
  571.     [0x7E] = COLL,
  572.     [0x7F] = COLL,
  573.     [0xC0] = COLL,
  574.     [0xC1] = COLL,
  575.     [0xC2] = COLL,
  576.     [0xC3] = COLL,
  577.     [0xC4] = COLL,
  578.     [0xC5] = COLL,
  579.     [0xC6] = COLL,
  580.     [0xC7] = COLL,
  581.     [0xC8] = COLL,
  582.     [0xC9] = COLL,
  583.     [0xCA] = COLL,
  584.     [0xCB] = COLL,
  585.     [0xCC] = COLL,
  586.     [0xCD] = COLL,
  587.     [0xCE] = COLL,
  588.     [0xCF] = COLL,
  589.     [0xF0] = COLL,
  590.     [0xF1] = COLL,
  591.     [0xF2] = COLL,
  592.     [0xF3] = COLL,
  593.     [0xF4] = COLL,
  594.     [0xF5] = COLL,
  595.     [0xF6] = COLL,
  596.     [0xF7] = COLL,
  597.     [0xF8] = COLL,
  598.     [0xF9] = COLL,
  599.     [0xFA] = COLL,
  600.     [0xFB] = COLL,
  601.     [0xFC] = COLL,
  602.     [0xFD] = COLL,
  603.     [0xFE] = COLL,
  604.     [0xFF] = COLL,
  605. -- other
  606.     [0x09] = 0xFF4A5ABD, -- water
  607.     [0x0D] = 0xFFA4A4A4, -- spike floor
  608.     [0x20] = 0xFF660000, -- pits
  609.     [0x1D] = 0xFF6A4A31, -- stairs
  610.     [0x1E] = 0xFF6A4A31, -- stairs
  611.     [0x1F] = 0xFF6A4A31, -- stairs
  612.     [0x66] = 0xFF414183, -- peg blocks
  613.     [0x67] = 0xFF6A6AC5,
  614. -- semi_collision_map
  615.     [0x0E] = SEMI,
  616.     [0x0F] = SEMI,
  617.     [0x10] = SEMI,
  618.     [0x11] = SEMI,
  619.     [0x12] = SEMI,
  620.     [0x13] = SEMI,
  621.     [0x18] = SEMI,
  622.     [0x19] = SEMI,
  623.     [0x1A] = SEMI,
  624.     [0x1B] = SEMI,
  625. -- chest_map
  626.     [0x58] = CHEST,
  627.     [0x59] = CHEST,
  628.     [0x5A] = CHEST,
  629.     [0x5B] = CHEST,
  630.     [0x5C] = CHEST,
  631.     [0x5D] = CHEST
  632. } --
  633.  
  634. local curmap = {}
  635.  
  636. local function in_overworld()
  637.     return memory.readbyte(0x001B) == 0
  638. end
  639.  
  640. local tile_shit = {}
  641.  
  642. for x = 0, 63 do
  643.     tile_shit[x] = {}
  644.     for y = 0, 63 do
  645.         tile_shit[x][y] = 0
  646.     end
  647. end
  648.  
  649. local function get_uw_tile(y, x, tilemap_mask, layer)
  650.     local tile_idx = y * 64 + x + (layer == 1 and 0x1000 or 0x0000)
  651.  
  652.     local tile = curmap[tile_idx]
  653.     return tile
  654. end
  655.  
  656. local function get_ow_tile(y, x)
  657.     -- TODO
  658.     local tmp_00 = 0
  659.     local tmp_02 = x
  660.  
  661.     local tile_idx = (y * 64 + x) * 2
  662.     local tmp_06 = bit.lshift(memory.read_u16_le(0x2000 + tile_idx), 2)
  663.  
  664.     local tile_idx2 = bit.lshift(bit.bor(tmp_06, bit.band(tmp_02, 1)), 1)
  665.     tmp_06 = memory.read_u16_le(0x0F8000 + tile_idx2, "System Bus")
  666.  
  667.     local tile_idx3 = bit.band(tmp_06, 0x1FF)
  668.     local tile = memory.read_u16_le(0x0FFD94 + tile_idx3, "System Bus")
  669.  
  670.     if tile >= 0x10 and tile < 0x1C then
  671.         tile = bit.bor(bit.rol(bit.lshift(bit.band(tile, 0x40), 1), 2), tile)
  672.     end
  673.  
  674.     return bit.band(tile, 0xFF)
  675. end
  676.  
  677. local ow = true
  678. local owm = 0x00
  679. local function get_all_tiles()
  680.     ow = in_overworld()
  681.     curmap = memory.readbyterange(0x12000, 64 * 64 * 2)
  682.  
  683.     if ow then
  684.         owm = memory.read_u8(0x8A)
  685.     end
  686.  
  687.     local layer = memory.read_u16_le(0x00EE)
  688.     local tilemap_mask = memory.read_u16_le(0x00EC)
  689.  
  690.     for y = 0, 63 do
  691.         for x = 0, 63 do
  692.             local tile
  693.  
  694.             if ow then
  695.                 tile = get_ow_tile(y, x, tilemap_mask)
  696.             else
  697.                 tile = get_uw_tile(y, x, tilemap_mask, layer)
  698.             end
  699.  
  700.             tile_shit[x][y] = tile
  701.         end
  702.     end
  703. end
  704.  
  705. local got_map = false
  706.  
  707. local function draw_minimap()
  708.     the_canvas.drawRectangle(MINIMAP_X-10, MINIMAP_Y-10, MINIMAP_SCALE * 80, MINIMAP_SCALE * 80, BLACK, BLACK)
  709.     the_canvas.drawRectangle(MINIMAP_X-1, MINIMAP_Y-1, MINIMAP_SCALE*64+2, MINIMAP_SCALE*64+2, COMPLETE, BLACK)
  710.  
  711.     for y = 0, 63 do
  712.         for x = 0, 63 do
  713.             local tile = tile_shit[x][y]
  714.             tile = collision_map[tile]
  715.  
  716.             if tile then
  717.                 the_canvas.drawRectangle(MINIMAP_X + x * MINIMAP_SCALE, MINIMAP_Y + y * MINIMAP_SCALE, MINIMAP_SCALE, MINIMAP_SCALE, tile - 0xAA000000, tile)
  718.             end
  719.         end
  720.     end
  721.  
  722.  
  723.     local linky = memory.read_u16_le(0x20)
  724.     local linkx = memory.read_u16_le(0x22)
  725.     local cameray = memory.read_u16_le(0x618)
  726.     local camerax = memory.read_u16_le(0x61C)
  727.  
  728.     local mod_factor = ow and 0x400 or 0x200
  729.     linky = linky % mod_factor
  730.     linkx = linkx % mod_factor
  731.     cameray = (cameray % mod_factor) - 125
  732.     camerax = (camerax % mod_factor) - 125
  733.  
  734.     local scale_factor = ow and 1 or 2
  735.     local scale_factor_tile = ow and 16 or 8
  736.  
  737.     if ow then
  738.         if bit.band(owm, 1) == 1 then
  739.             linkx = bit.band(linkx + 0x200, 0x3FF)
  740.             camerax = bit.band(camerax + 0x200, 0x3FF)
  741.         end
  742.         if bit.band(math.floor(owm / 8), 1) == 1 then
  743.             linky = bit.band(linky + 0x200, 0x3FF)camerax = bit.band(camerax + 0x200, 0x3FF)
  744.             cameray = bit.band(cameray + 0x200, 0x3FF)
  745.         end
  746.     end
  747.  
  748.     linky = math.floor(linky * MINIMAP_SCALE / scale_factor_tile)
  749.     linkx = math.floor(linkx * MINIMAP_SCALE / scale_factor_tile)
  750.     cameray = math.floor(cameray * MINIMAP_SCALE / scale_factor_tile)
  751.     camerax = math.floor(camerax * MINIMAP_SCALE / scale_factor_tile)
  752.  
  753.     the_canvas.drawRectangle(MINIMAP_X + camerax, MINIMAP_Y + cameray, 256 / scale_factor_tile * MINIMAP_SCALE, 236 / scale_factor_tile * MINIMAP_SCALE, COMPLETE)
  754.     the_canvas.drawRectangle(MINIMAP_X + linkx, MINIMAP_Y + linky + MINIMAP_SCALE, MINIMAP_SCALE * scale_factor, MINIMAP_SCALE * scale_factor, CURRENT)
  755. end
  756.  
  757. local modes_to_ignore = {
  758.     [0x7FBF] = true,
  759.     [0x0000] = true,
  760.     [0x0001] = true,
  761.     [0x0002] = true,
  762.     [0x0003] = true,
  763.     [0x0004] = true,
  764.     [0x0005] = true,
  765.     [0x0006] = true,
  766.     [0x0007] = true,
  767.     [0x0008] = true,
  768.     [0x0008] = true,
  769.     [0x0008] = true,
  770.     [0x0008] = true,
  771.     [0x0009] = true,
  772.     [0x0100] = true,
  773.     [0x0101] = true,
  774.     [0x0102] = true,
  775.     [0x0103] = true,
  776.     [0x0104] = true,
  777.     [0x0105] = true,
  778.     [0x0105] = true,
  779.     [0x0400] = true,
  780.     [0x0401] = true,
  781.     [0x0402] = true,
  782.     [0x0403] = true,
  783.     [0x0500] = true,
  784.     [0x1701] = true,
  785.     [0x1702] = true,
  786.     [0x0500] = true,
  787.     [0x1B02] = true
  788. }
  789.  
  790. local modes_to_refresh = {
  791.     [0x0702] = true,
  792.     [0x0703] = true,
  793.     [0x0707] = true,
  794.     [0x0708] = true,
  795.     [0x070B] = true,
  796.     [0x070C] = true,
  797.     [0x070D] = true,
  798.     [0x070E] = true,
  799.     [0x070F] = true,
  800.     [0x0710] = true,
  801.     [0x0712] = true,
  802.     [0x0713] = true,
  803.     [0x0715] = true,
  804.     [0x0716] = true,
  805.     [0x071A] = true,
  806.     [0x0901] = true,
  807.     [0x0902] = true,
  808.     [0x0903] = true,
  809.     [0x0904] = true,
  810.     [0x0905] = true,
  811.     [0x0906] = true,
  812.     [0x0907] = true,
  813.     [0x0908] = true,
  814.     [0x090A] = true,
  815.     [0x0923] = true,
  816.     [0x1001] = true
  817. }
  818.  
  819. local function do_main()
  820.     while running do
  821.         emu.frameadvance()
  822.         --SCALE = client.getwindowsize()
  823.  
  824.         --[[
  825.         local ow_flag = memory.readbyte(0x001B)
  826.  
  827.         if not (ow_flag == 0x01) then
  828.             if check_map and prev ~= nil then
  829.                 draw_tile(prev)
  830.                 prev = nil
  831.             end
  832.             check_map = false
  833.         else
  834.             if memory.readbyte(0x0010) == 0x07 then
  835.                 check_map = true
  836.             else
  837.                 check_map = false
  838.                 draw_tile(prev)
  839.                 prev = nil
  840.             end
  841.         end
  842.        
  843.         if check_map then
  844.             local tile = memory.readbyte(TILE_ADDR)
  845.             local A9 = memory.readbyte(0xA9)
  846.             local AA = memory.readbyte(0xAA)
  847.  
  848.             local quadrant = TILES_TO_VALS.A9AA[A9][AA]
  849.             local quad_id = TILE_DATA[tile].r[quadrant]
  850.  
  851.             if quadrant ~= prev_quad or tile ~= prev then
  852.                 prev_quad = quadrant
  853.             end
  854.  
  855.             draw_tile(tile, quad_id)
  856.  
  857.             if tile ~= prev then
  858.                 draw_tile(prev)
  859.                 prev = tile
  860.             end
  861.         end
  862. --]]
  863.     local gamemode = memory.read_u16_be(0x0010)
  864.  
  865.         if modes_to_refresh[gamemode] or not got_map then
  866.             get_all_tiles()
  867.             if modes_to_refresh[gamemode] then
  868.                 got_map = false
  869.             else
  870.                 got_map = true
  871.             end
  872.         else
  873.             got_map = true
  874.         end
  875.  
  876.         if not modes_to_ignore[gamemode] then
  877.             draw_minimap()
  878.         end
  879.     end
  880. end -- end do_main
  881.  
  882. initialize()
  883. --draw_all()
  884. get_all_tiles()
  885. do_main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement