View difference between Paste ID: 5BUnGkUJ and vsSv0iB9
SHOW: | | - or go back to the newest paste.
1
--[[
2
SUPER Dodge!!
3-
inc = function(a)
3+
A remake of that last game I made. Mostly an experiment with cool background.
4
Get with
5
 pastebin get 5BUnGkUJ dodge2
6
And soon
7
 std ld dodge2 dodge2
8-
renderBG = function(scroll)
8+
9-
  local ivl = 5 --interval
9+
This game isn't finished, but it is certainly playable.
10-
  term.setBackgroundColor(colors.black)
10+
11-
  term.clear()
11+
...you fool!
12-
  term.setBackgroundColor(colors.blue)
12+
--]]
13-
  term.setCursorPos(1,(scr_y/2)-4)
13+
14-
  term.clearLine() inc(1)
14+
local sprite = {}
15-
  term.clearLine() inc(1)
15+
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,},}
16-
  term.setBackgroundColor(colors.cyan)
16+
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,},}
17-
  term.clearLine() inc(1)
17+
sprite.guy = {{2,0,8192,32,32,0},{16384,8192,8192,32,2048,32},{2,0,8192,32,32,0}}
18-
  term.setBackgroundColor(colors.lightBlue)
18+
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,}}
19-
  term.clearLine() inc(1)
19+
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,}}
20-
  term.setBackgroundColor(colors.cyan)
20+
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}}
21-
  term.clearLine() inc(1)
21+
22-
  term.setBackgroundColor(colors.blue)
22+
local gm = {
23-
  term.clearLine() inc(1)
23+
	x = 2,
24-
  term.clearLine() inc(1)
24+
	y = math.floor(scr_y/2),
25-
  -- good god that was inefficient
25+
	score = 0,
26-
  local pos = 1
26+
	hiscore = 0,
27-
  while pos <= scr_x do
27+
	deaths = 0,
28-
    
28+
}
29-
  end
29+
local walls = {}
30
31
local keysDown = {}
32
33
local inc = function(a)
34
  local x,y = term.getCursorPos()
35
  term.setCursorPos(x,y+a)
36
end
37
38
local addWall = function()
39
	table.insert(walls,{x=scr_x,y=math.random(4,scr_y-4)})
40
end
41
42
local moveWalls
43
moveWalls = function()
44
	for k,v in pairs(walls) do
45
		if walls[k] then
46
			walls[k].x = walls[k].x - 1
47
			if walls[k].x <= -5 then
48
				walls[k] = nil
49
				moveWalls()
50
				break
51
			end
52
		end
53
	end
54
end
55
56
local renderBG = function(scroll,bgscroll)
57
	local ivl = 5 --interval
58
	local skew = 2
59
	term.setBackgroundColor(colors.black)
60
	term.clear()
61
	local pos = (ivl - scroll) + 1
62
	while pos <= scr_x do
63
		local endpos = ((pos-(scr_x/2))*(skew))+(scr_x/2)
64
		local midpos = ((pos-(scr_x/2))*(skew*0.8))+(scr_x/2) -- skew*0.75 is perfect lines
65
 		paintutils.drawLine(endpos, scr_y,      midpos, scr_y*0.75, colors.cyan) --render bottom
66
		paintutils.drawLine(midpos, scr_y*0.75, pos   , scr_y*0.5,  colors.lightBlue) --render bottom
67
		paintutils.drawLine(endpos, 1,          midpos, scr_y*0.25, colors.cyan) --render top
68
		paintutils.drawLine(midpos, scr_y*0.25, pos,    scr_y*0.5,  colors.lightBlue) --render top
69
		pos = pos + ivl
70
	end
71
	for x = 1-bgscroll, scr_x, 18 do
72
		paintutils.drawImage(sprite.bg,x,1)
73
	end
74
end
75
local gap = 6
76
local t = term.current().setVisible
77
78
local checkCollision = function()
79
	for k,v in pairs(walls) do
80
		if gm.x >= v.x-3 and gm.x <= v.x+3 then --intentionally allowed front and back to touch wall
81
			if math.abs((gm.y+1) - v.y) >= (gap/2)-1 then
82
				return false
83
			end
84
		end
85
	end
86
	return true
87
end
88
89
local render = function(scroll,bgscroll)
90
	if t then t(false) end
91
	renderBG(scroll,bgscroll)
92
	paintutils.drawImage(sprite.guy,gm.x,gm.y)
93
	
94
	for k,v in pairs(walls) do
95
		paintutils.drawImage(sprite.uw,v.x,v.y+(gap/2))
96
		paintutils.drawImage(sprite.dw,v.x,(v.y-(gap/2))-scr_y)
97
	end
98
	
99
	term.setCursorPos(2,1)
100
	term.setBackgroundColor(colors.black)
101
	term.clearLine()
102
	write("SCORE: "..gm.score.."  ")
103
	if t then t(true) end
104
end
105
106
local game = function()
107
	local scroll = 1
108
	local frame = 0
109
	local maxframe = 32
110
	local bgscroll = 0
111
	while true do
112
		render(math.floor(scroll),math.floor(bgscroll))
113
		scroll = scroll + 0.5
114
		frame = frame + 1
115
		bgscroll = bgscroll + 2
116
		if scroll % 5 == 0 then
117
			scroll = 0
118
		end
119
		if frame == maxframe then
120
			addWall()
121
			frame = 1
122
		end
123
		if bgscroll % 18 == 0 then
124
			bgscroll = 0
125
		end
126
		moveWalls()
127
		
128
		if keysDown[keys.up] and gm.y > 2 then
129
			gm.y = gm.y - 1
130
		end
131
		if keysDown[keys.down] and gm.y < scr_y-3 then
132
			gm.y = gm.y + 1
133
		end
134
		local isHit = not checkCollision()
135
		if isHit then
136
			return
137
		end
138
		gm.score = gm.score + 1
139
		if gm.hiscore < gm.score then --conglaturations
140
			gm.hiscore = gm.score
141
		end
142
		sleep(0)
143
	end
144
end
145
146
local getInput = function()
147
	while true do
148
		local evt, key = os.pullEvent()
149
		if evt == "key" then
150
			keysDown[key] = true
151
		elseif evt == "key_up" then
152
			keysDown[key] = false
153
		end
154
		if key == keys.q then
155
			return
156
		end
157
	end
158
end
159
160
local cleanExit = function()
161
	term.setBackgroundColor(colors.black)
162
	term.setTextColor(colors.white)
163
	term.clear()
164
	term.setCursorPos(1,1)
165
	print("Thanks for playing!")
166
	if t then t(true) end
167
	sleep(0.05)
168
end
169
170
local showTitle = function()
171
	if gm.deaths == 0 then
172
		local x = -38
173
		local y = scr_y
174
		repeat
175
			y = y - 1
176
			x = x + 2
177
			if t then t(false) end
178
			term.setBackgroundColor(colors.black)
179
			term.clear()
180
			paintutils.drawImage(sprite.guybig,math.floor(x),math.floor(y))
181
			if t then t(true) end
182
			sleep(0)
183
		until y <= -24
184
	end
185
	term.setBackgroundColor(colors.white)
186
	term.clear()
187
	sleep(0)
188
	term.setBackgroundColor(colors.black)
189
	term.clear()
190
	paintutils.drawImage(sprite.title,3,2)
191
	sleep(0.1)
192
	term.setCursorPos(4,scr_y)
193
	term.setTextColor(colors.white)
194
	term.setBackgroundColor(colors.black)
195
	term.write("PUSH ANY KEY TO NEXT")
196
	term.setCursorPos(2,1)
197
	write("TOP: "..gm.hiscore.." | LAST: "..gm.score)
198
	os.pullEvent("char")
199
end
200
201
while true do
202
	showTitle()
203
	walls = {}
204
	gm.y = math.floor(scr_y/2)
205
	gm.score = 0
206
	keysDown = {}
207
	local res = parallel.waitForAny(getInput,game)
208
	if res == 2 then
209
		gm.deaths = gm.deaths + 1
210
	else
211
		cleanExit()
212
		break
213
	end
214
end