_Ziper_YT_

Untitled

Jun 22nd, 2025
9
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.95 KB | None | 0 0
  1. local rc = peripheral.find("raycaster")
  2. --local monitor = peripheral.wrap('left')
  3. local monitor = peripheral.find("monitor")
  4.  
  5. local euler_mode = false
  6. local depth_map = false
  7. local cache = false
  8.  
  9. local width_yaw_range = math.rad(45)
  10. local height_pitch_range = math.rad(45)
  11. local max_distance = 20
  12. local vector_fov = 1
  13.  
  14. local width, height = monitor.getSize()
  15. height_pitch_range = height_pitch_range * (height/width)
  16.  
  17. local char_data = {{{"\0",false},{"\9",false},{"\10",false},{"\13",false},{"\32",false},{"\128",false},{"\160",false},},{{"\46",false},{"\168",false},{"\180",false},{"\184",false},},{{"\39",false},{"\44",false},{"\96",false},},{{"\58",false},{"\183",false},},{{"\45",false},{"\59",false},{"\94",false},{"\95",false},{"\173",false},{"\175",false},},{{"\33",false},{"\34",false},{"\42",false},{"\105",false},{"\126",false},{"\161",false},{"\166",false},},{{"\28",false},{"\47",false},{"\60",false},{"\62",false},{"\92",false},{"\108",false},{"\124",false},{"\172",false},{"\178",false},{"\236",false},{"\237",false},{"\239",false},{"\247",false},},{{"\22",false},{"\176",false},{"\179",false},{"\185",false},{"\238",false},},{{"\40",false},{"\41",false},{"\43",false},{"\63",false},{"\89",false},{"\114",false},{"\116",false},{"\118",false},{"\120",false},{"\123",false},{"\125",false},{"\129",false},{"\130",false},{"\132",false},{"\136",false},{"\144",false},{"\159",true},{"\191",false},{"\215",false},{"\221",false},},{{"\29",false},{"\61",false},{"\74",false},{"\171",false},{"\187",false},},{{"\26",false},{"\27",false},{"\37",false},{"\73",false},{"\76",false},{"\84",false},{"\91",false},{"\93",false},{"\99",false},{"\102",false},{"\106",false},{"\170",false},{"\204",false},{"\205",false},{"\207",false},},{{"\7",false},{"\19",false},{"\49",false},{"\55",false},{"\107",false},{"\110",false},{"\111",false},{"\117",false},{"\186",false},{"\206",false},{"\219",false},},{{"\4",false},{"\16",false},{"\17",false},{"\24",false},{"\25",false},{"\30",false},{"\31",false},{"\67",false},{"\70",false},{"\86",false},{"\88",false},{"\109",false},{"\115",false},{"\122",false},{"\162",false},{"\189",false},{"\217",false},{"\218",false},{"\220",false},{"\231",false},{"\251",false},{"\254",false},},{{"\11",false},{"\51",false},{"\80",false},{"\97",false},{"\104",false},{"\112",false},{"\113",false},{"\119",false},{"\177",false},{"\188",false},{"\199",false},{"\222",false},{"\242",false},{"\243",false},{"\246",false},{"\249",false},{"\250",false},{"\252",false},},{{"\14",false},{"\36",false},{"\38",false},{"\52",false},{"\54",false},{"\57",false},{"\75",false},{"\83",false},{"\85",false},{"\90",false},{"\101",false},{"\121",false},{"\181",false},{"\197",false},{"\229",false},{"\240",false},{"\248",false},},{{"\50",false},{"\79",false},{"\81",false},{"\98",false},{"\100",false},{"\163",false},{"\164",false},{"\192",false},{"\193",false},{"\196",false},{"\210",false},{"\211",false},{"\213",false},{"\214",false},{"\224",false},{"\225",false},{"\228",false},{"\241",false},{"\245",false},},{{"\12",false},{"\53",false},{"\56",false},{"\69",false},{"\71",false},{"\72",false},{"\77",false},{"\78",false},{"\87",false},{"\103",false},{"\165",false},{"\190",false},{"\209",false},{"\212",false},{"\230",false},{"\232",false},{"\233",false},{"\235",false},{"\244",false},{"\253",false},{"\255",false},},{{"\6",false},{"\8",true},{"\65",false},{"\68",false},{"\82",false},{"\127",false},{"\131",false},{"\133",false},{"\134",false},{"\137",false},{"\138",false},{"\140",false},{"\143",true},{"\145",false},{"\146",false},{"\148",false},{"\151",true},{"\152",false},{"\155",true},{"\157",true},{"\158",true},{"\195",false},{"\200",false},{"\201",false},{"\203",false},{"\227",false},},{{"\1",false},{"\5",false},{"\20",false},{"\48",false},{"\182",false},{"\194",false},{"\208",false},{"\216",false},{"\223",false},{"\226",false},},{{"\18",false},{"\21",false},{"\35",false},{"\66",false},{"\167",false},{"\169",false},{"\198",false},{"\234",false},},{{"\3",false},{"\202",false},},{{"\15",false},{"\174",false},},{{"\23",false},{"\64",false},},{{"\2",false},},{{"\135",false},{"\135",true},{"\139",false},{"\139",true},{"\141",false},{"\141",true},{"\142",false},{"\142",true},{"\147",false},{"\147",true},{"\149",false},{"\149",true},{"\150",false},{"\150",true},{"\153",false},{"\153",true},{"\154",false},{"\154",true},{"\156",false},{"\156",true},},{{"\2",true},},{{"\23",true},{"\64",true},},{{"\15",true},{"\174",true},},{{"\3",true},{"\202",true},},{{"\18",true},{"\21",true},{"\35",true},{"\66",true},{"\167",true},{"\169",true},{"\198",true},{"\234",true},},{{"\1",true},{"\5",true},{"\20",true},{"\48",true},{"\182",true},{"\194",true},{"\208",true},{"\216",true},{"\223",true},{"\226",true},},{{"\6",true},{"\8",false},{"\65",true},{"\68",true},{"\82",true},{"\127",true},{"\131",true},{"\133",true},{"\134",true},{"\137",true},{"\138",true},{"\140",true},{"\143",false},{"\145",true},{"\146",true},{"\148",true},{"\151",false},{"\152",true},{"\155",false},{"\157",false},{"\158",false},{"\195",true},{"\200",true},{"\201",true},{"\203",true},{"\227",true},},{{"\12",true},{"\53",true},{"\56",true},{"\69",true},{"\71",true},{"\72",true},{"\77",true},{"\78",true},{"\87",true},{"\103",true},{"\165",true},{"\190",true},{"\209",true},{"\212",true},{"\230",true},{"\232",true},{"\233",true},{"\235",true},{"\244",true},{"\253",true},{"\255",true},},{{"\50",true},{"\79",true},{"\81",true},{"\98",true},{"\100",true},{"\163",true},{"\164",true},{"\192",true},{"\193",true},{"\196",true},{"\210",true},{"\211",true},{"\213",true},{"\214",true},{"\224",true},{"\225",true},{"\228",true},{"\241",true},{"\245",true},},{{"\14",true},{"\36",true},{"\38",true},{"\52",true},{"\54",true},{"\57",true},{"\75",true},{"\83",true},{"\85",true},{"\90",true},{"\101",true},{"\121",true},{"\181",true},{"\197",true},{"\229",true},{"\240",true},{"\248",true},},{{"\11",true},{"\51",true},{"\80",true},{"\97",true},{"\104",true},{"\112",true},{"\113",true},{"\119",true},{"\177",true},{"\188",true},{"\199",true},{"\222",true},{"\242",true},{"\243",true},{"\246",true},{"\249",true},{"\250",true},{"\252",true},},{{"\4",true},{"\16",true},{"\17",true},{"\24",true},{"\25",true},{"\30",true},{"\31",true},{"\67",true},{"\70",true},{"\86",true},{"\88",true},{"\109",true},{"\115",true},{"\122",true},{"\162",true},{"\189",true},{"\217",true},{"\218",true},{"\220",true},{"\231",true},{"\251",true},{"\254",true},},{{"\7",true},{"\19",true},{"\49",true},{"\55",true},{"\107",true},{"\110",true},{"\111",true},{"\117",true},{"\186",true},{"\206",true},{"\219",true},},{{"\26",true},{"\27",true},{"\37",true},{"\73",true},{"\76",true},{"\84",true},{"\91",true},{"\93",true},{"\99",true},{"\102",true},{"\106",true},{"\170",true},{"\204",true},{"\205",true},{"\207",true},},{{"\29",true},{"\61",true},{"\74",true},{"\171",true},{"\187",true},},{{"\40",true},{"\41",true},{"\43",true},{"\63",true},{"\89",true},{"\114",true},{"\116",true},{"\118",true},{"\120",true},{"\123",true},{"\125",true},{"\129",true},{"\130",true},{"\132",true},{"\136",true},{"\144",true},{"\159",false},{"\191",true},{"\215",true},{"\221",true},},{{"\22",true},{"\176",true},{"\179",true},{"\185",true},{"\238",true},},{{"\28",true},{"\47",true},{"\60",true},{"\62",true},{"\92",true},{"\108",true},{"\124",true},{"\172",true},{"\178",true},{"\236",true},{"\237",true},{"\239",true},{"\247",true},},{{"\33",true},{"\34",true},{"\42",true},{"\105",true},{"\126",true},{"\161",true},{"\166",true},},{{"\45",true},{"\59",true},{"\94",true},{"\95",true},{"\173",true},{"\175",true},},{{"\58",true},{"\183",true},},{{"\39",true},{"\44",true},{"\96",true},},{{"\46",true},{"\168",true},{"\180",true},{"\184",true},},{{"\0",true},{"\9",true},{"\10",true},{"\13",true},{"\32",true},{"\128",true},{"\160",true},},}
  18.  
  19. local colors = {}
  20. for i = 0, 15 do
  21. colors[i] = string.format("%x", i)
  22. end
  23.  
  24. monitor.setTextScale(0.5)
  25. monitor.setCursorPos(1, 1)
  26. monitor.clear()
  27. local table_insert = table.insert
  28.  
  29. local function linspace(start, end_, num)
  30. local linspaced = {}
  31. if num == 0 then return linspaced end
  32. if num == 1 then
  33. table_insert(linspaced, start)
  34. return linspaced
  35. end
  36.  
  37. local delta = (end_ - start) / (num - 1)
  38.  
  39. for i = 0, num-2 do
  40. table_insert(linspaced, start+delta*i)
  41. end
  42. table_insert(linspaced, end_)
  43.  
  44. return linspaced
  45. end
  46.  
  47. local function split(inputstr, sep)
  48. if sep == nil then sep = "%s" end
  49. local t={}
  50. for str in string.gmatch(inputstr, "([^"..sep.."]+)") do table.insert(t, str) end
  51. return t
  52. end
  53.  
  54. if depth_map then
  55. for i, num in ipairs(linspace(1, 0, 16)) do
  56. monitor.setPaletteColor(2^(i-1), num, num, num)
  57. end
  58. end
  59.  
  60. local data = {
  61. block = {
  62. minecraft = {
  63. gold_block = "4",
  64.  
  65. polished_diorite = "8",
  66. stone = "8",
  67. iron_ore = "8",
  68. gravel = "8",
  69. coal_ore = "8",
  70. emerald_ore = "8",
  71.  
  72. waxed_cut_copper_slab = "1",
  73. spruce_door = "1",
  74. dirt = "1",
  75.  
  76. oak_planks = "c",
  77. lectern = "c",
  78. oak_log = "c",
  79. acacia_log = "c",
  80.  
  81. grass_block = "d",
  82. grass = "d",
  83. tall_grass = "d",
  84.  
  85. oak_leaves = "5",
  86. acacia_leaves = "5",
  87.  
  88. crimson_planks = "a",
  89. }
  90. }
  91. }
  92.  
  93. local function get_pixel_normal(item)
  94. if item.is_block then
  95. local res = data
  96. for _, key in ipairs(split(item.block_type, ".")) do
  97. res = res[key]
  98. if res == nil then return {" ", "0", "b"} end
  99. end
  100. if res == nil then return {" ", "0", "b"} end
  101. return {" ", "0", res}
  102. end
  103.  
  104. return {" ", "0", "e"}
  105. end
  106.  
  107. local function get_pixel_depthmap(item)
  108. if (item.distance == nil or item.distance > max_distance) then return {" ", "0", colors[15]} end
  109. local rel = (item.distance / max_distance) * 15
  110. local frel = math.floor(rel)
  111.  
  112. local rel_chr_line = char_data[math.floor((1 - rel + frel) * (#char_data-1))+1]
  113. local rel_chr = rel_chr_line[math.floor(math.random()*(#rel_chr_line-1))+1]
  114.  
  115. local fcolor = colors[frel]
  116. local scolor = colors[math.min(15, frel+1)]
  117.  
  118. return {
  119. rel_chr[1],
  120. rel_chr[2] and scolor or fcolor,
  121. rel_chr[2] and fcolor or scolor
  122. }
  123. end
  124.  
  125. local start = os.epoch("utc")
  126. local i = 0
  127. local function yield()
  128. if (os.epoch("utc") - start > 1000) then
  129. print("pixels " .. i)
  130. i = 0
  131. os.queueEvent("yield")
  132. os.pullEvent("yield")
  133. start = os.epoch("utc")
  134. end
  135. i = i + 1
  136. end
  137.  
  138.  
  139. local x_axis = linspace(-width_yaw_range, width_yaw_range, width)
  140. local y_axis = linspace(-height_pitch_range, height_pitch_range, height)
  141.  
  142. monitor.setCursorPos(1, height)
  143. for y=1, height do
  144. for x=1, width do
  145. yield()
  146.  
  147. monitor.setCursorPos(x, height - y + 1)
  148.  
  149. local yr = y_axis[y]
  150. local xr = x_axis[x]
  151.  
  152. local item = rc.raycast(max_distance, {yr, xr, vector_fov}, euler_mode, true, cache)
  153. local pix = depth_map and get_pixel_depthmap(item) or get_pixel_normal(item)
  154. monitor.blit(pix[1], pix[2], pix[3])
  155. end end
Add Comment
Please, Sign In to add comment