From 7d633864107177790ef6a7ed5c1a271152c0b65b Mon Sep 17 00:00:00 2001 From: MrZ_26 Date: Sun, 19 Apr 2020 11:50:17 +0800 Subject: [PATCH] 0.8.16Fantastic Global Update --- SFX/welcome.ogg | Bin 27736 -> 64054 bytes conf.lua | 2 +- default_data.lua | 20 +- document.txt | 8 +- file.lua | 151 +++++---- image/mess/groupcode.png | Bin 29053 -> 0 bytes image/mess/pay1.png | Bin 0 -> 48380 bytes image/mess/pay2.png | Bin 0 -> 50724 bytes image/mess/paycode.png | Bin 61467 -> 0 bytes image/skin/ball(shaw).png | Bin 2656 -> 3655 bytes language/chi.lua | 74 ++--- language/chi_full.lua | 74 ++--- language/eng.lua | 81 +++-- main.lua | 608 ++++++++++++++++------------------ modes/GM.lua | 8 +- modes/attacker_hard.lua | 6 +- modes/attacker_ultimate.lua | 6 +- modes/bigbang.lua | 2 +- modes/blind_easy.lua | 6 +- modes/blind_hard.lua | 6 +- modes/blind_lunatic.lua | 6 +- modes/blind_normal.lua | 10 +- modes/blind_ultimate.lua | 6 +- modes/c4wtrain_lunatic.lua | 4 +- modes/c4wtrain_normal.lua | 4 +- modes/classic_fast.lua | 4 +- modes/custom_clear.lua | 3 +- modes/custom_puzzle.lua | 2 +- modes/defender_lunatic.lua | 7 +- modes/defender_normal.lua | 7 +- modes/dig_hard.lua | 5 +- modes/dig_ultimate.lua | 5 +- modes/drought_lunatic.lua | 2 +- modes/drought_normal.lua | 2 +- modes/hotseat_2P.lua | 6 +- modes/hotseat_3P.lua | 6 +- modes/hotseat_4P.lua | 6 +- modes/infinite.lua | 4 +- modes/infinite_dig.lua | 15 +- modes/marathon_hard.lua | 2 +- modes/marathon_normal.lua | 2 +- modes/master_adavnce.lua | 4 +- modes/master_beginner.lua | 4 +- modes/pcchallenge_hard.lua | 2 +- modes/pcchallenge_lunatic.lua | 2 +- modes/pcchallenge_normal.lua | 2 +- modes/pctrain_lunatic.lua | 7 +- modes/pctrain_normal.lua | 7 +- modes/round_1.lua | 2 +- modes/sprint_10.lua | 2 +- modes/sprint_100.lua | 2 +- modes/sprint_1000.lua | 4 +- modes/sprint_20.lua | 2 +- modes/sprint_40.lua | 2 +- modes/sprint_400.lua | 2 +- modes/survivor_easy.lua | 4 +- modes/survivor_hard.lua | 11 +- modes/survivor_lunatic.lua | 4 +- modes/survivor_normal.lua | 4 +- modes/survivor_ultimate.lua | 4 +- modes/tech_hard+.lua | 4 +- modes/tech_hard.lua | 4 +- modes/tech_lunatic+.lua | 4 +- modes/tech_lunatic.lua | 4 +- modes/tech_normal+.lua | 4 +- modes/tech_normal.lua | 4 +- modes/tech_ultimate+.lua | 4 +- modes/tech_ultimate.lua | 4 +- modes/techmino49_easy.lua | 2 +- modes/techmino49_hard.lua | 2 +- modes/techmino49_ultimate.lua | 2 +- modes/techmino99_easy.lua | 2 +- modes/techmino99_hard.lua | 2 +- modes/techmino99_ultimate.lua | 2 +- modes/tsd_easy.lua | 2 +- modes/tsd_hard.lua | 2 +- modes/tsd_ultimate.lua | 2 +- paint.lua | 348 ++++++++++--------- ai.lua => parts/ai.lua | 0 parts/bg.lua | 240 ++++++++++++++ parts/bgm.lua | 67 ++-- parts/getTip.lua | 17 +- parts/img.lua | 40 +++ parts/kickList.lua | 4 +- parts/modes.lua | 106 +++--- parts/sfx.lua | 2 +- parts/shader.lua | 7 +- parts/skin.lua | 9 +- parts/space.lua | 70 ---- parts/sysFX.lua | 42 +++ parts/task.lua | 125 ++++--- text.lua => parts/text.lua | 20 +- parts/tickEvent.lua | 71 ++++ parts/voice.lua | 53 ++- class.lua => parts/widget.lua | 33 +- player.lua | 591 +++++++++++++++++++-------------- scene.lua | 251 +++++++++----- shader/alpha.cs | 5 + texture.lua | 10 +- timer.lua | 120 +++---- toolfunc.lua | 42 ++- updateLog.lua | 157 ++++++--- widgetList.lua | 228 +++++-------- 103 files changed, 2237 insertions(+), 1702 deletions(-) delete mode 100644 image/mess/groupcode.png create mode 100644 image/mess/pay1.png create mode 100644 image/mess/pay2.png delete mode 100644 image/mess/paycode.png rename ai.lua => parts/ai.lua (100%) create mode 100644 parts/bg.lua create mode 100644 parts/img.lua delete mode 100644 parts/space.lua create mode 100644 parts/sysFX.lua rename text.lua => parts/text.lua (85%) create mode 100644 parts/tickEvent.lua rename class.lua => parts/widget.lua (88%) create mode 100644 shader/alpha.cs diff --git a/SFX/welcome.ogg b/SFX/welcome.ogg index 4e4a6a04423ca0a12f531956c286f3bd5ea1eb42..1805c72826d11651d6e7d6e720af782b75d93f3b 100644 GIT binary patch delta 60355 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 U2Dl%0d~3d334Q|rtqQ>Z0qnLr@&Et; delta 23751 zcmZ6z2{=^W{|A2V3`5pJ$X={h#@KfB)zIJpcPV%r*C%d(M5I_wstb&il%rCAPLAG8RrwCjbHb-*K1r zzmvJLoUsQos`lK!5%?8RfhxP^5dQx=h(7Mu>@Rs5zy^Cx7%G|Dxm~z;P36Ri{acmJ zX{xL1sB39yoL5q@xAVN{pyckRWaoa;`?Qk%F8lv3Yinp|=$?Q7cwThVf0N*j^WVW8 zlshAl4@brjqs?1X{+k{n=Fw^cROkO|LWHLZwIK)P$i}$DC>!U;mGRZM2(E|=!L$9i z8NLr!6>?m_t)v$%q_l%m=LgAC`sMfuzq^V0AUHvQQmXMy=b@3< z171Mk&*J6IG#S1sw4u(g{AxA;cZq~;Ps7L|+EwM9AB!9avV$LE?CYk0faJYP>_iG6z&cgoV(*f_Ve zmCA!Sd%uzT{d*=4fNj(Z9F2~V<}mK~0zjRl?jc12SV7q?UUgyh6(6Sj1VwM44Iu7?Fb_*gBUcb`SyM(()L0Ja?fZ+6wz&Lw&W)^@?;u2cYEXF+8;E zTCNR3YSMW&`YtL(vogpSwiWSNZapH2Uy}`6{d`UUQ1rST(`Evn^1;p|;AkubKW8gZ zr`SOrc=p8;4>$&Z3j)-g0mu=)U^m5n48H(i(qgW|Bu@;U2>@pi6ISp`QGMIbwgZ}f zzU8U8C1_X*a&}l8Bj$}Y2aJ?&EK?fzvi^UM3h+P8iXe53P7zY)gh}<8&_jknwPW=C zm+xe`H-<-bDH@6ZCX4P4K%cjv8&!h)?FS3jF7BLEVm>8^$JB0vr@bG&PmTZ< z5#S2u3%XCOW1EI7hY(ZO1f4Cy`li-{#tz$iiX@tzkdvk~kpyQ0^?#Qs5nwe7o29py z4G3889Wk2-;W`4W*0?j-x(1$oDE~2E_34`1e93q2U!A*n31H=3w(FJgxOI60jwNS! z{(WzrC@I&t2$UW~9#J;_7BJEf)9xn|$#A))vAHcj)d1r=*_bQ>Z{gu<1;G9y z(33Lv932m1tpY&JGY2qVT-*X8SOJ%lhqMsTvv`+^FDw=MO9D_cJ~}X0NerQ^iO6Jb($czJhl!;rh6y z)AheOW6A0|pWy@mD2!bN7=MV>0JY_uqjxD}96z#?9zo6|fSwY!=GvRynkFG-g|TK0 zt71;GR`sso$sa%dH{;};RpaVLpS!Q5`L&G;gzc8HAVfdR`EX_netptbSa*Id*E6wi zK468-T9Mdw|BD~kl?sO{ESXM=A~mN+Y<%OCiYpv2(_4kV2fO;5rfPxiq$BI=sN}IC^1^Tj4D3&~JJ> zB{})Qc&2=0v7!iEenOzF;r{nFCY=+S_O_KKj8=Z#>_N=sZwvf%1> z1b}symJZE7z6hcvzLb#`FP^{L>40FLToT$$47W_X-@m&-R_X1f>1lo$atJZ!kQi|L zeF}C1ps|QNMe(Pl%bFs9pp;Ai*4aOI>VBQ1!fQYvWSiUHIHNQC0R`t+l5U^g;U_p~ zZsl-L(rtXV^TEjHunjjJ00$&`61TkW1xEi(`^vK$%4I}7K?g_BBWQi(u4&$Y{BOVq z`VH>Ujd$<5qh>N&zYq{?6dXiyaK#Se7!PAST=+dN!_@p9FW^Zz@cTxdMjC7_8LoIe z0DcY@Pu125gB$Um&^WpJ392u!Gzn6`!%RnokVldG<@SORiv9)B!wrtE4ohdWc|h*n zwI@9K+PII%2uLSjgOYr-q7uLGB_*gBj6&bX4tR6#6feB2Zf9~5dJzzv+tN+gMY_CK zAH)g>3IohTaJwwnH_`3+z+3jN(JAbeMu_0V9GWuiK774CN_@(DuHuT{TXdi{Et*_r zym8LTd6ftPf(V6+;Q>58RB#pz^m_##+KkWR%uL@R!K*zCl{r*Tvi`{Pgu; zHK~IpWy75XNIi!ls|SSg_{)z+>ic(|@0$iUbnPzynl1FV6-kpNcQd-LLG41>lYvH; zp~Gohe&*!c-~XP^8XXQV`|*3h5P%@P^1vc}mz$+W#)Ihnwk1zOq;4CCIGl+5NXgqD zZ<*W{e^UQbKZCSoVZ1!BO5`gEdruPsMyw&Quux#!-UppH#$BeM;HaR^T0sE(h(LoG zBd!d;!&cafx;e2Zav=%qIFw3YNCjvzdDE8;o~$}$UKWU)_p}6@!zNYKX}7xvMXTiB zxa2?cH9DG56Ss3cxzu>$l~;b7LP?eha~PcL)Pw7y(e;LM~sKt%Xc^Ie}Ayr)n3Il z?0-n(gRk0wapie8^sKwv)p8IqqPer2XW>=Nn-(6+vk|tK!HZKx$C?R?*>1l#UNeyn zC~WmV*p&F}5n;91>l8fdIWI%aO=3&&lOG7^E&YCQa>tKj0$ZLQ;mkx?m}*(?kE_)? z@od|n(P%ZpfDGgK7Vq=%`dW>k@HWw7Dnq|Cy#Rn7Gmtv*5A84l>VpNRsazbq7XJJz z&Kj!eT?bB2?LkV@-ej+XLb*{yBYHdlj9_ocu~0EU1E4)sNg;~w&G7ElYy||A&URW% z7#i(Z4QvHtYX%8{#H0_)u_YL<()~>HFWGcrH8k95q&8^nd1!PK zr-st%Ft72&y`;1j5u|5ddt4u49h``gbzXI!fY05?>3C(kGV*%y9QrLs2HLp;-YES> zNa;>2(fhQ5QXYb-aqzAbb~LoY7!%3-0yY4NEZ?~HmCwG}hY}!0g#LEN^_oob-L3Z; zVQ1_W^ROfZD70($x%(GXZPoC?@BOMUcL=zJS3at@f5?A$c$XLJ`cYqtONbJ?x!YXPN`W@~LR5{4UMSlsZ>SQS z|FtbCGDbvx>F514PHjEVD4h$m3M{EXs{c5Jus%@s_uwhBtqbx`1DS zoo>awC4n8FC%nD0J#tck>{@&NBmle=$?%e)pL|qDR#ns286y%{4TUFH<7ueI)6d2E zfVLzG6HVK@HwWSp+ne~ea<=|dbc|ZNWIoyIt{XS`&*~(3M1HCQ^-7D-gFuN0m>%=x z2zzSo>W^+Oj!=(r%B>0f+HUKDU_#VhMDOUGpSn2;*aVWBWj zZyk$5uGJ5t|0z$jc;N= z{Lb}q`6J(oI`+{XDwk{vuuj+n7&WKIL!qba8OTQF9|N!tfV|3~nW<*U9`<%JHxNb$ zg4w@T&k-Qtcgr5y_sq4I5dODXNHD~)j1rVCcgft;yIG5}9uQIw_b-hO&F&lc`<>ep zU?F3C+z67KvESP>Gb!}48y4yDI4RzvzSG1V)ppB0W?Na3i0t_HFZKI8m zSsb|o2Uz^ffA{v`2Tpc3l=FkyJB^)D)Q#O%^BSRo6XIcdKRFkG^7};9X!Mp-8lmyy zZtidZOccK?>!mkM4B4{oE{za-mTrqm=ojxCq!>F5UOmS6rSY0zytAC;4uxNR4>w&Y zBK{nBx;E{c%S8de9vWJjVdDfPcbA#W*>BNXm8|Y*Xv}IYEj?T6vHDQeck4p=xf{E~ zuDV_}@_N*Fg*CpLZRm;a3PhN7HK)`W(kki!pz%3!{kMBCG8|QJSRI4?-uK*lR09oy8C;=V6BgVZi@^JNtIu&BKJ$mPzHq`9fI6r(KXfoD zO(%<&W*f2^V4r1kVg8Sm_)SmmgG*W&TueRXvKCu=4rB7&YiJ;|FVEEZU!lNDO$FW3 zxeM*0eBIx)t`U?Vl3eb4)vOgO#TkLgIOC!ojOSQIXFXg3+6~^2r#Dv=<3jumucK4z z;`!{_1#2@-|3bgZL_M3aN`Bz4u8BT=5j4mTAqVPA8C47+d=D!e)$}Q^sH>YR5=%83 z6D_>t&1?CruvIN;qD9@+SL(graZHQ!vKWKV07x7(H;`A*Gv}N5Rahl0-Wa@YikBIj z70}f8{%Om|XpXdV$&aS1VLa!123CPyLn0WcsahGjcfN&yrSZmAjJ8t>a-(k$Iv0LD zL<#9O`$vzm(dQ65I4?A(n*)A#T~4>o_rdNeaNy%tCOf1qaW;c9mcHQ?gWaf#G-L57wE9$$C>FG4ir2fc z5cSJv`%QO`6Tn-W+e1f8v*r0wtO}}2Dgeud6ahMJBLua_6Yw_P{61MxZwPZdH*qIfbe_L6j2(u#dJozSv^Ab$-jwf(5Zm^fSdkW@_#QYf_bSl_=Ia zLAumvPstFhh9gFI<_%T$-eQ&o=={cJOt9cUFrmXBc^IC#udmzXq_oR)GssCW=;>N3 z3Y95-%)Bc`Em^BEs^bLcnY+}w9>%^Qt(b6aUSKjIR*GqJ~w5ECk@02(J~0AbL10V79* zhJXnFr><~%spFG_`IFO4?ZPl1$xmkL5A}(gS%T;~-}$8A>FE^uahM5=GpKqP)JmnQ z&qLFj4k&y(?tdEg1&rUBlkSsc=TPeaP+oj-hCJXtBV+FueBg=JpLq+@(byw+VPd=0 znumryt^5mBY z_75|Mu#z6NMwuI{Fa%gP{BXoCO?1<9bw7NGK%}XYKR0NNOX~VmqbWpM_s@xFM2U&0 zCqqv~IGdQvFY(*?wBi|YNL5_QghANTHcJFhx^0bXsfR@$rFT?SHTay|;Bo!a$UQZb z<(MZfdKy&UZl16?Pk_@|k>@|rK(3{kIfviSY3c8GATat_D4Q-^9z4@=5m^l=&CQB7 zJAhvA5&}?OOs4f&)ncZs#maoy_!0Ta(5VJ!VyTfEoZ$LV%rvJl#lC?k;0)6JCjO4Z zyx9xnh!_B_ioJg)Al~voAe8_foRFHH{Z=(L=X1)23{?(*t`&>R_Gf+{p5y`iK;d#_ zAN^-GJ#u(UeYITf%C(P;+s|;e_Wcz`AFFIUZc1aN#VB}}3fzUc5{dbjtw!v)-`%aI zRPHy0L7`jpWV-7Dsr>?eS3}lN%lOm_xnfq9?@iwqX4dB?ntBI$L$V|CkN^`;3+IeY z4xF7;O=8p$na5&N7sY-2;-5b58qnt9XGPHOOhCG4)_DFlRs8c$&4=iEHO||kSCH?l zb6F!=ykIcdlgy>ro|bnycboWu#xVErfxNYAm6N6iBVROJ`F)DC*_>H&K~VBEhxIo! z>q6(Xa~Pt?)(yjN8b_@R9bOx8ZdeW`3hFD02xGcI7yIzt$_4sL#%p_h0YNoO{mcg(uP|=sykQ3 z%q?zZ?@)82xgyL8J@%VGl945#C^Ab#EmQ}>h%o!Sg-793Zc7-!W*1*fcS!A@H8bJo zenVNb7(SbF!W!*b3wi*jcrFe<71=^PFx@SGXH+_#y!q6!q|OkHlk7 z2{b={;*CU6aoZqUp`ADPAWCE9W_u4m1NngveJx!JNi=RW9%?=P$I$)P{%Y01v5%Ma z`&Q=$Rr3Xk#PIkGErm6$g26oy$JG!HubdtOkr4o!RlDbb-&T;}MzD)E>HA}XmgvaX zj$9+I76hd$(A0n=pd{hJ{*g7?8N3Jxksm&%ILd}GzM7h^4E-sKkUZTM+A41qb0c(N>Y7xXL*FS=AJS zXU342vjvM=Rm+STB`O74_%@^MB!Clun>b@(6~pB+0&cjf!AXvegOkOkZ`)m{zGlUV zB8NX+qDrGGA~~aHPywqtiZxD__!X_pM1G?2Urg^O>hf!@{%iw2F=rHIfeu*3kOFd1 zQ&59;0Kb)wkUBoa2Y_K>dtvnu*=6Deh*pFPN&|o%00R`{q}fY}EMX|R>PhlY>8M^P z0h_e#urgJH34N*B4i9ddAWp%wb~rpqQDRO)DhSvHXpiC#(3xeiN3`Gr%icF#6%{kj z{J^7vma>aCXc}!S3wGdWoBH>qL$~%eY-%)55OM^#NtYT!u1mdqo2n%E_4*B6!SeyNTk(SOyHxGVK`@Igb~ANSiP%e)byzSu-W_tr_YHtX-oANf_x4)3la zT?LvvDhk@#Pxxpv6_kM4!Dyk7AKqa2c?)?Ru-yWb7EG}_15boyW^bwTtq!csDWMKo zbrkwV@tB#4ly`;yRO3}YL$PB83$wqfRxM?H?0~~!LtSr^7)TldsO3|n&TQz$&VD2H z=H^{9QT$VjV6||4Ku8Jv1+c|wl)Op=;{}VJ=PkZNSj(6;447PGmT`&p)~Ng3HW73Z zx5txZTW*)~t(ATF&e7##r*3u7A+fz3-?T6-b$)cE-|3~|#+d>x@6Pa+bfHJt zq~fi`dkWa?ptkq#4JnUfNE}Mhh1wg9^>4I%vHK-PM}e6(zZq2J#`}DLb+loR^E%NT z>LbLUaGT!;?H;x$#%K+&Ou=-A8ZmU=@L}Y(sa|`Hum)a6 z=YTl?{kc7tjsaS~S~gyB-@Hb#pr-QG_6LG1zfPY^9{=p~Icrk3R&=!PX^4u_=I@K& zT=`k3<=p3270-U>6>r9#KO=%*mwD_N0~?fK*+jeCUTU*&r;Gcje%Y)n1lS>5IphGw z)s^jk&H`nudNgi)|1r4q%!@Eo17?C6ha0m!7K^wpuIu2d6?|t^UCj--wUf6?B*MlU z1|Pc&;v1{#Om9E)+i;a}%UuM4{ChXS7JUyT&}pm?Lf9opg_zf7E%WPA6xj<%)3_!H zLv1LDyos;l`gT&=}0fDyShYN&)o=FiVmHU&|in?FZFv z{AXd~{%_-=Fyo~z@Bm7i%n1bCb_nwIFZ0LSwg;n+_qF}7?bWpKF{tobJz+c6RCUQS z=6QEw6=^KTi*}9m*6Xu66a3sRg3c_S)(3=i!lO*n6hzt=1Z5%reyT$4~h}zdzH&|I0@h}bw?3?FlFGc+@=kb-Z=CcK%s`L6%rd2gY=g$i;db;2oLbxzy-H1bYFHc;2Y;lfdiwRUdlzH? z>C$j9K`i>$KAnfK9d`|AA$piGiQz{ukjIvO#ShvFFuLGI)AC-uM=1)I%@n>5?a~Fm zWa+pk0*V%|&P=1sI1xY#xE3_Kw4fG+Pum5cyNl;O)A?NwzP1VYGt_Gpal|Y=r;j&J z#37)*AcU0yKw1~;4Xz!|E0lZ+BdS%MPobRm4iyFEfw+zuP{(`;>xC(@poi;Z05)m0 z1&XC-3hn_GZ{i`5fx_9xEc{%Ti{jqJ!i~q!+|GBdhpw*R)n!5ZquGajUnagUq~z|%U&mZ0>ogFBw_LjFA)ohgqC zBg-naD5Wv1^&wWdrv&Q2>3~_*fYh|ZD)xtNa6|qf$Oi# zZxeM^gSon9_fX9Y$e-IpEYTAHgK$UChgdpxT`*1`SdzK=kNGaRldy{bdySgJYr~E9 zV_+BW|7tcE8QiJEA_N*_`QRrjl-?na;A?RqHZF*-8J>lu82qp#V-5Uk6D|iYKu^=$ zhsTt*hd0NveNCSm=PbnEIDHXEYx07ne^84yYUc*~arY{0DM8a!o~=+Y2=J?550tD( z0#rdk_1w=Mogre!oxcJAh(#wx-&bZp337dyQIZoQ;{6vVXS?c!4eA=e$hQzmeUHiO zJAGvfIoO_1HzW3LEYHQz^3SN7;WyBhZ73a>#K({EN$YY(34qou50uI{!P#^@mcvDj zHG7*Gt`##iI!9l7+KM;5(RrGSUMpjeTn*HWTX81>EoXk63MvY}JAJ(4y8VL0}CiINop$?4Tj{NAlo)U;fx(AfhDL z1G@CJoA4NRmfMeey+>b)wy~ZN&h~KM`|>;fOJydYmD6bv)Y>+=SYstn}s^RT+>d1TM=(Gp6b)xeWz^^kjEibK5;# zoHfToMVk^YSR8%J$LK)7gqRW$jJK&Q2oxF0eu~)=UQ^BoK4uxil+v#b!3Opwybx?- zx47q{$44GX1(gjiSDhV+e&4oOR5IrGHA-_Whmg4B*fqahW)FBOh#?et&PqF19Xw2W zy`Rpea3Y zV)5tVQ~UlIY?#RlIzBLqKL|vpwCtismf}NQcrlRsdAx}y!h}b17+T< z9S6Kfz(W^Q0|v(p6Ed;JbV?jRPgjizG-C^2fR0qe4yNxM!sI>1D8-`l>z2Mo>DGbh zl9rZ;fq_zyl10)D&!0EzLpH9b@wGq-t!J7q7s6z&Acuc*@`;kAGl1WZQNcRy0#f`q7K0ic8&6xKBR3^4A~1Li-? z!Yic#DYM2j_Aofk#}oqCl-FBbJp`l6fcO;in|JsKm3t?u?~VB~>}SZ>1Pc#c0R1tw zT?P5D|BZOm5F_-ck|^KrU$82v9_nv)BdTZ3OwE-=r ziy5coV%Wr2NG?9>9SYTfvJ1?jGC&4cW5!QP*sMRRMs@)ekV*y=Vh-kz)J->#0x2yj z&{_Z%1y(D8T_#H}`*5w$lKscd34IkGL0fLRQjHDL0#?u({}sD0wBn5`t6NP%6eLvk zbdWhI`on6klNb2FYTrIJhBcmF+{(JWk?VQWF)4-e8GGXY38ho$AwV{$bA|F@)RQyU zywvseyYl3_8&^81LyPuZ2gtNwLgC&>9pbL-Kdt_F;g1j%xbHNKDuBf9X26aj-vdhh zKe*(;{5X&F!&R%K*;gLNTokEJ9NXb+_OJ+HhOs6IBr^g&#Lj}-#cHtNi#9}-}86?=EPV` zse#>Pni+zprv@ffflZcxUVRXG`G*{~+u&`Pi7YUq?Dku=z&k~iKzq% z8VsGhM+toX3o!cR0N}V40P7k;^19{~{9sR9wD&7gjr<+e-MM9GK*ZVhDGPr!_w{q1 zf;Oz#-^$j2z$>|7w`Uvr5k5kk6Vax0)qAVZEs+<{xh6v6OWD&3oMOa`Ce8JP+++Cb zVZP|Sg!MD^&TIIg?@JyDR*gOhJg8~}%EafH@(Y9)c4DAF5$565edwE!pDiOn~qRQ z)IaipWop9p!Ckv3ND!cvLq}Kv)VsBFenYsW4&d5`g$K5r1zM^$s-zt|RG|zM+8(Xo zQhIz2%!WI&qgQi-CyH+T8^L$_&Zx&S(QBs5r(|3e$^S3fe2+@?Y=>aHoG>rqAvc8k z{6Lhsb{~2qA_K-pfTb-7={3mG$_dKYIdkcqm-rZ!NekewDspWtxSGZbM$cx|MGFEZ z0BaQSABq;Dl2g<-RILP>b@=#=k%*c%zH5Kvw0C@3t#@Ru!5IB2`DHb$XDYUj9(B`I`ieyS^@6iIsBnW$u>tI0e(K zLC|YA2oJLg$OoZIDP%icogs`iq4Gf03h{eh6cAhhxY7bK52f#|;pzrR-r^muw$P9~ zpt`eKk&h8G8N9o0@Cj*`0q_lfr7?~s5?4z`34s1ab|F6~*HQ#Wt)`{HVqlttCe&LK zVrw0&dHghe?Hr}Jw@xx)pRWIhXLtFPoVwPY>2SJE^L z2Y8yCr9pWiRF|FV1(u(vaI3_4N4t~7rjr)9#k6hNb-8OBPUWu5`7^!P>r_MZ*=w9R z$2l#Yd`IvL+-l6?1kO;P2&VfMFZ(ACwiT*aGQ_`9$)K?xYK~azKGTzH|MQT`%iGL< zD^yj~d@Mjm@~SmWhP3xqIa2|Bv`6yo$FoQWDao!wfe|PQ&WtAnXTx-o5_+%56RW?* zbEDF~SO|1Y`N#5Uf(~M#cXi&>shrTao`3RWD_z60BKBGoTp|dPsso02urn~68A|(o z*7n$~C3IA}@NAY-=^=Om24mNmoahW_Viylzi z=BpgZm@mF65d~TPo+9E>g%xoS0?xs}9$^->D-FVHn=UcG&znJ7r1IQv$4>?WAi)Xs`J}Kz~9Y^{F+XWFU1ObwLyQeo$ z5b$B;foD`2dZKqdtOod{dDR-4>d>o4;d~%|x>5Y@$AANE@3kBjm_7^sy$W5tK=_bA zXQRZwvIB51Nf1v*A=R4$&dyl(^s_p&# zI1XKkJlQru{SH$)Ckk7ys8rd+^;vd*k}u!;i8I7mvlrb_Kfg>xhhWjG`S{ z7rt6b?Eua_nNv|BsbJAg7cgwhiN8XCm`dvL_b|q8?(r+{R%#9J;BDwgPRqcG1#ix^#62xup65Yz9WU^erSMs% zin~14lDI%h_3pdEN7))@>a?&E5;*+bU%rE1z9#I?13N@e0VGStxo>--Byo}Cu)+8J z@S*m|Bt%*fgGGs?0wR!B+R1n;ASnsDtPAV4Ou}fj?Alr8Z)T}zMN`_kLrvdmjVMFA z)Gh03ZvRCl_g9udihA|ytXtoG->niOi{;*Vx_{g7HpAmbk*WeE4KXnfk?UM3IlzpK z;s5OxI-Ig*q{SttEWq{9=&VI(H|b3Fj9SMU+Xl_)c8KMBJo(15&k_fHXNLSmpWqYJ zyxyP9cNl{8bRS)Jpz6EEZ~aPaot)CuUVj1Ud})WK-8z!oJOOx#$~Fe)Xfl%Ps)RgS z{7ry*!POQQ1H9XkA2Tr{VS!I7mIO6FpzXex*v|5;;E}HcB7l8-1Jg~rGShr8JC*Fco_hjy$DHh;H*&mA`J?yb9Q)YNayLP3zwF$gl?0RQog-T>y3AuS7*%RzCH7Yfbn4HO<3{GwFvTmb%IBA8_lV(XU!(;U_?ebR}P@0ddhe~exb&m|A{YAz2l}yaP{`= zDb>%rhT(4N0ID~IFlzv%a4}cEqhHK`rg2FmH6_ClGj}c->1@sj0Q&|zzHV~=utRxl zOh~NR-D9BBy;Kn-er?I17Cqr5)&)E4A!-+iQC}f%2~E;?Avh=&-*P6u zJ7q!T=AQQu-ttA`^K?&UdAB!4r#oLM4rUJ~0fsDliX{Rr52tuc^^uf*+`l#Fj>DZBNSYEEj~bbyk)0F7vAWpH&sT)Y^^-Iyn3w9po&wD-xKOt<53x zo8-$~ltK}SL}AK?N}3OjLJP8AX&YPbTff@|PA;EyuC4gS`^wc)o-hhKW!uS73Z zh-t=bw%uiXg?Dqu*vZ_2v+alJLrLhdWZvU%lI1jaiaxcERv__(Joz<)@65^CyIEkPyI@@$j~O{zH6jI4N~gfjsyiyk*M~NX1c7`STCY05EpAdwKAf zQ0GzI#gTHQ0$AtqN^7@F@t?)97hwe1vE{n?f&edmyM@O?R9$@%LAunattzsHrbbFw zT>NP2OQ6*p1q9#|NmgSxt1=NFe+*((k+T&G6@=A;ww7>4YYjJ(^1=*jTAMb?T_#C) z)z@!shGlKXYTkS9!M*)qMOPT@zNpxqOX)L+k)Ym1hEkru!*kbbh@vlg{c`iP8u@uH z9R?v!W^2g2{XE#MVbt|O2#8?M>6*Ye95Cpp2A%dx)H8(fZKT3_}eX3@U5~CTXB`&?>Mm#L2IoKCp$LX~t)NcfV z`Hziz&zN>y_joFbsuis1;)~@QtqA-(L_@4Cfx7N8rLOrQk%yo1+Dk18DRw3>2HtD~ zk1_>^AlPEG1X|gE#(0yE;~&`xt8e)X-LM;{wzTo|yjnuiLI2n)NB~1-{0ORjWQYi~ z^mh_z+bl(+zW>8P+fs95zt&=-CEYiDvz>s&9J$T|i^xmZ5PyXC%pl(?<*@twVODzk zo_E*1XqziuwGr`C$3n*vXE$hHzIHO8>zYh$##?c%u&~wpELVf_CvRbLIrZU*Y(>Ts_I3}&At@rWd6rjo zVI4!TG-xB_^(~|)wSly%jkdb^CWoJE;gZpn>^YeUV5%2MmK%$U#Gn9q*2j*bU^n3%oO@2T07?d9>J zzjm8sf4C3>LCc@)Xu|o~2UKqNzTf}XAoM|ZP}eudar|75{GCh9c<_dEakr1846O!? zV|p<8@M`Z?ru?ndxYzTXr#|w0=oemLb=OV%PpyHgi7iG0>XAM{v!BeRjh4y72H1q; z`gj`!bsGinn-hHI{JV#U>Ty%h>Ae$pahxVF=#EgkgEHrW`5#_dMX9U^RQ%D=9s7L2 z@kjH9rKzluhoB~V-Au%K7xqfR2gD5Ta?HN}F7(V}QIHeq!tSfAwUmT;HN8X#FhEba zC*!wbiEitvyvayT04n;cX=f zVyKuOA1{Auo3LqAteB7ra=~>(l)t~NW{1GPB9$`p*B{eMzD};@vsH(N7cqnL8%Z^; zzV5%zUSqmV&;08&nJ`IuT7HUrXa#d)F!eWK4~+W56|D!ByPJ+Ze8C|$@~%3y>epln zd-12;F{Dv~M}4KqCEWTSL?d5@`T#`EjVp+%p3Jin5)j-5(gQMkT|^~ODLSvjG3AeI z^v!=ze18WypW2rB#lFS5ld!s5kZkW-4AyxTIczD}Qg%{(q^`{!Fuz z#q%gnm+-1wvexnOnDL@(D1=yADSIO==mfVuRvb{%_$;S_HF*=H1SF1bQdigEgIYEcOA z4!_ip(2Nl8X=Vw6yDXIH%?Bu7Jum0=h7uTyOp6vlbcTrrWlvbV()V>YzBeMrPdIeP zw2bG%4(5B9l+fH(q@j8(ObTMM!(E964c?Q2(jbRq`CeVsDzky5He{{X-7-6kE}2OD zlIp2=cK5SrlUM9<^Um<=0oG@B+S1jPqTMJuXLv20uda{yu`hRDPueYk*(#-j6sN-5 zt7KDr-my{ZFr}dvgXybOlAoB*ka;;e4!1vPY-mn)ZP|Y3TPt3`=qBw?6Rlr2RqccR zg;uCVBQHa(zrEtp^VeUXuoO#v<9&pgKb>d&;$9b-7Qoce|$MC+M~!v@ilcS z(PILSWnnNp5Xfp85PIY@FH9*h3N zZ(yuf_zxzkVE6pW#gc>@Z1J1B{o9Wjj03T70*rr6P_6Deet?dGd@-Jti_N=Z#zVQm3J7FJ@sKror*K5P2^CO{irr?Xb` z)PYK973wBsL_ZlFqQg}SDn)O^aD=#Mmh#bveYp_wV?@UE#5YkThz;HNszJ0Z3Td%) zcMH{P6@yK$70X{bH5y$xPp78wR9%urd%{eUorH2ekW!B>;6jv_aS%M%P=y$b=e+ab z?$ahLQ8@yVA;ZKu^a+dx_e)TLPc3^j zJ-^pe8CgG7K-YI zdk(?<6SiF>J{~6s3jHkjZ6dLnN7yrHj~hqQxrnMUIDl{X>o>-il#=YePfqQLw!rRd zPFj56TaXjWhpD!vphxJKuP>9~|7oI8xigsG9YJc!EGF-3DMyf#G3`_#lxZowslPm9F#oB}6T=zsq>h z`=+09_6Dj^G4GV~2TdN?T!d%@GfOSKj`7EOYPDD%O-DyA_ux)5?Qy!~W~FoGH+dwh zL2R$xET5B=K)@;GlpOw-PTgmg`%fyZkTYMd+WfrbcpKl#sDvYyVKjmwl-S!DI$`ql zeaW)8b#F$MXMFX|e=m_k`!;Pg!0qoXK5Sf)OZylN0M3o&vM$+qRKDEY|))S@Tt+iJn*Z+Lzs%J0u zCGmvktf2|T@c_n^oQO|it@G}`ZXdNvKi05Rf{-+kkhq9To}upQuV%ZR-PyoEnRXg& zEhsN1-*K4juJzYNu0je5EE$>6Eq8+=iF+3+<(EWu13!~7@hGrk%Paf+8x0O{(?v`x z8H^^0oKzoLqVIWcjnt-{Vt+Yn0cckRfnD}JK~aU`2cF=Msvn@G_Kx$w4$2Ge7jaI? zbKl|D0|O1LUp1F&(dhgu3x~61q;_;WM#+Jre*Y|jRY7`~AOhOS)LsC*Rdd4!j}}gZ z6a**SLLR#6$t5{?y1lJB7SAcGKO4Or@x}${yiV;CL*j8RnlS?=cgSzv%sy$^=PdXE z|6qB2vj%XS_uQMkM(f(U>R(b~N`U!(1N*Fdv9yFbX+4If@JO?bto_s3Faj)Uq4j8MPy;q)hl`w;Zz6e}Ct`r2(u7fF!XRFj!g|(|7qG ziCvXP4UzAnO95I1Qal)K55lmYY|HNsT5_;yb11W^=;k(1sD{H7P@`E$=ho`A% zGK-3-%{K>%M6lEhc7+>=cWs*|bE`>G$@*Q`eJykQw`L=^p-W+i^>a`V%|n| z=Wk^-KDUM8&8C}H!G9+(_#ztxjtj6*0qj}ZD6Ge_2&ZbD-`-ljR>N zdgy`FSL)w%0cUqsiXKdhBkTK?ZXlP;xaJpJl6Nu~SjSZKeLeQM7k zsbdzC6aU9n$iTtiahC=FAN*wfXt^z?2APRX@U<6pd;^YZzz=PFCnPL3L)u~;J}@Zz zxabvu(xIag92TvSyZZnL_)(SAihZ%HQ++ql`0Y(}2< zg&USnMOvB375yJvRXs}g?VqRKVJhVYAK_Nx2{He=%MU{Trdx-ShI5)y(m{<~tNn;d z1_AvF?UJ2?OgQ9z?#Sm{&+&#?Q~biM55W4=I?TFH6;Aq#1g`z7ESy|h@i()+)Ss2? z7P=ctQV4Q%W9IsvM&lR=KPO=;)p_n!_HRN^E__?4l1CoK20Vn9!rSA-Sy>O7_WeH{ zTzNcH?;Cw*hLNn3ikZG* zgzP&r^Sgfk-_LwL_snzO_j%59&Vhet19Yoj)X)b%3VQ|K``dk|e61OR{2W#z$|82u zJZ)9&=PGqPyLHP87&~L7V%OIwPL5}jd~tzIxX?az)&_Bw`j-_04H(YBk@4MnqPdDo zk_(lordoThE@xHO@WG@#u0nCQcO8l-DNi}(uYQV8xTD*;Z?`(1ut9GE018uaCi|9M+zDv@Efd#u!Ns;F+%QTxxGzj{M6zwEEc&wg>$ zKGfG%y|s~7rx&~J^4#yn5692JYghDc_qWBTkBPND#XPatS1GygwJt!oe%aTb;&?iN zT{gG#tMLHz(fVA9=aT+}v{=V%!1aoW@0LEf+^_Jc8)>WYVF@_#`@Ebzj(0g1YEN%( zJ5k3{4)6RtZ>SNs=NUvyZMCty{XXf8U;53eDn@1PnKUJ`X<60u_4wQB|V$e$aFX7F$yIp#^w(Zxh+1e`8b4@)1_zKy78i>H<5< zak--^Q0gu`X~2^F9&T44!dT|ZedPld>xo-5xUB`=(punZ(S|NJ$K)b;wc94rqAaKQ^l-Nj|dk<&7>qhUMSgo;>5s`KdkTB8nH@fmQI0 z{2eZFNEI>2x7=&a7QHy}kD(?lL=DX*hpodUlr?y`^Se`>5Wcqu@UE1$%Nn-VpT@HxAlW&S7fuBS$7XN=@bz*xW(-@}0Kza`fF$kh^P#MUhxZk1wM! zBS;XzB<@`}?k42$ft8jb2}W2b@90Upb3P>sVw;5B$g^r$4p4)sF3v8rs?x9M%1CB( zq~U5{s%J_Y@p-Y4eH!R@3O(U;&eO3N_uT2(MfPdA>U8h8QPz!l-^)s2w{KAo|e-F;7V(dJPuNmr0>gRD;BXWldrDzielIYlyT_U_Uy zxM}lJN+e!_RFd?Bo^>&ts1${yIc&yLA4$#l?z2(f;lX85PU0P93^6+p{Amq^y|B-v z;5p#m1$X3|q_lGzV(POjh(YWo&8P zZq#zBb{0W8K`=Y`X8^&WwGu}Tw;>n_DMlAO4>=x}IQqG4-VyCTVCwE_P-b-)riC(J#EaWW0F?!Yaxk`KqBBoi*Ay+vWlX^0Ex@213~Cu?M*M@0R6|& zdA$g@v7PG*N}#>ec=s{CQ6zi3-m@HH89yla0DALDPWMndynm&kAFc&GhI@8u=&nH2 z@r@*IDin&a6m(I!>iPQr$CWEvZv6@ei4Zw_rvX+krtl>38GtxPP2lw@QQ2NS11;6C z1iyXqc(mQ-U*Euu6CqcA8dbaqG?e0>>NSjgztoD%N%h4)Y%~uMwldTq*;B#b`h*~G z$M4_eh{eMlTT!OBzB!Gfy8dTz$%gSKC@fZU=j+ob|D4w|0)#-^LPKClo}a;`_t)0r zuFV^L9WSg`OVK2qM@5`aD`&c7u^U6XxANpDE(LWi7l#KQD!U7ZFf^9SI=xisf(1sg zIspN5EMu0AOur)q|Io^8q-7MG=OFraxiOF6e{E~@YVjYrn{0!5I`0wVX>%K<5ONtL z-6W2_mubza_w*&Qjvs&coNm_|ak%x4IUH{SyHX$LaWHhCPbmC@*#>ESc|UuC!@Yaf ze^2b&V=UqTnG2RhP5rsPIm?{Tt0bS0uL}%*Wu^v2ZsLsThkkA zP&HeiL>%Sk?+X7d5VKGL=|1sp-OApyvqQH~ZQ%#uimP5>SAfkGm8yW&3>(d!23?xF z5vk?PV}rFBNS$~&L+Jbz_1a5veO6X|ZHW+FwvbW4p_zlq^vJMp|CxUwa2aWIutVCv ziO(R`JBDRPdyp(Y+7m(M**er4;)@-Eu*}4o@hDzO+?xc-(kMt;s`!0o-X{s^J=hc> zmZm?}`}0QrsOUEMjC609V(UjqTQ2|X*h-m3q`0#62dta%L1L;4{I$UdoPbL})qy-2 z&AmMlM6QYdGM@wW-mqo7MA&ZKl@C@Oc6bR+C;b|2qffEHgtriAS)M7Y8HQPmwyq)9 zmH1^Nhb%nYc+8~rgUDQE*EMCp4d12&=mv})AK4)XS{QcSSX}F?)+uagtiPgAV3FUh zG|uqzjgqfkXx8~<*CO%xTLwLGmE|_%EmxmepUwQPR{1@qV3xESY2xW^JCI>{LRVmD zC@J56{*tf7!?OYENY32=%&u%gfcC}>tM#FpV;V>{G1*h6&peW-5)b>9H{`EIJyNl& z5#$^AG4<4?Otu?RRDgrg3fRFW;I7`Blb0J-OiFC>%wp_6ct$C2TQYM!AnO18E6Q2k zKS5{V72*-mWai3auHXVPs`nn+p(?-{UZ&lGU#g=Xq~A#5JvUQ#_-))Pc&Y?aVQ!$mI3yz%5SkTm%&+ z*)B7Y4`;~EMZd( zr6UiFYk#ODN;Pfw9+Z`cUQOJPXo|G5DtYr9H=Y0aMfv@>5j}`E#@76hy%-ngE%bOA zAvq`^NC3tBN^a8Solo)FR$fdlfEzF!fz~_lA07vy*CR>2aqNqeIV!8T3OoEjR>_D% z$BBZXaA}ypAdQN{%b5<+jn4V}nIRW=>(Q`ofa%H{CtaL|QN-?K|JjZY3jSM@J>%>o zcIxEgITF;qA2rxq9zah+kq*PptWmlW;zEQ0#D_nJ0IrOvO8B^ga|8Y5g>92$!xq|p zbTM9AnCTb~i^eDpSO|p^&eH}LLz4@14CxAWAC+SK*B+Z3%Y z(3*ut!Z6WyO1Z3wz1 z{sb=7A@DOng&756KGU6F5B!ky8Ft7&LmO;8Hl0;f9p*GSm_4uRlb^09^PT45eJ`=0@uP|23n&uj+g=F5k6jRW!q~=g#sAdU|4v1h3S_=N| z2z@~bxUTym_j@9e6TYPp3bDxc1P5OFo97CK>c4*HJP_8S>ye?)#D{FjZoKhcsLj6E zyOjZgE;btZ{}&)lskGOyJc*U81|&+_9o!%3<51fR#D&fhE#0=L!v8rWSy-}fuPF<#{ zbP>Ki@C$UU*3kB$0-Hu@W%SUrJ@oMICo|<_PMChgP3pY`%Un} z&7VO>-!Wq#H`MaLo5|w^LidBH7l*j=00?a~z6{F(pUEK9U2}b@ar8Wou^{&mXoZ#Z z*9hPf7uZ2JaEu`637BRVIxR+p`Q*HeF`?UNbXj`F(1sGvN4)S}sCa$XH9jWI77AIj zm8_Nw8B>@w(CQ+i+?WLgK4Wu{y}!#Wa{oUw!P<0euaaT?#U3@W*DSj6Gf3PjOmU_%ET%ZZ6k*D2|5oF5r#8bfW+FGZ zxOkhBT>g3e%lW+i>pQbIMmdvCaeM4H`|#f@1Y#cx{8bXvC`hbaQkQ9u4%YhDk=a#v zh1;#rVjg1b+-iYB02BNsrK*`6Bu;{EFp7&7Xz9%fRo zo(&oFzzBSQ?!B_PcA5^G*7#vjU)sj3GMhY))r7gXUnA;P{SdB(4XD84TVk|_4Pb#! zM;S!CPShNOg2{rD=SWRNy#d%j(p{X9ko<6h+_!3aQGV<~JJ$q6Sz2%6dmAyAZ@=+BZM@n=@Lcz-^5)8-P0bn=&%HaD8fJdPd^wwP&6tsu z8s6AUPyHpc{ND29@V9`GCu|a%N}+F$X!=Avrzm@TDm2PMWzPP1zGO0V$Ft&$}n@S7Dtp$w`cMTAKB| z1+h>Ca8Bv&V{s<=Pe9>0<3}IxnyEYT8Z{^AVvu`a_1Pt;$(yhCk+a>^KFygTA(yi! zn1aKKXlr;lGr=1#Nlf>6sbF@0wpa*L_qFpQf4V6OK1(TidIcu49)s9Ob%aK*8%H|x zjv?YnVdlUkqh7r>6mK+~D>#v`0AB)k3c{c>km1^|F-ZCLODWwA|B>p?fFu3ZG3*K#<4Ny>g*T(ZfdJT?;nd+ zMI&DKpAder-R#p7g0a z7X+W3_~5X|*?+o@U%Mb~-FeHiu#ZIwTMyL}!M;unx=Ky$8rXzWl1#5tTnpheDH8VD ze?_Ioy7j9~qjw?!p*y25*?&L0j=QDg&M;L%%t-J7pAIe(PYl4j*y3*s$$FY$1ztl= zJYTwV46}cf8_#9oq_YolMrh)yf0qnY^fqWM$?^PAVZQ9XR-G-Dav|cG2I(8rvp6K6 zW!JO$T32?9so6-2#0I_PIpdoVEtDF5UE<7h9rlF9#maAj0mO4DCnd!Zac@;R!;T)2 z)pcO|=-ryc!Rd_VMI%JqCWnvOl*YCkr-s`59NZ6AQ3IT+uy91|U5@&}w+X>%t{)|l zw2q`+Q}b9#Fd0TdPYSA=$%XVS2u`m}H7rhzrQY{C|GH$)!$PV@IS=FI?PF`p*uJ-~ zdj3Iy==hyx7yexO!HNS?R6&q`n7Hs?_rZz^1N!p&t5*%pXYCZGDp~Pcda?5ek`26g z-NX_R=zLGK2tEs?1O|zIXMw<_@;94J5vvy2{~CI&a{2+SI1AG5F4X#vS=Q;_dp(}c zvGIa-+g#H;@^N02Zgp{n#7p_DrFj*{)t2xJRU8!ag9aTL_D11hG|XI{+ga4T6ce8l z+?`m!C&hV!*UJ2}Na5L!EuV!wK9#xKOs5{|nkxS&EV+Qbr}TbKa|R{MB4xe@OdtiW z7o{lLO~mwRD6o%bOPBcHvR&BNV+2)_xWiDxKTyk|iIPpXOg!M&6KE>Rz@5MF{?Q8t zPw(#y$?d+5p2K+^>%wft5`q^4nOgls>WU421OFg~;eL?J=L1UYnflZ628stZbW)y|%AA)>s&2$2u&B=t{ zpUSItAVmQC$k`vPK6>XuvIDqEMPTsv-iKj0_CN~4A{QcrikBidTiur5HL+%M2)2lY8`(%1SJ_65 zdK{ejoknt-3e>H-=OJRrqJX>#Bco7wCg?I&KQ8i3)xrXI$3 zdPB6A8TljA8&{e7;W6Rhh2d4?Duh9vS@Y0yI1UHHTn^dX)+5I2=&i7@HPMKo!3vP+ zAnjitb0erAgR*0z^{?TTzNWG98Qn~~YF$OGS?um+oRDB?Zo=P4时会将B2B点数拉满) 根据上述规则计算后,向下取整,攻击打出 @@ -53,4 +53,6 @@ back to back(B2B)点数说明: 自定义模式说明: 玩家可以自由调整大多数参数(不包括上述各种游戏模式的特殊效果),也可以画一个场地去消除或者是作为提示模板来进行拼图模式. - 在拼图模式下,按功能键切换是否展示提示.其中打"X"的格子不允许有方块,空的格子可以是任何状态,普通的七种彩色方块必须颜色对应,垃圾行方块的为止只要有方块就可以,但是不能是空气,玩家拼出自己画的图后就会判定胜利. \ No newline at end of file + 在拼图模式下,按功能键切换是否展示提示.其中打"X"的格子不允许有方块,空的格子可以是任何状态,普通的七种彩色方块必须颜色对应,垃圾行方块的为止只要有方块就可以,但是不能是空气,玩家拼出自己画的图后就会判定胜利. +附录: +ZXC的Ospin地图:XY0BCgAwCAIR7v9vHtUSt8AS0xKqgpnNGyXkrmFNePf6qi3BbQPrHT2Owxe6D66NeKi86dwB \ No newline at end of file diff --git a/file.lua b/file.lua index 470aa58b..0c63d4d1 100644 --- a/file.lua +++ b/file.lua @@ -3,13 +3,7 @@ local int,max,min=math.floor,math.max,math.min local sub,find=string.sub,string.find local toN,toS=tonumber,tostring local concat=table.concat -local FILE={ - data= fs.newFile("data.dat"), - setting=fs.newFile("setting.dat"), - VK= fs.newFile("virtualkey.dat"), - keyMap= fs.newFile("key.dat"), - unlock= fs.newFile("unlock.dat"), -} + local function splitS(s,sep) local t,n={},1 repeat @@ -20,7 +14,6 @@ local function splitS(s,sep) until #s==0 return t end - local tabs={ [0]="", "\t", @@ -61,16 +54,28 @@ local function dumpTable(L,t) end return s..tabs[t-1].."}" end -local function addToTable(G,base)--push all values to base +local function addToTable(G,base)--refresh default base with G-values for k,v in next,G do - if type(v)=="table"and type(base[k])=="table"then - addToTable(v,base[k]) - else - base[k]=v + if type(v)==type(base[k])then + if type(v)=="table"then + addToTable(v,base[k]) + else + base[k]=v + end end end end -function loadRecord(N) + +local files={ + data= fs.newFile("data.dat"), + setting=fs.newFile("setting.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()) @@ -83,21 +88,21 @@ function loadRecord(N) end end end -function saveRecord(N,L) +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 - TEXT(text.recSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5) + TEXT.show(text.recSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5) end end -function delRecord(N) +function File.delRecord(N) fs.remove(N..".dat") end -function loadUnlock() - local F=FILE.unlock +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 @@ -109,18 +114,18 @@ function loadUnlock() end end end -function saveUnlock() - local F=FILE.unlock +function File.saveUnlock() + local F=files.unlock F:open("w") local _,mes=F:write(dumpTable(modeRanks)) F:flush()F:close() if not _ then - TEXT(text.unlockSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5) + TEXT.show(text.unlockSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5) end end -function loadData() - local F=FILE.data +function File.loadData() + local F=files.data if F:open("r")then local s=F:read() if s:sub(1,6)~="return"then @@ -130,22 +135,64 @@ function loadData() F:close() if s then setfenv(s,{}) - addToTable(s(),stat) + local S=s() + if S.version~=gameVersion then + S.version=gameVersion + S.clear_S={S.clear_1,S.clear_2,S.clear_3,S.clear_4} + S.clear={{},{},{},{},{},{},{}} + local A,B,C,D=int(S.clear_1/7),int(S.clear_2/7),int(S.clear_3/7),int(S.clear_4/7) + for i=1,7 do + S.clear[i][1]=A + S.clear[i][2]=B + S.clear[i][3]=C + S.clear[i][4]=D + end + for i=1,S.clear_1%7 do S.clear[i][1]=S.clear[i][1]+1 end + for i=1,S.clear_2%7 do S.clear[i][2]=S.clear[i][2]+1 end + for i=1,S.clear_3%7 do S.clear[i][3]=S.clear[i][3]+1 end + for i=1,S.clear_4%7 do S.clear[i][4]=S.clear[i][4]+1 end + S.clear_B={} + for i=1,7 do + S.clear_B[i]=S.clear[i][1]+S.clear[i][2]+S.clear[i][3]+S.clear[i][4] + end + + S.spin_S={S.spin_0,S.spin_1,S.spin_2,S.spin_3} + S.spin={{},{},{},{},{},{},{}} + A,B,C,D=int(S.spin_0/7),int(S.spin_1/7),int(S.spin_2/7),int(S.spin_3/7) + for i=1,7 do + S.spin[i][1]=A + S.spin[i][2]=B + S.spin[i][3]=C + S.spin[i][4]=D + end + for i=1,S.spin_0%7 do S.spin[i][1]=S.spin[i][1]+1 end + for i=1,S.spin_1%7 do S.spin[i][2]=S.spin[i][2]+1 end + for i=1,S.spin_2%7 do S.spin[i][3]=S.spin[i][3]+1 end + for i=1,S.spin_3%7 do S.spin[i][4]=S.spin[i][4]+1 end + S.spin_B={} + for i=1,7 do + S.spin_B[i]=S.spin[i][1]+S.spin[i][2]+S.spin[i][3]+S.spin[i][4] + end + + S.hpc=S.c + TEXT.show(text.newVersion,640,200,30,"fly",.3) + end + addToTable(S,stat) end end end -function saveData() - local F=FILE.data +function File.saveData() + local F=files.data F:open("w") local _,mes=F:write(dumpTable(stat)) F:flush()F:close() if not _ then - TEXT(text.statSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5) + TEXT.show(text.statSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5) end end -function loadSetting() - local F=FILE.setting +function File.loadSetting() + local F=files.setting if F:open("r")then local s=F:read() if s:sub(1,6)~="return"then @@ -159,18 +206,18 @@ function loadSetting() end end end -function saveSetting() - local F=FILE.setting +function File.saveSetting() + local F=files.setting F:open("w") local _,mes=F:write(dumpTable(setting)) F:flush()F:close() - if _ then TEXT(text.settingSaved,1140,650,40,"sudden",.5) - else TEXT(text.settingSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5) + if _ then TEXT.show(text.settingSaved,1140,650,40,"sudden",.5) + else TEXT.show(text.settingSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5) end end -function loadKeyMap() - local F=FILE.keyMap +function File.loadKeyMap() + local F=files.keyMap if F:open("r")then local s=loadstring(F:read()) F:close() @@ -180,18 +227,18 @@ function loadKeyMap() end end end -function saveKeyMap() - local F=FILE.keyMap +function File.saveKeyMap() + local F=files.keyMap F:open("w") local _,mes=F:write(dumpTable(keyMap)) F:flush()F:close() - if _ then TEXT(text.keyMapSaved,1140,650,26,"sudden",.5) - else TEXT(text.keyMapSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5) + if _ then TEXT.show(text.keyMapSaved,1140,650,26,"sudden",.5) + else TEXT.show(text.keyMapSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5) end end -function loadVK() - local F=FILE.VK +function File.loadVK() + local F=files.VK if F:open("r")then local s=loadstring(F:read()) F:close() @@ -201,23 +248,13 @@ function loadVK() end end end -function saveVK() - local F=FILE.VK +function File.saveVK() + local F=files.VK F:open("w") local _,mes=F:write(dumpTable(VK_org)) F:flush()F:close() - if _ then TEXT(text.VKSaved,1140,650,26,"sudden",.5) - else TEXT(text.VKSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5) + if _ then TEXT.show(text.VKSaved,1140,650,26,"sudden",.5) + else TEXT.show(text.VKSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5) end end - -if fs.getInfo("unlock.dat")then loadUnlock()end -if fs.getInfo("data.dat")then loadData()end -if fs.getInfo("key.dat")then loadKeyMap()end -if fs.getInfo("virtualkey.dat")then loadVK()end -if fs.getInfo("setting.dat")then loadSetting() -elseif system=="Android"or system=="iOS" then - setting.VKSwitch=true - setting.swap=false - setting.vib=2 -end \ No newline at end of file +return File \ No newline at end of file diff --git a/image/mess/groupcode.png b/image/mess/groupcode.png deleted file mode 100644 index 0c203dbf83f1a9a92409b40b728bac955c23d53c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29053 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 AW&i*H diff --git a/image/mess/pay1.png b/image/mess/pay1.png new file mode 100644 index 0000000000000000000000000000000000000000..f7fbb89c1dbe54be041508d0b3271fe09bc4a481 GIT binary patch literal 48380 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 literal 2656 zcma);dpy(oAIB$?TOlNppT)>R?w3@q3zMyxlWe-kDalA|gfZvGES1|q zF5lu*atm?V31KF3Ia8>R%gAqY&ZFNse&;++kI&=#dS5^9f4-0R^YKYSqa1ch?3Dn4 zKsynRa100}%DJS@ZK(stX5J*B60k`=kVsK`-C)w?y zyy*L>?ylSM`~5?&cO~Qqd+F{7_(f7!#K4vZ3BarO!Tq*R2)Aw9$RF7O${bQ75-@5!p1&f zYw92Vz59P9%9tX#2<$B7NXBbXWVbY6MSa{7p`u0LHna{F3QN^ZBQ$-qgdT>7m|yck zq>smDyjCP@9H$6})ZPS6xnuYhjV%>SJYMUTJVMG*Jhfm;gL~oxx;=7OFRd`xy7sY) z{6)x>n7bX;*X)(sfA$qt+8YS5W9;hr&om1X+7Lgb^~gLXChPQrcM(? zpg=1w%9C*wYQ~s-Y%hrjvLBASp+I4$JP=mag#t=pqNX^<5Tj`+!u_;ypO-4HeD^K<~hF`^ua6G->o=b8WNYxbuqASnS`We`~< z+p)2mBHlNXjl|Ff;H0uN=gOcq0)^$iKgVl0bpVP@OV%b`Qgj3<;?n5ns_y?bl93;oI(1&hF~3KYbyNr^A5jgF9WubK(E#eH6Z!&Kp^#B zyv^`$r4VT`#ZFs@V($fj3#8Al@@;rzj!Ne+iWjD3WtFG8KC^!wAk8yYK7cothApgU zBcZA}Jt}mo%$Og!CiB37LuY$VHY_HtuxIGnE2BfXT~ql(M6;NdbuY^$j>(H0FllMR zy>S=V#`g3aG@wpeis&3~w=eg#Oq>5Kwi=5i_YNJN!jy8l4`+ETe%B4im(-EERZh-7 ze77~pbZ?}S4z)~2>-lvcxt2~P>~K|Puih<=gP%zj+re*lq$=~&uhAK91xqft1b+69 ziNWV(^*3d0WWXzWu>ylu6N_KS%G685oh>eso~wC)La1^A!sryshW=>_jp&Gq-Y}=t z_vcF9W-N?0y7j}jPov7pU0I1sTQ0Dy8ur`}Oe`^rhg@e(2UcEA=H$o`XKHbe>_&3r zqW-~2p6jwpLbr7dV<7UMnGh`P)&%Hd7Wd)iN0Xp&Ud$Hi8j9ijsNMy;J)J$i9r zWNB~@74i8D_K9MNLF>8V8ZQxiZtESEmV>=L{M2`sE@3CkiiT#$lb<4wWdg~`$%OzN z<#2J9n`Bf7Je&%@+eIh7g_DZeJLy*M=Z@(-EDv3-fX2L#fl|jJRz6O!rgS}O?-XJa z-YhRi@bTOfFTiUMyS{Q^WxBUy6TEEYo?DhNJZ|`A#9D|8$<5F2Jzl-7jhi*17xQ_| z?mtPT=d`|(r{u@pd=_t47uQeEKz}7Ax8o6M_{l>U*GmeBHl1fD{v8& zwMj8V*M$VA|Cwo9VE8VDCai1%WhUB+u@pM)nfkqe0)Ht`8(3CK3&@F5mP}FFw${S@3Qx>!h-)t_)pG6TPrlzIqTE4{4{x z8BPwKO@vAj34F4ExpGcWnyB&`RzbDWg)V0(}r5mH|@Lpk<7dN zhBR2X`iYQ}>az^Ej@#U;fbe^LWQbVRbOC=Wg))Q!`OEEH<}*PFl( ztp8I^IP&E*$NtO@@IEgFAI^NnNTfCImx_l-gEMe-;=Lw_pldCGw(K3rLs#pS6zar@ zMmj-qUf;TxHoHGeZ&xA%{tSeg*hdKT*RUGar*@%%$*`KrL2rXfsj$I@a#Ocl9nHQ1 z6rT)*NVNck4z#{qg`LysNL_uVcB4WzEAyPBGuNp?|93S-LOVi^6kDw6pZHIe}w6~&B5EmZU9`|yVL^9a~s)H9E^)TpV#EK7)_KY9uOpB dcVRVFM7#CZ=oRA!j|yInh~p@DxvgjXe*sxU5NZGb diff --git a/language/chi.lua b/language/chi.lua index 504e35d6..da8f74df 100644 --- a/language/chi.lua +++ b/language/chi.lua @@ -9,20 +9,18 @@ local actName={ "落在最左:","落在最右:","列在最左:","列在最右:", } return{ + anykey="按任意键继续", + newVersion="检测到更新!可能有部分数据被重新处理", lang="中文", atkModeName={"随机","徽章","击杀","反击"}, royale_remain=function(n)return"剩余 "..n.." 名玩家"end, cmb={nil,nil,"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"}, - techrash="Techrash", - techrashB2B="B2B Techrash", - techrashB3B="B2B2B Techrash", + techrash="Techrash",techrashB2B="B2B Techrash",techrashB3B="B2B2B Techrash", + spin={"Z-spin","S-spin","L-spin","J-spin","T-spin","O-spin","I-spin"}, block={"Z","S","L","J","T","O","I"}, clear={" single"," double"," triple"}, - spin={"Z-spin","S-spin","L-spin","J-spin","T-spin","O-spin","I-spin"}, - b2b="B2B ",b3b="B2B2B ", - mini="Mini", - PC="Perfect Clear", - C="Clear", + mini="Mini",b2b="B2B ",b3b="B2B2B ", + PC="Perfect Clear",HPC="Half Clear", hold="暂存",next="下一个", stage=function(n)return"关卡 "..n end, @@ -38,6 +36,11 @@ return{ pause="暂停", pauseCount="暂停统计", + atk="ATK", + spd="SPD", + recv="RECV", + eff="EFF", + custom="自定义游戏", customOption={ drop="下落速度:", @@ -80,7 +83,7 @@ return{ ctrlSetHelp="方向键选择/翻页,回车修改,esc返回", musicRoom="音乐室", nowPlaying="正在播放:", - + settingSaved="设置已保存", settingSavingError="设置保存失败:", keyMapSaved="键位设置已保存", @@ -90,7 +93,7 @@ return{ statSavingError="统计保存失败:", unlockSavingError="解锁保存失败:", recSavingError="纪录保存失败:", - + needRestart="重新开始以生效", copySuccess="已复制到剪切板", dataCorrupted="数据损坏", @@ -104,40 +107,31 @@ return{ actName=actName, - load={[0]="加载完成","加载语音ing","加载音乐ing","加载音效ing","加载模式ing","加载乱七八糟的东西ing"}, + load={[0]="加载完成","加载语音ing","加载音乐ing","加载音效ing","加载图片ing","加载模式ing","加载乱七八糟的东西ing"}, pauseStat={ "时间:", "按键/旋转/暂存:", - "使用方块:", - "消行数:", - "攻击数:", - "发送数:", - "接收数:", - "直接消除数:", - "旋转消除数:", - "满贯数:", - "全清数:", - "效率:", - "多余操作方块:", - "最简操作率:", + "下块:", + "消行/挖掘:", + "攻击/挖掘攻击:", + "上涨/接收/抵消:", + "B2B/B3B/PC/HPC:", + "Finesse:", }, stat={ + spin="spin0~3", + clear="clear1~4", "游戏运行次数:", "游戏局数:", "游戏时间:", - "按键数:", - "旋转数:", - "暂存数:", - "方块使用:", - "消行数:", - "攻击(发送)数:", - "接收数:", - "直接消除数:", - "旋转消除数:", - "满贯数:", - "全清数:", - "效率:", - "多余操作:", + "按键/旋转/暂存:", + "方块/消行/攻击:", + "接收/抵消/上涨:", + "挖掘/挖掘攻击:", + "效率/挖掘效率:", + "多余操作/极简率:", + "满贯/大满贯:", + "全/半清:", }, help={ "好像也没啥好帮助的吧?就当是关于了", @@ -146,7 +140,7 @@ return{ "", "使用LOVE2D引擎", "作者:MrZ 邮箱:1046101471@qq.com", - "程序:MrZ 美术:MrZ 音乐:MrZ 音效:MrZ 语音:Miya", + "程序:MrZ 美术:MrZ 音乐:MrZ 音效:MrZ 语音:MrZ/Miya", "特别感谢:Flyz,Farter,196,Teatube,T830,[所有内测人员]和 你!", "", "错误或者建议请附带截图发送到内测群或者作者邮箱~", @@ -165,7 +159,7 @@ return{ simple-love-lights[dylhunn] ]], support="支持作者", - group="官方QQ群", + group="官方QQ群(如果没有被暗改的话就是这个):822023725", WidgetText={ main={ play="开始", @@ -243,7 +237,6 @@ return{ grid="网格", center="旋转中心", bg="背景", - bgspace="星空背景", smooth="平滑下落", lockFX="锁定特效等级", dropFX="下落特效等级", @@ -267,6 +260,9 @@ return{ setting_control={ das="DAS",arr="ARR", sddas="软降DAS",sdarr="软降ARR", + ihs="提前Hold", + irs="提前旋转", + ims="提前移动", reset="重置", back=BK, }, diff --git a/language/chi_full.lua b/language/chi_full.lua index a932cee3..93bdeb78 100644 --- a/language/chi_full.lua +++ b/language/chi_full.lua @@ -9,20 +9,18 @@ local actName={ "落在最左:","落在最右:","列在最左:","列在最右:", } return{ + anykey="按任意键继续", + newVersion="检测到更新!可能有部分数据被重新处理", lang="全中文", atkModeName={"随机","徽章","击杀","反击"}, royale_remain=function(n)return"剩余 "..n.." 名玩家"end, cmb={nil,nil,"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"}, - techrash="四清", - techrashB2B="满贯 四清", - techrashB3B="大满贯 四清", + techrash="四清",techrashB2B="满贯 四清",techrashB3B="大满贯 四清", + spin={"Z型回旋","S型回旋","L型回旋","J型回旋","T型回旋","O型回旋","I型回旋"}, block={"Z","S","L","J","T","O","I"}, clear={"单清","双清","三清"}, - spin={"Z型回旋","S型回旋","L型回旋","J型回旋","T型回旋","O型回旋","I型回旋"}, - b2b="满贯",b3b="大满贯", - mini="迷你", - PC="场地全清", - C="场地半清", + mini="迷你",b2b="满贯",b3b="大满贯", + PC="场地全清",HPC="场地半清", hold="暂存",next="下一个", stage=function(n)return"关卡 "..n end, @@ -38,6 +36,11 @@ return{ pause="暂停", pauseCount="暂停统计", + atk="力", + spd="速", + recv="收", + eff="效", + custom="自定义游戏", customOption={ drop="下落速度:", @@ -88,7 +91,7 @@ return{ statSavingError="统计保存失败:", unlockSavingError="解锁保存失败:", recSavingError="纪录保存失败:", - + needRestart="重新开始以生效", copySuccess="已复制到剪切板", dataCorrupted="数据损坏", @@ -102,40 +105,31 @@ return{ actName=actName, - load={[0]="加载完成","加载语音ing","加载音乐ing","加载音效ing","加载模式ing","加载乱七八糟的东西ing"}, + load={[0]="加载完成","加载语音ing","加载音乐ing","加载音效ing","加载图片ing","加载模式ing","加载乱七八糟的东西ing"}, pauseStat={ "时间:", "按键/旋转/暂存:", - "使用方块:", - "消行数:", - "攻击数:", - "发送数:", - "接收数:", - "直接消除数:", - "旋转消除数:", - "满贯数:", - "全清数:", - "效率:", - "多余操作方块:", - "最简操作率:", + "下块:", + "消行/挖掘:", + "攻击/挖掘攻击:", + "上涨/接收/抵消:", + "(大)满贯/全(半)清:", + "非极简操作:", }, stat={ + spin="回旋0~3", + clear="消除1~4", "游戏运行次数:", "游戏局数:", "游戏时间:", - "按键数:", - "旋转数:", - "暂存数:", - "方块使用:", - "消行数:", - "攻击(发送)数:", - "接收数:", - "直接消除数:", - "旋转消除数:", - "满贯数:", - "全清数:", - "效率:", - "多余操作:", + "按键/旋转/暂存:", + "方块/消行/攻击:", + "接收/抵消/上涨:", + "挖掘/挖掘攻击:", + "效率/挖掘效率:", + "多余操作/极简率:", + "满贯/大满贯:", + "全/半清:", }, help={ "好像也没啥好帮助的吧?就当是关于了", @@ -144,7 +138,7 @@ return{ "", "使用LOVE2D引擎", "作者:MrZ 邮箱:1046101471@qq.com", - "程序:MrZ 美术:MrZ 音乐:MrZ 音效:MrZ 语音:Miya", + "程序:MrZ 美术:MrZ 音乐:MrZ 音效:MrZ 语音:MrZ/Miya", "特别感谢:Flyz,Farter,196,Teatube,T830,[所有内测人员]和 你!", "", "错误或者建议请附带截图发送到内测群或者作者邮箱~", @@ -163,7 +157,7 @@ return{ simple-love-lights[dylhunn] ]], support="支持作者", - group="官方QQ群", + group="官方QQ群(如果没有被暗改的话就是这个):822023725", WidgetText={ main={ play="开始", @@ -240,7 +234,6 @@ return{ grid="网格", center="旋转中心", bg="背景", - bgspace="星空背景", smooth="平滑下落", lockFX="锁定特效等级", dropFX="下落特效等级", @@ -264,6 +257,9 @@ return{ setting_control={ das="首次移动延迟",arr="移动重复延迟", sddas="首次软降延迟",sdarr="软降重复延迟", + ihs="提前暂存", + irs="提前旋转", + ims="提前移动", reset="重置", back=BK, }, @@ -324,4 +320,4 @@ return{ back=BK, }, }, -}--译 \ No newline at end of file +} \ No newline at end of file diff --git a/language/eng.lua b/language/eng.lua index 21772ef0..b6869d07 100644 --- a/language/eng.lua +++ b/language/eng.lua @@ -7,20 +7,18 @@ local actName={ "Left Drop:","Right Drop:","Left INS:","Right INS:", } return{ + anykey="Any Key to Continue", + newVersion="Updating detected!Maybe some data is recalculated", lang="English", atkModeName={"Random","Badges","K.O.s","Counters"}, royale_remain=function(n)return n.." Players Remain"end, cmb={nil,nil,"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"}, - techrash="Techrash", - techrashB2B="B2B Techrash", - techrashB3B="B2B2B Techrash", + techrash="Techrash",techrashB2B="B2B Techrash",techrashB3B="B2B2B Techrash", + spin={"Z-spin","S-spin","L-spin","J-spin","T-spin","O-spin","I-spin"}, block={"Z","S","L","J","T","O","I"}, clear={" single"," double"," triple"}, - spin={"Z-spin","S-spin","L-spin","J-spin","T-spin","O-spin","I-spin"}, - b2b="B2B ",b3b="B2B2B ", - mini="Mini", - PC="Perfect Clear", - C="Clear", + mini="Mini",b2b="B2B ",b3b="B2B2B ", + PC="Perfect Clear",HPC="Clear", hold="Hold",next="Next", stage=function(n)return"STAGE "..n end, @@ -36,6 +34,11 @@ return{ pause="PAUSE", pauseCount="Pause Count", + atk="ATK", + spd="SPD", + recv="RECV", + eff="EFF", + custom="Custom Game", customOption={ drop="Drop speed:", @@ -96,44 +99,34 @@ return{ noScore="No Score Yet", highScore="Highscore", newRecord="New Rocord", - errorMsg="Techmino ran into a problem and needs to restart.\nWe collected some error info,and you can send them to author.", + errorMsg="Techmino ran into a problem and needs to restart.\nWe collected some error info, and you can send them to the author.", actName=actName, - - load={[0]="Finished","Loading VOICE","Loading BGM","Loading SFX","Loading modes","Loading other things"}, + load={[0]="Finished","Loading VOICE","Loading BGM","Loading SFX","Loading images","Loading modes","Loading other things"}, pauseStat={ "Time:", - "Key/Rot./Hold:", - "Block used:", - "Lines:", - "Attack:", - "Send:", + "Key/Rotate/Hold:", + "Piece:", + "Row/Dig:", + "Attack/DigAtk:", "Receive:", - "Clear:", - "Spin:", - "B2B:", - "PC:", - "Efficiency:", - "Finesse err:", - "Finesse rate:", + "B2B/B3B/PC/HPC:", + "Finesse:", }, stat={ - "Games run:", - "Games played:", - "Game time:", - "Key pressed:", - "Rotate:", - "Hold:", - "Block used:", - "Lines cleared:", - "Attack(Sent):", - "Receive:", - "Clear:", - "Spin:", - "B2B:", - "PC:", - "Efficiency:", - "Finesse error:", + spin="spin0~3", + clear="clear1~4", + "Game Runned:", + "Game Played:", + "Game Time:", + "Key/Rotate/Hold:", + "Block/Row/Atk.:", + "Recv./Res./Asc.:", + "Dig/Dig Atk.:", + "Eff./Dig Eff.:", + "Finesse Err./Rate:", + "B2B/B3B:", + "PC/HPC:", }, help={ "I don't think you need \"help\".", @@ -142,14 +135,14 @@ return{ "", "Powered by LOVE2D", "Author:MrZ E-mail:1046101471@qq.com", - "Program:MrZ Art:MrZ Music:MrZ SFX:MrZ VOICE:Miya", + "Program:MrZ Art:MrZ Music:MrZ SFX:MrZ VOICE:MrZ/Miya", "Special thanks:Flyz,Farter,196,Teatube,T830,[all test staff] and YOU!", "", "Any bugs/suggestions to my E-mail.(may with screenshot)", "Only released in test group for FREE", "Game downloaded from other way may implanted with virous", "Only network/vibrating permission applied", - "Author is not responsible for any loss by eddited game", + "Author is not responsible for any loss by edited game", }, used=[[ Tool used: @@ -161,7 +154,7 @@ Lib used: simple-love-lights[dylhunn] ]], support="Support Author", - group="Official QQ Group", + group="Official QQ Group(if not hacked):822023725", WidgetText={ main={ play="Play", @@ -239,7 +232,6 @@ Lib used: grid="Grid", center="Center", bg="Background", - bgspace="BG space", smooth="Smooth drop", lockFX="Lock FX level", dropFX="Drop FX level", @@ -263,6 +255,9 @@ Lib used: setting_control={ das="DAS",arr="ARR", sddas="softdrop DAS",sdarr="softdrop ARR", + ihs="Initial Hold", + irs="Initial Rotate", + ims="Initial Move", reset="Reset", back=BK, }, diff --git a/main.lua b/main.lua index a7aacbbb..e742d275 100644 --- a/main.lua +++ b/main.lua @@ -5,7 +5,7 @@ math.randomseed(os.time()*626) local love=love local ms,kb,tc=love.mouse,love.keyboard,love.touch -local gc,sys=love.graphics,love.system +local gc,sys,fs=love.graphics,love.system,love.filesystem local Timer=love.timer.getTime local int,rnd,max,min=math.floor,math.random,math.max,math.min local abs=math.abs @@ -20,7 +20,7 @@ local touching=nil--第一触摸ID local touchDist=nil joysticks={} -local devMode=0 +local devMode players={alive={},human=0} scr={x=0,y=0,w=0,h=0,rad=0,k=1}--x,y,wid,hei,radius,scale K local scr=scr @@ -37,8 +37,6 @@ mapCam={ zoomK=nil, --for auto zooming when enter/leave scene } -curBG="none" -voiceQueue={free=0} texts={} widget_sel=nil--selected widget object @@ -54,31 +52,35 @@ for i=1,20 do preField[i]={0,0,0,0,0,0,0,0,0,0}end --Game system Vars ------------------------------------------------------------- require("parts/list") -space=require("parts/space")local space=space +require("toolfunc") + setFont=require("parts/setfont") freeRow=require("parts/freeRow") blocks=require("parts/mino") +require("texture") +FILE=require("file") VIB=require("parts/vib") SFX=require("parts/sfx") BGM=require("parts/bgm") -require("parts/voice") - -Event_task=require("parts/task") +VOC=require("parts/voice") +sysFX=require("parts/sysFX") +TEXT=require("parts/text") +TASK=require("parts/task") +tickEvent=require("parts/tickEvent") AITemplate=require("parts/AITemplate") -require("parts/modes") +SCN=require("scene") skin=require("parts/skin") +BG=require("parts/bg") +IMG=require("parts/img") +SHADER=require("parts/shader") + -- require("parts/light") --- require("parts/shader") -scene=require("scene") +require("parts/modes") require("default_data") -require("class") -require("ai") -require("toolfunc") -require("file") -require("text") +require("parts/widget") +require("parts/ai") require("player") Widget=require("widgetList") -require("texture") local Tmr=require("timer") local Pnt=require("paint") --Modules @@ -97,7 +99,7 @@ if sys.getPowerInfo()~="unknown"then gc.setColor(1,1,1) gc.setLineWidth(2) gc.line(74,5,100,22) - else + elseif pow then if charging then gc.setColor(0,1,0) elseif pow>50 then gc.setColor(1,1,1) elseif pow>26 then gc.setColor(1,1,0) @@ -178,11 +180,15 @@ local touchDown,touchUp,touchMove={},{},{} local keyDown,keyUp={},{} local gamepadDown,gamepadUp={},{} -function mouseDown.load() - sceneTemp.skip=true +function mouseDown.load(x,y,k) + if k==1 then + sceneTemp.skip=true + end end -function keyDown.load() - sceneTemp.skip=true +function keyDown.load(k) + if k=="space"or k=="return"then + sceneTemp.skip=true + end end function touchDown.load() sceneTemp.skip=true @@ -190,24 +196,24 @@ end function mouseDown.intro(x,y,k) if k==2 then - VOICE("bye") - scene.back() + VOC.play("bye") + SCN.back() else - scene.push() - scene.swapTo("main") + SCN.push() + SCN.swapTo("main") end end function touchDown.intro(id,x,y) - scene.push() - scene.swapTo("main") + SCN.push() + SCN.swapTo("main") end function keyDown.intro(key) if key=="escape"then - VOICE("bye") - scene.back() + VOC.play("bye") + SCN.back() else - scene.push() - scene.swapTo("main") + SCN.push() + SCN.swapTo("main") end end @@ -298,19 +304,19 @@ function keyDown.mode(key) if key=="return"then if mapCam.sel then mapCam.keyCtrl=false - scene.push()loadGame(mapCam.sel) + SCN.push()loadGame(mapCam.sel) end elseif key=="escape"then if mapCam.sel then mapCam.sel=nil else - scene.back() + SCN.back() end elseif mapCam.sel==71 or mapCam.sel==72 then if key=="q"then - scene.push()scene.swapTo("draw") + SCN.push()SCN.swapTo("draw") elseif key=="e"then - scene.push()scene.swapTo("custom") + SCN.push()SCN.swapTo("custom") end end end @@ -335,7 +341,7 @@ function keyDown.music(key) BGM.stop() end elseif key=="escape"then - scene.back() + SCN.back() end end @@ -344,14 +350,14 @@ function keyDown.custom(key) if key=="left"then customSel[sel]=(customSel[sel]-2)%#customRange[customID[sel]]+1 if sel==12 then - curBG=customRange.bg[customSel[12]] + BG.set(customRange.bg[customSel[12]]) elseif sel==13 then BGM.play(customRange.bgm[customSel[13]]) end elseif key=="right"then customSel[sel]=customSel[sel]%#customRange[customID[sel]]+1 if sel==12 then - curBG=customRange.bg[customSel[sel]] + BG.set(customRange.bg[customSel[sel]]) elseif sel==13 then BGM.play(customRange.bgm[customSel[sel]]) end @@ -370,7 +376,7 @@ function keyDown.custom(key) elseif key=="5"then Widget.custom.set5.code() elseif key=="escape"then - scene.back() + SCN.back() end end @@ -439,7 +445,7 @@ function keyDown.draw(key) preField[sy][sx]=pen end elseif key=="escape"then - scene.back() + SCN.back() elseif key=="c"and kb.isDown("lctrl","rctrl")then copyBoard() elseif key=="v"and kb.isDown("lctrl","rctrl")then @@ -455,7 +461,7 @@ function mouseDown.setting_sound(x,y,k) sceneTemp.jump=10 local t=Timer()-sceneTemp.last if t>1 then - VOICE((t<1.5 or t>15)and"doubt"or rnd()<.8 and"happy"or"egg") + VOC.play((t<1.5 or t>15)and"doubt"or rnd()<.8 and"happy"or"egg") sceneTemp.last=Timer() if rnd()<.0626 then for i=1,#modes do @@ -467,8 +473,8 @@ function mouseDown.setting_sound(x,y,k) end end end - saveUnlock() - TEXT("DEVMODE:UNLOCKALL",640,360,50,"stretch",.6) + FILE.saveUnlock() + TEXT.show("DEVMODE:UNLOCKALL",640,360,50,"stretch",.6) end end end @@ -484,7 +490,7 @@ function keyDown.setting_key(key) s.kS=false SFX.play("finesseError",.5) else - scene.back() + SCN.back() end elseif s.kS then for l=1,8 do @@ -531,7 +537,7 @@ function gamepadDown.setting_key(key) s.jS=false SFX.play("finesseError",.5) else - scene.back() + SCN.back() end elseif s.jS then for l=9,16 do @@ -573,7 +579,7 @@ function gamepadDown.setting_key(key) end function mouseDown.setting_touch(x,y,k) - if k==2 then scene.back()end + if k==2 then SCN.back()end sceneTemp.sel=onVK_org(x,y)or sceneTemp.sel end function mouseMove.setting_touch(x,y,dx,dy) @@ -608,17 +614,17 @@ end function keyDown.pause(key) if key=="escape"then - scene.back() + SCN.back() elseif key=="space"then resumeGame() elseif key=="s"then - scene.push() - scene.swapTo("setting_sound") + SCN.push() + SCN.swapTo("setting_sound") elseif key=="r"then - clearTask("play") - updateStat() + TASK.clear("play") + mergeStat(stat,players[1].stat) resetGameData() - scene.swapTo("play","none") + SCN.swapTo("play","none") end end @@ -707,7 +713,7 @@ function keyUp.play(key) end end function gamepadDown.play(key) - if key=="back"then scene.back()return end + if key=="back"then SCN.back()return end local m=keyMap for p=1,players.human do for k=1,20 do @@ -734,6 +740,29 @@ function gamepadUp.play(key) end end end + +function touchDown.help(id,x,y) + local S=sceneTemp + if S.pw==0 then + S.pw=1 + else + if yS.x or S.pw%2==0 and x0 then print(mx,my)end - if scene.swapping then return end - if mouseDown[scene.cur]then - mouseDown[scene.cur](mx,my,k) + if devMode==1 then print(mx,my)end + if SCN.swapping then return end + if mouseDown[SCN.cur]then + mouseDown[SCN.cur](mx,my,k) elseif k==2 then - scene.back() + SCN.back() end if k==1 then if widget_sel then @@ -846,10 +875,10 @@ function love.mousemoved(x,y,dx,dy,t) if t then return end mouseShow=true mx,my=xOy:inverseTransformPoint(x,y) - if scene.swapping then return end + if SCN.swapping then return end dx,dy=dx/scr.k,dy/scr.k - if mouseMove[scene.cur]then - mouseMove[scene.cur](mx,my,dx,dy) + if mouseMove[SCN.cur]then + mouseMove[SCN.cur](mx,my,dx,dy) end if ms.isDown(1) then if widget_sel then @@ -857,7 +886,7 @@ function love.mousemoved(x,y,dx,dy,t) end else widget_sel=nil - for _,W in next,Widget[scene.cur]do + for _,W in next,Widget[SCN.cur]do if not(W.hide and W.hide())and W:isAbove(mx,my)then widget_sel=W return @@ -868,22 +897,22 @@ end function love.mousereleased(x,y,k,t,num) if t then return end mx,my=xOy:inverseTransformPoint(x,y) - if t or scene.swapping then return end - if mouseUp[scene.cur]then - mouseUp[scene.cur](mx,my,k) + if t or SCN.swapping then return end + if mouseUp[SCN.cur]then + mouseUp[SCN.cur](mx,my,k) end - if lastX and(mx-lastX)^2+(my-lastY)^2<26 and mouseClick[scene.cur]then - mouseClick[scene.cur](mx,my,k) + if lastX and(mx-lastX)^2+(my-lastY)^2<26 and mouseClick[SCN.cur]then + mouseClick[SCN.cur](mx,my,k) end end function love.wheelmoved(x,y) - if scene.swapping then return end - if wheelMoved[scene.cur]then wheelMoved[scene.cur](x,y)end + if SCN.swapping then return end + if wheelMoved[SCN.cur]then wheelMoved[SCN.cur](x,y)end end function love.touchpressed(id,x,y) mouseShow=false - if scene.swapping then return end + if SCN.swapping then return end if not touching then touching=id love.touchmoved(id,x,y,0,0) @@ -891,22 +920,22 @@ function love.touchpressed(id,x,y) touchDist=nil--reset distance x,y=xOy:inverseTransformPoint(x,y) lastX,lastY=x,y - if touchDown[scene.cur]then - touchDown[scene.cur](id,x,y) + if touchDown[SCN.cur]then + touchDown[SCN.cur](id,x,y) end end function love.touchmoved(id,x,y,dx,dy) - if scene.swapping then return end + if SCN.swapping then return end x,y=xOy:inverseTransformPoint(x,y) - if touchMove[scene.cur]then - touchMove[scene.cur](id,x,y,dx/scr.k,dy/scr.k) + if touchMove[SCN.cur]then + touchMove[SCN.cur](id,x,y,dx/scr.k,dy/scr.k) end if widget_sel then if touching then widgetDrag(widget_sel,x,y,dx,dy) end else - for _,W in next,Widget[scene.cur]do + for _,W in next,Widget[SCN.cur]do if not(W.hide and W.hide())and W:isAbove(x,y)then widget_sel=W return @@ -918,7 +947,7 @@ function love.touchmoved(id,x,y,dx,dy) end end function love.touchreleased(id,x,y) - if scene.swapping then return end + if SCN.swapping then return end x,y=xOy:inverseTransformPoint(x,y) if id==touching then touching=nil @@ -927,63 +956,76 @@ function love.touchreleased(id,x,y) end widget_sel=nil end - if touchUp[scene.cur]then - touchUp[scene.cur](id,x,y) + if touchUp[SCN.cur]then + touchUp[SCN.cur](id,x,y) end - if(x-lastX)^2+(y-lastY)^2<26 and touchClick[scene.cur]then - touchClick[scene.cur](x,y,k) + if(x-lastX)^2+(y-lastY)^2<26 and touchClick[SCN.cur]then + touchClick[SCN.cur](x,y,k) end end function love.keypressed(i) mouseShow=false - if scene.swapping then return end - if i=="f8"then devMode=0 - elseif i=="f9"then devMode=1 - elseif i=="f10"then devMode=2 - elseif i=="f11"then devMode=3 - elseif devMode==2 then - if i=="k"then - for i=1,8 do - local P=players.alive[rnd(#players.alive)] - if P~=players[1]then - P.lastRecv=players[1] - P:lose() + if SCN.swapping then return end + if devMode then + if i=="f5"then + print("DEBUG:") + + elseif i=="f8"then devMode=nil + elseif i=="f9"then devMode=1 + elseif i=="f10"then devMode=2 + elseif i=="f11"then devMode=3 + elseif i=="f12"then devMode=4 + elseif devMode==2 then + if i=="k"then + for i=1,8 do + local P=players.alive[rnd(#players.alive)] + if P~=players[1]then + P.lastRecv=players[1] + P:lose() + end + end + --Test code here + elseif i=="q"then + local W=widget_sel + if W then W:getInfo()end + elseif i=="f3"then + error("Techmino:挂了") + elseif i=="e"then + for k,v in next,_G do + print(k,v) + end + elseif i=="6"then + if kb.isDown("z")and kb.isDown("2")then + marking=nil + end + elseif widget_sel then + local W=widget_sel + if i=="left"then W.x=W.x-10 + elseif i=="right"then W.x=W.x+10 + elseif i=="up"then W.y=W.y-10 + elseif i=="down"then W.y=W.y+10 + elseif i==","then W.w=W.w-10 + elseif i=="."then W.w=W.w+10 + elseif i=="/"then W.h=W.h-10 + elseif i=="'"then W.h=W.h+10 + elseif i=="["then W.font=W.font-1 + elseif i=="]"then W.font=W.font+1 end end - --Test code here - elseif i=="q"then - local W=widget_sel - if W then W:getInfo()end - elseif i=="f3"then - error("Techmino:挂了") - elseif i=="e"then - for k,v in next,_G do - print(k,v) - end - elseif widget_sel then - local W=widget_sel - if i=="left"then W.x=W.x-10 - elseif i=="right"then W.x=W.x+10 - elseif i=="up"then W.y=W.y-10 - elseif i=="down"then W.y=W.y+10 - elseif i==","then W.w=W.w-10 - elseif i=="."then W.w=W.w+10 - elseif i=="/"then W.h=W.h-10 - elseif i=="'"then W.h=W.h+10 - elseif i=="["then W.font=W.font-1 - elseif i=="]"then W.font=W.font+1 - end end + elseif i=="f8"then + devMode=1 + TEXT.show("DEBUG ON",640,360,80,"fly",.8) else - if keyDown[scene.cur]then keyDown[scene.cur](i) - elseif i=="escape"then scene.back() + if keyDown[SCN.cur]then keyDown[SCN.cur](i) + elseif i=="escape"then SCN.back() else widgetControl_key(i) end end end function love.keyreleased(i) - if scene.swapping then return end - if keyUp[scene.cur]then keyUp[scene.cur](i)end + if SCN.swapping then return end + if keyUp[SCN.cur]then keyUp[SCN.cur](i)end end function love.joystickadded(JS) @@ -1007,35 +1049,35 @@ local keyMirror={ } function love.gamepadpressed(joystick,i) mouseShow=false - if scene.swapping then return end - if gamepadDown[scene.cur]then gamepadDown[scene.cur](i) - elseif keyDown[scene.cur]then keyDown[scene.cur](keyMirror[i]or i) - elseif i=="back"then scene.back() + if SCN.swapping then return end + if gamepadDown[SCN.cur]then gamepadDown[SCN.cur](i) + elseif keyDown[SCN.cur]then keyDown[SCN.cur](keyMirror[i]or i) + elseif i=="back"then SCN.back() else widgetControl_gamepad(i) end end function love.gamepadreleased(joystick,i) - if scene.swapping then return end - if gamepadUp[scene.cur]then gamepadUp[scene.cur](i) + if SCN.swapping then return end + if gamepadUp[SCN.cur]then gamepadUp[SCN.cur](i) end end --[[ function love.joystickpressed(JS,k) mouseShow=false - if scene.swapping then return end - if gamepadDown[scene.cur]then gamepadDown[scene.cur](i) - elseif keyDown[scene.cur]then keyDown[scene.cur](keyMirror[i]or i) - elseif i=="back"then scene.back() + if SCN.swapping then return end + if gamepadDown[SCN.cur]then gamepadDown[SCN.cur](i) + elseif keyDown[SCN.cur]then keyDown[SCN.cur](keyMirror[i]or i) + elseif i=="back"then SCN.back() else widgetControl_gamepad(i) end end function love.joystickreleased(JS,k) - if scene.swapping then return end - if gamepadUp[scene.cur]then gamepadUp[scene.cur](i) + if SCN.swapping then return end + if gamepadUp[SCN.cur]then gamepadUp[SCN.cur](i) end end function love.joystickaxis(JS,axis,val) - + end function love.joystickhat(JS,hat,dir) @@ -1058,185 +1100,33 @@ function love.resize(w,h) scr.x,scr.y=(w-h*16/9)*.5,0 end xOy=xOy:setTransformation(w*.5,h*.5,nil,scr.k,nil,640,360) - if setting.bgspace then space.new()end + BG.resize(w,h) end function love.focus(f) - if scene.cur=="play"and not f and setting.autoPause then pauseGame()end -end -local function love_update(dt) - if setting.bgspace then space.update()end - for i=#sysFX,1,-1 do - local S=sysFX[i] - S[2]=S[2]+1 - if S[2]==S[3]then - for i=i,#sysFX do - sysFX[i]=sysFX[i+1] - end - end - end - for i=#texts,1,-1 do - local t=texts[i] - t.c=t.c+t.spd - if t.stop then - if t.c>t.stop then - t.c=t.stop - end - end - if t.c>60 then - rem(texts,i) - end - end - if scene.swapping then - local S=scene.swap - S.time=S.time-1 - if S.time==S.mid then - scene.init(S.tar,scene.cur) - scene.cur=S.tar - for _,W in next,Widget[S.tar]do - W:reset() - end--重置控件 - widget_sel=nil - collectgarbage() - --此时场景切换 - end - if S.time==0 then - scene.swapping=false - end - end - local _=Tmr[scene.cur] - if _ then _(dt)end - for i=#Task,1,-1 do - local T=Task[i] - if T.code(T.P,T.data)then - for i=i,#Task do - Task[i]=Task[i+1] - end - end - end - for i=#voiceQueue,1,-1 do - local Q=voiceQueue[i] - if Q.s==0 then--闲置轨,自动删除多余 - if i>3 then - local _=voiceQueue - ::L:: - _[i]=_[i+1] - if _[i]then i=i+1 goto L end - end - elseif Q.s==1 then--等待转换 - Q[1]=getVoice(Q[1]) - Q[1]:setVolume(setting.voc*.1) - Q[1]:play() - Q.s=Q[2]and 2 or 4 - elseif Q.s==2 then--播放1,准备2 - if Q[1]:getDuration()-Q[1]:tell()<.08 then - Q[2]=getVoice(Q[2]) - Q[2]:setVolume(setting.voc*.1) - Q[2]:play() - Q.s=3 - end - elseif Q.s==3 then--12同时播放 - if not Q[1]:isPlaying()then - for i=1,#Q do - Q[i]=Q[i+1] - end - Q.s=Q[2]and 2 or 4 - end - elseif Q.s==4 then--最后播放 - if not Q[1].isPlaying(Q[1])then - Q[1]=nil - Q.s=0 - end - end - end - --更新控件 - for _,W in next,Widget[scene.cur]do - W:update() - end + if SCN.cur=="play"and not f and setting.autoPause then pauseGame()end end local scs={1,2,1,2,1,2,1,2,1,2,1.5,1.5,.5,2.5} +local devColor={ + color.white, + color.lightMagenta, + color.lightGreen, + color.lightBlue, +} local FPS=love.timer.getFPS -local function love_draw() - gc.discard()--SPEED UPUPUP! - Pnt.BG[setting.bg and curBG or"grey"]() - if setting.bgspace then - space.draw() - end - gc.push("transform") - gc.replaceTransform(xOy) - if Pnt[scene.cur]then Pnt[scene.cur]()end - for k,W in next,Widget[scene.cur]do - if not(W.hide and W.hide())then - W:draw() - end - end--Draw widgets - if mouseShow then - local r=Timer()*.5 - local R=int(r)%7+1 - local _=skin.libColor[setting.skin[R]] - gc.setColor(_[1],_[2],_[3],min(1-abs(1-r%1*2),.3)) - gc.draw(miniBlock[R],mx,my,Timer()%3.1416*4,20,20,scs[2*R]-.5,#blocks[R][0]-scs[2*R-1]+.5) - gc.setColor(1,1,1,.5)gc.circle("fill",mx,my,5) - gc.setColor(1,1,1)gc.circle("fill",mx,my,3) - end--Awesome mouse! - gc.setLineWidth(6) - for i=1,#sysFX do - local S=sysFX[i] - if S[1]==0 then - gc.setColor(1,1,1,1-S[2]/S[3]) - local r=(10*S[2]/S[3])^1.2 - gc.rectangle("line",S[4]-r,S[5]-r,S[6]+2*r,S[7]+2*r) - --按钮波纹 - elseif S[1]==1 then - gc.setColor(S[4],S[5],S[6],1-S[2]/S[3]) - gc.rectangle("fill",S[7],S[8],S[9],S[10],2) - --开关/滑条残影 - end - end--guiFXs - for i=1,#texts do - local t=texts[i] - local p=t.c - gc.setColor(1,1,1,p<.2 and p*5 or p<.8 and 1 or 5-p*5) - setFont(t.font) - t:draw() - end--Floating Texts - gc.pop() - gc.setColor(1,1,1) - if powerInfoCanvas then - gc.draw(powerInfoCanvas,0,0,0,scr.k) - end--Power Info - if scene.swapping then - local _=scene.swap - _.draw(_.time) - end--Scene swapping animation - setFont(15) - gc.setColor(1,1,1) - local _=scr.h-20 - gc.print(FPS(),5,_) - if devMode>0 then - gc.setColor(1,1,devMode==2 and .6 or 1) - gc.print("Cache used:"..gcinfo(),5,_-20) - gc.print("Free Row:"..freeRow.getCount(),5,_-40) - gc.print("Mouse:"..mx.." "..my,5,_-60) - gc.print("Voices:"..#voiceQueue,5,_-80) - gc.print("Tasks:"..#Task,5,_-100) - if devMode==3 then - love.timer.sleep(.5) - end - end--DEV info -end -love.draw,love.update=NULL,NULL - +love.draw,love.update=nil function love.run() local T=love.timer - local sleep=T.sleep - local lastFrame,lastFreshPow=T.getTime() + local STEP,GETΔ,WAIT=T.step,T.getDelta,T.sleep + local lastFrame=T.getTime() local lastFreshPow=lastFrame - local readyDrawFrame=0 + local FCT=0--framedraw counter local mini=love.window.isMinimized local PUMP,POLL=love.event.pump,love.event.poll love.resize(gc.getWidth(),gc.getHeight()) - scene.init("load")--Scene Launch + SCN.init("load")--Scene Launch + marking=true return function() + --EVENT PUMP() for N,a,b,c,d,e in POLL()do if love[N]then @@ -1246,22 +1136,87 @@ function love.run() return 1 end end - T.step() - love_update(T.getDelta()) + + --UPDATE + STEP()local dt=GETΔ() + TASK.update() + VOC.update() + BG.update(dt) + sysFX.update(dt) + TEXT.update(texts) + local _=Tmr[SCN.cur]if _ then _(dt)end + if SCN.swapping then SCN.swapUpdate()end + for _,W in next,Widget[SCN.cur]do + W:update() + end--更新控件 + + --DRAW if not mini()then - readyDrawFrame=readyDrawFrame+setting.frameMul - if readyDrawFrame>=100 then - readyDrawFrame=readyDrawFrame-100 - love_draw() + FCT=FCT+setting.frameMul + if FCT>=100 then + FCT=FCT-100 + + gc.discard()--SPEED UPUPUP! + BG.draw() + gc.push("transform") + gc.replaceTransform(xOy) + if Pnt[SCN.cur]then Pnt[SCN.cur]()end + for k,W in next,Widget[SCN.cur]do + if not(W.hide and W.hide())then + W:draw() + end + end--Draw widgets + if mouseShow then + local r=Timer()*.5 + local R=int(r)%7+1 + _=skin.libColor[setting.skin[R]] + gc.setColor(_[1],_[2],_[3],min(1-abs(1-r%1*2),.3)) + gc.draw(miniBlock[R],mx,my,Timer()%3.1416*4,20,20,scs[2*R]-.5,#blocks[R][0]-scs[2*R-1]+.5) + gc.setColor(1,1,1,.5)gc.circle("fill",mx,my,5) + gc.setColor(1,1,1)gc.circle("fill",mx,my,3) + end--Awesome mouse! + sysFX.draw() + for i=1,#texts do + local t=texts[i] + local p=t.c + gc.setColor(1,1,1,p<.2 and p*5 or p<.8 and 1 or 5-p*5) + setFont(t.font) + t:draw() + end--Floating Texts + gc.pop() + gc.setColor(1,1,1) + if powerInfoCanvas then + gc.draw(powerInfoCanvas,0,0,0,scr.k) + end--Power Info + if SCN.swapping then + _=SCN.swap + _.draw(_.time) + end--Scene swapping animation + setFont(15) + gc.setColor(1,1,1) + _=scr.h-20 + gc.print(FPS(),5,_) + if devMode then + gc.setColor(devColor[devMode]) + gc.print("Cache used:"..gcinfo(),5,_-20) + gc.print("Free Row:"..freeRow.getCount(),5,_-40) + gc.print("Mouse:"..mx.." "..my,5,_-60) + gc.print("Voices:"..VOC.getCount(),5,_-80) + gc.print("Tasks:"..TASK.getCount(),5,_-100) + if devMode==3 then love.timer.sleep(.26) + elseif devMode==4 then love.timer.sleep(.626) + end + end--DEV info + gc.present() end end - if Timer()-lastFrame<.058 then - sleep(.01) - end - while Timer()-lastFrame<.0159 do - sleep(.001) - end--try easily control 60FPS + + --FRAME TIME CTRL + if Timer()-lastFrame<.058 then WAIT(.01)end + while Timer()-lastFrame<.0159 do WAIT(.001)end + + --FRESH POWER lastFrame=Timer() if Timer()-lastFreshPow>1 then updatePowerInfo() @@ -1321,7 +1276,7 @@ function love.errorhandler(msg) setFont(38)gc.printf(text.errorMsg,100,200,1280-100) setFont(20) gc.print(system.."-"..gameVersion,100,660) - gc.print("scene:"..scene.cur,400,660) + gc.print("scene:"..SCN.cur,400,660) gc.printf(err[1],626,360,1260-626) gc.print("TRACEBACK",626,426) for i=4,#err-2 do @@ -1335,4 +1290,19 @@ function love.errorhandler(msg) end end -------------------------------------------------------------Reset data relied on setting -changeLanguage(setting.lang) \ No newline at end of file +changeLanguage(setting.lang) +if fs.getInfo("keymap.dat")then fs.remove("keymap.dat")end + +if fs.getInfo("unlock.dat")then FILE.loadUnlock()end +if fs.getInfo("data.dat")then FILE.loadData()end +if fs.getInfo("key.dat")then FILE.loadKeyMap()end +if fs.getInfo("virtualkey.dat")then FILE.loadVK()end +if fs.getInfo("setting.dat")then FILE.loadSetting() +else + -- firstRun=true + if system=="Android"or system=="iOS" then + setting.VKSwitch=true + setting.swap=false + setting.vib=2 + end +end \ No newline at end of file diff --git a/modes/GM.lua b/modes/GM.lua index e30ec537..97832ad1 100644 --- a/modes/GM.lua +++ b/modes/GM.lua @@ -53,14 +53,14 @@ return{ players[1].modeData.event="M7" end, mesDisp=function(P,dx,dy) - mDraw(drawableText.line,-81,300) - mDraw(drawableText.techrash,-81,420) - mDraw(drawableText.grade,-81,170) + mText(drawableText.line,-81,300) + mText(drawableText.techrash,-81,420) + mText(drawableText.grade,-81,170) setFont(55) mStr(P.modeData.event,-81,110) setFont(75) mStr(P.stat.row,-81,220) - mStr(P.stat.clear_4,-81,340) + mStr(P.stat.clear_S[4],-81,340) end, score=function(P)return{P.modeData.point,P.stat.score}end, scoreDisp=function(D)return sectionName[int(D[1]*.1)+1].." "..D[2]end, diff --git a/modes/attacker_hard.lua b/modes/attacker_hard.lua index 2c217bd3..3811f863 100644 --- a/modes/attacker_hard.lua +++ b/modes/attacker_hard.lua @@ -22,7 +22,7 @@ return{ freshLimit=15, pushSpeed=2, task=function(P) - if not(P.control and scene.cur=="play")then return end + if not(P.control and SCN.cur=="play")then return end if P.atkBuffer.sum==0 then local p=#P.atkBuffer+1 local B,D=P.atkBuffer,P.modeData @@ -60,8 +60,8 @@ return{ setFont(55) mStr(P.modeData.event,-81,200) mStr("24",-81,320) - mDraw(drawableText.wave,-81,260) - mDraw(drawableText.nextWave,-81,380) + mText(drawableText.wave,-81,260) + mText(drawableText.nextWave,-81,380) end, score=function(P)return{P.modeData.event,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end, diff --git a/modes/attacker_ultimate.lua b/modes/attacker_ultimate.lua index 7c574448..49a2d7a0 100644 --- a/modes/attacker_ultimate.lua +++ b/modes/attacker_ultimate.lua @@ -21,7 +21,7 @@ return{ fall=8, freshLimit=15, task=function(P) - if not(P.control and scene.cur=="play")then return end + if not(P.control and SCN.cur=="play")then return end if P.atkBuffer.sum<2 then local p=#P.atkBuffer+1 local B,D=P.atkBuffer,P.modeData @@ -73,8 +73,8 @@ return{ or P.modeData.event<20 and 25 or 28 ,-81,320) - mDraw(drawableText.wave,-81,260) - mDraw(drawableText.nextWave,-81,380) + mText(drawableText.wave,-81,260) + mText(drawableText.nextWave,-81,380) end, score=function(P)return{P.modeData.event,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end, diff --git a/modes/bigbang.lua b/modes/bigbang.lua index 538b5153..5bd898fc 100644 --- a/modes/bigbang.lua +++ b/modes/bigbang.lua @@ -4,7 +4,7 @@ local function getField() return F end local function newField(P) - + end return{ name={ diff --git a/modes/blind_easy.lua b/modes/blind_easy.lua index 92a123eb..cda20d9c 100644 --- a/modes/blind_easy.lua +++ b/modes/blind_easy.lua @@ -29,11 +29,11 @@ return{ newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) - mDraw(drawableText.line,-81,300) - mDraw(drawableText.techrash,-81,420) + mText(drawableText.line,-81,300) + mText(drawableText.techrash,-81,420) setFont(75) mStr(P.stat.row,-81,220) - mStr(P.stat.clear_4,-81,340) + mStr(P.stat.clear_S[4],-81,340) end, score=function(P)return{min(P.stat.row or 200),P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, diff --git a/modes/blind_hard.lua b/modes/blind_hard.lua index b12f6143..c443eb8f 100644 --- a/modes/blind_hard.lua +++ b/modes/blind_hard.lua @@ -31,11 +31,11 @@ return{ newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) - mDraw(drawableText.line,-81,300) - mDraw(drawableText.techrash,-81,420) + mText(drawableText.line,-81,300) + mText(drawableText.techrash,-81,420) setFont(75) mStr(P.stat.row,-81,220) - mStr(P.stat.clear_4,-81,340) + mStr(P.stat.clear_S[4],-81,340) end, score=function(P)return{min(P.stat.row or 200),P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, diff --git a/modes/blind_lunatic.lua b/modes/blind_lunatic.lua index 3a89d847..aa05207b 100644 --- a/modes/blind_lunatic.lua +++ b/modes/blind_lunatic.lua @@ -31,11 +31,11 @@ return{ newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) - mDraw(drawableText.line,-81,300) - mDraw(drawableText.techrash,-81,420) + mText(drawableText.line,-81,300) + mText(drawableText.techrash,-81,420) setFont(75) mStr(P.stat.row,-81,220) - mStr(P.stat.clear_4,-81,340) + mStr(P.stat.clear_S[4],-81,340) end, score=function(P)return{min(P.stat.row or 200),P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, diff --git a/modes/blind_normal.lua b/modes/blind_normal.lua index f33ba497..00ef1892 100644 --- a/modes/blind_normal.lua +++ b/modes/blind_normal.lua @@ -30,11 +30,11 @@ return{ newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) - mDraw(drawableText.line,-81,300) - mDraw(drawableText.techrash,-81,420) + mText(drawableText.line,-81,300) + mText(drawableText.techrash,-81,420) setFont(75) mStr(P.stat.row,-81,220) - mStr(P.stat.clear_4,-81,340) + mStr(P.stat.clear_S[4],-81,340) end, score=function(P)return{min(P.stat.row or 200),P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, @@ -49,8 +49,8 @@ return{ 3 else return - L>=150 and 3 or - L>=100 and 2 or + L>=126 and 3 or + L>=80 and 2 or L>=40 and 1 or L>=1 and 0 end diff --git a/modes/blind_ultimate.lua b/modes/blind_ultimate.lua index 81156bbf..b007491a 100644 --- a/modes/blind_ultimate.lua +++ b/modes/blind_ultimate.lua @@ -32,11 +32,11 @@ return{ newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) - mDraw(drawableText.line,-81,300) - mDraw(drawableText.techrash,-81,420) + mText(drawableText.line,-81,300) + mText(drawableText.techrash,-81,420) setFont(75) mStr(P.stat.row,-81,220) - mStr(P.stat.clear_4,-81,340) + mStr(P.stat.clear_S[4],-81,340) end, score=function(P)return{min(P.stat.row or 200),P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, diff --git a/modes/c4wtrain_lunatic.lua b/modes/c4wtrain_lunatic.lua index e881286d..eb1aea36 100644 --- a/modes/c4wtrain_lunatic.lua +++ b/modes/c4wtrain_lunatic.lua @@ -63,8 +63,8 @@ return{ setFont(45) mStr(P.combo,-81,310) mStr(P.modeData.point,-81,400) - mDraw(drawableText.combo,-81,358) - mDraw(drawableText.mxcmb,-81,450) + mText(drawableText.combo,-81,358) + mText(drawableText.mxcmb,-81,450) end, score=function(P)return{min(P.modeData.point,100),P.stat.time}end, scoreDisp=function(D)return D[1].." Combo "..toTime(D[2])end, diff --git a/modes/c4wtrain_normal.lua b/modes/c4wtrain_normal.lua index cbe58b6b..3c5ccc61 100644 --- a/modes/c4wtrain_normal.lua +++ b/modes/c4wtrain_normal.lua @@ -61,8 +61,8 @@ return{ setFont(45) mStr(P.combo,-81,310) mStr(P.modeData.point,-81,400) - mDraw(drawableText.combo,-81,358) - mDraw(drawableText.mxcmb,-81,450) + mText(drawableText.combo,-81,358) + mText(drawableText.mxcmb,-81,450) end, score=function(P)return{min(P.modeData.point,100),P.stat.time}end, scoreDisp=function(D)return D[1].." Combo "..toTime(D[2])end, diff --git a/modes/classic_fast.lua b/modes/classic_fast.lua index 1fd3e938..c0c319d2 100644 --- a/modes/classic_fast.lua +++ b/modes/classic_fast.lua @@ -12,7 +12,7 @@ local function check_LVup(P) end end end - + return{ name={ "高速经典", @@ -50,7 +50,7 @@ return{ setFont(75) local r=P.gameEnv.target*.1 mStr(r<11 and 18 or r<22 and r+8 or r==22 and"00"or r==23 and"0a"or format("%x",r*10-220),-81,210) - mDraw(drawableText.speedLV,-81,290) + mText(drawableText.speedLV,-81,290) setFont(45) mStr(P.stat.row,-81,320) mStr(P.gameEnv.target,-81,370) diff --git a/modes/custom_clear.lua b/modes/custom_clear.lua index db3cd353..1b6d8477 100644 --- a/modes/custom_clear.lua +++ b/modes/custom_clear.lua @@ -54,6 +54,7 @@ return{ P.visTime[y]=freeRow.get(t) for x=1,10 do P.field[y][x]=preField[y][x]end end + P.garbageBeneath=preField.h end modeEnv.bg=customRange.bg[customSel[12]] modeEnv.bgm=customRange.bgm[customSel[13]] @@ -62,7 +63,7 @@ return{ setFont(55) if P.gameEnv.puzzle or P.gameEnv.target>1e10 then mStr(P.stat.row,-81,225) - mDraw(drawableText.line,-81,290) + mText(drawableText.line,-81,290) else local R=P.gameEnv.target-P.stat.row mStr(R>=0 and R or 0,-81,240) diff --git a/modes/custom_puzzle.lua b/modes/custom_puzzle.lua index 44887d0d..cece818c 100644 --- a/modes/custom_puzzle.lua +++ b/modes/custom_puzzle.lua @@ -74,7 +74,7 @@ return{ local dx,dy=P.fieldOff.x,P.fieldOff.y setFont(55) mStr(P.stat.row,-81,225) - mDraw(drawableText.line,-81,290) + mText(drawableText.line,-81,290) if P.gameEnv.puzzle and P.modeData.event==0 then local m=puzzleMark for y=1,preField.h do for x=1,10 do diff --git a/modes/defender_lunatic.lua b/modes/defender_lunatic.lua index fa8d9869..74ab467d 100644 --- a/modes/defender_lunatic.lua +++ b/modes/defender_lunatic.lua @@ -19,10 +19,11 @@ return{ env={ drop=5,lock=60, fall=6, + next=3, freshLimit=15, pushSpeed=2, task=function(P) - if not(P.control and scene.cur=="play")then return end + if not(P.control and SCN.cur=="play")then return end P.modeData.counter=P.modeData.counter+1 local t=240-2*P.modeData.event if P.modeData.counter>=t then @@ -61,8 +62,8 @@ return{ setFont(55) mStr(P.modeData.event,-81,200) mStr(P.modeData.point,-81,320) - mDraw(drawableText.wave,-81,260) - mDraw(drawableText.rpm,-81,380) + mText(drawableText.wave,-81,260) + mText(drawableText.rpm,-81,380) end, score=function(P)return{P.modeData.event,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end, diff --git a/modes/defender_normal.lua b/modes/defender_normal.lua index cb955c23..9fc446e4 100644 --- a/modes/defender_normal.lua +++ b/modes/defender_normal.lua @@ -19,10 +19,11 @@ return{ env={ drop=30,lock=60, fall=10, + next=3, freshLimit=15, pushSpeed=1, task=function(P) - if not(P.control and scene.cur=="play")then return end + if not(P.control and SCN.cur=="play")then return end P.modeData.counter=P.modeData.counter+1 local t=360-P.modeData.event*2 if P.modeData.counter>=t then @@ -61,8 +62,8 @@ return{ setFont(55) mStr(P.modeData.event,-81,200) mStr(P.modeData.point,-81,320) - mDraw(drawableText.wave,-81,260) - mDraw(drawableText.rpm,-81,380) + mText(drawableText.wave,-81,260) + mText(drawableText.rpm,-81,380) end, score=function(P)return{P.modeData.event,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end, diff --git a/modes/dig_hard.lua b/modes/dig_hard.lua index c099027d..46916a10 100644 --- a/modes/dig_hard.lua +++ b/modes/dig_hard.lua @@ -21,11 +21,12 @@ return{ fall=20, freshLimit=15, task=function(P) - if not(P.control and scene.cur=="play")then return end + if not(P.control and SCN.cur=="play")then return end local D=P.modeData D.counter=D.counter+1 if D.counter>=max(90,180-D.event)then P:garbageRise(10,1,rnd(10)) + P.stat.recv=P.stat.recv+1 D.counter=0 D.event=D.event+1 end @@ -39,7 +40,7 @@ return{ mesDisp=function(P,dx,dy) setFont(65) mStr(P.modeData.event,-81,310) - mDraw(drawableText.wave,-81,375) + mText(drawableText.wave,-81,375) end, score=function(P)return{P.modeData.event,P.stat.row}end, scoreDisp=function(D)return D[1].." Waves "..D[2].." Lines"end, diff --git a/modes/dig_ultimate.lua b/modes/dig_ultimate.lua index e8fe6287..d0af6625 100644 --- a/modes/dig_ultimate.lua +++ b/modes/dig_ultimate.lua @@ -20,11 +20,12 @@ return{ drop=10,lock=30, freshLimit=15, task=function(P) - if not(P.control and scene.cur=="play")then return end + if not(P.control and SCN.cur=="play")then return end local D=P.modeData D.counter=D.counter+1 if D.counter>=max(30,80-.3*D.event)then P:garbageRise(11+D.event%3,1,rnd(10)) + P.stat.recv=P.stat.recv+1 D.counter=0 D.event=D.event+1 end @@ -38,7 +39,7 @@ return{ mesDisp=function(P,dx,dy) setFont(65) mStr(P.modeData.event,-81,310) - mDraw(drawableText.wave,-81,375) + mText(drawableText.wave,-81,375) end, score=function(P)return{P.modeData.event,P.stat.row}end, scoreDisp=function(D)return D[1].." Waves "..D[2].." Lines"end, diff --git a/modes/drought_lunatic.lua b/modes/drought_lunatic.lua index 90a23fb0..c6f12bfe 100644 --- a/modes/drought_lunatic.lua +++ b/modes/drought_lunatic.lua @@ -40,7 +40,7 @@ return{ local L=P.stat.row if L>=100 then local T=P.stat.time - return + return T<=70 and 5 or T<=110 and 4 or T<=160 and 3 or diff --git a/modes/drought_normal.lua b/modes/drought_normal.lua index 08ef70ec..89b898b5 100644 --- a/modes/drought_normal.lua +++ b/modes/drought_normal.lua @@ -40,7 +40,7 @@ return{ local L=P.stat.row if L>=100 then local T=P.stat.time - return + return T<=65 and 5 or T<=100 and 4 or T<=145 and 3 or diff --git a/modes/hotseat_2P.lua b/modes/hotseat_2P.lua index e58c59f0..5bbdea8e 100644 --- a/modes/hotseat_2P.lua +++ b/modes/hotseat_2P.lua @@ -10,9 +10,9 @@ return{ "2P", }, info={ - "友尽模式(非联网/局域网)", - "友尽模式(非联网/局域网)", - "End of friendship", + "不是联网也不是局域网", + "不是联网也不是局域网", + "No network\nlocal game only", }, color=color.white, env={ diff --git a/modes/hotseat_3P.lua b/modes/hotseat_3P.lua index ae74bea9..6634dc84 100644 --- a/modes/hotseat_3P.lua +++ b/modes/hotseat_3P.lua @@ -10,9 +10,9 @@ return{ "3P", }, info={ - "友尽模式(非联网/局域网)", - "友尽模式(非联网/局域网)", - "End of friendship", + "不是联网也不是局域网", + "不是联网也不是局域网", + "No network\nlocal game only", }, color=color.white, env={ diff --git a/modes/hotseat_4P.lua b/modes/hotseat_4P.lua index d16a9e98..058a98e2 100644 --- a/modes/hotseat_4P.lua +++ b/modes/hotseat_4P.lua @@ -10,9 +10,9 @@ return{ "4P", }, info={ - "友尽模式(非联网/局域网)", - "友尽模式(非联网/局域网)", - "End of friendship", + "不是联网也不是局域网", + "不是联网也不是局域网", + "No network\nlocal game only", }, color=color.white, env={ diff --git a/modes/infinite.lua b/modes/infinite.lua index 3dc143b5..5c87c72c 100644 --- a/modes/infinite.lua +++ b/modes/infinite.lua @@ -28,8 +28,8 @@ return{ setFont(45) mStr(P.stat.atk,-81,260) mStr(format("%.2f",P.stat.atk/P.stat.row),-81,370) - mDraw(drawableText.atk,-81,313) - mDraw(drawableText.eff,-81,425) + mText(drawableText.atk,-81,313) + mText(drawableText.eff,-81,425) end, score=function(P)return{P.stat.score}end, scoreDisp=function(D)return tostring(D[1])end, diff --git a/modes/infinite_dig.lua b/modes/infinite_dig.lua index c0b40e55..179ba32a 100644 --- a/modes/infinite_dig.lua +++ b/modes/infinite_dig.lua @@ -1,11 +1,8 @@ local format,rnd=string.format,math.random local function check_rise(P) - local L=P.clearedRow - for i=1,#L do - if L[i]<6 then - P:garbageRise(10,1,rnd(10)) - P.modeData.point=P.modeData.point+1 - end + while P.garbageBeneath<6 do + P:garbageRise(10,1,rnd(10)) + P.modeData.point=P.modeData.point+1 end end @@ -44,9 +41,9 @@ return{ mStr(P.modeData.point,-81,190) mStr(P.stat.atk,-81,310) mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420) - mDraw(drawableText.line,-81,243) - mDraw(drawableText.atk,-81,363) - mDraw(drawableText.eff,-81,475) + mText(drawableText.line,-81,243) + mText(drawableText.atk,-81,363) + mText(drawableText.eff,-81,475) end, score=function(P)return{P.modeData.point}end, scoreDisp=function(D)return D[1].." Lines"end, diff --git a/modes/marathon_hard.lua b/modes/marathon_hard.lua index 37657883..27d98863 100644 --- a/modes/marathon_hard.lua +++ b/modes/marathon_hard.lua @@ -34,7 +34,7 @@ return{ env={ noFly=true, mindas=7,minarr=1,minsdarr=1, - drop=.5,fall=30, + drop=.5,wait=8,fall=20, target=50,dropPiece=check, bg="strap",bgm="race", }, diff --git a/modes/marathon_normal.lua b/modes/marathon_normal.lua index afabe640..4c403855 100644 --- a/modes/marathon_normal.lua +++ b/modes/marathon_normal.lua @@ -33,7 +33,7 @@ return{ env={ noFly=true, minsdarr=1, - fall=30, + wait=8,fall=20, target=10,dropPiece=check_LVup, mindas=7,minarr=1,minsdarr=1, bg="strap",bgm="way", diff --git a/modes/master_adavnce.lua b/modes/master_adavnce.lua index e926badc..ae4f7ca2 100644 --- a/modes/master_adavnce.lua +++ b/modes/master_adavnce.lua @@ -16,7 +16,7 @@ local function score(P) elseif P.modeData.point>=100*(P.modeData.event+1)then local s=P.modeData.event+1;P.modeData.event=s--level up! local E=P.gameEnv - curBG=s==1 and"game3"or s==2 and"game4"or s==3 and"game5"or s==4 and"game6"or"game5" + BG.set(s==1 and"game3"or s==2 and"game4"or s==3 and"game5"or s==4 and"game6"or"game5") E.lock=death_lock[s] E.wait=death_wait[s] E.fall=death_fall[s] @@ -78,7 +78,7 @@ return{ getRank=function(P) local S=P.modeData.point if S==500 then - local L=P.stat.clear_4 + local L=P.stat.clear_S[4] return L>=30 and 5 or L>=25 and 4 or diff --git a/modes/master_beginner.lua b/modes/master_beginner.lua index cfc3b237..9e2e77bf 100644 --- a/modes/master_beginner.lua +++ b/modes/master_beginner.lua @@ -15,7 +15,7 @@ local function score(P) elseif P.modeData.point>=100*(P.modeData.event+1)then local s=P.modeData.event+1;P.modeData.event=s--level up! local E=P.gameEnv - curBG=s==1 and"game1"or s==2 and"game2"or s==3 and"game3"or "game4" + BG.set(s==1 and"game1"or s==2 and"game2"or s==3 and"game3"or "game4") E.lock=rush_lock[s] E.wait=rush_wait[s] E.fall=rush_fall[s] @@ -82,7 +82,7 @@ return{ getRank=function(P) local S=P.modeData.point if S==500 then - local L=P.stat.clear_4 + local L=P.stat.clear_S[4] return L>=30 and 5 or L>=25 and 4 or diff --git a/modes/pcchallenge_hard.lua b/modes/pcchallenge_hard.lua index dcfaa8ca..3cd7427b 100644 --- a/modes/pcchallenge_hard.lua +++ b/modes/pcchallenge_hard.lua @@ -35,7 +35,7 @@ return{ setFont(75) mStr(P.stat.pc,-81,350) - mDraw(drawableText.pc,-81,432) + mText(drawableText.pc,-81,432) gc.setColor(.5,.5,.5) if frame>179 then diff --git a/modes/pcchallenge_lunatic.lua b/modes/pcchallenge_lunatic.lua index f391b07b..2653063c 100644 --- a/modes/pcchallenge_lunatic.lua +++ b/modes/pcchallenge_lunatic.lua @@ -35,7 +35,7 @@ return{ setFont(75) mStr(P.stat.pc,-81,350) - mDraw(drawableText.pc,-81,432) + mText(drawableText.pc,-81,432) gc.setColor(.5,.5,.5) if frame>179 then diff --git a/modes/pcchallenge_normal.lua b/modes/pcchallenge_normal.lua index bf6d8a2c..09c27975 100644 --- a/modes/pcchallenge_normal.lua +++ b/modes/pcchallenge_normal.lua @@ -34,7 +34,7 @@ return{ setFont(75) mStr(P.stat.pc,-81,350) - mDraw(drawableText.pc,-81,432) + mText(drawableText.pc,-81,432) gc.setColor(.5,.5,.5) if frame>179 then diff --git a/modes/pctrain_lunatic.lua b/modes/pctrain_lunatic.lua index 3c880121..1296859a 100644 --- a/modes/pctrain_lunatic.lua +++ b/modes/pctrain_lunatic.lua @@ -6,6 +6,7 @@ local pc_fall={18,16,14,12,10,9,8,7,6} local PCbase=require("parts/PCbase") local PClist=require("parts/PClist") local function task_PC(P) + local _ P.modeData.counter=P.modeData.counter+1 if P.modeData.counter==21 then local t=P.stat.pc%2 @@ -13,7 +14,7 @@ local function task_PC(P) for i=1,4 do local r=freeRow.get(0) for j=1,10 do - local _=PCbase[4*t+i][j] + _=PCbase[4*t+i][j] r[j]=S[_]or 0 end ins(P.field,1,r) @@ -49,7 +50,7 @@ local function newPC(P) P:getNext(b) end P.modeData.counter=P.stat.piece==0 and 20 or 0 - newTask(task_PC,P) + TASK.new(task_PC,P) local s=P.stat.pc*.5 if int(s)==s and s>0 then P.gameEnv.drop=pc_drop[s]or 10 @@ -100,7 +101,7 @@ return{ mesDisp=function(P,dx,dy) setFont(75) mStr(P.stat.pc,-81,330) - mDraw(drawableText.pc,-81,412) + mText(drawableText.pc,-81,412) end, score=function(P)return{P.stat.pc,P.stat.time}end, scoreDisp=function(D)return D[1].." PCs "..toTime(D[2])end, diff --git a/modes/pctrain_normal.lua b/modes/pctrain_normal.lua index 18f5181e..0a24e7c5 100644 --- a/modes/pctrain_normal.lua +++ b/modes/pctrain_normal.lua @@ -3,6 +3,7 @@ local ins=table.insert local PCbase=require("parts/PCbase") local PClist=require("parts/PClist") local function task_PC(P) + local _ P.modeData.counter=P.modeData.counter+1 if P.modeData.counter==21 then local t=P.stat.pc%2 @@ -10,7 +11,7 @@ local function task_PC(P) for i=1,4 do local r=freeRow.get(0) for j=1,10 do - local _=PCbase[4*t+i][j] + _=PCbase[4*t+i][j] r[j]=S[_]or 0 end ins(P.field,1,r) @@ -45,7 +46,7 @@ local function newPC(P) P:getNext(b) end P.modeData.counter=P.stat.piece==0 and 20 or 0 - newTask(task_PC,P) + TASK.new(task_PC,P) end end return{ @@ -83,7 +84,7 @@ return{ mesDisp=function(P,dx,dy) setFont(75) mStr(P.stat.pc,-81,330) - mDraw(drawableText.pc,-81,412) + mText(drawableText.pc,-81,412) end, score=function(P)return{P.stat.pc,P.stat.time}end, scoreDisp=function(D)return D[1].." PCs "..toTime(D[2])end, diff --git a/modes/round_1.lua b/modes/round_1.lua index ba86e9d2..095d3e45 100644 --- a/modes/round_1.lua +++ b/modes/round_1.lua @@ -46,7 +46,7 @@ return{ if P.result=="WIN"then local T=P.stat.piece return - T<=20 and 5 or + T<=23 and 5 or T<=26 and 4 or T<=40 and 3 or T<=60 and 2 or diff --git a/modes/sprint_10.lua b/modes/sprint_10.lua index 0b71f6fb..ef105979 100644 --- a/modes/sprint_10.lua +++ b/modes/sprint_10.lua @@ -43,7 +43,7 @@ return{ getRank=function(P) if P.stat.row<10 then return end local T=P.stat.time - return + return T<=7 and 5 or T<=10 and 4 or T<=25 and 3 or diff --git a/modes/sprint_100.lua b/modes/sprint_100.lua index 552abd30..155c60ac 100644 --- a/modes/sprint_100.lua +++ b/modes/sprint_100.lua @@ -43,7 +43,7 @@ return{ getRank=function(P) if P.stat.row<100 then return end local T=P.stat.time - return + return T<=62 and 5 or T<=90 and 4 or T<=130 and 3 or diff --git a/modes/sprint_1000.lua b/modes/sprint_1000.lua index 5743c1fd..90400dd0 100644 --- a/modes/sprint_1000.lua +++ b/modes/sprint_1000.lua @@ -43,7 +43,7 @@ return{ getRank=function(P) if P.stat.row<1000 then return end local T=P.stat.time - return + return T<=626 and 5 or T<=1000 and 4 or T<=1400 and 3 or @@ -51,4 +51,4 @@ return{ T<=3000 and 1 or 0 end, -} \ No newline at end of file +} \ No newline at end of file diff --git a/modes/sprint_20.lua b/modes/sprint_20.lua index f46e8a84..046c327f 100644 --- a/modes/sprint_20.lua +++ b/modes/sprint_20.lua @@ -43,7 +43,7 @@ return{ getRank=function(P) if P.stat.row<20 then return end local T=P.stat.time - return + return T<=13 and 5 or T<=18 and 4 or T<=45 and 3 or diff --git a/modes/sprint_40.lua b/modes/sprint_40.lua index f5e4f9b1..5df7aea9 100644 --- a/modes/sprint_40.lua +++ b/modes/sprint_40.lua @@ -43,7 +43,7 @@ return{ getRank=function(P) if P.stat.row<40 then return end local T=P.stat.time - return + return T<=26 and 5 or T<=32.6 and 4 or T<=40 and 3 or diff --git a/modes/sprint_400.lua b/modes/sprint_400.lua index 190fc43d..8af102aa 100644 --- a/modes/sprint_400.lua +++ b/modes/sprint_400.lua @@ -43,7 +43,7 @@ return{ getRank=function(P) if P.stat.row<400 then return end local T=P.stat.time - return + return T<=255 and 5 or T<=330 and 4 or T<=420 and 3 or diff --git a/modes/survivor_easy.lua b/modes/survivor_easy.lua index 8647010b..64e28352 100644 --- a/modes/survivor_easy.lua +++ b/modes/survivor_easy.lua @@ -20,7 +20,7 @@ return{ drop=30,lock=45, freshLimit=10, task=function(P) - if not(P.control and scene.cur=="play")then return end + if not(P.control and SCN.cur=="play")then return end P.modeData.counter=P.modeData.counter+1 if P.modeData.counter>=max(60,150-2*P.modeData.event)and P.atkBuffer.sum<4 then P.atkBuffer[#P.atkBuffer+1]={pos=rnd(10),amount=1,countdown=30,cd0=30,time=0,sent=false,lv=1} @@ -40,7 +40,7 @@ return{ mesDisp=function(P,dx,dy) setFont(65) mStr(P.modeData.event,-81,310) - mDraw(drawableText.wave,-81,375) + mText(drawableText.wave,-81,375) end, score=function(P)return{P.modeData.event,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end, diff --git a/modes/survivor_hard.lua b/modes/survivor_hard.lua index a331a56f..9f7e4d4d 100644 --- a/modes/survivor_hard.lua +++ b/modes/survivor_hard.lua @@ -20,16 +20,17 @@ return{ drop=30,lock=45, freshLimit=10, task=function(P) - if not(P.control and scene.cur=="play")then return end + if not(P.control and SCN.cur=="play")then return end P.modeData.counter=P.modeData.counter+1 - if P.modeData.counter>=max(60,180-2*P.modeData.event)and P.atkBuffer.sum<15 then - P.atkBuffer[#P.atkBuffer+1]= + local B=P.atkBuffer + if P.modeData.counter>=max(60,180-2*P.modeData.event)and B.sum<15 then + B[#B+1]= P.modeData.event%3<2 and {pos=rnd(10),amount=1,countdown=0,cd0=0,time=0,sent=false,lv=1} or {pos=rnd(10),amount=3,countdown=60,cd0=60,time=0,sent=false,lv=2} local R=(P.modeData.event%3<2 and 1 or 3) - P.atkBuffer.sum=P.atkBuffer.sum+R + B.sum=B.sum+R P.stat.recv=P.stat.recv+R if P.modeData.event==60 then P:showTextF(text.maxspeed,0,-140,100,"appear",.6)end P.modeData.counter=0 @@ -45,7 +46,7 @@ return{ mesDisp=function(P,dx,dy) setFont(65) mStr(P.modeData.event,-81,310) - mDraw(drawableText.wave,-81,375) + mText(drawableText.wave,-81,375) end, score=function(P)return{P.modeData.event,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end, diff --git a/modes/survivor_lunatic.lua b/modes/survivor_lunatic.lua index e8673b07..288c90f5 100644 --- a/modes/survivor_lunatic.lua +++ b/modes/survivor_lunatic.lua @@ -20,7 +20,7 @@ return{ drop=30,lock=45, freshLimit=10, task=function(P) - if not(P.control and scene.cur=="play")then return end + if not(P.control and SCN.cur=="play")then return end P.modeData.counter=P.modeData.counter+1 if P.modeData.counter>=max(60,150-P.modeData.event)and P.atkBuffer.sum<20 then local t=max(60,90-P.modeData.event) @@ -41,7 +41,7 @@ return{ mesDisp=function(P,dx,dy) setFont(65) mStr(P.modeData.event,-81,310) - mDraw(drawableText.wave,-81,375) + mText(drawableText.wave,-81,375) end, score=function(P)return{P.modeData.event,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end, diff --git a/modes/survivor_normal.lua b/modes/survivor_normal.lua index 841c7a94..2639a33e 100644 --- a/modes/survivor_normal.lua +++ b/modes/survivor_normal.lua @@ -20,7 +20,7 @@ return{ drop=30,lock=45, freshLimit=10, task=function(P) - if not(P.control and scene.cur=="play")then return end + if not(P.control and SCN.cur=="play")then return end P.modeData.counter=P.modeData.counter+1 if P.modeData.counter>=max(90,180-2*P.modeData.event)and P.atkBuffer.sum<8 then local d=P.modeData.event+1 @@ -45,7 +45,7 @@ return{ mesDisp=function(P,dx,dy) setFont(65) mStr(P.modeData.event,-81,310) - mDraw(drawableText.wave,-81,375) + mText(drawableText.wave,-81,375) end, score=function(P)return{P.modeData.event,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end, diff --git a/modes/survivor_ultimate.lua b/modes/survivor_ultimate.lua index d0a6d73e..1834a92f 100644 --- a/modes/survivor_ultimate.lua +++ b/modes/survivor_ultimate.lua @@ -22,7 +22,7 @@ return{ freshLimit=15, pushSpeed=2, task=function(P) - if not(P.control and scene.cur=="play")then return end + if not(P.control and SCN.cur=="play")then return end P.modeData.counter=P.modeData.counter+1 if P.modeData.counter>=max(300,600-10*P.modeData.event)and P.atkBuffer.sum<20 then local t=max(300,480-12*P.modeData.event) @@ -47,7 +47,7 @@ return{ mesDisp=function(P,dx,dy) setFont(65) mStr(P.modeData.event,-81,310) - mDraw(drawableText.wave,-81,375) + mText(drawableText.wave,-81,375) end, score=function(P)return{P.modeData.event,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end, diff --git a/modes/tech_hard+.lua b/modes/tech_hard+.lua index a90c856a..8a2b1dca 100644 --- a/modes/tech_hard+.lua +++ b/modes/tech_hard+.lua @@ -36,8 +36,8 @@ return{ setFont(45) mStr(P.stat.atk,-81,310) mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420) - mDraw(drawableText.atk,-81,363) - mDraw(drawableText.eff,-81,475) + mText(drawableText.atk,-81,363) + mText(drawableText.eff,-81,475) end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, diff --git a/modes/tech_hard.lua b/modes/tech_hard.lua index ea5a185d..e5c368a9 100644 --- a/modes/tech_hard.lua +++ b/modes/tech_hard.lua @@ -36,8 +36,8 @@ return{ setFont(45) mStr(P.stat.atk,-81,310) mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420) - mDraw(drawableText.atk,-81,363) - mDraw(drawableText.eff,-81,475) + mText(drawableText.atk,-81,363) + mText(drawableText.eff,-81,475) end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, diff --git a/modes/tech_lunatic+.lua b/modes/tech_lunatic+.lua index e3bee591..0bc57e2d 100644 --- a/modes/tech_lunatic+.lua +++ b/modes/tech_lunatic+.lua @@ -36,8 +36,8 @@ return{ setFont(45) mStr(P.stat.atk,-81,310) mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420) - mDraw(drawableText.atk,-81,363) - mDraw(drawableText.eff,-81,475) + mText(drawableText.atk,-81,363) + mText(drawableText.eff,-81,475) end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, diff --git a/modes/tech_lunatic.lua b/modes/tech_lunatic.lua index 3902e76b..6a4836ad 100644 --- a/modes/tech_lunatic.lua +++ b/modes/tech_lunatic.lua @@ -36,8 +36,8 @@ return{ setFont(45) mStr(P.stat.atk,-81,310) mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420) - mDraw(drawableText.atk,-81,363) - mDraw(drawableText.eff,-81,475) + mText(drawableText.atk,-81,363) + mText(drawableText.eff,-81,475) end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, diff --git a/modes/tech_normal+.lua b/modes/tech_normal+.lua index 196215a5..187e8839 100644 --- a/modes/tech_normal+.lua +++ b/modes/tech_normal+.lua @@ -36,8 +36,8 @@ return{ setFont(45) mStr(P.stat.atk,-81,310) mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420) - mDraw(drawableText.atk,-81,363) - mDraw(drawableText.eff,-81,475) + mText(drawableText.atk,-81,363) + mText(drawableText.eff,-81,475) end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, diff --git a/modes/tech_normal.lua b/modes/tech_normal.lua index 3b476097..60657482 100644 --- a/modes/tech_normal.lua +++ b/modes/tech_normal.lua @@ -36,8 +36,8 @@ return{ setFont(45) mStr(P.stat.atk,-81,310) mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420) - mDraw(drawableText.atk,-81,363) - mDraw(drawableText.eff,-81,475) + mText(drawableText.atk,-81,363) + mText(drawableText.eff,-81,475) end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, diff --git a/modes/tech_ultimate+.lua b/modes/tech_ultimate+.lua index 1cceb62a..6409c1f9 100644 --- a/modes/tech_ultimate+.lua +++ b/modes/tech_ultimate+.lua @@ -39,8 +39,8 @@ return{ setFont(45) mStr(P.stat.atk,-81,310) mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420) - mDraw(drawableText.atk,-81,363) - mDraw(drawableText.eff,-81,475) + mText(drawableText.atk,-81,363) + mText(drawableText.eff,-81,475) end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, diff --git a/modes/tech_ultimate.lua b/modes/tech_ultimate.lua index 767ea75a..9f74b379 100644 --- a/modes/tech_ultimate.lua +++ b/modes/tech_ultimate.lua @@ -39,8 +39,8 @@ return{ setFont(45) mStr(P.stat.atk,-81,310) mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420) - mDraw(drawableText.atk,-81,363) - mDraw(drawableText.eff,-81,475) + mText(drawableText.atk,-81,363) + mText(drawableText.eff,-81,475) end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, diff --git a/modes/techmino49_easy.lua b/modes/techmino49_easy.lua index b749fbf8..5c5a58a8 100644 --- a/modes/techmino49_easy.lua +++ b/modes/techmino49_easy.lua @@ -83,7 +83,7 @@ return{ setFont(25) gc.print(powerUp[P.strength],-132,290) for i=1,P.strength do - gc.draw(badgeIcon,16*i-138,260) + gc.draw(IMG.badgeIcon,16*i-138,260) end end, score=function(P)return{P.modeData.event,P.modeData.point}end, diff --git a/modes/techmino49_hard.lua b/modes/techmino49_hard.lua index 21780265..ee11e5cc 100644 --- a/modes/techmino49_hard.lua +++ b/modes/techmino49_hard.lua @@ -83,7 +83,7 @@ return{ setFont(25) gc.print(powerUp[P.strength],-132,290) for i=1,P.strength do - gc.draw(badgeIcon,16*i-138,260) + gc.draw(IMG.badgeIcon,16*i-138,260) end end, score=function(P)return{P.modeData.event,P.modeData.point}end, diff --git a/modes/techmino49_ultimate.lua b/modes/techmino49_ultimate.lua index 658b0e29..a7174b0e 100644 --- a/modes/techmino49_ultimate.lua +++ b/modes/techmino49_ultimate.lua @@ -83,7 +83,7 @@ return{ setFont(25) gc.print(powerUp[P.strength],-132,290) for i=1,P.strength do - gc.draw(badgeIcon,16*i-138,260) + gc.draw(IMG.badgeIcon,16*i-138,260) end end, score=function(P)return{P.modeData.event,P.modeData.point}end, diff --git a/modes/techmino99_easy.lua b/modes/techmino99_easy.lua index 58c4ce5f..386599cb 100644 --- a/modes/techmino99_easy.lua +++ b/modes/techmino99_easy.lua @@ -83,7 +83,7 @@ return{ setFont(25) gc.print(powerUp[P.strength],-132,290) for i=1,P.strength do - gc.draw(badgeIcon,16*i-138,260) + gc.draw(IMG.badgeIcon,16*i-138,260) end end, score=function(P)return{P.modeData.event,P.modeData.point}end, diff --git a/modes/techmino99_hard.lua b/modes/techmino99_hard.lua index e5525aa5..33c0ee4e 100644 --- a/modes/techmino99_hard.lua +++ b/modes/techmino99_hard.lua @@ -83,7 +83,7 @@ return{ setFont(25) gc.print(powerUp[P.strength],-132,290) for i=1,P.strength do - gc.draw(badgeIcon,16*i-138,260) + gc.draw(IMG.badgeIcon,16*i-138,260) end end, score=function(P)return{P.modeData.event,P.modeData.point}end, diff --git a/modes/techmino99_ultimate.lua b/modes/techmino99_ultimate.lua index af9d8923..3a221f29 100644 --- a/modes/techmino99_ultimate.lua +++ b/modes/techmino99_ultimate.lua @@ -83,7 +83,7 @@ return{ setFont(25) gc.print(powerUp[P.strength],-132,290) for i=1,P.strength do - gc.draw(badgeIcon,16*i-138,260) + gc.draw(IMG.badgeIcon,16*i-138,260) end end, score=function(P)return{P.modeData.event,P.modeData.point}end, diff --git a/modes/tsd_easy.lua b/modes/tsd_easy.lua index 34758c8c..9a9a408e 100644 --- a/modes/tsd_easy.lua +++ b/modes/tsd_easy.lua @@ -38,7 +38,7 @@ return{ mesDisp=function(P,dx,dy) setFont(75) mStr(P.modeData.event,-81,330) - mDraw(drawableText.tsd,-81,407) + mText(drawableText.tsd,-81,407) end, score=function(P)return{P.modeData.event,P.stat.time}end, scoreDisp=function(D)return D[1].."TSD "..toTime(D[2])end, diff --git a/modes/tsd_hard.lua b/modes/tsd_hard.lua index f97aded9..52889164 100644 --- a/modes/tsd_hard.lua +++ b/modes/tsd_hard.lua @@ -39,7 +39,7 @@ return{ mesDisp=function(P,dx,dy) setFont(75) mStr(P.modeData.event,-81,330) - mDraw(drawableText.tsd,-81,407) + mText(drawableText.tsd,-81,407) end, score=function(P)return{P.modeData.event,P.stat.time}end, scoreDisp=function(D)return D[1].."TSD "..toTime(D[2])end, diff --git a/modes/tsd_ultimate.lua b/modes/tsd_ultimate.lua index b5bc51c5..722c1ca8 100644 --- a/modes/tsd_ultimate.lua +++ b/modes/tsd_ultimate.lua @@ -39,7 +39,7 @@ return{ mesDisp=function(P,dx,dy) setFont(75) mStr(P.modeData.event,-81,330) - mDraw(drawableText.tsd,-81,407) + mText(drawableText.tsd,-81,407) end, score=function(P)return{P.modeData.event,P.stat.time}end, scoreDisp=function(D)return D[1].."TSD "..toTime(D[2])end, diff --git a/paint.lua b/paint.lua index d285cc41..ed6f66a4 100644 --- a/paint.lua +++ b/paint.lua @@ -16,6 +16,9 @@ local modeRankColor={ color.lightCyan, --Rank5 color.purple, --Special } +local rankString={ + "C","B","A","S","SS", +} local miniTitle_rect={ {2,0,5,1},{4,1,1,6}, {9,0,4,1},{9,3,4,1},{9,6,4,1},{8,0,1,7}, @@ -35,7 +38,6 @@ end FX_attack={}--Attack beam FX_badge={}--Badge thrown -sysFX={} local function drawAtkPointer(x,y) local t=sin(Timer()*20) gc.setColor(.2,.7+t*.2,1,.6+t*.4) @@ -61,6 +63,7 @@ end local function drawVirtualkey() local V=virtualkey local a=setting.VKAlpha*.1 + local _ if setting.VKIcon then for i=1,#V do if V[i].ava then @@ -68,7 +71,7 @@ local function drawVirtualkey() gc.setColor(1,1,1,a) gc.setLineWidth(B.r*.07) gc.circle("line",B.x,B.y,B.r)--Button outline - local _=V[i].pressTime + _=V[i].pressTime gc.draw(VKIcon[i],B.x,B.y,nil,B.r*.026+_*.08,nil,18,18)--icon if _>0 then gc.setColor(1,1,1,a*_*.08) @@ -84,7 +87,7 @@ local function drawVirtualkey() gc.setColor(1,1,1,a) gc.setLineWidth(B.r*.07) gc.circle("line",B.x,B.y,B.r) - local _=V[i].pressTime + _=V[i].pressTime if _>0 then gc.setColor(1,1,1,a*_*.08) gc.circle("fill",B.x,B.y,B.r*.94) @@ -95,107 +98,28 @@ local function drawVirtualkey() end end -local Pnt={BG={}} -function Pnt.BG.none() - gc.clear(.15,.15,.15) -end -function Pnt.BG.grey() - gc.clear(.3,.3,.3) -end -function Pnt.BG.glow() - local t=(sin(Timer()*.5)+sin(Timer()*.7)+sin(Timer()*.9+1)+sin(Timer()*1.5)+sin(Timer()*2+10))*.1 - gc.clear(t,t,t) -end -function Pnt.BG.rgb() - gc.clear( - sin(Timer()*1.2)*.15+.2, - sin(Timer()*1.5)*.15+.2, - sin(Timer()*1.9)*.15+.2 - ) -end -function Pnt.BG.strap() - gc.setColor(.5,.5,.5) - local x=Timer()%16*-64 - ::L:: - gc.draw(background2,x,0,nil,8,scr.h) - x=x+1024--image width*8 - if x=80 then + gc.setColor(1,1,1,.5+sin((T-95)/30*3.142)*.5) + mText(drawableText.anykey,640,615+sin(Timer()*3)*5) + end end function Pnt.main() gc.setColor(1,1,1) - gc.draw(coloredTitleImage,60,30,nil,1.3) + gc.draw(IMG.coloredTitleImage,60,30,nil,1.3) setFont(30) gc.print(gameVersion,70,125) gc.print(system,610,100) players[1]:draw() end function Pnt.mode() + local _ local cam=mapCam gc.push("transform") gc.translate(640,360) @@ -233,10 +162,8 @@ function Pnt.mode() gc.setColor(1,1,1,.2) for _=1,#M.unlock do local m=M.unlock[_] - if R[m]then - m=MM[m] - gc.line(M.x,M.y,m.x,m.y) - end + m=MM[m] + gc.line(M.x,M.y,m.x,m.y) end local S=M.size @@ -272,6 +199,15 @@ function Pnt.mode() gc.circle("line",M.x,M.y,S,8) end end + _=drawableText[rankString[modeRanks[M.id]]] + if _ then + local dx,dy=6.26*sin(Timer()*1.26+M.id),12.6*sin(Timer()+M.id) + gc.setColor(0,0,0,.5) + mDraw(_,M.x+dx*1.5,M.y+dy*1.5) + gc.setColor(1,1,1,.8) + mDraw(_,M.x+dx,M.y+dy) + end + --[[ if M.icon then local i=M.icon local l=i:getWidth()*.5 @@ -284,6 +220,7 @@ function Pnt.mode() gc.setColor(1,1,1) gc.draw(i,M.x,M.y,nil,k,nil,l,l) end + ]] end end gc.pop() @@ -298,10 +235,10 @@ function Pnt.mode() gc.setColor(1,1,1) setFont(28)gc.printf(M.info[lang],920,110,360,"center") if M.slowMark then - gc.draw(ctrlSpeedLimit,1230,50,nil,.4) + gc.draw(IMG.ctrlSpeedLimit,1230,50,nil,.4) end if M.score then - mDraw(drawableText.highScore,1100,240) + mText(drawableText.highScore,1100,240) gc.setColor(.4,.4,.4,.8) gc.rectangle("fill",940,290,320,280)--Highscore board local L=M.records @@ -318,11 +255,11 @@ function Pnt.mode() setFont(int(26-s*.4)) gc.print(t,955,275+dy+25*i) setFont(10) - local _=L[i].date + _=L[i].date if _ then gc.print(_,1155,284+25*i)end end else - mDraw(drawableText.noScore,1100,370) + mText(drawableText.noScore,1100,370) end end end @@ -343,7 +280,7 @@ function Pnt.music() for i=1,#musicID do gc.print(musicID[i],50,90+30*i) end - gc.draw(titleImage,640,310,nil,1.5,nil,206,35) + gc.draw(IMG.titleImage,640,310,nil,1.5,nil,206,35) if BGM.nowPlay then setFont(45) gc.setColor(sin(Timer()*.5)*.2+.8,sin(Timer()*.7)*.2+.8,sin(Timer())*.2+.8) @@ -351,7 +288,7 @@ function Pnt.music() local t=-Timer()%2.3/2 if t<1 then gc.setColor(1,1,1,t) - gc.draw(coloredTitleImage,640,310,nil,1.5+.1-.1*t,1.5+.3-.3*t,206,35) + gc.draw(IMG.coloredTitleImage,640,310,nil,1.5+.1-.1*t,1.5+.3-.3*t,206,35) end end end @@ -413,8 +350,9 @@ function Pnt.draw() gc.draw(drawableText.question,1040,430) end setFont(40) + local _ for i=1,7 do - local _=setting.skin[i] + _=setting.skin[i] gc.setColor(skin.libColor[_]) mStr(text.block[i],500+65*_,65) end @@ -453,12 +391,12 @@ function Pnt.play() local b=FX_badge[i] gc.setColor(1,1,1,b.t<10 and b.t*.1 or b.t<50 and 1 or(60-b.t)*.1) if b.t<10 then - gc.draw(badgeIcon,b[1]-14,b[2]-14) + gc.draw(IMG.badgeIcon,b[1]-14,b[2]-14) elseif b.t<50 then local t=((b.t-10)*.025)t=(3-2*t)*t*t - gc.draw(badgeIcon,b[1]*(1-t)+b[3]*t-14,b[2]*(1-t)+b[4]*t-14) + gc.draw(IMG.badgeIcon,b[1]*(1-t)+b[3]*t-14,b[2]*(1-t)+b[4]*t-14) else - gc.draw(badgeIcon,b[3]-14,b[4]-14) + gc.draw(IMG.badgeIcon,b[3]-14,b[4]-14) end end local P=players[1] @@ -487,58 +425,111 @@ function Pnt.play() end function Pnt.pause() Pnt.play() - local T=sceneTemp.timer*.02 - local t=T - if gameResult then t=t*.6 end - gc.setColor(.15,.15,.15,t) + local S=sceneTemp + local T=S.timer*.02 + + --Dark BG + local _=T + if gameResult then _=_*.6 end + gc.setColor(.15,.15,.15,_) gc.push("transform") gc.origin() gc.rectangle("fill",0,0,scr.w,scr.h) gc.pop() + + --Pause Info setFont(25) if pauseCount>0 then gc.setColor(1,.4,.4,T) - gc.print(text.pauseCount..":["..pauseCount.."] "..format("%.2f",pauseTime).."s",110,150) + gc.print(text.pauseCount..":["..pauseCount.."] "..format("%.2f",pauseTime).."s",70,100) end + gc.setColor(1,1,1,T) - for i=1,7 do - gc.print(text.pauseStat[i],95,30*i+310) - gc.print(sceneTemp[i],305,30*i+310) - end - for i=8,14 do - gc.print(text.pauseStat[i],845,30*i+100) - gc.print(sceneTemp[i],1050,30*i+100) - end + + --Mode Info _=drawableText.modeName - gc.draw(_,100,230) - gc.draw(drawableText.levelName,135+_:getWidth(),230) + gc.draw(_,70,180) + gc.draw(drawableText.levelName,90+_:getWidth(),180) + + --Result Text setFont(35) - mDraw(gameResult and drawableText[gameResult]or drawableText.pause,640,50-10*(5-sceneTemp.timer*.1)^1.5) + mText(gameResult and drawableText[gameResult]or drawableText.pause,640,50-10*(5-sceneTemp.timer*.1)^1.5) + + --Infos + if frame>180 then + _=S.list + setFont(26) + for i=1,8 do + gc.print(text.pauseStat[i],70,210+40*i) + gc.printf(_[i],245,210+40*i,250,"right") + end + end + + --Radar Chart + if T>.5 and frame>180 then + T=T*2-1 + gc.setLineWidth(2) + gc.push("transform") + gc.translate(1026,400) + gc.scale((3-2*T)*T) + local C=S.color1;C[4]=T;gc.setColor(C)gc.polygon("fill",S.V1) + C=S.color2;C[4]=T;gc.setColor(C)gc.polygon("fill",S.V2) + gc.setColor(1,1,1,T*(.5+.5*sin(Timer()*12.626))) + gc.polygon("line",S.standard) + gc.setColor(1,1,1,T) + gc.line(S.V1)gc.line(S.V2) + gc.pop() + + gc.line(1026,400-160,1026,400+160) + gc.line(1026-160,400,1026+160,400) + + _=Timer()%6.2832 + if _>3.1416 then + _=_-3.1416 + setFont(35) + gc.setColor(1,1,1,T*sin(_)) + mStr(text.atk,1026,420-230) + mStr(text.spd,1026+180,340) + mStr(text.recv,1026,420+140) + mStr(text.eff,1026-180,340) + else + gc.setColor(1,1,1,T*sin(_)) + _=S.radar1 + setFont(23) + mStr(_[1],1026,420-215) + mStr(_[2],1026+180,340) + mStr(_[3],1026,420+140) + mStr(_[4],1026-180,340) + end + end end function Pnt.setting_game() gc.setColor(1,1,1) - mDraw(drawableText.setting_game,640,15) + mText(drawableText.setting_game,640,15) gc.draw(blockSkin[int(Timer()*2)%11+1],720,540,Timer()%6.28319,2,nil,15,15) end function Pnt.setting_graphic() gc.setColor(1,1,1) - mDraw(drawableText.setting_graphic,640,15) + mText(drawableText.setting_graphic,640,15) end function Pnt.setting_sound() gc.setColor(1,1,1,.8) - mDraw(drawableText.setting_sound,640,15) + mText(drawableText.setting_sound,640,15) local t=Timer() local _=sceneTemp.jump local x,y=800,340+10*sin(t*.5)+(_-10)*_*.3 gc.translate(x,y) - gc.draw(miya.ch,0,0) + gc.draw(IMG.miyaCH,0,0) gc.setColor(1,1,1,.7) - gc.draw(miya.f1,4,47+4*sin(t*.9)) - gc.draw(miya.f2,42,107+5*sin(t)) - gc.draw(miya.f3,93,126+3*sin(t*.7)) - gc.draw(miya.f4,129,98+3*sin(t*.7)) + gc.draw(IMG.miyaF1,4,47+4*sin(t*.9)) + gc.draw(IMG.miyaF2,42,107+5*sin(t)) + gc.draw(IMG.miyaF3,93,126+3*sin(t*.7)) + gc.draw(IMG.miyaF4,129,98+3*sin(t*.7)) gc.translate(-x,-y) end +local function timeConv(t) + return t.."F "..int(t*16.67).."ms" +end function Pnt.setting_control() --Testing grid line gc.setLineWidth(4) @@ -557,14 +548,14 @@ function Pnt.setting_control() gc.draw(drawableText.setting_control,80,50) setFont(50) gc.printf(text.preview,320,540,200,"right") - + --Floating number setFont(30) local _=setting - mStr(_.das,226+35*_.das,145) - mStr(_.arr,226+35*_.arr,235) - mStr(_.sddas,226+35*_.sddas,325) - mStr(_.sdarr,226+35*_.sdarr,415) + mStr(timeConv(_.das),226+35*_.das,145) + mStr(timeConv(_.arr),226+35*_.arr,235) + mStr(timeConv(_.sddas),226+35*_.sddas,325) + mStr(timeConv(_.sdarr),226+35*_.sdarr,415) --Testing O mino _=blockSkin[setting.skin[6]] @@ -592,11 +583,11 @@ function Pnt.setting_key() --Selection rect gc.setColor(1,.3,.3) - mDraw(drawableText.keyboard,340,30) - mDraw(drawableText.keyboard,940,30) + mText(drawableText.keyboard,340,30) + mText(drawableText.keyboard,940,30) gc.setColor(.3,.3,1) - mDraw(drawableText.joystick,540,30) - mDraw(drawableText.joystick,1140,30) + mText(drawableText.joystick,540,30) + mText(drawableText.joystick,1140,30) gc.setColor(1,1,1) setFont(26) @@ -663,38 +654,73 @@ function Pnt.setting_touch() end function Pnt.setting_trackSetting() gc.setColor(1,1,1) - mDraw(drawableText.VKTchW,140+50*setting.VKTchW,260) - mDraw(drawableText.VKOrgW,140+50*setting.VKTchW+50*setting.VKCurW,320) - mDraw(drawableText.VKCurW,640+50*setting.VKCurW,380) + mText(drawableText.VKTchW,140+50*setting.VKTchW,260) + mText(drawableText.VKOrgW,140+50*setting.VKTchW+50*setting.VKCurW,320) + mText(drawableText.VKCurW,640+50*setting.VKCurW,380) end function Pnt.help() - setFont(22) + setFont(20) gc.setColor(1,1,1) for i=1,#text.help do - gc.printf(text.help[i],200,30*i-10,1000,"center") + gc.printf(text.help[i],150,30*i-10,1000,"center") end setFont(19) gc.print(text.used,30,330) - gc.draw(titleImage,280,610,.1,1+.05*sin(Timer()*2),nil,206,35) - gc.setLineWidth(5) - gc.rectangle("line",17,17,260,260) - gc.rectangle("line",1077,17,186,186) - gc.draw(payCode,20,20) - gc.draw(groupCode,1080,20) - gc.setColor(1,1,1,sin(Timer()*10)*.5+.5) - setFont(30) - mStr(text.support,150,283) + gc.draw(IMG.titleImage,280,610,.1,1+.05*sin(Timer()*2),nil,206,35) + gc.setLineWidth(3) + gc.rectangle("line",18,18,263,263) + gc.rectangle("line",1012,18,250,250) + gc.draw(IMG.pay1,20,20) + gc.draw(IMG.pay2,1014,20) setFont(20) - mStr(text.group,1170,210) + mStr(text.group,640,490) + gc.setColor(1,1,1,sin(Timer()*10)*.4+.6) + setFont(30) + gc.print(text.support,150,283+20,sin(Timer()*2.6)*.02,nil,nil,115,20) + gc.print(text.support,1138,270+20,sin(Timer()*2.83)*.02,nil,nil,115,20) end function Pnt.stat() - setFont(23) - gc.setColor(1,1,1) - for i=1,16 do - gc.print(text.stat[i],400,30*i+10) - gc.print(sceneTemp[i],720,30*i+10) + local chart=sceneTemp.chart + setFont(24) + local _,__=skin.libColor,setting.skin + local A,B=chart.A1,chart.A2 + for x=1,7 do + gc.setColor(_[__[x]]) + mStr(text.block[x],80*x,40) + mStr(text.block[x],80*x,280) + for y=1,4 do + mStr(A[x][y],80*x,40+40*y) + mStr(B[x][y],80*x,280+40*y) + end + mStr(chart.Y1[x],80*x,240) + mStr(chart.Y2[x],80*x,480) end - gc.draw(titleImage,260,570,.2+.07*sin(Timer()*3),nil,nil,206,35) + gc.setColor(1,1,1) + A,B=chart.X1,chart.X2 + mStr(text.stat.spin,650,45) + mStr(text.stat.clear,650,285) + for y=1,4 do + mStr(A[y],650,40+40*y) + mStr(B[y],650,280+40*y) + end + + setFont(22) + for i=1,11 do + gc.print(sceneTemp.item[i],740,40*i+10) + end + + gc.setLineWidth(4) + for x=1,8 do + x=80*x-40 + gc.line(x,80,x,240) + gc.line(x,320,x,480) + end + for y=2,6 do + gc.line(40,40*y,600,40*y) + gc.line(40,240+40*y,600,240+40*y) + end + + gc.draw(IMG.titleImage,260,615,.2+.04*sin(Timer()*3),nil,nil,206,35) end function Pnt.history() gc.setColor(.2,.2,.2,.7) diff --git a/ai.lua b/parts/ai.lua similarity index 100% rename from ai.lua rename to parts/ai.lua diff --git a/parts/bg.lua b/parts/bg.lua new file mode 100644 index 00000000..2a3907a0 --- /dev/null +++ b/parts/bg.lua @@ -0,0 +1,240 @@ +local gc=love.graphics +local int,ceil,rnd,abs=math.floor,math.ceil,math.random,math.abs +local max,min,sin,cos=math.max,math.min,math.sin,math.cos + +local scr=scr + +local BGinit,BGresize,BGupdate,BGdraw,BGdiscard={},{},{},{},{} +local BGvars={_G=_G} + +function BGdraw.none() + gc.clear(.15,.15,.15) +end + +function BGdraw.grey() + gc.clear(.3,.3,.3) +end + +function BGinit.glow() + t=0 +end +function BGupdate.glow(dt) + t=t+dt +end +function BGdraw.glow() + local t=(sin(t*.5)+sin(t*.7)+sin(t*.9+1)+sin(t*1.5)+sin(t*2+10))*.08 + gc.clear(t,t,t) +end + +function BGinit.rgb() + t=0 +end +function BGupdate.rgb(dt) + t=t+dt +end +function BGdraw.rgb() + gc.clear( + sin(t*1.2)*.15+.2, + sin(t*1.5)*.15+.2, + sin(t*1.9)*.15+.2 + ) +end + +function BGinit.strap() + t=0 + img=_G.IMG.gameBG2 +end +function BGupdate.strap(dt) + t=t+dt +end +function BGdraw.strap() + gc.setColor(.5,.5,.5) + local x=t%16*-64 + ::L:: + gc.draw(img,x,0,nil,8,scr.h) + x=x+1024--image width*8 + if x0 then BGM.playing:setVolume(v) - if not BGM.nowPlay then + if BGM.suspend then BGM.playing:play() - BGM.nowPlay=BGM.playingID + BGM.nowPlay,BGM.suspend=BGM.suspend end else - BGM.playing:pause() BGM.playing:setVolume(0) - BGM.nowPlay=nil + BGM.playing:pause() + BGM.suspend,BGM.nowPlay=BGM.nowPlay end end end function BGM.stop() if BGM.nowPlay then - for i=1,#Task do - local T=Task[i] - if T.code==Event_task.bgmFadeIn and T.data==BGM.nowPlay then - T.code=Event_task.bgmFadeOut - goto L - end - end - BGM.list[BGM.nowPlay]:stop() - ::L:: - BGM.nowPlay=nil + TASK.new(tickEvent.bgmFadeOut,nil,BGM.nowPlay) end + TASK.changeCode(tickEvent.bgmFadeIn,tickEvent.bgmFadeOut) + BGM.playing,BGM.nowPlay=nil end return BGM \ No newline at end of file diff --git a/parts/getTip.lua b/parts/getTip.lua index 4e68b2b6..42474134 100644 --- a/parts/getTip.lua +++ b/parts/getTip.lua @@ -33,10 +33,12 @@ if setting.lang==1 then "CLASSIC SEXY RUSSIAN BLOCKS", "戴上耳机以获得最佳体验", "少女祈祷中", - "按键/点击以全力加载,跳过动画", - "LrL,RlR LLr,RRl RRR/LLL F!!",--ZSLJTTI + "按键/点击以强制满速加载", + "LrL,RlR LLr,RRl RRR,LLL RfR,RRf,rFF FFF",--ZSLJTOI "RUR'U'R'FR2U'R'U'RUR'F'", "Am G F G", + "Techmino 好玩!", + "Techminohaowan", } elseif setting.lang==2 then L={ @@ -72,10 +74,12 @@ elseif setting.lang==2 then "CLASSIC SEXY RUSSIAN BLOCKS", "戴上耳机以获得最佳体验", "少女祈祷中", - "按键/点击以全力加载,跳过动画", - "LrL,RlR LLr,RRl RRR/LLL F!!", + "按键/点击以强制满速加载", + "LrL,RlR LLr,RRl RRR,LLL RfR,RRf,rFF FFF",--ZSLJTOI "RUR'U'R'FR2U'R'U'RUR'F'", "Am G F G", + "Techmino 好玩!", + "Techminohaowan", } elseif setting.lang==3 then L={ @@ -112,10 +116,11 @@ elseif setting.lang==3 then "CLASSIC SEXY RUSSIAN BLOCKS", "Headphones for better experience", "少女祈禱中", - "any-key/click to skip loading animation", + "any-key/click to load at fastest speed", "RUR'U'R'FR2U'R'U'RUR'F'", "Am G F G", - "LrL,RlR LLr,RRl RRR/LLL F!!", + "LrL,RlR LLr,RRl RRR,LLL RfR,RRf,rFF FFF",--ZSLJTOI + "Techmino is so fun!", } end return L[math.random(#L)] \ No newline at end of file diff --git a/parts/img.lua b/parts/img.lua new file mode 100644 index 00000000..54ced521 --- /dev/null +++ b/parts/img.lua @@ -0,0 +1,40 @@ +local IMG={ + titleImage="mess/title.png", + coloredTitleImage="mess/title_colored.png", + dialCircle="mess/dialCircle.png", + dialNeedle="mess/dialNeedle.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", + + gameBG1="BG/bg1.png", + gameBG2="BG/bg2.png", +} +local list={} +local count=0 +for k,v 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 \ No newline at end of file diff --git a/parts/kickList.lua b/parts/kickList.lua index e2e9a702..8bb0a0cf 100644 --- a/parts/kickList.lua +++ b/parts/kickList.lua @@ -43,7 +43,7 @@ local TRS={ [30]={{0,0},{-1,0}, {-1,-1},{0,2}, {-1,2} }, [12]={{0,0},{1,0}, {1,-1}, {0,2}, {1,2}, {1,1} }, [21]={{0,0},{-1,0}, {-1,-1},{-1,1}, {0,-2}, {-1,-2},{-1,-1} }, - [32]={{0,0},{-1,0}, {-1,-1},{-1,1}, {1,0}, {0,2}, {-1,2} }, + [32]={{0,0},{-1,0}, {-1,-1},{-1,1}, {1,0}, {0,-1}, {0,2}, {-1,2} }, [23]={{0,0},{1,0}, {1,1}, {-1,0}, {0,-2}, {1,-2} }, [02]={{0,0},{1,0}, {-1,0}, {0,-1}, {0,1} }, [20]={{0,0},{-1,0}, {1,0}, {0,1}, {0,-1} }, @@ -55,7 +55,7 @@ local TRS={ [10]={{0,0},{1,0}, {1,-1}, {0,2}, {1,2} }, [03]={{0,0},{1,0}, {1,1}, {0,-2}, {1,-2}, {1,-1}, {0,1} }, [30]={{0,0},{-1,0}, {-1,-1},{0,2}, {-1,2}, {0,-1}, {-1,1} }, - [12]={{0,0},{1,0}, {1,-1}, {1,1}, {-1,0}, {0,2}, {1,2} }, + [12]={{0,0},{1,0}, {1,-1}, {1,1}, {-1,0}, {0,-1}, {0,2}, {1,2} }, [21]={{0,0},{-1,0}, {-1,1}, {1,0}, {0,-2}, {-1,-2} }, [32]={{0,0},{-1,0}, {-1,-1},{0,2}, {-1,2}, {-1,1} }, [23]={{0,0},{1,0}, {1,-1}, {1,1}, {0,-2}, {1,-2}, {1,-1} }, diff --git a/parts/modes.lua b/parts/modes.lua index fddf50e9..c7fee630 100644 --- a/parts/modes.lua +++ b/parts/modes.lua @@ -14,76 +14,76 @@ modes={ {"solo_3", id=13, x=-700, y=-1000, size=35,shape=1,icon="solo", unlock={14,16}}, {"solo_4", id=14, x=-900, y=-1000, size=35,shape=1,icon="solo", unlock={15}}, {"solo_5", id=15, x=-1100, y=-1000, size=35,shape=1,icon="solo", unlock={}}, - {"techmino49_easy", id=16, x=-900, y=-1200, size=35,shape=1,icon="", unlock={17,19}}, - {"techmino49_hard", id=17, x=-900, y=-1400, size=35,shape=1,icon="", unlock={18}}, - {"techmino49_ultimate", id=18, x=-900, y=-1600, size=35,shape=1,icon="", unlock={}}, + {"techmino49_easy", id=16, x=-900, y=-1200, size=35,shape=1,icon="royale", unlock={17,19}}, + {"techmino49_hard", id=17, x=-900, y=-1400, size=35,shape=1,icon="royale", unlock={18}}, + {"techmino49_ultimate", id=18, x=-900, y=-1600, size=35,shape=1,icon="royale", unlock={}}, - {"techmino99_easy", id=19, x=-1100, y=-1400, size=35,shape=1,icon="", unlock={20}}, - {"techmino99_hard", id=20, x=-1100, y=-1600, size=35,shape=1,icon="", unlock={21}}, - {"techmino99_ultimate", id=21, x=-1100, y=-1800, size=35,shape=1,icon="", unlock={}}, + {"techmino99_easy", id=19, x=-1100, y=-1400, size=35,shape=1,icon="royale", unlock={20}}, + {"techmino99_hard", id=20, x=-1100, y=-1600, size=35,shape=1,icon="royale", unlock={21}}, + {"techmino99_ultimate", id=21, x=-1100, y=-1800, size=35,shape=1,icon="royale", unlock={}}, {"round_1", id=22, x=-300, y=-800, size=35,shape=1,icon="round", unlock={23}}, {"round_2", id=23, x=-500, y=-800, size=35,shape=1,icon="round", unlock={24}}, {"round_3", id=24, x=-700, y=-800, size=35,shape=1,icon="round", unlock={25}}, {"round_4", id=25, x=-900, y=-800, size=35,shape=1,icon="round", unlock={26}}, {"round_5", id=26, x=-1100, y=-800, size=35,shape=1,icon="round", unlock={}}, - {"master_beginner", id=27, x=0, y=-1000, size=35,shape=1,icon="", unlock={28}}, - {"master_adavnce", id=28, x=0, y=-1200, size=35,shape=1,icon="", unlock={29,30}}, - {"master_final", id=29, x=0, y=-1400, size=35,shape=1,icon="", unlock={}}, - {"GM", id=30, x=150, y=-1500, size=35,shape=1,icon="", unlock={}}, + {"master_beginner", id=27, x=0, y=-1000, size=35,shape=1,icon="master", unlock={28}}, + {"master_adavnce", id=28, x=0, y=-1200, size=35,shape=1,icon="master", unlock={29,30}}, + {"master_final", id=29, x=0, y=-1400, size=40,shape=2,icon="master", unlock={}}, + {"GM", id=30, x=150, y=-1500, size=35,shape=1,icon="master", unlock={}}, - {"blind_easy", id=31, x=150, y=-700, size=35,shape=1,icon="", unlock={32}}, - {"blind_normal", id=32, x=150, y=-800, size=35,shape=1,icon="", unlock={33}}, - {"blind_hard", id=33, x=150, y=-900, size=35,shape=1,icon="", unlock={34}}, - {"blind_lunatic", id=34, x=150, y=-1000, size=35,shape=1,icon="", unlock={35}}, - {"blind_ultimate", id=35, x=150, y=-1100, size=35,shape=1,icon="", unlock={}}, + {"blind_easy", id=31, x=150, y=-700, size=35,shape=1,icon="blind", unlock={32}}, + {"blind_normal", id=32, x=150, y=-800, size=35,shape=1,icon="blind", unlock={33}}, + {"blind_hard", id=33, x=150, y=-900, size=35,shape=1,icon="blind", unlock={34}}, + {"blind_lunatic", id=34, x=150, y=-1000, size=35,shape=1,icon="blind", unlock={35}}, + {"blind_ultimate", id=35, x=150, y=-1100, size=35,shape=1,icon="blind", unlock={}}, - {"classic_fast", id=36, x=-300, y=-1200, size=35,shape=2,icon="classic", unlock={}}, - - {"survivor_easy", id=37, x=300, y=-600, size=35,shape=1,icon="", unlock={38}}, - {"survivor_normal", id=38, x=500, y=-600, size=35,shape=1,icon="", unlock={39,42,44,46}}, - {"survivor_hard", id=39, x=700, y=-600, size=35,shape=1,icon="", unlock={40}}, - {"survivor_lunatic", id=40, x=900, y=-600, size=35,shape=1,icon="", unlock={41}}, - {"survivor_ultimate", id=41, x=1100, y=-600, size=35,shape=1,icon="", unlock={}}, - {"attacker_hard", id=42, x=300, y=-800, size=35,shape=1,icon="", unlock={43}}, - {"attacker_ultimate", id=43, x=300, y=-1000, size=35,shape=1,icon="", unlock={}}, + {"classic_fast", id=36, x=-300, y=-1200, size=40,shape=2,icon="classic", unlock={}}, + + {"survivor_easy", id=37, x=300, y=-600, size=35,shape=1,icon="survivor",unlock={38}}, + {"survivor_normal", id=38, x=500, y=-600, size=35,shape=1,icon="survivor",unlock={39,42,44,46}}, + {"survivor_hard", id=39, x=700, y=-600, size=35,shape=1,icon="survivor",unlock={40}}, + {"survivor_lunatic", id=40, x=900, y=-600, size=35,shape=1,icon="survivor",unlock={41}}, + {"survivor_ultimate", id=41, x=1100, y=-600, size=35,shape=1,icon="survivor",unlock={}}, + {"attacker_hard", id=42, x=300, y=-800, size=35,shape=1,icon="attacker",unlock={43}}, + {"attacker_ultimate", id=43, x=300, y=-1000, size=35,shape=1,icon="attacker",unlock={}}, - {"defender_normal", id=44, x=500, y=-800, size=35,shape=1,icon="", unlock={45}}, - {"defender_lunatic", id=45, x=500, y=-1000, size=35,shape=1,icon="", unlock={}}, + {"defender_normal", id=44, x=500, y=-800, size=35,shape=1,icon="defender",unlock={45}}, + {"defender_lunatic", id=45, x=500, y=-1000, size=35,shape=1,icon="defender",unlock={}}, - {"dig_hard", id=46, x=700, y=-800, size=35,shape=1,icon="", unlock={47}}, - {"dig_ultimate", id=47, x=700, y=-1000, size=35,shape=1,icon="", unlock={}}, + {"dig_hard", id=46, x=700, y=-800, size=35,shape=1,icon="dig", unlock={47}}, + {"dig_ultimate", id=47, x=700, y=-1000, size=35,shape=1,icon="dig", unlock={}}, - {"bigbang", id=48, x=400, y=-400, size=55,shape=1,icon="", unlock={49,51,56}}, - {"c4wtrain_normal", id=49, x=700, y=-400, size=35,shape=1,icon="", unlock={50}}, - {"c4wtrain_lunatic", id=50, x=900, y=-400, size=35,shape=1,icon="", unlock={}}, + {"bigbang", id=48, x=400, y=-400, size=55,shape=1,icon="bigbang", unlock={49,51,56}}, + {"c4wtrain_normal", id=49, x=700, y=-400, size=35,shape=1,icon="c4wtrain",unlock={50}}, + {"c4wtrain_lunatic", id=50, x=900, y=-400, size=35,shape=1,icon="c4wtrain",unlock={}}, - {"pctrain_normal", id=51, x=700, y=-200, size=35,shape=1,icon="", unlock={52,53}}, - {"pctrain_lunatic", id=52, x=900, y=-200, size=35,shape=1,icon="", unlock={}}, - {"pcchallenge_normal", id=53, x=800, y=-100, size=35,shape=1,icon="", unlock={54}}, - {"pcchallenge_hard", id=54, x=1000, y=-100, size=35,shape=1,icon="", unlock={55}}, - {"pcchallenge_lunatic", id=55, x=1200, y=-100, size=35,shape=1,icon="", unlock={}}, - {"tech_normal", id=56, x=400, y=-100, size=35,shape=1,icon="", unlock={57,58}}, - {"tech_normal+", id=57, x=650, y=150, size=35,shape=1,icon="", unlock={64}}, - {"tech_hard", id=58, x=400, y=50, size=35,shape=1,icon="", unlock={59,60}}, - {"tech_hard+", id=59, x=250, y=50, size=35,shape=1,icon="", unlock={}}, - {"tech_lunatic", id=60, x=400, y=200, size=35,shape=1,icon="", unlock={61,62}}, - {"tech_lunatic+", id=61, x=250, y=200, size=35,shape=1,icon="", unlock={}}, - {"tech_ultimate", id=62, x=400, y=350, size=35,shape=1,icon="", unlock={63}}, - {"tech_ultimate+", id=63, x=250, y=350, size=35,shape=1,icon="", unlock={}}, - {"tsd_easy", id=64, x=800, y=200, size=35,shape=1,icon="", unlock={65}}, - {"tsd_hard", id=65, x=1000, y=200, size=35,shape=1,icon="", unlock={66}}, - {"tsd_ultimate", id=66, x=1200, y=200, size=35,shape=1,icon="", unlock={}}, + {"pctrain_normal", id=51, x=700, y=-200, size=35,shape=1,icon="pctrain", unlock={52,53}}, + {"pctrain_lunatic", id=52, x=900, y=-200, size=35,shape=1,icon="pctrain", unlock={}}, + {"pcchallenge_normal", id=53, x=800, y=-100, size=35,shape=1,icon="pcchallenge",unlock={54}}, + {"pcchallenge_hard", id=54, x=1000, y=-100, size=35,shape=1,icon="pcchallenge",unlock={55}}, + {"pcchallenge_lunatic", id=55, x=1200, y=-100, size=35,shape=1,icon="pcchallenge",unlock={}}, + {"tech_normal", id=56, x=400, y=-100, size=35,shape=1,icon="tech", unlock={57,58}}, + {"tech_normal+", id=57, x=650, y=150, size=35,shape=1,icon="tech", unlock={64}}, + {"tech_hard", id=58, x=400, y=50, size=35,shape=1,icon="tech", unlock={59,60}}, + {"tech_hard+", id=59, x=250, y=50, size=35,shape=1,icon="tech", unlock={}}, + {"tech_lunatic", id=60, x=400, y=200, size=35,shape=1,icon="tech", unlock={61,62}}, + {"tech_lunatic+", id=61, x=250, y=200, size=35,shape=1,icon="tech", unlock={}}, + {"tech_ultimate", id=62, x=400, y=350, size=35,shape=1,icon="tech", unlock={63}}, + {"tech_ultimate+", id=63, x=250, y=350, size=35,shape=1,icon="tech", unlock={}}, + {"tsd_easy", id=64, x=800, y=200, size=35,shape=1,icon="tsd", unlock={65}}, + {"tsd_hard", id=65, x=1000, y=200, size=35,shape=1,icon="tsd", unlock={66}}, + {"tsd_ultimate", id=66, x=1200, y=200, size=35,shape=1,icon="tsd", unlock={}}, {"zen", id=67, x=-900, y=-600, size=35,shape=1,icon="zen", unlock={68,69,70}}, - {"ultra", id=68, x=-1100, y=-400, size=35,shape=1,icon="", unlock={}}, - {"infinite", id=69, x=-900, y=-400, size=35,shape=1,icon="", unlock={}}, - {"infinite_dig", id=70, x=-1100, y=-600, size=35,shape=1,icon="", unlock={}}, + {"ultra", id=68, x=-1100, y=-400, size=35,shape=1,icon="ultra", unlock={}}, + {"infinite", id=69, x=-900, y=-400, size=35,shape=1,icon="infinite",unlock={}}, + {"infinite_dig", id=70, x=-1100, y=-600, size=35,shape=1,icon="infinite_dig",unlock={}}, {"custom_clear", id=71, x=200, y=-350, size=45,shape=3,icon="custom", unlock={}}, {"custom_puzzle", id=72, x=200, y=-200, size=45,shape=3,icon="puzzle", unlock={}}, - {"hotseat_2P", id=73, x=-300, y=200, size=45,shape=3,icon="", unlock={}}, - {"hotseat_3P", id=74, x=-450, y=200, size=45,shape=3,icon="", unlock={}}, - {"hotseat_4P", id=75, x=-600, y=200, size=45,shape=3,icon="", unlock={}}, + {"hotseat_2P", id=73, x=-300, y=200, size=45,shape=3,icon="hotseat", unlock={}}, + {"hotseat_3P", id=74, x=-450, y=200, size=45,shape=3,icon="hotseat", unlock={}}, + {"hotseat_4P", id=75, x=-600, y=200, size=45,shape=3,icon="hotseat", unlock={}}, } modeRanks={} for i=1,#modes do diff --git a/parts/sfx.lua b/parts/sfx.lua index 910c1841..49241601 100644 --- a/parts/sfx.lua +++ b/parts/sfx.lua @@ -38,7 +38,7 @@ function SFX.play(s,v,pos) while S[n]:isPlaying()do n=n+1 if not S[n]then - S[n]=S[n-1]:clone() + S[n]=S[1]:clone() S[n]:seek(0) break end diff --git a/parts/shader.lua b/parts/shader.lua index 32f0f156..a73ab1a7 100644 --- a/parts/shader.lua +++ b/parts/shader.lua @@ -1,2 +1,5 @@ -gc=love.graphics -shader_glow=gc.newShader("shader/glow.cs") \ No newline at end of file +local gc=love.graphics +return{ + -- glow=gc.newShader("shader/glow.cs"), + alpha=gc.newShader("shader/alpha.cs"), +} \ No newline at end of file diff --git a/parts/skin.lua b/parts/skin.lua index 58c1c9e6..7f1703ba 100644 --- a/parts/skin.lua +++ b/parts/skin.lua @@ -42,6 +42,7 @@ skin.libColor={ color.darkGreen, } function skin.load() + local _ gc.push() gc.origin() gc.setDefaultFilter("nearest","nearest") @@ -70,7 +71,7 @@ function skin.load() gc.setLineWidth(3) for i=1,11 do puzzleMark[i]=C(30,30) - local _=skin.libColor[i] + _=skin.libColor[i] gc.setColor(_[1],_[2],_[3],.6) gc.rectangle("line",5,5,20,20) gc.rectangle("line",10,10,10,10) @@ -80,7 +81,7 @@ function skin.load() gc.setColor(skin.libColor[i]) gc.rectangle("line",7,7,16,16) end - local _=C(30,30) + _=C(30,30) gc.setColor(1,1,1) gc.line(5,5,25,25) gc.line(5,25,25,5) @@ -97,14 +98,14 @@ function skin.prevSet()--prev skin_set setting.skinSet=_ skin.change(_) _=list[_] - TEXT(_,1100,100,int(300/#_)+5,"fly") + TEXT.show(_,1100,100,int(300/#_)+5,"fly") end function skin.nextSet()--next skin_set local _=setting.skinSet%L+1 setting.skinSet=_ skin.change(_) _=list[_] - TEXT(_,1100,100,int(300/#_)+5,"fly") + TEXT.show(_,1100,100,int(300/#_)+5,"fly") end function skin.prev(i)--prev skin for [i] local _=setting.skin diff --git a/parts/space.lua b/parts/space.lua deleted file mode 100644 index d54c8d81..00000000 --- a/parts/space.lua +++ /dev/null @@ -1,70 +0,0 @@ -local gc=love.graphics -local sin,cos,rnd,min=math.sin,math.cos,math.random,math.min - -local W,H,R--w,h+=100,r=real Radius -local stars={} -local planet={} - -local function newPlanet() - local a=rnd()*3.142 - local r=(H+W)*(2+rnd())*.05 - planet.r=r - planet.x=W*.5+cos(a)*(R+r) - planet.y=H*.5+sin(a)*(R+r) - planet.vx=-cos(a+rnd()-.5)*.0626 - planet.vy=-sin(a+rnd()-.5)*.0626 - planet.R=.7+rnd()*.22 - planet.G=planet.R+rnd()*.16-.1 - planet.B=.7+rnd()*.2 -end - -local space={}--LIB -function space.resize(w,h) - R=((w*.5)^2+(h*.5)^2)^.5 - W,H=w+100,h+100 -end -function space.new() - if not W then space.resize(scr.w,scr.h)end - newPlanet() - for i=1,2600,5 do - local s=0.75*2^(rnd()*1.5) - stars[i]=s --size - stars[i+1]=rnd(W) --x - stars[i+2]=rnd(H) --y - stars[i+3]=(rnd()-.5)*.01*s --vx - stars[i+4]=(rnd()-.5)*.01*s --vy - end--800 stars -end -function space.update(dt) - local x,y=planet.x,planet.y - planet.x=planet.x+planet.vx - planet.y=planet.y+planet.vy - if((planet.x-W*.5)^2+(planet.y-H*.5)^2)^.5>R+planet.r then - newPlanet() - end - for i=1,2600,5 do - stars[i+1]=(stars[i+1]+stars[i+3])%W - stars[i+2]=(stars[i+2]+stars[i+4])%H - end--stars moving -end -function space.draw() - if not stars[1]then return end - gc.translate(-50,-50) - gc.setLineWidth(7) - gc.setColor(planet.R,planet.G,planet.B,.026) - gc.circle("line",planet.x,planet.y,planet.r+1) - gc.setColor(planet.R,.6,planet.B,.0626) - gc.circle("fill",planet.x,planet.y,planet.r) - gc.setColor(.9,.9,.9) - for i=1,2600,5 do - local x,y=stars[i+1],stars[i+2] - gc.circle("fill",x,y,stars[i]) - end - gc.translate(50,50) -end -function space.discard() - stars={} - planet={} - collectgarbage() -end -return space \ No newline at end of file diff --git a/parts/sysFX.lua b/parts/sysFX.lua new file mode 100644 index 00000000..2ef49937 --- /dev/null +++ b/parts/sysFX.lua @@ -0,0 +1,42 @@ +local gc=love.graphics +local setColor=gc.setColor +local setWidth=gc.setLineWidth +local rect=gc.rectangle + +local fx={} + +local FXdraw={} +function FXdraw.ripple(S) + setWidth(6) + setColor(1,1,1,1-S.t) + local r=(10*S.t)^1.2 + rect("line",S[1]-r,S[2]-r,S[3]+2*r,S[4]+2*r) +end +function FXdraw.shade(S) + setColor(S[1],S[2],S[3],1-S.t) + rect("fill",S[4],S[5],S[6],S[7],2) +end + +local sysFX={} +function sysFX.update(dt) + for i=#fx,1,-1 do + local S=fx[i] + S.t=S.t+dt*S.rate + if S.t>=1 then + for i=i,#fx do + fx[i]=fx[i+1] + end + end + end +end +function sysFX.draw() + for i=1,#fx do + fx[i]:draw() + end +end +--0=ripple,x,y,w,h +--1=shade,r,g,b,x,y,w,h +function sysFX.new(type,duration,...) + fx[#fx+1]={draw=FXdraw[type],t=0,rate=1/duration,...} +end +return sysFX \ No newline at end of file diff --git a/parts/task.lua b/parts/task.lua index 9a369c04..548b2083 100644 --- a/parts/task.lua +++ b/parts/task.lua @@ -1,71 +1,68 @@ -local min=math.min -local mini=love.window.isMinimized -local task={} -function task.finish(P) - if scene.cur~="play"then return true end - P.endCounter=P.endCounter+1 - if P.endCounter>120 then pauseGame()end -end -function task.lose(P) - P.endCounter=P.endCounter+1 - if P.endCounter>80 then - for i=1,#P.field do - for j=1,10 do - if P.visTime[i][j]>0 then - P.visTime[i][j]=P.visTime[i][j]-1 - end - end - end - if P.endCounter==120 then - for _=#P.field,1,-1 do - freeRow.discard(P.field[_]) - freeRow.discard(P.visTime[_]) - P.field[_],P.visTime[_]=nil - end - if #players==1 and scene=="play"then - pauseGame() - end - return true - end - end -end -function task.throwBadge(A,data) - data[2]=data[2]-1 - if data[2]%4==0 then - local S,R=data[1],data[1].lastRecv - local x1,y1,x2,y2 - if S.small then - x1,y1=S.centerX,S.centerY - else - x1,y1=S.x+308*S.size,S.y+450*S.size - end - if R.small then - x2,y2=R.centerX,R.centerY - else - x2,y2=R.x+66*R.size,R.y+344*R.size - end - FX_badge[#FX_badge+1]={x1,y1,x2,y2,t=0} - --generate badge object +local rem=table.remove - if not A.ai and data[2]%8==0 then - SFX.play("collect") +local tasks={} + +local TASK={} +function TASK.getCount() + return #tasks +end +function TASK.update() + for i=#tasks,1,-1 do + local T=tasks[i] + if T.code(T.P,T.data)then + for i=i,#tasks do + tasks[i]=tasks[i+1] + end + end + end +end +function TASK.new(code,P,data) + tasks[#tasks+1]={ + code=code, + P=P, + data=data, + } +end +function TASK.changeCode(c1,c2) + for i=#tasks,1,-1 do + if tasks[i].code==c1 then + tasks[i].code=c2 end end - if data[2]<=0 then return true end end -function task.bgmFadeOut(_,id) - local src=BGM.list[id] - local v=src:getVolume()-.025*setting.bgm*.1 - src:setVolume(v>0 and v or 0) - if v<=0 then - src:stop() - return true +function TASK.removeTask_code(code) + for i=#tasks,1,-1 do + if tasks[i].code==code then + rem(tasks,i) + end end end -function task.bgmFadeIn(_,id) - local src=BGM.list[id] - local v=min(src:getVolume()+.025*setting.bgm*.1,setting.bgm*.1) - src:setVolume(v) - if v>=setting.bgm*.1 then return true end +function TASK.removeTask_data(data) + for i=#tasks,1,-1 do + if tasks[i].data==data then + rem(tasks,i) + end + end end -return task \ No newline at end of file +function TASK.clear(opt) + if opt=="all"then + local i=#tasks + while i>0 do + tasks[i]=nil + i=i-1 + end + elseif opt=="play"then + for i=#tasks,1,-1 do + if tasks[i].P then + rem(tasks,i) + end + end + else--Player table + for i=#tasks,1,-1 do + if tasks[i].P==opt then + rem(tasks,i) + end + end + end +end +return TASK \ No newline at end of file diff --git a/text.lua b/parts/text.lua similarity index 85% rename from text.lua rename to parts/text.lua index 1ed7b610..af210c78 100644 --- a/text.lua +++ b/parts/text.lua @@ -33,6 +33,8 @@ function textFX.spin(t) gc.translate(t.x,t.y) if t.c<.3 then gc.rotate((.3-t.c)^2*4) + elseif t.c>.8 then + gc.rotate((t.c-.8)^2*-4) end mStr(t.text,0,-t.font*.7) gc.pop() @@ -60,7 +62,14 @@ function textFX.beat(t) mStr(t.text,0,-t.font*.7) gc.pop() end -function getTEXT(text,x,y,font,style,spd,stop) +function textFX.mark(t) + local _,_,_,T=gc.getColor() + gc.setColor(1,1,1,T*.06626) + mStr(t.text,t.x,t.y-t.font*.7) +end + +local TEXT={} +function TEXT.getText(text,x,y,font,style,spd,stop) return{ c=0, text=text, @@ -72,7 +81,7 @@ function getTEXT(text,x,y,font,style,spd,stop) draw=textFX[style]or error("unavailable type:"..style), } end--another version of TEXT() -function TEXT(text,x,y,font,style,spd,stop) +function TEXT.show(text,x,y,font,style,spd,stop) texts[#texts+1]={ c=0, --timer text=text, --string @@ -84,7 +93,7 @@ function TEXT(text,x,y,font,style,spd,stop) draw=textFX[style]or error("unavailable type:"..style), --draw method } end -function updateText(list) +function TEXT.update(list) for i=#list,1,-1 do local t=list[i] t.c=t.c+t.spd @@ -98,7 +107,7 @@ function updateText(list) end end end -function drawTexts(list) +function TEXT.draw(list) for i=1,#list do local t=list[i] local p=t.c @@ -106,4 +115,5 @@ function drawTexts(list) setFont(t.font) t:draw() end -end \ No newline at end of file +end +return TEXT \ No newline at end of file diff --git a/parts/tickEvent.lua b/parts/tickEvent.lua new file mode 100644 index 00000000..c67fab54 --- /dev/null +++ b/parts/tickEvent.lua @@ -0,0 +1,71 @@ +local min=math.min +local mini=love.window.isMinimized +local tickEvent={} +function tickEvent.finish(P) + if SCN.cur~="play"then return true end + P.endCounter=P.endCounter+1 + if P.endCounter>120 then pauseGame()end +end +function tickEvent.lose(P) + P.endCounter=P.endCounter+1 + if P.endCounter>80 then + for i=1,#P.field do + for j=1,10 do + if P.visTime[i][j]>0 then + P.visTime[i][j]=P.visTime[i][j]-1 + end + end + end + if P.endCounter==120 then + for _=#P.field,1,-1 do + freeRow.discard(P.field[_]) + freeRow.discard(P.visTime[_]) + P.field[_],P.visTime[_]=nil + end + if #players==1 and SCN.cur=="play"then + pauseGame() + end + return true + end + end +end +function tickEvent.throwBadge(A,data) + data[2]=data[2]-1 + if data[2]%4==0 then + local S,R=data[1],data[1].lastRecv + local x1,y1,x2,y2 + if S.small then + x1,y1=S.centerX,S.centerY + else + x1,y1=S.x+308*S.size,S.y+450*S.size + end + if R.small then + x2,y2=R.centerX,R.centerY + else + x2,y2=R.x+66*R.size,R.y+344*R.size + end + FX_badge[#FX_badge+1]={x1,y1,x2,y2,t=0} + --generate badge object + + if not A.ai and data[2]%8==0 then + SFX.play("collect") + end + end + if data[2]<=0 then return true end +end +function tickEvent.bgmFadeOut(_,id) + local src=BGM.list[id] + local v=src:getVolume()-.025*setting.bgm*.1 + src:setVolume(v>0 and v or 0) + if v<=0 then + src:stop() + return true + end +end +function tickEvent.bgmFadeIn(_,id) + local src=BGM.list[id] + local v=min(src:getVolume()+.025*setting.bgm*.1,setting.bgm*.1) + src:setVolume(v) + if v>=setting.bgm*.1 then return true end +end +return tickEvent \ No newline at end of file diff --git a/parts/voice.lua b/parts/voice.lua index 5bfdf567..aceb1dea 100644 --- a/parts/voice.lua +++ b/parts/voice.lua @@ -1,12 +1,15 @@ local rnd=math.random +local rem=table.remove +local voiceQueue={free=0} +local VOC={} -function getVoice(str) +local function getVoice(str) local L=voiceBank[str] local n=1 while L[n]:isPlaying()do n=n+1 if not L[n]then - L[n]=L[n-1]:clone() + L[n]=L[1]:clone() L[n]:seek(0) break end @@ -14,7 +17,7 @@ function getVoice(str) return L[n] --load voice with string end -function getFreeVoiceChannel() +function VOC.getFreeChannel() local i=#voiceQueue for i=1,i do if #voiceQueue[i]==0 then return i end @@ -22,7 +25,44 @@ function getFreeVoiceChannel() voiceQueue[i+1]={s=0} return i+1 end -function VOICE(s,chn) +function VOC.getCount() + return #voiceQueue +end +function VOC.update() + for i=#voiceQueue,1,-1 do + local Q=voiceQueue[i] + if Q.s==0 then--闲置轨,自动删除多余 + if i>3 then + rem(voiceQueue,i) + end + elseif Q.s==1 then--等待转换 + Q[1]=getVoice(Q[1]) + Q[1]:setVolume(setting.voc*.1) + Q[1]:play() + Q.s=Q[2]and 2 or 4 + elseif Q.s==2 then--播放1,准备2 + if Q[1]:getDuration()-Q[1]:tell()<.08 then + Q[2]=getVoice(Q[2]) + Q[2]:setVolume(setting.voc*.1) + Q[2]:play() + Q.s=3 + end + elseif Q.s==3 then--12同时播放 + if not Q[1]:isPlaying()then + for i=1,#Q do + Q[i]=Q[i+1] + end + Q.s=Q[2]and 2 or 4 + end + elseif Q.s==4 then--最后播放 + if not Q[1].isPlaying(Q[1])then + Q[1]=nil + Q.s=0 + end + end + end +end +function VOC.play(s,chn) if setting.voc>0 then if chn then local L=voiceQueue[chn] @@ -31,8 +71,9 @@ function VOICE(s,chn) L.s=1 --添加到queue[chn] else - voiceQueue[getFreeVoiceChannel()]={s=1,voiceList[s][rnd(#voiceList[s])]} + voiceQueue[VOC.getFreeChannel()]={s=1,voiceList[s][rnd(#voiceList[s])]} --自动创建空轨/播放 end end -end \ No newline at end of file +end +return VOC \ No newline at end of file diff --git a/class.lua b/parts/widget.lua similarity index 88% rename from class.lua rename to parts/widget.lua index cef3b092..f569033b 100644 --- a/class.lua +++ b/parts/widget.lua @@ -1,35 +1,5 @@ local gc=love.graphics -local rem=table.remove local format=string.format -Task={} -function newTask(code,P,data) - Task[#Task+1]={ - code=code, - P=P, - data=data, - } -end -function clearTask(opt) - if opt=="all"then - local i=#Task - while i>0 do - Task[i]=nil - i=i-1 - end - elseif opt=="play"then - for i=#Task,1,-1 do - if Task[i].P then - rem(Task,i) - end - end - else--Player table - for i=#Task,1,-1 do - if Task[i].P==opt then - rem(Task,i) - end - end - end -end local button={ type="button", @@ -53,8 +23,7 @@ function button:isAbove(x,y) return x>self.x-self.ATV and xself.y-self.ATV and y0 then - local _=P.color[id] + _=P.color[id] gc.setColor(_[1],_[2],_[3],.3) _=miniBlock[P.hd.id] gc.draw(_,15,30,nil,16,nil,0,_:getHeight()*.5) @@ -513,7 +583,7 @@ local function Pdraw_demo(P) ::L:: if N<=P.gameEnv.next and P.next[N]then local id=P.next[N].id - local _=P.color[id] + _=P.color[id] gc.setColor(_[1],_[2],_[3],.3) _=miniBlock[id] gc.draw(_,285,40*N-10,nil,16,nil,_:getWidth(),_:getHeight()*.5) @@ -524,7 +594,7 @@ local function Pdraw_demo(P) gc.setColor(1,1,1) gc.draw(P.dust) gc.translate(-P.fieldOff.x,-P.fieldOff.y) - drawTexts(P.bonus) + TEXT.draw(P.bonus) gc.pop() end local function updateFXs(P,dt) @@ -558,7 +628,7 @@ local function updateFXs(P,dt) if abs(O.y)<.3 then O.y=0 end end--field shaking if P.bonus then - updateText(P.bonus) + TEXT.update(P.bonus) end for i=#P.atkBuffer,1,-1 do local A=P.atkBuffer[i] @@ -612,73 +682,68 @@ local function Pupdate_alive(P,dt) if P.visTime[j][i]>0 then P.visTime[j][i]=P.visTime[j][i]-1 end end end end--Fresh visible time - if P.moving<0 then - if P.keyPressing[1]then - local flag=false - local moving=-P.moving-1--remove sign mark - if moving0 then + if mov==das+arr or mov==das then + if P:ifoverlap(P.cur.bk,P.curX+1,P.curY)then + mov=das+arr-1 + else + P.act.moveRight(P,true) + mov=das + end + end + mov=mov+1 + else + if mov==das then + P.act.insRight(P,true) + else + mov=mov+1 + end end + if mov>=das and P.gameEnv.shakeFX and P:ifoverlap(P.cur.bk,P.curX+1,P.curY)then + P.fieldOff.vx=P.gameEnv.shakeFX*.5 + end + else + P.movDir=0 end else - moving=moving+1 - if moving>P.gameEnv.das+P.gameEnv.arr then - moving=P.gameEnv.das - flag=true - end - end - if flag then - local x=P.curX - if P.gameEnv.arr==0 then - P.act.insLeft(P,true) - else - P.act.moveLeft(P,true) - end - end - if P.gameEnv.shakeFX and P:ifoverlap(P.cur.bk,P.curX-1,P.curY)then - P.fieldOff.vx=-P.gameEnv.shakeFX*.5 - end - P.moving=-moving-1 - else - P.moving=0 - end - elseif P.moving>0 then - if P.keyPressing[2]then - local flag=false - local moving=P.moving-1--remove sign mark - if moving0 then + if mov==das+arr or mov==das then + if P:ifoverlap(P.cur.bk,P.curX-1,P.curY)then + mov=das+arr-1 + else + P.act.moveLeft(P,true) + mov=das + end + end + mov=mov+1 + else + if mov==das then + P.act.insLeft(P,true) + else + mov=mov+1 + end + end + if mov>=das and P.gameEnv.shakeFX and P:ifoverlap(P.cur.bk,P.curX-1,P.curY)then + P.fieldOff.vx=-P.gameEnv.shakeFX*.5 end - end - else - moving=moving+1 - if moving>P.gameEnv.das+P.gameEnv.arr then - moving=P.gameEnv.das - flag=true - end - end - if flag then - local x=P.curX - if P.gameEnv.arr==0 then - P.act.insRight(P,true) else - P.act.moveRight(P,true) + P.movDir=0 end end - if P.gameEnv.shakeFX and P:ifoverlap(P.cur.bk,P.curX+1,P.curY)then - P.fieldOff.vx=P.gameEnv.shakeFX*.5 - end - P.moving=moving+1 - else - P.moving=0 + elseif mov11 or y<1 then return true end @@ -998,6 +1042,7 @@ function player.garbageRelease(P) if flag and P.AI_mode=="CC"then CC_updateField(P)end end function player.garbageRise(P,color,amount,pos) + local _ local t=P.showTime*2 for _=1,amount do ins(P.field,1,freeRow.get(color)) @@ -1006,16 +1051,17 @@ function player.garbageRise(P,color,amount,pos) end P.fieldBeneath=P.fieldBeneath+amount*30 P.curY=P.curY+amount + P.garbageBeneath=P.garbageBeneath+amount P:freshgho() for i=1,#P.clearingRow do P.clearingRow[i]=P.clearingRow[i]+amount end for i=1,#P.lockFX do - local _=P.lockFX[i] + _=P.lockFX[i] _[2]=_[2]-30*amount--calculated pos!Must *=-30 end for i=1,#P.dropFX do - local _=P.dropFX[i] + _=P.dropFX[i] _[4],_[6]=_[4]+amount,_[6]+amount end if #P.field>40 then P:lose()end @@ -1110,8 +1156,19 @@ function player.lock(P) end end end +local OspinList={ + {111,5,2, 0,-1,0},{111,5,2,-1,-1,0},{111,5,0,-1, 0,0},--T + {333,5,2,-1,-1,0},{333,5,2, 0,-1,0},{333,5,0, 0, 0,0},--T + {313,1,2,-1, 0,0},{313,1,2, 0,-1,0},{313,1,2, 0, 0,0},--Z + {131,2,2, 0, 0,0},{131,2,2,-1,-1,0},{131,2,2,-1, 0,0},--S + {113,3,2,-1,-1,0},{331,3,0,-1, 0,0},{331,3,2, 0, 0,0},--L + {331,4,2, 0,-1,0},{113,4,0, 0, 0,0},{113,4,2,-1, 0,0},--J + {222,7,2,-1, 0,1},{222,7,2,-2, 0,1},{222,7,2, 0, 0,1},--I + {121,6,0, 1,-1,1},{112,6,0, 2,-1,2},{122,6,0, 1,-2,2},--O + {323,6,0,-1,-1,2},{332,6,0,-2,-1,2},{322,6,0,-1,-2,2},--O +}--{key,id,dir,dx,dy,freeLv(0=unmovable,1=↔Unmvb,2=free)} function player.spin(P,d,ifpre) - if P.cur.id==6 then--O-spin! + if P.cur.id==6 then--O-spin!Ohhhhhhhhhhhhhhhhhhhhhhhhhh if P.human then SFX.play("rotate",nil,getBlockPosition(P)) end @@ -1130,7 +1187,7 @@ function player.spin(P,d,ifpre) local id,dir=L[2],L[3] local bk=blocks[id][dir] local x,y=P.curX+L[4],P.curY+L[5] - if not P:ifoverlap(bk,x,y)and P:ifoverlap(bk,x,y+1)and(L[6]or P:ifoverlap(bk,x-1,y)and P:ifoverlap(bk,x+1,y))then + if not P:ifoverlap(bk,x,y)and(L[6]>0 or P:ifoverlap(bk,x-1,y)and P:ifoverlap(bk,x+1,y))and(L[6]==2 or P:ifoverlap(bk,x,y-1))and P:ifoverlap(bk,x,y+1)then local C=P.cur C.id=id C.bk=bk @@ -1140,6 +1197,7 @@ function player.spin(P,d,ifpre) P.spinLast=2 P.stat.rotate=P.stat.rotate+1 P:freshgho() + P.spinSeq=0 SFX.play("rotatekick",nil,getBlockPosition(P)) return end @@ -1192,8 +1250,11 @@ function player.resetBlock(P) P.r,P.c=#P.cur.bk,#P.cur.bk[1] --row/column P.curX=initCenterX[id]-sc[2] P.curY=initCenterY[id]-sc[1]+ceil(P.fieldBeneath/30) - if abs(P.moving)>P.gameEnv.das and not P:ifoverlap(P.cur.bk,P.curX+(P.moving>0 and 1 or -1),P.curY)then - P.curX=P.curX+(P.moving>0 and 1 or -1) + if P.gameEnv.ims and(P.keyPressing[1]and P.movDir==-1 or P.keyPressing[2]and P.movDir==1)and P.moving>=P.gameEnv.das then + local x=P.curX+P.movDir + if not P:ifoverlap(P.cur.bk,x,P.curY)then + P.curX=x + end end --IMS end @@ -1201,10 +1262,8 @@ function player.hold(P,ifpre) if not P.holded and (ifpre or P.waiting==-1) and P.gameEnv.hold then --Finesse check local H,B=P.hd,P.cur - if H and H.id==B.id and H.name==B.name then - P:fineError(1.5) - elseif P.ctrlCount>1 then - P:fineError(2) + if H and H.id==B.id and H.name==B.name or P.ctrlCount>1 then + P:fineError(1) end P.holded=P.gameEnv.oncehold @@ -1216,9 +1275,7 @@ function player.hold(P,ifpre) P.hd.bk=blocks[hid][P.gameEnv.face[hid]] if P.cur.id==0 then P.cur=rem(P.next,1) - if #P.next2 then dospin=dospin+1 end end--三角 ::NTC:: - if P.cur.id~=6 and P:ifoverlap(P.cur.bk,P.curX-1,P.curY)and P:ifoverlap(P.cur.bk,P.curX+1,P.curY)and P:ifoverlap(P.cur.bk,P.curX,P.curY+1)then + if P:ifoverlap(P.cur.bk,P.curX-1,P.curY)and P:ifoverlap(P.cur.bk,P.curX+1,P.curY)and P:ifoverlap(P.cur.bk,P.curX,P.curY+1)then dospin=dospin+2 end--卡块 end @@ -1398,6 +1458,10 @@ function player.drop(P)--Place piece _=P.clearedRow[i] freeRow.discard(rem(P.field,_)) freeRow.discard(rem(P.visTime,_)) + if _<=P.garbageBeneath then + P.garbageBeneath=P.garbageBeneath-1 + gbcc=gbcc+1 + end end end --清除超高特效 @@ -1424,16 +1488,8 @@ function player.drop(P)--Place piece dir=dir-2 end end--SZI的逆态视为顺态 - local R,I=P.ctrlCount,finesseCtrlPar[id][dir][P.curX]--Real key/Ideal key - local d=R-I - if d>0 then - if I==0 then I=1 end - local rate=R/I - if rate>2.5 then rate=2.5 end - P:fineError(rate) - --非最简 + local d=P.ctrlCount-finesseCtrlPar[id][dir][P.curX]if d>=2 then P:fineError(2)elseif d>0 then P:fineError(d)end --非最简 end - end if cc>0 then cmb=cmb+1 @@ -1441,123 +1497,123 @@ function player.drop(P)--Place piece cscore=1000 if P.b2b>1000 then P:showText(text.techrashB3B,0,-30,50,"fly") - send=6 + atk=6 sendTime=100 exblock=exblock+1 cscore=cscore*1.8 - P.stat.b3b=P.stat.b3b+1 + STAT.b3b=STAT.b3b+1 if P.human then - VOICE("b3b",CHN) + VOC.play("b3b",CHN) end elseif P.b2b>=50 then P:showText(text.techrashB2B,0,-30,50,"drive") sendTime=80 - send=5 + atk=5 cscore=cscore*1.3 - P.stat.b2b=P.stat.b2b+1 + STAT.b2b=STAT.b2b+1 if P.human then - VOICE("b2b",CHN) + VOC.play("b2b",CHN) end else P:showText(text.techrash,0,-30,70,"stretch") sendTime=60 - send=4 + atk=4 end P.b2b=P.b2b+120 P.lastClear=74 - P.stat.clear_4=P.stat.clear_4+1 if P.human then - VOICE("techrash",CHN) + VOC.play("techrash",CHN) end elseif cc>0 then - local clearKey=clear_n if dospin then cscore=spinSCR[P.cur.name][cc] if P.b2b>1000 then P:showText(text.b3b..text.spin[P.cur.name]..text.clear[cc],0,-30,35,"spin") - send=b2bATK[cc]+.5*cc + atk=b2bATK[cc]+cc-1 exblock=exblock+1 cscore=cscore*2 - P.stat.b3b=P.stat.b3b+1 + STAT.b3b=STAT.b3b+1 if P.human then - VOICE("b3b",CHN) + VOC.play("b3b",CHN) end elseif P.b2b>=50 then P:showText(text.b2b..text.spin[P.cur.name]..text.clear[cc],0,-30,35,"spin") - send=b2bATK[cc] + atk=b2bATK[cc] cscore=cscore*1.2 - P.stat.b2b=P.stat.b2b+1 + STAT.b2b=STAT.b2b+1 if P.human then - VOICE("b2b",CHN) + VOC.play("b2b",CHN) end else P:showText(text.spin[P.cur.name]..text.clear[cc],0,-30,45,"spin") - send=2*cc + atk=2*cc end - sendTime=20+send*20 + sendTime=20+atk*20 if mini then P:showText(text.mini,0,-80,35,"appear") - send=send*.5 + atk=atk*.5 sendTime=sendTime+60 cscore=cscore*.6 P.b2b=P.b2b+b2bPoint[cc]*.5 if P.human then - VOICE("mini",CHN) + VOC.play("mini",CHN) end else P.b2b=P.b2b+b2bPoint[cc] end P.lastClear=P.cur.id*10+cc - clearKey=spin_n if P.human then SFX.play(spin_n[cc]) - VOICE(spinName[P.cur.name],CHN) + VOC.play(spinName[P.cur.name],CHN) end elseif not clear then P.b2b=max(P.b2b-250,0) P:showText(text.clear[cc],0,-30,27+cc*3,"appear",(8-cc)*.3) - send=cc-.75 - sendTime=20+send*20 + atk=cc-.75 + sendTime=20+atk*20 cscore=cscore+clearSCR[cc] P.lastClear=cc end - P.stat[clearKey[cc]]=P.stat[clearKey[cc]]+1 if P.human then - VOICE(clearName[cc],CHN) + VOC.play(clearName[cc],CHN) end end sendTime=sendTime+25*cmb if cmb>2 then - send=send+(comboAtk[cmb]or 2) + atk=atk+(comboAtk[cmb]or 2) P:showText(text.cmb[min(cmb,20)],0,25,15+min(cmb,25)*3,cmb<10 and"appear"or"flicker") cscore=cscore+min(20*cmb,300)*cc end if clear then if #P.field==0 then P:showText(text.PC,0,-80,50,"flicker") - send=send^.5+min(6+P.stat.pc,10) + atk=atk^.5+min(6+STAT.pc,10) exblock=exblock+2 sendTime=sendTime+120 - if P.stat.row+cc>4 then + if STAT.row+cc>4 then P.b2b=1200 - cscore=cscore+300*min(6+P.stat.pc,10) + cscore=cscore+300*min(6+STAT.pc,10) else cscore=cscore+626 end - P.stat.pc=P.stat.pc+1 + STAT.pc=STAT.pc+1 P.lastClear=P.cur.id*10+5 - else - P:showText(text.C,0,-80,50,"fly") - send=send+2 + if P.human then + SFX.play("clear") + VOC.play("pc",CHN) + end + elseif cc>1 or #P.field==P.garbageBeneath then + P:showText(text.HPC,0,-80,50,"fly") + atk=atk+2 exblock=exblock+2 sendTime=sendTime+60 cscore=cscore+626 - P.stat.c=P.stat.c+1 + STAT.hpc=STAT.hpc+1 P.lastClear=cc - end - if P.human then - SFX.play("clear") - VOICE("pc",CHN) + if P.human then + SFX.play("clear") + VOC.play("pc",CHN) + end end end if P.human then @@ -1571,13 +1627,12 @@ function player.drop(P)--Place piece if modeEnv.royaleMode then local i=min(#P.atker,9) if i>1 then - send=send+reAtk[i] + atk=atk+reAtk[i] exblock=exblock+reDef[i] end end--Bonus atk/def when focused - + local send=atk if send>0 then - P.stat.atk=P.stat.atk+int(send) --ATK statistics if exblock then exblock=int(exblock*(1+P.strength*.25))end send=int(send*(1+P.strength*.25)) @@ -1631,7 +1686,6 @@ function player.drop(P)--Place piece if T then P:garbageSend(T,send,sendTime,1,P.cur.color,P.lastClear,dospin,mini,cmb) end - P.stat.send=P.stat.send+send if P.human and send>3 then SFX.play("emit",min(send,8)*.1)end end end @@ -1641,10 +1695,9 @@ function player.drop(P)--Place piece if dospin then P:showText(text.spin[P.cur.name],0,-30,45,"appear") P.b2b=P.b2b+20 - P.stat.spin_0=P.stat.spin_0+1 if P.human then SFX.play("spin_0") - VOICE(spinName[P.cur.name],CHN) + VOC.play(spinName[P.cur.name],CHN) end dropScore=25--spin bonus end @@ -1670,11 +1723,33 @@ function player.drop(P)--Place piece P:garbageRelease() end P.combo=cmb - P.stat.score=P.stat.score+int(cscore) - P.stat.piece,P.stat.row=P.stat.piece+1,P.stat.row+cc + + local n=P.cur.name + if dospin then + _=STAT.spin[n] _[cc+1]=_[cc+1]+1--spin[1/2/3/4/5/6/7][0/1/2/3] + _=STAT.spin_S _[cc+1]=_[cc+1]+1--spin[0/1/2/3] + _=STAT.spin_B _[n]=_[n]+1--spin[1/2/3/4/5/6/7] + elseif cc>0 then + _=STAT.clear[n] _[cc]=_[cc]+1--clear[1/2/3/4/5/6/7][1/2/3/4] + _=STAT.clear_S _[cc]=_[cc]+1--clear[1/2/3/4] + _=STAT.clear_B _[n]=_[n]+1--clear[1/2/3/4/5/6/7] + end + + STAT.score=STAT.score+int(cscore) + STAT.piece=STAT.piece+1 + STAT.row=STAT.row+cc + STAT.atk=STAT.atk+atk + STAT.send=STAT.send+send + if gbcc>0 then + STAT.dig=STAT.dig+gbcc + STAT.digatk=STAT.digatk+atk*gbcc/cc + end + --Update stat _=P.gameEnv.dropPiece if _ then _(P)end + --drop event if P.human then SFX.play("lock",nil,getBlockPosition(P))end + --stereo SFX end function player.pressKey(P,i) P.keyPressing[i]=true @@ -1698,7 +1773,7 @@ end ---------------------------------------------------- local function gameOver() - saveData() + FILE.saveData() local M=curMode local R=M.getRank if R then @@ -1716,7 +1791,7 @@ local function gameOver() end end end - saveUnlock() + FILE.saveUnlock() end local D=M.score(P) local L=M.records @@ -1737,7 +1812,7 @@ local function gameOver() D.date=os.date("%Y/%m/%d %H:%M") ins(L,p+1,D) if L[11]then L[11]=nil end - saveRecord(M.saveFileName,L) + FILE.saveRecord(M.saveFileName,L) end end end @@ -1749,7 +1824,7 @@ function player.die(P)--Same thing when win/lose,not really die! P.update=Pupdate_dead P.waiting=1e99 P.b2b=0 - clearTask(P) + TASK.clear(P) for i=1,#P.atkBuffer do P.atkBuffer[i].sent=true P.atkBuffer[i].time=0 @@ -1775,12 +1850,12 @@ function player.win(P,result) if P.human then gameResult=result or"win" SFX.play("win") - VOICE("win") + VOC.play("win") if modeEnv.royaleMode then BGM.play("8-bit happiness") end end - newTask(Event_task.finish,P) + TASK.new(tickEvent.finish,P) if curMode.id=="custom_puzzle"then P:showTextF(text.win,0,0,90,"beat",.4) else @@ -1791,7 +1866,7 @@ function player.win(P,result) end end function player.lose(P) - if P.invincible then + if P.life>0 then for _=#P.field,1,-1 do freeRow.discard(P.field[_]) freeRow.discard(P.visTime[_]) @@ -1800,6 +1875,7 @@ function player.lose(P) if P.AI_mode=="CC"then P.AI_needFresh=true end + P.life=P.life-1 return end P:die() @@ -1832,7 +1908,7 @@ function player.lose(P) end P.lastRecv=A if P.id==1 or A.id==1 then - newTask(Event_task.throwBadge,A,{P,max(3,P.badge)*4}) + TASK.new(tickEvent.throwBadge,A,{P,max(3,P.badge)*4}) end freshMostBadge() end @@ -1854,7 +1930,7 @@ function player.lose(P) if P.human then gameResult="lose" SFX.play("fail") - VOICE("lose") + VOC.play("lose") if modeEnv.royaleMode then BGM.play("end")end end if #players.alive==1 then @@ -1863,7 +1939,7 @@ function player.lose(P) if #players==1 or(P.human and not players[2].human)then gameOver() end - newTask(#players>1 and Event_task.lose or Event_task.finish,P) + TASK.new(#players>1 and tickEvent.lose or tickEvent.finish,P) end -------------------------<\Events>-------------------------- @@ -1873,6 +1949,7 @@ function player.act.moveLeft(P,auto) if not auto then P.ctrlCount=P.ctrlCount+1 end + P.movDir=-1 if P.keyPressing[9]then if P.gameEnv.swap then P:changeAtkMode(1) @@ -1884,21 +1961,20 @@ function player.act.moveLeft(P,auto) P:freshgho() if P.gameEnv.easyFresh or y0~=P.curY then P:freshLockDelay()end if P.human and P.curY==P.y_img then SFX.play("move")end + if not auto then P.moving=0 end P.spinLast=false - if not auto then - P.moving=-1 - end else - P.moving=-P.gameEnv.das-1 + P.moving=P.gameEnv.das end else - P.moving=-1 + P.moving=0 end end function player.act.moveRight(P,auto) if not auto then P.ctrlCount=P.ctrlCount+1 end + P.movDir=1 if P.keyPressing[9]then if P.gameEnv.swap then P:changeAtkMode(2) @@ -1910,15 +1986,13 @@ function player.act.moveRight(P,auto) P:freshgho() if P.gameEnv.easyFresh or y0~=P.curY then P:freshLockDelay()end if P.human and P.curY==P.y_img then SFX.play("move")end + if not auto then P.moving=0 end P.spinLast=false - if not auto then - P.moving=1 - end else - P.moving=P.gameEnv.das+1 + P.moving=P.gameEnv.das end else - P.moving=1 + P.moving=0 end end function player.act.rotRight(P) @@ -1993,7 +2067,7 @@ function player.act.func(P) end function player.act.restart(P) if P.gameEnv.quickR or frame<180 then - clearTask("play") + TASK.clear("play") resetPartGameData() end end @@ -2105,7 +2179,7 @@ end -------------------------------------------------- function newDemoPlayer(id,x,y,size) local P={id=id}players[id]=P - P.invincible=true + P.life=1e99 for k,v in next,player do P[k]=v end players.alive[#players.alive+1]=P P.x,P.y,P.size=x,y,size @@ -2123,12 +2197,15 @@ function newDemoPlayer(id,x,y,size) P.timing=false P.stat={ time=0,score=0, - key=0,extraPiece=0,extraRate=0, - rotate=0,hold=0,piece=0,row=0, - atk=0,send=0,recv=0,pend=0, - clear_1=0,clear_2=0,clear_3=0,clear_4=0, - spin_0=0,spin_1=0,spin_2=0,spin_3=0, - pc=0,c=0,b2b=0,b3b=0, + key=0,rotate=0,hold=0, + extraPiece=0,extraRate=0, + piece=0,row=0,dig=0, + atk=0,digatk=0,send=0,recv=0,pend=0, + clear_S={0,0,0,0},clear_B={0,0,0,0,0,0,0}, + spin_S={0,0,0,0},spin_B={0,0,0,0,0,0,0}, + clear={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}, + spin={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}, + pc=0,hpc=0,b2b=0,b3b=0, } P.modeData={point=0,event=0,counter=0} P.keyTime={}P.keySpeed=0 @@ -2189,8 +2266,8 @@ function newDemoPlayer(id,x,y,size) P.spinSeq=0 P.ctrlCount=0 + freshPrepare.bag7(P) P.newNext=freshMethod.bag7 - P:newNext() P.human=false P.AI_mode="CC" @@ -2219,10 +2296,11 @@ function newDemoPlayer(id,x,y,size) P.showTime=1e99 P.keepVisible=true P.keyPressing={}for i=1,12 do P.keyPressing[i]=false end - P.moving,P.downing=0,0 + P.movDir,P.moving,P.downing=0,0,0 P.waiting,P.falling=-1,-1 P.clearingRow,P.clearedRow={},{} P.combo,P.b2b=0,0 + P.garbageBeneath=0 P.fieldBeneath=0 P.score1,P.b2b1=0,0 P.dropFX,P.lockFX={},{} @@ -2235,6 +2313,7 @@ end function newPlayer(id,x,y,size,AIdata) players[id]={id=id} local P=players[id] + P.life=0 for k,v in next,player do P[k]=v end--inherit functions of player class players.alive[#players.alive+1]=P P.x,P.y,P.size=x,y,size or 1 @@ -2262,12 +2341,15 @@ function newPlayer(id,x,y,size,AIdata) P.timing=false P.stat={ time=0,score=0, - key=0,extraPiece=0,extraRate=0, - rotate=0,hold=0,piece=0,row=0, - atk=0,send=0,recv=0,pend=0, - clear_1=0,clear_2=0,clear_3=0,clear_4=0, - spin_0=0,spin_1=0,spin_2=0,spin_3=0, - pc=0,c=0,b2b=0,b3b=0, + key=0,rotate=0,hold=0, + extraPiece=0,extraRate=0, + piece=0,row=0,dig=0, + atk=0,digatk=0,send=0,recv=0,pend=0, + clear_S={0,0,0,0},clear_B={0,0,0,0,0,0,0}, + spin_S={0,0,0,0},spin_B={0,0,0,0,0,0,0}, + clear={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}, + spin={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}, + pc=0,hpc=0,b2b=0,b3b=0, }--Current gamestat P.modeData={point=0,event=0,counter=0}--data use by mode P.keyTime={}for i=1,10 do P.keyTime[i]=-1e5 end P.keySpeed=0 @@ -2296,7 +2378,7 @@ function newPlayer(id,x,y,size,AIdata) ENV.sdarr=max(ENV.sdarr,ENV.minsdarr) P.cur={bk={{}},id=0,color=0,name=0}--shape,shapeID,colorID,nameID - P.sc,P.dir,P.r,P.c={0,0},0,0,0--spinCenter,direction,row,col + P.sc,P.dir,P.r,P.c={0,0},0,0,0--IMG.spinCenter,direction,row,col P.curX,P.curY,P.y_img=0,0,0--x,y,ghostY P.hd={bk={{}},id=0,color=0,name=0} P.holded=false @@ -2308,15 +2390,12 @@ function newPlayer(id,x,y,size,AIdata) P.spinSeq=0--for Ospin,each digit mean a spin P.ctrlCount=0--key press time,for finesse check - P.his={rnd(7),rnd(7),rnd(7),rnd(7)} + freshPrepare[ENV.sequence](P) P.newNext=freshMethod[ENV.sequence] - if ENV.sequence~="none"then - while #P.next1.26 then C[i]=1.26+((C[i]-1.26)+1)^.5-1 end + D[i]=D[i]*B[i]if D[i]>1.26 then D[i]=1.26+((D[i]-1.26)+1)^.5-1 end + end--normalize V1/V2 + A[1]=format("%.1fAPM",A[1]) + A[2]=format("%.1fL'PM",A[2]) + A[3]=format("%.1fRPM",A[3]) + A[4]=format("%.1fAPL",A[4]) + local s + if C[1]<.5 and C[2]<.5 and C[3]<.5 and C[4]<.5 and D[1]<.5 and D[2]<.5 and D[3]<.5 and D[4]<.5 then + _.color1={.4,.9,.5} + _.color2={.7,.5,.3} + s=1.26 + --Vegetable + elseif C[1]>1 or C[2]>1 or C[3]>1 or C[4]>1 or D[1]>1 or D[2]>1 or D[3]>1 or D[4]>1 then + _.color1={1,.3,.3} + _.color2={.4,.2,0} + s=.8 + --Diao + else + _.color1={.4,.7,.9} + _.color2={.6,.3,.26} + s=1 + --NORMAL + end + sceneTemp.scale=s + s=s*126 + _.standard={ + 0,-s, + s,0, + 0,s, + -s,0, + } + sceneTemp.V1={ + 0, -C[1]*s, + C[2]*s,0, + 0, C[3]*s, + -C[4]*s,0, + 0, -C[1]*s + } + sceneTemp.V2={ + 0, -D[1]*s, + D[2]*s,0, + 0, D[3]*s, + -D[4]*s,0, + 0, -D[1]*s } end, setting_game=function() - curBG="none" + BG.set("space") end, setting_graphic=function() - curBG="none" + BG.set("space") end, setting_sound=function() sceneTemp={last=0,jump=0}--last sound time,animation count(10→0) - curBG="none" + BG.set("space") end, setting_control=function() sceneTemp={ @@ -121,7 +195,7 @@ local sceneInit={ dir=1, wait=30, } - curBG="strap" + BG.set("strap") end, setting_key=function() sceneTemp={ @@ -131,7 +205,7 @@ local sceneInit={ } end, setting_touch=function() - curBG="game2" + BG.set("game2") sceneTemp={ default=1, snap=1, @@ -139,34 +213,42 @@ local sceneInit={ } end, setting_touchSwitch=function() - curBG="matrix" + BG.set("matrix") end, help=function() - curBG="none" + sceneTemp={ + pw=0, + } + BG.set("space") end, stat=function() local S=stat sceneTemp={ - S.run, - S.game, - toTime(S.time), - S.key, - S.rotate, - S.hold, - S.piece, - S.row, - S.atk.."("..S.send..")", - format("%d(%d-%d)",S.pend,S.recv,S.recv-S.pend), - format("%d/%d/%d/%d",S.clear_1,S.clear_2,S.clear_3,S.clear_4), - format("[%d]/%d/%d/%d",S.spin_0,S.spin_1,S.spin_2,S.spin_3), - S.b2b.."[+"..S.b3b.."]", - S.pc.."["..S.c.."]", - format("%.2f",S.atk/S.row), - format("%d[%.3f%%]",S.extraPiece,100*max(1-S.extraRate/S.piece,0)), + chart={ + A1=S.spin,A2=S.clear, + X1=S.spin_S,X2=S.clear_S, + Y1=S.spin_B,Y2=S.clear_B, + }, + item={ + S.run, + S.game, + toTime(S.time), + S.key.." "..S.rotate.." "..S.hold, + S.piece.." "..S.row.." "..int(S.atk), + S.recv.." "..(S.recv-S.pend).." "..S.pend, + S.dig.." "..int(S.digatk), + format("%.2f %.2f",S.atk/S.row,S.digatk/S.dig), + format("%d/%.3f%%",S.extraPiece,100*max(1-S.extraRate/S.piece,0)), + S.b2b.." "..S.b3b, + S.pc.." "..S.hpc, + } } + for i=1,11 do + sceneTemp.item[i]=text.stat[i].."\t"..sceneTemp.item[i] + end end, history=function() - curBG="strap" + BG.set("strap") sceneTemp={require("updateLog"),1}--scroll pos end, quit=function() @@ -198,33 +280,50 @@ local backFunc={ load=love.event.quit, pause=function() love.keyboard.setKeyRepeat(true) - updateStat() - clearTask("play") + mergeStat(stat,players[1].stat) + TASK.clear("play") end, - setting_touch= function()saveVK()end, - setting_key= function()saveKeyMap()end, - setting_game= function()saveSetting()end, - setting_graphic=function()saveSetting()end, - setting_sound= function()saveSetting()end, + setting_touch= function()FILE.saveVK()end, + setting_key= function()FILE.saveKeyMap()end, + setting_game= function()FILE.saveSetting()end, + setting_graphic=function()FILE.saveSetting()end, + setting_sound= function()FILE.saveSetting()end, } -function scene.init(s,org) - if sceneInit[s]then sceneInit[s](org)end -end -function scene.push(tar,style) - if not scene.swapping then - local m=#scene.seq - scene.seq[m+1]=tar or scene.cur - scene.seq[m+2]=style or"fade" +function SCN.swapUpdate() + local S=SCN.swap + S.time=S.time-1 + if S.time==S.mid then + SCN.init(S.tar,SCN.cur) + SCN.cur=S.tar + for _,W in next,Widget[S.tar]do + W:reset() + end--重置控件 + widget_sel=nil + collectgarbage() + --此时场景切换 + end + if S.time==0 then + SCN.swapping=false end end -function scene.pop() - local _=scene.seq +function SCN.init(s,org) + if sceneInit[s]then sceneInit[s](org)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 +end +function SCN.pop() + local _=SCN.seq _[#_-1]=nil end -function scene.swapTo(tar,style) - local S=scene.swap - if not scene.swapping and tar~=scene.cur then - scene.swapping=true +function SCN.swapTo(tar,style) + local S=SCN.swap + if not SCN.swapping and tar~=SCN.cur then + SCN.swapping=true if not style then style="fade"end S.tar=tar S.style=style @@ -235,14 +334,14 @@ function scene.swapTo(tar,style) widget_sel=nil end end -function scene.back() - if backFunc[scene.cur] then backFunc[scene.cur]()end +function SCN.back() + if backFunc[SCN.cur] then backFunc[SCN.cur]()end --func when scene end - local m=#scene.seq + local m=#SCN.seq if m>0 then - scene.swapTo(scene.seq[m-1],scene.seq[m]) - scene.seq[m],scene.seq[m-1]=nil + SCN.swapTo(SCN.seq[m-1],SCN.seq[m]) + SCN.seq[m],SCN.seq[m-1]=nil --Poll&Back to preScene end end -return scene \ No newline at end of file +return SCN \ No newline at end of file diff --git a/shader/alpha.cs b/shader/alpha.cs new file mode 100644 index 00000000..4fd443c3 --- /dev/null +++ b/shader/alpha.cs @@ -0,0 +1,5 @@ +extern float a; +vec4 effect(vec4 color, Image text,vec2 pos,vec2 scr_pos){ + if(Texel(text,pos)[3]==0.)discard; + return vec4(1.,1.,1.,a); +} \ No newline at end of file diff --git a/texture.lua b/texture.lua index d7124162..f63a933a 100644 --- a/texture.lua +++ b/texture.lua @@ -65,10 +65,18 @@ drawableText={ mxcmb=T(20,"Max Combo"), pc=T(20,"Perfect Clear"), ko=T(25,"KO"), + C=T(100,"C"), + B=T(100,"B"), + A=T(100,"A"), + S=T(100,"S"), + SS=T(80,"SS"), + modeName=T(30),levelName=T(30), - next=T(40),hold=T(40), + + anykey=T(40), + next=T(40),hold=T(40), win=T(120),finish=T(120), lose=T(120),pause=T(120), diff --git a/timer.lua b/timer.lua index b96bf85a..1dfbe2e7 100644 --- a/timer.lua +++ b/timer.lua @@ -7,82 +7,56 @@ local ins,rem=table.insert,table.remove local Tmr={} function Tmr.load() local t=Timer() - local L=sceneTemp + local S=sceneTemp ::R:: --L={stage,curPos,curLen} - if L[1]==1 then - local N=voiceName[L[2]] + if S.phase==1 then + local N=voiceName[S.cur] for i=1,#voiceList[N]do local V=voiceList[N][i] voiceBank[V]={love.audio.newSource("VOICE/"..V..".ogg","static")} end - L[2]=L[2]+1 - if L[2]>L[3]then - L[1],L[2],L[3]=2,1,#BGM.list - end - elseif L[1]==2 then - BGM.loadOne(L[2]) - L[2]=L[2]+1 - if L[2]>L[3]then - L[1],L[2],L[3]=3,1,#SFX.list - end - elseif L[1]==3 then - SFX.loadOne(L[2]) - L[2]=L[2]+1 - if L[2]>L[3]then - L[1],L[2],L[3]=4,1,#modes - end - elseif L[1]==4 then - local m=modes[L[2]] - modes[L[2]]=require("modes/"..m[1]) - local M=modes[L[2]] + elseif S.phase==2 then + BGM.loadOne(S.cur) + elseif S.phase==3 then + SFX.loadOne(S.cur) + elseif S.phase==4 then + IMG.loadOne(S.cur) + elseif S.phase==5 then + local m=modes[S.cur] + modes[S.cur]=require("modes/"..m[1]) + local M=modes[S.cur] M.saveFileName,M.id=m[1],m.id M.x,M.y,M.size,M.shape=m.x,m.y,m.size,m.shape M.unlock=m.unlock - M.records=loadRecord(m[1])or M.score and{} + M.records=FILE.loadRecord(m[1])or M.score and{} -- M.icon=gc.newImage("image/modeIcon/"..m.icon..".png") -- M.icon=gc.newImage("image/modeIcon/custom.png") - L[2]=L[2]+1 - if L[2]>L[3]then - L[1],L[2],L[3]=5,1,1 - end - elseif L[1]==5 then + elseif S.phase==6 then --------------------------Loading some other things here? - local N=gc.newImage - titleImage=N("/image/mess/title.png") - coloredTitleImage=N("/image/mess/title_colored.png") - dialCircle=N("/image/mess/dialCircle.png") - dialNeedle=N("/image/mess/dialNeedle.png") - badgeIcon=N("/image/mess/badge.png") - spinCenter=N("/image/mess/spinCenter.png") - ctrlSpeedLimit=N("/image/mess/ctrlSpeedLimit.png") - speedLimit=N("/image/mess/speedLimit.png") - - background1=N("/image/BG/bg1.png") - background2=N("/image/BG/bg2.png") - groupCode=N("/image/mess/groupCode.png") - payCode=N("/image/mess/payCode.png") - - miya={ - ch=N("/image/miya/ch.png"), - f1=N("/image/miya/f1.png"), - f2=N("/image/miya/f2.png"), - f3=N("/image/miya/f3.png"), - f4=N("/image/miya/f4.png"), - } skin.load() + stat.run=stat.run+1 -------------------------- - L[1],L[2],L[3]=0,1,1 SFX.play("welcome",.2) else - L[2]=L[2]+1 - L[3]=L[2] - if L[2]>50 then - stat.run=stat.run+1 - scene.swapTo("intro","none") + S.cur=S.cur+1 + S.tar=S.cur + if S.cur>62.6 then + SCN.swapTo("intro","none") + end + return + end + S.cur=S.cur+1 + if S.cur>S.tar then + S.phase=S.phase+1 + S.cur=1 + S.tar=S.list[S.phase] + if not S.tar then + S.phase=0 + S.tar=1 end end - if L.skip and not scene.swapping then goto R end + if S.skip and not SCN.swapping then goto R end end function Tmr.intro() sceneTemp=sceneTemp+1 @@ -114,7 +88,7 @@ function Tmr.mode(dt) local cam=mapCam local x,y,k=cam.x,cam.y,cam.k local F - if not scene.swapping then + if not SCN.swapping then if kb.isDown("up", "w")then y=y-10*k;F=true end if kb.isDown("down","s")then y=y+10*k;F=true end if kb.isDown("left","a")then x=x-10*k;F=true end @@ -164,11 +138,11 @@ function Tmr.mode(dt) end cam.x,cam.y=x,y --keyboard controlling - + cam.x1=cam.x1*.85+x*.15 cam.y1=cam.y1*.85+y*.15 cam.k1=cam.k1*.85+k*.15 - local _=scene.swap.tar + local _=SCN.swap.tar cam.zoomMethod=_=="play"and 1 or _=="mode"and 2 if cam.zoomMethod==1 then if cam.sel then @@ -220,8 +194,9 @@ function Tmr.play(dt) rem(FX_badge,i) end end + local _ for i=1,#virtualkey do - local _=virtualkey[i] + _=virtualkey[i] if _.pressTime>0 then _.pressTime=_.pressTime-1 end @@ -235,14 +210,8 @@ function Tmr.play(dt) end for p=1,#players do local P=players[p] - if P.keyPressing[1]then - if P.moving>0 then P.moving=0 end - if -P.moving<=P.gameEnv.das then - P.moving=P.moving-1 - end - elseif P.keyPressing[2]then - if P.moving<0 then P.moving=0 end - if P.moving<=P.gameEnv.das then + if P.movDir~=0 then + if P.moving20 then - clearTask("play") - updateStat() + TASK.clear("play") + mergeStat(stat,players[1].stat) resetGameData() return end @@ -266,7 +235,12 @@ function Tmr.play(dt) local P=players[p] P:update(dt) end - if modeEnv.royaleMode and frame%120==0 then freshMostDangerous()end + if frame%120==0 then + if modeEnv.royaleMode then freshMostDangerous()end + if marking and rnd()<.2 then + TEXT.show("游戏作者:MrZ_26\n出现此水印则为非法录屏上传",rnd(162,scr.w-162),rnd(126,scr.h-200),40,"mark",.626) + end--mark 2s each 10s + end end function Tmr.pause(dt) if not gameResult then diff --git a/toolfunc.lua b/toolfunc.lua index e90bfdc0..4e3635ae 100644 --- a/toolfunc.lua +++ b/toolfunc.lua @@ -19,9 +19,12 @@ end function mStr(s,x,y) gc.printf(s,x-320,y,640,"center") end -function mDraw(s,x,y) +function mText(s,x,y) gc.draw(s,x-s:getWidth()*.5,y) end +function mDraw(s,x,y) + gc.draw(s,x-s:getWidth()*.5,y-s:getHeight()*.5) +end function destroyPlayers() for i=#players,1,-1 do local P=players[i] @@ -48,6 +51,7 @@ end --Single-usage funcs local langID={"chi","chi_full","eng"} local drawableTextLoad={ + "anykey", "next","hold", "win","finish","lose","pause", "custom", @@ -108,6 +112,7 @@ end function copyBoard() local str="" local H=0 + local _ for y=20,1,-1 do for x=1,10 do if preField[y][x]~=0 then @@ -121,13 +126,13 @@ function copyBoard() local S="" local L=preField[y] for x=1,10 do - local _=L[x]+1 + _=L[x]+1 S=S..char(_) end str=str..S end love.system.setClipboardText("Techmino sketchpad:"..data.encode("string","base64",data.compress("string","deflate",str))) - TEXT(text.copySuccess,350,360,40,"appear",.5) + TEXT.show(text.copySuccess,350,360,40,"appear",.5) end function pasteBoard() local str=love.system.getClipboardText() @@ -168,14 +173,17 @@ function pasteBoard() end goto END ::ERROR:: - TEXT(text.dataCorrupted,350,360,35,"flicker",.5) + TEXT.show(text.dataCorrupted,350,360,35,"flicker",.5) ::END:: end -function updateStat() - local S=players[1].stat - for k,v in next,S do - stat[k]=stat[k]+S[k] +function mergeStat(stat,Δ) + for k,v in next,Δ do + if type(v)=="table"then + mergeStat(stat[k],v) + else + stat[k]=stat[k]+v + end end end function randomTarget(P) @@ -218,7 +226,7 @@ end function royaleLevelup() gameStage=gameStage+1 local spd - TEXT(text.royale_remain(#players.alive),640,200,40,"beat",.3) + TEXT.show(text.royale_remain(#players.alive),640,200,40,"beat",.3) if gameStage==2 then spd=30 elseif gameStage==3 then @@ -254,7 +262,7 @@ function royaleLevelup() end end function pauseGame() - if not scene.swapping then + if not SCN.swapping then restartCount=0--Avoid strange darkness if not gameResult then pauseCount=pauseCount+1 @@ -267,11 +275,11 @@ function pauseGame() end end end - scene.swapTo("pause","none") + SCN.swapTo("pause","none") end end function resumeGame() - scene.swapTo("play","none") + SCN.swapTo("play","none") end function loadGame(M) --rec={} @@ -282,7 +290,7 @@ function loadGame(M) drawableText.modeName:set(M.name[lang]) drawableText.levelName:set(M.level[lang]) needResetGameData=true - scene.swapTo("play","fade_togame") + SCN.swapTo("play","fade_togame") SFX.play("enter") end function resetPartGameData() @@ -298,7 +306,7 @@ function resetPartGameData() end if modeEnv.task then for i=1,#players do - newTask(modeEnv.task,players[i]) + TASK.new(modeEnv.task,players[i]) end end if modeEnv.royaleMode then @@ -306,7 +314,7 @@ function resetPartGameData() players[i]:changeAtk(randomTarget(players[i])) end end - curBG=modeEnv.bg + BG.set(modeEnv.bg) BGM.play(modeEnv.bgm) if modeEnv.royaleMode then for i=1,#players do @@ -330,10 +338,10 @@ function resetGameData() curMode.load()--bg/bgm need redefine in custom,so up here if modeEnv.task then for i=1,#players do - newTask(modeEnv.task,players[i]) + TASK.new(modeEnv.task,players[i]) end end - curBG=modeEnv.bg + BG.set(modeEnv.bg) BGM.play(modeEnv.bgm) texts={} diff --git a/updateLog.lua b/updateLog.lua index 9baa3382..53418f14 100644 --- a/updateLog.lua +++ b/updateLog.lua @@ -1,30 +1,49 @@ local S=[=[ -"Patron"(rmb10+)(ordered by first char): +"Patron"(time ordered,may not accurate): + [rmb100+]: + 那没事了(T6300) + 弥佑瑶 + Alan + [rmb10+]: 八零哥 - dtg - Fireboos - gggf127 - 加油啊,钉钉动了的大哥哥(T3228) - 金巧 - 乐↗乐↘ - 立斐 - 仁参 - Sasoric - sfqr - 时雪 - ThTsOd - 夏小亚 - 心痕 蕴空之灵 - yyangdid + gggf127 + dtg + ThTsOd + Fireboos + 金巧 10元 - ?[D*a] + 立斐 + 时雪 + yyangdid + sfqr + 心痕 + Sasoric + 夏小亚 + 加油啊,钉钉动了的大哥哥(T3228) + 仁参 + 乐↗乐↘ + 喜欢c4w的ztcjoin + 面包 + 蠢熏 + 潘一栗 + Lied + 星街书婉 + 込余 + 祝西 + 829 + e m*12 + 我永远爱白银诺艾尔(鹏 + PCX + + + D*a(don't know name) Thanks! Future outlook: New mode: - useful game Abbr. test + game Abbr. test finesse exam(3next,1pt/mino,drop to score) round-based dig Infinite battle @@ -34,18 +53,53 @@ Future outlook: Square Shifting field(left/right) Other: + no recording-upload + warning FX + key pressing SFX bag sep-line switch game recording - (powerinfo switch) + powerinfo switch new virtualWidgets like joysticks custom sequence splashing block more FXs & 3d features & animations Encrypt source code(compile to byte code) - new AI:task-Z + new AI: task-Z CC smarter(think of garbage buffer) - +0.8.16:Fantastic Global Update + new: + new statistic page with: + Radar chart which shows some important info. of player's performance + count each clear/spin for each piece(old data will be splited averagely) + linux version! + welcome vocal by MrZ + rank label on mode icon(C→B→A→S→SS) + new J/L-spin: R→2/L→2(0,-1) + new O-spin-J/L method! + new tele-ospin method! + support out frame of skins with transparent pixels + DAS system remade, no bugs any more!(probably) + Initial hold/rotate/move switch! + display ms in control setting + super secret option + changed: + cannot initial hold in a row any more + new randomizer for drought2 + half-clear judging method changed + new background system(well, it doesn't look much different but space BG) + better sequence randomizer + now can loading at full speed with Dblclick/space/enter + add alipay paycode to help page + code: + first shader applied for white frame of falling block + many many module packed, easy to manage + bgm module changed, probably no bug + 4 devMode now + fixed: + error when set to max 0 next + AI sequence initializing error when face setting changed + DAS error 0.8.15:Bug Fixed new: can switch line-clear text now @@ -53,6 +107,7 @@ Future outlook: give every update a name! changed: animation time of lock effect little changed + bone block of skin: ball changed AI change target more slowly Author.dignity-=1 fixed: @@ -60,7 +115,6 @@ Future outlook: AI will kill itself when spawn dir. of mino changed error when reach 400 in 20G(Lunatic) error block color in modes with starting field - cannot play pctrain mode 0.8.14:Cool FX new: @@ -75,11 +129,11 @@ Future outlook: error garbage line color error in finesse checking some times error when touch screen - touch/press release with no press,then error + touch/press release with no press, then error 0.8.13:O-spin Update++ new: - a independent page to set DAS/ARR,with an animation for preview + a independent page to set DAS/ARR, with an animation for preview changed: new virtualkey animation freer drawing mode(Incompatible with old ver.) @@ -93,15 +147,15 @@ Future outlook: 0.8.12:Bountful Update new: - layout setting:skin system with customizable block color/direction + layout setting: skin system with customizable block color/direction more information when pause block has more color(7→11) - skin:smooth(MrZ),contrast(MrZ),steel(kulumi),ball(shaw) + skin: smooth(MrZ), contrast(MrZ), steel(kulumi), ball(shaw) changed: BGM secret7's Inst. changed more stable space background stat format changed when pause/stat menu - opaque background in pause when playing,transparent after game + opaque background in pause when playing, transparent after game canceled invalid game easier to unlock custom mode some text changed @@ -110,7 +164,7 @@ Future outlook: merge event.lua to player.lua new skin image format same format for all file - better virtualkey-scanning opportunity,bit faster when many AI + better virtualkey-scanning opportunity, bit faster when many AI some player-method name changed fixed: an error of pause button @@ -125,7 +179,8 @@ Future outlook: better rule of checking invalid game can setting when pause opaque background when pause - //many code optimized(moduled) + code: + many code optimized(moduled) fixed: receive attack when paused in survivor mode error when pasteboard has block_13 @@ -145,14 +200,14 @@ Future outlook: 0.8.9:System Detail Update invalid game when pause too much quick play re-added - new BGM:Oxygen(c4w&pc training) + new BGM: Oxygen(c4w&pc training) space background little changed 0.8.8+:Bug-Fix Update fixed many fatal bugs 0.8.8:Space BG Update - background now is cool space with "planets" and "stars",not boring falling tetrominos! + background now is cool space with "planets" and "stars", not boring falling tetrominos! records with date adjustable waiting time before start ajustable maxnext count @@ -163,7 +218,7 @@ Future outlook: no black side in any screen size an unlock-all easter egg cannot press invisible func key - fixed:some mode error + fixed: some mode error add many fatal bugs 0.8.7:Game Detail Update @@ -172,29 +227,29 @@ Future outlook: speed of marathon mode changed shorter clipboard string(when air above) attack system/score system little changed - fixed:rank system,some mode error when enter(again!) + fixed: rank system, some mode error when enter(again!) 0.8.6:System Detail Update gamepad can adjust key add SFX when enter game map GUI little adjusted event system little changed(no ctrl when scene swapping) - fixed:rank system,some mode error when enter + fixed:rank system, some mode error when enter 0.8.5-:Exploration Update mode map!Brandly new GUI for mode selecting - mode unlock system,not that scary for noob + mode unlock system, not that scary for noob every mode has rank calculating method(may some mistakes/inappropriate number) save 10 best recoreds for each mode can save/share custom map now - new mode:Big Bang + new mode: Big Bang button appearance changed better widget performence remove Qplay many bug fixed 0.8.4:Miya Update+ - vocal more natural(important,may cause new bug) + vocal more natural(important, may cause new bug) a bit better performence on mobile devices fatal bug fixed @@ -245,7 +300,7 @@ Future outlook: fixed a problem in finesse calculating 0.7.30:Virtualkey Update - auto-tracking virtual key,adjustable parameters! + auto-tracking virtual key, adjustable parameters! can switch on/off virtuakeys add 7 more key better finesse rate calculating @@ -271,16 +326,16 @@ Future outlook: 0.7.25:Demo Update demo play at main menu - ALMOST reconstructed WHOLE PLAYER SYSTEM,NEED TEST + ALMOST reconstructed WHOLE PLAYER SYSTEM, NEED TEST many bug fixed 0.7.23/24:Feast of Hearing REMAKE ALL BGM! more settings with brand new GUI! - new mode:Master-Final - new modes:attacker & defender(not survivor!) + new mode: Master-Final + new modes: attacker & defender(not survivor!) add restart button when pause - Code Clear added,face it bravely!(Windows only) + Code Clear added, face it bravely!(Windows only) change falling animation new GUI details louder sound @@ -319,7 +374,7 @@ Future outlook: 0.7.19:Voice Update voice system added(voice by Miya) support macOS! - new mode:C4W training + new mode: C4W training rendering of royale mode optimized again add "free cell" in draw mode add 2 new block skins @@ -372,14 +427,14 @@ Future outlook: bugs fixed(AI control error) 0.7.13: - Chinese game name:方块研究所 + Chinese game name: 方块研究所 SUPER COOL instant moving effect new b2b bar style & animation new transition animation change difficulty of master mode - adjust delay algorithm(probably cause controlfeel changing,please reset your DAS setting) + adjust delay algorithm(probably cause controlfeel changing, please reset your DAS setting) code reconstructed - bugs fixed(error when seq=his,size of custom oppo) + bugs fixed(error when seq=his, size of custom oppo) debug key change to F8 0.7.12:Total Update @@ -393,11 +448,11 @@ Future outlook: a bit change of rotate system grid switch swap target by combo key/press - some Chinese translaton edited + some Chinese translaton editted [reconstruct event system] 0.7.11:Total Update - some Chinese translaton edited + some Chinese translaton editted add bone block in 2 hardest marathon(new block-fresh system) play sound when get badges in royale mode change b2b indicator display method @@ -454,7 +509,7 @@ Future outlook: change sequence of TSD-only mode to bag7 0.7.5:Total Update - reduce difficuly of PC training mode,and add more patterns + reduce difficuly of PC training mode, and add more patterns reduce difficuly of death mode add PC challenge mode swapping attack mode for royale mode(AI always use 'Random') @@ -475,7 +530,7 @@ Future outlook: add infinite target in custom fix TSD-only mode result+1 when finishing with a wrong clear change sequence generator of TSD-only mode - GUI position edited + GUI position editted Fix Screen flow smarter AI @@ -483,7 +538,7 @@ Future outlook: add PC training mode add TSD-only mode remove non-sense s/z spin double - GUI position edited + GUI position editted grid BG changed smarter AI ]=] diff --git a/widgetList.lua b/widgetList.lua index f07840e8..7bd87ea2 100644 --- a/widgetList.lua +++ b/widgetList.lua @@ -79,115 +79,69 @@ local customSet={ {3,20,1,1,7,1,1,3,8,3,1,7,8}, {25,11,8,11,4,1,2,1,8,3,1,4,9}, } -local function useDefaultSet(n) - for i=1,#customSet[n]do - customSel[i]=customSet[n][i] +--λFuncs for widgets,delete at file end +function defSet(n) + return function() + for i=1,#customSet[n]do + customSel[i]=customSet[n][i] + end + BG.set(customRange.bg[customSel[12]]) + BGM.play(customRange.bgm[customSel[13]]) end - curBG=customRange.bg[customSel[12]] - BGM.play(customRange.bgm[customSel[13]]) end +function SETval(k) return function()return setting[k] end end +function SETsto(k) return function(i)setting[k]=i end end +function SETrev(k) return function()setting[k]=not setting[k] end end +function pressKey(k)return function()love.keypressed(k) end end +function setPen(i) return function()sceneTemp.pen=i end end +function prevSkin(n)return function()skin.prev(n) end end +function nextSkin(n)return function()skin.next(n) end end +function nextDir(n) return function()skin.rotate(n) end end +function VKAdisp(n) return function()return VK_org[n].ava end end +function VKAcode(n) return function()VK_org[n].ava=not VK_org[n].ava end end -local function DAScheck() - if setting.arr>setting.das then - setting.das=setting.arr - Widget.setting_game.dasU:FX() - SFX.play("blip_1",.4) - end -end -local function ARRcheck() - if setting.arr>setting.das then - setting.arr=setting.das - Widget.setting_game.arrD:FX() - SFX.play("blip_1",.4) - end -end ---λFuncs for widgets -local function SETval(k) - return function() - return setting[k] - end -end -local function SETsto(k) - return function(i)setting[k]=i end -end -local function SETrev(k) - return function() - setting[k]=not setting[k] - end -end -local function pressKey(k) - return function() - love.keypressed(k) - end -end -local function setPen(i) - return function() - sceneTemp.pen=i - end -end -local function VKAdisp(n) - return function() - return VK_org[n].ava - end -end -local function VKAcode(n) - return function() - VK_org[n].ava=not VK_org[n].ava - end -end -local function prevSkin(n) - return function()skin.prev(n)end -end -local function nextSkin(n) - return function()skin.next(n)end -end -local function nextDir(n) - return function() - skin.rotate(n) - end -end local C=color local Widget={ load={},intro={},quit={}, main={ - play= newButton(150,280,200,160,C.lightRed, 55,function()scene.push()scene.swapTo("mode")end, nil,"setting"), - setting=newButton(370,280,200,160,C.lightBlue, 45,function()scene.push()scene.swapTo("setting_game")end, nil,"music"), - music= newButton(590,280,200,160,C.lightPurple, 32,function()scene.push()scene.swapTo("music")end, nil,"help"), - help= newButton(150,460,200,160,C.lightYellow, 50,function()scene.push()scene.swapTo("help")end, nil,"stat"), - stat= newButton(370,460,200,160,C.lightCyan, 43,function()scene.push()scene.swapTo("stat")end, nil,"qplay"), - qplay= newButton(590,460,200,160,C.lightOrange, 43,function()scene.push()loadGame(stat.lastPlay)end, nil,"lang"), + play= newButton(150,280,200,160,C.lightRed, 55,function()SCN.push()SCN.swapTo("mode")end, nil,"setting"), + setting=newButton(370,280,200,160,C.lightBlue, 45,function()SCN.push()SCN.swapTo("setting_game")end, nil,"music"), + music= newButton(590,280,200,160,C.lightPurple, 32,function()SCN.push()SCN.swapTo("music")end, nil,"help"), + help= newButton(150,460,200,160,C.lightYellow, 50,function()SCN.push()SCN.swapTo("help")end, nil,"stat"), + stat= newButton(370,460,200,160,C.lightCyan, 43,function()SCN.push()SCN.swapTo("stat")end, nil,"qplay"), + qplay= newButton(590,460,200,160,C.lightOrange, 43,function()SCN.push()loadGame(stat.lastPlay)end, nil,"lang"), lang= newButton(150,610,160,100,C.lightGreen, 45,function() setting.lang=setting.lang%#langName+1 changeLanguage(setting.lang) - TEXT(text.lang,370,610,50,"appear",1.6) + TEXT.show(text.lang,370,610,50,"appear",1.6) end,nil,"quit"), - quit= newButton(590,610,160,100,C.lightGrey, 45,function()VOICE("bye")scene.swapTo("quit","slowFade")end,nil,"play"), + quit= newButton(590,610,160,100,C.lightGrey, 45,function()VOC.play("bye")SCN.swapTo("quit","slowFade")end,nil,"play"), }, mode={ - draw= newButton(1100, 440,220,90,C.lightYellow, 40,function()scene.push()scene.swapTo("draw")end,function()return mapCam.sel~=71 and mapCam.sel~=72 end), - custom=newButton(1100, 540,220,90,C.lightGreen, 40,function()scene.push()scene.swapTo("custom")end,function()return mapCam.sel~=71 and mapCam.sel~=72 end), - start= newButton(1040, 655,180,80,C.lightGrey, 40,function()scene.push()loadGame(mapCam.sel)end,function()return not mapCam.sel end), - back= newButton(1200, 655,120,80,C.white, 40,scene.back), - --function()scene.push()scene.swapTo("custom")end + draw= newButton(1100, 440,220,90,C.lightYellow, 40,function()SCN.push()SCN.swapTo("draw")end,function()return mapCam.sel~=71 and mapCam.sel~=72 end), + custom=newButton(1100, 540,220,90,C.lightGreen, 40,function()SCN.push()SCN.swapTo("custom")end,function()return mapCam.sel~=71 and mapCam.sel~=72 end), + start= newButton(1040, 655,180,80,C.lightGrey, 40,function()if mapCam.sel then SCN.push()loadGame(mapCam.sel)end end,function()return not mapCam.sel end), + back= newButton(1200, 655,120,80,C.white, 40,SCN.back), + --function()SCN.push()SCN.swapTo("custom")end }, music={ bgm= newSlider(760, 80,400,10,35,function()BGM.freshVolume()end,SETval("bgm"),SETsto("bgm")), up= newButton(1100, 200,120,120,C.white,55,pressKey("up")), play= newButton(1100, 340,120,120,C.white,35,pressKey("space"),function()return setting.bgm==0 end), down= newButton(1100, 480,120,120,C.white,55,pressKey("down")), - back= newButton(640, 630,230,90, C.white,40,scene.back), + back= newButton(640, 630,230,90, C.white,40,SCN.back), }, custom={ up= newButton(1000, 360,100,100,C.white, 45,function()sceneTemp=(sceneTemp-2)%#customID+1 end), down= newButton(1000, 600,100,100,C.white, 45,function()sceneTemp=sceneTemp%#customID+1 end), left= newButton(880, 480,100,100,C.white, 45,pressKey("left")), right= newButton(1120, 480,100,100,C.white, 45,pressKey("right")), - set1= newButton(640, 160,240,75, C.lightYellow, 35,function()useDefaultSet(1)end), - set2= newButton(640, 250,240,75, C.lightYellow, 35,function()useDefaultSet(2)end), - set3= newButton(640, 340,240,75, C.lightYellow, 35,function()useDefaultSet(3)end), - set4= newButton(640, 430,240,75, C.lightYellow, 35,function()useDefaultSet(4)end), - set5= newButton(640, 520,240,75, C.lightYellow, 35,function()useDefaultSet(5)end), - back= newButton(640, 630,180,60, C.white, 35,scene.back), + set1= newButton(640, 160,240,75, C.lightYellow, 35,defSet(1)), + set2= newButton(640, 250,240,75, C.lightYellow, 35,defSet(2)), + set3= newButton(640, 340,240,75, C.lightYellow, 35,defSet(3)), + set4= newButton(640, 430,240,75, C.lightYellow, 35,defSet(4)), + set5= newButton(640, 520,240,75, C.lightYellow, 35,defSet(5)), + back= newButton(640, 630,180,60, C.white, 35,SCN.back), }, draw={ b1= newButton(500+65*1, 150,58,58,C.red, 30,setPen(1)),--B1 @@ -215,7 +169,7 @@ local Widget={ demo= newSwitch(755, 640,30,function()return sceneTemp.demo end,function()sceneTemp.demo=not sceneTemp.demo end), copy= newButton(920, 640,120,120,C.lightRed, 35,copyBoard), paste= newButton(1060, 640,120,120,C.lightBlue, 35,pasteBoard), - back= newButton(1200, 640,120,120,C.white, 35,scene.back), + back= newButton(1200, 640,120,120,C.white, 35,SCN.back), }, play={ pause= newButton(1235,45,80,80,C.white,25,pauseGame), @@ -223,40 +177,40 @@ local Widget={ pause={ resume= newButton(640,290,240,100,C.white,30,resumeGame), restart=newButton(640,445,240,100,C.white,33,function() - clearTask("play") - updateStat() + TASK.clear("play") + mergeStat(stat,players[1].stat) resetGameData() - scene.swapTo("play","none") + SCN.swapTo("play","none") end), setting=newButton(1130,70,180,90,C.lightBlue,35,function() - scene.push()scene.swapTo("setting_sound") + SCN.push()SCN.swapTo("setting_sound") end), - quit= newButton(640,600,240,100,C.white,35,scene.back), + quit= newButton(640,600,240,100,C.white,35,SCN.back), }, setting_game={ - graphic=newButton(200,80,240,80,C.lightCyan,35,function()scene.swapTo("setting_graphic")end, nil,"sound"), - sound= newButton(1080,80,240,80,C.lightCyan,35,function()scene.swapTo("setting_sound")end, nil,"ctrl"), - ctrl= newButton(290,220,320,80,C.lightYellow,35,function()scene.push()scene.swapTo("setting_control")end, nil,"key"), - key= newButton(640,220,320,80,C.lightGreen,35,function()scene.push()scene.swapTo("setting_key")end, nil,"touch"), - touch= newButton(990,220,320,80,C.lightBlue,35,function()scene.push()scene.swapTo("setting_touch")end, nil,"reTime"), + graphic=newButton(200,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_graphic")end, nil,"sound"), + sound= newButton(1080,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_sound")end, nil,"ctrl"), + ctrl= newButton(290,220,320,80,C.lightYellow,35,function()SCN.push()SCN.swapTo("setting_control")end, nil,"key"), + key= newButton(640,220,320,80,C.lightGreen,35,function()SCN.push()SCN.swapTo("setting_key")end, nil,"touch"), + touch= newButton(990,220,320,80,C.lightBlue,35,function()SCN.push()SCN.swapTo("setting_touch")end, nil,"reTime"), reTime= newSlider(350,340,300,10,30,nil, SETval("reTime"), SETsto("reTime"), nil,"maxNext"), maxNext=newSlider(350,440,300,6,30,nil, SETval("maxNext"), SETsto("maxNext"), nil,"autoPause"), autoPause=newSwitch(350,540,20, SETval("autoPause"), SETrev("autoPause"), nil,"layout"), layout= newButton(590,540,140,70,C.white,35,function() - scene.push() - scene.swapTo("setting_skin") + SCN.push() + SCN.swapTo("setting_skin") end,nil,"quickR"), quickR= newSwitch(1050,340,35, SETval("quickR"), SETrev("quickR"), nil,"swap"), swap= newSwitch(1050,440,19, SETval("swap"), SETrev("swap"), nil,"fine"), fine= newSwitch(1050,540,20, SETval("fine"), SETrev("fine"), nil,"back"), - back= newButton(1140,650,200,80,C.white,40,scene.back, nil,"graphic"), + back= newButton(1140,650,200,80,C.white,40,SCN.back, nil,"graphic"), }, setting_graphic={ - sound= newButton(200,80,240,80,C.lightCyan,35,function()scene.swapTo("setting_sound")end, nil,"game"), - game= newButton(1080,80,240,80,C.lightCyan,35,function()scene.swapTo("setting_game")end, nil,"ghost"), + sound= newButton(200,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_sound")end, nil,"game"), + game= newButton(1080,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_game")end, nil,"ghost"), ghost= newSwitch(310,180,35, SETval("ghost"), SETrev("ghost"), nil,"center"), center= newSwitch(580,180,35, SETval("center"), SETrev("center"), nil,"smooth"), - smooth= newSwitch(310,260,25, SETval("smooth"), SETrev("smooth"), nil,"grid"), + smooth= newSwitch(310,260,25, SETval("smooth"), SETrev("smooth"), nil,"grid"), grid= newSwitch(580,260,30, SETval("grid"), SETrev("grid"), nil,"lockFX"), lockFX= newSlider(310,340,373,3,35,nil, SETval("lockFX"), SETsto("lockFX"), nil,"dropFX"), dropFX= newSlider(310,410,373,5,35,nil, SETval("dropFX"), SETsto("dropFX"), nil,"shakeFX"), @@ -269,40 +223,41 @@ local Widget={ love.window.setFullscreen(setting.fullscreen) love.resize(love.graphics.getWidth(),love.graphics.getHeight()) end,nil,"bg"), - bg= newSwitch(990,330,35,SETval("bg"),SETrev("bg"),nil,"bgspace"), - bgspace=newSwitch(990,410,35,SETval("bgspace"),function() - setting.bgspace=not setting.bgspace - if setting.bgspace then - space.new() - else - space.discard() - end - end,nil,"back"), - back= newButton(1140,650,200,80,C.white,40,scene.back,nil,"sound"), + bg= newSwitch(990,330,35,SETval("bg"),function() + BG.set("none") + setting.bg=not setting.bg + BG.set("space") + end,nil,"back"), + back= newButton(1140,650,200,80,C.white,40,SCN.back,nil,"sound"), }, setting_sound={ - game= newButton(200,80,240,80,C.lightCyan,35,function()scene.swapTo("setting_game")end, nil,"graphic"), - graphic=newButton(1080,80,240,80,C.lightCyan,35,function()scene.swapTo("setting_graphic")end, nil,"sfx"), - sfx= newSlider(180,250,400,10,35,function()SFX.play("blip_1")end, SETval("sfx"), SETsto("sfx"), nil,"bgm"), - bgm= newSlider(750,250,400,10,35,function()BGM.freshVolume()end, SETval("bgm"), SETsto("bgm"), nil,"vib"), - vib= newSlider(180,440,400,5 ,28,function()VIB(1)end, SETval("vib"), SETsto("vib"), nil,"voc"), - voc= newSlider(750,440,400,10,32,function()VOICE("nya")end, SETval("voc"), SETsto("voc"), nil,"stereo"), + game= newButton(200,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_game")end, nil,"graphic"), + graphic=newButton(1080,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_graphic")end, nil,"sfx"), + sfx= newSlider(180,250,400,10,35,function()SFX.play("blip_1")end, SETval("sfx"), SETsto("sfx"), nil,"bgm"), + bgm= newSlider(750,250,400,10,35,function()BGM.freshVolume()end, SETval("bgm"), SETsto("bgm"), nil,"vib"), + vib= newSlider(180,440,400,5 ,28,function()VIB(1)end, SETval("vib"), SETsto("vib"), nil,"voc"), + voc= newSlider(750,440,400,10,32,function()VOC.play("nya")end, SETval("voc"), SETsto("voc"), nil,"stereo"), stereo= newSlider(180,630,400,10,35,function()SFX.play("move",1,-1)SFX.play("lock",1,1)end, SETval("stereo"), SETsto("stereo"),function()return setting.sfx==0 end,"back"), - back= newButton(1140,650,200,80,C.white,40,scene.back,nil,"game"), + back= newButton(1140,650,200,80,C.white,40,SCN.back,nil,"game"), }, setting_control={ das= newSlider(226,200,910, 26, 30,nil,SETval("das"), SETsto("das"), nil,"arr"), arr= newSlider(226,290,525, 15, 30,nil,SETval("arr"), SETsto("arr"), nil,"sddas"), sddas= newSlider(226,380,350, 10, 30,nil,SETval("sddas"), SETsto("sddas"),nil,"sdarr"), - sdarr= newSlider(226,470,140, 4, 30,nil,SETval("sdarr"), SETsto("sdarr"),nil,"reset"), + sdarr= newSlider(226,470,140, 4, 30,nil,SETval("sdarr"), SETsto("sdarr"),nil,"ihs"), + ihs= newSwitch(1100,290,30, SETval("ihs"), SETrev("ihs"),nil,"irs"), + irs= newSwitch(1100,380,30, SETval("irs"), SETrev("irs"),nil,"ihs"), + ims= newSwitch(1100,470,30, SETval("ims"), SETrev("ims"),nil,"reset"), reset= newButton(160,580,200, 100,C.lightRed,40,function() - setting.das,setting.arr=10,2 - setting.sddas,setting.sdarr=0,2 + local _=setting + _.das,_.arr=10,2 + _.sddas,_.sdarr=0,2 + _.ihs,_.irs,_.ims=false,false,false end,nil,"back"), - back= newButton(1140,650,200,80,C.white,40,scene.back,nil,"das"), + back= newButton(1140,650,200,80,C.white,40,SCN.back,nil,"das"), }, setting_key={ - back=newButton(1140,650,200,80,C.white,45,scene.back), + back=newButton(1140,650,200,80,C.white,45,SCN.back), }, setting_skin={ prev= newButton(700,100,140,100,C.white,50,function()skin.prevSet()end), @@ -333,7 +288,7 @@ local Widget={ skinR= newButton(200,640,220,80,C.lightPurple,35,function()setting.skin={1,5,2,8,10,3,7}SFX.play("rotate")end), faceR= newButton(480,640,220,80,C.lightRed,35,function()setting.face={0,0,0,0,0,0,0}SFX.play("hold")end), - back= newButton(1140,650,200,80,C.white,40,scene.back), + back= newButton(1140,650,200,80,C.white,40,SCN.back), }, setting_touch={ default=newButton(520,80,170,80,C.white,35,function() @@ -356,10 +311,10 @@ local Widget={ sceneTemp.snap=sceneTemp.snap%6+1 end), option= newButton(520,180,170,80,C.white,40,function() - scene.push() - scene.swapTo("setting_touchSwitch") + SCN.push() + SCN.swapTo("setting_touchSwitch") end), - back= newButton(760,180,170,80,C.white,40,scene.back), + back= newButton(760,180,170,80,C.white,40,SCN.back), size= newSlider(450,265,460,14,40,nil,function() return VK_org[sceneTemp.sel].r/10-1 end, @@ -397,33 +352,34 @@ local Widget={ track= newSwitch(1170,300,35,SETval("VKTrack"),SETrev("VKTrack")), icon= newSwitch(850,300,40,SETval("VKIcon"),SETrev("VKIcon")), tkset= newButton(1120,400,240,80,C.white,32,function() - scene.push() - scene.swapTo("setting_trackSetting") + SCN.push() + SCN.swapTo("setting_trackSetting") end,function()return not setting.VKTrack end), alpha= newSlider(840,490,400,10,40,nil,SETval("VKAlpha"),SETsto("VKAlpha")), - back= newButton(1100,600,240,80,C.white,45,scene.back), + back= newButton(1100,600,240,80,C.white,45,SCN.back), }, setting_trackSetting={ VKDodge=newSwitch(400,200, 35,SETval("VKDodge"),SETrev("VKDodge")), VKTchW= newSlider(140,310,1000,10,35,nil,SETval("VKTchW"),function(i)setting.VKTchW=i;setting.VKCurW=math.max(setting.VKCurW,i)end), VKCurW= newSlider(140,370,1000,10,35,nil,SETval("VKCurW"),function(i)setting.VKCurW=i;setting.VKTchW=math.min(setting.VKTchW,i)end), - back= newButton(1080,600,240,80,C.white,45,scene.back), + back= newButton(1080,600,240,80,C.white,45,SCN.back), }, help={ - his= newButton(1050,500,250,80,C.white,35,function()scene.push()scene.swapTo("history")end,nil,"back"), - qq= newButton(1050,600,250,80,C.white,35,function()love.system.openURL("tencent://message/?uin=1046101471&Site=&Menu=yes")end, function()return mobile end,"his"), - back= newButton(640, 600,200,80,C.white,40,scene.back,nil,"qq"), + his= newButton(1050,500,250,80,C.white,35,function()SCN.push()SCN.swapTo("history")end,nil,"back"), + qq= newButton(1050,600,250,80,C.white,35,function()love.system.openURL("tencent://message/?uin=1046101471&Site=&Menu=yes")end,function()return mobile end,"his"), + back= newButton(640, 600,200,80,C.white,40,SCN.back,nil,"qq"), }, history={ prev= newButton(1155,170,180,180,C.white,65,pressKey("up"),function()return sceneTemp[2]==1 end), next= newButton(1155,400,180,180,C.white,65,pressKey("down"),function()return sceneTemp[2]==#sceneTemp[1]-22 end), - back= newButton(1155,600,180,90,C.white,40,scene.back), + back= newButton(1155,600,180,90,C.white,40,SCN.back), }, stat={ path= newButton(980,620,250,80,C.white,25,function()love.system.openURL(love.filesystem.getSaveDirectory())end,function()return mobile end,"back"), - back= newButton(640,620,200,80,C.white,40,scene.back,nil,"path"), + back= newButton(640,620,200,80,C.white,40,SCN.back,nil,"path"), }, } +defSet,SETval,SETsto,SETrev,pressKey,setPen,prevSkin,nextSkin,nextDir,VKAdisp,VKAcode=nil for _,L in next,Widget do for _,W in next,L do if W.next then