Advertisement
Famous1337

Improved Holo Text Program

Feb 28th, 2016
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Generates a random heightmap and displays scrolling text above it.
  2.  
  3. local component = require("component")
  4. local noise = require("noise")
  5. local keyboard = require("keyboard")
  6. local shell = require("shell")
  7. local hologram = component.hologram
  8.  
  9. hologram.clear()
  10.  
  11.  
  12. local glyphs = {
  13. ["a"]=[[
  14. XXXXX
  15. X   X
  16. XXXXX
  17. X   X
  18. X   X
  19. ]],
  20. ["b"]=[[
  21. XXXX
  22. X   X
  23. XXXX
  24. X   X
  25. XXXX
  26. ]],
  27. ["c"]=[[
  28. XXXXX
  29. X    
  30. X    
  31. X    
  32. XXXXX
  33. ]],
  34. ["d"]=[[
  35. XXXX
  36. X   X
  37. X   X
  38. X   X
  39. XXXX
  40. ]],
  41. ["e"]=[[
  42. XXXXX
  43. X    
  44. XXXX
  45. X    
  46. XXXXX
  47. ]],
  48. ["f"]=[[
  49. XXXXX
  50. X    
  51. XXXX
  52. X    
  53. X    
  54. ]],
  55. ["g"]=[[
  56. XXXXX
  57. X    
  58. X XXX
  59. X   X
  60. XXXXX
  61. ]],
  62. ["h"]=[[
  63. X   X
  64. X   X
  65. XXXXX
  66. X   X
  67. X   X
  68. ]],
  69. ["i"]=[[
  70.  XXX
  71.   X  
  72.   X  
  73.   X  
  74.  XXX
  75. ]],
  76. ["j"]=[[
  77.     X
  78.     X
  79.     X
  80. X   X
  81. XXXXX
  82. ]],
  83. ["k"]=[[
  84. X   X
  85. X  X
  86. XXX  
  87. X  X
  88. X   X
  89. ]],
  90. ["l"]=[[
  91. X    
  92. X    
  93. X    
  94. X    
  95. XXXXX
  96. ]],
  97. ["m"]=[[
  98. X   X
  99. XX XX
  100. X X X
  101. X   X
  102. X   X
  103. ]],
  104. ["n"]=[[
  105. X   X
  106. XX  X
  107. X X X
  108. X  XX
  109. X   X
  110. ]],
  111. ["o"]=[[
  112. XXXXX
  113. X   X
  114. X   X
  115. X   X
  116. XXXXX
  117. ]],
  118. ["p"]=[[
  119. XXXXX
  120. X   X
  121. XXXXX
  122. X    
  123. X    
  124. ]],
  125. ["q"]=[[
  126. XXXXX
  127. X   X
  128. X   X
  129. X  X
  130. XXX X
  131. ]],
  132. ["r"]=[[
  133. XXXXX
  134. X   X
  135. XXXX
  136. X   X
  137. X   X
  138. ]],
  139. ["s"]=[[
  140. XXXXX
  141. X    
  142. XXXXX
  143.     X
  144. XXXXX
  145. ]],
  146. ["t"]=[[
  147. XXXXX
  148.   X  
  149.   X  
  150.   X  
  151.   X  
  152. ]],
  153. ["u"]=[[
  154. X   X
  155. X   X
  156. X   X
  157. X   X
  158. XXXXX
  159. ]],
  160. ["v"]=[[
  161. X   X
  162. X   X
  163. X   X
  164.  X X
  165.   X  
  166. ]],
  167. ["w"]=[[
  168. X   X
  169. X   X
  170. X X X
  171. X X X
  172.  X X
  173. ]],
  174. ["x"]=[[
  175. X   X
  176.  X X
  177.   X  
  178.  X X
  179. X   X
  180. ]],
  181. ["y"]=[[
  182. X   X
  183. X   X
  184.  XXX
  185.   X  
  186.   X  
  187. ]],
  188. ["z"]=[[
  189. XXXXX
  190.     X
  191.  XXX
  192. X    
  193. XXXXX
  194. ]],
  195. ["0"]=[[
  196.  XXX
  197. X   X
  198. X X X
  199. X   X
  200.  XXX
  201. ]],
  202. ["1"]=[[
  203.   XX
  204.  X X
  205.    X
  206.    X
  207.    X
  208. ]],
  209. ["2"]=[[
  210. XXXX
  211.     X
  212.   X  
  213. X    
  214. XXXXX
  215. ]],
  216. ["3"]=[[
  217. XXXX
  218.     X
  219.  XXX
  220.     X
  221. XXXX
  222. ]],
  223. ["4"]=[[
  224. X   X
  225. X   X
  226. XXXXX
  227.     X
  228.     X
  229. ]],
  230. ["5"]=[[
  231. XXXXX
  232. X    
  233. XXXX
  234.     X
  235. XXXX
  236. ]],
  237. ["6"]=[[
  238.  XXX
  239. X    
  240. XXXX
  241. X   X
  242.  XXX
  243. ]],
  244. ["7"]=[[
  245. XXXXX
  246.    X
  247.  XXX
  248.   X  
  249.  X  
  250. ]],
  251. ["8"]=[[
  252.  XXX
  253. X   X
  254.  XXX
  255. X   X
  256.  XXX
  257. ]],
  258. ["9"]=[[
  259.  XXX
  260. X   X
  261.  XXXX
  262.     X
  263.  XXX
  264. ]],
  265. [" "]=[[
  266.      
  267.      
  268.      
  269.      
  270.      
  271. ]],
  272. ["."]=[[
  273.    
  274.    
  275.    
  276.    
  277.  X
  278. ]],
  279. [","]=[[
  280.    
  281.    
  282.    
  283.   X
  284.  X  
  285. ]],
  286. [";"]=[[
  287.    
  288.   X
  289.    
  290.   X
  291.  X  
  292. ]],
  293. ["-"]=[[
  294.      
  295.      
  296.  XXX
  297.      
  298.      
  299. ]],
  300. ["+"]=[[
  301.      
  302.   X  
  303.  XXX
  304.   X  
  305.      
  306. ]],
  307. ["*"]=[[
  308.      
  309.  X X
  310.   X  
  311.  X X
  312.      
  313. ]],
  314. ["/"]=[[
  315.     X
  316.    X
  317.   X  
  318.  X  
  319. X    
  320. ]],
  321. ["\\"]=[[
  322. X    
  323.  X  
  324.   X  
  325.    X
  326.     X
  327. ]],
  328. ["_"]=[[
  329.      
  330.      
  331.      
  332.      
  333. XXXXX
  334. ]],
  335. ["!"]=[[
  336.  X
  337.  X
  338.  X
  339.    
  340.  X
  341. ]],
  342. ["?"]=[[
  343.  XXX
  344.     X
  345.   XX
  346.      
  347.   X  
  348. ]],
  349. ["("]=[[
  350.   X
  351.  X  
  352.  X  
  353.  X  
  354.   X
  355. ]],
  356. [")"]=[[
  357.  X  
  358.   X
  359.   X
  360.   X
  361.  X  
  362. ]],
  363. }
  364.  
  365. local args = shell.parse(...)
  366. local text = "Open Computers"
  367. if args[1] then
  368.   text = tostring(args[1])
  369. else
  370.   print("No text specified, using default value 'Open Computers'.")
  371. end
  372. local text = text .. " "
  373.  
  374. -- Generate one big string that represents the concatenated glyphs for the provided text.
  375. local value = ""
  376. for row = 1, 5 do
  377.   for col = 1, #text do
  378.     local char = string.sub(text:lower(), col, col)
  379.     local glyph = glyphs[char]
  380.     if glyph then
  381.       local s = 0
  382.       for _ = 2, row do
  383.         s = string.find(glyph, "\n", s + 1, true)
  384.         if not s then
  385.           break
  386.         end
  387.       end
  388.       if s then
  389.         local line = string.sub(glyph, s + 1, (string.find(glyph, "\n", s + 1, true) or 0) - 1)
  390.         value = value .. line .. " "
  391.       end
  392.     end
  393.   end
  394.   value = value .. "\n"
  395. end
  396.  
  397. local bm = {}
  398. for token in value:gmatch("([^\r\n]*)") do
  399.   if token ~= "" then
  400.     table.insert(bm, token)
  401.   end
  402. end
  403. local h,w = #bm,#bm[1]
  404. local sx, sy = math.max(0,(16*3-w)/2), 2*16-h-1
  405. local z = 16*3/2
  406.  
  407. print("Press Ctrl+W to stop.")
  408. for i = 1, math.huge do
  409.   os.sleep(0.1)
  410.   local function col(n)
  411.     return (n - 1 + i) % w + 1
  412.   end
  413.   for i=1, math.min(16*3,w) do
  414.     local x = sx + i
  415.     local i = col(i)
  416.     for j=1, h do
  417.       local y = sy + j-1
  418.       if bm[1+h-j]:sub(i, i) ~= " " then
  419.         hologram.set(x, y, z, 1)
  420.       else
  421.         hologram.set(x, y, z, 0)
  422.       end
  423.       if keyboard.isKeyDown(keyboard.keys.w) and keyboard.isControlDown() then
  424.         hologram.clear()
  425.         os.exit()
  426.       end
  427.     end
  428.   end
  429. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement