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 |