Compare commits
3 Commits
b0256d7ae3
...
43512c90c7
Author | SHA1 | Date | |
---|---|---|---|
43512c90c7 | |||
4d7f25c027 | |||
2d7f65d7fb |
BIN
source/assets/audio/confirm.wav
Normal file
47
source/assets/fonts/Play Girls.fnt
Normal file
@ -0,0 +1,47 @@
|
||||
--metrics={"baseline":7,"xHeight":0,"capHeight":0,"pairs":{},"left":[],"right":[]}
|
||||
datalen=1136
|
||||
data=iVBORw0KGgoAAAANSUhEUgAAADgAAAAwCAYAAABE1blzAAAAAXNSR0IArs4c6QAAAw1JREFUaEPlV1ty4zAMa+5/6HaaRhkGxoOSnTiZ9qPdtWRTJEEAunz9/Xzf/tY/F/Js7MO19H5aH6HqvhGDvTv2uz3Xtd9feGgWBItQE2RJ12dpnSU3zlbjsoKr9XtMTBCrxRKpwWMAUkD3Tio4Q5hC1XUvS5AFwSqnamIRHAQxYYUohRoF4Q1EK67TrK3Mp4P1bzycJ1XEVJCH9dqtDu6PSpzNKOE0yhHTCXZZVM3nLpZrMnViYbnuYMAq+nHPEKKYQNSZ2wupwjOFqfNY30vjQc+uGHNGx7o610lSaXDSQyzKgw5i4FWaTuKfEmSHrAhK8kXjK8t1hBVTWsgSRcSs6vPGCHSqvgJB6y4gQzW/yTLi2WMH0xAnJ9EploIpJuOkpxqS6pCWE+zo5BEs6jrpRilatTT8r1wfRKOkYvosHZ2zFRJ3SeZrlRVLCHHwVbedO8ENtkpsKnWmCD37BtI8Cvee+C3DvydAlYFaAAYvt672q++Pju9KkIl/uu5sNKg8QJg7inc66WJQt/NuHVSFcC7H+tVnJMi0ybHi0yE6w2IMIk6U8bbC5obFr4XfzaLT2vJJLyRTrTqA5rhDMF2rxzyoc0rTTkaZ65a5Fd1lBUmsnDQ0ych1vaUlN7cyE5DJzDhQ53bS0dWnJDhz43CuRdE+86KrLHvvYLJhKKCdDnSMgoI8fr+bIMa8fp/p4FEzOGPPcK+DH3MsUmfVbUK5dNyPLMuqmDruWHP2trPhFCW8nyR19qyuA6qL44Pd9a7T6c4kWkE7o4r6UbeUIeh4WTWLlTHrzI0ZY+PgmJma7mclqGDTYcTVBKmZOCLBZNZZ1Wm1y0PHqqwAddQe/t1lKTWriqScIXBwx/mq/+84l1q4uw5iRbrCvmLdViDaJRU6s9gZNdjIhEguzu1jF5BQGMQdMtiaNBX/SgeZruHwsplIOneqaZhJQBWAeUM216ckymau6x07bHhKUhsqvT1gppfpFSMJRedvkyB1AeR0iuYdfE9NsjODq07EdfplSc8kqCD89iz6smqeEegH9dmYQMkYMS4AAAAASUVORK5CYII=
|
||||
width=8
|
||||
height=8
|
||||
|
||||
tracking=1
|
||||
|
||||
0 8
|
||||
1 8
|
||||
2 8
|
||||
3 8
|
||||
4 8
|
||||
5 8
|
||||
6 8
|
||||
7 8
|
||||
8 8
|
||||
9 8
|
||||
space 8
|
||||
<EFBFBD> 8
|
||||
A 8
|
||||
B 8
|
||||
C 8
|
||||
D 8
|
||||
E 8
|
||||
F 8
|
||||
G 8
|
||||
H 8
|
||||
I 8
|
||||
J 8
|
||||
K 8
|
||||
L 8
|
||||
M 8
|
||||
N 8
|
||||
O 8
|
||||
P 8
|
||||
R 8
|
||||
Q 8
|
||||
S 8
|
||||
T 8
|
||||
U 8
|
||||
V 8
|
||||
W 8
|
||||
X 8
|
||||
Y 8
|
||||
Z 8
|
||||
|
105
source/assets/fonts/diamond_20.fnt
Normal file
408
source/assets/fonts/onyx_9.fnt
Normal file
@ -0,0 +1,408 @@
|
||||
--metrics={"baseline":8,"xHeight":0,"capHeight":0,"pairs":{"Fc":[-2,1],"Fe":[-2,1],"Fo":[-2,1],"Fm":[-2,1],"Fn":[-2,1],"Fr":[-2,1],"Fu":[-2,1],"Fw":[-2,1],"Jc":[-1,1],"Je":[-1,1],"Jo":[-1,1],"Jm":[-1,1],"Jn":[-1,1],"Jr":[-1,1],"Ju":[-1,1],"Jw":[-1,1],"Tc":[-2,1],"Te":[-2,1],"To":[-2,1],"Tm":[-2,1],"Tn":[-2,1],"Tr":[-2,1],"Tu":[-2,1],"Tw":[-2,1],"Yc":[-1,1],"Ye":[-1,1],"Yo":[-1,1],"Ym":[-1,1],"Yn":[-1,1],"Yr":[-1,1],"<22>B":[-1,1],"<22>D":[-1,1],"<22>E":[-1,1],"<22>F":[-1,1],"<22>H":[-1,1],"<22>K":[-1,1],"<22>L":[-1,1],"<22>M":[-1,1],"<22>N":[-1,1],"<22>P":[-1,1],"<22>R":[-1,1],"<22>b":[-1,1],"<22>h":[-1,1],"<22>k":[-1,1],"<22>C":[-1,1],"<22>G":[-1,1],"<22>O":[-1,1],"<22>Q":[-1,1],"<22>U":[-1,1],"<22>W":[-1,1],"<22>l":[-1,1],"<22>c":[-1,1],"<22>e":[-1,1],"<22>o":[-1,1],"<22>m":[-1,1],"<22>n":[-1,1],"<22>r":[-1,1],"<22>u":[-1,1],"<22>w":[-1,1],"H<>":[-1,2],"M<>":[-1,2],"N<>":[-1,2],"d<>":[-1,2],"U<>":[-1,2],"V<>":[-1,2],"W<>":[-1,2],"aT":[-2,2],"aY":[-1,2],"a<>":[-1,2],"mT":[-2,2],"mY":[-1,2],"m<>":[-1,2],"nT":[-2,2],"nY":[-1,2],"n<>":[-1,2],"qT":[-2,2],"qY":[-1,2],"q<>":[-1,2],"gT":[-2,2],"gY":[-1,2],"g<>":[-1,2],"oT":[-2,2],"oY":[-1,2],"o<>":[-1,2],"wT":[-2,2],"w<>":[-1,2],"yT":[-2,2],"y<>":[-1,2],"A<>":[-1,0],"B<>":[-1,0],"C<>":[-1,0],"DI":[-1,0],"DT":[-1,0],"D<>":[-1,0],"E<>":[-1,0],"FJ":[-1,0],"Fa":[-3,0],"Fd":[-2,0],"Ff":[-1,0],"Fg":[-2,0],"Fj":[-4,0],"Fp":[-2,0],"Fq":[-2,0],"Fs":[-2,0],"Ft":[-1,0],"Fv":[-2,0],"Fx":[-2,0],"Fy":[-2,0],"Fz":[-2,0],"F<>":[-1,0],"G<>":[-1,0],"If":[-1,0],"Ig":[-1,0],"Iq":[-1,0],"Is":[-1,0],"It":[-1,0],"Iv":[-1,0],"Iy":[-1,0],"I<>":[-1,0],"JJ":[-1,0],"Ja":[-1,0],"Jd":[-1,0],"Jf":[-1,0],"Jg":[-1,0],"Jj":[-1,0],"Jp":[-1,0],"Jq":[-1,0],"Js":[-1,0],"Jt":[-1,0],"Jv":[-1,0],"Jx":[-1,0],"Jy":[-1,0],"Jz":[-1,0],"J<>":[-1,0],"Kf":[-1,0],"Kg":[-1,0],"Kq":[-2,0],"Ks":[-1,0],"Kt":[-1,0],"Kv":[-1,0],"Ky":[-1,0],"K<>":[-1,0],"LT":[-2,0],"LV":[-2,0],"LY":[-2,0],"Lf":[-1,0],"Lg":[-1,0],"Lq":[-4,0],"Ls":[-1,0],"Lt":[-1,0],"Lv":[-2,0],"Ly":[-1,0],"L<>":[-1,0],"O<>":[-1,0],"PJ":[-1,0],"Pa":[-1,0],"Pj":[-1,0],"P<>":[-1,0],"Q<>":[-1,0],"R<>":[-1,0],"S<>":[-1,0],"TJ":[-1,0],"Ta":[-2,0],"Td":[-2,0],"Tf":[-1,0],"Tg":[-2,0],"Tj":[-2,0],"Tp":[-2,0],"Tq":[-2,0],"Ts":[-2,0],"Tt":[-1,0],"Tv":[-2,0],"Tx":[-2,0],"Ty":[-2,0],"Tz":[-2,0],"T<>":[-1,0],"Xf":[-1,0],"Xg":[-1,0],"Xq":[-1,0],"Xs":[-1,0],"X<>":[-1,0],"YJ":[-1,0],"Ya":[-1,0],"Yd":[-1,0],"Yf":[-1,0],"Yg":[-1,0],"Yj":[-2,0],"Yq":[-1,0],"Ys":[-1,0],"Y<>":[-1,0],"Zf":[-1,0],"Zg":[-1,0],"Zq":[-1,0],"Zs":[-1,0],"Z<>":[-1,0],"bT":[-2,0],"bY":[-1,0],"bt":[-1,0],"b<>":[-1,0],"cT":[-2,0],"cY":[-1,0],"c<>":[-1,0],"eI":[-1,0],"eT":[-2,0],"eY":[-1,0],"e<>":[-1,0],"f<>":[-1,0],"hT":[-2,0],"hY":[-1,0],"ht":[-1,0],"h<>":[-1,0],"iT":[-1,0],"iV":[-1,0],"iY":[-1,0],"if":[-1,0],"ig":[-1,0],"iq":[-1,0],"is":[-1,0],"it":[-1,0],"iv":[-1,0],"iy":[-1,0],"i<>":[-1,0],"j<>":[-1,0],"kT":[-2,0],"kV":[-1,0],"kY":[-1,0],"kf":[-1,0],"kg":[-1,0],"kq":[-1,0],"ks":[-1,0],"kt":[-1,0],"kv":[-1,0],"ky":[-1,0],"k<>":[-1,0],"lT":[-1,0],"lV":[-1,0],"lY":[-1,0],"lf":[-1,0],"lg":[-1,0],"lq":[-1,0],"ls":[-1,0],"lt":[-1,0],"lv":[-1,0],"ly":[-1,0],"l<>":[-1,0],"pI":[-1,0],"pT":[-2,0],"pX":[-1,0],"pY":[-1,0],"pZ":[-1,0],"p<>":[-1,0],"rI":[-1,0],"rT":[-2,0],"rX":[-1,0],"rY":[-1,0],"rZ":[-1,0],"r<>":[-1,0],"sT":[-2,0],"sY":[-1,0],"ss":[-1,0],"st":[-1,0],"sv":[-1,0],"s<>":[-1,0],"tT":[-2,0],"t<>":[-1,0],"uT":[-2,0],"u<>":[-1,0],"vI":[-1,0],"vJ":[-1,0],"vT":[-2,0],"vZ":[-1,0],"va":[-1,0],"vj":[-1,0],"v<>":[-1,0],"xT":[-2,0],"xf":[-1,0],"x<>":[-1,0],"zT":[-2,0],"z<>":[-1,0],"<22>A":[-1,0],"<22>I":[-1,0],"<22>J":[-1,0],"<22>S":[-1,0],"<22>T":[-1,0],"<22>V":[-1,0],"<22>X":[-1,0],"<22>Y":[-1,0],"<22>Z":[-1,0],"<22>a":[-1,0],"<22>d":[-1,0],"<22>f":[-1,0],"<22>g":[-1,0],"<22>i":[-1,0],"<22>j":[-1,0],"<22>p":[-1,0],"<22>q":[-1,0],"<22>s":[-1,0],"<22>t":[-1,0],"<22>v":[-1,0],"<22>x":[-1,0],"<22>y":[-1,0],"<22>z":[-1,0],"<22><>":[-2,0]},"left":["BDEFHKLMNPRbhk","CGOQ","UWl","ceo","mnr","uw"],"right":["HMNd","UVW","amnq","go","wy"]}
|
||||
datalen=2384
|
||||
data=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
|
||||
width=8
|
||||
height=9
|
||||
|
||||
tracking=1
|
||||
|
||||
0 6
|
||||
1 4
|
||||
2 6
|
||||
3 6
|
||||
4 6
|
||||
5 6
|
||||
6 6
|
||||
7 6
|
||||
8 6
|
||||
9 6
|
||||
space 4
|
||||
! 3
|
||||
" 6
|
||||
# 6
|
||||
$ 6
|
||||
% 6
|
||||
& 6
|
||||
' 3
|
||||
( 4
|
||||
) 4
|
||||
* 6
|
||||
+ 6
|
||||
, 3
|
||||
- 6
|
||||
. 2
|
||||
/ 5
|
||||
: 2
|
||||
; 3
|
||||
< 5
|
||||
= 5
|
||||
> 5
|
||||
? 6
|
||||
@ 6
|
||||
A 6
|
||||
B 6
|
||||
C 6
|
||||
D 6
|
||||
E 6
|
||||
F 6
|
||||
G 6
|
||||
H 6
|
||||
I 4
|
||||
J 6
|
||||
K 6
|
||||
L 6
|
||||
M 6
|
||||
N 6
|
||||
O 6
|
||||
P 6
|
||||
Q 6
|
||||
R 6
|
||||
S 6
|
||||
T 6
|
||||
U 6
|
||||
V 6
|
||||
W 6
|
||||
X 6
|
||||
Y 6
|
||||
Z 6
|
||||
[ 4
|
||||
\ 5
|
||||
] 4
|
||||
^ 5
|
||||
_ 6
|
||||
` 3
|
||||
a 6
|
||||
b 6
|
||||
c 6
|
||||
d 6
|
||||
e 6
|
||||
f 6
|
||||
g 6
|
||||
h 6
|
||||
i 3
|
||||
j 6
|
||||
k 6
|
||||
l 3
|
||||
m 6
|
||||
n 6
|
||||
o 6
|
||||
p 6
|
||||
q 6
|
||||
r 6
|
||||
s 6
|
||||
t 6
|
||||
u 6
|
||||
v 6
|
||||
w 6
|
||||
x 6
|
||||
y 6
|
||||
z 6
|
||||
{ 4
|
||||
| 2
|
||||
} 4
|
||||
~ 6
|
||||
<EFBFBD> 8
|
||||
|
||||
Fc -2
|
||||
Fe -2
|
||||
Fo -2
|
||||
Fm -2
|
||||
Fn -2
|
||||
Fr -2
|
||||
Fu -2
|
||||
Fw -2
|
||||
Jc -1
|
||||
Je -1
|
||||
Jo -1
|
||||
Jm -1
|
||||
Jn -1
|
||||
Jr -1
|
||||
Ju -1
|
||||
Jw -1
|
||||
Tc -2
|
||||
Te -2
|
||||
To -2
|
||||
Tm -2
|
||||
Tn -2
|
||||
Tr -2
|
||||
Tu -2
|
||||
Tw -2
|
||||
Yc -1
|
||||
Ye -1
|
||||
Yo -1
|
||||
Ym -1
|
||||
Yn -1
|
||||
Yr -1
|
||||
<EFBFBD>B -1
|
||||
<EFBFBD>D -1
|
||||
<EFBFBD>E -1
|
||||
<EFBFBD>F -1
|
||||
<EFBFBD>H -1
|
||||
<EFBFBD>K -1
|
||||
<EFBFBD>L -1
|
||||
<EFBFBD>M -1
|
||||
<EFBFBD>N -1
|
||||
<EFBFBD>P -1
|
||||
<EFBFBD>R -1
|
||||
<EFBFBD>b -1
|
||||
<EFBFBD>h -1
|
||||
<EFBFBD>k -1
|
||||
<EFBFBD>C -1
|
||||
<EFBFBD>G -1
|
||||
<EFBFBD>O -1
|
||||
<EFBFBD>Q -1
|
||||
<EFBFBD>U -1
|
||||
<EFBFBD>W -1
|
||||
<EFBFBD>l -1
|
||||
<EFBFBD>c -1
|
||||
<EFBFBD>e -1
|
||||
<EFBFBD>o -1
|
||||
<EFBFBD>m -1
|
||||
<EFBFBD>n -1
|
||||
<EFBFBD>r -1
|
||||
<EFBFBD>u -1
|
||||
<EFBFBD>w -1
|
||||
H<EFBFBD> -1
|
||||
M<EFBFBD> -1
|
||||
N<EFBFBD> -1
|
||||
d<EFBFBD> -1
|
||||
U<EFBFBD> -1
|
||||
V<EFBFBD> -1
|
||||
W<EFBFBD> -1
|
||||
aT -2
|
||||
aY -1
|
||||
a<EFBFBD> -1
|
||||
mT -2
|
||||
mY -1
|
||||
m<EFBFBD> -1
|
||||
nT -2
|
||||
nY -1
|
||||
n<EFBFBD> -1
|
||||
qT -2
|
||||
qY -1
|
||||
q<EFBFBD> -1
|
||||
gT -2
|
||||
gY -1
|
||||
g<EFBFBD> -1
|
||||
oT -2
|
||||
oY -1
|
||||
o<EFBFBD> -1
|
||||
wT -2
|
||||
w<EFBFBD> -1
|
||||
yT -2
|
||||
y<EFBFBD> -1
|
||||
A<EFBFBD> -1
|
||||
B<EFBFBD> -1
|
||||
C<EFBFBD> -1
|
||||
DI -1
|
||||
DT -1
|
||||
D<EFBFBD> -1
|
||||
E<EFBFBD> -1
|
||||
FJ -1
|
||||
Fa -3
|
||||
Fd -2
|
||||
Ff -1
|
||||
Fg -2
|
||||
Fj -4
|
||||
Fp -2
|
||||
Fq -2
|
||||
Fs -2
|
||||
Ft -1
|
||||
Fv -2
|
||||
Fx -2
|
||||
Fy -2
|
||||
Fz -2
|
||||
F<EFBFBD> -1
|
||||
G<EFBFBD> -1
|
||||
If -1
|
||||
Ig -1
|
||||
Iq -1
|
||||
Is -1
|
||||
It -1
|
||||
Iv -1
|
||||
Iy -1
|
||||
I<EFBFBD> -1
|
||||
JJ -1
|
||||
Ja -1
|
||||
Jd -1
|
||||
Jf -1
|
||||
Jg -1
|
||||
Jj -1
|
||||
Jp -1
|
||||
Jq -1
|
||||
Js -1
|
||||
Jt -1
|
||||
Jv -1
|
||||
Jx -1
|
||||
Jy -1
|
||||
Jz -1
|
||||
J<EFBFBD> -1
|
||||
Kf -1
|
||||
Kg -1
|
||||
Kq -2
|
||||
Ks -1
|
||||
Kt -1
|
||||
Kv -1
|
||||
Ky -1
|
||||
K<EFBFBD> -1
|
||||
LT -2
|
||||
LV -2
|
||||
LY -2
|
||||
Lf -1
|
||||
Lg -1
|
||||
Lq -4
|
||||
Ls -1
|
||||
Lt -1
|
||||
Lv -2
|
||||
Ly -1
|
||||
L<EFBFBD> -1
|
||||
O<EFBFBD> -1
|
||||
PJ -1
|
||||
Pa -1
|
||||
Pj -1
|
||||
P<EFBFBD> -1
|
||||
Q<EFBFBD> -1
|
||||
R<EFBFBD> -1
|
||||
S<EFBFBD> -1
|
||||
TJ -1
|
||||
Ta -2
|
||||
Td -2
|
||||
Tf -1
|
||||
Tg -2
|
||||
Tj -2
|
||||
Tp -2
|
||||
Tq -2
|
||||
Ts -2
|
||||
Tt -1
|
||||
Tv -2
|
||||
Tx -2
|
||||
Ty -2
|
||||
Tz -2
|
||||
T<EFBFBD> -1
|
||||
Xf -1
|
||||
Xg -1
|
||||
Xq -1
|
||||
Xs -1
|
||||
X<EFBFBD> -1
|
||||
YJ -1
|
||||
Ya -1
|
||||
Yd -1
|
||||
Yf -1
|
||||
Yg -1
|
||||
Yj -2
|
||||
Yq -1
|
||||
Ys -1
|
||||
Y<EFBFBD> -1
|
||||
Zf -1
|
||||
Zg -1
|
||||
Zq -1
|
||||
Zs -1
|
||||
Z<EFBFBD> -1
|
||||
bT -2
|
||||
bY -1
|
||||
bt -1
|
||||
b<EFBFBD> -1
|
||||
cT -2
|
||||
cY -1
|
||||
c<EFBFBD> -1
|
||||
eI -1
|
||||
eT -2
|
||||
eY -1
|
||||
e<EFBFBD> -1
|
||||
f<EFBFBD> -1
|
||||
hT -2
|
||||
hY -1
|
||||
ht -1
|
||||
h<EFBFBD> -1
|
||||
iT -1
|
||||
iV -1
|
||||
iY -1
|
||||
if -1
|
||||
ig -1
|
||||
iq -1
|
||||
is -1
|
||||
it -1
|
||||
iv -1
|
||||
iy -1
|
||||
i<EFBFBD> -1
|
||||
j<EFBFBD> -1
|
||||
kT -2
|
||||
kV -1
|
||||
kY -1
|
||||
kf -1
|
||||
kg -1
|
||||
kq -1
|
||||
ks -1
|
||||
kt -1
|
||||
kv -1
|
||||
ky -1
|
||||
k<EFBFBD> -1
|
||||
lT -1
|
||||
lV -1
|
||||
lY -1
|
||||
lf -1
|
||||
lg -1
|
||||
lq -1
|
||||
ls -1
|
||||
lt -1
|
||||
lv -1
|
||||
ly -1
|
||||
l<EFBFBD> -1
|
||||
pI -1
|
||||
pT -2
|
||||
pX -1
|
||||
pY -1
|
||||
pZ -1
|
||||
p<EFBFBD> -1
|
||||
rI -1
|
||||
rT -2
|
||||
rX -1
|
||||
rY -1
|
||||
rZ -1
|
||||
r<EFBFBD> -1
|
||||
sT -2
|
||||
sY -1
|
||||
ss -1
|
||||
st -1
|
||||
sv -1
|
||||
s<EFBFBD> -1
|
||||
tT -2
|
||||
t<EFBFBD> -1
|
||||
uT -2
|
||||
u<EFBFBD> -1
|
||||
vI -1
|
||||
vJ -1
|
||||
vT -2
|
||||
vZ -1
|
||||
va -1
|
||||
vj -1
|
||||
v<EFBFBD> -1
|
||||
xT -2
|
||||
xf -1
|
||||
x<EFBFBD> -1
|
||||
zT -2
|
||||
z<EFBFBD> -1
|
||||
<EFBFBD>A -1
|
||||
<EFBFBD>I -1
|
||||
<EFBFBD>J -1
|
||||
<EFBFBD>S -1
|
||||
<EFBFBD>T -1
|
||||
<EFBFBD>V -1
|
||||
<EFBFBD>X -1
|
||||
<EFBFBD>Y -1
|
||||
<EFBFBD>Z -1
|
||||
<EFBFBD>a -1
|
||||
<EFBFBD>d -1
|
||||
<EFBFBD>f -1
|
||||
<EFBFBD>g -1
|
||||
<EFBFBD>i -1
|
||||
<EFBFBD>j -1
|
||||
<EFBFBD>p -1
|
||||
<EFBFBD>q -1
|
||||
<EFBFBD>s -1
|
||||
<EFBFBD>t -1
|
||||
<EFBFBD>v -1
|
||||
<EFBFBD>x -1
|
||||
<EFBFBD>y -1
|
||||
<EFBFBD>z -1
|
||||
<EFBFBD><EFBFBD> -2
|
549
source/assets/fonts/opal_12.fnt
Normal file
598
source/assets/fonts/opal_9.fnt
Normal file
105
source/assets/fonts/peridot_7.fnt
Normal file
@ -0,0 +1,105 @@
|
||||
--metrics={"baseline":5,"xHeight":0,"capHeight":0,"pairs":{},"left":[],"right":[]}
|
||||
datalen=1708
|
||||
data=iVBORw0KGgoAAAANSUhEUgAAAEYAAABQCAYAAACkoQMCAAAAAXNSR0IArs4c6QAABLlJREFUeF7tW9Fy2zAMW/7/o7PLVvVoGSBAym6dnPuSayRRJEgRsNw+/vz/eX59Pr4+48drDH2frcvsZbbHujFn3pfZ7a6jMbw2HoGjTV3AGHjo+/jdPK6SwBKkwB7rsv02YwOYl+EIklsxA3E3szFDqCpi5pnN4Sso7u8kz2MqwTtfZjBUhtGGWRazCmCgjj3s7IZ2oFqBXZGxxFgmsmMSgYpOHdFjWJBVP50eurPpnFlUsh//3Q0MSfENTBMYp1kpqq409CgdMu2kmqxLEjQ+VTFdYGbBNTe3jJarbNWZL+XICjCqAbPsK8ZyWTDTMzLwMAHup4BRwbNxVTGMQrsVmvnZ0lIKGGXUcQgJNaR645FQVaP8Pr3HdCtGrVsBXNk+ZLyK/CGbvoORG5hEx2TXAL+V3DOOWsnmykPkmaBVROHww2E01JQhEcT7GDRBCTGHrqvHtZRZIzste1ermFYQC+DQxDsXVY5WMXz7ntIp+ahxsipduTTb2K2WeUVqV8BanXt4pa0AsxrMpdffwJg6Bk3LnoY7Y4rpmM1sXXds9K4dI7P3LUgboIdBtj4TjWePIa1SvfTavGFUbPHacH4TEHVQZQyKqvDyj1VulojZv5jcbAzGoCqmS9XxOPx0pXUrZuPnrGOqGiHrByq71Qx3+4iichjDzUoJK11aT/yWc3fFmDqmcj9LNcDELlnzRY1y9J757Kt7o47+iTFsisR5iFTNCz3gjTVorZIF0acZjAgakgeZL6UxdR+DjCmNkVWSsjcDiqoEVcbhonGlYo5wRmkOtkdVGylBuatiBUymHej5NHqMclQ9krAjirSRagXw2N+sdOuYmiK6K0boGHbmlVZxekW1Ua7ScEWLMe2z+xPWihjLqPcoxmL+VMBGjTz77t+YYqWMec4EpioQs/mun5tDNQu86usHRoVOxWSqmAVaBcwVlLtOoyrG0THZtaHTg5jIU8dajcfjkvmBtA/954kat33g7Juub4FXK2t150t5/msb9RyCvOmsUU3UjdreWwHjUJ29mQkma/gOEcBGGv5RDY1Du87rk2rgTvZWaB4lK/PRkQ47m0x+x+DOAIaB1wpi8UUdPDUKGNVjnOqozrnUUao6//Hzz9IxMeusIV4a3LOAuXTQjnMOKzmNkj3vVNe67OLEtjTH1THoIUzpio5jXWCyo6v8hAQD/zYkRHQGfXZFowMaupZoxaAqpmVU6AoFTKZesyuO7A0maxk0PgXMCIJJaWdDdKSU8kXjTsWMvVjAzO4uvgorHamAj7TV6WVyjQJGNS65AZhweVDeUnh1MtFZoyqmY1OteZuKUccle6jLmrd6GERJWWXB0+h6zqZyNKPWFdpFlK58YXTdYlbn9UmXkplDLu2yJGWUG4+xulKZqX1j13nhpo4S0ynoMQLpjHl9drQdUDNA7Sp2BJ4TjGq47zAOK8Zhp7dgk2IGaHU6gBT3+ozpDjAD1XmuOu+ZgES0eilE5+aLglEPfCwgtQ6OP5/PWN7/bD8eDyeBhwKrKI1VC9IZjF1KQb2AiUDMvx8afWLMudpUma9WTBrblYCZSxf1ksoRy5SmTPiVgJHO/uSEK/aYn4z/8nuVGuPloznQwb/SelBv0W6ASwAAAABJRU5ErkJggg==
|
||||
width=7
|
||||
height=8
|
||||
|
||||
tracking=1
|
||||
|
||||
0 4
|
||||
1 2
|
||||
2 4
|
||||
3 3
|
||||
4 4
|
||||
5 4
|
||||
6 4
|
||||
7 4
|
||||
8 4
|
||||
9 4
|
||||
space 3
|
||||
! 1
|
||||
" 3
|
||||
# 5
|
||||
$ 4
|
||||
% 3
|
||||
& 5
|
||||
' 2
|
||||
( 2
|
||||
) 2
|
||||
* 4
|
||||
+ 3
|
||||
, 2
|
||||
- 3
|
||||
. 1
|
||||
/ 3
|
||||
: 1
|
||||
; 2
|
||||
< 3
|
||||
= 3
|
||||
> 3
|
||||
? 4
|
||||
@ 4
|
||||
A 4
|
||||
B 4
|
||||
C 4
|
||||
D 4
|
||||
E 3
|
||||
F 3
|
||||
G 4
|
||||
H 4
|
||||
I 3
|
||||
J 4
|
||||
K 4
|
||||
L 3
|
||||
M 5
|
||||
N 4
|
||||
O 4
|
||||
P 4
|
||||
Q 4
|
||||
R 4
|
||||
S 4
|
||||
T 3
|
||||
U 4
|
||||
V 4
|
||||
W 5
|
||||
X 5
|
||||
Y 4
|
||||
Z 3
|
||||
[ 2
|
||||
\ 3
|
||||
] 2
|
||||
^ 3
|
||||
_ 4
|
||||
` 2
|
||||
a 4
|
||||
b 4
|
||||
c 3
|
||||
d 4
|
||||
e 4
|
||||
f 2
|
||||
g 4
|
||||
h 4
|
||||
i 1
|
||||
j 2
|
||||
k 3
|
||||
l 1
|
||||
m 5
|
||||
n 4
|
||||
o 4
|
||||
p 4
|
||||
q 4
|
||||
r 3
|
||||
s 4
|
||||
t 2
|
||||
u 4
|
||||
v 4
|
||||
w 5
|
||||
x 4
|
||||
y 4
|
||||
z 4
|
||||
{ 3
|
||||
| 1
|
||||
} 3
|
||||
~ 4
|
||||
<EFBFBD> 7
|
||||
|
BIN
source/assets/images/menuBg.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
source/assets/images/solder.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
source/assets/images/unk.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
source/assets/sprites/assemble/1/1.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
source/assets/sprites/assemble/1/2.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
source/assets/sprites/assemble/1/3.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
source/assets/sprites/assemble/1/4.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
source/assets/sprites/assemble/1/5.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
source/assets/sprites/assemble/1/6.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
source/assets/sprites/assemble/1/7.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
source/assets/sprites/assemble/1/8.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
source/assets/sprites/assemble/1/preview.png
Normal file
After Width: | Height: | Size: 384 B |
BIN
source/assets/sprites/assemble/sd.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
source/assets/sprites/bg1.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
source/assets/sprites/buttons/A.png
Normal file
After Width: | Height: | Size: 628 B |
BIN
source/assets/sprites/buttons/B.png
Normal file
After Width: | Height: | Size: 210 B |
BIN
source/assets/sprites/buttons/DOWN.png
Normal file
After Width: | Height: | Size: 203 B |
BIN
source/assets/sprites/buttons/LEFT.png
Normal file
After Width: | Height: | Size: 200 B |
BIN
source/assets/sprites/buttons/RIGHT.png
Normal file
After Width: | Height: | Size: 200 B |
BIN
source/assets/sprites/buttons/UP.png
Normal file
After Width: | Height: | Size: 205 B |
BIN
source/assets/sprites/old1player-table-64-64.png
Normal file
After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 7.8 KiB |
BIN
source/assets/sprites/selectionBg.png
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
source/assets/sprites/selectionBg1.png
Normal file
After Width: | Height: | Size: 4.9 KiB |
BIN
source/assets/sprites/selectionanim-table-40-39.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
@ -1,5 +0,0 @@
|
||||
-- These are example strings.
|
||||
"menuResumeGame" = "Resume"
|
||||
"menuNewGame" = "New Game"
|
||||
"menuOptions" = "Options"
|
||||
"menuCredits" = "Credits"
|
@ -1,5 +0,0 @@
|
||||
-- These are example strings.
|
||||
"menuResumeGame" = "サイカイ "
|
||||
"menuNewGame" = "アタラシイゲーム"
|
||||
"menuOptions" = "セッテイ"
|
||||
"menuCredits" = "クレジット"
|
@ -14,6 +14,7 @@ import "libraries/playout"
|
||||
|
||||
import 'utilities/enum'
|
||||
import 'utilities/ui'
|
||||
import 'utilities/utils'
|
||||
|
||||
ZIndex = {
|
||||
player = 4,
|
||||
@ -33,28 +34,90 @@ CollideGroups = {
|
||||
wall = 5
|
||||
}
|
||||
|
||||
Drones = {
|
||||
{
|
||||
name = "Quad FPV",
|
||||
description =
|
||||
"This is a quadrocopter with a camera on it. It's a good drone for beginners. It's easy to control and has a good battery life.",
|
||||
price = 100,
|
||||
locked = false,
|
||||
preview = Graphics.image.new("assets/sprites/assemble/1/preview.png"),
|
||||
full = Graphics.image.new("assets/sprites/assemble/1/8.png")
|
||||
},
|
||||
{
|
||||
name = "Drone 2",
|
||||
description = "This is a drone",
|
||||
price = 200,
|
||||
locked = true,
|
||||
preview = nil,
|
||||
full = nil
|
||||
},
|
||||
{
|
||||
name = "Drone 3",
|
||||
description = "This is a drone",
|
||||
price = 300,
|
||||
locked = true,
|
||||
preview = nil,
|
||||
full = nil
|
||||
},
|
||||
{
|
||||
name = "Drone 4",
|
||||
description = "This is a drone",
|
||||
price = 400,
|
||||
locked = true,
|
||||
preview = nil,
|
||||
full = nil
|
||||
}
|
||||
}
|
||||
|
||||
import "scripts/player"
|
||||
import "scripts/bigBoomSprite"
|
||||
import "scripts/groundSprite"
|
||||
import "scripts/balebaSprite"
|
||||
import "scripts/dangerSprite"
|
||||
import "scripts/tankSprite"
|
||||
import "scripts/progressBar"
|
||||
import "scripts/selectionSprite"
|
||||
|
||||
import "scenes/BaseScene"
|
||||
import 'scenes/Assemble'
|
||||
import 'scenes/DroneSelection'
|
||||
import 'scenes/Menu'
|
||||
import 'scenes/Game'
|
||||
|
||||
Difficulty = {
|
||||
Easy = "Easy",
|
||||
Medium = "Medium",
|
||||
Hard = "Hard"
|
||||
}
|
||||
|
||||
DifficultySettings = {
|
||||
[Difficulty.Easy] = {
|
||||
assebleTime = 2500,
|
||||
},
|
||||
[Difficulty.Medium] = {
|
||||
assebleTime = 1500,
|
||||
},
|
||||
[Difficulty.Hard] = {
|
||||
assebleTime = 800,
|
||||
}
|
||||
}
|
||||
|
||||
Noble.Settings.setup({
|
||||
difficulty = "Medium",
|
||||
difficulty = Difficulty.Medium,
|
||||
music = true
|
||||
})
|
||||
|
||||
-- Noble.GameData.setup({
|
||||
-- score = 0
|
||||
-- })
|
||||
Noble.GameData.setup({
|
||||
drone1 = 0,
|
||||
drone2 = 0,
|
||||
drone3 = 0,
|
||||
drone4 = 0,
|
||||
money = 150
|
||||
})
|
||||
|
||||
playdate.display.setRefreshRate(50)
|
||||
|
||||
Noble.showFPS = true
|
||||
|
||||
Noble.new(Game)
|
||||
Noble.new(Menu)
|
||||
|
@ -1,7 +1,7 @@
|
||||
name=A Noble Engine Game
|
||||
author=A Lovely Developer
|
||||
description=This is a Noble Engine game.
|
||||
bundleID=com.yourdomain.GameName
|
||||
name=FPV Game
|
||||
author=ut3usw
|
||||
description=This is a FPV Game
|
||||
bundleID=guru.dead.fpv
|
||||
version=0.0.1
|
||||
buildNumber=1
|
||||
imagePath=assets/launcher/
|
||||
|
220
source/scenes/Assemble.lua
Normal file
@ -0,0 +1,220 @@
|
||||
Assemble = {}
|
||||
class("Assemble").extends(BaseScene)
|
||||
local scene = Assemble
|
||||
|
||||
local font = Graphics.font.new('assets/fonts/Mini Sans 2X')
|
||||
local fontMed = Graphics.font.new('assets/fonts/onyx_9')
|
||||
|
||||
local allButtons = { "A", "B", "DOWN", "LEFT", "RIGHT", "UP" }
|
||||
|
||||
function scene:popCode(button)
|
||||
scene.menuConfirmSound:stop()
|
||||
if scene.tickTimer.paused then
|
||||
scene.droneParts = scene:loadDrone(1, #scene.code)
|
||||
scene.tickTimer:start()
|
||||
scene.progressBar:setVisible(true)
|
||||
end
|
||||
if button == scene.code[1] then
|
||||
table.remove(scene.code, 1)
|
||||
scene.tickTimer:reset()
|
||||
scene.dronePartIndex = scene.dronePartIndex + 1
|
||||
|
||||
local particle = ParticlePoly(200, 185)
|
||||
particle:setThickness(2)
|
||||
particle:setSize(1, 2)
|
||||
particle:setSpeed(1, 3)
|
||||
particle:setColour(Graphics.kColorXOR)
|
||||
particle:add(5)
|
||||
scene.dY = 5
|
||||
scene.menuConfirmSound:play(1)
|
||||
else
|
||||
self.buttonTimeout = self.buttonTimeout - 5
|
||||
scene.code[1] = scene:randomButton()
|
||||
screenShake(100, 5)
|
||||
end
|
||||
end
|
||||
|
||||
scene.inputHandler = {
|
||||
AButtonDown = function() scene:popCode("A") end,
|
||||
BButtonDown = function() scene:popCode("B") end,
|
||||
downButtonDown = function() scene:popCode("DOWN") end,
|
||||
leftButtonDown = function() scene:popCode("LEFT") end,
|
||||
rightButtonDown = function() scene:popCode("RIGHT") end,
|
||||
upButtonDown = function() scene:popCode("UP") end,
|
||||
}
|
||||
|
||||
function scene:randomButton()
|
||||
local button = allButtons[math.random(1, #allButtons)]
|
||||
|
||||
return button
|
||||
end
|
||||
|
||||
function scene:drawBackground()
|
||||
end
|
||||
|
||||
local screwDriver = Graphics.image.new('assets/sprites/assemble/sd.png')
|
||||
local solder = Graphics.image.new('assets/images/solder.png')
|
||||
|
||||
function scene:loadButtons()
|
||||
local buttons = {}
|
||||
for i = 1, #allButtons do
|
||||
local image = Graphics.image.new('assets/sprites/buttons/' .. allButtons[i] .. '.png')
|
||||
buttons[allButtons[i]] = image
|
||||
end
|
||||
return buttons
|
||||
end
|
||||
|
||||
function scene:loadDrone(id, parts)
|
||||
local drone = {}
|
||||
for i = 1, parts do
|
||||
local image = Graphics.image.new('assets/sprites/assemble/' .. id .. '/' .. i .. '.png')
|
||||
if image ~= nil then
|
||||
table.insert(drone, image)
|
||||
end
|
||||
end
|
||||
|
||||
return drone
|
||||
end
|
||||
|
||||
function scene:setValues()
|
||||
scene.code = {}
|
||||
for i = 1, 9 do
|
||||
table.insert(scene.code, scene:randomButton())
|
||||
end
|
||||
|
||||
scene.difficulty = Noble.Settings.get("difficulty")
|
||||
|
||||
scene.buttons = scene:loadButtons()
|
||||
scene.droneParts = {}
|
||||
scene.dronePartIndex = 0
|
||||
scene.dY = 5
|
||||
|
||||
scene.buttonTimeout = 100
|
||||
|
||||
scene.timeToClick = DifficultySettings[scene.difficulty].assebleTime
|
||||
|
||||
scene.menuConfirmSound = playdate.sound.fileplayer.new("assets/audio/confirm")
|
||||
self.aKey = Graphics.image.new("assets/sprites/buttons/A")
|
||||
end
|
||||
|
||||
function scene:init()
|
||||
scene.super.init(self)
|
||||
scene:setValues()
|
||||
|
||||
scene.progressBar = ProgressBar(200, 175, 50, 5)
|
||||
scene.progressBar:set(self.buttonTimeout)
|
||||
scene.progressBar:setVisible(false)
|
||||
|
||||
scene.tickTimer = playdate.timer.new(scene.timeToClick, self.buttonTimeout, 0, playdate.easingFunctions.linear)
|
||||
scene.tickTimer.updateCallback = function(timer)
|
||||
scene.buttonTimeout = timer.value
|
||||
scene.progressBar:set(scene.buttonTimeout)
|
||||
end
|
||||
scene.tickTimer.timerEndedCallback = function()
|
||||
scene.buttonTimeout = 0
|
||||
end
|
||||
scene.tickTimer:pause()
|
||||
end
|
||||
|
||||
function scene:start()
|
||||
scene.super.start(self)
|
||||
|
||||
self.optionsMenu:addMenuItem("Main Menu", function() Noble.transition(Menu) end)
|
||||
Noble.showFPS = true
|
||||
end
|
||||
|
||||
function scene:enter()
|
||||
scene.super.enter(self)
|
||||
end
|
||||
|
||||
function round(number)
|
||||
local formatted = string.format("%.2f", number)
|
||||
return formatted
|
||||
end
|
||||
|
||||
local elapsedTime = 0
|
||||
function scene:update()
|
||||
scene.super.update(self)
|
||||
elapsedTime = elapsedTime + 1 / playdate.display.getRefreshRate()
|
||||
|
||||
local sddy = 4 * math.sin(10 * elapsedTime)
|
||||
local sdy = 4 * math.sin(7 * elapsedTime)
|
||||
local sddx = 2 * math.cos(5 * elapsedTime)
|
||||
|
||||
if scene.tickTimer.paused then
|
||||
Noble.Text.draw("Assemble the drone!", 200, 110, Noble.Text.ALIGN_CENTER, false, font)
|
||||
end
|
||||
|
||||
if #scene.code == 0 then
|
||||
local dy = 1 * math.sin(10 * elapsedTime)
|
||||
|
||||
Noble.Transition.setDefaultProperties(Noble.Transition.SpotlightMask, {
|
||||
x = 325,
|
||||
y = 95,
|
||||
xEnd = 96,
|
||||
yEnd = 100,
|
||||
invert = false
|
||||
})
|
||||
scene.inputHandler = {
|
||||
AButtonDown = function()
|
||||
Noble.transition(Game, nil, Noble.Transition.SpotlightMask)
|
||||
scene.menuConfirmSound:play(1)
|
||||
end
|
||||
}
|
||||
Noble.Input.setHandler(scene.inputHandler)
|
||||
self.aKey:draw(200, 170 + dy)
|
||||
Noble.Text.draw("Start Mission", 218, 175, Noble.Text.ALIGN_LEFT, false, fontMed)
|
||||
self.progressBar:remove()
|
||||
self.tickTimer:remove()
|
||||
return
|
||||
end
|
||||
|
||||
if scene.buttonTimeout <= 0 then
|
||||
Noble.Text.draw("LOSE!", 200, 110, Noble.Text.ALIGN_CENTER, false, font)
|
||||
self.progressBar:remove()
|
||||
self.tickTimer:remove()
|
||||
screenShake(100, 5)
|
||||
Noble.Input.setEnabled(false)
|
||||
return
|
||||
end
|
||||
|
||||
screwDriver:draw(300 + sddx, 100 + sddy)
|
||||
solder:draw(0, 100 + sdy)
|
||||
|
||||
if scene.droneParts ~= nil and scene.dronePartIndex ~= nil and scene.dronePartIndex > 0 and #scene.droneParts > 0 then
|
||||
scene.droneParts[scene.dronePartIndex]:draw(100, 20)
|
||||
end
|
||||
|
||||
Graphics.drawLine(180, 185, 192, 185)
|
||||
Graphics.drawLine(208, 185, 220, 185)
|
||||
|
||||
if scene.dY > 0 then
|
||||
scene.dY = self.dY - 0.5
|
||||
end
|
||||
|
||||
for i = 1, #scene.code do
|
||||
local button = scene.buttons[scene.code[i]]
|
||||
|
||||
local first = 1
|
||||
if #scene.code == 1 then
|
||||
first = 0
|
||||
end
|
||||
local t = (i - 1) / (#scene.code - first)
|
||||
local opaque = playdate.math.lerp(1, 0.3, t) --TODO: not the best solution
|
||||
|
||||
local y = 185 + ((i - 1) * 16) - 8 + scene.dY
|
||||
|
||||
button:drawFaded(192, y, opaque, playdate.graphics.image.kDitherTypeBayer2x2)
|
||||
end
|
||||
end
|
||||
|
||||
function scene:exit()
|
||||
scene.super.exit(self)
|
||||
|
||||
Noble.showFPS = false
|
||||
end
|
||||
|
||||
function scene:finish()
|
||||
scene.super.finish(self)
|
||||
playdate.display.setScale(1)
|
||||
end
|
117
source/scenes/DroneSelection.lua
Normal file
@ -0,0 +1,117 @@
|
||||
DroneSelection = {}
|
||||
class("DroneSelection").extends(BaseScene)
|
||||
local scene = DroneSelection
|
||||
|
||||
local fontSimple = Graphics.font.new('assets/fonts/peridot_7')
|
||||
local fontMed = Graphics.font.new('assets/fonts/onyx_9')
|
||||
local fontBig = Graphics.font.new('assets/fonts/diamond_20')
|
||||
|
||||
scene.inputHandler = {
|
||||
AButtonDown = function()
|
||||
scene.menuConfirmSound:play(1)
|
||||
Noble.transition(Assemble)
|
||||
end,
|
||||
BButtonDown = function() end,
|
||||
downButtonDown = function()
|
||||
scene.menuSelSound:play(1)
|
||||
if scene.menuIndex < 4 then
|
||||
scene.menuIndex = scene.menuIndex + 1
|
||||
else
|
||||
scene.menuIndex = 1
|
||||
end
|
||||
end,
|
||||
leftButtonDown = function() end,
|
||||
rightButtonDown = function() end,
|
||||
upButtonDown = function()
|
||||
scene.menuSelSound:play(1)
|
||||
if scene.menuIndex > 1 then
|
||||
scene.menuIndex = scene.menuIndex - 1
|
||||
else
|
||||
scene.menuIndex = 4
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
function scene:setValues()
|
||||
self.dronesPreview = {}
|
||||
self.background = Graphics.image.new("assets/sprites/selectionBg1")
|
||||
self.dronesPreview[1] = Graphics.image.new("assets/sprites/assemble/1/8.png")
|
||||
|
||||
self.aKey = Graphics.image.new("assets/sprites/buttons/A")
|
||||
|
||||
scene.menuSelSound = playdate.sound.fileplayer.new("assets/audio/menu_select")
|
||||
scene.menuSelSound:setVolume(0.5)
|
||||
|
||||
scene.menuConfirmSound = playdate.sound.fileplayer.new("assets/audio/confirm")
|
||||
-- scene.menuConfirmSound:setVolume(0.5)
|
||||
|
||||
scene.unknownDrone = Graphics.image.new("assets/images/unk.png")
|
||||
|
||||
self.menuIndex = 1
|
||||
end
|
||||
|
||||
function scene:init()
|
||||
scene.super.init(self)
|
||||
scene:setValues()
|
||||
end
|
||||
|
||||
function scene:start()
|
||||
scene.super.start(self)
|
||||
|
||||
self.optionsMenu:addMenuItem("Main Menu", function() Noble.transition(Menu) end)
|
||||
Noble.showFPS = false
|
||||
end
|
||||
|
||||
function scene:enter()
|
||||
scene.super.enter(self)
|
||||
|
||||
scene.selectionAnim = Selection(23, 54)
|
||||
end
|
||||
|
||||
local elapsedTime = 0
|
||||
function scene:update()
|
||||
scene.super.update(self)
|
||||
Noble.Text.draw("Select Drone", 200, 10, Noble.Text.ALIGN_CENTER, false, fontMed)
|
||||
scene.selectionAnim:moveTo(23, 54 + (self.menuIndex - 1) * 46)
|
||||
|
||||
elapsedTime = elapsedTime + 1 / playdate.display.getRefreshRate()
|
||||
local dy = 1 * math.sin(10 * elapsedTime)
|
||||
|
||||
local offset = 42
|
||||
|
||||
for i = 1, #Drones do
|
||||
if Drones[i].locked == true then
|
||||
Noble.Text.draw("UNAVAILABLE", 47, offset + 7, Noble.Text.ALIGN_LEFT, false, fontMed)
|
||||
Noble.Text.draw("?", 16, offset + 4, Noble.Text.ALIGN_LEFT, false, fontBig)
|
||||
else
|
||||
Drones[i].preview:draw(6, offset)
|
||||
|
||||
Noble.Text.draw(Drones[i].name, 49, offset - 3, Noble.Text.ALIGN_LEFT, false, fontMed)
|
||||
Noble.Text.draw("Price:", 49, offset + 15, Noble.Text.ALIGN_LEFT, false, fontSimple)
|
||||
Noble.Text.draw("$" .. Drones[i].price, 103, offset + 15, Noble.Text.ALIGN_LEFT, false, fontSimple)
|
||||
end
|
||||
offset = offset + 46
|
||||
end
|
||||
|
||||
if Drones[self.menuIndex].locked == false then
|
||||
self.aKey:draw(330, 170 + dy) -- A key
|
||||
Noble.Text.draw("Assemble", 348, 175, Noble.Text.ALIGN_LEFT, false, fontSimple) -- Assemble text
|
||||
|
||||
Graphics.drawTextInRect(Drones[self.menuIndex].description, 135, 200, 255, 100, nil, nil, nil, fontSimple) -- Description
|
||||
Drones[self.menuIndex].full:draw(160, 35) -- Drone preview (full size)
|
||||
else
|
||||
Graphics.drawTextInRect("Unavailable right now", 135, 200, 255, 100, nil, nil, nil, fontSimple)
|
||||
scene.unknownDrone:draw(184, 35)
|
||||
end
|
||||
end
|
||||
|
||||
function scene:exit()
|
||||
scene.super.exit(self)
|
||||
|
||||
Noble.showFPS = false
|
||||
end
|
||||
|
||||
function scene:finish()
|
||||
scene.super.finish(self)
|
||||
playdate.display.setScale(1)
|
||||
end
|
@ -19,8 +19,8 @@ end
|
||||
|
||||
function scene:drawBackground()
|
||||
local speed = 0.1
|
||||
if Ground.player ~= nil and Ground.player.isMovingRight() == true then
|
||||
speed = 0.2
|
||||
if scene.ground ~= nil then
|
||||
speed = scene.ground.moveSpeed * 0.4
|
||||
end
|
||||
|
||||
if scene.distance > 0 then
|
||||
@ -34,7 +34,7 @@ function scene:drawBackground()
|
||||
end
|
||||
|
||||
function scene:setValues()
|
||||
self.bg = Graphics.image.new("assets/sprites/bgTest")
|
||||
self.bg = Graphics.image.new("assets/sprites/bg1")
|
||||
scene.bgX = 0
|
||||
scene.telemLostSound = playdate.sound.fileplayer.new("assets/audio/telemko")
|
||||
scene.telemLostSoundPlayed = false
|
||||
@ -54,7 +54,7 @@ function scene:setValues()
|
||||
|
||||
scene.tank = nil
|
||||
|
||||
scene.distance = 900
|
||||
scene.distance = 200
|
||||
end
|
||||
|
||||
function scene:init()
|
||||
@ -78,7 +78,7 @@ function scene:spawnBaleba()
|
||||
return
|
||||
end
|
||||
|
||||
--scene.balebas[balebaCount + 1] = Baleba(math.random(410, 900), math.random(10, 210), scene.player, true)
|
||||
scene.balebas[balebaCount + 1] = Baleba(math.random(410, 900), math.random(10, 210), scene.player, true)
|
||||
end
|
||||
|
||||
function scene:enter()
|
||||
@ -96,9 +96,9 @@ function scene:enter()
|
||||
scene:spawnBaleba()
|
||||
end
|
||||
|
||||
--scene.helloAudio:play(1)
|
||||
scene.helloAudio:play(1)
|
||||
if scene.musicEnabled then
|
||||
--scene.levelAudio:play(0)
|
||||
scene.levelAudio:play(0)
|
||||
end
|
||||
end
|
||||
|
||||
@ -115,11 +115,15 @@ function scene:update()
|
||||
end
|
||||
|
||||
if scene.distance > 0 then
|
||||
scene.distance = scene.distance - 1
|
||||
scene.distance = scene.distance - scene.ground.moveSpeed
|
||||
end
|
||||
|
||||
if scene.distance < 850 and scene.tank == nil then
|
||||
scene.tank = Tank(500, 190, scene.player, scene.ground)
|
||||
if scene.distance < 0 then -- SHIT
|
||||
scene.distance = 0
|
||||
end
|
||||
|
||||
if scene.distance < 150 and scene.tank == nil then
|
||||
scene.tank = Tank(480, 190, scene.ground)
|
||||
scene:addSprite(scene.tank) -- Raw sprite
|
||||
end
|
||||
|
||||
@ -131,7 +135,7 @@ function scene:update()
|
||||
local t = scene.player.getBat() / 10000
|
||||
local lerpBat = playdate.math.lerp(12.0, 16.8, t)
|
||||
Noble.Text.draw(round(lerpBat) .. "v", 10, 210, Noble.Text.ALIGN_LEFT, false, font)
|
||||
Noble.Text.draw(scene.distance .. "m", 200, 40, Noble.Text.ALIGN_CENTER, false, font)
|
||||
Noble.Text.draw(math.round(scene.distance) .. "m", 200, 20, Noble.Text.ALIGN_CENTER, false, font)
|
||||
end
|
||||
|
||||
if scene.player.isDead() and not scene.telemLostSoundPlayed then
|
||||
@ -160,7 +164,9 @@ end
|
||||
function scene:exit()
|
||||
scene.super.exit(self)
|
||||
|
||||
scene.tank:remove()
|
||||
if scene.tank ~= nil then
|
||||
scene.tank:remove()
|
||||
end
|
||||
scene.telemLostSound:stop()
|
||||
scene.levelAudio:stop()
|
||||
scene.balebaSpawner:remove()
|
||||
|
@ -2,10 +2,8 @@ Menu = {}
|
||||
class("Menu").extends(BaseScene)
|
||||
local scene = Menu
|
||||
|
||||
|
||||
|
||||
function scene:setValues()
|
||||
self.background = Graphics.image.new("assets/images/background2")
|
||||
self.background = Graphics.image.new("assets/images/menuBg")
|
||||
|
||||
self.color1 = Graphics.kColorBlack
|
||||
self.color2 = Graphics.kColorWhite
|
||||
@ -26,9 +24,12 @@ function scene:init()
|
||||
local menuSelSound = playdate.sound.fileplayer.new("assets/audio/menu_select")
|
||||
menuSelSound:setVolume(0.5)
|
||||
|
||||
local menuConfirmSound = playdate.sound.fileplayer.new("assets/audio/confirm")
|
||||
-- menuConfirmSound:setVolume(0.5)
|
||||
|
||||
self:setValues()
|
||||
|
||||
self.menu = Noble.Menu.new(false, Noble.Text.ALIGN_CENTER, false, self.color2, 4,6,0, Noble.Text.FONT_SMALL)
|
||||
self.menu = Noble.Menu.new(false, Noble.Text.ALIGN_CENTER, false, self.color2, 4, 6, 0, Noble.Text.FONT_SMALL)
|
||||
|
||||
self:setupMenu(self.menu)
|
||||
|
||||
@ -56,10 +57,10 @@ function scene:init()
|
||||
end
|
||||
end,
|
||||
AButtonDown = function()
|
||||
menuConfirmSound:play(1)
|
||||
self.menu:click()
|
||||
end
|
||||
}
|
||||
|
||||
end
|
||||
|
||||
function scene:enter()
|
||||
@ -86,13 +87,12 @@ function scene:update()
|
||||
|
||||
Graphics.setColor(self.color1)
|
||||
Graphics.setDitherPattern(0.2, Graphics.image.kDitherTypeScreen)
|
||||
Graphics.fillRoundRect(200-38, 160-8, 75, 60, 15)
|
||||
Graphics.fillRoundRect(200 - 38, 160 - 8, 75, 60, 15)
|
||||
self.menu:draw(200, 160)
|
||||
|
||||
logo_image:draw(120, 55)
|
||||
-- logo_image:draw(120, 55)
|
||||
|
||||
Graphics.setColor(Graphics.kColorBlack)
|
||||
|
||||
end
|
||||
|
||||
function scene:exit()
|
||||
@ -102,8 +102,8 @@ function scene:exit()
|
||||
end
|
||||
|
||||
function scene:setupMenu(__menu)
|
||||
__menu:addItem("Start", function() Noble.transition(Game, nil, Noble.Transition.DipToWhite) end)
|
||||
__menu:addItem("Tutorial", function() return end)
|
||||
__menu:addItem("Credits", function() return end)
|
||||
__menu:addItem("Start", function() Noble.transition(DroneSelection, nil, Noble.Transition.DipToWhite) end)
|
||||
__menu:addItem("Tutorial", function() return end)
|
||||
__menu:addItem("Credits", function() return end)
|
||||
__menu:select("Start")
|
||||
end
|
||||
end
|
||||
|
@ -12,7 +12,7 @@ function Player:init(x, y)
|
||||
self.animation:addState("down", 1, 7)
|
||||
self.animation.down.frameDuration = 6
|
||||
self.animation:addState("boom", 15, 21)
|
||||
self.animation.boom.frameDuration = 10
|
||||
self.animation.boom.frameDuration = 6
|
||||
self.animation.boom.loop = false
|
||||
|
||||
self.animation:setState("down")
|
||||
@ -173,7 +173,7 @@ function Player:handleMovementAndCollisions()
|
||||
self:boom()
|
||||
return
|
||||
elseif collisionTag == 154 then -- Baleba
|
||||
--self:boom(collisionObject)
|
||||
self:boom(collisionObject)
|
||||
return
|
||||
elseif collisionTag == 2 then -- Tank
|
||||
self:boom()
|
||||
|
28
source/scripts/progressBar.lua
Normal file
@ -0,0 +1,28 @@
|
||||
local pd <const> = playdate
|
||||
local gfx <const> = Graphics
|
||||
|
||||
class('ProgressBar').extends(gfx.sprite)
|
||||
|
||||
function ProgressBar:init(x, y, width, height)
|
||||
self:setImage(gfx.image.new(width, height))
|
||||
self.progress = 0
|
||||
self:moveTo(x, y)
|
||||
self:add()
|
||||
self:set(0)
|
||||
end
|
||||
|
||||
function ProgressBar:set(percentage)
|
||||
self.progress = percentage
|
||||
local bar_image = gfx.image.new(self.width, self.height, gfx.kColorWhite)
|
||||
local progressWidth = self.progress / 100 * (self.width - 4)
|
||||
-- local _, fontHeight = playdate.graphics.getTextSize("TEST")
|
||||
gfx.pushContext(bar_image)
|
||||
gfx.setLineWidth(2)
|
||||
gfx.drawRoundRect(1, 1, self.width - 2, self.height - 2, 3)
|
||||
gfx.fillRect(2, 2, progressWidth, self.height - 4)
|
||||
gfx.setImageDrawMode(gfx.kDrawModeNXOR)
|
||||
--[[ gfx.drawTextAligned(math.floor(self.progress) .. "%", self.width / 2, (self.height - fontHeight) / 2 + 2,
|
||||
kTextAlignment.center) ]]
|
||||
gfx.popContext()
|
||||
self:setImage(bar_image)
|
||||
end
|
18
source/scripts/selectionSprite.lua
Normal file
@ -0,0 +1,18 @@
|
||||
Selection = {}
|
||||
class("Selection").extends(NobleSprite)
|
||||
|
||||
function Selection:init(x, y)
|
||||
Selection.super.init(self, "assets/sprites/selectionanim", true)
|
||||
|
||||
-- Animation properties
|
||||
self.animation:addState("run", 1, 11)
|
||||
self.animation.run.frameDuration = 1
|
||||
|
||||
self.animation:setState("run")
|
||||
|
||||
-- Collision properties
|
||||
self:setZIndex(ZIndex.alert)
|
||||
self:setSize(41, 40)
|
||||
self:add()
|
||||
self:moveTo(x or 0, y or 0)
|
||||
end
|
@ -2,7 +2,7 @@ Tank = {}
|
||||
|
||||
class("Tank").extends(Graphics.sprite)
|
||||
|
||||
function Tank:init(x, y, player, ground)
|
||||
function Tank:init(x, y, ground)
|
||||
self.tankImage = Graphics.image.new("assets/sprites/tank")
|
||||
self.tankImageD = Graphics.image.new("assets/sprites/tankD")
|
||||
Tank.super.init(self)
|
||||
@ -26,8 +26,6 @@ function Tank:init(x, y, player, ground)
|
||||
})
|
||||
|
||||
-- Main properties
|
||||
Tank.moveSpeed = 2
|
||||
Tank.player = player
|
||||
Tank.ground = ground
|
||||
|
||||
self:fadein()
|
||||
@ -49,12 +47,5 @@ function Tank:update()
|
||||
return
|
||||
end
|
||||
|
||||
-- Speedup when player is moving right
|
||||
if Tank.player.isMovingRight() == false then
|
||||
Tank.moveSpeed = 0.2
|
||||
else
|
||||
Tank.moveSpeed = 1
|
||||
end
|
||||
|
||||
self:moveTo(self.x - Tank.moveSpeed, self.y)
|
||||
self:moveTo(self.x - Tank.ground.moveSpeed, self.y)
|
||||
end
|
||||
|
17
source/utilities/utils.lua
Normal file
@ -0,0 +1,17 @@
|
||||
function round(number)
|
||||
local formatted = string.format("%.2f", number)
|
||||
return formatted
|
||||
end
|
||||
|
||||
function screenShake(shakeTime, shakeMagnitude)
|
||||
local shakeTimer = playdate.timer.new(shakeTime, shakeMagnitude, 0)
|
||||
shakeTimer.updateCallback = function(timer)
|
||||
local magnitude = math.floor(timer.value)
|
||||
local shakeX = math.random(-magnitude, magnitude)
|
||||
local shakeY = math.random(-magnitude, magnitude)
|
||||
playdate.display.setOffset(shakeX, shakeY)
|
||||
end
|
||||
shakeTimer.timerEndedCallback = function()
|
||||
playdate.display.setOffset(0, 0)
|
||||
end
|
||||
end
|