ComputerCraft Archive

sdodge

computer utility LDDestroier github

Description

A collection of all my ComputerCraft programs and the APIs they use. This is mostly just to get them the fuck off of pastebin, and also to ensure that API owners don't change things to break my precious programs...!

Installation

Copy one of these commands into your ComputerCraft terminal:

wget:wget https://raw.githubusercontent.com/LDDestroier/CC/master/sdodge.lua sdodge
Archive:wget https://cc.shobie.xyz/cc/get/gh-LDDestroier-CC-sdodge sdodge
Quick Install: wget https://cc.shobie.xyz/cc/get/gh-LDDestroier-CC-sdodge sdodge

Usage

Run: sdodge

Tags

none

Source

View Original Source

Code Preview

--[[
SUPER Dodge!!
A remake of that last game I made. Mostly an experiment with cool background.
Get with
 pastebin get 5BUnGkUJ dodge2
And soon
 std ld dodge2 dodge2

This game isn't finished, but it is certainly playable.

...you fool!
--]]
local scr_x, scr_y = term.getSize()
local sprite = {}
sprite.dw = {{128,128,128,128,128,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,128,256,256,128,128,},{0,16384,16384,16384,16384,0,},{16384,2,2,2,2,16384,},{16384,2,2,16,16,16384,},{16384,16,16,16,2,16384,},{0,16384,16384,16384,16384,0,},}
sprite.uw = {{0,16384,16384,16384,16384,0,},{16384,16,16,2,2,16384,},{16384,16,2,2,2,16384,},{16384,2,2,16,16,16384,},{0,16384,16384,16384,16384,0,},{128,128,256,256,128,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,256,256,256,256,128,},{128,128,128,128,128,128,},}
sprite.guy = {{2,0,8192,32,32,0},{16384,8192,8192,32,2048,32},{2,0,8192,32,32,0}}
sprite.guybig = {{},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,32,32768,32768,32,32,32,32,32,32,32,},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32768,8,8,32768,32,32,32,32,32,32,},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,32,32,32,0,8,8,8,8,32768,32,32,32,32,0,},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32768,8,8,8,32768,32,32,32,32,32,0,},{0,0,0,0,0,0,0,0,0,0,0,0,0,8192,8192,8192,32,32,32,32,32,32,32,32,32,32,32,32,32768,32768,32768,32,32,32,32,32,0,0,},{0,0,0,0,0,0,0,0,0,0,0,0,0,8192,8192,8192,8192,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,0,},{0,0,0,0,0,0,0,0,0,0,0,0,0,8192,8192,8192,8192,8192,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,0,0,},{0,0,0,0,0,0,0,0,0,0,0,0,8192,8192,8192,8192,8192,8192,8192,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,0,0,0,},{0,0,0,0,0,0,0,0,0,0,0,0,8192,8192,8192,8192,8192,8192,8192,8192,8192,32,32,32,32,32,32,32,32,32,32,32,32,0,0,0,0,0,},{0,0,0,0,0,0,0,0,0,0,0,0,0,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,32,32,32,32,32,32,32,0,0,0,0,0,0,},{0,0,0,0,0,0,0,0,0,0,0,0,256,256,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,0,0,0,0,0,0,0,0,},{0,0,0,0,0,0,0,0,0,0,0,256,256,256,256,256,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,0,0,0,0,0,0,0,0,0,},{0,0,0,0,0,0,0,0,0,0,0,2,2048,256,256,256,256,8192,8192,8192,8192,8192,8192,8192,8192,8192,8192,0,0,0,0,0,0,0,0,0,0,0,},{0,0,0,0,0,0,2,2,2,2,2,2,2048,2048,2048,256,256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},{0,0,0,0,2,2,2,2,2,2,16,16,16,16,16,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},{0,0,0,2,2,2,2,2,2,16,16,16,16,16,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},{0,0,0,0,0,0,2,2,2,2,16,16,16,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},{0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},{0,0,0,0,0,2,0,0,0,2,2,2,2,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},{0,0,0,0,0,0,0,0,0,2,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,}}
sprite.title = {{1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,},{1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,},{1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,},{1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,},{0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,},{0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,},{1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,},{1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,},{},{8,8,8,8,8,0,0,0,0,8,8,8,8,8,0,0,8,8,8,8,8,0,0,0,0,8,8,8,8,0,0,8,8,8,8,8,8,},{8,8,8,8,8,8,0,0,8,8,8,8,8,8,8,0,8,8,8,8,8,8,0,0,8,8,8,8,8,8,0,8,8,8,8,8,8,},{8,8,0,0,8,8,8,0,8,8,0,0,0,8,8,0,8,8,0,0,8,8,8,0,8,8,0,0,8,8,0,8,8,0,0,0,0,},{8,8,0,0,0,8,8,0,8,8,0,0,0,8,8,0,8,8,0,0,0,8,8,0,8,8,0,0,0,0,0,8,8,8,8,8,0,},{8,8,0,0,0,8,8,0,8,8,0,0,0,8,8,0,8,8,0,0,0,8,8,0,8,8,0,8,8,8,0,8,8,0,0,0,0,},{8,8,0,0,8,8,8,0,8,8,0,0,0,8,8,0,8,8,0,0,8,8,8,0,8,8,0,0,8,8,0,8,8,0,0,0,0,},{8,8,8,8,8,8,0,0,8,8,8,8,8,8,8,0,8,8,8,8,8,8,0,0,8,8,8,8,8,8,0,8,8,8,8,8,8,},{8,8,8,8,8,0,0,0,0,8,8,8,8,8,0,0,8,8,8,8,8,0,0,0,0,8,8,8,8,0,0,8,8,8,8,8,8,}}
sprite.bg = {{32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768},{32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768},{4096,32768,32768,32768,32768,32768,32768,32768,32768,4096,4096,4096,4096,4096,4096,4096,4096,4096},{4096,4096,4096,4096,4096,4096,4096,4096,4096,4096,0,0,0,0,0,0,0,0},{},{},{},{},{},{},{},{},{},{},{},{4096,4096,4096,4096,4096,4096,4096,4096,4096,4096,0,0,0,0,0,0,0,0},{4096,32768,32768,32768,32768,32768,32768,32768,32768,4096,4096,4096,4096,4096,4096,4096,4096,4096},{32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768},{32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768}}

local gm = {
	x = 2,
	y = math.floor(scr_y/2),
	score = 0,
	hiscore = 0,
	deaths = 0,
}
local walls = {}

local keysDown = {}

local inc = function(a)
  local x,y = term.getCursorPos()
  term.setCursorPos(x,y+a)
end

local addWall = function()
	table.insert(walls,{x=scr_x,y=math.random(4,scr_y-4)})
end

local moveWalls
moveWalls = function()
	for k,v in pairs(walls) do
		if walls[k] then
			walls[k].x = walls[k].x - 1
			if walls[k].x <= -5 then
				walls[k] = nil
				moveWalls()
				break
			end
		end
	end
end

local renderBG = function(scroll,bgscroll)
	local ivl = 5 --interval
	local skew = 2
	term.setBackgroundColor(colors.black)
	term.clear()
	local pos = (ivl - scroll) + 1
	while pos <= scr_x do
		local endpos = ((pos-(scr_x/2))*(skew))+(scr_x/2)
		local midpos = ((pos-(scr_x/2))*(skew*0.8))+(scr_x/2) -- skew*0.75 is perfect lines
 		paintutils.drawLine(endpos, scr_y,      midpos, scr_y*0.75, colors.cyan) --render bottom
		paintutils.drawLine(midpos, scr_y*0.75, pos   , scr_y*0.5,  colors.lightBlue) --render bottom
		paintutils.drawLine(endpos, 1,          midpos, scr_y*0.25, colors.cyan) --render top
		paintutils.drawLine(midpos, scr_y*0.25, pos,    scr_y*0.5,  colors.lightBlue) --render top
		pos = pos + ivl
	end
	for x = 1-bgscroll, scr_x, 18 do
		paintutils.drawImage(sprite.bg,x,1)
	end
end
local gap = 6
local t = term.current().setVisible

local checkCollision = function()
	for k,v in pairs(walls) do
		if gm.x >= v.x-3 and gm.x <= v.x+3 then --intentionally allowed front and back to touch wall
			if math.abs((gm.y+1) - v.y) >= (gap/2)-1 then
				return false
			end
		end
	end
	return true
end

local render = function(scroll,bgscroll)
	if t then t(false) end
	renderBG(scroll,bgscroll)
	paintutils.drawImage(sprite.guy,gm.x,gm.y)
	
	for k,v in pairs(walls) do
		paintutils.drawImage(sprite.uw,v.x,v.y+(gap/2))
		paintutils.drawImage(sprite.dw,v.x,(v.y-(gap/2))-scr_y)
	end
	
	term.setCursorPos(2,1)
	term.setBackgroundColor(colors.black)
	term.clearLine()
	write("SCORE: "..gm.score.."  ")
	if t then t(true) end
end

local game = function()
	local scroll = 1
	local frame = 0
	local maxframe = 32
	local bgscroll = 0
	while true do
		render(math.floor(scroll),math.floor(bgscroll))
		scroll = scroll + 0.5
		frame = frame + 1
		bgscroll = bgscroll + 2
		if scroll % 5 == 0 then
			scroll = 0
		end
		if frame == maxframe then
			addWall()
			frame = 1
		end
		if bgscroll % 18 == 0 then
			bgscroll = 0
		end
		moveWalls()
		
		if keysDown[keys.up] and gm.y > 2 then
			gm.y = gm.y - 1
		end
		if keysDown[keys.down] and gm.y < scr_y-3 then
			gm.y = gm.y + 1
		end
		local isHit = not checkCollision()
		if isHit then
			return
		end
		gm.score = gm.score + 1
		if gm.hiscore < gm.score then --conglaturations
			gm.hiscore = gm.score
		end
		sleep(0.05)
	end
end

local getInput = function()
	while true do
		local evt, key = os.pullEvent()
		if evt == "key" then
			keysDown[key] = true
		elseif evt == "key_up" then
			keysDown[key] = false
		end
		if key == keys.q then
			return
		end
	end
end

local cleanExit = function()
	term.setBackgroundColor(colors.black)
	term.setTextColor(colors.white)
	term.clear()
	term.setCursorPos(1,1)
	print("Thanks for playing!")
	if t then t(true) end
	sleep(0.05)
end

local showTitle = function()
	if gm.deaths == 0 then
		local x = -38
		local y = scr_y
		repeat
			y = y - 1
			x = x + 2
			if t then t(false) end
			term.setBackgroundColor(colors.black)
			term.clear()
			paintutils.drawImage(sprite.guybig,math.floor(x),math.floor(y))
			if t then t(true) end
			sleep(0.05)
		until y <= -24
	end
	term.setBackgroundColor(colors.white)
	term.clear()
	sleep(0.05)
	term.setBackgroundColor(colors.black)
	term.clear()
	paintutils.drawImage(sprite.title,3,2)
	sleep(0.1)
	term.setCursorPos(4,scr_y)
	term.setTextColor(colors.white)
	term.setBackgroundColor(colors.black)
	term.write("PUSH ANY KEY TO NEXT")
	term.setCursorPos(2,1)
	write("TOP: "..gm.hiscore.." | LAST: "..gm.score)
	os.pullEvent("char")
end

while true do
	showTitle()
	walls = {}
	gm.y = math.floor(scr_y/2)
	gm.score = 0
	keysDown = {}
	local res = parallel.waitForAny(getInput,game)
	if res == 2 then
		gm.deaths = gm.deaths + 1
	else
		cleanExit()
		break
	end
end