Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- typist.lua
- -- Realistic terminal typing for ComputerCraft 1.7
- -- ===== CONFIG =====
- local BASE_DELAY = 0.05
- local VARIANCE = 0.04
- local PUNCT_DELAY = 0.12
- local LINE_DELAY = 0.25
- -- ===== SETUP =====
- local args = { ... }
- if not args[1] then
- print("Usage: typist <file>")
- return
- end
- local filename = args[1]
- if not fs.exists(filename) then
- print("File not found.")
- return
- end
- local file = fs.open(filename, "r")
- if not file then
- print("Could not open file.")
- return
- end
- math.randomseed(os.time())
- local function humanSleep(base)
- local d = base + (math.random() * VARIANCE * 2 - VARIANCE)
- if d < 0 then d = 0 end
- sleep(d)
- end
- -- ===== TERMINAL HELPERS =====
- local function advanceCursor()
- local x, y = term.getCursorPos()
- local w, h = term.getSize()
- if x > w then
- x = 1
- y = y + 1
- end
- if y > h then
- term.scroll(1)
- y = h
- end
- term.setCursorPos(x, y)
- end
- local function typeChar(c)
- term.write(c)
- advanceCursor()
- if c:match("[%.%,%!%?]") then
- humanSleep(PUNCT_DELAY)
- else
- humanSleep(BASE_DELAY)
- end
- end
- local function newLine()
- local _, y = term.getCursorPos()
- local _, h = term.getSize()
- if y >= h then
- term.scroll(1)
- term.setCursorPos(1, h)
- else
- term.setCursorPos(1, y + 1)
- end
- sleep(LINE_DELAY)
- end
- -- ===== MAIN LOOP =====
- while true do
- local line = file.readLine()
- if not line then break end
- for i = 1, #line do
- typeChar(line:sub(i, i))
- end
- newLine()
- end
- file.close()
Advertisement
Add Comment
Please, Sign In to add comment