Compare commits
3455 Commits
v0.12.0
...
test-new-m
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
707bcca368 | ||
|
|
f8f115de10 | ||
|
|
b07c4dc53a | ||
|
|
6eeddba773 | ||
|
|
0cfe4df468 | ||
|
|
eb5c3c3be5 | ||
|
|
a5b9206694 | ||
|
|
375e67bdc4 | ||
|
|
724a576aa3 | ||
|
|
ed47dcb90c | ||
|
|
64b08a5a4d | ||
|
|
baed0153a2 | ||
|
|
46d95b33e4 | ||
|
|
200d270fee | ||
|
|
a8628275a0 | ||
|
|
20a1d2bcc1 | ||
|
|
b887a1f096 | ||
|
|
9bf0e9f28d | ||
|
|
dfc724767b | ||
|
|
f0e66e9dc5 | ||
|
|
0932335f0b | ||
|
|
a9b39e396a | ||
|
|
2e0ceaae72 | ||
|
|
04f38d2eb6 | ||
|
|
fc1ed4dff6 | ||
|
|
f8935d3dd7 | ||
|
|
a86228677f | ||
|
|
79df9f7876 | ||
|
|
12ea2d76be | ||
|
|
485bd72241 | ||
|
|
7240275075 | ||
|
|
29ef9b8d15 | ||
|
|
97f4795d4e | ||
|
|
226e45b24d | ||
|
|
d6ab7e72b2 | ||
|
|
168f44b8b3 | ||
|
|
b73f646a4c | ||
|
|
36cefcc000 | ||
|
|
f901c25c87 | ||
|
|
6d8478b029 | ||
|
|
9bcb040019 | ||
|
|
d977087fc0 | ||
|
|
1a330771d7 | ||
|
|
9c8c9f2106 | ||
|
|
0498beecdf | ||
|
|
8e075adf8f | ||
|
|
60f2a0e647 | ||
|
|
b642f2b5c4 | ||
|
|
2b80f72c6b | ||
|
|
462720881a | ||
|
|
3dda0254a8 | ||
|
|
054a52a445 | ||
|
|
85242d808b | ||
|
|
57241677a9 | ||
|
|
6ccdee2a53 | ||
|
|
a3d2b7b7f3 | ||
|
|
b7b28b4ae3 | ||
|
|
30748200dd | ||
|
|
c9f8240234 | ||
|
|
5c7082e886 | ||
|
|
9a3c889a9d | ||
|
|
f41f58e13f | ||
|
|
e81f25c216 | ||
|
|
36fc681fbf | ||
|
|
87e5e29129 | ||
|
|
b432fdf90a | ||
|
|
6e78a3fedd | ||
|
|
24760801af | ||
|
|
f5e8e0f7a5 | ||
|
|
df089a2f04 | ||
|
|
6600713f4b | ||
|
|
96dad762b2 | ||
|
|
5470387685 | ||
|
|
fa64c868b9 | ||
|
|
2f4a416353 | ||
|
|
3dbafb042c | ||
|
|
97e7b019dd | ||
|
|
28103ad952 | ||
|
|
1826ca6f2f | ||
|
|
db490a6c6c | ||
|
|
421fdef4f9 | ||
|
|
d717ce842d | ||
|
|
f13c9792af | ||
|
|
41e7b8e0f4 | ||
|
|
4bd723a7ee | ||
|
|
66d5bd5490 | ||
|
|
351d0258b2 | ||
|
|
26fb9a7052 | ||
|
|
307fd637fa | ||
|
|
93fb716f89 | ||
|
|
7b41551e2d | ||
|
|
4806af5f7d | ||
|
|
85cb55cdd0 | ||
|
|
27a9697e47 | ||
|
|
7d230cc3b0 | ||
|
|
0db2fffad1 | ||
|
|
2a3296a0e8 | ||
|
|
941b875afa | ||
|
|
99155bb9cf | ||
|
|
0701dd2ad3 | ||
|
|
5570c19e1f | ||
|
|
a728c91476 | ||
|
|
6a43481067 | ||
|
|
29a049fe4e | ||
|
|
b5a9c8e1bb | ||
|
|
bb9a35c161 | ||
|
|
b25a345b42 | ||
|
|
b22b0e0194 | ||
|
|
55cf95f218 | ||
|
|
225ddbcfac | ||
|
|
9377090c7c | ||
|
|
ed002ec2e1 | ||
|
|
e33036d9ec | ||
|
|
ef03e7c009 | ||
|
|
aef4220ac0 | ||
|
|
46223e38cd | ||
|
|
4bafa4bffe | ||
|
|
2b3dd877dd | ||
|
|
0553e5c45e | ||
|
|
4d93374cf6 | ||
|
|
4e421bf9ba | ||
|
|
8b2a9d7c01 | ||
|
|
5a3244d345 | ||
|
|
f1b9d0c5e4 | ||
|
|
6493e0e623 | ||
|
|
e71ba17f9f | ||
|
|
e656363e20 | ||
|
|
0826a748ae | ||
|
|
a595fe99ef | ||
|
|
9dbc7942e3 | ||
|
|
845d8ae32e | ||
|
|
5c524e138c | ||
|
|
86d9265ff9 | ||
|
|
6994a5d6d3 | ||
|
|
e6213b00c1 | ||
|
|
43e2caa30e | ||
|
|
97ca245dfc | ||
|
|
36de1c0751 | ||
|
|
704341fd15 | ||
|
|
22b61bc9c3 | ||
|
|
f4cbbc0a2a | ||
|
|
dc99187b9d | ||
|
|
915598dec4 | ||
|
|
e7b4518d73 | ||
|
|
9603a78e87 | ||
|
|
bd90e051d4 | ||
|
|
26e66b313f | ||
|
|
c534bbd12a | ||
|
|
83b5e217e5 | ||
|
|
c0adf5bf0b | ||
|
|
4ff737a4ac | ||
|
|
5af0706c09 | ||
|
|
4ccee0f1de | ||
|
|
9b752d540e | ||
|
|
e860c7b7ec | ||
|
|
8a1fd9531f | ||
|
|
5fd6e0ee99 | ||
|
|
53b2b81fe0 | ||
|
|
6ccc811b46 | ||
|
|
962a61567a | ||
|
|
58f05e1cec | ||
|
|
6b426790c7 | ||
|
|
d4fc578673 | ||
|
|
51b567b8db | ||
|
|
07b47dee3f | ||
|
|
4431a906b9 | ||
|
|
2bb6852e3e | ||
|
|
1948ed3e16 | ||
|
|
81b5ccae30 | ||
|
|
5543ff0d29 | ||
|
|
cd567e9e98 | ||
|
|
5d86925a8a | ||
|
|
e3db564a4b | ||
|
|
a4293624ab | ||
|
|
367e2dc81a | ||
|
|
9ec33c6eef | ||
|
|
9c9b8d36f2 | ||
|
|
4fc6f335c7 | ||
|
|
d2f4123d08 | ||
|
|
b29d352a1b | ||
|
|
cd5a71cd12 | ||
|
|
cdd68e985d | ||
|
|
8cf4d4280c | ||
|
|
cd29bf8702 | ||
|
|
13d98be051 | ||
|
|
a350ff3182 | ||
|
|
e0360cc7eb | ||
|
|
4249a29b63 | ||
|
|
43b2a0a8c8 | ||
|
|
6d6584f99e | ||
|
|
077c651226 | ||
|
|
3fc872aa76 | ||
|
|
cb0b347a38 | ||
|
|
d08967c688 | ||
|
|
3666c0caa9 | ||
|
|
4ef179fccb | ||
|
|
861f9b3caa | ||
|
|
05292df456 | ||
|
|
9fed692223 | ||
|
|
b1c04c1fea | ||
|
|
bc9adc2cd3 | ||
|
|
cdf149afca | ||
|
|
73145b4e5e | ||
|
|
f8b9f30fd6 | ||
|
|
e6bc567b12 | ||
|
|
fe004a72f0 | ||
|
|
0433fd3d9d | ||
|
|
1c18060570 | ||
|
|
be54c0e641 | ||
|
|
0be2eb9107 | ||
|
|
4859faf1e7 | ||
|
|
c25d40c67d | ||
|
|
b6c37a5c9f | ||
|
|
f6b4c1b109 | ||
|
|
841faeede4 | ||
|
|
e61b9b23a0 | ||
|
|
72a826ef0a | ||
|
|
f070b8f295 | ||
|
|
1646b75520 | ||
|
|
241617e31a | ||
|
|
5de2893e07 | ||
|
|
030e894040 | ||
|
|
e7b9a4ba87 | ||
|
|
617bae67c6 | ||
|
|
64d2d08820 | ||
|
|
037b33c99a | ||
|
|
afa69ce9a4 | ||
|
|
3226c0c831 | ||
|
|
4e759cad4c | ||
|
|
291795928d | ||
|
|
a1315e7f7f | ||
|
|
657bc2b4e0 | ||
|
|
d8b12fc55d | ||
|
|
6d11367ea4 | ||
|
|
eb9e741b4f | ||
|
|
c47546d501 | ||
|
|
11aa178fc1 | ||
|
|
f3a88ef269 | ||
|
|
720dc2131f | ||
|
|
701ef17ae1 | ||
|
|
1a689a5f07 | ||
|
|
ef12ab0cee | ||
|
|
3d26db7a01 | ||
|
|
dd3df9981b | ||
|
|
5d04e83529 | ||
|
|
7ed4626d71 | ||
|
|
ecf5a29a71 | ||
|
|
1a24b346a0 | ||
|
|
72d06c7a02 | ||
|
|
26fde8c694 | ||
|
|
8adeb99be7 | ||
|
|
c92f15156b | ||
|
|
63f69d712b | ||
|
|
55a1bd06f3 | ||
|
|
6a29abf7f0 | ||
|
|
83bdd9f2c4 | ||
|
|
95879827c8 | ||
|
|
2ade518207 | ||
|
|
36c8449e4d | ||
|
|
3c04df69f3 | ||
|
|
1224ee9a67 | ||
|
|
fdd1d4463a | ||
|
|
940ac3736c | ||
|
|
d38897b54d | ||
|
|
90848c6654 | ||
|
|
0220d5aefc | ||
|
|
f42032df07 | ||
|
|
05d7eb60bc | ||
|
|
942416317c | ||
|
|
576de945fb | ||
|
|
8b02084428 | ||
|
|
9f666d69db | ||
|
|
a4c52d9162 | ||
|
|
592b11366e | ||
|
|
07f50b9243 | ||
|
|
ec74d55686 | ||
|
|
4518513e87 | ||
|
|
7df4e2144f | ||
|
|
7f9c9248ce | ||
|
|
9c1db48804 | ||
|
|
0628830f0c | ||
|
|
9436f2f5fb | ||
|
|
c5e1b5617f | ||
|
|
298c417aa3 | ||
|
|
fc74831700 | ||
|
|
d9db55de44 | ||
|
|
3fd205e8c2 | ||
|
|
5cb828fb92 | ||
|
|
5f7a3fd53f | ||
|
|
8e3e598753 | ||
|
|
2a0a0f60f8 | ||
|
|
6b7d1fdf9f | ||
|
|
65199a40f7 | ||
|
|
f9082a8800 | ||
|
|
1670c6e7d6 | ||
|
|
ff2073ed4d | ||
|
|
f14aaac635 | ||
|
|
c709fa622f | ||
|
|
c752556bf3 | ||
|
|
e7d9703fcc | ||
|
|
1ed52a84b0 | ||
|
|
4fdb278751 | ||
|
|
8318803923 | ||
|
|
42de7e3676 | ||
|
|
3efa646ee3 | ||
|
|
b414c2ab42 | ||
|
|
205dea3db7 | ||
|
|
6cac688555 | ||
|
|
09b1b08c1e | ||
|
|
b61a1270e9 | ||
|
|
b85cee7e1f | ||
|
|
8e674e3e29 | ||
|
|
aa2812c874 | ||
|
|
6f282431c4 | ||
|
|
470e54cdd0 | ||
|
|
da3ef1c2a6 | ||
|
|
9efe0e62d5 | ||
|
|
7038f81b46 | ||
|
|
de972a60df | ||
|
|
6a87787d6f | ||
|
|
6dc9a4b507 | ||
|
|
5b7c888d57 | ||
|
|
a1f761b83e | ||
|
|
c40a6bfaa0 | ||
|
|
441c6f7667 | ||
|
|
a07d57cf71 | ||
|
|
a467f972f9 | ||
|
|
3f455ee360 | ||
|
|
7a0b913768 | ||
|
|
a7b240ade8 | ||
|
|
bb64404821 | ||
|
|
caf92eb3c8 | ||
|
|
6a117a0fab | ||
|
|
26682509f7 | ||
|
|
d85d92fb43 | ||
|
|
c412003cb3 | ||
|
|
e39b5dbd51 | ||
|
|
db162ea66f | ||
|
|
f9f9fde368 | ||
|
|
4b221c2eb5 | ||
|
|
ed45bebfa0 | ||
|
|
fa0bc3805f | ||
|
|
7710f0b70f | ||
|
|
0277ddadb5 | ||
|
|
88e23e32f5 | ||
|
|
8ab5b4a17a | ||
|
|
503dfd69ef | ||
|
|
ae61ec26c0 | ||
|
|
00bc24bd50 | ||
|
|
abd15d6307 | ||
|
|
c01ac546d1 | ||
|
|
af77221ba2 | ||
|
|
204f0938d3 | ||
|
|
ad39d1408c | ||
|
|
ed011173f6 | ||
|
|
491fcb5860 | ||
|
|
c2d5537d8d | ||
|
|
7d5037ae87 | ||
|
|
07d7714317 | ||
|
|
2cab97f37d | ||
|
|
d184778c9a | ||
|
|
9fd3b3008d | ||
|
|
71aa35b214 | ||
|
|
4443dc9d3e | ||
|
|
839e357301 | ||
|
|
ac56c5a415 | ||
|
|
36e3343341 | ||
|
|
510f7d7513 | ||
|
|
3128eb38c0 | ||
|
|
14ef654612 | ||
|
|
bc5193f95e | ||
|
|
8cbb4a38bc | ||
|
|
fce08c83ef | ||
|
|
018e99f9e6 | ||
|
|
7fe390b34b | ||
|
|
8c7202c569 | ||
|
|
ab386bb53c | ||
|
|
87c791b8c7 | ||
|
|
00e3e2d19d | ||
|
|
8d7d5c7b04 | ||
|
|
849a18e159 | ||
|
|
a4357d0843 | ||
|
|
e2b4a78b59 | ||
|
|
01387b5488 | ||
|
|
168e2f80b8 | ||
|
|
4f79ef8708 | ||
|
|
16497833df | ||
|
|
cd6a50d5a0 | ||
|
|
4c5a61f2d8 | ||
|
|
1fd8d39970 | ||
|
|
d133d64890 | ||
|
|
b27aa8b60d | ||
|
|
230d67492e | ||
|
|
4f9d5b282c | ||
|
|
a2955e8722 | ||
|
|
df892671d5 | ||
|
|
7fa96eee1a | ||
|
|
a1030906c7 | ||
|
|
e6a9a4f4be | ||
|
|
efa1247596 | ||
|
|
069fcee721 | ||
|
|
66621404f1 | ||
|
|
e09609ea21 | ||
|
|
d02ae67bc0 | ||
|
|
27327d57c4 | ||
|
|
cce93b6df9 | ||
|
|
546104ba5b | ||
|
|
ca5816ba14 | ||
|
|
e5bd16476e | ||
|
|
94431d4c2e | ||
|
|
f98d6892f1 | ||
|
|
1fe436cbe3 | ||
|
|
c5a37a9920 | ||
|
|
eed7e96096 | ||
|
|
a7f36a4162 | ||
|
|
8ba872d45d | ||
|
|
7a55451faa | ||
|
|
372571bd80 | ||
|
|
77120c0b90 | ||
|
|
01d1e44644 | ||
|
|
0ad8cddefe | ||
|
|
ce67253502 | ||
|
|
cb9f2c0617 | ||
|
|
635d9407ed | ||
|
|
0f9f6565f1 | ||
|
|
a45b6ad57e | ||
|
|
a5de06dedb | ||
|
|
fbfbd1ed98 | ||
|
|
8f06b3bd1a | ||
|
|
7e0dbceefc | ||
|
|
7e3db1de17 | ||
|
|
111790fdab | ||
|
|
bec03de7b8 | ||
|
|
f5dfae3a6c | ||
|
|
d3dec2b5f1 | ||
|
|
f083136998 | ||
|
|
cd3d0b370c | ||
|
|
f4c6632941 | ||
|
|
750cb9a669 | ||
|
|
62a198a017 | ||
|
|
5780ba0f3e | ||
|
|
86edeb1e0c | ||
|
|
53b1852f28 | ||
|
|
e3c385693b | ||
|
|
572c0fbfa1 | ||
|
|
bbdf71167a | ||
|
|
2136ccd9a2 | ||
|
|
2131aea575 | ||
|
|
32b21c7d29 | ||
|
|
8f6f6f316f | ||
|
|
66f9ac2791 | ||
|
|
ac0ba90438 | ||
|
|
990659ce91 | ||
|
|
00c602c844 | ||
|
|
9db62ffc39 | ||
|
|
e7c777e502 | ||
|
|
4991e8cea2 | ||
|
|
111d4e991f | ||
|
|
bedfa74a32 | ||
|
|
f6944dc223 | ||
|
|
a34a3051a3 | ||
|
|
0e13883faf | ||
|
|
e8860eda1b | ||
|
|
33ba4820b3 | ||
|
|
5ed0dda8ab | ||
|
|
bd260b2c6f | ||
|
|
aa01ab07f7 | ||
|
|
684cb90a7d | ||
|
|
172101ed55 | ||
|
|
98b5914726 | ||
|
|
d1518e7ba4 | ||
|
|
72d4faa52a | ||
|
|
862dcbf806 | ||
|
|
3db28f5136 | ||
|
|
f9e37f3c6a | ||
|
|
457681e6ec | ||
|
|
904bcf6852 | ||
|
|
e21e57ff84 | ||
|
|
562a69831a | ||
|
|
706a683540 | ||
|
|
8e2aee5e84 | ||
|
|
c009893377 | ||
|
|
3ae128d4c3 | ||
|
|
cb2164c21d | ||
|
|
951b7407fc | ||
|
|
f68facbe0e | ||
|
|
5535366bb1 | ||
|
|
d75b709f23 | ||
|
|
5a1fd0ca4d | ||
|
|
f4b85e0dbb | ||
|
|
c38bceb87e | ||
|
|
2569e8844e | ||
|
|
e42fa8351e | ||
|
|
9582a625ff | ||
|
|
81abb06f7b | ||
|
|
7cfea0eebe | ||
|
|
01c2bfe955 | ||
|
|
70242e6a07 | ||
|
|
c1edba974f | ||
|
|
546b3f230d | ||
|
|
14593eb487 | ||
|
|
838621a3ae | ||
|
|
283d4a5fce | ||
|
|
490cf44132 | ||
|
|
9dcbd86fc3 | ||
|
|
0a15011ec7 | ||
|
|
f7dfe1d869 | ||
|
|
5e9c9cb5fa | ||
|
|
c485c26c93 | ||
|
|
137d9296cd | ||
|
|
11b144da74 | ||
|
|
25ef9d9886 | ||
|
|
0e1e279209 | ||
|
|
a960897a83 | ||
|
|
69ab7849c5 | ||
|
|
bc55c3d892 | ||
|
|
cee1c41c35 | ||
|
|
6c5fe2463e | ||
|
|
880ce376b3 | ||
|
|
5a8b573bb7 | ||
|
|
ab1e750fa4 | ||
|
|
f6f4e1cd1a | ||
|
|
2a9549b106 | ||
|
|
1ed7ee3952 | ||
|
|
a69fc35f5a | ||
|
|
28e83dcf02 | ||
|
|
8c6df74237 | ||
|
|
d86cd6a8c6 | ||
|
|
c40d411d63 | ||
|
|
aca63abf49 | ||
|
|
4733615c4b | ||
|
|
80e5469653 | ||
|
|
4ea2cb18c7 | ||
|
|
840be65198 | ||
|
|
5a568df6cd | ||
|
|
cf57161174 | ||
|
|
7847e72f63 | ||
|
|
00999426b9 | ||
|
|
188da8b6ff | ||
|
|
59182b0ec8 | ||
|
|
6ced935c22 | ||
|
|
ad50475bb6 | ||
|
|
9c40f4918c | ||
|
|
62c802d2c3 | ||
|
|
3294760f6d | ||
|
|
85d72a1ee5 | ||
|
|
e02bb0f23c | ||
|
|
b0465775dc | ||
|
|
bd4b28e052 | ||
|
|
c6c5c849b4 | ||
|
|
cc5c3db1c1 | ||
|
|
f60236f06e | ||
|
|
bd63584207 | ||
|
|
e5fd3f6c9f | ||
|
|
423173413f | ||
|
|
a136d01da5 | ||
|
|
8ab675baf0 | ||
|
|
8d8e537cd4 | ||
|
|
d3b117a23f | ||
|
|
007982c481 | ||
|
|
ff9b0abfc7 | ||
|
|
275e983f55 | ||
|
|
bccb0b9976 | ||
|
|
d5f01537f8 | ||
|
|
6029363af8 | ||
|
|
cde61a57b8 | ||
|
|
2fc1768a7a | ||
|
|
50d73bcc1e | ||
|
|
0f570be7e5 | ||
|
|
658e6f7fdd | ||
|
|
d651932d9a | ||
|
|
6167c9f317 | ||
|
|
33acf06a71 | ||
|
|
9833e759cc | ||
|
|
918bb09d54 | ||
|
|
9a0a396872 | ||
|
|
6c6dc654e6 | ||
|
|
00c0cc3d9e | ||
|
|
0eb0fd3311 | ||
|
|
4e3823616d | ||
|
|
7450bae6d2 | ||
|
|
a2ddaf5341 | ||
|
|
b266a0ae57 | ||
|
|
ac9e649e02 | ||
|
|
506e1a4c1d | ||
|
|
c9d74a4cdf | ||
|
|
0ff2e6e273 | ||
|
|
c4c6ab3130 | ||
|
|
bc5b7638db | ||
|
|
2db147461c | ||
|
|
716c44746b | ||
|
|
0278a3ad47 | ||
|
|
3601047ffb | ||
|
|
8013319c14 | ||
|
|
b4f14bcb5b | ||
|
|
406beab9d6 | ||
|
|
58a8828503 | ||
|
|
fd563b732c | ||
|
|
30093f9db5 | ||
|
|
2f16c54cde | ||
|
|
bca7f2e19b | ||
|
|
2696106f96 | ||
|
|
9f7692f91c | ||
|
|
48b2ff5416 | ||
|
|
81104d7004 | ||
|
|
b56103f247 | ||
|
|
0923cf3acf | ||
|
|
fffb7d0188 | ||
|
|
f02124de0c | ||
|
|
a1a77f291b | ||
|
|
31bb7f62c6 | ||
|
|
bfb5fc3f5e | ||
|
|
ac2e53adc7 | ||
|
|
46e8e161d0 | ||
|
|
68e2255e1b | ||
|
|
222c1b5bba | ||
|
|
59c63da36f | ||
|
|
89fb7a7659 | ||
|
|
ea02bc470a | ||
|
|
361dc576f3 | ||
|
|
395ad907b8 | ||
|
|
bf5cdb1b99 | ||
|
|
45f9c80888 | ||
|
|
b80a72785b | ||
|
|
20ab916f9c | ||
|
|
76bfaa870e | ||
|
|
10ed702c2e | ||
|
|
e236be7a62 | ||
|
|
2fbd183322 | ||
|
|
14df29ce21 | ||
|
|
cb3d9e4862 | ||
|
|
d9a82878bf | ||
|
|
e484bef6df | ||
|
|
c8d358cc64 | ||
|
|
013765d5d2 | ||
|
|
ed2b07d5cf | ||
|
|
8d0780cef4 | ||
|
|
2ba25014c6 | ||
|
|
033a770759 | ||
|
|
b7832c133a | ||
|
|
93af618fa0 | ||
|
|
d4539c3a23 | ||
|
|
3d70a5ac79 | ||
|
|
f40b2f75bd | ||
|
|
46a49050b9 | ||
|
|
fb4fd15687 | ||
|
|
f3e18de45f | ||
|
|
fd3b187d32 | ||
|
|
820b555924 | ||
|
|
f8a0e67a2e | ||
|
|
99e77969ad | ||
|
|
fdb6276869 | ||
|
|
221e252acb | ||
|
|
dea01ffed6 | ||
|
|
166769e7e1 | ||
|
|
86d3314cb2 | ||
|
|
13a08298b7 | ||
|
|
66d2323626 | ||
|
|
cd432e3b3f | ||
|
|
cbf73f5194 | ||
|
|
5cd03f40f6 | ||
|
|
25b5f53f34 | ||
|
|
f9902a6ea5 | ||
|
|
0099bf53cb | ||
|
|
e6a8cf7a10 | ||
|
|
9b6855b424 | ||
|
|
6df8383580 | ||
|
|
b12663f404 | ||
|
|
66d3df0c10 | ||
|
|
a61e74c004 | ||
|
|
3d0a39dd34 | ||
|
|
6f643b8a1b | ||
|
|
d39cc71240 | ||
|
|
501fab147d | ||
|
|
6ee6cd7a1e | ||
|
|
7d5586d9a1 | ||
|
|
db78d713e7 | ||
|
|
ece5dfb799 | ||
|
|
1cb6b82f25 | ||
|
|
b0728650df | ||
|
|
48b4049d90 | ||
|
|
7f8efcdf41 | ||
|
|
dfa356e9d9 | ||
|
|
964537219a | ||
|
|
07eecc860f | ||
|
|
faf25008f9 | ||
|
|
116a3563bb | ||
|
|
6880c88301 | ||
|
|
8590f4c383 | ||
|
|
ff1e034a87 | ||
|
|
b36948cf30 | ||
|
|
c01df71fd4 | ||
|
|
7d90571d50 | ||
|
|
0cc7e121c8 | ||
|
|
060cdbbf51 | ||
|
|
769a654ed6 | ||
|
|
469899e8eb | ||
|
|
024e0df8e1 | ||
|
|
7603829942 | ||
|
|
ad91ac9c93 | ||
|
|
7a22dead81 | ||
|
|
73bc5dd30e | ||
|
|
154157b976 | ||
|
|
c5551a1b64 | ||
|
|
0d292446a2 | ||
|
|
7ba0d0d3a0 | ||
|
|
88bd9216d0 | ||
|
|
d8b728a6b3 | ||
|
|
26acecb8e4 | ||
|
|
b64234a7a3 | ||
|
|
1ca5fd7204 | ||
|
|
6868d53224 | ||
|
|
993866ab5b | ||
|
|
3eddb524d0 | ||
|
|
956316c327 | ||
|
|
88ff734ec7 | ||
|
|
3fb6b34a1e | ||
|
|
81a4429767 | ||
|
|
73bf974b1c | ||
|
|
693fb9f43f | ||
|
|
b3e65aea9f | ||
|
|
bb149f9890 | ||
|
|
26d2c8188d | ||
|
|
051d45edce | ||
|
|
6e35d7683c | ||
|
|
da405793da | ||
|
|
ef9aa8e195 | ||
|
|
7899c3a49f | ||
|
|
3394409183 | ||
|
|
300cf10413 | ||
|
|
8203f75cc9 | ||
|
|
10e0453a54 | ||
|
|
b131c34717 | ||
|
|
94a0f44fc5 | ||
|
|
8a47d7dc0f | ||
|
|
7a18c86927 | ||
|
|
958a296662 | ||
|
|
d932a0a990 | ||
|
|
3060d89ed4 | ||
|
|
54447e187a | ||
|
|
e4d62cc4af | ||
|
|
83a1770bac | ||
|
|
fd9793a42f | ||
|
|
47ba8fe0af | ||
|
|
639df50a31 | ||
|
|
bded1eab15 | ||
|
|
4a06c7b0bb | ||
|
|
08775dcca9 | ||
|
|
011fd8d175 | ||
|
|
f2ef3644aa | ||
|
|
b3a319b336 | ||
|
|
667a39dfd3 | ||
|
|
8f9b9952ea | ||
|
|
444e39ce33 | ||
|
|
74ad038f21 | ||
|
|
00401befca | ||
|
|
f5bffd6f74 | ||
|
|
63ac23a999 | ||
|
|
41e4cacdd8 | ||
|
|
a61e0086e0 | ||
|
|
6f7ebb4cbf | ||
|
|
43db02f97d | ||
|
|
3d4c51c532 | ||
|
|
45718eb41a | ||
|
|
90d51b979a | ||
|
|
6261256dea | ||
|
|
b1a508f209 | ||
|
|
17eedeaf38 | ||
|
|
733919e1df | ||
|
|
7f7eec18bc | ||
|
|
7c70f8c9bc | ||
|
|
9473364fde | ||
|
|
f8fc909fe6 | ||
|
|
d5a42f2316 | ||
|
|
9837330be0 | ||
|
|
c99bc2c38d | ||
|
|
9896918c35 | ||
|
|
0e605c66c4 | ||
|
|
4bf7ef0e25 | ||
|
|
438fef9f26 | ||
|
|
489a00e2d2 | ||
|
|
a1dd5b4188 | ||
|
|
3b5c66d192 | ||
|
|
10df10abfd | ||
|
|
4e0607b09c | ||
|
|
96f8f2cb28 | ||
|
|
4d91b92a33 | ||
|
|
9ad96608cf | ||
|
|
73f4dcd828 | ||
|
|
95cff8b986 | ||
|
|
f2ffdc9e58 | ||
|
|
702abbf7b1 | ||
|
|
cc0076a204 | ||
|
|
3f64d1044b | ||
|
|
28a0dd8b97 | ||
|
|
1787dbde4d | ||
|
|
6c10bff565 | ||
|
|
479fec4c59 | ||
|
|
1533e0fe74 | ||
|
|
242416a25d | ||
|
|
03689c6a0b | ||
|
|
2e9f1c18e5 | ||
|
|
c405cd93be | ||
|
|
99bbff0d34 | ||
|
|
653debbbc2 | ||
|
|
2279eb8e31 | ||
|
|
f475fafbf1 | ||
|
|
52bb86ad78 | ||
|
|
535a590ffd | ||
|
|
b2143557bd | ||
|
|
a6c47f5122 | ||
|
|
fddb2db8c7 | ||
|
|
da58578d33 | ||
|
|
391821bf16 | ||
|
|
7ae314fb2c | ||
|
|
7b141a5eaa | ||
|
|
0b1357c2ee | ||
|
|
417072bf00 | ||
|
|
ff0fa1802d | ||
|
|
07e07e61ee | ||
|
|
4f939d7ea4 | ||
|
|
9fa4b97e5e | ||
|
|
b890813732 | ||
|
|
f9650c565c | ||
|
|
6eca35759f | ||
|
|
c927e58ce4 | ||
|
|
4c7ba04274 | ||
|
|
bb60813323 | ||
|
|
4fc7dd447e | ||
|
|
dc0b39d6b5 | ||
|
|
84058f9833 | ||
|
|
d78fc5bf9c | ||
|
|
d839037c09 | ||
|
|
cfe0ef8864 | ||
|
|
e2d12d766f | ||
|
|
e73647780c | ||
|
|
1de11365c1 | ||
|
|
7ebf8aca5b | ||
|
|
58b8f354e0 | ||
|
|
2bfcc7e0f2 | ||
|
|
a7ddc69679 | ||
|
|
86d1f9470e | ||
|
|
57a233d51b | ||
|
|
a021fcd951 | ||
|
|
3bfa49236e | ||
|
|
0e52416a9b | ||
|
|
a0f8258cad | ||
|
|
a2da057581 | ||
|
|
56cbe4c5b6 | ||
|
|
48c9bd6dfd | ||
|
|
a30b69db4c | ||
|
|
e57ddbb6eb | ||
|
|
f1068eacd8 | ||
|
|
b762741a6e | ||
|
|
1f59aaca43 | ||
|
|
53d4fd8547 | ||
|
|
0eea1ae0c6 | ||
|
|
43a2ca9407 | ||
|
|
30ed4179d6 | ||
|
|
6f715a663a | ||
|
|
1d30623222 | ||
|
|
4db71b4b0d | ||
|
|
fe6d698b74 | ||
|
|
7393b3c716 | ||
|
|
493fcb2f05 | ||
|
|
47c509c0a7 | ||
|
|
c98783d33f | ||
|
|
b71c9d7bf3 | ||
|
|
25ed49f1a6 | ||
|
|
cb0a3314b6 | ||
|
|
3880197d02 | ||
|
|
ec04da06d7 | ||
|
|
4654e9f7c7 | ||
|
|
fc3517584d | ||
|
|
8677e98a24 | ||
|
|
152dc13ded | ||
|
|
76ab6282a9 | ||
|
|
61b264cd70 | ||
|
|
3714fea994 | ||
|
|
e1a820d1f9 | ||
|
|
3f94dadcef | ||
|
|
e67d6ce53c | ||
|
|
13cf53e885 | ||
|
|
f95be0996d | ||
|
|
dbc5a1e45c | ||
|
|
dd30e4b3ec | ||
|
|
9468c0435a | ||
|
|
4be5933dc8 | ||
|
|
fe5ba06328 | ||
|
|
a2f5db8d3c | ||
|
|
b48e65a9d8 | ||
|
|
18471a201f | ||
|
|
1d61a3af8b | ||
|
|
e4f5b8f95c | ||
|
|
d31ab133f4 | ||
|
|
dcc15dd42b | ||
|
|
280f2c0af5 | ||
|
|
890264ef7d | ||
|
|
e9d58a4f74 | ||
|
|
9020798f90 | ||
|
|
7167df10e6 | ||
|
|
8bedd7aa2a | ||
|
|
357e747391 | ||
|
|
8c11721c75 | ||
|
|
da13235c88 | ||
|
|
aababce74c | ||
|
|
a395004027 | ||
|
|
0489394d67 | ||
|
|
4cde774cc2 | ||
|
|
baa2b105d3 | ||
|
|
9667d9ffa8 | ||
|
|
b8b85b569c | ||
|
|
27f2d05c56 | ||
|
|
49e1c0758d | ||
|
|
2299eb0e33 | ||
|
|
b6e17594c6 | ||
|
|
19c2724e8b | ||
|
|
7f4591bcec | ||
|
|
4de7ee4ce0 | ||
|
|
eb6f1718a8 | ||
|
|
36ce09c4f1 | ||
|
|
1994a615c2 | ||
|
|
82b75a5aa9 | ||
|
|
2ec91f58ae | ||
|
|
e9cd7ef5ca | ||
|
|
29aff06b1d | ||
|
|
18f3414f34 | ||
|
|
a7b236d528 | ||
|
|
46fdf03925 | ||
|
|
f67f31baa2 | ||
|
|
1fcbb8ea7d | ||
|
|
60ef682c80 | ||
|
|
c668a22345 | ||
|
|
cb69f011e5 | ||
|
|
176e96fd1f | ||
|
|
43e550b9b2 | ||
|
|
ee139d5ff0 | ||
|
|
5c5ec3e16c | ||
|
|
da82d679ce | ||
|
|
834a08d58d | ||
|
|
395485527e | ||
|
|
8c9fd45fcc | ||
|
|
59356b9f28 | ||
|
|
bb3cc84ca4 | ||
|
|
ac2c708d01 | ||
|
|
57497dbd74 | ||
|
|
827d0cdf5a | ||
|
|
e3539f17bd | ||
|
|
b88580ad9a | ||
|
|
8d8cceaeea | ||
|
|
290c7988b2 | ||
|
|
f97767aff4 | ||
|
|
fae14d4f9b | ||
|
|
699247266e | ||
|
|
5c8b80741f | ||
|
|
e5287d876b | ||
|
|
b3e6e42790 | ||
|
|
fce5b9696f | ||
|
|
f252ed63d5 | ||
|
|
3114d3a27d | ||
|
|
e186bfe80d | ||
|
|
3db2a4b30d | ||
|
|
1c25138eaf | ||
|
|
1807c95c53 | ||
|
|
7ea78ee48a | ||
|
|
5d57feaea5 | ||
|
|
f4583e46bf | ||
|
|
5ed00a67c4 | ||
|
|
0148c539be | ||
|
|
51cdf864be | ||
|
|
bd9ee49255 | ||
|
|
16c377427a | ||
|
|
66dcfa40b0 | ||
|
|
e726ef505f | ||
|
|
a686a2e9d1 | ||
|
|
720ee71f8b | ||
|
|
557cdf6cfb | ||
|
|
6b93675ec1 | ||
|
|
9419c4c639 | ||
|
|
7eb243a18f | ||
|
|
3a2b531d4c | ||
|
|
05068f8df5 | ||
|
|
a6d80667c1 | ||
|
|
a0dccadfd7 | ||
|
|
7992eab16c | ||
|
|
a1c6f720a2 | ||
|
|
a1162f1b0f | ||
|
|
80f21ae2f0 | ||
|
|
fce8623595 | ||
|
|
e82a5c8026 | ||
|
|
517d4cfc82 | ||
|
|
7f7f7e752e | ||
|
|
5963db479e | ||
|
|
96266ab310 | ||
|
|
c7f6b396e0 | ||
|
|
b7ca91f9e2 | ||
|
|
9ec7cdb070 | ||
|
|
3e1220fa0e | ||
|
|
660946215e | ||
|
|
a7b38335c9 | ||
|
|
e4803cc89d | ||
|
|
b104298c7d | ||
|
|
e049375bbc | ||
|
|
f48bd550b7 | ||
|
|
00ec064dc3 | ||
|
|
4c5409aa01 | ||
|
|
6166c87e16 | ||
|
|
159cd74c28 | ||
|
|
60ef83dd34 | ||
|
|
3c02c5957e | ||
|
|
bbef071931 | ||
|
|
726928aadc | ||
|
|
7ad386d28f | ||
|
|
a4c9bdef4a | ||
|
|
a64edc70ed | ||
|
|
f6826432d0 | ||
|
|
f29efa8f60 | ||
|
|
e7bcf489eb | ||
|
|
15d43f6313 | ||
|
|
a7f7374f96 | ||
|
|
de1a1cbe9a | ||
|
|
27a0e8ee3a | ||
|
|
db4f193046 | ||
|
|
118182a6cc | ||
|
|
442b3bd233 | ||
|
|
12c96f321b | ||
|
|
f77d8d5219 | ||
|
|
b7d5a3f9c6 | ||
|
|
b887ca01d0 | ||
|
|
179ff9b10a | ||
|
|
4c18629cd7 | ||
|
|
295e79984f | ||
|
|
8f910f95f4 | ||
|
|
ee55055385 | ||
|
|
674edfc330 | ||
|
|
c33e5029df | ||
|
|
a2f205362a | ||
|
|
3d6771b3d2 | ||
|
|
fe9ff0c337 | ||
|
|
754545cc40 | ||
|
|
aab45b1b14 | ||
|
|
9eaa00e878 | ||
|
|
8520ca44ee | ||
|
|
6b8ac5e939 | ||
|
|
5767acb5bf | ||
|
|
9e3fc97727 | ||
|
|
7817499da7 | ||
|
|
1c43e92577 | ||
|
|
3e4f945d56 | ||
|
|
491c4d25d7 | ||
|
|
2432d57d70 | ||
|
|
9408b592fd | ||
|
|
743f192d85 | ||
|
|
4e47b0acb7 | ||
|
|
43ab4e1e42 | ||
|
|
9b28cdbcd2 | ||
|
|
acb29c33d3 | ||
|
|
e3eee3dc02 | ||
|
|
e3eae25caa | ||
|
|
cc23869128 | ||
|
|
36c11961b6 | ||
|
|
f21dc94979 | ||
|
|
d4ab850e7b | ||
|
|
edf6e075f2 | ||
|
|
92c3b8314d | ||
|
|
33260fc820 | ||
|
|
5b5afec84d | ||
|
|
d818e697e9 | ||
|
|
03edb20265 | ||
|
|
4157062442 | ||
|
|
2f46645149 | ||
|
|
31f4576acd | ||
|
|
e1d85b0a04 | ||
|
|
961cf347da | ||
|
|
02c4655f0d | ||
|
|
b7b94ca900 | ||
|
|
8671b52cbb | ||
|
|
9fe045b916 | ||
|
|
4d2a914719 | ||
|
|
1cfcf03ede | ||
|
|
a81d2e9ccc | ||
|
|
d7cf2c19ab | ||
|
|
42c72349dd | ||
|
|
027a228734 | ||
|
|
543aed0350 | ||
|
|
fa704c5d66 | ||
|
|
ad6adb221c | ||
|
|
5978a80b46 | ||
|
|
8c4f380d73 | ||
|
|
273de18ae3 | ||
|
|
44082fe78e | ||
|
|
9e6295e008 | ||
|
|
eaf4e3d71e | ||
|
|
bd52f1bb3c | ||
|
|
6682355c1b | ||
|
|
f76b08ab27 | ||
|
|
1943a55bcc | ||
|
|
9ec822a095 | ||
|
|
04f67d4052 | ||
|
|
d9251f16db | ||
|
|
f268ed8427 | ||
|
|
58881f8ef5 | ||
|
|
addc68b5f1 | ||
|
|
79368af6ee | ||
|
|
9f64d84c5a | ||
|
|
bafc8abfc0 | ||
|
|
abaa962531 | ||
|
|
8049792dc4 | ||
|
|
7dbd5de980 | ||
|
|
36a965a1c3 | ||
|
|
d382bad8e1 | ||
|
|
186f18f4d2 | ||
|
|
c777fc969a | ||
|
|
1b176ed5ad | ||
|
|
2654c8a614 | ||
|
|
23e3dc465d | ||
|
|
132cb89b90 | ||
|
|
39ca55fd84 | ||
|
|
d457fb0011 | ||
|
|
42620bf739 | ||
|
|
fc8d19756d | ||
|
|
45dce3210a | ||
|
|
9dbb32c982 | ||
|
|
cf84ab5921 | ||
|
|
05d01bbcc5 | ||
|
|
64b8058dc6 | ||
|
|
ba09d9440f | ||
|
|
21fc6505ff | ||
|
|
5a27de7550 | ||
|
|
9c9324e7d9 | ||
|
|
e938621996 | ||
|
|
4cf1f4ba15 | ||
|
|
ce937bd0bb | ||
|
|
3e4963e56c | ||
|
|
adb205d8fa | ||
|
|
c4f6a6823d | ||
|
|
f53a37c496 | ||
|
|
fbc1c6b60a | ||
|
|
6559a405e1 | ||
|
|
45ec45c206 | ||
|
|
a0ff754464 | ||
|
|
a7f0f30af2 | ||
|
|
c48d8f9a45 | ||
|
|
276cbd6aa1 | ||
|
|
6f1ba85869 | ||
|
|
9bba05f26c | ||
|
|
5d75e11679 | ||
|
|
d58a67012d | ||
|
|
7e41b747dd | ||
|
|
4dd23b8e76 | ||
|
|
19403e0ae5 | ||
|
|
2ff87a0655 | ||
|
|
f0b12799b8 | ||
|
|
c81850cb36 | ||
|
|
d7fe8bfeee | ||
|
|
06c5beae7d | ||
|
|
c929ddbe97 | ||
|
|
77b557fb13 | ||
|
|
dbc58e0bc9 | ||
|
|
1bb5e0c056 | ||
|
|
31c03681fa | ||
|
|
742dc43c5d | ||
|
|
a9a241cc41 | ||
|
|
3ffaeed317 | ||
|
|
8950cf9533 | ||
|
|
21bdb374d0 | ||
|
|
3b2ce1e85a | ||
|
|
ffc84334bf | ||
|
|
c37370a50a | ||
|
|
43c8218a14 | ||
|
|
625c859e0d | ||
|
|
2ee2eb4274 | ||
|
|
6262ad637d | ||
|
|
df78225114 | ||
|
|
130de57d1a | ||
|
|
d7aba9bb64 | ||
|
|
77bf9c6f16 | ||
|
|
b44d144b26 | ||
|
|
376a528fac | ||
|
|
6dec156d4d | ||
|
|
372f27b6ac | ||
|
|
d6d2d394bc | ||
|
|
7c326ce0d7 | ||
|
|
1ae26d39c2 | ||
|
|
702d427183 | ||
|
|
432ba338b7 | ||
|
|
c1ce09ac52 | ||
|
|
57982d3c43 | ||
|
|
c168a6c685 | ||
|
|
17479ac08b | ||
|
|
a73819214b | ||
|
|
c5730b31f7 | ||
|
|
4bfebdea13 | ||
|
|
d040754d8c | ||
|
|
7943ebc8f8 | ||
|
|
5ce0b90d9f | ||
|
|
e97d892926 | ||
|
|
3b026ce204 | ||
|
|
d269828924 | ||
|
|
1e1560651a | ||
|
|
782e1ef506 | ||
|
|
3a3c805792 | ||
|
|
51235a61ad | ||
|
|
f493de998c | ||
|
|
72b5acfece | ||
|
|
176ddf6abb | ||
|
|
44c52300e4 | ||
|
|
2eae6cdfda | ||
|
|
0f896d0a4f | ||
|
|
02189c4262 | ||
| d649a0caa1 | |||
| e28894549c | |||
| b3ef90237f | |||
| ebc4e08986 | |||
| 8d74a35f29 | |||
| a37e164c0b | |||
| a71b504589 | |||
|
|
20cd27d7f6 | ||
|
|
ac889dcba9 | ||
|
|
70bbb12285 | ||
|
|
e7e568f67a | ||
|
|
3452ae1d66 | ||
|
|
2ad336b13a | ||
|
|
78b15b78fa | ||
|
|
eb7b637703 | ||
|
|
b083a0801f | ||
|
|
471f1076c4 | ||
|
|
e50fe63e02 | ||
|
|
7682054dea | ||
|
|
1e3c2f039b | ||
|
|
a832e56b42 | ||
|
|
3858cfd9ba | ||
|
|
5b4fd892ff | ||
|
|
4ffa88805c | ||
|
|
2a0b26f2fd | ||
|
|
30308eb308 | ||
|
|
5f8cbe524e | ||
|
|
a2f0142712 | ||
|
|
d2c6529d2a | ||
|
|
b23e32df7f | ||
|
|
a94a0a2f87 | ||
|
|
6fe40e9438 | ||
|
|
d4523e8e1d | ||
|
|
9fadef2a6e | ||
|
|
1970a1b47d | ||
|
|
19d090859c | ||
|
|
7fda77bd1e | ||
|
|
34c14c922c | ||
|
|
0f8a1057dc | ||
|
|
a74faca9cb | ||
|
|
336aa85cf8 | ||
|
|
43710a4c4d | ||
|
|
451cf90939 | ||
|
|
6713f48361 | ||
|
|
f6e3b35482 | ||
|
|
1d7e58d3bf | ||
|
|
b501cd374b | ||
|
|
e6f5723ecc | ||
|
|
998c79d331 | ||
|
|
a21d6e834d | ||
|
|
a4541dd764 | ||
|
|
e788dd543e | ||
|
|
f24fa81d87 | ||
|
|
20fb2a3e92 | ||
|
|
e7f77291e4 | ||
|
|
fa0848c8b2 | ||
|
|
8a740091b3 | ||
|
|
5fa3be5886 | ||
|
|
a9d2f097d8 | ||
|
|
450483acc7 | ||
|
|
43019185a8 | ||
|
|
f537b36662 | ||
|
|
98385b8b56 | ||
|
|
8d44046a90 | ||
|
|
9b1ab459a0 | ||
|
|
f4c0d19734 | ||
|
|
f088bdcf8b | ||
|
|
60600dbe2f | ||
|
|
eb95cc4b47 | ||
|
|
57dfdacffa | ||
|
|
0c839790fe | ||
|
|
1f29916e09 | ||
|
|
310023dc94 | ||
|
|
9448dcefb4 | ||
|
|
167e77ddf2 | ||
|
|
dc586ad82e | ||
|
|
6d331f882f | ||
|
|
b945760c72 | ||
|
|
98aa49c2c3 | ||
|
|
78feab88bf | ||
|
|
6f005d467d | ||
|
|
324011f01b | ||
|
|
0d97d2a02d | ||
|
|
37bec38524 | ||
|
|
847795c0ef | ||
|
|
aa1a5a1550 | ||
|
|
997b3cbecd | ||
|
|
652aced790 | ||
|
|
47af067c03 | ||
|
|
5b31e3eb87 | ||
|
|
0bb4b069e7 | ||
|
|
eded658d38 | ||
|
|
1caeb0ed6b | ||
|
|
611a1f0a04 | ||
|
|
13e58e6f80 | ||
|
|
d6853d381f | ||
|
|
b6cc14fe2f | ||
|
|
9b1f9fa9dd | ||
|
|
cca53b6376 | ||
|
|
1aa991f89f | ||
|
|
7407bbefdf | ||
|
|
40fb835d9c | ||
|
|
e4df92fb54 | ||
|
|
7b9760e376 | ||
|
|
52607545fa | ||
|
|
849756531d | ||
|
|
2e16240fb8 | ||
|
|
181beda455 | ||
|
|
d0f77f4b78 | ||
|
|
dea2f6c8d7 | ||
|
|
615fd414ec | ||
|
|
7296498410 | ||
|
|
554970c036 | ||
|
|
057abe6ba5 | ||
|
|
3b215eb7af | ||
|
|
1abaa0e5c5 | ||
|
|
0c5cb1686e | ||
|
|
21f0aabae0 | ||
|
|
e5458c1ab9 | ||
|
|
a30c0395aa | ||
|
|
0b9006faf3 | ||
|
|
adefb776fe | ||
|
|
ee089b0f31 | ||
|
|
44200458c5 | ||
|
|
5d2d4eae17 | ||
|
|
25f87cae53 | ||
|
|
1e4f11a6ce | ||
|
|
36b9dcaf43 | ||
|
|
ad3aff6a50 | ||
|
|
3bd6da6276 | ||
|
|
3ccc8cdd7b | ||
|
|
501f3a4eec | ||
|
|
cfc6f65da5 | ||
|
|
5853ac1823 | ||
|
|
3057b2a12f | ||
|
|
9ce90b76a4 | ||
|
|
e016a20c21 | ||
|
|
8fb8352c8d | ||
|
|
ed7ecd98c4 | ||
|
|
512c78e192 | ||
|
|
81b3082087 | ||
|
|
6fff929856 | ||
|
|
e636deb08e | ||
|
|
464d5bedda | ||
|
|
9cc70d4212 | ||
|
|
737cdb74bd | ||
|
|
a833139e13 | ||
|
|
4ec9377f78 | ||
|
|
e9e96f287f | ||
|
|
57745f5d0a | ||
|
|
515c2d1f60 | ||
|
|
decbde8d63 | ||
|
|
08c892d4ff | ||
|
|
850a31d172 | ||
|
|
6ae419eeee | ||
|
|
40bae13411 | ||
|
|
61946fe52e | ||
|
|
27cede0fad | ||
|
|
adae63eabb | ||
|
|
3ff5f74af7 | ||
|
|
c3c151b375 | ||
|
|
2163d09c08 | ||
|
|
ea70c2ef9e | ||
|
|
53f949571e | ||
|
|
1d64a6b799 | ||
|
|
84b5790ab2 | ||
|
|
6aa8de3506 | ||
|
|
c1b55139b6 | ||
|
|
670417dc6a | ||
|
|
bd1d1f8ae4 | ||
|
|
29a922e41f | ||
|
|
ac9fd5e618 | ||
|
|
9d6a74680a | ||
|
|
9d52cf27d8 | ||
|
|
35c38387e1 | ||
|
|
908997ddef | ||
|
|
cf0b95e955 | ||
|
|
5bf5d44c96 | ||
|
|
854776dac0 | ||
|
|
6e1ba35ca3 | ||
|
|
a5a41e3b0c | ||
|
|
e78114dd53 | ||
|
|
6174f3709c | ||
|
|
7f1f9b0221 | ||
|
|
0af4e2adb9 | ||
|
|
d5ab596749 | ||
|
|
3d128d4850 | ||
|
|
46aa6fcc48 | ||
|
|
60d1eb4e3c | ||
|
|
4b2c55d90e | ||
|
|
0023c0a4c6 | ||
|
|
0265793a3f | ||
|
|
b99d247ba5 | ||
|
|
bdc1e592a7 | ||
|
|
d3ef7e7f81 | ||
|
|
78dfec15d6 | ||
|
|
7a824e09a3 | ||
|
|
7c58355048 | ||
|
|
89662e7e2c | ||
|
|
718fc750d9 | ||
|
|
9e143fbb73 | ||
|
|
c561181bdf | ||
|
|
b45920109f | ||
|
|
07290fe7ce | ||
|
|
944f57b04a | ||
|
|
4079c6596e | ||
|
|
defe6c4f26 | ||
|
|
ed2a46e059 | ||
|
|
498a0ef7e8 | ||
|
|
06d34d8c55 | ||
|
|
cd670212a2 | ||
|
|
41e58e0bd6 | ||
|
|
b0af47a422 | ||
|
|
ccfb0c72dd | ||
|
|
be1b87a1af | ||
|
|
33ffb80241 | ||
|
|
42b61af93d | ||
|
|
cfdba225e0 | ||
|
|
8c0b3fd31d | ||
|
|
ef88d3e437 | ||
|
|
cbbb04655b | ||
|
|
956b768475 | ||
|
|
51768a5a27 | ||
|
|
4a58967590 | ||
|
|
bc879ee8e2 | ||
|
|
d3046fa588 | ||
|
|
ce8fefe9f8 | ||
|
|
f7369ef4ae | ||
|
|
c0cfb97034 | ||
|
|
c742e9fd31 | ||
|
|
1d1522a9c4 | ||
|
|
a9925b3f15 | ||
|
|
2ea9a58a41 | ||
|
|
9abf7bb45b | ||
|
|
6afaf462f8 | ||
|
|
b1ac913dd8 | ||
|
|
4e5b16c0e2 | ||
|
|
56b2a41eee | ||
|
|
8b32f29c2a | ||
|
|
52ad2e2ddc | ||
|
|
2edd5542f8 | ||
|
|
cb27f145a3 | ||
|
|
44cbe58486 | ||
|
|
1c8844c3c4 | ||
|
|
6c864ea59a | ||
|
|
9818685856 | ||
|
|
51e709acf6 | ||
|
|
f826899f45 | ||
|
|
b3f9aa3d28 | ||
|
|
d9c31f6661 | ||
|
|
2af3f15997 | ||
|
|
701e4bbdbb | ||
|
|
ce8e2597fe | ||
|
|
b185852271 | ||
|
|
7a2ac914df | ||
|
|
a0e3eb21c5 | ||
|
|
c9132b02a4 | ||
|
|
0e81b0f8c8 | ||
|
|
de3bd91d4d | ||
|
|
ad35dab32b | ||
|
|
b650999f96 | ||
|
|
9c2974e4f0 | ||
|
|
00859ee26b | ||
|
|
89218c7529 | ||
|
|
53d94f1f51 | ||
|
|
332700fd64 | ||
|
|
8e1dd048b5 | ||
|
|
e9e6b25276 | ||
|
|
ab6080767b | ||
|
|
87e27e8a4b | ||
|
|
3b56679a32 | ||
|
|
bbf46a0d6d | ||
|
|
8622268445 | ||
|
|
201c20b56f | ||
|
|
835430bf84 | ||
|
|
4db12c500e | ||
|
|
77b9809eaa | ||
|
|
e2f84ee25a | ||
|
|
15f414f43d | ||
|
|
e060d99b02 | ||
|
|
97ca282f8a | ||
|
|
a1980cf766 | ||
|
|
82dc468868 | ||
|
|
5eb162718c | ||
|
|
04b4ac00fc | ||
|
|
345223c159 | ||
|
|
44adb2a018 | ||
|
|
f4ef9a1612 | ||
|
|
9066c6428a | ||
|
|
6c45388172 | ||
|
|
c9265c640a | ||
|
|
5deb724f7d | ||
|
|
fd21edd024 | ||
|
|
b1d5490e1b | ||
|
|
7248af35de | ||
|
|
601049ffe1 | ||
|
|
7ae418c597 | ||
|
|
e29c3af8bb | ||
|
|
23f587165a | ||
|
|
0e0b6db4a5 | ||
|
|
7295179f5d | ||
|
|
03dad89787 | ||
|
|
7b227181f2 | ||
|
|
f3994316e3 | ||
|
|
57792bd230 | ||
|
|
09bdb4e52b | ||
|
|
5ceb59daae | ||
|
|
f3d8c6b98a | ||
|
|
82749e9e19 | ||
|
|
6859d70ca7 | ||
|
|
34cfca88d7 | ||
|
|
5ccda32d63 | ||
|
|
5dfdfb8151 | ||
|
|
23b1692702 | ||
|
|
706fa901e2 | ||
|
|
1c553df53a | ||
|
|
f1416f46fc | ||
|
|
b988de13bb | ||
|
|
f74f7b3814 | ||
|
|
c406059177 | ||
|
|
1dcce5f3b2 | ||
|
|
cb2f011b19 | ||
|
|
70871ee4fd | ||
|
|
2f7647c5ba | ||
|
|
f536173dea | ||
|
|
9488dc61f9 | ||
|
|
6f74595305 | ||
|
|
a1f32ca333 | ||
|
|
45ab91267f | ||
|
|
3472ccc73d | ||
|
|
a9789b1c21 | ||
|
|
20095c01d1 | ||
|
|
653b256253 | ||
|
|
a9a66bf21e | ||
|
|
2fd310baed | ||
|
|
ef94e1bf3a | ||
|
|
fe91265f62 | ||
|
|
b8a9c42a3b | ||
|
|
b0ecb28b48 | ||
|
|
6cb81b461b | ||
|
|
9b44971de8 | ||
|
|
c8908f38fb | ||
|
|
d7c721ae5b | ||
|
|
4d3d00bc58 | ||
|
|
5eaeaaa79f | ||
|
|
d77af59521 | ||
|
|
b5093d19f4 | ||
|
|
ef14e8b38c | ||
|
|
0f3c234ca0 | ||
|
|
563d820fbe | ||
|
|
d15757dcc2 | ||
|
|
9d28505140 | ||
|
|
ce91e75cd2 | ||
|
|
4809d4193e | ||
|
|
9ee310e73f | ||
|
|
1380fa768c | ||
|
|
0ea58e0858 | ||
|
|
d1c1631bae | ||
|
|
ef2b845837 | ||
|
|
e252364c59 | ||
|
|
bc14c6f625 | ||
|
|
bcc1b25023 | ||
|
|
5f609f41a5 | ||
|
|
38589fbebe | ||
|
|
356316aaa3 | ||
|
|
b554409b32 | ||
|
|
076d854f11 | ||
|
|
14852fa3e9 | ||
|
|
42e2823e28 | ||
|
|
535e78a8b3 | ||
|
|
c8480a17e9 | ||
|
|
6989158216 | ||
|
|
7fc3d13c99 | ||
|
|
7ce56b8913 | ||
|
|
a0980138f9 | ||
|
|
16e01e510e | ||
|
|
ee628778cf | ||
|
|
36a30a6318 | ||
|
|
096f162ea6 | ||
|
|
22c213b10f | ||
|
|
ba66610a01 | ||
|
|
ab4a055194 | ||
|
|
2ce2f91414 | ||
|
|
0f1c8c7b2f | ||
|
|
8adcd4b8a9 | ||
|
|
db5a8594fd | ||
|
|
5238d855b4 | ||
|
|
6c2cbe5f20 | ||
|
|
27ce516dd9 | ||
|
|
981479ca5f | ||
|
|
70a41855d1 | ||
|
|
3571ef404c | ||
|
|
86ee26381c | ||
|
|
198b18ec89 | ||
|
|
18ff09befa | ||
|
|
bd48c266b8 | ||
|
|
cf410dfbdd | ||
|
|
4afac2a2fb | ||
|
|
d96f45c3b3 | ||
|
|
e381f66767 | ||
|
|
d0b9cdc503 | ||
|
|
e846222ace | ||
|
|
b3e9b128b6 | ||
|
|
0708d05ec9 | ||
|
|
f4eda19684 | ||
|
|
b0c71e0f6c | ||
|
|
3b675ad8ed | ||
|
|
4c95f6bfbc | ||
|
|
98715e4579 | ||
|
|
89af52b14b | ||
|
|
1b4c1b8d7f | ||
|
|
aea6840263 | ||
|
|
cc33d04f32 | ||
|
|
e75ab93838 | ||
|
|
85f3cb4d19 | ||
|
|
dab880bc82 | ||
|
|
004bb0cfca | ||
|
|
ca0ca8fd98 | ||
|
|
660f027c01 | ||
|
|
a69648274c | ||
|
|
eee820bc73 | ||
|
|
4e9fbf6764 | ||
|
|
f78856c58e | ||
|
|
e5a3b6c6ac | ||
|
|
37a3e36bd5 | ||
|
|
99eeeb915a | ||
|
|
00f6d46f71 | ||
|
|
41660e4074 | ||
|
|
88367fc7a6 | ||
|
|
5361235234 | ||
|
|
82634a32a5 | ||
|
|
cc89c937dc | ||
|
|
e0997f0ecb | ||
|
|
8127a999b3 | ||
|
|
490bebf632 | ||
|
|
82040d0525 | ||
|
|
eee6160565 | ||
|
|
8daae21a76 | ||
|
|
bb722d4a2b | ||
|
|
160be9048c | ||
|
|
46c2ed8332 | ||
|
|
101c8a2994 | ||
|
|
e7bfc8335e | ||
|
|
c17865d777 | ||
|
|
28cf3d878f | ||
|
|
67d6d4a3ee | ||
|
|
369891ba54 | ||
|
|
18ccd00083 | ||
|
|
ce36d5d43c | ||
|
|
0ee460b679 | ||
|
|
e77f415f38 | ||
|
|
6d78bd2b42 | ||
|
|
39d91a513b | ||
|
|
7075d7d5b2 | ||
|
|
17e67c674b | ||
|
|
e90a12418d | ||
|
|
ec4697c45e | ||
|
|
11862e6fba | ||
|
|
0e50c54754 | ||
|
|
90943f207a | ||
|
|
a6c62fb6ed | ||
|
|
cde97fdd3f | ||
|
|
3cfa230d2b | ||
|
|
5b57c84034 | ||
|
|
6bd4895255 | ||
|
|
21834a357d | ||
|
|
a51a95339b | ||
|
|
67f5ed49ec | ||
|
|
4d6bf2fb4b | ||
|
|
80e95f3e27 | ||
|
|
7e68ea5fb6 | ||
|
|
fecfeefb5b | ||
|
|
bca0410e28 | ||
|
|
67aea3b5ce | ||
|
|
94e3f15ee7 | ||
|
|
6519e8445e | ||
|
|
4ae14b6c73 | ||
|
|
4752c5ad2d | ||
|
|
b3f6e29a36 | ||
|
|
e5ea8098df | ||
|
|
83f037b704 | ||
|
|
6428cb39a5 | ||
|
|
1bc19d6cf7 | ||
|
|
0af32f12e3 | ||
|
|
24bd08a1b2 | ||
|
|
53fb02b4db | ||
|
|
a49d71f097 | ||
|
|
c78e2c0fbf | ||
|
|
66c9968932 | ||
|
|
39a5a1e637 | ||
|
|
0b83fd839a | ||
|
|
30399cecaf | ||
|
|
d3170ab219 | ||
|
|
2e5f943b79 | ||
|
|
a9ab373f0b | ||
|
|
bef232376b | ||
|
|
628365cb49 | ||
|
|
f9ed93641c | ||
|
|
0a63bea195 | ||
|
|
ef8bf5fc3e | ||
|
|
b7b630fc81 | ||
|
|
d784c33fe8 | ||
|
|
ec9f8ba46f | ||
|
|
97a351cd92 | ||
|
|
15de6ad437 | ||
|
|
5ef18545f8 | ||
|
|
2cdc62f4a2 | ||
|
|
1757ba149c | ||
|
|
4ae816e9a6 | ||
|
|
918acf2b58 | ||
|
|
77a5774965 | ||
|
|
8185e36839 | ||
|
|
6d937d91d2 | ||
|
|
d2b171427a | ||
|
|
acd3684ad4 | ||
|
|
18170b1793 | ||
|
|
6644e62887 | ||
|
|
94d769c01c | ||
|
|
228f7723e1 | ||
|
|
69b47c66b4 | ||
|
|
77b6e14e7f | ||
|
|
6bae8f1fa4 | ||
|
|
967b56db58 | ||
|
|
330cb313e7 | ||
|
|
83aac737c7 | ||
|
|
cb3ad51357 | ||
|
|
1bb945e9c7 | ||
|
|
e4ff198b27 | ||
|
|
762a2a907e | ||
|
|
cd00b2f1cd | ||
|
|
ec62da93a4 | ||
|
|
6518e581b6 | ||
|
|
1c2c16e50d | ||
|
|
68f105141a | ||
|
|
197dd0f724 | ||
|
|
996a7d5ef4 | ||
|
|
2197af2799 | ||
|
|
2b05efb0ff | ||
|
|
57f67749dc | ||
|
|
25ad789e61 | ||
|
|
59ef90e120 | ||
|
|
8ee2e89cc5 | ||
|
|
d5736a5b08 | ||
|
|
32a7035a90 | ||
|
|
9e61505205 | ||
|
|
51d2f43229 | ||
|
|
454755083c | ||
|
|
0b43a01976 | ||
|
|
4fda9d8ef3 | ||
|
|
34fc38961c | ||
|
|
c55f4d3d62 | ||
|
|
aec53318bf | ||
|
|
7a74b9bbf7 | ||
|
|
94597a7474 | ||
|
|
8996ae40d7 | ||
|
|
00a3320b72 | ||
|
|
e65932b806 | ||
|
|
d981a2ae4d | ||
|
|
855d2164c5 | ||
|
|
16f85bf2ab | ||
|
|
489e6f3027 | ||
|
|
42b7b1c9e4 | ||
|
|
ae03346bb7 | ||
|
|
cf49685406 | ||
|
|
8f92fb5ea5 | ||
|
|
6950be53a0 | ||
|
|
f3ec154cb1 | ||
|
|
c25f2f7cb6 | ||
|
|
6ef7db7ddf | ||
|
|
7f563df71c | ||
|
|
1f1d69d484 | ||
|
|
7079061f22 | ||
|
|
6a30651cc5 | ||
|
|
f183686463 | ||
|
|
d4fd2cd22f | ||
|
|
5adda6adaa | ||
|
|
dc2abfe043 | ||
|
|
4f865374c5 | ||
|
|
a5a7cc6a9b | ||
|
|
9f3550adbc | ||
|
|
fecb292e9b | ||
|
|
a0a959e901 | ||
|
|
23c250d44a | ||
|
|
cd7156d65b | ||
|
|
5c198ab916 | ||
|
|
b07f97097f | ||
|
|
34886ca643 | ||
|
|
276a37361e | ||
|
|
8d37948cec | ||
|
|
e3f312252b | ||
|
|
0f3dd61249 | ||
|
|
58e5118d45 | ||
|
|
6fa4cf17c7 | ||
|
|
3d13c8ff2a | ||
|
|
543e2ba093 | ||
|
|
30297385af | ||
|
|
37fb89bae0 | ||
|
|
798b3acb89 | ||
|
|
57868b700b | ||
|
|
3100f31a62 | ||
|
|
9c4ab537be | ||
|
|
0590de3f14 | ||
|
|
d3bcb19c16 | ||
|
|
ed42ea0b57 | ||
|
|
1133d256ee | ||
|
|
9df16b2999 | ||
|
|
0f6d8ace1c | ||
|
|
60e0222146 | ||
|
|
591fa94632 | ||
|
|
152aa0406e | ||
|
|
fa0dc1f946 | ||
|
|
8f860b21a8 | ||
|
|
2a5105a49e | ||
|
|
0fa9f85a8d | ||
|
|
202117a60e | ||
|
|
35c7935f9c | ||
|
|
d953d623a2 | ||
|
|
4ddccd7211 | ||
|
|
4a2d13c6d7 | ||
|
|
c92b4c1863 | ||
|
|
fb736c5a7a | ||
|
|
9046a0a7c8 | ||
|
|
4173441d3c | ||
|
|
b5c3af05d8 | ||
|
|
6fa9aa30fa | ||
|
|
41ce44fc0e | ||
|
|
59848cd559 | ||
|
|
092c944d27 | ||
|
|
8ec051f523 | ||
|
|
22cc708a65 | ||
|
|
4e577a01ae | ||
|
|
5b43ff8c45 | ||
|
|
d07075ca9c | ||
|
|
cd49507a2b | ||
|
|
00464f1e80 | ||
|
|
6ec902e618 | ||
|
|
30e276b132 | ||
|
|
b8597d1518 | ||
|
|
5543f29e4f | ||
|
|
dc67239382 | ||
|
|
2a571bbb97 | ||
|
|
2824bef04a | ||
|
|
8fc7ebdab7 | ||
|
|
793d6780f3 | ||
|
|
605561148b | ||
|
|
54daef0cd9 | ||
|
|
ac0ff16537 | ||
|
|
e44053446a | ||
|
|
d4fb606c72 | ||
|
|
4cfdd4e58b | ||
|
|
3b82a144ea | ||
|
|
2f06c1b476 | ||
|
|
25b6b2c5ba | ||
|
|
9948505145 | ||
|
|
9d8feab2cc | ||
|
|
bcb5d3eba4 | ||
|
|
d7a10c00ed | ||
|
|
d2593cfb81 | ||
|
|
8101cf89f8 | ||
|
|
8636c6dcd5 | ||
|
|
b9c5599f95 | ||
|
|
93f854e6e4 | ||
|
|
ffc09b0801 | ||
|
|
d246064ded | ||
|
|
468f264545 | ||
|
|
9bec223b09 | ||
|
|
4606bb4d01 | ||
|
|
c8405c8924 | ||
|
|
95a33c0e6c | ||
|
|
ed2ad35dde | ||
|
|
234ae08c76 | ||
|
|
d21506b8d7 | ||
|
|
1fa7bf9c27 | ||
|
|
b50e01e4cf | ||
|
|
7abf9b0d0c | ||
|
|
504c6f46c3 | ||
|
|
78b1dcc949 | ||
|
|
9b0c859593 | ||
|
|
c9a3075d0a | ||
|
|
953b17ee88 | ||
|
|
95bc979da7 | ||
|
|
622b1a5e25 | ||
|
|
0c66ca1bdc | ||
|
|
67323c4d93 | ||
|
|
e2b0069947 | ||
|
|
5697a201ef | ||
|
|
c6115e3417 | ||
|
|
0ad122ce01 | ||
|
|
121e1421d3 | ||
|
|
e674457e6f | ||
|
|
45948b9d94 | ||
|
|
8d0bfce39f | ||
|
|
5eeab94368 | ||
|
|
d415d68762 | ||
|
|
0d4760f819 | ||
|
|
a0e6bda26e | ||
|
|
85e6810f99 | ||
|
|
38326bc3b6 | ||
|
|
3e89edefdb | ||
|
|
554e63925d | ||
|
|
57701c6041 | ||
|
|
57e1213370 | ||
|
|
d1ed97e5b4 | ||
|
|
f293f043d5 | ||
|
|
70408e4a2e | ||
|
|
a04438dbf8 | ||
|
|
0f30a35ae3 | ||
|
|
e56391c347 | ||
|
|
9612085a6a | ||
|
|
5bac3002f8 | ||
|
|
c50d1af806 | ||
|
|
96a07c96ee | ||
|
|
cc1261c285 | ||
|
|
adbb888fe4 | ||
|
|
64122b61fc | ||
|
|
bd4c7880e9 | ||
|
|
53433b33d6 | ||
|
|
ef2346efa0 | ||
|
|
0f61c8db8b | ||
|
|
b67c0b8232 | ||
|
|
e365daba93 | ||
|
|
71a2bfe284 | ||
|
|
dd767aa088 | ||
|
|
2ff66b32fd | ||
|
|
fe2d34b057 | ||
|
|
e3b36c8ad1 | ||
|
|
99ba68fce8 | ||
|
|
91e33495da | ||
|
|
d6699fbaa1 | ||
|
|
08666e8bd2 | ||
|
|
b2b397f3e4 | ||
|
|
8336a6c7a6 | ||
|
|
506989580f | ||
|
|
cd258057fb | ||
|
|
044247dccf | ||
|
|
b3f7c2cb4a | ||
|
|
02508c71a0 | ||
|
|
20f77fe26b | ||
|
|
cd889da4bd | ||
|
|
83c64785ec | ||
|
|
ae260f4908 | ||
|
|
fefa5433fd | ||
|
|
f3eb95df93 | ||
|
|
8571b020b9 | ||
|
|
297ccf4496 | ||
|
|
5e617375e1 | ||
|
|
7307a071ab | ||
|
|
ee4ca51aff | ||
|
|
dd682a4e6a | ||
|
|
8893c7da3e | ||
|
|
364024ca0f | ||
|
|
4bf8eb4c1a | ||
|
|
4cc77e0068 | ||
|
|
bd99556e1e | ||
|
|
93e422e1cc | ||
|
|
cba9464b6f | ||
|
|
d09240944b | ||
|
|
16e7dd71f1 | ||
|
|
ac546e4f8d | ||
|
|
2663e4d629 | ||
|
|
7ff13b286e | ||
|
|
e44964696a | ||
|
|
db53da509d | ||
|
|
de7f1b92f6 | ||
|
|
0886bfe8f9 | ||
|
|
46b3ad8a70 | ||
|
|
b4be31361e | ||
|
|
b11e5e12d3 | ||
|
|
177edbf7d6 | ||
|
|
6a335d9c31 | ||
|
|
152e248a15 | ||
|
|
ed6c6dc793 | ||
|
|
192607f874 | ||
|
|
a2c610e877 | ||
|
|
fa745cca61 | ||
|
|
65a4bd3665 | ||
|
|
29a5556c33 | ||
|
|
5afba67c1d | ||
|
|
9af190529c | ||
|
|
1d36d50fca | ||
|
|
871e042044 | ||
|
|
9a99f5d851 | ||
|
|
c0d97939fa | ||
|
|
58305a9690 | ||
|
|
2e7df49c4f | ||
|
|
e984ce39c3 | ||
|
|
2ce1ca6bf8 | ||
|
|
1c342d0327 | ||
|
|
f68aa26278 | ||
|
|
175d9bd7d7 | ||
|
|
9836bda502 | ||
|
|
a21e7a5e8d | ||
|
|
42f3cd8e31 | ||
|
|
1038e75a64 | ||
|
|
d90f0f3e86 | ||
|
|
18b5efcc0e | ||
|
|
2627e55229 | ||
|
|
d605e5fbb8 | ||
|
|
445b0167fa | ||
|
|
0012788eb1 | ||
|
|
32403078bc | ||
|
|
992e28a036 | ||
|
|
e14307045d | ||
|
|
53b0d1fda3 | ||
|
|
97cfbdb982 | ||
|
|
7369c22401 | ||
|
|
e662ad1dfc | ||
|
|
45ecff616c | ||
|
|
b05a19f036 | ||
|
|
3bca0336fa | ||
|
|
216bb4ea87 | ||
|
|
7017901594 | ||
|
|
72524ab50f | ||
|
|
9adaa3c3d6 | ||
|
|
653628f0b3 | ||
|
|
a4186dbf84 | ||
|
|
74de4c14d3 | ||
|
|
11bb084d70 | ||
|
|
1fae1c9ba6 | ||
|
|
5aa483b445 | ||
|
|
ea4b5ed297 | ||
|
|
a557925a63 | ||
|
|
ac64dd0b67 | ||
|
|
b74cca772b | ||
|
|
f6da1a525c | ||
|
|
5049262846 | ||
|
|
c53e55d703 | ||
|
|
d6801d5be5 | ||
|
|
bd8e55b977 | ||
|
|
f8de8d4f16 | ||
|
|
2eb4818398 | ||
|
|
eda6c0d746 | ||
|
|
7676f32cf2 | ||
|
|
a4f920ae86 | ||
|
|
c21e010159 | ||
|
|
89b87be143 | ||
|
|
5607930540 | ||
|
|
957eb64753 | ||
|
|
d05c38ac58 | ||
|
|
bb30a8e9d1 | ||
|
|
19a3181ffb | ||
|
|
ac411c6dd4 | ||
|
|
c770fc4528 | ||
|
|
29e664ece4 | ||
|
|
d378e1479d | ||
|
|
b58c525a6d | ||
|
|
2de7fb9956 | ||
|
|
6d3ec2a8d2 | ||
|
|
4ac3fea028 | ||
|
|
602c321067 | ||
|
|
e50f1d9f50 | ||
|
|
f48a9c6a33 | ||
|
|
c8db07a8c8 | ||
|
|
1fc4dae61b | ||
|
|
d5ca3113e2 | ||
|
|
66c70eb292 | ||
|
|
fcae6c61e4 | ||
|
|
28576c2c9a | ||
|
|
385d376037 | ||
|
|
1d796c624d | ||
|
|
8b8ec2c175 | ||
|
|
293258b606 | ||
|
|
ef9f9ae04f | ||
|
|
de7922181b | ||
|
|
637d3ee670 | ||
|
|
be769a3617 | ||
|
|
c21a5afb61 | ||
|
|
3f5c9eb9b4 | ||
|
|
74d493199f | ||
|
|
c341cecdbc | ||
|
|
c99a715f30 | ||
|
|
530c87b81e | ||
|
|
3d7584b015 | ||
|
|
87a1424df0 | ||
|
|
355c2cd8a1 | ||
|
|
bc9aaff19a | ||
|
|
cb040a5669 | ||
|
|
4a31485359 | ||
|
|
ad1cffe113 | ||
|
|
e758b03e07 | ||
|
|
e31caaeb65 | ||
|
|
0b885d83af | ||
|
|
7f11ea594e | ||
|
|
76278cf11f | ||
|
|
65eb109cb9 | ||
|
|
3d02bc87ea | ||
|
|
4f278925f4 | ||
|
|
cb16482a61 | ||
|
|
46f118bbb9 | ||
|
|
3a5bff36b2 | ||
|
|
18f2e4ce04 | ||
|
|
1cc5eea3a4 | ||
|
|
20a8470b3c | ||
|
|
e242a89a4b | ||
|
|
9de9048a78 | ||
|
|
311dc3b644 | ||
|
|
e49e4a05bc | ||
|
|
79a7c53581 | ||
|
|
3cdc0d34f3 | ||
|
|
291e458745 | ||
|
|
080efec9e0 | ||
|
|
83444fbe00 | ||
|
|
737fc24e16 | ||
|
|
b9d2a8b283 | ||
|
|
e999a9cb1e | ||
|
|
d111f7fc66 | ||
|
|
fb1970ffc2 | ||
|
|
a96b308c28 | ||
|
|
5af3021d08 | ||
|
|
2e477bdab6 | ||
|
|
05b697debf | ||
|
|
b0064d179c | ||
|
|
48dbed2571 | ||
|
|
7643f19815 | ||
|
|
deca828207 | ||
|
|
754a8f611f | ||
|
|
f12356beb4 | ||
|
|
c9c5092055 | ||
|
|
a541317801 | ||
|
|
c7d15fbd3d | ||
|
|
420abe8240 | ||
|
|
95c9a1d638 | ||
|
|
7971eba517 | ||
|
|
c27e99aa6c | ||
|
|
5b22712058 | ||
|
|
c9109986d1 | ||
|
|
570508beba | ||
|
|
f890f9fdf1 | ||
|
|
94412b9c83 | ||
|
|
fca81dee71 | ||
|
|
9f956f965a | ||
|
|
2400325b22 | ||
|
|
ae3c8e8548 | ||
|
|
0007b2ab07 | ||
|
|
2594d43a53 | ||
|
|
39e6504bb5 | ||
|
|
402f777a90 | ||
|
|
7b0717c392 | ||
|
|
e303a8a300 | ||
|
|
31cb4b1ad9 | ||
|
|
ca746075db | ||
|
|
1676f36b5b | ||
|
|
0a2763e769 | ||
|
|
09d0612aeb | ||
|
|
9b3b0e2086 | ||
|
|
f28ab22ef9 | ||
|
|
935cb44639 | ||
|
|
5579c85bf4 | ||
|
|
ca856cbb35 | ||
|
|
6cee129a68 | ||
|
|
9fa420d6e3 | ||
|
|
ad7130b0d5 | ||
|
|
9f04510c9b | ||
|
|
5058fdf892 | ||
|
|
47043cf105 | ||
|
|
e5b726aa4a | ||
|
|
ae1dd6dfaa | ||
|
|
546d3f9b18 | ||
|
|
81cf35322e | ||
|
|
12afb565c7 | ||
|
|
5826231326 | ||
|
|
b0ac27ad23 | ||
|
|
5d1e286645 | ||
|
|
0baf5dba9f | ||
|
|
9019350f0c | ||
|
|
306154572e | ||
|
|
65da7fdfbd | ||
|
|
f12e4128e6 | ||
|
|
635be949f0 | ||
|
|
129e9d5417 | ||
|
|
f389fa4eb2 | ||
|
|
cb78009e64 | ||
|
|
b79b6ab846 | ||
|
|
026fbc910f | ||
|
|
63d3f02abe | ||
|
|
59a612c6fc | ||
|
|
b382b8b264 | ||
|
|
af0e14daff | ||
|
|
9cdb382d0d | ||
|
|
833d0723f2 | ||
|
|
064fca3b0a | ||
|
|
34a7ab3bf3 | ||
|
|
8aa8e431a7 | ||
|
|
fb838d198a | ||
|
|
532b1f370a | ||
|
|
c26f50d359 | ||
|
|
b723469b43 | ||
|
|
91c240c463 | ||
|
|
6bb589325b | ||
|
|
fbd3f05c63 | ||
|
|
07b3606d42 | ||
|
|
287d5a805d | ||
|
|
444c5e571e | ||
|
|
1bf20a3217 | ||
|
|
214e317804 | ||
|
|
8d0e89faf9 | ||
|
|
ae41e5f2e6 | ||
|
|
798a6c0eb6 | ||
|
|
7ebda3b9ae | ||
|
|
30c5493486 | ||
|
|
b4d27f3d0d | ||
|
|
e44a10de2c | ||
|
|
1baa59162e | ||
|
|
aacb11a22b | ||
|
|
d041b0e993 | ||
|
|
6c44808c19 | ||
|
|
ee28bacf0c | ||
|
|
199d05b910 | ||
|
|
138e59d74f | ||
|
|
dd26376b3b | ||
|
|
9e07ee862c | ||
|
|
9b11399d48 | ||
|
|
baf97a90a1 | ||
|
|
41d85e1f36 | ||
|
|
ce0a46dc2b | ||
|
|
3c39c8a788 | ||
|
|
321d6554e7 | ||
|
|
cc9cf92b27 | ||
|
|
02b4f66b12 | ||
|
|
8889323476 | ||
|
|
df1633f011 | ||
|
|
4e840f3025 | ||
|
|
e44bae66d5 | ||
|
|
4e073d1bb6 | ||
|
|
2fbb295490 | ||
|
|
b72631cd82 | ||
|
|
832c09980a | ||
|
|
ca68a8ef87 | ||
|
|
0645cec207 | ||
|
|
53dde3ec9e | ||
|
|
df5c16e05f | ||
|
|
bb3bb938e8 | ||
|
|
c196a2104e | ||
|
|
c78c596095 | ||
|
|
8d2d0f0b22 | ||
|
|
26d06e8f3a | ||
|
|
59eb8ae7f1 | ||
|
|
7d932016b8 | ||
|
|
998eb56348 | ||
|
|
7837064e80 | ||
|
|
53745c61e5 | ||
|
|
14adcff9dc | ||
|
|
7d67288766 | ||
|
|
d904b126df | ||
|
|
649df9be49 | ||
|
|
4e49c1f80d | ||
|
|
41eda72394 | ||
|
|
8a49398740 | ||
|
|
6fbec2b298 | ||
|
|
15d8bbead9 | ||
|
|
f2d72d70f1 | ||
|
|
0bcfd10a9d | ||
|
|
324b4f1b38 | ||
|
|
27f11db7f4 | ||
|
|
0c734c5351 | ||
|
|
48da6a84a6 | ||
|
|
21cb2657ca | ||
|
|
b7ee5e771e | ||
|
|
4967782464 | ||
|
|
29582469d2 | ||
|
|
18c1c9c69a | ||
|
|
ed3521cc53 | ||
|
|
4795d77e84 | ||
|
|
e0c594c402 | ||
|
|
5f02042124 | ||
|
|
4b09023b21 | ||
|
|
320197198b | ||
|
|
d31423d91e | ||
|
|
23bb6ac486 | ||
|
|
7da178c5ec | ||
|
|
1fe9d2598b | ||
|
|
9f56948f47 | ||
|
|
4e2822eb0a | ||
|
|
54697c44de | ||
|
|
b757055525 | ||
|
|
906211f0f5 | ||
|
|
05808e4587 | ||
|
|
0b685cc9a2 | ||
|
|
a9985fec2c | ||
|
|
315237d0fc | ||
|
|
3015db94be | ||
|
|
6ac3943043 | ||
|
|
c9a7f825de | ||
|
|
27c1925021 | ||
|
|
2332d85434 | ||
|
|
e8650525b2 | ||
|
|
ea882e9611 | ||
|
|
e46a28681d | ||
|
|
48ce3a3d8f | ||
|
|
f7fa8d0758 | ||
|
|
2d1094a8aa | ||
|
|
ff6b7d982b | ||
|
|
4c3219688b | ||
|
|
2b723bd094 | ||
|
|
de53ee09e3 | ||
|
|
745dd5ede0 | ||
|
|
ca267fd565 | ||
|
|
2bdbc4d792 | ||
|
|
bdf1ce640c | ||
|
|
8a1a3b971f | ||
|
|
8a9adb5c98 | ||
|
|
23d6444a54 | ||
|
|
2a098a9445 | ||
|
|
1e22364429 | ||
|
|
c65eff0de8 | ||
|
|
4ea26cfa32 | ||
|
|
f3f63454d3 | ||
|
|
194bd8085f | ||
|
|
52e9dac9ee | ||
|
|
9eafdbf741 | ||
|
|
3901b079d7 | ||
|
|
5529f7588c | ||
|
|
0271b0501b | ||
|
|
32ec6d6be7 | ||
|
|
110c68f1e0 | ||
|
|
e42a0102c2 | ||
|
|
ae8e8825b7 | ||
|
|
c287008fc6 | ||
|
|
c245c076f9 | ||
|
|
c6db6834e9 | ||
|
|
9fdb50d12a | ||
|
|
65faa84351 | ||
|
|
c2cfb709bb | ||
|
|
202559211c | ||
|
|
24e97e10c8 | ||
|
|
677456456d | ||
|
|
708de33603 | ||
|
|
5405244e4b | ||
|
|
9c12048964 | ||
|
|
3b5d21fcd4 | ||
|
|
eb15bec707 | ||
|
|
e9fd74ef5d | ||
|
|
d4a29db051 | ||
|
|
27075d1596 | ||
|
|
56bbd269c9 | ||
|
|
046a41177f | ||
|
|
14302d0106 | ||
|
|
68366bf9a3 | ||
|
|
7e65a81d31 | ||
|
|
5268ad041f | ||
|
|
7d325bd0db | ||
|
|
f6d0dd2d0f | ||
|
|
5fc3dff2d5 | ||
|
|
18461e1e47 | ||
|
|
7add4d358e | ||
|
|
c1dbc494ae | ||
|
|
409b5b8577 | ||
|
|
4548730df2 | ||
|
|
4170965c64 | ||
|
|
1f8895257d | ||
|
|
7286d4ffe0 | ||
|
|
2f2e4f389f | ||
|
|
ad47797467 | ||
|
|
ed66e69e7c | ||
|
|
81fa257915 | ||
|
|
0bd6006d70 | ||
|
|
81a0dd4a5c | ||
|
|
78b7dfcc36 | ||
|
|
5d728573cd | ||
|
|
881769b433 | ||
|
|
dfae6a686c | ||
|
|
5e0d640c2f | ||
|
|
a7133e92d8 | ||
|
|
027e16f676 | ||
|
|
53607f6fe7 | ||
|
|
4a9066b1cb | ||
|
|
23c0c63c6a | ||
|
|
20f031fcb4 | ||
|
|
a1c44bab40 | ||
|
|
38a91ce351 | ||
|
|
0e4f04d091 | ||
|
|
ef64e0f6ef | ||
|
|
1af58efad5 | ||
|
|
e741ac0a98 | ||
|
|
ec63618bea | ||
|
|
0efdb7dc33 | ||
|
|
101636a60a | ||
|
|
306b627ef8 | ||
|
|
d601aad274 | ||
|
|
6b0f60d859 | ||
|
|
7c2ab421e9 | ||
|
|
d37802185b | ||
|
|
d1e074c1ca | ||
|
|
a439d55bf8 | ||
|
|
1ad3acb5a5 | ||
|
|
3001a60ee0 | ||
|
|
aad6dcb269 | ||
|
|
ee02013fa5 | ||
|
|
c0736132b1 | ||
|
|
fa8493fd3e | ||
|
|
209038adb2 | ||
|
|
4dad8500bc | ||
|
|
6cffe74f36 | ||
|
|
0233adc184 | ||
|
|
ccbe7646da | ||
|
|
5d456dda67 | ||
|
|
42f251de21 | ||
|
|
f25c4e1423 | ||
|
|
4222fff2e3 | ||
|
|
35ac6eacbc | ||
|
|
e6becff209 | ||
|
|
d0b797d6bd | ||
|
|
014ae84983 | ||
|
|
2aeb8b5dea | ||
|
|
ad7feed5bf | ||
|
|
411d4dc1b3 | ||
|
|
467eee308f | ||
|
|
b740072209 | ||
|
|
d34627fab6 | ||
|
|
0cc6840506 | ||
|
|
d2d9781cfa | ||
|
|
af710acf9e | ||
|
|
62f3a834dc | ||
|
|
53b68c6e0b | ||
|
|
a195b89a71 | ||
|
|
00d00880ed | ||
|
|
2f8f272894 | ||
|
|
4207d1b03f | ||
|
|
73c5dc56d3 | ||
|
|
8891367791 | ||
|
|
8ca05bbb43 | ||
|
|
0e14db9f0b | ||
|
|
fa7bbd86b9 | ||
|
|
86a696ad15 | ||
|
|
783defbbed | ||
|
|
01f779ef37 | ||
|
|
29af52c72e | ||
|
|
a3ff9dacc8 | ||
|
|
c0155ad275 | ||
|
|
ad20c62c73 | ||
|
|
88281c57cd | ||
|
|
cb82489f33 | ||
|
|
66c16329ac | ||
|
|
c092c099be | ||
|
|
307c2ded5a | ||
|
|
00718b4293 | ||
|
|
7222ddd591 | ||
|
|
85db878943 | ||
|
|
3d33b0938b | ||
|
|
e7d2897582 | ||
|
|
4193c1358b | ||
|
|
9cf3f58dcb | ||
|
|
abb98f88af | ||
|
|
f17c597d7d | ||
|
|
ea78673811 | ||
|
|
9d8478a9c0 | ||
|
|
0113cfb78e | ||
|
|
612850efb6 | ||
|
|
b0eac8af63 | ||
|
|
b4c781b7fd | ||
|
|
b647b44c95 | ||
|
|
6f9a72557d | ||
|
|
86c8a45e01 | ||
|
|
d9dd692fa9 | ||
|
|
d735bcdc8b | ||
|
|
00234fa52a | ||
|
|
1878558392 | ||
|
|
86c45e39f6 | ||
|
|
7cb3797624 | ||
|
|
2473a59858 | ||
|
|
8de29b0a90 | ||
|
|
1f115e6836 | ||
|
|
347729a26e | ||
|
|
fac14772f5 | ||
|
|
1f2652cc5e | ||
|
|
f7ece80bec | ||
|
|
7d5059c6ca | ||
|
|
742e9419be | ||
|
|
053a5a55e6 | ||
|
|
390d2a42b8 | ||
|
|
ea0d699e1b | ||
|
|
d83122731b | ||
|
|
3399c51d25 | ||
|
|
6663915149 | ||
|
|
2fa968a923 | ||
|
|
862e6c3e7b | ||
|
|
65db835cb5 | ||
|
|
9f8b8d2596 | ||
|
|
08d69bf1e7 | ||
|
|
a20fc4d9d1 | ||
|
|
7ff6bdbaf6 | ||
|
|
374f2ab779 | ||
|
|
ac8a41004b | ||
|
|
b3418e8d90 | ||
|
|
078d8bd4e5 | ||
|
|
67912e18d0 | ||
|
|
38c4405c16 | ||
|
|
2cb5b54d33 | ||
|
|
13f1ae7c6f | ||
|
|
55bba313fe | ||
|
|
d168304a6d | ||
|
|
d018b9fba0 | ||
|
|
cf81177ed2 | ||
|
|
1b66ce9aa3 | ||
|
|
0d45d88dbd | ||
|
|
7692556d09 | ||
|
|
c08a13b2d1 | ||
|
|
706e8ef130 | ||
|
|
b326ccaaee | ||
|
|
3c14351a5b | ||
|
|
a59362b687 | ||
|
|
fab019a34c | ||
|
|
36712e5486 | ||
|
|
0e5c519363 | ||
|
|
f1ed03b77a | ||
|
|
76b44307ca | ||
|
|
563b9eeb8c | ||
|
|
90621a1dd9 | ||
|
|
2fb181d391 | ||
|
|
2753fc3505 | ||
|
|
c1765423a6 | ||
|
|
deb104c341 | ||
|
|
e0d844d35e | ||
|
|
eb8f2c4eba | ||
|
|
92afc9d8f0 | ||
|
|
5fd0bb034e | ||
|
|
bea124c33e | ||
|
|
0ffef5a767 | ||
|
|
5000be3263 | ||
|
|
edd903c0df | ||
|
|
90b3dd2c19 | ||
|
|
20cab9001b | ||
|
|
0e0d88d755 | ||
|
|
6aed6a0926 | ||
|
|
e67929857f | ||
|
|
e82c6322a0 | ||
|
|
73a1b860d5 | ||
|
|
d301b99738 | ||
|
|
37a659ab30 | ||
|
|
7bcbb4c5b9 | ||
|
|
f74a421f64 | ||
|
|
5f633efa59 | ||
|
|
d9a9747901 | ||
|
|
756ca31319 | ||
|
|
601591c7db | ||
|
|
0cca8f2c83 | ||
|
|
d5043446d9 | ||
|
|
49dc6f90bc | ||
|
|
d803802b43 | ||
|
|
8e382f104b | ||
|
|
b7f8162f5f | ||
|
|
6230510b2e | ||
|
|
f50c9a6b2d | ||
|
|
4cdafcccd2 | ||
|
|
42015f846f | ||
|
|
17ed24de8a | ||
|
|
03c6cf01de | ||
|
|
7ec1688825 | ||
|
|
210e602057 | ||
|
|
136341feef | ||
|
|
a71ceefc3f | ||
|
|
2cfd373463 | ||
|
|
416534b99c | ||
|
|
78ada2809e | ||
|
|
03a1b5ccd4 | ||
|
|
15a24b40de | ||
|
|
b4111d5ec5 | ||
|
|
5c1807c5f5 | ||
|
|
88f249e301 | ||
|
|
77e9283b95 | ||
|
|
6829ed9308 | ||
|
|
9265026e1e | ||
|
|
68d8ed9df0 | ||
|
|
20da98f597 | ||
|
|
3917bbc61b | ||
|
|
87f8c283d2 | ||
|
|
5beec7ea38 | ||
|
|
782732278e | ||
|
|
a728d4427e | ||
|
|
00c99eb41e | ||
|
|
a3ecfca30b | ||
|
|
4ca9d6979e | ||
|
|
bbeeb40d6a | ||
|
|
e1d52de410 | ||
|
|
459bd9ad31 | ||
|
|
7fd8a23f55 | ||
|
|
d84ec529f8 | ||
|
|
04faf21764 | ||
|
|
9d4aa9187c | ||
|
|
344f76b705 | ||
|
|
ea64b9e987 | ||
|
|
ed8a6c1607 | ||
|
|
0899560086 | ||
|
|
32b75cbec3 | ||
|
|
3e25f9c1d7 | ||
|
|
c46fd84767 | ||
|
|
a2ccff5959 | ||
|
|
c064b8d0f3 | ||
|
|
3484d35b77 | ||
|
|
d8a3e1c97a | ||
|
|
7020bbc55d | ||
|
|
56803fa83b | ||
|
|
030956bdb8 | ||
|
|
835690c609 | ||
|
|
1d8e2094e0 | ||
|
|
a6389ce4be | ||
|
|
a22cc09675 | ||
|
|
17c301c775 | ||
|
|
4ad28a324a | ||
|
|
12254b5849 | ||
|
|
d178140d7d | ||
|
|
2dfbee784d | ||
|
|
29844c5716 | ||
|
|
392798d7f5 | ||
|
|
666a3bd6ef | ||
|
|
159d1e4e57 | ||
|
|
e90515453a | ||
|
|
7aa38225fe | ||
|
|
cfa6b8cd90 | ||
|
|
2f6d53a88f | ||
|
|
832d222f5d | ||
|
|
00b4a206ab | ||
|
|
dd07df9ac0 | ||
|
|
974f2b823c | ||
|
|
2ebf8f5941 | ||
|
|
0fc8d864ea | ||
|
|
28fd42fdd3 | ||
|
|
e8c471c059 | ||
|
|
d9da71723d | ||
|
|
3ca0f6f9af | ||
|
|
f45331d019 | ||
|
|
39e18df6e7 | ||
|
|
6cb5c1a179 | ||
|
|
db51b68058 | ||
|
|
f128527039 | ||
|
|
5694316eac | ||
|
|
7fdc5729d2 | ||
|
|
fc1f363a8b | ||
|
|
1545cb2154 | ||
|
|
1e58ef93a4 | ||
|
|
d9dd56f6e2 | ||
|
|
11d7caa6f6 | ||
|
|
36c5432c65 | ||
|
|
940e08ea54 | ||
|
|
0de1317d2f | ||
|
|
d2e6fd2dcc | ||
|
|
9527d7c0c2 | ||
|
|
c73e07ecaf | ||
|
|
8058a9385a | ||
|
|
44a859296a | ||
|
|
057b36bf5b | ||
|
|
3ce669442d | ||
|
|
bb3de2c396 | ||
|
|
796bd649c2 | ||
|
|
30a8444840 | ||
|
|
fc7695a9f3 | ||
|
|
d1d2def4b0 | ||
|
|
f17a776c14 | ||
|
|
f9b2929a64 | ||
|
|
22b4924b63 | ||
|
|
dfba194108 | ||
|
|
a5f3315037 | ||
|
|
02051b5413 | ||
|
|
74622c377f | ||
|
|
d034be1aff | ||
|
|
df0be2468e | ||
|
|
ce2bf43eab | ||
|
|
f418a22c42 | ||
|
|
bcf1c9c7d4 | ||
|
|
ca6d3ba9e2 | ||
|
|
0aca743e0c | ||
|
|
c75edd9af8 | ||
|
|
e3f3c87c30 | ||
|
|
ccdfce9f88 | ||
|
|
9cd4bd55a1 | ||
|
|
311a11e1df | ||
|
|
db99ed87a0 | ||
|
|
40f9bb28f5 | ||
|
|
c1e36b0669 | ||
|
|
cdfe748f08 | ||
|
|
1c53d0bea5 | ||
|
|
8b445a49b9 | ||
|
|
c68df20847 | ||
|
|
7509420d72 | ||
|
|
db539dafd1 | ||
|
|
b842293563 | ||
|
|
3818c32d33 | ||
|
|
3bf447cb86 | ||
|
|
5f14acf1f2 | ||
|
|
ab7e0e31f6 | ||
|
|
6dee6e5481 | ||
|
|
1fba135b4d | ||
|
|
c7e7198dc6 | ||
|
|
4aae83c7ad | ||
|
|
cf61df2acb | ||
|
|
f866ac1778 | ||
|
|
ae3338dc20 | ||
|
|
4567f19885 | ||
|
|
b667b1e19f | ||
|
|
53d28c1346 | ||
|
|
1b34a13321 | ||
|
|
b370807de1 | ||
|
|
37fa39b5b8 | ||
|
|
d824b87b17 | ||
|
|
0bf4642f10 | ||
|
|
49f79068ae | ||
|
|
34351cb6d4 | ||
|
|
37520a9634 | ||
|
|
9714ba1113 | ||
|
|
b6cf044441 | ||
|
|
bf7fbb1218 | ||
|
|
ed66f5b467 | ||
|
|
38f5ec6393 | ||
|
|
15ecee6767 | ||
|
|
640403866f | ||
|
|
25efce87dc | ||
|
|
79bc8f9527 | ||
|
|
0043052057 | ||
|
|
75f1651042 | ||
|
|
b1ca2c8dda | ||
|
|
069b547e58 | ||
|
|
e5136dd2e5 | ||
|
|
d58b7a9ff1 | ||
|
|
f192e8c993 | ||
|
|
2e9260ace5 | ||
|
|
880b48dc5d | ||
|
|
a3c7a8af26 | ||
|
|
088800c769 | ||
|
|
ecf899f610 | ||
|
|
6cbd7d19da | ||
|
|
a2f7c5e5ee | ||
|
|
e236884eeb | ||
|
|
ec6436a43f | ||
|
|
c8eba1338e | ||
|
|
8ce481c427 | ||
|
|
96346ee454 | ||
|
|
d3b22b0447 | ||
|
|
e9d6778cde | ||
|
|
7587d8cafd | ||
|
|
b94eed6df8 | ||
|
|
32b9221b35 | ||
|
|
1ab9f31e3c | ||
|
|
3572bea87c | ||
|
|
c0868feb6b | ||
|
|
8cd40cc99a | ||
|
|
de24bcbc16 | ||
|
|
9eee7778a4 | ||
|
|
2bb85c63d7 | ||
|
|
fa1cebca2d | ||
|
|
ea2db5da95 | ||
|
|
85e5464bf3 | ||
|
|
a2ab4167f1 | ||
|
|
1ba10e18e8 | ||
|
|
e71bf616f2 | ||
|
|
a9c892e6c7 | ||
|
|
33101665e3 | ||
|
|
a330d29a28 | ||
|
|
2bddffd538 | ||
|
|
0ad262bf64 | ||
|
|
8b75ff7335 | ||
|
|
35179f49ad | ||
|
|
d3cc3b16bb | ||
|
|
04e39265ca | ||
|
|
27df62c80b | ||
|
|
1e92029b3c | ||
|
|
1e88d8ba46 | ||
|
|
c42bb942f1 | ||
|
|
57003e3e8a | ||
|
|
ae03ad29c1 | ||
|
|
31e8ad6e0a | ||
|
|
d62b91659c | ||
|
|
3a250447b0 | ||
|
|
678e254b68 | ||
|
|
b86d085519 | ||
|
|
d060f15e83 | ||
|
|
1ac4016235 | ||
|
|
db4b597be8 | ||
|
|
133d54597c | ||
|
|
9083109ff1 | ||
|
|
c6f408ff82 | ||
|
|
898a6cf567 | ||
|
|
dd6659ce3d | ||
|
|
a8119bc9dd | ||
|
|
7d90a4dcfc | ||
|
|
23524e5827 | ||
|
|
337a776fbb | ||
|
|
0c2bab42e8 | ||
|
|
f70099352a | ||
|
|
eb79aad6cd | ||
|
|
4a0f6398eb | ||
|
|
a792190d44 | ||
|
|
3e6a24d9c3 | ||
|
|
fd63fe73cd | ||
|
|
23ccfecad4 | ||
|
|
e0690e0816 | ||
|
|
8708daaa60 | ||
|
|
a883c8a6cf | ||
|
|
cdc57dda38 | ||
|
|
82459a583f | ||
|
|
ec35f8d2f7 | ||
|
|
76070d195e | ||
|
|
8421d2e03c | ||
|
|
82170df927 | ||
|
|
3581905462 | ||
|
|
2a4ca8c5af | ||
|
|
eda1b18bc6 | ||
|
|
8fdef2b7f5 | ||
|
|
063de09d3f | ||
|
|
5f96e8450e | ||
|
|
25b3617196 | ||
|
|
55ae9a0999 | ||
|
|
5943970312 | ||
|
|
35f62f1636 | ||
|
|
9946048b00 | ||
|
|
5fd2dd5b95 | ||
|
|
f01ed4059a | ||
|
|
6a43f029c3 | ||
|
|
8c094a6d03 | ||
|
|
711fce8305 | ||
|
|
efaa279e24 | ||
|
|
f053b99ce3 | ||
|
|
8464a93106 | ||
|
|
d824f987b8 | ||
|
|
8b87ca4d63 | ||
|
|
6a648ae4d5 | ||
|
|
3cddabafb7 | ||
|
|
7f00b46125 | ||
|
|
74759e3e0d | ||
|
|
2df8fa14e8 | ||
|
|
9e63c89166 | ||
|
|
946a1504f8 | ||
|
|
1ca55f777f | ||
|
|
54ee86340c | ||
|
|
834daec255 | ||
|
|
80f2f08283 | ||
|
|
b06d07bd47 | ||
|
|
fd5455e71f | ||
|
|
cdf50ffb8d | ||
|
|
ab5d6878de | ||
|
|
d6037ad15b | ||
|
|
31844006d7 | ||
|
|
ba29da4f48 | ||
|
|
9f285d21ef | ||
|
|
bdb8b91e1f | ||
|
|
723255dfa6 | ||
|
|
b35ad7303c | ||
|
|
973784ca0f | ||
|
|
e911f4b9c5 | ||
|
|
74ba833b47 | ||
|
|
e28132c291 | ||
|
|
afcef53669 | ||
|
|
7a20524fc9 | ||
|
|
066fa92a24 | ||
|
|
d6f17198a7 | ||
|
|
3751292833 | ||
|
|
c433d77362 | ||
|
|
3bf02da791 | ||
|
|
4ca5624e3b | ||
|
|
6d6ee45830 | ||
|
|
ececb31307 | ||
|
|
33ec4897f6 | ||
|
|
a28e25c4fb | ||
|
|
67c8ee3c94 | ||
|
|
b41136047c | ||
|
|
e6cea306c1 | ||
|
|
950a6b42c2 | ||
|
|
6c70a8c041 | ||
|
|
bfee3e4634 | ||
|
|
c50d343f31 | ||
|
|
0a7ea944c9 | ||
|
|
7222f4d079 | ||
|
|
1c77c88b12 | ||
|
|
2d2bf64799 | ||
|
|
160d852cd2 | ||
|
|
1b5401bf7f | ||
|
|
d2a524b26e | ||
|
|
fbd435a018 | ||
|
|
28c38e84da | ||
|
|
38fe77804e | ||
|
|
2a658dc371 | ||
|
|
d301a1c12b | ||
|
|
58db840200 | ||
|
|
01753100f1 | ||
|
|
5073fe5363 | ||
|
|
cab826ba34 | ||
|
|
5fea32203a | ||
|
|
b85ac13c49 | ||
|
|
d7c45dbe08 | ||
|
|
39da050c74 | ||
|
|
443fd1513a | ||
|
|
93058057ec | ||
|
|
7c446872cb | ||
|
|
5eaea39e74 | ||
|
|
db8ee5fc35 | ||
|
|
5190157454 | ||
|
|
2bc03d43bc | ||
|
|
d3ad6ff7bf | ||
|
|
a8387de735 | ||
|
|
38fd971d5c | ||
|
|
15e4f332ed | ||
|
|
33924b2c4a | ||
|
|
5b718e3f8c | ||
|
|
d86eb59963 | ||
|
|
eec05e7eb6 | ||
|
|
38d3e4477c | ||
|
|
bc71d1dd7f | ||
|
|
d4b32a14b8 | ||
|
|
9991c782d4 | ||
|
|
58b6129f7c | ||
|
|
e170c16d02 | ||
|
|
7c4b69753a | ||
|
|
3f72f258a1 | ||
|
|
dc0318092a | ||
|
|
769ed65d61 | ||
|
|
91e27ad4d8 | ||
|
|
70cd39a55f | ||
|
|
facb64c0a7 | ||
|
|
2cc74ea946 | ||
|
|
c8f4faaa95 | ||
|
|
8d3910b7a0 | ||
|
|
c9056fe2dc | ||
|
|
e593c724c4 | ||
|
|
c11be9f82f | ||
|
|
1e28535ed4 | ||
|
|
9354cb5c59 | ||
|
|
5427e564de | ||
|
|
9d4ef9f7ef | ||
|
|
aaa9ca607f | ||
|
|
14bd90bf75 | ||
|
|
625d457517 | ||
|
|
b7575ddc4e | ||
|
|
7217df1829 | ||
|
|
55e76a52be | ||
|
|
4af660666b | ||
|
|
91ee6b9f56 | ||
|
|
28e31472fe | ||
|
|
2fd81413d1 | ||
|
|
c50b61ffc5 | ||
|
|
fa6f945eb2 | ||
|
|
d812b74f36 | ||
|
|
bfac711663 | ||
|
|
3446220895 | ||
|
|
54421a0a6e | ||
|
|
3751ec2c34 | ||
|
|
18988e690b | ||
|
|
a858ddbe67 | ||
|
|
94705970be | ||
|
|
4c29ed4634 | ||
|
|
ea9858d41d | ||
|
|
c9d147c528 | ||
|
|
5ff8d96054 | ||
|
|
6413111615 | ||
|
|
d4cbfc82a6 | ||
|
|
aad36f44c1 | ||
|
|
515c6f93a8 | ||
|
|
665fdbf53e | ||
|
|
3df8b55d65 | ||
|
|
99e63b749a | ||
|
|
eb370ba88f | ||
|
|
4643ef6179 | ||
|
|
d1aad2a921 | ||
|
|
709486f8d9 | ||
|
|
768c608a02 | ||
|
|
4fd21ba834 | ||
|
|
765fbaf247 | ||
|
|
112c6dc020 | ||
|
|
b4aac1d129 | ||
|
|
55ad0d3ab0 | ||
|
|
4d6b3cc3da | ||
|
|
f405ce9660 | ||
|
|
209829d42f | ||
|
|
cc4bde1265 | ||
|
|
bbe6614ddc | ||
|
|
9a619734ae | ||
|
|
28380815e7 | ||
|
|
6a6cf1e3ab | ||
|
|
851469b6a5 | ||
|
|
017e190e4a | ||
|
|
4c351cd1e1 | ||
|
|
045adaaa43 | ||
|
|
48e9e5e2c5 | ||
|
|
674a48133a | ||
|
|
44cfddf601 | ||
|
|
667c3c240b | ||
|
|
ba8a39465f | ||
|
|
562f7c4f2d | ||
|
|
c6c24b8f05 | ||
|
|
261caf3544 | ||
|
|
1957370b5c | ||
|
|
32f9c82ffc | ||
|
|
1a212fb64b | ||
|
|
ecd8354d8f | ||
|
|
dcf0d6649d | ||
|
|
c2087cef25 | ||
|
|
b5021a1121 | ||
|
|
387e272763 | ||
|
|
96e1253030 | ||
|
|
783c3eced4 | ||
|
|
a46dec04eb | ||
|
|
bc0d22e54c | ||
|
|
15cedd71b6 | ||
|
|
3efda7ce74 | ||
|
|
5a884f45ca | ||
|
|
c57c9a972f | ||
|
|
3ef57cde27 | ||
|
|
4dc6512898 | ||
|
|
6485e9cec5 | ||
|
|
f1bc85b5bc | ||
|
|
1c710c95cc | ||
|
|
223ce05fad | ||
|
|
59f0d190cb | ||
|
|
cf57caea70 | ||
|
|
c0e44b324b | ||
|
|
20c177c653 | ||
|
|
16f3ad09dd | ||
|
|
3c40dc0fdb | ||
|
|
d329f665b1 | ||
|
|
19b2f268a8 | ||
|
|
c18ce9abf2 | ||
|
|
44af9ede48 | ||
|
|
ccc40411ea | ||
|
|
51cc1a44d9 | ||
|
|
b565eb7b37 | ||
|
|
861f6f7127 | ||
|
|
fd7574e7fd | ||
|
|
a372a86668 | ||
|
|
e213ca8daf | ||
|
|
10ac82cd41 | ||
|
|
6201271e22 | ||
|
|
17cc178c11 | ||
|
|
ee99cd9786 | ||
|
|
24afafceba | ||
|
|
152482b225 | ||
|
|
fc15e2fe3d | ||
|
|
caf99c2605 | ||
|
|
afa0a529cd | ||
|
|
40d88a1838 | ||
|
|
0ae960834d | ||
|
|
0b59842908 | ||
|
|
eac6800a17 | ||
|
|
04bdf2e5ee | ||
|
|
ba4dec552f | ||
|
|
6f60c4c1a5 | ||
|
|
58b182c46f | ||
|
|
b56cc96ffb | ||
|
|
f6b613ee17 | ||
|
|
1d24a4ccd1 | ||
|
|
00c511b4e9 | ||
|
|
47201098c8 | ||
|
|
a99014b64b | ||
|
|
1ec9b6417a | ||
|
|
46a081e056 | ||
|
|
c7dc7088c4 | ||
|
|
87e23f3e88 | ||
|
|
cb23837684 | ||
|
|
27baab2f57 | ||
|
|
cbd013d2f5 | ||
|
|
dcc05aff08 | ||
|
|
4800afa0db | ||
|
|
b769d1b1d5 | ||
|
|
e6221b5f42 | ||
|
|
11635ec959 | ||
|
|
773f15c563 | ||
|
|
e9b4e4450c | ||
|
|
30042a363e | ||
|
|
315de60e79 | ||
|
|
33e71dbfa9 | ||
|
|
fec1da8818 | ||
|
|
c2c0deaeb7 | ||
|
|
0a95db4035 | ||
|
|
0c60dcb264 | ||
|
|
5ae8f2c5a7 | ||
|
|
86bc261042 | ||
|
|
8680a8175f | ||
|
|
c2d5fd7a90 | ||
|
|
5c382e63b0 | ||
|
|
e3e36d943e | ||
|
|
d15ca6e6d1 | ||
|
|
412248b6d9 | ||
|
|
f89da92b52 | ||
|
|
8a57bdf774 | ||
|
|
cad86487c1 | ||
|
|
1729e1f36d | ||
|
|
4850cdb292 | ||
|
|
f89655e5fa | ||
|
|
6c86a4e48b | ||
|
|
c7bd0e0e03 | ||
|
|
5a355a1d11 | ||
|
|
3bf44819e4 | ||
|
|
27257a40d2 | ||
|
|
4987120713 | ||
|
|
0ca43c0945 | ||
|
|
3eb3dde089 | ||
|
|
a495610f29 | ||
|
|
2506eee0fb | ||
|
|
b13d164ccf | ||
|
|
01bf8bc4a8 | ||
|
|
fe2abf6903 | ||
|
|
f611199fab | ||
|
|
8fffeaca94 | ||
|
|
aa4992469d | ||
|
|
7dd7aec10c | ||
|
|
bfac67fa87 | ||
|
|
06b9dc86d6 | ||
|
|
83253c76e8 | ||
|
|
66f5c30f5a | ||
|
|
da46057666 | ||
|
|
10343559a6 | ||
|
|
e3dd55a102 | ||
|
|
f6154ba46f | ||
|
|
a38e1f201d | ||
|
|
a97fc8b53a | ||
|
|
d0ec3f4139 | ||
|
|
ecc1ae826f | ||
|
|
408377e51b | ||
|
|
1f5698ce15 | ||
|
|
d4a23ee68c | ||
|
|
b76b82d6ee | ||
|
|
2a0154dfa0 | ||
|
|
622177e0df | ||
|
|
b04131b408 | ||
|
|
e93ef851ac | ||
|
|
4d7f2e6698 | ||
|
|
abf827bc2b | ||
|
|
ee25d35220 | ||
|
|
eef8e594a2 | ||
|
|
5edeffbda4 | ||
|
|
af4df9c2e2 | ||
|
|
ac18ad2fcd | ||
|
|
1d293bb186 | ||
|
|
99611910de | ||
|
|
632c88c5f8 | ||
|
|
a3d6155096 | ||
|
|
af3fc34098 | ||
|
|
dbd261fbf1 | ||
|
|
19a7a322c5 | ||
|
|
36cf0aaf8e | ||
|
|
32b0937ad9 | ||
|
|
13b176d515 | ||
|
|
81aab6bdb3 | ||
|
|
23abf14888 | ||
|
|
79f49fab4d | ||
|
|
e732aae87b | ||
|
|
cf3ca2e9e0 | ||
|
|
1030330add | ||
|
|
b82e3b873b | ||
|
|
b0f885ab2c | ||
|
|
2758a2eb03 | ||
|
|
6c012aa0ad | ||
|
|
52a3c01829 | ||
|
|
33b0d15bb3 | ||
|
|
9565a4f36a | ||
|
|
07d1252fb0 | ||
|
|
f0ef22f730 | ||
|
|
1f070f78e6 | ||
|
|
e2c29aabf8 | ||
|
|
f0fb37c9fc | ||
|
|
b4a4831ef9 | ||
|
|
3680ff4b6a | ||
|
|
d899954912 | ||
|
|
fdf01e1d1e | ||
|
|
d49a08626f | ||
|
|
2512bace19 | ||
|
|
6e3961fe0f | ||
|
|
020c87158c | ||
|
|
a12df840a4 | ||
|
|
ca9565bb60 | ||
|
|
4d39924059 | ||
|
|
a409557019 | ||
|
|
54abfee660 | ||
|
|
42f02bb9fc | ||
|
|
a4348f9646 | ||
|
|
7a33814886 | ||
|
|
1e7ee927c4 | ||
|
|
b423d0346b | ||
|
|
3b3af9056a | ||
|
|
7d62f00274 | ||
|
|
d5dcc78acd | ||
|
|
fdbbdfea05 | ||
|
|
2d974543ff | ||
|
|
44bf90e830 | ||
|
|
ca8cf27371 | ||
|
|
4d7da801a7 | ||
|
|
dfebbecb87 | ||
|
|
5805edef0a | ||
|
|
6eed2fff0e | ||
|
|
25b76e3b86 | ||
|
|
e976fbb623 | ||
|
|
11a93c8470 | ||
|
|
5b0f9f1f4d | ||
|
|
eaaaeada51 | ||
|
|
b440a900c4 | ||
|
|
0de8fa1934 | ||
|
|
bb95c9e3a3 | ||
|
|
937eed1ee6 | ||
|
|
0cd9d11d4e | ||
|
|
4809afe287 | ||
|
|
681802d030 | ||
|
|
ddbe1d9c97 | ||
|
|
aa3826ed8d | ||
|
|
c2333982fa | ||
|
|
5d963ce7ae | ||
|
|
8e1c53b1e7 | ||
|
|
5c073257b7 | ||
|
|
35e09b3acd | ||
|
|
7ed0248032 | ||
|
|
c7a813e8d5 | ||
|
|
b97b87bfb0 | ||
|
|
106a22eb27 | ||
|
|
0439a3e73d | ||
|
|
3fb6cfb1be | ||
|
|
4eba28fa96 | ||
|
|
0443d5baf7 | ||
|
|
19c393a8d9 | ||
|
|
f63db4dd19 | ||
|
|
106b2a7a98 | ||
|
|
876461e8d2 | ||
|
|
2f359025f2 | ||
|
|
d5fd82e8d6 | ||
|
|
123e453bd2 | ||
|
|
d4075c6fa9 | ||
|
|
dd1189c5ff | ||
|
|
e5af9f53e6 | ||
|
|
80eb2e8371 | ||
|
|
284d02d172 | ||
|
|
2124b24f61 | ||
|
|
fc39239be1 | ||
|
|
d018265175 | ||
|
|
62a039b672 | ||
|
|
9e1df8b804 | ||
|
|
fcac817f11 | ||
|
|
7d89676df6 | ||
|
|
96987add7b | ||
|
|
88a5e50256 | ||
|
|
7bc3f83e7b | ||
|
|
6bb6fb64d8 | ||
|
|
e7b737cba2 | ||
|
|
5604ba5416 | ||
|
|
32b0383689 | ||
|
|
9b33f56456 | ||
|
|
5341a0fc3b | ||
|
|
649a1b3032 | ||
|
|
73e1dabe14 | ||
|
|
0372fc18ee | ||
|
|
fbfe585766 | ||
|
|
f0727c3361 | ||
|
|
c4d787cb27 | ||
|
|
7bed61f210 | ||
|
|
af3bc9427d | ||
|
|
447c0cdf8d | ||
|
|
3ae9dfa323 | ||
|
|
03ae6c987e | ||
|
|
ca21591a4b | ||
|
|
c201579f5d | ||
|
|
833343cf56 | ||
|
|
d93eea4e56 | ||
|
|
f7c2d5f9e7 | ||
|
|
dcc887583f | ||
|
|
d2e6631b46 | ||
|
|
ef1ebd509d | ||
|
|
3a90089405 | ||
|
|
bcacee9d6e | ||
|
|
ebd2cce1db | ||
|
|
f72a287ab5 | ||
|
|
e61f7c33e3 | ||
|
|
b018e7b12b | ||
|
|
0faadc979e | ||
|
|
ebe3424b01 | ||
|
|
f05dc45c03 | ||
|
|
51ca17735d | ||
|
|
be1794049b | ||
|
|
b23f005348 | ||
|
|
2a5242aa6e | ||
|
|
f5d4866996 | ||
|
|
27d8aac39e | ||
|
|
ba4d3b09ff | ||
|
|
d52e69ac9d | ||
|
|
b6a4412c7b | ||
|
|
af59709b4c | ||
|
|
8a754431cf | ||
|
|
0b2abf71ea | ||
|
|
98629be450 | ||
|
|
6f49341ba5 | ||
|
|
7bdc20f15c | ||
|
|
a83bc31258 | ||
|
|
9d893f51c2 | ||
|
|
deca116e13 | ||
|
|
391b2a95d3 | ||
|
|
37d7dd5fe0 | ||
|
|
325c544e17 | ||
|
|
c88dd155dc | ||
|
|
d7b57a77c6 | ||
|
|
a0fb59973c | ||
|
|
1bb8df5db5 | ||
|
|
ac701c4759 | ||
|
|
cd3eab103c | ||
|
|
6e0ecc584a | ||
|
|
f54154195d | ||
|
|
79e6477338 | ||
|
|
e8d9cb74ad | ||
|
|
7364a6c89c | ||
|
|
28bc5e72e7 | ||
|
|
30f4f7ba57 | ||
|
|
f02c0b7d8b | ||
|
|
d342a1d55c | ||
|
|
27b3e37e16 | ||
|
|
6331647a10 | ||
|
|
42430e2dc7 | ||
|
|
c80ecfe0cb | ||
|
|
e096fb8e85 | ||
|
|
584b3c1fc2 | ||
|
|
8a2e6216d7 | ||
|
|
8ffff57b72 | ||
|
|
3bc5608476 | ||
|
|
c63618a44c | ||
|
|
c33c2ab1ca | ||
|
|
086697dd2e | ||
|
|
3b68f1571e | ||
|
|
a75f19f924 | ||
|
|
f1a5daf840 | ||
|
|
ca8dde28bf | ||
|
|
2c247a599d | ||
|
|
41a9f6f16d | ||
|
|
2381dca463 | ||
|
|
f17724c7ef | ||
|
|
9c14005cde | ||
|
|
25aa0d4770 | ||
|
|
5439f30f64 | ||
|
|
654a5b9dfe | ||
|
|
b6b87f5480 | ||
|
|
57f6249711 | ||
|
|
5a8bb432fe | ||
|
|
89bde6e6a1 | ||
|
|
521dea8c0e | ||
|
|
eefd6af5a4 | ||
|
|
e6cdb8dbb1 | ||
|
|
114c348039 | ||
|
|
ba7168edd4 | ||
|
|
9e6e170e49 | ||
|
|
1eba821522 | ||
|
|
e0c639e145 | ||
|
|
bbc9dcb9e3 | ||
|
|
e83159102f | ||
|
|
6a2ac1e669 | ||
|
|
ac76984052 | ||
|
|
373fc31408 | ||
|
|
9fbb248929 | ||
|
|
73ec8a51c2 | ||
|
|
a2e3301dfd | ||
|
|
b924656abd | ||
|
|
8f2b62ccc0 | ||
|
|
9265101025 | ||
|
|
1d2a4437e3 | ||
|
|
3116fff552 | ||
|
|
8cc53bfb46 | ||
|
|
44b151c617 | ||
|
|
914a962a94 | ||
|
|
7649d23ac4 | ||
|
|
467c8f44d6 | ||
|
|
b33cf65593 | ||
|
|
3b717d4705 | ||
|
|
fb5ea1643a | ||
|
|
fb895f8bd4 | ||
|
|
976814e039 | ||
|
|
2783a7978f | ||
|
|
4c0c777874 | ||
|
|
0e9730d923 | ||
|
|
c3d9531f98 | ||
|
|
92f6826a6c | ||
|
|
7c52eef041 | ||
|
|
73ccc1d7ed | ||
|
|
d023455f73 | ||
|
|
e72cd1751a | ||
|
|
9d2a46ab87 | ||
|
|
f8c45302f9 | ||
|
|
e78dc5d333 | ||
|
|
538c3b90ea | ||
|
|
17f0cb2369 | ||
|
|
340b2ed8f4 | ||
|
|
314e1de5f0 | ||
|
|
8544279cb6 | ||
|
|
95bee07317 | ||
|
|
046d173090 | ||
|
|
c38ef7c487 | ||
|
|
59fbb8106c | ||
|
|
8a34146028 | ||
|
|
c38fd92029 | ||
|
|
7e9f56a770 | ||
|
|
3876169ce3 | ||
|
|
c91a79488d | ||
|
|
aa0f2ccdc6 | ||
|
|
8a9ae47d41 | ||
|
|
9442da2b44 | ||
|
|
0456bf515e | ||
|
|
7bfd362567 | ||
|
|
25b8098c02 | ||
|
|
f216e2d6e5 | ||
|
|
1c31015fa8 | ||
|
|
55fc778d38 | ||
|
|
090ca861b9 | ||
|
|
f275cc404b | ||
|
|
22dcf9d84d | ||
|
|
d167fecf07 | ||
|
|
c000f5a3a1 | ||
|
|
50193ab149 | ||
|
|
402636f70c | ||
|
|
340f636ea7 | ||
|
|
3b8a952c84 | ||
|
|
4a84466ffe | ||
|
|
feafb79529 | ||
|
|
721fe74eec | ||
|
|
85c8239116 | ||
|
|
6bd0843dd5 | ||
|
|
8291184ae6 | ||
|
|
564dd1b20d | ||
|
|
c6b41c5913 | ||
|
|
8ea1b03ab2 | ||
|
|
e3f2a9c803 | ||
|
|
ccf47c3c2f | ||
|
|
24a47f1e1e | ||
|
|
6a86c2d984 | ||
|
|
909c265e51 | ||
|
|
d70e915557 | ||
|
|
a1f4b703e6 | ||
|
|
538960ac04 | ||
|
|
a43a34fe10 | ||
|
|
db3c87f852 | ||
|
|
7cd5d19f31 | ||
|
|
246def7525 | ||
|
|
dda0f04b8d | ||
|
|
1f45b420cc | ||
|
|
2e6c4c3266 | ||
|
|
890ef6c87b | ||
|
|
025ef02e71 | ||
|
|
b1c15750b4 | ||
|
|
f1f2eb583f | ||
|
|
ba486b5de7 | ||
|
|
c96b1f6106 | ||
|
|
b5af572d93 | ||
|
|
fe632b71d6 | ||
|
|
234ee0c4d1 | ||
|
|
1fb50e3f4e | ||
|
|
f478184342 | ||
|
|
c29a1e4c0d | ||
|
|
aed9fb8a24 | ||
|
|
f9bdd8433a | ||
|
|
0b8de7f94a | ||
|
|
e995d93bb2 | ||
|
|
379a6cd511 | ||
|
|
1a9c7ad9de | ||
|
|
1aade88bd9 | ||
|
|
ae71968909 | ||
|
|
b8f22dc99d | ||
|
|
0e08632bf9 | ||
|
|
eaa43442db |
8
.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE_1.md
vendored
Normal file
8
.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE_1.md
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
---
|
||||
name: Bug report (bluescreen crash) Bug报告 (蓝屏报错)
|
||||
about: Create a report of problems which made the crash with a bluescreen
|
||||
---
|
||||
Screenshot with crash information (*Image(s) Here*):
|
||||
|
||||
|
||||
If you can reproduce it, write the steps here. If you can't, try to describe the exactly time the game crash, like pressing which key or which button (*Details Here*)
|
||||
8
.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE_2.md
vendored
Normal file
8
.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE_2.md
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
---
|
||||
name: Bug report (unintended behaviors) Bug报告 (奇怪的现象)
|
||||
about: Create a report of unintended behaviors
|
||||
---
|
||||
Screenshot with unintended behaviors (*Image(s) Here*):
|
||||
|
||||
|
||||
If you can reproduce it, write the steps here. If you can't, try to describe the exactly time the game crash, like pressing which key or which button (*Details Here*):
|
||||
4
.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE_3.md
vendored
Normal file
4
.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE_3.md
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
---
|
||||
name: Feature Request 添加新功能
|
||||
about: Suggest an idea that may improve Techmino 提一些有意思的新想法,让Techmino越来越好!
|
||||
---
|
||||
24
.github/actions/automatic-test/action.yml
vendored
Normal file
24
.github/actions/automatic-test/action.yml
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
name: 'Automatic Test'
|
||||
description: 'Check for obvious errors.'
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/build-love
|
||||
with:
|
||||
file-path: Techmino.love
|
||||
- name: Download love
|
||||
shell: bash
|
||||
run: |
|
||||
curl -L https://github.com/love2d/love/releases/download/11.3/love-11.3-linux-x86_64.tar.gz | tar xz
|
||||
- name: Prepare PulseAudio
|
||||
shell: bash
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install pulseaudio pulseaudio-utils pavucontrol alsa-oss alsa-utils -y
|
||||
- name: Run automated test
|
||||
uses: GabrielBB/xvfb-action@v1
|
||||
with:
|
||||
run: |
|
||||
./dest/love Techmino.love --test
|
||||
102
.github/actions/build-android/action.yml
vendored
Normal file
102
.github/actions/build-android/action.yml
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
name: 'build Android'
|
||||
description: 'build Android package'
|
||||
inputs:
|
||||
type:
|
||||
required: true
|
||||
apkCode:
|
||||
required: true
|
||||
name:
|
||||
required: true
|
||||
file-path:
|
||||
required: true
|
||||
SIGNING_KEY:
|
||||
required: true
|
||||
KEY_STORE_PASSWORD:
|
||||
required: true
|
||||
ALIAS:
|
||||
required: true
|
||||
KEY_PASSWORD:
|
||||
required: true
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- uses: actions/setup-java@v2
|
||||
with:
|
||||
distribution: 'adopt'
|
||||
java-version: '8'
|
||||
- name: Clone love-android
|
||||
shell: bash
|
||||
run: |
|
||||
git clone --recurse-submodules https://github.com/26F-Studio/love-android -b CI --depth 1 --shallow-submodules
|
||||
- uses: ./.github/actions/build-love
|
||||
with:
|
||||
file-path: love-android/app/src/main/assets/game.love
|
||||
- name: Download ColdClear arm64-v8a
|
||||
uses: ./.github/actions/get-cc
|
||||
with:
|
||||
arch: android_aarch64
|
||||
dir: ColdClear/arm64-v8a
|
||||
- name: Process ColdClear arm64-v8a
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p love-android/app/libs/arm64-v8a
|
||||
mv ColdClear/arm64-v8a/love-11.3-android/lib/arm64-v8a/libcold_clear.so love-android/app/libs/arm64-v8a
|
||||
mkdir -p libAndroid/arm64-v8a
|
||||
mv ColdClear/arm64-v8a/libs/arm64-v8a/libCCloader.so libAndroid/arm64-v8a
|
||||
- name: Download ColdClear armeabi-v7a
|
||||
uses: ./.github/actions/get-cc
|
||||
with:
|
||||
arch: android_armv7
|
||||
dir: ColdClear/armeabi-v7a
|
||||
- name: Process ColdClear armeabi-v7a
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p love-android/app/libs/armeabi-v7a
|
||||
mv ColdClear/armeabi-v7a/love-11.3-android/lib/armeabi-v7a/libcold_clear.so love-android/app/libs/armeabi-v7a
|
||||
mkdir -p libAndroid/armeabi-v7a
|
||||
mv ColdClear/armeabi-v7a/libs/armeabi-v7a/libCCloader.so libAndroid/armeabi-v7a
|
||||
- name: Pack ColdClear
|
||||
shell: bash
|
||||
run: |
|
||||
7z a -tzip love-android/app/src/main/assets/game.love libAndroid
|
||||
- name: update Android information
|
||||
shell: python
|
||||
run: |
|
||||
if '${{ inputs.type }}' == 'Release':
|
||||
appName = 'Techmino'
|
||||
packageName = 'org.love2d.MrZ.Techmino'
|
||||
edition = 'release'
|
||||
elif '${{ inputs.type }}' == 'Snapshot':
|
||||
appName = 'Techmino_Snapshot'
|
||||
packageName = 'org.love2d.MrZ.Techmino.Snapshot'
|
||||
edition = 'snapshot'
|
||||
with open('./love-android/app/src/main/AndroidManifest.xml', "r+", encoding='utf-8') as file:
|
||||
data = file.read()
|
||||
data = data\
|
||||
.replace('@appName', appName)\
|
||||
.replace('@edition', edition)
|
||||
file.seek(0)
|
||||
file.truncate()
|
||||
file.write(data)
|
||||
with open("./love-android/app/build.gradle", "r+", encoding='utf-8') as file:
|
||||
data = file.read()
|
||||
data = data\
|
||||
.replace('@packageName', packageName)\
|
||||
.replace('@versionCode', '${{ inputs.apkCode }}')\
|
||||
.replace('@versionName', '${{ inputs.name }}')\
|
||||
.replace('@storePassword', '${{ inputs.KEY_STORE_PASSWORD }}')\
|
||||
.replace('@keyAlias', '${{ inputs.ALIAS }}')\
|
||||
.replace('@keyPassword', '${{ inputs.KEY_PASSWORD }}')
|
||||
file.seek(0)
|
||||
file.truncate()
|
||||
file.write(data)
|
||||
- name: Build Techmino
|
||||
shell: bash
|
||||
run: |
|
||||
echo "${{ inputs.SIGNING_KEY }}" | base64 -d > love-android/app/android.keystore
|
||||
chmod 777 love-android/gradlew
|
||||
cd love-android/
|
||||
./gradlew assembleRelease
|
||||
- name: rename apk
|
||||
shell: bash
|
||||
run: mv love-android/app/build/outputs/apk/release/app-release.apk ${{ inputs.file-path }}
|
||||
96
.github/actions/build-ios/action.yml
vendored
Normal file
96
.github/actions/build-ios/action.yml
vendored
Normal file
@@ -0,0 +1,96 @@
|
||||
name: 'build iOS'
|
||||
description: 'build iOS package'
|
||||
inputs:
|
||||
name:
|
||||
required: true
|
||||
description: "Version name"
|
||||
type:
|
||||
required: true
|
||||
description: "Build type"
|
||||
APPLE_API_ID:
|
||||
required: true
|
||||
description: "API key ID"
|
||||
APPLE_API_ISSUER:
|
||||
required: true
|
||||
description: "API issuer ID"
|
||||
APPLE_API_KEY:
|
||||
required: true
|
||||
description: "API key content"
|
||||
APPLE_APP_BUILD:
|
||||
required: true
|
||||
description: "Build number"
|
||||
APPLE_APP_CHANGELOG:
|
||||
required: true
|
||||
description: "Changelog"
|
||||
APPLE_APP_ID:
|
||||
required: true
|
||||
description: "AppStore Apple ID"
|
||||
APPLE_APP_IDENTIFIER:
|
||||
required: true
|
||||
description: "Bundle ID"
|
||||
APPLE_APP_PROFILE:
|
||||
required: true
|
||||
description: "Provisioning Profile specifer"
|
||||
APPLE_KEYCHAIN_NAME:
|
||||
required: true
|
||||
description: "Temporary keychain name"
|
||||
APPLE_KEYCHAIN_PWD:
|
||||
required: true
|
||||
description: "Temporary keychain password"
|
||||
FASTLANE_DISCORD_WEBHOOK:
|
||||
required: true
|
||||
description: "Fastlane Discord webhook"
|
||||
FASTLANE_ACTION_ID:
|
||||
required: true
|
||||
description: "Fastlane Action ID"
|
||||
FASTLANE_MATCH_PWD:
|
||||
required: true
|
||||
description: "Fastlane Match description password"
|
||||
FASTLANE_MATCH_TOKEN:
|
||||
required: true
|
||||
description: "Fastlane Match Github token"
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- uses: ./.github/actions/build-love
|
||||
- name: Checkout source codes
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: '26F-Studio/Techmino-iOS'
|
||||
path: 'Techmino-iOS'
|
||||
- name: Download CCloader
|
||||
uses: ./.github/actions/get-cc
|
||||
with:
|
||||
arch: iOS
|
||||
- name: Update source codes
|
||||
shell: bash
|
||||
run: |
|
||||
mv Techmino.love Techmino-iOS/platform/xcode
|
||||
mv libcold_clear.a Techmino-iOS/platform/xcode
|
||||
mv libCCloader.a Techmino-iOS/platform/xcode
|
||||
- name: Run fastlane
|
||||
uses: maierj/fastlane-action@v2.0.1
|
||||
with:
|
||||
lane: '${{ inputs.type }}'
|
||||
subdirectory: 'Techmino-iOS/platform/xcode'
|
||||
env:
|
||||
ACTION_ID: '${{ inputs.FASTLANE_ACTION_ID }}'
|
||||
API_ID: '${{ inputs.APPLE_API_ID }}'
|
||||
API_ISSUER: '${{ inputs.APPLE_API_ISSUER }}'
|
||||
API_KEY: '${{ inputs.APPLE_API_KEY }}'
|
||||
APP_BUILD: '${{ inputs.APPLE_APP_BUILD }}'
|
||||
APP_CHANGELOG: '${{ inputs.APPLE_APP_CHANGELOG }}'
|
||||
APP_ID: '${{ inputs.APPLE_APP_ID }}'
|
||||
APP_IDENTIFIER: '${{ inputs.APPLE_APP_IDENTIFIER }}'
|
||||
APP_PROFILE: '${{ inputs.APPLE_APP_PROFILE }}'
|
||||
APP_VERSION: '${{ inputs.name }}'
|
||||
DISCORD_WEBHOOK: '${{ inputs.FASTLANE_DISCORD_WEBHOOK }}'
|
||||
KEYCHAIN_NAME: '${{ inputs.APPLE_KEYCHAIN_NAME }}'
|
||||
KEYCHAIN_PWD: '${{ inputs.APPLE_KEYCHAIN_PWD }}'
|
||||
MATCH_PASSWORD: '${{ inputs.FASTLANE_MATCH_PWD }}'
|
||||
MATCH_TOKEN: '${{ inputs.FASTLANE_MATCH_TOKEN }}'
|
||||
- name: Move ipa
|
||||
shell: bash
|
||||
run: |
|
||||
mv Techmino-iOS/platform/xcode/Techmino.ipa Techmino.ipa
|
||||
|
||||
40
.github/actions/build-linux/action.yml
vendored
Normal file
40
.github/actions/build-linux/action.yml
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
name: 'build Linux'
|
||||
description: 'build Linux package'
|
||||
inputs:
|
||||
file-path:
|
||||
required: false
|
||||
default: Techmino.AppImage
|
||||
icon:
|
||||
required: true
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Download AppImageKit
|
||||
shell: bash
|
||||
run: |
|
||||
curl -OL https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-x86_64.AppImage
|
||||
- name: Download love
|
||||
shell: bash
|
||||
run: |
|
||||
curl -OL https://github.com/love2d/love/releases/download/11.3/love-11.3-x86_64.AppImage
|
||||
chmod 777 love-11.3-x86_64.AppImage
|
||||
./love-11.3-x86_64.AppImage --appimage-extract
|
||||
- name: Download ColdClear
|
||||
uses: ./.github/actions/get-cc
|
||||
with:
|
||||
arch: linux
|
||||
- name: Pack Techmino
|
||||
shell: bash
|
||||
run: |
|
||||
rm -rf squashfs-root/love squashfs-root/love.desktop squashfs-root/love.svg squashfs-root/.DirIcon
|
||||
mv .github/build/Linux/love.template squashfs-root/love
|
||||
mv .github/build/Linux/Techmino.desktop.template squashfs-root/Techmino.desktop
|
||||
mv ${{ inputs.icon }} squashfs-root/icon.png
|
||||
cp squashfs-root/icon.png squashfs-root/.DirIcon
|
||||
chmod 777 squashfs-root/love
|
||||
mkdir -p squashfs-root/usr/share/Techmino
|
||||
mv media parts Zframework conf.lua main.lua version.lua legals.md license.txt squashfs-root/usr/share/Techmino
|
||||
mv CCloader.so squashfs-root/usr/share/Techmino
|
||||
mv libcold_clear.so squashfs-root/usr/lib
|
||||
chmod 777 appimagetool-x86_64.AppImage
|
||||
./appimagetool-x86_64.AppImage squashfs-root ${{ inputs.file-path }}
|
||||
11
.github/actions/build-love/action.yml
vendored
Normal file
11
.github/actions/build-love/action.yml
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
name: 'build love'
|
||||
description: 'build love file'
|
||||
inputs:
|
||||
file-path:
|
||||
required: true
|
||||
default: Techmino.love
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- run: 7z a -tzip ${{ inputs.file-path }} media parts Zframework conf.lua main.lua version.lua legals.md license.txt
|
||||
shell: bash
|
||||
152
.github/actions/build-macos/action.yml
vendored
Normal file
152
.github/actions/build-macos/action.yml
vendored
Normal file
@@ -0,0 +1,152 @@
|
||||
name: 'build Mac OS'
|
||||
description: 'build Mac OS package'
|
||||
inputs:
|
||||
name:
|
||||
required: true
|
||||
description: "Version name"
|
||||
icon:
|
||||
required: true
|
||||
description: "App icons (.icns)"
|
||||
APPLE_API_ID:
|
||||
required: true
|
||||
description: "API key ID"
|
||||
APPLE_API_ISSUER:
|
||||
required: true
|
||||
description: "API issuer ID"
|
||||
APPLE_API_KEY:
|
||||
required: true
|
||||
description: "API key content"
|
||||
APPLE_APP_IDENTIFIER:
|
||||
required: true
|
||||
description: "Bundle ID"
|
||||
APPLE_KEYCHAIN_NAME:
|
||||
required: true
|
||||
description: "Temporary keychain name"
|
||||
APPLE_KEYCHAIN_PWD:
|
||||
required: true
|
||||
description: "Temporary keychain password"
|
||||
FASTLANE_MATCH_PWD:
|
||||
required: true
|
||||
description: "Fastlane Match description password"
|
||||
FASTLANE_MATCH_TOKEN:
|
||||
required: true
|
||||
description: "Fastlane Match Github token"
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- uses: ./.github/actions/build-love
|
||||
- name: Checkout template
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: '26F-Studio/Techmino-macOS'
|
||||
path: 'Techmino-macOS'
|
||||
- name: Download ColdClear
|
||||
uses: ./.github/actions/get-cc
|
||||
with:
|
||||
arch: macOS
|
||||
- name: Fastlane match
|
||||
uses: maierj/fastlane-action@v2.0.1
|
||||
with:
|
||||
lane: 'get_cert'
|
||||
subdirectory: 'Techmino-macOS'
|
||||
env:
|
||||
API_ID: '${{ inputs.APPLE_API_ID }}'
|
||||
API_ISSUER: '${{ inputs.APPLE_API_ISSUER }}'
|
||||
API_KEY: '${{ inputs.APPLE_API_KEY }}'
|
||||
APP_IDENTIFIER: '${{ inputs.APPLE_APP_IDENTIFIER }}'
|
||||
KEYCHAIN_NAME: '${{ inputs.APPLE_KEYCHAIN_NAME }}'
|
||||
KEYCHAIN_PWD: '${{ inputs.APPLE_KEYCHAIN_PWD }}'
|
||||
MATCH_PASSWORD: '${{ inputs.FASTLANE_MATCH_PWD }}'
|
||||
MATCH_TOKEN: '${{ inputs.FASTLANE_MATCH_TOKEN }}'
|
||||
- name: Modify template
|
||||
shell: python
|
||||
run: |
|
||||
import datetime
|
||||
from io import open
|
||||
thisYear = str(datetime.datetime.today().year)
|
||||
with open('./.github/build/macOS/info.plist.template', 'r', encoding='utf-8') as file:
|
||||
data = file.read()
|
||||
data = data\
|
||||
.replace('@versionName', '${{ inputs.name }}'[1:])\
|
||||
.replace('@thisYear', thisYear)\
|
||||
.replace('@bundleId', '${{ inputs.APPLE_APP_IDENTIFIER }}')
|
||||
with open('./Techmino-macOS/Techmino.app/Contents/info.plist', 'w+', encoding='utf-8') as file:
|
||||
file.write(data)
|
||||
- name: Pack
|
||||
shell: bash
|
||||
run: |
|
||||
mv Techmino.love Techmino-macOS/Techmino.app/Contents/Resources
|
||||
mv CCloader.dylib Techmino-macOS/Techmino.app/Contents/Frameworks
|
||||
mv ${{ inputs.icon }} Techmino-macOS/Techmino.app/Contents/Resources/iconfile.icns
|
||||
|
||||
chmod +x Techmino-macOS/Techmino.app/Contents/Frameworks/CCloader.dylib
|
||||
chmod +x Techmino-macOS/Techmino.app/Contents/MacOS/love
|
||||
- name: Codesign executable
|
||||
shell: bash
|
||||
run: |
|
||||
security unlock-keychain -p ${{ inputs.TEMP_KEYCHAIN_PASSWORD }} \
|
||||
~/Library/Keychains/${{ inputs.TEMP_KEYCHAIN_USER }}-db
|
||||
|
||||
[[ $(security find-identity) =~ ([0-9A-F]{40}) ]]
|
||||
|
||||
codesign --timestamp --force --strict --deep -v \
|
||||
--options runtime \
|
||||
-s ${BASH_REMATCH[1]} \
|
||||
--entitlements Techmino-macOS/love.entitlements \
|
||||
Techmino-macOS/Techmino.app
|
||||
- name: Fastlane notarize
|
||||
uses: maierj/fastlane-action@v2.0.1
|
||||
with:
|
||||
lane: 'make_safe'
|
||||
subdirectory: 'Techmino-macOS'
|
||||
env:
|
||||
API_ID: '${{ inputs.APPLE_API_ID }}'
|
||||
API_ISSUER: '${{ inputs.APPLE_API_ISSUER }}'
|
||||
API_KEY: '${{ inputs.APPLE_API_KEY }}'
|
||||
APP_IDENTIFIER: '${{ inputs.APPLE_APP_IDENTIFIER }}'
|
||||
NOTARIZE_OBJECT: 'Techmino.app'
|
||||
- name: Create DMG file
|
||||
shell: bash
|
||||
run: |
|
||||
brew install create-dmg
|
||||
create-dmg \
|
||||
--volname "Techmino for MacOS" \
|
||||
--volicon "./.github/build/macOS/Techminodisk.icns" \
|
||||
--window-pos 200 120 \
|
||||
--window-size 800 500 \
|
||||
--icon-size 100 \
|
||||
--icon "Techmino.app" 239 203 \
|
||||
--background ".github/build/macOS/backgroundImage.tiff" \
|
||||
--hide-extension "Techmino.app" \
|
||||
--app-drop-link 565 203 \
|
||||
"Techmino-macOS/Techmino-macOS.dmg" \
|
||||
"Techmino-macOS/Techmino.app/"
|
||||
- name: Codesign DMG
|
||||
shell: bash
|
||||
run: |
|
||||
security unlock-keychain -p ${{ inputs.TEMP_KEYCHAIN_PASSWORD }} \
|
||||
~/Library/Keychains/${{ inputs.TEMP_KEYCHAIN_USER }}-db
|
||||
|
||||
[[ $(security find-identity) =~ ([0-9A-F]{40}) ]]
|
||||
|
||||
codesign --timestamp --force --strict --deep -v \
|
||||
--options runtime \
|
||||
-s ${BASH_REMATCH[1]} \
|
||||
--entitlements Techmino-macOS/love.entitlements \
|
||||
Techmino-macOS/Techmino-macOS.dmg
|
||||
- name: Fastlane notarize
|
||||
uses: maierj/fastlane-action@v2.0.1
|
||||
with:
|
||||
lane: 'make_safe'
|
||||
subdirectory: 'Techmino-macOS'
|
||||
env:
|
||||
API_ID: '${{ inputs.APPLE_API_ID }}'
|
||||
API_ISSUER: '${{ inputs.APPLE_API_ISSUER }}'
|
||||
API_KEY: '${{ inputs.APPLE_API_KEY }}'
|
||||
APP_IDENTIFIER: '${{ inputs.APPLE_APP_IDENTIFIER }}'
|
||||
NOTARIZE_OBJECT: 'Techmino-macOS.dmg'
|
||||
- name: Finalize
|
||||
shell: bash
|
||||
run: |
|
||||
mv Techmino-macOS/Techmino-macOS.dmg Techmino.dmg
|
||||
spctl -a -t open --context context:primary-signature -vv Techmino.dmg
|
||||
60
.github/actions/build-windows/action.yml
vendored
Normal file
60
.github/actions/build-windows/action.yml
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
name: 'build Windows'
|
||||
description: 'build Windows package'
|
||||
inputs:
|
||||
love-url:
|
||||
required: true
|
||||
love-dir:
|
||||
required: true
|
||||
arch:
|
||||
required: true
|
||||
version:
|
||||
required: true
|
||||
icon:
|
||||
required: true
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Download love
|
||||
uses: ./.github/actions/get-unzip
|
||||
with:
|
||||
url: ${{ inputs.love-url }}
|
||||
- name: move love
|
||||
shell: bash
|
||||
run: mv ${{ inputs.love-dir }} love
|
||||
- name: Download ColdClear
|
||||
uses: ./.github/actions/get-cc
|
||||
with:
|
||||
arch: ${{ inputs.arch }}
|
||||
- name: Download ResourceHacker
|
||||
uses: ./.github/actions/get-unzip
|
||||
with:
|
||||
url: http://www.angusj.com/resourcehacker/resource_hacker.zip
|
||||
- uses: ./.github/actions/build-love
|
||||
- name: update Windows template
|
||||
shell: python
|
||||
run: |
|
||||
Version = '${{ inputs.version }}'.replace('V', '')
|
||||
FileVersion = (f"{Version.replace('.', ',')},0")
|
||||
with open('./.github/build/Windows/Techmino.rc.template', 'r', encoding='utf8') as file:
|
||||
data = file.read()
|
||||
data = data\
|
||||
.replace('@FileVersion', FileVersion)\
|
||||
.replace('@Version', Version)
|
||||
with open('Techmino.rc', 'w+', encoding='utf8') as file:
|
||||
file.write(data)
|
||||
- name: Pack Techmino
|
||||
shell: pwsh
|
||||
run: |
|
||||
cmd /c copy /b .\love\love.exe + .\Techmino.love .\love\Techmino.exe
|
||||
del .\love\love.exe
|
||||
del .\love\lovec.exe
|
||||
del .\love\game.ico
|
||||
del .\love\love.ico
|
||||
del .\love\changes.txt
|
||||
del .\love\readme.txt
|
||||
move .\cold_clear.dll .\love
|
||||
move .\CCloader.dll .\love
|
||||
cmd /c '.\ResourceHacker.exe -open .\love\Techmino.exe -save .\love\Techmino.exe -action delete -mask ICONGROUP,,'
|
||||
cmd /c '.\ResourceHacker.exe -open .\Techmino.rc -save .\Techmino.res -action compile'
|
||||
cmd /c '.\ResourceHacker.exe -open .\love\Techmino.exe -save .\love\Techmino.exe -action addoverwrite -res "${{ inputs.icon }}" -mask ICONGROUP,1,'
|
||||
cmd /c '.\ResourceHacker.exe -open .\love\Techmino.exe -save .\love\Techmino.exe -action addoverwrite -res ".\Techmino.res" -mask VERSIONINFO,1,'
|
||||
32
.github/actions/get-cc/action.yml
vendored
Normal file
32
.github/actions/get-cc/action.yml
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
name: 'get cc'
|
||||
description: 'download cc into specific dir'
|
||||
inputs:
|
||||
tag:
|
||||
required: false
|
||||
default:
|
||||
arch:
|
||||
required: true
|
||||
dir:
|
||||
required: false
|
||||
default: '.'
|
||||
repo:
|
||||
required: false
|
||||
default: 26F-Studio/cold_clear_ai_love2d_wrapper
|
||||
temp-file:
|
||||
required: false
|
||||
default: temp.zip
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- run: |
|
||||
echo "::set-output name=tag::"$(if [ -z "${{ inputs.tag }}" ]
|
||||
then curl -w '%{url_effective}' -I -L -s -S https://github.com/${{ inputs.repo }}/releases/latest -o /dev/null | grep -o '\<[^/]*$'
|
||||
else echo ${{ inputs.tag }}
|
||||
fi)
|
||||
id: get-tag
|
||||
shell: bash
|
||||
- uses: ./.github/actions/get-unzip
|
||||
with:
|
||||
url: https://github.com/${{ inputs.repo }}/releases/download/${{ steps.get-tag.outputs.tag }}/${{ inputs.arch }}.zip
|
||||
dir: ${{ inputs.dir }}
|
||||
temp-file: ${{ inputs.temp-file }}
|
||||
18
.github/actions/get-unzip/action.yml
vendored
Normal file
18
.github/actions/get-unzip/action.yml
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
name: 'get and unzip'
|
||||
description: 'cURL and then 7-zip x'
|
||||
inputs:
|
||||
url:
|
||||
required: true
|
||||
dir:
|
||||
required: false
|
||||
default: '.'
|
||||
temp-file:
|
||||
required: false
|
||||
default: temp.zip
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- run: curl -L ${{ inputs.url }} -o ${{ inputs.temp-file }}
|
||||
shell: bash
|
||||
- run: 7z x ${{ inputs.temp-file }} -o${{ inputs.dir }}
|
||||
shell: bash
|
||||
37
.github/actions/update-version/action.yml
vendored
Normal file
37
.github/actions/update-version/action.yml
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
name: 'update version'
|
||||
description: 'common update logic for snapshot and release'
|
||||
inputs:
|
||||
commit:
|
||||
required: false
|
||||
type:
|
||||
required: true
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- shell: python
|
||||
name: update snapshot saving folder
|
||||
run: |
|
||||
from io import open
|
||||
if '${{ inputs.type }}'.lower() != 'snapshot':
|
||||
exit(0)
|
||||
with open('conf.lua', 'r+', encoding='utf-8') as file:
|
||||
data = file.read()
|
||||
data = data.replace("t.identity='Techmino'--Saving folder", "t.identity='Techmino_Snapshot'--Saving folder")
|
||||
file.seek(0)
|
||||
file.truncate()
|
||||
file.flush()
|
||||
file.write(data)
|
||||
- shell: python
|
||||
run: |
|
||||
from io import open
|
||||
import re
|
||||
with open('version.lua', 'r+', encoding='utf-8') as file:
|
||||
commitHash = '${{ inputs.commit }}'
|
||||
if commitHash != '':
|
||||
commitHash = '@' + commitHash[0:4]
|
||||
data = file.read()
|
||||
data = re.sub('(\d)"', r'\1' + commitHash + '"', data, 1)
|
||||
file.seek(0)
|
||||
file.truncate()
|
||||
file.flush()
|
||||
file.write(data)
|
||||
8
.github/build/Linux/Techmino.desktop.template
vendored
Normal file
8
.github/build/Linux/Techmino.desktop.template
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
[Desktop Entry]
|
||||
Name=Techmino Alpha
|
||||
Comment=Techmino is fun!
|
||||
Exec=wrapper-love %f
|
||||
Type=Application
|
||||
Categories=Game;
|
||||
Terminal=false
|
||||
Icon=icon
|
||||
BIN
.github/build/Linux/icon.png
vendored
Normal file
BIN
.github/build/Linux/icon.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
BIN
.github/build/Linux/icon_snapshot.png
vendored
Normal file
BIN
.github/build/Linux/icon_snapshot.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
5
.github/build/Linux/love.template
vendored
Normal file
5
.github/build/Linux/love.template
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
export LOVE_LAUNCHER_LOCATION="$(dirname "$(which "$0")")"
|
||||
export LD_LIBRARY_PATH="${LOVE_LAUNCHER_LOCATION}/lib/x86_64-linux-gnu:${LOVE_LAUNCHER_LOCATION}/usr/bin:${LOVE_LAUNCHER_LOCATION}/usr/lib:${LOVE_LAUNCHER_LOCATION}/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"
|
||||
/sbin/ldconfig -p | grep -q libstdc++ || export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${LOVE_LAUNCHER_LOCATION}/libstdc++/"
|
||||
exec ${LOVE_BIN_WRAPPER} "${LOVE_LAUNCHER_LOCATION}/usr/bin/love" "${LOVE_LAUNCHER_LOCATION}/usr/share/Techmino"
|
||||
23
.github/build/Windows/Techmino.rc.template
vendored
Normal file
23
.github/build/Windows/Techmino.rc.template
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
1 VERSIONINFO
|
||||
FILEVERSION @FileVersion
|
||||
PRODUCTVERSION @FileVersion
|
||||
FILEOS 0x40004
|
||||
FILETYPE 0x1
|
||||
{
|
||||
BLOCK "StringFileInfo"
|
||||
{
|
||||
BLOCK "040904B0"
|
||||
{
|
||||
VALUE "FileDescription", "Techmino Alpha"
|
||||
VALUE "CompanyName", "26F Studio"
|
||||
VALUE "LegalCopyright", "Copyright @ 26F Studio"
|
||||
VALUE "ProductName", "Techmino"
|
||||
VALUE "ProductVersion", "@Version"
|
||||
}
|
||||
}
|
||||
|
||||
BLOCK "VarFileInfo"
|
||||
{
|
||||
VALUE "Translation", 0x0409 0x04E4
|
||||
}
|
||||
}
|
||||
BIN
.github/build/Windows/icon.ico
vendored
Normal file
BIN
.github/build/Windows/icon.ico
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
BIN
.github/build/Windows/icon.png
vendored
Normal file
BIN
.github/build/Windows/icon.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 76 KiB |
BIN
.github/build/Windows/icon_snapshot.ico
vendored
Normal file
BIN
.github/build/Windows/icon_snapshot.ico
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
BIN
.github/build/macOS/Techminodisk.icns
vendored
Normal file
BIN
.github/build/macOS/Techminodisk.icns
vendored
Normal file
Binary file not shown.
BIN
.github/build/macOS/backgroundImage.tiff
vendored
Normal file
BIN
.github/build/macOS/backgroundImage.tiff
vendored
Normal file
Binary file not shown.
BIN
.github/build/macOS/icon.icns
vendored
Normal file
BIN
.github/build/macOS/icon.icns
vendored
Normal file
Binary file not shown.
BIN
.github/build/macOS/icon_snapshot.icns
vendored
Normal file
BIN
.github/build/macOS/icon_snapshot.icns
vendored
Normal file
Binary file not shown.
56
.github/build/macOS/info.plist.template
vendored
Normal file
56
.github/build/macOS/info.plist.template
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>BuildMachineOSBuild</key>
|
||||
<string>19B88</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>love</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>iconfile</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>@bundleId</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>Techmino</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>@versionName</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>LoVe</string>
|
||||
<key>CFBundleSupportedPlatforms</key>
|
||||
<array>
|
||||
<string>MacOSX</string>
|
||||
</array>
|
||||
<key>DTCompiler</key>
|
||||
<string>com.apple.compilers.llvm.clang.1_0</string>
|
||||
<key>DTPlatformBuild</key>
|
||||
<string>11C504</string>
|
||||
<key>DTPlatformVersion</key>
|
||||
<string>GM</string>
|
||||
<key>DTSDKBuild</key>
|
||||
<string>19B90</string>
|
||||
<key>DTSDKName</key>
|
||||
<string>macosx10.15</string>
|
||||
<key>DTXcode</key>
|
||||
<string>1130</string>
|
||||
<key>DTXcodeBuild</key>
|
||||
<string>11C504</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.games</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.7</string>
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<true/>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>©2020-@thisYear 26F Studio, GNU LGPLv3.0</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
<key>NSSupportsAutomaticGraphicsSwitching</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</plist>
|
||||
38
.github/workflows/build.yml
vendored
38
.github/workflows/build.yml
vendored
@@ -1,38 +0,0 @@
|
||||
name: Techmino CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ ci ]
|
||||
pull_request:
|
||||
branches: [ ci ]
|
||||
|
||||
jobs:
|
||||
build-windows:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
lfs: true
|
||||
- name: Download love
|
||||
run: |
|
||||
curl -LO https://github.com/love2d/love/releases/download/11.3/love-11.3-win64.zip
|
||||
7z x love-11.3-win64.zip
|
||||
- name: Download ColdClear
|
||||
run: |
|
||||
curl -LO https://github.com/26F-Studio/Techmino/releases/download/coldclear/coldclear.zip
|
||||
7z x coldclear.zip -ocoldclear
|
||||
move coldclear\win64\cold_clear.dll love-11.3-win64
|
||||
move coldclear\win64\CCloader.dll love-11.3-win64
|
||||
- name: Pack Techmino
|
||||
shell: cmd
|
||||
run: |
|
||||
7z a game.zip BGM document image modes parts SFX VOICE Zframework conf.lua font.ttf main.lua
|
||||
move game.zip game.love
|
||||
copy /b love-11.3-win64\love.exe + game.love love-11.3-win64\Techmino.exe
|
||||
del love-11.3-win64\love.exe
|
||||
del love-11.3-win64\lovec.exe
|
||||
- name: Artifact
|
||||
uses: actions/upload-artifact@v1.0.0
|
||||
with:
|
||||
name: Techmino_win64
|
||||
path: love-11.3-win64
|
||||
203
.github/workflows/dev.yml
vendored
Normal file
203
.github/workflows/dev.yml
vendored
Normal file
@@ -0,0 +1,203 @@
|
||||
name: Techmino Develop CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main, ci* ]
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
|
||||
jobs:
|
||||
get-info:
|
||||
runs-on: ubuntu-20.04
|
||||
outputs:
|
||||
name: ${{ steps.actual-get-info.outputs.name }}
|
||||
apkCode: ${{ steps.actual-get-info.outputs.apkCode }}
|
||||
code: ${{ steps.actual-get-info.outputs.code }}
|
||||
commit: ${{ steps.actual-get-info.outputs.commit }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Install lua
|
||||
run: |
|
||||
sudo apt-get install lua5.3 -y
|
||||
- name: Get Version
|
||||
id: actual-get-info
|
||||
run: |
|
||||
echo "::set-output name=name::$(lua .github/workflows/getVersion.lua -name)"
|
||||
echo "::set-output name=apkCode::$(lua .github/workflows/getVersion.lua -apkCode)"
|
||||
echo "::set-output name=code::$(lua .github/workflows/getVersion.lua -code)"
|
||||
echo "::set-output name=commit::$(git rev-parse --short ${{ GITHUB.SHA }})"
|
||||
|
||||
automatic-test:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/automatic-test
|
||||
|
||||
build-windows:
|
||||
runs-on: windows-latest
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
with:
|
||||
commit: ${{ needs.get-info.outputs.commit }}
|
||||
type: snapshot
|
||||
- uses: ./.github/actions/build-windows
|
||||
with:
|
||||
love-url: https://github.com/love2d/love/releases/download/11.3/love-11.3-win64.zip
|
||||
love-dir: love-11.3-win64
|
||||
arch: win64
|
||||
version: ${{ needs.get-info.outputs.name }}
|
||||
icon: .\.github\build\Windows\icon_snapshot.ico
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Techmino_${{ needs.get-info.outputs.name }}_${{ GITHUB.RUN_NUMBER }}_${{ needs.get-info.outputs.commit }}_Windows
|
||||
path: love
|
||||
|
||||
build-linux:
|
||||
runs-on: ubuntu-20.04
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
with:
|
||||
commit: ${{ needs.get-info.outputs.commit }}
|
||||
type: snapshot
|
||||
- uses: ./.github/actions/build-linux
|
||||
with:
|
||||
icon: .github/build/Linux/icon_snapshot.png
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Techmino_${{ needs.get-info.outputs.name }}_${{ GITHUB.RUN_NUMBER }}_${{ needs.get-info.outputs.commit }}_Linux
|
||||
path: Techmino.AppImage
|
||||
|
||||
build-android:
|
||||
runs-on: ubuntu-20.04
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
with:
|
||||
commit: ${{ needs.get-info.outputs.commit }}
|
||||
type: snapshot
|
||||
- uses: ./.github/actions/build-android
|
||||
with:
|
||||
type: Snapshot
|
||||
apkCode: ${{ needs.get-info.outputs.apkCode }}
|
||||
name: ${{ needs.get-info.outputs.name }}
|
||||
file-path: Techmino_Snapshot.apk
|
||||
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
|
||||
KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
|
||||
ALIAS: ${{ secrets.ALIAS }}
|
||||
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Techmino_${{ needs.get-info.outputs.name }}_${{ GITHUB.RUN_NUMBER }}_${{ needs.get-info.outputs.commit }}_Android
|
||||
path: Techmino_Snapshot.apk
|
||||
|
||||
build-android-mini:
|
||||
runs-on: ubuntu-20.04
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
with:
|
||||
commit: ${{ needs.get-info.outputs.commit }}
|
||||
type: snapshot
|
||||
- name: remove media
|
||||
run: |
|
||||
rm -rf media/music media/effect media/vocal
|
||||
- uses: ./.github/actions/build-android
|
||||
with:
|
||||
type: Snapshot
|
||||
apkCode: ${{ needs.get-info.outputs.apkCode }}
|
||||
name: ${{ needs.get-info.outputs.name }}
|
||||
file-path: Techmino_Snapshot_Mini.apk
|
||||
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
|
||||
KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
|
||||
ALIAS: ${{ secrets.ALIAS }}
|
||||
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Techmino_${{ needs.get-info.outputs.name }}_${{ GITHUB.RUN_NUMBER }}_${{ needs.get-info.outputs.commit }}_Android_Mini
|
||||
path: Techmino_Snapshot_Mini.apk
|
||||
|
||||
build-macOS:
|
||||
runs-on: macos-10.15
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
with:
|
||||
commit: ${{ needs.get-info.outputs.commit }}
|
||||
type: snapshot
|
||||
- uses: ./.github/actions/build-macos
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.name }}
|
||||
icon: .github/build/macOS/icon_snapshot.icns
|
||||
APPLE_API_ID: '${{ secrets.APPLE_API_ID }}'
|
||||
APPLE_API_ISSUER: '${{ secrets.APPLE_API_ISSUER }}'
|
||||
APPLE_API_KEY: '${{ secrets.APPLE_API_KEY }}'
|
||||
APPLE_APP_IDENTIFIER: '${{ secrets.APPLE_APP_IDENTIFIER }}'
|
||||
APPLE_KEYCHAIN_NAME: '${{ secrets.APPLE_KEYCHAIN_NAME }}'
|
||||
APPLE_KEYCHAIN_PWD: '${{ secrets.APPLE_KEYCHAIN_PWD }}'
|
||||
FASTLANE_MATCH_PWD: '${{ secrets.FASTLANE_MATCH_PWD }}'
|
||||
FASTLANE_MATCH_TOKEN: '${{ secrets.FASTLANE_MATCH_TOKEN }}'
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Techmino_${{ needs.get-info.outputs.name }}_${{ GITHUB.RUN_NUMBER }}_${{ needs.get-info.outputs.commit }}_macOS
|
||||
path: Techmino.dmg
|
||||
|
||||
build-iOS:
|
||||
runs-on: macos-latest
|
||||
if: (!startsWith( github.ref , 'refs/heads/ci-')) || startsWith( github.ref , 'refs/heads/ci-ios-')
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
with:
|
||||
commit: ${{ needs.get-info.outputs.commit }}
|
||||
type: snapshot
|
||||
- uses: ./.github/actions/build-ios
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.name }}
|
||||
type: 'dev'
|
||||
APPLE_API_ID: '${{ secrets.APPLE_API_ID }}'
|
||||
APPLE_API_ISSUER: '${{ secrets.APPLE_API_ISSUER }}'
|
||||
APPLE_API_KEY: '${{ secrets.APPLE_API_KEY }}'
|
||||
APPLE_APP_BUILD: '${{ needs.get-info.outputs.code }}.2.${{ github.run_number }}.${{ github.run_attempt }}'
|
||||
APPLE_APP_CHANGELOG: '${{ github.event.commits[0].message }}'
|
||||
APPLE_APP_ID: '${{ secrets.APPLE_APP_ID }}'
|
||||
APPLE_APP_IDENTIFIER: '${{ secrets.APPLE_APP_IDENTIFIER }}'
|
||||
APPLE_APP_PROFILE: '${{ secrets.APPLE_APP_PROFILE }}'
|
||||
APPLE_KEYCHAIN_NAME: '${{ secrets.APPLE_KEYCHAIN_NAME }}'
|
||||
APPLE_KEYCHAIN_PWD: '${{ secrets.APPLE_KEYCHAIN_PWD }}'
|
||||
FASTLANE_ACTION_ID: '${{ github.run_id }}'
|
||||
FASTLANE_DISCORD_WEBHOOK: '${{ secrets.FASTLANE_DISCORD_WEBHOOK }}'
|
||||
FASTLANE_MATCH_PWD: '${{ secrets.FASTLANE_MATCH_PWD }}'
|
||||
FASTLANE_MATCH_TOKEN: '${{ secrets.FASTLANE_MATCH_TOKEN }}'
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Techmino_${{ needs.get-info.outputs.name }}_${{ GITHUB.RUN_NUMBER }}_${{ needs.get-info.outputs.commit }}_iOS
|
||||
path: Techmino.ipa
|
||||
|
||||
build-love:
|
||||
runs-on: ubuntu-20.04
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-love
|
||||
with:
|
||||
file-path: Techmino.love
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Techmino_${{ needs.get-info.outputs.name }}_${{ GITHUB.RUN_NUMBER }}_${{ needs.get-info.outputs.commit }}_Love
|
||||
path: Techmino.love
|
||||
28
.github/workflows/getVersion.lua
vendored
Normal file
28
.github/workflows/getVersion.lua
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
local arg=arg[1]
|
||||
if arg=="-apkCode"then
|
||||
local code=require"version".apkCode
|
||||
print(code)
|
||||
elseif arg=="-code"then
|
||||
local str=require"version".code
|
||||
print(str)
|
||||
elseif arg=="-name"then
|
||||
local str=require"version".string
|
||||
print(str)
|
||||
elseif arg=="-release"then
|
||||
local str=require"version".string:gsub("V","",1)
|
||||
print(str)
|
||||
elseif arg=="-updateTitle"then
|
||||
local note=require"parts.updateLog"
|
||||
local p1=note:find("\n%d")+1
|
||||
local p2=note:find("\n",p1)-1
|
||||
note=note:sub(p1,p2)
|
||||
print(note)
|
||||
elseif arg=="-updateNote"then
|
||||
local note=require"parts.updateLog"
|
||||
local p1=note:find("\n",note:find("\n%d")+1)+1
|
||||
local p2=note:find("\n%d",p1+1)
|
||||
note=note:sub(p1,p2-2)
|
||||
:gsub(" ","- ")
|
||||
:gsub(" ","# ")
|
||||
print(note)
|
||||
end
|
||||
189
.github/workflows/release.yml
vendored
Normal file
189
.github/workflows/release.yml
vendored
Normal file
@@ -0,0 +1,189 @@
|
||||
name: Techmino Release CI
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v*"
|
||||
|
||||
jobs:
|
||||
get-info:
|
||||
runs-on: ubuntu-20.04
|
||||
outputs:
|
||||
name: ${{ steps.actual-get-info.outputs.name }}
|
||||
apkCode: ${{ steps.actual-get-info.outputs.apkCode }}
|
||||
code: ${{ steps.actual-get-info.outputs.code }}
|
||||
release: ${{ steps.actual-get-info.outputs.release }}
|
||||
updateTitle: ${{ steps.actual-get-info.outputs.updateTitle }}
|
||||
updateNote: ${{ steps.actual-get-info.outputs.updateNote }}
|
||||
commit: ${{ steps.actual-get-info.outputs.commit }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Install lua
|
||||
run: |
|
||||
sudo apt-get install lua5.3 -y
|
||||
- name: Get Version
|
||||
id: actual-get-info
|
||||
run: |
|
||||
UPDATE_NOTE=$(lua .github/workflows/getVersion.lua -updateNote)
|
||||
UPDATE_NOTE="${UPDATE_NOTE//'%'/'%25'}"
|
||||
UPDATE_NOTE="${UPDATE_NOTE//$'\n'/'%0A'}"
|
||||
UPDATE_NOTE="${UPDATE_NOTE//$'\r'/'%0D'}"
|
||||
echo "::set-output name=name::$(lua .github/workflows/getVersion.lua -name)"
|
||||
echo "::set-output name=apkCode::$(lua .github/workflows/getVersion.lua -apkCode)"
|
||||
echo "::set-output name=code::$(lua .github/workflows/getVersion.lua -code)"
|
||||
echo "::set-output name=release::$(lua .github/workflows/getVersion.lua -release)"
|
||||
echo "::set-output name=updateTitle::$(lua .github/workflows/getVersion.lua -updateTitle)"
|
||||
echo "::set-output name=updateNote::$UPDATE_NOTE"
|
||||
echo "::set-output name=commit::$(git rev-parse --short ${{ GITHUB.SHA }})"
|
||||
|
||||
build-windows-x64:
|
||||
runs-on: windows-latest
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-windows
|
||||
with:
|
||||
love-url: https://github.com/love2d/love/releases/download/11.3/love-11.3-win64.zip
|
||||
love-dir: love-11.3-win64
|
||||
arch: win64
|
||||
version: ${{ needs.get-info.outputs.release }}
|
||||
icon: .\.github\build\Windows\icon.ico
|
||||
- name: Pack Techmino
|
||||
run: 7z a -tzip .\Techmino_a${{ needs.get-info.outputs.release }}_Win64.zip .\love
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
files: Techmino_a${{ needs.get-info.outputs.release }}_Win64.zip
|
||||
|
||||
build-windows-x86:
|
||||
runs-on: windows-latest
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-windows
|
||||
with:
|
||||
love-url: https://github.com/love2d/love/releases/download/11.3/love-11.3-win32.zip
|
||||
love-dir: love-11.3-win32
|
||||
arch: win32
|
||||
version: ${{ needs.get-info.outputs.release }}
|
||||
icon: .\.github\build\Windows\icon.ico
|
||||
- name: Pack Techmino
|
||||
run: 7z a -tzip .\Techmino_a${{ needs.get-info.outputs.release }}_Win32.zip .\love
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
files: Techmino_a${{ needs.get-info.outputs.release }}_Win32.zip
|
||||
|
||||
build-linux:
|
||||
runs-on: ubuntu-20.04
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-linux
|
||||
with:
|
||||
file-path: Techmino_a${{ needs.get-info.outputs.release }}_Linux.AppImage
|
||||
icon: .github/build/Linux/icon.png
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
files: Techmino_a${{ needs.get-info.outputs.release }}_Linux.AppImage
|
||||
|
||||
build-android:
|
||||
runs-on: ubuntu-20.04
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-android
|
||||
with:
|
||||
type: Release
|
||||
apkCode: ${{ needs.get-info.outputs.apkCode }}
|
||||
name: ${{ needs.get-info.outputs.name }}
|
||||
file-path: Techmino_a${{ needs.get-info.outputs.release }}_Android.apk
|
||||
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
|
||||
KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
|
||||
ALIAS: ${{ secrets.ALIAS }}
|
||||
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
files: Techmino_a${{ needs.get-info.outputs.release }}_Android.apk
|
||||
|
||||
build-macOS:
|
||||
runs-on: macos-10.15
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-macos
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.name }}
|
||||
icon: .github/build/macOS/icon.icns
|
||||
APPLE_API_ID: "${{ secrets.APPLE_API_ID }}"
|
||||
APPLE_API_ISSUER: "${{ secrets.APPLE_API_ISSUER }}"
|
||||
APPLE_API_KEY: "${{ secrets.APPLE_API_KEY }}"
|
||||
APPLE_APP_IDENTIFIER: "${{ secrets.APPLE_APP_IDENTIFIER }}"
|
||||
APPLE_KEYCHAIN_NAME: "${{ secrets.APPLE_KEYCHAIN_NAME }}"
|
||||
APPLE_KEYCHAIN_PWD: "${{ secrets.APPLE_KEYCHAIN_PWD }}"
|
||||
FASTLANE_MATCH_PWD: "${{ secrets.FASTLANE_MATCH_PWD }}"
|
||||
FASTLANE_MATCH_TOKEN: "${{ secrets.FASTLANE_MATCH_TOKEN }}"
|
||||
- name: Pack Techmino
|
||||
run: |
|
||||
mv Techmino.dmg Techmino_a${{ needs.get-info.outputs.release }}_MacOS.dmg
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
files: Techmino_a${{ needs.get-info.outputs.release }}_MacOS.dmg
|
||||
|
||||
build-iOS:
|
||||
runs-on: macos-latest
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-ios
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.name }}
|
||||
type: "release"
|
||||
APPLE_API_ID: "${{ secrets.APPLE_API_ID }}"
|
||||
APPLE_API_ISSUER: "${{ secrets.APPLE_API_ISSUER }}"
|
||||
APPLE_API_KEY: "${{ secrets.APPLE_API_KEY }}"
|
||||
APPLE_APP_BUILD: "${{ needs.get-info.outputs.code }}.0.${{ github.run_number }}.${{ github.run_attempt }}"
|
||||
APPLE_APP_CHANGELOG: "${{ needs.get-info.outputs.updateNote }}"
|
||||
APPLE_APP_ID: "${{ secrets.APPLE_APP_ID }}"
|
||||
APPLE_APP_IDENTIFIER: "${{ secrets.APPLE_APP_IDENTIFIER }}"
|
||||
APPLE_APP_PROFILE: "${{ secrets.APPLE_APP_PROFILE }}"
|
||||
APPLE_KEYCHAIN_NAME: "${{ secrets.APPLE_KEYCHAIN_NAME }}"
|
||||
APPLE_KEYCHAIN_PWD: "${{ secrets.APPLE_KEYCHAIN_PWD }}"
|
||||
FASTLANE_ACTION_ID: "${{ github.run_id }}"
|
||||
FASTLANE_DISCORD_WEBHOOK: "${{ secrets.FASTLANE_DISCORD_WEBHOOK }}"
|
||||
FASTLANE_MATCH_PWD: "${{ secrets.FASTLANE_MATCH_PWD }}"
|
||||
FASTLANE_MATCH_TOKEN: "${{ secrets.FASTLANE_MATCH_TOKEN }}"
|
||||
- name: Rename ipa
|
||||
shell: bash
|
||||
run: |
|
||||
mv Techmino.ipa Techmino_a${{ needs.get-info.outputs.release }}_iOS.ipa
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
files: Techmino_a${{ needs.get-info.outputs.release }}_iOS.ipa
|
||||
|
||||
Add-Release-note:
|
||||
runs-on: ubuntu-20.04
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
body: ${{ needs.get-info.outputs.updateNote }}
|
||||
154
.github/workflows/test.yml
vendored
Normal file
154
.github/workflows/test.yml
vendored
Normal file
@@ -0,0 +1,154 @@
|
||||
name: Techmino Test CI
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'pre*'
|
||||
|
||||
jobs:
|
||||
get-info:
|
||||
runs-on: ubuntu-20.04
|
||||
outputs:
|
||||
name: ${{ steps.actual-get-info.outputs.name }}
|
||||
apkCode: ${{ steps.actual-get-info.outputs.apkCode }}
|
||||
code: ${{ steps.actual-get-info.outputs.code }}
|
||||
release: ${{ steps.actual-get-info.outputs.release }}
|
||||
commit: ${{ steps.actual-get-info.outputs.commit }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Install lua
|
||||
run: |
|
||||
sudo apt-get install lua5.3 -y
|
||||
- name: Get Version
|
||||
id: actual-get-info
|
||||
run: |
|
||||
echo "::set-output name=name::$(lua .github/workflows/getVersion.lua -name)"
|
||||
echo "::set-output name=apkCode::$(lua .github/workflows/getVersion.lua -apkCode)"
|
||||
echo "::set-output name=code::$(lua .github/workflows/getVersion.lua -code)"
|
||||
echo "::set-output name=release::$(lua .github/workflows/getVersion.lua -release)"
|
||||
echo "::set-output name=commit::$(git rev-parse --short ${{ GITHUB.SHA }})"
|
||||
|
||||
build-windows:
|
||||
runs-on: windows-latest
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
with:
|
||||
commit: ${{ needs.get-info.outputs.commit }}
|
||||
type: snapshot
|
||||
- uses: ./.github/actions/build-windows
|
||||
with:
|
||||
love-url: https://github.com/love2d/love/releases/download/11.3/love-11.3-win64.zip
|
||||
love-dir: love-11.3-win64
|
||||
arch: win64
|
||||
version: ${{ needs.get-info.outputs.name }}
|
||||
icon: .\.github\build\Windows\icon_snapshot.ico
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_Windows
|
||||
path: love
|
||||
|
||||
build-linux:
|
||||
runs-on: ubuntu-20.04
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
with:
|
||||
commit: ${{ needs.get-info.outputs.commit }}
|
||||
type: snapshot
|
||||
- uses: ./.github/actions/build-linux
|
||||
with:
|
||||
icon: .github/build/Linux/icon_snapshot.png
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_Linux
|
||||
path: Techmino.AppImage
|
||||
|
||||
build-android:
|
||||
runs-on: ubuntu-20.04
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
with:
|
||||
commit: ${{ needs.get-info.outputs.commit }}
|
||||
type: snapshot
|
||||
- uses: ./.github/actions/build-android
|
||||
with:
|
||||
type: Snapshot
|
||||
apkCode: ${{ needs.get-info.outputs.apkCode }}
|
||||
name: ${{ needs.get-info.outputs.name }}
|
||||
file-path: Techmino_Snapshot.apk
|
||||
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
|
||||
KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
|
||||
ALIAS: ${{ secrets.ALIAS }}
|
||||
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_Android
|
||||
path: Techmino_Snapshot.apk
|
||||
|
||||
build-macOS:
|
||||
runs-on: macos-10.15
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
with:
|
||||
commit: ${{ needs.get-info.outputs.commit }}
|
||||
type: snapshot
|
||||
- uses: ./.github/actions/build-macos
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.name }}
|
||||
icon: .github/build/macOS/icon_snapshot.icns
|
||||
APPLE_API_ID: '${{ secrets.APPLE_API_ID }}'
|
||||
APPLE_API_ISSUER: '${{ secrets.APPLE_API_ISSUER }}'
|
||||
APPLE_API_KEY: '${{ secrets.APPLE_API_KEY }}'
|
||||
APPLE_APP_IDENTIFIER: '${{ secrets.APPLE_APP_IDENTIFIER }}'
|
||||
APPLE_KEYCHAIN_NAME: '${{ secrets.APPLE_KEYCHAIN_NAME }}'
|
||||
APPLE_KEYCHAIN_PWD: '${{ secrets.APPLE_KEYCHAIN_PWD }}'
|
||||
FASTLANE_MATCH_PWD: '${{ secrets.FASTLANE_MATCH_PWD }}'
|
||||
FASTLANE_MATCH_TOKEN: '${{ secrets.FASTLANE_MATCH_TOKEN }}'
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_MacOS
|
||||
path: Techmino.dmg
|
||||
|
||||
build-iOS:
|
||||
runs-on: macos-latest
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
with:
|
||||
commit: ${{ needs.get-info.outputs.commit }}
|
||||
type: snapshot
|
||||
- uses: ./.github/actions/build-ios
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.name }}
|
||||
type: 'test'
|
||||
APPLE_API_ID: '${{ secrets.APPLE_API_ID }}'
|
||||
APPLE_API_ISSUER: '${{ secrets.APPLE_API_ISSUER }}'
|
||||
APPLE_API_KEY: '${{ secrets.APPLE_API_KEY }}'
|
||||
APPLE_APP_BUILD: '${{ needs.get-info.outputs.code }}.1.${{ github.run_number }}.${{ github.run_attempt }}'
|
||||
APPLE_APP_CHANGELOG: '${{ github.event.commits[0].message }}'
|
||||
APPLE_APP_ID: '${{ secrets.APPLE_APP_ID }}'
|
||||
APPLE_APP_IDENTIFIER: '${{ secrets.APPLE_APP_IDENTIFIER }}'
|
||||
APPLE_APP_PROFILE: '${{ secrets.APPLE_APP_PROFILE }}'
|
||||
APPLE_KEYCHAIN_NAME: '${{ secrets.APPLE_KEYCHAIN_NAME }}'
|
||||
APPLE_KEYCHAIN_PWD: '${{ secrets.APPLE_KEYCHAIN_PWD }}'
|
||||
FASTLANE_ACTION_ID: '${{ github.run_id }}'
|
||||
FASTLANE_DISCORD_WEBHOOK: '${{ secrets.FASTLANE_DISCORD_WEBHOOK }}'
|
||||
FASTLANE_MATCH_PWD: '${{ secrets.FASTLANE_MATCH_PWD }}'
|
||||
FASTLANE_MATCH_TOKEN: '${{ secrets.FASTLANE_MATCH_TOKEN }}'
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_iOS
|
||||
path: Techmino.ipa
|
||||
8
.gitignore
vendored
8
.gitignore
vendored
@@ -1,4 +1,8 @@
|
||||
.vscode
|
||||
libAndroid
|
||||
font.ttf
|
||||
note.lua
|
||||
*.ini
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
Icon?
|
||||
.Trash
|
||||
.file
|
||||
|
||||
990
LANG/dict_en.lua
990
LANG/dict_en.lua
@@ -1,990 +0,0 @@
|
||||
local HDsearch="https://harddrop.com/wiki?search="
|
||||
local HDwiki="\nVisit HD Wiki for more information"
|
||||
return{
|
||||
{
|
||||
"Translator Note 1",
|
||||
"",
|
||||
"help",
|
||||
"This translation of the TetroDictionary is provided by me, User670 (Discord: User670#9501).\n\nThe translation may not completely reflect the contents of the original Chinese text."
|
||||
},
|
||||
{"To New Players",
|
||||
"guide newbie noob",
|
||||
"help",
|
||||
"To new players that want to get better at the game:\n\tTwo principles:\n\t1. find a version with good controls (for example, Tetris Online, Jstris, Tetr.js, Techmino). Do not use programming practice versions (they are garbage).\n\t2. Build foundations in your skills (stable Tetrises using next queue to aid decisions), don't go for fancy T-Spins from the start.\n\n\tTwo main techniques:\n\t1. familiarize yourself with spawn locations of pieces, and the controls to move the piece into each location\n\t2. Plan ahead of where to put pieces\nWe recommend that you read this article titled \"Words to newbies from a Tetris Pro\" (Click \"Open URL\". This article is in Chinese.)",
|
||||
"http://bilibili.com/read/cv2352939",
|
||||
},
|
||||
{"Hard Drop Wiki",
|
||||
"harddrop hd wiki",
|
||||
"help",
|
||||
"A wiki hosted on the Hard Drop community.",
|
||||
"http://harddrop.com/wiki/Tetris_Wiki",
|
||||
},
|
||||
{"Huiji Wiki",
|
||||
"huiji wiki",
|
||||
"help",
|
||||
"Chinese: 灰机wiki\nA Chinese Tetris wiki, written by Tetris fans from the Tetris Research community.\nCurrently, most of its pages are translated from Hard Drop Wiki and Tetris Wiki.\n(Link is in Chinese.)",
|
||||
"http://tetris.huijiwiki.com",
|
||||
},
|
||||
|
||||
{"TTT",
|
||||
"ttt tetris trainer tres bien",
|
||||
"game",
|
||||
"*Web-based, no mobile support | Single player*\nTetris Trainer Tres-Bien. A hands-on tutorial of advanced techniques in modern Tetris.\nRecommended for players that can complete a 40-line Sprint with all Tetris line clears and no hold.\nCovered topics include T-Spin, finesse, SRS, and some battle setups.\nLinked is translated to Simplified Chinese; original in Japanese.",
|
||||
"http://139.199.75.237/ttt",
|
||||
},
|
||||
{"TTPC",
|
||||
"ttpc tetris perfect clear challenge",
|
||||
"game",
|
||||
"*Web-based, no mobile support | Single player*\nTetris Perfect Clear Challenge. The PC opener tutorial for SRS+bag7.\nRecommended for players that have completed TTT. You need to know SRS to play this.\nIncludes only the basic PC opener.\nLinked is translated to Simplified Chinese; original in Japanese.",
|
||||
"http://139.199.75.237/ttpc",
|
||||
},
|
||||
{"NAZO",
|
||||
"nazo",
|
||||
"game",
|
||||
"*Web-based, no mobile support | Single player*\nAll sorts of SRS puzzles. Recommended for players that have completed TTT.\nHas T-Spin and all spin puzzles of all difficulties.\nLinked is translated to Simplified Chinese; original in Japanese.",
|
||||
"http://139.199.75.237/nazo",
|
||||
},
|
||||
|
||||
{"King of Stackers",
|
||||
"kos kingofstackers",
|
||||
"game",
|
||||
"*Web-based | Multiplayer*\nTurn-based battle Tetris game.",
|
||||
"http://kingofstackers.com/games.php",
|
||||
},
|
||||
{"Tetr.js",
|
||||
"tetrjs tetr.js",
|
||||
"game",
|
||||
"*Web-based | Single player*\nHas newbie-friendly custom modes (most common features). Mobile can only use a few preset on-screen control schemes.\nLinked to Farter's Dig Mod, which itself is a mod of another version. Also has another mod called Tetr.js Enhanced.",
|
||||
"http://farter.cn/t",
|
||||
},
|
||||
{"Tetra Legends",
|
||||
"tl tetralegends",
|
||||
"game",
|
||||
"*Web-based, no mobile support | Single player*\nFeature-rich game with fancy visuals, also visualized some data that are otherwise hidden in other games, although controls aren't exactly the most comfortable. Has a rhythm mode.\nIt can be slow to load the game the first time.",
|
||||
"http://tetralegends.app",
|
||||
},
|
||||
{"Jstris",
|
||||
"js jstris",
|
||||
"game",
|
||||
"*Web-based | Single player and multiplayer*\nBasic web-based battle Tetris game.",
|
||||
"http://jstris.jezevec10.com",
|
||||
},
|
||||
{"Tetr.io",
|
||||
"io tetrio tetr.io",
|
||||
"game",
|
||||
"*Web-based, no mobile support | Single player and multiplayer*\nFancy online battle Tetris game.",
|
||||
"http://tetr.io",
|
||||
},
|
||||
{"WWC",
|
||||
"wwc worldwidecombos",
|
||||
"game",
|
||||
"*Web-based | Multiplayer*\nWorldwide Combos, a web-based worldwide 1-vs-1 battle Tetris game.",
|
||||
"http://worldwidecombos.com",
|
||||
},
|
||||
{"Tetris Friends",
|
||||
"tf tetrisfriends notrisfoes",
|
||||
"game",
|
||||
"*Web-based, no mobile support | Single player and multiplayer*\nA now-defunct web-based Tetris game; used to be a decent battle game. An unofficial private server known as Notris Foes exist.\nIt is built using Flash, which might require workarounds to play or cannot run at all on your machine.",
|
||||
},
|
||||
|
||||
{"TGM",
|
||||
"tgm tetrisgrandmaster tetristhegrandmaster",
|
||||
"game",
|
||||
"*Arcade | Single player*\nTetris: The Grand Master, an arcade series famous for its difficulty. Some player titles like S13 and GM (Grand Master) come from this series.",
|
||||
},
|
||||
{"DTET",
|
||||
"dtet",
|
||||
"game",
|
||||
"*Windows | Single player*\nA game based on TGM's Classic rule with 20G and a powerful rotation system. Decent controls, but has no customization other than control mappings. The game is a it hard to find now and you might need to manually install required DLLs.",
|
||||
},
|
||||
{"Heboris",
|
||||
"hb heboris",
|
||||
"game",
|
||||
"*Windows*\nA game with Arcade-ish play style, simulates some modes of many Tetris games.",
|
||||
},
|
||||
{"Texmaster",
|
||||
"txm texmaster",
|
||||
"game",
|
||||
"*Windows | Single player*\nA game with all modes from TGM which you can use to practice. Has better controls than actual TGM. The world rule is slightly different, however (eg, instant-lock soft drops, and slightly different kick tables)",
|
||||
},
|
||||
|
||||
{"Tetris99",
|
||||
"t99 tetris99",
|
||||
"game",
|
||||
"*Nintendo Switch | Multiplayer*\nA game famous for its 99-player battle royale mode, has many interesting strategies not present on traditional battle Tetris games. Also has limited single player modes like Marathon and bot matches available as DLC.",
|
||||
},
|
||||
{"Puyo Puyo Tetris",
|
||||
"ppt puyopuyotetris",
|
||||
"game",
|
||||
"*Multiple platforms | Single player and multiplayer*\nA game that combines two games, Tetris and Puyo Puyo, and can battle between those two games. Has many modes for both single player and online. PC/Steam has worse controls and horrible online experience, not recommended.",
|
||||
},
|
||||
{"Tetris Online",
|
||||
"top tetrisonline",
|
||||
"game",
|
||||
"*Windows | Single player and multiplyer*\nA now-defunct Japanese Tetris game with both online and single player modes. Allows custom DAS/ARR but neither can be set to 0. Minor input delay. Private servers exist and is decent for new players to get started.",
|
||||
},
|
||||
{"Tetris Effect",
|
||||
"te tetriseffect",
|
||||
"game",
|
||||
"*PS4, Windows, (upcoming) XBox | Single player*\nFancy graphics and soundtrack that react to your actions. Not-so-good controls. You can have a go if you are into the visuals, but not exactly worth it if you are just trying to play some Tetris.",
|
||||
},
|
||||
{"Techmino",
|
||||
"techmino",
|
||||
"game",
|
||||
"*Windows, MacOS, Android | Single player*\nA game with many modes and loads of customization. Low input delay, decent controls.",
|
||||
},
|
||||
{"Cultris II",
|
||||
"c2 cultris2 cultrisii",
|
||||
"game",
|
||||
"*Windows, MacOS, Linux | Single player and multiplayer*\nA game focusing on speed. Has no hold and limited lockdown timer (like old school Tetris), but has customizable DAS/ARR. The main gimmick is its timer-based combos, and emphasizes on speed, combo setups and digging.",
|
||||
},
|
||||
{"Nullpomino",
|
||||
"np nullpomino",
|
||||
"game",
|
||||
"*Windows | Single player and multiplayer*\nProfessional Tetris game with extreme room for customization. You can customize almost every aspect of the game. However, this is not a beginner-friendly game (you can get lost in the menus quite easily).",
|
||||
},
|
||||
{"Touhoumino",
|
||||
"touhoumino",
|
||||
"game",
|
||||
"*Windows | Single player*\nA Nullpomino mod with Touhou elements. Fun to play, but difficult. Recommended for players with at least half-decent skills, otherwise you don't even know how you die",
|
||||
},
|
||||
{"Misamino",
|
||||
"misamino",
|
||||
"game",
|
||||
"*Windows | Single player?*\nLocal 1-vs-1 game, mainly plays turn-based mode. You can write your own bot for it (though you need to learn its API if you do).\nMisamino is also the name of its built-in bot. Said bot is also the core for the Puyo Puyo Tetris bot, Zetris.",
|
||||
},
|
||||
{"JJ Tetris",
|
||||
"jjtetris",
|
||||
"game",
|
||||
"*Android | Multiplayer*\nChinese: JJ块\nA casual game on JJ Card Games (JJ棋牌). Portrait screen, low input delay, smooth controls. Customizable DAS/ARR and toggle-able 20G soft drop, limited control scheme customization. No hold nor B2B, no garbage buffer nor cancelling. Every attack sends at most 4 lines, combos are more powerful, otherwise similar to modern Tetris.",
|
||||
},
|
||||
{"Huopin Tetris",
|
||||
"huopin qq",
|
||||
"game",
|
||||
"*Windows | Multiplayer*\nChinese: 火拼俄罗斯\nThe Tetris game on Tencent Game Center, 12-wide board, DAS/ARR the same as your typing, 1 next, no hold. Can only send garbage though Tetris (sends 3 lines) and Triple (sends 2 lines). Garbage is checker-board-shaped and very difficult to dig through.",
|
||||
},
|
||||
{
|
||||
"Translator Note 2",
|
||||
"",
|
||||
"help",
|
||||
"Translator's note on those per-minute and per-second values\n\nNot all of them are commonly used in the communities, and not all terms mean the same thing across all contexts. They mostly apply to Techmino."
|
||||
},
|
||||
{"LPM",
|
||||
"lpm linesperminute speed",
|
||||
"term",
|
||||
"Lines per minute\n\tReflects playing speed of a player.\nDifferent games calculates LPM differently. For example, Tetris Online calculates its LPM using PPS (see below), where 1PPS=24LPM. This basically ignores clearing garbage lines, and makes it different from its literal meaning. In Techmino, this converted LPM value is marked \"L'PM\".",
|
||||
},
|
||||
{"PPS",
|
||||
"pps piecespersecond speed",
|
||||
"term",
|
||||
"Pieces per second\n\tReflects playing speed of a player.",
|
||||
},
|
||||
{"BPM",
|
||||
"bpm blocksperminute piecesperminute speed",
|
||||
"term",
|
||||
"Blocks per minute\n\tReflects playing speed of a player.\nAlso apparently MrZ forgot that it can be called PPM to avoid confusing with the music term.",
|
||||
},
|
||||
{"APM",
|
||||
"apm attackperminute",
|
||||
"term",
|
||||
"Attack per minute\n\tReflects offensive power of a player.\nIn Techmino, the concept of \"attack\" sometimes includes the fractional lines of an attack. Since sending garbage rounds down before sending, this value can be higher than your actual attack power.",
|
||||
},
|
||||
{"SPM",
|
||||
"spm linessentperminute",
|
||||
"term",
|
||||
"[lines] Sent per minute\n\tReflects *actual* offensive power of a player. (Seems like this does not count lines used for cancelling garbage in buffer.)",
|
||||
},
|
||||
{"ADPM",
|
||||
"adpm attackdigperminute",
|
||||
"term",
|
||||
"Attack&Dig per minute\n\tUsed to compare skill differences between the two players within one match; slightly more accurate than APM.",
|
||||
},
|
||||
{"DPM",
|
||||
"dpm digperminute defendperminute",
|
||||
"term",
|
||||
"Dig/Defend per minute\n\tSometimes can reflect how well a player can survive garbage.",
|
||||
},
|
||||
{"KPM",
|
||||
"kpm keysperminute keypressesperminute",
|
||||
"term",
|
||||
"Keypresses per minute\n\tHow fast the player presses buttons.",
|
||||
},
|
||||
{"KPP",
|
||||
"kpp keysperpiece keypressesperpiece",
|
||||
"term",
|
||||
"Keypresses per piece\n\tReflects how efficient the player is with the controls. Reduce this number by learning to finesse.",
|
||||
},
|
||||
{"APL",
|
||||
"apl attackperline efficiency",
|
||||
"term",
|
||||
"Attack per line [cleared]\n\tAlso known as \"efficiency\"; reflects the per-line efficiency of attacks. For example, Tetrises and T-spins have higher efficiency than doubles and triples.",
|
||||
},
|
||||
|
||||
{"All Clear",
|
||||
"pc perfectclear ac allclear",
|
||||
"term",
|
||||
"Formerly known as Perfect Clear (PC). That is also still the term preferred by the communities and used in Techmino.\nClear all minoes on the field.",
|
||||
},
|
||||
{"HPC",
|
||||
"hpc hc clear halfperfectclear",
|
||||
"term",
|
||||
"*Techmino-exclusive*\nHalf Perfect Clear\nExtension of an All Clear. Should a line clear resemble an All Clear when ignoring lines below the clear, the clear is a Half Perfect Clear, and sends a small extra amount of attack.",
|
||||
},
|
||||
{"TSS",
|
||||
"tss t1 tspinsingle",
|
||||
"term",
|
||||
"T-Spin Single\nClear 1 line with a T-Spin.",
|
||||
},
|
||||
{"TSD",
|
||||
"tsd t2 tspindouble",
|
||||
"term",
|
||||
"T-Spin Double\nClear 2 lines with a T-Spin.",
|
||||
},
|
||||
{"TST",
|
||||
"tst t3 tspintriple",
|
||||
"term",
|
||||
"T-Spin Triple\nClear 3 lines with a T-Spin.",
|
||||
},
|
||||
{"MTSS",
|
||||
"mtss minitspinsingle tsms tspinminisingle",
|
||||
"term",
|
||||
"Mini T-Spin Single\nFormerly known as T-Spin Mini Single.\nClear 1 line with a Mini T-Spin.\nDifferent games apparently have different ways to determine whether a T-Spin is a Mini.",
|
||||
},
|
||||
{"MTSD",
|
||||
"mtsd minitspindouble tsmd tspinminidouble",
|
||||
"term",
|
||||
"Mini T-Spin Double\nFormerly known as T-Spin Mini Double (TSMD).\nClear 2 lines with a Mini T-Spin.\nDifferent games apparently have different ways to determine whether a T-Spin is a Mini.\nIn addition, different games have different behavior when clearing a Mini T-Spin Double: some games credit this move correctly, and some games use a different displayed text because they never programmed this in.",
|
||||
},
|
||||
{"Single",
|
||||
"single",
|
||||
"term",
|
||||
"Clear 1 line.",
|
||||
},
|
||||
{"Double",
|
||||
"double",
|
||||
"term",
|
||||
"Clear 2 lines.",
|
||||
},
|
||||
{"Triple",
|
||||
"triple",
|
||||
"term",
|
||||
"Clear 3 lines.",
|
||||
},
|
||||
{"Techrash",
|
||||
"techrash",
|
||||
"term",
|
||||
"*Techmino-exclusive*\nClear 4 lines.",
|
||||
},
|
||||
{"Tetris",
|
||||
"tetris",
|
||||
"term",
|
||||
"The name of the game (and its trademark). Also the name for clearing 4 lines.\nCoined from Tetra (greek for \"four\") and Tennis (favorite sport of Alexey Pajitnov, creator of Tetris).",
|
||||
},
|
||||
|
||||
{"SRS",
|
||||
"srs superrotationsystem",
|
||||
"term",
|
||||
"Super Rotation System\nThe rotation system used in modern, official Tetris games.\nEach Tetrimino has a rotation center for the piece to rotate around. Should a Tetrimino overlap with the wall, floor or another mino on the field after rotation, a few offset positions will be checked, allowing pieces to kick off walls and floors. This also allows pieces to rotate into openings that are otherwise unreachable.",
|
||||
},
|
||||
{"NRS",
|
||||
"nrs nintendorotationsystem",
|
||||
"term",
|
||||
"Nintendo Rotation System\nThe rotation system used in the Tetris games on NES and Gameboy.\nIt has two mirrored versions; the left-handed version is used on Gameboy, and the right-handed version on the NES.",
|
||||
},
|
||||
{"ARS",
|
||||
"ars arikrotationsystem atarirotationsystem",
|
||||
"term",
|
||||
"It can refer to two things:\nArika Rotation System, which is used in Tetris: The Grand Master games.\nAtari Rotation System, which aligns pieces to the top-left when rotating.",
|
||||
},
|
||||
{"DRS",
|
||||
"drs dtetrotationsystem",
|
||||
"term",
|
||||
"DTET Rotation System\nThe rotation system used in DTET.",
|
||||
},
|
||||
{"TRS",
|
||||
"trs techminorotationsystem",
|
||||
"term",
|
||||
"*Techmino-exclusive*\nTechmino Rotation System\nThe rotation system used in Techmino.\nIt is based on SRS, with fixes on common cases where S/Z are locked from rotating, and some extra useful kicks. Each pentomino also has a kick table roughly based on SRS logic.",
|
||||
},
|
||||
|
||||
{"Spin",
|
||||
"spin",
|
||||
"term",
|
||||
"Use rotation to move a piece into a position otherwise unreachable. In some games, this sends extra attack or awards extra score.",
|
||||
},
|
||||
{"All-Spin",
|
||||
"allspin",
|
||||
"term",
|
||||
"A rule in which spins of all pieces are awarded extra attack/score, rather than just spins of the T piece (\"T-Spin only\").",
|
||||
},
|
||||
{"T-Spin",
|
||||
"tspin",
|
||||
"term",
|
||||
"A spin using the T piece.\nIn modern official games, T-Spins are detected using the 3-corner rule, i.e. if at least three of the four cells diagonal to the rotation center, it is a T-Spin. Some games have extra rules to mark a T-Spin as a Mini T-Spin instead, which has reduced attack/score.",
|
||||
},
|
||||
|
||||
{"IRS",
|
||||
"irs initialrotationsystem",
|
||||
"term",
|
||||
"Initial Rotation System\nHolding a rotation key during spawn delay to spawn the piece pre-rotated. Sometimes prevents death.",
|
||||
},
|
||||
{"IHS",
|
||||
"ihs initialholdsystem",
|
||||
"term",
|
||||
"Initial Hold System\nHolding the hold key during spawn delay to spawn the held piece (or next piece in the next queue if there is no held piece) instead of the current piece, and put the current piece in hold, as if the player has performed the held before spawning. Sometimes prevents death.",
|
||||
},
|
||||
{"IMS",
|
||||
"ims initialmovesystem",
|
||||
"term",
|
||||
"*Techmino-exclusive*\nInitial Movement System\nHolding a sideways movement key during spawn delay to spawn the piece one block off to the side. Sometimes prevents death.",
|
||||
},
|
||||
|
||||
{"Next",
|
||||
"nextpreview",
|
||||
"term",
|
||||
"Displays the next few pieces to come. Using this to plan ahead is often a good habit.",
|
||||
},
|
||||
{"Hold",
|
||||
"hold",
|
||||
"term",
|
||||
"Save your current piece for later use, and take out a previously held piece (or next piece in the next queue, if no piece was held) to place instead. You can only perform this once per piece.",
|
||||
},
|
||||
|
||||
{"Misdrop",
|
||||
"md misdrop",
|
||||
"term",
|
||||
"Accidentally placed (dropped) a piece in an unintended location.",
|
||||
},
|
||||
{"Mishold",
|
||||
"mh mishold",
|
||||
"term",
|
||||
"Accidentally pressed held key. This can lead to having to use an undesired piece or missing out a chance to All Clear.",
|
||||
},
|
||||
|
||||
{"sub",
|
||||
"sub",
|
||||
"term",
|
||||
"A sub-(number) time means the time is below a certain milestone. The unit of the time is often left out and inferred, for example, a \"sub-30\" time for a 40-line Sprint means below 30 seconds, and a \"sub-15\" time for a 1000-line Sprint means below 15 minutes.",
|
||||
},
|
||||
{"Mini",
|
||||
"mini",
|
||||
"term",
|
||||
"A modifier to Spins, applied to Spin actions that the game considers easy (thus the name \"EZ T-Spin\" in an old game). Score and attack bonuses are reduced for Mini Spins.\nDifferent games have different rules for what counts as a Mini, and many are not intuitive. You can just remember a few common shapes.",
|
||||
},
|
||||
{"Back to Back",
|
||||
"b2b btb backtoback",
|
||||
"term",
|
||||
"Clearing 2 or more technical line clears (Spins and Tetrises) in a row gives extra attack power.\nUnlike combos, placing pieces that do not clear lines does not affect Back to Back.",
|
||||
},
|
||||
{"B2B2B",
|
||||
"b2b2b b3b",
|
||||
"term",
|
||||
"*Techmino-exclusive*\nClearing many Back to Backs to fill the Back to Back gauge, and eventually you will be able to perform a Back to Back to Back, giving more bonus attack.",
|
||||
},
|
||||
{"Fin, Neo, Iso",
|
||||
"fin neo iso",
|
||||
"term",
|
||||
"Special T-Spin techniques that exploit the T piece's kicks and T-Spin detections.\nThey might worth different values in different games (some games consider them Minis), and hardly have real value in combat due to their relatively complex setup.",
|
||||
},
|
||||
{"Donation",
|
||||
"donation",
|
||||
"term",
|
||||
"A technique where you purposefully cover up a well to perform T-Spins.",
|
||||
},
|
||||
{"Attacking & Defending",
|
||||
"attacking defending",
|
||||
"term",
|
||||
"Attacking: send garbage lines to your opponent by clearing lines.\nDefending: after your opponent send you lines, you offset this garbage by clearing lines.\nCounter attack: Send attack back at your opponent after offseting incoming garbage, or taking the hit then attack back.\nIn most games, garbage offsetting is 1:1, i.e. one attack offsets one incoming garbage.",
|
||||
},
|
||||
|
||||
{"Side well",
|
||||
"sidewell",
|
||||
"term",
|
||||
"A stacking method where you leave a well of a certain width on the side.\nA Side 1-wide setup is the traditional Tetris setup (i.e. Side well Tetris).\nA Side 2-, 3-, or 4-wide setup is a combo setup. For new players, they can be effective ways to send attack. However, opponents can easily send you garbage while you are building your stack, killing you or cutting your stack short. Because of this, advanced players might not opt to building tall stacks, and rather keep a steady stream of T-Spins and Tetrises and attack when the opponent is unlikely to offset the garbage.",
|
||||
},
|
||||
{"Side 1-wide",
|
||||
"s1w side1wide sidewelltetris",
|
||||
"term",
|
||||
"Also known as Side well Tetris\nThe most traditional way to play. It is also easy to do in modern Tetris, and can send a half-decent amount of attack. However this is hardly used in advanced matches due to the lower efficiency of Tetrises compared to T-Spins.",
|
||||
},
|
||||
{"Side 2-wide",
|
||||
"s2w side2wide",
|
||||
"term",
|
||||
"The stacking method where you leave a 2-block-wide well on the side. A common combo setup.\nEasy to use. New players can give it a try, and can produce some half-decent combos when combined with hold. Not often used in advanced games, because it takes more time to build the stack, leaving room for opponent to send garbage and cut your stack short. It is also not so good in efficiency.",
|
||||
},
|
||||
{"Side 3-wide",
|
||||
"s3w side2wide",
|
||||
"term",
|
||||
"The stacking method where you leave a 3-block-wide well on the side. A combo setup less common than 2-wide.\nCan perform more combos than 2-wide, but also harder to do, easy to break the combo.",
|
||||
},
|
||||
{"Side 4-wide",
|
||||
"s4w side4wide",
|
||||
"term",
|
||||
"The stacking method where you leave a 4-block-wide well on the side. A combo setup.\nIf done well, can produce very impressive combos. Also it takes less time to build up, so you might be able to start your combo before incoming garbage. However, there is still a risk of being killed by incoming garbage, and is thus less overpowered.",
|
||||
},
|
||||
{"Center 1-wide",
|
||||
"c1w center1wide centerwelltetris",
|
||||
"term",
|
||||
"Also known as Center well Tetris\nThe stacking method where you leave a 1-block-wide well in the middle. Commonly used in combat because this allows Tetrises as well as T-Spins, and not too difficult.",
|
||||
},
|
||||
{"Center 2-wide",
|
||||
"c2w center2wide",
|
||||
"term",
|
||||
"The stacking method where you leave a 2-block-wide well in the middle.",
|
||||
},
|
||||
{"Center 3-wide",
|
||||
"c3w center3wide",
|
||||
"term",
|
||||
"The stacking method where you leave a 3-block-wide well in the middle.",
|
||||
},
|
||||
{"Center 4-wide",
|
||||
"c4w center4wide",
|
||||
"term",
|
||||
"The stacking method where you leave a 4-block-wide well in the middle.\nThe infamous combo setup that not only makes a lot of combos, but also abuses the death conditions and won't die even if you receive some garbage. This technique is often disliked by players due to how unbalanced it is.",
|
||||
},
|
||||
|
||||
{"DT Cannon",
|
||||
"dtcannon doubletriplecannon",
|
||||
"term",
|
||||
"Double-Triple Cannon"..HDwiki,
|
||||
HDsearch.."dt",
|
||||
},
|
||||
{"DTPC",
|
||||
"dtpc dtcannon doubletriplecannon",
|
||||
"term",
|
||||
"A follow-up of the DT Cannon that ends with an All Clear"..HDwiki,
|
||||
HDsearch.."dt",
|
||||
},
|
||||
{"BT Cannon",
|
||||
"btcannon betacannon",
|
||||
"term",
|
||||
"β Cannon, Beta Cannon"..HDwiki,
|
||||
HDsearch.."bt_cannon",
|
||||
},
|
||||
{"BTPC",
|
||||
"btpc btcannon betacannon",
|
||||
"term",
|
||||
"A follow-up of the BT Cannon that ends with an All Clear"..HDwiki,
|
||||
HDsearch.."bt_cannon",
|
||||
},
|
||||
{"TKI 3 Perfect Clear",
|
||||
"ddpc tki3perfectclear",
|
||||
"term",
|
||||
"A TSD opener that leads to a Double-Double-All Clear."..HDwiki,
|
||||
HDsearch.."TKI_3_Perfect_Clear",
|
||||
},
|
||||
{"QT Cannon",
|
||||
"qtcannon",
|
||||
"term",
|
||||
"We don't know much about this.",
|
||||
},
|
||||
{"Mini-Triple",
|
||||
"mt minitriple",
|
||||
"term",
|
||||
"A Mini T-Spin - T-Spin Triple structure",
|
||||
HDsearch.."mt",
|
||||
},
|
||||
{"Wolfmoon Cannon",
|
||||
"wolfmooncannon",
|
||||
"term",
|
||||
"We don't know much about this."..HDwiki,
|
||||
HDsearch.."wolfmoon_cannon",
|
||||
},
|
||||
{"ASC opener",
|
||||
"ascopener",
|
||||
"term",
|
||||
"We don't know much about this.",
|
||||
},
|
||||
{"Sewer",
|
||||
"sewer",
|
||||
"term",
|
||||
"An opener."..HDwiki,
|
||||
HDsearch.."sewer",
|
||||
},
|
||||
{"TKI",
|
||||
"tki",
|
||||
"term",
|
||||
"Can refer to a TSD opener or a C Spin opener."..HDwiki,
|
||||
HDsearch.."tki",
|
||||
},
|
||||
{"God Spin",
|
||||
"godspin",
|
||||
"term",
|
||||
"a setup that is fancy on the eyes but awkward to use in action. Invented by Windkey."..HDwiki,
|
||||
HDsearch.."godspin",
|
||||
},
|
||||
|
||||
{"STSD",
|
||||
"stsd",
|
||||
"term",
|
||||
"Super T-Spin Double, a setup that allows two T-Spin Doubles."..HDwiki,
|
||||
HDsearch.."stsd",
|
||||
},
|
||||
{"STMB",
|
||||
"stmb",
|
||||
"term",
|
||||
"STMB cave, a donation setup by using S/Z to block off a 3-wide well and clear a T-Spin Double."..HDwiki,
|
||||
HDsearch.."stmb_cave",
|
||||
},
|
||||
{"C-spin",
|
||||
"cspin",
|
||||
"term",
|
||||
"Placing a J on top of an L (or vice versa) to form a C shape, filling the rest with appropriate shapes to perform a T-Spin Triple + T-Spin Double."..HDwiki,
|
||||
HDsearch.."c-spin",
|
||||
},
|
||||
{"LST stacking",
|
||||
"lst",
|
||||
"term",
|
||||
"An infinite T-Spin Double setup"..HDwiki,
|
||||
HDsearch.."st_stacking",
|
||||
},
|
||||
{"Amemiya Cannon",
|
||||
"amemiyacannon",
|
||||
"term",
|
||||
"Donation T-Spin Double then Tetris, often a variation of a DT cannon",
|
||||
},
|
||||
{"千鸟格子",
|
||||
"",
|
||||
"term",
|
||||
"A setup to donate a T-Spin Double over a small hole and can do another T-Spin Double after that",
|
||||
},
|
||||
{"Imperial Cross",
|
||||
"imperialcross",
|
||||
"term",
|
||||
"Cover a cross-shaped hole with an overhang to do two T-Spin Doubles"..HDwiki,
|
||||
HDsearch.."imperial_cross",
|
||||
},
|
||||
{"Hamburger",
|
||||
"hamburger",
|
||||
"term",
|
||||
"A donation setup that still opens up for Tetrises"..HDwiki,
|
||||
HDsearch.."hamburger",
|
||||
},
|
||||
{"6-piece puzzle",
|
||||
"liuqiaoban",
|
||||
"term",
|
||||
"a setup that is often used to increase chances of a mid-game All Clear.",
|
||||
},
|
||||
{"Albatross",
|
||||
"albatross",
|
||||
"term",
|
||||
"A fancy, fast paced opener with TSD-TST-TSD-All Clear, hardly wasting any T pieces.",
|
||||
},
|
||||
{"鹈鹕",
|
||||
"",
|
||||
"term",
|
||||
"An Albatross-ish opener to use when the piece orders do not support that",
|
||||
},
|
||||
{"King Crimson",
|
||||
"kingcrimson",
|
||||
"term",
|
||||
"Stacking a TST on top of a STSD",
|
||||
},
|
||||
{"Setup",
|
||||
"setup",
|
||||
"term",
|
||||
"Good setups often satisfy two to three of the following:\n- Can adapt to many piece orders,\n- Strong attack, minimal waste of the T piece,\n- require minimal soft dropping for more fast placement and using finesse,\n- has clear follow-up strategies with few branches.",
|
||||
},
|
||||
|
||||
{"6-3 Stacking",
|
||||
"63stacking",
|
||||
"term",
|
||||
"A way of stacking where you have a 6-block-wide stack on the left, and a 3-block-wide stack on the right.\nFor a skilled player, this method of stacking might reduce the key presses needed for stacking, and is a popular Sprint stacking method. The reason why it works has to do with the fact that pieces spawn with a bias to the left.",
|
||||
},
|
||||
{"Combo",
|
||||
"ren combo",
|
||||
"term",
|
||||
"Known in Japan as REN.\nConsecutive line clears make up combos. The second line clear in the combo is 1 combo, and the third line clear is 2 combo, and so on.\nUnlike Back to Back, placing a piece that does not clear a line will break the combo.",
|
||||
},
|
||||
{"20G",
|
||||
"20g",
|
||||
"term",
|
||||
"The fastest falling speed of modern Tetris. In 20G, pieces do not have a falling process and instantly appear on the bottom. This sometimes also limits a piece's sideways movements, as it is not always possible to make a piece climb over a bump or out of a well in 20G.",
|
||||
},
|
||||
{"Topping out",
|
||||
"die death topout toppingout",
|
||||
"term",
|
||||
"Modern Tetris games have three different conditions in which the player tops out:\n1. Block out: when a piece spawns overlapping with another block;\n2. Lock out: when a piece locks entirely above the skyline;\n3. Garbage out: when the stack exceeds 40 lines in height (often due to incoming garbage).\nTechmino does not check for locking out, and has a 42 line limit for garbage out.",
|
||||
},
|
||||
{"Falling speed",
|
||||
"fallingspeed",
|
||||
"term",
|
||||
"Falling speed is often described in terms of G, i.e. how many lines it falls in one frame (often assuming 60 frames per second).\nG is a large unit. The speed of Lv 1 in a regular Marathon (one second per line) is 1/60 G, and 1G is about Lv 13 speed. G usually caps at 20G, for there are only 20 (visible) blocks in the matrix's height.",
|
||||
},
|
||||
{"Lockdown Delay",
|
||||
"lockdelay lockdowndelay lockdowntimer",
|
||||
"term",
|
||||
"The delay between block touching the ground and locking down (i.e. can no longer be controlled, and the next piece spawns).\nModern Tetris games often have a forgiving lockdown delay mechanics where you can reset this delay by moving or rotating (up to 15 times), and you can sometimes stall for time by doing this. Classic Tetris games often have a far less forgiving lockdown delay.",
|
||||
},
|
||||
{"Finesse",
|
||||
"finesse",
|
||||
"term",
|
||||
"A technique to move a piece into the desired position with the minimum number of key presses. This saves time and reduces chances to misdrop.\nYou can practice by playing with Jstris's restart on finesse error, or with Techmino's finesse error sound effect.\n\nTechmino's finesse detection is not exactly \"theoretical minimum key presses\", but instead only checks for finesse against a pre-determined par key press count *when the piece locks in a position that does not require soft dropping*. This means that Techmino will not judge a piece as having a finesse error when you soft drop and spin or tuck.\nTechmino also introduced additional checks, such as holding while the current piece and the held piece is the same, or holding after you have manipulated the current piece, count as a finesse fault.\nFinesse% in Techmino is defined to be 100% when par or below par, 50% when one keypress above par, 25% when two keypresses above par, and 0% when three or more keypresses above par.\nAlso note that in 20G finesse still runs as if there were no gravity, which can cause inaccurate results.",
|
||||
},
|
||||
{"\"doing research\"",
|
||||
"scientificresearch",
|
||||
"term",
|
||||
"\"Doing scientific research\" is a term sometimes used in the Chinese community, referring to researching/practicing techniques in a low-falling-speed, single player environment.",
|
||||
},
|
||||
{"DAS & ARR",
|
||||
"das arr delayedautoshift autorepeatrate",
|
||||
"term",
|
||||
"DAS refers to Delayed Auto Shift, the way how blocks move to the side when you hold left or right. Also refers to the delay between the initial movement (when you press down the button) and the first automatic movement.\nARR refers to Auto Repeat Rate, which is the delay between automatic movements.\nFor new players, the recommended values are: DAS 8-10f (133-167ms), ARR 1-2f (17-33ms).\nFor advanced players who want to play faster, the recommended values are DAS 4-6f (67-100ms), ARR 0f (0ms). (At 0ms ARR, pieces will instantly snap to the wall once you get past DAS.)\n\nThe ideal configuration strategy for advanced players is to minimize DAS while still being able to reliably control whether to tap or hold; and to set to ARR to 0 if possible, or as low as possible otherwise.",
|
||||
},
|
||||
{"DAS (simple)",
|
||||
"das arr delayedautoshift autorepeatrate",
|
||||
"term",
|
||||
"Imagine you are typing, and you hold down a letter. Say you hold down \"O\".\nYou get a long string of O's.\nOn the time line, it kinda looks like: O--------------O-O-O-O-O-O-O-O-O\nThe -------------- is DAS, the - is ARR.",
|
||||
},
|
||||
{"Bag7 generator",
|
||||
"bag7bag randomgenerator",
|
||||
"term",
|
||||
"Also known as \"7-Bag Generator\". Officially known as \"Random Generator\".\nThis is the algorithm used by modern, official Tetris games to generate pieces. Starting from the beginning of a game, every 7 pieces there are guaranteed to be one of each of the 7 Tetriminoes.",
|
||||
},
|
||||
{"His generator",
|
||||
"history hisgenerator",
|
||||
"term",
|
||||
"A way to generate pieces, notably used in Tetris: The Grand Master games. Every time a random Tetrimino is selected, but if this Tetrimino is the same as one of the few previous pieces, then reroll until a different piece is rolled or until a reroll limit is reached.\nFor example, a \"his 4 roll 6\" (h4r6) generator rerolls when the piece is the same as one of the 4 previous pieces, and rerolls up to 6 times.",
|
||||
},
|
||||
{"O-Spin",
|
||||
"ospin",
|
||||
"term",
|
||||
"In most cases, it's a meme.\nThe O Tetrimino (a.k.a. the Square) does not change upon rotation, thus making it lack interesting spins/kicks that other Tetriminoes have, or be stuck in a place unable to get out.\nAs a joke, some people have made heavily edited videos or even programmed games where the O piece can change shape and \"spin\" into different positions.\nTechmino also supports O-Spin in most modes.",
|
||||
},
|
||||
{"O-Spin Table",
|
||||
"ospintable",
|
||||
"term",
|
||||
"*Techmino-exclusive*\nThis comes from the source code. No documentation has been provided.\n{111,5,2, 0,-1,0},{111,5,2,-1,-1,0},{111,5,0,-1, 0,0},//T\n{333,5,2,-1,-1,0},{333,5,2, 0,-1,0},{333,5,0, 0, 0,0},//T\n{313,1,2,-1, 0,0},{313,1,2, 0,-1,0},{313,1,2, 0, 0,0},//Z\n{131,2,2, 0, 0,0},{131,2,2,-1,-1,0},{131,2,2,-1, 0,0},//S\n{331,3,2, 0,-1,0},{113,3,0, 0, 0,0},{113,3,2,-1, 0,0},//J\n{113,4,2,-1,-1,0},{331,4,0,-1, 0,0},{331,4,2, 0, 0,0},//L\n{222,7,2,-1, 0,1},{222,7,2,-2, 0,1},{222,7,2, 0, 0,1},//I\n{121,6,0, 1,-1,2},{112,6,0, 2,-1,2},{122,6,0, 1,-2,2},//O\n{323,6,0,-1,-1,2},{332,6,0,-2,-1,2},{322,6,0,-1,-2,2},//O\n\n*Translator's note: Yes, that is indeed **not** Lua. Lua uses -- to indicate comments.*",
|
||||
},
|
||||
{"Hypertapping",
|
||||
"hypertapping",
|
||||
"term",
|
||||
"Vibrate your finger on the controller to achieve faster sideways movement speed than holding it.\nIt is most commonly used on classic Tetris where DAS is rather slow. In most cases you do not need to hypertap in modern Tetris games, because their DAS is often fast enough.",
|
||||
},
|
||||
{"Tetris OL attack",
|
||||
"top tetrisonlineattack",
|
||||
"term",
|
||||
"Single/Double/Triple/Tetris sends 0/1/2/4.\nT-Spin Single/Double/Triple sends 2/4/6, half if Mini.\nCombo send 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5.\nBack to Back sends extra 1 (or 2 if T-Spin Triple).\nAll Clear sends extra 6. This extra 6 will be sent to opponents directly, and does not cancel your buffered incoming damage.",
|
||||
},
|
||||
{"Techmino attack",
|
||||
"techminoattack",
|
||||
"term",
|
||||
"Regular line clears (clearing <=3 lines):\n\tSends (lines cleared -0.5) attack\nSpecial line clears:\n\tSpin sends (lines cleared x2) attack,\n\t\t- B2B sends extra 1/1/2/4/8 (for Spin Single/Double/Triple/Techrash/Techrash+ respectively)\n\t\t- B2B2B sends (lines cleared x0.5), and +1 extra blocking\n\t\t- If it's a Mini, x0.25\n\tNon-Spin Techrash/Techrash+ sends (lines cleared) attack,\n\t\t- B2B sends extra 1 attack,\n\t\t- B2B2B sends 50% more attack and +1 extra blocking.\n\nSpecial line clears will increase B2B gauge, making later special line clears have B2B or B2B2B bonus (see below)\nHalf Perfect Clear (a Perfect Clear \"with blocks left below\". If it's an I clearing 1 line, then the remaining blocks must not be player-placed): Attack +2, Extra Blocking +2\nPerfect Clear: half all damage above, then +8 to +20 attack (increases within a round by +2 per Perfect Clear) and +2 extra blocking. (note: if lines cleared in this round >4, then B2B gauge will be filled)\nCombos: All damage above will be given a (combo x25%) bonus, or (combo x15%) if the line clear is a Single, capped at 12 combo. +1 more attack for 3 Combo or more.\nAfter calculating all above, the damage value will be rounded down then sent",
|
||||
},
|
||||
{"C2 Generator",
|
||||
"cultris2generator cultrisiigenerator c2generator",
|
||||
"term",
|
||||
"All Tetriminoes have a initial weight of 0.\nEvery time, multiply all weights by 2, add a random number between 0 and 1, pick the piece with the highest weight, and divide this piece's weight by 3.5.",
|
||||
},
|
||||
{"C2 wall kicks",
|
||||
"cultris2wallkicks cultrisiiwallkicks c2wallkicks cultris2kicks cultrisiikicks c2kicks",
|
||||
"term",
|
||||
"Left, right, down, bottom-left, bottom-right, left 2, right 2. (This applies to *any* rotation of *any* Tetrimino.)",
|
||||
},
|
||||
{"Stacking",
|
||||
"stacking",
|
||||
"term",
|
||||
"Often refers to stacking Tetriminoes without leaving holes in the stack.",
|
||||
},
|
||||
{"Rotation buttons (1)",
|
||||
"doublerotation",
|
||||
"term",
|
||||
"Using both clockwise and counter-clockwise rotation buttons allows to reduce number of key presses by replacing three rotation presses with one press of the opposite direction.\nFinesse assumes the use of both rotation buttons.",
|
||||
},
|
||||
{"Rotation buttons (2)",
|
||||
"triplerotation",
|
||||
"term",
|
||||
"Using all three rotation buttons (the third being 180-degree rotation), any piece only requires one rotation press to reach the desired direction.\nHowever, it is not exactly useful for not every game has this feature, and the speed increase from learning this technique is not as much as when you learn using both rotation buttons as opposed to one. You can skip this technique unless you want extreme speeds.",
|
||||
},
|
||||
{"Drought",
|
||||
"drought",
|
||||
"term",
|
||||
"A situation where a piece you want, often the I Tetrimino (a.k.a. the Long Bar), does not spawn for a long time. This often happens, and can be deadly, for classic Tetris, but it is almost impossible for modern Tetris thanks to the Random Generator.\nWith the Random Generator, there can be at most 12 other pieces between two I Tetriminoes.",
|
||||
},
|
||||
{"MPH mode",
|
||||
"mph",
|
||||
"term",
|
||||
"Memoryless (i.e. random spawn), previewless (i.e. no next queue), holdless. A mode that requires quite some reaction speed.",
|
||||
},
|
||||
{"Input delay",
|
||||
"input delay",
|
||||
"term",
|
||||
"Any input device take some time for the input to reach the game. This delay can range from a few milliseconds to a few dozens milliseconds.\nIf input delay is too long, the controls can feel uncomfortable.\nThis delay is often due to the performance of the hardwares and softwares used, and often out of your control. Turn on performance mode (or turn off power saving mode) on your device, and turn on gaming mode on your monitor/TV (if you have one), may help reducing input delay.",
|
||||
},
|
||||
{"Cold Clear",
|
||||
"cc coldclear",
|
||||
"term",
|
||||
"A Tetris bot. Originally built for Puyo Puyo Tetris, thus can be less powerful on Techmino.",
|
||||
},
|
||||
{"ZZZbot",
|
||||
"zzzbot",
|
||||
"term",
|
||||
"A Tetris bot. Built by the Chinese Tetris player 奏之章, has decent performance in many games",
|
||||
},
|
||||
|
||||
{"Communities",
|
||||
"community communities",
|
||||
"other",
|
||||
"Join Tetris communities and talk with other players!\n\nChina: [QQ] Tetris Research: 112897780\nGlobal: [Discord] Hard Drop: discord.gg/harddrop (click \"Open URL\")",
|
||||
"https://discord.gg/harddrop/"
|
||||
},
|
||||
{"Tetris OL Servers",
|
||||
"tetrisonline servers",
|
||||
"other",
|
||||
"Google \"Tetris Online Poland\" for the Poland server.\nClick \"Open URL\" for information about the Tetris Online Study server.",
|
||||
"http://139.199.75.237/tos",
|
||||
},
|
||||
{"Github Repository",
|
||||
"githubrepository",
|
||||
"other",
|
||||
"Techmino's Github repository. Stars are appreciated",
|
||||
"http://github.com/26F-Studio/Techmino",
|
||||
},
|
||||
|
||||
{"SFX",
|
||||
"sfx soundeffects",
|
||||
"english",
|
||||
"Short for \"Sound effects\".",
|
||||
},
|
||||
{"BGM",
|
||||
"bgm backgroundmusic",
|
||||
"english",
|
||||
"Short for \"Background music\".",
|
||||
},
|
||||
{"AFK",
|
||||
"afk",
|
||||
"english",
|
||||
"\"Away from keyboard\", or in a broader sense, a period of time when you are not playing.\nTaking regular breaks helps relief your muscle strain and help you player better when you come back.",
|
||||
},
|
||||
|
||||
{"Hebomai",
|
||||
"hebomai hbm",
|
||||
"name",
|
||||
"One of the top players.\nOnce Beat Wu Songhao (a Chinese player) on TV.",
|
||||
},
|
||||
{"Amemiya Taiyou",
|
||||
"amemiya taiyou",
|
||||
"name",
|
||||
"One of the top players.\nWon champion on a game in Puyo Puyo Tetris's Swap mode.",
|
||||
},
|
||||
{"Ajanba",
|
||||
"ajanba ajb",
|
||||
"name",
|
||||
"One of the top players.\nWon champion of JsCup.",
|
||||
},
|
||||
{"Blink",
|
||||
"blink",
|
||||
"name",
|
||||
"One of the top players.\nRuns the Tetris community, Hard Drop.",
|
||||
},
|
||||
{"Doremy",
|
||||
"doremy 123",
|
||||
"name",
|
||||
"One of the top players.\nAmemiya once said he was the second best player in the world.",
|
||||
},
|
||||
{"Firestorm",
|
||||
"firestorm fst",
|
||||
"name",
|
||||
"One of the top players.\nWon champion of JsCup.",
|
||||
},
|
||||
{"Furea",
|
||||
"furea fuleiya jk",
|
||||
"name",
|
||||
"One of the top players.\nWorld record holder of Puyo Puyo Tetris's Sprint mode and Ultra mode.",
|
||||
},
|
||||
{"Iljain",
|
||||
"iljain yijianlian",
|
||||
"name",
|
||||
"One of the top players.\nAchieved Rank 1 in Cultris II.",
|
||||
},
|
||||
{"Jonas",
|
||||
"jonas",
|
||||
"name",
|
||||
"One of the top players in Classic Tetris.\nFour-times-in-a-row champion of CTWC.",
|
||||
},
|
||||
{"Joseph",
|
||||
"joseph",
|
||||
"name",
|
||||
"One of the top players in Classic Tetris.\nTwice-in-a-row champion of CTWC. Also holds many world records of Tetris (NES, Nintendo).",
|
||||
},
|
||||
{"Kazu",
|
||||
"kazu mdking",
|
||||
"name",
|
||||
"One of the top players.\nFamous for how he can turn misdrops into donation setups.",
|
||||
},
|
||||
{"Microblizz",
|
||||
"microblizz",
|
||||
"name",
|
||||
"One of the top players.\nFormer world record holder for Sprint.",
|
||||
},
|
||||
{"Vince",
|
||||
"vincehd",
|
||||
"name",
|
||||
"One of the top players.\nWorld record holder for Sprint (no delay).",
|
||||
},
|
||||
{"Wumbo",
|
||||
"wumbotize squirtle",
|
||||
"name",
|
||||
"One of the top players.\nFamously fond of using Center 4-Wide setups, thus having a bad reputation. However, he is also undeniably skilled in other techniques as well.",
|
||||
},
|
||||
{"Yakine",
|
||||
"yakine heshui",
|
||||
"name",
|
||||
"One of the top players.\nFamous for fancy T-Spins. When in combat but not in danger, he could often pull off some fancy donations very high on the field. Third place on the speed leaderboards of Jstris's 20TSD mode, and didn't use setups (the first and second place both used LST setup).",
|
||||
},
|
||||
{
|
||||
"Translator Note 3",
|
||||
"",
|
||||
"help",
|
||||
"Starting from here, all but one terms are China-specific (the not-China term is Diao), and are less relevant for the global community. Read at your own risk.\n\"Virtual content creator\" refers to people who produce content online under a fictional persona, and appear as a motion-controlled animated character on screens. Basically \"Virtual YouTuber\" but not platform-specific."
|
||||
},
|
||||
{"Little Z",
|
||||
"littlez",
|
||||
"name",
|
||||
"The name of this thing... except it's also called TetroDictionary?\nUsed to be a chat bot that serves for the same function, and mostly uses the same list of keywords.",
|
||||
},
|
||||
{"MrZ",
|
||||
"mrz626",
|
||||
"name",
|
||||
"Tetris Research community member, author of Techmino.\nPersonal bests: Sprint 25.95 seconds, MPH Sprint 57 seconds, #8 on Jstris leaderboards, U rank on Tetr.io, cleared TGM3 (World rule, Shirase gold 1300).",
|
||||
"https://space.bilibili.com/225238922",
|
||||
},
|
||||
|
||||
{"Farter",
|
||||
"farteryhr",
|
||||
"name",
|
||||
"Tetris Research community member.\nPersonal bests: Sprint 26.193 seconds\nOne of the prestigious players in the Chinese Tetris community. Author of T-ex and Tetr.js Farter's Dig Mod.",
|
||||
"https://space.bilibili.com/132966",
|
||||
},
|
||||
{"Sniraite",
|
||||
"sniraite",
|
||||
"name",
|
||||
"Tetris Research community member.\nPersonal bests: Sprint 23 seconds\nOne of the top players in China. Should be the fastest player in Mainland China.",
|
||||
"https://space.bilibili.com/561589",
|
||||
},
|
||||
{"Teatube",
|
||||
"teatube ttb chaguan chanaiye sifangchaye 022",
|
||||
"name",
|
||||
"Administrator of the Tetris Research community, Operator of the Tetris Online Study private server, chief editor of the Huiji wiki.\nPersonal bests: Sprint 33 seconds, Tetris Online peak stats 50LPM, 70APM.",
|
||||
"https://space.bilibili.com/834903",
|
||||
},
|
||||
{"xb",
|
||||
"xb",
|
||||
"name",
|
||||
"Tetris Research community member.\nMain organizer for competitions in the community.",
|
||||
},
|
||||
{"Flyz",
|
||||
"flyz fxg",
|
||||
"name",
|
||||
"Tetris Research community member.\nA technical player.",
|
||||
"https://space.bilibili.com/787096",
|
||||
},
|
||||
{"gggf",
|
||||
"gggf kissne",
|
||||
"name",
|
||||
"Tetris Research community member.\nPersonal bests: Sprint 22.831 seconds, MPH Sprint 56 seconds, U rank on Tetr.io\nOne of the top players of 20G in China, achieved almost every achievement in TGM3.",
|
||||
"https://space.bilibili.com/287769888",
|
||||
},
|
||||
{"蕴空之灵",
|
||||
"ykzl yunkongzhiling niao bird",
|
||||
"name",
|
||||
"Tetris Research community member.\nPersonal bests: Sprint 33 seconds, Tetris Online stats 50LPM, 90APM.\nDecent efficiency. Can't eat spicy food. Often uses TKI 3, Albatross and PC opener.",
|
||||
"https://space.bilibili.com/9964553",
|
||||
},
|
||||
{"安樱奈莯Naki",
|
||||
"naki anyingnaimu",
|
||||
"name",
|
||||
"Tetris Research community member, Virtual content creator.\nWe seem to have asked her to record some voice clips for this game?",
|
||||
"https://space.bilibili.com/33212649",
|
||||
},
|
||||
{"奏之章",
|
||||
"zzz zouzhizhang",
|
||||
"name",
|
||||
"Tetris Research community member.\nAuthor of ZZZbot. An important figure in the developement of Tetris AI in China.",
|
||||
"https://space.bilibili.com/311039",
|
||||
},
|
||||
{"吴淞昊",
|
||||
"wusonghao modian",
|
||||
"name",
|
||||
"Tetris Research community member.\nOne of the top players of hidden Tetris in China. Was once on TV.",
|
||||
"https://space.bilibili.com/17583394",
|
||||
},
|
||||
{"他天一",
|
||||
"tty tatianyi",
|
||||
"name",
|
||||
"Tetris Research community member.\nContributor of 奏之章's Cultris II bot. One of the top players in China.",
|
||||
"https://space.bilibili.com/3895759",
|
||||
},
|
||||
{"Mars608",
|
||||
"mars608",
|
||||
"name",
|
||||
"Tetris Research community member.\nFormer regional first place on Puyo Puyo Tetris (Nintendo Switch, People's Republic of China region).",
|
||||
"https://space.bilibili.com/1471400",
|
||||
},
|
||||
{"Mifu",
|
||||
"mifu swl nanmaomao",
|
||||
"name",
|
||||
"Originally known as swl.\nPersonal bests: Sprint 32 seconds, Tetris Research community member.\nMiya's Tetris coach. Miya made an animated character art for him called Mifu, meaning \"Miya's Shifu\".",
|
||||
"https://space.bilibili.com/109356367",
|
||||
},
|
||||
{"ZXC",
|
||||
"zxc thtsod",
|
||||
"name",
|
||||
"Also known as ThTsOd.\nTetris Research community member.\nA technical player.",
|
||||
"https://space.bilibili.com/4610502",
|
||||
},
|
||||
{"Tinko",
|
||||
"tinko",
|
||||
"name",
|
||||
"Tetris Research community member.\nA technical player.",
|
||||
"https://tinko.moe",
|
||||
},
|
||||
{"T722",
|
||||
"722",
|
||||
"name",
|
||||
"Tetris Research community member.\nMusician.",
|
||||
"https://space.bilibili.com/30452985",
|
||||
},
|
||||
{"Diao",
|
||||
"diao",
|
||||
"name",
|
||||
"Tetris Research community member.\nOne of the top battle players. Won second place in JsCup, champion in TTT, champion in HDO XII.\nHas many former nicknames including nmdtql, diao, nanami.",
|
||||
"https://space.bilibili.com/471341780",
|
||||
},
|
||||
{"思竣",
|
||||
"sijun",
|
||||
"name",
|
||||
"Tetris Research community member. Sprint 47.2 seconds, 29TSD in Techmino, 25 All Clears in PC Challenge - Lunatic\nLots of mental computation power.",
|
||||
"https://space.bilibili.com/403250559",
|
||||
},
|
||||
{"子心Koishi",
|
||||
"koishi",
|
||||
"name",
|
||||
"Tetris Research community member, Virtual content creator.\nA top Tetris 99 players known for his strategies.",
|
||||
"https://space.bilibili.com/147529",
|
||||
},
|
||||
{"ditoly",
|
||||
"ditoly icrem kuimei jk",
|
||||
"name",
|
||||
"Tetris Research community member.",
|
||||
"https://space.bilibili.com/13014410",
|
||||
},
|
||||
{"Gompyn",
|
||||
"lanlv gompyn",
|
||||
"name",
|
||||
"Tetris Research community member.\nTechnical player.",
|
||||
},
|
||||
{"喵田弥夜Miya",
|
||||
"miya miaotianmiye",
|
||||
"name",
|
||||
"Tetris Research community member, Virtual content creator.\nPractically the mascot of the community. Voice actress of Techmino.",
|
||||
"https://space.bilibili.com/846180",
|
||||
},
|
||||
|
||||
{"Windkey",
|
||||
"wdk windkey fengyaoshi",
|
||||
"name",
|
||||
"Former community member.\nBad reputation due to excessive center 4-wides.",
|
||||
"https://space.bilibili.com/25576872",
|
||||
},
|
||||
}
|
||||
975
LANG/dict_zh.lua
975
LANG/dict_zh.lua
@@ -1,975 +0,0 @@
|
||||
local HDsearch="https://harddrop.com/wiki?search="
|
||||
local HDwiki="\t更多内容见HD wiki"
|
||||
return{
|
||||
{"新人须知",
|
||||
"xinren new noob readme",
|
||||
"help",
|
||||
"致想深入玩下去的新人:\n\t两大根本原则:\n\t\t1.选手感好的版本(top/jstris/tetrjs/tech),别用编程练习渣版本\n\t\t2.踏实打好基础(next预判稳定消四),别只想着炫酷T旋\n\t两大主要技巧:\n\t\t1.熟悉初始位置以及到各个位置的初始操作\n\t\t2.提前计算好下一块能放哪\n(推荐阅读专栏)一位块圈dalao给新人的话\n\n[点击右下角的按钮打开链接]",
|
||||
"http://bilibili.com/read/cv2352939",
|
||||
},
|
||||
{"HardDrop wiki",
|
||||
"harddrop hd wiki",
|
||||
"help",
|
||||
"位于Harddrop全球俄罗斯方块社区的wiki百科(英文)",
|
||||
"http://harddrop.com/wiki/Tetris_Wiki",
|
||||
},
|
||||
{"灰机wiki",
|
||||
"huiji wiki",
|
||||
"help",
|
||||
"俄罗斯方块中文维基,由一群来自俄罗斯方块研究群及下属群的方块同好建立的关于俄罗斯方块的中文百科全书。\n当前大部分页面翻译和参考来自Harddrop wiki和Tetris Wiki",
|
||||
"http://tetris.huijiwiki.com",
|
||||
},
|
||||
|
||||
{"TTT",
|
||||
"ttt",
|
||||
"game",
|
||||
"现代方块特殊操作手把手教程(推荐使用电脑,移动设备需要外接键盘)\n\t推荐能无hold纯消四完成40行挑战的人学习\n\t内含T-spin、极简、SRS、部分对战定式介绍等教程\n\t完全吃透了话就可以成为教练啦!\n注:提供的链接是翻译后挂在茶服的版本",
|
||||
"http://139.199.75.237/ttt",
|
||||
},
|
||||
{"TTPC",
|
||||
"ttpc",
|
||||
"game",
|
||||
"SRS+bag7方块游戏开局PC教程(推荐使用电脑,移动设备需要外接键盘)\n\t推荐完成了ttt的人学习(必须先学会SRS)\n\t(不包括六巧板等其它PC定式)\n\n注:提供的链接是翻译后挂在茶服的版本",
|
||||
"http://139.199.75.237/ttpc",
|
||||
},
|
||||
{"NAZO",
|
||||
"nazo",
|
||||
"game",
|
||||
"各类SRS试题(手机触屏玩不了)\n\t推荐能通过ttt的玩家尝试。\n\t内含各种t-spin/all-spin题目,简单到极难题目都有。\n\n注:提供的链接是翻译后挂在茶服的版本",
|
||||
"http://139.199.75.237/nazo",
|
||||
},
|
||||
|
||||
{"King of Stackers",
|
||||
"kos kingofstackers",
|
||||
"game",
|
||||
"King of Stackers\n网页版回合制对战方块点击即玩(可能很卡)",
|
||||
"http://kingofstackers.com/games.php",
|
||||
},
|
||||
{"Tetr.js",
|
||||
"tetrjs",
|
||||
"game",
|
||||
"全平台网页版单机方块点击即玩,有对新人比较友好的全自定义(大多数常用功能),手机只能选几个默认按键组,不能自由摆放。别的都很好",
|
||||
"http://farter.cn/t",
|
||||
},
|
||||
{"Tetra Legends",
|
||||
"tl tetralegends",
|
||||
"game",
|
||||
"全平台网页版单机方块点击即玩(推荐使用电脑,移动设备需要外接键盘)(第一次加载可能很慢),除了手感不够舒适以外功能比较强大,动效很好看,还把很多别的游戏里不可见的机制可视化了,游戏体验很好。\n\n注:包含节奏模式!",
|
||||
"http://tetralegends.app",
|
||||
},
|
||||
{"Jstris",
|
||||
"js jstris",
|
||||
"game",
|
||||
"全平台网页对战方块点击即玩(服务器在国外可能很卡)",
|
||||
"http://jstris.jezevec10.com",
|
||||
},
|
||||
{"Tetr.io",
|
||||
"io tetrio",
|
||||
"game",
|
||||
"炫酷在线对战方块点击即玩(推荐使用电脑,移动设备需要外接键盘)(服务器在国外,可能超级慢甚至打不开)",
|
||||
"http://tetr.io",
|
||||
},
|
||||
{"World Wide Combo",
|
||||
"wwc worldwidecombo",
|
||||
"game",
|
||||
"网页全世界匹配制1对1方块点击即玩(服务器在国外可能很卡)",
|
||||
"http://worldwidecombos.com",
|
||||
},
|
||||
{"Tetris Friends",
|
||||
"tf tetrisfriends",
|
||||
"game",
|
||||
"一个已经关服了的网页版方块,曾经是一个不错的对战平台",
|
||||
},
|
||||
|
||||
{"TGM",
|
||||
"tgm tetrisgrandmaster",
|
||||
"game",
|
||||
"一个街机平台方块系列,S13/GM等称号出自该系列,可以在win平台运行\n\n其中TGM3目前玩得最普遍,部分模式说明:\nMaster:大师模式,有段位评价,拿到更高段位点的要求:非消一的连击和消四,字幕战中消除和通关,每100的前70小于【标准时间,上一个0~70秒数+2】中小的一个,每100总用时不能超过限定值(不然取消上一个方法的加分并反扣点数);到500若没有进标准时间会强制结束游戏(称为铁门);字幕战有两个难度,半隐和全隐,后者必须拿到几乎全部的段位点才能进,消除奖励的段位点也更多。\nShirase:死亡模式,类似于techmino中的20G-极限,开局就是高速20G,500和1000有铁门,500开始底下开始涨垃圾行,1000开始出现骨块,1300通关进入大方块字幕战;;段位结算:每通100加1段从S1到S13,如果通关了字幕战就会有金色的S13",
|
||||
},
|
||||
{"DTET",
|
||||
"dtet",
|
||||
"game",
|
||||
"一个win平台方块,基于经典规则加入了20G和一个很强大的旋转系统,手感非常好,但是除了键位都不可自定义,能习惯经典出块方向的玩家可以玩(就是有点难找到,找到了可能还要自己装缺了的dll文件)",
|
||||
},
|
||||
{"Heboris",
|
||||
"hb heboris",
|
||||
"game",
|
||||
"一个win平台方块,仿街机,可以模拟多个方块游戏的部分模式",
|
||||
},
|
||||
{"Texmaster",
|
||||
"txm texmaster",
|
||||
"game",
|
||||
"一个win平台方块,包含TGM的所有模式,可以用来练习TGM,手感比真版较好,不足的是world规则不完全一样(如软降到底无锁延,踢墙表有细节不同等)",
|
||||
},
|
||||
|
||||
{"Tetris99",
|
||||
"t99 tetris99",
|
||||
"game",
|
||||
"ns端方块,主玩99人混战的吃鸡模式,战术比重比较大,胜率不只由玩家在平时1v1时的水平决定。也有一些常用单机模式如马拉松等",
|
||||
},
|
||||
{"Puyopuyo Tetris",
|
||||
"ppt puyopuyotetris",
|
||||
"game",
|
||||
"多平台方块(steamPC版手感,网络等都不太好,不建议购买),将tetris和puyopuyo两个下落消除游戏放到一个游戏里,二者可以对战,联机单机模式都很多,很有趣",
|
||||
},
|
||||
{"Tetris Online",
|
||||
"top tetris online study",
|
||||
"game",
|
||||
"一个win平台方块,主要用来6人内对战/单挑/刷每日40L榜/挖掘模式/打机器人。支持自定义das/arr但都不能到0,有一点输入延迟但问题不大,是新人入块圈不错的选择。\n\n现在还开着的服务器有:\n\tTO-P(波兰服,服务器在波兰,可能会卡顿)\n\tTO-S(研究服,研究群群友自己开的服,很稳定,需要进群注册)\n\tTO-X(千雪服,VUP星月千雪于20年9月开的服,还处于实验阶段)",
|
||||
},
|
||||
{"Tetris Effect",
|
||||
"te tetriseffect",
|
||||
"game",
|
||||
"一个win/ns/ps4平台方块,特效方块游戏,只有单机模式,手感不算太好,想看特效的可以一试,只是去玩方块的不是很建议",
|
||||
},
|
||||
{"Techmino",
|
||||
"techmino tieke",
|
||||
"game",
|
||||
"一个win/android/linux/macOS方块,只有单机,但是模式和各种设置都很齐全,适合有一定基础的新人,输入延迟很小,手感很好",
|
||||
},
|
||||
{"Cultris II",
|
||||
"c2 cultris2 cultrisii",
|
||||
"game",
|
||||
"一个win/linux/macOS平台方块,基于经典规则,但支持自定义das/arr,主玩对战,打法是基于时间的连击,考验玩家速度/wide打法/挖掘",
|
||||
},
|
||||
{"Nullpomino",
|
||||
"np nullpomino",
|
||||
"game",
|
||||
"一个win平台方块,整个游戏自定义程度极高,几乎任何参数都可以自己设置,是一个专业级方块,不太适合新人上手,连菜单都不太好搞清楚",
|
||||
},
|
||||
{"Touhoumino",
|
||||
"touhoumino chewan dongfang",
|
||||
"game",
|
||||
"块圈玩家自制win平台方块,其实就是一个nullpomino的自带资源包的改版,将东方project元素结合到俄罗斯方块的游戏,好玩但是难度较大,适合有方块基础并且各项能力都较强的玩家游玩(不然都不知道自己怎么死的)",
|
||||
},
|
||||
{"Misamino",
|
||||
"misamino",
|
||||
"game",
|
||||
"块圈玩家自制win平台方块,单机1v1,主玩回合制模式,可以自定义ai(自己写的话需要了解接口)",
|
||||
},
|
||||
{"JJ块",
|
||||
"jj gougou",
|
||||
"game",
|
||||
"jj棋牌平台下一个休闲游戏,安卓百度“JJ比赛”官网下载平台后可以找到(找不到的话是你没在官网下载或者你是ios系统)。竖屏,输入延迟很小超流畅,可自定义das/arr/20G软降,简单自定义键位,无hold,没有b2b,无攻击缓冲不可抵消,每次攻击上限为4,连击较强,其他同现代方块",
|
||||
},
|
||||
{"火拼俄罗斯",
|
||||
"huopin qq",
|
||||
"game",
|
||||
"腾讯游戏大厅的方块,场地12列,打字的das和arr,1next,无hold,攻击途径只有 消4打3 消3打2,垃圾行为国际象棋棋盘式,几乎不可能挖掘",
|
||||
},
|
||||
|
||||
|
||||
|
||||
{"LPM",
|
||||
"lpm sudu",
|
||||
"term",
|
||||
"Line per Minute\n行每分,体现玩家下块速度。\n\n注:不同游戏中显示的LPM算法可能不一样,例如TO中的lpm是用pps换算的,每1pps=24lpm,忽略掉了垃圾行的影响,不再是字面意思,本游戏中使用L'PM代表这种换算后LPM",
|
||||
},
|
||||
{"PPS",
|
||||
"pps sudu",
|
||||
"term",
|
||||
"Piece per Second\n块每秒,体现玩家下块速度。",
|
||||
},
|
||||
{"BPM",
|
||||
"bpm sudu",
|
||||
"term",
|
||||
"Block per Minute\n块每分,体现玩家下块速度\n别问为什么不是PPM,问就是不知道",
|
||||
},
|
||||
{"APM",
|
||||
"apm attack gongji",
|
||||
"term",
|
||||
"Attack per Minute\n攻击每分,即玩家每分钟能打出的垃圾行数。\n一定程度体现玩家攻击力",
|
||||
},
|
||||
{"SPM",
|
||||
"spm send gongji",
|
||||
"term",
|
||||
"Send per Minute\n送出每分,即玩家每分钟实际打出去给对手的垃圾行数。\n一定程度体现玩家给对手实际造成的攻击力",
|
||||
},
|
||||
{"ADPM",
|
||||
"adpm attack defend",
|
||||
"term",
|
||||
"Atk+Dig per Minute\n攻击+挖掘每分,用于在同一局游戏内对比玩家间水平差距,比apm更准确一些",
|
||||
},
|
||||
{"DPM",
|
||||
"dpm dig defend",
|
||||
"term",
|
||||
"Dig/Defend per Minute\n挖掘每分,即玩家每分钟向下挖掘的垃圾行数。\n某些时候可以体现玩家生存能力\n\n或:防御(抵消+挖掘)每分",
|
||||
},
|
||||
{"KPM",
|
||||
"kpm sudu",
|
||||
"term",
|
||||
"Key per Minute\n按键每分,体现玩家按键速度。",
|
||||
},
|
||||
{"KPP",
|
||||
"kpp anjian",
|
||||
"term",
|
||||
"Key per Piece\n按键每块,体现玩家操作是否繁琐。\n学会极简提升操作效率以减少此数字",
|
||||
},
|
||||
{"APL",
|
||||
"apl xiaolv",
|
||||
"term",
|
||||
"Attack per Line\n攻击每行,也叫效率,体现玩家攻击的的行利用率。",
|
||||
},
|
||||
|
||||
{"PC",
|
||||
"pc perfectclear ac allclear quanxiao quanqing",
|
||||
"term",
|
||||
"Perfect Clear(也叫All Clear,全消,或全清)\n消除场地上所有的方块。",
|
||||
},
|
||||
{"HPC",
|
||||
"hpc hc clear banqing banquanqing banquanxiao",
|
||||
"term",
|
||||
"Half-PC\nPC(全消)的外延,如果去掉消除部分之下的场地后上面部分是一个PC,那么这个消除就是半PC,打出一些攻击(仅Tech中有)。",
|
||||
},
|
||||
{"TSS",
|
||||
"tss t1 tspin",
|
||||
"term",
|
||||
"T-spin single\n指T方块spin消1行。",
|
||||
},
|
||||
{"TSD",
|
||||
"tsd t2 tspin",
|
||||
"term",
|
||||
"T-spin double\n指T方块spin消2行。",
|
||||
},
|
||||
{"TST",
|
||||
"tst t3 tspin",
|
||||
"term",
|
||||
"T-spin triple\n指T方块spin消3行。",
|
||||
},
|
||||
{"MTSS",
|
||||
"mtss tspin",
|
||||
"term",
|
||||
"mini T-spin single\n指T方块mini spin消1行(不同游戏判定不一样)。",
|
||||
},
|
||||
{"MTSD",
|
||||
"mtsd tspin",
|
||||
"term",
|
||||
"mini T-spin double\n指T方块mini spin消2行(仅部分游戏内存在且判定不一样)。",
|
||||
},
|
||||
{"Single",
|
||||
"single xiaoyi",
|
||||
"term",
|
||||
"消一行",
|
||||
},
|
||||
{"Double",
|
||||
"double xiaoer",
|
||||
"term",
|
||||
"消两行",
|
||||
},
|
||||
{"Triple",
|
||||
"triple xiaosan",
|
||||
"term",
|
||||
"消三行",
|
||||
},
|
||||
{"Techrash",
|
||||
"techrash xiaosi",
|
||||
"term",
|
||||
"消四行(Tech限定)",
|
||||
},
|
||||
{"Tetris",
|
||||
"tetris xiaosi",
|
||||
"term",
|
||||
"商标,Tetris游戏名,同时也是别的方块游戏里消四行的名字。\n含义是Tetra(古希腊语 四)+Tennis(作者喜欢的运动)。",
|
||||
},
|
||||
|
||||
{"SRS",
|
||||
"srs rotate",
|
||||
"term",
|
||||
"Super Rotation System\n现代方块最常用的旋转系统,每个方块都有一个旋转中心,旋转后如果和场地有重合,会根据<从哪个方向转到哪个方向>进行一些偏移测试,可以让方块钻进入一些特定形状的洞。",
|
||||
},
|
||||
{"NRS",
|
||||
"nrs rotate",
|
||||
"term",
|
||||
"Nintendo Rotation System",
|
||||
},
|
||||
{"ARS",
|
||||
"ars rotate",
|
||||
"term",
|
||||
"Arika Rotation System, TGM系列使用的旋转系统(3代中的C模式)\n或者\nAtari Rotation System, 一个左上对齐旋转系统",
|
||||
},
|
||||
{"DRS",
|
||||
"drs rotate",
|
||||
"term",
|
||||
"DTET Rotation System",
|
||||
},
|
||||
{"TRS",
|
||||
"trs rotate",
|
||||
"term",
|
||||
"Techmino Rotation System\nTechmino独有的旋转系统,基于SRS设计,修补了一些常见SZ卡死的地形,增加了不少实用踢墙,每个五连块也基本按照SRS的spin逻辑单独设计了踢墙表。",
|
||||
},
|
||||
|
||||
{"Spin",
|
||||
"spin",
|
||||
"term",
|
||||
"(部分游戏中)使用旋转将方块卡进不能直接移动进入的位置,在一些规则下有攻击加成。",
|
||||
},
|
||||
{"Allspin",
|
||||
"allspin",
|
||||
"term",
|
||||
"一种规则,指所有方块的spin都有攻击力,而不止是Tspin才有攻击(Tspin only)。",
|
||||
},
|
||||
{"Tspin",
|
||||
"tspin txuan",
|
||||
"term",
|
||||
"在官方规则中,当T方块在锁定前的最后一个操作是旋转,并且锁定后旋转中心对应的四个斜角位置有三个不是空气,那么这就是一个Tspin。PS:如果满足一些额外条件会被打上mini标签减少攻击力。",
|
||||
},
|
||||
|
||||
{"IRS",
|
||||
"irs initialrotatesystem",
|
||||
"term",
|
||||
"Initial Rotation System\n提前旋转系统,提前按下旋转后方块出现就是转好的形状,有时可以避免死亡。",
|
||||
},
|
||||
{"IHS",
|
||||
"ihs initialholdsystem",
|
||||
"term",
|
||||
"Initial Hold System\n提前Hold系统,提前按下hold后直接出现hold里的方块,有时可以避免死亡。",
|
||||
},
|
||||
{"IMS",
|
||||
"ims initialmovesystem",
|
||||
"term",
|
||||
"Initial Move System\n提前移动系统,提前按下移动后方块出现在移动好的位置,有时可以避免死亡。",
|
||||
},
|
||||
|
||||
{"Next",
|
||||
"next yulan xiayige",
|
||||
"term",
|
||||
"预览功能,指示后边几个块的顺序,思考这块怎么摆可以让后面轻松。",
|
||||
},
|
||||
{"Hold",
|
||||
"hold zancun",
|
||||
"term",
|
||||
"暂存功能,将手里的方块和hold槽中的交换,用来调整块序,不能连续使用,更容易摆出你想要的形状。",
|
||||
},
|
||||
|
||||
{"Misdrop",
|
||||
"md misdrop",
|
||||
"term",
|
||||
"误放,就是不小心放错了地方",
|
||||
},
|
||||
{"Mishold",
|
||||
"mh mishold",
|
||||
"term",
|
||||
"误hold,就是不小心按到hold导致死亡或失去pc机会等",
|
||||
},
|
||||
|
||||
{"sub",
|
||||
"sub",
|
||||
"term",
|
||||
"在…之下\n用于表示成绩,单位一般可不写,比如40行成绩sub30是秒,1000行sub15是分钟,不写项目默认是40L\n\n例:39.95秒是sub40,40.5秒不是sub40\n请不要使用sub62之类的词,因为sub本身就是表示大约,一分钟左右的成绩精确到10就可以了,一般30秒以内的sub才会精确到1秒。",
|
||||
},
|
||||
{"mini",
|
||||
"mini",
|
||||
"term",
|
||||
"spin附加mini后攻击会弱化,用于平衡不同难易度的tspin攻击,判定在不同游戏都不一样,而且大多数很不好理解,建议只记住常见形状即可。",
|
||||
},
|
||||
{"B2B",
|
||||
"b2b btb backtoback",
|
||||
"term",
|
||||
"Back to Back\n连续打出两次特殊消行(spin和消四),中间不夹杂普通消行,可以提供额外的攻击(在tech中b2b为满贯,大满贯是b3b)",
|
||||
},
|
||||
{"B2B2B",
|
||||
"b2b2b b3b",
|
||||
"term",
|
||||
"b2b的加强版,缩写b3b,大量b2b后连续b2b会变成b2b2b(b3b),提供更强的攻击(仅Tech中有)",
|
||||
},
|
||||
{"Fin/Neo/Iso",
|
||||
"fin neo iso",
|
||||
"term",
|
||||
"一种特殊T2的名字,不同的游戏内的攻击可能不一样,没有特殊价值,可以不详细了解。",
|
||||
},
|
||||
{"Donate",
|
||||
"donate juanzeng",
|
||||
"term",
|
||||
"捐赠\n指刻意临时盖住洞去做tspin等操作来实现不断b2b的一类技巧。",
|
||||
},
|
||||
{"攻守",
|
||||
"gong shou",
|
||||
"term",
|
||||
"通过消除给对手发送垃圾行=攻击\n别人打过来攻击之后用攻击抵消=防御(相杀)\n抵消/吃下所有攻击后打出攻击=反击\n\n注:大多游戏的攻防是1:1的,4行攻击抵消对手的4行攻击",
|
||||
},
|
||||
|
||||
{"Side",
|
||||
"side",
|
||||
"term",
|
||||
"在场地旁边空出n列的堆叠法\n用来制造连击,对于新人是一个不错的进攻方法。但由于起楼的时候可能会被顶死而且总效率不高,导致高端玩家不会单独做wide,更可能会在中局堆好炮并且观察到对手短时间内不会打出伤害的时候可以造,用来大幅加强瞬时火力。",
|
||||
},
|
||||
{"S1W",
|
||||
"s1w side2wide",
|
||||
"term",
|
||||
"Side 1 Wide\n旁边空1列,是传统方块游戏里常见的消四打法。\n在现代方块对战中新手可以使用,短时间能打出大量攻击,但在高手场出场率不高,因为效率低,容易被对面一波打死,故只在极少数情况合适的时候用。",
|
||||
},
|
||||
{"S2W",
|
||||
"s2w side2wide",
|
||||
"term",
|
||||
"Side 2 Wide\n旁边空2列,是常见的连击打法。\n难度很低,现代块对战中新手可以使用,结合hold可以很轻松地打出大连击。高手场使用不多,因为准备时间太长,会被对面提前打进垃圾行,导致连击数减少,效率也没有特别高,故一套打完也不一定能杀人。",
|
||||
},
|
||||
{"S3W",
|
||||
"s3w side2wide",
|
||||
"term",
|
||||
"Side 3 Wide\n旁边空3列,不如2w常见的连击打法。能打出的连击数比2w多,但是难度偏大很容易断连。",
|
||||
},
|
||||
{"S4W",
|
||||
"s4w side4wide",
|
||||
"term",
|
||||
"Side 4 Wide\n旁边空4列,一种连击打法,能打出很高的连击,并且准备时间比别的wide打法短,故动作快的话可以抢在对手打进垃圾之前堆很高然后打出超大连击。\n(因为可能会被提前打死,风险挺大,所以没有c4w那么不平衡)",
|
||||
},
|
||||
{"C1W",
|
||||
"c1w center1wide",
|
||||
"term",
|
||||
"Center 1 Wide\n中间空1列,一种实战里消4同时辅助打TSD的打法,需要玩家理解<平衡法>,熟练之后可以轻松消四+T2输出,难度也不是特别大。",
|
||||
},
|
||||
{"C2W",
|
||||
"c2w center2wide",
|
||||
"term",
|
||||
"Center 2 Wide\n中间空2列,一种连击打法",
|
||||
},
|
||||
{"C3W",
|
||||
"c3w center3wide",
|
||||
"term",
|
||||
"Center 3 Wide\n中间空3列,一种连击打法",
|
||||
},
|
||||
{"C4W",
|
||||
"c4w center4wide",
|
||||
"term",
|
||||
"Center 4 Wide\n中间空四列,一种连击打法,能打出很高的连击,利用了大多数专业对战方块游戏的死亡判定机制,可以放心堆高不担心被顶死,然后开始连击。是一种利用游戏机制的不平衡策略(尤其在开局时),观赏性不是很强还可以以弱胜强,成本太低所以成为了部分游戏中约定的类似 禁招 的东西,请在了解情况后再使用,不然可能会被别人骂。\n\n本游戏里做了平衡,c4w强度没有别的游戏高,而且打的是电脑所以放心用~",
|
||||
},
|
||||
|
||||
{"DT炮",
|
||||
"dt",
|
||||
"term",
|
||||
"Double-Triple Cannon"..HDwiki,
|
||||
HDsearch.."dt",
|
||||
},
|
||||
{"DTPC",
|
||||
"dtpc",
|
||||
"term",
|
||||
"DT炮一个能接PC的分支"..HDwiki,
|
||||
HDsearch.."dt",
|
||||
},
|
||||
{"BT炮",
|
||||
"bt",
|
||||
"term",
|
||||
"β炮(Beta炮)"..HDwiki,
|
||||
HDsearch.."bt_cannon",
|
||||
},
|
||||
{"BTPC",
|
||||
"btpc",
|
||||
"term",
|
||||
"BT炮一个能接PC的分支"..HDwiki,
|
||||
HDsearch.."bt_cannon",
|
||||
},
|
||||
{"DDPC",
|
||||
"ddpc",
|
||||
"term",
|
||||
"开局TSD的一个能接Double-Double-PC的分支"..HDwiki,
|
||||
HDsearch.."TKI_3_Perfect_Clear",
|
||||
},
|
||||
{"QT炮",
|
||||
"qt",
|
||||
"term",
|
||||
"QT炮,细节未知",
|
||||
},
|
||||
{"MT",
|
||||
"mt",
|
||||
"term",
|
||||
"Mini-Triple\n一个TSM+TST的结构",
|
||||
HDsearch.."mt",
|
||||
},
|
||||
{"狼月炮",
|
||||
"wolfmoon",
|
||||
"term",
|
||||
"狼月炮"..HDwiki,
|
||||
HDsearch.."wolfmoon_cannon",
|
||||
},
|
||||
{"ASC",
|
||||
"asc",
|
||||
"term",
|
||||
"ASC开局,细节未知",
|
||||
},
|
||||
{"Sewer",
|
||||
"sewer",
|
||||
"term",
|
||||
"Sewer开局"..HDwiki,
|
||||
HDsearch.."sewer",
|
||||
},
|
||||
{"TKI",
|
||||
"tki",
|
||||
"term",
|
||||
"TKI开局\n有两种解释,一个是TSD开局,另一个是Cspin开局。"..HDwiki,
|
||||
HDsearch.."tki",
|
||||
},
|
||||
{"God Spin",
|
||||
"god",
|
||||
"term",
|
||||
"God Spin\nwindkey发明的一个观赏性很强但实战没啥用的炫酷特殊T2+T3开局定式。"..HDwiki,
|
||||
HDsearch.."godspin",
|
||||
},
|
||||
|
||||
{"STSD",
|
||||
"stsd",
|
||||
"term",
|
||||
"Super T-spin Double\n一种能做两个T2的形状"..HDwiki,
|
||||
HDsearch.."stsd",
|
||||
},
|
||||
{"STMB",
|
||||
"stmb",
|
||||
"term",
|
||||
"STMB cave\n在高空3宽坑架SZ捐一个T2的形状"..HDwiki,
|
||||
HDsearch.."stmb_cave",
|
||||
},
|
||||
{"Cspin",
|
||||
"cspin",
|
||||
"term",
|
||||
"JL脚对脚立起来形成一个C形,缺口做适当的填充后可以打T3+T2"..HDwiki,
|
||||
HDsearch.."c-spin",
|
||||
},
|
||||
{"LST堆叠",
|
||||
"lst",
|
||||
"term",
|
||||
"一种不断b2b一直做T2的堆叠方法"..HDwiki,
|
||||
HDsearch.."st_stacking",
|
||||
},
|
||||
{"雨宫炮",
|
||||
"yugong",
|
||||
"term",
|
||||
"一种捐T2后可消四的形状,常见于DT的一个分支",
|
||||
},
|
||||
{"千鸟格子",
|
||||
"qianniaoge",
|
||||
"term",
|
||||
"一种在小洞上捐一个T2后还能做一个T2的形状",
|
||||
},
|
||||
{"皇家十字",
|
||||
"imperial cross huangjiashizi",
|
||||
"term",
|
||||
"在一个十字形洞口盖屋檐后可以做两个T2"..HDwiki,
|
||||
HDsearch.."imperial_cross",
|
||||
},
|
||||
{"汉堡包",
|
||||
"hamburger hanbaobao",
|
||||
"term",
|
||||
"一种边缘捐T不影响消四的堆叠法"..HDwiki,
|
||||
HDsearch.."hamburger",
|
||||
},
|
||||
{"六巧板",
|
||||
"liuqiaoban",
|
||||
"term",
|
||||
"一种常用于增加中局PC概率的形状,本游戏中的pc练习中空出4*4方形区域就是六巧板",
|
||||
},
|
||||
{"信天翁",
|
||||
"xintianweng",
|
||||
"term",
|
||||
"一种高观赏性几乎不浪费T的快节奏强力T2-T3-T2-PC开局",
|
||||
},
|
||||
{"鹈鹕",
|
||||
"tihu",
|
||||
"term",
|
||||
"一种类似信天翁的定式,在块序不能信天翁的时候可以用",
|
||||
},
|
||||
{"绯红之王",
|
||||
"feihongzhiwang",
|
||||
"term",
|
||||
"在STSD上叠一个T3",
|
||||
},
|
||||
{"定式",
|
||||
"setup dingshi",
|
||||
"term",
|
||||
"能称为定式的要尽量满足以下至少2~3条:\n能适应大多数块序\n输出高,尽量不浪费T块\n很多方块无需软降,极简操作数少\n有明确后续,分支尽量少。",
|
||||
},
|
||||
|
||||
{"6-3堆叠法",
|
||||
"63",
|
||||
"term",
|
||||
"指左边6列右边3列的堆叠方式。在玩家有足够的计算能力后可以减少堆叠所用的按键数(反之可能甚至会增加),是主流的用于减少操作数的高端40L堆叠方式,原理跟出块位置是中间偏左有关。",
|
||||
},
|
||||
{"连击",
|
||||
"ren combo",
|
||||
"term",
|
||||
"从第二次消除起叫1ren/combo",
|
||||
},
|
||||
{"20G",
|
||||
"20g",
|
||||
"term",
|
||||
"现代方块的最高下落速度,表观就是方块瞬间到底,不存在中间的下落过程,会让方块无法跨越壕沟/从山谷爬出。",
|
||||
},
|
||||
{"死亡判定",
|
||||
"die death siwang",
|
||||
"term",
|
||||
"现代方块的死亡判定:\n1.新出现的方块和场地方块有重叠(窒息)(c4w比s4w强的原因,因为被打进18行都不会窒息)\n2.方块锁定时完全在场地的外面\n3.所有东西的总高度超出40。\n\n注:本游戏使用的死亡判定没有上述的第二条,第三条的40改成42",
|
||||
},
|
||||
{"下落速度",
|
||||
"drop speed",
|
||||
"term",
|
||||
"一般用?G表示方块的下落速度,意思是每一帧方块往下移动多少格子,一秒下落一格就是1/60G(默认60fps),故G是一个很大的单位,20G即为上限(因为场地就20格)。",
|
||||
},
|
||||
{"锁定延迟",
|
||||
"lock delay suoyan",
|
||||
"term",
|
||||
"方块<碰到地面→锁定>之间的时间。经典块仅方块下落一格时刷新倒计时,而现代方块中往往任何操作都将重置该倒计时,所以连续移动和操作可以让方块不马上锁定,拖一会时间(重置次数有限,一般是15)。",
|
||||
},
|
||||
{"Finesse",
|
||||
"finesse jijiancaozuo zuijiancaozuo",
|
||||
"term",
|
||||
"极简操作\n用最少的按键数将方块移到想去的位置的技术,节约时间和减少misdrop。练习可用jstris的极简错误重开或者techmino中打开极简错误提示,多玩就可以。\n\n注意,本游戏使用的极简判定系统不是说完全和理论最少操作数一样,而是不需要软降就能达到的位置才会按照标准出块方向和你的按键次数执行极简检测,故在此不像js存在软降后误杀。但是多了一些新的条件,比如【手上和hold一样/已经按了超过3次按键后】再hold后按键次数不重置(让下一块极简失误)。\n极简率计算:\n没有超过标准极简法操作数的为Perfect计100%,超出一步为Great计50%,超出两步为Bad计25%,两步以上为Miss计0%,其中Bad和Miss会断连\n\n注:20G下极简系统和0G一样工作,所以得到的数值不准确,参考价值偏低",
|
||||
},
|
||||
{"科研",
|
||||
"keyan",
|
||||
"term",
|
||||
"常用语,指在低重力的单人模式里减速研究怎么做各种Tspin,本游戏中拓展了含义,用于称呼几乎需要全程spin的游戏模式。",
|
||||
},
|
||||
{"DAS & ARR",
|
||||
"das arr",
|
||||
"term",
|
||||
"DAS(Delay-auto-shift)\n\t自动移动延迟,指从<按下移动键时动了一格>到<开始自动移动>之间的时间\n\nARR(Auto-repeat-rate)\n\t自动重复速率,指<每次自动移动>之间的时间\n单位都是f(帧,1帧=1/60秒)\n新人不会调的话推荐用das=8~10,arr=1~2\n对自己能力比较自信或者是已经有一定水平想提速推荐用das=4~6,arr=0\n(如果是别的游戏单位是ms(毫秒),那么乘16.7就可算出对应的数值)\n\n最佳调整方法:das越小越好,小到玩家依然能精准区分单点/长按为止;arr能0就0,游戏不允许的话就能拉多小拉多小",
|
||||
},
|
||||
{"DAS通俗",
|
||||
"das arr",
|
||||
"term",
|
||||
"打字时按住o,你会看到:Ooooooooooo\n在时间轴上:O-----------o-o-o-o-o-o-o-o-o-o\n-----------就是das长度,-就是arr长度",
|
||||
},
|
||||
{"bag7",
|
||||
"bag7bag",
|
||||
"term",
|
||||
"bag7\n一种现代方块的出块方式,开局起每7个块是7种形状各出现一次\n\n例如:\nZSJLTOI OTSLZIJ LTISZOJ",
|
||||
},
|
||||
{"His出块",
|
||||
"history",
|
||||
"term",
|
||||
"一种出块方式,例如his 4 roll 6 (h4r6) 就是在随机生成新的next的时候,随机一个跟最后4次生成的next中有一样的,就重新随机,直到已经尝试6次或和那4个都不一样。",
|
||||
},
|
||||
{"Ospin",
|
||||
"ospin",
|
||||
"term",
|
||||
"由于O方块旋转后形状不变,只能左右移动,所以经常被卡住,于是方块圈就有了ospin的梗:\n有人做过T99/TF中的O变形的特效视频且广为流传;\nT-ex设计的旋转系统可以用spin使O传送进坑;\nTech设计的变形系统中可以旋转O来变形/传送进入一些特定形状的洞。",
|
||||
},
|
||||
{"Ospin操作表",
|
||||
"ospin ctrl",
|
||||
"term",
|
||||
"秘密内容,请自行研究以下代码表示的含义\n{111,5,2, 0,-1,0},{111,5,2,-1,-1,0},{111,5,0,-1, 0,0},//T\n{333,5,2,-1,-1,0},{333,5,2, 0,-1,0},{333,5,0, 0, 0,0},//T\n{313,1,2,-1, 0,0},{313,1,2, 0,-1,0},{313,1,2, 0, 0,0},//Z\n{131,2,2, 0, 0,0},{131,2,2,-1,-1,0},{131,2,2,-1, 0,0},//S\n{331,3,2, 0,-1,0},{113,3,0, 0, 0,0},{113,3,2,-1, 0,0},//J\n{113,4,2,-1,-1,0},{331,4,0,-1, 0,0},{331,4,2, 0, 0,0},//L\n{222,7,2,-1, 0,1},{222,7,2,-2, 0,1},{222,7,2, 0, 0,1},//I\n{121,6,0, 1,-1,2},{112,6,0, 2,-1,2},{122,6,0, 1,-2,2},//O\n{323,6,0,-1,-1,2},{332,6,0,-2,-1,2},{322,6,0,-1,-2,2},//O",
|
||||
},
|
||||
{"Hypertap",
|
||||
"hypertap",
|
||||
"term",
|
||||
"快速震动手指,实现比长按更快速+灵活的高速单点移动",
|
||||
},
|
||||
{"TOP攻击表",
|
||||
"top attack",
|
||||
"term",
|
||||
"消1/2/3/4打0/1/2/4\nTspin攻击为消行数*2,如果符合mini条件则/2\n连击攻击:001122334445+\nb2b攻击+1(如果是T3则+2)\npc攻击+6(该部分攻击aoe直接打出到所有对手,不抵消缓冲槽中的攻击)",
|
||||
},
|
||||
{"Techmino攻击表",
|
||||
"tech attack",
|
||||
"term",
|
||||
"攻击系统:\n 普通消除:\n 消<4行打出[消行数-0.5]攻击\n 特殊消除:\n 如果是spin,打出[2*消行数]攻击,\n B2B攻击+[1/1/2/4/8(spin1~5)]\n B3B攻击在B2B基础上+消行数*0.5,+1额外抵挡\n mini减至25%\n 不是spin但是单次消>=4行,打出[消行数]攻击,\n B2B攻击+1\n B3B攻击+50%,+1额外抵挡\n 特殊消除会增加B2B点数,让之后的特殊消除获得B2B(B3B)增益(详细说明见下文)\n 半全消(<下方有剩余方块>的全消,如果是I消1行则必须不剩余玩家放置的方块):伤害+2,额外抵挡+2\n 全消:将上述伤害之和减半,再+8~20(本局内递增2),+2额外抵挡(注:本局消行数>4时会将B2B点数拉满)\n 连击:每次连击给予上述攻击[连击数*25%(如果只消一行就是15%)]的加成,12combo达到上限,连击>=3次时再额外加1攻击\n 根据上述规则计算后,向下取整,攻击打出",
|
||||
},
|
||||
{"C2序列",
|
||||
"c2 seq",
|
||||
"term",
|
||||
"七个块初始权重0\n全体乘2再加0~1的随机数,选数字最大的块出,然后将其权重除以3.5,循环",
|
||||
},
|
||||
{"C2踢墙",
|
||||
"c2 kick",
|
||||
"term",
|
||||
"左,右,下,左下,右下,左2,右2\n(任何方块的任何旋转都使用这个表)",
|
||||
},
|
||||
{"堆叠",
|
||||
"duidie stack",
|
||||
"term",
|
||||
"将方块无缝隙地堆起来",
|
||||
},
|
||||
{"双旋",
|
||||
"shuangxuan",
|
||||
"term",
|
||||
"指能够使用顺时针+逆时针两个旋转键的技术,原来要转三下的情况可以反向转一下就够,减少烦琐操作。\n同时双旋也是学习finesse的必要前提\n\n另见 三旋",
|
||||
},
|
||||
{"三旋",
|
||||
"sanxuan",
|
||||
"term",
|
||||
"指能够使用顺+逆时针+180度旋转三个旋转键的技术,任何方块放哪只需要旋转一次即可(spin不算)\n但由于只有部分游戏有180度旋转所以改操作并不通用,而且对速度提升的效果不如从单旋转双旋显著,不追求极限速度的玩家可不学",
|
||||
},
|
||||
{"干旱",
|
||||
"drought ganhan",
|
||||
"term",
|
||||
"指长时间不来i方块(长条),但在现代方块使用的bag7出块规则下干旱几乎不可能,平均7块就会有一个i,理论极限两个i最远中间隔12块",
|
||||
},
|
||||
{"MPH mode",
|
||||
"mph",
|
||||
"term",
|
||||
"一个游戏模式:\nMemoryless, Previewless, Holdless\n纯随机+无next+无hold,一个非常考验玩家反应速度的模式",
|
||||
},
|
||||
{"输入延迟",
|
||||
"input delay",
|
||||
"term",
|
||||
"用任何设备玩任何游戏时,所有的操作(按键盘,点鼠标等)都会晚一点点(很短,几毫秒到几十毫秒)到才达游戏,如果过长就会很影响游戏手感,作用效果类似于你拿qq远程控制打fps游戏\ntop、te等游戏比较明显\n这个延迟一般由硬件性能,硬件状态影响,通常来说不可设置,开启性能模式(或者关闭节能模式)可能会好一点",
|
||||
},
|
||||
{"Cold Clear",
|
||||
"cc coldclear",
|
||||
"term",
|
||||
"一个ai的名字(就跟alphaGo一样)\n本身是为ppt开发,故在本游戏中使用效果欠佳,版本也较旧",
|
||||
},
|
||||
{"ZZZbot",
|
||||
"zzzbot",
|
||||
"term",
|
||||
"一个ai的名字(就跟alphaGo一样)\n由研究群群友奏之章开发,在各游戏表现都很不错",
|
||||
},
|
||||
|
||||
{"研究群号",
|
||||
"yanjiu study",
|
||||
"other",
|
||||
"俄罗斯方块·[研究]群号112897780,“中国俄罗斯方块群”",
|
||||
},
|
||||
{"茶服",
|
||||
"chafu study",
|
||||
"other",
|
||||
"TO-S的添加方法、说明等关于茶服的一切",
|
||||
"http://139.199.75.237/tos",
|
||||
},
|
||||
{"Github仓库",
|
||||
"github",
|
||||
"other",
|
||||
"Techmino的github仓库地址,欢迎star",
|
||||
"http://github.com/26F-Studio/Techmino",
|
||||
},
|
||||
|
||||
{"SFX",
|
||||
"sfx",
|
||||
"english",
|
||||
"Sound Effects\n音效",
|
||||
},
|
||||
{"BGM",
|
||||
"bgm",
|
||||
"english",
|
||||
"Background Music\n背景音乐",
|
||||
},
|
||||
{"AFK",
|
||||
"afk",
|
||||
"english",
|
||||
"Away from keyboard\n一段时间不接触键盘,就是不玩一段时间,可以缓解手部疲劳,休息好之后马上破纪录也是可能的",
|
||||
},
|
||||
|
||||
{"吉备宏纯",
|
||||
"hebomai hbm",
|
||||
"name",
|
||||
"一流玩家(在最强大脑上以3:0击败模电)",
|
||||
},
|
||||
{"雨宫太阳",
|
||||
"amemiya taiyou yugong",
|
||||
"name",
|
||||
"一流玩家,曾获得PPT的swap模式冠军",
|
||||
},
|
||||
{"Ajanba",
|
||||
"ajanba ajb",
|
||||
"name",
|
||||
"一流玩家,得过jscup冠军",
|
||||
},
|
||||
{"Blink",
|
||||
"blink",
|
||||
"name",
|
||||
"一流玩家,很强",
|
||||
},
|
||||
{"Doremy",
|
||||
"doremy 123",
|
||||
"name",
|
||||
"一流玩家,雨宫说他是世界第二",
|
||||
},
|
||||
{"Firestorm",
|
||||
"firestorm fst",
|
||||
"name",
|
||||
"一流玩家,得过jscup冠军",
|
||||
},
|
||||
{"Furea",
|
||||
"furea fuleiya jk",
|
||||
"name",
|
||||
"一流玩家,ppt的40L WR保持者+ultra WR保持者",
|
||||
},
|
||||
{"Iljain",
|
||||
"iljain yijianlian",
|
||||
"name",
|
||||
"一流玩家,得过C2 rank1",
|
||||
},
|
||||
{"Jonas",
|
||||
"jonas",
|
||||
"name",
|
||||
"经典块一流玩家,曾经的经典块第一,CTWC4连冠",
|
||||
},
|
||||
{"Joseph",
|
||||
"joseph",
|
||||
"name",
|
||||
"经典块一流玩家,CTWC连冠,多项任天堂方块记录保持者",
|
||||
},
|
||||
{"Kazu",
|
||||
"kazu mdking",
|
||||
"name",
|
||||
"一流玩家,以熟练md转捐赠闻名",
|
||||
},
|
||||
{"Microblizz",
|
||||
"microblizz",
|
||||
"name",
|
||||
"一流玩家,曾经的世界40L WR",
|
||||
},
|
||||
{"Vince",
|
||||
"vincehd",
|
||||
"name",
|
||||
"一流玩家,现任世界最速保持者(无延迟方块)",
|
||||
},
|
||||
{"Wumbo",
|
||||
"wumbo wangbo",
|
||||
"name",
|
||||
"一流玩家,有名的爱在对战用开局c4w的世界级玩家(别的能力也很强,只是喜欢开局c4w而已,所以名声不太好)\n因为名字读音酷似王勃就得了个王勃的外号",
|
||||
},
|
||||
{"Yakine",
|
||||
"yakine heshui",
|
||||
"name",
|
||||
"一流玩家,有名的花式Tspin选手,实战压力不大的时候常常做出一些很神仙的高空捐赠,jstris的20TSD速度榜全球第三名并且没有使用定式(前两名都用了LST),故群友戏称yakine捐T如喝水",
|
||||
},
|
||||
|
||||
{"小Z",
|
||||
"z xiaoz",
|
||||
"name",
|
||||
"这个百科的名字!曾经是群里的答疑机器人,此词典数据库也就是沿用了机器人问答库~",
|
||||
},
|
||||
{"MrZ",
|
||||
"mrz zjiang ddd 026 626",
|
||||
"name",
|
||||
"【研究群】「T026」\n40行25.95秒, MPH40行57秒排世界第8(jstris),tetr.io段位U,top数据约40L50A TGM3(W)shirase金1300通关\n这个游戏的作者!",
|
||||
"https://space.bilibili.com/225238922",
|
||||
},
|
||||
|
||||
{"Farter",
|
||||
"farteryhr pi TTT 000",
|
||||
"name",
|
||||
"【研究群】「TTTT」\n40行26.193秒\nCN块圈元老之一,《T-ex》和《屁块》的作者",
|
||||
"https://space.bilibili.com/132966",
|
||||
},
|
||||
{"Sniraite",
|
||||
"sniraite shege 11renpc 024",
|
||||
"name",
|
||||
"【研究群】「T024」\n40行sub23\n国内一流方块玩家,应该是大陆最速",
|
||||
"https://space.bilibili.com/561589",
|
||||
},
|
||||
{"Teatube",
|
||||
"teatube ttb chaguan chanaiye sifangchaye 022",
|
||||
"name",
|
||||
"【研究群】「T022」\n40行33秒 top数据高峰约50L70A\n研究群管理,探索群群主,茶服服主,人形方块百科史书,现中文方块维基主催\n自2011年正式加入CN方块社区以来,以探索方块有趣的思想作为主动力,茶茶今天也在茶馆里当着茶房管理员——\n\n其他名称:TTB,永远旋转的炸弹,茶乃叶,四方茶叶\n明明茶管是蓝孩子却被群友叫茶娘…怎么想都很奇怪啊!嘛大家喜欢的话就随便啦——",
|
||||
"https://space.bilibili.com/834903",
|
||||
},
|
||||
{"xb",
|
||||
"xb 043",
|
||||
"name",
|
||||
"【研究群】「T043」\n研究群赛事主要主办人",
|
||||
},
|
||||
{"Flyz",
|
||||
"flyz fxg 114",
|
||||
"name",
|
||||
"【研究群】「T114」\n高技术力",
|
||||
"https://space.bilibili.com/787096",
|
||||
},
|
||||
{"gggf",
|
||||
"gggf kissne 127",
|
||||
"name",
|
||||
"【研究群】「T127」\n40行22.831秒(手机27.218),MPH40行56秒,tetr.io段位U,top数据约60L85A\n20G规则国内一流玩家,拿到了TGM3几乎全部的最终成就(全世界都没几个),Tech中20G系列模式Final和PH用PC/手机都通关,Touhoumino的L难度一命无炸通\n其他名称:127 kissne 小柒\n还是车车人,几个正作成绩:永EX NM 1B FS 风L NM",
|
||||
"https://space.bilibili.com/287769888",
|
||||
},
|
||||
{"蕴空之灵",
|
||||
"ykzl yunkongzhiling niao bird 196",
|
||||
"name",
|
||||
"【研究群】「T196」\n40行33秒,top数据约50L90A\nvup,效率之光,不能吃辣\n常用定式:信天翁 tki3 开局pc",
|
||||
"https://space.bilibili.com/9964553",
|
||||
},
|
||||
{"安樱奈莯",
|
||||
"naki anyingnaimu youling gui 210",
|
||||
"name",
|
||||
"【研究群】「T210」\nvup,喜欢打块的幽灵,techmino配音之一",
|
||||
"https://space.bilibili.com/33212649",
|
||||
},
|
||||
{"奏之章",
|
||||
"zzz zouzhizhang 274",
|
||||
"name",
|
||||
"【研究群】「T274」\nzzzbot的作者,CN块圈人工智能技术发展重要人物之一",
|
||||
"https://space.bilibili.com/311039",
|
||||
},
|
||||
{"吴淞昊",
|
||||
"electric modian zhunbei 283",
|
||||
"name",
|
||||
"【研究群】「T283」\n国内一流高端隐形方块玩家,上过最强大脑",
|
||||
"https://space.bilibili.com/17583394",
|
||||
},
|
||||
{"他天一",
|
||||
"tty tatianyi 512",
|
||||
"name",
|
||||
"【研究群】「T512」\nzzz大爷的c2AI贡献者之一,打块水平国内前列",
|
||||
"https://space.bilibili.com/3895759",
|
||||
},
|
||||
{"Mars608",
|
||||
"mars huoxingge 608",
|
||||
"name",
|
||||
"【研究群】「T608」\n拿过ns ppt国区榜首",
|
||||
"https://space.bilibili.com/1471400",
|
||||
},
|
||||
{"Mifu",
|
||||
"mifu swl nanmaomao 616",
|
||||
"name",
|
||||
"【研究群】「T616」\n40行32秒\nvup,miya的哥哥(方块教练)",
|
||||
"https://space.bilibili.com/109356367",
|
||||
},
|
||||
{"ZXC",
|
||||
"zxc thtsod flag 655",
|
||||
"name",
|
||||
"【研究群】「T655」\n高技术力",
|
||||
"https://space.bilibili.com/4610502",
|
||||
},
|
||||
{"Tinko",
|
||||
"tinko 665",
|
||||
"name",
|
||||
"【研究群】「T665」\n高技术力",
|
||||
"https://tinko.moe",
|
||||
},
|
||||
{"T722",
|
||||
"722",
|
||||
"name",
|
||||
"【研究群】「T722」\n音乐人",
|
||||
"https://space.bilibili.com/30452985",
|
||||
},
|
||||
{"Diao",
|
||||
"diao mengxin 872",
|
||||
"name",
|
||||
"【研究群】「T872」\n(但这人老故意空着群名片啥都不写),一流对战选手,得过jscup亚军,ttt冠军,HDO XII冠军\n曾用名一大堆,nmdtql/diao/nanami什么的,还有一大堆高仿名\n天天自称萌新,小心他放海控效等速吊打你",
|
||||
"https://space.bilibili.com/471341780",
|
||||
},
|
||||
{"思竣",
|
||||
"sijun 942",
|
||||
"name",
|
||||
"【研究群】「T942」\n40行47.2秒,29TSD,全清挑战-疯狂25PC\n算力极强的思维型选手,不比速度的许多项目都是世界水平",
|
||||
"https://space.bilibili.com/403250559",
|
||||
},
|
||||
{"子心",
|
||||
"koishi zixin 1934",
|
||||
"name",
|
||||
"【研究群】「T1934」\nvup,T99国内一流战术型玩家",
|
||||
"https://space.bilibili.com/147529",
|
||||
},
|
||||
{"ditoly",
|
||||
"ditoly icrem kuimei jk 3055",
|
||||
"name",
|
||||
"【研究群】「T3055」\n被清华劝退现于北大的打块天才jk\n(好像也被北大劝退了?不知道)",
|
||||
"https://space.bilibili.com/13014410",
|
||||
},
|
||||
{"蓝绿",
|
||||
"lanlv gompyn 3182",
|
||||
"name",
|
||||
"【研究群】「T3182」\n高技术力,喜欢催更",
|
||||
},
|
||||
{"喵田弥夜",
|
||||
"miya miaotianmiye mao 7023",
|
||||
"name",
|
||||
"【研究群】「T7023」\nvup,喜欢打块的猫猫(Z酱单推),techmino配音之一",
|
||||
"https://space.bilibili.com/846180",
|
||||
},
|
||||
|
||||
{"Windkey",
|
||||
"wdk windkey fengyaoshi",
|
||||
"name",
|
||||
"曾经是群友,对战基本只用开局c4w导致风评很差,想学c4w可以看他",
|
||||
"https://space.bilibili.com/25576872",
|
||||
},
|
||||
}
|
||||
727
LANG/lang_en.lua
727
LANG/lang_en.lua
@@ -1,727 +0,0 @@
|
||||
return{
|
||||
back="Back",
|
||||
anykey="Press any button",
|
||||
newVersion="Thanks for updating! Check out the updates below.",
|
||||
httpTimeout="Network connection timed out",
|
||||
marking="Game Author: MrZ_26\nIllegal recording if you can see this\nAny explanation is invalid",
|
||||
holdR="Keep holding to retry",
|
||||
|
||||
atkModeName={"Random","Badges","K.O.s","Attackers"},
|
||||
royale_remain="$1 Players Remaining",
|
||||
cmb={nil,"1 Combo","2 Combo","3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!!","15 Combo!!","16 Combo!!","17 Combo!!!","18 Combo!!!","19 Combo!!!","MEGACMB"},
|
||||
spin="-Spin ",
|
||||
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash"},
|
||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||
PC="Perfect Clear",HPC="Clear",
|
||||
hold="HOLD",next="NEXT",
|
||||
|
||||
stage="Stage $1",
|
||||
great="Great!",
|
||||
awesome="Awesome!",
|
||||
almost="Almost!",
|
||||
continue="Keep going!",
|
||||
maxspeed="Max speed!",
|
||||
speedup="Speed up!",
|
||||
missionFailed="Wrong Clear",
|
||||
|
||||
speedLV="speed level",
|
||||
line="Lines",atk="Attack",eff="Efficiency",
|
||||
rpm="RPM",tsd="TSD",
|
||||
grade="Grade",techrash="Techrash",
|
||||
wave="Wave",nextWave="Next",
|
||||
combo="Combo",maxcmb="Max Combo",
|
||||
pc="Perfect Clear",ko="KO",
|
||||
|
||||
win="You Win!",
|
||||
finish="Finish",
|
||||
gameover="Game Over",
|
||||
pause="Pause",
|
||||
pauseCount="Pauses",
|
||||
finesse_ap="All Perfect",
|
||||
finesse_fc="Full Combo",
|
||||
|
||||
page="Page:",
|
||||
|
||||
ai_fixed="The AI is incompatible with fixed sequences.",
|
||||
ai_prebag="The AI is incompatible with custom sequences.",
|
||||
ai_mission="The AI is incompatible with custom missions.",
|
||||
settingSaved="Settings Saved",
|
||||
settingSavingError="Failed to save settings:",
|
||||
keyMapSaved="Key settings saved",
|
||||
keyMapSavingError="Failed to save key settings:",
|
||||
VKSaved="Virtual keys saved",
|
||||
VKSavingError="Failed to save virtual key configuration:",
|
||||
statSavingError="Failed to save statistics:",
|
||||
unlockSavingError="Failed to save unlocked content:",
|
||||
recSavingError="Failed to save record:",
|
||||
switchSpawnSFX="Switch on spawn SFX to play",
|
||||
ranks={"D","C","B","A","S"},
|
||||
|
||||
needRestart="Effective after restart",
|
||||
|
||||
exportSuccess="Export successfully",
|
||||
importSuccess="Import successfully",
|
||||
dataCorrupted="Data corrupted",
|
||||
|
||||
VKTchW="Touch Weight",
|
||||
VKOrgW="Origin Weight",
|
||||
VKCurW="Cur. Pos. Weight",
|
||||
|
||||
noScore="No Scores Yet",
|
||||
highScore="Personal Bests",
|
||||
newRecord="New Record!",
|
||||
|
||||
getNoticeFail="Couldn't get announcements",
|
||||
getVersionFail="Unable to detect a new version",
|
||||
versionIsNew="You are now on the latest version.",
|
||||
versionIsOld="Version $1 is available now!",
|
||||
|
||||
netErrorCode="Network error code",
|
||||
jsonError="Json error",
|
||||
|
||||
noUsername="Please enter your username",
|
||||
wrongCode="Please enter invitation code",
|
||||
wrongEmail="Wrong email address",
|
||||
noPassword="Please enter your password",
|
||||
diffPassword="Passwords don't match",
|
||||
registerSuccessed="Registration successed!",
|
||||
registerFailed="Registration failed",
|
||||
|
||||
errorMsg="An error has occurred and Techmino needs to restart.\nError info has been created, and you can send it to the author.",
|
||||
|
||||
acts={
|
||||
"Move Left:","Move Right:",
|
||||
"Rotate Right:","Rotate Left:","Rotate 180°:",
|
||||
"Hard Drop:","Soft Drop:","Hold:","Function:","Restart:",
|
||||
"Instant Left:","Instant Right:","Sonic Drop:","Down 1:","Down 4:","Down 10:",
|
||||
"Left Drop:","Right Drop:","Left Zangi:","Right Zangi:",
|
||||
},
|
||||
pauseStat={
|
||||
"Time:",
|
||||
"Key/Rot./Hold:",
|
||||
"Piece:",
|
||||
"Row/Dig:",
|
||||
"Attack/DigAtk:",
|
||||
"Received:",
|
||||
"Clears:",
|
||||
"Spins:",
|
||||
"B2B/B3B/PC/HPC:",
|
||||
"Finesse:",
|
||||
},
|
||||
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
||||
radarData={
|
||||
"D'PM",
|
||||
"ADPM",
|
||||
"APM",
|
||||
"SPM",
|
||||
"L'PM",
|
||||
"DPM",
|
||||
},
|
||||
stat={
|
||||
"Times Launched:",
|
||||
"Play Count:",
|
||||
"Play Time:",
|
||||
"Key/Rot./Hold:",
|
||||
"Block/Row/Atk.:",
|
||||
"Recv./Res./Asc.:",
|
||||
"Dig/Dig Atk.:",
|
||||
"Eff./Dig Eff.:",
|
||||
"B2B/B3B:",
|
||||
"PC/HPC:",
|
||||
"FnsErrs./FnsRate:",
|
||||
},
|
||||
help={
|
||||
"Now you can play this - you probably do not need \"help\"?",
|
||||
"This is just an ordinary block game, not a certain one.",
|
||||
"It plays like TO/C2/KOS/TGM3 and others.",
|
||||
"",
|
||||
"You can send bug reports or suggestions to the author's testing group or email ~",
|
||||
"This is a free download available only through discord.gg/f9pUvkh",
|
||||
"The game downloaded from other sources may contain viruses,",
|
||||
"and only vibration & networking permissions are needed for mobile versions!",
|
||||
"The author is not responsible for any loss of data from modifying the game.",
|
||||
},
|
||||
staff={
|
||||
"Author: MrZ E-mail: 1046101471@qq.com",
|
||||
"Powered by LOVE2D",
|
||||
"",
|
||||
"Program: MrZ, [T9972, FinnTenzor]",
|
||||
"Art: MrZ, [Gnyar, T0722]",
|
||||
"Music: MrZ, [T0722]",
|
||||
"Voice & Sound: MrZ, Miya Performance: 模电, HBM",
|
||||
"Test: 思竣 Net: 渣渣120",
|
||||
"English: User670, MattMayuga",
|
||||
"French: Mizu Spanish: Mr.Faq",
|
||||
"",
|
||||
"Special Thanks:",
|
||||
"Flyz, Farter, 蕴空之灵,",
|
||||
"Teatube, [All test staff]",
|
||||
},
|
||||
used=[[
|
||||
Tools used:
|
||||
Beepbox
|
||||
GFIE
|
||||
Goldwave
|
||||
Libs used:
|
||||
Cold_Clear [MinusKelvin]
|
||||
json.lua [rxi]
|
||||
profile.lua [itraykov]
|
||||
simple-love-lights [dylhunn]
|
||||
]],
|
||||
support="Support author",
|
||||
group="Official QQ Group (if not hacked): 1127702001",
|
||||
WidgetText={
|
||||
main={
|
||||
offline="Single",
|
||||
online="Multi",
|
||||
custom="Custom",
|
||||
stat="Statistics",
|
||||
setting="Settings",
|
||||
qplay="Q. Play",
|
||||
lang="言/A",
|
||||
help="Help",
|
||||
quit="Exit",
|
||||
music="Music Room",
|
||||
sound="SE Room",
|
||||
minigame="Mini Games",
|
||||
},
|
||||
mode={
|
||||
start="Start",
|
||||
},
|
||||
play={
|
||||
pause="Pause",
|
||||
},
|
||||
pause={
|
||||
setting="Settings (S)",
|
||||
replay="Replay (P)",
|
||||
resume="Resume (esc)",
|
||||
restart="Retry (R)",
|
||||
quit="Quit (Q)",
|
||||
},
|
||||
setting_game={
|
||||
title="Game Settings",
|
||||
graphic="←Video",
|
||||
sound="Sound→",
|
||||
|
||||
ctrl="Control Settings",
|
||||
key="Key Mappings",
|
||||
touch="Touch Settings",
|
||||
reTime="Start Delay",
|
||||
maxNext="Next Queue Length",
|
||||
layout="Layout",
|
||||
autoPause="Pause when focus is lost",
|
||||
swap="Key Combination (Change Atk. Mode)",
|
||||
fine="Finesse Error Sound",
|
||||
appLock="App Lock (Password: 626)",
|
||||
calc="App Lock",
|
||||
},
|
||||
setting_video={
|
||||
title="Video Settings",
|
||||
sound="←Sound",
|
||||
game="Game→",
|
||||
|
||||
block="Draw Block",
|
||||
ghost="Ghost",
|
||||
center="Center",
|
||||
|
||||
smooth="Smooth Drop",
|
||||
grid="Grid",
|
||||
bagLine="Bag Line",
|
||||
|
||||
lockFX="Lock FX Level",
|
||||
dropFX="Drop FX Level",
|
||||
moveFX="Move FX Level",
|
||||
clearFX="Clear FX Level",
|
||||
shakeFX="Field Sway Level",
|
||||
atkFX="Atk. FX Level",
|
||||
frame="Render Frame Rate",
|
||||
|
||||
text="Action Text",
|
||||
score="Score Pop-up",
|
||||
warn="Danger Alert",
|
||||
highCam="Birds-eye View",
|
||||
nextPos="Next Preview",
|
||||
fullscreen="Full Screen",
|
||||
bg="Background",
|
||||
power="Power Info",
|
||||
},
|
||||
setting_sound={
|
||||
title="Sound Settings",
|
||||
|
||||
game="←Game",
|
||||
graphic="Video→",
|
||||
|
||||
sfx="SFX",
|
||||
stereo="Stereo",
|
||||
spawn="Spawning",
|
||||
bgm="BGM",
|
||||
vib="Vibration",
|
||||
voc="Voice",
|
||||
cv="Voice Pack",
|
||||
apply="Apply",
|
||||
},
|
||||
setting_control={
|
||||
title="Control Settings",
|
||||
preview="Preview",
|
||||
|
||||
das="DAS",arr="ARR",
|
||||
sddas="Soft Drop DAS",sdarr="Soft Drop ARR",
|
||||
ihs="Initial Hold",
|
||||
irs="Initial Rotation",
|
||||
ims="Initial Movement",
|
||||
reset="Reset",
|
||||
},
|
||||
setting_key={
|
||||
keyboard="Keyboard",
|
||||
joystick="Controller",
|
||||
help="Arrow keys: select/change slot, Enter/Space: Change, Esc: Go back",
|
||||
},
|
||||
setting_skin={
|
||||
title="Layout Settings",
|
||||
|
||||
prev="←",next="→",
|
||||
prev1="↑",next1="↓",spin1="R",
|
||||
prev2="↑",next2="↓",spin2="R",
|
||||
prev3="↑",next3="↓",spin3="R",
|
||||
prev4="↑",next4="↓",spin4="R",
|
||||
prev5="↑",next5="↓",spin5="R",
|
||||
prev6="↑",next6="↓",spin6="R",
|
||||
prev7="↑",next7="↓",spin7="R",
|
||||
skinR="Reset Color",
|
||||
faceR="Reset Dir.",
|
||||
},
|
||||
setting_touch={
|
||||
default="Default",
|
||||
snap="Snap",
|
||||
option="Options",
|
||||
size="Size",
|
||||
},
|
||||
setting_touchSwitch={
|
||||
b1= "Move Left:", b2="Move Right:", b3="Rotate Right:", b4="Rotate Left:",
|
||||
b5= "Rotate 180°:", b6="Hard Drop:", b7="Soft Drop:", b8="Hold:",
|
||||
b9= "Function:", b10="Restart Game:", b11="Instant Left:",b12="Instant Right:",
|
||||
b13="Sonic Drop:", b14="Down 1:", b15="Down 4:", b16="Down 10:",
|
||||
b17="Left Drop:", b18="Right Drop:", b19="Left Zangi:", b20="Right Zangi:",
|
||||
norm="Normal",
|
||||
pro="Professional",
|
||||
hide="Show Virtual Keys",
|
||||
track="Auto Track",
|
||||
sfx="SFX",
|
||||
vib="VIB",
|
||||
icon="Icon",
|
||||
tkset="Track Settings",
|
||||
alpha="Alpha",
|
||||
},
|
||||
setting_trackSetting={
|
||||
VKDodge="Auto Dodge",
|
||||
},
|
||||
customGame={
|
||||
title="Custom Game",
|
||||
subTitle="Basic",
|
||||
defSeq="Default Seq.",
|
||||
noMsn="No missions",
|
||||
|
||||
drop="Drop Delay",
|
||||
lock="Lock Delay",
|
||||
wait="Entry Delay",
|
||||
fall="Line Delay",
|
||||
|
||||
bg="Background",
|
||||
bgm="Music",
|
||||
|
||||
copy="Copy Field+Seq+Misn",
|
||||
paste="Paste Field+Seq+Misn",
|
||||
clear="Start-Clear",
|
||||
puzzle="Start-Puzzle",
|
||||
|
||||
advance="More (A)",
|
||||
field="Edit Field (F)",
|
||||
sequence="Edit Sequence (S)",
|
||||
mission="Edit Mission (M)",
|
||||
},
|
||||
custom_advance={
|
||||
title="Custom Game",
|
||||
subTitle="Advance",
|
||||
|
||||
next="Next",hold="Hold",oncehold="Hold Once",
|
||||
block="Draw Block",
|
||||
ghost="Ghost",
|
||||
center="Center",
|
||||
bagLine="Bag Line",
|
||||
highCam="Birds-eye View",
|
||||
nextPos="Next Preview",
|
||||
bone="Bone Block",
|
||||
|
||||
mindas="Min. DAS",
|
||||
minarr="Min. ARR",
|
||||
minsdarr="Min. SDARR",
|
||||
noTele="No Teleportation",
|
||||
ospin="O-Spin",
|
||||
target="Target",
|
||||
visible="Visibility",
|
||||
freshLimit="Lock Reset Limit",
|
||||
easyFresh="Normal Lock Reset",
|
||||
fineKill="100% Finesse",
|
||||
opponent="Opponent",
|
||||
life="Lives",
|
||||
pushSpeed="Garbage Speed",
|
||||
},
|
||||
custom_field={
|
||||
title="Custom Game",
|
||||
subTitle="Field",
|
||||
|
||||
b17="[ ]",
|
||||
any="Erase",
|
||||
space="×",
|
||||
|
||||
pushLine="Add Line(K)",
|
||||
delLine="Del Line(L)",
|
||||
|
||||
copy="Copy",
|
||||
paste="Paste",
|
||||
clear="Clear",
|
||||
demo="Don't Show ×",
|
||||
|
||||
newPage="New Page(N)",
|
||||
delPage="Del Page(M)",
|
||||
prevPage="Prev Page",
|
||||
nextPage="Next Page",
|
||||
},
|
||||
custom_sequence={
|
||||
title="Custom Game",
|
||||
subTitle="Sequence",
|
||||
|
||||
sequence="Sequence",
|
||||
|
||||
Z="Z",S="S",J="J",L="L",T="T",O="O",I="I",
|
||||
Z5="Z5",S5="S5",P="P",Q="Q",F="F",E="E",T5="T5",U="U",
|
||||
V="V",W="W",X="X",J5="J5",L5="L5",R="R",Y="Y",N="N",H="H",I5="I5",
|
||||
left="←",
|
||||
right="→",
|
||||
ten="→→",
|
||||
backsp="<X",
|
||||
reset="R",
|
||||
copy="Copy",
|
||||
paste="Paste",
|
||||
},
|
||||
custom_mission={
|
||||
title="Custom Game",
|
||||
subTitle="Mission",
|
||||
|
||||
_1="1",_2="2",_3="3",_4="4",
|
||||
any1="any1",any2="any2",any3="any3",any4="any4",
|
||||
PC="PC",
|
||||
Z1="Z1",S1="S1",J1="J1",L1="L1",T1="T1",O1="O1",I1="I1",
|
||||
Z2="Z2",S2="S2",J2="J2",L2="L2",T2="T2",O2="O2",I2="I2",
|
||||
Z3="Z3",S3="S3",J3="J3",L3="L3",T3="T3",O3="O3",I3="I3",
|
||||
O4="O4",I4="I4",
|
||||
left="←",right="→",
|
||||
ten="→→",
|
||||
backsp="<X",
|
||||
reset="R",
|
||||
copy="Copy",
|
||||
paste="Paste",
|
||||
mission="Force mission",
|
||||
},
|
||||
help={
|
||||
dict="little Z",
|
||||
staff="Staff",
|
||||
his="History",
|
||||
qq="Author's qq",
|
||||
},
|
||||
dict={
|
||||
title="TetroDictionary",
|
||||
keyboard="Keyboard",
|
||||
link="Open URL",
|
||||
up="↑",
|
||||
down="↓",
|
||||
},
|
||||
stat={
|
||||
path="Open Data Folder",
|
||||
save="Data Management",
|
||||
},
|
||||
music={
|
||||
title="Music Room",
|
||||
arrow="→",
|
||||
now="Now Playing:",
|
||||
|
||||
bgm="BGM",
|
||||
up="↑",
|
||||
play="Play",
|
||||
down="↓",
|
||||
},
|
||||
login={
|
||||
title="Log in / Sign up",
|
||||
username="Username",
|
||||
email="Email address",
|
||||
code="Invitation Code",
|
||||
password="Password",
|
||||
password2="Reenter password",
|
||||
},
|
||||
account={
|
||||
title="Account",
|
||||
},
|
||||
sound={
|
||||
title="SE Room",
|
||||
sfx="SFX",
|
||||
voc="VOICE",
|
||||
|
||||
move="Move",
|
||||
lock="Lock",
|
||||
drop="Drop",
|
||||
fall="Fall",
|
||||
rotate="Rotate",
|
||||
rotatekick="Rotatekick",
|
||||
hold="Hold",
|
||||
prerotate="Prerotate",
|
||||
prehold="Prehold",
|
||||
_pc="PC",
|
||||
|
||||
clear1="clear 1",
|
||||
clear2="clear 2",
|
||||
clear3="clear 3",
|
||||
clear4="clear 4",
|
||||
spin0="spin 0",
|
||||
spin1="spin 1",
|
||||
spin2="spin 2",
|
||||
spin3="spin 3",
|
||||
|
||||
_1="Single",
|
||||
_2="Double",
|
||||
_3="Triple",
|
||||
_4="Techrash",
|
||||
z0="Z-spin",
|
||||
z1="Z-spin 1",
|
||||
z2="Z-spin 2",
|
||||
z3="Z-spin 3",
|
||||
s0="S-spin",
|
||||
s1="S-spin 1",
|
||||
s2="S-spin 2",
|
||||
s3="S-spin 3",
|
||||
|
||||
j0="J-spin",
|
||||
j1="J-spin 1",
|
||||
j2="J-spin 2",
|
||||
j3="J-spin 3",
|
||||
l0="L-spin",
|
||||
l1="L-spin 1",
|
||||
l2="L-spin 2",
|
||||
l3="L-spin 3",
|
||||
|
||||
t0="T-spin",
|
||||
t1="T-spin 1",
|
||||
t2="T-spin 2",
|
||||
t3="T-spin 3",
|
||||
o0="O-spin",
|
||||
o1="O-spin 1",
|
||||
o2="O-spin 2",
|
||||
o3="O-spin 3",
|
||||
|
||||
i0="I-spin",
|
||||
i1="I-spin 1",
|
||||
i2="I-spin 2",
|
||||
i3="I-spin 3",
|
||||
|
||||
mini="Mini",
|
||||
b2b="B2B",
|
||||
b3b="B3B",
|
||||
pc="PC",
|
||||
},
|
||||
minigame={
|
||||
p15="15 Puzzle",
|
||||
schulte_G="Schulte Grid",
|
||||
pong="Pong",
|
||||
},
|
||||
p15={
|
||||
reset="Shuffle",
|
||||
color="Color",
|
||||
blind="Blind",
|
||||
slide="Slide",
|
||||
pathVis="Show Path",
|
||||
revKB="Reverse",
|
||||
},
|
||||
schulte_G={
|
||||
reset="Reset",
|
||||
rank="Size",
|
||||
blind="Blind",
|
||||
disappear="Hide",
|
||||
tapFX="tap FX",
|
||||
},
|
||||
pong={
|
||||
reset="Restart",
|
||||
},
|
||||
AtoZ={
|
||||
level="Level",
|
||||
reset="Reset",
|
||||
},
|
||||
savedata={
|
||||
exportUnlock="Export progress",
|
||||
exportData="Export statistics",
|
||||
exportSetting="Export settings",
|
||||
exportVK="Export virtualkey layout",
|
||||
|
||||
importUnlock="Import progress",
|
||||
importData="Import statistics",
|
||||
importSetting="Import settings",
|
||||
importVK="Import virtualkey layout",
|
||||
|
||||
reset="RESET?",
|
||||
resetUnlock="Reset ranks",
|
||||
resetData="Reset data",
|
||||
resetALL="Reset all",
|
||||
},
|
||||
},
|
||||
modes={
|
||||
["sprint_10"]= {"Sprint", "10L", "Clear 10 lines!"},
|
||||
["sprint_20"]= {"Sprint", "20L", "Clear 20 lines!"},
|
||||
["sprint_40"]= {"Sprint", "40L", "Clear 40 lines!"},
|
||||
["dig_10"]= {"Dig", "10L", "Dig 10 lines"},
|
||||
["dig_40"]= {"Dig", "40L", "Dig 40 lines"},
|
||||
["dig_100"]= {"Dig", "100L", "Dig 100 lines"},
|
||||
["dig_400"]= {"Dig", "400L", "Dig 400 lines"},
|
||||
["dig_1000"]= {"Dig", "1000L", "Dig 1000 lines"},
|
||||
["sprint_100"]= {"Sprint", "100L", "Clear 100 lines!"},
|
||||
["sprint_400"]= {"Sprint", "400L", "Clear 400 lines!"},
|
||||
["sprint_1000"]= {"Sprint", "1000L", "Clear 1000 lines!"},
|
||||
["drought_normal"]= {"Drought", "100L", "No I piece!"},
|
||||
["drought_lunatic"]= {"Drought", "100L", "WTF"},
|
||||
["marathon_normal"]= {"Marathon", "NORMAL", "200-line marathon with accelerating speed."},
|
||||
["marathon_hard"]= {"Marathon", "HARD", "200-line high-speed marathon."},
|
||||
["marathon_ultimate"]= {"Marathon", "Ultimate", "Regular singles without combo only"},
|
||||
["solo_1"]= {"Battle", "EASY", "Defeat the AI!"},
|
||||
["solo_2"]= {"Battle", "NORMAL", "Defeat the AI!"},
|
||||
["solo_3"]= {"Battle", "HARD", "Defeat the AI!"},
|
||||
["solo_4"]= {"Battle", "LUNATIC", "Defeat the AI!"},
|
||||
["solo_5"]= {"Battle", "ULTIMATE", "Defeat the AI!"},
|
||||
["techmino49_easy"]= {"Tech 49", "EASY", "49-player battle.\nThe last one standing wins."},
|
||||
["techmino49_hard"]= {"Tech 49", "HARD", "49-player battle.\nThe last one standing wins."},
|
||||
["techmino49_ultimate"]={"Tech 49", "ULTIMATE", "49-player battle.\nThe last one standing wins."},
|
||||
["techmino99_easy"]= {"Tech 99", "EASY", "99-player battle.\nThe last one standing wins."},
|
||||
["techmino99_hard"]= {"Tech 99", "HARD", "99-player battle.\nThe last one standing wins."},
|
||||
["techmino99_ultimate"]={"Tech 99", "ULTIMATE", "99-player battle.\nThe last one standing wins."},
|
||||
["round_1"]= {"Turn-Based", "EASY", "Chess mode"},
|
||||
["round_2"]= {"Turn-Based", "NORMAL", "Chess mode"},
|
||||
["round_3"]= {"Turn-Based", "HARD", "Chess mode"},
|
||||
["round_4"]= {"Turn-Based", "LUNATIC", "Chess mode"},
|
||||
["round_5"]= {"Turn-Based", "ULTIMATE", "Chess mode"},
|
||||
["master_beginner"]= {"Master", "LUNATIC", "For 20G beginners."},
|
||||
["master_advance"]= {"Master", "ULTIMATE", "Professional 20G challenge!"},
|
||||
["master_final"]= {"Master", "FINAL", "20G: Unreachable end point!"},
|
||||
["master_phantasm"]= {"Master", "PHANTASM", "20G: ???"},
|
||||
["GM"]= {"GrandMaster", "GM", "To be a Grand Master, take \nthis challenge."},
|
||||
["blind_easy"]= {"Blind", "HALF", "For novice players."},
|
||||
["blind_normal"]= {"Blind", "ALL", "For intermediate players."},
|
||||
["blind_hard"]= {"Blind", "SUDDEN", "For experienced players."},
|
||||
["blind_lunatic"]= {"Blind", "SUDDEN+", "For professionals."},
|
||||
["blind_ultimate"]= {"Blind", "?", "Are you ready?"},
|
||||
["blind_wtf"]= {"Blind", "WTF", "You're not ready."},
|
||||
["classic_fast"]= {"Classic", "CTWC", "High-speed classic mode."},
|
||||
["survivor_easy"]= {"Survivor", "EASY", "How long can you survive?"},
|
||||
["survivor_normal"]= {"Survivor", "NORMAL", "How long can you survive?"},
|
||||
["survivor_hard"]= {"Survivor", "HARD", "How long can you survive?"},
|
||||
["survivor_lunatic"]= {"Survivor", "LUNATIC", "How long can you survive?"},
|
||||
["survivor_ultimate"]= {"Survivor", "ULTIMATE", "How long can you survive?"},
|
||||
["attacker_hard"]= {"Attacker", "HARD", "Offensive practice!"},
|
||||
["attacker_ultimate"]= {"Attacker", "ULTIMATE", "Offensive practice!"},
|
||||
["defender_normal"]= {"Defender", "NORMAL", "Defensive practice!"},
|
||||
["defender_lunatic"]= {"Defender", "LUNATIC", "Defensive practice!"},
|
||||
["dig_hard"]= {"Driller", "HARD", "Digging practice!"},
|
||||
["dig_ultimate"]= {"Driller", "ULTIMATE", "Digging practice!"},
|
||||
["bigbang"]= {"Big Bang", "EASY", "All-spin tutorial!\n[Under construction]"},
|
||||
["c4wtrain_normal"]= {"C4W Training", "NORMAL", "Infinite combos."},
|
||||
["c4wtrain_lunatic"]= {"C4W Training", "LUNATIC", "Infinite combos."},
|
||||
["pctrain_normal"]= {"PC Training", "NORMAL", "Simple Perfect Clear mode."},
|
||||
["pctrain_lunatic"]= {"PC Training", "LUNATIC", "Simple Perfect Clear mode."},
|
||||
["pcchallenge_normal"]= {"PC Challenge", "NORMAL", "Get PCs within 100 lines!"},
|
||||
["pcchallenge_hard"]= {"PC Challenge", "HARD", "Get PCs within 100 lines!"},
|
||||
["pcchallenge_lunatic"]={"PC Challenge", "LUNATIC", "Get PCs within 100 lines!"},
|
||||
["tech_normal"]= {"Tech", "NORMAL", "Keep the B2B chain!"},
|
||||
["tech_normal2"]= {"Tech", "NORMAL+", "Spin & PC only"},
|
||||
["tech_hard"]= {"Tech", "HARD", "Keep the B2B chain!"},
|
||||
["tech_hard2"]= {"Tech", "HARD+", "Spin & PC only"},
|
||||
["tech_lunatic"]= {"Tech", "LUNATIC", "Keep the B2B chain!"},
|
||||
["tech_lunatic2"]= {"Tech", "LUNATIC+", "Spin & PC only"},
|
||||
["tech_finesse"]= {"Tech", "FINESSE", "No finesse faults!"},
|
||||
["tech_finesse2"]= {"Tech", "FINESSE+", "No normal clears, no finesse faults!"},
|
||||
["tsd_easy"]= {"TSD Challenge", "EASY", "T-spin-doubles only!"},
|
||||
["tsd_hard"]= {"TSD Challenge", "HARD", "T-spin-doubles only!"},
|
||||
["tsd_ultimate"]= {"TSD Challenge", "ULTIMATE", "T-spin-doubles only!"},
|
||||
["zen"]= {"Zen", "200", "200 lines without a time limit."},
|
||||
["ultra"]= {"Ultra", "EXTRA", "Get the highest score within 2 min."},
|
||||
["infinite"]= {"Infinite", "", "Sandbox mode."},
|
||||
["infinite_dig"]= {"Infinite: Dig", "", "Dig, dig, dig."},
|
||||
["custom_clear"]= {"Custom", "NORMAL", "Draw something then clear it!!"},
|
||||
["custom_puzzle"]= {"Custom", "PUZZLE", "Draw something then stack it!!"},
|
||||
["sprintFix"]= {"Sprint", "NO LEFT/RIGHT","It's possible."},
|
||||
["sprintLock"]= {"Sprint", "NO ROTATIONS", "It's impossible."},
|
||||
["sprintPenta"]= {"Sprint", "PENTOMINO", "Clear 40 lines with 18 pentominoes."},
|
||||
["sprintMPH"]= {"Sprint", "MPH", "Memoriyless\nPreviewless\nHoldless"},
|
||||
},
|
||||
getTip={refuseCopy=true,
|
||||
'Free block game with Battle Royale mode!',
|
||||
'Have you noticed what "rotating" does do to the block?',
|
||||
":pog:",
|
||||
"(RUR'U')R'FR2U'R'U'(RUR'F')",
|
||||
"\\jezevec/\\jezevec/\\jezevec/",
|
||||
"\\osk/\\osk/\\osk/",
|
||||
"↑↑↓↓←→←→BA",
|
||||
"1, 2, ⑨!!!!!",
|
||||
"20G actually is a brand new game rule",
|
||||
"少女祈禱中",
|
||||
"ALLSPIN!",
|
||||
"Also try Cultris II!",
|
||||
"Also try Jstris!",
|
||||
"Also try Minecraft",
|
||||
"Also try Osu!",
|
||||
"Also try Phigros!",
|
||||
"Also try Terraria!",
|
||||
"Also try Tetr.io!",
|
||||
"Also try Tetr.js!",
|
||||
"Also try Tetra Legends!",
|
||||
"Also try VVVVVV!",
|
||||
"Am G F G",
|
||||
"Any suggestions? Post them in our Discord!",
|
||||
"B2B2B???",
|
||||
"Back to Back 10 combo Techrash PC!",
|
||||
"Change log in English can be found on Discord.",
|
||||
"COOL!!",
|
||||
"Decreasing DAS and ARR: faster but harder to control.",
|
||||
"Diao so bully",
|
||||
"Don't let a small glitch ruin your entire day!",
|
||||
"Don't look directly at the bugs!",
|
||||
"Enjoy Techmino rotation system!",
|
||||
"Find out what's in the settings!",
|
||||
"Headphones recommended for better experience",
|
||||
"Hello world!",
|
||||
"Increase frame rate for better experience.",
|
||||
"Initial [insert action] system can save your life",
|
||||
"Is B2B2B2B possible?",
|
||||
"It's really loading! Not just a cutscene!",
|
||||
"Join our discord!",
|
||||
"l-=-1",
|
||||
"Let-The-Bass-Kick!",
|
||||
"LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
|
||||
"Lua No.1",
|
||||
"Music distracting? Feel free to turn it off.",
|
||||
"O-Spin Triple!",
|
||||
"OHHHHHHHHHHHHHH",
|
||||
"Online mode planned, be patient",
|
||||
"Powered by Love2D",
|
||||
"REGRET!!",
|
||||
"Secret number: 626",
|
||||
"Sprint WR: 15.654s by VinceHD",
|
||||
"Techmino = Technique + Tetromino",
|
||||
"Techmino has a Nspire-CX edition!",
|
||||
"Techmino is so fun!",
|
||||
"TetroDictionary in English is available now.",
|
||||
"Try to use two rotate buttons. All three better.",
|
||||
"Warning: Programmer Art",
|
||||
"What about 20 PCs?",
|
||||
"What about 23 PCs in 100 lines?",
|
||||
"What about 26 TSDs?",
|
||||
"You are Grand Master.",
|
||||
"You can open saving directory from Stats page",
|
||||
"You can set orientation for each block",
|
||||
"ZS JL T O I",
|
||||
}
|
||||
}
|
||||
664
LANG/lang_fr.lua
664
LANG/lang_fr.lua
@@ -1,664 +0,0 @@
|
||||
return{
|
||||
fallback=3,
|
||||
back="Retour",
|
||||
anykey="Appuyez sur n'importe quelle touche",
|
||||
newVersion="Merci d'avoir mis le jeu à jour ! Les nouvelles fonctionnalités sont listées ci-dessous.",
|
||||
httpTimeout="La connexion au réseau ne s'est pas faite à temps.",
|
||||
marking="Créateur du jeu: MrZ_26\nSi vous pouvez voir ceci, cet enregistrement est illégal\nToute explication est fausse et invalide.",
|
||||
holdR="Hold to restart",
|
||||
|
||||
atkModeName={"Aléatoire","Badges","K.O.s faciles","Attaquants"},
|
||||
royale_remain="$1 Joueurs restants",
|
||||
cmb={nil,"1 Combo","2 Combo","3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!!","15 Combo!!","16 Combo!!","17 Combo!!!","18 Combo!!!","19 Combo!!!","MEGACMB"},
|
||||
spin="-Spin ",
|
||||
clear={"Simple","Double","Triple","Techrash","Pentacrash","Hexacrash"},
|
||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||
PC="Perfect Clear",HPC="Clear",
|
||||
hold="RESERVE",next="SUIVANT",
|
||||
replaying="[Replay]",
|
||||
|
||||
stage="Etape $1",
|
||||
great="Bien !",
|
||||
awesome="Génial !",
|
||||
almost="Presque !",
|
||||
continue="Continuez !",
|
||||
maxspeed="Vitesse maximale !",
|
||||
speedup="Speed up !",
|
||||
missionFailed="Mission échouée",
|
||||
|
||||
-- speedLV="speed level",
|
||||
-- line="Lines",atk="Attack",eff="Efficiency",
|
||||
-- rpm="RPM",tsd="TSD",
|
||||
-- grade="Grade",techrash="Techrash",
|
||||
-- wave="Wave",nextWave="Next",
|
||||
-- combo="Combo",maxcmb="Max Combo",
|
||||
-- pc="Perfect Clear",ko="KO",
|
||||
|
||||
|
||||
win="Gagné !",
|
||||
finish="Terminé",
|
||||
gameover="Fin du jeu",
|
||||
pause="Pause",
|
||||
pauseCount="Pauses",
|
||||
finesse_ap="Parfait",
|
||||
finesse_fc="Combo Entier",
|
||||
|
||||
page="Page:",
|
||||
|
||||
ai_fixed="L'IA est incompatible avec les séquences fixes.",
|
||||
ai_prebag="L'IA est incompatible avec les séquences personnalisées.",
|
||||
ai_mission="L'IA est incompatible avec les missions personnalisées.",
|
||||
settingSaved="Paramètres sauvegardés",
|
||||
settingSavingError="Erreur de sauvegarde des paramètres :",
|
||||
keyMapSaved="Touches sauvegardées.",
|
||||
keyMapSavingError="Erreur de sauvegarde des touches :",
|
||||
VKSaved="Touches virtuelles sauvegardées",
|
||||
VKSavingError="Erreur de sauvegarde des touches virtuelles :",
|
||||
statSavingError="Erreur de sauvegarde des statistiques :",
|
||||
unlockSavingError="Erreur de sauvegarde du contenu débloqué :",
|
||||
recSavingError="Erreur de sauvegarde des records :",
|
||||
switchSpawnSFX="Activez les effets sonores d'apparition des pièces pour jouer",
|
||||
getRank="Rang: ",
|
||||
|
||||
needRestart="Fonctionnera dès la prochaine partie",
|
||||
|
||||
-- exportSuccess="Export successfully",
|
||||
-- importSuccess="Import successfully",
|
||||
dataCorrupted="Données corrompues",
|
||||
|
||||
VKTchW="Poids du toucher",
|
||||
VKOrgW="Pois d'origine",
|
||||
VKCurW="Pois de la pos. du cur.",
|
||||
|
||||
noScore="Aucun score",
|
||||
highScore="Records personnels",
|
||||
newRecord="Nouveau record !",
|
||||
|
||||
getNoticeFail="Echec de l'obtention de la notice",
|
||||
getVersionFail="Echec d'obtention de la dernière version",
|
||||
versionIsNew="Vous êtes sur la dernière version",
|
||||
versionIsOld="La version $1 est disponible !",
|
||||
|
||||
netErrorCode="Code d'erreur réseau",
|
||||
-- jsonError="Json error",
|
||||
|
||||
noUsername="Entrez votre nom d'utilisateur",
|
||||
-- wrongCode="Please enter invitation code",
|
||||
-- wrongEmail="Wrong email address",
|
||||
noPassword="Entrez votre mot de passe",
|
||||
diffPassword="Les mots de passe ne se correspondent pas",
|
||||
registerSuccessed="Enregistré avec succès !",
|
||||
registerFailed="Erreur d'enregistrement",
|
||||
|
||||
errorMsg="Une erreur est survenue et Techmino doit redémarrer.\nDes informations concernant l'erreur ont été créées, et vous pouvez les envoyer au créateur.",
|
||||
|
||||
acts={
|
||||
"Déplacement vers la gauche :","Déplacement vers la droite :",
|
||||
"Rotation vers la droite:","Rotation vers la gauche :","180° :",
|
||||
"Chute instantanée :","Chute rapide :","Réserve :","Fonction :","Réessayer:",
|
||||
"Déplacement instantané vers la gauche :","Déplacement instantané vers la droite : ","Chute sonique :","Descendre de 1 :","Descendre de 4 :","Descendre de 10 :",
|
||||
"Chute à gauche :","Chute à droite :","Zangi gauche :","Zangi droite :",
|
||||
},
|
||||
load={[0]="Terminé","Chargement de la voix","Chargement de la musique","Chargement des effets sonores","Chargement des images","Chargement des polices","chargement des modes","Loading other things"},
|
||||
pauseStat={
|
||||
"Temps :",
|
||||
"Touche/Rot./Réserve :",
|
||||
"Pièce :",
|
||||
"Lignes/Creuser :",
|
||||
"Attaque/Attaque de creusage :",
|
||||
"Reçu :",
|
||||
"Nettoyages :",
|
||||
"Spins :",
|
||||
"B2B/B3B/PC/HPC : ",
|
||||
"Finesse :",
|
||||
},
|
||||
radar={"DEF","OFF","ATQ","ENVOYER","SPD","DIG"},
|
||||
radarData={
|
||||
"D'PM",
|
||||
"ADPM",
|
||||
"APM",
|
||||
"SPM",
|
||||
"L'PM",
|
||||
"DPM",
|
||||
},
|
||||
stat={
|
||||
"Nombre de fois lancé :",
|
||||
"Nombre de parties :",
|
||||
"Temps de jeu :",
|
||||
"Touche/Rot./Réserve :",
|
||||
"Bloc/Ligne/Atq. :",
|
||||
"Reçu/Res./Asc. :",
|
||||
"Attaque/Attaque de creusage :",
|
||||
"Eff./Eff. de creusage :",
|
||||
"B2B/B3B :",
|
||||
"PC/HPC :",
|
||||
"Errs. Finesse/Finesse :",
|
||||
},
|
||||
help={
|
||||
"Vous pouvez jouer à ceci, vous n'avez probablement pas besoin d'\"aide\"?",
|
||||
"Ceci est un simple jeu de blocs.",
|
||||
"On y joue comme sur TO/C2/KOS/TGM3 et autres.",
|
||||
"",
|
||||
"Vous pouvez envoyer des rapports de bogues ou des suggastions via le groupe de test ou l'email du créateur ~",
|
||||
"Ce jeu est gratuit et est uniquement disponible via discord.gg/f9pUvkh",
|
||||
"Ne téléchargez pas ce jeu depuis une autre source au risque d'avoir des virus,",
|
||||
"et vous n'avez besoin que des permissions de vibration et de communication réseau pour les versions mobiles !",
|
||||
"Le créateur n'est pas responsable pour n'importe quel type de perte de données suite à une modification du jeu.",
|
||||
},
|
||||
staff={
|
||||
"Author: MrZ E-mail: 1046101471@qq.com",
|
||||
"Powered by LOVE2D",
|
||||
"",
|
||||
"Programme : MrZ, [T9972, FinnTenzor]",
|
||||
"Art : MrZ, [Gnyar, T0722]",
|
||||
"Musiqie : MrZ, [T0722]",
|
||||
"Voix & Sons: MrZ, Miya Performance: 模电, HBM",
|
||||
"Test: 思竣 Web: 渣渣120",
|
||||
"Anglais: User670, MattMayuga",
|
||||
"Français :Mizu Espagnol: Mr.Faq",
|
||||
"",
|
||||
"Merci à:",
|
||||
"Flyz, Farter, 蕴空之灵,",
|
||||
"Teatube, [All test staff]",
|
||||
},
|
||||
used=[[
|
||||
Outils utilisés:
|
||||
Beepbox
|
||||
GFIE
|
||||
Goldwave
|
||||
Libs utilisées:
|
||||
Cold_Clear [MinusKelvin]
|
||||
json.lua [rxi]
|
||||
profile.lua [itraykov]
|
||||
simple-love-lights [dylhunn]
|
||||
]],
|
||||
support="Aider le créateur",
|
||||
group="Groupe QQ officiel (si non piraté) : 1127702001",
|
||||
WidgetText={
|
||||
main={
|
||||
-- offline="Single",
|
||||
-- online="Multi",
|
||||
custom="Mode perso.",
|
||||
stat="Statistiques",
|
||||
setting="Paramètres",
|
||||
qplay="Partie rapide",
|
||||
lang="言/A",
|
||||
help="Aide",
|
||||
quit="Quitter",
|
||||
music="Salon musical",
|
||||
sound="Salon SE",
|
||||
minigame="Minijeux",
|
||||
},
|
||||
mode={
|
||||
start="Démarrer",
|
||||
},
|
||||
play={
|
||||
pause="Pause",
|
||||
},
|
||||
pause={
|
||||
setting="Paramètres (S)",
|
||||
replay="Replay (P)",
|
||||
resume="Continuer (esc)",
|
||||
restart="Réessayer (R)",
|
||||
quit="Quitter (Q)",
|
||||
},
|
||||
setting_game={
|
||||
title="Paramètres du jeu",
|
||||
|
||||
graphic="←Vidéo",
|
||||
sound="Son→",
|
||||
|
||||
ctrl="Paramètres de contrôle",
|
||||
key="Touches",
|
||||
touch="Boutons virtuels",
|
||||
reTime="Délai de démarrage",
|
||||
maxNext="Nombre de prévisualisations de pièces",
|
||||
layout="Skin, orientations, etc.",
|
||||
autoPause="Mettre en pause en cas de perte de focus",
|
||||
swap="Combinaison de touches (changer le mode d'attaque)",
|
||||
fine="Son d'erreur de Finesse",
|
||||
appLock="Verrouillage d'appli (MDP : 626)",
|
||||
calc="Verrouillage d'appli",
|
||||
},
|
||||
setting_video={
|
||||
title="Paramètres vidéo",
|
||||
|
||||
sound="←Son",
|
||||
game="Jeu→",
|
||||
|
||||
block="Dessiner le bloc",
|
||||
ghost="Pièce fantôme",
|
||||
center="Centre",
|
||||
|
||||
smooth="Chute fluide",
|
||||
grid="Grille",
|
||||
bagLine="Ligne du Sac",
|
||||
|
||||
lockFX="Effets de verrouillage",
|
||||
dropFX="Effets de chute",
|
||||
moveFX="Effets de déplacement",
|
||||
clearFX="Effets de nettoyage",
|
||||
shakeFX="Tremblements de l'écran",
|
||||
atkFX="Effets d'attaque",
|
||||
frame="Montrer les FPS",
|
||||
|
||||
text="Texte d'action",
|
||||
score="Pop-up de score",
|
||||
warn="Alerte de danger",
|
||||
highCam="Vue d'oiseau",
|
||||
nextPos="Prévisualisation de position",
|
||||
fullscreen="Plein écran",
|
||||
bg="Arrière-plan",
|
||||
power="Infos d'alimentation",
|
||||
},
|
||||
setting_sound={
|
||||
title="Paramètres du son",
|
||||
|
||||
game="←Jeu",
|
||||
graphic="Vidéo→",
|
||||
|
||||
sfx="Sons",
|
||||
stereo="Stéréo",
|
||||
spawn="Apparition",
|
||||
bgm="Musique",
|
||||
vib="Vibration",
|
||||
voc="Voix",
|
||||
},
|
||||
setting_control={
|
||||
title="Paramètres de contrôle",
|
||||
preview="Aperçu",
|
||||
|
||||
das="DAS",arr="ARR",
|
||||
sddas="DAS de chute rapide",sdarr="ARR de chute rapide",
|
||||
ihs="Réserve Initiale",
|
||||
irs="Rotation Initiale",
|
||||
ims="Mouvement Initial",
|
||||
reset="Réinitialisation",
|
||||
},
|
||||
setting_key={
|
||||
keyboard="Clavier",
|
||||
joystick="Manette",
|
||||
help="Flèches directionelles : Sélectionner/changer paramètre, Enter/Space : Modifier, Echap : Retour",
|
||||
},
|
||||
setting_skin={
|
||||
title="Skin, orientations, etc.",
|
||||
|
||||
prev="←",next="→",
|
||||
prev1="↑",next1="↓",spin1="R",
|
||||
prev2="↑",next2="↓",spin2="R",
|
||||
prev3="↑",next3="↓",spin3="R",
|
||||
prev4="↑",next4="↓",spin4="R",
|
||||
prev5="↑",next5="↓",spin5="R",
|
||||
prev6="↑",next6="↓",spin6="R",
|
||||
prev7="↑",next7="↓",spin7="R",
|
||||
skinR="Réinit. Couleur",
|
||||
faceR="Réinit. Orient.",
|
||||
},
|
||||
setting_touch={
|
||||
default="Par défaut",
|
||||
snap="Snap",
|
||||
option="Options",
|
||||
size="Taille",
|
||||
},
|
||||
setting_touchSwitch={
|
||||
b1= "Déplacement vers la gauche :",b2="Déplacement vers la droite:",
|
||||
b3="Rotation vers la droite :",b4="Rotation vers la gauche :",
|
||||
b5= "180° :",b6="Chute instantanée :",b7="Chute rapide :",b8="Réserve :",
|
||||
b9= "Fonction :",b10="Redémarrer :",
|
||||
b11="Déplacement instantané vers la gauche :",b12="Déplacement instantané vers la droite :",
|
||||
b13="Chute sonique :",b14="Descendre de 1 :",b15="Descendre de 4 :",b16="Descendre de 10:",
|
||||
b17="Chute à gauche :",b18="Chute à droite :",b19="Zangi Gauche :",b20="Zangi Droite :",
|
||||
norm="Normal",
|
||||
pro="Professionel",
|
||||
hide="Montrer les touches virtuelles",
|
||||
track="Auto Track",
|
||||
sfx="Sons",
|
||||
vib="Vib.",
|
||||
icon="Icône",
|
||||
tkset="Paramètres des tracks",
|
||||
alpha="Alpha",
|
||||
},
|
||||
setting_trackSetting={
|
||||
VKDodge="Auto-esquive",
|
||||
},
|
||||
customGame={
|
||||
title="Mode personnalisé",
|
||||
subTitle="Basique",
|
||||
defSeq="Séquence par défaut",
|
||||
noMsn="Pas de mission",
|
||||
|
||||
drop="Délai de chute",
|
||||
lock="Délai de verrouillage",
|
||||
wait="Délai d'apparition",
|
||||
fall="Délai de ligne",
|
||||
|
||||
bg="Arrière-plan",
|
||||
bgm="Musique",
|
||||
|
||||
copy="Copier Mtrc+Seq+Missn",
|
||||
paste="Coller Mtrc+Seq+Missn",
|
||||
clear="Démarrer Clear",
|
||||
puzzle="Démarrer Puzzle",
|
||||
|
||||
advance="Plus (A)",
|
||||
field="Modifier la matrice (F)",
|
||||
sequence="Modifier la séquence (S)",
|
||||
mission="Modifier la mission(M)",
|
||||
},
|
||||
custom_advance={
|
||||
title="Mode personnalisé",
|
||||
subTitle="Avancer",
|
||||
|
||||
next="Prévisualisations de pièces",hold="Réserve",oncehold="Réserver une fois",
|
||||
block="Dessiner le bloc",
|
||||
ghost="Pièce fantôme",
|
||||
center="Centre",
|
||||
bagLine="Ligne du Sac",
|
||||
highCam="Vue d'oiseau",
|
||||
nextPos="Prévisualisation de position",
|
||||
bone="Crochets",
|
||||
|
||||
mindas="DAS minimum",
|
||||
minarr="ARR minimum",
|
||||
minsdarr="SDARR minimum",
|
||||
noTele="Pas de téléportation",
|
||||
ospin="O-spin",
|
||||
target="But",
|
||||
visible="Visibilité",
|
||||
freshLimit="Limite de réinit. du délai de verrouillage",
|
||||
easyFresh="Réinit. de verrouillage normale",
|
||||
fineKill="100% Finesse",
|
||||
opponent="Adversaire",
|
||||
life="Vie",
|
||||
pushSpeed="Vitesse des lignes indésirables",
|
||||
},
|
||||
custom_field={
|
||||
title="Mode personnalisé",
|
||||
subTitle="Matrice",
|
||||
|
||||
b17="[ ]",
|
||||
any="Effacer",
|
||||
space="×",
|
||||
pushLine="Ajouter ligne (K)",
|
||||
delLine="Supprimer ligne (L)",
|
||||
|
||||
copy="Copier",
|
||||
paste="Coller",
|
||||
clear="Nettoyer",
|
||||
demo="Masquer les ×",
|
||||
|
||||
-- newPage="New Page(N)",
|
||||
-- delPage="Del Page(M)",
|
||||
-- prevPage="Prev Page",
|
||||
-- nextPage="Next Page",
|
||||
},
|
||||
custom_sequence={
|
||||
title="Mode personnalisée",
|
||||
subTitle="Séquence",
|
||||
|
||||
sequence="Séquence",
|
||||
|
||||
Z="Z",S="S",J="J",L="L",T="T",O="O",I="I",
|
||||
Z5="Z5",S5="S5",P="P",Q="Q",F="F",E="E",T5="T5",U="U",
|
||||
V="V",W="W",X="X",J5="J5",L5="L5",R="R",Y="Y",N="N",H="H",I5="I5",
|
||||
left="←",
|
||||
right="→",
|
||||
ten="→→",
|
||||
backsp="<X",
|
||||
reset="R",
|
||||
copy="Copier",
|
||||
paste="Coller",
|
||||
},
|
||||
custom_mission={
|
||||
title="Mode personnalisé",
|
||||
subTitle="Mission",
|
||||
|
||||
_1="1",_2="2",_3="3",_4="4",
|
||||
any1="any1",any2="any2",any3="any3",any4="any4",
|
||||
PC="PC",
|
||||
Z1="Z1",S1="S1",J1="J1",L1="L1",T1="T1",O1="O1",I1="I1",
|
||||
Z2="Z2",S2="S2",J2="J2",L2="L2",T2="T2",O2="O2",I2="I2",
|
||||
Z3="Z3",S3="S3",J3="J3",L3="L3",T3="T3",O3="O3",I3="I3",
|
||||
O4="O4",I4="I4",
|
||||
left="←",right="→",
|
||||
ten="→→",
|
||||
backsp="<X",
|
||||
reset="R",
|
||||
copy="Copier",
|
||||
paste="Coller",
|
||||
mission="Dorcer la mission",
|
||||
},
|
||||
dict={
|
||||
title="TetroDictionary",
|
||||
keyboard="Clavier",
|
||||
link="Ouvrir URL",
|
||||
up="↑",
|
||||
down="↓",
|
||||
},
|
||||
stat={
|
||||
path="Ouvrir dossier des données",
|
||||
-- save="Data Management",
|
||||
},
|
||||
music={
|
||||
title="Salon musical",
|
||||
arrow="→",
|
||||
now="En train de jouer :",
|
||||
|
||||
bgm="Musique",
|
||||
up="↑",
|
||||
play="Jouer",
|
||||
down="↓",
|
||||
},
|
||||
login={
|
||||
title="Connexion / Enregistrement",
|
||||
username="Nom d'utilisateur",
|
||||
email="E-mail",
|
||||
code="Code d'invitation",
|
||||
password="Mot de passe",
|
||||
password2="Confirmer le mot de passe",
|
||||
},
|
||||
account={
|
||||
title="Compte",
|
||||
},
|
||||
sound={
|
||||
title="Salon SE",
|
||||
sfx="Sons",
|
||||
voc="Voix",
|
||||
|
||||
-- move="Move",
|
||||
-- lock="Lock",
|
||||
-- drop="Drop",
|
||||
-- fall="Fall",
|
||||
-- rotate="Rotate",
|
||||
-- rotatekick="Rotatekick",
|
||||
-- hold="Hold",
|
||||
-- prerotate="Prerotate",
|
||||
-- prehold="Prehold",
|
||||
-- _pc="PC",
|
||||
|
||||
-- clear1="clear 1",
|
||||
-- clear2="clear 2",
|
||||
-- clear3="clear 3",
|
||||
-- clear4="clear 4",
|
||||
-- spin0="spin 0",
|
||||
-- spin1="spin 1",
|
||||
-- spin2="spin 2",
|
||||
-- spin3="spin 3",
|
||||
|
||||
-- _1="Single",
|
||||
-- _2="Double",
|
||||
-- _3="Triple",
|
||||
-- _4="Techrash",
|
||||
-- z0="Z-spin",
|
||||
-- z1="Z-spin 1",
|
||||
-- z2="Z-spin 2",
|
||||
-- z3="Z-spin 3",
|
||||
-- s0="S-spin",
|
||||
-- s1="S-spin 1",
|
||||
-- s2="S-spin 2",
|
||||
-- s3="S-spin 3",
|
||||
|
||||
-- j0="J-spin",
|
||||
-- j1="J-spin 1",
|
||||
-- j2="J-spin 2",
|
||||
-- j3="J-spin 3",
|
||||
-- l0="L-spin",
|
||||
-- l1="L-spin 1",
|
||||
-- l2="L-spin 2",
|
||||
-- l3="L-spin 3",
|
||||
|
||||
-- t0="T-spin",
|
||||
-- t1="T-spin 1",
|
||||
-- t2="T-spin 2",
|
||||
-- t3="T-spin 3",
|
||||
-- o0="O-spin",
|
||||
-- o1="O-spin 1",
|
||||
-- o2="O-spin 2",
|
||||
-- o3="O-spin 3",
|
||||
|
||||
-- i0="I-spin",
|
||||
-- i1="I-spin 1",
|
||||
-- i2="I-spin 2",
|
||||
-- i3="I-spin 3",
|
||||
|
||||
-- mini="Mini",
|
||||
-- b2b="B2B",
|
||||
-- b3b="B3B",
|
||||
-- pc="PC",
|
||||
},
|
||||
minigame={
|
||||
p15="15 Puzzle",
|
||||
schulte_G="Schulte Grid",
|
||||
pong="Pong",
|
||||
},
|
||||
p15={
|
||||
reset="Réinitialiser",
|
||||
color="Couleur",
|
||||
blind="Aveugler",
|
||||
slide="Glisser",
|
||||
pathVis="Montrer le tracé",
|
||||
revKB="Inverser",
|
||||
},
|
||||
schulte_G={
|
||||
reset="Réinitialiser",
|
||||
rank="Taille",
|
||||
blind="Aveugler",
|
||||
disappear="Cacher",
|
||||
tapFX="Effet quand tapé",
|
||||
},
|
||||
pong={
|
||||
reset="Redémarrer",
|
||||
},
|
||||
AtoZ={
|
||||
-- level="Level",
|
||||
reset="Redémarrer",
|
||||
},
|
||||
help={
|
||||
dict="little Z",
|
||||
staff="Staff",
|
||||
his="History",
|
||||
qq="QQ du créateur",
|
||||
},
|
||||
savedata={
|
||||
-- exportUnlock="Export Unlock",
|
||||
-- exportData="Export Data",
|
||||
-- exportSetting="Export Setting",
|
||||
-- exportVK="Export VK",
|
||||
|
||||
-- importUnlock="Import Unlock",
|
||||
-- importData="Import Data",
|
||||
-- importSetting="Import Setting",
|
||||
-- importVK="Import VK",
|
||||
|
||||
reset="Réinitialiser ?",
|
||||
resetUnlock="Réinitialiser les rangs",
|
||||
resetData="Réinitialiser les données",
|
||||
resetALL="Tout réinitialiser",
|
||||
},
|
||||
},
|
||||
modes={
|
||||
["sprint_10"]= {"Sprint", "10L", "Nettoyez 10 lignes !"},
|
||||
["sprint_20"]= {"Sprint", "20L", "Nettoyez 20 lignes !"},
|
||||
["sprint_40"]= {"Sprint", "40L", "Nettoyez 40 lignes !"},
|
||||
["dig_10"]= {"Dig", "10L", "Creusez 10 lines"},
|
||||
["dig_40"]= {"Dig", "40L", "Creusez 40 lines"},
|
||||
["dig_100"]= {"Dig", "100L", "Creusez 100 lines"},
|
||||
["dig_400"]= {"Dig", "400L", "Creusez 400 lines"},
|
||||
["dig_1000"]= {"Dig", "1000L", "Creusez 1000 lines"},
|
||||
["sprint_100"]= {"Sprint", "100L", "Nettoyez 100 lignes !"},
|
||||
["sprint_400"]= {"Sprint", "400L", "Nettoyez 400 lignes !"},
|
||||
["sprint_1000"]= {"Sprint", "1000L", "Nettoyez 1000 lignes !"},
|
||||
["drought_normal"]= {"Drought", "100L", "Pas de pièce I !"},
|
||||
["drought_lunatic"]= {"Drought", "100L", "WTF ??!!"},
|
||||
["marathon_normal"]= {"Marathon", "NORMAL", "Marathon de 200 lignes."},
|
||||
["marathon_hard"]= {"Marathon", "DIFFICILE", "Marathon de 200 lignes à très haute vitesse"},
|
||||
["marathon_ultimate"]= {"Marathon", "ULTIME", "Simples sans combos uniquement."},
|
||||
["solo_1"]= {"Battle", "FACILE", "Battez l'IA !"},
|
||||
["solo_2"]= {"Battle", "NORMAL", "Battez l'IA !"},
|
||||
["solo_3"]= {"Battle", "DIFFICILE", "Battez l'IA !"},
|
||||
["solo_4"]= {"Battle", "LUNATIQUE", "Battez l'IA !"},
|
||||
["solo_5"]= {"Battle", "ULTIME", "Battez l'IA !"},
|
||||
["techmino49_easy"]= {"Tech 49", "FACILE", "Bataille de 49 joueurs.\nLe dernier en vie gagne."},
|
||||
["techmino49_hard"]= {"Tech 49", "DIFFICILE", "Bataille de 49 joueurs.\nLe dernier en vie gagne."},
|
||||
["techmino49_ultimate"]={"Tech 49", "ULTIME", "Bataille de 49 joueurs.\nLe dernier en vie gagne."},
|
||||
["techmino99_easy"]= {"Tech 99", "FACILE", "Bataille de 99 joueurs.\nLe dernier en vie gagne."},
|
||||
["techmino99_hard"]= {"Tech 99", "DIFFICILE", "Bataille de 99 joueurs.\nLe dernier en vie gagne."},
|
||||
["techmino99_ultimate"]={"Tech 99", "ULTIMe", "Bataille de 99 joueurs.\nLe dernier en vie gagne."},
|
||||
["round_1"]= {"Tour à tour", "FACILE", "Mode échecs"},
|
||||
["round_2"]= {"Tour à tour", "NORMAL", "Mode échecs"},
|
||||
["round_3"]= {"Tour à tour", "DIFFICILE", "Mode échecs"},
|
||||
["round_4"]= {"Tour à tour", "LUNATIQUE", "Mode échecs"},
|
||||
["round_5"]= {"Tour à tour", "ULTIME", "Mode échecs"},
|
||||
["master_beginner"]= {"Master", "LUNATIQUE", "Pour les débutants en 20G."},
|
||||
["master_advance"]= {"Master", "ULTIME", "Challenge 20G pro !"},
|
||||
["master_final"]= {"Master", "FINAL", "20G : Un point final impossible à atteindre !"},
|
||||
["GM"]= {"GrandMaster", "GM", "Tentez de devenir un Grandmaster."},
|
||||
["blind_easy"]= {"Aveugle", "MOITIE", "Pour les novices."},
|
||||
["blind_normal"]= {"Aveugle", "TOUT", "Pour les joueurs intermédiaires."},
|
||||
["blind_hard"]= {"Aveugle", "SOUDAIN", "Pour les bons jooeurs."},
|
||||
["blind_lunatic"]= {"Aveugle", "SOUDAIN+", "Pour les pros."},
|
||||
["blind_ultimate"]= {"Aveugle", "?", "Êtes-vous prêt ?"},
|
||||
["blind_wtf"]= {"Aveugle", "WTF", "Vous n'êtes pas prêt."},
|
||||
["classic_fast"]= {"Classic", "CTWC", "Un mode classique rapide."},
|
||||
["survivor_easy"]= {"Survivor", "FACILE", "Pendant combien de temps survivrez-vous ?"},
|
||||
["survivor_normal"]= {"Survivor", "NORMAL", "Pendant combien de temps survivrez-vous ?"},
|
||||
["survivor_hard"]= {"Survivor", "DIFFICILE", "Pendant combien de temps survivrez-vous ?"},
|
||||
["survivor_lunatic"]= {"Survivor", "LUNATIQUE", "Pendant combien de temps survivrez-vous ?"},
|
||||
["survivor_ultimate"]= {"Survivor", "ULTIME", "Pendant combien de temps survivrez-vous ?"},
|
||||
["attacker_hard"]= {"Attaquant", "DIFFICILE", "Soyez offensifs !"},
|
||||
["attacker_ultimate"]= {"Attaquant", "ULTIME", "Soyez offensifs !"},
|
||||
["defender_normal"]= {"Défendant", "NORMAL", "Soyez défensifs !"},
|
||||
["defender_lunatic"]= {"Défendant", "LUNATIQUE", "Soyez défensifs !"},
|
||||
["dig_hard"]= {"Perceuse", "DIFFICILE", "Essayez de creuser !"},
|
||||
["dig_ultimate"]= {"Perceuse", "ULTIME", "Essayez de creuser !"},
|
||||
["bigbang"]= {"Big Bang", "FACILE", "Tutoriel All-Spin\nEn construction..."},
|
||||
["c4wtrain_normal"]= {"Mode essai C4W", "NORMAL", "Combos infinis."},
|
||||
["c4wtrain_lunatic"]= {"Mode essai C4W", "LUNATIQUE", "Combos infinis."},
|
||||
["pctrain_normal"]= {"Mode essai PC", "NORMAL", "Simple Perfect Clear mode."},
|
||||
["pctrain_lunatic"]= {"Mode essai PC", "LUNATIQUE", "Simple Perfect Clear mode."},
|
||||
["pcchallenge_normal"]= {"PC Challenge", "NORMAL", "Obtenez un PC dans les prochaines 100 lignes !"},
|
||||
["pcchallenge_hard"]= {"PC Challenge", "DIFFICILE", "Obtenez un PC dans les prochaines 100 lignes !"},
|
||||
["pcchallenge_lunatic"]={"PC Challenge", "LUNATIQUE", "Obtenez un PC dans les prochaines 100 lignes !"},
|
||||
["tech_normal"]= {"Tech", "NORMAL", "Gardez le B2B !"},
|
||||
["tech_normal2"]= {"Tech", "NORMAL+", "Spin & PC uniquement"},
|
||||
["tech_hard"]= {"Tech", "DIFFICILE", "Gardez le B2B !"},
|
||||
["tech_hard2"]= {"Tech", "HARD+", "Spin & PC uniquement"},
|
||||
["tech_lunatic"]= {"Tech", "LUNATIQUE", "Gardez le B2B !"},
|
||||
["tech_lunatic2"]= {"Tech", "LUNATIQUE+", "Spin & PC uniquement"},
|
||||
["tech_finesse"]= {"Tech", "FINESSE", "Pas d'erreurs de finesse !"},
|
||||
["tech_finesse2"]= {"Tech", "FINESSE+", "Pas de nettoyages normaux, Pas d'erreurs de finesse !"},
|
||||
["tsd_easy"]= {"TSD Challenge", "FACILE", "T-spin doubles uniquement !"},
|
||||
["tsd_hard"]= {"TSD Challenge", "DIFFICILE", "T-spin doubles uniquement !"},
|
||||
["tsd_ultimate"]= {"TSD Challenge", "ULTIME", "T-spin doubles uniquement !"},
|
||||
["zen"]= {"Zen", "200", "200 lignes sans limites de temps."},
|
||||
["ultra"]= {"Ultra", "EXTRA", "2 minutes pour avoir le meilleur score."},
|
||||
["infinite"]= {"Infini", "", "Mode tranquile."},
|
||||
["infinite_dig"]= {"Infini : Dig", "", "Creuser, creuser, creuser."},
|
||||
["custom_clear"]= {"Perso.", "NORMAL", "Dessinez quelque chose et nettoyez-le !!"},
|
||||
["custom_puzzle"]= {"Perso.", "PUZZLE", "Dessinez quelque chose et empilez-le !!"},
|
||||
["sprintFix"]= {"Sprint", "Sans gauche/droite","C'est possible."},
|
||||
["sprintLock"]= {"Sprint", "Sans rotation", "C'est impossible."},
|
||||
["sprintPenta"]= {"Sprint", "Pentomino", "40 lignes avec 18 pentominos."},
|
||||
["sprintMPH"]= {"Sprint", "MPH", "Memoriyless\nPreviewless\nHoldless"},
|
||||
},
|
||||
}
|
||||
663
LANG/lang_sp.lua
663
LANG/lang_sp.lua
@@ -1,663 +0,0 @@
|
||||
return{
|
||||
fallback=3,
|
||||
back="Volver",
|
||||
anykey="Pulsa cualquier tecla",
|
||||
newVersion="¡Gracias por actualizar! Detalles a continuación:",
|
||||
httpTimeout="¡Tiempo de espera de conexión agotado!",
|
||||
marking="Autor:MrZ_26\nEsta grabación es ilegal si ves esto\nNo se aceptan excusas",
|
||||
holdR="Mantén presionado para reiniciar",
|
||||
|
||||
atkModeName={"Al azar","Medallas","KOs","Atacantes"},
|
||||
royale_remain="$1 Jugadores Restantes",
|
||||
cmb={nil,"Combo de 1","Combo de 2","Combo de 3","Combo de 4","Combo de 5","Combo de 6","Combo de 7","Combo de 8","Combo de 9","¡Combo de 10!","¡Combo de 11!","¡Combo de 12!","¡Combo de 13!","¡Combo de 14!","¡Combo de 15!","¡Combo de 16!","¡Combo de 17!","¡Combo de 18!","¡Combo de 19!","MEGACOMBO"},
|
||||
spin="-spin ",
|
||||
clear={"Single","Doble","Triple","Techrash","Pentacrash","Hexacrash"},
|
||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||
PC="Perfect Clear",HPC="Half Clear",
|
||||
hold="Reserva",next="Siguiente",
|
||||
replaying="[Replay]",
|
||||
|
||||
stage="Nivel $1",
|
||||
great="¡Genial!",
|
||||
awesome="¡Fantástico!",
|
||||
almost="¡Casi!",
|
||||
continue="¡Continúa!",
|
||||
maxspeed="¡Máxima Velocidad!",
|
||||
speedup="¡Más rápido!",
|
||||
missionFailed="Misión Fallida",
|
||||
|
||||
-- speedLV="speed level",
|
||||
-- line="Lines",atk="Attack",eff="Efficiency",
|
||||
-- rpm="RPM",tsd="TSD",
|
||||
-- grade="Grade",techrash="Techrash",
|
||||
-- wave="Wave",nextWave="Next",
|
||||
-- combo="Combo",maxcmb="Max Combo",
|
||||
-- pc="Perfect Clear",ko="KO",
|
||||
|
||||
win="Victoria",
|
||||
finish="Fin",
|
||||
gameover="Fin del Juego",
|
||||
pause="Pausa",
|
||||
pauseCount="Veces pausadas",
|
||||
finesse_ap="Finesse Perfecto",
|
||||
finesse_fc="Full Combo",
|
||||
|
||||
page="Página:",
|
||||
|
||||
ai_fixed="La IA no es compatible con secuencias de piezas prefijadas.",
|
||||
ai_prebag="La IA no es compatible con secuencias de piezas personalizadas.",
|
||||
ai_mission="La IA no es compatible con misiones personalizadas.",
|
||||
settingSaved="Cambios guardados",
|
||||
settingSavingError="Error al guardar los cambios:",
|
||||
keyMapSaved="Configuración de controles guardada",
|
||||
keyMapSavingError="Error al guardar la configración de controles:",
|
||||
VKSaved="Configuración de botones en pantalla guardada",
|
||||
VKSavingError="Error al guardar la configuración de botones en pantalla:",
|
||||
statSavingError="Error al guardar las estadísticas:",
|
||||
unlockSavingError="Error al guardar el contenido desbloqueado:",
|
||||
recSavingError="Error al guardar la grabación:",
|
||||
switchSpawnSFX="Habilita los sonidos de aparición de las piezas ;)",
|
||||
getRank="Rango obtenido:",
|
||||
|
||||
needRestart="Reinicia Techmino para que los cambios tengan efecto.",
|
||||
|
||||
-- exportSuccess="Export successfully",
|
||||
-- importSuccess="Import successfully",
|
||||
dataCorrupted="Los datos están corruptos.",
|
||||
|
||||
VKTchW="Sens. al toque",
|
||||
VKOrgW="Sens. al origen",
|
||||
VKCurW="Sens. Cur. Pos.",
|
||||
|
||||
noScore="Sin puntajes aún.",
|
||||
highScore="Mejores puntajes",
|
||||
newRecord="¡Nuevo Récord!",
|
||||
|
||||
getNoticeFail="Error al buscar novedades.",
|
||||
getVersionFail="Error al buscar nuevas versiones.",
|
||||
versionIsNew="Esta es la versión más reciente disponible.",
|
||||
versionIsOld="¡Está disponible la nueva versión $1!",
|
||||
|
||||
netErrorCode="Código de error de conexión",
|
||||
-- jsonError="Json error",
|
||||
|
||||
noUsername="Por favor ingresa un nombre de usuario",
|
||||
|
||||
-- wrongCode="Please enter invitation code",
|
||||
-- wrongEmail="Wrong email address",
|
||||
noPassword="Por favor ingresa una contraseña",
|
||||
diffPassword="Las contraseñas no coinciden",
|
||||
registerSuccessed="¡Registro exitoso!",
|
||||
registerFailed="Registro fallido.",
|
||||
|
||||
errorMsg="Ha ocurrido un error y Techmino necesita reiniciarse.\nSe creó un registro de error, puedes enviarlo al autor.",
|
||||
|
||||
acts={
|
||||
"Mover a Izq.:","Mover a Der.:",
|
||||
"Rotar Der.:","Rotar Izq.:","Rotar 180°:",
|
||||
"Caída Instantánea:","Caída Rápida:",
|
||||
"Reserva:","Función (para Tech99/49):",
|
||||
"Reiniciar:",
|
||||
"Izq. Instant.:","Der. Instant.:","Sonic Drop:","Abajo 1:","Abajo 4:","Abajo 10:",
|
||||
"Caída a Izq.:","Caída a Der.:","Zangi a Izq.:","Zangi a Der.:",
|
||||
},
|
||||
|
||||
load={[0]="Terminado","Cargando voces","Cargando bgm","Cargando sfx","Cargando imágenes","Cargando fuentes","Cargando modos","Cargando otras cosas"},
|
||||
pauseStat={
|
||||
"Tiempo:",
|
||||
"Tecla/Rot./Reserva:",
|
||||
"Piezas:",
|
||||
"Altura/Limpiado:",
|
||||
"Ataque Enviado:",
|
||||
"Ataque Recibido:",
|
||||
"Líneas Limpiadas:",
|
||||
"Spins:",
|
||||
"B2B/B3B/PC/HPC:",
|
||||
"Finesse:",
|
||||
},
|
||||
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
||||
radarData={
|
||||
"D'PM",
|
||||
"ADPM",
|
||||
"APM",
|
||||
"SPM",
|
||||
"L'PM",
|
||||
"DPM",
|
||||
},
|
||||
stat={
|
||||
"Veces Iniciado:",
|
||||
"Veces Jugado:",
|
||||
"Tiempo de Juego:",
|
||||
"Tecla/Rot./Reserva:",
|
||||
"Bloq./Lín./Atq.:",
|
||||
"Rec./Off./Sub.:",
|
||||
"Limp./Atq. Limp.:",
|
||||
"Effic./Eff.Limp.:",
|
||||
"Slam/Gr.Slam:",
|
||||
"PC/HPC:",
|
||||
"Err.Fns./RatioFns:",
|
||||
},
|
||||
help={
|
||||
"Ahora que sabes jugar a este juego, no necesitas ayuda, ¿o sí?",
|
||||
"Este es simplemente un juego de puzzle ordinario, no pienses de él como un juego promedio.",
|
||||
"Está inspirado en otros como TO/C2/KoS/TGM3/JS.",
|
||||
"",
|
||||
"Creado con LOVE2D",
|
||||
"Puedes reportar errores o enviar sugerencias al grupo de testeo del autor o por email ~",
|
||||
"Descarga disponible únicamente vía el grupo de testeo y discord.gg/f9pUvkh",
|
||||
"Descargas desde otros sitios pueden contener malware/viruses, y en smartphones sólo requiere permisos de internet y vibración.",
|
||||
"El autor no se responabiliza por daños ocasionados debido a modificaciones del juego.",
|
||||
"Por favor descarga las últimas versiones desde los sitios oficiales. El juego es gratuito",
|
||||
},
|
||||
staff={
|
||||
"Autor:MrZ Email: 1046101471@qq.com",
|
||||
"Creado con LOVE2D",
|
||||
"",
|
||||
"Programación: MrZ, [T9972, FinnTenzor]",
|
||||
"Artistas: MrZ, [Gnyar, T0722]",
|
||||
"Música: MrZ, [T0722]",
|
||||
"Voces/Sonidos: MrZ, Miya Performance: 模电, HBM",
|
||||
"Testeo: 思竣 Red: 渣渣120",
|
||||
"Inglés: User670, MattMayuga",
|
||||
"Francés: Mizu Español: Mr.Faq",
|
||||
"",
|
||||
"Agradecimientos:",
|
||||
"Flyz, Farter, 蕴空之灵,",
|
||||
"茶管, [Todo el Staff de Testeo]",
|
||||
},
|
||||
used=[[
|
||||
Herramientas utilizadas:
|
||||
Beepbox
|
||||
GFIE
|
||||
Goldwave
|
||||
Librerías usadas:
|
||||
Cold_Clear [MinusKelvin]
|
||||
json.lua [rxi]
|
||||
profile.lua [itraykov]
|
||||
simple-love-lights [dylhunn]
|
||||
]],
|
||||
support="Apoyen al Autor",
|
||||
group="Grupo Oficial de QQ (si no lo hackean):1127702001",
|
||||
WidgetText={
|
||||
main={
|
||||
-- offline="Single",
|
||||
-- online="Multi",
|
||||
custom="Person.",
|
||||
stat="Estadísticas",
|
||||
setting="Opciones",
|
||||
qplay="P. Rápida",
|
||||
lang="言/A",
|
||||
help="Ayuda",
|
||||
quit="Salir",
|
||||
music="Música",
|
||||
sound="Sala de SE",
|
||||
minigame="Minijuegos",
|
||||
},
|
||||
mode={
|
||||
start="Empezar",
|
||||
},
|
||||
play={
|
||||
pause="Pausa",
|
||||
},
|
||||
pause={
|
||||
setting="Opciones (S)",
|
||||
replay= "Grabación (P)",
|
||||
resume= "Resumir (esc)",
|
||||
restart="Reiniciar (R)",
|
||||
quit= "Finalizar (Q)",
|
||||
},
|
||||
setting_game={
|
||||
title="Ajustes del Juego",
|
||||
graphic="←Video",
|
||||
sound="Sonido→",
|
||||
|
||||
ctrl="Sensibilidad",
|
||||
key="Teclas",
|
||||
touch="Controles Táctiles",
|
||||
reTime="Retraso de Inicio",
|
||||
maxNext="Cantidad de Pzas. Siguientes",
|
||||
layout="Diseño",
|
||||
autoPause="Pausar cuando la ventana no está enfocada",
|
||||
swap="Combinación de Teclas (Cambiar Modo de Ataque)",
|
||||
fine="Sonido de Error de Finesse",
|
||||
appLock="Bloqueo de App (Contraseña: 626)",
|
||||
calc="Bloqueo de App",
|
||||
},
|
||||
setting_video={
|
||||
title="Ajustes de Video",
|
||||
sound="←Sonido",
|
||||
game="Juego→",
|
||||
|
||||
block="Dibujar Bloques",
|
||||
ghost="Fantasma",
|
||||
center="Centrar",
|
||||
|
||||
smooth="Caída Fluida",
|
||||
grid="Grilla",
|
||||
bagLine="Línea de Bag de Pzas.",
|
||||
|
||||
lockFX="FX Vis. de Bloqueo",
|
||||
dropFX="FX Vis. de Caída",
|
||||
moveFX="FX Vis. de Movim.",
|
||||
clearFX="FX Vis. de Limpieza",
|
||||
shakeFX="Bamboleo del Tablero",
|
||||
atkFX="FX Vis. de Ataque",
|
||||
frame="Ratio de FPSs",
|
||||
|
||||
text="Texto de Acciones",
|
||||
score="Puntaje en Pantalla",
|
||||
warn="Alerta de Peligro",
|
||||
highCam="Cám. Vista Aérea",
|
||||
nextPos="Ver Spawn de Pza. Sig.",
|
||||
fullscreen="Pant. Completa",
|
||||
bg="Fondo",
|
||||
power="Inf. de Batería",
|
||||
},
|
||||
setting_sound={
|
||||
title="Ajustes de Sonido",
|
||||
game="←Juego",
|
||||
graphic="Video→",
|
||||
|
||||
sfx="SFX",
|
||||
stereo="Estéreo",
|
||||
spawn="Spawn de Pzas.",
|
||||
bgm="BGM",
|
||||
vib="Vibración",
|
||||
voc="Voces",
|
||||
},
|
||||
setting_control={
|
||||
title="Ajustes de Controles",
|
||||
preview="Ejemplo",
|
||||
|
||||
das="DAS",arr="ARR",
|
||||
sddas="DAS de C. Ráp.",sdarr="ARR de C. Rápida",
|
||||
ihs="Resv. Inicial",
|
||||
irs="Rot. Inicial",
|
||||
ims="Mov. Inicial",
|
||||
reset="Reinicio",
|
||||
},
|
||||
setting_key={
|
||||
keyboard="Teclado",
|
||||
joystick="Joystick",
|
||||
help="Flechas: Seleccionar/Cambiar slot, Enter/Espacio: Cambiar,Esc. Volver",
|
||||
},
|
||||
setting_skin={
|
||||
title="Ajustes de Texturas",
|
||||
prev="←",next="→",
|
||||
prev1="↑",next1="↓",spin1="R",
|
||||
prev2="↑",next2="↓",spin2="R",
|
||||
prev3="↑",next3="↓",spin3="R",
|
||||
prev4="↑",next4="↓",spin4="R",
|
||||
prev5="↑",next5="↓",spin5="R",
|
||||
prev6="↑",next6="↓",spin6="R",
|
||||
prev7="↑",next7="↓",spin7="R",
|
||||
skinR="Color por def.",
|
||||
faceR="Direc. por def.",
|
||||
},
|
||||
setting_touch={
|
||||
default="Por Defecto",
|
||||
snap="Snap",
|
||||
option="Opciones",
|
||||
size="Tamaño",
|
||||
},
|
||||
setting_touchSwitch={
|
||||
b1= "Mover Izq.:",b2="Mover Der.:",b3="Rotar Der.:",b4="Rotar Izq.:",
|
||||
b5= "Rotar 180°:",b6="Caída Inst.:",b7="Caída Ráp.:",b8="Reserva:",
|
||||
b9= "Función:",b10="Reiniciar:",b11="Izq. Instant.:",b12="Der. Instant.:",
|
||||
b13="Sonic Drop:",b14="Abajo 1:",b15="Abajo 4:",b16="Abajo 10:",
|
||||
b17="Soltar a Izq.:",b18="Soltar a Der.:",b19="Zangi a Izq.:",b20="Zangi a Der.:",
|
||||
norm="Normal",
|
||||
pro="Profesional",
|
||||
hide="Mostrar Tec. Virtual",
|
||||
track="Música Autom.",
|
||||
sfx="SFX",
|
||||
vib="Vibr.",
|
||||
icon="Ícono",
|
||||
tkset="Ajustes de Canción",
|
||||
alpha="Alpha",
|
||||
},
|
||||
setting_trackSetting={
|
||||
VKDodge="Autoskip",
|
||||
},
|
||||
customGame={
|
||||
title="Juego Personalizado",
|
||||
subTitle="Básico",
|
||||
defSeq="Sec. por defecto",
|
||||
noMsn="Sin misión",
|
||||
|
||||
drop="Retraso de Caída",
|
||||
lock="Retraso de Bloqueo",
|
||||
wait="Retraso de Spawneo",
|
||||
fall="Retraso de Línea",
|
||||
|
||||
bg="Fondo",
|
||||
bgm="Música",
|
||||
|
||||
copy="Copiar Campo+Sec.+Mis.",
|
||||
paste="Pegar Campo+Sec.+Mis.",
|
||||
clear="Inicio-Fin",
|
||||
puzzle="Inicio-Puzzle",
|
||||
|
||||
advance="Más opciones (A)",
|
||||
field="Editar Tablero (F)",
|
||||
sequence="Editar Secuencia (S)",
|
||||
mission="Editar Misiones (M)",
|
||||
},
|
||||
custom_advance={
|
||||
title="Juego Personalizado",
|
||||
subTitle="Avanzado",
|
||||
|
||||
next="Siguiente",hold="Reserva",oncehold="Hold Único",
|
||||
block="Dibujar Bloques",
|
||||
ghost="Fantasma",
|
||||
center="Centrar",
|
||||
bagLine="Línea de Bag de Pzas.",
|
||||
highCam="Vista Aérea",
|
||||
nextPos="Nro. de Pzas. Siguientes",
|
||||
bone="Bone Block",
|
||||
|
||||
mindas="DAS Mínimo",
|
||||
minarr="ARR Mínimo",
|
||||
minsdarr="SDARR Mínimo",
|
||||
noTele="Sin Teleport",
|
||||
ospin="O-Spin",
|
||||
target="Objetivo",
|
||||
visible="Visibilidad",
|
||||
freshLimit="Límite de Reinicio LD",
|
||||
easyFresh="Reinicio de Bloqueo Normal",
|
||||
fineKill="100% Finesse",
|
||||
opponent="Oponente",
|
||||
life="Vida",
|
||||
pushSpeed="Velocidad de Basura",
|
||||
},
|
||||
custom_field={
|
||||
title="Juego Personalizado",
|
||||
|
||||
subTitle="Tablero",
|
||||
|
||||
b17="[ ]",
|
||||
any="Borrar",
|
||||
space="×",
|
||||
pushLine="Añadir Línea (K)",
|
||||
delLine="Borrar Línea (L)",
|
||||
|
||||
copy="Copiar",
|
||||
paste="Pegar",
|
||||
clear="Limpiar",
|
||||
demo="No Mostrar X",
|
||||
|
||||
-- newPage="New Page(N)",
|
||||
-- delPage="Del Page(M)",
|
||||
-- prevPage="Prev Page",
|
||||
-- nextPage="Next Page",
|
||||
},
|
||||
custom_sequence={
|
||||
title="Juego Personalizado",
|
||||
subTitle="Secuencia",
|
||||
|
||||
sequence="Secuencia",
|
||||
|
||||
Z="Z",S="S",J="J",L="L",T="T",O="O",I="I",
|
||||
Z5="Z5",S5="S5",P="P",Q="Q",F="F",E="E",T5="T5",U="U",
|
||||
V="V",W="W",X="X",J5="J5",L5="L5",R="R",Y="Y",N="N",H="H",I5="I5",
|
||||
left="←",
|
||||
right="→",
|
||||
ten="→→",
|
||||
backsp="<X",
|
||||
reset="R",
|
||||
copy="Copiar",
|
||||
paste="Pegar",
|
||||
},
|
||||
custom_mission={
|
||||
title="Juego Personalizado",
|
||||
subTitle="Misiones",
|
||||
|
||||
_1="1",_2="2",_3="3",_4="4",
|
||||
any1="any1",any2="any2",any3="any3",any4="any4",
|
||||
PC="PC",
|
||||
Z1="Z1",S1="S1",J1="J1",L1="L1",T1="T1",O1="O1",I1="I1",
|
||||
Z2="Z2",S2="S2",J2="J2",L2="L2",T2="T2",O2="O2",I2="I2",
|
||||
Z3="Z3",S3="S3",J3="J3",L3="L3",T3="T3",O3="O3",I3="I3",
|
||||
O4="O4",I4="I4",
|
||||
left="←",right="→",
|
||||
ten="→→",
|
||||
backsp="<X",
|
||||
reset="R",
|
||||
copy="Copiar",
|
||||
paste="Pegar",
|
||||
mission="Forzar misión",
|
||||
},
|
||||
help={
|
||||
dict="Little Z",
|
||||
staff="Staff",
|
||||
his="Hist. de Acts.",
|
||||
qq="QQ del Autor",
|
||||
},
|
||||
dict={
|
||||
title="TetroDictionary",
|
||||
keyboard="Teclado",
|
||||
link="Abrir URL",
|
||||
up="↑",
|
||||
down="↓",
|
||||
},
|
||||
stat={
|
||||
path="Abrir carpeta del juego",
|
||||
-- save="Data Management",
|
||||
},
|
||||
music={
|
||||
title="Sala de Música",
|
||||
arrow="→",
|
||||
now="Reproduciendo:",
|
||||
|
||||
bgm="BGM",
|
||||
up="↑",
|
||||
play="Reprod.",
|
||||
down="↓",
|
||||
},
|
||||
login={
|
||||
title="Entrar/Registrarse",
|
||||
username="Nombre de Usuario",
|
||||
email="Correo Elec.",
|
||||
code="Código de Invit.",
|
||||
password="Contraseña",
|
||||
password2="Repetir Contr.",
|
||||
},
|
||||
account={
|
||||
title="Cuenta",
|
||||
},
|
||||
sound={
|
||||
title="Sala de SE",
|
||||
sfx="SFX",
|
||||
voc="Voces",
|
||||
|
||||
-- move="Move",
|
||||
-- lock="Lock",
|
||||
-- drop="Drop",
|
||||
-- fall="Fall",
|
||||
-- rotate="Rotate",
|
||||
-- rotatekick="Rotatekick",
|
||||
-- hold="Hold",
|
||||
-- prerotate="Prerotate",
|
||||
-- prehold="Prehold",
|
||||
-- _pc="PC",
|
||||
|
||||
-- clear1="clear 1",
|
||||
-- clear2="clear 2",
|
||||
-- clear3="clear 3",
|
||||
-- clear4="clear 4",
|
||||
-- spin0="spin 0",
|
||||
-- spin1="spin 1",
|
||||
-- spin2="spin 2",
|
||||
-- spin3="spin 3",
|
||||
|
||||
-- _1="Single",
|
||||
-- _2="Double",
|
||||
-- _3="Triple",
|
||||
-- _4="Techrash",
|
||||
-- z0="Z-spin",
|
||||
-- z1="Z-spin 1",
|
||||
-- z2="Z-spin 2",
|
||||
-- z3="Z-spin 3",
|
||||
-- s0="S-spin",
|
||||
-- s1="S-spin 1",
|
||||
-- s2="S-spin 2",
|
||||
-- s3="S-spin 3",
|
||||
|
||||
-- j0="J-spin",
|
||||
-- j1="J-spin 1",
|
||||
-- j2="J-spin 2",
|
||||
-- j3="J-spin 3",
|
||||
-- l0="L-spin",
|
||||
-- l1="L-spin 1",
|
||||
-- l2="L-spin 2",
|
||||
-- l3="L-spin 3",
|
||||
|
||||
-- t0="T-spin",
|
||||
-- t1="T-spin 1",
|
||||
-- t2="T-spin 2",
|
||||
-- t3="T-spin 3",
|
||||
-- o0="O-spin",
|
||||
-- o1="O-spin 1",
|
||||
-- o2="O-spin 2",
|
||||
-- o3="O-spin 3",
|
||||
|
||||
-- i0="I-spin",
|
||||
-- i1="I-spin 1",
|
||||
-- i2="I-spin 2",
|
||||
-- i3="I-spin 3",
|
||||
|
||||
-- mini="Mini",
|
||||
-- b2b="B2B",
|
||||
-- b3b="B3B",
|
||||
-- pc="PC",
|
||||
},
|
||||
minigame={
|
||||
p15="Puzzle-15",
|
||||
schulte_G="Grilla Schulte",
|
||||
pong="Pong",
|
||||
},
|
||||
p15={
|
||||
reset="Mezclar",
|
||||
color="Color",
|
||||
blind="A ciegas",
|
||||
slide="Mover",
|
||||
pathVis="Mostrar Movs.",
|
||||
revKB="Deshacer",
|
||||
},
|
||||
schulte_G={
|
||||
reset="Reiniciar",
|
||||
rank="Tamaño",
|
||||
blind="A ciegas",
|
||||
disappear="No mostrar",
|
||||
tapFX="Sonido al pulsar",
|
||||
},
|
||||
pong={
|
||||
reset="Reiniciar",
|
||||
},
|
||||
AtoZ={
|
||||
-- level="Level",
|
||||
reset="Reiniciar",
|
||||
},
|
||||
savedata={
|
||||
-- exportUnlock="Export Unlock",
|
||||
-- exportData="Export Data",
|
||||
-- exportSetting="Export Setting",
|
||||
-- exportVK="Export VK",
|
||||
|
||||
-- importUnlock="Import Unlock",
|
||||
-- importData="Import Data",
|
||||
-- importSetting="Import Setting",
|
||||
-- importVK="Import VK",
|
||||
|
||||
reset="¿Reiniciar?",
|
||||
resetUnlock="Reiniciar rangos",
|
||||
resetData="Reiniciar datos",
|
||||
resetALL="Reiniciar todo",
|
||||
},
|
||||
},
|
||||
modes={
|
||||
["sprint_10"]= {"Sprint", "10L", "¡Limpia 10 líneas!"},
|
||||
["sprint_20"]= {"Sprint", "20L", "¡Limpia 20 líneas!"},
|
||||
["sprint_40"]= {"Sprint", "40L", "¡Limpia 40 líneas!"},
|
||||
["dig_10"]= {"Queso", "10L", "Limpia 10 líneas de queso."},
|
||||
["dig_40"]= {"Queso", "40L", "Limpia 40 líneas de queso."},
|
||||
["dig_100"]= {"Queso", "100L", "Limpia 100 líneas de queso."},
|
||||
["dig_400"]= {"Queso", "400L", "Limpia 400 líneas de queso."},
|
||||
["dig_1000"]= {"Queso", "1000L", "Limpia 1000 líneas de queso."},
|
||||
["sprint_100"]= {"Sprint", "100L", "¡Limpia 100 líneas!"},
|
||||
["sprint_400"]= {"Sprint", "400L", "¡Limpia 400 líneas!"},
|
||||
["sprint_1000"]= {"Sprint", "1000L", "¡Limpia 1000 líneas!"},
|
||||
["drought_normal"]= {"Sequía", "100L", "¡Sin piezas I!"},
|
||||
["drought_lunatic"]= {"Sequía", "100L", "Guat de foc..."},
|
||||
["marathon_normal"]= {"Maratón", "Normal", "Maratón de 200 líneas con velocidad en aumento."},
|
||||
["marathon_hard"]= {"Maratón", "Difícil", "Maratón de 200 líneas a velocidad máxima."},
|
||||
["marathon_ultimate"]= {"Maratón", "Supremo", "¡Sólo puedes limpiar singles, y sin combo!"},
|
||||
["solo_1"]= {"VS.", "Fácil", "¡Derrota a la CPU!"},
|
||||
["solo_2"]= {"VS.", "Normal", "¡Derrota a la CPU!"},
|
||||
["solo_3"]= {"VS.", "Difícil", "¡Derrota a la CPU!"},
|
||||
["solo_4"]= {"VS.", "Lunático", "¡Derrota a la CPU!"},
|
||||
["solo_5"]= {"VS.", "Supremo", "¡Derrota a la CPU!"},
|
||||
["techmino49_easy"]= {"Tech 49", "Fácil", "Batalla de 49 jugadores. ¡El último en pie gana!"},
|
||||
["techmino49_hard"]= {"Tech 49", "Difícil", "Batalla de 49 jugadores. ¡El último en pie gana!"},
|
||||
["techmino49_ultimate"]={"Tech 49", "Supremo", "Batalla de 49 jugadores. ¡El último en pie gana!"},
|
||||
["techmino99_easy"]= {"Tech 99", "Fácil", "Batalla de 99 jugadores. ¡El último en pie gana!"},
|
||||
["techmino99_hard"]= {"Tech 99", "Difícil", "Batalla de 99 jugadores. ¡El último en pie gana!"},
|
||||
["techmino99_ultimate"]={"Tech 99", "Supremo", "Batalla de 99 jugadores. ¡El último en pie gana!"},
|
||||
["round_1"]= {"Por Turnos", "Fácil", "Modo ajedrez."},
|
||||
["round_2"]= {"Por Turnos", "Normal", "Modo ajedrez."},
|
||||
["round_3"]= {"Por Turnos", "Difícil", "Modo ajedrez."},
|
||||
["round_4"]= {"Por Turnos", "Lunático", "Modo ajedrez."},
|
||||
["round_5"]= {"Por Turnos", "Supremo", "Modo ajedrez."},
|
||||
["master_beginner"]= {"Master", "Lunático", "Para principiantes en 20G"},
|
||||
["master_advance"]= {"Master", "Supremo", "¡Desafío profesional de 20G!"},
|
||||
["master_final"]= {"Master", "FINAL", "El verdadero 20G Supremo: el final es inalcanzable."},
|
||||
["GM"]= {"GrandMaster", "GM", "Para ser un gran maestro, acepta este desafío"},
|
||||
["blind_easy"]= {"A Ciegas", "Parcial", "Para novatos."},
|
||||
["blind_normal"]= {"A Ciegas", "Total", "Para jugadores intermedios."},
|
||||
["blind_hard"]= {"A Ciegas", "Inmediato", "Para jugadores experimentados"},
|
||||
["blind_lunatic"]= {"A Ciegas", "Inmediato+", "Para profesionales."},
|
||||
["blind_ultimate"]= {"A Ciegas", "?", "¿Estás preparado?"},
|
||||
["blind_wtf"]= {"A Ciegas", "Guat de Foc", "No, no lo estás."},
|
||||
["classic_fast"]= {"Clásico", "CTWC", "Modo clásico con alta velocidad."},
|
||||
["survivor_easy"]= {"Supervivencia", "Fácil", "¿Cuánto tiempo podrás sobrevivir?"},
|
||||
["survivor_normal"]= {"Supervivencia", "Normal", "¿Cuánto tiempo podrás sobrevivir?"},
|
||||
["survivor_hard"]= {"Supervivencia", "Difícil", "¿Cuánto tiempo podrás sobrevivir?"},
|
||||
["survivor_lunatic"]= {"Supervivencia", "Lunático", "¿Cuánto tiempo podrás sobrevivir?"},
|
||||
["survivor_ultimate"]= {"Supervivencia", "Supremo", "¿Cuánto tiempo podrás sobrevivir?"},
|
||||
["attacker_hard"]= {"Atacante", "Difícil", "¡Practica la ofensiva!"},
|
||||
["attacker_ultimate"]= {"Atacante", "Supremo", "¡Practica la ofensiva!"},
|
||||
["defender_normal"]= {"Defensor", "Normal", "¡Practica la defensa!"},
|
||||
["defender_lunatic"]= {"Defensor", "Lunático", "¡Practica la defensa!"},
|
||||
["dig_hard"]= {"Downstack", "Difícil", "¡Practica el downstackeo!"},
|
||||
["dig_ultimate"]= {"Downstack", "Supremo", "¡Practica el downstackeo!"},
|
||||
["bigbang"]= {"Big Bang", "Fácil", "¡Tutorial de All-spins!\n[No finalizado]"},
|
||||
["c4wtrain_normal"]= {"Entrenar C4W", "Normal", "Combos infinitos."},
|
||||
["c4wtrain_lunatic"]= {"Entrenar C4W", "Lunático", "Combos infinitos."},
|
||||
["pctrain_normal"]= {"Entrenar PC", "Normal", "Modo sencillo para practicar Perfect Clears."},
|
||||
["pctrain_lunatic"]= {"Entrenar PC", "Lunático", "Modo sencillo para practicar Perfect Clears."},
|
||||
["pcchallenge_normal"]= {"Desafío de PCs", "Normal", "¡Consigue los PCs que puedas en 100 líneas!"},
|
||||
["pcchallenge_hard"]= {"Desafío de PCs", "Difícil", "¡Consigue los PCs que puedas en 100 líneas!"},
|
||||
["pcchallenge_lunatic"]={"Desafío de PCs", "Lunático", "¡Consigue los PCs que puedas en 100 líneas!"},
|
||||
["tech_normal"]= {"Tech", "Normal", "¡Mantén el B2B!"},
|
||||
["tech_normal2"]= {"Tech", "Normal+", "¡Sólo se permiten Spins y PCs!"},
|
||||
["tech_hard"]= {"Tech", "Difícil", "¡Mantén el B2B!"},
|
||||
["tech_hard2"]= {"Tech", "Difícil+", "¡Sólo se permiten Spins y PCs!"},
|
||||
["tech_lunatic"]= {"Tech", "Lunático", "¡Mantén el B2B!"},
|
||||
["tech_lunatic2"]= {"Tech", "Lunático+", "¡Sólo se permiten Spins y PCs!"},
|
||||
["tech_finesse"]= {"Tech", "Finesse", "¡No cometas errores de Finesse!"},
|
||||
["tech_finesse2"]= {"Tech", "Finesse+", "Sin errores de finesse, ¡pero tampoco clears normales!"},
|
||||
["tsd_easy"]= {"Desafío de TSD", "Fácil", "¡Sólo se permiten T-Spin Dobles!"},
|
||||
["tsd_hard"]= {"Desafío de TSD", "Difícil", "¡Sólo se permiten T-Spin Dobles!"},
|
||||
["tsd_ultimate"]= {"Desafío de TSD", "Supremo", "¡Sólo se permiten T-Spin Dobles!"},
|
||||
["zen"]= {"Zen", "200L", "200 líneas sin límite de tiempo."},
|
||||
["ultra"]= {"Ultra", "Extra", "¡Consigue el mayor puntaje posible en 2 minutos!"},
|
||||
["infinite"]= {"Infinito", "", "Modo Sandbox."},
|
||||
["infinite_dig"]= {"Infinito: Queso", "", "Limpia, limpia, más limpia que tú."},
|
||||
["custom_clear"]= {"Personalizado", "Normal", "¡Dibuja algo en la Matriz y luego límpialo!"},
|
||||
["custom_puzzle"]= {"Personalizado", "Puzzle", "¡Dibuja algo en la Matriz y luego recréalo con las piezas!"},
|
||||
["sprintFix"]= {"Sprint", "Sin mover a Izq./Der.", "Poder se puede 8)"},
|
||||
["sprintLock"]= {"Sprint", "Sin rotar", "Es imposible."},
|
||||
["sprintPenta"]= {"Sprint", "Pentominos", "¡Limpia 40 líneas con los 18 pentominos distintos!"},
|
||||
["sprintMPH"]= {"Sprint", "MPH", "Memoryless (sin memoria)\nPreviewless (sin pzas. siguientes)\nHoldless (sin reserva)."},
|
||||
},
|
||||
}
|
||||
@@ -1,503 +0,0 @@
|
||||
return{
|
||||
fallback=3,
|
||||
back="X",
|
||||
anykey="↓□↓",
|
||||
newVersion="&!!!???↓↓",
|
||||
httpTimeout="e??????x",
|
||||
marking="Game Author:MrZ_26\nIllegal recording if see this\nAny explanation invalid",
|
||||
holdR="→→→→R",
|
||||
|
||||
atkModeName={"?","( )","!","←→"},
|
||||
royale_remain="$1 ~",
|
||||
cmb={nil,"!","!!","!!!","!!!!","!!!!!","!!!!!!","!!!!!!!","!!!!!!!!","!!!!!!!!!","!!!!!!!!!!","!!!!!!!!!!!","!!!!!!!!!!!!","!!!!!!!!!!!!!","!!!!!!!!!!!!!!","!!!!!!!!!!!!!!!","!!!!!!!!!!!!!!!!","!!!!!!!!!!!!!!!!!","!!!!!!!!!!!!!!!!!!","!!!!!!!!!!!!!!!!!!!","!!!!!!!!!!!!!!!!!!!!",},
|
||||
spin=" ~",
|
||||
clear={"1","2","3","4","5","6"},
|
||||
mini="v",b2b="^ ",b3b="^^ ",
|
||||
PC="#<>#",HPC="<>",
|
||||
hold="[ ]",next="→",
|
||||
|
||||
stage="::$1::",
|
||||
great="!~",
|
||||
awesome="!!~",
|
||||
almost="...!",
|
||||
continue="~~",
|
||||
maxspeed="!!!",
|
||||
speedup="~!~",
|
||||
missionFailed="-X_X-",
|
||||
|
||||
win=": )",
|
||||
finish="&",
|
||||
gameover="x",
|
||||
pause="=",
|
||||
pauseCount="==",
|
||||
finesse_ap="AP",
|
||||
finesse_fc="FC",
|
||||
|
||||
page=":",
|
||||
|
||||
ai_fixed="X!!!",
|
||||
ai_prebag="X!!!",
|
||||
ai_mission="X!!!",
|
||||
settingSaved="~~~",
|
||||
settingSavingError="x!:",
|
||||
keyMapSaved="~~~",
|
||||
keyMapSavingError="x!:",
|
||||
VKSaved="~~~",
|
||||
VKSavingError="x!:",
|
||||
statSavingError="x!:",
|
||||
unlockSavingError="x!:",
|
||||
recSavingError="x!:",
|
||||
|
||||
needRestart="!!*#R#*!!",
|
||||
exportSuccess="~Out~",
|
||||
importSuccess="~In~",
|
||||
dataCorrupted="XXXXX",
|
||||
VKTchW="Tch↓",
|
||||
VKOrgW="Org↓",
|
||||
VKCurW="Cur↓",
|
||||
noScore="?_____?",
|
||||
highScore="__&:",
|
||||
newRecord="^!!!^",
|
||||
|
||||
noUsername="Input username",
|
||||
wrongEmail="Wrong email address",
|
||||
noPassword="Input password",
|
||||
diffPassword="Password don't match",
|
||||
errorMsg="An e??o? h@s occ^__ed @nd Techmino n__ds to r_st@rt.\n&**o* in#o h@$ b==n cre@ted, @nd y0u c@n $&nd it to the @uth0r.",
|
||||
|
||||
acts={
|
||||
"←:","→:",
|
||||
"R→:","←R:","R↑↓:",
|
||||
"↓↓:","↓:","□←:","F:","R:",
|
||||
"|←:","→|:","↓_:","↓1:","↓4:","↓10:",
|
||||
"←↓→↓:","→↓↓:","←↓→↓:","→↓←↓:",
|
||||
},
|
||||
pauseStat={
|
||||
"~:",
|
||||
"=/''/[ ]:",
|
||||
"□:",
|
||||
"-/↓:",
|
||||
"→/↓→:",
|
||||
"←:",
|
||||
"□↓:",
|
||||
"~↓:",
|
||||
"^^/^^^/#<>#/<>:",
|
||||
"!#!X:",
|
||||
},
|
||||
stat={
|
||||
"@:",
|
||||
"##:",
|
||||
"~:",
|
||||
"=/''/[ ]:",
|
||||
"□/-/→.:",
|
||||
"←/-↓/↑:",
|
||||
"↓/↓→.:",
|
||||
"^%/↓^%:",
|
||||
"^/^^:",
|
||||
"#<>#/<>:",
|
||||
"!#!X/%:",
|
||||
},
|
||||
help={
|
||||
"□□□□~~~, ?_?x ?",
|
||||
"□!!~~~,□□□□X",
|
||||
"□!!==*/*/*/*~",
|
||||
"",
|
||||
"bug reports/suggestions, sent to the author's testing group or email ~",
|
||||
"This is a free download available only through discord.gg/f9pUvkh",
|
||||
"The game downloaded from other sources may contain viruses,",
|
||||
"and only vibration & networking permissions are needed for mobile versions!",
|
||||
"The author is not responsible for any losses from modifying the game.",
|
||||
},
|
||||
WidgetText={
|
||||
main={
|
||||
offline="!",
|
||||
online="!!!",
|
||||
custom="_?!",
|
||||
stat="=___",
|
||||
setting="_?_",
|
||||
qplay="!",
|
||||
lang="言/A",
|
||||
help="???",
|
||||
quit="X",
|
||||
music="~~~",
|
||||
sound="=><=",
|
||||
minigame="^_^",
|
||||
},
|
||||
mode={
|
||||
start="!!!",
|
||||
},
|
||||
play={
|
||||
pause="||",
|
||||
},
|
||||
pause={
|
||||
setting="_?_ (S)",
|
||||
replay="## (P)",
|
||||
resume="!! (esc)",
|
||||
restart="_→_ (R)",
|
||||
quit="X (Q)",
|
||||
},
|
||||
setting_game={
|
||||
title="%~~%",
|
||||
|
||||
graphic="←Video",
|
||||
sound="Sound→",
|
||||
|
||||
ctrl="=?=",
|
||||
key="=?",
|
||||
touch="_?",
|
||||
reTime="3-2-1",
|
||||
maxNext="=123",
|
||||
layout="=-=-=",
|
||||
autoPause="A||",
|
||||
swap="=+=+=",
|
||||
fine="12 X 21",
|
||||
appLock="?XX(=626)",
|
||||
calc="?XX",
|
||||
},
|
||||
setting_video={
|
||||
title="{~~}",
|
||||
sound="←Sound",
|
||||
game="Game→",
|
||||
|
||||
block="==↓==",
|
||||
ghost="__↓__",
|
||||
center="+",
|
||||
|
||||
smooth="~~↓~~",
|
||||
grid="#",
|
||||
bagLine="123|123",
|
||||
|
||||
lockFX="↓_~",
|
||||
dropFX="↓~",
|
||||
moveFX="←→~",
|
||||
clearFX="↓↓↓~",
|
||||
shakeFX="~|~|~",
|
||||
atkFX="→→~",
|
||||
frame="|=|",
|
||||
|
||||
text="ABC",
|
||||
score="+123",
|
||||
warn="!↑↑↑!",
|
||||
highCam="↑__↑",
|
||||
nextPos="???←",
|
||||
fullscreen="|←→|",
|
||||
bg="__?__",
|
||||
power="+.",
|
||||
},
|
||||
setting_sound={
|
||||
title="(~~)",
|
||||
|
||||
game="←Game",
|
||||
graphic="Video→",
|
||||
|
||||
sfx="#!#",
|
||||
stereo="←~→",
|
||||
spawn="#[]#",
|
||||
bgm="#~#",
|
||||
vib="=~=",
|
||||
voc="~~~",
|
||||
},
|
||||
setting_control={
|
||||
title="[~~]",
|
||||
preview="?:",
|
||||
|
||||
das="x---x x x",arr="x x-x-x",
|
||||
sddas="↓---↓ ↓ ↓",sdarr="↓ ↓-↓-↓",
|
||||
ihs="![ ]",
|
||||
irs="!''",
|
||||
ims="!←→",
|
||||
reset="R",
|
||||
},
|
||||
setting_key={
|
||||
keyboard="[##]",
|
||||
joystick="^-^",
|
||||
help="..........................",
|
||||
},
|
||||
setting_skin={
|
||||
title="%{~~}",
|
||||
|
||||
prev="←",next="→",
|
||||
prev1="↑",next1="↓",spin1="R",
|
||||
prev2="↑",next2="↓",spin2="R",
|
||||
prev3="↑",next3="↓",spin3="R",
|
||||
prev4="↑",next4="↓",spin4="R",
|
||||
prev5="↑",next5="↓",spin5="R",
|
||||
prev6="↑",next6="↓",spin6="R",
|
||||
prev7="↑",next7="↓",spin7="R",
|
||||
skinR="R @%&",
|
||||
faceR="R ↑↓←→.",
|
||||
},
|
||||
setting_touch={
|
||||
default="$0",
|
||||
snap="_ _",
|
||||
option="_?",
|
||||
size="←→",
|
||||
},
|
||||
setting_touchSwitch={
|
||||
b1= "←:", b2="→:", b3="R→:", b4="←R:",
|
||||
b5= "R↑↓:", b6="↓↓:", b7="↓:", b8="□←:",
|
||||
b9= "F:", b10="R:", b11="←←:", b12="→→:",
|
||||
b13="↓_:", b14="↓1:", b15="↓4:", b16="↓10:",
|
||||
b17="←↓→↓:", b18="→↓↓:", b19="←↓→↓:",b20="→↓←↓:",
|
||||
norm="-",
|
||||
pro="+",
|
||||
hide="--?",
|
||||
track="~=?",
|
||||
sfx="#!#",
|
||||
vib="=~=",
|
||||
icon="@?",
|
||||
tkset="_~=_",
|
||||
alpha="+?",
|
||||
},
|
||||
setting_trackSetting={
|
||||
VKDodge="←_→",
|
||||
},
|
||||
customGame={
|
||||
title="!@#$%^&*",
|
||||
subTitle="!!",
|
||||
defSeq="0-[123]",
|
||||
noMsn="-x-",
|
||||
|
||||
drop="↓",
|
||||
lock="↓_",
|
||||
wait="→=",
|
||||
fall="↓=",
|
||||
|
||||
bg="{~}",
|
||||
bgm="(~)",
|
||||
|
||||
copy="Copy Field+Seq+Misn",
|
||||
paste="Paste Field+Seq+Misn",
|
||||
clear="Start-Clear",
|
||||
puzzle="Start-Puzzle",
|
||||
|
||||
advance="More (A)",
|
||||
field="Edit Field (F)",
|
||||
sequence="Edit Sequence (S)",
|
||||
mission="Edit Mission (M)",
|
||||
},
|
||||
custom_advance={
|
||||
title="!@#$%^&*",
|
||||
subTitle="##",
|
||||
|
||||
next="→",hold="[ ]",oncehold="[ ]*1",
|
||||
block="==↓==",
|
||||
ghost="__↓__",
|
||||
center="+",
|
||||
bagLine="123|123",
|
||||
highCam="↑__↑",
|
||||
nextPos="???←",
|
||||
bone="[]",
|
||||
|
||||
mindas="mDAS",
|
||||
minarr="mARR",
|
||||
minsdarr="msdARR",
|
||||
noTele="X→→X",
|
||||
ospin="O→Any",
|
||||
target="&=",
|
||||
visible="?=",
|
||||
freshLimit="@",
|
||||
easyFresh="↓_↓_↓_",
|
||||
fineKill="12 XX 21",
|
||||
opponent="^_^",
|
||||
life="<R>",
|
||||
pushSpeed="_↑_↑_",
|
||||
},
|
||||
custom_field={
|
||||
title="!@#$%^&*",
|
||||
subTitle="!@#$%^&* [##]",
|
||||
|
||||
b17="[ ]",
|
||||
any="_",
|
||||
space="×",
|
||||
pushLine="↑↑↑↑↑(K)",
|
||||
delLine="==X==(L)",
|
||||
|
||||
copy="→__",
|
||||
paste="__→",
|
||||
clear="XXX",
|
||||
demo="X ×",
|
||||
|
||||
newPage="+[_](N)",
|
||||
delPage="x[_](M)",
|
||||
prevPage="←[_]",
|
||||
nextPage="[_]→",
|
||||
},
|
||||
custom_sequence={
|
||||
title="!@#$%^&*",
|
||||
subTitle="Sequence",
|
||||
|
||||
sequence="$=",
|
||||
|
||||
Z="Z",S="S",J="J",L="L",T="T",O="O",I="I",
|
||||
Z5="Z5",S5="S5",P="P",Q="Q",F="F",E="E",T5="T5",U="U",
|
||||
V="V",W="W",X="X",J5="J5",L5="L5",R="R",Y="Y",N="N",H="H",I5="I5",
|
||||
left="←",
|
||||
right="→",
|
||||
ten="→→",
|
||||
backsp="<X",
|
||||
reset="R",
|
||||
copy="→__",
|
||||
paste="__→",
|
||||
},
|
||||
custom_mission={
|
||||
title="!@#$%^&*",
|
||||
subTitle="(!)",
|
||||
|
||||
_1="1",_2="2",_3="3",_4="4",
|
||||
any1="any1",any2="any2",any3="any3",any4="any4",
|
||||
PC="PC",
|
||||
Z1="Z1",S1="S1",J1="J1",L1="L1",T1="T1",O1="O1",I1="I1",
|
||||
Z2="Z2",S2="S2",J2="J2",L2="L2",T2="T2",O2="O2",I2="I2",
|
||||
Z3="Z3",S3="S3",J3="J3",L3="L3",T3="T3",O3="O3",I3="I3",
|
||||
O4="O4",I4="I4",
|
||||
left="←",right="→",
|
||||
ten="→→",
|
||||
backsp="<X",
|
||||
reset="R",
|
||||
copy="Copy",
|
||||
paste="Paste",
|
||||
mission="Force mission",
|
||||
},
|
||||
help={
|
||||
dict="z",
|
||||
staff="Orz",
|
||||
his="_&_",
|
||||
qq="_@_",
|
||||
},
|
||||
dict={
|
||||
title="TetroDictionary",
|
||||
keyboard="□□□",
|
||||
link="~~e>>",
|
||||
up="↑",
|
||||
down="↓",
|
||||
},
|
||||
stat={
|
||||
path="%$%",
|
||||
save="%0101%",
|
||||
},
|
||||
music={
|
||||
title="(~~~~)",
|
||||
arrow="→",
|
||||
now="~:",
|
||||
|
||||
bgm="#~#",
|
||||
up="↑",
|
||||
play="!!!",
|
||||
down="↓",
|
||||
},
|
||||
login={
|
||||
title="Log in / Sign up",
|
||||
username="#",
|
||||
email="@",
|
||||
code="%",
|
||||
password="*",
|
||||
password2="*",
|
||||
},
|
||||
account={
|
||||
title="@_@",
|
||||
},
|
||||
sound={
|
||||
title="SE Room",
|
||||
sfx="#!#",
|
||||
voc="~~~",
|
||||
|
||||
move="←→",
|
||||
lock="Lock",
|
||||
drop="Drop",
|
||||
fall="Fall",
|
||||
rotate="''",
|
||||
rotatekick="''_",
|
||||
hold="[ ]",
|
||||
prerotate="!''",
|
||||
prehold="![ ]",
|
||||
_pc="#<>#",
|
||||
|
||||
clear1="1",
|
||||
clear2="2",
|
||||
clear3="3",
|
||||
clear4="4",
|
||||
spin0="~0",
|
||||
spin1="~1",
|
||||
spin2="~2",
|
||||
spin3="~3",
|
||||
|
||||
_1="1",
|
||||
_2="2",
|
||||
_3="3",
|
||||
_4="4",
|
||||
z0="Z ~",
|
||||
z1="Z ~ 1",
|
||||
z2="Z ~ 2",
|
||||
z3="Z ~ 3",
|
||||
s0="S ~",
|
||||
s1="S ~ 1",
|
||||
s2="S ~ 2",
|
||||
s3="S ~ 3",
|
||||
|
||||
j0="J ~",
|
||||
j1="J ~ 1",
|
||||
j2="J ~ 2",
|
||||
j3="J ~ 3",
|
||||
l0="L ~",
|
||||
l1="L ~ 1",
|
||||
l2="L ~ 2",
|
||||
l3="L ~ 3",
|
||||
|
||||
t0="T ~",
|
||||
t1="T ~ 1",
|
||||
t2="T ~ 2",
|
||||
t3="T ~ 3",
|
||||
o0="O ~",
|
||||
o1="O ~ 1",
|
||||
o2="O ~ 2",
|
||||
o3="O ~ 3",
|
||||
|
||||
i0="I ~",
|
||||
i1="I ~ 1",
|
||||
i2="I ~ 2",
|
||||
i3="I ~ 3",
|
||||
|
||||
mini="v",
|
||||
b2b="^",
|
||||
b3b="^^",
|
||||
pc="#<>#",
|
||||
},
|
||||
minigame={
|
||||
p15="15 Puzzle",
|
||||
schulte_G="Schulte Grid",
|
||||
pong="Pong",
|
||||
},
|
||||
p15={
|
||||
reset="!@#$%",
|
||||
color="~~~",
|
||||
blind="???",
|
||||
slide="~_~",
|
||||
pathVis="--==>",
|
||||
revKB="Reverse",
|
||||
},
|
||||
schulte_G={
|
||||
reset="!@#$%",
|
||||
rank="←?→",
|
||||
blind="???",
|
||||
disappear="=X=",
|
||||
tapFX="↓ !",
|
||||
},
|
||||
pong={
|
||||
reset="R",
|
||||
},
|
||||
AtoZ={
|
||||
level="_ _ _",
|
||||
reset="R",
|
||||
},
|
||||
},
|
||||
getTip=function()
|
||||
local L="!@#$%^&*()-=_+[]{}\\|;:\'\",<.>/?"
|
||||
local s=""
|
||||
for _=1,math.random(16,26)do
|
||||
local p=math.random(#L)
|
||||
s=s..L:sub(p,p)
|
||||
end
|
||||
return s
|
||||
end,
|
||||
}
|
||||
@@ -1,306 +0,0 @@
|
||||
return{
|
||||
anykey="您开始了",
|
||||
newVersion="感谢更新,请看看更新了些啥",
|
||||
httpTimeout="没网或者网不好?",
|
||||
holdR="长按重开",
|
||||
|
||||
royale_remain="剩 $1 人",
|
||||
cmb={nil,"1连","2连","3连","4连","5连","6连","7连","8连","9连","10连!","11连!","12连!","13连!","14连!","15连!","16连!","17连!","18连!","19连!","MEGACMB"},
|
||||
spin="旋",
|
||||
clear={"消一","消二","消三","消四","卧槽","离谱"},
|
||||
mini="矬",b2b="牛逼",b3b="很牛逼",
|
||||
PC="消干净了",HPC="消挺干净",
|
||||
|
||||
great="不错的",
|
||||
awesome="您很强",
|
||||
almost="太舒服了",
|
||||
continue="您继续",
|
||||
maxspeed="速度封顶",
|
||||
|
||||
speedLV="速度等级",
|
||||
line="行数",atk="攻",eff="效",
|
||||
rpm="收每分",tsd="T2",
|
||||
grade="段位",techrash="消四",
|
||||
wave="波数",nextWave="下一波",
|
||||
combo="连击",maxcmb="最大连",
|
||||
pc="消干净了",ko="淘汰",
|
||||
|
||||
win="成了",
|
||||
finish="可以的",
|
||||
gameover="挂了",
|
||||
pause="歇会",
|
||||
pauseCount="歇多久了",
|
||||
finesse_ap="您",
|
||||
finesse_fc="全连",
|
||||
|
||||
noUsername="别闹。",
|
||||
wrongCode="有人邀请你注册了?",
|
||||
wrongEmail="别乱输。",
|
||||
noPassword="注册会不会?",
|
||||
diffPassword="字不认识?",
|
||||
|
||||
ranks={"菜","可","好","强","您"},
|
||||
|
||||
stat={
|
||||
"开了几次:",
|
||||
"玩了几把:",
|
||||
"玩了多久:",
|
||||
"按键/旋转/暂存:",
|
||||
"方块/消行/攻击:",
|
||||
"接收/抵消/上涨:",
|
||||
"挖掘/挖掘攻击:",
|
||||
"效率/挖掘效率:",
|
||||
"牛逼/很牛逼:",
|
||||
"消光/消半截:",
|
||||
"多余操作/极简率:",
|
||||
},
|
||||
WidgetText={
|
||||
setting_game={
|
||||
title="游戏设置",
|
||||
|
||||
graphic="←改画面",
|
||||
sound="改声音→",
|
||||
|
||||
ctrl="改控制",
|
||||
key="改键位",
|
||||
touch="改触屏",
|
||||
calc="家长锁",
|
||||
},
|
||||
setting_video={
|
||||
title="改画面",
|
||||
sound="←改声音",
|
||||
game="游戏设置→",
|
||||
|
||||
block="方块可见",
|
||||
ghost="阴影",
|
||||
center="中心",
|
||||
|
||||
lockFX="锁定特效",
|
||||
dropFX="下落特效",
|
||||
moveFX="移动特效",
|
||||
clearFX="消除特效",
|
||||
shakeFX="晃动特效",
|
||||
atkFX="攻击特效",
|
||||
|
||||
text="招式名",
|
||||
score="跳分",
|
||||
highCam="拉镜",
|
||||
},
|
||||
setting_sound={
|
||||
title="改声音",
|
||||
|
||||
game="←游戏设置",
|
||||
graphic="改画面→",
|
||||
|
||||
spawn="出块",
|
||||
bgm="曲",
|
||||
vib="嗡嗡",
|
||||
cv="谁",
|
||||
},
|
||||
setting_control={
|
||||
title="改控制",
|
||||
reset="重设",
|
||||
},
|
||||
setting_skin={
|
||||
title="改外观",
|
||||
},
|
||||
setting_touchSwitch={
|
||||
basic="阳间",
|
||||
pro="阴间",
|
||||
},
|
||||
help={
|
||||
dict="词典",
|
||||
staff="游戏谁做的",
|
||||
his="黑历史",
|
||||
qq="QQ对线",
|
||||
},
|
||||
login={
|
||||
password2="你觉得应该填啥",
|
||||
},
|
||||
sound={
|
||||
title="音效室",
|
||||
sfx="音效",
|
||||
voc="语音",
|
||||
|
||||
hold="暂存",
|
||||
prehold="提前暂存",
|
||||
_pc="消干净了",
|
||||
|
||||
spin0="空旋转",
|
||||
spin1="旋转消一",
|
||||
spin2="旋转消二",
|
||||
spin3="旋转消三",
|
||||
|
||||
z0="Z旋",
|
||||
z1="Z旋消一",
|
||||
z2="Z旋消二",
|
||||
z3="Z旋消三",
|
||||
s0="S旋",
|
||||
s1="S旋消一",
|
||||
s2="S旋消二",
|
||||
s3="S旋消三",
|
||||
|
||||
j0="J旋",
|
||||
j1="J旋消一",
|
||||
j2="J旋消二",
|
||||
j3="J旋消三",
|
||||
l0="L旋",
|
||||
l1="L旋消一",
|
||||
l2="L旋消二",
|
||||
l3="L旋消三",
|
||||
|
||||
t0="T旋",
|
||||
t1="T旋消一",
|
||||
t2="T旋消二",
|
||||
t3="T旋消三",
|
||||
o0="O旋",
|
||||
o1="O旋消一",
|
||||
o2="O旋消二",
|
||||
o3="O旋消三",
|
||||
|
||||
i0="I旋",
|
||||
i1="I旋消一",
|
||||
i2="I旋消二",
|
||||
i3="I旋消三",
|
||||
|
||||
mini="矬",
|
||||
b2b="牛逼",
|
||||
b3b="很牛逼",
|
||||
pc="消干净了",
|
||||
},
|
||||
p15={
|
||||
reset="打乱",
|
||||
color="彩",
|
||||
blind="盲",
|
||||
slide="滑动",
|
||||
pathVis="路径显示",
|
||||
revKB="键盘反向",
|
||||
},
|
||||
schulte_G={
|
||||
reset="重开",
|
||||
rank="尺寸",
|
||||
blind="盲",
|
||||
disappear="消失",
|
||||
tapFX="动画",
|
||||
},
|
||||
},
|
||||
modes={
|
||||
["sprint_10"]= {"竞速", "10L", "消10行"},
|
||||
["sprint_20"]= {"竞速", "20L", "消20行"},
|
||||
["sprint_40"]= {"竞速", "40L", "消40行"},
|
||||
["dig_10"]= {"挖掘", "10L", "挖10行"},
|
||||
["dig_40"]= {"挖掘", "40L", "挖40行"},
|
||||
["dig_100"]= {"挖掘", "100L", "挖100行"},
|
||||
["dig_400"]= {"挖掘", "400L", "挖400行"},
|
||||
["dig_1000"]= {"挖掘", "1000L", "挖1000行"},
|
||||
["sprint_100"]= {"竞速", "100L", "消100行"},
|
||||
["sprint_400"]= {"竞速", "400L", "消400行"},
|
||||
["sprint_1000"]= {"竞速", "1000L", "消1000行"},
|
||||
["drought_normal"]= {"干旱", "100L", "放轻松,简单得很"},
|
||||
["drought_lunatic"]= {"干旱", "100L", "有趣的要来了"},
|
||||
["marathon_normal"]= {"马拉松", "普通", "休闲模式"},
|
||||
["marathon_hard"]= {"马拉松", "困难", "休闲模式"},
|
||||
["marathon_ultimate"]= {"马拉松", "极限", "你再秀?"},
|
||||
["solo_1"]= {"单挑", "简单", "鲨AI"},
|
||||
["solo_2"]= {"单挑", "普通", "鲨AI"},
|
||||
["solo_3"]= {"单挑", "困难", "鲨AI"},
|
||||
["solo_4"]= {"单挑", "疯狂", "鲨AI"},
|
||||
["solo_5"]= {"单挑", "极限", "鲨AI"},
|
||||
["techmino49_easy"]= {"49人混战", "简单", "这我岂不是乱鲨"},
|
||||
["techmino49_hard"]= {"49人混战", "困难", "这我岂不是乱鲨"},
|
||||
["techmino49_ultimate"]={"49人混战", "极限", "你吃鸡率多少?"},
|
||||
["techmino99_easy"]= {"99人混战", "简单", "这我岂不是乱鲨"},
|
||||
["techmino99_hard"]= {"99人混战", "困难", "这我岂不是乱鲨"},
|
||||
["techmino99_ultimate"]={"99人混战", "极限", "你吃鸡率多少?"},
|
||||
["round_1"]= {"回合制", "简单", "下棋"},
|
||||
["round_2"]= {"回合制", "普通", "下棋"},
|
||||
["round_3"]= {"回合制", "困难", "下棋"},
|
||||
["round_4"]= {"回合制", "疯狂", "下棋"},
|
||||
["round_5"]= {"回合制", "极限", "下棋"},
|
||||
["master_beginner"]= {"大师", "疯狂", "无脑20G"},
|
||||
["master_advance"]= {"大师", "极限", "简单20G"},
|
||||
["master_final"]= {"大师", "终点", "究极20G:真正的游戏"},
|
||||
["master_phantasm"]= {"大师", "虚幻", "虚幻20G:好玩"},
|
||||
["GM"]= {"宗师", "GM", "你行你上"},
|
||||
["blind_easy"]= {"隐形", "半隐", "谁都能玩"},
|
||||
["blind_normal"]= {"隐形", "全隐", "稍加练习即可"},
|
||||
["blind_hard"]= {"隐形", "瞬隐", "和上一个一样"},
|
||||
["blind_lunatic"]= {"隐形", "瞬隐+", "这个确实挺难的"},
|
||||
["blind_ultimate"]= {"隐形", "啊这", "你准备好了吗"},
|
||||
["blind_wtf"]= {"隐形", "不会吧", "还没准备好"},
|
||||
["classic_fast"]= {"高速经典", "CTWC", "就这?简单"},
|
||||
["survivor_easy"]= {"生存", "简单", "这都玩不下去?不会吧"},
|
||||
["survivor_normal"]= {"生存", "普通", "呵呵,这都玩不过?"},
|
||||
["survivor_hard"]= {"生存", "困难", "所以呢?"},
|
||||
["survivor_lunatic"]= {"生存", "疯狂", "然后呢?"},
|
||||
["survivor_ultimate"]= {"生存", "极限", "舒服了"},
|
||||
["attacker_hard"]= {"进攻", "困难", "进攻练习"},
|
||||
["attacker_ultimate"]= {"进攻", "极限", "进攻练习"},
|
||||
["defender_normal"]= {"防守", "普通", "防守练习"},
|
||||
["defender_lunatic"]= {"防守", "疯狂", "防守练习"},
|
||||
["dig_hard"]= {"挖掘", "困难", "挖掘练习"},
|
||||
["dig_ultimate"]= {"挖掘", "极限", "挖掘练习"},
|
||||
["bigbang"]= {"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"},
|
||||
["c4wtrain_normal"]= {"C4W练习", "普通", "无 限 连 击"},
|
||||
["c4wtrain_lunatic"]= {"C4W练习", "疯狂", "无 限 连 击"},
|
||||
["pctrain_normal"]= {"全清训练", "普通", "随便打打"},
|
||||
["pctrain_lunatic"]= {"全清训练", "疯狂", "就那几个题,没难度"},
|
||||
["pcchallenge_normal"]= {"全清挑战", "普通", "100行内刷PC"},
|
||||
["pcchallenge_hard"]= {"全清挑战", "困难", "100行内刷PC"},
|
||||
["pcchallenge_lunatic"]={"全清挑战", "疯狂", "100行内刷PC"},
|
||||
["tech_normal"]= {"科研", "普通", "禁止断B2B"},
|
||||
["tech_normal2"]= {"科研", "普通+", "仅允许spin与PC"},
|
||||
["tech_hard"]= {"科研", "困难", "禁止断B2B"},
|
||||
["tech_hard2"]= {"科研", "困难+", "仅允许spin与PC"},
|
||||
["tech_lunatic"]= {"科研", "疯狂", "禁止断B2B"},
|
||||
["tech_lunatic2"]= {"科研", "疯狂+", "仅允许spin与PC"},
|
||||
["tech_finesse"]= {"科研", "极简", "强制最简操作"},
|
||||
["tech_finesse2"]= {"科研", "极简+", "禁止普通消除,强制最简操作"},
|
||||
["tsd_easy"]= {"TSD挑战", "简单", "刷T2"},
|
||||
["tsd_hard"]= {"TSD挑战", "困难", "刷T2"},
|
||||
["tsd_ultimate"]= {"TSD挑战", "极限", "刷T2"},
|
||||
["zen"]= {"禅", "200", "不限时200行"},
|
||||
["ultra"]= {"限时打分", "挑战", "2分钟刷分"},
|
||||
["infinite"]= {"无尽", "", "真的有人会玩这个?"},
|
||||
["infinite_dig"]= {"无尽:挖掘", "", "闲得慌的话来挖"},
|
||||
["custom_clear"]= {"自定义", "普通", "试验场"},
|
||||
["custom_puzzle"]= {"自定义", "拼图", "宁就是方块艺术家"},
|
||||
["sprintFix"]= {"竞速", "无移动", "这是可能的。"},
|
||||
["sprintLock"]= {"竞速", "无旋转", "这不可能。"},
|
||||
["sprintPenta"]= {"竞速", "五连块", "离谱"},
|
||||
["sprintMPH"]= {"竞速", "纯净", "听说你反应很快?"},
|
||||
},
|
||||
getTip={refuseCopy=true,
|
||||
"100apm?你倒是不用开局定式连续打几把",
|
||||
"10连pc不是随手?",
|
||||
"20G很难?是个人都能玩吧。",
|
||||
"20TSD不难吧。",
|
||||
"3pps不是人均水平?",
|
||||
"40行还要40多秒,就这?",
|
||||
"别会个c4w就以为自己多强,这是基本功罢了。",
|
||||
"别人只用一只手都能玩,你呢?",
|
||||
"不会吧不会吧,真的还有人不能随手Tspin?",
|
||||
"除了雨宫太阳你还认识谁?Jonas知道吗?Ajanba听过吗?",
|
||||
"还搁这玩手机呢,作业做完了?",
|
||||
"极限20G不是随手通?",
|
||||
"叫你多练就多练,想着几天变神仙,当自己是谁?",
|
||||
"先练基础不听,现在速度没有,Tspin完地形一塌糊涂,开心吗?",
|
||||
"经典块跟现代块是两个游戏,别拿多少年前水平秀优越,请从头练起。",
|
||||
"卖弱不是谦虚,请看场合。",
|
||||
"卖弱小心遭报应",
|
||||
"满口PCDT信天翁,还会点别的么?",
|
||||
"没那水平别天天整什么花里胡哨的,人玩几年你想几天赶上?",
|
||||
"全隐40行全消四很难吗??",
|
||||
"少玩点,多眨眨眼,不听瞎了别怪我没提醒你",
|
||||
"设置都看过一遍了吗?明明都有还嫌功能少,谁的问题?",
|
||||
"谁说一定要强的人才叫卖弱?不是最菜就一定在有人眼中是卖弱",
|
||||
"双旋和极简尽早学起来…懒得学以后亏的是自己",
|
||||
"天天催更催更,你咋不来帮忙开发啊,真以为作者很强催催啥都有?",
|
||||
"天天卖弱,你一定把把150apm吧?",
|
||||
"问怎么练就好好问,别就一句话怎么变强,鬼知道你现在什么水平",
|
||||
"一口一个wtcl还不赶紧去练,你是不思进取还是不想好好说话?",
|
||||
"隐形很难?上电视那个水平一般都打成那样,属实自己不行看不起别人",
|
||||
"隐形哪难了,你练了吗?没练几个小时在这里说难是嫌葡萄酸?",
|
||||
"这不是休闲游戏…别怪关卡要求太高,就是你菜,请多练。",
|
||||
},
|
||||
}
|
||||
866
LANG/lang_zh.lua
866
LANG/lang_zh.lua
@@ -1,866 +0,0 @@
|
||||
return{
|
||||
back="返回",
|
||||
anykey="按任意键继续",
|
||||
newVersion="感谢更新!更新内容如下",
|
||||
httpTimeout="网络连接超时!",
|
||||
marking="游戏作者:MrZ_26\n任何视频/直播不得出现此水印\n任何转述声明无效",
|
||||
holdR="长按以重新开始",
|
||||
|
||||
atkModeName={"随机","徽章","击杀","反击"},
|
||||
royale_remain="剩余 $1 名玩家",
|
||||
cmb={nil,"1 Combo","2 Combo","3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!","15 Combo!","16 Combo!","17 Combo!","18 Combo!","19 Combo!","MEGACMB"},
|
||||
spin="-spin ",
|
||||
clear={"single","double","triple","Techrash","Pentcrash","Hexcrash"},
|
||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||
PC="Perfect Clear",HPC="Half Clear",
|
||||
hold="暂存",next="下一个",
|
||||
replaying="[回放]",
|
||||
|
||||
stage="关卡 $1",
|
||||
great="Great!",
|
||||
awesome="Awesome.",
|
||||
almost="Almost!",
|
||||
continue="Continue.",
|
||||
maxspeed="最高速度",
|
||||
speedup="速度加快",
|
||||
missionFailed="非任务消除",
|
||||
|
||||
speedLV="速度等级",
|
||||
line="行数",atk="攻击",eff="效率",
|
||||
rpm="RPM",tsd="T2",
|
||||
grade="段位",techrash="Techrash",
|
||||
wave="波数",nextWave="下一波",
|
||||
combo="Combo",maxcmb="Max Combo",
|
||||
pc="Perfect Clear",ko="KO",
|
||||
|
||||
win="胜利",
|
||||
finish="完成",
|
||||
gameover="游戏结束",
|
||||
pause="暂停",
|
||||
pauseCount="暂停统计",
|
||||
finesse_ap="All Perfect",
|
||||
finesse_fc="Full Combo",
|
||||
|
||||
page="页面:",
|
||||
|
||||
ai_fixed="不能同时开启AI和固定序列",
|
||||
ai_prebag="不能同时开启AI和自定义序列",
|
||||
ai_mission="不能同时开启AI和自定义任务",
|
||||
settingSaved="设置已保存",
|
||||
settingSavingError="设置保存失败:",
|
||||
keyMapSaved="键位设置已保存",
|
||||
keyMapSavingError="键位保存失败:",
|
||||
VKSaved="虚拟按键设置已保存",
|
||||
VKSavingError="虚拟按键保存失败:",
|
||||
statSavingError="统计保存失败:",
|
||||
unlockSavingError="解锁保存失败:",
|
||||
recSavingError="纪录保存失败:",
|
||||
switchSpawnSFX="请开启方块出生音效",
|
||||
ranks={"D","C","B","A","S"},
|
||||
|
||||
needRestart="重新开始以生效",
|
||||
|
||||
exportSuccess="导出成功",
|
||||
importSuccess="导入成功",
|
||||
dataCorrupted="数据损坏",
|
||||
|
||||
VKTchW="触摸点权重",
|
||||
VKOrgW="原始点权重",
|
||||
VKCurW="当前点权重",
|
||||
|
||||
noScore="暂无成绩",
|
||||
highScore="最佳成绩",
|
||||
newRecord="打破纪录",
|
||||
|
||||
getNoticeFail="拉取公告失败",
|
||||
getVersionFail="检测新版本失败",
|
||||
versionIsNew="游戏已是最新版本",
|
||||
versionIsOld="最新版本$1可以下载了!",
|
||||
|
||||
netErrorCode="网络错误码",
|
||||
jsonError="json错误",
|
||||
|
||||
noUsername="请填写用户名",
|
||||
wrongCode="请填写邀请码",
|
||||
wrongEmail="邮箱格式错误",
|
||||
noPassword="请填写密码",
|
||||
diffPassword="两次密码不一致",
|
||||
registerSuccessed="注册成功!",
|
||||
registerFailed="注册失败",
|
||||
|
||||
errorMsg="Techmino遭受了雷击,需要重新启动.\n我们已收集了一些错误信息,你可以向作者进行反馈.",
|
||||
|
||||
acts={
|
||||
"左移:","右移:",
|
||||
"顺时针旋转:","逆时针旋转:","180°旋转:",
|
||||
"硬降:","软降:",
|
||||
"暂存:","功能键:",
|
||||
"重新开始:",
|
||||
"左瞬移:","右瞬移:","软降到底:","软降一格:","软降四格:","软降十格:",
|
||||
"落在最左:","落在最右:","列在最左:","列在最右:",
|
||||
},
|
||||
|
||||
pauseStat={
|
||||
"时间:",
|
||||
"按键/旋转/暂存:",
|
||||
"落块:",
|
||||
"消行/挖掘:",
|
||||
"攻击/挖掘攻击:",
|
||||
"上涨/接收/抵消:",
|
||||
"消除:",
|
||||
"Spin:",
|
||||
"B2B/B3B/PC/HPC:",
|
||||
"Finesse:",
|
||||
},
|
||||
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
||||
radarData={
|
||||
"D'PM",
|
||||
"ADPM",
|
||||
"APM",
|
||||
"SPM",
|
||||
"L'PM",
|
||||
"DPM",
|
||||
},
|
||||
stat={
|
||||
"游戏运行次数:",
|
||||
"游戏局数:",
|
||||
"游戏时间:",
|
||||
"按键/旋转/暂存:",
|
||||
"方块/消行/攻击:",
|
||||
"接收/抵消/上涨:",
|
||||
"挖掘/挖掘攻击:",
|
||||
"效率/挖掘效率:",
|
||||
"满贯/大满贯:",
|
||||
"全/半清:",
|
||||
"多余操作/极简率:",
|
||||
},
|
||||
help={
|
||||
"既然你能玩到这个游戏,应该也不需要什么帮助吧?",
|
||||
"这只是一个普通的方块游戏,请勿称此游戏为某某某方块",
|
||||
"从TO/C2/KOS/TGM3/JS等方块获得过灵感",
|
||||
"",
|
||||
"使用LOVE2D引擎",
|
||||
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
||||
"仅通过内测群1127702001进行免费下载/更新",
|
||||
"其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了振动&联网权限!",
|
||||
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
|
||||
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
|
||||
},
|
||||
staff={
|
||||
"作者:MrZ 邮箱:1046101471@qq.com",
|
||||
"使用LOVE2D引擎",
|
||||
"",
|
||||
"程序: MrZ, [T9972, FinnTenzor]",
|
||||
"美术: MrZ, [Gnyar, T0722]",
|
||||
"音乐: MrZ, [T0722]",
|
||||
"音效/语音: MrZ, Miya 演出: 模电, HBM",
|
||||
"测试: 思竣 官网: 渣渣120",
|
||||
"英文: User670, MattMayuga",
|
||||
"法文: Mizu 西文: Mr.Faq",
|
||||
"",
|
||||
"特别感谢:",
|
||||
"Flyz, Farter, 蕴空之灵,",
|
||||
"茶管, [所有内测人员]",
|
||||
},
|
||||
used=[[
|
||||
使用工具:
|
||||
Beepbox
|
||||
GFIE
|
||||
Goldwave
|
||||
使用库:
|
||||
Cold_Clear [MinusKelvin]
|
||||
json.lua [rxi]
|
||||
profile.lua [itraykov]
|
||||
simple-love-lights [dylhunn]
|
||||
]],
|
||||
support="支持作者",
|
||||
group="官方QQ群(如果没有被暗改的话就是这个):1127702001",
|
||||
WidgetText={
|
||||
main={
|
||||
offline="单机游戏",
|
||||
online="联网游戏",
|
||||
custom="自定义",
|
||||
stat="统计信息",
|
||||
setting="设置",
|
||||
qplay="快速开始",
|
||||
lang="言/A",
|
||||
help="帮助",
|
||||
quit="退出",
|
||||
music="音乐室",
|
||||
sound="音效室",
|
||||
minigame="小游戏",
|
||||
},
|
||||
mode={
|
||||
start="开始",
|
||||
},
|
||||
play={
|
||||
pause="暂停",
|
||||
},
|
||||
pause={
|
||||
setting="设置(S)",
|
||||
replay= "回放(P)",
|
||||
resume= "继续(esc)",
|
||||
restart="重新开始(R)",
|
||||
quit= "退出(Q)",
|
||||
},
|
||||
setting_game={
|
||||
title="游戏设置",
|
||||
graphic="←画面设置",
|
||||
sound="声音设置→",
|
||||
|
||||
ctrl="控制设置",
|
||||
key="键位设置",
|
||||
touch="触屏设置",
|
||||
reTime="开局等待时间",
|
||||
maxNext="最大预览数量",
|
||||
layout="外观",
|
||||
autoPause="失去焦点自动暂停",
|
||||
swap="组合键切换攻击模式",
|
||||
fine="极简操作提示音",
|
||||
appLock="软件锁(密码626)",
|
||||
calc="软件锁",
|
||||
},
|
||||
setting_video={
|
||||
title="画面设置",
|
||||
sound="←声音设置",
|
||||
game="游戏设置→",
|
||||
|
||||
block="方块可见",
|
||||
ghost="阴影透明度",
|
||||
center="旋转中心透明度",
|
||||
|
||||
smooth="平滑下落",
|
||||
grid="网格",
|
||||
bagLine="包分界线",
|
||||
|
||||
lockFX="锁定特效等级",
|
||||
dropFX="下落特效等级",
|
||||
moveFX="移动特效等级",
|
||||
clearFX="消除特效等级",
|
||||
shakeFX="晃动特效等级",
|
||||
atkFX="攻击特效等级",
|
||||
frame="绘制帧率",
|
||||
|
||||
text="消行文本",
|
||||
score="分数动画",
|
||||
warn="死亡预警",
|
||||
highCam="超屏视野",
|
||||
nextPos="生成预览",
|
||||
fullscreen="全屏",
|
||||
bg="背景",
|
||||
power="电量显示",
|
||||
},
|
||||
setting_sound={
|
||||
title="声音设置",
|
||||
game="←游戏设置",
|
||||
graphic="画面设置→",
|
||||
|
||||
sfx="音效",
|
||||
stereo="立体声",
|
||||
spawn="方块生成",
|
||||
bgm="音乐",
|
||||
vib="振动",
|
||||
voc="语音",
|
||||
cv="语音包",
|
||||
apply="应用",
|
||||
},
|
||||
setting_control={
|
||||
title="控制设置",
|
||||
preview="预览",
|
||||
|
||||
das="DAS",arr="ARR",
|
||||
sddas="软降DAS",sdarr="软降ARR",
|
||||
ihs="提前Hold",
|
||||
irs="提前旋转",
|
||||
ims="提前移动",
|
||||
reset="重置",
|
||||
},
|
||||
setting_key={
|
||||
keyboard="键盘",
|
||||
joystick="手柄",
|
||||
help="方向键选择/翻页,回车/空格修改,esc返回",
|
||||
},
|
||||
setting_skin={
|
||||
title="外观设置",
|
||||
prev="←",next="→",
|
||||
prev1="↑",next1="↓",spin1="R",
|
||||
prev2="↑",next2="↓",spin2="R",
|
||||
prev3="↑",next3="↓",spin3="R",
|
||||
prev4="↑",next4="↓",spin4="R",
|
||||
prev5="↑",next5="↓",spin5="R",
|
||||
prev6="↑",next6="↓",spin6="R",
|
||||
prev7="↑",next7="↓",spin7="R",
|
||||
skinR="重置配色",
|
||||
faceR="重置方向",
|
||||
},
|
||||
setting_touch={
|
||||
default="默认组合",
|
||||
snap="吸附",
|
||||
option="选项",
|
||||
size="大小",
|
||||
},
|
||||
setting_touchSwitch={
|
||||
b1= "左移:", b2="右移:", b3="顺时针旋转:", b4="逆时针旋转:",
|
||||
b5= "180°旋转:",b6="硬降:", b7="软降:", b8="暂存:",
|
||||
b9= "功能键:", b10="重新开始:",b11="左瞬移:", b12="右瞬移:",
|
||||
b13="软降到底:",b14="软降一格:",b15="软降四格:", b16="软降十格:",
|
||||
b17="落在最左:",b18="落在最右:",b19="列在最左:", b20="列在最右:",
|
||||
norm="标准",
|
||||
pro="专业",
|
||||
hide="显示虚拟按键",
|
||||
track="按键自动跟踪",
|
||||
sfx="按键音效",
|
||||
vib="按键振动",
|
||||
icon="图标",
|
||||
tkset="跟踪设置",
|
||||
alpha="透明度",
|
||||
},
|
||||
setting_trackSetting={
|
||||
VKDodge="自动避让",
|
||||
},
|
||||
customGame={
|
||||
title="自定义游戏",
|
||||
subTitle="基本",
|
||||
defSeq="默认序列",
|
||||
noMsn="无任务",
|
||||
|
||||
drop="下落延迟",
|
||||
lock="锁定延迟",
|
||||
wait="出块等待",
|
||||
fall="消行延迟",
|
||||
|
||||
bg="背景",
|
||||
bgm="音乐",
|
||||
|
||||
copy="复制场地+序列+任务",
|
||||
paste="粘贴场地+序列+任务",
|
||||
clear="开始-消除",
|
||||
puzzle="开始-拼图",
|
||||
|
||||
advance="更多设置(A)",
|
||||
field="场地编辑(F)",
|
||||
sequence="序列编辑(S)",
|
||||
mission="任务编辑(M)",
|
||||
},
|
||||
custom_advance={
|
||||
title="自定义游戏",
|
||||
subTitle="高级",
|
||||
|
||||
next="Next",hold="Hold",oncehold="Hold一次",
|
||||
block="方块可见",
|
||||
ghost="阴影透明度",
|
||||
center="中心透明度",
|
||||
bagLine="包分界线",
|
||||
highCam="超屏视野",
|
||||
nextPos="生成预览",
|
||||
bone="骨块",
|
||||
|
||||
mindas="最小DAS",
|
||||
minarr="最小ARR",
|
||||
minsdarr="最小软降ARR",
|
||||
noTele="禁止瞬移",
|
||||
ospin="O-spin",
|
||||
target="目标行数",
|
||||
visible="能见度",
|
||||
freshLimit="锁延刷新限制",
|
||||
easyFresh="普通刷新锁延",
|
||||
fineKill="强制极简",
|
||||
opponent="对手",
|
||||
life="命数",
|
||||
pushSpeed="上涨速度",
|
||||
},
|
||||
custom_field={
|
||||
title="自定义游戏",
|
||||
subTitle="场地",
|
||||
|
||||
b17="[ ]",
|
||||
any="不定",
|
||||
space="×",
|
||||
pushLine="增加一行(K)",
|
||||
delLine="消除行(L)",
|
||||
|
||||
copy="复制",
|
||||
paste="粘贴",
|
||||
clear="清除",
|
||||
demo="不显示×",
|
||||
|
||||
newPage="新页面(N)",
|
||||
delPage="删除页面(M)",
|
||||
prevPage="上一页面",
|
||||
nextPage="下一页面",
|
||||
},
|
||||
custom_sequence={
|
||||
title="自定义游戏",
|
||||
subTitle="序列",
|
||||
|
||||
sequence="序列",
|
||||
|
||||
Z="Z",S="S",J="J",L="L",T="T",O="O",I="I",
|
||||
Z5="Z5",S5="S5",P="P",Q="Q",F="F",E="E",T5="T5",U="U",
|
||||
V="V",W="W",X="X",J5="J5",L5="L5",R="R",Y="Y",N="N",H="H",I5="I5",
|
||||
left="←",
|
||||
right="→",
|
||||
ten="→→",
|
||||
backsp="<X",
|
||||
reset="R",
|
||||
copy="复制",
|
||||
paste="粘贴",
|
||||
},
|
||||
custom_mission={
|
||||
title="自定义游戏",
|
||||
subTitle="任务",
|
||||
|
||||
_1="1",_2="2",_3="3",_4="4",
|
||||
any1="any1",any2="any2",any3="any3",any4="any4",
|
||||
PC="PC",
|
||||
Z1="Z1",S1="S1",J1="J1",L1="L1",T1="T1",O1="O1",I1="I1",
|
||||
Z2="Z2",S2="S2",J2="J2",L2="L2",T2="T2",O2="O2",I2="I2",
|
||||
Z3="Z3",S3="S3",J3="J3",L3="L3",T3="T3",O3="O3",I3="I3",
|
||||
O4="O4",I4="I4",
|
||||
left="←",right="→",
|
||||
ten="→→",
|
||||
backsp="<X",
|
||||
reset="R",
|
||||
copy="复制",
|
||||
paste="粘贴",
|
||||
mission="强制任务",
|
||||
},
|
||||
music={
|
||||
title="音乐室",
|
||||
arrow="→",
|
||||
now="正在播放:",
|
||||
|
||||
bgm="BGM",
|
||||
up="↑",
|
||||
play="播放",
|
||||
down="↓",
|
||||
},
|
||||
help={
|
||||
dict="小Z词典",
|
||||
staff="制作人员",
|
||||
his="更新历史",
|
||||
qq="作者QQ",
|
||||
},
|
||||
dict={
|
||||
title="小Z方块词典",
|
||||
keyboard="键盘",
|
||||
link="打开链接",
|
||||
up="↑",
|
||||
down="↓",
|
||||
},
|
||||
stat={
|
||||
path="打开存储目录",
|
||||
save="用户档案管理",
|
||||
},
|
||||
login={
|
||||
title="登录/注册",
|
||||
username="用户名",
|
||||
email="邮箱",
|
||||
code="邀请码",
|
||||
password="密码",
|
||||
password2="确认密码",
|
||||
},
|
||||
account={
|
||||
title="账户",
|
||||
},
|
||||
sound={
|
||||
title="音效室",
|
||||
sfx="音效",
|
||||
voc="语音",
|
||||
|
||||
move="移动",
|
||||
lock="锁定",
|
||||
drop="硬降",
|
||||
fall="行落下",
|
||||
rotate="旋转",
|
||||
rotatekick="旋转进洞",
|
||||
hold="Hold",
|
||||
prerotate="提前旋转",
|
||||
prehold="提前Hold",
|
||||
_pc="全消",
|
||||
|
||||
clear1="Single",
|
||||
clear2="Double",
|
||||
clear3="Triple",
|
||||
clear4="Techrash",
|
||||
spin0="spin 0",
|
||||
spin1="spin 1",
|
||||
spin2="spin 2",
|
||||
spin3="spin 3",
|
||||
|
||||
_1="Single",
|
||||
_2="Double",
|
||||
_3="Triple",
|
||||
_4="Techrash",
|
||||
z0="Z-spin",
|
||||
z1="Z-spin 1",
|
||||
z2="Z-spin 2",
|
||||
z3="Z-spin 3",
|
||||
s0="S-spin",
|
||||
s1="S-spin 1",
|
||||
s2="S-spin 2",
|
||||
s3="S-spin 3",
|
||||
|
||||
j0="J-spin",
|
||||
j1="J-spin 1",
|
||||
j2="J-spin 2",
|
||||
j3="J-spin 3",
|
||||
l0="L-spin",
|
||||
l1="L-spin 1",
|
||||
l2="L-spin 2",
|
||||
l3="L-spin 3",
|
||||
|
||||
t0="T-spin",
|
||||
t1="T-spin 1",
|
||||
t2="T-spin 2",
|
||||
t3="T-spin 3",
|
||||
o0="O-spin",
|
||||
o1="O-spin 1",
|
||||
o2="O-spin 2",
|
||||
o3="O-spin 3",
|
||||
|
||||
i0="I-spin",
|
||||
i1="I-spin 1",
|
||||
i2="I-spin 2",
|
||||
i3="I-spin 3",
|
||||
|
||||
mini="Mini",
|
||||
b2b="B2B",
|
||||
b3b="B3B",
|
||||
pc="PC",
|
||||
},
|
||||
minigame={
|
||||
p15="15 Puzzle",
|
||||
schulte_G="舒尔特方格",
|
||||
pong="Pong",
|
||||
AtoZ="A to Z",
|
||||
},
|
||||
p15={
|
||||
reset="打乱",
|
||||
color="颜色",
|
||||
blind="盲打",
|
||||
slide="滑动操作",
|
||||
pathVis="路径显示",
|
||||
revKB="键盘反向",
|
||||
},
|
||||
schulte_G={
|
||||
reset="重来",
|
||||
rank="尺寸",
|
||||
blind="盲打",
|
||||
disappear="消失",
|
||||
tapFX="点击动画",
|
||||
},
|
||||
pong={
|
||||
reset="重置",
|
||||
},
|
||||
AtoZ={
|
||||
level="关卡",
|
||||
reset="重置",
|
||||
},
|
||||
savedata={
|
||||
exportUnlock="导出地图进度",
|
||||
exportData="导出统计数据",
|
||||
exportSetting="导出设置",
|
||||
exportVK="导出虚拟按键布局",
|
||||
|
||||
importUnlock="导入地图进度",
|
||||
importData="导入统计数据",
|
||||
importSetting="导入设置",
|
||||
importVK="导入虚拟按键布局",
|
||||
|
||||
reset="重置?",
|
||||
resetUnlock="重置解锁/等级",
|
||||
resetData="重置统计",
|
||||
resetALL="清空所有数据",
|
||||
},
|
||||
},
|
||||
modes={
|
||||
["sprint_10"]= {"竞速", "10L", "消除10行"},
|
||||
["sprint_20"]= {"竞速", "20L", "消除20行"},
|
||||
["sprint_40"]= {"竞速", "40L", "消除40行"},
|
||||
["dig_10"]= {"挖掘", "10L", "挖掘10行"},
|
||||
["dig_40"]= {"挖掘", "40L", "挖掘40行"},
|
||||
["dig_100"]= {"挖掘", "100L", "挖掘100行"},
|
||||
["dig_400"]= {"挖掘", "400L", "挖掘400行"},
|
||||
["dig_1000"]= {"挖掘", "1000L", "挖掘1000行"},
|
||||
["sprint_100"]= {"竞速", "100L", "消除100行"},
|
||||
["sprint_400"]= {"竞速", "400L", "消除400行"},
|
||||
["sprint_1000"]= {"竞速", "1000L", "消除1000行"},
|
||||
["drought_normal"]= {"干旱", "100L", "你I没了"},
|
||||
["drought_lunatic"]= {"干旱", "100L", "后 妈 发 牌"},
|
||||
["marathon_normal"]= {"马拉松", "普通", "200行加速马拉松"},
|
||||
["marathon_hard"]= {"马拉松", "困难", "200行高速马拉松"},
|
||||
["marathon_ultimate"]= {"马拉松", "极限", "禁止0连击单消之外的任何操作"},
|
||||
["solo_1"]= {"单挑", "简单", "打败AI"},
|
||||
["solo_2"]= {"单挑", "普通", "打败AI"},
|
||||
["solo_3"]= {"单挑", "困难", "打败AI"},
|
||||
["solo_4"]= {"单挑", "疯狂", "打败AI"},
|
||||
["solo_5"]= {"单挑", "极限", "打败AI"},
|
||||
["techmino49_easy"]= {"49人混战", "简单", "49人混战,活到最后"},
|
||||
["techmino49_hard"]= {"49人混战", "困难", "49人混战,活到最后"},
|
||||
["techmino49_ultimate"]={"49人混战", "极限", "49人混战,活到最后"},
|
||||
["techmino99_easy"]= {"99人混战", "简单", "99人混战,活到最后"},
|
||||
["techmino99_hard"]= {"99人混战", "困难", "99人混战,活到最后"},
|
||||
["techmino99_ultimate"]={"99人混战", "极限", "99人混战,活到最后"},
|
||||
["round_1"]= {"回合制", "简单", "下棋模式"},
|
||||
["round_2"]= {"回合制", "普通", "下棋模式"},
|
||||
["round_3"]= {"回合制", "困难", "下棋模式"},
|
||||
["round_4"]= {"回合制", "疯狂", "下棋模式"},
|
||||
["round_5"]= {"回合制", "极限", "下棋模式"},
|
||||
["master_beginner"]= {"大师", "疯狂", "20G初心者练习"},
|
||||
["master_advance"]= {"大师", "极限", "上级者20G挑战"},
|
||||
["master_final"]= {"大师", "终点", "究极20G:无法触及的终点"},
|
||||
["master_phantasm"]= {"大师", "虚幻", "虚幻20G:???"},
|
||||
["GM"]= {"宗师", "GM", "成为方块大师"},
|
||||
["blind_easy"]= {"隐形", "半隐", "不强大脑"},
|
||||
["blind_normal"]= {"隐形", "全隐", "挺强大脑"},
|
||||
["blind_hard"]= {"隐形", "瞬隐", "很强大脑"},
|
||||
["blind_lunatic"]= {"隐形", "瞬隐+", "最强大脑"},
|
||||
["blind_ultimate"]= {"隐形", "啊这", "你准备好了吗"},
|
||||
["blind_wtf"]= {"隐形", "不会吧", "还没准备好"},
|
||||
["classic_fast"]= {"高速经典", "CTWC", "高速经典"},
|
||||
["survivor_easy"]= {"生存", "简单", "你能存活多久?"},
|
||||
["survivor_normal"]= {"生存", "普通", "你能存活多久?"},
|
||||
["survivor_hard"]= {"生存", "困难", "你能存活多久?"},
|
||||
["survivor_lunatic"]= {"生存", "疯狂", "你能存活多久?"},
|
||||
["survivor_ultimate"]= {"生存", "极限", "你能存活多久?"},
|
||||
["attacker_hard"]= {"进攻", "困难", "进攻练习"},
|
||||
["attacker_ultimate"]= {"进攻", "极限", "进攻练习"},
|
||||
["defender_normal"]= {"防守", "普通", "防守练习"},
|
||||
["defender_lunatic"]= {"防守", "疯狂", "防守练习"},
|
||||
["dig_hard"]= {"挖掘", "困难", "挖掘练习"},
|
||||
["dig_ultimate"]= {"挖掘", "极限", "挖掘练习"},
|
||||
["bigbang"]= {"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"},
|
||||
["c4wtrain_normal"]= {"C4W练习", "普通", "无 限 连 击"},
|
||||
["c4wtrain_lunatic"]= {"C4W练习", "疯狂", "无 限 连 击"},
|
||||
["pctrain_normal"]= {"全清训练", "普通", "简易PC题库,熟悉全清定式的组合"},
|
||||
["pctrain_lunatic"]= {"全清训练", "疯狂", "简易PC题库,熟悉全清定式的组合"},
|
||||
["pcchallenge_normal"]= {"全清挑战", "普通", "100行内刷PC"},
|
||||
["pcchallenge_hard"]= {"全清挑战", "困难", "100行内刷PC"},
|
||||
["pcchallenge_lunatic"]={"全清挑战", "疯狂", "100行内刷PC"},
|
||||
["tech_normal"]= {"科研", "普通", "禁止断B2B"},
|
||||
["tech_normal2"]= {"科研", "普通+", "仅允许spin与PC"},
|
||||
["tech_hard"]= {"科研", "困难", "禁止断B2B"},
|
||||
["tech_hard2"]= {"科研", "困难+", "仅允许spin与PC"},
|
||||
["tech_lunatic"]= {"科研", "疯狂", "禁止断B2B"},
|
||||
["tech_lunatic2"]= {"科研", "疯狂+", "仅允许spin与PC"},
|
||||
["tech_finesse"]= {"科研", "极简", "强制最简操作"},
|
||||
["tech_finesse2"]= {"科研", "极简+", "禁止普通消除,强制最简操作"},
|
||||
["tsd_easy"]= {"TSD挑战", "简单", "你能连续做几个TSD?"},
|
||||
["tsd_hard"]= {"TSD挑战", "困难", "你能连续做几个TSD?"},
|
||||
["tsd_ultimate"]= {"TSD挑战", "极限", "你能连续做几个TSD?"},
|
||||
["zen"]= {"禅", "200", "不限时200行"},
|
||||
["ultra"]= {"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"},
|
||||
["infinite"]= {"无尽", "", "沙盒"},
|
||||
["infinite_dig"]= {"无尽:挖掘", "", "挖呀挖呀挖"},
|
||||
["custom_clear"]= {"自定义", "普通", "画点什么然后把它消除!"},
|
||||
["custom_puzzle"]= {"自定义", "拼图", "画点什么然后把它拼出来吧!"},
|
||||
["sprintFix"]= {"竞速", "无移动", "这是可能的。"},
|
||||
["sprintLock"]= {"竞速", "无旋转", "这不可能。"},
|
||||
["sprintPenta"]= {"竞速", "五连块", "伤脑筋十八块"},
|
||||
["sprintMPH"]= {"竞速", "MPH", "纯随机\n无预览\n无暂存"},
|
||||
},
|
||||
getTip={refuseCopy=true,
|
||||
'注意到"旋转"到底对方块做了些什么吗?',
|
||||
"(RUR'U')R'FR2U'R'U'(RUR'F')",
|
||||
"↑↑↓↓←→←→BA",
|
||||
"100行内23PC来一个?",
|
||||
"11renPC!",
|
||||
"15puzzle好玩!",
|
||||
"2.7182818284590452353",
|
||||
"20连PC来一个?",
|
||||
"20G本质是一套全新的游戏规则!",
|
||||
"25种方块都能spin你敢信?",
|
||||
"3.1415926535897932384",
|
||||
"40行世界纪录:15.654s",
|
||||
"626r/s",
|
||||
"7宽三SZ架空捐了解一下",
|
||||
"把手机调到特殊的日期也不会发生什么的(真的",
|
||||
"报时机器人:新的一天开始了",
|
||||
"本游戏可不是休闲游戏。",
|
||||
"必须要软降才能到达的位置都会判定为极简操作",
|
||||
"别问游戏名怎么取的,问就是随便想的",
|
||||
"不要盯着bug不放",
|
||||
"草(日本语)",
|
||||
"触摸板打osu是什么体验?",
|
||||
"打好块没有捷径,多练。",
|
||||
"大概还是有人会认真看tips的",
|
||||
"大满贯10连击消四全清!",
|
||||
"戴上耳机以获得最佳体验",
|
||||
"单手也能玩!",
|
||||
"低帧率会降低游戏体验",
|
||||
"方块爱好者研究平台",
|
||||
"方块萌新入坑接收器",
|
||||
"方块默认出现的方向都是重心在下哦",
|
||||
"感觉自己明明按键了但是没反应?你真的按到了吗?",
|
||||
"感觉自己速度到上限了?试着把das调低一点",
|
||||
"感谢群友帮忙想tips",
|
||||
"给别人推荐本游戏的时候请记住我真的不叫铁壳米诺!!!",
|
||||
"更小的DAS和ARR拥有更高的操作上限(能控制得了的话)",
|
||||
"更新内容在游戏里和群公告都有写!",
|
||||
"还能写些什么tip呢",
|
||||
"好好T旋,天天向上",
|
||||
"合群了就会消失,但是消失不代表没有意义",
|
||||
"很有精神!",
|
||||
"健康小贴士:不要熬夜,真的会猝死",
|
||||
"健康小贴士:玩游戏多眨眼,不然会干眼病",
|
||||
"键位是可以自定义的",
|
||||
"居家旅行装逼必备",
|
||||
"觉得移动速度太慢或太快,手感不好?快去设置调整DAS/ARR",
|
||||
"开启软件锁的时候别忘了密码是626",
|
||||
"可以形成方块圈子小中心话题同作者一起衍生一些概念与梗的",
|
||||
"快去打一把100%极简看看能拿什么评价",
|
||||
"联网还没做呢,别急",
|
||||
"卖弱禁言警告",
|
||||
"每个块的出现方向可以自定义",
|
||||
"每个虚拟按键都可以隐藏/显示,尺寸也可调",
|
||||
"免费吃鸡方块",
|
||||
"喵!",
|
||||
"民间微创新",
|
||||
"民间音le与图案",
|
||||
"民间游戏设计",
|
||||
"民间UI动效艺术作品",
|
||||
"魔方好玩!",
|
||||
"魔方也是方块(确信",
|
||||
"你的双手是为了你的一生服务的,而不是Techmino",
|
||||
"你今天的人品值是:0",
|
||||
"你今天的人品值是:26",
|
||||
"你今天的人品值是:62.6",
|
||||
"你今天的人品值是:99.626",
|
||||
"你可以从统计页面打开游戏存档目录",
|
||||
"你们考虑过Z酱的感受吗?没有!你们只考虑你自己。",
|
||||
"你准备好了吗?",
|
||||
"请不要一直看主页机器人玩,可能比较费电",
|
||||
"请勿大力敲打设备!敲坏了就没有Techmino玩了",
|
||||
"去玩别的方块的时候记得没有Ospin!",
|
||||
"如果有不认识的术语,可以去 帮助-词典 自行查询",
|
||||
"扫雷好玩!",
|
||||
"少女祈祷中",
|
||||
"适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活",
|
||||
"术语不认识?去帮助-词典里查查吧",
|
||||
"虽然极简连击和极简率计算看着很怪,但是很科学!",
|
||||
"泰拉瑞亚好玩!",
|
||||
"提前旋转等设置可以用来救命",
|
||||
"玩到一半弹出消息框?快去设置禁止弹窗",
|
||||
"为了防止误触,玩到一半重开需要长按重开键",
|
||||
"为什么关卡那么少!因为前一模式成绩连D都没达到,再加把劲吧~",
|
||||
"我曾经在极度愤怒的时候15秒消了40行",
|
||||
"我的世界好玩!",
|
||||
"我们是不是第一个在方块游戏做tips的?",
|
||||
"我一个滑铲就挖了个11renPC",
|
||||
"无聊翻翻设置是好习惯",
|
||||
"希望极简率没事",
|
||||
"希望你们都能喜欢Z…哦不是,喜欢Techmino",
|
||||
"享受Tech的特色旋转系统!",
|
||||
"旋转不是变形!请尽量灵活利用顺逆时针两个旋转键!",
|
||||
"学会使用两个旋转键,三个更好",
|
||||
"学习能力很重要,无论是学校知识还是玩游戏",
|
||||
"一滩散乱的代码组成的蜜汁结构",
|
||||
"音乐使用beepbox制作",
|
||||
"音游方块是一家(暴论",
|
||||
"应该没人会认真看tips吧?",
|
||||
"游戏使用love2d引擎制作",
|
||||
"游戏作者40行sub26了",
|
||||
"有建议的话可以把信息反馈给作者~",
|
||||
"有疑问? 先看设置有没有你想要的",
|
||||
"在?为什么半夜打块?",
|
||||
"暂定段位:9",
|
||||
"这里的极简判定不松不严,放心软降,小心hold!",
|
||||
"自带按键显示",
|
||||
"自定义场地可以画图实现逐页演示",
|
||||
"总共有接近200条tip哦",
|
||||
"ALLSPIN!",
|
||||
"Am G F G",
|
||||
"B2B2B???",
|
||||
"B2B2B2B存在吗?",
|
||||
"BT炮=beta炮=TCM-β炮",
|
||||
"Cultris II也很好玩!",
|
||||
"e^(pi*i)=-1",
|
||||
"e^(pi*i/2)=i",
|
||||
"fin neo iso 是满足tspin条件的特殊t2的名字",
|
||||
"Jstris也很好玩!",
|
||||
"l-=-1",
|
||||
"Let-The-Bass-Kick!",
|
||||
"Nullpomino也很好玩!",
|
||||
"Phigros好玩!",
|
||||
"STSD必死",
|
||||
"Techmino安卓下载",
|
||||
"Techmino好玩!",
|
||||
"Techmino没有抽卡没有氪金,太好玩了",
|
||||
"Techmino有一个Nspire-CX版本!",
|
||||
"Techminohaowan",
|
||||
"TechOS?那是什么",
|
||||
"Tetr.io也很好玩!",
|
||||
"Tetr.js也很好玩!",
|
||||
"Tetralegends也很好玩!",
|
||||
"VVVVVV好玩!",
|
||||
"Z酱累了,Z酱不想更新",
|
||||
"Z酱只是个写代码的,懂什么方块",
|
||||
"Z块等身抱枕来一个(x",
|
||||
{COLOR.blue,"COLOR.blue"},
|
||||
{COLOR.C,"Xspin",COLOR.W,"是个啥玩意"},
|
||||
{COLOR.cyan,"COLOR.cyan"},
|
||||
{COLOR.fire,"COLOR.fire"},
|
||||
{COLOR.G,"快捷键: Alt+F4=关闭当前窗口"},
|
||||
{COLOR.G,"快捷键: Alt+Tab=切换窗口"},
|
||||
{COLOR.G,"快捷键: backspace=返回上一个文件目录"},
|
||||
{COLOR.G,"快捷键: Ctrl+鼠标滚轮=缩放"},
|
||||
{COLOR.G,"快捷键: Ctrl+A=全选"},
|
||||
{COLOR.G,"快捷键: Ctrl+Alt+Z=查看所有qq消息"},
|
||||
{COLOR.G,"快捷键: Ctrl+D=复制一份"},
|
||||
{COLOR.G,"快捷键: Ctrl+F=查找"},
|
||||
{COLOR.G,"快捷键: Ctrl+Tab=切换标签页"},
|
||||
{COLOR.G,"快捷键: Ctrl+W=关闭当前标签页"},
|
||||
{COLOR.G,"快捷键: shift+del=永久删除文件 (技术人员别杠)"},
|
||||
{COLOR.grape,"COLOR.grape"},
|
||||
{COLOR.grape,"T-spin!"},
|
||||
{COLOR.grass,"COLOR.grass"},
|
||||
{COLOR.green,"COLOR.green"},
|
||||
{COLOR.lame,"COLOR.lame"},
|
||||
{COLOR.lC,"26连T2来一个?"},
|
||||
{COLOR.lGrey,"俄罗斯方块环游记也不错!"},
|
||||
{COLOR.lGrey,"感谢Phigros让我抄tips("},
|
||||
{COLOR.lGrey,"腱鞘炎警告"},
|
||||
{COLOR.lGrey,"看起来是个计算器,其实…"},
|
||||
{COLOR.lGrey,"没学过编曲,音乐都是自己瞎写的,觉得不好听就去设置关了吧"},
|
||||
{COLOR.lGrey,"秘密数字:626"},
|
||||
{COLOR.lGrey,"您有一个好"},
|
||||
{COLOR.lR,"Z ",COLOR.lG,"S ",COLOR.lSea,"J ",COLOR.lOrange,"L ",COLOR.lGrape,"T ",COLOR.lY,"O ",COLOR.lC,"I"},
|
||||
{COLOR.lSea,"茶娘",COLOR.W," 可爱!"},
|
||||
{COLOR.lSky,"Naki",COLOR.W," 可爱!"},
|
||||
{COLOR.lY,"暂定段位:GM"},
|
||||
{COLOR.lY,"暂定段位:MM"},
|
||||
{COLOR.lY,"COOL!!"},
|
||||
{COLOR.lY,"REGRET!!"},
|
||||
{COLOR.magenta,"COLOR.magenta"},
|
||||
{COLOR.orange,"COLOR.orange"},
|
||||
{COLOR.pink,"COLOR.pink"},
|
||||
{COLOR.pink,"osu",COLOR.W,"好玩!"},
|
||||
{COLOR.pink,"uid:225238922"},
|
||||
{COLOR.purple,"COLOR.purple"},
|
||||
{COLOR.R,"本游戏难度上限很高,做好心理准备。"},
|
||||
{COLOR.R,"不要向不感兴趣的路人推荐!!!!!!!!"},
|
||||
{COLOR.R,"不要在上课时玩游戏!"},
|
||||
{COLOR.R,"光敏性癫痫警告"},
|
||||
{COLOR.R,"请在有一定游戏基础之后再学Tspin!不然副作用非常大!"},
|
||||
{COLOR.R,"新人请千万记住,打好基础,不要太早学那些花里胡哨的。"},
|
||||
{COLOR.R,"长时间游戏状态会越来越差!玩久了记得放松一下~"},
|
||||
{COLOR.R,"DT",COLOR.W,"炮=",COLOR.grape,"TS",COLOR.R,"D",COLOR.W,"+",COLOR.grape,"TS",COLOR.R,"T",COLOR.W,"炮"},
|
||||
{COLOR.R,"LrL ",COLOR.G,"RlR ",COLOR.B,"LLr ",COLOR.orange,"RRl ",COLOR.grape,"RRR ",COLOR.grape,"LLL ",COLOR.C,"FFF ",COLOR.Y,"RfR ",COLOR.Y,"RRf ",COLOR.Y,"rFF"},
|
||||
{COLOR.red,"COLOR.red"},
|
||||
{COLOR.sea,"COLOR.sea"},
|
||||
{COLOR.sky,"COLOR.sky"},
|
||||
{COLOR.sky,"Lua",COLOR.W,"天下第一"},
|
||||
{COLOR.W,"1, 2, ",COLOR.C,"⑨",COLOR.W,"!!!!!"},
|
||||
{COLOR.water,"COLOR.water"},
|
||||
{COLOR.Y,"2+2=Miya"},
|
||||
{COLOR.Y,"暂定段位:M"},
|
||||
{COLOR.Y,"暂定段位:MK"},
|
||||
{COLOR.Y,"暂定段位:MO"},
|
||||
{COLOR.Y,"暂定段位:MV"},
|
||||
{COLOR.Y,"Miya",COLOR.W," 可爱!"},
|
||||
{COLOR.Y,"O spin Triple!"},
|
||||
{COLOR.yellow,"COLOR.yellow"},
|
||||
-- "Z酱 可爱!",
|
||||
}
|
||||
}
|
||||
@@ -1,213 +0,0 @@
|
||||
return{
|
||||
cmb={nil,"1连击","2连击","3连击","4连击","5连击","6连击","7连击","8连击","9连击","10连击!","11连击!","12连击!","13连击!","14连击!","15连击!","16连击!","17连击!","18连击!","19连击!","巨型连击"},
|
||||
spin="型回旋",
|
||||
clear={"单清","双清","三清","四清","五清","六清"},
|
||||
mini="迷你",b2b="满贯",b3b="大满贯",
|
||||
PC="场地全清",HPC="场地半清",
|
||||
|
||||
great="不错!",
|
||||
awesome="精彩。",
|
||||
almost="差一点!",
|
||||
continue="继续。",
|
||||
|
||||
speedLV="速度等级",
|
||||
line="行数",atk="攻击",eff="效率",
|
||||
rpm="收每分",tsd="T2",
|
||||
grade="段位",techrash="消四",
|
||||
wave="波数",nextWave="下一波",
|
||||
combo="连击",maxcmb="最大连击",
|
||||
pc="全清",ko="淘汰",
|
||||
|
||||
finesse_ap="完美极简",
|
||||
finesse_fc="全连击",
|
||||
|
||||
ai_fixed="不能同时开启电脑玩家和固定序列",
|
||||
ai_prebag="不能同时开启电脑玩家和自定义序列",
|
||||
ai_mission="不能同时开启电脑玩家和自定义任务",
|
||||
|
||||
ranks={"差","可","中","良","优"},
|
||||
|
||||
pauseStat={
|
||||
"时间:",
|
||||
"按键/旋转/暂存:",
|
||||
"落块:",
|
||||
"消行/挖掘:",
|
||||
"攻击/挖掘攻击:",
|
||||
"上涨/接收/抵消:",
|
||||
"消除:",
|
||||
"回旋:",
|
||||
"(大)满贯/全(半)清:",
|
||||
"非极简操作:",
|
||||
},
|
||||
radar={"防","守","攻","送","速","挖"},
|
||||
radarData={
|
||||
"防/分",
|
||||
"综/分",
|
||||
"攻/分",
|
||||
"送/分",
|
||||
"行/分",
|
||||
"挖/分",
|
||||
},
|
||||
WidgetText={
|
||||
setting_control={
|
||||
das="首次移动延迟",arr="移动重复延迟",
|
||||
sddas="首次软降延迟",sdarr="软降重复延迟",
|
||||
ihs="提前暂存",
|
||||
},
|
||||
setting_skin={
|
||||
spin1="转",
|
||||
spin2="转",
|
||||
spin3="转",
|
||||
spin4="转",
|
||||
spin5="转",
|
||||
spin6="转",
|
||||
spin7="转",
|
||||
},
|
||||
music={
|
||||
bgm="音乐",
|
||||
},
|
||||
sound={
|
||||
clear1="消一",
|
||||
clear2="消二",
|
||||
clear3="消三",
|
||||
clear4="消四",
|
||||
spin0="空旋转",
|
||||
spin1="旋转消一",
|
||||
spin2="旋转消二",
|
||||
spin3="旋转消三",
|
||||
|
||||
_1="消一",
|
||||
_2="消二",
|
||||
_3="消三",
|
||||
_4="消四",
|
||||
z0="Z旋",
|
||||
z1="Z旋消一",
|
||||
z2="Z旋消二",
|
||||
z3="Z旋消三",
|
||||
s0="S旋",
|
||||
s1="S旋消一",
|
||||
s2="S旋消二",
|
||||
s3="S旋消三",
|
||||
|
||||
j0="J旋",
|
||||
j1="J旋消一",
|
||||
j2="J旋消二",
|
||||
j3="J旋消三",
|
||||
l0="L旋",
|
||||
l1="L旋消一",
|
||||
l2="L旋消二",
|
||||
l3="L旋消三",
|
||||
|
||||
t0="T旋",
|
||||
t1="T旋消一",
|
||||
t2="T旋消二",
|
||||
t3="T旋消三",
|
||||
o0="O旋",
|
||||
o1="O旋消一",
|
||||
o2="O旋消二",
|
||||
o3="O旋消三",
|
||||
|
||||
i0="I旋",
|
||||
i1="I旋消一",
|
||||
i2="I旋消二",
|
||||
i3="I旋消三",
|
||||
|
||||
mini="迷你",
|
||||
b2b="满贯",
|
||||
b3b="大满贯",
|
||||
pc="全清",
|
||||
},
|
||||
minigame={
|
||||
p15="数字华容道",
|
||||
schulte_G="舒尔特方格",
|
||||
pong="弹球",
|
||||
},
|
||||
},
|
||||
modes={
|
||||
["sprint_10"]= {"竞速", "10行", "消除10行"},
|
||||
["sprint_20"]= {"竞速", "20行", "消除20行"},
|
||||
["sprint_40"]= {"竞速", "40行", "消除40行"},
|
||||
["dig_10"]= {"挖掘", "10L", "挖掘10行"},
|
||||
["dig_40"]= {"挖掘", "40L", "挖掘40行"},
|
||||
["dig_100"]= {"挖掘", "100L", "挖掘100行"},
|
||||
["dig_400"]= {"挖掘", "400L", "挖掘400行"},
|
||||
["dig_1000"]= {"挖掘", "1000L", "挖掘1000行"},
|
||||
["sprint_100"]= {"竞速", "100行", "消除100行"},
|
||||
["sprint_400"]= {"竞速", "400行", "消除400行"},
|
||||
["sprint_1000"]= {"竞速", "1000行", "消除1000行"},
|
||||
["drought_normal"]= {"干旱", "100行", "你I没了"},
|
||||
["drought_lunatic"]= {"干旱", "100行", "后 妈 发 牌"},
|
||||
["marathon_normal"]= {"马拉松", "普通", "200行加速马拉松"},
|
||||
["marathon_hard"]= {"马拉松", "困难", "200行高速马拉松"},
|
||||
["marathon_ultimate"]= {"马拉松", "极限", "禁止0连击单消之外的任何操作"},
|
||||
["solo_1"]= {"单挑", "简单", "打败机器人"},
|
||||
["solo_2"]= {"单挑", "普通", "打败机器人"},
|
||||
["solo_3"]= {"单挑", "困难", "打败机器人"},
|
||||
["solo_4"]= {"单挑", "疯狂", "打败机器人"},
|
||||
["solo_5"]= {"单挑", "极限", "打败机器人"},
|
||||
["techmino49_easy"]= {"49人混战", "简单", "49人混战,活到最后"},
|
||||
["techmino49_hard"]= {"49人混战", "困难", "49人混战,活到最后"},
|
||||
["techmino49_ultimate"]={"49人混战", "极限", "49人混战,活到最后"},
|
||||
["techmino99_easy"]= {"99人混战", "简单", "99人混战,活到最后"},
|
||||
["techmino99_hard"]= {"99人混战", "困难", "99人混战,活到最后"},
|
||||
["techmino99_ultimate"]={"99人混战", "极限", "99人混战,活到最后"},
|
||||
["round_1"]= {"回合制", "简单", "下棋模式"},
|
||||
["round_2"]= {"回合制", "普通", "下棋模式"},
|
||||
["round_3"]= {"回合制", "困难", "下棋模式"},
|
||||
["round_4"]= {"回合制", "疯狂", "下棋模式"},
|
||||
["round_5"]= {"回合制", "极限", "下棋模式"},
|
||||
["master_beginner"]= {"大师", "疯狂", "20G初心者练习"},
|
||||
["master_advance"]= {"大师", "极限", "上级者20G挑战"},
|
||||
["master_final"]= {"大师", "终点", "究极20G:无法触及的终点"},
|
||||
["master_phantasm"]= {"大师", "虚幻", "虚幻20G:???"},
|
||||
["GM"]= {"宗师", "GM", "成为方块大师"},
|
||||
["blind_easy"]= {"隐形", "半隐", "不强大脑"},
|
||||
["blind_normal"]= {"隐形", "全隐", "挺强大脑"},
|
||||
["blind_hard"]= {"隐形", "瞬隐", "很强大脑"},
|
||||
["blind_lunatic"]= {"隐形", "瞬隐+", "超强大脑"},
|
||||
["blind_ultimate"]= {"隐形", "啊这", "你准备好了吗"},
|
||||
["blind_wtf"]= {"隐形", "不会吧", "还没准备好"},
|
||||
["classic_fast"]= {"高速经典", "CTWC", "高速经典"},
|
||||
["survivor_easy"]= {"生存", "简单", "你能存活多久?"},
|
||||
["survivor_normal"]= {"生存", "普通", "你能存活多久?"},
|
||||
["survivor_hard"]= {"生存", "困难", "你能存活多久?"},
|
||||
["survivor_lunatic"]= {"生存", "疯狂", "你能存活多久?"},
|
||||
["survivor_ultimate"]= {"生存", "极限", "你能存活多久?"},
|
||||
["attacker_hard"]= {"进攻", "困难", "进攻练习"},
|
||||
["attacker_ultimate"]= {"进攻", "极限", "进攻练习"},
|
||||
["defender_normal"]= {"防守", "普通", "防守练习"},
|
||||
["defender_lunatic"]= {"防守", "疯狂", "防守练习"},
|
||||
["dig_hard"]= {"挖掘", "困难", "挖掘练习"},
|
||||
["dig_ultimate"]= {"挖掘", "极限", "挖掘练习"},
|
||||
["bigbang"]= {"大爆炸", "简单", "All-spin 入门教程\n未制作完成,落块即通"},
|
||||
["c4wtrain_normal"]= {"中四宽练习", "普通", "无 限 连 击"},
|
||||
["c4wtrain_lunatic"]= {"中四宽练习", "疯狂", "无 限 连 击"},
|
||||
["pctrain_normal"]= {"全清训练", "普通", "简易全清题库,熟悉全清定式的组合"},
|
||||
["pctrain_lunatic"]= {"全清训练", "疯狂", "简易全清题库,熟悉全清定式的组合"},
|
||||
["pcchallenge_normal"]= {"全清挑战", "普通", "100行内刷全清"},
|
||||
["pcchallenge_hard"]= {"全清挑战", "困难", "100行内刷全清"},
|
||||
["pcchallenge_lunatic"]={"全清挑战", "疯狂", "100行内刷全清"},
|
||||
["tech_normal"]= {"科研", "普通", "禁止断B2B"},
|
||||
["tech_normal2"]= {"科研", "普通+", "仅允许回旋与全清"},
|
||||
["tech_hard"]= {"科研", "困难", "禁止断B2B"},
|
||||
["tech_hard2"]= {"科研", "困难+", "仅允许回旋与全清"},
|
||||
["tech_lunatic"]= {"科研", "疯狂", "禁止断B2B"},
|
||||
["tech_lunatic2"]= {"科研", "疯狂+", "仅允许spin与PC"},
|
||||
["tech_finesse"]= {"科研", "极简", "强制最简操作"},
|
||||
["tech_finesse2"]= {"科研", "极简+", "禁止普通消除,强制最简操作"},
|
||||
["tsd_easy"]= {"T2挑战", "简单", "你能连续做几个T旋双清?"},
|
||||
["tsd_hard"]= {"T2挑战", "困难", "你能连续做几个T旋双清?"},
|
||||
["tsd_ultimate"]= {"T2挑战", "极限", "你能连续做几个T旋双清?"},
|
||||
["zen"]= {"禅", "200", "不限时200行"},
|
||||
["ultra"]= {"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"},
|
||||
["infinite"]= {"无尽", "", "沙盒"},
|
||||
["infinite_dig"]= {"无尽:挖掘", "", "挖呀挖呀挖"},
|
||||
["custom_clear"]= {"自定义", "普通", "画点什么然后把它消除!"},
|
||||
["custom_puzzle"]= {"自定义", "拼图", "画点什么然后把它拼出来吧!"},
|
||||
["sprintFix"]= {"竞速", "无移动", "这是可能的。"},
|
||||
["sprintLock"]= {"竞速", "无旋转", "这不可能。"},
|
||||
["sprintPenta"]= {"竞速", "五连块", "伤脑筋十八块"},
|
||||
["sprintMPH"]= {"竞速", "纯净", "纯随机\n无预览\n无暂存"},
|
||||
},
|
||||
getTip=nil,
|
||||
}
|
||||
165
LICENSE
165
LICENSE
@@ -1,165 +0,0 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates
|
||||
the terms and conditions of version 3 of the GNU General Public
|
||||
License, supplemented by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||
General Public License.
|
||||
|
||||
"The Library" refers to a covered work governed by this License,
|
||||
other than an Application or a Combined Work as defined below.
|
||||
|
||||
An "Application" is any work that makes use of an interface provided
|
||||
by the Library, but which is not otherwise based on the Library.
|
||||
Defining a subclass of a class defined by the Library is deemed a mode
|
||||
of using an interface provided by the Library.
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an
|
||||
Application with the Library. The particular version of the Library
|
||||
with which the Combined Work was made is also called the "Linked
|
||||
Version".
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the
|
||||
Corresponding Source for the Combined Work, excluding any source code
|
||||
for portions of the Combined Work that, considered in isolation, are
|
||||
based on the Application, and not on the Linked Version.
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the
|
||||
object code and/or source code for the Application, including any data
|
||||
and utility programs needed for reproducing the Combined Work from the
|
||||
Application, but excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License
|
||||
without being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a
|
||||
facility refers to a function or data to be supplied by an Application
|
||||
that uses the facility (other than as an argument passed when the
|
||||
facility is invoked), then you may convey a copy of the modified
|
||||
version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to
|
||||
ensure that, in the event an Application does not supply the
|
||||
function or data, the facility still operates, and performs
|
||||
whatever part of its purpose remains meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of
|
||||
this License applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from
|
||||
a header file that is part of the Library. You may convey such object
|
||||
code under terms of your choice, provided that, if the incorporated
|
||||
material is not limited to numerical parameters, data structure
|
||||
layouts and accessors, or small macros, inline functions and templates
|
||||
(ten or fewer lines in length), you do both of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the
|
||||
Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that,
|
||||
taken together, effectively do not restrict modification of the
|
||||
portions of the Library contained in the Combined Work and reverse
|
||||
engineering for debugging such modifications, if you also do each of
|
||||
the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that
|
||||
the Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during
|
||||
execution, include the copyright notice for the Library among
|
||||
these notices, as well as a reference directing the user to the
|
||||
copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this
|
||||
License, and the Corresponding Application Code in a form
|
||||
suitable for, and under terms that permit, the user to
|
||||
recombine or relink the Application with a modified version of
|
||||
the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying
|
||||
Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (a) uses at run time
|
||||
a copy of the Library already present on the user's computer
|
||||
system, and (b) will operate properly with a modified version
|
||||
of the Library that is interface-compatible with the Linked
|
||||
Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise
|
||||
be required to provide such information under section 6 of the
|
||||
GNU GPL, and only to the extent that such information is
|
||||
necessary to install and execute a modified version of the
|
||||
Combined Work produced by recombining or relinking the
|
||||
Application with a modified version of the Linked Version. (If
|
||||
you use option 4d0, the Installation Information must accompany
|
||||
the Minimal Corresponding Source and Corresponding Application
|
||||
Code. If you use option 4d1, you must provide the Installation
|
||||
Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
You may place library facilities that are a work based on the
|
||||
Library side by side in a single library together with other library
|
||||
facilities that are not Applications and are not covered by this
|
||||
License, and convey such a combined library under terms of your
|
||||
choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based
|
||||
on the Library, uncombined with any other library facilities,
|
||||
conveyed under the terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it
|
||||
is a work based on the Library, and explaining where to find the
|
||||
accompanying uncombined form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU Lesser General Public License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Library as you received it specifies that a certain numbered version
|
||||
of the GNU Lesser General Public License "or any later version"
|
||||
applies to it, you have the option of following the terms and
|
||||
conditions either of that published version or of any later version
|
||||
published by the Free Software Foundation. If the Library as you
|
||||
received it does not specify a version number of the GNU Lesser
|
||||
General Public License, you may choose any version of the GNU Lesser
|
||||
General Public License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide
|
||||
whether future versions of the GNU Lesser General Public License shall
|
||||
apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the
|
||||
Library.
|
||||
BIN
SFX/button.ogg
BIN
SFX/button.ogg
Binary file not shown.
BIN
SFX/click.ogg
BIN
SFX/click.ogg
Binary file not shown.
BIN
SFX/drop.ogg
BIN
SFX/drop.ogg
Binary file not shown.
BIN
SFX/enter.ogg
BIN
SFX/enter.ogg
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
SFX/ready.ogg
BIN
SFX/ready.ogg
Binary file not shown.
BIN
SFX/ren_1.ogg
BIN
SFX/ren_1.ogg
Binary file not shown.
BIN
SFX/ren_10.ogg
BIN
SFX/ren_10.ogg
Binary file not shown.
BIN
SFX/ren_11.ogg
BIN
SFX/ren_11.ogg
Binary file not shown.
BIN
SFX/ren_2.ogg
BIN
SFX/ren_2.ogg
Binary file not shown.
BIN
SFX/ren_3.ogg
BIN
SFX/ren_3.ogg
Binary file not shown.
BIN
SFX/ren_4.ogg
BIN
SFX/ren_4.ogg
Binary file not shown.
BIN
SFX/ren_5.ogg
BIN
SFX/ren_5.ogg
Binary file not shown.
BIN
SFX/ren_6.ogg
BIN
SFX/ren_6.ogg
Binary file not shown.
BIN
SFX/ren_7.ogg
BIN
SFX/ren_7.ogg
Binary file not shown.
BIN
SFX/ren_8.ogg
BIN
SFX/ren_8.ogg
Binary file not shown.
BIN
SFX/ren_9.ogg
BIN
SFX/ren_9.ogg
Binary file not shown.
BIN
SFX/ren_mega.ogg
BIN
SFX/ren_mega.ogg
Binary file not shown.
BIN
SFX/start.ogg
BIN
SFX/start.ogg
Binary file not shown.
BIN
SFX/swipe.ogg
BIN
SFX/swipe.ogg
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
56
Zframework/background.lua
Normal file
56
Zframework/background.lua
Normal file
@@ -0,0 +1,56 @@
|
||||
local gc_clear=love.graphics.clear
|
||||
local BGs={
|
||||
none={draw=function()gc_clear(.08,.08,.084)end}
|
||||
}
|
||||
local BGlist={'none'}
|
||||
local BG={
|
||||
default='none',
|
||||
locked=false,
|
||||
cur='none',
|
||||
init=false,
|
||||
resize=false,
|
||||
update=NULL,
|
||||
draw=BGs.none.draw,
|
||||
event=false,
|
||||
discard=NULL,
|
||||
}
|
||||
|
||||
function BG.lock()BG.locked=true end
|
||||
function BG.unlock()BG.locked=false end
|
||||
function BG.add(name,bg)
|
||||
BGs[name]=bg
|
||||
BGlist[#BGlist+1]=name
|
||||
end
|
||||
function BG.getList()
|
||||
return BGlist
|
||||
end
|
||||
function BG.remList(name)
|
||||
table.remove(BGlist,TABLE.find(BGlist,name))
|
||||
end
|
||||
function BG.send(...)
|
||||
if BG.event then
|
||||
BG.event(...)
|
||||
end
|
||||
end
|
||||
function BG.setDefault(bg)
|
||||
BG.default=bg
|
||||
end
|
||||
function BG.set(name)
|
||||
name=name or BG.default
|
||||
if not BGs[name]or BG.locked then return end
|
||||
if name~=BG.cur then
|
||||
BG.discard()
|
||||
BG.cur=name
|
||||
local bg=BGs[name]
|
||||
|
||||
BG.init= bg.init or NULL
|
||||
BG.resize= bg.resize or NULL
|
||||
BG.update= bg.update or NULL
|
||||
BG.draw= bg.draw or NULL
|
||||
BG.event= bg.event or NULL
|
||||
BG.discard=bg.discard or NULL
|
||||
BG.init()
|
||||
end
|
||||
return true
|
||||
end
|
||||
return BG
|
||||
@@ -1,44 +0,0 @@
|
||||
local BGlist={
|
||||
none={
|
||||
draw=function()
|
||||
love.graphics.clear(.15,.15,.15)
|
||||
end
|
||||
}
|
||||
}
|
||||
local BG={
|
||||
cur="none",
|
||||
init=nil,
|
||||
resize=nil,
|
||||
update=NULL,
|
||||
draw=BGlist.none.draw,
|
||||
event=nil,
|
||||
discard=NULL,
|
||||
}
|
||||
|
||||
function BG.add(name,bg)
|
||||
BGlist[name]=bg
|
||||
end
|
||||
function BG.send(...)
|
||||
if BG.event then
|
||||
BG.event(...)
|
||||
end
|
||||
end
|
||||
function BG.set(background)
|
||||
if background==BG.cur or not SETTING.bg then return end
|
||||
BG.discard()
|
||||
BG.cur=background
|
||||
background=BGlist[background]
|
||||
if not background then
|
||||
LOG.print("No BG called"..background,"warn")
|
||||
return
|
||||
end
|
||||
|
||||
BG.init= background.init or NULL
|
||||
BG.resize= background.resize or NULL
|
||||
BG.update= background.update or NULL
|
||||
BG.draw= background.draw or NULL
|
||||
BG.event= background.event or NULL
|
||||
BG.discard= background.discard or NULL
|
||||
BG.init()
|
||||
end
|
||||
return BG
|
||||
@@ -1,109 +1,182 @@
|
||||
local min=math.min
|
||||
|
||||
local function fadeOut(id)
|
||||
local src=BGM.list[id]
|
||||
local v=src:getVolume()-.025*SETTING.bgm
|
||||
src:setVolume(v>0 and v or 0)
|
||||
if v<=0 then
|
||||
src:stop()
|
||||
return true
|
||||
end
|
||||
end
|
||||
local function fadeIn(id)
|
||||
local src=BGM.list[id]
|
||||
local v=SETTING.bgm
|
||||
v=min(v,src:getVolume()+.025*v)
|
||||
src:setVolume(v)
|
||||
if v>=SETTING.bgm then return true end
|
||||
end
|
||||
local lastLoaded={}
|
||||
local maxLoadedCount=3
|
||||
local nameList={}
|
||||
local SourceObjList={}
|
||||
local volume=1
|
||||
|
||||
local BGM={
|
||||
--nowPlay=[str:playing ID]
|
||||
--suspend=[str:pausing ID]
|
||||
--playing=[src:playing SRC]
|
||||
default=false,
|
||||
onChange=NULL,
|
||||
--nowPlay=[str:playing ID]
|
||||
--playing=[src:playing SRC]
|
||||
--lastPlayed=[str:lastPlayed ID]
|
||||
}
|
||||
BGM.list={
|
||||
"blank",--menu
|
||||
"race",--sprint, solo
|
||||
"infinite",--infinite norm/dig, ultra, zen, tech-finesse
|
||||
"push",--marathon, round, tsd, blind-5/6
|
||||
"way",--dig sprint
|
||||
"reason",--drought, blind-1/2/3/4
|
||||
|
||||
"secret8th",--master-1, survivor-2
|
||||
"secret7th",--master-2, survivor-3
|
||||
"waterfall",--sprint Penta/MPH
|
||||
"newera",--bigbang, survivor-1, tech-normal
|
||||
"oxygen",--c4w/pc train
|
||||
"truth",--pc challenge
|
||||
function BGM.getList()return nameList end
|
||||
function BGM.getCount()return #nameList end
|
||||
local function _addFile(name,path)
|
||||
if not SourceObjList[name]then
|
||||
table.insert(nameList,name)
|
||||
SourceObjList[name]={path=path,source=false}
|
||||
end
|
||||
end
|
||||
function BGM.load(name,path)
|
||||
if type(name)=='table'then
|
||||
for k,v in next,name do
|
||||
_addFile(k,v)
|
||||
end
|
||||
else
|
||||
_addFile(name,path)
|
||||
end
|
||||
table.sort(nameList)
|
||||
LOG(BGM.getCount().." BGM files added")
|
||||
end
|
||||
|
||||
"distortion",--master-3
|
||||
"far",--GM
|
||||
"shining terminal",--attacker
|
||||
"storm",--defender, survivor-4/5
|
||||
"down",--dig, tech-hard/lunatic
|
||||
local function _tryReleaseSources()
|
||||
local n=#lastLoaded
|
||||
while #lastLoaded>maxLoadedCount do
|
||||
local name=lastLoaded[n]
|
||||
if SourceObjList[name].source:isPlaying()then
|
||||
n=n-1
|
||||
if n<=0 then return end
|
||||
else
|
||||
SourceObjList[name].source=SourceObjList[name].source:release()and nil
|
||||
table.remove(lastLoaded,n)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
function BGM.setDefault(bgm)
|
||||
BGM.default=bgm
|
||||
end
|
||||
function BGM.setMaxSources(count)
|
||||
maxLoadedCount=count
|
||||
_tryReleaseSources()
|
||||
end
|
||||
function BGM.setChange(func)
|
||||
BGM.onChange=func
|
||||
end
|
||||
function BGM.setVol(v)
|
||||
assert(type(v)=='number'and v>=0 and v<=1,'Wrong volume')
|
||||
volume=v
|
||||
if BGM.playing then
|
||||
if volume>0 then
|
||||
BGM.playing:setVolume(volume)
|
||||
BGM.playing:play()
|
||||
elseif BGM.nowPlay then
|
||||
BGM.playing:pause()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
"rockblock",--classic, 49/99
|
||||
"cruelty","final","8-bit happiness","end","how feeling",--49/99
|
||||
}
|
||||
BGM.len=#BGM.list
|
||||
function BGM.loadOne(N)
|
||||
N=BGM.list[N]
|
||||
local file="/BGM/"..N..".ogg"
|
||||
if love.filesystem.getInfo(file)then
|
||||
BGM.list[N]=love.audio.newSource(file,"stream")
|
||||
BGM.list[N]:setLooping(true)
|
||||
BGM.list[N]:setVolume(0)
|
||||
else
|
||||
LOG.print("No BGM file: "..N,5,COLOR.orange)
|
||||
end
|
||||
local function task_fadeOut(src)
|
||||
while true do
|
||||
coroutine.yield()
|
||||
local v=src:getVolume()-.025*volume
|
||||
src:setVolume(v>0 and v or 0)
|
||||
if v<=0 then
|
||||
src:pause()
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
function BGM.loadAll()
|
||||
for i=1,#BGM.list do
|
||||
BGM.loadOne(i)
|
||||
end
|
||||
local function task_fadeIn(src)
|
||||
while true do
|
||||
coroutine.yield()
|
||||
local v=volume
|
||||
v=math.min(v,src:getVolume()+.025*v)
|
||||
src:setVolume(v)
|
||||
if v>=volume then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
function BGM.play(s)
|
||||
if SETTING.bgm==0 then
|
||||
BGM.playing=BGM.list[s]
|
||||
BGM.suspend,BGM.nowPlay=s
|
||||
return
|
||||
elseif not(s and BGM.list[s])then
|
||||
return
|
||||
end
|
||||
if BGM.nowPlay~=s then
|
||||
if BGM.nowPlay then TASK.new(fadeOut,BGM.nowPlay)end
|
||||
TASK.changeCode(fadeIn,fadeOut)
|
||||
TASK.removeTask_data(s)
|
||||
local function check_curFadeOut(task,code,src)
|
||||
return task.code==code and task.args[1]==src
|
||||
end
|
||||
local function _tryLoad(name)
|
||||
if SourceObjList[name]then
|
||||
if SourceObjList[name].source then
|
||||
return true
|
||||
elseif love.filesystem.getInfo(SourceObjList[name].path)then
|
||||
SourceObjList[name].source=love.audio.newSource(SourceObjList[name].path,'stream')
|
||||
SourceObjList[name].source:setVolume(0)
|
||||
table.insert(lastLoaded,1,name)
|
||||
_tryReleaseSources()
|
||||
return true
|
||||
else
|
||||
LOG("No BGM: "..SourceObjList[name],5)
|
||||
end
|
||||
elseif name then
|
||||
LOG("No BGM: "..name,5)
|
||||
end
|
||||
end
|
||||
function BGM.play(name,args)
|
||||
name=name or BGM.default
|
||||
args=args or""
|
||||
if not _tryLoad(name)or args:sArg('-preLoad')then return end
|
||||
if volume==0 then
|
||||
BGM.nowPlay=name
|
||||
BGM.playing=SourceObjList[name].source
|
||||
return true
|
||||
end
|
||||
if name and SourceObjList[name].source then
|
||||
if BGM.nowPlay~=name then
|
||||
if BGM.nowPlay then
|
||||
if not args:sArg('-sdout')then
|
||||
TASK.new(task_fadeOut,BGM.playing)
|
||||
else
|
||||
BGM.playing:pause()
|
||||
end
|
||||
end
|
||||
TASK.removeTask_iterate(check_curFadeOut,task_fadeOut,SourceObjList[name].source)
|
||||
TASK.removeTask_code(task_fadeIn)
|
||||
|
||||
BGM.nowPlay,BGM.suspend=s
|
||||
TASK.new(fadeIn,s)
|
||||
BGM.playing=BGM.list[s]
|
||||
BGM.playing:play()
|
||||
end
|
||||
BGM.nowPlay=name
|
||||
BGM.playing=SourceObjList[name].source
|
||||
if not args:sArg('-sdin')then
|
||||
BGM.playing:setVolume(0)
|
||||
TASK.new(task_fadeIn,BGM.playing)
|
||||
else
|
||||
BGM.playing:setVolume(volume)
|
||||
BGM.playing:play()
|
||||
end
|
||||
SourceObjList[name].source:setLooping(not args:sArg('-noloop'))
|
||||
BGM.lastPlayed=BGM.nowPlay
|
||||
BGM.playing:seek(0)
|
||||
BGM.playing:play()
|
||||
BGM.onChange(name)
|
||||
end
|
||||
return true
|
||||
end
|
||||
end
|
||||
function BGM.freshVolume()
|
||||
if BGM.playing then
|
||||
local v=SETTING.bgm
|
||||
if v>0 then
|
||||
BGM.playing:setVolume(v)
|
||||
if BGM.suspend then
|
||||
BGM.playing:play()
|
||||
BGM.nowPlay,BGM.suspend=BGM.suspend
|
||||
end
|
||||
else
|
||||
if BGM.nowPlay then
|
||||
BGM.playing:pause()
|
||||
BGM.suspend,BGM.nowPlay=BGM.nowPlay
|
||||
end
|
||||
end
|
||||
end
|
||||
function BGM.seek(t)
|
||||
if BGM.playing then
|
||||
BGM.playing:seek(t)
|
||||
end
|
||||
end
|
||||
function BGM.stop()
|
||||
if BGM.nowPlay then
|
||||
TASK.new(fadeOut,BGM.nowPlay)
|
||||
end
|
||||
TASK.changeCode(fadeIn,fadeOut)
|
||||
BGM.playing,BGM.nowPlay=nil
|
||||
function BGM.isPlaying()
|
||||
return BGM.playing and BGM.playing:isPlaying()
|
||||
end
|
||||
function BGM.continue()
|
||||
if BGM.lastPlayed then
|
||||
BGM.nowPlay,BGM.playing=BGM.lastPlayed,SourceObjList[BGM.lastPlayed].source
|
||||
TASK.removeTask_iterate(check_curFadeOut,task_fadeOut,SourceObjList[BGM.nowPlay].source)
|
||||
TASK.removeTask_code(task_fadeIn)
|
||||
TASK.new(task_fadeIn,BGM.playing)
|
||||
BGM.playing:play()
|
||||
end
|
||||
end
|
||||
function BGM.stop(args)
|
||||
args=args or""
|
||||
TASK.removeTask_code(task_fadeIn)
|
||||
if not args:sArg('-s')then
|
||||
if BGM.nowPlay then
|
||||
TASK.new(task_fadeOut,BGM.playing)
|
||||
end
|
||||
elseif BGM.playing then
|
||||
BGM.playing:pause()
|
||||
end
|
||||
BGM.nowPlay,BGM.playing=nil
|
||||
end
|
||||
return BGM
|
||||
@@ -1,93 +1,148 @@
|
||||
local abs=math.abs
|
||||
local function hsv(h,s,v,a)--Color type, Color amount, Light
|
||||
if s<=0 then return v,v,v,a end
|
||||
h=h*6
|
||||
local c=v*s
|
||||
local x=abs((h-1)%2-1)*c
|
||||
if h<1 then return v,x+v-c,v-c,a
|
||||
elseif h<2 then return x+v-c,v,v-c,a
|
||||
elseif h<3 then return v-c,v,x+v-c,a
|
||||
elseif h<4 then return v-c,x+v-c,v,a
|
||||
elseif h<5 then return x+v-c,v-c,v,a
|
||||
else return v,v-c,x+v-c,a
|
||||
end
|
||||
end
|
||||
|
||||
local COLOR={
|
||||
red= {1.0, 0.0, 0.0},
|
||||
fire= {1.0, 0.4, 0.0},
|
||||
orange= {1.0, 0.6, 0.0},
|
||||
yellow= {1.0, 1.0, 0.0},
|
||||
lame= {0.7, 1.0, 0.0},
|
||||
grass= {0.5, 1.0, 0.0},
|
||||
green= {0.0, 1.0, 0.0},
|
||||
water= {0.0, 1.0, 0.6},
|
||||
cyan= {0.0, 1.0, 1.0},
|
||||
sky= {0.0, 0.7, 1.0},
|
||||
sea= {0.0, 0.4, 1.0},
|
||||
blue= {0.2, 0.2, 1.0},
|
||||
purple= {0.4, 0.0, 1.0},
|
||||
grape= {0.7, 0.0, 1.0},
|
||||
magenta= {1.0, 0.0, 1.0},
|
||||
pink= {1.0, 0.0, 0.5},
|
||||
hsv=hsv,
|
||||
|
||||
lRed= {1.0, 0.5, 0.5},
|
||||
lFire= {1.0, 0.7, 0.5},
|
||||
lOrange= {1.0, 0.8, 0.3},
|
||||
lYellow= {1.0, 1.0, 0.5},
|
||||
lLame= {0.8, 1.0, 0.4},
|
||||
lGrass= {0.6, 1.0, 0.4},
|
||||
lGreen= {0.5, 1.0, 0.5},
|
||||
lWater= {0.4, 1.0, 0.7},
|
||||
lCyan= {0.5, 1.0, 1.0},
|
||||
lSky= {0.5, 0.8, 1.0},
|
||||
lSea= {0.4, 0.7, 1.0},
|
||||
lBlue= {0.7, 0.7, 1.0},
|
||||
lPurple= {0.7, 0.4, 1.0},
|
||||
lGrape= {0.8, 0.4, 1.0},
|
||||
lMagenta= {1.0, 0.5, 1.0},
|
||||
lPink= {1.0, 0.4, 0.7},
|
||||
red= {hsv(0.00, 0.89, 0.91)},
|
||||
fire= {hsv(0.04, 0.93, 0.94)},
|
||||
orange= {hsv(0.09, 0.99, 0.96)},
|
||||
yellow= {hsv(0.15, 0.82, 0.90)},
|
||||
lime= {hsv(0.20, 0.89, 0.88)},
|
||||
jade= {hsv(0.25, 1.00, 0.82)},
|
||||
green= {hsv(0.33, 1.00, 0.81)},
|
||||
aqua= {hsv(0.47, 1.00, 0.76)},
|
||||
cyan= {hsv(0.53, 1.00, 0.88)},
|
||||
navy= {hsv(0.56, 1.00, 1.00)},
|
||||
sea= {hsv(0.61, 1.00, 1.00)},
|
||||
blue= {hsv(0.64, 1.00, 0.95)},
|
||||
violet= {hsv(0.74, 1.00, 0.91)},
|
||||
purple= {hsv(0.80, 1.00, 0.81)},
|
||||
magenta= {hsv(0.86, 1.00, 0.78)},
|
||||
wine= {hsv(0.92, 0.98, 0.91)},
|
||||
|
||||
dRed= {0.6, 0.0, 0.0},
|
||||
dFire= {0.6, 0.3, 0.0},
|
||||
dOrange= {0.6, 0.4, 0.0},
|
||||
dYellow= {0.6, 0.6, 0.0},
|
||||
dLame= {0.5, 0.6, 0.0},
|
||||
dGrass= {0.3, 0.6, 0.0},
|
||||
dGreen= {0.0, 0.6, 0.0},
|
||||
dWater= {0.0, 0.6, 0.4},
|
||||
dCyan= {0.0, 0.6, 0.6},
|
||||
dSky= {0.0, 0.4, 0.6},
|
||||
dSea= {0.0, 0.2, 0.6},
|
||||
dBlue= {0.1, 0.1, 0.6},
|
||||
dPurple= {0.2, 0.0, 0.6},
|
||||
dGrape= {0.4, 0.0, 0.6},
|
||||
dMagenta= {0.6, 0.0, 0.6},
|
||||
dPink= {0.6, 0.0, 0.3},
|
||||
lRed= {hsv(0.00, 0.38, 0.93)},
|
||||
lFire= {hsv(0.04, 0.45, 0.91)},
|
||||
lOrange= {hsv(0.10, 0.53, 0.92)},
|
||||
lYellow= {hsv(0.14, 0.61, 0.95)},
|
||||
lLime= {hsv(0.20, 0.66, 0.92)},
|
||||
lJade= {hsv(0.26, 0.56, 0.90)},
|
||||
lGreen= {hsv(0.34, 0.49, 0.89)},
|
||||
lAqua= {hsv(0.47, 0.59, 0.86)},
|
||||
lCyan= {hsv(0.51, 0.77, 0.88)},
|
||||
lNavy= {hsv(0.54, 0.80, 0.95)},
|
||||
lSea= {hsv(0.57, 0.72, 0.97)},
|
||||
lBlue= {hsv(0.64, 0.44, 0.96)},
|
||||
lViolet= {hsv(0.72, 0.47, 0.95)},
|
||||
lPurple= {hsv(0.80, 0.62, 0.89)},
|
||||
lMagenta= {hsv(0.86, 0.61, 0.89)},
|
||||
lWine= {hsv(0.93, 0.57, 0.92)},
|
||||
|
||||
black= {0.0, 0.0, 0.0},
|
||||
dGrey= {0.3, 0.3, 0.3},
|
||||
grey= {0.6, 0.6, 0.6},
|
||||
lGrey= {0.8, 0.8, 0.8},
|
||||
white= {1.0, 1.0, 1.0},
|
||||
dRed= {hsv(0.00, 0.80, 0.48)},
|
||||
dFire= {hsv(0.04, 0.80, 0.34)},
|
||||
dOrange= {hsv(0.07, 0.80, 0.39)},
|
||||
dYellow= {hsv(0.12, 0.80, 0.37)},
|
||||
dLime= {hsv(0.20, 0.80, 0.26)},
|
||||
dJade= {hsv(0.29, 0.80, 0.27)},
|
||||
dGreen= {hsv(0.33, 0.80, 0.26)},
|
||||
dAqua= {hsv(0.46, 0.80, 0.24)},
|
||||
dCyan= {hsv(0.50, 0.80, 0.30)},
|
||||
dNavy= {hsv(0.58, 0.80, 0.42)},
|
||||
dSea= {hsv(0.64, 0.80, 0.40)},
|
||||
dBlue= {hsv(0.67, 0.80, 0.34)},
|
||||
dViolet= {hsv(0.71, 0.80, 0.35)},
|
||||
dPurple= {hsv(0.76, 0.80, 0.32)},
|
||||
dMagenta= {hsv(0.87, 0.80, 0.28)},
|
||||
dWine= {hsv(0.92, 0.80, 0.28)},
|
||||
|
||||
black= {hsv(0.04, 0.04, 0.14)},
|
||||
dGray= {hsv(0.02, 0.05, 0.44)},
|
||||
gray= {hsv(0.02, 0.05, 0.65)},
|
||||
lGray= {hsv(0.02, 0.06, 0.86)},
|
||||
white= {hsv(0.01, 0.02, 0.99)},
|
||||
|
||||
xGray= {hsv(0.00, 0.00, 0.35,.8)},
|
||||
lxGray= {hsv(0.00, 0.00, 0.62,.8)},
|
||||
dxGray= {hsv(0.00, 0.00, 0.16,.8)},
|
||||
}
|
||||
local map={
|
||||
R="red", G="green", B="blue", C="cyan", Y="yellow", M="magenta",
|
||||
lR="lRed", lG="lGreen",lB="lBlue", lC="lCyan", lY="lYellow", lM="lMagenta",
|
||||
dR="dRed", dG="dGreen",dB="dBlue", dC="dCyan", dY="dYellow", dM="dMagenta",
|
||||
W="white",
|
||||
}for k,v in next,map do COLOR[k]=COLOR[v]end
|
||||
for k,v in next,{
|
||||
R='red', F='fire', O='orange', Y='yellow', L='lime', J='jade', G='green', A='aqua', C='cyan', N='navy', S='sea', B='blue', V='violet', P='purple', M='magenta', W='wine',
|
||||
lR='lRed',lF='lFire',lO='lOrange',lY='lYellow',lL='lLime',lJ='lJade',lG='lGreen',lA='lAqua',lC='lCyan',lN='lNavy',lS='lSea',lB='lBlue',lV='lViolet',lP='lPurple',lM='lMagenta',lW='lWine',
|
||||
dR='dRed',dF='dFire',dO='dOrange',dY='dYellow',dL='dLime',dJ='dJade',dG='dGreen',dA='dAqua',dC='dCyan',dN='dNavy',dS='dSea',dB='dBlue',dV='dViolet',dP='dPurple',dM='dMagenta',dW='dWine',
|
||||
D='black',dH='dGray',H='gray',lH='lGray',Z='white',
|
||||
X='xGray',lX='lxGray',dX='dxGray',
|
||||
--Remain letter: EIKQTUX
|
||||
}do
|
||||
COLOR[k]=COLOR[v]
|
||||
end
|
||||
setmetatable(COLOR,{__index=function(_,k)
|
||||
error("No color: "..tostring(k))
|
||||
end})
|
||||
|
||||
local list_norm={"red","fire","orange","yellow","lame","grass","green","water","cyan","sky","sea","blue","purple","grape","magenta","pink"}
|
||||
local len_list_norm=#list_norm
|
||||
local rnd=math.random
|
||||
function COLOR.random_norm()
|
||||
return COLOR[list_norm[rnd(len_list_norm)]]
|
||||
|
||||
do--Random generators
|
||||
local rnd=math.random
|
||||
local list_norm={'red','fire','orange','yellow','lime','jade','green','aqua','cyan','navy','sea','blue','violet','purple','magenta','wine'}
|
||||
local len_list_norm=#list_norm
|
||||
function COLOR.random_norm()
|
||||
return COLOR[list_norm[rnd(len_list_norm)]]
|
||||
end
|
||||
|
||||
local list_bright={'lRed','lFire','lOrange','lYellow','lLime','lJade','lGreen','lAqua','lCyan','lNavy','lSea','lBlue','lViolet','lPurple','lMagenta','lWine'}
|
||||
local len_list_bright=#list_bright
|
||||
function COLOR.random_bright()
|
||||
return COLOR[list_bright[rnd(len_list_bright)]]
|
||||
end
|
||||
|
||||
local list_dark={'dRed','dFire','dOrange','dYellow','dLime','dJade','dGreen','dAqua','dCyan','dNavy','dSea','dBlue','dViolet','dPurple','dMagenta','dWine'}
|
||||
local len_list_dark=#list_dark
|
||||
function COLOR.random_dark()
|
||||
return COLOR[list_dark[rnd(len_list_dark)]]
|
||||
end
|
||||
end
|
||||
|
||||
local list_bright={"lRed","lFire","lOrange","lYellow","lLame","lGrass","lGreen","lWater","lCyan","lSky","lSea","lBlue","lPurple","lGrape","lMagenta","lPink"}
|
||||
local len_list_bright=#list_bright
|
||||
function COLOR.random_bright()
|
||||
return COLOR[list_bright[rnd(len_list_bright)]]
|
||||
end
|
||||
|
||||
local list_dark={"dRed","dFire","dOrange","dYellow","dLame","dGrass","dGreen","dWater","dCyan","dSky","dSea","dBlue","dPurple","dGrape","dMagenta","dPink"}
|
||||
local len_list_dark=#list_dark
|
||||
function COLOR.random_bright()
|
||||
return COLOR[list_dark[rnd(len_list_dark)]]
|
||||
end
|
||||
|
||||
local sin=math.sin
|
||||
function COLOR.rainbow(phase)
|
||||
return
|
||||
sin(phase)*.4+.6,
|
||||
sin(phase+2.0944)*.4+.6,
|
||||
sin(phase-2.0944)*.4+.6
|
||||
do--Rainbow generators
|
||||
local sin=math.sin
|
||||
function COLOR.rainbow(phase,a)
|
||||
return
|
||||
sin(phase)*.4+.6,
|
||||
sin(phase+2.0944)*.4+.6,
|
||||
sin(phase-2.0944)*.4+.6,
|
||||
a
|
||||
end
|
||||
function COLOR.rainbow_light(phase,a)
|
||||
return
|
||||
sin(phase)*.2+.7,
|
||||
sin(phase+2.0944)*.2+.7,
|
||||
sin(phase-2.0944)*.2+.7,
|
||||
a
|
||||
end
|
||||
function COLOR.rainbow_dark(phase,a)
|
||||
return
|
||||
sin(phase)*.2+.4,
|
||||
sin(phase+2.0944)*.2+.4,
|
||||
sin(phase-2.0944)*.2+.4,
|
||||
a
|
||||
end
|
||||
function COLOR.rainbow_gray(phase,a)
|
||||
return
|
||||
sin(phase)*.16+.5,
|
||||
sin(phase+2.0944)*.16+.5,
|
||||
sin(phase-2.0944)*.16+.5,
|
||||
a
|
||||
end
|
||||
end
|
||||
|
||||
return COLOR
|
||||
@@ -1,153 +1,105 @@
|
||||
local fs=love.filesystem
|
||||
|
||||
local files={
|
||||
data= fs.newFile("data.dat"),
|
||||
setting=fs.newFile("settings.dat"),
|
||||
VK= fs.newFile("virtualkey.dat"),
|
||||
keyMap= fs.newFile("key.dat"),
|
||||
unlock= fs.newFile("unlock.dat"),
|
||||
}
|
||||
|
||||
local FILE={}
|
||||
function FILE.loadRecord(N)
|
||||
local F=fs.newFile(N..".dat")
|
||||
if F:open("r")then
|
||||
local s=loadstring(F:read())
|
||||
F:close()
|
||||
if s then
|
||||
setfenv(s,{})
|
||||
return s()
|
||||
else
|
||||
return{}
|
||||
end
|
||||
end
|
||||
end
|
||||
function FILE.saveRecord(N,L)
|
||||
local F=fs.newFile(N..".dat")
|
||||
F:open("w")
|
||||
local _,mes=F:write(dumpTable(L))
|
||||
F:flush()F:close()
|
||||
if not _ then
|
||||
LOG.print(text.recSavingError..(mes or"unknown error"),COLOR.red)
|
||||
end
|
||||
end
|
||||
function FILE.delRecord(N)
|
||||
fs.remove(N..".dat")
|
||||
function FILE.load(name,args)
|
||||
if not args then args=''end
|
||||
if fs.getInfo(name)then
|
||||
local F=fs.newFile(name)
|
||||
assert(F:open'r','open error')
|
||||
local s=F:read()F:close()
|
||||
local mode=
|
||||
STRING.sArg(args,'-luaon')and'luaon'or
|
||||
STRING.sArg(args,'-lua')and'lua'or
|
||||
STRING.sArg(args,'-json')and'json'or
|
||||
STRING.sArg(args,'-string')and'string'or
|
||||
s:sub(1,6)=='return{'and'luaon'or
|
||||
(s:sub(1,1)=='['and s:sub(-1)==']'or s:sub(1,1)=='{'and s:sub(-1)=='}')and'json'or
|
||||
'string'
|
||||
if mode=='luaon'then
|
||||
local func,err_mes=loadstring(s)
|
||||
if func then
|
||||
setfenv(func,{})
|
||||
local res=func()
|
||||
return assert(res,'decode error')
|
||||
else
|
||||
error('decode error: '..err_mes)
|
||||
end
|
||||
elseif mode=='lua'then
|
||||
local func,err_mes=loadstring(s)
|
||||
if func then
|
||||
local res=func()
|
||||
return assert(res,'run error')
|
||||
else
|
||||
error('compile error: '..err_mes)
|
||||
end
|
||||
elseif mode=='json'then
|
||||
local res=JSON.decode(s)
|
||||
if res then
|
||||
return res
|
||||
end
|
||||
error('decode error')
|
||||
elseif mode=='string'then
|
||||
return s
|
||||
else
|
||||
error('unknown mode')
|
||||
end
|
||||
else
|
||||
error('no file')
|
||||
end
|
||||
end
|
||||
function FILE.save(data,name,args)
|
||||
if not args then args=''end
|
||||
if STRING.sArg(args,'-d')and fs.getInfo(name)then
|
||||
error('duplicate')
|
||||
end
|
||||
|
||||
function FILE.loadUnlock()
|
||||
local F=files.unlock
|
||||
if F:open("r")then
|
||||
local s=F:read()
|
||||
if s:sub(1,6)~="return"then s="return{"..s.."}"end
|
||||
s=loadstring(s)
|
||||
F:close()
|
||||
if s then
|
||||
setfenv(s,{})
|
||||
RANKS=s()
|
||||
end
|
||||
end
|
||||
end
|
||||
function FILE.saveUnlock()
|
||||
local F=files.unlock
|
||||
F:open("w")
|
||||
local _,mes=F:write(dumpTable(RANKS))
|
||||
F:flush()F:close()
|
||||
if not _ then
|
||||
LOG.print(text.unlockSavingError..(mes or"unknown error"),COLOR.red)
|
||||
end
|
||||
end
|
||||
if type(data)=='table'then
|
||||
if STRING.sArg(args,'-luaon')then
|
||||
data=TABLE.dump(data)
|
||||
if not data then
|
||||
error('encode error')
|
||||
end
|
||||
else
|
||||
data=JSON.encode(data)
|
||||
if not data then
|
||||
error('encode error')
|
||||
end
|
||||
end
|
||||
else
|
||||
data=tostring(data)
|
||||
end
|
||||
|
||||
function FILE.loadData()
|
||||
local F=files.data
|
||||
if F:open("r")then
|
||||
local s=F:read()
|
||||
if s:sub(1,6)~="return"then
|
||||
s="return{"..s:gsub("\n",",").."}"
|
||||
end
|
||||
s=loadstring(s)
|
||||
F:close()
|
||||
if s then
|
||||
setfenv(s,{})
|
||||
local S=s()
|
||||
addToTable(S,STAT)
|
||||
end
|
||||
end
|
||||
local F=fs.newFile(name)
|
||||
assert(F:open('w'),'open error')
|
||||
F:write(data)F:flush()F:close()
|
||||
end
|
||||
function FILE.saveData()
|
||||
local F=files.data
|
||||
F:open("w")
|
||||
local _,mes=F:write(dumpTable(STAT))
|
||||
F:flush()F:close()
|
||||
if not _ then
|
||||
LOG.print(text.statSavingError..(mes or"unknown error"),COLOR.red)
|
||||
end
|
||||
function FILE.clear(path)
|
||||
if fs.getRealDirectory(path)==SAVEDIR and fs.getInfo(path).type=='directory'then
|
||||
for _,name in next,fs.getDirectoryItems(path)do
|
||||
name=path..'/'..name
|
||||
if fs.getRealDirectory(name)==SAVEDIR then
|
||||
local t=fs.getInfo(name).type
|
||||
if t=='file'then
|
||||
fs.remove(name)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function FILE.loadSetting()
|
||||
local F=files.setting
|
||||
if F:open("r")then
|
||||
local s=F:read()
|
||||
if s:sub(1,6)~="return"then
|
||||
s="return{"..s:gsub("\n",",").."}"
|
||||
end
|
||||
s=loadstring(s)
|
||||
F:close()
|
||||
if s then
|
||||
setfenv(s,{})
|
||||
addToTable(s(),SETTING)
|
||||
end
|
||||
end
|
||||
end
|
||||
function FILE.saveSetting()
|
||||
local F=files.setting
|
||||
F:open("w")
|
||||
local _,mes=F:write(dumpTable(SETTING))
|
||||
F:flush()F:close()
|
||||
if _ then LOG.print(text.settingSaved,COLOR.green)
|
||||
else LOG.print(text.settingSavingError..(mes or"unknown error"),COLOR.red)
|
||||
end
|
||||
end
|
||||
|
||||
function FILE.loadKeyMap()
|
||||
local F=files.keyMap
|
||||
if F:open("r")then
|
||||
local s=loadstring(F:read())
|
||||
F:close()
|
||||
if s then
|
||||
setfenv(s,{})
|
||||
addToTable(s(),keyMap)
|
||||
end
|
||||
end
|
||||
end
|
||||
function FILE.saveKeyMap()
|
||||
local F=files.keyMap
|
||||
F:open("w")
|
||||
local _,mes=F:write(dumpTable(keyMap))
|
||||
F:flush()F:close()
|
||||
if _ then LOG.print(text.keyMapSaved,COLOR.green)
|
||||
else LOG.print(text.keyMapSavingError..(mes or"unknown error"),COLOR.red)
|
||||
end
|
||||
end
|
||||
|
||||
function FILE.loadVK()
|
||||
local F=files.VK
|
||||
if F:open("r")then
|
||||
local s=loadstring(F:read())
|
||||
F:close()
|
||||
if s then
|
||||
setfenv(s,{})
|
||||
addToTable(s(),VK_org)
|
||||
end
|
||||
end
|
||||
end
|
||||
function FILE.saveVK()
|
||||
local F=files.VK
|
||||
F:open("w")
|
||||
local _,mes=F:write(dumpTable(VK_org))
|
||||
F:flush()F:close()
|
||||
if _ then LOG.print(text.VKSaved,COLOR.green)
|
||||
else LOG.print(text.VKSavingError..(mes or"unknown error"),COLOR.red)
|
||||
end
|
||||
function FILE.clear_s(path)
|
||||
if path==''or(fs.getRealDirectory(path)==SAVEDIR and fs.getInfo(path).type=='directory')then
|
||||
for _,name in next,fs.getDirectoryItems(path)do
|
||||
name=path..'/'..name
|
||||
if fs.getRealDirectory(name)==SAVEDIR then
|
||||
local t=fs.getInfo(name).type
|
||||
if t=='file'then
|
||||
fs.remove(name)
|
||||
elseif t=='directory'then
|
||||
FILE.clear_s(name)
|
||||
fs.remove(name)
|
||||
end
|
||||
end
|
||||
end
|
||||
fs.remove(path)
|
||||
end
|
||||
end
|
||||
return FILE
|
||||
60
Zframework/font.lua
Normal file
60
Zframework/font.lua
Normal file
@@ -0,0 +1,60 @@
|
||||
local gc=love.graphics
|
||||
local set=gc.setFont
|
||||
local fontFiles,fontCache={},{}
|
||||
local defaultFont,defaultFallBack
|
||||
local curFont=false--Current using font object
|
||||
|
||||
local FONT={}
|
||||
function FONT.setDefault(name)defaultFont=name end
|
||||
function FONT.setFallback(name)defaultFallBack=name end
|
||||
function FONT.rawget(s)
|
||||
if not fontCache[s]then
|
||||
fontCache[s]=gc.setNewFont(s,'light',gc.getDPIScale()*SCR.k*2)
|
||||
end
|
||||
return fontCache[s]
|
||||
end
|
||||
function FONT.rawset(s)
|
||||
set(fontCache[s]or FONT.rawget(s))
|
||||
end
|
||||
function FONT.load(fonts)
|
||||
for name,path in next,fonts do
|
||||
assert(love.filesystem.getInfo(path),STRING.repD("Font file $1($2) not exist!",name,path))
|
||||
fontFiles[name]=love.filesystem.newFile(path)
|
||||
fontCache[name]={}
|
||||
end
|
||||
FONT.reset()
|
||||
end
|
||||
function FONT.get(size,name)
|
||||
if not name then name=defaultFont end
|
||||
local f=fontCache[name][size]
|
||||
if not f then
|
||||
f=gc.setNewFont(fontFiles[name],size,'light',gc.getDPIScale()*SCR.k*2)
|
||||
if defaultFallBack and name~=defaultFallBack then
|
||||
f:setFallbacks(FONT.get(size,defaultFallBack))
|
||||
end
|
||||
fontCache[name][size]=f
|
||||
end
|
||||
return f
|
||||
end
|
||||
function FONT.set(size,name)
|
||||
if not name then name=defaultFont end
|
||||
|
||||
local f=fontCache[name][size]
|
||||
if f~=curFont then
|
||||
curFont=f or FONT.get(size,name)
|
||||
set(curFont)
|
||||
end
|
||||
end
|
||||
function FONT.reset()
|
||||
for name,cache in next,fontCache do
|
||||
if type(cache)=='table'then
|
||||
for size in next,cache do
|
||||
cache[size]=FONT.get(size,name)
|
||||
end
|
||||
else
|
||||
fontCache[name]=FONT.rawget(name)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return FONT
|
||||
164
Zframework/gcExtend.lua
Normal file
164
Zframework/gcExtend.lua
Normal file
@@ -0,0 +1,164 @@
|
||||
local gc=love.graphics
|
||||
local setColor,printf,draw=gc.setColor,gc.printf,gc.draw
|
||||
local GC={}
|
||||
function GC.mStr(obj,x,y)printf(obj,x-626,y,1252,'center')end--Printf a string with 'center'
|
||||
function GC.simpX(obj,x,y)draw(obj,x-obj:getWidth()*.5,y)end--Simply draw an obj with x=obj:getWidth()/2
|
||||
function GC.simpY(obj,x,y)draw(obj,x,y-obj:getHeight()*.5)end--Simply draw an obj with y=obj:getWidth()/2
|
||||
function GC.X(obj,x,y,a,k)draw(obj,x,y,a,k,nil,obj:getWidth()*.5,0)end--Draw an obj with x=obj:getWidth()/2
|
||||
function GC.Y(obj,x,y,a,k)draw(obj,x,y,a,k,nil,0,obj:getHeight()*.5)end--Draw an obj with y=obj:getWidth()/2
|
||||
function GC.draw(obj,x,y,a,k)draw(obj,x,y,a,k,nil,obj:getWidth()*.5,obj:getHeight()*.5)end--Draw an obj with both middle X & Y
|
||||
function GC.outDraw(obj,div,x,y,a,k)
|
||||
local w,h=obj:getWidth()*.5,obj:getHeight()*.5
|
||||
draw(obj,x-div,y-div,a,k,nil,w,h)
|
||||
draw(obj,x-div,y+div,a,k,nil,w,h)
|
||||
draw(obj,x+div,y-div,a,k,nil,w,h)
|
||||
draw(obj,x+div,y+div,a,k,nil,w,h)
|
||||
end
|
||||
function GC.shadedPrint(str,x,y,mode,d,clr1,clr2)
|
||||
local w=1280
|
||||
if mode=='center'then
|
||||
x=x-w*.5
|
||||
elseif mode=='right'then
|
||||
x=x-w
|
||||
end
|
||||
if not d then d=1 end
|
||||
setColor(clr1 or COLOR.D)
|
||||
printf(str,x-d,y-d,w,mode)
|
||||
printf(str,x-d,y+d,w,mode)
|
||||
printf(str,x+d,y-d,w,mode)
|
||||
printf(str,x+d,y+d,w,mode)
|
||||
setColor(clr2 or COLOR.Z)
|
||||
printf(str,x,y,w,mode)
|
||||
end
|
||||
function GC.regularPolygon(mode,x,y,R,segments,r,phase)
|
||||
local X,Y={},{}
|
||||
local ang=phase or 0
|
||||
local angStep=6.283185307179586/segments
|
||||
for i=1,segments do
|
||||
X[i]=x+R*math.cos(ang)
|
||||
Y[i]=y+R*math.sin(ang)
|
||||
ang=ang+angStep
|
||||
end
|
||||
X[segments+1]=x+R*math.cos(ang)
|
||||
Y[segments+1]=y+R*math.sin(ang)
|
||||
local halfAng=6.283185307179586/segments/2
|
||||
local erasedLen=r*math.tan(halfAng)
|
||||
if mode=='line'then
|
||||
erasedLen=erasedLen+1--Fix 1px cover
|
||||
for i=1,segments do
|
||||
--Line
|
||||
local x1,y1,x2,y2=X[i],Y[i],X[i+1],Y[i+1]
|
||||
local dir=math.atan2(y2-y1,x2-x1)
|
||||
gc.line(x1+erasedLen*math.cos(dir),y1+erasedLen*math.sin(dir),x2-erasedLen*math.cos(dir),y2-erasedLen*math.sin(dir))
|
||||
|
||||
--Arc
|
||||
ang=ang+angStep
|
||||
local R2=R-r/math.cos(halfAng)
|
||||
local arcCX,arcCY=x+R2*math.cos(ang),y+R2*math.sin(ang)
|
||||
gc.arc('line','open',arcCX,arcCY,r,ang-halfAng,ang+halfAng)
|
||||
end
|
||||
elseif mode=='fill'then
|
||||
local L={}
|
||||
for i=1,segments do
|
||||
--Line
|
||||
local x1,y1,x2,y2=X[i],Y[i],X[i+1],Y[i+1]
|
||||
local dir=math.atan2(y2-y1,x2-x1)
|
||||
table.insert(L,x1+erasedLen*math.cos(dir))
|
||||
table.insert(L,y1+erasedLen*math.sin(dir))
|
||||
table.insert(L,x2-erasedLen*math.cos(dir))
|
||||
table.insert(L,y2-erasedLen*math.sin(dir))
|
||||
|
||||
--Arc
|
||||
ang=ang+angStep
|
||||
local R2=R-r/math.cos(halfAng)
|
||||
local arcCX,arcCY=x+R2*math.cos(ang),y+R2*math.sin(ang)
|
||||
gc.arc('fill','open',arcCX,arcCY,r,ang-halfAng,ang+halfAng)
|
||||
end
|
||||
gc.polygon('fill',L)
|
||||
else
|
||||
error("Draw mode should be 'line' or 'fill'")
|
||||
end
|
||||
end
|
||||
do--function GC.DO(L)
|
||||
local cmds={
|
||||
origin="origin",
|
||||
move="translate",
|
||||
scale="scale",
|
||||
rotate="rotate",
|
||||
shear="shear",
|
||||
clear="clear",
|
||||
|
||||
setCL="setColor",
|
||||
setCM="setColorMask",
|
||||
setLW="setLineWidth",
|
||||
setLS="setLineStyle",
|
||||
setLJ="setLineJoin",
|
||||
|
||||
print="print",
|
||||
rawFT=function(...)FONT.rawset(...)end,
|
||||
setFT=function(...)FONT.set(...)end,
|
||||
mText=GC.mStr,
|
||||
mDraw=GC.draw,
|
||||
mDrawX=GC.X,
|
||||
mDrawY=GC.Y,
|
||||
mOutDraw=GC.outDraw,
|
||||
|
||||
draw="draw",
|
||||
line="line",
|
||||
fRect=function(...)gc.rectangle('fill',...)end,
|
||||
dRect=function(...)gc.rectangle('line',...)end,
|
||||
fCirc=function(...)gc.circle('fill',...)end,
|
||||
dCirc=function(...)gc.circle('line',...)end,
|
||||
fElps=function(...)gc.ellipse('fill',...)end,
|
||||
dElps=function(...)gc.ellipse('line',...)end,
|
||||
fPoly=function(...)gc.polygon('fill',...)end,
|
||||
dPoly=function(...)gc.polygon('line',...)end,
|
||||
|
||||
dPie=function(...)gc.arc('line',...)end,
|
||||
dArc=function(...)gc.arc('line','open',...)end,
|
||||
dBow=function(...)gc.arc('line','closed',...)end,
|
||||
fPie=function(...)gc.arc('fill',...)end,
|
||||
fArc=function(...)gc.arc('fill','open',...)end,
|
||||
fBow=function(...)gc.arc('fill','closed',...)end,
|
||||
|
||||
fRPol=function(...)GC.regularPolygon('fill',...)end,
|
||||
dRPol=function(...)GC.regularPolygon('line',...)end,
|
||||
}
|
||||
local sizeLimit=gc.getSystemLimits().texturesize
|
||||
function GC.DO(L)
|
||||
gc.push()
|
||||
::REPEAT_tryAgain::
|
||||
local success,canvas=pcall(gc.newCanvas,math.min(L[1],sizeLimit),math.min(L[2],sizeLimit))
|
||||
if not success then
|
||||
sizeLimit=math.floor(sizeLimit*.8)
|
||||
goto REPEAT_tryAgain
|
||||
end
|
||||
gc.setCanvas(canvas)
|
||||
gc.origin()
|
||||
gc.clear(1,1,1,0)
|
||||
gc.setColor(1,1,1)
|
||||
gc.setLineWidth(1)
|
||||
for i=3,#L do
|
||||
local cmd=L[i][1]
|
||||
if type(cmd)=='boolean'and cmd then
|
||||
table.remove(L[i],1)
|
||||
cmd=L[i][1]
|
||||
end
|
||||
if type(cmd)=='string'then
|
||||
local func=cmds[cmd]
|
||||
if type(func)=='string'then
|
||||
func=gc[func]
|
||||
end
|
||||
if func then
|
||||
func(unpack(L[i],2))
|
||||
else
|
||||
error("No gc command: "..cmd)
|
||||
end
|
||||
end
|
||||
end
|
||||
gc.setCanvas()
|
||||
gc.pop()
|
||||
return canvas
|
||||
end
|
||||
end
|
||||
return GC
|
||||
25
Zframework/image.lua
Normal file
25
Zframework/image.lua
Normal file
@@ -0,0 +1,25 @@
|
||||
local IMG={}
|
||||
function IMG.init(list)
|
||||
IMG.init=nil
|
||||
|
||||
setmetatable(IMG,{__index=function(self,name)
|
||||
if type(list[name])=='table'then
|
||||
self[name]={}
|
||||
for i=1,#list[name]do
|
||||
self[name][i]=love.graphics.newImage(list[name][i])
|
||||
end
|
||||
elseif type(list[name])=='string'then
|
||||
self[name]=love.graphics.newImage(list[name])
|
||||
else
|
||||
LOG("No IMG: "..name)
|
||||
self[name]=PAPER
|
||||
end
|
||||
return self[name]
|
||||
end})
|
||||
|
||||
function IMG.loadAll()
|
||||
for k in next,list do local _=IMG[k]end
|
||||
IMG.loadAll=nil
|
||||
end
|
||||
end
|
||||
return IMG
|
||||
@@ -1,42 +0,0 @@
|
||||
local IMG={
|
||||
batteryImage="/mess/power.png",
|
||||
title="mess/title.png",
|
||||
title_color="mess/title_colored.png",
|
||||
dialCircle="mess/dialCircle.png",
|
||||
dialNeedle="mess/dialNeedle.png",
|
||||
lifeIcon="mess/life.png",
|
||||
badgeIcon="mess/badge.png",
|
||||
spinCenter="mess/spinCenter.png",
|
||||
ctrlSpeedLimit="mess/ctrlSpeedLimit.png",
|
||||
speedLimit="mess/speedLimit.png",
|
||||
pay1="mess/pay1.png",
|
||||
pay2="mess/pay2.png",
|
||||
|
||||
miyaCH="miya/ch.png",
|
||||
miyaF1="miya/f1.png",
|
||||
miyaF2="miya/f2.png",
|
||||
miyaF3="miya/f3.png",
|
||||
miyaF4="miya/f4.png",
|
||||
|
||||
electric="mess/electric.png",
|
||||
hbm="mess/hbm.png",
|
||||
}
|
||||
local list={}
|
||||
local count=0
|
||||
for k,_ in next,IMG do
|
||||
count=count+1
|
||||
list[count]=k
|
||||
end
|
||||
function IMG.getCount()
|
||||
return count
|
||||
end
|
||||
function IMG.loadOne(_)
|
||||
local N=list[_]
|
||||
IMG[N]=love.graphics.newImage("/image/"..IMG[N])
|
||||
end
|
||||
function IMG.loadAll()
|
||||
for i=1,count do
|
||||
IMG.loadOne(i)
|
||||
end
|
||||
end
|
||||
return IMG
|
||||
1355
Zframework/init.lua
1355
Zframework/init.lua
File diff suppressed because it is too large
Load Diff
340
Zframework/json.lua
Normal file
340
Zframework/json.lua
Normal file
@@ -0,0 +1,340 @@
|
||||
-- json.lua
|
||||
|
||||
-- Copyright (c) 2020 rxi
|
||||
|
||||
-- Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
-- this software and associated documentation files (the "Software"), to deal in
|
||||
-- the Software without restriction, including without limitation the rights to
|
||||
-- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
-- of the Software, and to permit persons to whom the Software is furnished to do
|
||||
-- so, subject to the following conditions:
|
||||
|
||||
-- The above copyright notice and this permission notice shall be included in all
|
||||
-- copies or substantial portions of the Software.
|
||||
|
||||
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
-- SOFTWARE.
|
||||
|
||||
-- Editted by MrZ
|
||||
|
||||
local ins,char=table.insert,string.char
|
||||
local json = {}
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- Encode
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
local _encode
|
||||
|
||||
local escape_char_map = {
|
||||
["\\"] = "\\",
|
||||
["\""] = "\"",
|
||||
["\b"] = "b",
|
||||
["\f"] = "f",
|
||||
["\n"] = "n",
|
||||
["\r"] = "r",
|
||||
["\t"] = "t"
|
||||
}
|
||||
|
||||
local escape_char_map_inv = {["/"] = "/"}
|
||||
for k, v in pairs(escape_char_map) do escape_char_map_inv[v] = k end
|
||||
|
||||
local function escape_char(c)
|
||||
return "\\" .. (escape_char_map[c] or string.format("u%04x", c:byte()))
|
||||
end
|
||||
|
||||
local function encode_nil() return "null" end
|
||||
|
||||
local function encode_table(val, stack)
|
||||
local res = {}
|
||||
stack = stack or {}
|
||||
|
||||
-- Circular reference?
|
||||
if stack[val] then error("circular reference") end
|
||||
|
||||
stack[val] = true
|
||||
|
||||
if rawget(val, 1) ~= nil or next(val) == nil then
|
||||
-- Treat as array -- check keys are valid and it is not sparse
|
||||
local n = 0
|
||||
for k in pairs(val) do
|
||||
if type(k) ~= 'number' then
|
||||
error("invalid table: mixed or invalid key types")
|
||||
end
|
||||
n = n + 1
|
||||
end
|
||||
if n ~= #val then error("invalid table: sparse array") end
|
||||
-- Encode
|
||||
for _, v in ipairs(val) do ins(res, _encode(v, stack)) end
|
||||
stack[val] = nil
|
||||
return "[" .. table.concat(res, ",") .. "]"
|
||||
|
||||
else
|
||||
-- Treat as an object
|
||||
for k, v in pairs(val) do
|
||||
if type(k) ~= 'string' then
|
||||
error("invalid table: mixed or invalid key types")
|
||||
end
|
||||
ins(res, _encode(k, stack) .. ":" .. _encode(v, stack))
|
||||
end
|
||||
stack[val] = nil
|
||||
return "{" .. table.concat(res, ",") .. "}"
|
||||
end
|
||||
end
|
||||
|
||||
local function encode_string(val)
|
||||
return '"' .. val:gsub('[%z\1-\31\\"]', escape_char) .. '"'
|
||||
end
|
||||
|
||||
local function encode_number(val)
|
||||
-- Check for NaN, -inf and inf
|
||||
if val ~= val or val <= -math.huge or val >= math.huge then
|
||||
error("unexpected number value '" .. tostring(val) .. "'")
|
||||
end
|
||||
return string.format("%.14g", val)
|
||||
end
|
||||
|
||||
local type_func_map = {
|
||||
['nil'] = encode_nil,
|
||||
['table'] = encode_table,
|
||||
['string'] = encode_string,
|
||||
['number'] = encode_number,
|
||||
['boolean'] = tostring
|
||||
}
|
||||
|
||||
_encode = function(val, stack)
|
||||
local t = type(val)
|
||||
local f = type_func_map[t]
|
||||
if f then return f(val, stack) end
|
||||
error("unexpected type '" .. t .. "'")
|
||||
end
|
||||
|
||||
json.encode=_encode
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- Decode
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
local parse
|
||||
|
||||
local function create_set(...)
|
||||
local res = {}
|
||||
for i = 1, select("#", ...) do res[select(i, ...)] = true end
|
||||
return res
|
||||
end
|
||||
|
||||
local space_chars = create_set(" ", "\t", "\r", "\n")
|
||||
local delim_chars = create_set(" ", "\t", "\r", "\n", "]", "}", ",")
|
||||
local escape_chars = create_set("\\", "/", '"', "b", "f", "n", "r", "t", "u")
|
||||
local literals = create_set("true", "false", "null")
|
||||
|
||||
local literal_map = {["true"] = true, ["false"] = false, ["null"] = nil}
|
||||
|
||||
local function next_char(str, idx, set, negate)
|
||||
for i = idx, #str do if set[str:sub(i, i)] ~= negate then return i end end
|
||||
return #str + 1
|
||||
end
|
||||
|
||||
local function decode_error(str, idx, msg)
|
||||
local line_count = 1
|
||||
local col_count = 1
|
||||
for i = 1, idx - 1 do
|
||||
col_count = col_count + 1
|
||||
if str:sub(i, i) == "\n" then
|
||||
line_count = line_count + 1
|
||||
col_count = 1
|
||||
end
|
||||
end
|
||||
error(string.format("%s at line %d col %d", msg, line_count, col_count))
|
||||
end
|
||||
|
||||
local function codepoint_to_utf8(n)
|
||||
-- http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=iws-appendixa
|
||||
local f = bit.rshift
|
||||
if n <= 0x7f then
|
||||
return char(n)
|
||||
elseif n <= 0x7ff then
|
||||
return char(f(n, 6) + 192, n % 64 + 128)
|
||||
elseif n <= 0xffff then
|
||||
return char(f(n, 12) + 224, f(n % 4096, 6) + 128, n % 64 + 128)
|
||||
elseif n <= 0x10ffff then
|
||||
return char(f(n, 18) + 240, f(n % 262144, 12) + 128, f(n % 4096, 6) + 128, n % 64 + 128)
|
||||
end
|
||||
error(string.format("invalid unicode codepoint '%x'", n))
|
||||
end
|
||||
|
||||
local function parse_unicode_escape(s)
|
||||
local n1 = tonumber(s:sub(1, 4), 16)
|
||||
local n2 = tonumber(s:sub(7, 10), 16)
|
||||
-- Surrogate pair?
|
||||
if n2 then
|
||||
return
|
||||
codepoint_to_utf8((n1 - 0xd800) * 0x400 + (n2 - 0xdc00) + 0x10000)
|
||||
else
|
||||
return codepoint_to_utf8(n1)
|
||||
end
|
||||
end
|
||||
|
||||
local function parse_string(str, i)
|
||||
local res = ""
|
||||
local j = i + 1
|
||||
local k = j
|
||||
|
||||
while j <= #str do
|
||||
local x = str:byte(j)
|
||||
|
||||
if x < 32 then
|
||||
decode_error(str, j, "control character in string")
|
||||
|
||||
elseif x == 92 then -- `\`: Escape
|
||||
res = res .. str:sub(k, j - 1)
|
||||
j = j + 1
|
||||
local c = str:sub(j, j)
|
||||
if c == "u" then
|
||||
local hex = str:match("^[dD][89aAbB]%x%x\\u%x%x%x%x", j + 1) or
|
||||
str:match("^%x%x%x%x", j + 1) or
|
||||
decode_error(str, j - 1,
|
||||
"invalid unicode escape in string")
|
||||
res = res .. parse_unicode_escape(hex)
|
||||
j = j + #hex
|
||||
else
|
||||
if not escape_chars[c] then
|
||||
decode_error(str, j - 1,
|
||||
"invalid escape char '" .. c .. "' in string")
|
||||
end
|
||||
res = res .. escape_char_map_inv[c]
|
||||
end
|
||||
k = j + 1
|
||||
|
||||
elseif x == 34 then -- `"`: End of string
|
||||
res = res .. str:sub(k, j - 1)
|
||||
return res, j + 1
|
||||
end
|
||||
|
||||
j = j + 1
|
||||
end
|
||||
|
||||
decode_error(str, i, "expected closing quote for string")
|
||||
end
|
||||
|
||||
local function parse_number(str, i)
|
||||
local x = next_char(str, i, delim_chars)
|
||||
local s = str:sub(i, x - 1)
|
||||
local n = tonumber(s)
|
||||
if not n then decode_error(str, i, "invalid number '" .. s .. "'") end
|
||||
return n, x
|
||||
end
|
||||
|
||||
local function parse_literal(str, i)
|
||||
local x = next_char(str, i, delim_chars)
|
||||
local word = str:sub(i, x - 1)
|
||||
if not literals[word] then
|
||||
decode_error(str, i, "invalid literal '" .. word .. "'")
|
||||
end
|
||||
return literal_map[word], x
|
||||
end
|
||||
|
||||
local function parse_array(str, i)
|
||||
local res = {}
|
||||
local n = 1
|
||||
i = i + 1
|
||||
while 1 do
|
||||
local x
|
||||
i = next_char(str, i, space_chars, true)
|
||||
-- Empty / end of array?
|
||||
if str:sub(i, i) == "]" then
|
||||
i = i + 1
|
||||
break
|
||||
end
|
||||
-- Read token
|
||||
x, i = parse(str, i)
|
||||
res[n] = x
|
||||
n = n + 1
|
||||
-- Next token
|
||||
i = next_char(str, i, space_chars, true)
|
||||
local chr = str:sub(i, i)
|
||||
i = i + 1
|
||||
if chr == "]" then break end
|
||||
if chr ~= "," then decode_error(str, i, "expected ']' or ','") end
|
||||
end
|
||||
return res, i
|
||||
end
|
||||
|
||||
local function parse_object(str, i)
|
||||
local res = {}
|
||||
i = i + 1
|
||||
while 1 do
|
||||
local key, val
|
||||
i = next_char(str, i, space_chars, true)
|
||||
-- Empty / end of object?
|
||||
if str:sub(i, i) == "}" then
|
||||
i = i + 1
|
||||
break
|
||||
end
|
||||
-- Read key
|
||||
if str:sub(i, i) ~= '"' then
|
||||
decode_error(str, i, "expected string for key")
|
||||
end
|
||||
key, i = parse(str, i)
|
||||
-- Read ':' delimiter
|
||||
i = next_char(str, i, space_chars, true)
|
||||
if str:sub(i, i) ~= ":" then
|
||||
decode_error(str, i, "expected ':' after key")
|
||||
end
|
||||
i = next_char(str, i + 1, space_chars, true)
|
||||
-- Read value
|
||||
val, i = parse(str, i)
|
||||
-- Set
|
||||
res[key] = val
|
||||
-- Next token
|
||||
i = next_char(str, i, space_chars, true)
|
||||
local chr = str:sub(i, i)
|
||||
i = i + 1
|
||||
if chr == "}" then break end
|
||||
if chr ~= "," then decode_error(str, i, "expected '}' or ','") end
|
||||
end
|
||||
return res, i
|
||||
end
|
||||
|
||||
local char_func_map = {
|
||||
['"'] = parse_string,
|
||||
["0"] = parse_number,
|
||||
["1"] = parse_number,
|
||||
["2"] = parse_number,
|
||||
["3"] = parse_number,
|
||||
["4"] = parse_number,
|
||||
["5"] = parse_number,
|
||||
["6"] = parse_number,
|
||||
["7"] = parse_number,
|
||||
["8"] = parse_number,
|
||||
["9"] = parse_number,
|
||||
["-"] = parse_number,
|
||||
["t"] = parse_literal,
|
||||
["f"] = parse_literal,
|
||||
["n"] = parse_literal,
|
||||
["["] = parse_array,
|
||||
["{"] = parse_object
|
||||
}
|
||||
|
||||
function parse(str, idx)
|
||||
local chr = str:sub(idx, idx)
|
||||
local f = char_func_map[chr]
|
||||
if f then return f(str, idx) end
|
||||
decode_error(str, idx, "unexpected character '" .. chr .. "'")
|
||||
end
|
||||
|
||||
function json.decode(str)
|
||||
if type(str) ~= 'string' then
|
||||
error("expected argument of type string, got " .. type(str))
|
||||
end
|
||||
local res, idx = parse(str, next_char(str, 1, space_chars, true))
|
||||
idx = next_char(str, idx, space_chars, true)
|
||||
if idx <= #str then decode_error(str, idx, "trailing garbage") end
|
||||
return res
|
||||
end
|
||||
return json
|
||||
@@ -1,99 +1,57 @@
|
||||
local langList={
|
||||
require("LANG/lang_zh"),
|
||||
require("LANG/lang_zh2"),
|
||||
require("LANG/lang_en"),
|
||||
require("LANG/lang_fr"),
|
||||
require("LANG/lang_sp"),
|
||||
require("LANG/lang_symbol"),
|
||||
require("LANG/lang_yygq"),
|
||||
--Add new language file to LANG folder. Attention, new language won't show in-game when you add language
|
||||
}
|
||||
local publicText={
|
||||
block={
|
||||
"Z","S","J","L","T","O","I",
|
||||
"Z5","S5","Q","P","F","E",
|
||||
"T5","U","V","W","X",
|
||||
"J5","L5","R","Y","N","H","I5"
|
||||
},
|
||||
}
|
||||
local publicWidgetText={
|
||||
calculator={
|
||||
_1="1",_2="2",_3="3",
|
||||
_4="4",_5="5",_6="6",
|
||||
_7="7",_8="8",_9="9",
|
||||
_0="0",["."]=".",e="e",
|
||||
["+"]="+",["-"]="-",["*"]="*",["/"]="/",
|
||||
["<"]="<",["="]="=",
|
||||
play="-->",
|
||||
},
|
||||
staff={},
|
||||
history={
|
||||
prev="↑",
|
||||
next="↓",
|
||||
},
|
||||
lang={
|
||||
zh="中文",
|
||||
zh2="全中文",
|
||||
en="English",
|
||||
fr="Français",
|
||||
sp="Español",
|
||||
symbol="?????",
|
||||
yygq="就这?",
|
||||
},
|
||||
}
|
||||
local function langFallback(T0,T)
|
||||
for k,v in next,T0 do
|
||||
if type(v)=="table"and not v.refuseCopy then--refuseCopy: just copy pointer, not contents
|
||||
if not T[k]then T[k]={}end
|
||||
if type(T[k])=="table"then langFallback(v,T[k])end
|
||||
elseif not T[k]then
|
||||
T[k]=v
|
||||
end
|
||||
end
|
||||
end
|
||||
local tipMeta={__call=function(L)return L[math.random(#L)]end}
|
||||
for i=1,#langList do
|
||||
local L=langList[i]
|
||||
|
||||
--Set public text
|
||||
for key,list in next,publicText do
|
||||
L[key]=list
|
||||
end
|
||||
|
||||
--Set public widget text
|
||||
for key,list in next,publicWidgetText do
|
||||
local WT=L.WidgetText
|
||||
if not WT[key]then WT[key]={}end
|
||||
for k,v in next,list do
|
||||
WT[key][k]=v
|
||||
end
|
||||
end
|
||||
|
||||
--Fallback to other language, default zh
|
||||
if i>1 then
|
||||
langFallback(langList[L.fallback or 1],L)
|
||||
end
|
||||
|
||||
--Metatable:__call for table:getTip
|
||||
if type(L.getTip)=="table"then
|
||||
setmetatable(L.getTip,tipMeta)
|
||||
end
|
||||
|
||||
--set global name for all back button
|
||||
for _,v in next,L.WidgetText do
|
||||
v.back=L.back
|
||||
end
|
||||
end
|
||||
|
||||
local LANG={}
|
||||
function LANG.getLen()
|
||||
return #langList
|
||||
end
|
||||
function LANG.set(l)
|
||||
text=langList[l]
|
||||
WIDGET.setLang(text.WidgetText)
|
||||
for _,s in next,drawableTextLoad do
|
||||
drawableText[s]:set(text[s])
|
||||
end
|
||||
--ONLY FIRST CALL MAKE SENSE
|
||||
--Create LANG.get() and LANG.addScene()
|
||||
function LANG.init(defaultLang,langList,publicText,pretreatFunc)
|
||||
local function _langFallback(T0,T)
|
||||
for k,v in next,T0 do
|
||||
if type(v)=='table'and not v.refuseCopy then--refuseCopy: just copy pointer, not contents
|
||||
if not T[k]then T[k]={}end
|
||||
if type(T[k])=='table'then
|
||||
_langFallback(v,T[k])
|
||||
end
|
||||
elseif not T[k]then
|
||||
T[k]=v
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--Set public text
|
||||
if publicText then
|
||||
for _,L in next,langList do
|
||||
for key,list in next,publicText do L[key]=list end
|
||||
end
|
||||
end
|
||||
|
||||
--Fallback to default language
|
||||
for name,L in next,langList do
|
||||
if name~=defaultLang then
|
||||
_langFallback(langList[L.fallback or defaultLang],L)
|
||||
end
|
||||
end
|
||||
|
||||
--Custom pretreatment for each language
|
||||
if pretreatFunc then
|
||||
for _,L in next,langList do
|
||||
pretreatFunc(L)
|
||||
end
|
||||
end
|
||||
|
||||
function LANG.get(l)
|
||||
if not langList[l]then
|
||||
LOG("Wrong language: "..tostring(l))
|
||||
l=defaultLang
|
||||
end
|
||||
return langList[l]
|
||||
end
|
||||
|
||||
function LANG.addScene(name)
|
||||
for _,L in next,langList do
|
||||
if L.WidgetText and not L.WidgetText[name]then
|
||||
L.WidgetText[name]={}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function LANG.init()end
|
||||
end
|
||||
return LANG
|
||||
@@ -1,89 +0,0 @@
|
||||
--LIGHT MODULE(Optimized by MrZ,Original on github/love2d community/simple-love-lights)
|
||||
--Heavily based on mattdesl's libGDX implementation:
|
||||
--https://github.com/mattdesl/lwjgl-basics/wiki/2D-Pixel-Perfect-Shadows
|
||||
local gc=love.graphics
|
||||
local C=gc.clear
|
||||
local shadowMapShader=gc.newShader("Zframework/shader/shadowMap.glsl")--Shader for caculating the 1D shadow map.
|
||||
local lightRenderShader=gc.newShader("Zframework/shader/lightRender.glsl")--Shader for rendering blurred lights and shadows.
|
||||
local Lights={}--Lightsource objects
|
||||
local function move(L,x,y)
|
||||
L.x,L.y=x,y
|
||||
end
|
||||
local function setPow(L,pow)
|
||||
L.size=pow
|
||||
end
|
||||
local function destroy(L)
|
||||
L.blackCanvas:release()
|
||||
L.shadowCanvas:release()
|
||||
L.renderCanvas:release()
|
||||
end
|
||||
local function draw(L)
|
||||
--Initialization
|
||||
local r,g,b,a=love.graphics.getColor()
|
||||
gc.setCanvas(L.blackCanvas)C()
|
||||
gc.setCanvas(L.shadowCanvas)C()
|
||||
gc.setCanvas(L.renderCanvas)C()
|
||||
lightRenderShader:send("xresolution",L.size)
|
||||
shadowMapShader:send("yresolution",L.size)
|
||||
|
||||
--Get up-left of light
|
||||
local X=L.x-L.size*.5
|
||||
local Y=L.y-L.size*.5
|
||||
|
||||
--Render solid
|
||||
gc.translate(-X,-Y)
|
||||
L.blackCanvas:renderTo(L.blackFn)
|
||||
gc.translate(X,Y)
|
||||
|
||||
--Render shade canvas by solid
|
||||
gc.setShader(shadowMapShader)
|
||||
gc.setCanvas(L.shadowCanvas)
|
||||
gc.draw(L.blackCanvas)
|
||||
|
||||
--Render light canvas by shade
|
||||
gc.setShader(lightRenderShader)
|
||||
gc.setCanvas(L.renderCanvas)
|
||||
gc.draw(L.shadowCanvas,0,0,0,1,L.size)
|
||||
|
||||
--Ready to final render
|
||||
gc.setShader()gc.setCanvas()gc.setBlendMode("add")
|
||||
|
||||
--Render to screes
|
||||
gc.setColor(r,g,b,a)
|
||||
gc.draw(L.renderCanvas,X,Y+L.size,0,1,-1)
|
||||
|
||||
--Reset
|
||||
gc.setBlendMode("alpha")
|
||||
end
|
||||
|
||||
local LIGHT={}
|
||||
function LIGHT.draw()
|
||||
for i=1,#Lights do
|
||||
Lights[i]:draw()
|
||||
end
|
||||
end
|
||||
function LIGHT.clear()
|
||||
for i=#Lights,1,-1 do
|
||||
Lights[i]:destroy()
|
||||
Lights[i]=nil
|
||||
end
|
||||
end
|
||||
function LIGHT.add(x,y,R,F)
|
||||
local id=#Lights+1
|
||||
Lights[id]={
|
||||
--Methods
|
||||
id=id,
|
||||
x=x,y=y,size=R,
|
||||
blackCanvas=gc.newCanvas(R,R),--Solid canvas
|
||||
shadowCanvas=gc.newCanvas(R,1),--1D vis-depth canvas
|
||||
renderCanvas=gc.newCanvas(R,R),--Light canvas
|
||||
blackFn=F,--Solid draw funcion
|
||||
|
||||
|
||||
move=move,
|
||||
setPow=setPow,
|
||||
draw=draw,
|
||||
destroy=destroy,
|
||||
}
|
||||
end
|
||||
return LIGHT
|
||||
86
Zframework/light/init.lua
Normal file
86
Zframework/light/init.lua
Normal file
@@ -0,0 +1,86 @@
|
||||
--LIGHT MODULE (Optimized by MrZ, Original on github/LÖVE community/simple-love-lights)
|
||||
--Heavily based on mattdesl's libGDX implementation:
|
||||
--https://github.com/mattdesl/lwjgl-basics/wiki/2D-Pixel-Perfect-Shadows
|
||||
local gc=love.graphics
|
||||
local clear,gc_translate=gc.clear,gc.translate
|
||||
local gc_setCanvas,gc_setShader=gc.setCanvas,gc.setShader
|
||||
local gc_setColor,gc_draw=gc.setColor,gc.draw
|
||||
|
||||
local shadowMapShader=gc.newShader('Zframework/light/shadowMap.glsl')--Shader for caculating the 1D shadow map.
|
||||
local lightRenderShader=gc.newShader('Zframework/light/lightRender.glsl')--Shader for rendering blurred lights and shadows.
|
||||
local Lights={}--Lightsource objects
|
||||
local function move(L,x,y)
|
||||
L.x,L.y=x,y
|
||||
end
|
||||
local function setPow(L,pow)
|
||||
L.size=pow
|
||||
end
|
||||
local function drawLight(L)
|
||||
local s=L.size
|
||||
|
||||
--Initialization
|
||||
gc_setCanvas(L.blackCanvas)clear()
|
||||
gc_setCanvas(L.shadowCanvas)clear()
|
||||
gc_setCanvas(L.renderCanvas)clear()
|
||||
lightRenderShader:send('xresolution',s)
|
||||
shadowMapShader:send('yresolution',s)
|
||||
|
||||
--Get up-left of light
|
||||
local X=L.x-s*.5
|
||||
local Y=L.y-s*.5
|
||||
|
||||
--Render solid
|
||||
gc_translate(-X,-Y)
|
||||
L.blackCanvas:renderTo(L.blackFn)
|
||||
gc_translate(X,Y)
|
||||
|
||||
--Render shade canvas by solid
|
||||
gc_setShader(shadowMapShader)
|
||||
gc_setCanvas(L.shadowCanvas)
|
||||
gc_draw(L.blackCanvas)
|
||||
|
||||
--Render light canvas by shade
|
||||
gc_setShader(lightRenderShader)
|
||||
gc_setCanvas(L.renderCanvas)
|
||||
gc_draw(L.shadowCanvas,0,0,0,1,s)
|
||||
|
||||
--Ready to final render
|
||||
gc_setShader()gc_setCanvas()gc.setBlendMode('add')
|
||||
|
||||
--Render to screen
|
||||
gc_draw(L.renderCanvas,X,Y+s,0,1,-1)
|
||||
|
||||
--Reset
|
||||
gc.setBlendMode('alpha')
|
||||
end
|
||||
|
||||
local LIGHT={}
|
||||
function LIGHT.draw()
|
||||
gc_setColor(1,1,1)
|
||||
for i=1,#Lights do
|
||||
drawLight(Lights[i])
|
||||
end
|
||||
end
|
||||
function LIGHT.clear()
|
||||
for i=1,#Lights do
|
||||
Lights[i].blackCanvas:release()
|
||||
Lights[i].shadowCanvas:release()
|
||||
Lights[i].renderCanvas:release()
|
||||
Lights[i]=nil
|
||||
end
|
||||
end
|
||||
function LIGHT.add(x,y,radius,solidFunc)
|
||||
local id=#Lights+1
|
||||
Lights[id]={
|
||||
id=id,
|
||||
x=x,y=y,size=radius,
|
||||
blackCanvas=gc.newCanvas(radius,radius),--Solid canvas
|
||||
shadowCanvas=gc.newCanvas(radius,1),--1D vis-depth canvas
|
||||
renderCanvas=gc.newCanvas(radius,radius),--Light canvas
|
||||
blackFn=solidFunc,--Solid draw function
|
||||
|
||||
move=move,
|
||||
setPow=setPow,
|
||||
}
|
||||
end
|
||||
return LIGHT
|
||||
29
Zframework/light/lightRender.glsl
Normal file
29
Zframework/light/lightRender.glsl
Normal file
@@ -0,0 +1,29 @@
|
||||
#define PI 3.14159
|
||||
extern float xresolution;
|
||||
// Sample from 1D vis-depth map
|
||||
float samp(vec2 coord,float r,Image u_texture){
|
||||
return step(r,Texel(u_texture,coord).r);
|
||||
}
|
||||
vec4 effect(vec4 color,Image tex,vec2 tex_coords,vec2 screen_coords){
|
||||
// Cartesian to polar, y of 1D sample is always 0
|
||||
vec2 norm=tex_coords.st*2.-1.;
|
||||
vec2 tc=vec2((atan(norm.y,norm.x)+PI)/(2.*PI),0.);
|
||||
float r=length(norm);
|
||||
|
||||
// Enlarge blur parameter by distance, light scattering simulation
|
||||
float blur=(1./xresolution)*smoothstep(0.3,1.,r);
|
||||
|
||||
// Simple Gaussian blur
|
||||
float sum=// Brightness(0~1)
|
||||
samp(vec2(tc.x-3.*blur,tc.y),r,tex)*0.1
|
||||
+samp(vec2(tc.x-2.*blur,tc.y),r,tex)*0.13
|
||||
+samp(vec2(tc.x-1.*blur,tc.y),r,tex)*0.17
|
||||
|
||||
+samp(tc,r,tex)*0.2// The center tex coord, which gives us hard shadows.
|
||||
+samp(vec2(tc.x+1.*blur,tc.y),r,tex)*0.17
|
||||
+samp(vec2(tc.x+2.*blur,tc.y),r,tex)*0.13
|
||||
+samp(vec2(tc.x+3.*blur,tc.y),r,tex)*0.1;
|
||||
|
||||
// Multiply the distance to get a soft fading
|
||||
return vec4(vec3(1.),sum*smoothstep(1.,0.,r));
|
||||
}
|
||||
20
Zframework/light/shadowMap.glsl
Normal file
20
Zframework/light/shadowMap.glsl
Normal file
@@ -0,0 +1,20 @@
|
||||
#define PI 3.14
|
||||
extern float yresolution;
|
||||
vec4 effect(vec4 color,Image tex,vec2 tex_coords,vec2 screen_coords){
|
||||
// Iterate through the occluder map's y-axis.
|
||||
for(float y=0.;y<yresolution;y++){
|
||||
// Cartesian to polar
|
||||
// y/yresolution=distance to light source(0~1)
|
||||
vec2 norm=vec2(tex_coords.s,y/yresolution)*2.-1.;
|
||||
float theta=PI*1.5+norm.x*PI;
|
||||
float r=(1.+norm.y)*0.5;
|
||||
|
||||
//sample from solid
|
||||
if(
|
||||
Texel(tex,(
|
||||
vec2(-r*sin(theta),-r*cos(theta))*0.5+0.5// Coord of solid sampling
|
||||
)).a>0.1
|
||||
)return vec4(vec3(y/yresolution),1.);// Collision check, alpha>0.1 means transparent
|
||||
}
|
||||
return vec4(1.);// Return max distance 1
|
||||
}
|
||||
@@ -1,72 +1,20 @@
|
||||
local gc=love.graphics
|
||||
local int,min=math.floor,math.min
|
||||
local ins,rem=table.insert,table.remove
|
||||
local ins=table.insert
|
||||
|
||||
local debugMesList={}
|
||||
local debugMesHistory={
|
||||
"Version: "..VERSION,
|
||||
os.date("Launched at %Y/%m/%d %H:%M"),
|
||||
}
|
||||
local LOG={}
|
||||
function LOG.update()
|
||||
if debugMesList[1]then
|
||||
for i=#debugMesList,1,-1 do
|
||||
local M=debugMesList[i]
|
||||
if M.blink>0 then
|
||||
M.blink=M.blink-1
|
||||
else
|
||||
M.time=M.time-1
|
||||
if M.time==0 then
|
||||
rem(debugMesList,i)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
local logs={os.date("Techmino logs %Y/%m/%d %A")}
|
||||
|
||||
local function log(message)
|
||||
ins(logs,os.date("[%H:%M:%S] ")..message)
|
||||
end
|
||||
function LOG.draw()
|
||||
if debugMesList[1]then
|
||||
gc.push("transform")
|
||||
local k=SCR.w/SCR.w0
|
||||
setFont(int(4*k)*5)
|
||||
for i=1,#debugMesList do
|
||||
local M=debugMesList[i]
|
||||
local t=M.time
|
||||
gc.setColor(M.r,M.g,M.b,M.blink>0 and int(M.blink/3)%2 or min(t/26,1))
|
||||
gc.print(M.text,10+(20-min(t,20))^1.5/4,25*i*k)
|
||||
end
|
||||
gc.pop()
|
||||
end
|
||||
end
|
||||
function LOG.print(text,T,C)--text,type/time,color
|
||||
local time
|
||||
local his
|
||||
if T=="warn"then
|
||||
C=C or COLOR.yellow
|
||||
his=true
|
||||
time=180
|
||||
elseif T=="error"then
|
||||
C=C or COLOR.red
|
||||
his=true
|
||||
time=210
|
||||
elseif T=="message"then
|
||||
C=C or COLOR.sky
|
||||
his=true
|
||||
elseif type(T)=="number"then
|
||||
C=C or COLOR.white
|
||||
time=T
|
||||
elseif type(T)=="table"then
|
||||
C,T=T
|
||||
elseif not C then
|
||||
C=COLOR.white
|
||||
end
|
||||
if his then
|
||||
ins(debugMesHistory,SCN.cur..": "..tostring(text))
|
||||
end
|
||||
ins(debugMesList,{text=text,r=C[1],g=C[2],b=C[3],blink=30,time=time or 120})
|
||||
end
|
||||
function LOG.copy()
|
||||
local str=table.concat(debugMesHistory,"\n")
|
||||
love.system.setClipboardText(str)
|
||||
LOG.print("Log copied",COLOR.blue)
|
||||
|
||||
local LOG=setmetatable({logs=logs},{
|
||||
__call=function(_,message)
|
||||
print(message)
|
||||
log(message)
|
||||
end
|
||||
})
|
||||
|
||||
function LOG.read()
|
||||
return table.concat(logs,"\n")
|
||||
end
|
||||
|
||||
return LOG
|
||||
37
Zframework/mathExtend.lua
Normal file
37
Zframework/mathExtend.lua
Normal file
@@ -0,0 +1,37 @@
|
||||
local MATH={}for k,v in next,math do MATH[k]=v end
|
||||
|
||||
local rnd=math.random
|
||||
|
||||
MATH.tau=2*math.pi
|
||||
|
||||
function MATH.sign(a)
|
||||
return a>0 and 1 or a<0 and -1 or 0
|
||||
end
|
||||
|
||||
function MATH.roll(chance)
|
||||
return rnd()<(chance or .5)
|
||||
end
|
||||
|
||||
function MATH.coin(a,b)
|
||||
if rnd()<.5 then
|
||||
return a
|
||||
else
|
||||
return b
|
||||
end
|
||||
end
|
||||
|
||||
function MATH.interval(v,low,high)
|
||||
if v<=low then
|
||||
return low
|
||||
elseif v>=high then
|
||||
return high
|
||||
else
|
||||
return v
|
||||
end
|
||||
end
|
||||
|
||||
function MATH.expApproach(a,b,k)
|
||||
return b+(a-b)*2.718281828459045^-k
|
||||
end
|
||||
|
||||
return MATH
|
||||
148
Zframework/message.lua
Normal file
148
Zframework/message.lua
Normal file
@@ -0,0 +1,148 @@
|
||||
local gc=love.graphics
|
||||
local gc_push,gc_pop=gc.push,gc.pop
|
||||
local gc_translate,gc_setColor,gc_draw=gc.translate,gc.setColor,gc.draw
|
||||
|
||||
local ins,rem=table.insert,table.remove
|
||||
local max=math.max
|
||||
|
||||
local mesList={}
|
||||
local mesIcon={
|
||||
check=GC.DO{40,40,
|
||||
{'setLW',10},
|
||||
{'setCL',0,0,0},
|
||||
{'line',4,19,15,30,36,9},
|
||||
{'setLW',6},
|
||||
{'setCL',.7,1,.6},
|
||||
{'line',5,20,15,30,35,10},
|
||||
},
|
||||
info=GC.DO{40,40,
|
||||
{'setCL',.2,.25,.85},
|
||||
{'fCirc',20,20,15},
|
||||
{'setCL',1,1,1},
|
||||
{'setLW',2},
|
||||
{'dCirc',20,20,15},
|
||||
{'fRect',18,11,4,4},
|
||||
{'fRect',18,17,4,12},
|
||||
},
|
||||
broadcast=GC.DO{40,40,
|
||||
{'setCL',1,1,1},
|
||||
{'fRect',2,4,36,26,3},
|
||||
{'fPoly',2,27,2,37,14,25},
|
||||
{'setCL',.5,.5,.5},
|
||||
{'fRect',6,11,4,4,1},{'fRect',14,11,19,4,1},
|
||||
{'fRect',6,19,4,4,1},{'fRect',14,19,19,4,1},
|
||||
},
|
||||
warn=GC.DO{40,40,
|
||||
{'setCL',.95,.83,.4},
|
||||
{'fPoly',20.5,1,0,38,40,38},
|
||||
{'setCL',0,0,0},
|
||||
{'dPoly',20.5,1,0,38,40,38},
|
||||
{'fRect',17,10,7,18,2},
|
||||
{'fRect',17,29,7,7,2},
|
||||
{'setCL',1,1,1},
|
||||
{'fRect',18,11,5,16,2},
|
||||
{'fRect',18,30,5,5,2},
|
||||
},
|
||||
error=GC.DO{40,40,
|
||||
{'setCL',.95,.3,.3},
|
||||
{'fCirc',20,20,19},
|
||||
{'setCL',0,0,0},
|
||||
{'dCirc',20,20,19},
|
||||
{'setLW',6},
|
||||
{'line',10.2,10.2,29.8,29.8},
|
||||
{'line',10.2,29.8,29.8,10.2},
|
||||
{'setLW',4},
|
||||
{'setCL',1,1,1},
|
||||
{'line',11,11,29,29},
|
||||
{'line',11,29,29,11},
|
||||
},
|
||||
music=GC.DO{40,40,
|
||||
{'setLW',2},
|
||||
{'dRect',1,3,38,34,3},
|
||||
{'setLW',4},
|
||||
{'line',21,26,21,10,28,10},
|
||||
{'fElps',17,26,6,5},
|
||||
},
|
||||
}
|
||||
|
||||
local MES={}
|
||||
local backColors={
|
||||
check={.3,.6,.3,.7},
|
||||
broadcast={.3,.3,.6,.8},
|
||||
warn={.4,.4,.2,.9},
|
||||
error={.4,.2,.2,.9},
|
||||
music={.2,.4,.4,.9},
|
||||
}
|
||||
function MES.new(icon,str,time)
|
||||
local backColor={.5,.5,.5,.7}
|
||||
if type(icon)=='string'then
|
||||
backColor=backColors[icon]or backColor
|
||||
icon=mesIcon[icon]
|
||||
end
|
||||
local t=gc.newText(FONT.get(30),str)
|
||||
local w=math.max(t:getWidth()+(icon and 45 or 5),200)+15
|
||||
local h=math.max(t:getHeight(),46)+2
|
||||
local L={w,h,
|
||||
{'clear',backColor},
|
||||
{'setCL',.7,.7,.7},
|
||||
{'setLW',2},
|
||||
{'dRect',1,1,w-2,h-2},
|
||||
{'setCL',1,1,1},
|
||||
}
|
||||
if icon then
|
||||
ins(L,{'draw',icon,4,4,nil,40/icon:getWidth(),40/icon:getHeight()})
|
||||
end
|
||||
ins(L,{'mDrawY',t,icon and 50 or 10,h/2})
|
||||
|
||||
ins(mesList,{
|
||||
startTime=.5,
|
||||
endTime=.5,
|
||||
time=time or 3,
|
||||
canvas=GC.DO(L),
|
||||
width=w,height=h,
|
||||
scale=h>400 and 1/math.min(h/400,2.6)or 1
|
||||
})
|
||||
end
|
||||
|
||||
function MES.update(dt)
|
||||
for i=#mesList,1,-1 do
|
||||
local m=mesList[i]
|
||||
if m.startTime>0 then
|
||||
m.startTime=max(m.startTime-dt,0)
|
||||
elseif m.time>0 then
|
||||
m.time=max(m.time-dt,0)
|
||||
elseif m.endTime>0 then
|
||||
m.endTime=m.endTime-dt
|
||||
else
|
||||
rem(mesList,i)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function MES.draw()
|
||||
gc_push('transform')
|
||||
if #mesList>0 then
|
||||
gc_translate(SCR.safeX,30)
|
||||
for i=1,#mesList do
|
||||
local m=mesList[i]
|
||||
gc_setColor(1,1,1,2*(m.endTime-m.startTime))
|
||||
gc_draw(m.canvas,40-80*(m.endTime+m.startTime),0,nil,m.scale)
|
||||
gc_translate(0,m.height*m.scale+2)
|
||||
end
|
||||
end
|
||||
gc_pop()
|
||||
end
|
||||
|
||||
function MES.traceback()
|
||||
local mes=
|
||||
debug.traceback('',1)
|
||||
:gsub(': in function',', in')
|
||||
:gsub(':',' ')
|
||||
:gsub('\t','')
|
||||
MES.new('error',mes:sub(
|
||||
mes:find("\n",2)+1,
|
||||
mes:find("\n%[C%], in 'xpcall'")
|
||||
),5)
|
||||
end
|
||||
|
||||
return MES
|
||||
@@ -1,190 +1,157 @@
|
||||
local clock = os.clock
|
||||
local clock=os.clock
|
||||
|
||||
local profile = {}
|
||||
local profile={}
|
||||
|
||||
-- function labels
|
||||
local _labeled = {}
|
||||
-- function definitions
|
||||
local _defined = {}
|
||||
-- time of last call
|
||||
local _tcalled = {}
|
||||
-- total execution time
|
||||
local _telapsed = {}
|
||||
-- number of calls
|
||||
local _ncalls = {}
|
||||
-- list of internal profiler functions
|
||||
local _internal = {}
|
||||
local _labeled={} -- function labels
|
||||
local _defined={} -- function definitions
|
||||
local _tcalled={} -- time of last call
|
||||
local _telapsed={}-- total execution time
|
||||
local _ncalls={} -- number of calls
|
||||
local _internal={}-- list of internal profiler functions
|
||||
|
||||
local getInfo=debug.getinfo
|
||||
function profile.hooker(event, line, info)
|
||||
info = info or getInfo(2, 'fnS')
|
||||
local f = info.func
|
||||
-- ignore the profiler itself
|
||||
if _internal[f] or info.what ~= "Lua" then
|
||||
return
|
||||
end
|
||||
-- get the function name if available
|
||||
if info.name then
|
||||
_labeled[f] = info.name
|
||||
end
|
||||
-- find the line definition
|
||||
if not _defined[f] then
|
||||
_defined[f] = info.short_src..":"..info.linedefined
|
||||
_ncalls[f] = 0
|
||||
_telapsed[f] = 0
|
||||
end
|
||||
if _tcalled[f] then
|
||||
local dt = clock() - _tcalled[f]
|
||||
_telapsed[f] = _telapsed[f] + dt
|
||||
_tcalled[f] = nil
|
||||
end
|
||||
if event == "tail call" then
|
||||
local prev = getInfo(3, 'fnS')
|
||||
profile.hooker("return", line, prev)
|
||||
profile.hooker("call", line, info)
|
||||
elseif event == 'call' then
|
||||
_tcalled[f] = clock()
|
||||
else
|
||||
_ncalls[f] = _ncalls[f] + 1
|
||||
end
|
||||
end
|
||||
|
||||
--- Sets a clock function to be used by the profiler.
|
||||
-- @param f Clock function that returns a number
|
||||
function profile.setclock(f)
|
||||
assert(type(f) == "function", "clock must be a function")
|
||||
clock = f
|
||||
function profile.hooker(event,line,info)
|
||||
info=info or getInfo(2,'fnS')
|
||||
local f=info.func
|
||||
if _internal[f]then return end-- ignore the profiler itself
|
||||
if info.name then _labeled[f]=info.name end-- get the function name if available
|
||||
-- find the line definition
|
||||
if not _defined[f]then
|
||||
_defined[f]=info.short_src..":"..info.linedefined
|
||||
_ncalls[f]=0
|
||||
_telapsed[f]=0
|
||||
end
|
||||
if _tcalled[f]then
|
||||
local dt=clock()-_tcalled[f]
|
||||
_telapsed[f]=_telapsed[f]+dt
|
||||
_tcalled[f]=nil
|
||||
end
|
||||
if event=='tail call'then
|
||||
local prev=getInfo(3,'fnS')
|
||||
profile.hooker('return',line,prev)
|
||||
profile.hooker('call',line,info)
|
||||
elseif event=='call'then
|
||||
_tcalled[f]=clock()
|
||||
else
|
||||
_ncalls[f]=_ncalls[f]+1
|
||||
end
|
||||
end
|
||||
|
||||
--- Starts collecting data.
|
||||
function profile.start()
|
||||
if rawget(_G, 'jit') then
|
||||
jit.off()
|
||||
jit.flush()
|
||||
end
|
||||
debug.sethook(profile.hooker, "cr")
|
||||
if jit then
|
||||
jit.off()
|
||||
jit.flush()
|
||||
end
|
||||
debug.sethook(profile.hooker,'cr')
|
||||
end
|
||||
|
||||
--- Stops collecting data.
|
||||
function profile.stop()
|
||||
debug.sethook()
|
||||
for f in next,_tcalled do
|
||||
local dt = clock() - _tcalled[f]
|
||||
_telapsed[f] = _telapsed[f] + dt
|
||||
_tcalled[f] = nil
|
||||
end
|
||||
-- merge closures
|
||||
local lookup = {}
|
||||
for f, d in next,_defined do
|
||||
local id = (_labeled[f] or '?')..d
|
||||
local f2 = lookup[id]
|
||||
if f2 then
|
||||
_ncalls[f2] = _ncalls[f2] + (_ncalls[f] or 0)
|
||||
_telapsed[f2] = _telapsed[f2] + (_telapsed[f] or 0)
|
||||
_defined[f], _labeled[f] = nil, nil
|
||||
_ncalls[f], _telapsed[f] = nil, nil
|
||||
else
|
||||
lookup[id] = f
|
||||
end
|
||||
end
|
||||
collectgarbage('collect')
|
||||
debug.sethook()
|
||||
for f in next,_tcalled do
|
||||
local dt=clock()-_tcalled[f]
|
||||
_telapsed[f]=_telapsed[f]+dt
|
||||
_tcalled[f]=nil
|
||||
end
|
||||
-- merge closures
|
||||
local lookup={}
|
||||
for f,d in next,_defined do
|
||||
local id=(_labeled[f]or"?")..d
|
||||
local f2=lookup[id]
|
||||
if f2 then
|
||||
_ncalls[f2]=_ncalls[f2]+(_ncalls[f]or 0)
|
||||
_telapsed[f2]=_telapsed[f2]+(_telapsed[f]or 0)
|
||||
_defined[f],_labeled[f]=nil,nil
|
||||
_ncalls[f],_telapsed[f]=nil,nil
|
||||
else
|
||||
lookup[id]=f
|
||||
end
|
||||
end
|
||||
collectgarbage()
|
||||
end
|
||||
|
||||
--- Resets all collected data.
|
||||
function profile.reset()
|
||||
for f in next,_ncalls do
|
||||
_ncalls[f] = 0
|
||||
end
|
||||
for f in next,_telapsed do
|
||||
_telapsed[f] = 0
|
||||
end
|
||||
for f in next,_tcalled do
|
||||
_tcalled[f] = nil
|
||||
end
|
||||
collectgarbage('collect')
|
||||
for f in next,_ncalls do
|
||||
_ncalls[f]=0
|
||||
_telapsed[f]=0
|
||||
_tcalled[f]=nil
|
||||
end
|
||||
collectgarbage()
|
||||
end
|
||||
|
||||
function profile.comp(a, b)
|
||||
local dt = _telapsed[b] - _telapsed[a]
|
||||
if dt == 0 then
|
||||
return _ncalls[b] < _ncalls[a]
|
||||
end
|
||||
return dt < 0
|
||||
local function _comp(a,b)
|
||||
local dt=_telapsed[b]-_telapsed[a]
|
||||
return dt==0 and _ncalls[b]<_ncalls[a]or dt<0
|
||||
end
|
||||
|
||||
--- Iterates all functions that have been called since the profile was started.
|
||||
-- @param n Number of results (optional)
|
||||
function profile.query(limit)
|
||||
local t = {}
|
||||
for f, n in next,_ncalls do
|
||||
if n > 0 then
|
||||
t[#t + 1] = f
|
||||
end
|
||||
end
|
||||
table.sort(t, profile.comp)
|
||||
if limit then
|
||||
while #t > limit do
|
||||
table.remove(t)
|
||||
end
|
||||
end
|
||||
for i, f in ipairs(t) do
|
||||
local dt = 0
|
||||
if _tcalled[f] then
|
||||
dt = clock() - _tcalled[f]
|
||||
end
|
||||
t[i] = { i, _labeled[f] or '?', _ncalls[f], _telapsed[f] + dt, _defined[f] }
|
||||
end
|
||||
return t
|
||||
local t={}
|
||||
for f,n in next,_ncalls do
|
||||
if n>0 then
|
||||
t[#t+1]=f
|
||||
end
|
||||
end
|
||||
table.sort(t,_comp)
|
||||
|
||||
if limit then while #t>limit do table.remove(t)end end
|
||||
|
||||
for i,f in ipairs(t)do
|
||||
local dt=0
|
||||
if _tcalled[f]then
|
||||
dt=clock()-_tcalled[f]
|
||||
end
|
||||
t[i]={i,_labeled[f]or"?",math.floor((_telapsed[f]+dt)*1e6)/1e6,_ncalls[f],_defined[f]}
|
||||
end
|
||||
return t
|
||||
end
|
||||
|
||||
local cols = { 3, 29, 11, 24, 32 }
|
||||
local cols={3,20,8,6,32}
|
||||
function profile.report(n)
|
||||
local out = {}
|
||||
local report = profile.query(n)
|
||||
for i, row in ipairs(report) do
|
||||
for j = 1, 5 do
|
||||
local s = row[j]
|
||||
local l2 = cols[j]
|
||||
s = tostring(s)
|
||||
local l1 = s:len()
|
||||
if l1 < l2 then
|
||||
s = s..(' '):rep(l2-l1)
|
||||
elseif l1 > l2 then
|
||||
s = s:sub(l1 - l2 + 1, l1)
|
||||
end
|
||||
row[j] = s
|
||||
end
|
||||
out[i] = table.concat(row, ' | ')
|
||||
end
|
||||
local out={}
|
||||
local report=profile.query(n)
|
||||
for i,row in ipairs(report)do
|
||||
for j=1,5 do
|
||||
local s=tostring(row[j])
|
||||
local l1,l2=#s,cols[j]
|
||||
if l1<l2 then
|
||||
s=s..(" "):rep(l2-l1)
|
||||
elseif l1>l2 then
|
||||
s=s:sub(l1-l2+1,l1)
|
||||
end
|
||||
row[j]=s
|
||||
end
|
||||
out[i]=table.concat(row," | ")
|
||||
end
|
||||
|
||||
local row = " +-----+-------------------------------+-------------+--------------------------+----------------------------------+ \n"
|
||||
local col = " | # | Function | Calls | Time | Code | \n"
|
||||
local sz = row..col..row
|
||||
if #out > 0 then
|
||||
sz = sz..' | '..table.concat(out, ' | \n | ')..' | \n'
|
||||
end
|
||||
return '\n'..sz..row
|
||||
local row=" +-----+----------------------+----------+--------+----------------------------------+ \n"
|
||||
local col=" | # | Function | Time | Calls | Code | \n"
|
||||
local sz=row..col..row
|
||||
if #out>0 then
|
||||
sz=sz.." | "..table.concat(out," | \n | ").." | \n"
|
||||
end
|
||||
return "\n"..sz..row
|
||||
end
|
||||
|
||||
local switch=false
|
||||
function profile.switch()
|
||||
if switch then
|
||||
profile.stop()
|
||||
love.system.setClipboardText(PROFILE.report())
|
||||
PROFILE.reset()
|
||||
LOG.print("profile report copied!")
|
||||
else
|
||||
PROFILE.start()
|
||||
LOG.print("profile start!")
|
||||
end
|
||||
switch=not switch
|
||||
switch=not switch
|
||||
if not switch then
|
||||
profile.stop()
|
||||
love.system.setClipboardText(profile.report())
|
||||
profile.reset()
|
||||
return false
|
||||
else
|
||||
profile.start()
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
-- store all internal profiler functions
|
||||
for _, v in next,profile do
|
||||
if type(v) == "function" then
|
||||
_internal[v] = true
|
||||
end
|
||||
for _,v in next,profile do
|
||||
_internal[v]=type(v)=='function'
|
||||
end
|
||||
|
||||
return profile
|
||||
33
Zframework/require.lua
Normal file
33
Zframework/require.lua
Normal file
@@ -0,0 +1,33 @@
|
||||
package.cpath=package.cpath..';'..SAVEDIR..'/lib/lib?.so;'..'?.dylib'
|
||||
local loaded={}
|
||||
return function(libName)
|
||||
local require=require
|
||||
if love.system.getOS()=='OS X'then
|
||||
require=package.loadlib(libName..'.dylib','luaopen_'..libName)
|
||||
libname=nil
|
||||
elseif love.system.getOS()=='Android'then
|
||||
if not loaded[libName]then
|
||||
local platform=(function()
|
||||
local p=io.popen('uname -m')
|
||||
local arch=p:read('*a'):lower()
|
||||
p:close()
|
||||
if arch:find('v8')or arch:find('64')then
|
||||
return'arm64-v8a'
|
||||
else
|
||||
return'armeabi-v7a'
|
||||
end
|
||||
end)()
|
||||
love.filesystem.write(
|
||||
'lib/libCCloader.so',
|
||||
love.filesystem.read('data','libAndroid/'..platform..'/libCCloader.so')
|
||||
)
|
||||
loaded[libName]=true
|
||||
end
|
||||
end
|
||||
local success,res=pcall(require,libName)
|
||||
if success and res then
|
||||
return res
|
||||
else
|
||||
MES.new('error',"Cannot load "..libName..": "..res)
|
||||
end
|
||||
end
|
||||
@@ -1,112 +1,210 @@
|
||||
local gc=love.graphics
|
||||
local abs=math.abs
|
||||
local SCR=SCR
|
||||
|
||||
sceneInit,sceneBack={},{}
|
||||
local sceneInit,sceneBack=sceneInit,sceneBack
|
||||
sceneInit.quit=love.event.quit
|
||||
local scenes={}
|
||||
|
||||
local SCN={
|
||||
cur="load",--Current scene
|
||||
swapping=false,--If Swapping
|
||||
stat={
|
||||
tar=nil, --Swapping target
|
||||
style=nil, --Swapping style
|
||||
mid=nil, --Loading point
|
||||
time=nil, --Full swap time
|
||||
draw=nil, --Swap draw func
|
||||
},
|
||||
seq={"quit","slowFade"},--Back sequence
|
||||
mainTouchID=nil, --First touching ID(userdata)
|
||||
cur='NULL', --Current scene name
|
||||
swapping=false, --If Swapping
|
||||
stat={
|
||||
tar=false, --Swapping target
|
||||
style=false, --Swapping style
|
||||
changeTime=false,--Loading point
|
||||
time=false, --Full swap time
|
||||
draw=false, --Swap draw func
|
||||
},
|
||||
stack={},--Scene stack
|
||||
prev=false,
|
||||
args={},--Arguments from previous scene
|
||||
|
||||
scenes=scenes,
|
||||
|
||||
--Events
|
||||
update=false,
|
||||
draw=false,
|
||||
mouseClick=false,
|
||||
touchClick=false,
|
||||
mouseDown=false,
|
||||
mouseMove=false,
|
||||
mouseUp=false,
|
||||
wheelMoved=false,
|
||||
touchDown=false,
|
||||
touchUp=false,
|
||||
touchMove=false,
|
||||
keyDown=false,
|
||||
keyUp=false,
|
||||
gamepadDown=false,
|
||||
gamepadUp=false,
|
||||
fileDropped=false,
|
||||
directoryDropped=false,
|
||||
resize=false,
|
||||
socketRead=false,
|
||||
}--Scene datas, returned
|
||||
|
||||
function SCN.swapUpdate()
|
||||
local S=SCN.stat
|
||||
S.time=S.time-1
|
||||
if S.time==S.mid then
|
||||
SCN.init(S.tar,SCN.cur)
|
||||
collectgarbage()
|
||||
--Scene swapped this moment
|
||||
end
|
||||
if S.time==0 then
|
||||
SCN.swapping=false
|
||||
end
|
||||
function SCN.add(name,scene)
|
||||
scenes[name]=scene
|
||||
if scene.widgetList then
|
||||
setmetatable(scene.widgetList,WIDGET.indexMeta)
|
||||
end
|
||||
end
|
||||
function SCN.init(s,org)
|
||||
if sceneInit[s]then sceneInit[s](org)end
|
||||
SCN.cur=s
|
||||
WIDGET.set(s)
|
||||
|
||||
function SCN.swapUpdate(dt)
|
||||
local S=SCN.stat
|
||||
S.time=S.time-dt
|
||||
if S.time<S.changeTime and S.time+dt>=S.changeTime then
|
||||
--Scene swapped this frame
|
||||
SCN.prev=SCN.cur
|
||||
SCN.init(S.tar)
|
||||
SCN.mainTouchID=nil
|
||||
end
|
||||
if S.time<0 then
|
||||
SCN.swapping=false
|
||||
end
|
||||
end
|
||||
function SCN.init(s)
|
||||
love.keyboard.setTextInput(false)
|
||||
|
||||
local S=scenes[s]
|
||||
SCN.cur=s
|
||||
|
||||
WIDGET.setScrollHeight(S.widgetScrollHeight)
|
||||
WIDGET.setWidgetList(S.widgetList)
|
||||
SCN.sceneInit=S.sceneInit
|
||||
SCN.sceneBack=S.sceneBack
|
||||
SCN.mouseDown=S.mouseDown
|
||||
SCN.mouseMove=S.mouseMove
|
||||
SCN.mouseUp=S.mouseUp
|
||||
SCN.mouseClick=S.mouseClick
|
||||
SCN.wheelMoved=S.wheelMoved
|
||||
SCN.touchDown=S.touchDown
|
||||
SCN.touchUp=S.touchUp
|
||||
SCN.touchMove=S.touchMove
|
||||
SCN.touchClick=S.touchClick
|
||||
SCN.keyDown=S.keyDown
|
||||
SCN.keyUp=S.keyUp
|
||||
SCN.gamepadDown=S.gamepadDown
|
||||
SCN.gamepadUp=S.gamepadUp
|
||||
SCN.fileDropped=S.fileDropped
|
||||
SCN.directoryDropped=S.directoryDropped
|
||||
SCN.resize=S.resize
|
||||
SCN.socketRead=S.socketRead
|
||||
SCN.update=S.update
|
||||
SCN.draw=S.draw
|
||||
if S.sceneInit then
|
||||
S.sceneInit()
|
||||
end
|
||||
end
|
||||
function SCN.push(tar,style)
|
||||
if not SCN.swapping then
|
||||
local m=#SCN.seq
|
||||
SCN.seq[m+1]=tar or SCN.cur
|
||||
SCN.seq[m+2]=style or"fade"
|
||||
end
|
||||
if not SCN.swapping then
|
||||
local m=#SCN.stack
|
||||
SCN.stack[m+1]=tar or SCN.cur
|
||||
SCN.stack[m+2]=style or'fade'
|
||||
end
|
||||
end
|
||||
function SCN.pop()
|
||||
local _=SCN.seq
|
||||
_[#_],_[#_-1]=nil
|
||||
local s=SCN.stack
|
||||
s[#s],s[#s-1]=nil
|
||||
end
|
||||
|
||||
local swap={
|
||||
none={1,0,NULL},--swapTime, changeTime, drawFunction
|
||||
flash={8,1,function()gc.clear(1,1,1)end},
|
||||
fade={30,15,function(t)
|
||||
t=t>15 and 2-t/15 or t/15
|
||||
gc.setColor(0,0,0,t)
|
||||
gc.rectangle("fill",0,0,SCR.w,SCR.h)
|
||||
end},
|
||||
fade_togame={120,20,function(t)
|
||||
t=t>20 and(120-t)/100 or t/20
|
||||
gc.setColor(0,0,0,t)
|
||||
gc.rectangle("fill",0,0,SCR.w,SCR.h)
|
||||
end},
|
||||
slowFade={180,90,function(t)
|
||||
t=t>90 and 2-t/90 or t/90
|
||||
gc.setColor(0,0,0,t)
|
||||
gc.rectangle("fill",0,0,SCR.w,SCR.h)
|
||||
end},
|
||||
swipeL={30,15,function(t)
|
||||
t=t/30
|
||||
gc.setColor(.1,.1,.1,1-abs(t-.5))
|
||||
t=t*t*(3-2*t)*2-1
|
||||
gc.rectangle("fill",t*SCR.w,0,SCR.w,SCR.h)
|
||||
end},
|
||||
swipeR={30,15,function(t)
|
||||
t=t/30
|
||||
gc.setColor(.1,.1,.1,1-abs(t-.5))
|
||||
t=t*t*(2*t-3)*2+1
|
||||
gc.rectangle("fill",t*SCR.w,0,SCR.w,SCR.h)
|
||||
end},
|
||||
swipeD={30,15,function(t)
|
||||
t=t/30
|
||||
gc.setColor(.1,.1,.1,1-abs(t-.5))
|
||||
t=t*t*(2*t-3)*2+1
|
||||
gc.rectangle("fill",0,t*SCR.h,SCR.w,SCR.h)
|
||||
end},
|
||||
none={
|
||||
duration=0,changeTime=0,
|
||||
draw=function()end
|
||||
},
|
||||
flash={
|
||||
duration=.16,changeTime=.08,
|
||||
draw=function()gc.clear(1,1,1)end
|
||||
},
|
||||
fade={
|
||||
duration=.5,changeTime=.25,
|
||||
draw=function(t)
|
||||
t=t>.25 and 2-t*4 or t*4
|
||||
gc.setColor(0,0,0,t)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
end
|
||||
},
|
||||
fade_togame={
|
||||
duration=2,changeTime=.5,
|
||||
draw=function(t)
|
||||
t=t>.5 and(2-t)/1.5 or t*.5
|
||||
gc.setColor(0,0,0,t)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
end
|
||||
},
|
||||
slowFade={
|
||||
duration=3,changeTime=1.5,
|
||||
draw=function(t)
|
||||
t=t>1.5 and (3-t)/1.5 or t/1.5
|
||||
gc.setColor(0,0,0,t)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
end
|
||||
},
|
||||
swipeL={
|
||||
duration=.5,changeTime=.25,
|
||||
draw=function(t)
|
||||
t=t*2
|
||||
gc.setColor(.1,.1,.1,1-abs(t-.5))
|
||||
t=t*t*(3-2*t)*2-1
|
||||
gc.rectangle('fill',t*SCR.w,0,SCR.w,SCR.h)
|
||||
end
|
||||
},
|
||||
swipeR={
|
||||
duration=.5,changeTime=.25,
|
||||
draw=function(t)
|
||||
t=t*2
|
||||
gc.setColor(.1,.1,.1,1-abs(t-.5))
|
||||
t=t*t*(2*t-3)*2+1
|
||||
gc.rectangle('fill',t*SCR.w,0,SCR.w,SCR.h)
|
||||
end
|
||||
},
|
||||
swipeD={
|
||||
duration=.5,changeTime=.25,
|
||||
draw=function(t)
|
||||
t=t*2
|
||||
gc.setColor(.1,.1,.1,1-abs(t-.5))
|
||||
t=t*t*(2*t-3)*2+1
|
||||
gc.rectangle('fill',0,t*SCR.h,SCR.w,SCR.h)
|
||||
end
|
||||
},
|
||||
}--Scene swapping animations
|
||||
function SCN.swapTo(tar,style)--Parallel scene swapping, cannot back
|
||||
local S=SCN.stat
|
||||
if not SCN.swapping and tar~=SCN.cur then
|
||||
if not style then style="fade"end
|
||||
SCN.swapping=true
|
||||
S.tar,S.style=tar,style
|
||||
S.time,S.mid,S.draw=unpack(swap[style])
|
||||
end
|
||||
function SCN.swapTo(tar,style,...)--Parallel scene swapping, cannot back
|
||||
if scenes[tar]then
|
||||
if not SCN.swapping and tar~=SCN.cur then
|
||||
style=style or'fade'
|
||||
SCN.swapping=true
|
||||
SCN.args={...}
|
||||
local S=SCN.stat
|
||||
S.tar,S.style=tar,style
|
||||
S.time=swap[style].duration
|
||||
S.changeTime=swap[style].changeTime
|
||||
S.draw=swap[style].draw
|
||||
end
|
||||
else
|
||||
MES.new('warn',"No Scene: "..tar)
|
||||
end
|
||||
end
|
||||
function SCN.go(tar,style)--Normal scene swapping, can back
|
||||
SCN.push()
|
||||
SCN.swapTo(tar,style)
|
||||
function SCN.go(tar,style,...)--Normal scene swapping, can back
|
||||
if scenes[tar]then
|
||||
SCN.push()
|
||||
SCN.swapTo(tar,style,...)
|
||||
else
|
||||
MES.new('warn',"No Scene: "..tar)
|
||||
end
|
||||
end
|
||||
function SCN.back()
|
||||
--Leave scene
|
||||
if sceneBack[SCN.cur] then sceneBack[SCN.cur]()end
|
||||
function SCN.back(...)
|
||||
if SCN.swapping then return end
|
||||
|
||||
--Poll&Back to previous Scene
|
||||
local m=#SCN.seq
|
||||
if m>0 then
|
||||
SCN.swapTo(SCN.seq[m-1],SCN.seq[m])
|
||||
SCN.seq[m],SCN.seq[m-1]=nil
|
||||
end
|
||||
--Leave scene
|
||||
if SCN.sceneBack then
|
||||
SCN.sceneBack()
|
||||
end
|
||||
|
||||
--Poll&Back to previous Scene
|
||||
local m=#SCN.stack
|
||||
if m>0 then
|
||||
SCN.swapTo(SCN.stack[m-1],SCN.stack[m],...)
|
||||
SCN.stack[m],SCN.stack[m-1]=nil
|
||||
end
|
||||
end
|
||||
return SCN
|
||||
73
Zframework/screen.lua
Normal file
73
Zframework/screen.lua
Normal file
@@ -0,0 +1,73 @@
|
||||
local SCR={
|
||||
w0=1280,h0=720, --Default Screen Size
|
||||
x=0,y=0, --Up-left Coord on screen
|
||||
cx=0,cy=0, --Center Coord on screen (Center X/Y)
|
||||
ex=0,ey=0, --Down-right Coord on screen (End X/Y)
|
||||
w=0,h=0, --Fullscreen w/h for graphic functions
|
||||
W=0,H=0, --Fullscreen w/h for shader
|
||||
safeX=0,safeY=0,--Safe area
|
||||
safeW=0,safeH=0,--Safe area
|
||||
rad=0, --Radius
|
||||
k=1, --Scale size
|
||||
dpi=1, --DPI from gc.getDPIScale()
|
||||
|
||||
--Screen transformation objects
|
||||
origin=love.math.newTransform(),
|
||||
xOy=love.math.newTransform(),
|
||||
xOy_m=love.math.newTransform(),
|
||||
xOy_ul=love.math.newTransform(),
|
||||
xOy_u=love.math.newTransform(),
|
||||
xOy_ur=love.math.newTransform(),
|
||||
xOy_l=love.math.newTransform(),
|
||||
xOy_r=love.math.newTransform(),
|
||||
xOy_dl=love.math.newTransform(),
|
||||
xOy_d=love.math.newTransform(),
|
||||
xOy_dr=love.math.newTransform(),
|
||||
}
|
||||
function SCR.setSize(w,h)
|
||||
SCR.w0,SCR.h0=w,h
|
||||
end
|
||||
function SCR.resize(w,h)
|
||||
SCR.w,SCR.h,SCR.dpi=w,h,love.graphics.getDPIScale()
|
||||
SCR.W,SCR.H=SCR.w*SCR.dpi,SCR.h*SCR.dpi
|
||||
SCR.r=h/w
|
||||
SCR.rad=(w^2+h^2)^.5
|
||||
|
||||
SCR.x,SCR.y=0,0
|
||||
if SCR.r>=SCR.h0/SCR.w0 then
|
||||
SCR.k=w/SCR.w0
|
||||
SCR.y=(h-SCR.h0*SCR.k)/2
|
||||
else
|
||||
SCR.k=h/SCR.h0
|
||||
SCR.x=(w-SCR.w0*SCR.k)/2
|
||||
end
|
||||
SCR.cx,SCR.cy=SCR.w/2,SCR.h/2
|
||||
SCR.ex,SCR.ey=SCR.w-SCR.x,SCR.h-SCR.y
|
||||
SCR.safeX,SCR.safeY,SCR.safeW,SCR.safeH=love.window.getSafeArea()
|
||||
|
||||
SCR.origin:setTransformation(0,0)
|
||||
SCR.xOy:setTransformation(SCR.x,SCR.y,0,SCR.k)
|
||||
SCR.xOy_m:setTransformation(w/2,h/2,0,SCR.k)
|
||||
SCR.xOy_ul:setTransformation(0,0,0,SCR.k)
|
||||
SCR.xOy_u:setTransformation(w/2,0,0,SCR.k)
|
||||
SCR.xOy_ur:setTransformation(w,0,0,SCR.k)
|
||||
SCR.xOy_l:setTransformation(0,h/2,0,SCR.k)
|
||||
SCR.xOy_r:setTransformation(w,h/2,0,SCR.k)
|
||||
SCR.xOy_dl:setTransformation(0,h,0,SCR.k)
|
||||
SCR.xOy_d:setTransformation(w/2,h,0,SCR.k)
|
||||
SCR.xOy_dr:setTransformation(w,h,0,SCR.k)
|
||||
end
|
||||
function SCR.info()
|
||||
return{
|
||||
("w0,h0 : %d, %d"):format(SCR.w0,SCR.h0),
|
||||
("x,y : %d, %d"):format(SCR.x,SCR.y),
|
||||
("cx,cy : %d, %d"):format(SCR.cx,SCR.cy),
|
||||
("ex,ey : %d, %d"):format(SCR.ex,SCR.ey),
|
||||
("w,h : %d, %d"):format(SCR.w,SCR.h),
|
||||
("W,H : %d, %d"):format(SCR.W,SCR.H),
|
||||
("safeX,safeY : %d, %d"):format(SCR.safeX,SCR.safeY),
|
||||
("safeW,safeH : %d, %d"):format(SCR.safeW,SCR.safeH),
|
||||
("k,dpi,rad : %.2f, %d, %.2f"):format(SCR.k,SCR.dpi,SCR.rad),
|
||||
}
|
||||
end
|
||||
return SCR
|
||||
@@ -1,104 +1,170 @@
|
||||
local rem=table.remove
|
||||
local type,rem=type,table.remove
|
||||
local int,rnd=math.floor,math.random
|
||||
local interval=MATH.interval
|
||||
|
||||
local sfxList={}
|
||||
local packSetting={}
|
||||
local Sources={}
|
||||
local volume=1
|
||||
local stereo=1
|
||||
|
||||
local noteVal={
|
||||
C=1,c=1,
|
||||
D=3,d=3,
|
||||
E=5,e=5,
|
||||
F=6,f=6,
|
||||
G=8,g=8,
|
||||
A=10,a=10,
|
||||
B=12,b=12,
|
||||
}
|
||||
local noteName={'C','C#','D','D#','E','F','F#','G','G#','A','A#','B'}
|
||||
local function _getTuneHeight(tune)
|
||||
local octave=tonumber(tune:sub(-1,-1))
|
||||
if octave then
|
||||
local tuneHeight=noteVal[tune:sub(1,1)]
|
||||
if tuneHeight then
|
||||
tuneHeight=tuneHeight+(octave-1)*12
|
||||
local s=tune:sub(2,2)
|
||||
if s=='s'or s=='#'then
|
||||
tuneHeight=tuneHeight+1
|
||||
elseif s=='f'or s=='b'then
|
||||
tuneHeight=tuneHeight-1
|
||||
end
|
||||
return tuneHeight
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local SFX={}
|
||||
SFX.list={
|
||||
"welcome_sfx",
|
||||
"click","enter",
|
||||
"finesseError","finesseError_long",
|
||||
--Stereo sfxs(cannot set position)
|
||||
|
||||
"virtualKey",
|
||||
"button","swipe",
|
||||
"ready","start","win","fail","collect",
|
||||
"spawn_1","spawn_2","spawn_3","spawn_4","spawn_5","spawn_6","spawn_7",
|
||||
"move","rotate","rotatekick","hold",
|
||||
"prerotate","prehold",
|
||||
"lock","drop","fall",
|
||||
"reach",
|
||||
"ren_1","ren_2","ren_3","ren_4","ren_5","ren_6","ren_7","ren_8","ren_9","ren_10","ren_11","ren_mega",
|
||||
"clear_1","clear_2","clear_3","clear_4",
|
||||
"spin_0","spin_1","spin_2","spin_3",
|
||||
"emit","blip_1","blip_2",
|
||||
"clear",
|
||||
function SFX.init(list)
|
||||
assert(type(list)=='table',"Initialize SFX lib with a list of filenames!")
|
||||
for i=1,#list do table.insert(sfxList,list[i])end
|
||||
end
|
||||
function SFX.load(path)
|
||||
local c=0
|
||||
local missing=0
|
||||
for i=1,#sfxList do
|
||||
local fullPath=path..sfxList[i]..'.ogg'
|
||||
if love.filesystem.getInfo(fullPath)then
|
||||
if Sources[sfxList[i]]then
|
||||
for j=1,#Sources[sfxList[i]]do
|
||||
Sources[sfxList[i]][j]:release()
|
||||
end
|
||||
end
|
||||
Sources[sfxList[i]]={love.audio.newSource(fullPath,'static')}
|
||||
c=c+1
|
||||
else
|
||||
LOG("No SFX: "..sfxList[i]..'.ogg',.1)
|
||||
missing=missing+1
|
||||
end
|
||||
end
|
||||
LOG(c.."/"..#sfxList.." SFX files loaded")
|
||||
LOG(missing.." SFX files missing")
|
||||
if missing>0 then
|
||||
MES.new('info',missing.." SFX files missing")
|
||||
end
|
||||
collectgarbage()
|
||||
end
|
||||
function SFX.loadSample(pack)
|
||||
assert(type(pack)=='table',"Usage: SFX.loadsample([table])")
|
||||
assert(pack.name,"No field: name")
|
||||
assert(pack.path,"No field: path")
|
||||
local num=1
|
||||
while love.filesystem.getInfo(pack.path..'/'..num..'.ogg')do
|
||||
Sources[pack.name..num]={love.audio.newSource(pack.path..'/'..num..'.ogg','static')}
|
||||
num=num+1
|
||||
end
|
||||
local base=(_getTuneHeight(pack.base)or 37)-1
|
||||
local top=base+num-1
|
||||
packSetting[pack.name]={base=base,top=top}
|
||||
LOG((num-1).." "..pack.name.." samples loaded")
|
||||
end
|
||||
|
||||
"error",
|
||||
--Mono sfxs
|
||||
}
|
||||
function SFX.loadOne(_)
|
||||
_,SFX.list[_]=SFX.list[_]
|
||||
local N="/SFX/".._..".ogg"
|
||||
if love.filesystem.getInfo(N)then
|
||||
SFX.list[_]={love.audio.newSource(N,"static")}
|
||||
else
|
||||
LOG.print("No SFX file: "..N,5,COLOR.orange)
|
||||
end
|
||||
function SFX.getCount()
|
||||
return #sfxList
|
||||
end
|
||||
function SFX.loadAll()
|
||||
for i=1,#SFX.list do
|
||||
SFX.loadOne(i)
|
||||
end
|
||||
function SFX.setVol(v)
|
||||
assert(type(v)=='number'and v>=0 and v<=1,'Wrong volume')
|
||||
volume=v
|
||||
end
|
||||
function SFX.fieldPlay(s,v,P)
|
||||
SFX.play(s,v,(P.curX+P.sc[2]-5.5)*.15)
|
||||
function SFX.setStereo(v)
|
||||
assert(type(v)=='number'and v>=0 and v<=1,'Wrong stereo')
|
||||
stereo=v
|
||||
end
|
||||
function SFX.play(s,vol,pos)
|
||||
if SETTING.sfx==0 then return end
|
||||
local S=SFX.list[s]--Source list
|
||||
if not S then return end
|
||||
local n=1
|
||||
while S[n]:isPlaying()do
|
||||
n=n+1
|
||||
if not S[n]then
|
||||
S[n]=S[1]:clone()
|
||||
S[n]:seek(0)
|
||||
break
|
||||
end
|
||||
end
|
||||
S=S[n]--AU_SRC
|
||||
if S:getChannelCount()==1 then
|
||||
if pos then
|
||||
pos=pos*SETTING.stereo
|
||||
S:setPosition(pos,1-pos^2,0)
|
||||
else
|
||||
S:setPosition(0,0,0)
|
||||
end
|
||||
end
|
||||
S:setVolume(((vol or 1)*SETTING.sfx)^1.626)
|
||||
S:play()
|
||||
|
||||
function SFX.getNoteName(note)
|
||||
if note<1 then
|
||||
return'---'
|
||||
else
|
||||
note=note-1
|
||||
local octave=int(note/12)+1
|
||||
return noteName[note%12+1]..octave
|
||||
end
|
||||
end
|
||||
function SFX.fplay(s,vol,pos)
|
||||
local S=SFX.list[s]--Source list
|
||||
if not S then return end
|
||||
local n=1
|
||||
while S[n]:isPlaying()do
|
||||
n=n+1
|
||||
if not S[n]then
|
||||
S[n]=S[1]:clone()
|
||||
S[n]:seek(0)
|
||||
break
|
||||
end
|
||||
end
|
||||
S=S[n]--AU_SRC
|
||||
if S:getChannelCount()==1 then
|
||||
if pos then
|
||||
pos=pos*SETTING.stereo
|
||||
S:setPosition(pos,1-pos^2,0)
|
||||
else
|
||||
S:setPosition(0,0,0)
|
||||
end
|
||||
end
|
||||
S:setVolume(vol^1.626)
|
||||
S:play()
|
||||
function SFX.playSample(pack,...)--vol-1, sampSet1, vol-2, sampSet2
|
||||
if ... then
|
||||
local arg={...}
|
||||
local vol
|
||||
for i=1,#arg do
|
||||
local a=arg[i]
|
||||
if type(a)=='number'and a<=1 then
|
||||
vol=a
|
||||
else
|
||||
local base=packSetting[pack].base
|
||||
local top=packSetting[pack].top
|
||||
local tune=type(a)=='string'and _getTuneHeight(a)or a--Absolute tune in number
|
||||
local playTune=tune+rnd(-2,2)
|
||||
if playTune<=base then--Too low notes
|
||||
playTune=base+1
|
||||
elseif playTune>top then--Too high notes
|
||||
playTune=top
|
||||
end
|
||||
SFX.play(pack..playTune-base,vol,nil,tune-playTune)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
local function _play(name,vol,pos,pitch)
|
||||
if volume==0 or vol==0 then return end
|
||||
local S=Sources[name]--Source list
|
||||
if not S then return end
|
||||
local n=1
|
||||
while S[n]:isPlaying()do
|
||||
n=n+1
|
||||
if not S[n]then
|
||||
S[n]=S[1]:clone()
|
||||
S[n]:seek(0)
|
||||
break
|
||||
end
|
||||
end
|
||||
S=S[n]--AU_SRC
|
||||
if S:getChannelCount()==1 then
|
||||
if pos then
|
||||
pos=interval(pos,-1,1)*stereo
|
||||
S:setPosition(pos,1-pos^2,0)
|
||||
else
|
||||
S:setPosition(0,0,0)
|
||||
end
|
||||
end
|
||||
S:setVolume(vol^1.626)
|
||||
S:setPitch(pitch and 1.0594630943592953^pitch or 1)
|
||||
S:play()
|
||||
end
|
||||
SFX.fplay=_play--Play sounds without apply module's volume setting
|
||||
function SFX.play(name,vol,pos,pitch)
|
||||
_play(name,(vol or 1)*volume,pos,pitch)
|
||||
end
|
||||
function SFX.reset()
|
||||
for _,L in next,SFX.list do
|
||||
if type(L)=="table"then
|
||||
for i=#L,1,-1 do
|
||||
if not L[i]:isPlaying()then
|
||||
rem(L,i)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
for _,L in next,Sources do
|
||||
if type(L)=='table'then
|
||||
for i=#L,1,-1 do
|
||||
if not L[i]:isPlaying()then
|
||||
rem(L,i)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return SFX
|
||||
@@ -1,14 +0,0 @@
|
||||
local function N(file)
|
||||
return love.graphics.newShader("Zframework/shader/"..file..".glsl")
|
||||
end
|
||||
return{
|
||||
-- glow=gc.newShader("Zframework/shader/glow.cs"),
|
||||
alpha=N("alpha"),
|
||||
warning=N("warning"),
|
||||
|
||||
aura=N("aura"),
|
||||
gradient1=N("grad1"),--Horizonal red-blue gradient
|
||||
gradient2=N("grad2"),--Vertical red-green gradient
|
||||
rgb1=N("rgb1"),--Colorful RGB
|
||||
rgb2=N("rgb2"),--Blue RGB
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
extern float a;
|
||||
vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){
|
||||
return vec4(1.,1.,1.,sign(Texel(text,pos).a)*a);
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
#define PI 3.1415926535897932384626
|
||||
extern float w,h;
|
||||
extern float t;
|
||||
vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){
|
||||
float x=scr_pos.x/w;
|
||||
float y=scr_pos.y/h;
|
||||
float dx,dy;
|
||||
vec3 V=vec3(0.);
|
||||
|
||||
dx=0.5+cos(t*3.*0.26)*0.4-x;
|
||||
dy=0.5-sin(t*3.*0.62)*0.4-y;
|
||||
dx=sqrt(dx*dx+dy*dy);
|
||||
V.r=V.r+smoothstep(1.26,0.,dx);
|
||||
|
||||
dx=(0.5+cos(t*3.*0.32)*0.4)-x;
|
||||
dy=(0.5-sin(t*3.*0.80)*0.4)-y;
|
||||
dx=sqrt(dx*dx+dy*dy);
|
||||
V.g=V.g+smoothstep(1.26,0.,dx);
|
||||
|
||||
dx=(0.5-cos(t*3.*0.49)*0.4)-x;
|
||||
dy=(0.5+sin(t*3.*0.18)*0.4)-y;
|
||||
dx=sqrt(dx*dx+dy*dy);
|
||||
V.b=V.b+smoothstep(1.26,0.,dx);
|
||||
|
||||
dx=(0.5+cos(t*0.53)*0.4)-x;
|
||||
dy=(0.5-sin(t*0.46)*0.4)-y;
|
||||
dx=sqrt(dx*dx+dy*dy);
|
||||
V.rg+=vec2(smoothstep(0.626,0.,dx));
|
||||
|
||||
dx=(0.5+cos(t*0.98)*0.4)-x;
|
||||
dy=(0.5+sin(t*0.57)*0.4)-y;
|
||||
dx=sqrt(dx*dx+dy*dy);
|
||||
V.rb+=vec2(smoothstep(0.626,0.,dx));
|
||||
|
||||
dx=(0.5-cos(t*0.86)*0.4)-x;
|
||||
dy=(0.5-sin(t*0.32)*0.4)-y;
|
||||
dx=sqrt(dx*dx+dy*dy);
|
||||
V.gb+=vec2(smoothstep(0.626,0.,dx));
|
||||
|
||||
dx=1.626*max(max(V.r,V.g),V.b);
|
||||
return vec4(V/dx,1.);
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
extern float X,Y,W,H;
|
||||
vec4 effect(vec4 C,Image Tx,vec2 pos,vec2 scr_pos){
|
||||
C[3]=min((scr_pos.x-X)/W*0.3+(scr_pos.y-Y)/H*0.1,0.3)+0.5;
|
||||
return C;
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
extern float t,w;
|
||||
vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){
|
||||
float x=scr_pos.x/w;
|
||||
return vec4(
|
||||
.8-x*.6,
|
||||
.3+.2*sin(t),
|
||||
.15+x*.7,
|
||||
1.
|
||||
);
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
extern float t,h;
|
||||
vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){
|
||||
float y=scr_pos.y/h;
|
||||
return vec4(
|
||||
.8-y*.6,
|
||||
.2+y*.4,
|
||||
.3+.1*sin(t),
|
||||
1.
|
||||
);
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
#define PI 3.14159
|
||||
extern float xresolution;
|
||||
//sample from 1D vis-depth map
|
||||
float samp(vec2 coord,float r,Image u_texture){
|
||||
return step(r,Texel(u_texture,coord).r);
|
||||
}
|
||||
vec4 effect(vec4 color,Image texture,vec2 texture_coords,vec2 screen_coords){
|
||||
//cartesian to polar, y of 1D sample is always 0
|
||||
vec2 norm=texture_coords.st*2.-1.;
|
||||
vec2 tc=vec2((atan(norm.y,norm.x)+PI)/(2.*PI),0.);
|
||||
float r=length(norm);
|
||||
|
||||
//enlarge blur parameter by distance, light scattering simulation
|
||||
float blur=(1./xresolution)*smoothstep(0.3,1.,r);
|
||||
|
||||
//Simple Gaussian blur
|
||||
float sum=//brightness(0~1)
|
||||
samp(vec2(tc.x-3.*blur,tc.y),r,texture)*0.1
|
||||
+samp(vec2(tc.x-2.*blur,tc.y),r,texture)*0.13
|
||||
+samp(vec2(tc.x-1.*blur,tc.y),r,texture)*0.17
|
||||
|
||||
+samp(tc,r,texture)*0.2//The center tex coord,which gives us hard shadows.
|
||||
+samp(vec2(tc.x+1.*blur,tc.y),r,texture)*0.17
|
||||
+samp(vec2(tc.x+2.*blur,tc.y),r,texture)*0.13
|
||||
+samp(vec2(tc.x+3.*blur,tc.y),r,texture)*0.1;
|
||||
|
||||
//Multiply the distance to get a soft fading
|
||||
return vec4(vec3(1.),sum*smoothstep(1.,0.,r));
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
extern float t,w,h;
|
||||
vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){
|
||||
float x=scr_pos.x/w;
|
||||
float y=scr_pos.y/h;
|
||||
return vec4(
|
||||
.8-y*.7+.2*sin(t/6.26),
|
||||
.2+y*.5+.15*sin(t/4.),
|
||||
.2+x*.6-.1*sin(t/2.83),
|
||||
1.
|
||||
);
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
extern float t,w,h;
|
||||
vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){
|
||||
float x=scr_pos.x/w;
|
||||
float y=scr_pos.y/h;
|
||||
return vec4(
|
||||
.8-y*.8-.1*sin(t/6.26),
|
||||
.4+.1*sin(t/4.)*(y+2.)/(y+5.),
|
||||
abs(.7-x*1.4+y*.5*sin(t/16.)),
|
||||
1.
|
||||
);
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user