-
Notifications
You must be signed in to change notification settings - Fork 5
/
j1.p8
254 lines (227 loc) · 5.81 KB
/
j1.p8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
pico-8 cartridge // http://www.pico-8.com
version 15
__lua__
t=0
function unpack_f(a)
local t={}
for i=1,count(a),2 do
for j=1,a[i+1] do
add(t,a[i])
end
end
return t
end
l={
{ -- level 1
},
{ -- level 2
{k="s",x=80,y=120},
},
{ -- level 3
{k="s",x=40,y=120},
{k="s",x=90,y=120},
},
{ -- level 4
{k="s",x=60,y=100},
{k="b",x1=20,x2=40,y1=110,y2=120},
{k="b",x1=40,x2=130,y1=100,y2=120},
},
}
n=1
function s_init(s)
s.f=100
end
function s_up(s)
s.f-=1
if (s.f<-8) s.f=50+rnd(40)
end
function s_draw(s)
if (s.f>=0) spr(32,s.x-4,s.y-8)
end
function b_init(b)
b.xm=(b.x1+b.x2)/2
b.ym=(b.y1+b.y2)/2
end
function b_dist_x(b,px)
return min(b.x2,px+4)-max(b.x1,px-4)
end
function b_dist_y(b,py)
return min(b.y2,py)-max(b.y1,py-8)
end
function b_up(b)
local dx=b_dist_x(b,p.lx)
if (dx<-abs(p.x-p.lx)) return
local dy=b_dist_y(b,p.ly)
if (dy<-abs(p.y-p.ly)) return
local px=p.lx
local py=p.ly
while abs(px-p.x)>0 or abs(py-p.y)>0 do
dx=b_dist_x(b,px)
dy=b_dist_y(b,py)
if dx>=0 and dy>=0 then
if dx<dy then
if (p.vx>0 and px<b.xm) then
p.x=b.x1-4
p.vx=0
end
if (p.vx<0 and px>=b.xm) then
p.x=b.x2+4
p.vx=0
end
else
if (p.vy>0 and py<b.ym) then
p.y=b.y1
p.vy=0
p.c=1
end
if (p.vy<0 and py>=b.ym) then
p.y=b.y2+8
p.vy=0
end
end
end
if (px<p.x) px=min(px+1,p.x)
if (px>p.x) px=max(px-1,p.x)
if (py<p.y) py=min(py+1,p.y)
if (py>p.y) py=min(py-1,p.y)
end
end
function b_draw(b)
-- rect(b.x1,b.y1,b.x2,b.y2)
end
p={}
function p_init()
p.s=0 p.f=1 p.c=0
p.vx=0 p.vy=0
if n==1 then
p.x=64 p.y=64
p_en_run()
else
p.x=8 p.y=120
p_en_stand()
end
p.lx=p.x p.ly=p.y
end
p_stand_f=unpack_f({
16,8,
17,3,
18,5,
17,5,
})
function p_en_stand()
p.s=0 p.f=1
end
function p_up_stand()
p.f+=1
if (p.f==#p_stand_f) p.f=1
if (btn(➡️)) return p_en_run()
if (btn(⬅️)) return p_en_run()
if (btn(⬆️)) return p_en_run()
end
function p_draw_stand()
spr(p_stand_f[p.f],p.x-4,p.y-8)
end
p_run_f=unpack_f({
18,3,
19,3,
20,5,
19,3,
})
function p_en_run()
p.s=1 p.f=1
p.vx=0 p.vy=0
end
function p_up_run()
p.f+=1
if (p.f==#p_run_f) p.f=1
-- position backup
p.lx=p.x
p.ly=p.y
-- x velocity
if (p.vx<0) p.vx+=0.5
if (p.vx>0) p.vx-=0.5
if (btn(➡️)) p.vx+=1
if (btn(⬅️)) p.vx-=1
if (p.vx>3) p.vx=3
if (p.vx<-3) p.vx=-3
p.x+=p.vx
if (p.x<4) p.x=4
-- y velocity
if (p.y==120 or p.c>0) then
if (btn(⬆️)) p.vy=-6
end
p.c=0
p.vy+=1
if (p.vy>5) p.vy=5
p.y+=p.vy
if (p.y>120) then
p.y=120
p.vy=0
end
if (p.vx==0 and p.y==120) return p_en_stand()
if (p.x>128) return next_level()
end
function p_draw_run()
spr(p_run_f[p.f],p.x-4,p.y-8,1,1,p.vx<0,false)
end
function p_up()
if (p.s==0) p_up_stand()
if (p.s==1) p_up_run()
end
function p_draw()
if (p.s==0) p_draw_stand()
if (p.s==1) p_draw_run()
end
function next_level()
n+=1
l_init()
end
function l_init()
p_init()
for o in all(l[n]) do
if (o.k=="s") s_init(o)
if (o.k=="b") b_init(o)
end
end
function _init()
l_init()
end
function _update()
t+=1
if (t==2) t=0
// if (t!=0) return
p_up()
for o in all(l[n]) do
if (o.k=="s") s_up(o)
if (o.k=="b") b_up(o)
end
end
function _draw()
cls()
p_draw()
for o in all(l[n]) do
if (o.k=="s") s_draw(o)
if (o.k=="b") b_draw(o)
end
end
__gfx__
00088000000880000008800000088000000880000008800000088000000880000008800000088000000000000000000000000000000000000000000000000000
00844800008448000084480000844800008448000084480000844800008448000084480000844800000000000000000000000000000000000000000000000000
00044000000440000004400000044000000440000004400000044000000440000004400000044000000000000000000000000000000000000000000000000000
00055000060550600005500000055000000550000005500000055000000550000005500000055000000000000000000000000000000000000000000000000000
000d5600006d56000005500000055000000550000005500000055000000550000005500000055000000000000000000000000000000000000000000000000000
0066f0000009f0000005500000055000000550000005500000055000000550000005500000055000000000000000000000000000000000000000000000000000
0009a0000999aaa00009aa000009a0000099a0000009a000000a9900000a900000aa90000009a000000000000000000000000000000000000000000000000000
0099aa000000000000900000000900000000a0000000a00000a0000000009000000090000000a000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00070700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000707000000707000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000007070000707000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000