From 5eea97dd8b47b225bc8f23f984db3820a961eee5 Mon Sep 17 00:00:00 2001 From: MrZ_26 Date: Tue, 4 Feb 2020 19:34:54 +0800 Subject: [PATCH] Alpha V0.7.20 --- call&sys.lua | 384 ++++++++++++++++++++++-------------------- conf.lua | 2 +- dataList.lua | 71 ++++---- font.ttf | Bin 98404 -> 99420 bytes gamefunc.lua | 62 +++++-- language/chi.lua | 25 ++- language/chi_full.lua | 29 +++- language/eng.lua | 29 +++- list.lua | 110 ++++++++---- main.lua | 33 ++-- paint.lua | 46 +++-- texture.lua | 3 +- timer.lua | 8 + toolfunc.lua | 10 +- 14 files changed, 482 insertions(+), 330 deletions(-) diff --git a/call&sys.lua b/call&sys.lua index 45eee883..f117fbb3 100644 --- a/call&sys.lua +++ b/call&sys.lua @@ -22,8 +22,13 @@ local sceneInit={ BGM("blank") end, main=function() + BGM("blank") collectgarbage() end, + music=function() + sel=1 + BGM() + end, mode=function() curBG="none" saveData() @@ -137,7 +142,10 @@ function buttonControl_gamepad(i) end end -mouseDown={} +mouseDown,mouseMove,mouseUp,wheelmoved={},{},{},{} +touchDown,touchUp,touchMove={},{},{} +keyDown,keyUp={},{} +gamepadDown,gamepadUp={},{} function mouseDown.intro(x,y,k) if k==2 then back() @@ -145,126 +153,9 @@ function mouseDown.intro(x,y,k) gotoScene("main") end end -function mouseDown.draw(x,y,k) - mouseMove.draw(x,y) -end -function mouseDown.setting3(x,y,k) - if k==2 then back()end - for K=1,#virtualkey do - local b=virtualkey[K] - if (x-b[1])^2+(y-b[2])^210 then sx=nil end - if sy<1 or sy>20 then sy=nil end - if sx and sy and ms.isDown(1,2,3)then - preField[sy][sx]=ms.isDown(1)and pen or ms.isDown(2)and 0 or -1 - end -end -function mouseMove.setting3(x,y,dx,dy) - if sel and ms.isDown(1)then - local b=virtualkey[sel] - b[1],b[2]=b[1]+dx,b[2]+dy - end -end -mouseUp={} -function mouseUp.setting3(x,y,k) - if sel then - local b=virtualkey[sel] - local k=snapLevelValue[snapLevel] - b[1],b[2]=int(b[1]/k+.5)*k,int(b[2]/k+.5)*k - end -end -wheelmoved={} -function wheelmoved.draw(x,y) - if y<0 then - pen=pen+1 - if pen==8 then pen=9 elseif pen==14 then pen=0 end - else - pen=pen-1 - if pen==8 then pen=7 elseif pen==-1 then pen=13 end - end -end -function wheelmoved.mode(x,y) - modeSel=min(max(modeSel+(y>0 and -1 or 1),1),#modeID) - levelSel=ceil(#modeLevel[modeID[modeSel]]*.5) -end -touchDown={} function touchDown.intro(id,x,y) gotoScene("main") end -function touchDown.draw(id,x,y) -end -function touchDown.setting3(id,x,y) - for K=1,#virtualkey do - local b=virtualkey[K] - if (x-b[1])^2+(y-b[2])^210 then sx=nil end - if sy<1 or sy>20 then sy=nil end - if sx and sy then - preField[sy][sx]=pen - end -end -function touchMove.play(id,x,y,dx,dy) - if setting.virtualkeySwitch then - local l=tc.getTouches() - for n=1,#virtualkey do - local b=virtualkey[n] - for i=1,#l do - local x,y=xOy:inverseTransformPoint(tc.getPosition(l[i])) - if(x-b[1])^2+(y-b[2])^2<=b[3]then goto L end - end - releaseKey(n,players[1]) - ::L:: - end - end -end -keyDown={} function keyDown.intro(key) if key=="escape"then back() @@ -272,6 +163,18 @@ function keyDown.intro(key) gotoScene("main") end end +function gamepadDown.intro(key) + if key=="back"then + back() + else + gotoScene("main") + end +end + +function wheelmoved.mode(x,y) + modeSel=min(max(modeSel+(y>0 and -1 or 1),1),#modeID) + levelSel=ceil(#modeLevel[modeID[modeSel]]*.5) +end function keyDown.mode(key) if key=="down"then if modeSel<#modeID then @@ -299,13 +202,35 @@ function keyDown.mode(key) back() end end +function gamepadDown.mode(key) + if key=="dpdown"then + if modeSel<#modeID then modeSel=modeSel+1 end + elseif key=="dpup"then + if modeSel>1 then modeSel=modeSel-1 end + elseif key=="start"then + loadGame(modeSel,levelSel) + elseif key=="back"then + back() + end +end + +function keyDown.music(key) + if key=="down"then + sel=sel%#musicID+1 + elseif key=="up"then + sel=(sel-2)%#musicID+1 + elseif key=="return"or key=="space"then + BGM(musicID[sel]) + elseif key=="escape"then + back() + end +end + function keyDown.custom(key) if key=="left"then - local k=customID[optSel] - customSel[k]=(customSel[k]-2)%#customRange[k]+1 + customSel[optSel]=(customSel[optSel]-2)%#customRange[customID[optSel]]+1 elseif key=="right"then - local k=customID[optSel] - customSel[k]=customSel[k]%#customRange[k]+1 + customSel[optSel]=customSel[optSel]%#customRange[customID[optSel]]+1 elseif key=="down"then optSel=optSel%#customID+1 elseif key=="up"then @@ -320,6 +245,37 @@ function keyDown.custom(key) back() end end + +function mouseDown.draw(x,y,k) + mouseMove.draw(x,y) +end +function mouseMove.draw(x,y,dx,dy) + sx,sy=int((x-200)/30)+1,20-int((y-60)/30) + if sx<1 or sx>10 then sx=nil end + if sy<1 or sy>20 then sy=nil end + if sx and sy and ms.isDown(1,2,3)then + preField[sy][sx]=ms.isDown(1)and pen or ms.isDown(2)and 0 or -1 + end +end +function wheelmoved.draw(x,y) + if y<0 then + pen=pen+1 + if pen==8 then pen=9 elseif pen==14 then pen=0 end + else + pen=pen-1 + if pen==8 then pen=7 elseif pen==-1 then pen=13 end + end +end +function touchDown.draw(id,x,y) +end +function touchMove.draw(id,x,y,dx,dy) + sx,sy=int((x-200)/30)+1,20-int((y-60)/30) + if sx<1 or sx>10 then sx=nil end + if sy<1 or sy>20 then sy=nil end + if sx and sy then + preField[sy][sx]=pen + end +end function keyDown.draw(key) if key=="delete"then Buttons.draw.clear.code() @@ -348,6 +304,7 @@ function keyDown.draw(key) pen=find("123qwea#sdzxc",key)or pen end end + function keyDown.setting2(key) if key=="escape"then if keyboardSetting then @@ -377,58 +334,6 @@ function keyDown.setting2(key) curBoard=min(curBoard+1,8) end end -function keyDown.play(key) - if key=="escape"and not sceneSwaping then - return(frame<180 and back or pauseGame)() - end - local m=setting.keyMap - for p=1,human do - for k=1,12 do - if key==m[2*p-1][k]or key==m[2*p][k]then - pressKey(k,players[p]) - return - end - end - end -end -function keyDown.pause(key) - if key=="escape"then - back() - elseif key=="return"or key=="space"then - resumeGame() - end -end -keyUp={} -function keyUp.play(key) - local m=setting.keyMap - for p=1,human do - for k=1,12 do - if key==m[2*p-1][k]or key==m[2*p][k]then - releaseKey(k,players[p]) - return - end - end - end -end -gamepadDown={} -function gamepadDown.intro(key) - if key=="back"then - back() - else - gotoScene("main") - end -end -function gamepadDown.mode(key) - if key=="dpdown"then - if modeSel<#modeID then modeSel=modeSel+1 end - elseif key=="dpup"then - if modeSel>1 then modeSel=modeSel-1 end - elseif key=="start"then - loadGame(modeSel,levelSel) - elseif key=="back"then - back() - end -end function gamepadDown.setting2(key) if key=="back"then if joystickSetting then @@ -458,6 +363,117 @@ function gamepadDown.setting2(key) curBoard=min(curBoard+1,8) end end + +function mouseDown.setting3(x,y,k) + if k==2 then back()end + for K=1,#virtualkey do + local b=virtualkey[K] + if (x-b[1])^2+(y-b[2])^2=100 then - readyDrawFrame=readyDrawFrame-100 - love.draw() - gc.present() + if not wd.isMinimized()then + readyDrawFrame=readyDrawFrame+setting.frameMul + if readyDrawFrame>=100 then + readyDrawFrame=readyDrawFrame-100 + love.draw() + gc.present() + end end ::L::if Timer()-frameT<1/60 then goto L end frameT=Timer() diff --git a/conf.lua b/conf.lua index 9d303f1c..80fa7445 100644 --- a/conf.lua +++ b/conf.lua @@ -9,7 +9,7 @@ function love.conf(t) t.audio.mixwithsystem=true--Switch on to keep sysBGM local W=t.window - W.title="Techmino V0.7.19" + W.title="Techmino V0.7.20" W.icon="/image/icon.png" W.width,W.height=1280,720 W.minwidth,W.minheight=640,360 diff --git a/dataList.lua b/dataList.lua index b3733502..f3e4de9f 100644 --- a/dataList.lua +++ b/dataList.lua @@ -52,6 +52,9 @@ loadmode={ createPlayer(1,340,15) if curMode.lv==2 then pushSpeed=1 + for i=1,5 do + garbageRise(10,1,rnd(10)) + end end end, solo=function() @@ -156,10 +159,10 @@ loadmode={ custom=function() for i=1,#customID do local k=customID[i] - modeEnv[k]=customRange[k][customSel[k]] + modeEnv[k]=customRange[k][customSel[i]] end modeEnv._20G=modeEnv.drop==-1 - modeEnv.oncehold=customSel.hold==1 + modeEnv.oncehold=customSel[6]==1 createPlayer(1,340,15) if modeEnv.opponent==0 then else @@ -186,6 +189,8 @@ loadmode={ end end end + modeEnv.bg=customRange.bg[customSel[12]] + modeEnv.bgm=customRange.bgm[customSel[13]] end, } mesDisp={ @@ -326,6 +331,10 @@ mesDisp={ mStr(max(100-P.stat.row,0),-82,280) end, custom=function() + setFont(25) + mStr("Rows",-82,300) + setFont(80) + mStr(P.stat.row,-82,220) if P.gameEnv.target<1e4 then setFont(75) mStr(max(P.gameEnv.target-P.stat.row,0),-82,280) @@ -338,7 +347,7 @@ mesDisp={ if B>0 then gc.setColor(blockColor[B]) gc.rectangle("line",30*x-25,605-30*y,20,20) - elseif B==-1 then + elseif B==0 then gc.setColor(.8,.8,.8,.6) gc.line(30*x-25,605-30*y,30*x-5,625-30*y) gc.line(30*x-25,625-30*y,30*x-5,605-30*y) @@ -414,7 +423,7 @@ Event={ end P.lastRecv=A if P.id==1 or A.id==1 then - newTask(Event_task.throwBadge,nil,{P,max(3,P.badge)*4}) + newTask(Event_task.throwBadge,A,{P,max(3,P.badge)*4}) end freshMostBadge() end @@ -492,10 +501,7 @@ Event={ P.gameEnv.fall=rush_fall[s] P.gameEnv.das=10-s if s==3 then P.gameEnv.arr=2 end - if s==5 then - P.gameEnv.bone=true - newTask(Event_task.bgmWarp,P,120) - end + if s==5 then P.gameEnv.bone=true end showText(P,text.stage[s],"fly",80,-120) SFX("reach") end @@ -509,7 +515,6 @@ Event={ local c=#P.clearing if t%100==99 and c==0 then goto L end t=t+(c<3 and c+1 or c==3 and 5 or 7) - if P.modeData.event<3 then t=t+50 end if int(t*.01)>P.modeData.event then P.modeData.event=P.modeData.event+1 if P.modeData.event==5 then @@ -642,11 +647,11 @@ Event_task={ end end end, - throwBadge=function(self,P,data) + throwBadge=function(self,A,data) data[2]=data[2]-1 if data[2]%4==0 then throwBadge(data[1],data[1].lastRecv) - if not data[1].ai and data[2]%8==0 then + if not A.ai and data[2]%8==0 then SFX("collect") end end @@ -790,33 +795,33 @@ Event_task={ defaultModeEnv={ sprint={ { - drop=60,target=10, - reach=Event.win, + drop=60,lock=60, + target=10,reach=Event.win, bg="strap",bgm="race", }, { - drop=60,target=20, - reach=Event.win, + drop=60,lock=60, + target=20,reach=Event.win, bg="strap",bgm="race", }, { - drop=60,target=40, - reach=Event.win, + drop=60,lock=60, + target=40,reach=Event.win, bg="strap",bgm="race", }, { - drop=60,target=100, - reach=Event.win, + drop=60,lock=60, + target=100,reach=Event.win, bg="strap",bgm="race", }, { - drop=60,target=400, - reach=Event.win, + drop=60,lock=60, + target=400,reach=Event.win, bg="strap",bgm="push", }, { - drop=60,target=1000, - reach=Event.win, + drop=60,lock=60, + target=1000,reach=Event.win, bg="strap",bgm="push", }, }, @@ -1016,18 +1021,18 @@ defaultModeEnv={ }, { oncehold=false, - drop=30,lock=60, - target=1,reach=Event.tech_reach_easy, + drop=1e99,lock=1e99, + target=1,reach=Event.tech_reach_ultimate, + bg="matrix",bgm="newera", + }, + { + drop=10,lock=60, + freshLimit=15, + target=1,reach=Event.tech_reach_hard, bg="matrix",bgm="way", }, { - drop=8,lock=60, - freshLimit=15, - target=1,reach=Event.tech_reach_hard, - bg="matrix",bgm="secret8th", - }, - { - drop=4,lock=40, + drop=3,lock=40, target=1, freshLimit=15, reach=Event.tech_reach_hard, @@ -1152,12 +1157,10 @@ defaultModeEnv={ custom={ { reach=Event.win, - bg="none",bgm="reason", }, { Fkey=true, reach=Event.win, - bg="none",bgm="reason", }, }, } \ No newline at end of file diff --git a/font.ttf b/font.ttf index bfaa1d1218e4104ddacc9523724e46acac72f4ab..e0d542f05c7c85c0892872d4560b41fd76e4668e 100644 GIT binary patch delta 2991 zcmZ8jX;f3!7Cz@*LYPTNLXbIxAq*lA!VCrn1O-GuK?G_5nZlGv7(`8oh=_#}uNmPe6Nr}BIgx|G`1r{P`fpRRY$I(M(N@3+r7-*@&t`@R$z z&Nmqf0R#Y;0uexg-}aPs0X+1R1^^g>dH3d)aw;z0dG`t>h8*Z4#S7g_r{`F<6aR#-?jwX=P2}xs+aP{Vo9T z=_Td491eAQ$`AlbJOHS=lv7gypMg;fV1orXmvKt>-A$XI0A8x(OK|#oPpklFl2n$01qX<;#wd{A~LkY99@QKh?_4a&8kTDz`)cB0Avcm zsDmls3=V@a@HbROYo|#h1mpX#U$S6)2#!iJOrkC83#JS4g&~Cz#WXIBn=8pS-zPCO zRTEdRm7D?XPmy;`S0m4u9YRO*zLjK}xJg3IZT~-hJlmWEg;?;)(-qCi@sGC`9xXgv z*fjUGE?<|e%hK)C#p*WdqIE1CL+7F+YhP<$Y3H@yYHw<vRUw^TP(BdS5wfJ&iiSJkU>RO?1wjXWONJz_Ha z^YDw|>0#M$=kST)^5N3q$iZ8Kmj<(PzlEuk3%ff`RAgNyZ zM*0`2Mj9n$O1-7lQWL3Bx4!%L?kC;%x^Hw(b|2^t={D-dou!>|IsNSP_0#R0H##+) zL!CLDgia{=T5>^>F4-no)4@A+>6BUP{K@+#)hCBfrnH2&Fk3uYTw1J}pET>5&o;L; zpJ=XXE^Xd&{QB|KrcX_N#}}d2l`jz-Q@jdY+@kQ~V_`JAR zd`8?Z_7z*zzpG!UZ>ks8`-`57u8UNn7E!HGd1!mxjk>_vjkSy#LiNMy`_@^Gbq|AEiuhx0@EK71?S?zqJ>9*_{kDgr$3c%7Mm*!LC*m34ndhnST=H`F%J3TU`rw`6-S55Z zljn26=eM;R)*f7|@U`|$_FY()yiVl@{Pz0Y^LO;`@V^yc5zrFwf!WBM4Gaks2hOnq zS^2C>LFAy0p!dN+!TllWA-Yhb(CpBvP<5#ALs(*%I@~L~Df~i&L4-WgB628-5Y-%Y zZN2UK=Jj{k@$44%`{>l@=Nqy&%x;|76tih)GqSlgCN^eqOG9jW?Ay4Ot>mqWt?##m zZR?B&@zMmdgw}-R#InQ>+to=)N%wa6?&wcuCtpcPPMJ?_+G()!n_X7BYIeO$OH5lx zKOo%A-aVILlcC6XyQgW-a;8OQRAzJLLY8k5f7WEwyszC= zJ9~g};LL%Ay5hPw2QM6oKWuflRp=$WBsy51A+{AS9?3s)t%1;R_-NtL%Z<*B4aW?R zjO*Xwe-qIZ3Jb%LXL{|%F$!l3YIo6uk+S&T%RP3p#w#2rj_W1Uxj)0B_k{HRf zursyuo6`ZO#iu9F#GaWu+tU@(b*($9`;l~m^qS01rs(nOneL70y@XvQ)92#PeW!3$ zoKd_{#wg`|F@0Cgmz=-XPwsE&e>;#dFmoaQ!s4K4h%q!f95Xz7(c)sx#pw~lktCIk zYPG{5APH+suaQNp$KU}V(TFs+@xR(sIqiJBavwE7U9nCBAjN}3NAWC(8qC3ia1O3P zOr;B-L`eNlQn&`|O@G1$v#2B{8cczYKSTBZcqRP_ssAKekm~;qz<6QE@ohpBgskXL z3F-`dK>&yXz>Pv<{V^<{CG-dij)K8-7M(@&2&U2~bPC-OQt|E{77$ONVFO}toFP66 z4fcf|!Kmcp0Oaf6K*Giv_qAk4TQbwWAsOzpYPEt%DOKJXv^a{311A)k>VMHIkZAq- zsc3(P&2d}l=2T-JyP_gCHw-aAP>wOt%-v>>I?XUky~ibyoCh?bcPo8AOvD-CHX=Aw|AFRfZ-L?j zIFw{F;aX=zF+Wk;g_G3g;7o8#Cog6JnL%(uAS^&k%m_xsC?54A`C1n^G088fQMSg1 z%E)WUYby1lR6pC)#C1MLB!sl&!5SnQkdB32RouvJcb}fq3a=*6cjv@f}t@1;UDHRIv8SRHAm3O zh#XI^!VPR|`?yMH@A$Qeww&C`ygVmU2S+>O1T!b1k1*VgWPsZOzmBQ3i)46l!t_-T zh15tdJ1>$rUOy9&9{{R-MX)zde*M#gSEg4LJFN)OtGC4D3q z*FI6;HbATlzCzClE3TO}E%tQNFwkd zl6*-ZF&F|NR~DqYtWwKb)>X6}LCYegT3J^a)=}2A3~Y4zV}G1^-Z|%a&YW}R%z0YrqB;AoxgnPzcR3cOC#J((KJUO(9U5SuqR%*3ST76H-hlr+#Kb>>M+$ zFD6$PNgq8?1K>Icpo~FcA)&yf%K51|cGGO(M6<&Rwj`O~@66^+q%f+E7azNA&ff`u zRXn-uG=Wec_;wKh7kdCKloUc06`BD9W`e6(fGs6Z3dhr{qX0x9n&TtXvT{a5@{ch9 zqIm;gxA$}L<_2>3De6;p`1iotV!^Bf)4$p!e8MNIV~MSE5mpaB5ut}L2J(PvU_2Cq zTC*|LK>ZLzGX+>YfJ|$amJn=(=E5-A)ucmbpghs$fqWW`JFwjN3INm)%G@v*0$5NB z^kB*Yf&Df-fd9Lp2D%ULv-N?c8{Mq$5Uq%jM0|-S$rI+<7Q(x%wRSdZYvwFi;Q5E@ zmGuMohD{9|WgGkdd=uB!31WRFug$IL)|ytvXXBsVF%}wgjXA~);~`_5G1eGn^fh`K zoeYbHmxiAW_Y9+k5yPJhorWt0j)7t*G~^j_4R{02;AikLSn2!pDm|hP)(7c*buV;( z(cyG{I*e|c&QAM4E77)UIodicT}#tav_x%$7Ok~l4Xg~P266||2NE^UG&7nh&G(wy zno&)k=9)&S>C&`l*cyT+u>WQMkNsKw8`RI$^Xl)^Vl}MhsY}&lHC}aFWm4%?N)@82 zP#sfQ_EhzddXjn)d-nI>dpwoTloQH7EBlmPN~!Xa;-lh;;-+FqF`!^5vJ~lxg9=ut z{Js3G{Ehszd`|wed|2Kkm&x1Y_3~2rVR^JXTyEF>Q@5a-(QVze)b)$(t?Z5Lwd{M@ z4cVaVfD9+|k$K7NWj3;P(pBk4sZPq4o|BeIOC^(%E=e--FXRRCD>9GFAybGR89)%E z93dguNCFavL?EH!-^FiO;!&|i94!tO`-z>zR^oM{-$l!!Y0(d&8=?wPn8;EDUGeC^ zTpqg2Zy#yzYroo_+inf7z_(yIoDL_z&TZsNx=U8VDZzw5El>(l`QiLPz8BwvZ_9hk z8{oC^nt2U88jr|}YZ_`g!u`PA)%Z(eM2WW&3Le>bp%4T1)ri=&($IDh5nI6WK% zN5<*ov~u_ye~xY4V%?Lv3w3Af0@(jx53yD3MmB>bIiGZH&knT6P23E zKIRg0k@*{Qig}ya$5b;F%r2&sDPo>uR5Pgb_w;CbI6aK+OLwF_qfOC%qCKSjoi;?% z()wd*YMO|4nPx>DDSK7+Ps$$h2w6cElKw`TAPGo(QZuQRR6$~p2&4$o#*(o!Q)e>I zq!km2mh=AueGMSgkcr?hh}r~A0yGrxdFxxDNfXZb4a8coTef$!$JwXabL{mFIEM^} zvkr@n364C+d8ZU7h0|T9cg{p-z4N?_qf3s<*J2@ z9gE&M-hC{eK%ZWp)tzxWIXm^f>wSxSZ~2A$8U0@SyZfj5^ZciA_PBUl8}9k8_+7$X zvjM3AEdlep19lhf<^_U4eBj+6d{9TwtKg*Ip*`#O)a=ph`4CbO@;sCpIu_;?Mh?5P z7qj>1URk(%I6M4SL}0{xBtEh&av=&tMMl*}P48nx?i-ADj1G<#;{EWQ`$P7NW1M5+ zW0VJ+52PJ<9J@J|9XtC4`HO|P{DXN1C*won`Cqzz`6z*UXw#wj#G0=*ev2;B1_*iB@=FP9O zvM^cKvzA%k)P6IWU6lPO`}GO;6T}lYb8K=7a_;3O<|u3pBJPSj2C7V&K6}CEfuF0Unj;8$IsA9uq8552HBBfNvWZ%mX4Rj zmUWgbQN5|9)G_KuS|;sVx*NTMey=>WoLYXJ;mBYanU>62=0rt6g`_gFva`yqs-$YV z8e6S78*+BxoUkUNX7W7w{BrFmOTx~n^Q-HvTj8W}Ze8fR@S#4xe*9wM#omURhSkQM zjrY02CQK8x=_xOccda?R`7OVN|5y+r;0aN}mP^5xge|BRMyq2hw+-Fa0o%X~_zt{! zvYmI?{qk%Fw`1iByVJR|zH>!H7tM?52pZuc%aS4~S}HUjk0RN0S4bDPYp$Ey{ZXz} zY*J(@?q3bNDp9&BdwcwP#;%p9+*I6Nx89?@N;O)YsBY`a?#ni#{%nV{SJ zn}RJd7JEaTH=(R(4%n@Bd>5>r6Bm@XI4G(FkPG!xmBZ1TC-7HzT{^L97+KI>a& za(O`#K%v8Rbch6*@l8484p}?|01kE@9{!FAy+k#Bl3zfuVwRpsNC-YS{GbZz cwivFgf!3pj8*3qZ=t>t03Lc(fK^HCm2lDSy2 - if not P.small and P.showTime>=20 and setting.fxs and y1>=y2 then + if P.gameEnv.block and y1>=y2 then ins(P.shade,{5,P.cur.color,x1,y1,x2,y2}) end end @@ -254,6 +254,7 @@ function createPlayer(id,x,y,size,AIspeed,data) ins(players.alive,P) P.index={__index=P} P.x,P.y,P.size=x,y,size or 1 + P.fieldOffX,P.fieldOffY=0,0 P.small=P.size<.1 if P.small then P.centerX,P.centerY=P.x+300*P.size,P.y+600*P.size @@ -435,7 +436,7 @@ function createBeam(S,R,lv)--Player id end ins(FX.beam,{x1,y1,x2,y2,t=0,lv=lv}) end -function throwBadge(S,R)--Player id +function throwBadge(S,R)--Sender/Receiver local x1,y1,x2,y2 if S.small then x1,y1=S.centerX,S.centerY @@ -443,9 +444,9 @@ function throwBadge(S,R)--Player id x1,y1=S.x+308*S.size,S.y+450*S.size end if R.small then - x1,y1=R.centerX,R.centerY + x2,y2=R.centerX,R.centerY else - x2,y2=R.x+73*R.size,R.y+345*R.size + x2,y2=R.x+70*R.size,R.y+344*R.size end ins(FX.badge,{x1,y1,x2,y2,t=0}) end @@ -579,7 +580,10 @@ function freshgho() goto L end if P.curY>P.y_img then - createShade(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1) + if P.human and setting.fxs then + createShade(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1) + P.fieldOffY=4 + end P.curY=P.y_img end else @@ -719,7 +723,9 @@ function spin(d,ifpre) end goto quit ::spin:: - createShade(P.curX,P.curY+P.r-1,P.curX+P.c-1,P.curY) + if P.human and setting.fxs then + createShade(P.curX,P.curY+P.r-1,P.curX+P.c-1,P.curY) + end P.curX,P.curY,P.dir=ix,iy,idir P.sc,P.cur.bk=scs[P.cur.id][idir],icb P.r,P.c=ir,ic @@ -1090,8 +1096,11 @@ act={ changeAtkMode(3) else if P.waiting==-1 then - if P.curY-P.y_img>0 then - createShade(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1) + if P.curY~=P.y_img then + if P.human and setting.fxs then + createShade(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1) + P.fieldOffY=5 + end P.curY=P.y_img P.spinLast=false if P.human then @@ -1131,7 +1140,7 @@ act={ P.swappingAtkMode=30 end end - if curMode.id=="custom"and curMode.lv==2 then + if curMode.id=="custom"and curMode.lv==2 and P.stat.row>0 then for y=1,20 do local L=P.field[y] for x=1,10 do @@ -1154,29 +1163,48 @@ act={ end, insDown=function() if P.curY~=P.y_img then - createShade(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1) + if P.human and setting.fxs then + createShade(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1) + end P.curY,P.lockDelay,P.spinLast=P.y_img,P.gameEnv.lock,false + if P.human and setting.fxs then + P.fieldOffY=4 + end end end, insLeft=function() - local x0=cx + local x0=P.curX ::L::if not ifoverlap(P.cur.bk,P.curX-1,P.curY)then P.curX=P.curX-1 - createShade(P.curX+1,P.curY+P.r-1,P.curX+1,P.curY) + if P.human and setting.fxs then + createShade(P.curX+1,P.curY+P.r-1,P.curX+1,P.curY) + end freshgho() goto L end - if x0~=cx then freshLockDelay()end + if x0~=P.curX then + if P.human and setting.fxs and P.curX==1 then + P.fieldOffX=-4 + end + freshLockDelay() + end end, insRight=function() - local x0=cx + local x0=P.curX ::L::if not ifoverlap(P.cur.bk,P.curX+1,P.curY)then P.curX=P.curX+1 - createShade(P.curX+P.c-1,P.curY+P.r-1,P.curX+P.c-1,P.curY) + if P.human and setting.fxs then + createShade(P.curX+P.c-1,P.curY+P.r-1,P.curX+P.c-1,P.curY) + end freshgho() goto L end - if x0~=cx then freshLockDelay()end + if x0~=P.curX then + if P.human and setting.fxs and P.curX+P.c==11 then + P.fieldOffX=4 + end + freshLockDelay() + end end, down1=function() if P.curY~=P.y_img then diff --git a/language/chi.lua b/language/chi.lua index 08ddf43c..44374368 100644 --- a/language/chi.lua +++ b/language/chi.lua @@ -36,6 +36,8 @@ return{ target="目标行数:", freshLimit="锁延刷新次数:", opponent="对手速度等级:", + bg="背景:", + bgm="背景音乐:", }, customVal={ drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞","[20G]"}, @@ -56,7 +58,8 @@ return{ keyboard="键盘",joystick="手柄", space="空格",enter="回车", setting2Help="方向键选择/翻页,回车修改,esc返回", - + musicRoom="音乐室", + nowPlaying="正在播放:", actName={"左移:","右移:","顺时针旋转:","逆时针旋转:","180°旋转","硬降:","软降:","暂存:","功能键:","重新开始:","左瞬移:","右瞬移:","软降到底:"}, modeName={ @@ -149,6 +152,7 @@ return{ main={ play="开始", setting="设置", + music="音乐室", stat="统计信息", help="帮助", quit="退出", @@ -162,18 +166,29 @@ return{ custom="自定义(C)", back="返回", }, + music={ + up="↑", + play="播放", + down="↓", + back="返回", + }, custom={ - up="Λ", - down="v", + up="↑", + down="↓", left="<", right=">", start1="消除开始", start2="拼图开始", draw="画图(D)", + set1="40行", + set2="1v1", + set3="无尽", + set4="隐形", + set5="极限", back="返回", }, draw={ - free="不定", + any="不定", block1="■", block2="■", block3="■", @@ -186,7 +201,7 @@ return{ gb3="■", gb4="■", gb5="■", - erase="×", + space="×", clear="清空", back="返回", }, diff --git a/language/chi_full.lua b/language/chi_full.lua index 2b75ce93..690f2ee9 100644 --- a/language/chi_full.lua +++ b/language/chi_full.lua @@ -36,6 +36,8 @@ return{ target="目标行数:", freshLimit="锁延刷新次数:", opponent="对手速度等级:", + bg="背景:", + bgm="背景音乐:", }, customVal={ drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞","[20G]"}, @@ -56,7 +58,8 @@ return{ keyboard="键盘",joystick="手柄", space="空格",enter="回车", setting2Help="方向键选择/翻页,回车修改,esc返回", - + musicRoom="音乐室", + nowPlaying="正在播放:", actName={"左移:","右移:","顺时针旋转:","逆时针旋转:","180°旋转","硬降:","软降:","暂存:","功能键:","重新开始:","左瞬移:","右瞬移:","软降到底:"}, modeName={ @@ -88,7 +91,7 @@ return{ load={"加载语音ing","加载音乐ing","加载音效ing","加载完成",}, tips={ - "不是动画,真的在加载!", + "不是动画,真的在加载!", "整个游戏都是MrZ完成的!", "大满贯10连击消四全清!", "<方块研究所>有一个Nspire-CX版本!", @@ -100,7 +103,7 @@ return{ "Miya:喵!", "225238922,哔哩哔哩 干杯~", "适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活", - "合群了就会消失,但是消失不代表没有意义", + "合群了就会消失,但是消失不代表没有意义", "学会使用两个旋转键,三个更好", "更小的DAS和ARR拥有更高的操作上限", "注意到\"旋转\"到底对方块做了些什么吗?", @@ -149,6 +152,7 @@ return{ main={ play="开始", setting="设置", + music="音乐室", stat="统计信息", help="帮助", quit="退出", @@ -162,18 +166,29 @@ return{ custom="自定义(C)", back="返回", }, + music={ + up="↑", + play="播放", + down="↓", + back="返回", + }, custom={ - up="Λ", - down="v", + up="↑", + down="↓", left="<", right=">", start1="消除开始", start2="拼图开始", draw="画图(D)", + set1="40行", + set2="1v1", + set3="无尽", + set4="隐形", + set5="极限", back="返回", }, draw={ - free="不定", + any="不定", block1="■", block2="■", block3="■", @@ -186,7 +201,7 @@ return{ gb3="■", gb4="■", gb5="■", - erase="×", + space="×", clear="清空", back="返回", }, diff --git a/language/eng.lua b/language/eng.lua index 3f22986c..86cec50a 100644 --- a/language/eng.lua +++ b/language/eng.lua @@ -36,6 +36,8 @@ return{ target="Line limit:", freshLimit="Lock fresh limit:", opponent="Opponent speed:", + bg="Background:", + bgm="BGM:", }, customVal={ drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞","[20G]"}, @@ -50,13 +52,14 @@ return{ freshLimit={0,8,15,"∞"}, opponent={"No CPU",1,2,3,4,5,6,7,8,9,10,11}, }, - softdropdas="softdropDAS:", - softdroparr="softdropARR:", + softdropdas="Down DAS:", + softdroparr="Down ARR:", snapLevelName={"Free pos","Snap-10","Snap-20","Snap-40","Snap-60","Snap-80"}, keyboard="Keyboard",joystick="Joystick", space="Space",enter="Enter", setting2Help="Arrowkey to select/change slot,Enter to change,Esc back", - + musicRoom="Music Room", + nowPlaying="Now Playing:", actName={"Move Left:","Move Right:","Rotate Right:","Rotate Left:","Rotate Flip:","Hard Drop:","Soft Drop:","Hold:","Function:","Restart:","Instant Left:","Instant Right:","Ins Down:"}, modeName={ @@ -149,6 +152,7 @@ return{ main={ play="Play", setting="Settings", + music="Music room", stat="Statistics", help="Help", quit="Quit", @@ -162,18 +166,29 @@ return{ custom="Custom(C)", back="Back", }, + music={ + up="↑", + play="Play", + down="↓", + back="Back", + }, custom={ - up="Λ", - down="v", + up="↑", + down="↓", left="<", right=">", start1="Clear Start", start2="Puzzle Start", draw="Draw(D)", + set1="40L", + set2="1v1", + set3="infinite", + set4="blind", + set5="classic", back="Back", }, draw={ - free="FREE", + any="ANY", block1="■", block2="■", block3="■", @@ -186,7 +201,7 @@ return{ gb3="■", gb4="■", gb5="■", - erase="×", + space="×", clear="CLEAR", back="Back", }, diff --git a/list.lua b/list.lua index 0dffa45b..70864c45 100644 --- a/list.lua +++ b/list.lua @@ -52,7 +52,6 @@ blockColor={ } sfx={ "button","swipe", - "ready","start","win","fail","collect", "move","rotate","rotatekick","hold", "prerotate","prehold", @@ -86,6 +85,7 @@ voiceList={ "spin","spin_","mini","b2b","b3b","pc", "win","lose","voc_nya","nya", } +voiceBank={} voice={ Z={"Z_1","Z_2"}, S={"S_1","S_2"}, @@ -110,18 +110,31 @@ voice={ nya={"nya_1","nya_2","nya_3","nya_4"}, } +musicID={ + "blank", + "way", + "race", + "newera", + "push", + "reason", + "infinite", + "cruelty", + "final", + "secret7th", + "secret8th", + "rockblock", + "8-bit happiness", + "end", +} customID={ - "drop", - "lock", - "wait", - "fall", - "next", - "hold", - "sequence", - "visible", + "drop","lock", + "wait","fall", + "next","hold", + "sequence","visible", "target", "freshLimit", "opponent", + "bg","bgm", } customRange={ drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99,-1}, @@ -135,6 +148,8 @@ customRange={ target={10,20,40,100,200,500,1000,1e99}, freshLimit={0,8,15,1e99}, opponent={0,60,30,20,15,10,7,5,4,3,2,1}, + bg={"none","game1","game2","game3","strap","rgb","grid","glow","matrix"}, + bgm={"blank","way","race","newera","push","reason","infinite","secret7th","secret8th","rockblock"}, } RCPB={10,33,200,33,105,5,105,60} @@ -159,7 +174,7 @@ modeLevel={ blind={"EASY","HARD","HARD+","LUNATIC","ULTIMATE","GM"}, dig={"NORMAL","LUNATIC"}, survivor={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"}, - tech={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"}, + tech={"NORMAL","NORMAL+","HARD","LUNATIC","ULTIMATE"}, c4wtrain={"NORMAL","LUNATIC"}, pctrain={"NORMAL","EXTRA"}, pcchallenge={"NORMAL","HARD","LUNATIC"}, @@ -169,15 +184,15 @@ modeLevel={ hotseat={"2P","3P","4P",}, custom={"Normal","Puzzle"}, } -local t,f=true,false +local O,_=true,false blocks={ - {[0]={{f,t,t},{t,t,f}},{{t,f},{t,t},{f,t}}}, - {[0]={{t,t,f},{f,t,t}},{{f,t},{t,t},{t,f}}}, - {[0]={{t,t,t},{f,f,t}},{{t,t},{t,f},{t,f}},{{t,f,f},{t,t,t}},{{f,t},{f,t},{t,t}}}, - {[0]={{t,t,t},{t,f,f}},{{t,f},{t,f},{t,t}},{{f,f,t},{t,t,t}},{{t,t},{f,t},{f,t}}}, - {[0]={{t,t,t},{f,t,f}},{{t,f},{t,t},{t,f}},{{f,t,f},{t,t,t}},{{f,t},{t,t},{f,t}}}, - {[0]={{t,t},{t,t}},{{t,t},{t,t}}}, - {[0]={{t,t,t,t}},{{t},{t},{t},{t}}}, + {[0]={{_,O,O},{O,O,_}},{{O,_},{O,O},{_,O}}}, + {[0]={{O,O,_},{_,O,O}},{{_,O},{O,O},{O,_}}}, + {[0]={{O,O,O},{_,_,O}},{{O,O},{O,_},{O,_}},{{O,_,_},{O,O,O}},{{_,O},{_,O},{O,O}}}, + {[0]={{O,O,O},{O,_,_}},{{O,_},{O,_},{O,O}},{{_,_,O},{O,O,O}},{{O,O},{_,O},{_,O}}}, + {[0]={{O,O,O},{_,O,_}},{{O,_},{O,O},{O,_}},{{_,O,_},{O,O,O}},{{_,O},{O,O},{_,O}}}, + {[0]={{O,O},{O,O}},{{O,O},{O,O}}}, + {[0]={{O,O,O,O}},{{O},{O},{O},{O}}}, } local l={1,2,6,7}for i=1,4 do blocks[l[i]][2],blocks[l[i]][3]=blocks[l[i]][0],blocks[l[i]][1]end for i=1,7 do blocks[i+7]=blocks[i]end @@ -244,14 +259,27 @@ local virtualkeySet={ {1200-770,40,1600,40},--restart },--PC key feedback } +local customSet={ + {20,20,1,1,7,1,1,1,3,4,1,1,1}, + {18,20,1,1,7,1,1,1,8,3,8,1,1}, + {22,22,1,1,7,3,1,3,8,4,1,1,1}, + {20,20,1,1,7,1,1,3,8,3,1,1,1}, + {23,11,8,11,4,1,2,1,8,3,1,1,1}, +} +local function useDefaultSet(n) + for i=1,#customSet[n]do + customSel[i]=customSet[n][i] + end +end Buttons={ load={}, intro={}, main={ - play= {x=380,y=300,w=240,h=240,rgb=color.red, f=70,code=function()gotoScene("mode")end,down="stat",right="setting"}, - setting={x=640,y=300,w=240,h=240,rgb=color.lightBlue, f=55,code=function()gotoScene("setting")end,down="stat",left="play",right="help"}, - stat= {x=640,y=560,w=240,h=240,rgb=color.cyan, f=55,code=function()gotoScene("stat")end,up="setting",left="play",right="help"}, - help= {x=900,y=560,w=240,h=240,rgb=color.yellow, f=55,code=function()gotoScene("help")end,up="setting",left="stat",right="quit"}, + play= {x=380,y=300,w=240, h=240,rgb=color.red, f=70,code=function()gotoScene("mode")end,down="stat",right="setting"}, + setting={x=640,y=300,w=240, h=240,rgb=color.lightBlue, f=55,code=function()gotoScene("setting")end,down="stat",left="play",right="music"}, + music= {x=900,y=300,w=240, h=240,rgb=color.lightCyan, f=42,code=function()gotoScene("music")end,down="help",left="setting",right="quit"}, + stat= {x=640,y=560,w=240, h=240,rgb=color.cyan, f=55,code=function()gotoScene("stat")end,up="setting",left="play",right="help"}, + help= {x=900,y=560,w=240, h=240,rgb=color.yellow, f=55,code=function()gotoScene("help")end,up="music",left="stat",right="quit"}, quit= {x=1180,y=620,w=120,h=120,rgb=color.lightGrey, f=50,code=function()gotoScene("quit")end,up="setting",left="help"}, }, mode={ @@ -259,23 +287,34 @@ Buttons={ down= {x=1000,y=430,w=200,h=140, rgb=color.white, f=80, code=function()keyDown.mode("down")end, hide=function()return modeSel==#modeID end,}, left= {x=190, y=160,w=100,h=80, rgb=color.white, code=function()keyDown.mode("left")end, hide=function()return levelSel==1 end,}, right= {x=350, y=160,w=100,h=80, rgb=color.white, code=function()keyDown.mode("right")end,hide=function()return levelSel==#modeLevel[modeID[modeSel]]end,}, - start={ x=1000, y=600,w=250,h=100, rgb=color.green, f=50, code=function() + start= {x=1000,y=600,w=250,h=100, rgb=color.green, f=50, code=function() loadGame(modeSel,levelSel)end}, custom= {x=275, y=420,w=200,h=90, rgb=color.yellow, code=function()gotoScene("custom")end}, back= {x=640, y=630,w=230,h=90, rgb=color.white, f=45, code=back}, }, + music={ + up= {x=1100,y=200,w=120,h=120, rgb=color.white,f=50,code=function()sel=(sel-2)%#musicID+1 end}, + play= {x=1100,y=340,w=120,h=120, rgb=color.white,f=40,code=function()BGM(musicID[sel])end}, + down= {x=1100,y=480,w=120,h=120, rgb=color.white,f=50,code=function()sel=sel%#musicID+1 end}, + back= {x=640, y=630,w=230,h=90, rgb=color.white,f=45,code=back}, + }, custom={ - up= {x=1000,y=220, w=100, h=100, rgb=color.white, code=function()optSel=(optSel-2)%#customID+1 end}, - down= {x=1000,y=460, w=100, h=100, rgb=color.white,f=50, code=function()optSel=optSel%#customID+1 end}, - left= {x=880, y=340, w=100, h=100, rgb=color.white,f=50, code=function()local k=customID[optSel]customSel[k]=(customSel[k]-2)%#customRange[k]+1 end}, - right= {x=1120,y=340, w=100, h=100, rgb=color.white,f=50, code=function()local k=customID[optSel]customSel[k]=customSel[k]%#customRange[k]+1 end}, - start1= {x=880, y=580, w=220, h=70, rgb=color.green, code=function()loadGame(0,1)end}, - start2= {x=1120,y=580, w=220, h=70, rgb=color.lightPurple, code=function()loadGame(0,2)end}, - draw= {x=1000,y=90, w=190, h=85, rgb=color.cyan, code=function()gotoScene("draw")end}, - back= {x=640, y=630 ,w=180, h=60, rgb=color.white, code=back}, + up= {x=1000,y=220, w=100,h=100, rgb=color.white, code=function()optSel=(optSel-2)%#customID+1 end}, + down= {x=1000,y=460, w=100,h=100, rgb=color.white,f=50, code=function()optSel=optSel%#customID+1 end}, + left= {x=880, y=340, w=100,h=100, rgb=color.white,f=50, code=function()customSel[optSel]=(customSel[optSel]-2)%#customRange[customID[optSel]]+1 end}, + right= {x=1120,y=340, w=100,h=100, rgb=color.white,f=50, code=function()customSel[optSel]=customSel[optSel]%#customRange[customID[optSel]]+1 end}, + start1= {x=880, y=580, w=220,h=70, rgb=color.green, code=function()loadGame(0,1)end}, + start2= {x=1120,y=580, w=220,h=70, rgb=color.lightPurple, code=function()loadGame(0,2)end}, + draw= {x=1000,y=90, w=190,h=85, rgb=color.cyan, code=function()gotoScene("draw")end}, + set1= {x=640, y=160, w=240,h=75, rgb=color.lightRed, code=function()useDefaultSet(1)end}, + set2= {x=640, y=250, w=240,h=75, rgb=color.lightRed, code=function()useDefaultSet(2)end}, + set3= {x=640, y=340, w=240,h=75, rgb=color.lightRed, code=function()useDefaultSet(3)end}, + set4= {x=640, y=430, w=240,h=75, rgb=color.lightRed, code=function()useDefaultSet(4)end}, + set5= {x=640, y=520, w=240,h=75, rgb=color.lightRed, code=function()useDefaultSet(5)end}, + back= {x=640, y=630, w=180,h=60, rgb=color.white, code=back}, }, draw={ - free= {x=700, y=80,w=120,h=120, f=45, rgb=color.lightGrey,code=function()pen=-1 end}, + any= {x=700, y=80,w=120,h=120, f=45, rgb=color.lightGrey,code=function()pen=-1 end}, block1= {x=840, y=80,w=120,h=120, f=65, rgb=color.red, code=function()pen=1 end}, block2= {x=980, y=80,w=120,h=120, f=65, rgb=color.green, code=function()pen=2 end}, block3= {x=1120,y=80,w=120,h=120, f=65, rgb=color.orange, code=function()pen=3 end}, @@ -288,7 +327,7 @@ Buttons={ gb3= {x=840, y=500,w=120,h=120, f=65, rgb=color.darkPurple,code=function()pen=11 end}, gb4= {x=980, y=500,w=120,h=120, f=65, rgb=color.darkRed, code=function()pen=12 end}, gb5= {x=1120,y=500,w=120,h=120, f=65, rgb=color.darkGreen,code=function()pen=13 end}, - erase= {x=840, y=640,w=120,h=120, f=70, rgb=color.grey, code=function()pen=0 end}, + space= {x=840, y=640,w=120,h=120, f=70, rgb=color.grey, code=function()pen=0 end}, clear= {x=1120,y=640,w=120,h=120, f=45, rgb=color.white, code=function() if clearSureTime>0 then for y=1,20 do for x=1,10 do preField[y][x]=0 end end @@ -334,18 +373,17 @@ Buttons={ BGM() setting.bgm=not setting.bgm BGM("blank") - end,down="vib",left="sfx"}, + end,down="voc",left="sfx"}, vib= {x=760,y=160, w=160, h=60,rgb=color.white, code=function() setting.vib=(setting.vib+1)%6 VIB(1) - end,up="sfx",down="fullscreen",left="swap"}, + end,up="sfx",down="fullscreen",left="swap",right="voc"}, voc= {x=940,y=160, w=160, h=60,rgb=color.white, hide=function() return not(kb.isDown("m")or false) end, code=function() setting.voc=not setting.voc - if setting.voc then VOICE("voc_nya")end end,up="sfx",down="fullscreen",left="vib"}, fullscreen= {x=850,y=230, w=340,h=60,rgb=color.white, code=function() setting.fullscreen=not setting.fullscreen diff --git a/main.lua b/main.lua index 7eaf0523..323d9403 100644 --- a/main.lua +++ b/main.lua @@ -1,7 +1,7 @@ local gc,tm=love.graphics,love.timer local ms,kb=love.mouse,love.keyboard local fs,sys=love.filesystem,love.system -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 +int,ceil,abs,rnd,max,min,sin,cos,atan=math.floor,math.ceil,math.abs,math.random,math.max,math.min,math.sin,math.cos,math.atan sub,gsub,find,format,byte,char=string.sub,string.gsub,string.find,string.format,string.byte,string.char ins,rem,concat=table.insert,table.remove,table.concat -- sort=table.sort @@ -52,16 +52,7 @@ gameEnv0={ freshLimit=1e99,target=1e99,reach=null, bg="none",bgm="race" } -customSel={ - drop=22,lock=22, - wait=1,fall=1, - next=7,hold=3, - sequence=1, - visible=1, - target=8, - freshLimit=4, - opponent=1, -} +customSel={22,22,1,1,7,3,1,1,8,4,1,1,1} preField={h=20} for i=1,18 do preField[i]={0,0,0,0,0,0,0,0,0,0}end for i=19,20 do preField[i]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}end @@ -146,16 +137,16 @@ virtualkey={ virtualkeyDown={F,F,F,F,F,F,F,F,F,F,F,F,F} virtualkeyPressTime={0,0,0,0,0,0,0,0,0,0,0,0,0} --User Data&User Setting -require"toolfunc" -require"list" -require"class" -require"gamefunc" -require"ai" -require"timer" -require"paint" -require"call&sys" -require"dataList" -require"texture" +require("toolfunc") +require("list") +require("class") +require("gamefunc") +require("ai") +require("timer") +require("paint") +require("call&sys") +require("dataList") +require("texture") userData,userSetting=fs.newFile("userdata"),fs.newFile("usersetting") if fs.getInfo("userdata")then diff --git a/paint.lua b/paint.lua index 291af3c2..63bedbf4 100644 --- a/paint.lua +++ b/paint.lua @@ -20,6 +20,7 @@ local frameColor={ local modeLevelColor={ EASY=color.cyan, NORMAL=color.green, + ["NORMAL+"]=color.darkGreen, HARD=color.magenta, ["HARD+"]=color.darkMagenta, LUNATIC=color.red, @@ -263,7 +264,7 @@ function Pnt.BG.game6() end gc.setColor(.3,.3,.3) local r=7-int(Timer()*.5)%7 - gc.draw(mouseBlock[r],640,360,Timer()%pi*6,400,400,scs[r][2]-.5,#blocks[r][0]-scs[r][1]+.5) + gc.draw(mouseBlock[r],640,360,Timer()%3.1416*6,400,400,scs[r][2]-.5,#blocks[r][0]-scs[r][1]+.5) end function Pnt.BG.rgb() gc.clear( @@ -321,7 +322,7 @@ function Pnt.main() gc.setColor(1,1,1) gc.draw(titleImage,300,30) setFont(30) - gc.print("Alpha V0.7.19",290,140) + gc.print("Alpha V0.7.20",290,140) gc.print(system,800,110) end function Pnt.mode() @@ -343,6 +344,22 @@ function Pnt.mode() end end end +function Pnt.music() + gc.setColor(1,1,1,.3+sin(Timer()*5)*.2) + gc.rectangle("fill",45,98+30*sel,237,30) + gc.setColor(.8,.8,.8) + gc.draw(drawableText.musicRoom,20,20) + gc.setColor(1,1,1) + gc.draw(drawableText.musicRoom,22,23) + gc.draw(drawableText.nowPlaying,520,83) + setFont(35) + for i=1,#musicID do + gc.print(musicID[i],50,90+30*i) + end + setFont(50) + gc.setColor(sin(Timer()*.5)*.2+.8,sin(Timer()*.7)*.2+.8,sin(Timer())*.2+.8) + gc.print(bgmPlaying or"",600,140) +end function Pnt.custom() gc.setColor(1,1,1,.3+sin(Timer()*8)*.2) gc.rectangle("fill",25,95+40*optSel,465,40) @@ -354,9 +371,9 @@ function Pnt.custom() local y=90+40*i gc.printf(text.customOption[k],30,y,320,"right") if text.customVal[k]then - gc.print(text.customVal[k][customSel[k]],350,y) + gc.print(text.customVal[k][customSel[i]],350,y) else - gc.print(customRange[k][customSel[k]],350,y) + gc.print(customRange[k][customSel[i]],350,y) end end end @@ -374,7 +391,7 @@ function Pnt.draw() local B=preField[y][x] if B>0 then drawPixel(y,x,B) - elseif B==-1 then + elseif B==0 then gc.line(30*x-25,605-30*y,30*x-5,625-30*y) gc.line(30*x-25,625-30*y,30*x-5,605-30*y) end @@ -393,9 +410,6 @@ function Pnt.draw() gc.setColor(blockColor[pen]) gc.rectangle("line",945,605,70,70) elseif pen==0 then - gc.setColor(.8,.8,.8) - gc.draw(drawableText.x,950,560) - else gc.setLineWidth(5) gc.setColor(.9,.9,.9) gc.line(960,620,1000,660) @@ -415,13 +429,14 @@ function Pnt.play() gc.origin() gc.setColor(1,1,1,P.result and max(20-P.endCounter,0)*.05 or 1) local h=#P.clearing - for j=1,#P.field do + local F=P.field + for j=1,#F do if j==P.clearing[h]and P.falling>-1 then h=h-1 else for i=1,10 do - if P.field[j][i]>0 then - gc.draw(blockSkinmini[P.field[j][i]],6*i-6,120-6*j) + if F[j][i]>0 then + gc.draw(blockSkinmini[F[j][i]],6*i-6,120-6*j) end end end @@ -457,7 +472,7 @@ function Pnt.play() gc.setColor(0,0,0,.6)gc.rectangle("fill",0,0,600,690)--Background gc.setLineWidth(7) gc.setColor(frameColor[P.strength])gc.rectangle("line",0,0,600,690,3)--Big frame - gc.translate(150,70) + gc.translate(150+P.fieldOffX,70+P.fieldOffY) if P.gameEnv.grid then gc.setLineWidth(1) gc.setColor(1,1,1,.2) @@ -572,6 +587,7 @@ function Pnt.play() gc.setColor(1,1,1) gc.rectangle("line",-17,-3,16,604.5)--Draw b2b bar boarder --B2B indictator + gc.translate(-P.fieldOffX,-P.fieldOffY) if P.gameEnv.hold then gc.setColor(1,1,1) @@ -699,9 +715,9 @@ function Pnt.setting() setFont(35) mStr("DAS:"..setting.das,290,278) mStr("ARR:"..setting.arr,506,278) - setFont(18) - mStr(text.softdropdas..setting.sddas,290,361) - mStr(text.softdroparr..setting.sdarr,506,361) + setFont(21) + mStr(text.softdropdas..setting.sddas,290,357) + mStr(text.softdroparr..setting.sdarr,506,357) gc.draw(blockSkin[7-int(Timer()*2)%7],820,480,nil,2) end function Pnt.setting2() diff --git a/texture.lua b/texture.lua index 3cfd2122..6fac79b2 100644 --- a/texture.lua +++ b/texture.lua @@ -79,7 +79,6 @@ groupCode=N("/image/mess/groupcode.png") payCode=N("/image/mess/paycode.png") drawableText={ question=T(100,"?"), - x=T(110,"×"), bpm=T(15,"BPM"), kpm=T(15,"KPM"), @@ -90,5 +89,7 @@ drawableText={ custom=T(80), keyboard=T(25),joystick=T(25), setting2Help=T(25), + musicRoom=T(80), + nowPlaying=T(50), } c=gc.setCanvas() \ No newline at end of file diff --git a/timer.lua b/timer.lua index 466e2b3b..039e77f5 100644 --- a/timer.lua +++ b/timer.lua @@ -3,6 +3,8 @@ local Timer=love.timer.getTime Tmr={} function Tmr.load() + local t=Timer() + ::R:: if loading==1 then if loadnum<=#voiceList then local N=voiceList[loadnum] @@ -258,6 +260,12 @@ function Tmr.play(dt) rem(P.shade,i) end end + if P.fieldOffY>0 then + P.fieldOffY=P.fieldOffY-(P.fieldOffY>3 and 2 or 1) + end + if P.fieldOffX~=0 then + P.fieldOffX=P.fieldOffX-(P.fieldOffX>0 and 1 or -1) + end for i=#P.bonus,1,-1 do local b=P.bonus[i] if b.inf then diff --git a/toolfunc.lua b/toolfunc.lua index 9998cbfe..8c6bcf0f 100644 --- a/toolfunc.lua +++ b/toolfunc.lua @@ -50,6 +50,8 @@ local drawableTextLoad={ "keyboard", "joystick", "setting2Help", + "musicRoom", + "nowPlaying", } function swapLanguage(l) text=require("language/"..langID[l]) @@ -202,27 +204,27 @@ local prevMenu={ load=love.event.quit, intro="quit", main="intro", + music="main", mode="main", custom="mode", draw=function() kb.setKeyRepeat(false) gotoScene("custom") end, - ready="mode", play=function() updateStat() clearTask("play") gotoScene(curMode.id~="custom"and"mode"or"custom","deck") end, - pause=null, - help="main", - stat="main", + pause=nil, setting=function() saveSetting() gotoScene("main") end, setting2="setting", setting3="setting", + help="main", + stat="main", }prevMenu.pause=prevMenu.play function back() local t=prevMenu[scene]