Compare commits

...

3 Commits

Author SHA1 Message Date
43512c90c7
alpha 0.1 2024-06-10 01:50:27 +03:00
4d7f25c027
assemble minigame 2024-06-04 21:21:40 +03:00
2d7f65d7fb
new cool backgroud 2024-06-03 21:15:23 +03:00
45 changed files with 2318 additions and 56 deletions

Binary file not shown.

View 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

File diff suppressed because one or more lines are too long

View 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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 628 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -1,5 +0,0 @@
-- These are example strings.
"menuResumeGame" = "Resume"
"menuNewGame" = "New Game"
"menuOptions" = "Options"
"menuCredits" = "Credits"

View File

@ -1,5 +0,0 @@
-- These are example strings.
"menuResumeGame" = "サイカイ "
"menuNewGame" = "アタラシイゲーム"
"menuOptions" = "セッテイ"
"menuCredits" = "クレジット"

View File

@ -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)

View File

@ -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
View 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

View 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

View File

@ -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)
if scene.tank ~= nil then
scene.tank:remove()
end
scene.telemLostSound:stop()
scene.levelAudio:stop()
scene.balebaSpawner:remove()

View File

@ -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,6 +24,9 @@ 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)
@ -56,10 +57,10 @@ function scene:init()
end
end,
AButtonDown = function()
menuConfirmSound:play(1)
self.menu:click()
end
}
end
function scene:enter()
@ -89,10 +90,9 @@ function scene:update()
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,7 +102,7 @@ function scene:exit()
end
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("Credits", function() return end)
__menu:select("Start")

View File

@ -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()

View 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

View 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

View File

@ -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

View 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