From dd7beca9ce5c3e2d4a56fcdae7325a7ad76fec88 Mon Sep 17 00:00:00 2001 From: MrZ_26 Date: Tue, 4 Feb 2020 19:26:49 +0800 Subject: [PATCH] Alpha V0.3+ --- BGM/32000Hz 86kbps | 0 button.lua | 73 ++-- conf.lua | 8 +- control.lua | 60 +++- game_scene.lua | 13 +- image/BG/2.png | Bin 0 -> 378 bytes image/block.png | Bin 5868 -> 0 bytes image/block/1/1.png | Bin 0 -> 463 bytes image/block/1/10.png | Bin 0 -> 659 bytes image/block/1/11.png | Bin 0 -> 578 bytes image/block/1/12.png | Bin 0 -> 575 bytes image/block/1/13.png | Bin 0 -> 441 bytes image/block/1/2.png | Bin 0 -> 584 bytes image/block/1/3.png | Bin 0 -> 577 bytes image/block/1/4.png | Bin 0 -> 586 bytes image/block/1/5.png | Bin 0 -> 533 bytes image/block/1/6.png | Bin 0 -> 635 bytes image/block/1/7.png | Bin 0 -> 660 bytes image/block/1/8.png | Bin 0 -> 430 bytes image/block/1/9.png | Bin 0 -> 684 bytes image/gamepadIcon/hardDrop.png | Bin 212 -> 0 bytes image/gamepadIcon/hold.png | Bin 272 -> 0 bytes image/gamepadIcon/rotFlip.png | Bin 261 -> 0 bytes image/gamepadIcon/rotLeft.png | Bin 227 -> 0 bytes image/gamepadIcon/rotRight.png | Bin 235 -> 0 bytes image/icon.gfie | Bin 5307 -> 16574 bytes image/virtualkey/hardDrop.png | Bin 0 -> 227 bytes image/virtualkey/hold.png | Bin 0 -> 246 bytes .../{gamepadIcon => virtualkey}/moveLeft.png | Bin .../{gamepadIcon => virtualkey}/moveRight.png | Bin image/{gamepadIcon => virtualkey}/restart.png | Bin image/virtualkey/rotFlip.png | Bin 0 -> 262 bytes image/virtualkey/rotLeft.png | Bin 0 -> 241 bytes image/virtualkey/rotRight.png | Bin 0 -> 243 bytes .../{gamepadIcon => virtualkey}/softDrop.png | Bin lists.lua | 7 +- main.lua | 323 +++++++++--------- paint.lua | 109 +++--- timer.lua | 17 - 39 files changed, 357 insertions(+), 253 deletions(-) create mode 100644 BGM/32000Hz 86kbps create mode 100644 image/BG/2.png delete mode 100644 image/block.png create mode 100644 image/block/1/1.png create mode 100644 image/block/1/10.png create mode 100644 image/block/1/11.png create mode 100644 image/block/1/12.png create mode 100644 image/block/1/13.png create mode 100644 image/block/1/2.png create mode 100644 image/block/1/3.png create mode 100644 image/block/1/4.png create mode 100644 image/block/1/5.png create mode 100644 image/block/1/6.png create mode 100644 image/block/1/7.png create mode 100644 image/block/1/8.png create mode 100644 image/block/1/9.png delete mode 100644 image/gamepadIcon/hardDrop.png delete mode 100644 image/gamepadIcon/hold.png delete mode 100644 image/gamepadIcon/rotFlip.png delete mode 100644 image/gamepadIcon/rotLeft.png delete mode 100644 image/gamepadIcon/rotRight.png create mode 100644 image/virtualkey/hardDrop.png create mode 100644 image/virtualkey/hold.png rename image/{gamepadIcon => virtualkey}/moveLeft.png (100%) rename image/{gamepadIcon => virtualkey}/moveRight.png (100%) rename image/{gamepadIcon => virtualkey}/restart.png (100%) create mode 100644 image/virtualkey/rotFlip.png create mode 100644 image/virtualkey/rotLeft.png create mode 100644 image/virtualkey/rotRight.png rename image/{gamepadIcon => virtualkey}/softDrop.png (100%) diff --git a/BGM/32000Hz 86kbps b/BGM/32000Hz 86kbps new file mode 100644 index 00000000..e69de29b diff --git a/button.lua b/button.lua index 660c5adb..0bfeb332 100644 --- a/button.lua +++ b/button.lua @@ -34,8 +34,9 @@ Buttons={ end, up=4,down=7,left=6 }, - {x=435,y=250,w=320,h=60,rgb=color.white,t="Advanced settings",code=function()gotoScene("setting2")end,up=1,down=7,right=5}, - {x=640,y=590,w=180,h=60,rgb=color.white,t="Back",code=function()back()end,up=6}, + {x=435,y=220,w=320,h=60,rgb=color.green,t="Advanced settings",code=function()gotoScene("setting2")end,up=1,down=7,right=5}, + {x=435,y=300,w=320,h=60,rgb=color.yellow,t="Touch settings",code=function()gotoScene("setting3")end,up=6,down=8,right=5}, + {x=640,y=590,w=210,h=60,rgb=color.white,t="Save&Back",code=function()back()end,up=6}, }, setting2={ {x=290,y=70 ,w=160,h=45,rgb=color.white,t=function()return setting.key[1]end,code=function()keysetting,gamepadsetting=1 end,up=1,down=2,right=10}, @@ -52,7 +53,7 @@ Buttons={ {x=540,y=130,w=230,h=45,rgb=color.white,t=function()return setting.gamepad[2]end,code=function()gamepadsetting,keysetting=2 end,up=10,down=12,left=2,right=19}, {x=540,y=190,w=230,h=45,rgb=color.white,t=function()return setting.gamepad[3]end,code=function()gamepadsetting,keysetting=3 end,up=11,down=13,left=3,right=23}, {x=540,y=250,w=230,h=45,rgb=color.white,t=function()return setting.gamepad[4]end,code=function()gamepadsetting,keysetting=4 end,up=12,down=14,left=4,right=23}, - {x=540,y=310,w=230,h=45,rgb=color.white,t=function()return setting.gamepad[5]end,code=function()gamepadsetting,keysetting=5 end,up=13,down=15,left=5,right=28}, + {x=540,y=310,w=230,h=45,rgb=color.white,t=function()return setting.gamepad[5]end,code=function()gamepadsetting,keysetting=5 end,up=13,down=15,left=5,right=23}, {x=540,y=370,w=230,h=45,rgb=color.white,t=function()return setting.gamepad[6]end,code=function()gamepadsetting,keysetting=6 end,up=14,down=16,left=6,right=28}, {x=540,y=430,w=230,h=45,rgb=color.white,t=function()return setting.gamepad[7]end,code=function()gamepadsetting,keysetting=7 end,up=15,down=17,left=7,right=28}, {x=540,y=490,w=230,h=45,rgb=color.white,t=function()return setting.gamepad[8]end,code=function()gamepadsetting,keysetting=8 end,up=16,down=18,left=8,right=28}, @@ -69,9 +70,40 @@ Buttons={ {x=1125,y=150,w=40,h=40,rgb=color.white,t="+",code=function()setting.sdarr=(setting.sdarr+1)%4 end,up=22,down=28,left=25}, --23~26 {x=405,y=630,w=130,h=60,rgb=color.white,t="Reset",code=function()for i=1,#setting.key do setting.key[i]=gameEnv0.key[i] end end,up=9,right=28}, - {x=840,y=630,w=180,h=60,rgb=color.white,t="Back",code=function()keysetting=nil;back()end,up=9,left=27}, + {x=840,y=630,w=180,h=60,rgb=color.white,t="Back",code=function()keysetting=nil;back()end,up=24,left=27}, --27~28 }, + setting3={ + {x=500,y=310,w=120,h=80,rgb=color.white,t="Reset",code=function() + for K=1,#virtualkey do + local b,b0=virtualkey[K],gameEnv0.virtualkey[K] + b[1],b[2],b[3],b[4]=b0[1],b0[2],b0[3],b0[4] + end--Reset virtualkey + end,down=4,right=2}, + {x=640,y=310,w=120,h=80,rgb=color.white,t="Snap",code=function() + for K=1,#virtualkey do + local b=virtualkey[K] + b[1],b[2]=int(b[1]*.025+.5)*40,int(b[2]*.025+.5)*40 + end--Make virtualkey neat + end,down=5,left=1,right=3}, + {x=780,y=310,w=120,h=80,rgb=color.white,t=function()return percent0to5[setting.virtualkeyAlpha]end,code=function() + setting.virtualkeyAlpha=(setting.virtualkeyAlpha+1)%6 + --Adjust virtualkey alpha + end,down=6,left=2}, + {x=500,y=410,w=120,h=80,rgb=color.white,t="Icon",code=function() + setting.virtualkeyIcon=not setting.virtualkeyIcon + --Switch virtualkey icon + end,up=1,right=6}, + {x=640,y=410,w=120,h=80,rgb=color.white,t="Back",code=function()back()end,up=2,left=4,right=3}, + {x=780,y=410,w=120,h=80,rgb=color.white,t="Size",code=function() + for K=1,#virtualkey do + local b=virtualkey[K] + b[4]=b[4]+10 + if b[4]==150 then b[4]=40 end + b[3]=b[4]^2 + end + end,up=3,left=5}, + }, help={ {x=640,y=590,w=180,h=60,rgb=color.white,t="Back",code=function()back()end}, }, @@ -86,26 +118,19 @@ for k,v in pairs(Buttons)do end end -gamepad={ - {x=80,y=-80,r=80},--moveLeft - {x=240,y=-80,r=80},--moveRight - {x=-240,y=-80,r=80},--rotRight - {x=-400,y=-80,r=80},--rotLeft - {x=-240,y=-240,r=80},--rotFlip - {x=-80,y=-80,r=80},--hardDrop - {x=-80,y=-240,r=80},--softDrop - {x=-80,y=-400,r=80},--hold - {x=80,y=80,r=80},--restart -} ---[[ +virtualkey={ + {80,720-80,6400,80},--moveLeft + {240,720-80,6400,80},--moveRight + {1280-240,720-80,6400,80},--rotRight + {1280-400,720-80,6400,80},--rotLeft + {1280-240,720-240,6400,80},--rotFlip + {1280-80,720-80,6400,80},--hardDrop + {1280-80,720-240,6400,80},--softDrop + {1280-80,720-400,6400,80},--hold + {80,80,6400,80},--restart + --[[ {x=0,y=0,r=0},--toLeft {x=0,y=0,r=0},--toRight {x=0,y=0,r=0},--toDown -]] -for i=1,#gamepad do - gamepad[i].press=false - if gamepad[i].x<0 then gamepad[i].x=1280+gamepad[i].x end - if gamepad[i].y<0 then gamepad[i].y=720+gamepad[i].y end - gamepad[i].r0=gamepad[i].r - gamepad[i].r=gamepad[i].r0^2 -end \ No newline at end of file + ]] +} \ No newline at end of file diff --git a/conf.lua b/conf.lua index 07e32573..1da4cd02 100644 --- a/conf.lua +++ b/conf.lua @@ -5,11 +5,10 @@ function love.conf(t) t.version="11.1" t.console=X t.accelerometerjoystick=X--Enable the accelerometer on iOS and Android by exposing it as a Joystick (boolean) - t.externalstorage=X t.gammacorrect=true - -- t.audio.mixwithsystem=true--Keep background music playing when opening LOVE (boolean, iOS and Android only) + t.audio.mixwithsystem=true--Switch on to keep background music playing - t.window.title="Techmino V0.2" + t.window.title="Techmino V0.3" t.window.icon="/image/icon.png" t.window.width=1280 t.window.height=720 @@ -27,7 +26,7 @@ function love.conf(t) t.window.highdpi=X--Enable high-dpi mode for the window on a Retina display (boolean) t.window.x=nil t.window.y=nil - + t.modules.window=true t.modules.system=true t.modules.audio=true @@ -43,6 +42,7 @@ function love.conf(t) t.modules.sound=true t.modules.timer=true t.modules.touch=true + t.modules.physics=X t.modules.thread=X t.modules.video=X diff --git a/control.lua b/control.lua index 7c580a84..4f9a52aa 100644 --- a/control.lua +++ b/control.lua @@ -1,3 +1,18 @@ +function onVirtualkey(x,y) + local x,y=convert(x,y) + local d2,nearest,distance + for K=1,#virtualkey do + local b=virtualkey[K] + d2=(x-b[1])^2+(y-b[2])^2 + if d2enxQGoA5wis91CAmff$rv}F4a}yVx$kVcq++JN>t10>Z z))5Y zJKOI(ue^PJne(=f7Aa`LCc6OMl^yz$iFOVE7pOKVS>3CXECreFbFU(IWTZA hFe)&x(4O<>D!cvycfUJdtyCF+z|+;wWt~$(69ARwg*5;G literal 0 HcmV?d00001 diff --git a/image/block.png b/image/block.png deleted file mode 100644 index 296d2ff8ce81f51ecd1d92c9b7d0800553fe45d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5868 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 literal 0 HcmV?d00001 diff --git a/image/block/1/12.png b/image/block/1/12.png new file mode 100644 index 0000000000000000000000000000000000000000..992f1c75a9d9b63f4378ae9da1f8862e970f4fac GIT binary patch literal 575 zcmV-F0>J%=P)I0(5#-d7gmE6ItdTp%p`$5 zLtw@mR)Z~c|;lr@=M=hfcapnlq>zfSQTLV2A0H z$5gA@BE^(bz*5)U?rv4<1Q>k^C_?9gr3Vjn*Jspx0BAk=C$Onu3##g^Vn<+Pnn^Ti z_RKq=tGL`GwvBAc)kdG%N(1)VTJ2tLE6&z30Go1cr=ZfwA?*r`@2Mx3>&{o3A}Ln^ z2FU|Np-yD-)qOCTw@kJY_+fgc{Js49qp6OQ$V{X-hjk=zr3XnlltjI96w N002ovPDHLkV1gKH{H_21 literal 0 HcmV?d00001 diff --git a/image/block/1/13.png b/image/block/1/13.png new file mode 100644 index 0000000000000000000000000000000000000000..74ed4cab7d8d32f02d382e18d6ea965a1d039d33 GIT binary patch literal 441 zcmV;q0Y?6bP)Yzqj?Yau2>oO@K%sc)0S$Y zkAw^Z3?F}K3lr9LtSrgRAQoHzGqzK*3jYCo{Nn=6;Rm#*Uq zCr?=MMI}YI!B)&#aBg5#`MzaTvDsO?gUL+(V>fjCrayA)g3ngrFVTQN<45?DG0YXfeuWJa&!J$?vC zyDX)s>C%E)s!gz#?zC}Dt=qZU#HN&rn00000NkvXXu0mjfKfu2t literal 0 HcmV?d00001 diff --git a/image/block/1/2.png b/image/block/1/2.png new file mode 100644 index 0000000000000000000000000000000000000000..e17d239b2f2c96f2162e799587fd4d517cd638d8 GIT binary patch literal 584 zcmV-O0=NB%P)33~UqU7h)RH~>E< z0KmYZFL+uN{ED}{?$Tmy=sP~e??G?)!Z&*K=+L2q8|S#zBUw;`5I}jvwYCbJpglu! z2OJ=v5)Kdu4#eCeGXoWvLoN7R#L2M;Z<_&j89J46jDQ#?a*7MonVFf4n2)Kbb;MSR zLw0Qu*onCX=U~dvlHv&MOms8VGQBD74n2DDl*0(<(80rJhk|(a-8|SSAa|tC`1oJ4 z*fc3BpQ9`@mVsS%poXUCdBiDN7%8Ski8a7-@PgtgM~=}0=*I$!`%8t})op_HtR3Jf zFYV+jAR1yLwAwO$ldEQj0Rscb>r>EKFfWTx%>ieeS;X?XzJE5=T#2+C5~wPq^o-MW zzJCfn*kT_{U_fAn1r;P);|T#o+?oanfNs_C3}Xz=&|a(&8n_?O0f{2lv8mC*q}2m2YNW^6j#(XsKTeg-T=(F+q>BV#ndKG91O;s z%d@Xj5(O6vj{xWC;_kEC)Jg+r=RA?1i@}g-xW(O`$wPZUjwgQs7GJB)M6#`d;s#(h zv?O(4YFPoZier)#W#nCMf;(4MW^ju6L@n19`!yOM;?$>d$|{quDWT-X@|xNHTDVBc zRRoYW7>H7x$mCDYgUPaF{7M4+cF)8$zQ51a)`@&a$_+yMMAEJ|nJ&iGr|GhJ23|=n zmeYPv63MbxS=KQ-_f9l`3l-BEe(JrHL1p%eixPD(O1p3zvZ}hSn4uJGua*^(I)#+y zaD*Oo9($DqI2mPS!&7@~&18kw*C7^*50fdIdX)K@szyN#?*kx#8wS^~Lq6h;bm@DY`aolOK1+`p0x5os4 z#6SZeE`C(E#XWEf=ElA%RAh_AGjQ*-Me1sis24&TDy{=eRKcl)dzW=oSd3K)6+kG@ zyTE$Y7HgDy6Ws#92@ts2^JFng`}oa+kzJ~hOnSu9hp2=QbD##8a|wv)(OU%9`@1wn1SNh2H;$_Vd>IRacKMl4${8Nr6=5 z-VpNdR(}aT%q4q4K8MUPU__(W#XTjX6F9G9p1z|Wtl22-m9J4sjsjS<&0^LZNbWNYZxOZ|DU3%*|g>;MT#Efz77hZ>2sXlxZ}zy-Q%!4e#(fop6P^p-c^ z3c54UFmJI4pfaIg*Wy6XDVHNXmEg%*Nl^V0IP_iKwb*g7Dk--VTv_kA9JRHLi#g$z zg2jOs4=^Ba8~_=~y*cKZteypnA6KEcL%0K^*eZqHl$R_87xAEEwMc>l03&Uo1do1p zPlH*3JZG2ZJ;!9Q()!pby-BcrS_RnUTuv5vTv|l9nm`8UGc~r6nT-<9DW$HZktX%~L z)n|6GI-SW$$OYW@XlproB`V_=$2#1H+;TqUj)3zq5Q45DENdU{$u0)+jEP)>lJxI&{v^&*+$`Lw~5>(N74F zFDTGCU3<1AW)Nl5vhL0fa906>WuK%+QY6K5-=2`qU$|Mje}I=~@EQ8}_0!d%uYX_p z^E-{bh2HV~%IF`{sL6wCLy!Diy!&#(z%QW1(WqRuyQ1eNMURUv#FZd^En9}RE3jL@ z%a))CvJ|j3dj(!X+XC8N&^Y37NOjIdjT-~4X2`R>#mZ?WIB#H0-DM`Yfn1U+-mF=8@3CbPpx?e z*oH$;M~ddRU{d9%@6m*h>`5TyqMRH?gdT@C+U9vZ!l3864erlt8K>ls;fi)e%-z$S$x-%@kMis{dQ%M$dO&F2c=7TY%g-#;+@t+*-p<(dD|-TT+ literal 0 HcmV?d00001 diff --git a/image/block/1/7.png b/image/block/1/7.png new file mode 100644 index 0000000000000000000000000000000000000000..1d8e221747cfce6eee41380132c35f32be744e4b GIT binary patch literal 660 zcmV;F0&D$=P))s@ZH-%v4~meyI^``)S|AGa4FeAZj9fYjfJuSbVrF7Mr2sc8j*h{$r-LbdF!+IsjQ|)F_ya%;C=9Rw zY%xq*;+Uu;2(P}Uqd|QYyi5R;vvStP^H<`&s~Ex9p=`$FVP%t3vq@UpR^xP*nlI(o zI8*Ah!^-+|Ftsqa_-WJYUrfdktS2?9VX3jn*#V6eC(-g zLm^oE;q*7LYJPf?b1rks%^q|E9Z4k}Xs`UI|n<9TW!F`Gg~&Pdb& zD}q}62a4gRjJ2$Fa&X64yYlQ-3_Vx0?0=Jys{2+0PJ0wD*Of-C>N&IxLs@}e1h-ev uTb9vp`0=uRAMoST^0(r?;Fo9okMb8Fu3G8zlJ&#@0000$gE;z(m#Mb z>QF@?Hu~~S2QUgx4f6Zf=Wz*))Oxx47O=ps z91^#Hy=`KZ-v&lXQ4X%vTg_k{!QTG%_Ul(Qmn}h`Y@Jm2y4ZdN9AiBHR=f&MDbatl YAD1=xDpC*(ZU6uP07*qoM6N<$g4pu8GXMYp literal 0 HcmV?d00001 diff --git a/image/block/1/9.png b/image/block/1/9.png new file mode 100644 index 0000000000000000000000000000000000000000..5752a1fc83e44c31606aa13508cb359aa8618243 GIT binary patch literal 684 zcmV;d0#p5oP)dc2f z5Afp`0MSD~^X97HFMO}-P!`vQe&y%nbL@Zcjo%Ci0SJiAaV>zjh~7)rHusfP)M9 zFk?*HQpkvfIFp?LW7cIR&^L>PdF88ZoaUKsA>S)kc3~UK(5TXO`$n5L(dE)5>;C7WzNAq+`;3WfF zS6~?>B0Q2wwU0B|Y9TLF_pHZKJs0OWY!J2x(SbqOlX-!#bCF6`^KuE;-&>IdB4N^Q zQbQR?miK^~%IRdExguU1r}|JV|FU54+VdyDzCfDpYHg!bzgJrqjc(7MEg(9PK{at0 zH{OwnmQyvG6=jdICvz~vv@`H*uy&$}#ZWL_t0tvpfkGd%XMwrntQ;t=XfpyfYR19Hu?pR3^PdQY6-A1Wj>xQcDX zMTI6;h`u0K!2PSuYwuWW$@OV5Rx6MW`cEE9ZHh8WnEm^hNz2he&-Pfm(}i^Xe0-$Q zN&8I=NSB1#H-Ii2ZRXqX7+l~d!Tk~Rnj@AIzCUa~5BT<`{;hak@ZCNCWBdiLf S^_eFC0000|k1|%Oc%$NbBI14-?iy0WWg+Z8+Vb&Z8pkSM) zi(^Q{;kP#qavf0MVGc0<^FRKb-fZ)YX>45He#z{$Q_CJ)IN{>5=RAW!_4e7TMY|o@ zBvU59h%f2^HkMl>)ApXbcW}nTNr9XX3Yk@9e@O1TaS?83{1OPOC BNgn_J diff --git a/image/gamepadIcon/hold.png b/image/gamepadIcon/hold.png deleted file mode 100644 index 535e21262b2056f8f86d87ae8a8e1625f3473ad4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBI14-?iy0WWg+Z8+Vb&Z8px_}- z7srr@!*8b_7_H=@CJSiJ&oG!cb+gbikFx0nTa@&q zE0Z+uw|~?-_Au`*x3cczo7}0U25uH#G?trdKRLPVs@1OLily#bEs9b+d|$ue<>GBC zW8IK)$tPydGjY~nwRQ1%E;pZ@O1TaS?83{1OPP*Wa|k1|%Oc%$NbBI14-?iy0WWg+Z8+Vb&Z8px|~- z7srr@!*9bqg&GWajQ;#T|Ml6yLQf70xkIvEmvioJJGh`dplj{cYlmw{pvgvqUKd_XVc;K z#kb2Av4rbwsHwggZrFBg!qtHC8iN{(V=n2dTOLo7wTn6YSq8s4U;4|k1|%Oc%$NbBI14-?iy0WWg+Z8+Vb&Z8px{(b z7srr@!*8c~3pE&UIM2TK|J;sJnW_GauYESD?^)(0*}UjlOUA;E6RQmy#1wc_M0r9L z0u5Xex3Eo=625TtMm6ibs?VB>i;cTmp6X7p{K|s*x|4` zyF>bgjkwmV<$kYTmB=-|3p&-{S^d^}Qefk*_@C$Ns^2cy{CSp>_deDoS-J}~RyniJ Xu**>X-lcpB=s*TfS3j3^P6T diff --git a/image/gamepadIcon/rotRight.png b/image/gamepadIcon/rotRight.png deleted file mode 100644 index 6cf0b6cbc8399d4ccfefb66a137b8f931c9577ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBI14-?iy0WWg+Z8+Vb&Z8px|6j z7srr@!*8bt@--N6IO~4jZ(KK1BH1h<`S6W@hvj6AZ1}pQgcmigT6Oja!!(Ak4sHi0 zunMs{i!3X5P&vl(#plglru;oSPi0K5Do$kWQD0t@#Fx4w`E2a{g+Apv=~Ie399WbB zp1u3RRWhG@v30;n&$qf>Rk!c*OkXFnG_E>3G3jPw`uCvMy;FMPXI?pP$GqyPMcMbW febEb6)W2rw3(inZSJIdRbSQ(TtDnm{r-UW|E;Uy| diff --git a/image/icon.gfie b/image/icon.gfie index 40886db420622c6279c4a13304697e095431f48b..32d65230d4d05a026a3dfdfdc750d6ac496b2c32 100644 GIT binary patch delta 16212 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 literal 0 HcmV?d00001 diff --git a/image/gamepadIcon/moveLeft.png b/image/virtualkey/moveLeft.png similarity index 100% rename from image/gamepadIcon/moveLeft.png rename to image/virtualkey/moveLeft.png diff --git a/image/gamepadIcon/moveRight.png b/image/virtualkey/moveRight.png similarity index 100% rename from image/gamepadIcon/moveRight.png rename to image/virtualkey/moveRight.png diff --git a/image/gamepadIcon/restart.png b/image/virtualkey/restart.png similarity index 100% rename from image/gamepadIcon/restart.png rename to image/virtualkey/restart.png diff --git a/image/virtualkey/rotFlip.png b/image/virtualkey/rotFlip.png new file mode 100644 index 0000000000000000000000000000000000000000..7b2ecf1b8e4a95959fbdbddbbe8f595e67fff112 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBI14-?iy0WWg+Z8+Vb&Z8px_Qq z7srr@!*9bq`3@)u2>tt?UVSY@wzR-=PBrJHNQIX0>7siYl6njo*$PA!1{Q5#h-!?M z5K9W!yQSswp$7FC?)8NypQNy4)i>^~U7+TA^u@UeNw1SlS1yzbnsh33(XR5U?l9Lq zp;}*s$~6P46b>hT<*;=UasQ!=mUbA=ZM_i;^aF#ZtDnm{ Hr-UW|LqB5C literal 0 HcmV?d00001 diff --git a/image/virtualkey/rotLeft.png b/image/virtualkey/rotLeft.png new file mode 100644 index 0000000000000000000000000000000000000000..fc9f3259c11a1ea47955d291bf46d86105688117 GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBI14-?iy0WWg+Z8+Vb&Z8px|Op z7srr@!*8c~3pFV4ID5XYf4-|o{epeZbP0l+XkK(;8p5 literal 0 HcmV?d00001 diff --git a/image/virtualkey/rotRight.png b/image/virtualkey/rotRight.png new file mode 100644 index 0000000000000000000000000000000000000000..eab71b049d8ebb810f4418c584d7b49e0c15842d GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBI14-?iy0WWg+Z8+Vb&Z8px{zZ z7srr@!*8cK3LQ}3VCMb*-*|6%0Ap(u`#GtwDIVFPqS=h^-O`>dG-xPTAbEt(!lkL= zz=PJAoz>rGy6k;_Xi;;9#A-RC1f5+cnl8QyZkfI&W0AW&LP#t(3plZlm0*npJ(%Ox$m2e!d`(V8*{!+@)^UrNsXi ozeUQbhsrN6xiNiPaACMjm3E2RkLu3*KnF8;y85}Sb4q9e0JNN2u>b%7 literal 0 HcmV?d00001 diff --git a/image/gamepadIcon/softDrop.png b/image/virtualkey/softDrop.png similarity index 100% rename from image/gamepadIcon/softDrop.png rename to image/virtualkey/softDrop.png diff --git a/lists.lua b/lists.lua index 09dae401..cc86c67c 100644 --- a/lists.lua +++ b/lists.lua @@ -1,13 +1,14 @@ -loseReason={"Finished","Block out"} blockName={"Z","S","L","J","T","O","I"} clearName={"Single","Double","Triple"} actName={"moveLeft","moveRight","rotRight","rotLeft","rotFlip","hardDrop","softDrop","hold","restart","toLeft","toRight","toDown"} actName_show={"move left","move right","rotate right","rotate left","rotate flip","hard drop","soft drop","hold","restart","toLeft","toRight","toDown"} blockPos={4,4,4,4,4,5,4} -renATK={[0]=0,0,0,1,1,2,2,3,3,3}--4 else +renATK={[0]=0,0,0,1,1,2,2,3,3,4,4,4}--3 else b2bATK={3,5,8} marathon_drop={[0]=60,48,40,30,24,18,15,12,10,8,7,6,5,4,3,2,1,1,0,0} death_lock={10,9,8,7,6} death_wait={6,5,4,3,2} -death_fall={10,8,7,6,5} \ No newline at end of file +death_fall={10,8,7,6,5} + +percent0to5={[0]="0%","20%","40%","60%","80%","100%",} \ No newline at end of file diff --git a/main.lua b/main.lua index df5a0858..bde68919 100644 --- a/main.lua +++ b/main.lua @@ -1,4 +1,4 @@ -gc,kb,ms,tc,tm,fs=love.graphics,love.keyboard,love.mouse,love.touch,love.timer,love.filesystem +gc,kb,ms,tc,tm,fs,wd=love.graphics,love.keyboard,love.mouse,love.touch,love.timer,love.filesystem,love.window toN,toS=tonumber,tostring int,ceil,abs,rnd,max,min,sin,cos,atan,pi=math.floor,math.ceil,math.abs,math.random,math.max,math.min,math.sin,math.cos,math.atan,math.pi sub,gsub,find,format,byte,char=string.sub,string.gsub,string.find,string.format,string.byte,string.char @@ -40,8 +40,9 @@ end ww,wh=gc.getWidth(),gc.getHeight() -Timer=tm.getTime--Easy get time +Timer=tm.getTime--Easy&Quick to get time! mx,my,mouseShow=-20,-20,false +ms.setVisible(false) focus=true do @@ -50,9 +51,9 @@ do Android=2, } system=l[love.system.getOS()] - touching=nil--touching ID l=nil end +touching=nil--1st touching ID scene="" gamemode="" @@ -60,19 +61,16 @@ bgmPlaying=nil curBG="none" BGblock={ct=140} -languages={"eng"} prevMenu={ load=love.event.quit, ready="mode", - play=function() - restockRow() - gotoScene("mode") - end, + play="mode", mode="main", help="main", stat="main", setting="main", setting2="setting", + setting3="setting", intro="quit", main="quit", } @@ -81,37 +79,36 @@ kb.setKeyRepeat(false) kb.setTextInput(false) --Disable system key repeat -Texts={ - eng={ - load={"Loading textures","Loading BGM","Loading SFX","Finished",}, - stat={ - "Games run:", - "Games played:", - "Game time:", - "Total block used:", - "Total rows cleared:", - "Total lines sent:", - "Total key pressed:", - "Total rotate:", - "Total hold:", - "Total spin:", - }, - help={ - "I think you don't need \"help\".", - "THIS IS NOT TETRIS,and doesn't use SRS.", - "But just play like playing TOP/C2/KOS/TGM3", - "Game is not public now,DO NOT DISTIRBUTE", - "", - "Powered by LOVE2D", - "Author:MrZ E-mail:1046101471@qq.com", - "Programe:MrZ Art:MrZ Music:MrZ SFX:MrZ", - "Tool used:VScode,GFIE,Beepbox,Goldwave", - "Special thanks:TOP,C2,KOS,TGM3,GFIE,and YOU!!", - "Any bugs/suggestions to me.", - }, +Text={ + load={"Loading textures","Loading BGM","Loading SFX","Finished",}, + stat={ + "Games run:", + "Games played:", + "Game time:", + "Total block used:", + "Total rows cleared:", + "Total lines sent:", + "Total key pressed:", + "Total rotate:", + "Total hold:", + "Total spin:", + }, + help={ + "I think you don't need \"help\".", + "THIS IS NOT TETRIS,and doesn't use SRS.", + "But just play like playing TOP/C2/KOS/TGM3", + "Game is not public now,DO NOT DISTIRBUTE", + "", + "Powered by LOVE2D", + "Author:MrZ E-mail:1046101471@qq.com", + "Programe:MrZ Art:MrZ Music:MrZ SFX:MrZ", + "Tool used:VScode,GFIE,Beepbox,Goldwave", + "Special thanks:TOP,C2,KOS,TGM3,GFIE,and YOU!!", + "Any bugs/suggestions to me.", }, } numFonts={} +Fonts={} function numFont(s) if numFonts[s]then gc.setFont(numFonts[s]) @@ -122,9 +119,7 @@ function numFont(s) end currentFont=s end -Fonts={}for i=1,#languages do Fonts[languages[i]]={}end -fontLib={ -eng=function(s) +function setFont(s) if s~=currentFont then if Fonts[s]then gc.setFont(Fonts[s]) @@ -135,20 +130,7 @@ eng=function(s) end currentFont=s end -end, -chi=function(s) - if s~=currentFont then - if Fonts[setting.lang][s]then - gc.setFont(Fonts[setting.lang][s]) - else - local t=gc.newFont("hei.ttf",s-5,"normal") - Fonts[setting.lang][s]=t - gc.setFont(t) - end - currentFont=s - end -end, -} +end sfx={ "button", @@ -248,12 +230,9 @@ attackColor={ end, }--3 animation-colorsets of attack buffer bar } --- for k,v in pairs(color) do --- v[1],v[2],v[3]=255*v[1],255*v[2],255*v[3] --- end require("TRS")--load block&TRS kick -require("lists") +require("lists")--load lists gameEnv0={ das=10,arr=2, @@ -265,9 +244,22 @@ gameEnv0={ sequence=1,visible=1, _20G=false,target=9e99, freshLimit=9e99, + key={"left","right","x","z","c","up","down","space","r","LEFT","RIGHT","DOWN"}, gamepad={"dpleft","dpright","a","b","y","dpup","dpdown","rightshoulder","leftshoulder","LEFT","RIGHT","DOWN"}, - reach=function()end,--Called when reach row target + virtualkey={ + {80,720-80,6400,80},--moveLeft + {240,720-80,6400,80},--moveRight + {1280-240,720-80,6400,80},--rotRight + {1280-400,720-80,6400,80},--rotLeft + {1280-240,720-240,6400,80},--rotFlip + {1280-80,720-80,6400,80},--hardDrop + {1280-80,720-240,6400,80},--softDrop + {1280-80,720-400,6400,80},--hold + {80,80,6400,80},--restart + }, + reach=function()end, + --these three is actually no use,only provide a key } randomMethod={ function() @@ -322,7 +314,7 @@ loadmode={ reach=Event.gameover.win, } createPlayer(1,340,15) - curBG="game1" + curBG="strap" BGM("reason") end, gmroll=function() @@ -337,7 +329,7 @@ loadmode={ arr=1, } createPlayer(1,340,15) - curBG="game3" + curBG="glow" BGM("push") end, marathon=function() @@ -350,7 +342,7 @@ loadmode={ freshLimit=15, } createPlayer(1,340,15) - curBG="game1" + curBG="strap" BGM("way") end, death=function() @@ -390,13 +382,14 @@ loadmode={ end end--AIs - curBG="game2" + curBG="game3" BGM("race") end, solo=function() modeEnv={ wait=1, fall=1, + freshLimit=15, } createPlayer(1,20,15)--Player createPlayer(2,660,85,.9,2)--AI @@ -411,11 +404,11 @@ loadmode={ wait=1, fall=1, visible=0, - freshLimit=8, + freshLimit=10, } createPlayer(1,340,15) - curBG="game1" + curBG="glow" BGM("push") end, asymsolo=function() @@ -423,6 +416,7 @@ loadmode={ wait=1, fall=1, visible=2, + freshLimit=15, } createPlayer(1,20,15)--Player createPlayer(2,660,85,.9,2)--AI @@ -574,6 +568,19 @@ setting={ ghost=true,center=true, key={"left","right","x","z","c","up","down","space","r","LEFT","RIGHT","DOWN"}, gamepad={"dpleft","dpright","a","b","y","dpup","dpdown","rightshoulder","leftshoulder","LEFT","RIGHT","DOWN"}, + virtualkey={ + {80,720-80,6400,80},--moveLeft + {240,720-80,6400,80},--moveRight + {1280-240,720-80,6400,80},--rotRight + {1280-400,720-80,6400,80},--rotLeft + {1280-240,720-240,6400,80},--rotFlip + {1280-80,720-80,6400,80},--hardDrop + {1280-80,720-240,6400,80},--softDrop + {1280-80,720-400,6400,80},--hold + {80,80,6400,80},--restart + }, + virtualkeyAlpha=3, + virtualkeyIcon=true, } stat={ run=0, @@ -594,33 +601,20 @@ function string.splitS(s,sep) sep=sep or"/" local t={} repeat - local i=find(s,sep) + local i=find(s,sep)or #s+1 ins(t,sub(s,1,i-1)) s=sub(s,i+#sep) until #s==0 return t end -function string.concat(t,sep) - sep=sep or"/" - local s="" - for i=1,#t do - s=s..t[i]..sep - end - return s -end -function sgn(i)return i>0 and 1 or i<0 and -1 or 0 end -function stringPack(s,v)return s..toS(v).."\r\n"end +function sgn(i)return i>0 and 1 or i<0 and -1 or 0 end--Row numbe is A-uth-or's id! +function stringPack(s,v)return s..toS(v)end function without(t,v) for i=1,#t do if t[i]==v then return nil end end return true end -function nextLanguage() - for i=1,#languages do - if setting.lang==languages[i]then return languages[i+1]or"eng"end - end -end function mStr(s,x,y)gc.printf(s,x-500,y,1000,"center")end function convert(x,y) return x*screenK,(y-screenM)*screenK @@ -689,13 +683,16 @@ function resetGameData() PTC.dust[i]=PTC.dust[0]:clone() PTC.dust[i]:start() end + for i=1,#virtualkey do + virtualkey[i].press=false + end stat.game=stat.game+1 freeRow={} + collectgarbage() for i=1,50*#players do freeRow[i]={0,0,0,0,0,0,0,0,0,0} end - collectgarbage() end function startGame(mode) --rec="" @@ -725,14 +722,22 @@ function loaddata() elseif t=="fullscreen"then setting.fullscreen=v=="true" love.window.setFullscreen(setting.fullscreen) - elseif t=="lang"then - if not Fonts[v]then v="eng"end - setting.lang=v - setFont=fontLib[v] elseif t=="keyset"then v=string.splitS(v) for i=#v+1,8 do v[i]="N/A"end setting.key=v + elseif t=="virtualkey"then + v=string.splitS(v,"/") + for i=1,9 do + virtualkey[i]=string.splitS(v[i],",") + for j=1,4 do + virtualkey[i][j]=toN(virtualkey[i][j]) + end + end + elseif t=="virtualkeyAlpha"then + setting.virtualkeyAlpha=int(abs(toN(v))) + elseif t=="virtualkeyIcon"then + setting.virtualkeyIcon=v=="true" --Settings elseif t=="das"or t=="arr"or t=="sddas"or t=="sdarr"then v=toN(v)if not v or v<0 then v=0 end @@ -748,27 +753,38 @@ function loaddata() end end function savedata() - local t="" - t=t..stringPack("sfx=",setting.sfx) - t=t..stringPack("bgm=",setting.bgm) - t=t..stringPack("fullscreen=",setting.fullscreen) - t=t..stringPack("lang=",setting.lang) + local vk={} + for i=1,9 do + for j=1,4 do + virtualkey[i][j]=int(virtualkey[i][j]+.5) + end--Saving a integer is better? + vk[i]=table.concat(virtualkey[i],",") + end--pre-pack virtualkey setting - t=t..stringPack("run=",stat.run) - t=t..stringPack("game=",stat.game) - t=t..stringPack("gametime=",stat.gametime) - t=t..stringPack("piece=",stat.piece) - t=t..stringPack("row=",stat.row) - t=t..stringPack("atk=",stat.atk) - t=t..stringPack("key=",stat.key) - t=t..stringPack("rotate=",stat.rotate) - t=t..stringPack("hold=",stat.hold) - t=t..stringPack("spin=",stat.spin) - t=t..stringPack("das=",setting.das) - t=t..stringPack("arr=",setting.arr) - t=t..stringPack("sddas=",setting.sddas) - t=t..stringPack("sdarr=",setting.sdarr) - t=t..stringPack("keyset=",string.concat(setting.key)) + local t=table.concat({ + stringPack("sfx=",setting.sfx), + stringPack("bgm=",setting.bgm), + stringPack("fullscreen=",setting.fullscreen), + + stringPack("run=",stat.run), + stringPack("game=",stat.game), + stringPack("gametime=",stat.gametime), + stringPack("piece=",stat.piece), + stringPack("row=",stat.row), + stringPack("atk=",stat.atk), + stringPack("key=",stat.key), + stringPack("rotate=",stat.rotate), + stringPack("hold=",stat.hold), + stringPack("spin=",stat.spin), + stringPack("das=",setting.das), + stringPack("arr=",setting.arr), + stringPack("sddas=",setting.sddas), + stringPack("sdarr=",setting.sdarr), + stringPack("keyset=",table.concat(setting.key,"/")), + stringPack("virtualkey=",table.concat(vk,"/")), + stringPack("virtualkeyAlpha=",setting.virtualkeyAlpha), + stringPack("virtualkeyIcon=",setting.virtualkeyIcon), + },"\r\n") --t=love.math.compress(t,"zlib"):getString() userdata:open("w") userdata:write(t) @@ -1059,7 +1075,7 @@ function drop() SFX("spin_"..cc) stat.spin=stat.spin+1 elseif #clearing<#field then - P.b2b=P.b2b-400 + P.b2b=P.b2b-300 showText(clearName[cc],"appear",50) csend=cc-1 sendTime=20+csend*20 @@ -1174,7 +1190,7 @@ function keyDown.play(key) local k=players[1].gameEnv.key for i=1,11 do if key==k[i]then - pressKey(i,players[1]) + pressKey(i) break end end @@ -1206,7 +1222,7 @@ function gamepadDown.play(key) local k=players[1].gameEnv.gamepad for i=1,11 do if key==k[i]then - pressKey(i,players[1]) + pressKey(i) break end end @@ -1278,7 +1294,7 @@ function love.update(dt) end --scene swapping & Timer end -function love.draw()print(mouseShow) +function love.draw() Pnt.BG[curBG]() gc.setColor(1,1,1,.3) for n=1,#BGblock do @@ -1308,9 +1324,6 @@ function love.draw()print(mouseShow) numFont(20)gc.setColor(1,1,1) gc.print(tm.getFPS(),0,700) gc.print(gcinfo(),0,680) - -- numFont(80) - -- gc.print(gcinfo(),400,370) - --if gcinfo()>500 then collectgarbage()end end function love.resize(x,y) @@ -1319,19 +1332,8 @@ function love.resize(x,y) gc.origin() gc.scale(1/screenK,1/screenK) gc.translate(0,screenM) -end -function love.focus(f) - focus=f - if f then - ms.setVisible(false) - if bgmPlaying then bgm[bgmPlaying]:play()end - else - ms.setVisible(true) - if bgmPlaying then bgm[bgmPlaying]:pause()end - end -end +end function love.run() - love.focus(true) local frameT=Timer() tm.step() love.resize(nil,gc.getHeight()) @@ -1340,19 +1342,35 @@ function love.run() return function() love.event.pump() for name,a,b,c,d,e,f in love.event.poll()do - if name=="quit"then - savedata() - return 0 - end + if name=="quit"then return 0 end love.handlers[name](a,b,c,d,e,f) end - -- if focus then + if focus then tm.step() love.update(tm.getDelta()) - gc.clear(1,1,1) + gc.clear() love.draw() gc.present() - -- end + if not wd.hasFocus()then + focus=false + ms.setVisible(true) + if bgmPlaying then bgm[bgmPlaying]:pause()end + if scene=="play"then + for i=1,#players[1].keyPressing do + if players[1].keyPressing[i]then + releaseKey(i) + end + end + end + end + else + tm.sleep(.1) + if wd.hasFocus()then + focus=true + ms.setVisible(false) + if bgmPlaying then bgm[bgmPlaying]:play()end + end + end while Timer()-frameT<1/60 do end frameT=Timer() end @@ -1360,30 +1378,22 @@ end --System callbacks do--Texture/Image - mouseIcon=gc.newImage("/image/mouseIcon.png") - local p=gc.newImage("/image/block.png") - local l={} - gc.setColor(1,1,1) - for i=1,13 do - l[i]=gc.newCanvas(30,30) - gc.setCanvas(l[i]) - gc.draw(p,30-30*i) - end - blockSkin=l - l={} - for i=1,1 do - local p=gc.newImage("/image/BG/"..i..".png") - l[i]=gc.newCanvas(1536,1536) - gc.setCanvas(l[i]) - gc.draw(p,nil,nil,nil,12,12) - end - background=l - gamepadIcon={} - for i=1,9 do - gamepadIcon[i]=gc.newImage("/image/gamepadIcon/"..(actName[i])..".png") - end titleImage=gc.newImage("/image/title.png") - gc.setCanvas() + mouseIcon=gc.newImage("/image/mouseIcon.png") + blockSkin={} + for i=1,13 do + blockSkin[i]=gc.newImage("/image/block/1/"..i..".png") + end + background={} + gc.setColor(1,1,1) + background={} + for i=1,2 do + background[i]=gc.newImage("/image/BG/"..i..".png") + end + virtualkeyIcon={} + for i=1,9 do + virtualkeyIcon[i]=gc.newImage("/image/virtualkey/"..(actName[i])..".png") + end end do--Particle PTC={dust={}}--Particle systems @@ -1420,11 +1430,10 @@ do--Particle gc.setCanvas() end c=nil + userdata=fs.newFile("userdata") if fs.getInfo("userdata")then loaddata() end -stat.run=stat.run+1 -setFont=fontLib[setting.lang] -Text=Texts[setting.lang] \ No newline at end of file +stat.run=stat.run+1 \ No newline at end of file diff --git a/paint.lua b/paint.lua index 1043ae85..0fe64d13 100644 --- a/paint.lua +++ b/paint.lua @@ -77,22 +77,48 @@ function drawPixel(y,x,id,alpha) gc.setColor(1,1,1,alpha) gc.draw(blockSkin[id],30*x-30,600-30*y) end +function drawVirtualkey() + gc.setLineWidth(10) + gc.setColor(1,1,1,setting.virtualkeyAlpha*.2) + for i=1,#virtualkey do + local b=virtualkey[i] + gc.circle("line",b[1],b[2],b[4]-5) + if setting.virtualkeyIcon then gc.draw(virtualkeyIcon[i],b[1],b[2],nil,2*b[4]*.0125,nil,18,18)end + end +end Pnt={BG={}} function Pnt.BG.none() - gc.clear(.1,.1,.1) + gc.clear(.2,.2,.2) +end +function Pnt.BG.glow() + local t=((sin(Timer()*.5)+sin(Timer()*.7)+sin(Timer()*.9+1)+sin(Timer()*1.5)+sin(Timer()*2+3))+5)*.05 + gc.clear(t,t,t) end function Pnt.BG.game1() gc.setColor(1,1,1) - gc.draw(background[1],640,360,Timer()*.15,nil,nil,768,768) + gc.draw(background[1],640,360,Timer()*.15,12,nil,64,64) end function Pnt.BG.game2() gc.setColor(1,.5,.5) - gc.draw(background[1],640,360,Timer()*.2,nil,nil,768,768) + gc.draw(background[1],640,360,Timer()*.2,12,nil,64,64) end function Pnt.BG.game3() gc.setColor(.6,.6,1) - gc.draw(background[1],640,360,Timer()*.25,nil,nil,768,768) + gc.draw(background[1],640,360,Timer()*.25,12,nil,64,64) +end +function Pnt.BG.rgb() + gc.clear( + sin(Timer()*1.2)*.15+.5, + sin(Timer()*1.5)*.15+.5, + sin(Timer()*1.9)*.15+.5 + ) +end +function Pnt.BG.strap() + gc.setColor(1,1,1) + local x=Timer()%32*40 + gc.draw(background[2],x,0,nil,10) + gc.draw(background[2],x-1280,0,nil,10) end function Pnt.load() @@ -109,7 +135,7 @@ end function Pnt.main() gc.setColor(1,1,1) setFont(30) - gc.print("Alpha V0.2",370,150) + gc.print("Alpha V0.3",370,150) if system==2 then gc.print("Android",530,110) end @@ -121,7 +147,7 @@ function Pnt.play() setmetatable(_G,P.index) gc.push("transform") gc.translate(x,y)gc.scale(size)--Scale - gc.setColor(0,0,0,.8)gc.rectangle("fill",0,0,600,690)--Black Background + gc.setColor(0,0,0,.7)gc.rectangle("fill",0,0,600,690)--Black Background gc.setLineWidth(3) gc.setColor(1,1,1)gc.rectangle("line",0,0,600,690)--Big frame gc.translate(150,70) @@ -247,19 +273,21 @@ function Pnt.play() bonus[i]:draw() end--Effects - gc.setColor(1,1,1) - setFont(40) - gc.print(format("%0.2f",time),-125,530)--Draw time - if mesDisp[gamemode]then mesDisp[gamemode]()end--Draw other message + if P.size>.3 then + gc.setColor(1,1,1) + setFont(40) + gc.print(format("%0.2f",time),-125,530)--Draw time + if mesDisp[gamemode]then mesDisp[gamemode]()end--Draw other message - setFont(15) - gc.setColor(1,1,1) - gc.print("BPM",380,490) - gc.print("KPM",335,580) - setFont(30) - drawDial(350,520,dropSpeed) - drawDial(400,570,keySpeed) - --Speed dials + setFont(15) + gc.setColor(1,1,1) + gc.print("BPM",380,490) + gc.print("KPM",335,580) + setFont(30) + drawDial(350,520,dropSpeed) + drawDial(400,570,keySpeed) + --Speed dials + end gc.pop() end--Draw players gc.setColor(1,1,1) @@ -268,13 +296,7 @@ function Pnt.play() end setmetatable(_G,nil) if system==2 then - gc.setColor(1,1,1,.8) - gc.setLineWidth(5) - for i=1,#gamepad do - local k=gamepad[i] - gc.circle("line",k.x,k.y,k.r0) - gc.draw(gamepadIcon[i],k.x,k.y,nil,3,nil,18,18) - end + drawVirtualkey() end end function Pnt.setting2() @@ -292,31 +314,42 @@ function Pnt.setting2() gc.print("<<",keysetting and 380 or 670,60*(keysetting or gamepadsetting)-10) end end +function Pnt.setting3() + drawVirtualkey() + gc.setLineWidth(3) + gc.setColor(1,1,1,sin(Timer()*4)*.1+.1) + for i=1,31 do + gc.line(40*i,0,40*i,720) + end + for i=1,17 do + gc.line(0,40*i,1280,40*i) + end +end function Pnt.help() setFont(32) gc.setColor(1,1,1) for i=1,11 do mStr(Text.help[i],640,15+43*i) end - gc.draw(img.title[setting.lang],180,600,.2,.7+.05*sin(Timer()*2),nil,140,100) + gc.draw(titleImage,180,600,.2,.7+.05*sin(Timer()*2),nil,140,100) end function Pnt.stat() setFont(30) gc.setColor(1,1,1) for i=1,10 do - gc.print(Text.stat[i],250,20+40*i) + gc.print(Text.stat[i],350,20+40*i) end - gc.print(stat.run,600,60) - gc.print(stat.game,600,100) - gc.print(format("%0.2f",stat.gametime).."s",600,140) - gc.print(stat.piece,600,180) - gc.print(stat.row,600,220) - gc.print(stat.atk,600,260) - gc.print(stat.key,600,300) - gc.print(stat.rotate,600,340) - gc.print(stat.hold,600,380) - gc.print(stat.spin,600,420) + gc.print(stat.run,650,60) + gc.print(stat.game,650,100) + gc.print(format("%0.2f",stat.gametime).."s",650,140) + gc.print(stat.piece,650,180) + gc.print(stat.row,650,220) + gc.print(stat.atk,650,260) + gc.print(stat.key,650,300) + gc.print(stat.rotate,650,340) + gc.print(stat.hold,650,380) + gc.print(stat.spin,650,420) - gc.draw(img.title[setting.lang],260,570,.2+.07*sin(Timer()*3),.8,nil,250,60) + gc.draw(titleImage,260,570,.2+.07*sin(Timer()*3),.8,nil,250,60) end \ No newline at end of file diff --git a/timer.lua b/timer.lua index d994b1b6..782adffc 100644 --- a/timer.lua +++ b/timer.lua @@ -56,23 +56,6 @@ function Tmr.play(dt) end -- Update attack beam - local list=tc.getTouches() - for K=1,#gamepad do - local b=gamepad[K] - local press=false - for k,v in ipairs(list)do - local x,y=convert(tc.getPosition(v)) - if (x-b.x)^2+(y-b.y)^2