mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-01-11 18:00:29 +00:00
Fix spacing on all of the rom (#323)
This commit is contained in:
parent
86e0330100
commit
fa70ebcac2
@ -2,7 +2,8 @@
|
||||
|
||||
(sources
|
||||
/src/main/resources/assets/computercraft/lua/bios.lua
|
||||
/src/main/resources/assets/computercraft/lua/rom/)
|
||||
/src/main/resources/assets/computercraft/lua/rom/
|
||||
/src/test/resources/test-rom)
|
||||
|
||||
(at /
|
||||
(linters
|
||||
|
@ -93,7 +93,7 @@ if _VERSION == "Lua 5.1" then
|
||||
bxor = bit32.bxor,
|
||||
brshift = bit32.arshift,
|
||||
blshift = bit32.lshift,
|
||||
blogic_rshift = bit32.rshift
|
||||
blogic_rshift = bit32.rshift,
|
||||
}
|
||||
end
|
||||
end
|
||||
@ -191,8 +191,8 @@ end
|
||||
function write( sText )
|
||||
expect(1, sText, "string", "number")
|
||||
|
||||
local w,h = term.getSize()
|
||||
local x,y = term.getCursorPos()
|
||||
local w, h = term.getSize()
|
||||
local x, y = term.getCursorPos()
|
||||
|
||||
local nLinesPrinted = 0
|
||||
local function newLine()
|
||||
@ -212,7 +212,7 @@ function write( sText )
|
||||
if whitespace then
|
||||
-- Print whitespace
|
||||
term.write( whitespace )
|
||||
x,y = term.getCursorPos()
|
||||
x, y = term.getCursorPos()
|
||||
sText = string.sub( sText, string.len(whitespace) + 1 )
|
||||
end
|
||||
|
||||
@ -233,8 +233,8 @@ function write( sText )
|
||||
newLine()
|
||||
end
|
||||
term.write( text )
|
||||
text = string.sub( text, w-x + 2 )
|
||||
x,y = term.getCursorPos()
|
||||
text = string.sub( text, w - x + 2 )
|
||||
x, y = term.getCursorPos()
|
||||
end
|
||||
else
|
||||
-- Print a word normally
|
||||
@ -242,7 +242,7 @@ function write( sText )
|
||||
newLine()
|
||||
end
|
||||
term.write( text )
|
||||
x,y = term.getCursorPos()
|
||||
x, y = term.getCursorPos()
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -613,10 +613,10 @@ function os.loadAPI( _sPath )
|
||||
expect(1, _sPath, "string")
|
||||
local sName = fs.getName( _sPath )
|
||||
if sName:sub(-4) == ".lua" then
|
||||
sName = sName:sub(1,-5)
|
||||
sName = sName:sub(1, -5)
|
||||
end
|
||||
if tAPIsLoading[sName] == true then
|
||||
printError( "API "..sName.." is already being loaded" )
|
||||
printError( "API " .. sName .. " is already being loaded" )
|
||||
return false
|
||||
end
|
||||
tAPIsLoading[sName] = true
|
||||
@ -636,7 +636,7 @@ function os.loadAPI( _sPath )
|
||||
end
|
||||
|
||||
local tAPI = {}
|
||||
for k,v in pairs( tEnv ) do
|
||||
for k, v in pairs( tEnv ) do
|
||||
if k ~= "_ENV" then
|
||||
tAPI[k] = v
|
||||
end
|
||||
@ -680,7 +680,7 @@ if http then
|
||||
|
||||
local methods = {
|
||||
GET = true, POST = true, HEAD = true,
|
||||
OPTIONS = true, PUT = true, DELETE = true
|
||||
OPTIONS = true, PUT = true, DELETE = true,
|
||||
}
|
||||
|
||||
local function checkKey( options, key, ty, opt )
|
||||
@ -842,7 +842,7 @@ function fs.complete( sPath, sLocation, bIncludeFiles, bIncludeDirs )
|
||||
end
|
||||
end
|
||||
local tFiles = fs.list( sDir )
|
||||
for n=1,#tFiles do
|
||||
for n = 1, #tFiles do
|
||||
local sFile = tFiles[n]
|
||||
if #sFile >= #sName and string.sub( sFile, 1, #sName ) == sName then
|
||||
local bIsDir = fs.isDir( fs.combine( sDir, sFile ) )
|
||||
@ -867,7 +867,7 @@ end
|
||||
-- Load APIs
|
||||
local bAPIError = false
|
||||
local tApis = fs.list( "rom/apis" )
|
||||
for _,sFile in ipairs( tApis ) do
|
||||
for _, sFile in ipairs( tApis ) do
|
||||
if string.sub( sFile, 1, 1 ) ~= "." then
|
||||
local sPath = fs.combine( "rom/apis", sFile )
|
||||
if not fs.isDir( sPath ) then
|
||||
@ -881,7 +881,7 @@ end
|
||||
if turtle and fs.isDir( "rom/apis/turtle" ) then
|
||||
-- Load turtle APIs
|
||||
local tApis = fs.list( "rom/apis/turtle" )
|
||||
for _,sFile in ipairs( tApis ) do
|
||||
for _, sFile in ipairs( tApis ) do
|
||||
if string.sub( sFile, 1, 1 ) ~= "." then
|
||||
local sPath = fs.combine( "rom/apis/turtle", sFile )
|
||||
if not fs.isDir( sPath ) then
|
||||
@ -896,7 +896,7 @@ end
|
||||
if pocket and fs.isDir( "rom/apis/pocket" ) then
|
||||
-- Load pocket APIs
|
||||
local tApis = fs.list( "rom/apis/pocket" )
|
||||
for _,sFile in ipairs( tApis ) do
|
||||
for _, sFile in ipairs( tApis ) do
|
||||
if string.sub( sFile, 1, 1 ) ~= "." then
|
||||
local sPath = fs.combine( "rom/apis/pocket", sFile )
|
||||
if not fs.isDir( sPath ) then
|
||||
@ -925,7 +925,7 @@ if commands and fs.isDir( "rom/apis/command" ) then
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
end,
|
||||
}
|
||||
setmetatable( commands, tCaseInsensitiveMetatable )
|
||||
setmetatable( commands.async, tCaseInsensitiveMetatable )
|
||||
@ -941,7 +941,7 @@ if bAPIError then
|
||||
print( "Press any key to continue" )
|
||||
os.pullEvent( "key" )
|
||||
term.clear()
|
||||
term.setCursorPos( 1,1 )
|
||||
term.setCursorPos( 1, 1 )
|
||||
end
|
||||
|
||||
-- Set default settings
|
||||
|
@ -23,7 +23,7 @@ function combine( ... )
|
||||
for i = 1, select('#', ...) do
|
||||
local c = select(i, ...)
|
||||
expect(i, c, "number")
|
||||
r = bit32.bor(r,c)
|
||||
r = bit32.bor(r, c)
|
||||
end
|
||||
return r
|
||||
end
|
||||
@ -50,8 +50,8 @@ function packRGB( r, g, b )
|
||||
expect(2, g, "number")
|
||||
expect(3, b, "number")
|
||||
return
|
||||
bit32.band( r * 255, 0xFF ) * 2^16 +
|
||||
bit32.band( g * 255, 0xFF ) * 2^8 +
|
||||
bit32.band( r * 255, 0xFF ) * 2 ^ 16 +
|
||||
bit32.band( g * 255, 0xFF ) * 2 ^ 8 +
|
||||
bit32.band( b * 255, 0xFF )
|
||||
end
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
-- Colours (for lovers of british spelling)
|
||||
local colours = _ENV
|
||||
for k,v in pairs(colors) do
|
||||
for k, v in pairs(colors) do
|
||||
colours[k] = v
|
||||
end
|
||||
|
||||
|
@ -22,7 +22,7 @@ end
|
||||
|
||||
-- Put native functions into the environment
|
||||
local env = _ENV
|
||||
for k,v in pairs( native ) do
|
||||
for k, v in pairs( native ) do
|
||||
env[k] = v
|
||||
end
|
||||
|
||||
@ -30,10 +30,10 @@ end
|
||||
local tAsync = {}
|
||||
local tNonNBTJSONCommands = {
|
||||
[ "tellraw" ] = true,
|
||||
[ "title" ] = true
|
||||
[ "title" ] = true,
|
||||
}
|
||||
local tCommands = native.list()
|
||||
for _,sCommandName in ipairs(tCommands) do
|
||||
for _, sCommandName in ipairs(tCommands) do
|
||||
if env[ sCommandName ] == nil then
|
||||
local bJSONIsNBT = tNonNBTJSONCommands[ sCommandName ] == nil
|
||||
env[ sCommandName ] = function( ... )
|
||||
|
@ -62,7 +62,7 @@ end
|
||||
|
||||
function stopAudio( name )
|
||||
if not name then
|
||||
for _,sName in ipairs( peripheral.getNames() ) do
|
||||
for _, sName in ipairs( peripheral.getNames() ) do
|
||||
stopAudio( sName )
|
||||
end
|
||||
else
|
||||
|
@ -21,12 +21,12 @@ local function trilaterate( A, B, C )
|
||||
local r2 = B.nDistance
|
||||
local r3 = C.nDistance
|
||||
|
||||
local x = (r1*r1 - r2*r2 + d*d) / (2*d)
|
||||
local y = (r1*r1 - r3*r3 - x*x + (x-i)*(x-i) + j*j) / (2*j)
|
||||
local x = (r1 * r1 - r2 * r2 + d * d) / (2 * d)
|
||||
local y = (r1 * r1 - r3 * r3 - x * x + (x - i) * (x - i) + j * j) / (2 * j)
|
||||
|
||||
local result = A.vPosition + ex * x + ey * y
|
||||
|
||||
local zSquared = r1*r1 - x*x - y*y
|
||||
local zSquared = r1 * r1 - x * x - y * y
|
||||
if zSquared > 0 then
|
||||
local z = math.sqrt( zSquared )
|
||||
local result1 = result + ez * z
|
||||
@ -66,7 +66,7 @@ function locate( _nTimeout, _bDebug )
|
||||
|
||||
-- Find a modem
|
||||
local sModemSide = nil
|
||||
for _,sSide in ipairs( rs.getSides() ) do
|
||||
for _, sSide in ipairs( rs.getSides() ) do
|
||||
if peripheral.getType( sSide ) == "modem" and peripheral.call( sSide, "isWireless" ) then
|
||||
sModemSide = sSide
|
||||
break
|
||||
@ -109,7 +109,7 @@ function locate( _nTimeout, _bDebug )
|
||||
if type(tMessage) == "table" and #tMessage == 3 and tonumber(tMessage[1]) and tonumber(tMessage[2]) and tonumber(tMessage[3]) then
|
||||
local tFix = { vPosition = vector.new( tMessage[1], tMessage[2], tMessage[3] ), nDistance = nDistance }
|
||||
if _bDebug then
|
||||
print( tFix.nDistance.." metres from "..tostring( tFix.vPosition ) )
|
||||
print( tFix.nDistance .. " metres from " .. tostring( tFix.vPosition ) )
|
||||
end
|
||||
if tFix.nDistance == 0 then
|
||||
pos1, pos2 = tFix.vPosition, nil
|
||||
@ -148,12 +148,12 @@ function locate( _nTimeout, _bDebug )
|
||||
if pos1 and pos2 then
|
||||
if _bDebug then
|
||||
print( "Ambiguous position" )
|
||||
print( "Could be "..pos1.x..","..pos1.y..","..pos1.z.." or "..pos2.x..","..pos2.y..","..pos2.z )
|
||||
print( "Could be " .. pos1.x .. "," .. pos1.y .. "," .. pos1.z .. " or " .. pos2.x .. "," .. pos2.y .. "," .. pos2.z )
|
||||
end
|
||||
return nil
|
||||
elseif pos1 then
|
||||
if _bDebug then
|
||||
print( "Position is "..pos1.x..","..pos1.y..","..pos1.z )
|
||||
print( "Position is " .. pos1.x .. "," .. pos1.y .. "," .. pos1.z )
|
||||
end
|
||||
return pos1.x, pos1.y, pos1.z
|
||||
else
|
||||
|
@ -18,8 +18,8 @@ function lookup( _sTopic )
|
||||
sPath = fs.combine( sPath, _sTopic )
|
||||
if fs.exists( sPath ) and not fs.isDir( sPath ) then
|
||||
return sPath
|
||||
elseif fs.exists( sPath..".txt" ) and not fs.isDir( sPath..".txt" ) then
|
||||
return sPath..".txt"
|
||||
elseif fs.exists( sPath .. ".txt" ) and not fs.isDir( sPath .. ".txt" ) then
|
||||
return sPath .. ".txt"
|
||||
end
|
||||
end
|
||||
|
||||
@ -30,18 +30,18 @@ end
|
||||
function topics()
|
||||
-- Add index
|
||||
local tItems = {
|
||||
[ "index" ] = true
|
||||
[ "index" ] = true,
|
||||
}
|
||||
|
||||
-- Add topics from the path
|
||||
for sPath in string.gmatch(sPath, "[^:]+") do
|
||||
if fs.isDir( sPath ) then
|
||||
local tList = fs.list( sPath )
|
||||
for _,sFile in pairs( tList ) do
|
||||
for _, sFile in pairs( tList ) do
|
||||
if string.sub( sFile, 1, 1 ) ~= "." then
|
||||
if not fs.isDir( fs.combine( sPath, sFile ) ) then
|
||||
if #sFile > 4 and sFile:sub(-4) == ".txt" then
|
||||
sFile = sFile:sub(1,-5)
|
||||
sFile = sFile:sub(1, -5)
|
||||
end
|
||||
tItems[ sFile ] = true
|
||||
end
|
||||
@ -63,7 +63,7 @@ function completeTopic( sText )
|
||||
expect(1, sText, "string")
|
||||
local tTopics = topics()
|
||||
local tResults = {}
|
||||
for n=1,#tTopics do
|
||||
for n = 1, #tTopics do
|
||||
local sTopic = tTopics[n]
|
||||
if #sTopic > #sText and string.sub( sTopic, 1, #sText ) == sText then
|
||||
table.insert( tResults, string.sub( sTopic, #sText + 1 ) )
|
||||
|
@ -129,11 +129,11 @@ handleMetatable = {
|
||||
}
|
||||
|
||||
local defaultInput = setmetatable({
|
||||
_handle = { readLine = _G.read }
|
||||
_handle = { readLine = _G.read },
|
||||
}, handleMetatable)
|
||||
|
||||
local defaultOutput = setmetatable({
|
||||
_handle = { write = _G.write }
|
||||
_handle = { write = _G.write },
|
||||
}, handleMetatable)
|
||||
|
||||
local defaultError = setmetatable({
|
||||
@ -147,7 +147,7 @@ local defaultError = setmetatable({
|
||||
_G.write(...)
|
||||
if term.isColour() then term.setTextColour(oldColour) end
|
||||
end,
|
||||
}
|
||||
},
|
||||
}, handleMetatable)
|
||||
|
||||
local currentInput = defaultInput
|
||||
|
@ -4,49 +4,49 @@
|
||||
local expect = dofile("rom/modules/main/cc/expect.lua").expect
|
||||
|
||||
local tKeys = {
|
||||
nil, "one", "two", "three", "four", -- 1
|
||||
"five", "six", "seven", "eight", "nine", -- 6
|
||||
"zero", "minus", "equals", "backspace","tab", -- 11
|
||||
"q", "w", "e", "r", "t", -- 16
|
||||
"y", "u", "i", "o", "p", -- 21
|
||||
"leftBracket","rightBracket","enter","leftCtrl","a", -- 26
|
||||
"s", "d", "f", "g", "h", -- 31
|
||||
"j", "k", "l", "semiColon","apostrophe", -- 36
|
||||
"grave", "leftShift","backslash","z", "x", -- 41
|
||||
"c", "v", "b", "n", "m", -- 46
|
||||
"comma", "period", "slash", "rightShift","multiply", -- 51
|
||||
"leftAlt", "space", "capsLock", "f1", "f2", -- 56
|
||||
"f3", "f4", "f5", "f6", "f7", -- 61
|
||||
"f8", "f9", "f10", "numLock", "scrollLock", -- 66
|
||||
"numPad7", "numPad8", "numPad9", "numPadSubtract","numPad4", -- 71
|
||||
"numPad5", "numPad6", "numPadAdd","numPad1", "numPad2", -- 76
|
||||
"numPad3", "numPad0", "numPadDecimal",nil, nil, -- 81
|
||||
nil, "f11", "f12", nil, nil, -- 86
|
||||
nil, nil, nil, nil, nil, -- 91
|
||||
nil, nil, nil, nil, "f13", -- 96
|
||||
"f14", "f15", nil, nil, nil, -- 101
|
||||
nil, nil, nil, nil, nil, -- 106
|
||||
nil, "kana", nil, nil, nil, -- 111
|
||||
nil, nil, nil, nil, nil, -- 116
|
||||
"convert", nil, "noconvert",nil, "yen", -- 121
|
||||
nil, nil, nil, nil, nil, -- 126
|
||||
nil, nil, nil, nil, nil, -- 131
|
||||
nil, nil, nil, nil, nil, -- 136
|
||||
"numPadEquals",nil, nil, "circumflex","at", -- 141
|
||||
"colon", "underscore","kanji", "stop", "ax", -- 146
|
||||
nil, nil, nil, nil, nil, -- 151
|
||||
"numPadEnter","rightCtrl",nil, nil, nil, -- 156
|
||||
nil, nil, nil, nil, nil, -- 161
|
||||
nil, nil, nil, nil, nil, -- 166
|
||||
nil, nil, nil, nil, nil, -- 171
|
||||
nil, nil, nil, "numPadComma",nil, -- 176
|
||||
"numPadDivide",nil, nil, "rightAlt", nil, -- 181
|
||||
nil, nil, nil, nil, nil, -- 186
|
||||
nil, nil, nil, nil, nil, -- 191
|
||||
nil, "pause", nil, "home", "up", -- 196
|
||||
"pageUp", nil, "left", nil, "right", -- 201
|
||||
nil, "end", "down", "pageDown", "insert", -- 206
|
||||
"delete" -- 211
|
||||
nil, "one", "two", "three", "four", -- 1
|
||||
"five", "six", "seven", "eight", "nine", -- 6
|
||||
"zero", "minus", "equals", "backspace", "tab", -- 11
|
||||
"q", "w", "e", "r", "t", -- 16
|
||||
"y", "u", "i", "o", "p", -- 21
|
||||
"leftBracket", "rightBracket", "enter", "leftCtrl", "a", -- 26
|
||||
"s", "d", "f", "g", "h", -- 31
|
||||
"j", "k", "l", "semiColon", "apostrophe", -- 36
|
||||
"grave", "leftShift", "backslash", "z", "x", -- 41
|
||||
"c", "v", "b", "n", "m", -- 46
|
||||
"comma", "period", "slash", "rightShift", "multiply", -- 51
|
||||
"leftAlt", "space", "capsLock", "f1", "f2", -- 56
|
||||
"f3", "f4", "f5", "f6", "f7", -- 61
|
||||
"f8", "f9", "f10", "numLock", "scrollLock", -- 66
|
||||
"numPad7", "numPad8", "numPad9", "numPadSubtract", "numPad4", -- 71
|
||||
"numPad5", "numPad6", "numPadAdd", "numPad1", "numPad2", -- 76
|
||||
"numPad3", "numPad0", "numPadDecimal", nil, nil, -- 81
|
||||
nil, "f11", "f12", nil, nil, -- 86
|
||||
nil, nil, nil, nil, nil, -- 91
|
||||
nil, nil, nil, nil, "f13", -- 96
|
||||
"f14", "f15", nil, nil, nil, -- 101
|
||||
nil, nil, nil, nil, nil, -- 106
|
||||
nil, "kana", nil, nil, nil, -- 111
|
||||
nil, nil, nil, nil, nil, -- 116
|
||||
"convert", nil, "noconvert", nil, "yen", -- 121
|
||||
nil, nil, nil, nil, nil, -- 126
|
||||
nil, nil, nil, nil, nil, -- 131
|
||||
nil, nil, nil, nil, nil, -- 136
|
||||
"numPadEquals", nil, nil, "circumflex", "at", -- 141
|
||||
"colon", "underscore", "kanji", "stop", "ax", -- 146
|
||||
nil, nil, nil, nil, nil, -- 151
|
||||
"numPadEnter", "rightCtrl", nil, nil, nil, -- 156
|
||||
nil, nil, nil, nil, nil, -- 161
|
||||
nil, nil, nil, nil, nil, -- 166
|
||||
nil, nil, nil, nil, nil, -- 171
|
||||
nil, nil, nil, "numPadComma", nil, -- 176
|
||||
"numPadDivide", nil, nil, "rightAlt", nil, -- 181
|
||||
nil, nil, nil, nil, nil, -- 186
|
||||
nil, nil, nil, nil, nil, -- 191
|
||||
nil, "pause", nil, "home", "up", -- 196
|
||||
"pageUp", nil, "left", nil, "right", -- 201
|
||||
nil, "end", "down", "pageDown", "insert", -- 206
|
||||
"delete", -- 211
|
||||
}
|
||||
|
||||
local keys = _ENV
|
||||
|
@ -6,14 +6,14 @@ local function drawPixelInternal( xPos, yPos )
|
||||
end
|
||||
|
||||
local tColourLookup = {}
|
||||
for n=1,16 do
|
||||
tColourLookup[ string.byte( "0123456789abcdef",n,n ) ] = 2^(n-1)
|
||||
for n = 1, 16 do
|
||||
tColourLookup[ string.byte( "0123456789abcdef", n, n ) ] = 2 ^ (n - 1)
|
||||
end
|
||||
|
||||
local function parseLine( tImageArg, sLine )
|
||||
local tLine = {}
|
||||
for x=1,sLine:len() do
|
||||
tLine[x] = tColourLookup[ string.byte(sLine,x,x) ] or 0
|
||||
for x = 1, sLine:len() do
|
||||
tLine[x] = tColourLookup[ string.byte(sLine, x, x) ] or 0
|
||||
end
|
||||
table.insert( tImageArg, tLine )
|
||||
end
|
||||
@ -89,7 +89,7 @@ function drawLine( startX, startY, endX, endY, nColour )
|
||||
if xDiff > math.abs(yDiff) then
|
||||
local y = minY
|
||||
local dy = yDiff / xDiff
|
||||
for x=minX,maxX do
|
||||
for x = minX, maxX do
|
||||
drawPixelInternal( x, math.floor( y + 0.5 ) )
|
||||
y = y + dy
|
||||
end
|
||||
@ -97,12 +97,12 @@ function drawLine( startX, startY, endX, endY, nColour )
|
||||
local x = minX
|
||||
local dx = xDiff / yDiff
|
||||
if maxY >= minY then
|
||||
for y=minY,maxY do
|
||||
for y = minY, maxY do
|
||||
drawPixelInternal( math.floor( x + 0.5 ), y )
|
||||
x = x + dx
|
||||
end
|
||||
else
|
||||
for y=minY,maxY,-1 do
|
||||
for y = minY, maxY, -1 do
|
||||
drawPixelInternal( math.floor( x + 0.5 ), y )
|
||||
x = x - dx
|
||||
end
|
||||
@ -142,13 +142,13 @@ function drawBox( startX, startY, endX, endY, nColour )
|
||||
maxY = startY
|
||||
end
|
||||
|
||||
for x=minX,maxX do
|
||||
for x = minX, maxX do
|
||||
drawPixelInternal( x, minY )
|
||||
drawPixelInternal( x, maxY )
|
||||
end
|
||||
|
||||
if maxY - minY >= 2 then
|
||||
for y=minY+1,maxY-1 do
|
||||
for y = minY + 1, maxY - 1 do
|
||||
drawPixelInternal( minX, y )
|
||||
drawPixelInternal( maxX, y )
|
||||
end
|
||||
@ -187,8 +187,8 @@ function drawFilledBox( startX, startY, endX, endY, nColour )
|
||||
maxY = startY
|
||||
end
|
||||
|
||||
for x=minX,maxX do
|
||||
for y=minY,maxY do
|
||||
for x = minX, maxX do
|
||||
for y = minY, maxY do
|
||||
drawPixelInternal( x, y )
|
||||
end
|
||||
end
|
||||
@ -198,9 +198,9 @@ function drawImage( tImage, xPos, yPos )
|
||||
expect(1, tImage, "table")
|
||||
expect(2, xPos, "number")
|
||||
expect(3, yPos, "number")
|
||||
for y=1,#tImage do
|
||||
for y = 1, #tImage do
|
||||
local tLine = tImage[y]
|
||||
for x=1,#tLine do
|
||||
for x = 1, #tLine do
|
||||
if tLine[x] > 0 then
|
||||
term.setBackgroundColor( tLine[x] )
|
||||
drawPixelInternal( x + xPos - 1, y + yPos - 1 )
|
||||
|
@ -21,7 +21,7 @@ local function runUntilLimit( _routines, _limit )
|
||||
local tFilters = {}
|
||||
local eventData = { n = 0 }
|
||||
while true do
|
||||
for n=1,count do
|
||||
for n = 1, count do
|
||||
local r = _routines[n]
|
||||
if r then
|
||||
if tFilters[r] == nil or tFilters[r] == eventData[1] or eventData[1] == "terminate" then
|
||||
@ -41,7 +41,7 @@ local function runUntilLimit( _routines, _limit )
|
||||
end
|
||||
end
|
||||
end
|
||||
for n=1,count do
|
||||
for n = 1, count do
|
||||
local r = _routines[n]
|
||||
if r and coroutine.status( r ) == "dead" then
|
||||
_routines[n] = nil
|
||||
|
@ -4,12 +4,12 @@ local native = peripheral
|
||||
|
||||
function getNames()
|
||||
local tResults = {}
|
||||
for _,sSide in ipairs( rs.getSides() ) do
|
||||
for _, sSide in ipairs( rs.getSides() ) do
|
||||
if native.isPresent( sSide ) then
|
||||
table.insert( tResults, sSide )
|
||||
if native.getType( sSide ) == "modem" and not native.call( sSide, "isWireless" ) then
|
||||
local tRemote = native.call( sSide, "getNamesRemote" )
|
||||
for _,sName in ipairs( tRemote ) do
|
||||
for _, sName in ipairs( tRemote ) do
|
||||
table.insert( tResults, sName )
|
||||
end
|
||||
end
|
||||
@ -23,7 +23,7 @@ function isPresent( _sSide )
|
||||
if native.isPresent( _sSide ) then
|
||||
return true
|
||||
end
|
||||
for _,sSide in ipairs( rs.getSides() ) do
|
||||
for _, sSide in ipairs( rs.getSides() ) do
|
||||
if native.getType( sSide ) == "modem" and not native.call( sSide, "isWireless" ) then
|
||||
if native.call( sSide, "isPresentRemote", _sSide ) then
|
||||
return true
|
||||
@ -38,7 +38,7 @@ function getType( _sSide )
|
||||
if native.isPresent( _sSide ) then
|
||||
return native.getType( _sSide )
|
||||
end
|
||||
for _,sSide in ipairs( rs.getSides() ) do
|
||||
for _, sSide in ipairs( rs.getSides() ) do
|
||||
if native.getType( sSide ) == "modem" and not native.call( sSide, "isWireless" ) then
|
||||
if native.call( sSide, "isPresentRemote", _sSide ) then
|
||||
return native.call( sSide, "getTypeRemote", _sSide )
|
||||
@ -53,7 +53,7 @@ function getMethods( _sSide )
|
||||
if native.isPresent( _sSide ) then
|
||||
return native.getMethods( _sSide )
|
||||
end
|
||||
for _,sSide in ipairs( rs.getSides() ) do
|
||||
for _, sSide in ipairs( rs.getSides() ) do
|
||||
if native.getType( sSide ) == "modem" and not native.call( sSide, "isWireless" ) then
|
||||
if native.call( sSide, "isPresentRemote", _sSide ) then
|
||||
return native.call( sSide, "getMethodsRemote", _sSide )
|
||||
@ -69,7 +69,7 @@ function call( _sSide, _sMethod, ... )
|
||||
if native.isPresent( _sSide ) then
|
||||
return native.call( _sSide, _sMethod, ... )
|
||||
end
|
||||
for _,sSide in ipairs( rs.getSides() ) do
|
||||
for _, sSide in ipairs( rs.getSides() ) do
|
||||
if native.getType( sSide ) == "modem" and not native.call( sSide, "isWireless" ) then
|
||||
if native.call( sSide, "isPresentRemote", _sSide ) then
|
||||
return native.call( sSide, "callRemote", _sSide, _sMethod, ... )
|
||||
@ -84,7 +84,7 @@ function wrap( _sSide )
|
||||
if peripheral.isPresent( _sSide ) then
|
||||
local tMethods = peripheral.getMethods( _sSide )
|
||||
local tResult = {}
|
||||
for _,sMethod in ipairs( tMethods ) do
|
||||
for _, sMethod in ipairs( tMethods ) do
|
||||
tResult[sMethod] = function( ... )
|
||||
return peripheral.call( _sSide, sMethod, ... )
|
||||
end
|
||||
@ -98,7 +98,7 @@ function find( sType, fnFilter )
|
||||
expect(1, sType, "string")
|
||||
expect(2, fnFilter, "function", "nil")
|
||||
local tResults = {}
|
||||
for _,sName in ipairs( peripheral.getNames() ) do
|
||||
for _, sName in ipairs( peripheral.getNames() ) do
|
||||
if peripheral.getType( sName ) == sType then
|
||||
local wrapped = peripheral.wrap( sName )
|
||||
if fnFilter == nil or fnFilter( sName, wrapped ) then
|
||||
|
@ -10,7 +10,7 @@ local tHostnames = {}
|
||||
function open( sModem )
|
||||
expect(1, sModem, "string")
|
||||
if peripheral.getType( sModem ) ~= "modem" then
|
||||
error( "No such modem: "..sModem, 2 )
|
||||
error( "No such modem: " .. sModem, 2 )
|
||||
end
|
||||
peripheral.call( sModem, "open", os.getComputerID() )
|
||||
peripheral.call( sModem, "open", CHANNEL_BROADCAST )
|
||||
@ -21,13 +21,13 @@ function close( sModem )
|
||||
if sModem then
|
||||
-- Close a specific modem
|
||||
if peripheral.getType( sModem ) ~= "modem" then
|
||||
error( "No such modem: "..sModem, 2 )
|
||||
error( "No such modem: " .. sModem, 2 )
|
||||
end
|
||||
peripheral.call( sModem, "close", os.getComputerID() )
|
||||
peripheral.call( sModem, "close", CHANNEL_BROADCAST )
|
||||
else
|
||||
-- Close all modems
|
||||
for _,sModem in ipairs( peripheral.getNames() ) do
|
||||
for _, sModem in ipairs( peripheral.getNames() ) do
|
||||
if isOpen( sModem ) then
|
||||
close( sModem )
|
||||
end
|
||||
@ -44,7 +44,7 @@ function isOpen( sModem )
|
||||
end
|
||||
else
|
||||
-- Check if any modem is open
|
||||
for _,sModem in ipairs( peripheral.getNames() ) do
|
||||
for _, sModem in ipairs( peripheral.getNames() ) do
|
||||
if isOpen( sModem ) then
|
||||
return true
|
||||
end
|
||||
@ -79,7 +79,7 @@ function send( nRecipient, message, sProtocol )
|
||||
sent = true
|
||||
else
|
||||
-- Send on all open modems, to the target and to repeaters
|
||||
for _,sModem in ipairs( peripheral.getNames() ) do
|
||||
for _, sModem in ipairs( peripheral.getNames() ) do
|
||||
if isOpen( sModem ) then
|
||||
peripheral.call( sModem, "transmit", nRecipient, nReplyChannel, tMessage )
|
||||
peripheral.call( sModem, "transmit", CHANNEL_REPEAT, nReplyChannel, tMessage )
|
||||
|
@ -17,7 +17,7 @@ local copy
|
||||
function copy( value )
|
||||
if type(value) == "table" then
|
||||
local result = {}
|
||||
for k,v in pairs(value) do
|
||||
for k, v in pairs(value) do
|
||||
result[k] = copy(v)
|
||||
end
|
||||
return result
|
||||
@ -69,7 +69,7 @@ function load( sPath )
|
||||
return false
|
||||
end
|
||||
|
||||
for k,v in pairs(tFile) do
|
||||
for k, v in pairs(tFile) do
|
||||
if type(k) == "string" and
|
||||
(type(v) == "string" or type(v) == "number" or type(v) == "boolean" or type(v) == "table") then
|
||||
set( k, v )
|
||||
|
@ -16,11 +16,11 @@ term.redirect = function( target )
|
||||
if target == term or target == _G.term then
|
||||
error( "term is not a recommended redirect target, try term.current() instead", 2 )
|
||||
end
|
||||
for k,v in pairs( native ) do
|
||||
for k, v in pairs( native ) do
|
||||
if type( k ) == "string" and type( v ) == "function" then
|
||||
if type( target[k] ) ~= "function" then
|
||||
target[k] = function()
|
||||
error( "Redirect object is missing method "..k..".", 2 )
|
||||
error( "Redirect object is missing method " .. k .. ".", 2 )
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -48,13 +48,13 @@ for _, method in ipairs { "nativePaletteColor", "nativePaletteColour"} do
|
||||
native[method] = nil
|
||||
end
|
||||
|
||||
for k,v in pairs( native ) do
|
||||
for k, v in pairs( native ) do
|
||||
if type( k ) == "string" and type( v ) == "function" and term[k] == nil then
|
||||
term[k] = wrap( k )
|
||||
end
|
||||
end
|
||||
|
||||
local env = _ENV
|
||||
for k,v in pairs( term ) do
|
||||
for k, v in pairs( term ) do
|
||||
env[k] = v
|
||||
end
|
||||
|
@ -9,10 +9,10 @@ function slowWrite( sText, nRate )
|
||||
local nSleep = 1 / nRate
|
||||
|
||||
sText = tostring( sText )
|
||||
local x,y = term.getCursorPos()
|
||||
local x, y = term.getCursorPos()
|
||||
local len = string.len( sText )
|
||||
|
||||
for n=1,len do
|
||||
for n = 1, len do
|
||||
term.setCursorPos( x, y )
|
||||
sleep( nSleep )
|
||||
local nLines = write( string.sub( sText, 1, n ) )
|
||||
@ -42,7 +42,7 @@ function formatTime( nTime, bTwentyFourHour )
|
||||
end
|
||||
|
||||
local nHour = math.floor(nTime)
|
||||
local nMinute = math.floor((nTime - nHour)*60)
|
||||
local nMinute = math.floor((nTime - nHour) * 60)
|
||||
if sTOD then
|
||||
return string.format( "%d:%02d %s", nHour, nMinute, sTOD )
|
||||
else
|
||||
@ -54,11 +54,11 @@ local function makePagedScroll( _term, _nFreeLines )
|
||||
local nativeScroll = _term.scroll
|
||||
local nFreeLines = _nFreeLines or 0
|
||||
return function( _n )
|
||||
for _=1,_n do
|
||||
for _ = 1, _n do
|
||||
nativeScroll( 1 )
|
||||
|
||||
if nFreeLines <= 0 then
|
||||
local _,h = _term.getSize()
|
||||
local _, h = _term.getSize()
|
||||
_term.setCursorPos( 1, h )
|
||||
_term.write( "Press any key to continue" )
|
||||
os.pullEvent( "key" )
|
||||
@ -76,7 +76,7 @@ function pagedPrint( _sText, _nFreeLines )
|
||||
-- Setup a redirector
|
||||
local oldTerm = term.current()
|
||||
local newTerm = {}
|
||||
for k,v in pairs( oldTerm ) do
|
||||
for k, v in pairs( oldTerm ) do
|
||||
newTerm[k] = v
|
||||
end
|
||||
newTerm.scroll = makePagedScroll( oldTerm, _nFreeLines )
|
||||
@ -108,13 +108,13 @@ local function tabulateCommon( bPaged, ... )
|
||||
expect(i, tAll[i], "number", "table")
|
||||
end
|
||||
|
||||
local w,h = term.getSize()
|
||||
local w, h = term.getSize()
|
||||
local nMaxLen = w / 8
|
||||
for n, t in ipairs( tAll ) do
|
||||
if type(t) == "table" then
|
||||
for nu, sItem in pairs(t) do
|
||||
if type( sItem ) ~= "string" then
|
||||
error( "bad argument #"..n.."."..nu.." (expected string, got " .. type( sItem ) .. ")", 3 )
|
||||
error( "bad argument #" .. n .. "." .. nu .. " (expected string, got " .. type( sItem ) .. ")", 3 )
|
||||
end
|
||||
nMaxLen = math.max( string.len( sItem ) + 1, nMaxLen )
|
||||
end
|
||||
@ -123,7 +123,7 @@ local function tabulateCommon( bPaged, ... )
|
||||
local nCols = math.floor( w / nMaxLen )
|
||||
local nLines = 0
|
||||
local function newLine()
|
||||
if bPaged and nLines >= h-3 then
|
||||
if bPaged and nLines >= h - 3 then
|
||||
pagedPrint()
|
||||
else
|
||||
print()
|
||||
@ -207,11 +207,11 @@ local function serializeImpl( t, tTracking, sIndent )
|
||||
local sResult = "{\n"
|
||||
local sSubIndent = sIndent .. " "
|
||||
local tSeen = {}
|
||||
for k,v in ipairs(t) do
|
||||
for k, v in ipairs(t) do
|
||||
tSeen[k] = true
|
||||
sResult = sResult .. sSubIndent .. serializeImpl( v, tTracking, sSubIndent ) .. ",\n"
|
||||
end
|
||||
for k,v in pairs(t) do
|
||||
for k, v in pairs(t) do
|
||||
if not tSeen[k] then
|
||||
local sEntry
|
||||
if type(k) == "string" and not g_tLuaKeywords[k] and string.match( k, "^[%a_][%a%d_]*$" ) then
|
||||
@ -233,7 +233,7 @@ local function serializeImpl( t, tTracking, sIndent )
|
||||
return tostring(t)
|
||||
|
||||
else
|
||||
error( "Cannot serialize type "..sType, 0 )
|
||||
error( "Cannot serialize type " .. sType, 0 )
|
||||
|
||||
end
|
||||
end
|
||||
@ -241,7 +241,7 @@ end
|
||||
empty_json_array = setmetatable({}, {
|
||||
__newindex = function()
|
||||
error("attempt to mutate textutils.empty_json_array", 2)
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
local function serializeJSONImpl( t, tTracking, bNBTStyle )
|
||||
@ -264,7 +264,7 @@ local function serializeJSONImpl( t, tTracking, bNBTStyle )
|
||||
local sArrayResult = "["
|
||||
local nObjectSize = 0
|
||||
local nArraySize = 0
|
||||
for k,v in pairs(t) do
|
||||
for k, v in pairs(t) do
|
||||
if type(k) == "string" then
|
||||
local sEntry
|
||||
if bNBTStyle then
|
||||
@ -280,7 +280,7 @@ local function serializeJSONImpl( t, tTracking, bNBTStyle )
|
||||
nObjectSize = nObjectSize + 1
|
||||
end
|
||||
end
|
||||
for _,v in ipairs(t) do
|
||||
for _, v in ipairs(t) do
|
||||
local sEntry = serializeJSONImpl( v, tTracking, bNBTStyle )
|
||||
if nArraySize == 0 then
|
||||
sArrayResult = sArrayResult .. sEntry
|
||||
@ -305,7 +305,7 @@ local function serializeJSONImpl( t, tTracking, bNBTStyle )
|
||||
return tostring(t)
|
||||
|
||||
else
|
||||
error( "Cannot serialize type "..sType, 0 )
|
||||
error( "Cannot serialize type " .. sType, 0 )
|
||||
|
||||
end
|
||||
end
|
||||
@ -317,7 +317,7 @@ end
|
||||
|
||||
function unserialize( s )
|
||||
expect(1, s, "string")
|
||||
local func = load( "return "..s, "unserialize", "t", {} )
|
||||
local func = load( "return " .. s, "unserialize", "t", {} )
|
||||
if func then
|
||||
local ok, result = pcall( func )
|
||||
if ok then
|
||||
@ -346,7 +346,7 @@ function urlEncode( str )
|
||||
else
|
||||
-- Non-ASCII (encode as UTF-8)
|
||||
return
|
||||
string.format("%%%02X", 192 + bit32.band( bit32.arshift(n,6), 31 ) ) ..
|
||||
string.format("%%%02X", 192 + bit32.band( bit32.arshift(n, 6), 31 ) ) ..
|
||||
string.format("%%%02X", 128 + bit32.band( n, 63 ) )
|
||||
end
|
||||
end )
|
||||
@ -393,7 +393,7 @@ function complete( sSearchText, tSearchTable )
|
||||
local tResults = {}
|
||||
local tSeen = {}
|
||||
while tTable do
|
||||
for k,v in pairs( tTable ) do
|
||||
for k, v in pairs( tTable ) do
|
||||
if not tSeen[k] and type(k) == "string" then
|
||||
if string.find( k, sPart, 1, true ) == 1 then
|
||||
if not g_tLuaKeywords[k] and string.match( k, "^[%a_][%a%d_]*$" ) then
|
||||
|
@ -20,7 +20,7 @@ end
|
||||
|
||||
-- Put commands into environment table
|
||||
local env = _ENV
|
||||
for k,v in pairs( native ) do
|
||||
for k, v in pairs( native ) do
|
||||
if k == "equipLeft" or k == "equipRight" then
|
||||
env[k] = function( ... )
|
||||
local result, err = v( ... )
|
||||
|
@ -36,17 +36,17 @@ local vector = {
|
||||
)
|
||||
end,
|
||||
dot = function( self, o )
|
||||
return self.x*o.x + self.y*o.y + self.z*o.z
|
||||
return self.x * o.x + self.y * o.y + self.z * o.z
|
||||
end,
|
||||
cross = function( self, o )
|
||||
return vector.new(
|
||||
self.y*o.z - self.z*o.y,
|
||||
self.z*o.x - self.x*o.z,
|
||||
self.x*o.y - self.y*o.x
|
||||
self.y * o.z - self.z * o.y,
|
||||
self.z * o.x - self.x * o.z,
|
||||
self.x * o.y - self.y * o.x
|
||||
)
|
||||
end,
|
||||
length = function( self )
|
||||
return math.sqrt( self.x*self.x + self.y*self.y + self.z*self.z )
|
||||
return math.sqrt( self.x * self.x + self.y * self.y + self.z * self.z )
|
||||
end,
|
||||
normalize = function( self )
|
||||
return self:mul( 1 / self:length() )
|
||||
@ -60,7 +60,7 @@ local vector = {
|
||||
)
|
||||
end,
|
||||
tostring = function( self )
|
||||
return self.x..","..self.y..","..self.z
|
||||
return self.x .. "," .. self.y .. "," .. self.z
|
||||
end,
|
||||
}
|
||||
|
||||
@ -78,7 +78,7 @@ function new( x, y, z )
|
||||
local v = {
|
||||
x = tonumber(x) or 0,
|
||||
y = tonumber(y) or 0,
|
||||
z = tonumber(z) or 0
|
||||
z = tonumber(z) or 0,
|
||||
}
|
||||
setmetatable( v, vmetatable )
|
||||
return v
|
||||
|
@ -39,8 +39,8 @@ function create( parent, nX, nY, nWidth, nHeight, bStartVisible )
|
||||
local tEmptyColorLines = {}
|
||||
local function createEmptyLines( nWidth )
|
||||
sEmptySpaceLine = string_rep( " ", nWidth )
|
||||
for n=0,15 do
|
||||
local nColor = 2^n
|
||||
for n = 0, 15 do
|
||||
local nColor = 2 ^ n
|
||||
local sHex = tHex[nColor]
|
||||
tEmptyColorLines[nColor] = string_rep( sHex, nWidth )
|
||||
end
|
||||
@ -61,7 +61,7 @@ function create( parent, nX, nY, nWidth, nHeight, bStartVisible )
|
||||
local sEmptyText = sEmptySpaceLine
|
||||
local sEmptyTextColor = tEmptyColorLines[ nTextColor ]
|
||||
local sEmptyBackgroundColor = tEmptyColorLines[ nBackgroundColor ]
|
||||
for y=1,nHeight do
|
||||
for y = 1, nHeight do
|
||||
tLines[y] = {
|
||||
text = sEmptyText,
|
||||
textColor = sEmptyTextColor,
|
||||
@ -69,7 +69,7 @@ function create( parent, nX, nY, nWidth, nHeight, bStartVisible )
|
||||
}
|
||||
end
|
||||
|
||||
for i=0,15 do
|
||||
for i = 0, 15 do
|
||||
local c = 2 ^ i
|
||||
tPalette[c] = { parent.getPaletteColour( c ) }
|
||||
end
|
||||
@ -100,13 +100,13 @@ function create( parent, nX, nY, nWidth, nHeight, bStartVisible )
|
||||
end
|
||||
|
||||
local function redraw()
|
||||
for n=1,nHeight do
|
||||
for n = 1, nHeight do
|
||||
redrawLine( n )
|
||||
end
|
||||
end
|
||||
|
||||
local function updatePalette()
|
||||
for k,v in pairs( tPalette ) do
|
||||
for k, v in pairs( tPalette ) do
|
||||
parent.setPaletteColour( k, v[1], v[2], v[3] )
|
||||
end
|
||||
end
|
||||
@ -204,7 +204,7 @@ function create( parent, nX, nY, nWidth, nHeight, bStartVisible )
|
||||
local sEmptyText = sEmptySpaceLine
|
||||
local sEmptyTextColor = tEmptyColorLines[ nTextColor ]
|
||||
local sEmptyBackgroundColor = tEmptyColorLines[ nBackgroundColor ]
|
||||
for y=1,nHeight do
|
||||
for y = 1, nHeight do
|
||||
tLines[y] = {
|
||||
text = sEmptyText,
|
||||
textColor = sEmptyTextColor,
|
||||
@ -351,7 +351,7 @@ function create( parent, nX, nY, nWidth, nHeight, bStartVisible )
|
||||
local sEmptyText = sEmptySpaceLine
|
||||
local sEmptyTextColor = tEmptyColorLines[ nTextColor ]
|
||||
local sEmptyBackgroundColor = tEmptyColorLines[ nBackgroundColor ]
|
||||
for newY=1,nHeight do
|
||||
for newY = 1, nHeight do
|
||||
local y = newY + n
|
||||
if y >= 1 and y <= nHeight then
|
||||
tNewLines[newY] = tLines[y]
|
||||
@ -451,12 +451,12 @@ function create( parent, nX, nY, nWidth, nHeight, bStartVisible )
|
||||
local sEmptyText = sEmptySpaceLine
|
||||
local sEmptyTextColor = tEmptyColorLines[ nTextColor ]
|
||||
local sEmptyBackgroundColor = tEmptyColorLines[ nBackgroundColor ]
|
||||
for y=1,nNewHeight do
|
||||
for y = 1, nNewHeight do
|
||||
if y > nHeight then
|
||||
tNewLines[y] = {
|
||||
text = sEmptyText,
|
||||
textColor = sEmptyTextColor,
|
||||
backgroundColor = sEmptyBackgroundColor
|
||||
backgroundColor = sEmptyBackgroundColor,
|
||||
}
|
||||
else
|
||||
local tOldLine = tLines[y]
|
||||
|
@ -2,7 +2,7 @@ local expect = dofile("rom/modules/main/cc/expect.lua").expect
|
||||
|
||||
-- Setup process switching
|
||||
local parentTerm = term.current()
|
||||
local w,h = parentTerm.getSize()
|
||||
local w, h = parentTerm.getSize()
|
||||
|
||||
local tProcesses = {}
|
||||
local nCurrentProcess = nil
|
||||
@ -55,7 +55,7 @@ local function launchProcess( bFocus, tProgramEnv, sProgramPath, ... )
|
||||
local tProcess = {}
|
||||
tProcess.sTitle = fs.getName( sProgramPath )
|
||||
if bShowMenu then
|
||||
tProcess.window = window.create( parentTerm, 1, 2, w, h-1, false )
|
||||
tProcess.window = window.create( parentTerm, 1, 2, w, h - 1, false )
|
||||
else
|
||||
tProcess.window = window.create( parentTerm, 1, 1, w, h, false )
|
||||
end
|
||||
@ -102,7 +102,7 @@ end
|
||||
|
||||
local function cullProcesses()
|
||||
local culled = false
|
||||
for n=#tProcesses,1,-1 do
|
||||
for n = #tProcesses, 1, -1 do
|
||||
culled = culled or cullProcess( n )
|
||||
end
|
||||
return culled
|
||||
@ -132,7 +132,7 @@ local function redrawMenu()
|
||||
parentTerm.write( "<" )
|
||||
nCharCount = 1
|
||||
end
|
||||
for n=nScrollPos,#tProcesses do
|
||||
for n = nScrollPos, #tProcesses do
|
||||
if n == nCurrentProcess then
|
||||
parentTerm.setTextColor( menuMainTextColor )
|
||||
parentTerm.setBackgroundColor( menuMainBgColor )
|
||||
@ -165,14 +165,14 @@ local function resizeWindows()
|
||||
local windowY, windowHeight
|
||||
if bShowMenu then
|
||||
windowY = 2
|
||||
windowHeight = h-1
|
||||
windowHeight = h - 1
|
||||
else
|
||||
windowY = 1
|
||||
windowHeight = h
|
||||
end
|
||||
for n=1,#tProcesses do
|
||||
for n = 1, #tProcesses do
|
||||
local tProcess = tProcesses[n]
|
||||
local x,y = tProcess.window.getCursorPos()
|
||||
local x, y = tProcess.window.getCursorPos()
|
||||
if y > windowHeight then
|
||||
tProcess.window.scroll( y - windowHeight )
|
||||
tProcess.window.setCursorPos( x, windowHeight )
|
||||
@ -257,7 +257,7 @@ while #tProcesses > 0 do
|
||||
local sEvent = tEventData[1]
|
||||
if sEvent == "term_resize" then
|
||||
-- Resize event
|
||||
w,h = parentTerm.getSize()
|
||||
w, h = parentTerm.getSize()
|
||||
resizeWindows()
|
||||
redrawMenu()
|
||||
|
||||
@ -286,7 +286,7 @@ while #tProcesses > 0 do
|
||||
if nScrollPos ~= 1 then
|
||||
tabStart = 2
|
||||
end
|
||||
for n=nScrollPos,#tProcesses do
|
||||
for n = nScrollPos, #tProcesses do
|
||||
local tabEnd = tabStart + string.len( tProcesses[n].sTitle ) + 1
|
||||
if x >= tabStart and x <= tabEnd then
|
||||
selectProcess( n )
|
||||
@ -298,7 +298,7 @@ while #tProcesses > 0 do
|
||||
end
|
||||
else
|
||||
-- Passthrough to current process
|
||||
resumeProcess( nCurrentProcess, sEvent, button, x, bShowMenu and y-1 or y )
|
||||
resumeProcess( nCurrentProcess, sEvent, button, x, bShowMenu and y - 1 or y )
|
||||
if cullProcess( nCurrentProcess ) then
|
||||
setMenuVisible( #tProcesses >= 2 )
|
||||
redrawMenu()
|
||||
@ -318,7 +318,7 @@ while #tProcesses > 0 do
|
||||
end
|
||||
elseif not (bShowMenu and y == 1) then
|
||||
-- Passthrough to current process
|
||||
resumeProcess( nCurrentProcess, sEvent, p1, x, bShowMenu and y-1 or y )
|
||||
resumeProcess( nCurrentProcess, sEvent, p1, x, bShowMenu and y - 1 or y )
|
||||
if cullProcess( nCurrentProcess ) then
|
||||
setMenuVisible( #tProcesses >= 2 )
|
||||
redrawMenu()
|
||||
@ -329,7 +329,7 @@ while #tProcesses > 0 do
|
||||
-- Other event
|
||||
-- Passthrough to all processes
|
||||
local nLimit = #tProcesses -- Storing this ensures any new things spawned don't get the event
|
||||
for n=1,nLimit do
|
||||
for n = 1, nLimit do
|
||||
resumeProcess( n, table.unpack( tEventData, 1, tEventData.n ) )
|
||||
end
|
||||
if cullProcesses() then
|
||||
@ -341,7 +341,7 @@ while #tProcesses > 0 do
|
||||
if bWindowsResized then
|
||||
-- Pass term_resize to all processes
|
||||
local nLimit = #tProcesses -- Storing this ensures any new things spawned don't get the event
|
||||
for n=1,nLimit do
|
||||
for n = 1, nLimit do
|
||||
resumeProcess( n, "term_resize" )
|
||||
end
|
||||
bWindowsResized = false
|
||||
|
@ -19,7 +19,7 @@ else
|
||||
local tAliases = shell.aliases()
|
||||
local tList = {}
|
||||
for sAlias, sCommand in pairs( tAliases ) do
|
||||
table.insert( tList, sAlias..":"..sCommand )
|
||||
table.insert( tList, sAlias .. ":" .. sCommand )
|
||||
end
|
||||
table.sort( tList )
|
||||
textutils.pagedTabulate( tList )
|
||||
|
@ -1,6 +1,6 @@
|
||||
|
||||
local tApis = {}
|
||||
for k,v in pairs( _G ) do
|
||||
for k, v in pairs( _G ) do
|
||||
if type(k) == "string" and type(v) == "table" and k ~= "_G" then
|
||||
table.insert( tApis, k )
|
||||
end
|
||||
|
@ -18,7 +18,7 @@ local function printSuccess( text )
|
||||
end
|
||||
|
||||
local sCommand = string.lower( tArgs[1] )
|
||||
for n=2,#tArgs do
|
||||
for n = 2, #tArgs do
|
||||
sCommand = sCommand .. " " .. tArgs[n]
|
||||
end
|
||||
|
||||
@ -26,14 +26,14 @@ local bResult, tOutput = commands.exec( sCommand )
|
||||
if bResult then
|
||||
printSuccess( "Success" )
|
||||
if #tOutput > 0 then
|
||||
for n=1,#tOutput do
|
||||
for n = 1, #tOutput do
|
||||
print( tOutput[n] )
|
||||
end
|
||||
end
|
||||
else
|
||||
printError( "Failed" )
|
||||
if #tOutput > 0 then
|
||||
for n=1,#tOutput do
|
||||
for n = 1, #tOutput do
|
||||
print( tOutput[n] )
|
||||
end
|
||||
end
|
||||
|
@ -9,7 +9,7 @@ local sSource = shell.resolve( tArgs[1] )
|
||||
local sDest = shell.resolve( tArgs[2] )
|
||||
local tFiles = fs.find( sSource )
|
||||
if #tFiles > 0 then
|
||||
for _,sFile in ipairs( tFiles ) do
|
||||
for _, sFile in ipairs( tFiles ) do
|
||||
if fs.isDir( sDest ) then
|
||||
fs.copy( sFile, fs.combine( sDest, fs.getName(sFile) ) )
|
||||
elseif #tFiles == 1 then
|
||||
|
@ -21,9 +21,9 @@ if not fs.exists( sPath ) and not string.find( sPath, "%." ) then
|
||||
end
|
||||
end
|
||||
|
||||
local x,y = 1,1
|
||||
local w,h = term.getSize()
|
||||
local scrollX, scrollY = 0,0
|
||||
local x, y = 1, 1
|
||||
local w, h = term.getSize()
|
||||
local scrollX, scrollY = 0, 0
|
||||
|
||||
local tLines = {}
|
||||
local bRunning = true
|
||||
@ -99,7 +99,7 @@ local function save( _sPath )
|
||||
file.write( sLine .. "\n" )
|
||||
end
|
||||
else
|
||||
error( "Failed to open ".._sPath )
|
||||
error( "Failed to open " .. _sPath )
|
||||
end
|
||||
end
|
||||
|
||||
@ -130,7 +130,7 @@ local tKeywords = {
|
||||
["return"] = true,
|
||||
["then"] = true,
|
||||
["true"] = true,
|
||||
["until"]= true,
|
||||
["until"] = true,
|
||||
["while"] = true,
|
||||
}
|
||||
|
||||
@ -214,7 +214,7 @@ end
|
||||
|
||||
local function redrawText()
|
||||
local cursorX, cursorY = x, y
|
||||
for y=1,h-1 do
|
||||
for y = 1, h - 1 do
|
||||
term.setCursorPos( 1 - scrollX, y )
|
||||
term.clearLine()
|
||||
|
||||
@ -248,7 +248,7 @@ local function redrawMenu()
|
||||
term.clearLine()
|
||||
|
||||
-- Draw line numbers
|
||||
term.setCursorPos( w - string.len( "Ln "..y ) + 1, h )
|
||||
term.setCursorPos( w - string.len( "Ln " .. y ) + 1, h )
|
||||
term.setTextColour( highlightColour )
|
||||
term.write( "Ln " )
|
||||
term.setTextColour( textColour )
|
||||
@ -258,7 +258,7 @@ local function redrawMenu()
|
||||
if bMenu then
|
||||
-- Draw menu
|
||||
term.setTextColour( textColour )
|
||||
for nItem,sItem in pairs( tMenuItems ) do
|
||||
for nItem, sItem in pairs( tMenuItems ) do
|
||||
if nItem == nMenuItem then
|
||||
term.setTextColour( highlightColour )
|
||||
term.write( "[" )
|
||||
@ -268,7 +268,7 @@ local function redrawMenu()
|
||||
term.write( "]" )
|
||||
term.setTextColour( textColour )
|
||||
else
|
||||
term.write( " "..sItem.." " )
|
||||
term.write( " " .. sItem .. " " )
|
||||
end
|
||||
end
|
||||
else
|
||||
@ -289,12 +289,12 @@ local tMenuFuncs = {
|
||||
else
|
||||
local ok, _, fileerr = save( sPath )
|
||||
if ok then
|
||||
sStatus="Saved to "..sPath
|
||||
sStatus = "Saved to " .. sPath
|
||||
else
|
||||
if fileerr then
|
||||
sStatus="Error saving to "..fileerr
|
||||
sStatus = "Error saving to " .. fileerr
|
||||
else
|
||||
sStatus="Error saving to "..sPath
|
||||
sStatus = "Error saving to " .. sPath
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -326,7 +326,7 @@ local tMenuFuncs = {
|
||||
}
|
||||
printerTerminal.scroll = function()
|
||||
if nPage == 1 then
|
||||
printer.setPageTitle( sName.." (page "..nPage..")" )
|
||||
printer.setPageTitle( sName .. " (page " .. nPage .. ")" )
|
||||
end
|
||||
|
||||
while not printer.newPage() do
|
||||
@ -349,7 +349,7 @@ local tMenuFuncs = {
|
||||
if nPage == 1 then
|
||||
printer.setPageTitle( sName )
|
||||
else
|
||||
printer.setPageTitle( sName.." (page "..nPage..")" )
|
||||
printer.setPageTitle( sName .. " (page " .. nPage .. ")" )
|
||||
end
|
||||
end
|
||||
|
||||
@ -374,7 +374,7 @@ local tMenuFuncs = {
|
||||
bMenu = true
|
||||
|
||||
if nPage > 1 then
|
||||
sStatus = "Printed "..nPage.." Pages"
|
||||
sStatus = "Printed " .. nPage .. " Pages"
|
||||
else
|
||||
sStatus = "Printed 1 Page"
|
||||
end
|
||||
@ -391,14 +391,14 @@ local tMenuFuncs = {
|
||||
if nTask then
|
||||
shell.switchTab( nTask )
|
||||
else
|
||||
sStatus="Error starting Task"
|
||||
sStatus = "Error starting Task"
|
||||
end
|
||||
fs.delete( sTempPath )
|
||||
else
|
||||
sStatus="Error saving to "..sTempPath
|
||||
sStatus = "Error saving to " .. sTempPath
|
||||
end
|
||||
redrawMenu()
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
local function doMenuItem( _n )
|
||||
@ -431,9 +431,9 @@ local function setCursor( newX, newY )
|
||||
scrollY = y - 1
|
||||
screenY = 1
|
||||
bRedraw = true
|
||||
elseif screenY > h-1 then
|
||||
scrollY = y - (h-1)
|
||||
screenY = h-1
|
||||
elseif screenY > h - 1 then
|
||||
scrollY = y - (h - 1)
|
||||
screenY = h - 1
|
||||
bRedraw = true
|
||||
end
|
||||
|
||||
@ -456,7 +456,7 @@ load(sPath)
|
||||
|
||||
term.setBackgroundColour( bgColour )
|
||||
term.clear()
|
||||
term.setCursorPos(x,y)
|
||||
term.setCursorPos(x, y)
|
||||
term.setCursorBlink( true )
|
||||
|
||||
recomplete()
|
||||
@ -526,7 +526,7 @@ while bRunning do
|
||||
else
|
||||
-- Indent line
|
||||
local sLine = tLines[y]
|
||||
tLines[y] = string.sub(sLine,1,x-1) .. " " .. string.sub(sLine,x)
|
||||
tLines[y] = string.sub(sLine, 1, x - 1) .. " " .. string.sub(sLine, x)
|
||||
setCursor( x + 4, y )
|
||||
end
|
||||
end
|
||||
@ -566,7 +566,7 @@ while bRunning do
|
||||
if not bMenu then
|
||||
-- Move cursor to the beginning
|
||||
if x > 1 then
|
||||
setCursor(1,y)
|
||||
setCursor(1, y)
|
||||
end
|
||||
end
|
||||
|
||||
@ -586,8 +586,8 @@ while bRunning do
|
||||
if x > 1 then
|
||||
-- Move cursor left
|
||||
setCursor( x - 1, y )
|
||||
elseif x==1 and y>1 then
|
||||
setCursor( string.len( tLines[y-1] ) + 1, y - 1 )
|
||||
elseif x == 1 and y > 1 then
|
||||
setCursor( string.len( tLines[y - 1] ) + 1, y - 1 )
|
||||
end
|
||||
else
|
||||
-- Move menu left
|
||||
@ -608,7 +608,7 @@ while bRunning do
|
||||
elseif nCompletion and x == string.len(tLines[y]) + 1 then
|
||||
-- Accept autocomplete
|
||||
acceptCompletion()
|
||||
elseif x==nLimit and y<#tLines then
|
||||
elseif x == nLimit and y < #tLines then
|
||||
-- Go to next line
|
||||
setCursor( 1, y + 1 )
|
||||
end
|
||||
@ -627,12 +627,12 @@ while bRunning do
|
||||
local nLimit = string.len( tLines[y] ) + 1
|
||||
if x < nLimit then
|
||||
local sLine = tLines[y]
|
||||
tLines[y] = string.sub(sLine,1,x-1) .. string.sub(sLine,x+1)
|
||||
tLines[y] = string.sub(sLine, 1, x - 1) .. string.sub(sLine, x + 1)
|
||||
recomplete()
|
||||
redrawLine(y)
|
||||
elseif y<#tLines then
|
||||
tLines[y] = tLines[y] .. tLines[y+1]
|
||||
table.remove( tLines, y+1 )
|
||||
elseif y < #tLines then
|
||||
tLines[y] = tLines[y] .. tLines[y + 1]
|
||||
table.remove( tLines, y + 1 )
|
||||
recomplete()
|
||||
redrawText()
|
||||
end
|
||||
@ -644,17 +644,17 @@ while bRunning do
|
||||
if x > 1 then
|
||||
-- Remove character
|
||||
local sLine = tLines[y]
|
||||
if x > 4 and string.sub(sLine,x-4,x-1) == " " and not string.sub(sLine, 1, x - 1):find("%S") then
|
||||
tLines[y] = string.sub(sLine,1,x-5) .. string.sub(sLine,x)
|
||||
if x > 4 and string.sub(sLine, x - 4, x - 1) == " " and not string.sub(sLine, 1, x - 1):find("%S") then
|
||||
tLines[y] = string.sub(sLine, 1, x - 5) .. string.sub(sLine, x)
|
||||
setCursor( x - 4, y )
|
||||
else
|
||||
tLines[y] = string.sub(sLine,1,x-2) .. string.sub(sLine,x)
|
||||
tLines[y] = string.sub(sLine, 1, x - 2) .. string.sub(sLine, x)
|
||||
setCursor( x - 1, y )
|
||||
end
|
||||
elseif y > 1 then
|
||||
-- Remove newline
|
||||
local sPrevLen = string.len( tLines[y-1] )
|
||||
tLines[y-1] = tLines[y-1] .. tLines[y]
|
||||
local sPrevLen = string.len( tLines[y - 1] )
|
||||
tLines[y - 1] = tLines[y - 1] .. tLines[y]
|
||||
table.remove( tLines, y )
|
||||
setCursor( sPrevLen + 1, y - 1 )
|
||||
redrawText()
|
||||
@ -666,12 +666,12 @@ while bRunning do
|
||||
if not bMenu and not bReadOnly then
|
||||
-- Newline
|
||||
local sLine = tLines[y]
|
||||
local _,spaces=string.find(sLine,"^[ ]+")
|
||||
local _, spaces = string.find(sLine, "^[ ]+")
|
||||
if not spaces then
|
||||
spaces=0
|
||||
spaces = 0
|
||||
end
|
||||
tLines[y] = string.sub(sLine,1,x-1)
|
||||
table.insert( tLines, y+1, string.rep(' ',spaces)..string.sub(sLine,x) )
|
||||
tLines[y] = string.sub(sLine, 1, x - 1)
|
||||
table.insert( tLines, y + 1, string.rep(' ', spaces) .. string.sub(sLine, x) )
|
||||
setCursor( spaces + 1, y + 1 )
|
||||
redrawText()
|
||||
|
||||
@ -697,13 +697,13 @@ while bRunning do
|
||||
if not bMenu and not bReadOnly then
|
||||
-- Input text
|
||||
local sLine = tLines[y]
|
||||
tLines[y] = string.sub(sLine,1,x-1) .. param .. string.sub(sLine,x)
|
||||
tLines[y] = string.sub(sLine, 1, x - 1) .. param .. string.sub(sLine, x)
|
||||
setCursor( x + 1, y )
|
||||
|
||||
elseif bMenu then
|
||||
-- Select menu items
|
||||
for n,sMenuItem in ipairs( tMenuItems ) do
|
||||
if string.lower(string.sub(sMenuItem,1,1)) == string.lower(param) then
|
||||
for n, sMenuItem in ipairs( tMenuItems ) do
|
||||
if string.lower(string.sub(sMenuItem, 1, 1)) == string.lower(param) then
|
||||
doMenuItem( n )
|
||||
break
|
||||
end
|
||||
@ -720,7 +720,7 @@ while bRunning do
|
||||
end
|
||||
-- Input text
|
||||
local sLine = tLines[y]
|
||||
tLines[y] = string.sub(sLine,1,x-1) .. param .. string.sub(sLine,x)
|
||||
tLines[y] = string.sub(sLine, 1, x - 1) .. param .. string.sub(sLine, x)
|
||||
setCursor( x + string.len( param ), y )
|
||||
end
|
||||
|
||||
@ -728,7 +728,7 @@ while bRunning do
|
||||
if not bMenu then
|
||||
if param == 1 then
|
||||
-- Left click
|
||||
local cx,cy = param2, param3
|
||||
local cx, cy = param2, param3
|
||||
if cy < h then
|
||||
local newY = math.min( math.max( scrollY + cy, 1 ), #tLines )
|
||||
local newX = math.min( math.max( scrollX + cx, 1 ), string.len( tLines[newY] ) + 1 )
|
||||
@ -749,7 +749,7 @@ while bRunning do
|
||||
|
||||
elseif param == 1 then
|
||||
-- Scroll down
|
||||
local nMaxScroll = #tLines - (h-1)
|
||||
local nMaxScroll = #tLines - (h - 1)
|
||||
if scrollY < nMaxScroll then
|
||||
-- Move cursor down
|
||||
scrollY = scrollY + 1
|
||||
@ -760,7 +760,7 @@ while bRunning do
|
||||
end
|
||||
|
||||
elseif sEvent == "term_resize" then
|
||||
w,h = term.getSize()
|
||||
w, h = term.getSize()
|
||||
setCursor( x, y )
|
||||
redrawMenu()
|
||||
redrawText()
|
||||
|
@ -11,7 +11,7 @@ local sDrive = tArgs[1]
|
||||
-- Check the disk exists
|
||||
local bPresent = disk.isPresent( sDrive )
|
||||
if not bPresent then
|
||||
print( "Nothing in "..sDrive.." drive" )
|
||||
print( "Nothing in " .. sDrive .. " drive" )
|
||||
return
|
||||
end
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
------------
|
||||
|
||||
-- The width and height of the terminal
|
||||
local w,h = term.getSize()
|
||||
local w, h = term.getSize()
|
||||
|
||||
-- The selected colours on the left and right mouse button, and the colour of the canvas
|
||||
local leftColour, rightColour = colours.white, nil
|
||||
@ -16,7 +16,7 @@ local canvasColour = colours.black
|
||||
local canvas = {}
|
||||
|
||||
-- The menu options
|
||||
local mChoices = { "Save","Exit" }
|
||||
local mChoices = { "Save", "Exit" }
|
||||
|
||||
-- The message displayed in the footer bar
|
||||
local fMessage = "Press Ctrl to access menu"
|
||||
@ -86,8 +86,8 @@ end
|
||||
returns: the colour number of the hex value
|
||||
]]
|
||||
local tColourLookup = {}
|
||||
for n=1,16 do
|
||||
tColourLookup[ string.byte( "0123456789abcdef",n,n ) ] = 2^(n-1)
|
||||
for n = 1, 16 do
|
||||
tColourLookup[ string.byte( "0123456789abcdef", n, n ) ] = 2 ^ (n - 1)
|
||||
end
|
||||
local function getColourOf( char )
|
||||
-- Values not in the hex table are transparent (canvas coloured)
|
||||
@ -106,8 +106,8 @@ local function load(path)
|
||||
local sLine = file.readLine()
|
||||
while sLine do
|
||||
local line = {}
|
||||
for x=1,w-2 do
|
||||
line[x] = getColourOf( string.byte(sLine,x,x) )
|
||||
for x = 1, w - 2 do
|
||||
line[x] = getColourOf( string.byte(sLine, x, x) )
|
||||
end
|
||||
table.insert( canvas, line )
|
||||
sLine = file.readLine()
|
||||
@ -136,10 +136,10 @@ local function save(path)
|
||||
-- Encode (and trim)
|
||||
local tLines = {}
|
||||
local nLastLine = 0
|
||||
for y=1,h-1 do
|
||||
for y = 1, h - 1 do
|
||||
local sLine = ""
|
||||
local nLastChar = 0
|
||||
for x=1,w-2 do
|
||||
for x = 1, w - 2 do
|
||||
local c = getCharOf( getCanvasPixel( x, y ) )
|
||||
sLine = sLine .. c
|
||||
if c ~= " " then
|
||||
@ -154,7 +154,7 @@ local function save(path)
|
||||
end
|
||||
|
||||
-- Save out
|
||||
for n=1,nLastLine do
|
||||
for n = 1, nLastLine do
|
||||
file.writeLine( tLines[ n ] )
|
||||
end
|
||||
file.close()
|
||||
@ -174,20 +174,20 @@ local function drawInterface()
|
||||
term.write(fMessage)
|
||||
|
||||
-- Colour Picker
|
||||
for i=1,16 do
|
||||
term.setCursorPos(w-1, i)
|
||||
term.setBackgroundColour( 2^(i-1) )
|
||||
for i = 1, 16 do
|
||||
term.setCursorPos(w - 1, i)
|
||||
term.setBackgroundColour( 2 ^ (i - 1) )
|
||||
term.write(" ")
|
||||
end
|
||||
|
||||
term.setCursorPos(w-1, 17)
|
||||
term.setCursorPos(w - 1, 17)
|
||||
term.setBackgroundColour( canvasColour )
|
||||
term.setTextColour( colours.grey )
|
||||
term.write("\127\127")
|
||||
|
||||
-- Left and Right Selected Colours
|
||||
do
|
||||
term.setCursorPos(w-1, 18)
|
||||
term.setCursorPos(w - 1, 18)
|
||||
if leftColour ~= nil then
|
||||
term.setBackgroundColour( leftColour )
|
||||
term.write(" ")
|
||||
@ -208,8 +208,8 @@ local function drawInterface()
|
||||
|
||||
-- Padding
|
||||
term.setBackgroundColour( canvasColour )
|
||||
for i=20,h-1 do
|
||||
term.setCursorPos(w-1, i)
|
||||
for i = 20, h - 1 do
|
||||
term.setCursorPos(w - 1, i)
|
||||
term.write(" ")
|
||||
end
|
||||
end
|
||||
@ -237,7 +237,7 @@ end
|
||||
returns: nil
|
||||
]]
|
||||
local function drawCanvasLine( y )
|
||||
for x = 1, w-2 do
|
||||
for x = 1, w - 2 do
|
||||
drawCanvasPixel( x, y )
|
||||
end
|
||||
end
|
||||
@ -247,7 +247,7 @@ end
|
||||
returns: nil
|
||||
]]
|
||||
local function drawCanvas()
|
||||
for y = 1, h-1 do
|
||||
for y = 1, h - 1 do
|
||||
drawCanvasLine( y )
|
||||
end
|
||||
end
|
||||
@ -263,25 +263,25 @@ local function accessMenu()
|
||||
term.setBackgroundColour(colours.black)
|
||||
while true do
|
||||
-- Draw the menu
|
||||
term.setCursorPos(1,h)
|
||||
term.setCursorPos(1, h)
|
||||
term.clearLine()
|
||||
term.setTextColour(colours.white)
|
||||
for k,v in pairs(mChoices) do
|
||||
if selection==k then
|
||||
for k, v in pairs(mChoices) do
|
||||
if selection == k then
|
||||
term.setTextColour(colours.yellow)
|
||||
local ox = term.getCursorPos()
|
||||
term.write("["..string.rep(" ",#v).."]")
|
||||
term.setCursorPos(ox+1,h)
|
||||
term.write("[" .. string.rep(" ", #v) .. "]")
|
||||
term.setCursorPos(ox + 1, h)
|
||||
term.setTextColour(colours.white)
|
||||
term.write(v)
|
||||
term.setCursorPos(term.getCursorPos()+1,h)
|
||||
term.setCursorPos(term.getCursorPos() + 1, h)
|
||||
else
|
||||
term.write(" "..v.." ")
|
||||
term.write(" " .. v .. " ")
|
||||
end
|
||||
end
|
||||
|
||||
-- Handle input in the menu
|
||||
local id,key = os.pullEvent("key")
|
||||
local id, key = os.pullEvent("key")
|
||||
if id == "key" then
|
||||
-- S and E are shortcuts
|
||||
if key == keys.s then
|
||||
@ -308,23 +308,23 @@ local function accessMenu()
|
||||
|
||||
elseif key == keys.enter then
|
||||
-- Select an option
|
||||
if mChoices[selection]=="Save" then
|
||||
if mChoices[selection] == "Save" then
|
||||
if bReadOnly then
|
||||
fMessage = "Access denied"
|
||||
return false
|
||||
end
|
||||
local success, err = save(sPath)
|
||||
if success then
|
||||
fMessage = "Saved to "..sPath
|
||||
fMessage = "Saved to " .. sPath
|
||||
else
|
||||
if err then
|
||||
fMessage = "Error saving to "..err
|
||||
fMessage = "Error saving to " .. err
|
||||
else
|
||||
fMessage = "Error saving to "..sPath
|
||||
fMessage = "Error saving to " .. sPath
|
||||
end
|
||||
end
|
||||
return false
|
||||
elseif mChoices[selection]=="Exit" then
|
||||
elseif mChoices[selection] == "Exit" then
|
||||
return true
|
||||
end
|
||||
elseif key == keys.leftCtrl or keys == keys.rightCtrl then
|
||||
@ -343,19 +343,19 @@ end
|
||||
local function handleEvents()
|
||||
local programActive = true
|
||||
while programActive do
|
||||
local id,p1,p2,p3 = os.pullEvent()
|
||||
if id=="mouse_click" or id=="mouse_drag" then
|
||||
if p2 >= w-1 and p3 >= 1 and p3 <= 17 then
|
||||
local id, p1, p2, p3 = os.pullEvent()
|
||||
if id == "mouse_click" or id == "mouse_drag" then
|
||||
if p2 >= w - 1 and p3 >= 1 and p3 <= 17 then
|
||||
if id ~= "mouse_drag" then
|
||||
-- Selecting an items in the colour picker
|
||||
if p3 <= 16 then
|
||||
if p1==1 then
|
||||
leftColour = 2^(p3-1)
|
||||
if p1 == 1 then
|
||||
leftColour = 2 ^ (p3 - 1)
|
||||
else
|
||||
rightColour = 2^(p3-1)
|
||||
rightColour = 2 ^ (p3 - 1)
|
||||
end
|
||||
else
|
||||
if p1==1 then
|
||||
if p1 == 1 then
|
||||
leftColour = nil
|
||||
else
|
||||
rightColour = nil
|
||||
@ -364,12 +364,12 @@ local function handleEvents()
|
||||
--drawCanvas()
|
||||
drawInterface()
|
||||
end
|
||||
elseif p2 < w-1 and p3 <= h-1 then
|
||||
elseif p2 < w - 1 and p3 <= h - 1 then
|
||||
-- Clicking on the canvas
|
||||
local paintColour = nil
|
||||
if p1==1 then
|
||||
if p1 == 1 then
|
||||
paintColour = leftColour
|
||||
elseif p1==2 then
|
||||
elseif p1 == 2 then
|
||||
paintColour = rightColour
|
||||
end
|
||||
if not canvas[p3] then
|
||||
@ -379,13 +379,13 @@ local function handleEvents()
|
||||
|
||||
drawCanvasPixel( p2, p3 )
|
||||
end
|
||||
elseif id=="key" then
|
||||
if p1==keys.leftCtrl or p1==keys.rightCtrl then
|
||||
elseif id == "key" then
|
||||
if p1 == keys.leftCtrl or p1 == keys.rightCtrl then
|
||||
programActive = not accessMenu()
|
||||
drawInterface()
|
||||
end
|
||||
elseif id=="term_resize" then
|
||||
w,h = term.getSize()
|
||||
elseif id == "term_resize" then
|
||||
w, h = term.getSize()
|
||||
drawCanvas()
|
||||
drawInterface()
|
||||
end
|
||||
@ -404,4 +404,4 @@ handleEvents()
|
||||
term.setBackgroundColour(colours.black)
|
||||
term.setTextColour(colours.white)
|
||||
term.clear()
|
||||
term.setCursorPos(1,1)
|
||||
term.setCursorPos(1, 1)
|
||||
|
@ -3,12 +3,12 @@
|
||||
--Clearing Screen--
|
||||
|
||||
--Vars--
|
||||
local TermW,TermH = term.getSize()
|
||||
local TermW, TermH = term.getSize()
|
||||
|
||||
local sLevelTitle
|
||||
local tScreen
|
||||
local oScreen
|
||||
local SizeW,SizeH
|
||||
local SizeW, SizeH
|
||||
local aExits
|
||||
local fExit
|
||||
local nSpeed
|
||||
@ -18,14 +18,14 @@ local fSpeedS
|
||||
local bPaused
|
||||
local Tick
|
||||
local Blocks
|
||||
local XOrgin,YOrgin
|
||||
local XOrgin, YOrgin
|
||||
local fLevel
|
||||
|
||||
local function reset()
|
||||
sLevelTitle = ""
|
||||
tScreen = {}
|
||||
oScreen = {}
|
||||
SizeW,SizeH = TermW,TermH
|
||||
SizeW, SizeH = TermW, TermH
|
||||
aExits = 0
|
||||
fExit = "nop"
|
||||
nSpeed = 0.6
|
||||
@ -35,7 +35,7 @@ local function reset()
|
||||
bPaused = false
|
||||
Tick = os.startTimer(Speed)
|
||||
Blocks = 0
|
||||
XOrgin,YOrgin = 1,1
|
||||
XOrgin, YOrgin = 1, 1
|
||||
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.setTextColor(colors.white)
|
||||
@ -61,21 +61,21 @@ local tArgs = { ... }
|
||||
--Functions--
|
||||
local function printCentred( yc, stg )
|
||||
local xc = math.floor((TermW - string.len(stg)) / 2) + 1
|
||||
term.setCursorPos(xc,yc)
|
||||
term.setCursorPos(xc, yc)
|
||||
term.write( stg )
|
||||
end
|
||||
|
||||
local function centerOrgin()
|
||||
XOrgin = math.floor(TermW/2-SizeW/2)
|
||||
YOrgin = math.floor(TermH/2-SizeH/2)
|
||||
XOrgin = math.floor(TermW / 2 - SizeW / 2)
|
||||
YOrgin = math.floor(TermH / 2 - SizeH / 2)
|
||||
end
|
||||
|
||||
local function reMap()
|
||||
tScreen = nil
|
||||
tScreen = {}
|
||||
for x=1,SizeW do
|
||||
for x = 1, SizeW do
|
||||
tScreen[x] = {}
|
||||
for y=1,SizeH do
|
||||
for y = 1, SizeH do
|
||||
tScreen[x][y] = { space = true, wall = false, ground = false, robot = "zz", start = "zz", exit = "zz" }
|
||||
end
|
||||
end
|
||||
@ -83,7 +83,7 @@ end
|
||||
|
||||
local function tablecopy(t)
|
||||
local t2 = {}
|
||||
for k,v in pairs(t) do
|
||||
for k, v in pairs(t) do
|
||||
t2[k] = v
|
||||
end
|
||||
return t2
|
||||
@ -92,17 +92,17 @@ end
|
||||
local function buMap()
|
||||
oScreen = nil
|
||||
oScreen = {}
|
||||
for x=1,SizeW do
|
||||
for x = 1, SizeW do
|
||||
oScreen[x] = {}
|
||||
for y=1,SizeH do
|
||||
for y = 1, SizeH do
|
||||
oScreen[x][y] = tablecopy(tScreen[x][y])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function addRobot(x,y,side,color)
|
||||
local function addRobot(x, y, side, color)
|
||||
local obj = tScreen[x][y]
|
||||
local data = side..color
|
||||
local data = side .. color
|
||||
if obj.wall == nil and obj.robot == nil then
|
||||
tScreen[x][y].robot = data
|
||||
else
|
||||
@ -112,9 +112,9 @@ local function addRobot(x,y,side,color)
|
||||
end
|
||||
end
|
||||
|
||||
local function addStart(x,y,side,color)
|
||||
local function addStart(x, y, side, color)
|
||||
local obj = tScreen[x][y]
|
||||
local data = side..color
|
||||
local data = side .. color
|
||||
if obj.wall == nil and obj.space == nil then
|
||||
tScreen[x][y].start = data
|
||||
else
|
||||
@ -122,10 +122,10 @@ local function addStart(x,y,side,color)
|
||||
obj.space = nil
|
||||
tScreen[x][y].start = data
|
||||
end
|
||||
aExits = aExits+1
|
||||
aExits = aExits + 1
|
||||
end
|
||||
|
||||
local function addGround(x,y)
|
||||
local function addGround(x, y)
|
||||
local obj = tScreen[x][y]
|
||||
if obj.space == nil and obj.exit == nil and obj.wall == nil and obj.robot == nil and obj.start == nil then
|
||||
tScreen[x][y].ground = true
|
||||
@ -139,7 +139,7 @@ local function addGround(x,y)
|
||||
end
|
||||
end
|
||||
|
||||
local function addExit(x,y,cl)
|
||||
local function addExit(x, y, cl)
|
||||
local obj = tScreen[x][y]
|
||||
if obj.space == nil and obj.ground == nil and obj.wall == nil and obj.robot == nil and obj.start == nil then
|
||||
tScreen[x][y].exit = cl
|
||||
@ -153,10 +153,10 @@ local function addExit(x,y,cl)
|
||||
end
|
||||
end
|
||||
|
||||
local function addWall(x,y)
|
||||
local function addWall(x, y)
|
||||
local obj = tScreen[x][y]
|
||||
if obj == nil then
|
||||
return error("Here X"..x.." Y"..y)
|
||||
return error("Here X" .. x .. " Y" .. y)
|
||||
end
|
||||
if obj.space == nil and obj.exit == nil and obj.ground == nil and obj.robot == nil and obj.start == nil then
|
||||
tScreen[x][y].wall = true
|
||||
@ -171,15 +171,15 @@ local function addWall(x,y)
|
||||
end
|
||||
|
||||
local function loadLevel(nNum)
|
||||
sLevelTitle = "Level "..nNum
|
||||
sLevelTitle = "Level " .. nNum
|
||||
if nNum == nil then return error("nNum == nil") end
|
||||
local sDir = fs.getDir( shell.getRunningProgram() )
|
||||
local sLevelD = sDir .. "/levels/" .. tostring(nNum)..".dat"
|
||||
if not ( fs.exists(sLevelD) or fs.isDir(sLevelD) ) then return error("Level Not Exists : "..sLevelD) end
|
||||
fLevel = fs.open(sLevelD,"r")
|
||||
local sLevelD = sDir .. "/levels/" .. tostring(nNum) .. ".dat"
|
||||
if not ( fs.exists(sLevelD) or fs.isDir(sLevelD) ) then return error("Level Not Exists : " .. sLevelD) end
|
||||
fLevel = fs.open(sLevelD, "r")
|
||||
local wl = true
|
||||
Blocks = tonumber(string.sub(fLevel.readLine(),1,1))
|
||||
local xSize = string.len(fLevel.readLine())+2
|
||||
Blocks = tonumber(string.sub(fLevel.readLine(), 1, 1))
|
||||
local xSize = string.len(fLevel.readLine()) + 2
|
||||
local Lines = 3
|
||||
while wl do
|
||||
local wLine = fLevel.readLine()
|
||||
@ -187,43 +187,43 @@ local function loadLevel(nNum)
|
||||
fLevel.close()
|
||||
wl = false
|
||||
else
|
||||
xSize = math.max(string.len(wLine)+2,xSize)
|
||||
xSize = math.max(string.len(wLine) + 2, xSize)
|
||||
Lines = Lines + 1
|
||||
end
|
||||
end
|
||||
SizeW,SizeH = xSize,Lines
|
||||
SizeW, SizeH = xSize, Lines
|
||||
reMap()
|
||||
fLevel = fs.open(sLevelD,"r")
|
||||
fLevel = fs.open(sLevelD, "r")
|
||||
fLevel.readLine()
|
||||
for Line=2,Lines-1 do
|
||||
for Line = 2, Lines - 1 do
|
||||
local sLine = fLevel.readLine()
|
||||
local chars = string.len(sLine)
|
||||
for char = 1, chars do
|
||||
local el = string.sub(sLine,char,char)
|
||||
local el = string.sub(sLine, char, char)
|
||||
if el == "8" then
|
||||
addGround(char+1,Line)
|
||||
addGround(char + 1, Line)
|
||||
elseif el == "0" then
|
||||
addStart(char+1,Line,"a","a")
|
||||
addStart(char + 1, Line, "a", "a")
|
||||
elseif el == "1" then
|
||||
addStart(char+1,Line,"b","a")
|
||||
addStart(char + 1, Line, "b", "a")
|
||||
elseif el == "2" then
|
||||
addStart(char+1,Line,"c","a")
|
||||
addStart(char + 1, Line, "c", "a")
|
||||
elseif el == "3" then
|
||||
addStart(char+1,Line,"d","a")
|
||||
addStart(char + 1, Line, "d", "a")
|
||||
elseif el == "4" then
|
||||
addStart(char+1,Line,"a","b")
|
||||
addStart(char + 1, Line, "a", "b")
|
||||
elseif el == "5" then
|
||||
addStart(char+1,Line,"b","b")
|
||||
addStart(char + 1, Line, "b", "b")
|
||||
elseif el == "6" then
|
||||
addStart(char+1,Line,"c","b")
|
||||
addStart(char + 1, Line, "c", "b")
|
||||
elseif el == "9" then
|
||||
addStart(char+1,Line,"d","b")
|
||||
addStart(char + 1, Line, "d", "b")
|
||||
elseif el == "b" then
|
||||
addExit(char+1,Line,"a")
|
||||
addExit(char + 1, Line, "a")
|
||||
elseif el == "e" then
|
||||
addExit(char+1,Line,"b")
|
||||
addExit(char + 1, Line, "b")
|
||||
elseif el == "7" then
|
||||
addWall(char+1,Line)
|
||||
addWall(char + 1, Line)
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -232,29 +232,29 @@ end
|
||||
|
||||
local function drawStars()
|
||||
--CCR Background By : RamiLego--
|
||||
local cStar,cStarG,crStar,crStarB = colors.lightGray,colors.gray,".","*"
|
||||
local DStar,BStar,nStar,gStar = 14,10,16,3
|
||||
local TermW,TermH = term.getSize()
|
||||
local cStar, cStarG, crStar, crStarB = colors.lightGray, colors.gray, ".", "*"
|
||||
local DStar, BStar, nStar, gStar = 14, 10, 16, 3
|
||||
local TermW, TermH = term.getSize()
|
||||
|
||||
term.clear()
|
||||
term.setCursorPos(1,1)
|
||||
for x=1,TermW do
|
||||
for y=1,TermH do
|
||||
local StarT = math.random(1,30)
|
||||
term.setCursorPos(1, 1)
|
||||
for x = 1, TermW do
|
||||
for y = 1, TermH do
|
||||
local StarT = math.random(1, 30)
|
||||
if StarT == DStar then
|
||||
term.setCursorPos(x,y)
|
||||
term.setCursorPos(x, y)
|
||||
term.setTextColor(cStar)
|
||||
write(crStar)
|
||||
elseif StarT == BStar then
|
||||
term.setCursorPos(x,y)
|
||||
term.setCursorPos(x, y)
|
||||
term.setTextColor(cStar)
|
||||
write(crStarB)
|
||||
elseif StarT == nStar then
|
||||
term.setCursorPos(x,y)
|
||||
term.setCursorPos(x, y)
|
||||
term.setTextColor(cStarG)
|
||||
write(crStar)
|
||||
elseif StarT == gStar then
|
||||
term.setCursorPos(x,y)
|
||||
term.setCursorPos(x, y)
|
||||
term.setTextColor(cStarG)
|
||||
write(crStarB)
|
||||
end
|
||||
@ -263,15 +263,15 @@ local function drawStars()
|
||||
end
|
||||
|
||||
local function drawMap()
|
||||
for x=1,SizeW do
|
||||
for y=1,SizeH do
|
||||
for x = 1, SizeW do
|
||||
for y = 1, SizeH do
|
||||
|
||||
local obj = tScreen[x][y]
|
||||
if obj.ground == true then
|
||||
paintutils.drawPixel(XOrgin+x,YOrgin+y+1,cG)
|
||||
paintutils.drawPixel(XOrgin + x, YOrgin + y + 1, cG)
|
||||
end
|
||||
if obj.wall == true then
|
||||
paintutils.drawPixel(XOrgin+x,YOrgin+y+1,cW)
|
||||
paintutils.drawPixel(XOrgin + x, YOrgin + y + 1, cW)
|
||||
end
|
||||
|
||||
local ex = tostring(tScreen[x][y].exit)
|
||||
@ -289,13 +289,13 @@ local function drawMap()
|
||||
end
|
||||
term.setBackgroundColor(cG)
|
||||
term.setTextColor(ex)
|
||||
term.setCursorPos(XOrgin+x,YOrgin+y+1)
|
||||
term.setCursorPos(XOrgin + x, YOrgin + y + 1)
|
||||
print("X")
|
||||
end
|
||||
|
||||
local st = tostring(tScreen[x][y].start)
|
||||
if not(st == "zz" or st == "nil") then
|
||||
local Cr = string.sub(st,2,2)
|
||||
local Cr = string.sub(st, 2, 2)
|
||||
if Cr == "a" then
|
||||
Cr = cR1
|
||||
elseif Cr == "b" then
|
||||
@ -310,9 +310,9 @@ local function drawMap()
|
||||
|
||||
term.setTextColor(Cr)
|
||||
term.setBackgroundColor(cG)
|
||||
term.setCursorPos(XOrgin+x,YOrgin+y+1)
|
||||
term.setCursorPos(XOrgin + x, YOrgin + y + 1)
|
||||
|
||||
local sSide = string.sub(st,1,1)
|
||||
local sSide = string.sub(st, 1, 1)
|
||||
if sSide == "a" then
|
||||
print("^")
|
||||
elseif sSide == "b" then
|
||||
@ -327,12 +327,12 @@ local function drawMap()
|
||||
end
|
||||
|
||||
if obj.space == true then
|
||||
paintutils.drawPixel(XOrgin+x,YOrgin+y+1,cS)
|
||||
paintutils.drawPixel(XOrgin + x, YOrgin + y + 1, cS)
|
||||
end
|
||||
|
||||
local rb = tostring(tScreen[x][y].robot)
|
||||
if not(rb == "zz" or rb == "nil") then
|
||||
local Cr = string.sub(rb,2,2)
|
||||
local Cr = string.sub(rb, 2, 2)
|
||||
if Cr == "a" then
|
||||
Cr = cR1
|
||||
elseif Cr == "b" then
|
||||
@ -346,8 +346,8 @@ local function drawMap()
|
||||
end
|
||||
term.setBackgroundColor(Cr)
|
||||
term.setTextColor(colors.white)
|
||||
term.setCursorPos(XOrgin+x,YOrgin+y+1)
|
||||
local sSide = string.sub(rb,1,1)
|
||||
term.setCursorPos(XOrgin + x, YOrgin + y + 1)
|
||||
local sSide = string.sub(rb, 1, 1)
|
||||
if sSide == "a" then
|
||||
print("^")
|
||||
elseif sSide == "b" then
|
||||
@ -364,7 +364,7 @@ local function drawMap()
|
||||
end
|
||||
end
|
||||
|
||||
local function isBrick(x,y)
|
||||
local function isBrick(x, y)
|
||||
local brb = tostring(tScreen[x][y].robot)
|
||||
local bobj = oScreen[x][y]
|
||||
if (brb == "zz" or brb == "nil") and not bobj.wall == true then
|
||||
@ -376,134 +376,134 @@ end
|
||||
|
||||
local function gRender(sContext)
|
||||
if sContext == "start" then
|
||||
for x=1,SizeW do
|
||||
for y=1,SizeH do
|
||||
for x = 1, SizeW do
|
||||
for y = 1, SizeH do
|
||||
local st = tostring(tScreen[x][y].start)
|
||||
if not(st == "zz" or st == "nil") then
|
||||
local Cr = string.sub(st,2,2)
|
||||
local sSide = string.sub(st,1,1)
|
||||
addRobot(x,y,sSide,Cr)
|
||||
local Cr = string.sub(st, 2, 2)
|
||||
local sSide = string.sub(st, 1, 1)
|
||||
addRobot(x, y, sSide, Cr)
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif sContext == "tick" then
|
||||
buMap()
|
||||
for x=1,SizeW do
|
||||
for y=1,SizeH do
|
||||
for x = 1, SizeW do
|
||||
for y = 1, SizeH do
|
||||
local rb = tostring(oScreen[x][y].robot)
|
||||
if not(rb == "zz" or rb == "nil") then
|
||||
local Cr = string.sub(rb,2,2)
|
||||
local sSide = string.sub(rb,1,1)
|
||||
local Cr = string.sub(rb, 2, 2)
|
||||
local sSide = string.sub(rb, 1, 1)
|
||||
local sobj = oScreen[x][y]
|
||||
if sobj.space == true then
|
||||
tScreen[x][y].robot = "zz"
|
||||
if not sSide == "g" then
|
||||
addRobot(x,y,"g",Cr)
|
||||
addRobot(x, y, "g", Cr)
|
||||
end
|
||||
elseif sobj.exit == Cr then
|
||||
if sSide == "a" or sSide == "b" or sSide == "c" or sSide == "d" then
|
||||
tScreen[x][y].robot = "zz"
|
||||
addRobot(x,y,"g",Cr)
|
||||
aExits = aExits-1
|
||||
addRobot(x, y, "g", Cr)
|
||||
aExits = aExits - 1
|
||||
end
|
||||
elseif sSide == "a" then
|
||||
local obj = isBrick(x,y-1)
|
||||
local obj = isBrick(x, y - 1)
|
||||
tScreen[x][y].robot = "zz"
|
||||
if not obj == true then
|
||||
addRobot(x,y-1,sSide,Cr)
|
||||
addRobot(x, y - 1, sSide, Cr)
|
||||
else
|
||||
local obj2 = isBrick(x-1,y)
|
||||
local obj3 = isBrick(x+1,y)
|
||||
local obj2 = isBrick(x - 1, y)
|
||||
local obj3 = isBrick(x + 1, y)
|
||||
if not obj2 == true and not obj3 == true then
|
||||
if Cr == "a" then
|
||||
addRobot(x,y,"d",Cr)
|
||||
addRobot(x, y, "d", Cr)
|
||||
elseif Cr == "b" then
|
||||
addRobot(x,y,"b",Cr)
|
||||
addRobot(x, y, "b", Cr)
|
||||
end
|
||||
elseif obj == true and obj2 == true and obj3 == true then
|
||||
addRobot(x,y,"c",Cr)
|
||||
addRobot(x, y, "c", Cr)
|
||||
else
|
||||
if obj3 == true then
|
||||
addRobot(x,y,"d",Cr)
|
||||
addRobot(x, y, "d", Cr)
|
||||
elseif obj2 == true then
|
||||
addRobot(x,y,"b",Cr)
|
||||
addRobot(x, y, "b", Cr)
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif sSide == "b" then
|
||||
local obj = isBrick(x+1,y)
|
||||
local obj = isBrick(x + 1, y)
|
||||
tScreen[x][y].robot = "zz"
|
||||
if not obj == true then
|
||||
addRobot(x+1,y,sSide,Cr)
|
||||
addRobot(x + 1, y, sSide, Cr)
|
||||
else
|
||||
local obj2 = isBrick(x,y-1)
|
||||
local obj3 = isBrick(x,y+1)
|
||||
local obj2 = isBrick(x, y - 1)
|
||||
local obj3 = isBrick(x, y + 1)
|
||||
if not obj2 == true and not obj3 == true then
|
||||
if Cr == "a" then
|
||||
addRobot(x,y,"a",Cr)
|
||||
addRobot(x, y, "a", Cr)
|
||||
elseif Cr == "b" then
|
||||
addRobot(x,y,"c",Cr)
|
||||
addRobot(x, y, "c", Cr)
|
||||
end
|
||||
elseif obj == true and obj2 == true and obj3 == true then
|
||||
addRobot(x,y,"d",Cr)
|
||||
addRobot(x, y, "d", Cr)
|
||||
else
|
||||
if obj3 == true then
|
||||
addRobot(x,y,"a",Cr)
|
||||
addRobot(x, y, "a", Cr)
|
||||
elseif obj2 == true then
|
||||
addRobot(x,y,"c",Cr)
|
||||
addRobot(x, y, "c", Cr)
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif sSide == "c" then
|
||||
local obj = isBrick(x,y+1)
|
||||
local obj = isBrick(x, y + 1)
|
||||
tScreen[x][y].robot = "zz"
|
||||
if not obj == true then
|
||||
addRobot(x,y+1,sSide,Cr)
|
||||
addRobot(x, y + 1, sSide, Cr)
|
||||
else
|
||||
local obj2 = isBrick(x-1,y)
|
||||
local obj3 = isBrick(x+1,y)
|
||||
local obj2 = isBrick(x - 1, y)
|
||||
local obj3 = isBrick(x + 1, y)
|
||||
if not obj2 == true and not obj3 == true then
|
||||
if Cr == "a" then
|
||||
addRobot(x,y,"b",Cr)
|
||||
addRobot(x, y, "b", Cr)
|
||||
elseif Cr == "b" then
|
||||
addRobot(x,y,"d",Cr)
|
||||
addRobot(x, y, "d", Cr)
|
||||
end
|
||||
elseif obj == true and obj2 == true and obj3 == true then
|
||||
addRobot(x,y,"a",Cr)
|
||||
addRobot(x, y, "a", Cr)
|
||||
else
|
||||
if obj3 == true then
|
||||
addRobot(x,y,"d",Cr)
|
||||
addRobot(x, y, "d", Cr)
|
||||
elseif obj2 == true then
|
||||
addRobot(x,y,"b",Cr)
|
||||
addRobot(x, y, "b", Cr)
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif sSide == "d" then
|
||||
local obj = isBrick(x-1,y)
|
||||
local obj = isBrick(x - 1, y)
|
||||
tScreen[x][y].robot = "zz"
|
||||
if not obj == true then
|
||||
addRobot(x-1,y,sSide,Cr)
|
||||
addRobot(x - 1, y, sSide, Cr)
|
||||
else
|
||||
local obj2 = isBrick(x,y-1)
|
||||
local obj3 = isBrick(x,y+1)
|
||||
local obj2 = isBrick(x, y - 1)
|
||||
local obj3 = isBrick(x, y + 1)
|
||||
if not obj2 == true and not obj3 == true then
|
||||
if Cr == "a" then
|
||||
addRobot(x,y,"c",Cr)
|
||||
addRobot(x, y, "c", Cr)
|
||||
elseif Cr == "b" then
|
||||
addRobot(x,y,"a",Cr)
|
||||
addRobot(x, y, "a", Cr)
|
||||
end
|
||||
elseif obj == true and obj2 == true and obj3 == true then
|
||||
addRobot(x,y,"b",Cr)
|
||||
addRobot(x, y, "b", Cr)
|
||||
else
|
||||
if obj3 == true then
|
||||
addRobot(x,y,"a",Cr)
|
||||
addRobot(x, y, "a", Cr)
|
||||
elseif obj2 == true then
|
||||
addRobot(x,y,"c",Cr)
|
||||
addRobot(x, y, "c", Cr)
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
addRobot(x,y,sSide,"g")
|
||||
addRobot(x, y, sSide, "g")
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -514,15 +514,15 @@ end
|
||||
function InterFace.drawBar()
|
||||
term.setBackgroundColor( colors.black )
|
||||
term.setTextColor( InterFace.cTitle )
|
||||
printCentred( 1, " "..sLevelTitle.." " )
|
||||
printCentred( 1, " " .. sLevelTitle .. " " )
|
||||
|
||||
term.setCursorPos(1,1)
|
||||
term.setCursorPos(1, 1)
|
||||
term.setBackgroundColor( cW )
|
||||
write( " " )
|
||||
term.setBackgroundColor( colors.black )
|
||||
write( " x "..tostring(Blocks).." " )
|
||||
write( " x " .. tostring(Blocks) .. " " )
|
||||
|
||||
term.setCursorPos( TermW-8,TermH )
|
||||
term.setCursorPos( TermW - 8, TermH )
|
||||
term.setBackgroundColor( colors.black )
|
||||
term.setTextColour(InterFace.cSpeedD)
|
||||
write(" <<" )
|
||||
@ -539,7 +539,7 @@ function InterFace.drawBar()
|
||||
end
|
||||
write(" >>")
|
||||
|
||||
term.setCursorPos( TermW-1, 1 )
|
||||
term.setCursorPos( TermW - 1, 1 )
|
||||
term.setBackgroundColor( colors.black )
|
||||
term.setTextColour( InterFace.cExit )
|
||||
write(" X")
|
||||
@ -547,13 +547,13 @@ function InterFace.drawBar()
|
||||
end
|
||||
|
||||
function InterFace.render()
|
||||
local id,p1,p2,p3 = os.pullEvent()
|
||||
local id, p1, p2, p3 = os.pullEvent()
|
||||
if id == "mouse_click" then
|
||||
if p3 == 1 and p2 == TermW then
|
||||
return "end"
|
||||
elseif p3 == TermH and p2 >= TermW-7 and p2 <= TermW-6 then
|
||||
elseif p3 == TermH and p2 >= TermW - 7 and p2 <= TermW - 6 then
|
||||
return "retry"
|
||||
elseif p3 == TermH and p2 >= TermW-4 and p2 <= TermW-3 then
|
||||
elseif p3 == TermH and p2 >= TermW - 4 and p2 <= TermW - 3 then
|
||||
bPaused = not bPaused
|
||||
fSpeedS = false
|
||||
Speed = bPaused and 0 or nSpeed
|
||||
@ -563,19 +563,19 @@ function InterFace.render()
|
||||
Tick = nil
|
||||
end
|
||||
InterFace.drawBar()
|
||||
elseif p3 == TermH and p2 >= TermW-1 then
|
||||
elseif p3 == TermH and p2 >= TermW - 1 then
|
||||
bPaused = false
|
||||
fSpeedS = not fSpeedS
|
||||
Speed = fSpeedS and fSpeed or nSpeed
|
||||
Tick = os.startTimer(Speed)
|
||||
InterFace.drawBar()
|
||||
elseif p3-1 < YOrgin+SizeH+1 and p3-1 > YOrgin and
|
||||
p2 < XOrgin+SizeW+1 and p2 > XOrgin then
|
||||
local eobj = tScreen[p2-XOrgin][p3-YOrgin-1]
|
||||
local erobj = tostring(tScreen[p2-XOrgin][p3-YOrgin-1].robot)
|
||||
elseif p3 - 1 < YOrgin + SizeH + 1 and p3 - 1 > YOrgin and
|
||||
p2 < XOrgin + SizeW + 1 and p2 > XOrgin then
|
||||
local eobj = tScreen[p2 - XOrgin][p3 - YOrgin - 1]
|
||||
local erobj = tostring(tScreen[p2 - XOrgin][p3 - YOrgin - 1].robot)
|
||||
if (erobj == "zz" or erobj == "nil") and not eobj.wall == true and not eobj.space == true and Blocks > 0 then
|
||||
addWall(p2-XOrgin,p3-YOrgin-1)
|
||||
Blocks = Blocks-1
|
||||
addWall(p2 - XOrgin, p3 - YOrgin - 1)
|
||||
Blocks = Blocks - 1
|
||||
InterFace.drawBar()
|
||||
drawMap()
|
||||
end
|
||||
@ -635,17 +635,17 @@ if ok and not sStartLevel then
|
||||
term.clear()
|
||||
drawStars()
|
||||
term.setTextColor( colors.red )
|
||||
printCentred( TermH/2 - 1, " REDIRECTION " )
|
||||
printCentred( TermH/2 - 0, " ComputerCraft Edition " )
|
||||
printCentred( TermH / 2 - 1, " REDIRECTION " )
|
||||
printCentred( TermH / 2 - 0, " ComputerCraft Edition " )
|
||||
term.setTextColor( colors.yellow )
|
||||
printCentred( TermH/2 + 2, " Click to Begin " )
|
||||
printCentred( TermH / 2 + 2, " Click to Begin " )
|
||||
os.pullEvent( "mouse_click" )
|
||||
end )
|
||||
end
|
||||
|
||||
--Game--
|
||||
if ok then
|
||||
ok,err = pcall( function()
|
||||
ok, err = pcall( function()
|
||||
local nLevel
|
||||
if sStartLevel then
|
||||
nLevel = tonumber( sStartLevel )
|
||||
@ -668,18 +668,18 @@ if ok then
|
||||
drawStars()
|
||||
term.setTextColor( colors.red )
|
||||
if TermW >= 40 then
|
||||
printCentred( TermH/2 - 1, " Thank you for playing Redirection " )
|
||||
printCentred( TermH/2 - 0, " ComputerCraft Edition " )
|
||||
printCentred( TermH/2 + 2, " Check out the full game: " )
|
||||
printCentred( TermH / 2 - 1, " Thank you for playing Redirection " )
|
||||
printCentred( TermH / 2 - 0, " ComputerCraft Edition " )
|
||||
printCentred( TermH / 2 + 2, " Check out the full game: " )
|
||||
term.setTextColor( colors.yellow )
|
||||
printCentred( TermH/2 + 3, " http://www.redirectiongame.com " )
|
||||
printCentred( TermH / 2 + 3, " http://www.redirectiongame.com " )
|
||||
else
|
||||
printCentred( TermH/2 - 2, " Thank you for " )
|
||||
printCentred( TermH/2 - 1, " playing Redirection " )
|
||||
printCentred( TermH/2 - 0, " ComputerCraft Edition " )
|
||||
printCentred( TermH/2 + 2, " Check out the full game: " )
|
||||
printCentred( TermH / 2 - 2, " Thank you for " )
|
||||
printCentred( TermH / 2 - 1, " playing Redirection " )
|
||||
printCentred( TermH / 2 - 0, " ComputerCraft Edition " )
|
||||
printCentred( TermH / 2 + 2, " Check out the full game: " )
|
||||
term.setTextColor( colors.yellow )
|
||||
printCentred( TermH/2 + 3, " www.redirectiongame.com " )
|
||||
printCentred( TermH / 2 + 3, " www.redirectiongame.com " )
|
||||
end
|
||||
parallel.waitForAll(
|
||||
function() sleep(2) end,
|
||||
@ -689,7 +689,7 @@ if ok then
|
||||
end
|
||||
|
||||
--Clear and exit--
|
||||
term.setCursorPos(1,1)
|
||||
term.setCursorPos(1, 1)
|
||||
term.setTextColor(colors.white)
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.clear()
|
||||
|
@ -112,7 +112,7 @@ local items = {
|
||||
desc = "A perfect handle for torches or a pickaxe.",
|
||||
},
|
||||
["a crafting table"] = {
|
||||
aliases = { "crafting table", "craft table", "work bench", "workbench", "crafting bench", "table", },
|
||||
aliases = { "crafting table", "craft table", "work bench", "workbench", "crafting bench", "table" },
|
||||
desc = "It's a crafting table. I shouldn't tell you this, but these don't actually do anything in this game, you can craft tools whenever you like.",
|
||||
},
|
||||
["a furnace"] = {
|
||||
@ -270,7 +270,7 @@ local tAnimals = {
|
||||
}
|
||||
|
||||
local tMonsters = {
|
||||
"a creeper", "a skeleton", "a zombie", "a spider"
|
||||
"a creeper", "a skeleton", "a zombie", "a spider",
|
||||
}
|
||||
|
||||
local tRecipes = {
|
||||
@ -309,8 +309,8 @@ local tGoWest = {
|
||||
local nGoWest = 0
|
||||
|
||||
local bRunning = true
|
||||
local tMap = { { {}, }, }
|
||||
local x,y,z = 0,0,0
|
||||
local tMap = { { {} } }
|
||||
local x, y, z = 0, 0, 0
|
||||
local inventory = {
|
||||
["no tea"] = items["no tea"],
|
||||
}
|
||||
@ -338,7 +338,7 @@ local tDayCycle = {
|
||||
}
|
||||
|
||||
local function getTimeOfDay()
|
||||
return math.fmod( math.floor(nTurn/3), #tDayCycle ) + 1
|
||||
return math.fmod( math.floor(nTurn / 3), #tDayCycle ) + 1
|
||||
end
|
||||
|
||||
local function isSunny()
|
||||
@ -364,21 +364,21 @@ local function getRoom( x, y, z, dontCreate )
|
||||
room.trees = hasTrees( room.nBiome )
|
||||
|
||||
-- Add animals
|
||||
if math.random(1,3) == 1 then
|
||||
for _ = 1,math.random(1,2) do
|
||||
if math.random(1, 3) == 1 then
|
||||
for _ = 1, math.random(1, 2) do
|
||||
local sAnimal = tAnimals[ math.random( 1, #tAnimals ) ]
|
||||
room.items[ sAnimal ] = items[ sAnimal ]
|
||||
end
|
||||
end
|
||||
|
||||
-- Add surface ore
|
||||
if math.random(1,5) == 1 or hasStone( room.nBiome ) then
|
||||
if math.random(1, 5) == 1 or hasStone( room.nBiome ) then
|
||||
room.items[ "some stone" ] = items[ "some stone" ]
|
||||
end
|
||||
if math.random(1,8) == 1 then
|
||||
if math.random(1, 8) == 1 then
|
||||
room.items[ "some coal" ] = items[ "some coal" ]
|
||||
end
|
||||
if math.random(1,8) == 1 and hasRivers( room.nBiome ) then
|
||||
if math.random(1, 8) == 1 and hasRivers( room.nBiome ) then
|
||||
room.items[ "a river" ] = items[ "a river" ]
|
||||
end
|
||||
|
||||
@ -389,7 +389,7 @@ local function getRoom( x, y, z, dontCreate )
|
||||
["east"] = true,
|
||||
["west"] = true,
|
||||
}
|
||||
if math.random(1,8) == 1 then
|
||||
if math.random(1, 8) == 1 then
|
||||
room.exits["down"] = true
|
||||
room.items["a cave entrance"] = items["a cave entrance"]
|
||||
end
|
||||
@ -404,7 +404,7 @@ local function getRoom( x, y, z, dontCreate )
|
||||
room.exits[sDir] = true
|
||||
end
|
||||
else
|
||||
if math.random(1,3) == 1 then
|
||||
if math.random(1, 3) == 1 then
|
||||
room.exits[sDir] = true
|
||||
end
|
||||
end
|
||||
@ -431,13 +431,13 @@ local function getRoom( x, y, z, dontCreate )
|
||||
|
||||
-- Add ores
|
||||
room.items[ "some stone" ] = items[ "some stone" ]
|
||||
if math.random(1,3) == 1 then
|
||||
if math.random(1, 3) == 1 then
|
||||
room.items[ "some coal" ] = items[ "some coal" ]
|
||||
end
|
||||
if math.random(1,8) == 1 then
|
||||
if math.random(1, 8) == 1 then
|
||||
room.items[ "some iron" ] = items[ "some iron" ]
|
||||
end
|
||||
if y == -3 and math.random(1,15) == 1 then
|
||||
if y == -3 and math.random(1, 15) == 1 then
|
||||
room.items[ "some diamond" ] = items[ "some diamond" ]
|
||||
end
|
||||
|
||||
@ -634,7 +634,7 @@ function commands.wait()
|
||||
end
|
||||
|
||||
function commands.look( _sTarget )
|
||||
local room = getRoom( x,y,z )
|
||||
local room = getRoom( x, y, z )
|
||||
if room.dark then
|
||||
print( "It is pitch dark." )
|
||||
return
|
||||
@ -648,7 +648,7 @@ function commands.look( _sTarget )
|
||||
else
|
||||
io.write( "You are underground. " )
|
||||
if next( room.exits ) ~= nil then
|
||||
print( "You can travel "..itemize( room.exits ).."." )
|
||||
print( "You can travel " .. itemize( room.exits ) .. "." )
|
||||
else
|
||||
print()
|
||||
end
|
||||
@ -679,16 +679,16 @@ function commands.look( _sTarget )
|
||||
end
|
||||
|
||||
if tItem then
|
||||
print( tItem.desc or "You see nothing special about "..sItem.."." )
|
||||
print( tItem.desc or "You see nothing special about " .. sItem .. "." )
|
||||
else
|
||||
print( "You don't see any ".._sTarget.." here." )
|
||||
print( "You don't see any " .. _sTarget .. " here." )
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function commands.go( _sDir )
|
||||
local room = getRoom( x,y,z )
|
||||
local room = getRoom( x, y, z )
|
||||
if _sDir == nil then
|
||||
print( "Go where?" )
|
||||
return
|
||||
@ -735,7 +735,7 @@ function commands.go( _sDir )
|
||||
end
|
||||
|
||||
function commands.dig( _sDir, _sTool )
|
||||
local room = getRoom( x,y,z )
|
||||
local room = getRoom( x, y, z )
|
||||
if _sDir == nil then
|
||||
print( "Dig where?" )
|
||||
return
|
||||
@ -746,7 +746,7 @@ function commands.dig( _sDir, _sTool )
|
||||
if _sTool ~= nil then
|
||||
sTool = findItem( inventory, _sTool )
|
||||
if not sTool then
|
||||
print( "You're not carrying a ".._sTool.."." )
|
||||
print( "You're not carrying a " .. _sTool .. "." )
|
||||
return
|
||||
end
|
||||
tTool = inventory[ sTool ]
|
||||
@ -827,10 +827,10 @@ function commands.dig( _sDir, _sTool )
|
||||
_sDir == "up" and y == 0 then
|
||||
inventory[ "some dirt" ] = items[ "some dirt" ]
|
||||
inventory[ "some stone" ] = items[ "some stone" ]
|
||||
print( "You dig ".._sDir.." using "..sTool.." and collect some dirt and stone." )
|
||||
print( "You dig " .. _sDir .. " using " .. sTool .. " and collect some dirt and stone." )
|
||||
else
|
||||
inventory[ "some stone" ] = items[ "some stone" ]
|
||||
print( "You dig ".._sDir.." using "..sTool.." and collect some stone." )
|
||||
print( "You dig " .. _sDir .. " using " .. sTool .. " and collect some stone." )
|
||||
end
|
||||
end
|
||||
|
||||
@ -848,7 +848,7 @@ function commands.drop( _sItem )
|
||||
return
|
||||
end
|
||||
|
||||
local room = getRoom( x,y,z )
|
||||
local room = getRoom( x, y, z )
|
||||
local sItem = findItem( inventory, _sItem )
|
||||
if sItem then
|
||||
local tItem = inventory[ sItem ]
|
||||
@ -860,7 +860,7 @@ function commands.drop( _sItem )
|
||||
print( "Dropped." )
|
||||
end
|
||||
else
|
||||
print( "You don't have a ".._sItem.."." )
|
||||
print( "You don't have a " .. _sItem .. "." )
|
||||
end
|
||||
end
|
||||
|
||||
@ -871,7 +871,7 @@ function commands.place( _sItem )
|
||||
end
|
||||
|
||||
if _sItem == "torch" or _sItem == "a torch" then
|
||||
local room = getRoom( x,y,z )
|
||||
local room = getRoom( x, y, z )
|
||||
if inventory["some torches"] or inventory["a torch"] then
|
||||
inventory["a torch"] = nil
|
||||
room.items["a torch"] = items["a torch"]
|
||||
@ -898,12 +898,12 @@ function commands.take( _sItem )
|
||||
return
|
||||
end
|
||||
|
||||
local room = getRoom( x,y,z )
|
||||
local room = getRoom( x, y, z )
|
||||
local sItem = findItem( room.items, _sItem )
|
||||
if sItem then
|
||||
local tItem = room.items[ sItem ]
|
||||
if tItem.heavy == true then
|
||||
print( "You can't carry "..sItem.."." )
|
||||
print( "You can't carry " .. sItem .. "." )
|
||||
elseif tItem.ore == true then
|
||||
print( "You need to mine this ore." )
|
||||
else
|
||||
@ -923,7 +923,7 @@ function commands.take( _sItem )
|
||||
end
|
||||
end
|
||||
else
|
||||
print( "You don't see a ".._sItem.." here." )
|
||||
print( "You don't see a " .. _sItem .. " here." )
|
||||
end
|
||||
end
|
||||
|
||||
@ -933,7 +933,7 @@ function commands.mine( _sItem, _sTool )
|
||||
return
|
||||
end
|
||||
if _sTool == nil then
|
||||
print( "Mine ".._sItem.." with what?" )
|
||||
print( "Mine " .. _sItem .. " with what?" )
|
||||
return
|
||||
end
|
||||
commands.cbreak( _sItem, _sTool )
|
||||
@ -957,12 +957,12 @@ function commands.cbreak( _sItem, _sTool )
|
||||
if _sTool ~= nil then
|
||||
sTool = findItem( inventory, _sTool )
|
||||
if sTool == nil then
|
||||
print( "You're not carrying a ".._sTool.."." )
|
||||
print( "You're not carrying a " .. _sTool .. "." )
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
local room = getRoom( x,y,z )
|
||||
local room = getRoom( x, y, z )
|
||||
if _sItem == "tree" or _sItem == "trees" or _sItem == "a tree" then
|
||||
print( "The tree breaks into blocks of wood, which you pick up." )
|
||||
inventory[ "some wood" ] = items[ "some wood" ]
|
||||
@ -990,18 +990,18 @@ function commands.cbreak( _sItem, _sTool )
|
||||
local tTool = inventory[ sTool ]
|
||||
if tTool.tool then
|
||||
if tTool.toolLevel < tItem.toolLevel then
|
||||
print( sTool .." is not strong enough to break this ore." )
|
||||
print( sTool .. " is not strong enough to break this ore." )
|
||||
elseif tTool.toolType ~= tItem.toolType then
|
||||
print( "You need a different kind of tool to break this ore." )
|
||||
else
|
||||
print( "The ore breaks, dropping "..sItem..", which you pick up." )
|
||||
print( "The ore breaks, dropping " .. sItem .. ", which you pick up." )
|
||||
inventory[ sItem ] = items[ sItem ]
|
||||
if tItem.infinite ~= true then
|
||||
room.items[ sItem ] = nil
|
||||
end
|
||||
end
|
||||
else
|
||||
print( "You can't break "..sItem.." with "..sTool..".")
|
||||
print( "You can't break " .. sItem .. " with " .. sTool .. ".")
|
||||
end
|
||||
|
||||
elseif tItem.creature == true then
|
||||
@ -1018,12 +1018,12 @@ function commands.cbreak( _sItem, _sTool )
|
||||
local tChances = { 0.2, 0.4, 0.55, 0.8, 1 }
|
||||
if math.random() <= tChances[ toolLevel + 1 ] then
|
||||
room.items[ sItem ] = nil
|
||||
print( "The "..tItem.aliases[1].." dies." )
|
||||
print( "The " .. tItem.aliases[1] .. " dies." )
|
||||
|
||||
if tItem.drops then
|
||||
for _, sDrop in pairs( tItem.drops ) do
|
||||
if not room.items[sDrop] then
|
||||
print( "The "..tItem.aliases[1].." dropped "..sDrop.."." )
|
||||
print( "The " .. tItem.aliases[1] .. " dropped " .. sDrop .. "." )
|
||||
room.items[sDrop] = items[sDrop]
|
||||
end
|
||||
end
|
||||
@ -1033,23 +1033,23 @@ function commands.cbreak( _sItem, _sTool )
|
||||
room.nMonsters = room.nMonsters - 1
|
||||
end
|
||||
else
|
||||
print( "The "..tItem.aliases[1].." is injured by your blow." )
|
||||
print( "The " .. tItem.aliases[1] .. " is injured by your blow." )
|
||||
end
|
||||
|
||||
if tItem.hitDrops then
|
||||
for _, sDrop in pairs( tItem.hitDrops ) do
|
||||
if not room.items[sDrop] then
|
||||
print( "The "..tItem.aliases[1].." dropped "..sDrop.."." )
|
||||
print( "The " .. tItem.aliases[1] .. " dropped " .. sDrop .. "." )
|
||||
room.items[sDrop] = items[sDrop]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
else
|
||||
print( "You can't break "..sItem.."." )
|
||||
print( "You can't break " .. sItem .. "." )
|
||||
end
|
||||
else
|
||||
print( "You don't see a ".._sItem.." here." )
|
||||
print( "You don't see a " .. _sItem .. " here." )
|
||||
end
|
||||
end
|
||||
|
||||
@ -1074,14 +1074,14 @@ function commands.craft( _sItem )
|
||||
local sItem = findItem( items, _sItem )
|
||||
local tRecipe = sItem and tRecipes[ sItem ] or nil
|
||||
if tRecipe then
|
||||
for _,sReq in ipairs( tRecipe ) do
|
||||
for _, sReq in ipairs( tRecipe ) do
|
||||
if inventory[sReq] == nil then
|
||||
print( "You don't have the items you need to craft "..sItem.."." )
|
||||
print( "You don't have the items you need to craft " .. sItem .. "." )
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
for _,sReq in ipairs( tRecipe ) do
|
||||
for _, sReq in ipairs( tRecipe ) do
|
||||
inventory[sReq] = nil
|
||||
end
|
||||
inventory[ sItem ] = items[ sItem ]
|
||||
@ -1090,7 +1090,7 @@ function commands.craft( _sItem )
|
||||
end
|
||||
print( "Crafted." )
|
||||
else
|
||||
print( "You don't know how to make "..(sItem or _sItem).."." )
|
||||
print( "You don't know how to make " .. (sItem or _sItem) .. "." )
|
||||
end
|
||||
end
|
||||
|
||||
@ -1115,12 +1115,12 @@ function commands.build( _sThing, _sMaterial )
|
||||
else
|
||||
sMaterial = findItem( inventory, _sMaterial )
|
||||
if not sMaterial then
|
||||
print( "You don't have any ".._sMaterial )
|
||||
print( "You don't have any " .. _sMaterial )
|
||||
return
|
||||
end
|
||||
|
||||
if inventory[sMaterial].material ~= true then
|
||||
print( sMaterial.." is not a good building material." )
|
||||
print( sMaterial .. " is not a good building material." )
|
||||
return
|
||||
end
|
||||
end
|
||||
@ -1130,12 +1130,12 @@ function commands.build( _sThing, _sMaterial )
|
||||
alias = string.match( _sThing, "a ([%a ]+)" )
|
||||
end
|
||||
|
||||
local room = getRoom( x,y,z )
|
||||
local room = getRoom( x, y, z )
|
||||
inventory[sMaterial] = nil
|
||||
room.items[ _sThing ] = {
|
||||
heavy = true,
|
||||
aliases = { alias },
|
||||
desc = "As you look at your creation (made from "..sMaterial.."), you feel a swelling sense of pride.",
|
||||
desc = "As you look at your creation (made from " .. sMaterial .. "), you feel a swelling sense of pride.",
|
||||
}
|
||||
|
||||
print( "Your construction is complete." )
|
||||
@ -1158,7 +1158,7 @@ function commands.eat( _sItem )
|
||||
|
||||
local sItem = findItem( inventory, _sItem )
|
||||
if not sItem then
|
||||
print( "You don't have any ".._sItem.."." )
|
||||
print( "You don't have any " .. _sItem .. "." )
|
||||
return
|
||||
end
|
||||
|
||||
@ -1172,7 +1172,7 @@ function commands.eat( _sItem )
|
||||
bInjured = false
|
||||
end
|
||||
else
|
||||
print( "You can't eat "..sItem.."." )
|
||||
print( "You can't eat " .. sItem .. "." )
|
||||
end
|
||||
end
|
||||
|
||||
@ -1195,7 +1195,7 @@ function commands.badinput()
|
||||
"That doesn't make any sense.",
|
||||
"What?",
|
||||
}
|
||||
print( tResponses[ math.random(1,#tResponses) ] )
|
||||
print( tResponses[ math.random(1, #tResponses) ] )
|
||||
end
|
||||
|
||||
function commands.noinput()
|
||||
@ -1206,16 +1206,16 @@ function commands.noinput()
|
||||
"Don't be shy.",
|
||||
"Use your words.",
|
||||
}
|
||||
print( tResponses[ math.random(1,#tResponses) ] )
|
||||
print( tResponses[ math.random(1, #tResponses) ] )
|
||||
end
|
||||
|
||||
local function simulate()
|
||||
local bNewMonstersThisRoom = false
|
||||
|
||||
-- Spawn monsters in nearby rooms
|
||||
for sx = -2,2 do
|
||||
for sy = -1,1 do
|
||||
for sz = -2,2 do
|
||||
for sx = -2, 2 do
|
||||
for sy = -1, 1 do
|
||||
for sz = -2, 2 do
|
||||
local h = y + sy
|
||||
if h >= -3 and h <= 0 then
|
||||
local room = getRoom( x + sx, h, z + sz )
|
||||
@ -1223,15 +1223,15 @@ local function simulate()
|
||||
-- Spawn monsters
|
||||
if room.nMonsters < 2 and
|
||||
(h == 0 and not isSunny() and not room.items["a torch"] or room.dark) and
|
||||
math.random(1,6) == 1 then
|
||||
math.random(1, 6) == 1 then
|
||||
|
||||
local sMonster = tMonsters[ math.random(1,#tMonsters) ]
|
||||
local sMonster = tMonsters[ math.random(1, #tMonsters) ]
|
||||
if room.items[ sMonster ] == nil then
|
||||
room.items[ sMonster ] = items[ sMonster ]
|
||||
room.nMonsters = room.nMonsters + 1
|
||||
|
||||
if sx == 0 and sy == 0 and sz == 0 and not room.dark then
|
||||
print( "From the shadows, "..sMonster.." appears." )
|
||||
print( "From the shadows, " .. sMonster .. " appears." )
|
||||
bNewMonstersThisRoom = true
|
||||
end
|
||||
end
|
||||
@ -1239,11 +1239,11 @@ local function simulate()
|
||||
|
||||
-- Burn monsters
|
||||
if h == 0 and isSunny() then
|
||||
for _,sMonster in ipairs( tMonsters ) do
|
||||
for _, sMonster in ipairs( tMonsters ) do
|
||||
if room.items[sMonster] and items[sMonster].nocturnal then
|
||||
room.items[sMonster] = nil
|
||||
if sx == 0 and sy == 0 and sz == 0 and not room.dark then
|
||||
print( "With the sun high in the sky, the "..items[sMonster].aliases[1].." bursts into flame and dies." )
|
||||
print( "With the sun high in the sky, the " .. items[sMonster].aliases[1] .. " bursts into flame and dies." )
|
||||
end
|
||||
room.nMonsters = room.nMonsters - 1
|
||||
end
|
||||
@ -1257,9 +1257,9 @@ local function simulate()
|
||||
-- Make monsters attack
|
||||
local room = getRoom( x, y, z )
|
||||
if nTimeInRoom >= 2 and not bNewMonstersThisRoom then
|
||||
for _,sMonster in ipairs( tMonsters ) do
|
||||
for _, sMonster in ipairs( tMonsters ) do
|
||||
if room.items[sMonster] then
|
||||
if math.random(1,4) == 1 and
|
||||
if math.random(1, 4) == 1 and
|
||||
not (y == 0 and isSunny() and sMonster == "a spider") then
|
||||
if sMonster == "a creeper" then
|
||||
if room.dark then
|
||||
@ -1271,9 +1271,9 @@ local function simulate()
|
||||
room.nMonsters = room.nMonsters - 1
|
||||
else
|
||||
if room.dark then
|
||||
print( "A "..items[sMonster].aliases[1].." attacks you." )
|
||||
print( "A " .. items[sMonster].aliases[1] .. " attacks you." )
|
||||
else
|
||||
print( "The "..items[sMonster].aliases[1].." attacks you." )
|
||||
print( "The " .. items[sMonster].aliases[1] .. " attacks you." )
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -23,7 +23,7 @@ elseif sCommand == "play" or sCommand == nil then
|
||||
if sName == nil then
|
||||
-- No disc specified, pick one at random
|
||||
local tNames = {}
|
||||
for _,sName in ipairs( peripheral.getNames() ) do
|
||||
for _, sName in ipairs( peripheral.getNames() ) do
|
||||
if disk.isPresent( sName ) and disk.hasAudio( sName ) then
|
||||
table.insert( tNames, sName )
|
||||
end
|
||||
@ -32,15 +32,15 @@ elseif sCommand == "play" or sCommand == nil then
|
||||
print( "No Music Discs in attached disk drives" )
|
||||
return
|
||||
end
|
||||
sName = tNames[ math.random(1,#tNames) ]
|
||||
sName = tNames[ math.random(1, #tNames) ]
|
||||
end
|
||||
|
||||
-- Play the disc
|
||||
if disk.isPresent( sName ) and disk.hasAudio( sName ) then
|
||||
print( "Playing "..disk.getAudioTitle( sName ) )
|
||||
print( "Playing " .. disk.getAudioTitle( sName ) )
|
||||
disk.playAudio( sName )
|
||||
else
|
||||
print( "No Music Disc in disk drive: "..sName )
|
||||
print( "No Music Disc in disk drive: " .. sName )
|
||||
return
|
||||
end
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
if term.isColour() then
|
||||
term.setTextColour( 2^math.random(0,15) )
|
||||
term.setTextColour( 2 ^ math.random(0, 15) )
|
||||
end
|
||||
textutils.slowPrint( "Hello World!" )
|
||||
term.setTextColour( colours.white )
|
||||
|
@ -1,6 +1,6 @@
|
||||
|
||||
-- Display the start screen
|
||||
local w,h = term.getSize()
|
||||
local w, h = term.getSize()
|
||||
|
||||
local headingColour, textColour, wormColour, fruitColour
|
||||
if term.isColour() then
|
||||
@ -17,27 +17,27 @@ end
|
||||
|
||||
local function printCentred( y, s )
|
||||
local x = math.floor((w - string.len(s)) / 2)
|
||||
term.setCursorPos(x,y)
|
||||
term.setCursorPos(x, y)
|
||||
--term.clearLine()
|
||||
term.write( s )
|
||||
end
|
||||
|
||||
local xVel,yVel = 1,0
|
||||
local xPos, yPos = math.floor(w/2), math.floor(h/2)
|
||||
local xVel, yVel = 1, 0
|
||||
local xPos, yPos = math.floor(w / 2), math.floor(h / 2)
|
||||
local pxVel, pyVel = nil, nil
|
||||
local nExtraLength = 6
|
||||
local bRunning = true
|
||||
|
||||
local tailX,tailY = xPos,yPos
|
||||
local tailX, tailY = xPos, yPos
|
||||
local nScore = 0
|
||||
local nDifficulty = 2
|
||||
local nSpeed, nInterval
|
||||
|
||||
-- Setup the screen
|
||||
local screen = {}
|
||||
for x=1,w do
|
||||
for x = 1, w do
|
||||
screen[x] = {}
|
||||
for y=1,h do
|
||||
for y = 1, h do
|
||||
screen[x][y] = {}
|
||||
end
|
||||
end
|
||||
@ -54,17 +54,17 @@ local tFruits = {
|
||||
"q", "r", "s", "t", "u", "v", "w", "x",
|
||||
"y", "z",
|
||||
"1", "2", "3", "4", "5", "6", "7", "8", "9", "0",
|
||||
"@", "$", "%", "#", "&", "!", "?", "+", "*", "~"
|
||||
"@", "$", "%", "#", "&", "!", "?", "+", "*", "~",
|
||||
}
|
||||
|
||||
local function addFruit()
|
||||
while true do
|
||||
local x = math.random(1,w)
|
||||
local y = math.random(2,h)
|
||||
local x = math.random(1, w)
|
||||
local y = math.random(2, h)
|
||||
local fruit = screen[x][y]
|
||||
if fruit.snake == nil and fruit.wall == nil and fruit.fruit == nil then
|
||||
screen[x][y] = { fruit = true }
|
||||
term.setCursorPos(x,y)
|
||||
term.setCursorPos(x, y)
|
||||
term.setBackgroundColour( fruitColour )
|
||||
term.write(" ")
|
||||
term.setBackgroundColour( colours.black )
|
||||
@ -80,19 +80,19 @@ end
|
||||
|
||||
local function drawMenu()
|
||||
term.setTextColour( headingColour )
|
||||
term.setCursorPos(1,1)
|
||||
term.setCursorPos(1, 1)
|
||||
term.write( "SCORE " )
|
||||
|
||||
term.setTextColour( textColour )
|
||||
term.setCursorPos(7,1)
|
||||
term.setCursorPos(7, 1)
|
||||
term.write( tostring(nScore) )
|
||||
|
||||
term.setTextColour( headingColour )
|
||||
term.setCursorPos(w-11,1)
|
||||
term.setCursorPos(w - 11, 1)
|
||||
term.write( "DIFFICULTY ")
|
||||
|
||||
term.setTextColour( textColour )
|
||||
term.setCursorPos(w,1)
|
||||
term.setCursorPos(w, 1)
|
||||
term.write( tostring(nDifficulty or "?") )
|
||||
|
||||
term.setTextColour( colours.white )
|
||||
@ -108,7 +108,7 @@ local function update( )
|
||||
if nExtraLength == 0 then
|
||||
local tail = screen[tailX][tailY]
|
||||
screen[tailX][tailY] = {}
|
||||
term.setCursorPos(tailX,tailY)
|
||||
term.setCursorPos(tailX, tailY)
|
||||
term.write(" ")
|
||||
tailX = tail.nextX
|
||||
tailY = tail.nextY
|
||||
@ -149,7 +149,7 @@ local function update( )
|
||||
|
||||
end
|
||||
|
||||
term.setCursorPos(xPos,yPos)
|
||||
term.setCursorPos(xPos, yPos)
|
||||
term.setBackgroundColour( wormColour )
|
||||
term.write(" ")
|
||||
term.setBackgroundColour( colours.black )
|
||||
@ -164,20 +164,20 @@ local function drawFrontend()
|
||||
--printCentred( math.floor(h/2) - 4, " W O R M " )
|
||||
|
||||
term.setTextColour( headingColour )
|
||||
printCentred( math.floor(h/2) - 3, "" )
|
||||
printCentred( math.floor(h/2) - 2, " SELECT DIFFICULTY " )
|
||||
printCentred( math.floor(h/2) - 1, "" )
|
||||
printCentred( math.floor(h / 2) - 3, "" )
|
||||
printCentred( math.floor(h / 2) - 2, " SELECT DIFFICULTY " )
|
||||
printCentred( math.floor(h / 2) - 1, "" )
|
||||
|
||||
printCentred( math.floor(h/2) + 0, " " )
|
||||
printCentred( math.floor(h/2) + 1, " " )
|
||||
printCentred( math.floor(h/2) + 2, " " )
|
||||
printCentred( math.floor(h/2) - 1 + nDifficulty, " [ ] " )
|
||||
printCentred( math.floor(h / 2) + 0, " " )
|
||||
printCentred( math.floor(h / 2) + 1, " " )
|
||||
printCentred( math.floor(h / 2) + 2, " " )
|
||||
printCentred( math.floor(h / 2) - 1 + nDifficulty, " [ ] " )
|
||||
|
||||
term.setTextColour( textColour )
|
||||
printCentred( math.floor(h/2) + 0, "EASY" )
|
||||
printCentred( math.floor(h/2) + 1, "MEDIUM" )
|
||||
printCentred( math.floor(h/2) + 2, "HARD" )
|
||||
printCentred( math.floor(h/2) + 3, "" )
|
||||
printCentred( math.floor(h / 2) + 0, "EASY" )
|
||||
printCentred( math.floor(h / 2) + 1, "MEDIUM" )
|
||||
printCentred( math.floor(h / 2) + 2, "HARD" )
|
||||
printCentred( math.floor(h / 2) + 3, "" )
|
||||
|
||||
term.setTextColour( colours.white )
|
||||
end
|
||||
@ -185,7 +185,7 @@ end
|
||||
drawMenu()
|
||||
drawFrontend()
|
||||
while true do
|
||||
local _,key = os.pullEvent( "key" )
|
||||
local _, key = os.pullEvent( "key" )
|
||||
if key == keys.up or key == keys.w then
|
||||
-- Up
|
||||
if nDifficulty > 1 then
|
||||
@ -233,23 +233,23 @@ while bRunning do
|
||||
if key == keys.up or key == keys.w then
|
||||
-- Up
|
||||
if yVel == 0 then
|
||||
pxVel,pyVel = 0,-1
|
||||
pxVel, pyVel = 0, -1
|
||||
end
|
||||
elseif key == keys.down or key == keys.s then
|
||||
-- Down
|
||||
if yVel == 0 then
|
||||
pxVel,pyVel = 0,1
|
||||
pxVel, pyVel = 0, 1
|
||||
end
|
||||
elseif key == keys.left or key == keys.a then
|
||||
-- Left
|
||||
if xVel == 0 then
|
||||
pxVel,pyVel = -1,0
|
||||
pxVel, pyVel = -1, 0
|
||||
end
|
||||
|
||||
elseif key == keys.right or key == keys.d then
|
||||
-- Right
|
||||
if xVel == 0 then
|
||||
pxVel,pyVel = 1,0
|
||||
pxVel, pyVel = 1, 0
|
||||
end
|
||||
|
||||
end
|
||||
@ -258,25 +258,25 @@ end
|
||||
|
||||
-- Display the gameover screen
|
||||
term.setTextColour( headingColour )
|
||||
printCentred( math.floor(h/2) - 2, " " )
|
||||
printCentred( math.floor(h/2) - 1, " G A M E O V E R " )
|
||||
printCentred( math.floor(h / 2) - 2, " " )
|
||||
printCentred( math.floor(h / 2) - 1, " G A M E O V E R " )
|
||||
|
||||
term.setTextColour( textColour )
|
||||
printCentred( math.floor(h/2) + 0, " " )
|
||||
printCentred( math.floor(h/2) + 1, " FINAL SCORE "..nScore.." " )
|
||||
printCentred( math.floor(h/2) + 2, " " )
|
||||
printCentred( math.floor(h / 2) + 0, " " )
|
||||
printCentred( math.floor(h / 2) + 1, " FINAL SCORE " .. nScore .. " " )
|
||||
printCentred( math.floor(h / 2) + 2, " " )
|
||||
term.setTextColour( colours.white )
|
||||
|
||||
local timer = os.startTimer(2.5)
|
||||
repeat
|
||||
local e,p = os.pullEvent()
|
||||
local e, p = os.pullEvent()
|
||||
if e == "timer" and p == timer then
|
||||
term.setTextColour( textColour )
|
||||
printCentred( math.floor(h/2) + 2, " PRESS ANY KEY " )
|
||||
printCentred( math.floor(h/2) + 3, " " )
|
||||
printCentred( math.floor(h / 2) + 2, " PRESS ANY KEY " )
|
||||
printCentred( math.floor(h / 2) + 3, " " )
|
||||
term.setTextColour( colours.white )
|
||||
end
|
||||
until e == "char"
|
||||
|
||||
term.clear()
|
||||
term.setCursorPos(1,1)
|
||||
term.setCursorPos(1, 1)
|
||||
|
@ -28,7 +28,7 @@ elseif sCommand == "host" then
|
||||
|
||||
-- Find a modem
|
||||
local sModemSide = nil
|
||||
for _,sSide in ipairs( rs.getSides() ) do
|
||||
for _, sSide in ipairs( rs.getSides() ) do
|
||||
if peripheral.getType( sSide ) == "modem" and peripheral.call( sSide, "isWireless" ) then
|
||||
sModemSide = sSide
|
||||
break
|
||||
@ -41,7 +41,7 @@ elseif sCommand == "host" then
|
||||
end
|
||||
|
||||
-- Determine position
|
||||
local x,y,z
|
||||
local x, y, z
|
||||
if #tArgs >= 4 then
|
||||
-- Position is manually specified
|
||||
x = tonumber(tArgs[2])
|
||||
@ -51,10 +51,10 @@ elseif sCommand == "host" then
|
||||
printUsage()
|
||||
return
|
||||
end
|
||||
print( "Position is "..x..","..y..","..z )
|
||||
print( "Position is " .. x .. "," .. y .. "," .. z )
|
||||
else
|
||||
-- Position is to be determined using locate
|
||||
x,y,z = gps.locate( 2, true )
|
||||
x, y, z = gps.locate( 2, true )
|
||||
if x == nil then
|
||||
print( "Run \"gps host <x> <y> <z>\" to set position manually" )
|
||||
return
|
||||
@ -63,7 +63,7 @@ elseif sCommand == "host" then
|
||||
|
||||
-- Open a channel
|
||||
local modem = peripheral.wrap( sModemSide )
|
||||
print( "Opening channel on modem "..sModemSide )
|
||||
print( "Opening channel on modem " .. sModemSide )
|
||||
modem.open( gps.CHANNEL_GPS )
|
||||
|
||||
-- Serve requests indefinately
|
||||
@ -80,10 +80,10 @@ elseif sCommand == "host" then
|
||||
-- Print the number of requests handled
|
||||
nServed = nServed + 1
|
||||
if nServed > 1 then
|
||||
local _,y = term.getCursorPos()
|
||||
term.setCursorPos(1,y-1)
|
||||
local _, y = term.getCursorPos()
|
||||
term.setCursorPos(1, y - 1)
|
||||
end
|
||||
print( nServed.." GPS requests served" )
|
||||
print( nServed .. " GPS requests served" )
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -46,9 +46,9 @@ local function get(url)
|
||||
|
||||
write( "Connecting to pastebin.com... " )
|
||||
-- Add a cache buster so that spam protection is re-checked
|
||||
local cacheBuster = ("%x"):format(math.random(0, 2^30))
|
||||
local cacheBuster = ("%x"):format(math.random(0, 2 ^ 30))
|
||||
local response, err = http.get(
|
||||
"https://pastebin.com/raw/"..textutils.urlEncode( paste ).."?cb="..cacheBuster
|
||||
"https://pastebin.com/raw/" .. textutils.urlEncode( paste ) .. "?cb=" .. cacheBuster
|
||||
)
|
||||
|
||||
if response then
|
||||
@ -93,11 +93,11 @@ if sCommand == "put" then
|
||||
local key = "0ec2eb25b6166c0c27a394ae118ad829"
|
||||
local response = http.post(
|
||||
"https://pastebin.com/api/api_post.php",
|
||||
"api_option=paste&"..
|
||||
"api_dev_key="..key.."&"..
|
||||
"api_paste_format=lua&"..
|
||||
"api_paste_name="..textutils.urlEncode(sName).."&"..
|
||||
"api_paste_code="..textutils.urlEncode(sText)
|
||||
"api_option=paste&" ..
|
||||
"api_dev_key=" .. key .. "&" ..
|
||||
"api_paste_format=lua&" ..
|
||||
"api_paste_name=" .. textutils.urlEncode(sName) .. "&" ..
|
||||
"api_paste_code=" .. textutils.urlEncode(sText)
|
||||
)
|
||||
|
||||
if response then
|
||||
@ -107,8 +107,8 @@ if sCommand == "put" then
|
||||
response.close()
|
||||
|
||||
local sCode = string.match( sResponse, "[^/]+$" )
|
||||
print( "Uploaded as "..sResponse )
|
||||
print( "Run \"pastebin get "..sCode.."\" to download anywhere" )
|
||||
print( "Uploaded as " .. sResponse )
|
||||
print( "Run \"pastebin get " .. sCode .. "\" to download anywhere" )
|
||||
|
||||
else
|
||||
print( "Failed." )
|
||||
@ -137,7 +137,7 @@ elseif sCommand == "get" then
|
||||
file.write( res )
|
||||
file.close()
|
||||
|
||||
print( "Downloaded as "..sFile )
|
||||
print( "Downloaded as " .. sFile )
|
||||
end
|
||||
elseif sCommand == "run" then
|
||||
local sCode = tArgs[2]
|
||||
|
@ -6,24 +6,24 @@ if #tArgs > 0 then
|
||||
end
|
||||
|
||||
if sDrive == nil then
|
||||
print( "This is computer #"..os.getComputerID() )
|
||||
print( "This is computer #" .. os.getComputerID() )
|
||||
|
||||
local label = os.getComputerLabel()
|
||||
if label then
|
||||
print( "This computer is labelled \""..label.."\"" )
|
||||
print( "This computer is labelled \"" .. label .. "\"" )
|
||||
end
|
||||
|
||||
else
|
||||
local bData = disk.hasData( sDrive )
|
||||
if not bData then
|
||||
print( "No disk in drive "..sDrive )
|
||||
print( "No disk in drive " .. sDrive )
|
||||
return
|
||||
end
|
||||
|
||||
print( "The disk is #"..disk.getID( sDrive ) )
|
||||
print( "The disk is #" .. disk.getID( sDrive ) )
|
||||
|
||||
local label = disk.getLabel( sDrive )
|
||||
if label then
|
||||
print( "The disk is labelled \""..label.."\"" )
|
||||
print( "The disk is labelled \"" .. label .. "\"" )
|
||||
end
|
||||
end
|
||||
|
@ -14,11 +14,11 @@ local function checkDrive( sDrive )
|
||||
-- Check the disk exists
|
||||
local bData = disk.hasData( sDrive )
|
||||
if not bData then
|
||||
print( "No disk in "..sDrive.." drive" )
|
||||
print( "No disk in " .. sDrive .. " drive" )
|
||||
return false
|
||||
end
|
||||
else
|
||||
print( "No disk drive named "..sDrive )
|
||||
print( "No disk drive named " .. sDrive )
|
||||
return false
|
||||
end
|
||||
return true
|
||||
@ -29,7 +29,7 @@ local function get( sDrive )
|
||||
if checkDrive( sDrive ) then
|
||||
local sLabel = disk.getLabel( sDrive )
|
||||
if sLabel then
|
||||
print( "Disk label is \""..sLabel.."\"" )
|
||||
print( "Disk label is \"" .. sLabel .. "\"" )
|
||||
else
|
||||
print( "No Disk label" )
|
||||
end
|
||||
@ -37,7 +37,7 @@ local function get( sDrive )
|
||||
else
|
||||
local sLabel = os.getComputerLabel()
|
||||
if sLabel then
|
||||
print( "Computer label is \""..sLabel.."\"" )
|
||||
print( "Computer label is \"" .. sLabel .. "\"" )
|
||||
else
|
||||
print( "No Computer label" )
|
||||
end
|
||||
@ -50,7 +50,7 @@ local function set( sDrive, sText )
|
||||
disk.setLabel( sDrive, sText )
|
||||
local sLabel = disk.getLabel( sDrive )
|
||||
if sLabel then
|
||||
print( "Disk label set to \""..sLabel.."\"" )
|
||||
print( "Disk label set to \"" .. sLabel .. "\"" )
|
||||
else
|
||||
print( "Disk label cleared" )
|
||||
end
|
||||
@ -59,7 +59,7 @@ local function set( sDrive, sText )
|
||||
os.setComputerLabel( sText )
|
||||
local sLabel = os.getComputerLabel()
|
||||
if sLabel then
|
||||
print( "Computer label set to \""..sLabel.."\"" )
|
||||
print( "Computer label set to \"" .. sLabel .. "\"" )
|
||||
else
|
||||
print( "Computer label cleared" )
|
||||
end
|
||||
|
@ -67,7 +67,7 @@ while bRunning do
|
||||
|
||||
local nForcePrint = 0
|
||||
local func, e = load( s, "=lua", "t", tEnv )
|
||||
local func2 = load( "return _echo("..s..");", "=lua", "t", tEnv )
|
||||
local func2 = load( "return _echo(" .. s .. ");", "=lua", "t", tEnv )
|
||||
if not func then
|
||||
if func2 then
|
||||
func = func2
|
||||
|
@ -8,9 +8,9 @@ end
|
||||
for _, v in ipairs( tArgs ) do
|
||||
local sNewDir = shell.resolve( v )
|
||||
if fs.exists( sNewDir ) and not fs.isDir( sNewDir ) then
|
||||
printError( v..": Destination exists" )
|
||||
printError( v .. ": Destination exists" )
|
||||
elseif fs.isReadOnly( sNewDir ) then
|
||||
printError( v..": Access denied" )
|
||||
printError( v .. ": Access denied" )
|
||||
else
|
||||
fs.makeDir( sNewDir )
|
||||
end
|
||||
|
@ -11,18 +11,18 @@ end
|
||||
|
||||
local sName = tArgs[1]
|
||||
if peripheral.getType( sName ) ~= "monitor" then
|
||||
print( "No monitor named ".. sName )
|
||||
print( "No monitor named " .. sName )
|
||||
return
|
||||
end
|
||||
|
||||
local sProgram = tArgs[2]
|
||||
local sPath = shell.resolveProgram( sProgram )
|
||||
if sPath == nil then
|
||||
print( "No such program: "..sProgram )
|
||||
print( "No such program: " .. sProgram )
|
||||
return
|
||||
end
|
||||
|
||||
print( "Running "..sProgram.." on monitor "..sName )
|
||||
print( "Running " .. sProgram .. " on monitor " .. sName )
|
||||
|
||||
local monitor = peripheral.wrap( sName )
|
||||
local previousTerm = term.redirect( monitor )
|
||||
|
@ -3,7 +3,7 @@ local tMotd = {}
|
||||
for sPath in string.gmatch(settings.get( "motd.path" ), "[^:]+") do
|
||||
if fs.exists(sPath) then
|
||||
for sLine in io.lines(sPath) do
|
||||
table.insert(tMotd,sLine)
|
||||
table.insert(tMotd, sLine)
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -11,5 +11,5 @@ end
|
||||
if #tMotd == 0 then
|
||||
print("missingno")
|
||||
else
|
||||
print(tMotd[math.random(1,#tMotd)])
|
||||
print(tMotd[math.random(1, #tMotd)])
|
||||
end
|
||||
|
@ -9,7 +9,7 @@ local sSource = shell.resolve( tArgs[1] )
|
||||
local sDest = shell.resolve( tArgs[2] )
|
||||
local tFiles = fs.find( sSource )
|
||||
if #tFiles > 0 then
|
||||
for _,sFile in ipairs( tFiles ) do
|
||||
for _, sFile in ipairs( tFiles ) do
|
||||
if fs.isDir( sDest ) then
|
||||
fs.move( sFile, fs.combine( sDest, fs.getName(sFile) ) )
|
||||
elseif #tFiles == 1 then
|
||||
|
@ -1,7 +1,7 @@
|
||||
local tPeripherals = peripheral.getNames()
|
||||
print( "Attached Peripherals:" )
|
||||
if #tPeripherals > 0 then
|
||||
for n=1,#tPeripherals do
|
||||
for n = 1, #tPeripherals do
|
||||
local sPeripheral = tPeripherals[n]
|
||||
print( sPeripheral .. " (" .. peripheral.getType( sPeripheral ) .. ")" )
|
||||
end
|
||||
|
@ -4,178 +4,178 @@ This version written by Gopher, at the request of Dan200, for
|
||||
ComputerCraft v1.6. No particular rights are reserved.
|
||||
--]]
|
||||
|
||||
local function colorass(c,bw)
|
||||
local function colorass(c, bw)
|
||||
return term.isColor() and c or bw
|
||||
end
|
||||
|
||||
local block_s1= {
|
||||
local block_s1 = {
|
||||
{
|
||||
{ 1,0,0,0, },
|
||||
{ 1,1,0,0, },
|
||||
{ 0,1,0,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 1, 0, 0, 0 },
|
||||
{ 1, 1, 0, 0 },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
},
|
||||
{
|
||||
{ 0,0,0,0, },
|
||||
{ 0,1,1,0, },
|
||||
{ 1,1,0,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 0, 0, 0, 0 },
|
||||
{ 0, 1, 1, 0 },
|
||||
{ 1, 1, 0, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
},
|
||||
ch=colorass(" ","{}"),
|
||||
fg=colorass(colors.blue,colors.black),
|
||||
bg=colorass(colors.cyan,colors.white),
|
||||
ch = colorass(" ", "{}"),
|
||||
fg = colorass(colors.blue, colors.black),
|
||||
bg = colorass(colors.cyan, colors.white),
|
||||
}
|
||||
local block_s2= {
|
||||
local block_s2 = {
|
||||
{
|
||||
{ 0,1,0,0, },
|
||||
{ 1,1,0,0, },
|
||||
{ 1,0,0,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ 1, 1, 0, 0 },
|
||||
{ 1, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
},
|
||||
{
|
||||
{ 0,0,0,0, },
|
||||
{ 1,1,0,0, },
|
||||
{ 0,1,1,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 0, 0, 0, 0 },
|
||||
{ 1, 1, 0, 0 },
|
||||
{ 0, 1, 1, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
},
|
||||
ch=colorass(" ","{}"),
|
||||
fg=colorass(colors.green,colors.black),
|
||||
bg=colorass(colors.lime,colors.white),
|
||||
ch = colorass(" ", "{}"),
|
||||
fg = colorass(colors.green, colors.black),
|
||||
bg = colorass(colors.lime, colors.white),
|
||||
}
|
||||
local block_line = {
|
||||
{
|
||||
{ 0,1,0,0, },
|
||||
{ 0,1,0,0, },
|
||||
{ 0,1,0,0, },
|
||||
{ 0,1,0,0, },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ 0, 1, 0, 0 },
|
||||
},
|
||||
{
|
||||
{ 0,0,0,0, },
|
||||
{ 1,1,1,1, },
|
||||
{ 0,0,0,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 0, 0, 0, 0 },
|
||||
{ 1, 1, 1, 1 },
|
||||
{ 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
},
|
||||
ch=colorass(" ","[]"),
|
||||
fg=colorass(colors.pink,colors.black),
|
||||
bg=colorass(colors.red,colors.white),
|
||||
ch = colorass(" ", "[]"),
|
||||
fg = colorass(colors.pink, colors.black),
|
||||
bg = colorass(colors.red, colors.white),
|
||||
}
|
||||
local block_square = {
|
||||
{
|
||||
{ 1,1,0,0, },
|
||||
{ 1,1,0,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 1, 1, 0, 0 },
|
||||
{ 1, 1, 0, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
},
|
||||
ch=colorass(" ","[]"),
|
||||
fg=colorass(colors.lightBlue,colors.black),
|
||||
bg=colorass(colors.blue,colors.white),
|
||||
ch = colorass(" ", "[]"),
|
||||
fg = colorass(colors.lightBlue, colors.black),
|
||||
bg = colorass(colors.blue, colors.white),
|
||||
}
|
||||
local block_L1 = {
|
||||
{
|
||||
{ 1,1,0,0, },
|
||||
{ 0,1,0,0, },
|
||||
{ 0,1,0,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 1, 1, 0, 0 },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
},
|
||||
{
|
||||
{ 0,0,0,0, },
|
||||
{ 1,1,1,0, },
|
||||
{ 1,0,0,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 0, 0, 0, 0 },
|
||||
{ 1, 1, 1, 0 },
|
||||
{ 1, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
},
|
||||
{
|
||||
{ 0,1,0,0, },
|
||||
{ 0,1,0,0, },
|
||||
{ 0,1,1,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ 0, 1, 1, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
},
|
||||
{
|
||||
{ 0,0,1,0, },
|
||||
{ 1,1,1,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 0, 0, 1, 0 },
|
||||
{ 1, 1, 1, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
},
|
||||
ch=colorass(" ","()"),
|
||||
fg=colorass(colors.orange,colors.black),
|
||||
bg=colorass(colors.yellow,colors.white),
|
||||
ch = colorass(" ", "()"),
|
||||
fg = colorass(colors.orange, colors.black),
|
||||
bg = colorass(colors.yellow, colors.white),
|
||||
}
|
||||
local block_L2 = {
|
||||
{
|
||||
{ 0,1,0,0, },
|
||||
{ 0,1,0,0, },
|
||||
{ 1,1,0,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ 1, 1, 0, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
},
|
||||
{
|
||||
{ 0,0,0,0, },
|
||||
{ 1,1,1,0, },
|
||||
{ 0,0,1,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 0, 0, 0, 0 },
|
||||
{ 1, 1, 1, 0 },
|
||||
{ 0, 0, 1, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
},
|
||||
{
|
||||
{ 0,1,1,0, },
|
||||
{ 0,1,0,0, },
|
||||
{ 0,1,0,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 0, 1, 1, 0 },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
},
|
||||
{
|
||||
{ 1,0,0,0, },
|
||||
{ 1,1,1,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 1, 0, 0, 0 },
|
||||
{ 1, 1, 1, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
},
|
||||
ch=colorass(" ","()"),
|
||||
fg=colorass(colors.brown,colors.black),
|
||||
bg=colorass(colors.orange,colors.white),
|
||||
ch = colorass(" ", "()"),
|
||||
fg = colorass(colors.brown, colors.black),
|
||||
bg = colorass(colors.orange, colors.white),
|
||||
}
|
||||
local block_T = {
|
||||
{
|
||||
{ 0,1,0,0, },
|
||||
{ 1,1,0,0, },
|
||||
{ 0,1,0,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ 1, 1, 0, 0 },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
},
|
||||
{
|
||||
{ 0,0,0,0, },
|
||||
{ 1,1,1,0, },
|
||||
{ 0,1,0,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 0, 0, 0, 0 },
|
||||
{ 1, 1, 1, 0 },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
},
|
||||
{
|
||||
{ 0,1,0,0, },
|
||||
{ 0,1,1,0, },
|
||||
{ 0,1,0,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ 0, 1, 1, 0 },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
},
|
||||
{
|
||||
{ 0,1,0,0, },
|
||||
{ 1,1,1,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 0,0,0,0, },
|
||||
{ 0, 1, 0, 0 },
|
||||
{ 1, 1, 1, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0 },
|
||||
},
|
||||
ch=colorass(" ","<>"),
|
||||
fg=colorass(colors.cyan,colors.black),
|
||||
bg=colorass(colors.purple,colors.white),
|
||||
ch = colorass(" ", "<>"),
|
||||
fg = colorass(colors.cyan, colors.black),
|
||||
bg = colorass(colors.purple, colors.white),
|
||||
}
|
||||
|
||||
local blocks={ block_line, block_square, block_s1, block_s2, block_L1, block_L2, block_T}
|
||||
local blocks = { block_line, block_square, block_s1, block_s2, block_L1, block_L2, block_T}
|
||||
|
||||
local points={4,10,30,120}
|
||||
local points = {4, 10, 30, 120}
|
||||
|
||||
local function lpad(text,amt)
|
||||
text=tostring(text)
|
||||
return string.rep(" ",amt-#text)..text
|
||||
local function lpad(text, amt)
|
||||
text = tostring(text)
|
||||
return string.rep(" ", amt - #text) .. text
|
||||
end
|
||||
|
||||
local width,height=term.getSize()
|
||||
local width, height = term.getSize()
|
||||
|
||||
if height<19 or width<26 then
|
||||
if height < 19 or width < 26 then
|
||||
print("Your screen is too small to play :(")
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
local speedsByLevel={
|
||||
local speedsByLevel = {
|
||||
1.2,
|
||||
1.0,
|
||||
.8,
|
||||
@ -187,23 +187,23 @@ local speedsByLevel={
|
||||
.2,
|
||||
.15,
|
||||
.1,
|
||||
.05,}
|
||||
.05, }
|
||||
|
||||
local level=1
|
||||
local level = 1
|
||||
|
||||
local function playGame()
|
||||
local score=0
|
||||
local lines=0
|
||||
local initialLevel=level
|
||||
local next=blocks[math.random(1,#blocks)]
|
||||
local score = 0
|
||||
local lines = 0
|
||||
local initialLevel = level
|
||||
local next = blocks[math.random(1, #blocks)]
|
||||
|
||||
local pit={}
|
||||
local pit = {}
|
||||
|
||||
|
||||
local heightAdjust=0
|
||||
local heightAdjust = 0
|
||||
|
||||
if height<=19 then
|
||||
heightAdjust=1
|
||||
if height <= 19 then
|
||||
heightAdjust = 1
|
||||
end
|
||||
|
||||
|
||||
@ -215,56 +215,56 @@ local function playGame()
|
||||
|
||||
term.setTextColor(colors.black)
|
||||
term.setBackgroundColor(colorass(colors.lightGray, colors.white))
|
||||
term.setCursorPos(22,2)
|
||||
term.setCursorPos(22, 2)
|
||||
term.write("Score") --score
|
||||
term.setCursorPos(22,5)
|
||||
term.setCursorPos(22, 5)
|
||||
term.write("Level") --level
|
||||
term.setCursorPos(22,8)
|
||||
term.setCursorPos(22, 8)
|
||||
term.write("Lines") --lines
|
||||
term.setCursorPos(22,12)
|
||||
term.setCursorPos(22, 12)
|
||||
term.write("Next") --next
|
||||
|
||||
term.setCursorPos(21,1)
|
||||
term.setCursorPos(21, 1)
|
||||
term.write(" ")
|
||||
term.setCursorPos(21,2)
|
||||
term.setCursorPos(21, 2)
|
||||
term.write(" ") --score
|
||||
term.setCursorPos(21,3)
|
||||
term.setCursorPos(21, 3)
|
||||
term.write(" ")
|
||||
term.setCursorPos(21,4)
|
||||
term.setCursorPos(21, 4)
|
||||
term.write(" ")
|
||||
term.setCursorPos(21,5)
|
||||
term.setCursorPos(21, 5)
|
||||
term.write(" ") --level
|
||||
term.setCursorPos(21,6)
|
||||
term.setCursorPos(21, 6)
|
||||
term.write(" ")
|
||||
term.setCursorPos(21,7)
|
||||
term.setCursorPos(21, 7)
|
||||
term.write(" ")
|
||||
term.setCursorPos(21,8)
|
||||
term.setCursorPos(21, 8)
|
||||
term.write(" ") --lines
|
||||
term.setCursorPos(21,9)
|
||||
term.setCursorPos(21, 9)
|
||||
term.write(" ")
|
||||
term.setCursorPos(21,10)
|
||||
term.setCursorPos(21, 10)
|
||||
term.write(" ")
|
||||
term.setCursorPos(21,11)
|
||||
term.setCursorPos(21, 11)
|
||||
term.write(" ")
|
||||
term.setCursorPos(21,12)
|
||||
term.setCursorPos(21, 12)
|
||||
term.write(" ") --next
|
||||
term.setCursorPos(26,12)
|
||||
term.setCursorPos(26, 12)
|
||||
term.write(" ") --next
|
||||
term.setCursorPos(21,13)
|
||||
term.setCursorPos(21, 13)
|
||||
term.write(" ")
|
||||
term.setCursorPos(21,14)
|
||||
term.setCursorPos(21, 14)
|
||||
term.write(" ")
|
||||
term.setCursorPos(21,15)
|
||||
term.setCursorPos(21, 15)
|
||||
term.write(" ")
|
||||
term.setCursorPos(21,16)
|
||||
term.setCursorPos(21, 16)
|
||||
term.write(" ")
|
||||
term.setCursorPos(21,17)
|
||||
term.setCursorPos(21, 17)
|
||||
term.write(" ")
|
||||
term.setCursorPos(21,18)
|
||||
term.setCursorPos(21, 18)
|
||||
term.write(" ")
|
||||
term.setCursorPos(21,19)
|
||||
term.setCursorPos(21, 19)
|
||||
term.write(" ")
|
||||
term.setCursorPos(21,20)
|
||||
term.setCursorPos(21, 20)
|
||||
term.write(" ")
|
||||
end
|
||||
|
||||
@ -272,47 +272,47 @@ local function playGame()
|
||||
term.setTextColor(colors.white)
|
||||
term.setBackgroundColor(colors.black)
|
||||
|
||||
term.setCursorPos(22,3)
|
||||
term.write(lpad(score,5)) --score
|
||||
term.setCursorPos(22,6)
|
||||
term.write(lpad(level,5)) --level
|
||||
term.setCursorPos(22,9)
|
||||
term.write(lpad(lines,5)) --lines
|
||||
term.setCursorPos(22, 3)
|
||||
term.write(lpad(score, 5)) --score
|
||||
term.setCursorPos(22, 6)
|
||||
term.write(lpad(level, 5)) --level
|
||||
term.setCursorPos(22, 9)
|
||||
term.write(lpad(lines, 5)) --lines
|
||||
end
|
||||
|
||||
local function drawBlockAt(block,xp,yp,rot)
|
||||
local function drawBlockAt(block, xp, yp, rot)
|
||||
term.setTextColor(block.fg)
|
||||
term.setBackgroundColor(block.bg)
|
||||
for y=1,4 do
|
||||
for x=1,4 do
|
||||
if block[rot][y][x]==1 then
|
||||
term.setCursorPos((xp+x)*2-3,yp+y-1-heightAdjust)
|
||||
for y = 1, 4 do
|
||||
for x = 1, 4 do
|
||||
if block[rot][y][x] == 1 then
|
||||
term.setCursorPos((xp + x) * 2 - 3, yp + y - 1 - heightAdjust)
|
||||
term.write(block.ch)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function eraseBlockAt(block,xp,yp,rot)
|
||||
local function eraseBlockAt(block, xp, yp, rot)
|
||||
term.setTextColor(colors.white)
|
||||
term.setBackgroundColor(colors.black)
|
||||
for y=1,4 do
|
||||
for x=1,4 do
|
||||
if block[rot][y][x]==1 then
|
||||
term.setCursorPos((xp+x)*2-3,yp+y-1-heightAdjust)
|
||||
for y = 1, 4 do
|
||||
for x = 1, 4 do
|
||||
if block[rot][y][x] == 1 then
|
||||
term.setCursorPos((xp + x) * 2 - 3, yp + y - 1 - heightAdjust)
|
||||
term.write(" ")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function testBlockAt(block,xp,yp,rot)
|
||||
for y=1,4 do
|
||||
local ty=yp+y-1
|
||||
for x=1,4 do
|
||||
local tx=xp+x-1
|
||||
if block[rot][y][x]==1 then
|
||||
if tx>10 or tx<1 or ty>20 or pit[ty][tx]~=0 then
|
||||
local function testBlockAt(block, xp, yp, rot)
|
||||
for y = 1, 4 do
|
||||
local ty = yp + y - 1
|
||||
for x = 1, 4 do
|
||||
local tx = xp + x - 1
|
||||
if block[rot][y][x] == 1 then
|
||||
if tx > 10 or tx < 1 or ty > 20 or pit[ty][tx] ~= 0 then
|
||||
return true
|
||||
end
|
||||
end
|
||||
@ -320,11 +320,11 @@ local function playGame()
|
||||
end
|
||||
end
|
||||
|
||||
local function pitBlock(block,xp,yp,rot)
|
||||
for y=1,4 do
|
||||
for x=1,4 do
|
||||
if block[rot][y][x]==1 then
|
||||
pit[yp+y-1][xp+x-1]=block
|
||||
local function pitBlock(block, xp, yp, rot)
|
||||
for y = 1, 4 do
|
||||
for x = 1, 4 do
|
||||
if block[rot][y][x] == 1 then
|
||||
pit[yp + y - 1][xp + x - 1] = block
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -332,10 +332,10 @@ local function playGame()
|
||||
|
||||
|
||||
local function clearPit()
|
||||
for row=1,20 do
|
||||
pit[row]={}
|
||||
for col=1,10 do
|
||||
pit[row][col]=0
|
||||
for row = 1, 20 do
|
||||
pit[row] = {}
|
||||
for col = 1, 10 do
|
||||
pit[row][col] = 0
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -350,24 +350,24 @@ local function playGame()
|
||||
|
||||
|
||||
|
||||
local halt=false
|
||||
local dropSpeed=speedsByLevel[math.min(level,12)]
|
||||
local halt = false
|
||||
local dropSpeed = speedsByLevel[math.min(level, 12)]
|
||||
|
||||
|
||||
local curBlock=next
|
||||
next=blocks[math.random(1,7)]
|
||||
local curBlock = next
|
||||
next = blocks[math.random(1, 7)]
|
||||
|
||||
local curX, curY, curRot=4, 1, 1
|
||||
local dropTimer=os.startTimer(dropSpeed)
|
||||
local curX, curY, curRot = 4, 1, 1
|
||||
local dropTimer = os.startTimer(dropSpeed)
|
||||
|
||||
drawBlockAt(next,11.5,15+heightAdjust,1)
|
||||
drawBlockAt(curBlock,curX,curY,curRot)
|
||||
drawBlockAt(next, 11.5, 15 + heightAdjust, 1)
|
||||
drawBlockAt(curBlock, curX, curY, curRot)
|
||||
|
||||
local function redrawPit()
|
||||
for r=1+heightAdjust,20 do
|
||||
term.setCursorPos(1,r-heightAdjust)
|
||||
for c=1,10 do
|
||||
if pit[r][c]==0 then
|
||||
for r = 1 + heightAdjust, 20 do
|
||||
term.setCursorPos(1, r - heightAdjust)
|
||||
for c = 1, 10 do
|
||||
if pit[r][c] == 0 then
|
||||
term.setTextColor(colors.black)
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.write(" ")
|
||||
@ -381,8 +381,8 @@ local function playGame()
|
||||
end
|
||||
|
||||
local function hidePit()
|
||||
for r=1+heightAdjust,20 do
|
||||
term.setCursorPos(1,r-heightAdjust)
|
||||
for r = 1 + heightAdjust, 20 do
|
||||
term.setCursorPos(1, r - heightAdjust)
|
||||
term.setTextColor(colors.black)
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.write(" ")
|
||||
@ -390,56 +390,56 @@ local function playGame()
|
||||
end
|
||||
|
||||
local function msgBox(message)
|
||||
local x=math.floor((17-#message)/2)
|
||||
term.setBackgroundColor(colorass(colors.lightGray,colors.white))
|
||||
local x = math.floor((17 - #message) / 2)
|
||||
term.setBackgroundColor(colorass(colors.lightGray, colors.white))
|
||||
term.setTextColor(colors.black)
|
||||
term.setCursorPos(x,9)
|
||||
term.write("+"..string.rep("-",#message+2).."+")
|
||||
term.setCursorPos(x,10)
|
||||
term.setCursorPos(x, 9)
|
||||
term.write("+" .. string.rep("-", #message + 2) .. "+")
|
||||
term.setCursorPos(x, 10)
|
||||
term.write("|")
|
||||
term.setCursorPos(x+#message+3,10)
|
||||
term.setCursorPos(x + #message + 3, 10)
|
||||
term.write("|")
|
||||
term.setCursorPos(x,11)
|
||||
term.write("+"..string.rep("-",#message+2).."+")
|
||||
term.setCursorPos(x, 11)
|
||||
term.write("+" .. string.rep("-", #message + 2) .. "+")
|
||||
term.setTextColor(colors.white)
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.setCursorPos(x+1,10)
|
||||
term.write(" "..message.." ")
|
||||
term.setCursorPos(x + 1, 10)
|
||||
term.write(" " .. message .. " ")
|
||||
end
|
||||
|
||||
local function clearRows()
|
||||
local rows={}
|
||||
for r=1,20 do
|
||||
local count=0
|
||||
for c=1,10 do
|
||||
if pit[r][c]~=0 then
|
||||
count=count+1
|
||||
local rows = {}
|
||||
for r = 1, 20 do
|
||||
local count = 0
|
||||
for c = 1, 10 do
|
||||
if pit[r][c] ~= 0 then
|
||||
count = count + 1
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
if count==10 then
|
||||
rows[#rows+1]=r
|
||||
if count == 10 then
|
||||
rows[#rows + 1] = r
|
||||
end
|
||||
end
|
||||
|
||||
if #rows>0 then
|
||||
for _=1,4 do
|
||||
if #rows > 0 then
|
||||
for _ = 1, 4 do
|
||||
sleep(.1)
|
||||
for r=1,#rows do
|
||||
r=rows[r]
|
||||
term.setCursorPos(1,r-heightAdjust)
|
||||
for c=1,10 do
|
||||
for r = 1, #rows do
|
||||
r = rows[r]
|
||||
term.setCursorPos(1, r - heightAdjust)
|
||||
for c = 1, 10 do
|
||||
term.setTextColor(pit[r][c].bg)
|
||||
term.setBackgroundColor(pit[r][c].fg)
|
||||
term.write(pit[r][c].ch)
|
||||
end
|
||||
end
|
||||
sleep(.1)
|
||||
for r=1,#rows do
|
||||
r=rows[r]
|
||||
term.setCursorPos(1,r-heightAdjust)
|
||||
for c=1,10 do
|
||||
for r = 1, #rows do
|
||||
r = rows[r]
|
||||
term.setCursorPos(1, r - heightAdjust)
|
||||
for c = 1, 10 do
|
||||
term.setTextColor(pit[r][c].fg)
|
||||
term.setBackgroundColor(pit[r][c].bg)
|
||||
term.write(pit[r][c].ch)
|
||||
@ -448,154 +448,154 @@ local function playGame()
|
||||
end
|
||||
--now remove the rows and drop everythign else
|
||||
term.setBackgroundColor(colors.black)
|
||||
for r=1,#rows do
|
||||
r=rows[r]
|
||||
term.setCursorPos(1,r-heightAdjust)
|
||||
for r = 1, #rows do
|
||||
r = rows[r]
|
||||
term.setCursorPos(1, r - heightAdjust)
|
||||
term.write(" ")
|
||||
end
|
||||
sleep(.25)
|
||||
for r=1,#rows do
|
||||
table.remove(pit,rows[r])
|
||||
table.insert(pit,1,{0,0,0,0,0,0,0,0,0,0})
|
||||
for r = 1, #rows do
|
||||
table.remove(pit, rows[r])
|
||||
table.insert(pit, 1, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0})
|
||||
end
|
||||
redrawPit()
|
||||
lines=lines+#rows
|
||||
score=score+points[#rows]*math.min(level,20)
|
||||
level=math.floor(lines/10)+initialLevel
|
||||
dropSpeed=speedsByLevel[math.min(level,12)]
|
||||
lines = lines + #rows
|
||||
score = score + points[#rows] * math.min(level, 20)
|
||||
level = math.floor(lines / 10) + initialLevel
|
||||
dropSpeed = speedsByLevel[math.min(level, 12)]
|
||||
updateNumbers()
|
||||
end
|
||||
sleep(.25)
|
||||
end
|
||||
|
||||
local function blockFall()
|
||||
if testBlockAt(curBlock,curX,curY+1,curRot) then
|
||||
pitBlock(curBlock,curX,curY,curRot)
|
||||
if testBlockAt(curBlock, curX, curY + 1, curRot) then
|
||||
pitBlock(curBlock, curX, curY, curRot)
|
||||
--detect rows that clear
|
||||
clearRows()
|
||||
|
||||
curBlock=next
|
||||
curX=4
|
||||
curY=1
|
||||
curRot=1
|
||||
if testBlockAt(curBlock,curX,curY,curRot) then
|
||||
halt=true
|
||||
curBlock = next
|
||||
curX = 4
|
||||
curY = 1
|
||||
curRot = 1
|
||||
if testBlockAt(curBlock, curX, curY, curRot) then
|
||||
halt = true
|
||||
end
|
||||
drawBlockAt(curBlock,curX,curY,curRot)
|
||||
eraseBlockAt(next,11.5,15+heightAdjust,1)
|
||||
next=blocks[math.random(1,7)]
|
||||
drawBlockAt(next,11.5,15+heightAdjust,1)
|
||||
drawBlockAt(curBlock, curX, curY, curRot)
|
||||
eraseBlockAt(next, 11.5, 15 + heightAdjust, 1)
|
||||
next = blocks[math.random(1, 7)]
|
||||
drawBlockAt(next, 11.5, 15 + heightAdjust, 1)
|
||||
return true
|
||||
else
|
||||
eraseBlockAt(curBlock,curX,curY,curRot)
|
||||
curY=curY+1
|
||||
drawBlockAt(curBlock,curX,curY,curRot)
|
||||
eraseBlockAt(curBlock, curX, curY, curRot)
|
||||
curY = curY + 1
|
||||
drawBlockAt(curBlock, curX, curY, curRot)
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
while not halt do
|
||||
local e={os.pullEvent()}
|
||||
if e[1]=="timer" then
|
||||
if e[2]==dropTimer then
|
||||
local e = {os.pullEvent()}
|
||||
if e[1] == "timer" then
|
||||
if e[2] == dropTimer then
|
||||
blockFall()
|
||||
dropTimer=os.startTimer(dropSpeed)
|
||||
dropTimer = os.startTimer(dropSpeed)
|
||||
end
|
||||
elseif e[1]=="key" then
|
||||
local key=e[2]
|
||||
local dx,dy,dr=0,0,0
|
||||
if key==keys.left or key==keys.a then
|
||||
dx=-1
|
||||
elseif key==keys.right or key==keys.d then
|
||||
dx=1
|
||||
elseif key==keys.up or key==keys.w then
|
||||
dr=1
|
||||
elseif key==keys.down or key==keys.s then
|
||||
elseif e[1] == "key" then
|
||||
local key = e[2]
|
||||
local dx, dy, dr = 0, 0, 0
|
||||
if key == keys.left or key == keys.a then
|
||||
dx = -1
|
||||
elseif key == keys.right or key == keys.d then
|
||||
dx = 1
|
||||
elseif key == keys.up or key == keys.w then
|
||||
dr = 1
|
||||
elseif key == keys.down or key == keys.s then
|
||||
while not blockFall() do end
|
||||
dropTimer=os.startTimer(dropSpeed)
|
||||
elseif key==keys.space then
|
||||
dropTimer = os.startTimer(dropSpeed)
|
||||
elseif key == keys.space then
|
||||
hidePit()
|
||||
msgBox("Paused")
|
||||
while ({os.pullEvent("key")})[2]~=keys.space do end
|
||||
while ({os.pullEvent("key")})[2] ~= keys.space do end
|
||||
redrawPit()
|
||||
drawBlockAt(curBlock,curX,curY,curRot)
|
||||
dropTimer=os.startTimer(dropSpeed)
|
||||
drawBlockAt(curBlock, curX, curY, curRot)
|
||||
dropTimer = os.startTimer(dropSpeed)
|
||||
end
|
||||
if dx+dr~=0 then
|
||||
if not testBlockAt(curBlock,curX+dx,curY+dy,dr>0 and curRot%#curBlock+dr or curRot) then
|
||||
eraseBlockAt(curBlock,curX,curY,curRot)
|
||||
curX=curX+dx
|
||||
curY=curY+dy
|
||||
curRot=dr==0 and curRot or curRot%#curBlock+dr
|
||||
drawBlockAt(curBlock,curX,curY,curRot)
|
||||
if dx + dr ~= 0 then
|
||||
if not testBlockAt(curBlock, curX + dx, curY + dy, dr > 0 and curRot % #curBlock + dr or curRot) then
|
||||
eraseBlockAt(curBlock, curX, curY, curRot)
|
||||
curX = curX + dx
|
||||
curY = curY + dy
|
||||
curRot = dr == 0 and curRot or curRot % #curBlock + dr
|
||||
drawBlockAt(curBlock, curX, curY, curRot)
|
||||
end
|
||||
end
|
||||
elseif e[1]=="term_resize" then
|
||||
local _,h=term.getSize()
|
||||
if h==20 then
|
||||
heightAdjust=0
|
||||
elseif e[1] == "term_resize" then
|
||||
local _, h = term.getSize()
|
||||
if h == 20 then
|
||||
heightAdjust = 0
|
||||
else
|
||||
heightAdjust=1
|
||||
heightAdjust = 1
|
||||
end
|
||||
redrawPit()
|
||||
drawBlockAt(curBlock,curX,curY,curRot)
|
||||
drawBlockAt(curBlock, curX, curY, curRot)
|
||||
end
|
||||
end
|
||||
|
||||
msgBox("Game Over!")
|
||||
while true do
|
||||
local _,k=os.pullEvent("key")
|
||||
if k==keys.space or k==keys.enter then
|
||||
local _, k = os.pullEvent("key")
|
||||
if k == keys.space or k == keys.enter then
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
level = math.min(level,9)
|
||||
level = math.min(level, 9)
|
||||
end
|
||||
|
||||
|
||||
local selected=1
|
||||
local playersDetected=false
|
||||
local selected = 1
|
||||
local playersDetected = false
|
||||
|
||||
local function drawMenu()
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.setTextColor(colorass(colors.red,colors.white))
|
||||
term.setTextColor(colorass(colors.red, colors.white))
|
||||
term.clear()
|
||||
|
||||
local cx,cy=math.floor(width/2),math.floor(height/2)
|
||||
local cx, cy = math.floor(width / 2), math.floor(height / 2)
|
||||
|
||||
term.setCursorPos(cx-6,cy-2)
|
||||
term.setCursorPos(cx - 6, cy - 2)
|
||||
term.write("F A L L I N G")
|
||||
|
||||
if playersDetected then
|
||||
if selected==0 then
|
||||
term.setTextColor(colorass(colors.blue,colors.black))
|
||||
term.setBackgroundColor(colorass(colors.gray,colors.white))
|
||||
if selected == 0 then
|
||||
term.setTextColor(colorass(colors.blue, colors.black))
|
||||
term.setBackgroundColor(colorass(colors.gray, colors.white))
|
||||
else
|
||||
term.setTextColor(colorass(colors.lightBlue,colors.white))
|
||||
term.setTextColor(colorass(colors.lightBlue, colors.white))
|
||||
term.setBackgroundColor(colors.black)
|
||||
end
|
||||
term.setCursorPos(cx-12,cy)
|
||||
term.setCursorPos(cx - 12, cy)
|
||||
term.write(" Play head-to-head game! ")
|
||||
end
|
||||
|
||||
term.setCursorPos(cx-10,cy+1)
|
||||
if selected==1 then
|
||||
term.setTextColor(colorass(colors.blue,colors.black))
|
||||
term.setBackgroundColor(colorass(colors.lightGray,colors.white))
|
||||
term.setCursorPos(cx - 10, cy + 1)
|
||||
if selected == 1 then
|
||||
term.setTextColor(colorass(colors.blue, colors.black))
|
||||
term.setBackgroundColor(colorass(colors.lightGray, colors.white))
|
||||
else
|
||||
term.setTextColor(colorass(colors.lightBlue,colors.white))
|
||||
term.setTextColor(colorass(colors.lightBlue, colors.white))
|
||||
term.setBackgroundColor(colors.black)
|
||||
end
|
||||
term.write(" Play from level: <" .. level .. "> ")
|
||||
|
||||
term.setCursorPos(cx-3,cy+3)
|
||||
if selected==2 then
|
||||
term.setTextColor(colorass(colors.blue,colors.black))
|
||||
term.setBackgroundColor(colorass(colors.lightGray,colors.white))
|
||||
term.setCursorPos(cx - 3, cy + 3)
|
||||
if selected == 2 then
|
||||
term.setTextColor(colorass(colors.blue, colors.black))
|
||||
term.setBackgroundColor(colorass(colors.lightGray, colors.white))
|
||||
else
|
||||
term.setTextColor(colorass(colors.lightBlue,colors.white))
|
||||
term.setTextColor(colorass(colors.lightBlue, colors.white))
|
||||
term.setBackgroundColor(colors.black)
|
||||
end
|
||||
term.write(" Quit ")
|
||||
@ -606,28 +606,28 @@ local function runMenu()
|
||||
drawMenu()
|
||||
|
||||
while true do
|
||||
local event={os.pullEvent()}
|
||||
if event[1]=="key" then
|
||||
local key=event[2]
|
||||
if key==keys.right or key==keys.d and selected==1 then
|
||||
level=math.min(level+1,9)
|
||||
local event = {os.pullEvent()}
|
||||
if event[1] == "key" then
|
||||
local key = event[2]
|
||||
if key == keys.right or key == keys.d and selected == 1 then
|
||||
level = math.min(level + 1, 9)
|
||||
drawMenu()
|
||||
elseif key==keys.left or key==keys.a and selected==1 then
|
||||
level=math.max(level-1,1)
|
||||
elseif key == keys.left or key == keys.a and selected == 1 then
|
||||
level = math.max(level - 1, 1)
|
||||
drawMenu()
|
||||
elseif key>=keys.one and key<=keys.nine and selected==1 then
|
||||
level=key-keys.one + 1
|
||||
elseif key >= keys.one and key <= keys.nine and selected == 1 then
|
||||
level = key - keys.one + 1
|
||||
drawMenu()
|
||||
elseif key==keys.up or key==keys.w then
|
||||
selected=selected-1
|
||||
if selected==0 then
|
||||
selected=2
|
||||
elseif key == keys.up or key == keys.w then
|
||||
selected = selected - 1
|
||||
if selected == 0 then
|
||||
selected = 2
|
||||
end
|
||||
drawMenu()
|
||||
elseif key==keys.down or key==keys.s then
|
||||
selected=selected%2+1
|
||||
elseif key == keys.down or key == keys.s then
|
||||
selected = selected % 2 + 1
|
||||
drawMenu()
|
||||
elseif key==keys.enter or key==keys.space then
|
||||
elseif key == keys.enter or key == keys.space then
|
||||
break --begin play!
|
||||
end
|
||||
end
|
||||
@ -636,7 +636,7 @@ end
|
||||
|
||||
while true do
|
||||
runMenu()
|
||||
if selected==2 then
|
||||
if selected == 2 then
|
||||
break
|
||||
end
|
||||
|
||||
@ -647,4 +647,4 @@ end
|
||||
term.setTextColor(colors.white)
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.clear()
|
||||
term.setCursorPos(1,1)
|
||||
term.setCursorPos(1, 1)
|
||||
|
@ -9,7 +9,7 @@ end
|
||||
|
||||
local sOpenedModem = nil
|
||||
local function openModem()
|
||||
for _,sModem in ipairs( peripheral.getNames() ) do
|
||||
for _, sModem in ipairs( peripheral.getNames() ) do
|
||||
if peripheral.getType( sModem ) == "modem" then
|
||||
if not rednet.isOpen( sModem ) then
|
||||
rednet.open( sModem )
|
||||
@ -94,7 +94,7 @@ if sCommand == "host" then
|
||||
end
|
||||
|
||||
local function printUsers()
|
||||
local _,y = term.getCursorPos()
|
||||
local _, y = term.getCursorPos()
|
||||
term.setCursorPos( 1, y - 1 )
|
||||
term.clearLine()
|
||||
if nUsers == 1 then
|
||||
@ -114,7 +114,7 @@ if sCommand == "host" then
|
||||
local tUser = tUsers[ nUserID ]
|
||||
if tUser then
|
||||
if not tUser.bPingPonged then
|
||||
send( "* "..tUser.sUsername.." has timed out" )
|
||||
send( "* " .. tUser.sUsername .. " has timed out" )
|
||||
tUsers[ nUserID ] = nil
|
||||
nUsers = nUsers - 1
|
||||
printUsers()
|
||||
@ -131,7 +131,7 @@ if sCommand == "host" then
|
||||
tCommands = {
|
||||
["me"] = function( tUser, sContent )
|
||||
if string.len(sContent) > 0 then
|
||||
send( "* "..tUser.sUsername.." "..sContent )
|
||||
send( "* " .. tUser.sUsername .. " " .. sContent )
|
||||
else
|
||||
send( "* Usage: /me [words]", tUser.nUserID )
|
||||
end
|
||||
@ -140,7 +140,7 @@ if sCommand == "host" then
|
||||
if string.len(sContent) > 0 then
|
||||
local sOldName = tUser.sUsername
|
||||
tUser.sUsername = sContent
|
||||
send( "* "..sOldName.." is now known as "..tUser.sUsername )
|
||||
send( "* " .. sOldName .. " is now known as " .. tUser.sUsername )
|
||||
else
|
||||
send( "* Usage: /nick [nickname]", tUser.nUserID )
|
||||
end
|
||||
@ -159,7 +159,7 @@ if sCommand == "host" then
|
||||
for sCommand in pairs( tCommands ) do
|
||||
sCommands = sCommands .. " /" .. sCommand
|
||||
end
|
||||
send( sCommands.." /logout", tUser.nUserID )
|
||||
send( sCommands .. " /logout", tUser.nUserID )
|
||||
end,
|
||||
}
|
||||
|
||||
@ -177,7 +177,7 @@ if sCommand == "host" then
|
||||
}
|
||||
nUsers = nUsers + 1
|
||||
printUsers()
|
||||
send( "* "..sUsername.." has joined the chat" )
|
||||
send( "* " .. sUsername .. " has joined the chat" )
|
||||
ping( nUserID )
|
||||
end
|
||||
|
||||
@ -187,7 +187,7 @@ if sCommand == "host" then
|
||||
local tUser = tUsers[ nUserID ]
|
||||
if tUser and tUser.nID == nSenderID then
|
||||
if tMessage.sType == "logout" then
|
||||
send( "* "..tUser.sUsername.." has left the chat" )
|
||||
send( "* " .. tUser.sUsername .. " has left the chat" )
|
||||
tUsers[ nUserID ] = nil
|
||||
nUsers = nUsers - 1
|
||||
printUsers()
|
||||
@ -199,13 +199,13 @@ if sCommand == "host" then
|
||||
if sCommand then
|
||||
local fnCommand = tCommands[ sCommand ]
|
||||
if fnCommand then
|
||||
local sContent = string.sub( sMessage, string.len(sCommand)+3 )
|
||||
local sContent = string.sub( sMessage, string.len(sCommand) + 3 )
|
||||
fnCommand( tUser, sContent )
|
||||
else
|
||||
send( "* Unrecognised command: /"..sCommand, tUser.nUserID )
|
||||
send( "* Unrecognised command: /" .. sCommand, tUser.nUserID )
|
||||
end
|
||||
else
|
||||
send( "<"..tUser.sUsername.."> "..tMessage.sText )
|
||||
send( "<" .. tUser.sUsername .. "> " .. tMessage.sText )
|
||||
end
|
||||
end
|
||||
|
||||
@ -284,12 +284,12 @@ elseif sCommand == "join" then
|
||||
end
|
||||
|
||||
-- Handle messages
|
||||
local w,h = term.getSize()
|
||||
local w, h = term.getSize()
|
||||
local parentTerm = term.current()
|
||||
local titleWindow = window.create( parentTerm, 1, 1, w, 1, true )
|
||||
local historyWindow = window.create( parentTerm, 1, 2, w, h-2, true )
|
||||
local historyWindow = window.create( parentTerm, 1, 2, w, h - 2, true )
|
||||
local promptWindow = window.create( parentTerm, 1, h, w, 1, true )
|
||||
historyWindow.setCursorPos( 1, h-2 )
|
||||
historyWindow.setCursorPos( 1, h - 2 )
|
||||
|
||||
term.clear()
|
||||
term.setTextColour( textColour )
|
||||
@ -298,9 +298,9 @@ elseif sCommand == "join" then
|
||||
|
||||
local function drawTitle()
|
||||
local w = titleWindow.getSize()
|
||||
local sTitle = sUsername.." on "..sHostname
|
||||
local sTitle = sUsername .. " on " .. sHostname
|
||||
titleWindow.setTextColour( highlightColour )
|
||||
titleWindow.setCursorPos( math.floor( w/2 - string.len(sTitle)/2 ), 1 )
|
||||
titleWindow.setCursorPos( math.floor( w / 2 - string.len(sTitle) / 2 ), 1 )
|
||||
titleWindow.clearLine()
|
||||
titleWindow.write( sTitle )
|
||||
promptWindow.restoreCursor()
|
||||
@ -347,9 +347,9 @@ elseif sCommand == "join" then
|
||||
end
|
||||
|
||||
elseif sEvent == "term_resize" then
|
||||
local w,h = parentTerm.getSize()
|
||||
local w, h = parentTerm.getSize()
|
||||
titleWindow.reposition( 1, 1, w, 1 )
|
||||
historyWindow.reposition( 1, 2, w, h-2 )
|
||||
historyWindow.reposition( 1, 2, w, h - 2 )
|
||||
promptWindow.reposition( 1, h, w, 1 )
|
||||
|
||||
end
|
||||
@ -384,7 +384,7 @@ elseif sCommand == "join" then
|
||||
function()
|
||||
local tSendHistory = {}
|
||||
while true do
|
||||
promptWindow.setCursorPos( 1,1 )
|
||||
promptWindow.setCursorPos( 1, 1 )
|
||||
promptWindow.clearLine()
|
||||
promptWindow.setTextColor( highlightColour )
|
||||
promptWindow.write( ": ")
|
||||
@ -409,7 +409,7 @@ elseif sCommand == "join" then
|
||||
term.redirect( parentTerm )
|
||||
|
||||
-- Print error notice
|
||||
local _,h = term.getSize()
|
||||
local _, h = term.getSize()
|
||||
term.setCursorPos( 1, h )
|
||||
term.clearLine()
|
||||
term.setCursorBlink( false )
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
-- Find modems
|
||||
local tModems = {}
|
||||
for _,sModem in ipairs( peripheral.getNames() ) do
|
||||
for _, sModem in ipairs( peripheral.getNames() ) do
|
||||
if peripheral.getType( sModem ) == "modem" then
|
||||
table.insert( tModems, sModem )
|
||||
end
|
||||
@ -16,14 +16,14 @@ else
|
||||
end
|
||||
|
||||
local function open( nChannel )
|
||||
for n=1,#tModems do
|
||||
for n = 1, #tModems do
|
||||
local sModem = tModems[n]
|
||||
peripheral.call( sModem, "open", nChannel )
|
||||
end
|
||||
end
|
||||
|
||||
local function close( nChannel )
|
||||
for n=1,#tModems do
|
||||
for n = 1, #tModems do
|
||||
local sModem = tModems[n]
|
||||
peripheral.call( sModem, "close", nChannel )
|
||||
end
|
||||
@ -51,7 +51,7 @@ local ok, error = pcall( function()
|
||||
tReceivedMessageTimeouts[ os.startTimer( 30 ) ] = tMessage.nMessageID
|
||||
|
||||
-- Send on all other open modems, to the target and to other repeaters
|
||||
for n=1,#tModems do
|
||||
for n = 1, #tModems do
|
||||
local sOtherModem = tModems[n]
|
||||
peripheral.call( sOtherModem, "transmit", rednet.CHANNEL_REPEAT, nReplyChannel, tMessage )
|
||||
peripheral.call( sOtherModem, "transmit", tMessage.nRecipient, nReplyChannel, tMessage )
|
||||
@ -59,7 +59,7 @@ local ok, error = pcall( function()
|
||||
|
||||
-- Log the event
|
||||
nTransmittedMessages = nTransmittedMessages + 1
|
||||
local _,y = term.getCursorPos()
|
||||
local _, y = term.getCursorPos()
|
||||
term.setCursorPos( 1, y - 1 )
|
||||
term.clearLine()
|
||||
if nTransmittedMessages == 1 then
|
||||
|
@ -17,7 +17,7 @@ if sCommand == "probe" then
|
||||
|
||||
local count = 0
|
||||
local bundledCount = 0
|
||||
for _,sSide in ipairs( redstone.getSides() ) do
|
||||
for _, sSide in ipairs( redstone.getSides() ) do
|
||||
if redstone.getBundledInput( sSide ) > 0 then
|
||||
bundledCount = bundledCount + 1
|
||||
end
|
||||
@ -39,12 +39,12 @@ if sCommand == "probe" then
|
||||
if bundledCount > 0 then
|
||||
print()
|
||||
print( "Bundled inputs:" )
|
||||
for _,sSide in ipairs( redstone.getSides() ) do
|
||||
for _, sSide in ipairs( redstone.getSides() ) do
|
||||
local nInput = redstone.getBundledInput( sSide )
|
||||
if nInput ~= 0 then
|
||||
write( sSide..": " )
|
||||
write( sSide .. ": " )
|
||||
local count = 0
|
||||
for sColour,nColour in pairs( colors ) do
|
||||
for sColour, nColour in pairs( colors ) do
|
||||
if type( nColour ) == "number" and colors.test( nInput, nColour ) then
|
||||
if count > 0 then
|
||||
write( ", " )
|
||||
@ -69,7 +69,7 @@ elseif sCommand == "pulse" then
|
||||
local sSide = tArgs[2]
|
||||
local nCount = tonumber( tArgs[3] ) or 1
|
||||
local nPeriod = tonumber( tArgs[4] ) or 0.5
|
||||
for _=1,nCount do
|
||||
for _ = 1, nCount do
|
||||
redstone.setOutput( sSide, true )
|
||||
sleep( nPeriod / 2 )
|
||||
redstone.setOutput( sSide, false )
|
||||
|
@ -2,12 +2,12 @@
|
||||
local tArgs = { ... }
|
||||
if #tArgs == 0 then
|
||||
-- "set"
|
||||
local _,y = term.getCursorPos()
|
||||
local _, y = term.getCursorPos()
|
||||
local tSettings = {}
|
||||
for n,sName in ipairs( settings.getNames() ) do
|
||||
for n, sName in ipairs( settings.getNames() ) do
|
||||
tSettings[n] = textutils.serialize(sName) .. " is " .. textutils.serialize(settings.get(sName))
|
||||
end
|
||||
textutils.pagedPrint(table.concat(tSettings,"\n"),y-3)
|
||||
textutils.pagedPrint(table.concat(tSettings, "\n"), y - 3)
|
||||
|
||||
elseif #tArgs == 1 then
|
||||
-- "set foo"
|
||||
|
@ -33,9 +33,9 @@ local function createShellEnv( sDir )
|
||||
}
|
||||
package.path = "?;?.lua;?/init.lua;/rom/modules/main/?;/rom/modules/main/?.lua;/rom/modules/main/?/init.lua"
|
||||
if turtle then
|
||||
package.path = package.path..";/rom/modules/turtle/?;/rom/modules/turtle/?.lua;/rom/modules/turtle/?/init.lua"
|
||||
package.path = package.path .. ";/rom/modules/turtle/?;/rom/modules/turtle/?.lua;/rom/modules/turtle/?/init.lua"
|
||||
elseif command then
|
||||
package.path = package.path..";/rom/modules/command/?;/rom/modules/command/?.lua;/rom/modules/command/?/init.lua"
|
||||
package.path = package.path .. ";/rom/modules/command/?;/rom/modules/command/?.lua;/rom/modules/command/?/init.lua"
|
||||
end
|
||||
package.config = "/\n;\n?\n!\n-"
|
||||
package.preload = {}
|
||||
@ -52,7 +52,7 @@ local function createShellEnv( sDir )
|
||||
local sError = ""
|
||||
for pattern in string.gmatch(package.path, "[^;]+") do
|
||||
local sPath = string.gsub(pattern, "%?", fname)
|
||||
if sPath:sub(1,1) ~= "/" then
|
||||
if sPath:sub(1, 1) ~= "/" then
|
||||
sPath = fs.combine(sDir, sPath)
|
||||
end
|
||||
if fs.exists(sPath) and not fs.isDir(sPath) then
|
||||
@ -70,7 +70,7 @@ local function createShellEnv( sDir )
|
||||
end
|
||||
end
|
||||
return nil, sError
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
local sentinel = {}
|
||||
@ -125,7 +125,7 @@ local function run( _sCommand, ... )
|
||||
if multishell then
|
||||
local sTitle = fs.getName( sPath )
|
||||
if sTitle:sub(-4) == ".lua" then
|
||||
sTitle = sTitle:sub(1,-5)
|
||||
sTitle = sTitle:sub(1, -5)
|
||||
end
|
||||
multishell.setTitle( multishell.getCurrent(), sTitle )
|
||||
end
|
||||
@ -140,7 +140,7 @@ local function run( _sCommand, ... )
|
||||
if #tProgramStack > 0 then
|
||||
local sTitle = fs.getName( tProgramStack[#tProgramStack] )
|
||||
if sTitle:sub(-4) == ".lua" then
|
||||
sTitle = sTitle:sub(1,-5)
|
||||
sTitle = sTitle:sub(1, -5)
|
||||
end
|
||||
multishell.setTitle( multishell.getCurrent(), sTitle )
|
||||
else
|
||||
@ -272,12 +272,12 @@ function shell.programs( _bIncludeHidden )
|
||||
sPath = shell.resolve( sPath )
|
||||
if fs.isDir( sPath ) then
|
||||
local tList = fs.list( sPath )
|
||||
for n=1,#tList do
|
||||
for n = 1, #tList do
|
||||
local sFile = tList[n]
|
||||
if not fs.isDir( fs.combine( sPath, sFile ) ) and
|
||||
(_bIncludeHidden or string.sub( sFile, 1, 1 ) ~= ".") then
|
||||
if #sFile > 4 and sFile:sub(-4) == ".lua" then
|
||||
sFile = sFile:sub(1,-5)
|
||||
sFile = sFile:sub(1, -5)
|
||||
end
|
||||
tItems[ sFile ] = true
|
||||
end
|
||||
@ -326,7 +326,7 @@ local function completeProgram( sLine )
|
||||
|
||||
-- Add programs from the path
|
||||
local tPrograms = shell.programs()
|
||||
for n=1,#tPrograms do
|
||||
for n = 1, #tPrograms do
|
||||
local sProgram = tPrograms[n]
|
||||
if #sProgram > #sLine and string.sub( sProgram, 1, #sLine ) == sLine then
|
||||
local sResult = string.sub( sProgram, #sLine + 1 )
|
||||
@ -366,7 +366,7 @@ function shell.complete( sLine )
|
||||
return { " " }
|
||||
else
|
||||
local tResults = completeProgram( sBit )
|
||||
for n=1,#tResults do
|
||||
for n = 1, #tResults do
|
||||
local sResult = tResults[n]
|
||||
local sPath = shell.resolveProgram( sBit .. sResult )
|
||||
if tCompletionInfo[ sPath ] then
|
||||
@ -397,7 +397,7 @@ function shell.setCompletionFunction( sProgram, fnComplete )
|
||||
expect(1, sProgram, "string")
|
||||
expect(2, fnComplete, "function")
|
||||
tCompletionInfo[ sProgram ] = {
|
||||
fnComplete = fnComplete
|
||||
fnComplete = fnComplete,
|
||||
}
|
||||
end
|
||||
|
||||
|
@ -1,3 +1,3 @@
|
||||
local nTime = os.time()
|
||||
local nDay = os.day()
|
||||
print( "The time is "..textutils.formatTime( nTime, false ).." on Day "..nDay )
|
||||
print( "The time is " .. textutils.formatTime( nTime, false ) .. " on Day " .. nDay )
|
||||
|
@ -29,7 +29,7 @@ if turtle.craft( nLimit ) then
|
||||
end
|
||||
|
||||
if nCrafted > 1 then
|
||||
print( nCrafted.." items crafted" )
|
||||
print( nCrafted .. " items crafted" )
|
||||
elseif nCrafted == 1 then
|
||||
print( "1 item crafted" )
|
||||
else
|
||||
|
@ -81,10 +81,10 @@ textutils.slowWrite( "Preparing to get down." )
|
||||
textutils.slowPrint( "..", 0.75 )
|
||||
|
||||
local sAudio = nil
|
||||
for _,sName in pairs( peripheral.getNames() ) do
|
||||
for _, sName in pairs( peripheral.getNames() ) do
|
||||
if disk.hasAudio( sName ) then
|
||||
disk.playAudio( sName )
|
||||
print( "Jamming to "..disk.getAudioTitle( sName ) )
|
||||
print( "Jamming to " .. disk.getAudioTitle( sName ) )
|
||||
sAudio = sName
|
||||
break
|
||||
end
|
||||
@ -103,7 +103,7 @@ parallel.waitForAny(
|
||||
end,
|
||||
function()
|
||||
while true do
|
||||
local fnMove = tMoves[math.random(1,#tMoves)]
|
||||
local fnMove = tMoves[math.random(1, #tMoves)]
|
||||
fnMove()
|
||||
end
|
||||
end
|
||||
|
@ -20,15 +20,15 @@ local depth = 0
|
||||
local unloaded = 0
|
||||
local collected = 0
|
||||
|
||||
local xPos,zPos = 0,0
|
||||
local xDir,zDir = 0,1
|
||||
local xPos, zPos = 0, 0
|
||||
local xDir, zDir = 0, 1
|
||||
|
||||
local goTo -- Filled in further down
|
||||
local refuel -- Filled in further down
|
||||
|
||||
local function unload( _bKeepOneFuelStack )
|
||||
print( "Unloading items..." )
|
||||
for n=1,16 do
|
||||
for n = 1, 16 do
|
||||
local nCount = turtle.getItemCount(n)
|
||||
if nCount > 0 then
|
||||
turtle.select(n)
|
||||
@ -48,11 +48,11 @@ local function unload( _bKeepOneFuelStack )
|
||||
end
|
||||
|
||||
local function returnSupplies()
|
||||
local x,y,z,xd,zd = xPos,depth,zPos,xDir,zDir
|
||||
local x, y, z, xd, zd = xPos, depth, zPos, xDir, zDir
|
||||
print( "Returning to surface..." )
|
||||
goTo( 0,0,0,0,-1 )
|
||||
goTo( 0, 0, 0, 0, -1 )
|
||||
|
||||
local fuelNeeded = 2*(x+y+z) + 1
|
||||
local fuelNeeded = 2 * (x + y + z) + 1
|
||||
if not refuel( fuelNeeded ) then
|
||||
unload( true )
|
||||
print( "Waiting for fuel" )
|
||||
@ -64,13 +64,13 @@ local function returnSupplies()
|
||||
end
|
||||
|
||||
print( "Resuming mining..." )
|
||||
goTo( x,y,z,xd,zd )
|
||||
goTo( x, y, z, xd, zd )
|
||||
end
|
||||
|
||||
local function collect()
|
||||
local bFull = true
|
||||
local nTotalItems = 0
|
||||
for n=1,16 do
|
||||
for n = 1, 16 do
|
||||
local nCount = turtle.getItemCount(n)
|
||||
if nCount == 0 then
|
||||
bFull = false
|
||||
@ -81,7 +81,7 @@ local function collect()
|
||||
if nTotalItems > collected then
|
||||
collected = nTotalItems
|
||||
if math.fmod(collected + unloaded, 50) == 0 then
|
||||
print( "Mined "..collected + unloaded.." items." )
|
||||
print( "Mined " .. collected + unloaded .. " items." )
|
||||
end
|
||||
end
|
||||
|
||||
@ -100,7 +100,7 @@ function refuel( ammount )
|
||||
|
||||
local needed = ammount or xPos + zPos + depth + 2
|
||||
if turtle.getFuelLevel() < needed then
|
||||
for n=1,16 do
|
||||
for n = 1, 16 do
|
||||
if turtle.getItemCount(n) > 0 then
|
||||
turtle.select(n)
|
||||
if turtle.refuel(1) then
|
||||
@ -176,7 +176,7 @@ local function tryDown()
|
||||
|
||||
depth = depth + 1
|
||||
if math.fmod( depth, 10 ) == 0 then
|
||||
print( "Descended "..depth.." metres." )
|
||||
print( "Descended " .. depth .. " metres." )
|
||||
end
|
||||
|
||||
return true
|
||||
@ -290,8 +290,8 @@ end
|
||||
local alternate = 0
|
||||
local done = false
|
||||
while not done do
|
||||
for n=1,size do
|
||||
for _=1,size-1 do
|
||||
for n = 1, size do
|
||||
for _ = 1, size - 1 do
|
||||
if not tryForwards() then
|
||||
done = true
|
||||
break
|
||||
@ -300,8 +300,8 @@ while not done do
|
||||
if done then
|
||||
break
|
||||
end
|
||||
if n<size then
|
||||
if math.fmod(n + alternate,2) == 0 then
|
||||
if n < size then
|
||||
if math.fmod(n + alternate, 2) == 0 then
|
||||
turnLeft()
|
||||
if not tryForwards() then
|
||||
done = true
|
||||
@ -323,7 +323,7 @@ while not done do
|
||||
end
|
||||
|
||||
if size > 1 then
|
||||
if math.fmod(size,2) == 0 then
|
||||
if math.fmod(size, 2) == 0 then
|
||||
turnRight()
|
||||
else
|
||||
if alternate == 0 then
|
||||
@ -344,13 +344,13 @@ end
|
||||
print( "Returning to surface..." )
|
||||
|
||||
-- Return to where we started
|
||||
goTo( 0,0,0,0,-1 )
|
||||
goTo( 0, 0, 0, 0, -1 )
|
||||
unload( false )
|
||||
goTo( 0,0,0,0,1 )
|
||||
goTo( 0, 0, 0, 0, 1 )
|
||||
|
||||
-- Seal the hole
|
||||
if reseal then
|
||||
turtle.placeDown()
|
||||
end
|
||||
|
||||
print( "Mined "..collected + unloaded.." items total." )
|
||||
print( "Mined " .. collected + unloaded .. " items total." )
|
||||
|
@ -50,7 +50,7 @@ while nArg <= #tArgs do
|
||||
end
|
||||
end
|
||||
else
|
||||
print( "No such direction: "..sDirection )
|
||||
print( "No such direction: " .. sDirection )
|
||||
print( "Try: forward, back, up, down" )
|
||||
return
|
||||
end
|
||||
|
@ -36,7 +36,7 @@ if turtle.getFuelLevel() ~= "unlimited" then
|
||||
end
|
||||
end
|
||||
end
|
||||
print( "Fuel level is "..turtle.getFuelLevel() )
|
||||
print( "Fuel level is " .. turtle.getFuelLevel() )
|
||||
if turtle.getFuelLevel() == turtle.getFuelLimit() then
|
||||
print( "Fuel limit reached" )
|
||||
end
|
||||
|
@ -20,7 +20,7 @@ local collected = 0
|
||||
local function collect()
|
||||
collected = collected + 1
|
||||
if math.fmod(collected, 25) == 0 then
|
||||
print( "Mined "..collected.." items." )
|
||||
print( "Mined " .. collected .. " items." )
|
||||
end
|
||||
end
|
||||
|
||||
@ -67,7 +67,7 @@ local function refuel()
|
||||
end
|
||||
|
||||
local function tryRefuel()
|
||||
for n=1,16 do
|
||||
for n = 1, 16 do
|
||||
if turtle.getItemCount(n) > 0 then
|
||||
turtle.select(n)
|
||||
if turtle.refuel(1) then
|
||||
@ -139,7 +139,7 @@ end
|
||||
|
||||
print( "Tunnelling..." )
|
||||
|
||||
for n=1,length do
|
||||
for n = 1, length do
|
||||
turtle.placeDown()
|
||||
tryDigUp()
|
||||
turtle.turnLeft()
|
||||
@ -153,7 +153,7 @@ for n=1,length do
|
||||
tryDig()
|
||||
turtle.turnLeft()
|
||||
|
||||
if n<length then
|
||||
if n < length then
|
||||
tryDig()
|
||||
if not tryForward() then
|
||||
print( "Aborting Tunnel." )
|
||||
@ -183,4 +183,4 @@ turtle.turnRight()
|
||||
]]
|
||||
|
||||
print( "Tunnel complete." )
|
||||
print( "Mined "..collected.." items total." )
|
||||
print( "Mined " .. collected .. " items total." )
|
||||
|
@ -31,11 +31,11 @@ while nArg <= #tArgs do
|
||||
|
||||
local fnHandler = tHandlers[string.lower(sDirection)]
|
||||
if fnHandler then
|
||||
for _=1,nDistance do
|
||||
for _ = 1, nDistance do
|
||||
fnHandler( nArg )
|
||||
end
|
||||
else
|
||||
print( "No such direction: "..sDirection )
|
||||
print( "No such direction: " .. sDirection )
|
||||
print( "Try: left, right" )
|
||||
return
|
||||
end
|
||||
|
@ -14,7 +14,7 @@ if #tArgs ~= 1 then
|
||||
end
|
||||
|
||||
local function unequip( fnEquipFunction )
|
||||
for nSlot=1,16 do
|
||||
for nSlot = 1, 16 do
|
||||
local nOldCount = turtle.getItemCount( nSlot )
|
||||
if nOldCount == 0 then
|
||||
turtle.select( nSlot )
|
||||
|
@ -3,24 +3,24 @@ local completion = require "cc.shell.completion"
|
||||
-- Setup paths
|
||||
local sPath = ".:/rom/programs"
|
||||
if term.isColor() then
|
||||
sPath = sPath..":/rom/programs/advanced"
|
||||
sPath = sPath .. ":/rom/programs/advanced"
|
||||
end
|
||||
if turtle then
|
||||
sPath = sPath..":/rom/programs/turtle"
|
||||
sPath = sPath .. ":/rom/programs/turtle"
|
||||
else
|
||||
sPath = sPath..":/rom/programs/rednet:/rom/programs/fun"
|
||||
sPath = sPath .. ":/rom/programs/rednet:/rom/programs/fun"
|
||||
if term.isColor() then
|
||||
sPath = sPath..":/rom/programs/fun/advanced"
|
||||
sPath = sPath .. ":/rom/programs/fun/advanced"
|
||||
end
|
||||
end
|
||||
if pocket then
|
||||
sPath = sPath..":/rom/programs/pocket"
|
||||
sPath = sPath .. ":/rom/programs/pocket"
|
||||
end
|
||||
if commands then
|
||||
sPath = sPath..":/rom/programs/command"
|
||||
sPath = sPath .. ":/rom/programs/command"
|
||||
end
|
||||
if http then
|
||||
sPath = sPath..":/rom/programs/http"
|
||||
sPath = sPath .. ":/rom/programs/http"
|
||||
end
|
||||
shell.setPath( sPath )
|
||||
help.setPath( "/rom/help" )
|
||||
@ -121,7 +121,7 @@ if fs.exists( "/rom/autorun" ) and fs.isDir( "/rom/autorun" ) then
|
||||
local tFiles = fs.list( "/rom/autorun" )
|
||||
for _, sFile in ipairs( tFiles ) do
|
||||
if string.sub( sFile, 1, 1 ) ~= "." then
|
||||
local sPath = "/rom/autorun/"..sFile
|
||||
local sPath = "/rom/autorun/" .. sFile
|
||||
if not fs.isDir( sPath ) then
|
||||
shell.run( sPath )
|
||||
end
|
||||
@ -142,7 +142,7 @@ local function findStartups( sBaseDir )
|
||||
if tStartups == nil then
|
||||
tStartups = {}
|
||||
end
|
||||
for _,v in pairs( fs.list( sBasePath ) ) do
|
||||
for _, v in pairs( fs.list( sBasePath ) ) do
|
||||
local sPath = "/" .. fs.combine( sBasePath, v )
|
||||
if not fs.isDir( sPath ) then
|
||||
tStartups[ #tStartups + 1 ] = sPath
|
||||
@ -163,7 +163,7 @@ if settings.get( "shell.allow_startup" ) then
|
||||
tUserStartups = findStartups( "/" )
|
||||
end
|
||||
if settings.get( "shell.allow_disk_startup" ) then
|
||||
for _,sName in pairs( peripheral.getNames() ) do
|
||||
for _, sName in pairs( peripheral.getNames() ) do
|
||||
if disk.isPresent( sName ) and disk.hasData( sName ) then
|
||||
local startups = findStartups( disk.getMountPath( sName ) )
|
||||
if startups then
|
||||
@ -174,7 +174,7 @@ if settings.get( "shell.allow_disk_startup" ) then
|
||||
end
|
||||
end
|
||||
if tUserStartups then
|
||||
for _,v in pairs( tUserStartups ) do
|
||||
for _, v in pairs( tUserStartups ) do
|
||||
shell.run( v )
|
||||
end
|
||||
end
|
||||
|
@ -11,19 +11,19 @@
|
||||
|
||||
--- Assert an argument to the given function has the specified type.
|
||||
--
|
||||
-- @tparam string The function's name
|
||||
-- @tparam int The argument index to this function
|
||||
-- @tparam string The type this argument should have. May be 'value' for any
|
||||
-- non-nil value.
|
||||
-- @param val The value to check
|
||||
-- @raise If this value doesn't match the expected type.
|
||||
local function check(func, arg, ty, val)
|
||||
-- @tparam string func The function's name
|
||||
-- @tparam int idx The argument index to this function
|
||||
-- @tparam string ty The type this argument should have. May be 'value' for
|
||||
-- any non-nil value.
|
||||
-- @param val val The value to check
|
||||
-- @throws If this value doesn't match the expected type.
|
||||
local function check(func, idx, ty, val)
|
||||
if ty == 'value' then
|
||||
if val == nil then
|
||||
error(('%s: bad argument #%d (got nil)'):format(func, arg), 3)
|
||||
error(('%s: bad argument #%d (got nil)'):format(func, idx), 3)
|
||||
end
|
||||
elseif type(val) ~= ty then
|
||||
return error(('%s: bad argument #%d (expected %s, got %s)'):format(func, arg, ty, type(val)), 3)
|
||||
return error(('%s: bad argument #%d (expected %s, got %s)'):format(func, idx, ty, type(val)), 3)
|
||||
end
|
||||
end
|
||||
|
||||
@ -122,7 +122,7 @@ local error_mt = { __tostring = function(self) return self.message end }
|
||||
--- Attempt to execute the provided function, gathering a stack trace when it
|
||||
-- errors.
|
||||
--
|
||||
-- @tparam
|
||||
-- @tparam function() fn The function to run
|
||||
-- @return[1] true
|
||||
-- @return[2] false
|
||||
-- @return[2] The error object
|
||||
@ -170,7 +170,7 @@ end
|
||||
--- Fail a test with the given message
|
||||
--
|
||||
-- @tparam string message The message to fail with
|
||||
-- @raises An error with the given message
|
||||
-- @throws An error with the given message
|
||||
local function fail(message)
|
||||
check('fail', 1, 'string', message)
|
||||
error(setmetatable({ message = message, fail = true }, error_mt))
|
||||
@ -192,7 +192,7 @@ expect_mt.__index = expect_mt
|
||||
--- Assert that this expectation has the provided value
|
||||
--
|
||||
-- @param value The value to require this expectation to be equal to
|
||||
-- @raises If the values are not equal
|
||||
-- @throws If the values are not equal
|
||||
function expect_mt:equals(value)
|
||||
if value ~= self.value then
|
||||
fail(("Expected %s\n but got %s"):format(format(value), format(self.value)))
|
||||
@ -206,7 +206,7 @@ expect_mt.eq = expect_mt.equals
|
||||
--- Assert that this expectation does not equal the provided value
|
||||
--
|
||||
-- @param value The value to require this expectation to not be equal to
|
||||
-- @raises If the values are equal
|
||||
-- @throws If the values are equal
|
||||
function expect_mt:not_equals(value)
|
||||
if value == self.value then
|
||||
fail(("Expected any value but %s"):format(format(value)))
|
||||
@ -220,7 +220,7 @@ expect_mt.ne = expect_mt.not_equals
|
||||
--- Assert that this expectation has something of the provided type
|
||||
--
|
||||
-- @tparam string exp_type The type to require this expectation to have
|
||||
-- @raises If it does not have that thpe
|
||||
-- @throws If it does not have that thpe
|
||||
function expect_mt:type(exp_type)
|
||||
local actual_type = type(self.value)
|
||||
if exp_type ~= actual_type then
|
||||
@ -270,7 +270,7 @@ end
|
||||
-- the provided object.
|
||||
--
|
||||
-- @param value The value to check for structural equivalence
|
||||
-- @raises If they are not equivalent
|
||||
-- @throws If they are not equivalent
|
||||
function expect_mt:same(value)
|
||||
if not matches({}, true, self.value, value) then
|
||||
fail(("Expected %s\n but got %s"):format(format(value), format(self.value)))
|
||||
@ -283,7 +283,7 @@ end
|
||||
-- in the provided object.
|
||||
--
|
||||
-- @param value The value to check against
|
||||
-- @raises If this does not match the provided value
|
||||
-- @throws If this does not match the provided value
|
||||
function expect_mt:matches(value)
|
||||
if not matches({}, false, value, self.value) then
|
||||
fail(("Expected %s\nto match %s"):format(format(self.value), format(value)))
|
||||
@ -296,7 +296,7 @@ end
|
||||
--
|
||||
-- @tparam[opt] number The exact number of times the function must be called.
|
||||
-- If not given just require the function to be called at least once.
|
||||
-- @raises If this function was not called the expected number of times.
|
||||
-- @throws If this function was not called the expected number of times.
|
||||
function expect_mt:called(times)
|
||||
if getmetatable(self.value) ~= stub_mt or self.value.arguments == nil then
|
||||
fail(("Expected stubbed function, got %s"):format(type(self.value)))
|
||||
@ -380,7 +380,7 @@ local expect = setmetatable( {
|
||||
-- @return The new expectation
|
||||
__call = function(_, value)
|
||||
return setmetatable({ value = value }, expect_mt)
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
--- The stack of "describe"s.
|
||||
@ -623,7 +623,7 @@ end
|
||||
-- And some summary statistics
|
||||
local actual_count = tests_run - test_status.pending
|
||||
local info = ("Ran %s test(s), of which %s passed (%g%%).")
|
||||
:format(actual_count, test_status.pass, (test_status.pass / actual_count) * 100)
|
||||
:format(actual_count, test_status.pass, test_status.pass / actual_count * 100)
|
||||
|
||||
if test_status.pending > 0 then
|
||||
info = info .. (" Skipped %d pending test(s)."):format(test_status.pending)
|
||||
|
@ -2,7 +2,7 @@ describe("The gps library", function()
|
||||
describe("gps.locate", function()
|
||||
it("validates arguments", function()
|
||||
stub(_G, "commands", { getBlockPosition = function()
|
||||
end })
|
||||
end, })
|
||||
|
||||
gps.locate()
|
||||
gps.locate(1)
|
||||
|
@ -60,10 +60,10 @@ describe("The io library", function()
|
||||
|
||||
expect(io.output():seek()):equal(0)
|
||||
assert(io.write("alo alo"))
|
||||
expect(io.output():seek()):equal(#("alo alo"))
|
||||
expect(io.output():seek("cur", -3)):equal(#("alo alo") - 3)
|
||||
expect(io.output():seek()):equal(#"alo alo")
|
||||
expect(io.output():seek("cur", -3)):equal(#"alo alo" - 3)
|
||||
assert(io.write("joao"))
|
||||
expect(io.output():seek("end"):equal(#("alo joao")))
|
||||
expect(io.output():seek("end"):equal(#"alo joao"))
|
||||
|
||||
expect(io.output():seek("set")):equal(0)
|
||||
|
||||
|
@ -70,7 +70,7 @@ describe("The Lua base library", function()
|
||||
|
||||
it("does not prefix for unnamed chunks", function()
|
||||
local info = debug.getinfo(loadstring("return 1"), "S")
|
||||
expect(info):matches { short_src = '[string "return 1"]', source = "return 1", }
|
||||
expect(info):matches { short_src = '[string "return 1"]', source = "return 1" }
|
||||
end)
|
||||
|
||||
it("does not prefix when already prefixed", function()
|
||||
|
@ -5,7 +5,7 @@ describe("cc.shell.completion", function()
|
||||
it("completes both", function()
|
||||
expect(c.dirOrFile(shell, "rom/")):same {
|
||||
"apis/", "apis", "autorun/", "autorun", "help/", "help",
|
||||
"modules/", "modules", "motd.txt", "programs/", "programs", "startup.lua"
|
||||
"modules/", "modules", "motd.txt", "programs/", "programs", "startup.lua",
|
||||
}
|
||||
end)
|
||||
|
||||
|
@ -10,7 +10,7 @@ describe("The commands program", function()
|
||||
it("lists commands", function()
|
||||
local pagedTabulate = stub(textutils, "pagedTabulate", function(x) print(table.unpack(x)) end)
|
||||
stub(_G, "commands", {
|
||||
list = function() return { "computercraft" } end
|
||||
list = function() return { "computercraft" } end,
|
||||
})
|
||||
|
||||
expect(capture(stub, "/rom/programs/command/commands.lua"))
|
||||
|
@ -15,7 +15,7 @@ describe("The exec program", function()
|
||||
|
||||
it("runs a command", function()
|
||||
stub(_G, "commands", {
|
||||
exec = function() return true, {"Hello World!"} end
|
||||
exec = function() return true, {"Hello World!"} end,
|
||||
})
|
||||
|
||||
expect(capture(stub, "/rom/programs/command/exec.lua computercraft"))
|
||||
@ -23,8 +23,8 @@ describe("The exec program", function()
|
||||
end)
|
||||
|
||||
it("reports command failures", function()
|
||||
stub(_G,"commands",{
|
||||
exec = function() return false, {"Hello World!"} end
|
||||
stub(_G, "commands", {
|
||||
exec = function() return false, {"Hello World!"} end,
|
||||
})
|
||||
|
||||
expect(capture(stub, "/rom/programs/command/exec.lua computercraft"))
|
||||
|
@ -1,5 +1,4 @@
|
||||
local capture = require "test_helpers".capture_program
|
||||
local testFile = require "test_helpers".testFile
|
||||
|
||||
describe("The edit program", function()
|
||||
|
||||
|
@ -17,7 +17,7 @@ describe("The pastebin program", function()
|
||||
local tHeader = {}
|
||||
tHeader["Content-Type"] = "text/plain; charset=utf-8"
|
||||
return tHeader
|
||||
end
|
||||
end,
|
||||
}
|
||||
end,
|
||||
post = function()
|
||||
@ -28,7 +28,7 @@ describe("The pastebin program", function()
|
||||
close = function()
|
||||
end,
|
||||
}
|
||||
end
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
|
@ -14,7 +14,7 @@ describe("The wget program", function()
|
||||
close = function()
|
||||
end,
|
||||
}
|
||||
end
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
|
@ -6,6 +6,6 @@ describe("The id program", function()
|
||||
local id = os.getComputerID()
|
||||
|
||||
expect(capture(stub, "id"))
|
||||
:matches { ok = true, output = "This is computer #"..id.."\n", error = "" }
|
||||
:matches { ok = true, output = "This is computer #" .. id .. "\n", error = "" }
|
||||
end)
|
||||
end)
|
||||
|
@ -3,10 +3,10 @@ local capture = require "test_helpers".capture_program
|
||||
describe("The motd program", function()
|
||||
|
||||
it("displays MODT", function()
|
||||
local file = fs.open("/modt_check.txt","w")
|
||||
local file = fs.open("/modt_check.txt", "w")
|
||||
file.write("Hello World!")
|
||||
file.close()
|
||||
settings.set("motd.path","/modt_check.txt")
|
||||
settings.set("motd.path", "/modt_check.txt")
|
||||
|
||||
expect(capture(stub, "motd"))
|
||||
:matches { ok = true, output = "Hello World!\n", error = "" }
|
||||
|
@ -9,7 +9,7 @@ describe("The pocket equip program", function()
|
||||
|
||||
it("can equip an upgrade", function()
|
||||
stub(_G, "pocket", {
|
||||
equipBack = function() return true end
|
||||
equipBack = function() return true end,
|
||||
})
|
||||
|
||||
expect(capture(stub, "/rom/programs/pocket/equip.lua"))
|
||||
@ -18,7 +18,7 @@ describe("The pocket equip program", function()
|
||||
|
||||
it("handles when an upgrade cannot be equipped", function()
|
||||
stub(_G, "pocket", {
|
||||
equipBack = function() return false, "Cannot equip this item." end
|
||||
equipBack = function() return false, "Cannot equip this item." end,
|
||||
})
|
||||
|
||||
expect(capture(stub, "/rom/programs/pocket/equip.lua"))
|
||||
|
@ -9,7 +9,7 @@ describe("The pocket unequip program", function()
|
||||
|
||||
it("unequips an upgrade", function()
|
||||
stub(_G, "pocket", {
|
||||
unequipBack = function() return true end
|
||||
unequipBack = function() return true end,
|
||||
})
|
||||
|
||||
expect(capture(stub, "/rom/programs/pocket/unequip.lua"))
|
||||
@ -18,7 +18,7 @@ describe("The pocket unequip program", function()
|
||||
|
||||
it("handles when an upgrade cannot be equipped", function()
|
||||
stub(_G, "pocket", {
|
||||
unequipBack = function() return false, "Nothing to remove." end
|
||||
unequipBack = function() return false, "Nothing to remove." end,
|
||||
})
|
||||
|
||||
expect(capture(stub, "/rom/programs/pocket/unequip.lua"))
|
||||
|
@ -4,8 +4,8 @@ describe("The set program", function()
|
||||
|
||||
it("displays all settings", function()
|
||||
settings.clear()
|
||||
settings.set("Test","Hello World!")
|
||||
settings.set("123",456)
|
||||
settings.set("Test", "Hello World!")
|
||||
settings.set("123", 456)
|
||||
|
||||
expect(capture(stub, "set"))
|
||||
:matches { ok = true, output = '"123" is 456\n"Test" is "Hello World!"\n', error = "" }
|
||||
@ -13,8 +13,8 @@ describe("The set program", function()
|
||||
|
||||
it("displays a single settings", function()
|
||||
settings.clear()
|
||||
settings.set("Test","Hello World!")
|
||||
settings.set("123",456)
|
||||
settings.set("Test", "Hello World!")
|
||||
settings.set("123", 456)
|
||||
|
||||
expect(capture(stub, "set Test"))
|
||||
:matches { ok = true, output = '"Test" is "Hello World!"\n', error = "" }
|
||||
|
@ -7,6 +7,6 @@ describe("The time program", function()
|
||||
local day = os.day()
|
||||
|
||||
expect(capture(stub, "time"))
|
||||
:matches { ok = true, output = "The time is "..time.." on Day "..day.."\n", error = "" }
|
||||
:matches { ok = true, output = "The time is " .. time .. " on Day " .. day .. "\n", error = "" }
|
||||
end)
|
||||
end)
|
||||
|
@ -39,7 +39,7 @@ describe("The craft program", function()
|
||||
|
||||
it("craft a single item", function()
|
||||
local item_count = 2
|
||||
stub(_G,"turtle",{
|
||||
stub(_G, "turtle", {
|
||||
craft = function()
|
||||
item_count = 1
|
||||
return true
|
||||
@ -54,7 +54,7 @@ describe("The craft program", function()
|
||||
|
||||
it("crafts no items", function()
|
||||
local item_count = 2
|
||||
stub(_G,"turtle",{
|
||||
stub(_G, "turtle", {
|
||||
craft = function()
|
||||
item_count = 1
|
||||
return false
|
||||
|
@ -29,7 +29,7 @@ describe("The turtle equip program", function()
|
||||
end)
|
||||
|
||||
it("swaps existing upgrades", function()
|
||||
stub(_G,"turtle",{
|
||||
stub(_G, "turtle", {
|
||||
select = function() end,
|
||||
getItemCount = function() return 1 end,
|
||||
equipLeft = function() return true end,
|
||||
@ -45,7 +45,7 @@ describe("The turtle equip program", function()
|
||||
describe("equips a new upgrade", function()
|
||||
local function setup()
|
||||
local item_count = 1
|
||||
stub(_G,"turtle",{
|
||||
stub(_G, "turtle", {
|
||||
select = function() end,
|
||||
getItemCount = function() return item_count end,
|
||||
equipLeft = function()
|
||||
@ -73,7 +73,7 @@ describe("The turtle equip program", function()
|
||||
end)
|
||||
|
||||
it("handles when an upgrade cannot be equipped", function()
|
||||
stub(_G,"turtle",{
|
||||
stub(_G, "turtle", {
|
||||
select = function() end,
|
||||
getItemCount = function() return 1 end,
|
||||
equipLeft = function() return false end,
|
||||
|
@ -17,7 +17,7 @@ describe("The refuel program", function()
|
||||
end,
|
||||
getFuelLimit = function()
|
||||
return fuel_limit
|
||||
end
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
@ -49,13 +49,13 @@ describe("The refuel program", function()
|
||||
end)
|
||||
|
||||
it("reports when the fuel limit is reached", function()
|
||||
setup_turtle(0,5,5)
|
||||
setup_turtle(0, 5, 5)
|
||||
expect(capture(stub, "/rom/programs/turtle/refuel.lua 5"))
|
||||
:matches { ok = true, output = "Fuel level is 5\nFuel limit reached\n", error = "" }
|
||||
end)
|
||||
|
||||
it("reports when the fuel level is unlimited", function()
|
||||
setup_turtle("unlimited",5,5)
|
||||
setup_turtle("unlimited", 5, 5)
|
||||
expect(capture(stub, "/rom/programs/turtle/refuel.lua 5"))
|
||||
:matches { ok = true, output = "Fuel level is unlimited\n", error = "" }
|
||||
end)
|
||||
|
@ -17,11 +17,11 @@ describe("The turtle unequip program", function()
|
||||
end)
|
||||
|
||||
it("says when nothing was unequipped", function()
|
||||
stub(_G,"turtle",{
|
||||
stub(_G, "turtle", {
|
||||
select = function() end,
|
||||
getItemCount = function() return 0 end,
|
||||
equipRight = function() return true end,
|
||||
equipLeft = function() return true end
|
||||
equipLeft = function() return true end,
|
||||
})
|
||||
|
||||
expect(capture(stub, "/rom/programs/turtle/unequip.lua left"))
|
||||
@ -32,7 +32,7 @@ describe("The turtle unequip program", function()
|
||||
|
||||
it("unequips a upgrade", function()
|
||||
local item_count = 0
|
||||
stub(_G,"turtle",{
|
||||
stub(_G, "turtle", {
|
||||
select = function() end,
|
||||
getItemCount = function() return item_count end,
|
||||
equipRight = function()
|
||||
@ -42,7 +42,7 @@ describe("The turtle unequip program", function()
|
||||
equipLeft = function()
|
||||
item_count = 1
|
||||
return true
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
expect(capture(stub, "/rom/programs/turtle/unequip.lua left"))
|
||||
@ -53,11 +53,11 @@ describe("The turtle unequip program", function()
|
||||
end)
|
||||
|
||||
it("fails when the turtle is full", function()
|
||||
stub(_G,"turtle",{
|
||||
stub(_G, "turtle", {
|
||||
select = function() end,
|
||||
getItemCount = function() return 1 end,
|
||||
equipRight = function() return true end,
|
||||
equipLeft = function() return true end
|
||||
equipLeft = function() return true end,
|
||||
})
|
||||
|
||||
expect(capture(stub, "/rom/programs/turtle/unequip.lua left"))
|
||||
|
@ -37,7 +37,7 @@ local function capture_program(stub, program, ...)
|
||||
output = table.concat(output),
|
||||
error = table.concat(error),
|
||||
combined = table.concat(combined),
|
||||
ok = ok
|
||||
ok = ok,
|
||||
}
|
||||
end
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user