alpha 0.1
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 |
Before Width: | Height: | Size: 3.5 KiB 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/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/enum'
|
||||||
import 'utilities/ui'
|
import 'utilities/ui'
|
||||||
|
import 'utilities/utils'
|
||||||
|
|
||||||
ZIndex = {
|
ZIndex = {
|
||||||
player = 4,
|
player = 4,
|
||||||
@ -33,6 +34,42 @@ CollideGroups = {
|
|||||||
wall = 5
|
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/player"
|
||||||
import "scripts/bigBoomSprite"
|
import "scripts/bigBoomSprite"
|
||||||
import "scripts/groundSprite"
|
import "scripts/groundSprite"
|
||||||
@ -40,23 +77,47 @@ import "scripts/balebaSprite"
|
|||||||
import "scripts/dangerSprite"
|
import "scripts/dangerSprite"
|
||||||
import "scripts/tankSprite"
|
import "scripts/tankSprite"
|
||||||
import "scripts/progressBar"
|
import "scripts/progressBar"
|
||||||
|
import "scripts/selectionSprite"
|
||||||
|
|
||||||
import "scenes/BaseScene"
|
import "scenes/BaseScene"
|
||||||
|
import 'scenes/Assemble'
|
||||||
|
import 'scenes/DroneSelection'
|
||||||
import 'scenes/Menu'
|
import 'scenes/Menu'
|
||||||
import 'scenes/Game'
|
import 'scenes/Game'
|
||||||
import 'scenes/Assemble'
|
|
||||||
|
Difficulty = {
|
||||||
|
Easy = "Easy",
|
||||||
|
Medium = "Medium",
|
||||||
|
Hard = "Hard"
|
||||||
|
}
|
||||||
|
|
||||||
|
DifficultySettings = {
|
||||||
|
[Difficulty.Easy] = {
|
||||||
|
assebleTime = 2500,
|
||||||
|
},
|
||||||
|
[Difficulty.Medium] = {
|
||||||
|
assebleTime = 1500,
|
||||||
|
},
|
||||||
|
[Difficulty.Hard] = {
|
||||||
|
assebleTime = 800,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Noble.Settings.setup({
|
Noble.Settings.setup({
|
||||||
difficulty = "Medium",
|
difficulty = Difficulty.Medium,
|
||||||
music = true
|
music = true
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Noble.GameData.setup({
|
Noble.GameData.setup({
|
||||||
-- score = 0
|
drone1 = 0,
|
||||||
-- })
|
drone2 = 0,
|
||||||
|
drone3 = 0,
|
||||||
|
drone4 = 0,
|
||||||
|
money = 150
|
||||||
|
})
|
||||||
|
|
||||||
playdate.display.setRefreshRate(50)
|
playdate.display.setRefreshRate(50)
|
||||||
|
|
||||||
Noble.showFPS = true
|
Noble.showFPS = true
|
||||||
|
|
||||||
Noble.new(Assemble)
|
Noble.new(Menu)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
name=A Noble Engine Game
|
name=FPV Game
|
||||||
author=A Lovely Developer
|
author=ut3usw
|
||||||
description=This is a Noble Engine game.
|
description=This is a FPV Game
|
||||||
bundleID=com.yourdomain.GameName
|
bundleID=guru.dead.fpv
|
||||||
version=0.0.1
|
version=0.0.1
|
||||||
buildNumber=1
|
buildNumber=1
|
||||||
imagePath=assets/launcher/
|
imagePath=assets/launcher/
|
||||||
|
@ -3,23 +3,12 @@ class("Assemble").extends(BaseScene)
|
|||||||
local scene = Assemble
|
local scene = Assemble
|
||||||
|
|
||||||
local font = Graphics.font.new('assets/fonts/Mini Sans 2X')
|
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" }
|
local allButtons = { "A", "B", "DOWN", "LEFT", "RIGHT", "UP" }
|
||||||
|
|
||||||
local 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
|
|
||||||
|
|
||||||
function scene:popCode(button)
|
function scene:popCode(button)
|
||||||
|
scene.menuConfirmSound:stop()
|
||||||
if scene.tickTimer.paused then
|
if scene.tickTimer.paused then
|
||||||
scene.droneParts = scene:loadDrone(1, #scene.code)
|
scene.droneParts = scene:loadDrone(1, #scene.code)
|
||||||
scene.tickTimer:start()
|
scene.tickTimer:start()
|
||||||
@ -30,12 +19,14 @@ function scene:popCode(button)
|
|||||||
scene.tickTimer:reset()
|
scene.tickTimer:reset()
|
||||||
scene.dronePartIndex = scene.dronePartIndex + 1
|
scene.dronePartIndex = scene.dronePartIndex + 1
|
||||||
|
|
||||||
local particle = ParticlePoly(200, 190 + 8)
|
local particle = ParticlePoly(200, 185)
|
||||||
particle:setThickness(2)
|
particle:setThickness(2)
|
||||||
particle:setSize(1, 2)
|
particle:setSize(1, 2)
|
||||||
particle:setSpeed(1, 3)
|
particle:setSpeed(1, 3)
|
||||||
particle:setColour(Graphics.kColorXOR)
|
particle:setColour(Graphics.kColorXOR)
|
||||||
particle:add(5)
|
particle:add(5)
|
||||||
|
scene.dY = 5
|
||||||
|
scene.menuConfirmSound:play(1)
|
||||||
else
|
else
|
||||||
self.buttonTimeout = self.buttonTimeout - 5
|
self.buttonTimeout = self.buttonTimeout - 5
|
||||||
scene.code[1] = scene:randomButton()
|
scene.code[1] = scene:randomButton()
|
||||||
@ -62,6 +53,7 @@ function scene:drawBackground()
|
|||||||
end
|
end
|
||||||
|
|
||||||
local screwDriver = Graphics.image.new('assets/sprites/assemble/sd.png')
|
local screwDriver = Graphics.image.new('assets/sprites/assemble/sd.png')
|
||||||
|
local solder = Graphics.image.new('assets/images/solder.png')
|
||||||
|
|
||||||
function scene:loadButtons()
|
function scene:loadButtons()
|
||||||
local buttons = {}
|
local buttons = {}
|
||||||
@ -90,22 +82,30 @@ function scene:setValues()
|
|||||||
table.insert(scene.code, scene:randomButton())
|
table.insert(scene.code, scene:randomButton())
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scene.difficulty = Noble.Settings.get("difficulty")
|
||||||
|
|
||||||
scene.buttons = scene:loadButtons()
|
scene.buttons = scene:loadButtons()
|
||||||
scene.droneParts = {}
|
scene.droneParts = {}
|
||||||
scene.dronePartIndex = 0
|
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
|
end
|
||||||
|
|
||||||
function scene:init()
|
function scene:init()
|
||||||
scene.super.init(self)
|
scene.super.init(self)
|
||||||
scene:setValues()
|
scene:setValues()
|
||||||
|
|
||||||
scene.buttonTimeout = 100
|
scene.progressBar = ProgressBar(200, 175, 50, 5)
|
||||||
|
|
||||||
scene.progressBar = ProgressBar(200, 170, 50, 5)
|
|
||||||
scene.progressBar:set(self.buttonTimeout)
|
scene.progressBar:set(self.buttonTimeout)
|
||||||
scene.progressBar:setVisible(false)
|
scene.progressBar:setVisible(false)
|
||||||
|
|
||||||
scene.tickTimer = playdate.timer.new(2500, self.buttonTimeout, 0, playdate.easingFunctions.linear)
|
scene.tickTimer = playdate.timer.new(scene.timeToClick, self.buttonTimeout, 0, playdate.easingFunctions.linear)
|
||||||
scene.tickTimer.updateCallback = function(timer)
|
scene.tickTimer.updateCallback = function(timer)
|
||||||
scene.buttonTimeout = timer.value
|
scene.buttonTimeout = timer.value
|
||||||
scene.progressBar:set(scene.buttonTimeout)
|
scene.progressBar:set(scene.buttonTimeout)
|
||||||
@ -132,14 +132,40 @@ function round(number)
|
|||||||
return formatted
|
return formatted
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local elapsedTime = 0
|
||||||
function scene:update()
|
function scene:update()
|
||||||
scene.super.update(self)
|
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
|
if #scene.code == 0 then
|
||||||
Noble.Text.draw("WIN!", 200, 110, Noble.Text.ALIGN_CENTER, false, font)
|
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.progressBar:remove()
|
||||||
self.tickTimer:remove()
|
self.tickTimer:remove()
|
||||||
scene.inputHandler = {}
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -148,18 +174,23 @@ function scene:update()
|
|||||||
self.progressBar:remove()
|
self.progressBar:remove()
|
||||||
self.tickTimer:remove()
|
self.tickTimer:remove()
|
||||||
screenShake(100, 5)
|
screenShake(100, 5)
|
||||||
scene.inputHandler = {}
|
Noble.Input.setEnabled(false)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
screwDriver:draw(300, 100)
|
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
|
if scene.droneParts ~= nil and scene.dronePartIndex ~= nil and scene.dronePartIndex > 0 and #scene.droneParts > 0 then
|
||||||
scene.droneParts[scene.dronePartIndex]:draw(100, 20)
|
scene.droneParts[scene.dronePartIndex]:draw(100, 20)
|
||||||
end
|
end
|
||||||
|
|
||||||
Graphics.drawLine(200, 175, 200, 185)
|
Graphics.drawLine(180, 185, 192, 185)
|
||||||
Graphics.drawLine(200, 212, 200, 222)
|
Graphics.drawLine(208, 185, 220, 185)
|
||||||
|
|
||||||
|
if scene.dY > 0 then
|
||||||
|
scene.dY = self.dY - 0.5
|
||||||
|
end
|
||||||
|
|
||||||
for i = 1, #scene.code do
|
for i = 1, #scene.code do
|
||||||
local button = scene.buttons[scene.code[i]]
|
local button = scene.buttons[scene.code[i]]
|
||||||
@ -171,7 +202,9 @@ function scene:update()
|
|||||||
local t = (i - 1) / (#scene.code - first)
|
local t = (i - 1) / (#scene.code - first)
|
||||||
local opaque = playdate.math.lerp(1, 0.3, t) --TODO: not the best solution
|
local opaque = playdate.math.lerp(1, 0.3, t) --TODO: not the best solution
|
||||||
|
|
||||||
button:drawFaded(200 + ((i - 1) * 16) - 8, 190, opaque, playdate.graphics.image.kDitherTypeBayer2x2)
|
local y = 185 + ((i - 1) * 16) - 8 + scene.dY
|
||||||
|
|
||||||
|
button:drawFaded(192, y, opaque, playdate.graphics.image.kDitherTypeBayer2x2)
|
||||||
end
|
end
|
||||||
end
|
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
|
@ -78,7 +78,7 @@ function scene:spawnBaleba()
|
|||||||
return
|
return
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
function scene:enter()
|
function scene:enter()
|
||||||
@ -96,9 +96,9 @@ function scene:enter()
|
|||||||
scene:spawnBaleba()
|
scene:spawnBaleba()
|
||||||
end
|
end
|
||||||
|
|
||||||
--scene.helloAudio:play(1)
|
scene.helloAudio:play(1)
|
||||||
if scene.musicEnabled then
|
if scene.musicEnabled then
|
||||||
--scene.levelAudio:play(0)
|
scene.levelAudio:play(0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -164,7 +164,9 @@ end
|
|||||||
function scene:exit()
|
function scene:exit()
|
||||||
scene.super.exit(self)
|
scene.super.exit(self)
|
||||||
|
|
||||||
scene.tank:remove()
|
if scene.tank ~= nil then
|
||||||
|
scene.tank:remove()
|
||||||
|
end
|
||||||
scene.telemLostSound:stop()
|
scene.telemLostSound:stop()
|
||||||
scene.levelAudio:stop()
|
scene.levelAudio:stop()
|
||||||
scene.balebaSpawner:remove()
|
scene.balebaSpawner:remove()
|
||||||
|
@ -2,10 +2,8 @@ Menu = {}
|
|||||||
class("Menu").extends(BaseScene)
|
class("Menu").extends(BaseScene)
|
||||||
local scene = Menu
|
local scene = Menu
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function scene:setValues()
|
function scene:setValues()
|
||||||
self.background = Graphics.image.new("assets/images/background2")
|
self.background = Graphics.image.new("assets/images/menuBg")
|
||||||
|
|
||||||
self.color1 = Graphics.kColorBlack
|
self.color1 = Graphics.kColorBlack
|
||||||
self.color2 = Graphics.kColorWhite
|
self.color2 = Graphics.kColorWhite
|
||||||
@ -26,9 +24,12 @@ function scene:init()
|
|||||||
local menuSelSound = playdate.sound.fileplayer.new("assets/audio/menu_select")
|
local menuSelSound = playdate.sound.fileplayer.new("assets/audio/menu_select")
|
||||||
menuSelSound:setVolume(0.5)
|
menuSelSound:setVolume(0.5)
|
||||||
|
|
||||||
|
local menuConfirmSound = playdate.sound.fileplayer.new("assets/audio/confirm")
|
||||||
|
-- menuConfirmSound:setVolume(0.5)
|
||||||
|
|
||||||
self:setValues()
|
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)
|
self:setupMenu(self.menu)
|
||||||
|
|
||||||
@ -56,10 +57,10 @@ function scene:init()
|
|||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
AButtonDown = function()
|
AButtonDown = function()
|
||||||
|
menuConfirmSound:play(1)
|
||||||
self.menu:click()
|
self.menu:click()
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function scene:enter()
|
function scene:enter()
|
||||||
@ -86,13 +87,12 @@ function scene:update()
|
|||||||
|
|
||||||
Graphics.setColor(self.color1)
|
Graphics.setColor(self.color1)
|
||||||
Graphics.setDitherPattern(0.2, Graphics.image.kDitherTypeScreen)
|
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)
|
self.menu:draw(200, 160)
|
||||||
|
|
||||||
logo_image:draw(120, 55)
|
-- logo_image:draw(120, 55)
|
||||||
|
|
||||||
Graphics.setColor(Graphics.kColorBlack)
|
Graphics.setColor(Graphics.kColorBlack)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function scene:exit()
|
function scene:exit()
|
||||||
@ -102,8 +102,8 @@ function scene:exit()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function scene:setupMenu(__menu)
|
function scene:setupMenu(__menu)
|
||||||
__menu:addItem("Start", function() Noble.transition(Game, nil, Noble.Transition.DipToWhite) end)
|
__menu:addItem("Start", function() Noble.transition(DroneSelection, nil, Noble.Transition.DipToWhite) end)
|
||||||
__menu:addItem("Tutorial", function() return end)
|
__menu:addItem("Tutorial", function() return end)
|
||||||
__menu:addItem("Credits", function() return end)
|
__menu:addItem("Credits", function() return end)
|
||||||
__menu:select("Start")
|
__menu:select("Start")
|
||||||
end
|
end
|
@ -12,7 +12,7 @@ function Player:init(x, y)
|
|||||||
self.animation:addState("down", 1, 7)
|
self.animation:addState("down", 1, 7)
|
||||||
self.animation.down.frameDuration = 6
|
self.animation.down.frameDuration = 6
|
||||||
self.animation:addState("boom", 15, 21)
|
self.animation:addState("boom", 15, 21)
|
||||||
self.animation.boom.frameDuration = 10
|
self.animation.boom.frameDuration = 6
|
||||||
self.animation.boom.loop = false
|
self.animation.boom.loop = false
|
||||||
|
|
||||||
self.animation:setState("down")
|
self.animation:setState("down")
|
||||||
@ -173,7 +173,7 @@ function Player:handleMovementAndCollisions()
|
|||||||
self:boom()
|
self:boom()
|
||||||
return
|
return
|
||||||
elseif collisionTag == 154 then -- Baleba
|
elseif collisionTag == 154 then -- Baleba
|
||||||
--self:boom(collisionObject)
|
self:boom(collisionObject)
|
||||||
return
|
return
|
||||||
elseif collisionTag == 2 then -- Tank
|
elseif collisionTag == 2 then -- Tank
|
||||||
self:boom()
|
self:boom()
|
||||||
|
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
|
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
|