tempVal = 0 debugText = true --set this to false to not see $dev messages --program helpers function debug(message) --does $dev messages if debugText then print("$"..message) else end end function print(message) --prints message with new line io.write(message.."\n") end function cls() --clear screen term.clear() term.setCursorPos(1,1) end function pause() --system(pause) print("Press enter to continue...") io.read() end --movement functions function turnAround() turtle.turnRight() turtle.turnRight() end function KP7() --forward left turtle.turnLeft() turtle.forward() turtle.turnRight() end function KP9() --forward right turtle.turnRight() turtle.forward() turtle.turnLeft() end function KP8() turtle.forward() end function KP2() turtle.back() end function KP1() turtle.turnLeft() turtle.forward() turtle.turnRight() turtle.back() end function KP3() turtle.turnRight() turtle.forward() turtle.turnLeft() turtle.back() end function KP4() --strafe left LT() KP8() RT() end function KPA() turtle.up() end function KPD() turtle.down() end function RT() turtle.turnRight() end function LT() turtle.turnLeft() end function mainMenu() cls() local prompt = "Q" debug("reset prompt") print("===MAIN MENU===") print("What to do next?") print("(Choose any option not listed to exit)") print("0. Refuel 6. Hollow Box") print("1. Line 7. Solid Block") print("2. Fence 8. Move") print("3. Pad 9. Color by Number") print("4. Wall 10. Quarry") print("5. Circle X. Exit") io.write(">") prompt=io.read() if prompt == "0" then fillFuel() mainMenu() elseif prompt == "1" then lineMenu() elseif prompt == "2" then fenceMenu() elseif prompt == "3" then padMenu() elseif prompt == "4" then wallMenu() elseif prompt == "5" then circleMenu() elseif prompt == "6" then boxMenu() elseif prompt == "7" then cubeMenu() elseif prompt == "8" then moveMenu() elseif prompt == "9" then pixelArtMenu() elseif prompt == "10" then quarryMenu() else end end function fillFuel() cls() debug("filling fuel") local iterations = 0 while(iterations<16) do turtle.select(iterations+1) debug("selected "..turtle.getSelectedSlot()) if (not turtle.refuel(64)) then debug(iterations..": not fuel") else end iterations=iterations+1 debug("iteration #"..iterations) end debug("done refueling") pause() end function lineMenu() cls() local prompt = -1 debug("reset prompt") local iterations = 0 debug("reset iterations") print("Above or below?") print("1. Above") print("2. Below") io.write(">") prompt = io.read() print(" ") print("How far?") io.write(">") iterations = io.read() if tonumber(iterations)==nil then debug("bad iterations") print("Not a number. Returning...") pause() elseif tonumber(prompt)==nil then debug("bad prompts") print("Not a number. Returning...") pause() elseif prompt=="1" then debug("lineAbove "..iterations) lineAbove(iterations) pause() elseif prompt=="2" then debug("lineBelow "..iterations) lineBelow(iterations) pause() else debug("bad prompt") print("Returning...") pause() mainMenu() end end function lineAbove(distanceM) local iterations = 0 local distanceT = distanceM local distance = tonumber(distanceT) local slot = tonumber(turtle.getSelectedSlot()) local count = tonumber(turtle.getItemCount(slot)) if (distance > count) then lineAbove(turtle.getSelectedSlot()) print("Out of material. Which slot?") io.write(">") local prompt = io.read() if tonumber(prompt)==nil then print("Not a number. Cancelling...") pause() mainMenu() else turtle.select(prompt) lineAbove(distance-iterations) end else end local stock local fuel=turtle.getFuelLevel() while (iterations count) then lineBelow(turtle.getSelectedSlot()) print("Out of material. Which slot?") io.write(">") local prompt = io.read() if tonumber(prompt)==nil then print("Not a number. Cancelling...") pause() mainMenu() else turtle.select(prompt) lineBelow(distance-iterations) end else end local stock local fuel=turtle.getFuelLevel() while (iterations") varForward=io.read() if tonumber(varForward)==nil then print("Not a number. Returning to menu...") pause() mainMenu() else end print("Left or right?") print("1. Left\n2. Right") io.write(">") prompt = io.read() if tonumber(prompt)==nil then print("Not a number. Returning to menu...") pause() mainMenu() elseif prompt == "1" then leftTurn = true elseif prompt ~= "2" then print("Not a valid number. Returning to menu...") pause() mainMenu() else debug("setting LT to false just in case something stupid") leftTurn=false end print("How many long?") io.write(varForward.."x?\n>") varSideways=io.read() if tonumber(varSideways)==nil then print("Not a number. Returning to menu...") pause() mainMenu() else end print("Above or below?") print("1. Above\n2. Below") io.write(">") prompt = io.read() if tonumber(prompt)==nil then print("Not a number. Returning to menu...") pause() mainMenu() elseif prompt == "1" then boolUp = true elseif prompt ~= "2" then print("Not a valid number. Returning to menu...") pause() mainMenu() else end if boolUp then fenceAbove(varForward, varSideways, leftTurn) else fenceBelow(varForward, varSideways) end pause() mainMenu() end function fenceAbove(forwardM, sidewaysM, turnLeft) local forwardT = forwardM local forward = tonumber(forwardT) local sidewaysT = sidewaysM local sideways = tonumber(sidewaysT) lineAbove(forward) debug("leg 1 done") if turnLeft then LT() else RT() end lineAbove(sideways) debug("leg 2 done") if turnLeft then LT() else RT() end lineAbove(forward) debug("leg 3 done") if turnLeft then LT() else RT() end lineAbove(sideways) debug("leg 4 done") KP8()--start pos, no place if turnLeft then LT() else RT() end end function fenceBelow(forward, sideways, turnLeft) local forwardT = forwardM local forward = tonumber(forwardT) local sidewaysT = sidewaysM local sideways = tonumber(sidewaysT) lineBelow(forward) debug("leg 1 done") if turnLeft then LT() else RT() end lineBelow(sideways) debug("leg 2 done") if turnLeft then LT() else RT() end lineBelow(forward) debug("leg 3 done") if turnLeft then LT() else RT() end lineBelow(sideways) debug("leg 4 done") KP8() --return to start pos if turnLeft then LT() else RT() end --return to start rot end function padMenu() local varForward=0 local varSideways=0 local varUp=false local iterations=0 local leftTurn=false local prompt cls() print("How far forward?") io.write(">") varForward=io.read() if tonumber(varForward)==nil then print("Not a number. Returning to menu...") pause() mainMenu() else end print("Left or right?") print("1. Left\n2. Right") io.write(">") prompt = io.read() if tonumber(prompt)==nil then print("Not a number. Returning to menu...") pause() mainMenu() elseif prompt == "1" then leftTurn = true elseif prompt ~= "2" then print("Not a valid number. Returning to menu...") pause() mainMenu() else debug("setting LT to false just in case something stupid") leftTurn=false end print("How many long?") io.write(varForward.."x?\n>") varSideways=io.read() if tonumber(varSideways)==nil then print("Not a number. Returning to menu...") pause() mainMenu() else end print("Above or below?") print("1. Above\n2. Below") io.write(">") prompt = io.read() if tonumber(prompt)==nil then print("Not a number. Returning to menu...") pause() mainMenu() elseif prompt == "1" then varUp = true elseif prompt ~= "2" then print("Not a valid number. Returning to menu...") pause() mainMenu() end if varUp then padAbove(tonumber(varForward), tonumber(varSideways), leftTurn) else padBelow(tonumber(varForward), tonumber(varSideways), leftTurn) end pause() mainMenu() end function padAbove(forwardM, sidewaysM, turnLeft) local forwardT = forwardM local forward = tonumber(forwardT) local sidewaysT = sidewaysM local sideways = tonumber(sidewaysT) local smaller if (forward2 then fenceAbove(forward-2, sideways-2, turnLeft) else end if turnLeft then KP3() else KP1() end end function padBelow(forwardM, sidewaysM, turnLeft) local forwardT = forwardM local forward = tonumber(forwardT) local sidewaysT = sidewaysM local sideways = tonumber(sidewaysT) local smaller if (forward2 then fenceAbove(forward-2, sideways-2, turnLeft) else end if turnLeft then KP3() else KP1() end end function cubeMenu() local varForward=0 local varSideways=0 local varHeight=0 local boolUp=true local iterations=0 local leftTurn=false local prompt cls() print("How far forward?") io.write(">") varForward=io.read() if tonumber(varForward)==nil then print("Not a number. Returning to menu...") pause() mainMenu() else end print("Left or right?") print("1. Left\n2. Right") io.write(">") prompt = io.read() if tonumber(prompt)==nil then print("Not a number. Returning to menu...") pause() mainMenu() elseif prompt == "1" then leftTurn = true elseif prompt ~= "2" then print("Not a valid number. Returning to menu...") pause() mainMenu() else debug("setting LT to false just in case something stupid") leftTurn=false end print("How many long?") io.write(varForward.."x?\n>") varSideways=io.read() if tonumber(varSideways)==nil then print("Not a number. Returning to menu...") pause() mainMenu() else end print("Above or below?") print("1. Work Up\n2. Work Down") io.write(">") prompt = io.read() if tonumber(prompt)==nil then print("Not a number. Returning to menu...") pause() mainMenu() elseif prompt == "1" then boolUp = true elseif prompt ~= "2" then print("Not a valid number. Returning to menu...") pause() mainMenu() end print("How many tall?") io.write(varForward.."x"..varSideways.."x?\n>") varHeight=io.read() if tonumber(varHeight)==nil then print("Not a number. Returning to menu...") pause() mainMenu() else end if boolUp then cubeBelow(varForward, varSideways, varHeight, leftTurn) else cubeAbove(varForward, varSideways, varHeight, leftTurn) end pause() mainMenu() end function cubeAbove(varForwardM, varSidewaysM, varHeightM, leftTurn) local varForwardT = varForwardM local varForward = tonumber(varForwardT) local varSidewaysT = varSidewaysM local varSideways = tonumber(varSidewaysT) local varHeightT = varHeightM local varHeight = tonumber(varHeightT) local iterations = 0 while iterations < varHeight do padAbove(varForward, varSideways, leftTurn) debug("finished iteration "..iterations) iterations = iterations + 1 KPD() end KP2() debug("backing out") while iterations > 0 do KPA() debug("ascended from "..iterations) iterations = iterations -1 end pause() end function cubeBelow(varForwardM, varSidewaysM, varHeightM, leftTurn) local varForwardT = varForwardM local varForward = tonumber(varForwardT) local varSidewaysT = varSidewaysM local varSideways = tonumber(varSidewaysT) local varHeightT = varHeightM local varHeight = tonumber(varHeightT) local iterations = 0 while iterations < varHeight do padAbove(varForward, varSideways, leftTurn) debug("finished iteration "..iterations) iterations = iterations + 1 KPA() end KP2() debug("backing out") while iterations > 0 do KPD() debug("descended from "..iterations) iterations = iterations -1 end pause() end function boxMenu() local varForward=0 local varSideways=0 local varHeight=0 local boolUp=true local iterations=0 local leftTurn=false local prompt cls() print("How far forward?") io.write(">") varForward=io.read() if tonumber(varForward)==nil then print("Not a number. Returning to menu...") pause() mainMenu() else end print("Left or right?") print("1. Left\n2. Right") io.write(">") prompt = io.read() if tonumber(prompt)==nil then print("Not a number. Returning to menu...") pause() mainMenu() elseif prompt == "1" then leftTurn = true elseif prompt ~= "2" then print("Not a valid number. Returning to menu...") pause() mainMenu() else debug("setting LT to false just in case something stupid") leftTurn=false end print("How many long?") io.write(varForward.."x?\n>") varSideways=io.read() if tonumber(varSideways)==nil then print("Not a number. Returning to menu...") pause() mainMenu() else end print("Above or below?") print("1. Work Up\n2. Work Down") io.write(">") prompt = io.read() if tonumber(prompt)==nil then print("Not a number. Returning to menu...") pause() mainMenu() elseif prompt == "1" then boolUp = true elseif prompt ~= "2" then print("Not a valid number. Returning to menu...") pause() mainMenu() end print("How many tall?") io.write(varForward.."x"..varSideways.."x?\n>") varHeight=io.read() if tonumber(varHeight)==nil then print("Not a number. Returning to menu...") pause() mainMenu() else end if boolUp then cubeBelow(varForward, varSideways, varHeight, leftTurn) else cubeAbove(varForward, varSideways, varHeight, leftTurn) end pause() mainMenu() end function boxAbove(varForwardM, varSidewaysM, varHeightM, leftTurn) local varForwardT = varForwardM local varForward = tonumber(varForwardT) local varSidewaysT = varSidewaysM local varSideways = tonumber(varSidewaysT) local varHeightT = varHeightM local varHeight = tonumber(varHeightT) local iterations = 0 padAbove(varForward, varSideways, leftTurn) while iterations < varHeight-2 do fenceAbove(varForward, varSideways, leftTurn) debug("finished iteration "..iterations) iterations = iterations + 1 KPD() end padAbove(varForward, varSideways, leftTurn) KP2() debug("backing out") while iterations > 0 do KPA() debug("ascended from "..iterations) iterations = iterations -1 end pause() end function boxBelow(varForward, varSideways, varHeight, leftTurn) local varForwardT = varForwardM local varForward = tonumber(varForwardT) local varSidewaysT = varSidewaysM local varSideways = tonumber(varSidewaysT) local varHeightT = varHeightM local varHeight = tonumber(varHeightT) local iterations = 0 padBelow(varForward, varSideways, leftTurn) while iterations < varHeight-2 do fenceBelow(varForward, varSideways, leftTurn) debug("finished iteration "..iterations) iterations = iterations + 1 KPA() end padAbove(varForward, varSideways, leftTurn) KP2() debug("backing out") while iterations > 0 do KPD() debug("descended from "..iterations) iterations = iterations -1 end pause() end function circleMenu() cls() print("Coming Soon!") pause() mainMenu() end function pixelArtMenu() cls() print("Coming Soon") pause() mainMenu() end function wallMenu() cls() print("Coming Soon!") pause() mainMenu() end function moveMenu() --0 down, 5 up cls() print("Coming Soon! Will have mouse support!") pause() --option for "forward 7" or click menu --make click menu --while true do --make boolean escape var -- Wait specifically for a "mouse_click" event --local event, button, x, y = os.pullEvent("mouse_click") -- 'button' is 1 for left, 2 for right, 3 for middle --print("Button " .. button .. " was clicked at coordinates " .. x .. ", " .. y) --end mainMenu() end function quarryMenu() print("Coming Soon!") pause() mainMenu() end mainMenu() -- lineMenu(done) -- fenceMenu(done) -- padMenu(done) -- wallMenu(placeholder) -- circleMenu(postponed) -- boxMenu(done) -- cubeMenu(done) -- moveMenu(placeholder) -- pixelArtMenu(postponed) -- quarryMenu(placeholder)